@planu/cli 0.43.0 → 0.44.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 (399) hide show
  1. package/dist/cli/colors.d.ts +14 -0
  2. package/dist/cli/colors.d.ts.map +1 -0
  3. package/dist/cli/colors.js +26 -0
  4. package/dist/cli/colors.js.map +1 -0
  5. package/dist/cli/commands/audit.d.ts +3 -0
  6. package/dist/cli/commands/audit.d.ts.map +1 -0
  7. package/dist/cli/commands/audit.js +38 -0
  8. package/dist/cli/commands/audit.js.map +1 -0
  9. package/dist/cli/commands/create.d.ts +3 -0
  10. package/dist/cli/commands/create.d.ts.map +1 -0
  11. package/dist/cli/commands/create.js +50 -0
  12. package/dist/cli/commands/create.js.map +1 -0
  13. package/dist/cli/commands/dashboard.d.ts +3 -0
  14. package/dist/cli/commands/dashboard.d.ts.map +1 -0
  15. package/dist/cli/commands/dashboard.js +29 -0
  16. package/dist/cli/commands/dashboard.js.map +1 -0
  17. package/dist/cli/commands/estimate.d.ts +3 -0
  18. package/dist/cli/commands/estimate.d.ts.map +1 -0
  19. package/dist/cli/commands/estimate.js +36 -0
  20. package/dist/cli/commands/estimate.js.map +1 -0
  21. package/dist/cli/commands/handoff.d.ts +3 -0
  22. package/dist/cli/commands/handoff.d.ts.map +1 -0
  23. package/dist/cli/commands/handoff.js +49 -0
  24. package/dist/cli/commands/handoff.js.map +1 -0
  25. package/dist/cli/commands/init.d.ts +3 -0
  26. package/dist/cli/commands/init.d.ts.map +1 -0
  27. package/dist/cli/commands/init.js +43 -0
  28. package/dist/cli/commands/init.js.map +1 -0
  29. package/dist/cli/commands/list.d.ts +3 -0
  30. package/dist/cli/commands/list.d.ts.map +1 -0
  31. package/dist/cli/commands/list.js +36 -0
  32. package/dist/cli/commands/list.js.map +1 -0
  33. package/dist/cli/commands/serve.d.ts +3 -0
  34. package/dist/cli/commands/serve.d.ts.map +1 -0
  35. package/dist/cli/commands/serve.js +34 -0
  36. package/dist/cli/commands/serve.js.map +1 -0
  37. package/dist/cli/commands/status.d.ts +3 -0
  38. package/dist/cli/commands/status.d.ts.map +1 -0
  39. package/dist/cli/commands/status.js +49 -0
  40. package/dist/cli/commands/status.js.map +1 -0
  41. package/dist/cli/commands/validate.d.ts +3 -0
  42. package/dist/cli/commands/validate.d.ts.map +1 -0
  43. package/dist/cli/commands/validate.js +36 -0
  44. package/dist/cli/commands/validate.js.map +1 -0
  45. package/dist/cli/commands/watch.d.ts +3 -0
  46. package/dist/cli/commands/watch.d.ts.map +1 -0
  47. package/dist/cli/commands/watch.js +156 -0
  48. package/dist/cli/commands/watch.js.map +1 -0
  49. package/dist/cli/formatter.d.ts +18 -0
  50. package/dist/cli/formatter.d.ts.map +1 -0
  51. package/dist/cli/formatter.js +78 -0
  52. package/dist/cli/formatter.js.map +1 -0
  53. package/dist/cli/index.d.ts +6 -0
  54. package/dist/cli/index.d.ts.map +1 -0
  55. package/dist/cli/index.js +7 -0
  56. package/dist/cli/index.js.map +1 -0
  57. package/dist/cli/interactive.d.ts +13 -0
  58. package/dist/cli/interactive.d.ts.map +1 -0
  59. package/dist/cli/interactive.js +42 -0
  60. package/dist/cli/interactive.js.map +1 -0
  61. package/dist/cli/project-detector.d.ts +6 -0
  62. package/dist/cli/project-detector.d.ts.map +1 -0
  63. package/dist/cli/project-detector.js +12 -0
  64. package/dist/cli/project-detector.js.map +1 -0
  65. package/dist/cli/router.d.ts +5 -0
  66. package/dist/cli/router.d.ts.map +1 -0
  67. package/dist/cli/router.js +104 -0
  68. package/dist/cli/router.js.map +1 -0
  69. package/dist/config/hook-defaults.json +19 -0
  70. package/dist/config/license-plans.json +16 -1
  71. package/dist/config/tool-groups.json +12 -1
  72. package/dist/engine/analyzer/analyze-project.d.ts +15 -0
  73. package/dist/engine/analyzer/analyze-project.d.ts.map +1 -0
  74. package/dist/engine/analyzer/analyze-project.js +101 -0
  75. package/dist/engine/analyzer/analyze-project.js.map +1 -0
  76. package/dist/engine/analyzer/completeness-checker.d.ts +6 -0
  77. package/dist/engine/analyzer/completeness-checker.d.ts.map +1 -0
  78. package/dist/engine/analyzer/completeness-checker.js +79 -0
  79. package/dist/engine/analyzer/completeness-checker.js.map +1 -0
  80. package/dist/engine/analyzer/db-engine.d.ts +9 -0
  81. package/dist/engine/analyzer/db-engine.d.ts.map +1 -0
  82. package/dist/engine/analyzer/db-engine.js +137 -0
  83. package/dist/engine/analyzer/db-engine.js.map +1 -0
  84. package/dist/engine/analyzer/detectors.d.ts +7 -0
  85. package/dist/engine/analyzer/detectors.d.ts.map +1 -0
  86. package/dist/engine/analyzer/detectors.js +234 -0
  87. package/dist/engine/analyzer/detectors.js.map +1 -0
  88. package/dist/engine/analyzer/env-setup.d.ts +6 -0
  89. package/dist/engine/analyzer/env-setup.d.ts.map +1 -0
  90. package/dist/engine/analyzer/env-setup.js +174 -0
  91. package/dist/engine/analyzer/env-setup.js.map +1 -0
  92. package/dist/engine/analyzer/index.d.ts +6 -0
  93. package/dist/engine/analyzer/index.d.ts.map +1 -0
  94. package/dist/engine/analyzer/index.js +8 -0
  95. package/dist/engine/analyzer/index.js.map +1 -0
  96. package/dist/engine/analyzer-db.d.ts +1 -8
  97. package/dist/engine/analyzer-db.d.ts.map +1 -1
  98. package/dist/engine/analyzer-db.js +3 -136
  99. package/dist/engine/analyzer-db.js.map +1 -1
  100. package/dist/engine/analyzer-detectors.d.ts +1 -6
  101. package/dist/engine/analyzer-detectors.d.ts.map +1 -1
  102. package/dist/engine/analyzer-detectors.js +3 -231
  103. package/dist/engine/analyzer-detectors.js.map +1 -1
  104. package/dist/engine/analyzer-env.d.ts +1 -5
  105. package/dist/engine/analyzer-env.d.ts.map +1 -1
  106. package/dist/engine/analyzer-env.js +3 -173
  107. package/dist/engine/analyzer-env.js.map +1 -1
  108. package/dist/engine/analyzer.d.ts +2 -18
  109. package/dist/engine/analyzer.d.ts.map +1 -1
  110. package/dist/engine/analyzer.js +4 -172
  111. package/dist/engine/analyzer.js.map +1 -1
  112. package/dist/engine/dashboard/data-loader.d.ts +16 -1
  113. package/dist/engine/dashboard/data-loader.d.ts.map +1 -1
  114. package/dist/engine/dashboard/data-loader.js +140 -2
  115. package/dist/engine/dashboard/data-loader.js.map +1 -1
  116. package/dist/engine/dashboard/index.d.ts +2 -0
  117. package/dist/engine/dashboard/index.d.ts.map +1 -1
  118. package/dist/engine/dashboard/index.js +2 -0
  119. package/dist/engine/dashboard/index.js.map +1 -1
  120. package/dist/engine/dashboard/kanban-logic.d.ts +31 -0
  121. package/dist/engine/dashboard/kanban-logic.d.ts.map +1 -0
  122. package/dist/engine/dashboard/kanban-logic.js +122 -0
  123. package/dist/engine/dashboard/kanban-logic.js.map +1 -0
  124. package/dist/engine/dashboard/routes.d.ts +2 -0
  125. package/dist/engine/dashboard/routes.d.ts.map +1 -1
  126. package/dist/engine/dashboard/routes.js +112 -23
  127. package/dist/engine/dashboard/routes.js.map +1 -1
  128. package/dist/engine/dashboard/server.d.ts +5 -0
  129. package/dist/engine/dashboard/server.d.ts.map +1 -1
  130. package/dist/engine/dashboard/server.js +48 -0
  131. package/dist/engine/dashboard/server.js.map +1 -1
  132. package/dist/engine/dashboard/spec-updater.d.ts +8 -0
  133. package/dist/engine/dashboard/spec-updater.d.ts.map +1 -0
  134. package/dist/engine/dashboard/spec-updater.js +37 -0
  135. package/dist/engine/dashboard/spec-updater.js.map +1 -0
  136. package/dist/engine/dashboard/templates-kanban.d.ts +6 -0
  137. package/dist/engine/dashboard/templates-kanban.d.ts.map +1 -0
  138. package/dist/engine/dashboard/templates-kanban.js +100 -0
  139. package/dist/engine/dashboard/templates-kanban.js.map +1 -0
  140. package/dist/engine/dashboard/templates-layout.d.ts +3 -3
  141. package/dist/engine/dashboard/templates-layout.d.ts.map +1 -1
  142. package/dist/engine/dashboard/templates-layout.js +167 -44
  143. package/dist/engine/dashboard/templates-layout.js.map +1 -1
  144. package/dist/engine/dashboard/templates-project.d.ts +1 -1
  145. package/dist/engine/dashboard/templates-project.d.ts.map +1 -1
  146. package/dist/engine/dashboard/templates-project.js +109 -3
  147. package/dist/engine/dashboard/templates-project.js.map +1 -1
  148. package/dist/engine/dashboard/templates.d.ts +1 -0
  149. package/dist/engine/dashboard/templates.d.ts.map +1 -1
  150. package/dist/engine/dashboard/templates.js +1 -0
  151. package/dist/engine/dashboard/templates.js.map +1 -1
  152. package/dist/engine/docs-site-generator/spec-renderer.d.ts.map +1 -1
  153. package/dist/engine/docs-site-generator/spec-renderer.js +2 -1
  154. package/dist/engine/docs-site-generator/spec-renderer.js.map +1 -1
  155. package/dist/engine/execution-plan/agent-execution-plan.d.ts.map +1 -1
  156. package/dist/engine/execution-plan/agent-execution-plan.js +2 -0
  157. package/dist/engine/execution-plan/agent-execution-plan.js.map +1 -1
  158. package/dist/engine/hooks/config-loader.d.ts +36 -0
  159. package/dist/engine/hooks/config-loader.d.ts.map +1 -0
  160. package/dist/engine/hooks/config-loader.js +142 -0
  161. package/dist/engine/hooks/config-loader.js.map +1 -0
  162. package/dist/engine/hooks/debouncer.d.ts +30 -0
  163. package/dist/engine/hooks/debouncer.d.ts.map +1 -0
  164. package/dist/engine/hooks/debouncer.js +124 -0
  165. package/dist/engine/hooks/debouncer.js.map +1 -0
  166. package/dist/engine/hooks/event-bus.d.ts +40 -0
  167. package/dist/engine/hooks/event-bus.d.ts.map +1 -0
  168. package/dist/engine/hooks/event-bus.js +83 -0
  169. package/dist/engine/hooks/event-bus.js.map +1 -0
  170. package/dist/engine/hooks/file-watcher.d.ts +48 -0
  171. package/dist/engine/hooks/file-watcher.d.ts.map +1 -0
  172. package/dist/engine/hooks/file-watcher.js +193 -0
  173. package/dist/engine/hooks/file-watcher.js.map +1 -0
  174. package/dist/engine/hooks/handlers/on-commit.d.ts +26 -0
  175. package/dist/engine/hooks/handlers/on-commit.d.ts.map +1 -0
  176. package/dist/engine/hooks/handlers/on-commit.js +198 -0
  177. package/dist/engine/hooks/handlers/on-commit.js.map +1 -0
  178. package/dist/engine/hooks/handlers/on-create.d.ts +8 -0
  179. package/dist/engine/hooks/handlers/on-create.d.ts.map +1 -0
  180. package/dist/engine/hooks/handlers/on-create.js +30 -0
  181. package/dist/engine/hooks/handlers/on-create.js.map +1 -0
  182. package/dist/engine/hooks/handlers/on-delete.d.ts +9 -0
  183. package/dist/engine/hooks/handlers/on-delete.d.ts.map +1 -0
  184. package/dist/engine/hooks/handlers/on-delete.js +33 -0
  185. package/dist/engine/hooks/handlers/on-delete.js.map +1 -0
  186. package/dist/engine/hooks/handlers/on-save.d.ts +29 -0
  187. package/dist/engine/hooks/handlers/on-save.d.ts.map +1 -0
  188. package/dist/engine/hooks/handlers/on-save.js +118 -0
  189. package/dist/engine/hooks/handlers/on-save.js.map +1 -0
  190. package/dist/engine/hooks/handlers/on-test-pass.d.ts +33 -0
  191. package/dist/engine/hooks/handlers/on-test-pass.d.ts.map +1 -0
  192. package/dist/engine/hooks/handlers/on-test-pass.js +103 -0
  193. package/dist/engine/hooks/handlers/on-test-pass.js.map +1 -0
  194. package/dist/engine/hooks/hook-engine.d.ts +50 -0
  195. package/dist/engine/hooks/hook-engine.d.ts.map +1 -0
  196. package/dist/engine/hooks/hook-engine.js +159 -0
  197. package/dist/engine/hooks/hook-engine.js.map +1 -0
  198. package/dist/engine/hooks/index.d.ts +10 -0
  199. package/dist/engine/hooks/index.d.ts.map +1 -1
  200. package/dist/engine/hooks/index.js +12 -0
  201. package/dist/engine/hooks/index.js.map +1 -1
  202. package/dist/engine/living-spec/annotation-parser.d.ts +18 -0
  203. package/dist/engine/living-spec/annotation-parser.d.ts.map +1 -0
  204. package/dist/engine/living-spec/annotation-parser.js +105 -0
  205. package/dist/engine/living-spec/annotation-parser.js.map +1 -0
  206. package/dist/engine/living-spec/auto-reconciler.d.ts +28 -0
  207. package/dist/engine/living-spec/auto-reconciler.d.ts.map +1 -0
  208. package/dist/engine/living-spec/auto-reconciler.js +103 -0
  209. package/dist/engine/living-spec/auto-reconciler.js.map +1 -0
  210. package/dist/engine/living-spec/bidirectional-sync.d.ts +26 -0
  211. package/dist/engine/living-spec/bidirectional-sync.d.ts.map +1 -0
  212. package/dist/engine/living-spec/bidirectional-sync.js +160 -0
  213. package/dist/engine/living-spec/bidirectional-sync.js.map +1 -0
  214. package/dist/engine/living-spec/dashboard-collector.d.ts +22 -0
  215. package/dist/engine/living-spec/dashboard-collector.d.ts.map +1 -0
  216. package/dist/engine/living-spec/dashboard-collector.js +97 -0
  217. package/dist/engine/living-spec/dashboard-collector.js.map +1 -0
  218. package/dist/engine/living-spec/drift-watcher.d.ts +15 -0
  219. package/dist/engine/living-spec/drift-watcher.d.ts.map +1 -0
  220. package/dist/engine/living-spec/drift-watcher.js +126 -0
  221. package/dist/engine/living-spec/drift-watcher.js.map +1 -0
  222. package/dist/engine/living-spec/hash-tracker.d.ts +24 -0
  223. package/dist/engine/living-spec/hash-tracker.d.ts.map +1 -0
  224. package/dist/engine/living-spec/hash-tracker.js +123 -0
  225. package/dist/engine/living-spec/hash-tracker.js.map +1 -0
  226. package/dist/engine/living-spec/index.d.ts +9 -0
  227. package/dist/engine/living-spec/index.d.ts.map +1 -0
  228. package/dist/engine/living-spec/index.js +10 -0
  229. package/dist/engine/living-spec/index.js.map +1 -0
  230. package/dist/engine/living-spec/signature-tracker.d.ts +18 -0
  231. package/dist/engine/living-spec/signature-tracker.d.ts.map +1 -0
  232. package/dist/engine/living-spec/signature-tracker.js +136 -0
  233. package/dist/engine/living-spec/signature-tracker.js.map +1 -0
  234. package/dist/engine/living-spec/test-coverage-correlator.d.ts +22 -0
  235. package/dist/engine/living-spec/test-coverage-correlator.d.ts.map +1 -0
  236. package/dist/engine/living-spec/test-coverage-correlator.js +130 -0
  237. package/dist/engine/living-spec/test-coverage-correlator.js.map +1 -0
  238. package/dist/engine/llm-providers/cost-tracker.d.ts.map +1 -1
  239. package/dist/engine/llm-providers/cost-tracker.js +1 -0
  240. package/dist/engine/llm-providers/cost-tracker.js.map +1 -1
  241. package/dist/engine/llm-providers/load-balancer.d.ts.map +1 -1
  242. package/dist/engine/llm-providers/load-balancer.js +3 -0
  243. package/dist/engine/llm-providers/load-balancer.js.map +1 -1
  244. package/dist/engine/plugins/extensions/tool-extension.d.ts.map +1 -1
  245. package/dist/engine/plugins/extensions/tool-extension.js +1 -0
  246. package/dist/engine/plugins/extensions/tool-extension.js.map +1 -1
  247. package/dist/engine/plugins/extensions/worker-extension.d.ts.map +1 -1
  248. package/dist/engine/plugins/extensions/worker-extension.js +3 -1
  249. package/dist/engine/plugins/extensions/worker-extension.js.map +1 -1
  250. package/dist/engine/plugins/loader.d.ts.map +1 -1
  251. package/dist/engine/plugins/loader.js +3 -0
  252. package/dist/engine/plugins/loader.js.map +1 -1
  253. package/dist/engine/safety/file-mutex.d.ts.map +1 -1
  254. package/dist/engine/safety/file-mutex.js +3 -0
  255. package/dist/engine/safety/file-mutex.js.map +1 -1
  256. package/dist/engine/safety/health-monitor.d.ts.map +1 -1
  257. package/dist/engine/safety/health-monitor.js +3 -0
  258. package/dist/engine/safety/health-monitor.js.map +1 -1
  259. package/dist/engine/safety/transaction.d.ts.map +1 -1
  260. package/dist/engine/safety/transaction.js +3 -0
  261. package/dist/engine/safety/transaction.js.map +1 -1
  262. package/dist/engine/spec-templates/custom-loader.d.ts.map +1 -1
  263. package/dist/engine/spec-templates/custom-loader.js +1 -0
  264. package/dist/engine/spec-templates/custom-loader.js.map +1 -1
  265. package/dist/index.js +29 -0
  266. package/dist/index.js.map +1 -1
  267. package/dist/storage/hash-snapshot-store.d.ts +18 -0
  268. package/dist/storage/hash-snapshot-store.d.ts.map +1 -0
  269. package/dist/storage/hash-snapshot-store.js +43 -0
  270. package/dist/storage/hash-snapshot-store.js.map +1 -0
  271. package/dist/storage/index.d.ts +3 -0
  272. package/dist/storage/index.d.ts.map +1 -1
  273. package/dist/storage/index.js +3 -0
  274. package/dist/storage/index.js.map +1 -1
  275. package/dist/storage/living-dashboard-store.d.ts +10 -0
  276. package/dist/storage/living-dashboard-store.d.ts.map +1 -0
  277. package/dist/storage/living-dashboard-store.js +31 -0
  278. package/dist/storage/living-dashboard-store.js.map +1 -0
  279. package/dist/storage/sync-log-store.d.ts +26 -0
  280. package/dist/storage/sync-log-store.d.ts.map +1 -0
  281. package/dist/storage/sync-log-store.js +60 -0
  282. package/dist/storage/sync-log-store.js.map +1 -0
  283. package/dist/tools/auto-reconcile.d.ts +3 -0
  284. package/dist/tools/auto-reconcile.d.ts.map +1 -0
  285. package/dist/tools/auto-reconcile.js +81 -0
  286. package/dist/tools/auto-reconcile.js.map +1 -0
  287. package/dist/tools/challenge-spec/platform-challenge-scenarios-b2.d.ts.map +1 -1
  288. package/dist/tools/challenge-spec/platform-challenge-scenarios-b2.js +6 -0
  289. package/dist/tools/challenge-spec/platform-challenge-scenarios-b2.js.map +1 -1
  290. package/dist/tools/create-spec/spec-builder.js +2 -0
  291. package/dist/tools/create-spec/spec-builder.js.map +1 -1
  292. package/dist/tools/dashboard.d.ts.map +1 -1
  293. package/dist/tools/dashboard.js +20 -13
  294. package/dist/tools/dashboard.js.map +1 -1
  295. package/dist/tools/generate-annotations.d.ts +3 -0
  296. package/dist/tools/generate-annotations.d.ts.map +1 -0
  297. package/dist/tools/generate-annotations.js +70 -0
  298. package/dist/tools/generate-annotations.js.map +1 -0
  299. package/dist/tools/generate-execution-plan.d.ts.map +1 -1
  300. package/dist/tools/generate-execution-plan.js +1 -0
  301. package/dist/tools/generate-execution-plan.js.map +1 -1
  302. package/dist/tools/github-pr-handler.d.ts.map +1 -1
  303. package/dist/tools/github-pr-handler.js +1 -0
  304. package/dist/tools/github-pr-handler.js.map +1 -1
  305. package/dist/tools/github-review-handler.d.ts.map +1 -1
  306. package/dist/tools/github-review-handler.js +1 -0
  307. package/dist/tools/github-review-handler.js.map +1 -1
  308. package/dist/tools/ide-config-handler.d.ts.map +1 -1
  309. package/dist/tools/ide-config-handler.js +3 -0
  310. package/dist/tools/ide-config-handler.js.map +1 -1
  311. package/dist/tools/init-project/handler.d.ts.map +1 -1
  312. package/dist/tools/init-project/handler.js +0 -3
  313. package/dist/tools/init-project/handler.js.map +1 -1
  314. package/dist/tools/living-spec-coverage.d.ts +3 -0
  315. package/dist/tools/living-spec-coverage.d.ts.map +1 -0
  316. package/dist/tools/living-spec-coverage.js +100 -0
  317. package/dist/tools/living-spec-coverage.js.map +1 -0
  318. package/dist/tools/living-spec-watch.d.ts +4 -0
  319. package/dist/tools/living-spec-watch.d.ts.map +1 -0
  320. package/dist/tools/living-spec-watch.js +94 -0
  321. package/dist/tools/living-spec-watch.js.map +1 -0
  322. package/dist/tools/manage-plugins-handler.d.ts.map +1 -1
  323. package/dist/tools/manage-plugins-handler.js +2 -1
  324. package/dist/tools/manage-plugins-handler.js.map +1 -1
  325. package/dist/tools/orchestrate-distribution.d.ts.map +1 -1
  326. package/dist/tools/orchestrate-distribution.js +1 -0
  327. package/dist/tools/orchestrate-distribution.js.map +1 -1
  328. package/dist/tools/orchestrate-runtime.js +2 -0
  329. package/dist/tools/orchestrate-runtime.js.map +1 -1
  330. package/dist/tools/plan-team-distribution.d.ts.map +1 -1
  331. package/dist/tools/plan-team-distribution.js +2 -0
  332. package/dist/tools/plan-team-distribution.js.map +1 -1
  333. package/dist/tools/register-dashboard-tools.d.ts.map +1 -1
  334. package/dist/tools/register-dashboard-tools.js +5 -1
  335. package/dist/tools/register-dashboard-tools.js.map +1 -1
  336. package/dist/tools/register-hooks-tools.d.ts.map +1 -1
  337. package/dist/tools/register-hooks-tools.js +82 -1
  338. package/dist/tools/register-hooks-tools.js.map +1 -1
  339. package/dist/tools/register-living-spec-advanced-tools.d.ts +6 -0
  340. package/dist/tools/register-living-spec-advanced-tools.d.ts.map +1 -0
  341. package/dist/tools/register-living-spec-advanced-tools.js +113 -0
  342. package/dist/tools/register-living-spec-advanced-tools.js.map +1 -0
  343. package/dist/tools/register-living-spec-tools.d.ts +6 -0
  344. package/dist/tools/register-living-spec-tools.d.ts.map +1 -0
  345. package/dist/tools/register-living-spec-tools.js +67 -0
  346. package/dist/tools/register-living-spec-tools.js.map +1 -0
  347. package/dist/tools/resolve-sync-conflict.d.ts +3 -0
  348. package/dist/tools/resolve-sync-conflict.d.ts.map +1 -0
  349. package/dist/tools/resolve-sync-conflict.js +38 -0
  350. package/dist/tools/resolve-sync-conflict.js.map +1 -0
  351. package/dist/tools/snapshot-spec-hashes.d.ts +3 -0
  352. package/dist/tools/snapshot-spec-hashes.d.ts.map +1 -0
  353. package/dist/tools/snapshot-spec-hashes.js +100 -0
  354. package/dist/tools/snapshot-spec-hashes.js.map +1 -0
  355. package/dist/tools/spec-diff.d.ts +3 -0
  356. package/dist/tools/spec-diff.d.ts.map +1 -0
  357. package/dist/tools/spec-diff.js +58 -0
  358. package/dist/tools/spec-diff.js.map +1 -0
  359. package/dist/tools/start-hooks.d.ts +17 -0
  360. package/dist/tools/start-hooks.d.ts.map +1 -0
  361. package/dist/tools/start-hooks.js +209 -0
  362. package/dist/tools/start-hooks.js.map +1 -0
  363. package/dist/tools/suggest-tooling/catalog-loader.d.ts.map +1 -1
  364. package/dist/tools/suggest-tooling/catalog-loader.js +1 -0
  365. package/dist/tools/suggest-tooling/catalog-loader.js.map +1 -1
  366. package/dist/tools/sync-code-to-spec.d.ts +3 -0
  367. package/dist/tools/sync-code-to-spec.d.ts.map +1 -0
  368. package/dist/tools/sync-code-to-spec.js +51 -0
  369. package/dist/tools/sync-code-to-spec.js.map +1 -0
  370. package/dist/tools/sync-spec-to-code.d.ts +3 -0
  371. package/dist/tools/sync-spec-to-code.d.ts.map +1 -0
  372. package/dist/tools/sync-spec-to-code.js +58 -0
  373. package/dist/tools/sync-spec-to-code.js.map +1 -0
  374. package/dist/tools/validate-annotations.d.ts +3 -0
  375. package/dist/tools/validate-annotations.d.ts.map +1 -0
  376. package/dist/tools/validate-annotations.js +90 -0
  377. package/dist/tools/validate-annotations.js.map +1 -0
  378. package/dist/types/cli.d.ts +14 -0
  379. package/dist/types/cli.d.ts.map +1 -0
  380. package/dist/types/cli.js +3 -0
  381. package/dist/types/cli.js.map +1 -0
  382. package/dist/types/dashboard.d.ts +86 -1
  383. package/dist/types/dashboard.d.ts.map +1 -1
  384. package/dist/types/file-hooks.d.ts +230 -0
  385. package/dist/types/file-hooks.d.ts.map +1 -0
  386. package/dist/types/file-hooks.js +3 -0
  387. package/dist/types/file-hooks.js.map +1 -0
  388. package/dist/types/index.d.ts +3 -0
  389. package/dist/types/index.d.ts.map +1 -1
  390. package/dist/types/index.js +3 -0
  391. package/dist/types/index.js.map +1 -1
  392. package/dist/types/living-spec.d.ts +382 -0
  393. package/dist/types/living-spec.d.ts.map +1 -0
  394. package/dist/types/living-spec.js +3 -0
  395. package/dist/types/living-spec.js.map +1 -0
  396. package/package.json +1 -1
  397. package/src/config/hook-defaults.json +19 -0
  398. package/src/config/license-plans.json +16 -1
  399. package/src/config/tool-groups.json +12 -1
