@planu/cli 1.11.0 → 1.13.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 (298) hide show
  1. package/dist/config/ai-tool-registry.json +71 -0
  2. package/dist/config/autopilot-config.json +21 -0
  3. package/dist/config/competitive-catalog.json +83 -0
  4. package/dist/config/license-plans.json +43 -2
  5. package/dist/engine/agent-registry/lifecycle-manager.d.ts +8 -0
  6. package/dist/engine/agent-registry/lifecycle-manager.d.ts.map +1 -0
  7. package/dist/engine/agent-registry/lifecycle-manager.js +81 -0
  8. package/dist/engine/agent-registry/lifecycle-manager.js.map +1 -0
  9. package/dist/engine/agent-registry/role-catalog.d.ts +17 -0
  10. package/dist/engine/agent-registry/role-catalog.d.ts.map +1 -0
  11. package/dist/engine/agent-registry/role-catalog.js +55 -0
  12. package/dist/engine/agent-registry/role-catalog.js.map +1 -0
  13. package/dist/engine/api-compat/compatibility-checker.d.ts +4 -0
  14. package/dist/engine/api-compat/compatibility-checker.d.ts.map +1 -0
  15. package/dist/engine/api-compat/compatibility-checker.js +118 -0
  16. package/dist/engine/api-compat/compatibility-checker.js.map +1 -0
  17. package/dist/engine/autopilot/action-executor.d.ts +18 -0
  18. package/dist/engine/autopilot/action-executor.d.ts.map +1 -0
  19. package/dist/engine/autopilot/action-executor.js +91 -0
  20. package/dist/engine/autopilot/action-executor.js.map +1 -0
  21. package/dist/engine/autopilot/event-bus.d.ts +8 -0
  22. package/dist/engine/autopilot/event-bus.d.ts.map +1 -0
  23. package/dist/engine/autopilot/event-bus.js +28 -0
  24. package/dist/engine/autopilot/event-bus.js.map +1 -0
  25. package/dist/engine/autopilot/trigger-rules.d.ts +3 -0
  26. package/dist/engine/autopilot/trigger-rules.d.ts.map +1 -0
  27. package/dist/engine/autopilot/trigger-rules.js +125 -0
  28. package/dist/engine/autopilot/trigger-rules.js.map +1 -0
  29. package/dist/engine/checkpoint/checkpoint-manager.d.ts +22 -0
  30. package/dist/engine/checkpoint/checkpoint-manager.d.ts.map +1 -0
  31. package/dist/engine/checkpoint/checkpoint-manager.js +76 -0
  32. package/dist/engine/checkpoint/checkpoint-manager.js.map +1 -0
  33. package/dist/engine/checkpoint/policy-engine.d.ts +10 -0
  34. package/dist/engine/checkpoint/policy-engine.d.ts.map +1 -0
  35. package/dist/engine/checkpoint/policy-engine.js +87 -0
  36. package/dist/engine/checkpoint/policy-engine.js.map +1 -0
  37. package/dist/engine/competitive/gap-analyzer.d.ts +12 -0
  38. package/dist/engine/competitive/gap-analyzer.d.ts.map +1 -0
  39. package/dist/engine/competitive/gap-analyzer.js +214 -0
  40. package/dist/engine/competitive/gap-analyzer.js.map +1 -0
  41. package/dist/engine/compliance/auto-remediator.d.ts +9 -0
  42. package/dist/engine/compliance/auto-remediator.d.ts.map +1 -0
  43. package/dist/engine/compliance/auto-remediator.js +118 -0
  44. package/dist/engine/compliance/auto-remediator.js.map +1 -0
  45. package/dist/engine/context-profile/profile-catalog.d.ts +5 -0
  46. package/dist/engine/context-profile/profile-catalog.d.ts.map +1 -0
  47. package/dist/engine/context-profile/profile-catalog.js +145 -0
  48. package/dist/engine/context-profile/profile-catalog.js.map +1 -0
  49. package/dist/engine/critical-path/path-analyzer.d.ts +3 -0
  50. package/dist/engine/critical-path/path-analyzer.d.ts.map +1 -0
  51. package/dist/engine/critical-path/path-analyzer.js +145 -0
  52. package/dist/engine/critical-path/path-analyzer.js.map +1 -0
  53. package/dist/engine/drift/violation-resolver.d.ts +9 -0
  54. package/dist/engine/drift/violation-resolver.d.ts.map +1 -0
  55. package/dist/engine/drift/violation-resolver.js +128 -0
  56. package/dist/engine/drift/violation-resolver.js.map +1 -0
  57. package/dist/engine/ears/criterion-scorer.d.ts +7 -0
  58. package/dist/engine/ears/criterion-scorer.d.ts.map +1 -0
  59. package/dist/engine/ears/criterion-scorer.js +87 -0
  60. package/dist/engine/ears/criterion-scorer.js.map +1 -0
  61. package/dist/engine/ears/pattern-matcher.d.ts +5 -0
  62. package/dist/engine/ears/pattern-matcher.d.ts.map +1 -0
  63. package/dist/engine/ears/pattern-matcher.js +48 -0
  64. package/dist/engine/ears/pattern-matcher.js.map +1 -0
  65. package/dist/engine/ears/rewriter.d.ts +7 -0
  66. package/dist/engine/ears/rewriter.d.ts.map +1 -0
  67. package/dist/engine/ears/rewriter.js +45 -0
  68. package/dist/engine/ears/rewriter.js.map +1 -0
  69. package/dist/engine/ears/spec-linter.d.ts +7 -0
  70. package/dist/engine/ears/spec-linter.d.ts.map +1 -0
  71. package/dist/engine/ears/spec-linter.js +127 -0
  72. package/dist/engine/ears/spec-linter.js.map +1 -0
  73. package/dist/engine/health/auto-fixer.d.ts +7 -0
  74. package/dist/engine/health/auto-fixer.d.ts.map +1 -0
  75. package/dist/engine/health/auto-fixer.js +130 -0
  76. package/dist/engine/health/auto-fixer.js.map +1 -0
  77. package/dist/engine/hook-generator/ai-hook-templates.d.ts +8 -0
  78. package/dist/engine/hook-generator/ai-hook-templates.d.ts.map +1 -0
  79. package/dist/engine/hook-generator/ai-hook-templates.js +43 -0
  80. package/dist/engine/hook-generator/ai-hook-templates.js.map +1 -0
  81. package/dist/engine/hook-generator/hook-merger.d.ts +13 -0
  82. package/dist/engine/hook-generator/hook-merger.d.ts.map +1 -0
  83. package/dist/engine/hook-generator/hook-merger.js +148 -0
  84. package/dist/engine/hook-generator/hook-merger.js.map +1 -0
  85. package/dist/engine/hook-generator/stack-hook-templates.d.ts +10 -0
  86. package/dist/engine/hook-generator/stack-hook-templates.d.ts.map +1 -0
  87. package/dist/engine/hook-generator/stack-hook-templates.js +105 -0
  88. package/dist/engine/hook-generator/stack-hook-templates.js.map +1 -0
  89. package/dist/engine/mcp-catalog/catalog-advisor.d.ts +3 -0
  90. package/dist/engine/mcp-catalog/catalog-advisor.d.ts.map +1 -0
  91. package/dist/engine/mcp-catalog/catalog-advisor.js +180 -0
  92. package/dist/engine/mcp-catalog/catalog-advisor.js.map +1 -0
  93. package/dist/engine/project-dna/ai-tool-detector.d.ts +12 -0
  94. package/dist/engine/project-dna/ai-tool-detector.d.ts.map +1 -0
  95. package/dist/engine/project-dna/ai-tool-detector.js +103 -0
  96. package/dist/engine/project-dna/ai-tool-detector.js.map +1 -0
  97. package/dist/engine/project-dna/rules-generator.d.ts +18 -0
  98. package/dist/engine/project-dna/rules-generator.d.ts.map +1 -0
  99. package/dist/engine/project-dna/rules-generator.js +193 -0
  100. package/dist/engine/project-dna/rules-generator.js.map +1 -0
  101. package/dist/engine/project-dna/stack-detector.d.ts +24 -0
  102. package/dist/engine/project-dna/stack-detector.d.ts.map +1 -0
  103. package/dist/engine/project-dna/stack-detector.js +309 -0
  104. package/dist/engine/project-dna/stack-detector.js.map +1 -0
  105. package/dist/engine/similar-problems/similarity-finder.d.ts +3 -0
  106. package/dist/engine/similar-problems/similarity-finder.d.ts.map +1 -0
  107. package/dist/engine/similar-problems/similarity-finder.js +144 -0
  108. package/dist/engine/similar-problems/similarity-finder.js.map +1 -0
  109. package/dist/engine/sync/asana-puller.d.ts +9 -0
  110. package/dist/engine/sync/asana-puller.d.ts.map +1 -0
  111. package/dist/engine/sync/asana-puller.js +91 -0
  112. package/dist/engine/sync/asana-puller.js.map +1 -0
  113. package/dist/engine/sync/conflict-resolver.d.ts +17 -0
  114. package/dist/engine/sync/conflict-resolver.d.ts.map +1 -0
  115. package/dist/engine/sync/conflict-resolver.js +58 -0
  116. package/dist/engine/sync/conflict-resolver.js.map +1 -0
  117. package/dist/engine/sync/monday-puller.d.ts +9 -0
  118. package/dist/engine/sync/monday-puller.d.ts.map +1 -0
  119. package/dist/engine/sync/monday-puller.js +110 -0
  120. package/dist/engine/sync/monday-puller.js.map +1 -0
  121. package/dist/engine/sync/notion-puller.d.ts +15 -0
  122. package/dist/engine/sync/notion-puller.d.ts.map +1 -0
  123. package/dist/engine/sync/notion-puller.js +101 -0
  124. package/dist/engine/sync/notion-puller.js.map +1 -0
  125. package/dist/engine/verifier/code-scanner.d.ts +8 -0
  126. package/dist/engine/verifier/code-scanner.d.ts.map +1 -0
  127. package/dist/engine/verifier/code-scanner.js +73 -0
  128. package/dist/engine/verifier/code-scanner.js.map +1 -0
  129. package/dist/engine/verifier/compliance-scorer.d.ts +17 -0
  130. package/dist/engine/verifier/compliance-scorer.d.ts.map +1 -0
  131. package/dist/engine/verifier/compliance-scorer.js +131 -0
  132. package/dist/engine/verifier/compliance-scorer.js.map +1 -0
  133. package/dist/engine/verifier/criterion-matcher.d.ts +15 -0
  134. package/dist/engine/verifier/criterion-matcher.d.ts.map +1 -0
  135. package/dist/engine/verifier/criterion-matcher.js +210 -0
  136. package/dist/engine/verifier/criterion-matcher.js.map +1 -0
  137. package/dist/index.js +24 -0
  138. package/dist/index.js.map +1 -1
  139. package/dist/storage/agent-registry-store.d.ts +11 -0
  140. package/dist/storage/agent-registry-store.d.ts.map +1 -0
  141. package/dist/storage/agent-registry-store.js +45 -0
  142. package/dist/storage/agent-registry-store.js.map +1 -0
  143. package/dist/storage/compliance-score-store.d.ts +16 -0
  144. package/dist/storage/compliance-score-store.d.ts.map +1 -0
  145. package/dist/storage/compliance-score-store.js +30 -0
  146. package/dist/storage/compliance-score-store.js.map +1 -0
  147. package/dist/storage/context-profile-store.d.ts +14 -0
  148. package/dist/storage/context-profile-store.d.ts.map +1 -0
  149. package/dist/storage/context-profile-store.js +34 -0
  150. package/dist/storage/context-profile-store.js.map +1 -0
  151. package/dist/storage/workflow-checkpoint-store.d.ts +16 -0
  152. package/dist/storage/workflow-checkpoint-store.d.ts.map +1 -0
  153. package/dist/storage/workflow-checkpoint-store.js +71 -0
  154. package/dist/storage/workflow-checkpoint-store.js.map +1 -0
  155. package/dist/tools/checkpoint/approve-checkpoint-handler.d.ts +3 -0
  156. package/dist/tools/checkpoint/approve-checkpoint-handler.d.ts.map +1 -0
  157. package/dist/tools/checkpoint/approve-checkpoint-handler.js +32 -0
  158. package/dist/tools/checkpoint/approve-checkpoint-handler.js.map +1 -0
  159. package/dist/tools/checkpoint/configure-policy-handler.d.ts +3 -0
  160. package/dist/tools/checkpoint/configure-policy-handler.d.ts.map +1 -0
  161. package/dist/tools/checkpoint/configure-policy-handler.js +60 -0
  162. package/dist/tools/checkpoint/configure-policy-handler.js.map +1 -0
  163. package/dist/tools/checkpoint/list-checkpoints-handler.d.ts +3 -0
  164. package/dist/tools/checkpoint/list-checkpoints-handler.d.ts.map +1 -0
  165. package/dist/tools/checkpoint/list-checkpoints-handler.js +25 -0
  166. package/dist/tools/checkpoint/list-checkpoints-handler.js.map +1 -0
  167. package/dist/tools/checkpoint/reject-checkpoint-handler.d.ts +3 -0
  168. package/dist/tools/checkpoint/reject-checkpoint-handler.d.ts.map +1 -0
  169. package/dist/tools/checkpoint/reject-checkpoint-handler.js +32 -0
  170. package/dist/tools/checkpoint/reject-checkpoint-handler.js.map +1 -0
  171. package/dist/tools/checkpoint/require-checkpoint-handler.d.ts +3 -0
  172. package/dist/tools/checkpoint/require-checkpoint-handler.d.ts.map +1 -0
  173. package/dist/tools/checkpoint/require-checkpoint-handler.js +44 -0
  174. package/dist/tools/checkpoint/require-checkpoint-handler.js.map +1 -0
  175. package/dist/tools/competitive-handlers.d.ts +30 -0
  176. package/dist/tools/competitive-handlers.d.ts.map +1 -0
  177. package/dist/tools/competitive-handlers.js +155 -0
  178. package/dist/tools/competitive-handlers.js.map +1 -0
  179. package/dist/tools/create-spec/post-creation.d.ts +1 -1
  180. package/dist/tools/create-spec/post-creation.d.ts.map +1 -1
  181. package/dist/tools/create-spec/post-creation.js +13 -1
  182. package/dist/tools/create-spec/post-creation.js.map +1 -1
  183. package/dist/tools/create-spec.js +1 -1
  184. package/dist/tools/create-spec.js.map +1 -1
  185. package/dist/tools/hook-generator-handler.d.ts +8 -0
  186. package/dist/tools/hook-generator-handler.d.ts.map +1 -0
  187. package/dist/tools/hook-generator-handler.js +154 -0
  188. package/dist/tools/hook-generator-handler.js.map +1 -0
  189. package/dist/tools/project-dna-handler.d.ts +34 -0
  190. package/dist/tools/project-dna-handler.d.ts.map +1 -0
  191. package/dist/tools/project-dna-handler.js +261 -0
  192. package/dist/tools/project-dna-handler.js.map +1 -0
  193. package/dist/tools/pull-sync-handler.d.ts +25 -0
  194. package/dist/tools/pull-sync-handler.d.ts.map +1 -0
  195. package/dist/tools/pull-sync-handler.js +161 -0
  196. package/dist/tools/pull-sync-handler.js.map +1 -0
  197. package/dist/tools/register-agent-registry.d.ts +5 -0
  198. package/dist/tools/register-agent-registry.d.ts.map +1 -0
  199. package/dist/tools/register-agent-registry.js +254 -0
  200. package/dist/tools/register-agent-registry.js.map +1 -0
  201. package/dist/tools/register-auto-remediation.d.ts +3 -0
  202. package/dist/tools/register-auto-remediation.d.ts.map +1 -0
  203. package/dist/tools/register-auto-remediation.js +174 -0
  204. package/dist/tools/register-auto-remediation.js.map +1 -0
  205. package/dist/tools/register-autopilot.d.ts +3 -0
  206. package/dist/tools/register-autopilot.d.ts.map +1 -0
  207. package/dist/tools/register-autopilot.js +78 -0
  208. package/dist/tools/register-autopilot.js.map +1 -0
  209. package/dist/tools/register-checkpoints.d.ts +3 -0
  210. package/dist/tools/register-checkpoints.d.ts.map +1 -0
  211. package/dist/tools/register-checkpoints.js +134 -0
  212. package/dist/tools/register-checkpoints.js.map +1 -0
  213. package/dist/tools/register-competitive.d.ts +3 -0
  214. package/dist/tools/register-competitive.d.ts.map +1 -0
  215. package/dist/tools/register-competitive.js +88 -0
  216. package/dist/tools/register-competitive.js.map +1 -0
  217. package/dist/tools/register-context-profile.d.ts +3 -0
  218. package/dist/tools/register-context-profile.d.ts.map +1 -0
  219. package/dist/tools/register-context-profile.js +106 -0
  220. package/dist/tools/register-context-profile.js.map +1 -0
  221. package/dist/tools/register-ears.d.ts +3 -0
  222. package/dist/tools/register-ears.d.ts.map +1 -0
  223. package/dist/tools/register-ears.js +148 -0
  224. package/dist/tools/register-ears.js.map +1 -0
  225. package/dist/tools/register-enterprise-compliance.js +1 -1
  226. package/dist/tools/register-enterprise-compliance.js.map +1 -1
  227. package/dist/tools/register-hook-generator.d.ts +3 -0
  228. package/dist/tools/register-hook-generator.d.ts.map +1 -0
  229. package/dist/tools/register-hook-generator.js +96 -0
  230. package/dist/tools/register-hook-generator.js.map +1 -0
  231. package/dist/tools/register-project-dna.d.ts +3 -0
  232. package/dist/tools/register-project-dna.d.ts.map +1 -0
  233. package/dist/tools/register-project-dna.js +43 -0
  234. package/dist/tools/register-project-dna.js.map +1 -0
  235. package/dist/tools/register-pull-sync.d.ts +3 -0
  236. package/dist/tools/register-pull-sync.d.ts.map +1 -0
  237. package/dist/tools/register-pull-sync.js +71 -0
  238. package/dist/tools/register-pull-sync.js.map +1 -0
  239. package/dist/tools/register-spec405-tools.d.ts +7 -0
  240. package/dist/tools/register-spec405-tools.d.ts.map +1 -0
  241. package/dist/tools/register-spec405-tools.js +194 -0
  242. package/dist/tools/register-spec405-tools.js.map +1 -0
  243. package/dist/tools/register-verifier.d.ts +3 -0
  244. package/dist/tools/register-verifier.d.ts.map +1 -0
  245. package/dist/tools/register-verifier.js +141 -0
  246. package/dist/tools/register-verifier.js.map +1 -0
  247. package/dist/tools/update-status/side-effects.d.ts.map +1 -1
  248. package/dist/tools/update-status/side-effects.js +32 -0
  249. package/dist/tools/update-status/side-effects.js.map +1 -1
  250. package/dist/types/agent-registry.d.ts +53 -0
  251. package/dist/types/agent-registry.d.ts.map +1 -0
  252. package/dist/types/agent-registry.js +2 -0
  253. package/dist/types/agent-registry.js.map +1 -0
  254. package/dist/types/analysis.d.ts +98 -0
  255. package/dist/types/analysis.d.ts.map +1 -1
  256. package/dist/types/autopilot.d.ts +36 -0
  257. package/dist/types/autopilot.d.ts.map +1 -0
  258. package/dist/types/autopilot.js +3 -0
  259. package/dist/types/autopilot.js.map +1 -0
  260. package/dist/types/competitive.d.ts +41 -0
  261. package/dist/types/competitive.d.ts.map +1 -0
  262. package/dist/types/competitive.js +3 -0
  263. package/dist/types/competitive.js.map +1 -0
  264. package/dist/types/context-profile.d.ts +22 -0
  265. package/dist/types/context-profile.d.ts.map +1 -0
  266. package/dist/types/context-profile.js +2 -0
  267. package/dist/types/context-profile.js.map +1 -0
  268. package/dist/types/ears.d.ts +34 -0
  269. package/dist/types/ears.d.ts.map +1 -0
  270. package/dist/types/ears.js +3 -0
  271. package/dist/types/ears.js.map +1 -0
  272. package/dist/types/health.d.ts +40 -0
  273. package/dist/types/health.d.ts.map +1 -0
  274. package/dist/types/health.js +3 -0
  275. package/dist/types/health.js.map +1 -0
  276. package/dist/types/hook-generator.d.ts +49 -0
  277. package/dist/types/hook-generator.d.ts.map +1 -0
  278. package/dist/types/hook-generator.js +3 -0
  279. package/dist/types/hook-generator.js.map +1 -0
  280. package/dist/types/index.d.ts +9 -0
  281. package/dist/types/index.d.ts.map +1 -1
  282. package/dist/types/index.js +9 -0
  283. package/dist/types/index.js.map +1 -1
  284. package/dist/types/notion-asana-monday.d.ts +38 -0
  285. package/dist/types/notion-asana-monday.d.ts.map +1 -1
  286. package/dist/types/project-dna.d.ts +46 -0
  287. package/dist/types/project-dna.d.ts.map +1 -0
  288. package/dist/types/project-dna.js +4 -0
  289. package/dist/types/project-dna.js.map +1 -0
  290. package/dist/types/workflow-checkpoint.d.ts +66 -0
  291. package/dist/types/workflow-checkpoint.d.ts.map +1 -0
  292. package/dist/types/workflow-checkpoint.js +4 -0
  293. package/dist/types/workflow-checkpoint.js.map +1 -0
  294. package/package.json +1 -1
  295. package/src/config/ai-tool-registry.json +71 -0
  296. package/src/config/autopilot-config.json +21 -0
  297. package/src/config/competitive-catalog.json +83 -0
  298. package/src/config/license-plans.json +43 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-ears.js","sourceRoot":"","sources":["../../src/tools/register-ears.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,7 @@ export function registerEnterpriseComplianceTools(s) {
16
16
  const projectId = hashProjectPath(projectPath);
17
17
  return handleComplianceGapAnalysis(projectId, framework);
18
18
  });
