@planu/cli 0.92.0 → 0.93.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/dist/engine/telemetry/error-reporter.d.ts +6 -0
  2. package/dist/engine/telemetry/error-reporter.d.ts.map +1 -1
  3. package/dist/engine/telemetry/error-reporter.js +22 -0
  4. package/dist/engine/telemetry/error-reporter.js.map +1 -1
  5. package/dist/tools/audit-trail-handler.d.ts +6 -2
  6. package/dist/tools/audit-trail-handler.d.ts.map +1 -1
  7. package/dist/tools/audit-trail-handler.js +12 -9
  8. package/dist/tools/audit-trail-handler.js.map +1 -1
  9. package/dist/tools/check-readiness.d.ts +3 -1
  10. package/dist/tools/check-readiness.d.ts.map +1 -1
  11. package/dist/tools/check-readiness.js +9 -1
  12. package/dist/tools/check-readiness.js.map +1 -1
  13. package/dist/tools/data-governance.d.ts +3 -1
  14. package/dist/tools/data-governance.d.ts.map +1 -1
  15. package/dist/tools/data-governance.js +9 -1
  16. package/dist/tools/data-governance.js.map +1 -1
  17. package/dist/tools/register-audit-trail-tools.d.ts.map +1 -1
  18. package/dist/tools/register-audit-trail-tools.js +27 -4
  19. package/dist/tools/register-audit-trail-tools.js.map +1 -1
  20. package/dist/tools/register-backlog-tools.d.ts.map +1 -1
  21. package/dist/tools/register-backlog-tools.js +24 -8
  22. package/dist/tools/register-backlog-tools.js.map +1 -1
  23. package/dist/tools/register-ci-tools.d.ts.map +1 -1
  24. package/dist/tools/register-ci-tools.js +27 -5
  25. package/dist/tools/register-ci-tools.js.map +1 -1
  26. package/dist/tools/register-coverage-tools.d.ts.map +1 -1
  27. package/dist/tools/register-coverage-tools.js +14 -2
  28. package/dist/tools/register-coverage-tools.js.map +1 -1
  29. package/dist/tools/register-domain-criteria-tools.d.ts.map +1 -1
  30. package/dist/tools/register-domain-criteria-tools.js +27 -4
  31. package/dist/tools/register-domain-criteria-tools.js.map +1 -1
  32. package/dist/tools/register-elicitation-tools.d.ts.map +1 -1
  33. package/dist/tools/register-elicitation-tools.js +14 -2
  34. package/dist/tools/register-elicitation-tools.js.map +1 -1
  35. package/dist/tools/register-event-tools.d.ts.map +1 -1
  36. package/dist/tools/register-event-tools.js +14 -2
  37. package/dist/tools/register-event-tools.js.map +1 -1
  38. package/dist/tools/register-federation-tools.d.ts.map +1 -1
  39. package/dist/tools/register-federation-tools.js +27 -4
  40. package/dist/tools/register-federation-tools.js.map +1 -1
  41. package/dist/tools/register-governance-tools.d.ts.map +1 -1
  42. package/dist/tools/register-governance-tools.js +27 -4
  43. package/dist/tools/register-governance-tools.js.map +1 -1
  44. package/dist/tools/register-hooks-tools.d.ts.map +1 -1
  45. package/dist/tools/register-hooks-tools.js +14 -2
  46. package/dist/tools/register-hooks-tools.js.map +1 -1
  47. package/dist/tools/register-infrastructure-tools.d.ts.map +1 -1
  48. package/dist/tools/register-infrastructure-tools.js +17 -2
  49. package/dist/tools/register-infrastructure-tools.js.map +1 -1
  50. package/dist/tools/register-lessons-tools.d.ts.map +1 -1
  51. package/dist/tools/register-lessons-tools.js +12 -4
  52. package/dist/tools/register-lessons-tools.js.map +1 -1
  53. package/dist/tools/register-living-spec-advanced-tools.d.ts.map +1 -1
  54. package/dist/tools/register-living-spec-advanced-tools.js +92 -16
  55. package/dist/tools/register-living-spec-advanced-tools.js.map +1 -1
  56. package/dist/tools/register-living-spec-tools.d.ts.map +1 -1
  57. package/dist/tools/register-living-spec-tools.js +53 -10
  58. package/dist/tools/register-living-spec-tools.js.map +1 -1
  59. package/dist/tools/register-migration-tools.d.ts.map +1 -1
  60. package/dist/tools/register-migration-tools.js +10 -3
  61. package/dist/tools/register-migration-tools.js.map +1 -1
  62. package/dist/tools/register-readiness-tools.d.ts.map +1 -1
  63. package/dist/tools/register-readiness-tools.js +27 -4
  64. package/dist/tools/register-readiness-tools.js.map +1 -1
  65. package/dist/tools/register-scan-tools.js +1 -1
  66. package/dist/tools/register-scan-tools.js.map +1 -1
  67. package/dist/tools/register-scope-tools.d.ts.map +1 -1
  68. package/dist/tools/register-scope-tools.js +27 -4
  69. package/dist/tools/register-scope-tools.js.map +1 -1
  70. package/dist/tools/register-search-tools.d.ts.map +1 -1
  71. package/dist/tools/register-search-tools.js +14 -2
  72. package/dist/tools/register-search-tools.js.map +1 -1
  73. package/dist/tools/register-security-tools.d.ts.map +1 -1
  74. package/dist/tools/register-security-tools.js +14 -2
  75. package/dist/tools/register-security-tools.js.map +1 -1
  76. package/dist/tools/register-spec-observability-tools.d.ts.map +1 -1
  77. package/dist/tools/register-spec-observability-tools.js +14 -2
  78. package/dist/tools/register-spec-observability-tools.js.map +1 -1
  79. package/dist/tools/register-spec-split-tools.d.ts.map +1 -1
  80. package/dist/tools/register-spec-split-tools.js +26 -6
  81. package/dist/tools/register-spec-split-tools.js.map +1 -1
  82. package/dist/tools/register-stack-tools.d.ts.map +1 -1
  83. package/dist/tools/register-stack-tools.js +40 -9
  84. package/dist/tools/register-stack-tools.js.map +1 -1
  85. package/dist/tools/register-team-tools.d.ts.map +1 -1
  86. package/dist/tools/register-team-tools.js +38 -6
  87. package/dist/tools/register-team-tools.js.map +1 -1
  88. package/dist/tools/register-telemetry-tools.d.ts.map +1 -1
  89. package/dist/tools/register-telemetry-tools.js +6 -1
  90. package/dist/tools/register-telemetry-tools.js.map +1 -1
  91. package/dist/tools/register-versioning-tools.d.ts.map +1 -1
  92. package/dist/tools/register-versioning-tools.js +66 -13
  93. package/dist/tools/register-versioning-tools.js.map +1 -1
  94. package/dist/tools/resolve-project-id.d.ts +13 -0
  95. package/dist/tools/resolve-project-id.d.ts.map +1 -0
  96. package/dist/tools/resolve-project-id.js +22 -0
  97. package/dist/tools/resolve-project-id.js.map +1 -0
  98. package/dist/tools/safe-handler.d.ts.map +1 -1
  99. package/dist/tools/safe-handler.js +7 -2
  100. package/dist/tools/safe-handler.js.map +1 -1
  101. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"register-security-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-security-tools.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyB7D"}
