claude-flow-novice 1.3.0 โ 1.3.2
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/.claude-flow-novice/preferences/generation.json +147 -0
- package/.claude-flow-novice/preferences/language-configs/javascript.json +51 -0
- package/.claude-flow-novice/preferences/language-configs/python.json +50 -0
- package/.claude-flow-novice/preferences/language-configs/rust.json +237 -0
- package/.claude-flow-novice/preferences/language-configs/typescript.json +54 -0
- package/.claude-flow-novice/preferences/project-local.json +91 -0
- package/.claude-flow-novice/preferences/resource-delegation.json +120 -0
- package/.claude-flow-novice/preferences/team-shared.json +195 -0
- package/.claude-flow-novice/preferences/user-global.json +247 -0
- package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-JAVASCRIPT.md +769 -0
- package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-PYTHON.md +1214 -0
- package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-RUST.md +475 -0
- package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-TYPESCRIPT.md +851 -0
- package/.claude-flow-novice/templates/claude-md-templates/README.md +263 -0
- package/CLAUDE.md +81 -0
- package/README-NPM.md +0 -0
- package/package.json +11 -7
- package/scripts/build/README.md +167 -0
- package/scripts/build/build-config.js +27 -0
- package/scripts/build/build-prompt-copier.sh +30 -0
- package/scripts/build/performance-monitor.js +869 -0
- package/scripts/build/prepare-publish.js +150 -0
- package/scripts/build/typescript-fixer.js +621 -0
- package/scripts/build/unified-builder.sh +428 -0
- package/scripts/build/update-bin-version.js +32 -0
- package/scripts/dev/README.md +264 -0
- package/scripts/dev/claude-flow-wrapper.sh +35 -0
- package/scripts/dev/claude-monitor.py +419 -0
- package/scripts/dev/claude-sparc.sh +562 -0
- package/scripts/dev/claude-wrapper.sh +17 -0
- package/scripts/dev/demo-phase3-compliance.js +172 -0
- package/scripts/dev/demo-task-system.ts +224 -0
- package/scripts/dev/deployment-validator.js +315 -0
- package/scripts/dev/spawn-claude-terminal.sh +32 -0
- package/scripts/dev/start-portal.sh +506 -0
- package/scripts/dev/start-web-ui.js +15 -0
- package/scripts/dev/stop-portal.sh +311 -0
- package/scripts/dev/validate-examples.ts +288 -0
- package/scripts/dev/validate-phase2.cjs +451 -0
- package/scripts/dev/validate-phase2.js +785 -0
- package/scripts/dev/validate-phase3.cjs +208 -0
- package/scripts/dev/validate-security-remediation.js +1 -0
- package/scripts/legacy/README.md +272 -0
- package/scripts/legacy/batch-fix-ts.sh +54 -0
- package/scripts/legacy/build-migration.sh +105 -0
- package/scripts/legacy/build-monitor.js +209 -0
- package/scripts/legacy/build-with-filter.sh +84 -0
- package/scripts/legacy/build-workaround.sh +71 -0
- package/scripts/legacy/fix-ts-advanced.js +358 -0
- package/scripts/legacy/fix-ts-final.sh +50 -0
- package/scripts/legacy/fix-ts-targeted.sh +49 -0
- package/scripts/legacy/fix-typescript-errors.js +305 -0
- package/scripts/legacy/force-build.sh +63 -0
- package/scripts/legacy/optimize-performance.js +400 -0
- package/scripts/legacy/performance-monitor.js +263 -0
- package/scripts/legacy/performance-monitoring.js +532 -0
- package/scripts/legacy/performance-test-runner.js +645 -0
- package/scripts/legacy/quick-fix-ts.js +281 -0
- package/scripts/legacy/safe-build.sh +63 -0
- package/scripts/migration/README.md +434 -0
- package/scripts/migration/install-arm64.js +78 -0
- package/scripts/migration/install.js +83 -0
- package/scripts/migration/migrate-hooks.js +173 -0
- package/scripts/migration/migration-examples.ts +318 -0
- package/scripts/optimization/build-optimizer.js +438 -0
- package/scripts/optimization/config-validator.js +761 -0
- package/scripts/optimization/test-optimization.js +432 -0
- package/scripts/optimization/unified-activation.js +839 -0
- package/scripts/performance/ACTIVATION_COMMANDS.md +292 -0
- package/scripts/performance/sqlite-enhanced-activation.sh +583 -0
- package/scripts/performance/test-enhanced-backend.sh +504 -0
- package/scripts/performance-test-runner.js +698 -0
- package/scripts/security/README.md +339 -0
- package/scripts/security/install-git-hooks.sh +132 -0
- package/scripts/security/ruv-swarm-safe.js +74 -0
- package/scripts/test/README.md +236 -0
- package/scripts/test/check-links.ts +274 -0
- package/scripts/test/check-performance-regression.ts +168 -0
- package/scripts/test/coverage-report.ts +692 -0
- package/scripts/test/generate-swarm-tests.js +633 -0
- package/scripts/test/integration-test-validation.cjs +253 -0
- package/scripts/test/load-test-swarm.js +576 -0
- package/scripts/test/run-phase3-compliance-tests.js +427 -0
- package/scripts/test/test-batch-tasks.ts +29 -0
- package/scripts/test/test-byzantine-resolution.js +246 -0
- package/scripts/test/test-claude-spawn-options.sh +63 -0
- package/scripts/test/test-cli-wizard.js +331 -0
- package/scripts/test/test-comprehensive.js +401 -0
- package/scripts/test/test-coordination-features.ts +238 -0
- package/scripts/test/test-fallback-systems.js +276 -0
- package/scripts/test/test-init-command.ts +302 -0
- package/scripts/test/test-mcp.ts +251 -0
- package/scripts/test/test-runner.ts +568 -0
- package/scripts/test/test-swarm-integration.sh +92 -0
- package/scripts/test/test-swarm.ts +142 -0
- package/scripts/test/validation-summary.ts +408 -0
- package/scripts/utils/README.md +261 -0
- package/scripts/utils/clean-build-artifacts.sh +94 -0
- package/scripts/utils/cleanup-root.sh +69 -0
- package/scripts/utils/fix-cliffy-imports.js +307 -0
- package/scripts/utils/fix-duplicate-imports.js +114 -0
- package/scripts/utils/fix-error-handling.cjs +70 -0
- package/scripts/utils/fix-import-paths.js +104 -0
- package/scripts/utils/fix-imports.js +116 -0
- package/scripts/utils/fix-shebang.js +78 -0
- package/scripts/utils/fix-test-modules.js +27 -0
- package/scripts/utils/fix-timezone-issue-246.js +200 -0
- package/scripts/utils/fix-ts-comprehensive.py +182 -0
- package/scripts/utils/fix-ts-targeted-batch.js +250 -0
- package/scripts/utils/remove-benchmark-conflicts.sh +140 -0
- package/scripts/utils/simple-test-fixer.js +190 -0
- package/scripts/utils/validate-metrics-structure.cjs +144 -0
- package/scripts/verify-mcp-server.js +86 -0
- package/src/cli/simple-commands/__tests__/agent.test.js +291 -0
- package/src/cli/simple-commands/__tests__/memory.test.js +8 -0
- package/src/cli/simple-commands/__tests__/swarm.test.js +371 -0
- package/src/cli/simple-commands/__tests__/task.test.js +8 -0
- package/src/cli/simple-commands/agent.js +216 -0
- package/src/cli/simple-commands/analysis.js +570 -0
- package/src/cli/simple-commands/automation-executor.js +1603 -0
- package/src/cli/simple-commands/automation.js +627 -0
- package/src/cli/simple-commands/batch-manager.js +338 -0
- package/src/cli/simple-commands/claude-telemetry.js +311 -0
- package/src/cli/simple-commands/claude-track.js +102 -0
- package/src/cli/simple-commands/concurrent-display.js +348 -0
- package/src/cli/simple-commands/config.js +319 -0
- package/src/cli/simple-commands/coordination.js +307 -0
- package/src/cli/simple-commands/enhanced-ui-views.js +654 -0
- package/src/cli/simple-commands/enhanced-webui-complete.js +1038 -0
- package/src/cli/simple-commands/fix-hook-variables.js +363 -0
- package/src/cli/simple-commands/github/gh-coordinator.js +605 -0
- package/src/cli/simple-commands/github/github-api.js +624 -0
- package/src/cli/simple-commands/github/init.js +543 -0
- package/src/cli/simple-commands/github.js +377 -0
- package/src/cli/simple-commands/goal.js +145 -0
- package/src/cli/simple-commands/hive-mind/auto-save-middleware.js +311 -0
- package/src/cli/simple-commands/hive-mind/communication.js +740 -0
- package/src/cli/simple-commands/hive-mind/core.js +1031 -0
- package/src/cli/simple-commands/hive-mind/db-optimizer.js +872 -0
- package/src/cli/simple-commands/hive-mind/mcp-wrapper.js +1364 -0
- package/src/cli/simple-commands/hive-mind/memory.js +1292 -0
- package/src/cli/simple-commands/hive-mind/performance-optimizer.js +618 -0
- package/src/cli/simple-commands/hive-mind/performance-test.js +373 -0
- package/src/cli/simple-commands/hive-mind/queen.js +809 -0
- package/src/cli/simple-commands/hive-mind/session-manager.js +1223 -0
- package/src/cli/simple-commands/hive-mind-optimize.js +361 -0
- package/src/cli/simple-commands/hive-mind-wizard.js +281 -0
- package/src/cli/simple-commands/hive-mind.js +3112 -0
- package/src/cli/simple-commands/hive.js +140 -0
- package/src/cli/simple-commands/hook-safety.js +671 -0
- package/src/cli/simple-commands/hooks.js +1268 -0
- package/src/cli/simple-commands/init/.claude/checkpoints/1756224542.json +7 -0
- package/src/cli/simple-commands/init/.claude/checkpoints/1756224544.json +8 -0
- package/src/cli/simple-commands/init/README.md +106 -0
- package/src/cli/simple-commands/init/VALIDATION_ROLLBACK.md +488 -0
- package/src/cli/simple-commands/init/agent-copier.js +347 -0
- package/src/cli/simple-commands/init/batch-init.js +663 -0
- package/src/cli/simple-commands/init/claude-commands/claude-flow-commands.js +438 -0
- package/src/cli/simple-commands/init/claude-commands/optimized-claude-flow-commands.js +876 -0
- package/src/cli/simple-commands/init/claude-commands/optimized-slash-commands.js +356 -0
- package/src/cli/simple-commands/init/claude-commands/optimized-sparc-commands.js +501 -0
- package/src/cli/simple-commands/init/claude-commands/slash-commands.js +57 -0
- package/src/cli/simple-commands/init/claude-commands/sparc-commands.js +296 -0
- package/src/cli/simple-commands/init/copy-revised-templates.js +175 -0
- package/src/cli/simple-commands/init/executable-wrapper.js +122 -0
- package/src/cli/simple-commands/init/gitignore-updater.js +137 -0
- package/src/cli/simple-commands/init/help.js +110 -0
- package/src/cli/simple-commands/init/hive-mind-init.js +749 -0
- package/src/cli/simple-commands/init/index.js +1953 -0
- package/src/cli/simple-commands/init/performance-monitor.js +344 -0
- package/src/cli/simple-commands/init/rollback/backup-manager.js +542 -0
- package/src/cli/simple-commands/init/rollback/index.js +399 -0
- package/src/cli/simple-commands/init/rollback/recovery-manager.js +778 -0
- package/src/cli/simple-commands/init/rollback/rollback-executor.js +521 -0
- package/src/cli/simple-commands/init/rollback/state-tracker.js +486 -0
- package/src/cli/simple-commands/init/sparc/roo-readme.js +61 -0
- package/src/cli/simple-commands/init/sparc/roomodes-config.js +102 -0
- package/src/cli/simple-commands/init/sparc/workflows.js +40 -0
- package/src/cli/simple-commands/init/sparc-structure.js +68 -0
- package/src/cli/simple-commands/init/template-copier.js +640 -0
- package/src/cli/simple-commands/init/templates/CLAUDE.md +1185 -0
- package/src/cli/simple-commands/init/templates/CLAUDE.md.optimized +265 -0
- package/src/cli/simple-commands/init/templates/claude-flow-universal +81 -0
- package/src/cli/simple-commands/init/templates/claude-flow.bat +18 -0
- package/src/cli/simple-commands/init/templates/claude-flow.ps1 +24 -0
- package/src/cli/simple-commands/init/templates/claude-md.js +1101 -0
- package/src/cli/simple-commands/init/templates/commands/analysis/bottleneck-detect.md +162 -0
- package/src/cli/simple-commands/init/templates/commands/automation/auto-agent.md +122 -0
- package/src/cli/simple-commands/init/templates/commands/coordination/swarm-init.md +85 -0
- package/src/cli/simple-commands/init/templates/commands/github/github-swarm.md +121 -0
- package/src/cli/simple-commands/init/templates/commands/helpers/standard-checkpoint-hooks.sh +179 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/notification.md +113 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/post-command.md +116 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/post-edit.md +117 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/post-task.md +112 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/pre-command.md +113 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/pre-edit.md +113 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/pre-search.md +112 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/pre-task.md +111 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/session-end.md +118 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/session-restore.md +118 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/session-start.md +117 -0
- package/src/cli/simple-commands/init/templates/coordination-md.js +340 -0
- package/src/cli/simple-commands/init/templates/coordination.md +16 -0
- package/src/cli/simple-commands/init/templates/enhanced-templates.js +2347 -0
- package/src/cli/simple-commands/init/templates/github-safe-enhanced.js +331 -0
- package/src/cli/simple-commands/init/templates/github-safe.js +106 -0
- package/src/cli/simple-commands/init/templates/memory-bank-md.js +259 -0
- package/src/cli/simple-commands/init/templates/memory-bank.md +16 -0
- package/src/cli/simple-commands/init/templates/readme-files.js +72 -0
- package/src/cli/simple-commands/init/templates/safe-hook-patterns.js +430 -0
- package/src/cli/simple-commands/init/templates/settings.json +109 -0
- package/src/cli/simple-commands/init/templates/settings.json.enhanced +35 -0
- package/src/cli/simple-commands/init/templates/sparc-modes.js +1401 -0
- package/src/cli/simple-commands/init/templates/verification-claude-md.js +432 -0
- package/src/cli/simple-commands/init/validation/config-validator.js +354 -0
- package/src/cli/simple-commands/init/validation/health-checker.js +599 -0
- package/src/cli/simple-commands/init/validation/index.js +388 -0
- package/src/cli/simple-commands/init/validation/mode-validator.js +387 -0
- package/src/cli/simple-commands/init/validation/post-init-validator.js +390 -0
- package/src/cli/simple-commands/init/validation/pre-init-validator.js +290 -0
- package/src/cli/simple-commands/init/validation/test-runner.js +488 -0
- package/src/cli/simple-commands/init.js +4 -0
- package/src/cli/simple-commands/mcp-health.js +163 -0
- package/src/cli/simple-commands/mcp-integration-layer.js +689 -0
- package/src/cli/simple-commands/mcp.js +420 -0
- package/src/cli/simple-commands/memory-consolidation.js +631 -0
- package/src/cli/simple-commands/memory.js +345 -0
- package/src/cli/simple-commands/migrate-hooks.js +63 -0
- package/src/cli/simple-commands/monitor.js +417 -0
- package/src/cli/simple-commands/neural.js +148 -0
- package/src/cli/simple-commands/pair-autofix-only.js +755 -0
- package/src/cli/simple-commands/pair-basic.js +751 -0
- package/src/cli/simple-commands/pair-old.js +623 -0
- package/src/cli/simple-commands/pair-working.js +849 -0
- package/src/cli/simple-commands/pair.js +849 -0
- package/src/cli/simple-commands/performance-hooks.js +149 -0
- package/src/cli/simple-commands/performance-metrics.js +601 -0
- package/src/cli/simple-commands/process-ui-enhanced.js +821 -0
- package/src/cli/simple-commands/process-ui.js +274 -0
- package/src/cli/simple-commands/realtime-update-system.js +659 -0
- package/src/cli/simple-commands/sparc/architecture.js +1750 -0
- package/src/cli/simple-commands/sparc/commands.js +575 -0
- package/src/cli/simple-commands/sparc/completion.js +1831 -0
- package/src/cli/simple-commands/sparc/coordinator.js +1045 -0
- package/src/cli/simple-commands/sparc/index.js +321 -0
- package/src/cli/simple-commands/sparc/phase-base.js +430 -0
- package/src/cli/simple-commands/sparc/pseudocode.js +984 -0
- package/src/cli/simple-commands/sparc/refinement.js +1856 -0
- package/src/cli/simple-commands/sparc/specification.js +736 -0
- package/src/cli/simple-commands/sparc-modes/architect.js +125 -0
- package/src/cli/simple-commands/sparc-modes/ask.js +126 -0
- package/src/cli/simple-commands/sparc-modes/code.js +148 -0
- package/src/cli/simple-commands/sparc-modes/debug.js +112 -0
- package/src/cli/simple-commands/sparc-modes/devops.js +137 -0
- package/src/cli/simple-commands/sparc-modes/docs-writer.js +38 -0
- package/src/cli/simple-commands/sparc-modes/generic.js +34 -0
- package/src/cli/simple-commands/sparc-modes/index.js +201 -0
- package/src/cli/simple-commands/sparc-modes/integration.js +55 -0
- package/src/cli/simple-commands/sparc-modes/mcp.js +38 -0
- package/src/cli/simple-commands/sparc-modes/monitoring.js +38 -0
- package/src/cli/simple-commands/sparc-modes/optimization.js +38 -0
- package/src/cli/simple-commands/sparc-modes/security-review.js +130 -0
- package/src/cli/simple-commands/sparc-modes/sparc-orchestrator.js +167 -0
- package/src/cli/simple-commands/sparc-modes/spec-pseudocode.js +38 -0
- package/src/cli/simple-commands/sparc-modes/supabase-admin.js +149 -0
- package/src/cli/simple-commands/sparc-modes/swarm.js +436 -0
- package/src/cli/simple-commands/sparc-modes/tdd.js +112 -0
- package/src/cli/simple-commands/sparc-modes/tutorial.js +277 -0
- package/src/cli/simple-commands/sparc.js +530 -0
- package/src/cli/simple-commands/start-ui.js +147 -0
- package/src/cli/simple-commands/start-wrapper.js +285 -0
- package/src/cli/simple-commands/start.js +2 -0
- package/src/cli/simple-commands/status.js +303 -0
- package/src/cli/simple-commands/stream-chain-clean.js +221 -0
- package/src/cli/simple-commands/stream-chain-fixed.js +89 -0
- package/src/cli/simple-commands/stream-chain-real.js +408 -0
- package/src/cli/simple-commands/stream-chain-working.js +323 -0
- package/src/cli/simple-commands/stream-chain.js +491 -0
- package/src/cli/simple-commands/stream-processor.js +340 -0
- package/src/cli/simple-commands/swarm-executor.js +253 -0
- package/src/cli/simple-commands/swarm-metrics-integration.js +371 -0
- package/src/cli/simple-commands/swarm-ui.js +741 -0
- package/src/cli/simple-commands/swarm-webui-integration.js +311 -0
- package/src/cli/simple-commands/swarm.js +2277 -0
- package/src/cli/simple-commands/task.js +228 -0
- package/src/cli/simple-commands/templates/mle-star-workflow.json +294 -0
- package/src/cli/simple-commands/timestamp-fix.js +104 -0
- package/src/cli/simple-commands/token-tracker.js +372 -0
- package/src/cli/simple-commands/tool-execution-framework.js +555 -0
- package/src/cli/simple-commands/train-and-stream.js +354 -0
- package/src/cli/simple-commands/training-pipeline.js +874 -0
- package/src/cli/simple-commands/training.js +288 -0
- package/src/cli/simple-commands/verification-hooks.js +336 -0
- package/src/cli/simple-commands/verification-integration.js +464 -0
- package/src/cli/simple-commands/verification-training-integration.js +646 -0
- package/src/cli/simple-commands/verification.js +551 -0
- package/src/cli/simple-commands/web-server.js +929 -0
- package/src/cli/simple-commands/webui-validator.js +136 -0
- package/src/language/README.md +503 -0
- package/src/language/claude-md-generator.js +618 -0
- package/src/language/cli.js +422 -0
- package/src/language/example.js +347 -0
- package/src/language/integration-system.js +619 -0
- package/src/language/language-detector.js +581 -0
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Stream Chain Command - Connect multiple Claude instances via stream-json
|
|
4
|
+
* Clean implementation focused on real Claude CLI execution
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { exec, execSync } from 'child_process';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Check if claude CLI is available
|
|
11
|
+
*/
|
|
12
|
+
function checkClaudeAvailable() {
|
|
13
|
+
try {
|
|
14
|
+
execSync('which claude', { stdio: 'ignore' });
|
|
15
|
+
return true;
|
|
16
|
+
} catch {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Mock implementation for fallback
|
|
23
|
+
*/
|
|
24
|
+
function mockResponse(prompt) {
|
|
25
|
+
return {
|
|
26
|
+
success: true,
|
|
27
|
+
duration: 500,
|
|
28
|
+
output: `โ
Mock response for: ${prompt.slice(0, 50)}...`,
|
|
29
|
+
stream: null,
|
|
30
|
+
error: null,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Execute a single Claude CLI command
|
|
36
|
+
*/
|
|
37
|
+
async function executeClaudeCommand(prompt, timeout = 20000, useStreamJson = false) {
|
|
38
|
+
return new Promise((resolve) => {
|
|
39
|
+
const args = ['-p'];
|
|
40
|
+
|
|
41
|
+
if (useStreamJson) {
|
|
42
|
+
args.push('--output-format', 'stream-json', '--verbose');
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
args.push(prompt);
|
|
46
|
+
const command = `claude ${args.join(' ')}`;
|
|
47
|
+
|
|
48
|
+
console.log(`๐ Executing: ${command}`);
|
|
49
|
+
|
|
50
|
+
const startTime = Date.now();
|
|
51
|
+
|
|
52
|
+
exec(
|
|
53
|
+
command,
|
|
54
|
+
{
|
|
55
|
+
timeout,
|
|
56
|
+
maxBuffer: 1024 * 1024 * 10, // 10MB buffer
|
|
57
|
+
},
|
|
58
|
+
(error, stdout, stderr) => {
|
|
59
|
+
const duration = Date.now() - startTime;
|
|
60
|
+
|
|
61
|
+
if (error && error.code === 'TIMEOUT') {
|
|
62
|
+
console.log('โ ๏ธ Claude CLI timed out, using mock response...');
|
|
63
|
+
resolve(mockResponse(prompt));
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (error) {
|
|
68
|
+
console.error('Claude CLI error:', error.message);
|
|
69
|
+
resolve(mockResponse(prompt));
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
resolve({
|
|
74
|
+
success: true,
|
|
75
|
+
duration,
|
|
76
|
+
output: stdout.trim(),
|
|
77
|
+
stream: useStreamJson ? stdout : null,
|
|
78
|
+
error: stderr ? stderr.trim() : null,
|
|
79
|
+
});
|
|
80
|
+
},
|
|
81
|
+
);
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Main stream chain command
|
|
87
|
+
*/
|
|
88
|
+
export async function streamChainCommand(args, flags) {
|
|
89
|
+
const subcommand = args[0] || 'help';
|
|
90
|
+
|
|
91
|
+
if (subcommand === 'help') {
|
|
92
|
+
console.log(`
|
|
93
|
+
๐ Stream Chain Command
|
|
94
|
+
|
|
95
|
+
USAGE:
|
|
96
|
+
stream-chain run "prompt1" "prompt2" [...] # Execute custom chain
|
|
97
|
+
stream-chain demo # Run demo chain
|
|
98
|
+
stream-chain test # Test Claude CLI
|
|
99
|
+
stream-chain help # Show this help
|
|
100
|
+
|
|
101
|
+
OPTIONS:
|
|
102
|
+
--timeout <seconds> Timeout per step (default: 20)
|
|
103
|
+
--mock Force mock mode
|
|
104
|
+
--verbose Show detailed output
|
|
105
|
+
|
|
106
|
+
EXAMPLES:
|
|
107
|
+
stream-chain run "Hello" "How are you?"
|
|
108
|
+
stream-chain demo --timeout 30
|
|
109
|
+
stream-chain test
|
|
110
|
+
|
|
111
|
+
For real execution, Claude CLI must be installed and configured.
|
|
112
|
+
`);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
if (subcommand === 'test') {
|
|
117
|
+
console.log('๐งช Testing Claude CLI...');
|
|
118
|
+
|
|
119
|
+
if (!checkClaudeAvailable()) {
|
|
120
|
+
console.log('โ Claude CLI not found');
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
const result = await executeClaudeCommand('Hello, test', 10000);
|
|
125
|
+
console.log('โ
Test result:', result.success ? 'PASSED' : 'FAILED');
|
|
126
|
+
if (result.output) {
|
|
127
|
+
console.log('๐ Output:', result.output.slice(0, 100) + '...');
|
|
128
|
+
}
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
if (subcommand === 'demo') {
|
|
133
|
+
console.log('๐ญ Running Stream Chain Demo');
|
|
134
|
+
console.log('โ'.repeat(50));
|
|
135
|
+
|
|
136
|
+
const prompts = [
|
|
137
|
+
'Analyze requirements for a todo app',
|
|
138
|
+
'Design the data model',
|
|
139
|
+
'Create implementation plan',
|
|
140
|
+
];
|
|
141
|
+
|
|
142
|
+
return runChain(prompts, flags);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
if (subcommand === 'run') {
|
|
146
|
+
const prompts = args.slice(1);
|
|
147
|
+
|
|
148
|
+
if (prompts.length < 2) {
|
|
149
|
+
console.error('โ Error: Need at least 2 prompts');
|
|
150
|
+
console.log('Usage: stream-chain run "prompt1" "prompt2" [...]');
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
return runChain(prompts, flags);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
console.error(`โ Unknown subcommand: ${subcommand}`);
|
|
158
|
+
console.log('Use "stream-chain help" for usage information');
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Execute a chain of prompts
|
|
163
|
+
*/
|
|
164
|
+
async function runChain(prompts, flags) {
|
|
165
|
+
const timeout = (flags.timeout || 20) * 1000;
|
|
166
|
+
const useMock = flags.mock || !checkClaudeAvailable();
|
|
167
|
+
|
|
168
|
+
if (useMock) {
|
|
169
|
+
console.log('โน๏ธ Using mock mode (Claude CLI not available or --mock flag used)');
|
|
170
|
+
} else {
|
|
171
|
+
console.log('โน๏ธ Using real Claude CLI execution');
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
console.log(`๐ Chain length: ${prompts.length} steps\n`);
|
|
175
|
+
|
|
176
|
+
const results = [];
|
|
177
|
+
|
|
178
|
+
for (let i = 0; i < prompts.length; i++) {
|
|
179
|
+
const prompt = prompts[i];
|
|
180
|
+
console.log(`๐ Step ${i + 1}/${prompts.length}: ${prompt.slice(0, 50)}...`);
|
|
181
|
+
|
|
182
|
+
let result;
|
|
183
|
+
if (useMock) {
|
|
184
|
+
result = mockResponse(prompt);
|
|
185
|
+
} else {
|
|
186
|
+
result = await executeClaudeCommand(prompt, timeout, false);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
results.push({
|
|
190
|
+
step: i + 1,
|
|
191
|
+
prompt: prompt.slice(0, 50),
|
|
192
|
+
success: result.success,
|
|
193
|
+
duration: result.duration,
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
if (!result.success) {
|
|
197
|
+
console.error(`โ Step ${i + 1} failed`);
|
|
198
|
+
break;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
console.log(`โ
Step ${i + 1} completed (${result.duration}ms)`);
|
|
202
|
+
if (flags.verbose && result.output) {
|
|
203
|
+
console.log(` Output: ${result.output.slice(0, 200)}...`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// Summary
|
|
208
|
+
console.log('\n' + 'โ'.repeat(50));
|
|
209
|
+
console.log('๐ Chain Summary');
|
|
210
|
+
console.log('โ'.repeat(50));
|
|
211
|
+
|
|
212
|
+
for (const result of results) {
|
|
213
|
+
const status = result.success ? 'โ
' : 'โ';
|
|
214
|
+
console.log(`${status} Step ${result.step}: ${result.prompt}... (${result.duration}ms)`);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
const totalTime = results.reduce((sum, r) => sum + r.duration, 0);
|
|
218
|
+
console.log(`\nโฑ๏ธ Total execution time: ${totalTime}ms`);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
export default streamChainCommand;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Execute a single step in the stream chain
|
|
3
|
+
*/
|
|
4
|
+
async function executeStreamStep(prompt, inputStream, isLast, flags = {}) {
|
|
5
|
+
return new Promise((resolve) => {
|
|
6
|
+
const startTime = Date.now();
|
|
7
|
+
let resolved = false; // Prevent double resolution
|
|
8
|
+
|
|
9
|
+
const safeResolve = (result) => {
|
|
10
|
+
if (!resolved) {
|
|
11
|
+
resolved = true;
|
|
12
|
+
resolve(result);
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
// Check if we should use mock mode
|
|
17
|
+
const useMock = flags.mock || !checkClaudeAvailable();
|
|
18
|
+
|
|
19
|
+
if (useMock) {
|
|
20
|
+
// Mock implementation when claude CLI isn't available or mock flag is set
|
|
21
|
+
return mockStreamStep(prompt, inputStream, isLast, flags, safeResolve, startTime);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Set a reasonable timeout for real Claude CLI (15 seconds - more realistic)
|
|
25
|
+
const stepTimeout = flags.timeout ? parseInt(flags.timeout) * 1000 : 15000;
|
|
26
|
+
|
|
27
|
+
// Build command arguments
|
|
28
|
+
const args = ['-p'];
|
|
29
|
+
|
|
30
|
+
// For now, avoid stream-json input chaining due to format complexity
|
|
31
|
+
// Each step runs independently for better reliability
|
|
32
|
+
if (!isLast || flags.json) {
|
|
33
|
+
args.push('--output-format', 'stream-json');
|
|
34
|
+
// stream-json output requires --verbose
|
|
35
|
+
args.push('--verbose');
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Add the prompt
|
|
39
|
+
args.push(prompt);
|
|
40
|
+
|
|
41
|
+
if (flags.verbose) {
|
|
42
|
+
console.log(` Debug: Executing: claude ${args.join(' ')}`);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Use exec with built-in timeout for better reliability
|
|
46
|
+
const command = `claude ${args.join(' ')}`;
|
|
47
|
+
|
|
48
|
+
exec(
|
|
49
|
+
command,
|
|
50
|
+
{
|
|
51
|
+
timeout: stepTimeout,
|
|
52
|
+
maxBuffer: 1024 * 1024 * 10, // 10MB buffer
|
|
53
|
+
},
|
|
54
|
+
(error, stdout, stderr) => {
|
|
55
|
+
if (resolved) {
|
|
56
|
+
return; // Already resolved
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const duration = Date.now() - startTime;
|
|
60
|
+
|
|
61
|
+
if (error && error.code === 'TIMEOUT') {
|
|
62
|
+
// Handle timeout via exec
|
|
63
|
+
console.log('โ ๏ธ Claude CLI timed out, falling back to mock mode...');
|
|
64
|
+
mockStreamStep(
|
|
65
|
+
prompt,
|
|
66
|
+
inputStream,
|
|
67
|
+
isLast,
|
|
68
|
+
{ ...flags, mock: true },
|
|
69
|
+
safeResolve,
|
|
70
|
+
Date.now(),
|
|
71
|
+
);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (flags.verbose && stderr) {
|
|
76
|
+
console.error('Error output:', stderr);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
safeResolve({
|
|
80
|
+
success: !error || error.code === 0,
|
|
81
|
+
duration,
|
|
82
|
+
output: stdout || '',
|
|
83
|
+
stream: !isLast && stdout ? stdout : null,
|
|
84
|
+
error: stderr || (error ? error.message : null),
|
|
85
|
+
});
|
|
86
|
+
},
|
|
87
|
+
);
|
|
88
|
+
});
|
|
89
|
+
}
|
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Stream Chain Command - Real Claude CLI stream-json chaining
|
|
4
|
+
* Based on docs/stream-chaining.md specification
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { spawn, execSync } from 'child_process';
|
|
8
|
+
import { Readable, PassThrough } from 'stream';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* 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
|
+
|
|
48
|
+
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;
|
|
84
|
+
}
|
|
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
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
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');
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if (!isLast) {
|
|
124
|
+
args.push('--output-format', 'stream-json');
|
|
125
|
+
if (flags.verbose) {
|
|
126
|
+
args.push('--verbose');
|
|
127
|
+
}
|
|
128
|
+
}
|
|
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();
|
|
159
|
+
}
|
|
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)}`);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
resolve({
|
|
194
|
+
success: false,
|
|
195
|
+
duration,
|
|
196
|
+
output: null,
|
|
197
|
+
error: stderr || `Process exited with code ${code}`,
|
|
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
|
+
});
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* 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
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* Show help information
|
|
277
|
+
*/
|
|
278
|
+
function showHelp() {
|
|
279
|
+
console.log(`
|
|
280
|
+
๐ Real Stream Chain Command - Claude CLI Stream-JSON Chaining
|
|
281
|
+
|
|
282
|
+
DESCRIPTION
|
|
283
|
+
Connect multiple Claude instances using stream-json format for
|
|
284
|
+
real multi-agent workflows with full context preservation.
|
|
285
|
+
|
|
286
|
+
USAGE
|
|
287
|
+
stream-chain <subcommand> [options]
|
|
288
|
+
|
|
289
|
+
SUBCOMMANDS
|
|
290
|
+
run <prompt1> <prompt2> [...] Execute custom chain (min 2 prompts)
|
|
291
|
+
demo Run 3-step demonstration
|
|
292
|
+
pipeline <type> Execute predefined pipeline
|
|
293
|
+
test Test stream connection
|
|
294
|
+
help Show this help
|
|
295
|
+
|
|
296
|
+
PIPELINE TYPES
|
|
297
|
+
analysis Code analysis pipeline
|
|
298
|
+
refactor Refactoring workflow
|
|
299
|
+
test Test generation
|
|
300
|
+
optimize Performance optimization
|
|
301
|
+
|
|
302
|
+
OPTIONS
|
|
303
|
+
--verbose Show detailed output
|
|
304
|
+
--timeout <seconds> Timeout per step (default: 30)
|
|
305
|
+
|
|
306
|
+
EXAMPLES
|
|
307
|
+
stream-chain run "Analyze code" "Suggest improvements" "Apply changes"
|
|
308
|
+
stream-chain demo --verbose
|
|
309
|
+
stream-chain pipeline analysis --timeout 60
|
|
310
|
+
stream-chain test
|
|
311
|
+
|
|
312
|
+
STREAM-JSON FORMAT
|
|
313
|
+
Each step communicates via newline-delimited JSON:
|
|
314
|
+
{"type":"init","session_id":"abc123"}
|
|
315
|
+
{"type":"message","role":"assistant","content":[...]}
|
|
316
|
+
{"type":"tool_use","name":"Bash","input":{...}}
|
|
317
|
+
{"type":"result","status":"success"}
|
|
318
|
+
|
|
319
|
+
For more: docs/stream-chaining.md
|
|
320
|
+
`);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* 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);
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
/**
|
|
341
|
+
* 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);
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
/**
|
|
354
|
+
* 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 });
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/**
|
|
369
|
+
* 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);
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
export default streamChainCommand;
|