moflo 4.0.4 → 4.1.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 (422) hide show
  1. package/.claude/agents/MIGRATION_SUMMARY.md +221 -221
  2. package/.claude/agents/analysis/analyze-code-quality.md +178 -178
  3. package/.claude/agents/analysis/code-analyzer.md +209 -209
  4. package/.claude/agents/analysis/code-review/analyze-code-quality.md +178 -178
  5. package/.claude/agents/architecture/system-design/arch-system-design.md +154 -154
  6. package/.claude/agents/base-template-generator.md +42 -42
  7. package/.claude/agents/consensus/byzantine-coordinator.md +62 -62
  8. package/.claude/agents/consensus/crdt-synchronizer.md +996 -996
  9. package/.claude/agents/consensus/gossip-coordinator.md +62 -62
  10. package/.claude/agents/consensus/performance-benchmarker.md +850 -850
  11. package/.claude/agents/consensus/quorum-manager.md +822 -822
  12. package/.claude/agents/consensus/raft-manager.md +62 -62
  13. package/.claude/agents/consensus/security-manager.md +621 -621
  14. package/.claude/agents/core/coder.md +265 -265
  15. package/.claude/agents/core/planner.md +167 -167
  16. package/.claude/agents/core/researcher.md +189 -189
  17. package/.claude/agents/core/reviewer.md +325 -325
  18. package/.claude/agents/core/tester.md +318 -318
  19. package/.claude/agents/custom/test-long-runner.md +44 -44
  20. package/.claude/agents/data/ml/data-ml-model.md +192 -192
  21. package/.claude/agents/development/backend/dev-backend-api.md +141 -141
  22. package/.claude/agents/development/dev-backend-api.md +344 -344
  23. package/.claude/agents/devops/ci-cd/ops-cicd-github.md +163 -163
  24. package/.claude/agents/documentation/api-docs/docs-api-openapi.md +173 -173
  25. package/.claude/agents/dual-mode/codex-coordinator.md +224 -224
  26. package/.claude/agents/dual-mode/codex-worker.md +211 -211
  27. package/.claude/agents/dual-mode/dual-orchestrator.md +291 -291
  28. package/.claude/agents/flow-nexus/app-store.md +87 -87
  29. package/.claude/agents/flow-nexus/authentication.md +68 -68
  30. package/.claude/agents/flow-nexus/challenges.md +80 -80
  31. package/.claude/agents/flow-nexus/neural-network.md +87 -87
  32. package/.claude/agents/flow-nexus/payments.md +82 -82
  33. package/.claude/agents/flow-nexus/sandbox.md +75 -75
  34. package/.claude/agents/flow-nexus/swarm.md +75 -75
  35. package/.claude/agents/flow-nexus/user-tools.md +95 -95
  36. package/.claude/agents/flow-nexus/workflow.md +83 -83
  37. package/.claude/agents/github/code-review-swarm.md +537 -537
  38. package/.claude/agents/github/github-modes.md +172 -172
  39. package/.claude/agents/github/issue-tracker.md +318 -318
  40. package/.claude/agents/github/multi-repo-swarm.md +552 -552
  41. package/.claude/agents/github/pr-manager.md +190 -190
  42. package/.claude/agents/github/project-board-sync.md +508 -508
  43. package/.claude/agents/github/release-manager.md +366 -366
  44. package/.claude/agents/github/release-swarm.md +582 -582
  45. package/.claude/agents/github/repo-architect.md +397 -397
  46. package/.claude/agents/github/swarm-issue.md +572 -572
  47. package/.claude/agents/github/swarm-pr.md +427 -427
  48. package/.claude/agents/github/sync-coordinator.md +451 -451
  49. package/.claude/agents/github/workflow-automation.md +634 -634
  50. package/.claude/agents/goal/agent.md +815 -815
  51. package/.claude/agents/goal/code-goal-planner.md +445 -445
  52. package/.claude/agents/goal/goal-planner.md +167 -167
  53. package/.claude/agents/hive-mind/collective-intelligence-coordinator.md +129 -129
  54. package/.claude/agents/hive-mind/queen-coordinator.md +202 -202
  55. package/.claude/agents/hive-mind/scout-explorer.md +241 -241
  56. package/.claude/agents/hive-mind/swarm-memory-manager.md +192 -192
  57. package/.claude/agents/hive-mind/worker-specialist.md +216 -216
  58. package/.claude/agents/neural/safla-neural.md +73 -73
  59. package/.claude/agents/optimization/benchmark-suite.md +664 -664
  60. package/.claude/agents/optimization/load-balancer.md +430 -430
  61. package/.claude/agents/optimization/performance-monitor.md +671 -671
  62. package/.claude/agents/optimization/resource-allocator.md +673 -673
  63. package/.claude/agents/optimization/topology-optimizer.md +807 -807
  64. package/.claude/agents/payments/agentic-payments.md +126 -126
  65. package/.claude/agents/reasoning/agent.md +815 -815
  66. package/.claude/agents/reasoning/goal-planner.md +72 -72
  67. package/.claude/agents/sona/sona-learning-optimizer.md +74 -74
  68. package/.claude/agents/sparc/architecture.md +471 -471
  69. package/.claude/agents/sparc/pseudocode.md +317 -317
  70. package/.claude/agents/sparc/refinement.md +524 -524
  71. package/.claude/agents/sparc/specification.md +275 -275
  72. package/.claude/agents/specialized/mobile/spec-mobile-react-native.md +224 -224
  73. package/.claude/agents/sublinear/consensus-coordinator.md +337 -337
  74. package/.claude/agents/sublinear/matrix-optimizer.md +184 -184
  75. package/.claude/agents/sublinear/pagerank-analyzer.md +298 -298
  76. package/.claude/agents/sublinear/performance-optimizer.md +367 -367
  77. package/.claude/agents/sublinear/trading-predictor.md +245 -245
  78. package/.claude/agents/swarm/adaptive-coordinator.md +395 -395
  79. package/.claude/agents/swarm/hierarchical-coordinator.md +326 -326
  80. package/.claude/agents/swarm/mesh-coordinator.md +391 -391
  81. package/.claude/agents/templates/automation-smart-agent.md +204 -204
  82. package/.claude/agents/templates/coordinator-swarm-init.md +104 -104
  83. package/.claude/agents/templates/github-pr-manager.md +176 -176
  84. package/.claude/agents/templates/implementer-sparc-coder.md +258 -258
  85. package/.claude/agents/templates/memory-coordinator.md +186 -186
  86. package/.claude/agents/templates/migration-plan.md +745 -745
  87. package/.claude/agents/templates/orchestrator-task.md +138 -138
  88. package/.claude/agents/templates/performance-analyzer.md +198 -198
  89. package/.claude/agents/templates/sparc-coordinator.md +182 -182
  90. package/.claude/agents/testing/production-validator.md +394 -394
  91. package/.claude/agents/testing/tdd-london-swarm.md +243 -243
  92. package/.claude/agents/testing/unit/tdd-london-swarm.md +243 -243
  93. package/.claude/agents/testing/validation/production-validator.md +394 -394
  94. package/.claude/agents/v3/v3-integration-architect.md +345 -345
  95. package/.claude/agents/v3/v3-memory-specialist.md +317 -317
  96. package/.claude/agents/v3/v3-performance-engineer.md +396 -396
  97. package/.claude/agents/v3/v3-queen-coordinator.md +97 -97
  98. package/.claude/agents/v3/v3-security-architect.md +173 -173
  99. package/.claude/commands/agents/README.md +10 -10
  100. package/.claude/commands/agents/agent-capabilities.md +21 -21
  101. package/.claude/commands/agents/agent-coordination.md +28 -28
  102. package/.claude/commands/agents/agent-spawning.md +28 -28
  103. package/.claude/commands/agents/agent-types.md +26 -26
  104. package/.claude/commands/analysis/COMMAND_COMPLIANCE_REPORT.md +53 -53
  105. package/.claude/commands/analysis/README.md +9 -9
  106. package/.claude/commands/analysis/bottleneck-detect.md +162 -162
  107. package/.claude/commands/analysis/performance-bottlenecks.md +58 -58
  108. package/.claude/commands/analysis/performance-report.md +25 -25
  109. package/.claude/commands/analysis/token-efficiency.md +44 -44
  110. package/.claude/commands/analysis/token-usage.md +25 -25
  111. package/.claude/commands/automation/README.md +9 -9
  112. package/.claude/commands/automation/auto-agent.md +122 -122
  113. package/.claude/commands/automation/self-healing.md +105 -105
  114. package/.claude/commands/automation/session-memory.md +89 -89
  115. package/.claude/commands/automation/smart-agents.md +72 -72
  116. package/.claude/commands/automation/smart-spawn.md +25 -25
  117. package/.claude/commands/automation/workflow-select.md +25 -25
  118. package/.claude/commands/claude-flow-help.md +103 -103
  119. package/.claude/commands/claude-flow-memory.md +107 -107
  120. package/.claude/commands/claude-flow-swarm.md +205 -205
  121. package/.claude/commands/coordination/README.md +9 -9
  122. package/.claude/commands/coordination/agent-spawn.md +25 -25
  123. package/.claude/commands/coordination/init.md +44 -44
  124. package/.claude/commands/coordination/orchestrate.md +43 -43
  125. package/.claude/commands/coordination/spawn.md +45 -45
  126. package/.claude/commands/coordination/swarm-init.md +85 -85
  127. package/.claude/commands/coordination/task-orchestrate.md +25 -25
  128. package/.claude/commands/flow-nexus/app-store.md +123 -123
  129. package/.claude/commands/flow-nexus/challenges.md +119 -119
  130. package/.claude/commands/flow-nexus/login-registration.md +64 -64
  131. package/.claude/commands/flow-nexus/neural-network.md +133 -133
  132. package/.claude/commands/flow-nexus/payments.md +115 -115
  133. package/.claude/commands/flow-nexus/sandbox.md +82 -82
  134. package/.claude/commands/flow-nexus/swarm.md +86 -86
  135. package/.claude/commands/flow-nexus/user-tools.md +151 -151
  136. package/.claude/commands/flow-nexus/workflow.md +114 -114
  137. package/.claude/commands/github/README.md +11 -11
  138. package/.claude/commands/github/code-review-swarm.md +513 -513
  139. package/.claude/commands/github/code-review.md +25 -25
  140. package/.claude/commands/github/github-modes.md +146 -146
  141. package/.claude/commands/github/github-swarm.md +121 -121
  142. package/.claude/commands/github/issue-tracker.md +291 -291
  143. package/.claude/commands/github/issue-triage.md +25 -25
  144. package/.claude/commands/github/multi-repo-swarm.md +518 -518
  145. package/.claude/commands/github/pr-enhance.md +26 -26
  146. package/.claude/commands/github/pr-manager.md +169 -169
  147. package/.claude/commands/github/project-board-sync.md +470 -470
  148. package/.claude/commands/github/release-manager.md +337 -337
  149. package/.claude/commands/github/release-swarm.md +543 -543
  150. package/.claude/commands/github/repo-analyze.md +25 -25
  151. package/.claude/commands/github/repo-architect.md +366 -366
  152. package/.claude/commands/github/swarm-issue.md +481 -481
  153. package/.claude/commands/github/swarm-pr.md +284 -284
  154. package/.claude/commands/github/sync-coordinator.md +300 -300
  155. package/.claude/commands/github/workflow-automation.md +441 -441
  156. package/.claude/commands/hive-mind/README.md +17 -17
  157. package/.claude/commands/hive-mind/hive-mind-consensus.md +8 -8
  158. package/.claude/commands/hive-mind/hive-mind-init.md +18 -18
  159. package/.claude/commands/hive-mind/hive-mind-memory.md +8 -8
  160. package/.claude/commands/hive-mind/hive-mind-metrics.md +8 -8
  161. package/.claude/commands/hive-mind/hive-mind-resume.md +8 -8
  162. package/.claude/commands/hive-mind/hive-mind-sessions.md +8 -8
  163. package/.claude/commands/hive-mind/hive-mind-spawn.md +21 -21
  164. package/.claude/commands/hive-mind/hive-mind-status.md +8 -8
  165. package/.claude/commands/hive-mind/hive-mind-stop.md +8 -8
  166. package/.claude/commands/hive-mind/hive-mind-wizard.md +8 -8
  167. package/.claude/commands/hive-mind/hive-mind.md +27 -27
  168. package/.claude/commands/hooks/README.md +11 -11
  169. package/.claude/commands/hooks/overview.md +57 -57
  170. package/.claude/commands/hooks/post-edit.md +117 -117
  171. package/.claude/commands/hooks/post-task.md +112 -112
  172. package/.claude/commands/hooks/pre-edit.md +113 -113
  173. package/.claude/commands/hooks/pre-task.md +111 -111
  174. package/.claude/commands/hooks/session-end.md +118 -118
  175. package/.claude/commands/hooks/setup.md +102 -102
  176. package/.claude/commands/memory/README.md +9 -9
  177. package/.claude/commands/memory/memory-persist.md +25 -25
  178. package/.claude/commands/memory/memory-search.md +25 -25
  179. package/.claude/commands/memory/memory-usage.md +25 -25
  180. package/.claude/commands/memory/neural.md +47 -47
  181. package/.claude/commands/monitoring/README.md +9 -9
  182. package/.claude/commands/monitoring/agent-metrics.md +25 -25
  183. package/.claude/commands/monitoring/agents.md +44 -44
  184. package/.claude/commands/monitoring/real-time-view.md +25 -25
  185. package/.claude/commands/monitoring/status.md +46 -46
  186. package/.claude/commands/monitoring/swarm-monitor.md +25 -25
  187. package/.claude/commands/optimization/README.md +9 -9
  188. package/.claude/commands/optimization/auto-topology.md +61 -61
  189. package/.claude/commands/optimization/cache-manage.md +25 -25
  190. package/.claude/commands/optimization/parallel-execute.md +25 -25
  191. package/.claude/commands/optimization/parallel-execution.md +49 -49
  192. package/.claude/commands/optimization/topology-optimize.md +25 -25
  193. package/.claude/commands/pair/README.md +260 -260
  194. package/.claude/commands/pair/commands.md +545 -545
  195. package/.claude/commands/pair/config.md +509 -509
  196. package/.claude/commands/pair/examples.md +511 -511
  197. package/.claude/commands/pair/modes.md +347 -347
  198. package/.claude/commands/pair/session.md +406 -406
  199. package/.claude/commands/pair/start.md +208 -208
  200. package/.claude/commands/sparc/analyzer.md +51 -51
  201. package/.claude/commands/sparc/architect.md +53 -53
  202. package/.claude/commands/sparc/ask.md +97 -97
  203. package/.claude/commands/sparc/batch-executor.md +54 -54
  204. package/.claude/commands/sparc/code.md +89 -89
  205. package/.claude/commands/sparc/coder.md +54 -54
  206. package/.claude/commands/sparc/debug.md +83 -83
  207. package/.claude/commands/sparc/debugger.md +54 -54
  208. package/.claude/commands/sparc/designer.md +53 -53
  209. package/.claude/commands/sparc/devops.md +109 -109
  210. package/.claude/commands/sparc/docs-writer.md +80 -80
  211. package/.claude/commands/sparc/documenter.md +54 -54
  212. package/.claude/commands/sparc/innovator.md +54 -54
  213. package/.claude/commands/sparc/integration.md +83 -83
  214. package/.claude/commands/sparc/mcp.md +117 -117
  215. package/.claude/commands/sparc/memory-manager.md +54 -54
  216. package/.claude/commands/sparc/optimizer.md +54 -54
  217. package/.claude/commands/sparc/orchestrator.md +131 -131
  218. package/.claude/commands/sparc/post-deployment-monitoring-mode.md +83 -83
  219. package/.claude/commands/sparc/refinement-optimization-mode.md +83 -83
  220. package/.claude/commands/sparc/researcher.md +54 -54
  221. package/.claude/commands/sparc/reviewer.md +54 -54
  222. package/.claude/commands/sparc/security-review.md +80 -80
  223. package/.claude/commands/sparc/sparc-modes.md +174 -174
  224. package/.claude/commands/sparc/sparc.md +111 -111
  225. package/.claude/commands/sparc/spec-pseudocode.md +80 -80
  226. package/.claude/commands/sparc/supabase-admin.md +348 -348
  227. package/.claude/commands/sparc/swarm-coordinator.md +54 -54
  228. package/.claude/commands/sparc/tdd.md +54 -54
  229. package/.claude/commands/sparc/tester.md +54 -54
  230. package/.claude/commands/sparc/tutorial.md +79 -79
  231. package/.claude/commands/sparc/workflow-manager.md +54 -54
  232. package/.claude/commands/sparc.md +166 -166
  233. package/.claude/commands/stream-chain/pipeline.md +120 -120
  234. package/.claude/commands/stream-chain/run.md +69 -69
  235. package/.claude/commands/swarm/README.md +15 -15
  236. package/.claude/commands/swarm/analysis.md +95 -95
  237. package/.claude/commands/swarm/development.md +96 -96
  238. package/.claude/commands/swarm/examples.md +168 -168
  239. package/.claude/commands/swarm/maintenance.md +102 -102
  240. package/.claude/commands/swarm/optimization.md +117 -117
  241. package/.claude/commands/swarm/research.md +136 -136
  242. package/.claude/commands/swarm/swarm-analysis.md +8 -8
  243. package/.claude/commands/swarm/swarm-background.md +8 -8
  244. package/.claude/commands/swarm/swarm-init.md +19 -19
  245. package/.claude/commands/swarm/swarm-modes.md +8 -8
  246. package/.claude/commands/swarm/swarm-monitor.md +8 -8
  247. package/.claude/commands/swarm/swarm-spawn.md +19 -19
  248. package/.claude/commands/swarm/swarm-status.md +8 -8
  249. package/.claude/commands/swarm/swarm-strategies.md +8 -8
  250. package/.claude/commands/swarm/swarm.md +27 -27
  251. package/.claude/commands/swarm/testing.md +131 -131
  252. package/.claude/commands/training/README.md +9 -9
  253. package/.claude/commands/training/model-update.md +25 -25
  254. package/.claude/commands/training/neural-patterns.md +73 -73
  255. package/.claude/commands/training/neural-train.md +25 -25
  256. package/.claude/commands/training/pattern-learn.md +25 -25
  257. package/.claude/commands/training/specialization.md +62 -62
  258. package/.claude/commands/truth/start.md +142 -142
  259. package/.claude/commands/verify/check.md +49 -49
  260. package/.claude/commands/verify/start.md +127 -127
  261. package/.claude/commands/workflows/README.md +9 -9
  262. package/.claude/commands/workflows/development.md +77 -77
  263. package/.claude/commands/workflows/research.md +62 -62
  264. package/.claude/commands/workflows/workflow-create.md +25 -25
  265. package/.claude/commands/workflows/workflow-execute.md +25 -25
  266. package/.claude/commands/workflows/workflow-export.md +25 -25
  267. package/.claude/config/v3-dependency-optimization.json +265 -265
  268. package/.claude/config/v3-performance-targets.json +250 -250
  269. package/.claude/helpers/README.md +96 -96
  270. package/.claude/helpers/aggressive-microcompact.mjs +36 -36
  271. package/.claude/helpers/auto-memory-hook.mjs +363 -363
  272. package/.claude/helpers/context-persistence-hook.mjs +1979 -1979
  273. package/.claude/helpers/github-safe.js +106 -106
  274. package/.claude/helpers/learning-service.mjs +1144 -1144
  275. package/.claude/helpers/metrics-db.mjs +488 -488
  276. package/.claude/helpers/patch-aggressive-prune.mjs +184 -184
  277. package/.claude/mcp.json +12 -12
  278. package/.claude/settings.json +2 -2
  279. package/.claude/skills/agentdb-advanced/SKILL.md +550 -550
  280. package/.claude/skills/agentdb-learning/SKILL.md +545 -545
  281. package/.claude/skills/agentdb-memory-patterns/SKILL.md +339 -339
  282. package/.claude/skills/agentdb-optimization/SKILL.md +509 -509
  283. package/.claude/skills/agentdb-vector-search/SKILL.md +339 -339
  284. package/.claude/skills/agentic-jujutsu/SKILL.md +645 -645
  285. package/.claude/skills/dual-mode/README.md +71 -71
  286. package/.claude/skills/dual-mode/dual-collect.md +103 -103
  287. package/.claude/skills/dual-mode/dual-coordinate.md +85 -85
  288. package/.claude/skills/dual-mode/dual-spawn.md +81 -81
  289. package/.claude/skills/flow-nexus-neural/SKILL.md +738 -738
  290. package/.claude/skills/flow-nexus-platform/SKILL.md +1157 -1157
  291. package/.claude/skills/flow-nexus-swarm/SKILL.md +610 -610
  292. package/.claude/skills/github-code-review/SKILL.md +1 -1
  293. package/.claude/skills/github-multi-repo/SKILL.md +2 -2
  294. package/.claude/skills/github-project-management/SKILL.md +1 -1
  295. package/.claude/skills/github-release-management/SKILL.md +2 -2
  296. package/.claude/skills/github-workflow-automation/SKILL.md +1 -1
  297. package/.claude/skills/hive-mind-advanced/SKILL.md +4 -4
  298. package/.claude/skills/hooks-automation/SKILL.md +1201 -1201
  299. package/.claude/skills/pair-programming/SKILL.md +1202 -1202
  300. package/.claude/skills/performance-analysis/SKILL.md +563 -563
  301. package/.claude/skills/reasoningbank-agentdb/SKILL.md +446 -446
  302. package/.claude/skills/reasoningbank-intelligence/SKILL.md +201 -201
  303. package/.claude/skills/skill-builder/SKILL.md +910 -910
  304. package/.claude/skills/sparc-methodology/SKILL.md +2 -2
  305. package/.claude/skills/stream-chain/SKILL.md +563 -563
  306. package/.claude/skills/swarm-advanced/SKILL.md +4 -4
  307. package/.claude/skills/swarm-orchestration/SKILL.md +179 -179
  308. package/.claude/skills/v3-cli-modernization/SKILL.md +871 -871
  309. package/.claude/skills/v3-core-implementation/SKILL.md +796 -796
  310. package/.claude/skills/v3-ddd-architecture/SKILL.md +441 -441
  311. package/.claude/skills/v3-integration-deep/SKILL.md +240 -240
  312. package/.claude/skills/v3-mcp-optimization/SKILL.md +776 -776
  313. package/.claude/skills/v3-memory-unification/SKILL.md +173 -173
  314. package/.claude/skills/v3-performance-optimization/SKILL.md +389 -389
  315. package/.claude/skills/v3-security-overhaul/SKILL.md +81 -81
  316. package/.claude/skills/v3-swarm-coordination/SKILL.md +339 -339
  317. package/.claude/skills/verification-quality/SKILL.md +649 -649
  318. package/.claude/skills/worker-benchmarks/skill.md +135 -135
  319. package/.claude/skills/worker-integration/skill.md +154 -154
  320. package/.claude/statusline.mjs +109 -109
  321. package/.claude-plugin/README.md +6 -6
  322. package/.claude-plugin/docs/INSTALLATION.md +4 -4
  323. package/.claude-plugin/docs/PLUGIN_SUMMARY.md +5 -5
  324. package/.claude-plugin/docs/QUICKSTART.md +1 -1
  325. package/.claude-plugin/docs/STRUCTURE.md +128 -128
  326. package/.claude-plugin/hooks/hooks.json +74 -74
  327. package/.claude-plugin/marketplace.json +5 -5
  328. package/.claude-plugin/plugin.json +4 -4
  329. package/README.md +148 -148
  330. package/bin/cli.js +12 -12
  331. package/bin/npx-repair.js +7 -7
  332. package/bin/npx-safe-launch.js +9 -9
  333. package/package.json +115 -114
  334. package/v3/@claude-flow/cli/README.md +5 -5
  335. package/v3/@claude-flow/cli/bin/cli.js +156 -156
  336. package/v3/@claude-flow/cli/bin/mcp-server.js +189 -189
  337. package/v3/@claude-flow/cli/dist/src/commands/analyze.d.ts +1 -1
  338. package/v3/@claude-flow/cli/dist/src/commands/analyze.js +1 -1
  339. package/v3/@claude-flow/cli/dist/src/commands/claims.d.ts +1 -1
  340. package/v3/@claude-flow/cli/dist/src/commands/claims.js +2 -2
  341. package/v3/@claude-flow/cli/dist/src/commands/completions.d.ts +1 -1
  342. package/v3/@claude-flow/cli/dist/src/commands/completions.js +1 -1
  343. package/v3/@claude-flow/cli/dist/src/commands/config.js +36 -2
  344. package/v3/@claude-flow/cli/dist/src/commands/daemon.js +54 -7
  345. package/v3/@claude-flow/cli/dist/src/commands/deployment.d.ts +1 -1
  346. package/v3/@claude-flow/cli/dist/src/commands/deployment.js +2 -2
  347. package/v3/@claude-flow/cli/dist/src/commands/doctor.d.ts +1 -1
  348. package/v3/@claude-flow/cli/dist/src/commands/doctor.js +1 -1
  349. package/v3/@claude-flow/cli/dist/src/commands/embeddings.d.ts +1 -1
  350. package/v3/@claude-flow/cli/dist/src/commands/embeddings.js +2 -2
  351. package/v3/@claude-flow/cli/dist/src/commands/hive-mind.js +90 -90
  352. package/v3/@claude-flow/cli/dist/src/commands/hooks.js +30 -112
  353. package/v3/@claude-flow/cli/dist/src/commands/init.js +6 -1
  354. package/v3/@claude-flow/cli/dist/src/commands/memory.js +30 -30
  355. package/v3/@claude-flow/cli/dist/src/commands/neural.d.ts +1 -1
  356. package/v3/@claude-flow/cli/dist/src/commands/neural.js +2 -2
  357. package/v3/@claude-flow/cli/dist/src/commands/orc.js +1 -0
  358. package/v3/@claude-flow/cli/dist/src/commands/performance.d.ts +1 -1
  359. package/v3/@claude-flow/cli/dist/src/commands/performance.js +2 -2
  360. package/v3/@claude-flow/cli/dist/src/commands/plugins.d.ts +1 -1
  361. package/v3/@claude-flow/cli/dist/src/commands/plugins.js +2 -2
  362. package/v3/@claude-flow/cli/dist/src/commands/providers.d.ts +1 -1
  363. package/v3/@claude-flow/cli/dist/src/commands/providers.js +2 -2
  364. package/v3/@claude-flow/cli/dist/src/commands/route.d.ts +1 -1
  365. package/v3/@claude-flow/cli/dist/src/commands/route.js +1 -1
  366. package/v3/@claude-flow/cli/dist/src/commands/ruvector/backup.js +23 -23
  367. package/v3/@claude-flow/cli/dist/src/commands/ruvector/benchmark.js +29 -29
  368. package/v3/@claude-flow/cli/dist/src/commands/ruvector/import.d.ts +1 -1
  369. package/v3/@claude-flow/cli/dist/src/commands/ruvector/import.js +1 -1
  370. package/v3/@claude-flow/cli/dist/src/commands/ruvector/index.d.ts +1 -1
  371. package/v3/@claude-flow/cli/dist/src/commands/ruvector/index.js +1 -1
  372. package/v3/@claude-flow/cli/dist/src/commands/ruvector/init.js +113 -113
  373. package/v3/@claude-flow/cli/dist/src/commands/ruvector/migrate.js +97 -97
  374. package/v3/@claude-flow/cli/dist/src/commands/ruvector/optimize.js +51 -51
  375. package/v3/@claude-flow/cli/dist/src/commands/ruvector/setup.d.ts +1 -1
  376. package/v3/@claude-flow/cli/dist/src/commands/ruvector/setup.js +2 -2
  377. package/v3/@claude-flow/cli/dist/src/commands/ruvector/status.js +36 -36
  378. package/v3/@claude-flow/cli/dist/src/commands/security.d.ts +1 -1
  379. package/v3/@claude-flow/cli/dist/src/commands/security.js +2 -2
  380. package/v3/@claude-flow/cli/dist/src/config/moflo-config.d.ts +13 -1
  381. package/v3/@claude-flow/cli/dist/src/config/moflo-config.js +93 -41
  382. package/v3/@claude-flow/cli/dist/src/index.d.ts +1 -1
  383. package/v3/@claude-flow/cli/dist/src/index.js +2 -2
  384. package/v3/@claude-flow/cli/dist/src/init/claudemd-generator.js +2 -2
  385. package/v3/@claude-flow/cli/dist/src/init/executor.js +3 -3
  386. package/v3/@claude-flow/cli/dist/src/init/helpers-generator.js +640 -640
  387. package/v3/@claude-flow/cli/dist/src/init/moflo-init.d.ts +10 -0
  388. package/v3/@claude-flow/cli/dist/src/init/moflo-init.js +101 -20
  389. package/v3/@claude-flow/cli/dist/src/init/settings-generator.js +2 -2
  390. package/v3/@claude-flow/cli/dist/src/init/statusline-generator.js +783 -783
  391. package/v3/@claude-flow/cli/dist/src/mcp-tools/hooks-tools.js +30 -13
  392. package/v3/@claude-flow/cli/dist/src/mcp-tools/security-tools.d.ts +1 -1
  393. package/v3/@claude-flow/cli/dist/src/mcp-tools/security-tools.js +1 -1
  394. package/v3/@claude-flow/cli/dist/src/memory/memory-bridge.js +61 -61
  395. package/v3/@claude-flow/cli/dist/src/memory/memory-initializer.js +2212 -2263
  396. package/v3/@claude-flow/cli/dist/src/runtime/headless.js +28 -28
  397. package/v3/@claude-flow/cli/dist/src/ruvector/flash-attention.d.ts +1 -1
  398. package/v3/@claude-flow/cli/dist/src/ruvector/flash-attention.js +1 -1
  399. package/v3/@claude-flow/cli/dist/src/ruvector/vector-db.d.ts +1 -1
  400. package/v3/@claude-flow/cli/dist/src/ruvector/vector-db.js +1 -1
  401. package/v3/@claude-flow/cli/dist/src/services/agent-router.d.ts +14 -0
  402. package/v3/@claude-flow/cli/dist/src/services/agent-router.js +86 -7
  403. package/v3/@claude-flow/cli/dist/src/services/headless-worker-executor.js +84 -84
  404. package/v3/@claude-flow/cli/dist/src/services/index.d.ts +1 -3
  405. package/v3/@claude-flow/cli/dist/src/services/index.js +1 -2
  406. package/v3/@claude-flow/cli/dist/src/services/learning-service.js +54 -54
  407. package/v3/@claude-flow/cli/dist/src/services/ruvector-training.d.ts +1 -1
  408. package/v3/@claude-flow/cli/dist/src/services/ruvector-training.js +1 -1
  409. package/v3/@claude-flow/cli/dist/src/services/worker-daemon.d.ts +24 -3
  410. package/v3/@claude-flow/cli/dist/src/services/worker-daemon.js +123 -12
  411. package/v3/@claude-flow/cli/dist/src/services/workflow-gate.d.ts +1 -0
  412. package/v3/@claude-flow/cli/dist/src/services/workflow-gate.js +20 -5
  413. package/v3/@claude-flow/cli/dist/src/suggest.d.ts +1 -1
  414. package/v3/@claude-flow/cli/dist/src/suggest.js +1 -1
  415. package/v3/@claude-flow/cli/dist/src/transfer/deploy-seraphine.js +23 -23
  416. package/v3/@claude-flow/cli/package.json +6 -6
  417. package/v3/@claude-flow/guidance/README.md +6 -6
  418. package/v3/@claude-flow/guidance/package.json +1 -1
  419. package/v3/@claude-flow/memory/README.md +1 -1
  420. package/v3/@claude-flow/shared/README.md +1 -1
  421. package/v3/@claude-flow/shared/package.json +42 -42
  422. package/v3/README.md +3 -3