1
+ {"version":3,"file":"register-security-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-security-tools.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsC7D"}
@@ -4,6 +4,7 @@ import { z } from 'zod';
4
4
  import { t } from '../i18n/index.js';
5
5
  import { handleSecurityCheck } from './security-check.js';
6
6
  import { safeLicensed } from './safe-handler.js';
7
+ import { resolveProjectId, missingProjectIdError } from './resolve-project-id.js';
7
8
  export function registerSecurityTools(server) {
8
9
  // security_check — SPEC-029
9
10
  server.registerTool('security_check', {
@@ -11,7 +12,12 @@ export function registerSecurityTools(server) {
11
12
  annotations: { readOnlyHint: true },
12
13
  inputSchema: {
13
14
  specId: z.string().max(500).describe('Spec ID to analyze'),
14
- projectId: z.string().max(500).describe('Project ID'),
15
+ projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
16
+ projectPath: z
17
+ .string()
18
+ .max(4096)
19
+ .optional()
20
+ .describe('Absolute path to project root. Derives projectId automatically.'),
15
21
  subcommand: z
16
22
  .enum(['analyze', 'score', 'drift'])
17
23
  .optional()
@@ -22,6 +28,12 @@ export function registerSecurityTools(server) {
22
28
  .optional()
23
29
  .describe('Absolute paths to code files to scan for insecure patterns'),
24
30
  },
25
- }, safeLicensed('security_check', async (args) => handleSecurityCheck(args)));
31
+ }, safeLicensed('security_check', async (args) => {
32
+ const pid = resolveProjectId(args);
33
+ if (!pid) {
34
+ return missingProjectIdError;
35
+ }
36
+ return handleSecurityCheck({ ...args, projectId: pid });
37
+ }));
26
38
  }
27
39
  //# sourceMappingURL=register-security-tools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"register-security-tools.js","sourceRoot":"","sources":["../../src/tools/register-security-tools.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,oFAAoF;AAGpF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,CAAC,EAAE,MAAM,kBAAkB,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,UAAU,qBAAqB,CAAC,MAAiB;IACrD,4BAA4B;IAC5B,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,WAAW,EAAE,CAAC,CAAC,kCAAkC,CAAC;QAClD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QACnC,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YAC1D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;YACrD,UAAU,EAAE,CAAC;iBACV,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;iBACnC,QAAQ,EAAE;iBACV,QAAQ,CACP,kHAAkH,CACnH;YACH,SAAS,EAAE,CAAC;iBACT,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;iBAC3B,GAAG,CAAC,IAAI,CAAC;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,4DAA4D,CAAC;SAC1E;KACF,EACD,YAAY,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAC1E,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"register-security-tools.js","sourceRoot":"","sources":["../../src/tools/register-security-tools.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,oFAAoF;AAGpF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,CAAC,EAAE,MAAM,kBAAkB,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAElF,MAAM,UAAU,qBAAqB,CAAC,MAAiB;IACrD,4BAA4B;IAC5B,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,WAAW,EAAE,CAAC,CAAC,kCAAkC,CAAC;QAClD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QACnC,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YAC1D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;YAC1F,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,GAAG,CAAC,IAAI,CAAC;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,iEAAiE,CAAC;YAC9E,UAAU,EAAE,CAAC;iBACV,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;iBACnC,QAAQ,EAAE;iBACV,QAAQ,CACP,kHAAkH,CACnH;YACH,SAAS,EAAE,CAAC;iBACT,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;iBAC3B,GAAG,CAAC,IAAI,CAAC;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,4DAA4D,CAAC;SAC1E;KACF,EACD,YAAY,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC5C,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAoD,CAAC,CAAC;QACnF,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,qBAAqB,CAAC;QAC/B,CAAC;QACD,OAAO,mBAAmB,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,EAEhD,CAAC,CAAC;IACR,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"register-spec-observability-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-spec-observability-tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8BtE"}
