#
tokens: 49487/50000 39/821 files (page 6/52)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 6 of 52. Use http://codebase.md/eyaltoledano/claude-task-master?lines=true&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

--------------------------------------------------------------------------------
/.claude/commands/tm/update/update-tasks-from-id.md:
--------------------------------------------------------------------------------

```markdown
  1 | Update multiple tasks starting from a specific ID.
  2 | 
  3 | Arguments: $ARGUMENTS
  4 | 
  5 | Parse starting task ID and update context.
  6 | 
  7 | ## Bulk Task Updates
  8 | 
  9 | Update multiple related tasks based on new requirements or context changes.
 10 | 
 11 | ## Argument Parsing
 12 | 
 13 | - "from 5: add security requirements"
 14 | - "5 onwards: update API endpoints"
 15 | - "starting at 5: change to use new framework"
 16 | 
 17 | ## Execution
 18 | 
 19 | ```bash
 20 | task-master update --from=<id> --prompt="<context>"
 21 | ```
 22 | 
 23 | ## Update Process
 24 | 
 25 | ### 1. **Task Selection**
 26 | Starting from specified ID:
 27 | - Include the task itself
 28 | - Include all dependent tasks
 29 | - Include related subtasks
 30 | - Smart boundary detection
 31 | 
 32 | ### 2. **Context Application**
 33 | AI analyzes the update context and:
 34 | - Identifies what needs changing
 35 | - Maintains consistency
 36 | - Preserves completed work
 37 | - Updates related information
 38 | 
 39 | ### 3. **Intelligent Updates**
 40 | - Modify descriptions appropriately
 41 | - Update test strategies
 42 | - Adjust time estimates
 43 | - Revise dependencies if needed
 44 | 
 45 | ## Smart Features
 46 | 
 47 | 1. **Scope Detection**
 48 |    - Find natural task groupings
 49 |    - Identify related features
 50 |    - Stop at logical boundaries
 51 |    - Avoid over-updating
 52 | 
 53 | 2. **Consistency Maintenance**
 54 |    - Keep naming conventions
 55 |    - Preserve relationships
 56 |    - Update cross-references
 57 |    - Maintain task flow
 58 | 
 59 | 3. **Change Preview**
 60 |    ```
 61 |    Bulk Update Preview
 62 |    ━━━━━━━━━━━━━━━━━━
 63 |    Starting from: Task #5
 64 |    Tasks to update: 8 tasks + 12 subtasks
 65 |    
 66 |    Context: "add security requirements"
 67 |    
 68 |    Changes will include:
 69 |    - Add security sections to descriptions
 70 |    - Update test strategies for security
 71 |    - Add security-related subtasks where needed
 72 |    - Adjust time estimates (+20% average)
 73 |    
 74 |    Continue? (y/n)
 75 |    ```
 76 | 
 77 | ## Example Updates
 78 | 
 79 | ```
 80 | /project:tm/update/from-id 5: change database to PostgreSQL
 81 | → Analyzing impact starting from task #5
 82 | → Found 6 related tasks to update
 83 | → Updates will maintain consistency
 84 | → Preview changes? (y/n)
 85 | 
 86 | Applied updates:
 87 | ✓ Task #5: Updated connection logic references
 88 | ✓ Task #6: Changed migration approach
 89 | ✓ Task #7: Updated query syntax notes
 90 | ✓ Task #8: Revised testing strategy
 91 | ✓ Task #9: Updated deployment steps
 92 | ✓ Task #12: Changed backup procedures
 93 | ```
 94 | 
 95 | ## Safety Features
 96 | 
 97 | - Preview all changes
 98 | - Selective confirmation
 99 | - Rollback capability
100 | - Change logging
101 | - Validation checks
102 | 
103 | ## Post-Update
104 | 
105 | - Summary of changes
106 | - Consistency verification
107 | - Suggest review tasks
108 | - Update timeline if needed
```

--------------------------------------------------------------------------------
/assets/claude/commands/tm/update/update-tasks-from-id.md:
--------------------------------------------------------------------------------

```markdown
  1 | Update multiple tasks starting from a specific ID.
  2 | 
  3 | Arguments: $ARGUMENTS
  4 | 
  5 | Parse starting task ID and update context.
  6 | 
  7 | ## Bulk Task Updates
  8 | 
  9 | Update multiple related tasks based on new requirements or context changes.
 10 | 
 11 | ## Argument Parsing
 12 | 
 13 | - "from 5: add security requirements"
 14 | - "5 onwards: update API endpoints"
 15 | - "starting at 5: change to use new framework"
 16 | 
 17 | ## Execution
 18 | 
 19 | ```bash
 20 | task-master update --from=<id> --prompt="<context>"
 21 | ```
 22 | 
 23 | ## Update Process
 24 | 
 25 | ### 1. **Task Selection**
 26 | Starting from specified ID:
 27 | - Include the task itself
 28 | - Include all dependent tasks
 29 | - Include related subtasks
 30 | - Smart boundary detection
 31 | 
 32 | ### 2. **Context Application**
 33 | AI analyzes the update context and:
 34 | - Identifies what needs changing
 35 | - Maintains consistency
 36 | - Preserves completed work
 37 | - Updates related information
 38 | 
 39 | ### 3. **Intelligent Updates**
 40 | - Modify descriptions appropriately
 41 | - Update test strategies
 42 | - Adjust time estimates
 43 | - Revise dependencies if needed
 44 | 
 45 | ## Smart Features
 46 | 
 47 | 1. **Scope Detection**
 48 |    - Find natural task groupings
 49 |    - Identify related features
 50 |    - Stop at logical boundaries
 51 |    - Avoid over-updating
 52 | 
 53 | 2. **Consistency Maintenance**
 54 |    - Keep naming conventions
 55 |    - Preserve relationships
 56 |    - Update cross-references
 57 |    - Maintain task flow
 58 | 
 59 | 3. **Change Preview**
 60 |    ```
 61 |    Bulk Update Preview
 62 |    ━━━━━━━━━━━━━━━━━━
 63 |    Starting from: Task #5
 64 |    Tasks to update: 8 tasks + 12 subtasks
 65 |    
 66 |    Context: "add security requirements"
 67 |    
 68 |    Changes will include:
 69 |    - Add security sections to descriptions
 70 |    - Update test strategies for security
 71 |    - Add security-related subtasks where needed
 72 |    - Adjust time estimates (+20% average)
 73 |    
 74 |    Continue? (y/n)
 75 |    ```
 76 | 
 77 | ## Example Updates
 78 | 
 79 | ```
 80 | /project:tm/update/from-id 5: change database to PostgreSQL
 81 | → Analyzing impact starting from task #5
 82 | → Found 6 related tasks to update
 83 | → Updates will maintain consistency
 84 | → Preview changes? (y/n)
 85 | 
 86 | Applied updates:
 87 | ✓ Task #5: Updated connection logic references
 88 | ✓ Task #6: Changed migration approach
 89 | ✓ Task #7: Updated query syntax notes
 90 | ✓ Task #8: Revised testing strategy
 91 | ✓ Task #9: Updated deployment steps
 92 | ✓ Task #12: Changed backup procedures
 93 | ```
 94 | 
 95 | ## Safety Features
 96 | 
 97 | - Preview all changes
 98 | - Selective confirmation
 99 | - Rollback capability
100 | - Change logging
101 | - Validation checks
102 | 
103 | ## Post-Update
104 | 
105 | - Summary of changes
106 | - Consistency verification
107 | - Suggest review tasks
108 | - Update timeline if needed
```

--------------------------------------------------------------------------------
/.claude/commands/tm/generate/generate-tasks.md:
--------------------------------------------------------------------------------

```markdown
  1 | Generate individual task files from tasks.json.
  2 | 
  3 | ## Task File Generation
  4 | 
  5 | Creates separate markdown files for each task, perfect for AI agents or documentation.
  6 | 
  7 | ## Execution
  8 | 
  9 | ```bash
 10 | task-master generate
 11 | ```
 12 | 
 13 | ## What It Creates
 14 | 
 15 | For each task, generates a file like `task_001.txt`:
 16 | 
 17 | ```
 18 | Task ID: 1
 19 | Title: Implement user authentication
 20 | Status: pending
 21 | Priority: high
 22 | Dependencies: []
 23 | Created: 2024-01-15
 24 | Complexity: 7
 25 | 
 26 | ## Description
 27 | Create a secure user authentication system with login, logout, and session management.
 28 | 
 29 | ## Details
 30 | - Use JWT tokens for session management
 31 | - Implement secure password hashing
 32 | - Add remember me functionality
 33 | - Include password reset flow
 34 | 
 35 | ## Test Strategy
 36 | - Unit tests for auth functions
 37 | - Integration tests for login flow
 38 | - Security testing for vulnerabilities
 39 | - Performance tests for concurrent logins
 40 | 
 41 | ## Subtasks
 42 | 1.1 Setup authentication framework (pending)
 43 | 1.2 Create login endpoints (pending)
 44 | 1.3 Implement session management (pending)
 45 | 1.4 Add password reset (pending)
 46 | ```
 47 | 
 48 | ## File Organization
 49 | 
 50 | Creates structure:
 51 | ```
 52 | .taskmaster/
 53 | └── tasks/
 54 |     ├── task_001.txt
 55 |     ├── task_002.txt
 56 |     ├── task_003.txt
 57 |     └── ...
 58 | ```
 59 | 
 60 | ## Smart Features
 61 | 
 62 | 1. **Consistent Formatting**
 63 |    - Standardized structure
 64 |    - Clear sections
 65 |    - AI-readable format
 66 |    - Markdown compatible
 67 | 
 68 | 2. **Contextual Information**
 69 |    - Full task details
 70 |    - Related task references
 71 |    - Progress indicators
 72 |    - Implementation notes
 73 | 
 74 | 3. **Incremental Updates**
 75 |    - Only regenerate changed tasks
 76 |    - Preserve custom additions
 77 |    - Track generation timestamp
 78 |    - Version control friendly
 79 | 
 80 | ## Use Cases
 81 | 
 82 | - **AI Context**: Provide task context to AI assistants
 83 | - **Documentation**: Standalone task documentation
 84 | - **Archival**: Task history preservation
 85 | - **Sharing**: Send specific tasks to team members
 86 | - **Review**: Easier task review process
 87 | 
 88 | ## Generation Options
 89 | 
 90 | Based on arguments:
 91 | - Filter by status
 92 | - Include/exclude completed
 93 | - Custom templates
 94 | - Different formats
 95 | 
 96 | ## Post-Generation
 97 | 
 98 | ```
 99 | Task File Generation Complete
100 | ━━━━━━━━━━━━━━━━━━━━━━━━━━
101 | Generated: 45 task files
102 | Location: .taskmaster/tasks/
103 | Total size: 156 KB
104 | 
105 | New files: 5
106 | Updated files: 12
107 | Unchanged: 28
108 | 
109 | Ready for:
110 | - AI agent consumption
111 | - Version control
112 | - Team distribution
113 | ```
114 | 
115 | ## Integration Benefits
116 | 
117 | - Git-trackable task history
118 | - Easy task sharing
119 | - AI tool compatibility
120 | - Offline task access
121 | - Backup redundancy
```

--------------------------------------------------------------------------------
/assets/claude/commands/tm/generate/generate-tasks.md:
--------------------------------------------------------------------------------

```markdown
  1 | Generate individual task files from tasks.json.
  2 | 
  3 | ## Task File Generation
  4 | 
  5 | Creates separate markdown files for each task, perfect for AI agents or documentation.
  6 | 
  7 | ## Execution
  8 | 
  9 | ```bash
 10 | task-master generate
 11 | ```
 12 | 
 13 | ## What It Creates
 14 | 
 15 | For each task, generates a file like `task_001.txt`:
 16 | 
 17 | ```
 18 | Task ID: 1
 19 | Title: Implement user authentication
 20 | Status: pending
 21 | Priority: high
 22 | Dependencies: []
 23 | Created: 2024-01-15
 24 | Complexity: 7
 25 | 
 26 | ## Description
 27 | Create a secure user authentication system with login, logout, and session management.
 28 | 
 29 | ## Details
 30 | - Use JWT tokens for session management
 31 | - Implement secure password hashing
 32 | - Add remember me functionality
 33 | - Include password reset flow
 34 | 
 35 | ## Test Strategy
 36 | - Unit tests for auth functions
 37 | - Integration tests for login flow
 38 | - Security testing for vulnerabilities
 39 | - Performance tests for concurrent logins
 40 | 
 41 | ## Subtasks
 42 | 1.1 Setup authentication framework (pending)
 43 | 1.2 Create login endpoints (pending)
 44 | 1.3 Implement session management (pending)
 45 | 1.4 Add password reset (pending)
 46 | ```
 47 | 
 48 | ## File Organization
 49 | 
 50 | Creates structure:
 51 | ```
 52 | .taskmaster/
 53 | └── tasks/
 54 |     ├── task_001.txt
 55 |     ├── task_002.txt
 56 |     ├── task_003.txt
 57 |     └── ...
 58 | ```
 59 | 
 60 | ## Smart Features
 61 | 
 62 | 1. **Consistent Formatting**
 63 |    - Standardized structure
 64 |    - Clear sections
 65 |    - AI-readable format
 66 |    - Markdown compatible
 67 | 
 68 | 2. **Contextual Information**
 69 |    - Full task details
 70 |    - Related task references
 71 |    - Progress indicators
 72 |    - Implementation notes
 73 | 
 74 | 3. **Incremental Updates**
 75 |    - Only regenerate changed tasks
 76 |    - Preserve custom additions
 77 |    - Track generation timestamp
 78 |    - Version control friendly
 79 | 
 80 | ## Use Cases
 81 | 
 82 | - **AI Context**: Provide task context to AI assistants
 83 | - **Documentation**: Standalone task documentation
 84 | - **Archival**: Task history preservation
 85 | - **Sharing**: Send specific tasks to team members
 86 | - **Review**: Easier task review process
 87 | 
 88 | ## Generation Options
 89 | 
 90 | Based on arguments:
 91 | - Filter by status
 92 | - Include/exclude completed
 93 | - Custom templates
 94 | - Different formats
 95 | 
 96 | ## Post-Generation
 97 | 
 98 | ```
 99 | Task File Generation Complete
100 | ━━━━━━━━━━━━━━━━━━━━━━━━━━
101 | Generated: 45 task files
102 | Location: .taskmaster/tasks/
103 | Total size: 156 KB
104 | 
105 | New files: 5
106 | Updated files: 12
107 | Unchanged: 28
108 | 
109 | Ready for:
110 | - AI agent consumption
111 | - Version control
112 | - Team distribution
113 | ```
114 | 
115 | ## Integration Benefits
116 | 
117 | - Git-trackable task history
118 | - Easy task sharing
119 | - AI tool compatibility
120 | - Offline task access
121 | - Backup redundancy
```

--------------------------------------------------------------------------------
/tests/integration/profiles/cursor-init-functionality.test.js:
--------------------------------------------------------------------------------

```javascript
 1 | import fs from 'fs';
 2 | import path from 'path';
 3 | import { cursorProfile } from '../../../src/profiles/cursor.js';
 4 | 
 5 | describe('Cursor Profile Initialization Functionality', () => {
 6 | 	let cursorProfileContent;
 7 | 
 8 | 	beforeAll(() => {
 9 | 		const cursorJsPath = path.join(
10 | 			process.cwd(),
11 | 			'src',
12 | 			'profiles',
13 | 			'cursor.js'
14 | 		);
15 | 		cursorProfileContent = fs.readFileSync(cursorJsPath, 'utf8');
16 | 	});
17 | 
18 | 	test('cursor.js uses factory pattern with correct configuration', () => {
19 | 		// Check for explicit, non-default values in the source file
20 | 		expect(cursorProfileContent).toContain("name: 'cursor'");
21 | 		expect(cursorProfileContent).toContain("displayName: 'Cursor'");
22 | 		expect(cursorProfileContent).toContain("url: 'cursor.so'");
23 | 		expect(cursorProfileContent).toContain("docsUrl: 'docs.cursor.com'");
24 | 		expect(cursorProfileContent).toContain("targetExtension: '.mdc'"); // non-default
25 | 
26 | 		// Check the final computed properties on the profile object
27 | 		expect(cursorProfile.profileName).toBe('cursor');
28 | 		expect(cursorProfile.displayName).toBe('Cursor');
29 | 		expect(cursorProfile.profileDir).toBe('.cursor'); // default
30 | 		expect(cursorProfile.rulesDir).toBe('.cursor/rules'); // default
31 | 		expect(cursorProfile.mcpConfig).toBe(true); // default
32 | 		expect(cursorProfile.mcpConfigName).toBe('mcp.json'); // default
33 | 	});
34 | 
35 | 	test('cursor.js preserves .mdc extension in both input and output', () => {
36 | 		// Check that the profile object has the correct file mapping behavior (cursor keeps .mdc)
37 | 		expect(cursorProfile.fileMap['rules/cursor_rules.mdc']).toBe(
38 | 			'cursor_rules.mdc'
39 | 		);
40 | 		// Also check that targetExtension is explicitly set in the file
41 | 		expect(cursorProfileContent).toContain("targetExtension: '.mdc'");
42 | 	});
43 | 
44 | 	test('cursor.js uses standard tool mappings (no tool renaming)', () => {
45 | 		// Check that the profile uses default tool mappings (equivalent to COMMON_TOOL_MAPPINGS.STANDARD)
46 | 		// This verifies the architectural pattern: no custom toolMappings = standard tool names
47 | 		expect(cursorProfileContent).not.toContain('toolMappings:');
48 | 		expect(cursorProfileContent).not.toContain('apply_diff');
49 | 		expect(cursorProfileContent).not.toContain('search_files');
50 | 
51 | 		// Verify the result: default mappings means tools keep their original names
52 | 		expect(cursorProfile.conversionConfig.toolNames.edit_file).toBe(
53 | 			'edit_file'
54 | 		);
55 | 		expect(cursorProfile.conversionConfig.toolNames.search).toBe('search');
56 | 	});
57 | });
58 | 
```

