#
tokens: 49930/50000 171/821 files (page 2/38)
lines: off (toggle) GitHub
raw markdown copy
This is page 2 of 38. Use http://codebase.md/eyaltoledano/claude-task-master?page={x} to view the full context.

# Directory Structure

```
├── .changeset
│   ├── config.json
│   └── README.md
├── .claude
│   ├── agents
│   │   ├── task-checker.md
│   │   ├── task-executor.md
│   │   └── task-orchestrator.md
│   ├── commands
│   │   ├── dedupe.md
│   │   └── tm
│   │       ├── add-dependency
│   │       │   └── add-dependency.md
│   │       ├── add-subtask
│   │       │   ├── add-subtask.md
│   │       │   └── convert-task-to-subtask.md
│   │       ├── add-task
│   │       │   └── add-task.md
│   │       ├── analyze-complexity
│   │       │   └── analyze-complexity.md
│   │       ├── complexity-report
│   │       │   └── complexity-report.md
│   │       ├── expand
│   │       │   ├── expand-all-tasks.md
│   │       │   └── expand-task.md
│   │       ├── fix-dependencies
│   │       │   └── fix-dependencies.md
│   │       ├── generate
│   │       │   └── generate-tasks.md
│   │       ├── help.md
│   │       ├── init
│   │       │   ├── init-project-quick.md
│   │       │   └── init-project.md
│   │       ├── learn.md
│   │       ├── list
│   │       │   ├── list-tasks-by-status.md
│   │       │   ├── list-tasks-with-subtasks.md
│   │       │   └── list-tasks.md
│   │       ├── models
│   │       │   ├── setup-models.md
│   │       │   └── view-models.md
│   │       ├── next
│   │       │   └── next-task.md
│   │       ├── parse-prd
│   │       │   ├── parse-prd-with-research.md
│   │       │   └── parse-prd.md
│   │       ├── remove-dependency
│   │       │   └── remove-dependency.md
│   │       ├── remove-subtask
│   │       │   └── remove-subtask.md
│   │       ├── remove-subtasks
│   │       │   ├── remove-all-subtasks.md
│   │       │   └── remove-subtasks.md
│   │       ├── remove-task
│   │       │   └── remove-task.md
│   │       ├── set-status
│   │       │   ├── to-cancelled.md
│   │       │   ├── to-deferred.md
│   │       │   ├── to-done.md
│   │       │   ├── to-in-progress.md
│   │       │   ├── to-pending.md
│   │       │   └── to-review.md
│   │       ├── setup
│   │       │   ├── install-taskmaster.md
│   │       │   └── quick-install-taskmaster.md
│   │       ├── show
│   │       │   └── show-task.md
│   │       ├── status
│   │       │   └── project-status.md
│   │       ├── sync-readme
│   │       │   └── sync-readme.md
│   │       ├── tm-main.md
│   │       ├── update
│   │       │   ├── update-single-task.md
│   │       │   ├── update-task.md
│   │       │   └── update-tasks-from-id.md
│   │       ├── utils
│   │       │   └── analyze-project.md
│   │       ├── validate-dependencies
│   │       │   └── validate-dependencies.md
│   │       └── workflows
│   │           ├── auto-implement-tasks.md
│   │           ├── command-pipeline.md
│   │           └── smart-workflow.md
│   └── TM_COMMANDS_GUIDE.md
├── .coderabbit.yaml
├── .cursor
│   ├── mcp.json
│   └── rules
│       ├── ai_providers.mdc
│       ├── ai_services.mdc
│       ├── architecture.mdc
│       ├── changeset.mdc
│       ├── commands.mdc
│       ├── context_gathering.mdc
│       ├── cursor_rules.mdc
│       ├── dependencies.mdc
│       ├── dev_workflow.mdc
│       ├── git_workflow.mdc
│       ├── glossary.mdc
│       ├── mcp.mdc
│       ├── new_features.mdc
│       ├── self_improve.mdc
│       ├── tags.mdc
│       ├── taskmaster.mdc
│       ├── tasks.mdc
│       ├── telemetry.mdc
│       ├── test_workflow.mdc
│       ├── tests.mdc
│       ├── ui.mdc
│       └── utilities.mdc
├── .cursorignore
├── .env.example
├── .github
│   ├── ISSUE_TEMPLATE
│   │   ├── bug_report.md
│   │   ├── enhancements---feature-requests.md
│   │   └── feedback.md
│   ├── PULL_REQUEST_TEMPLATE
│   │   ├── bugfix.md
│   │   ├── config.yml
│   │   ├── feature.md
│   │   └── integration.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── scripts
│   │   ├── auto-close-duplicates.mjs
│   │   ├── backfill-duplicate-comments.mjs
│   │   ├── check-pre-release-mode.mjs
│   │   ├── parse-metrics.mjs
│   │   ├── release.mjs
│   │   ├── tag-extension.mjs
│   │   └── utils.mjs
│   └── workflows
│       ├── auto-close-duplicates.yml
│       ├── backfill-duplicate-comments.yml
│       ├── ci.yml
│       ├── claude-dedupe-issues.yml
│       ├── claude-docs-trigger.yml
│       ├── claude-docs-updater.yml
│       ├── claude-issue-triage.yml
│       ├── claude.yml
│       ├── extension-ci.yml
│       ├── extension-release.yml
│       ├── log-issue-events.yml
│       ├── pre-release.yml
│       ├── release-check.yml
│       ├── release.yml
│       ├── update-models-md.yml
│       └── weekly-metrics-discord.yml
├── .gitignore
├── .kiro
│   ├── hooks
│   │   ├── tm-code-change-task-tracker.kiro.hook
│   │   ├── tm-complexity-analyzer.kiro.hook
│   │   ├── tm-daily-standup-assistant.kiro.hook
│   │   ├── tm-git-commit-task-linker.kiro.hook
│   │   ├── tm-pr-readiness-checker.kiro.hook
│   │   ├── tm-task-dependency-auto-progression.kiro.hook
│   │   └── tm-test-success-task-completer.kiro.hook
│   ├── settings
│   │   └── mcp.json
│   └── steering
│       ├── dev_workflow.md
│       ├── kiro_rules.md
│       ├── self_improve.md
│       ├── taskmaster_hooks_workflow.md
│       └── taskmaster.md
├── .manypkg.json
├── .mcp.json
├── .npmignore
├── .nvmrc
├── .taskmaster
│   ├── CLAUDE.md
│   ├── config.json
│   ├── docs
│   │   ├── MIGRATION-ROADMAP.md
│   │   ├── prd-tm-start.txt
│   │   ├── prd.txt
│   │   ├── README.md
│   │   ├── research
│   │   │   ├── 2025-06-14_how-can-i-improve-the-scope-up-and-scope-down-comm.md
│   │   │   ├── 2025-06-14_should-i-be-using-any-specific-libraries-for-this.md
│   │   │   ├── 2025-06-14_test-save-functionality.md
│   │   │   ├── 2025-06-14_test-the-fix-for-duplicate-saves-final-test.md
│   │   │   └── 2025-08-01_do-we-need-to-add-new-commands-or-can-we-just-weap.md
│   │   ├── task-template-importing-prd.txt
│   │   ├── test-prd.txt
│   │   └── tm-core-phase-1.txt
│   ├── reports
│   │   ├── task-complexity-report_cc-kiro-hooks.json
│   │   ├── task-complexity-report_test-prd-tag.json
│   │   ├── task-complexity-report_tm-core-phase-1.json
│   │   ├── task-complexity-report.json
│   │   └── tm-core-complexity.json
│   ├── state.json
│   ├── tasks
│   │   ├── task_001_tm-start.txt
│   │   ├── task_002_tm-start.txt
│   │   ├── task_003_tm-start.txt
│   │   ├── task_004_tm-start.txt
│   │   ├── task_007_tm-start.txt
│   │   └── tasks.json
│   └── templates
│       └── example_prd.txt
├── .vscode
│   ├── extensions.json
│   └── settings.json
├── apps
│   ├── cli
│   │   ├── CHANGELOG.md
│   │   ├── package.json
│   │   ├── src
│   │   │   ├── commands
│   │   │   │   ├── auth.command.ts
│   │   │   │   ├── context.command.ts
│   │   │   │   ├── list.command.ts
│   │   │   │   ├── set-status.command.ts
│   │   │   │   ├── show.command.ts
│   │   │   │   └── start.command.ts
│   │   │   ├── index.ts
│   │   │   ├── ui
│   │   │   │   ├── components
│   │   │   │   │   ├── dashboard.component.ts
│   │   │   │   │   ├── header.component.ts
│   │   │   │   │   ├── index.ts
│   │   │   │   │   ├── next-task.component.ts
│   │   │   │   │   ├── suggested-steps.component.ts
│   │   │   │   │   └── task-detail.component.ts
│   │   │   │   └── index.ts
│   │   │   └── utils
│   │   │       ├── auto-update.ts
│   │   │       └── ui.ts
│   │   └── tsconfig.json
│   ├── docs
│   │   ├── archive
│   │   │   ├── ai-client-utils-example.mdx
│   │   │   ├── ai-development-workflow.mdx
│   │   │   ├── command-reference.mdx
│   │   │   ├── configuration.mdx
│   │   │   ├── cursor-setup.mdx
│   │   │   ├── examples.mdx
│   │   │   └── Installation.mdx
│   │   ├── best-practices
│   │   │   ├── advanced-tasks.mdx
│   │   │   ├── configuration-advanced.mdx
│   │   │   └── index.mdx
│   │   ├── capabilities
│   │   │   ├── cli-root-commands.mdx
│   │   │   ├── index.mdx
│   │   │   ├── mcp.mdx
│   │   │   └── task-structure.mdx
│   │   ├── CHANGELOG.md
│   │   ├── docs.json
│   │   ├── favicon.svg
│   │   ├── getting-started
│   │   │   ├── contribute.mdx
│   │   │   ├── faq.mdx
│   │   │   └── quick-start
│   │   │       ├── configuration-quick.mdx
│   │   │       ├── execute-quick.mdx
│   │   │       ├── installation.mdx
│   │   │       ├── moving-forward.mdx
│   │   │       ├── prd-quick.mdx
│   │   │       ├── quick-start.mdx
│   │   │       ├── requirements.mdx
│   │   │       ├── rules-quick.mdx
│   │   │       └── tasks-quick.mdx
│   │   ├── introduction.mdx
│   │   ├── licensing.md
│   │   ├── logo
│   │   │   ├── dark.svg
│   │   │   ├── light.svg
│   │   │   └── task-master-logo.png
│   │   ├── package.json
│   │   ├── README.md
│   │   ├── style.css
│   │   ├── vercel.json
│   │   └── whats-new.mdx
│   └── extension
│       ├── .vscodeignore
│       ├── assets
│       │   ├── banner.png
│       │   ├── icon-dark.svg
│       │   ├── icon-light.svg
│       │   ├── icon.png
│       │   ├── screenshots
│       │   │   ├── kanban-board.png
│       │   │   └── task-details.png
│       │   └── sidebar-icon.svg
│       ├── CHANGELOG.md
│       ├── components.json
│       ├── docs
│       │   ├── extension-CI-setup.md
│       │   └── extension-development-guide.md
│       ├── esbuild.js
│       ├── LICENSE
│       ├── package.json
│       ├── package.mjs
│       ├── package.publish.json
│       ├── README.md
│       ├── src
│       │   ├── components
│       │   │   ├── ConfigView.tsx
│       │   │   ├── constants.ts
│       │   │   ├── TaskDetails
│       │   │   │   ├── AIActionsSection.tsx
│       │   │   │   ├── DetailsSection.tsx
│       │   │   │   ├── PriorityBadge.tsx
│       │   │   │   ├── SubtasksSection.tsx
│       │   │   │   ├── TaskMetadataSidebar.tsx
│       │   │   │   └── useTaskDetails.ts
│       │   │   ├── TaskDetailsView.tsx
│       │   │   ├── TaskMasterLogo.tsx
│       │   │   └── ui
│       │   │       ├── badge.tsx
│       │   │       ├── breadcrumb.tsx
│       │   │       ├── button.tsx
│       │   │       ├── card.tsx
│       │   │       ├── collapsible.tsx
│       │   │       ├── CollapsibleSection.tsx
│       │   │       ├── dropdown-menu.tsx
│       │   │       ├── label.tsx
│       │   │       ├── scroll-area.tsx
│       │   │       ├── separator.tsx
│       │   │       ├── shadcn-io
│       │   │       │   └── kanban
│       │   │       │       └── index.tsx
│       │   │       └── textarea.tsx
│       │   ├── extension.ts
│       │   ├── index.ts
│       │   ├── lib
│       │   │   └── utils.ts
│       │   ├── services
│       │   │   ├── config-service.ts
│       │   │   ├── error-handler.ts
│       │   │   ├── notification-preferences.ts
│       │   │   ├── polling-service.ts
│       │   │   ├── polling-strategies.ts
│       │   │   ├── sidebar-webview-manager.ts
│       │   │   ├── task-repository.ts
│       │   │   ├── terminal-manager.ts
│       │   │   └── webview-manager.ts
│       │   ├── test
│       │   │   └── extension.test.ts
│       │   ├── utils
│       │   │   ├── configManager.ts
│       │   │   ├── connectionManager.ts
│       │   │   ├── errorHandler.ts
│       │   │   ├── event-emitter.ts
│       │   │   ├── logger.ts
│       │   │   ├── mcpClient.ts
│       │   │   ├── notificationPreferences.ts
│       │   │   └── task-master-api
│       │   │       ├── cache
│       │   │       │   └── cache-manager.ts
│       │   │       ├── index.ts
│       │   │       ├── mcp-client.ts
│       │   │       ├── transformers
│       │   │       │   └── task-transformer.ts
│       │   │       └── types
│       │   │           └── index.ts
│       │   └── webview
│       │       ├── App.tsx
│       │       ├── components
│       │       │   ├── AppContent.tsx
│       │       │   ├── EmptyState.tsx
│       │       │   ├── ErrorBoundary.tsx
│       │       │   ├── PollingStatus.tsx
│       │       │   ├── PriorityBadge.tsx
│       │       │   ├── SidebarView.tsx
│       │       │   ├── TagDropdown.tsx
│       │       │   ├── TaskCard.tsx
│       │       │   ├── TaskEditModal.tsx
│       │       │   ├── TaskMasterKanban.tsx
│       │       │   ├── ToastContainer.tsx
│       │       │   └── ToastNotification.tsx
│       │       ├── constants
│       │       │   └── index.ts
│       │       ├── contexts
│       │       │   └── VSCodeContext.tsx
│       │       ├── hooks
│       │       │   ├── useTaskQueries.ts
│       │       │   ├── useVSCodeMessages.ts
│       │       │   └── useWebviewHeight.ts
│       │       ├── index.css
│       │       ├── index.tsx
│       │       ├── providers
│       │       │   └── QueryProvider.tsx
│       │       ├── reducers
│       │       │   └── appReducer.ts
│       │       ├── sidebar.tsx
│       │       ├── types
│       │       │   └── index.ts
│       │       └── utils
│       │           ├── logger.ts
│       │           └── toast.ts
│       └── tsconfig.json
├── assets
│   ├── .windsurfrules
│   ├── AGENTS.md
│   ├── claude
│   │   ├── agents
│   │   │   ├── task-checker.md
│   │   │   ├── task-executor.md
│   │   │   └── task-orchestrator.md
│   │   ├── commands
│   │   │   └── tm
│   │   │       ├── add-dependency
│   │   │       │   └── add-dependency.md
│   │   │       ├── add-subtask
│   │   │       │   ├── add-subtask.md
│   │   │       │   └── convert-task-to-subtask.md
│   │   │       ├── add-task
│   │   │       │   └── add-task.md
│   │   │       ├── analyze-complexity
│   │   │       │   └── analyze-complexity.md
│   │   │       ├── clear-subtasks
│   │   │       │   ├── clear-all-subtasks.md
│   │   │       │   └── clear-subtasks.md
│   │   │       ├── complexity-report
│   │   │       │   └── complexity-report.md
│   │   │       ├── expand
│   │   │       │   ├── expand-all-tasks.md
│   │   │       │   └── expand-task.md
│   │   │       ├── fix-dependencies
│   │   │       │   └── fix-dependencies.md
│   │   │       ├── generate
│   │   │       │   └── generate-tasks.md
│   │   │       ├── help.md
│   │   │       ├── init
│   │   │       │   ├── init-project-quick.md
│   │   │       │   └── init-project.md
│   │   │       ├── learn.md
│   │   │       ├── list
│   │   │       │   ├── list-tasks-by-status.md
│   │   │       │   ├── list-tasks-with-subtasks.md
│   │   │       │   └── list-tasks.md
│   │   │       ├── models
│   │   │       │   ├── setup-models.md
│   │   │       │   └── view-models.md
│   │   │       ├── next
│   │   │       │   └── next-task.md
│   │   │       ├── parse-prd
│   │   │       │   ├── parse-prd-with-research.md
│   │   │       │   └── parse-prd.md
│   │   │       ├── remove-dependency
│   │   │       │   └── remove-dependency.md
│   │   │       ├── remove-subtask
│   │   │       │   └── remove-subtask.md
│   │   │       ├── remove-subtasks
│   │   │       │   ├── remove-all-subtasks.md
│   │   │       │   └── remove-subtasks.md
│   │   │       ├── remove-task
│   │   │       │   └── remove-task.md
│   │   │       ├── set-status
│   │   │       │   ├── to-cancelled.md
│   │   │       │   ├── to-deferred.md
│   │   │       │   ├── to-done.md
│   │   │       │   ├── to-in-progress.md
│   │   │       │   ├── to-pending.md
│   │   │       │   └── to-review.md
│   │   │       ├── setup
│   │   │       │   ├── install-taskmaster.md
│   │   │       │   └── quick-install-taskmaster.md
│   │   │       ├── show
│   │   │       │   └── show-task.md
│   │   │       ├── status
│   │   │       │   └── project-status.md
│   │   │       ├── sync-readme
│   │   │       │   └── sync-readme.md
│   │   │       ├── tm-main.md
│   │   │       ├── update
│   │   │       │   ├── update-single-task.md
│   │   │       │   ├── update-task.md
│   │   │       │   └── update-tasks-from-id.md
│   │   │       ├── utils
│   │   │       │   └── analyze-project.md
│   │   │       ├── validate-dependencies
│   │   │       │   └── validate-dependencies.md
│   │   │       └── workflows
│   │   │           ├── auto-implement-tasks.md
│   │   │           ├── command-pipeline.md
│   │   │           └── smart-workflow.md
│   │   └── TM_COMMANDS_GUIDE.md
│   ├── config.json
│   ├── env.example
│   ├── example_prd.txt
│   ├── gitignore
│   ├── kiro-hooks
│   │   ├── tm-code-change-task-tracker.kiro.hook
│   │   ├── tm-complexity-analyzer.kiro.hook
│   │   ├── tm-daily-standup-assistant.kiro.hook
│   │   ├── tm-git-commit-task-linker.kiro.hook
│   │   ├── tm-pr-readiness-checker.kiro.hook
│   │   ├── tm-task-dependency-auto-progression.kiro.hook
│   │   └── tm-test-success-task-completer.kiro.hook
│   ├── roocode
│   │   ├── .roo
│   │   │   ├── rules-architect
│   │   │   │   └── architect-rules
│   │   │   ├── rules-ask
│   │   │   │   └── ask-rules
│   │   │   ├── rules-code
│   │   │   │   └── code-rules
│   │   │   ├── rules-debug
│   │   │   │   └── debug-rules
│   │   │   ├── rules-orchestrator
│   │   │   │   └── orchestrator-rules
│   │   │   └── rules-test
│   │   │       └── test-rules
│   │   └── .roomodes
│   ├── rules
│   │   ├── cursor_rules.mdc
│   │   ├── dev_workflow.mdc
│   │   ├── self_improve.mdc
│   │   ├── taskmaster_hooks_workflow.mdc
│   │   └── taskmaster.mdc
│   └── scripts_README.md
├── bin
│   └── task-master.js
├── biome.json
├── CHANGELOG.md
├── CLAUDE.md
├── context
│   ├── chats
│   │   ├── add-task-dependencies-1.md
│   │   └── max-min-tokens.txt.md
│   ├── fastmcp-core.txt
│   ├── fastmcp-docs.txt
│   ├── MCP_INTEGRATION.md
│   ├── mcp-js-sdk-docs.txt
│   ├── mcp-protocol-repo.txt
│   ├── mcp-protocol-schema-03262025.json
│   └── mcp-protocol-spec.txt
├── CONTRIBUTING.md
├── docs
│   ├── CLI-COMMANDER-PATTERN.md
│   ├── command-reference.md
│   ├── configuration.md
│   ├── contributor-docs
│   │   └── testing-roo-integration.md
│   ├── cross-tag-task-movement.md
│   ├── examples
│   │   └── claude-code-usage.md
│   ├── examples.md
│   ├── licensing.md
│   ├── mcp-provider-guide.md
│   ├── mcp-provider.md
│   ├── migration-guide.md
│   ├── models.md
│   ├── providers
│   │   └── gemini-cli.md
│   ├── README.md
│   ├── scripts
│   │   └── models-json-to-markdown.js
│   ├── task-structure.md
│   └── tutorial.md
├── images
│   └── logo.png
├── index.js
├── jest.config.js
├── jest.resolver.cjs
├── LICENSE
├── llms-install.md
├── mcp-server
│   ├── server.js
│   └── src
│       ├── core
│       │   ├── __tests__
│       │   │   └── context-manager.test.js
│       │   ├── context-manager.js
│       │   ├── direct-functions
│       │   │   ├── add-dependency.js
│       │   │   ├── add-subtask.js
│       │   │   ├── add-tag.js
│       │   │   ├── add-task.js
│       │   │   ├── analyze-task-complexity.js
│       │   │   ├── cache-stats.js
│       │   │   ├── clear-subtasks.js
│       │   │   ├── complexity-report.js
│       │   │   ├── copy-tag.js
│       │   │   ├── create-tag-from-branch.js
│       │   │   ├── delete-tag.js
│       │   │   ├── expand-all-tasks.js
│       │   │   ├── expand-task.js
│       │   │   ├── fix-dependencies.js
│       │   │   ├── generate-task-files.js
│       │   │   ├── initialize-project.js
│       │   │   ├── list-tags.js
│       │   │   ├── list-tasks.js
│       │   │   ├── models.js
│       │   │   ├── move-task-cross-tag.js
│       │   │   ├── move-task.js
│       │   │   ├── next-task.js
│       │   │   ├── parse-prd.js
│       │   │   ├── remove-dependency.js
│       │   │   ├── remove-subtask.js
│       │   │   ├── remove-task.js
│       │   │   ├── rename-tag.js
│       │   │   ├── research.js
│       │   │   ├── response-language.js
│       │   │   ├── rules.js
│       │   │   ├── scope-down.js
│       │   │   ├── scope-up.js
│       │   │   ├── set-task-status.js
│       │   │   ├── show-task.js
│       │   │   ├── update-subtask-by-id.js
│       │   │   ├── update-task-by-id.js
│       │   │   ├── update-tasks.js
│       │   │   ├── use-tag.js
│       │   │   └── validate-dependencies.js
│       │   ├── task-master-core.js
│       │   └── utils
│       │       ├── env-utils.js
│       │       └── path-utils.js
│       ├── custom-sdk
│       │   ├── errors.js
│       │   ├── index.js
│       │   ├── json-extractor.js
│       │   ├── language-model.js
│       │   ├── message-converter.js
│       │   └── schema-converter.js
│       ├── index.js
│       ├── logger.js
│       ├── providers
│       │   └── mcp-provider.js
│       └── tools
│           ├── add-dependency.js
│           ├── add-subtask.js
│           ├── add-tag.js
│           ├── add-task.js
│           ├── analyze.js
│           ├── clear-subtasks.js
│           ├── complexity-report.js
│           ├── copy-tag.js
│           ├── delete-tag.js
│           ├── expand-all.js
│           ├── expand-task.js
│           ├── fix-dependencies.js
│           ├── generate.js
│           ├── get-operation-status.js
│           ├── get-task.js
│           ├── get-tasks.js
│           ├── index.js
│           ├── initialize-project.js
│           ├── list-tags.js
│           ├── models.js
│           ├── move-task.js
│           ├── next-task.js
│           ├── parse-prd.js
│           ├── remove-dependency.js
│           ├── remove-subtask.js
│           ├── remove-task.js
│           ├── rename-tag.js
│           ├── research.js
│           ├── response-language.js
│           ├── rules.js
│           ├── scope-down.js
│           ├── scope-up.js
│           ├── set-task-status.js
│           ├── update-subtask.js
│           ├── update-task.js
│           ├── update.js
│           ├── use-tag.js
│           ├── utils.js
│           └── validate-dependencies.js
├── mcp-test.js
├── output.json
├── package-lock.json
├── package.json
├── packages
│   ├── build-config
│   │   ├── CHANGELOG.md
│   │   ├── package.json
│   │   ├── src
│   │   │   └── tsdown.base.ts
│   │   └── tsconfig.json
│   └── tm-core
│       ├── .gitignore
│       ├── CHANGELOG.md
│       ├── docs
│       │   └── listTasks-architecture.md
│       ├── package.json
│       ├── POC-STATUS.md
│       ├── README.md
│       ├── src
│       │   ├── auth
│       │   │   ├── auth-manager.test.ts
│       │   │   ├── auth-manager.ts
│       │   │   ├── config.ts
│       │   │   ├── credential-store.test.ts
│       │   │   ├── credential-store.ts
│       │   │   ├── index.ts
│       │   │   ├── oauth-service.ts
│       │   │   ├── supabase-session-storage.ts
│       │   │   └── types.ts
│       │   ├── clients
│       │   │   ├── index.ts
│       │   │   └── supabase-client.ts
│       │   ├── config
│       │   │   ├── config-manager.spec.ts
│       │   │   ├── config-manager.ts
│       │   │   ├── index.ts
│       │   │   └── services
│       │   │       ├── config-loader.service.spec.ts
│       │   │       ├── config-loader.service.ts
│       │   │       ├── config-merger.service.spec.ts
│       │   │       ├── config-merger.service.ts
│       │   │       ├── config-persistence.service.spec.ts
│       │   │       ├── config-persistence.service.ts
│       │   │       ├── environment-config-provider.service.spec.ts
│       │   │       ├── environment-config-provider.service.ts
│       │   │       ├── index.ts
│       │   │       ├── runtime-state-manager.service.spec.ts
│       │   │       └── runtime-state-manager.service.ts
│       │   ├── constants
│       │   │   └── index.ts
│       │   ├── entities
│       │   │   └── task.entity.ts
│       │   ├── errors
│       │   │   ├── index.ts
│       │   │   └── task-master-error.ts
│       │   ├── executors
│       │   │   ├── base-executor.ts
│       │   │   ├── claude-executor.ts
│       │   │   ├── executor-factory.ts
│       │   │   ├── executor-service.ts
│       │   │   ├── index.ts
│       │   │   └── types.ts
│       │   ├── index.ts
│       │   ├── interfaces
│       │   │   ├── ai-provider.interface.ts
│       │   │   ├── configuration.interface.ts
│       │   │   ├── index.ts
│       │   │   └── storage.interface.ts
│       │   ├── logger
│       │   │   ├── factory.ts
│       │   │   ├── index.ts
│       │   │   └── logger.ts
│       │   ├── mappers
│       │   │   └── TaskMapper.ts
│       │   ├── parser
│       │   │   └── index.ts
│       │   ├── providers
│       │   │   ├── ai
│       │   │   │   ├── base-provider.ts
│       │   │   │   └── index.ts
│       │   │   └── index.ts
│       │   ├── repositories
│       │   │   ├── supabase-task-repository.ts
│       │   │   └── task-repository.interface.ts
│       │   ├── services
│       │   │   ├── index.ts
│       │   │   ├── organization.service.ts
│       │   │   ├── task-execution-service.ts
│       │   │   └── task-service.ts
│       │   ├── storage
│       │   │   ├── api-storage.ts
│       │   │   ├── file-storage
│       │   │   │   ├── file-operations.ts
│       │   │   │   ├── file-storage.ts
│       │   │   │   ├── format-handler.ts
│       │   │   │   ├── index.ts
│       │   │   │   └── path-resolver.ts
│       │   │   ├── index.ts
│       │   │   └── storage-factory.ts
│       │   ├── subpath-exports.test.ts
│       │   ├── task-master-core.ts
│       │   ├── types
│       │   │   ├── database.types.ts
│       │   │   ├── index.ts
│       │   │   └── legacy.ts
│       │   └── utils
│       │       ├── id-generator.ts
│       │       └── index.ts
│       ├── tests
│       │   ├── integration
│       │   │   └── list-tasks.test.ts
│       │   ├── mocks
│       │   │   └── mock-provider.ts
│       │   ├── setup.ts
│       │   └── unit
│       │       ├── base-provider.test.ts
│       │       ├── executor.test.ts
│       │       └── smoke.test.ts
│       ├── tsconfig.json
│       └── vitest.config.ts
├── README-task-master.md
├── README.md
├── scripts
│   ├── dev.js
│   ├── init.js
│   ├── modules
│   │   ├── ai-services-unified.js
│   │   ├── commands.js
│   │   ├── config-manager.js
│   │   ├── dependency-manager.js
│   │   ├── index.js
│   │   ├── prompt-manager.js
│   │   ├── supported-models.json
│   │   ├── sync-readme.js
│   │   ├── task-manager
│   │   │   ├── add-subtask.js
│   │   │   ├── add-task.js
│   │   │   ├── analyze-task-complexity.js
│   │   │   ├── clear-subtasks.js
│   │   │   ├── expand-all-tasks.js
│   │   │   ├── expand-task.js
│   │   │   ├── find-next-task.js
│   │   │   ├── generate-task-files.js
│   │   │   ├── is-task-dependent.js
│   │   │   ├── list-tasks.js
│   │   │   ├── migrate.js
│   │   │   ├── models.js
│   │   │   ├── move-task.js
│   │   │   ├── parse-prd
│   │   │   │   ├── index.js
│   │   │   │   ├── parse-prd-config.js
│   │   │   │   ├── parse-prd-helpers.js
│   │   │   │   ├── parse-prd-non-streaming.js
│   │   │   │   ├── parse-prd-streaming.js
│   │   │   │   └── parse-prd.js
│   │   │   ├── remove-subtask.js
│   │   │   ├── remove-task.js
│   │   │   ├── research.js
│   │   │   ├── response-language.js
│   │   │   ├── scope-adjustment.js
│   │   │   ├── set-task-status.js
│   │   │   ├── tag-management.js
│   │   │   ├── task-exists.js
│   │   │   ├── update-single-task-status.js
│   │   │   ├── update-subtask-by-id.js
│   │   │   ├── update-task-by-id.js
│   │   │   └── update-tasks.js
│   │   ├── task-manager.js
│   │   ├── ui.js
│   │   ├── update-config-tokens.js
│   │   ├── utils
│   │   │   ├── contextGatherer.js
│   │   │   ├── fuzzyTaskSearch.js
│   │   │   └── git-utils.js
│   │   └── utils.js
│   ├── task-complexity-report.json
│   ├── test-claude-errors.js
│   └── test-claude.js
├── src
│   ├── ai-providers
│   │   ├── anthropic.js
│   │   ├── azure.js
│   │   ├── base-provider.js
│   │   ├── bedrock.js
│   │   ├── claude-code.js
│   │   ├── custom-sdk
│   │   │   ├── claude-code
│   │   │   │   ├── errors.js
│   │   │   │   ├── index.js
│   │   │   │   ├── json-extractor.js
│   │   │   │   ├── language-model.js
│   │   │   │   ├── message-converter.js
│   │   │   │   └── types.js
│   │   │   └── grok-cli
│   │   │       ├── errors.js
│   │   │       ├── index.js
│   │   │       ├── json-extractor.js
│   │   │       ├── language-model.js
│   │   │       ├── message-converter.js
│   │   │       └── types.js
│   │   ├── gemini-cli.js
│   │   ├── google-vertex.js
│   │   ├── google.js
│   │   ├── grok-cli.js
│   │   ├── groq.js
│   │   ├── index.js
│   │   ├── ollama.js
│   │   ├── openai.js
│   │   ├── openrouter.js
│   │   ├── perplexity.js
│   │   └── xai.js
│   ├── constants
│   │   ├── commands.js
│   │   ├── paths.js
│   │   ├── profiles.js
│   │   ├── providers.js
│   │   ├── rules-actions.js
│   │   ├── task-priority.js
│   │   └── task-status.js
│   ├── profiles
│   │   ├── amp.js
│   │   ├── base-profile.js
│   │   ├── claude.js
│   │   ├── cline.js
│   │   ├── codex.js
│   │   ├── cursor.js
│   │   ├── gemini.js
│   │   ├── index.js
│   │   ├── kilo.js
│   │   ├── kiro.js
│   │   ├── opencode.js
│   │   ├── roo.js
│   │   ├── trae.js
│   │   ├── vscode.js
│   │   ├── windsurf.js
│   │   └── zed.js
│   ├── progress
│   │   ├── base-progress-tracker.js
│   │   ├── cli-progress-factory.js
│   │   ├── parse-prd-tracker.js
│   │   ├── progress-tracker-builder.js
│   │   └── tracker-ui.js
│   ├── prompts
│   │   ├── add-task.json
│   │   ├── analyze-complexity.json
│   │   ├── expand-task.json
│   │   ├── parse-prd.json
│   │   ├── README.md
│   │   ├── research.json
│   │   ├── schemas
│   │   │   ├── parameter.schema.json
│   │   │   ├── prompt-template.schema.json
│   │   │   ├── README.md
│   │   │   └── variant.schema.json
│   │   ├── update-subtask.json
│   │   ├── update-task.json
│   │   └── update-tasks.json
│   ├── provider-registry
│   │   └── index.js
│   ├── task-master.js
│   ├── ui
│   │   ├── confirm.js
│   │   ├── indicators.js
│   │   └── parse-prd.js
│   └── utils
│       ├── asset-resolver.js
│       ├── create-mcp-config.js
│       ├── format.js
│       ├── getVersion.js
│       ├── logger-utils.js
│       ├── manage-gitignore.js
│       ├── path-utils.js
│       ├── profiles.js
│       ├── rule-transformer.js
│       ├── stream-parser.js
│       └── timeout-manager.js
├── test-clean-tags.js
├── test-config-manager.js
├── test-prd.txt
├── test-tag-functions.js
├── test-version-check-full.js
├── test-version-check.js
├── tests
│   ├── e2e
│   │   ├── e2e_helpers.sh
│   │   ├── parse_llm_output.cjs
│   │   ├── run_e2e.sh
│   │   ├── run_fallback_verification.sh
│   │   └── test_llm_analysis.sh
│   ├── fixture
│   │   └── test-tasks.json
│   ├── fixtures
│   │   ├── .taskmasterconfig
│   │   ├── sample-claude-response.js
│   │   ├── sample-prd.txt
│   │   └── sample-tasks.js
│   ├── integration
│   │   ├── claude-code-optional.test.js
│   │   ├── cli
│   │   │   ├── commands.test.js
│   │   │   ├── complex-cross-tag-scenarios.test.js
│   │   │   └── move-cross-tag.test.js
│   │   ├── manage-gitignore.test.js
│   │   ├── mcp-server
│   │   │   └── direct-functions.test.js
│   │   ├── move-task-cross-tag.integration.test.js
│   │   ├── move-task-simple.integration.test.js
│   │   └── profiles
│   │       ├── amp-init-functionality.test.js
│   │       ├── claude-init-functionality.test.js
│   │       ├── cline-init-functionality.test.js
│   │       ├── codex-init-functionality.test.js
│   │       ├── cursor-init-functionality.test.js
│   │       ├── gemini-init-functionality.test.js
│   │       ├── opencode-init-functionality.test.js
│   │       ├── roo-files-inclusion.test.js
│   │       ├── roo-init-functionality.test.js
│   │       ├── rules-files-inclusion.test.js
│   │       ├── trae-init-functionality.test.js
│   │       ├── vscode-init-functionality.test.js
│   │       └── windsurf-init-functionality.test.js
│   ├── manual
│   │   ├── progress
│   │   │   ├── parse-prd-analysis.js
│   │   │   ├── test-parse-prd.js
│   │   │   └── TESTING_GUIDE.md
│   │   └── prompts
│   │       ├── prompt-test.js
│   │       └── README.md
│   ├── README.md
│   ├── setup.js
│   └── unit
│       ├── ai-providers
│       │   ├── claude-code.test.js
│       │   ├── custom-sdk
│       │   │   └── claude-code
│       │   │       └── language-model.test.js
│       │   ├── gemini-cli.test.js
│       │   ├── mcp-components.test.js
│       │   └── openai.test.js
│       ├── ai-services-unified.test.js
│       ├── commands.test.js
│       ├── config-manager.test.js
│       ├── config-manager.test.mjs
│       ├── dependency-manager.test.js
│       ├── init.test.js
│       ├── initialize-project.test.js
│       ├── kebab-case-validation.test.js
│       ├── manage-gitignore.test.js
│       ├── mcp
│       │   └── tools
│       │       ├── __mocks__
│       │       │   └── move-task.js
│       │       ├── add-task.test.js
│       │       ├── analyze-complexity.test.js
│       │       ├── expand-all.test.js
│       │       ├── get-tasks.test.js
│       │       ├── initialize-project.test.js
│       │       ├── move-task-cross-tag-options.test.js
│       │       ├── move-task-cross-tag.test.js
│       │       └── remove-task.test.js
│       ├── mcp-providers
│       │   ├── mcp-components.test.js
│       │   └── mcp-provider.test.js
│       ├── parse-prd.test.js
│       ├── profiles
│       │   ├── amp-integration.test.js
│       │   ├── claude-integration.test.js
│       │   ├── cline-integration.test.js
│       │   ├── codex-integration.test.js
│       │   ├── cursor-integration.test.js
│       │   ├── gemini-integration.test.js
│       │   ├── kilo-integration.test.js
│       │   ├── kiro-integration.test.js
│       │   ├── mcp-config-validation.test.js
│       │   ├── opencode-integration.test.js
│       │   ├── profile-safety-check.test.js
│       │   ├── roo-integration.test.js
│       │   ├── rule-transformer-cline.test.js
│       │   ├── rule-transformer-cursor.test.js
│       │   ├── rule-transformer-gemini.test.js
│       │   ├── rule-transformer-kilo.test.js
│       │   ├── rule-transformer-kiro.test.js
│       │   ├── rule-transformer-opencode.test.js
│       │   ├── rule-transformer-roo.test.js
│       │   ├── rule-transformer-trae.test.js
│       │   ├── rule-transformer-vscode.test.js
│       │   ├── rule-transformer-windsurf.test.js
│       │   ├── rule-transformer-zed.test.js
│       │   ├── rule-transformer.test.js
│       │   ├── selective-profile-removal.test.js
│       │   ├── subdirectory-support.test.js
│       │   ├── trae-integration.test.js
│       │   ├── vscode-integration.test.js
│       │   ├── windsurf-integration.test.js
│       │   └── zed-integration.test.js
│       ├── progress
│       │   └── base-progress-tracker.test.js
│       ├── prompt-manager.test.js
│       ├── prompts
│       │   └── expand-task-prompt.test.js
│       ├── providers
│       │   └── provider-registry.test.js
│       ├── scripts
│       │   └── modules
│       │       ├── commands
│       │       │   ├── move-cross-tag.test.js
│       │       │   └── README.md
│       │       ├── dependency-manager
│       │       │   ├── circular-dependencies.test.js
│       │       │   ├── cross-tag-dependencies.test.js
│       │       │   └── fix-dependencies-command.test.js
│       │       ├── task-manager
│       │       │   ├── add-subtask.test.js
│       │       │   ├── add-task.test.js
│       │       │   ├── analyze-task-complexity.test.js
│       │       │   ├── clear-subtasks.test.js
│       │       │   ├── complexity-report-tag-isolation.test.js
│       │       │   ├── expand-all-tasks.test.js
│       │       │   ├── expand-task.test.js
│       │       │   ├── find-next-task.test.js
│       │       │   ├── generate-task-files.test.js
│       │       │   ├── list-tasks.test.js
│       │       │   ├── move-task-cross-tag.test.js
│       │       │   ├── move-task.test.js
│       │       │   ├── parse-prd.test.js
│       │       │   ├── remove-subtask.test.js
│       │       │   ├── remove-task.test.js
│       │       │   ├── research.test.js
│       │       │   ├── scope-adjustment.test.js
│       │       │   ├── set-task-status.test.js
│       │       │   ├── setup.js
│       │       │   ├── update-single-task-status.test.js
│       │       │   ├── update-subtask-by-id.test.js
│       │       │   ├── update-task-by-id.test.js
│       │       │   └── update-tasks.test.js
│       │       ├── ui
│       │       │   └── cross-tag-error-display.test.js
│       │       └── utils-tag-aware-paths.test.js
│       ├── task-finder.test.js
│       ├── task-manager
│       │   ├── clear-subtasks.test.js
│       │   ├── move-task.test.js
│       │   ├── tag-boundary.test.js
│       │   └── tag-management.test.js
│       ├── task-master.test.js
│       ├── ui
│       │   └── indicators.test.js
│       ├── ui.test.js
│       ├── utils-strip-ansi.test.js
│       └── utils.test.js
├── tsconfig.json
├── tsdown.config.ts
└── turbo.json
```