1
+ {"version":3,"file":"register-spec-observability-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-spec-observability-tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuCtE"}
@@ -1,13 +1,19 @@
1
1
  import { z } from 'zod';
2
2
  import { handleSpecUsageReport } from './spec-usage-report.js';
3
3
  import { safeLicensed } from './safe-handler.js';
4
+ import { resolveProjectId, missingProjectIdError } from './resolve-project-id.js';
4
5
  export function registerSpecObservabilityTools(server) {
5
6
  server.registerTool('spec_usage_report', {
6
7
  description: 'Generate a spec observability report showing which specs agents are actively using. ' +
7
8
  'Identifies hot specs (frequently accessed), cold specs (approved but forgotten), ' +
8
9
  'AC hotspots, and the tool-to-spec usage matrix. Useful for gap analysis and team focus.',
9
10
  inputSchema: {
10
- projectId: z.string().min(1).max(500).describe('Project ID (from init_project)'),
11
+ projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
12
+ projectPath: z
13
+ .string()
14
+ .max(4096)
15
+ .optional()
16
+ .describe('Absolute path to project root. Derives projectId automatically.'),
11
17
  specId: z
12
18
  .string()
13
19
  .max(50)
@@ -19,6 +25,12 @@ export function registerSpecObservabilityTools(server) {
19
25
  .describe('Time window for the report. Options: day | week | month | all. Defaults to week.'),
20
26
  },
21
27
  annotations: { title: 'Spec Usage Report', readOnlyHint: true },
22
- }, safeLicensed('spec_usage_report', async (args) => handleSpecUsageReport(args)));
28
+ }, safeLicensed('spec_usage_report', async (args) => {
29
+ const pid = resolveProjectId(args);
30
+ if (!pid) {
31
+ return missingProjectIdError;
32
+ }
33
+ return handleSpecUsageReport({ ...args, projectId: pid });
34
+ }));
23
35
  }
24
36
  //# sourceMappingURL=register-spec-observability-tools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"register-spec-observability-tools.js","sourceRoot":"","sources":["../../src/tools/register-spec-observability-tools.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,UAAU,8BAA8B,CAAC,MAAiB;IAC9D,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,WAAW,EACT,sFAAsF;YACtF,mFAAmF;YACnF,yFAAyF;QAC3F,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,gCAAgC,CAAC;YAChF,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,GAAG,CAAC,EAAE,CAAC;iBACP,QAAQ,EAAE;iBACV,QAAQ,CACP,wGAAwG,CACzG;YACH,MAAM,EAAE,CAAC;iBACN,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;iBACrC,QAAQ,EAAE;iBACV,QAAQ,CACP,kFAAkF,CACnF;SACJ;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,IAAI,EAAE;KAChE,EACD,YAAY,CAAC,mBAAmB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAC/C,qBAAqB,CAAC,IAA4B,CAAC,CACpD,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"register-spec-observability-tools.js","sourceRoot":"","sources":["../../src/tools/register-spec-observability-tools.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAElF,MAAM,UAAU,8BAA8B,CAAC,MAAiB;IAC9D,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,WAAW,EACT,sFAAsF;YACtF,mFAAmF;YACnF,yFAAyF;QAC3F,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;YAC1F,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,GAAG,CAAC,IAAI,CAAC;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,iEAAiE,CAAC;YAC9E,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,GAAG,CAAC,EAAE,CAAC;iBACP,QAAQ,EAAE;iBACV,QAAQ,CACP,wGAAwG,CACzG;YACH,MAAM,EAAE,CAAC;iBACN,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;iBACrC,QAAQ,EAAE;iBACV,QAAQ,CACP,kFAAkF,CACnF;SACJ;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,IAAI,EAAE;KAChE,EACD,YAAY,CAAC,mBAAmB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC/C,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAoD,CAAC,CAAC;QACnF,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,qBAAqB,CAAC;QAC/B,CAAC;QACD,OAAO,qBAAqB,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,EAA0B,CAAC,CAAC;IACpF,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"register-spec-split-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-spec-split-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8D9D"}
1
+ {"version":3,"file":"register-spec-split-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-spec-split-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqF9D"}
@@ -2,6 +2,7 @@
2
2
  import { z } from 'zod';
