claude-flow-novice 2.5.2 → 2.8.1

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 (370) hide show
  1. package/.claude/adaptive-context/cfn-v3-reflection.json +21 -0
  2. package/.claude/agents/AGENT_LIFECYCLE.md +495 -0
  3. package/.claude/agents/CLAUDE.md +1002 -1233
  4. package/.claude/agents/accessibility-advocate.md +457 -0
  5. package/.claude/agents/agent-principles/README.md +226 -226
  6. package/.claude/agents/agent-principles/agent-type-guidelines.md +10 -0
  7. package/.claude/agents/agent-principles/format-selection.md +10 -0
  8. package/.claude/agents/agent-principles/phase4-template-optimization.md +502 -494
  9. package/.claude/agents/agent-principles/prompt-engineering.md +8 -0
  10. package/.claude/agents/agent-principles/quality-metrics.md +8 -0
  11. package/.claude/agents/analysis/code-analyzer.md +7 -17
  12. package/.claude/agents/analysis/code-review/analyze-code-quality.md +2 -104
  13. package/.claude/agents/analysis/perf-analyzer.md +2 -196
  14. package/.claude/agents/context/context-curator.md +78 -84
  15. package/.claude/agents/context/context-reflector.md +27 -81
  16. package/.claude/agents/coordinators/README.md +42 -0
  17. package/.claude/agents/coordinators/cfn-v3-coordinator.md +440 -0
  18. package/.claude/agents/{product-owner-team → coordinators}/cto-agent.md +154 -187
  19. package/.claude/agents/coordinators/multi-sprint-coordinator.md +50 -0
  20. package/.claude/agents/{product-owner-team → coordinators}/product-owner-agent.md +6 -39
  21. package/.claude/agents/{cfn-loop → coordinators}/product-owner.md +72 -17
  22. package/.claude/agents/core-agents/reviewer.md +114 -135
  23. package/.claude/agents/custom/agent-builder.md +637 -0
  24. package/.claude/agents/developers/README.md +69 -0
  25. package/.claude/agents/developers/backend-dev.md +77 -0
  26. package/.claude/agents/{core-agents → developers}/coder.md +131 -26
  27. package/.claude/agents/developers/react-frontend-engineer.md +121 -0
  28. package/.claude/agents/{frontend → developers}/state-architect.md +1 -0
  29. package/.claude/agents/{frontend → developers}/ui-designer.md +1 -0
  30. package/.claude/agents/development/backend/dev-backend-api.md +0 -29
  31. package/.claude/agents/development/npm-package-specialist.md +355 -347
  32. package/.claude/agents/documentation/api-docs/docs-api-openapi.md +8 -0
  33. package/.claude/agents/documentation/api-docs.md +8 -0
  34. package/.claude/agents/github/github-commit-agent.md +125 -117
  35. package/.claude/agents/goal/goal-planner.md +8 -0
  36. package/.claude/agents/infrastructure/README.md +100 -0
  37. package/.claude/agents/{specialized → infrastructure}/devops-engineer.md +131 -150
  38. package/.claude/agents/planners/README.md +94 -0
  39. package/.claude/agents/{core-agents → planners}/analyst.md +1 -22
  40. package/.claude/agents/{planning-team → planners}/api-designer-persona.md +8 -0
  41. package/.claude/agents/{core-agents → planners}/architect.md +7 -20
  42. package/.claude/agents/{core-agents → planners}/planner.md +0 -21
  43. package/.claude/agents/{planning-team → planners}/security-architect-persona.md +8 -28
  44. package/.claude/agents/{planning-team → planners}/system-architect-persona.md +6 -38
  45. package/.claude/agents/{architecture → planners}/system-architect.md +12 -17
  46. package/.claude/agents/product-owner-team/accessibility-advocate-persona.md +132 -161
  47. package/.claude/agents/product-owner-team/power-user-persona.md +149 -182
  48. package/.claude/agents/retrospective-analyst.md +84 -0
  49. package/.claude/agents/reviewers/README.md +58 -0
  50. package/.claude/agents/{analysis → reviewers}/code-quality-validator.md +8 -17
  51. package/.claude/agents/reviewers/reviewer.md +181 -0
  52. package/.claude/agents/sparc/architecture.md +6 -25
  53. package/.claude/agents/sparc/pseudocode.md +6 -0
  54. package/.claude/agents/sparc/refinement.md +6 -0
  55. package/.claude/agents/sparc/specification.md +1 -0
  56. package/.claude/agents/specialists/README.md +60 -0
  57. package/.claude/agents/{core-agents → specialists}/base-template-generator.md +8 -21
  58. package/.claude/agents/{specialized → specialists}/cli-agent-optimizer.md +1 -1
  59. package/.claude/agents/{specialized → specialists}/code-booster.md +1 -0
  60. package/.claude/agents/{consensus → specialists}/consensus-builder.md +1 -17
  61. package/.claude/agents/{specialized/mobile → specialists}/mobile-dev.md +0 -20
  62. package/.claude/agents/{core-agents → specialists}/performance-benchmarker.md +134 -148
  63. package/.claude/agents/{specialized → specialists}/rust-developer.md +1 -20
  64. package/.claude/agents/{specialized → specialists}/rust-enterprise-developer.md +1 -20
  65. package/.claude/agents/{specialized → specialists}/rust-mvp-developer.md +1 -20
  66. package/.claude/agents/{core-agents → specialists}/security-manager.md +68 -88
  67. package/.claude/agents/{security → specialists}/security-specialist-existing.md +6 -57
  68. package/.claude/agents/{security → specialists}/security-specialist.md +6 -30
  69. package/.claude/agents/{specialized/mobile → specialists}/spec-mobile-react-native.md +2 -21
  70. package/.claude/agents/testers/README.md +94 -0
  71. package/.claude/agents/{testing → testers}/e2e/playwright-agent.md +1 -20
  72. package/.claude/agents/{testing → testers}/interaction-tester.md +1 -20
  73. package/.claude/agents/{testing → testers}/playwright-tester.md +1 -1
  74. package/.claude/agents/testers/tester.md +139 -0
  75. package/.claude/agents/testers/unit/tdd-london-swarm.md +49 -0
  76. package/.claude/agents/testers/validation/production-validator.md +33 -0
  77. package/.claude/agents-ignore/cfn-loop-coordinator.md +157 -0
  78. package/.claude/agents-ignore/cfn-loop-coordinator.md.backup +156 -0
  79. package/.claude/agents-ignore/coordinator.md.backup +182 -0
  80. package/.claude/agents-ignore/cost-savings-cfn-loop-coordinator.md +760 -0
  81. package/.claude/agents-ignore/cost-savings-coordinator.md +173 -0
  82. package/.claude/artifacts/ace-reflections/REFLECT-001-summary.json +39 -0
  83. package/.claude/artifacts/ace-reflections/sprint-7_$(date -u +/"%Y%m%d_%H%M%S/").json" +47 -0
  84. package/.claude/artifacts/reflection-merge-logs/cli-agent-spawning-v2.5.2-merge-report.md +61 -0
  85. package/.claude/commands/CFN_COORDINATOR_PARAMETERS.md +10 -10
  86. package/.claude/commands/cfn-loop-epic.md +43 -19
  87. package/.claude/commands/cfn-loop-single.md +3 -3
  88. package/.claude/commands/cfn-loop-sprints.md +1 -1
  89. package/.claude/commands/cfn-loop.md +45 -32
  90. package/.claude/commands/cfn-mode.md +20 -0
  91. package/.claude/commands/custom-routing-activate.md +37 -123
  92. package/.claude/commands/custom-routing-deactivate.md +27 -124
  93. package/.claude/commands/switch-api.md +41 -16
  94. package/.claude/commands/write-plan.md +104 -0
  95. package/.claude/data/cfn-loop.db +0 -0
  96. package/.claude/data/cfn_loop_logs.db +0 -0
  97. package/.claude/hooks/BACKUP_USAGE.md +243 -0
  98. package/.claude/hooks/post-edit-cfn-retrospective.sh +79 -0
  99. package/.claude/hooks/post-edit.sh +21 -0
  100. package/.claude/hooks/pre-edit-backup.sh +71 -0
  101. package/.claude/hooks/restore-from-backup.sh +37 -0
  102. package/.claude/prompts/cfn-loop-context.md +115 -0
  103. package/.claude/prompts/loop-specific/loop2.md +50 -0
  104. package/.claude/prompts/loop-specific/loop3.md +43 -0
  105. package/.claude/prompts/loop-specific/loop4.md +54 -0
  106. package/.claude/root-claude-distribute/CLAUDE.md +76 -2
  107. package/.claude/skills/ace-system/sprint-7-lessons.json +46 -0
  108. package/.claude/skills/ace-system/store-reflection.sh +33 -136
  109. package/.claude/skills/agent-discovery/SKILL.md +40 -0
  110. package/.claude/skills/agent-discovery/agents-registry-clean.json +0 -0
  111. package/.claude/skills/agent-discovery/agents-registry-fixed.json +19 -0
  112. package/.claude/skills/agent-discovery/agents-registry.json +718 -0
  113. package/.claude/skills/agent-discovery/discover-agents.py +175 -0
  114. package/.claude/skills/agent-discovery/discover-agents.sh +87 -0
  115. package/.claude/skills/agent-discovery/invoke-registry.sh +11 -0
  116. package/.claude/skills/agent-discovery/temp_script.py +0 -0
  117. package/.claude/skills/agent-execution/execute-agent.sh +126 -0
  118. package/.claude/skills/agent-output-processing/SKILL.md +359 -0
  119. package/.claude/skills/agent-selector/SKILL.md +90 -0
  120. package/.claude/skills/agent-selector/select-agents.sh +96 -0
  121. package/.claude/skills/agent-spawning/agent-selection-guide.md +1 -1
  122. package/.claude/skills/agent-swap/SKILL.md +36 -0
  123. package/.claude/skills/agent-swap/recommend-swap.sh +60 -0
  124. package/.claude/skills/api-validation/test-endpoints.sh +54 -0
  125. package/.claude/skills/automatic-memory-persistence/SKILL.md +73 -0
  126. package/.claude/skills/automatic-memory-persistence/persist-agent-output.sh +49 -0
  127. package/.claude/skills/automatic-memory-persistence/query-agent-history.sh +35 -0
  128. package/.claude/skills/automatic-memory-persistence/test-memory-persistence.sh +235 -0
  129. package/.claude/skills/cfn-loop-orchestration/README.md +41 -0
  130. package/.claude/skills/cfn-loop-orchestration/SKILL.md +299 -0
  131. package/.claude/skills/cfn-loop-orchestration/helpers/auto-tune-timeouts.sh +228 -0
  132. package/.claude/skills/cfn-loop-orchestration/helpers/consensus.sh +84 -0
  133. package/.claude/skills/cfn-loop-orchestration/helpers/deliverable-verifier.sh +71 -0
  134. package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +90 -0
  135. package/.claude/skills/cfn-loop-orchestration/helpers/iteration-manager.sh +87 -0
  136. package/.claude/skills/cfn-loop-orchestration/helpers/timeout-calculator.sh +51 -0
  137. package/.claude/skills/cfn-loop-orchestration/inject-loop-context.sh +41 -0
  138. package/.claude/skills/cfn-loop-orchestration/monitor-execution.sh +156 -0
  139. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +840 -0
  140. package/.claude/skills/cfn-loop-orchestration/security_utils.sh +99 -0
  141. package/.claude/skills/cfn-loop-orchestration/test-cfn-orchestration.sh +281 -0
  142. package/.claude/skills/cfn-loop-orchestration/test-edge-cases.sh +188 -0
  143. package/.claude/skills/cfn-loop-validation/SKILL.md +307 -217
  144. package/.claude/skills/complexity-estimator/SKILL.md +96 -0
  145. package/.claude/skills/complexity-estimator/estimate-complexity.sh +144 -0
  146. package/.claude/skills/context-pruner/SKILL.md +75 -0
  147. package/.claude/skills/context-pruner/prune-context.sh +73 -0
  148. package/.claude/skills/defense-in-depth/SKILL.md +133 -0
  149. package/.claude/skills/dependency-extractor/SKILL.md +35 -0
  150. package/.claude/skills/dependency-extractor/extract-dependencies.sh +66 -0
  151. package/.claude/skills/epic-decomposer/SKILL.md +44 -0
  152. package/.claude/skills/epic-decomposer/decompose-epic.sh +104 -0
  153. package/.claude/skills/improvement-recommender/SKILL.md +33 -0
  154. package/.claude/skills/improvement-recommender/recommend-improvements.sh +92 -0
  155. package/.claude/skills/intervention-detector/SKILL.md +39 -0
  156. package/.claude/skills/intervention-detector/detect-intervention.sh +111 -0
  157. package/.claude/skills/intervention-orchestrator/SKILL.md +43 -0
  158. package/.claude/skills/intervention-orchestrator/execute-intervention.sh +59 -0
  159. package/.claude/skills/loop2-output-processing/SKILL.md +163 -0
  160. package/.claude/skills/loop2-output-processing/execute-and-extract.sh +77 -0
  161. package/.claude/skills/loop2-output-processing/execute-and-extract.sh.backup +36 -0
  162. package/.claude/skills/loop2-output-processing/parse-feedback.sh +147 -0
  163. package/.claude/skills/loop2-output-processing/process-validator-output.sh +275 -0
  164. package/.claude/skills/loop2-output-processing/test-bug27-fix.sh +200 -0
  165. package/.claude/skills/loop2-output-processing/test-loop2-processing.sh +113 -0
  166. package/.claude/skills/loop3-output-processing/AGENT_COMPLETION_PROTOCOL.md +206 -0
  167. package/.claude/skills/loop3-output-processing/SKILL.md +421 -0
  168. package/.claude/skills/loop3-output-processing/calculate-confidence.sh +28 -0
  169. package/.claude/skills/loop3-output-processing/execute-and-extract.sh +85 -0
  170. package/.claude/skills/loop3-output-processing/parse-confidence.sh +31 -0
  171. package/.claude/skills/loop3-output-processing/test-agent-timeout.sh +327 -0
  172. package/.claude/skills/loop3-output-processing/test-loop3-processing.sh +155 -0
  173. package/.claude/skills/loop3-output-processing/verify-deliverables.sh +42 -0
  174. package/.claude/skills/pattern-extraction/SKILL.md +30 -0
  175. package/.claude/skills/pattern-extraction/extract-patterns.sh +80 -0
  176. package/.claude/skills/playbook/SKILL.md +113 -0
  177. package/.claude/skills/playbook/init-playbook.sh +54 -0
  178. package/.claude/skills/playbook/playbook.db +0 -0
  179. package/.claude/skills/playbook/query-playbook.sh +79 -0
  180. package/.claude/skills/playbook/update-playbook.sh +69 -0
  181. package/.claude/skills/playbook-auto-update/SKILL.md +29 -0
  182. package/.claude/skills/playbook-auto-update/auto-update-playbook.sh +86 -0
  183. package/.claude/skills/product-owner-decision/SKILL.md +332 -0
  184. package/.claude/skills/product-owner-decision/execute-decision.sh +176 -0
  185. package/.claude/skills/product-owner-decision/parse-decision.sh +66 -0
  186. package/.claude/skills/product-owner-decision/validate-deliverables.sh +82 -0
  187. package/.claude/skills/redis-coordination/AGENT_LOGGING.md +280 -0
  188. package/.claude/skills/redis-coordination/LOGGING.md +260 -0
  189. package/.claude/skills/redis-coordination/README.md +30 -29
  190. package/.claude/skills/redis-coordination/SKILL.md +685 -83
  191. package/.claude/skills/redis-coordination/agent-log.sh +124 -0
  192. package/.claude/skills/redis-coordination/analyze-task-complexity.sh +277 -0
  193. package/.claude/skills/redis-coordination/cfn-loop-exec.sh +468 -0
  194. package/.claude/skills/redis-coordination/collect-confidence-scores.sh +179 -0
  195. package/.claude/skills/redis-coordination/collect-results.sh +75 -0
  196. package/.claude/skills/redis-coordination/data/cfn-loop.db +0 -0
  197. package/.claude/skills/redis-coordination/demos/test-iteration-feedback.sh +320 -0
  198. package/.claude/skills/redis-coordination/{test-orchestrator.sh → demos/test-orchestrator.sh} +25 -0
  199. package/.claude/skills/redis-coordination/execute-product-owner-decision.sh +258 -0
  200. package/.claude/skills/redis-coordination/get-agent-timeout.sh +176 -176
  201. package/.claude/skills/redis-coordination/init-swarm.sh +6 -1
  202. package/.claude/skills/redis-coordination/invoke-waiting-mode.sh +106 -183
  203. package/.claude/skills/redis-coordination/invoke-waiting-mode.sh.backup-p7 +423 -0
  204. package/.claude/skills/redis-coordination/log-event.sh +109 -0
  205. package/.claude/skills/redis-coordination/monitor-cfn-violations.sh +391 -0
  206. package/.claude/skills/redis-coordination/orchestrate-cfn-loop-v3.sh +141 -0
  207. package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh +31 -933
  208. package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup +38 -0
  209. package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup-1761167675 +1672 -0
  210. package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup-p5 +1604 -0
  211. package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup-phase1 +1550 -0
  212. package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup-phase2 +1621 -0
  213. package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup-phase3 +1621 -0
  214. package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.bak +0 -0
  215. package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.broken +1627 -0
  216. package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.corrupted +80 -0
  217. package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.deprecated +1864 -0
  218. package/.claude/skills/redis-coordination/query-logs.sh +103 -0
  219. package/.claude/skills/redis-coordination/retrieve-context.sh +58 -0
  220. package/.claude/skills/redis-coordination/select-specialist-agent.sh +371 -0
  221. package/.claude/skills/redis-coordination/semantic-match-tfidf.py +252 -0
  222. package/.claude/skills/redis-coordination/send-heartbeat.sh +164 -72
  223. package/.claude/skills/redis-coordination/signal.sh +38 -0
  224. package/.claude/skills/redis-coordination/store-context.sh +86 -0
  225. package/.claude/skills/redis-coordination/store-epic-context.sh +123 -0
  226. package/.claude/skills/redis-coordination/test-context-injection.sh +354 -0
  227. package/.claude/skills/redis-coordination/test-timeout-enforcement.sh +513 -0
  228. package/.claude/skills/redis-coordination/tests/convert-line-endings.sh +15 -0
  229. package/.claude/skills/redis-coordination/tests/dlq-functionality-test.sh +101 -101
  230. package/.claude/skills/redis-coordination/tests/edge-cases-test.sh +98 -98
  231. package/.claude/skills/redis-coordination/tests/integration-test.sh +169 -169
  232. package/.claude/skills/redis-coordination/tests/retry-mechanism-test.sh +81 -81
  233. package/.claude/skills/redis-coordination/tests/run-test-suite.sh +91 -91
  234. package/.claude/skills/redis-coordination/tests/run-tests.sh +4 -0
  235. package/.claude/skills/redis-coordination/tests/test-primitives.sh +166 -0
  236. package/.claude/skills/redis-coordination/tests/test-utils.sh +53 -121
  237. package/.claude/skills/redis-coordination/tests/test_coordination_primitives.sh.deprecated +20 -0
  238. package/.claude/skills/redis-coordination/tests/test_utils.sh +49 -0
  239. package/.claude/skills/redis-coordination/v2_modularization/core_orchestration.sh +76 -0
  240. package/.claude/skills/redis-coordination/validate-parameters.sh +492 -0
  241. package/.claude/skills/retrospective-report/SKILL.md +31 -0
  242. package/.claude/skills/retrospective-report/generate-report.sh +101 -0
  243. package/.claude/skills/run-all-skill-tests.sh +124 -0
  244. package/.claude/skills/scope-simplifier/SKILL.md +37 -0
  245. package/.claude/skills/scope-simplifier/simplify-scope.sh +68 -0
  246. package/.claude/skills/simplified-agent-lifecycle/COST_ANALYSIS.md +49 -0
  247. package/.claude/skills/simplified-agent-lifecycle/DESIGN.md +98 -0
  248. package/.claude/skills/simplified-agent-lifecycle/MIGRATION_PLAN.md +74 -0
  249. package/.claude/skills/skill-builder/SKILL.md +910 -0
  250. package/.claude/skills/specialist-injection/SKILL.md +41 -0
  251. package/.claude/skills/specialist-injection/recommend-specialist.sh +57 -0
  252. package/.claude/skills/sprint-execution/SKILL.md +27 -0
  253. package/.claude/skills/sprint-execution/execute-sprint-task.sh +59 -0
  254. package/.claude/skills/sprint-execution/execute-sprint.sh +65 -0
  255. package/.claude/skills/sprint-planner/SKILL.md +37 -0
  256. package/.claude/skills/sprint-planner/plan-sprint.sh +85 -0
  257. package/.claude/skills/standardized-error-handling/SKILL.md +56 -0
  258. package/.claude/skills/standardized-error-handling/capture-agent-error.sh +87 -0
  259. package/.claude/skills/standardized-error-handling/test-error-handling.sh +166 -0
  260. package/.claude/skills/task-classifier/SKILL.md +94 -0
  261. package/.claude/skills/task-classifier/classify-task.sh +115 -0
  262. package/.claude/skills/validation-templates/SKILL.md +47 -0
  263. package/.claude/skills/validation-templates/content.json +38 -0
  264. package/.claude/skills/validation-templates/data.json +38 -0
  265. package/.claude/skills/validation-templates/design.json +38 -0
  266. package/.claude/skills/validation-templates/infrastructure.json +38 -0
  267. package/.claude/skills/validation-templates/research.json +38 -0
  268. package/.claude/skills/validation-templates/software.json +38 -0
  269. package/.claude/skills/webapp-testing/README.md +142 -0
  270. package/.claude/skills/webapp-testing/SCREENSHOT_NAMING_CONVENTION.md +547 -0
  271. package/.claude/skills/webapp-testing/SKILL.md +877 -0
  272. package/.claude/skills/webapp-testing/capture-screenshot.sh +238 -0
  273. package/.claude/skills/webapp-testing/cfn-loop-integration.sh +265 -0
  274. package/.claude/skills/webapp-testing/compare-screenshots.sh +199 -0
  275. package/.claude/skills/webapp-testing/init-storage.sh +150 -0
  276. package/.claude/skills/webapp-testing/set-baseline.sh +196 -0
  277. package/.claude/skills/webapp-testing/test-webapp-testing.sh +233 -0
  278. package/.claude/spawn-pattern-examples.md +3 -3
  279. package/CLAUDE.md +364 -16
  280. package/README.md +598 -251
  281. package/dist/agents/agent-loader.js +146 -165
  282. package/dist/agents/agent-loader.js.map +1 -1
  283. package/dist/cli/agent-command.js +153 -0
  284. package/dist/cli/agent-command.js.map +1 -0
  285. package/dist/cli/agent-definition-parser.js +183 -0
  286. package/dist/cli/agent-definition-parser.js.map +1 -0
  287. package/dist/cli/agent-executor.js +310 -0
  288. package/dist/cli/agent-executor.js.map +1 -0
  289. package/dist/cli/agent-prompt-builder.js +268 -0
  290. package/dist/cli/agent-prompt-builder.js.map +1 -0
  291. package/dist/cli/agent-spawn.js +56 -2
  292. package/dist/cli/agent-spawn.js.map +1 -1
  293. package/dist/cli/anthropic-client.js +421 -0
  294. package/dist/cli/anthropic-client.js.map +1 -0
  295. package/dist/cli/cfn-context.js +150 -0
  296. package/dist/cli/cfn-context.js.map +1 -1
  297. package/dist/cli/cfn-fork.js +159 -0
  298. package/dist/cli/cfn-fork.js.map +1 -0
  299. package/dist/cli/cli-agent-context.js +358 -0
  300. package/dist/cli/cli-agent-context.js.map +1 -0
  301. package/dist/cli/config-manager.js +109 -91
  302. package/dist/cli/config-manager.js.map +1 -1
  303. package/dist/cli/conversation-fork.js +201 -0
  304. package/dist/cli/conversation-fork.js.map +1 -0
  305. package/dist/cli/index.js +119 -2
  306. package/dist/cli/index.js.map +1 -1
  307. package/dist/cli/iteration-history.js +188 -0
  308. package/dist/cli/iteration-history.js.map +1 -0
  309. package/dist/cli/tool-definitions.js +263 -0
  310. package/dist/cli/tool-definitions.js.map +1 -0
  311. package/dist/cli/tool-executor.js +247 -0
  312. package/dist/cli/tool-executor.js.map +1 -0
  313. package/dist/hello.js +8 -0
  314. package/dist/hello.js.map +1 -0
  315. package/package.json +16 -6
  316. package/scripts/README.md +68 -0
  317. package/scripts/cfn-intervention-example.sh +21 -0
  318. package/scripts/migrate-test-infrastructure.sh +40 -0
  319. package/scripts/switch-api.sh +233 -0
  320. package/scripts/validate-test-migration.sh +49 -0
  321. package/scripts/verify-no-secrets.sh +55 -0
  322. package/.claude/agents/architecture/system-architect.md.backup +0 -603
  323. package/.claude/agents/code-booster.md +0 -131
  324. package/.claude/agents/consensus/performance-benchmarker.md +0 -101
  325. package/.claude/agents/consensus/security-manager.md +0 -107
  326. package/.claude/agents/context-curator.md +0 -167
  327. package/.claude/agents/context-reflector.md +0 -65
  328. package/.claude/agents/core-agents/cfn-loop-coordinator.md +0 -134
  329. package/.claude/agents/core-agents/code-quality-validator.md +0 -149
  330. package/.claude/agents/core-agents/context-curator.md +0 -452
  331. package/.claude/agents/core-agents/context-reflector.md +0 -273
  332. package/.claude/agents/core-agents/cost-savings-cfn-loop-coordinator.md +0 -190
  333. package/.claude/agents/core-agents/tester.md +0 -170
  334. package/.claude/agents/development/backend-dev.md +0 -165
  335. package/.claude/agents/devops/devops-engineer.md +0 -148
  336. package/.claude/agents/frontend/interaction-tester.md +0 -139
  337. package/.claude/agents/frontend/react-frontend-engineer.md +0 -9
  338. package/.claude/agents/personas/accessibility-advocate-persona.md +0 -107
  339. package/.claude/agents/testing/production-validator.md +0 -179
  340. package/.claude/agents/testing/tdd-london-swarm.md +0 -209
  341. package/.claude/agents/testing/unit/tdd-london-swarm.md +0 -43
  342. package/.claude/agents/testing/validation/production-validator.md +0 -43
  343. package/dist/coordination/fleet-manager.test.js +0 -141
  344. package/dist/coordination/fleet-manager.test.js.map +0 -1
  345. package/dist/middleware/transparency-middleware.test.js +0 -184
  346. package/dist/middleware/transparency-middleware.test.js.map +0 -1
  347. /package/.claude/agents/{core-agents → developers}/researcher.md +0 -0
  348. /package/.claude/agents/{consensus → specialists}/crdt-synchronizer.md +0 -0
  349. /package/.claude/agents/{consensus → specialists}/quorum-manager.md +0 -0
  350. /package/.claude/agents/{consensus → specialists}/raft-manager.md +0 -0
  351. /package/.claude/{agents/core-agents → agents-ignore}/coordinator.md +0 -0
  352. /package/.claude/{agents/core-agents/cost-savings-coordinator.md → agents-ignore/cost-savings-coordinator.md.backup} +0 -0
  353. /package/.claude/skills/redis-coordination/{phase4-wake-queue-test-report.md → demos/phase4-wake-queue-test-report.md} +0 -0
  354. /package/.claude/skills/redis-coordination/{test-bzpopmin-fix.sh → demos/test-bzpopmin-fix.sh} +0 -0
  355. /package/.claude/skills/redis-coordination/{test-cancel-swarm.sh → demos/test-cancel-swarm.sh} +0 -0
  356. /package/.claude/skills/redis-coordination/{test-dlq.sh → demos/test-dlq.sh} +0 -0
  357. /package/.claude/skills/redis-coordination/{test-priority-wake-phase4-unix.sh → demos/test-priority-wake-phase4-unix.sh} +0 -0
  358. /package/.claude/skills/redis-coordination/{test-priority-wake-phase4.sh → demos/test-priority-wake-phase4.sh} +0 -0
  359. /package/.claude/skills/redis-coordination/{test-priority-wake.sh → demos/test-priority-wake.sh} +0 -0
  360. /package/.claude/skills/redis-coordination/{test-quick-fix.sh → demos/test-quick-fix.sh} +0 -0
  361. /package/.claude/skills/redis-coordination/{test-quorum-absolute.sh → demos/test-quorum-absolute.sh} +0 -0
  362. /package/.claude/skills/redis-coordination/{test-quorum-fallback.sh → demos/test-quorum-fallback.sh} +0 -0
  363. /package/.claude/skills/redis-coordination/{test-quorum-percentage.sh → demos/test-quorum-percentage.sh} +0 -0
  364. /package/.claude/skills/redis-coordination/{test-quorum-with-retry.sh → demos/test-quorum-with-retry.sh} +0 -0
  365. /package/.claude/skills/redis-coordination/{test-quorum.sh → demos/test-quorum.sh} +0 -0
  366. /package/.claude/skills/redis-coordination/{test-shutdown-handling.sh → demos/test-shutdown-handling.sh} +0 -0
  367. /package/.claude/skills/redis-coordination/{test-shutdown.sh → demos/test-shutdown.sh} +0 -0
  368. /package/.claude/skills/redis-coordination/{test-utils-unix.sh → demos/test-utils-unix.sh} +0 -0
  369. /package/.claude/skills/redis-coordination/{test-utils.sh → demos/test-utils.sh} +0 -0
  370. /package/.claude/skills/redis-coordination/{test-waiting-mode.sh → demos/test-waiting-mode.sh} +0 -0