# Files

--------------------------------------------------------------------------------
/assets/AGENTS.md:
--------------------------------------------------------------------------------

```markdown
# Task Master AI - Agent Integration Guide

## Essential Commands

### Core Workflow Commands

```bash
# Project Setup
task-master init                                    # Initialize Task Master in current project
task-master parse-prd .taskmaster/docs/prd.txt      # Generate tasks from PRD document
task-master models --setup                        # Configure AI models interactively

# Daily Development Workflow
task-master list                                   # Show all tasks with status
task-master next                                   # Get next available task to work on
task-master show <id>                             # View detailed task information (e.g., task-master show 1.2)
task-master set-status --id=<id> --status=done    # Mark task complete

# Task Management
task-master add-task --prompt="description" --research        # Add new task with AI assistance
task-master expand --id=<id> --research --force              # Break task into subtasks
task-master update-task --id=<id> --prompt="changes"         # Update specific task
task-master update --from=<id> --prompt="changes"            # Update multiple tasks from ID onwards
task-master update-subtask --id=<id> --prompt="notes"        # Add implementation notes to subtask

# Analysis & Planning
task-master analyze-complexity --research          # Analyze task complexity
task-master complexity-report                      # View complexity analysis
task-master expand --all --research               # Expand all eligible tasks

# Dependencies & Organization
task-master add-dependency --id=<id> --depends-on=<id>       # Add task dependency
task-master move --from=<id> --to=<id>                       # Reorganize task hierarchy
task-master validate-dependencies                            # Check for dependency issues
task-master generate                                         # Update task markdown files (usually auto-called)
```

## Key Files & Project Structure

### Core Files

- `.taskmaster/tasks/tasks.json` - Main task data file (auto-managed)
- `.taskmaster/config.json` - AI model configuration (use `task-master models` to modify)
- `.taskmaster/docs/prd.txt` - Product Requirements Document for parsing
- `.taskmaster/tasks/*.txt` - Individual task files (auto-generated from tasks.json)
- `.env` - API keys for CLI usage

### Claude Code Integration Files

- `CLAUDE.md` - Auto-loaded context for Claude Code (this file)
- `.claude/settings.json` - Claude Code tool allowlist and preferences
- `.claude/commands/` - Custom slash commands for repeated workflows
- `.mcp.json` - MCP server configuration (project-specific)

### Directory Structure

```
project/
├── .taskmaster/
│   ├── tasks/              # Task files directory
│   │   ├── tasks.json      # Main task database
│   │   ├── task-1.md      # Individual task files
│   │   └── task-2.md
│   ├── docs/              # Documentation directory
│   │   ├── prd.txt        # Product requirements
│   ├── reports/           # Analysis reports directory
│   │   └── task-complexity-report.json
│   ├── templates/         # Template files
│   │   └── example_prd.txt  # Example PRD template
│   └── config.json        # AI models & settings
├── .claude/
│   ├── settings.json      # Claude Code configuration
│   └── commands/         # Custom slash commands
├── .env                  # API keys
├── .mcp.json            # MCP configuration
└── CLAUDE.md            # This file - auto-loaded by Claude Code
```

## MCP Integration

Task Master provides an MCP server that Claude Code can connect to. Configure in `.mcp.json`:

```json
{
  "mcpServers": {
    "task-master-ai": {
      "command": "npx",
      "args": ["-y", "task-master-ai"],
      "env": {
        "ANTHROPIC_API_KEY": "your_key_here",
        "PERPLEXITY_API_KEY": "your_key_here",
        "OPENAI_API_KEY": "OPENAI_API_KEY_HERE",
        "GOOGLE_API_KEY": "GOOGLE_API_KEY_HERE",
        "XAI_API_KEY": "XAI_API_KEY_HERE",
        "OPENROUTER_API_KEY": "OPENROUTER_API_KEY_HERE",
        "MISTRAL_API_KEY": "MISTRAL_API_KEY_HERE",
        "AZURE_OPENAI_API_KEY": "AZURE_OPENAI_API_KEY_HERE",
        "OLLAMA_API_KEY": "OLLAMA_API_KEY_HERE"
      }
    }
  }
}
```

### Essential MCP Tools

```javascript
help; // = shows available taskmaster commands
// Project setup
initialize_project; // = task-master init
parse_prd; // = task-master parse-prd

// Daily workflow
get_tasks; // = task-master list
next_task; // = task-master next
get_task; // = task-master show <id>
set_task_status; // = task-master set-status

// Task management
add_task; // = task-master add-task
expand_task; // = task-master expand
update_task; // = task-master update-task
update_subtask; // = task-master update-subtask
update; // = task-master update

// Analysis
analyze_project_complexity; // = task-master analyze-complexity
complexity_report; // = task-master complexity-report
```

## Claude Code Workflow Integration

### Standard Development Workflow

#### 1. Project Initialization

```bash
# Initialize Task Master
task-master init

# Create or obtain PRD, then parse it
task-master parse-prd .taskmaster/docs/prd.txt

# Analyze complexity and expand tasks
task-master analyze-complexity --research
task-master expand --all --research
```

If tasks already exist, another PRD can be parsed (with new information only!) using parse-prd with --append flag. This will add the generated tasks to the existing list of tasks..

#### 2. Daily Development Loop

```bash
# Start each session
task-master next                           # Find next available task
task-master show <id>                     # Review task details

# During implementation, check in code context into the tasks and subtasks
task-master update-subtask --id=<id> --prompt="implementation notes..."

# Complete tasks
task-master set-status --id=<id> --status=done
```

#### 3. Multi-Claude Workflows

For complex projects, use multiple Claude Code sessions:

```bash
# Terminal 1: Main implementation
cd project && claude

# Terminal 2: Testing and validation
cd project-test-worktree && claude

# Terminal 3: Documentation updates
cd project-docs-worktree && claude
```

### Custom Slash Commands

Create `.claude/commands/taskmaster-next.md`:

```markdown
Find the next available Task Master task and show its details.

Steps:

1. Run `task-master next` to get the next task
2. If a task is available, run `task-master show <id>` for full details
3. Provide a summary of what needs to be implemented
4. Suggest the first implementation step
```

Create `.claude/commands/taskmaster-complete.md`:

```markdown
Complete a Task Master task: $ARGUMENTS

Steps:

1. Review the current task with `task-master show $ARGUMENTS`
2. Verify all implementation is complete
3. Run any tests related to this task
4. Mark as complete: `task-master set-status --id=$ARGUMENTS --status=done`
5. Show the next available task with `task-master next`
```

## Tool Allowlist Recommendations

Add to `.claude/settings.json`:

```json
{
  "allowedTools": [
    "Edit",
    "Bash(task-master *)",
    "Bash(git commit:*)",
    "Bash(git add:*)",
    "Bash(npm run *)",
    "mcp__task_master_ai__*"
  ]
}
```

## Configuration & Setup

### API Keys Required

At least **one** of these API keys must be configured:

- `ANTHROPIC_API_KEY` (Claude models) - **Recommended**
- `PERPLEXITY_API_KEY` (Research features) - **Highly recommended**
- `OPENAI_API_KEY` (GPT models)
- `GOOGLE_API_KEY` (Gemini models)
- `MISTRAL_API_KEY` (Mistral models)
- `OPENROUTER_API_KEY` (Multiple models)
- `XAI_API_KEY` (Grok models)

An API key is required for any provider used across any of the 3 roles defined in the `models` command.

### Model Configuration

```bash
# Interactive setup (recommended)
task-master models --setup

# Set specific models
task-master models --set-main claude-3-5-sonnet-20241022
task-master models --set-research perplexity-llama-3.1-sonar-large-128k-online
task-master models --set-fallback gpt-4o-mini
```

## Task Structure & IDs

### Task ID Format

- Main tasks: `1`, `2`, `3`, etc.
- Subtasks: `1.1`, `1.2`, `2.1`, etc.
- Sub-subtasks: `1.1.1`, `1.1.2`, etc.

### Task Status Values

- `pending` - Ready to work on
- `in-progress` - Currently being worked on
- `done` - Completed and verified
- `deferred` - Postponed
- `cancelled` - No longer needed
- `blocked` - Waiting on external factors

### Task Fields

```json
{
  "id": "1.2",
  "title": "Implement user authentication",
  "description": "Set up JWT-based auth system",
  "status": "pending",
  "priority": "high",
  "dependencies": ["1.1"],
  "details": "Use bcrypt for hashing, JWT for tokens...",
  "testStrategy": "Unit tests for auth functions, integration tests for login flow",
  "subtasks": []
}
```

## Claude Code Best Practices with Task Master

### Context Management

- Use `/clear` between different tasks to maintain focus
- This CLAUDE.md file is automatically loaded for context
- Use `task-master show <id>` to pull specific task context when needed

### Iterative Implementation

1. `task-master show <subtask-id>` - Understand requirements
2. Explore codebase and plan implementation
3. `task-master update-subtask --id=<id> --prompt="detailed plan"` - Log plan
4. `task-master set-status --id=<id> --status=in-progress` - Start work
5. Implement code following logged plan
6. `task-master update-subtask --id=<id> --prompt="what worked/didn't work"` - Log progress
7. `task-master set-status --id=<id> --status=done` - Complete task

### Complex Workflows with Checklists

For large migrations or multi-step processes:

1. Create a markdown PRD file describing the new changes: `touch task-migration-checklist.md` (prds can be .txt or .md)
2. Use Taskmaster to parse the new prd with `task-master parse-prd --append` (also available in MCP)
3. Use Taskmaster to expand the newly generated tasks into subtasks. Consdier using `analyze-complexity` with the correct --to and --from IDs (the new ids) to identify the ideal subtask amounts for each task. Then expand them.
4. Work through items systematically, checking them off as completed
5. Use `task-master update-subtask` to log progress on each task/subtask and/or updating/researching them before/during implementation if getting stuck

### Git Integration

Task Master works well with `gh` CLI:

```bash
# Create PR for completed task
gh pr create --title "Complete task 1.2: User authentication" --body "Implements JWT auth system as specified in task 1.2"

# Reference task in commits
git commit -m "feat: implement JWT auth (task 1.2)"
```

### Parallel Development with Git Worktrees

```bash
# Create worktrees for parallel task development
git worktree add ../project-auth feature/auth-system
git worktree add ../project-api feature/api-refactor

# Run Claude Code in each worktree
cd ../project-auth && claude    # Terminal 1: Auth work
cd ../project-api && claude     # Terminal 2: API work
```

## Troubleshooting

### AI Commands Failing

```bash
# Check API keys are configured
cat .env                           # For CLI usage

# Verify model configuration
task-master models

# Test with different model
task-master models --set-fallback gpt-4o-mini
```

### MCP Connection Issues

- Check `.mcp.json` configuration
- Verify Node.js installation
- Use `--mcp-debug` flag when starting Claude Code
- Use CLI as fallback if MCP unavailable

### Task File Sync Issues

```bash
# Regenerate task files from tasks.json
task-master generate

# Fix dependency issues
task-master fix-dependencies
```

DO NOT RE-INITIALIZE. That will not do anything beyond re-adding the same Taskmaster core files.

## Important Notes

### AI-Powered Operations

These commands make AI calls and may take up to a minute:

- `parse_prd` / `task-master parse-prd`
- `analyze_project_complexity` / `task-master analyze-complexity`
- `expand_task` / `task-master expand`
- `expand_all` / `task-master expand --all`
- `add_task` / `task-master add-task`
- `update` / `task-master update`
- `update_task` / `task-master update-task`
- `update_subtask` / `task-master update-subtask`

### File Management

- Never manually edit `tasks.json` - use commands instead
- Never manually edit `.taskmaster/config.json` - use `task-master models`
- Task markdown files in `tasks/` are auto-generated
- Run `task-master generate` after manual changes to tasks.json

### Claude Code Session Management

- Use `/clear` frequently to maintain focused context
- Create custom slash commands for repeated Task Master workflows
- Configure tool allowlist to streamline permissions
- Use headless mode for automation: `claude -p "task-master next"`

### Multi-Task Updates

- Use `update --from=<id>` to update multiple future tasks
- Use `update-task --id=<id>` for single task updates
- Use `update-subtask --id=<id>` for implementation logging

### Research Mode

- Add `--research` flag for research-based AI enhancement
- Requires a research model API key like Perplexity (`PERPLEXITY_API_KEY`) in environment
- Provides more informed task creation and updates
- Recommended for complex technical tasks

---

_This guide ensures Claude Code has immediate access to Task Master's essential functionality for agentic development workflows._

```

--------------------------------------------------------------------------------
/test-tag-functions.js:
--------------------------------------------------------------------------------

```javascript

```

--------------------------------------------------------------------------------
/apps/extension/src/index.ts:
--------------------------------------------------------------------------------

```typescript
console.log('hello world');

```

--------------------------------------------------------------------------------
/packages/build-config/CHANGELOG.md:
--------------------------------------------------------------------------------

```markdown
# @tm/build-config

## null

## 1.0.1

```

--------------------------------------------------------------------------------
/apps/docs/CHANGELOG.md:
--------------------------------------------------------------------------------

```markdown
# docs

## 0.0.4

## 0.0.3

## 0.0.2

## 0.0.1

```

--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------

```json
{
	"recommendations": ["esbenp.prettier-vscode"]
}

```

--------------------------------------------------------------------------------
/output.json:
--------------------------------------------------------------------------------

```json
{
	"key": "value",
	"nested": {
		"prop": true
	}
}

```

--------------------------------------------------------------------------------
/apps/docs/getting-started/quick-start/moving-forward.mdx:
--------------------------------------------------------------------------------

```markdown
---
title: Moving Forward
sidebarTitle: "Moving Forward"
---
```

--------------------------------------------------------------------------------
/apps/docs/getting-started/quick-start/rules-quick.mdx:
--------------------------------------------------------------------------------

```markdown
---
title: Rules and Context
sidebarTitle: "Rules and Context"
---
```

--------------------------------------------------------------------------------
/packages/tm-core/src/clients/index.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * Client exports
 */