--------------------------------------------------------------------------------
/mcp-server/src/tools/validate-dependencies.js:
--------------------------------------------------------------------------------

```javascript
 1 | /**
 2 |  * tools/validate-dependencies.js
 3 |  * Tool for validating task dependencies
 4 |  */
 5 | 
 6 | import { z } from 'zod';
 7 | import {
 8 | 	handleApiResult,
 9 | 	createErrorResponse,
10 | 	withNormalizedProjectRoot
11 | } from './utils.js';
12 | import { validateDependenciesDirect } from '../core/task-master-core.js';
13 | import { findTasksPath } from '../core/utils/path-utils.js';
14 | import { resolveTag } from '../../../scripts/modules/utils.js';
15 | 
16 | /**
17 |  * Register the validateDependencies tool with the MCP server
18 |  * @param {Object} server - FastMCP server instance
19 |  */
20 | export function registerValidateDependenciesTool(server) {
21 | 	server.addTool({
22 | 		name: 'validate_dependencies',
23 | 		description:
24 | 			'Check tasks for dependency issues (like circular references or links to non-existent tasks) without making changes.',
25 | 		parameters: z.object({
26 | 			file: z.string().optional().describe('Absolute path to the tasks file'),
27 | 			projectRoot: z
28 | 				.string()
29 | 				.describe('The directory of the project. Must be an absolute path.'),
30 | 			tag: z.string().optional().describe('Tag context to operate on')
31 | 		}),
32 | 		execute: withNormalizedProjectRoot(async (args, { log, session }) => {
33 | 			try {
34 | 				const resolvedTag = resolveTag({
35 | 					projectRoot: args.projectRoot,
36 | 					tag: args.tag
37 | 				});
38 | 				log.info(`Validating dependencies with args: ${JSON.stringify(args)}`);
39 | 
40 | 				// Use args.projectRoot directly (guaranteed by withNormalizedProjectRoot)
41 | 				let tasksJsonPath;
42 | 				try {
43 | 					tasksJsonPath = findTasksPath(
44 | 						{ projectRoot: args.projectRoot, file: args.file },
45 | 						log
46 | 					);
47 | 				} catch (error) {
48 | 					log.error(`Error finding tasks.json: ${error.message}`);
49 | 					return createErrorResponse(
50 | 						`Failed to find tasks.json: ${error.message}`
51 | 					);
52 | 				}
53 | 
54 | 				const result = await validateDependenciesDirect(
55 | 					{
56 | 						tasksJsonPath: tasksJsonPath,
57 | 						projectRoot: args.projectRoot,
58 | 						tag: resolvedTag
59 | 					},
60 | 					log
61 | 				);
62 | 
63 | 				if (result.success) {
64 | 					log.info(
65 | 						`Successfully validated dependencies: ${result.data.message}`
66 | 					);
67 | 				} else {
68 | 					log.error(`Failed to validate dependencies: ${result.error.message}`);
69 | 				}
70 | 
71 | 				return handleApiResult(
72 | 					result,
73 | 					log,
74 | 					'Error validating dependencies',
75 | 					undefined,
76 | 					args.projectRoot
77 | 				);
78 | 			} catch (error) {
79 | 				log.error(`Error in validateDependencies tool: ${error.message}`);
80 | 				return createErrorResponse(error.message);
81 | 			}
82 | 		})
83 | 	});
84 | }
85 | 
```

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

```typescript
 1 | /**
 2 |  * Task Card Component for Kanban Board
 3 |  */
 4 | 
 5 | import React from 'react';
 6 | import { KanbanCard } from '@/components/ui/shadcn-io/kanban';
 7 | import { PriorityBadge } from './PriorityBadge';
 8 | import type { TaskMasterTask } from '../types';
 9 | 
10 | interface TaskCardProps {
11 | 	task: TaskMasterTask;
12 | 	dragging?: boolean;
13 | 	onViewDetails?: (taskId: string) => void;
14 | }
15 | 
16 | export const TaskCard: React.FC<TaskCardProps> = ({
17 | 	task,
18 | 	dragging,
19 | 	onViewDetails
20 | }) => {
21 | 	const handleCardClick = (e: React.MouseEvent) => {
22 | 		e.preventDefault();
23 | 		onViewDetails?.(task.id);
24 | 	};
25 | 
26 | 	return (
27 | 		<KanbanCard
28 | 			id={task.id}
29 | 			name={task.title}
30 | 			index={0} // Index is not used in our implementation
31 | 			parent={task.status}
32 | 			className="cursor-pointer p-3 transition-shadow hover:shadow-md bg-vscode-editor-background border-vscode-border group"
33 | 			onClick={handleCardClick}
34 | 		>
35 | 			<div className="space-y-3 h-full flex flex-col">
36 | 				<div className="flex items-start justify-between gap-2 flex-shrink-0">
37 | 					<h3 className="font-medium text-sm leading-tight flex-1 min-w-0 text-vscode-foreground">
38 | 						{task.title}
39 | 					</h3>
40 | 					<div className="flex items-center gap-1 flex-shrink-0">
41 | 						<PriorityBadge priority={task.priority} />
42 | 					</div>
43 | 				</div>
44 | 
45 | 				{task.description && (
46 | 					<p className="text-xs text-vscode-foreground/70 line-clamp-3 leading-relaxed flex-1 min-h-0">
47 | 						{task.description}
48 | 					</p>
49 | 				)}
50 | 
51 | 				<div className="flex items-center justify-between text-xs mt-auto pt-2 flex-shrink-0 border-t border-vscode-border/20">
52 | 					<span className="font-mono text-vscode-foreground/50 flex-shrink-0">
53 | 						#{task.id}
54 | 					</span>
55 | 					{task.dependencies && task.dependencies.length > 0 && (
56 | 						<div className="flex items-center gap-1 text-vscode-foreground/50 flex-shrink-0 ml-2">
57 | 							<span>Deps:</span>
58 | 							<div className="flex items-center gap-1">
59 | 								{task.dependencies.map((depId, index) => (
60 | 									<React.Fragment key={depId}>
61 | 										<button
62 | 											className="font-mono hover:text-vscode-link-activeForeground hover:underline transition-colors"
63 | 											onClick={(e) => {
64 | 												e.stopPropagation();
65 | 												onViewDetails?.(depId);
66 | 											}}
67 | 										>
68 | 											#{depId}
69 | 										</button>
70 | 										{index < task.dependencies!.length - 1 && <span>,</span>}
71 | 									</React.Fragment>
72 | 								))}
73 | 							</div>
74 | 						</div>
75 | 					)}
76 | 				</div>
77 | 			</div>
78 | 		</KanbanCard>
79 | 	);
80 | };
81 | 
```

--------------------------------------------------------------------------------
/apps/extension/assets/icon-dark.svg:
--------------------------------------------------------------------------------

```
1 | <svg viewBox="0 0 224 291" fill="none" xmlns="http://www.w3.org/2000/svg">
2 |   <path d="M101.635 286.568L71.4839 256.414C65.6092 250.539 65.6092 241.03 71.4839 235.155L142.52 164.11C144.474 162.156 147.643 162.156 149.61 164.11L176.216 190.719C178.17 192.673 181.339 192.673 183.305 190.719L189.719 184.305C191.673 182.35 191.673 179.181 189.719 177.214L163.113 150.605C161.159 148.651 161.159 145.481 163.113 143.514L191.26 115.365C193.214 113.41 193.214 110.241 191.26 108.274L182.316 99.3291C180.362 97.3748 177.193 97.3748 175.226 99.3291L55.8638 218.706C49.989 224.581 40.4816 224.581 34.6068 218.706L4.4061 188.501C-1.4687 182.626 -1.4687 173.117 4.4061 167.242L23.8342 147.811C25.7883 145.857 25.7883 142.688 23.8342 140.721L4.78187 121.666C-1.09293 115.791 -1.09293 106.282 4.78187 100.406L34.7195 70.4527C40.5943 64.5772 50.1017 64.5772 55.9765 70.4527L75.555 90.0335C77.5091 91.9879 80.6782 91.9879 82.6448 90.0335L124.144 48.5292C126.098 46.5749 126.098 43.4054 124.144 41.4385L115.463 32.7568C113.509 30.8025 110.34 30.8025 108.374 32.7568L99.8683 41.2632C97.9143 43.2175 94.7451 43.2175 92.7785 41.2632L82.1438 30.6271C80.1897 28.6728 80.1897 25.5033 82.1438 23.5364L101.271 4.40662C107.146 -1.46887 116.653 -1.46887 122.528 4.40662L152.478 34.3604C158.353 40.2359 158.353 49.7444 152.478 55.6199L82.6323 125.474C80.6782 127.429 77.5091 127.429 75.5425 125.474L48.8741 98.8029C46.9201 96.8486 43.7509 96.8486 41.7843 98.8029L33.1036 107.485C31.1496 109.439 31.1496 112.608 33.1036 114.575L59.2458 140.721C61.1999 142.675 61.1999 145.844 59.2458 147.811L32.7404 174.32C30.7863 176.274 30.7863 179.444 32.7404 181.411L41.6841 190.355C43.6382 192.31 46.8073 192.31 48.7739 190.355L168.136 70.9789C174.011 65.1034 183.518 65.1034 189.393 70.9789L219.594 101.183C225.469 107.059 225.469 116.567 219.594 122.443L198.537 143.502C196.583 145.456 196.583 148.626 198.537 150.592L218.053 170.111C223.928 175.986 223.928 185.495 218.053 191.37L190.37 219.056C184.495 224.932 174.988 224.932 169.113 219.056L149.597 199.538C147.643 197.584 144.474 197.584 142.508 199.538L99.8057 242.245C97.8516 244.2 97.8516 247.369 99.8057 249.336L108.699 258.231C110.653 260.185 113.823 260.185 115.789 258.231L122.954 251.065C124.908 249.11 128.077 249.11 130.044 251.065L140.679 261.701C142.633 263.655 142.633 266.825 140.679 268.791L122.879 286.593C117.004 292.469 107.497 292.469 101.622 286.593L101.635 286.568Z" fill="#CCCCCC"/>
3 | </svg>
```

--------------------------------------------------------------------------------
/apps/extension/assets/icon-light.svg:
--------------------------------------------------------------------------------

```
1 | <svg viewBox="0 0 224 291" fill="none" xmlns="http://www.w3.org/2000/svg">
2 |   <path d="M101.635 286.568L71.4839 256.414C65.6092 250.539 65.6092 241.03 71.4839 235.155L142.52 164.11C144.474 162.156 147.643 162.156 149.61 164.11L176.216 190.719C178.17 192.673 181.339 192.673 183.305 190.719L189.719 184.305C191.673 182.35 191.673 179.181 189.719 177.214L163.113 150.605C161.159 148.651 161.159 145.481 163.113 143.514L191.26 115.365C193.214 113.41 193.214 110.241 191.26 108.274L182.316 99.3291C180.362 97.3748 177.193 97.3748 175.226 99.3291L55.8638 218.706C49.989 224.581 40.4816 224.581 34.6068 218.706L4.4061 188.501C-1.4687 182.626 -1.4687 173.117 4.4061 167.242L23.8342 147.811C25.7883 145.857 25.7883 142.688 23.8342 140.721L4.78187 121.666C-1.09293 115.791 -1.09293 106.282 4.78187 100.406L34.7195 70.4527C40.5943 64.5772 50.1017 64.5772 55.9765 70.4527L75.555 90.0335C77.5091 91.9879 80.6782 91.9879 82.6448 90.0335L124.144 48.5292C126.098 46.5749 126.098 43.4054 124.144 41.4385L115.463 32.7568C113.509 30.8025 110.34 30.8025 108.374 32.7568L99.8683 41.2632C97.9143 43.2175 94.7451 43.2175 92.7785 41.2632L82.1438 30.6271C80.1897 28.6728 80.1897 25.5033 82.1438 23.5364L101.271 4.40662C107.146 -1.46887 116.653 -1.46887 122.528 4.40662L152.478 34.3604C158.353 40.2359 158.353 49.7444 152.478 55.6199L82.6323 125.474C80.6782 127.429 77.5091 127.429 75.5425 125.474L48.8741 98.8029C46.9201 96.8486 43.7509 96.8486 41.7843 98.8029L33.1036 107.485C31.1496 109.439 31.1496 112.608 33.1036 114.575L59.2458 140.721C61.1999 142.675 61.1999 145.844 59.2458 147.811L32.7404 174.32C30.7863 176.274 30.7863 179.444 32.7404 181.411L41.6841 190.355C43.6382 192.31 46.8073 192.31 48.7739 190.355L168.136 70.9789C174.011 65.1034 183.518 65.1034 189.393 70.9789L219.594 101.183C225.469 107.059 225.469 116.567 219.594 122.443L198.537 143.502C196.583 145.456 196.583 148.626 198.537 150.592L218.053 170.111C223.928 175.986 223.928 185.495 218.053 191.37L190.37 219.056C184.495 224.932 174.988 224.932 169.113 219.056L149.597 199.538C147.643 197.584 144.474 197.584 142.508 199.538L99.8057 242.245C97.8516 244.2 97.8516 247.369 99.8057 249.336L108.699 258.231C110.653 260.185 113.823 260.185 115.789 258.231L122.954 251.065C124.908 249.11 128.077 249.11 130.044 251.065L140.679 261.701C142.633 263.655 142.633 266.825 140.679 268.791L122.879 286.593C117.004 292.469 107.497 292.469 101.622 286.593L101.635 286.568Z" fill="#424242"/>
3 | </svg>
```

--------------------------------------------------------------------------------
/apps/extension/assets/sidebar-icon.svg:
--------------------------------------------------------------------------------

```
1 | <svg viewBox="0 0 224 291" fill="none" xmlns="http://www.w3.org/2000/svg">
2 |   <path d="M101.635 286.568L71.4839 256.414C65.6092 250.539 65.6092 241.03 71.4839 235.155L142.52 164.11C144.474 162.156 147.643 162.156 149.61 164.11L176.216 190.719C178.17 192.673 181.339 192.673 183.305 190.719L189.719 184.305C191.673 182.35 191.673 179.181 189.719 177.214L163.113 150.605C161.159 148.651 161.159 145.481 163.113 143.514L191.26 115.365C193.214 113.41 193.214 110.241 191.26 108.274L182.316 99.3291C180.362 97.3748 177.193 97.3748 175.226 99.3291L55.8638 218.706C49.989 224.581 40.4816 224.581 34.6068 218.706L4.4061 188.501C-1.4687 182.626 -1.4687 173.117 4.4061 167.242L23.8342 147.811C25.7883 145.857 25.7883 142.688 23.8342 140.721L4.78187 121.666C-1.09293 115.791 -1.09293 106.282 4.78187 100.406L34.7195 70.4527C40.5943 64.5772 50.1017 64.5772 55.9765 70.4527L75.555 90.0335C77.5091 91.9879 80.6782 91.9879 82.6448 90.0335L124.144 48.5292C126.098 46.5749 126.098 43.4054 124.144 41.4385L115.463 32.7568C113.509 30.8025 110.34 30.8025 108.374 32.7568L99.8683 41.2632C97.9143 43.2175 94.7451 43.2175 92.7785 41.2632L82.1438 30.6271C80.1897 28.6728 80.1897 25.5033 82.1438 23.5364L101.271 4.40662C107.146 -1.46887 116.653 -1.46887 122.528 4.40662L152.478 34.3604C158.353 40.2359 158.353 49.7444 152.478 55.6199L82.6323 125.474C80.6782 127.429 77.5091 127.429 75.5425 125.474L48.8741 98.8029C46.9201 96.8486 43.7509 96.8486 41.7843 98.8029L33.1036 107.485C31.1496 109.439 31.1496 112.608 33.1036 114.575L59.2458 140.721C61.1999 142.675 61.1999 145.844 59.2458 147.811L32.7404 174.32C30.7863 176.274 30.7863 179.444 32.7404 181.411L41.6841 190.355C43.6382 192.31 46.8073 192.31 48.7739 190.355L168.136 70.9789C174.011 65.1034 183.518 65.1034 189.393 70.9789L219.594 101.183C225.469 107.059 225.469 116.567 219.594 122.443L198.537 143.502C196.583 145.456 196.583 148.626 198.537 150.592L218.053 170.111C223.928 175.986 223.928 185.495 218.053 191.37L190.37 219.056C184.495 224.932 174.988 224.932 169.113 219.056L149.597 199.538C147.643 197.584 144.474 197.584 142.508 199.538L99.8057 242.245C97.8516 244.2 97.8516 247.369 99.8057 249.336L108.699 258.231C110.653 260.185 113.823 260.185 115.789 258.231L122.954 251.065C124.908 249.11 128.077 249.11 130.044 251.065L140.679 261.701C142.633 263.655 142.633 266.825 140.679 268.791L122.879 286.593C117.004 292.469 107.497 292.469 101.622 286.593L101.635 286.568Z" fill="currentColor"/>
3 | </svg>
```

--------------------------------------------------------------------------------
/packages/tm-core/CHANGELOG.md:
--------------------------------------------------------------------------------