@@ -0,0 +1,358 @@
1
+ /**
2
+ * CLI Agent Context Builder
3
+ *
4
+ * Builds natural language system prompts for CLI-spawned agents.
5
+ * Converts JSON context from Redis into readable markdown format.
6
+ *
7
+ * Phase 1: System Prompts Enhancement (Sprint 2)
8
+ * - Load CLAUDE.md (project rules)
9
+ * - Load agent markdown template
10
+ * - Format epic/phase/success criteria as natural language
11
+ * - Build comprehensive system prompt for API execution
12
+ */ import fs from 'fs/promises';
13
+ import path from 'path';
14
+ /**
15
+ * Load CLAUDE.md project rules
16
+ */ async function loadProjectRules() {
17
+ try {
18
+ // Try current working directory
19
+ const cwdPath = path.join(process.cwd(), 'CLAUDE.md');
20
+ const content = await fs.readFile(cwdPath, 'utf-8');
21
+ return content;
22
+ } catch (error) {
23
+ console.warn('[cli-agent-context] Could not load CLAUDE.md:', error);
24
+ return '';
25
+ }
26
+ }
27
+ /**
28
+ * Load agent markdown template
29
+ */ async function loadAgentTemplate(agentType) {
30
+ try {
31
+ // Search in .claude/agents/ subdirectories
32
+ const searchPaths = [
33
+ path.join(process.cwd(), '.claude', 'agents', 'coordinators', `${agentType}.md`),
34
+ path.join(process.cwd(), '.claude', 'agents', 'core-agents', `${agentType}.md`),
35
+ path.join(process.cwd(), '.claude', 'agents', 'developers', `${agentType}.md`),
36
+ path.join(process.cwd(), '.claude', 'agents', 'specialists', `${agentType}.md`),
37
+ path.join(process.cwd(), '.claude', 'agents', 'testers', `${agentType}.md`),
38
+ path.join(process.cwd(), '.claude', 'agents', 'planners', `${agentType}.md`),
39
+ path.join(process.cwd(), '.claude', 'agents', 'frontend', `${agentType}.md`),
40
+ path.join(process.cwd(), '.claude', 'agents', 'security', `${agentType}.md`),
41
+ path.join(process.cwd(), '.claude', 'agents', 'custom', `${agentType}.md`),
42
+ path.join(process.cwd(), '.claude', 'agents', `${agentType}.md`)
43
+ ];
44
+ for (const searchPath of searchPaths){
45
+ try {
46
+ const content = await fs.readFile(searchPath, 'utf-8');
47
+ return content;
48
+ } catch {
49
+ // Continue to next path
50
+ }
51
+ }
52
+ console.warn(`[cli-agent-context] Could not find agent template: ${agentType}.md`);
53
+ return '';
54
+ } catch (error) {
55
+ console.warn('[cli-agent-context] Error loading agent template:', error);
56
+ return '';
57
+ }
58
+ }
59
+ /**
60
+ * Parse JSON string safely
61
+ */ function parseJSON(jsonString, fallback) {
62
+ if (!jsonString || jsonString.trim() === '' || jsonString === '(nil)') {
63
+ return fallback;
64
+ }
65
+ try {
66
+ return JSON.parse(jsonString);
67
+ } catch (error) {
68
+ console.warn('[cli-agent-context] Failed to parse JSON:', error);
69
+ return fallback;
70
+ }
71
+ }
72
+ /**
73
+ * Format epic context as natural language
74
+ */ function formatEpicContext(epic) {
75
+ if (!epic.epicGoal && !epic.inScope && !epic.outOfScope) {
76
+ return '';
77
+ }
78
+ const sections = [];
79
+ sections.push('## Epic Context');
80
+ sections.push('');
81
+ if (epic.epicGoal) {
82
+ sections.push('**Epic Goal:**');
83
+ sections.push(epic.epicGoal);
84
+ sections.push('');
85
+ }
86
+ if (epic.riskProfile) {
87
+ sections.push(`**Risk Profile:** ${epic.riskProfile}`);
88
+ sections.push('');
89
+ }
90
+ if (epic.inScope && epic.inScope.length > 0) {
91
+ sections.push('**In Scope:**');
92
+ for (const item of epic.inScope){
93
+ sections.push(`- ${item}`);
94
+ }
95
+ sections.push('');
96
+ }
97
+ if (epic.outOfScope && epic.outOfScope.length > 0) {
98
+ sections.push('**Out of Scope:**');
99
+ for (const item of epic.outOfScope){
100
+ sections.push(`- ${item}`);
101
+ }
102
+ sections.push('');
103
+ }
104
+ if (epic.phases && epic.phases.length > 0) {
105
+ sections.push('**Phases:**');
106
+ for(let i = 0; i < epic.phases.length; i++){
107
+ sections.push(`${i + 1}. ${epic.phases[i]}`);
108
+ }
109
+ sections.push('');
110
+ }
111
+ if (epic.stakeholders && epic.stakeholders.length > 0) {
112
+ sections.push(`**Stakeholders:** ${epic.stakeholders.join(', ')}`);
113
+ sections.push('');
114
+ }
115
+ if (epic.timeline) {
116
+ sections.push('**Timeline:**');
117
+ if (epic.timeline.start) sections.push(`- Start: ${epic.timeline.start}`);
118
+ if (epic.timeline.end) sections.push(`- End: ${epic.timeline.end}`);
119
+ if (epic.timeline.milestones && epic.timeline.milestones.length > 0) {
120
+ sections.push('- Milestones:');
121
+ for (const milestone of epic.timeline.milestones){
122
+ sections.push(` - ${milestone.phase}: ${milestone.date}`);
123
+ }
124
+ }
125
+ sections.push('');
126
+ }
127
+ return sections.join('\n');
128
+ }
129
+ /**
130
+ * Format phase context as natural language
131
+ */ function formatPhaseContext(phase) {
132
+ if (!phase.currentPhase && !phase.deliverables) {
133
+ return '';
134
+ }
135
+ const sections = [];
136
+ sections.push('## Current Phase');
137
+ sections.push('');
138
+ if (phase.currentPhase) {
139
+ sections.push(`**Phase:** ${phase.currentPhase}`);
140
+ if (phase.phaseNumber) {
141
+ sections.push(`**Phase Number:** ${phase.phaseNumber}`);
142
+ }
143
+ sections.push('');
144
+ }
145
+ if (phase.dependencies && phase.dependencies.length > 0) {
146
+ sections.push('**Dependencies:**');
147
+ for (const dep of phase.dependencies){
148
+ sections.push(`- ${dep}`);
149
+ }
150
+ sections.push('');
151
+ }
152
+ if (phase.deliverables && phase.deliverables.length > 0) {
153
+ sections.push('**Deliverables:**');
154
+ for (const deliverable of phase.deliverables){
155
+ sections.push(`- ${deliverable}`);
156
+ }
157
+ sections.push('');
158
+ }
159
+ if (phase.blockers && phase.blockers.length > 0) {
160
+ sections.push('**Current Blockers:**');
161
+ for (const blocker of phase.blockers){
162
+ sections.push(`- ${blocker}`);
163
+ }
164
+ sections.push('');
165
+ }
166
+ if (phase.resources) {
167
+ sections.push('**Resources:**');
168
+ if (phase.resources.agentCount) sections.push(`- Agents: ${phase.resources.agentCount}`);
169
+ if (phase.resources.estimatedDuration) sections.push(`- Duration: ${phase.resources.estimatedDuration} hours`);
170
+ if (phase.resources.costBudget) sections.push(`- Budget: $${phase.resources.costBudget.toFixed(2)}`);
171
+ sections.push('');
172
+ }
173
+ return sections.join('\n');
174
+ }
175
+ /**
176
+ * Format success criteria as natural language
177
+ */ function formatSuccessCriteria(criteria) {
178
+ // Check if any criteria fields are present
179
+ if (!criteria.acceptanceCriteria && !criteria.gateThreshold && !criteria.consensusThreshold && !criteria.qualityGates && !criteria.definitionOfDone && !criteria.nonFunctionalRequirements) {
180
+ return '';
181
+ }
182
+ const sections = [];
183
+ sections.push('## Success Criteria');
184
+ sections.push('');
185
+ if (criteria.acceptanceCriteria && criteria.acceptanceCriteria.length > 0) {
186
+ sections.push('**Acceptance Criteria:**');
187
+ for (const criterion of criteria.acceptanceCriteria){
188
+ sections.push(`- ${criterion}`);
189
+ }
190
+ sections.push('');
191
+ }
192
+ if (criteria.gateThreshold || criteria.consensusThreshold) {
193
+ sections.push('**Quality Gates:**');
194
+ if (criteria.gateThreshold) {
195
+ sections.push(`- Gate Threshold (Loop 3): ${(criteria.gateThreshold * 100).toFixed(0)}%`);
196
+ }
197
+ if (criteria.consensusThreshold) {
198
+ sections.push(`- Consensus Threshold (Loop 2): ${(criteria.consensusThreshold * 100).toFixed(0)}%`);
199
+ }
200
+ sections.push('');
201
+ }
202
+ if (criteria.qualityGates) {
203
+ sections.push('**Quality Metrics:**');
204
+ if (criteria.qualityGates.testCoverage) {
205
+ sections.push(`- Test Coverage: ${criteria.qualityGates.testCoverage}%`);
206
+ }
207
+ if (criteria.qualityGates.securityScore) {
208
+ sections.push(`- Security Score: ${(criteria.qualityGates.securityScore * 100).toFixed(0)}%`);
209
+ }
210
+ if (criteria.qualityGates.performanceBudget) {
211
+ sections.push(`- Performance Budget: ${criteria.qualityGates.performanceBudget}ms`);
212
+ }
213
+ sections.push('');
214
+ }
215
+ if (criteria.definitionOfDone && criteria.definitionOfDone.length > 0) {
216
+ sections.push('**Definition of Done:**');
217
+ for (const item of criteria.definitionOfDone){
218
+ sections.push(`- [ ] ${item}`);
219
+ }
220
+ sections.push('');
221
+ }
222
+ if (criteria.nonFunctionalRequirements && criteria.nonFunctionalRequirements.length > 0) {
223
+ sections.push('**Non-Functional Requirements:**');
224
+ for (const req of criteria.nonFunctionalRequirements){
225
+ sections.push(`- ${req}`);
226
+ }
227
+ sections.push('');
228
+ }
229
+ return sections.join('\n');
230
+ }
231
+ /**
232
+ * Format iteration context
233
+ */ function formatIterationContext(iteration, taskId) {
234
+ if (!iteration || iteration === 1) {
235
+ return '';
236
+ }
237
+ return `
238
+ ## Current Iteration
239
+
240
+ This is **iteration ${iteration}** of your task.
241
+
242
+ **Previous Iterations:**
243
+ You have completed ${iteration - 1} iteration${iteration > 2 ? 's' : ''} before this one.
244
+
245
+ **Your Goal:**
246
+ Address feedback from previous iterations and improve the quality of your work.
247
+
248
+ **Feedback Access:**
249
+ Check Redis for iteration feedback:
250
+ \`\`\`bash
251
+ redis-cli get "swarm:${taskId}:\${AGENT_ID}:feedback:iteration-${iteration}"
252
+ \`\`\`
253
+
254
+ `;
255
+ }
256
+ /**
257
+ * Build comprehensive system prompt for CLI agent
258
+ *
259
+ * Combines:
260
+ * - Project rules (CLAUDE.md)
261
+ * - Agent markdown template
262
+ * - Epic context (formatted)
263
+ * - Phase context (formatted)
264
+ * - Success criteria (formatted)
265
+ * - Iteration context
266
+ */ export async function buildCLIAgentSystemPrompt(options) {
267
+ console.log('[cli-agent-context] Building system prompt...');
268
+ const sections = [];
269
+ // 1. Load and include CLAUDE.md
270
+ console.log('[cli-agent-context] Loading CLAUDE.md...');
271
+ const projectRules = await loadProjectRules();
272
+ if (projectRules) {
273
+ sections.push('# Project Rules (CLAUDE.md)');
274
+ sections.push('');
275
+ sections.push(projectRules);
276
+ sections.push('');
277
+ sections.push('---');
278
+ sections.push('');
279
+ }
280
+ // 2. Load and include agent markdown template
281
+ console.log(`[cli-agent-context] Loading agent template: ${options.agentType}`);
282
+ const agentTemplate = await loadAgentTemplate(options.agentType);
283
+ if (agentTemplate) {
284
+ sections.push(`# Agent Definition: ${options.agentType}`);
285
+ sections.push('');
286
+ sections.push(agentTemplate);
287
+ sections.push('');
288
+ sections.push('---');
289
+ sections.push('');
290
+ }
291
+ // 3. Parse and format epic context
292
+ const epicContext = parseJSON(options.epicContext, {});
293
+ const formattedEpic = formatEpicContext(epicContext);
294
+ if (formattedEpic) {
295
+ sections.push(formattedEpic);
296
+ sections.push('---');
297
+ sections.push('');
298
+ }
299
+ // 4. Parse and format phase context
300
+ const phaseContext = parseJSON(options.phaseContext, {});
301
+ const formattedPhase = formatPhaseContext(phaseContext);
302
+ if (formattedPhase) {
303
+ sections.push(formattedPhase);
304
+ sections.push('---');
305
+ sections.push('');
306
+ }
307
+ // 5. Parse and format success criteria
308
+ const successCriteria = parseJSON(options.successCriteria, {});
309
+ const formattedCriteria = formatSuccessCriteria(successCriteria);
310
+ if (formattedCriteria) {
311
+ sections.push(formattedCriteria);
312
+ sections.push('---');
313
+ sections.push('');
314
+ }
315
+ // 6. Format iteration context
316
+ const iterationContext = formatIterationContext(options.iteration, options.taskId);
317
+ if (iterationContext) {
318
+ sections.push(iterationContext);
319
+ sections.push('---');
320
+ sections.push('');
321
+ }
322
+ // 7. Add execution reminder
323
+ sections.push('## Execution Instructions');
324
+ sections.push('');
325
+ sections.push('You are executing as a CLI-spawned agent with full project context.');
326
+ sections.push('Follow the agent definition, project rules, and success criteria exactly.');
327
+ sections.push('');
328
+ sections.push('**Remember:**');
329
+ sections.push('- Respect scope boundaries (in-scope vs out-of-scope)');
330
+ sections.push('- Meet acceptance criteria and quality gates');
331
+ sections.push('- Follow CFN Loop protocol if task-id is provided');
332
+ sections.push('- Report confidence score when complete');
333
+ sections.push('');
334
+ const fullPrompt = sections.join('\n');
335
+ console.log(`[cli-agent-context] System prompt built: ${fullPrompt.length} characters`);
336
+ console.log(`[cli-agent-context] - Project rules: ${projectRules ? 'included' : 'not found'}`);
337
+ console.log(`[cli-agent-context] - Agent template: ${agentTemplate ? 'included' : 'not found'}`);
338
+ console.log(`[cli-agent-context] - Epic context: ${formattedEpic ? 'formatted' : 'none'}`);
339
+ console.log(`[cli-agent-context] - Phase context: ${formattedPhase ? 'formatted' : 'none'}`);
340
+ console.log(`[cli-agent-context] - Success criteria: ${formattedCriteria ? 'formatted' : 'none'}`);
341
+ return fullPrompt;
342
+ }
343
+ /**
344
+ * Helper: Load context from environment variables
345
+ *
346
+ * Used by agent executor to load context from env vars set by cfn-spawn
347
+ */ export function loadContextFromEnv() {
348
+ return {
349
+ agentType: process.env.AGENT_TYPE || 'unknown',
350
+ taskId: process.env.TASK_ID,
351
+ iteration: process.env.ITERATION ? parseInt(process.env.ITERATION, 10) : 1,
352
+ epicContext: process.env.EPIC_CONTEXT,
353
+ phaseContext: process.env.PHASE_CONTEXT,
354
+ successCriteria: process.env.SUCCESS_CRITERIA
355
+ };
356
+ }
357
+
358
+ //# sourceMappingURL=cli-agent-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/cli/cli-agent-context.ts"],"sourcesContent":["/**\r\n * CLI Agent Context Builder\r\n *\r\n * Builds natural language system prompts for CLI-spawned agents.\r\n * Converts JSON context from Redis into readable markdown format.\r\n *\r\n * Phase 1: System Prompts Enhancement (Sprint 2)\r\n * - Load CLAUDE.md (project rules)\r\n * - Load agent markdown template\r\n * - Format epic/phase/success criteria as natural language\r\n * - Build comprehensive system prompt for API execution\r\n */\r\n\r\nimport fs from 'fs/promises';\r\nimport path from 'path';\r\n\r\nexport interface EpicContext {\r\n epicGoal?: string;\r\n inScope?: string[];\r\n outOfScope?: string[];\r\n phases?: string[];\r\n riskProfile?: string;\r\n stakeholders?: string[];\r\n timeline?: {\r\n start?: string;\r\n end?: string;\r\n milestones?: Array<{ phase: string; date: string }>;\r\n };\r\n}\r\n\r\nexport interface PhaseContext {\r\n currentPhase?: string;\r\n phaseNumber?: number;\r\n dependencies?: string[];\r\n deliverables?: string[];\r\n blockers?: string[];\r\n resources?: {\r\n agentCount?: number;\r\n estimatedDuration?: number;\r\n costBudget?: number;\r\n };\r\n}\r\n\r\nexport interface SuccessCriteria {\r\n acceptanceCriteria?: string[];\r\n gateThreshold?: number;\r\n consensusThreshold?: number;\r\n qualityGates?: {\r\n testCoverage?: number;\r\n securityScore?: number;\r\n performanceBudget?: number;\r\n };\r\n definitionOfDone?: string[];\r\n nonFunctionalRequirements?: string[];\r\n}\r\n\r\nexport interface ContextBuilderOptions {\r\n agentType: string;\r\n taskId?: string;\r\n iteration?: number;\r\n epicContext?: string; // JSON string\r\n phaseContext?: string; // JSON string\r\n successCriteria?: string; // JSON string\r\n}\r\n\r\n/**\r\n * Load CLAUDE.md project rules\r\n */\r\nasync function loadProjectRules(): Promise<string> {\r\n try {\r\n // Try current working directory\r\n const cwdPath = path.join(process.cwd(), 'CLAUDE.md');\r\n const content = await fs.readFile(cwdPath, 'utf-8');\r\n return content;\r\n } catch (error) {\r\n console.warn('[cli-agent-context] Could not load CLAUDE.md:', error);\r\n return '';\r\n }\r\n}\r\n\r\n/**\r\n * Load agent markdown template\r\n */\r\nasync function loadAgentTemplate(agentType: string): Promise<string> {\r\n try {\r\n // Search in .claude/agents/ subdirectories\r\n const searchPaths = [\r\n path.join(process.cwd(), '.claude', 'agents', 'coordinators', `${agentType}.md`),\r\n path.join(process.cwd(), '.claude', 'agents', 'core-agents', `${agentType}.md`),\r\n path.join(process.cwd(), '.claude', 'agents', 'developers', `${agentType}.md`),\r\n path.join(process.cwd(), '.claude', 'agents', 'specialists', `${agentType}.md`),\r\n path.join(process.cwd(), '.claude', 'agents', 'testers', `${agentType}.md`),\r\n path.join(process.cwd(), '.claude', 'agents', 'planners', `${agentType}.md`),\r\n path.join(process.cwd(), '.claude', 'agents', 'frontend', `${agentType}.md`),\r\n path.join(process.cwd(), '.claude', 'agents', 'security', `${agentType}.md`),\r\n path.join(process.cwd(), '.claude', 'agents', 'custom', `${agentType}.md`),\r\n path.join(process.cwd(), '.claude', 'agents', `${agentType}.md`),\r\n ];\r\n\r\n for (const searchPath of searchPaths) {\r\n try {\r\n const content = await fs.readFile(searchPath, 'utf-8');\r\n return content;\r\n } catch {\r\n // Continue to next path\r\n }\r\n }\r\n\r\n console.warn(`[cli-agent-context] Could not find agent template: ${agentType}.md`);\r\n return '';\r\n } catch (error) {\r\n console.warn('[cli-agent-context] Error loading agent template:', error);\r\n return '';\r\n }\r\n}\r\n\r\n/**\r\n * Parse JSON string safely\r\n */\r\nfunction parseJSON<T>(jsonString: string | undefined, fallback: T): T {\r\n if (!jsonString || jsonString.trim() === '' || jsonString === '(nil)') {\r\n return fallback;\r\n }\r\n\r\n try {\r\n return JSON.parse(jsonString) as T;\r\n } catch (error) {\r\n console.warn('[cli-agent-context] Failed to parse JSON:', error);\r\n return fallback;\r\n }\r\n}\r\n\r\n/**\r\n * Format epic context as natural language\r\n */\r\nfunction formatEpicContext(epic: EpicContext): string {\r\n if (!epic.epicGoal && !epic.inScope && !epic.outOfScope) {\r\n return '';\r\n }\r\n\r\n const sections: string[] = [];\r\n\r\n sections.push('## Epic Context');\r\n sections.push('');\r\n\r\n if (epic.epicGoal) {\r\n sections.push('**Epic Goal:**');\r\n sections.push(epic.epicGoal);\r\n sections.push('');\r\n }\r\n\r\n if (epic.riskProfile) {\r\n sections.push(`**Risk Profile:** ${epic.riskProfile}`);\r\n sections.push('');\r\n }\r\n\r\n if (epic.inScope && epic.inScope.length > 0) {\r\n sections.push('**In Scope:**');\r\n for (const item of epic.inScope) {\r\n sections.push(`- ${item}`);\r\n }\r\n sections.push('');\r\n }\r\n\r\n if (epic.outOfScope && epic.outOfScope.length > 0) {\r\n sections.push('**Out of Scope:**');\r\n for (const item of epic.outOfScope) {\r\n sections.push(`- ${item}`);\r\n }\r\n sections.push('');\r\n }\r\n\r\n if (epic.phases && epic.phases.length > 0) {\r\n sections.push('**Phases:**');\r\n for (let i = 0; i < epic.phases.length; i++) {\r\n sections.push(`${i + 1}. ${epic.phases[i]}`);\r\n }\r\n sections.push('');\r\n }\r\n\r\n if (epic.stakeholders && epic.stakeholders.length > 0) {\r\n sections.push(`**Stakeholders:** ${epic.stakeholders.join(', ')}`);\r\n sections.push('');\r\n }\r\n\r\n if (epic.timeline) {\r\n sections.push('**Timeline:**');\r\n if (epic.timeline.start) sections.push(`- Start: ${epic.timeline.start}`);\r\n if (epic.timeline.end) sections.push(`- End: ${epic.timeline.end}`);\r\n if (epic.timeline.milestones && epic.timeline.milestones.length > 0) {\r\n sections.push('- Milestones:');\r\n for (const milestone of epic.timeline.milestones) {\r\n sections.push(` - ${milestone.phase}: ${milestone.date}`);\r\n }\r\n }\r\n sections.push('');\r\n }\r\n\r\n return sections.join('\\n');\r\n}\r\n\r\n/**\r\n * Format phase context as natural language\r\n */\r\nfunction formatPhaseContext(phase: PhaseContext): string {\r\n if (!phase.currentPhase && !phase.deliverables) {\r\n return '';\r\n }\r\n\r\n const sections: string[] = [];\r\n\r\n sections.push('## Current Phase');\r\n sections.push('');\r\n\r\n if (phase.currentPhase) {\r\n sections.push(`**Phase:** ${phase.currentPhase}`);\r\n if (phase.phaseNumber) {\r\n sections.push(`**Phase Number:** ${phase.phaseNumber}`);\r\n }\r\n sections.push('');\r\n }\r\n\r\n if (phase.dependencies && phase.dependencies.length > 0) {\r\n sections.push('**Dependencies:**');\r\n for (const dep of phase.dependencies) {\r\n sections.push(`- ${dep}`);\r\n }\r\n sections.push('');\r\n }\r\n\r\n if (phase.deliverables && phase.deliverables.length > 0) {\r\n sections.push('**Deliverables:**');\r\n for (const deliverable of phase.deliverables) {\r\n sections.push(`- ${deliverable}`);\r\n }\r\n sections.push('');\r\n }\r\n\r\n if (phase.blockers && phase.blockers.length > 0) {\r\n sections.push('**Current Blockers:**');\r\n for (const blocker of phase.blockers) {\r\n sections.push(`- ${blocker}`);\r\n }\r\n sections.push('');\r\n }\r\n\r\n if (phase.resources) {\r\n sections.push('**Resources:**');\r\n if (phase.resources.agentCount) sections.push(`- Agents: ${phase.resources.agentCount}`);\r\n if (phase.resources.estimatedDuration) sections.push(`- Duration: ${phase.resources.estimatedDuration} hours`);\r\n if (phase.resources.costBudget) sections.push(`- Budget: $${phase.resources.costBudget.toFixed(2)}`);\r\n sections.push('');\r\n }\r\n\r\n return sections.join('\\n');\r\n}\r\n\r\n/**\r\n * Format success criteria as natural language\r\n */\r\nfunction formatSuccessCriteria(criteria: SuccessCriteria): string {\r\n // Check if any criteria fields are present\r\n if (\r\n !criteria.acceptanceCriteria &&\r\n !criteria.gateThreshold &&\r\n !criteria.consensusThreshold &&\r\n !criteria.qualityGates &&\r\n !criteria.definitionOfDone &&\r\n !criteria.nonFunctionalRequirements\r\n ) {\r\n return '';\r\n }\r\n\r\n const sections: string[] = [];\r\n\r\n sections.push('## Success Criteria');\r\n sections.push('');\r\n\r\n if (criteria.acceptanceCriteria && criteria.acceptanceCriteria.length > 0) {\r\n sections.push('**Acceptance Criteria:**');\r\n for (const criterion of criteria.acceptanceCriteria) {\r\n sections.push(`- ${criterion}`);\r\n }\r\n sections.push('');\r\n }\r\n\r\n if (criteria.gateThreshold || criteria.consensusThreshold) {\r\n sections.push('**Quality Gates:**');\r\n if (criteria.gateThreshold) {\r\n sections.push(`- Gate Threshold (Loop 3): ${(criteria.gateThreshold * 100).toFixed(0)}%`);\r\n }\r\n if (criteria.consensusThreshold) {\r\n sections.push(`- Consensus Threshold (Loop 2): ${(criteria.consensusThreshold * 100).toFixed(0)}%`);\r\n }\r\n sections.push('');\r\n }\r\n\r\n if (criteria.qualityGates) {\r\n sections.push('**Quality Metrics:**');\r\n if (criteria.qualityGates.testCoverage) {\r\n sections.push(`- Test Coverage: ${criteria.qualityGates.testCoverage}%`);\r\n }\r\n if (criteria.qualityGates.securityScore) {\r\n sections.push(`- Security Score: ${(criteria.qualityGates.securityScore * 100).toFixed(0)}%`);\r\n }\r\n if (criteria.qualityGates.performanceBudget) {\r\n sections.push(`- Performance Budget: ${criteria.qualityGates.performanceBudget}ms`);\r\n }\r\n sections.push('');\r\n }\r\n\r\n if (criteria.definitionOfDone && criteria.definitionOfDone.length > 0) {\r\n sections.push('**Definition of Done:**');\r\n for (const item of criteria.definitionOfDone) {\r\n sections.push(`- [ ] ${item}`);\r\n }\r\n sections.push('');\r\n }\r\n\r\n if (criteria.nonFunctionalRequirements && criteria.nonFunctionalRequirements.length > 0) {\r\n sections.push('**Non-Functional Requirements:**');\r\n for (const req of criteria.nonFunctionalRequirements) {\r\n sections.push(`- ${req}`);\r\n }\r\n sections.push('');\r\n }\r\n\r\n return sections.join('\\n');\r\n}\r\n\r\n/**\r\n * Format iteration context\r\n */\r\nfunction formatIterationContext(iteration?: number, taskId?: string): string {\r\n if (!iteration || iteration === 1) {\r\n return '';\r\n }\r\n\r\n return `\r\n## Current Iteration\r\n\r\nThis is **iteration ${iteration}** of your task.\r\n\r\n**Previous Iterations:**\r\nYou have completed ${iteration - 1} iteration${iteration > 2 ? 's' : ''} before this one.\r\n\r\n**Your Goal:**\r\nAddress feedback from previous iterations and improve the quality of your work.\r\n\r\n**Feedback Access:**\r\nCheck Redis for iteration feedback:\r\n\\`\\`\\`bash\r\nredis-cli get \"swarm:${taskId}:\\${AGENT_ID}:feedback:iteration-${iteration}\"\r\n\\`\\`\\`\r\n\r\n`;\r\n}\r\n\r\n/**\r\n * Build comprehensive system prompt for CLI agent\r\n *\r\n * Combines:\r\n * - Project rules (CLAUDE.md)\r\n * - Agent markdown template\r\n * - Epic context (formatted)\r\n * - Phase context (formatted)\r\n * - Success criteria (formatted)\r\n * - Iteration context\r\n */\r\nexport async function buildCLIAgentSystemPrompt(options: ContextBuilderOptions): Promise<string> {\r\n console.log('[cli-agent-context] Building system prompt...');\r\n\r\n const sections: string[] = [];\r\n\r\n // 1. Load and include CLAUDE.md\r\n console.log('[cli-agent-context] Loading CLAUDE.md...');\r\n const projectRules = await loadProjectRules();\r\n if (projectRules) {\r\n sections.push('# Project Rules (CLAUDE.md)');\r\n sections.push('');\r\n sections.push(projectRules);\r\n sections.push('');\r\n sections.push('---');\r\n sections.push('');\r\n }\r\n\r\n // 2. Load and include agent markdown template\r\n console.log(`[cli-agent-context] Loading agent template: ${options.agentType}`);\r\n const agentTemplate = await loadAgentTemplate(options.agentType);\r\n if (agentTemplate) {\r\n sections.push(`# Agent Definition: ${options.agentType}`);\r\n sections.push('');\r\n sections.push(agentTemplate);\r\n sections.push('');\r\n sections.push('---');\r\n sections.push('');\r\n }\r\n\r\n // 3. Parse and format epic context\r\n const epicContext = parseJSON<EpicContext>(options.epicContext, {});\r\n const formattedEpic = formatEpicContext(epicContext);\r\n if (formattedEpic) {\r\n sections.push(formattedEpic);\r\n sections.push('---');\r\n sections.push('');\r\n }\r\n\r\n // 4. Parse and format phase context\r\n const phaseContext = parseJSON<PhaseContext>(options.phaseContext, {});\r\n const formattedPhase = formatPhaseContext(phaseContext);\r\n if (formattedPhase) {\r\n sections.push(formattedPhase);\r\n sections.push('---');\r\n sections.push('');\r\n }\r\n\r\n // 5. Parse and format success criteria\r\n const successCriteria = parseJSON<SuccessCriteria>(options.successCriteria, {});\r\n const formattedCriteria = formatSuccessCriteria(successCriteria);\r\n if (formattedCriteria) {\r\n sections.push(formattedCriteria);\r\n sections.push('---');\r\n sections.push('');\r\n }\r\n\r\n // 6. Format iteration context\r\n const iterationContext = formatIterationContext(options.iteration, options.taskId);\r\n if (iterationContext) {\r\n sections.push(iterationContext);\r\n sections.push('---');\r\n sections.push('');\r\n }\r\n\r\n // 7. Add execution reminder\r\n sections.push('## Execution Instructions');\r\n sections.push('');\r\n sections.push('You are executing as a CLI-spawned agent with full project context.');\r\n sections.push('Follow the agent definition, project rules, and success criteria exactly.');\r\n sections.push('');\r\n sections.push('**Remember:**');\r\n sections.push('- Respect scope boundaries (in-scope vs out-of-scope)');\r\n sections.push('- Meet acceptance criteria and quality gates');\r\n sections.push('- Follow CFN Loop protocol if task-id is provided');\r\n sections.push('- Report confidence score when complete');\r\n sections.push('');\r\n\r\n const fullPrompt = sections.join('\\n');\r\n\r\n console.log(`[cli-agent-context] System prompt built: ${fullPrompt.length} characters`);\r\n console.log(`[cli-agent-context] - Project rules: ${projectRules ? 'included' : 'not found'}`);\r\n console.log(`[cli-agent-context] - Agent template: ${agentTemplate ? 'included' : 'not found'}`);\r\n console.log(`[cli-agent-context] - Epic context: ${formattedEpic ? 'formatted' : 'none'}`);\r\n console.log(`[cli-agent-context] - Phase context: ${formattedPhase ? 'formatted' : 'none'}`);\r\n console.log(`[cli-agent-context] - Success criteria: ${formattedCriteria ? 'formatted' : 'none'}`);\r\n\r\n return fullPrompt;\r\n}\r\n\r\n/**\r\n * Helper: Load context from environment variables\r\n *\r\n * Used by agent executor to load context from env vars set by cfn-spawn\r\n */\r\nexport function loadContextFromEnv(): ContextBuilderOptions {\r\n return {\r\n agentType: process.env.AGENT_TYPE || 'unknown',\r\n taskId: process.env.TASK_ID,\r\n iteration: process.env.ITERATION ? parseInt(process.env.ITERATION, 10) : 1,\r\n epicContext: process.env.EPIC_CONTEXT,\r\n phaseContext: process.env.PHASE_CONTEXT,\r\n successCriteria: process.env.SUCCESS_CRITERIA,\r\n };\r\n}\r\n"],"names":["fs","path","loadProjectRules","cwdPath","join","process","cwd","content","readFile","error","console","warn","loadAgentTemplate","agentType","searchPaths","searchPath","parseJSON","jsonString","fallback","trim","JSON","parse","formatEpicContext","epic","epicGoal","inScope","outOfScope","sections","push","riskProfile","length","item","phases","i","stakeholders","timeline","start","end","milestones","milestone","phase","date","formatPhaseContext","currentPhase","deliverables","phaseNumber","dependencies","dep","deliverable","blockers","blocker","resources","agentCount","estimatedDuration","costBudget","toFixed","formatSuccessCriteria","criteria","acceptanceCriteria","gateThreshold","consensusThreshold","qualityGates","definitionOfDone","nonFunctionalRequirements","criterion","testCoverage","securityScore","performanceBudget","req","formatIterationContext","iteration","taskId","buildCLIAgentSystemPrompt","options","log","projectRules","agentTemplate","epicContext","formattedEpic","phaseContext","formattedPhase","successCriteria","formattedCriteria","iterationContext","fullPrompt","loadContextFromEnv","env","AGENT_TYPE","TASK_ID","ITERATION","parseInt","EPIC_CONTEXT","PHASE_CONTEXT","SUCCESS_CRITERIA"],"mappings":"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"}
@@ -1,100 +1,118 @@
1
- import * as fs from "fs/promises";
2
- import * as path from "path";
3
- import Ajv from "ajv";
4
- import * as lodash from "lodash";
5
- let ConfigManager = class ConfigManager {
6
- static _instance = null;
7
- configPath;
8
- schemaPath;
9
- ajv;
10
- constructor(){
11
- this.configPath = path.join(process.env.HOME || "", ".claude-flow-config.json");
12
- this.schemaPath = path.join(__dirname, "../../.claude/skills/config-management/config.json");
13
- this.ajv = new Ajv();
14
- }
15
- static getInstance() {
16
- if (!ConfigManager._instance) {
17
- ConfigManager._instance = new ConfigManager();
18
- }
19
- return ConfigManager._instance;
20
- }
21
- async readConfig() {
22
- try {
23
- const configContent = await fs.readFile(this.configPath, "utf-8");
24
- return JSON.parse(configContent);
25
- } catch (error) {
26
- // If config doesn't exist, create from schema
27
- return this.resetToDefaults();
28
- }
29
- }
30
- async writeConfig(config) {
31
- const schemaContent = await fs.readFile(this.schemaPath, "utf-8");
32
- const schema = JSON.parse(schemaContent);
33
- const validate = this.ajv.compile(schema);
34
- if (!validate(config)) {
35
- throw new Error("Invalid configuration: " + this.ajv.errorsText(validate.errors));
36
- }
37
- await fs.writeFile(this.configPath, JSON.stringify(config, null, 2), "utf-8");
1
+ "use strict";
2
+ var __awaiter = this && this.__awaiter || function(thisArg, _arguments, P, generator) {
3
+ function adopt(value) {
4
+ return value instanceof P ? value : new P(function(resolve) {
5
+ resolve(value);
6
+ });
38
7
  }
39
- async getValue(keyPath) {
40
- const config = await this.readConfig();
41
- const value = lodash.get(config, keyPath);
42
- if (value === undefined) {
43
- // Check if it's a custom key path not in the schema
44
- const customConfig = await this.readCustomConfig();
45
- return lodash.get(customConfig, keyPath);
8
+ return new (P || (P = Promise))(function(resolve, reject) {
9
+ function fulfilled(value) {
10
+ try {
11
+ step(generator.next(value));
12
+ } catch (e) {
13
+ reject(e);
14
+ }
46
15
  }
47
- return value;
48
- }
49
- async readCustomConfig() {
50
- try {
51
- const customConfigPath = path.join(process.env.HOME || "", ".claude-flow-custom-config.json");
52
- const customConfigContent = await fs.readFile(customConfigPath, "utf-8");
53
- return JSON.parse(customConfigContent);
54
- } catch (error) {
55
- // If custom config doesn't exist or can't be read, return empty object
56
- return {};
16
+ function rejected(value) {
17
+ try {
18
+ step(generator["throw"](value));
19
+ } catch (e) {
20
+ reject(e);
21
+ }
57
22
  }
58
- }
59
- async set(key, value) {
60
- const config = await this.readConfig();
61
- // Type assertion to handle full object
62
- if (typeof value === "object" && value !== null) {
63
- config[key] = value;
64
- } else {
65
- throw new Error("Invalid configuration value");
23
+ function step(result) {
24
+ result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
66
25
  }
67
- await this.writeConfig(config);
68
- }
69
- async getAll() {
70
- return this.readConfig();
71
- }
72
- async resetToDefaults() {
73
- const schemaContent = await fs.readFile(this.schemaPath, "utf-8");
74
- const schema = JSON.parse(schemaContent);
75
- // Extract default values from the schema
76
- const defaultConfig = {
77
- redis: {
78
- host: schema.properties.redis.properties.host.default,
79
- port: schema.properties.redis.properties.port.default
80
- },
81
- agent: {
82
- default_strategy: schema.properties.agent.properties.default_strategy.default,
83
- max_concurrent_agents: schema.properties.agent.properties.max_concurrent_agents.default,
84
- log_level: schema.properties.agent.properties.log_level.default
85
- },
86
- security: {
87
- enabled: schema.properties.security.properties.enabled.default,
88
- max_retry_attempts: schema.properties.security.properties.max_retry_attempts.default
89
- }
26
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
27
+ });
28
+ };
29
+ var __generator = this && this.__generator || function(thisArg, body) {
30
+ var _ = {
31
+ label: 0,
32
+ sent: function() {
33
+ if (t[0] & 1) throw t[1];
34
+ return t[1];
35
+ },
36
+ trys: [],
37
+ ops: []
38
+ }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
39
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() {
40
+ return this;
41
+ }), g;
42
+ function verb(n) {
43
+ return function(v) {
44
+ return step([
45
+ n,
46
+ v
47
+ ]);
90
48
  };
91
- await this.writeConfig(defaultConfig);
92
- return defaultConfig;
93
49
  }
94
- };
95
- export default ConfigManager;
96
-
97
- //# sourceMappingURL=config-manager.js.mapop[1] : void 0,
50
+ function step(op) {
51
+ if (f) throw new TypeError("Generator is already executing.");
52
+ while(g && (g = 0, op[0] && (_ = 0)), _)try {
53
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
54
+ if (y = 0, t) op = [
55
+ op[0] & 2,
56
+ t.value
57
+ ];
58
+ switch(op[0]){
59
+ case 0:
60
+ case 1:
61
+ t = op;
62
+ break;
63
+ case 4:
64
+ _.label++;
65
+ return {
66
+ value: op[1],
67
+ done: false
68
+ };
69
+ case 5:
70
+ _.label++;
71
+ y = op[1];
72
+ op = [
73
+ 0
74
+ ];
75
+ continue;
76
+ case 7:
77
+ op = _.ops.pop();
78
+ _.trys.pop();
79
+ continue;
80
+ default:
81
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
82
+ _ = 0;
83
+ continue;
84
+ }
85
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
86
+ _.label = op[1];
87
+ break;
88
+ }
89
+ if (op[0] === 6 && _.label < t[1]) {
90
+ _.label = t[1];
91
+ t = op;
92
+ break;
93
+ }
94
+ if (t && _.label < t[2]) {
95
+ _.label = t[2];
96
+ _.ops.push(op);
97
+ break;
98
+ }
99
+ if (t[2]) _.ops.pop();
100
+ _.trys.pop();
101
+ continue;
102
+ }
103
+ op = body.call(thisArg, _);
104
+ } catch (e) {
105
+ op = [
106
+ 6,
107
+ e
108
+ ];
109
+ y = 0;
110
+ } finally{
111
+ f = t = 0;
112
+ }
113
+ if (op[0] & 5) throw op[1];
114
+ return {
115
+ value: op[0] ? op[1] : void 0,
98
116
  done: true
99
117
  };
100
118
  }