export { SupabaseAuthClient } from './supabase-client.js';

```

--------------------------------------------------------------------------------
/apps/docs/whats-new.mdx:
--------------------------------------------------------------------------------

```markdown
---
title: "What's New"
sidebarTitle: "What's New"
---

An easy way to see the latest releases
```

--------------------------------------------------------------------------------
/scripts/modules/task-manager/parse-prd/index.js:
--------------------------------------------------------------------------------

```javascript
// Main entry point for parse-prd module
export { default } from './parse-prd.js';
export { default as parsePRD } from './parse-prd.js';

```

--------------------------------------------------------------------------------
/apps/extension/src/lib/utils.ts:
--------------------------------------------------------------------------------

```typescript
import { type ClassValue, clsx } from 'clsx';
import { twMerge } from 'tailwind-merge';

export function cn(...inputs: ClassValue[]) {
	return twMerge(clsx(inputs));
}

```

--------------------------------------------------------------------------------
/tests/fixture/test-tasks.json:
--------------------------------------------------------------------------------

```json
{
  "tasks": [
    {
      "id": 1,
      "dependencies": [],
      "subtasks": [
        {
          "id": 1,
          "dependencies": []
        }
      ]
    }
  ]
}
```

--------------------------------------------------------------------------------
/.taskmaster/docs/test-prd.txt:
--------------------------------------------------------------------------------

```
Simple Todo App PRD

Create a basic todo list application with the following features:
1. Add new todos
2. Mark todos as complete
3. Delete todos

That's it. Keep it simple.
```

--------------------------------------------------------------------------------
/apps/cli/src/ui/index.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * @fileoverview Main UI exports
 */

// Export all components
export * from './components/index.js';

// Re-export existing UI utilities
export * from '../utils/ui.js';

```

--------------------------------------------------------------------------------
/.taskmaster/state.json:
--------------------------------------------------------------------------------

```json
{
	"currentTag": "master",
	"lastSwitched": "2025-09-12T22:25:27.535Z",
	"branchTagMapping": {
		"v017-adds": "v017-adds",
		"next": "next"
	},
	"migrationNoticeShown": true
}

```

--------------------------------------------------------------------------------
/apps/docs/best-practices/index.mdx:
--------------------------------------------------------------------------------

```markdown
---
title: Intro to Advanced Usage
sidebarTitle: "Advanced Usage"
---

# Best Practices

Explore advanced tips, recommended workflows, and best practices for getting the most out of Task Master. 
```

--------------------------------------------------------------------------------
/packages/tm-core/src/providers/index.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * @fileoverview Barrel export for provider modules
 */

// Export all from AI module
export * from './ai/index.js';

// Storage providers will be exported here when implemented
// export * from './storage/index.js';

```

--------------------------------------------------------------------------------
/apps/docs/vercel.json:
--------------------------------------------------------------------------------

```json
{
	"rewrites": [
		{
			"source": "/",
			"destination": "https://taskmaster-49ce32d5.mintlify.dev/docs"
		},
		{
			"source": "/:match*",
			"destination": "https://taskmaster-49ce32d5.mintlify.dev/docs/:match*"
		}
	]
}

```

--------------------------------------------------------------------------------
/apps/docs/package.json:
--------------------------------------------------------------------------------

```json
{
	"name": "docs",
	"version": "0.0.4",
	"private": true,
	"description": "Task Master documentation powered by Mintlify",
	"scripts": {
		"dev": "mintlify dev",
		"preview": "mintlify preview"
	},
	"devDependencies": {
		"mintlify": "^4.2.111"
	}
}

```

--------------------------------------------------------------------------------
/scripts/modules/index.js:
--------------------------------------------------------------------------------

```javascript
/**
 * index.js
 * Main export point for all Task Master CLI modules
 */

// Export all modules
export * from './ui.js';
export * from './utils.js';
export * from './commands.js';
export * from './task-manager.js';
export * from './prompt-manager.js';

```

--------------------------------------------------------------------------------
/apps/cli/src/ui/components/index.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * @fileoverview UI components exports
 */

export * from './header.component.js';
export * from './dashboard.component.js';
export * from './next-task.component.js';
export * from './suggested-steps.component.js';
export * from './task-detail.component.js';

```

--------------------------------------------------------------------------------
/test-prd.txt:
--------------------------------------------------------------------------------

```
# Test PRD

## Project Overview
This is a simple test project to verify parse-prd functionality.

## Features
- Feature A: Basic setup
- Feature B: Core functionality  
- Feature C: Testing

## Requirements
- Use Node.js
- Include basic tests
- Simple CLI interface 
```

--------------------------------------------------------------------------------
/packages/tm-core/src/types/legacy.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * @fileoverview Legacy type definitions for backwards compatibility
 * These types are deprecated and will be removed in future versions
 */

/**
 * @deprecated Use string directly instead. This will be removed in a future version.
 */
export type TaskId = string;

```

--------------------------------------------------------------------------------
/packages/tm-core/src/services/index.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * Services module exports
 * Provides business logic and service layer functionality
 */

export { TaskService } from './task-service.js';
export { OrganizationService } from './organization.service.js';
export type { Organization, Brief } from './organization.service.js';

```

--------------------------------------------------------------------------------
/.changeset/config.json:
--------------------------------------------------------------------------------

```json
{
  "$schema": "https://unpkg.com/@changesets/[email protected]/schema.json",
  "changelog": [
    "@changesets/changelog-github",
    {
      "repo": "eyaltoledano/claude-task-master"
    }
  ],
  "commit": false,
  "fixed": [],
  "access": "public",
  "baseBranch": "main",
  "ignore": [
    "docs"
  ]
}
```

--------------------------------------------------------------------------------
/packages/tm-core/src/logger/index.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * @fileoverview Logger package for Task Master
 * Provides centralized logging with support for different modes and levels
 */

export { Logger, LogLevel } from './logger.js';
export type { LoggerConfig } from './logger.js';
export { createLogger, getLogger, setGlobalLogger } from './factory.js';

```

--------------------------------------------------------------------------------
/src/constants/commands.js:
--------------------------------------------------------------------------------

```javascript
/**
 * Command related constants
 * Defines which commands trigger AI processing
 */

// Command names that trigger AI processing
export const AI_COMMAND_NAMES = [
	'add-task',
	'analyze-complexity',
	'expand-task',
	'parse-prd',
	'research',
	'research-save',
	'update-subtask',
	'update-task',
	'update-tasks'
];

```

--------------------------------------------------------------------------------
/src/profiles/trae.js:
--------------------------------------------------------------------------------

```javascript
// Trae conversion profile for rule-transformer
import { createProfile, COMMON_TOOL_MAPPINGS } from './base-profile.js';

// Create and export trae profile using the base factory
export const traeProfile = createProfile({
	name: 'trae',
	displayName: 'Trae',
	url: 'trae.ai',
	docsUrl: 'docs.trae.ai',
	mcpConfig: false
});

```

--------------------------------------------------------------------------------
/packages/tm-core/src/executors/index.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * Public API for the executors module
 */

export * from './types.js';
export { BaseExecutor } from './base-executor.js';
export { ClaudeExecutor } from './claude-executor.js';
export { ExecutorFactory } from './executor-factory.js';
export {
	ExecutorService,
	type ExecutorServiceOptions
} from './executor-service.js';

```

--------------------------------------------------------------------------------
/src/profiles/windsurf.js:
--------------------------------------------------------------------------------

```javascript
// Windsurf conversion profile for rule-transformer
import { createProfile, COMMON_TOOL_MAPPINGS } from './base-profile.js';

// Create and export windsurf profile using the base factory
export const windsurfProfile = createProfile({
	name: 'windsurf',
	displayName: 'Windsurf',
	url: 'windsurf.com',
	docsUrl: 'docs.windsurf.com'
});

```

--------------------------------------------------------------------------------
/apps/docs/getting-started/faq.mdx:
--------------------------------------------------------------------------------

```markdown
---
title: FAQ
sidebarTitle: "FAQ"
---

Coming soon. 

## 💬 Getting Help

- **Discord**: [Join our community](https://discord.gg/taskmasterai)
- **Issues**: [GitHub Issues](https://github.com/eyaltoledano/claude-task-master/issues)
- **Discussions**: [GitHub Discussions](https://github.com/eyaltoledano/claude-task-master/discussions)
```

--------------------------------------------------------------------------------
/src/utils/getVersion.js:
--------------------------------------------------------------------------------

```javascript
import packageJson from '../../package.json' with { type: 'json' };

/**
 * Reads the version from the nearest package.json relative to this file.
 * Returns 'unknown' if not found or on error.
 * @returns {string} The version string or 'unknown'.
 */
export function getTaskMasterVersion() {
	return packageJson.version || 'unknown';
}

```

--------------------------------------------------------------------------------
/apps/docs/style.css:
--------------------------------------------------------------------------------

```css
/*
 * This file is used to override the default logo style of the docs theme.
 * It is not used for the actual documentation content.
 */

#navbar img {
	height: auto !important; /* Let intrinsic SVG size determine height */
	width: 200px !important; /* Control width */
	margin-top: 5px !important; /* Add some space above the logo */
}

```

--------------------------------------------------------------------------------
/apps/extension/components.json:
--------------------------------------------------------------------------------

```json
{
	"$schema": "https://ui.shadcn.com/schema.json",
	"style": "default",
	"rsc": false,
	"tsx": true,
	"tailwind": {
		"config": "tailwind.config.js",
		"css": "src/webview/index.css",
		"baseColor": "slate",
		"cssVariables": true,
		"prefix": ""
	},
	"aliases": {
		"components": "@/components",
		"utils": "@/lib"
	},
	"iconLibrary": "lucide-react"
}

```

--------------------------------------------------------------------------------
/src/utils/format.js:
--------------------------------------------------------------------------------

```javascript
// src/utils/format.js

/**
 * Formats elapsed time as 0m 00s.
 * @param {number} seconds - Elapsed time in seconds
 * @returns {string} Formatted time string
 */
export function formatElapsedTime(seconds) {
	const minutes = Math.floor(seconds / 60);
	const remainingSeconds = Math.floor(seconds % 60);
	return `${minutes}m ${remainingSeconds.toString().padStart(2, '0')}s`;
}

```

--------------------------------------------------------------------------------
/packages/tm-core/src/storage/file-storage/index.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * @fileoverview Exports for file storage components
 */

export {
	FormatHandler,
	type FileStorageData,
	type FileFormat
} from './format-handler.js';
export { FileOperations } from './file-operations.js';
export { PathResolver } from './path-resolver.js';

// Main FileStorage class - primary export
export { FileStorage as default, FileStorage } from './file-storage.js';

```

--------------------------------------------------------------------------------
/src/profiles/cline.js:
--------------------------------------------------------------------------------

```javascript
// Cline conversion profile for rule-transformer
import { createProfile, COMMON_TOOL_MAPPINGS } from './base-profile.js';

// Create and export cline profile using the base factory
export const clineProfile = createProfile({
	name: 'cline',
	displayName: 'Cline',
	url: 'cline.bot',
	docsUrl: 'docs.cline.bot',
	profileDir: '.clinerules',
	rulesDir: '.clinerules',
	mcpConfig: false
});

```

--------------------------------------------------------------------------------
/apps/extension/src/webview/sidebar.tsx:
--------------------------------------------------------------------------------

```typescript
import React from 'react';
import ReactDOM from 'react-dom/client';
import { SidebarView } from './components/SidebarView';

const rootElement = document.getElementById('root');

if (!rootElement) {
	console.error('Sidebar: Root element not found');
} else {
	const root = ReactDOM.createRoot(rootElement);
	root.render(
		<React.StrictMode>
			<SidebarView />
		</React.StrictMode>
	);
}

```

--------------------------------------------------------------------------------
/.github/workflows/release-check.yml:
--------------------------------------------------------------------------------

```yaml
name: Release Check

on:
  pull_request:
    branches:
      - main

concurrency:
  group: release-check-${{ github.head_ref }}
  cancel-in-progress: true

jobs:
  check-release-mode:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Check release mode
        run: node ./.github/scripts/check-pre-release-mode.mjs "pull_request"

```

--------------------------------------------------------------------------------
/src/profiles/cursor.js:
--------------------------------------------------------------------------------

```javascript
// Cursor conversion profile for rule-transformer
import { createProfile, COMMON_TOOL_MAPPINGS } from './base-profile.js';

// Create and export cursor profile using the base factory
export const cursorProfile = createProfile({
	name: 'cursor',
	displayName: 'Cursor',
	url: 'cursor.so',
	docsUrl: 'docs.cursor.com',
	targetExtension: '.mdc', // Cursor keeps .mdc extension
	supportsRulesSubdirectories: true
});

```

--------------------------------------------------------------------------------
/apps/extension/src/test/extension.test.ts:
--------------------------------------------------------------------------------

```typescript
import * as assert from 'assert';

// You can import and use all API from the 'vscode' module
// as well as import your extension to test it
import * as vscode from 'vscode';
// import * as myExtension from '../../extension';

suite('Extension Test Suite', () => {
	vscode.window.showInformationMessage('Start all tests.');

	test('Sample test', () => {
		assert.strictEqual(-1, [1, 2, 3].indexOf(5));
		assert.strictEqual(-1, [1, 2, 3].indexOf(0));
	});
});

```

--------------------------------------------------------------------------------
/docs/licensing.md:
--------------------------------------------------------------------------------

```markdown
# Licensing

Task Master is licensed under the MIT License with Commons Clause. This means you can:

## ✅ Allowed:

- Use Task Master for any purpose (personal, commercial, academic)
- Modify the code
- Distribute copies
- Create and sell products built using Task Master

## ❌ Not Allowed:

- Sell Task Master itself
- Offer Task Master as a hosted service
- Create competing products based on Task Master

See the [LICENSE](../LICENSE) file for the complete license text.

```

--------------------------------------------------------------------------------
/packages/build-config/tsconfig.json:
--------------------------------------------------------------------------------

```json
{
	"compilerOptions": {
		"target": "ES2022",
		"lib": ["ES2022"],
		"module": "ESNext",
		"moduleResolution": "bundler",
		"allowSyntheticDefaultImports": true,
		"esModuleInterop": true,
		"baseUrl": ".",
		"outDir": "dist",
		"allowJs": true,
		"strict": true,
		"resolveJsonModule": true,
		"isolatedModules": true,
		"declaration": true,
		"skipLibCheck": true,
		"forceConsistentCasingInFileNames": true
	},
	"include": ["src/**/*"],
	"exclude": ["node_modules", "dist"]
}

```

--------------------------------------------------------------------------------
/apps/docs/licensing.md:
--------------------------------------------------------------------------------

```markdown
# Licensing

Task Master is licensed under the MIT License with Commons Clause. This means you can:

## ✅ Allowed:

- Use Task Master for any purpose (personal, commercial, academic)
- Modify the code
- Distribute copies
- Create and sell products built using Task Master

## ❌ Not Allowed:

- Sell Task Master itself
- Offer Task Master as a hosted service
- Create competing products based on Task Master

{/* See the [LICENSE](../LICENSE) file for the complete license text. */}

```

--------------------------------------------------------------------------------
/jest.resolver.cjs:
--------------------------------------------------------------------------------

```
const { defaultResolver } = require('jest-resolve');
module.exports = function customResolver(request, options) {
	const resolve = options.defaultResolver || defaultResolver;

	try {
		return resolve(request, options);
	} catch (error) {
		if (request.startsWith('.') && request.endsWith('.js')) {
			try {
				return resolve(request.replace(/\.js$/, '.ts'), options);
			} catch (tsError) {
				tsError.cause = tsError.cause ?? error;
				throw tsError;
			}
		}

		throw error;
	}
};

```

--------------------------------------------------------------------------------
/packages/tm-core/tests/setup.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * @fileoverview Vitest test setup file
 */

import { afterAll, beforeAll, vi } from 'vitest';

// Setup any global test configuration here
// For example, increase timeout for slow CI environments
if (process.env.CI) {
	// Vitest timeout is configured in vitest.config.ts
}

// Suppress console errors during tests unless explicitly testing them
const originalError = console.error;
beforeAll(() => {
	console.error = vi.fn();
});

afterAll(() => {
	console.error = originalError;
});

```

--------------------------------------------------------------------------------
/src/profiles/codex.js:
--------------------------------------------------------------------------------

```javascript
// Codex profile for rule-transformer
import { createProfile } from './base-profile.js';

// Create and export codex profile using the base factory
export const codexProfile = createProfile({
	name: 'codex',
	displayName: 'Codex',
	url: 'codex.ai',
	docsUrl: 'platform.openai.com/docs/codex',
	profileDir: '.', // Root directory
	rulesDir: '.', // No specific rules directory needed
	mcpConfig: false,
	mcpConfigName: null,
	includeDefaultRules: false,
	fileMap: {
		'AGENTS.md': 'AGENTS.md'
	}
});

```

--------------------------------------------------------------------------------
/packages/tm-core/src/interfaces/index.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * @fileoverview Interface definitions index for the tm-core package
 * This file exports all interface definitions from their respective modules
 */

// Storage interfaces
export type * from './storage.interface.js';
export * from './storage.interface.js';

// AI Provider interfaces
export type * from './ai-provider.interface.js';
export * from './ai-provider.interface.js';

// Configuration interfaces
export type * from './configuration.interface.js';
export * from './configuration.interface.js';

```

--------------------------------------------------------------------------------
/apps/docs/favicon.svg:
--------------------------------------------------------------------------------

```
<svg width="100" height="100" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
  <!-- Blue form with check from logo -->
  <rect x="16" y="10" width="68" height="80" rx="9" fill="#3366CC"/>
  <polyline points="33,44 41,55 56,29" fill="none" stroke="#FFFFFF" stroke-width="6"/>
  <circle cx="33" cy="64" r="4" fill="#FFFFFF"/>
  <rect x="43" y="61" width="27" height="6" fill="#FFFFFF"/>
  <circle cx="33" cy="77" r="4" fill="#FFFFFF"/>
  <rect x="43" y="75" width="27" height="6" fill="#FFFFFF"/>
</svg>

```

--------------------------------------------------------------------------------
/packages/tm-core/src/config/services/index.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * @fileoverview Configuration services exports
 * Export all configuration-related services
 */

export { ConfigLoader } from './config-loader.service.js';
export {
	ConfigMerger,
	CONFIG_PRECEDENCE,
	type ConfigSource
} from './config-merger.service.js';
export {
	RuntimeStateManager,
	type RuntimeState
} from './runtime-state-manager.service.js';
export {
	ConfigPersistence,
	type PersistenceOptions
} from './config-persistence.service.js';
export { EnvironmentConfigProvider } from './environment-config-provider.service.js';

```

--------------------------------------------------------------------------------
/src/constants/rules-actions.js:
--------------------------------------------------------------------------------