```markdown
 1 | # Changelog
 2 | 
 3 | ## null
 4 | 
 5 | ## 0.26.1
 6 | 
 7 | All notable changes to the @task-master/tm-core package will be documented in this file.
 8 | 
 9 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
10 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
11 | 
12 | ## [Unreleased]
13 | 
14 | ### Added
15 | 
16 | - Initial package structure and configuration
17 | - TypeScript support with strict mode
18 | - Dual ESM/CJS build system with tsup
19 | - Jest testing framework with TypeScript support
20 | - ESLint and Prettier for code quality
21 | - Modular architecture with barrel exports
22 | - Placeholder implementations for all modules
23 | - Comprehensive documentation and README
24 | 
25 | ### Development Infrastructure
26 | 
27 | - tsup configuration for dual format builds
28 | - Jest configuration with ESM support
29 | - ESLint configuration with TypeScript rules
30 | - Prettier configuration for consistent formatting
31 | - Complete package.json with all required fields
32 | - TypeScript configuration with strict settings
33 | - .gitignore for development files
34 | 
35 | ### Package Structure
36 | 
37 | - `src/types/` - TypeScript type definitions (placeholder)
38 | - `src/providers/` - AI provider implementations (placeholder)
39 | - `src/storage/` - Storage layer abstractions (placeholder)
40 | - `src/parser/` - Task parsing utilities (placeholder)
41 | - `src/utils/` - Common utility functions (placeholder)
42 | - `src/errors/` - Custom error classes (placeholder)
43 | - `tests/` - Test directories and setup
44 | 
45 | ## [1.0.0] - TBD
46 | 
47 | ### Planned Features
48 | 
49 | - Complete TypeScript type system
50 | - AI provider implementations
51 | - Storage adapters
52 | - Task parsing capabilities
53 | - Comprehensive utility functions
54 | - Custom error handling
55 | - Full test coverage
56 | - Complete documentation
57 | 
58 | ---
59 | 
60 | ## Release Notes
61 | 
62 | ### Version 1.0.0 (Coming Soon)
63 | 
64 | This will be the first stable release of tm-core with complete implementations of all modules. Currently, all modules contain placeholder implementations to establish the package structure and enable development of dependent packages.
65 | 
66 | ### Development Status
67 | 
68 | - ✅ Package structure and configuration
69 | - ✅ Build and test infrastructure
70 | - ✅ Development tooling setup
71 | - 🚧 TypeScript types implementation (Task 116)
72 | - 🚧 AI provider system (Task 117)
73 | - 🚧 Storage layer (Task 118)
74 | - 🚧 Task parser (Task 119)
75 | - 🚧 Utility functions (Task 120)
76 | - 🚧 Error handling (Task 121)
77 | - 🚧 Configuration system (Task 122)
78 | - 🚧 Testing infrastructure (Task 123)
79 | - 🚧 Documentation (Task 124)
80 | - 🚧 Package finalization (Task 125)
81 | 
```

--------------------------------------------------------------------------------
/tests/integration/profiles/vscode-init-functionality.test.js:
--------------------------------------------------------------------------------

```javascript
 1 | import fs from 'fs';
 2 | import path from 'path';
 3 | import { vscodeProfile } from '../../../src/profiles/vscode.js';
 4 | 
 5 | describe('VSCode Profile Initialization Functionality', () => {
 6 | 	let vscodeProfileContent;
 7 | 
 8 | 	beforeAll(() => {
 9 | 		const vscodeJsPath = path.join(
10 | 			process.cwd(),
11 | 			'src',
12 | 			'profiles',
13 | 			'vscode.js'
14 | 		);
15 | 		vscodeProfileContent = fs.readFileSync(vscodeJsPath, 'utf8');
16 | 	});
17 | 
18 | 	test('vscode.js uses factory pattern with correct configuration', () => {
19 | 		// Check for explicit, non-default values in the source file
20 | 		expect(vscodeProfileContent).toContain("name: 'vscode'");
21 | 		expect(vscodeProfileContent).toContain("displayName: 'VS Code'");
22 | 		expect(vscodeProfileContent).toContain("url: 'code.visualstudio.com'");
23 | 		expect(vscodeProfileContent).toContain(
24 | 			"docsUrl: 'code.visualstudio.com/docs'"
25 | 		);
26 | 		expect(vscodeProfileContent).toContain("rulesDir: '.github/instructions'"); // non-default
27 | 		expect(vscodeProfileContent).toContain('customReplacements'); // non-default
28 | 
29 | 		// Check the final computed properties on the profile object
30 | 		expect(vscodeProfile.profileName).toBe('vscode');
31 | 		expect(vscodeProfile.displayName).toBe('VS Code');
32 | 		expect(vscodeProfile.profileDir).toBe('.vscode'); // default
33 | 		expect(vscodeProfile.rulesDir).toBe('.github/instructions'); // non-default
34 | 		expect(vscodeProfile.globalReplacements).toBeDefined(); // computed from customReplacements
35 | 		expect(Array.isArray(vscodeProfile.globalReplacements)).toBe(true);
36 | 	});
37 | 
38 | 	test('vscode.js configures .mdc to .instructions.md extension mapping', () => {
39 | 		// Check that the profile object has the correct file mapping behavior (vscode converts to .md)
40 | 		expect(vscodeProfile.fileMap['rules/cursor_rules.mdc']).toBe(
41 | 			'vscode_rules.instructions.md'
42 | 		);
43 | 	});
44 | 
45 | 	test('vscode.js uses standard tool mappings', () => {
46 | 		// Check that the profile uses default tool mappings (equivalent to COMMON_TOOL_MAPPINGS.STANDARD)
47 | 		// This verifies the architectural pattern: no custom toolMappings = standard tool names
48 | 		expect(vscodeProfileContent).not.toContain('toolMappings:');
49 | 		expect(vscodeProfileContent).not.toContain('apply_diff');
50 | 		expect(vscodeProfileContent).not.toContain('search_files');
51 | 
52 | 		// Verify the result: default mappings means tools keep their original names
53 | 		expect(vscodeProfile.conversionConfig.toolNames.edit_file).toBe(
54 | 			'edit_file'
55 | 		);
56 | 		expect(vscodeProfile.conversionConfig.toolNames.search).toBe('search');
57 | 	});
58 | });
59 | 
```

--------------------------------------------------------------------------------
/mcp-server/src/custom-sdk/errors.js:
--------------------------------------------------------------------------------

```javascript
  1 | /**
  2 |  * src/ai-providers/custom-sdk/mcp/errors.js
  3 |  *
  4 |  * Error handling utilities for MCP AI SDK provider.
  5 |  * Maps MCP errors to AI SDK compatible error types.
  6 |  */
  7 | 
  8 | /**
  9 |  * MCP-specific error class
 10 |  */
 11 | export class MCPError extends Error {
 12 | 	constructor(message, options = {}) {
 13 | 		super(message);
 14 | 		this.name = 'MCPError';
 15 | 		this.code = options.code;
 16 | 		this.cause = options.cause;
 17 | 		this.mcpResponse = options.mcpResponse;
 18 | 	}
 19 | }
 20 | 
 21 | /**
 22 |  * Session-related error
 23 |  */
 24 | export class MCPSessionError extends MCPError {
 25 | 	constructor(message, options = {}) {
 26 | 		super(message, options);
 27 | 		this.name = 'MCPSessionError';
 28 | 	}
 29 | }
 30 | 
 31 | /**
 32 |  * Sampling-related error
 33 |  */
 34 | export class MCPSamplingError extends MCPError {
 35 | 	constructor(message, options = {}) {
 36 | 		super(message, options);
 37 | 		this.name = 'MCPSamplingError';
 38 | 	}
 39 | }
 40 | 
 41 | /**
 42 |  * Map MCP errors to AI SDK compatible error types
 43 |  * @param {Error} error - Original error
 44 |  * @returns {Error} Mapped error
 45 |  */
 46 | export function mapMCPError(error) {
 47 | 	// If already an MCP error, return as-is
 48 | 	if (error instanceof MCPError) {
 49 | 		return error;
 50 | 	}
 51 | 
 52 | 	const message = error.message || 'Unknown MCP error';
 53 | 	const originalError = error;
 54 | 
 55 | 	// Map common error patterns
 56 | 	if (message.includes('session') || message.includes('connection')) {
 57 | 		return new MCPSessionError(message, {
 58 | 			cause: originalError,
 59 | 			code: 'SESSION_ERROR'
 60 | 		});
 61 | 	}
 62 | 
 63 | 	if (message.includes('sampling') || message.includes('timeout')) {
 64 | 		return new MCPSamplingError(message, {
 65 | 			cause: originalError,
 66 | 			code: 'SAMPLING_ERROR'
 67 | 		});
 68 | 	}
 69 | 
 70 | 	if (message.includes('capabilities') || message.includes('not supported')) {
 71 | 		return new MCPSessionError(message, {
 72 | 			cause: originalError,
 73 | 			code: 'CAPABILITY_ERROR'
 74 | 		});
 75 | 	}
 76 | 
 77 | 	// Default to generic MCP error
 78 | 	return new MCPError(message, {
 79 | 		cause: originalError,
 80 | 		code: 'UNKNOWN_ERROR'
 81 | 	});
 82 | }
 83 | 
 84 | /**
 85 |  * Check if error is retryable
 86 |  * @param {Error} error - Error to check
 87 |  * @returns {boolean} True if error might be retryable
 88 |  */
 89 | export function isRetryableError(error) {
 90 | 	if (error instanceof MCPSamplingError && error.code === 'SAMPLING_ERROR') {
 91 | 		return true;
 92 | 	}
 93 | 
 94 | 	if (error instanceof MCPSessionError && error.code === 'SESSION_ERROR') {
 95 | 		// Session errors are generally not retryable
 96 | 		return false;
 97 | 	}
 98 | 
 99 | 	// Check for common retryable patterns
100 | 	const message = error.message?.toLowerCase() || '';
101 | 	return (
102 | 		message.includes('timeout') ||
103 | 		message.includes('network') ||
104 | 		message.includes('temporary')
105 | 	);
106 | }
107 | 
```

--------------------------------------------------------------------------------
/tests/unit/mcp-providers/mcp-provider.test.js:
--------------------------------------------------------------------------------

```javascript
  1 | /**
  2 |  * tests/unit/mcp-providers/mcp-provider.test.js
  3 |  * Unit tests for MCP provider
  4 |  */
  5 | 
  6 | import { jest } from '@jest/globals';
  7 | 
  8 | describe('MCPProvider', () => {
  9 | 	let MCPProvider;
 10 | 	let provider;
 11 | 
 12 | 	beforeAll(async () => {
 13 | 		// Dynamic import to avoid circular dependency issues
 14 | 		const module = await import(
 15 | 			'../../../mcp-server/src/providers/mcp-provider.js'
 16 | 		);
 17 | 		MCPProvider = module.MCPProvider;
 18 | 	});
 19 | 
 20 | 	beforeEach(() => {
 21 | 		provider = new MCPProvider();
 22 | 	});
 23 | 
 24 | 	describe('constructor', () => {
 25 | 		it('should initialize with correct name', () => {
 26 | 			expect(provider.name).toBe('mcp');
 27 | 		});
 28 | 
 29 | 		it('should initialize with null session', () => {
 30 | 			expect(provider.session).toBeNull();
 31 | 		});
 32 | 	});
 33 | 
 34 | 	describe('isRequiredApiKey', () => {
 35 | 		it('should return false (no API key required)', () => {
 36 | 			expect(provider.isRequiredApiKey()).toBe(false);
 37 | 		});
 38 | 	});
 39 | 
 40 | 	describe('validateAuth', () => {
 41 | 		it('should throw error when no session', () => {
 42 | 			expect(() => provider.validateAuth({})).toThrow(
 43 | 				'MCP Provider requires active MCP session'
 44 | 			);
 45 | 		});
 46 | 
 47 | 		it('should throw error when session lacks sampling capabilities', () => {
 48 | 			provider.session = {
 49 | 				clientCapabilities: {}
 50 | 			};
 51 | 
 52 | 			expect(() => provider.validateAuth({})).toThrow(
 53 | 				'MCP session must have client sampling capabilities'
 54 | 			);
 55 | 		});
 56 | 
 57 | 		it('should pass validation with valid session', () => {
 58 | 			provider.session = {
 59 | 				clientCapabilities: {
 60 | 					sampling: true
 61 | 				}
 62 | 			};
 63 | 
 64 | 			expect(() => provider.validateAuth({})).not.toThrow();
 65 | 		});
 66 | 	});
 67 | 
 68 | 	describe('setSession', () => {
 69 | 		it('should set session when provided', () => {
 70 | 			const mockSession = {
 71 | 				clientCapabilities: { sampling: true }
 72 | 			};
 73 | 
 74 | 			provider.setSession(mockSession);
 75 | 			expect(provider.session).toBe(mockSession);
 76 | 		});
 77 | 
 78 | 		it('should handle null session gracefully', () => {
 79 | 			provider.setSession(null);
 80 | 			expect(provider.session).toBeNull();
 81 | 		});
 82 | 	});
 83 | 
 84 | 	describe('hasValidSession', () => {
 85 | 		it('should return false when no session', () => {
 86 | 			expect(provider.hasValidSession()).toBe(false);
 87 | 		});
 88 | 
 89 | 		it('should return false when session lacks sampling capabilities', () => {
 90 | 			provider.session = {
 91 | 				clientCapabilities: {}
 92 | 			};
 93 | 
 94 | 			expect(provider.hasValidSession()).toBe(false);
 95 | 		});
 96 | 
 97 | 		it('should return true with valid session', () => {
 98 | 			provider.session = {
 99 | 				clientCapabilities: {
100 | 					sampling: true
101 | 				}
102 | 			};
103 | 
104 | 			expect(provider.hasValidSession()).toBe(true);
105 | 		});
106 | 	});
107 | });
108 | 
```

--------------------------------------------------------------------------------
/scripts/modules/task-manager/parse-prd/parse-prd-non-streaming.js:
--------------------------------------------------------------------------------

```javascript
 1 | /**
 2 |  * Non-streaming handler for PRD parsing
 3 |  */
 4 | 
 5 | import ora from 'ora';
 6 | import { generateObjectService } from '../../ai-services-unified.js';
 7 | import { LoggingConfig, prdResponseSchema } from './parse-prd-config.js';
 8 | import { estimateTokens } from './parse-prd-helpers.js';
 9 | 
10 | /**
11 |  * Handle non-streaming AI service call
12 |  * @param {Object} config - Configuration object
13 |  * @param {Object} prompts - System and user prompts
14 |  * @returns {Promise<Object>} Generated tasks and telemetry
15 |  */
16 | export async function handleNonStreamingService(config, prompts) {
17 | 	const logger = new LoggingConfig(config.mcpLog, config.reportProgress);
18 | 	const { systemPrompt, userPrompt } = prompts;
19 | 	const estimatedInputTokens = estimateTokens(systemPrompt + userPrompt);
20 | 
21 | 	// Initialize spinner for CLI
22 | 	let spinner = null;
23 | 	if (config.outputFormat === 'text' && !config.isMCP) {
24 | 		spinner = ora('Parsing PRD and generating tasks...\n').start();
25 | 	}
26 | 
27 | 	try {
28 | 		// Call AI service
29 | 		logger.report(
30 | 			`Calling AI service to generate tasks from PRD${config.research ? ' with research-backed analysis' : ''}...`,
31 | 			'info'
32 | 		);
33 | 
34 | 		const aiServiceResponse = await generateObjectService({
35 | 			role: config.research ? 'research' : 'main',
36 | 			session: config.session,
37 | 			projectRoot: config.projectRoot,
38 | 			schema: prdResponseSchema,
39 | 			objectName: 'tasks_data',
40 | 			systemPrompt,
41 | 			prompt: userPrompt,
42 | 			commandName: 'parse-prd',
43 | 			outputType: config.isMCP ? 'mcp' : 'cli'
44 | 		});
45 | 
46 | 		// Extract generated data
47 | 		let generatedData = null;
48 | 		if (aiServiceResponse?.mainResult) {
49 | 			if (
50 | 				typeof aiServiceResponse.mainResult === 'object' &&
51 | 				aiServiceResponse.mainResult !== null &&
52 | 				'tasks' in aiServiceResponse.mainResult
53 | 			) {
54 | 				generatedData = aiServiceResponse.mainResult;
55 | 			} else if (
56 | 				typeof aiServiceResponse.mainResult.object === 'object' &&
57 | 				aiServiceResponse.mainResult.object !== null &&
58 | 				'tasks' in aiServiceResponse.mainResult.object
59 | 			) {
60 | 				generatedData = aiServiceResponse.mainResult.object;
61 | 			}
62 | 		}
63 | 
64 | 		if (!generatedData || !Array.isArray(generatedData.tasks)) {
65 | 			throw new Error(
66 | 				'AI service returned unexpected data structure after validation.'
67 | 			);
68 | 		}
69 | 
70 | 		if (spinner) {
71 | 			spinner.succeed('Tasks generated successfully!');
72 | 		}
73 | 
74 | 		return {
75 | 			parsedTasks: generatedData.tasks,
76 | 			aiServiceResponse,
77 | 			estimatedInputTokens
78 | 		};
79 | 	} catch (error) {
80 | 		if (spinner) {
81 | 			spinner.fail(`Error parsing PRD: ${error.message}`);
82 | 		}
83 | 		throw error;
84 | 	}
85 | }
86 | 
```

--------------------------------------------------------------------------------
/.github/scripts/utils.mjs:
--------------------------------------------------------------------------------

