@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":"compliance-audit-store.js","sourceRoot":"","sources":["../../src/storage/compliance-audit-store.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,0EAA0E;AAE1E,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAYjD,SAAS,SAAS,CAAC,SAAiB;IAClC,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,+BAA+B,CAAC;AACrE,CAAC;AAED,SAAS,SAAS,CAAC,SAAiB;IAClC,MAAM,GAAG,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,KAA2B;IAC1E,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAC1C,MAAM,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,SAAiB,EACjB,KAAK,GAAG,GAAG;IAEX,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IAClC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,OAAO;SACnB,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAyB,CAAC,CAAC;IAC3D,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,SAAiB;IAChE,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IAClC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9C,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;AACpD,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { SpecComplianceScore } from '../types/index.js';
2
+ /**
3
+ * Saves a compliance score for a spec in a project.
4
+ * Overwrites any previous score for the same specId.
5
+ */
6
+ export declare function saveComplianceScore(projectId: string, score: SpecComplianceScore): Promise<void>;
7
+ /**
8
+ * Retrieves a compliance score for a specific spec, or null if not found.
9
+ */
10
+ export declare function getComplianceScore(projectId: string, specId: string): Promise<SpecComplianceScore | null>;
11
+ /**
12
+ * Returns all compliance scores for a project.
13
+ * Returns an empty record if no scores have been saved yet.
14
+ */
15
+ export declare function getAllComplianceScores(projectId: string): Promise<Record<string, SpecComplianceScore>>;
16
+ //# sourceMappingURL=compliance-score-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compliance-score-store.d.ts","sourceRoot":"","sources":["../../src/storage/compliance-score-store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAM7D;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,IAAI,CAAC,CAIf;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAGrC;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAE9C"}
@@ -0,0 +1,30 @@
1
+ // storage/compliance-score-store.ts — Compliance score persistence (SPEC-406)
2
+ // Layout: data/projects/{projectId}/compliance-scores.json
3
+ import { readJson, writeJson, projectDataDir } from './base-store.js';
4
+ function dataFile(projectId) {
5
+ return `${projectDataDir(projectId)}/compliance-scores.json`;
6
+ }
7
+ /**
8
+ * Saves a compliance score for a spec in a project.
9
+ * Overwrites any previous score for the same specId.
10
+ */
11
+ export async function saveComplianceScore(projectId, score) {
12
+ const all = await getAllComplianceScores(projectId);
13
+ all[score.specId] = score;
14
+ await writeJson(dataFile(projectId), all);
15
+ }
16
+ /**
17
+ * Retrieves a compliance score for a specific spec, or null if not found.
18
+ */
19
+ export async function getComplianceScore(projectId, specId) {
20
+ const all = await getAllComplianceScores(projectId);
21
+ return all[specId] ?? null;
22
+ }
23
+ /**
24
+ * Returns all compliance scores for a project.
25
+ * Returns an empty record if no scores have been saved yet.
26
+ */
27
+ export async function getAllComplianceScores(projectId) {
28
+ return readJson(dataFile(projectId), {});
29
+ }
30
+ //# sourceMappingURL=compliance-score-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compliance-score-store.js","sourceRoot":"","sources":["../../src/storage/compliance-score-store.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,2DAA2D;AAC3D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGtE,SAAS,QAAQ,CAAC,SAAiB;IACjC,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,yBAAyB,CAAC;AAC/D,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,SAAiB,EACjB,KAA0B;IAE1B,MAAM,GAAG,GAAG,MAAM,sBAAsB,CAAC,SAAS,CAAC,CAAC;IACpD,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;IAC1B,MAAM,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,SAAiB,EACjB,MAAc;IAEd,MAAM,GAAG,GAAG,MAAM,sBAAsB,CAAC,SAAS,CAAC,CAAC;IACpD,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,SAAiB;IAEjB,OAAO,QAAQ,CAAsC,QAAQ,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;AAChF,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { ActiveProfile, WorkPhase } from '../types/context-profile.js';
2
+ /**
3
+ * Persist the active work phase for a project.
4
+ */
5
+ export declare function setActiveProfile(projectPath: string, phase: WorkPhase): Promise<void>;
6
+ /**
7
+ * Retrieve the active profile for a project, or null if none is set.
8
+ */
9
+ export declare function getActiveProfile(projectPath: string): Promise<ActiveProfile | null>;
10
+ /**
11
+ * Remove the active profile for a project.
12
+ */
13
+ export declare function clearActiveProfile(projectPath: string): Promise<void>;
14
+ //# sourceMappingURL=context-profile-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-profile-store.d.ts","sourceRoot":"","sources":["../../src/storage/context-profile-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAO5E;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAS3F;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAIzF;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI3E"}
@@ -0,0 +1,34 @@
1
+ import { readJson, writeJson, hashProjectPath } from './base-store.js';
2
+ function profileFile(projectId) {
3
+ return `data/projects/${projectId}/context-profile.json`;
4
+ }
5
+ /**
6
+ * Persist the active work phase for a project.
7
+ */
8
+ export async function setActiveProfile(projectPath, phase) {
9
+ const projectId = hashProjectPath(projectPath);
10
+ const file = profileFile(projectId);
11
+ const profile = {
12
+ projectPath,
13
+ phase,
14
+ activatedAt: new Date().toISOString(),
15
+ };
16
+ await writeJson(file, profile);
17
+ }
18
+ /**
19
+ * Retrieve the active profile for a project, or null if none is set.
20
+ */
21
+ export async function getActiveProfile(projectPath) {
22
+ const projectId = hashProjectPath(projectPath);
23
+ const file = profileFile(projectId);
24
+ return readJson(file, null);
25
+ }
26
+ /**
27
+ * Remove the active profile for a project.
28
+ */
29
+ export async function clearActiveProfile(projectPath) {
30
+ const projectId = hashProjectPath(projectPath);
31
+ const file = profileFile(projectId);
32
+ await writeJson(file, null);
33
+ }
34
+ //# sourceMappingURL=context-profile-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-profile-store.js","sourceRoot":"","sources":["../../src/storage/context-profile-store.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvE,SAAS,WAAW,CAAC,SAAiB;IACpC,OAAO,iBAAiB,SAAS,uBAAuB,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,WAAmB,EAAE,KAAgB;IAC1E,MAAM,SAAS,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,OAAO,GAAkB;QAC7B,WAAW;QACX,KAAK;QACL,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACtC,CAAC;IACF,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,WAAmB;IACxD,MAAM,SAAS,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IACpC,OAAO,QAAQ,CAAuB,IAAI,EAAE,IAAI,CAAC,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,WAAmB;IAC1D,MAAM,SAAS,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface McpHubConfig {
2
+ enabledAdapters: string[];
3
+ adapterConfigs: Record<string, Record<string, unknown>>;
4
+ lastSyncAt?: string;
5
+ }
6
+ export declare function getHubConfig(projectId: string): Promise<McpHubConfig>;
7
+ export declare function saveHubConfig(projectId: string, config: McpHubConfig): Promise<McpHubConfig>;
8
+ export declare function updateHubConfig(projectId: string, updates: Partial<McpHubConfig>): Promise<McpHubConfig>;
9
+ //# sourceMappingURL=mcp-hub-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-hub-store.d.ts","sourceRoot":"","sources":["../../src/storage/mcp-hub-store.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAWD,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAE3E;AAED,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,YAAY,CAAC,CAKvB;AAED,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAC7B,OAAO,CAAC,YAAY,CAAC,CAOvB"}
@@ -0,0 +1,28 @@
1
+ // mcp-hub-store.ts — MCP Hub config persistence (SPEC-403)
2
+ import { readJson, writeJson, projectDataDir } from './base-store.js';
3
+ import { withFileLock } from './file-mutex.js';
4
+ function hubConfigFile(projectId) {
5
+ return `${projectDataDir(projectId)}/mcp-hub-config.json`;
6
+ }
7
+ const DEFAULT_CONFIG = {
8
+ enabledAdapters: [],
9
+ adapterConfigs: {},
10
+ };
11
+ export async function getHubConfig(projectId) {
12
+ return readJson(hubConfigFile(projectId), DEFAULT_CONFIG);
13
+ }
14
+ export async function saveHubConfig(projectId, config) {
15
+ return withFileLock(hubConfigFile(projectId), async () => {
16
+ await writeJson(hubConfigFile(projectId), config);
17
+ return config;
18
+ });
19
+ }
20
+ export async function updateHubConfig(projectId, updates) {
21
+ return withFileLock(hubConfigFile(projectId), async () => {
22
+ const current = await readJson(hubConfigFile(projectId), DEFAULT_CONFIG);
23
+ const updated = { ...current, ...updates };
24
+ await writeJson(hubConfigFile(projectId), updated);
25
+ return updated;
26
+ });
27
+ }
28
+ //# sourceMappingURL=mcp-hub-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-hub-store.js","sourceRoot":"","sources":["../../src/storage/mcp-hub-store.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAS/C,SAAS,aAAa,CAAC,SAAiB;IACtC,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,sBAAsB,CAAC;AAC5D,CAAC;AAED,MAAM,cAAc,GAAiB;IACnC,eAAe,EAAE,EAAE;IACnB,cAAc,EAAE,EAAE;CACnB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,SAAiB;IAClD,OAAO,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,SAAiB,EACjB,MAAoB;IAEpB,OAAO,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;QAClD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,SAAiB,EACjB,OAA8B;IAE9B,OAAO,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC,CAAC;QACzE,MAAM,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;QAC3C,MAAM,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;QACnD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { TimeRecord } from '../types/index.js';
2
+ export declare function getTimeRecord(projectId: string, specId: string): Promise<TimeRecord | null>;
3
+ export declare function saveTimeRecord(projectId: string, record: TimeRecord): Promise<TimeRecord>;
4
+ export declare function updateTimeRecord(projectId: string, specId: string, updates: Partial<TimeRecord>): Promise<TimeRecord>;
5
+ export declare function listTimeRecords(projectId: string): Promise<TimeRecord[]>;
6
+ //# sourceMappingURL=time-tracking-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time-tracking-store.d.ts","sourceRoot":"","sources":["../../src/storage/time-tracking-store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AASpD,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAGjG;AAED,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAO/F;AAED,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAC3B,OAAO,CAAC,UAAU,CAAC,CASrB;AAED,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAG9E"}
@@ -0,0 +1,34 @@
1
+ // storage/time-tracking-store.ts — SPEC-404: Time tracking persistence
2
+ import { join } from 'node:path';
3
+ import { readJson, writeJson, projectDataDir } from './base-store.js';
4
+ import { withFileLock } from './file-mutex.js';
5
+ function trackingFile(projectId) {
6
+ return join(projectDataDir(projectId), 'time-tracking.json');
7
+ }
8
+ export async function getTimeRecord(projectId, specId) {
9
+ const data = await readJson(trackingFile(projectId), {});
10
+ return data[specId] ?? null;
11
+ }
12
+ export async function saveTimeRecord(projectId, record) {
13
+ return withFileLock(trackingFile(projectId), async () => {
14
+ const data = await readJson(trackingFile(projectId), {});
15
+ data[record.specId] = record;
16
+ await writeJson(trackingFile(projectId), data);
17
+ return record;
18
+ });
19
+ }
20
+ export async function updateTimeRecord(projectId, specId, updates) {
21
+ return withFileLock(trackingFile(projectId), async () => {
22
+ const data = await readJson(trackingFile(projectId), {});
23
+ const existing = data[specId] ?? { specId };
24
+ const updated = { ...existing, ...updates, specId };
25
+ data[specId] = updated;
26
+ await writeJson(trackingFile(projectId), data);
27
+ return updated;
28
+ });
29
+ }
30
+ export async function listTimeRecords(projectId) {
31
+ const data = await readJson(trackingFile(projectId), {});
32
+ return Object.values(data);
33
+ }
34
+ //# sourceMappingURL=time-tracking-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time-tracking-store.js","sourceRoot":"","sources":["../../src/storage/time-tracking-store.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAM/C,SAAS,YAAY,CAAC,SAAiB;IACrC,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,oBAAoB,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,SAAiB,EAAE,MAAc;IACnE,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAe,YAAY,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;IACvE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,SAAiB,EAAE,MAAkB;IACxE,OAAO,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAe,YAAY,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;QACvE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;QAC7B,MAAM,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;QAC/C,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,SAAiB,EACjB,MAAc,EACd,OAA4B;IAE5B,OAAO,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAe,YAAY,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;QACvE,MAAM,QAAQ,GAAe,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QACxD,MAAM,OAAO,GAAe,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;QACvB,MAAM,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;QAC/C,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,SAAiB;IACrD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAe,YAAY,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;IACvE,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { WorkflowCheckpoint } from '../types/index.js';
2
+ /** Persist a new checkpoint and return it with its generated ID. */
3
+ export declare function createWorkflowCheckpoint(projectPath: string, checkpoint: Omit<WorkflowCheckpoint, 'id'>): Promise<WorkflowCheckpoint>;
4
+ /** Resolve a checkpoint (approve or reject). Returns the updated checkpoint. */
5
+ export declare function resolveWorkflowCheckpoint(projectPath: string, checkpointId: string, resolution: {
6
+ status: 'approved' | 'rejected';
7
+ resolvedBy: string;
8
+ rejectionReason?: string;
9
+ }): Promise<WorkflowCheckpoint>;
10
+ /** Return all pending checkpoints for a project, optionally filtered by role. */
11
+ export declare function getPendingWorkflowCheckpoints(projectPath: string, role?: string): Promise<WorkflowCheckpoint[]>;
12
+ /** Return a single checkpoint by ID, or null if not found. */
13
+ export declare function getWorkflowCheckpoint(projectPath: string, checkpointId: string): Promise<WorkflowCheckpoint | null>;
14
+ /** Return all checkpoints for a given spec. */
15
+ export declare function getCheckpointsForSpec(projectPath: string, specId: string): Promise<WorkflowCheckpoint[]>;
16
+ //# sourceMappingURL=workflow-checkpoint-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-checkpoint-store.d.ts","sourceRoot":"","sources":["../../src/storage/workflow-checkpoint-store.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAsB5D,oEAAoE;AACpE,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,GACzC,OAAO,CAAC,kBAAkB,CAAC,CAO7B;AAED,gFAAgF;AAChF,wBAAsB,yBAAyB,CAC7C,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE;IACV,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GACA,OAAO,CAAC,kBAAkB,CAAC,CAsB7B;AAED,iFAAiF;AACjF,wBAAsB,6BAA6B,CACjD,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAM/B;AAED,8DAA8D;AAC9D,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAIpC;AAED,+CAA+C;AAC/C,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAI/B"}
@@ -0,0 +1,71 @@
1
+ // storage/workflow-checkpoint-store.ts — Workflow checkpoint persistence (SPEC-411)
2
+ // Layout: data/projects/{hash}/workflow-checkpoints.json
3
+ import { randomUUID } from 'node:crypto';
4
+ import { readJson, writeJson, projectDataDir, hashProjectPath } from './base-store.js';
5
+ // ---------------------------------------------------------------------------
6
+ // Helpers
7
+ // ---------------------------------------------------------------------------
8
+ function storeFilePath(projectId) {
9
+ return `${projectDataDir(projectId)}/workflow-checkpoints.json`;
10
+ }
11
+ async function loadAll(projectId) {
12
+ return readJson(storeFilePath(projectId), []);
13
+ }
14
+ async function saveAll(projectId, checkpoints) {
15
+ await writeJson(storeFilePath(projectId), checkpoints);
16
+ }
17
+ // ---------------------------------------------------------------------------
18
+ // CRUD operations
19
+ // ---------------------------------------------------------------------------
20
+ /** Persist a new checkpoint and return it with its generated ID. */
21
+ export async function createWorkflowCheckpoint(projectPath, checkpoint) {
22
+ const projectId = hashProjectPath(projectPath);
23
+ const all = await loadAll(projectId);
24
+ const record = { id: randomUUID(), ...checkpoint };
25
+ all.push(record);
26
+ await saveAll(projectId, all);
27
+ return record;
28
+ }
29
+ /** Resolve a checkpoint (approve or reject). Returns the updated checkpoint. */
30
+ export async function resolveWorkflowCheckpoint(projectPath, checkpointId, resolution) {
31
+ const projectId = hashProjectPath(projectPath);
32
+ const all = await loadAll(projectId);
33
+ const idx = all.findIndex((c) => c.id === checkpointId);
34
+ if (idx === -1) {
35
+ throw new Error(`[Planu] Checkpoint not found: ${checkpointId}`);
36
+ }
37
+ const existing = all[idx];
38
+ /* v8 ignore next 3 */
39
+ if (!existing) {
40
+ throw new Error(`[Planu] Checkpoint not found: ${checkpointId}`);
41
+ }
42
+ const updated = {
43
+ ...existing,
44
+ status: resolution.status,
45
+ resolvedBy: resolution.resolvedBy,
46
+ resolvedAt: new Date().toISOString(),
47
+ rejectionReason: resolution.rejectionReason,
48
+ };
49
+ all[idx] = updated;
50
+ await saveAll(projectId, all);
51
+ return updated;
52
+ }
53
+ /** Return all pending checkpoints for a project, optionally filtered by role. */
54
+ export async function getPendingWorkflowCheckpoints(projectPath, role) {
55
+ const projectId = hashProjectPath(projectPath);
56
+ const all = await loadAll(projectId);
57
+ return all.filter((c) => c.status === 'pending' && (role === undefined || c.requiredRole === role));
58
+ }
59
+ /** Return a single checkpoint by ID, or null if not found. */
60
+ export async function getWorkflowCheckpoint(projectPath, checkpointId) {
61
+ const projectId = hashProjectPath(projectPath);
62
+ const all = await loadAll(projectId);
63
+ return all.find((c) => c.id === checkpointId) ?? null;
64
+ }
65
+ /** Return all checkpoints for a given spec. */
66
+ export async function getCheckpointsForSpec(projectPath, specId) {
67
+ const projectId = hashProjectPath(projectPath);
68
+ const all = await loadAll(projectId);
69
+ return all.filter((c) => c.specId === specId);
70
+ }
71
+ //# sourceMappingURL=workflow-checkpoint-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-checkpoint-store.js","sourceRoot":"","sources":["../../src/storage/workflow-checkpoint-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ToolResult, ApproveCheckpointInput } from '../../types/index.js';
2
+ export declare function handleApproveCheckpoint(args: ApproveCheckpointInput): Promise<ToolResult>;
3
+ //# sourceMappingURL=approve-checkpoint-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approve-checkpoint-handler.d.ts","sourceRoot":"","sources":["../../../src/tools/checkpoint/approve-checkpoint-handler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAG/E,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC,CA8B/F"}
@@ -0,0 +1,32 @@
1
+ // tools/checkpoint/approve-checkpoint-handler.ts — approve_checkpoint handler (SPEC-411)
2
+ import { approveCheckpoint } from '../../engine/checkpoint/checkpoint-manager.js';
3
+ export async function handleApproveCheckpoint(args) {
4
+ const { projectPath, checkpointId, approvedBy = 'anonymous' } = args;
5
+ let result;
6
+ try {
7
+ result = await approveCheckpoint(projectPath, checkpointId, approvedBy);
8
+ }
9
+ catch (err) {
10
+ const message = err instanceof Error ? err.message : String(err);
11
+ return {
12
+ content: [{ type: 'text', text: `Error approving checkpoint: ${message}` }],
13
+ };
14
+ }
15
+ const { checkpoint } = result;
16
+ return {
17
+ content: [
18
+ {
19
+ type: 'text',
20
+ text: [
21
+ `Checkpoint ${checkpointId} approved by ${approvedBy}.`,
22
+ `Spec: ${checkpoint.specId}`,
23
+ `Transition unblocked: ${checkpoint.blockingTransition}`,
24
+ '',
25
+ 'Next step: run update_status to apply the transition now that the checkpoint is approved.',
26
+ ].join('\n'),
27
+ },
28
+ ],
29
+ structuredContent: { checkpoint, transitionApplied: result.transitionApplied },
30
+ };
31
+ }
32
+ //# sourceMappingURL=approve-checkpoint-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approve-checkpoint-handler.js","sourceRoot":"","sources":["../../../src/tools/checkpoint/approve-checkpoint-handler.ts"],"names":[],"mappings":"AAAA,yFAAyF;AAGzF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAElF,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,IAA4B;IACxE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,GAAG,WAAW,EAAE,GAAG,IAAI,CAAC;IAErE,IAAI,MAAqD,CAAC;IAC1D,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,iBAAiB,CAAC,WAAW,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IAC1E,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,+BAA+B,OAAO,EAAE,EAAE,CAAC;SAC5E,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IAE9B,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE;oBACJ,cAAc,YAAY,gBAAgB,UAAU,GAAG;oBACvD,SAAS,UAAU,CAAC,MAAM,EAAE;oBAC5B,yBAAyB,UAAU,CAAC,kBAAkB,EAAE;oBACxD,EAAE;oBACF,2FAA2F;iBAC5F,CAAC,IAAI,CAAC,IAAI,CAAC;aACb;SACF;QACD,iBAAiB,EAAE,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,EAAE;KAC/E,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ToolResult, ConfigureCheckpointPolicyInput } from '../../types/index.js';
2
+ export declare function handleConfigureCheckpointPolicy(args: ConfigureCheckpointPolicyInput): Promise<ToolResult>;
3
+ //# sourceMappingURL=configure-policy-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure-policy-handler.d.ts","sourceRoot":"","sources":["../../../src/tools/checkpoint/configure-policy-handler.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,UAAU,EACV,8BAA8B,EAE/B,MAAM,sBAAsB,CAAC;AAO9B,wBAAsB,+BAA+B,CACnD,IAAI,EAAE,8BAA8B,GACnC,OAAO,CAAC,UAAU,CAAC,CA4DrB"}
@@ -0,0 +1,60 @@
1
+ // tools/checkpoint/configure-policy-handler.ts — configure_checkpoint_policy handler (SPEC-411)
2
+ import { randomUUID } from 'node:crypto';
3
+ import { POLICY_PRESETS, loadCheckpointConfig, saveCheckpointConfig, } from '../../engine/checkpoint/policy-engine.js';
4
+ export async function handleConfigureCheckpointPolicy(args) {
5
+ const { projectPath, preset, policies } = args;
6
+ if (preset === undefined && (policies === undefined || policies.length === 0)) {
7
+ return {
8
+ content: [
9
+ {
10
+ type: 'text',
11
+ text: 'Error: provide either a preset (strict/balanced/relaxed) or a custom policies array.',
12
+ },
13
+ ],
14
+ };
15
+ }
16
+ let activePolicies;
17
+ let activePreset;
18
+ if (preset !== undefined) {
19
+ const presetDef = POLICY_PRESETS[preset];
20
+ if (presetDef === undefined) {
21
+ return {
22
+ content: [{ type: 'text', text: `Error: unknown preset "${preset}".` }],
23
+ };
24
+ }
25
+ activePolicies = presetDef.policies.map((p) => ({ id: randomUUID(), ...p }));
26
+ activePreset = preset;
27
+ }
28
+ else {
29
+ activePolicies = (policies ?? []).map((p) => ({
30
+ id: randomUUID(),
31
+ transition: p.transition,
32
+ requiredRole: p.requiredRole,
33
+ description: p.description,
34
+ autoApproveAfterHours: p.autoApproveAfterHours,
35
+ }));
36
+ activePreset = 'custom';
37
+ }
38
+ const config = await loadCheckpointConfig(projectPath);
39
+ config.policies = activePolicies;
40
+ config.activePreset = activePreset;
41
+ await saveCheckpointConfig(projectPath, config);
42
+ const policyLines = activePolicies
43
+ .map((p) => ` • ${p.transition} — requires ${p.requiredRole}: ${p.description}`)
44
+ .join('\n');
45
+ return {
46
+ content: [
47
+ {
48
+ type: 'text',
49
+ text: [
50
+ `Checkpoint policy configured (preset: ${activePreset}).`,
51
+ '',
52
+ 'Active policies:',
53
+ policyLines,
54
+ ].join('\n'),
55
+ },
56
+ ],
57
+ structuredContent: { activePreset, policies: activePolicies },
58
+ };
59
+ }
60
+ //# sourceMappingURL=configure-policy-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure-policy-handler.js","sourceRoot":"","sources":["../../../src/tools/checkpoint/configure-policy-handler.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAEhG,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAMzC,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,0CAA0C,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,IAAoC;IAEpC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAE/C,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QAC9E,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,sFAAsF;iBAC7F;aACF;SACF,CAAC;IACJ,CAAC;IAED,IAAI,cAAkC,CAAC;IACvC,IAAI,YAA0D,CAAC;IAE/D,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,MAAM,IAAI,EAAE,CAAC;aACxE,CAAC;QACJ,CAAC;QACD,cAAc,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7E,YAAY,GAAG,MAAM,CAAC;IACxB,CAAC;SAAM,CAAC;QACN,cAAc,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5C,EAAE,EAAE,UAAU,EAAE;YAChB,UAAU,EAAE,CAAC,CAAC,UAA4C;YAC1D,YAAY,EAAE,CAAC,CAAC,YAAgD;YAChE,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,qBAAqB,EAAE,CAAC,CAAC,qBAAqB;SAC/C,CAAC,CAAC,CAAC;QACJ,YAAY,GAAG,QAAQ,CAAC;IAC1B,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACvD,MAAM,CAAC,QAAQ,GAAG,cAAc,CAAC;IACjC,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,MAAM,oBAAoB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAEhD,MAAM,WAAW,GAAG,cAAc;SAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,UAAU,eAAe,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;SAChF,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE;oBACJ,yCAAyC,YAAY,IAAI;oBACzD,EAAE;oBACF,kBAAkB;oBAClB,WAAW;iBACZ,CAAC,IAAI,CAAC,IAAI,CAAC;aACb;SACF;QACD,iBAAiB,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE;KAC9D,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ToolResult, ListPendingCheckpointsInput } from '../../types/index.js';
2
+ export declare function handleListPendingCheckpoints(args: ListPendingCheckpointsInput): Promise<ToolResult>;
3
+ //# sourceMappingURL=list-checkpoints-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-checkpoints-handler.d.ts","sourceRoot":"","sources":["../../../src/tools/checkpoint/list-checkpoints-handler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAGpF,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,2BAA2B,GAChC,OAAO,CAAC,UAAU,CAAC,CA4BrB"}
@@ -0,0 +1,25 @@
1
+ // tools/checkpoint/list-checkpoints-handler.ts — list_pending_checkpoints handler (SPEC-411)
2
+ import { getPendingWorkflowCheckpoints } from '../../storage/workflow-checkpoint-store.js';
3
+ export async function handleListPendingCheckpoints(args) {
4
+ const { projectPath, role } = args;
5
+ const pending = await getPendingWorkflowCheckpoints(projectPath, role);
6
+ if (pending.length === 0) {
7
+ const roleNote = role !== undefined ? ` for role "${role}"` : '';
8
+ return {
9
+ content: [{ type: 'text', text: `No pending checkpoints${roleNote}.` }],
10
+ structuredContent: { checkpoints: [] },
11
+ };
12
+ }
13
+ const lines = pending.map((c) => `• [${c.id.slice(0, 8)}] ${c.specId} — ${c.blockingTransition} — needs ${c.requiredRole} (requested by ${c.requestedBy} at ${c.requestedAt})`);
14
+ const roleNote = role !== undefined ? ` (filtered by role: ${role})` : '';
15
+ return {
16
+ content: [
17
+ {
18
+ type: 'text',
19
+ text: [`Pending checkpoints${roleNote}:`, '', ...lines].join('\n'),
20
+ },
21
+ ],
22
+ structuredContent: { checkpoints: pending },
23
+ };
24
+ }
25
+ //# sourceMappingURL=list-checkpoints-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-checkpoints-handler.js","sourceRoot":"","sources":["../../../src/tools/checkpoint/list-checkpoints-handler.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAG7F,OAAO,EAAE,6BAA6B,EAAE,MAAM,4CAA4C,CAAC;AAE3F,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,IAAiC;IAEjC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IAEnC,MAAM,OAAO,GAAG,MAAM,6BAA6B,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAEvE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,QAAQ,GAAG,EAAE,CAAC;YACvE,iBAAiB,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;SACvC,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CACvB,CAAC,CAAC,EAAE,EAAE,CACJ,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,kBAAkB,YAAY,CAAC,CAAC,YAAY,kBAAkB,CAAC,CAAC,WAAW,OAAO,CAAC,CAAC,WAAW,GAAG,CAChJ,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,uBAAuB,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1E,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,CAAC,sBAAsB,QAAQ,GAAG,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;aACnE;SACF;QACD,iBAAiB,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE;KAC5C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ToolResult, RejectCheckpointInput } from '../../types/index.js';
2
+ export declare function handleRejectCheckpoint(args: RejectCheckpointInput): Promise<ToolResult>;
3
+ //# sourceMappingURL=reject-checkpoint-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reject-checkpoint-handler.d.ts","sourceRoot":"","sources":["../../../src/tools/checkpoint/reject-checkpoint-handler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAG9E,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,CA6B7F"}
@@ -0,0 +1,32 @@
1
+ // tools/checkpoint/reject-checkpoint-handler.ts — reject_checkpoint handler (SPEC-411)
2
+ import { rejectCheckpoint } from '../../engine/checkpoint/checkpoint-manager.js';
3
+ export async function handleRejectCheckpoint(args) {
4
+ const { projectPath, checkpointId, rejectedBy = 'anonymous', reason } = args;
5
+ let checkpoint;
6
+ try {
7
+ checkpoint = await rejectCheckpoint(projectPath, checkpointId, rejectedBy, reason);
8
+ }
9
+ catch (err) {
10
+ const message = err instanceof Error ? err.message : String(err);
11
+ return {
12
+ content: [{ type: 'text', text: `Error rejecting checkpoint: ${message}` }],
13
+ };
14
+ }
15
+ return {
16
+ content: [
17
+ {
18
+ type: 'text',
19
+ text: [
20
+ `Checkpoint ${checkpointId} rejected by ${rejectedBy}.`,
21
+ `Spec: ${checkpoint.specId}`,
22
+ `Blocked transition: ${checkpoint.blockingTransition}`,
23
+ `Reason: ${reason}`,
24
+ '',
25
+ 'The spec remains in its current status. Address the feedback and create a new checkpoint request when ready.',
26
+ ].join('\n'),
27
+ },
28
+ ],
29
+ structuredContent: { checkpoint },
30
+ };
31
+ }
32
+ //# sourceMappingURL=reject-checkpoint-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reject-checkpoint-handler.js","sourceRoot":"","sources":["../../../src/tools/checkpoint/reject-checkpoint-handler.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAGvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,+CAA+C,CAAC;AAEjF,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,IAA2B;IACtE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,GAAG,WAAW,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAE7E,IAAI,UAAwD,CAAC;IAC7D,IAAI,CAAC;QACH,UAAU,GAAG,MAAM,gBAAgB,CAAC,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACrF,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,+BAA+B,OAAO,EAAE,EAAE,CAAC;SAC5E,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE;oBACJ,cAAc,YAAY,gBAAgB,UAAU,GAAG;oBACvD,SAAS,UAAU,CAAC,MAAM,EAAE;oBAC5B,uBAAuB,UAAU,CAAC,kBAAkB,EAAE;oBACtD,WAAW,MAAM,EAAE;oBACnB,EAAE;oBACF,8GAA8G;iBAC/G,CAAC,IAAI,CAAC,IAAI,CAAC;aACb;SACF;QACD,iBAAiB,EAAE,EAAE,UAAU,EAAE;KAClC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ToolResult, RequireCheckpointInput } from '../../types/index.js';
2
+ export declare function handleRequireCheckpoint(args: RequireCheckpointInput): Promise<ToolResult>;
3
+ //# sourceMappingURL=require-checkpoint-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"require-checkpoint-handler.d.ts","sourceRoot":"","sources":["../../../src/tools/checkpoint/require-checkpoint-handler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAI/E,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC,CA6C/F"}
@@ -0,0 +1,44 @@
1
+ // tools/checkpoint/require-checkpoint-handler.ts — require_checkpoint handler (SPEC-411)
2
+ import { loadCheckpointConfig } from '../../engine/checkpoint/policy-engine.js';
3
+ import { requestCheckpoint } from '../../engine/checkpoint/checkpoint-manager.js';
4
+ export async function handleRequireCheckpoint(args) {
5
+ const { projectPath, specId, transition, requestedBy = 'system' } = args;
6
+ const config = await loadCheckpointConfig(projectPath);
7
+ const policy = config.policies.find((p) => p.transition === transition);
8
+ if (policy === undefined) {
9
+ return {
10
+ content: [
11
+ {
12
+ type: 'text',
13
+ text: [
14
+ `No policy found for transition "${transition}".`,
15
+ 'Configure one first with configure_checkpoint_policy.',
16
+ ].join('\n'),
17
+ },
18
+ ],
19
+ };
20
+ }
21
+ const checkpoint = await requestCheckpoint(projectPath, specId, policy, requestedBy);
22
+ const autoApproveNote = checkpoint.autoApproveAt !== undefined
23
+ ? `\nAuto-approve scheduled at: ${checkpoint.autoApproveAt}`
24
+ : '';
25
+ return {
26
+ content: [
27
+ {
28
+ type: 'text',
29
+ text: [
30
+ `Checkpoint created for ${specId} (${transition}).`,
31
+ `Checkpoint ID: ${checkpoint.id}`,
32
+ `Required approver role: ${policy.requiredRole}`,
33
+ `Reason: ${policy.description}`,
34
+ autoApproveNote,
35
+ '',
36
+ `To approve: approve_checkpoint { projectPath, checkpointId: "${checkpoint.id}", approvedBy: "<your-id>" }`,
37
+ `To reject: reject_checkpoint { projectPath, checkpointId: "${checkpoint.id}", rejectedBy: "<your-id>", reason: "<reason>" }`,
38
+ ].join('\n'),
39
+ },
40
+ ],
41
+ structuredContent: { checkpoint },
42
+ };
43
+ }
44
+ //# sourceMappingURL=require-checkpoint-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"require-checkpoint-handler.js","sourceRoot":"","sources":["../../../src/tools/checkpoint/require-checkpoint-handler.ts"],"names":[],"mappings":"AAAA,yFAAyF;AAGzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAElF,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,IAA4B;IACxE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,GAAG,QAAQ,EAAE,GAAG,IAAI,CAAC;IAEzE,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC;IAExE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE;wBACJ,mCAAmC,UAAU,IAAI;wBACjD,uDAAuD;qBACxD,CAAC,IAAI,CAAC,IAAI,CAAC;iBACb;aACF;SACF,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAErF,MAAM,eAAe,GACnB,UAAU,CAAC,aAAa,KAAK,SAAS;QACpC,CAAC,CAAC,gCAAgC,UAAU,CAAC,aAAa,EAAE;QAC5D,CAAC,CAAC,EAAE,CAAC;IAET,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE;oBACJ,0BAA0B,MAAM,KAAK,UAAU,IAAI;oBACnD,kBAAkB,UAAU,CAAC,EAAE,EAAE;oBACjC,2BAA2B,MAAM,CAAC,YAAY,EAAE;oBAChD,WAAW,MAAM,CAAC,WAAW,EAAE;oBAC/B,eAAe;oBACf,EAAE;oBACF,gEAAgE,UAAU,CAAC,EAAE,8BAA8B;oBAC3G,gEAAgE,UAAU,CAAC,EAAE,kDAAkD;iBAChI,CAAC,IAAI,CAAC,IAAI,CAAC;aACb;SACF;QACD,iBAAiB,EAAE,EAAE,UAAU,EAAE;KAClC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { ToolResult } from '../types/index.js';
2
+ import type { ComplianceFramework } from '../engine/compliance/framework-catalog.js';
3
+ export declare function handleComplianceGapAnalysis(projectId: string, framework: ComplianceFramework): Promise<ToolResult>;
4
+ export declare function handleGenerateAttestationEnhanced(projectId: string, framework: ComplianceFramework): Promise<ToolResult>;
5
+ //# sourceMappingURL=compliance-gap-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compliance-gap-handler.d.ts","sourceRoot":"","sources":["../../src/tools/compliance-gap-handler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAKpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAErF,wBAAsB,2BAA2B,CAC/C,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,mBAAmB,GAC7B,OAAO,CAAC,UAAU,CAAC,CAgCrB;AAED,wBAAsB,iCAAiC,CACrD,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,mBAAmB,GAC7B,OAAO,CAAC,UAAU,CAAC,CAoCrB"}