```javascript
/**
 * @typedef {'add' | 'remove'} RulesAction
 */

/**
 * Individual rules action constants
 */
export const RULES_ACTIONS = {
	ADD: 'add',
	REMOVE: 'remove'
};

/**
 * Special rules command (not a CRUD operation)
 */
export const RULES_SETUP_ACTION = 'setup';

/**
 * Check if a given action is a valid rules action
 * @param {string} action - The action to check
 * @returns {boolean} True if the action is valid, false otherwise
 */
export function isValidRulesAction(action) {
	return Object.values(RULES_ACTIONS).includes(action);
}

```

--------------------------------------------------------------------------------
/packages/tm-core/src/providers/ai/index.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * @fileoverview Barrel export for AI provider modules
 */

export { BaseProvider } from './base-provider.js';
export type { BaseProviderConfig, CompletionResult } from './base-provider.js';

// Export provider factory when implemented
// export { ProviderFactory } from './provider-factory.js';

// Export concrete providers when implemented
// export { AnthropicProvider } from './adapters/anthropic-provider.js';
// export { OpenAIProvider } from './adapters/openai-provider.js';
// export { GoogleProvider } from './adapters/google-provider.js';

```

--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE/config.yml:
--------------------------------------------------------------------------------

```yaml
blank_issues_enabled: false
contact_links:
  - name: 🐛 Bug Fix
    url: https://github.com/eyaltoledano/claude-task-master/compare/next...HEAD?template=bugfix.md
    about: Fix a bug in Task Master
  - name: ✨ New Feature
    url: https://github.com/eyaltoledano/claude-task-master/compare/next...HEAD?template=feature.md
    about: Add a new feature to Task Master
  - name: 🔌 New Integration
    url: https://github.com/eyaltoledano/claude-task-master/compare/next...HEAD?template=integration.md
    about: Add support for a new tool, IDE, or platform
```

--------------------------------------------------------------------------------
/src/profiles/gemini.js:
--------------------------------------------------------------------------------

```javascript
// Gemini profile for rule-transformer
import { createProfile } from './base-profile.js';

// Create and export gemini profile using the base factory
export const geminiProfile = createProfile({
	name: 'gemini',
	displayName: 'Gemini',
	url: 'codeassist.google',
	docsUrl: 'github.com/google-gemini/gemini-cli',
	profileDir: '.gemini', // Keep .gemini for settings.json
	rulesDir: '.', // Root directory for GEMINI.md
	mcpConfigName: 'settings.json', // Override default 'mcp.json'
	includeDefaultRules: false,
	fileMap: {
		'AGENTS.md': 'GEMINI.md'
	}
});

```

--------------------------------------------------------------------------------
/scripts/dev.js:
--------------------------------------------------------------------------------

```javascript
#!/usr/bin/env node

/**
 * dev.js
 * Task Master CLI - AI-driven development task management
 *
 * This is the refactored entry point that uses the modular architecture.
 * It imports functionality from the modules directory and provides a CLI.
 */

import dotenv from 'dotenv';
dotenv.config();

// Add at the very beginning of the file
if (process.env.DEBUG === '1') {
	console.error('DEBUG - dev.js received args:', process.argv.slice(2));
}

import { runCLI } from './modules/commands.js';

// Run the CLI with the process arguments
runCLI(process.argv);

```

--------------------------------------------------------------------------------
/.kiro/settings/mcp.json:
--------------------------------------------------------------------------------

```json
{
	"mcpServers": {
		"task-master-ai": {
			"command": "npx",
			"args": ["-y", "task-master-ai"],
			"env": {
				"ANTHROPIC_API_KEY": "YOUR_ANTHROPIC_API_KEY_HERE",
				"PERPLEXITY_API_KEY": "YOUR_PERPLEXITY_API_KEY_HERE",
				"OPENAI_API_KEY": "YOUR_OPENAI_KEY_HERE",
				"GOOGLE_API_KEY": "YOUR_GOOGLE_KEY_HERE",
				"XAI_API_KEY": "YOUR_XAI_KEY_HERE",
				"OPENROUTER_API_KEY": "YOUR_OPENROUTER_KEY_HERE",
				"MISTRAL_API_KEY": "YOUR_MISTRAL_KEY_HERE",
				"AZURE_OPENAI_API_KEY": "YOUR_AZURE_KEY_HERE",
				"OLLAMA_API_KEY": "YOUR_OLLAMA_API_KEY_HERE"
			}
		}
	}
}

```

--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------

```json
{
	"json.schemas": [
		{
			"fileMatch": ["src/prompts/*.json"],
			"url": "./src/prompts/schemas/prompt-template.schema.json"
		}
	],
	"files.associations": {
		"src/prompts/*.json": "json"
	},

	"json.format.enable": true,
	"json.validate.enable": true,
	"typescript.tsdk": "node_modules/typescript/lib",
	"[typescript]": {
		"editor.defaultFormatter": "biomejs.biome"
	},
	"[typescriptreact]": {
		"editor.defaultFormatter": "biomejs.biome"
	},
	"[javascript]": {
		"editor.defaultFormatter": "biomejs.biome"
	},
	"[json]": {
		"editor.defaultFormatter": "biomejs.biome"
	}
}

```

--------------------------------------------------------------------------------
/apps/extension/src/components/ui/label.tsx:
--------------------------------------------------------------------------------

```typescript
import * as LabelPrimitive from '@radix-ui/react-label';
import type * as React from 'react';

import { cn } from '@/lib/utils';

function Label({
	className,
	...props
}: React.ComponentProps<typeof LabelPrimitive.Root>) {
	return (
		<LabelPrimitive.Root
			data-slot="label"
			className={cn(
				'flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50',
				className
			)}
			{...props}
		/>
	);
}

export { Label };

```

--------------------------------------------------------------------------------
/apps/extension/src/webview/index.tsx:
--------------------------------------------------------------------------------

```typescript
/**
 * Webview Entry Point
 */

import React from 'react';
import { createRoot } from 'react-dom/client';
import { App } from './App';
// CSS is built separately by Tailwind

// VS Code API declaration
declare global {
	interface Window {
		acquireVsCodeApi?: () => {
			postMessage: (message: any) => void;
			setState: (state: any) => void;
			getState: () => any;
		};
	}
}

// Initialize React app
const container = document.getElementById('root');
if (container) {
	const root = createRoot(container);
	root.render(<App />);
} else {
	console.error('❌ Root container not found');
}

```

--------------------------------------------------------------------------------
/packages/tm-core/src/auth/index.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * Authentication module exports
 */

export { AuthManager } from './auth-manager.js';
export { CredentialStore } from './credential-store.js';
export { OAuthService } from './oauth-service.js';
export { SupabaseSessionStorage } from './supabase-session-storage.js';
export type {
	Organization,
	Brief,
	RemoteTask
} from '../services/organization.service.js';

export type {
	AuthCredentials,
	OAuthFlowOptions,
	AuthConfig,
	CliData,
	UserContext
} from './types.js';

export { AuthenticationError } from './types.js';

export {
	DEFAULT_AUTH_CONFIG,
	getAuthConfig
} from './config.js';

```

--------------------------------------------------------------------------------
/apps/extension/src/webview/components/PriorityBadge.tsx:
--------------------------------------------------------------------------------

```typescript
/**
 * Priority Badge Component
 */

import React from 'react';
import { Badge } from '@/components/ui/badge';
import type { TaskMasterTask } from '../types';

interface PriorityBadgeProps {
	priority: TaskMasterTask['priority'];
}

export const PriorityBadge: React.FC<PriorityBadgeProps> = ({ priority }) => {
	if (!priority) return null;

	const variants = {
		high: 'destructive' as const,
		medium: 'default' as const,
		low: 'secondary' as const
	};

	return (
		<Badge
			variant={variants[priority] || 'secondary'}
			className="text-xs font-normal px-2 py-0.5"
		>
			{priority}
		</Badge>
	);
};

```

--------------------------------------------------------------------------------
/packages/build-config/package.json:
--------------------------------------------------------------------------------

```json
{
	"name": "@tm/build-config",
	"description": "Shared build configuration for Task Master monorepo",
	"type": "module",
	"private": true,
	"main": "./dist/tsdown.base.js",
	"types": "./src/tsdown.base.ts",
	"exports": {
		".": {
			"types": "./src/tsdown.base.ts",
			"import": "./dist/tsdown.base.js"
		}
	},
	"files": ["dist", "src"],
	"keywords": ["build-config", "tsup", "monorepo"],
	"author": "",
	"license": "MIT",
	"scripts": {
		"build": "tsc",
		"typecheck": "tsc --noEmit"
	},
	"devDependencies": {
		"dotenv-mono": "^1.5.1",
		"typescript": "^5.7.3"
	},
	"dependencies": {
		"tsup": "^8.5.0"
	}
}

```

--------------------------------------------------------------------------------
/.cursor/mcp.json:
--------------------------------------------------------------------------------

```json
{
	"mcpServers": {
		"task-master-ai": {
			"command": "node",
			"args": ["./dist/mcp-server.js"],
			"env": {
				"ANTHROPIC_API_KEY": "ANTHROPIC_API_KEY_HERE",
				"PERPLEXITY_API_KEY": "PERPLEXITY_API_KEY_HERE",
				"OPENAI_API_KEY": "OPENAI_API_KEY_HERE",
				"GOOGLE_API_KEY": "GOOGLE_API_KEY_HERE",
				"GROQ_API_KEY": "GROQ_API_KEY_HERE",
				"XAI_API_KEY": "XAI_API_KEY_HERE",
				"OPENROUTER_API_KEY": "OPENROUTER_API_KEY_HERE",
				"MISTRAL_API_KEY": "MISTRAL_API_KEY_HERE",
				"AZURE_OPENAI_API_KEY": "AZURE_OPENAI_API_KEY_HERE",
				"OLLAMA_API_KEY": "OLLAMA_API_KEY_HERE",
				"GITHUB_API_KEY": "GITHUB_API_KEY_HERE"
			}
		}
	}
}

```

--------------------------------------------------------------------------------
/src/profiles/index.js:
--------------------------------------------------------------------------------

```javascript
// Profile exports for centralized importing
export { ampProfile } from './amp.js';
export { claudeProfile } from './claude.js';
export { clineProfile } from './cline.js';
export { codexProfile } from './codex.js';
export { cursorProfile } from './cursor.js';
export { geminiProfile } from './gemini.js';
export { kiloProfile } from './kilo.js';
export { kiroProfile } from './kiro.js';
export { opencodeProfile } from './opencode.js';
export { rooProfile } from './roo.js';
export { traeProfile } from './trae.js';
export { vscodeProfile } from './vscode.js';
export { windsurfProfile } from './windsurf.js';
export { zedProfile } from './zed.js';

```

--------------------------------------------------------------------------------
/.claude/commands/tm/setup/quick-install-taskmaster.md:
--------------------------------------------------------------------------------

```markdown
Quick install Task Master globally if not already installed.

Execute this streamlined installation:

```bash
# Check and install in one command
task-master --version 2>/dev/null || npm install -g task-master-ai

# Verify installation
task-master --version

# Quick setup check
task-master models --status || echo "Note: You'll need to set up an AI provider API key"
```

If you see "command not found" after installation, you may need to:
1. Restart your terminal
2. Or add npm global bin to PATH: `export PATH=$(npm bin -g):$PATH`

Once installed, you can use all the Task Master commands!

Quick test: Run `/project:help` to see all available commands.
```

--------------------------------------------------------------------------------
/assets/claude/commands/tm/setup/quick-install-taskmaster.md:
--------------------------------------------------------------------------------

```markdown
Quick install Task Master globally if not already installed.

Execute this streamlined installation:

```bash
# Check and install in one command
task-master --version 2>/dev/null || npm install -g task-master-ai

# Verify installation
task-master --version

# Quick setup check
task-master models --status || echo "Note: You'll need to set up an AI provider API key"
```

If you see "command not found" after installation, you may need to:
1. Restart your terminal
2. Or add npm global bin to PATH: `export PATH=$(npm bin -g):$PATH`

Once installed, you can use all the Task Master commands!

Quick test: Run `/project:help` to see all available commands.
```

--------------------------------------------------------------------------------
/mcp-server/server.js:
--------------------------------------------------------------------------------

```javascript
#!/usr/bin/env node

import TaskMasterMCPServer from './src/index.js';
import dotenv from 'dotenv';
import logger from './src/logger.js';

// Load environment variables
dotenv.config();

/**
 * Start the MCP server
 */
async function startServer() {
	const server = new TaskMasterMCPServer();

	// Handle graceful shutdown
	process.on('SIGINT', async () => {
		await server.stop();
		process.exit(0);
	});

	process.on('SIGTERM', async () => {
		await server.stop();
		process.exit(0);
	});

	try {
		await server.start();
	} catch (error) {
		logger.error(`Failed to start MCP server: ${error.message}`);
		process.exit(1);
	}
}

// Start the server
startServer();

```

--------------------------------------------------------------------------------
/apps/extension/src/components/ui/separator.tsx:
--------------------------------------------------------------------------------

```typescript
'use client';

import * as SeparatorPrimitive from '@radix-ui/react-separator';
import type * as React from 'react';

import { cn } from '@/lib/utils';

function Separator({
	className,
	orientation = 'horizontal',
	decorative = true,
	...props
}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {
	return (
		<SeparatorPrimitive.Root
			data-slot="separator"
			decorative={decorative}
			orientation={orientation}
			className={cn(
				'bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px',
				className
			)}
			{...props}
		/>
	);
}

export { Separator };

```

--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feedback.md:
--------------------------------------------------------------------------------

```markdown
---
name: Feedback
about: Give us specific feedback on the product/approach/tech
title: 'feedback: '
labels: feedback
assignees: ''
---

### Feedback Summary

Provide a clear summary or direct quote from user feedback.

### User Context

Explain the user's context or scenario in which this feedback was provided.

### User Impact

Describe how this feedback affects the user experience or workflow.

### Suggestions

Provide any initial thoughts, potential solutions, or improvements based on the feedback.

### Relevant Screenshots or Examples

Attach screenshots, logs, or examples that illustrate the feedback.

### Additional Notes

Any additional context or related information.

```

--------------------------------------------------------------------------------
/apps/extension/src/components/constants.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * Shared constants for TaskDetails components
 */

/**
 * Status color definitions for visual indicators
 */
export const STATUS_DOT_COLORS = {
	done: '#22c55e', // Green
	'in-progress': '#3b82f6', // Blue
	review: '#a855f7', // Purple
	deferred: '#ef4444', // Red
	cancelled: '#6b7280', // Gray
	pending: '#eab308' // Yellow (default)
} as const;

export type TaskStatus = keyof typeof STATUS_DOT_COLORS;

/**
 * Get the color for a status dot indicator
 * @param status - The task status
 * @returns The hex color code for the status
 */
export function getStatusDotColor(status: string): string {
	return STATUS_DOT_COLORS[status as TaskStatus] || STATUS_DOT_COLORS.pending;
}

```

--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE/bugfix.md:
--------------------------------------------------------------------------------

```markdown
## 🐛 Bug Fix

### 🔍 Bug Description
<!-- Describe the bug -->

### 🔗 Related Issues
<!-- Fixes #123 -->

### ✨ Solution
<!-- How does this PR fix the bug? -->

## How to Test

### Steps that caused the bug:
1. 
2. 

**Before fix:** 
**After fix:** 

### Quick verification:
```bash
# Commands to verify the fix
```

## Contributor Checklist
- [ ] Created changeset: `npm run changeset`
- [ ] Tests pass: `npm test`
- [ ] Format check passes: `npm run format-check`
- [ ] Addressed CodeRabbit comments
- [ ] Added unit tests (if applicable)
- [ ] Manually verified the fix works

---

### For Maintainers
- [ ] Root cause identified
- [ ] Fix doesn't introduce new issues
- [ ] CI passes
```

--------------------------------------------------------------------------------
/apps/extension/tsconfig.json:
--------------------------------------------------------------------------------

```json
{
	"compilerOptions": {
		"module": "ESNext",
		"target": "ES2022",
		"outDir": "out",
		"lib": ["ES2022", "DOM"],
		"sourceMap": true,
		"rootDir": "src",
		"strict": true /* enable all strict type-checking options */,
		"moduleResolution": "Node",
		"esModuleInterop": true,
		"skipLibCheck": true,
		"forceConsistentCasingInFileNames": true,
		"jsx": "react-jsx",
		"allowSyntheticDefaultImports": true,
		"resolveJsonModule": true,
		"declaration": false,
		"declarationMap": false,
		"baseUrl": ".",
		"paths": {
			"@/*": ["./src/*"],
			"@/components/*": ["./src/components/*"],
			"@/lib/*": ["./src/lib/*"],
			"@tm/core": ["../core/src"]
		}
	},
	"exclude": ["node_modules", ".vscode-test", "out", "dist"]
}

```

--------------------------------------------------------------------------------
/apps/extension/src/webview/components/ToastContainer.tsx:
--------------------------------------------------------------------------------

```typescript
/**
 * Toast Container Component
 */

import React from 'react';
import { ToastNotification } from './ToastNotification';
import type { ToastNotification as ToastType } from '../types';

interface ToastContainerProps {
	notifications: ToastType[];
	onDismiss: (id: string) => void;
}

export const ToastContainer: React.FC<ToastContainerProps> = ({
	notifications,
	onDismiss
}) => {
	return (
		<div className="fixed top-4 right-4 z-50 pointer-events-none">
			<div className="flex flex-col items-end pointer-events-auto">
				{notifications.map((notification) => (
					<ToastNotification
						key={notification.id}
						notification={notification}
						onDismiss={onDismiss}
					/>
				))}
			</div>
		</div>
	);
};

```

--------------------------------------------------------------------------------
/.claude/commands/tm/set-status/to-pending.md:
--------------------------------------------------------------------------------

```markdown
Set a task's status to pending.

Arguments: $ARGUMENTS (task ID)

## Setting Task to Pending

This moves a task back to the pending state, useful for:
- Resetting erroneously started tasks
- Deferring work that was prematurely begun
- Reorganizing sprint priorities

## Execution

```bash
task-master set-status --id=$ARGUMENTS --status=pending
```

## Validation

Before setting to pending:
- Warn if task is currently in-progress
- Check if this will block other tasks
- Suggest documenting why it's being reset
- Preserve any work already done

## Smart Actions

After setting to pending:
- Update sprint planning if needed
- Notify about freed resources
- Suggest priority reassessment
- Log the status change with context
```

--------------------------------------------------------------------------------
/assets/claude/commands/tm/set-status/to-pending.md:
--------------------------------------------------------------------------------

```markdown
Set a task's status to pending.

Arguments: $ARGUMENTS (task ID)

## Setting Task to Pending

This moves a task back to the pending state, useful for:
- Resetting erroneously started tasks
- Deferring work that was prematurely begun
- Reorganizing sprint priorities

## Execution

```bash
task-master set-status --id=$ARGUMENTS --status=pending
```

## Validation

Before setting to pending:
- Warn if task is currently in-progress
- Check if this will block other tasks
- Suggest documenting why it's being reset
- Preserve any work already done

## Smart Actions

After setting to pending:
- Update sprint planning if needed
- Notify about freed resources
- Suggest priority reassessment
- Log the status change with context
```

--------------------------------------------------------------------------------
/mcp-server/src/core/direct-functions/cache-stats.js:
--------------------------------------------------------------------------------

```javascript
/**
 * cache-stats.js
 * Direct function implementation for retrieving cache statistics
 */

import { contextManager } from '../context-manager.js';

/**
 * Get cache statistics for monitoring
 * @param {Object} args - Command arguments
 * @param {Object} log - Logger object
 * @returns {Object} - Cache statistics
 */
export async function getCacheStatsDirect(args, log) {
	try {
		log.info('Retrieving cache statistics');
		const stats = contextManager.getStats();
		return {
			success: true,
			data: stats
		};
	} catch (error) {
		log.error(`Error getting cache stats: ${error.message}`);
		return {
			success: false,
			error: {
				code: 'CACHE_STATS_ERROR',
				message: error.message || 'Unknown error occurred'
			}
		};
	}
}

```

--------------------------------------------------------------------------------
/apps/extension/src/components/ui/textarea.tsx:
--------------------------------------------------------------------------------

```typescript
import type * as React from 'react';

import { cn } from '@/lib/utils';

function Textarea({ className, ...props }: React.ComponentProps<'textarea'>) {
	return (
		<textarea
			data-slot="textarea"
			className={cn(
				'border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',
				className
			)}
			{...props}
		/>
	);
}

export { Textarea };

```

--------------------------------------------------------------------------------
/apps/extension/src/components/ui/collapsible.tsx:
--------------------------------------------------------------------------------

```typescript
import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';

function Collapsible({
	...props
}: React.ComponentProps<typeof CollapsiblePrimitive.Root>) {
	return <CollapsiblePrimitive.Root data-slot="collapsible" {...props} />;
}

function CollapsibleTrigger({
	...props
}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>) {
	return (
		<CollapsiblePrimitive.CollapsibleTrigger
			data-slot="collapsible-trigger"
			{...props}
		/>
	);
}

function CollapsibleContent({
	...props
}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>) {
	return (
		<CollapsiblePrimitive.CollapsibleContent
			data-slot="collapsible-content"
			{...props}
		/>
	);
}

export { Collapsible, CollapsibleTrigger, CollapsibleContent };

```

--------------------------------------------------------------------------------
/.claude/commands/tm/list/list-tasks-with-subtasks.md:
--------------------------------------------------------------------------------

```markdown
List all tasks including their subtasks in a hierarchical view.

This command shows all tasks with their nested subtasks, providing a complete project overview.

## Execution

Run the Task Master list command with subtasks flag:
```bash
task-master list --with-subtasks
```

## Enhanced Display

I'll organize the output to show:
- Parent tasks with clear indicators
- Nested subtasks with proper indentation
- Status badges for quick scanning
- Dependencies and blockers highlighted
- Progress indicators for tasks with subtasks

## Smart Filtering

Based on the task hierarchy:
- Show completion percentage for parent tasks
- Highlight blocked subtask chains
- Group by functional areas
- Indicate critical path items

This gives you a complete tree view of your project structure.
```

--------------------------------------------------------------------------------
/assets/claude/commands/tm/list/list-tasks-with-subtasks.md:
--------------------------------------------------------------------------------

```markdown
List all tasks including their subtasks in a hierarchical view.

This command shows all tasks with their nested subtasks, providing a complete project overview.

## Execution

Run the Task Master list command with subtasks flag:
```bash
task-master list --with-subtasks
```

## Enhanced Display

I'll organize the output to show:
- Parent tasks with clear indicators
- Nested subtasks with proper indentation
- Status badges for quick scanning
- Dependencies and blockers highlighted
- Progress indicators for tasks with subtasks

## Smart Filtering

Based on the task hierarchy:
- Show completion percentage for parent tasks
- Highlight blocked subtask chains
- Group by functional areas
- Indicate critical path items

This gives you a complete tree view of your project structure.
```

--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------

```markdown
---
name: Bug report
about: Create a report to help us improve
title: 'bug: '
labels: bug
assignees: ''
---

### Description

Detailed description of the problem, including steps to reproduce the issue.

### Steps to Reproduce

1. Step-by-step instructions to reproduce the issue
2. Include command examples or UI interactions

### Expected Behavior

Describe clearly what the expected outcome or behavior should be.

### Actual Behavior

Describe clearly what the actual outcome or behavior is.

### Screenshots or Logs

Provide screenshots, logs, or error messages if applicable.

### Environment

- Task Master version:
- Node.js version:
- Operating system:
- IDE (if applicable):

### Additional Context

Any additional information or context that might help diagnose the issue.

```

--------------------------------------------------------------------------------
/src/ai-providers/index.js:
--------------------------------------------------------------------------------

```javascript
/**
 * src/ai-providers/index.js
 * Central export point for all AI provider classes
 */

export { AnthropicAIProvider } from './anthropic.js';
export { PerplexityAIProvider } from './perplexity.js';
export { GoogleAIProvider } from './google.js';
export { OpenAIProvider } from './openai.js';
export { XAIProvider } from './xai.js';
export { GroqProvider } from './groq.js';
export { OpenRouterAIProvider } from './openrouter.js';
export { OllamaAIProvider } from './ollama.js';
export { BedrockAIProvider } from './bedrock.js';
export { AzureProvider } from './azure.js';
export { VertexAIProvider } from './google-vertex.js';
export { ClaudeCodeProvider } from './claude-code.js';
export { GeminiCliProvider } from './gemini-cli.js';
export { GrokCliProvider } from './grok-cli.js';