@@ -7,348 +7,348 @@ import { generateStatuslineScript, generateStatuslineHook } from './statusline-g
7
7
  * Generate pre-commit hook script
8
8
  */
9
9
  export function generatePreCommitHook() {
10
- return `#!/bin/bash
11
- # Claude Flow Pre-Commit Hook
12
- # Validates code quality before commit
13
-
14
- set -e
15
-
16
- echo "🔍 Running Claude Flow pre-commit checks..."
17
-
18
- # Get staged files
19
- STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM)
20
-
21
- # Run validation for each staged file
22
- for FILE in $STAGED_FILES; do
23
- if [[ "$FILE" =~ \\.(ts|js|tsx|jsx)$ ]]; then
24
- echo " Validating: $FILE"
25
- npx @claude-flow/cli hooks pre-edit --file "$FILE" --validate-syntax 2>/dev/null || true
26
- fi
27
- done
28
-
29
- # Run tests if available
30
- if [ -f "package.json" ] && grep -q '"test"' package.json; then
31
- echo "🧪 Running tests..."
32
- npm test --if-present 2>/dev/null || echo " Tests skipped or failed"
33
- fi
34
-
35
- echo "✅ Pre-commit checks complete"
10
+ return `#!/bin/bash
11
+ # Claude Flow Pre-Commit Hook
12
+ # Validates code quality before commit
13
+
14
+ set -e
15
+
16
+ echo "🔍 Running Claude Flow pre-commit checks..."
17
+
18
+ # Get staged files
19
+ STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM)
20
+
21
+ # Run validation for each staged file
22
+ for FILE in $STAGED_FILES; do
23
+ if [[ "$FILE" =~ \\.(ts|js|tsx|jsx)$ ]]; then
24
+ echo " Validating: $FILE"
25
+ npx @claude-flow/cli hooks pre-edit --file "$FILE" --validate-syntax 2>/dev/null || true
26
+ fi
27
+ done
28
+
29
+ # Run tests if available
30
+ if [ -f "package.json" ] && grep -q '"test"' package.json; then
31
+ echo "🧪 Running tests..."
32
+ npm test --if-present 2>/dev/null || echo " Tests skipped or failed"
33
+ fi
34
+
35
+ echo "✅ Pre-commit checks complete"
36
36
  `;
37
37
  }
38
38
  /**
39
39
  * Generate post-commit hook script
40
40
  */
41
41
  export function generatePostCommitHook() {
42
- return `#!/bin/bash
43
- # Claude Flow Post-Commit Hook
44
- # Records commit metrics and trains patterns
45
-
46
- COMMIT_HASH=$(git rev-parse HEAD)
47
- COMMIT_MSG=$(git log -1 --pretty=%B)
48
-
49
- echo "📊 Recording commit metrics..."
50
-
51
- # Notify claude-flow of commit
52
- npx @claude-flow/cli hooks notify \\
53
- --message "Commit: $COMMIT_MSG" \\
54
- --level info \\
55
- --metadata '{"hash": "'$COMMIT_HASH'"}' 2>/dev/null || true
56
-
57
- echo "✅ Commit recorded"
42
+ return `#!/bin/bash
43
+ # Claude Flow Post-Commit Hook
44
+ # Records commit metrics and trains patterns
45
+
46
+ COMMIT_HASH=$(git rev-parse HEAD)
47
+ COMMIT_MSG=$(git log -1 --pretty=%B)
48
+
49
+ echo "📊 Recording commit metrics..."
50
+
51
+ # Notify claude-flow of commit
52
+ npx @claude-flow/cli hooks notify \\
53
+ --message "Commit: $COMMIT_MSG" \\
54
+ --level info \\
55
+ --metadata '{"hash": "'$COMMIT_HASH'"}' 2>/dev/null || true
56
+
57
+ echo "✅ Commit recorded"
58
58
  `;
