claude-flow-novice 2.0.3 โ†’ 2.0.4

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 (272) hide show
  1. package/dist/src/cli/commands/guidance.js +487 -668
  2. package/dist/src/cli/commands/index-validate.js +18 -29
  3. package/dist/src/cli/commands/mcp-troubleshoot.js +230 -282
  4. package/dist/src/cli/commands/neural-goal-init.js +92 -125
  5. package/dist/src/cli/commands/swarm-exec.js +317 -393
  6. package/dist/src/cli/commands/swarm.js +1 -1
  7. package/dist/src/cli/commands/validate-framework.js +983 -1100
  8. package/dist/src/cli/commands/validate.js +144 -223
  9. package/dist/src/cli/simple-commands/__tests__/agent.test.js +265 -277
  10. package/dist/src/cli/simple-commands/__tests__/memory.test.js +6 -7
  11. package/dist/src/cli/simple-commands/__tests__/swarm.test.js +373 -356
  12. package/dist/src/cli/simple-commands/__tests__/task.test.js +6 -7
  13. package/dist/src/cli/simple-commands/agent.js +157 -193
  14. package/dist/src/cli/simple-commands/analysis.js +336 -446
  15. package/dist/src/cli/simple-commands/automation-executor.js +1095 -1339
  16. package/dist/src/cli/simple-commands/automation.js +481 -469
  17. package/dist/src/cli/simple-commands/batch-manager.js +261 -313
  18. package/dist/src/cli/simple-commands/claude-telemetry.js +241 -267
  19. package/dist/src/cli/simple-commands/claude-track.js +68 -90
  20. package/dist/src/cli/simple-commands/concurrent-display.js +266 -320
  21. package/dist/src/cli/simple-commands/config.js +245 -290
  22. package/dist/src/cli/simple-commands/coordination.js +182 -234
  23. package/dist/src/cli/simple-commands/enhanced-ui-views.js +812 -615
  24. package/dist/src/cli/simple-commands/enhanced-webui-complete.js +922 -981
  25. package/dist/src/cli/simple-commands/fix-hook-variables.js +274 -294
  26. package/dist/src/cli/simple-commands/github/gh-coordinator.js +378 -457
  27. package/dist/src/cli/simple-commands/github/github-api.js +535 -574
  28. package/dist/src/cli/simple-commands/github/init.js +276 -303
  29. package/dist/src/cli/simple-commands/github.js +222 -247
  30. package/dist/src/cli/simple-commands/goal.js +51 -63
  31. package/dist/src/cli/simple-commands/hive-mind/auto-save-middleware.js +208 -278
  32. package/dist/src/cli/simple-commands/hive-mind/communication.js +601 -696
  33. package/dist/src/cli/simple-commands/hive-mind/core.js +907 -979
  34. package/dist/src/cli/simple-commands/hive-mind/db-optimizer.js +406 -655
  35. package/dist/src/cli/simple-commands/hive-mind/mcp-wrapper.js +1125 -1245
  36. package/dist/src/cli/simple-commands/hive-mind/memory.js +854 -1090
  37. package/dist/src/cli/simple-commands/hive-mind/performance-optimizer.js +459 -574
  38. package/dist/src/cli/simple-commands/hive-mind/performance-test.js +263 -347
  39. package/dist/src/cli/simple-commands/hive-mind/queen.js +727 -768
  40. package/dist/src/cli/simple-commands/hive-mind/session-manager.js +745 -1049
  41. package/dist/src/cli/simple-commands/hive-mind-optimize.js +227 -283
  42. package/dist/src/cli/simple-commands/hive-mind-wizard.js +174 -217
  43. package/dist/src/cli/simple-commands/hive-mind.js +1842 -2283
  44. package/dist/src/cli/simple-commands/hive.js +90 -79
  45. package/dist/src/cli/simple-commands/hook-safety.js +431 -521
  46. package/dist/src/cli/simple-commands/hooks/session-start-soul.js +203 -254
  47. package/dist/src/cli/simple-commands/hooks.js +1064 -1204
  48. package/dist/src/cli/simple-commands/init/agent-copier.js +294 -319
  49. package/dist/src/cli/simple-commands/init/batch-init.js +496 -562
  50. package/dist/src/cli/simple-commands/init/claude-commands/claude-flow-commands.js +13 -19
  51. package/dist/src/cli/simple-commands/init/claude-commands/optimized-claude-flow-commands.js +13 -19
  52. package/dist/src/cli/simple-commands/init/claude-commands/optimized-slash-commands.js +61 -88
  53. package/dist/src/cli/simple-commands/init/claude-commands/optimized-sparc-commands.js +125 -150
  54. package/dist/src/cli/simple-commands/init/claude-commands/slash-commands.js +42 -49
  55. package/dist/src/cli/simple-commands/init/claude-commands/sparc-commands.js +43 -61
  56. package/dist/src/cli/simple-commands/init/copy-revised-templates.js +141 -147
  57. package/dist/src/cli/simple-commands/init/executable-wrapper.js +31 -44
  58. package/dist/src/cli/simple-commands/init/gitignore-updater.js +64 -90
  59. package/dist/src/cli/simple-commands/init/help.js +104 -107
  60. package/dist/src/cli/simple-commands/init/hive-mind-init.js +509 -528
  61. package/dist/src/cli/simple-commands/init/index.js +1510 -1759
  62. package/dist/src/cli/simple-commands/init/performance-monitor.js +234 -317
  63. package/dist/src/cli/simple-commands/init/rollback/backup-manager.js +441 -504
  64. package/dist/src/cli/simple-commands/init/rollback/index.js +289 -364
  65. package/dist/src/cli/simple-commands/init/rollback/recovery-manager.js +652 -728
  66. package/dist/src/cli/simple-commands/init/rollback/rollback-executor.js +416 -481
  67. package/dist/src/cli/simple-commands/init/rollback/state-tracker.js +369 -448
  68. package/dist/src/cli/simple-commands/init/sparc/roo-readme.js +1 -2
  69. package/dist/src/cli/simple-commands/init/sparc/roomodes-config.js +122 -99
  70. package/dist/src/cli/simple-commands/init/sparc/workflows.js +32 -37
  71. package/dist/src/cli/simple-commands/init/sparc-structure.js +55 -62
  72. package/dist/src/cli/simple-commands/init/template-copier.js +421 -533
  73. package/dist/src/cli/simple-commands/init/templates/coordination-md.js +3 -6
  74. package/dist/src/cli/simple-commands/init/templates/enhanced-templates.js +344 -318
  75. package/dist/src/cli/simple-commands/init/templates/github-safe-enhanced.js +173 -218
  76. package/dist/src/cli/simple-commands/init/templates/github-safe.js +65 -75
  77. package/dist/src/cli/simple-commands/init/templates/memory-bank-md.js +3 -6
  78. package/dist/src/cli/simple-commands/init/templates/readme-files.js +2 -4
  79. package/dist/src/cli/simple-commands/init/templates/safe-hook-patterns.js +187 -230
  80. package/dist/src/cli/simple-commands/init/templates/sparc-modes.js +53 -80
  81. package/dist/src/cli/simple-commands/init/templates/verification-claude-md.js +101 -85
  82. package/dist/src/cli/simple-commands/init/validation/config-validator.js +283 -330
  83. package/dist/src/cli/simple-commands/init/validation/health-checker.js +495 -561
  84. package/dist/src/cli/simple-commands/init/validation/index.js +302 -358
  85. package/dist/src/cli/simple-commands/init/validation/mode-validator.js +308 -359
  86. package/dist/src/cli/simple-commands/init/validation/post-init-validator.js +389 -366
  87. package/dist/src/cli/simple-commands/init/validation/pre-init-validator.js +270 -268
  88. package/dist/src/cli/simple-commands/init/validation/test-runner.js +427 -447
  89. package/dist/src/cli/simple-commands/init.js +1 -2
  90. package/dist/src/cli/simple-commands/mcp-health.js +131 -158
  91. package/dist/src/cli/simple-commands/mcp-integration-layer.js +533 -634
  92. package/dist/src/cli/simple-commands/mcp.js +345 -400
  93. package/dist/src/cli/simple-commands/memory-consolidation.js +426 -537
  94. package/dist/src/cli/simple-commands/memory.js +247 -311
  95. package/dist/src/cli/simple-commands/migrate-hooks.js +39 -46
  96. package/dist/src/cli/simple-commands/monitor.js +294 -363
  97. package/dist/src/cli/simple-commands/neural.js +51 -65
  98. package/dist/src/cli/simple-commands/pair-autofix-only.js +538 -662
  99. package/dist/src/cli/simple-commands/pair-basic.js +528 -656
  100. package/dist/src/cli/simple-commands/pair-old.js +430 -543
  101. package/dist/src/cli/simple-commands/pair-working.js +615 -751
  102. package/dist/src/cli/simple-commands/pair.js +615 -751
  103. package/dist/src/cli/simple-commands/performance-hooks.js +83 -111
  104. package/dist/src/cli/simple-commands/performance-metrics.js +348 -433
  105. package/dist/src/cli/simple-commands/process-ui-enhanced.js +708 -787
  106. package/dist/src/cli/simple-commands/process-ui.js +230 -254
  107. package/dist/src/cli/simple-commands/realtime-update-system.js +525 -611
  108. package/dist/src/cli/simple-commands/sparc/architecture.js +1704 -1530
  109. package/dist/src/cli/simple-commands/sparc/commands.js +438 -516
  110. package/dist/src/cli/simple-commands/sparc/completion.js +1224 -1481
  111. package/dist/src/cli/simple-commands/sparc/coordinator.js +913 -978
  112. package/dist/src/cli/simple-commands/sparc/index.js +241 -298
  113. package/dist/src/cli/simple-commands/sparc/phase-base.js +314 -390
  114. package/dist/src/cli/simple-commands/sparc/pseudocode.js +965 -869
  115. package/dist/src/cli/simple-commands/sparc/refinement.js +980 -1273
  116. package/dist/src/cli/simple-commands/sparc/specification.js +559 -645
  117. package/dist/src/cli/simple-commands/sparc-modes/architect.js +1 -1
  118. package/dist/src/cli/simple-commands/sparc-modes/ask.js +1 -1
  119. package/dist/src/cli/simple-commands/sparc-modes/code.js +1 -1
  120. package/dist/src/cli/simple-commands/sparc-modes/debug.js +1 -1
  121. package/dist/src/cli/simple-commands/sparc-modes/devops.js +1 -1
  122. package/dist/src/cli/simple-commands/sparc-modes/docs-writer.js +1 -1
  123. package/dist/src/cli/simple-commands/sparc-modes/generic.js +1 -1
  124. package/dist/src/cli/simple-commands/sparc-modes/index.js +47 -55
  125. package/dist/src/cli/simple-commands/sparc-modes/integration.js +1 -1
  126. package/dist/src/cli/simple-commands/sparc-modes/mcp.js +1 -1
  127. package/dist/src/cli/simple-commands/sparc-modes/monitoring.js +1 -1
  128. package/dist/src/cli/simple-commands/sparc-modes/optimization.js +1 -1
  129. package/dist/src/cli/simple-commands/sparc-modes/security-review.js +1 -1
  130. package/dist/src/cli/simple-commands/sparc-modes/sparc-orchestrator.js +1 -1
  131. package/dist/src/cli/simple-commands/sparc-modes/spec-pseudocode.js +1 -1
  132. package/dist/src/cli/simple-commands/sparc-modes/supabase-admin.js +1 -1
  133. package/dist/src/cli/simple-commands/sparc-modes/swarm.js +101 -87
  134. package/dist/src/cli/simple-commands/sparc-modes/tdd.js +1 -1
  135. package/dist/src/cli/simple-commands/sparc-modes/tutorial.js +1 -1
  136. package/dist/src/cli/simple-commands/sparc.js +465 -493
  137. package/dist/src/cli/simple-commands/start-ui.js +108 -132
  138. package/dist/src/cli/simple-commands/start-wrapper.js +240 -268
  139. package/dist/src/cli/simple-commands/start.js +1 -1
  140. package/dist/src/cli/simple-commands/status.js +254 -275
  141. package/dist/src/cli/simple-commands/stream-chain-clean.js +128 -171
  142. package/dist/src/cli/simple-commands/stream-chain-fixed.js +61 -82
  143. package/dist/src/cli/simple-commands/stream-chain-real.js +267 -331
  144. package/dist/src/cli/simple-commands/stream-chain-working.js +211 -263
  145. package/dist/src/cli/simple-commands/stream-chain.js +260 -318
  146. package/dist/src/cli/simple-commands/stream-processor.js +290 -315
  147. package/dist/src/cli/simple-commands/swarm-executor.js +189 -222
  148. package/dist/src/cli/simple-commands/swarm-metrics-integration.js +208 -300
  149. package/dist/src/cli/simple-commands/swarm-ui.js +623 -703
  150. package/dist/src/cli/simple-commands/swarm-webui-integration.js +258 -286
  151. package/dist/src/cli/simple-commands/swarm.js +887 -1082
  152. package/dist/src/cli/simple-commands/task.js +161 -206
  153. package/dist/src/cli/simple-commands/timestamp-fix.js +59 -89
  154. package/dist/src/cli/simple-commands/token-tracker.js +258 -316
  155. package/dist/src/cli/simple-commands/tool-execution-framework.js +433 -519
  156. package/dist/src/cli/simple-commands/train-and-stream.js +275 -331
  157. package/dist/src/cli/simple-commands/training-pipeline.js +619 -725
  158. package/dist/src/cli/simple-commands/training.js +170 -227
  159. package/dist/src/cli/simple-commands/verification-hooks.js +261 -284
  160. package/dist/src/cli/simple-commands/verification-integration.js +389 -417
  161. package/dist/src/cli/simple-commands/verification-training-integration.js +486 -606
  162. package/dist/src/cli/simple-commands/verification.js +493 -513
  163. package/dist/src/cli/simple-commands/web-server.js +766 -836
  164. package/dist/src/cli/simple-commands/webui-validator.js +106 -124
  165. package/dist/src/coordination/event-bus/demo-wasm-integration.js +212 -251
  166. package/dist/src/coordination/event-bus/qe-event-bus.js +608 -748
  167. package/dist/src/coordination/event-bus/qe-event-bus.test.js +379 -454
  168. package/dist/src/coordination/iteration-tracker.js +363 -454
  169. package/dist/src/enterprise/analytics-manager.js +1135 -0
  170. package/dist/src/enterprise/audit-manager.js +1115 -0
  171. package/dist/src/enterprise/cloud-manager.js +891 -0
  172. package/dist/src/enterprise/deployment-manager.js +966 -0
  173. package/dist/src/enterprise/index.js +6 -0
  174. package/dist/src/enterprise/project-manager.js +584 -0
  175. package/dist/src/enterprise/security-manager.js +991 -0
  176. package/dist/src/index.js +1 -1
  177. package/dist/src/mcp/DEPRECATED.js +46 -60
  178. package/dist/src/mcp/fixes/mcp-error-fixes.js +115 -134
  179. package/dist/src/mcp/implementations/agent-tracker.js +114 -128
  180. package/dist/src/mcp/implementations/daa-tools.js +292 -350
  181. package/dist/src/mcp/implementations/workflow-tools.js +329 -361
  182. package/dist/src/mcp/mcp-config-manager.js +1183 -1331
  183. package/dist/src/mcp/mcp-server-novice-simplified.js +11 -17
  184. package/dist/src/mcp/mcp-server-novice.js +11 -17
  185. package/dist/src/mcp/mcp-server-sdk.js +11 -17
  186. package/dist/src/mcp/mcp-server.js +1620 -1484
  187. package/dist/src/mcp/ruv-swarm-wrapper.js +209 -239
  188. package/dist/src/memory/advanced-serializer.js +609 -589
  189. package/dist/src/memory/enhanced-examples.js +220 -305
  190. package/dist/src/memory/enhanced-memory.js +295 -336
  191. package/dist/src/memory/enhanced-session-serializer.js +408 -492
  192. package/dist/src/memory/fallback-memory-system.js +900 -1021
  193. package/dist/src/memory/fallback-store.js +93 -131
  194. package/dist/src/memory/high-performance-serialization.js +592 -730
  195. package/dist/src/memory/in-memory-store.js +161 -213
  196. package/dist/src/memory/index.js +123 -157
  197. package/dist/src/memory/lock-free-structures.js +578 -764
  198. package/dist/src/memory/memory-mapped-persistence.js +585 -766
  199. package/dist/src/memory/memory-pressure-manager.js +569 -707
  200. package/dist/src/memory/migration.js +358 -445
  201. package/dist/src/memory/shared-memory.js +641 -768
  202. package/dist/src/memory/sqlite-store.js +245 -325
  203. package/dist/src/memory/sqlite-wrapper.js +122 -151
  204. package/dist/src/memory/swarm-memory.js +470 -603
  205. package/dist/src/memory/test-example.js +126 -134
  206. package/dist/src/memory/ultra-fast-memory-store.js +622 -821
  207. package/dist/src/memory/unified-memory-manager.js +356 -437
  208. package/dist/src/migration/index.js +92 -0
  209. package/dist/src/migration/logger.js +121 -0
  210. package/dist/src/migration/migration-analyzer.js +268 -0
  211. package/dist/src/migration/migration-runner.js +522 -0
  212. package/dist/src/migration/migration-validator.js +285 -0
  213. package/dist/src/migration/progress-reporter.js +150 -0
  214. package/dist/src/migration/rollback-manager.js +321 -0
  215. package/dist/src/migration/tests/migration-system.test.js +7 -0
  216. package/dist/src/migration/types.js +3 -0
  217. package/dist/src/swarm/CodeRefactoringSwarm.js +777 -952
  218. package/dist/src/swarm/__tests__/integration.test.js +227 -0
  219. package/dist/src/swarm/__tests__/prompt-copier.test.js +344 -0
  220. package/dist/src/swarm/advanced-orchestrator.js +1095 -0
  221. package/dist/src/swarm/claude-code-interface.js +961 -0
  222. package/dist/src/swarm/claude-flow-executor.js +229 -0
  223. package/dist/src/swarm/consensus-coordinator.js +475 -0
  224. package/dist/src/swarm/coordinator.js +2993 -0
  225. package/dist/src/swarm/direct-executor.js +1180 -0
  226. package/dist/src/swarm/error-recovery/advanced-error-detection.js +691 -0
  227. package/dist/src/swarm/error-recovery/automated-recovery-workflows.js +998 -0
  228. package/dist/src/swarm/error-recovery/error-recovery-coordinator.js +1197 -0
  229. package/dist/src/swarm/error-recovery/recovery-monitoring.js +772 -0
  230. package/dist/src/swarm/error-recovery/resilience-architecture.js +714 -0
  231. package/dist/src/swarm/error-recovery/self-healing-mechanisms.js +1319 -0
  232. package/dist/src/swarm/error-recovery/test-error-recovery-effectiveness.js +808 -0
  233. package/dist/src/swarm/executor-v2.js +322 -0
  234. package/dist/src/swarm/executor.js +815 -0
  235. package/dist/src/swarm/hive-mind-integration.js +703 -0
  236. package/dist/src/swarm/index.js +41 -0
  237. package/dist/src/swarm/json-output-aggregator.js +267 -0
  238. package/dist/src/swarm/large-scale-coordinator.js +542 -0
  239. package/dist/src/swarm/mcp-integration-wrapper.js +628 -0
  240. package/dist/src/swarm/memory.js +1117 -0
  241. package/dist/src/swarm/optimizations/__tests__/optimization.test.js +348 -0
  242. package/dist/src/swarm/optimizations/async-file-manager.js +285 -0
  243. package/dist/src/swarm/optimizations/circular-buffer.js +162 -0
  244. package/dist/src/swarm/optimizations/connection-pool.js +244 -0
  245. package/dist/src/swarm/optimizations/index.js +28 -0
  246. package/dist/src/swarm/optimizations/optimized-executor.js +320 -0
  247. package/dist/src/swarm/optimizations/ttl-map.js +234 -0
  248. package/dist/src/swarm/prompt-cli.js +200 -0
  249. package/dist/src/swarm/prompt-copier-enhanced.js +202 -0
  250. package/dist/src/swarm/prompt-copier.js +381 -0
  251. package/dist/src/swarm/prompt-manager.js +295 -0
  252. package/dist/src/swarm/prompt-utils.js +310 -0
  253. package/dist/src/swarm/result-aggregator.js +718 -0
  254. package/dist/src/swarm/sparc-executor.js +1568 -0
  255. package/dist/src/swarm/strategies/auto.js +758 -0
  256. package/dist/src/swarm/strategies/base.js +128 -0
  257. package/dist/src/swarm/strategies/research.js +914 -0
  258. package/dist/src/swarm/strategies/strategy-metrics-patch.js +2 -0
  259. package/dist/src/swarm/types.js +52 -0
  260. package/dist/src/swarm/workers/copy-worker.js +56 -0
  261. package/dist/src/utils/__tests__/github-cli-safety-wrapper.test.js +332 -400
  262. package/dist/src/utils/github-cli-safe.js +56 -64
  263. package/dist/src/utils/github-cli-safety-wrapper.js +451 -546
  264. package/dist/src/utils/npx-isolated-cache.js +104 -119
  265. package/dist/src/utils/preference-manager.js +622 -652
  266. package/dist/src/utils/timezone-utils.js +86 -105
  267. package/dist/src/validators/epic-config-schema.js +214 -0
  268. package/dist/src/validators/index.js +10 -0
  269. package/dist/src/validators/swarm-init-validator.js +259 -0
  270. package/dist/src/validators/todowrite-batching-validator.js +215 -0
  271. package/dist/src/validators/todowrite-integration.js +187 -0
  272. package/package.json +2 -2