```

--------------------------------------------------------------------------------
/assets/config.json:
--------------------------------------------------------------------------------

```json
{
	"models": {
		"main": {
			"provider": "anthropic",
			"modelId": "claude-3-7-sonnet-20250219",
			"maxTokens": 100000,
			"temperature": 0.2
		},
		"research": {
			"provider": "perplexity",
			"modelId": "sonar-pro",
			"maxTokens": 8700,
			"temperature": 0.1
		},
		"fallback": {
			"provider": "anthropic",
			"modelId": "claude-3-7-sonnet-20250219",
			"maxTokens": 8192,
			"temperature": 0.2
		}
	},
	"global": {
		"logLevel": "info",
		"debug": false,
		"defaultSubtasks": 5,
		"defaultPriority": "medium",
		"projectName": "Taskmaster",
		"defaultTag": "master",
		"ollamaBaseURL": "http://localhost:11434/api",
		"azureOpenaiBaseURL": "https://your-endpoint.openai.azure.com/",
		"bedrockBaseURL": "https://bedrock.us-east-1.amazonaws.com",
		"responseLanguage": "English"
	}
}

```

--------------------------------------------------------------------------------
/apps/extension/src/utils/event-emitter.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * Simple Event Emitter
 * Lightweight alternative to complex event bus
 */

export type EventHandler = (...args: any[]) => void | Promise<void>;

export class EventEmitter {
	private handlers = new Map<string, Set<EventHandler>>();

	on(event: string, handler: EventHandler): () => void {
		if (!this.handlers.has(event)) {
			this.handlers.set(event, new Set());
		}
		this.handlers.get(event)?.add(handler);

		// Return unsubscribe function
		return () => this.off(event, handler);
	}

	off(event: string, handler: EventHandler): void {
		this.handlers.get(event)?.delete(handler);
	}

	emit(event: string, ...args: any[]): void {
		this.handlers.get(event)?.forEach((handler) => {
			try {
				handler(...args);
			} catch (error) {
				console.error(`Error in event handler for ${event}:`, error);
			}
		});
	}
}

```

--------------------------------------------------------------------------------
/packages/tm-core/src/utils/index.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * @fileoverview Utility functions for the tm-core package
 * This file exports all utility functions and helper classes
 */

// Export ID generation utilities
export {
	generateTaskId as generateId, // Alias for backward compatibility
	generateTaskId,
	generateSubtaskId,
	isValidTaskId,
	isValidSubtaskId,
	getParentTaskId
} from './id-generator.js';

// Additional utility exports

/**
 * Formats a date for task timestamps
 * @deprecated This is a placeholder function that will be properly implemented in later tasks
 */
export function formatDate(date: Date = new Date()): string {
	return date.toISOString();
}

/**
 * Deep clones an object
 * @deprecated This is a placeholder function that will be properly implemented in later tasks
 */
export function deepClone<T>(obj: T): T {
	return JSON.parse(JSON.stringify(obj));
}

```

--------------------------------------------------------------------------------
/bin/task-master.js:
--------------------------------------------------------------------------------

```javascript
#!/usr/bin/env node

/**
 * Task Master
 * Copyright (c) 2025 Eyal Toledano, Ralph Khreish
 *
 * This software is licensed under the MIT License with Commons Clause.
 * You may use this software for any purpose, including commercial applications,
 * and modify and redistribute it freely, subject to the following restrictions:
 *
 * 1. You may not sell this software or offer it as a service.
 * 2. The origin of this software must not be misrepresented.
 * 3. Altered source versions must be plainly marked as such.
 *
 * For the full license text, see the LICENSE file in the root directory.
 */

/**
 * Claude Task Master CLI
 * Main entry point for globally installed package
 */

// Direct imports instead of spawning child processes
import { runCLI } from '../scripts/modules/commands.js';

// Simply run the CLI directly
runCLI();

```

--------------------------------------------------------------------------------
/src/constants/task-status.js:
--------------------------------------------------------------------------------

```javascript
/**
 * @typedef {'pending' | 'done' | 'in-progress' | 'review' | 'deferred' | 'cancelled'} TaskStatus
 */

/**
 * Task status options list
 * @type {TaskStatus[]}
 * @description Defines possible task statuses:
 * - pending: Task waiting to start
 * - done: Task completed
 * - in-progress: Task in progress
 * - review: Task completed and waiting for review
 * - deferred: Task postponed or paused
 * - cancelled: Task cancelled and will not be completed
 */
export const TASK_STATUS_OPTIONS = [
	'pending',
	'done',
	'in-progress',
	'review',
	'deferred',
	'cancelled'
];

/**
 * Check if a given status is a valid task status
 * @param {string} status - The status to check
 * @returns {boolean} True if the status is valid, false otherwise
 */
export function isValidTaskStatus(status) {
	return TASK_STATUS_OPTIONS.includes(status);
}

```

--------------------------------------------------------------------------------
/src/constants/providers.js:
--------------------------------------------------------------------------------

```javascript
/**
 * Provider validation constants
 * Defines which providers should be validated against the supported-models.json file
 */

// Providers that have predefined model lists and should be validated
export const VALIDATED_PROVIDERS = [
	'anthropic',
	'openai',
	'google',
	'perplexity',
	'xai',
	'groq',
	'mistral'
];

// Custom providers object for easy named access
export const CUSTOM_PROVIDERS = {
	AZURE: 'azure',
	VERTEX: 'vertex',
	BEDROCK: 'bedrock',
	OPENROUTER: 'openrouter',
	OLLAMA: 'ollama',
	CLAUDE_CODE: 'claude-code',
	MCP: 'mcp',
	GEMINI_CLI: 'gemini-cli',
	GROK_CLI: 'grok-cli'
};

// Custom providers array (for backward compatibility and iteration)
export const CUSTOM_PROVIDERS_ARRAY = Object.values(CUSTOM_PROVIDERS);

// All known providers (for reference)
export const ALL_PROVIDERS = [
	...VALIDATED_PROVIDERS,
	...CUSTOM_PROVIDERS_ARRAY
];

```

--------------------------------------------------------------------------------
/apps/cli/src/index.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * @fileoverview Main entry point for @tm/cli package
 * Exports all public APIs for the CLI presentation layer
 */

// Commands
export { ListTasksCommand } from './commands/list.command.js';
export { ShowCommand } from './commands/show.command.js';
export { AuthCommand } from './commands/auth.command.js';
export { ContextCommand } from './commands/context.command.js';
export { StartCommand } from './commands/start.command.js';
export { SetStatusCommand } from './commands/set-status.command.js';

// UI utilities (for other commands to use)
export * as ui from './utils/ui.js';

// Auto-update utilities
export {
	checkForUpdate,
	performAutoUpdate,
	displayUpgradeNotification,
	compareVersions
} from './utils/auto-update.js';

// Re-export commonly used types from tm-core
export type {
	Task,
	TaskStatus,
	TaskPriority,
	TaskMasterCore
} from '@tm/core';

```

--------------------------------------------------------------------------------
/.claude/commands/tm/init/init-project-quick.md:
--------------------------------------------------------------------------------

```markdown
Quick initialization with auto-confirmation.

Arguments: $ARGUMENTS

Initialize a Task Master project without prompts, accepting all defaults.

## Quick Setup

```bash
task-master init -y
```

## What It Does

1. Creates `.taskmaster/` directory structure
2. Initializes empty `tasks.json`
3. Sets up default configuration
4. Uses directory name as project name
5. Skips all confirmation prompts

## Smart Defaults

- Project name: Current directory name
- Description: "Task Master Project"
- Model config: Existing environment vars
- Task structure: Standard format

## Next Steps

After quick init:
1. Configure AI models if needed:
   ```
   /project:tm/models/setup
   ```

2. Parse PRD if available:
   ```
   /project:tm/parse-prd <file>
   ```

3. Or create first task:
   ```
   /project:tm/add-task create initial setup
   ```

Perfect for rapid project setup!
```

--------------------------------------------------------------------------------
/assets/claude/commands/tm/init/init-project-quick.md:
--------------------------------------------------------------------------------

```markdown
Quick initialization with auto-confirmation.

Arguments: $ARGUMENTS

Initialize a Task Master project without prompts, accepting all defaults.

## Quick Setup

```bash
task-master init -y
```

## What It Does

1. Creates `.taskmaster/` directory structure
2. Initializes empty `tasks.json`
3. Sets up default configuration
4. Uses directory name as project name
5. Skips all confirmation prompts

## Smart Defaults

- Project name: Current directory name
- Description: "Task Master Project"
- Model config: Existing environment vars
- Task structure: Standard format

## Next Steps

After quick init:
1. Configure AI models if needed:
   ```
   /project:tm/models/setup
   ```

2. Parse PRD if available:
   ```
   /project:tm/parse-prd <file>
   ```

3. Or create first task:
   ```
   /project:tm/add-task create initial setup
   ```

Perfect for rapid project setup!
```

--------------------------------------------------------------------------------
/apps/extension/src/webview/constants/index.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * Application constants
 */

import type { Status } from '@/components/ui/shadcn-io/kanban';

export const kanbanStatuses = [
	{
		id: 'pending',
		title: 'Pending',
		color: 'yellow',
		className: 'text-yellow-600 border-yellow-600/20'
	},
	{
		id: 'in-progress',
		title: 'In Progress',
		color: 'blue',
		className: 'text-blue-600 border-blue-600/20'
	},
	{
		id: 'review',
		title: 'Review',
		color: 'purple',
		className: 'text-purple-600 border-purple-600/20'
	},
	{
		id: 'done',
		title: 'Done',
		color: 'green',
		className: 'text-green-600 border-green-600/20'
	},
	{
		id: 'deferred',
		title: 'Deferred',
		color: 'gray',
		className: 'text-gray-600 border-gray-600/20'
	}
] as const;

export const CACHE_DURATION = 30000; // 30 seconds
export const REQUEST_TIMEOUT = 30000; // 30 seconds
export const HEADER_HEIGHT = 73; // Header with padding and border

```

--------------------------------------------------------------------------------
/.taskmaster/tasks/task_002_tm-start.txt:
--------------------------------------------------------------------------------

```
# Task ID: 2
# Title: Register start command in CLI
# Status: pending
# Dependencies: 7
# Priority: high
# Description: Register the start command in the CLI application
# Details:
Update the CLI application to register the new start command. This involves importing the StartCommand class and adding it to the commands array in the CLI initialization.

In `apps/cli/src/index.ts` or the appropriate file where commands are registered:

```typescript
import { StartCommand } from './commands/start.command';

// Add StartCommand to the commands array
const commands = [
  // ... existing commands
  new StartCommand(),
];

// Register all commands
commands.forEach(command => command.register(program));
```

# Test Strategy:
Verify the command is correctly registered by running the CLI with --help and checking that the start command appears in the list of available commands.

```

--------------------------------------------------------------------------------
/apps/cli/src/ui/components/suggested-steps.component.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * @fileoverview Suggested next steps component
 * Displays helpful command suggestions at the end of the list
 */

import chalk from 'chalk';
import boxen from 'boxen';

/**
 * Display suggested next steps section
 */
export function displaySuggestedNextSteps(): void {
	const steps = [
		`${chalk.cyan('1.')} Run ${chalk.yellow('task-master next')} to see what to work on next`,
		`${chalk.cyan('2.')} Run ${chalk.yellow('task-master expand --id=<id>')} to break down a task into subtasks`,
		`${chalk.cyan('3.')} Run ${chalk.yellow('task-master set-status --id=<id> --status=done')} to mark a task as complete`
	];

	console.log(
		boxen(
			chalk.white.bold('Suggested Next Steps:') + '\n\n' + steps.join('\n'),
			{
				padding: 1,
				margin: { top: 0, bottom: 1 },
				borderStyle: 'round',
				borderColor: 'gray',
				width: process.stdout.columns * 0.97
			}
		)
	);
}

```

--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------

```json
{
	"compilerOptions": {
		"target": "ES2022",
		"module": "ESNext",
		"moduleResolution": "bundler",
		"lib": ["ES2022"],
		"types": ["node"],
		"allowJs": true,
		"resolveJsonModule": true,
		"esModuleInterop": true,
		"forceConsistentCasingInFileNames": true,
		"strict": true,
		"skipLibCheck": true,
		"noEmit": true,
		"baseUrl": ".",
		"paths": {
			"@tm/core": ["./packages/tm-core/src/index.ts"],
			"@tm/core/*": ["./packages/tm-core/src/*"],
			"@tm/cli": ["./apps/cli/src/index.ts"],
			"@tm/cli/*": ["./apps/cli/src/*"],
			"@tm/build-config": ["./packages/build-config/src/index.ts"],
			"@tm/build-config/*": ["./packages/build-config/src/*"]
		}
	},
	"tsx": {
		"tsconfig": {
			"allowImportingTsExtensions": false
		}
	},
	"include": [
		"bin/**/*",
		"scripts/**/*",
		"packages/*/src/**/*",
		"apps/*/src/**/*"
	],
	"exclude": ["node_modules", "dist", "**/dist"]
}

```

--------------------------------------------------------------------------------
/.github/workflows/auto-close-duplicates.yml:
--------------------------------------------------------------------------------

```yaml
name: Auto-close duplicate issues
# description: Auto-closes issues that are duplicates of existing issues

on:
  schedule:
    - cron: "0 9 * * *"  # Runs daily at 9 AM UTC
  workflow_dispatch:

jobs:
  auto-close-duplicates:
    runs-on: ubuntu-latest
    timeout-minutes: 10
    permissions:
      contents: read
      issues: write  # Need write permission to close issues and add comments

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20

      - name: Auto-close duplicate issues
        run: node .github/scripts/auto-close-duplicates.mjs
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          GITHUB_REPOSITORY_OWNER: ${{ github.repository_owner }}
          GITHUB_REPOSITORY_NAME: ${{ github.event.repository.name }}

```

--------------------------------------------------------------------------------
/apps/cli/CHANGELOG.md:
--------------------------------------------------------------------------------

```markdown
# @tm/cli

## null

### Patch Changes

- Updated dependencies []:
  - @tm/core@null

## 0.27.0

### Patch Changes

- Updated dependencies []:
  - @tm/[email protected]

## 0.27.0-rc.0

### Minor Changes

- [#1213](https://github.com/eyaltoledano/claude-task-master/pull/1213) [`137ef36`](https://github.com/eyaltoledano/claude-task-master/commit/137ef362789a9cdfdb1925e35e0438c1fa6c69ee) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - testing this stuff out to see how the release candidate works with monorepo

## 1.1.0-rc.0

### Minor Changes

- [#1213](https://github.com/eyaltoledano/claude-task-master/pull/1213) [`cd90b4d`](https://github.com/eyaltoledano/claude-task-master/commit/cd90b4d65fc2f04bdad9fb73aba320b58a124240) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - testing this stuff out to see how the release candidate works with monorepo

```

--------------------------------------------------------------------------------
/apps/extension/src/webview/providers/QueryProvider.tsx:
--------------------------------------------------------------------------------

```typescript
import React from 'react';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';

// Create a stable query client
const queryClient = new QueryClient({
	defaultOptions: {
		queries: {
			// Don't refetch on window focus by default
			refetchOnWindowFocus: false,
			// Keep data fresh for 30 seconds
			staleTime: 30 * 1000,
			// Cache data for 5 minutes
			gcTime: 5 * 60 * 1000,
			// Retry failed requests 3 times
			retry: 3,
			// Retry delay exponentially backs off
			retryDelay: (attemptIndex) => Math.min(1000 * 2 ** attemptIndex, 30000)
		},
		mutations: {
			// Don't retry mutations by default
			retry: false
		}
	}
});

interface QueryProviderProps {
	children: React.ReactNode;
}

export const QueryProvider: React.FC<QueryProviderProps> = ({ children }) => {
	return (
		<QueryClientProvider client={queryClient}>{children}</QueryClientProvider>
	);
};

```

--------------------------------------------------------------------------------
/packages/tm-core/src/storage/file-storage/path-resolver.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * @fileoverview Path resolution utilities for single tasks.json file
 */

import path from 'node:path';

/**
 * Handles path resolution for the single tasks.json file storage
 */
export class PathResolver {
	private readonly basePath: string;
	private readonly tasksDir: string;
	private readonly tasksFilePath: string;

	constructor(projectPath: string) {
		this.basePath = path.join(projectPath, '.taskmaster');
		this.tasksDir = path.join(this.basePath, 'tasks');
		this.tasksFilePath = path.join(this.tasksDir, 'tasks.json');
	}

	/**
	 * Get the base storage directory path
	 */
	getBasePath(): string {
		return this.basePath;
	}

	/**
	 * Get the tasks directory path
	 */
	getTasksDir(): string {
		return this.tasksDir;
	}

	/**
	 * Get the path to the single tasks.json file
	 * All tags are stored in this one file
	 */
	getTasksPath(): string {
		return this.tasksFilePath;
	}
}

```

--------------------------------------------------------------------------------
/.claude/commands/tm/set-status/to-in-progress.md:
--------------------------------------------------------------------------------

```markdown
Start working on a task by setting its status to in-progress.

Arguments: $ARGUMENTS (task ID)

## Starting Work on Task

This command does more than just change status - it prepares your environment for productive work.

## Pre-Start Checks

1. Verify dependencies are met
2. Check if another task is already in-progress
3. Ensure task details are complete
4. Validate test strategy exists

## Execution

```bash
task-master set-status --id=$ARGUMENTS --status=in-progress
```

## Environment Setup

After setting to in-progress:
1. Create/checkout appropriate git branch
2. Open relevant documentation
3. Set up test watchers if applicable
4. Display task details and acceptance criteria
5. Show similar completed tasks for reference

## Smart Suggestions

- Estimated completion time based on complexity
- Related files from similar tasks
- Potential blockers to watch for
- Recommended first steps
```

--------------------------------------------------------------------------------
/assets/claude/commands/tm/set-status/to-in-progress.md:
--------------------------------------------------------------------------------

```markdown
Start working on a task by setting its status to in-progress.

Arguments: $ARGUMENTS (task ID)

## Starting Work on Task

This command does more than just change status - it prepares your environment for productive work.

## Pre-Start Checks

1. Verify dependencies are met
2. Check if another task is already in-progress
3. Ensure task details are complete
4. Validate test strategy exists

## Execution

```bash
task-master set-status --id=$ARGUMENTS --status=in-progress
```

## Environment Setup

After setting to in-progress:
1. Create/checkout appropriate git branch
2. Open relevant documentation
3. Set up test watchers if applicable
4. Display task details and acceptance criteria
5. Show similar completed tasks for reference

## Smart Suggestions

- Estimated completion time based on complexity
- Related files from similar tasks
- Potential blockers to watch for
- Recommended first steps
```

--------------------------------------------------------------------------------
/turbo.json:
--------------------------------------------------------------------------------

```json
{
	"$schema": "https://turbo.build/schema.json",
	"extends": ["//"],
	"tasks": {
		"build": {
			"dependsOn": ["^build"],
			"outputs": ["dist/**"],
			"outputLogs": "new-only"
		},
		"dev": {
			"cache": false,
			"persistent": true,
			"inputs": [
				"$TURBO_DEFAULT$",
				"!{packages,apps}/**/dist/**",
				"!{packages,apps}/**/node_modules/**"
			]
		},
		"test:watch": {
			"cache": false,
			"persistent": true,
			"dependsOn": ["^build"]
		},
		"lint": {
			"dependsOn": ["^build"],
			"inputs": [
				"$TURBO_DEFAULT$",
				"!{packages,apps}/**/dist/**",
				"!{packages,apps}/**/node_modules/**"
			],
			"outputLogs": "new-only"
		},
		"typecheck": {
			"dependsOn": ["^build"],
			"inputs": [
				"$TURBO_DEFAULT$",
				"!{packages,apps}/**/dist/**",
				"!{packages,apps}/**/node_modules/**"
			],
			"outputLogs": "new-only"
		}
	},
	"globalDependencies": ["turbo.json", "tsconfig.json", ".env*"]
}

```

--------------------------------------------------------------------------------
/mcp-server/src/core/direct-functions/response-language.js:
--------------------------------------------------------------------------------

```javascript
/**
 * response-language.js
 * Direct function for managing response language via MCP
 */

import { setResponseLanguage } from '../../../../scripts/modules/task-manager.js';
import {
	enableSilentMode,
	disableSilentMode
} from '../../../../scripts/modules/utils.js';
import { createLogWrapper } from '../../tools/utils.js';

export async function responseLanguageDirect(args, log, context = {}) {
	const { projectRoot, language } = args;
	const mcpLog = createLogWrapper(log);

	log.info(
		`Executing response-language_direct with args: ${JSON.stringify(args)}`
	);
	log.info(`Using project root: ${projectRoot}`);

	try {
		enableSilentMode();
		return setResponseLanguage(language, {
			mcpLog,
			projectRoot
		});
	} catch (error) {
		return {
			success: false,
			error: {
				code: 'DIRECT_FUNCTION_ERROR',
				message: error.message,
				details: error.stack
			}
		};
	} finally {
		disableSilentMode();
	}
}

```

--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE/integration.md:
--------------------------------------------------------------------------------

```markdown
# 🔌 New Integration

## What tool/IDE is being integrated?

<!-- Name and brief description -->

## What can users do with it?

<!-- Key benefits -->

## How to Enable

### Setup

```bash
task-master rules add [name]
# Any other setup steps
```

### Example Usage

<!-- Show it in action -->

```bash
# Real example
```

### Natural Language Hooks (if applicable)

```
"When tests pass, mark task as done"
# Other examples
```

## Contributor Checklist

- [ ] Created changeset: `npm run changeset`
- [ ] Tests pass: `npm test`
- [ ] Format check passes: `npm run format-check`
- [ ] Addressed CodeRabbit comments
- [ ] Integration fully tested with target tool/IDE
- [ ] Error scenarios tested
- [ ] Added integration tests
- [ ] Documentation includes setup guide
- [ ] Examples are working and clear

---

## For Maintainers

- [ ] Integration stability verified
- [ ] Documentation comprehensive
- [ ] Examples working

```

--------------------------------------------------------------------------------
/scripts/task-complexity-report.json:
--------------------------------------------------------------------------------

```json
{
	"meta": {
		"generatedAt": "2025-06-14T02:15:51.082Z",
		"tasksAnalyzed": 2,
		"totalTasks": 3,
		"analysisCount": 5,
		"thresholdScore": 5,
		"projectName": "Test Project",
		"usedResearch": false
	},
	"complexityAnalysis": [
		{
			"id": 1,
			"complexity": 3,
			"subtaskCount": 2
		},
		{
			"id": 2,
			"complexity": 7,
			"subtaskCount": 5
		},
		{
			"id": 3,
			"complexity": 9,
			"subtaskCount": 8
		},
		{
			"taskId": 1,
			"taskTitle": "Task 1",
			"complexityScore": 5,
			"recommendedSubtasks": 3,
			"expansionPrompt": "Break down this task with a focus on task 1.",
			"reasoning": "Automatically added due to missing analysis in AI response."
		},
		{
			"taskId": 2,
			"taskTitle": "Task 2",
			"complexityScore": 5,
			"recommendedSubtasks": 3,
			"expansionPrompt": "Break down this task with a focus on task 2.",
			"reasoning": "Automatically added due to missing analysis in AI response."
		}
	]
}

```

--------------------------------------------------------------------------------
/.claude/commands/tm/set-status/to-done.md:
--------------------------------------------------------------------------------

```markdown
Mark a task as completed.

Arguments: $ARGUMENTS (task ID)

## Completing a Task

This command validates task completion and updates project state intelligently.

## Pre-Completion Checks

1. Verify test strategy was followed
2. Check if all subtasks are complete
3. Validate acceptance criteria met
4. Ensure code is committed

## Execution

```bash
task-master set-status --id=$ARGUMENTS --status=done
```

## Post-Completion Actions

1. **Update Dependencies**
   - Identify newly unblocked tasks
   - Update sprint progress
   - Recalculate project timeline

2. **Documentation**
   - Generate completion summary
   - Update CLAUDE.md with learnings
   - Log implementation approach

3. **Next Steps**
   - Show newly available tasks
   - Suggest logical next task
   - Update velocity metrics

## Celebration & Learning

- Show impact of completion
- Display unblocked work
- Recognize achievement
- Capture lessons learned
```

--------------------------------------------------------------------------------
/assets/claude/commands/tm/set-status/to-done.md:
--------------------------------------------------------------------------------

```markdown
Mark a task as completed.

Arguments: $ARGUMENTS (task ID)

## Completing a Task

This command validates task completion and updates project state intelligently.

## Pre-Completion Checks

1. Verify test strategy was followed
2. Check if all subtasks are complete
3. Validate acceptance criteria met
4. Ensure code is committed

## Execution

```bash
task-master set-status --id=$ARGUMENTS --status=done
```

## Post-Completion Actions

1. **Update Dependencies**
   - Identify newly unblocked tasks
   - Update sprint progress
   - Recalculate project timeline

2. **Documentation**
   - Generate completion summary
   - Update CLAUDE.md with learnings
   - Log implementation approach

3. **Next Steps**
   - Show newly available tasks
   - Suggest logical next task
   - Update velocity metrics

## Celebration & Learning

