diff --git a/.changeset/fluffy-clocks-cross.md b/.changeset/fluffy-clocks-cross.md deleted file mode 100644 index 5fac9687..00000000 --- a/.changeset/fluffy-clocks-cross.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"task-master-ai": patch ---- - -Fix module not found for new 0.27.0 release diff --git a/CHANGELOG.md b/CHANGELOG.md index 78b1832e..102b64d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,26 @@ # task-master-ai +## 0.27.1 + +### Patch Changes + +- [#1232](https://github.com/eyaltoledano/claude-task-master/pull/1232) [`f487736`](https://github.com/eyaltoledano/claude-task-master/commit/f487736670ef8c484059f676293777eabb249c9e) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Fix module not found for new 0.27.0 release + +- [#1233](https://github.com/eyaltoledano/claude-task-master/pull/1233) [`c911608`](https://github.com/eyaltoledano/claude-task-master/commit/c911608f60454253f4e024b57ca84e5a5a53f65c) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Fix Zed MCP configuration by adding required "source" property + - Add "source": "custom" property to task-master-ai server in Zed settings.json + +## 0.27.1-rc.1 + +### Patch Changes + +- [#1233](https://github.com/eyaltoledano/claude-task-master/pull/1233) [`1a18794`](https://github.com/eyaltoledano/claude-task-master/commit/1a1879483b86c118a4e46c02cbf4acebfcf6bcf9) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - One last testing final final + +## 0.27.1-rc.0 + +### Patch Changes + +- [#1232](https://github.com/eyaltoledano/claude-task-master/pull/1232) [`f487736`](https://github.com/eyaltoledano/claude-task-master/commit/f487736670ef8c484059f676293777eabb249c9e) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Fix module not found for new 0.27.0 release + ## 0.27.0 ### Minor Changes diff --git a/apps/cli/CHANGELOG.md b/apps/cli/CHANGELOG.md index 9be66342..5b311978 100644 --- a/apps/cli/CHANGELOG.md +++ b/apps/cli/CHANGELOG.md @@ -1,5 +1,12 @@ # @tm/cli +## null + +### Patch Changes + +- Updated dependencies []: + - @tm/core@null + ## 0.27.0 ### Patch Changes diff --git a/apps/cli/src/index.ts b/apps/cli/src/index.ts index 60739167..ce0405ee 100644 --- a/apps/cli/src/index.ts +++ b/apps/cli/src/index.ts @@ -18,7 +18,8 @@ export * as ui from './utils/ui.js'; export { checkForUpdate, performAutoUpdate, - displayUpgradeNotification + displayUpgradeNotification, + compareVersions } from './utils/auto-update.js'; // Re-export commonly used types from tm-core diff --git a/apps/cli/src/utils/auto-update.ts b/apps/cli/src/utils/auto-update.ts index e3d32742..7b2f762d 100644 --- a/apps/cli/src/utils/auto-update.ts +++ b/apps/cli/src/utils/auto-update.ts @@ -7,7 +7,6 @@ import https from 'https'; import chalk from 'chalk'; import ora from 'ora'; import boxen from 'boxen'; -import packageJson from '../../../../package.json' with { type: 'json' }; export interface UpdateInfo { currentVersion: string; @@ -16,15 +15,18 @@ export interface UpdateInfo { } /** - * Get current version from package.json + * Get current version from build-time injected environment variable */ function getCurrentVersion(): string { - try { - return packageJson.version; - } catch (error) { - console.warn('Could not read package.json for version info'); - return '0.0.0'; + // Version is injected at build time via TM_PUBLIC_VERSION + const version = process.env.TM_PUBLIC_VERSION; + if (version && version !== 'unknown') { + return version; } + + // Fallback for development or if injection failed + console.warn('Could not read version from TM_PUBLIC_VERSION, using fallback'); + return '0.0.0'; } /** @@ -33,7 +35,7 @@ function getCurrentVersion(): string { * @param v2 - Second version * @returns -1 if v1 < v2, 0 if v1 = v2, 1 if v1 > v2 */ -function compareVersions(v1: string, v2: string): number { +export function compareVersions(v1: string, v2: string): number { const toParts = (v: string) => { const [core, pre = ''] = v.split('-', 2); const nums = core.split('.').map((n) => Number.parseInt(n, 10) || 0); diff --git a/apps/docs/CHANGELOG.md b/apps/docs/CHANGELOG.md index 84f911d0..58a6cb87 100644 --- a/apps/docs/CHANGELOG.md +++ b/apps/docs/CHANGELOG.md @@ -1,5 +1,7 @@ # docs +## 0.0.4 + ## 0.0.3 ## 0.0.2 diff --git a/apps/docs/package.json b/apps/docs/package.json index 7434e145..8bbdd60c 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -1,6 +1,6 @@ { "name": "docs", - "version": "0.0.3", + "version": "0.0.4", "private": true, "description": "Task Master documentation powered by Mintlify", "scripts": { diff --git a/apps/extension/CHANGELOG.md b/apps/extension/CHANGELOG.md index ec78281a..2a36dc5d 100644 --- a/apps/extension/CHANGELOG.md +++ b/apps/extension/CHANGELOG.md @@ -1,5 +1,26 @@ # Change Log +## 0.25.2 + +### Patch Changes + +- Updated dependencies [[`f487736`](https://github.com/eyaltoledano/claude-task-master/commit/f487736670ef8c484059f676293777eabb249c9e), [`c911608`](https://github.com/eyaltoledano/claude-task-master/commit/c911608f60454253f4e024b57ca84e5a5a53f65c), [`1a18794`](https://github.com/eyaltoledano/claude-task-master/commit/1a1879483b86c118a4e46c02cbf4acebfcf6bcf9)]: + - task-master-ai@0.27.1 + +## 0.25.2-rc.1 + +### Patch Changes + +- Updated dependencies [[`1a18794`](https://github.com/eyaltoledano/claude-task-master/commit/1a1879483b86c118a4e46c02cbf4acebfcf6bcf9)]: + - task-master-ai@0.27.1-rc.1 + +## 0.25.2-rc.0 + +### Patch Changes + +- Updated dependencies [[`f487736`](https://github.com/eyaltoledano/claude-task-master/commit/f487736670ef8c484059f676293777eabb249c9e)]: + - task-master-ai@0.27.1-rc.0 + ## 0.25.0 ### Minor Changes diff --git a/apps/extension/package.json b/apps/extension/package.json index 5877bb4e..28a0e17f 100644 --- a/apps/extension/package.json +++ b/apps/extension/package.json @@ -3,7 +3,7 @@ "private": true, "displayName": "TaskMaster", "description": "A visual Kanban board interface for TaskMaster projects in VS Code", - "version": "0.25.1", + "version": "0.25.2", "publisher": "Hamster", "icon": "assets/icon.png", "engines": { @@ -240,7 +240,7 @@ "check-types": "tsc --noEmit" }, "dependencies": { - "task-master-ai": "*" + "task-master-ai": "0.27.1" }, "devDependencies": { "@dnd-kit/core": "^6.3.1", diff --git a/public/assets/.windsurfrules b/assets/.windsurfrules similarity index 100% rename from public/assets/.windsurfrules rename to assets/.windsurfrules diff --git a/public/assets/AGENTS.md b/assets/AGENTS.md similarity index 100% rename from public/assets/AGENTS.md rename to assets/AGENTS.md diff --git a/public/assets/claude/TM_COMMANDS_GUIDE.md b/assets/claude/TM_COMMANDS_GUIDE.md similarity index 100% rename from public/assets/claude/TM_COMMANDS_GUIDE.md rename to assets/claude/TM_COMMANDS_GUIDE.md diff --git a/public/assets/claude/agents/task-checker.md b/assets/claude/agents/task-checker.md similarity index 100% rename from public/assets/claude/agents/task-checker.md rename to assets/claude/agents/task-checker.md diff --git a/public/assets/claude/agents/task-executor.md b/assets/claude/agents/task-executor.md similarity index 100% rename from public/assets/claude/agents/task-executor.md rename to assets/claude/agents/task-executor.md diff --git a/public/assets/claude/agents/task-orchestrator.md b/assets/claude/agents/task-orchestrator.md similarity index 100% rename from public/assets/claude/agents/task-orchestrator.md rename to assets/claude/agents/task-orchestrator.md diff --git a/public/assets/claude/commands/tm/add-dependency/add-dependency.md b/assets/claude/commands/tm/add-dependency/add-dependency.md similarity index 100% rename from public/assets/claude/commands/tm/add-dependency/add-dependency.md rename to assets/claude/commands/tm/add-dependency/add-dependency.md diff --git a/public/assets/claude/commands/tm/add-subtask/add-subtask.md b/assets/claude/commands/tm/add-subtask/add-subtask.md similarity index 100% rename from public/assets/claude/commands/tm/add-subtask/add-subtask.md rename to assets/claude/commands/tm/add-subtask/add-subtask.md diff --git a/public/assets/claude/commands/tm/add-subtask/convert-task-to-subtask.md b/assets/claude/commands/tm/add-subtask/convert-task-to-subtask.md similarity index 100% rename from public/assets/claude/commands/tm/add-subtask/convert-task-to-subtask.md rename to assets/claude/commands/tm/add-subtask/convert-task-to-subtask.md diff --git a/public/assets/claude/commands/tm/add-task/add-task.md b/assets/claude/commands/tm/add-task/add-task.md similarity index 100% rename from public/assets/claude/commands/tm/add-task/add-task.md rename to assets/claude/commands/tm/add-task/add-task.md diff --git a/public/assets/claude/commands/tm/analyze-complexity/analyze-complexity.md b/assets/claude/commands/tm/analyze-complexity/analyze-complexity.md similarity index 100% rename from public/assets/claude/commands/tm/analyze-complexity/analyze-complexity.md rename to assets/claude/commands/tm/analyze-complexity/analyze-complexity.md diff --git a/public/assets/claude/commands/tm/clear-subtasks/clear-all-subtasks.md b/assets/claude/commands/tm/clear-subtasks/clear-all-subtasks.md similarity index 100% rename from public/assets/claude/commands/tm/clear-subtasks/clear-all-subtasks.md rename to assets/claude/commands/tm/clear-subtasks/clear-all-subtasks.md diff --git a/public/assets/claude/commands/tm/clear-subtasks/clear-subtasks.md b/assets/claude/commands/tm/clear-subtasks/clear-subtasks.md similarity index 100% rename from public/assets/claude/commands/tm/clear-subtasks/clear-subtasks.md rename to assets/claude/commands/tm/clear-subtasks/clear-subtasks.md diff --git a/public/assets/claude/commands/tm/complexity-report/complexity-report.md b/assets/claude/commands/tm/complexity-report/complexity-report.md similarity index 100% rename from public/assets/claude/commands/tm/complexity-report/complexity-report.md rename to assets/claude/commands/tm/complexity-report/complexity-report.md diff --git a/public/assets/claude/commands/tm/expand/expand-all-tasks.md b/assets/claude/commands/tm/expand/expand-all-tasks.md similarity index 100% rename from public/assets/claude/commands/tm/expand/expand-all-tasks.md rename to assets/claude/commands/tm/expand/expand-all-tasks.md diff --git a/public/assets/claude/commands/tm/expand/expand-task.md b/assets/claude/commands/tm/expand/expand-task.md similarity index 100% rename from public/assets/claude/commands/tm/expand/expand-task.md rename to assets/claude/commands/tm/expand/expand-task.md diff --git a/public/assets/claude/commands/tm/fix-dependencies/fix-dependencies.md b/assets/claude/commands/tm/fix-dependencies/fix-dependencies.md similarity index 100% rename from public/assets/claude/commands/tm/fix-dependencies/fix-dependencies.md rename to assets/claude/commands/tm/fix-dependencies/fix-dependencies.md diff --git a/public/assets/claude/commands/tm/generate/generate-tasks.md b/assets/claude/commands/tm/generate/generate-tasks.md similarity index 100% rename from public/assets/claude/commands/tm/generate/generate-tasks.md rename to assets/claude/commands/tm/generate/generate-tasks.md diff --git a/public/assets/claude/commands/tm/help.md b/assets/claude/commands/tm/help.md similarity index 100% rename from public/assets/claude/commands/tm/help.md rename to assets/claude/commands/tm/help.md diff --git a/public/assets/claude/commands/tm/init/init-project-quick.md b/assets/claude/commands/tm/init/init-project-quick.md similarity index 100% rename from public/assets/claude/commands/tm/init/init-project-quick.md rename to assets/claude/commands/tm/init/init-project-quick.md diff --git a/public/assets/claude/commands/tm/init/init-project.md b/assets/claude/commands/tm/init/init-project.md similarity index 100% rename from public/assets/claude/commands/tm/init/init-project.md rename to assets/claude/commands/tm/init/init-project.md diff --git a/public/assets/claude/commands/tm/learn.md b/assets/claude/commands/tm/learn.md similarity index 100% rename from public/assets/claude/commands/tm/learn.md rename to assets/claude/commands/tm/learn.md diff --git a/public/assets/claude/commands/tm/list/list-tasks-by-status.md b/assets/claude/commands/tm/list/list-tasks-by-status.md similarity index 100% rename from public/assets/claude/commands/tm/list/list-tasks-by-status.md rename to assets/claude/commands/tm/list/list-tasks-by-status.md diff --git a/public/assets/claude/commands/tm/list/list-tasks-with-subtasks.md b/assets/claude/commands/tm/list/list-tasks-with-subtasks.md similarity index 100% rename from public/assets/claude/commands/tm/list/list-tasks-with-subtasks.md rename to assets/claude/commands/tm/list/list-tasks-with-subtasks.md diff --git a/public/assets/claude/commands/tm/list/list-tasks.md b/assets/claude/commands/tm/list/list-tasks.md similarity index 100% rename from public/assets/claude/commands/tm/list/list-tasks.md rename to assets/claude/commands/tm/list/list-tasks.md diff --git a/public/assets/claude/commands/tm/models/setup-models.md b/assets/claude/commands/tm/models/setup-models.md similarity index 100% rename from public/assets/claude/commands/tm/models/setup-models.md rename to assets/claude/commands/tm/models/setup-models.md diff --git a/public/assets/claude/commands/tm/models/view-models.md b/assets/claude/commands/tm/models/view-models.md similarity index 100% rename from public/assets/claude/commands/tm/models/view-models.md rename to assets/claude/commands/tm/models/view-models.md diff --git a/public/assets/claude/commands/tm/next/next-task.md b/assets/claude/commands/tm/next/next-task.md similarity index 100% rename from public/assets/claude/commands/tm/next/next-task.md rename to assets/claude/commands/tm/next/next-task.md diff --git a/public/assets/claude/commands/tm/parse-prd/parse-prd-with-research.md b/assets/claude/commands/tm/parse-prd/parse-prd-with-research.md similarity index 100% rename from public/assets/claude/commands/tm/parse-prd/parse-prd-with-research.md rename to assets/claude/commands/tm/parse-prd/parse-prd-with-research.md diff --git a/public/assets/claude/commands/tm/parse-prd/parse-prd.md b/assets/claude/commands/tm/parse-prd/parse-prd.md similarity index 100% rename from public/assets/claude/commands/tm/parse-prd/parse-prd.md rename to assets/claude/commands/tm/parse-prd/parse-prd.md diff --git a/public/assets/claude/commands/tm/remove-dependency/remove-dependency.md b/assets/claude/commands/tm/remove-dependency/remove-dependency.md similarity index 100% rename from public/assets/claude/commands/tm/remove-dependency/remove-dependency.md rename to assets/claude/commands/tm/remove-dependency/remove-dependency.md diff --git a/public/assets/claude/commands/tm/remove-subtask/remove-subtask.md b/assets/claude/commands/tm/remove-subtask/remove-subtask.md similarity index 100% rename from public/assets/claude/commands/tm/remove-subtask/remove-subtask.md rename to assets/claude/commands/tm/remove-subtask/remove-subtask.md diff --git a/public/assets/claude/commands/tm/remove-task/remove-task.md b/assets/claude/commands/tm/remove-task/remove-task.md similarity index 100% rename from public/assets/claude/commands/tm/remove-task/remove-task.md rename to assets/claude/commands/tm/remove-task/remove-task.md diff --git a/public/assets/claude/commands/tm/set-status/to-cancelled.md b/assets/claude/commands/tm/set-status/to-cancelled.md similarity index 100% rename from public/assets/claude/commands/tm/set-status/to-cancelled.md rename to assets/claude/commands/tm/set-status/to-cancelled.md diff --git a/public/assets/claude/commands/tm/set-status/to-deferred.md b/assets/claude/commands/tm/set-status/to-deferred.md similarity index 100% rename from public/assets/claude/commands/tm/set-status/to-deferred.md rename to assets/claude/commands/tm/set-status/to-deferred.md diff --git a/public/assets/claude/commands/tm/set-status/to-done.md b/assets/claude/commands/tm/set-status/to-done.md similarity index 100% rename from public/assets/claude/commands/tm/set-status/to-done.md rename to assets/claude/commands/tm/set-status/to-done.md diff --git a/public/assets/claude/commands/tm/set-status/to-in-progress.md b/assets/claude/commands/tm/set-status/to-in-progress.md similarity index 100% rename from public/assets/claude/commands/tm/set-status/to-in-progress.md rename to assets/claude/commands/tm/set-status/to-in-progress.md diff --git a/public/assets/claude/commands/tm/set-status/to-pending.md b/assets/claude/commands/tm/set-status/to-pending.md similarity index 100% rename from public/assets/claude/commands/tm/set-status/to-pending.md rename to assets/claude/commands/tm/set-status/to-pending.md diff --git a/public/assets/claude/commands/tm/set-status/to-review.md b/assets/claude/commands/tm/set-status/to-review.md similarity index 100% rename from public/assets/claude/commands/tm/set-status/to-review.md rename to assets/claude/commands/tm/set-status/to-review.md diff --git a/public/assets/claude/commands/tm/setup/install-taskmaster.md b/assets/claude/commands/tm/setup/install-taskmaster.md similarity index 100% rename from public/assets/claude/commands/tm/setup/install-taskmaster.md rename to assets/claude/commands/tm/setup/install-taskmaster.md diff --git a/public/assets/claude/commands/tm/setup/quick-install-taskmaster.md b/assets/claude/commands/tm/setup/quick-install-taskmaster.md similarity index 100% rename from public/assets/claude/commands/tm/setup/quick-install-taskmaster.md rename to assets/claude/commands/tm/setup/quick-install-taskmaster.md diff --git a/public/assets/claude/commands/tm/show/show-task.md b/assets/claude/commands/tm/show/show-task.md similarity index 100% rename from public/assets/claude/commands/tm/show/show-task.md rename to assets/claude/commands/tm/show/show-task.md diff --git a/public/assets/claude/commands/tm/status/project-status.md b/assets/claude/commands/tm/status/project-status.md similarity index 100% rename from public/assets/claude/commands/tm/status/project-status.md rename to assets/claude/commands/tm/status/project-status.md diff --git a/public/assets/claude/commands/tm/sync-readme/sync-readme.md b/assets/claude/commands/tm/sync-readme/sync-readme.md similarity index 100% rename from public/assets/claude/commands/tm/sync-readme/sync-readme.md rename to assets/claude/commands/tm/sync-readme/sync-readme.md diff --git a/public/assets/claude/commands/tm/tm-main.md b/assets/claude/commands/tm/tm-main.md similarity index 100% rename from public/assets/claude/commands/tm/tm-main.md rename to assets/claude/commands/tm/tm-main.md diff --git a/public/assets/claude/commands/tm/update/update-single-task.md b/assets/claude/commands/tm/update/update-single-task.md similarity index 100% rename from public/assets/claude/commands/tm/update/update-single-task.md rename to assets/claude/commands/tm/update/update-single-task.md diff --git a/public/assets/claude/commands/tm/update/update-task.md b/assets/claude/commands/tm/update/update-task.md similarity index 100% rename from public/assets/claude/commands/tm/update/update-task.md rename to assets/claude/commands/tm/update/update-task.md diff --git a/public/assets/claude/commands/tm/update/update-tasks-from-id.md b/assets/claude/commands/tm/update/update-tasks-from-id.md similarity index 100% rename from public/assets/claude/commands/tm/update/update-tasks-from-id.md rename to assets/claude/commands/tm/update/update-tasks-from-id.md diff --git a/public/assets/claude/commands/tm/utils/analyze-project.md b/assets/claude/commands/tm/utils/analyze-project.md similarity index 100% rename from public/assets/claude/commands/tm/utils/analyze-project.md rename to assets/claude/commands/tm/utils/analyze-project.md diff --git a/public/assets/claude/commands/tm/validate-dependencies/validate-dependencies.md b/assets/claude/commands/tm/validate-dependencies/validate-dependencies.md similarity index 100% rename from public/assets/claude/commands/tm/validate-dependencies/validate-dependencies.md rename to assets/claude/commands/tm/validate-dependencies/validate-dependencies.md diff --git a/public/assets/claude/commands/tm/workflows/auto-implement-tasks.md b/assets/claude/commands/tm/workflows/auto-implement-tasks.md similarity index 100% rename from public/assets/claude/commands/tm/workflows/auto-implement-tasks.md rename to assets/claude/commands/tm/workflows/auto-implement-tasks.md diff --git a/public/assets/claude/commands/tm/workflows/command-pipeline.md b/assets/claude/commands/tm/workflows/command-pipeline.md similarity index 100% rename from public/assets/claude/commands/tm/workflows/command-pipeline.md rename to assets/claude/commands/tm/workflows/command-pipeline.md diff --git a/public/assets/claude/commands/tm/workflows/smart-workflow.md b/assets/claude/commands/tm/workflows/smart-workflow.md similarity index 100% rename from public/assets/claude/commands/tm/workflows/smart-workflow.md rename to assets/claude/commands/tm/workflows/smart-workflow.md diff --git a/public/assets/config.json b/assets/config.json similarity index 100% rename from public/assets/config.json rename to assets/config.json diff --git a/public/assets/env.example b/assets/env.example similarity index 100% rename from public/assets/env.example rename to assets/env.example diff --git a/public/assets/example_prd.txt b/assets/example_prd.txt similarity index 100% rename from public/assets/example_prd.txt rename to assets/example_prd.txt diff --git a/public/assets/gitignore b/assets/gitignore similarity index 100% rename from public/assets/gitignore rename to assets/gitignore diff --git a/public/assets/kiro-hooks/tm-code-change-task-tracker.kiro.hook b/assets/kiro-hooks/tm-code-change-task-tracker.kiro.hook similarity index 100% rename from public/assets/kiro-hooks/tm-code-change-task-tracker.kiro.hook rename to assets/kiro-hooks/tm-code-change-task-tracker.kiro.hook diff --git a/public/assets/kiro-hooks/tm-complexity-analyzer.kiro.hook b/assets/kiro-hooks/tm-complexity-analyzer.kiro.hook similarity index 100% rename from public/assets/kiro-hooks/tm-complexity-analyzer.kiro.hook rename to assets/kiro-hooks/tm-complexity-analyzer.kiro.hook diff --git a/public/assets/kiro-hooks/tm-daily-standup-assistant.kiro.hook b/assets/kiro-hooks/tm-daily-standup-assistant.kiro.hook similarity index 100% rename from public/assets/kiro-hooks/tm-daily-standup-assistant.kiro.hook rename to assets/kiro-hooks/tm-daily-standup-assistant.kiro.hook diff --git a/public/assets/kiro-hooks/tm-git-commit-task-linker.kiro.hook b/assets/kiro-hooks/tm-git-commit-task-linker.kiro.hook similarity index 100% rename from public/assets/kiro-hooks/tm-git-commit-task-linker.kiro.hook rename to assets/kiro-hooks/tm-git-commit-task-linker.kiro.hook diff --git a/public/assets/kiro-hooks/tm-pr-readiness-checker.kiro.hook b/assets/kiro-hooks/tm-pr-readiness-checker.kiro.hook similarity index 100% rename from public/assets/kiro-hooks/tm-pr-readiness-checker.kiro.hook rename to assets/kiro-hooks/tm-pr-readiness-checker.kiro.hook diff --git a/public/assets/kiro-hooks/tm-task-dependency-auto-progression.kiro.hook b/assets/kiro-hooks/tm-task-dependency-auto-progression.kiro.hook similarity index 100% rename from public/assets/kiro-hooks/tm-task-dependency-auto-progression.kiro.hook rename to assets/kiro-hooks/tm-task-dependency-auto-progression.kiro.hook diff --git a/public/assets/kiro-hooks/tm-test-success-task-completer.kiro.hook b/assets/kiro-hooks/tm-test-success-task-completer.kiro.hook similarity index 100% rename from public/assets/kiro-hooks/tm-test-success-task-completer.kiro.hook rename to assets/kiro-hooks/tm-test-success-task-completer.kiro.hook diff --git a/public/assets/roocode/.roo/rules-architect/architect-rules b/assets/roocode/.roo/rules-architect/architect-rules similarity index 100% rename from public/assets/roocode/.roo/rules-architect/architect-rules rename to assets/roocode/.roo/rules-architect/architect-rules diff --git a/public/assets/roocode/.roo/rules-ask/ask-rules b/assets/roocode/.roo/rules-ask/ask-rules similarity index 100% rename from public/assets/roocode/.roo/rules-ask/ask-rules rename to assets/roocode/.roo/rules-ask/ask-rules diff --git a/public/assets/roocode/.roo/rules-code/code-rules b/assets/roocode/.roo/rules-code/code-rules similarity index 100% rename from public/assets/roocode/.roo/rules-code/code-rules rename to assets/roocode/.roo/rules-code/code-rules diff --git a/public/assets/roocode/.roo/rules-debug/debug-rules b/assets/roocode/.roo/rules-debug/debug-rules similarity index 100% rename from public/assets/roocode/.roo/rules-debug/debug-rules rename to assets/roocode/.roo/rules-debug/debug-rules diff --git a/public/assets/roocode/.roo/rules-orchestrator/orchestrator-rules b/assets/roocode/.roo/rules-orchestrator/orchestrator-rules similarity index 100% rename from public/assets/roocode/.roo/rules-orchestrator/orchestrator-rules rename to assets/roocode/.roo/rules-orchestrator/orchestrator-rules diff --git a/public/assets/roocode/.roo/rules-test/test-rules b/assets/roocode/.roo/rules-test/test-rules similarity index 100% rename from public/assets/roocode/.roo/rules-test/test-rules rename to assets/roocode/.roo/rules-test/test-rules diff --git a/public/assets/roocode/.roomodes b/assets/roocode/.roomodes similarity index 100% rename from public/assets/roocode/.roomodes rename to assets/roocode/.roomodes diff --git a/public/assets/rules/cursor_rules.mdc b/assets/rules/cursor_rules.mdc similarity index 100% rename from public/assets/rules/cursor_rules.mdc rename to assets/rules/cursor_rules.mdc diff --git a/public/assets/rules/dev_workflow.mdc b/assets/rules/dev_workflow.mdc similarity index 100% rename from public/assets/rules/dev_workflow.mdc rename to assets/rules/dev_workflow.mdc diff --git a/public/assets/rules/self_improve.mdc b/assets/rules/self_improve.mdc similarity index 100% rename from public/assets/rules/self_improve.mdc rename to assets/rules/self_improve.mdc diff --git a/public/assets/rules/taskmaster.mdc b/assets/rules/taskmaster.mdc similarity index 100% rename from public/assets/rules/taskmaster.mdc rename to assets/rules/taskmaster.mdc diff --git a/public/assets/rules/taskmaster_hooks_workflow.mdc b/assets/rules/taskmaster_hooks_workflow.mdc similarity index 100% rename from public/assets/rules/taskmaster_hooks_workflow.mdc rename to assets/rules/taskmaster_hooks_workflow.mdc diff --git a/public/assets/scripts_README.md b/assets/scripts_README.md similarity index 100% rename from public/assets/scripts_README.md rename to assets/scripts_README.md diff --git a/package-lock.json b/package-lock.json index b4f41b6f..e5619e96 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "task-master-ai", - "version": "0.27.0", + "version": "0.27.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "task-master-ai", - "version": "0.27.0", + "version": "0.27.1", "license": "MIT WITH Commons-Clause", "workspaces": [ "apps/*", @@ -351,15 +351,15 @@ } }, "apps/docs": { - "version": "0.0.3", + "version": "0.0.4", "devDependencies": { "mintlify": "^4.2.111" } }, "apps/extension": { - "version": "0.25.1", + "version": "0.25.2", "dependencies": { - "task-master-ai": "*" + "task-master-ai": "0.27.1" }, "devDependencies": { "@dnd-kit/core": "^6.3.1", diff --git a/package.json b/package.json index 88e13ee1..0c193e8b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "task-master-ai", - "version": "0.27.0", + "version": "0.27.1", "description": "A task management system for ambitious AI-driven development that doesn't overwhelm and confuse Cursor.", "main": "index.js", "type": "module", diff --git a/packages/build-config/CHANGELOG.md b/packages/build-config/CHANGELOG.md index a9d8e1fe..eef7b965 100644 --- a/packages/build-config/CHANGELOG.md +++ b/packages/build-config/CHANGELOG.md @@ -1,3 +1,5 @@ # @tm/build-config +## null + ## 1.0.1 diff --git a/packages/tm-core/CHANGELOG.md b/packages/tm-core/CHANGELOG.md index 33b68fba..70a35ed9 100644 --- a/packages/tm-core/CHANGELOG.md +++ b/packages/tm-core/CHANGELOG.md @@ -1,5 +1,7 @@ # Changelog +## null + ## 0.26.1 All notable changes to the @task-master/tm-core package will be documented in this file. diff --git a/scripts/init.js b/scripts/init.js index 1223dc01..79d2ecfe 100755 --- a/scripts/init.js +++ b/scripts/init.js @@ -16,8 +16,6 @@ import fs from 'fs'; import path from 'path'; import readline from 'readline'; -import { fileURLToPath } from 'url'; -import { dirname } from 'path'; import chalk from 'chalk'; import figlet from 'figlet'; import boxen from 'boxen'; @@ -49,9 +47,6 @@ import { GITIGNORE_FILE } from '../src/constants/paths.js'; -const __filename = fileURLToPath(import.meta.url); -const __dirname = dirname(__filename); - // Define log levels const LOG_LEVELS = { debug: 0, @@ -619,13 +614,7 @@ function createProjectStructure( // Copy .gitignore with GitTasks preference try { - const gitignoreTemplatePath = path.join( - __dirname, - '..', - 'assets', - 'gitignore' - ); - const templateContent = fs.readFileSync(gitignoreTemplatePath, 'utf8'); + const templateContent = readAsset('gitignore', 'utf8'); manageGitignoreFile( path.join(targetDir, GITIGNORE_FILE), templateContent, diff --git a/scripts/modules/commands.js b/scripts/modules/commands.js index 022e4176..6cf61f21 100644 --- a/scripts/modules/commands.js +++ b/scripts/modules/commands.js @@ -3,7 +3,7 @@ * Command-line interface for the Task Master CLI */ -import { program } from 'commander'; +import { Command } from 'commander'; import path from 'path'; import chalk from 'chalk'; import boxen from 'boxen'; @@ -5076,28 +5076,10 @@ Examples: */ function setupCLI() { // Create a new program instance - const programInstance = program - .name('dev') + const programInstance = new Command() + .name('task-master') .description('AI-driven development task management') - .version(() => { - // Read version directly from package.json ONLY - try { - const packageJsonPath = path.join(process.cwd(), 'package.json'); - if (fs.existsSync(packageJsonPath)) { - const packageJson = JSON.parse( - fs.readFileSync(packageJsonPath, 'utf8') - ); - return packageJson.version; - } - } catch (error) { - // Silently fall back to 'unknown' - log( - 'warn', - 'Could not read package.json for version info in .version()' - ); - } - return 'unknown'; // Default fallback if package.json fails - }) + .version(process.env.TM_PUBLIC_VERSION || 'unknown') .helpOption('-h, --help', 'Display help') .addHelpCommand(false); // Disable default help command @@ -5126,8 +5108,9 @@ function setupCLI() { */ async function runCLI(argv = process.argv) { try { - // Display banner if not in a pipe - if (process.stdout.isTTY) { + // Display banner if not in a pipe (except for init command which has its own banner) + const isInitCommand = argv.includes('init'); + if (process.stdout.isTTY && !isInitCommand) { displayBanner(); } diff --git a/src/profiles/zed.js b/src/profiles/zed.js index 989f7cd3..04d30093 100644 --- a/src/profiles/zed.js +++ b/src/profiles/zed.js @@ -142,6 +142,14 @@ function onPostConvertRulesProfile(targetDir, assetsDir) { // Transform to Zed format const zedConfig = transformToZedFormat(mcpConfig); + // Add "source": "custom" to task-master-ai server for Zed + if ( + zedConfig['context_servers'] && + zedConfig['context_servers']['task-master-ai'] + ) { + zedConfig['context_servers']['task-master-ai'].source = 'custom'; + } + // Write back the transformed config with proper formatting fs.writeFileSync( mcpConfigPath, diff --git a/src/utils/path-utils.js b/src/utils/path-utils.js index d17342d1..13671c84 100644 --- a/src/utils/path-utils.js +++ b/src/utils/path-utils.js @@ -463,6 +463,17 @@ export function findConfigPath(explicitPath = null, args = null, log = null) { } } - logger.warn?.(`No configuration file found in project: ${projectRoot}`); + // Only warn once per command execution to prevent spam during init + const warningKey = `config_warning_${projectRoot}`; + + if (!global._tmConfigWarningsThisRun) { + global._tmConfigWarningsThisRun = new Set(); + } + + if (!global._tmConfigWarningsThisRun.has(warningKey)) { + global._tmConfigWarningsThisRun.add(warningKey); + logger.warn?.(`No configuration file found in project: ${projectRoot}`); + } + return null; } diff --git a/tests/integration/profiles/roo-files-inclusion.test.js b/tests/integration/profiles/roo-files-inclusion.test.js index 77451241..9e267c30 100644 --- a/tests/integration/profiles/roo-files-inclusion.test.js +++ b/tests/integration/profiles/roo-files-inclusion.test.js @@ -100,17 +100,13 @@ describe('Roo Files Inclusion in Package', () => { }); }); - test('source Roo files exist in public/assets directory', () => { + test('source Roo files exist in assets directory', () => { // Verify that the source files for Roo integration exist expect( - fs.existsSync( - path.join(process.cwd(), 'public', 'assets', 'roocode', '.roo') - ) + fs.existsSync(path.join(process.cwd(), 'assets', 'roocode', '.roo')) ).toBe(true); expect( - fs.existsSync( - path.join(process.cwd(), 'public', 'assets', 'roocode', '.roomodes') - ) + fs.existsSync(path.join(process.cwd(), 'assets', 'roocode', '.roomodes')) ).toBe(true); }); }); diff --git a/tests/integration/profiles/rules-files-inclusion.test.js b/tests/integration/profiles/rules-files-inclusion.test.js index c8cdbe03..8b5fc5a9 100644 --- a/tests/integration/profiles/rules-files-inclusion.test.js +++ b/tests/integration/profiles/rules-files-inclusion.test.js @@ -16,9 +16,9 @@ describe('Rules Files Inclusion in Package', () => { expect(packageJson.files).toContain('dist/**'); }); - test('source rules files exist in public/assets/rules directory', () => { + test('source rules files exist in assets/rules directory', () => { // Verify that the actual rules files exist - const rulesDir = path.join(process.cwd(), 'public', 'assets', 'rules'); + const rulesDir = path.join(process.cwd(), 'assets', 'rules'); expect(fs.existsSync(rulesDir)).toBe(true); // Check for the 4 files that currently exist @@ -86,17 +86,13 @@ describe('Rules Files Inclusion in Package', () => { expect(rooJsContent.includes('${mode}-rules')).toBe(true); }); - test('source Roo files exist in public/assets directory', () => { + test('source Roo files exist in assets directory', () => { // Verify that the source files for Roo integration exist expect( - fs.existsSync( - path.join(process.cwd(), 'public', 'assets', 'roocode', '.roo') - ) + fs.existsSync(path.join(process.cwd(), 'assets', 'roocode', '.roo')) ).toBe(true); expect( - fs.existsSync( - path.join(process.cwd(), 'public', 'assets', 'roocode', '.roomodes') - ) + fs.existsSync(path.join(process.cwd(), 'assets', 'roocode', '.roomodes')) ).toBe(true); }); }); diff --git a/tests/unit/commands.test.js b/tests/unit/commands.test.js index 1ea70ca7..19a9abb4 100644 --- a/tests/unit/commands.test.js +++ b/tests/unit/commands.test.js @@ -96,11 +96,10 @@ import { RULES_SETUP_ACTION, RULES_ACTIONS } from '../../src/constants/rules-actions.js'; +import { compareVersions } from '@tm/cli'; describe('Commands Module - CLI Setup and Integration', () => { const mockExistsSync = jest.spyOn(fs, 'existsSync'); - const mockReadFileSync = jest.spyOn(fs, 'readFileSync'); - const mockJoin = jest.spyOn(path, 'join'); beforeEach(() => { jest.clearAllMocks(); @@ -115,55 +114,42 @@ describe('Commands Module - CLI Setup and Integration', () => { test('should return Commander program instance', () => { const program = setupCLI(); expect(program).toBeDefined(); - expect(program.name()).toBe('dev'); + expect(program.name()).toBe('task-master'); }); - test('should read version from package.json when available', () => { - mockExistsSync.mockReturnValue(true); - mockReadFileSync.mockReturnValue('{"version": "1.0.0"}'); - mockJoin.mockReturnValue('package.json'); + test('should return version that matches package.json when TM_PUBLIC_VERSION is set', () => { + // Read actual version from package.json + const packageJson = JSON.parse(fs.readFileSync('package.json', 'utf8')); + const expectedVersion = packageJson.version; + + // Set environment variable to match package.json + const originalEnv = process.env.TM_PUBLIC_VERSION; + process.env.TM_PUBLIC_VERSION = expectedVersion; const program = setupCLI(); - const version = program._version(); - expect(mockReadFileSync).toHaveBeenCalledWith('package.json', 'utf8'); - expect(version).toBe('1.0.0'); + const version = program.version(); + expect(version).toBe(expectedVersion); + + // Restore original environment + if (originalEnv !== undefined) { + process.env.TM_PUBLIC_VERSION = originalEnv; + } else { + delete process.env.TM_PUBLIC_VERSION; + } }); - test('should use default version when package.json is not available', () => { - mockExistsSync.mockReturnValue(false); + test('should use default version when TM_PUBLIC_VERSION is not available', () => { + const originalEnv = process.env.TM_PUBLIC_VERSION; + delete process.env.TM_PUBLIC_VERSION; const program = setupCLI(); - const version = program._version(); - expect(mockReadFileSync).not.toHaveBeenCalled(); - expect(version).toBe('unknown'); - }); - - test('should use default version when package.json reading throws an error', () => { - mockExistsSync.mockReturnValue(true); - mockReadFileSync.mockImplementation(() => { - throw new Error('Read error'); - }); - - // Mock console methods to prevent chalk formatting conflicts - const consoleErrorSpy = jest - .spyOn(console, 'error') - .mockImplementation(() => {}); - const consoleLogSpy = jest - .spyOn(console, 'log') - .mockImplementation(() => {}); - const consoleWarnSpy = jest - .spyOn(console, 'warn') - .mockImplementation(() => {}); - - const program = setupCLI(); - const version = program._version(); - expect(mockReadFileSync).toHaveBeenCalled(); + const version = program.version(); expect(version).toBe('unknown'); - // Restore console methods - consoleErrorSpy.mockRestore(); - consoleLogSpy.mockRestore(); - consoleWarnSpy.mockRestore(); + // Restore original environment + if (originalEnv !== undefined) { + process.env.TM_PUBLIC_VERSION = originalEnv; + } }); }); @@ -277,31 +263,6 @@ describe('Commands Module - CLI Setup and Integration', () => { // Test utility functions that commands rely on describe('Version comparison utility', () => { - let compareVersions; - - beforeAll(async () => { - // Import from @tm/cli instead of commands.js - const { compareVersions: cv } = await import( - '../../apps/cli/src/utils/auto-update.js' - ); - - // Create a local compareVersions function for testing - compareVersions = (v1, v2) => { - const v1Parts = v1.split('.').map((p) => parseInt(p, 10)); - const v2Parts = v2.split('.').map((p) => parseInt(p, 10)); - - for (let i = 0; i < Math.max(v1Parts.length, v2Parts.length); i++) { - const v1Part = v1Parts[i] || 0; - const v2Part = v2Parts[i] || 0; - - if (v1Part < v2Part) return -1; - if (v1Part > v2Part) return 1; - } - - return 0; - }; - }); - test('compareVersions correctly compares semantic versions', () => { expect(compareVersions('1.0.0', '1.0.0')).toBe(0); expect(compareVersions('1.0.0', '1.0.1')).toBe(-1); diff --git a/tsdown.config.ts b/tsdown.config.ts index 53f82618..b2780d60 100644 --- a/tsdown.config.ts +++ b/tsdown.config.ts @@ -7,6 +7,18 @@ dotenvLoad(); // Get all TM_PUBLIC_* env variables for build-time injection const getBuildTimeEnvs = () => { const envs: Record = {}; + + // Inject package.json version at build time + try { + const packageJson = JSON.parse( + require('fs').readFileSync('package.json', 'utf8') + ); + envs['TM_PUBLIC_VERSION'] = packageJson.version || 'unknown'; + } catch (error) { + console.warn('Could not read package.json version during build:', error); + envs['TM_PUBLIC_VERSION'] = 'unknown'; + } + for (const [key, value] of Object.entries(process.env)) { if (key.startsWith('TM_PUBLIC_')) { // Return the actual value, not JSON.stringify'd @@ -23,7 +35,7 @@ export default defineConfig( 'mcp-server': 'mcp-server/server.js' }, outDir: 'dist', - copy: ['public'], + copy: ['assets'], ignoreWatch: ['node_modules', 'dist', 'tests', 'apps/extension'], // Bundle only our workspace packages, keep npm dependencies external noExternal: [/^@tm\//],