```
 1 | #!/usr/bin/env node
 2 | import { spawnSync } from 'node:child_process';
 3 | import { readFileSync } from 'node:fs';
 4 | import { join, dirname, resolve } from 'node:path';
 5 | 
 6 | // Find the root directory by looking for package.json with task-master-ai
 7 | export function findRootDir(startDir) {
 8 | 	let currentDir = resolve(startDir);
 9 | 	while (currentDir !== '/') {
10 | 		const pkgPath = join(currentDir, 'package.json');
11 | 		try {
12 | 			const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
13 | 			if (pkg.name === 'task-master-ai' || pkg.repository) {
14 | 				return currentDir;
15 | 			}
16 | 		} catch {}
17 | 		currentDir = dirname(currentDir);
18 | 	}
19 | 	throw new Error('Could not find root directory');
20 | }
21 | 
22 | // Run a command with proper error handling
23 | export function runCommand(command, args = [], options = {}) {
24 | 	console.log(`Running: ${command} ${args.join(' ')}`);
25 | 	const result = spawnSync(command, args, {
26 | 		encoding: 'utf8',
27 | 		stdio: 'inherit',
28 | 		...options
29 | 	});
30 | 
31 | 	if (result.status !== 0) {
32 | 		console.error(`Command failed with exit code ${result.status}`);
33 | 		process.exit(result.status);
34 | 	}
35 | 
36 | 	return result;
37 | }
38 | 
39 | // Get package version from a package.json file
40 | export function getPackageVersion(packagePath) {
41 | 	try {
42 | 		const pkg = JSON.parse(readFileSync(packagePath, 'utf8'));
43 | 		return pkg.version;
44 | 	} catch (error) {
45 | 		console.error(
46 | 			`Failed to read package version from ${packagePath}:`,
47 | 			error.message
48 | 		);
49 | 		process.exit(1);
50 | 	}
51 | }
52 | 
53 | // Check if a git tag exists on remote
54 | export function tagExistsOnRemote(tag, remote = 'origin') {
55 | 	const result = spawnSync('git', ['ls-remote', remote, tag], {
56 | 		encoding: 'utf8'
57 | 	});
58 | 
59 | 	return result.status === 0 && result.stdout.trim() !== '';
60 | }
61 | 
62 | // Create and push a git tag if it doesn't exist
63 | export function createAndPushTag(tag, remote = 'origin') {
64 | 	// Check if tag already exists
65 | 	if (tagExistsOnRemote(tag, remote)) {
66 | 		console.log(`Tag ${tag} already exists on remote, skipping`);
67 | 		return false;
68 | 	}
69 | 
70 | 	console.log(`Creating new tag: ${tag}`);
71 | 
72 | 	// Create the tag locally
73 | 	const tagResult = spawnSync('git', ['tag', tag]);
74 | 	if (tagResult.status !== 0) {
75 | 		console.error('Failed to create tag:', tagResult.error || tagResult.stderr);
76 | 		process.exit(1);
77 | 	}
78 | 
79 | 	// Push the tag to remote
80 | 	const pushResult = spawnSync('git', ['push', remote, tag]);
81 | 	if (pushResult.status !== 0) {
82 | 		console.error('Failed to push tag:', pushResult.error || pushResult.stderr);
83 | 		process.exit(1);
84 | 	}
85 | 
86 | 	console.log(`✅ Successfully created and pushed tag: ${tag}`);
87 | 	return true;
88 | }
89 | 
```

--------------------------------------------------------------------------------
/.claude/commands/tm/complexity-report/complexity-report.md:
--------------------------------------------------------------------------------

```markdown
  1 | Display the task complexity analysis report.
  2 | 
  3 | Arguments: $ARGUMENTS
  4 | 
  5 | View the detailed complexity analysis generated by analyze-complexity command.
  6 | 
  7 | ## Viewing Complexity Report
  8 | 
  9 | Shows comprehensive task complexity analysis with actionable insights.
 10 | 
 11 | ## Execution
 12 | 
 13 | ```bash
 14 | task-master complexity-report [--file=<path>]
 15 | ```
 16 | 
 17 | ## Report Location
 18 | 
 19 | Default: `.taskmaster/reports/complexity-analysis.md`
 20 | Custom: Specify with --file parameter
 21 | 
 22 | ## Report Contents
 23 | 
 24 | ### 1. **Executive Summary**
 25 | ```
 26 | Complexity Analysis Summary
 27 | ━━━━━━━━━━━━━━━━━━━━━━━━
 28 | Analysis Date: 2024-01-15
 29 | Tasks Analyzed: 32
 30 | High Complexity: 5 (16%)
 31 | Medium Complexity: 12 (37%)
 32 | Low Complexity: 15 (47%)
 33 | 
 34 | Critical Findings:
 35 | - 5 tasks need immediate expansion
 36 | - 3 tasks have high technical risk
 37 | - 2 tasks block critical path
 38 | ```
 39 | 
 40 | ### 2. **Detailed Task Analysis**
 41 | For each complex task:
 42 | - Complexity score breakdown
 43 | - Contributing factors
 44 | - Specific risks identified
 45 | - Expansion recommendations
 46 | - Similar completed tasks
 47 | 
 48 | ### 3. **Risk Matrix**
 49 | Visual representation:
 50 | ```
 51 | Risk vs Complexity Matrix
 52 | ━━━━━━━━━━━━━━━━━━━━━━━
 53 | High Risk  | #5(9) #12(8) | #23(6)
 54 | Med Risk   | #34(7)       | #45(5) #67(5)
 55 | Low Risk   | #78(8)       | [15 tasks]
 56 |            | High Complex  | Med Complex
 57 | ```
 58 | 
 59 | ### 4. **Recommendations**
 60 | 
 61 | **Immediate Actions:**
 62 | 1. Expand task #5 - Critical path + high complexity
 63 | 2. Expand task #12 - High risk + dependencies
 64 | 3. Review task #34 - Consider splitting
 65 | 
 66 | **Sprint Planning:**
 67 | - Don't schedule multiple high-complexity tasks together
 68 | - Ensure expertise available for complex tasks
 69 | - Build in buffer time for unknowns
 70 | 
 71 | ## Interactive Features
 72 | 
 73 | When viewing report:
 74 | 1. **Quick Actions**
 75 |    - Press 'e' to expand a task
 76 |    - Press 'd' for task details
 77 |    - Press 'r' to refresh analysis
 78 | 
 79 | 2. **Filtering**
 80 |    - View by complexity level
 81 |    - Filter by risk factors
 82 |    - Show only actionable items
 83 | 
 84 | 3. **Export Options**
 85 |    - Markdown format
 86 |    - CSV for spreadsheets
 87 |    - JSON for tools
 88 | 
 89 | ## Report Intelligence
 90 | 
 91 | - Compares with historical data
 92 | - Shows complexity trends
 93 | - Identifies patterns
 94 | - Suggests process improvements
 95 | 
 96 | ## Integration
 97 | 
 98 | Use report for:
 99 | - Sprint planning sessions
100 | - Resource allocation
101 | - Risk assessment
102 | - Team discussions
103 | - Client updates
104 | 
105 | ## Example Usage
106 | 
107 | ```
108 | /project:tm/complexity-report
109 | → Opens latest analysis
110 | 
111 | /project:tm/complexity-report --file=archived/2024-01-01.md
112 | → View historical analysis
113 | 
114 | After viewing:
115 | /project:tm/expand 5
116 | → Expand high-complexity task
117 | ```
```

--------------------------------------------------------------------------------
/assets/claude/commands/tm/complexity-report/complexity-report.md:
--------------------------------------------------------------------------------

```markdown
  1 | Display the task complexity analysis report.
  2 | 
  3 | Arguments: $ARGUMENTS
  4 | 
  5 | View the detailed complexity analysis generated by analyze-complexity command.
  6 | 
  7 | ## Viewing Complexity Report
  8 | 
  9 | Shows comprehensive task complexity analysis with actionable insights.
 10 | 
 11 | ## Execution
 12 | 
 13 | ```bash
 14 | task-master complexity-report [--file=<path>]
 15 | ```
 16 | 
 17 | ## Report Location
 18 | 
 19 | Default: `.taskmaster/reports/complexity-analysis.md`
 20 | Custom: Specify with --file parameter
 21 | 
 22 | ## Report Contents
 23 | 
 24 | ### 1. **Executive Summary**
 25 | ```
 26 | Complexity Analysis Summary
 27 | ━━━━━━━━━━━━━━━━━━━━━━━━
 28 | Analysis Date: 2024-01-15
 29 | Tasks Analyzed: 32
 30 | High Complexity: 5 (16%)
 31 | Medium Complexity: 12 (37%)
 32 | Low Complexity: 15 (47%)
 33 | 
 34 | Critical Findings:
 35 | - 5 tasks need immediate expansion
 36 | - 3 tasks have high technical risk
 37 | - 2 tasks block critical path
 38 | ```
 39 | 
 40 | ### 2. **Detailed Task Analysis**
 41 | For each complex task:
 42 | - Complexity score breakdown
 43 | - Contributing factors
 44 | - Specific risks identified
 45 | - Expansion recommendations
 46 | - Similar completed tasks
 47 | 
 48 | ### 3. **Risk Matrix**
 49 | Visual representation:
 50 | ```
 51 | Risk vs Complexity Matrix
 52 | ━━━━━━━━━━━━━━━━━━━━━━━
 53 | High Risk  | #5(9) #12(8) | #23(6)
 54 | Med Risk   | #34(7)       | #45(5) #67(5)
 55 | Low Risk   | #78(8)       | [15 tasks]
 56 |            | High Complex  | Med Complex
 57 | ```
 58 | 
 59 | ### 4. **Recommendations**
 60 | 
 61 | **Immediate Actions:**
 62 | 1. Expand task #5 - Critical path + high complexity
 63 | 2. Expand task #12 - High risk + dependencies
 64 | 3. Review task #34 - Consider splitting
 65 | 
 66 | **Sprint Planning:**
 67 | - Don't schedule multiple high-complexity tasks together
 68 | - Ensure expertise available for complex tasks
 69 | - Build in buffer time for unknowns
 70 | 
 71 | ## Interactive Features
 72 | 
 73 | When viewing report:
 74 | 1. **Quick Actions**
 75 |    - Press 'e' to expand a task
 76 |    - Press 'd' for task details
 77 |    - Press 'r' to refresh analysis
 78 | 
 79 | 2. **Filtering**
 80 |    - View by complexity level
 81 |    - Filter by risk factors
 82 |    - Show only actionable items
 83 | 
 84 | 3. **Export Options**
 85 |    - Markdown format
 86 |    - CSV for spreadsheets
 87 |    - JSON for tools
 88 | 
 89 | ## Report Intelligence
 90 | 
 91 | - Compares with historical data
 92 | - Shows complexity trends
 93 | - Identifies patterns
 94 | - Suggests process improvements
 95 | 
 96 | ## Integration
 97 | 
 98 | Use report for:
 99 | - Sprint planning sessions
100 | - Resource allocation
101 | - Risk assessment
102 | - Team discussions
103 | - Client updates
104 | 
105 | ## Example Usage
106 | 
107 | ```
108 | /project:tm/complexity-report
109 | → Opens latest analysis
110 | 
111 | /project:tm/complexity-report --file=archived/2024-01-01.md
112 | → View historical analysis
113 | 
114 | After viewing:
115 | /project:tm/expand 5
116 | → Expand high-complexity task
117 | ```
```

--------------------------------------------------------------------------------
/mcp-server/src/tools/initialize-project.js:
--------------------------------------------------------------------------------

```javascript
 1 | import { z } from 'zod';
 2 | import {
 3 | 	createErrorResponse,
 4 | 	handleApiResult,
 5 | 	withNormalizedProjectRoot
 6 | } from './utils.js';
 7 | import { initializeProjectDirect } from '../core/task-master-core.js';
 8 | import { RULE_PROFILES } from '../../../src/constants/profiles.js';
 9 | 
10 | export function registerInitializeProjectTool(server) {
11 | 	server.addTool({
12 | 		name: 'initialize_project',
13 | 		description:
14 | 			'Initializes a new Task Master project structure by calling the core initialization logic. Creates necessary folders and configuration files for Task Master in the current directory.',
15 | 		parameters: z.object({
16 | 			skipInstall: z
17 | 				.boolean()
18 | 				.optional()
19 | 				.default(false)
20 | 				.describe(
21 | 					'Skip installing dependencies automatically. Never do this unless you are sure the project is already installed.'
22 | 				),
23 | 			addAliases: z
24 | 				.boolean()
25 | 				.optional()
26 | 				.default(true)
27 | 				.describe('Add shell aliases (tm, taskmaster) to shell config file.'),
28 | 			initGit: z
29 | 				.boolean()
30 | 				.optional()
31 | 				.default(true)
32 | 				.describe('Initialize Git repository in project root.'),
33 | 			storeTasksInGit: z
34 | 				.boolean()
35 | 				.optional()
36 | 				.default(true)
37 | 				.describe('Store tasks in Git (tasks.json and tasks/ directory).'),
38 | 			yes: z
39 | 				.boolean()
40 | 				.optional()
41 | 				.default(true)
42 | 				.describe(
43 | 					'Skip prompts and use default values. Always set to true for MCP tools.'
44 | 				),
45 | 			projectRoot: z
46 | 				.string()
47 | 				.describe(
48 | 					'The root directory for the project. ALWAYS SET THIS TO THE PROJECT ROOT DIRECTORY. IF NOT SET, THE TOOL WILL NOT WORK.'
49 | 				),
50 | 			rules: z
51 | 				.array(z.enum(RULE_PROFILES))
52 | 				.optional()
53 | 				.describe(
54 | 					`List of rule profiles to include at initialization. If omitted, defaults to Cursor profile only. Available options: ${RULE_PROFILES.join(', ')}`
55 | 				)
56 | 		}),
57 | 		execute: withNormalizedProjectRoot(async (args, context) => {
58 | 			const { log } = context;
59 | 			const session = context.session;
60 | 
61 | 			try {
62 | 				log.info(
63 | 					`Executing initialize_project tool with args: ${JSON.stringify(args)}`
64 | 				);
65 | 
66 | 				const result = await initializeProjectDirect(args, log, { session });
67 | 
68 | 				return handleApiResult(
69 | 					result,
70 | 					log,
71 | 					'Initialization failed',
72 | 					undefined,
73 | 					args.projectRoot
74 | 				);
75 | 			} catch (error) {
76 | 				const errorMessage = `Project initialization tool failed: ${error.message || 'Unknown error'}`;
77 | 				log.error(errorMessage, error);
78 | 				return createErrorResponse(errorMessage, { details: error.stack });
79 | 			}
80 | 		})
81 | 	});
82 | }
83 | 
```

--------------------------------------------------------------------------------
/.claude/commands/tm/update/update-single-task.md:
--------------------------------------------------------------------------------

```markdown
  1 | Update a single specific task with new information.
  2 | 
  3 | Arguments: $ARGUMENTS
  4 | 
  5 | Parse task ID and update details.
  6 | 
  7 | ## Single Task Update
  8 | 
  9 | Precisely update one task with AI assistance to maintain consistency.
 10 | 
 11 | ## Argument Parsing
 12 | 
 13 | Natural language updates:
 14 | - "5: add caching requirement"
 15 | - "update 5 to include error handling"
 16 | - "task 5 needs rate limiting"
 17 | - "5 change priority to high"
 18 | 
 19 | ## Execution
 20 | 
 21 | ```bash
 22 | task-master update-task --id=<id> --prompt="<context>"
 23 | ```
 24 | 
 25 | ## Update Types
 26 | 
 27 | ### 1. **Content Updates**
 28 | - Enhance description
 29 | - Add requirements
 30 | - Clarify details
 31 | - Update acceptance criteria
 32 | 
 33 | ### 2. **Metadata Updates**
 34 | - Change priority
 35 | - Adjust time estimates
 36 | - Update complexity
 37 | - Modify dependencies
 38 | 
 39 | ### 3. **Strategic Updates**
 40 | - Revise approach
 41 | - Change test strategy
 42 | - Update implementation notes
 43 | - Adjust subtask needs
 44 | 
 45 | ## AI-Powered Updates
 46 | 
 47 | The AI:
 48 | 1. **Understands Context**
 49 |    - Reads current task state
 50 |    - Identifies update intent
 51 |    - Maintains consistency
 52 |    - Preserves important info
 53 | 
 54 | 2. **Applies Changes**
 55 |    - Updates relevant fields
 56 |    - Keeps style consistent
 57 |    - Adds without removing
 58 |    - Enhances clarity
 59 | 
 60 | 3. **Validates Results**
 61 |    - Checks coherence
 62 |    - Verifies completeness
 63 |    - Maintains relationships
 64 |    - Suggests related updates
 65 | 
 66 | ## Example Updates
 67 | 
 68 | ```
 69 | /project:tm/update/single 5: add rate limiting
 70 | → Updating Task #5: "Implement API endpoints"
 71 | 
 72 | Current: Basic CRUD endpoints
 73 | Adding: Rate limiting requirements
 74 | 
 75 | Updated sections:
 76 | ✓ Description: Added rate limiting mention
 77 | ✓ Details: Added specific limits (100/min)
 78 | ✓ Test Strategy: Added rate limit tests
 79 | ✓ Complexity: Increased from 5 to 6
 80 | ✓ Time Estimate: Increased by 2 hours
 81 | 
 82 | Suggestion: Also update task #6 (API Gateway) for consistency?
 83 | ```
 84 | 
 85 | ## Smart Features
 86 | 
 87 | 1. **Incremental Updates**
 88 |    - Adds without overwriting
 89 |    - Preserves work history
 90 |    - Tracks what changed
 91 |    - Shows diff view
 92 | 
 93 | 2. **Consistency Checks**
 94 |    - Related task alignment
 95 |    - Subtask compatibility
 96 |    - Dependency validity
 97 |    - Timeline impact
 98 | 
 99 | 3. **Update History**
100 |    - Timestamp changes
101 |    - Track who/what updated
102 |    - Reason for update
103 |    - Previous versions
104 | 
105 | ## Field-Specific Updates
106 | 
107 | Quick syntax for specific fields:
108 | - "5 priority:high" → Update priority only
109 | - "5 add-time:4h" → Add to time estimate
110 | - "5 status:review" → Change status
111 | - "5 depends:3,4" → Add dependencies
112 | 
113 | ## Post-Update
114 | 
115 | - Show updated task
116 | - Highlight changes
117 | - Check related tasks
118 | - Update suggestions
119 | - Timeline adjustments
```