- Show impact of completion
- Display unblocked work
- Recognize achievement
- Capture lessons learned
```

--------------------------------------------------------------------------------
/apps/docs/logo/dark.svg:
--------------------------------------------------------------------------------

```
<svg width="800" height="240" viewBox="0 0 800 240" xmlns="http://www.w3.org/2000/svg">
  <!-- Background -->
  <rect width="800" height="240" fill="transparent"/>
  
  <!-- Curly braces -->
  <text x="40" y="156" font-size="140" fill="white" font-family="monospace">{</text>
  <text x="230" y="156" font-size="140" fill="white" font-family="monospace">}</text>
  
  <!-- Blue form with check -->
  <rect x="120" y="50" width="120" height="140" rx="16" fill="#3366CC"/>
  <polyline points="150,110 164,128 190,84" fill="none" stroke="white" stroke-width="10"/>
  <circle cx="150" cy="144" r="7" fill="white"/>
  <rect x="168" y="140" width="48" height="10" fill="white"/>
  <circle cx="150" cy="168" r="7" fill="white"/>
  <rect x="168" y="164" width="48" height="10" fill="white"/>

  <!-- Text -->
  <text x="340" y="156" font-family="Arial, sans-serif" font-size="76" font-weight="bold" fill="white">Task Master</text>
</svg>

```

--------------------------------------------------------------------------------
/apps/extension/src/webview/components/AppContent.tsx:
--------------------------------------------------------------------------------

```typescript
import React from 'react';
import { TaskMasterKanban } from './TaskMasterKanban';
import TaskDetailsView from '@/components/TaskDetailsView';
import { ConfigView } from '@/components/ConfigView';
import { useVSCodeContext } from '../contexts/VSCodeContext';

export const AppContent: React.FC = () => {
	const { state, dispatch, sendMessage } = useVSCodeContext();

	if (state.currentView === 'config') {
		return (
			<ConfigView
				sendMessage={sendMessage}
				onNavigateBack={() => dispatch({ type: 'NAVIGATE_TO_KANBAN' })}
			/>
		);
	}

	if (state.currentView === 'task-details' && state.selectedTaskId) {
		return (
			<TaskDetailsView
				taskId={state.selectedTaskId}
				onNavigateBack={() => dispatch({ type: 'NAVIGATE_TO_KANBAN' })}
				onNavigateToTask={(taskId: string) =>
					dispatch({ type: 'NAVIGATE_TO_TASK', payload: taskId })
				}
			/>
		);
	}

	// Default to Kanban view
	return <TaskMasterKanban />;
};

```

--------------------------------------------------------------------------------
/.claude/commands/tm/set-status/to-review.md:
--------------------------------------------------------------------------------

```markdown
Set a task's status to review.

Arguments: $ARGUMENTS (task ID)

## Marking Task for Review

This status indicates work is complete but needs verification before final approval.

## When to Use Review Status

- Code complete but needs peer review
- Implementation done but needs testing
- Documentation written but needs proofreading
- Design complete but needs stakeholder approval

## Execution

```bash
task-master set-status --id=$ARGUMENTS --status=review
```

## Review Preparation

When setting to review:
1. **Generate Review Checklist**
   - Link to PR/MR if applicable
   - Highlight key changes
   - Note areas needing attention
   - Include test results

2. **Documentation**
   - Update task with review notes
   - Link relevant artifacts
   - Specify reviewers if known

3. **Smart Actions**
   - Create review reminders
   - Track review duration
   - Suggest reviewers based on expertise
   - Prepare rollback plan if needed
```

--------------------------------------------------------------------------------
/assets/claude/commands/tm/set-status/to-review.md:
--------------------------------------------------------------------------------

```markdown
Set a task's status to review.

Arguments: $ARGUMENTS (task ID)

## Marking Task for Review

This status indicates work is complete but needs verification before final approval.

## When to Use Review Status

- Code complete but needs peer review
- Implementation done but needs testing
- Documentation written but needs proofreading
- Design complete but needs stakeholder approval

## Execution

```bash
task-master set-status --id=$ARGUMENTS --status=review
```

## Review Preparation

When setting to review:
1. **Generate Review Checklist**
   - Link to PR/MR if applicable
   - Highlight key changes
   - Note areas needing attention
   - Include test results

2. **Documentation**
   - Update task with review notes
   - Link relevant artifacts
   - Specify reviewers if known

3. **Smart Actions**
   - Create review reminders
   - Track review duration
   - Suggest reviewers based on expertise
   - Prepare rollback plan if needed
```

--------------------------------------------------------------------------------
/apps/docs/logo/light.svg:
--------------------------------------------------------------------------------

```
<svg width="800" height="240" viewBox="0 0 800 240" xmlns="http://www.w3.org/2000/svg">
  <!-- Background -->
  <rect width="800" height="240" fill="transparent"/>

  <!-- Curly braces -->
  <text x="40" y="156" font-size="140" fill="#000000" font-family="monospace">{</text>
  <text x="230" y="156" font-size="140" fill="#000000" font-family="monospace">}</text>

  <!-- Blue form with check -->
  <rect x="120" y="50" width="120" height="140" rx="16" fill="#3366CC"/>
  <polyline points="150,110 164,128 190,84" fill="none" stroke="#FFFFFF" stroke-width="10"/>
  <circle cx="150" cy="144" r="7" fill="#FFFFFF"/>
  <rect x="168" y="140" width="48" height="10" fill="#FFFFFF"/>
  <circle cx="150" cy="168" r="7" fill="#FFFFFF"/>
  <rect x="168" y="164" width="48" height="10" fill="#FFFFFF"/>

  <!-- Text -->
  <text x="340" y="156" font-family="Arial, sans-serif" font-size="76" font-weight="bold" fill="#000000">Task Master</text>
</svg>

```

--------------------------------------------------------------------------------
/apps/cli/tsconfig.json:
--------------------------------------------------------------------------------

```json
{
	"compilerOptions": {
		"target": "ES2022",
		"module": "NodeNext",
		"lib": ["ES2022"],
		"declaration": true,
		"declarationMap": true,
		"sourceMap": true,
		"outDir": "./dist",
		"baseUrl": ".",
		"rootDir": "./src",
		"strict": true,
		"noImplicitAny": true,
		"strictNullChecks": true,
		"strictFunctionTypes": true,
		"strictBindCallApply": true,
		"strictPropertyInitialization": true,
		"noImplicitThis": true,
		"alwaysStrict": true,
		"noUnusedLocals": true,
		"noUnusedParameters": true,
		"noImplicitReturns": true,
		"noFallthroughCasesInSwitch": true,
		"esModuleInterop": true,
		"skipLibCheck": true,
		"forceConsistentCasingInFileNames": true,
		"moduleResolution": "NodeNext",
		"moduleDetection": "force",
		"types": ["node"],
		"resolveJsonModule": true,
		"isolatedModules": true,
		"allowImportingTsExtensions": false
	},
	"include": ["src/**/*"],
	"exclude": ["node_modules", "dist", "tests", "**/*.test.ts", "**/*.spec.ts"]
}

```

--------------------------------------------------------------------------------
/packages/tm-core/tsconfig.json:
--------------------------------------------------------------------------------

```json
{
	"compilerOptions": {
		"target": "ES2022",
		"module": "NodeNext",
		"lib": ["ES2022"],
		"declaration": true,
		"declarationMap": true,
		"sourceMap": true,
		"outDir": "./dist",
		"baseUrl": ".",
		"rootDir": "./src",
		"strict": true,
		"noImplicitAny": true,
		"strictNullChecks": true,
		"strictFunctionTypes": true,
		"strictBindCallApply": true,
		"strictPropertyInitialization": true,
		"noImplicitThis": true,
		"alwaysStrict": true,
		"noUnusedLocals": true,
		"noUnusedParameters": true,
		"noImplicitReturns": true,
		"noFallthroughCasesInSwitch": true,
		"esModuleInterop": true,
		"skipLibCheck": true,
		"forceConsistentCasingInFileNames": true,
		"moduleResolution": "NodeNext",
		"moduleDetection": "force",
		"types": ["node"],
		"resolveJsonModule": true,
		"isolatedModules": true,
		"allowImportingTsExtensions": false
	},
	"include": ["src/**/*"],
	"exclude": ["node_modules", "dist", "tests", "**/*.test.ts", "**/*.spec.ts"]
}

```

--------------------------------------------------------------------------------
/apps/cli/src/ui/components/header.component.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * @fileoverview Task Master header component
 * Displays the banner, version, project info, and file path
 */

import chalk from 'chalk';

/**
 * Header configuration options
 */
export interface HeaderOptions {
	title?: string;
	tag?: string;
	filePath?: string;
}

/**
 * Display the Task Master header with project info
 */
export function displayHeader(options: HeaderOptions = {}): void {
	const { filePath, tag } = options;

	// Display tag and file path info
	if (tag) {
		let tagInfo = '';

		if (tag && tag !== 'master') {
			tagInfo = `🏷 tag: ${chalk.cyan(tag)}`;
		} else {
			tagInfo = `🏷 tag: ${chalk.cyan('master')}`;
		}

		console.log(tagInfo);

		if (filePath) {
			// Convert to absolute path if it's relative
			const absolutePath = filePath.startsWith('/')
				? filePath
				: `${process.cwd()}/${filePath}`;
			console.log(`Listing tasks from: ${chalk.dim(absolutePath)}`);
		}

		console.log(); // Empty line for spacing
	}
}

```

--------------------------------------------------------------------------------
/.claude/commands/tm/list/list-tasks-by-status.md:
--------------------------------------------------------------------------------

```markdown
List tasks filtered by a specific status.

Arguments: $ARGUMENTS

Parse the status from arguments and list only tasks matching that status.

## Status Options
- `pending` - Not yet started
- `in-progress` - Currently being worked on
- `done` - Completed
- `review` - Awaiting review
- `deferred` - Postponed
- `cancelled` - Cancelled

## Execution

Based on $ARGUMENTS, run:
```bash
task-master list --status=$ARGUMENTS
```

## Enhanced Display

For the filtered results:
- Group by priority within the status
- Show time in current status
- Highlight tasks approaching deadlines
- Display blockers and dependencies
- Suggest next actions for each status group

## Intelligent Insights

Based on the status filter:
- **Pending**: Show recommended start order
- **In-Progress**: Display idle time warnings
- **Done**: Show newly unblocked tasks
- **Review**: Indicate review duration
- **Deferred**: Show reactivation criteria
- **Cancelled**: Display impact analysis
```

--------------------------------------------------------------------------------
/assets/claude/commands/tm/list/list-tasks-by-status.md:
--------------------------------------------------------------------------------

```markdown
List tasks filtered by a specific status.

Arguments: $ARGUMENTS

Parse the status from arguments and list only tasks matching that status.

## Status Options
- `pending` - Not yet started
- `in-progress` - Currently being worked on
- `done` - Completed
- `review` - Awaiting review
- `deferred` - Postponed
- `cancelled` - Cancelled

## Execution

Based on $ARGUMENTS, run:
```bash
task-master list --status=$ARGUMENTS
```

## Enhanced Display

For the filtered results:
- Group by priority within the status
- Show time in current status
- Highlight tasks approaching deadlines
- Display blockers and dependencies
- Suggest next actions for each status group

## Intelligent Insights

Based on the status filter:
- **Pending**: Show recommended start order
- **In-Progress**: Display idle time warnings
- **Done**: Show newly unblocked tasks
- **Review**: Indicate review duration
- **Deferred**: Show reactivation criteria
- **Cancelled**: Display impact analysis
```

--------------------------------------------------------------------------------
/apps/docs/introduction.mdx:
--------------------------------------------------------------------------------

```markdown
<Tip>
Welcome to v1 of the Task Master Docs. Expect weekly updates as we expand and refine each section.
</Tip>

We've organized the docs into three sections depending on your experience level and goals:

### Getting Started - Jump in to [Quick Start](/docs/getting-started/quick-start)
Designed for first-time users. Get set up, create your first PRD, and run your first task.

### Best Practices
Covers common workflows, strategic usage of commands, model configuration tips, and real-world usage patterns. Recommended for active users.

### Technical Capabilities
A detailed glossary of every root command and available capability — meant for power users and contributors.

---

Thanks for being here early. If you spot something broken or want to contribute, check out the [GitHub repo](https://github.com/eyaltoledano/claude-task-master).

Have questions? Join our [Discord community](https://discord.gg/fWJkU7rf) to connect with other users and get help from the team.
```

--------------------------------------------------------------------------------
/.taskmaster/config.json:
--------------------------------------------------------------------------------

```json
{
	"models": {
		"main": {
			"provider": "anthropic",
			"modelId": "claude-sonnet-4-20250514",
			"maxTokens": 64000,
			"temperature": 0.2
		},
		"research": {
			"provider": "perplexity",
			"modelId": "sonar",
			"maxTokens": 8700,
			"temperature": 0.1
		},
		"fallback": {
			"provider": "anthropic",
			"modelId": "claude-3-7-sonnet-20250219",
			"maxTokens": 120000,
			"temperature": 0.2
		}
	},
	"global": {
		"logLevel": "info",
		"debug": false,
		"defaultNumTasks": 10,
		"defaultSubtasks": 5,
		"defaultPriority": "medium",
		"projectName": "Taskmaster",
		"ollamaBaseURL": "http://localhost:11434/api",
		"bedrockBaseURL": "https://bedrock.us-east-1.amazonaws.com",
		"responseLanguage": "English",
		"enableCodebaseAnalysis": true,
		"userId": "1234567890",
		"azureBaseURL": "https://your-endpoint.azure.com/",
		"defaultTag": "master"
	},
	"claudeCode": {},
	"grokCli": {
		"timeout": 120000,
		"workingDirectory": null,
		"defaultModel": "grok-4-latest"
	}
}

```

--------------------------------------------------------------------------------
/.github/scripts/tag-extension.mjs:
--------------------------------------------------------------------------------

```
#!/usr/bin/env node
import assert from 'node:assert/strict';
import { readFileSync } from 'node:fs';
import { join, dirname } from 'node:path';
import { fileURLToPath } from 'node:url';
import { findRootDir, createAndPushTag } from './utils.mjs';

const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);

const rootDir = findRootDir(__dirname);

// Read the extension's package.json
const extensionDir = join(rootDir, 'apps', 'extension');
const pkgPath = join(extensionDir, 'package.json');

let pkg;
try {
	const pkgContent = readFileSync(pkgPath, 'utf8');
	pkg = JSON.parse(pkgContent);
} catch (error) {
	console.error('Failed to read package.json:', error.message);
	process.exit(1);
}

// Ensure we have required fields
assert(pkg.name, 'package.json must have a name field');
assert(pkg.version, 'package.json must have a version field');

const tag = `${pkg.name}@${pkg.version}`;

// Create and push the tag if it doesn't exist
createAndPushTag(tag);

```

--------------------------------------------------------------------------------
/packages/tm-core/src/config/index.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * @fileoverview Configuration module exports
 * Exports the main ConfigManager and all configuration services
 */

// Export the main ConfigManager
export { ConfigManager } from './config-manager.js';

// Export all configuration services for advanced usage
export {
	ConfigLoader,
	ConfigMerger,
	CONFIG_PRECEDENCE,
	RuntimeStateManager,
	ConfigPersistence,
	EnvironmentConfigProvider,
	type ConfigSource,
	type RuntimeState,
	type PersistenceOptions
} from './services/index.js';

// Re-export configuration interfaces
export type {
	IConfiguration,
	PartialConfiguration,
	ModelConfig,
	ProviderConfig,
	TaskSettings,
	TagSettings,
	StorageSettings,
	RetrySettings,
	LoggingSettings,
	SecuritySettings,
	ConfigValidationResult,
	EnvironmentConfig,
	ConfigSchema,
	ConfigProperty,
	IConfigurationFactory,
	IConfigurationManager
} from '../interfaces/configuration.interface.js';

// Re-export default values
export { DEFAULT_CONFIG_VALUES } from '../interfaces/configuration.interface.js';

```

--------------------------------------------------------------------------------
/.claude/commands/tm/expand/expand-all-tasks.md:
--------------------------------------------------------------------------------

```markdown
Expand all pending tasks that need subtasks.

## Bulk Task Expansion

Intelligently expands all tasks that would benefit from breakdown.

## Execution

```bash
task-master expand --all
```

## Smart Selection

Only expands tasks that:
- Are marked as pending
- Have high complexity (>5)
- Lack existing subtasks
- Would benefit from breakdown

## Expansion Process

1. **Analysis Phase**
   - Identify expansion candidates
   - Group related tasks
   - Plan expansion strategy

2. **Batch Processing**
   - Expand tasks in logical order
   - Maintain consistency
   - Preserve relationships
   - Optimize for parallelism

3. **Quality Control**
   - Ensure subtask quality
   - Avoid over-decomposition
   - Maintain task coherence
   - Update dependencies

## Options

- Add `force` to expand all regardless of complexity
- Add `research` for enhanced AI analysis

## Results

After bulk expansion:
- Summary of tasks expanded
- New subtask count
- Updated complexity metrics
- Suggested task order
```

--------------------------------------------------------------------------------
/assets/claude/commands/tm/expand/expand-all-tasks.md:
--------------------------------------------------------------------------------

```markdown
Expand all pending tasks that need subtasks.

## Bulk Task Expansion

Intelligently expands all tasks that would benefit from breakdown.

## Execution

```bash
task-master expand --all
```

## Smart Selection

Only expands tasks that:
- Are marked as pending
- Have high complexity (>5)
- Lack existing subtasks
- Would benefit from breakdown

## Expansion Process

1. **Analysis Phase**
   - Identify expansion candidates
   - Group related tasks
   - Plan expansion strategy

2. **Batch Processing**
   - Expand tasks in logical order
   - Maintain consistency
   - Preserve relationships
   - Optimize for parallelism

3. **Quality Control**
   - Ensure subtask quality
   - Avoid over-decomposition
   - Maintain task coherence
   - Update dependencies

## Options

- Add `force` to expand all regardless of complexity
- Add `research` for enhanced AI analysis

## Results

After bulk expansion:
- Summary of tasks expanded
- New subtask count
- Updated complexity metrics
- Suggested task order
```

--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE/feature.md:
--------------------------------------------------------------------------------

```markdown
## ✨ New Feature

### 📋 Feature Description
<!-- Brief description -->

### 🎯 Problem Statement
<!-- What problem does this feature solve? Why is it needed? -->

### 💡 Solution
<!-- How does this feature solve the problem? What's the approach? -->

### 🔗 Related Issues
<!-- Link related issues: Fixes #123, Part of #456 -->

## How to Use It

### Quick Start
```bash
# Basic usage example
```

### Example
<!-- Show a real use case -->
```bash
# Practical example
```

**What you should see:**
<!-- Expected behavior -->

## Contributor Checklist
- [ ] Created changeset: `npm run changeset`
- [ ] Tests pass: `npm test`
- [ ] Format check passes: `npm run format-check`
- [ ] Addressed CodeRabbit comments
- [ ] Added tests for new functionality
- [ ] Manually tested in CLI mode
- [ ] Manually tested in MCP mode (if applicable)

## Changelog Entry
<!-- One-liner for release notes -->

---

### For Maintainers

- [ ] Feature aligns with project vision
- [ ] CIs pass
- [ ] Changeset file exists

```

--------------------------------------------------------------------------------
/.claude/commands/tm/set-status/to-deferred.md:
--------------------------------------------------------------------------------

```markdown
Defer a task for later consideration.

Arguments: $ARGUMENTS (task ID)

## Deferring a Task

This status indicates a task is valid but not currently actionable or prioritized.

## Valid Reasons for Deferral

- Waiting for external dependencies
- Reprioritized for future sprint
- Blocked by technical limitations
- Resource constraints
- Strategic timing considerations

## Execution

```bash
task-master set-status --id=$ARGUMENTS --status=deferred
```

## Deferral Management

When deferring:
1. **Document Reason**
   - Capture why it's being deferred
   - Set reactivation criteria
   - Note any partial work completed

2. **Impact Analysis**
   - Check dependent tasks
   - Update project timeline
   - Notify affected stakeholders

3. **Future Planning**
   - Set review reminders
   - Tag for specific milestone
   - Preserve context for reactivation
   - Link to blocking issues

## Smart Tracking

- Monitor deferral duration
- Alert when criteria met
- Prevent scope creep
- Regular review cycles
```

--------------------------------------------------------------------------------
/assets/claude/commands/tm/set-status/to-deferred.md:
--------------------------------------------------------------------------------

```markdown
Defer a task for later consideration.

Arguments: $ARGUMENTS (task ID)

## Deferring a Task

This status indicates a task is valid but not currently actionable or prioritized.

## Valid Reasons for Deferral

- Waiting for external dependencies
- Reprioritized for future sprint
- Blocked by technical limitations
- Resource constraints
- Strategic timing considerations

## Execution

```bash
task-master set-status --id=$ARGUMENTS --status=deferred
```

## Deferral Management

When deferring:
1. **Document Reason**
   - Capture why it's being deferred
   - Set reactivation criteria
   - Note any partial work completed

2. **Impact Analysis**
   - Check dependent tasks
   - Update project timeline
   - Notify affected stakeholders

3. **Future Planning**
   - Set review reminders
   - Tag for specific milestone
   - Preserve context for reactivation
   - Link to blocking issues

## Smart Tracking

- Monitor deferral duration
- Alert when criteria met
- Prevent scope creep
- Regular review cycles
```

--------------------------------------------------------------------------------
/packages/tm-core/src/auth/config.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * Centralized authentication configuration
 */

import os from 'os';
import path from 'path';
import { AuthConfig } from './types.js';

// Single base domain for all URLs
// Build-time: process.env.TM_PUBLIC_BASE_DOMAIN gets replaced by tsup's env option
// Default: https://tryhamster.com for production
const BASE_DOMAIN =
	process.env.TM_PUBLIC_BASE_DOMAIN || // This gets replaced at build time by tsup
	'https://tryhamster.com';

/**
 * Default authentication configuration
 * All URL configuration is derived from the single BASE_DOMAIN
 */
export const DEFAULT_AUTH_CONFIG: AuthConfig = {
	// Base domain for all services
	baseUrl: BASE_DOMAIN,

	// Configuration directory and file paths
	configDir: path.join(os.homedir(), '.taskmaster'),
	configFile: path.join(os.homedir(), '.taskmaster', 'auth.json')
};

/**
 * Get merged configuration with optional overrides
 */
export function getAuthConfig(overrides?: Partial<AuthConfig>): AuthConfig {
	return {
		...DEFAULT_AUTH_CONFIG,
		...overrides
	};
}

```

--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------

```markdown
# What type of PR is this?
<!-- Check one -->

 - [ ] 🐛 Bug fix
 - [ ] ✨ Feature
 - [ ] 🔌 Integration
 - [ ] 📝 Docs
 - [ ] 🧹 Refactor
 - [ ] Other:
## Description
<!-- What does this PR do? -->

## Related Issues
<!-- Link issues: Fixes #123 -->

## How to Test This
<!-- Quick steps to verify the changes work -->
```bash
# Example commands or steps
```

**Expected result:**
<!-- What should happen? -->

## Contributor Checklist

- [ ] Created changeset: `npm run changeset`
- [ ] Tests pass: `npm test`
- [ ] Format check passes: `npm run format-check` (or `npm run format` to fix)
- [ ] Addressed CodeRabbit comments (if any)
- [ ] Linked related issues (if any)
- [ ] Manually tested the changes

## Changelog Entry
<!-- One line describing the change for users -->
<!-- Example: "Added Kiro IDE integration with automatic task status updates" -->

---

### For Maintainers

- [ ] PR title follows conventional commits
- [ ] Target branch correct
- [ ] Labels added
- [ ] Milestone assigned (if applicable)

```

--------------------------------------------------------------------------------
/apps/docs/getting-started/quick-start/quick-start.mdx:
--------------------------------------------------------------------------------

```markdown
---
title: Quick Start
sidebarTitle: "Quick Start"
---

This guide is for new users who want to start using Task Master with minimal setup time.

It covers:
- [Requirements](/docs/getting-started/quick-start/requirements): You will need Node.js and an AI model API Key.
- [Installation](/docs/getting-started/quick-start/installation): How to Install Task Master.
- [Configuration](/docs/getting-started/quick-start/configuration-quick): Setting up your API Key, MCP, and more.
- [PRD](/docs/getting-started/quick-start/prd-quick): Writing and parsing your first PRD.
- [Task Setup](/docs/getting-started/quick-start/tasks-quick): Preparing your tasks for execution.
- [Executing Tasks](/docs/getting-started/quick-start/execute-quick): Using Task Master to execute tasks.
- [Rules & Context](/docs/getting-started/quick-start/rules-quick): Learn how and why to build context in your project over time.

<Tip>
By the end of this guide, you'll have everything you need to begin working productively with Task Master.
</Tip>
```

