claude-flow-novice 2.6.0 → 2.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/cfn-dev-team/coordinators/README.md +42 -0
- package/.claude/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +440 -0
- package/.claude/agents/{product-owner-team → cfn-dev-team/coordinators}/cto-agent.md +154 -187
- package/.claude/agents/cfn-dev-team/coordinators/multi-sprint-coordinator.md +50 -0
- package/.claude/agents/{product-owner-team → cfn-dev-team/coordinators}/product-owner-agent.md +7 -40
- package/.claude/agents/{cfn-loop → cfn-dev-team/coordinators}/product-owner.md +73 -18
- package/.claude/agents/cfn-dev-team/developers/README.md +69 -0
- package/.claude/agents/cfn-dev-team/developers/backend-dev.md +77 -0
- package/.claude/agents/{core-agents → cfn-dev-team/developers}/coder.md +132 -27
- package/.claude/agents/cfn-dev-team/developers/react-frontend-engineer.md +121 -0
- package/.claude/agents/{frontend → cfn-dev-team/developers}/state-architect.md +1 -0
- package/.claude/agents/{frontend → cfn-dev-team/developers}/ui-designer.md +1 -0
- package/.claude/agents/cfn-dev-team/reviewers/README.md +58 -0
- package/.claude/agents/{analysis → cfn-dev-team/reviewers}/code-quality-validator.md +9 -18
- package/.claude/agents/{core-agents → cfn-dev-team/reviewers}/reviewer.md +62 -23
- package/.claude/agents/cfn-dev-team/testers/README.md +94 -0
- package/.claude/agents/{testing → cfn-dev-team/testers}/e2e/playwright-agent.md +2 -21
- package/.claude/agents/{testing → cfn-dev-team/testers}/interaction-tester.md +2 -21
- package/.claude/agents/{testing → cfn-dev-team/testers}/playwright-tester.md +1 -1
- package/.claude/agents/cfn-dev-team/testers/tester.md +139 -0
- package/.claude/agents/cfn-dev-team/testers/unit/tdd-london-swarm.md +49 -0
- package/.claude/agents/cfn-dev-team/testers/validation/production-validator.md +33 -0
- package/.claude/cfn-data/cfn-loop.db +0 -0
- package/.claude/cfn-data/cfn_loop_logs.db +0 -0
- package/.claude/commands/{CFN_COORDINATOR_PARAMETERS.md → cfn/CFN_COORDINATOR_PARAMETERS.md} +22 -22
- package/.claude/commands/{cfn-loop-epic.md → cfn/cfn-loop-epic.md} +6 -6
- package/.claude/commands/{cfn-loop-single.md → cfn/cfn-loop-single.md} +9 -9
- package/.claude/commands/{cfn-loop-sprints.md → cfn/cfn-loop-sprints.md} +1 -1
- package/.claude/commands/{cfn-loop.md → cfn/cfn-loop.md} +9 -9
- package/.claude/commands/cfn/cfn-mode.md +20 -0
- package/.claude/commands/{cfn-optimize-agents.md → cfn/cfn-optimize-agents.md} +1 -1
- package/.claude/commands/{context-curate.md → cfn/context-curate.md} +2 -2
- package/.claude/commands/{context-inject.md → cfn/context-inject.md} +3 -3
- package/.claude/commands/{context-reflect.md → cfn/context-reflect.md} +1 -1
- package/.claude/commands/{context-stats.md → cfn/context-stats.md} +1 -1
- package/.claude/commands/{list-agents-rebuild.md → cfn/list-agents-rebuild.md} +12 -12
- package/.claude/commands/cfn/write-plan.md +104 -0
- package/.claude/hooks/cfn-BACKUP_USAGE.md +243 -0
- package/.claude/hooks/cfn-post-edit-cfn-retrospective.sh +79 -0
- package/.claude/hooks/cfn-post-edit.sh +21 -0
- package/.claude/hooks/cfn-pre-edit-backup.sh +71 -0
- package/.claude/hooks/cfn-restore-from-backup.sh +37 -0
- package/.claude/skills/cfn-loop-orchestration/README.md +41 -0
- package/.claude/skills/cfn-redis-coordination/README.md +65 -0
- package/.claude/skills/cfn-webapp-testing/README.md +142 -0
- package/CFN-CLAUDE.md +776 -0
- package/README.md +598 -251
- package/dist/agents/agent-loader.js +146 -165
- package/dist/agents/agent-loader.js.map +1 -1
- package/dist/cli/agent-command.js +2 -0
- package/dist/cli/agent-command.js.map +1 -1
- package/dist/cli/agent-definition-parser.js +7 -0
- package/dist/cli/agent-definition-parser.js.map +1 -1
- package/dist/cli/agent-executor.js +145 -11
- package/dist/cli/agent-executor.js.map +1 -1
- package/dist/cli/agent-prompt-builder.js +81 -1
- package/dist/cli/agent-prompt-builder.js.map +1 -1
- package/dist/cli/agent-spawn.js +10 -1
- package/dist/cli/agent-spawn.js.map +1 -1
- package/dist/cli/anthropic-client.js +192 -13
- package/dist/cli/anthropic-client.js.map +1 -1
- package/dist/cli/cfn-context.js +150 -0
- package/dist/cli/cfn-context.js.map +1 -1
- package/dist/cli/cfn-fork.js +159 -0
- package/dist/cli/cfn-fork.js.map +1 -0
- package/dist/cli/cli-agent-context.js +8 -3
- package/dist/cli/cli-agent-context.js.map +1 -1
- package/dist/cli/conversation-fork.js +201 -0
- package/dist/cli/conversation-fork.js.map +1 -0
- package/dist/cli/index.js +4 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init-command.js +20 -0
- package/dist/cli/init-command.js.map +1 -0
- package/dist/cli/tool-definitions.js +263 -0
- package/dist/cli/tool-definitions.js.map +1 -0
- package/dist/cli/tool-executor.js +247 -0
- package/dist/cli/tool-executor.js.map +1 -0
- package/dist/hello.js +8 -0
- package/dist/hello.js.map +1 -0
- package/package.json +26 -12
- package/scripts/README.md +68 -0
- package/scripts/cfn-intervention-example.sh +21 -0
- package/scripts/init-project.js +148 -0
- package/scripts/migrate-test-infrastructure.sh +40 -0
- package/scripts/restructure-cfn-namespace.sh +161 -0
- package/scripts/validate-test-migration.sh +49 -0
- package/scripts/verify-no-secrets.sh +55 -0
- package/.claude/SLASH-COMMANDS-READY.md +0 -53
- package/.claude/WORKING-SETUP.md +0 -67
- package/.claude/ace-system-overview.md +0 -524
- package/.claude/agent-principles/agent-template.md +0 -96
- package/.claude/agents/CLAUDE.md +0 -995
- package/.claude/agents/README-VALIDATION.md +0 -243
- package/.claude/agents/agent-principles/README.md +0 -226
- package/.claude/agents/agent-principles/agent-type-guidelines.md +0 -465
- package/.claude/agents/agent-principles/format-selection.md +0 -224
- package/.claude/agents/agent-principles/phase4-template-optimization.md +0 -494
- package/.claude/agents/agent-principles/prompt-engineering.md +0 -501
- package/.claude/agents/agent-principles/quality-metrics.md +0 -375
- package/.claude/agents/analysis/code-analyzer.md +0 -192
- package/.claude/agents/analysis/code-review/analyze-code-quality.md +0 -133
- package/.claude/agents/analysis/perf-analyzer.md +0 -230
- package/.claude/agents/architecture/system-architect.md +0 -161
- package/.claude/agents/architecture/system-architect.md.backup +0 -603
- package/.claude/agents/code-booster.md +0 -131
- package/.claude/agents/consensus/consensus-builder.md +0 -159
- package/.claude/agents/consensus/crdt-synchronizer.md +0 -192
- package/.claude/agents/consensus/performance-benchmarker.md +0 -101
- package/.claude/agents/consensus/quorum-manager.md +0 -168
- package/.claude/agents/consensus/raft-manager.md +0 -106
- package/.claude/agents/consensus/security-manager.md +0 -107
- package/.claude/agents/context/context-curator.md +0 -84
- package/.claude/agents/context/context-reflector.md +0 -81
- package/.claude/agents/context-curator.md +0 -167
- package/.claude/agents/context-reflector.md +0 -65
- package/.claude/agents/core-agents/analyst.md +0 -170
- package/.claude/agents/core-agents/architect.md +0 -200
- package/.claude/agents/core-agents/base-template-generator.md +0 -188
- package/.claude/agents/core-agents/cfn-loop-coordinator.md +0 -134
- package/.claude/agents/core-agents/code-quality-validator.md +0 -149
- package/.claude/agents/core-agents/context-curator.md +0 -452
- package/.claude/agents/core-agents/context-reflector.md +0 -273
- package/.claude/agents/core-agents/coordinator.md +0 -182
- package/.claude/agents/core-agents/cost-savings-cfn-loop-coordinator.md +0 -235
- package/.claude/agents/core-agents/cost-savings-coordinator.md +0 -167
- package/.claude/agents/core-agents/performance-benchmarker.md +0 -148
- package/.claude/agents/core-agents/planner.md +0 -174
- package/.claude/agents/core-agents/security-manager.md +0 -111
- package/.claude/agents/core-agents/tester.md +0 -170
- package/.claude/agents/custom/agent-builder.md +0 -637
- package/.claude/agents/development/backend/dev-backend-api.md +0 -139
- package/.claude/agents/development/backend-dev.md +0 -165
- package/.claude/agents/development/npm-package-specialist.md +0 -347
- package/.claude/agents/devops/devops-engineer.md +0 -148
- package/.claude/agents/documentation/api-docs/docs-api-openapi.md +0 -98
- package/.claude/agents/documentation/api-docs.md +0 -103
- package/.claude/agents/frontend/README.md +0 -640
- package/.claude/agents/frontend/interaction-tester.md +0 -139
- package/.claude/agents/frontend/react-frontend-engineer.md +0 -9
- package/.claude/agents/github/github-commit-agent.md +0 -118
- package/.claude/agents/goal/goal-planner.md +0 -183
- package/.claude/agents/personas/accessibility-advocate-persona.md +0 -107
- package/.claude/agents/planning-team/api-designer-persona.md +0 -147
- package/.claude/agents/planning-team/security-architect-persona.md +0 -190
- package/.claude/agents/planning-team/system-architect-persona.md +0 -190
- package/.claude/agents/product-owner-team/accessibility-advocate-persona.md +0 -161
- package/.claude/agents/product-owner-team/power-user-persona.md +0 -182
- package/.claude/agents/security/security-specialist-existing.md +0 -154
- package/.claude/agents/security/security-specialist.md +0 -185
- package/.claude/agents/sparc/architecture.md +0 -149
- package/.claude/agents/sparc/pseudocode.md +0 -159
- package/.claude/agents/sparc/refinement.md +0 -106
- package/.claude/agents/sparc/specification.md +0 -157
- package/.claude/agents/specialized/cli-agent-optimizer.md +0 -122
- package/.claude/agents/specialized/code-booster.md +0 -143
- package/.claude/agents/specialized/devops-engineer.md +0 -150
- package/.claude/agents/specialized/mobile/mobile-dev.md +0 -210
- package/.claude/agents/specialized/mobile/spec-mobile-react-native.md +0 -191
- package/.claude/agents/specialized/rust-developer.md +0 -166
- package/.claude/agents/specialized/rust-enterprise-developer.md +0 -144
- package/.claude/agents/specialized/rust-mvp-developer.md +0 -142
- package/.claude/agents/testing/production-validator.md +0 -179
- package/.claude/agents/testing/tdd-london-swarm.md +0 -209
- package/.claude/agents/testing/unit/tdd-london-swarm.md +0 -43
- package/.claude/agents/testing/validation/production-validator.md +0 -43
- package/.claude/agents/validate-agent.js +0 -841
- package/.claude/agents-ignore/cfn-coordinator-enterprise.md +0 -1303
- package/.claude/agents-ignore/cfn-coordinator-mvp.md +0 -942
- package/.claude/agents-ignore/cfn-coordinator-standard.md +0 -1062
- package/.claude/agents-ignore/deprecated-coordinators/adaptive-coordinator-enhanced.md +0 -145
- package/.claude/agents-ignore/deprecated-coordinators/adaptive-coordinator.md +0 -161
- package/.claude/agents-ignore/deprecated-coordinators/blocking-coordinator-example.md +0 -732
- package/.claude/agents-ignore/deprecated-coordinators/byzantine-coordinator.md +0 -94
- package/.claude/agents-ignore/deprecated-coordinators/cfn-coordinator-enterprise.md +0 -323
- package/.claude/agents-ignore/deprecated-coordinators/cfn-coordinator-mvp.md +0 -157
- package/.claude/agents-ignore/deprecated-coordinators/cfn-coordinator-standard.md +0 -229
- package/.claude/agents-ignore/deprecated-coordinators/cfn-coordinator-unified.md +0 -149
- package/.claude/agents-ignore/deprecated-coordinators/coordinator-hybrid.md +0 -231
- package/.claude/agents-ignore/deprecated-coordinators/gossip-coordinator.md +0 -165
- package/.claude/agents-ignore/deprecated-coordinators/hierarchical-coordinator.md +0 -91
- package/.claude/agents-ignore/deprecated-coordinators/mesh-coordinator.md +0 -131
- package/.claude/agents-ignore/deprecated-coordinators/task-coordinator.md +0 -105
- package/.claude/agents-ignore/deprecated-coordinators/test-coordinator.md +0 -141
- package/.claude/api-configs/config-current-zai-config.env +0 -62
- package/.claude/api-configs/config-test-zai-config.env +0 -62
- package/.claude/api-configs/env-backups/before-anthropic-20251020-025404.env +0 -62
- package/.claude/api-configs/env-backups/before-restore-20251020-025431.env +0 -62
- package/.claude/architecture/mesh-get-polling-design.md +0 -87
- package/.claude/architecture/mesh-get-polling-implementation.md +0 -89
- package/.claude/architecture/typescript-microservices.md +0 -50
- package/.claude/artifacts/reflection-merge-logs/cli-agent-spawning-v2.5.2-merge-report.md +0 -61
- package/.claude/cfn-loop-rules.md +0 -73
- package/.claude/cfn-mode-patterns.md +0 -571
- package/.claude/claude-md-backup-pre-skills.md +0 -15
- package/.claude/commands/agents/README.md +0 -10
- package/.claude/commands/agents/agent-capabilities.md +0 -21
- package/.claude/commands/agents/agent-coordination.md +0 -28
- package/.claude/commands/agents/agent-spawning.md +0 -28
- package/.claude/commands/agents/agent-types.md +0 -26
- package/.claude/commands/analysis/COMMAND_COMPLIANCE_REPORT.md +0 -54
- package/.claude/commands/analysis/README.md +0 -9
- package/.claude/commands/analysis/bottleneck-detect.md +0 -162
- package/.claude/commands/analysis/performance-bottlenecks.md +0 -59
- package/.claude/commands/analysis/performance-report.md +0 -25
- package/.claude/commands/analysis/token-efficiency.md +0 -45
- package/.claude/commands/analysis/token-usage.md +0 -25
- package/.claude/commands/automation/README.md +0 -9
- package/.claude/commands/automation/auto-agent.md +0 -122
- package/.claude/commands/automation/self-healing.md +0 -106
- package/.claude/commands/automation/session-memory.md +0 -90
- package/.claude/commands/automation/smart-agents.md +0 -73
- package/.claude/commands/automation/smart-spawn.md +0 -25
- package/.claude/commands/automation/workflow-select.md +0 -25
- package/.claude/commands/claude-md.js +0 -237
- package/.claude/commands/claude-soul.js +0 -28
- package/.claude/commands/cli-integration.js +0 -216
- package/.claude/commands/coordination/README.md +0 -9
- package/.claude/commands/coordination/agent-spawn.md +0 -25
- package/.claude/commands/coordination/coordination-system.md +0 -88
- package/.claude/commands/coordination/init.md +0 -44
- package/.claude/commands/coordination/orchestrate.md +0 -43
- package/.claude/commands/coordination/spawn.md +0 -45
- package/.claude/commands/coordination/swarm-init.md +0 -85
- package/.claude/commands/coordination/task-orchestrate.md +0 -25
- package/.claude/commands/github/README.md +0 -11
- package/.claude/commands/github/code-review-swarm.md +0 -514
- package/.claude/commands/github/code-review.md +0 -25
- package/.claude/commands/github/github-modes.md +0 -147
- package/.claude/commands/github/github-swarm.md +0 -121
- package/.claude/commands/github/issue-tracker.md +0 -292
- package/.claude/commands/github/issue-triage.md +0 -25
- package/.claude/commands/github/multi-repo-swarm.md +0 -519
- package/.claude/commands/github/pr-enhance.md +0 -26
- package/.claude/commands/github/pr-manager.md +0 -170
- package/.claude/commands/github/project-board-sync.md +0 -471
- package/.claude/commands/github/release-manager.md +0 -338
- package/.claude/commands/github/release-swarm.md +0 -544
- package/.claude/commands/github/repo-analyze.md +0 -25
- package/.claude/commands/github/repo-architect.md +0 -367
- package/.claude/commands/github/swarm-issue.md +0 -482
- package/.claude/commands/github/swarm-pr.md +0 -285
- package/.claude/commands/github/sync-coordinator.md +0 -301
- package/.claude/commands/github/workflow-automation.md +0 -442
- package/.claude/commands/github.js +0 -638
- package/.claude/commands/hive-mind/README.md +0 -17
- package/.claude/commands/hive-mind/hive-mind-consensus.md +0 -8
- package/.claude/commands/hive-mind/hive-mind-init.md +0 -18
- package/.claude/commands/hive-mind/hive-mind-memory.md +0 -8
- package/.claude/commands/hive-mind/hive-mind-metrics.md +0 -8
- package/.claude/commands/hive-mind/hive-mind-resume.md +0 -8
- package/.claude/commands/hive-mind/hive-mind-sessions.md +0 -8
- package/.claude/commands/hive-mind/hive-mind-spawn.md +0 -21
- package/.claude/commands/hive-mind/hive-mind-status.md +0 -8
- package/.claude/commands/hive-mind/hive-mind-stop.md +0 -8
- package/.claude/commands/hive-mind/hive-mind-wizard.md +0 -8
- package/.claude/commands/hive-mind/hive-mind.md +0 -27
- package/.claude/commands/hooks/README.md +0 -11
- package/.claude/commands/hooks/overview.md +0 -58
- package/.claude/commands/hooks/post-edit.md +0 -117
- package/.claude/commands/hooks/post-task.md +0 -112
- package/.claude/commands/hooks/pre-edit.md +0 -113
- package/.claude/commands/hooks/pre-task.md +0 -111
- package/.claude/commands/hooks/session-end.md +0 -118
- package/.claude/commands/hooks/session-start.md +0 -9
- package/.claude/commands/hooks/setup.md +0 -103
- package/.claude/commands/hooks.js +0 -651
- package/.claude/commands/index.js +0 -119
- package/.claude/commands/memory/README.md +0 -9
- package/.claude/commands/memory/memory-bank.md +0 -58
- package/.claude/commands/memory/memory-persist.md +0 -25
- package/.claude/commands/memory/memory-search.md +0 -25
- package/.claude/commands/memory/memory-usage.md +0 -25
- package/.claude/commands/memory/neural.md +0 -47
- package/.claude/commands/memory/usage.md +0 -46
- package/.claude/commands/monitoring/README.md +0 -9
- package/.claude/commands/monitoring/agent-metrics.md +0 -25
- package/.claude/commands/monitoring/agents.md +0 -44
- package/.claude/commands/monitoring/real-time-view.md +0 -25
- package/.claude/commands/monitoring/status.md +0 -46
- package/.claude/commands/monitoring/swarm-monitor.md +0 -25
- package/.claude/commands/neural.js +0 -572
- package/.claude/commands/optimization/README.md +0 -9
- package/.claude/commands/optimization/auto-topology.md +0 -62
- package/.claude/commands/optimization/cache-manage.md +0 -25
- package/.claude/commands/optimization/parallel-execute.md +0 -25
- package/.claude/commands/optimization/parallel-execution.md +0 -50
- package/.claude/commands/optimization/topology-optimize.md +0 -25
- package/.claude/commands/pair/README.md +0 -261
- package/.claude/commands/pair/commands.md +0 -546
- package/.claude/commands/pair/config.md +0 -510
- package/.claude/commands/pair/examples.md +0 -512
- package/.claude/commands/pair/modes.md +0 -348
- package/.claude/commands/pair/session.md +0 -407
- package/.claude/commands/pair/start.md +0 -209
- package/.claude/commands/parse-epic.js +0 -180
- package/.claude/commands/performance.js +0 -582
- package/.claude/commands/register-all-commands.js +0 -320
- package/.claude/commands/register-claude-md.js +0 -82
- package/.claude/commands/register-claude-soul.js +0 -80
- package/.claude/commands/sparc/analyzer.md +0 -52
- package/.claude/commands/sparc/architect.md +0 -53
- package/.claude/commands/sparc/batch-executor.md +0 -54
- package/.claude/commands/sparc/coder.md +0 -54
- package/.claude/commands/sparc/debugger.md +0 -54
- package/.claude/commands/sparc/designer.md +0 -53
- package/.claude/commands/sparc/documenter.md +0 -54
- package/.claude/commands/sparc/innovator.md +0 -54
- package/.claude/commands/sparc/memory-manager.md +0 -54
- package/.claude/commands/sparc/optimizer.md +0 -54
- package/.claude/commands/sparc/orchestrator.md +0 -132
- package/.claude/commands/sparc/researcher.md +0 -54
- package/.claude/commands/sparc/reviewer.md +0 -54
- package/.claude/commands/sparc/sparc-modes.md +0 -174
- package/.claude/commands/sparc/swarm-coordinator.md +0 -54
- package/.claude/commands/sparc/tdd.md +0 -54
- package/.claude/commands/sparc/tester.md +0 -54
- package/.claude/commands/sparc/workflow-manager.md +0 -54
- package/.claude/commands/sparc.js +0 -110
- package/.claude/commands/stream-chain/pipeline.md +0 -121
- package/.claude/commands/stream-chain/run.md +0 -70
- package/.claude/commands/swarm/README.md +0 -15
- package/.claude/commands/swarm/analysis.md +0 -95
- package/.claude/commands/swarm/development.md +0 -96
- package/.claude/commands/swarm/examples.md +0 -168
- package/.claude/commands/swarm/maintenance.md +0 -102
- package/.claude/commands/swarm/optimization.md +0 -117
- package/.claude/commands/swarm/research.md +0 -136
- package/.claude/commands/swarm/swarm-analysis.md +0 -8
- package/.claude/commands/swarm/swarm-background.md +0 -8
- package/.claude/commands/swarm/swarm-init.md +0 -19
- package/.claude/commands/swarm/swarm-modes.md +0 -8
- package/.claude/commands/swarm/swarm-monitor.md +0 -8
- package/.claude/commands/swarm/swarm-spawn.md +0 -19
- package/.claude/commands/swarm/swarm-status.md +0 -8
- package/.claude/commands/swarm/swarm-strategies.md +0 -8
- package/.claude/commands/swarm/swarm.md +0 -27
- package/.claude/commands/swarm/testing.md +0 -131
- package/.claude/commands/swarm.js +0 -423
- package/.claude/commands/testing/playwright-e2e.md +0 -288
- package/.claude/commands/training/README.md +0 -9
- package/.claude/commands/training/model-update.md +0 -25
- package/.claude/commands/training/neural-patterns.md +0 -74
- package/.claude/commands/training/neural-train.md +0 -25
- package/.claude/commands/training/pattern-learn.md +0 -25
- package/.claude/commands/training/specialization.md +0 -63
- package/.claude/commands/truth/start.md +0 -143
- package/.claude/commands/validate-commands.js +0 -223
- package/.claude/commands/verify/check.md +0 -50
- package/.claude/commands/verify/start.md +0 -128
- package/.claude/commands/workflow.js +0 -606
- package/.claude/commands/workflows/README.md +0 -9
- package/.claude/commands/workflows/development.md +0 -78
- package/.claude/commands/workflows/research.md +0 -63
- package/.claude/commands/workflows/workflow-create.md +0 -25
- package/.claude/commands/workflows/workflow-execute.md +0 -25
- package/.claude/commands/workflows/workflow-export.md +0 -25
- package/.claude/coordinator-feedback-pattern.md +0 -326
- package/.claude/coordinator-patterns.md +0 -126
- package/.claude/core/agent-manager.js +0 -80
- package/.claude/core/agent-manager.js.map +0 -1
- package/.claude/core/config.js +0 -1221
- package/.claude/core/config.js.map +0 -1
- package/.claude/core/event-bus.js +0 -136
- package/.claude/core/event-bus.js.map +0 -1
- package/.claude/core/index.js +0 -6
- package/.claude/core/index.js.map +0 -1
- package/.claude/core/json-persistence.js +0 -112
- package/.claude/core/json-persistence.js.map +0 -1
- package/.claude/core/logger.js +0 -245
- package/.claude/core/logger.js.map +0 -1
- package/.claude/core/orchestrator-fixed.js +0 -236
- package/.claude/core/orchestrator-fixed.js.map +0 -1
- package/.claude/core/orchestrator.js +0 -1136
- package/.claude/core/orchestrator.js.map +0 -1
- package/.claude/core/persistence.js +0 -185
- package/.claude/core/persistence.js.map +0 -1
- package/.claude/core/project-manager.js +0 -80
- package/.claude/core/project-manager.js.map +0 -1
- package/.claude/core/slash-command.js +0 -24
- package/.claude/core/version.js +0 -35
- package/.claude/core/version.js.map +0 -1
- package/.claude/helpers/checkpoint-manager.sh +0 -251
- package/.claude/helpers/github-safe.js +0 -106
- package/.claude/helpers/github-setup.sh +0 -28
- package/.claude/helpers/quick-start.sh +0 -19
- package/.claude/helpers/setup-mcp.sh +0 -18
- package/.claude/helpers/standard-checkpoint-hooks.sh +0 -179
- package/.claude/hooks.json +0 -21
- package/.claude/logs/sprint1-hybrid-routing-v2-decision.json +0 -18
- package/.claude/redis-agent-dependencies.md +0 -494
- package/.claude/root-claude-distribute/CLAUDE.md +0 -428
- package/.claude/settings.json +0 -129
- package/.claude/settings.local.json +0 -33
- package/.claude/skills/CFN-LOOP-VALIDATION.md +0 -202
- package/.claude/skills/REDIS-COORDINATION.md +0 -187
- package/.claude/skills/SKILL.md +0 -229
- package/.claude/skills/ace-system/SKILL.md +0 -364
- package/.claude/skills/ace-system/add-bullet.sh +0 -145
- package/.claude/skills/ace-system/invoke-context-curate.sh +0 -192
- package/.claude/skills/ace-system/invoke-context-inject.sh +0 -166
- package/.claude/skills/ace-system/invoke-context-query.sh +0 -127
- package/.claude/skills/ace-system/invoke-context-reflect.sh +0 -98
- package/.claude/skills/ace-system/invoke-context-stats.sh +0 -188
- package/.claude/skills/ace-system/log-merge.sh +0 -67
- package/.claude/skills/ace-system/query-reflections.sh +0 -35
- package/.claude/skills/ace-system/store-reflection.sh +0 -149
- package/.claude/skills/ace-system/test-ace-skill.sh +0 -312
- package/.claude/skills/ace-system/update-reflection.sh +0 -41
- package/.claude/skills/agent-execution/execute-agent.sh +0 -126
- package/.claude/skills/agent-spawning/SKILL.md +0 -135
- package/.claude/skills/agent-spawning/agent-selection-guide.md +0 -814
- package/.claude/skills/agent-spawning/check-dependencies.sh +0 -30
- package/.claude/skills/agent-spawning/spawn-agent.sh +0 -263
- package/.claude/skills/agent-spawning/spawn-templates.sh +0 -613
- package/.claude/skills/analytics/description-refinement-guide.md +0 -164
- package/.claude/skills/analytics/log-skill-invocation.js +0 -122
- package/.claude/skills/analytics/run-production-criteria-tests.sh +0 -126
- package/.claude/skills/analytics/skill-analytics-dashboard.js +0 -113
- package/.claude/skills/analytics/skill-invocation-hook.sh +0 -28
- package/.claude/skills/analytics/skill-invocations.sql +0 -58
- package/.claude/skills/analytics/test-corpus.json +0 -32
- package/.claude/skills/analytics/test-data-generator.js +0 -115
- package/.claude/skills/analytics/test-manual-override-rate.js +0 -285
- package/.claude/skills/analytics/validate-skill-selection.js +0 -188
- package/.claude/skills/cfn-loop-validation/SKILL.md +0 -263
- package/.claude/skills/cfn-loop-validation/check-dependencies.sh +0 -31
- package/.claude/skills/cfn-loop-validation/config.json +0 -161
- package/.claude/skills/cfn-loop-validation/consensus-calculator.js +0 -477
- package/.claude/skills/cfn-loop-validation/evidence-chain.sql +0 -163
- package/.claude/skills/cfn-loop-validation/examples/README.md +0 -453
- package/.claude/skills/cfn-loop-validation/examples/coordinator-full-cfn-loop.sh +0 -234
- package/.claude/skills/cfn-loop-validation/examples/coordinator-loop2-consensus.sh +0 -132
- package/.claude/skills/cfn-loop-validation/examples/coordinator-loop3-gate.sh +0 -115
- package/.claude/skills/cfn-loop-validation/examples/coordinator-redis-integration.sh +0 -186
- package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +0 -252
- package/.claude/skills/cfn-loop-validation/validate-iteration.sh +0 -134
- package/.claude/skills/cfn-loop-validation.sh +0 -70
- package/.claude/skills/config-management/SKILL.md +0 -34
- package/.claude/skills/config-management/check-dependencies.sh +0 -56
- package/.claude/skills/config-management/config.json +0 -32
- package/.claude/skills/config-management/manage-config.sh +0 -113
- package/.claude/skills/consensus-calculator.js +0 -45
- package/.claude/skills/event-bus/SKILL.md +0 -412
- package/.claude/skills/event-bus/config.json +0 -111
- package/.claude/skills/event-bus/eventbus-wrapper.cjs +0 -69
- package/.claude/skills/event-bus/invoke-event-publish.sh +0 -147
- package/.claude/skills/event-bus/invoke-event-subscribe.sh +0 -171
- package/.claude/skills/event-bus/invoke-lifecycle-track.sh +0 -201
- package/.claude/skills/event-bus/test-event-bus.sh +0 -280
- package/.claude/skills/evidence-chain.sql +0 -66
- package/.claude/skills/fleet-manager/SKILL.md +0 -412
- package/.claude/skills/fleet-manager/config.json +0 -60
- package/.claude/skills/fleet-manager/invoke-fleet-allocate.sh +0 -182
- package/.claude/skills/fleet-manager/invoke-fleet-balance.sh +0 -239
- package/.claude/skills/fleet-manager/invoke-fleet-metrics.sh +0 -193
- package/.claude/skills/fleet-manager/invoke-fleet-register.sh +0 -124
- package/.claude/skills/fleet-manager/test-fleet-manager.sh +0 -345
- package/.claude/skills/hook-pipeline/SKILL.md +0 -148
- package/.claude/skills/hook-pipeline/auto-resolve.sh +0 -66
- package/.claude/skills/hook-pipeline/check-dependencies.sh +0 -40
- package/.claude/skills/hook-pipeline/feedback-resolver.sh +0 -452
- package/.claude/skills/hook-pipeline/post-edit-handler.sh +0 -154
- package/.claude/skills/hook-pipeline/security-scan.json +0 -60
- package/.claude/skills/hook-pipeline/security-scanner.sh +0 -121
- package/.claude/skills/hook-pipeline/test-root-warning-resolution.sh +0 -148
- package/.claude/skills/hybrid-routing/SKILL.md +0 -46
- package/.claude/skills/hybrid-routing/check-dependencies.sh +0 -52
- package/.claude/skills/hybrid-routing/config.json +0 -26
- package/.claude/skills/hybrid-routing/spawn-worker.sh +0 -44
- package/.claude/skills/process-lifecycle/SKILL.md +0 -39
- package/.claude/skills/process-lifecycle/check-dependencies.sh +0 -58
- package/.claude/skills/process-lifecycle/config.json +0 -39
- package/.claude/skills/process-lifecycle/process-manager.sh +0 -144
- package/.claude/skills/redis-coordination/AGENT_LOGGING.md +0 -280
- package/.claude/skills/redis-coordination/BZPOPMIN_FIX_SUMMARY.md +0 -209
- package/.claude/skills/redis-coordination/HEARTBEAT.md +0 -57
- package/.claude/skills/redis-coordination/HEARTBEAT_MONITORING.md +0 -267
- package/.claude/skills/redis-coordination/README.md +0 -64
- package/.claude/skills/redis-coordination/SECURITY_REVIEW.md +0 -25
- package/.claude/skills/redis-coordination/SHUTDOWN_HANDLING.md +0 -164
- package/.claude/skills/redis-coordination/SKILL.md +0 -118
- package/.claude/skills/redis-coordination/agent-log.sh +0 -124
- package/.claude/skills/redis-coordination/agent-recovery.sh +0 -75
- package/.claude/skills/redis-coordination/cancel-swarm.sh +0 -221
- package/.claude/skills/redis-coordination/cfn-loop-relaunch.sh +0 -29
- package/.claude/skills/redis-coordination/check-dependencies.sh +0 -32
- package/.claude/skills/redis-coordination/complete-swarm.sh +0 -75
- package/.claude/skills/redis-coordination/config.json +0 -61
- package/.claude/skills/redis-coordination/examples/README.md +0 -73
- package/.claude/skills/redis-coordination/examples/grafana-dashboard.json +0 -352
- package/.claude/skills/redis-coordination/examples/hierarchical-pattern.sh +0 -127
- package/.claude/skills/redis-coordination/examples/mesh-pattern.sh +0 -171
- package/.claude/skills/redis-coordination/examples/timeout-handling.sh +0 -227
- package/.claude/skills/redis-coordination/examples/waiting-mode-pattern.sh +0 -239
- package/.claude/skills/redis-coordination/get-agent-timeout.sh +0 -177
- package/.claude/skills/redis-coordination/heartbeat-functions.sh +0 -137
- package/.claude/skills/redis-coordination/heartbeat-protocol.md +0 -106
- package/.claude/skills/redis-coordination/heartbeat.sh +0 -126
- package/.claude/skills/redis-coordination/init-swarm.sh +0 -148
- package/.claude/skills/redis-coordination/invoke-redis-pattern.sh +0 -220
- package/.claude/skills/redis-coordination/invoke-waiting-mode.sh +0 -417
- package/.claude/skills/redis-coordination/list-active-swarms.sh +0 -147
- package/.claude/skills/redis-coordination/metrics-export.sh +0 -674
- package/.claude/skills/redis-coordination/metrics-schema.json +0 -66
- package/.claude/skills/redis-coordination/metrics-storage.md +0 -31
- package/.claude/skills/redis-coordination/monitor-heartbeats.sh +0 -101
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh +0 -993
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup-1760949407 +0 -933
- package/.claude/skills/redis-coordination/phase4-wake-queue-test-report.md +0 -82
- package/.claude/skills/redis-coordination/priority-wake-mechanism.md +0 -75
- package/.claude/skills/redis-coordination/priority_wake.py +0 -134
- package/.claude/skills/redis-coordination/query-dlq.sh +0 -162
- package/.claude/skills/redis-coordination/redis-pattern.sh +0 -619
- package/.claude/skills/redis-coordination/send-heartbeat.sh +0 -73
- package/.claude/skills/redis-coordination/store-epic-context.sh +0 -123
- package/.claude/skills/redis-coordination/test-bzpopmin-fix.sh +0 -274
- package/.claude/skills/redis-coordination/test-cancel-swarm.sh +0 -276
- package/.claude/skills/redis-coordination/test-dlq.sh +0 -129
- package/.claude/skills/redis-coordination/test-iteration-feedback.sh +0 -320
- package/.claude/skills/redis-coordination/test-orchestrator.sh +0 -224
- package/.claude/skills/redis-coordination/test-priority-wake-phase4-unix.sh +0 -148
- package/.claude/skills/redis-coordination/test-priority-wake-phase4.sh +0 -163
- package/.claude/skills/redis-coordination/test-priority-wake.sh +0 -138
- package/.claude/skills/redis-coordination/test-quick-fix.sh +0 -81
- package/.claude/skills/redis-coordination/test-quorum-absolute.sh +0 -45
- package/.claude/skills/redis-coordination/test-quorum-fallback.sh +0 -68
- package/.claude/skills/redis-coordination/test-quorum-percentage.sh +0 -56
- package/.claude/skills/redis-coordination/test-quorum-with-retry.sh +0 -81
- package/.claude/skills/redis-coordination/test-quorum.sh +0 -57
- package/.claude/skills/redis-coordination/test-shutdown-handling.sh +0 -187
- package/.claude/skills/redis-coordination/test-shutdown.sh +0 -160
- package/.claude/skills/redis-coordination/test-utils-unix.sh +0 -97
- package/.claude/skills/redis-coordination/test-utils.sh +0 -97
- package/.claude/skills/redis-coordination/test-waiting-mode.sh +0 -59
- package/.claude/skills/redis-coordination/tests/dlq-functionality-test.sh +0 -102
- package/.claude/skills/redis-coordination/tests/edge-cases-test.sh +0 -99
- package/.claude/skills/redis-coordination/tests/integration-test.sh +0 -170
- package/.claude/skills/redis-coordination/tests/retry-mechanism-test.sh +0 -82
- package/.claude/skills/redis-coordination/tests/run-test-suite.sh +0 -92
- package/.claude/skills/redis-coordination/tests/test-heartbeat-monitoring.sh +0 -418
- package/.claude/skills/redis-coordination/tests/test-heartbeat-simple.sh +0 -124
- package/.claude/skills/redis-coordination/tests/test-utils.sh +0 -122
- package/.claude/skills/skill-builder/SKILL.md +0 -910
- package/.claude/skills/sqlite-memory/IMPLEMENTATION_REPORT.md +0 -393
- package/.claude/skills/sqlite-memory/QUICK_REFERENCE.md +0 -204
- package/.claude/skills/sqlite-memory/SKILL.md +0 -415
- package/.claude/skills/sqlite-memory/acl-queries.sql +0 -452
- package/.claude/skills/sqlite-memory/check-dependencies.sh +0 -36
- package/.claude/skills/sqlite-memory/config.json +0 -45
- package/.claude/skills/sqlite-memory/memory-cli.sh +0 -88
- package/.claude/skills/sqlite-memory/test-state-persistence.js +0 -187
- package/.claude/skills/sqlite-memory/ttl-cleanup.sh +0 -274
- package/.claude/skills/test-execution/SKILL.md +0 -128
- package/.claude/skills/test-execution/check-dependencies.sh +0 -36
- package/.claude/skills/test-execution/test-cache-reader.sh +0 -134
- package/.claude/skills/test-execution/test-concurrent-conflicts.sh +0 -115
- package/.claude/skills/test-execution/test-coordinator-pattern.sh +0 -109
- package/.claude/skills/test-execution-coordinator-pattern.md +0 -228
- package/.claude/skills/transparency-middleware/Cargo.toml +0 -18
- package/.claude/skills/transparency-middleware/SECURITY.md +0 -41
- package/.claude/skills/transparency-middleware/SKILL.md +0 -91
- package/.claude/skills/transparency-middleware/TEST_RESULTS.md +0 -174
- package/.claude/skills/transparency-middleware/config.json +0 -31
- package/.claude/skills/transparency-middleware/examples/basic-usage.ts +0 -39
- package/.claude/skills/transparency-middleware/examples/batch-processing.ts +0 -52
- package/.claude/skills/transparency-middleware/examples/custom-filtering.ts +0 -61
- package/.claude/skills/transparency-middleware/invoke-transparency-filter.sh +0 -98
- package/.claude/skills/transparency-middleware/invoke-transparency-init.sh +0 -224
- package/.claude/skills/transparency-middleware/invoke-transparency-level.sh +0 -333
- package/.claude/skills/transparency-middleware/invoke-transparency-metrics.sh +0 -345
- package/.claude/skills/transparency-middleware/invoke-transparency-observe.sh +0 -140
- package/.claude/skills/transparency-middleware/invoke-transparency-stop.sh +0 -235
- package/.claude/skills/transparency-middleware/memory_query.rs +0 -85
- package/.claude/skills/transparency-middleware/memory_repository.rs +0 -140
- package/.claude/skills/transparency-middleware/memory_schema.rs +0 -64
- package/.claude/skills/transparency-middleware/middleware-config.sh +0 -29
- package/.claude/skills/transparency-middleware/performance-benchmark.sh +0 -79
- package/.claude/skills/transparency-middleware/test-e2e.sh +0 -406
- package/.claude/skills/transparency-middleware/test-integration.sh +0 -162
- package/.claude/skills/transparency-middleware/test-transparency-skill.sh +0 -368
- package/.claude/skills/transparency-middleware/test-transparency-skill.sh.unix +0 -126
- package/.claude/skills/transparency-middleware/tests/input-validation.sh +0 -93
- package/.claude/skills/transparency-middleware/wrap-agent.sh +0 -132
- package/.claude/skills/web-portal/DESIGN.md +0 -117
- package/.claude/skills/web-portal/SKILL.md +0 -679
- package/.claude/skills/web-portal/invoke-portal-agents.sh +0 -129
- package/.claude/skills/web-portal/invoke-portal-dashboard.sh +0 -85
- package/.claude/skills/web-portal/invoke-portal-events.sh +0 -125
- package/.claude/skills/web-portal/invoke-portal-metrics.sh +0 -112
- package/.claude/skills/web-portal/invoke-portal-start.sh +0 -135
- package/.claude/skills/web-portal/invoke-portal-stop.sh +0 -121
- package/.claude/skills/web-portal/test-web-portal-skill.sh +0 -51
- package/.claude/skills/web-portal/validate-deployment.sh +0 -85
- package/.claude/slash-commands.json +0 -92
- package/.claude/spawn-pattern-examples.md +0 -500
- package/.claude/sprint-configs/cfn-naming-standardization.json +0 -729
- package/.claude/sprint-reports/sprint-1.4-self-correction-monitoring.json +0 -64
- package/.claude/swarm-memory.db +0 -0
- package/.claude/templates/agent-optimization-plan.md +0 -439
- package/.claude/templates/bulk-optimization-strategy.md +0 -367
- package/.claude/templates/cfn-loop-mechanics.md +0 -80
- package/.claude/templates/coordinator-patterns.md +0 -75
- package/.claude/templates/memory-operations.md +0 -200
- package/.claude/templates/post-edit-validation.md +0 -109
- package/.claude/templates/redis-coordination.md +0 -140
- package/.claude/templates/remaining-agent-analysis.md +0 -121
- package/.claude/templates/swarm-coordination.md +0 -103
- package/.claude/templates/team-dynamics.md +0 -82
- package/CLAUDE.md +0 -502
- package/dist/cli/cli-agent-context.test.js +0 -451
- package/dist/cli/cli-agent-context.test.js.map +0 -1
- package/dist/coordination/fleet-manager.test.js +0 -141
- package/dist/coordination/fleet-manager.test.js.map +0 -1
- package/dist/middleware/transparency-middleware.test.js +0 -184
- package/dist/middleware/transparency-middleware.test.js.map +0 -1
- package/readme/CLAUDE.md +0 -429
- /package/.claude/agents/{core-agents → cfn-dev-team/developers}/researcher.md +0 -0
- /package/.claude/commands/{README.md → cfn/README.md} +0 -0
- /package/.claude/commands/{auto-compact.md → cfn/auto-compact.md} +0 -0
- /package/.claude/commands/{cfn-claude-sync.md → cfn/cfn-claude-sync.md} +0 -0
- /package/.claude/commands/{cfn-loop-document.md → cfn/cfn-loop-document.md} +0 -0
- /package/.claude/commands/{claude-md.md → cfn/claude-md.md} +0 -0
- /package/.claude/commands/{claude-soul.md → cfn/claude-soul.md} +0 -0
- /package/.claude/commands/{context-query.md → cfn/context-query.md} +0 -0
- /package/.claude/commands/{cost-savings-off.md → cfn/cost-savings-off.md} +0 -0
- /package/.claude/commands/{cost-savings-on.md → cfn/cost-savings-on.md} +0 -0
- /package/.claude/commands/{cost-savings-status.md → cfn/cost-savings-status.md} +0 -0
- /package/.claude/commands/{custom-routing-activate.md → cfn/custom-routing-activate.md} +0 -0
- /package/.claude/commands/{custom-routing-deactivate.md → cfn/custom-routing-deactivate.md} +0 -0
- /package/.claude/commands/{dependency-recommendations.md → cfn/dependency-recommendations.md} +0 -0
- /package/.claude/commands/{fullstack.md → cfn/fullstack.md} +0 -0
- /package/.claude/commands/{github-commit.md → cfn/github-commit.md} +0 -0
- /package/.claude/commands/{github.md → cfn/github.md} +0 -0
- /package/.claude/commands/{hello-world-tests.md → cfn/hello-world-tests.md} +0 -0
- /package/.claude/commands/{hooks.md → cfn/hooks.md} +0 -0
- /package/.claude/commands/{launch-web-dashboard.md → cfn/launch-web-dashboard.md} +0 -0
- /package/.claude/commands/{metrics-summary.md → cfn/metrics-summary.md} +0 -0
- /package/.claude/commands/{neural.md → cfn/neural.md} +0 -0
- /package/.claude/commands/{parse-epic.md → cfn/parse-epic.md} +0 -0
- /package/.claude/commands/{performance.md → cfn/performance.md} +0 -0
- /package/.claude/commands/{sparc.md → cfn/sparc.md} +0 -0
- /package/.claude/commands/{suggest-improvements.md → cfn/suggest-improvements.md} +0 -0
- /package/.claude/commands/{suggest-templates.md → cfn/suggest-templates.md} +0 -0
- /package/.claude/commands/{swarm.md → cfn/swarm.md} +0 -0
- /package/.claude/commands/{switch-api.md → cfn/switch-api.md} +0 -0
- /package/.claude/commands/{workflow.md → cfn/workflow.md} +0 -0
- /package/.claude/hooks/{invoke-post-edit.sh → cfn-invoke-post-edit.sh} +0 -0
- /package/.claude/hooks/{post-edit.config.json → cfn-post-edit.config.json} +0 -0
- /package/.claude/skills/{agent-spawning → cfn-agent-spawning}/README.md +0 -0
- /package/.claude/skills/{analytics → cfn-analytics}/README.md +0 -0
- /package/.claude/skills/{config-management → cfn-config-management}/README.md +0 -0
- /package/.claude/skills/{event-bus → cfn-event-bus}/README.md +0 -0
- /package/.claude/skills/{fleet-manager → cfn-fleet-manager}/README.md +0 -0
- /package/.claude/skills/{hook-pipeline → cfn-hook-pipeline}/README.md +0 -0
- /package/.claude/skills/{hybrid-routing → cfn-hybrid-routing}/README.md +0 -0
- /package/.claude/skills/{process-lifecycle → cfn-process-lifecycle}/README.md +0 -0
- /package/.claude/skills/{sqlite-memory → cfn-sqlite-memory}/README.md +0 -0
- /package/.claude/skills/{test-execution → cfn-test-execution}/README.md +0 -0
- /package/.claude/skills/{transparency-middleware → cfn-transparency-middleware}/README.md +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cli/conversation-fork.ts"],"sourcesContent":["/**\r\n * Conversation Fork Management\r\n *\r\n * Implements application-level conversation forking for CFN Loop iterations.\r\n * Stores conversation history in Redis and allows branching at specific points.\r\n *\r\n * Sprint 4: Conversation Forking (v2.7.0)\r\n */\r\n\r\nimport { execSync } from 'child_process';\r\nimport { randomBytes } from 'crypto';\r\n\r\nexport interface Message {\r\n role: 'user' | 'assistant';\r\n content: string;\r\n iteration: number;\r\n timestamp: string;\r\n}\r\n\r\nexport interface ForkMetadata {\r\n forkId: string;\r\n taskId: string;\r\n agentId: string;\r\n createdAt: string;\r\n parentIteration: number;\r\n messageCount: number;\r\n}\r\n\r\n/**\r\n * Store a message in conversation history\r\n */\r\nexport async function storeMessage(\r\n taskId: string,\r\n agentId: string,\r\n message: Message\r\n): Promise<void> {\r\n const key = `swarm:${taskId}:${agentId}:messages`;\r\n const messageJson = JSON.stringify(message);\r\n\r\n try {\r\n execSync(`redis-cli rpush \"${key}\" '${messageJson.replace(/'/g, \"'\\\\''\")}'`, {\r\n encoding: 'utf8'\r\n });\r\n } catch (error) {\r\n console.error(`[conversation-fork] Failed to store message:`, error);\r\n throw error;\r\n }\r\n}\r\n\r\n/**\r\n * Load all messages from conversation history\r\n */\r\nexport async function loadMessages(\r\n taskId: string,\r\n agentId: string,\r\n forkId?: string\r\n): Promise<Message[]> {\r\n const key = forkId\r\n ? `swarm:${taskId}:${agentId}:fork:${forkId}:messages`\r\n : `swarm:${taskId}:${agentId}:messages`;\r\n\r\n try {\r\n const output = execSync(`redis-cli lrange \"${key}\" 0 -1`, {\r\n encoding: 'utf8'\r\n }).trim();\r\n\r\n if (!output || output === '(empty array)') {\r\n return [];\r\n }\r\n\r\n // Redis returns each message on a new line\r\n const lines = output.split('\\n');\r\n return lines.map(line => JSON.parse(line));\r\n } catch (error) {\r\n console.error(`[conversation-fork] Failed to load messages:`, error);\r\n return [];\r\n }\r\n}\r\n\r\n/**\r\n * Create a fork from current conversation state\r\n * Copies all messages up to current iteration\r\n */\r\nexport async function createFork(\r\n taskId: string,\r\n agentId: string,\r\n currentIteration: number\r\n): Promise<string> {\r\n // Generate unique fork ID\r\n const forkId = `fork-${currentIteration}-${randomBytes(4).toString('hex')}`;\r\n\r\n // Load messages up to current iteration\r\n const messages = await loadMessages(taskId, agentId);\r\n const forkMessages = messages.filter(m => m.iteration <= currentIteration);\r\n\r\n if (forkMessages.length === 0) {\r\n throw new Error(`No messages found for iteration ${currentIteration}`);\r\n }\r\n\r\n // Store fork snapshot\r\n const forkKey = `swarm:${taskId}:${agentId}:fork:${forkId}:messages`;\r\n\r\n for (const message of forkMessages) {\r\n const messageJson = JSON.stringify(message);\r\n execSync(`redis-cli rpush \"${forkKey}\" '${messageJson.replace(/'/g, \"'\\\\''\")}'`, {\r\n encoding: 'utf8'\r\n });\r\n }\r\n\r\n // Store fork metadata\r\n const metadata: ForkMetadata = {\r\n forkId,\r\n taskId,\r\n agentId,\r\n createdAt: new Date().toISOString(),\r\n parentIteration: currentIteration,\r\n messageCount: forkMessages.length\r\n };\r\n\r\n const metaKey = `swarm:${taskId}:${agentId}:fork:${forkId}:meta`;\r\n execSync(`redis-cli setex \"${metaKey}\" 86400 '${JSON.stringify(metadata)}'`, {\r\n encoding: 'utf8'\r\n });\r\n\r\n // Set as current fork\r\n const currentForkKey = `swarm:${taskId}:${agentId}:current-fork`;\r\n execSync(`redis-cli setex \"${currentForkKey}\" 86400 \"${forkId}\"`, {\r\n encoding: 'utf8'\r\n });\r\n\r\n console.log(`[conversation-fork] Created fork ${forkId} with ${forkMessages.length} messages`);\r\n\r\n return forkId;\r\n}\r\n\r\n/**\r\n * Get current active fork ID\r\n */\r\nexport async function getCurrentFork(\r\n taskId: string,\r\n agentId: string\r\n): Promise<string | null> {\r\n const key = `swarm:${taskId}:${agentId}:current-fork`;\r\n\r\n try {\r\n const forkId = execSync(`redis-cli get \"${key}\"`, {\r\n encoding: 'utf8'\r\n }).trim();\r\n\r\n if (forkId === '(nil)' || !forkId) {\r\n return null;\r\n }\r\n\r\n return forkId;\r\n } catch (error) {\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Get fork metadata\r\n */\r\nexport async function getForkMetadata(\r\n taskId: string,\r\n agentId: string,\r\n forkId: string\r\n): Promise<ForkMetadata | null> {\r\n const key = `swarm:${taskId}:${agentId}:fork:${forkId}:meta`;\r\n\r\n try {\r\n const metaJson = execSync(`redis-cli get \"${key}\"`, {\r\n encoding: 'utf8'\r\n }).trim();\r\n\r\n if (metaJson === '(nil)' || !metaJson) {\r\n return null;\r\n }\r\n\r\n return JSON.parse(metaJson);\r\n } catch (error) {\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * List all forks for an agent\r\n */\r\nexport async function listForks(\r\n taskId: string,\r\n agentId: string\r\n): Promise<ForkMetadata[]> {\r\n const pattern = `swarm:${taskId}:${agentId}:fork:*:meta`;\r\n\r\n try {\r\n const keys = execSync(`redis-cli keys \"${pattern}\"`, {\r\n encoding: 'utf8'\r\n }).trim().split('\\n').filter(k => k);\r\n\r\n const forks: ForkMetadata[] = [];\r\n\r\n for (const key of keys) {\r\n const metaJson = execSync(`redis-cli get \"${key}\"`, {\r\n encoding: 'utf8'\r\n }).trim();\r\n\r\n if (metaJson && metaJson !== '(nil)') {\r\n forks.push(JSON.parse(metaJson));\r\n }\r\n }\r\n\r\n return forks.sort((a, b) =>\r\n new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime()\r\n );\r\n } catch (error) {\r\n console.error(`[conversation-fork] Failed to list forks:`, error);\r\n return [];\r\n }\r\n}\r\n\r\n/**\r\n * Delete a fork and its messages\r\n */\r\nexport async function deleteFork(\r\n taskId: string,\r\n agentId: string,\r\n forkId: string\r\n): Promise<void> {\r\n const messagesKey = `swarm:${taskId}:${agentId}:fork:${forkId}:messages`;\r\n const metaKey = `swarm:${taskId}:${agentId}:fork:${forkId}:meta`;\r\n\r\n try {\r\n execSync(`redis-cli del \"${messagesKey}\" \"${metaKey}\"`, {\r\n encoding: 'utf8'\r\n });\r\n\r\n console.log(`[conversation-fork] Deleted fork ${forkId}`);\r\n } catch (error) {\r\n console.error(`[conversation-fork] Failed to delete fork:`, error);\r\n throw error;\r\n }\r\n}\r\n\r\n/**\r\n * Clear current fork (start fresh conversation)\r\n */\r\nexport async function clearCurrentFork(\r\n taskId: string,\r\n agentId: string\r\n): Promise<void> {\r\n const key = `swarm:${taskId}:${agentId}:current-fork`;\r\n\r\n try {\r\n execSync(`redis-cli del \"${key}\"`, {\r\n encoding: 'utf8'\r\n });\r\n } catch (error) {\r\n console.error(`[conversation-fork] Failed to clear current fork:`, error);\r\n }\r\n}\r\n\r\n/**\r\n * Format messages for Anthropic API\r\n */\r\nexport function formatMessagesForAPI(messages: Message[]): Array<{role: string, content: string}> {\r\n return messages.map(m => ({\r\n role: m.role,\r\n content: m.content\r\n }));\r\n}\r\n\r\n/**\r\n * Get conversation statistics\r\n */\r\nexport async function getConversationStats(\r\n taskId: string,\r\n agentId: string,\r\n forkId?: string\r\n): Promise<{\r\n messageCount: number;\r\n userMessages: number;\r\n assistantMessages: number;\r\n iterations: number;\r\n firstMessage: string | null;\r\n lastMessage: string | null;\r\n}> {\r\n const messages = await loadMessages(taskId, agentId, forkId);\r\n\r\n if (messages.length === 0) {\r\n return {\r\n messageCount: 0,\r\n userMessages: 0,\r\n assistantMessages: 0,\r\n iterations: 0,\r\n firstMessage: null,\r\n lastMessage: null\r\n };\r\n }\r\n\r\n const userMessages = messages.filter(m => m.role === 'user').length;\r\n const assistantMessages = messages.filter(m => m.role === 'assistant').length;\r\n const iterations = Math.max(...messages.map(m => m.iteration));\r\n\r\n return {\r\n messageCount: messages.length,\r\n userMessages,\r\n assistantMessages,\r\n iterations,\r\n firstMessage: messages[0].timestamp,\r\n lastMessage: messages[messages.length - 1].timestamp\r\n };\r\n}\r\n"],"names":["execSync","randomBytes","storeMessage","taskId","agentId","message","key","messageJson","JSON","stringify","replace","encoding","error","console","loadMessages","forkId","output","trim","lines","split","map","line","parse","createFork","currentIteration","toString","messages","forkMessages","filter","m","iteration","length","Error","forkKey","metadata","createdAt","Date","toISOString","parentIteration","messageCount","metaKey","currentForkKey","log","getCurrentFork","getForkMetadata","metaJson","listForks","pattern","keys","k","forks","push","sort","a","b","getTime","deleteFork","messagesKey","clearCurrentFork","formatMessagesForAPI","role","content","getConversationStats","userMessages","assistantMessages","iterations","firstMessage","lastMessage","Math","max","timestamp"],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cli/index.ts"],"sourcesContent":["#!/usr/bin/env node\r\n/**\r\n * CLI Entry Point - v2.0\r\n *\r\n * Handles agent spawning commands:\r\n * npx claude-flow-novice agent <type> [options]\r\n */\r\n\r\n// Load environment variables from .env file\r\nimport 'dotenv/config';\r\n\r\nimport { VERSION } from '../core/index.js';\r\nimport { agentCommand, AgentCommandOptions } from './agent-command.js';\r\n\r\n/**\r\n * Parse command line arguments\r\n */\r\nfunction parseArgs(args: string[]): { command: string; agentType?: string; options: AgentCommandOptions } {\r\n const command = args[0] || 'help';\r\n const agentType = args[1] && !args[1].startsWith('--') ? args[1] : undefined;\r\n const options: AgentCommandOptions = {};\r\n\r\n // Parse options\r\n for (let i = agentType ? 2 : 1; i < args.length; i++) {\r\n const arg = args[i];\r\n const value = args[i + 1];\r\n\r\n switch (arg) {\r\n case '--task-id':\r\n options.taskId = value;\r\n i++;\r\n break;\r\n case '--iteration':\r\n options.iteration = parseInt(value, 10);\r\n i++;\r\n break;\r\n case '--context':\r\n options.context = value;\r\n i++;\r\n break;\r\n case '--mode':\r\n options.mode = value;\r\n i++;\r\n break;\r\n case '--priority':\r\n options.priority = parseInt(value, 10);\r\n i++;\r\n break;\r\n case '--parent-task-id':\r\n options.parentTaskId = value;\r\n i++;\r\n break;\r\n case '--list':\r\n options.list = true;\r\n break;\r\n case '--help':\r\n case '-h':\r\n options.help = true;\r\n break;\r\n }\r\n }\r\n\r\n return { command, agentType, options };\r\n}\r\n\r\n/**\r\n * Display main CLI help\r\n */\r\nfunction displayHelp(): void {\r\n console.log(`\r\nClaude Flow Novice CLI v${VERSION}\r\n\r\nUsage:\r\n npx claude-flow-novice <command> [options]\r\n\r\nCommands:\r\n agent <type> [options] Spawn an agent for task execution\r\n --version Show version number\r\n --help Show this help message\r\n\r\nExamples:\r\n # Spawn an agent\r\n npx claude-flow-novice agent coder --context \"Implement feature\"\r\n\r\n # List available agents\r\n npx claude-flow-novice agent --list\r\n\r\n # Show version\r\n npx claude-flow-novice --version\r\n\r\nFor more information:\r\n https://github.com/yourusername/claude-flow-novice\r\n`);\r\n}\r\n\r\n/**\r\n * Main CLI entry point\r\n */\r\nasync function main() {\r\n const args = process.argv.slice(2);\r\n\r\n // Handle version flag\r\n if (args.includes('--version') || args.includes('-v')) {\r\n console.log(`Claude Flow Novice v${VERSION}`);\r\n return;\r\n }\r\n\r\n // Handle help flag\r\n if (args.length === 0 || args.includes('--help') || args.includes('-h')) {\r\n displayHelp();\r\n return;\r\n }\r\n\r\n const { command, agentType, options } = parseArgs(args);\r\n\r\n switch (command) {\r\n case 'agent':\r\n await agentCommand(agentType, options);\r\n break;\r\n\r\n default:\r\n console.error(`Unknown command: ${command}`);\r\n console.log('Run with --help for usage information');\r\n process.exit(1);\r\n }\r\n}\r\n\r\n// Run CLI\r\nmain().catch((error) => {\r\n console.error('[claude-flow-novice] Fatal error:', error);\r\n process.exit(1);\r\n});\r\n"],"names":["VERSION","agentCommand","parseArgs","args","command","agentType","startsWith","undefined","options","i","length","arg","value","taskId","iteration","parseInt","context","mode","priority","parentTaskId","list","help","displayHelp","console","log","main","process","argv","slice","includes","error","exit","catch"],"mappings":";AACA;;;;;CAKC,GAED,4CAA4C;AAC5C,OAAO,gBAAgB;AAEvB,SAASA,OAAO,QAAQ,mBAAmB;AAC3C,SAASC,YAAY,QAA6B,qBAAqB;AAEvE;;CAEC,GACD,SAASC,UAAUC,IAAc;IAC/B,MAAMC,UAAUD,IAAI,CAAC,EAAE,IAAI;IAC3B,MAAME,YAAYF,IAAI,CAAC,EAAE,IAAI,CAACA,IAAI,CAAC,EAAE,CAACG,UAAU,CAAC,QAAQH,IAAI,CAAC,EAAE,GAAGI;IACnE,MAAMC,UAA+B,CAAC;IAEtC,gBAAgB;IAChB,IAAK,IAAIC,IAAIJ,YAAY,IAAI,GAAGI,IAAIN,KAAKO,MAAM,EAAED,IAAK;QACpD,MAAME,MAAMR,IAAI,CAACM,EAAE;QACnB,MAAMG,QAAQT,IAAI,CAACM,IAAI,EAAE;QAEzB,OAAQE;YACN,KAAK;gBACHH,QAAQK,MAAM,GAAGD;gBACjBH;gBACA;YACF,KAAK;gBACHD,QAAQM,SAAS,GAAGC,SAASH,OAAO;gBACpCH;gBACA;YACF,KAAK;gBACHD,QAAQQ,OAAO,GAAGJ;gBAClBH;gBACA;YACF,KAAK;gBACHD,QAAQS,
|
|
1
|
+
{"version":3,"sources":["../../src/cli/index.ts"],"sourcesContent":["#!/usr/bin/env node\r\n/**\r\n * CLI Entry Point - v2.0\r\n *\r\n * Handles agent spawning commands:\r\n * npx claude-flow-novice agent <type> [options]\r\n */\r\n\r\n// Load environment variables from .env file\r\nimport 'dotenv/config';\r\n\r\nimport { VERSION } from '../core/index.js';\r\nimport { agentCommand, AgentCommandOptions } from './agent-command.js';\r\n\r\n/**\r\n * Parse command line arguments\r\n */\r\nfunction parseArgs(args: string[]): { command: string; agentType?: string; options: AgentCommandOptions } {\r\n const command = args[0] || 'help';\r\n const agentType = args[1] && !args[1].startsWith('--') ? args[1] : undefined;\r\n const options: AgentCommandOptions = {};\r\n\r\n // Parse options\r\n for (let i = agentType ? 2 : 1; i < args.length; i++) {\r\n const arg = args[i];\r\n const value = args[i + 1];\r\n\r\n switch (arg) {\r\n case '--task-id':\r\n options.taskId = value;\r\n i++;\r\n break;\r\n case '--iteration':\r\n options.iteration = parseInt(value, 10);\r\n i++;\r\n break;\r\n case '--agent-id':\r\n options.agentId = value;\r\n i++;\r\n break;\r\n case '--context':\r\n options.context = value;\r\n i++;\r\n break;\r\n case '--mode':\r\n options.mode = value;\r\n i++;\r\n break;\r\n case '--priority':\r\n options.priority = parseInt(value, 10);\r\n i++;\r\n break;\r\n case '--parent-task-id':\r\n options.parentTaskId = value;\r\n i++;\r\n break;\r\n case '--list':\r\n options.list = true;\r\n break;\r\n case '--help':\r\n case '-h':\r\n options.help = true;\r\n break;\r\n }\r\n }\r\n\r\n return { command, agentType, options };\r\n}\r\n\r\n/**\r\n * Display main CLI help\r\n */\r\nfunction displayHelp(): void {\r\n console.log(`\r\nClaude Flow Novice CLI v${VERSION}\r\n\r\nUsage:\r\n npx claude-flow-novice <command> [options]\r\n\r\nCommands:\r\n agent <type> [options] Spawn an agent for task execution\r\n --version Show version number\r\n --help Show this help message\r\n\r\nExamples:\r\n # Spawn an agent\r\n npx claude-flow-novice agent coder --context \"Implement feature\"\r\n\r\n # List available agents\r\n npx claude-flow-novice agent --list\r\n\r\n # Show version\r\n npx claude-flow-novice --version\r\n\r\nFor more information:\r\n https://github.com/yourusername/claude-flow-novice\r\n`);\r\n}\r\n\r\n/**\r\n * Main CLI entry point\r\n */\r\nasync function main() {\r\n const args = process.argv.slice(2);\r\n\r\n // Handle version flag\r\n if (args.includes('--version') || args.includes('-v')) {\r\n console.log(`Claude Flow Novice v${VERSION}`);\r\n return;\r\n }\r\n\r\n // Handle help flag\r\n if (args.length === 0 || args.includes('--help') || args.includes('-h')) {\r\n displayHelp();\r\n return;\r\n }\r\n\r\n const { command, agentType, options } = parseArgs(args);\r\n\r\n switch (command) {\r\n case 'agent':\r\n await agentCommand(agentType, options);\r\n break;\r\n\r\n default:\r\n console.error(`Unknown command: ${command}`);\r\n console.log('Run with --help for usage information');\r\n process.exit(1);\r\n }\r\n}\r\n\r\n// Run CLI\r\nmain().catch((error) => {\r\n console.error('[claude-flow-novice] Fatal error:', error);\r\n process.exit(1);\r\n});\r\n"],"names":["VERSION","agentCommand","parseArgs","args","command","agentType","startsWith","undefined","options","i","length","arg","value","taskId","iteration","parseInt","agentId","context","mode","priority","parentTaskId","list","help","displayHelp","console","log","main","process","argv","slice","includes","error","exit","catch"],"mappings":";AACA;;;;;CAKC,GAED,4CAA4C;AAC5C,OAAO,gBAAgB;AAEvB,SAASA,OAAO,QAAQ,mBAAmB;AAC3C,SAASC,YAAY,QAA6B,qBAAqB;AAEvE;;CAEC,GACD,SAASC,UAAUC,IAAc;IAC/B,MAAMC,UAAUD,IAAI,CAAC,EAAE,IAAI;IAC3B,MAAME,YAAYF,IAAI,CAAC,EAAE,IAAI,CAACA,IAAI,CAAC,EAAE,CAACG,UAAU,CAAC,QAAQH,IAAI,CAAC,EAAE,GAAGI;IACnE,MAAMC,UAA+B,CAAC;IAEtC,gBAAgB;IAChB,IAAK,IAAIC,IAAIJ,YAAY,IAAI,GAAGI,IAAIN,KAAKO,MAAM,EAAED,IAAK;QACpD,MAAME,MAAMR,IAAI,CAACM,EAAE;QACnB,MAAMG,QAAQT,IAAI,CAACM,IAAI,EAAE;QAEzB,OAAQE;YACN,KAAK;gBACHH,QAAQK,MAAM,GAAGD;gBACjBH;gBACA;YACF,KAAK;gBACHD,QAAQM,SAAS,GAAGC,SAASH,OAAO;gBACpCH;gBACA;YACF,KAAK;gBACHD,QAAQQ,OAAO,GAAGJ;gBAClBH;gBACA;YACF,KAAK;gBACHD,QAAQS,OAAO,GAAGL;gBAClBH;gBACA;YACF,KAAK;gBACHD,QAAQU,IAAI,GAAGN;gBACfH;gBACA;YACF,KAAK;gBACHD,QAAQW,QAAQ,GAAGJ,SAASH,OAAO;gBACnCH;gBACA;YACF,KAAK;gBACHD,QAAQY,YAAY,GAAGR;gBACvBH;gBACA;YACF,KAAK;gBACHD,QAAQa,IAAI,GAAG;gBACf;YACF,KAAK;YACL,KAAK;gBACHb,QAAQc,IAAI,GAAG;gBACf;QACJ;IACF;IAEA,OAAO;QAAElB;QAASC;QAAWG;IAAQ;AACvC;AAEA;;CAEC,GACD,SAASe;IACPC,QAAQC,GAAG,CAAC,CAAC;wBACS,EAAEzB,QAAQ;;;;;;;;;;;;;;;;;;;;;;AAsBlC,CAAC;AACD;AAEA;;CAEC,GACD,eAAe0B;IACb,MAAMvB,OAAOwB,QAAQC,IAAI,CAACC,KAAK,CAAC;IAEhC,sBAAsB;IACtB,IAAI1B,KAAK2B,QAAQ,CAAC,gBAAgB3B,KAAK2B,QAAQ,CAAC,OAAO;QACrDN,QAAQC,GAAG,CAAC,CAAC,oBAAoB,EAAEzB,SAAS;QAC5C;IACF;IAEA,mBAAmB;IACnB,IAAIG,KAAKO,MAAM,KAAK,KAAKP,KAAK2B,QAAQ,CAAC,aAAa3B,KAAK2B,QAAQ,CAAC,OAAO;QACvEP;QACA;IACF;IAEA,MAAM,EAAEnB,OAAO,EAAEC,SAAS,EAAEG,OAAO,EAAE,GAAGN,UAAUC;IAElD,OAAQC;QACN,KAAK;YACH,MAAMH,aAAaI,WAAWG;YAC9B;QAEF;YACEgB,QAAQO,KAAK,CAAC,CAAC,iBAAiB,EAAE3B,SAAS;YAC3CoB,QAAQC,GAAG,CAAC;YACZE,QAAQK,IAAI,CAAC;IACjB;AACF;AAEA,UAAU;AACVN,OAAOO,KAAK,CAAC,CAACF;IACZP,QAAQO,KAAK,CAAC,qCAAqCA;IACnDJ,QAAQK,IAAI,CAAC;AACf"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { fileURLToPath } from 'url';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
4
|
+
const __dirname = path.dirname(__filename);
|
|
5
|
+
export async function registerInitCommand(program) {
|
|
6
|
+
program.command('init').description('Initialize Claude Flow Novice CFN project').action(async ()=>{
|
|
7
|
+
try {
|
|
8
|
+
// Dynamically import the init-project script
|
|
9
|
+
const { default: initializeCfnProject } = await import(path.resolve(__dirname, '../../scripts/init-project.js'));
|
|
10
|
+
// Execute initialization
|
|
11
|
+
await initializeCfnProject();
|
|
12
|
+
} catch (error) {
|
|
13
|
+
console.error('CFN Initialization Error:', error);
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
export default registerInitCommand;
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=init-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cli/init-command.ts"],"sourcesContent":["import { Command } from 'commander';\r\nimport { fileURLToPath } from 'url';\r\nimport path from 'path';\r\n\r\nconst __filename = fileURLToPath(import.meta.url);\r\nconst __dirname = path.dirname(__filename);\r\n\r\nexport async function registerInitCommand(program: Command) {\r\n program\r\n .command('init')\r\n .description('Initialize Claude Flow Novice CFN project')\r\n .action(async () => {\r\n try {\r\n // Dynamically import the init-project script\r\n const { default: initializeCfnProject } = await import(\r\n path.resolve(__dirname, '../../scripts/init-project.js')\r\n );\r\n\r\n // Execute initialization\r\n await initializeCfnProject();\r\n } catch (error) {\r\n console.error('CFN Initialization Error:', error);\r\n process.exit(1);\r\n }\r\n });\r\n}\r\n\r\nexport default registerInitCommand;"],"names":["fileURLToPath","path","__filename","url","__dirname","dirname","registerInitCommand","program","command","description","action","default","initializeCfnProject","resolve","error","console","process","exit"],"mappings":"AACA,SAASA,aAAa,QAAQ,MAAM;AACpC,OAAOC,UAAU,OAAO;AAExB,MAAMC,aAAaF,cAAc,YAAYG,GAAG;AAChD,MAAMC,YAAYH,KAAKI,OAAO,CAACH;AAE/B,OAAO,eAAeI,oBAAoBC,OAAgB;IACxDA,QACGC,OAAO,CAAC,QACRC,WAAW,CAAC,6CACZC,MAAM,CAAC;QACN,IAAI;YACF,6CAA6C;YAC7C,MAAM,EAAEC,SAASC,oBAAoB,EAAE,GAAG,MAAM,MAAM,CACpDX,KAAKY,OAAO,CAACT,WAAW;YAG1B,yBAAyB;YACzB,MAAMQ;QACR,EAAE,OAAOE,OAAO;YACdC,QAAQD,KAAK,CAAC,6BAA6BA;YAC3CE,QAAQC,IAAI,CAAC;QACf;IACF;AACJ;AAEA,eAAeX,oBAAoB"}
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Definitions for CLI-Spawned Agents
|
|
3
|
+
*
|
|
4
|
+
* Converts agent markdown tool names to Anthropic API tool definitions.
|
|
5
|
+
* Implements core tools: Read, Write, Edit, Bash, TodoWrite
|
|
6
|
+
*/ /**
|
|
7
|
+
* Tool registry mapping agent tool names to Anthropic API format
|
|
8
|
+
*/ const TOOL_REGISTRY = {
|
|
9
|
+
Read: {
|
|
10
|
+
name: 'Read',
|
|
11
|
+
description: 'Reads a file from the local filesystem. Can access any file by absolute path.',
|
|
12
|
+
input_schema: {
|
|
13
|
+
type: 'object',
|
|
14
|
+
properties: {
|
|
15
|
+
file_path: {
|
|
16
|
+
type: 'string',
|
|
17
|
+
description: 'The absolute path to the file to read'
|
|
18
|
+
},
|
|
19
|
+
limit: {
|
|
20
|
+
type: 'number',
|
|
21
|
+
description: 'Optional: The number of lines to read (for large files)'
|
|
22
|
+
},
|
|
23
|
+
offset: {
|
|
24
|
+
type: 'number',
|
|
25
|
+
description: 'Optional: The line number to start reading from'
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
required: [
|
|
29
|
+
'file_path'
|
|
30
|
+
]
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
Write: {
|
|
34
|
+
name: 'Write',
|
|
35
|
+
description: 'Writes content to a file. Creates new file or overwrites existing file.',
|
|
36
|
+
input_schema: {
|
|
37
|
+
type: 'object',
|
|
38
|
+
properties: {
|
|
39
|
+
file_path: {
|
|
40
|
+
type: 'string',
|
|
41
|
+
description: 'The absolute path to the file to write (must be absolute, not relative)'
|
|
42
|
+
},
|
|
43
|
+
content: {
|
|
44
|
+
type: 'string',
|
|
45
|
+
description: 'The content to write to the file'
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
required: [
|
|
49
|
+
'file_path',
|
|
50
|
+
'content'
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
Edit: {
|
|
55
|
+
name: 'Edit',
|
|
56
|
+
description: 'Performs exact string replacement in files. Must read file first before editing.',
|
|
57
|
+
input_schema: {
|
|
58
|
+
type: 'object',
|
|
59
|
+
properties: {
|
|
60
|
+
file_path: {
|
|
61
|
+
type: 'string',
|
|
62
|
+
description: 'The absolute path to the file to modify'
|
|
63
|
+
},
|
|
64
|
+
old_string: {
|
|
65
|
+
type: 'string',
|
|
66
|
+
description: 'The exact text to replace (must be unique in file)'
|
|
67
|
+
},
|
|
68
|
+
new_string: {
|
|
69
|
+
type: 'string',
|
|
70
|
+
description: 'The text to replace it with'
|
|
71
|
+
},
|
|
72
|
+
replace_all: {
|
|
73
|
+
type: 'boolean',
|
|
74
|
+
description: 'Optional: Replace all occurrences (default false)'
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
required: [
|
|
78
|
+
'file_path',
|
|
79
|
+
'old_string',
|
|
80
|
+
'new_string'
|
|
81
|
+
]
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
Bash: {
|
|
85
|
+
name: 'Bash',
|
|
86
|
+
description: 'Executes bash commands in a persistent shell session. For terminal operations like git, npm, docker.',
|
|
87
|
+
input_schema: {
|
|
88
|
+
type: 'object',
|
|
89
|
+
properties: {
|
|
90
|
+
command: {
|
|
91
|
+
type: 'string',
|
|
92
|
+
description: 'The bash command to execute'
|
|
93
|
+
},
|
|
94
|
+
description: {
|
|
95
|
+
type: 'string',
|
|
96
|
+
description: 'Clear, concise description of what this command does (5-10 words)'
|
|
97
|
+
},
|
|
98
|
+
timeout: {
|
|
99
|
+
type: 'number',
|
|
100
|
+
description: 'Optional timeout in milliseconds (max 600000, default 120000)'
|
|
101
|
+
},
|
|
102
|
+
run_in_background: {
|
|
103
|
+
type: 'boolean',
|
|
104
|
+
description: 'Optional: Run command in background (default false)'
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
required: [
|
|
108
|
+
'command'
|
|
109
|
+
]
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
TodoWrite: {
|
|
113
|
+
name: 'TodoWrite',
|
|
114
|
+
description: 'Creates and manages structured task list for tracking progress.',
|
|
115
|
+
input_schema: {
|
|
116
|
+
type: 'object',
|
|
117
|
+
properties: {
|
|
118
|
+
todos: {
|
|
119
|
+
type: 'array',
|
|
120
|
+
description: 'Array of todo items with content, status, and activeForm',
|
|
121
|
+
items: {
|
|
122
|
+
type: 'object',
|
|
123
|
+
properties: {
|
|
124
|
+
content: {
|
|
125
|
+
type: 'string',
|
|
126
|
+
description: 'Task description in imperative form (e.g., "Run tests")'
|
|
127
|
+
},
|
|
128
|
+
status: {
|
|
129
|
+
type: 'string',
|
|
130
|
+
enum: [
|
|
131
|
+
'pending',
|
|
132
|
+
'in_progress',
|
|
133
|
+
'completed'
|
|
134
|
+
],
|
|
135
|
+
description: 'Task status'
|
|
136
|
+
},
|
|
137
|
+
activeForm: {
|
|
138
|
+
type: 'string',
|
|
139
|
+
description: 'Present continuous form shown during execution (e.g., "Running tests")'
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
required: [
|
|
143
|
+
'content',
|
|
144
|
+
'status',
|
|
145
|
+
'activeForm'
|
|
146
|
+
]
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
required: [
|
|
151
|
+
'todos'
|
|
152
|
+
]
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
Glob: {
|
|
156
|
+
name: 'Glob',
|
|
157
|
+
description: 'Fast file pattern matching. Supports glob patterns like "**/*.js".',
|
|
158
|
+
input_schema: {
|
|
159
|
+
type: 'object',
|
|
160
|
+
properties: {
|
|
161
|
+
pattern: {
|
|
162
|
+
type: 'string',
|
|
163
|
+
description: 'The glob pattern to match files against'
|
|
164
|
+
},
|
|
165
|
+
path: {
|
|
166
|
+
type: 'string',
|
|
167
|
+
description: 'Optional: Directory to search in (defaults to current working directory)'
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
required: [
|
|
171
|
+
'pattern'
|
|
172
|
+
]
|
|
173
|
+
}
|
|
174
|
+
},
|
|
175
|
+
Grep: {
|
|
176
|
+
name: 'Grep',
|
|
177
|
+
description: 'Powerful search tool built on ripgrep. Supports regex patterns.',
|
|
178
|
+
input_schema: {
|
|
179
|
+
type: 'object',
|
|
180
|
+
properties: {
|
|
181
|
+
pattern: {
|
|
182
|
+
type: 'string',
|
|
183
|
+
description: 'The regular expression pattern to search for'
|
|
184
|
+
},
|
|
185
|
+
path: {
|
|
186
|
+
type: 'string',
|
|
187
|
+
description: 'Optional: File or directory to search in'
|
|
188
|
+
},
|
|
189
|
+
output_mode: {
|
|
190
|
+
type: 'string',
|
|
191
|
+
enum: [
|
|
192
|
+
'content',
|
|
193
|
+
'files_with_matches',
|
|
194
|
+
'count'
|
|
195
|
+
],
|
|
196
|
+
description: 'Output mode (default: files_with_matches)'
|
|
197
|
+
},
|
|
198
|
+
glob: {
|
|
199
|
+
type: 'string',
|
|
200
|
+
description: 'Optional: Glob pattern to filter files'
|
|
201
|
+
},
|
|
202
|
+
type: {
|
|
203
|
+
type: 'string',
|
|
204
|
+
description: 'Optional: File type (js, py, rust, etc.)'
|
|
205
|
+
},
|
|
206
|
+
'-i': {
|
|
207
|
+
type: 'boolean',
|
|
208
|
+
description: 'Case insensitive search'
|
|
209
|
+
},
|
|
210
|
+
'-n': {
|
|
211
|
+
type: 'boolean',
|
|
212
|
+
description: 'Show line numbers (requires output_mode: content)'
|
|
213
|
+
},
|
|
214
|
+
'-A': {
|
|
215
|
+
type: 'number',
|
|
216
|
+
description: 'Lines to show after match (requires output_mode: content)'
|
|
217
|
+
},
|
|
218
|
+
'-B': {
|
|
219
|
+
type: 'number',
|
|
220
|
+
description: 'Lines to show before match (requires output_mode: content)'
|
|
221
|
+
},
|
|
222
|
+
'-C': {
|
|
223
|
+
type: 'number',
|
|
224
|
+
description: 'Lines to show before and after match (requires output_mode: content)'
|
|
225
|
+
}
|
|
226
|
+
},
|
|
227
|
+
required: [
|
|
228
|
+
'pattern'
|
|
229
|
+
]
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
};
|
|
233
|
+
/**
|
|
234
|
+
* Convert agent tool names to Anthropic API tool definitions
|
|
235
|
+
*/ export function convertToolNames(toolNames) {
|
|
236
|
+
const definitions = [];
|
|
237
|
+
for (const toolName of toolNames){
|
|
238
|
+
const definition = TOOL_REGISTRY[toolName];
|
|
239
|
+
if (definition) {
|
|
240
|
+
definitions.push(definition);
|
|
241
|
+
} else {
|
|
242
|
+
console.warn(`[tool-definitions] Unknown tool: ${toolName}`);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
return definitions;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Get tool definition by name
|
|
249
|
+
*/ export function getToolDefinition(toolName) {
|
|
250
|
+
return TOOL_REGISTRY[toolName];
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Check if tool name is valid
|
|
254
|
+
*/ export function isValidTool(toolName) {
|
|
255
|
+
return toolName in TOOL_REGISTRY;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Get all available tool names
|
|
259
|
+
*/ export function getAvailableTools() {
|
|
260
|
+
return Object.keys(TOOL_REGISTRY);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
//# sourceMappingURL=tool-definitions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cli/tool-definitions.ts"],"sourcesContent":["/**\r\n * Tool Definitions for CLI-Spawned Agents\r\n *\r\n * Converts agent markdown tool names to Anthropic API tool definitions.\r\n * Implements core tools: Read, Write, Edit, Bash, TodoWrite\r\n */\r\n\r\nexport interface ToolDefinition {\r\n name: string;\r\n description: string;\r\n input_schema: {\r\n type: 'object';\r\n properties: Record<string, any>;\r\n required: string[];\r\n };\r\n}\r\n\r\n/**\r\n * Tool registry mapping agent tool names to Anthropic API format\r\n */\r\nconst TOOL_REGISTRY: Record<string, ToolDefinition> = {\r\n Read: {\r\n name: 'Read',\r\n description: 'Reads a file from the local filesystem. Can access any file by absolute path.',\r\n input_schema: {\r\n type: 'object',\r\n properties: {\r\n file_path: {\r\n type: 'string',\r\n description: 'The absolute path to the file to read'\r\n },\r\n limit: {\r\n type: 'number',\r\n description: 'Optional: The number of lines to read (for large files)'\r\n },\r\n offset: {\r\n type: 'number',\r\n description: 'Optional: The line number to start reading from'\r\n }\r\n },\r\n required: ['file_path']\r\n }\r\n },\r\n\r\n Write: {\r\n name: 'Write',\r\n description: 'Writes content to a file. Creates new file or overwrites existing file.',\r\n input_schema: {\r\n type: 'object',\r\n properties: {\r\n file_path: {\r\n type: 'string',\r\n description: 'The absolute path to the file to write (must be absolute, not relative)'\r\n },\r\n content: {\r\n type: 'string',\r\n description: 'The content to write to the file'\r\n }\r\n },\r\n required: ['file_path', 'content']\r\n }\r\n },\r\n\r\n Edit: {\r\n name: 'Edit',\r\n description: 'Performs exact string replacement in files. Must read file first before editing.',\r\n input_schema: {\r\n type: 'object',\r\n properties: {\r\n file_path: {\r\n type: 'string',\r\n description: 'The absolute path to the file to modify'\r\n },\r\n old_string: {\r\n type: 'string',\r\n description: 'The exact text to replace (must be unique in file)'\r\n },\r\n new_string: {\r\n type: 'string',\r\n description: 'The text to replace it with'\r\n },\r\n replace_all: {\r\n type: 'boolean',\r\n description: 'Optional: Replace all occurrences (default false)'\r\n }\r\n },\r\n required: ['file_path', 'old_string', 'new_string']\r\n }\r\n },\r\n\r\n Bash: {\r\n name: 'Bash',\r\n description: 'Executes bash commands in a persistent shell session. For terminal operations like git, npm, docker.',\r\n input_schema: {\r\n type: 'object',\r\n properties: {\r\n command: {\r\n type: 'string',\r\n description: 'The bash command to execute'\r\n },\r\n description: {\r\n type: 'string',\r\n description: 'Clear, concise description of what this command does (5-10 words)'\r\n },\r\n timeout: {\r\n type: 'number',\r\n description: 'Optional timeout in milliseconds (max 600000, default 120000)'\r\n },\r\n run_in_background: {\r\n type: 'boolean',\r\n description: 'Optional: Run command in background (default false)'\r\n }\r\n },\r\n required: ['command']\r\n }\r\n },\r\n\r\n TodoWrite: {\r\n name: 'TodoWrite',\r\n description: 'Creates and manages structured task list for tracking progress.',\r\n input_schema: {\r\n type: 'object',\r\n properties: {\r\n todos: {\r\n type: 'array',\r\n description: 'Array of todo items with content, status, and activeForm',\r\n items: {\r\n type: 'object',\r\n properties: {\r\n content: {\r\n type: 'string',\r\n description: 'Task description in imperative form (e.g., \"Run tests\")'\r\n },\r\n status: {\r\n type: 'string',\r\n enum: ['pending', 'in_progress', 'completed'],\r\n description: 'Task status'\r\n },\r\n activeForm: {\r\n type: 'string',\r\n description: 'Present continuous form shown during execution (e.g., \"Running tests\")'\r\n }\r\n },\r\n required: ['content', 'status', 'activeForm']\r\n }\r\n }\r\n },\r\n required: ['todos']\r\n }\r\n },\r\n\r\n Glob: {\r\n name: 'Glob',\r\n description: 'Fast file pattern matching. Supports glob patterns like \"**/*.js\".',\r\n input_schema: {\r\n type: 'object',\r\n properties: {\r\n pattern: {\r\n type: 'string',\r\n description: 'The glob pattern to match files against'\r\n },\r\n path: {\r\n type: 'string',\r\n description: 'Optional: Directory to search in (defaults to current working directory)'\r\n }\r\n },\r\n required: ['pattern']\r\n }\r\n },\r\n\r\n Grep: {\r\n name: 'Grep',\r\n description: 'Powerful search tool built on ripgrep. Supports regex patterns.',\r\n input_schema: {\r\n type: 'object',\r\n properties: {\r\n pattern: {\r\n type: 'string',\r\n description: 'The regular expression pattern to search for'\r\n },\r\n path: {\r\n type: 'string',\r\n description: 'Optional: File or directory to search in'\r\n },\r\n output_mode: {\r\n type: 'string',\r\n enum: ['content', 'files_with_matches', 'count'],\r\n description: 'Output mode (default: files_with_matches)'\r\n },\r\n glob: {\r\n type: 'string',\r\n description: 'Optional: Glob pattern to filter files'\r\n },\r\n type: {\r\n type: 'string',\r\n description: 'Optional: File type (js, py, rust, etc.)'\r\n },\r\n '-i': {\r\n type: 'boolean',\r\n description: 'Case insensitive search'\r\n },\r\n '-n': {\r\n type: 'boolean',\r\n description: 'Show line numbers (requires output_mode: content)'\r\n },\r\n '-A': {\r\n type: 'number',\r\n description: 'Lines to show after match (requires output_mode: content)'\r\n },\r\n '-B': {\r\n type: 'number',\r\n description: 'Lines to show before match (requires output_mode: content)'\r\n },\r\n '-C': {\r\n type: 'number',\r\n description: 'Lines to show before and after match (requires output_mode: content)'\r\n }\r\n },\r\n required: ['pattern']\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Convert agent tool names to Anthropic API tool definitions\r\n */\r\nexport function convertToolNames(toolNames: string[]): ToolDefinition[] {\r\n const definitions: ToolDefinition[] = [];\r\n\r\n for (const toolName of toolNames) {\r\n const definition = TOOL_REGISTRY[toolName];\r\n if (definition) {\r\n definitions.push(definition);\r\n } else {\r\n console.warn(`[tool-definitions] Unknown tool: ${toolName}`);\r\n }\r\n }\r\n\r\n return definitions;\r\n}\r\n\r\n/**\r\n * Get tool definition by name\r\n */\r\nexport function getToolDefinition(toolName: string): ToolDefinition | undefined {\r\n return TOOL_REGISTRY[toolName];\r\n}\r\n\r\n/**\r\n * Check if tool name is valid\r\n */\r\nexport function isValidTool(toolName: string): boolean {\r\n return toolName in TOOL_REGISTRY;\r\n}\r\n\r\n/**\r\n * Get all available tool names\r\n */\r\nexport function getAvailableTools(): string[] {\r\n return Object.keys(TOOL_REGISTRY);\r\n}\r\n"],"names":["TOOL_REGISTRY","Read","name","description","input_schema","type","properties","file_path","limit","offset","required","Write","content","Edit","old_string","new_string","replace_all","Bash","command","timeout","run_in_background","TodoWrite","todos","items","status","enum","activeForm","Glob","pattern","path","Grep","output_mode","glob","convertToolNames","toolNames","definitions","toolName","definition","push","console","warn","getToolDefinition","isValidTool","getAvailableTools","Object","keys"],"mappings":"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"}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Executor for CLI-Spawned Agents
|
|
3
|
+
*
|
|
4
|
+
* Executes tools requested by agents via Anthropic API tool_use blocks.
|
|
5
|
+
* Implements Read, Write, Edit, Bash, TodoWrite, Glob, Grep.
|
|
6
|
+
*/ import fs from 'fs/promises';
|
|
7
|
+
import { exec } from 'child_process';
|
|
8
|
+
import { promisify } from 'util';
|
|
9
|
+
import { glob } from 'glob';
|
|
10
|
+
const execAsync = promisify(exec);
|
|
11
|
+
/**
|
|
12
|
+
* Execute a single tool and return result
|
|
13
|
+
*/ export async function executeTool(toolUse) {
|
|
14
|
+
console.log(`[tool-executor] Executing tool: ${toolUse.name}`);
|
|
15
|
+
console.log(`[tool-executor] Tool use ID: ${toolUse.id}`);
|
|
16
|
+
try {
|
|
17
|
+
let result;
|
|
18
|
+
switch(toolUse.name){
|
|
19
|
+
case 'Read':
|
|
20
|
+
result = await executeRead(toolUse.input);
|
|
21
|
+
break;
|
|
22
|
+
case 'Write':
|
|
23
|
+
result = await executeWrite(toolUse.input);
|
|
24
|
+
break;
|
|
25
|
+
case 'Edit':
|
|
26
|
+
result = await executeEdit(toolUse.input);
|
|
27
|
+
break;
|
|
28
|
+
case 'Bash':
|
|
29
|
+
result = await executeBash(toolUse.input);
|
|
30
|
+
break;
|
|
31
|
+
case 'TodoWrite':
|
|
32
|
+
result = await executeTodoWrite(toolUse.input);
|
|
33
|
+
break;
|
|
34
|
+
case 'Glob':
|
|
35
|
+
result = await executeGlob(toolUse.input);
|
|
36
|
+
break;
|
|
37
|
+
case 'Grep':
|
|
38
|
+
result = await executeGrep(toolUse.input);
|
|
39
|
+
break;
|
|
40
|
+
default:
|
|
41
|
+
throw new Error(`Unknown tool: ${toolUse.name}`);
|
|
42
|
+
}
|
|
43
|
+
console.log(`[tool-executor] ✓ Tool executed successfully`);
|
|
44
|
+
return {
|
|
45
|
+
type: 'tool_result',
|
|
46
|
+
tool_use_id: toolUse.id,
|
|
47
|
+
content: result
|
|
48
|
+
};
|
|
49
|
+
} catch (error) {
|
|
50
|
+
console.error(`[tool-executor] ✗ Tool execution failed:`, error);
|
|
51
|
+
return {
|
|
52
|
+
type: 'tool_result',
|
|
53
|
+
tool_use_id: toolUse.id,
|
|
54
|
+
content: error instanceof Error ? error.message : String(error),
|
|
55
|
+
is_error: true
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Execute Read tool
|
|
61
|
+
*/ async function executeRead(input) {
|
|
62
|
+
const { file_path, offset, limit } = input;
|
|
63
|
+
if (!file_path) {
|
|
64
|
+
throw new Error('file_path parameter is required');
|
|
65
|
+
}
|
|
66
|
+
const content = await fs.readFile(file_path, 'utf-8');
|
|
67
|
+
const lines = content.split('\n');
|
|
68
|
+
// Apply offset and limit if provided
|
|
69
|
+
const startLine = offset ? Number(offset) - 1 : 0;
|
|
70
|
+
const endLine = limit ? startLine + Number(limit) : lines.length;
|
|
71
|
+
const selectedLines = lines.slice(startLine, endLine);
|
|
72
|
+
// Format with line numbers (cat -n style)
|
|
73
|
+
const formatted = selectedLines.map((line, idx)=>`${String(startLine + idx + 1).padStart(6)}→${line}`).join('\n');
|
|
74
|
+
return formatted;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Execute Write tool
|
|
78
|
+
*/ async function executeWrite(input) {
|
|
79
|
+
const { file_path, content } = input;
|
|
80
|
+
if (!file_path) {
|
|
81
|
+
throw new Error('file_path parameter is required');
|
|
82
|
+
}
|
|
83
|
+
if (content === undefined) {
|
|
84
|
+
throw new Error('content parameter is required');
|
|
85
|
+
}
|
|
86
|
+
await fs.writeFile(file_path, content, 'utf-8');
|
|
87
|
+
return `File written successfully: ${file_path}`;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Execute Edit tool
|
|
91
|
+
*/ async function executeEdit(input) {
|
|
92
|
+
const { file_path, old_string, new_string, replace_all } = input;
|
|
93
|
+
if (!file_path) {
|
|
94
|
+
throw new Error('file_path parameter is required');
|
|
95
|
+
}
|
|
96
|
+
if (!old_string) {
|
|
97
|
+
throw new Error('old_string parameter is required');
|
|
98
|
+
}
|
|
99
|
+
if (new_string === undefined) {
|
|
100
|
+
throw new Error('new_string parameter is required');
|
|
101
|
+
}
|
|
102
|
+
// Read file
|
|
103
|
+
const content = await fs.readFile(file_path, 'utf-8');
|
|
104
|
+
// Perform replacement
|
|
105
|
+
let newContent;
|
|
106
|
+
if (replace_all) {
|
|
107
|
+
// Replace all occurrences
|
|
108
|
+
newContent = content.split(old_string).join(new_string);
|
|
109
|
+
} else {
|
|
110
|
+
// Replace first occurrence only (must be unique)
|
|
111
|
+
const occurrences = content.split(old_string).length - 1;
|
|
112
|
+
if (occurrences === 0) {
|
|
113
|
+
throw new Error('old_string not found in file');
|
|
114
|
+
}
|
|
115
|
+
if (occurrences > 1) {
|
|
116
|
+
throw new Error(`old_string appears ${occurrences} times. Must be unique or use replace_all: true`);
|
|
117
|
+
}
|
|
118
|
+
newContent = content.replace(old_string, new_string);
|
|
119
|
+
}
|
|
120
|
+
// Write back
|
|
121
|
+
await fs.writeFile(file_path, newContent, 'utf-8');
|
|
122
|
+
return `File edited successfully: ${file_path}`;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Execute Bash tool
|
|
126
|
+
*/ async function executeBash(input) {
|
|
127
|
+
const { command, timeout, run_in_background } = input;
|
|
128
|
+
if (!command) {
|
|
129
|
+
throw new Error('command parameter is required');
|
|
130
|
+
}
|
|
131
|
+
// DEBUG: Log bash command execution details
|
|
132
|
+
console.log(`[tool-executor] Bash command: ${command}`);
|
|
133
|
+
console.log(`[tool-executor] Timeout: ${timeout || 120000}ms`);
|
|
134
|
+
console.log(`[tool-executor] Background: ${run_in_background || false}`);
|
|
135
|
+
const timeoutMs = timeout ? Number(timeout) : 120000; // 2 minutes default
|
|
136
|
+
if (run_in_background) {
|
|
137
|
+
// Start background process and return immediately
|
|
138
|
+
exec(command);
|
|
139
|
+
return `Command started in background: ${command}`;
|
|
140
|
+
}
|
|
141
|
+
// Execute synchronously with timeout
|
|
142
|
+
const { stdout, stderr } = await execAsync(command, {
|
|
143
|
+
timeout: timeoutMs,
|
|
144
|
+
maxBuffer: 10 * 1024 * 1024 // 10MB buffer
|
|
145
|
+
});
|
|
146
|
+
return stdout + stderr;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Execute TodoWrite tool
|
|
150
|
+
*/ async function executeTodoWrite(input) {
|
|
151
|
+
const { todos } = input;
|
|
152
|
+
if (!Array.isArray(todos)) {
|
|
153
|
+
throw new Error('todos parameter must be an array');
|
|
154
|
+
}
|
|
155
|
+
// Validate todo structure
|
|
156
|
+
for (const todo of todos){
|
|
157
|
+
if (!todo.content || !todo.status || !todo.activeForm) {
|
|
158
|
+
throw new Error('Each todo must have content, status, and activeForm');
|
|
159
|
+
}
|
|
160
|
+
if (![
|
|
161
|
+
'pending',
|
|
162
|
+
'in_progress',
|
|
163
|
+
'completed'
|
|
164
|
+
].includes(todo.status)) {
|
|
165
|
+
throw new Error('Invalid status. Must be pending, in_progress, or completed');
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// Format todos for display
|
|
169
|
+
const formatted = todos.map((todo, idx)=>{
|
|
170
|
+
const status = todo.status === 'completed' ? '✓' : todo.status === 'in_progress' ? '⚡' : '○';
|
|
171
|
+
return `${idx + 1}. [${status}] ${todo.content}`;
|
|
172
|
+
}).join('\n');
|
|
173
|
+
return `Todo list updated:\n${formatted}`;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Execute Glob tool
|
|
177
|
+
*/ async function executeGlob(input) {
|
|
178
|
+
const { pattern, path } = input;
|
|
179
|
+
if (!pattern) {
|
|
180
|
+
throw new Error('pattern parameter is required');
|
|
181
|
+
}
|
|
182
|
+
const cwd = path || process.cwd();
|
|
183
|
+
const files = await glob(pattern, {
|
|
184
|
+
cwd,
|
|
185
|
+
nodir: true
|
|
186
|
+
});
|
|
187
|
+
if (files.length === 0) {
|
|
188
|
+
return 'No files found';
|
|
189
|
+
}
|
|
190
|
+
return files.join('\n');
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Execute Grep tool
|
|
194
|
+
*/ async function executeGrep(input) {
|
|
195
|
+
const { pattern, path, output_mode, glob: globPattern, type } = input;
|
|
196
|
+
if (!pattern) {
|
|
197
|
+
throw new Error('pattern parameter is required');
|
|
198
|
+
}
|
|
199
|
+
// Build ripgrep command
|
|
200
|
+
const args = [
|
|
201
|
+
'rg'
|
|
202
|
+
];
|
|
203
|
+
// Output mode
|
|
204
|
+
if (output_mode === 'files_with_matches' || !output_mode) {
|
|
205
|
+
args.push('-l'); // List files with matches
|
|
206
|
+
} else if (output_mode === 'count') {
|
|
207
|
+
args.push('-c'); // Count matches per file
|
|
208
|
+
}
|
|
209
|
+
// Default is content (no flag)
|
|
210
|
+
// Optional flags
|
|
211
|
+
if (input['-i']) args.push('-i'); // Case insensitive
|
|
212
|
+
if (input['-n']) args.push('-n'); // Line numbers
|
|
213
|
+
if (input['-A']) args.push(`-A${input['-A']}`); // After context
|
|
214
|
+
if (input['-B']) args.push(`-B${input['-B']}`); // Before context
|
|
215
|
+
if (input['-C']) args.push(`-C${input['-C']}`); // Context
|
|
216
|
+
// File filtering
|
|
217
|
+
if (globPattern) args.push('--glob', globPattern);
|
|
218
|
+
if (type) args.push('--type', type);
|
|
219
|
+
// Pattern and path
|
|
220
|
+
args.push(pattern);
|
|
221
|
+
if (path) args.push(path);
|
|
222
|
+
const command = args.join(' ');
|
|
223
|
+
try {
|
|
224
|
+
const { stdout } = await execAsync(command, {
|
|
225
|
+
maxBuffer: 10 * 1024 * 1024 // 10MB buffer
|
|
226
|
+
});
|
|
227
|
+
return stdout || 'No matches found';
|
|
228
|
+
} catch (error) {
|
|
229
|
+
// ripgrep exits with code 1 if no matches found
|
|
230
|
+
if (error.code === 1) {
|
|
231
|
+
return 'No matches found';
|
|
232
|
+
}
|
|
233
|
+
throw error;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Execute multiple tools in sequence
|
|
238
|
+
*/ export async function executeTools(toolUses) {
|
|
239
|
+
const results = [];
|
|
240
|
+
for (const toolUse of toolUses){
|
|
241
|
+
const result = await executeTool(toolUse);
|
|
242
|
+
results.push(result);
|
|
243
|
+
}
|
|
244
|
+
return results;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
//# sourceMappingURL=tool-executor.js.map
|