--------------------------------------------------------------------------------
/assets/claude/commands/tm/update/update-single-task.md:
--------------------------------------------------------------------------------

```markdown
  1 | Update a single specific task with new information.
  2 | 
  3 | Arguments: $ARGUMENTS
  4 | 
  5 | Parse task ID and update details.
  6 | 
  7 | ## Single Task Update
  8 | 
  9 | Precisely update one task with AI assistance to maintain consistency.
 10 | 
 11 | ## Argument Parsing
 12 | 
 13 | Natural language updates:
 14 | - "5: add caching requirement"
 15 | - "update 5 to include error handling"
 16 | - "task 5 needs rate limiting"
 17 | - "5 change priority to high"
 18 | 
 19 | ## Execution
 20 | 
 21 | ```bash
 22 | task-master update-task --id=<id> --prompt="<context>"
 23 | ```
 24 | 
 25 | ## Update Types
 26 | 
 27 | ### 1. **Content Updates**
 28 | - Enhance description
 29 | - Add requirements
 30 | - Clarify details
 31 | - Update acceptance criteria
 32 | 
 33 | ### 2. **Metadata Updates**
 34 | - Change priority
 35 | - Adjust time estimates
 36 | - Update complexity
 37 | - Modify dependencies
 38 | 
 39 | ### 3. **Strategic Updates**
 40 | - Revise approach
 41 | - Change test strategy
 42 | - Update implementation notes
 43 | - Adjust subtask needs
 44 | 
 45 | ## AI-Powered Updates
 46 | 
 47 | The AI:
 48 | 1. **Understands Context**
 49 |    - Reads current task state
 50 |    - Identifies update intent
 51 |    - Maintains consistency
 52 |    - Preserves important info
 53 | 
 54 | 2. **Applies Changes**
 55 |    - Updates relevant fields
 56 |    - Keeps style consistent
 57 |    - Adds without removing
 58 |    - Enhances clarity
 59 | 
 60 | 3. **Validates Results**
 61 |    - Checks coherence
 62 |    - Verifies completeness
 63 |    - Maintains relationships
 64 |    - Suggests related updates
 65 | 
 66 | ## Example Updates
 67 | 
 68 | ```
 69 | /project:tm/update/single 5: add rate limiting
 70 | → Updating Task #5: "Implement API endpoints"
 71 | 
 72 | Current: Basic CRUD endpoints
 73 | Adding: Rate limiting requirements
 74 | 
 75 | Updated sections:
 76 | ✓ Description: Added rate limiting mention
 77 | ✓ Details: Added specific limits (100/min)
 78 | ✓ Test Strategy: Added rate limit tests
 79 | ✓ Complexity: Increased from 5 to 6
 80 | ✓ Time Estimate: Increased by 2 hours
 81 | 
 82 | Suggestion: Also update task #6 (API Gateway) for consistency?
 83 | ```
 84 | 
 85 | ## Smart Features
 86 | 
 87 | 1. **Incremental Updates**
 88 |    - Adds without overwriting
 89 |    - Preserves work history
 90 |    - Tracks what changed
 91 |    - Shows diff view
 92 | 
 93 | 2. **Consistency Checks**
 94 |    - Related task alignment
 95 |    - Subtask compatibility
 96 |    - Dependency validity
 97 |    - Timeline impact
 98 | 
 99 | 3. **Update History**
100 |    - Timestamp changes
101 |    - Track who/what updated
102 |    - Reason for update
103 |    - Previous versions
104 | 
105 | ## Field-Specific Updates
106 | 
107 | Quick syntax for specific fields:
108 | - "5 priority:high" → Update priority only
109 | - "5 add-time:4h" → Add to time estimate
110 | - "5 status:review" → Change status
111 | - "5 depends:3,4" → Add dependencies
112 | 
113 | ## Post-Update
114 | 
115 | - Show updated task
116 | - Highlight changes
117 | - Check related tasks
118 | - Update suggestions
119 | - Timeline adjustments
```

--------------------------------------------------------------------------------
/tests/manual/progress/TESTING_GUIDE.md:
--------------------------------------------------------------------------------

```markdown
 1 | # Task Master Progress Testing Guide
 2 | 
 3 | Quick reference for testing streaming/non-streaming functionality with token tracking.
 4 | 
 5 | ## 🎯 Test Modes
 6 | 
 7 | 1. **MCP Streaming** - Has `reportProgress` + `mcpLog`, shows emoji indicators (🔴🟠🟢)
 8 | 2. **CLI Streaming** - No `reportProgress`, shows terminal progress bars  
 9 | 3. **Non-Streaming** - No progress reporting, single response
10 | 
11 | ## 🚀 Quick Commands
12 | 
13 | ```bash
14 | # Test Scripts (accept: mcp-streaming, cli-streaming, non-streaming, both, all)
15 | node test-parse-prd.js [mode] 
16 | node test-analyze-complexity.js [mode]
17 | node test-expand.js [mode] [num_subtasks]
18 | node test-expand-all.js [mode] [num_subtasks]
19 | node parse-prd-analysis.js [accuracy|complexity|all]
20 | 
21 | # CLI Commands
22 | node scripts/dev.js parse-prd test.txt         # Local dev (streaming)
23 | node scripts/dev.js analyze-complexity --research
24 | node scripts/dev.js expand --id=1 --force
25 | node scripts/dev.js expand --all --force
26 | 
27 | task-master [command]                          # Global CLI (non-streaming)
28 | ```
29 | 
30 | ## ✅ Success Indicators
31 | 
32 | ### Indicators
33 | - **Priority**: 🔴🔴🔴 (high), 🟠🟠⚪ (medium), 🟢⚪⚪ (low)
34 | - **Complexity**: ●●● (7-10), ●●○ (4-6), ●○○ (1-3)
35 | 
36 | ### Token Format
37 | `Tokens (I/O): 2,150/1,847 ($0.0423)` (~4 chars per token)
38 | 
39 | ### Progress Bars
40 | ```
41 | Single:  Generating subtasks... |████████░░| 80% (4/5)
42 | Dual:    Expanding 3 tasks | Task 2/3 |████████░░| 66%
43 |          Generating 5 subtasks... |██████░░░░| 60%
44 | ```
45 | 
46 | ### Fractional Progress
47 | `(completedTasks + currentSubtask/totalSubtasks) / totalTasks`
48 | Example: 33% → 46% → 60% → 66% → 80% → 93% → 100%
49 | 
50 | ## 🐛 Quick Fixes
51 | 
52 | | Issue | Fix |
53 | |-------|-----|
54 | | No streaming | Check `reportProgress` is passed |
55 | | NaN% progress | Filter duplicate `subtask_progress` events |
56 | | Missing tokens | Check `.env` has API keys |
57 | | Broken bars | Terminal width > 80 |
58 | | projectRoot.split | Use `projectRoot` not `session` |
59 | 
60 | ```bash
61 | # Debug
62 | TASKMASTER_DEBUG=true node test-expand.js
63 | npm run lint
64 | ```
65 | 
66 | ## 📊 Benchmarks
67 | - Single task: 10-20s (5 subtasks)
68 | - Expand all: 30-45s (3 tasks)
69 | - Streaming: ~10-20% faster
70 | - Updates: Every 2-5s
71 | 
72 | ## 🔄 Test Workflow
73 | 
74 | ```bash
75 | # Quick check
76 | node test-parse-prd.js both && npm test
77 | 
78 | # Full suite (before release)
79 | for test in parse-prd analyze-complexity expand expand-all; do
80 |   node test-$test.js all
81 | done
82 | node parse-prd-analysis.js all
83 | npm test
84 | ```
85 | 
86 | ## 🎯 MCP Tool Example
87 | 
88 | ```javascript
89 | {
90 |   "tool": "parse_prd",
91 |   "args": {
92 |     "input": "prd.txt",
93 |     "numTasks": "8", 
94 |     "force": true,
95 |     "projectRoot": "/path/to/project"
96 |   }
97 | }
98 | 
```

--------------------------------------------------------------------------------
/src/ai-providers/grok-cli.js:
--------------------------------------------------------------------------------

```javascript
 1 | /**
 2 |  * grok-cli.js
 3 |  * AI provider implementation for Grok models using Grok CLI.
 4 |  */
 5 | 
 6 | import { createGrokCli } from './custom-sdk/grok-cli/index.js';
 7 | import { BaseAIProvider } from './base-provider.js';
 8 | import { getGrokCliSettingsForCommand } from '../../scripts/modules/config-manager.js';
 9 | 
10 | export class GrokCliProvider extends BaseAIProvider {
11 | 	constructor() {
12 | 		super();
13 | 		this.name = 'Grok CLI';
14 | 	}
15 | 
16 | 	/**
17 | 	 * Returns the environment variable name required for this provider's API key.
18 | 	 * @returns {string} The environment variable name for the Grok API key
19 | 	 */
20 | 	getRequiredApiKeyName() {
21 | 		return 'GROK_CLI_API_KEY';
22 | 	}
23 | 
24 | 	/**
25 | 	 * Override to indicate that API key is optional since Grok CLI can be configured separately
26 | 	 * @returns {boolean} False since Grok CLI can use its own config
27 | 	 */
28 | 	isRequiredApiKey() {
29 | 		return false; // Grok CLI can use its own config file
30 | 	}
31 | 
32 | 	/**
33 | 	 * Override validateAuth to be more flexible with API key validation
34 | 	 * @param {object} params - Parameters to validate
35 | 	 */
36 | 	validateAuth(params) {
37 | 		// Grok CLI can work with:
38 | 		// 1. API key passed in params
39 | 		// 2. Environment variable GROK_CLI_API_KEY
40 | 		// 3. Grok CLI's own config file (~/.grok/user-settings.json)
41 | 		// So we don't enforce API key requirement here
42 | 		// Suppress unused parameter warning
43 | 		void params;
44 | 	}
45 | 
46 | 	/**
47 | 	 * Creates and returns a Grok CLI client instance.
48 | 	 * @param {object} params - Parameters for client initialization
49 | 	 * @param {string} [params.apiKey] - Grok CLI API key (optional if configured in CLI)
50 | 	 * @param {string} [params.baseURL] - Optional custom API endpoint
51 | 	 * @param {string} [params.workingDirectory] - Working directory for CLI commands
52 | 	 * @param {number} [params.timeout] - Timeout for CLI commands in milliseconds
53 | 	 * @param {string} [params.commandName] - Name of the command invoking the service
54 | 	 * @returns {Function} Grok CLI client function
55 | 	 * @throws {Error} If initialization fails
56 | 	 */
57 | 	getClient(params) {
58 | 		try {
59 | 			const { apiKey, baseURL, workingDirectory, timeout, commandName } =
60 | 				params;
61 | 
62 | 			// Get Grok CLI settings from config
63 | 			const grokCliSettings = getGrokCliSettingsForCommand(commandName);
64 | 
65 | 			return createGrokCli({
66 | 				defaultSettings: {
67 | 					apiKey,
68 | 					baseURL,
69 | 					workingDirectory:
70 | 						workingDirectory || grokCliSettings.workingDirectory,
71 | 					timeout: timeout || grokCliSettings.timeout,
72 | 					defaultModel: grokCliSettings.defaultModel
73 | 				}
74 | 			});
75 | 		} catch (error) {
76 | 			this.handleError('client initialization', error);
77 | 		}
78 | 	}
79 | }
80 | 
```

--------------------------------------------------------------------------------
/tests/unit/profiles/zed-integration.test.js:
--------------------------------------------------------------------------------

```javascript
  1 | import { jest } from '@jest/globals';
  2 | import fs from 'fs';
  3 | import path from 'path';
  4 | import os from 'os';
  5 | 
  6 | // Mock external modules
  7 | jest.mock('child_process', () => ({
  8 | 	execSync: jest.fn()
  9 | }));
 10 | 
 11 | // Mock console methods
 12 | jest.mock('console', () => ({
 13 | 	log: jest.fn(),
 14 | 	info: jest.fn(),
 15 | 	warn: jest.fn(),
 16 | 	error: jest.fn(),
 17 | 	clear: jest.fn()
 18 | }));
 19 | 
 20 | describe('Zed Integration', () => {
 21 | 	let tempDir;
 22 | 
 23 | 	beforeEach(() => {
 24 | 		jest.clearAllMocks();
 25 | 
 26 | 		// Create a temporary directory for testing
 27 | 		tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'task-master-test-'));
 28 | 
 29 | 		// Spy on fs methods
 30 | 		jest.spyOn(fs, 'writeFileSync').mockImplementation(() => {});
 31 | 		jest.spyOn(fs, 'readFileSync').mockImplementation((filePath) => {
 32 | 			if (filePath.toString().includes('settings.json')) {
 33 | 				return JSON.stringify({ context_servers: {} }, null, 2);
 34 | 			}
 35 | 			return '{}';
 36 | 		});
 37 | 		jest.spyOn(fs, 'existsSync').mockImplementation(() => false);
 38 | 		jest.spyOn(fs, 'mkdirSync').mockImplementation(() => {});
 39 | 	});
 40 | 
 41 | 	afterEach(() => {
 42 | 		// Clean up the temporary directory
 43 | 		try {
 44 | 			fs.rmSync(tempDir, { recursive: true, force: true });
 45 | 		} catch (err) {
 46 | 			console.error(`Error cleaning up: ${err.message}`);
 47 | 		}
 48 | 	});
 49 | 
 50 | 	// Test function that simulates the createProjectStructure behavior for Zed files
 51 | 	function mockCreateZedStructure() {
 52 | 		// Create main .zed directory
 53 | 		fs.mkdirSync(path.join(tempDir, '.zed'), { recursive: true });
 54 | 
 55 | 		// Create MCP config file (settings.json)
 56 | 		fs.writeFileSync(
 57 | 			path.join(tempDir, '.zed', 'settings.json'),
 58 | 			JSON.stringify({ context_servers: {} }, null, 2)
 59 | 		);
 60 | 
 61 | 		// Create AGENTS.md in project root
 62 | 		fs.writeFileSync(
 63 | 			path.join(tempDir, 'AGENTS.md'),
 64 | 			'# Task Master Instructions\n\nThis is the Task Master agents file.'
 65 | 		);
 66 | 	}
 67 | 
 68 | 	test('creates all required .zed directories', () => {
 69 | 		// Act
 70 | 		mockCreateZedStructure();
 71 | 
 72 | 		// Assert
 73 | 		expect(fs.mkdirSync).toHaveBeenCalledWith(path.join(tempDir, '.zed'), {
 74 | 			recursive: true
 75 | 		});
 76 | 	});
 77 | 
 78 | 	test('creates Zed settings.json with context_servers format', () => {
 79 | 		// Act
 80 | 		mockCreateZedStructure();
 81 | 
 82 | 		// Assert
 83 | 		expect(fs.writeFileSync).toHaveBeenCalledWith(
 84 | 			path.join(tempDir, '.zed', 'settings.json'),
 85 | 			JSON.stringify({ context_servers: {} }, null, 2)
 86 | 		);
 87 | 	});
 88 | 
 89 | 	test('creates AGENTS.md in project root', () => {
 90 | 		// Act
 91 | 		mockCreateZedStructure();
 92 | 
 93 | 		// Assert
 94 | 		expect(fs.writeFileSync).toHaveBeenCalledWith(
 95 | 			path.join(tempDir, 'AGENTS.md'),
 96 | 			'# Task Master Instructions\n\nThis is the Task Master agents file.'
 97 | 		);
 98 | 	});
 99 | });
