@planu/cli 1.4.0 → 1.6.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 (237) hide show
  1. package/dist/config/license-plans.json +15 -1
  2. package/dist/engine/audit-trail/formatter.d.ts +13 -0
  3. package/dist/engine/audit-trail/formatter.d.ts.map +1 -0
  4. package/dist/engine/audit-trail/formatter.js +43 -0
  5. package/dist/engine/audit-trail/formatter.js.map +1 -0
  6. package/dist/engine/audit-trail/hasher.d.ts +18 -0
  7. package/dist/engine/audit-trail/hasher.d.ts.map +1 -0
  8. package/dist/engine/audit-trail/hasher.js +46 -0
  9. package/dist/engine/audit-trail/hasher.js.map +1 -0
  10. package/dist/engine/audit-trail/index.d.ts +2 -0
  11. package/dist/engine/audit-trail/index.d.ts.map +1 -1
  12. package/dist/engine/audit-trail/index.js +4 -1
  13. package/dist/engine/audit-trail/index.js.map +1 -1
  14. package/dist/engine/auto-promoter.d.ts +14 -0
  15. package/dist/engine/auto-promoter.d.ts.map +1 -0
  16. package/dist/engine/auto-promoter.js +40 -0
  17. package/dist/engine/auto-promoter.js.map +1 -0
  18. package/dist/engine/compliance-test-generator/control-mapper.d.ts +4 -0
  19. package/dist/engine/compliance-test-generator/control-mapper.d.ts.map +1 -0
  20. package/dist/engine/compliance-test-generator/control-mapper.js +41 -0
  21. package/dist/engine/compliance-test-generator/control-mapper.js.map +1 -0
  22. package/dist/engine/compliance-test-generator/frameworks/iso42001.d.ts +3 -0
  23. package/dist/engine/compliance-test-generator/frameworks/iso42001.d.ts.map +1 -0
  24. package/dist/engine/compliance-test-generator/frameworks/iso42001.js +55 -0
  25. package/dist/engine/compliance-test-generator/frameworks/iso42001.js.map +1 -0
  26. package/dist/engine/compliance-test-generator/frameworks/pci-dss.d.ts +3 -0
  27. package/dist/engine/compliance-test-generator/frameworks/pci-dss.d.ts.map +1 -0
  28. package/dist/engine/compliance-test-generator/frameworks/pci-dss.js +55 -0
  29. package/dist/engine/compliance-test-generator/frameworks/pci-dss.js.map +1 -0
  30. package/dist/engine/compliance-test-generator/frameworks/soc2.d.ts +3 -0
  31. package/dist/engine/compliance-test-generator/frameworks/soc2.d.ts.map +1 -0
  32. package/dist/engine/compliance-test-generator/frameworks/soc2.js +47 -0
  33. package/dist/engine/compliance-test-generator/frameworks/soc2.js.map +1 -0
  34. package/dist/engine/compliance-test-generator/index.d.ts +3 -0
  35. package/dist/engine/compliance-test-generator/index.d.ts.map +1 -0
  36. package/dist/engine/compliance-test-generator/index.js +64 -0
  37. package/dist/engine/compliance-test-generator/index.js.map +1 -0
  38. package/dist/engine/compliance-test-generator/test-formatter.d.ts +6 -0
  39. package/dist/engine/compliance-test-generator/test-formatter.d.ts.map +1 -0
  40. package/dist/engine/compliance-test-generator/test-formatter.js +33 -0
  41. package/dist/engine/compliance-test-generator/test-formatter.js.map +1 -0
  42. package/dist/engine/cost-guardrails.d.ts +11 -0
  43. package/dist/engine/cost-guardrails.d.ts.map +1 -0
  44. package/dist/engine/cost-guardrails.js +39 -0
  45. package/dist/engine/cost-guardrails.js.map +1 -0
  46. package/dist/engine/dogfood-analyzer.d.ts +6 -0
  47. package/dist/engine/dogfood-analyzer.d.ts.map +1 -0
  48. package/dist/engine/dogfood-analyzer.js +59 -0
  49. package/dist/engine/dogfood-analyzer.js.map +1 -0
  50. package/dist/engine/drift-watcher/criteria-checker.d.ts +16 -0
  51. package/dist/engine/drift-watcher/criteria-checker.d.ts.map +1 -0
  52. package/dist/engine/drift-watcher/criteria-checker.js +81 -0
  53. package/dist/engine/drift-watcher/criteria-checker.js.map +1 -0
  54. package/dist/engine/drift-watcher/file-watcher.d.ts +8 -0
  55. package/dist/engine/drift-watcher/file-watcher.d.ts.map +1 -0
  56. package/dist/engine/drift-watcher/file-watcher.js +24 -0
  57. package/dist/engine/drift-watcher/file-watcher.js.map +1 -0
  58. package/dist/engine/drift-watcher/index.d.ts +19 -0
  59. package/dist/engine/drift-watcher/index.d.ts.map +1 -0
  60. package/dist/engine/drift-watcher/index.js +70 -0
  61. package/dist/engine/drift-watcher/index.js.map +1 -0
  62. package/dist/engine/hooks-reconciler.d.ts +7 -1
  63. package/dist/engine/hooks-reconciler.d.ts.map +1 -1
  64. package/dist/engine/hooks-reconciler.js +127 -2
  65. package/dist/engine/hooks-reconciler.js.map +1 -1
  66. package/dist/engine/mcp-gateway/gateway-registry.d.ts +19 -0
  67. package/dist/engine/mcp-gateway/gateway-registry.d.ts.map +1 -0
  68. package/dist/engine/mcp-gateway/gateway-registry.js +33 -0
  69. package/dist/engine/mcp-gateway/gateway-registry.js.map +1 -0
  70. package/dist/engine/mcp-gateway/gateway-scanner.d.ts +17 -0
  71. package/dist/engine/mcp-gateway/gateway-scanner.d.ts.map +1 -0
  72. package/dist/engine/mcp-gateway/gateway-scanner.js +62 -0
  73. package/dist/engine/mcp-gateway/gateway-scanner.js.map +1 -0
  74. package/dist/engine/mcp-gateway/index.d.ts +3 -0
  75. package/dist/engine/mcp-gateway/index.d.ts.map +1 -0
  76. package/dist/engine/mcp-gateway/index.js +4 -0
  77. package/dist/engine/mcp-gateway/index.js.map +1 -0
  78. package/dist/engine/multi-repo/companion-spec-builder.d.ts +9 -0
  79. package/dist/engine/multi-repo/companion-spec-builder.d.ts.map +1 -0
  80. package/dist/engine/multi-repo/companion-spec-builder.js +22 -0
  81. package/dist/engine/multi-repo/companion-spec-builder.js.map +1 -0
  82. package/dist/engine/multi-repo/consumer-scanner.d.ts +12 -0
  83. package/dist/engine/multi-repo/consumer-scanner.d.ts.map +1 -0
  84. package/dist/engine/multi-repo/consumer-scanner.js +48 -0
  85. package/dist/engine/multi-repo/consumer-scanner.js.map +1 -0
  86. package/dist/engine/multi-repo/index.d.ts +4 -0
  87. package/dist/engine/multi-repo/index.d.ts.map +1 -0
  88. package/dist/engine/multi-repo/index.js +5 -0
  89. package/dist/engine/multi-repo/index.js.map +1 -0
  90. package/dist/engine/multi-repo/refactor-tracker.d.ts +7 -0
  91. package/dist/engine/multi-repo/refactor-tracker.d.ts.map +1 -0
  92. package/dist/engine/multi-repo/refactor-tracker.js +22 -0
  93. package/dist/engine/multi-repo/refactor-tracker.js.map +1 -0
  94. package/dist/engine/skills-reconciler.d.ts +10 -1
  95. package/dist/engine/skills-reconciler.d.ts.map +1 -1
  96. package/dist/engine/skills-reconciler.js +128 -2
  97. package/dist/engine/skills-reconciler.js.map +1 -1
  98. package/dist/index.js +15 -0
  99. package/dist/index.js.map +1 -1
  100. package/dist/storage/audit-trail-store.d.ts +20 -0
  101. package/dist/storage/audit-trail-store.d.ts.map +1 -0
  102. package/dist/storage/audit-trail-store.js +98 -0
  103. package/dist/storage/audit-trail-store.js.map +1 -0
  104. package/dist/storage/auto-promoter-config-store.d.ts +11 -0
  105. package/dist/storage/auto-promoter-config-store.d.ts.map +1 -0
  106. package/dist/storage/auto-promoter-config-store.js +23 -0
  107. package/dist/storage/auto-promoter-config-store.js.map +1 -0
  108. package/dist/storage/budget-store.d.ts +19 -0
  109. package/dist/storage/budget-store.d.ts.map +1 -0
  110. package/dist/storage/budget-store.js +64 -0
  111. package/dist/storage/budget-store.js.map +1 -0
  112. package/dist/storage/gateway-store.d.ts +23 -0
  113. package/dist/storage/gateway-store.d.ts.map +1 -0
  114. package/dist/storage/gateway-store.js +52 -0
  115. package/dist/storage/gateway-store.js.map +1 -0
  116. package/dist/storage/refactor-registry-store.d.ts +21 -0
  117. package/dist/storage/refactor-registry-store.d.ts.map +1 -0
  118. package/dist/storage/refactor-registry-store.js +77 -0
  119. package/dist/storage/refactor-registry-store.js.map +1 -0
  120. package/dist/tools/auto-promoter-handler.d.ts +13 -0
  121. package/dist/tools/auto-promoter-handler.d.ts.map +1 -0
  122. package/dist/tools/auto-promoter-handler.js +50 -0
  123. package/dist/tools/auto-promoter-handler.js.map +1 -0
  124. package/dist/tools/compliance-test-handler.d.ts +5 -0
  125. package/dist/tools/compliance-test-handler.d.ts.map +1 -0
  126. package/dist/tools/compliance-test-handler.js +66 -0
  127. package/dist/tools/compliance-test-handler.js.map +1 -0
  128. package/dist/tools/cost-guardrails-handler.d.ts +15 -0
  129. package/dist/tools/cost-guardrails-handler.d.ts.map +1 -0
  130. package/dist/tools/cost-guardrails-handler.js +72 -0
  131. package/dist/tools/cost-guardrails-handler.js.map +1 -0
  132. package/dist/tools/dogfood-status-handler.d.ts +3 -0
  133. package/dist/tools/dogfood-status-handler.d.ts.map +1 -0
  134. package/dist/tools/dogfood-status-handler.js +28 -0
  135. package/dist/tools/dogfood-status-handler.js.map +1 -0
  136. package/dist/tools/drift-watcher-handler.d.ts +7 -0
  137. package/dist/tools/drift-watcher-handler.d.ts.map +1 -0
  138. package/dist/tools/drift-watcher-handler.js +65 -0
  139. package/dist/tools/drift-watcher-handler.js.map +1 -0
  140. package/dist/tools/export-audit-trail-handler.d.ts +9 -0
  141. package/dist/tools/export-audit-trail-handler.d.ts.map +1 -0
  142. package/dist/tools/export-audit-trail-handler.js +103 -0
  143. package/dist/tools/export-audit-trail-handler.js.map +1 -0
  144. package/dist/tools/mcp-gateway-handler.d.ts +13 -0
  145. package/dist/tools/mcp-gateway-handler.d.ts.map +1 -0
  146. package/dist/tools/mcp-gateway-handler.js +60 -0
  147. package/dist/tools/mcp-gateway-handler.js.map +1 -0
  148. package/dist/tools/multi-repo-handler.d.ts +15 -0
  149. package/dist/tools/multi-repo-handler.d.ts.map +1 -0
  150. package/dist/tools/multi-repo-handler.js +86 -0
  151. package/dist/tools/multi-repo-handler.js.map +1 -0
  152. package/dist/tools/reconcile-hooks.d.ts +5 -0
  153. package/dist/tools/reconcile-hooks.d.ts.map +1 -1
  154. package/dist/tools/reconcile-hooks.js +61 -4
  155. package/dist/tools/reconcile-hooks.js.map +1 -1
  156. package/dist/tools/reconcile-skills.d.ts +1 -0
  157. package/dist/tools/reconcile-skills.d.ts.map +1 -1
  158. package/dist/tools/reconcile-skills.js +57 -9
  159. package/dist/tools/reconcile-skills.js.map +1 -1
  160. package/dist/tools/register-audit-trail-tools.d.ts.map +1 -1
  161. package/dist/tools/register-audit-trail-tools.js +38 -0
  162. package/dist/tools/register-audit-trail-tools.js.map +1 -1
  163. package/dist/tools/register-auto-promoter-tools.d.ts +3 -0
  164. package/dist/tools/register-auto-promoter-tools.d.ts.map +1 -0
  165. package/dist/tools/register-auto-promoter-tools.js +43 -0
  166. package/dist/tools/register-auto-promoter-tools.js.map +1 -0
  167. package/dist/tools/register-compliance-test-tools.d.ts +3 -0
  168. package/dist/tools/register-compliance-test-tools.d.ts.map +1 -0
  169. package/dist/tools/register-compliance-test-tools.js +55 -0
  170. package/dist/tools/register-compliance-test-tools.js.map +1 -0
  171. package/dist/tools/register-cost-guardrails-tools.d.ts +3 -0
  172. package/dist/tools/register-cost-guardrails-tools.d.ts.map +1 -0
  173. package/dist/tools/register-cost-guardrails-tools.js +61 -0
  174. package/dist/tools/register-cost-guardrails-tools.js.map +1 -0
  175. package/dist/tools/register-dogfood-tools.d.ts +3 -0
  176. package/dist/tools/register-dogfood-tools.d.ts.map +1 -0
  177. package/dist/tools/register-dogfood-tools.js +21 -0
  178. package/dist/tools/register-dogfood-tools.js.map +1 -0
  179. package/dist/tools/register-drift-watcher-tools.d.ts +3 -0
  180. package/dist/tools/register-drift-watcher-tools.d.ts.map +1 -0
  181. package/dist/tools/register-drift-watcher-tools.js +28 -0
  182. package/dist/tools/register-drift-watcher-tools.js.map +1 -0
  183. package/dist/tools/register-mcp-gateway-tools.d.ts +3 -0
  184. package/dist/tools/register-mcp-gateway-tools.d.ts.map +1 -0
  185. package/dist/tools/register-mcp-gateway-tools.js +35 -0
  186. package/dist/tools/register-mcp-gateway-tools.js.map +1 -0
  187. package/dist/tools/register-multi-repo-tools.d.ts +8 -0
  188. package/dist/tools/register-multi-repo-tools.d.ts.map +1 -0
  189. package/dist/tools/register-multi-repo-tools.js +52 -0
  190. package/dist/tools/register-multi-repo-tools.js.map +1 -0
  191. package/dist/tools/safe-handler.d.ts.map +1 -1
  192. package/dist/tools/safe-handler.js +50 -1
  193. package/dist/tools/safe-handler.js.map +1 -1
  194. package/dist/tools/schemas/reconcile-skills-schemas.d.ts +1 -0
  195. package/dist/tools/schemas/reconcile-skills-schemas.d.ts.map +1 -1
  196. package/dist/tools/schemas/reconcile-skills-schemas.js +5 -0
  197. package/dist/tools/schemas/reconcile-skills-schemas.js.map +1 -1
  198. package/dist/types/audit.d.ts +64 -0
  199. package/dist/types/audit.d.ts.map +1 -0
  200. package/dist/types/audit.js +3 -0
  201. package/dist/types/audit.js.map +1 -0
  202. package/dist/types/auto-promoter.d.ts +26 -0
  203. package/dist/types/auto-promoter.d.ts.map +1 -0
  204. package/dist/types/auto-promoter.js +3 -0
  205. package/dist/types/auto-promoter.js.map +1 -0
  206. package/dist/types/compliance-tests.d.ts +41 -0
  207. package/dist/types/compliance-tests.d.ts.map +1 -0
  208. package/dist/types/compliance-tests.js +3 -0
  209. package/dist/types/compliance-tests.js.map +1 -0
  210. package/dist/types/conventions.d.ts +29 -0
  211. package/dist/types/conventions.d.ts.map +1 -1
  212. package/dist/types/cost-guardrails.d.ts +41 -0
  213. package/dist/types/cost-guardrails.d.ts.map +1 -0
  214. package/dist/types/cost-guardrails.js +3 -0
  215. package/dist/types/cost-guardrails.js.map +1 -0
  216. package/dist/types/dogfood.d.ts +22 -0
  217. package/dist/types/dogfood.d.ts.map +1 -0
  218. package/dist/types/dogfood.js +3 -0
  219. package/dist/types/dogfood.js.map +1 -0
  220. package/dist/types/drift-watcher.d.ts +35 -0
  221. package/dist/types/drift-watcher.d.ts.map +1 -0
  222. package/dist/types/drift-watcher.js +3 -0
  223. package/dist/types/drift-watcher.js.map +1 -0
  224. package/dist/types/index.d.ts +8 -0
  225. package/dist/types/index.d.ts.map +1 -1
  226. package/dist/types/index.js +8 -0
  227. package/dist/types/index.js.map +1 -1
  228. package/dist/types/mcp-gateway.d.ts +34 -0
  229. package/dist/types/mcp-gateway.d.ts.map +1 -0
  230. package/dist/types/mcp-gateway.js +3 -0
  231. package/dist/types/mcp-gateway.js.map +1 -0
  232. package/dist/types/multi-repo.d.ts +39 -0
  233. package/dist/types/multi-repo.d.ts.map +1 -0
  234. package/dist/types/multi-repo.js +5 -0
  235. package/dist/types/multi-repo.js.map +1 -0
  236. package/package.json +1 -1
  237. package/src/config/license-plans.json +15 -1