3
3
  import { safeLicensed } from './safe-handler.js';
4
4
  import { handleAnalyzeSpecSize, handleSplitSpec } from './spec-split-handler.js';
5
+ import { resolveProjectId, missingProjectIdError } from './resolve-project-id.js';
5
6
  export function registerSpecSplitTools(server) {
6
7
  // analyze_spec_size — read-only, free tier
7
8
  server.registerTool('analyze_spec_size', {
@@ -12,13 +13,21 @@ export function registerSpecSplitTools(server) {
12
13
  'Returns a SpecSizeAnalysis with shouldSplit flag, reasons, and suggestedSplits.',
13
14
  annotations: { readOnlyHint: true },
14
15
  inputSchema: {
15
- projectId: z
16
+ projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
17
+ projectPath: z
16
18
  .string()
17
- .max(500)
18
- .describe('Project ID that owns the spec (from init_project or list_specs)'),
19
+ .max(4096)
20
+ .optional()
21
+ .describe('Absolute path to project root. Derives projectId automatically.'),
19
22
  specId: z.string().max(500).describe('Spec ID to analyze (e.g. SPEC-042)'),
20
23
  },
21
- }, safeLicensed('analyze_spec_size', async (args) => handleAnalyzeSpecSize(args)));
24
+ }, safeLicensed('analyze_spec_size', async (args) => {
25
+ const pid = resolveProjectId(args);
26
+ if (!pid) {
27
+ return missingProjectIdError;
28
+ }
29
+ return handleAnalyzeSpecSize({ ...args, projectId: pid });
30
+ }));
22
31
  // split_spec — destructive (creates new specs and modifies original), pro tier