@@ -2,281 +2,231 @@
2
2
  /**
3
3
  * Stream Chain Command - Real Claude CLI stream-json chaining
4
4
  * Based on docs/stream-chaining.md specification
5
- */
6
-
7
- import { spawn, execSync } from 'child_process';
8
- import { Readable, PassThrough } from 'stream';
9
-
5
+ */ import { spawn, execSync } from "child_process";
6
+ import { Readable } from "stream";
10
7
  /**
11
8
  * Check if claude CLI is available
12
- */
13
- function checkClaudeAvailable() {
14
- try {
15
- execSync('which claude', { stdio: 'ignore' });
16
- return true;
17
- } catch {
18
- return false;
19
- }
20
- }
21
-
22
- /**
23
- * Execute a chain of Claude instances with proper stream-json piping
24
- */
25
- async function executeStreamChain(prompts, flags = {}) {
26
- if (!checkClaudeAvailable()) {
27
- console.error('โŒ Error: Claude CLI is required for stream chaining');
28
- console.log(' Install: npm install -g @anthropic-ai/claude-cli');
29
- console.log(' Or use Claude Code: https://docs.anthropic.com/claude/docs/claude-cli');
30
- return;
31
- }
32
-
33
- console.log('๐Ÿ”— Starting Real Stream Chain');
34
- console.log('โ”'.repeat(50));
35
- console.log(`๐Ÿ“ Chain length: ${prompts.length} steps`);
36
- console.log('');
37
-
38
- const results = [];
39
- let previousOutput = null;
40
-
41
- for (let i = 0; i < prompts.length; i++) {
42
- const prompt = prompts[i];
43
- const isFirst = i === 0;
44
- const isLast = i === prompts.length - 1;
45
-
46
- console.log(`\n๐Ÿ”„ Step ${i + 1}/${prompts.length}: ${prompt.slice(0, 50)}...`);
47
-
9
+ */ function checkClaudeAvailable() {
48
10
  try {
49
- const result = await executeSingleStep(prompt, previousOutput, isFirst, isLast, flags);
50
-
51
- results.push({
52
- step: i + 1,
53
- prompt: prompt.slice(0, 50),
54
- success: result.success,
55
- duration: result.duration,
56
- });
57
-
58
- if (!result.success) {
59
- console.error(`โŒ Step ${i + 1} failed`);
60
- break;
61
- }
62
-
63
- console.log(`โœ… Step ${i + 1} completed (${result.duration}ms)`);
64
-
65
- // Store output for next step (only if not last)
66
- if (!isLast) {
67
- previousOutput = result.output;
68
- }
69
-
70
- // Show verbose output if requested
71
- if (flags.verbose && result.output) {
72
- const preview = result.output.slice(0, 200);
73
- console.log(` Output preview: ${preview}...`);
74
- }
75
- } catch (error) {
76
- console.error(`โŒ Step ${i + 1} error:`, error.message);
77
- results.push({
78
- step: i + 1,
79
- prompt: prompt.slice(0, 50),
80
- success: false,
81
- duration: 0,
82
- });
83
- break;
11
+ execSync('which claude', {
12
+ stdio: 'ignore'
13
+ });
14
+ return true;
15
+ } catch {
16
+ return false;
84
17
  }
85
- }
86
-
87
- // Summary
88
- console.log('\n' + 'โ•'.repeat(50));
89
- console.log('๐Ÿ“Š Stream Chain Summary');
90
- console.log('โ•'.repeat(50));
91
-
92
- for (const result of results) {
93
- const status = result.success ? 'โœ…' : 'โŒ';
94
- console.log(`${status} Step ${result.step}: ${result.prompt}... (${result.duration}ms)`);
95
- }
96
-
97
- const totalTime = results.reduce((sum, r) => sum + r.duration, 0);
98
- const successCount = results.filter((r) => r.success).length;
99
-
100
- console.log(`\nโฑ๏ธ Total execution time: ${totalTime}ms`);
101
- console.log(`๐Ÿ“ˆ Success rate: ${successCount}/${results.length} steps`);
102
18
  }
103
-
104
19
  /**
105
- * Execute a single step in the chain
106
- */
107
- async function executeSingleStep(prompt, inputStream, isFirst, isLast, flags) {
108
- return new Promise((resolve, reject) => {
109
- const startTime = Date.now();
110
- const timeout = (flags.timeout || 30) * 1000;
111
-
112
- // Build args based on position in chain
113
- const args = ['-p'];
114
-
115
- // First step: only output stream-json
116
- // Middle steps: both input and output stream-json
117
- // Last step: only input stream-json (if not first)
118
-
119
- if (!isFirst && inputStream) {
120
- args.push('--input-format', 'stream-json');
20
+ * Execute a chain of Claude instances with proper stream-json piping
21
+ */ async function executeStreamChain(prompts, flags = {}) {
22
+ if (!checkClaudeAvailable()) {
23
+ console.error('โŒ Error: Claude CLI is required for stream chaining');
24
+ console.log(' Install: npm install -g @anthropic-ai/claude-cli');
25
+ console.log(' Or use Claude Code: https://docs.anthropic.com/claude/docs/claude-cli');
26
+ return;
121
27
  }
122
-
123
- if (!isLast) {
124
- args.push('--output-format', 'stream-json');
125
- if (flags.verbose) {
126
- args.push('--verbose');
127
- }
28
+ console.log('๐Ÿ”— Starting Real Stream Chain');
29
+ console.log('โ”'.repeat(50));
30
+ console.log(`๐Ÿ“ Chain length: ${prompts.length} steps`);
31
+ console.log('');
32
+ const results = [];
33
+ let previousOutput = null;
34
+ for(let i = 0; i < prompts.length; i++){
35
+ const prompt = prompts[i];
36
+ const isFirst = i === 0;
37
+ const isLast = i === prompts.length - 1;
38
+ console.log(`\n๐Ÿ”„ Step ${i + 1}/${prompts.length}: ${prompt.slice(0, 50)}...`);
39
+ try {
40
+ const result = await executeSingleStep(prompt, previousOutput, isFirst, isLast, flags);
41
+ results.push({
42
+ step: i + 1,
43
+ prompt: prompt.slice(0, 50),
44
+ success: result.success,
45
+ duration: result.duration
46
+ });
47
+ if (!result.success) {
48
+ console.error(`โŒ Step ${i + 1} failed`);
49
+ break;
50
+ }
51
+ console.log(`โœ… Step ${i + 1} completed (${result.duration}ms)`);
52
+ // Store output for next step (only if not last)
53
+ if (!isLast) {
54
+ previousOutput = result.output;
55
+ }
56
+ // Show verbose output if requested
57
+ if (flags.verbose && result.output) {
58
+ const preview = result.output.slice(0, 200);
59
+ console.log(` Output preview: ${preview}...`);
60
+ }
61
+ } catch (error) {
62
+ console.error(`โŒ Step ${i + 1} error:`, error.message);
63
+ results.push({
64
+ step: i + 1,
65
+ prompt: prompt.slice(0, 50),
66
+ success: false,
67
+ duration: 0
68
+ });
69
+ break;
70
+ }
128
71
  }
129
-
130
- args.push(prompt);
131
-
132
- console.log(` Executing: claude ${args.join(' ')}`);
133
-
134
- // Spawn the Claude process
135
- const claudeProcess = spawn('claude', args, {
136
- stdio: ['pipe', 'pipe', 'pipe'],
137
- env: process.env,
138
- });
139
-
140
- let output = '';
141
- let stderr = '';
142
- let processCompleted = false;
143
-
144
- // If we have input from previous step, pipe it
145
- if (!isFirst && inputStream) {
146
- console.log(' ๐Ÿ”— Piping input from previous step...');
147
-
148
- // Create a readable stream from the input string
149
- const inputReadable = Readable.from(inputStream);
150
- inputReadable.pipe(claudeProcess.stdin);
151
-
152
- // Handle pipe errors
153
- inputReadable.on('error', (error) => {
154
- console.error(' Input pipe error:', error.message);
155
- });
156
- } else {
157
- // Close stdin if no input
158
- claudeProcess.stdin.end();
72
+ // Summary
73
+ console.log('\n' + 'โ•'.repeat(50));
74
+ console.log('๐Ÿ“Š Stream Chain Summary');
75
+ console.log('โ•'.repeat(50));
76
+ for (const result of results){
77
+ const status = result.success ? 'โœ…' : 'โŒ';
78
+ console.log(`${status} Step ${result.step}: ${result.prompt}... (${result.duration}ms)`);
159
79
  }
160
-
161
- // Capture output
162
- claudeProcess.stdout.on('data', (data) => {
163
- output += data.toString();
164
-
165
- // Show progress dots in verbose mode
166
- if (flags.verbose && !processCompleted) {
167
- process.stdout.write('.');
168
- }
169
- });
170
-
171
- // Capture errors
172
- claudeProcess.stderr.on('data', (data) => {
173
- stderr += data.toString();
174
- });
175
-
176
- // Handle process completion
177
- claudeProcess.on('close', (code) => {
178
- if (processCompleted) return;
179
- processCompleted = true;
180
-
181
- const duration = Date.now() - startTime;
182
-
183
- if (flags.verbose) {
184
- console.log(''); // New line after progress dots
185
- }
186
-
187
- if (code !== 0) {
188
- console.error(` Process exited with code ${code}`);
189
- if (stderr) {
190
- console.error(` stderr: ${stderr.slice(0, 200)}`);
80
+ const totalTime = results.reduce((sum, r)=>sum + r.duration, 0);
81
+ const successCount = results.filter((r)=>r.success).length;
82
+ console.log(`\nโฑ๏ธ Total execution time: ${totalTime}ms`);
83
+ console.log(`๐Ÿ“ˆ Success rate: ${successCount}/${results.length} steps`);
84
+ }
85
+ /**
86
+ * Execute a single step in the chain
87
+ */ async function executeSingleStep(prompt, inputStream, isFirst, isLast, flags) {
88
+ return new Promise((resolve, reject)=>{
89
+ const startTime = Date.now();
90
+ const timeout = (flags.timeout || 30) * 1000;
91
+ // Build args based on position in chain
92
+ const args = [
93
+ '-p'
94
+ ];
95
+ // First step: only output stream-json
96
+ // Middle steps: both input and output stream-json
97
+ // Last step: only input stream-json (if not first)
98
+ if (!isFirst && inputStream) {
99
+ args.push('--input-format', 'stream-json');
191
100
  }
192
-
193
- resolve({
194
- success: false,
195
- duration,
196
- output: null,
197
- error: stderr || `Process exited with code ${code}`,
101
+ if (!isLast) {
102
+ args.push('--output-format', 'stream-json');
103
+ if (flags.verbose) {
104
+ args.push('--verbose');
105
+ }
106
+ }
107
+ args.push(prompt);
108
+ console.log(` Executing: claude ${args.join(' ')}`);
109
+ // Spawn the Claude process
110
+ const claudeProcess = spawn('claude', args, {
111
+ stdio: [
112
+ 'pipe',
113
+ 'pipe',
114
+ 'pipe'
115
+ ],
116
+ env: process.env
117
+ });
118
+ let output = '';
119
+ let stderr = '';
120
+ let processCompleted = false;
121
+ // If we have input from previous step, pipe it
122
+ if (!isFirst && inputStream) {
123
+ console.log(' ๐Ÿ”— Piping input from previous step...');
124
+ // Create a readable stream from the input string
125
+ const inputReadable = Readable.from(inputStream);
126
+ inputReadable.pipe(claudeProcess.stdin);
127
+ // Handle pipe errors
128
+ inputReadable.on('error', (error)=>{
129
+ console.error(' Input pipe error:', error.message);
130
+ });
131
+ } else {
132
+ // Close stdin if no input
133
+ claudeProcess.stdin.end();
134
+ }
135
+ // Capture output
136
+ claudeProcess.stdout.on('data', (data)=>{
137
+ output += data.toString();
138
+ // Show progress dots in verbose mode
139
+ if (flags.verbose && !processCompleted) {
140
+ process.stdout.write('.');
141
+ }
142
+ });
143
+ // Capture errors
144
+ claudeProcess.stderr.on('data', (data)=>{
145
+ stderr += data.toString();
146
+ });
147
+ // Handle process completion
148
+ claudeProcess.on('close', (code)=>{
149
+ if (processCompleted) return;
150
+ processCompleted = true;
151
+ const duration = Date.now() - startTime;
152
+ if (flags.verbose) {
153
+ console.log(''); // New line after progress dots
154
+ }
155
+ if (code !== 0) {
156
+ console.error(` Process exited with code ${code}`);
157
+ if (stderr) {
158
+ console.error(` stderr: ${stderr.slice(0, 200)}`);
159
+ }
160
+ resolve({
161
+ success: false,
162
+ duration,
163
+ output: null,
164
+ error: stderr || `Process exited with code ${code}`
165
+ });
166
+ return;
167
+ }
168
+ resolve({
169
+ success: true,
170
+ duration,
171
+ output: output.trim(),
172
+ error: null
173
+ });
174
+ });
175
+ // Handle process errors
176
+ claudeProcess.on('error', (error)=>{
177
+ if (processCompleted) return;
178
+ processCompleted = true;
179
+ console.error(' Process error:', error.message);
180
+ reject(error);
181
+ });
182
+ // Set timeout
183
+ const timeoutId = setTimeout(()=>{
184
+ if (processCompleted) return;
185
+ processCompleted = true;
186
+ console.log(' โฑ๏ธ Timeout reached, terminating...');
187
+ claudeProcess.kill('SIGTERM');
188
+ resolve({
189
+ success: false,
190
+ duration: timeout,
191
+ output: null,
192
+ error: 'Process timed out'
193
+ });
194
+ }, timeout);
195
+ // Clear timeout when process completes
196
+ claudeProcess.on('exit', ()=>{
197
+ clearTimeout(timeoutId);
198
198
  });
199
- return;
200
- }
201
-
202
- resolve({
203
- success: true,
204
- duration,
205
- output: output.trim(),
206
- error: null,
207
- });
208
- });
209
-
210
- // Handle process errors
211
- claudeProcess.on('error', (error) => {
212
- if (processCompleted) return;
213
- processCompleted = true;
214
-
215
- console.error(' Process error:', error.message);
216
- reject(error);
217
- });
218
-
219
- // Set timeout
220
- const timeoutId = setTimeout(() => {
221
- if (processCompleted) return;
222
- processCompleted = true;
223
-
224
- console.log(' โฑ๏ธ Timeout reached, terminating...');
225
- claudeProcess.kill('SIGTERM');
226
-
227
- resolve({
228
- success: false,
229
- duration: timeout,
230
- output: null,
231
- error: 'Process timed out',
232
- });
233
- }, timeout);
234
-
235
- // Clear timeout when process completes
236
- claudeProcess.on('exit', () => {
237
- clearTimeout(timeoutId);
238
199
  });
239
- });
240
200
  }
241
-
242
201
  /**
243
202
  * Main stream chain command
244
- */
245
- export async function streamChainCommand(args, flags) {
246
- const subcommand = args[0] || 'help';
247
-
248
- switch (subcommand) {
249
- case 'help':
250
- showHelp();
251
- break;
252
-
253
- case 'demo':
254
- await runDemo(flags);
255
- break;
256
-
257
- case 'run':
258
- await runCustomChain(args.slice(1), flags);
259
- break;
260
-
261
- case 'test':
262
- await testStreamConnection(flags);
263
- break;
264
-
265
- case 'pipeline':
266
- await runPipeline(args.slice(1), flags);
267
- break;
268
-
269
- default:
270
- console.error(`โŒ Unknown subcommand: ${subcommand}`);
271
- console.log('Use "stream-chain help" for usage information');
272
- }
203
+ */ export async function streamChainCommand(args, flags) {
204
+ const subcommand = args[0] || 'help';
205
+ switch(subcommand){
206
+ case 'help':
207
+ showHelp();
208
+ break;
209
+ case 'demo':
210
+ await runDemo(flags);
211
+ break;
212
+ case 'run':
213
+ await runCustomChain(args.slice(1), flags);
214
+ break;
215
+ case 'test':
216
+ await testStreamConnection(flags);
217
+ break;
218
+ case 'pipeline':
219
+ await runPipeline(args.slice(1), flags);
220
+ break;
221
+ default:
222
+ console.error(`โŒ Unknown subcommand: ${subcommand}`);
223
+ console.log('Use "stream-chain help" for usage information');
224
+ }
273
225
  }
274
-
275
226
  /**
276
227
  * Show help information
277
- */
278
- function showHelp() {
279
- console.log(`
228
+ */ function showHelp() {
229
+ console.log(`
280
230
  ๐Ÿ”— Real Stream Chain Command - Claude CLI Stream-JSON Chaining
281
231
 
282
232
  DESCRIPTION
@@ -319,90 +269,76 @@ STREAM-JSON FORMAT
319
269
  For more: docs/stream-chaining.md
320
270
  `);
321
271
  }
322
-
323
272
  /**
324
273
  * Run demonstration
325
- */
326
- async function runDemo(flags) {
327
- console.log('๐ŸŽญ Running Stream Chain Demo');
328
- console.log('โ”'.repeat(50));
329
- console.log('This demonstrates a real 3-step chain with context preservation\n');
330
-
331
- const prompts = [
332
- 'Generate a simple Python function to calculate factorial',
333
- 'Review the code and suggest improvements for efficiency',
334
- 'Apply the improvements and create the final optimized version',
335
- ];
336
-
337
- await executeStreamChain(prompts, flags);
274
+ */ async function runDemo(flags) {
275
+ console.log('๐ŸŽญ Running Stream Chain Demo');
276
+ console.log('โ”'.repeat(50));
277
+ console.log('This demonstrates a real 3-step chain with context preservation\n');
278
+ const prompts = [
279
+ 'Generate a simple Python function to calculate factorial',
280
+ 'Review the code and suggest improvements for efficiency',
281
+ 'Apply the improvements and create the final optimized version'
282
+ ];
283
+ await executeStreamChain(prompts, flags);
338
284
  }
339
-
340
285
  /**
341
286
  * Run custom chain
342
- */
343
- async function runCustomChain(prompts, flags) {
344
- if (prompts.length < 2) {
345
- console.error('โŒ Error: Need at least 2 prompts for chaining');
346
- console.log('Usage: stream-chain run "prompt1" "prompt2" [...]');
347
- return;
348
- }
349
-
350
- await executeStreamChain(prompts, flags);
287
+ */ async function runCustomChain(prompts, flags) {
288
+ if (prompts.length < 2) {
289
+ console.error('โŒ Error: Need at least 2 prompts for chaining');
290
+ console.log('Usage: stream-chain run "prompt1" "prompt2" [...]');
291
+ return;
292
+ }
293
+ await executeStreamChain(prompts, flags);
351
294
  }
352
-
353
295
  /**
354
296
  * Test stream connection
355
- */
356
- async function testStreamConnection(flags) {
357
- console.log('๐Ÿงช Testing Stream Connection');
358
- console.log('โ”'.repeat(50));
359
-
360
- const testPrompts = [
361
- "Say 'Stream test step 1 complete'",
362
- "Acknowledge the previous message and say 'Stream test step 2 complete'",
363
- ];
364
-
365
- await executeStreamChain(testPrompts, { ...flags, verbose: true });
297
+ */ async function testStreamConnection(flags) {
298
+ console.log('๐Ÿงช Testing Stream Connection');
299
+ console.log('โ”'.repeat(50));
300
+ const testPrompts = [
301
+ "Say 'Stream test step 1 complete'",
302
+ "Acknowledge the previous message and say 'Stream test step 2 complete'"
303
+ ];
304
+ await executeStreamChain(testPrompts, {
305
+ ...flags,
306
+ verbose: true
307
+ });
366
308
  }
367
-
368
309
  /**
369
310
  * Run predefined pipeline
370
- */
371
- async function runPipeline(args, flags) {
372
- const pipelineType = args[0] || 'analysis';
373
-
374
- const pipelines = {
375
- analysis: [
376
- 'Analyze the current directory structure and identify key components',
377
- 'Based on the analysis, identify potential improvements',
378
- 'Create a detailed report with actionable recommendations',
379
- ],
380
- refactor: [
381
- 'Identify code that needs refactoring in the current project',
382
- 'Create a refactoring plan with priorities',
383
- 'Generate refactored code examples for the top priorities',
384
- ],
385
- test: [
386
- 'Analyze code coverage and identify untested areas',
387
- 'Design comprehensive test cases for critical functions',
388
- 'Generate unit test implementations',
389
- ],
390
- optimize: [
391
- 'Profile the codebase for performance bottlenecks',
392
- 'Identify optimization opportunities',
393
- 'Provide optimized implementations',
394
- ],
395
- };
396
-
397
- const pipeline = pipelines[pipelineType];
398
- if (!pipeline) {
399
- console.error(`โŒ Unknown pipeline: ${pipelineType}`);
400
- console.log('Available pipelines:', Object.keys(pipelines).join(', '));
401
- return;
402
- }
403
-
404
- console.log(`๐Ÿš€ Running ${pipelineType} pipeline`);
405
- await executeStreamChain(pipeline, flags);
311
+ */ async function runPipeline(args, flags) {
312
+ const pipelineType = args[0] || 'analysis';
313
+ const pipelines = {
314
+ analysis: [
315
+ 'Analyze the current directory structure and identify key components',
316
+ 'Based on the analysis, identify potential improvements',
317
+ 'Create a detailed report with actionable recommendations'
318
+ ],
319
+ refactor: [
320
+ 'Identify code that needs refactoring in the current project',
321
+ 'Create a refactoring plan with priorities',
322
+ 'Generate refactored code examples for the top priorities'
323
+ ],
324
+ test: [
325
+ 'Analyze code coverage and identify untested areas',
326
+ 'Design comprehensive test cases for critical functions',
327
+ 'Generate unit test implementations'
328
+ ],
329
+ optimize: [
330
+ 'Profile the codebase for performance bottlenecks',
331
+ 'Identify optimization opportunities',
332
+ 'Provide optimized implementations'
333
+ ]
334
+ };
335
+ const pipeline = pipelines[pipelineType];
336
+ if (!pipeline) {
337
+ console.error(`โŒ Unknown pipeline: ${pipelineType}`);
338
+ console.log('Available pipelines:', Object.keys(pipelines).join(', '));
339
+ return;
340
+ }
341
+ console.log(`๐Ÿš€ Running ${pipelineType} pipeline`);
342
+ await executeStreamChain(pipeline, flags);
406
343
  }
407
-
408
344
  export default streamChainCommand;