claude-flow-novice 2.15.11 → 2.16.1
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/agents/cfn-v3-coordinator.md +517 -0
- package/.claude/cfn-extras/skills/GOOGLE_SHEETS_SKILLS_README.md +1 -1
- package/.claude/cfn-extras/skills/google-sheets-api-coordinator/SKILL.md +1 -1
- package/.claude/cfn-extras/skills/google-sheets-formula-builder/SKILL.md +1 -1
- package/.claude/cfn-extras/skills/google-sheets-progress/SKILL.md +1 -1
- package/.claude/commands/CFN_LOOP_FRONTEND.md +1 -1
- package/.claude/commands/cfn-loop-cli.md +214 -442
- package/.claude/commands/cfn-loop-frontend.md +1 -1
- package/.claude/commands/cfn-loop-task.md +2 -2
- package/.claude/commands/cfn-loop-trigger.md +114 -0
- package/.claude/commands/deprecated/cfn-loop.md +2 -2
- package/.claude/hooks/cfn-invoke-post-edit-ts.sh +100 -0
- package/.claude/hooks/cfn-invoke-post-edit-ts.sh.backup +78 -0
- package/.claude/hooks/cfn-invoke-post-edit.sh +53 -5
- package/.claude/hooks/cfn-invoke-post-edit.sh.backup +87 -0
- package/.claude/hooks/cfn-invoke-pre-edit-ts.sh +116 -0
- package/.claude/hooks/cfn-invoke-pre-edit-ts.sh.backup +94 -0
- package/.claude/hooks/cfn-invoke-pre-edit.sh +22 -0
- package/.claude/hooks/cfn-invoke-pre-edit.sh.backup +88 -0
- package/.claude/hooks/cfn-post-edit.config.json +9 -2
- package/.claude/root-claude-distribute/CFN-CLAUDE.md +1 -1
- package/.claude/skills/cfn-agent-spawning/SKILL.md +48 -1
- package/.claude/skills/cfn-agent-spawning/SKILL.md.backup +135 -0
- package/.claude/skills/cfn-agent-spawning/TYPESCRIPT_MIGRATION.md +567 -0
- package/.claude/skills/cfn-agent-spawning/check-dependencies.sh +22 -0
- package/.claude/skills/{cfn-redis-coordination/check-dependencies.sh → cfn-agent-spawning/check-dependencies.sh.backup} +3 -5
- package/.claude/skills/cfn-agent-spawning/get-agent-provider-env.sh +22 -0
- package/.claude/skills/cfn-agent-spawning/get-agent-provider-env.sh.backup +127 -0
- package/.claude/skills/cfn-agent-spawning/parse-agent-provider.sh +22 -0
- package/.claude/skills/cfn-agent-spawning/parse-agent-provider.sh.backup +59 -0
- package/.claude/skills/cfn-agent-spawning/spawn-agent-wrapper.sh +63 -0
- package/.claude/skills/cfn-agent-spawning/spawn-agent-wrapper.sh.backup +41 -0
- package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +26 -1
- package/.claude/skills/cfn-agent-spawning/spawn-templates.sh +22 -0
- package/.claude/skills/cfn-agent-spawning/spawn-templates.sh.backup +613 -0
- package/.claude/skills/cfn-agent-spawning/spawn-worker.sh +22 -0
- package/.claude/skills/cfn-agent-spawning/spawn-worker.sh.backup +176 -0
- package/.claude/skills/cfn-backlog-management/SKILL.md +1 -1
- package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/metadata.json +8 -0
- package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/original +271 -0
- package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/revert.sh +7 -0
- package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/metadata.json +8 -0
- package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/original +325 -0
- package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/revert.sh +7 -0
- package/.claude/skills/cfn-loop-orchestration/CLI_IMPLEMENTATION_SUMMARY.md +330 -0
- package/.claude/skills/cfn-loop-orchestration/CONFIGURATION_IMPROVEMENTS.md +318 -0
- package/.claude/skills/cfn-loop-orchestration/CONTEXT_LOOKUP_MIGRATION.md +308 -0
- package/.claude/skills/cfn-loop-orchestration/CONTEXT_LOOKUP_QUICK_START.md +378 -0
- package/.claude/skills/cfn-loop-orchestration/E2E_VALIDATION_REPORT.md +262 -0
- package/.claude/skills/cfn-loop-orchestration/IMPLEMENTATION_SUMMARY.md +319 -519
- package/.claude/skills/cfn-loop-orchestration/NORTH_STAR_E2E_REPORT.md +299 -0
- package/.claude/skills/cfn-loop-orchestration/NORTH_STAR_EXECUTION_SUMMARY.md +403 -0
- package/.claude/skills/cfn-loop-orchestration/NORTH_STAR_INDEX.md +323 -0
- package/.claude/skills/cfn-loop-orchestration/SKILL.md +159 -48
- package/.claude/skills/cfn-loop-orchestration/SPAWN_AGENTS_IMPLEMENTATION.md +188 -0
- package/.claude/skills/cfn-loop-orchestration/TEST_COVERAGE_REPORT.md +335 -0
- package/.claude/skills/cfn-loop-orchestration/TEST_COVERAGE_SUMMARY.md +456 -0
- package/.claude/skills/cfn-loop-orchestration/TYPESCRIPT_INTEGRATION_REPORT.md +709 -0
- package/.claude/skills/cfn-loop-orchestration/TYPESCRIPT_INTEGRATION_SUMMARY.md +257 -0
- package/.claude/skills/cfn-loop-orchestration/VALIDATION_REPORT.md +572 -0
- package/.claude/skills/cfn-loop-orchestration/VALIDATION_SUMMARY.txt +196 -0
- package/.claude/skills/cfn-loop-orchestration/VALIDATOR_MODULE_GUIDE.md +526 -0
- package/.claude/skills/cfn-loop-orchestration/archive/legacy-bash/README.md +167 -0
- package/.claude/skills/cfn-loop-orchestration/archive/legacy-bash/orchestrate-enhanced.sh +548 -0
- package/.claude/skills/cfn-loop-orchestration/{orchestrate-wrapper.sh → archive/legacy-bash/orchestrate-wrapper.sh} +11 -1
- package/.claude/skills/cfn-loop-orchestration/archive/legacy-bash/orchestrate.sh +182 -0
- package/.claude/skills/cfn-loop-orchestration/e2e-validation-fixed.js +240 -0
- package/.claude/skills/cfn-loop-orchestration/e2e-validation.js +213 -0
- package/.claude/skills/cfn-loop-orchestration/package-lock.json +3 -0
- package/.claude/skills/cfn-loop-orchestration/package.json +4 -0
- package/.claude/skills/cfn-loop-orchestration/run-north-star-e2e.ts +210 -0
- package/.claude/skills/cfn-loop-orchestration/src/cli/orchestrator-cli.ts +396 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/CONFIDENCE_AGGREGATOR.md +564 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/CONFIDENCE_AGGREGATOR_QUICK_REF.md +241 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_IMPLEMENTATION.md +375 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_QUICK_REFERENCE.md +362 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_README.md +307 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_USAGE_GUIDE.md +508 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/confidence-aggregator.ts +473 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/consensus.ts +1 -1
- package/.claude/skills/cfn-loop-orchestration/src/helpers/context-injector.ts +349 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/context-lookup.ts +486 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/deliverable-verifier.ts +6 -2
- package/.claude/skills/cfn-loop-orchestration/src/helpers/gate-check.ts +1 -1
- package/.claude/skills/cfn-loop-orchestration/src/helpers/product-owner-decision.ts +316 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/spawn-agents.ts +357 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/validator.ts +276 -0
- package/.claude/skills/cfn-loop-orchestration/src/index.ts +2 -0
- package/.claude/skills/cfn-loop-orchestration/src/orchestrate.ts +743 -2
- package/.claude/skills/cfn-loop-orchestration/src/types.ts +56 -0
- package/.claude/skills/cfn-loop-orchestration/test-cli.sh +92 -0
- package/.claude/skills/cfn-loop-orchestration/test-typescript-integration.sh +442 -0
- package/.claude/skills/cfn-loop-orchestration/tests/agent-spawner.test.ts +124 -0
- package/.claude/skills/cfn-loop-orchestration/tests/confidence-aggregator.test.ts +604 -0
- package/.claude/skills/cfn-loop-orchestration/tests/context-injector.test.ts +561 -0
- package/.claude/skills/cfn-loop-orchestration/tests/context-lookup.test.ts +661 -0
- package/.claude/skills/cfn-loop-orchestration/tests/deliverable-verifier.test.ts +2 -2
- package/.claude/skills/cfn-loop-orchestration/tests/gate-check-edge-cases.test.ts +422 -0
- package/.claude/skills/cfn-loop-orchestration/tests/gate-checker.test.ts +276 -0
- package/.claude/skills/cfn-loop-orchestration/tests/logger.test.ts +291 -0
- package/.claude/skills/cfn-loop-orchestration/tests/north-star-e2e.test.ts +334 -0
- package/.claude/skills/cfn-loop-orchestration/tests/redis-coordinator.test.ts +321 -0
- package/.claude/skills/cfn-loop-orchestration/tests/spawn-agents.test.ts +284 -0
- package/.claude/skills/cfn-loop-orchestration/tests/validator.test.ts +643 -0
- package/.claude/skills/cfn-loop-validation/IMPLEMENTATION_SUMMARY.md +672 -0
- package/.claude/skills/cfn-loop-validation/INDEX.md +531 -0
- package/.claude/skills/cfn-loop-validation/README_TYPESCRIPT.md +454 -0
- package/.claude/skills/cfn-loop-validation/SKILL.md +48 -1
- package/.claude/skills/cfn-loop-validation/SKILL.md.backup +353 -0
- package/.claude/skills/cfn-loop-validation/SKILL_TYPESCRIPT.md +782 -0
- package/.claude/skills/cfn-loop-validation/VAPOR_DETECTION_EXAMPLES.md +598 -0
- package/.claude/skills/cfn-loop-validation/check-dependencies.sh +22 -0
- package/{claude-assets/skills/cfn-redis-coordination/check-dependencies.sh → .claude/skills/cfn-loop-validation/check-dependencies.sh.backup} +4 -5
- package/.claude/skills/cfn-loop-validation/detect-vapor.sh +59 -0
- package/.claude/skills/cfn-loop-validation/detect-vapor.sh.backup +37 -0
- package/.claude/skills/cfn-loop-validation/dist/.tsbuildinfo +1 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/detect-vapor.d.ts +14 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/detect-vapor.d.ts.map +1 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/detect-vapor.js +185 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/detect-vapor.js.map +1 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/validate-deliverables.d.ts +14 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/validate-deliverables.d.ts.map +1 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/validate-deliverables.js +176 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/validate-deliverables.js.map +1 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/validate-gate.d.ts +19 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/validate-gate.d.ts.map +1 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/validate-gate.js +123 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/validate-gate.js.map +1 -0
- package/.claude/skills/cfn-loop-validation/dist/types.d.ts +156 -0
- package/.claude/skills/cfn-loop-validation/dist/types.d.ts.map +1 -0
- package/.claude/skills/cfn-loop-validation/dist/types.js +66 -0
- package/.claude/skills/cfn-loop-validation/dist/types.js.map +1 -0
- package/.claude/skills/cfn-loop-validation/dist/validator.d.ts +85 -0
- package/.claude/skills/cfn-loop-validation/dist/validator.d.ts.map +1 -0
- package/.claude/skills/cfn-loop-validation/dist/validator.js +411 -0
- package/.claude/skills/cfn-loop-validation/dist/validator.js.map +1 -0
- package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +22 -0
- package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh.backup +252 -0
- package/.claude/skills/cfn-loop-validation/package.json +93 -0
- package/.claude/skills/cfn-loop-validation/src/cli/detect-vapor.ts +177 -0
- package/.claude/skills/cfn-loop-validation/src/cli/validate-deliverables.ts +161 -0
- package/.claude/skills/cfn-loop-validation/src/cli/validate-gate.ts +139 -0
- package/.claude/skills/cfn-loop-validation/src/types.ts +215 -0
- package/.claude/skills/cfn-loop-validation/src/validator.ts +503 -0
- package/.claude/skills/cfn-loop-validation/tests/validator.test.ts +537 -0
- package/.claude/skills/{cfn-redis-coordination → cfn-loop-validation}/tsconfig.json +34 -31
- package/.claude/skills/cfn-loop-validation/validate-deliverables.sh +59 -0
- package/.claude/skills/cfn-loop-validation/validate-deliverables.sh.backup +37 -0
- package/.claude/skills/cfn-loop-validation/validate-gate.sh +63 -0
- package/.claude/skills/cfn-loop-validation/validate-gate.sh.backup +41 -0
- package/.claude/skills/cfn-loop-validation/validate-iteration.sh +22 -0
- package/.claude/skills/cfn-loop-validation/validate-iteration.sh.backup +134 -0
- package/.claude/skills/cfn-product-owner-decision/SKILL.md +479 -147
- package/.claude/skills/cfn-product-owner-decision/TYPESCRIPT_IMPLEMENTATION.md +653 -0
- package/.claude/skills/cfn-product-owner-decision/{execute-decision.sh → archive/legacy-bash/execute-decision.sh} +24 -2
- package/.claude/skills/pre-edit-backup/SKILL.md +324 -0
- package/.claude/skills/pre-edit-backup/SKILL.md.backup +277 -0
- package/.claude/skills/pre-edit-backup/backup.sh +22 -0
- package/.claude/skills/pre-edit-backup/backup.sh.backup +107 -0
- package/claude-assets/agents/cfn-dev-team/analysts/root-cause-analyst.md +2 -2
- package/claude-assets/agents/cfn-dev-team/architecture/base-template-generator.md +1 -1
- package/claude-assets/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +3 -2
- package/claude-assets/agents/cfn-dev-team/coordinators/consensus-builder.md +1 -0
- package/claude-assets/agents/cfn-dev-team/coordinators/handoff-coordinator.md +2 -1
- package/claude-assets/agents/cfn-dev-team/coordinators/multi-sprint-coordinator.md +1 -0
- package/claude-assets/agents/cfn-dev-team/dev-ops/devops-engineer.md +11 -1
- package/claude-assets/agents/cfn-dev-team/dev-ops/docker-specialist.md +58 -35
- package/claude-assets/agents/cfn-dev-team/dev-ops/github-commit-agent.md +2 -2
- package/claude-assets/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +47 -37
- package/claude-assets/agents/cfn-dev-team/developers/api-gateway-specialist.md +18 -18
- package/claude-assets/agents/cfn-dev-team/developers/backend-developer.md +40 -58
- package/claude-assets/agents/cfn-dev-team/developers/data/data-engineer.md +19 -21
- package/claude-assets/agents/cfn-dev-team/developers/database/database-architect.md +20 -29
- package/claude-assets/agents/cfn-dev-team/developers/frontend/mobile-dev.md +15 -19
- package/claude-assets/agents/cfn-dev-team/developers/frontend/react-frontend-engineer.md +15 -10
- package/claude-assets/agents/cfn-dev-team/developers/frontend/typescript-specialist.md +16 -11
- package/claude-assets/agents/cfn-dev-team/developers/frontend/ui-designer.md +16 -26
- package/claude-assets/agents/cfn-dev-team/developers/graphql-specialist.md +18 -22
- package/claude-assets/agents/cfn-dev-team/developers/rust-developer.md +17 -21
- package/claude-assets/agents/cfn-dev-team/documentation/pseudocode.md +1 -1
- package/claude-assets/agents/cfn-dev-team/product-owners/accessibility-advocate-persona.md +1 -1
- package/claude-assets/agents/cfn-dev-team/product-owners/cto-agent.md +1 -1
- package/claude-assets/agents/cfn-dev-team/product-owners/power-user-persona.md +1 -1
- package/claude-assets/agents/cfn-dev-team/product-owners/product-owner.md +1 -5
- package/claude-assets/agents/cfn-dev-team/reviewers/code-reviewer.md +20 -51
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/code-quality-validator.md +22 -71
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +21 -64
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +22 -67
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/security-specialist.md +24 -68
- package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +8 -36
- package/claude-assets/agents/cfn-dev-team/testers/chaos-engineering-specialist.md +9 -38
- package/claude-assets/agents/cfn-dev-team/testers/contract-tester.md +17 -55
- package/claude-assets/agents/cfn-dev-team/testers/e2e/playwright-tester.md +1 -1
- package/claude-assets/agents/cfn-dev-team/testers/integration-tester.md +18 -56
- package/claude-assets/agents/cfn-dev-team/testers/interaction-tester.md +9 -37
- package/claude-assets/agents/cfn-dev-team/testers/load-testing-specialist.md +18 -56
- package/claude-assets/agents/cfn-dev-team/testers/mutation-testing-specialist.md +18 -49
- package/claude-assets/agents/cfn-dev-team/testers/playwright-tester.md +8 -37
- package/claude-assets/agents/cfn-dev-team/testers/tester.md +7 -27
- package/claude-assets/agents/cfn-dev-team/testers/unit/tdd-london-unit-swarm.md +1 -1
- package/claude-assets/agents/cfn-dev-team/utility/agent-builder.md +11 -0
- package/claude-assets/agents/cfn-dev-team/utility/analyst.md +13 -29
- package/claude-assets/agents/cfn-dev-team/utility/claude-code-expert.md +1 -1
- package/claude-assets/agents/cfn-dev-team/utility/code-booster.md +13 -13
- package/claude-assets/agents/cfn-dev-team/utility/context-curator.md +7 -2
- package/claude-assets/agents/cfn-dev-team/utility/epic-creator.md +6 -11
- package/claude-assets/agents/cfn-dev-team/utility/memory-leak-specialist.md +121 -715
- package/claude-assets/agents/cfn-dev-team/utility/researcher.md +13 -22
- package/claude-assets/agents/cfn-dev-team/utility/z-ai-specialist.md +147 -573
- package/claude-assets/agents/custom/cfn-docker-expert.md +103 -0
- package/claude-assets/agents/custom/cfn-loops-cli-expert.md +438 -0
- package/claude-assets/agents/custom/cfn-redis-operations.md +529 -529
- package/claude-assets/agents/custom/cfn-system-expert.md +1 -1
- package/claude-assets/agents/custom/trigger-dev-expert.md +369 -0
- package/claude-assets/agents/docker-team/micro-sprint-planner.md +747 -747
- package/claude-assets/agents/project-only-agents/npm-package-specialist.md +1 -1
- package/claude-assets/cfn-extras/agents/cfn-v3-coordinator.md +517 -0
- package/claude-assets/cfn-extras/skills/GOOGLE_SHEETS_SKILLS_README.md +1 -1
- package/claude-assets/cfn-extras/skills/google-sheets-api-coordinator/SKILL.md +1 -1
- package/claude-assets/cfn-extras/skills/google-sheets-formula-builder/SKILL.md +1 -1
- package/claude-assets/cfn-extras/skills/google-sheets-progress/SKILL.md +1 -1
- package/claude-assets/commands/CFN_LOOP_FRONTEND.md +1 -1
- package/claude-assets/commands/cfn-loop-cli.md +214 -442
- package/claude-assets/commands/cfn-loop-frontend.md +1 -1
- package/claude-assets/commands/cfn-loop-task.md +2 -2
- package/claude-assets/commands/cfn-loop-trigger.md +114 -0
- package/claude-assets/commands/deprecated/cfn-loop.md +2 -2
- package/claude-assets/hooks/GIT-HOOKS-USAGE-EXAMPLES.md +116 -0
- package/claude-assets/hooks/README-GIT-HOOKS.md +443 -0
- package/claude-assets/hooks/SKILL.md +518 -0
- package/claude-assets/hooks/SKILL.md.backup +471 -0
- package/claude-assets/hooks/cfn-invoke-post-edit-ts.sh +100 -0
- package/claude-assets/hooks/cfn-invoke-post-edit-ts.sh.backup +78 -0
- package/claude-assets/hooks/cfn-invoke-post-edit.sh +53 -5
- package/claude-assets/hooks/cfn-invoke-post-edit.sh.backup +87 -0
- package/claude-assets/hooks/cfn-invoke-pre-edit-ts.sh +116 -0
- package/claude-assets/hooks/cfn-invoke-pre-edit-ts.sh.backup +94 -0
- package/claude-assets/hooks/cfn-invoke-pre-edit.sh +22 -0
- package/claude-assets/hooks/cfn-invoke-pre-edit.sh.backup +88 -0
- package/claude-assets/hooks/cfn-post-edit.config.json +9 -2
- package/claude-assets/hooks/install-git-hooks.sh +243 -0
- package/claude-assets/hooks/subagent-start.sh +98 -0
- package/claude-assets/hooks/subagent-stop.sh +93 -0
- package/claude-assets/hooks/validators/credential-scanner.sh +172 -0
- package/claude-assets/root-claude-distribute/CFN-CLAUDE.md +1 -1
- package/claude-assets/skills/cfn-agent-selection-with-fallback/DELIVERABLES.md +409 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/IMPLEMENTATION_SUMMARY.md +396 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/INTEGRATION_GUIDE.md +308 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/QUICK_REFERENCE.md +239 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/SKILL.md +107 -1
- package/claude-assets/skills/cfn-agent-selection-with-fallback/SKILL.md.backup +302 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/TYPESCRIPT_MIGRATION.md +295 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/dist/agent-selector.cjs +297 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/dist/agent-selector.js +297 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/dist/cli.cjs +96 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/dist/cli.js +96 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents-ts.sh +45 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents-ts.sh.backup +23 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents.sh +22 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents.sh.backup +173 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/src/agent-selector.test.ts +357 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/src/agent-selector.ts +350 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/src/cli.ts +74 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/task-classifier.sh +22 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/task-classifier.sh.backup +71 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/tsconfig.json +18 -0
- package/claude-assets/skills/cfn-agent-spawning/SKILL.md +48 -1
- package/claude-assets/skills/cfn-agent-spawning/SKILL.md.backup +135 -0
- package/claude-assets/skills/cfn-agent-spawning/TYPESCRIPT_MIGRATION.md +567 -0
- package/claude-assets/skills/cfn-agent-spawning/check-dependencies.sh +22 -0
- package/claude-assets/skills/cfn-agent-spawning/check-dependencies.sh.backup +30 -0
- package/claude-assets/skills/cfn-agent-spawning/get-agent-provider-env.sh +22 -0
- package/claude-assets/skills/cfn-agent-spawning/get-agent-provider-env.sh.backup +127 -0
- package/claude-assets/skills/cfn-agent-spawning/parse-agent-provider.sh +22 -0
- package/claude-assets/skills/cfn-agent-spawning/parse-agent-provider.sh.backup +59 -0
- package/claude-assets/skills/cfn-agent-spawning/spawn-agent-wrapper.sh +63 -0
- package/claude-assets/skills/cfn-agent-spawning/spawn-agent-wrapper.sh.backup +41 -0
- package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh +26 -1
- package/claude-assets/skills/cfn-agent-spawning/spawn-templates.sh +22 -0
- package/claude-assets/skills/cfn-agent-spawning/spawn-templates.sh.backup +613 -0
- package/claude-assets/skills/cfn-agent-spawning/spawn-worker.sh +22 -0
- package/claude-assets/skills/cfn-agent-spawning/spawn-worker.sh.backup +176 -0
- package/claude-assets/skills/cfn-backlog-management/SKILL.md +1 -1
- package/claude-assets/skills/cfn-coordination/agent-completion.sh.backup +36 -0
- package/claude-assets/skills/cfn-coordination/coordination-signal.sh.backup +36 -0
- package/claude-assets/skills/cfn-coordination/coordination-wait.sh.backup +36 -0
- package/claude-assets/skills/cfn-dependency-ingestion/README.md +101 -0
- package/claude-assets/skills/cfn-dependency-ingestion/SKILL.md +397 -0
- package/claude-assets/skills/cfn-dependency-ingestion/build.sh +23 -0
- package/claude-assets/skills/cfn-dependency-ingestion/dist/ingest-dependencies.js +478 -0
- package/claude-assets/skills/cfn-dependency-ingestion/ingest-dependencies.sh +295 -0
- package/claude-assets/skills/cfn-dependency-ingestion/ingest.sh +237 -0
- package/claude-assets/skills/cfn-dependency-ingestion/manifests/cli-mode-dependencies.txt +73 -0
- package/claude-assets/skills/cfn-dependency-ingestion/manifests/shared-dependencies.txt +57 -0
- package/claude-assets/skills/cfn-dependency-ingestion/manifests/trigger-dev-dependencies.txt +82 -0
- package/claude-assets/skills/cfn-dependency-ingestion/manifests/trigger-mode-dependencies.txt +80 -0
- package/claude-assets/skills/cfn-dependency-ingestion/src/ingest-dependencies.ts +563 -0
- package/claude-assets/skills/cfn-environment-sanitization/sanitize-environment.sh +14 -4
- package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/metadata.json +8 -0
- package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/original +271 -0
- package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/revert.sh +7 -0
- package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/metadata.json +8 -0
- package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/original +325 -0
- package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/revert.sh +7 -0
- package/claude-assets/skills/cfn-loop-orchestration/CLI_IMPLEMENTATION_SUMMARY.md +330 -0
- package/claude-assets/skills/cfn-loop-orchestration/CONFIGURATION_IMPROVEMENTS.md +318 -0
- package/claude-assets/skills/cfn-loop-orchestration/CONTEXT_LOOKUP_MIGRATION.md +308 -0
- package/claude-assets/skills/cfn-loop-orchestration/CONTEXT_LOOKUP_QUICK_START.md +378 -0
- package/claude-assets/skills/cfn-loop-orchestration/E2E_VALIDATION_REPORT.md +262 -0
- package/claude-assets/skills/cfn-loop-orchestration/IMPLEMENTATION_SUMMARY.md +319 -519
- package/claude-assets/skills/cfn-loop-orchestration/NORTH_STAR_E2E_REPORT.md +299 -0
- package/claude-assets/skills/cfn-loop-orchestration/NORTH_STAR_EXECUTION_SUMMARY.md +403 -0
- package/claude-assets/skills/cfn-loop-orchestration/NORTH_STAR_INDEX.md +323 -0
- package/claude-assets/skills/cfn-loop-orchestration/SKILL.md +159 -48
- package/claude-assets/skills/cfn-loop-orchestration/SPAWN_AGENTS_IMPLEMENTATION.md +188 -0
- package/claude-assets/skills/cfn-loop-orchestration/TEST_COVERAGE_REPORT.md +335 -0
- package/claude-assets/skills/cfn-loop-orchestration/TEST_COVERAGE_SUMMARY.md +456 -0
- package/claude-assets/skills/cfn-loop-orchestration/TYPESCRIPT_INTEGRATION_REPORT.md +709 -0
- package/claude-assets/skills/cfn-loop-orchestration/TYPESCRIPT_INTEGRATION_SUMMARY.md +257 -0
- package/claude-assets/skills/cfn-loop-orchestration/VALIDATION_REPORT.md +572 -0
- package/claude-assets/skills/cfn-loop-orchestration/VALIDATION_SUMMARY.txt +196 -0
- package/claude-assets/skills/cfn-loop-orchestration/VALIDATOR_MODULE_GUIDE.md +526 -0
- package/claude-assets/skills/cfn-loop-orchestration/archive/legacy-bash/README.md +167 -0
- package/claude-assets/skills/cfn-loop-orchestration/archive/legacy-bash/orchestrate-enhanced.sh +548 -0
- package/claude-assets/skills/cfn-loop-orchestration/{orchestrate-wrapper.sh → archive/legacy-bash/orchestrate-wrapper.sh} +11 -1
- package/claude-assets/skills/cfn-loop-orchestration/archive/legacy-bash/orchestrate.sh +182 -0
- package/claude-assets/skills/cfn-loop-orchestration/e2e-validation-fixed.js +240 -0
- package/claude-assets/skills/cfn-loop-orchestration/e2e-validation.js +213 -0
- package/claude-assets/skills/cfn-loop-orchestration/package-lock.json +3 -0
- package/claude-assets/skills/cfn-loop-orchestration/package.json +4 -0
- package/claude-assets/skills/cfn-loop-orchestration/run-north-star-e2e.ts +210 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/cli/orchestrator-cli.ts +396 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONFIDENCE_AGGREGATOR.md +564 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONFIDENCE_AGGREGATOR_QUICK_REF.md +241 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_IMPLEMENTATION.md +375 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_QUICK_REFERENCE.md +362 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_README.md +307 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_USAGE_GUIDE.md +508 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/confidence-aggregator.ts +473 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/consensus.ts +1 -1
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/context-injector.ts +349 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/context-lookup.ts +486 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/deliverable-verifier.ts +6 -2
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/gate-check.ts +1 -1
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/product-owner-decision.ts +316 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/spawn-agents.ts +357 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/validator.ts +276 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/index.ts +2 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/orchestrate.ts +743 -2
- package/claude-assets/skills/cfn-loop-orchestration/src/types.ts +56 -0
- package/claude-assets/skills/cfn-loop-orchestration/test-cli.sh +92 -0
- package/claude-assets/skills/cfn-loop-orchestration/test-typescript-integration.sh +442 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/agent-spawner.test.ts +124 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/confidence-aggregator.test.ts +604 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/context-injector.test.ts +561 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/context-lookup.test.ts +661 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/deliverable-verifier.test.ts +2 -2
- package/claude-assets/skills/cfn-loop-orchestration/tests/gate-check-edge-cases.test.ts +422 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/gate-checker.test.ts +276 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/logger.test.ts +291 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/north-star-e2e.test.ts +334 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/redis-coordinator.test.ts +321 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/spawn-agents.test.ts +284 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/validator.test.ts +643 -0
- package/claude-assets/skills/cfn-loop-output-processing/.eslintrc.json +33 -0
- package/claude-assets/skills/cfn-loop-output-processing/DELIVERY_SUMMARY.txt +462 -0
- package/claude-assets/skills/cfn-loop-output-processing/DEPRECATION_NOTICE.md +183 -0
- package/claude-assets/skills/cfn-loop-output-processing/EXAMPLES.md +609 -0
- package/claude-assets/skills/cfn-loop-output-processing/IMPLEMENTATION_SUMMARY.md +418 -0
- package/claude-assets/skills/cfn-loop-output-processing/INDEX.md +531 -0
- package/claude-assets/skills/cfn-loop-output-processing/MIGRATION.md +362 -0
- package/claude-assets/skills/cfn-loop-output-processing/README.md +114 -0
- package/claude-assets/skills/cfn-loop-output-processing/SKILL.md +633 -0
- package/{.claude/skills/cfn-docker-redis-coordination → claude-assets/skills/cfn-loop-output-processing}/jest.config.js +7 -15
- package/claude-assets/skills/cfn-loop-output-processing/package.json +50 -0
- package/claude-assets/skills/cfn-loop-output-processing/src/cli/process-loop2.ts +195 -0
- package/claude-assets/skills/cfn-loop-output-processing/src/cli/process-loop3.ts +157 -0
- package/claude-assets/skills/cfn-loop-output-processing/src/output-processor.ts +632 -0
- package/claude-assets/skills/cfn-loop-output-processing/tests/output-processor.test.ts +617 -0
- package/claude-assets/skills/{cfn-docker-redis-coordination → cfn-loop-output-processing}/tsconfig.json +16 -7
- package/claude-assets/skills/cfn-loop-validation/IMPLEMENTATION_SUMMARY.md +672 -0
- package/claude-assets/skills/cfn-loop-validation/INDEX.md +531 -0
- package/claude-assets/skills/cfn-loop-validation/README_TYPESCRIPT.md +454 -0
- package/claude-assets/skills/cfn-loop-validation/SKILL.md +48 -1
- package/claude-assets/skills/cfn-loop-validation/SKILL.md.backup +353 -0
- package/claude-assets/skills/cfn-loop-validation/SKILL_TYPESCRIPT.md +782 -0
- package/claude-assets/skills/cfn-loop-validation/VAPOR_DETECTION_EXAMPLES.md +598 -0
- package/claude-assets/skills/cfn-loop-validation/check-dependencies.sh +22 -0
- package/claude-assets/skills/cfn-loop-validation/check-dependencies.sh.backup +31 -0
- package/claude-assets/skills/cfn-loop-validation/detect-vapor.sh +59 -0
- package/claude-assets/skills/cfn-loop-validation/detect-vapor.sh.backup +37 -0
- package/claude-assets/skills/cfn-loop-validation/dist/.tsbuildinfo +1 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/detect-vapor.d.ts +14 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/detect-vapor.d.ts.map +1 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/detect-vapor.js +185 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/detect-vapor.js.map +1 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-deliverables.d.ts +14 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-deliverables.d.ts.map +1 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-deliverables.js +176 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-deliverables.js.map +1 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-gate.d.ts +19 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-gate.d.ts.map +1 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-gate.js +123 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-gate.js.map +1 -0
- package/claude-assets/skills/cfn-loop-validation/dist/types.d.ts +156 -0
- package/claude-assets/skills/cfn-loop-validation/dist/types.d.ts.map +1 -0
- package/claude-assets/skills/cfn-loop-validation/dist/types.js +66 -0
- package/claude-assets/skills/cfn-loop-validation/dist/types.js.map +1 -0
- package/claude-assets/skills/cfn-loop-validation/dist/validator.d.ts +85 -0
- package/claude-assets/skills/cfn-loop-validation/dist/validator.d.ts.map +1 -0
- package/claude-assets/skills/cfn-loop-validation/dist/validator.js +411 -0
- package/claude-assets/skills/cfn-loop-validation/dist/validator.js.map +1 -0
- package/claude-assets/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +22 -0
- package/claude-assets/skills/cfn-loop-validation/orchestrate-cfn-loop.sh.backup +252 -0
- package/claude-assets/skills/cfn-loop-validation/package.json +93 -0
- package/claude-assets/skills/cfn-loop-validation/src/cli/detect-vapor.ts +177 -0
- package/claude-assets/skills/cfn-loop-validation/src/cli/validate-deliverables.ts +161 -0
- package/claude-assets/skills/cfn-loop-validation/src/cli/validate-gate.ts +139 -0
- package/claude-assets/skills/cfn-loop-validation/src/types.ts +215 -0
- package/claude-assets/skills/cfn-loop-validation/src/validator.ts +503 -0
- package/claude-assets/skills/cfn-loop-validation/tests/validator.test.ts +537 -0
- package/claude-assets/skills/{cfn-redis-coordination → cfn-loop-validation}/tsconfig.json +34 -31
- package/claude-assets/skills/cfn-loop-validation/validate-deliverables.sh +59 -0
- package/claude-assets/skills/cfn-loop-validation/validate-deliverables.sh.backup +37 -0
- package/claude-assets/skills/cfn-loop-validation/validate-gate.sh +63 -0
- package/claude-assets/skills/cfn-loop-validation/validate-gate.sh.backup +41 -0
- package/claude-assets/skills/cfn-loop-validation/validate-iteration.sh +22 -0
- package/claude-assets/skills/cfn-loop-validation/validate-iteration.sh.backup +134 -0
- package/claude-assets/skills/cfn-product-owner-decision/SKILL.md +479 -147
- package/claude-assets/skills/cfn-product-owner-decision/TYPESCRIPT_IMPLEMENTATION.md +653 -0
- package/claude-assets/skills/cfn-product-owner-decision/{execute-decision.sh → archive/legacy-bash/execute-decision.sh} +24 -2
- package/claude-assets/skills/cfn-provider-routing/README.md +129 -0
- package/claude-assets/skills/cfn-provider-routing/SKILL.md +215 -0
- package/claude-assets/skills/cfn-provider-routing/resolve-provider-model.ts +223 -0
- package/claude-assets/skills/docker-build/build.sh +1 -1
- package/claude-assets/skills/pre-edit-backup/SKILL.md +324 -0
- package/claude-assets/skills/pre-edit-backup/SKILL.md.backup +277 -0
- package/claude-assets/skills/pre-edit-backup/backup.sh +22 -0
- package/claude-assets/skills/pre-edit-backup/backup.sh.backup +107 -0
- package/dist/agent/skill-mcp-selector.js +2 -1
- package/dist/agent/skill-mcp-selector.js.map +1 -1
- package/dist/api/auth-endpoints.js +415 -0
- package/dist/api/auth-endpoints.js.map +1 -0
- package/dist/api/task-endpoints.js +562 -0
- package/dist/api/task-endpoints.js.map +1 -0
- package/dist/backend/server.js +418 -0
- package/dist/backend/server.js.map +1 -0
- package/dist/cfn-loop/product-owner/decision-parser.js +356 -0
- package/dist/cfn-loop/product-owner/decision-parser.js.map +1 -0
- package/dist/cfn-loop/product-owner/index.js +1 -0
- package/dist/cfn-loop/product-owner/index.js.map +1 -1
- package/dist/cli/agent-command.js +1 -1
- package/dist/cli/agent-command.js.map +1 -1
- package/dist/cli/agent-completion.js +273 -0
- package/dist/cli/agent-completion.js.map +1 -0
- package/dist/cli/agent-executor.js +470 -26
- package/dist/cli/agent-executor.js.map +1 -1
- package/dist/cli/agent-prompt-builder.js +83 -48
- package/dist/cli/agent-prompt-builder.js.map +1 -1
- package/dist/cli/agent-spawn.js +7 -4
- package/dist/cli/agent-spawn.js.map +1 -1
- package/dist/cli/agent-spawner.js +546 -0
- package/dist/cli/agent-spawner.js.map +1 -0
- package/dist/cli/agent-token-manager.js +2 -1
- package/dist/cli/agent-token-manager.js.map +1 -1
- package/dist/cli/anthropic-client.js +127 -14
- package/dist/cli/anthropic-client.js.map +1 -1
- package/dist/cli/cfn-context.js +2 -1
- package/dist/cli/cfn-context.js.map +1 -1
- package/dist/cli/cfn-metrics.js +2 -1
- package/dist/cli/cfn-metrics.js.map +1 -1
- package/dist/cli/cfn-redis.js +2 -1
- package/dist/cli/cfn-redis.js.map +1 -1
- package/dist/cli/cli-agent-context.js +2 -0
- package/dist/cli/cli-agent-context.js.map +1 -1
- package/dist/cli/config-manager.js +90 -356
- package/dist/cli/config-manager.js.map +1 -1
- package/dist/cli/conversation-fork-cleanup.js +2 -1
- package/dist/cli/conversation-fork-cleanup.js.map +1 -1
- package/dist/cli/conversation-fork.js +2 -1
- package/dist/cli/conversation-fork.js.map +1 -1
- package/dist/cli/coordination/agent-messaging.js +415 -0
- package/dist/cli/coordination/agent-messaging.js.map +1 -0
- package/dist/cli/coordination/wait-for-threshold.js +232 -0
- package/dist/cli/coordination/wait-for-threshold.js.map +1 -0
- package/dist/cli/index.js +11 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/iteration-history.js +2 -1
- package/dist/cli/iteration-history.js.map +1 -1
- package/dist/cli/parse-decision-cli.js +268 -0
- package/dist/cli/parse-decision-cli.js.map +1 -0
- package/dist/cli/post-edit-hook.js +83 -0
- package/dist/cli/post-edit-hook.js.map +1 -0
- package/dist/cli/pre-edit-hook.js +77 -0
- package/dist/cli/pre-edit-hook.js.map +1 -0
- package/dist/cli/process-lifecycle.js +5 -1
- package/dist/cli/process-lifecycle.js.map +1 -1
- package/dist/cli/spawn-agent-cli.js +244 -0
- package/dist/cli/spawn-agent-cli.js.map +1 -0
- package/dist/coordination/coordination-wrapper.js +383 -0
- package/dist/coordination/coordination-wrapper.js.map +1 -0
- package/dist/coordination/redis-waiting-mode.js +4 -0
- package/dist/coordination/redis-waiting-mode.js.map +1 -1
- package/dist/coordination/store-success-criteria.js +68 -0
- package/dist/coordination/store-success-criteria.js.map +1 -0
- package/dist/coordination/store-task-context.js +65 -0
- package/dist/coordination/store-task-context.js.map +1 -0
- package/dist/hooks/backup-manager.js +273 -0
- package/dist/hooks/backup-manager.js.map +1 -0
- package/dist/hooks/post-edit-validator.js +388 -0
- package/dist/hooks/post-edit-validator.js.map +1 -0
- package/dist/integration/index.js +19 -0
- package/dist/integration/index.js.map +1 -0
- package/dist/integration/task-mode-adapter.js +297 -0
- package/dist/integration/task-mode-adapter.js.map +1 -0
- package/dist/integration/trigger-dev-client.js +253 -0
- package/dist/integration/trigger-dev-client.js.map +1 -0
- package/dist/integration/trigger-dev-webhooks.js +362 -0
- package/dist/integration/trigger-dev-webhooks.js.map +1 -0
- package/dist/lib/artifact-registry.js +4 -0
- package/dist/lib/artifact-registry.js.map +1 -1
- package/dist/lib/connection-pool.js +390 -0
- package/dist/lib/connection-pool.js.map +1 -0
- package/dist/lib/environment-contract.js +258 -0
- package/dist/lib/environment-contract.js.map +1 -0
- package/dist/lib/path-validator.js +14 -5
- package/dist/lib/path-validator.js.map +1 -1
- package/dist/lib/query-optimizer.js +388 -0
- package/dist/lib/query-optimizer.js.map +1 -0
- package/dist/lib/redis-queue-manager.js +5 -1
- package/dist/lib/redis-queue-manager.js.map +1 -1
- package/dist/lib/result-cache.js +285 -0
- package/dist/lib/result-cache.js.map +1 -0
- package/dist/mcp/auth-middleware.js +2 -1
- package/dist/mcp/auth-middleware.js.map +1 -1
- package/dist/mcp/playwright-mcp-server-auth.js +2 -1
- package/dist/mcp/playwright-mcp-server-auth.js.map +1 -1
- package/dist/middleware/authentication.js +317 -0
- package/dist/middleware/authentication.js.map +1 -0
- package/dist/services/authentication.js +669 -0
- package/dist/services/authentication.js.map +1 -0
- package/dist/services/session-management.js +436 -0
- package/dist/services/session-management.js.map +1 -0
- package/dist/services/skill-deployment.js +8 -6
- package/dist/services/skill-deployment.js.map +1 -1
- package/dist/services/user-service.js +710 -0
- package/dist/services/user-service.js.map +1 -0
- package/dist/types/trigger-dev-events.d.js +10 -0
- package/dist/types/trigger-dev-events.d.js.map +1 -0
- package/docs/README.md +240 -0
- package/package.json +15 -4
- package/scripts/build-agent-image.sh +1 -1
- package/scripts/compare-workflow-performance.sh +556 -0
- package/scripts/cost-allocation-tracker.sh +632 -0
- package/scripts/docker-rebuild-all-agents.sh +2 -2
- package/scripts/migrate-to-optimized-workflows.sh +438 -0
- package/scripts/organize-docs.sh +338 -0
- package/scripts/reorganize-tests.sh +280 -0
- package/scripts/trigger-dev-setup.sh +279 -0
- package/tests/README.md +45 -0
- package/.claude/commands/cost-savings-status.md +0 -34
- package/.claude/commands/metrics-summary.md +0 -58
- package/.claude/skills/cfn-docker-redis-coordination/MIGRATION_SUMMARY.md +0 -348
- package/.claude/skills/cfn-docker-redis-coordination/README.md +0 -294
- package/.claude/skills/cfn-docker-redis-coordination/SKILL.md +0 -435
- package/.claude/skills/cfn-docker-redis-coordination/coordinate.sh +0 -650
- package/.claude/skills/cfn-docker-redis-coordination/coordinate.sh.backup-1763145142 +0 -641
- package/.claude/skills/cfn-docker-redis-coordination/package-lock.json +0 -5259
- package/.claude/skills/cfn-docker-redis-coordination/package.json +0 -40
- package/.claude/skills/cfn-docker-redis-coordination/src/coordinator.ts +0 -801
- package/.claude/skills/cfn-docker-redis-coordination/src/index.ts +0 -42
- package/.claude/skills/cfn-docker-redis-coordination/src/types.ts +0 -351
- package/.claude/skills/cfn-docker-redis-coordination/tests/coordinator.test.ts +0 -1464
- package/.claude/skills/cfn-docker-redis-coordination/tsconfig.json +0 -30
- package/.claude/skills/cfn-loop-orchestration/helpers/auto-tune-timeouts.sh +0 -228
- package/.claude/skills/cfn-loop-orchestration/helpers/consensus-ts.sh +0 -104
- package/.claude/skills/cfn-loop-orchestration/helpers/consensus.sh +0 -94
- package/.claude/skills/cfn-loop-orchestration/helpers/context-injection.sh +0 -142
- package/.claude/skills/cfn-loop-orchestration/helpers/context-lookup.sh +0 -359
- package/.claude/skills/cfn-loop-orchestration/helpers/deliverable-verifier-ts.sh +0 -123
- package/.claude/skills/cfn-loop-orchestration/helpers/deliverable-verifier.sh +0 -71
- package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +0 -56
- package/.claude/skills/cfn-loop-orchestration/helpers/iteration-manager-ts.sh +0 -89
- package/.claude/skills/cfn-loop-orchestration/helpers/iteration-manager.sh +0 -87
- package/.claude/skills/cfn-loop-orchestration/helpers/orchestrate-ts.sh +0 -104
- package/.claude/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +0 -56
- package/.claude/skills/cfn-loop-orchestration/helpers/spawn-agents.sh +0 -290
- package/.claude/skills/cfn-loop-orchestration/helpers/timeout-calculator-ts.sh +0 -47
- package/.claude/skills/cfn-loop-orchestration/helpers/timeout-calculator.sh +0 -51
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +0 -1345
- package/.claude/skills/cfn-redis-coordination/AGENT_LOGGING.md +0 -280
- package/.claude/skills/cfn-redis-coordination/BZPOPMIN_FIX_SUMMARY.md +0 -209
- package/.claude/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +0 -319
- package/.claude/skills/cfn-redis-coordination/agent-log.sh.bak +0 -124
- package/.claude/skills/cfn-redis-coordination/config.json +0 -61
- package/.claude/skills/cfn-redis-coordination/demos/phase4-wake-queue-test-report.md +0 -82
- package/.claude/skills/cfn-redis-coordination/demos/test-bzpopmin-fix.sh +0 -274
- package/.claude/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +0 -0
- package/.claude/skills/cfn-redis-coordination/docs/migration/PHASE_3_REDIS_COORDINATION_COMPLETION_REPORT.md +0 -553
- package/.claude/skills/cfn-redis-coordination/jest.config.js +0 -23
- package/.claude/skills/cfn-redis-coordination/package-lock.json +0 -5272
- package/.claude/skills/cfn-redis-coordination/package.json +0 -45
- package/.claude/skills/cfn-redis-coordination/src/agent-logger.ts +0 -446
- package/.claude/skills/cfn-redis-coordination/src/agent-recovery.ts +0 -454
- package/.claude/skills/cfn-redis-coordination/src/completion-reporter.ts +0 -396
- package/.claude/skills/cfn-redis-coordination/src/context-manager.ts +0 -327
- package/.claude/skills/cfn-redis-coordination/src/index.ts +0 -82
- package/.claude/skills/cfn-redis-coordination/src/mode-detector.ts +0 -155
- package/.claude/skills/cfn-redis-coordination/src/redis/redis-client.ts +0 -305
- package/.claude/skills/cfn-redis-coordination/src/redis/redis-functions.ts +0 -283
- package/.claude/skills/cfn-redis-coordination/src/redis-client.ts +0 -654
- package/.claude/skills/cfn-redis-coordination/src/result-collector.ts +0 -437
- package/.claude/skills/cfn-redis-coordination/src/swarm-manager.ts +0 -494
- package/.claude/skills/cfn-redis-coordination/src/task-analyzer.ts +0 -404
- package/.claude/skills/cfn-redis-coordination/src/task-executor.ts +0 -423
- package/.claude/skills/cfn-redis-coordination/src/types.ts +0 -235
- package/.claude/skills/cfn-redis-coordination/src/waiting-coordinator.ts +0 -587
- package/.claude/skills/cfn-redis-coordination/store-success-criteria.sh +0 -85
- package/.claude/skills/cfn-redis-coordination/test-connection-attempts.js +0 -70
- package/.claude/skills/cfn-redis-coordination/test-mode-simple.js +0 -121
- package/.claude/skills/cfn-redis-coordination/test-redis-check.js +0 -84
- package/.claude/skills/cfn-redis-coordination/test-task-mode-redis.cjs +0 -391
- package/.claude/skills/cfn-redis-coordination/tests/coordination.test.ts +0 -788
- package/.claude/skills/cfn-redis-coordination/update-all-scripts.sh +0 -67
- package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +0 -980
- package/claude-assets/agents/cfn-dev-team/dev-ops/monitoring-specialist.md +0 -759
- package/claude-assets/agents/custom/test-mcp-access.md +0 -24
- package/claude-assets/agents/typescript-specialist.md +0 -280
- package/claude-assets/commands/cost-savings-status.md +0 -34
- package/claude-assets/commands/metrics-summary.md +0 -58
- package/claude-assets/skills/cfn-docker-redis-coordination/MIGRATION_SUMMARY.md +0 -348
- package/claude-assets/skills/cfn-docker-redis-coordination/README.md +0 -294
- package/claude-assets/skills/cfn-docker-redis-coordination/SKILL.md +0 -435
- package/claude-assets/skills/cfn-docker-redis-coordination/coordinate.sh +0 -650
- package/claude-assets/skills/cfn-docker-redis-coordination/coordinate.sh.backup-1763145142 +0 -641
- package/claude-assets/skills/cfn-docker-redis-coordination/jest.config.js +0 -37
- package/claude-assets/skills/cfn-docker-redis-coordination/package-lock.json +0 -5259
- package/claude-assets/skills/cfn-docker-redis-coordination/package.json +0 -40
- package/claude-assets/skills/cfn-docker-redis-coordination/src/coordinator.ts +0 -801
- package/claude-assets/skills/cfn-docker-redis-coordination/src/index.ts +0 -42
- package/claude-assets/skills/cfn-docker-redis-coordination/src/types.ts +0 -351
- package/claude-assets/skills/cfn-docker-redis-coordination/tests/coordinator.test.ts +0 -1464
- package/claude-assets/skills/cfn-loop-orchestration/helpers/auto-tune-timeouts.sh +0 -228
- package/claude-assets/skills/cfn-loop-orchestration/helpers/consensus-ts.sh +0 -104
- package/claude-assets/skills/cfn-loop-orchestration/helpers/consensus.sh +0 -94
- package/claude-assets/skills/cfn-loop-orchestration/helpers/context-injection.sh +0 -142
- package/claude-assets/skills/cfn-loop-orchestration/helpers/context-lookup.sh +0 -359
- package/claude-assets/skills/cfn-loop-orchestration/helpers/deliverable-verifier-ts.sh +0 -123
- package/claude-assets/skills/cfn-loop-orchestration/helpers/deliverable-verifier.sh +0 -71
- package/claude-assets/skills/cfn-loop-orchestration/helpers/gate-check.sh +0 -56
- package/claude-assets/skills/cfn-loop-orchestration/helpers/iteration-manager-ts.sh +0 -89
- package/claude-assets/skills/cfn-loop-orchestration/helpers/iteration-manager.sh +0 -87
- package/claude-assets/skills/cfn-loop-orchestration/helpers/orchestrate-ts.sh +0 -104
- package/claude-assets/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +0 -56
- package/claude-assets/skills/cfn-loop-orchestration/helpers/spawn-agents.sh +0 -290
- package/claude-assets/skills/cfn-loop-orchestration/helpers/timeout-calculator-ts.sh +0 -47
- package/claude-assets/skills/cfn-loop-orchestration/helpers/timeout-calculator.sh +0 -51
- package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +0 -1345
- package/claude-assets/skills/cfn-redis-cleanup/cleanup-redis.sh +0 -130
- package/claude-assets/skills/cfn-redis-coordination/AGENT_LOGGING.md +0 -280
- package/claude-assets/skills/cfn-redis-coordination/BZPOPMIN_FIX_SUMMARY.md +0 -209
- package/claude-assets/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +0 -319
- package/claude-assets/skills/cfn-redis-coordination/agent-log.sh.bak +0 -124
- package/claude-assets/skills/cfn-redis-coordination/config.json +0 -61
- package/claude-assets/skills/cfn-redis-coordination/demos/phase4-wake-queue-test-report.md +0 -82
- package/claude-assets/skills/cfn-redis-coordination/demos/test-bzpopmin-fix.sh +0 -274
- package/claude-assets/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +0 -0
- package/claude-assets/skills/cfn-redis-coordination/docs/migration/PHASE_3_REDIS_COORDINATION_COMPLETION_REPORT.md +0 -553
- package/claude-assets/skills/cfn-redis-coordination/jest.config.js +0 -23
- package/claude-assets/skills/cfn-redis-coordination/package-lock.json +0 -5272
- package/claude-assets/skills/cfn-redis-coordination/package.json +0 -45
- package/claude-assets/skills/cfn-redis-coordination/src/agent-logger.ts +0 -446
- package/claude-assets/skills/cfn-redis-coordination/src/agent-recovery.ts +0 -454
- package/claude-assets/skills/cfn-redis-coordination/src/completion-reporter.ts +0 -396
- package/claude-assets/skills/cfn-redis-coordination/src/context-manager.ts +0 -327
- package/claude-assets/skills/cfn-redis-coordination/src/index.ts +0 -82
- package/claude-assets/skills/cfn-redis-coordination/src/mode-detector.ts +0 -155
- package/claude-assets/skills/cfn-redis-coordination/src/redis/redis-client.ts +0 -305
- package/claude-assets/skills/cfn-redis-coordination/src/redis/redis-functions.ts +0 -283
- package/claude-assets/skills/cfn-redis-coordination/src/redis-client.ts +0 -654
- package/claude-assets/skills/cfn-redis-coordination/src/result-collector.ts +0 -437
- package/claude-assets/skills/cfn-redis-coordination/src/swarm-manager.ts +0 -494
- package/claude-assets/skills/cfn-redis-coordination/src/task-analyzer.ts +0 -404
- package/claude-assets/skills/cfn-redis-coordination/src/task-executor.ts +0 -423
- package/claude-assets/skills/cfn-redis-coordination/src/types.ts +0 -235
- package/claude-assets/skills/cfn-redis-coordination/src/waiting-coordinator.ts +0 -587
- package/claude-assets/skills/cfn-redis-coordination/store-success-criteria.sh +0 -85
- package/claude-assets/skills/cfn-redis-coordination/test-connection-attempts.js +0 -70
- package/claude-assets/skills/cfn-redis-coordination/test-mode-simple.js +0 -121
- package/claude-assets/skills/cfn-redis-coordination/test-redis-check.js +0 -84
- package/claude-assets/skills/cfn-redis-coordination/test-task-mode-redis.cjs +0 -391
- package/claude-assets/skills/cfn-redis-coordination/tests/coordination.test.ts +0 -788
- package/claude-assets/skills/cfn-redis-coordination/update-all-scripts.sh +0 -67
- package/claude-assets/skills/cfn-redis-data-extraction/SKILL.md +0 -442
- package/claude-assets/skills/cfn-redis-data-extraction/extract.sh +0 -306
- package/dist/coordination/index.js +0 -25
- package/dist/coordination/index.js.map +0 -1
- package/docs/BUG_19_MEMORY_LEAK_TASK_MODE.md +0 -405
- package/docs/MEMORY_CLEANUP_GUIDE.md +0 -358
- package/docs/MEMORY_LEAK_FIX_SUMMARY.md +0 -322
- package/docs/REDIS_CLEANUP_EXECUTIVE_SUMMARY.md +0 -319
- package/docs/REDIS_CLEANUP_VERIFICATION_REPORT.md +0 -574
- package/tests/test-memory-leak-task-mode.sh +0 -435
- /package/.claude/skills/cfn-loop-orchestration/{inject-loop-context.sh → archive/legacy-bash/inject-loop-context.sh} +0 -0
- /package/.claude/skills/cfn-loop-orchestration/{monitor-execution.sh → archive/legacy-bash/monitor-execution.sh} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{agent-log.sh → agent-log.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{agent-recovery.sh → agent-recovery.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{analyze-task-complexity.sh → analyze-task-complexity.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/bash-wrappers/{store-context.sh → store-context.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{cancel-swarm.sh → cancel-swarm.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{cfn-loop-exec.sh → cfn-loop-exec.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{cfn-loop-relaunch.sh → cfn-loop-relaunch.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{collect-confidence-scores.sh → collect-confidence-scores.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{collect-results.sh → collect-results.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{complete-swarm.sh → complete-swarm.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{get-context.sh → get-context.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{get-success-criteria.sh → get-success-criteria.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{invoke-waiting-mode.sh → invoke-waiting-mode.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{redis-cli-wrapper.sh → redis-cli-wrapper.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{redis-functions.sh → redis-functions.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{report-completion.sh → report-completion.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{store-context.sh → store-context.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-loop-orchestration/{inject-loop-context.sh → archive/legacy-bash/inject-loop-context.sh} +0 -0
- /package/claude-assets/skills/cfn-loop-orchestration/{monitor-execution.sh → archive/legacy-bash/monitor-execution.sh} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{agent-log.sh → agent-log.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{agent-recovery.sh → agent-recovery.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{analyze-task-complexity.sh → analyze-task-complexity.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/bash-wrappers/{store-context.sh → store-context.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{cancel-swarm.sh → cancel-swarm.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{cfn-loop-exec.sh → cfn-loop-exec.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{cfn-loop-relaunch.sh → cfn-loop-relaunch.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{collect-confidence-scores.sh → collect-confidence-scores.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{collect-results.sh → collect-results.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{complete-swarm.sh → complete-swarm.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{get-context.sh → get-context.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{get-success-criteria.sh → get-success-criteria.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{invoke-waiting-mode.sh → invoke-waiting-mode.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{redis-cli-wrapper.sh → redis-cli-wrapper.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{redis-functions.sh → redis-functions.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{report-completion.sh → report-completion.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{store-context.sh → store-context.sh.backup} +0 -0
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task Mode Adapter - In-Memory and Hybrid Coordination
|
|
3
|
+
*
|
|
4
|
+
* Provides task mode coordination that works with or without trigger.dev:
|
|
5
|
+
* - In-memory event queuing when trigger.dev unavailable
|
|
6
|
+
* - Hybrid mode using trigger.dev webhooks for event notifications
|
|
7
|
+
* - Fallback to memory when API calls fail
|
|
8
|
+
*
|
|
9
|
+
* Configuration:
|
|
10
|
+
* - TASK_MODE_USE_MEMORY: Force memory mode (default: auto-detect)
|
|
11
|
+
* - TASK_MODE_TIMEOUT_MS: Default timeout for agent completion waits
|
|
12
|
+
*/ import { EventEmitter } from 'node:events';
|
|
13
|
+
import TriggerDevClient from './trigger-dev-client.js';
|
|
14
|
+
/**
|
|
15
|
+
* Task mode event storage (FIFO queue)
|
|
16
|
+
*/ export class TaskModeEventQueue {
|
|
17
|
+
queue = [];
|
|
18
|
+
eventEmitter = new EventEmitter();
|
|
19
|
+
/**
|
|
20
|
+
* Enqueue event for later processing
|
|
21
|
+
*/ enqueue(event) {
|
|
22
|
+
this.queue.push(event);
|
|
23
|
+
this.eventEmitter.emit('event-added', event);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Dequeue next event (FIFO)
|
|
27
|
+
*/ dequeue() {
|
|
28
|
+
return this.queue.shift();
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Get all events of specific type
|
|
32
|
+
*/ getByType(type) {
|
|
33
|
+
return this.queue.filter((e)=>e.type === type);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Get all events for task
|
|
37
|
+
*/ getByTaskId(taskId) {
|
|
38
|
+
return this.queue.filter((e)=>e.taskId === taskId);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Clear all events
|
|
42
|
+
*/ clear() {
|
|
43
|
+
this.queue = [];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Get queue size
|
|
47
|
+
*/ size() {
|
|
48
|
+
return this.queue.length;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Subscribe to new events
|
|
52
|
+
*/ on(event, listener) {
|
|
53
|
+
this.eventEmitter.on(event, listener);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Unsubscribe from events
|
|
57
|
+
*/ off(event, listener) {
|
|
58
|
+
this.eventEmitter.off(event, listener);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* TaskModeCoordinator - In-memory and hybrid coordination
|
|
63
|
+
*
|
|
64
|
+
* Provides task mode without Redis/external coordination:
|
|
65
|
+
* - Spawns agents with in-memory tracking
|
|
66
|
+
* - Waits for completion via event listeners
|
|
67
|
+
* - Falls back to memory if trigger.dev unavailable
|
|
68
|
+
* - Optionally uses trigger.dev for webhook notifications
|
|
69
|
+
*/ export class TaskModeCoordinator {
|
|
70
|
+
config;
|
|
71
|
+
triggerDevClient;
|
|
72
|
+
eventQueue = new TaskModeEventQueue();
|
|
73
|
+
pendingCompletions = new Map();
|
|
74
|
+
constructor(options){
|
|
75
|
+
this.config = {
|
|
76
|
+
useMemory: options?.useMemory !== undefined ? options.useMemory : process.env.TASK_MODE_USE_MEMORY === 'true' || !process.env.TRIGGER_API_URL,
|
|
77
|
+
defaultTimeoutMs: options?.defaultTimeoutMs || 30000,
|
|
78
|
+
useTriggerDev: Boolean(process.env.TRIGGER_API_URL)
|
|
79
|
+
};
|
|
80
|
+
// Initialize trigger.dev client if configured
|
|
81
|
+
if (this.config.useTriggerDev && !this.config.useMemory) {
|
|
82
|
+
try {
|
|
83
|
+
this.triggerDevClient = new TriggerDevClient(options?.triggerDevConfig);
|
|
84
|
+
} catch (error) {
|
|
85
|
+
// Fall back to memory mode if trigger.dev config fails
|
|
86
|
+
console.warn('Trigger.dev initialization failed, using memory mode:', error);
|
|
87
|
+
this.config.useMemory = true;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Spawn agent and wait for completion
|
|
93
|
+
*
|
|
94
|
+
* TODO: RUNTIME_TEST: Verify agent spawning works in memory mode
|
|
95
|
+
* TODO: RUNTIME_TEST: Test timeout behavior with slow agents
|
|
96
|
+
*
|
|
97
|
+
* @param agentType Type of agent to spawn
|
|
98
|
+
* @param taskId Task ID
|
|
99
|
+
* @param payload Agent configuration
|
|
100
|
+
* @param timeoutMs Optional timeout override
|
|
101
|
+
* @returns Promise resolving to agent result
|
|
102
|
+
* @throws Error on spawn failure or timeout
|
|
103
|
+
*/ async spawnAgent(agentType, taskId, payload, timeoutMs) {
|
|
104
|
+
const agentId = this.generateAgentId(agentType);
|
|
105
|
+
const timeout = timeoutMs || this.config.defaultTimeoutMs;
|
|
106
|
+
try {
|
|
107
|
+
// If using trigger.dev, trigger the run
|
|
108
|
+
if (this.triggerDevClient && !this.config.useMemory) {
|
|
109
|
+
await this.triggerViaTriggerDev(agentType, taskId, payload);
|
|
110
|
+
}
|
|
111
|
+
// Wait for completion either via webhook or event queue
|
|
112
|
+
const result = await this.waitForCompletion(agentId, timeout);
|
|
113
|
+
return result;
|
|
114
|
+
} catch (error) {
|
|
115
|
+
if (error instanceof Error) {
|
|
116
|
+
throw error;
|
|
117
|
+
}
|
|
118
|
+
throw new Error(`Agent spawn failed: ${String(error)}`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Register agent completion event
|
|
123
|
+
*
|
|
124
|
+
* Used by webhook handlers to signal completion
|
|
125
|
+
*/ registerAgentComplete(payload) {
|
|
126
|
+
this.eventQueue.enqueue({
|
|
127
|
+
type: 'agent-complete',
|
|
128
|
+
taskId: payload.taskId,
|
|
129
|
+
payload,
|
|
130
|
+
timestamp: Date.now()
|
|
131
|
+
});
|
|
132
|
+
// Resolve pending completion if waiting
|
|
133
|
+
const pending = this.pendingCompletions.get(payload.agentId);
|
|
134
|
+
if (pending) {
|
|
135
|
+
clearTimeout(pending.timeoutHandle);
|
|
136
|
+
pending.resolve({
|
|
137
|
+
agentId: payload.agentId,
|
|
138
|
+
agentType: payload.agentType,
|
|
139
|
+
success: payload.status === 'success',
|
|
140
|
+
output: payload.output,
|
|
141
|
+
confidenceScore: payload.confidenceScore,
|
|
142
|
+
executionTimeMs: payload.executionTimeMs
|
|
143
|
+
});
|
|
144
|
+
this.pendingCompletions.delete(payload.agentId);
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
success: true,
|
|
148
|
+
message: 'Agent completion registered',
|
|
149
|
+
data: {
|
|
150
|
+
agentId: payload.agentId
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Register gate result
|
|
156
|
+
*/ registerGateResult(payload) {
|
|
157
|
+
this.eventQueue.enqueue({
|
|
158
|
+
type: 'gate-result',
|
|
159
|
+
taskId: payload.taskId,
|
|
160
|
+
payload,
|
|
161
|
+
timestamp: Date.now()
|
|
162
|
+
});
|
|
163
|
+
return {
|
|
164
|
+
success: true,
|
|
165
|
+
message: 'Gate result registered',
|
|
166
|
+
data: {
|
|
167
|
+
taskId: payload.taskId,
|
|
168
|
+
passed: payload.passed
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Register consensus result
|
|
174
|
+
*/ registerConsensusResult(payload) {
|
|
175
|
+
this.eventQueue.enqueue({
|
|
176
|
+
type: 'consensus-result',
|
|
177
|
+
taskId: payload.taskId,
|
|
178
|
+
payload,
|
|
179
|
+
timestamp: Date.now()
|
|
180
|
+
});
|
|
181
|
+
return {
|
|
182
|
+
success: true,
|
|
183
|
+
message: 'Consensus result registered',
|
|
184
|
+
data: {
|
|
185
|
+
taskId: payload.taskId,
|
|
186
|
+
consensusScore: payload.consensusScore
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Register PO decision
|
|
192
|
+
*/ registerPODecision(payload) {
|
|
193
|
+
this.eventQueue.enqueue({
|
|
194
|
+
type: 'po-decision',
|
|
195
|
+
taskId: payload.taskId,
|
|
196
|
+
payload,
|
|
197
|
+
timestamp: Date.now()
|
|
198
|
+
});
|
|
199
|
+
return {
|
|
200
|
+
success: true,
|
|
201
|
+
message: 'PO decision registered',
|
|
202
|
+
data: {
|
|
203
|
+
taskId: payload.taskId,
|
|
204
|
+
decision: payload.decision
|
|
205
|
+
}
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Get event queue (for testing and inspection)
|
|
210
|
+
*/ getEventQueue() {
|
|
211
|
+
return this.eventQueue;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Get all events for task
|
|
215
|
+
*/ getTaskEvents(taskId) {
|
|
216
|
+
return this.eventQueue.getByTaskId(taskId);
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Check if using memory mode
|
|
220
|
+
*/ isMemoryMode() {
|
|
221
|
+
return this.config.useMemory;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Internal: Trigger agent run via trigger.dev
|
|
225
|
+
*
|
|
226
|
+
* @private
|
|
227
|
+
*/ async triggerViaTriggerDev(agentType, taskId, payload) {
|
|
228
|
+
if (!this.triggerDevClient) {
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
try {
|
|
232
|
+
// TODO: RUNTIME_TEST: Verify trigger.dev API call succeeds
|
|
233
|
+
await this.triggerDevClient.triggerCFNLoop({
|
|
234
|
+
taskId,
|
|
235
|
+
description: `Task mode agent: ${agentType}`,
|
|
236
|
+
mode: 'standard',
|
|
237
|
+
successCriteria: {
|
|
238
|
+
gate: 'test-pass-rate >= 0.95',
|
|
239
|
+
consensusThreshold: 0.9,
|
|
240
|
+
testPassRateThreshold: 0.95
|
|
241
|
+
},
|
|
242
|
+
context: {
|
|
243
|
+
agentType,
|
|
244
|
+
payload
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
} catch (error) {
|
|
248
|
+
// Fall back to memory mode if trigger.dev fails
|
|
249
|
+
console.warn('Trigger.dev trigger failed, continuing in memory mode:', error);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Internal: Wait for agent completion
|
|
254
|
+
*
|
|
255
|
+
* @private
|
|
256
|
+
*/ waitForCompletion(agentId, timeoutMs) {
|
|
257
|
+
return new Promise((resolve, reject)=>{
|
|
258
|
+
const timeoutHandle = setTimeout(()=>{
|
|
259
|
+
this.pendingCompletions.delete(agentId);
|
|
260
|
+
reject(new Error(`Agent ${agentId} did not complete within ${timeoutMs}ms`));
|
|
261
|
+
}, timeoutMs);
|
|
262
|
+
this.pendingCompletions.set(agentId, {
|
|
263
|
+
agentId,
|
|
264
|
+
resolve,
|
|
265
|
+
reject,
|
|
266
|
+
timeoutHandle
|
|
267
|
+
});
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Internal: Generate unique agent ID
|
|
272
|
+
*
|
|
273
|
+
* @private
|
|
274
|
+
*/ generateAgentId(agentType) {
|
|
275
|
+
return `${agentType}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Create task mode coordinator singleton
|
|
280
|
+
*/ let coordinatorInstance = null;
|
|
281
|
+
export const createTaskModeCoordinator = (options)=>{
|
|
282
|
+
if (!coordinatorInstance) {
|
|
283
|
+
coordinatorInstance = new TaskModeCoordinator(options);
|
|
284
|
+
}
|
|
285
|
+
return coordinatorInstance;
|
|
286
|
+
};
|
|
287
|
+
/**
|
|
288
|
+
* Get existing coordinator instance or create new one
|
|
289
|
+
*/ export const getTaskModeCoordinator = ()=>{
|
|
290
|
+
if (!coordinatorInstance) {
|
|
291
|
+
coordinatorInstance = new TaskModeCoordinator();
|
|
292
|
+
}
|
|
293
|
+
return coordinatorInstance;
|
|
294
|
+
};
|
|
295
|
+
export default TaskModeCoordinator;
|
|
296
|
+
|
|
297
|
+
//# sourceMappingURL=task-mode-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/integration/task-mode-adapter.ts"],"sourcesContent":["/**\r\n * Task Mode Adapter - In-Memory and Hybrid Coordination\r\n *\r\n * Provides task mode coordination that works with or without trigger.dev:\r\n * - In-memory event queuing when trigger.dev unavailable\r\n * - Hybrid mode using trigger.dev webhooks for event notifications\r\n * - Fallback to memory when API calls fail\r\n *\r\n * Configuration:\r\n * - TASK_MODE_USE_MEMORY: Force memory mode (default: auto-detect)\r\n * - TASK_MODE_TIMEOUT_MS: Default timeout for agent completion waits\r\n */\r\n\r\nimport { EventEmitter } from 'node:events';\r\nimport type {\r\n TaskModeSpawnRequest,\r\n TaskModeAgentResult,\r\n TaskModeEvent,\r\n AgentCompletePayload,\r\n GateResultPayload,\r\n ConsensusResultPayload,\r\n PODecisionPayload,\r\n AgentType,\r\n} from '../types/trigger-dev-events.d.js';\r\nimport TriggerDevClient, { TriggerDevError } from './trigger-dev-client.js';\r\n\r\n// TODO: RUNTIME_TEST: Verify EventEmitter imports work in Node.js environment\r\n\r\n/**\r\n * Task mode coordination result\r\n */\r\nexport interface TaskModeCoordinationResult {\r\n success: boolean;\r\n message: string;\r\n data?: unknown;\r\n}\r\n\r\n/**\r\n * Pending agent completion waiter\r\n */\r\ninterface PendingCompletion {\r\n agentId: string;\r\n resolve: (result: TaskModeAgentResult) => void;\r\n reject: (error: Error) => void;\r\n timeoutHandle: ReturnType<typeof setTimeout>;\r\n}\r\n\r\n/**\r\n * Task mode event storage (FIFO queue)\r\n */\r\nexport class TaskModeEventQueue {\r\n private queue: TaskModeEvent[] = [];\r\n private eventEmitter: EventEmitter = new EventEmitter();\r\n\r\n /**\r\n * Enqueue event for later processing\r\n */\r\n enqueue(event: TaskModeEvent): void {\r\n this.queue.push(event);\r\n this.eventEmitter.emit('event-added', event);\r\n }\r\n\r\n /**\r\n * Dequeue next event (FIFO)\r\n */\r\n dequeue(): TaskModeEvent | undefined {\r\n return this.queue.shift();\r\n }\r\n\r\n /**\r\n * Get all events of specific type\r\n */\r\n getByType(type: TaskModeEvent['type']): TaskModeEvent[] {\r\n return this.queue.filter(e => e.type === type);\r\n }\r\n\r\n /**\r\n * Get all events for task\r\n */\r\n getByTaskId(taskId: string): TaskModeEvent[] {\r\n return this.queue.filter(e => e.taskId === taskId);\r\n }\r\n\r\n /**\r\n * Clear all events\r\n */\r\n clear(): void {\r\n this.queue = [];\r\n }\r\n\r\n /**\r\n * Get queue size\r\n */\r\n size(): number {\r\n return this.queue.length;\r\n }\r\n\r\n /**\r\n * Subscribe to new events\r\n */\r\n on(event: string, listener: Function): void {\r\n this.eventEmitter.on(event, listener as any);\r\n }\r\n\r\n /**\r\n * Unsubscribe from events\r\n */\r\n off(event: string, listener: Function): void {\r\n this.eventEmitter.off(event, listener as any);\r\n }\r\n}\r\n\r\n/**\r\n * TaskModeCoordinator - In-memory and hybrid coordination\r\n *\r\n * Provides task mode without Redis/external coordination:\r\n * - Spawns agents with in-memory tracking\r\n * - Waits for completion via event listeners\r\n * - Falls back to memory if trigger.dev unavailable\r\n * - Optionally uses trigger.dev for webhook notifications\r\n */\r\nexport class TaskModeCoordinator {\r\n private readonly config: {\r\n useMemory: boolean;\r\n defaultTimeoutMs: number;\r\n useTriggerDev: boolean;\r\n };\r\n\r\n private triggerDevClient?: TriggerDevClient;\r\n private eventQueue: TaskModeEventQueue = new TaskModeEventQueue();\r\n private pendingCompletions: Map<string, PendingCompletion> = new Map();\r\n\r\n constructor(options?: {\r\n useMemory?: boolean;\r\n defaultTimeoutMs?: number;\r\n triggerDevConfig?: any;\r\n }) {\r\n this.config = {\r\n useMemory:\r\n options?.useMemory !== undefined\r\n ? options.useMemory\r\n : (process.env.TASK_MODE_USE_MEMORY === 'true' || !process.env.TRIGGER_API_URL),\r\n defaultTimeoutMs: options?.defaultTimeoutMs || 30000,\r\n useTriggerDev: Boolean(process.env.TRIGGER_API_URL),\r\n };\r\n\r\n // Initialize trigger.dev client if configured\r\n if (this.config.useTriggerDev && !this.config.useMemory) {\r\n try {\r\n this.triggerDevClient = new TriggerDevClient(options?.triggerDevConfig);\r\n } catch (error) {\r\n // Fall back to memory mode if trigger.dev config fails\r\n console.warn('Trigger.dev initialization failed, using memory mode:', error);\r\n this.config.useMemory = true;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Spawn agent and wait for completion\r\n *\r\n * TODO: RUNTIME_TEST: Verify agent spawning works in memory mode\r\n * TODO: RUNTIME_TEST: Test timeout behavior with slow agents\r\n *\r\n * @param agentType Type of agent to spawn\r\n * @param taskId Task ID\r\n * @param payload Agent configuration\r\n * @param timeoutMs Optional timeout override\r\n * @returns Promise resolving to agent result\r\n * @throws Error on spawn failure or timeout\r\n */\r\n async spawnAgent(\r\n agentType: AgentType,\r\n taskId: string,\r\n payload: Record<string, unknown>,\r\n timeoutMs?: number\r\n ): Promise<TaskModeAgentResult> {\r\n const agentId = this.generateAgentId(agentType);\r\n const timeout = timeoutMs || this.config.defaultTimeoutMs;\r\n\r\n try {\r\n // If using trigger.dev, trigger the run\r\n if (this.triggerDevClient && !this.config.useMemory) {\r\n await this.triggerViaTriggerDev(agentType, taskId, payload);\r\n }\r\n\r\n // Wait for completion either via webhook or event queue\r\n const result = await this.waitForCompletion(agentId, timeout);\r\n return result;\r\n } catch (error) {\r\n if (error instanceof Error) {\r\n throw error;\r\n }\r\n throw new Error(`Agent spawn failed: ${String(error)}`);\r\n }\r\n }\r\n\r\n /**\r\n * Register agent completion event\r\n *\r\n * Used by webhook handlers to signal completion\r\n */\r\n registerAgentComplete(payload: AgentCompletePayload): TaskModeCoordinationResult {\r\n this.eventQueue.enqueue({\r\n type: 'agent-complete',\r\n taskId: payload.taskId,\r\n payload,\r\n timestamp: Date.now(),\r\n });\r\n\r\n // Resolve pending completion if waiting\r\n const pending = this.pendingCompletions.get(payload.agentId);\r\n if (pending) {\r\n clearTimeout(pending.timeoutHandle);\r\n pending.resolve({\r\n agentId: payload.agentId,\r\n agentType: payload.agentType,\r\n success: payload.status === 'success',\r\n output: payload.output,\r\n confidenceScore: payload.confidenceScore,\r\n executionTimeMs: payload.executionTimeMs,\r\n });\r\n this.pendingCompletions.delete(payload.agentId);\r\n }\r\n\r\n return {\r\n success: true,\r\n message: 'Agent completion registered',\r\n data: { agentId: payload.agentId },\r\n };\r\n }\r\n\r\n /**\r\n * Register gate result\r\n */\r\n registerGateResult(payload: GateResultPayload): TaskModeCoordinationResult {\r\n this.eventQueue.enqueue({\r\n type: 'gate-result',\r\n taskId: payload.taskId,\r\n payload,\r\n timestamp: Date.now(),\r\n });\r\n\r\n return {\r\n success: true,\r\n message: 'Gate result registered',\r\n data: { taskId: payload.taskId, passed: payload.passed },\r\n };\r\n }\r\n\r\n /**\r\n * Register consensus result\r\n */\r\n registerConsensusResult(payload: ConsensusResultPayload): TaskModeCoordinationResult {\r\n this.eventQueue.enqueue({\r\n type: 'consensus-result',\r\n taskId: payload.taskId,\r\n payload,\r\n timestamp: Date.now(),\r\n });\r\n\r\n return {\r\n success: true,\r\n message: 'Consensus result registered',\r\n data: {\r\n taskId: payload.taskId,\r\n consensusScore: payload.consensusScore,\r\n },\r\n };\r\n }\r\n\r\n /**\r\n * Register PO decision\r\n */\r\n registerPODecision(payload: PODecisionPayload): TaskModeCoordinationResult {\r\n this.eventQueue.enqueue({\r\n type: 'po-decision',\r\n taskId: payload.taskId,\r\n payload,\r\n timestamp: Date.now(),\r\n });\r\n\r\n return {\r\n success: true,\r\n message: 'PO decision registered',\r\n data: { taskId: payload.taskId, decision: payload.decision },\r\n };\r\n }\r\n\r\n /**\r\n * Get event queue (for testing and inspection)\r\n */\r\n getEventQueue(): TaskModeEventQueue {\r\n return this.eventQueue;\r\n }\r\n\r\n /**\r\n * Get all events for task\r\n */\r\n getTaskEvents(taskId: string): TaskModeEvent[] {\r\n return this.eventQueue.getByTaskId(taskId);\r\n }\r\n\r\n /**\r\n * Check if using memory mode\r\n */\r\n isMemoryMode(): boolean {\r\n return this.config.useMemory;\r\n }\r\n\r\n /**\r\n * Internal: Trigger agent run via trigger.dev\r\n *\r\n * @private\r\n */\r\n private async triggerViaTriggerDev(\r\n agentType: AgentType,\r\n taskId: string,\r\n payload: Record<string, unknown>\r\n ): Promise<void> {\r\n if (!this.triggerDevClient) {\r\n return;\r\n }\r\n\r\n try {\r\n // TODO: RUNTIME_TEST: Verify trigger.dev API call succeeds\r\n await this.triggerDevClient.triggerCFNLoop({\r\n taskId,\r\n description: `Task mode agent: ${agentType}`,\r\n mode: 'standard',\r\n successCriteria: {\r\n gate: 'test-pass-rate >= 0.95',\r\n consensusThreshold: 0.9,\r\n testPassRateThreshold: 0.95,\r\n },\r\n context: {\r\n agentType,\r\n payload,\r\n },\r\n });\r\n } catch (error) {\r\n // Fall back to memory mode if trigger.dev fails\r\n console.warn('Trigger.dev trigger failed, continuing in memory mode:', error);\r\n }\r\n }\r\n\r\n /**\r\n * Internal: Wait for agent completion\r\n *\r\n * @private\r\n */\r\n private waitForCompletion(agentId: string, timeoutMs: number): Promise<TaskModeAgentResult> {\r\n return new Promise((resolve, reject) => {\r\n const timeoutHandle = setTimeout(() => {\r\n this.pendingCompletions.delete(agentId);\r\n reject(new Error(`Agent ${agentId} did not complete within ${timeoutMs}ms`));\r\n }, timeoutMs);\r\n\r\n this.pendingCompletions.set(agentId, {\r\n agentId,\r\n resolve,\r\n reject,\r\n timeoutHandle,\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Internal: Generate unique agent ID\r\n *\r\n * @private\r\n */\r\n private generateAgentId(agentType: AgentType): string {\r\n return `${agentType}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\r\n }\r\n}\r\n\r\n/**\r\n * Create task mode coordinator singleton\r\n */\r\nlet coordinatorInstance: TaskModeCoordinator | null = null;\r\n\r\nexport const createTaskModeCoordinator = (options?: {\r\n useMemory?: boolean;\r\n defaultTimeoutMs?: number;\r\n triggerDevConfig?: any;\r\n}): TaskModeCoordinator => {\r\n if (!coordinatorInstance) {\r\n coordinatorInstance = new TaskModeCoordinator(options);\r\n }\r\n return coordinatorInstance;\r\n};\r\n\r\n/**\r\n * Get existing coordinator instance or create new one\r\n */\r\nexport const getTaskModeCoordinator = (): TaskModeCoordinator => {\r\n if (!coordinatorInstance) {\r\n coordinatorInstance = new TaskModeCoordinator();\r\n }\r\n return coordinatorInstance;\r\n};\r\n\r\nexport default TaskModeCoordinator;\r\n"],"names":["EventEmitter","TriggerDevClient","TaskModeEventQueue","queue","eventEmitter","enqueue","event","push","emit","dequeue","shift","getByType","type","filter","e","getByTaskId","taskId","clear","size","length","on","listener","off","TaskModeCoordinator","config","triggerDevClient","eventQueue","pendingCompletions","Map","options","useMemory","undefined","process","env","TASK_MODE_USE_MEMORY","TRIGGER_API_URL","defaultTimeoutMs","useTriggerDev","Boolean","triggerDevConfig","error","console","warn","spawnAgent","agentType","payload","timeoutMs","agentId","generateAgentId","timeout","triggerViaTriggerDev","result","waitForCompletion","Error","String","registerAgentComplete","timestamp","Date","now","pending","get","clearTimeout","timeoutHandle","resolve","success","status","output","confidenceScore","executionTimeMs","delete","message","data","registerGateResult","passed","registerConsensusResult","consensusScore","registerPODecision","decision","getEventQueue","getTaskEvents","isMemoryMode","triggerCFNLoop","description","mode","successCriteria","gate","consensusThreshold","testPassRateThreshold","context","Promise","reject","setTimeout","set","Math","random","toString","substr","coordinatorInstance","createTaskModeCoordinator","getTaskModeCoordinator"],"mappings":"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"}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TriggerDevClient - Type-safe wrapper for trigger.dev SDK
|
|
3
|
+
* Handles CFN Loop orchestration via trigger.dev API
|
|
4
|
+
*
|
|
5
|
+
* Configuration via environment variables:
|
|
6
|
+
* - TRIGGER_API_URL: Base URL for trigger.dev API
|
|
7
|
+
* - TRIGGER_API_KEY: Authentication token
|
|
8
|
+
* - TRIGGER_ENVIRONMENT_ID: Environment ID for deployments
|
|
9
|
+
*/ /**
|
|
10
|
+
* Typed error class for trigger.dev operations
|
|
11
|
+
*/ export class TriggerDevError extends Error {
|
|
12
|
+
code;
|
|
13
|
+
statusCode;
|
|
14
|
+
details;
|
|
15
|
+
constructor(message, code, statusCode, details){
|
|
16
|
+
super(message), this.code = code, this.statusCode = statusCode, this.details = details;
|
|
17
|
+
this.name = 'TriggerDevError';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* TriggerDevClient - Type-safe integration with trigger.dev
|
|
22
|
+
*
|
|
23
|
+
* Provides methods for:
|
|
24
|
+
* - Triggering CFN Loop runs
|
|
25
|
+
* - Monitoring run status
|
|
26
|
+
* - Canceling runs
|
|
27
|
+
* - Querying run history
|
|
28
|
+
*/ export class TriggerDevClient {
|
|
29
|
+
config;
|
|
30
|
+
baseUrl;
|
|
31
|
+
headers;
|
|
32
|
+
constructor(config){
|
|
33
|
+
const apiUrl = config?.apiUrl || process.env.TRIGGER_API_URL;
|
|
34
|
+
const apiKey = config?.apiKey || process.env.TRIGGER_API_KEY;
|
|
35
|
+
const environmentId = config?.environmentId || process.env.TRIGGER_ENVIRONMENT_ID;
|
|
36
|
+
if (!apiUrl || !apiKey || !environmentId) {
|
|
37
|
+
throw new TriggerDevError('Missing trigger.dev configuration', 'CONFIGURATION_ERROR', undefined, {
|
|
38
|
+
apiUrl: Boolean(apiUrl),
|
|
39
|
+
apiKey: Boolean(apiKey),
|
|
40
|
+
environmentId: Boolean(environmentId)
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
this.config = {
|
|
44
|
+
apiUrl,
|
|
45
|
+
apiKey,
|
|
46
|
+
environmentId,
|
|
47
|
+
timeoutMs: config?.timeoutMs || 30000,
|
|
48
|
+
retryAttempts: config?.retryAttempts || 3
|
|
49
|
+
};
|
|
50
|
+
this.baseUrl = `${apiUrl}/v1`;
|
|
51
|
+
this.headers = {
|
|
52
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
53
|
+
'Content-Type': 'application/json',
|
|
54
|
+
'X-Environment-Id': environmentId
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Trigger a CFN Loop run via trigger.dev
|
|
59
|
+
*
|
|
60
|
+
* TODO: RUNTIME_TEST: Verify webhook signature validation in trigger.dev
|
|
61
|
+
* TODO: RUNTIME_TEST: Test retry logic with transient API failures
|
|
62
|
+
*
|
|
63
|
+
* @param payload CFN Loop trigger payload
|
|
64
|
+
* @returns Promise resolving to run ID
|
|
65
|
+
* @throws TriggerDevError on API failure
|
|
66
|
+
*/ async triggerCFNLoop(payload) {
|
|
67
|
+
const endpoint = `${this.baseUrl}/tasks/cfn-loop/runs`;
|
|
68
|
+
try {
|
|
69
|
+
const response = await this.makeRequest('POST', endpoint, {
|
|
70
|
+
payload: {
|
|
71
|
+
taskId: payload.taskId,
|
|
72
|
+
description: payload.description,
|
|
73
|
+
mode: payload.mode,
|
|
74
|
+
successCriteria: payload.successCriteria,
|
|
75
|
+
context: payload.context || {},
|
|
76
|
+
webhookUrl: payload.webhookUrl
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
if (!response.id) {
|
|
80
|
+
throw new TriggerDevError('Invalid response format from trigger.dev', 'INVALID_RESPONSE', undefined, {
|
|
81
|
+
response
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
return response.id;
|
|
85
|
+
} catch (error) {
|
|
86
|
+
if (error instanceof TriggerDevError) {
|
|
87
|
+
throw error;
|
|
88
|
+
}
|
|
89
|
+
throw new TriggerDevError(`Failed to trigger CFN Loop: ${error instanceof Error ? error.message : String(error)}`, 'TRIGGER_FAILED', undefined, {
|
|
90
|
+
originalError: error
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Get run status from trigger.dev
|
|
96
|
+
*
|
|
97
|
+
* TODO: RUNTIME_TEST: Verify polling behavior matches trigger.dev API
|
|
98
|
+
*
|
|
99
|
+
* @param runId Run ID from trigger.dev
|
|
100
|
+
* @returns Promise resolving to run status
|
|
101
|
+
* @throws TriggerDevError if run not found
|
|
102
|
+
*/ async getRunStatus(runId) {
|
|
103
|
+
if (!runId || typeof runId !== 'string') {
|
|
104
|
+
throw new TriggerDevError('Invalid run ID', 'INVALID_RUN_ID', undefined, {
|
|
105
|
+
runId
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
const endpoint = `${this.baseUrl}/runs/${runId}`;
|
|
109
|
+
try {
|
|
110
|
+
const response = await this.makeRequest('GET', endpoint);
|
|
111
|
+
if (!response.status) {
|
|
112
|
+
throw new TriggerDevError('Invalid run response', 'INVALID_RESPONSE', undefined, {
|
|
113
|
+
response
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
return response;
|
|
117
|
+
} catch (error) {
|
|
118
|
+
if (error instanceof TriggerDevError) {
|
|
119
|
+
throw error;
|
|
120
|
+
}
|
|
121
|
+
throw new TriggerDevError(`Failed to get run status: ${error instanceof Error ? error.message : String(error)}`, 'STATUS_FETCH_FAILED', undefined, {
|
|
122
|
+
runId,
|
|
123
|
+
originalError: error
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Cancel a trigger.dev run
|
|
129
|
+
*
|
|
130
|
+
* TODO: RUNTIME_TEST: Verify cancellation propagates to agent processes
|
|
131
|
+
*
|
|
132
|
+
* @param runId Run ID to cancel
|
|
133
|
+
* @throws TriggerDevError on cancellation failure
|
|
134
|
+
*/ async cancelRun(runId) {
|
|
135
|
+
if (!runId || typeof runId !== 'string') {
|
|
136
|
+
throw new TriggerDevError('Invalid run ID', 'INVALID_RUN_ID', undefined, {
|
|
137
|
+
runId
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
const endpoint = `${this.baseUrl}/runs/${runId}/cancel`;
|
|
141
|
+
try {
|
|
142
|
+
await this.makeRequest('POST', endpoint);
|
|
143
|
+
} catch (error) {
|
|
144
|
+
if (error instanceof TriggerDevError) {
|
|
145
|
+
throw error;
|
|
146
|
+
}
|
|
147
|
+
throw new TriggerDevError(`Failed to cancel run: ${error instanceof Error ? error.message : String(error)}`, 'CANCEL_FAILED', undefined, {
|
|
148
|
+
runId,
|
|
149
|
+
originalError: error
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* List runs with optional filtering
|
|
155
|
+
*
|
|
156
|
+
* TODO: RUNTIME_TEST: Test pagination with large result sets
|
|
157
|
+
*
|
|
158
|
+
* @param filters Optional filter criteria
|
|
159
|
+
* @returns Promise resolving to array of runs
|
|
160
|
+
* @throws TriggerDevError on query failure
|
|
161
|
+
*/ async listRuns(filters) {
|
|
162
|
+
const endpoint = `${this.baseUrl}/runs`;
|
|
163
|
+
const params = new URLSearchParams();
|
|
164
|
+
if (filters?.taskId) {
|
|
165
|
+
params.append('taskId', filters.taskId);
|
|
166
|
+
}
|
|
167
|
+
if (filters?.status) {
|
|
168
|
+
params.append('status', filters.status);
|
|
169
|
+
}
|
|
170
|
+
if (filters?.agentType) {
|
|
171
|
+
params.append('agentType', filters.agentType);
|
|
172
|
+
}
|
|
173
|
+
if (filters?.limit) {
|
|
174
|
+
params.append('limit', String(filters.limit));
|
|
175
|
+
}
|
|
176
|
+
if (filters?.offset) {
|
|
177
|
+
params.append('offset', String(filters.offset));
|
|
178
|
+
}
|
|
179
|
+
const queryString = params.toString();
|
|
180
|
+
const url = queryString ? `${endpoint}?${queryString}` : endpoint;
|
|
181
|
+
try {
|
|
182
|
+
const response = await this.makeRequest('GET', url);
|
|
183
|
+
if (!Array.isArray(response)) {
|
|
184
|
+
throw new TriggerDevError('Invalid response format', 'INVALID_RESPONSE', undefined, {
|
|
185
|
+
response
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
return response;
|
|
189
|
+
} catch (error) {
|
|
190
|
+
if (error instanceof TriggerDevError) {
|
|
191
|
+
throw error;
|
|
192
|
+
}
|
|
193
|
+
throw new TriggerDevError(`Failed to list runs: ${error instanceof Error ? error.message : String(error)}`, 'LIST_FAILED', undefined, {
|
|
194
|
+
filters,
|
|
195
|
+
originalError: error
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Internal HTTP request handler with retry logic
|
|
201
|
+
*
|
|
202
|
+
* @private
|
|
203
|
+
* @param method HTTP method
|
|
204
|
+
* @param url Full URL
|
|
205
|
+
* @param body Optional request body
|
|
206
|
+
* @returns Promise resolving to response data
|
|
207
|
+
* @throws TriggerDevError on all retries exhausted
|
|
208
|
+
*/ async makeRequest(method, url, body) {
|
|
209
|
+
let lastError = null;
|
|
210
|
+
for(let attempt = 0; attempt <= this.config.retryAttempts; attempt++){
|
|
211
|
+
try {
|
|
212
|
+
const response = await fetch(url, {
|
|
213
|
+
method,
|
|
214
|
+
headers: this.headers,
|
|
215
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
216
|
+
signal: AbortSignal.timeout(this.config.timeoutMs)
|
|
217
|
+
});
|
|
218
|
+
if (!response.ok) {
|
|
219
|
+
const errorBody = await response.text();
|
|
220
|
+
throw new TriggerDevError(`HTTP ${response.status}: ${response.statusText}`, 'HTTP_ERROR', response.status, {
|
|
221
|
+
url,
|
|
222
|
+
method,
|
|
223
|
+
body: errorBody
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
return await response.json();
|
|
227
|
+
} catch (error) {
|
|
228
|
+
lastError = error instanceof Error ? error : new Error(String(error));
|
|
229
|
+
// Don't retry on validation errors
|
|
230
|
+
if (error instanceof TriggerDevError && error.code === 'INVALID_RUN_ID') {
|
|
231
|
+
throw error;
|
|
232
|
+
}
|
|
233
|
+
// Exponential backoff: 100ms * 2^attempt
|
|
234
|
+
if (attempt < this.config.retryAttempts) {
|
|
235
|
+
const delayMs = 100 * Math.pow(2, attempt);
|
|
236
|
+
await new Promise((resolve)=>setTimeout(resolve, delayMs));
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
throw new TriggerDevError(`Request failed after ${this.config.retryAttempts + 1} attempts`, 'REQUEST_FAILED', undefined, {
|
|
241
|
+
lastError: lastError?.message
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Create and export singleton instance
|
|
247
|
+
* Uses environment variable configuration
|
|
248
|
+
*/ export const createTriggerDevClient = ()=>{
|
|
249
|
+
return new TriggerDevClient();
|
|
250
|
+
};
|
|
251
|
+
export default TriggerDevClient;
|
|
252
|
+
|
|
253
|
+
//# sourceMappingURL=trigger-dev-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/integration/trigger-dev-client.ts"],"sourcesContent":["/**\r\n * TriggerDevClient - Type-safe wrapper for trigger.dev SDK\r\n * Handles CFN Loop orchestration via trigger.dev API\r\n *\r\n * Configuration via environment variables:\r\n * - TRIGGER_API_URL: Base URL for trigger.dev API\r\n * - TRIGGER_API_KEY: Authentication token\r\n * - TRIGGER_ENVIRONMENT_ID: Environment ID for deployments\r\n */\r\n\r\nimport {\r\n CFNLoopPayload,\r\n Run,\r\n RunStatusResponse,\r\n RunStatusType,\r\n AgentType,\r\n} from '../types/trigger-dev-events.d.js';\r\n\r\n/**\r\n * Typed error class for trigger.dev operations\r\n */\r\nexport class TriggerDevError extends Error {\r\n constructor(\r\n message: string,\r\n public readonly code: string,\r\n public readonly statusCode?: number,\r\n public readonly details?: Record<string, unknown>\r\n ) {\r\n super(message);\r\n this.name = 'TriggerDevError';\r\n }\r\n}\r\n\r\n/**\r\n * Run filter options for querying runs\r\n */\r\nexport interface RunFilterOptions {\r\n taskId?: string;\r\n status?: RunStatusType;\r\n limit?: number;\r\n offset?: number;\r\n agentType?: AgentType;\r\n}\r\n\r\n/**\r\n * Configuration for TriggerDevClient\r\n */\r\nexport interface TriggerDevConfig {\r\n apiUrl: string;\r\n apiKey: string;\r\n environmentId: string;\r\n timeoutMs?: number;\r\n retryAttempts?: number;\r\n}\r\n\r\n/**\r\n * TriggerDevClient - Type-safe integration with trigger.dev\r\n *\r\n * Provides methods for:\r\n * - Triggering CFN Loop runs\r\n * - Monitoring run status\r\n * - Canceling runs\r\n * - Querying run history\r\n */\r\nexport class TriggerDevClient {\r\n private readonly config: TriggerDevConfig;\r\n private readonly baseUrl: string;\r\n private readonly headers: Record<string, string>;\r\n\r\n constructor(config?: Partial<TriggerDevConfig>) {\r\n const apiUrl = config?.apiUrl || process.env.TRIGGER_API_URL;\r\n const apiKey = config?.apiKey || process.env.TRIGGER_API_KEY;\r\n const environmentId = config?.environmentId || process.env.TRIGGER_ENVIRONMENT_ID;\r\n\r\n if (!apiUrl || !apiKey || !environmentId) {\r\n throw new TriggerDevError(\r\n 'Missing trigger.dev configuration',\r\n 'CONFIGURATION_ERROR',\r\n undefined,\r\n {\r\n apiUrl: Boolean(apiUrl),\r\n apiKey: Boolean(apiKey),\r\n environmentId: Boolean(environmentId),\r\n }\r\n );\r\n }\r\n\r\n this.config = {\r\n apiUrl,\r\n apiKey,\r\n environmentId,\r\n timeoutMs: config?.timeoutMs || 30000,\r\n retryAttempts: config?.retryAttempts || 3,\r\n };\r\n\r\n this.baseUrl = `${apiUrl}/v1`;\r\n this.headers = {\r\n 'Authorization': `Bearer ${apiKey}`,\r\n 'Content-Type': 'application/json',\r\n 'X-Environment-Id': environmentId,\r\n };\r\n }\r\n\r\n /**\r\n * Trigger a CFN Loop run via trigger.dev\r\n *\r\n * TODO: RUNTIME_TEST: Verify webhook signature validation in trigger.dev\r\n * TODO: RUNTIME_TEST: Test retry logic with transient API failures\r\n *\r\n * @param payload CFN Loop trigger payload\r\n * @returns Promise resolving to run ID\r\n * @throws TriggerDevError on API failure\r\n */\r\n async triggerCFNLoop(payload: CFNLoopPayload): Promise<string> {\r\n const endpoint = `${this.baseUrl}/tasks/cfn-loop/runs`;\r\n\r\n try {\r\n const response = await this.makeRequest('POST', endpoint, {\r\n payload: {\r\n taskId: payload.taskId,\r\n description: payload.description,\r\n mode: payload.mode,\r\n successCriteria: payload.successCriteria,\r\n context: payload.context || {},\r\n webhookUrl: payload.webhookUrl,\r\n },\r\n });\r\n\r\n if (!response.id) {\r\n throw new TriggerDevError(\r\n 'Invalid response format from trigger.dev',\r\n 'INVALID_RESPONSE',\r\n undefined,\r\n { response }\r\n );\r\n }\r\n\r\n return response.id;\r\n } catch (error) {\r\n if (error instanceof TriggerDevError) {\r\n throw error;\r\n }\r\n\r\n throw new TriggerDevError(\r\n `Failed to trigger CFN Loop: ${error instanceof Error ? error.message : String(error)}`,\r\n 'TRIGGER_FAILED',\r\n undefined,\r\n { originalError: error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Get run status from trigger.dev\r\n *\r\n * TODO: RUNTIME_TEST: Verify polling behavior matches trigger.dev API\r\n *\r\n * @param runId Run ID from trigger.dev\r\n * @returns Promise resolving to run status\r\n * @throws TriggerDevError if run not found\r\n */\r\n async getRunStatus(runId: string): Promise<RunStatusResponse> {\r\n if (!runId || typeof runId !== 'string') {\r\n throw new TriggerDevError(\r\n 'Invalid run ID',\r\n 'INVALID_RUN_ID',\r\n undefined,\r\n { runId }\r\n );\r\n }\r\n\r\n const endpoint = `${this.baseUrl}/runs/${runId}`;\r\n\r\n try {\r\n const response = await this.makeRequest('GET', endpoint);\r\n\r\n if (!response.status) {\r\n throw new TriggerDevError(\r\n 'Invalid run response',\r\n 'INVALID_RESPONSE',\r\n undefined,\r\n { response }\r\n );\r\n }\r\n\r\n return response;\r\n } catch (error) {\r\n if (error instanceof TriggerDevError) {\r\n throw error;\r\n }\r\n\r\n throw new TriggerDevError(\r\n `Failed to get run status: ${error instanceof Error ? error.message : String(error)}`,\r\n 'STATUS_FETCH_FAILED',\r\n undefined,\r\n { runId, originalError: error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Cancel a trigger.dev run\r\n *\r\n * TODO: RUNTIME_TEST: Verify cancellation propagates to agent processes\r\n *\r\n * @param runId Run ID to cancel\r\n * @throws TriggerDevError on cancellation failure\r\n */\r\n async cancelRun(runId: string): Promise<void> {\r\n if (!runId || typeof runId !== 'string') {\r\n throw new TriggerDevError(\r\n 'Invalid run ID',\r\n 'INVALID_RUN_ID',\r\n undefined,\r\n { runId }\r\n );\r\n }\r\n\r\n const endpoint = `${this.baseUrl}/runs/${runId}/cancel`;\r\n\r\n try {\r\n await this.makeRequest('POST', endpoint);\r\n } catch (error) {\r\n if (error instanceof TriggerDevError) {\r\n throw error;\r\n }\r\n\r\n throw new TriggerDevError(\r\n `Failed to cancel run: ${error instanceof Error ? error.message : String(error)}`,\r\n 'CANCEL_FAILED',\r\n undefined,\r\n { runId, originalError: error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * List runs with optional filtering\r\n *\r\n * TODO: RUNTIME_TEST: Test pagination with large result sets\r\n *\r\n * @param filters Optional filter criteria\r\n * @returns Promise resolving to array of runs\r\n * @throws TriggerDevError on query failure\r\n */\r\n async listRuns(filters?: RunFilterOptions): Promise<Run[]> {\r\n const endpoint = `${this.baseUrl}/runs`;\r\n const params = new URLSearchParams();\r\n\r\n if (filters?.taskId) {\r\n params.append('taskId', filters.taskId);\r\n }\r\n if (filters?.status) {\r\n params.append('status', filters.status);\r\n }\r\n if (filters?.agentType) {\r\n params.append('agentType', filters.agentType);\r\n }\r\n if (filters?.limit) {\r\n params.append('limit', String(filters.limit));\r\n }\r\n if (filters?.offset) {\r\n params.append('offset', String(filters.offset));\r\n }\r\n\r\n const queryString = params.toString();\r\n const url = queryString ? `${endpoint}?${queryString}` : endpoint;\r\n\r\n try {\r\n const response = await this.makeRequest('GET', url);\r\n\r\n if (!Array.isArray(response)) {\r\n throw new TriggerDevError(\r\n 'Invalid response format',\r\n 'INVALID_RESPONSE',\r\n undefined,\r\n { response }\r\n );\r\n }\r\n\r\n return response;\r\n } catch (error) {\r\n if (error instanceof TriggerDevError) {\r\n throw error;\r\n }\r\n\r\n throw new TriggerDevError(\r\n `Failed to list runs: ${error instanceof Error ? error.message : String(error)}`,\r\n 'LIST_FAILED',\r\n undefined,\r\n { filters, originalError: error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Internal HTTP request handler with retry logic\r\n *\r\n * @private\r\n * @param method HTTP method\r\n * @param url Full URL\r\n * @param body Optional request body\r\n * @returns Promise resolving to response data\r\n * @throws TriggerDevError on all retries exhausted\r\n */\r\n private async makeRequest(\r\n method: string,\r\n url: string,\r\n body?: Record<string, unknown>\r\n ): Promise<any> {\r\n let lastError: Error | null = null;\r\n\r\n for (let attempt = 0; attempt <= this.config.retryAttempts!; attempt++) {\r\n try {\r\n const response = await fetch(url, {\r\n method,\r\n headers: this.headers,\r\n body: body ? JSON.stringify(body) : undefined,\r\n signal: AbortSignal.timeout(this.config.timeoutMs!),\r\n });\r\n\r\n if (!response.ok) {\r\n const errorBody = await response.text();\r\n throw new TriggerDevError(\r\n `HTTP ${response.status}: ${response.statusText}`,\r\n 'HTTP_ERROR',\r\n response.status,\r\n {\r\n url,\r\n method,\r\n body: errorBody,\r\n }\r\n );\r\n }\r\n\r\n return await response.json();\r\n } catch (error) {\r\n lastError = error instanceof Error ? error : new Error(String(error));\r\n\r\n // Don't retry on validation errors\r\n if (error instanceof TriggerDevError && error.code === 'INVALID_RUN_ID') {\r\n throw error;\r\n }\r\n\r\n // Exponential backoff: 100ms * 2^attempt\r\n if (attempt < this.config.retryAttempts!) {\r\n const delayMs = 100 * Math.pow(2, attempt);\r\n await new Promise(resolve => setTimeout(resolve, delayMs));\r\n }\r\n }\r\n }\r\n\r\n throw new TriggerDevError(\r\n `Request failed after ${this.config.retryAttempts! + 1} attempts`,\r\n 'REQUEST_FAILED',\r\n undefined,\r\n { lastError: lastError?.message }\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Create and export singleton instance\r\n * Uses environment variable configuration\r\n */\r\nexport const createTriggerDevClient = (): TriggerDevClient => {\r\n return new TriggerDevClient();\r\n};\r\n\r\nexport default TriggerDevClient;\r\n"],"names":["TriggerDevError","Error","message","code","statusCode","details","name","TriggerDevClient","config","baseUrl","headers","apiUrl","process","env","TRIGGER_API_URL","apiKey","TRIGGER_API_KEY","environmentId","TRIGGER_ENVIRONMENT_ID","undefined","Boolean","timeoutMs","retryAttempts","triggerCFNLoop","payload","endpoint","response","makeRequest","taskId","description","mode","successCriteria","context","webhookUrl","id","error","String","originalError","getRunStatus","runId","status","cancelRun","listRuns","filters","params","URLSearchParams","append","agentType","limit","offset","queryString","toString","url","Array","isArray","method","body","lastError","attempt","fetch","JSON","stringify","signal","AbortSignal","timeout","ok","errorBody","text","statusText","json","delayMs","Math","pow","Promise","resolve","setTimeout","createTriggerDevClient"],"mappings":"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"}
|