@@ -0,0 +1,209 @@
1
+ // tools/start-hooks.ts — Start file watcher + hook engine (SPEC-130)
2
+ import { HookEngine } from '../engine/hooks/hook-engine.js';
3
+ import { EventBus } from '../engine/hooks/event-bus.js';
4
+ import { FileWatcher } from '../engine/hooks/file-watcher.js';
5
+ import { ConfigLoader } from '../engine/hooks/config-loader.js';
6
+ import { Debouncer } from '../engine/hooks/debouncer.js';
7
+ // ---------------------------------------------------------------------------
8
+ // Singleton state
9
+ // ---------------------------------------------------------------------------
10
+ let engineInstance = null;
11
+ let watcherInstance = null;
12
+ let debouncerInstance = null;
13
+ let configLoaderInstance = null;
14
+ /**
15
+ * Get the current engine instance (for testing/internal use).
16
+ */
17
+ export function getEngineInstance() {
18
+ return engineInstance;
19
+ }
20
+ /**
21
+ * Get the current watcher instance (for testing/internal use).
22
+ */
23
+ export function getWatcherInstance() {
24
+ return watcherInstance;
25
+ }
26
+ // ---------------------------------------------------------------------------
27
+ // Start hooks
28
+ // ---------------------------------------------------------------------------
29
+ export async function handleStartHooks(args) {
30
+ // Idempotent — if already running, return status
31
+ if (engineInstance?.status().running) {
32
+ const status = engineInstance.status();
33
+ return {
34
+ content: [
35
+ {
36
+ type: 'text',
37
+ text: JSON.stringify({
38
+ message: 'Hook engine already running',
39
+ ...status,
40
+ }, null, 2),
41
+ },
42
+ ],
43
+ };
44
+ }
45
+ const projectPath = args.projectPath;
46
+ const enabledHooks = args.hooks ?? ['on-save', 'on-create', 'on-delete'];
47
+ // Load config
48
+ configLoaderInstance = new ConfigLoader(projectPath);
49
+ const config = await configLoaderInstance.load();
50
+ // Create event bus and engine
51
+ const eventBus = new EventBus();
52
+ engineInstance = new HookEngine(eventBus);
53
+ // Create file watcher
54
+ watcherInstance = new FileWatcher({
55
+ rootDir: projectPath,
56
+ include: config.hooks['on-save']?.include,
57
+ exclude: config.hooks['on-save']?.exclude,
58
+ });
59
+ // Create debouncer
60
+ debouncerInstance = new Debouncer((event) => {
61
+ const hookType = mapEventToHookType(event);
62
+ if (hookType && enabledHooks.includes(hookType)) {
63
+ void engineInstance?.dispatch(event, hookType);
64
+ }
65
+ }, {
66
+ debounceMs: config.debounceMs,
67
+ rateLimitPerFileMs: config.rateLimitPerFileMs,
68
+ });
69
+ // Wire watcher -> debouncer
70
+ watcherInstance.on('change', (event) => {
71
+ eventBus.emitEvent('file:change', {
72
+ path: event.path,
73
+ type: event.type,
74
+ timestamp: event.timestamp,
75
+ });
76
+ debouncerInstance?.push(event);
77
+ });
78
+ // Start watching config for live reload
79
+ configLoaderInstance.startWatching();
80
+ // Start engine and watcher
81
+ engineInstance.start();
82
+ watcherInstance.start();
83
+ return {
84
+ content: [
85
+ {
86
+ type: 'text',
87
+ text: JSON.stringify({
88
+ message: 'Hook engine started',
89
+ projectPath,
90
+ enabledHooks,
91
+ config: {
92
+ debounceMs: config.debounceMs,
93
+ rateLimitPerFileMs: config.rateLimitPerFileMs,
94
+ },
95
+ }, null, 2),
96
+ },
97
+ ],
98
+ };
99
+ }
100
+ // ---------------------------------------------------------------------------
101
+ // Helpers
102
+ // ---------------------------------------------------------------------------
103
+ function mapEventToHookType(event) {
104
+ switch (event.type) {
105
+ case 'modify':
106
+ return 'on-save';
107
+ case 'create':
108
+ return 'on-create';
109
+ case 'delete':
110
+ return 'on-delete';
111
+ default:
112
+ return null;
113
+ }
114
+ }
115
+ // ---------------------------------------------------------------------------
116
+ // Stop hooks
117
+ // ---------------------------------------------------------------------------
118
+ export async function handleStopHooks(_args) {
119
+ await Promise.resolve(); // Ensure async for safeLicensed wrapper
120
+ if (!engineInstance) {
121
+ return {
122
+ content: [{ type: 'text', text: JSON.stringify({ message: 'Hook engine not running' }) }],
123
+ };
124
+ }
125
+ engineInstance.stop();
126
+ watcherInstance?.close();
127
+ debouncerInstance?.dispose();
128
+ configLoaderInstance?.close();
129
+ const message = 'Hook engine stopped and resources cleaned up';
130
+ engineInstance = null;
131
+ watcherInstance = null;
132
+ debouncerInstance = null;
133
+ configLoaderInstance = null;
134
+ return {
135
+ content: [{ type: 'text', text: JSON.stringify({ message }) }],
136
+ };
137
+ }
138
+ // ---------------------------------------------------------------------------
139
+ // Hook status
140
+ // ---------------------------------------------------------------------------
141
+ export async function handleHookStatus() {
142
+ await Promise.resolve(); // Ensure async for safeLicensed wrapper
143
+ if (!engineInstance) {
144
+ return {
145
+ content: [
146
+ {
147
+ type: 'text',
148
+ text: JSON.stringify({
149
+ running: false,
150
+ activeHooks: [],
151
+ pendingEvents: 0,
152
+ telemetry: {},
153
+ eventHistory: 0,
154
+ }),
155
+ },
156
+ ],
157
+ };
158
+ }
159
+ const status = engineInstance.status();
160
+ const eventBus = engineInstance.getEventBus();
161
+ return {
162
+ content: [
163
+ {
164
+ type: 'text',
165
+ text: JSON.stringify({
166
+ ...status,
167
+ eventHistory: eventBus.getFullHistory().length,
168
+ }, null, 2),
169
+ },
170
+ ],
171
+ };
172
+ }
173
+ // ---------------------------------------------------------------------------
174
+ // Configure hooks
175
+ // ---------------------------------------------------------------------------
176
+ export async function handleConfigureHooks(args) {
177
+ if (!configLoaderInstance) {
178
+ // Not running — just load and report current config
179
+ const loader = new ConfigLoader(args.projectPath);
180
+ const config = await loader.load();
181
+ loader.close();
182
+ return {
183
+ content: [
184
+ {
185
+ type: 'text',
186
+ text: JSON.stringify({
187
+ message: 'Hook engine not running. Current config:',
188
+ config,
189
+ }, null, 2),
190
+ },
191
+ ],
192
+ };
193
+ }
194
+ // Reload config
195
+ const config = await configLoaderInstance.load();
196
+ return {
197
+ content: [
198
+ {
199
+ type: 'text',
200
+ text: JSON.stringify({
201
+ message: 'Configuration reloaded',
202
+ config,
203
+ engineRunning: engineInstance?.status().running ?? false,
204
+ }, null, 2),
205
+ },
206
+ ],
207
+ };
208
+ }
209
+ //# sourceMappingURL=start-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-hooks.js","sourceRoot":"","sources":["../../src/tools/start-hooks.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"catalog-loader.d.ts","sourceRoot":"","sources":["../../../src/tools/suggest-tooling/catalog-loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAIhE,wBAAsB,WAAW,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAehE"}
1
+ {"version":3,"file":"catalog-loader.d.ts","sourceRoot":"","sources":["../../../src/tools/suggest-tooling/catalog-loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAIhE,wBAAsB,WAAW,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAgBhE"}
@@ -2,6 +2,7 @@
2
2
  import { readFile } from 'node:fs/promises';
3
3
  let catalogCache = null;
4
4
  export async function loadCatalog() {
5
+ /* v8 ignore next 3 -- cache hit path, depends on module-level state between test runs */
5
6
  if (catalogCache) {
6
7
  return catalogCache;
7
8
  }
@@ -1 +1 @@
1
- {"version":3,"file":"catalog-loader.js","sourceRoot":"","sources":["../../../src/tools/suggest-tooling/catalog-loader.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,IAAI,YAAY,GAA+B,IAAI,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,yCAAyC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvF,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC;QAC3D,0BAA0B;QAC1B,OAAO,GAAG,CAAC,YAAY,CAAC;QACxB,YAAY,GAAG,GAA0B,CAAC;QAC1C,OAAO,YAAY,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"catalog-loader.js","sourceRoot":"","sources":["../../../src/tools/suggest-tooling/catalog-loader.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,IAAI,YAAY,GAA+B,IAAI,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,yFAAyF;IACzF,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,yCAAyC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvF,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC;QAC3D,0BAA0B;QAC1B,OAAO,GAAG,CAAC,YAAY,CAAC;QACxB,YAAY,GAAG,GAA0B,CAAC;QAC1C,OAAO,YAAY,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { SyncCodeToSpecInput, ToolResult } from '../types/index.js';
2
+ export declare function handleSyncCodeToSpec(args: SyncCodeToSpecInput): Promise<ToolResult>;
3
+ //# sourceMappingURL=sync-code-to-spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-code-to-spec.d.ts","sourceRoot":"","sources":["../../src/tools/sync-code-to-spec.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEzE,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAyDzF"}
@@ -0,0 +1,51 @@
1
+ // tools/sync-code-to-spec.ts — sync_code_to_spec handler
2
+ import { specStore, syncLogStore } from '../storage/index.js';
3
+ import { generateProgressUpdates, detectConflicts, buildCodeToSpecResult, parseAnnotationsFromProject, } from '../engine/living-spec/index.js';
4
+ import { extractCriteria } from '../engine/validator/extractors.js';
5
+ export async function handleSyncCodeToSpec(args) {
6
+ const { projectId, specId, projectPath } = args;
7
+ // 1. Load spec
8
+ const spec = await specStore.getSpec(projectId, specId);
9
+ if (!spec) {
10
+ return {
11
+ content: [
12
+ {
13
+ type: 'text',
14
+ text: JSON.stringify({ message: `Spec ${specId} not found` }, null, 2),
15
+ },
16
+ ],
17
+ isError: true,
18
+ };
19
+ }
20
+ // 2. Parse annotations from code
21
+ const parseResult = await parseAnnotationsFromProject(projectPath, specId);
22
+ // 3. Build criteria status map (default: pending)
23
+ const criteriaList = await extractCriteria(spec);
24
+ const statusMap = new Map();
25
+ for (let i = 0; i < criteriaList.length; i++) {
26
+ statusMap.set(`${specId}:AC-${i + 1}`, 'pending');
27
+ }
28
+ // 4. Generate progress updates
29
+ const updates = generateProgressUpdates(parseResult.annotations, statusMap);
30
+ // 5. Detect conflicts
31
+ const conflicts = detectConflicts(parseResult.annotations, statusMap, 'code-to-spec');
32
+ // 6. Build result
33
+ const result = buildCodeToSpecResult(specId, updates, conflicts);
34
+ // 7. Persist
35
+ await syncLogStore.appendSyncLog(projectId, result.logEntries);
36
+ if (conflicts.length > 0) {
37
+ await syncLogStore.addConflicts(projectId, conflicts);
38
+ }
39
+ return {
40
+ content: [
41
+ {
42
+ type: 'text',
43
+ text: JSON.stringify({
44
+ ...result,
45
+ message: `Code-to-spec sync: ${updates.length} progress update(s), ${conflicts.length} conflict(s)`,
46
+ }, null, 2),
47
+ },
48
+ ],
49
+ };
50
+ }
51
+ //# sourceMappingURL=sync-code-to-spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-code-to-spec.js","sourceRoot":"","sources":["../../src/tools/sync-code-to-spec.ts"],"names":[],"mappings":"AAAA,yDAAyD;AAEzD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EACL,uBAAuB,EACvB,eAAe,EACf,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAGpE,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAyB;IAClE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAEhD,eAAe;IACf,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACxD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,QAAQ,MAAM,YAAY,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;iBACvE;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,iCAAiC;IACjC,MAAM,WAAW,GAAG,MAAM,2BAA2B,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAE3E,kDAAkD;IAClD,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IACpD,CAAC;IAED,+BAA+B;IAC/B,MAAM,OAAO,GAAG,uBAAuB,CAAC,WAAW,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAE5E,sBAAsB;IACtB,MAAM,SAAS,GAAG,eAAe,CAAC,WAAW,CAAC,WAAW,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;IAEtF,kBAAkB;IAClB,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAEjE,aAAa;IACb,MAAM,YAAY,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAC/D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,YAAY,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACxD,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;oBACE,GAAG,MAAM;oBACT,OAAO,EAAE,sBAAsB,OAAO,CAAC,MAAM,wBAAwB,SAAS,CAAC,MAAM,cAAc;iBACpG,EACD,IAAI,EACJ,CAAC,CACF;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { SyncSpecToCodeInput, ToolResult } from '../types/index.js';
2
+ export declare function handleSyncSpecToCode(args: SyncSpecToCodeInput): Promise<ToolResult>;
3
+ //# sourceMappingURL=sync-spec-to-code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-spec-to-code.d.ts","sourceRoot":"","sources":["../../src/tools/sync-spec-to-code.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAiB,MAAM,mBAAmB,CAAC;AAExF,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAgEzF"}
@@ -0,0 +1,58 @@
1
+ // tools/sync-spec-to-code.ts — sync_spec_to_code handler
2
+ import { specStore, syncLogStore } from '../storage/index.js';
3
+ import { generateTodoComments, detectConflicts, buildSpecToCodeResult, parseAnnotationsFromProject, } from '../engine/living-spec/index.js';
4
+ import { extractCriteria } from '../engine/validator/extractors.js';
5
+ export async function handleSyncSpecToCode(args) {
6
+ const { projectId, specId, projectPath } = args;
7
+ // 1. Load spec
8
+ const spec = await specStore.getSpec(projectId, specId);
9
+ if (!spec) {
10
+ return {
11
+ content: [
12
+ {
13
+ type: 'text',
14
+ text: JSON.stringify({ message: `Spec ${specId} not found` }, null, 2),
15
+ },
16
+ ],
17
+ isError: true,
18
+ };
19
+ }
20
+ // 2. Extract criteria
21
+ const criteriaList = await extractCriteria(spec);
22
+ const pendingCriteria = criteriaList.map((desc, i) => ({
23
+ specId,
24
+ criterion: i + 1,
25
+ description: desc,
26
+ status: 'pending',
27
+ }));
28
+ // 3. Parse existing annotations
29
+ const parseResult = await parseAnnotationsFromProject(projectPath, specId);
30
+ // 4. Generate TODOs for pending criteria
31
+ const defaultFile = `${projectPath}/TODO-${specId}.md`;
32
+ const todos = generateTodoComments(pendingCriteria, parseResult.annotations, defaultFile);
33
+ // 5. Detect conflicts
34
+ const statusMap = new Map();
35
+ for (const criterion of pendingCriteria) {
36
+ statusMap.set(`${specId}:AC-${criterion.criterion}`, criterion.status);
37
+ }
38
+ const conflicts = detectConflicts(parseResult.annotations, statusMap, 'spec-to-code');
39
+ // 6. Build result
40
+ const result = buildSpecToCodeResult(specId, todos, conflicts);
41
+ // 7. Persist sync log and conflicts
42
+ await syncLogStore.appendSyncLog(projectId, result.logEntries);
43
+ if (conflicts.length > 0) {
44
+ await syncLogStore.addConflicts(projectId, conflicts);
45
+ }
46
+ return {
47
+ content: [
48
+ {
49
+ type: 'text',
50
+ text: JSON.stringify({
51
+ ...result,
52
+ message: `Spec-to-code sync: ${todos.length} TODO(s) generated, ${conflicts.length} conflict(s) detected`,
53
+ }, null, 2),
54
+ },
55
+ ],
56
+ };
57
+ }
58
+ //# sourceMappingURL=sync-spec-to-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-spec-to-code.js","sourceRoot":"","sources":["../../src/tools/sync-spec-to-code.ts"],"names":[],"mappings":"AAAA,yDAAyD;AAEzD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAGpE,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAyB;IAClE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAEhD,eAAe;IACf,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACxD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,QAAQ,MAAM,YAAY,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;iBACvE;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,sBAAsB;IACtB,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,eAAe,GAAoB,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACtE,MAAM;QACN,SAAS,EAAE,CAAC,GAAG,CAAC;QAChB,WAAW,EAAE,IAAI;QACjB,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC,CAAC;IAEJ,gCAAgC;IAChC,MAAM,WAAW,GAAG,MAAM,2BAA2B,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAE3E,yCAAyC;IACzC,MAAM,WAAW,GAAG,GAAG,WAAW,SAAS,MAAM,KAAK,CAAC;IACvD,MAAM,KAAK,GAAG,oBAAoB,CAAC,eAAe,EAAE,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAE1F,sBAAsB;IACtB,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,KAAK,MAAM,SAAS,IAAI,eAAe,EAAE,CAAC;QACxC,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,OAAO,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,SAAS,GAAG,eAAe,CAAC,WAAW,CAAC,WAAW,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;IAEtF,kBAAkB;IAClB,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IAE/D,oCAAoC;IACpC,MAAM,YAAY,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAC/D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,YAAY,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACxD,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;oBACE,GAAG,MAAM;oBACT,OAAO,EAAE,sBAAsB,KAAK,CAAC,MAAM,uBAAuB,SAAS,CAAC,MAAM,uBAAuB;iBAC1G,EACD,IAAI,EACJ,CAAC,CACF;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ValidateAnnotationsInput, ToolResult } from '../types/index.js';
2
+ export declare function handleValidateAnnotations(args: ValidateAnnotationsInput): Promise<ToolResult>;
3
+ //# sourceMappingURL=validate-annotations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-annotations.d.ts","sourceRoot":"","sources":["../../src/tools/validate-annotations.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,wBAAwB,EAGxB,UAAU,EACX,MAAM,mBAAmB,CAAC;AAE3B,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,wBAAwB,GAC7B,OAAO,CAAC,UAAU,CAAC,CAwGrB"}
@@ -0,0 +1,90 @@
1
+ // tools/validate-annotations.ts — Validate @spec annotations in source code
2
+ // Checks that all annotated spec IDs exist and criteria numbers are valid.
3
+ import { specStore } from '../storage/index.js';
4
+ import { parseAnnotationsFromProject } from '../engine/living-spec/index.js';
5
+ import { extractCriteria } from '../engine/validator/extractors.js';
6
+ export async function handleValidateAnnotations(args) {
7
+ const { projectId, projectPath, specId: filterSpecId } = args;
8
+ // 1. Parse annotations from project
9
+ const parseResult = await parseAnnotationsFromProject(projectPath, filterSpecId);
10
+ if (parseResult.annotations.length === 0) {
11
+ return {
12
+ content: [
13
+ {
14
+ type: 'text',
15
+ text: JSON.stringify({
16
+ message: 'No @spec annotations found in project',
17
+ fileCount: parseResult.fileCount,
18
+ annotatedFileCount: 0,
19
+ }, null, 2),
20
+ },
21
+ ],
22
+ };
23
+ }
24
+ // 2. Validate each annotation against stored specs
25
+ const valid = [];
26
+ const invalid = [];
27
+ // Cache specs to avoid repeated lookups
28
+ const specCache = new Map();
29
+ const criteriaCache = new Map();
30
+ for (const annotation of parseResult.annotations) {
31
+ // Check if spec exists
32
+ let spec = specCache.get(annotation.specId);
33
+ if (spec === undefined) {
34
+ spec = await specStore.getSpec(projectId, annotation.specId);
35
+ specCache.set(annotation.specId, spec);
36
+ }
37
+ if (!spec) {
38
+ invalid.push({
39
+ annotation,
40
+ reason: `Spec ${annotation.specId} not found in project`,
41
+ });
42
+ continue;
43
+ }
44
+ // Check criteria numbers if specified
45
+ if (annotation.criteria.length > 0) {
46
+ let criteriaList = criteriaCache.get(annotation.specId);
47
+ if (criteriaList === undefined) {
48
+ criteriaList = await extractCriteria(spec);
49
+ criteriaCache.set(annotation.specId, criteriaList);
50
+ }
51
+ const maxCriterion = criteriaList.length;
52
+ const invalidCriteria = annotation.criteria.filter((c) => c > maxCriterion || c < 1);
53
+ if (invalidCriteria.length > 0) {
54
+ invalid.push({
55
+ annotation,
56
+ reason: `Invalid criteria AC-${invalidCriteria.join(', AC-')}: spec has ${maxCriterion} criteria`,
57
+ });
58
+ continue;
59
+ }
60
+ }
61
+ valid.push({
62
+ annotation,
63
+ reason: 'Valid annotation',
64
+ });
65
+ }
66
+ const result = {
67
+ valid,
68
+ invalid,
69
+ totalAnnotations: parseResult.annotations.length,
70
+ validCount: valid.length,
71
+ invalidCount: invalid.length,
72
+ };
73
+ return {
74
+ content: [
75
+ {
76
+ type: 'text',
77
+ text: JSON.stringify({
78
+ ...result,
79
+ fileCount: parseResult.fileCount,
80
+ annotatedFileCount: parseResult.annotatedFileCount,
81
+ message: invalid.length > 0
82
+ ? `${invalid.length} invalid annotation(s) found. Review and fix before proceeding.`
83
+ : `All ${valid.length} annotation(s) are valid.`,
84
+ }, null, 2),
85
+ },
86
+ ],
87
+ isError: invalid.length > 0 ? true : undefined,
88
+ };
89
+ }
90
+ //# sourceMappingURL=validate-annotations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-annotations.js","sourceRoot":"","sources":["../../src/tools/validate-annotations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * A CLI command handler that can be dispatched by the router.
3
+ */
4
+ export interface CliCommand {
5
+ /** Command name (e.g. "init", "create") */
6
+ name: string;
7
+ /** Short description for help text */
8
+ description: string;
9
+ /** Usage string (e.g. "planu init [path]") */
10
+ usage: string;
11
+ /** Execute the command with parsed args */
12
+ run(args: string[]): Promise<void>;
13
+ }
14
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/types/cli.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC"}
@@ -0,0 +1,3 @@
1
+ // Planu — CLI type definitions (SPEC-124)
2
+ export {};
3
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/types/cli.ts"],"names":[],"mappings":"AAAA,0CAA0C"}
@@ -1,4 +1,4 @@
1
- import type { SpecStatus } from './common.js';
1
+ import type { Difficulty, RiskLevel, SpecStatus } from './common.js';
2
2
  /** State of the dashboard HTTP server (singleton in memory) */
3
3
  export interface DashboardServerState {
4
4
  port: number;
@@ -24,6 +24,10 @@ export interface DashboardSpecCard {
24
24
  criteriaTotal: number;
25
25
  criteriaImplemented: number;
26
26
  progressPercent: number;
27
+ updatedAt?: string;
28
+ difficulty?: Difficulty;
29
+ risk?: RiskLevel;
30
+ tags?: string[];
27
31
  }
28
32
  /** Health metrics for a project displayed in the health panel */
29
33
  export interface ProjectHealthMetrics {
@@ -33,6 +37,70 @@ export interface ProjectHealthMetrics {
33
37
  activeImplementation: number;
34
38
  totalEstimation: number | null;
35
39
  }
40
+ /** Trend direction indicator for dashboard metrics */
41
+ export type TrendDirection = 'up' | 'down' | 'stable';
42
+ /** Single metric with trend */
43
+ export interface MetricTrend {
44
+ value: number;
45
+ trend: TrendDirection;
46
+ }
47
+ /** Dashboard metrics computed from spec data */
48
+ export interface DashboardMetrics {
49
+ completionRate: number;
50
+ criteriaCoverage: number;
51
+ velocity: number;
52
+ driftScore: number;
53
+ }
54
+ /** Trend information for all dashboard metrics */
55
+ export interface DashboardMetricTrends {
56
+ completionRate: TrendDirection;
57
+ criteriaCoverage: TrendDirection;
58
+ velocity: TrendDirection;
59
+ driftScore: TrendDirection;
60
+ }
61
+ /** WIP limits per kanban column */
62
+ export type KanbanWipLimits = Record<string, number>;
63
+ /** Valid status transitions map */
64
+ export type StatusTransitionMap = Record<string, string[]>;
65
+ /** Result of a spec status update operation */
66
+ export interface SpecStatusUpdateResult {
67
+ success: boolean;
68
+ specId: string;
69
+ newStatus: string;
70
+ error?: string;
71
+ }
72
+ /** Project health score with weighted components */
73
+ export interface ProjectHealthScore {
74
+ overall: number;
75
+ components: {
76
+ completion: number;
77
+ coverage: number;
78
+ drift: number;
79
+ velocity: number;
80
+ };
81
+ }
82
+ /** Raw constitution drift data */
83
+ export interface RawConstitutionDrift {
84
+ score?: number;
85
+ violations?: number;
86
+ }
87
+ /** Frontmatter data parsed from spec.md YAML header */
88
+ export interface SpecFrontmatter {
89
+ [key: string]: unknown;
90
+ status?: string;
91
+ difficulty?: number;
92
+ risk?: string;
93
+ tags?: string[];
94
+ updatedAt?: string;
95
+ }
96
+ /** Enhanced spec detail data with code links and frontmatter */
97
+ export interface SpecDetailData {
98
+ hu: string | null;
99
+ ficha: string | null;
100
+ progress: string | null;
101
+ codeLinks: string[];
102
+ frontmatter: SpecFrontmatter;
103
+ }
36
104
  /** Usage stats panel data read from data/global/ (SPEC-064) */
37
105
  export interface DashboardUsageStats {
38
106
  tier: string;
@@ -60,6 +128,10 @@ export interface RawSpecJson {
60
128
  totalDays?: number;
61
129
  totalPoints?: number;
62
130
  };
131
+ updatedAt?: string;
132
+ difficulty?: number;
133
+ risk?: string;
134
+ tags?: string[];
63
135
  }
64
136
  /** Raw structure of usage.json file read by data-loader */
65
137
  export interface RawUsageJson {
@@ -68,9 +140,22 @@ export interface RawUsageJson {
68
140
  dailyLimit?: number | null;
69
141
  trialDaysLeft?: number | null;
70
142
  }
143
+ /** A single event representing a change in project data */
144
+ export interface DashboardEvent {
145
+ type: 'spec_updated' | 'spec_created' | 'spec_deleted' | 'project_updated';
146
+ specId?: string;
147
+ timestamp: string;
148
+ data?: Record<string, unknown>;
149
+ }
150
+ /** Response from the events endpoint */
151
+ export interface DashboardEventsResponse {
152
+ events: DashboardEvent[];
153
+ timestamp: string;
154
+ }
71
155
  /** Input for start_dashboard MCP tool */
72
156
  export interface StartDashboardInput {
73
157
  port?: number;
158
+ open_browser?: boolean;
74
159
  }
75
160
  /** Input for stop_dashboard MCP tool */
76
161
  export type StopDashboardInput = Record<string, never>;
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/types/dashboard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,+DAA+D;AAC/D,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;CACxB;AAED,iDAAiD;AACjD,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,iBAAiB,EAAE,CAAC;CAC5B;AAED,mDAAmD;AACnD,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,iEAAiE;AACjE,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,+DAA+D;AAC/D,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,8DAA8D;AAC9D,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,2DAA2D;AAC3D,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3D;AAED,2DAA2D;AAC3D,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,yCAAyC;AACzC,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wCAAwC;AACxC,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/types/dashboard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAErE,+DAA+D;AAC/D,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;CACxB;AAED,iDAAiD;AACjD,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,iBAAiB,EAAE,CAAC;CAC5B;AAED,mDAAmD;AACnD,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,iEAAiE;AACjE,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,sDAAsD;AACtD,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEtD,+BAA+B;AAC/B,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,cAAc,CAAC;CACvB;AAED,gDAAgD;AAChD,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,kDAAkD;AAClD,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,cAAc,CAAC;IAC/B,gBAAgB,EAAE,cAAc,CAAC;IACjC,QAAQ,EAAE,cAAc,CAAC;IACzB,UAAU,EAAE,cAAc,CAAC;CAC5B;AAED,mCAAmC;AACnC,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAErD,mCAAmC;AACnC,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAE3D,+CAA+C;AAC/C,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,oDAAoD;AACpD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE;QACV,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,kCAAkC;AAClC,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,uDAAuD;AACvD,MAAM,WAAW,eAAe;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,gEAAgE;AAChE,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,eAAe,CAAC;CAC9B;AAED,+DAA+D;AAC/D,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,8DAA8D;AAC9D,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,2DAA2D;AAC3D,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,2DAA2D;AAC3D,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,2DAA2D;AAC3D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,cAAc,GAAG,cAAc,GAAG,cAAc,GAAG,iBAAiB,CAAC;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,wCAAwC;AACxC,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,yCAAyC;AACzC,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wCAAwC;AACxC,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC"}