@@ -1 +1 @@
1
- {"version":3,"file":"reconcile-hooks.d.ts","sourceRoot":"","sources":["../../src/tools/reconcile-hooks.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAqEpD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,UAAU,CAK9E;AAMD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAelE"}
1
+ {"version":3,"file":"reconcile-hooks.d.ts","sourceRoot":"","sources":["../../src/tools/reconcile-hooks.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AA8HpD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,UAAU,CAKjG;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG,UAAU,CAab;AAMD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgBlE"}
@@ -1,7 +1,8 @@
1
1
  // tools/reconcile-hooks.ts — MCP tool: reconcile_hooks
2
2
  // Detects drift between CI/quality pipeline and git hooks.
3
+ // With autoFix:true, patches husky hook files with missing quality checks.
3
4
  import { z } from 'zod';
4
- import { reconcileHooks } from '../engine/hooks-reconciler.js';
5
+ import { reconcileHooks, patchHooks } from '../engine/hooks-reconciler.js';
5
6
  import { safeTracked } from './safe-handler.js';
6
7
  // ---------------------------------------------------------------------------
7
8
  // Zod schema
@@ -11,6 +12,11 @@ const reconcileHooksSchema = {
11
12
  .string()
12
13
  .max(4096)
13
14
  .describe('Absolute path to the project root to analyse git hooks against CI capabilities'),
15
+ autoFix: z
16
+ .boolean()
17
+ .optional()
18
+ .describe('When true, automatically patches husky hook files to add missing quality checks. ' +
19
+ 'Idempotent: checks already present are skipped. Default: false.'),
14
20
  };
15
21
  // ---------------------------------------------------------------------------
16
22
  // Formatter
@@ -52,6 +58,44 @@ function formatReconciliation(result) {
52
58
  }
53
59
  return lines.join('\n');
54
60
  }
61
+ function formatPatchResult(reconcileResult, patchResult) {
62
+ const lines = [];
63
+ lines.push('# Hooks Reconciliation Report (Auto-Fix Applied)');
64
+ lines.push('');
65
+ lines.push(`## Health Score: ${patchResult.healthScore}/100`);
66
+ lines.push('');
67
+ lines.push(`- Status: **${reconcileResult.hooksInSync ? 'IN SYNC' : 'DRIFT DETECTED (before fix)'}**`);
68
+ lines.push('');
69
+ if (patchResult.patched.length > 0) {
70
+ lines.push('## Patched Checks');
71
+ lines.push('');
72
+ for (const p of patchResult.patched) {
73
+ lines.push(` - ${p.hook}: \`${p.added}\``);
74
+ }
75
+ lines.push('');
76
+ }
77
+ if (patchResult.skipped.length > 0) {
78
+ lines.push('## Skipped (already present or covered by lint-staged)');
79
+ lines.push('');
80
+ for (const s of patchResult.skipped) {
81
+ lines.push(` - ${s}`);
82
+ }
83
+ lines.push('');
84
+ }
85
+ if (patchResult.patched.length === 0 && patchResult.skipped.length === 0) {
86
+ lines.push('No patches needed — hooks are already up to date.');
87
+ lines.push('');
88
+ }
89
+ if (reconcileResult.outdatedHooks.length > 0) {
90
+ lines.push('## Enhancement Opportunities (not auto-fixed)');
91
+ lines.push('');
92
+ for (const item of reconcileResult.outdatedHooks) {
93
+ lines.push(` - ${item}`);
94
+ }
95
+ lines.push('');
96
+ }
97
+ return lines.join('\n');
98
+ }
55
99
  // ---------------------------------------------------------------------------
56
100
  // Handler
57
101
  // ---------------------------------------------------------------------------
@@ -61,18 +105,31 @@ export function handleReconcileHooks(args) {
61
105
  const isError = result.healthScore === 0 && !result.hooksInSync;
62
106
  return { content: [{ type: 'text', text }], isError };
63
107
  }
108
+ export function handleReconcileHooksAsync(args) {
109
+ const result = reconcileHooks(args.projectPath);
110
+ if (!args.autoFix) {
111
+ const text = formatReconciliation(result);
112
+ const isError = result.healthScore === 0 && !result.hooksInSync;
113
+ return { content: [{ type: 'text', text }], isError };
114
+ }
115
+ const patch = patchHooks(result.missingHooks, args.projectPath);
116
+ const text = formatPatchResult(result, patch);
117
+ const isError = patch.healthScore === 0 && patch.patched.length === 0;
118
+ return { content: [{ type: 'text', text }], isError };
119
+ }
64
120
  // ---------------------------------------------------------------------------
65
121
  // Registration
66
122
  // ---------------------------------------------------------------------------
67
123
  export function registerReconcileHooksTool(server) {
68
124
  server.registerTool('reconcile_hooks', {
69
- description: 'Detect drift between the project CI/quality pipeline and its git hooks. Checks whether hooks enforce TypeScript, ESLint, tests, commitlint, and Prettier based on what the project has installed. Returns a health score (0-100) and lists missing or outdated steps.',
125
+ description: 'Detect drift between the project CI/quality pipeline and its git hooks. Checks whether hooks enforce TypeScript, ESLint, tests, commitlint, and Prettier based on what the project has installed. Returns a health score (0-100) and lists missing or outdated steps. ' +
126
+ 'With autoFix:true, automatically patches husky hook files to add missing quality checks (idempotent).',
70
127
  inputSchema: reconcileHooksSchema,
71
128
  annotations: {
72
- readOnlyHint: true,
129
+ readOnlyHint: false,
73
130
  destructiveHint: false,
74
131
  title: 'Reconcile Hooks',
75
132
  },
76
- }, safeTracked('reconcile_hooks', (args) => Promise.resolve(handleReconcileHooks(args))));
133
+ }, safeTracked('reconcile_hooks', (args) => Promise.resolve(handleReconcileHooksAsync(args))));
77
134
  }
