@planu/cli 0.92.0 → 0.94.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 (116) hide show
  1. package/dist/config/license-plans.json +1 -0
  2. package/dist/engine/telemetry/error-reporter.d.ts +6 -0
  3. package/dist/engine/telemetry/error-reporter.d.ts.map +1 -1
  4. package/dist/engine/telemetry/error-reporter.js +22 -0
  5. package/dist/engine/telemetry/error-reporter.js.map +1 -1
  6. package/dist/engine/token-savings-calculator.d.ts +3 -0
  7. package/dist/engine/token-savings-calculator.d.ts.map +1 -0
  8. package/dist/engine/token-savings-calculator.js +115 -0
  9. package/dist/engine/token-savings-calculator.js.map +1 -0
  10. package/dist/tools/audit-trail-handler.d.ts +6 -2
  11. package/dist/tools/audit-trail-handler.d.ts.map +1 -1
  12. package/dist/tools/audit-trail-handler.js +12 -9
  13. package/dist/tools/audit-trail-handler.js.map +1 -1
  14. package/dist/tools/check-readiness.d.ts +3 -1
  15. package/dist/tools/check-readiness.d.ts.map +1 -1
  16. package/dist/tools/check-readiness.js +9 -1
  17. package/dist/tools/check-readiness.js.map +1 -1
  18. package/dist/tools/data-governance.d.ts +3 -1
  19. package/dist/tools/data-governance.d.ts.map +1 -1
  20. package/dist/tools/data-governance.js +9 -1
  21. package/dist/tools/data-governance.js.map +1 -1
  22. package/dist/tools/register-audit-trail-tools.d.ts.map +1 -1
  23. package/dist/tools/register-audit-trail-tools.js +27 -4
  24. package/dist/tools/register-audit-trail-tools.js.map +1 -1
  25. package/dist/tools/register-backlog-tools.d.ts.map +1 -1
  26. package/dist/tools/register-backlog-tools.js +24 -8
  27. package/dist/tools/register-backlog-tools.js.map +1 -1
  28. package/dist/tools/register-ci-tools.d.ts.map +1 -1
  29. package/dist/tools/register-ci-tools.js +27 -5
  30. package/dist/tools/register-ci-tools.js.map +1 -1
  31. package/dist/tools/register-coverage-tools.d.ts.map +1 -1
  32. package/dist/tools/register-coverage-tools.js +14 -2
  33. package/dist/tools/register-coverage-tools.js.map +1 -1
  34. package/dist/tools/register-domain-criteria-tools.d.ts.map +1 -1
  35. package/dist/tools/register-domain-criteria-tools.js +27 -4
  36. package/dist/tools/register-domain-criteria-tools.js.map +1 -1
  37. package/dist/tools/register-elicitation-tools.d.ts.map +1 -1
  38. package/dist/tools/register-elicitation-tools.js +14 -2
  39. package/dist/tools/register-elicitation-tools.js.map +1 -1
  40. package/dist/tools/register-event-tools.d.ts.map +1 -1
  41. package/dist/tools/register-event-tools.js +14 -2
  42. package/dist/tools/register-event-tools.js.map +1 -1
  43. package/dist/tools/register-federation-tools.d.ts.map +1 -1
  44. package/dist/tools/register-federation-tools.js +27 -4
  45. package/dist/tools/register-federation-tools.js.map +1 -1
  46. package/dist/tools/register-governance-tools.d.ts.map +1 -1
  47. package/dist/tools/register-governance-tools.js +27 -4
  48. package/dist/tools/register-governance-tools.js.map +1 -1
  49. package/dist/tools/register-hooks-tools.d.ts.map +1 -1
  50. package/dist/tools/register-hooks-tools.js +14 -2
  51. package/dist/tools/register-hooks-tools.js.map +1 -1
  52. package/dist/tools/register-infrastructure-tools.d.ts.map +1 -1
  53. package/dist/tools/register-infrastructure-tools.js +17 -2
  54. package/dist/tools/register-infrastructure-tools.js.map +1 -1
  55. package/dist/tools/register-lessons-tools.d.ts.map +1 -1
  56. package/dist/tools/register-lessons-tools.js +12 -4
  57. package/dist/tools/register-lessons-tools.js.map +1 -1
  58. package/dist/tools/register-living-spec-advanced-tools.d.ts.map +1 -1
  59. package/dist/tools/register-living-spec-advanced-tools.js +92 -16
  60. package/dist/tools/register-living-spec-advanced-tools.js.map +1 -1
  61. package/dist/tools/register-living-spec-tools.d.ts.map +1 -1
  62. package/dist/tools/register-living-spec-tools.js +53 -10
  63. package/dist/tools/register-living-spec-tools.js.map +1 -1
  64. package/dist/tools/register-migration-tools.d.ts.map +1 -1
  65. package/dist/tools/register-migration-tools.js +10 -3
  66. package/dist/tools/register-migration-tools.js.map +1 -1
  67. package/dist/tools/register-readiness-tools.d.ts.map +1 -1
  68. package/dist/tools/register-readiness-tools.js +27 -4
  69. package/dist/tools/register-readiness-tools.js.map +1 -1
  70. package/dist/tools/register-scan-tools.js +1 -1
  71. package/dist/tools/register-scan-tools.js.map +1 -1
  72. package/dist/tools/register-scope-tools.d.ts.map +1 -1
  73. package/dist/tools/register-scope-tools.js +27 -4
  74. package/dist/tools/register-scope-tools.js.map +1 -1
  75. package/dist/tools/register-search-tools.d.ts.map +1 -1
  76. package/dist/tools/register-search-tools.js +14 -2
  77. package/dist/tools/register-search-tools.js.map +1 -1
  78. package/dist/tools/register-security-tools.d.ts.map +1 -1
  79. package/dist/tools/register-security-tools.js +14 -2
  80. package/dist/tools/register-security-tools.js.map +1 -1
  81. package/dist/tools/register-spec-observability-tools.d.ts.map +1 -1
  82. package/dist/tools/register-spec-observability-tools.js +14 -2
  83. package/dist/tools/register-spec-observability-tools.js.map +1 -1
  84. package/dist/tools/register-spec-split-tools.d.ts.map +1 -1
  85. package/dist/tools/register-spec-split-tools.js +26 -6
  86. package/dist/tools/register-spec-split-tools.js.map +1 -1
  87. package/dist/tools/register-stack-tools.d.ts.map +1 -1
  88. package/dist/tools/register-stack-tools.js +40 -9
  89. package/dist/tools/register-stack-tools.js.map +1 -1
  90. package/dist/tools/register-team-tools.d.ts.map +1 -1
  91. package/dist/tools/register-team-tools.js +38 -6
  92. package/dist/tools/register-team-tools.js.map +1 -1
  93. package/dist/tools/register-telemetry-tools.d.ts.map +1 -1
  94. package/dist/tools/register-telemetry-tools.js +6 -1
  95. package/dist/tools/register-telemetry-tools.js.map +1 -1
  96. package/dist/tools/register-token-tools.d.ts.map +1 -1
  97. package/dist/tools/register-token-tools.js +18 -0
  98. package/dist/tools/register-token-tools.js.map +1 -1
  99. package/dist/tools/register-versioning-tools.d.ts.map +1 -1
  100. package/dist/tools/register-versioning-tools.js +66 -13
  101. package/dist/tools/register-versioning-tools.js.map +1 -1
  102. package/dist/tools/resolve-project-id.d.ts +13 -0
  103. package/dist/tools/resolve-project-id.d.ts.map +1 -0
  104. package/dist/tools/resolve-project-id.js +22 -0
  105. package/dist/tools/resolve-project-id.js.map +1 -0
  106. package/dist/tools/safe-handler.d.ts.map +1 -1
  107. package/dist/tools/safe-handler.js +7 -2
  108. package/dist/tools/safe-handler.js.map +1 -1
  109. package/dist/tools/token-savings-handler.d.ts +7 -0
  110. package/dist/tools/token-savings-handler.d.ts.map +1 -0
  111. package/dist/tools/token-savings-handler.js +39 -0
  112. package/dist/tools/token-savings-handler.js.map +1 -0
  113. package/dist/types/token-ledger.d.ts +23 -0
  114. package/dist/types/token-ledger.d.ts.map +1 -1
  115. package/package.json +1 -1
  116. package/src/config/license-plans.json +1 -0
