@planu/cli 1.10.0 → 1.12.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 (323) hide show
  1. package/dist/config/license-plans.json +32 -2
  2. package/dist/engine/api-compat/compatibility-checker.d.ts +4 -0
  3. package/dist/engine/api-compat/compatibility-checker.d.ts.map +1 -0
  4. package/dist/engine/api-compat/compatibility-checker.js +118 -0
  5. package/dist/engine/api-compat/compatibility-checker.js.map +1 -0
  6. package/dist/engine/checkpoint/checkpoint-manager.d.ts +22 -0
  7. package/dist/engine/checkpoint/checkpoint-manager.d.ts.map +1 -0
  8. package/dist/engine/checkpoint/checkpoint-manager.js +76 -0
  9. package/dist/engine/checkpoint/checkpoint-manager.js.map +1 -0
  10. package/dist/engine/checkpoint/policy-engine.d.ts +10 -0
  11. package/dist/engine/checkpoint/policy-engine.d.ts.map +1 -0
  12. package/dist/engine/checkpoint/policy-engine.js +87 -0
  13. package/dist/engine/checkpoint/policy-engine.js.map +1 -0
  14. package/dist/engine/compliance/auto-remediator.d.ts +9 -0
  15. package/dist/engine/compliance/auto-remediator.d.ts.map +1 -0
  16. package/dist/engine/compliance/auto-remediator.js +118 -0
  17. package/dist/engine/compliance/auto-remediator.js.map +1 -0
  18. package/dist/engine/compliance/evidence-builder.d.ts +19 -0
  19. package/dist/engine/compliance/evidence-builder.d.ts.map +1 -0
  20. package/dist/engine/compliance/evidence-builder.js +36 -0
  21. package/dist/engine/compliance/evidence-builder.js.map +1 -0
  22. package/dist/engine/compliance/framework-catalog.d.ts +15 -0
  23. package/dist/engine/compliance/framework-catalog.d.ts.map +1 -0
  24. package/dist/engine/compliance/framework-catalog.js +134 -0
  25. package/dist/engine/compliance/framework-catalog.js.map +1 -0
  26. package/dist/engine/compliance/gap-analyzer.d.ts +11 -0
  27. package/dist/engine/compliance/gap-analyzer.d.ts.map +1 -0
  28. package/dist/engine/compliance/gap-analyzer.js +39 -0
  29. package/dist/engine/compliance/gap-analyzer.js.map +1 -0
  30. package/dist/engine/context-profile/profile-catalog.d.ts +5 -0
  31. package/dist/engine/context-profile/profile-catalog.d.ts.map +1 -0
  32. package/dist/engine/context-profile/profile-catalog.js +145 -0
  33. package/dist/engine/context-profile/profile-catalog.js.map +1 -0
  34. package/dist/engine/critical-path/path-analyzer.d.ts +3 -0
  35. package/dist/engine/critical-path/path-analyzer.d.ts.map +1 -0
  36. package/dist/engine/critical-path/path-analyzer.js +145 -0
  37. package/dist/engine/critical-path/path-analyzer.js.map +1 -0
  38. package/dist/engine/distribution/cost-estimator.d.ts +8 -0
  39. package/dist/engine/distribution/cost-estimator.d.ts.map +1 -0
  40. package/dist/engine/distribution/cost-estimator.js +113 -0
  41. package/dist/engine/distribution/cost-estimator.js.map +1 -0
  42. package/dist/engine/distribution/diagram-generator.d.ts +12 -0
  43. package/dist/engine/distribution/diagram-generator.d.ts.map +1 -0
  44. package/dist/engine/distribution/diagram-generator.js +59 -0
  45. package/dist/engine/distribution/diagram-generator.js.map +1 -0
  46. package/dist/engine/distribution/readiness-analyzer.d.ts +4 -0
  47. package/dist/engine/distribution/readiness-analyzer.d.ts.map +1 -0
  48. package/dist/engine/distribution/readiness-analyzer.js +61 -0
  49. package/dist/engine/distribution/readiness-analyzer.js.map +1 -0
  50. package/dist/engine/distribution/runbook-generator.d.ts +7 -0
  51. package/dist/engine/distribution/runbook-generator.d.ts.map +1 -0
  52. package/dist/engine/distribution/runbook-generator.js +42 -0
  53. package/dist/engine/distribution/runbook-generator.js.map +1 -0
  54. package/dist/engine/drift/violation-resolver.d.ts +9 -0
  55. package/dist/engine/drift/violation-resolver.d.ts.map +1 -0
  56. package/dist/engine/drift/violation-resolver.js +128 -0
  57. package/dist/engine/drift/violation-resolver.js.map +1 -0
  58. package/dist/engine/ears/criterion-scorer.d.ts +7 -0
  59. package/dist/engine/ears/criterion-scorer.d.ts.map +1 -0
  60. package/dist/engine/ears/criterion-scorer.js +87 -0
  61. package/dist/engine/ears/criterion-scorer.js.map +1 -0
  62. package/dist/engine/ears/pattern-matcher.d.ts +5 -0
  63. package/dist/engine/ears/pattern-matcher.d.ts.map +1 -0
  64. package/dist/engine/ears/pattern-matcher.js +48 -0
  65. package/dist/engine/ears/pattern-matcher.js.map +1 -0
  66. package/dist/engine/ears/rewriter.d.ts +7 -0
  67. package/dist/engine/ears/rewriter.d.ts.map +1 -0
  68. package/dist/engine/ears/rewriter.js +45 -0
  69. package/dist/engine/ears/rewriter.js.map +1 -0
  70. package/dist/engine/ears/spec-linter.d.ts +7 -0
  71. package/dist/engine/ears/spec-linter.d.ts.map +1 -0
  72. package/dist/engine/ears/spec-linter.js +127 -0
  73. package/dist/engine/ears/spec-linter.js.map +1 -0
  74. package/dist/engine/health/auto-fixer.d.ts +7 -0
  75. package/dist/engine/health/auto-fixer.d.ts.map +1 -0
  76. package/dist/engine/health/auto-fixer.js +130 -0
  77. package/dist/engine/health/auto-fixer.js.map +1 -0
  78. package/dist/engine/mcp-catalog/catalog-advisor.d.ts +3 -0
  79. package/dist/engine/mcp-catalog/catalog-advisor.d.ts.map +1 -0
  80. package/dist/engine/mcp-catalog/catalog-advisor.js +180 -0
  81. package/dist/engine/mcp-catalog/catalog-advisor.js.map +1 -0
  82. package/dist/engine/mcp-hub/adapter-registry.d.ts +23 -0
  83. package/dist/engine/mcp-hub/adapter-registry.d.ts.map +1 -0
  84. package/dist/engine/mcp-hub/adapter-registry.js +19 -0
  85. package/dist/engine/mcp-hub/adapter-registry.js.map +1 -0
  86. package/dist/engine/mcp-hub/adapters/github-adapter.d.ts +4 -0
  87. package/dist/engine/mcp-hub/adapters/github-adapter.d.ts.map +1 -0
  88. package/dist/engine/mcp-hub/adapters/github-adapter.js +44 -0
  89. package/dist/engine/mcp-hub/adapters/github-adapter.js.map +1 -0
  90. package/dist/engine/mcp-hub/adapters/supabase-adapter.d.ts +4 -0
  91. package/dist/engine/mcp-hub/adapters/supabase-adapter.d.ts.map +1 -0
  92. package/dist/engine/mcp-hub/adapters/supabase-adapter.js +41 -0
  93. package/dist/engine/mcp-hub/adapters/supabase-adapter.js.map +1 -0
  94. package/dist/engine/mcp-hub/event-router.d.ts +19 -0
  95. package/dist/engine/mcp-hub/event-router.d.ts.map +1 -0
  96. package/dist/engine/mcp-hub/event-router.js +47 -0
  97. package/dist/engine/mcp-hub/event-router.js.map +1 -0
  98. package/dist/engine/productivity/calibration-engine.d.ts +17 -0
  99. package/dist/engine/productivity/calibration-engine.d.ts.map +1 -0
  100. package/dist/engine/productivity/calibration-engine.js +49 -0
  101. package/dist/engine/productivity/calibration-engine.js.map +1 -0
  102. package/dist/engine/productivity/time-tracker.d.ts +6 -0
  103. package/dist/engine/productivity/time-tracker.d.ts.map +1 -0
  104. package/dist/engine/productivity/time-tracker.js +28 -0
  105. package/dist/engine/productivity/time-tracker.js.map +1 -0
  106. package/dist/engine/productivity/vibe-tax-calculator.d.ts +14 -0
  107. package/dist/engine/productivity/vibe-tax-calculator.d.ts.map +1 -0
  108. package/dist/engine/productivity/vibe-tax-calculator.js +63 -0
  109. package/dist/engine/productivity/vibe-tax-calculator.js.map +1 -0
  110. package/dist/engine/quality-gates/gate-catalog.d.ts +6 -0
  111. package/dist/engine/quality-gates/gate-catalog.d.ts.map +1 -0
  112. package/dist/engine/quality-gates/gate-catalog.js +351 -0
  113. package/dist/engine/quality-gates/gate-catalog.js.map +1 -0
  114. package/dist/engine/quality-gates/gate-evaluator.d.ts +3 -0
  115. package/dist/engine/quality-gates/gate-evaluator.d.ts.map +1 -0
  116. package/dist/engine/quality-gates/gate-evaluator.js +25 -0
  117. package/dist/engine/quality-gates/gate-evaluator.js.map +1 -0
  118. package/dist/engine/quality-gates/gate-injector.d.ts +20 -0
  119. package/dist/engine/quality-gates/gate-injector.d.ts.map +1 -0
  120. package/dist/engine/quality-gates/gate-injector.js +75 -0
  121. package/dist/engine/quality-gates/gate-injector.js.map +1 -0
  122. package/dist/engine/similar-problems/similarity-finder.d.ts +3 -0
  123. package/dist/engine/similar-problems/similarity-finder.d.ts.map +1 -0
  124. package/dist/engine/similar-problems/similarity-finder.js +144 -0
  125. package/dist/engine/similar-problems/similarity-finder.js.map +1 -0
  126. package/dist/engine/sync/asana-puller.d.ts +9 -0
  127. package/dist/engine/sync/asana-puller.d.ts.map +1 -0
  128. package/dist/engine/sync/asana-puller.js +91 -0
  129. package/dist/engine/sync/asana-puller.js.map +1 -0
  130. package/dist/engine/sync/conflict-resolver.d.ts +17 -0
  131. package/dist/engine/sync/conflict-resolver.d.ts.map +1 -0
  132. package/dist/engine/sync/conflict-resolver.js +58 -0
  133. package/dist/engine/sync/conflict-resolver.js.map +1 -0
  134. package/dist/engine/sync/monday-puller.d.ts +9 -0
  135. package/dist/engine/sync/monday-puller.d.ts.map +1 -0
  136. package/dist/engine/sync/monday-puller.js +110 -0
  137. package/dist/engine/sync/monday-puller.js.map +1 -0
  138. package/dist/engine/sync/notion-puller.d.ts +15 -0
  139. package/dist/engine/sync/notion-puller.d.ts.map +1 -0
  140. package/dist/engine/sync/notion-puller.js +101 -0
  141. package/dist/engine/sync/notion-puller.js.map +1 -0
  142. package/dist/engine/verifier/code-scanner.d.ts +8 -0
  143. package/dist/engine/verifier/code-scanner.d.ts.map +1 -0
  144. package/dist/engine/verifier/code-scanner.js +73 -0
  145. package/dist/engine/verifier/code-scanner.js.map +1 -0
  146. package/dist/engine/verifier/compliance-scorer.d.ts +17 -0
  147. package/dist/engine/verifier/compliance-scorer.d.ts.map +1 -0
  148. package/dist/engine/verifier/compliance-scorer.js +131 -0
  149. package/dist/engine/verifier/compliance-scorer.js.map +1 -0
  150. package/dist/engine/verifier/criterion-matcher.d.ts +15 -0
  151. package/dist/engine/verifier/criterion-matcher.d.ts.map +1 -0
  152. package/dist/engine/verifier/criterion-matcher.js +210 -0
  153. package/dist/engine/verifier/criterion-matcher.js.map +1 -0
  154. package/dist/index.js +24 -0
  155. package/dist/index.js.map +1 -1
  156. package/dist/storage/compliance-audit-store.d.ts +12 -0
  157. package/dist/storage/compliance-audit-store.d.ts.map +1 -0
  158. package/dist/storage/compliance-audit-store.js +40 -0
  159. package/dist/storage/compliance-audit-store.js.map +1 -0
  160. package/dist/storage/compliance-score-store.d.ts +16 -0
  161. package/dist/storage/compliance-score-store.d.ts.map +1 -0
  162. package/dist/storage/compliance-score-store.js +30 -0
  163. package/dist/storage/compliance-score-store.js.map +1 -0
  164. package/dist/storage/context-profile-store.d.ts +14 -0
  165. package/dist/storage/context-profile-store.d.ts.map +1 -0
  166. package/dist/storage/context-profile-store.js +34 -0
  167. package/dist/storage/context-profile-store.js.map +1 -0
  168. package/dist/storage/mcp-hub-store.d.ts +9 -0
  169. package/dist/storage/mcp-hub-store.d.ts.map +1 -0
  170. package/dist/storage/mcp-hub-store.js +28 -0
  171. package/dist/storage/mcp-hub-store.js.map +1 -0
  172. package/dist/storage/time-tracking-store.d.ts +6 -0
  173. package/dist/storage/time-tracking-store.d.ts.map +1 -0
  174. package/dist/storage/time-tracking-store.js +34 -0
  175. package/dist/storage/time-tracking-store.js.map +1 -0
  176. package/dist/storage/workflow-checkpoint-store.d.ts +16 -0
  177. package/dist/storage/workflow-checkpoint-store.d.ts.map +1 -0
  178. package/dist/storage/workflow-checkpoint-store.js +71 -0
  179. package/dist/storage/workflow-checkpoint-store.js.map +1 -0
  180. package/dist/tools/checkpoint/approve-checkpoint-handler.d.ts +3 -0
  181. package/dist/tools/checkpoint/approve-checkpoint-handler.d.ts.map +1 -0
  182. package/dist/tools/checkpoint/approve-checkpoint-handler.js +32 -0
  183. package/dist/tools/checkpoint/approve-checkpoint-handler.js.map +1 -0
  184. package/dist/tools/checkpoint/configure-policy-handler.d.ts +3 -0
  185. package/dist/tools/checkpoint/configure-policy-handler.d.ts.map +1 -0
  186. package/dist/tools/checkpoint/configure-policy-handler.js +60 -0
  187. package/dist/tools/checkpoint/configure-policy-handler.js.map +1 -0
  188. package/dist/tools/checkpoint/list-checkpoints-handler.d.ts +3 -0
  189. package/dist/tools/checkpoint/list-checkpoints-handler.d.ts.map +1 -0
  190. package/dist/tools/checkpoint/list-checkpoints-handler.js +25 -0
  191. package/dist/tools/checkpoint/list-checkpoints-handler.js.map +1 -0
  192. package/dist/tools/checkpoint/reject-checkpoint-handler.d.ts +3 -0
  193. package/dist/tools/checkpoint/reject-checkpoint-handler.d.ts.map +1 -0
  194. package/dist/tools/checkpoint/reject-checkpoint-handler.js +32 -0
  195. package/dist/tools/checkpoint/reject-checkpoint-handler.js.map +1 -0
  196. package/dist/tools/checkpoint/require-checkpoint-handler.d.ts +3 -0
  197. package/dist/tools/checkpoint/require-checkpoint-handler.d.ts.map +1 -0
  198. package/dist/tools/checkpoint/require-checkpoint-handler.js +44 -0
  199. package/dist/tools/checkpoint/require-checkpoint-handler.js.map +1 -0
  200. package/dist/tools/compliance-gap-handler.d.ts +5 -0
  201. package/dist/tools/compliance-gap-handler.d.ts.map +1 -0
  202. package/dist/tools/compliance-gap-handler.js +64 -0
  203. package/dist/tools/compliance-gap-handler.js.map +1 -0
  204. package/dist/tools/distribution-readiness-handler.d.ts +3 -0
  205. package/dist/tools/distribution-readiness-handler.d.ts.map +1 -0
  206. package/dist/tools/distribution-readiness-handler.js +24 -0
  207. package/dist/tools/distribution-readiness-handler.js.map +1 -0
  208. package/dist/tools/generate-cost-estimate-handler.d.ts +3 -0
  209. package/dist/tools/generate-cost-estimate-handler.d.ts.map +1 -0
  210. package/dist/tools/generate-cost-estimate-handler.js +29 -0
  211. package/dist/tools/generate-cost-estimate-handler.js.map +1 -0
  212. package/dist/tools/generate-deployment-diagram-handler.d.ts +3 -0
  213. package/dist/tools/generate-deployment-diagram-handler.d.ts.map +1 -0
  214. package/dist/tools/generate-deployment-diagram-handler.js +26 -0
  215. package/dist/tools/generate-deployment-diagram-handler.js.map +1 -0
  216. package/dist/tools/generate-runbook-handler.d.ts +3 -0
  217. package/dist/tools/generate-runbook-handler.d.ts.map +1 -0
  218. package/dist/tools/generate-runbook-handler.js +18 -0
  219. package/dist/tools/generate-runbook-handler.js.map +1 -0
  220. package/dist/tools/inject-quality-gates-handler.d.ts +7 -0
  221. package/dist/tools/inject-quality-gates-handler.d.ts.map +1 -0
  222. package/dist/tools/inject-quality-gates-handler.js +59 -0
  223. package/dist/tools/inject-quality-gates-handler.js.map +1 -0
  224. package/dist/tools/mcp-hub-handler.d.ts +7 -0
  225. package/dist/tools/mcp-hub-handler.d.ts.map +1 -0
  226. package/dist/tools/mcp-hub-handler.js +73 -0
  227. package/dist/tools/mcp-hub-handler.js.map +1 -0
  228. package/dist/tools/productivity-report-handler.d.ts +4 -0
  229. package/dist/tools/productivity-report-handler.d.ts.map +1 -0
  230. package/dist/tools/productivity-report-handler.js +98 -0
  231. package/dist/tools/productivity-report-handler.js.map +1 -0
  232. package/dist/tools/pull-sync-handler.d.ts +25 -0
  233. package/dist/tools/pull-sync-handler.d.ts.map +1 -0
  234. package/dist/tools/pull-sync-handler.js +161 -0
  235. package/dist/tools/pull-sync-handler.js.map +1 -0
  236. package/dist/tools/register-auto-remediation.d.ts +3 -0
  237. package/dist/tools/register-auto-remediation.d.ts.map +1 -0
  238. package/dist/tools/register-auto-remediation.js +174 -0
  239. package/dist/tools/register-auto-remediation.js.map +1 -0
  240. package/dist/tools/register-checkpoints.d.ts +3 -0
  241. package/dist/tools/register-checkpoints.d.ts.map +1 -0
  242. package/dist/tools/register-checkpoints.js +134 -0
  243. package/dist/tools/register-checkpoints.js.map +1 -0
  244. package/dist/tools/register-context-profile.d.ts +3 -0
  245. package/dist/tools/register-context-profile.d.ts.map +1 -0
  246. package/dist/tools/register-context-profile.js +106 -0
  247. package/dist/tools/register-context-profile.js.map +1 -0
  248. package/dist/tools/register-distribution.d.ts +3 -0
  249. package/dist/tools/register-distribution.d.ts.map +1 -0
  250. package/dist/tools/register-distribution.js +103 -0
  251. package/dist/tools/register-distribution.js.map +1 -0
  252. package/dist/tools/register-ears.d.ts +3 -0
  253. package/dist/tools/register-ears.d.ts.map +1 -0
  254. package/dist/tools/register-ears.js +148 -0
  255. package/dist/tools/register-ears.js.map +1 -0
  256. package/dist/tools/register-enterprise-compliance.d.ts +3 -0
  257. package/dist/tools/register-enterprise-compliance.d.ts.map +1 -0
  258. package/dist/tools/register-enterprise-compliance.js +30 -0
  259. package/dist/tools/register-enterprise-compliance.js.map +1 -0
  260. package/dist/tools/register-mcp-hub.d.ts +3 -0
  261. package/dist/tools/register-mcp-hub.d.ts.map +1 -0
  262. package/dist/tools/register-mcp-hub.js +47 -0
  263. package/dist/tools/register-mcp-hub.js.map +1 -0
  264. package/dist/tools/register-productivity.d.ts +3 -0
  265. package/dist/tools/register-productivity.d.ts.map +1 -0
  266. package/dist/tools/register-productivity.js +25 -0
  267. package/dist/tools/register-productivity.js.map +1 -0
  268. package/dist/tools/register-pull-sync.d.ts +3 -0
  269. package/dist/tools/register-pull-sync.d.ts.map +1 -0
  270. package/dist/tools/register-pull-sync.js +71 -0
  271. package/dist/tools/register-pull-sync.js.map +1 -0
  272. package/dist/tools/register-quality-gates.d.ts +3 -0
  273. package/dist/tools/register-quality-gates.d.ts.map +1 -0
  274. package/dist/tools/register-quality-gates.js +47 -0
  275. package/dist/tools/register-quality-gates.js.map +1 -0
  276. package/dist/tools/register-spec405-tools.d.ts +7 -0
  277. package/dist/tools/register-spec405-tools.d.ts.map +1 -0
  278. package/dist/tools/register-spec405-tools.js +194 -0
  279. package/dist/tools/register-spec405-tools.js.map +1 -0
  280. package/dist/tools/register-verifier.d.ts +3 -0
  281. package/dist/tools/register-verifier.d.ts.map +1 -0
  282. package/dist/tools/register-verifier.js +141 -0
  283. package/dist/tools/register-verifier.js.map +1 -0
  284. package/dist/types/analysis.d.ts +128 -0
  285. package/dist/types/analysis.d.ts.map +1 -1
  286. package/dist/types/context-profile.d.ts +22 -0
  287. package/dist/types/context-profile.d.ts.map +1 -0
  288. package/dist/types/context-profile.js +2 -0
  289. package/dist/types/context-profile.js.map +1 -0
  290. package/dist/types/docs.d.ts +43 -0
  291. package/dist/types/docs.d.ts.map +1 -1
  292. package/dist/types/ears.d.ts +34 -0
  293. package/dist/types/ears.d.ts.map +1 -0
  294. package/dist/types/ears.js +3 -0
  295. package/dist/types/ears.js.map +1 -0
  296. package/dist/types/env.d.ts +23 -0
  297. package/dist/types/env.d.ts.map +1 -1
  298. package/dist/types/estimation.d.ts +30 -0
  299. package/dist/types/estimation.d.ts.map +1 -1
  300. package/dist/types/health.d.ts +40 -0
  301. package/dist/types/health.d.ts.map +1 -0
  302. package/dist/types/health.js +3 -0
  303. package/dist/types/health.js.map +1 -0
  304. package/dist/types/index.d.ts +4 -0
  305. package/dist/types/index.d.ts.map +1 -1
  306. package/dist/types/index.js +4 -0
  307. package/dist/types/index.js.map +1 -1
  308. package/dist/types/notion-asana-monday.d.ts +38 -0
  309. package/dist/types/notion-asana-monday.d.ts.map +1 -1
  310. package/dist/types/orchestration/index.d.ts +1 -0
  311. package/dist/types/orchestration/index.d.ts.map +1 -1
  312. package/dist/types/orchestration/mcp-hub.d.ts +29 -0
  313. package/dist/types/orchestration/mcp-hub.d.ts.map +1 -0
  314. package/dist/types/orchestration/mcp-hub.js +3 -0
  315. package/dist/types/orchestration/mcp-hub.js.map +1 -0
  316. package/dist/types/orchestration.d.ts +1 -1
  317. package/dist/types/orchestration.d.ts.map +1 -1
  318. package/dist/types/workflow-checkpoint.d.ts +66 -0
  319. package/dist/types/workflow-checkpoint.d.ts.map +1 -0
  320. package/dist/types/workflow-checkpoint.js +4 -0
  321. package/dist/types/workflow-checkpoint.js.map +1 -0
  322. package/package.json +1 -1
  323. package/src/config/license-plans.json +32 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-context-profile.js","sourceRoot":"","sources":["../../src/tools/register-context-profile.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 registerDistributionTools(server: McpServer): void;