--------------------------------------------------------------------------------
/.claude/commands/tm/init/init-project.md:
--------------------------------------------------------------------------------

```markdown
Initialize a new Task Master project.

Arguments: $ARGUMENTS

Parse arguments to determine initialization preferences.

## Initialization Process

1. **Parse Arguments**
   - PRD file path (if provided)
   - Project name
   - Auto-confirm flag (-y)

2. **Project Setup**
   ```bash
   task-master init
   ```

3. **Smart Initialization**
   - Detect existing project files
   - Suggest project name from directory
   - Check for git repository
   - Verify AI provider configuration

## Configuration Options

Based on arguments:
- `quick` / `-y` → Skip confirmations
- `<file.md>` → Use as PRD after init
- `--name=<name>` → Set project name
- `--description=<desc>` → Set description

## Post-Initialization

After successful init:
1. Show project structure created
2. Verify AI models configured
3. Suggest next steps:
   - Parse PRD if available
   - Configure AI providers
   - Set up git hooks
   - Create first tasks

## Integration

If PRD file provided:
```
/project:tm/init my-prd.md
→ Automatically runs parse-prd after init
```
```

--------------------------------------------------------------------------------
/assets/claude/commands/tm/init/init-project.md:
--------------------------------------------------------------------------------

```markdown
Initialize a new Task Master project.

Arguments: $ARGUMENTS

Parse arguments to determine initialization preferences.

## Initialization Process

1. **Parse Arguments**
   - PRD file path (if provided)
   - Project name
   - Auto-confirm flag (-y)

2. **Project Setup**
   ```bash
   task-master init
   ```

3. **Smart Initialization**
   - Detect existing project files
   - Suggest project name from directory
   - Check for git repository
   - Verify AI provider configuration

## Configuration Options

Based on arguments:
- `quick` / `-y` → Skip confirmations
- `<file.md>` → Use as PRD after init
- `--name=<name>` → Set project name
- `--description=<desc>` → Set description

## Post-Initialization

After successful init:
1. Show project structure created
2. Verify AI models configured
3. Suggest next steps:
   - Parse PRD if available
   - Configure AI providers
   - Set up git hooks
   - Create first tasks

## Integration

If PRD file provided:
```
/project:tm/init my-prd.md
→ Automatically runs parse-prd after init
```
```

--------------------------------------------------------------------------------
/.github/scripts/release.mjs:
--------------------------------------------------------------------------------

```
#!/usr/bin/env node
import { existsSync, unlinkSync } from 'node:fs';
import { join, dirname } from 'node:path';
import { fileURLToPath } from 'node:url';
import { findRootDir, runCommand } from './utils.mjs';

const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);

const rootDir = findRootDir(__dirname);

console.log('🚀 Starting release process...');

// Double-check we're not in pre-release mode (safety net)
const preJsonPath = join(rootDir, '.changeset', 'pre.json');
if (existsSync(preJsonPath)) {
	console.log('⚠️  Warning: pre.json still exists. Removing it...');
	unlinkSync(preJsonPath);
}

// Check if the extension version has changed and tag it
// This prevents changeset from trying to publish the private package
runCommand('node', [join(__dirname, 'tag-extension.mjs')]);

// Run changeset publish for npm packages
runCommand('npx', ['changeset', 'publish']);

console.log('✅ Release process completed!');

// The extension tag (if created) will trigger the extension-release workflow

```

--------------------------------------------------------------------------------
/.claude/commands/tm/expand/expand-task.md:
--------------------------------------------------------------------------------

```markdown
Break down a complex task into subtasks.

Arguments: $ARGUMENTS (task ID)

## Intelligent Task Expansion

Analyzes a task and creates detailed subtasks for better manageability.

## Execution

```bash
task-master expand --id=$ARGUMENTS
```

## Expansion Process

1. **Task Analysis**
   - Review task complexity
   - Identify components
   - Detect technical challenges
   - Estimate time requirements

2. **Subtask Generation**
   - Create 3-7 subtasks typically
   - Each subtask 1-4 hours
   - Logical implementation order
   - Clear acceptance criteria

3. **Smart Breakdown**
   - Setup/configuration tasks
   - Core implementation
   - Testing components
   - Integration steps
   - Documentation updates

## Enhanced Features

Based on task type:
- **Feature**: Setup → Implement → Test → Integrate
- **Bug Fix**: Reproduce → Diagnose → Fix → Verify
- **Refactor**: Analyze → Plan → Refactor → Validate

## Post-Expansion

After expansion:
1. Show subtask hierarchy
2. Update time estimates
3. Suggest implementation order
4. Highlight critical path
```

--------------------------------------------------------------------------------
/assets/claude/commands/tm/expand/expand-task.md:
--------------------------------------------------------------------------------

```markdown
Break down a complex task into subtasks.

Arguments: $ARGUMENTS (task ID)

## Intelligent Task Expansion

Analyzes a task and creates detailed subtasks for better manageability.

## Execution

```bash
task-master expand --id=$ARGUMENTS
```

## Expansion Process

1. **Task Analysis**
   - Review task complexity
   - Identify components
   - Detect technical challenges
   - Estimate time requirements

2. **Subtask Generation**
   - Create 3-7 subtasks typically
   - Each subtask 1-4 hours
   - Logical implementation order
   - Clear acceptance criteria

3. **Smart Breakdown**
   - Setup/configuration tasks
   - Core implementation
   - Testing components
   - Integration steps
   - Documentation updates

## Enhanced Features

Based on task type:
- **Feature**: Setup → Implement → Test → Integrate
- **Bug Fix**: Reproduce → Diagnose → Fix → Verify
- **Refactor**: Analyze → Plan → Refactor → Validate

## Post-Expansion

After expansion:
1. Show subtask hierarchy
2. Update time estimates
3. Suggest implementation order
4. Highlight critical path
```

--------------------------------------------------------------------------------
/.claude/commands/tm/parse-prd/parse-prd.md:
--------------------------------------------------------------------------------

```markdown
Parse a PRD document to generate tasks.

Arguments: $ARGUMENTS (PRD file path)

## Intelligent PRD Parsing

Analyzes your requirements document and generates a complete task breakdown.

## Execution

```bash
task-master parse-prd --input=$ARGUMENTS
```

## Parsing Process

1. **Document Analysis**
   - Extract key requirements
   - Identify technical components
   - Detect dependencies
   - Estimate complexity

2. **Task Generation**
   - Create 10-15 tasks by default
   - Include implementation tasks
   - Add testing tasks
   - Include documentation tasks
   - Set logical dependencies

3. **Smart Enhancements**
   - Group related functionality
   - Set appropriate priorities
   - Add acceptance criteria
   - Include test strategies

## Options

Parse arguments for modifiers:
- Number after filename → `--num-tasks`
- `research` → Use research mode
- `comprehensive` → Generate more tasks

## Post-Generation

After parsing:
1. Display task summary
2. Show dependency graph
3. Suggest task expansion for complex items
4. Recommend sprint planning
```

--------------------------------------------------------------------------------
/assets/claude/commands/tm/parse-prd/parse-prd.md:
--------------------------------------------------------------------------------

```markdown
Parse a PRD document to generate tasks.

Arguments: $ARGUMENTS (PRD file path)

## Intelligent PRD Parsing

Analyzes your requirements document and generates a complete task breakdown.

## Execution

```bash
task-master parse-prd --input=$ARGUMENTS
```

## Parsing Process

1. **Document Analysis**
   - Extract key requirements
   - Identify technical components
   - Detect dependencies
   - Estimate complexity

2. **Task Generation**
   - Create 10-15 tasks by default
   - Include implementation tasks
   - Add testing tasks
   - Include documentation tasks
   - Set logical dependencies

3. **Smart Enhancements**
   - Group related functionality
   - Set appropriate priorities
   - Add acceptance criteria
   - Include test strategies

## Options

Parse arguments for modifiers:
- Number after filename → `--num-tasks`
- `research` → Use research mode
- `comprehensive` → Generate more tasks

## Post-Generation

After parsing:
1. Display task summary
2. Show dependency graph
3. Suggest task expansion for complex items
4. Recommend sprint planning
```

--------------------------------------------------------------------------------
/.claude/commands/tm/parse-prd/parse-prd-with-research.md:
--------------------------------------------------------------------------------

```markdown
Parse PRD with enhanced research mode for better task generation.

Arguments: $ARGUMENTS (PRD file path)

## Research-Enhanced Parsing

Uses the research AI provider (typically Perplexity) for more comprehensive task generation with current best practices.

## Execution

```bash
task-master parse-prd --input=$ARGUMENTS --research
```

## Research Benefits

1. **Current Best Practices**
   - Latest framework patterns
   - Security considerations
   - Performance optimizations
   - Accessibility requirements

2. **Technical Deep Dive**
   - Implementation approaches
   - Library recommendations
   - Architecture patterns
   - Testing strategies

3. **Comprehensive Coverage**
   - Edge cases consideration
   - Error handling tasks
   - Monitoring setup
   - Deployment tasks

## Enhanced Output

Research mode typically:
- Generates more detailed tasks
- Includes industry standards
- Adds compliance considerations
- Suggests modern tooling

## When to Use

- New technology domains
- Complex requirements
- Regulatory compliance needed
- Best practices crucial
```

--------------------------------------------------------------------------------
/assets/claude/commands/tm/parse-prd/parse-prd-with-research.md:
--------------------------------------------------------------------------------

```markdown
Parse PRD with enhanced research mode for better task generation.

Arguments: $ARGUMENTS (PRD file path)

## Research-Enhanced Parsing

Uses the research AI provider (typically Perplexity) for more comprehensive task generation with current best practices.

## Execution

```bash
task-master parse-prd --input=$ARGUMENTS --research
```

## Research Benefits

1. **Current Best Practices**
   - Latest framework patterns
   - Security considerations
   - Performance optimizations
   - Accessibility requirements

2. **Technical Deep Dive**
   - Implementation approaches
   - Library recommendations
   - Architecture patterns
   - Testing strategies

3. **Comprehensive Coverage**
   - Edge cases consideration
   - Error handling tasks
   - Monitoring setup
   - Deployment tasks

## Enhanced Output

Research mode typically:
- Generates more detailed tasks
- Includes industry standards
- Adds compliance considerations
- Suggests modern tooling

## When to Use

- New technology domains
- Complex requirements
- Regulatory compliance needed
- Best practices crucial
```

--------------------------------------------------------------------------------
/apps/extension/src/webview/hooks/useWebviewHeight.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * Hook for managing webview height
 */

import { useState, useEffect, useCallback } from 'react';

export const useWebviewHeight = () => {
	const [availableHeight, setAvailableHeight] = useState<number>(
		window.innerHeight
	);

	const updateAvailableHeight = useCallback(() => {
		const height = window.innerHeight;
		console.log('📏 Available height updated:', height);
		setAvailableHeight(height);
	}, []);

	useEffect(() => {
		updateAvailableHeight();

		const handleResize = () => {
			updateAvailableHeight();
		};

		window.addEventListener('resize', handleResize);

		// Also listen for VS Code specific events if available
		const handleVisibilityChange = () => {
			// Small delay to ensure VS Code has finished resizing
			setTimeout(updateAvailableHeight, 100);
		};

		document.addEventListener('visibilitychange', handleVisibilityChange);

		return () => {
			window.removeEventListener('resize', handleResize);
			document.removeEventListener('visibilitychange', handleVisibilityChange);
		};
	}, [updateAvailableHeight]);

	return availableHeight;
};

```

--------------------------------------------------------------------------------
/.claude/commands/tm/models/setup-models.md:
--------------------------------------------------------------------------------

```markdown
Run interactive setup to configure AI models.

## Interactive Model Configuration

Guides you through setting up AI providers for Task Master.

## Execution

```bash
task-master models --setup
```

## Setup Process

1. **Environment Check**
   - Detect existing API keys
   - Show current configuration
   - Identify missing providers

2. **Provider Selection**
   - Choose main provider (required)
   - Select research provider (recommended)
   - Configure fallback (optional)

3. **API Key Configuration**
   - Prompt for missing keys
   - Validate key format
   - Test connectivity
   - Save configuration

## Smart Recommendations

Based on your needs:
- **For best results**: Claude + Perplexity
- **Budget conscious**: GPT-3.5 + Perplexity
- **Maximum capability**: GPT-4 + Perplexity + Claude fallback

## Configuration Storage

Keys can be stored in:
1. Environment variables (recommended)
2. `.env` file in project
3. Global `.taskmaster/config`

## Post-Setup

After configuration:
- Test each provider
- Show usage examples
- Suggest next steps
- Verify parse-prd works
```

--------------------------------------------------------------------------------
/.github/workflows/update-models-md.yml:
--------------------------------------------------------------------------------

```yaml
name: Update models.md from supported-models.json

on:
  push:
    branches:
      - main
      - next
    paths:
      - 'scripts/modules/supported-models.json'
      - 'docs/scripts/models-json-to-markdown.js'

jobs:
  update_markdown:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20

      - name: Run transformation script
        run: node docs/scripts/models-json-to-markdown.js

      - name: Format Markdown with Prettier
        run: npx prettier --write docs/models.md

      - name: Stage docs/models.md
        run: git add docs/models.md

      - name: Commit & Push docs/models.md
        uses: actions-js/push@master
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          branch: ${{ github.ref_name }}
          message: 'docs: Auto-update and format models.md'
          author_name: 'github-actions[bot]'
          author_email: 'github-actions[bot]@users.noreply.github.com'

```

--------------------------------------------------------------------------------
/assets/claude/commands/tm/models/setup-models.md:
--------------------------------------------------------------------------------

```markdown
Run interactive setup to configure AI models.

## Interactive Model Configuration

Guides you through setting up AI providers for Task Master.

## Execution

```bash
task-master models --setup
```

## Setup Process

1. **Environment Check**
   - Detect existing API keys
   - Show current configuration
   - Identify missing providers

2. **Provider Selection**
   - Choose main provider (required)
   - Select research provider (recommended)
   - Configure fallback (optional)

3. **API Key Configuration**
   - Prompt for missing keys
   - Validate key format
   - Test connectivity
   - Save configuration

## Smart Recommendations

Based on your needs:
- **For best results**: Claude + Perplexity
- **Budget conscious**: GPT-3.5 + Perplexity
- **Maximum capability**: GPT-4 + Perplexity + Claude fallback

## Configuration Storage

Keys can be stored in:
1. Environment variables (recommended)
2. `.env` file in project
3. Global `.taskmaster/config`

## Post-Setup

After configuration:
- Test each provider
- Show usage examples
- Suggest next steps
- Verify parse-prd works
```

--------------------------------------------------------------------------------
/src/prompts/schemas/variant.schema.json:
--------------------------------------------------------------------------------

```json
{
	"$schema": "http://json-schema.org/draft-07/schema#",
	"$id": "https://github.com/eyaltoledano/claude-task-master/blob/main/src/prompts/schemas/variant.schema.json",
	"version": "1.0.0",
	"title": "Task Master Prompt Variant",
	"description": "Schema for prompt template variants",
	"type": "object",
	"required": ["system", "user"],
	"properties": {
		"system": {
			"type": "string",
			"minLength": 1,
			"description": "System prompt template with variable placeholders"
		},
		"user": {
			"type": "string",
			"minLength": 1,
			"description": "User prompt template with variable placeholders"
		},
		"condition": {
			"type": "string",
			"description": "JavaScript expression for variant selection (optional, only for non-default variants)"
		},
		"metadata": {
			"type": "object",
			"properties": {
				"description": {
					"type": "string",
					"description": "Description of when this variant should be used"
				},
				"tags": {
					"type": "array",
					"items": { "type": "string" },
					"description": "Tags for categorizing this variant"
				}
			}
		}
	}
}

```

--------------------------------------------------------------------------------
/apps/extension/src/webview/contexts/VSCodeContext.tsx:
--------------------------------------------------------------------------------

```typescript
/**
 * VS Code API Context
 * Provides access to VS Code API and webview state
 */

import React, { createContext, useContext } from 'react';
import type { AppState, AppAction, ToastNotification } from '../types';

export interface VSCodeContextValue {
	vscode?: ReturnType<NonNullable<typeof window.acquireVsCodeApi>>;
	state: AppState;
	dispatch: React.Dispatch<AppAction>;
	sendMessage: (message: any) => Promise<any>;
	availableHeight: number;
	// Toast notification functions
	showSuccessToast: (title: string, message: string, duration?: number) => void;
	showInfoToast: (title: string, message: string, duration?: number) => void;
	showWarningToast: (title: string, message: string, duration?: number) => void;
	showErrorToast: (title: string, message: string, duration?: number) => void;
}

export const VSCodeContext = createContext<VSCodeContextValue | undefined>(
	undefined
);

export const useVSCodeContext = () => {
	const context = useContext(VSCodeContext);
	if (!context) {
		throw new Error('useVSCodeContext must be used within VSCodeProvider');
	}
	return context;
};

```

--------------------------------------------------------------------------------
/packages/tm-core/src/logger/factory.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * @fileoverview Logger factory and singleton management
 */

import { Logger, type LoggerConfig } from './logger.js';

// Global logger instance
let globalLogger: Logger | null = null;

// Named logger instances
const loggers = new Map<string, Logger>();

/**
 * Create a new logger instance
 */
export function createLogger(config?: LoggerConfig): Logger {
	return new Logger(config);
}

/**
 * Get or create a named logger instance
 */
export function getLogger(name?: string, config?: LoggerConfig): Logger {
	// If no name provided, return global logger
	if (!name) {
		if (!globalLogger) {
			globalLogger = createLogger(config);
		}
		return globalLogger;
	}

	// Check if named logger exists
	if (!loggers.has(name)) {
		loggers.set(
			name,
			createLogger({
				prefix: name,
				...config
			})
		);
	}

	return loggers.get(name)!;
}

/**
 * Set the global logger instance
 */
export function setGlobalLogger(logger: Logger): void {
	globalLogger = logger;
}

/**
 * Clear all logger instances (useful for testing)
 */
export function clearLoggers(): void {
	globalLogger = null;
	loggers.clear();
}

```

--------------------------------------------------------------------------------
/packages/tm-core/src/repositories/task-repository.interface.ts:
--------------------------------------------------------------------------------

```typescript
import { Task, TaskTag } from '../types/index.js';

export interface TaskRepository {
	// Task operations
	getTasks(projectId: string): Promise<Task[]>;
	getTask(projectId: string, taskId: string): Promise<Task | null>;
	createTask(projectId: string, task: Omit<Task, 'id'>): Promise<Task>;
	updateTask(
		projectId: string,
		taskId: string,
		updates: Partial<Task>
	): Promise<Task>;
	deleteTask(projectId: string, taskId: string): Promise<void>;

	// Tag operations
	getTags(projectId: string): Promise<TaskTag[]>;
	getTag(projectId: string, tagName: string): Promise<TaskTag | null>;
	createTag(projectId: string, tag: TaskTag): Promise<TaskTag>;
	updateTag(
		projectId: string,
		tagName: string,
		updates: Partial<TaskTag>
	): Promise<TaskTag>;
	deleteTag(projectId: string, tagName: string): Promise<void>;

	// Bulk operations
	bulkCreateTasks(
		projectId: string,
		tasks: Omit<Task, 'id'>[]
	): Promise<Task[]>;
	bulkUpdateTasks(
		projectId: string,
		updates: Array<{ id: string; updates: Partial<Task> }>
	): Promise<Task[]>;
	bulkDeleteTasks(projectId: string, taskIds: string[]): Promise<void>;
}

```

--------------------------------------------------------------------------------
/.claude/commands/tm/set-status/to-cancelled.md:
--------------------------------------------------------------------------------

```markdown
Cancel a task permanently.

Arguments: $ARGUMENTS (task ID)

## Cancelling a Task

This status indicates a task is no longer needed and won't be completed.

## Valid Reasons for Cancellation

- Requirements changed
- Feature deprecated
- Duplicate of another task
- Strategic pivot
- Technical approach invalidated

## Pre-Cancellation Checks

1. Confirm no critical dependencies
2. Check for partial implementation
3. Verify cancellation rationale
4. Document lessons learned

## Execution

```bash
task-master set-status --id=$ARGUMENTS --status=cancelled
```

## Cancellation Impact

When cancelling:
1. **Dependency Updates**
   - Notify dependent tasks
   - Update project scope
   - Recalculate timelines

2. **Clean-up Actions**
   - Remove related branches
   - Archive any work done
   - Update documentation
   - Close related issues

3. **Learning Capture**
   - Document why cancelled
   - Note what was learned
   - Update estimation models
   - Prevent future duplicates

## Historical Preservation

- Keep for reference
- Tag with cancellation reason
- Link to replacement if any
- Maintain audit trail
```

--------------------------------------------------------------------------------
/assets/claude/commands/tm/set-status/to-cancelled.md:
--------------------------------------------------------------------------------

```markdown
Cancel a task permanently.

Arguments: $ARGUMENTS (task ID)

## Cancelling a Task

This status indicates a task is no longer needed and won't be completed.

## Valid Reasons for Cancellation

- Requirements changed
- Feature deprecated
- Duplicate of another task
- Strategic pivot
- Technical approach invalidated

## Pre-Cancellation Checks

1. Confirm no critical dependencies
2. Check for partial implementation
3. Verify cancellation rationale
4. Document lessons learned

## Execution

```bash
task-master set-status --id=$ARGUMENTS --status=cancelled
```

## Cancellation Impact

When cancelling:
1. **Dependency Updates**
   - Notify dependent tasks
   - Update project scope
   - Recalculate timelines

2. **Clean-up Actions**
   - Remove related branches
   - Archive any work done
   - Update documentation
   - Close related issues

3. **Learning Capture**
   - Document why cancelled
   - Note what was learned
   - Update estimation models
   - Prevent future duplicates

## Historical Preservation

- Keep for reference
- Tag with cancellation reason
- Link to replacement if any
- Maintain audit trail
```

--------------------------------------------------------------------------------
/biome.json:
--------------------------------------------------------------------------------

```json
{
	"files": {
		"ignore": [
			"build",
			"coverage",
			".changeset",
			"tasks",
			"package-lock.json",
			"tests/fixture/*.json",
			"dist"
		]
	},
	"formatter": {
		"bracketSpacing": true,
		"enabled": true,
		"indentStyle": "tab",
		"lineWidth": 80
	},
	"javascript": {
		"formatter": {
			"arrowParentheses": "always",
			"quoteStyle": "single",
			"trailingCommas": "none"
		}
	},
	"linter": {
		"enabled": true,
		"include": ["apps/extension/**/*.ts", "apps/extension/**/*.tsx"],
		"ignore": ["**/*", "!apps/extension/**/*"],
		"rules": {
			"recommended": true,
			"complexity": {
				"noForEach": "off",
				"useOptionalChain": "off",
				"useArrowFunction": "off"
			},
			"correctness": {
				"noConstantCondition": "off",
				"noUnreachable": "off"
			},
			"suspicious": {
				"noDuplicateTestHooks": "off",
				"noPrototypeBuiltins": "off"
			},
			"style": {
				"noUselessElse": "off",
				"useNodejsImportProtocol": "off",
				"useNumberNamespace": "off",
				"noParameterAssign": "off",
				"useTemplate": "off",
				"noUnusedTemplateLiteral": "off",
				"noNonNullAssertion": "warn"
			}
		}
	}
}

```

--------------------------------------------------------------------------------
/.github/workflows/claude.yml:
--------------------------------------------------------------------------------

```yaml
name: Claude Code

on:
  issue_comment:
    types: [created]
  pull_request_review_comment:
    types: [created]
  issues:
    types: [opened, assigned]
  pull_request_review:
    types: [submitted]

jobs:
  claude:
    if: |
      (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
      (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
      (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
      (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
    runs-on: ubuntu-latest
    permissions:
      contents: read
      pull-requests: read
      issues: read
      id-token: write
    steps:
      - name: Checkout repository
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
        with:
          fetch-depth: 1

      - name: Run Claude Code
        id: claude
        uses: anthropics/claude-code-action@beta
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

```

--------------------------------------------------------------------------------
/src/constants/task-priority.js:
--------------------------------------------------------------------------------

```javascript
/**
 * @typedef {'high' | 'medium' | 'low'} TaskPriority
 */

/**
 * Task priority options
 * @type {TaskPriority[]}
 * @description Defines possible task priorities:
 * - high: Critical tasks that need immediate attention
 * - medium: Standard priority tasks (default)
 * - low: Tasks that can be deferred or are nice-to-have
 */
export const TASK_PRIORITY_OPTIONS = ['high', 'medium', 'low'];

/**
 * Default task priority
 * @type {TaskPriority}
 */
export const DEFAULT_TASK_PRIORITY = 'medium';

/**
 * Check if a given priority is valid
 * @param {string} priority - The priority to check
 * @returns {boolean} True if the priority is valid, false otherwise
 */
export function isValidTaskPriority(priority) {
	return TASK_PRIORITY_OPTIONS.includes(priority?.toLowerCase());
}

/**
 * Normalize a priority value to lowercase
 * @param {string} priority - The priority to normalize
 * @returns {TaskPriority|null} The normalized priority or null if invalid
 */
export function normalizeTaskPriority(priority) {
	if (!priority) return null;
	const normalized = priority.toLowerCase();
	return isValidTaskPriority(normalized) ? normalized : null;
}

```