@@ -3,6 +3,7 @@ import { z } from 'zod';
3
3
  import { handleManageScope } from './manage-scope.js';
4
4
  import { handleDetectContradictions } from './detect-contradictions.js';
5
5
  import { safeLicensed } from './safe-handler.js';
6
+ import { resolveProjectId, missingProjectIdError } from './resolve-project-id.js';
6
7
  /**
7
8
  * Registers the `manage_scope` and `detect_contradictions` tools (SPEC-038).
8
9
  */
@@ -13,7 +14,12 @@ export function registerScopeTools(server) {
13
14
  'View current scope, list backlog items, add deferred requirements to backlog, ' +
14
15
  'or propose a formal scope change (requires explicit approval and reason).',
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
  operation: z
18
24
  .enum(['view', 'add_to_backlog', 'propose_change', 'list_backlog'])
19
25
  .describe('view: show current scope; list_backlog: list deferred items; ' +
@@ -67,7 +73,13 @@ export function registerScopeTools(server) {
67
73
  annotations: {
68
74
  readOnlyHint: false,
69
75
  },
70
- }, safeLicensed('manage_scope', async (args) => handleManageScope(args)));
76
+ }, safeLicensed('manage_scope', async (args) => {
77
+ const pid = resolveProjectId(args);
78
+ if (!pid) {
79
+ return missingProjectIdError;
80
+ }
81
+ return handleManageScope({ ...args, projectId: pid });
82
+ }));
71
83
  // detect_contradictions — analyze all specs for semantic conflicts
