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,1221 +0,0 @@
1
- /**
2
- * Enterprise Configuration Management for Claude-Flow
3
- * Features: Security masking, change tracking, multi-format support, credential management
4
- */ import { promises as fs } from 'fs';
5
- import { join } from 'path';
6
- import { homedir } from 'os';
7
- import { createHash, randomBytes, createCipheriv, createDecipheriv } from 'crypto';
8
- import { safeParseJSON } from '../utils/helpers.js';
9
- import { ConfigError, ValidationError } from '../utils/errors.js';
10
- /**
11
- * Security classifications for configuration paths
12
- */ const SECURITY_CLASSIFICATIONS = {
13
- credentials: {
14
- level: 'secret',
15
- encrypted: true
16
- },
17
- 'credentials.apiKey': {
18
- level: 'secret',
19
- maskPattern: '****...****',
20
- encrypted: true
21
- },
22
- 'credentials.token': {
23
- level: 'secret',
24
- maskPattern: '****...****',
25
- encrypted: true
26
- },
27
- 'credentials.password': {
28
- level: 'secret',
29
- maskPattern: '********',
30
- encrypted: true
31
- },
32
- 'mcp.apiKey': {
33
- level: 'confidential',
34
- maskPattern: '****...****'
35
- },
36
- 'logging.destination': {
37
- level: 'internal'
38
- },
39
- orchestrator: {
40
- level: 'internal'
41
- },
42
- terminal: {
43
- level: 'public'
44
- }
45
- };
46
- /**
47
- * Sensitive configuration paths that should be masked in output
48
- */ const SENSITIVE_PATHS = [
49
- 'credentials',
50
- 'apiKey',
51
- 'token',
52
- 'password',
53
- 'secret',
54
- 'key',
55
- 'auth'
56
- ];
57
- /**
58
- * Format parsers for different configuration file types
59
- */ const FORMAT_PARSERS = {
60
- json: {
61
- parse: JSON.parse,
62
- stringify: (obj)=>JSON.stringify(obj, null, 2),
63
- extension: '.json'
64
- },
65
- yaml: {
66
- parse: (content)=>{
67
- // Simple YAML parser for basic key-value pairs
68
- const lines = content.split('\n');
69
- const result = {};
70
- let current = result;
71
- const stack = [
72
- result
73
- ];
74
- for (const line of lines){
75
- const trimmed = line.trim();
76
- if (!trimmed || trimmed.startsWith('#')) continue;
77
- const indent = line.length - line.trimStart().length;
78
- const colonIndex = trimmed.indexOf(':');
79
- if (colonIndex === -1) continue;
80
- const key = trimmed.substring(0, colonIndex).trim();
81
- const value = trimmed.substring(colonIndex + 1).trim();
82
- // Simple value parsing
83
- let parsedValue = value;
84
- if (value === 'true') parsedValue = true;
85
- else if (value === 'false') parsedValue = false;
86
- else if (!isNaN(Number(value)) && value !== '') parsedValue = Number(value);
87
- else if (value.startsWith('"') && value.endsWith('"')) {
88
- parsedValue = value.slice(1, -1);
89
- }
90
- current[key] = parsedValue;
91
- }
92
- return result;
93
- },
94
- stringify: (obj)=>{
95
- const stringify = (obj, indent = 0)=>{
96
- const spaces = ' '.repeat(indent);
97
- let result = '';
98
- for (const [key, value] of Object.entries(obj)){
99
- if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
100
- result += `${spaces}${key}:\n${stringify(value, indent + 1)}`;
101
- } else {
102
- const formattedValue = typeof value === 'string' ? `"${value}"` : String(value);
103
- result += `${spaces}${key}: ${formattedValue}\n`;
104
- }
105
- }
106
- return result;
107
- };
108
- return stringify(obj);
109
- },
110
- extension: '.yaml'
111
- },
112
- toml: {
113
- parse: (content)=>{
114
- // Simple TOML parser for basic sections and key-value pairs
115
- const lines = content.split('\n');
116
- const result = {};
117
- let currentSection = result;
118
- for (const line of lines){
119
- const trimmed = line.trim();
120
- if (!trimmed || trimmed.startsWith('#')) continue;
121
- // Section header
122
- if (trimmed.startsWith('[') && trimmed.endsWith(']')) {
123
- const sectionName = trimmed.slice(1, -1);
124
- currentSection = result[sectionName] = {};
125
- continue;
126
- }
127
- // Key-value pair
128
- const equalsIndex = trimmed.indexOf('=');
129
- if (equalsIndex === -1) continue;
130
- const key = trimmed.substring(0, equalsIndex).trim();
131
- const value = trimmed.substring(equalsIndex + 1).trim();
132
- // Simple value parsing
133
- let parsedValue = value;
134
- if (value === 'true') parsedValue = true;
135
- else if (value === 'false') parsedValue = false;
136
- else if (!isNaN(Number(value)) && value !== '') parsedValue = Number(value);
137
- else if (value.startsWith('"') && value.endsWith('"')) {
138
- parsedValue = value.slice(1, -1);
139
- }
140
- currentSection[key] = parsedValue;
141
- }
142
- return result;
143
- },
144
- stringify: (obj)=>{
145
- let result = '';
146
- for (const [section, values] of Object.entries(obj)){
147
- if (typeof values === 'object' && values !== null && !Array.isArray(values)) {
148
- result += `[${section}]\n`;
149
- for (const [key, value] of Object.entries(values)){
150
- const formattedValue = typeof value === 'string' ? `"${value}"` : String(value);
151
- result += `${key} = ${formattedValue}\n`;
152
- }
153
- result += '\n';
154
- }
155
- }
156
- return result;
157
- },
158
- extension: '.toml'
159
- }
160
- };
161
- /**
162
- * Default configuration values
163
- */ const DEFAULT_CONFIG = {
164
- orchestrator: {
165
- maxConcurrentAgents: 10,
166
- taskQueueSize: 100,
167
- healthCheckInterval: 30000,
168
- shutdownTimeout: 30000
169
- },
170
- terminal: {
171
- type: 'auto',
172
- poolSize: 5,
173
- recycleAfter: 10,
174
- healthCheckInterval: 60000,
175
- commandTimeout: 300000
176
- },
177
- memory: {
178
- backend: 'hybrid',
179
- cacheSizeMB: 100,
180
- syncInterval: 5000,
181
- conflictResolution: 'crdt',
182
- retentionDays: 30
183
- },
184
- coordination: {
185
- maxRetries: 3,
186
- retryDelay: 1000,
187
- deadlockDetection: true,
188
- resourceTimeout: 60000,
189
- messageTimeout: 30000
190
- },
191
- mcp: {
192
- transport: 'stdio',
193
- port: 3000,
194
- tlsEnabled: false
195
- },
196
- logging: {
197
- level: 'info',
198
- format: 'json',
199
- destination: 'console'
200
- },
201
- credentials: {
202
- },
203
- security: {
204
- encryptionEnabled: true,
205
- auditLogging: true,
206
- maskSensitiveValues: true,
207
- allowEnvironmentOverrides: true
208
- }
209
- };
210
- /**
211
- * Configuration manager
212
- */ export class ConfigManager {
213
- static instance;
214
- config;
215
- configPath;
216
- profiles = new Map();
217
- currentProfile;
218
- userConfigDir;
219
- changeHistory = [];
220
- encryptionKey;
221
- validationRules = new Map();
222
- formatParsers = FORMAT_PARSERS;
223
- constructor(){
224
- this.config = deepClone(DEFAULT_CONFIG);
225
- this.userConfigDir = this.getUserConfigDir();
226
- this.setupValidationRules();
227
- // Encryption will be initialized via init() method
228
- }
229
- /**
230
- * Gets the singleton instance
231
- */ static getInstance() {
232
- if (!ConfigManager.instance) {
233
- ConfigManager.instance = new ConfigManager();
234
- }
235
- return ConfigManager.instance;
236
- }
237
- /**
238
- * Initialize async components
239
- */ async init() {
240
- await this.initializeEncryption();
241
- }
242
- /**
243
- * Initializes encryption for sensitive configuration values
244
- */ async initializeEncryption() {
245
- try {
246
- const keyFile = join(this.userConfigDir, '.encryption-key');
247
- // Check if key file exists (simplified for demo)
248
- try {
249
- await fs.access(keyFile);
250
- // In a real implementation, this would be more secure
251
- this.encryptionKey = randomBytes(32);
252
- } catch {
253
- this.encryptionKey = randomBytes(32);
254
- // Store key securely (in production, use proper key management)
255
- }
256
- } catch (error) {
257
- console.warn('Failed to initialize encryption:', error.message);
258
- }
259
- }
260
- /**
261
- * Sets up validation rules for configuration paths
262
- */ setupValidationRules() {
263
- // Orchestrator validation rules
264
- this.validationRules.set('orchestrator.maxConcurrentAgents', {
265
- type: 'number',
266
- required: true,
267
- min: 1,
268
- max: 100,
269
- validator: (value, config)=>{
270
- if (value > config.terminal?.poolSize * 2) {
271
- return 'maxConcurrentAgents should not exceed 2x terminal pool size';
272
- }
273
- return null;
274
- }
275
- });
276
- this.validationRules.set('orchestrator.taskQueueSize', {
277
- type: 'number',
278
- required: true,
279
- min: 1,
280
- max: 10000,
281
- dependencies: [
282
- 'orchestrator.maxConcurrentAgents'
283
- ],
284
- validator: (value, config)=>{
285
- const maxAgents = config.orchestrator?.maxConcurrentAgents || 1;
286
- if (value < maxAgents * 10) {
287
- return 'taskQueueSize should be at least 10x maxConcurrentAgents';
288
- }
289
- return null;
290
- }
291
- });
292
- // Terminal validation rules
293
- this.validationRules.set('terminal.type', {
294
- type: 'string',
295
- required: true,
296
- values: [
297
- 'auto',
298
- 'vscode',
299
- 'native'
300
- ]
301
- });
302
- this.validationRules.set('terminal.poolSize', {
303
- type: 'number',
304
- required: true,
305
- min: 1,
306
- max: 50
307
- });
308
- // Memory validation rules
309
- this.validationRules.set('memory.backend', {
310
- type: 'string',
311
- required: true,
312
- values: [
313
- 'sqlite',
314
- 'markdown',
315
- 'hybrid'
316
- ]
317
- });
318
- this.validationRules.set('memory.cacheSizeMB', {
319
- type: 'number',
320
- required: true,
321
- min: 1,
322
- max: 10000,
323
- validator: (value)=>{
324
- if (value > 1000) {
325
- return 'Large cache sizes may impact system performance';
326
- }
327
- return null;
328
- }
329
- });
330
- // Security validation rules
331
- this.validationRules.set('security.encryptionEnabled', {
332
- type: 'boolean',
333
- required: true
334
- });
335
- // Credentials validation
336
- this.validationRules.set('credentials.apiKey', {
337
- type: 'string',
338
- pattern: /^[a-zA-Z0-9_-]+$/,
339
- validator: (value)=>{
340
- if (value && value.length < 16) {
341
- return 'API key should be at least 16 characters long';
342
- }
343
- return null;
344
- }
345
- });
346
- }
347
- /**
348
- * Loads configuration from various sources
349
- */ async load(configPath) {
350
- if (configPath !== undefined) {
351
- this.configPath = configPath;
352
- }
353
- // Start with defaults
354
- let config = deepClone(DEFAULT_CONFIG);
355
- // Load from file if specified
356
- if (configPath) {
357
- const fileConfig = await this.loadFromFile(configPath);
358
- config = deepMergeConfig(config, fileConfig);
359
- }
360
- // Load from environment variables
361
- const envConfig = this.loadFromEnv();
362
- config = deepMergeConfig(config, envConfig);
363
- // Validate the final configuration
364
- this.validate(config);
365
- this.config = config;
366
- return config;
367
- }
368
- /**
369
- * Gets the current configuration with optional security masking
370
- */ get(maskSensitive = false) {
371
- const config = deepClone(this.config);
372
- if (maskSensitive && this.config.security?.maskSensitiveValues) {
373
- return this.maskSensitiveValues(config);
374
- }
375
- return config;
376
- }
377
- /**
378
- * Gets configuration with security masking applied
379
- */ getSecure() {
380
- return this.get(true);
381
- }
382
- /**
383
- * Gets all configuration values (alias for get method for backward compatibility)
384
- */ async getAll() {
385
- return this.get();
386
- }
387
- /**
388
- * Updates configuration values with change tracking
389
- */ update(updates, options = {}) {
390
- const oldConfig = deepClone(this.config);
391
- // Track changes before applying
392
- this.trackChanges(oldConfig, updates, options);
393
- // Apply updates
394
- this.config = deepMergeConfig(this.config, updates);
395
- // Validate the updated configuration
396
- this.validateWithDependencies(this.config);
397
- return this.get();
398
- }
399
- /**
400
- * Loads default configuration
401
- */ loadDefault() {
402
- this.config = deepClone(DEFAULT_CONFIG);
403
- }
404
- /**
405
- * Saves configuration to file with format support
406
- */ async save(path, format) {
407
- const savePath = path || this.configPath;
408
- if (!savePath) {
409
- throw new ConfigError('No configuration file path specified');
410
- }
411
- const detectedFormat = format || this.detectFormat(savePath);
412
- const parser = this.formatParsers[detectedFormat];
413
- if (!parser) {
414
- throw new ConfigError(`Unsupported format for saving: ${detectedFormat}`);
415
- }
416
- // Get configuration without sensitive values for saving
417
- const configToSave = this.getConfigForSaving();
418
- const content = parser.stringify(configToSave);
419
- await fs.writeFile(savePath, content, 'utf8');
420
- // Record the save operation
421
- this.recordChange({
422
- timestamp: new Date().toISOString(),
423
- path: 'CONFIG_SAVED',
424
- oldValue: null,
425
- newValue: savePath,
426
- source: 'file'
427
- });
428
- }
429
- /**
430
- * Gets configuration suitable for saving (excludes runtime-only values)
431
- */ getConfigForSaving() {
432
- const config = deepClone(this.config);
433
- // Remove encrypted credentials from the saved config
434
- // They should be stored separately in a secure location
435
- if (config.credentials) {
436
- delete config.credentials;
437
- }
438
- return config;
439
- }
440
- /**
441
- * Gets user configuration directory
442
- */ getUserConfigDir() {
443
- const home = homedir();
444
- return join(home, '.claude-flow');
445
- }
446
- /**
447
- * Creates user config directory if it doesn't exist
448
- */ async ensureUserConfigDir() {
449
- try {
450
- await fs.mkdir(this.userConfigDir, {
451
- recursive: true
452
- });
453
- } catch (error) {
454
- if (error.code !== 'EEXIST') {
455
- throw new ConfigError(`Failed to create config directory: ${error.message}`);
456
- }
457
- }
458
- }
459
- /**
460
- * Loads all profiles from the profiles directory
461
- */ async loadProfiles() {
462
- const profilesDir = join(this.userConfigDir, 'profiles');
463
- try {
464
- const entries = await fs.readdir(profilesDir, {
465
- withFileTypes: true
466
- });
467
- for (const entry of entries){
468
- if (entry.isFile() && entry.name.endsWith('.json')) {
469
- const profileName = entry.name.replace('.json', '');
470
- const profilePath = join(profilesDir, entry.name);
471
- try {
472
- const content = await fs.readFile(profilePath, 'utf8');
473
- const profileConfig = safeParseJSON(content);
474
- if (profileConfig) {
475
- this.profiles.set(profileName, profileConfig);
476
- }
477
- } catch (error) {
478
- console.warn(`Failed to load profile ${profileName}: ${error.message}`);
479
- }
480
- }
481
- }
482
- } catch (error) {
483
- // Profiles directory doesn't exist - this is okay
484
- }
485
- }
486
- /**
487
- * Applies a named profile
488
- */ async applyProfile(profileName) {
489
- await this.loadProfiles();
490
- const profile = this.profiles.get(profileName);
491
- if (!profile) {
492
- throw new ConfigError(`Profile '${profileName}' not found`);
493
- }
494
- this.config = deepMergeConfig(this.config, profile);
495
- this.currentProfile = profileName;
496
- this.validate(this.config);
497
- }
498
- /**
499
- * Saves current configuration as a profile
500
- */ async saveProfile(profileName, config) {
501
- await this.ensureUserConfigDir();
502
- const profilesDir = join(this.userConfigDir, 'profiles');
503
- await fs.mkdir(profilesDir, {
504
- recursive: true
505
- });
506
- const profileConfig = config || this.config;
507
- const profilePath = join(profilesDir, `${profileName}.json`);
508
- const content = JSON.stringify(profileConfig, null, 2);
509
- await fs.writeFile(profilePath, content, 'utf8');
510
- this.profiles.set(profileName, profileConfig);
511
- }
512
- /**
513
- * Deletes a profile
514
- */ async deleteProfile(profileName) {
515
- const profilePath = join(this.userConfigDir, 'profiles', `${profileName}.json`);
516
- try {
517
- await fs.unlink(profilePath);
518
- this.profiles.delete(profileName);
519
- } catch (error) {
520
- if (error.code === 'ENOENT') {
521
- throw new ConfigError(`Profile '${profileName}' not found`);
522
- }
523
- throw new ConfigError(`Failed to delete profile: ${error.message}`);
524
- }
525
- }
526
- /**
527
- * Lists all available profiles
528
- */ async listProfiles() {
529
- await this.loadProfiles();
530
- return Array.from(this.profiles.keys());
531
- }
532
- /**
533
- * Gets a specific profile configuration
534
- */ async getProfile(profileName) {
535
- await this.loadProfiles();
536
- return this.profiles.get(profileName);
537
- }
538
- /**
539
- * Gets the current active profile name
540
- */ getCurrentProfile() {
541
- return this.currentProfile;
542
- }
543
- /**
544
- * Sets a configuration value by path with change tracking and validation
545
- */ set(path, value, options = {}) {
546
- const oldValue = this.getValue(path);
547
- // Record the change
548
- this.recordChange({
549
- timestamp: new Date().toISOString(),
550
- path,
551
- oldValue,
552
- newValue: value,
553
- user: options.user,
554
- reason: options.reason,
555
- source: options.source || 'cli'
556
- });
557
- // Encrypt sensitive values
558
- if (this.isSensitivePath(path) && this.config.security?.encryptionEnabled) {
559
- value = this.encryptValue(value);
560
- }
561
- const keys = path.split('.');
562
- let current = this.config;
563
- for(let i = 0; i < keys.length - 1; i++){
564
- const key = keys[i];
565
- if (!(key in current)) {
566
- current[key] = {};
567
- }
568
- current = current[key];
569
- }
570
- current[keys[keys.length - 1]] = value;
571
- // Validate the path-specific rule and dependencies
572
- this.validatePath(path, value);
573
- this.validateWithDependencies(this.config);
574
- }
575
- /**
576
- * Gets a configuration value by path with decryption for sensitive values
577
- */ getValue(path, decrypt = true) {
578
- const keys = path.split('.');
579
- let current = this.config;
580
- for (const key of keys){
581
- if (current && typeof current === 'object' && key in current) {
582
- current = current[key];
583
- } else {
584
- return undefined;
585
- }
586
- }
587
- // Decrypt sensitive values if requested
588
- if (decrypt && this.isSensitivePath(path) && this.isEncryptedValue(current)) {
589
- try {
590
- return this.decryptValue(current);
591
- } catch (error) {
592
- console.warn(`Failed to decrypt value at path ${path}:`, error.message);
593
- return current;
594
- }
595
- }
596
- return current;
597
- }
598
- /**
599
- * Resets configuration to defaults
600
- */ reset() {
601
- this.config = deepClone(DEFAULT_CONFIG);
602
- delete this.currentProfile;
603
- }
604
- /**
605
- * Gets configuration schema for validation
606
- */ getSchema() {
607
- return {
608
- orchestrator: {
609
- maxConcurrentAgents: {
610
- type: 'number',
611
- min: 1,
612
- max: 100
613
- },
614
- taskQueueSize: {
615
- type: 'number',
616
- min: 1,
617
- max: 10000
618
- },
619
- healthCheckInterval: {
620
- type: 'number',
621
- min: 1000,
622
- max: 300000
623
- },
624
- shutdownTimeout: {
625
- type: 'number',
626
- min: 1000,
627
- max: 300000
628
- }
629
- },
630
- terminal: {
631
- type: {
632
- type: 'string',
633
- values: [
634
- 'auto',
635
- 'vscode',
636
- 'native'
637
- ]
638
- },
639
- poolSize: {
640
- type: 'number',
641
- min: 1,
642
- max: 50
643
- },
644
- recycleAfter: {
645
- type: 'number',
646
- min: 1,
647
- max: 1000
648
- },
649
- healthCheckInterval: {
650
- type: 'number',
651
- min: 1000,
652
- max: 3600000
653
- },
654
- commandTimeout: {
655
- type: 'number',
656
- min: 1000,
657
- max: 3600000
658
- }
659
- },
660
- memory: {
661
- backend: {
662
- type: 'string',
663
- values: [
664
- 'sqlite',
665
- 'markdown',
666
- 'hybrid'
667
- ]
668
- },
669
- cacheSizeMB: {
670
- type: 'number',
671
- min: 1,
672
- max: 10000
673
- },
674
- syncInterval: {
675
- type: 'number',
676
- min: 1000,
677
- max: 300000
678
- },
679
- conflictResolution: {
680
- type: 'string',
681
- values: [
682
- 'crdt',
683
- 'timestamp',
684
- 'manual'
685
- ]
686
- },
687
- retentionDays: {
688
- type: 'number',
689
- min: 1,
690
- max: 3650
691
- }
692
- },
693
- coordination: {
694
- maxRetries: {
695
- type: 'number',
696
- min: 0,
697
- max: 100
698
- },
699
- retryDelay: {
700
- type: 'number',
701
- min: 100,
702
- max: 60000
703
- },
704
- deadlockDetection: {
705
- type: 'boolean'
706
- },
707
- resourceTimeout: {
708
- type: 'number',
709
- min: 1000,
710
- max: 3600000
711
- },
712
- messageTimeout: {
713
- type: 'number',
714
- min: 1000,
715
- max: 300000
716
- }
717
- },
718
- mcp: {
719
- transport: {
720
- type: 'string',
721
- values: [
722
- 'stdio',
723
- 'http',
724
- 'websocket'
725
- ]
726
- },
727
- port: {
728
- type: 'number',
729
- min: 1,
730
- max: 65535
731
- },
732
- tlsEnabled: {
733
- type: 'boolean'
734
- }
735
- },
736
- logging: {
737
- level: {
738
- type: 'string',
739
- values: [
740
- 'debug',
741
- 'info',
742
- 'warn',
743
- 'error'
744
- ]
745
- },
746
- format: {
747
- type: 'string',
748
- values: [
749
- 'json',
750
- 'text'
751
- ]
752
- },
753
- destination: {
754
- type: 'string',
755
- values: [
756
- 'console',
757
- 'file'
758
- ]
759
- }
760
- }
761
- };
762
- }
763
- /**
764
- * Validates a value against schema
765
- */ validateValue(value, schema, path) {
766
- if (schema.type === 'number') {
767
- if (typeof value !== 'number' || isNaN(value)) {
768
- throw new ValidationError(`${path}: must be a number`);
769
- }
770
- if (schema.min !== undefined && value < schema.min) {
771
- throw new ValidationError(`${path}: must be at least ${schema.min}`);
772
- }
773
- if (schema.max !== undefined && value > schema.max) {
774
- throw new ValidationError(`${path}: must be at most ${schema.max}`);
775
- }
776
- } else if (schema.type === 'string') {
777
- if (typeof value !== 'string') {
778
- throw new ValidationError(`${path}: must be a string`);
779
- }
780
- if (schema.values && !schema.values.includes(value)) {
781
- throw new ValidationError(`${path}: must be one of [${schema.values.join(', ')}]`);
782
- }
783
- } else if (schema.type === 'boolean') {
784
- if (typeof value !== 'boolean') {
785
- throw new ValidationError(`${path}: must be a boolean`);
786
- }
787
- }
788
- }
789
- /**
790
- * Gets configuration diff between current and default
791
- */ getDiff() {
792
- const defaultConfig = DEFAULT_CONFIG;
793
- const diff = {};
794
- const findDifferences = (current, defaults, path = '')=>{
795
- for(const key in current){
796
- const currentValue = current[key];
797
- const defaultValue = defaults[key];
798
- const fullPath = path ? `${path}.${key}` : key;
799
- if (typeof currentValue === 'object' && currentValue !== null && !Array.isArray(currentValue)) {
800
- if (typeof defaultValue === 'object' && defaultValue !== null) {
801
- const nestedDiff = {};
802
- findDifferences(currentValue, defaultValue, fullPath);
803
- if (Object.keys(nestedDiff).length > 0) {
804
- if (!path) {
805
- diff[key] = nestedDiff;
806
- }
807
- }
808
- }
809
- } else if (currentValue !== defaultValue) {
810
- const pathParts = fullPath.split('.');
811
- let target = diff;
812
- for(let i = 0; i < pathParts.length - 1; i++){
813
- if (!target[pathParts[i]]) {
814
- target[pathParts[i]] = {};
815
- }
816
- target = target[pathParts[i]];
817
- }
818
- target[pathParts[pathParts.length - 1]] = currentValue;
819
- }
820
- }
821
- };
822
- findDifferences(this.config, defaultConfig);
823
- return diff;
824
- }
825
- /**
826
- * Exports configuration with metadata
827
- */ export() {
828
- return {
829
- version: '1.0.0',
830
- exported: new Date().toISOString(),
831
- profile: this.currentProfile,
832
- config: this.config,
833
- diff: this.getDiff()
834
- };
835
- }
836
- /**
837
- * Imports configuration from export
838
- */ import(data) {
839
- if (!data.config) {
840
- throw new ConfigError('Invalid configuration export format');
841
- }
842
- this.validateWithDependencies(data.config);
843
- this.config = data.config;
844
- this.currentProfile = data.profile;
845
- // Record the import operation
846
- this.recordChange({
847
- timestamp: new Date().toISOString(),
848
- path: 'CONFIG_IMPORTED',
849
- oldValue: null,
850
- newValue: data.version || 'unknown',
851
- source: 'file'
852
- });
853
- }
854
- /**
855
- * Loads configuration from file with format detection
856
- */ async loadFromFile(path) {
857
- try {
858
- const content = await fs.readFile(path, 'utf8');
859
- const format = this.detectFormat(path, content);
860
- const parser = this.formatParsers[format];
861
- if (!parser) {
862
- throw new ConfigError(`Unsupported configuration format: ${format}`);
863
- }
864
- const config = parser.parse(content);
865
- if (!config) {
866
- throw new ConfigError(`Invalid ${format.toUpperCase()} in configuration file: ${path}`);
867
- }
868
- return config;
869
- } catch (error) {
870
- if (error.code === 'ENOENT') {
871
- // File doesn't exist, use defaults
872
- return {};
873
- }
874
- throw new ConfigError(`Failed to load configuration from ${path}: ${error.message}`);
875
- }
876
- }
877
- /**
878
- * Detects configuration file format
879
- */ detectFormat(path, content) {
880
- const ext = path.split('.').pop()?.toLowerCase();
881
- if (ext === 'yaml' || ext === 'yml') return 'yaml';
882
- if (ext === 'toml') return 'toml';
883
- if (ext === 'json') return 'json';
884
- // Try to detect from content
885
- if (content) {
886
- const trimmed = content.trim();
887
- if (trimmed.startsWith('{') || trimmed.startsWith('[')) return 'json';
888
- if (trimmed.includes('=') && trimmed.includes('[')) return 'toml';
889
- if (trimmed.includes(':') && !trimmed.includes('=')) return 'yaml';
890
- }
891
- // Default to JSON
892
- return 'json';
893
- }
894
- /**
895
- * Loads configuration from environment variables
896
- */ loadFromEnv() {
897
- const config = {};
898
- // Orchestrator settings
899
- const maxAgents = process.env.CLAUDE_FLOW_MAX_AGENTS;
900
- if (maxAgents) {
901
- if (!config.orchestrator) {
902
- config.orchestrator = {};
903
- }
904
- config.orchestrator = {
905
- ...DEFAULT_CONFIG.orchestrator,
906
- ...config.orchestrator,
907
- maxConcurrentAgents: parseInt(maxAgents, 10)
908
- };
909
- }
910
- // Terminal settings
911
- const terminalType = process.env.CLAUDE_FLOW_TERMINAL_TYPE;
912
- if (terminalType === 'vscode' || terminalType === 'native' || terminalType === 'auto') {
913
- config.terminal = {
914
- ...DEFAULT_CONFIG.terminal,
915
- ...config.terminal,
916
- type: terminalType
917
- };
918
- }
919
- // Memory settings
920
- const memoryBackend = process.env.CLAUDE_FLOW_MEMORY_BACKEND;
921
- if (memoryBackend === 'sqlite' || memoryBackend === 'markdown' || memoryBackend === 'hybrid') {
922
- config.memory = {
923
- ...DEFAULT_CONFIG.memory,
924
- ...config.memory,
925
- backend: memoryBackend
926
- };
927
- }
928
- // MCP settings
929
- const mcpTransport = process.env.CLAUDE_FLOW_MCP_TRANSPORT;
930
- if (mcpTransport === 'stdio' || mcpTransport === 'http' || mcpTransport === 'websocket') {
931
- config.mcp = {
932
- ...DEFAULT_CONFIG.mcp,
933
- ...config.mcp,
934
- transport: mcpTransport
935
- };
936
- }
937
- const mcpPort = process.env.CLAUDE_FLOW_MCP_PORT;
938
- if (mcpPort) {
939
- config.mcp = {
940
- ...DEFAULT_CONFIG.mcp,
941
- ...config.mcp,
942
- port: parseInt(mcpPort, 10)
943
- };
944
- }
945
- // Logging settings
946
- const logLevel = process.env.CLAUDE_FLOW_LOG_LEVEL;
947
- if (logLevel === 'debug' || logLevel === 'info' || logLevel === 'warn' || logLevel === 'error') {
948
- config.logging = {
949
- ...DEFAULT_CONFIG.logging,
950
- ...config.logging,
951
- level: logLevel
952
- };
953
- }
954
- return config;
955
- }
956
- /**
957
- * Validates configuration with dependency checking
958
- */ validateWithDependencies(config) {
959
- const errors = [];
960
- const warnings = [];
961
- // Validate all paths with rules
962
- for (const [path, rule] of this.validationRules.entries()){
963
- const value = this.getValueByPath(config, path);
964
- try {
965
- this.validatePath(path, value, config);
966
- } catch (error) {
967
- errors.push(error.message);
968
- }
969
- }
970
- // Additional cross-field validations
971
- if (config.orchestrator.maxConcurrentAgents > config.terminal.poolSize * 3) {
972
- warnings.push('High agent-to-terminal ratio may cause resource contention');
973
- }
974
- if (config.memory.cacheSizeMB > 1000 && config.memory.backend === 'sqlite') {
975
- warnings.push('Large cache size with SQLite backend may impact performance');
976
- }
977
- if (config.mcp.transport === 'http' && !config.mcp.tlsEnabled) {
978
- warnings.push('HTTP transport without TLS is not recommended for production');
979
- }
980
- // Log warnings
981
- if (warnings.length > 0 && config.logging?.level === 'debug') {
982
- console.warn('Configuration warnings:', warnings);
983
- }
984
- // Throw errors
985
- if (errors.length > 0) {
986
- throw new ValidationError(`Configuration validation failed:\n${errors.join('\n')}`);
987
- }
988
- }
989
- /**
990
- * Validates a specific configuration path
991
- */ validatePath(path, value, config) {
992
- const rule = this.validationRules.get(path);
993
- if (!rule) return;
994
- const currentConfig = config || this.config;
995
- // Required validation
996
- if (rule.required && (value === undefined || value === null)) {
997
- throw new ValidationError(`${path} is required`);
998
- }
999
- if (value === undefined || value === null) return;
1000
- // Type validation
1001
- if (rule.type === 'number' && (typeof value !== 'number' || isNaN(value))) {
1002
- throw new ValidationError(`${path} must be a number`);
1003
- }
1004
- if (rule.type === 'string' && typeof value !== 'string') {
1005
- throw new ValidationError(`${path} must be a string`);
1006
- }
1007
- if (rule.type === 'boolean' && typeof value !== 'boolean') {
1008
- throw new ValidationError(`${path} must be a boolean`);
1009
- }
1010
- // Range validation
1011
- if (typeof value === 'number') {
1012
- if (rule.min !== undefined && value < rule.min) {
1013
- throw new ValidationError(`${path} must be at least ${rule.min}`);
1014
- }
1015
- if (rule.max !== undefined && value > rule.max) {
1016
- throw new ValidationError(`${path} must be at most ${rule.max}`);
1017
- }
1018
- }
1019
- // Values validation
1020
- if (rule.values && !rule.values.includes(value)) {
1021
- throw new ValidationError(`${path} must be one of: ${rule.values.join(', ')}`);
1022
- }
1023
- // Pattern validation
1024
- if (rule.pattern && typeof value === 'string' && !rule.pattern.test(value)) {
1025
- throw new ValidationError(`${path} does not match required pattern`);
1026
- }
1027
- // Custom validator
1028
- if (rule.validator) {
1029
- const result = rule.validator(value, currentConfig);
1030
- if (result) {
1031
- throw new ValidationError(`${path}: ${result}`);
1032
- }
1033
- }
1034
- }
1035
- /**
1036
- * Gets a value from a configuration object by path
1037
- */ getValueByPath(obj, path) {
1038
- const keys = path.split('.');
1039
- let current = obj;
1040
- for (const key of keys){
1041
- if (current && typeof current === 'object' && key in current) {
1042
- current = current[key];
1043
- } else {
1044
- return undefined;
1045
- }
1046
- }
1047
- return current;
1048
- }
1049
- /**
1050
- * Legacy validate method for backward compatibility
1051
- */ validate(config) {
1052
- this.validateWithDependencies(config);
1053
- }
1054
- /**
1055
- * Masks sensitive values in configuration
1056
- */ maskSensitiveValues(config) {
1057
- const maskedConfig = deepClone(config);
1058
- // Recursively mask sensitive paths
1059
- const maskObject = (obj, path = '')=>{
1060
- if (!obj || typeof obj !== 'object') return obj;
1061
- const masked = {};
1062
- for (const [key, value] of Object.entries(obj)){
1063
- const currentPath = path ? `${path}.${key}` : key;
1064
- if (this.isSensitivePath(currentPath)) {
1065
- const classification = SECURITY_CLASSIFICATIONS[currentPath];
1066
- masked[key] = classification?.maskPattern || '****';
1067
- } else if (typeof value === 'object' && value !== null) {
1068
- masked[key] = maskObject(value, currentPath);
1069
- } else {
1070
- masked[key] = value;
1071
- }
1072
- }
1073
- return masked;
1074
- };
1075
- return maskObject(maskedConfig);
1076
- }
1077
- /**
1078
- * Tracks changes to configuration
1079
- */ trackChanges(oldConfig, updates, options) {
1080
- // Simple implementation for tracking changes
1081
- for (const [key, value] of Object.entries(updates)){
1082
- this.recordChange({
1083
- timestamp: new Date().toISOString(),
1084
- path: key,
1085
- oldValue: oldConfig[key],
1086
- newValue: value,
1087
- user: options.user,
1088
- reason: options.reason,
1089
- source: options.source || 'cli'
1090
- });
1091
- }
1092
- }
1093
- /**
1094
- * Records a configuration change
1095
- */ recordChange(change) {
1096
- this.changeHistory.push(change);
1097
- // Keep only last 1000 changes
1098
- if (this.changeHistory.length > 1000) {
1099
- this.changeHistory.shift();
1100
- }
1101
- }
1102
- /**
1103
- * Checks if a path contains sensitive information
1104
- */ isSensitivePath(path) {
1105
- return SENSITIVE_PATHS.some((sensitive)=>path.toLowerCase().includes(sensitive.toLowerCase()));
1106
- }
1107
- /**
1108
- * Encrypts a sensitive value
1109
- */ encryptValue(value) {
1110
- if (!this.encryptionKey) {
1111
- return value; // Return original if encryption not available
1112
- }
1113
- try {
1114
- // Simplified encryption - in production use proper encryption
1115
- const iv = randomBytes(16);
1116
- const key = createHash('sha256').update(this.encryptionKey).digest();
1117
- const cipher = createCipheriv('aes-256-cbc', key, iv);
1118
- let encrypted = cipher.update(JSON.stringify(value), 'utf8', 'hex');
1119
- encrypted += cipher.final('hex');
1120
- return `encrypted:${iv.toString('hex')}:${encrypted}`;
1121
- } catch (error) {
1122
- console.warn('Failed to encrypt value:', error.message);
1123
- return value;
1124
- }
1125
- }
1126
- /**
1127
- * Decrypts a sensitive value
1128
- */ decryptValue(encryptedValue) {
1129
- if (!this.encryptionKey || !this.isEncryptedValue(encryptedValue)) {
1130
- return encryptedValue;
1131
- }
1132
- try {
1133
- const parts = encryptedValue.replace('encrypted:', '').split(':');
1134
- if (parts.length !== 2) return encryptedValue; // Handle old format
1135
- const iv = Buffer.from(parts[0], 'hex');
1136
- const encrypted = parts[1];
1137
- const key = createHash('sha256').update(this.encryptionKey).digest();
1138
- const decipher = createDecipheriv('aes-256-cbc', key, iv);
1139
- let decrypted = decipher.update(encrypted, 'hex', 'utf8');
1140
- decrypted += decipher.final('utf8');
1141
- return JSON.parse(decrypted);
1142
- } catch (error) {
1143
- console.warn('Failed to decrypt value:', error.message);
1144
- return encryptedValue;
1145
- }
1146
- }
1147
- /**
1148
- * Checks if a value is encrypted
1149
- */ isEncryptedValue(value) {
1150
- return typeof value === 'string' && value.startsWith('encrypted:');
1151
- }
1152
- }
1153
- // Export singleton instance
1154
- export const configManager = ConfigManager.getInstance();
1155
- // Helper function to load configuration
1156
- export async function loadConfig(path) {
1157
- return await configManager.load(path);
1158
- }
1159
- function deepClone(obj) {
1160
- return JSON.parse(JSON.stringify(obj));
1161
- }
1162
- export { SENSITIVE_PATHS, SECURITY_CLASSIFICATIONS };
1163
- // Custom deepMerge for Config type
1164
- function deepMergeConfig(target, ...sources) {
1165
- const result = deepClone(target);
1166
- for (const source of sources){
1167
- if (!source) continue;
1168
- // Merge each section
1169
- if (source.orchestrator) {
1170
- result.orchestrator = {
1171
- ...result.orchestrator,
1172
- ...source.orchestrator
1173
- };
1174
- }
1175
- if (source.terminal) {
1176
- result.terminal = {
1177
- ...result.terminal,
1178
- ...source.terminal
1179
- };
1180
- }
1181
- if (source.memory) {
1182
- result.memory = {
1183
- ...result.memory,
1184
- ...source.memory
1185
- };
1186
- }
1187
- if (source.coordination) {
1188
- result.coordination = {
1189
- ...result.coordination,
1190
- ...source.coordination
1191
- };
1192
- }
1193
- if (source.mcp) {
1194
- result.mcp = {
1195
- ...result.mcp,
1196
- ...source.mcp
1197
- };
1198
- }
1199
- if (source.logging) {
1200
- result.logging = {
1201
- ...result.logging,
1202
- ...source.logging
1203
- };
1204
- }
1205
- if (source.credentials) {
1206
- result.credentials = {
1207
- ...result.credentials,
1208
- ...source.credentials
1209
- };
1210
- }
1211
- if (source.security) {
1212
- result.security = {
1213
- ...result.security,
1214
- ...source.security
1215
- };
1216
- }
1217
- }
1218
- return result;
1219
- }
1220
-
1221
- //# sourceMappingURL=config.js.map