--------------------------------------------------------------------------------
/src/ai-providers/xai.js:
--------------------------------------------------------------------------------

```javascript
/**
 * xai.js
 * AI provider implementation for xAI models using Vercel AI SDK.
 */

import { createXai } from '@ai-sdk/xai';
import { BaseAIProvider } from './base-provider.js';

export class XAIProvider extends BaseAIProvider {
	constructor() {
		super();
		this.name = 'xAI';
	}

	/**
	 * Returns the environment variable name required for this provider's API key.
	 * @returns {string} The environment variable name for the xAI API key
	 */
	getRequiredApiKeyName() {
		return 'XAI_API_KEY';
	}

	/**
	 * Creates and returns an xAI client instance.
	 * @param {object} params - Parameters for client initialization
	 * @param {string} params.apiKey - xAI API key
	 * @param {string} [params.baseURL] - Optional custom API endpoint
	 * @returns {Function} xAI client function
	 * @throws {Error} If API key is missing or initialization fails
	 */
	getClient(params) {
		try {
			const { apiKey, baseURL } = params;

			if (!apiKey) {
				throw new Error('xAI API key is required.');
			}

			return createXai({
				apiKey,
				baseURL: baseURL || 'https://api.x.ai/v1'
			});
		} catch (error) {
			this.handleError('client initialization', error);
		}
	}
}

```

--------------------------------------------------------------------------------
/scripts/modules/task-manager/task-exists.js:
--------------------------------------------------------------------------------

```javascript
/**
 * Checks if a task with the given ID exists
 * @param {Array} tasks - Array of tasks to search
 * @param {string|number} taskId - ID of task or subtask to check
 * @returns {boolean} Whether the task exists
 */
function taskExists(tasks, taskId) {
	// Handle subtask IDs (e.g., "1.2")
	if (typeof taskId === 'string' && taskId.includes('.')) {
		const parts = taskId.split('.');
		// Validate that it's a proper subtask format (parentId.subtaskId)
		if (parts.length !== 2 || !parts[0] || !parts[1]) {
			// Invalid format - treat as regular task ID
			const id = parseInt(taskId, 10);
			return tasks.some((t) => t.id === id);
		}

		const [parentIdStr, subtaskIdStr] = parts;
		const parentId = parseInt(parentIdStr, 10);
		const subtaskId = parseInt(subtaskIdStr, 10);

		// Find the parent task
		const parentTask = tasks.find((t) => t.id === parentId);

		// If parent exists, check if subtask exists
		return (
			parentTask &&
			parentTask.subtasks &&
			parentTask.subtasks.some((st) => st.id === subtaskId)
		);
	}

	// Handle regular task IDs
	const id = parseInt(taskId, 10);
	return tasks.some((t) => t.id === id);
}

export default taskExists;

```

--------------------------------------------------------------------------------
/scripts/modules/task-manager/is-task-dependent.js:
--------------------------------------------------------------------------------

```javascript
/**
 * Check if a task is dependent on another task (directly or indirectly)
 * Used to prevent circular dependencies
 * @param {Array} allTasks - Array of all tasks
 * @param {Object} task - The task to check
 * @param {number} targetTaskId - The task ID to check dependency against
 * @returns {boolean} Whether the task depends on the target task
 */
function isTaskDependentOn(allTasks, task, targetTaskId) {
	// If the task is a subtask, check if its parent is the target
	if (task.parentTaskId === targetTaskId) {
		return true;
	}

	// Check direct dependencies
	if (task.dependencies && task.dependencies.includes(targetTaskId)) {
		return true;
	}

	// Check dependencies of dependencies (recursive)
	if (task.dependencies) {
		for (const depId of task.dependencies) {
			const depTask = allTasks.find((t) => t.id === depId);
			if (depTask && isTaskDependentOn(allTasks, depTask, targetTaskId)) {
				return true;
			}
		}
	}

	// Check subtasks for dependencies
	if (task.subtasks) {
		for (const subtask of task.subtasks) {
			if (isTaskDependentOn(allTasks, subtask, targetTaskId)) {
				return true;
			}
		}
	}

	return false;
}

export default isTaskDependentOn;

```

--------------------------------------------------------------------------------
/packages/tm-core/src/parser/index.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * @fileoverview Task parsing functionality for the tm-core package
 * This file exports all parsing-related classes and functions
 */

import type { PlaceholderTask } from '../types/index.js';

// Parser implementations will be defined here
// export * from './prd-parser.js';
// export * from './task-parser.js';
// export * from './markdown-parser.js';

// Placeholder exports - these will be implemented in later tasks
export interface TaskParser {
	parse(content: string): Promise<PlaceholderTask[]>;
	validate(content: string): Promise<boolean>;
}

/**
 * @deprecated This is a placeholder class that will be properly implemented in later tasks
 */
export class PlaceholderParser implements TaskParser {
	async parse(content: string): Promise<PlaceholderTask[]> {
		// Simple placeholder parsing logic
		const lines = content
			.split('\n')
			.filter((line) => line.trim().startsWith('-'));
		return lines.map((line, index) => ({
			id: `task-${index + 1}`,
			title: line.trim().replace(/^-\s*/, ''),
			status: 'pending' as const,
			priority: 'medium' as const
		}));
	}

	async validate(content: string): Promise<boolean> {
		return content.trim().length > 0;
	}
}

```

--------------------------------------------------------------------------------
/test-version-check.js:
--------------------------------------------------------------------------------

```javascript
import {
	displayUpgradeNotification,
	compareVersions
} from './scripts/modules/commands.js';

// Simulate different version scenarios
console.log('=== Simulating version check ===\n');

// 1. Current version is older than latest (should show update notice)
console.log('Scenario 1: Current version older than latest');
displayUpgradeNotification('0.9.30', '1.0.0');

// 2. Current version same as latest (no update needed)
console.log(
	'\nScenario 2: Current version same as latest (this would not normally show a notice)'
);
console.log('Current: 1.0.0, Latest: 1.0.0');
console.log('compareVersions result:', compareVersions('1.0.0', '1.0.0'));
console.log(
	'Update needed:',
	compareVersions('1.0.0', '1.0.0') < 0 ? 'Yes' : 'No'
);

// 3. Current version newer than latest (e.g., development version, would not show notice)
console.log(
	'\nScenario 3: Current version newer than latest (this would not normally show a notice)'
);
console.log('Current: 1.1.0, Latest: 1.0.0');
console.log('compareVersions result:', compareVersions('1.1.0', '1.0.0'));
console.log(
	'Update needed:',
	compareVersions('1.1.0', '1.0.0') < 0 ? 'Yes' : 'No'
);

console.log('\n=== Test complete ===');

```

--------------------------------------------------------------------------------
/src/ai-providers/groq.js:
--------------------------------------------------------------------------------

```javascript
/**
 * src/ai-providers/groq.js
 *
 * Implementation for interacting with Groq models
 * using the Vercel AI SDK.
 */

import { createGroq } from '@ai-sdk/groq';
import { BaseAIProvider } from './base-provider.js';

export class GroqProvider extends BaseAIProvider {
	constructor() {
		super();
		this.name = 'Groq';
	}

	/**
	 * Returns the environment variable name required for this provider's API key.
	 * @returns {string} The environment variable name for the Groq API key
	 */
	getRequiredApiKeyName() {
		return 'GROQ_API_KEY';
	}

	/**
	 * Creates and returns a Groq client instance.
	 * @param {object} params - Parameters for client initialization
	 * @param {string} params.apiKey - Groq API key
	 * @param {string} [params.baseURL] - Optional custom API endpoint
	 * @returns {Function} Groq client function
	 * @throws {Error} If API key is missing or initialization fails
	 */
	getClient(params) {
		try {
			const { apiKey, baseURL } = params;

			if (!apiKey) {
				throw new Error('Groq API key is required.');
			}

			return createGroq({
				apiKey,
				...(baseURL && { baseURL })
			});
		} catch (error) {
			this.handleError('client initialization', error);
		}
	}
}

```

--------------------------------------------------------------------------------
/src/ai-providers/google.js:
--------------------------------------------------------------------------------

```javascript
/**
 * google.js
 * AI provider implementation for Google AI models using Vercel AI SDK.
 */

import { createGoogleGenerativeAI } from '@ai-sdk/google';
import { BaseAIProvider } from './base-provider.js';

export class GoogleAIProvider extends BaseAIProvider {
	constructor() {
		super();
		this.name = 'Google';
	}

	/**
	 * Returns the environment variable name required for this provider's API key.
	 * @returns {string} The environment variable name for the Google API key
	 */
	getRequiredApiKeyName() {
		return 'GOOGLE_API_KEY';
	}

	/**
	 * Creates and returns a Google AI client instance.
	 * @param {object} params - Parameters for client initialization
	 * @param {string} params.apiKey - Google API key
	 * @param {string} [params.baseURL] - Optional custom API endpoint
	 * @returns {Function} Google AI client function
	 * @throws {Error} If API key is missing or initialization fails
	 */
	getClient(params) {
		try {
			const { apiKey, baseURL } = params;

			if (!apiKey) {
				throw new Error('Google API key is required.');
			}

			return createGoogleGenerativeAI({
				apiKey,
				...(baseURL && { baseURL })
			});
		} catch (error) {
			this.handleError('client initialization', error);
		}
	}
}

```

--------------------------------------------------------------------------------
/src/ai-providers/bedrock.js:
--------------------------------------------------------------------------------

```javascript
import { createAmazonBedrock } from '@ai-sdk/amazon-bedrock';
import { fromNodeProviderChain } from '@aws-sdk/credential-providers';
import { BaseAIProvider } from './base-provider.js';

export class BedrockAIProvider extends BaseAIProvider {
	constructor() {
		super();
		this.name = 'Bedrock';
	}

	isRequiredApiKey() {
		return false;
	}

	/**
	 * Returns the required API key environment variable name for Bedrock.
	 * Bedrock uses AWS credentials, so we return the AWS access key identifier.
	 * @returns {string} The environment variable name
	 */
	getRequiredApiKeyName() {
		return 'AWS_ACCESS_KEY_ID';
	}

	/**
	 * Override auth validation - Bedrock uses AWS credentials instead of API keys
	 * @param {object} params - Parameters to validate
	 */
	validateAuth(params) {}

	/**
	 * Creates and returns a Bedrock client instance.
	 * See https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html
	 * for AWS SDK environment variables and configuration options.
	 */
	getClient(params) {
		try {
			const credentialProvider = fromNodeProviderChain();

			return createAmazonBedrock({
				credentialProvider
			});
		} catch (error) {
			this.handleError('client initialization', error);
		}
	}
}

```

--------------------------------------------------------------------------------
/.claude/commands/tm/add-dependency/add-dependency.md:
--------------------------------------------------------------------------------

```markdown
Add a dependency between tasks.

Arguments: $ARGUMENTS

Parse the task IDs to establish dependency relationship.

## Adding Dependencies

Creates a dependency where one task must be completed before another can start.

## Argument Parsing

Parse natural language or IDs:
- "make 5 depend on 3" → task 5 depends on task 3
- "5 needs 3" → task 5 depends on task 3
- "5 3" → task 5 depends on task 3
- "5 after 3" → task 5 depends on task 3

## Execution

```bash
task-master add-dependency --id=<task-id> --depends-on=<dependency-id>
```

## Validation

Before adding:
1. **Verify both tasks exist**
2. **Check for circular dependencies**
3. **Ensure dependency makes logical sense**
4. **Warn if creating complex chains**

## Smart Features

- Detect if dependency already exists
- Suggest related dependencies
- Show impact on task flow
- Update task priorities if needed

## Post-Addition

After adding dependency:
1. Show updated dependency graph
2. Identify any newly blocked tasks
3. Suggest task order changes
4. Update project timeline

## Example Flows

```
/project:tm/add-dependency 5 needs 3
→ Task #5 now depends on Task #3
→ Task #5 is now blocked until #3 completes
→ Suggested: Also consider if #5 needs #4
```
```

--------------------------------------------------------------------------------
/assets/claude/commands/tm/add-dependency/add-dependency.md:
--------------------------------------------------------------------------------

```markdown
Add a dependency between tasks.

Arguments: $ARGUMENTS

Parse the task IDs to establish dependency relationship.

## Adding Dependencies

Creates a dependency where one task must be completed before another can start.

## Argument Parsing

Parse natural language or IDs:
- "make 5 depend on 3" → task 5 depends on task 3
- "5 needs 3" → task 5 depends on task 3
- "5 3" → task 5 depends on task 3
- "5 after 3" → task 5 depends on task 3

## Execution

```bash
task-master add-dependency --id=<task-id> --depends-on=<dependency-id>
```

## Validation

Before adding:
1. **Verify both tasks exist**
2. **Check for circular dependencies**
3. **Ensure dependency makes logical sense**
4. **Warn if creating complex chains**

## Smart Features

- Detect if dependency already exists
- Suggest related dependencies
- Show impact on task flow
- Update task priorities if needed

## Post-Addition

After adding dependency:
1. Show updated dependency graph
2. Identify any newly blocked tasks
3. Suggest task order changes
4. Update project timeline

## Example Flows

```
/project:tm/add-dependency 5 needs 3
→ Task #5 now depends on Task #3
→ Task #5 is now blocked until #3 completes
→ Suggested: Also consider if #5 needs #4
```
```

--------------------------------------------------------------------------------
/apps/cli/package.json:
--------------------------------------------------------------------------------

```json
{
	"name": "@tm/cli",
	"description": "Task Master CLI - Command line interface for task management",
	"type": "module",
	"private": true,
	"main": "./dist/index.js",
	"types": "./src/index.ts",
	"exports": {
		".": "./src/index.ts"
	},
	"files": ["dist", "README.md"],
	"scripts": {
		"typecheck": "tsc --noEmit",
		"lint": "biome check src",
		"format": "biome format --write src",
		"test": "vitest run",
		"test:watch": "vitest",
		"test:coverage": "vitest run --coverage",
		"test:unit": "vitest run -t unit",
		"test:integration": "vitest run -t integration",
		"test:e2e": "vitest run --dir tests/e2e",
		"test:ci": "vitest run --coverage --reporter=dot"
	},
	"dependencies": {
		"@tm/core": "*",
		"boxen": "^8.0.1",
		"chalk": "5.6.2",
		"cli-table3": "^0.6.5",
		"commander": "^12.1.0",
		"inquirer": "^12.5.0",
		"ora": "^8.2.0"
	},
	"devDependencies": {
		"@biomejs/biome": "^1.9.4",
		"@types/inquirer": "^9.0.3",
		"@types/node": "^22.10.5",
		"tsx": "^4.20.4",
		"typescript": "^5.7.3",
		"vitest": "^2.1.8"
	},
	"engines": {
		"node": ">=18.0.0"
	},
	"keywords": ["task-master", "cli", "task-management", "productivity"],
	"author": "",
	"license": "MIT",
	"typesVersions": {
		"*": {
			"*": ["src/*"]
		}
	}
}

```

--------------------------------------------------------------------------------
/packages/build-config/src/tsdown.base.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * Base tsdown configuration for Task Master monorepo
 * Provides shared configuration that can be extended by individual packages
 */
import type { UserConfig } from 'tsdown';

const isProduction = process.env.NODE_ENV === 'production';
const isDevelopment = !isProduction;

/**
 * Environment helpers
 */
export const env = {
	isProduction,
	isDevelopment,
	NODE_ENV: process.env.NODE_ENV || 'development'
};

/**
 * Base tsdown configuration for all packages
 * Since everything gets bundled into root dist/ anyway, use consistent settings
 */
export const baseConfig: Partial<UserConfig> = {
	sourcemap: isDevelopment,
	format: 'esm',
	platform: 'node',
	dts: isDevelopment,
	minify: isProduction,
	treeshake: isProduction,
	// Better debugging in development
	...(isDevelopment && {
		keepNames: true,
		splitting: false // Disable code splitting for better stack traces
	}),
	// Keep all npm dependencies external (available via node_modules)
	external: [/^[^@./]/, /^@(?!tm\/)/]
};

/**
 * Utility function to merge configurations
 * Simplified for tsdown usage
 */
export function mergeConfig(
	base: Partial<UserConfig>,
	overrides: Partial<UserConfig>
): Partial<UserConfig> {
	return {
		...base,
		...overrides
	};
}

```

--------------------------------------------------------------------------------
/tsdown.config.ts:
--------------------------------------------------------------------------------

```typescript
import { defineConfig } from 'tsdown';
import { baseConfig, mergeConfig } from '@tm/build-config';
import { load as dotenvLoad } from 'dotenv-mono';

dotenvLoad();

// Get all TM_PUBLIC_* env variables for build-time injection
const getBuildTimeEnvs = () => {
	const envs: Record<string, string> = {};

	// Inject package.json version at build time
	try {
		const packageJson = JSON.parse(
			require('fs').readFileSync('package.json', 'utf8')
		);
		envs['TM_PUBLIC_VERSION'] = packageJson.version || 'unknown';
	} catch (error) {
		console.warn('Could not read package.json version during build:', error);
		envs['TM_PUBLIC_VERSION'] = 'unknown';
	}

	for (const [key, value] of Object.entries(process.env)) {
		if (key.startsWith('TM_PUBLIC_')) {
			// Return the actual value, not JSON.stringify'd
			envs[key] = value || '';
		}
	}
	return envs;
};

export default defineConfig(
	mergeConfig(baseConfig, {
		entry: {
			'task-master': 'scripts/dev.js',
			'mcp-server': 'mcp-server/server.js'
		},
		outDir: 'dist',
		copy: ['assets'],
		ignoreWatch: ['node_modules', 'dist', 'tests', 'apps/extension'],
		// Bundle only our workspace packages, keep npm dependencies external
		noExternal: [/^@tm\//],
		env: getBuildTimeEnvs()
	})
);

```

--------------------------------------------------------------------------------
/src/ai-providers/openrouter.js:
--------------------------------------------------------------------------------

```javascript
/**
 * openrouter.js
 * AI provider implementation for OpenRouter models using Vercel AI SDK.
 */

import { createOpenRouter } from '@openrouter/ai-sdk-provider';
import { BaseAIProvider } from './base-provider.js';

export class OpenRouterAIProvider extends BaseAIProvider {
	constructor() {
		super();
		this.name = 'OpenRouter';
	}

	/**
	 * Returns the environment variable name required for this provider's API key.
	 * @returns {string} The environment variable name for the OpenRouter API key
	 */
	getRequiredApiKeyName() {
		return 'OPENROUTER_API_KEY';
	}

	/**
	 * Creates and returns an OpenRouter client instance.
	 * @param {object} params - Parameters for client initialization
	 * @param {string} params.apiKey - OpenRouter API key
	 * @param {string} [params.baseURL] - Optional custom API endpoint
	 * @returns {Function} OpenRouter client function
	 * @throws {Error} If API key is missing or initialization fails
	 */
	getClient(params) {
		try {
			const { apiKey, baseURL } = params;

			if (!apiKey) {
				throw new Error('OpenRouter API key is required.');
			}

			return createOpenRouter({
				apiKey,
				...(baseURL && { baseURL })
			});
		} catch (error) {
			this.handleError('client initialization', error);
		}
	}
}

```

--------------------------------------------------------------------------------
/src/utils/logger-utils.js:
--------------------------------------------------------------------------------

```javascript
/**
 * Logger utility functions for Task Master
 * Provides standardized logging patterns for both CLI and utility contexts
 */

import { log as utilLog } from '../../scripts/modules/utils.js';

/**
 * Creates a standard logger object that wraps the utility log function
 * This provides a consistent logger interface across different parts of the application
 * @returns {Object} A logger object with standard logging methods (info, warn, error, debug, success)
 */
export function createStandardLogger() {
	return {
		info: (msg, ...args) => utilLog('info', msg, ...args),
		warn: (msg, ...args) => utilLog('warn', msg, ...args),
		error: (msg, ...args) => utilLog('error', msg, ...args),
		debug: (msg, ...args) => utilLog('debug', msg, ...args),
		success: (msg, ...args) => utilLog('success', msg, ...args)
	};
}

/**
 * Creates a logger using either the provided logger or a default standard logger
 * This is the recommended pattern for functions that accept an optional logger parameter
 * @param {Object|null} providedLogger - Optional logger object passed from caller
 * @returns {Object} A logger object with standard logging methods
 */
export function getLoggerOrDefault(providedLogger = null) {
	return providedLogger || createStandardLogger();
}

```

--------------------------------------------------------------------------------
/mcp-server/src/tools/response-language.js:
--------------------------------------------------------------------------------

```javascript
import { z } from 'zod';
import {
	createErrorResponse,
	handleApiResult,
	withNormalizedProjectRoot
} from './utils.js';
import { responseLanguageDirect } from '../core/direct-functions/response-language.js';

export function registerResponseLanguageTool(server) {
	server.addTool({
		name: 'response-language',
		description: 'Get or set the response language for the project',
		parameters: z.object({
			projectRoot: z
				.string()
				.describe(
					'The root directory for the project. ALWAYS SET THIS TO THE PROJECT ROOT DIRECTORY. IF NOT SET, THE TOOL WILL NOT WORK.'
				),
			language: z
				.string()
				.describe(
					'The new response language to set. like "中文" "English" or "español".'
				)
		}),
		execute: withNormalizedProjectRoot(async (args, { log, session }) => {
			try {
				log.info(
					`Executing response-language tool with args: ${JSON.stringify(args)}`
				);

				const result = await responseLanguageDirect(
					{
						...args,
						projectRoot: args.projectRoot
					},
					log,
					{ session }
				);
				return handleApiResult(result, log, 'Error setting response language');
			} catch (error) {
				log.error(`Error in response-language tool: ${error.message}`);
				return createErrorResponse(error.message);
			}
		})
	});
}

```

--------------------------------------------------------------------------------
/.github/workflows/backfill-duplicate-comments.yml:
--------------------------------------------------------------------------------

```yaml
name: Backfill Duplicate Comments
# description: Triggers duplicate detection for old issues that don't have duplicate comments

on:
  workflow_dispatch:
    inputs:
      days_back:
        description: "How many days back to look for old issues"
        required: false
        default: "90"
        type: string
      dry_run:
        description: "Dry run mode (true to only log what would be done)"
        required: false
        default: "true"
        type: choice
        options:
          - "true"
          - "false"

jobs:
  backfill-duplicate-comments:
    runs-on: ubuntu-latest
    timeout-minutes: 30
    permissions:
      contents: read
      issues: read
      actions: write

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20

      - name: Backfill duplicate comments
        run: node .github/scripts/backfill-duplicate-comments.mjs
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          GITHUB_REPOSITORY_OWNER: ${{ github.repository_owner }}
          GITHUB_REPOSITORY_NAME: ${{ github.event.repository.name }}
          DAYS_BACK: ${{ inputs.days_back }}
          DRY_RUN: ${{ inputs.dry_run }}

```

--------------------------------------------------------------------------------
/apps/extension/src/webview/utils/toast.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * Toast notification utilities
 */

import type { ToastNotification, AppAction } from '../types';

let toastIdCounter = 0;

export const createToast = (
	type: ToastNotification['type'],
	title: string,
	message: string,
	duration?: number
): ToastNotification => ({
	id: `toast-${++toastIdCounter}`,
	type,
	title,
	message,
	duration
});

export const showSuccessToast =
	(dispatch: React.Dispatch<AppAction>) =>
	(title: string, message: string, duration?: number) => {
		dispatch({
			type: 'ADD_TOAST',
			payload: createToast('success', title, message, duration)
		});
	};

export const showInfoToast =
	(dispatch: React.Dispatch<AppAction>) =>
	(title: string, message: string, duration?: number) => {
		dispatch({
			type: 'ADD_TOAST',
			payload: createToast('info', title, message, duration)
		});
	};

export const showWarningToast =
	(dispatch: React.Dispatch<AppAction>) =>
	(title: string, message: string, duration?: number) => {
		dispatch({
			type: 'ADD_TOAST',
			payload: createToast('warning', title, message, duration)
		});
	};

export const showErrorToast =
	(dispatch: React.Dispatch<AppAction>) =>
	(title: string, message: string, duration?: number) => {
		dispatch({
			type: 'ADD_TOAST',
			payload: createToast('error', title, message, duration)
		});
	};

```
Page 2/38FirstPrevNextLast