claude-flow-novice 2.6.0 → 2.9.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 (659) hide show
  1. package/.claude/agents/cfn-dev-team/coordinators/README.md +42 -0
  2. package/.claude/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +440 -0
  3. package/.claude/agents/{product-owner-team → cfn-dev-team/coordinators}/cto-agent.md +154 -187
  4. package/.claude/agents/cfn-dev-team/coordinators/multi-sprint-coordinator.md +50 -0
  5. package/.claude/agents/{product-owner-team → cfn-dev-team/coordinators}/product-owner-agent.md +7 -40
  6. package/.claude/agents/{cfn-loop → cfn-dev-team/coordinators}/product-owner.md +73 -18
  7. package/.claude/agents/cfn-dev-team/developers/README.md +69 -0
  8. package/.claude/agents/cfn-dev-team/developers/backend-dev.md +77 -0
  9. package/.claude/agents/{core-agents → cfn-dev-team/developers}/coder.md +132 -27
  10. package/.claude/agents/cfn-dev-team/developers/react-frontend-engineer.md +121 -0
  11. package/.claude/agents/{frontend → cfn-dev-team/developers}/state-architect.md +1 -0
  12. package/.claude/agents/{frontend → cfn-dev-team/developers}/ui-designer.md +1 -0
  13. package/.claude/agents/cfn-dev-team/reviewers/README.md +58 -0
  14. package/.claude/agents/{analysis → cfn-dev-team/reviewers}/code-quality-validator.md +9 -18
  15. package/.claude/agents/{core-agents → cfn-dev-team/reviewers}/reviewer.md +62 -23
  16. package/.claude/agents/cfn-dev-team/testers/README.md +94 -0
  17. package/.claude/agents/{testing → cfn-dev-team/testers}/e2e/playwright-agent.md +2 -21
  18. package/.claude/agents/{testing → cfn-dev-team/testers}/interaction-tester.md +2 -21
  19. package/.claude/agents/{testing → cfn-dev-team/testers}/playwright-tester.md +1 -1
  20. package/.claude/agents/cfn-dev-team/testers/tester.md +139 -0
  21. package/.claude/agents/cfn-dev-team/testers/unit/tdd-london-swarm.md +49 -0
  22. package/.claude/agents/cfn-dev-team/testers/validation/production-validator.md +33 -0
  23. package/.claude/cfn-data/cfn-loop.db +0 -0
  24. package/.claude/cfn-data/cfn_loop_logs.db +0 -0
  25. package/.claude/commands/{CFN_COORDINATOR_PARAMETERS.md → cfn/CFN_COORDINATOR_PARAMETERS.md} +22 -22
  26. package/.claude/commands/{cfn-loop-epic.md → cfn/cfn-loop-epic.md} +6 -6
  27. package/.claude/commands/{cfn-loop-single.md → cfn/cfn-loop-single.md} +9 -9
  28. package/.claude/commands/{cfn-loop-sprints.md → cfn/cfn-loop-sprints.md} +1 -1
  29. package/.claude/commands/{cfn-loop.md → cfn/cfn-loop.md} +9 -9
  30. package/.claude/commands/cfn/cfn-mode.md +20 -0
  31. package/.claude/commands/{cfn-optimize-agents.md → cfn/cfn-optimize-agents.md} +1 -1
  32. package/.claude/commands/{context-curate.md → cfn/context-curate.md} +2 -2
  33. package/.claude/commands/{context-inject.md → cfn/context-inject.md} +3 -3
  34. package/.claude/commands/{context-reflect.md → cfn/context-reflect.md} +1 -1
  35. package/.claude/commands/{context-stats.md → cfn/context-stats.md} +1 -1
  36. package/.claude/commands/{list-agents-rebuild.md → cfn/list-agents-rebuild.md} +12 -12
  37. package/.claude/commands/cfn/write-plan.md +104 -0
  38. package/.claude/hooks/cfn-BACKUP_USAGE.md +243 -0
  39. package/.claude/hooks/cfn-post-edit-cfn-retrospective.sh +79 -0
  40. package/.claude/hooks/cfn-post-edit.sh +21 -0
  41. package/.claude/hooks/cfn-pre-edit-backup.sh +71 -0
  42. package/.claude/hooks/cfn-restore-from-backup.sh +37 -0
  43. package/.claude/skills/cfn-loop-orchestration/README.md +41 -0
  44. package/.claude/skills/cfn-redis-coordination/README.md +65 -0
  45. package/.claude/skills/cfn-webapp-testing/README.md +142 -0
  46. package/CFN-CLAUDE.md +776 -0
  47. package/README.md +598 -251
  48. package/dist/agents/agent-loader.js +146 -165
  49. package/dist/agents/agent-loader.js.map +1 -1
  50. package/dist/cli/agent-command.js +2 -0
  51. package/dist/cli/agent-command.js.map +1 -1
  52. package/dist/cli/agent-definition-parser.js +7 -0
  53. package/dist/cli/agent-definition-parser.js.map +1 -1
  54. package/dist/cli/agent-executor.js +145 -11
  55. package/dist/cli/agent-executor.js.map +1 -1
  56. package/dist/cli/agent-prompt-builder.js +81 -1
  57. package/dist/cli/agent-prompt-builder.js.map +1 -1
  58. package/dist/cli/agent-spawn.js +10 -1
  59. package/dist/cli/agent-spawn.js.map +1 -1
  60. package/dist/cli/anthropic-client.js +192 -13
  61. package/dist/cli/anthropic-client.js.map +1 -1
  62. package/dist/cli/cfn-context.js +150 -0
  63. package/dist/cli/cfn-context.js.map +1 -1
  64. package/dist/cli/cfn-fork.js +159 -0
  65. package/dist/cli/cfn-fork.js.map +1 -0
  66. package/dist/cli/cli-agent-context.js +8 -3
  67. package/dist/cli/cli-agent-context.js.map +1 -1
  68. package/dist/cli/conversation-fork.js +201 -0
  69. package/dist/cli/conversation-fork.js.map +1 -0
  70. package/dist/cli/index.js +4 -0
  71. package/dist/cli/index.js.map +1 -1
  72. package/dist/cli/init-command.js +20 -0
  73. package/dist/cli/init-command.js.map +1 -0
  74. package/dist/cli/tool-definitions.js +263 -0
  75. package/dist/cli/tool-definitions.js.map +1 -0
  76. package/dist/cli/tool-executor.js +247 -0
  77. package/dist/cli/tool-executor.js.map +1 -0
  78. package/dist/hello.js +8 -0
  79. package/dist/hello.js.map +1 -0
  80. package/package.json +26 -12
  81. package/scripts/README.md +68 -0
  82. package/scripts/cfn-intervention-example.sh +21 -0
  83. package/scripts/init-project.js +148 -0
  84. package/scripts/migrate-test-infrastructure.sh +40 -0
  85. package/scripts/restructure-cfn-namespace.sh +161 -0
  86. package/scripts/validate-test-migration.sh +49 -0
  87. package/scripts/verify-no-secrets.sh +55 -0
  88. package/.claude/SLASH-COMMANDS-READY.md +0 -53
  89. package/.claude/WORKING-SETUP.md +0 -67
  90. package/.claude/ace-system-overview.md +0 -524
  91. package/.claude/agent-principles/agent-template.md +0 -96
  92. package/.claude/agents/CLAUDE.md +0 -995
  93. package/.claude/agents/README-VALIDATION.md +0 -243
  94. package/.claude/agents/agent-principles/README.md +0 -226
  95. package/.claude/agents/agent-principles/agent-type-guidelines.md +0 -465
  96. package/.claude/agents/agent-principles/format-selection.md +0 -224
  97. package/.claude/agents/agent-principles/phase4-template-optimization.md +0 -494
  98. package/.claude/agents/agent-principles/prompt-engineering.md +0 -501
  99. package/.claude/agents/agent-principles/quality-metrics.md +0 -375
  100. package/.claude/agents/analysis/code-analyzer.md +0 -192
  101. package/.claude/agents/analysis/code-review/analyze-code-quality.md +0 -133
  102. package/.claude/agents/analysis/perf-analyzer.md +0 -230
  103. package/.claude/agents/architecture/system-architect.md +0 -161
  104. package/.claude/agents/architecture/system-architect.md.backup +0 -603
  105. package/.claude/agents/code-booster.md +0 -131
  106. package/.claude/agents/consensus/consensus-builder.md +0 -159
  107. package/.claude/agents/consensus/crdt-synchronizer.md +0 -192
  108. package/.claude/agents/consensus/performance-benchmarker.md +0 -101
  109. package/.claude/agents/consensus/quorum-manager.md +0 -168
  110. package/.claude/agents/consensus/raft-manager.md +0 -106
  111. package/.claude/agents/consensus/security-manager.md +0 -107
  112. package/.claude/agents/context/context-curator.md +0 -84
  113. package/.claude/agents/context/context-reflector.md +0 -81
  114. package/.claude/agents/context-curator.md +0 -167
  115. package/.claude/agents/context-reflector.md +0 -65
  116. package/.claude/agents/core-agents/analyst.md +0 -170
  117. package/.claude/agents/core-agents/architect.md +0 -200
  118. package/.claude/agents/core-agents/base-template-generator.md +0 -188
  119. package/.claude/agents/core-agents/cfn-loop-coordinator.md +0 -134
  120. package/.claude/agents/core-agents/code-quality-validator.md +0 -149
  121. package/.claude/agents/core-agents/context-curator.md +0 -452
  122. package/.claude/agents/core-agents/context-reflector.md +0 -273
  123. package/.claude/agents/core-agents/coordinator.md +0 -182
  124. package/.claude/agents/core-agents/cost-savings-cfn-loop-coordinator.md +0 -235
  125. package/.claude/agents/core-agents/cost-savings-coordinator.md +0 -167
  126. package/.claude/agents/core-agents/performance-benchmarker.md +0 -148
  127. package/.claude/agents/core-agents/planner.md +0 -174
  128. package/.claude/agents/core-agents/security-manager.md +0 -111
  129. package/.claude/agents/core-agents/tester.md +0 -170
  130. package/.claude/agents/custom/agent-builder.md +0 -637
  131. package/.claude/agents/development/backend/dev-backend-api.md +0 -139
  132. package/.claude/agents/development/backend-dev.md +0 -165
  133. package/.claude/agents/development/npm-package-specialist.md +0 -347
  134. package/.claude/agents/devops/devops-engineer.md +0 -148
  135. package/.claude/agents/documentation/api-docs/docs-api-openapi.md +0 -98
  136. package/.claude/agents/documentation/api-docs.md +0 -103
  137. package/.claude/agents/frontend/README.md +0 -640
  138. package/.claude/agents/frontend/interaction-tester.md +0 -139
  139. package/.claude/agents/frontend/react-frontend-engineer.md +0 -9
  140. package/.claude/agents/github/github-commit-agent.md +0 -118
  141. package/.claude/agents/goal/goal-planner.md +0 -183
  142. package/.claude/agents/personas/accessibility-advocate-persona.md +0 -107
  143. package/.claude/agents/planning-team/api-designer-persona.md +0 -147
  144. package/.claude/agents/planning-team/security-architect-persona.md +0 -190
  145. package/.claude/agents/planning-team/system-architect-persona.md +0 -190
  146. package/.claude/agents/product-owner-team/accessibility-advocate-persona.md +0 -161
  147. package/.claude/agents/product-owner-team/power-user-persona.md +0 -182
  148. package/.claude/agents/security/security-specialist-existing.md +0 -154
  149. package/.claude/agents/security/security-specialist.md +0 -185
  150. package/.claude/agents/sparc/architecture.md +0 -149
  151. package/.claude/agents/sparc/pseudocode.md +0 -159
  152. package/.claude/agents/sparc/refinement.md +0 -106
  153. package/.claude/agents/sparc/specification.md +0 -157
  154. package/.claude/agents/specialized/cli-agent-optimizer.md +0 -122
  155. package/.claude/agents/specialized/code-booster.md +0 -143
  156. package/.claude/agents/specialized/devops-engineer.md +0 -150
  157. package/.claude/agents/specialized/mobile/mobile-dev.md +0 -210
  158. package/.claude/agents/specialized/mobile/spec-mobile-react-native.md +0 -191
  159. package/.claude/agents/specialized/rust-developer.md +0 -166
  160. package/.claude/agents/specialized/rust-enterprise-developer.md +0 -144
  161. package/.claude/agents/specialized/rust-mvp-developer.md +0 -142
  162. package/.claude/agents/testing/production-validator.md +0 -179
  163. package/.claude/agents/testing/tdd-london-swarm.md +0 -209
  164. package/.claude/agents/testing/unit/tdd-london-swarm.md +0 -43
  165. package/.claude/agents/testing/validation/production-validator.md +0 -43
  166. package/.claude/agents/validate-agent.js +0 -841
  167. package/.claude/agents-ignore/cfn-coordinator-enterprise.md +0 -1303
  168. package/.claude/agents-ignore/cfn-coordinator-mvp.md +0 -942
  169. package/.claude/agents-ignore/cfn-coordinator-standard.md +0 -1062
  170. package/.claude/agents-ignore/deprecated-coordinators/adaptive-coordinator-enhanced.md +0 -145
  171. package/.claude/agents-ignore/deprecated-coordinators/adaptive-coordinator.md +0 -161
  172. package/.claude/agents-ignore/deprecated-coordinators/blocking-coordinator-example.md +0 -732
  173. package/.claude/agents-ignore/deprecated-coordinators/byzantine-coordinator.md +0 -94
  174. package/.claude/agents-ignore/deprecated-coordinators/cfn-coordinator-enterprise.md +0 -323
  175. package/.claude/agents-ignore/deprecated-coordinators/cfn-coordinator-mvp.md +0 -157
  176. package/.claude/agents-ignore/deprecated-coordinators/cfn-coordinator-standard.md +0 -229
  177. package/.claude/agents-ignore/deprecated-coordinators/cfn-coordinator-unified.md +0 -149
  178. package/.claude/agents-ignore/deprecated-coordinators/coordinator-hybrid.md +0 -231
  179. package/.claude/agents-ignore/deprecated-coordinators/gossip-coordinator.md +0 -165
  180. package/.claude/agents-ignore/deprecated-coordinators/hierarchical-coordinator.md +0 -91
  181. package/.claude/agents-ignore/deprecated-coordinators/mesh-coordinator.md +0 -131
  182. package/.claude/agents-ignore/deprecated-coordinators/task-coordinator.md +0 -105
  183. package/.claude/agents-ignore/deprecated-coordinators/test-coordinator.md +0 -141
  184. package/.claude/api-configs/config-current-zai-config.env +0 -62
  185. package/.claude/api-configs/config-test-zai-config.env +0 -62
  186. package/.claude/api-configs/env-backups/before-anthropic-20251020-025404.env +0 -62
  187. package/.claude/api-configs/env-backups/before-restore-20251020-025431.env +0 -62
  188. package/.claude/architecture/mesh-get-polling-design.md +0 -87
  189. package/.claude/architecture/mesh-get-polling-implementation.md +0 -89
  190. package/.claude/architecture/typescript-microservices.md +0 -50
  191. package/.claude/artifacts/reflection-merge-logs/cli-agent-spawning-v2.5.2-merge-report.md +0 -61
  192. package/.claude/cfn-loop-rules.md +0 -73
  193. package/.claude/cfn-mode-patterns.md +0 -571
  194. package/.claude/claude-md-backup-pre-skills.md +0 -15
  195. package/.claude/commands/agents/README.md +0 -10
  196. package/.claude/commands/agents/agent-capabilities.md +0 -21
  197. package/.claude/commands/agents/agent-coordination.md +0 -28
  198. package/.claude/commands/agents/agent-spawning.md +0 -28
  199. package/.claude/commands/agents/agent-types.md +0 -26
  200. package/.claude/commands/analysis/COMMAND_COMPLIANCE_REPORT.md +0 -54
  201. package/.claude/commands/analysis/README.md +0 -9
  202. package/.claude/commands/analysis/bottleneck-detect.md +0 -162
  203. package/.claude/commands/analysis/performance-bottlenecks.md +0 -59
  204. package/.claude/commands/analysis/performance-report.md +0 -25
  205. package/.claude/commands/analysis/token-efficiency.md +0 -45
  206. package/.claude/commands/analysis/token-usage.md +0 -25
  207. package/.claude/commands/automation/README.md +0 -9
  208. package/.claude/commands/automation/auto-agent.md +0 -122
  209. package/.claude/commands/automation/self-healing.md +0 -106
  210. package/.claude/commands/automation/session-memory.md +0 -90
  211. package/.claude/commands/automation/smart-agents.md +0 -73
  212. package/.claude/commands/automation/smart-spawn.md +0 -25
  213. package/.claude/commands/automation/workflow-select.md +0 -25
  214. package/.claude/commands/claude-md.js +0 -237
  215. package/.claude/commands/claude-soul.js +0 -28
  216. package/.claude/commands/cli-integration.js +0 -216
  217. package/.claude/commands/coordination/README.md +0 -9
  218. package/.claude/commands/coordination/agent-spawn.md +0 -25
  219. package/.claude/commands/coordination/coordination-system.md +0 -88
  220. package/.claude/commands/coordination/init.md +0 -44
  221. package/.claude/commands/coordination/orchestrate.md +0 -43
  222. package/.claude/commands/coordination/spawn.md +0 -45
  223. package/.claude/commands/coordination/swarm-init.md +0 -85
  224. package/.claude/commands/coordination/task-orchestrate.md +0 -25
  225. package/.claude/commands/github/README.md +0 -11
  226. package/.claude/commands/github/code-review-swarm.md +0 -514
  227. package/.claude/commands/github/code-review.md +0 -25
  228. package/.claude/commands/github/github-modes.md +0 -147
  229. package/.claude/commands/github/github-swarm.md +0 -121
  230. package/.claude/commands/github/issue-tracker.md +0 -292
  231. package/.claude/commands/github/issue-triage.md +0 -25
  232. package/.claude/commands/github/multi-repo-swarm.md +0 -519
  233. package/.claude/commands/github/pr-enhance.md +0 -26
  234. package/.claude/commands/github/pr-manager.md +0 -170
  235. package/.claude/commands/github/project-board-sync.md +0 -471
  236. package/.claude/commands/github/release-manager.md +0 -338
  237. package/.claude/commands/github/release-swarm.md +0 -544
  238. package/.claude/commands/github/repo-analyze.md +0 -25
  239. package/.claude/commands/github/repo-architect.md +0 -367
  240. package/.claude/commands/github/swarm-issue.md +0 -482
  241. package/.claude/commands/github/swarm-pr.md +0 -285
  242. package/.claude/commands/github/sync-coordinator.md +0 -301
  243. package/.claude/commands/github/workflow-automation.md +0 -442
  244. package/.claude/commands/github.js +0 -638
  245. package/.claude/commands/hive-mind/README.md +0 -17
  246. package/.claude/commands/hive-mind/hive-mind-consensus.md +0 -8
  247. package/.claude/commands/hive-mind/hive-mind-init.md +0 -18
  248. package/.claude/commands/hive-mind/hive-mind-memory.md +0 -8
  249. package/.claude/commands/hive-mind/hive-mind-metrics.md +0 -8
  250. package/.claude/commands/hive-mind/hive-mind-resume.md +0 -8
  251. package/.claude/commands/hive-mind/hive-mind-sessions.md +0 -8
  252. package/.claude/commands/hive-mind/hive-mind-spawn.md +0 -21
  253. package/.claude/commands/hive-mind/hive-mind-status.md +0 -8
  254. package/.claude/commands/hive-mind/hive-mind-stop.md +0 -8
  255. package/.claude/commands/hive-mind/hive-mind-wizard.md +0 -8
  256. package/.claude/commands/hive-mind/hive-mind.md +0 -27
  257. package/.claude/commands/hooks/README.md +0 -11
  258. package/.claude/commands/hooks/overview.md +0 -58
  259. package/.claude/commands/hooks/post-edit.md +0 -117
  260. package/.claude/commands/hooks/post-task.md +0 -112
  261. package/.claude/commands/hooks/pre-edit.md +0 -113
  262. package/.claude/commands/hooks/pre-task.md +0 -111
  263. package/.claude/commands/hooks/session-end.md +0 -118
  264. package/.claude/commands/hooks/session-start.md +0 -9
  265. package/.claude/commands/hooks/setup.md +0 -103
  266. package/.claude/commands/hooks.js +0 -651
  267. package/.claude/commands/index.js +0 -119
  268. package/.claude/commands/memory/README.md +0 -9
  269. package/.claude/commands/memory/memory-bank.md +0 -58
  270. package/.claude/commands/memory/memory-persist.md +0 -25
  271. package/.claude/commands/memory/memory-search.md +0 -25
  272. package/.claude/commands/memory/memory-usage.md +0 -25
  273. package/.claude/commands/memory/neural.md +0 -47
  274. package/.claude/commands/memory/usage.md +0 -46
  275. package/.claude/commands/monitoring/README.md +0 -9
  276. package/.claude/commands/monitoring/agent-metrics.md +0 -25
  277. package/.claude/commands/monitoring/agents.md +0 -44
  278. package/.claude/commands/monitoring/real-time-view.md +0 -25
  279. package/.claude/commands/monitoring/status.md +0 -46
  280. package/.claude/commands/monitoring/swarm-monitor.md +0 -25
  281. package/.claude/commands/neural.js +0 -572
  282. package/.claude/commands/optimization/README.md +0 -9
  283. package/.claude/commands/optimization/auto-topology.md +0 -62
  284. package/.claude/commands/optimization/cache-manage.md +0 -25
  285. package/.claude/commands/optimization/parallel-execute.md +0 -25
  286. package/.claude/commands/optimization/parallel-execution.md +0 -50
  287. package/.claude/commands/optimization/topology-optimize.md +0 -25
  288. package/.claude/commands/pair/README.md +0 -261
  289. package/.claude/commands/pair/commands.md +0 -546
  290. package/.claude/commands/pair/config.md +0 -510
  291. package/.claude/commands/pair/examples.md +0 -512
  292. package/.claude/commands/pair/modes.md +0 -348
  293. package/.claude/commands/pair/session.md +0 -407
  294. package/.claude/commands/pair/start.md +0 -209
  295. package/.claude/commands/parse-epic.js +0 -180
  296. package/.claude/commands/performance.js +0 -582
  297. package/.claude/commands/register-all-commands.js +0 -320
  298. package/.claude/commands/register-claude-md.js +0 -82
  299. package/.claude/commands/register-claude-soul.js +0 -80
  300. package/.claude/commands/sparc/analyzer.md +0 -52
  301. package/.claude/commands/sparc/architect.md +0 -53
  302. package/.claude/commands/sparc/batch-executor.md +0 -54
  303. package/.claude/commands/sparc/coder.md +0 -54
  304. package/.claude/commands/sparc/debugger.md +0 -54
  305. package/.claude/commands/sparc/designer.md +0 -53
  306. package/.claude/commands/sparc/documenter.md +0 -54
  307. package/.claude/commands/sparc/innovator.md +0 -54
  308. package/.claude/commands/sparc/memory-manager.md +0 -54
  309. package/.claude/commands/sparc/optimizer.md +0 -54
  310. package/.claude/commands/sparc/orchestrator.md +0 -132
  311. package/.claude/commands/sparc/researcher.md +0 -54
  312. package/.claude/commands/sparc/reviewer.md +0 -54
  313. package/.claude/commands/sparc/sparc-modes.md +0 -174
  314. package/.claude/commands/sparc/swarm-coordinator.md +0 -54
  315. package/.claude/commands/sparc/tdd.md +0 -54
  316. package/.claude/commands/sparc/tester.md +0 -54
  317. package/.claude/commands/sparc/workflow-manager.md +0 -54
  318. package/.claude/commands/sparc.js +0 -110
  319. package/.claude/commands/stream-chain/pipeline.md +0 -121
  320. package/.claude/commands/stream-chain/run.md +0 -70
  321. package/.claude/commands/swarm/README.md +0 -15
  322. package/.claude/commands/swarm/analysis.md +0 -95
  323. package/.claude/commands/swarm/development.md +0 -96
  324. package/.claude/commands/swarm/examples.md +0 -168
  325. package/.claude/commands/swarm/maintenance.md +0 -102
  326. package/.claude/commands/swarm/optimization.md +0 -117
  327. package/.claude/commands/swarm/research.md +0 -136
  328. package/.claude/commands/swarm/swarm-analysis.md +0 -8
  329. package/.claude/commands/swarm/swarm-background.md +0 -8
  330. package/.claude/commands/swarm/swarm-init.md +0 -19
  331. package/.claude/commands/swarm/swarm-modes.md +0 -8
  332. package/.claude/commands/swarm/swarm-monitor.md +0 -8
  333. package/.claude/commands/swarm/swarm-spawn.md +0 -19
  334. package/.claude/commands/swarm/swarm-status.md +0 -8
  335. package/.claude/commands/swarm/swarm-strategies.md +0 -8
  336. package/.claude/commands/swarm/swarm.md +0 -27
  337. package/.claude/commands/swarm/testing.md +0 -131
  338. package/.claude/commands/swarm.js +0 -423
  339. package/.claude/commands/testing/playwright-e2e.md +0 -288
  340. package/.claude/commands/training/README.md +0 -9
  341. package/.claude/commands/training/model-update.md +0 -25
  342. package/.claude/commands/training/neural-patterns.md +0 -74
  343. package/.claude/commands/training/neural-train.md +0 -25
  344. package/.claude/commands/training/pattern-learn.md +0 -25
  345. package/.claude/commands/training/specialization.md +0 -63
  346. package/.claude/commands/truth/start.md +0 -143
  347. package/.claude/commands/validate-commands.js +0 -223
  348. package/.claude/commands/verify/check.md +0 -50
  349. package/.claude/commands/verify/start.md +0 -128
  350. package/.claude/commands/workflow.js +0 -606
  351. package/.claude/commands/workflows/README.md +0 -9
  352. package/.claude/commands/workflows/development.md +0 -78
  353. package/.claude/commands/workflows/research.md +0 -63
  354. package/.claude/commands/workflows/workflow-create.md +0 -25
  355. package/.claude/commands/workflows/workflow-execute.md +0 -25
  356. package/.claude/commands/workflows/workflow-export.md +0 -25
  357. package/.claude/coordinator-feedback-pattern.md +0 -326
  358. package/.claude/coordinator-patterns.md +0 -126
  359. package/.claude/core/agent-manager.js +0 -80
  360. package/.claude/core/agent-manager.js.map +0 -1
  361. package/.claude/core/config.js +0 -1221
  362. package/.claude/core/config.js.map +0 -1
  363. package/.claude/core/event-bus.js +0 -136
  364. package/.claude/core/event-bus.js.map +0 -1
  365. package/.claude/core/index.js +0 -6
  366. package/.claude/core/index.js.map +0 -1
  367. package/.claude/core/json-persistence.js +0 -112
  368. package/.claude/core/json-persistence.js.map +0 -1
  369. package/.claude/core/logger.js +0 -245
  370. package/.claude/core/logger.js.map +0 -1
  371. package/.claude/core/orchestrator-fixed.js +0 -236
  372. package/.claude/core/orchestrator-fixed.js.map +0 -1
  373. package/.claude/core/orchestrator.js +0 -1136
  374. package/.claude/core/orchestrator.js.map +0 -1
  375. package/.claude/core/persistence.js +0 -185
  376. package/.claude/core/persistence.js.map +0 -1
  377. package/.claude/core/project-manager.js +0 -80
  378. package/.claude/core/project-manager.js.map +0 -1
  379. package/.claude/core/slash-command.js +0 -24
  380. package/.claude/core/version.js +0 -35
  381. package/.claude/core/version.js.map +0 -1
  382. package/.claude/helpers/checkpoint-manager.sh +0 -251
  383. package/.claude/helpers/github-safe.js +0 -106
  384. package/.claude/helpers/github-setup.sh +0 -28
  385. package/.claude/helpers/quick-start.sh +0 -19
  386. package/.claude/helpers/setup-mcp.sh +0 -18
  387. package/.claude/helpers/standard-checkpoint-hooks.sh +0 -179
  388. package/.claude/hooks.json +0 -21
  389. package/.claude/logs/sprint1-hybrid-routing-v2-decision.json +0 -18
  390. package/.claude/redis-agent-dependencies.md +0 -494
  391. package/.claude/root-claude-distribute/CLAUDE.md +0 -428
  392. package/.claude/settings.json +0 -129
  393. package/.claude/settings.local.json +0 -33
  394. package/.claude/skills/CFN-LOOP-VALIDATION.md +0 -202
  395. package/.claude/skills/REDIS-COORDINATION.md +0 -187
  396. package/.claude/skills/SKILL.md +0 -229
  397. package/.claude/skills/ace-system/SKILL.md +0 -364
  398. package/.claude/skills/ace-system/add-bullet.sh +0 -145
  399. package/.claude/skills/ace-system/invoke-context-curate.sh +0 -192
  400. package/.claude/skills/ace-system/invoke-context-inject.sh +0 -166
  401. package/.claude/skills/ace-system/invoke-context-query.sh +0 -127
  402. package/.claude/skills/ace-system/invoke-context-reflect.sh +0 -98
  403. package/.claude/skills/ace-system/invoke-context-stats.sh +0 -188
  404. package/.claude/skills/ace-system/log-merge.sh +0 -67
  405. package/.claude/skills/ace-system/query-reflections.sh +0 -35
  406. package/.claude/skills/ace-system/store-reflection.sh +0 -149
  407. package/.claude/skills/ace-system/test-ace-skill.sh +0 -312
  408. package/.claude/skills/ace-system/update-reflection.sh +0 -41
  409. package/.claude/skills/agent-execution/execute-agent.sh +0 -126
  410. package/.claude/skills/agent-spawning/SKILL.md +0 -135
  411. package/.claude/skills/agent-spawning/agent-selection-guide.md +0 -814
  412. package/.claude/skills/agent-spawning/check-dependencies.sh +0 -30
  413. package/.claude/skills/agent-spawning/spawn-agent.sh +0 -263
  414. package/.claude/skills/agent-spawning/spawn-templates.sh +0 -613
  415. package/.claude/skills/analytics/description-refinement-guide.md +0 -164
  416. package/.claude/skills/analytics/log-skill-invocation.js +0 -122
  417. package/.claude/skills/analytics/run-production-criteria-tests.sh +0 -126
  418. package/.claude/skills/analytics/skill-analytics-dashboard.js +0 -113
  419. package/.claude/skills/analytics/skill-invocation-hook.sh +0 -28
  420. package/.claude/skills/analytics/skill-invocations.sql +0 -58
  421. package/.claude/skills/analytics/test-corpus.json +0 -32
  422. package/.claude/skills/analytics/test-data-generator.js +0 -115
  423. package/.claude/skills/analytics/test-manual-override-rate.js +0 -285
  424. package/.claude/skills/analytics/validate-skill-selection.js +0 -188
  425. package/.claude/skills/cfn-loop-validation/SKILL.md +0 -263
  426. package/.claude/skills/cfn-loop-validation/check-dependencies.sh +0 -31
  427. package/.claude/skills/cfn-loop-validation/config.json +0 -161
  428. package/.claude/skills/cfn-loop-validation/consensus-calculator.js +0 -477
  429. package/.claude/skills/cfn-loop-validation/evidence-chain.sql +0 -163
  430. package/.claude/skills/cfn-loop-validation/examples/README.md +0 -453
  431. package/.claude/skills/cfn-loop-validation/examples/coordinator-full-cfn-loop.sh +0 -234
  432. package/.claude/skills/cfn-loop-validation/examples/coordinator-loop2-consensus.sh +0 -132
  433. package/.claude/skills/cfn-loop-validation/examples/coordinator-loop3-gate.sh +0 -115
  434. package/.claude/skills/cfn-loop-validation/examples/coordinator-redis-integration.sh +0 -186
  435. package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +0 -252
  436. package/.claude/skills/cfn-loop-validation/validate-iteration.sh +0 -134
  437. package/.claude/skills/cfn-loop-validation.sh +0 -70
  438. package/.claude/skills/config-management/SKILL.md +0 -34
  439. package/.claude/skills/config-management/check-dependencies.sh +0 -56
  440. package/.claude/skills/config-management/config.json +0 -32
  441. package/.claude/skills/config-management/manage-config.sh +0 -113
  442. package/.claude/skills/consensus-calculator.js +0 -45
  443. package/.claude/skills/event-bus/SKILL.md +0 -412
  444. package/.claude/skills/event-bus/config.json +0 -111
  445. package/.claude/skills/event-bus/eventbus-wrapper.cjs +0 -69
  446. package/.claude/skills/event-bus/invoke-event-publish.sh +0 -147
  447. package/.claude/skills/event-bus/invoke-event-subscribe.sh +0 -171
  448. package/.claude/skills/event-bus/invoke-lifecycle-track.sh +0 -201
  449. package/.claude/skills/event-bus/test-event-bus.sh +0 -280
  450. package/.claude/skills/evidence-chain.sql +0 -66
  451. package/.claude/skills/fleet-manager/SKILL.md +0 -412
  452. package/.claude/skills/fleet-manager/config.json +0 -60
  453. package/.claude/skills/fleet-manager/invoke-fleet-allocate.sh +0 -182
  454. package/.claude/skills/fleet-manager/invoke-fleet-balance.sh +0 -239
  455. package/.claude/skills/fleet-manager/invoke-fleet-metrics.sh +0 -193
  456. package/.claude/skills/fleet-manager/invoke-fleet-register.sh +0 -124
  457. package/.claude/skills/fleet-manager/test-fleet-manager.sh +0 -345
  458. package/.claude/skills/hook-pipeline/SKILL.md +0 -148
  459. package/.claude/skills/hook-pipeline/auto-resolve.sh +0 -66
  460. package/.claude/skills/hook-pipeline/check-dependencies.sh +0 -40
  461. package/.claude/skills/hook-pipeline/feedback-resolver.sh +0 -452
  462. package/.claude/skills/hook-pipeline/post-edit-handler.sh +0 -154
  463. package/.claude/skills/hook-pipeline/security-scan.json +0 -60
  464. package/.claude/skills/hook-pipeline/security-scanner.sh +0 -121
  465. package/.claude/skills/hook-pipeline/test-root-warning-resolution.sh +0 -148
  466. package/.claude/skills/hybrid-routing/SKILL.md +0 -46
  467. package/.claude/skills/hybrid-routing/check-dependencies.sh +0 -52
  468. package/.claude/skills/hybrid-routing/config.json +0 -26
  469. package/.claude/skills/hybrid-routing/spawn-worker.sh +0 -44
  470. package/.claude/skills/process-lifecycle/SKILL.md +0 -39
  471. package/.claude/skills/process-lifecycle/check-dependencies.sh +0 -58
  472. package/.claude/skills/process-lifecycle/config.json +0 -39
  473. package/.claude/skills/process-lifecycle/process-manager.sh +0 -144
  474. package/.claude/skills/redis-coordination/AGENT_LOGGING.md +0 -280
  475. package/.claude/skills/redis-coordination/BZPOPMIN_FIX_SUMMARY.md +0 -209
  476. package/.claude/skills/redis-coordination/HEARTBEAT.md +0 -57
  477. package/.claude/skills/redis-coordination/HEARTBEAT_MONITORING.md +0 -267
  478. package/.claude/skills/redis-coordination/README.md +0 -64
  479. package/.claude/skills/redis-coordination/SECURITY_REVIEW.md +0 -25
  480. package/.claude/skills/redis-coordination/SHUTDOWN_HANDLING.md +0 -164
  481. package/.claude/skills/redis-coordination/SKILL.md +0 -118
  482. package/.claude/skills/redis-coordination/agent-log.sh +0 -124
  483. package/.claude/skills/redis-coordination/agent-recovery.sh +0 -75
  484. package/.claude/skills/redis-coordination/cancel-swarm.sh +0 -221
  485. package/.claude/skills/redis-coordination/cfn-loop-relaunch.sh +0 -29
  486. package/.claude/skills/redis-coordination/check-dependencies.sh +0 -32
  487. package/.claude/skills/redis-coordination/complete-swarm.sh +0 -75
  488. package/.claude/skills/redis-coordination/config.json +0 -61
  489. package/.claude/skills/redis-coordination/examples/README.md +0 -73
  490. package/.claude/skills/redis-coordination/examples/grafana-dashboard.json +0 -352
  491. package/.claude/skills/redis-coordination/examples/hierarchical-pattern.sh +0 -127
  492. package/.claude/skills/redis-coordination/examples/mesh-pattern.sh +0 -171
  493. package/.claude/skills/redis-coordination/examples/timeout-handling.sh +0 -227
  494. package/.claude/skills/redis-coordination/examples/waiting-mode-pattern.sh +0 -239
  495. package/.claude/skills/redis-coordination/get-agent-timeout.sh +0 -177
  496. package/.claude/skills/redis-coordination/heartbeat-functions.sh +0 -137
  497. package/.claude/skills/redis-coordination/heartbeat-protocol.md +0 -106
  498. package/.claude/skills/redis-coordination/heartbeat.sh +0 -126
  499. package/.claude/skills/redis-coordination/init-swarm.sh +0 -148
  500. package/.claude/skills/redis-coordination/invoke-redis-pattern.sh +0 -220
  501. package/.claude/skills/redis-coordination/invoke-waiting-mode.sh +0 -417
  502. package/.claude/skills/redis-coordination/list-active-swarms.sh +0 -147
  503. package/.claude/skills/redis-coordination/metrics-export.sh +0 -674
  504. package/.claude/skills/redis-coordination/metrics-schema.json +0 -66
  505. package/.claude/skills/redis-coordination/metrics-storage.md +0 -31
  506. package/.claude/skills/redis-coordination/monitor-heartbeats.sh +0 -101
  507. package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh +0 -993
  508. package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup-1760949407 +0 -933
  509. package/.claude/skills/redis-coordination/phase4-wake-queue-test-report.md +0 -82
  510. package/.claude/skills/redis-coordination/priority-wake-mechanism.md +0 -75
  511. package/.claude/skills/redis-coordination/priority_wake.py +0 -134
  512. package/.claude/skills/redis-coordination/query-dlq.sh +0 -162
  513. package/.claude/skills/redis-coordination/redis-pattern.sh +0 -619
  514. package/.claude/skills/redis-coordination/send-heartbeat.sh +0 -73
  515. package/.claude/skills/redis-coordination/store-epic-context.sh +0 -123
  516. package/.claude/skills/redis-coordination/test-bzpopmin-fix.sh +0 -274
  517. package/.claude/skills/redis-coordination/test-cancel-swarm.sh +0 -276
  518. package/.claude/skills/redis-coordination/test-dlq.sh +0 -129
  519. package/.claude/skills/redis-coordination/test-iteration-feedback.sh +0 -320
  520. package/.claude/skills/redis-coordination/test-orchestrator.sh +0 -224
  521. package/.claude/skills/redis-coordination/test-priority-wake-phase4-unix.sh +0 -148
  522. package/.claude/skills/redis-coordination/test-priority-wake-phase4.sh +0 -163
  523. package/.claude/skills/redis-coordination/test-priority-wake.sh +0 -138
  524. package/.claude/skills/redis-coordination/test-quick-fix.sh +0 -81
  525. package/.claude/skills/redis-coordination/test-quorum-absolute.sh +0 -45
  526. package/.claude/skills/redis-coordination/test-quorum-fallback.sh +0 -68
  527. package/.claude/skills/redis-coordination/test-quorum-percentage.sh +0 -56
  528. package/.claude/skills/redis-coordination/test-quorum-with-retry.sh +0 -81
  529. package/.claude/skills/redis-coordination/test-quorum.sh +0 -57
  530. package/.claude/skills/redis-coordination/test-shutdown-handling.sh +0 -187
  531. package/.claude/skills/redis-coordination/test-shutdown.sh +0 -160
  532. package/.claude/skills/redis-coordination/test-utils-unix.sh +0 -97
  533. package/.claude/skills/redis-coordination/test-utils.sh +0 -97
  534. package/.claude/skills/redis-coordination/test-waiting-mode.sh +0 -59
  535. package/.claude/skills/redis-coordination/tests/dlq-functionality-test.sh +0 -102
  536. package/.claude/skills/redis-coordination/tests/edge-cases-test.sh +0 -99
  537. package/.claude/skills/redis-coordination/tests/integration-test.sh +0 -170
  538. package/.claude/skills/redis-coordination/tests/retry-mechanism-test.sh +0 -82
  539. package/.claude/skills/redis-coordination/tests/run-test-suite.sh +0 -92
  540. package/.claude/skills/redis-coordination/tests/test-heartbeat-monitoring.sh +0 -418
  541. package/.claude/skills/redis-coordination/tests/test-heartbeat-simple.sh +0 -124
  542. package/.claude/skills/redis-coordination/tests/test-utils.sh +0 -122
  543. package/.claude/skills/skill-builder/SKILL.md +0 -910
  544. package/.claude/skills/sqlite-memory/IMPLEMENTATION_REPORT.md +0 -393
  545. package/.claude/skills/sqlite-memory/QUICK_REFERENCE.md +0 -204
  546. package/.claude/skills/sqlite-memory/SKILL.md +0 -415
  547. package/.claude/skills/sqlite-memory/acl-queries.sql +0 -452
  548. package/.claude/skills/sqlite-memory/check-dependencies.sh +0 -36
  549. package/.claude/skills/sqlite-memory/config.json +0 -45
  550. package/.claude/skills/sqlite-memory/memory-cli.sh +0 -88
  551. package/.claude/skills/sqlite-memory/test-state-persistence.js +0 -187
  552. package/.claude/skills/sqlite-memory/ttl-cleanup.sh +0 -274
  553. package/.claude/skills/test-execution/SKILL.md +0 -128
  554. package/.claude/skills/test-execution/check-dependencies.sh +0 -36
  555. package/.claude/skills/test-execution/test-cache-reader.sh +0 -134
  556. package/.claude/skills/test-execution/test-concurrent-conflicts.sh +0 -115
  557. package/.claude/skills/test-execution/test-coordinator-pattern.sh +0 -109
  558. package/.claude/skills/test-execution-coordinator-pattern.md +0 -228
  559. package/.claude/skills/transparency-middleware/Cargo.toml +0 -18
  560. package/.claude/skills/transparency-middleware/SECURITY.md +0 -41
  561. package/.claude/skills/transparency-middleware/SKILL.md +0 -91
  562. package/.claude/skills/transparency-middleware/TEST_RESULTS.md +0 -174
  563. package/.claude/skills/transparency-middleware/config.json +0 -31
  564. package/.claude/skills/transparency-middleware/examples/basic-usage.ts +0 -39
  565. package/.claude/skills/transparency-middleware/examples/batch-processing.ts +0 -52
  566. package/.claude/skills/transparency-middleware/examples/custom-filtering.ts +0 -61
  567. package/.claude/skills/transparency-middleware/invoke-transparency-filter.sh +0 -98
  568. package/.claude/skills/transparency-middleware/invoke-transparency-init.sh +0 -224
  569. package/.claude/skills/transparency-middleware/invoke-transparency-level.sh +0 -333
  570. package/.claude/skills/transparency-middleware/invoke-transparency-metrics.sh +0 -345
  571. package/.claude/skills/transparency-middleware/invoke-transparency-observe.sh +0 -140
  572. package/.claude/skills/transparency-middleware/invoke-transparency-stop.sh +0 -235
  573. package/.claude/skills/transparency-middleware/memory_query.rs +0 -85
  574. package/.claude/skills/transparency-middleware/memory_repository.rs +0 -140
  575. package/.claude/skills/transparency-middleware/memory_schema.rs +0 -64
  576. package/.claude/skills/transparency-middleware/middleware-config.sh +0 -29
  577. package/.claude/skills/transparency-middleware/performance-benchmark.sh +0 -79
  578. package/.claude/skills/transparency-middleware/test-e2e.sh +0 -406
  579. package/.claude/skills/transparency-middleware/test-integration.sh +0 -162
  580. package/.claude/skills/transparency-middleware/test-transparency-skill.sh +0 -368
  581. package/.claude/skills/transparency-middleware/test-transparency-skill.sh.unix +0 -126
  582. package/.claude/skills/transparency-middleware/tests/input-validation.sh +0 -93
  583. package/.claude/skills/transparency-middleware/wrap-agent.sh +0 -132
  584. package/.claude/skills/web-portal/DESIGN.md +0 -117
  585. package/.claude/skills/web-portal/SKILL.md +0 -679
  586. package/.claude/skills/web-portal/invoke-portal-agents.sh +0 -129
  587. package/.claude/skills/web-portal/invoke-portal-dashboard.sh +0 -85
  588. package/.claude/skills/web-portal/invoke-portal-events.sh +0 -125
  589. package/.claude/skills/web-portal/invoke-portal-metrics.sh +0 -112
  590. package/.claude/skills/web-portal/invoke-portal-start.sh +0 -135
  591. package/.claude/skills/web-portal/invoke-portal-stop.sh +0 -121
  592. package/.claude/skills/web-portal/test-web-portal-skill.sh +0 -51
  593. package/.claude/skills/web-portal/validate-deployment.sh +0 -85
  594. package/.claude/slash-commands.json +0 -92
  595. package/.claude/spawn-pattern-examples.md +0 -500
  596. package/.claude/sprint-configs/cfn-naming-standardization.json +0 -729
  597. package/.claude/sprint-reports/sprint-1.4-self-correction-monitoring.json +0 -64
  598. package/.claude/swarm-memory.db +0 -0
  599. package/.claude/templates/agent-optimization-plan.md +0 -439
  600. package/.claude/templates/bulk-optimization-strategy.md +0 -367
  601. package/.claude/templates/cfn-loop-mechanics.md +0 -80
  602. package/.claude/templates/coordinator-patterns.md +0 -75
  603. package/.claude/templates/memory-operations.md +0 -200
  604. package/.claude/templates/post-edit-validation.md +0 -109
  605. package/.claude/templates/redis-coordination.md +0 -140
  606. package/.claude/templates/remaining-agent-analysis.md +0 -121
  607. package/.claude/templates/swarm-coordination.md +0 -103
  608. package/.claude/templates/team-dynamics.md +0 -82
  609. package/CLAUDE.md +0 -502
  610. package/dist/cli/cli-agent-context.test.js +0 -451
  611. package/dist/cli/cli-agent-context.test.js.map +0 -1
  612. package/dist/coordination/fleet-manager.test.js +0 -141
  613. package/dist/coordination/fleet-manager.test.js.map +0 -1
  614. package/dist/middleware/transparency-middleware.test.js +0 -184
  615. package/dist/middleware/transparency-middleware.test.js.map +0 -1
  616. package/readme/CLAUDE.md +0 -429
  617. /package/.claude/agents/{core-agents → cfn-dev-team/developers}/researcher.md +0 -0
  618. /package/.claude/commands/{README.md → cfn/README.md} +0 -0
  619. /package/.claude/commands/{auto-compact.md → cfn/auto-compact.md} +0 -0
  620. /package/.claude/commands/{cfn-claude-sync.md → cfn/cfn-claude-sync.md} +0 -0
  621. /package/.claude/commands/{cfn-loop-document.md → cfn/cfn-loop-document.md} +0 -0
  622. /package/.claude/commands/{claude-md.md → cfn/claude-md.md} +0 -0
  623. /package/.claude/commands/{claude-soul.md → cfn/claude-soul.md} +0 -0
  624. /package/.claude/commands/{context-query.md → cfn/context-query.md} +0 -0
  625. /package/.claude/commands/{cost-savings-off.md → cfn/cost-savings-off.md} +0 -0
  626. /package/.claude/commands/{cost-savings-on.md → cfn/cost-savings-on.md} +0 -0
  627. /package/.claude/commands/{cost-savings-status.md → cfn/cost-savings-status.md} +0 -0
  628. /package/.claude/commands/{custom-routing-activate.md → cfn/custom-routing-activate.md} +0 -0
  629. /package/.claude/commands/{custom-routing-deactivate.md → cfn/custom-routing-deactivate.md} +0 -0
  630. /package/.claude/commands/{dependency-recommendations.md → cfn/dependency-recommendations.md} +0 -0
  631. /package/.claude/commands/{fullstack.md → cfn/fullstack.md} +0 -0
  632. /package/.claude/commands/{github-commit.md → cfn/github-commit.md} +0 -0
  633. /package/.claude/commands/{github.md → cfn/github.md} +0 -0
  634. /package/.claude/commands/{hello-world-tests.md → cfn/hello-world-tests.md} +0 -0
  635. /package/.claude/commands/{hooks.md → cfn/hooks.md} +0 -0
  636. /package/.claude/commands/{launch-web-dashboard.md → cfn/launch-web-dashboard.md} +0 -0
  637. /package/.claude/commands/{metrics-summary.md → cfn/metrics-summary.md} +0 -0
  638. /package/.claude/commands/{neural.md → cfn/neural.md} +0 -0
  639. /package/.claude/commands/{parse-epic.md → cfn/parse-epic.md} +0 -0
  640. /package/.claude/commands/{performance.md → cfn/performance.md} +0 -0
  641. /package/.claude/commands/{sparc.md → cfn/sparc.md} +0 -0
  642. /package/.claude/commands/{suggest-improvements.md → cfn/suggest-improvements.md} +0 -0
  643. /package/.claude/commands/{suggest-templates.md → cfn/suggest-templates.md} +0 -0
  644. /package/.claude/commands/{swarm.md → cfn/swarm.md} +0 -0
  645. /package/.claude/commands/{switch-api.md → cfn/switch-api.md} +0 -0
  646. /package/.claude/commands/{workflow.md → cfn/workflow.md} +0 -0
  647. /package/.claude/hooks/{invoke-post-edit.sh → cfn-invoke-post-edit.sh} +0 -0
  648. /package/.claude/hooks/{post-edit.config.json → cfn-post-edit.config.json} +0 -0
  649. /package/.claude/skills/{agent-spawning → cfn-agent-spawning}/README.md +0 -0
  650. /package/.claude/skills/{analytics → cfn-analytics}/README.md +0 -0
  651. /package/.claude/skills/{config-management → cfn-config-management}/README.md +0 -0
  652. /package/.claude/skills/{event-bus → cfn-event-bus}/README.md +0 -0
  653. /package/.claude/skills/{fleet-manager → cfn-fleet-manager}/README.md +0 -0
  654. /package/.claude/skills/{hook-pipeline → cfn-hook-pipeline}/README.md +0 -0
  655. /package/.claude/skills/{hybrid-routing → cfn-hybrid-routing}/README.md +0 -0
  656. /package/.claude/skills/{process-lifecycle → cfn-process-lifecycle}/README.md +0 -0
  657. /package/.claude/skills/{sqlite-memory → cfn-sqlite-memory}/README.md +0 -0
  658. /package/.claude/skills/{test-execution → cfn-test-execution}/README.md +0 -0
  659. /package/.claude/skills/{transparency-middleware → cfn-transparency-middleware}/README.md +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/cfn-context.ts"],"sourcesContent":["#!/usr/bin/env node\r\n/**\r\n * cfn-context - ACE context operations\r\n *\r\n * Usage:\r\n * cfn-context reflect Run ACE reflection\r\n * cfn-context curate Merge contexts\r\n * cfn-context inject Inject into tasks\r\n * cfn-context query Search contexts\r\n * cfn-context stats Show analytics\r\n */\r\n\r\nimport { spawn } from 'child_process';\r\n\r\ninterface ContextOptions {\r\n category?: string;\r\n tags?: string;\r\n confidence?: number;\r\n limit?: number;\r\n taskId?: string;\r\n phase?: string;\r\n}\r\n\r\nfunction parseArgs(args: string[]): { subcommand: string; query?: string; options: ContextOptions } {\r\n const subcommand = args[0] || 'stats';\r\n let query: string | undefined;\r\n const options: ContextOptions = {};\r\n\r\n // For query subcommand, first arg after subcommand is the query\r\n if (subcommand === 'query' && args[1] && !args[1].startsWith('--')) {\r\n query = args[1];\r\n }\r\n\r\n for (let i = 1; i < args.length; i += 2) {\r\n const key = args[i];\r\n const value = args[i + 1];\r\n\r\n switch (key) {\r\n case '--category':\r\n options.category = value;\r\n break;\r\n case '--tags':\r\n options.tags = value;\r\n break;\r\n case '--confidence':\r\n options.confidence = parseFloat(value);\r\n break;\r\n case '--limit':\r\n options.limit = parseInt(value, 10);\r\n break;\r\n case '--task-id':\r\n options.taskId = value;\r\n break;\r\n case '--phase':\r\n options.phase = value;\r\n break;\r\n }\r\n }\r\n\r\n return { subcommand, query, options };\r\n}\r\n\r\nasync function executeContext(subcommand: string, query: string | undefined, options: ContextOptions): Promise<void> {\r\n let slashCommand: string;\r\n\r\n switch (subcommand) {\r\n case 'reflect':\r\n slashCommand = '/context-reflect';\r\n if (options.taskId) slashCommand += ` --task-id ${options.taskId}`;\r\n break;\r\n\r\n case 'curate':\r\n slashCommand = '/context-curate';\r\n break;\r\n\r\n case 'inject':\r\n slashCommand = '/context-inject';\r\n if (options.taskId) slashCommand += ` --task-id ${options.taskId}`;\r\n if (options.phase) slashCommand += ` --phase ${options.phase}`;\r\n break;\r\n\r\n case 'query':\r\n if (!query) {\r\n console.error('Error: Query string required for query subcommand');\r\n console.error('Usage: cfn-context query <search-term> [options]');\r\n process.exit(1);\r\n }\r\n slashCommand = `/context-query \"${query}\"`;\r\n if (options.category) slashCommand += ` --category ${options.category}`;\r\n if (options.tags) slashCommand += ` --tags ${options.tags}`;\r\n if (options.confidence) slashCommand += ` --confidence ${options.confidence}`;\r\n break;\r\n\r\n case 'stats':\r\n slashCommand = '/context-stats';\r\n break;\r\n\r\n default:\r\n console.error(`Unknown subcommand: ${subcommand}`);\r\n console.error('Valid subcommands: reflect, curate, inject, query, stats');\r\n process.exit(1);\r\n }\r\n\r\n console.log(`[cfn-context] Executing: ${slashCommand}`);\r\n console.log('[cfn-context] Note: This delegates to claude-flow-novice slash commands');\r\n console.log('[cfn-context] Use Claude Code CLI for actual execution\\n');\r\n\r\n console.log('To execute this context operation, run in Claude Code:');\r\n console.log(` ${slashCommand}`);\r\n}\r\n\r\nfunction showHelp(): void {\r\n console.log(`\r\ncfn-context - ACE Context Operations CLI\r\n\r\nUsage:\r\n cfn-context reflect [options] Run ACE reflection on recent tasks\r\n cfn-context curate Merge reflection deltas into context\r\n cfn-context inject [options] Inject context into tasks\r\n cfn-context query <term> [options] Search contexts\r\n cfn-context stats Show context analytics\r\n\r\nOptions (reflect):\r\n --task-id <id> Reflect on specific task\r\n\r\nOptions (inject):\r\n --task-id <id> Inject into specific task\r\n --phase <name> Inject based on phase\r\n\r\nOptions (query):\r\n --category <cat> Filter by category\r\n --tags <tags> Filter by tags (comma-separated)\r\n --confidence <n> Minimum confidence score (0-1)\r\n --limit <n> Max results\r\n\r\nExamples:\r\n cfn-context reflect --task-id task-123\r\n cfn-context curate\r\n cfn-context inject --phase implementation\r\n cfn-context query \"redis coordination\" --category technical\r\n cfn-context stats\r\n\r\nContext Categories:\r\n technical Technical patterns and solutions\r\n architectural Design decisions and patterns\r\n operational Deployment and operations\r\n quality Testing and quality practices\r\n\r\nFor more info: https://docs.claude.com/cfn-context\r\n `);\r\n}\r\n\r\nasync function main(args: string[] = process.argv.slice(2)): Promise<void> {\r\n if (args.includes('--help') || args.includes('-h')) {\r\n showHelp();\r\n return;\r\n }\r\n\r\n const { subcommand, query, options } = parseArgs(args);\r\n await executeContext(subcommand, query, options);\r\n}\r\n\r\n// Run if called directly\r\nconst isMainModule = import.meta.url.endsWith(process.argv[1]?.replace(/\\\\/g, '/') || '');\r\nif (isMainModule) {\r\n main().catch((err) => {\r\n console.error('[cfn-context] Fatal error:', err);\r\n process.exit(1);\r\n });\r\n}\r\n\r\nexport { main };\r\n"],"names":["parseArgs","args","subcommand","query","options","startsWith","i","length","key","value","category","tags","confidence","parseFloat","limit","parseInt","taskId","phase","executeContext","slashCommand","console","error","process","exit","log","showHelp","main","argv","slice","includes","isMainModule","url","endsWith","replace","catch","err"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/cli/cfn-context.ts"],"sourcesContent":["#!/usr/bin/env node\r\n/**\r\n * cfn-context - Epic context operations for CLI agents\r\n *\r\n * Provides functions to:\r\n * 1. Load epic/phase context from Redis\r\n * 2. Store epic/phase context to Redis\r\n * 3. Format context for agent system prompts\r\n *\r\n * Also provides ACE context operations CLI:\r\n * cfn-context reflect Run ACE reflection\r\n * cfn-context curate Merge contexts\r\n * cfn-context inject Inject into tasks\r\n * cfn-context query Search contexts\r\n * cfn-context stats Show analytics\r\n */\r\n\r\nimport { spawn } from 'child_process';\r\nimport { exec } from 'child_process';\r\nimport { promisify } from 'util';\r\n\r\nconst execAsync = promisify(exec);\r\n\r\n// ============================================================================\r\n// Epic Context Interfaces (for CLI Agent System Prompts)\r\n// ============================================================================\r\n\r\nexport interface EpicContextData {\r\n epicGoal?: string;\r\n epicName?: string;\r\n inScope?: string[];\r\n outOfScope?: string[];\r\n phases?: string[];\r\n currentPhase?: string;\r\n riskProfile?: string;\r\n stakeholders?: string[];\r\n references?: 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 PhaseContextData {\r\n phaseName?: 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 SuccessCriteriaData {\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\n// ============================================================================\r\n// Redis Epic Context Functions\r\n// ============================================================================\r\n\r\n/**\r\n * Load epic context from Redis\r\n *\r\n * Redis key: swarm:{taskId}:epic-context\r\n */\r\nexport async function loadEpicContext(taskId: string): Promise<EpicContextData | null> {\r\n try {\r\n const { stdout } = await execAsync(`redis-cli get \"swarm:${taskId}:epic-context\"`);\r\n const result = stdout.trim();\r\n\r\n if (result === '(nil)' || !result) {\r\n return null;\r\n }\r\n\r\n return JSON.parse(result) as EpicContextData;\r\n } catch (error) {\r\n console.warn(`[cfn-context] Failed to load epic context for task ${taskId}:`, error);\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Load phase context from Redis\r\n *\r\n * Redis key: swarm:{taskId}:phase-context\r\n */\r\nexport async function loadPhaseContext(taskId: string): Promise<PhaseContextData | null> {\r\n try {\r\n const { stdout } = await execAsync(`redis-cli get \"swarm:${taskId}:phase-context\"`);\r\n const result = stdout.trim();\r\n\r\n if (result === '(nil)' || !result) {\r\n return null;\r\n }\r\n\r\n return JSON.parse(result) as PhaseContextData;\r\n } catch (error) {\r\n console.warn(`[cfn-context] Failed to load phase context for task ${taskId}:`, error);\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Load success criteria from Redis\r\n *\r\n * Redis key: swarm:{taskId}:success-criteria\r\n */\r\nexport async function loadSuccessCriteria(taskId: string): Promise<SuccessCriteriaData | null> {\r\n try {\r\n const { stdout } = await execAsync(`redis-cli get \"swarm:${taskId}:success-criteria\"`);\r\n const result = stdout.trim();\r\n\r\n if (result === '(nil)' || !result) {\r\n return null;\r\n }\r\n\r\n return JSON.parse(result) as SuccessCriteriaData;\r\n } catch (error) {\r\n console.warn(`[cfn-context] Failed to load success criteria for task ${taskId}:`, error);\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Store epic context to Redis\r\n *\r\n * Redis key: swarm:{taskId}:epic-context\r\n * TTL: 7 days\r\n */\r\nexport async function storeEpicContext(taskId: string, context: EpicContextData): Promise<boolean> {\r\n try {\r\n const contextJson = JSON.stringify(context);\r\n await execAsync(`redis-cli setex \"swarm:${taskId}:epic-context\" 604800 '${contextJson.replace(/'/g, \"\\\\'\")}'`);\r\n console.log(`[cfn-context] Stored epic context for task ${taskId}`);\r\n return true;\r\n } catch (error) {\r\n console.error(`[cfn-context] Failed to store epic context for task ${taskId}:`, error);\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Store phase context to Redis\r\n *\r\n * Redis key: swarm:{taskId}:phase-context\r\n * TTL: 7 days\r\n */\r\nexport async function storePhaseContext(taskId: string, context: PhaseContextData): Promise<boolean> {\r\n try {\r\n const contextJson = JSON.stringify(context);\r\n await execAsync(`redis-cli setex \"swarm:${taskId}:phase-context\" 604800 '${contextJson.replace(/'/g, \"\\\\'\")}'`);\r\n console.log(`[cfn-context] Stored phase context for task ${taskId}`);\r\n return true;\r\n } catch (error) {\r\n console.error(`[cfn-context] Failed to store phase context for task ${taskId}:`, error);\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Store success criteria to Redis\r\n *\r\n * Redis key: swarm:{taskId}:success-criteria\r\n * TTL: 7 days\r\n */\r\nexport async function storeSuccessCriteria(taskId: string, criteria: SuccessCriteriaData): Promise<boolean> {\r\n try {\r\n const criteriaJson = JSON.stringify(criteria);\r\n await execAsync(`redis-cli setex \"swarm:${taskId}:success-criteria\" 604800 '${criteriaJson.replace(/'/g, \"\\\\'\")}'`);\r\n console.log(`[cfn-context] Stored success criteria for task ${taskId}`);\r\n return true;\r\n } catch (error) {\r\n console.error(`[cfn-context] Failed to store success criteria for task ${taskId}:`, error);\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Format epic context as markdown for system prompt\r\n */\r\nexport function formatEpicContextForPrompt(epic: EpicContextData): 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.epicName) {\r\n sections.push(`**Epic:** ${epic.epicName}`);\r\n sections.push('');\r\n }\r\n\r\n if (epic.epicGoal) {\r\n sections.push('**Goal:**');\r\n sections.push(epic.epicGoal);\r\n sections.push('');\r\n }\r\n\r\n if (epic.currentPhase) {\r\n sections.push(`**Current Phase:** ${epic.currentPhase}`);\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.references && epic.references.length > 0) {\r\n sections.push('**References:**');\r\n for (const ref of epic.references) {\r\n sections.push(`- ${ref}`);\r\n }\r\n sections.push('');\r\n }\r\n\r\n return sections.join('\\n');\r\n}\r\n\r\n// ============================================================================\r\n// ACE Context Operations CLI (Original Functionality)\r\n// ============================================================================\r\n\r\ninterface ContextOptions {\r\n category?: string;\r\n tags?: string;\r\n confidence?: number;\r\n limit?: number;\r\n taskId?: string;\r\n phase?: string;\r\n}\r\n\r\nfunction parseArgs(args: string[]): { subcommand: string; query?: string; options: ContextOptions } {\r\n const subcommand = args[0] || 'stats';\r\n let query: string | undefined;\r\n const options: ContextOptions = {};\r\n\r\n // For query subcommand, first arg after subcommand is the query\r\n if (subcommand === 'query' && args[1] && !args[1].startsWith('--')) {\r\n query = args[1];\r\n }\r\n\r\n for (let i = 1; i < args.length; i += 2) {\r\n const key = args[i];\r\n const value = args[i + 1];\r\n\r\n switch (key) {\r\n case '--category':\r\n options.category = value;\r\n break;\r\n case '--tags':\r\n options.tags = value;\r\n break;\r\n case '--confidence':\r\n options.confidence = parseFloat(value);\r\n break;\r\n case '--limit':\r\n options.limit = parseInt(value, 10);\r\n break;\r\n case '--task-id':\r\n options.taskId = value;\r\n break;\r\n case '--phase':\r\n options.phase = value;\r\n break;\r\n }\r\n }\r\n\r\n return { subcommand, query, options };\r\n}\r\n\r\nasync function executeContext(subcommand: string, query: string | undefined, options: ContextOptions): Promise<void> {\r\n let slashCommand: string;\r\n\r\n switch (subcommand) {\r\n case 'reflect':\r\n slashCommand = '/context-reflect';\r\n if (options.taskId) slashCommand += ` --task-id ${options.taskId}`;\r\n break;\r\n\r\n case 'curate':\r\n slashCommand = '/context-curate';\r\n break;\r\n\r\n case 'inject':\r\n slashCommand = '/context-inject';\r\n if (options.taskId) slashCommand += ` --task-id ${options.taskId}`;\r\n if (options.phase) slashCommand += ` --phase ${options.phase}`;\r\n break;\r\n\r\n case 'query':\r\n if (!query) {\r\n console.error('Error: Query string required for query subcommand');\r\n console.error('Usage: cfn-context query <search-term> [options]');\r\n process.exit(1);\r\n }\r\n slashCommand = `/context-query \"${query}\"`;\r\n if (options.category) slashCommand += ` --category ${options.category}`;\r\n if (options.tags) slashCommand += ` --tags ${options.tags}`;\r\n if (options.confidence) slashCommand += ` --confidence ${options.confidence}`;\r\n break;\r\n\r\n case 'stats':\r\n slashCommand = '/context-stats';\r\n break;\r\n\r\n default:\r\n console.error(`Unknown subcommand: ${subcommand}`);\r\n console.error('Valid subcommands: reflect, curate, inject, query, stats');\r\n process.exit(1);\r\n }\r\n\r\n console.log(`[cfn-context] Executing: ${slashCommand}`);\r\n console.log('[cfn-context] Note: This delegates to claude-flow-novice slash commands');\r\n console.log('[cfn-context] Use Claude Code CLI for actual execution\\n');\r\n\r\n console.log('To execute this context operation, run in Claude Code:');\r\n console.log(` ${slashCommand}`);\r\n}\r\n\r\nfunction showHelp(): void {\r\n console.log(`\r\ncfn-context - ACE Context Operations CLI\r\n\r\nUsage:\r\n cfn-context reflect [options] Run ACE reflection on recent tasks\r\n cfn-context curate Merge reflection deltas into context\r\n cfn-context inject [options] Inject context into tasks\r\n cfn-context query <term> [options] Search contexts\r\n cfn-context stats Show context analytics\r\n\r\nOptions (reflect):\r\n --task-id <id> Reflect on specific task\r\n\r\nOptions (inject):\r\n --task-id <id> Inject into specific task\r\n --phase <name> Inject based on phase\r\n\r\nOptions (query):\r\n --category <cat> Filter by category\r\n --tags <tags> Filter by tags (comma-separated)\r\n --confidence <n> Minimum confidence score (0-1)\r\n --limit <n> Max results\r\n\r\nExamples:\r\n cfn-context reflect --task-id task-123\r\n cfn-context curate\r\n cfn-context inject --phase implementation\r\n cfn-context query \"redis coordination\" --category technical\r\n cfn-context stats\r\n\r\nContext Categories:\r\n technical Technical patterns and solutions\r\n architectural Design decisions and patterns\r\n operational Deployment and operations\r\n quality Testing and quality practices\r\n\r\nFor more info: https://docs.claude.com/cfn-context\r\n `);\r\n}\r\n\r\nasync function main(args: string[] = process.argv.slice(2)): Promise<void> {\r\n if (args.includes('--help') || args.includes('-h')) {\r\n showHelp();\r\n return;\r\n }\r\n\r\n const { subcommand, query, options } = parseArgs(args);\r\n await executeContext(subcommand, query, options);\r\n}\r\n\r\n// Run if called directly\r\nconst isMainModule = import.meta.url.endsWith(process.argv[1]?.replace(/\\\\/g, '/') || '');\r\nif (isMainModule) {\r\n main().catch((err) => {\r\n console.error('[cfn-context] Fatal error:', err);\r\n process.exit(1);\r\n });\r\n}\r\n\r\nexport { main };\r\n"],"names":["exec","promisify","execAsync","loadEpicContext","taskId","stdout","result","trim","JSON","parse","error","console","warn","loadPhaseContext","loadSuccessCriteria","storeEpicContext","context","contextJson","stringify","replace","log","storePhaseContext","storeSuccessCriteria","criteria","criteriaJson","formatEpicContextForPrompt","epic","epicGoal","inScope","outOfScope","sections","push","epicName","currentPhase","length","item","references","ref","join","parseArgs","args","subcommand","query","options","startsWith","i","key","value","category","tags","confidence","parseFloat","limit","parseInt","phase","executeContext","slashCommand","process","exit","showHelp","main","argv","slice","includes","isMainModule","url","endsWith","catch","err"],"mappings":"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"}