3
+ //# sourceMappingURL=register-distribution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-distribution.d.ts","sourceRoot":"","sources":["../../src/tools/register-distribution.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyHjE"}
@@ -0,0 +1,103 @@
1
+ import { z } from 'zod';
2
+ import { safeLicensed } from './safe-handler.js';
3
+ import { resolveProjectId, missingProjectIdError } from './resolve-project-id.js';
4
+ import { handleDistributionReadiness } from './distribution-readiness-handler.js';
5
+ import { handleGenerateDeploymentDiagram } from './generate-deployment-diagram-handler.js';
6
+ import { handleGenerateRunbook } from './generate-runbook-handler.js';
7
+ import { handleGenerateCostEstimate } from './generate-cost-estimate-handler.js';
8
+ export function registerDistributionTools(server) {
9
+ server.registerTool('distribution_readiness', {
10
+ description: 'Analyzes all project specs to assess distribution readiness — returns a score 0-100, ' +
11
+ 'which critical specs are present/missing, and recommendations for gaps.',
12
+ annotations: { title: 'Distribution Readiness', readOnlyHint: true },
13
+ inputSchema: {
14
+ projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
15
+ projectPath: z
16
+ .string()
17
+ .max(4096)
18
+ .optional()
19
+ .describe('Absolute path to project root. Derives projectId automatically.'),
20
+ },
21
+ }, safeLicensed('distribution_readiness', async (args) => {
22
+ const pid = resolveProjectId(args);
23
+ if (!pid) {
24
+ return missingProjectIdError;
25
+ }
26
+ return handleDistributionReadiness(pid);
27
+ }));
28
+ server.registerTool('generate_deployment_diagram', {
29
+ description: 'Generates a C4 architecture diagram in Mermaid format from the project spec set — ' +
30
+ 'shows services, databases, caches, and external dependencies.',
31
+ annotations: { title: 'Generate Deployment Diagram', readOnlyHint: true },
32
+ inputSchema: {
33
+ projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
34
+ projectPath: z
35
+ .string()
36
+ .max(4096)
37
+ .optional()
38
+ .describe('Absolute path to project root. Derives projectId automatically.'),
39
+ },
40
+ }, safeLicensed('generate_deployment_diagram', async (args) => {
41
+ const pid = resolveProjectId(args);
42
+ if (!pid) {
43
+ return missingProjectIdError;
44
+ }
45
+ return handleGenerateDeploymentDiagram(pid);
46
+ }));
47
+ server.registerTool('generate_runbook', {
48
+ description: 'Generates an operational runbook for the project — deploy steps, rollback procedure, ' +
49
+ 'health checks, alerting thresholds. Provider auto-detected from project knowledge.',
50
+ annotations: { title: 'Generate Runbook', readOnlyHint: true },
51
+ inputSchema: {
52
+ projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
53
+ projectPath: z
54
+ .string()
55
+ .max(4096)
56
+ .optional()
57
+ .describe('Absolute path to project root. Derives projectId automatically.'),
58
+ projectName: z
59
+ .string()
60
+ .max(200)
61
+ .optional()
62
+ .describe('Project name (auto-detected if not provided)'),
63
+ },
64
+ }, safeLicensed('generate_runbook', async (args) => {
65
+ const pid = resolveProjectId(args);
66
+ if (!pid) {
67
+ return missingProjectIdError;
68
+ }
69
+ const { projectName } = args;
70
+ return handleGenerateRunbook(pid, projectName);
71
+ }));
72
+ server.registerTool('generate_cost_estimate', {
73
+ description: 'Estimates monthly cloud infrastructure costs for the project based on the stack and provider. ' +
74
+ 'Returns per-resource breakdown with monthly and yearly totals.',
75
+ annotations: { title: 'Generate Cost Estimate', readOnlyHint: true },
76
+ inputSchema: {
77
+ projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
78
+ projectPath: z
79
+ .string()
80
+ .max(4096)
81
+ .optional()
82
+ .describe('Absolute path to project root. Derives projectId automatically.'),
83
+ provider: z
84
+ .enum(['aws', 'gcp', 'railway', 'vercel', 'fly', 'generic'])
85
+ .optional()
86
+ .describe('Cloud provider — auto-detected from project stack if not provided. ' +
87
+ 'Valid values: aws | gcp | railway | vercel | fly | generic'),
88
+ resources: z
89
+ .array(z.enum(['compute', 'database', 'cache', 'cdn', 'storage', 'monitoring']))
90
+ .optional()
91
+ .describe('Resource types to estimate. Defaults to compute+database+monitoring. ' +
92
+ 'Valid values: compute | database | cache | cdn | storage | monitoring'),
93
+ },
94
+ }, safeLicensed('generate_cost_estimate', async (args) => {
95
+ const pid = resolveProjectId(args);
96
+ if (!pid) {
97
+ return missingProjectIdError;
98
+ }
99
+ const { provider, resources } = args;
100
+ return handleGenerateCostEstimate(pid, resources, provider);
101
+ }));
102
+ }
103
+ //# sourceMappingURL=register-distribution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-distribution.js","sourceRoot":"","sources":["../../src/tools/register-distribution.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 registerEarsTools(server: McpServer): void;
3
+ //# sourceMappingURL=register-ears.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-ears.d.ts","sourceRoot":"","sources":["../../src/tools/register-ears.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkLzD"}
@@ -0,0 +1,148 @@
1
+ // tools/register-ears.ts — EARS criteria quality tools (SPEC-410)
2
+ import { z } from 'zod';
3
+ import { safeTracked } from './safe-handler.js';
4
+ import { lintSpec, lintAllSpecs } from '../engine/ears/spec-linter.js';
5
+ import { scoreCriterion } from '../engine/ears/criterion-scorer.js';
6
+ import { generateRewrites } from '../engine/ears/rewriter.js';
7
+ import { detectEarsPattern } from '../engine/ears/pattern-matcher.js';
8
+ export function registerEarsTools(server) {
9
+ // -------------------------------------------------------------------------
10
+ // validate_criteria_quality — score AC quality for a spec or raw criteria
11
+ // -------------------------------------------------------------------------
12
+ server.registerTool('validate_criteria_quality', {
13
+ description: 'Score acceptance criteria quality using EARS (Easy Approach to Requirements Syntax). ' +
14
+ 'Detects vague language, scores testability and specificity (0-10 each), ' +
15
+ 'identifies the EARS pattern, and suggests rewrites for low-scoring criteria. ' +
16
+ 'Provide either specId (reads from spec file) or criteria (raw text array). ' +
17
+ 'Returns per-criterion scores, overall grade (A-F), and rewrite suggestions.',
18
+ inputSchema: {
19
+ projectPath: z
20
+ .string()
21
+ .min(1)
22
+ .max(4096)
23
+ .describe('Absolute path to the project root where planu/ directory lives.'),
24
+ specId: z
25
+ .string()
26
+ .min(1)
27
+ .max(500)
28
+ .optional()
29
+ .describe('Spec ID to validate (e.g. SPEC-042). Reads criteria from the spec file.'),
30
+ criteria: z
31
+ .array(z.string().min(1).max(2000))
32
+ .optional()
33
+ .describe('Raw acceptance criteria text array to score. Used when specId is not provided.'),
34
+ },
35
+ annotations: { title: 'Validate Criteria Quality', readOnlyHint: true },
36
+ }, safeTracked('validate_criteria_quality', async (args) => {
37
+ const { projectPath, specId, criteria } = args;
38
+ if (specId !== undefined) {
39
+ const report = await lintSpec(specId, projectPath);
40
+ return {
41
+ content: [{ type: 'text', text: JSON.stringify(report, null, 2) }],
42
+ };
43
+ }
44
+ if (criteria !== undefined && criteria.length > 0) {
45
+ const scored = criteria.map(scoreCriterion);
46
+ const overallScore = scored.length > 0
47
+ ? Math.round((scored.reduce((sum, c) => sum + c.overallScore, 0) / scored.length) * 10) / 10
48
+ : 0;
49
+ return {
50
+ content: [
51
+ {
52
+ type: 'text',
53
+ text: JSON.stringify({ criteria: scored, overallScore }, null, 2),
54
+ },
55
+ ],
56
+ };
57
+ }
58
+ return {
59
+ content: [
60
+ {
61
+ type: 'text',
62
+ text: 'Provide either specId or criteria array.',
63
+ },
64
+ ],
65
+ isError: true,
66
+ };
67
+ }));
68
+ // -------------------------------------------------------------------------
69
+ // rewrite_criteria_ears — score a single criterion and get EARS rewrites
70
+ // -------------------------------------------------------------------------
71
+ server.registerTool('rewrite_criteria_ears', {
72
+ description: 'Score a single acceptance criterion and generate 2 EARS-format rewrite suggestions. ' +
73
+ 'Returns current testability and specificity scores, detected vagueness flags, ' +
74
+ 'EARS pattern classification, and concrete rewrite alternatives. ' +
75
+ 'No LLM call — rewrites are template-driven for consistency and speed.',
76
+ inputSchema: {
77
+ projectPath: z.string().min(1).max(4096).describe('Absolute path to the project root.'),
78
+ criterion: z
79
+ .string()
80
+ .min(1)
81
+ .max(2000)
82
+ .describe('The acceptance criterion text to score and rewrite.'),
83
+ },
84
+ annotations: { title: 'Rewrite Criteria as EARS', readOnlyHint: true },
85
+ }, safeTracked('rewrite_criteria_ears', (args) => {
86
+ const { criterion } = args;
87
+ const scored = scoreCriterion(criterion);
88
+ const pattern = detectEarsPattern(criterion);
89
+ const rewrites = generateRewrites(criterion, pattern);
90
+ return Promise.resolve({
91
+ content: [
92
+ {
93
+ type: 'text',
94
+ text: JSON.stringify({ ...scored, rewrites }, null, 2),
95
+ },
96
+ ],
97
+ });
98
+ }));
99
+ // -------------------------------------------------------------------------
100
+ // ears_lint — lint all specs in the project and report worst criteria
101
+ // -------------------------------------------------------------------------
102
+ server.registerTool('ears_lint', {
103
+ description: 'Lint all specs in the project for EARS compliance and criteria quality. ' +
104
+ 'Returns project-wide average score, letter grade, and top 10 worst criteria ranked by score. ' +
105
+ 'Use minScore to filter and only report criteria below a threshold. ' +
106
+ 'Helpful for identifying which specs need the most improvement.',
107
+ inputSchema: {
108
+ projectPath: z
109
+ .string()
110
+ .min(1)
111
+ .max(4096)
112
+ .describe('Absolute path to the project root where planu/specs/ directory lives.'),
113
+ minScore: z
114
+ .number()
115
+ .min(0)
116
+ .max(10)
117
+ .optional()
118
+ .describe('Optional score threshold (0-10). Only report criteria with overallScore below this value. ' +
119
+ 'Defaults to 10 (report all criteria regardless of score).'),
120
+ },
121
+ annotations: { title: 'EARS Lint All Specs', readOnlyHint: true },
122
+ }, safeTracked('ears_lint', async (args) => {
123
+ const { projectPath, minScore } = args;
124
+ const report = await lintAllSpecs(projectPath);
125
+ const threshold = minScore ?? 10;
126
+ const filteredWorst = report.topWorstCriteria.filter((c) => c.score < threshold);
127
+ const summary = {
128
+ projectPath: report.projectPath,
129
+ totalSpecs: report.totalSpecs,
130
+ averageScore: report.averageScore,
131
+ grade: report.averageScore >= 9
132
+ ? 'A'
133
+ : report.averageScore >= 7
134
+ ? 'B'
135
+ : report.averageScore >= 5
136
+ ? 'C'
137
+ : report.averageScore >= 3
138
+ ? 'D'
139
+ : 'F',
140
+ topWorstCriteria: filteredWorst,
141
+ generatedAt: report.generatedAt,
142
+ };
143
+ return {
144
+ content: [{ type: 'text', text: JSON.stringify(summary, null, 2) }],
145
+ };
146
+ }));
147
+ }
148
+ //# sourceMappingURL=register-ears.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-ears.js","sourceRoot":"","sources":["../../src/tools/register-ears.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAGlE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAGtE,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IACjD,4EAA4E;IAC5E,0EAA0E;IAC1E,4EAA4E;IAE5E,MAAM,CAAC,YAAY,CACjB,2BAA2B,EAC3B;QACE,WAAW,EACT,uFAAuF;YACvF,0EAA0E;YAC1E,+EAA+E;YAC/E,6EAA6E;YAC7E,6EAA6E;QAC/E,WAAW,EAAE;YACX,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,IAAI,CAAC;iBACT,QAAQ,CAAC,iEAAiE,CAAC;YAC9E,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,GAAG,CAAC;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,yEAAyE,CAAC;YACtF,QAAQ,EAAE,CAAC;iBACR,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;iBAClC,QAAQ,EAAE;iBACV,QAAQ,CACP,gFAAgF,CACjF;SACJ;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,2BAA2B,EAAE,YAAY,EAAE,IAAI,EAAE;KACxE,EACD,WAAW,CAAC,2BAA2B,EAAE,KAAK,EAAE,IAAI,EAAuB,EAAE;QAC3E,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAIzC,CAAC;QAEF,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACnD,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aACnE,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC5C,MAAM,YAAY,GAChB,MAAM,CAAC,MAAM,GAAG,CAAC;gBACf,CAAC,CAAC,IAAI,CAAC,KAAK,CACR,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAC1E,GAAG,EAAE;gBACR,CAAC,CAAC,CAAC,CAAC;YACR,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;qBAClE;iBACF;aACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,0CAA0C;iBACjD;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;IAEF,4EAA4E;IAC5E,yEAAyE;IACzE,4EAA4E;IAE5E,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,WAAW,EACT,sFAAsF;YACtF,gFAAgF;YAChF,kEAAkE;YAClE,uEAAuE;QACzE,WAAW,EAAE;YACX,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,oCAAoC,CAAC;YACvF,SAAS,EAAE,CAAC;iBACT,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,IAAI,CAAC;iBACT,QAAQ,CAAC,qDAAqD,CAAC;SACnE;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,0BAA0B,EAAE,YAAY,EAAE,IAAI,EAAE;KACvE,EACD,WAAW,CAAC,uBAAuB,EAAE,CAAC,IAAI,EAAuB,EAAE;QACjE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAkD,CAAC;QACzE,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAEtD,OAAO,OAAO,CAAC,OAAO,CAAC;YACrB,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;iBACvD;aACF;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CACH,CAAC;IAEF,4EAA4E;IAC5E,sEAAsE;IACtE,4EAA4E;IAE5E,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;QACE,WAAW,EACT,0EAA0E;YAC1E,+FAA+F;YAC/F,qEAAqE;YACrE,gEAAgE;QAClE,WAAW,EAAE;YACX,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,IAAI,CAAC;iBACT,QAAQ,CAAC,uEAAuE,CAAC;YACpF,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,EAAE,CAAC;iBACP,QAAQ,EAAE;iBACV,QAAQ,CACP,4FAA4F;gBAC1F,2DAA2D,CAC9D;SACJ;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE,YAAY,EAAE,IAAI,EAAE;KAClE,EACD,WAAW,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,EAAuB,EAAE;QAC3D,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,IAAkD,CAAC;QACrF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC,CAAC;QAE/C,MAAM,SAAS,GAAG,QAAQ,IAAI,EAAE,CAAC;QACjC,MAAM,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;QAEjF,MAAM,OAAO,GAAG;YACd,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,KAAK,EACH,MAAM,CAAC,YAAY,IAAI,CAAC;gBACtB,CAAC,CAAC,GAAG;gBACL,CAAC,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC;oBACxB,CAAC,CAAC,GAAG;oBACL,CAAC,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC;wBACxB,CAAC,CAAC,GAAG;wBACL,CAAC,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC;4BACxB,CAAC,CAAC,GAAG;4BACL,CAAC,CAAC,GAAG;YACf,gBAAgB,EAAE,aAAa;YAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;SAChC,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACpE,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerEnterpriseComplianceTools(s: McpServer): void;
3
+ //# sourceMappingURL=register-enterprise-compliance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-enterprise-compliance.d.ts","sourceRoot":"","sources":["../../src/tools/register-enterprise-compliance.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAYzE,wBAAgB,iCAAiC,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI,CAgCpE"}
@@ -0,0 +1,30 @@
1
+ // Planu — Enterprise compliance tool registration (SPEC-402)
2
+ import { z } from 'zod';
3
+ import { handleComplianceGapAnalysis, handleGenerateAttestationEnhanced, } from './compliance-gap-handler.js';
4
+ import { hashProjectPath } from '../storage/base-store.js';
5
+ const frameworkEnum = z
6
+ .enum(['soc2-type2', 'gdpr', 'hipaa', 'iso27001', 'pci-dss'])
7
+ .describe('Compliance framework: soc2-type2 | gdpr | hipaa | iso27001 | pci-dss');
8
+ export function registerEnterpriseComplianceTools(s) {
9
+ s.registerTool('compliance_gap_analyzer', {
10
+ description: 'Analyzes project specs against a compliance framework (SOC2/GDPR/HIPAA/ISO27001/PCI-DSS) — returns control matrix showing which controls are covered, partial, or missing.',
11
+ inputSchema: {
12
+ projectPath: z.string().describe('Absolute path to the project root'),
13
+ framework: frameworkEnum,
14
+ },
15
+ }, async ({ projectPath, framework }) => {
16
+ const projectId = hashProjectPath(projectPath);
17
+ return handleComplianceGapAnalysis(projectId, framework);
18
+ });
19
+ s.registerTool('generate_compliance_evidence', {
20
+ description: 'Generates a compliance evidence package for a framework — includes control matrix, change management evidence from audit trail, and gap analysis.',
21
+ inputSchema: {
22
+ projectPath: z.string().describe('Absolute path to the project root'),
23
+ framework: frameworkEnum,
24
+ },
25
+ }, async ({ projectPath, framework }) => {
26
+ const projectId = hashProjectPath(projectPath);
27
+ return handleGenerateAttestationEnhanced(projectId, framework);
28
+ });
29
+ }
30
+ //# sourceMappingURL=register-enterprise-compliance.js.map
@@ -0,0 +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,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 registerMcpHubTools(s: McpServer): void;
3
+ //# sourceMappingURL=register-mcp-hub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-mcp-hub.d.ts","sourceRoot":"","sources":["../../src/tools/register-mcp-hub.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQzE,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI,CA4DtD"}
@@ -0,0 +1,47 @@
1
+ import { z } from 'zod';
2
+ import { handleMcpHubStatus, handleConfigureMcpHub, handleSyncMcpEvent, } from './mcp-hub-handler.js';
3
+ export function registerMcpHubTools(s) {
4
+ s.registerTool('mcp_hub_status', {
5
+ description: 'Lists all registered MCP adapter integrations with their status (connected/not-configured/disabled) and the events each handles.',
6
+ inputSchema: {
7
+ projectPath: z.string().describe('Absolute path to the project root'),
8
+ },
9
+ }, async ({ projectPath }) => {
10
+ const { createHash } = await import('node:crypto');
11
+ const projectId = createHash('sha256').update(projectPath).digest('hex').slice(0, 16);
12
+ return handleMcpHubStatus(projectId);
13
+ });
14
+ s.registerTool('configure_mcp_hub', {
15
+ description: 'Enable or disable an MCP adapter integration and configure its credentials. Adapters: github (token, repo), supabase (projectRef).',
16
+ inputSchema: {
17
+ projectPath: z.string().describe('Absolute path to the project root'),
18
+ adapterId: z
19
+ .enum(['github', 'supabase', 'linear', 'slack', 'jira'])
20
+ .describe('Adapter ID: github | supabase | linear | slack | jira'),
21
+ enabled: z.boolean().describe('Enable or disable this adapter'),
22
+ config: z
23
+ .record(z.string(), z.unknown())
24
+ .optional()
25
+ .describe('Adapter-specific config (e.g. { token, repo } for GitHub)'),
26
+ },
27
+ }, async ({ projectPath, adapterId, enabled, config }) => {
28
+ const { createHash } = await import('node:crypto');
29
+ const projectId = createHash('sha256').update(projectPath).digest('hex').slice(0, 16);
30
+ return handleConfigureMcpHub(projectId, adapterId, enabled, config);
31
+ });
32
+ s.registerTool('sync_mcp_event', {
33
+ description: 'Manually trigger a spec lifecycle event to all enabled MCP adapters — useful for bulk sync after adding a new adapter.',
34
+ inputSchema: {
35
+ projectPath: z.string().describe('Absolute path to the project root'),
36
+ event: z
37
+ .enum(['spec:created', 'spec:approved', 'spec:implementing', 'spec:done', 'spec:updated'])
38
+ .describe('Spec lifecycle event to trigger'),
39
+ specId: z.string().describe('Spec ID to sync'),
40
+ },
41
+ }, async ({ projectPath, event, specId }) => {
42
+ const { createHash } = await import('node:crypto');
43
+ const projectId = createHash('sha256').update(projectPath).digest('hex').slice(0, 16);
44
+ return handleSyncMcpEvent(projectId, event, specId);
45
+ });
46
+ }
47
+ //# sourceMappingURL=register-mcp-hub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-mcp-hub.js","sourceRoot":"","sources":["../../src/tools/register-mcp-hub.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 registerProductivityTools(s: McpServer): void;
3
+ //# sourceMappingURL=register-productivity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-productivity.d.ts","sourceRoot":"","sources":["../../src/tools/register-productivity.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI,CA8B5D"}
@@ -0,0 +1,25 @@
1
+ // tools/register-productivity.ts — SPEC-404: Register productivity intelligence tools
2
+ import { createHash } from 'node:crypto';
3
+ import { z } from 'zod';
4
+ import { handleProductivityReport, handleVelocityIntelligence, } from './productivity-report-handler.js';
5
+ export function registerProductivityTools(s) {
6
+ s.registerTool('productivity_report', {
7
+ description: 'Analyzes completed specs to measure actual vs estimated hours, vibe coding tax, and estimation accuracy. Shows best/worst performing specs and calibration factor.',
8
+ inputSchema: {
9
+ projectPath: z.string().describe('Absolute path to the project root'),
10
+ },
11
+ }, async ({ projectPath }) => {
12
+ const projectId = createHash('sha256').update(projectPath).digest('hex').slice(0, 16);
13
+ return handleProductivityReport(projectId);
14
+ });
15
+ s.registerTool('velocity_intelligence', {
16
+ description: 'Shows spec velocity metrics: success rate (zero validate failures), specs in each lifecycle stage, and time-to-done trends.',
17
+ inputSchema: {
18
+ projectPath: z.string().describe('Absolute path to the project root'),
19
+ },
20
+ }, async ({ projectPath }) => {
21
+ const projectId = createHash('sha256').update(projectPath).digest('hex').slice(0, 16);
22
+ return handleVelocityIntelligence(projectId);
23
+ });
24
+ }
25
+ //# sourceMappingURL=register-productivity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-productivity.js","sourceRoot":"","sources":["../../src/tools/register-productivity.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,kCAAkC,CAAC;AAE1C,MAAM,UAAU,yBAAyB,CAAC,CAAY;IACpD,CAAC,CAAC,YAAY,CACZ,qBAAqB,EACrB;QACE,WAAW,EACT,oKAAoK;QACtK,WAAW,EAAE;YACX,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;SACtE;KACF,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;QACxB,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtF,OAAO,wBAAwB,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC,CACF,CAAC;IAEF,CAAC,CAAC,YAAY,CACZ,uBAAuB,EACvB;QACE,WAAW,EACT,6HAA6H;QAC/H,WAAW,EAAE;YACX,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;SACtE;KACF,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;QACxB,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtF,OAAO,0BAA0B,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC,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,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerQualityGatesTools(server: McpServer): void;
3
+ //# sourceMappingURL=register-quality-gates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-quality-gates.d.ts","sourceRoot":"","sources":["../../src/tools/register-quality-gates.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsDjE"}
@@ -0,0 +1,47 @@
1
+ import { z } from 'zod';
2
+ import { safeLicensed } from './safe-handler.js';
3
+ import { handleInjectQualityGates } from './inject-quality-gates-handler.js';
4
+ import { resolveProjectId, missingProjectIdError } from './resolve-project-id.js';
5
+ export function registerQualityGatesTools(server) {
6
+ server.registerTool('inject_quality_gates', {
7
+ description: 'Inject security, testing, architecture, and performance quality gate criteria ' +
8
+ 'into a spec automatically based on the project stack and spec risk level. ' +
9
+ 'Gates are appended as a "## Quality Gates [AUTO]" section in the spec.md file. ' +
10
+ 'Use profile to control which categories are injected: ' +
11
+ 'strict (all 4 categories), standard (security+testing+architecture), ' +
12
+ 'minimal (security+testing only). ' +
13
+ 'Gates are filtered by spec type, risk level, and detected stack (typescript/python/java/go/generic).',
14
+ annotations: { readOnlyHint: false },
15
+ inputSchema: {
16
+ projectId: z.string().max(500).optional().describe('Project ID hash. Prefer projectPath.'),
17
+ projectPath: z
18
+ .string()
19
+ .max(4096)
20
+ .optional()
21
+ .describe('Absolute path to project root. Derives projectId automatically.'),
22
+ specId: z
23
+ .string()
24
+ .min(1)
25
+ .max(500)
26
+ .describe('Spec ID to inject quality gates into (e.g. SPEC-042)'),
27
+ profile: z
28
+ .enum(['strict', 'standard', 'minimal'])
29
+ .optional()
30
+ .describe('Gate profile: strict (all categories), standard (security+testing+architecture), ' +
31
+ 'minimal (security+testing only). Defaults to standard.'),
32
+ categories: z
33
+ .array(z.enum(['security', 'testing', 'architecture', 'performance']))
34
+ .optional()
35
+ .describe('Override gate categories to inject. Valid values: security, testing, architecture, performance. ' +
36
+ 'If omitted, profile is used.'),
37
+ },
38
+ }, safeLicensed('inject_quality_gates', async (args) => {
39
+ const pid = resolveProjectId(args);
40
+ if (!pid) {
41
+ return missingProjectIdError;
42
+ }
43
+ const { specId, profile, categories } = args;
44
+ return handleInjectQualityGates(pid, specId, { profile, categories });
45
+ }));
46
+ }
47
+ //# sourceMappingURL=register-quality-gates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-quality-gates.js","sourceRoot":"","sources":["../../src/tools/register-quality-gates.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGlF,MAAM,UAAU,yBAAyB,CAAC,MAAiB;IACzD,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,WAAW,EACT,gFAAgF;YAChF,4EAA4E;YAC5E,iFAAiF;YACjF,wDAAwD;YACxD,uEAAuE;YACvE,mCAAmC;YACnC,sGAAsG;QACxG,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE;QACpC,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;YAC1F,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,GAAG,CAAC,IAAI,CAAC;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,iEAAiE,CAAC;YAC9E,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,GAAG,CAAC;iBACR,QAAQ,CAAC,sDAAsD,CAAC;YACnE,OAAO,EAAE,CAAC;iBACP,IAAI,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;iBACvC,QAAQ,EAAE;iBACV,QAAQ,CACP,mFAAmF;gBACjF,wDAAwD,CAC3D;YACH,UAAU,EAAE,CAAC;iBACV,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;iBACrE,QAAQ,EAAE;iBACV,QAAQ,CACP,kGAAkG;gBAChG,8BAA8B,CACjC;SACJ;KACF,EACD,YAAY,CAAC,sBAAsB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAClD,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAoD,CAAC,CAAC;QACnF,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,qBAAqB,CAAC;QAC/B,CAAC;QACD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,IAIvC,CAAC;QACF,OAAO,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;IACxE,CAAC,CAAC,CACH,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"}