59
59
  }
60
60
  /**
61
61
  * Generate session manager script
62
62
  */
63
63
  export function generateSessionManager() {
64
- return `#!/usr/bin/env node
65
- /**
66
- * Claude Flow Session Manager
67
- * Handles session lifecycle: start, restore, end
68
- */
69
-
70
- const fs = require('fs');
71
- const path = require('path');
72
-
73
- const SESSION_DIR = path.join(process.cwd(), '.claude-flow', 'sessions');
74
- const SESSION_FILE = path.join(SESSION_DIR, 'current.json');
75
-
76
- const commands = {
77
- start: () => {
78
- const sessionId = \`session-\${Date.now()}\`;
79
- const session = {
80
- id: sessionId,
81
- startedAt: new Date().toISOString(),
82
- cwd: process.cwd(),
83
- context: {},
84
- metrics: {
85
- edits: 0,
86
- commands: 0,
87
- tasks: 0,
88
- errors: 0,
89
- },
90
- };
91
-
92
- fs.mkdirSync(SESSION_DIR, { recursive: true });
93
- fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));
94
-
95
- console.log(\`Session started: \${sessionId}\`);
96
- return session;
97
- },
98
-
99
- restore: () => {
100
- if (!fs.existsSync(SESSION_FILE)) {
101
- console.log('No session to restore');
102
- return null;
103
- }
104
-
105
- const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
106
- session.restoredAt = new Date().toISOString();
107
- fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));
108
-
109
- console.log(\`Session restored: \${session.id}\`);
110
- return session;
111
- },
112
-
113
- end: () => {
114
- if (!fs.existsSync(SESSION_FILE)) {
115
- console.log('No active session');
116
- return null;
117
- }
118
-
119
- const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
120
- session.endedAt = new Date().toISOString();
121
- session.duration = Date.now() - new Date(session.startedAt).getTime();
122
-
123
- // Archive session
124
- const archivePath = path.join(SESSION_DIR, \`\${session.id}.json\`);
125
- fs.writeFileSync(archivePath, JSON.stringify(session, null, 2));
126
- fs.unlinkSync(SESSION_FILE);
127
-
128
- console.log(\`Session ended: \${session.id}\`);
129
- console.log(\`Duration: \${Math.round(session.duration / 1000 / 60)} minutes\`);
130
- console.log(\`Metrics: \${JSON.stringify(session.metrics)}\`);
131
-
132
- return session;
133
- },
134
-
135
- status: () => {
136
- if (!fs.existsSync(SESSION_FILE)) {
137
- console.log('No active session');
138
- return null;
139
- }
140
-
141
- const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
142
- const duration = Date.now() - new Date(session.startedAt).getTime();
143
-
144
- console.log(\`Session: \${session.id}\`);
145
- console.log(\`Started: \${session.startedAt}\`);
146
- console.log(\`Duration: \${Math.round(duration / 1000 / 60)} minutes\`);
147
- console.log(\`Metrics: \${JSON.stringify(session.metrics)}\`);
148
-
149
- return session;
150
- },
151
-
152
- update: (key, value) => {
153
- if (!fs.existsSync(SESSION_FILE)) {
154
- console.log('No active session');
155
- return null;
156
- }
157
-
158
- const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
159
- session.context[key] = value;
160
- session.updatedAt = new Date().toISOString();
161
- fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));
162
-
163
- return session;
164
- },
165
-
166
- metric: (name) => {
167
- if (!fs.existsSync(SESSION_FILE)) {
168
- return null;
169
- }
170
-
171
- const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
172
- if (session.metrics[name] !== undefined) {
173
- session.metrics[name]++;
174
- fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));
175
- }
176
-
177
- return session;
178
- },
179
- };
180
-
181
- // CLI
182
- const [,, command, ...args] = process.argv;
183
-
184
- if (command && commands[command]) {
185
- commands[command](...args);
186
- } else {
187
- console.log('Usage: session.js <start|restore|end|status|update|metric> [args]');
188
- }
189
-
190
- module.exports = commands;
64
+ return `#!/usr/bin/env node
65
+ /**
66
+ * Claude Flow Session Manager
67
+ * Handles session lifecycle: start, restore, end
68
+ */
69
+
70
+ const fs = require('fs');
71
+ const path = require('path');
72
+
73
+ const SESSION_DIR = path.join(process.cwd(), '.claude-flow', 'sessions');
74
+ const SESSION_FILE = path.join(SESSION_DIR, 'current.json');
75
+
76
+ const commands = {
77
+ start: () => {
78
+ const sessionId = \`session-\${Date.now()}\`;
79
+ const session = {
80
+ id: sessionId,
81
+ startedAt: new Date().toISOString(),
82
+ cwd: process.cwd(),
83
+ context: {},
84
+ metrics: {
85
+ edits: 0,
86
+ commands: 0,
87
+ tasks: 0,
88
+ errors: 0,
89
+ },
90
+ };
91
+
92
+ fs.mkdirSync(SESSION_DIR, { recursive: true });
93
+ fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));
94
+
95
+ console.log(\`Session started: \${sessionId}\`);
96
+ return session;
97
+ },
98
+
99
+ restore: () => {
100
+ if (!fs.existsSync(SESSION_FILE)) {
101
+ console.log('No session to restore');
102
+ return null;
103
+ }
104
+
105
+ const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
106
+ session.restoredAt = new Date().toISOString();
107
+ fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));
108
+
109
+ console.log(\`Session restored: \${session.id}\`);
110
+ return session;
111
+ },
112
+
113
+ end: () => {
114
+ if (!fs.existsSync(SESSION_FILE)) {
115
+ console.log('No active session');
116
+ return null;
117
+ }
118
+
119
+ const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
120
+ session.endedAt = new Date().toISOString();
121
+ session.duration = Date.now() - new Date(session.startedAt).getTime();
122
+
123
+ // Archive session
124
+ const archivePath = path.join(SESSION_DIR, \`\${session.id}.json\`);
125
+ fs.writeFileSync(archivePath, JSON.stringify(session, null, 2));
126
+ fs.unlinkSync(SESSION_FILE);
127
+
128
+ console.log(\`Session ended: \${session.id}\`);
129
+ console.log(\`Duration: \${Math.round(session.duration / 1000 / 60)} minutes\`);
130
+ console.log(\`Metrics: \${JSON.stringify(session.metrics)}\`);
131
+
132
+ return session;
133
+ },
134
+
135
+ status: () => {
136
+ if (!fs.existsSync(SESSION_FILE)) {
137
+ console.log('No active session');
138
+ return null;
139
+ }
140
+
141
+ const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
142
+ const duration = Date.now() - new Date(session.startedAt).getTime();
143
+
144
+ console.log(\`Session: \${session.id}\`);
145
+ console.log(\`Started: \${session.startedAt}\`);
146
+ console.log(\`Duration: \${Math.round(duration / 1000 / 60)} minutes\`);
147
+ console.log(\`Metrics: \${JSON.stringify(session.metrics)}\`);
148
+
149
+ return session;
150
+ },
151
+
152
+ update: (key, value) => {
153
+ if (!fs.existsSync(SESSION_FILE)) {
154
+ console.log('No active session');
155
+ return null;
156
+ }
157
+
158
+ const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
159
+ session.context[key] = value;
160
+ session.updatedAt = new Date().toISOString();
161
+ fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));
162
+
163
+ return session;
164
+ },
165
+
166
+ metric: (name) => {
167
+ if (!fs.existsSync(SESSION_FILE)) {
168
+ return null;
169
+ }
170
+
171
+ const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
172
+ if (session.metrics[name] !== undefined) {
173
+ session.metrics[name]++;
174
+ fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));
175
+ }
176
+
177
+ return session;
178
+ },
179
+ };
180
+
181
+ // CLI
182
+ const [,, command, ...args] = process.argv;
183
+
184
+ if (command && commands[command]) {
185
+ commands[command](...args);
186
+ } else {
187
+ console.log('Usage: session.js <start|restore|end|status|update|metric> [args]');
188
+ }
189
+
190
+ module.exports = commands;
191
191
  `;
192
192
  }
193
193
  /**
194
194
  * Generate agent router script
195
195
  */
196
196
  export function generateAgentRouter() {
197
- return `#!/usr/bin/env node
198
- /**
199
- * Claude Flow Agent Router
200
- * Routes tasks to optimal agents based on learned patterns
201
- */
202
-
203
- const AGENT_CAPABILITIES = {
204
- coder: ['code-generation', 'refactoring', 'debugging', 'implementation'],
205
- tester: ['unit-testing', 'integration-testing', 'coverage', 'test-generation'],
206
- reviewer: ['code-review', 'security-audit', 'quality-check', 'best-practices'],
207
- researcher: ['web-search', 'documentation', 'analysis', 'summarization'],
208
- architect: ['system-design', 'architecture', 'patterns', 'scalability'],
209
- 'backend-dev': ['api', 'database', 'server', 'authentication'],
210
- 'frontend-dev': ['ui', 'react', 'css', 'components'],
211
- devops: ['ci-cd', 'docker', 'deployment', 'infrastructure'],
212
- };
213
-
214
- const TASK_PATTERNS = {
215
- // Code patterns
216
- 'implement|create|build|add|write code': 'coder',
217
- 'test|spec|coverage|unit test|integration': 'tester',
218
- 'review|audit|check|validate|security': 'reviewer',
219
- 'research|find|search|documentation|explore': 'researcher',
220
- 'design|architect|structure|plan': 'architect',
221
-
222
- // Domain patterns
223
- 'api|endpoint|server|backend|database': 'backend-dev',
224
- 'ui|frontend|component|react|css|style': 'frontend-dev',
225
- 'deploy|docker|ci|cd|pipeline|infrastructure': 'devops',
226
- };
227
-
228
- function routeTask(task) {
229
- const taskLower = task.toLowerCase();
230
-
231
- // Check patterns
232
- for (const [pattern, agent] of Object.entries(TASK_PATTERNS)) {
233
- const regex = new RegExp(pattern, 'i');
234
- if (regex.test(taskLower)) {
235
- return {
236
- agent,
237
- confidence: 0.8,
238
- reason: \`Matched pattern: \${pattern}\`,
239
- };
240
- }
241
- }
242
-
243
- // Default to coder for unknown tasks
244
- return {
245
- agent: 'coder',
246
- confidence: 0.5,
247
- reason: 'Default routing - no specific pattern matched',
248
- };
249
- }
250
-
251
- // CLI
252
- const task = process.argv.slice(2).join(' ');
253
-
254
- if (task) {
255
- const result = routeTask(task);
256
- console.log(JSON.stringify(result, null, 2));
257
- } else {
258
- console.log('Usage: router.js <task description>');
259
- console.log('\\nAvailable agents:', Object.keys(AGENT_CAPABILITIES).join(', '));
260
- }
261
-
262
- module.exports = { routeTask, AGENT_CAPABILITIES, TASK_PATTERNS };
197
+ return `#!/usr/bin/env node
198
+ /**
199
+ * Claude Flow Agent Router
200
+ * Routes tasks to optimal agents based on learned patterns
201
+ */
202
+
203
+ const AGENT_CAPABILITIES = {
204
+ coder: ['code-generation', 'refactoring', 'debugging', 'implementation'],
205
+ tester: ['unit-testing', 'integration-testing', 'coverage', 'test-generation'],
206
+ reviewer: ['code-review', 'security-audit', 'quality-check', 'best-practices'],
207
+ researcher: ['web-search', 'documentation', 'analysis', 'summarization'],
208
+ architect: ['system-design', 'architecture', 'patterns', 'scalability'],
209
+ 'backend-dev': ['api', 'database', 'server', 'authentication'],
210
+ 'frontend-dev': ['ui', 'react', 'css', 'components'],
211
+ devops: ['ci-cd', 'docker', 'deployment', 'infrastructure'],
212
+ };
213
+
214
+ const TASK_PATTERNS = {
215
+ // Code patterns
216
+ 'implement|create|build|add|write code': 'coder',
217
+ 'test|spec|coverage|unit test|integration': 'tester',
218
+ 'review|audit|check|validate|security': 'reviewer',
219
+ 'research|find|search|documentation|explore': 'researcher',
220
+ 'design|architect|structure|plan': 'architect',
221
+
222
+ // Domain patterns
223
+ 'api|endpoint|server|backend|database': 'backend-dev',
224
+ 'ui|frontend|component|react|css|style': 'frontend-dev',
225
+ 'deploy|docker|ci|cd|pipeline|infrastructure': 'devops',
226
+ };
227
+
228
+ function routeTask(task) {
229
+ const taskLower = task.toLowerCase();
230
+
231
+ // Check patterns
232
+ for (const [pattern, agent] of Object.entries(TASK_PATTERNS)) {
233
+ const regex = new RegExp(pattern, 'i');
234
+ if (regex.test(taskLower)) {
235
+ return {
236
+ agent,
237
+ confidence: 0.8,
238
+ reason: \`Matched pattern: \${pattern}\`,
239
+ };
240
+ }
241
+ }
242
+
243
+ // Default to coder for unknown tasks
244
+ return {
245
+ agent: 'coder',
246
+ confidence: 0.5,
247
+ reason: 'Default routing - no specific pattern matched',
248
+ };
249
+ }
250
+
251
+ // CLI
252
+ const task = process.argv.slice(2).join(' ');
253
+
254
+ if (task) {
255
+ const result = routeTask(task);
256
+ console.log(JSON.stringify(result, null, 2));
257
+ } else {
258
+ console.log('Usage: router.js <task description>');
259
+ console.log('\\nAvailable agents:', Object.keys(AGENT_CAPABILITIES).join(', '));
260
+ }
261
+
262
+ module.exports = { routeTask, AGENT_CAPABILITIES, TASK_PATTERNS };
263
263
  `;
264
264
  }
265
265
  /**
266
266
  * Generate memory helper script
267
267
  */
268
268
  export function generateMemoryHelper() {
269
- return `#!/usr/bin/env node
270
- /**
271
- * Claude Flow Memory Helper
272
- * Simple key-value memory for cross-session context
273
- */
274
-
275
- const fs = require('fs');
276
- const path = require('path');
277
-
278
- const MEMORY_DIR = path.join(process.cwd(), '.claude-flow', 'data');
279
- const MEMORY_FILE = path.join(MEMORY_DIR, 'memory.json');
280
-
281
- function loadMemory() {
282
- try {
283
- if (fs.existsSync(MEMORY_FILE)) {
284
- return JSON.parse(fs.readFileSync(MEMORY_FILE, 'utf-8'));
285
- }
286
- } catch (e) {
287
- // Ignore
288
- }
289
- return {};
290
- }
291
-
292
- function saveMemory(memory) {
293
- fs.mkdirSync(MEMORY_DIR, { recursive: true });
294
- fs.writeFileSync(MEMORY_FILE, JSON.stringify(memory, null, 2));
295
- }
296
-
297
- const commands = {
298
- get: (key) => {
299
- const memory = loadMemory();
300
- const value = key ? memory[key] : memory;
301
- console.log(JSON.stringify(value, null, 2));
302
- return value;
303
- },
304
-
305
- set: (key, value) => {
306
- if (!key) {
307
- console.error('Key required');
308
- return;
309
- }
310
- const memory = loadMemory();
311
- memory[key] = value;
312
- memory._updated = new Date().toISOString();
313
- saveMemory(memory);
314
- console.log(\`Set: \${key}\`);
315
- },
316
-
317
- delete: (key) => {
318
- if (!key) {
319
- console.error('Key required');
320
- return;
321
- }
322
- const memory = loadMemory();
323
- delete memory[key];
324
- saveMemory(memory);
325
- console.log(\`Deleted: \${key}\`);
326
- },
327
-
328
- clear: () => {
329
- saveMemory({});
330
- console.log('Memory cleared');
331
- },
332
-
333
- keys: () => {
334
- const memory = loadMemory();
335
- const keys = Object.keys(memory).filter(k => !k.startsWith('_'));
336
- console.log(keys.join('\\n'));
337
- return keys;
338
- },
339
- };
340
-
341
- // CLI
342
- const [,, command, key, ...valueParts] = process.argv;
343
- const value = valueParts.join(' ');
344
-
345
- if (command && commands[command]) {
346
- commands[command](key, value);
347
- } else {
348
- console.log('Usage: memory.js <get|set|delete|clear|keys> [key] [value]');
349
- }
350
-
351
- module.exports = commands;
269
+ return `#!/usr/bin/env node
270
+ /**
271
+ * Claude Flow Memory Helper
272
+ * Simple key-value memory for cross-session context
273
+ */
274
+
275
+ const fs = require('fs');
276
+ const path = require('path');
277
+
278
+ const MEMORY_DIR = path.join(process.cwd(), '.claude-flow', 'data');
279
+ const MEMORY_FILE = path.join(MEMORY_DIR, 'memory.json');
280
+
281
+ function loadMemory() {
282
+ try {
283
+ if (fs.existsSync(MEMORY_FILE)) {
284
+ return JSON.parse(fs.readFileSync(MEMORY_FILE, 'utf-8'));
285
+ }
286
+ } catch (e) {
287
+ // Ignore
288
+ }
289
+ return {};
290
+ }
291
+
292
+ function saveMemory(memory) {
293
+ fs.mkdirSync(MEMORY_DIR, { recursive: true });
294
+ fs.writeFileSync(MEMORY_FILE, JSON.stringify(memory, null, 2));
295
+ }
296
+
297
+ const commands = {
298
+ get: (key) => {
299
+ const memory = loadMemory();
300
+ const value = key ? memory[key] : memory;
301
+ console.log(JSON.stringify(value, null, 2));
302
+ return value;
303
+ },
304
+
305
+ set: (key, value) => {
306
+ if (!key) {
307
+ console.error('Key required');
308
+ return;
309
+ }
310
+ const memory = loadMemory();
311
+ memory[key] = value;
312
+ memory._updated = new Date().toISOString();
313
+ saveMemory(memory);
314
+ console.log(\`Set: \${key}\`);
315
+ },
316
+
317
+ delete: (key) => {
318
+ if (!key) {
319
+ console.error('Key required');
320
+ return;
321
+ }
322
+ const memory = loadMemory();
323
+ delete memory[key];
324
+ saveMemory(memory);
325
+ console.log(\`Deleted: \${key}\`);
326
+ },
327
+
328
+ clear: () => {
329
+ saveMemory({});
330
+ console.log('Memory cleared');
331
+ },
332
+
333
+ keys: () => {
334
+ const memory = loadMemory();
335
+ const keys = Object.keys(memory).filter(k => !k.startsWith('_'));
336
+ console.log(keys.join('\\n'));
337
+ return keys;
338
+ },
339
+ };
340
+
341
+ // CLI
342
+ const [,, command, key, ...valueParts] = process.argv;
343
+ const value = valueParts.join(' ');
344
+
345
+ if (command && commands[command]) {
346
+ commands[command](key, value);
347
+ } else {
348
+ console.log('Usage: memory.js <get|set|delete|clear|keys> [key] [value]');
349
+ }
350
+
351
+ module.exports = commands;
352
352
  `;
353
353
  }
354
354
  /**
@@ -798,346 +798,346 @@ export function generateIntelligenceStub() {
798
798
  * @claude-flow/memory is not installed. Gets overwritten when source copy succeeds.
799
799
  */
800
800
  export function generateAutoMemoryHook() {
801
- return `#!/usr/bin/env node
802
- /**
803
- * Auto Memory Bridge Hook (ADR-048/049) — Minimal Fallback
804
- * Full version is copied from package source when available.
805
- *
806
- * Usage:
807
- * node auto-memory-hook.mjs import # SessionStart
808
- * node auto-memory-hook.mjs sync # SessionEnd / Stop
809
- * node auto-memory-hook.mjs status # Show bridge status
810
- */
811
-
812
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
813
- import { join, dirname } from 'path';
814
- import { fileURLToPath } from 'url';
815
-
816
- const __filename = fileURLToPath(import.meta.url);
817
- const __dirname = dirname(__filename);
818
- const PROJECT_ROOT = join(__dirname, '../..');
819
- const DATA_DIR = join(PROJECT_ROOT, '.claude-flow', 'data');
820
- const STORE_PATH = join(DATA_DIR, 'auto-memory-store.json');
821
-
822
- const DIM = '\\x1b[2m';
823
- const RESET = '\\x1b[0m';
824
- const dim = (msg) => console.log(\` \${DIM}\${msg}\${RESET}\`);
825
-
826
- // Ensure data dir
827
- if (!existsSync(DATA_DIR)) mkdirSync(DATA_DIR, { recursive: true });
828
-
829
- async function loadMemoryPackage() {
830
- // Strategy 1: Use createRequire for CJS-style resolution (handles nested node_modules
831
- // when installed as a transitive dependency via npx ruflo / npx claude-flow)
832
- try {
833
- const { createRequire } = await import('module');
834
- const require = createRequire(join(PROJECT_ROOT, 'package.json'));
835
- return require('@claude-flow/memory');
836
- } catch { /* fall through */ }
837
-
838
- // Strategy 2: ESM import (works when @claude-flow/memory is a direct dependency)
839
- try { return await import('@claude-flow/memory'); } catch { /* fall through */ }
840
-
841
- // Strategy 3: Walk up from PROJECT_ROOT looking for the package in any node_modules
842
- let searchDir = PROJECT_ROOT;
843
- const { parse } = await import('path');
844
- while (searchDir !== parse(searchDir).root) {
845
- const candidate = join(searchDir, 'node_modules', '@claude-flow', 'memory', 'dist', 'index.js');
846
- if (existsSync(candidate)) {
847
- try { return await import(\`file://\${candidate}\`); } catch { /* fall through */ }
848
- }
849
- searchDir = dirname(searchDir);
850
- }
851
-
852
- return null;
853
- }
854
-
855
- async function doImport() {
856
- const memPkg = await loadMemoryPackage();
857
-
858
- if (!memPkg || !memPkg.AutoMemoryBridge) {
859
- dim('Memory package not available — auto memory import skipped (non-critical)');
860
- return;
861
- }
862
-
863
- // Full implementation deferred to copied version
864
- dim('Auto memory import available — run init --upgrade for full support');
865
- }
866
-
867
- async function doSync() {
868
- if (!existsSync(STORE_PATH)) {
869
- dim('No entries to sync');
870
- return;
871
- }
872
-
873
- const memPkg = await loadMemoryPackage();
874
-
875
- if (!memPkg || !memPkg.AutoMemoryBridge) {
876
- dim('Memory package not available — sync skipped (non-critical)');
877
- return;
878
- }
879
-
880
- dim('Auto memory sync available — run init --upgrade for full support');
881
- }
882
-
883
- function doStatus() {
884
- console.log('\\n=== Auto Memory Bridge Status ===\\n');
885
- console.log(' Package: Fallback mode (run init --upgrade for full)');
886
- console.log(\` Store: \${existsSync(STORE_PATH) ? 'Initialized' : 'Not initialized'}\`);
887
- console.log('');
888
- }
889
-
890
- const command = process.argv[2] || 'status';
891
-
892
- try {
893
- switch (command) {
894
- case 'import': await doImport(); break;
895
- case 'sync': await doSync(); break;
896
- case 'status': doStatus(); break;
897
- default:
898
- console.log('Usage: auto-memory-hook.mjs <import|sync|status>');
899
- process.exit(1);
900
- }
901
- } catch (err) {
902
- // Hooks must never crash Claude Code - fail silently
903
- dim(\`Error (non-critical): \${err.message}\`);
904
- }
801
+ return `#!/usr/bin/env node
802
+ /**
803
+ * Auto Memory Bridge Hook (ADR-048/049) — Minimal Fallback
804
+ * Full version is copied from package source when available.
805
+ *
806
+ * Usage:
807
+ * node auto-memory-hook.mjs import # SessionStart
808
+ * node auto-memory-hook.mjs sync # SessionEnd / Stop
809
+ * node auto-memory-hook.mjs status # Show bridge status
810
+ */
811
+
812
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
813
+ import { join, dirname } from 'path';
814
+ import { fileURLToPath } from 'url';
815
+
816
+ const __filename = fileURLToPath(import.meta.url);
817
+ const __dirname = dirname(__filename);
818
+ const PROJECT_ROOT = join(__dirname, '../..');
819
+ const DATA_DIR = join(PROJECT_ROOT, '.claude-flow', 'data');
820
+ const STORE_PATH = join(DATA_DIR, 'auto-memory-store.json');
821
+
822
+ const DIM = '\\x1b[2m';
823
+ const RESET = '\\x1b[0m';
824
+ const dim = (msg) => console.log(\` \${DIM}\${msg}\${RESET}\`);
825
+
826
+ // Ensure data dir
827
+ if (!existsSync(DATA_DIR)) mkdirSync(DATA_DIR, { recursive: true });
828
+
829
+ async function loadMemoryPackage() {
830
+ // Strategy 1: Use createRequire for CJS-style resolution (handles nested node_modules
831
+ // when installed as a transitive dependency via npx ruflo / npx claude-flow)
832
+ try {
833
+ const { createRequire } = await import('module');
834
+ const require = createRequire(join(PROJECT_ROOT, 'package.json'));
835
+ return require('@claude-flow/memory');
836
+ } catch { /* fall through */ }
837
+
838
+ // Strategy 2: ESM import (works when @claude-flow/memory is a direct dependency)
839
+ try { return await import('@claude-flow/memory'); } catch { /* fall through */ }
840
+
841
+ // Strategy 3: Walk up from PROJECT_ROOT looking for the package in any node_modules
842
+ let searchDir = PROJECT_ROOT;
843
+ const { parse } = await import('path');
844
+ while (searchDir !== parse(searchDir).root) {
845
+ const candidate = join(searchDir, 'node_modules', '@claude-flow', 'memory', 'dist', 'index.js');
846
+ if (existsSync(candidate)) {
847
+ try { return await import(\`file://\${candidate}\`); } catch { /* fall through */ }
848
+ }
849
+ searchDir = dirname(searchDir);
850
+ }
851
+
852
+ return null;
853
+ }
854
+
855
+ async function doImport() {
856
+ const memPkg = await loadMemoryPackage();
857
+
858
+ if (!memPkg || !memPkg.AutoMemoryBridge) {
859
+ dim('Memory package not available — auto memory import skipped (non-critical)');
860
+ return;
861
+ }
862
+
863
+ // Full implementation deferred to copied version
864
+ dim('Auto memory import available — run init --upgrade for full support');
865
+ }
866
+
867
+ async function doSync() {
868
+ if (!existsSync(STORE_PATH)) {
869
+ dim('No entries to sync');
870
+ return;
871
+ }
872
+
873
+ const memPkg = await loadMemoryPackage();
874
+
875
+ if (!memPkg || !memPkg.AutoMemoryBridge) {
876
+ dim('Memory package not available — sync skipped (non-critical)');
877
+ return;
878
+ }
879
+
880
+ dim('Auto memory sync available — run init --upgrade for full support');
881
+ }
882
+
883
+ function doStatus() {
884
+ console.log('\\n=== Auto Memory Bridge Status ===\\n');
885
+ console.log(' Package: Fallback mode (run init --upgrade for full)');
886
+ console.log(\` Store: \${existsSync(STORE_PATH) ? 'Initialized' : 'Not initialized'}\`);
887
+ console.log('');
888
+ }
889
+
890
+ const command = process.argv[2] || 'status';
891
+
892
+ try {
893
+ switch (command) {
894
+ case 'import': await doImport(); break;
895
+ case 'sync': await doSync(); break;
896
+ case 'status': doStatus(); break;
897
+ default:
898
+ console.log('Usage: auto-memory-hook.mjs <import|sync|status>');
899
+ process.exit(1);
900
+ }
901
+ } catch (err) {
902
+ // Hooks must never crash Claude Code - fail silently
903
+ dim(\`Error (non-critical): \${err.message}\`);
904
+ }
905
905
  `;
906
906
  }
907
907
  /**
908
908
  * Generate Windows PowerShell daemon manager
909
909
  */
910
910
  export function generateWindowsDaemonManager() {
911
- return `# RuFlo V3 Daemon Manager for Windows
912
- # PowerShell script for managing background processes
913
-
914
- param(
915
- [Parameter(Position=0)]
916
- [ValidateSet('start', 'stop', 'status', 'restart')]
917
- [string]$Action = 'status'
918
- )
919
-
920
- $ErrorActionPreference = 'SilentlyContinue'
921
- $ClaudeFlowDir = Join-Path $PWD '.claude-flow'
922
- $PidDir = Join-Path $ClaudeFlowDir 'pids'
923
-
924
- # Ensure directories exist
925
- if (-not (Test-Path $PidDir)) {
926
- New-Item -ItemType Directory -Path $PidDir -Force | Out-Null
927
- }
928
-
929
- function Get-DaemonStatus {
930
- param([string]$Name, [string]$PidFile)
931
-
932
- if (Test-Path $PidFile) {
933
- $pid = Get-Content $PidFile
934
- $process = Get-Process -Id $pid -ErrorAction SilentlyContinue
935
- if ($process) {
936
- return @{ Running = $true; Pid = $pid }
937
- }
938
- }
939
- return @{ Running = $false; Pid = $null }
940
- }
941
-
942
- function Start-SwarmMonitor {
943
- $pidFile = Join-Path $PidDir 'swarm-monitor.pid'
944
- $status = Get-DaemonStatus -Name 'swarm-monitor' -PidFile $pidFile
945
-
946
- if ($status.Running) {
947
- Write-Host "Swarm monitor already running (PID: $($status.Pid))" -ForegroundColor Yellow
948
- return
949
- }
950
-
951
- Write-Host "Starting swarm monitor..." -ForegroundColor Cyan
952
- $process = Start-Process -FilePath 'node' -ArgumentList @(
953
- '-e',
954
- 'setInterval(() => { require("fs").writeFileSync(".claude-flow/metrics/swarm-activity.json", JSON.stringify({swarm:{active:true,agent_count:0},timestamp:Date.now()})) }, 5000)'
955
- ) -PassThru -WindowStyle Hidden
956
-
957
- $process.Id | Out-File $pidFile
958
- Write-Host "Swarm monitor started (PID: $($process.Id))" -ForegroundColor Green
959
- }
960
-
961
- function Stop-SwarmMonitor {
962
- $pidFile = Join-Path $PidDir 'swarm-monitor.pid'
963
- $status = Get-DaemonStatus -Name 'swarm-monitor' -PidFile $pidFile
964
-
965
- if (-not $status.Running) {
966
- Write-Host "Swarm monitor not running" -ForegroundColor Yellow
967
- return
968
- }
969
-
970
- Stop-Process -Id $status.Pid -Force
971
- Remove-Item $pidFile -Force
972
- Write-Host "Swarm monitor stopped" -ForegroundColor Green
973
- }
974
-
975
- function Show-Status {
976
- Write-Host ""
977
- Write-Host "RuFlo V3 Daemon Status" -ForegroundColor Cyan
978
- Write-Host "=============================" -ForegroundColor Cyan
979
-
980
- $swarmPid = Join-Path $PidDir 'swarm-monitor.pid'
981
- $swarmStatus = Get-DaemonStatus -Name 'swarm-monitor' -PidFile $swarmPid
982
-
983
- if ($swarmStatus.Running) {
984
- Write-Host " Swarm Monitor: RUNNING (PID: $($swarmStatus.Pid))" -ForegroundColor Green
985
- } else {
986
- Write-Host " Swarm Monitor: STOPPED" -ForegroundColor Red
987
- }
988
- Write-Host ""
989
- }
990
-
991
- switch ($Action) {
992
- 'start' {
993
- Start-SwarmMonitor
994
- Show-Status
995
- }
996
- 'stop' {
997
- Stop-SwarmMonitor
998
- Show-Status
999
- }
1000
- 'restart' {
1001
- Stop-SwarmMonitor
1002
- Start-Sleep -Seconds 1
1003
- Start-SwarmMonitor
1004
- Show-Status
1005
- }
1006
- 'status' {
1007
- Show-Status
1008
- }
1009
- }
911
+ return `# RuFlo V3 Daemon Manager for Windows
912
+ # PowerShell script for managing background processes
913
+
914
+ param(
915
+ [Parameter(Position=0)]
916
+ [ValidateSet('start', 'stop', 'status', 'restart')]
917
+ [string]$Action = 'status'
918
+ )
919
+
920
+ $ErrorActionPreference = 'SilentlyContinue'
921
+ $ClaudeFlowDir = Join-Path $PWD '.claude-flow'
922
+ $PidDir = Join-Path $ClaudeFlowDir 'pids'
923
+
924
+ # Ensure directories exist
925
+ if (-not (Test-Path $PidDir)) {
926
+ New-Item -ItemType Directory -Path $PidDir -Force | Out-Null
927
+ }
928
+
929
+ function Get-DaemonStatus {
930
+ param([string]$Name, [string]$PidFile)
931
+
932
+ if (Test-Path $PidFile) {
933
+ $pid = Get-Content $PidFile
934
+ $process = Get-Process -Id $pid -ErrorAction SilentlyContinue
935
+ if ($process) {
936
+ return @{ Running = $true; Pid = $pid }
937
+ }
938
+ }
939
+ return @{ Running = $false; Pid = $null }
940
+ }
941
+
942
+ function Start-SwarmMonitor {
943
+ $pidFile = Join-Path $PidDir 'swarm-monitor.pid'
944
+ $status = Get-DaemonStatus -Name 'swarm-monitor' -PidFile $pidFile
945
+
946
+ if ($status.Running) {
947
+ Write-Host "Swarm monitor already running (PID: $($status.Pid))" -ForegroundColor Yellow
948
+ return
949
+ }
950
+
951
+ Write-Host "Starting swarm monitor..." -ForegroundColor Cyan
952
+ $process = Start-Process -FilePath 'node' -ArgumentList @(
953
+ '-e',
954
+ 'setInterval(() => { require("fs").writeFileSync(".claude-flow/metrics/swarm-activity.json", JSON.stringify({swarm:{active:true,agent_count:0},timestamp:Date.now()})) }, 5000)'
955
+ ) -PassThru -WindowStyle Hidden
956
+
957
+ $process.Id | Out-File $pidFile
958
+ Write-Host "Swarm monitor started (PID: $($process.Id))" -ForegroundColor Green
959
+ }
960
+
961
+ function Stop-SwarmMonitor {
962
+ $pidFile = Join-Path $PidDir 'swarm-monitor.pid'
963
+ $status = Get-DaemonStatus -Name 'swarm-monitor' -PidFile $pidFile
964
+
965
+ if (-not $status.Running) {
966
+ Write-Host "Swarm monitor not running" -ForegroundColor Yellow
967
+ return
968
+ }
969
+
970
+ Stop-Process -Id $status.Pid -Force
971
+ Remove-Item $pidFile -Force
972
+ Write-Host "Swarm monitor stopped" -ForegroundColor Green
973
+ }
974
+
975
+ function Show-Status {
976
+ Write-Host ""
977
+ Write-Host "RuFlo V3 Daemon Status" -ForegroundColor Cyan
978
+ Write-Host "=============================" -ForegroundColor Cyan
979
+
980
+ $swarmPid = Join-Path $PidDir 'swarm-monitor.pid'
981
+ $swarmStatus = Get-DaemonStatus -Name 'swarm-monitor' -PidFile $swarmPid
982
+
983
+ if ($swarmStatus.Running) {
984
+ Write-Host " Swarm Monitor: RUNNING (PID: $($swarmStatus.Pid))" -ForegroundColor Green
985
+ } else {
986
+ Write-Host " Swarm Monitor: STOPPED" -ForegroundColor Red
987
+ }
988
+ Write-Host ""
989
+ }
990
+
991
+ switch ($Action) {
992
+ 'start' {
993
+ Start-SwarmMonitor
994
+ Show-Status
995
+ }
996
+ 'stop' {
997
+ Stop-SwarmMonitor
998
+ Show-Status
999
+ }
1000
+ 'restart' {
1001
+ Stop-SwarmMonitor
1002
+ Start-Sleep -Seconds 1
1003
+ Start-SwarmMonitor
1004
+ Show-Status
1005
+ }
1006
+ 'status' {
1007
+ Show-Status
1008
+ }
1009
+ }
1010
1010
  `;
1011
1011
  }
1012
1012
  /**
1013
1013
  * Generate Windows batch file wrapper
1014
1014
  */
1015
1015
  export function generateWindowsBatchWrapper() {
1016
- return `@echo off
1017
- REM RuFlo V3 - Windows Batch Wrapper
1018
- REM Routes to PowerShell daemon manager
1019
-
1020
- PowerShell -ExecutionPolicy Bypass -File "%~dp0daemon-manager.ps1" %*
1016
+ return `@echo off
1017
+ REM RuFlo V3 - Windows Batch Wrapper
1018
+ REM Routes to PowerShell daemon manager
1019
+
1020
+ PowerShell -ExecutionPolicy Bypass -File "%~dp0daemon-manager.ps1" %*
1021
1021
  `;
1022
1022
  }
1023
1023
  /**
1024
1024
  * Generate cross-platform session manager
1025
1025
  */
1026
1026
  export function generateCrossPlatformSessionManager() {
1027
- return `#!/usr/bin/env node
1028
- /**
1029
- * Claude Flow Cross-Platform Session Manager
1030
- * Works on Windows, macOS, and Linux
1031
- */
1032
-
1033
- const fs = require('fs');
1034
- const path = require('path');
1035
- const os = require('os');
1036
-
1037
- // Platform-specific paths
1038
- const platform = os.platform();
1039
- const homeDir = os.homedir();
1040
-
1041
- // Get data directory based on platform
1042
- function getDataDir() {
1043
- const localDir = path.join(process.cwd(), '.claude-flow', 'sessions');
1044
- if (fs.existsSync(path.dirname(localDir))) {
1045
- return localDir;
1046
- }
1047
-
1048
- switch (platform) {
1049
- case 'win32':
1050
- return path.join(process.env.APPDATA || homeDir, 'claude-flow', 'sessions');
1051
- case 'darwin':
1052
- return path.join(homeDir, 'Library', 'Application Support', 'claude-flow', 'sessions');
1053
- default:
1054
- return path.join(homeDir, '.claude-flow', 'sessions');
1055
- }
1056
- }
1057
-
1058
- const SESSION_DIR = getDataDir();
1059
- const SESSION_FILE = path.join(SESSION_DIR, 'current.json');
1060
-
1061
- // Ensure directory exists
1062
- function ensureDir(dir) {
1063
- if (!fs.existsSync(dir)) {
1064
- fs.mkdirSync(dir, { recursive: true });
1065
- }
1066
- }
1067
-
1068
- const commands = {
1069
- start: () => {
1070
- ensureDir(SESSION_DIR);
1071
- const sessionId = \`session-\${Date.now()}\`;
1072
- const session = {
1073
- id: sessionId,
1074
- startedAt: new Date().toISOString(),
1075
- platform: platform,
1076
- cwd: process.cwd(),
1077
- context: {},
1078
- metrics: { edits: 0, commands: 0, tasks: 0, errors: 0 }
1079
- };
1080
- fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));
1081
- console.log(\`Session started: \${sessionId}\`);
1082
- return session;
1083
- },
1084
-
1085
- restore: () => {
1086
- if (!fs.existsSync(SESSION_FILE)) {
1087
- console.log('No session to restore');
1088
- return null;
1089
- }
1090
- const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
1091
- session.restoredAt = new Date().toISOString();
1092
- fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));
1093
- console.log(\`Session restored: \${session.id}\`);
1094
- return session;
1095
- },
1096
-
1097
- end: () => {
1098
- if (!fs.existsSync(SESSION_FILE)) {
1099
- console.log('No active session');
1100
- return null;
1101
- }
1102
- const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
1103
- session.endedAt = new Date().toISOString();
1104
- session.duration = Date.now() - new Date(session.startedAt).getTime();
1105
-
1106
- const archivePath = path.join(SESSION_DIR, \`\${session.id}.json\`);
1107
- fs.writeFileSync(archivePath, JSON.stringify(session, null, 2));
1108
- fs.unlinkSync(SESSION_FILE);
1109
-
1110
- console.log(\`Session ended: \${session.id}\`);
1111
- console.log(\`Duration: \${Math.round(session.duration / 1000 / 60)} minutes\`);
1112
- return session;
1113
- },
1114
-
1115
- status: () => {
1116
- if (!fs.existsSync(SESSION_FILE)) {
1117
- console.log('No active session');
1118
- return null;
1119
- }
1120
- const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
1121
- const duration = Date.now() - new Date(session.startedAt).getTime();
1122
- console.log(\`Session: \${session.id}\`);
1123
- console.log(\`Platform: \${session.platform}\`);
1124
- console.log(\`Started: \${session.startedAt}\`);
1125
- console.log(\`Duration: \${Math.round(duration / 1000 / 60)} minutes\`);
1126
- return session;
1127
- }
1128
- };
1129
-
1130
- // CLI
1131
- const [,, command, ...args] = process.argv;
1132
- if (command && commands[command]) {
1133
- commands[command](...args);
1134
- } else {
1135
- console.log('Usage: session.js <start|restore|end|status>');
1136
- console.log(\`Platform: \${platform}\`);
1137
- console.log(\`Data dir: \${SESSION_DIR}\`);
1138
- }
1139
-
1140
- module.exports = commands;
1027
+ return `#!/usr/bin/env node
1028
+ /**
1029
+ * Claude Flow Cross-Platform Session Manager
1030
+ * Works on Windows, macOS, and Linux
1031
+ */
1032
+
1033
+ const fs = require('fs');
1034
+ const path = require('path');
1035
+ const os = require('os');
1036
+
1037
+ // Platform-specific paths
1038
+ const platform = os.platform();
1039
+ const homeDir = os.homedir();
1040
+
1041
+ // Get data directory based on platform
1042
+ function getDataDir() {
1043
+ const localDir = path.join(process.cwd(), '.claude-flow', 'sessions');
1044
+ if (fs.existsSync(path.dirname(localDir))) {
1045
+ return localDir;
1046
+ }
1047
+
1048
+ switch (platform) {
1049
+ case 'win32':
1050
+ return path.join(process.env.APPDATA || homeDir, 'claude-flow', 'sessions');
1051
+ case 'darwin':
1052
+ return path.join(homeDir, 'Library', 'Application Support', 'claude-flow', 'sessions');
1053
+ default:
1054
+ return path.join(homeDir, '.claude-flow', 'sessions');
1055
+ }
1056
+ }
1057
+
1058
+ const SESSION_DIR = getDataDir();
1059
+ const SESSION_FILE = path.join(SESSION_DIR, 'current.json');
1060
+
1061
+ // Ensure directory exists
1062
+ function ensureDir(dir) {
1063
+ if (!fs.existsSync(dir)) {
1064
+ fs.mkdirSync(dir, { recursive: true });
1065
+ }
1066
+ }
1067
+
1068
+ const commands = {
1069
+ start: () => {
1070
+ ensureDir(SESSION_DIR);
1071
+ const sessionId = \`session-\${Date.now()}\`;
1072
+ const session = {
1073
+ id: sessionId,
1074
+ startedAt: new Date().toISOString(),
1075
+ platform: platform,
1076
+ cwd: process.cwd(),
1077
+ context: {},
1078
+ metrics: { edits: 0, commands: 0, tasks: 0, errors: 0 }
1079
+ };
1080
+ fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));
1081
+ console.log(\`Session started: \${sessionId}\`);
1082
+ return session;
1083
+ },
1084
+
1085
+ restore: () => {
1086
+ if (!fs.existsSync(SESSION_FILE)) {
1087
+ console.log('No session to restore');
1088
+ return null;
1089
+ }
1090
+ const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
1091
+ session.restoredAt = new Date().toISOString();
1092
+ fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));
1093
+ console.log(\`Session restored: \${session.id}\`);
1094
+ return session;
1095
+ },
1096
+
1097
+ end: () => {
1098
+ if (!fs.existsSync(SESSION_FILE)) {
1099
+ console.log('No active session');
1100
+ return null;
1101
+ }
1102
+ const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
1103
+ session.endedAt = new Date().toISOString();
1104
+ session.duration = Date.now() - new Date(session.startedAt).getTime();
1105
+
1106
+ const archivePath = path.join(SESSION_DIR, \`\${session.id}.json\`);
1107
+ fs.writeFileSync(archivePath, JSON.stringify(session, null, 2));
1108
+ fs.unlinkSync(SESSION_FILE);
1109
+
1110
+ console.log(\`Session ended: \${session.id}\`);
1111
+ console.log(\`Duration: \${Math.round(session.duration / 1000 / 60)} minutes\`);
1112
+ return session;
1113
+ },
1114
+
1115
+ status: () => {
1116
+ if (!fs.existsSync(SESSION_FILE)) {
1117
+ console.log('No active session');
1118
+ return null;
1119
+ }
1120
+ const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
1121
+ const duration = Date.now() - new Date(session.startedAt).getTime();
1122
+ console.log(\`Session: \${session.id}\`);
1123
+ console.log(\`Platform: \${session.platform}\`);
1124
+ console.log(\`Started: \${session.startedAt}\`);
1125
+ console.log(\`Duration: \${Math.round(duration / 1000 / 60)} minutes\`);
1126
+ return session;
1127
+ }
1128
+ };
1129
+
1130
+ // CLI
1131
+ const [,, command, ...args] = process.argv;
1132
+ if (command && commands[command]) {
1133
+ commands[command](...args);
1134
+ } else {
1135
+ console.log('Usage: session.js <start|restore|end|status>');
1136
+ console.log(\`Platform: \${platform}\`);
1137
+ console.log(\`Data dir: \${SESSION_DIR}\`);
1138
+ }
1139
+
1140
+ module.exports = commands;
1141
1141
  `;
1142
1142
  }
1143
1143
  /**