cap-pro 1.0.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 (275) hide show
  1. package/.claude-plugin/README.md +26 -0
  2. package/.claude-plugin/marketplace.json +24 -0
  3. package/.claude-plugin/plugin.json +24 -0
  4. package/LICENSE +21 -0
  5. package/README.ja-JP.md +834 -0
  6. package/README.ko-KR.md +823 -0
  7. package/README.md +806 -0
  8. package/README.pt-BR.md +452 -0
  9. package/README.zh-CN.md +800 -0
  10. package/agents/cap-architect.md +269 -0
  11. package/agents/cap-brainstormer.md +207 -0
  12. package/agents/cap-curator.md +276 -0
  13. package/agents/cap-debugger.md +365 -0
  14. package/agents/cap-designer.md +246 -0
  15. package/agents/cap-historian.md +464 -0
  16. package/agents/cap-migrator.md +291 -0
  17. package/agents/cap-prototyper.md +197 -0
  18. package/agents/cap-validator.md +308 -0
  19. package/bin/install.js +5433 -0
  20. package/cap/bin/cap-tools.cjs +853 -0
  21. package/cap/bin/lib/arc-scanner.cjs +344 -0
  22. package/cap/bin/lib/cap-affinity-engine.cjs +862 -0
  23. package/cap/bin/lib/cap-anchor.cjs +228 -0
  24. package/cap/bin/lib/cap-annotation-writer.cjs +340 -0
  25. package/cap/bin/lib/cap-checkpoint.cjs +434 -0
  26. package/cap/bin/lib/cap-cluster-detect.cjs +945 -0
  27. package/cap/bin/lib/cap-cluster-display.cjs +52 -0
  28. package/cap/bin/lib/cap-cluster-format.cjs +245 -0
  29. package/cap/bin/lib/cap-cluster-helpers.cjs +295 -0
  30. package/cap/bin/lib/cap-cluster-io.cjs +212 -0
  31. package/cap/bin/lib/cap-completeness.cjs +540 -0
  32. package/cap/bin/lib/cap-deps.cjs +583 -0
  33. package/cap/bin/lib/cap-design-families.cjs +332 -0
  34. package/cap/bin/lib/cap-design.cjs +966 -0
  35. package/cap/bin/lib/cap-divergence-detector.cjs +400 -0
  36. package/cap/bin/lib/cap-doctor.cjs +752 -0
  37. package/cap/bin/lib/cap-feature-map-internals.cjs +19 -0
  38. package/cap/bin/lib/cap-feature-map-migrate.cjs +335 -0
  39. package/cap/bin/lib/cap-feature-map-monorepo.cjs +885 -0
  40. package/cap/bin/lib/cap-feature-map-shard.cjs +315 -0
  41. package/cap/bin/lib/cap-feature-map.cjs +1943 -0
  42. package/cap/bin/lib/cap-fitness-score.cjs +1075 -0
  43. package/cap/bin/lib/cap-impact-analysis.cjs +652 -0
  44. package/cap/bin/lib/cap-learn-review.cjs +1072 -0
  45. package/cap/bin/lib/cap-learning-signals.cjs +627 -0
  46. package/cap/bin/lib/cap-loader.cjs +227 -0
  47. package/cap/bin/lib/cap-logger.cjs +57 -0
  48. package/cap/bin/lib/cap-memory-bridge.cjs +764 -0
  49. package/cap/bin/lib/cap-memory-confidence.cjs +452 -0
  50. package/cap/bin/lib/cap-memory-dir.cjs +987 -0
  51. package/cap/bin/lib/cap-memory-engine.cjs +698 -0
  52. package/cap/bin/lib/cap-memory-extends.cjs +398 -0
  53. package/cap/bin/lib/cap-memory-graph.cjs +790 -0
  54. package/cap/bin/lib/cap-memory-migrate.cjs +2015 -0
  55. package/cap/bin/lib/cap-memory-pin.cjs +183 -0
  56. package/cap/bin/lib/cap-memory-platform.cjs +490 -0
  57. package/cap/bin/lib/cap-memory-prune.cjs +707 -0
  58. package/cap/bin/lib/cap-memory-schema.cjs +812 -0
  59. package/cap/bin/lib/cap-migrate-tags.cjs +309 -0
  60. package/cap/bin/lib/cap-migrate.cjs +540 -0
  61. package/cap/bin/lib/cap-pattern-apply.cjs +1203 -0
  62. package/cap/bin/lib/cap-pattern-pipeline.cjs +1034 -0
  63. package/cap/bin/lib/cap-plugin-manifest.cjs +80 -0
  64. package/cap/bin/lib/cap-realtime-affinity.cjs +399 -0
  65. package/cap/bin/lib/cap-reconcile.cjs +570 -0
  66. package/cap/bin/lib/cap-research-gate.cjs +218 -0
  67. package/cap/bin/lib/cap-scope-filter.cjs +402 -0
  68. package/cap/bin/lib/cap-semantic-pipeline.cjs +1038 -0
  69. package/cap/bin/lib/cap-session-extract.cjs +987 -0
  70. package/cap/bin/lib/cap-session.cjs +445 -0
  71. package/cap/bin/lib/cap-snapshot-linkage.cjs +963 -0
  72. package/cap/bin/lib/cap-stack-docs.cjs +646 -0
  73. package/cap/bin/lib/cap-tag-observer.cjs +371 -0
  74. package/cap/bin/lib/cap-tag-scanner.cjs +1766 -0
  75. package/cap/bin/lib/cap-telemetry.cjs +466 -0
  76. package/cap/bin/lib/cap-test-audit.cjs +1438 -0
  77. package/cap/bin/lib/cap-thread-migrator.cjs +307 -0
  78. package/cap/bin/lib/cap-thread-synthesis.cjs +545 -0
  79. package/cap/bin/lib/cap-thread-tracker.cjs +519 -0
  80. package/cap/bin/lib/cap-trace.cjs +399 -0
  81. package/cap/bin/lib/cap-trust-mode.cjs +336 -0
  82. package/cap/bin/lib/cap-ui-design-editor.cjs +642 -0
  83. package/cap/bin/lib/cap-ui-mind-map.cjs +712 -0
  84. package/cap/bin/lib/cap-ui-thread-nav.cjs +693 -0
  85. package/cap/bin/lib/cap-ui.cjs +1245 -0
  86. package/cap/bin/lib/cap-upgrade.cjs +1028 -0
  87. package/cap/bin/lib/cli/arg-helpers.cjs +49 -0
  88. package/cap/bin/lib/cli/frontmatter-router.cjs +31 -0
  89. package/cap/bin/lib/cli/init-router.cjs +68 -0
  90. package/cap/bin/lib/cli/phase-router.cjs +102 -0
  91. package/cap/bin/lib/cli/state-router.cjs +61 -0
  92. package/cap/bin/lib/cli/template-router.cjs +37 -0
  93. package/cap/bin/lib/cli/uat-router.cjs +29 -0
  94. package/cap/bin/lib/cli/validation-router.cjs +26 -0
  95. package/cap/bin/lib/cli/verification-router.cjs +31 -0
  96. package/cap/bin/lib/cli/workstream-router.cjs +39 -0
  97. package/cap/bin/lib/commands.cjs +961 -0
  98. package/cap/bin/lib/config.cjs +467 -0
  99. package/cap/bin/lib/convention-reader.cjs +258 -0
  100. package/cap/bin/lib/core.cjs +1241 -0
  101. package/cap/bin/lib/feature-aggregator.cjs +423 -0
  102. package/cap/bin/lib/frontmatter.cjs +337 -0
  103. package/cap/bin/lib/init.cjs +1443 -0
  104. package/cap/bin/lib/manifest-generator.cjs +383 -0
  105. package/cap/bin/lib/milestone.cjs +253 -0
  106. package/cap/bin/lib/model-profiles.cjs +69 -0
  107. package/cap/bin/lib/monorepo-context.cjs +226 -0
  108. package/cap/bin/lib/monorepo-migrator.cjs +509 -0
  109. package/cap/bin/lib/phase.cjs +889 -0
  110. package/cap/bin/lib/profile-output.cjs +989 -0
  111. package/cap/bin/lib/profile-pipeline.cjs +540 -0
  112. package/cap/bin/lib/roadmap.cjs +330 -0
  113. package/cap/bin/lib/security.cjs +394 -0
  114. package/cap/bin/lib/session-manager.cjs +292 -0
  115. package/cap/bin/lib/skeleton-generator.cjs +179 -0
  116. package/cap/bin/lib/state.cjs +1032 -0
  117. package/cap/bin/lib/template.cjs +231 -0
  118. package/cap/bin/lib/test-detector.cjs +62 -0
  119. package/cap/bin/lib/uat.cjs +283 -0
  120. package/cap/bin/lib/verify.cjs +889 -0
  121. package/cap/bin/lib/workspace-detector.cjs +371 -0
  122. package/cap/bin/lib/workstream.cjs +492 -0
  123. package/cap/commands/gsd/workstreams.md +63 -0
  124. package/cap/references/arc-standard.md +315 -0
  125. package/cap/references/cap-agent-architecture.md +101 -0
  126. package/cap/references/cap-gitignore-template +9 -0
  127. package/cap/references/cap-zero-deps.md +158 -0
  128. package/cap/references/checkpoints.md +778 -0
  129. package/cap/references/continuation-format.md +249 -0
  130. package/cap/references/contract-test-templates.md +312 -0
  131. package/cap/references/feature-map-template.md +25 -0
  132. package/cap/references/git-integration.md +295 -0
  133. package/cap/references/git-planning-commit.md +38 -0
  134. package/cap/references/model-profiles.md +174 -0
  135. package/cap/references/phase-numbering.md +126 -0
  136. package/cap/references/planning-config.md +202 -0
  137. package/cap/references/property-test-templates.md +316 -0
  138. package/cap/references/security-test-templates.md +347 -0
  139. package/cap/references/session-template.json +8 -0
  140. package/cap/references/tdd.md +263 -0
  141. package/cap/references/user-profiling.md +681 -0
  142. package/cap/references/verification-patterns.md +612 -0
  143. package/cap/templates/UAT.md +265 -0
  144. package/cap/templates/claude-md.md +175 -0
  145. package/cap/templates/codebase/architecture.md +255 -0
  146. package/cap/templates/codebase/concerns.md +310 -0
  147. package/cap/templates/codebase/conventions.md +307 -0
  148. package/cap/templates/codebase/integrations.md +280 -0
  149. package/cap/templates/codebase/stack.md +186 -0
  150. package/cap/templates/codebase/structure.md +285 -0
  151. package/cap/templates/codebase/testing.md +480 -0
  152. package/cap/templates/config.json +44 -0
  153. package/cap/templates/context.md +352 -0
  154. package/cap/templates/continue-here.md +78 -0
  155. package/cap/templates/copilot-instructions.md +7 -0
  156. package/cap/templates/debug-subagent-prompt.md +91 -0
  157. package/cap/templates/discussion-log.md +63 -0
  158. package/cap/templates/milestone-archive.md +123 -0
  159. package/cap/templates/milestone.md +115 -0
  160. package/cap/templates/phase-prompt.md +610 -0
  161. package/cap/templates/planner-subagent-prompt.md +117 -0
  162. package/cap/templates/project.md +186 -0
  163. package/cap/templates/requirements.md +231 -0
  164. package/cap/templates/research-project/ARCHITECTURE.md +204 -0
  165. package/cap/templates/research-project/FEATURES.md +147 -0
  166. package/cap/templates/research-project/PITFALLS.md +200 -0
  167. package/cap/templates/research-project/STACK.md +120 -0
  168. package/cap/templates/research-project/SUMMARY.md +170 -0
  169. package/cap/templates/research.md +552 -0
  170. package/cap/templates/roadmap.md +202 -0
  171. package/cap/templates/state.md +176 -0
  172. package/cap/templates/summary.md +364 -0
  173. package/cap/templates/user-preferences.md +498 -0
  174. package/cap/templates/verification-report.md +322 -0
  175. package/cap/workflows/add-phase.md +112 -0
  176. package/cap/workflows/add-tests.md +351 -0
  177. package/cap/workflows/add-todo.md +158 -0
  178. package/cap/workflows/audit-milestone.md +340 -0
  179. package/cap/workflows/audit-uat.md +109 -0
  180. package/cap/workflows/autonomous.md +891 -0
  181. package/cap/workflows/check-todos.md +177 -0
  182. package/cap/workflows/cleanup.md +152 -0
  183. package/cap/workflows/complete-milestone.md +767 -0
  184. package/cap/workflows/diagnose-issues.md +231 -0
  185. package/cap/workflows/discovery-phase.md +289 -0
  186. package/cap/workflows/discuss-phase-assumptions.md +653 -0
  187. package/cap/workflows/discuss-phase.md +1049 -0
  188. package/cap/workflows/do.md +104 -0
  189. package/cap/workflows/execute-phase.md +846 -0
  190. package/cap/workflows/execute-plan.md +514 -0
  191. package/cap/workflows/fast.md +105 -0
  192. package/cap/workflows/forensics.md +265 -0
  193. package/cap/workflows/health.md +181 -0
  194. package/cap/workflows/help.md +660 -0
  195. package/cap/workflows/insert-phase.md +130 -0
  196. package/cap/workflows/list-phase-assumptions.md +178 -0
  197. package/cap/workflows/list-workspaces.md +56 -0
  198. package/cap/workflows/manager.md +362 -0
  199. package/cap/workflows/map-codebase.md +377 -0
  200. package/cap/workflows/milestone-summary.md +223 -0
  201. package/cap/workflows/new-milestone.md +486 -0
  202. package/cap/workflows/new-project.md +1250 -0
  203. package/cap/workflows/new-workspace.md +237 -0
  204. package/cap/workflows/next.md +97 -0
  205. package/cap/workflows/node-repair.md +92 -0
  206. package/cap/workflows/note.md +156 -0
  207. package/cap/workflows/pause-work.md +176 -0
  208. package/cap/workflows/plan-milestone-gaps.md +273 -0
  209. package/cap/workflows/plan-phase.md +857 -0
  210. package/cap/workflows/plant-seed.md +169 -0
  211. package/cap/workflows/pr-branch.md +129 -0
  212. package/cap/workflows/profile-user.md +449 -0
  213. package/cap/workflows/progress.md +507 -0
  214. package/cap/workflows/quick.md +757 -0
  215. package/cap/workflows/remove-phase.md +155 -0
  216. package/cap/workflows/remove-workspace.md +90 -0
  217. package/cap/workflows/research-phase.md +82 -0
  218. package/cap/workflows/resume-project.md +326 -0
  219. package/cap/workflows/review.md +228 -0
  220. package/cap/workflows/session-report.md +146 -0
  221. package/cap/workflows/settings.md +283 -0
  222. package/cap/workflows/ship.md +228 -0
  223. package/cap/workflows/stats.md +60 -0
  224. package/cap/workflows/transition.md +671 -0
  225. package/cap/workflows/ui-phase.md +298 -0
  226. package/cap/workflows/ui-review.md +161 -0
  227. package/cap/workflows/update.md +323 -0
  228. package/cap/workflows/validate-phase.md +170 -0
  229. package/cap/workflows/verify-phase.md +254 -0
  230. package/cap/workflows/verify-work.md +637 -0
  231. package/commands/cap/annotate.md +165 -0
  232. package/commands/cap/brainstorm.md +393 -0
  233. package/commands/cap/checkpoint.md +106 -0
  234. package/commands/cap/completeness.md +94 -0
  235. package/commands/cap/continue.md +72 -0
  236. package/commands/cap/debug.md +588 -0
  237. package/commands/cap/deps.md +169 -0
  238. package/commands/cap/design.md +479 -0
  239. package/commands/cap/init.md +354 -0
  240. package/commands/cap/iterate.md +249 -0
  241. package/commands/cap/learn.md +459 -0
  242. package/commands/cap/memory.md +275 -0
  243. package/commands/cap/migrate-feature-map.md +91 -0
  244. package/commands/cap/migrate-memory.md +108 -0
  245. package/commands/cap/migrate-tags.md +91 -0
  246. package/commands/cap/migrate.md +131 -0
  247. package/commands/cap/prototype.md +510 -0
  248. package/commands/cap/reconcile.md +121 -0
  249. package/commands/cap/review.md +360 -0
  250. package/commands/cap/save.md +72 -0
  251. package/commands/cap/scan.md +404 -0
  252. package/commands/cap/start.md +356 -0
  253. package/commands/cap/status.md +118 -0
  254. package/commands/cap/test-audit.md +262 -0
  255. package/commands/cap/test.md +394 -0
  256. package/commands/cap/trace.md +133 -0
  257. package/commands/cap/ui.md +167 -0
  258. package/hooks/dist/cap-check-update.js +115 -0
  259. package/hooks/dist/cap-context-monitor.js +185 -0
  260. package/hooks/dist/cap-learn-review-hook.js +114 -0
  261. package/hooks/dist/cap-learning-hook.js +192 -0
  262. package/hooks/dist/cap-memory.js +299 -0
  263. package/hooks/dist/cap-prompt-guard.js +97 -0
  264. package/hooks/dist/cap-statusline.js +157 -0
  265. package/hooks/dist/cap-tag-observer.js +115 -0
  266. package/hooks/dist/cap-version-check.js +112 -0
  267. package/hooks/dist/cap-workflow-guard.js +175 -0
  268. package/hooks/hooks.json +55 -0
  269. package/package.json +58 -0
  270. package/scripts/base64-scan.sh +262 -0
  271. package/scripts/build-hooks.js +93 -0
  272. package/scripts/cap-removal-checklist.md +202 -0
  273. package/scripts/prompt-injection-scan.sh +199 -0
  274. package/scripts/run-tests.cjs +181 -0
  275. package/scripts/secret-scan.sh +227 -0