78
135
  //# sourceMappingURL=reconcile-hooks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reconcile-hooks.js","sourceRoot":"","sources":["../../src/tools/reconcile-hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reconcile-hooks.js","sourceRoot":"","sources":["../../src/tools/reconcile-hooks.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import type { ToolResult } from '../types/index.js';
3
3
  export declare function handleReconcileSkills(args: {
4
4
  projectId: string;
5
5
  projectPath: string;
6
+ autoFix?: boolean;
6
7
  }): Promise<ToolResult>;
7
8
  export declare function registerReconcileSkillsTool(server: McpServer): void;
8
9
  //# sourceMappingURL=reconcile-skills.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reconcile-skills.d.ts","sourceRoot":"","sources":["../../src/tools/reconcile-skills.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAMpD,wBAAsB,qBAAqB,CAAC,IAAI,EAAE;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,UAAU,CAAC,CAyCtB;AAMD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuBnE"}
1
+ {"version":3,"file":"reconcile-skills.d.ts","sourceRoot":"","sources":["../../src/tools/reconcile-skills.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAMpD,wBAAsB,qBAAqB,CAAC,IAAI,EAAE;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG,OAAO,CAAC,UAAU,CAAC,CAWtB;AAmGD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyBnE"}
@@ -1,9 +1,8 @@
1
1
  // tools/reconcile-skills.ts — SPEC-189: reconcile_skills MCP tool registration
2
- // Read-only analysis: detects new skills needed and stale skills for the current stack.
3
- // Does NOT install or remove anything — it reports what needs attention.
2
+ // SPEC-395: adds autoFix:boolean to auto-install missing, remove stale, repair paths.
4
3
  import { safeTracked } from './safe-handler.js';
5
4
  import { ReconcileSkillsInputSchema } from './schemas/reconcile-skills-schemas.js';
6
- import { reconcileSkills } from '../engine/skills-reconciler.js';
5
+ import { reconcileSkills, autoFixSkills } from '../engine/skills-reconciler.js';
7
6
  import { sanitizePath } from './sanitize-path.js';
8
7
  import { knowledgeStore } from '../storage/index.js';
9
8
  // ---------------------------------------------------------------------------
@@ -12,7 +11,17 @@ import { knowledgeStore } from '../storage/index.js';
12
11
  export async function handleReconcileSkills(args) {
13
12
  const projectPath = sanitizePath(args.projectPath);
14
13
  const knowledge = await knowledgeStore.getKnowledge(args.projectId);
15
- const result = await reconcileSkills(projectPath, knowledge);
14
+ const reconciliation = await reconcileSkills(projectPath, knowledge);
15
+ if (args.autoFix === true) {
16
+ const fixResult = await autoFixSkills(reconciliation, projectPath);
17
+ return buildAutoFixReport(fixResult);
18
+ }
19
+ return buildReadOnlyReport(reconciliation);
20
+ }
21
+ // ---------------------------------------------------------------------------
22
+ // Report builders
23
+ // ---------------------------------------------------------------------------
24
+ function buildReadOnlyReport(result) {
16
25
  const lines = [];
17
26
  lines.push(`## Skills Reconciliation Report`);
18
27
  lines.push(`**Health score**: ${result.healthScore}/100`);
@@ -43,9 +52,46 @@ export async function handleReconcileSkills(args) {
43
52
  else {
44
53
  lines.push('No stale skills detected.');
45
54
  }
46
- return {
47
- content: [{ type: 'text', text: lines.join('\n') }],
48
- };
55
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
56
+ }
57
+ function buildAutoFixReport(fix) {
58
+ const lines = [];
59
+ lines.push('## Skills Auto-Fix Report');
60
+ lines.push(`**Health score after fix**: ${fix.healthScore}/100`);
61
+ lines.push('');
62
+ if (fix.installed.length > 0) {
63
+ lines.push(`### Installed (${fix.installed.length})`);
64
+ for (const name of fix.installed) {
65
+ lines.push(`- \`${name}\``);
66
+ }
67
+ lines.push('');
68
+ }
69
+ else {
70
+ lines.push('No missing skills to install.');
71
+ lines.push('');
72
+ }
73
+ if (fix.removed.length > 0) {
74
+ lines.push(`### Removed (${fix.removed.length})`);
75
+ for (const name of fix.removed) {
76
+ lines.push(`- \`${name}\``);
77
+ }
78
+ lines.push('');
79
+ }
80
+ else {
81
+ lines.push('No stale skills to remove.');
82
+ lines.push('');
83
+ }
84
+ if (fix.pathsFixed.length > 0) {
85
+ lines.push(`### Paths corrected (${fix.pathsFixed.length})`);
86
+ for (const name of fix.pathsFixed) {
87
+ lines.push(`- \`${name}\``);
88
+ }
89
+ lines.push('');
90
+ }
91
+ else {
92
+ lines.push('No corrupt manifest paths detected.');
93
+ }
94
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
49
95
  }
50
96
  // ---------------------------------------------------------------------------
51
97
  // Registration
@@ -56,14 +102,16 @@ export function registerReconcileSkillsTool(server) {
56
102
  'Detects skills that are recommended for the stack but not yet installed (newSkillsDetected) ' +
57
103
  'and skills installed for technologies no longer in use (staleSkills). ' +
58
104
  'Returns a health score (0–100) indicating how well skills match the current stack. ' +
59
- 'Read-only does not install or remove anything.',
105
+ 'Pass autoFix:true to automatically install missing skills, remove stale skills, ' +
106
+ 'and repair corrupt manifest paths (mutates .claude/skills/).',
60
107
  inputSchema: {
61
108
  projectId: ReconcileSkillsInputSchema.shape.projectId,
62
109
  projectPath: ReconcileSkillsInputSchema.shape.projectPath,
110
+ autoFix: ReconcileSkillsInputSchema.shape.autoFix,
63
111
  },
64
112
  annotations: {
65
113
  title: 'Reconcile Skills',
66
- readOnlyHint: true,
114
+ readOnlyHint: false,
67
115
  },
68
116
  }, safeTracked('reconcile_skills', async (args) => handleReconcileSkills(args)));
69
117
  }