100 | 
```

--------------------------------------------------------------------------------
/apps/extension/src/services/sidebar-webview-manager.ts:
--------------------------------------------------------------------------------

```typescript
 1 | import * as vscode from 'vscode';
 2 | import type { TaskMasterApi } from '../utils/task-master-api';
 3 | 
 4 | export class SidebarWebviewManager implements vscode.WebviewViewProvider {
 5 | 	private webviewView?: vscode.WebviewView;
 6 | 	private api?: TaskMasterApi;
 7 | 
 8 | 	constructor(private readonly extensionUri: vscode.Uri) {}
 9 | 
10 | 	setApi(api: TaskMasterApi): void {
11 | 		this.api = api;
12 | 		// Update connection status if webview exists
13 | 		if (this.webviewView) {
14 | 			this.updateConnectionStatus();
15 | 		}
16 | 	}
17 | 
18 | 	resolveWebviewView(
19 | 		webviewView: vscode.WebviewView,
20 | 		context: vscode.WebviewViewResolveContext,
21 | 		token: vscode.CancellationToken
22 | 	): void {
23 | 		this.webviewView = webviewView;
24 | 
25 | 		webviewView.webview.options = {
26 | 			enableScripts: true,
27 | 			localResourceRoots: [
28 | 				vscode.Uri.joinPath(this.extensionUri, 'dist'),
29 | 				vscode.Uri.joinPath(this.extensionUri, 'assets')
30 | 			]
31 | 		};
32 | 
33 | 		webviewView.webview.html = this.getHtmlContent(webviewView.webview);
34 | 
35 | 		// Handle messages from the webview
36 | 		webviewView.webview.onDidReceiveMessage((message) => {
37 | 			if (message.command === 'openBoard') {
38 | 				vscode.commands.executeCommand('tm.showKanbanBoard');
39 | 			}
40 | 		});
41 | 
42 | 		// Update connection status on load
43 | 		this.updateConnectionStatus();
44 | 	}
45 | 
46 | 	updateConnectionStatus(): void {
47 | 		if (!this.webviewView || !this.api) return;
48 | 
49 | 		const status = this.api.getConnectionStatus();
50 | 		this.webviewView.webview.postMessage({
51 | 			type: 'connectionStatus',
52 | 			data: status
53 | 		});
54 | 	}
55 | 
56 | 	private getHtmlContent(webview: vscode.Webview): string {
57 | 		const scriptUri = webview.asWebviewUri(
58 | 			vscode.Uri.joinPath(this.extensionUri, 'dist', 'sidebar.js')
59 | 		);
60 | 		const styleUri = webview.asWebviewUri(
61 | 			vscode.Uri.joinPath(this.extensionUri, 'dist', 'index.css')
62 | 		);
63 | 		const nonce = this.getNonce();
64 | 
65 | 		return `<!DOCTYPE html>
66 | <html lang="en">
67 | <head>
68 |   <meta charset="UTF-8">
69 |   <meta name="viewport" content="width=device-width, initial-scale=1.0">
70 |   <meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src ${webview.cspSource} https:; script-src 'nonce-${nonce}'; style-src ${webview.cspSource} 'unsafe-inline';">
71 |   <link href="${styleUri}" rel="stylesheet">
72 |   <title>TaskMaster</title>
73 | </head>
74 | <body>
75 |   <div id="root"></div>
76 |   <script nonce="${nonce}" src="${scriptUri}"></script>
77 | </body>
78 | </html>`;
79 | 	}
80 | 
81 | 	private getNonce(): string {
82 | 		let text = '';
83 | 		const possible =
84 | 			'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
85 | 		for (let i = 0; i < 32; i++) {
86 | 			text += possible.charAt(Math.floor(Math.random() * possible.length));
87 | 		}
88 | 		return text;
89 | 	}
90 | }
91 | 
```

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

```markdown
  1 | Check if Task Master is installed and install it if needed.
  2 | 
  3 | This command helps you get Task Master set up globally on your system.
  4 | 
  5 | ## Detection and Installation Process
  6 | 
  7 | 1. **Check Current Installation**
  8 |    ```bash
  9 |    # Check if task-master command exists
 10 |    which task-master || echo "Task Master not found"
 11 |    
 12 |    # Check npm global packages
 13 |    npm list -g task-master-ai
 14 |    ```
 15 | 
 16 | 2. **System Requirements Check**
 17 |    ```bash
 18 |    # Verify Node.js is installed
 19 |    node --version
 20 |    
 21 |    # Verify npm is installed  
 22 |    npm --version
 23 |    
 24 |    # Check Node version (need 16+)
 25 |    ```
 26 | 
 27 | 3. **Install Task Master Globally**
 28 |    If not installed, run:
 29 |    ```bash
 30 |    npm install -g task-master-ai
 31 |    ```
 32 | 
 33 | 4. **Verify Installation**
 34 |    ```bash
 35 |    # Check version
 36 |    task-master --version
 37 |    
 38 |    # Verify command is available
 39 |    which task-master
 40 |    ```
 41 | 
 42 | 5. **Initial Setup**
 43 |    ```bash
 44 |    # Initialize in current directory
 45 |    task-master init
 46 |    ```
 47 | 
 48 | 6. **Configure AI Provider**
 49 |    Ensure you have at least one AI provider API key set:
 50 |    ```bash
 51 |    # Check current configuration
 52 |    task-master models --status
 53 |    
 54 |    # If no API keys found, guide setup
 55 |    echo "You'll need at least one API key:"
 56 |    echo "- ANTHROPIC_API_KEY for Claude"
 57 |    echo "- OPENAI_API_KEY for GPT models"
 58 |    echo "- PERPLEXITY_API_KEY for research"
 59 |    echo ""
 60 |    echo "Set them in your shell profile or .env file"
 61 |    ```
 62 | 
 63 | 7. **Quick Test**
 64 |    ```bash
 65 |    # Create a test PRD
 66 |    echo "Build a simple hello world API" > test-prd.txt
 67 |    
 68 |    # Try parsing it
 69 |    task-master parse-prd test-prd.txt -n 3
 70 |    ```
 71 | 
 72 | ## Troubleshooting
 73 | 
 74 | If installation fails:
 75 | 
 76 | **Permission Errors:**
 77 | ```bash
 78 | # Try with sudo (macOS/Linux)
 79 | sudo npm install -g task-master-ai
 80 | 
 81 | # Or fix npm permissions
 82 | npm config set prefix ~/.npm-global
 83 | export PATH=~/.npm-global/bin:$PATH
 84 | ```
 85 | 
 86 | **Network Issues:**
 87 | ```bash
 88 | # Use different registry
 89 | npm install -g task-master-ai --registry https://registry.npmjs.org/
 90 | ```
 91 | 
 92 | **Node Version Issues:**
 93 | ```bash
 94 | # Install Node 18+ via nvm
 95 | curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
 96 | nvm install 18
 97 | nvm use 18
 98 | ```
 99 | 
100 | ## Success Confirmation
101 | 
102 | Once installed, you should see:
103 | ```
104 | ✅ Task Master v0.16.2 (or higher) installed
105 | ✅ Command 'task-master' available globally
106 | ✅ AI provider configured
107 | ✅ Ready to use slash commands!
108 | 
109 | Try: /project:task-master:init your-prd.md
110 | ```
111 | 
112 | ## Next Steps
113 | 
114 | After installation:
115 | 1. Run `/project:utils:check-health` to verify setup
116 | 2. Configure AI providers with `/project:task-master:models`
117 | 3. Start using Task Master commands!
```

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

```markdown
  1 | Check if Task Master is installed and install it if needed.
  2 | 
  3 | This command helps you get Task Master set up globally on your system.
  4 | 
  5 | ## Detection and Installation Process
  6 | 
  7 | 1. **Check Current Installation**
  8 |    ```bash
  9 |    # Check if task-master command exists
 10 |    which task-master || echo "Task Master not found"
 11 |    
 12 |    # Check npm global packages
 13 |    npm list -g task-master-ai
 14 |    ```
 15 | 
 16 | 2. **System Requirements Check**
 17 |    ```bash
 18 |    # Verify Node.js is installed
 19 |    node --version
 20 |    
 21 |    # Verify npm is installed  
 22 |    npm --version
 23 |    
 24 |    # Check Node version (need 16+)
 25 |    ```
 26 | 
 27 | 3. **Install Task Master Globally**
 28 |    If not installed, run:
 29 |    ```bash
 30 |    npm install -g task-master-ai
 31 |    ```
 32 | 
 33 | 4. **Verify Installation**
 34 |    ```bash
 35 |    # Check version
 36 |    task-master --version
 37 |    
 38 |    # Verify command is available
 39 |    which task-master
 40 |    ```
 41 | 
 42 | 5. **Initial Setup**
 43 |    ```bash
 44 |    # Initialize in current directory
 45 |    task-master init
 46 |    ```
 47 | 
 48 | 6. **Configure AI Provider**
 49 |    Ensure you have at least one AI provider API key set:
 50 |    ```bash
 51 |    # Check current configuration
 52 |    task-master models --status
 53 |    
 54 |    # If no API keys found, guide setup
 55 |    echo "You'll need at least one API key:"
 56 |    echo "- ANTHROPIC_API_KEY for Claude"
 57 |    echo "- OPENAI_API_KEY for GPT models"
 58 |    echo "- PERPLEXITY_API_KEY for research"
 59 |    echo ""
 60 |    echo "Set them in your shell profile or .env file"
 61 |    ```
 62 | 
 63 | 7. **Quick Test**
 64 |    ```bash
 65 |    # Create a test PRD
 66 |    echo "Build a simple hello world API" > test-prd.txt
 67 |    
 68 |    # Try parsing it
 69 |    task-master parse-prd test-prd.txt -n 3
 70 |    ```
 71 | 
 72 | ## Troubleshooting
 73 | 
 74 | If installation fails:
 75 | 
 76 | **Permission Errors:**
 77 | ```bash
 78 | # Try with sudo (macOS/Linux)
 79 | sudo npm install -g task-master-ai
 80 | 
 81 | # Or fix npm permissions
 82 | npm config set prefix ~/.npm-global
 83 | export PATH=~/.npm-global/bin:$PATH
 84 | ```
 85 | 
 86 | **Network Issues:**
 87 | ```bash
 88 | # Use different registry
 89 | npm install -g task-master-ai --registry https://registry.npmjs.org/
 90 | ```
 91 | 
 92 | **Node Version Issues:**
 93 | ```bash
 94 | # Install Node 18+ via nvm
 95 | curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
 96 | nvm install 18
 97 | nvm use 18
 98 | ```
 99 | 
100 | ## Success Confirmation
101 | 
102 | Once installed, you should see:
103 | ```
104 | ✅ Task Master v0.16.2 (or higher) installed
105 | ✅ Command 'task-master' available globally
106 | ✅ AI provider configured
107 | ✅ Ready to use slash commands!
108 | 
109 | Try: /project:task-master:init your-prd.md
110 | ```
111 | 
112 | ## Next Steps
113 | 
114 | After installation:
115 | 1. Run `/project:utils:check-health` to verify setup
116 | 2. Configure AI providers with `/project:task-master:models`
117 | 3. Start using Task Master commands!
```

--------------------------------------------------------------------------------
/apps/extension/src/utils/task-master-api/mcp-client.ts:
--------------------------------------------------------------------------------

```typescript
 1 | /**
 2 |  * MCP Client Wrapper
 3 |  * Handles MCP tool calls with retry logic
 4 |  */
 5 | 
 6 | import type { ExtensionLogger } from '../logger';
 7 | import type { MCPClientManager } from '../mcpClient';
 8 | 
 9 | export class MCPClient {
10 | 	constructor(
11 | 		private mcpClient: MCPClientManager,
12 | 		private logger: ExtensionLogger,
13 | 		private config: { timeout: number; retryAttempts: number }
14 | 	) {}
15 | 
16 | 	/**
17 | 	 * Call MCP tool with retry logic
18 | 	 */
19 | 	async callTool(
20 | 		toolName: string,
21 | 		args: Record<string, unknown>
22 | 	): Promise<any> {
23 | 		let lastError: Error | null = null;
24 | 
25 | 		for (let attempt = 1; attempt <= this.config.retryAttempts; attempt++) {
26 | 			try {
27 | 				const rawResponse = await this.mcpClient.callTool(toolName, args);
28 | 				this.logger.debug(
29 | 					`Raw MCP response for ${toolName}:`,
30 | 					JSON.stringify(rawResponse, null, 2)
31 | 				);
32 | 
33 | 				// Parse MCP response format
34 | 				if (
35 | 					rawResponse &&
36 | 					rawResponse.content &&
37 | 					Array.isArray(rawResponse.content) &&
38 | 					rawResponse.content[0]
39 | 				) {
40 | 					const contentItem = rawResponse.content[0];
41 | 					if (contentItem.type === 'text' && contentItem.text) {
42 | 						try {
43 | 							const parsedData = JSON.parse(contentItem.text);
44 | 							this.logger.debug(`Parsed MCP data for ${toolName}:`, parsedData);
45 | 							return parsedData;
46 | 						} catch (parseError) {
47 | 							this.logger.error(
48 | 								`Failed to parse MCP response text for ${toolName}:`,
49 | 								parseError
50 | 							);
51 | 							this.logger.error(`Raw text was:`, contentItem.text);
52 | 							return rawResponse; // Fall back to original response
53 | 						}
54 | 					}
55 | 				}
56 | 
57 | 				// If not in expected format, return as-is
58 | 				this.logger.warn(
59 | 					`Unexpected MCP response format for ${toolName}, returning raw response`
60 | 				);
61 | 				return rawResponse;
62 | 			} catch (error) {
63 | 				lastError = error instanceof Error ? error : new Error('Unknown error');
64 | 				this.logger.warn(
65 | 					`Attempt ${attempt}/${this.config.retryAttempts} failed for ${toolName}:`,
66 | 					lastError.message
67 | 				);
68 | 
69 | 				if (attempt < this.config.retryAttempts) {
70 | 					// Exponential backoff
71 | 					const delay = Math.min(1000 * 2 ** (attempt - 1), 5000);
72 | 					await new Promise((resolve) => setTimeout(resolve, delay));
73 | 				}
74 | 			}
75 | 		}
76 | 
77 | 		throw (
78 | 			lastError ||
79 | 			new Error(
80 | 				`Failed to call ${toolName} after ${this.config.retryAttempts} attempts`
81 | 			)
82 | 		);
83 | 	}
84 | 
85 | 	/**
86 | 	 * Get connection status
87 | 	 */
88 | 	getStatus(): { isRunning: boolean; error?: string } {
89 | 		return this.mcpClient.getStatus();
90 | 	}
91 | 
92 | 	/**
93 | 	 * Test connection
94 | 	 */
95 | 	async testConnection(): Promise<boolean> {
96 | 		return this.mcpClient.testConnection();
97 | 	}
98 | }
99 | 
```

--------------------------------------------------------------------------------
/mcp-server/src/tools/add-tag.js:
--------------------------------------------------------------------------------

```javascript
  1 | /**
  2 |  * tools/add-tag.js
  3 |  * Tool to create a new tag
  4 |  */
  5 | 
  6 | import { z } from 'zod';
  7 | import {
  8 | 	createErrorResponse,
  9 | 	handleApiResult,
 10 | 	withNormalizedProjectRoot
 11 | } from './utils.js';
 12 | import { addTagDirect } from '../core/task-master-core.js';
 13 | import { findTasksPath } from '../core/utils/path-utils.js';
 14 | 
 15 | /**
 16 |  * Register the addTag tool with the MCP server
 17 |  * @param {Object} server - FastMCP server instance
 18 |  */
 19 | export function registerAddTagTool(server) {
 20 | 	server.addTool({
 21 | 		name: 'add_tag',
 22 | 		description: 'Create a new tag for organizing tasks in different contexts',
 23 | 		parameters: z.object({
 24 | 			name: z.string().describe('Name of the new tag to create'),
 25 | 			copyFromCurrent: z
 26 | 				.boolean()
 27 | 				.optional()
 28 | 				.describe(
 29 | 					'Whether to copy tasks from the current tag (default: false)'
 30 | 				),
 31 | 			copyFromTag: z
 32 | 				.string()
 33 | 				.optional()
 34 | 				.describe('Specific tag to copy tasks from'),
 35 | 			fromBranch: z
 36 | 				.boolean()
 37 | 				.optional()
 38 | 				.describe(
 39 | 					'Create tag name from current git branch (ignores name parameter)'
 40 | 				),
 41 | 			description: z
 42 | 				.string()
 43 | 				.optional()
 44 | 				.describe('Optional description for the tag'),
 45 | 			file: z
 46 | 				.string()
 47 | 				.optional()
 48 | 				.describe('Path to the tasks file (default: tasks/tasks.json)'),
 49 | 			projectRoot: z
 50 | 				.string()
 51 | 				.describe('The directory of the project. Must be an absolute path.')
 52 | 		}),
 53 | 		execute: withNormalizedProjectRoot(async (args, { log, session }) => {
 54 | 			try {
 55 | 				log.info(`Starting add-tag with args: ${JSON.stringify(args)}`);
 56 | 
 57 | 				// Use args.projectRoot directly (guaranteed by withNormalizedProjectRoot)
 58 | 				let tasksJsonPath;
 59 | 				try {
 60 | 					tasksJsonPath = findTasksPath(
 61 | 						{ projectRoot: args.projectRoot, file: args.file },
 62 | 						log
 63 | 					);
 64 | 				} catch (error) {
 65 | 					log.error(`Error finding tasks.json: ${error.message}`);
 66 | 					return createErrorResponse(
 67 | 						`Failed to find tasks.json: ${error.message}`
 68 | 					);
 69 | 				}
 70 | 
 71 | 				// Call the direct function
 72 | 				const result = await addTagDirect(
 73 | 					{
 74 | 						tasksJsonPath: tasksJsonPath,
 75 | 						name: args.name,
 76 | 						copyFromCurrent: args.copyFromCurrent,
 77 | 						copyFromTag: args.copyFromTag,
 78 | 						fromBranch: args.fromBranch,
 79 | 						description: args.description,
 80 | 						projectRoot: args.projectRoot
 81 | 					},
 82 | 					log,
 83 | 					{ session }
 84 | 				);
 85 | 
 86 | 				return handleApiResult(
 87 | 					result,
 88 | 					log,
 89 | 					'Error creating tag',
 90 | 					undefined,
 91 | 					args.projectRoot
 92 | 				);
 93 | 			} catch (error) {
 94 | 				log.error(`Error in add-tag tool: ${error.message}`);
 95 | 				return createErrorResponse(error.message);
 96 | 			}
 97 | 		})
 98 | 	});
 99 | }