72
84
  server.registerTool('detect_contradictions', {
73
85
  description: 'Analyze all specs in a project for semantic contradictions. ' +
@@ -75,11 +87,22 @@ export function registerScopeTools(server) {
75
87
  'performance vs security, local vs cloud. ' +
76
88
  'Returns a report with severity (blocker/warning) and recommendations.',
77
89
  inputSchema: {
78
- projectId: z.string().max(500).describe('Project ID to analyze'),
90
+ projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
91
+ projectPath: z
92
+ .string()
93
+ .max(4096)
94
+ .optional()
95
+ .describe('Absolute path to project root. Derives projectId automatically.'),
79
96
  },
80
97
  annotations: {
81
98
  readOnlyHint: true,
82
99
  },
83
- }, safeLicensed('detect_contradictions', async (args) => handleDetectContradictions(args)));
100
+ }, safeLicensed('detect_contradictions', async (args) => {
101
+ const pid = resolveProjectId(args);
102
+ if (!pid) {
103
+ return missingProjectIdError;
104
+ }
105
+ return handleDetectContradictions({ ...args, projectId: pid });
106
+ }));
84
107
  }
85
108
  //# sourceMappingURL=register-scope-tools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"register-scope-tools.js","sourceRoot":"","sources":["../../src/tools/register-scope-tools.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAG5E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,+CAA+C;IAC/C,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,WAAW,EACT,mDAAmD;YACnD,gFAAgF;YAChF,2EAA2E;QAC7E,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;YACrD,SAAS,EAAE,CAAC;iBACT,IAAI,CAAC,CAAC,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAC;iBAClE,QAAQ,CACP,+DAA+D;gBAC7D,4EAA4E,CAC/E;YACH,eAAe,EAAE,CAAC;iBACf,MAAM,EAAE;iBACR,GAAG,CAAC,MAAM,CAAC;iBACX,QAAQ,EAAE;iBACV,QAAQ,CAAC,gEAAgE,CAAC;YAC7E,eAAe,EAAE,CAAC;iBACf,MAAM,EAAE;iBACR,GAAG,CAAC,MAAM,CAAC;iBACX,QAAQ,EAAE;iBACV,QAAQ,CAAC,yEAAyE,CAAC;YACtF,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,GAAG,CAAC,GAAG,CAAC;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,kDAAkD,CAAC;YAC/D,QAAQ,EAAE,CAAC;iBACR,MAAM,CAAC;gBACN,SAAS,EAAE,CAAC;qBACT,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;qBAC1B,GAAG,CAAC,GAAG,CAAC;qBACR,QAAQ,EAAE;qBACV,QAAQ,CAAC,kBAAkB,CAAC;gBAC/B,WAAW,EAAE,CAAC;qBACX,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;qBAC1B,GAAG,CAAC,GAAG,CAAC;qBACR,QAAQ,EAAE;qBACV,QAAQ,CAAC,mBAAmB,CAAC;gBAChC,cAAc,EAAE,CAAC;qBACd,MAAM,EAAE;qBACR,GAAG,CAAC,MAAM,CAAC;qBACX,QAAQ,EAAE;qBACV,QAAQ,CAAC,+BAA+B,CAAC;aAC7C,CAAC;iBACD,QAAQ,EAAE;iBACV,QAAQ,CAAC,oDAAoD,CAAC;YACjE,YAAY,EAAE,CAAC;iBACZ,MAAM,EAAE;iBACR,GAAG,CAAC,MAAM,CAAC;iBACX,QAAQ,EAAE;iBACV,QAAQ,CAAC,gEAAgE,CAAC;YAC7E,UAAU,EAAE,CAAC;iBACV,MAAM,EAAE;iBACR,GAAG,CAAC,GAAG,CAAC;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,uEAAuE,CAAC;SACrF;QACD,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;SACpB;KACF,EACD,YAAY,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CACtE,CAAC;IAEF,mEAAmE;IACnE,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,WAAW,EACT,8DAA8D;YAC9D,gFAAgF;YAChF,2CAA2C;YAC3C,uEAAuE;QACzE,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;SACjE;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;SACnB;KACF,EACD,YAAY,CAAC,uBAAuB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC,CACxF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"register-scope-tools.js","sourceRoot":"","sources":["../../src/tools/register-scope-tools.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"register-search-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-search-tools.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA4B3D"}