@@ -1 +1 @@
1
- {"version":3,"file":"reconcile-skills.js","sourceRoot":"","sources":["../../src/tools/reconcile-skills.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,wFAAwF;AACxF,yEAAyE;AAGzE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAG3C;IACC,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAE7D,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAC9C,KAAK,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,WAAW,MAAM,CAAC,CAAC;IAC1D,KAAK,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACjE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,MAAM,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,4BAA4B,MAAM,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3E,KAAK,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;QACzF,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;QAC9B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,gFAAgF,CAAC,CAAC;IAC/F,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9D,KAAK,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAC;QAC3F,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;QAC9B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;IAC5F,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;KACpD,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,eAAe;AACf,8EAA8E;AAE9E,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,WAAW,EACT,4FAA4F;YAC5F,8FAA8F;YAC9F,wEAAwE;YACxE,qFAAqF;YACrF,kDAAkD;QACpD,WAAW,EAAE;YACX,SAAS,EAAE,0BAA0B,CAAC,KAAK,CAAC,SAAS;YACrD,WAAW,EAAE,0BAA0B,CAAC,KAAK,CAAC,WAAW;SAC1D;QACD,WAAW,EAAE;YACX,KAAK,EAAE,kBAAkB;YACzB,YAAY,EAAE,IAAI;SACnB;KACF,EACD,WAAW,CAAC,kBAAkB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAC7C,qBAAqB,CAAC,IAAkD,CAAC,CAC1E,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"reconcile-skills.js","sourceRoot":"","sources":["../../src/tools/reconcile-skills.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"register-audit-trail-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-audit-trail-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiBzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqF/D"}
1
+ {"version":3,"file":"register-audit-trail-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-audit-trail-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkBzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoI/D"}
@@ -2,6 +2,7 @@
2
2
  import { z } from 'zod';
3
3
  import { safeLicensed } from './safe-handler.js';
4
4
  import { handleAuditTrail, handleGenerateAttestation } from './audit-trail-handler.js';
5
+ import { handleExportAuditTrail } from './export-audit-trail-handler.js';
5
6
  import { resolveProjectId, missingProjectIdError } from './resolve-project-id.js';
6
7
  const AUDIT_EVENT_TYPES = [
7
8
  'spec.created',
@@ -81,5 +82,42 @@ export function registerAuditTrailTools(server) {
81
82
  }
82
83
  return handleGenerateAttestation({ ...args, projectId: pid });
83
84
  }));