19
- s.registerTool('generate_compliance_report', {
19
+ s.registerTool('generate_compliance_evidence', {
20
20
  description: 'Generates a compliance evidence package for a framework — includes control matrix, change management evidence from audit trail, and gap analysis.',
21
21
  inputSchema: {
22
22
  projectPath: z.string().describe('Absolute path to the project root'),
@@ -1 +1 @@
1
- {"version":3,"file":"register-enterprise-compliance.js","sourceRoot":"","sources":["../../src/tools/register-enterprise-compliance.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAG7D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,2BAA2B,EAC3B,iCAAiC,GAClC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,MAAM,aAAa,GAAG,CAAC;KACpB,IAAI,CAAC,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;KAC5D,QAAQ,CAAC,sEAAsE,CAAC,CAAC;AAEpF,MAAM,UAAU,iCAAiC,CAAC,CAAY;IAC5D,CAAC,CAAC,YAAY,CACZ,yBAAyB,EACzB;QACE,WAAW,EACT,4KAA4K;QAC9K,WAAW,EAAE;YACX,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;YACrE,SAAS,EAAE,aAAa;SACzB;KACF,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,EAAE;QACnC,MAAM,SAAS,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;QAC/C,OAAO,2BAA2B,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC3D,CAAC,CACF,CAAC;IAEF,CAAC,CAAC,YAAY,CACZ,4BAA4B,EAC5B;QACE,WAAW,EACT,mJAAmJ;QACrJ,WAAW,EAAE;YACX,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;YACrE,SAAS,EAAE,aAAa;SACzB;KACF,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,EAAE;QACnC,MAAM,SAAS,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;QAC/C,OAAO,iCAAiC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACjE,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"register-enterprise-compliance.js","sourceRoot":"","sources":["../../src/tools/register-enterprise-compliance.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAG7D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,2BAA2B,EAC3B,iCAAiC,GAClC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,MAAM,aAAa,GAAG,CAAC;KACpB,IAAI,CAAC,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;KAC5D,QAAQ,CAAC,sEAAsE,CAAC,CAAC;AAEpF,MAAM,UAAU,iCAAiC,CAAC,CAAY;IAC5D,CAAC,CAAC,YAAY,CACZ,yBAAyB,EACzB;QACE,WAAW,EACT,4KAA4K;QAC9K,WAAW,EAAE;YACX,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;YACrE,SAAS,EAAE,aAAa;SACzB;KACF,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,EAAE;QACnC,MAAM,SAAS,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;QAC/C,OAAO,2BAA2B,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC3D,CAAC,CACF,CAAC;IAEF,CAAC,CAAC,YAAY,CACZ,8BAA8B,EAC9B;QACE,WAAW,EACT,mJAAmJ;QACrJ,WAAW,EAAE;YACX,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;YACrE,SAAS,EAAE,aAAa;SACzB;KACF,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,EAAE;QACnC,MAAM,SAAS,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;QAC/C,OAAO,iCAAiC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACjE,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerHookGeneratorTools(server: McpServer): void;
3
+ //# sourceMappingURL=register-hook-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-hook-generator.d.ts","sourceRoot":"","sources":["../../src/tools/register-hook-generator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAmCzE,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsGlE"}
@@ -0,0 +1,96 @@
1
+ // tools/register-hook-generator.ts — Registers Dynamic Hook Generator tools (SPEC-416)
2
+ import { z } from 'zod';
3
+ import { safeLicensed, safeTracked } from './safe-handler.js';
4
+ import { handleGenerateHooksForStack, handlePreviewHooks, handleMergeHooks, } from './hook-generator-handler.js';
5
+ // ---------------------------------------------------------------------------
6
+ // Shared sub-schemas
7
+ // ---------------------------------------------------------------------------
8
+ const hookSectionSchema = z.object({
9
+ id: z.string().max(200).describe('Unique section identifier, e.g. typescript-typecheck'),
10
+ phase: z
11
+ .enum(['pre-commit', 'commit-msg', 'pre-push', 'post-merge', 'post-checkout'])
12
+ .describe('Git hook phase. Values: pre-commit | commit-msg | pre-push | post-merge | post-checkout'),
13
+ stack: z.string().max(100).describe('Stack token this section targets'),
14
+ content: z.string().max(5000).describe('Hook commands or config content'),
15
+ description: z.string().max(500).describe('Human-readable description of what this section does'),
16
+ });
17
+ // ---------------------------------------------------------------------------
18
+ // Registration
19
+ // ---------------------------------------------------------------------------
20
+ export function registerHookGeneratorTools(server) {
21
+ // ---- generate_hooks_for_stack (pro) ----
22
+ server.registerTool('generate_hooks_for_stack', {
23
+ description: 'Generates git hooks and AI-tool-specific hooks based on the detected or specified ' +
24
+ 'project stack. Merges intelligently with existing hook files using planu markers ' +
25
+ '(<!-- planu:generated:ID -->) so manual edits outside markers are never overwritten.',
26
+ inputSchema: {
27
+ projectPath: z.string().max(1000).describe('Absolute path to the project root directory'),
28
+ stack: z
29
+ .array(z.string().max(100))
30
+ .optional()
31
+ .describe('Stack tokens to generate hooks for. If omitted, auto-detected from project files. ' +
32
+ 'Examples: typescript, eslint, prettier, vitest, jest, python, go, commitlint'),
33
+ aiTool: z
34
+ .string()
35
+ .max(100)
36
+ .optional()
37
+ .describe('AI tool to generate tool-specific hooks for. If omitted, auto-detected. ' +
38
+ 'Values: claude | cursor | windsurf | gemini | kiro | cline | copilot | aider'),
39
+ dryRun: z
40
+ .boolean()
41
+ .optional()
42
+ .describe('If true, shows what would be generated without writing files. Default: false'),
43
+ },
44
+ annotations: {
45
+ title: 'Generate Hooks for Stack',
46
+ readOnlyHint: false,
47
+ },
48
+ }, safeLicensed('generate_hooks_for_stack', async (args) => handleGenerateHooksForStack(args)));
49
+ // ---- preview_hooks (free) ----
50
+ server.registerTool('preview_hooks', {
51
+ description: 'Previews what generate_hooks_for_stack would add or update without writing any files. ' +
52
+ 'Shows which phases would be modified, which sections are already present, and what ' +
53
+ 'new sections would be injected.',
54
+ inputSchema: {
55
+ projectPath: z.string().max(1000).describe('Absolute path to the project root directory'),
56
+ stack: z
57
+ .array(z.string().max(100))
58
+ .optional()
59
+ .describe('Stack tokens to preview. If omitted, auto-detected. ' +
60
+ 'Examples: typescript, eslint, vitest, python, go'),
61
+ },
62
+ annotations: {
63
+ title: 'Preview Hook Changes',
64
+ readOnlyHint: true,
65
+ },
66
+ }, safeTracked('preview_hooks', async (args) => handlePreviewHooks(args)));
67
+ // ---- merge_hooks (pro) ----
68
+ server.registerTool('merge_hooks', {
69
+ description: 'Merges explicit HookSection entries into the appropriate git hook files. ' +
70
+ 'Uses planu markers for idempotent injection — re-running the same sections ' +
71
+ 'is safe and produces no duplicate output.',
72
+ inputSchema: {
73
+ projectPath: z.string().max(1000).describe('Absolute path to the project root directory'),
74
+ sections: z
75
+ .array(hookSectionSchema)
76
+ .describe('Hook sections to merge into the project hook files'),
77
+ dryRun: z
78
+ .boolean()
79
+ .optional()
80
+ .describe('If true, computes the merged content but does NOT write files. Default: false'),
81
+ },
82
+ annotations: {
83
+ title: 'Merge Hook Sections',
84
+ readOnlyHint: false,
85
+ },
86
+ }, safeLicensed('merge_hooks', async (args) => {
87
+ const typed = args;
88
+ const input = {
89
+ projectPath: typed.projectPath,
90
+ sections: typed.sections,
91
+ dryRun: typed.dryRun,
92
+ };
93
+ return handleMergeHooks(input);
94
+ }));
95
+ }
96
+ //# sourceMappingURL=register-hook-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-hook-generator.js","sourceRoot":"","sources":["../../src/tools/register-hook-generator.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 registerProjectDNATools(server: McpServer): void;
3
+ //# sourceMappingURL=register-project-dna.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-project-dna.d.ts","sourceRoot":"","sources":["../../src/tools/register-project-dna.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAYzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8D/D"}
@@ -0,0 +1,43 @@
1
+ import { safeTracked, safeLicensed } from './safe-handler.js';
2
+ import { handleDetectProjectDNA, handleBootstrapProjectIntelligence, handleUpdateProjectDNA, DetectProjectDNAInputSchema, BootstrapProjectIntelligenceInputSchema, UpdateDNAInputSchema, } from './project-dna-handler.js';
3
+ export function registerProjectDNATools(server) {
4
+ server.registerTool('detect_project_dna', {
5
+ description: 'Detect the technology stack and active AI tool for a project. ' +
6
+ 'Reads package.json, Cargo.toml, go.mod, requirements.txt, tsconfig.json, ' +
7
+ 'and AI tool detection files to build a complete Project DNA profile.',
8
+ inputSchema: DetectProjectDNAInputSchema,
9
+ annotations: {
10
+ title: 'Detect Project DNA',
11
+ readOnlyHint: true,
12
+ destructiveHint: false,
13
+ openWorldHint: false,
14
+ },
15
+ }, safeTracked('detect_project_dna', async (args) => handleDetectProjectDNA(args)));
16
+ server.registerTool('bootstrap_project_intelligence', {
17
+ description: 'Generate AI tool rules and suggest skills based on the detected project stack. ' +
18
+ 'Creates rules files in the format expected by the active AI tool ' +
19
+ '(markdown for Claude/Kiro/Gemini, .mdc for Cursor, appended sections for Windsurf/Cline/Copilot). ' +
20
+ 'Supported stack tokens: supabase, typescript, nextjs, vitest, react, prisma, zod, stripe, jest, ' +
21
+ 'fastapi, django, flask, gin, axum, tailwind.',
22
+ inputSchema: BootstrapProjectIntelligenceInputSchema,
23
+ annotations: {
24
+ title: 'Bootstrap Project Intelligence',
25
+ readOnlyHint: false,
26
+ destructiveHint: false,
27
+ openWorldHint: false,
28
+ },
29
+ }, safeLicensed('bootstrap_project_intelligence', async (args) => handleBootstrapProjectIntelligence(args)));
30
+ server.registerTool('update_project_dna', {
31
+ description: 'Re-scan a project to refresh its DNA profile (stack, AI tool, package manager). ' +
32
+ 'Use after adding new dependencies or switching AI tools. ' +
33
+ 'After updating, run bootstrap_project_intelligence to apply the new configuration.',
34
+ inputSchema: UpdateDNAInputSchema,
35
+ annotations: {
36
+ title: 'Update Project DNA',
37
+ readOnlyHint: true,
38
+ destructiveHint: false,
39
+ openWorldHint: false,
40
+ },
41
+ }, safeLicensed('update_project_dna', async (args) => handleUpdateProjectDNA(args)));
42
+ }
43
+ //# sourceMappingURL=register-project-dna.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-project-dna.js","sourceRoot":"","sources":["../../src/tools/register-project-dna.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EACL,sBAAsB,EACtB,kCAAkC,EAClC,sBAAsB,EACtB,2BAA2B,EAC3B,uCAAuC,EACvC,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AAGlC,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,WAAW,EACT,gEAAgE;YAChE,2EAA2E;YAC3E,sEAAsE;QACxE,WAAW,EAAE,2BAA2B;QACxC,WAAW,EAAE;YACX,KAAK,EAAE,oBAAoB;YAC3B,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,WAAW,CAAC,oBAAoB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAC/C,sBAAsB,CAAC,IAAsB,CAAC,CAC/C,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,gCAAgC,EAChC;QACE,WAAW,EACT,iFAAiF;YACjF,mEAAmE;YACnE,oGAAoG;YACpG,kGAAkG;YAClG,8CAA8C;QAChD,WAAW,EAAE,uCAAuC;QACpD,WAAW,EAAE;YACX,KAAK,EAAE,gCAAgC;YACvC,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,YAAY,CAAC,gCAAgC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAC5D,kCAAkC,CAAC,IAAsB,CAAC,CAC3D,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,WAAW,EACT,kFAAkF;YAClF,2DAA2D;YAC3D,oFAAoF;QACtF,WAAW,EAAE,oBAAoB;QACjC,WAAW,EAAE;YACX,KAAK,EAAE,oBAAoB;YAC3B,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,YAAY,CAAC,oBAAoB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAChD,sBAAsB,CAAC,IAAsB,CAAC,CAC/C,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerPullSyncTools(server: McpServer): void;
3
+ //# sourceMappingURL=register-pull-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-pull-sync.d.ts","sourceRoot":"","sources":["../../src/tools/register-pull-sync.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAuCzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyE7D"}
@@ -0,0 +1,71 @@
1
+ import { z } from 'zod';
2
+ import { safeLicensed } from './safe-handler.js';
3
+ import { handlePullFromNotion, handlePullFromAsana, handlePullFromMonday, handleSyncAllIntegrations, } from './pull-sync-handler.js';
4
+ const projectPathSchema = z
5
+ .string()
6
+ .min(1)
7
+ .max(4096)
8
+ .describe('Absolute path to the project root where Planu stores its data.');
9
+ const conflictStrategySchema = z
10
+ .enum(['spec-wins', 'external-wins', 'newest-wins', 'manual'])
11
+ .describe('Conflict resolution strategy when a field differs between Planu and the external PM tool. ' +
12
+ '"spec-wins" keeps the Planu value (default). ' +
13
+ '"external-wins" applies the external value to Planu. ' +
14
+ '"newest-wins" picks whichever side was updated most recently. ' +
15
+ '"manual" flags the conflict for human review without resolving it.')
16
+ .default('spec-wins');
17
+ const createMissingSchema = z
18
+ .boolean()
19
+ .optional()
20
+ .describe('When true, creates new Planu specs for external items that have no matching spec. ' +
21
+ 'Default: false.');
22
+ export function registerPullSyncTools(server) {
23
+ server.registerTool('pull_from_notion', {
24
+ description: 'Pull updates from Notion into Planu. ' +
25
+ 'Compares Notion page status against the last-synced state and applies changes according ' +
26
+ 'to the conflict resolution strategy. ' +
27
+ 'Run configure_notion and sync_to_notion first to establish the sync mapping.',
28
+ inputSchema: {
29
+ projectPath: projectPathSchema,
30
+ conflictStrategy: conflictStrategySchema,
31
+ createMissing: createMissingSchema,
32
+ },
33
+ annotations: { title: 'Pull from Notion' },
34
+ }, safeLicensed('pull_from_notion', (args) => handlePullFromNotion(args)));
35
+ server.registerTool('pull_from_asana', {
36
+ description: 'Pull updates from Asana into Planu. ' +
37
+ 'Compares Asana task completion state against the last-synced state and applies changes ' +
38
+ 'according to the conflict resolution strategy. ' +
39
+ 'Run configure_asana and sync_to_asana first to establish the sync mapping.',
40
+ inputSchema: {
41
+ projectPath: projectPathSchema,
42
+ conflictStrategy: conflictStrategySchema,
43
+ createMissing: createMissingSchema,
44
+ },
45
+ annotations: { title: 'Pull from Asana' },
46
+ }, safeLicensed('pull_from_asana', (args) => handlePullFromAsana(args)));
47
+ server.registerTool('pull_from_monday', {
48
+ description: 'Pull updates from Monday.com into Planu. ' +
49
+ 'Compares Monday.com item status against the last-synced state and applies changes ' +
50
+ 'according to the conflict resolution strategy. ' +
51
+ 'Run configure_monday and sync_to_monday first to establish the sync mapping.',
52
+ inputSchema: {
53
+ projectPath: projectPathSchema,
54
+ conflictStrategy: conflictStrategySchema,
55
+ createMissing: createMissingSchema,
56
+ },
57
+ annotations: { title: 'Pull from Monday.com' },
58
+ }, safeLicensed('pull_from_monday', (args) => handlePullFromMonday(args)));
59
+ server.registerTool('sync_all_integrations', {
60
+ description: 'Run pull sync for all configured PM integrations (Notion, Asana, Monday.com) in one call. ' +
61
+ 'Idempotent — safe to run repeatedly. ' +
62
+ 'Only syncs integrations that have been configured with their respective configure_* tools. ' +
63
+ 'Returns a unified summary of updates pulled and conflicts resolved across all integrations.',
64
+ inputSchema: {
65
+ projectPath: projectPathSchema,
66
+ conflictStrategy: conflictStrategySchema,
67
+ },
68
+ annotations: { title: 'Sync All Integrations' },
69
+ }, safeLicensed('sync_all_integrations', (args) => handleSyncAllIntegrations(args)));
70
+ }
71
+ //# sourceMappingURL=register-pull-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-pull-sync.js","sourceRoot":"","sources":["../../src/tools/register-pull-sync.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,yBAAyB,GAK1B,MAAM,wBAAwB,CAAC;AAEhC,MAAM,iBAAiB,GAAG,CAAC;KACxB,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,IAAI,CAAC;KACT,QAAQ,CAAC,gEAAgE,CAAC,CAAC;AAE9E,MAAM,sBAAsB,GAAG,CAAC;KAC7B,IAAI,CAAC,CAAC,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;KAC7D,QAAQ,CACP,4FAA4F;IAC1F,+CAA+C;IAC/C,uDAAuD;IACvD,gEAAgE;IAChE,oEAAoE,CACvE;KACA,OAAO,CAAC,WAAW,CAAC,CAAC;AAExB,MAAM,mBAAmB,GAAG,CAAC;KAC1B,OAAO,EAAE;KACT,QAAQ,EAAE;KACV,QAAQ,CACP,oFAAoF;IAClF,iBAAiB,CACpB,CAAC;AAEJ,MAAM,UAAU,qBAAqB,CAAC,MAAiB;IACrD,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,WAAW,EACT,uCAAuC;YACvC,0FAA0F;YAC1F,uCAAuC;YACvC,8EAA8E;QAChF,WAAW,EAAE;YACX,WAAW,EAAE,iBAAiB;YAC9B,gBAAgB,EAAE,sBAAsB;YACxC,aAAa,EAAE,mBAAmB;SACnC;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE;KAC3C,EACD,YAAY,CAAC,kBAAkB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAA2B,CAAC,CAAC,CAC9F,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,WAAW,EACT,sCAAsC;YACtC,yFAAyF;YACzF,iDAAiD;YACjD,4EAA4E;QAC9E,WAAW,EAAE;YACX,WAAW,EAAE,iBAAiB;YAC9B,gBAAgB,EAAE,sBAAsB;YACxC,aAAa,EAAE,mBAAmB;SACnC;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE;KAC1C,EACD,YAAY,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAA0B,CAAC,CAAC,CAC3F,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,WAAW,EACT,2CAA2C;YAC3C,oFAAoF;YACpF,iDAAiD;YACjD,8EAA8E;QAChF,WAAW,EAAE;YACX,WAAW,EAAE,iBAAiB;YAC9B,gBAAgB,EAAE,sBAAsB;YACxC,aAAa,EAAE,mBAAmB;SACnC;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE;KAC/C,EACD,YAAY,CAAC,kBAAkB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAA2B,CAAC,CAAC,CAC9F,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,WAAW,EACT,4FAA4F;YAC5F,uCAAuC;YACvC,6FAA6F;YAC7F,6FAA6F;QAC/F,WAAW,EAAE;YACX,WAAW,EAAE,iBAAiB;YAC9B,gBAAgB,EAAE,sBAAsB;SACzC;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE;KAChD,EACD,YAAY,CAAC,uBAAuB,EAAE,CAAC,IAAI,EAAE,EAAE,CAC7C,yBAAyB,CAAC,IAAgC,CAAC,CAC5D,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ /**
3
+ * Register SPEC-405 tools on the MCP server.
4
+ * Call this from src/index.ts after all other tool registrations.
5
+ */
6
+ export declare function registerSpec405Tools(server: McpServer): void;
7
+ //# sourceMappingURL=register-spec405-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-spec405-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-spec405-tools.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+P5D"}
@@ -0,0 +1,194 @@
1
+ // tools/register-spec405-tools.ts — SPEC-405
2
+ // Registers four pro tools with real engine logic:
3
+ // 1. check_api_compatibility_v2 — compare API surfaces of two specs
4
+ // 2. critical_path_analyzer_v2 — DAG-based critical path with frontmatter deps
5
+ // 3. similar_problems_finder_v2 — cross-project similarity search
6
+ // 4. suggest_mcp_catalog — recommend external MCP servers from catalog
7
+ //
8
+ // AUTO-TRIGGER NOTE (suggest_mcp_catalog):
9
+ // This tool should be auto-triggered from create-spec.ts after a spec is
10
+ // created, if the description contains any of the catalog keywords
11
+ // (database, payment, github, email, slack, search, etc.).
12
+ // Integration point: after `specStore.create(...)` resolves, call
13
+ // `suggestMcpServers(args.description)` and append suggestions to the
14
+ // response text when results.suggestions.length > 0.
15
+ import { z } from 'zod';
16
+ import { safeTracked, safeLicensed } from './safe-handler.js';
17
+ import { formatSuccess, formatError, toolResult } from './response-helpers.js';
18
+ import { checkApiCompatibility } from '../engine/api-compat/compatibility-checker.js';
19
+ import { analyzeCriticalPath } from '../engine/critical-path/path-analyzer.js';
20
+ import { findSimilarProblems } from '../engine/similar-problems/similarity-finder.js';
21
+ import { suggestMcpServers } from '../engine/mcp-catalog/catalog-advisor.js';
22
+ /**
23
+ * Register SPEC-405 tools on the MCP server.
24
+ * Call this from src/index.ts after all other tool registrations.
25
+ */
26
+ export function registerSpec405Tools(server) {
27
+ // ---------------------------------------------------------------------------
28
+ // 1. check_api_compatibility_v2
29
+ // ---------------------------------------------------------------------------
30
+ server.registerTool('check_api_compatibility_v2', {
31
+ description: 'Compare the API surfaces of two specs by scanning their spec.md files for REST endpoints, GraphQL types, and events. Returns breaking changes, additive changes, and a compatibility score 0-100.',
32
+ annotations: { readOnlyHint: true },
33
+ inputSchema: {
34
+ specId1: z
35
+ .string()
36
+ .min(1)
37
+ .max(500)
38
+ .describe('First spec ID (e.g. SPEC-001). Will read planu/specs/SPEC-001-*/spec.md'),
39
+ specId2: z
40
+ .string()
41
+ .min(1)
42
+ .max(500)
43
+ .describe('Second spec ID (e.g. SPEC-002). Will read planu/specs/SPEC-002-*/spec.md'),
44
+ projectPath: z
45
+ .string()
46
+ .min(1)
47
+ .max(4096)
48
+ .describe('Absolute path to the project root where planu/specs/ lives'),
49
+ },
50
+ }, safeLicensed('check_api_compatibility_v2', async (args) => {
51
+ const { specId1, specId2, projectPath } = args;
52
+ if (!projectPath.trim()) {
53
+ return toolResult(formatError('projectPath is required'), undefined, true);
54
+ }
55
+ if (!specId1.trim() || !specId2.trim()) {
56
+ return toolResult(formatError('specId1 and specId2 are required'), undefined, true);
57
+ }
58
+ const result = await checkApiCompatibility(specId1, specId2, projectPath);
59
+ const lines = [
60
+ `Compatibility: ${result.compatible ? 'COMPATIBLE' : 'BREAKING CHANGES DETECTED'}`,
61
+ `Score: ${String(result.score)}/100`,
62
+ `Breaking changes: ${String(result.breakingChanges.length)}`,
63
+ `Additive changes: ${String(result.additiveChanges.length)}`,
64
+ ];
65
+ if (result.breakingChanges.length > 0) {
66
+ lines.push('', 'Breaking:');
67
+ for (const c of result.breakingChanges) {
68
+ lines.push(` - [${c.type}] ${c.item}`);
69
+ }
70
+ }
71
+ if (result.additiveChanges.length > 0) {
72
+ lines.push('', 'Additive:');
73
+ for (const c of result.additiveChanges) {
74
+ lines.push(` - [${c.type}] ${c.item}`);
75
+ }
76
+ }
77
+ return toolResult(formatSuccess('API Compatibility Check', lines.join('\n')), result);
78
+ }));
79
+ // ---------------------------------------------------------------------------
80
+ // 2. critical_path_analyzer_v2
81
+ // ---------------------------------------------------------------------------
82
+ server.registerTool('critical_path_analyzer_v2', {
83
+ description: 'Analyze all specs in a project using frontmatter dependencies and estimatedHours to compute the true critical path, parallelizable specs, and scheduling bottlenecks.',
84
+ annotations: { readOnlyHint: true },
85
+ inputSchema: {
86
+ projectPath: z
87
+ .string()
88
+ .min(1)
89
+ .max(4096)
90
+ .describe('Absolute path to the project root where planu/specs/ lives'),
91
+ },
92
+ }, safeLicensed('critical_path_analyzer_v2', async (args) => {
93
+ const { projectPath } = args;
94
+ if (!projectPath.trim()) {
95
+ return toolResult(formatError('projectPath is required'), undefined, true);
96
+ }
97
+ const result = await analyzeCriticalPath(projectPath);
98
+ const lines = [
99
+ `Total hours: ${result.totalHours.toFixed(1)}h`,
100
+ `Critical path (${String(result.criticalPath.length)} specs): ${result.criticalPath.join(' → ') || '(none)'}`,
101
+ `Parallelizable specs: ${String(result.parallelizableSpecs.length)}`,
102
+ `Bottlenecks: ${result.bottlenecks.join(', ') || '(none)'}`,
103
+ ];
104
+ return toolResult(formatSuccess('Critical Path Analysis', lines.join('\n')), result);
105
+ }));
106
+ // ---------------------------------------------------------------------------
107
+ // 3. similar_problems_finder_v2
108
+ // ---------------------------------------------------------------------------
109
+ server.registerTool('similar_problems_finder_v2', {
110
+ description: 'Find specs with similar problems across all registered projects using Jaccard similarity on titles and tags. Returns top 5 matches with similarity score and matching keywords.',
111
+ annotations: { readOnlyHint: true },
112
+ inputSchema: {
113
+ projectPath: z
114
+ .string()
115
+ .min(1)
116
+ .max(4096)
117
+ .describe('Absolute path to the project root (used as the primary project)'),
118
+ description: z
119
+ .string()
120
+ .min(1)
121
+ .max(2000)
122
+ .describe('Free-text description of the problem to search for (e.g. "implement OAuth login with Google")'),
123
+ specId: z
124
+ .string()
125
+ .max(500)
126
+ .optional()
127
+ .describe('Optional spec ID to use as additional context for similarity matching'),
128
+ },
129
+ }, safeTracked('similar_problems_finder_v2', async (args) => {
130
+ const { projectPath, description, specId } = args;
131
+ if (!projectPath.trim()) {
132
+ return toolResult(formatError('projectPath is required'), undefined, true);
133
+ }
134
+ if (!description.trim()) {
135
+ return toolResult(formatError('description is required'), undefined, true);
136
+ }
137
+ const result = await findSimilarProblems(description, projectPath, specId);
138
+ const lines = [
139
+ `Query: "${result.query}"`,
140
+ `Searched: ${String(result.totalSearched)} specs across all registered projects`,
141
+ `Found: ${String(result.results.length)} similar spec(s)`,
142
+ '',
143
+ ];
144
+ for (const r of result.results) {
145
+ lines.push(` [${(r.similarityScore * 100).toFixed(0)}%] ${r.specId}: ${r.title}`, ` Project: ${r.projectPath}`, ` Matches: ${r.keyMatches.join(', ')}`);
146
+ }
147
+ if (result.results.length === 0) {
148
+ lines.push(' No similar specs found.');
149
+ }
150
+ return toolResult(formatSuccess('Similar Problems Finder', lines.join('\n')), result);
151
+ }));
152
+ // ---------------------------------------------------------------------------
153
+ // 4. suggest_mcp_catalog
154
+ // ---------------------------------------------------------------------------
155
+ server.registerTool('suggest_mcp_catalog', {
156
+ description: 'Suggest external MCP servers from a curated catalog based on your project description or tech stack. Returns top 5 matches with install commands and rationale.',
157
+ annotations: { readOnlyHint: true },
158
+ inputSchema: {
159
+ description: z
160
+ .string()
161
+ .min(1)
162
+ .max(2000)
163
+ .describe('Description of what you need (e.g. "send transactional emails and store user data in postgres")'),
164
+ stack: z
165
+ .string()
166
+ .max(500)
167
+ .optional()
168
+ .describe('Optional tech stack hint (e.g. "nextjs stripe supabase")'),
169
+ projectPath: z
170
+ .string()
171
+ .max(4096)
172
+ .optional()
173
+ .describe('Project path (unused for catalog lookup, kept for consistency)'),
174
+ },
175
+ }, safeTracked('suggest_mcp_catalog', (args) => {
176
+ const { description, stack } = args;
177
+ if (!description.trim()) {
178
+ return Promise.resolve(toolResult(formatError('description is required'), undefined, true));
179
+ }
180
+ const result = suggestMcpServers(description, stack);
181
+ if (result.suggestions.length === 0) {
182
+ return Promise.resolve(toolResult(formatSuccess('MCP Catalog Suggestions', 'No matching MCP servers found for your description. Try using more specific keywords (e.g. database, payment, email, github, slack).'), result));
183
+ }
184
+ const lines = [
185
+ `Found ${String(result.suggestions.length)} MCP server suggestion(s) for: "${result.query}"`,
186
+ '',
187
+ ];
188
+ for (const s of result.suggestions) {
189
+ lines.push(`**${s.name}** — ${s.description}`, ` Install: \`${s.installCommand}\``, ` Rationale: ${s.rationale}`, ` Use cases: ${s.useCases.join(', ')}`, '');
190
+ }
191
+ return Promise.resolve(toolResult(formatSuccess('MCP Catalog Suggestions', lines.join('\n')), result));
192
+ }));
193
+ }
194
+ //# sourceMappingURL=register-spec405-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-spec405-tools.js","sourceRoot":"","sources":["../../src/tools/register-spec405-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 registerVerifierTools(server: McpServer): void;
3
+ //# sourceMappingURL=register-verifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-verifier.d.ts","sourceRoot":"","sources":["../../src/tools/register-verifier.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA0EzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6F7D"}