1
+ {"version":3,"file":"register-search-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-search-tools.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyC3D"}
@@ -3,6 +3,7 @@
3
3
  import { z } from 'zod';
4
4
  import { safeLicensed } from './safe-handler.js';
5
5
  import { handleSemanticSearch } from './semantic-search-handler.js';
6
+ import { resolveProjectId, missingProjectIdError } from './resolve-project-id.js';
6
7
  /**
7
8
  * Registers the semantic_search tool (SPEC-075) on the MCP server.
8
9
  * Pro tier: semantic search across project knowledge.
@@ -13,7 +14,12 @@ export function registerSearchTools(server) {
13
14
  'not just by exact text. Uses TF-IDF embeddings to find semantically similar documents. ' +
14
15
  'Requires init_project first.',
15
16
  inputSchema: {
16
- projectId: z.string().max(500).describe('Project ID returned by init_project'),
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
  query: z.string().max(10_000).describe('Natural language search query'),
18
24
  scope: z
19
25
  .enum(['spec', 'pattern', 'knowledge', 'decision', 'all'])
@@ -29,6 +35,12 @@ export function registerSearchTools(server) {
29
35
  title: 'Semantic Search',
30
36
  readOnlyHint: true,
31
37
  },
32
- }, safeLicensed('semantic_search', async (args) => handleSemanticSearch(args)));
38
+ }, safeLicensed('semantic_search', async (args) => {
39
+ const pid = resolveProjectId(args);
40
+ if (!pid) {
41
+ return missingProjectIdError;
42
+ }
43
+ return handleSemanticSearch({ ...args, projectId: pid });
44
+ }));
33
45
  }
34
46
  //# sourceMappingURL=register-search-tools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"register-search-tools.js","sourceRoot":"","sources":["../../src/tools/register-search-tools.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,uFAAuF;AAGvF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,WAAW,EACT,6FAA6F;YAC7F,yFAAyF;YACzF,8BAA8B;QAChC,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,qCAAqC,CAAC;YAC9E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;YACvE,KAAK,EAAE,CAAC;iBACL,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;iBACzD,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CAAC,oDAAoD,CAAC;YACjE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uCAAuC,CAAC;YAC7E,SAAS,EAAE,CAAC;iBACT,MAAM,EAAE;iBACR,OAAO,CAAC,GAAG,CAAC;iBACZ,QAAQ,CAAC,gDAAgD,CAAC;SAC9D;QACD,WAAW,EAAE;YACX,KAAK,EAAE,iBAAiB;YACxB,YAAY,EAAE,IAAI;SACnB;KACF,EACD,YAAY,CAAC,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAC5E,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"register-search-tools.js","sourceRoot":"","sources":["../../src/tools/register-search-tools.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,uFAAuF;AAGvF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAElF;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,WAAW,EACT,6FAA6F;YAC7F,yFAAyF;YACzF,8BAA8B;QAChC,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,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;YACvE,KAAK,EAAE,CAAC;iBACL,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;iBACzD,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CAAC,oDAAoD,CAAC;YACjE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uCAAuC,CAAC;YAC7E,SAAS,EAAE,CAAC;iBACT,MAAM,EAAE;iBACR,OAAO,CAAC,GAAG,CAAC;iBACZ,QAAQ,CAAC,gDAAgD,CAAC;SAC9D;QACD,WAAW,EAAE;YACX,KAAK,EAAE,iBAAiB;YACxB,YAAY,EAAE,IAAI;SACnB;KACF,EACD,YAAY,CAAC,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC7C,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAoD,CAAC,CAAC;QACnF,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,qBAAqB,CAAC;QAC/B,CAAC;QACD,OAAO,oBAAoB,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,EAEjD,CAAC,CAAC;IACR,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -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":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,yBAAyB;IACzB,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,WAAW,EACT,mIAAmI;QACrI,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QACnC,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;YACrD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,mCAAmC,CAAC;YAC/E,MAAM,EAAE,CAAC;iBACN,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;iBACzB,QAAQ,EAAE;iBACV,QAAQ,CAAC,0CAA0C,CAAC;YACvD,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,GAAG,CAAC,GAAG,CAAC;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,mDAAmD,CAAC;YAChE,MAAM,EAAE,CAAC;iBACN,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;iBACrC,QAAQ,EAAE;iBACV,QAAQ,CAAC,gEAAgE,CAAC;YAC7E,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;SACtF;KACF,EACD,YAAY,CAAC,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CACpE,CAAC;IAEF,0BAA0B;IAC1B,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,WAAW,EACT,mIAAmI;QACrI,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QACnC,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;YACrD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,mCAAmC,CAAC;YAC/E,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,GAAG,CAAC,GAAG,CAAC;iBACR,QAAQ,CAAC,iDAAiD,CAAC;YAC9D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;YACtE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC;YAC3E,aAAa,EAAE,CAAC;iBACb,MAAM,EAAE;iBACR,GAAG,CAAC,SAAS,CAAC;iBACd,QAAQ,EAAE;iBACV,QAAQ,CAAC,4DAA4D,CAAC;YACzE,MAAM,EAAE,CAAC;iBACN,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;iBACzB,QAAQ,EAAE;iBACV,QAAQ,CAAC,0CAA0C,CAAC;SACxD;KACF,EACD,YAAY,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CACtE,CAAC;IAEF,iCAAiC;IACjC,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,WAAW,EACT,0IAA0I;QAC5I,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QACnC,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;YACrD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,mCAAmC,CAAC;YAC/E,SAAS,EAAE,CAAC;iBACT,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;iBACrE,QAAQ,EAAE;iBACV,QAAQ,CACP,qIAAqI,CACtI;YACH,MAAM,EAAE,CAAC;iBACN,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;iBACzB,QAAQ,EAAE;iBACV,QAAQ,CAAC,0CAA0C,CAAC;SACxD;KACF,EACD,YAAY,CAAC,qBAAqB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CACpF,CAAC;AACJ,CAAC"}
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":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,GAC3B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAElF,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IACjD,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,WAAW,EACT,6EAA6E;YAC7E,iFAAiF;QACnF,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,OAAO,EAAE,CAAC;iBACP,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;iBAC1B,GAAG,CAAC,GAAG,CAAC;iBACR,QAAQ,CAAC,wCAAwC,CAAC;YACrD,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,GAAG,CAAC,GAAG,CAAC;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,+EAA+E,CAChF;SACJ;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE;KACrC,EACD,YAAY,CAAC,wBAAwB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACpD,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAoD,CAAC,CAAC;QACnF,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,qBAAqB,CAAC;QAC/B,CAAC;QACD,OAAO,0BAA0B,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,EAA+B,CAAC,CAAC;IAC9F,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,0BAA0B,EAC1B;QACE,WAAW,EACT,kEAAkE;YAClE,8HAA8H;YAC9H,oKAAoK;YACpK,8FAA8F;QAChG,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,GAAG,CAAC;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,+EAA+E,CAChF;YACH,YAAY,EAAE,CAAC;iBACZ,MAAM,EAAE;iBACR,GAAG,CAAC,GAAG,CAAC;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,0CAA0C,CAAC;YACvD,aAAa,EAAE,CAAC;iBACb,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;iBAC3B,GAAG,CAAC,IAAI,CAAC;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,8DAA8D,CAAC;YAC3E,IAAI,EAAE,CAAC;iBACJ,IAAI,CAAC,CAAC,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;iBACpE,QAAQ,EAAE;iBACV,QAAQ,CAAC,yEAAyE,CAAC;YACtF,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,GAAG,CAAC,GAAG,CAAC;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,6JAA6J,CAC9J;SACJ;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EACD,YAAY,CAAC,0BAA0B,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtD,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAoD,CAAC,CAAC;QACnF,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,qBAAqB,CAAC;QAC/B,CAAC;QACD,MAAM,SAAS,GAAG,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,EAE1C,CAAC;QACF,kCAAkC;QAClC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YACtB,OAAO,0BAA0B,CAAC;gBAChC,SAAS,EAAE,SAAS,CAAC,SAAS;gBAC9B,KAAK,EAAE,SAAS,CAAC,KAAK;aACvB,CAAC,CAAC;QACL,CAAC;QACD,OAAO,4BAA4B,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,WAAW,EACT,6EAA6E;YAC7E,2EAA2E;QAC7E,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,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,gCAAgC,CAAC;YACzF,aAAa,EAAE,CAAC;iBACb,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;iBAC1B,GAAG,CAAC,GAAG,CAAC;iBACR,QAAQ,CAAC,8CAA8C,CAAC;SAC5D;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EACD,YAAY,CAAC,uBAAuB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACnD,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAoD,CAAC,CAAC;QACnF,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,qBAAqB,CAAC;QAC/B,CAAC;QACD,OAAO,yBAAyB,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,EAA8B,CAAC,CAAC;IAC5F,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -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-token-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-token-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAYzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqE1D"}
1
+ {"version":3,"file":"register-token-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-token-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgG1D"}
@@ -3,6 +3,7 @@ import { z } from 'zod';
3
3
  import { safe } from './safe-handler.js';
4
4
  import { handleTokenUsage } from './token-usage-handler.js';
5
5
  import { handleTokenIntelligence } from './token-intelligence-handler.js';
6
+ import { handleTokenSavingsReport } from './token-savings-handler.js';
6
7
  import { TokenUsagePeriodEnum, TokenUsageGroupByEnum } from './schemas/token-optimization.js';
7
8
  import { TokenIntelligencePeriodEnum, TokenIntelligenceGroupByEnum, TokenIntelligenceViewEnum, } from './schemas/token-intelligence.js';
8
9
  export function registerTokenTools(server) {
@@ -34,5 +35,22 @@ export function registerTokenTools(server) {
34
35
  },
35
36
  annotations: { title: 'Token Intelligence', readOnlyHint: true },
36
37
  }, safe(async (args) => handleTokenIntelligence(args)));
38
+ server.registerTool('token_savings_report', {
39
+ description: 'Compare token usage between spec-guided sessions and unstructured (no spec) sessions. ' +
40
+ 'Shows how much using Planu specs reduces token consumption and cost.',
41
+ inputSchema: {
42
+ period: z
43
+ .enum(['today', 'week', 'month', 'all_time'])
44
+ .optional()
45
+ .describe('Time period: today | week | month | all_time. Defaults to month.'),
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.'),
52
+ },
53
+ annotations: { title: 'Token Savings Report', readOnlyHint: true },
54
+ }, safe(async (args) => handleTokenSavingsReport(args)));
37
55
  }
38
56
  //# sourceMappingURL=register-token-tools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"register-token-tools.js","sourceRoot":"","sources":["../../src/tools/register-token-tools.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAGlG,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAC9F,OAAO,EACL,2BAA2B,EAC3B,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,iCAAiC,CAAC;AAEzC,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,WAAW,EACT,+EAA+E;YAC/E,oFAAoF;QACtF,WAAW,EAAE;YACX,MAAM,EAAE,oBAAoB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAC9C,gFAAgF;gBAC9E,8BAA8B,CACjC;YACD,OAAO,EAAE,qBAAqB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAChD,+DAA+D,CAChE;SACF;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,IAAI,EAAE;KAC1D,EACD,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAClB,gBAAgB,CACd,IAGC,CACF,CACF,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,WAAW,EACT,uFAAuF;YACvF,oGAAoG;QACtG,WAAW,EAAE;YACX,MAAM,EAAE,2BAA2B,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACrD,+EAA+E,CAChF;YACD,OAAO,EAAE,4BAA4B,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACvD,kEAAkE,CACnE;YACD,IAAI,EAAE,yBAAyB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACjD,6FAA6F,CAC9F;YACD,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,8FAA8F,CAC/F;YACH,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,2EAA2E,CAAC;SACzF;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,IAAI,EAAE;KACjE,EACD,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAClB,uBAAuB,CACrB,IAMC,CACF,CACF,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"register-token-tools.js","sourceRoot":"","sources":["../../src/tools/register-token-tools.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAGlG,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAC9F,OAAO,EACL,2BAA2B,EAC3B,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,iCAAiC,CAAC;AAEzC,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,WAAW,EACT,+EAA+E;YAC/E,oFAAoF;QACtF,WAAW,EAAE;YACX,MAAM,EAAE,oBAAoB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAC9C,gFAAgF;gBAC9E,8BAA8B,CACjC;YACD,OAAO,EAAE,qBAAqB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAChD,+DAA+D,CAChE;SACF;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,IAAI,EAAE;KAC1D,EACD,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAClB,gBAAgB,CACd,IAGC,CACF,CACF,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,WAAW,EACT,uFAAuF;YACvF,oGAAoG;QACtG,WAAW,EAAE;YACX,MAAM,EAAE,2BAA2B,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACrD,+EAA+E,CAChF;YACD,OAAO,EAAE,4BAA4B,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACvD,kEAAkE,CACnE;YACD,IAAI,EAAE,yBAAyB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACjD,6FAA6F,CAC9F;YACD,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,8FAA8F,CAC/F;YACH,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,2EAA2E,CAAC;SACzF;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,IAAI,EAAE;KACjE,EACD,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAClB,uBAAuB,CACrB,IAMC,CACF,CACF,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,WAAW,EACT,wFAAwF;YACxF,sEAAsE;QACxE,WAAW,EAAE;YACX,MAAM,EAAE,CAAC;iBACN,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;iBAC5C,QAAQ,EAAE;iBACV,QAAQ,CAAC,kEAAkE,CAAC;YAC/E,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;SAC/E;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,YAAY,EAAE,IAAI,EAAE;KACnE,EACD,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAClB,wBAAwB,CACtB,IAAqE,CACtE,CACF,CACF,CAAC;AACJ,CAAC"}