@@ -0,0 +1,49 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * CLI argument-parsing helpers shared across cap-tools router modules.
5
+ *
6
+ * Extracted from cap/bin/cap-tools.cjs as part of the router decomposition.
7
+ * Behavior is byte-identical to the originals — do not refactor signatures
8
+ * without auditing every router that imports them.
9
+ */
10
+
11
+ /**
12
+ * Extract named --flag <value> pairs from an args array.
13
+ * Returns an object mapping flag names to their values (null if absent).
14
+ * Flags listed in `booleanFlags` are treated as boolean (no value consumed).
15
+ *
16
+ * parseNamedArgs(args, 'phase', 'plan') → { phase: '3', plan: '1' }
17
+ * parseNamedArgs(args, [], ['amend', 'force']) → { amend: true, force: false }
18
+ */
19
+ function parseNamedArgs(args, valueFlags = [], booleanFlags = []) {
20
+ const result = {};
21
+ for (const flag of valueFlags) {
22
+ const idx = args.indexOf(`--${flag}`);
23
+ result[flag] = idx !== -1 && args[idx + 1] !== undefined && !args[idx + 1].startsWith('--')
24
+ ? args[idx + 1]
25
+ : null;
26
+ }
27
+ for (const flag of booleanFlags) {
28
+ result[flag] = args.includes(`--${flag}`);
29
+ }
30
+ return result;
31
+ }
32
+
33
+ /**
34
+ * Collect all tokens after --flag until the next --flag or end of args.
35
+ * Handles multi-word values like --name Foo Bar Version 1.
36
+ * Returns null if the flag is absent.
37
+ */
38
+ function parseMultiwordArg(args, flag) {
39
+ const idx = args.indexOf(`--${flag}`);
40
+ if (idx === -1) return null;
41
+ const tokens = [];
42
+ for (let i = idx + 1; i < args.length; i++) {
43
+ if (args[i].startsWith('--')) break;
44
+ tokens.push(args[i]);
45
+ }
46
+ return tokens.length > 0 ? tokens.join(' ') : null;
47
+ }
48
+
49
+ module.exports = { parseNamedArgs, parseMultiwordArg };
@@ -0,0 +1,31 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Frontmatter command router — dispatches `frontmatter <subcommand>` to
5
+ * lib/frontmatter.cjs.
6
+ *
7
+ * Extracted from cap/bin/cap-tools.cjs. Behavior is byte-identical.
8
+ */
9
+
10
+ const frontmatter = require('../frontmatter.cjs');
11
+ const { error } = require('../core.cjs');
12
+ const { parseNamedArgs } = require('./arg-helpers.cjs');
13
+
14
+ function dispatch(args, cwd, raw) {
15
+ const subcommand = args[1];
16
+ const file = args[2];
17
+ if (subcommand === 'get') {
18
+ frontmatter.cmdFrontmatterGet(cwd, file, parseNamedArgs(args, ['field']).field, raw);
19
+ } else if (subcommand === 'set') {
20
+ const { field, value } = parseNamedArgs(args, ['field', 'value']);
21
+ frontmatter.cmdFrontmatterSet(cwd, file, field, value !== null ? value : undefined, raw);
22
+ } else if (subcommand === 'merge') {
23
+ frontmatter.cmdFrontmatterMerge(cwd, file, parseNamedArgs(args, ['data']).data, raw);
24
+ } else if (subcommand === 'validate') {
25
+ frontmatter.cmdFrontmatterValidate(cwd, file, parseNamedArgs(args, ['schema']).schema, raw);
26
+ } else {
27
+ error('Unknown frontmatter subcommand. Available: get, set, merge, validate');
28
+ }
29
+ }
30
+
31
+ module.exports = { dispatch };
@@ -0,0 +1,68 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Init command router — dispatches `init <workflow>` to lib/init.cjs.
5
+ *
6
+ * Extracted from cap/bin/cap-tools.cjs. Behavior is byte-identical.
7
+ */
8
+
9
+ const init = require('../init.cjs');
10
+ const { error } = require('../core.cjs');
11
+
12
+ function dispatch(args, cwd, raw) {
13
+ const workflow = args[1];
14
+ switch (workflow) {
15
+ case 'execute-phase':
16
+ init.cmdInitExecutePhase(cwd, args[2], raw);
17
+ break;
18
+ case 'plan-phase':
19
+ init.cmdInitPlanPhase(cwd, args[2], raw);
20
+ break;
21
+ case 'new-project':
22
+ init.cmdInitNewProject(cwd, raw);
23
+ break;
24
+ case 'new-milestone':
25
+ init.cmdInitNewMilestone(cwd, raw);
26
+ break;
27
+ case 'quick':
28
+ init.cmdInitQuick(cwd, args.slice(2).join(' '), raw);
29
+ break;
30
+ case 'resume':
31
+ init.cmdInitResume(cwd, raw);
32
+ break;
33
+ case 'verify-work':
34
+ init.cmdInitVerifyWork(cwd, args[2], raw);
35
+ break;
36
+ case 'phase-op':
37
+ init.cmdInitPhaseOp(cwd, args[2], raw);
38
+ break;
39
+ case 'todos':
40
+ init.cmdInitTodos(cwd, args[2], raw);
41
+ break;
42
+ case 'milestone-op':
43
+ init.cmdInitMilestoneOp(cwd, raw);
44
+ break;
45
+ case 'map-codebase':
46
+ init.cmdInitMapCodebase(cwd, raw);
47
+ break;
48
+ case 'progress':
49
+ init.cmdInitProgress(cwd, raw);
50
+ break;
51
+ case 'manager':
52
+ init.cmdInitManager(cwd, raw);
53
+ break;
54
+ case 'new-workspace':
55
+ init.cmdInitNewWorkspace(cwd, raw);
56
+ break;
57
+ case 'list-workspaces':
58
+ init.cmdInitListWorkspaces(cwd, raw);
59
+ break;
60
+ case 'remove-workspace':
61
+ init.cmdInitRemoveWorkspace(cwd, args[2], raw);
62
+ break;
63
+ default:
64
+ error(`Unknown init workflow: ${workflow}\nAvailable: execute-phase, plan-phase, new-project, new-milestone, quick, resume, verify-work, phase-op, todos, milestone-op, map-codebase, progress, manager, new-workspace, list-workspaces, remove-workspace`);
65
+ }
66
+ }
67
+
68
+ module.exports = { dispatch };
@@ -0,0 +1,102 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Phase / phases / roadmap / requirements / milestone command routers.
5
+ *
6
+ * Each command group has its own dispatch function. They are bundled in this
7
+ * single module because they all touch phase- or roadmap-level concepts and
8
+ * extracting them as separate files would proliferate tiny modules.
9
+ *
10
+ * Extracted from cap/bin/cap-tools.cjs. Behavior is byte-identical.
11
+ */
12
+
13
+ const phase = require('../phase.cjs');
14
+ const roadmap = require('../roadmap.cjs');
15
+ const milestone = require('../milestone.cjs');
16
+ const { error } = require('../core.cjs');
17
+ const { parseMultiwordArg } = require('./arg-helpers.cjs');
18
+
19
+ function dispatchPhases(args, cwd, raw) {
20
+ const subcommand = args[1];
21
+ if (subcommand === 'list') {
22
+ const typeIndex = args.indexOf('--type');
23
+ const phaseIndex = args.indexOf('--phase');
24
+ const options = {
25
+ type: typeIndex !== -1 ? args[typeIndex + 1] : null,
26
+ phase: phaseIndex !== -1 ? args[phaseIndex + 1] : null,
27
+ includeArchived: args.includes('--include-archived'),
28
+ };
29
+ phase.cmdPhasesList(cwd, options, raw);
30
+ } else {
31
+ error('Unknown phases subcommand. Available: list');
32
+ }
33
+ }
34
+
35
+ function dispatchPhase(args, cwd, raw) {
36
+ const subcommand = args[1];
37
+ if (subcommand === 'next-decimal') {
38
+ phase.cmdPhaseNextDecimal(cwd, args[2], raw);
39
+ } else if (subcommand === 'add') {
40
+ let customId = null;
41
+ const descArgs = [];
42
+ for (let i = 2; i < args.length; i++) {
43
+ if (args[i] === '--id' && i + 1 < args.length) {
44
+ customId = args[i + 1];
45
+ i++; // skip value
46
+ } else {
47
+ descArgs.push(args[i]);
48
+ }
49
+ }
50
+ phase.cmdPhaseAdd(cwd, descArgs.join(' '), raw, customId);
51
+ } else if (subcommand === 'insert') {
52
+ phase.cmdPhaseInsert(cwd, args[2], args.slice(3).join(' '), raw);
53
+ } else if (subcommand === 'remove') {
54
+ const forceFlag = args.includes('--force');
55
+ phase.cmdPhaseRemove(cwd, args[2], { force: forceFlag }, raw);
56
+ } else if (subcommand === 'complete') {
57
+ phase.cmdPhaseComplete(cwd, args[2], raw);
58
+ } else {
59
+ error('Unknown phase subcommand. Available: next-decimal, add, insert, remove, complete');
60
+ }
61
+ }
62
+
63
+ function dispatchRoadmap(args, cwd, raw) {
64
+ const subcommand = args[1];
65
+ if (subcommand === 'get-phase') {
66
+ roadmap.cmdRoadmapGetPhase(cwd, args[2], raw);
67
+ } else if (subcommand === 'analyze') {
68
+ roadmap.cmdRoadmapAnalyze(cwd, raw);
69
+ } else if (subcommand === 'update-plan-progress') {
70
+ roadmap.cmdRoadmapUpdatePlanProgress(cwd, args[2], raw);
71
+ } else {
72
+ error('Unknown roadmap subcommand. Available: get-phase, analyze, update-plan-progress');
73
+ }
74
+ }
75
+
76
+ function dispatchRequirements(args, cwd, raw) {
77
+ const subcommand = args[1];
78
+ if (subcommand === 'mark-complete') {
79
+ milestone.cmdRequirementsMarkComplete(cwd, args.slice(2), raw);
80
+ } else {
81
+ error('Unknown requirements subcommand. Available: mark-complete');
82
+ }
83
+ }
84
+
85
+ function dispatchMilestone(args, cwd, raw) {
86
+ const subcommand = args[1];
87
+ if (subcommand === 'complete') {
88
+ const milestoneName = parseMultiwordArg(args, 'name');
89
+ const archivePhases = args.includes('--archive-phases');
90
+ milestone.cmdMilestoneComplete(cwd, args[2], { name: milestoneName, archivePhases }, raw);
91
+ } else {
92
+ error('Unknown milestone subcommand. Available: complete');
93
+ }
94
+ }
95
+
96
+ module.exports = {
97
+ dispatchPhases,
98
+ dispatchPhase,
99
+ dispatchRoadmap,
100
+ dispatchRequirements,
101
+ dispatchMilestone,
102
+ };
@@ -0,0 +1,61 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * State command router — dispatches `state <subcommand>` to lib/state.cjs.
5
+ *
6
+ * Extracted from cap/bin/cap-tools.cjs. Behavior is byte-identical.
7
+ */
8
+
9
+ const state = require('../state.cjs');
10
+ const { parseNamedArgs } = require('./arg-helpers.cjs');
11
+
12
+ function dispatch(args, cwd, raw) {
13
+ const subcommand = args[1];
14
+ if (subcommand === 'json') {
15
+ state.cmdStateJson(cwd, raw);
16
+ } else if (subcommand === 'update') {
17
+ state.cmdStateUpdate(cwd, args[2], args[3]);
18
+ } else if (subcommand === 'get') {
19
+ state.cmdStateGet(cwd, args[2], raw);
20
+ } else if (subcommand === 'patch') {
21
+ const patches = {};
22
+ for (let i = 2; i < args.length; i += 2) {
23
+ const key = args[i].replace(/^--/, '');
24
+ const value = args[i + 1];
25
+ if (key && value !== undefined) {
26
+ patches[key] = value;
27
+ }
28
+ }
29
+ state.cmdStatePatch(cwd, patches, raw);
30
+ } else if (subcommand === 'advance-plan') {
31
+ state.cmdStateAdvancePlan(cwd, raw);
32
+ } else if (subcommand === 'record-metric') {
33
+ const { phase: p, plan, duration, tasks, files } = parseNamedArgs(args, ['phase', 'plan', 'duration', 'tasks', 'files']);
34
+ state.cmdStateRecordMetric(cwd, { phase: p, plan, duration, tasks, files }, raw);
35
+ } else if (subcommand === 'update-progress') {
36
+ state.cmdStateUpdateProgress(cwd, raw);
37
+ } else if (subcommand === 'add-decision') {
38
+ const { phase: p, summary, 'summary-file': summary_file, rationale, 'rationale-file': rationale_file } = parseNamedArgs(args, ['phase', 'summary', 'summary-file', 'rationale', 'rationale-file']);
39
+ state.cmdStateAddDecision(cwd, { phase: p, summary, summary_file, rationale: rationale || '', rationale_file }, raw);
40
+ } else if (subcommand === 'add-blocker') {
41
+ const { text, 'text-file': text_file } = parseNamedArgs(args, ['text', 'text-file']);
42
+ state.cmdStateAddBlocker(cwd, { text, text_file }, raw);
43
+ } else if (subcommand === 'resolve-blocker') {
44
+ state.cmdStateResolveBlocker(cwd, parseNamedArgs(args, ['text']).text, raw);
45
+ } else if (subcommand === 'record-session') {
46
+ const { 'stopped-at': stopped_at, 'resume-file': resume_file } = parseNamedArgs(args, ['stopped-at', 'resume-file']);
47
+ state.cmdStateRecordSession(cwd, { stopped_at, resume_file: resume_file || 'None' }, raw);
48
+ } else if (subcommand === 'begin-phase') {
49
+ const { phase: p, name, plans } = parseNamedArgs(args, ['phase', 'name', 'plans']);
50
+ state.cmdStateBeginPhase(cwd, p, name, plans !== null ? parseInt(plans, 10) : null, raw);
51
+ } else if (subcommand === 'signal-waiting') {
52
+ const { type, question, options, phase: p } = parseNamedArgs(args, ['type', 'question', 'options', 'phase']);
53
+ state.cmdSignalWaiting(cwd, type, question, options, p, raw);
54
+ } else if (subcommand === 'signal-resume') {
55
+ state.cmdSignalResume(cwd, raw);
56
+ } else {
57
+ state.cmdStateLoad(cwd, raw);
58
+ }
59
+ }
60
+
61
+ module.exports = { dispatch };
@@ -0,0 +1,37 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Template command router — dispatches `template <subcommand>` to lib/template.cjs.
5
+ *
6
+ * Extracted from cap/bin/cap-tools.cjs. Behavior is byte-identical.
7
+ */
8
+
9
+ const template = require('../template.cjs');
10
+ const { error } = require('../core.cjs');
11
+ const { parseNamedArgs } = require('./arg-helpers.cjs');
12
+
13
+ function dispatch(args, cwd, raw) {
14
+ const subcommand = args[1];
15
+ if (subcommand === 'select') {
16
+ template.cmdTemplateSelect(cwd, args[2], raw);
17
+ } else if (subcommand === 'fill') {
18
+ const templateType = args[2];
19
+ const { phase, plan, name, type, wave, fields: fieldsRaw } = parseNamedArgs(args, ['phase', 'plan', 'name', 'type', 'wave', 'fields']);
20
+ let fields = {};
21
+ if (fieldsRaw) {
22
+ const { safeJsonParse } = require('../security.cjs');
23
+ const result = safeJsonParse(fieldsRaw, { label: '--fields' });
24
+ if (!result.ok) error(result.error);
25
+ fields = result.value;
26
+ }
27
+ template.cmdTemplateFill(cwd, templateType, {
28
+ phase, plan, name, fields,
29
+ type: type || 'execute',
30
+ wave: wave || '1',
31
+ }, raw);
32
+ } else {
33
+ error('Unknown template subcommand. Available: select, fill');
34
+ }
35
+ }
36
+
37
+ module.exports = { dispatch };
@@ -0,0 +1,29 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * UAT command router — dispatches `uat <subcommand>` and the standalone
5
+ * `audit-uat` command to lib/uat.cjs.
6
+ *
7
+ * Extracted from cap/bin/cap-tools.cjs. Behavior is byte-identical.
8
+ */
9
+
10
+ const { error } = require('../core.cjs');
11
+ const { parseNamedArgs } = require('./arg-helpers.cjs');
12
+
13
+ function dispatchAuditUat(args, cwd, raw) {
14
+ const uat = require('../uat.cjs');
15
+ uat.cmdAuditUat(cwd, raw);
16
+ }
17
+
18
+ function dispatchUat(args, cwd, raw) {
19
+ const subcommand = args[1];
20
+ const uat = require('../uat.cjs');
21
+ if (subcommand === 'render-checkpoint') {
22
+ const options = parseNamedArgs(args, ['file']);
23
+ uat.cmdRenderCheckpoint(cwd, options, raw);
24
+ } else {
25
+ error('Unknown uat subcommand. Available: render-checkpoint');
26
+ }
27
+ }
28
+
29
+ module.exports = { dispatchAuditUat, dispatchUat };
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Validation command router — dispatches `validate <subcommand>` to lib/verify.cjs.
5
+ *
6
+ * Extracted from cap/bin/cap-tools.cjs. Behavior is byte-identical.
7
+ */
8
+
9
+ const verify = require('../verify.cjs');
10
+ const { error } = require('../core.cjs');
11
+
12
+ function dispatch(args, cwd, raw) {
13
+ const subcommand = args[1];
14
+ if (subcommand === 'consistency') {
15
+ verify.cmdValidateConsistency(cwd, raw);
16
+ } else if (subcommand === 'health') {
17
+ const repairFlag = args.includes('--repair');
18
+ verify.cmdValidateHealth(cwd, { repair: repairFlag }, raw);
19
+ } else if (subcommand === 'agents') {
20
+ verify.cmdValidateAgents(cwd, raw);
21
+ } else {
22
+ error('Unknown validate subcommand. Available: consistency, health, agents');
23
+ }
24
+ }
25
+
26
+ module.exports = { dispatch };
@@ -0,0 +1,31 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Verification command router — dispatches `verify <subcommand>` to lib/verify.cjs.
5
+ *
6
+ * Extracted from cap/bin/cap-tools.cjs. Behavior is byte-identical.
7
+ */
8
+
9
+ const verify = require('../verify.cjs');
10
+ const { error } = require('../core.cjs');
11
+
12
+ function dispatch(args, cwd, raw) {
13
+ const subcommand = args[1];
14
+ if (subcommand === 'plan-structure') {
15
+ verify.cmdVerifyPlanStructure(cwd, args[2], raw);
16
+ } else if (subcommand === 'phase-completeness') {
17
+ verify.cmdVerifyPhaseCompleteness(cwd, args[2], raw);
18
+ } else if (subcommand === 'references') {
19
+ verify.cmdVerifyReferences(cwd, args[2], raw);
20
+ } else if (subcommand === 'commits') {
21
+ verify.cmdVerifyCommits(cwd, args.slice(2), raw);
22
+ } else if (subcommand === 'artifacts') {
23
+ verify.cmdVerifyArtifacts(cwd, args[2], raw);
24
+ } else if (subcommand === 'key-links') {
25
+ verify.cmdVerifyKeyLinks(cwd, args[2], raw);
26
+ } else {
27
+ error('Unknown verify subcommand. Available: plan-structure, phase-completeness, references, commits, artifacts, key-links');
28
+ }
29
+ }
30
+
31
+ module.exports = { dispatch };
@@ -0,0 +1,39 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Workstream command router — dispatches `workstream <subcommand>` to
5
+ * lib/workstream.cjs.
6
+ *
7
+ * Extracted from cap/bin/cap-tools.cjs. Behavior is byte-identical.
8
+ */
9
+
10
+ const workstream = require('../workstream.cjs');
11
+ const { error } = require('../core.cjs');
12
+
13
+ function dispatch(args, cwd, raw) {
14
+ const subcommand = args[1];
15
+ if (subcommand === 'create') {
16
+ const migrateNameIdx = args.indexOf('--migrate-name');
17
+ const noMigrate = args.includes('--no-migrate');
18
+ workstream.cmdWorkstreamCreate(cwd, args[2], {
19
+ migrate: !noMigrate,
20
+ migrateName: migrateNameIdx !== -1 ? args[migrateNameIdx + 1] : null,
21
+ }, raw);
22
+ } else if (subcommand === 'list') {
23
+ workstream.cmdWorkstreamList(cwd, raw);
24
+ } else if (subcommand === 'status') {
25
+ workstream.cmdWorkstreamStatus(cwd, args[2], raw);
26
+ } else if (subcommand === 'complete') {
27
+ workstream.cmdWorkstreamComplete(cwd, args[2], {}, raw);
28
+ } else if (subcommand === 'set') {
29
+ workstream.cmdWorkstreamSet(cwd, args[2], raw);
30
+ } else if (subcommand === 'get') {
31
+ workstream.cmdWorkstreamGet(cwd, raw);
32
+ } else if (subcommand === 'progress') {
33
+ workstream.cmdWorkstreamProgress(cwd, raw);
34
+ } else {
35
+ error('Unknown workstream subcommand. Available: create, list, status, complete, set, get, progress');
36
+ }
37
+ }
38
+
39
+ module.exports = { dispatch };