claude-flow-novice 2.15.4 → 2.15.6
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/cfn-extras/.gs-api-quota.json +16 -0
- package/.claude/cfn-extras/.gs-progress-state.json +22 -0
- package/.claude/cfn-extras/GOOGLE_SHEETS_IMPLEMENTATION_SUMMARY.md +414 -0
- package/.claude/cfn-extras/agents/google-sheets/README.md +114 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-advanced-analytics-specialist.md +288 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-api-integrator.md +127 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-automation-scripting-specialist.md +195 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-business-validator.md +179 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-collaboration-security-specialist.md +240 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-coordinator.md +214 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-data-transformer.md +127 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-data-validation-quality-specialist.md +177 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-data-validator.md +119 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-data-visualization-specialist.md +135 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-design-layout-specialist.md +109 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-formula-engineer.md +127 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-formula-engineering-specialist.md +138 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-formula-validator.md +128 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-generalist.md +645 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-integration-api-specialist.md +258 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-performance-analyst.md +125 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-performance-optimization-specialist.md +211 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-schema-designer.md +130 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-template-architecture-specialist.md +259 -0
- package/.claude/cfn-extras/docs/GOOGLE_SHEETS_CFN_LOOP.md +617 -0
- package/.claude/cfn-extras/skills/GOOGLE_SHEETS_SKILLS_README.md +453 -0
- package/.claude/cfn-extras/skills/google-sheets-api-coordinator/SKILL.md +272 -0
- package/.claude/cfn-extras/skills/google-sheets-api-coordinator/api-call.sh +254 -0
- package/.claude/cfn-extras/skills/google-sheets-api-coordinator/test.sh +174 -0
- package/.claude/cfn-extras/skills/google-sheets-api-coordinator/validate.sh +98 -0
- package/.claude/cfn-extras/skills/google-sheets-decomposition/SKILL.md +269 -0
- package/.claude/cfn-extras/skills/google-sheets-decomposition/decompose.sh +313 -0
- package/.claude/cfn-extras/skills/google-sheets-formula-builder/SKILL.md +237 -0
- package/.claude/cfn-extras/skills/google-sheets-formula-builder/build-formula.sh +220 -0
- package/.claude/cfn-extras/skills/google-sheets-formula-builder/test.sh +172 -0
- package/.claude/cfn-extras/skills/google-sheets-formula-builder/validate.sh +98 -0
- package/.claude/cfn-extras/skills/google-sheets-progress/SKILL.md +287 -0
- package/.claude/cfn-extras/skills/google-sheets-progress/test.sh +385 -0
- package/.claude/cfn-extras/skills/google-sheets-progress/track-progress.sh +516 -0
- package/.claude/cfn-extras/skills/google-sheets-progress/validate.sh +119 -0
- package/.claude/cfn-extras/skills/google-sheets-sprint-order/SKILL.md +277 -0
- package/.claude/cfn-extras/skills/google-sheets-sprint-order/order-sprints.sh +233 -0
- package/.claude/cfn-extras/skills/google-sheets-validation/SKILL.md +352 -0
- package/.claude/cfn-extras/skills/google-sheets-validation/test.sh +355 -0
- package/.claude/cfn-extras/skills/google-sheets-validation/validate-state.sh +374 -0
- package/.claude/cfn-extras/skills/google-sheets-validation/validate.sh +128 -0
- package/.claude/commands/cfn-context.md +10 -0
- package/.claude/commands/cfn-loop-cli.md +44 -14
- package/.claude/commands/google-sheets/google-sheets-loop.md +289 -0
- package/.claude/skills/cfn-agent-selector/SKILL.md +143 -0
- package/.claude/skills/cfn-agent-selector/select-agents.sh +94 -0
- package/.claude/skills/cfn-agent-spawning/get-agent-provider-env.sh +22 -2
- package/.claude/skills/cfn-docker-agent-spawning/spawn-agent.sh +21 -2
- package/.claude/skills/cfn-docker-loop-orchestration/orchestrate.sh +11 -5
- package/.claude/skills/cfn-docker-redis-coordination/MIGRATION_SUMMARY.md +348 -0
- package/.claude/skills/cfn-docker-redis-coordination/README.md +294 -0
- package/.claude/skills/cfn-docker-redis-coordination/jest.config.js +37 -0
- package/.claude/skills/cfn-docker-redis-coordination/package-lock.json +5259 -0
- package/.claude/skills/cfn-docker-redis-coordination/package.json +40 -0
- package/.claude/skills/cfn-docker-redis-coordination/src/coordinator.ts +801 -0
- package/.claude/skills/cfn-docker-redis-coordination/src/index.ts +42 -0
- package/.claude/skills/cfn-docker-redis-coordination/src/types.ts +351 -0
- package/.claude/skills/cfn-docker-redis-coordination/tests/coordinator.test.ts +1464 -0
- package/.claude/skills/cfn-docker-redis-coordination/tsconfig.json +30 -0
- package/.claude/skills/cfn-loop-orchestration/.eslintrc.js +56 -0
- package/.claude/skills/cfn-loop-orchestration/.prettierrc.json +18 -0
- package/.claude/skills/cfn-loop-orchestration/README.md +149 -41
- package/.claude/skills/cfn-loop-orchestration/jest.config.js +67 -0
- package/.claude/skills/cfn-loop-orchestration/orchestrate-wrapper.sh +268 -0
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +147 -16
- package/.claude/skills/cfn-loop-orchestration/package-lock.json +5470 -0
- package/.claude/skills/cfn-loop-orchestration/package.json +49 -0
- package/.claude/skills/cfn-loop-orchestration/src/agent-spawner/agent-spawner.ts +34 -0
- package/.claude/skills/cfn-loop-orchestration/src/gate-checker/gate-checker.ts +36 -0
- package/.claude/skills/cfn-loop-orchestration/src/index.ts +14 -0
- package/.claude/skills/cfn-loop-orchestration/src/orchestrator/orchestrator.ts +31 -0
- package/.claude/skills/cfn-loop-orchestration/src/redis/redis-coordinator.ts +72 -0
- package/.claude/skills/cfn-loop-orchestration/src/types.ts +188 -0
- package/.claude/skills/cfn-loop-orchestration/src/utils/logger.ts +32 -0
- package/.claude/skills/cfn-loop-orchestration/tests/setup.ts +22 -0
- package/.claude/skills/cfn-loop-orchestration/tests/types.test.ts +132 -0
- package/.claude/skills/cfn-loop-orchestration/tsconfig.json +54 -0
- package/.claude/skills/cfn-redis-coordination/bash-wrappers/store-context.sh +23 -0
- package/.claude/skills/cfn-redis-coordination/dist/agent-logger.d.ts +92 -0
- package/.claude/skills/cfn-redis-coordination/dist/agent-logger.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/agent-logger.js +329 -0
- package/.claude/skills/cfn-redis-coordination/dist/agent-logger.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/agent-recovery.d.ts +75 -0
- package/.claude/skills/cfn-redis-coordination/dist/agent-recovery.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/agent-recovery.js +302 -0
- package/.claude/skills/cfn-redis-coordination/dist/agent-recovery.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/completion-reporter.d.ts +58 -0
- package/.claude/skills/cfn-redis-coordination/dist/completion-reporter.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/completion-reporter.js +237 -0
- package/.claude/skills/cfn-redis-coordination/dist/completion-reporter.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/context-manager.d.ts +63 -0
- package/.claude/skills/cfn-redis-coordination/dist/context-manager.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/context-manager.js +230 -0
- package/.claude/skills/cfn-redis-coordination/dist/context-manager.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/index.d.ts +45 -0
- package/.claude/skills/cfn-redis-coordination/dist/index.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/index.js +114 -0
- package/.claude/skills/cfn-redis-coordination/dist/index.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/mode-detector.d.ts +31 -0
- package/.claude/skills/cfn-redis-coordination/dist/mode-detector.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/mode-detector.js +185 -0
- package/.claude/skills/cfn-redis-coordination/dist/mode-detector.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/redis-client.d.ts +191 -0
- package/.claude/skills/cfn-redis-coordination/dist/redis-client.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/redis-client.js +509 -0
- package/.claude/skills/cfn-redis-coordination/dist/redis-client.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/result-collector.d.ts +75 -0
- package/.claude/skills/cfn-redis-coordination/dist/result-collector.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/result-collector.js +281 -0
- package/.claude/skills/cfn-redis-coordination/dist/result-collector.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/swarm-manager.d.ts +75 -0
- package/.claude/skills/cfn-redis-coordination/dist/swarm-manager.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/swarm-manager.js +354 -0
- package/.claude/skills/cfn-redis-coordination/dist/swarm-manager.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/task-analyzer.d.ts +62 -0
- package/.claude/skills/cfn-redis-coordination/dist/task-analyzer.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/task-analyzer.js +305 -0
- package/.claude/skills/cfn-redis-coordination/dist/task-analyzer.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/task-executor.d.ts +97 -0
- package/.claude/skills/cfn-redis-coordination/dist/task-executor.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/task-executor.js +283 -0
- package/.claude/skills/cfn-redis-coordination/dist/task-executor.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/types.d.ts +176 -0
- package/.claude/skills/cfn-redis-coordination/dist/types.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/types.js +81 -0
- package/.claude/skills/cfn-redis-coordination/dist/types.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/waiting-coordinator.d.ts +86 -0
- package/.claude/skills/cfn-redis-coordination/dist/waiting-coordinator.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/waiting-coordinator.js +419 -0
- package/.claude/skills/cfn-redis-coordination/dist/waiting-coordinator.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/docs/migration/PHASE_3_REDIS_COORDINATION_COMPLETION_REPORT.md +553 -0
- package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +3 -2
- package/.claude/skills/cfn-redis-coordination/jest.config.js +23 -0
- package/.claude/skills/cfn-redis-coordination/package-lock.json +5272 -0
- package/.claude/skills/cfn-redis-coordination/package.json +45 -0
- package/.claude/skills/cfn-redis-coordination/redis-cli-wrapper.sh +21 -8
- package/.claude/skills/cfn-redis-coordination/redis-functions.sh +3 -2
- package/.claude/skills/cfn-redis-coordination/src/agent-logger.ts +446 -0
- package/.claude/skills/cfn-redis-coordination/src/agent-recovery.ts +454 -0
- package/.claude/skills/cfn-redis-coordination/src/completion-reporter.ts +396 -0
- package/.claude/skills/cfn-redis-coordination/src/context-manager.ts +327 -0
- package/.claude/skills/cfn-redis-coordination/src/index.ts +82 -0
- package/.claude/skills/cfn-redis-coordination/src/mode-detector.ts +155 -0
- package/.claude/skills/cfn-redis-coordination/src/redis/redis-client.ts +305 -0
- package/.claude/skills/cfn-redis-coordination/src/redis/redis-functions.ts +283 -0
- package/.claude/skills/cfn-redis-coordination/src/redis-client.ts +654 -0
- package/.claude/skills/cfn-redis-coordination/src/result-collector.ts +437 -0
- package/.claude/skills/cfn-redis-coordination/src/swarm-manager.ts +494 -0
- package/.claude/skills/cfn-redis-coordination/src/task-analyzer.ts +404 -0
- package/.claude/skills/cfn-redis-coordination/src/task-executor.ts +423 -0
- package/.claude/skills/cfn-redis-coordination/src/types.ts +235 -0
- package/.claude/skills/cfn-redis-coordination/src/waiting-coordinator.ts +587 -0
- package/.claude/skills/cfn-redis-coordination/test-connection-attempts.js +70 -0
- package/.claude/skills/cfn-redis-coordination/test-mode-simple.js +121 -0
- package/.claude/skills/cfn-redis-coordination/test-redis-check.js +84 -0
- package/.claude/skills/cfn-redis-coordination/test-task-mode-redis.cjs +391 -0
- package/.claude/skills/cfn-redis-coordination/tests/coordination.test.ts +779 -0
- package/.claude/skills/cfn-redis-coordination/tsconfig.json +31 -0
- package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +172 -2
- package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +1 -1
- package/claude-assets/agents/custom/cfn-redis-operations.md +530 -0
- package/claude-assets/agents/custom/cfn-system-expert.md +77 -0
- package/claude-assets/cfn-extras/.gs-api-quota.json +16 -0
- package/claude-assets/cfn-extras/.gs-progress-state.json +22 -0
- package/claude-assets/cfn-extras/GOOGLE_SHEETS_IMPLEMENTATION_SUMMARY.md +414 -0
- package/claude-assets/cfn-extras/agents/google-sheets/README.md +114 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-advanced-analytics-specialist.md +288 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-api-integrator.md +127 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-automation-scripting-specialist.md +195 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-business-validator.md +179 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-collaboration-security-specialist.md +240 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-coordinator.md +214 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-data-transformer.md +127 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-data-validation-quality-specialist.md +177 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-data-validator.md +119 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-data-visualization-specialist.md +135 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-design-layout-specialist.md +109 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-formula-engineer.md +127 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-formula-engineering-specialist.md +138 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-formula-validator.md +128 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-generalist.md +645 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-integration-api-specialist.md +258 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-performance-analyst.md +125 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-performance-optimization-specialist.md +211 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-schema-designer.md +130 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-template-architecture-specialist.md +259 -0
- package/claude-assets/cfn-extras/docs/GOOGLE_SHEETS_CFN_LOOP.md +617 -0
- package/claude-assets/cfn-extras/skills/GOOGLE_SHEETS_SKILLS_README.md +453 -0
- package/claude-assets/cfn-extras/skills/google-sheets-api-coordinator/SKILL.md +272 -0
- package/claude-assets/cfn-extras/skills/google-sheets-api-coordinator/api-call.sh +254 -0
- package/claude-assets/cfn-extras/skills/google-sheets-api-coordinator/test.sh +174 -0
- package/claude-assets/cfn-extras/skills/google-sheets-api-coordinator/validate.sh +98 -0
- package/claude-assets/cfn-extras/skills/google-sheets-decomposition/SKILL.md +269 -0
- package/claude-assets/cfn-extras/skills/google-sheets-decomposition/decompose.sh +313 -0
- package/claude-assets/cfn-extras/skills/google-sheets-formula-builder/SKILL.md +237 -0
- package/claude-assets/cfn-extras/skills/google-sheets-formula-builder/build-formula.sh +220 -0
- package/claude-assets/cfn-extras/skills/google-sheets-formula-builder/test.sh +172 -0
- package/claude-assets/cfn-extras/skills/google-sheets-formula-builder/validate.sh +98 -0
- package/claude-assets/cfn-extras/skills/google-sheets-progress/SKILL.md +287 -0
- package/claude-assets/cfn-extras/skills/google-sheets-progress/test.sh +385 -0
- package/claude-assets/cfn-extras/skills/google-sheets-progress/track-progress.sh +516 -0
- package/claude-assets/cfn-extras/skills/google-sheets-progress/validate.sh +119 -0
- package/claude-assets/cfn-extras/skills/google-sheets-sprint-order/SKILL.md +277 -0
- package/claude-assets/cfn-extras/skills/google-sheets-sprint-order/order-sprints.sh +233 -0
- package/claude-assets/cfn-extras/skills/google-sheets-validation/SKILL.md +352 -0
- package/claude-assets/cfn-extras/skills/google-sheets-validation/test.sh +355 -0
- package/claude-assets/cfn-extras/skills/google-sheets-validation/validate-state.sh +374 -0
- package/claude-assets/cfn-extras/skills/google-sheets-validation/validate.sh +128 -0
- package/claude-assets/commands/cfn-context.md +10 -0
- package/claude-assets/commands/cfn-loop-cli.md +44 -14
- package/claude-assets/commands/google-sheets/google-sheets-loop.md +289 -0
- package/claude-assets/hooks/cfn-pre-execution/SESSION_START_README.md +87 -0
- package/claude-assets/hooks/cfn-pre-execution/TEST_SESSION_START.md +128 -0
- package/claude-assets/hooks/cfn-pre-execution/session-start-context.sh +111 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/INTEGRATION_EXAMPLE.md +209 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/README.md +130 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/SKILL.md +243 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/agent-mappings.json +142 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents.sh +173 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/task-classifier.sh +71 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/test-agent-selection.sh +282 -0
- package/claude-assets/skills/cfn-agent-selector/SKILL.md +143 -0
- package/claude-assets/skills/cfn-agent-selector/select-agents.sh +94 -0
- package/claude-assets/skills/cfn-agent-spawning/get-agent-provider-env.sh +22 -2
- package/claude-assets/skills/cfn-docker-agent-spawning/spawn-agent.sh +21 -2
- package/claude-assets/skills/cfn-docker-coordination/.eslintrc.json +33 -0
- package/claude-assets/skills/cfn-docker-coordination/README.md +349 -0
- package/claude-assets/skills/cfn-docker-coordination/docker-helpers.sh +433 -0
- package/claude-assets/skills/cfn-docker-coordination/jest.config.js +25 -0
- package/claude-assets/skills/cfn-docker-coordination/package-lock.json +6827 -0
- package/claude-assets/skills/cfn-docker-coordination/package.json +38 -0
- package/claude-assets/skills/cfn-docker-coordination/src/agent-container.ts +471 -0
- package/claude-assets/skills/cfn-docker-coordination/src/docker-client.ts +483 -0
- package/claude-assets/skills/cfn-docker-coordination/src/health-checker.ts +418 -0
- package/claude-assets/skills/cfn-docker-coordination/src/index.ts +45 -0
- package/claude-assets/skills/cfn-docker-coordination/src/network-manager.ts +377 -0
- package/claude-assets/skills/cfn-docker-coordination/src/types.ts +412 -0
- package/claude-assets/skills/cfn-docker-coordination/src/volume-manager.ts +389 -0
- package/claude-assets/skills/cfn-docker-coordination/tests/agent-container.test.ts +379 -0
- package/claude-assets/skills/cfn-docker-coordination/tests/docker-client.test.ts +345 -0
- package/claude-assets/skills/cfn-docker-coordination/tests/health-checker.test.ts +535 -0
- package/claude-assets/skills/cfn-docker-coordination/tests/integration.test.ts +193 -0
- package/claude-assets/skills/cfn-docker-coordination/tests/network-manager.test.ts +352 -0
- package/claude-assets/skills/cfn-docker-coordination/tests/setup.ts +36 -0
- package/claude-assets/skills/cfn-docker-coordination/tsconfig.json +29 -0
- package/claude-assets/skills/cfn-docker-logging/INTEGRATION.md +268 -0
- package/claude-assets/skills/cfn-docker-logging/SAMPLE_OUTPUTS.md +237 -0
- package/claude-assets/skills/cfn-docker-logging/SKILL.md +442 -0
- package/claude-assets/skills/cfn-docker-logging/capture-container-logs.sh +120 -0
- package/claude-assets/skills/cfn-docker-logging/enable-logging.sh +430 -0
- package/claude-assets/skills/cfn-docker-logging/init-hybrid-logging.sh +210 -0
- package/claude-assets/skills/cfn-docker-logging/queries/analytics-summary.sh +87 -0
- package/claude-assets/skills/cfn-docker-logging/queries/query-agent-timeline.sh +51 -0
- package/claude-assets/skills/cfn-docker-logging/queries/query-consensus-history.sh +56 -0
- package/claude-assets/skills/cfn-docker-logging/queries/query-coordination-timeline.sh +39 -0
- package/claude-assets/skills/cfn-docker-logging/queries/query-failed-containers.sh +40 -0
- package/claude-assets/skills/cfn-docker-logging/queries/query-gate-checks.sh +39 -0
- package/claude-assets/skills/cfn-docker-logging/schema.sql +111 -0
- package/claude-assets/skills/cfn-docker-logging/sqlite-helpers.sh +240 -0
- package/claude-assets/skills/cfn-docker-logging/test-hybrid-logging.sh +331 -0
- package/claude-assets/skills/cfn-docker-loop-orchestration/orchestrate.sh +11 -5
- package/claude-assets/skills/cfn-docker-redis-coordination/MIGRATION_SUMMARY.md +348 -0
- package/claude-assets/skills/cfn-docker-redis-coordination/README.md +294 -0
- package/claude-assets/skills/cfn-docker-redis-coordination/jest.config.js +37 -0
- package/claude-assets/skills/cfn-docker-redis-coordination/package-lock.json +5259 -0
- package/claude-assets/skills/cfn-docker-redis-coordination/package.json +40 -0
- package/claude-assets/skills/cfn-docker-redis-coordination/src/coordinator.ts +801 -0
- package/claude-assets/skills/cfn-docker-redis-coordination/src/index.ts +42 -0
- package/claude-assets/skills/cfn-docker-redis-coordination/src/types.ts +351 -0
- package/claude-assets/skills/cfn-docker-redis-coordination/tests/coordinator.test.ts +1464 -0
- package/claude-assets/skills/cfn-docker-redis-coordination/tsconfig.json +30 -0
- package/claude-assets/skills/cfn-error-logging/.eslintrc.json +57 -0
- package/claude-assets/skills/cfn-error-logging/.prettierrc.json +10 -0
- package/claude-assets/skills/cfn-error-logging/MIGRATION_SUMMARY.md +485 -0
- package/claude-assets/skills/cfn-error-logging/package.json +47 -0
- package/claude-assets/skills/cfn-error-logging/src/error-logger.ts +1042 -0
- package/claude-assets/skills/cfn-error-logging/src/index.ts +12 -0
- package/claude-assets/skills/cfn-error-logging/src/types.ts +456 -0
- package/claude-assets/skills/cfn-error-logging/tests/error-logger.test.ts +1302 -0
- package/claude-assets/skills/cfn-error-logging/tsconfig.json +38 -0
- package/claude-assets/skills/cfn-loop-orchestration/.eslintrc.js +56 -0
- package/claude-assets/skills/cfn-loop-orchestration/.prettierrc.json +18 -0
- package/claude-assets/skills/cfn-loop-orchestration/README.md +149 -41
- package/claude-assets/skills/cfn-loop-orchestration/jest.config.js +67 -0
- package/claude-assets/skills/cfn-loop-orchestration/orchestrate-wrapper.sh +268 -0
- package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +147 -16
- package/claude-assets/skills/cfn-loop-orchestration/package-lock.json +5470 -0
- package/claude-assets/skills/cfn-loop-orchestration/package.json +49 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/agent-spawner/agent-spawner.ts +34 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/gate-checker/gate-checker.ts +36 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/index.ts +14 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/orchestrator/orchestrator.ts +31 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/redis/redis-coordinator.ts +72 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/types.ts +188 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/utils/logger.ts +32 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/setup.ts +22 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/types.test.ts +132 -0
- package/claude-assets/skills/cfn-loop-orchestration/tsconfig.json +54 -0
- package/claude-assets/skills/cfn-redis-coordination/bash-wrappers/store-context.sh +23 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/agent-logger.d.ts +92 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/agent-logger.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/agent-logger.js +329 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/agent-logger.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/agent-recovery.d.ts +75 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/agent-recovery.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/agent-recovery.js +302 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/agent-recovery.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/completion-reporter.d.ts +58 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/completion-reporter.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/completion-reporter.js +237 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/completion-reporter.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/context-manager.d.ts +63 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/context-manager.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/context-manager.js +230 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/context-manager.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/index.d.ts +45 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/index.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/index.js +114 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/index.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/mode-detector.d.ts +31 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/mode-detector.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/mode-detector.js +185 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/mode-detector.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/redis-client.d.ts +191 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/redis-client.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/redis-client.js +509 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/redis-client.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/result-collector.d.ts +75 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/result-collector.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/result-collector.js +281 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/result-collector.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/swarm-manager.d.ts +75 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/swarm-manager.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/swarm-manager.js +354 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/swarm-manager.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/task-analyzer.d.ts +62 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/task-analyzer.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/task-analyzer.js +305 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/task-analyzer.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/task-executor.d.ts +97 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/task-executor.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/task-executor.js +283 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/task-executor.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/types.d.ts +176 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/types.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/types.js +81 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/types.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/waiting-coordinator.d.ts +86 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/waiting-coordinator.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/waiting-coordinator.js +419 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/waiting-coordinator.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/docs/migration/PHASE_3_REDIS_COORDINATION_COMPLETION_REPORT.md +553 -0
- package/claude-assets/skills/cfn-redis-coordination/invoke-waiting-mode.sh +3 -2
- package/claude-assets/skills/cfn-redis-coordination/jest.config.js +23 -0
- package/claude-assets/skills/cfn-redis-coordination/package-lock.json +5272 -0
- package/claude-assets/skills/cfn-redis-coordination/package.json +45 -0
- package/claude-assets/skills/cfn-redis-coordination/redis-cli-wrapper.sh +21 -8
- package/claude-assets/skills/cfn-redis-coordination/redis-functions.sh +3 -2
- package/claude-assets/skills/cfn-redis-coordination/src/agent-logger.ts +446 -0
- package/claude-assets/skills/cfn-redis-coordination/src/agent-recovery.ts +454 -0
- package/claude-assets/skills/cfn-redis-coordination/src/completion-reporter.ts +396 -0
- package/claude-assets/skills/cfn-redis-coordination/src/context-manager.ts +327 -0
- package/claude-assets/skills/cfn-redis-coordination/src/index.ts +82 -0
- package/claude-assets/skills/cfn-redis-coordination/src/mode-detector.ts +155 -0
- package/claude-assets/skills/cfn-redis-coordination/src/redis/redis-client.ts +305 -0
- package/claude-assets/skills/cfn-redis-coordination/src/redis/redis-functions.ts +283 -0
- package/claude-assets/skills/cfn-redis-coordination/src/redis-client.ts +654 -0
- package/claude-assets/skills/cfn-redis-coordination/src/result-collector.ts +437 -0
- package/claude-assets/skills/cfn-redis-coordination/src/swarm-manager.ts +494 -0
- package/claude-assets/skills/cfn-redis-coordination/src/task-analyzer.ts +404 -0
- package/claude-assets/skills/cfn-redis-coordination/src/task-executor.ts +423 -0
- package/claude-assets/skills/cfn-redis-coordination/src/types.ts +235 -0
- package/claude-assets/skills/cfn-redis-coordination/src/waiting-coordinator.ts +587 -0
- package/claude-assets/skills/cfn-redis-coordination/test-connection-attempts.js +70 -0
- package/claude-assets/skills/cfn-redis-coordination/test-mode-simple.js +121 -0
- package/claude-assets/skills/cfn-redis-coordination/test-redis-check.js +84 -0
- package/claude-assets/skills/cfn-redis-coordination/test-task-mode-redis.cjs +391 -0
- package/claude-assets/skills/cfn-redis-coordination/tests/coordination.test.ts +779 -0
- package/claude-assets/skills/cfn-redis-coordination/tsconfig.json +31 -0
- package/claude-assets/skills/cfn-skill-propagation/README.md +233 -0
- package/claude-assets/skills/cfn-skill-propagation/package-lock.json +5174 -0
- package/claude-assets/skills/cfn-skill-propagation/package.json +52 -0
- package/claude-assets/skills/cfn-skill-propagation/propagate-skill-update.sh +32 -0
- package/claude-assets/skills/cfn-skill-propagation/src/cli.ts +75 -0
- package/claude-assets/skills/cfn-skill-propagation/src/database-adapter.ts +239 -0
- package/claude-assets/skills/cfn-skill-propagation/src/file-system-adapter.ts +113 -0
- package/claude-assets/skills/cfn-skill-propagation/src/index.ts +72 -0
- package/claude-assets/skills/cfn-skill-propagation/src/logger.ts +43 -0
- package/claude-assets/skills/cfn-skill-propagation/src/metadata-parser.ts +154 -0
- package/claude-assets/skills/cfn-skill-propagation/src/skill-propagator.ts +274 -0
- package/claude-assets/skills/cfn-skill-propagation/src/skill-validator.ts +179 -0
- package/claude-assets/skills/cfn-skill-propagation/src/types.ts +143 -0
- package/claude-assets/skills/cfn-skill-propagation/src/version-manager.ts +118 -0
- package/claude-assets/skills/cfn-skill-propagation/tests/file-system-adapter.test.ts +91 -0
- package/claude-assets/skills/cfn-skill-propagation/tests/metadata-parser.test.ts +176 -0
- package/claude-assets/skills/cfn-skill-propagation/tests/skill-propagator.test.ts +209 -0
- package/claude-assets/skills/cfn-skill-propagation/tests/skill-validator.test.ts +203 -0
- package/claude-assets/skills/cfn-skill-propagation/tests/version-manager.test.ts +115 -0
- package/claude-assets/skills/cfn-skill-propagation/tsconfig.json +34 -0
- package/claude-assets/skills/task-classifier/SKILL.md +81 -0
- package/claude-assets/skills/task-classifier/classify-task.sh +62 -0
- package/claude-assets/skills/workflow-codification/package-lock.json +5170 -0
- package/claude-assets/skills/workflow-codification/package.json +30 -0
- package/claude-assets/skills/workflow-codification/src/index.ts +24 -0
- package/claude-assets/skills/workflow-codification/src/pattern-analyzer.ts +537 -0
- package/claude-assets/skills/workflow-codification/src/types.ts +180 -0
- package/claude-assets/skills/workflow-codification/tests/pattern-analyzer.test.ts +960 -0
- package/claude-assets/skills/workflow-codification/tsconfig.json +34 -0
- package/claude-assets/skills/workflow-codification/workflow-codification.db +0 -0
- package/dist/agent-spawner/agent-spawner.js +448 -0
- package/dist/agent-spawner/agent-spawner.js.map +1 -0
- package/dist/agent-spawner/index.js +10 -0
- package/dist/agent-spawner/index.js.map +1 -0
- package/dist/agent-spawner/types.js +14 -0
- package/dist/agent-spawner/types.js.map +1 -0
- package/dist/cli/agent-executor.js +47 -1
- package/dist/cli/agent-executor.js.map +1 -1
- package/dist/cli/agent-spawn.js +4 -1
- package/dist/cli/agent-spawn.js.map +1 -1
- package/dist/cli/config-manager.js +109 -91
- package/dist/cli/config-manager.js.map +1 -1
- package/dist/cli/conversation-fork-cleanup.js +201 -0
- package/dist/cli/conversation-fork-cleanup.js.map +1 -0
- package/dist/cli/conversation-fork.js +16 -3
- package/dist/cli/conversation-fork.js.map +1 -1
- package/dist/cli/tool-executor.js +3 -1
- package/dist/cli/tool-executor.js.map +1 -1
- package/dist/gate-checker/gate-checker.js +292 -0
- package/dist/gate-checker/gate-checker.js.map +1 -0
- package/dist/gate-checker/types.js +94 -0
- package/dist/gate-checker/types.js.map +1 -0
- package/dist/lib/database-service/connection-pool-manager.js +2 -1
- package/dist/lib/database-service/connection-pool-manager.js.map +1 -1
- package/dist/orchestrator/index.js +10 -0
- package/dist/orchestrator/index.js.map +1 -0
- package/dist/orchestrator/orchestrate.js +496 -0
- package/dist/orchestrator/orchestrate.js.map +1 -0
- package/dist/orchestrator/types.js +58 -0
- package/dist/orchestrator/types.js.map +1 -0
- package/docs/BUG_19_MEMORY_LEAK_TASK_MODE.md +405 -0
- package/docs/MEMORY_CLEANUP_GUIDE.md +358 -0
- package/docs/MEMORY_LEAK_FIX_SUMMARY.md +322 -0
- package/docs/REDIS_CLEANUP_EXECUTIVE_SUMMARY.md +319 -0
- package/docs/REDIS_CLEANUP_VERIFICATION_REPORT.md +574 -0
- package/package.json +208 -201
- package/readme/README.md +34 -1
- package/scripts/switch-api.sh +142 -4
- package/scripts/verify-no-secrets.sh +6 -13
- package/scripts/verify-redis-cleanup.sh +173 -0
- package/tests/README.md +201 -0
- package/tests/test-memory-leak-task-mode.sh +435 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
set -eu
|
|
3
|
+
|
|
4
|
+
# google-sheets-api-coordinator/validate.sh
|
|
5
|
+
# Validates dependencies and configuration
|
|
6
|
+
# Version: 1.0.0
|
|
7
|
+
|
|
8
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
9
|
+
VALIDATION_ERRORS=0
|
|
10
|
+
|
|
11
|
+
RED='\033[0;31m'
|
|
12
|
+
GREEN='\033[0;32m'
|
|
13
|
+
YELLOW='\033[1;33m'
|
|
14
|
+
NC='\033[0m'
|
|
15
|
+
|
|
16
|
+
validate_command() {
|
|
17
|
+
local cmd="$1"
|
|
18
|
+
local message="${2:-Command '$cmd' not found}"
|
|
19
|
+
|
|
20
|
+
if command -v "$cmd" &>/dev/null; then
|
|
21
|
+
echo -e "${GREEN}✓${NC} $cmd available"
|
|
22
|
+
return 0
|
|
23
|
+
else
|
|
24
|
+
echo -e "${RED}✗${NC} $message"
|
|
25
|
+
((VALIDATION_ERRORS++))
|
|
26
|
+
return 1
|
|
27
|
+
fi
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
validate_file() {
|
|
31
|
+
local file="$1"
|
|
32
|
+
local message="${2:-File '$file' not found}"
|
|
33
|
+
|
|
34
|
+
if [ -f "$file" ]; then
|
|
35
|
+
echo -e "${GREEN}✓${NC} $file exists"
|
|
36
|
+
return 0
|
|
37
|
+
else
|
|
38
|
+
echo -e "${RED}✗${NC} $message"
|
|
39
|
+
((VALIDATION_ERRORS++))
|
|
40
|
+
return 1
|
|
41
|
+
fi
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
validate_executable() {
|
|
45
|
+
local file="$1"
|
|
46
|
+
local message="${2:-File '$file' is not executable}"
|
|
47
|
+
|
|
48
|
+
if [ -x "$file" ]; then
|
|
49
|
+
echo -e "${GREEN}✓${NC} $file is executable"
|
|
50
|
+
return 0
|
|
51
|
+
else
|
|
52
|
+
echo -e "${RED}✗${NC} $message"
|
|
53
|
+
((VALIDATION_ERRORS++))
|
|
54
|
+
return 1
|
|
55
|
+
fi
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
main() {
|
|
59
|
+
echo "========================================"
|
|
60
|
+
echo "Validating google-sheets-api-coordinator"
|
|
61
|
+
echo "========================================"
|
|
62
|
+
echo ""
|
|
63
|
+
|
|
64
|
+
echo "Checking dependencies..."
|
|
65
|
+
validate_command "bash" "Bash shell required"
|
|
66
|
+
validate_command "jq" "jq (JSON processor) required"
|
|
67
|
+
validate_command "curl" "curl required for API calls"
|
|
68
|
+
|
|
69
|
+
echo ""
|
|
70
|
+
echo "Checking skill files..."
|
|
71
|
+
validate_file "$SCRIPT_DIR/SKILL.md" "SKILL.md documentation required"
|
|
72
|
+
validate_executable "$SCRIPT_DIR/api-call.sh" "api-call.sh must be executable"
|
|
73
|
+
validate_executable "$SCRIPT_DIR/test.sh" "test.sh must be executable"
|
|
74
|
+
|
|
75
|
+
echo ""
|
|
76
|
+
echo "Testing basic functionality..."
|
|
77
|
+
if "$SCRIPT_DIR/api-call.sh" --help >/dev/null 2>&1; then
|
|
78
|
+
echo -e "${GREEN}✓${NC} api-call.sh responds to --help"
|
|
79
|
+
else
|
|
80
|
+
echo -e "${RED}✗${NC} api-call.sh help command failed"
|
|
81
|
+
((VALIDATION_ERRORS++))
|
|
82
|
+
fi
|
|
83
|
+
|
|
84
|
+
echo ""
|
|
85
|
+
echo "========================================"
|
|
86
|
+
echo "Validation Results"
|
|
87
|
+
echo "========================================"
|
|
88
|
+
|
|
89
|
+
if [ $VALIDATION_ERRORS -eq 0 ]; then
|
|
90
|
+
echo -e "${GREEN}✓ All validations passed${NC}"
|
|
91
|
+
exit 0
|
|
92
|
+
else
|
|
93
|
+
echo -e "${RED}✗ ${VALIDATION_ERRORS} validation errors found${NC}"
|
|
94
|
+
exit 1
|
|
95
|
+
fi
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
main "$@"
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
# Google Sheets Request Decomposition
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
Analyzes complex Google Sheets requests and decomposes them into atomic micro-sprints with clear dependencies and success criteria.
|
|
5
|
+
|
|
6
|
+
## Purpose
|
|
7
|
+
Prevents "doing too much at once" by breaking complex spreadsheet operations into progressive, testable units that build toward the end goal.
|
|
8
|
+
|
|
9
|
+
## Sprint Types
|
|
10
|
+
|
|
11
|
+
### 1. Schema Sprint
|
|
12
|
+
**Purpose:** Establish spreadsheet structure
|
|
13
|
+
**Operations:**
|
|
14
|
+
- Create/rename sheets
|
|
15
|
+
- Add/remove columns
|
|
16
|
+
- Define data types
|
|
17
|
+
- Set up named ranges
|
|
18
|
+
|
|
19
|
+
**Dependencies:** None (foundation sprint)
|
|
20
|
+
**Max Operations:** 5 per sprint
|
|
21
|
+
**Success Criteria:**
|
|
22
|
+
- All sheets exist with expected names
|
|
23
|
+
- Column headers match specification
|
|
24
|
+
- Named ranges defined correctly
|
|
25
|
+
|
|
26
|
+
### 2. Data Sprint
|
|
27
|
+
**Purpose:** Populate or transform spreadsheet data
|
|
28
|
+
**Operations:**
|
|
29
|
+
- Import data from external sources
|
|
30
|
+
- Transform existing data
|
|
31
|
+
- Merge/split columns
|
|
32
|
+
- Clean/normalize values
|
|
33
|
+
|
|
34
|
+
**Dependencies:** Schema Sprint
|
|
35
|
+
**Max Operations:** 5 per sprint
|
|
36
|
+
**Success Criteria:**
|
|
37
|
+
- Data imported without errors
|
|
38
|
+
- Transformations produce expected output
|
|
39
|
+
- No data loss or corruption
|
|
40
|
+
- Row counts match expectations
|
|
41
|
+
|
|
42
|
+
### 3. Formula Sprint
|
|
43
|
+
**Purpose:** Add calculated columns and validation rules
|
|
44
|
+
**Operations:**
|
|
45
|
+
- Create formulas (simple to complex)
|
|
46
|
+
- Add data validation rules
|
|
47
|
+
- Implement conditional logic
|
|
48
|
+
- Set up array formulas
|
|
49
|
+
|
|
50
|
+
**Dependencies:** Schema Sprint, Data Sprint
|
|
51
|
+
**Max Operations:** 5 per sprint
|
|
52
|
+
**Success Criteria:**
|
|
53
|
+
- All formulas return expected types
|
|
54
|
+
- No #REF!, #VALUE!, #N/A errors
|
|
55
|
+
- Validation rules enforce constraints
|
|
56
|
+
- Array formulas expand correctly
|
|
57
|
+
|
|
58
|
+
### 4. Formatting Sprint
|
|
59
|
+
**Purpose:** Apply visual formatting and conditional styles
|
|
60
|
+
**Operations:**
|
|
61
|
+
- Conditional formatting rules
|
|
62
|
+
- Number/date formats
|
|
63
|
+
- Cell styling (colors, fonts, borders)
|
|
64
|
+
- Column widths/row heights
|
|
65
|
+
|
|
66
|
+
**Dependencies:** Data Sprint
|
|
67
|
+
**Max Operations:** 5 per sprint
|
|
68
|
+
**Success Criteria:**
|
|
69
|
+
- Formatting rules apply to correct ranges
|
|
70
|
+
- Conditional formatting triggers properly
|
|
71
|
+
- Visual consistency maintained
|
|
72
|
+
|
|
73
|
+
### 5. Integration Sprint
|
|
74
|
+
**Purpose:** Connect external data sources or services
|
|
75
|
+
**Operations:**
|
|
76
|
+
- Import from databases
|
|
77
|
+
- Connect APIs
|
|
78
|
+
- Link other spreadsheets
|
|
79
|
+
- Set up IMPORTRANGE functions
|
|
80
|
+
|
|
81
|
+
**Dependencies:** Schema Sprint
|
|
82
|
+
**Max Operations:** 3 per sprint (API quota considerations)
|
|
83
|
+
**Success Criteria:**
|
|
84
|
+
- External connections established
|
|
85
|
+
- Data syncs without errors
|
|
86
|
+
- API quota not exceeded
|
|
87
|
+
- Refresh triggers work correctly
|
|
88
|
+
|
|
89
|
+
### 6. Automation Sprint
|
|
90
|
+
**Purpose:** Add scripts, triggers, and automations
|
|
91
|
+
**Operations:**
|
|
92
|
+
- Google Apps Script functions
|
|
93
|
+
- Time-based triggers
|
|
94
|
+
- Event-driven triggers
|
|
95
|
+
- Custom functions
|
|
96
|
+
|
|
97
|
+
**Dependencies:** All previous sprint types
|
|
98
|
+
**Max Operations:** 3 per sprint (complexity considerations)
|
|
99
|
+
**Success Criteria:**
|
|
100
|
+
- Scripts execute without errors
|
|
101
|
+
- Triggers fire on expected events
|
|
102
|
+
- Custom functions return correct values
|
|
103
|
+
- No infinite loop conditions
|
|
104
|
+
|
|
105
|
+
## Decomposition Algorithm
|
|
106
|
+
|
|
107
|
+
### Input
|
|
108
|
+
- User request (natural language or structured)
|
|
109
|
+
- Current spreadsheet state (optional)
|
|
110
|
+
- Business requirements
|
|
111
|
+
|
|
112
|
+
### Process
|
|
113
|
+
1. **Parse Request:** Extract operations and goals
|
|
114
|
+
2. **Classify Operations:** Map to sprint types
|
|
115
|
+
3. **Determine Dependencies:** Build directed acyclic graph (DAG)
|
|
116
|
+
4. **Group Operations:** Batch into sprints (max 5 ops/sprint)
|
|
117
|
+
5. **Order Sprints:** Topological sort based on dependencies
|
|
118
|
+
6. **Generate Success Criteria:** Define testable conditions for each sprint
|
|
119
|
+
|
|
120
|
+
### Output
|
|
121
|
+
JSON structure:
|
|
122
|
+
```json
|
|
123
|
+
{
|
|
124
|
+
"request_summary": "...",
|
|
125
|
+
"total_sprints": 5,
|
|
126
|
+
"sprints": [
|
|
127
|
+
{
|
|
128
|
+
"sprint_id": "schema_001",
|
|
129
|
+
"sprint_type": "schema",
|
|
130
|
+
"operations": [
|
|
131
|
+
"Create sheet 'Sales Data'",
|
|
132
|
+
"Add columns: Date, Product, Quantity, Revenue",
|
|
133
|
+
"Define named range 'SalesTable'"
|
|
134
|
+
],
|
|
135
|
+
"dependencies": [],
|
|
136
|
+
"success_criteria": [
|
|
137
|
+
"Sheet 'Sales Data' exists",
|
|
138
|
+
"Columns match: Date, Product, Quantity, Revenue",
|
|
139
|
+
"Named range 'SalesTable' covers A1:D1000"
|
|
140
|
+
],
|
|
141
|
+
"estimated_api_calls": 3
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"sprint_id": "data_001",
|
|
145
|
+
"sprint_type": "data",
|
|
146
|
+
"operations": [
|
|
147
|
+
"Import CSV from Google Drive",
|
|
148
|
+
"Parse dates to standard format",
|
|
149
|
+
"Validate quantity > 0"
|
|
150
|
+
],
|
|
151
|
+
"dependencies": ["schema_001"],
|
|
152
|
+
"success_criteria": [
|
|
153
|
+
"All rows imported (expect ~500 rows)",
|
|
154
|
+
"Date column format: YYYY-MM-DD",
|
|
155
|
+
"No negative quantities",
|
|
156
|
+
"No import errors"
|
|
157
|
+
],
|
|
158
|
+
"estimated_api_calls": 2
|
|
159
|
+
}
|
|
160
|
+
]
|
|
161
|
+
}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## Usage
|
|
165
|
+
|
|
166
|
+
### CLI
|
|
167
|
+
```bash
|
|
168
|
+
./.claude/cfn-extras/skills/google-sheets-decomposition/decompose.sh \
|
|
169
|
+
--request "Create sales dashboard with pivot tables" \
|
|
170
|
+
--mode standard \
|
|
171
|
+
--output /tmp/google-sheets-sprints.json
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### From Agent
|
|
175
|
+
```bash
|
|
176
|
+
# Generate decomposition
|
|
177
|
+
DECOMPOSITION=$(bash ./.claude/cfn-extras/skills/google-sheets-decomposition/decompose.sh \
|
|
178
|
+
--request "$USER_REQUEST" \
|
|
179
|
+
--mode standard)
|
|
180
|
+
|
|
181
|
+
# Parse output
|
|
182
|
+
TOTAL_SPRINTS=$(echo "$DECOMPOSITION" | jq -r '.total_sprints')
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
## Validation Rules
|
|
186
|
+
|
|
187
|
+
### Per Sprint
|
|
188
|
+
- Maximum 5 operations (3 for Integration/Automation)
|
|
189
|
+
- Clear success criteria (2-5 testable conditions)
|
|
190
|
+
- Explicit dependencies declared
|
|
191
|
+
- Estimated API calls < 10 per sprint
|
|
192
|
+
|
|
193
|
+
### Across All Sprints
|
|
194
|
+
- No circular dependencies
|
|
195
|
+
- Schema sprints before Data sprints
|
|
196
|
+
- Formula sprints after Data sprints
|
|
197
|
+
- Automation sprints last
|
|
198
|
+
- Total estimated API calls < 100 (quota management)
|
|
199
|
+
|
|
200
|
+
## Error Handling
|
|
201
|
+
|
|
202
|
+
### Invalid Request
|
|
203
|
+
```json
|
|
204
|
+
{
|
|
205
|
+
"error": "INVALID_REQUEST",
|
|
206
|
+
"message": "Request too vague: 'make it better'",
|
|
207
|
+
"suggestion": "Specify concrete operations (e.g., 'add revenue column', 'create pivot table')"
|
|
208
|
+
}
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### Too Complex
|
|
212
|
+
```json
|
|
213
|
+
{
|
|
214
|
+
"error": "EXCEEDS_COMPLEXITY_LIMIT",
|
|
215
|
+
"message": "Request requires 25 sprints, maximum is 15",
|
|
216
|
+
"suggestion": "Break into multiple user requests or simplify scope"
|
|
217
|
+
}
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Missing Dependencies
|
|
221
|
+
```json
|
|
222
|
+
{
|
|
223
|
+
"error": "CIRCULAR_DEPENDENCY",
|
|
224
|
+
"message": "Formula sprint depends on Automation sprint which depends on Formula sprint",
|
|
225
|
+
"sprints_affected": ["formula_003", "automation_001"]
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
## Integration with CFN Loop
|
|
230
|
+
|
|
231
|
+
### Coordinator Usage
|
|
232
|
+
```bash
|
|
233
|
+
# 1. Decompose request
|
|
234
|
+
SPRINTS_JSON=$(decompose.sh --request "$USER_REQUEST" --mode standard)
|
|
235
|
+
|
|
236
|
+
# 2. Extract sprint count
|
|
237
|
+
TOTAL_SPRINTS=$(echo "$SPRINTS_JSON" | jq -r '.total_sprints')
|
|
238
|
+
|
|
239
|
+
# 3. Execute sprints sequentially
|
|
240
|
+
for i in $(seq 0 $((TOTAL_SPRINTS - 1))); do
|
|
241
|
+
SPRINT=$(echo "$SPRINTS_JSON" | jq -r ".sprints[$i]")
|
|
242
|
+
SPRINT_ID=$(echo "$SPRINT" | jq -r '.sprint_id')
|
|
243
|
+
|
|
244
|
+
# Execute CFN Loop for this micro-sprint
|
|
245
|
+
./.claude/skills/cfn-loop-orchestration/orchestrate.sh \
|
|
246
|
+
--task-id "$TASK_ID" \
|
|
247
|
+
--sprint "$SPRINT" \
|
|
248
|
+
--mode standard
|
|
249
|
+
done
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
## Testing
|
|
253
|
+
|
|
254
|
+
Test script: `./.claude/cfn-extras/skills/google-sheets-decomposition/test-decomposition.sh`
|
|
255
|
+
|
|
256
|
+
**Test Cases:**
|
|
257
|
+
1. Simple request (1 sprint)
|
|
258
|
+
2. Multi-sprint with dependencies
|
|
259
|
+
3. Complex request (10+ sprints)
|
|
260
|
+
4. Invalid request handling
|
|
261
|
+
5. Circular dependency detection
|
|
262
|
+
6. API quota estimation
|
|
263
|
+
|
|
264
|
+
**Expected Pass Rate:** ≥0.95 (Standard mode)
|
|
265
|
+
|
|
266
|
+
## References
|
|
267
|
+
- Google Sheets API Quotas: https://developers.google.com/sheets/api/limits
|
|
268
|
+
- Sprint Types Documentation: `./.claude/cfn-extras/docs/GOOGLE_SHEETS_SPRINTS.md`
|
|
269
|
+
- CFN Loop Integration: `CLAUDE.md` Section 4
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
# Google Sheets Request Decomposition Script
|
|
5
|
+
# Breaks complex requests into atomic micro-sprints with dependencies
|
|
6
|
+
|
|
7
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
8
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)"
|
|
9
|
+
|
|
10
|
+
# Configuration
|
|
11
|
+
MAX_SPRINTS=15
|
|
12
|
+
MAX_OPS_PER_SPRINT=5
|
|
13
|
+
MAX_OPS_INTEGRATION=3
|
|
14
|
+
MAX_OPS_AUTOMATION=3
|
|
15
|
+
MAX_API_CALLS_TOTAL=100
|
|
16
|
+
|
|
17
|
+
# Default values
|
|
18
|
+
REQUEST=""
|
|
19
|
+
MODE="standard"
|
|
20
|
+
OUTPUT_FILE=""
|
|
21
|
+
CURRENT_STATE=""
|
|
22
|
+
|
|
23
|
+
# Parse arguments
|
|
24
|
+
while [[ $# -gt 0 ]]; do
|
|
25
|
+
case $1 in
|
|
26
|
+
--request)
|
|
27
|
+
REQUEST="$2"
|
|
28
|
+
shift 2
|
|
29
|
+
;;
|
|
30
|
+
--mode)
|
|
31
|
+
MODE="$2"
|
|
32
|
+
shift 2
|
|
33
|
+
;;
|
|
34
|
+
--output)
|
|
35
|
+
OUTPUT_FILE="$2"
|
|
36
|
+
shift 2
|
|
37
|
+
;;
|
|
38
|
+
--current-state)
|
|
39
|
+
CURRENT_STATE="$2"
|
|
40
|
+
shift 2
|
|
41
|
+
;;
|
|
42
|
+
*)
|
|
43
|
+
echo "Unknown option: $1" >&2
|
|
44
|
+
exit 1
|
|
45
|
+
;;
|
|
46
|
+
esac
|
|
47
|
+
done
|
|
48
|
+
|
|
49
|
+
# Validate required arguments
|
|
50
|
+
if [[ -z "$REQUEST" ]]; then
|
|
51
|
+
echo "Error: --request is required" >&2
|
|
52
|
+
exit 1
|
|
53
|
+
fi
|
|
54
|
+
|
|
55
|
+
# Validate request is not too vague
|
|
56
|
+
if [[ ${#REQUEST} -lt 10 ]]; then
|
|
57
|
+
cat <<EOF
|
|
58
|
+
{
|
|
59
|
+
"error": "INVALID_REQUEST",
|
|
60
|
+
"message": "Request too vague: '$REQUEST'",
|
|
61
|
+
"suggestion": "Specify concrete operations (e.g., 'add revenue column', 'create pivot table')"
|
|
62
|
+
}
|
|
63
|
+
EOF
|
|
64
|
+
exit 1
|
|
65
|
+
fi
|
|
66
|
+
|
|
67
|
+
# Function to classify operation into sprint type
|
|
68
|
+
classify_operation() {
|
|
69
|
+
local operation="$1"
|
|
70
|
+
|
|
71
|
+
# Schema operations
|
|
72
|
+
if echo "$operation" | grep -qiE "create sheet|add column|rename|define range|structure"; then
|
|
73
|
+
echo "schema"
|
|
74
|
+
return
|
|
75
|
+
fi
|
|
76
|
+
|
|
77
|
+
# Data operations
|
|
78
|
+
if echo "$operation" | grep -qiE "import|transform|merge|clean|populate|data"; then
|
|
79
|
+
echo "data"
|
|
80
|
+
return
|
|
81
|
+
fi
|
|
82
|
+
|
|
83
|
+
# Formula operations
|
|
84
|
+
if echo "$operation" | grep -qiE "formula|calculate|sum|average|validation|vlookup"; then
|
|
85
|
+
echo "formula"
|
|
86
|
+
return
|
|
87
|
+
fi
|
|
88
|
+
|
|
89
|
+
# Formatting operations
|
|
90
|
+
if echo "$operation" | grep -qiE "format|style|color|conditional format|width|height"; then
|
|
91
|
+
echo "formatting"
|
|
92
|
+
return
|
|
93
|
+
fi
|
|
94
|
+
|
|
95
|
+
# Integration operations
|
|
96
|
+
if echo "$operation" | grep -qiE "api|import.*from|connect|external|database|importrange"; then
|
|
97
|
+
echo "integration"
|
|
98
|
+
return
|
|
99
|
+
fi
|
|
100
|
+
|
|
101
|
+
# Automation operations
|
|
102
|
+
if echo "$operation" | grep -qiE "script|trigger|automat|custom function|apps script"; then
|
|
103
|
+
echo "automation"
|
|
104
|
+
return
|
|
105
|
+
fi
|
|
106
|
+
|
|
107
|
+
# Default to data if unclear
|
|
108
|
+
echo "data"
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
# Function to extract operations from request
|
|
112
|
+
extract_operations() {
|
|
113
|
+
local request="$1"
|
|
114
|
+
|
|
115
|
+
# Simple extraction: split by common delimiters
|
|
116
|
+
# In production, this would use NLP or more sophisticated parsing
|
|
117
|
+
echo "$request" | sed 's/[,;.]/\n/g' | sed 's/and /\n/g' | sed '/^$/d'
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
# Function to generate sprint ID
|
|
121
|
+
generate_sprint_id() {
|
|
122
|
+
local sprint_type="$1"
|
|
123
|
+
local counter="$2"
|
|
124
|
+
printf "%s_%03d" "$sprint_type" "$counter"
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
# Function to estimate API calls for operation
|
|
128
|
+
estimate_api_calls() {
|
|
129
|
+
local operation="$1"
|
|
130
|
+
local sprint_type="$2"
|
|
131
|
+
|
|
132
|
+
case "$sprint_type" in
|
|
133
|
+
schema) echo "1" ;;
|
|
134
|
+
data) echo "2" ;;
|
|
135
|
+
formula) echo "1" ;;
|
|
136
|
+
formatting) echo "1" ;;
|
|
137
|
+
integration) echo "3" ;;
|
|
138
|
+
automation) echo "2" ;;
|
|
139
|
+
*) echo "1" ;;
|
|
140
|
+
esac
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
# Main decomposition logic
|
|
144
|
+
decompose_request() {
|
|
145
|
+
local request="$1"
|
|
146
|
+
|
|
147
|
+
# Extract operations
|
|
148
|
+
mapfile -t operations < <(extract_operations "$request")
|
|
149
|
+
|
|
150
|
+
if [[ ${#operations[@]} -eq 0 ]]; then
|
|
151
|
+
cat <<EOF
|
|
152
|
+
{
|
|
153
|
+
"error": "NO_OPERATIONS_FOUND",
|
|
154
|
+
"message": "Could not extract operations from request",
|
|
155
|
+
"request": "$request"
|
|
156
|
+
}
|
|
157
|
+
EOF
|
|
158
|
+
return 1
|
|
159
|
+
fi
|
|
160
|
+
|
|
161
|
+
# Classify and group operations
|
|
162
|
+
declare -A sprint_groups
|
|
163
|
+
declare -A sprint_counters=(
|
|
164
|
+
[schema]=1
|
|
165
|
+
[data]=1
|
|
166
|
+
[formula]=1
|
|
167
|
+
[formatting]=1
|
|
168
|
+
[integration]=1
|
|
169
|
+
[automation]=1
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
for op in "${operations[@]}"; do
|
|
173
|
+
# Skip empty lines
|
|
174
|
+
[[ -z "$op" ]] && continue
|
|
175
|
+
|
|
176
|
+
# Trim whitespace
|
|
177
|
+
op="$(echo "$op" | xargs)"
|
|
178
|
+
|
|
179
|
+
# Classify operation
|
|
180
|
+
sprint_type=$(classify_operation "$op")
|
|
181
|
+
|
|
182
|
+
# Get current counter
|
|
183
|
+
counter=${sprint_counters[$sprint_type]}
|
|
184
|
+
sprint_id=$(generate_sprint_id "$sprint_type" "$counter")
|
|
185
|
+
|
|
186
|
+
# Add to group
|
|
187
|
+
if [[ -z "${sprint_groups[$sprint_id]:-}" ]]; then
|
|
188
|
+
sprint_groups[$sprint_id]="$op"
|
|
189
|
+
else
|
|
190
|
+
sprint_groups[$sprint_id]="${sprint_groups[$sprint_id]}|$op"
|
|
191
|
+
fi
|
|
192
|
+
|
|
193
|
+
# Check if we need to start a new sprint (max operations reached)
|
|
194
|
+
op_count=$(echo "${sprint_groups[$sprint_id]}" | tr '|' '\n' | wc -l)
|
|
195
|
+
max_ops=$MAX_OPS_PER_SPRINT
|
|
196
|
+
|
|
197
|
+
if [[ "$sprint_type" == "integration" ]]; then
|
|
198
|
+
max_ops=$MAX_OPS_INTEGRATION
|
|
199
|
+
elif [[ "$sprint_type" == "automation" ]]; then
|
|
200
|
+
max_ops=$MAX_OPS_AUTOMATION
|
|
201
|
+
fi
|
|
202
|
+
|
|
203
|
+
if [[ $op_count -ge $max_ops ]]; then
|
|
204
|
+
sprint_counters[$sprint_type]=$((counter + 1))
|
|
205
|
+
fi
|
|
206
|
+
done
|
|
207
|
+
|
|
208
|
+
# Check total sprint count
|
|
209
|
+
total_sprints=${#sprint_groups[@]}
|
|
210
|
+
if [[ $total_sprints -gt $MAX_SPRINTS ]]; then
|
|
211
|
+
cat <<EOF
|
|
212
|
+
{
|
|
213
|
+
"error": "EXCEEDS_COMPLEXITY_LIMIT",
|
|
214
|
+
"message": "Request requires $total_sprints sprints, maximum is $MAX_SPRINTS",
|
|
215
|
+
"suggestion": "Break into multiple user requests or simplify scope"
|
|
216
|
+
}
|
|
217
|
+
EOF
|
|
218
|
+
return 1
|
|
219
|
+
fi
|
|
220
|
+
|
|
221
|
+
# Generate JSON output
|
|
222
|
+
echo "{"
|
|
223
|
+
echo " \"request_summary\": \"$request\","
|
|
224
|
+
echo " \"total_sprints\": $total_sprints,"
|
|
225
|
+
echo " \"sprints\": ["
|
|
226
|
+
|
|
227
|
+
local sprint_index=0
|
|
228
|
+
local total_api_calls=0
|
|
229
|
+
|
|
230
|
+
# Sort sprints by dependency order (schema → data → formula → formatting → integration → automation)
|
|
231
|
+
local -a ordered_types=(schema data formula formatting integration automation)
|
|
232
|
+
|
|
233
|
+
for sprint_type in "${ordered_types[@]}"; do
|
|
234
|
+
for sprint_id in $(echo "${!sprint_groups[@]}" | tr ' ' '\n' | grep "^${sprint_type}_" | sort); do
|
|
235
|
+
[[ $sprint_index -gt 0 ]] && echo ","
|
|
236
|
+
|
|
237
|
+
# Extract operations for this sprint
|
|
238
|
+
IFS='|' read -ra ops <<< "${sprint_groups[$sprint_id]}"
|
|
239
|
+
|
|
240
|
+
# Determine dependencies
|
|
241
|
+
local dependencies="[]"
|
|
242
|
+
case "$sprint_type" in
|
|
243
|
+
data)
|
|
244
|
+
dependencies='["schema"]'
|
|
245
|
+
;;
|
|
246
|
+
formula)
|
|
247
|
+
dependencies='["schema", "data"]'
|
|
248
|
+
;;
|
|
249
|
+
formatting)
|
|
250
|
+
dependencies='["data"]'
|
|
251
|
+
;;
|
|
252
|
+
integration)
|
|
253
|
+
dependencies='["schema"]'
|
|
254
|
+
;;
|
|
255
|
+
automation)
|
|
256
|
+
dependencies='["schema", "data", "formula", "formatting", "integration"]'
|
|
257
|
+
;;
|
|
258
|
+
esac
|
|
259
|
+
|
|
260
|
+
# Generate success criteria
|
|
261
|
+
local success_criteria="["
|
|
262
|
+
local criteria_index=0
|
|
263
|
+
for op in "${ops[@]}"; do
|
|
264
|
+
[[ $criteria_index -gt 0 ]] && success_criteria+=", "
|
|
265
|
+
success_criteria+="\"Operation completed: $op\""
|
|
266
|
+
criteria_index=$((criteria_index + 1))
|
|
267
|
+
done
|
|
268
|
+
success_criteria+="]"
|
|
269
|
+
|
|
270
|
+
# Estimate API calls
|
|
271
|
+
local api_calls=0
|
|
272
|
+
for op in "${ops[@]}"; do
|
|
273
|
+
api_calls=$((api_calls + $(estimate_api_calls "$op" "$sprint_type")))
|
|
274
|
+
done
|
|
275
|
+
total_api_calls=$((total_api_calls + api_calls))
|
|
276
|
+
|
|
277
|
+
# Output sprint JSON
|
|
278
|
+
cat <<EOF
|
|
279
|
+
{
|
|
280
|
+
"sprint_id": "$sprint_id",
|
|
281
|
+
"sprint_type": "$sprint_type",
|
|
282
|
+
"operations": [$(printf '"%s"' "${ops[0]}"; printf ', "%s"' "${ops[@]:1}")],
|
|
283
|
+
"dependencies": $dependencies,
|
|
284
|
+
"success_criteria": $success_criteria,
|
|
285
|
+
"estimated_api_calls": $api_calls
|
|
286
|
+
}
|
|
287
|
+
EOF
|
|
288
|
+
|
|
289
|
+
sprint_index=$((sprint_index + 1))
|
|
290
|
+
done
|
|
291
|
+
done
|
|
292
|
+
|
|
293
|
+
echo ""
|
|
294
|
+
echo " ],"
|
|
295
|
+
echo " \"total_estimated_api_calls\": $total_api_calls"
|
|
296
|
+
echo "}"
|
|
297
|
+
|
|
298
|
+
# Check API quota
|
|
299
|
+
if [[ $total_api_calls -gt $MAX_API_CALLS_TOTAL ]]; then
|
|
300
|
+
echo "Warning: Estimated API calls ($total_api_calls) exceeds quota limit ($MAX_API_CALLS_TOTAL)" >&2
|
|
301
|
+
fi
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
# Execute decomposition
|
|
305
|
+
RESULT=$(decompose_request "$REQUEST")
|
|
306
|
+
|
|
307
|
+
# Output to file or stdout
|
|
308
|
+
if [[ -n "$OUTPUT_FILE" ]]; then
|
|
309
|
+
echo "$RESULT" > "$OUTPUT_FILE"
|
|
310
|
+
echo "Decomposition written to: $OUTPUT_FILE" >&2
|
|
311
|
+
else
|
|
312
|
+
echo "$RESULT"
|
|
313
|
+
fi
|