85
+ // export_audit_trail — SPEC-387 (EU AI Act Article 12)
86
+ server.registerTool('export_audit_trail', {
87
+ description: 'Export the EU AI Act Article 12 immutable audit trail for every Planu tool invocation. ' +
88
+ 'Supports filtering by project, date range, or spec. Verifies SHA-256 chain integrity. ' +
89
+ 'Formats: json (default), json-ld (W3C PROV-O), csv.',
90
+ annotations: { readOnlyHint: true },
91
+ inputSchema: {
92
+ projectPath: z
93
+ .string()
94
+ .max(4096)
95
+ .describe('Absolute path to project root. Used to filter entries for this project.'),
96
+ fromDate: z
97
+ .string()
98
+ .optional()
99
+ .describe('ISO-8601 start date (inclusive). Example: 2026-01-01T00:00:00Z'),
100
+ toDate: z
101
+ .string()
102
+ .optional()
103
+ .describe('ISO-8601 end date (inclusive). Example: 2026-12-31T23:59:59Z'),
104
+ specId: z
105
+ .string()
106
+ .max(500)
107
+ .optional()
108
+ .describe('Filter entries by spec ID (e.g. SPEC-001).'),
109
+ format: z
110
+ .enum(['json', 'json-ld', 'csv'])
111
+ .optional()
112
+ .describe('Output format. Valid values: json (default), json-ld (W3C PROV-O), csv.'),
113
+ limit: z
114
+ .number()
115
+ .int()
116
+ .min(1)
117
+ .max(10000)
118
+ .optional()
119
+ .describe('Maximum number of entries to return.'),
120
+ },
121
+ }, safeLicensed('export_audit_trail', (args) => Promise.resolve(handleExportAuditTrail(args))));
84
122
  }