100 | 
```

--------------------------------------------------------------------------------
/mcp-server/src/tools/remove-dependency.js:
--------------------------------------------------------------------------------

```javascript
 1 | /**
 2 |  * tools/remove-dependency.js
 3 |  * Tool for removing a dependency from a task
 4 |  */
 5 | 
 6 | import { z } from 'zod';
 7 | import {
 8 | 	handleApiResult,
 9 | 	createErrorResponse,
10 | 	withNormalizedProjectRoot
11 | } from './utils.js';
12 | import { removeDependencyDirect } from '../core/task-master-core.js';
13 | import { findTasksPath } from '../core/utils/path-utils.js';
14 | import { resolveTag } from '../../../scripts/modules/utils.js';
15 | 
16 | /**
17 |  * Register the removeDependency tool with the MCP server
18 |  * @param {Object} server - FastMCP server instance
19 |  */
20 | export function registerRemoveDependencyTool(server) {
21 | 	server.addTool({
22 | 		name: 'remove_dependency',
23 | 		description: 'Remove a dependency from a task',
24 | 		parameters: z.object({
25 | 			id: z.string().describe('Task ID to remove dependency from'),
26 | 			dependsOn: z.string().describe('Task ID to remove as a dependency'),
27 | 			file: z
28 | 				.string()
29 | 				.optional()
30 | 				.describe(
31 | 					'Absolute path to the tasks file (default: tasks/tasks.json)'
32 | 				),
33 | 			projectRoot: z
34 | 				.string()
35 | 				.describe('The directory of the project. Must be an absolute path.'),
36 | 			tag: z.string().optional().describe('Tag context to operate on')
37 | 		}),
38 | 		execute: withNormalizedProjectRoot(async (args, { log, session }) => {
39 | 			try {
40 | 				const resolvedTag = resolveTag({
41 | 					projectRoot: args.projectRoot,
42 | 					tag: args.tag
43 | 				});
44 | 				log.info(
45 | 					`Removing dependency for task ${args.id} from ${args.dependsOn} with args: ${JSON.stringify(args)}`
46 | 				);
47 | 
48 | 				// Use args.projectRoot directly (guaranteed by withNormalizedProjectRoot)
49 | 				let tasksJsonPath;
50 | 				try {
51 | 					tasksJsonPath = findTasksPath(
52 | 						{ projectRoot: args.projectRoot, file: args.file },
53 | 						log
54 | 					);
55 | 				} catch (error) {
56 | 					log.error(`Error finding tasks.json: ${error.message}`);
57 | 					return createErrorResponse(
58 | 						`Failed to find tasks.json: ${error.message}`
59 | 					);
60 | 				}
61 | 
62 | 				const result = await removeDependencyDirect(
63 | 					{
64 | 						tasksJsonPath: tasksJsonPath,
65 | 						id: args.id,
66 | 						dependsOn: args.dependsOn,
67 | 						projectRoot: args.projectRoot,
68 | 						tag: resolvedTag
69 | 					},
70 | 					log
71 | 				);
72 | 
73 | 				if (result.success) {
74 | 					log.info(`Successfully removed dependency: ${result.data.message}`);
75 | 				} else {
76 | 					log.error(`Failed to remove dependency: ${result.error.message}`);
77 | 				}
78 | 
79 | 				return handleApiResult(
80 | 					result,
81 | 					log,
82 | 					'Error removing dependency',
83 | 					undefined,
84 | 					args.projectRoot
85 | 				);
86 | 			} catch (error) {
87 | 				log.error(`Error in removeDependency tool: ${error.message}`);
88 | 				return createErrorResponse(error.message);
89 | 			}
90 | 		})
91 | 	});
92 | }
93 | 
```

--------------------------------------------------------------------------------
/.claude/commands/tm/help.md:
--------------------------------------------------------------------------------

```markdown
 1 | Show help for Task Master commands.
 2 | 
 3 | Arguments: $ARGUMENTS
 4 | 
 5 | Display help for Task Master commands. If arguments provided, show specific command help.
 6 | 
 7 | ## Task Master Command Help
 8 | 
 9 | ### Quick Navigation
10 | 
11 | Type `/project:tm/` and use tab completion to explore all commands.
12 | 
13 | ### Command Categories
14 | 
15 | #### 🚀 Setup & Installation
16 | - `/project:tm/setup/install` - Comprehensive installation guide
17 | - `/project:tm/setup/quick-install` - One-line global install
18 | 
19 | #### 📋 Project Setup
20 | - `/project:tm/init` - Initialize new project
21 | - `/project:tm/init/quick` - Quick setup with auto-confirm
22 | - `/project:tm/models` - View AI configuration
23 | - `/project:tm/models/setup` - Configure AI providers
24 | 
25 | #### 🎯 Task Generation
26 | - `/project:tm/parse-prd` - Generate tasks from PRD
27 | - `/project:tm/parse-prd/with-research` - Enhanced parsing
28 | - `/project:tm/generate` - Create task files
29 | 
30 | #### 📝 Task Management
31 | - `/project:tm/list` - List tasks (natural language filters)
32 | - `/project:tm/show <id>` - Display task details
33 | - `/project:tm/add-task` - Create new task
34 | - `/project:tm/update` - Update tasks naturally
35 | - `/project:tm/next` - Get next task recommendation
36 | 
37 | #### 🔄 Status Management
38 | - `/project:tm/set-status/to-pending <id>`
39 | - `/project:tm/set-status/to-in-progress <id>`
40 | - `/project:tm/set-status/to-done <id>`
41 | - `/project:tm/set-status/to-review <id>`
42 | - `/project:tm/set-status/to-deferred <id>`
43 | - `/project:tm/set-status/to-cancelled <id>`
44 | 
45 | #### 🔍 Analysis & Breakdown
46 | - `/project:tm/analyze-complexity` - Analyze task complexity
47 | - `/project:tm/expand <id>` - Break down complex task
48 | - `/project:tm/expand/all` - Expand all eligible tasks
49 | 
50 | #### 🔗 Dependencies
51 | - `/project:tm/add-dependency` - Add task dependency
52 | - `/project:tm/remove-dependency` - Remove dependency
53 | - `/project:tm/validate-dependencies` - Check for issues
54 | 
55 | #### 🤖 Workflows
56 | - `/project:tm/workflows/smart-flow` - Intelligent workflows
57 | - `/project:tm/workflows/pipeline` - Command chaining
58 | - `/project:tm/workflows/auto-implement` - Auto-implementation
59 | 
60 | #### 📊 Utilities
61 | - `/project:tm/utils/analyze` - Project analysis
62 | - `/project:tm/status` - Project dashboard
63 | - `/project:tm/learn` - Interactive learning
64 | 
65 | ### Natural Language Examples
66 | 
67 | ```
68 | /project:tm/list pending high priority
69 | /project:tm/update mark all API tasks as done
70 | /project:tm/add-task create login system with OAuth
71 | /project:tm/show current
72 | ```
73 | 
74 | ### Getting Started
75 | 
76 | 1. Install: `/project:tm/setup/quick-install`
77 | 2. Initialize: `/project:tm/init/quick`
78 | 3. Learn: `/project:tm/learn start`
79 | 4. Work: `/project:tm/workflows/smart-flow`
80 | 
81 | For detailed command info: `/project:tm/help <command-name>`
```

--------------------------------------------------------------------------------
/assets/claude/commands/tm/help.md:
--------------------------------------------------------------------------------

```markdown
 1 | Show help for Task Master commands.
 2 | 
 3 | Arguments: $ARGUMENTS
 4 | 
 5 | Display help for Task Master commands. If arguments provided, show specific command help.
 6 | 
 7 | ## Task Master Command Help
 8 | 
 9 | ### Quick Navigation
10 | 
11 | Type `/project:tm/` and use tab completion to explore all commands.
12 | 
13 | ### Command Categories
14 | 
15 | #### 🚀 Setup & Installation
16 | - `/project:tm/setup/install` - Comprehensive installation guide
17 | - `/project:tm/setup/quick-install` - One-line global install
18 | 
19 | #### 📋 Project Setup
20 | - `/project:tm/init` - Initialize new project
21 | - `/project:tm/init/quick` - Quick setup with auto-confirm
22 | - `/project:tm/models` - View AI configuration
23 | - `/project:tm/models/setup` - Configure AI providers
24 | 
25 | #### 🎯 Task Generation
26 | - `/project:tm/parse-prd` - Generate tasks from PRD
27 | - `/project:tm/parse-prd/with-research` - Enhanced parsing
28 | - `/project:tm/generate` - Create task files
29 | 
30 | #### 📝 Task Management
31 | - `/project:tm/list` - List tasks (natural language filters)
32 | - `/project:tm/show <id>` - Display task details
33 | - `/project:tm/add-task` - Create new task
34 | - `/project:tm/update` - Update tasks naturally
35 | - `/project:tm/next` - Get next task recommendation
36 | 
37 | #### 🔄 Status Management
38 | - `/project:tm/set-status/to-pending <id>`
39 | - `/project:tm/set-status/to-in-progress <id>`
40 | - `/project:tm/set-status/to-done <id>`
41 | - `/project:tm/set-status/to-review <id>`
42 | - `/project:tm/set-status/to-deferred <id>`
43 | - `/project:tm/set-status/to-cancelled <id>`
44 | 
45 | #### 🔍 Analysis & Breakdown
46 | - `/project:tm/analyze-complexity` - Analyze task complexity
47 | - `/project:tm/expand <id>` - Break down complex task
48 | - `/project:tm/expand/all` - Expand all eligible tasks
49 | 
50 | #### 🔗 Dependencies
51 | - `/project:tm/add-dependency` - Add task dependency
52 | - `/project:tm/remove-dependency` - Remove dependency
53 | - `/project:tm/validate-dependencies` - Check for issues
54 | 
55 | #### 🤖 Workflows
56 | - `/project:tm/workflows/smart-flow` - Intelligent workflows
57 | - `/project:tm/workflows/pipeline` - Command chaining
58 | - `/project:tm/workflows/auto-implement` - Auto-implementation
59 | 
60 | #### 📊 Utilities
61 | - `/project:tm/utils/analyze` - Project analysis
62 | - `/project:tm/status` - Project dashboard
63 | - `/project:tm/learn` - Interactive learning
64 | 
65 | ### Natural Language Examples
66 | 
67 | ```
68 | /project:tm/list pending high priority
69 | /project:tm/update mark all API tasks as done
70 | /project:tm/add-task create login system with OAuth
71 | /project:tm/show current
72 | ```
73 | 
74 | ### Getting Started
75 | 
76 | 1. Install: `/project:tm/setup/quick-install`
77 | 2. Initialize: `/project:tm/init/quick`
78 | 3. Learn: `/project:tm/learn start`
79 | 4. Work: `/project:tm/workflows/smart-flow`
80 | 
81 | For detailed command info: `/project:tm/help <command-name>`
```

--------------------------------------------------------------------------------
/tests/integration/profiles/claude-init-functionality.test.js:
--------------------------------------------------------------------------------

```javascript
 1 | import fs from 'fs';
 2 | import path from 'path';
 3 | import { claudeProfile } from '../../../src/profiles/claude.js';
 4 | 
 5 | describe('Claude Profile Initialization Functionality', () => {
 6 | 	let claudeProfileContent;
 7 | 
 8 | 	beforeAll(() => {
 9 | 		const claudeJsPath = path.join(
10 | 			process.cwd(),
11 | 			'src',
12 | 			'profiles',
13 | 			'claude.js'
14 | 		);
15 | 		claudeProfileContent = fs.readFileSync(claudeJsPath, 'utf8');
16 | 	});
17 | 
18 | 	test('claude.js has correct asset-only profile configuration', () => {
19 | 		// Check for explicit, non-default values in the source file
20 | 		expect(claudeProfileContent).toContain("name: 'claude'");
21 | 		expect(claudeProfileContent).toContain("displayName: 'Claude Code'");
22 | 		expect(claudeProfileContent).toContain("profileDir: '.'"); // non-default
23 | 		expect(claudeProfileContent).toContain("rulesDir: '.'"); // non-default
24 | 		expect(claudeProfileContent).toContain("mcpConfigName: '.mcp.json'"); // non-default
25 | 		expect(claudeProfileContent).toContain('includeDefaultRules: false'); // non-default
26 | 		expect(claudeProfileContent).toContain(
27 | 			"'AGENTS.md': '.taskmaster/CLAUDE.md'"
28 | 		);
29 | 
30 | 		// Check the final computed properties on the profile object
31 | 		expect(claudeProfile.profileName).toBe('claude');
32 | 		expect(claudeProfile.displayName).toBe('Claude Code');
33 | 		expect(claudeProfile.profileDir).toBe('.');
34 | 		expect(claudeProfile.rulesDir).toBe('.');
35 | 		expect(claudeProfile.mcpConfig).toBe(true); // default from base profile
36 | 		expect(claudeProfile.mcpConfigName).toBe('.mcp.json'); // explicitly set
37 | 		expect(claudeProfile.mcpConfigPath).toBe('.mcp.json'); // computed
38 | 		expect(claudeProfile.includeDefaultRules).toBe(false);
39 | 		expect(claudeProfile.fileMap['AGENTS.md']).toBe('.taskmaster/CLAUDE.md');
40 | 	});
41 | 
42 | 	test('claude.js has lifecycle functions for file management', () => {
43 | 		expect(claudeProfileContent).toContain('function onAddRulesProfile');
44 | 		expect(claudeProfileContent).toContain('function onRemoveRulesProfile');
45 | 		expect(claudeProfileContent).toContain(
46 | 			'function onPostConvertRulesProfile'
47 | 		);
48 | 	});
49 | 
50 | 	test('claude.js handles .claude directory and .taskmaster/CLAUDE.md import in lifecycle functions', () => {
51 | 		expect(claudeProfileContent).toContain('.claude');
52 | 		expect(claudeProfileContent).toContain('copyRecursiveSync');
53 | 		expect(claudeProfileContent).toContain('.taskmaster/CLAUDE.md');
54 | 		expect(claudeProfileContent).toContain('@./.taskmaster/CLAUDE.md');
55 | 	});
56 | 
57 | 	test('claude.js has proper error handling in lifecycle functions', () => {
58 | 		expect(claudeProfileContent).toContain('try {');
59 | 		expect(claudeProfileContent).toContain('} catch (err) {');
60 | 		expect(claudeProfileContent).toContain("log('error'");
61 | 	});
62 | });
63 | 
```

--------------------------------------------------------------------------------
/mcp-server/src/tools/generate.js:
--------------------------------------------------------------------------------

```javascript
 1 | /**
 2 |  * tools/generate.js
 3 |  * Tool to generate individual task files from tasks.json
 4 |  */
 5 | 
 6 | import { z } from 'zod';
 7 | import {
 8 | 	handleApiResult,
 9 | 	createErrorResponse,
10 | 	withNormalizedProjectRoot
11 | } from './utils.js';
12 | import { generateTaskFilesDirect } from '../core/task-master-core.js';
13 | import { findTasksPath } from '../core/utils/path-utils.js';
14 | import { resolveTag } from '../../../scripts/modules/utils.js';
15 | import path from 'path';
16 | 
17 | /**
18 |  * Register the generate tool with the MCP server
19 |  * @param {Object} server - FastMCP server instance
20 |  */
21 | export function registerGenerateTool(server) {
22 | 	server.addTool({
23 | 		name: 'generate',
24 | 		description:
25 | 			'Generates individual task files in tasks/ directory based on tasks.json',
26 | 		parameters: z.object({
27 | 			file: z.string().optional().describe('Absolute path to the tasks file'),
28 | 			output: z
29 | 				.string()
30 | 				.optional()
31 | 				.describe('Output directory (default: same directory as tasks file)'),
32 | 			projectRoot: z
33 | 				.string()
34 | 				.describe('The directory of the project. Must be an absolute path.'),
35 | 			tag: z.string().optional().describe('Tag context to operate on')
36 | 		}),
37 | 		execute: withNormalizedProjectRoot(async (args, { log, session }) => {
38 | 			try {
39 | 				log.info(`Generating task files with args: ${JSON.stringify(args)}`);
40 | 
41 | 				const resolvedTag = resolveTag({
42 | 					projectRoot: args.projectRoot,
43 | 					tag: args.tag
44 | 				});
45 | 				// Use args.projectRoot directly (guaranteed by withNormalizedProjectRoot)
46 | 				let tasksJsonPath;
47 | 				try {
48 | 					tasksJsonPath = findTasksPath(
49 | 						{ projectRoot: args.projectRoot, file: args.file },
50 | 						log
51 | 					);
52 | 				} catch (error) {
53 | 					log.error(`Error finding tasks.json: ${error.message}`);
54 | 					return createErrorResponse(
55 | 						`Failed to find tasks.json: ${error.message}`
56 | 					);
57 | 				}
58 | 
59 | 				const outputDir = args.output
60 | 					? path.resolve(args.projectRoot, args.output)
61 | 					: path.dirname(tasksJsonPath);
62 | 
63 | 				const result = await generateTaskFilesDirect(
64 | 					{
65 | 						tasksJsonPath: tasksJsonPath,
66 | 						outputDir: outputDir,
67 | 						projectRoot: args.projectRoot,
68 | 						tag: resolvedTag
69 | 					},
70 | 					log,
71 | 					{ session }
72 | 				);
73 | 
74 | 				if (result.success) {
75 | 					log.info(`Successfully generated task files: ${result.data.message}`);
76 | 				} else {
77 | 					log.error(
78 | 						`Failed to generate task files: ${result.error?.message || 'Unknown error'}`
79 | 					);
80 | 				}
81 | 
82 | 				return handleApiResult(
83 | 					result,
84 | 					log,
85 | 					'Error generating task files',
86 | 					undefined,
87 | 					args.projectRoot
88 | 				);
89 | 			} catch (error) {
90 | 				log.error(`Error in generate tool: ${error.message}`);
91 | 				return createErrorResponse(error.message);
92 | 			}
93 | 		})
94 | 	});
95 | }
96 | 
```

--------------------------------------------------------------------------------
/.claude/commands/tm/learn.md:
--------------------------------------------------------------------------------

```markdown
  1 | Learn about Task Master capabilities through interactive exploration.
  2 | 
  3 | Arguments: $ARGUMENTS
  4 | 
  5 | ## Interactive Task Master Learning
  6 | 
  7 | Based on your input, I'll help you discover capabilities:
  8 | 
  9 | ### 1. **What are you trying to do?**
 10 | 
 11 | If $ARGUMENTS contains:
 12 | - "start" / "begin" → Show project initialization workflows
 13 | - "manage" / "organize" → Show task management commands  
 14 | - "automate" / "auto" → Show automation workflows
 15 | - "analyze" / "report" → Show analysis tools
 16 | - "fix" / "problem" → Show troubleshooting commands
 17 | - "fast" / "quick" → Show efficiency shortcuts
 18 | 
 19 | ### 2. **Intelligent Suggestions**
 20 | 
 21 | Based on your project state:
 22 | 
 23 | **No tasks yet?**
 24 | ```
 25 | You'll want to start with:
 26 | 1. /project:task-master:init <prd-file>
 27 |    → Creates tasks from requirements
 28 |    
 29 | 2. /project:task-master:parse-prd <file>
 30 |    → Alternative task generation
 31 | 
 32 | Try: /project:task-master:init demo-prd.md
 33 | ```
 34 | 
 35 | **Have tasks?**
 36 | Let me analyze what you might need...
 37 | - Many pending tasks? → Learn sprint planning
 38 | - Complex tasks? → Learn task expansion
 39 | - Daily work? → Learn workflow automation
 40 | 
 41 | ### 3. **Command Discovery**
 42 | 
 43 | **By Category:**
 44 | - 📋 Task Management: list, show, add, update, complete
 45 | - 🔄 Workflows: auto-implement, sprint-plan, daily-standup
 46 | - 🛠️ Utilities: check-health, complexity-report, sync-memory
 47 | - 🔍 Analysis: validate-deps, show dependencies
 48 | 
 49 | **By Scenario:**
 50 | - "I want to see what to work on" → `/project:task-master:next`
 51 | - "I need to break this down" → `/project:task-master:expand <id>`
 52 | - "Show me everything" → `/project:task-master:status`
 53 | - "Just do it for me" → `/project:workflows:auto-implement`
 54 | 
 55 | ### 4. **Power User Patterns**
 56 | 
 57 | **Command Chaining:**
 58 | ```
 59 | /project:task-master:next
 60 | /project:task-master:start <id>
 61 | /project:workflows:auto-implement
 62 | ```
 63 | 
 64 | **Smart Filters:**
 65 | ```
 66 | /project:task-master:list pending high
 67 | /project:task-master:list blocked
 68 | /project:task-master:list 1-5 tree
 69 | ```
 70 | 
 71 | **Automation:**
 72 | ```
 73 | /project:workflows:pipeline init → expand-all → sprint-plan
 74 | ```
 75 | 
 76 | ### 5. **Learning Path**
 77 | 
 78 | Based on your experience level:
 79 | 
 80 | **Beginner Path:**
 81 | 1. init → Create project
 82 | 2. status → Understand state
 83 | 3. next → Find work
 84 | 4. complete → Finish task
 85 | 
 86 | **Intermediate Path:**
 87 | 1. expand → Break down complex tasks
 88 | 2. sprint-plan → Organize work
 89 | 3. complexity-report → Understand difficulty
 90 | 4. validate-deps → Ensure consistency
 91 | 
 92 | **Advanced Path:**
 93 | 1. pipeline → Chain operations
 94 | 2. smart-flow → Context-aware automation
 95 | 3. Custom commands → Extend the system
 96 | 
 97 | ### 6. **Try This Now**
 98 | 
 99 | Based on what you asked about, try:
100 | [Specific command suggestion based on $ARGUMENTS]
101 | 
102 | Want to learn more about a specific command?
103 | Type: /project:help <command-name>
```

--------------------------------------------------------------------------------
/assets/claude/commands/tm/learn.md:
--------------------------------------------------------------------------------

```markdown
  1 | Learn about Task Master capabilities through interactive exploration.
  2 | 
  3 | Arguments: $ARGUMENTS
  4 | 
  5 | ## Interactive Task Master Learning
  6 | 
  7 | Based on your input, I'll help you discover capabilities:
  8 | 
  9 | ### 1. **What are you trying to do?**
 10 | 
 11 | If $ARGUMENTS contains:
 12 | - "start" / "begin" → Show project initialization workflows
 13 | - "manage" / "organize" → Show task management commands  
 14 | - "automate" / "auto" → Show automation workflows
 15 | - "analyze" / "report" → Show analysis tools
 16 | - "fix" / "problem" → Show troubleshooting commands
 17 | - "fast" / "quick" → Show efficiency shortcuts
 18 | 
 19 | ### 2. **Intelligent Suggestions**
 20 | 
 21 | Based on your project state:
 22 | 
 23 | **No tasks yet?**
 24 | ```
 25 | You'll want to start with:
 26 | 1. /project:task-master:init <prd-file>
 27 |    → Creates tasks from requirements
 28 |    
 29 | 2. /project:task-master:parse-prd <file>
 30 |    → Alternative task generation
 31 | 
 32 | Try: /project:task-master:init demo-prd.md
 33 | ```
 34 | 
 35 | **Have tasks?**
 36 | Let me analyze what you might need...
 37 | - Many pending tasks? → Learn sprint planning
 38 | - Complex tasks? → Learn task expansion
 39 | - Daily work? → Learn workflow automation
 40 | 
 41 | ### 3. **Command Discovery**
 42 | 
 43 | **By Category:**
 44 | - 📋 Task Management: list, show, add, update, complete
 45 | - 🔄 Workflows: auto-implement, sprint-plan, daily-standup
 46 | - 🛠️ Utilities: check-health, complexity-report, sync-memory
 47 | - 🔍 Analysis: validate-deps, show dependencies
 48 | 
 49 | **By Scenario:**
 50 | - "I want to see what to work on" → `/project:task-master:next`
 51 | - "I need to break this down" → `/project:task-master:expand <id>`
 52 | - "Show me everything" → `/project:task-master:status`
 53 | - "Just do it for me" → `/project:workflows:auto-implement`
 54 | 
 55 | ### 4. **Power User Patterns**
 56 | 
 57 | **Command Chaining:**
 58 | ```
 59 | /project:task-master:next
 60 | /project:task-master:start <id>
 61 | /project:workflows:auto-implement
 62 | ```
 63 | 
 64 | **Smart Filters:**
 65 | ```
 66 | /project:task-master:list pending high
 67 | /project:task-master:list blocked
 68 | /project:task-master:list 1-5 tree
 69 | ```
 70 | 
 71 | **Automation:**
 72 | ```
 73 | /project:workflows:pipeline init → expand-all → sprint-plan
 74 | ```
 75 | 
 76 | ### 5. **Learning Path**
 77 | 
 78 | Based on your experience level:
 79 | 
 80 | **Beginner Path:**
 81 | 1. init → Create project
 82 | 2. status → Understand state
 83 | 3. next → Find work
 84 | 4. complete → Finish task
 85 | 
 86 | **Intermediate Path:**
 87 | 1. expand → Break down complex tasks
 88 | 2. sprint-plan → Organize work
 89 | 3. complexity-report → Understand difficulty
 90 | 4. validate-deps → Ensure consistency
 91 | 
 92 | **Advanced Path:**
 93 | 1. pipeline → Chain operations
 94 | 2. smart-flow → Context-aware automation
 95 | 3. Custom commands → Extend the system
 96 | 
 97 | ### 6. **Try This Now**
 98 | 
 99 | Based on what you asked about, try:
100 | [Specific command suggestion based on $ARGUMENTS]
101 | 
102 | Want to learn more about a specific command?
103 | Type: /project:help <command-name>
```

--------------------------------------------------------------------------------
/test-version-check-full.js:
--------------------------------------------------------------------------------

```javascript
 1 | import {
 2 | 	checkForUpdate,
 3 | 	displayUpgradeNotification,
 4 | 	compareVersions
 5 | } from './scripts/modules/commands.js';
 6 | import fs from 'fs';
 7 | import path from 'path';
 8 | 
 9 | // Force our current version for testing
10 | process.env.FORCE_VERSION = '0.9.30';
11 | 
12 | // Create a mock package.json in memory for testing
13 | const mockPackageJson = {
14 | 	name: 'task-master-ai',
15 | 	version: '0.9.30'
16 | };
17 | 
18 | // Modified version of checkForUpdate that doesn't use HTTP for testing
19 | async function testCheckForUpdate(simulatedLatestVersion) {
20 | 	// Get current version - use our forced version
21 | 	const currentVersion = process.env.FORCE_VERSION || '0.9.30';
22 | 
23 | 	console.log(`Using simulated current version: ${currentVersion}`);
24 | 	console.log(`Using simulated latest version: ${simulatedLatestVersion}`);
25 | 
26 | 	// Compare versions
27 | 	const needsUpdate =
28 | 		compareVersions(currentVersion, simulatedLatestVersion) < 0;
29 | 
30 | 	return {
31 | 		currentVersion,
32 | 		latestVersion: simulatedLatestVersion,
33 | 		needsUpdate
34 | 	};
35 | }
36 | 
37 | // Test with current version older than latest (should show update notice)
38 | async function runTest() {
39 | 	console.log('=== Testing version check scenarios ===\n');
40 | 
41 | 	// Scenario 1: Update available
42 | 	console.log(
43 | 		'\n--- Scenario 1: Update available (Current: 0.9.30, Latest: 1.0.0) ---'
44 | 	);
45 | 	const updateInfo1 = await testCheckForUpdate('1.0.0');
46 | 	console.log('Update check results:');
47 | 	console.log(`- Current version: ${updateInfo1.currentVersion}`);
48 | 	console.log(`- Latest version: ${updateInfo1.latestVersion}`);
49 | 	console.log(`- Update needed: ${updateInfo1.needsUpdate}`);
50 | 
51 | 	if (updateInfo1.needsUpdate) {
52 | 		console.log('\nDisplaying upgrade notification:');
53 | 		displayUpgradeNotification(
54 | 			updateInfo1.currentVersion,
55 | 			updateInfo1.latestVersion
56 | 		);
57 | 	}
58 | 
59 | 	// Scenario 2: No update needed (versions equal)
60 | 	console.log(
61 | 		'\n--- Scenario 2: No update needed (Current: 0.9.30, Latest: 0.9.30) ---'
62 | 	);
63 | 	const updateInfo2 = await testCheckForUpdate('0.9.30');
64 | 	console.log('Update check results:');
65 | 	console.log(`- Current version: ${updateInfo2.currentVersion}`);
66 | 	console.log(`- Latest version: ${updateInfo2.latestVersion}`);
67 | 	console.log(`- Update needed: ${updateInfo2.needsUpdate}`);
68 | 
69 | 	// Scenario 3: Development version (current newer than latest)
70 | 	console.log(
71 | 		'\n--- Scenario 3: Development version (Current: 0.9.30, Latest: 0.9.0) ---'
72 | 	);
73 | 	const updateInfo3 = await testCheckForUpdate('0.9.0');
74 | 	console.log('Update check results:');
75 | 	console.log(`- Current version: ${updateInfo3.currentVersion}`);
76 | 	console.log(`- Latest version: ${updateInfo3.latestVersion}`);
77 | 	console.log(`- Update needed: ${updateInfo3.needsUpdate}`);
78 | 
79 | 	console.log('\n=== Test complete ===');
80 | }
81 | 
82 | // Run all tests
83 | runTest();
84 | 
```

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

```markdown
 1 | ---
 2 | title: PRD Creation and Parsing
 3 | sidebarTitle: "PRD Creation and Parsing"
 4 | ---
 5 | 
 6 | # Writing a PRD
 7 | 
 8 | A PRD (Product Requirements Document) is the starting point of every task flow in Task Master. It defines what you're building and why. A clear PRD dramatically improves the quality of your tasks, your model outputs, and your final product — so it’s worth taking the time to get it right.
 9 | 
10 | <Tip>
11 | You don’t need to define your whole app up front. You can write a focused PRD just for the next feature or module you’re working on.
12 | </Tip>
13 | 
14 | <Tip>
15 | You can start with an empty project or you can start with a feature PRD on an existing project.
16 | </Tip>
17 | 
18 | <Tip>
19 | You can add and parse multiple PRDs per project using the --append flag
20 | </Tip>
21 | 
22 | ## What Makes a Good PRD?
23 | 
24 | - Clear objective — what’s the outcome or feature?
25 | - Context — what’s already in place or assumed?
26 | - Constraints — what limits or requirements need to be respected?
27 | - Reasoning — why are you building it this way?
28 | 
29 | The more context you give the model, the better the breakdown and results.
30 | 
31 | ---
32 | 
33 | ## Writing a PRD for Task Master
34 | 
35 | <Note>An example PRD can be found in .taskmaster/templates/example_prd.txt</Note>
36 | 
37 | 
38 | You can co-write your PRD with an LLM model using the following workflow:
39 | 
40 | 1. **Chat about requirements** — explain what you want to build.
41 | 2. **Show an example PRD** — share the example PRD so the model understands the expected format. The example uses formatting that work well with Task Master's code. Following the example will yield better results.
42 | 3. **Iterate and refine** — work with the model to shape the draft into a clear and well-structured PRD.
43 | 
44 | This approach works great in Cursor, or anywhere you use a chat-based LLM.
45 | 
46 | ---
47 | 
48 | ## Where to Save Your PRD
49 | 
50 | Place your PRD file in the `.taskmaster/docs` folder in your project.
51 | 
52 | - You can have **multiple PRDs** per project.
53 | - Name your PRDs clearly so they’re easy to reference later.
54 |   - Examples: `dashboard_redesign.txt`, `user_onboarding.txt`
55 | 
56 | ---
57 | 
58 | # Parse your PRD into Tasks
59 | 
60 | This is where the Task Master magic begins.
61 | 
62 | In Cursor's AI chat, instruct the agent to generate tasks from your PRD:
63 | 
64 | ```
65 | Please use the task-master parse-prd command to generate tasks from my PRD. The PRD is located at .taskmaster/docs/<prd-name>.txt.
66 | ```
67 | 
68 | The agent will execute the following command which you can alternatively paste into the CLI:
69 | 
70 | ```bash
71 | task-master parse-prd .taskmaster/docs/<prd-name>.txt
72 | ```
73 | 
74 | This will:
75 | 
76 | - Parse your PRD document
77 | - Generate a structured `tasks.json` file with tasks, dependencies, priorities, and test strategies
78 | 
79 | Now that you have written and parsed a PRD, you are ready to start setting up your tasks.
80 | 
81 | 
82 | 
```

--------------------------------------------------------------------------------
/apps/extension/src/components/TaskMasterLogo.tsx:
--------------------------------------------------------------------------------

```typescript
 1 | import React from 'react';
 2 | 
 3 | interface TaskMasterLogoProps {
 4 | 	className?: string;
 5 | }
 6 | 
 7 | export const TaskMasterLogo: React.FC<TaskMasterLogoProps> = ({
 8 | 	className = ''
 9 | }) => {
10 | 	return (
11 | 		<svg
12 | 			className={className}
13 | 			viewBox="0 0 224 291"
14 | 			fill="none"
15 | 			xmlns="http://www.w3.org/2000/svg"
16 | 		>
17 | 			<path
18 | 				d="M101.635 286.568L71.4839 256.414C65.6092 250.539 65.6092 241.03 71.4839 235.155L142.52 164.11C144.474 162.156 147.643 162.156 149.61 164.11L176.216 190.719C178.17 192.673 181.339 192.673 183.305 190.719L189.719 184.305C191.673 182.35 191.673 179.181 189.719 177.214L163.113 150.605C161.159 148.651 161.159 145.481 163.113 143.514L191.26 115.365C193.214 113.41 193.214 110.241 191.26 108.274L182.316 99.3291C180.362 97.3748 177.193 97.3748 175.226 99.3291L55.8638 218.706C49.989 224.581 40.4816 224.581 34.6068 218.706L4.4061 188.501C-1.4687 182.626 -1.4687 173.117 4.4061 167.242L23.8342 147.811C25.7883 145.857 25.7883 142.688 23.8342 140.721L4.78187 121.666C-1.09293 115.791 -1.09293 106.282 4.78187 100.406L34.7195 70.4527C40.5943 64.5772 50.1017 64.5772 55.9765 70.4527L75.555 90.0335C77.5091 91.9879 80.6782 91.9879 82.6448 90.0335L124.144 48.5292C126.098 46.5749 126.098 43.4054 124.144 41.4385L115.463 32.7568C113.509 30.8025 110.34 30.8025 108.374 32.7568L99.8683 41.2632C97.9143 43.2175 94.7451 43.2175 92.7785 41.2632L82.1438 30.6271C80.1897 28.6728 80.1897 25.5033 82.1438 23.5364L101.271 4.40662C107.146 -1.46887 116.653 -1.46887 122.528 4.40662L152.478 34.3604C158.353 40.2359 158.353 49.7444 152.478 55.6199L82.6323 125.474C80.6782 127.429 77.5091 127.429 75.5425 125.474L48.8741 98.8029C46.9201 96.8486 43.7509 96.8486 41.7843 98.8029L33.1036 107.485C31.1496 109.439 31.1496 112.608 33.1036 114.575L59.2458 140.721C61.1999 142.675 61.1999 145.844 59.2458 147.811L32.7404 174.32C30.7863 176.274 30.7863 179.444 32.7404 181.411L41.6841 190.355C43.6382 192.31 46.8073 192.31 48.7739 190.355L168.136 70.9789C174.011 65.1034 183.518 65.1034 189.393 70.9789L219.594 101.183C225.469 107.059 225.469 116.567 219.594 122.443L198.537 143.502C196.583 145.456 196.583 148.626 198.537 150.592L218.053 170.111C223.928 175.986 223.928 185.495 218.053 191.37L190.37 219.056C184.495 224.932 174.988 224.932 169.113 219.056L149.597 199.538C147.643 197.584 144.474 197.584 142.508 199.538L99.8057 242.245C97.8516 244.2 97.8516 247.369 99.8057 249.336L108.699 258.231C110.653 260.185 113.823 260.185 115.789 258.231L122.954 251.065C124.908 249.11 128.077 249.11 130.044 251.065L140.679 261.701C142.633 263.655 142.633 266.825 140.679 268.791L122.879 286.593C117.004 292.469 107.497 292.469 101.622 286.593L101.635 286.568Z"
19 | 				fill="currentColor"
20 | 			/>
21 | 		</svg>
22 | 	);
23 | };
24 | 
```
Page 6/52FirstPrevNextLast