23
32
  server.registerTool('split_spec', {
24
33
  description: 'Execute the division of a large spec into smaller child specs. ' +
@@ -30,7 +39,12 @@ export function registerSpecSplitTools(server) {
30
39
  'DESTRUCTIVE: modifies the original spec status to "superseded".',
31
40
  annotations: { destructiveHint: true },
32
41
  inputSchema: {
33
- projectId: z.string().max(500).describe('Project ID that owns the spec'),
42
+ projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
43
+ projectPath: z
44
+ .string()
45
+ .max(4096)
46
+ .optional()
47
+ .describe('Absolute path to project root. Derives projectId automatically.'),
34
48
  specId: z.string().max(500).describe('Spec ID to split (e.g. SPEC-042)'),
35
49
  proposedSplits: z
36
50
  .array(z.object({
@@ -46,6 +60,12 @@ export function registerSpecSplitTools(server) {
46
60
  .optional()
47
61
  .describe('Custom split proposals. If omitted, uses auto-generated proposals from analyze_spec_size.'),
48
62
  },
49
- }, safeLicensed('split_spec', async (args) => handleSplitSpec(args)));
63
+ }, safeLicensed('split_spec', async (args) => {
64
+ const pid = resolveProjectId(args);
65
+ if (!pid) {
66
+ return missingProjectIdError;
67
+ }
68
+ return handleSplitSpec({ ...args, projectId: pid });
69
+ }));
50
70
  }
51
71
  //# sourceMappingURL=register-spec-split-tools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"register-spec-split-tools.js","sourceRoot":"","sources":["../../src/tools/register-spec-split-tools.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAG7F,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAEjF,MAAM,UAAU,sBAAsB,CAAC,MAAiB;IACtD,2CAA2C;IAC3C,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,WAAW,EACT,qFAAqF;YACrF,8BAA8B;YAC9B,4FAA4F;YAC5F,0FAA0F;YAC1F,iFAAiF;QACnF,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QACnC,WAAW,EAAE;YACX,SAAS,EAAE,CAAC;iBACT,MAAM,EAAE;iBACR,GAAG,CAAC,GAAG,CAAC;iBACR,QAAQ,CAAC,iEAAiE,CAAC;YAC9E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,oCAAoC,CAAC;SAC3E;KACF,EACD,YAAY,CAAC,mBAAmB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAC/E,CAAC;IAEF,+EAA+E;IAC/E,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,WAAW,EACT,iEAAiE;YACjE,8EAA8E;YAC9E,kEAAkE;YAClE,qEAAqE;YACrE,qFAAqF;YACrF,2CAA2C;YAC3C,iEAAiE;QACnE,WAAW,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE;QACtC,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;YACxE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC;YACxE,cAAc,EAAE,CAAC;iBACd,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;gBACP,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;gBAC/D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,sCAAsC,CAAC;gBAClF,eAAe,EAAE,CAAC;qBACf,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;qBAC9B,QAAQ,CACP,0FAA0F,CAC3F;gBACH,SAAS,EAAE,CAAC;qBACT,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;qBAC9B,QAAQ,CAAC,uEAAuE,CAAC;aACrF,CAAC,CACH;iBACA,QAAQ,EAAE;iBACV,QAAQ,CACP,2FAA2F,CAC5F;SACJ;KACF,EACD,YAAY,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAClE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"register-spec-split-tools.js","sourceRoot":"","sources":["../../src/tools/register-spec-split-tools.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"register-stack-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-stack-tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoF1D"}
1
+ {"version":3,"file":"register-stack-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-stack-tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwH1D"}
@@ -3,14 +3,19 @@ import { handleAuditStack } from './audit-stack.js';
3
3
  import { handlePlanUpgrade } from './plan-upgrade.js';
4
4
  import { handleDetectDeprecations } from './detect-deprecations.js';
5
5
  import { safeLicensed } from './safe-handler.js';
6
+ import { resolveProjectId, missingProjectIdError } from './resolve-project-id.js';
6
7
  export function registerStackTools(server) {
7
8
  // audit_stack — SPEC-041
8
9
  server.registerTool('audit_stack', {
9
10
  description: 'Audit all project dependencies, classify as up_to_date/outdated/vulnerable/unmaintained, and generate a StackHealthScore (0-100).',
10
11
  annotations: { readOnlyHint: true },
11
12
  inputSchema: {
12
- projectId: z.string().max(500).describe('Project ID'),
13
- projectPath: z.string().max(4096).describe('Absolute path to the project root'),
13
+ projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
14
+ projectPath: z
15
+ .string()
16
+ .max(4096)
17
+ .optional()
18
+ .describe('Absolute path to project root. Derives projectId automatically.'),
14
19
  format: z
15
20
  .enum(['summary', 'json'])
16
21
  .optional()
@@ -26,14 +31,24 @@ export function registerStackTools(server) {
26
31
  .describe('Set isError=true if score drops below threshold (for CI usage)'),
27
32
  ci: z.boolean().optional().describe('CI mode — exit with error on critical findings'),
28
33
  },
29
- }, safeLicensed('audit_stack', async (args) => handleAuditStack(args)));
34
+ }, safeLicensed('audit_stack', async (args) => {
35
+ const pid = resolveProjectId(args);
36
+ if (!pid) {
37
+ return missingProjectIdError;
38
+ }
39
+ return handleAuditStack({ ...args, projectId: pid });
40
+ }));
30
41
  // plan_upgrade — SPEC-041
31
42
  server.registerTool('plan_upgrade', {
32
43
  description: 'Generate a migration plan for upgrading a specific package, including breaking changes, estimated effort, and rollback procedure.',
33
44
  annotations: { readOnlyHint: true },
34
45
  inputSchema: {
35
- projectId: z.string().max(500).describe('Project ID'),
36
- projectPath: z.string().max(4096).describe('Absolute path to the project root'),
46
+ projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
47
+ projectPath: z
48
+ .string()
49
+ .max(4096)
50
+ .optional()
51
+ .describe('Absolute path to project root. Derives projectId automatically.'),
37
52
  packageName: z
38
53
  .string()
39
54
  .max(500)
@@ -50,14 +65,24 @@ export function registerStackTools(server) {
50
65
  .optional()
51
66
  .describe('Output format: summary (default) or json'),
52
67
  },
53
- }, safeLicensed('plan_upgrade', async (args) => handlePlanUpgrade(args)));
68
+ }, safeLicensed('plan_upgrade', async (args) => {
69
+ const pid = resolveProjectId(args);
70
+ if (!pid) {
71
+ return missingProjectIdError;
72
+ }
73
+ return handlePlanUpgrade({ ...args, projectId: pid });
74
+ }));
54
75
  // detect_deprecations — SPEC-041
55
76
  server.registerTool('detect_deprecations', {
56
77
  description: 'Scan project source files for deprecated API patterns (pattern-based, no network). Returns a deprecation report with tech-debt estimate.',
57
78
  annotations: { readOnlyHint: true },
58
79
  inputSchema: {
59
- projectId: z.string().max(500).describe('Project ID'),
60
- projectPath: z.string().max(4096).describe('Absolute path to the project root'),
80
+ projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
81
+ projectPath: z
82
+ .string()
83
+ .max(4096)
84
+ .optional()
85
+ .describe('Absolute path to project root. Derives projectId automatically.'),
61
86
  ecosystem: z
62
87
  .enum(['nodejs', 'python', 'browser', 'go', 'java', 'rust', 'dotnet'])
63
88
  .optional()
@@ -67,6 +92,12 @@ export function registerStackTools(server) {
67
92
  .optional()
68
93
  .describe('Output format: summary (default) or json'),
69
94
  },
70
- }, safeLicensed('detect_deprecations', async (args) => handleDetectDeprecations(args)));
95
+ }, safeLicensed('detect_deprecations', async (args) => {
96
+ const pid = resolveProjectId(args);
97
+ if (!pid) {
98
+ return missingProjectIdError;
99
+ }
100
+ return handleDetectDeprecations({ ...args, projectId: pid });
101
+ }));
71
102
  }
72
103
  //# sourceMappingURL=register-stack-tools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"register-stack-tools.js","sourceRoot":"","sources":["../../src/tools/register-stack-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"register-stack-tools.js","sourceRoot":"","sources":["../../src/tools/register-stack-tools.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"register-team-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-team-tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAezE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsGzD"}
1
+ {"version":3,"file":"register-team-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-team-tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAgBzE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmIzD"}
@@ -3,12 +3,18 @@ import { handlePlanTeamDistribution } from './plan-team-distribution.js';
3
3
  import { handleGenerateTeammatePrompt, handleGenerateLayerPrompts, } from './generate-teammate-prompt.js';