@@ -0,0 +1,159 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * CLI utility for managing conversation forks
4
+ *
5
+ * Usage:
6
+ * npx cfn-fork create --task-id <id> --agent-id <id> --iteration <n>
7
+ * npx cfn-fork get --task-id <id> --agent-id <id>
8
+ * npx cfn-fork list --task-id <id> --agent-id <id>
9
+ * npx cfn-fork delete --task-id <id> --agent-id <id> --fork-id <id>
10
+ * npx cfn-fork stats --task-id <id> --agent-id <id> [--fork-id <id>]
11
+ */ import { createFork, getCurrentFork, listForks, deleteFork, getConversationStats, getForkMetadata } from './conversation-fork.js';
12
+ function parseArgs() {
13
+ const args = process.argv.slice(2);
14
+ const result = {
15
+ command: args[0] || 'help'
16
+ };
17
+ for(let i = 1; i < args.length; i += 2){
18
+ const key = args[i].replace(/^--/, '');
19
+ const value = args[i + 1];
20
+ switch(key){
21
+ case 'task-id':
22
+ result.taskId = value;
23
+ break;
24
+ case 'agent-id':
25
+ result.agentId = value;
26
+ break;
27
+ case 'iteration':
28
+ result.iteration = parseInt(value, 10);
29
+ break;
30
+ case 'fork-id':
31
+ result.forkId = value;
32
+ break;
33
+ }
34
+ }
35
+ return result;
36
+ }
37
+ async function main() {
38
+ const args = parseArgs();
39
+ try {
40
+ switch(args.command){
41
+ case 'create':
42
+ {
43
+ if (!args.taskId || !args.agentId || !args.iteration) {
44
+ console.error('Error: --task-id, --agent-id, and --iteration are required');
45
+ process.exit(1);
46
+ }
47
+ const forkId = await createFork(args.taskId, args.agentId, args.iteration);
48
+ console.log(forkId); // Output just the fork ID for easy capture in bash
49
+ break;
50
+ }
51
+ case 'get':
52
+ {
53
+ if (!args.taskId || !args.agentId) {
54
+ console.error('Error: --task-id and --agent-id are required');
55
+ process.exit(1);
56
+ }
57
+ const forkId = await getCurrentFork(args.taskId, args.agentId);
58
+ if (forkId) {
59
+ console.log(forkId);
60
+ } else {
61
+ console.log('(no fork)');
62
+ }
63
+ break;
64
+ }
65
+ case 'list':
66
+ {
67
+ if (!args.taskId || !args.agentId) {
68
+ console.error('Error: --task-id and --agent-id are required');
69
+ process.exit(1);
70
+ }
71
+ const forks = await listForks(args.taskId, args.agentId);
72
+ if (forks.length === 0) {
73
+ console.log('No forks found');
74
+ } else {
75
+ console.log(JSON.stringify(forks, null, 2));
76
+ }
77
+ break;
78
+ }
79
+ case 'delete':
80
+ {
81
+ if (!args.taskId || !args.agentId || !args.forkId) {
82
+ console.error('Error: --task-id, --agent-id, and --fork-id are required');
83
+ process.exit(1);
84
+ }
85
+ await deleteFork(args.taskId, args.agentId, args.forkId);
86
+ console.log(`Fork ${args.forkId} deleted`);
87
+ break;
88
+ }
89
+ case 'stats':
90
+ {
91
+ if (!args.taskId || !args.agentId) {
92
+ console.error('Error: --task-id and --agent-id are required');
93
+ process.exit(1);
94
+ }
95
+ const stats = await getConversationStats(args.taskId, args.agentId, args.forkId);
96
+ console.log(JSON.stringify(stats, null, 2));
97
+ break;
98
+ }
99
+ case 'meta':
100
+ {
101
+ if (!args.taskId || !args.agentId || !args.forkId) {
102
+ console.error('Error: --task-id, --agent-id, and --fork-id are required');
103
+ process.exit(1);
104
+ }
105
+ const metadata = await getForkMetadata(args.taskId, args.agentId, args.forkId);
106
+ if (metadata) {
107
+ console.log(JSON.stringify(metadata, null, 2));
108
+ } else {
109
+ console.log('Fork not found');
110
+ process.exit(1);
111
+ }
112
+ break;
113
+ }
114
+ case 'help':
115
+ default:
116
+ console.log(`
117
+ CFN Fork - Conversation Fork Management
118
+
119
+ Usage:
120
+ npx cfn-fork <command> [options]
121
+
122
+ Commands:
123
+ create Create a new fork from current conversation state
124
+ get Get current active fork ID
125
+ list List all forks for an agent
126
+ delete Delete a specific fork
127
+ stats Get conversation statistics
128
+ meta Get fork metadata
129
+ help Show this help message
130
+
131
+ Options:
132
+ --task-id <id> Task ID (required for all commands)
133
+ --agent-id <id> Agent ID (required for all commands)
134
+ --iteration <n> Iteration number (required for create)
135
+ --fork-id <id> Fork ID (required for delete and meta)
136
+
137
+ Examples:
138
+ # Create a fork after iteration 1
139
+ npx cfn-fork create --task-id epic-123 --agent-id coder-1 --iteration 1
140
+
141
+ # Get current fork
142
+ npx cfn-fork get --task-id epic-123 --agent-id coder-1
143
+
144
+ # List all forks
145
+ npx cfn-fork list --task-id epic-123 --agent-id coder-1
146
+
147
+ # Get conversation stats
148
+ npx cfn-fork stats --task-id epic-123 --agent-id coder-1
149
+ `);
150
+ break;
151
+ }
152
+ } catch (error) {
153
+ console.error('Error:', error instanceof Error ? error.message : String(error));
154
+ process.exit(1);
155
+ }
156
+ }
157
+ main();
158
+
159
+ //# sourceMappingURL=cfn-fork.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/cli/cfn-fork.ts"],"sourcesContent":["#!/usr/bin/env node\r\n/**\r\n * CLI utility for managing conversation forks\r\n *\r\n * Usage:\r\n * npx cfn-fork create --task-id <id> --agent-id <id> --iteration <n>\r\n * npx cfn-fork get --task-id <id> --agent-id <id>\r\n * npx cfn-fork list --task-id <id> --agent-id <id>\r\n * npx cfn-fork delete --task-id <id> --agent-id <id> --fork-id <id>\r\n * npx cfn-fork stats --task-id <id> --agent-id <id> [--fork-id <id>]\r\n */\r\n\r\nimport {\r\n createFork,\r\n getCurrentFork,\r\n listForks,\r\n deleteFork,\r\n getConversationStats,\r\n getForkMetadata\r\n} from './conversation-fork.js';\r\n\r\ninterface CLIArgs {\r\n command: string;\r\n taskId?: string;\r\n agentId?: string;\r\n iteration?: number;\r\n forkId?: string;\r\n}\r\n\r\nfunction parseArgs(): CLIArgs {\r\n const args = process.argv.slice(2);\r\n const result: CLIArgs = {\r\n command: args[0] || 'help'\r\n };\r\n\r\n for (let i = 1; i < args.length; i += 2) {\r\n const key = args[i].replace(/^--/, '');\r\n const value = args[i + 1];\r\n\r\n switch (key) {\r\n case 'task-id':\r\n result.taskId = value;\r\n break;\r\n case 'agent-id':\r\n result.agentId = value;\r\n break;\r\n case 'iteration':\r\n result.iteration = parseInt(value, 10);\r\n break;\r\n case 'fork-id':\r\n result.forkId = value;\r\n break;\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nasync function main() {\r\n const args = parseArgs();\r\n\r\n try {\r\n switch (args.command) {\r\n case 'create': {\r\n if (!args.taskId || !args.agentId || !args.iteration) {\r\n console.error('Error: --task-id, --agent-id, and --iteration are required');\r\n process.exit(1);\r\n }\r\n\r\n const forkId = await createFork(args.taskId, args.agentId, args.iteration);\r\n console.log(forkId); // Output just the fork ID for easy capture in bash\r\n break;\r\n }\r\n\r\n case 'get': {\r\n if (!args.taskId || !args.agentId) {\r\n console.error('Error: --task-id and --agent-id are required');\r\n process.exit(1);\r\n }\r\n\r\n const forkId = await getCurrentFork(args.taskId, args.agentId);\r\n if (forkId) {\r\n console.log(forkId);\r\n } else {\r\n console.log('(no fork)');\r\n }\r\n break;\r\n }\r\n\r\n case 'list': {\r\n if (!args.taskId || !args.agentId) {\r\n console.error('Error: --task-id and --agent-id are required');\r\n process.exit(1);\r\n }\r\n\r\n const forks = await listForks(args.taskId, args.agentId);\r\n if (forks.length === 0) {\r\n console.log('No forks found');\r\n } else {\r\n console.log(JSON.stringify(forks, null, 2));\r\n }\r\n break;\r\n }\r\n\r\n case 'delete': {\r\n if (!args.taskId || !args.agentId || !args.forkId) {\r\n console.error('Error: --task-id, --agent-id, and --fork-id are required');\r\n process.exit(1);\r\n }\r\n\r\n await deleteFork(args.taskId, args.agentId, args.forkId);\r\n console.log(`Fork ${args.forkId} deleted`);\r\n break;\r\n }\r\n\r\n case 'stats': {\r\n if (!args.taskId || !args.agentId) {\r\n console.error('Error: --task-id and --agent-id are required');\r\n process.exit(1);\r\n }\r\n\r\n const stats = await getConversationStats(args.taskId, args.agentId, args.forkId);\r\n console.log(JSON.stringify(stats, null, 2));\r\n break;\r\n }\r\n\r\n case 'meta': {\r\n if (!args.taskId || !args.agentId || !args.forkId) {\r\n console.error('Error: --task-id, --agent-id, and --fork-id are required');\r\n process.exit(1);\r\n }\r\n\r\n const metadata = await getForkMetadata(args.taskId, args.agentId, args.forkId);\r\n if (metadata) {\r\n console.log(JSON.stringify(metadata, null, 2));\r\n } else {\r\n console.log('Fork not found');\r\n process.exit(1);\r\n }\r\n break;\r\n }\r\n\r\n case 'help':\r\n default:\r\n console.log(`\r\nCFN Fork - Conversation Fork Management\r\n\r\nUsage:\r\n npx cfn-fork <command> [options]\r\n\r\nCommands:\r\n create Create a new fork from current conversation state\r\n get Get current active fork ID\r\n list List all forks for an agent\r\n delete Delete a specific fork\r\n stats Get conversation statistics\r\n meta Get fork metadata\r\n help Show this help message\r\n\r\nOptions:\r\n --task-id <id> Task ID (required for all commands)\r\n --agent-id <id> Agent ID (required for all commands)\r\n --iteration <n> Iteration number (required for create)\r\n --fork-id <id> Fork ID (required for delete and meta)\r\n\r\nExamples:\r\n # Create a fork after iteration 1\r\n npx cfn-fork create --task-id epic-123 --agent-id coder-1 --iteration 1\r\n\r\n # Get current fork\r\n npx cfn-fork get --task-id epic-123 --agent-id coder-1\r\n\r\n # List all forks\r\n npx cfn-fork list --task-id epic-123 --agent-id coder-1\r\n\r\n # Get conversation stats\r\n npx cfn-fork stats --task-id epic-123 --agent-id coder-1\r\n `);\r\n break;\r\n }\r\n } catch (error) {\r\n console.error('Error:', error instanceof Error ? error.message : String(error));\r\n process.exit(1);\r\n }\r\n}\r\n\r\nmain();\r\n"],"names":["createFork","getCurrentFork","listForks","deleteFork","getConversationStats","getForkMetadata","parseArgs","args","process","argv","slice","result","command","i","length","key","replace","value","taskId","agentId","iteration","parseInt","forkId","main","console","error","exit","log","forks","JSON","stringify","stats","metadata","Error","message","String"],"mappings":"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"}
@@ -30,11 +30,16 @@ import path from 'path';
30
30
  try {
31
31
  // Search in .claude/agents/ subdirectories
32
32
  const searchPaths = [
33
+ path.join(process.cwd(), '.claude', 'agents', 'coordinators', `${agentType}.md`),
33
34
  path.join(process.cwd(), '.claude', 'agents', 'core-agents', `${agentType}.md`),
34
- path.join(process.cwd(), '.claude', 'agents', 'specialized', `${agentType}.md`),
35
- path.join(process.cwd(), '.claude', 'agents', 'development', `${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`),
36
40
  path.join(process.cwd(), '.claude', 'agents', 'security', `${agentType}.md`),
37
- path.join(process.cwd(), '.claude', 'agents', 'custom', `${agentType}.md`)
41
+ path.join(process.cwd(), '.claude', 'agents', 'custom', `${agentType}.md`),
42
+ path.join(process.cwd(), '.claude', 'agents', `${agentType}.md`)
38
43
  ];
39
44
  for (const searchPath of searchPaths){
40
45
  try {
@@ -1 +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', 'core-agents', `${agentType}.md`),\r\n path.join(process.cwd(), '.claude', 'agents', 'specialized', `${agentType}.md`),\r\n path.join(process.cwd(), '.claude', 'agents', 'development', `${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 ];\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
+ {"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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"}
@@ -0,0 +1,201 @@
1
+ /**
2
+ * Conversation Fork Management
3
+ *
4
+ * Implements application-level conversation forking for CFN Loop iterations.
5
+ * Stores conversation history in Redis and allows branching at specific points.
6
+ *
7
+ * Sprint 4: Conversation Forking (v2.7.0)
8
+ */ import { execSync } from 'child_process';
9
+ import { randomBytes } from 'crypto';
10
+ /**
11
+ * Store a message in conversation history
12
+ */ export async function storeMessage(taskId, agentId, message) {
13
+ const key = `swarm:${taskId}:${agentId}:messages`;
14
+ const messageJson = JSON.stringify(message);
15
+ try {
16
+ execSync(`redis-cli rpush "${key}" '${messageJson.replace(/'/g, "'\\''")}'`, {
17
+ encoding: 'utf8'
18
+ });
19
+ } catch (error) {
20
+ console.error(`[conversation-fork] Failed to store message:`, error);
21
+ throw error;
22
+ }
23
+ }
24
+ /**
25
+ * Load all messages from conversation history
26
+ */ export async function loadMessages(taskId, agentId, forkId) {
27
+ const key = forkId ? `swarm:${taskId}:${agentId}:fork:${forkId}:messages` : `swarm:${taskId}:${agentId}:messages`;
28
+ try {
29
+ const output = execSync(`redis-cli lrange "${key}" 0 -1`, {
30
+ encoding: 'utf8'
31
+ }).trim();
32
+ if (!output || output === '(empty array)') {
33
+ return [];
34
+ }
35
+ // Redis returns each message on a new line
36
+ const lines = output.split('\n');
37
+ return lines.map((line)=>JSON.parse(line));
38
+ } catch (error) {
39
+ console.error(`[conversation-fork] Failed to load messages:`, error);
40
+ return [];
41
+ }
42
+ }
43
+ /**
44
+ * Create a fork from current conversation state
45
+ * Copies all messages up to current iteration
46
+ */ export async function createFork(taskId, agentId, currentIteration) {
47
+ // Generate unique fork ID
48
+ const forkId = `fork-${currentIteration}-${randomBytes(4).toString('hex')}`;
49
+ // Load messages up to current iteration
50
+ const messages = await loadMessages(taskId, agentId);
51
+ const forkMessages = messages.filter((m)=>m.iteration <= currentIteration);
52
+ if (forkMessages.length === 0) {
53
+ throw new Error(`No messages found for iteration ${currentIteration}`);
54
+ }
55
+ // Store fork snapshot
56
+ const forkKey = `swarm:${taskId}:${agentId}:fork:${forkId}:messages`;
57
+ for (const message of forkMessages){
58
+ const messageJson = JSON.stringify(message);
59
+ execSync(`redis-cli rpush "${forkKey}" '${messageJson.replace(/'/g, "'\\''")}'`, {
60
+ encoding: 'utf8'
61
+ });
62
+ }
63
+ // Store fork metadata
64
+ const metadata = {
65
+ forkId,
66
+ taskId,
67
+ agentId,
68
+ createdAt: new Date().toISOString(),
69
+ parentIteration: currentIteration,
70
+ messageCount: forkMessages.length
71
+ };
72
+ const metaKey = `swarm:${taskId}:${agentId}:fork:${forkId}:meta`;
73
+ execSync(`redis-cli setex "${metaKey}" 86400 '${JSON.stringify(metadata)}'`, {
74
+ encoding: 'utf8'
75
+ });
76
+ // Set as current fork
77
+ const currentForkKey = `swarm:${taskId}:${agentId}:current-fork`;
78
+ execSync(`redis-cli setex "${currentForkKey}" 86400 "${forkId}"`, {
79
+ encoding: 'utf8'
80
+ });
81
+ console.log(`[conversation-fork] Created fork ${forkId} with ${forkMessages.length} messages`);
82
+ return forkId;
83
+ }
84
+ /**
85
+ * Get current active fork ID
86
+ */ export async function getCurrentFork(taskId, agentId) {
87
+ const key = `swarm:${taskId}:${agentId}:current-fork`;
88
+ try {
89
+ const forkId = execSync(`redis-cli get "${key}"`, {
90
+ encoding: 'utf8'
91
+ }).trim();
92
+ if (forkId === '(nil)' || !forkId) {
93
+ return null;
94
+ }
95
+ return forkId;
96
+ } catch (error) {
97
+ return null;
98
+ }
99
+ }
100
+ /**
101
+ * Get fork metadata
102
+ */ export async function getForkMetadata(taskId, agentId, forkId) {
103
+ const key = `swarm:${taskId}:${agentId}:fork:${forkId}:meta`;
104
+ try {
105
+ const metaJson = execSync(`redis-cli get "${key}"`, {
106
+ encoding: 'utf8'
107
+ }).trim();
108
+ if (metaJson === '(nil)' || !metaJson) {
109
+ return null;
110
+ }
111
+ return JSON.parse(metaJson);
112
+ } catch (error) {
113
+ return null;
114
+ }
115
+ }
116
+ /**
117
+ * List all forks for an agent
118
+ */ export async function listForks(taskId, agentId) {
119
+ const pattern = `swarm:${taskId}:${agentId}:fork:*:meta`;
120
+ try {
121
+ const keys = execSync(`redis-cli keys "${pattern}"`, {
122
+ encoding: 'utf8'
123
+ }).trim().split('\n').filter((k)=>k);
124
+ const forks = [];
125
+ for (const key of keys){
126
+ const metaJson = execSync(`redis-cli get "${key}"`, {
127
+ encoding: 'utf8'
128
+ }).trim();
129
+ if (metaJson && metaJson !== '(nil)') {
130
+ forks.push(JSON.parse(metaJson));
131
+ }
132
+ }
133
+ return forks.sort((a, b)=>new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
134
+ } catch (error) {
135
+ console.error(`[conversation-fork] Failed to list forks:`, error);
136
+ return [];
137
+ }
138
+ }
139
+ /**
140
+ * Delete a fork and its messages
141
+ */ export async function deleteFork(taskId, agentId, forkId) {
142
+ const messagesKey = `swarm:${taskId}:${agentId}:fork:${forkId}:messages`;
143
+ const metaKey = `swarm:${taskId}:${agentId}:fork:${forkId}:meta`;
144
+ try {
145
+ execSync(`redis-cli del "${messagesKey}" "${metaKey}"`, {
146
+ encoding: 'utf8'
147
+ });
148
+ console.log(`[conversation-fork] Deleted fork ${forkId}`);
149
+ } catch (error) {
150
+ console.error(`[conversation-fork] Failed to delete fork:`, error);
151
+ throw error;
152
+ }
153
+ }
154
+ /**
155
+ * Clear current fork (start fresh conversation)
156
+ */ export async function clearCurrentFork(taskId, agentId) {
157
+ const key = `swarm:${taskId}:${agentId}:current-fork`;
158
+ try {
159
+ execSync(`redis-cli del "${key}"`, {
160
+ encoding: 'utf8'
161
+ });
162
+ } catch (error) {
163
+ console.error(`[conversation-fork] Failed to clear current fork:`, error);
164
+ }
165
+ }
166
+ /**
167
+ * Format messages for Anthropic API
168
+ */ export function formatMessagesForAPI(messages) {
169
+ return messages.map((m)=>({
170
+ role: m.role,
171
+ content: m.content
172
+ }));
173
+ }
174
+ /**
175
+ * Get conversation statistics
176
+ */ export async function getConversationStats(taskId, agentId, forkId) {
177
+ const messages = await loadMessages(taskId, agentId, forkId);
178
+ if (messages.length === 0) {
179
+ return {
180
+ messageCount: 0,
181
+ userMessages: 0,
182
+ assistantMessages: 0,
183
+ iterations: 0,
184
+ firstMessage: null,
185
+ lastMessage: null
186
+ };
187
+ }
188
+ const userMessages = messages.filter((m)=>m.role === 'user').length;
189
+ const assistantMessages = messages.filter((m)=>m.role === 'assistant').length;
190
+ const iterations = Math.max(...messages.map((m)=>m.iteration));
191
+ return {
192
+ messageCount: messages.length,
193
+ userMessages,
194
+ assistantMessages,
195
+ iterations,
196
+ firstMessage: messages[0].timestamp,
197
+ lastMessage: messages[messages.length - 1].timestamp
198
+ };
199
+ }
200
+
201
+ //# sourceMappingURL=conversation-fork.js.map