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.
- package/dist/src/cli/commands/guidance.js +487 -668
- package/dist/src/cli/commands/index-validate.js +18 -29
- package/dist/src/cli/commands/mcp-troubleshoot.js +230 -282
- package/dist/src/cli/commands/neural-goal-init.js +92 -125
- package/dist/src/cli/commands/swarm-exec.js +317 -393
- package/dist/src/cli/commands/swarm.js +1 -1
- package/dist/src/cli/commands/validate-framework.js +983 -1100
- package/dist/src/cli/commands/validate.js +144 -223
- package/dist/src/cli/simple-commands/__tests__/agent.test.js +265 -277
- package/dist/src/cli/simple-commands/__tests__/memory.test.js +6 -7
- package/dist/src/cli/simple-commands/__tests__/swarm.test.js +373 -356
- package/dist/src/cli/simple-commands/__tests__/task.test.js +6 -7
- package/dist/src/cli/simple-commands/agent.js +157 -193
- package/dist/src/cli/simple-commands/analysis.js +336 -446
- package/dist/src/cli/simple-commands/automation-executor.js +1095 -1339
- package/dist/src/cli/simple-commands/automation.js +481 -469
- package/dist/src/cli/simple-commands/batch-manager.js +261 -313
- package/dist/src/cli/simple-commands/claude-telemetry.js +241 -267
- package/dist/src/cli/simple-commands/claude-track.js +68 -90
- package/dist/src/cli/simple-commands/concurrent-display.js +266 -320
- package/dist/src/cli/simple-commands/config.js +245 -290
- package/dist/src/cli/simple-commands/coordination.js +182 -234
- package/dist/src/cli/simple-commands/enhanced-ui-views.js +812 -615
- package/dist/src/cli/simple-commands/enhanced-webui-complete.js +922 -981
- package/dist/src/cli/simple-commands/fix-hook-variables.js +274 -294
- package/dist/src/cli/simple-commands/github/gh-coordinator.js +378 -457
- package/dist/src/cli/simple-commands/github/github-api.js +535 -574
- package/dist/src/cli/simple-commands/github/init.js +276 -303
- package/dist/src/cli/simple-commands/github.js +222 -247
- package/dist/src/cli/simple-commands/goal.js +51 -63
- package/dist/src/cli/simple-commands/hive-mind/auto-save-middleware.js +208 -278
- package/dist/src/cli/simple-commands/hive-mind/communication.js +601 -696
- package/dist/src/cli/simple-commands/hive-mind/core.js +907 -979
- package/dist/src/cli/simple-commands/hive-mind/db-optimizer.js +406 -655
- package/dist/src/cli/simple-commands/hive-mind/mcp-wrapper.js +1125 -1245
- package/dist/src/cli/simple-commands/hive-mind/memory.js +854 -1090
- package/dist/src/cli/simple-commands/hive-mind/performance-optimizer.js +459 -574
- package/dist/src/cli/simple-commands/hive-mind/performance-test.js +263 -347
- package/dist/src/cli/simple-commands/hive-mind/queen.js +727 -768
- package/dist/src/cli/simple-commands/hive-mind/session-manager.js +745 -1049
- package/dist/src/cli/simple-commands/hive-mind-optimize.js +227 -283
- package/dist/src/cli/simple-commands/hive-mind-wizard.js +174 -217
- package/dist/src/cli/simple-commands/hive-mind.js +1842 -2283
- package/dist/src/cli/simple-commands/hive.js +90 -79
- package/dist/src/cli/simple-commands/hook-safety.js +431 -521
- package/dist/src/cli/simple-commands/hooks/session-start-soul.js +203 -254
- package/dist/src/cli/simple-commands/hooks.js +1064 -1204
- package/dist/src/cli/simple-commands/init/agent-copier.js +294 -319
- package/dist/src/cli/simple-commands/init/batch-init.js +496 -562
- package/dist/src/cli/simple-commands/init/claude-commands/claude-flow-commands.js +13 -19
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-claude-flow-commands.js +13 -19
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-slash-commands.js +61 -88
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-sparc-commands.js +125 -150
- package/dist/src/cli/simple-commands/init/claude-commands/slash-commands.js +42 -49
- package/dist/src/cli/simple-commands/init/claude-commands/sparc-commands.js +43 -61
- package/dist/src/cli/simple-commands/init/copy-revised-templates.js +141 -147
- package/dist/src/cli/simple-commands/init/executable-wrapper.js +31 -44
- package/dist/src/cli/simple-commands/init/gitignore-updater.js +64 -90
- package/dist/src/cli/simple-commands/init/help.js +104 -107
- package/dist/src/cli/simple-commands/init/hive-mind-init.js +509 -528
- package/dist/src/cli/simple-commands/init/index.js +1510 -1759
- package/dist/src/cli/simple-commands/init/performance-monitor.js +234 -317
- package/dist/src/cli/simple-commands/init/rollback/backup-manager.js +441 -504
- package/dist/src/cli/simple-commands/init/rollback/index.js +289 -364
- package/dist/src/cli/simple-commands/init/rollback/recovery-manager.js +652 -728
- package/dist/src/cli/simple-commands/init/rollback/rollback-executor.js +416 -481
- package/dist/src/cli/simple-commands/init/rollback/state-tracker.js +369 -448
- package/dist/src/cli/simple-commands/init/sparc/roo-readme.js +1 -2
- package/dist/src/cli/simple-commands/init/sparc/roomodes-config.js +122 -99
- package/dist/src/cli/simple-commands/init/sparc/workflows.js +32 -37
- package/dist/src/cli/simple-commands/init/sparc-structure.js +55 -62
- package/dist/src/cli/simple-commands/init/template-copier.js +421 -533
- package/dist/src/cli/simple-commands/init/templates/coordination-md.js +3 -6
- package/dist/src/cli/simple-commands/init/templates/enhanced-templates.js +344 -318
- package/dist/src/cli/simple-commands/init/templates/github-safe-enhanced.js +173 -218
- package/dist/src/cli/simple-commands/init/templates/github-safe.js +65 -75
- package/dist/src/cli/simple-commands/init/templates/memory-bank-md.js +3 -6
- package/dist/src/cli/simple-commands/init/templates/readme-files.js +2 -4
- package/dist/src/cli/simple-commands/init/templates/safe-hook-patterns.js +187 -230
- package/dist/src/cli/simple-commands/init/templates/sparc-modes.js +53 -80
- package/dist/src/cli/simple-commands/init/templates/verification-claude-md.js +101 -85
- package/dist/src/cli/simple-commands/init/validation/config-validator.js +283 -330
- package/dist/src/cli/simple-commands/init/validation/health-checker.js +495 -561
- package/dist/src/cli/simple-commands/init/validation/index.js +302 -358
- package/dist/src/cli/simple-commands/init/validation/mode-validator.js +308 -359
- package/dist/src/cli/simple-commands/init/validation/post-init-validator.js +389 -366
- package/dist/src/cli/simple-commands/init/validation/pre-init-validator.js +270 -268
- package/dist/src/cli/simple-commands/init/validation/test-runner.js +427 -447
- package/dist/src/cli/simple-commands/init.js +1 -2
- package/dist/src/cli/simple-commands/mcp-health.js +131 -158
- package/dist/src/cli/simple-commands/mcp-integration-layer.js +533 -634
- package/dist/src/cli/simple-commands/mcp.js +345 -400
- package/dist/src/cli/simple-commands/memory-consolidation.js +426 -537
- package/dist/src/cli/simple-commands/memory.js +247 -311
- package/dist/src/cli/simple-commands/migrate-hooks.js +39 -46
- package/dist/src/cli/simple-commands/monitor.js +294 -363
- package/dist/src/cli/simple-commands/neural.js +51 -65
- package/dist/src/cli/simple-commands/pair-autofix-only.js +538 -662
- package/dist/src/cli/simple-commands/pair-basic.js +528 -656
- package/dist/src/cli/simple-commands/pair-old.js +430 -543
- package/dist/src/cli/simple-commands/pair-working.js +615 -751
- package/dist/src/cli/simple-commands/pair.js +615 -751
- package/dist/src/cli/simple-commands/performance-hooks.js +83 -111
- package/dist/src/cli/simple-commands/performance-metrics.js +348 -433
- package/dist/src/cli/simple-commands/process-ui-enhanced.js +708 -787
- package/dist/src/cli/simple-commands/process-ui.js +230 -254
- package/dist/src/cli/simple-commands/realtime-update-system.js +525 -611
- package/dist/src/cli/simple-commands/sparc/architecture.js +1704 -1530
- package/dist/src/cli/simple-commands/sparc/commands.js +438 -516
- package/dist/src/cli/simple-commands/sparc/completion.js +1224 -1481
- package/dist/src/cli/simple-commands/sparc/coordinator.js +913 -978
- package/dist/src/cli/simple-commands/sparc/index.js +241 -298
- package/dist/src/cli/simple-commands/sparc/phase-base.js +314 -390
- package/dist/src/cli/simple-commands/sparc/pseudocode.js +965 -869
- package/dist/src/cli/simple-commands/sparc/refinement.js +980 -1273
- package/dist/src/cli/simple-commands/sparc/specification.js +559 -645
- package/dist/src/cli/simple-commands/sparc-modes/architect.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/ask.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/code.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/debug.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/devops.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/docs-writer.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/generic.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/index.js +47 -55
- package/dist/src/cli/simple-commands/sparc-modes/integration.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/mcp.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/monitoring.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/optimization.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/security-review.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/sparc-orchestrator.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/spec-pseudocode.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/supabase-admin.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/swarm.js +101 -87
- package/dist/src/cli/simple-commands/sparc-modes/tdd.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/tutorial.js +1 -1
- package/dist/src/cli/simple-commands/sparc.js +465 -493
- package/dist/src/cli/simple-commands/start-ui.js +108 -132
- package/dist/src/cli/simple-commands/start-wrapper.js +240 -268
- package/dist/src/cli/simple-commands/start.js +1 -1
- package/dist/src/cli/simple-commands/status.js +254 -275
- package/dist/src/cli/simple-commands/stream-chain-clean.js +128 -171
- package/dist/src/cli/simple-commands/stream-chain-fixed.js +61 -82
- package/dist/src/cli/simple-commands/stream-chain-real.js +267 -331
- package/dist/src/cli/simple-commands/stream-chain-working.js +211 -263
- package/dist/src/cli/simple-commands/stream-chain.js +260 -318
- package/dist/src/cli/simple-commands/stream-processor.js +290 -315
- package/dist/src/cli/simple-commands/swarm-executor.js +189 -222
- package/dist/src/cli/simple-commands/swarm-metrics-integration.js +208 -300
- package/dist/src/cli/simple-commands/swarm-ui.js +623 -703
- package/dist/src/cli/simple-commands/swarm-webui-integration.js +258 -286
- package/dist/src/cli/simple-commands/swarm.js +887 -1082
- package/dist/src/cli/simple-commands/task.js +161 -206
- package/dist/src/cli/simple-commands/timestamp-fix.js +59 -89
- package/dist/src/cli/simple-commands/token-tracker.js +258 -316
- package/dist/src/cli/simple-commands/tool-execution-framework.js +433 -519
- package/dist/src/cli/simple-commands/train-and-stream.js +275 -331
- package/dist/src/cli/simple-commands/training-pipeline.js +619 -725
- package/dist/src/cli/simple-commands/training.js +170 -227
- package/dist/src/cli/simple-commands/verification-hooks.js +261 -284
- package/dist/src/cli/simple-commands/verification-integration.js +389 -417
- package/dist/src/cli/simple-commands/verification-training-integration.js +486 -606
- package/dist/src/cli/simple-commands/verification.js +493 -513
- package/dist/src/cli/simple-commands/web-server.js +766 -836
- package/dist/src/cli/simple-commands/webui-validator.js +106 -124
- package/dist/src/coordination/event-bus/demo-wasm-integration.js +212 -251
- package/dist/src/coordination/event-bus/qe-event-bus.js +608 -748
- package/dist/src/coordination/event-bus/qe-event-bus.test.js +379 -454
- package/dist/src/coordination/iteration-tracker.js +363 -454
- package/dist/src/enterprise/analytics-manager.js +1135 -0
- package/dist/src/enterprise/audit-manager.js +1115 -0
- package/dist/src/enterprise/cloud-manager.js +891 -0
- package/dist/src/enterprise/deployment-manager.js +966 -0
- package/dist/src/enterprise/index.js +6 -0
- package/dist/src/enterprise/project-manager.js +584 -0
- package/dist/src/enterprise/security-manager.js +991 -0
- package/dist/src/index.js +1 -1
- package/dist/src/mcp/DEPRECATED.js +46 -60
- package/dist/src/mcp/fixes/mcp-error-fixes.js +115 -134
- package/dist/src/mcp/implementations/agent-tracker.js +114 -128
- package/dist/src/mcp/implementations/daa-tools.js +292 -350
- package/dist/src/mcp/implementations/workflow-tools.js +329 -361
- package/dist/src/mcp/mcp-config-manager.js +1183 -1331
- package/dist/src/mcp/mcp-server-novice-simplified.js +11 -17
- package/dist/src/mcp/mcp-server-novice.js +11 -17
- package/dist/src/mcp/mcp-server-sdk.js +11 -17
- package/dist/src/mcp/mcp-server.js +1620 -1484
- package/dist/src/mcp/ruv-swarm-wrapper.js +209 -239
- package/dist/src/memory/advanced-serializer.js +609 -589
- package/dist/src/memory/enhanced-examples.js +220 -305
- package/dist/src/memory/enhanced-memory.js +295 -336
- package/dist/src/memory/enhanced-session-serializer.js +408 -492
- package/dist/src/memory/fallback-memory-system.js +900 -1021
- package/dist/src/memory/fallback-store.js +93 -131
- package/dist/src/memory/high-performance-serialization.js +592 -730
- package/dist/src/memory/in-memory-store.js +161 -213
- package/dist/src/memory/index.js +123 -157
- package/dist/src/memory/lock-free-structures.js +578 -764
- package/dist/src/memory/memory-mapped-persistence.js +585 -766
- package/dist/src/memory/memory-pressure-manager.js +569 -707
- package/dist/src/memory/migration.js +358 -445
- package/dist/src/memory/shared-memory.js +641 -768
- package/dist/src/memory/sqlite-store.js +245 -325
- package/dist/src/memory/sqlite-wrapper.js +122 -151
- package/dist/src/memory/swarm-memory.js +470 -603
- package/dist/src/memory/test-example.js +126 -134
- package/dist/src/memory/ultra-fast-memory-store.js +622 -821
- package/dist/src/memory/unified-memory-manager.js +356 -437
- package/dist/src/migration/index.js +92 -0
- package/dist/src/migration/logger.js +121 -0
- package/dist/src/migration/migration-analyzer.js +268 -0
- package/dist/src/migration/migration-runner.js +522 -0
- package/dist/src/migration/migration-validator.js +285 -0
- package/dist/src/migration/progress-reporter.js +150 -0
- package/dist/src/migration/rollback-manager.js +321 -0
- package/dist/src/migration/tests/migration-system.test.js +7 -0
- package/dist/src/migration/types.js +3 -0
- package/dist/src/swarm/CodeRefactoringSwarm.js +777 -952
- package/dist/src/swarm/__tests__/integration.test.js +227 -0
- package/dist/src/swarm/__tests__/prompt-copier.test.js +344 -0
- package/dist/src/swarm/advanced-orchestrator.js +1095 -0
- package/dist/src/swarm/claude-code-interface.js +961 -0
- package/dist/src/swarm/claude-flow-executor.js +229 -0
- package/dist/src/swarm/consensus-coordinator.js +475 -0
- package/dist/src/swarm/coordinator.js +2993 -0
- package/dist/src/swarm/direct-executor.js +1180 -0
- package/dist/src/swarm/error-recovery/advanced-error-detection.js +691 -0
- package/dist/src/swarm/error-recovery/automated-recovery-workflows.js +998 -0
- package/dist/src/swarm/error-recovery/error-recovery-coordinator.js +1197 -0
- package/dist/src/swarm/error-recovery/recovery-monitoring.js +772 -0
- package/dist/src/swarm/error-recovery/resilience-architecture.js +714 -0
- package/dist/src/swarm/error-recovery/self-healing-mechanisms.js +1319 -0
- package/dist/src/swarm/error-recovery/test-error-recovery-effectiveness.js +808 -0
- package/dist/src/swarm/executor-v2.js +322 -0
- package/dist/src/swarm/executor.js +815 -0
- package/dist/src/swarm/hive-mind-integration.js +703 -0
- package/dist/src/swarm/index.js +41 -0
- package/dist/src/swarm/json-output-aggregator.js +267 -0
- package/dist/src/swarm/large-scale-coordinator.js +542 -0
- package/dist/src/swarm/mcp-integration-wrapper.js +628 -0
- package/dist/src/swarm/memory.js +1117 -0
- package/dist/src/swarm/optimizations/__tests__/optimization.test.js +348 -0
- package/dist/src/swarm/optimizations/async-file-manager.js +285 -0
- package/dist/src/swarm/optimizations/circular-buffer.js +162 -0
- package/dist/src/swarm/optimizations/connection-pool.js +244 -0
- package/dist/src/swarm/optimizations/index.js +28 -0
- package/dist/src/swarm/optimizations/optimized-executor.js +320 -0
- package/dist/src/swarm/optimizations/ttl-map.js +234 -0
- package/dist/src/swarm/prompt-cli.js +200 -0
- package/dist/src/swarm/prompt-copier-enhanced.js +202 -0
- package/dist/src/swarm/prompt-copier.js +381 -0
- package/dist/src/swarm/prompt-manager.js +295 -0
- package/dist/src/swarm/prompt-utils.js +310 -0
- package/dist/src/swarm/result-aggregator.js +718 -0
- package/dist/src/swarm/sparc-executor.js +1568 -0
- package/dist/src/swarm/strategies/auto.js +758 -0
- package/dist/src/swarm/strategies/base.js +128 -0
- package/dist/src/swarm/strategies/research.js +914 -0
- package/dist/src/swarm/strategies/strategy-metrics-patch.js +2 -0
- package/dist/src/swarm/types.js +52 -0
- package/dist/src/swarm/workers/copy-worker.js +56 -0
- package/dist/src/utils/__tests__/github-cli-safety-wrapper.test.js +332 -400
- package/dist/src/utils/github-cli-safe.js +56 -64
- package/dist/src/utils/github-cli-safety-wrapper.js +451 -546
- package/dist/src/utils/npx-isolated-cache.js +104 -119
- package/dist/src/utils/preference-manager.js +622 -652
- package/dist/src/utils/timezone-utils.js +86 -105
- package/dist/src/validators/epic-config-schema.js +214 -0
- package/dist/src/validators/index.js +10 -0
- package/dist/src/validators/swarm-init-validator.js +259 -0
- package/dist/src/validators/todowrite-batching-validator.js +215 -0
- package/dist/src/validators/todowrite-integration.js +187 -0
- 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
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
|
106
|
-
*/
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
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
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
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
|
-
|
|
131
|
-
|
|
132
|
-
console.log(
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
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
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
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
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
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
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
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
|
-
|
|
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
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
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
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
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
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
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
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
]
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
console.log(
|
|
401
|
-
|
|
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;
|