4
4
  import { handleValidateTeamResults } from './validate-team-results.js';
5
5
  import { safeLicensed } from './safe-handler.js';
6
+ import { resolveProjectId, missingProjectIdError } from './resolve-project-id.js';
6
7
  export function registerTeamTools(server) {
7
8
  server.registerTool('plan_team_distribution', {
8
9
  description: 'Plan how to distribute approved specs across a team of Claude Code agents. ' +
9
10
  'Detects file conflicts, assigns ownership, and produces phased execution order.',
10
11
  inputSchema: {
11
- projectId: z.string().max(500).describe('Project identifier'),
12
+ projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
13
+ projectPath: z
14
+ .string()
15
+ .max(4096)
16
+ .optional()
17
+ .describe('Absolute path to project root. Derives projectId automatically.'),
12
18
  specIds: z
13
19
  .array(z.string().max(500))
14
20
  .max(100)
@@ -20,14 +26,25 @@ export function registerTeamTools(server) {
20
26
  .describe('Template ID: parallel-specs | implement-and-test. Defaults to parallel-specs.'),
21
27
  },
22
28
  annotations: { readOnlyHint: false },
23
- }, safeLicensed('plan_team_distribution', async (args) => handlePlanTeamDistribution(args)));
29
+ }, safeLicensed('plan_team_distribution', async (args) => {
30
+ const pid = resolveProjectId(args);
31
+ if (!pid) {
32
+ return missingProjectIdError;
33
+ }
34
+ return handlePlanTeamDistribution({ ...args, projectId: pid });
35
+ }));
24
36
  server.registerTool('generate_teammate_prompt', {
25
37
  description: 'Generate structured agent prompts for an Agent Team. Two modes: ' +
26
38
  '(1) Spec mode — provide specId + teammateName + assignedFiles + role to generate a prompt for a specific spec and teammate. ' +
27
39
  '(2) Layer mode — provide only projectId (and optional layer) to generate prompts for each detected architecture layer (frontend, backend, engine, storage, etc.). ' +
28
40
  'Layer mode includes file ownership, stack-specific conventions, and quality gates per layer.',
29
41
  inputSchema: {
30
- projectId: z.string().max(500).describe('Project identifier'),
42
+ projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
43
+ projectPath: z
44
+ .string()
45
+ .max(4096)
46
+ .optional()
47
+ .describe('Absolute path to project root. Derives projectId automatically.'),
31
48
  specId: z
32
49
  .string()
33
50
  .max(500)
@@ -55,7 +72,11 @@ export function registerTeamTools(server) {
55
72
  },
56
73
  annotations: { readOnlyHint: true },
57
74
  }, safeLicensed('generate_teammate_prompt', async (args) => {
58
- const typedArgs = args;
75
+ const pid = resolveProjectId(args);
76
+ if (!pid) {
77
+ return missingProjectIdError;
78
+ }
79
+ const typedArgs = { ...args, projectId: pid };
59
80
  // Layer mode: specId not provided
60
81
  if (!typedArgs.specId) {
61
82
  return handleGenerateLayerPrompts({
@@ -69,7 +90,12 @@ export function registerTeamTools(server) {
69
90
  description: 'Validate the combined results from all teammates after parallel execution. ' +
70
91
  'Checks for file conflicts, criteria coverage, and recommends merge order.',
71
92
  inputSchema: {
72
- projectId: z.string().max(500).describe('Project identifier'),
93
+ projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
94
+ projectPath: z
95
+ .string()
96
+ .max(4096)
97
+ .optional()
98
+ .describe('Absolute path to project root. Derives projectId automatically.'),
73
99
  specIds: z.array(z.string().max(500)).max(100).describe('Spec IDs that were distributed'),
74
100
  teammateNames: z
75
101
  .array(z.string().max(500))
@@ -77,6 +103,12 @@ export function registerTeamTools(server) {
77
103
  .describe('Names of teammates whose results to validate'),
78
104
  },
79
105
  annotations: { readOnlyHint: true },
80
- }, safeLicensed('validate_team_results', async (args) => handleValidateTeamResults(args)));
106
+ }, safeLicensed('validate_team_results', async (args) => {
107
+ const pid = resolveProjectId(args);
108
+ if (!pid) {
109
+ return missingProjectIdError;
110
+ }
111
+ return handleValidateTeamResults({ ...args, projectId: pid });
112
+ }));
81
113
  }
82
114
  //# sourceMappingURL=register-team-tools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"register-team-tools.js","sourceRoot":"","sources":["../../src/tools/register-team-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"register-team-tools.js","sourceRoot":"","sources":["../../src/tools/register-team-tools.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"register-telemetry-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-telemetry-tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuB9D"}
1
+ {"version":3,"file":"register-telemetry-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-telemetry-tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA4B9D"}
@@ -8,7 +8,12 @@ export function registerTelemetryTools(server) {
8
8
  '(tool names, stack info) — no paths, emails, or personal data. ' +
9
9
  'A random installation ID is generated locally and is the only identifier used.',
10
10
  inputSchema: {
11
- projectId: z.string().min(1).describe('Project ID (used for context only).'),
11
+ projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
12
+ projectPath: z
13
+ .string()
14
+ .max(4096)
15
+ .optional()
16
+ .describe('Absolute path to project root. Derives projectId automatically.'),
12
17
  action: z
13
18
  .enum(['enable', 'disable', 'status'])
14
19
  .describe('Action to perform: "enable" to opt in, "disable" to opt out, "status" to check current state.'),
@@ -1 +1 @@
1
- {"version":3,"file":"register-telemetry-tools.js","sourceRoot":"","sources":["../../src/tools/register-telemetry-tools.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAGpE,MAAM,UAAU,sBAAsB,CAAC,MAAiB;IACtD,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,WAAW,EACT,sEAAsE;YACtE,kFAAkF;YAClF,iEAAiE;YACjE,gFAAgF;QAClF,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,qCAAqC,CAAC;YAC5E,MAAM,EAAE,CAAC;iBACN,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;iBACrC,QAAQ,CACP,+FAA+F,CAChG;SACJ;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE,YAAY,EAAE,KAAK,EAAE;KACnE,EACD,WAAW,CAAC,qBAAqB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAChD,wBAAwB,CAAC,IAA+B,CAAC,CAC1D,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"register-telemetry-tools.js","sourceRoot":"","sources":["../../src/tools/register-telemetry-tools.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAGpE,MAAM,UAAU,sBAAsB,CAAC,MAAiB;IACtD,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,WAAW,EACT,sEAAsE;YACtE,kFAAkF;YAClF,iEAAiE;YACjE,gFAAgF;QAClF,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;YAC1F,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,GAAG,CAAC,IAAI,CAAC;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,iEAAiE,CAAC;YAC9E,MAAM,EAAE,CAAC;iBACN,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;iBACrC,QAAQ,CACP,+FAA+F,CAChG;SACJ;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE,YAAY,EAAE,KAAK,EAAE;KACnE,EACD,WAAW,CAAC,qBAAqB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAChD,wBAAwB,CAAC,IAA+B,CAAC,CAC1D,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"register-versioning-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-versioning-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoL/D"}
1
+ {"version":3,"file":"register-versioning-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-versioning-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkP/D"}
@@ -5,6 +5,7 @@ import { handleVersionSpec } from './version-spec.js';
5
5
  import { handleBranchSpec } from './branch-spec.js';
6
6
  import { handleMergeSpecBranch } from './merge-spec-branch.js';
7
7
  import { handleDiffSpecVersions, handleSpecVersionHistory } from './spec-diff-handler.js';
8
+ import { resolveProjectId, missingProjectIdError } from './resolve-project-id.js';
8
9
  export function registerVersioningTools(server) {
9
10
  // version_spec — Create a tagged version snapshot of a spec
10
11
  server.registerTool('version_spec', {
@@ -13,7 +14,12 @@ export function registerVersioningTools(server) {
13
14
  'Uses semantic versioning (vMAJOR.MINOR.PATCH). Tag is auto-incremented if not specified.',
14
15
  annotations: { title: 'Version Spec' },
15
16
  inputSchema: {
16
- projectId: z.string().max(500).describe('Project ID'),
17
+ projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
18
+ projectPath: z
19
+ .string()
20
+ .max(4096)
21
+ .optional()
22
+ .describe('Absolute path to project root. Derives projectId automatically.'),
17
23
  specId: z.string().max(500).describe('Spec ID to snapshot (e.g., "SPEC-042")'),
18
24
  tag: z
19
25
  .string()
@@ -33,7 +39,13 @@ export function registerVersioningTools(server) {
33
39
  .optional()
34
40
  .describe('Absolute path to the spec.md file to snapshot its content'),
35
41
  },
36
- }, safeLicensed('version_spec', async (args) => handleVersionSpec(args)));
42
+ }, safeLicensed('version_spec', async (args) => {
43
+ const pid = resolveProjectId(args);
44
+ if (!pid) {
45
+ return missingProjectIdError;
46
+ }
47
+ return handleVersionSpec({ ...args, projectId: pid });
48
+ }));
37
49
  // branch_spec — Create a spec branch for experimentation
38
50
  server.registerTool('branch_spec', {
39
51
  description: 'Create a spec branch for experimentation — try alternative approaches without affecting the main spec. ' +
@@ -41,7 +53,12 @@ export function registerVersioningTools(server) {
41
53
  'Branch name must be lowercase kebab-case (e.g., "auth-refactor", "alt-design-v2").',
42
54
  annotations: { title: 'Branch Spec' },
43
55
  inputSchema: {
44
- projectId: z.string().max(500).describe('Project ID'),
56
+ projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
57
+ projectPath: z
58
+ .string()
59
+ .max(4096)
60
+ .optional()
61
+ .describe('Absolute path to project root. Derives projectId automatically.'),
45
62
  specId: z.string().max(500).describe('Spec ID to branch (e.g., "SPEC-042")'),
46
63
  branchName: z
47
64
  .string()
@@ -59,7 +76,13 @@ export function registerVersioningTools(server) {
59
76
  .optional()
60
77
  .describe('Absolute path to the spec.md file to use as branch starting content'),
61
78
  },
62
- }, safeLicensed('branch_spec', async (args) => handleBranchSpec(args)));
79
+ }, safeLicensed('branch_spec', async (args) => {
80
+ const pid = resolveProjectId(args);
81
+ if (!pid) {
82
+ return missingProjectIdError;
83
+ }
84
+ return handleBranchSpec({ ...args, projectId: pid });
85
+ }));
63
86
  // merge_spec_branch — Merge a spec branch back into main
64
87
  server.registerTool('merge_spec_branch', {
65
88
  description: 'Merge an experimental spec branch back into the main spec. ' +
@@ -68,7 +91,12 @@ export function registerVersioningTools(server) {
68
91
  'Optionally provide resolvedContent if you have already resolved conflicts manually.',
69
92
  annotations: { title: 'Merge Spec Branch' },
70
93
  inputSchema: {
71
- projectId: z.string().max(500).describe('Project ID'),
94
+ projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
95
+ projectPath: z
96
+ .string()
97
+ .max(4096)
98
+ .optional()
99
+ .describe('Absolute path to project root. Derives projectId automatically.'),
72
100
  specId: z.string().max(500).describe('Spec ID to merge into (e.g., "SPEC-042")'),
73
101
  branchName: z.string().max(100).describe('Name of the branch to merge (must exist)'),
74
102
  resolvedContent: z
@@ -89,7 +117,13 @@ export function registerVersioningTools(server) {
89
117
  .optional()
90
118
  .describe('Merge commit message describing what was merged'),
91
119
  },
92
- }, safeLicensed('merge_spec_branch', async (args) => handleMergeSpecBranch(args)));
120
+ }, safeLicensed('merge_spec_branch', async (args) => {
121
+ const pid = resolveProjectId(args);
122
+ if (!pid) {
123
+ return missingProjectIdError;
124
+ }
125
+ return handleMergeSpecBranch({ ...args, projectId: pid });
126
+ }));
93
127
  // diff_spec_versions — Compare two version snapshots of a spec
94
128
  server.registerTool('diff_spec_versions', {
95
129
  description: 'Compare two tagged version snapshots of a spec to see exactly what changed. ' +
@@ -98,11 +132,13 @@ export function registerVersioningTools(server) {
98
132
  'If only toVersion is omitted, it defaults to the latest snapshot.',
99
133
  annotations: { title: 'Diff Spec Versions', readOnlyHint: true },
100
134
  inputSchema: {
101
- projectId: z.string().max(500).describe('Project ID'),
102
- specId: z
135
+ projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
136
+ projectPath: z
103
137
  .string()
104
- .max(500)
105
- .describe('Spec ID to diff (e.g., "SPEC-042")'),
138
+ .max(4096)
139
+ .optional()
140
+ .describe('Absolute path to project root. Derives projectId automatically.'),
141
+ specId: z.string().max(500).describe('Spec ID to diff (e.g., "SPEC-042")'),
106
142
  fromVersion: z
107
143
  .string()
108
144
  .max(50)
@@ -120,7 +156,13 @@ export function registerVersioningTools(server) {
120
156
  .optional()
121
157
  .describe('Output format. Valid values: "text" (default, +/- line diff) | "json" (structured object).'),
122
158
  },
123
- }, safeLicensed('diff_spec_versions', async (args) => handleDiffSpecVersions(args)));
159
+ }, safeLicensed('diff_spec_versions', async (args) => {
160
+ const pid = resolveProjectId(args);
161
+ if (!pid) {
162
+ return missingProjectIdError;
163
+ }
164
+ return handleDiffSpecVersions({ ...args, projectId: pid });
165
+ }));
124
166
  // spec_version_history — List all version snapshots with timestamps and change summaries
125
167
  server.registerTool('spec_version_history', {
126
168
  description: 'List all tagged version snapshots of a spec with their timestamps, authors, and ' +
@@ -130,7 +172,12 @@ export function registerVersioningTools(server) {
130
172
  'Note: for changelog history (criteria changes, status transitions) use spec_history instead.',
131
173
  annotations: { title: 'Spec Version History', readOnlyHint: true },
132
174
  inputSchema: {
133
- projectId: z.string().max(500).describe('Project ID'),
175
+ projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
176
+ projectPath: z
177
+ .string()
178
+ .max(4096)
179
+ .optional()
180
+ .describe('Absolute path to project root. Derives projectId automatically.'),
134
181
  specId: z
135
182
  .string()
136
183
  .max(500)
@@ -143,6 +190,12 @@ export function registerVersioningTools(server) {
143
190
  .optional()
144
191
  .describe('Maximum number of versions to return (default: 20, max: 100)'),
145
192
  },
146
- }, safeLicensed('spec_version_history', async (args) => handleSpecVersionHistory(args)));
193
+ }, safeLicensed('spec_version_history', async (args) => {
194
+ const pid = resolveProjectId(args);
195
+ if (!pid) {
196
+ return missingProjectIdError;
197
+ }
198
+ return handleSpecVersionHistory({ ...args, projectId: pid });
199
+ }));
147
200
  }
148
201
  //# sourceMappingURL=register-versioning-tools.js.map