85
123
  //# sourceMappingURL=register-audit-trail-tools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"register-audit-trail-tools.js","sourceRoot":"","sources":["../../src/tools/register-audit-trail-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"register-audit-trail-tools.js","sourceRoot":"","sources":["../../src/tools/register-audit-trail-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerAutoPromoterTools(server: McpServer): void;
3
+ //# sourceMappingURL=register-auto-promoter-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-auto-promoter-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-auto-promoter-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoDjE"}
@@ -0,0 +1,43 @@
1
+ // tools/register-auto-promoter-tools.ts — Registers auto-promotion MCP tools (SPEC-391)
2
+ import { z } from 'zod';
3
+ import { handleConfigureAutoPromotion, handleCheckAutoPromotion } from './auto-promoter-handler.js';
4
+ import { safeLicensed } from './safe-handler.js';
5
+ export function registerAutoPromoterTools(server) {
6
+ // configure_auto_promotion — SPEC-391
7
+ server.registerTool('configure_auto_promotion', {
8
+ description: 'Configure auto-promotion settings for a project. ' +
9
+ 'When enabled, specs that reach the confidence threshold are eligible for automatic status promotion. ' +
10
+ 'High-risk specs are never auto-promoted regardless of settings.',
11
+ inputSchema: {
12
+ projectPath: z.string().describe('Absolute path to the project directory.'),
13
+ enabled: z
14
+ .boolean()
15
+ .optional()
16
+ .describe('Enable or disable auto-promotion for the project.'),
17
+ threshold: z
18
+ .number()
19
+ .min(0)
20
+ .max(100)
21
+ .optional()
22
+ .describe('Confidence score threshold (0-100). Specs below this are not auto-promoted. Default: 85.'),
23
+ maxRisk: z
24
+ .enum(['low', 'medium'])
25
+ .optional()
26
+ .describe('Maximum risk level allowed for auto-promotion. ' +
27
+ 'Valid values: "low" (only low-risk specs), "medium" (low and medium). ' +
28
+ 'High-risk specs are never auto-promoted.'),
29
+ },
30
+ annotations: { title: 'Configure Auto Promotion' },
31
+ }, safeLicensed('configure_auto_promotion', async (args) => handleConfigureAutoPromotion(args)));
32
+ // check_auto_promotion — SPEC-391
33
+ server.registerTool('check_auto_promotion', {
34
+ description: 'Check whether a spec is eligible for auto-promotion by computing its confidence score. ' +
35
+ 'Returns the score breakdown (readiness, risk penalty, dependency bonus) and eligibility verdict.',
36
+ inputSchema: {
37
+ projectPath: z.string().describe('Absolute path to the project directory.'),
38
+ specId: z.string().describe('Spec ID to evaluate (e.g., "SPEC-042").'),
39
+ },
40
+ annotations: { title: 'Check Auto Promotion', readOnlyHint: true },
41
+ }, safeLicensed('check_auto_promotion', async (args) => handleCheckAutoPromotion(args)));
42
+ }
43
+ //# sourceMappingURL=register-auto-promoter-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-auto-promoter-tools.js","sourceRoot":"","sources":["../../src/tools/register-auto-promoter-tools.ts"],"names":[],"mappings":"AAAA,wFAAwF;AAGxF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,4BAA4B,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACpG,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,UAAU,yBAAyB,CAAC,MAAiB;IACzD,sCAAsC;IACtC,MAAM,CAAC,YAAY,CACjB,0BAA0B,EAC1B;QACE,WAAW,EACT,mDAAmD;YACnD,uGAAuG;YACvG,iEAAiE;QACnE,WAAW,EAAE;YACX,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;YAC3E,OAAO,EAAE,CAAC;iBACP,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,mDAAmD,CAAC;YAChE,SAAS,EAAE,CAAC;iBACT,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,GAAG,CAAC;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,0FAA0F,CAC3F;YACH,OAAO,EAAE,CAAC;iBACP,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;iBACvB,QAAQ,EAAE;iBACV,QAAQ,CACP,iDAAiD;gBAC/C,wEAAwE;gBACxE,0CAA0C,CAC7C;SACJ;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,0BAA0B,EAAE;KACnD,EACD,YAAY,CAAC,0BAA0B,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC,CAC7F,CAAC;IAEF,kCAAkC;IAClC,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,WAAW,EACT,yFAAyF;YACzF,kGAAkG;QACpG,WAAW,EAAE;YACX,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;YAC3E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;SACvE;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,YAAY,EAAE,IAAI,EAAE;KACnE,EACD,YAAY,CAAC,sBAAsB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CACrF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerComplianceTestTools(server: McpServer): void;
3
+ //# sourceMappingURL=register-compliance-test-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-compliance-test-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-compliance-test-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAgBzE,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8DnE"}
@@ -0,0 +1,55 @@
1
+ // tools/register-compliance-test-tools.ts — SPEC-390: Register compliance test suite tools
2
+ import { z } from 'zod';
3
+ import { safeLicensed } from './safe-handler.js';
4
+ import { handleGenerateComplianceTests, handleComplianceCoverageReport, } from './compliance-test-handler.js';
5
+ const FRAMEWORK_DESCRIBE = 'Compliance framework. Valid values: soc2 | pci-dss | iso-42001 | hipaa | gdpr';
6
+ const FORMAT_DESCRIBE = 'Output format for tests. Valid values: jest | gherkin | markdown';
7
+ export function registerComplianceTestTools(server) {
8
+ server.registerTool('generate_compliance_tests', {
9
+ description: 'Generate compliance-specific test suites from spec acceptance criteria. ' +
10
+ 'Maps criteria to regulatory controls (SOC2, PCI-DSS, ISO-42001) and outputs ' +
11
+ 'Jest/Vitest test files, Gherkin scenarios, or markdown checklists.',
12
+ inputSchema: {
13
+ projectPath: z
14
+ .string()
15
+ .min(1)
16
+ .max(4096)
17
+ .describe('Absolute path to the project root directory'),
18
+ specId: z
19
+ .string()
20
+ .min(1)
21
+ .max(50)
22
+ .describe('Spec ID to generate compliance tests for (e.g. SPEC-001)'),
23
+ frameworks: z
24
+ .array(z.enum(['soc2', 'pci-dss', 'iso-42001', 'hipaa', 'gdpr']))
25
+ .min(1)
26
+ .describe(FRAMEWORK_DESCRIBE),
27
+ outputFormat: z.enum(['jest', 'gherkin', 'markdown']).optional().describe(FORMAT_DESCRIBE),
28
+ },
29
+ annotations: {
30
+ title: 'Generate Compliance Tests',
31
+ readOnlyHint: true,
32
+ },
33
+ }, safeLicensed('generate_compliance_tests', async (args) => handleGenerateComplianceTests(args)));
34
+ server.registerTool('compliance_coverage_report', {
35
+ description: 'List all compliance controls for the requested frameworks, showing their IDs, ' +
36
+ 'titles, descriptions, and matching keywords. ' +
37
+ 'Use before generate_compliance_tests to understand which controls are available.',
38
+ inputSchema: {
39
+ projectPath: z
40
+ .string()
41
+ .min(1)
42
+ .max(4096)
43
+ .describe('Absolute path to the project root directory'),
44
+ frameworks: z
45
+ .array(z.enum(['soc2', 'pci-dss', 'iso-42001', 'hipaa', 'gdpr']))
46
+ .min(1)
47
+ .describe(FRAMEWORK_DESCRIBE),
48
+ },
49
+ annotations: {
50
+ title: 'Compliance Coverage Report',
51
+ readOnlyHint: true,
52
+ },
53
+ }, safeLicensed('compliance_coverage_report', (args) => Promise.resolve(handleComplianceCoverageReport(args))));
54
+ }
55
+ //# sourceMappingURL=register-compliance-test-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-compliance-test-tools.js","sourceRoot":"","sources":["../../src/tools/register-compliance-test-tools.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAG3F,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EACL,6BAA6B,EAC7B,8BAA8B,GAC/B,MAAM,8BAA8B,CAAC;AAMtC,MAAM,kBAAkB,GACtB,+EAA+E,CAAC;AAClF,MAAM,eAAe,GAAG,kEAAkE,CAAC;AAE3F,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,MAAM,CAAC,YAAY,CACjB,2BAA2B,EAC3B;QACE,WAAW,EACT,0EAA0E;YAC1E,8EAA8E;YAC9E,oEAAoE;QACtE,WAAW,EAAE;YACX,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,IAAI,CAAC;iBACT,QAAQ,CAAC,6CAA6C,CAAC;YAC1D,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,EAAE,CAAC;iBACP,QAAQ,CAAC,0DAA0D,CAAC;YACvE,UAAU,EAAE,CAAC;iBACV,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;iBAChE,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CAAC,kBAAkB,CAAC;YAC/B,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;SAC3F;QACD,WAAW,EAAE;YACX,KAAK,EAAE,2BAA2B;YAClC,YAAY,EAAE,IAAI;SACnB;KACF,EACD,YAAY,CAAC,2BAA2B,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CACvD,6BAA6B,CAAC,IAAoC,CAAC,CACpE,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,4BAA4B,EAC5B;QACE,WAAW,EACT,gFAAgF;YAChF,+CAA+C;YAC/C,kFAAkF;QACpF,WAAW,EAAE;YACX,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,IAAI,CAAC;iBACT,QAAQ,CAAC,6CAA6C,CAAC;YAC1D,UAAU,EAAE,CAAC;iBACV,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;iBAChE,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CAAC,kBAAkB,CAAC;SAChC;QACD,WAAW,EAAE;YACX,KAAK,EAAE,4BAA4B;YACnC,YAAY,EAAE,IAAI;SACnB;KACF,EACD,YAAY,CAAC,4BAA4B,EAAE,CAAC,IAAI,EAAE,EAAE,CAClD,OAAO,CAAC,OAAO,CAAC,8BAA8B,CAAC,IAA+B,CAAC,CAAC,CACjF,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerCostGuardrailsTools(server: McpServer): void;
3
+ //# sourceMappingURL=register-cost-guardrails-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-cost-guardrails-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-cost-guardrails-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0EnE"}
@@ -0,0 +1,61 @@
1
+ // tools/register-cost-guardrails-tools.ts — Registers cost guardrail MCP tools (SPEC-393)
2
+ import { z } from 'zod';
3
+ import { handleSetSpecBudget, handleBudgetStatus, handleRecordSpend, } from './cost-guardrails-handler.js';
4
+ import { safeLicensed } from './safe-handler.js';
5
+ export function registerCostGuardrailsTools(server) {
6
+ // set_spec_budget — SPEC-393
7
+ server.registerTool('set_spec_budget', {
8
+ description: 'Set a USD cost budget cap for a spec. ' +
9
+ 'When usage approaches the threshold the recommended model is downgraded to control costs. ' +
10
+ 'When the budget is exhausted the tool recommends haiku only.',
11
+ inputSchema: {
12
+ projectPath: z.string().describe('Absolute path to the project directory.'),
13
+ specId: z.string().describe('Spec ID to budget (e.g., "SPEC-042").'),
14
+ maxUsdCents: z
15
+ .number()
16
+ .int()
17
+ .min(1)
18
+ .describe('Maximum allowed spend in USD cents (e.g., 500 = $5.00).'),
19
+ warningThreshold: z
20
+ .number()
21
+ .min(1)
22
+ .max(100)
23
+ .optional()
24
+ .describe('Percentage at which a warning is triggered. Default: 80.'),
25
+ },
26
+ annotations: { title: 'Set Spec Budget' },
27
+ }, safeLicensed('set_spec_budget', async (args) => handleSetSpecBudget(args)));
28
+ // budget_status — SPEC-393
29
+ server.registerTool('budget_status', {
30
+ description: 'Return the budget status for one spec or all specs in a project. ' +
31
+ 'Shows spend, remaining, usage percentage, and the recommended model tier.',
32
+ inputSchema: {
33
+ projectPath: z.string().describe('Absolute path to the project directory.'),
34
+ specId: z
35
+ .string()
36
+ .optional()
37
+ .describe('Spec ID to query. If omitted, returns status for all specs in the project.'),
38
+ },
39
+ annotations: { title: 'Budget Status', readOnlyHint: true },
40
+ }, safeLicensed('budget_status', async (args) => handleBudgetStatus(args)));
41
+ // record_spend — SPEC-393
42
+ server.registerTool('record_spend', {
43
+ description: 'Record actual AI spend for a spec. ' +
44
+ 'Increments the running total and returns the updated budget status. ' +
45
+ 'A warning message is included when the budget warning threshold is crossed.',
46
+ inputSchema: {
47
+ projectPath: z.string().describe('Absolute path to the project directory.'),
48
+ specId: z.string().describe('Spec ID to charge (e.g., "SPEC-042").'),
49
+ usdCents: z
50
+ .number()
51
+ .min(0)
52
+ .describe('Amount spent in USD cents to add to the running total.'),
53
+ modelUsed: z
54
+ .enum(['opus', 'sonnet', 'haiku'])
55
+ .describe('Model tier used for this invocation. Valid values: "opus", "sonnet", "haiku".'),
56
+ toolName: z.string().describe('Name of the tool or action that incurred the cost.'),
57
+ },
58
+ annotations: { title: 'Record Spend' },
59
+ }, safeLicensed('record_spend', async (args) => handleRecordSpend(args)));
60
+ }
61
+ //# sourceMappingURL=register-cost-guardrails-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-cost-guardrails-tools.js","sourceRoot":"","sources":["../../src/tools/register-cost-guardrails-tools.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAG1F,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,6BAA6B;IAC7B,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,WAAW,EACT,wCAAwC;YACxC,4FAA4F;YAC5F,8DAA8D;QAChE,WAAW,EAAE;YACX,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;YAC3E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;YACpE,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CAAC,yDAAyD,CAAC;YACtE,gBAAgB,EAAE,CAAC;iBAChB,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,GAAG,CAAC;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,0DAA0D,CAAC;SACxE;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE;KAC1C,EACD,YAAY,CAAC,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAC3E,CAAC;IAEF,2BAA2B;IAC3B,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,WAAW,EACT,mEAAmE;YACnE,2EAA2E;QAC7E,WAAW,EAAE;YACX,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;YAC3E,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,4EAA4E,CAAC;SAC1F;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,IAAI,EAAE;KAC5D,EACD,YAAY,CAAC,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CACxE,CAAC;IAEF,0BAA0B;IAC1B,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,WAAW,EACT,qCAAqC;YACrC,sEAAsE;YACtE,6EAA6E;QAC/E,WAAW,EAAE;YACX,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;YAC3E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;YACpE,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CAAC,wDAAwD,CAAC;YACrE,SAAS,EAAE,CAAC;iBACT,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;iBACjC,QAAQ,CACP,+EAA+E,CAChF;YACH,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;SACpF;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;KACvC,EACD,YAAY,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CACtE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerDogfoodTools(server: McpServer): void;
3
+ //# sourceMappingURL=register-dogfood-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-dogfood-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-dogfood-tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuB5D"}
@@ -0,0 +1,21 @@
1
+ import { z } from 'zod';
2
+ import { handleDogfoodStatus } from './dogfood-status-handler.js';
3
+ import { safeTracked } from './safe-handler.js';
4
+ export function registerDogfoodTools(server) {
5
+ server.registerTool('dogfood_status', {
6
+ description: "Report which Planu SDD tools have been used in Planu's own development by analyzing git commit history. Returns a dogfood score (0-100), list of tools used and missing, and a recommendation to improve SDD adoption. Use this to verify the team is practicing what they preach.",
7
+ inputSchema: {
8
+ projectPath: z
9
+ .string()
10
+ .min(1)
11
+ .max(4096)
12
+ .describe('Absolute path to the project root directory'),
13
+ since: z
14
+ .string()
15
+ .optional()
16
+ .describe('ISO 8601 date string (e.g. "2026-01-01") — analyze commits since this date. Defaults to last 30 days.'),
17
+ },
18
+ annotations: { readOnlyHint: true },
19
+ }, safeTracked('dogfood_status', (args) => Promise.resolve(handleDogfoodStatus(args))));
20
+ }
21
+ //# sourceMappingURL=register-dogfood-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-dogfood-tools.js","sourceRoot":"","sources":["../../src/tools/register-dogfood-tools.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,WAAW,EACT,oRAAoR;QACtR,WAAW,EAAE;YACX,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,IAAI,CAAC;iBACT,QAAQ,CAAC,6CAA6C,CAAC;YAC1D,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,uGAAuG,CACxG;SACJ;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EACD,WAAW,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CACpF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerDriftWatcherTools(server: McpServer): void;
3
+ //# sourceMappingURL=register-drift-watcher-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-drift-watcher-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-drift-watcher-tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8BjE"}
@@ -0,0 +1,28 @@
1
+ import { z } from 'zod';
2
+ import { handleWatchSpecDrift } from './drift-watcher-handler.js';
3
+ import { safeLicensed } from './safe-handler.js';
4
+ export function registerDriftWatcherTools(server) {
5
+ server.registerTool('watch_spec_drift', {
6
+ description: 'Real-time file watcher that detects when code changes cause a spec to drift from ' +
7
+ 'its acceptance criteria. Uses Node.js fs.watch to monitor project files and alerts ' +
8
+ 'when changes may affect spec compliance. State is in-memory and does not persist ' +
9
+ 'across server restarts.',
10
+ inputSchema: {
11
+ projectPath: z
12
+ .string()
13
+ .min(1)
14
+ .max(2048)
15
+ .describe('Absolute path to the project root directory.'),
16
+ specId: z
17
+ .string()
18
+ .min(1)
19
+ .max(200)
20
+ .describe('Spec ID to watch for drift (e.g. "SPEC-042").'),
21
+ action: z
22
+ .enum(['start', 'stop', 'status'])
23
+ .describe('start: begin watching, stop: stop watcher, status: check if running'),
24
+ },
25
+ annotations: { readOnlyHint: false },
26
+ }, safeLicensed('watch_spec_drift', async (args) => handleWatchSpecDrift(args)));
27
+ }
28
+ //# sourceMappingURL=register-drift-watcher-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-drift-watcher-tools.js","sourceRoot":"","sources":["../../src/tools/register-drift-watcher-tools.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,UAAU,yBAAyB,CAAC,MAAiB;IACzD,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,WAAW,EACT,mFAAmF;YACnF,qFAAqF;YACrF,mFAAmF;YACnF,yBAAyB;QAC3B,WAAW,EAAE;YACX,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,IAAI,CAAC;iBACT,QAAQ,CAAC,8CAA8C,CAAC;YAC3D,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,GAAG,CAAC;iBACR,QAAQ,CAAC,+CAA+C,CAAC;YAC5D,MAAM,EAAE,CAAC;iBACN,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;iBACjC,QAAQ,CAAC,qEAAqE,CAAC;SACnF;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE;KACrC,EACD,YAAY,CAAC,kBAAkB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAC9C,oBAAoB,CAAC,IAA2B,CAAC,CAClD,CACF,CAAC;AACJ,CAAC"}