edsger 0.50.0 → 0.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +23 -3
- package/.env.local +12 -0
- package/README.md +25 -25
- package/dist/api/chat.d.ts +7 -7
- package/dist/api/chat.js +13 -13
- package/dist/api/cross-product.d.ts +10 -10
- package/dist/api/cross-product.js +30 -30
- package/dist/api/github.d.ts +5 -5
- package/dist/api/github.js +10 -10
- package/dist/api/intelligence.d.ts +3 -3
- package/dist/api/issues/approval-checker.d.ts +20 -0
- package/dist/api/{features → issues}/approval-checker.js +16 -16
- package/dist/api/issues/get-issue.d.ts +5 -0
- package/dist/api/issues/get-issue.js +21 -0
- package/dist/api/issues/index.d.ts +8 -0
- package/dist/api/issues/index.js +10 -0
- package/dist/api/issues/issue-utils.d.ts +23 -0
- package/dist/api/issues/issue-utils.js +80 -0
- package/dist/api/issues/status-updater.d.ts +41 -0
- package/dist/api/{features → issues}/status-updater.js +23 -23
- package/dist/api/{features → issues}/test-cases.d.ts +7 -7
- package/dist/api/{features → issues}/test-cases.js +12 -12
- package/dist/api/issues/update-issue.d.ts +20 -0
- package/dist/api/{features/update-feature.js → issues/update-issue.js} +22 -22
- package/dist/api/{features → issues}/user-stories.d.ts +5 -5
- package/dist/api/{features → issues}/user-stories.js +8 -8
- package/dist/api/products.d.ts +1 -1
- package/dist/api/tasks.d.ts +1 -1
- package/dist/api/test-reports.d.ts +2 -2
- package/dist/api/test-reports.js +4 -4
- package/dist/auth/login.js +1 -1
- package/dist/commands/agent-workflow/chat-worker.d.ts +7 -7
- package/dist/commands/agent-workflow/chat-worker.js +50 -50
- package/dist/commands/agent-workflow/index.d.ts +2 -2
- package/dist/commands/agent-workflow/index.js +3 -3
- package/dist/commands/agent-workflow/{feature-worker.d.ts → issue-worker.d.ts} +4 -4
- package/dist/commands/agent-workflow/{feature-worker.js → issue-worker.js} +12 -12
- package/dist/commands/agent-workflow/processor.d.ts +9 -9
- package/dist/commands/agent-workflow/processor.js +90 -90
- package/dist/commands/build/index.js +2 -2
- package/dist/commands/find-bugs/index.d.ts +11 -0
- package/dist/commands/find-bugs/index.js +39 -0
- package/dist/commands/find-features/index.d.ts +14 -0
- package/dist/commands/find-features/index.js +42 -0
- package/dist/commands/find-smells/index.d.ts +21 -0
- package/dist/commands/find-smells/index.js +65 -0
- package/dist/commands/init/prompts.js +1 -1
- package/dist/commands/init/templates.d.ts +1 -1
- package/dist/commands/init/templates.js +4 -4
- package/dist/commands/workflow/config/phase-configs.js +17 -17
- package/dist/commands/workflow/core/index.d.ts +1 -1
- package/dist/commands/workflow/core/index.js +2 -2
- package/dist/commands/workflow/core/issue-filter.d.ts +16 -0
- package/dist/commands/workflow/core/issue-filter.js +47 -0
- package/dist/commands/workflow/core/state-manager.d.ts +10 -10
- package/dist/commands/workflow/core/state-manager.js +10 -10
- package/dist/commands/workflow/core/workflow-logger.d.ts +9 -9
- package/dist/commands/workflow/core/workflow-logger.js +21 -21
- package/dist/commands/workflow/executors/phase-executor.d.ts +2 -2
- package/dist/commands/workflow/executors/phase-executor.js +32 -32
- package/dist/commands/workflow/issue-coordinator.d.ts +18 -0
- package/dist/commands/workflow/{feature-coordinator.js → issue-coordinator.js} +29 -29
- package/dist/commands/workflow/phase-orchestrator.d.ts +2 -2
- package/dist/commands/workflow/phase-orchestrator.js +82 -82
- package/dist/commands/workflow/processor.d.ts +7 -7
- package/dist/commands/workflow/processor.js +44 -44
- package/dist/config/{feature-status.d.ts → issue-status.d.ts} +14 -14
- package/dist/config/{feature-status.js → issue-status.js} +14 -14
- package/dist/errors/index.d.ts +6 -6
- package/dist/errors/index.js +11 -11
- package/dist/index.js +90 -1
- package/dist/phases/app-store-generation/context.js +6 -6
- package/dist/phases/app-store-generation/index.js +2 -2
- package/dist/phases/app-store-generation/prompts.js +2 -2
- package/dist/phases/autonomous/index.d.ts +3 -3
- package/dist/phases/autonomous/index.js +37 -37
- package/dist/phases/autonomous/prompts.d.ts +2 -2
- package/dist/phases/autonomous/prompts.js +4 -4
- package/dist/phases/branch-planning/context.d.ts +3 -3
- package/dist/phases/branch-planning/context.js +12 -12
- package/dist/phases/branch-planning/index.d.ts +3 -3
- package/dist/phases/branch-planning/index.js +32 -32
- package/dist/phases/branch-planning/outcome.d.ts +5 -5
- package/dist/phases/branch-planning/outcome.js +12 -12
- package/dist/phases/branch-planning/prompts.d.ts +3 -3
- package/dist/phases/branch-planning/prompts.js +13 -13
- package/dist/phases/bug-fixing/analyzer.d.ts +2 -2
- package/dist/phases/bug-fixing/analyzer.js +13 -13
- package/dist/phases/bug-fixing/context-fetcher.d.ts +3 -3
- package/dist/phases/bug-fixing/context-fetcher.js +18 -18
- package/dist/phases/bug-fixing/mcp-server.js +17 -18
- package/dist/phases/chat-processor/context.d.ts +5 -5
- package/dist/phases/chat-processor/context.js +17 -17
- package/dist/phases/chat-processor/index.d.ts +4 -4
- package/dist/phases/chat-processor/index.js +17 -17
- package/dist/phases/chat-processor/product-context.d.ts +3 -3
- package/dist/phases/chat-processor/product-context.js +16 -16
- package/dist/phases/chat-processor/product-prompts.d.ts +1 -1
- package/dist/phases/chat-processor/product-prompts.js +10 -10
- package/dist/phases/chat-processor/product-tools.d.ts +2 -2
- package/dist/phases/chat-processor/product-tools.js +33 -33
- package/dist/phases/chat-processor/prompts.d.ts +3 -3
- package/dist/phases/chat-processor/prompts.js +22 -22
- package/dist/phases/chat-processor/tools.js +46 -46
- package/dist/phases/code-implementation/branch-pr-creator.d.ts +3 -3
- package/dist/phases/code-implementation/branch-pr-creator.js +5 -5
- package/dist/phases/code-implementation/context.d.ts +3 -3
- package/dist/phases/code-implementation/context.js +18 -18
- package/dist/phases/code-implementation/index.d.ts +4 -4
- package/dist/phases/code-implementation/index.js +88 -88
- package/dist/phases/code-implementation/outcome.d.ts +3 -3
- package/dist/phases/code-implementation/outcome.js +6 -6
- package/dist/phases/code-implementation/prompts.d.ts +1 -1
- package/dist/phases/code-implementation/prompts.js +6 -6
- package/dist/phases/code-implementation-verification/agent.d.ts +3 -3
- package/dist/phases/code-implementation-verification/agent.js +5 -5
- package/dist/phases/code-implementation-verification/index.d.ts +3 -3
- package/dist/phases/code-implementation-verification/index.js +11 -11
- package/dist/phases/code-implementation-verification/prompts.d.ts +3 -3
- package/dist/phases/code-implementation-verification/prompts.js +7 -7
- package/dist/phases/code-refine/context.d.ts +8 -8
- package/dist/phases/code-refine/context.js +29 -29
- package/dist/phases/code-refine/index.d.ts +2 -2
- package/dist/phases/code-refine/index.js +20 -20
- package/dist/phases/code-refine/prompts.d.ts +1 -1
- package/dist/phases/code-refine/prompts.js +3 -3
- package/dist/phases/code-refine/refine-iteration.d.ts +1 -1
- package/dist/phases/code-refine/refine-iteration.js +4 -4
- package/dist/phases/code-refine/retry-handler.js +2 -2
- package/dist/phases/code-refine-verification/index.js +10 -10
- package/dist/phases/code-refine-verification/types.d.ts +2 -2
- package/dist/phases/code-review/context.d.ts +8 -8
- package/dist/phases/code-review/context.js +25 -25
- package/dist/phases/code-review/diff-utils.d.ts +1 -1
- package/dist/phases/code-review/diff-utils.js +1 -1
- package/dist/phases/code-review/index.d.ts +2 -2
- package/dist/phases/code-review/index.js +26 -26
- package/dist/phases/code-testing/analyzer.d.ts +2 -2
- package/dist/phases/code-testing/analyzer.js +18 -18
- package/dist/phases/code-testing/context-fetcher.d.ts +3 -3
- package/dist/phases/code-testing/context-fetcher.js +16 -16
- package/dist/phases/code-testing/prompts.d.ts +1 -1
- package/dist/phases/code-testing/prompts.js +5 -5
- package/dist/phases/find-bugs/index.d.ts +30 -0
- package/dist/phases/find-bugs/index.js +216 -0
- package/dist/phases/find-bugs/prompts.d.ts +22 -0
- package/dist/phases/find-bugs/prompts.js +101 -0
- package/dist/phases/find-bugs/state.d.ts +19 -0
- package/dist/phases/find-bugs/state.js +13 -0
- package/dist/phases/find-bugs/types.d.ts +21 -0
- package/dist/phases/find-bugs/types.js +16 -0
- package/dist/phases/find-features/index.d.ts +40 -0
- package/dist/phases/find-features/index.js +279 -0
- package/dist/phases/find-features/prompts.d.ts +43 -0
- package/dist/phases/find-features/prompts.js +138 -0
- package/dist/phases/find-features/state.d.ts +25 -0
- package/dist/phases/find-features/state.js +22 -0
- package/dist/phases/find-features/types.d.ts +27 -0
- package/dist/phases/find-features/types.js +16 -0
- package/dist/phases/find-shared/git.d.ts +24 -0
- package/dist/phases/find-shared/git.js +60 -0
- package/dist/phases/find-shared/mcp.d.ts +33 -0
- package/dist/phases/find-shared/mcp.js +69 -0
- package/dist/phases/find-shared/scan-state.d.ts +33 -0
- package/dist/phases/find-shared/scan-state.js +112 -0
- package/dist/phases/find-smells/index.d.ts +47 -0
- package/dist/phases/find-smells/index.js +278 -0
- package/dist/phases/find-smells/prompts.d.ts +30 -0
- package/dist/phases/find-smells/prompts.js +129 -0
- package/dist/phases/find-smells/state.d.ts +21 -0
- package/dist/phases/find-smells/state.js +17 -0
- package/dist/phases/find-smells/types.d.ts +51 -0
- package/dist/phases/find-smells/types.js +64 -0
- package/dist/phases/functional-testing/analyzer.d.ts +2 -2
- package/dist/phases/functional-testing/analyzer.js +40 -40
- package/dist/phases/functional-testing/context-fetcher.d.ts +3 -3
- package/dist/phases/functional-testing/context-fetcher.js +16 -16
- package/dist/phases/functional-testing/http-fallback.d.ts +2 -2
- package/dist/phases/functional-testing/http-fallback.js +9 -9
- package/dist/phases/functional-testing/mcp-server.js +23 -24
- package/dist/phases/functional-testing/prompts.d.ts +1 -1
- package/dist/phases/functional-testing/prompts.js +4 -4
- package/dist/phases/functional-testing/test-report-creator.d.ts +2 -2
- package/dist/phases/functional-testing/test-report-creator.js +10 -10
- package/dist/phases/functional-testing/test-retry-handler.js +3 -3
- package/dist/phases/growth-analysis/context.js +6 -6
- package/dist/phases/growth-analysis/index.js +2 -2
- package/dist/phases/growth-analysis/prompts.js +2 -2
- package/dist/phases/intelligence-analysis/context.js +7 -7
- package/dist/phases/intelligence-analysis/index.js +3 -3
- package/dist/phases/{feature-analysis → issue-analysis}/agent.js +1 -1
- package/dist/phases/issue-analysis/context.d.ts +24 -0
- package/dist/phases/{feature-analysis → issue-analysis}/context.js +30 -30
- package/dist/phases/issue-analysis/index.d.ts +8 -0
- package/dist/phases/{feature-analysis → issue-analysis}/index.js +29 -29
- package/dist/phases/issue-analysis/outcome.d.ts +40 -0
- package/dist/phases/{feature-analysis → issue-analysis}/outcome.js +17 -17
- package/dist/phases/{feature-analysis → issue-analysis}/prompts.d.ts +3 -3
- package/dist/phases/{feature-analysis → issue-analysis}/prompts.js +12 -12
- package/dist/phases/{feature-analysis-verification → issue-analysis-verification}/agent.d.ts +2 -2
- package/dist/phases/{feature-analysis-verification → issue-analysis-verification}/agent.js +1 -1
- package/dist/phases/{feature-analysis-verification → issue-analysis-verification}/index.d.ts +5 -5
- package/dist/phases/{feature-analysis-verification → issue-analysis-verification}/index.js +9 -9
- package/dist/phases/{feature-analysis-verification → issue-analysis-verification}/prompts.d.ts +2 -2
- package/dist/phases/{feature-analysis-verification → issue-analysis-verification}/prompts.js +7 -7
- package/dist/phases/output-contracts.js +37 -37
- package/dist/phases/pr-execution/context.d.ts +3 -3
- package/dist/phases/pr-execution/context.js +14 -14
- package/dist/phases/pr-execution/index.d.ts +2 -2
- package/dist/phases/pr-execution/index.js +22 -22
- package/dist/phases/pr-execution/outcome.d.ts +4 -4
- package/dist/phases/pr-execution/outcome.js +6 -6
- package/dist/phases/pr-execution/prompts.d.ts +4 -4
- package/dist/phases/pr-execution/prompts.js +6 -6
- package/dist/phases/pr-resolve/checklist-learner.js +2 -2
- package/dist/phases/pr-review/index.d.ts +1 -1
- package/dist/phases/pr-review/index.js +1 -1
- package/dist/phases/pr-review/prompts.d.ts +1 -1
- package/dist/phases/pr-review/prompts.js +1 -1
- package/dist/phases/pr-shared/context.d.ts +3 -3
- package/dist/phases/pr-shared/context.js +3 -3
- package/dist/phases/pr-splitting/context.d.ts +3 -3
- package/dist/phases/pr-splitting/context.js +16 -16
- package/dist/phases/pr-splitting/index.d.ts +4 -4
- package/dist/phases/pr-splitting/index.js +29 -29
- package/dist/phases/pr-splitting/outcome.d.ts +3 -3
- package/dist/phases/pr-splitting/outcome.js +7 -7
- package/dist/phases/pr-splitting/prompts.d.ts +3 -3
- package/dist/phases/pr-splitting/prompts.js +11 -11
- package/dist/phases/pull-request/creator.d.ts +4 -4
- package/dist/phases/pull-request/creator.js +25 -25
- package/dist/phases/pull-request/handler.d.ts +3 -3
- package/dist/phases/pull-request/handler.js +16 -16
- package/dist/phases/release-sync/index.js +2 -2
- package/dist/phases/run-sheet/agent.js +1 -2
- package/dist/phases/run-sheet/index.js +3 -3
- package/dist/phases/smoke-test/index.js +2 -2
- package/dist/phases/technical-design/context.d.ts +3 -3
- package/dist/phases/technical-design/context.js +11 -11
- package/dist/phases/technical-design/index.d.ts +2 -2
- package/dist/phases/technical-design/index.js +27 -27
- package/dist/phases/technical-design/outcome.d.ts +4 -4
- package/dist/phases/technical-design/outcome.js +6 -6
- package/dist/phases/technical-design/prompts.d.ts +2 -2
- package/dist/phases/technical-design/prompts.js +10 -10
- package/dist/phases/technical-design-verification/agent.d.ts +3 -3
- package/dist/phases/technical-design-verification/agent.js +4 -4
- package/dist/phases/technical-design-verification/index.d.ts +4 -4
- package/dist/phases/technical-design-verification/index.js +12 -12
- package/dist/phases/technical-design-verification/prompts.d.ts +3 -3
- package/dist/phases/technical-design-verification/prompts.js +6 -6
- package/dist/phases/test-cases-analysis/context.d.ts +5 -5
- package/dist/phases/test-cases-analysis/context.js +18 -18
- package/dist/phases/test-cases-analysis/formatters.js +7 -7
- package/dist/phases/test-cases-analysis/index.d.ts +1 -1
- package/dist/phases/test-cases-analysis/index.js +21 -21
- package/dist/phases/test-cases-analysis/outcome.d.ts +7 -7
- package/dist/phases/test-cases-analysis/outcome.js +13 -13
- package/dist/phases/test-cases-analysis/prompts.d.ts +3 -3
- package/dist/phases/test-cases-analysis/prompts.js +6 -6
- package/dist/phases/user-stories-analysis/context.d.ts +5 -5
- package/dist/phases/user-stories-analysis/context.js +18 -18
- package/dist/phases/user-stories-analysis/formatters.js +7 -7
- package/dist/phases/user-stories-analysis/index.d.ts +1 -1
- package/dist/phases/user-stories-analysis/index.js +21 -21
- package/dist/phases/user-stories-analysis/outcome.d.ts +7 -7
- package/dist/phases/user-stories-analysis/outcome.js +13 -13
- package/dist/phases/user-stories-analysis/prompts.d.ts +3 -3
- package/dist/phases/user-stories-analysis/prompts.js +10 -10
- package/dist/services/audit-logs.d.ts +10 -10
- package/dist/services/audit-logs.js +12 -12
- package/dist/services/branches.d.ts +6 -6
- package/dist/services/branches.js +16 -16
- package/dist/services/checklist.d.ts +3 -3
- package/dist/services/checklist.js +11 -11
- package/dist/services/coaching/coaching-agent.js +2 -2
- package/dist/services/coaching/coaching-loop.d.ts +1 -1
- package/dist/services/coaching/coaching-loop.js +2 -2
- package/dist/services/coaching/phase-coaching.d.ts +2 -2
- package/dist/services/coaching/phase-coaching.js +3 -3
- package/dist/services/coaching/self-rating.js +1 -1
- package/dist/services/feedbacks.d.ts +4 -4
- package/dist/services/feedbacks.js +8 -8
- package/dist/services/phase-hooks/bindings-fetcher.d.ts +4 -4
- package/dist/services/phase-hooks/bindings-fetcher.js +8 -8
- package/dist/services/phase-hooks/hook-executor.js +1 -1
- package/dist/services/phase-hooks/hook-logging.d.ts +2 -2
- package/dist/services/phase-hooks/hook-logging.js +4 -4
- package/dist/services/phase-hooks/hook-runner.d.ts +1 -1
- package/dist/services/phase-hooks/hook-runner.js +4 -4
- package/dist/services/phase-hooks/types.d.ts +3 -3
- package/dist/services/phase-ratings.d.ts +7 -7
- package/dist/services/phase-ratings.js +8 -8
- package/dist/services/pull-requests.d.ts +4 -4
- package/dist/services/pull-requests.js +11 -11
- package/dist/services/skill-resolver.d.ts +1 -1
- package/dist/services/skill-resolver.js +1 -1
- package/dist/skills/phase/app-store-generation/SKILL.md +9 -9
- package/dist/skills/phase/autonomous/SKILL.md +2 -2
- package/dist/skills/phase/branch-planning/SKILL.md +12 -12
- package/dist/skills/phase/bug-fixing/SKILL.md +1 -1
- package/dist/skills/phase/code-implementation/SKILL.md +6 -6
- package/dist/skills/phase/code-implementation-verification/SKILL.md +3 -3
- package/dist/skills/phase/code-testing/SKILL.md +5 -5
- package/dist/skills/phase/functional-testing/SKILL.md +3 -3
- package/dist/skills/phase/growth-analysis/SKILL.md +8 -8
- package/dist/skills/phase/incremental-sync/SKILL.md +6 -6
- package/dist/skills/phase/intelligence-analysis/SKILL.md +7 -7
- package/dist/skills/phase/{feature-analysis → issue-analysis}/SKILL.md +8 -8
- package/dist/skills/phase/pr-execution/SKILL.md +7 -7
- package/dist/skills/phase/pr-splitting/SKILL.md +14 -14
- package/dist/skills/phase/smoke-test/SKILL.md +1 -1
- package/dist/skills/phase/technical-design/SKILL.md +5 -5
- package/dist/skills/phase/test-cases-analysis/SKILL.md +4 -4
- package/dist/skills/phase/user-stories-analysis/SKILL.md +13 -13
- package/dist/system/session-manager.d.ts +3 -3
- package/dist/system/session-manager.js +3 -3
- package/dist/system/sleep-notification.js +2 -2
- package/dist/system/sleep-prevention.js +1 -1
- package/dist/types/index.d.ts +21 -21
- package/dist/types/{features.d.ts → issues.d.ts} +3 -3
- package/dist/types/pipeline.d.ts +4 -4
- package/dist/updater/auto-updater.d.ts +2 -2
- package/dist/updater/auto-updater.js +3 -3
- package/dist/utils/conflict-resolver.d.ts +1 -1
- package/dist/utils/conflict-resolver.js +5 -5
- package/dist/utils/formatters.d.ts +4 -4
- package/dist/utils/formatters.js +29 -29
- package/dist/utils/git-branch-manager-async.d.ts +6 -6
- package/dist/utils/git-branch-manager-async.js +41 -41
- package/dist/utils/git-branch-manager.d.ts +11 -11
- package/dist/utils/git-branch-manager.js +42 -42
- package/dist/utils/image-downloader.d.ts +4 -4
- package/dist/utils/image-downloader.js +17 -17
- package/dist/utils/pipeline-logger.d.ts +1 -1
- package/dist/utils/pipeline-logger.js +5 -5
- package/dist/workspace/workspace-manager.d.ts +17 -17
- package/dist/workspace/workspace-manager.js +21 -21
- package/package.json +1 -1
- package/vitest.config.ts +4 -0
- package/dist/api/__tests__/app-store.test.d.ts +0 -7
- package/dist/api/__tests__/app-store.test.js +0 -60
- package/dist/api/__tests__/intelligence.test.d.ts +0 -11
- package/dist/api/__tests__/intelligence.test.js +0 -315
- package/dist/api/features/__tests__/feature-utils.test.d.ts +0 -4
- package/dist/api/features/__tests__/feature-utils.test.js +0 -370
- package/dist/api/features/__tests__/status-updater.test.d.ts +0 -4
- package/dist/api/features/__tests__/status-updater.test.js +0 -88
- package/dist/api/features/approval-checker.d.ts +0 -20
- package/dist/api/features/feature-utils.d.ts +0 -23
- package/dist/api/features/feature-utils.js +0 -80
- package/dist/api/features/get-feature.d.ts +0 -5
- package/dist/api/features/get-feature.js +0 -21
- package/dist/api/features/index.d.ts +0 -8
- package/dist/api/features/index.js +0 -10
- package/dist/api/features/status-updater.d.ts +0 -41
- package/dist/api/features/update-feature.d.ts +0 -20
- package/dist/commands/build/__tests__/build.test.d.ts +0 -5
- package/dist/commands/build/__tests__/build.test.js +0 -206
- package/dist/commands/build/__tests__/detect-project.test.d.ts +0 -6
- package/dist/commands/build/__tests__/detect-project.test.js +0 -160
- package/dist/commands/build/__tests__/run-build.test.d.ts +0 -6
- package/dist/commands/build/__tests__/run-build.test.js +0 -433
- package/dist/commands/intelligence/__tests__/command.test.d.ts +0 -4
- package/dist/commands/intelligence/__tests__/command.test.js +0 -48
- package/dist/commands/workflow/core/__tests__/feature-filter.test.d.ts +0 -5
- package/dist/commands/workflow/core/__tests__/feature-filter.test.js +0 -316
- package/dist/commands/workflow/core/__tests__/pipeline-evaluator.test.d.ts +0 -4
- package/dist/commands/workflow/core/__tests__/pipeline-evaluator.test.js +0 -397
- package/dist/commands/workflow/core/__tests__/state-manager.test.d.ts +0 -4
- package/dist/commands/workflow/core/__tests__/state-manager.test.js +0 -384
- package/dist/commands/workflow/core/feature-filter.d.ts +0 -16
- package/dist/commands/workflow/core/feature-filter.js +0 -47
- package/dist/commands/workflow/feature-coordinator.d.ts +0 -18
- package/dist/config/__tests__/config.test.d.ts +0 -4
- package/dist/config/__tests__/config.test.js +0 -286
- package/dist/config/__tests__/feature-status.test.d.ts +0 -4
- package/dist/config/__tests__/feature-status.test.js +0 -111
- package/dist/errors/__tests__/index.test.d.ts +0 -4
- package/dist/errors/__tests__/index.test.js +0 -349
- package/dist/phases/app-store-generation/__tests__/agent.test.d.ts +0 -5
- package/dist/phases/app-store-generation/__tests__/agent.test.js +0 -142
- package/dist/phases/app-store-generation/__tests__/context.test.d.ts +0 -4
- package/dist/phases/app-store-generation/__tests__/context.test.js +0 -284
- package/dist/phases/app-store-generation/__tests__/prompts.test.d.ts +0 -4
- package/dist/phases/app-store-generation/__tests__/prompts.test.js +0 -122
- package/dist/phases/app-store-generation/__tests__/screenshot-composer.test.d.ts +0 -5
- package/dist/phases/app-store-generation/__tests__/screenshot-composer.test.js +0 -826
- package/dist/phases/code-review/__tests__/diff-utils.test.js +0 -101
- package/dist/phases/feature-analysis/context.d.ts +0 -24
- package/dist/phases/feature-analysis/index.d.ts +0 -8
- package/dist/phases/feature-analysis/outcome.d.ts +0 -40
- package/dist/phases/intelligence-analysis/__tests__/context.test.d.ts +0 -4
- package/dist/phases/intelligence-analysis/__tests__/context.test.js +0 -192
- package/dist/phases/intelligence-analysis/__tests__/matching.test.d.ts +0 -13
- package/dist/phases/intelligence-analysis/__tests__/matching.test.js +0 -154
- package/dist/phases/intelligence-analysis/__tests__/orchestration.test.d.ts +0 -5
- package/dist/phases/intelligence-analysis/__tests__/orchestration.test.js +0 -378
- package/dist/phases/intelligence-analysis/__tests__/prompts.test.d.ts +0 -4
- package/dist/phases/intelligence-analysis/__tests__/prompts.test.js +0 -33
- package/dist/phases/pr-execution/__tests__/file-assigner.test.d.ts +0 -1
- package/dist/phases/pr-execution/__tests__/file-assigner.test.js +0 -303
- package/dist/phases/pr-resolve/__tests__/checklist-learner.test.d.ts +0 -1
- package/dist/phases/pr-resolve/__tests__/checklist-learner.test.js +0 -157
- package/dist/phases/pr-resolve/__tests__/prompts.test.d.ts +0 -1
- package/dist/phases/pr-resolve/__tests__/prompts.test.js +0 -116
- package/dist/phases/pr-resolve/__tests__/resolve-mapping.test.d.ts +0 -1
- package/dist/phases/pr-resolve/__tests__/resolve-mapping.test.js +0 -138
- package/dist/phases/pr-resolve/__tests__/types.test.d.ts +0 -1
- package/dist/phases/pr-resolve/__tests__/types.test.js +0 -43
- package/dist/phases/pr-resolve/__tests__/workspace.test.d.ts +0 -1
- package/dist/phases/pr-resolve/__tests__/workspace.test.js +0 -111
- package/dist/phases/pr-review/__tests__/prompts.test.d.ts +0 -1
- package/dist/phases/pr-review/__tests__/prompts.test.js +0 -49
- package/dist/phases/pr-review/__tests__/review-comments.test.d.ts +0 -1
- package/dist/phases/pr-review/__tests__/review-comments.test.js +0 -110
- package/dist/phases/pr-shared/__tests__/agent-utils.test.d.ts +0 -1
- package/dist/phases/pr-shared/__tests__/agent-utils.test.js +0 -91
- package/dist/phases/pr-shared/__tests__/context.test.d.ts +0 -1
- package/dist/phases/pr-shared/__tests__/context.test.js +0 -94
- package/dist/phases/pr-splitting/__tests__/import-dep-validator.test.d.ts +0 -1
- package/dist/phases/pr-splitting/__tests__/import-dep-validator.test.js +0 -331
- package/dist/phases/run-sheet/render.d.ts +0 -60
- package/dist/phases/run-sheet/render.js +0 -297
- package/dist/phases/smoke-test/__tests__/agent.test.d.ts +0 -4
- package/dist/phases/smoke-test/__tests__/agent.test.js +0 -84
- package/dist/phases/smoke-test/__tests__/github.test.d.ts +0 -9
- package/dist/phases/smoke-test/__tests__/github.test.js +0 -120
- package/dist/phases/smoke-test/__tests__/snapshot.test.d.ts +0 -8
- package/dist/phases/smoke-test/__tests__/snapshot.test.js +0 -93
- package/dist/phases/smoke-test/github.d.ts +0 -54
- package/dist/phases/smoke-test/github.js +0 -101
- package/dist/phases/smoke-test/snapshot.d.ts +0 -27
- package/dist/phases/smoke-test/snapshot.js +0 -157
- package/dist/services/coaching/__tests__/coaching-agent.test.d.ts +0 -1
- package/dist/services/coaching/__tests__/coaching-agent.test.js +0 -74
- package/dist/services/coaching/__tests__/coaching-loop.test.d.ts +0 -1
- package/dist/services/coaching/__tests__/coaching-loop.test.js +0 -59
- package/dist/services/coaching/__tests__/self-rating.test.d.ts +0 -1
- package/dist/services/coaching/__tests__/self-rating.test.js +0 -188
- package/dist/services/lifecycle-agent/__tests__/phase-criteria.test.d.ts +0 -4
- package/dist/services/lifecycle-agent/__tests__/phase-criteria.test.js +0 -133
- package/dist/services/lifecycle-agent/__tests__/transition-rules.test.d.ts +0 -4
- package/dist/services/lifecycle-agent/__tests__/transition-rules.test.js +0 -336
- package/dist/services/lifecycle-agent/index.d.ts +0 -24
- package/dist/services/lifecycle-agent/index.js +0 -25
- package/dist/services/lifecycle-agent/phase-criteria.d.ts +0 -57
- package/dist/services/lifecycle-agent/phase-criteria.js +0 -335
- package/dist/services/lifecycle-agent/transition-rules.d.ts +0 -60
- package/dist/services/lifecycle-agent/transition-rules.js +0 -184
- package/dist/services/lifecycle-agent/types.d.ts +0 -190
- package/dist/services/lifecycle-agent/types.js +0 -12
- package/dist/services/phase-hooks/__tests__/bindings-fetcher.test.d.ts +0 -1
- package/dist/services/phase-hooks/__tests__/bindings-fetcher.test.js +0 -122
- package/dist/services/phase-hooks/__tests__/hook-executor.test.d.ts +0 -1
- package/dist/services/phase-hooks/__tests__/hook-executor.test.js +0 -321
- package/dist/services/phase-hooks/__tests__/hook-runner.test.d.ts +0 -1
- package/dist/services/phase-hooks/__tests__/hook-runner.test.js +0 -261
- package/dist/services/phase-hooks/__tests__/plugin-loader.test.d.ts +0 -1
- package/dist/services/phase-hooks/__tests__/plugin-loader.test.js +0 -158
- package/dist/services/video/__tests__/video-pipeline.test.d.ts +0 -6
- package/dist/services/video/__tests__/video-pipeline.test.js +0 -249
- package/dist/types/features.js +0 -1
- package/dist/workspace/__tests__/workspace-manager.test.d.ts +0 -7
- package/dist/workspace/__tests__/workspace-manager.test.js +0 -52
- /package/dist/api/{features → issues}/batch-operations.d.ts +0 -0
- /package/dist/api/{features → issues}/batch-operations.js +0 -0
- /package/dist/phases/{feature-analysis → issue-analysis}/agent.d.ts +0 -0
- /package/dist/skills/phase/{feature-analysis-verification → issue-analysis-verification}/SKILL.md +0 -0
- /package/dist/{phases/code-review/__tests__/diff-utils.test.d.ts → types/issues.js} +0 -0
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { getGitHubConfig } from '../../../api/github.js';
|
|
5
5
|
import { runAutonomousDevelopment } from '../../../phases/autonomous/index.js';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { planIssueBranches } from '../../../phases/branch-planning/index.js';
|
|
7
|
+
import { implementIssueCode } from '../../../phases/code-implementation/index.js';
|
|
8
8
|
import { refineCodeFromPRFeedback } from '../../../phases/code-refine/index.js';
|
|
9
9
|
import { verifyAndResolveComments } from '../../../phases/code-refine-verification/index.js';
|
|
10
10
|
import { reviewPullRequest } from '../../../phases/code-review/index.js';
|
|
11
11
|
import { writeCodeTests } from '../../../phases/code-testing/analyzer.js';
|
|
12
|
-
import { analyseFeature } from '../../../phases/feature-analysis/index.js';
|
|
13
12
|
import { runFunctionalTesting } from '../../../phases/functional-testing/analyzer.js';
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
13
|
+
import { analyseIssue } from '../../../phases/issue-analysis/index.js';
|
|
14
|
+
import { executeIssuePRs } from '../../../phases/pr-execution/index.js';
|
|
15
|
+
import { splitIssueIntoPRs } from '../../../phases/pr-splitting/index.js';
|
|
16
16
|
import { generateTechnicalDesign } from '../../../phases/technical-design/index.js';
|
|
17
17
|
import { analyseTestCases } from '../../../phases/test-cases-analysis/index.js';
|
|
18
18
|
import { analyseUserStories } from '../../../phases/user-stories-analysis/index.js';
|
|
@@ -20,7 +20,7 @@ import { analyseUserStories } from '../../../phases/user-stories-analysis/index.
|
|
|
20
20
|
* Wrapper for code-refine phase to inject GitHub token
|
|
21
21
|
*/
|
|
22
22
|
const executeCodeRefine = async (options, config, checklistContext) => {
|
|
23
|
-
const githubConfig = await getGitHubConfig(options.
|
|
23
|
+
const githubConfig = await getGitHubConfig(options.issueId, options.verbose);
|
|
24
24
|
if (!githubConfig.configured || !githubConfig.token) {
|
|
25
25
|
return {
|
|
26
26
|
status: 'error',
|
|
@@ -29,7 +29,7 @@ const executeCodeRefine = async (options, config, checklistContext) => {
|
|
|
29
29
|
};
|
|
30
30
|
}
|
|
31
31
|
return refineCodeFromPRFeedback({
|
|
32
|
-
|
|
32
|
+
issueId: options.issueId,
|
|
33
33
|
githubToken: githubConfig.token,
|
|
34
34
|
verbose: options.verbose,
|
|
35
35
|
}, config, checklistContext);
|
|
@@ -38,7 +38,7 @@ const executeCodeRefine = async (options, config, checklistContext) => {
|
|
|
38
38
|
* Wrapper for code-refine-verification phase to inject GitHub token
|
|
39
39
|
*/
|
|
40
40
|
const executeCodeRefineVerification = async (options, config) => {
|
|
41
|
-
const githubConfig = await getGitHubConfig(options.
|
|
41
|
+
const githubConfig = await getGitHubConfig(options.issueId, options.verbose);
|
|
42
42
|
if (!githubConfig.configured || !githubConfig.token) {
|
|
43
43
|
return {
|
|
44
44
|
status: 'error',
|
|
@@ -47,7 +47,7 @@ const executeCodeRefineVerification = async (options, config) => {
|
|
|
47
47
|
};
|
|
48
48
|
}
|
|
49
49
|
return verifyAndResolveComments({
|
|
50
|
-
|
|
50
|
+
issueId: options.issueId,
|
|
51
51
|
githubToken: githubConfig.token,
|
|
52
52
|
config, // Add config parameter for LLM analysis
|
|
53
53
|
verbose: options.verbose,
|
|
@@ -57,7 +57,7 @@ const executeCodeRefineVerification = async (options, config) => {
|
|
|
57
57
|
* Wrapper for code-review phase to inject GitHub token
|
|
58
58
|
*/
|
|
59
59
|
const executeCodeReview = async (options, config, checklistContext) => {
|
|
60
|
-
const githubConfig = await getGitHubConfig(options.
|
|
60
|
+
const githubConfig = await getGitHubConfig(options.issueId, options.verbose);
|
|
61
61
|
if (!githubConfig.configured || !githubConfig.token) {
|
|
62
62
|
return {
|
|
63
63
|
status: 'error',
|
|
@@ -66,7 +66,7 @@ const executeCodeReview = async (options, config, checklistContext) => {
|
|
|
66
66
|
};
|
|
67
67
|
}
|
|
68
68
|
return reviewPullRequest({
|
|
69
|
-
|
|
69
|
+
issueId: options.issueId,
|
|
70
70
|
githubToken: githubConfig.token,
|
|
71
71
|
verbose: options.verbose,
|
|
72
72
|
}, config, checklistContext);
|
|
@@ -74,8 +74,8 @@ const executeCodeReview = async (options, config, checklistContext) => {
|
|
|
74
74
|
// Pipeline phase configurations
|
|
75
75
|
export const phaseConfigs = [
|
|
76
76
|
{
|
|
77
|
-
name: '
|
|
78
|
-
execute:
|
|
77
|
+
name: 'issue-analysis',
|
|
78
|
+
execute: analyseIssue,
|
|
79
79
|
},
|
|
80
80
|
{
|
|
81
81
|
name: 'user-stories-analysis',
|
|
@@ -91,19 +91,19 @@ export const phaseConfigs = [
|
|
|
91
91
|
},
|
|
92
92
|
{
|
|
93
93
|
name: 'branch-planning',
|
|
94
|
-
execute:
|
|
94
|
+
execute: planIssueBranches,
|
|
95
95
|
},
|
|
96
96
|
{
|
|
97
97
|
name: 'code-implementation',
|
|
98
|
-
execute:
|
|
98
|
+
execute: implementIssueCode,
|
|
99
99
|
},
|
|
100
100
|
{
|
|
101
101
|
name: 'pr-splitting',
|
|
102
|
-
execute:
|
|
102
|
+
execute: splitIssueIntoPRs,
|
|
103
103
|
},
|
|
104
104
|
{
|
|
105
105
|
name: 'pr-execution',
|
|
106
|
-
execute:
|
|
106
|
+
execute: executeIssuePRs,
|
|
107
107
|
},
|
|
108
108
|
{
|
|
109
109
|
name: 'functional-testing',
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
*/
|
|
5
5
|
// State management
|
|
6
6
|
export * from './state-manager.js';
|
|
7
|
-
//
|
|
8
|
-
export * from './
|
|
7
|
+
// Issue filtering
|
|
8
|
+
export * from './issue-filter.js';
|
|
9
9
|
// Pipeline evaluation
|
|
10
10
|
export * from './pipeline-evaluator.js';
|
|
11
11
|
// Workflow logging
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Issue filtering utilities for workflow processor
|
|
3
|
+
* Pure functions for filtering and selecting issues for processing
|
|
4
|
+
*/
|
|
5
|
+
import type { IssueInfo } from '../../../types/issues.js';
|
|
6
|
+
import type { IssueProcessingState } from './state-manager.js';
|
|
7
|
+
export declare const shouldProcessIssue: (maxRetries: number) => (issue: IssueInfo, states: Map<string, IssueProcessingState>) => boolean;
|
|
8
|
+
export declare const findNextIssue: (issues: readonly IssueInfo[], states: Map<string, IssueProcessingState>, maxRetries: number) => IssueInfo | undefined;
|
|
9
|
+
export declare const isIssueProcessing: (issueId: string, states: Map<string, IssueProcessingState>) => boolean;
|
|
10
|
+
export declare const isIssueCompleted: (issueId: string, states: Map<string, IssueProcessingState>) => boolean;
|
|
11
|
+
export declare const isIssueFailed: (issueId: string, states: Map<string, IssueProcessingState>) => boolean;
|
|
12
|
+
export declare const hasReachedMaxRetries: (issueId: string, states: Map<string, IssueProcessingState>, maxRetries: number) => boolean;
|
|
13
|
+
export declare const filterProcessingIssues: (issues: readonly IssueInfo[], states: Map<string, IssueProcessingState>) => IssueInfo[];
|
|
14
|
+
export declare const filterCompletedIssues: (issues: readonly IssueInfo[], states: Map<string, IssueProcessingState>) => IssueInfo[];
|
|
15
|
+
export declare const filterFailedIssues: (issues: readonly IssueInfo[], states: Map<string, IssueProcessingState>) => IssueInfo[];
|
|
16
|
+
export declare const filterAvailableIssues: (issues: readonly IssueInfo[], states: Map<string, IssueProcessingState>, maxRetries: number) => IssueInfo[];
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Issue filtering utilities for workflow processor
|
|
3
|
+
* Pure functions for filtering and selecting issues for processing
|
|
4
|
+
*/
|
|
5
|
+
// Issue filtering functions (pure)
|
|
6
|
+
export const shouldProcessIssue = (maxRetries) => (issue, states) => {
|
|
7
|
+
const state = states.get(issue.id);
|
|
8
|
+
// If never processed, should process
|
|
9
|
+
if (!state) {
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
// If issue was updated after last processing attempt, should reprocess
|
|
13
|
+
// This handles cases where user manually changes status back to ready_for_ai
|
|
14
|
+
if (issue.updated_at) {
|
|
15
|
+
const issueUpdatedTime = new Date(issue.updated_at).getTime();
|
|
16
|
+
const lastAttemptTime = state.lastAttempt.getTime();
|
|
17
|
+
if (issueUpdatedTime > lastAttemptTime) {
|
|
18
|
+
// Issue has been updated since last processing, reprocess it
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
// If failed and haven't exceeded retry limit, should retry
|
|
23
|
+
return state.status === 'failed' && state.retryCount < maxRetries;
|
|
24
|
+
};
|
|
25
|
+
export const findNextIssue = (issues, states, maxRetries) => issues.find((issue) => shouldProcessIssue(maxRetries)(issue, states));
|
|
26
|
+
// Issue status checking functions (pure)
|
|
27
|
+
export const isIssueProcessing = (issueId, states) => {
|
|
28
|
+
const state = states.get(issueId);
|
|
29
|
+
return state?.status === 'processing';
|
|
30
|
+
};
|
|
31
|
+
export const isIssueCompleted = (issueId, states) => {
|
|
32
|
+
const state = states.get(issueId);
|
|
33
|
+
return state?.status === 'completed';
|
|
34
|
+
};
|
|
35
|
+
export const isIssueFailed = (issueId, states) => {
|
|
36
|
+
const state = states.get(issueId);
|
|
37
|
+
return state?.status === 'failed';
|
|
38
|
+
};
|
|
39
|
+
export const hasReachedMaxRetries = (issueId, states, maxRetries) => {
|
|
40
|
+
const state = states.get(issueId);
|
|
41
|
+
return state ? state.retryCount >= maxRetries : false;
|
|
42
|
+
};
|
|
43
|
+
// Issue collection filtering functions (pure)
|
|
44
|
+
export const filterProcessingIssues = (issues, states) => issues.filter((issue) => isIssueProcessing(issue.id, states));
|
|
45
|
+
export const filterCompletedIssues = (issues, states) => issues.filter((issue) => isIssueCompleted(issue.id, states));
|
|
46
|
+
export const filterFailedIssues = (issues, states) => issues.filter((issue) => isIssueFailed(issue.id, states));
|
|
47
|
+
export const filterAvailableIssues = (issues, states, maxRetries) => issues.filter((issue) => shouldProcessIssue(maxRetries)(issue, states));
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* State management utilities for workflow processor
|
|
3
|
-
* Pure functions for handling
|
|
3
|
+
* Pure functions for handling issue processing states
|
|
4
4
|
*/
|
|
5
|
-
export interface
|
|
6
|
-
readonly
|
|
5
|
+
export interface IssueProcessingState {
|
|
6
|
+
readonly issueId: string;
|
|
7
7
|
readonly retryCount: number;
|
|
8
8
|
readonly lastAttempt: Date;
|
|
9
9
|
readonly status: 'processing' | 'completed' | 'failed';
|
|
10
|
-
readonly
|
|
10
|
+
readonly issueUpdatedAt?: string;
|
|
11
11
|
}
|
|
12
12
|
export interface WorkflowStats {
|
|
13
13
|
readonly totalProcessed: number;
|
|
@@ -16,9 +16,9 @@ export interface WorkflowStats {
|
|
|
16
16
|
readonly processing: number;
|
|
17
17
|
readonly isRunning: boolean;
|
|
18
18
|
}
|
|
19
|
-
export declare const createInitialState: () => Map<string,
|
|
20
|
-
export declare const createProcessingState: (
|
|
21
|
-
export declare const createCompletedState: (
|
|
22
|
-
export declare const createFailedState: (
|
|
23
|
-
export declare const
|
|
24
|
-
export declare const calculateStats: (states: Map<string,
|
|
19
|
+
export declare const createInitialState: () => Map<string, IssueProcessingState>;
|
|
20
|
+
export declare const createProcessingState: (issueId: string, currentState?: IssueProcessingState) => IssueProcessingState;
|
|
21
|
+
export declare const createCompletedState: (issueId: string, currentState?: IssueProcessingState) => IssueProcessingState;
|
|
22
|
+
export declare const createFailedState: (issueId: string, currentState?: IssueProcessingState) => IssueProcessingState;
|
|
23
|
+
export declare const updateIssueState: (states: Map<string, IssueProcessingState>, issueId: string, updateFn: (currentState?: IssueProcessingState) => IssueProcessingState) => Map<string, IssueProcessingState>;
|
|
24
|
+
export declare const calculateStats: (states: Map<string, IssueProcessingState>, isRunning: boolean) => WorkflowStats;
|
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* State management utilities for workflow processor
|
|
3
|
-
* Pure functions for handling
|
|
3
|
+
* Pure functions for handling issue processing states
|
|
4
4
|
*/
|
|
5
5
|
// State creation functions (pure)
|
|
6
6
|
export const createInitialState = () => new Map();
|
|
7
|
-
export const createProcessingState = (
|
|
8
|
-
|
|
7
|
+
export const createProcessingState = (issueId, currentState) => ({
|
|
8
|
+
issueId,
|
|
9
9
|
retryCount: currentState ? currentState.retryCount + 1 : 1,
|
|
10
10
|
lastAttempt: new Date(),
|
|
11
11
|
status: 'processing',
|
|
12
12
|
});
|
|
13
|
-
export const createCompletedState = (
|
|
14
|
-
|
|
13
|
+
export const createCompletedState = (issueId, currentState) => ({
|
|
14
|
+
issueId,
|
|
15
15
|
retryCount: currentState ? currentState.retryCount : 1,
|
|
16
16
|
lastAttempt: new Date(),
|
|
17
17
|
status: 'completed',
|
|
18
18
|
});
|
|
19
|
-
export const createFailedState = (
|
|
20
|
-
|
|
19
|
+
export const createFailedState = (issueId, currentState) => ({
|
|
20
|
+
issueId,
|
|
21
21
|
retryCount: currentState ? currentState.retryCount : 1,
|
|
22
22
|
lastAttempt: new Date(),
|
|
23
23
|
status: 'failed',
|
|
24
24
|
});
|
|
25
25
|
// State update function (pure)
|
|
26
|
-
export const
|
|
26
|
+
export const updateIssueState = (states, issueId, updateFn) => {
|
|
27
27
|
const newStates = new Map(states);
|
|
28
|
-
const currentState = newStates.get(
|
|
29
|
-
newStates.set(
|
|
28
|
+
const currentState = newStates.get(issueId);
|
|
29
|
+
newStates.set(issueId, updateFn(currentState));
|
|
30
30
|
return newStates;
|
|
31
31
|
};
|
|
32
32
|
// Statistics calculation (pure)
|
|
@@ -2,22 +2,22 @@
|
|
|
2
2
|
* Logging utilities for workflow processor
|
|
3
3
|
* Centralized logging functions for workflow operations
|
|
4
4
|
*/
|
|
5
|
-
import type {
|
|
5
|
+
import type { IssueInfo } from '../../../types/issues.js';
|
|
6
6
|
import type { PipelineResult } from '../../../types/pipeline.js';
|
|
7
|
-
export declare const logProcessingStart: (
|
|
8
|
-
export declare const logRetryInfo: (
|
|
7
|
+
export declare const logProcessingStart: (issue: IssueInfo, verbose?: boolean) => void;
|
|
8
|
+
export declare const logRetryInfo: (issueName: string, retryCount: number, maxRetries: number) => void;
|
|
9
9
|
export declare const logPipelineResults: (results: readonly PipelineResult[]) => void;
|
|
10
10
|
export declare const logProcessorStart: (productId: string, pollInterval: number) => void;
|
|
11
11
|
export declare const logProcessorReady: () => void;
|
|
12
12
|
export declare const logProcessorStop: () => void;
|
|
13
|
-
export declare const
|
|
14
|
-
export declare const
|
|
15
|
-
export declare const
|
|
16
|
-
export declare const
|
|
17
|
-
export declare const
|
|
13
|
+
export declare const logIssueSuccess: (issueName: string) => void;
|
|
14
|
+
export declare const logIssueFailed: (issueName: string) => void;
|
|
15
|
+
export declare const logIssueError: (issueName: string, error: unknown) => void;
|
|
16
|
+
export declare const logNoIssuesFound: () => void;
|
|
17
|
+
export declare const logAllIssuesProcessed: () => void;
|
|
18
18
|
export declare const logSkippingProcessing: (processingCount: number) => void;
|
|
19
19
|
export declare const logPollingError: (error: unknown) => void;
|
|
20
|
-
export declare const
|
|
20
|
+
export declare const logProcessNextIssueError: (error: unknown) => void;
|
|
21
21
|
export declare const logAutonomousIterationStart: (iteration: number, remainingHours: number) => void;
|
|
22
22
|
export declare const logAutonomousIterationComplete: (iteration: number, summary: string, prUrl?: string) => void;
|
|
23
23
|
export declare const logAutonomousPhaseComplete: (totalIterations: number, elapsedHours: number) => void;
|
|
@@ -3,19 +3,19 @@
|
|
|
3
3
|
* Centralized logging functions for workflow operations
|
|
4
4
|
*/
|
|
5
5
|
import { logError, logInfo, logRaw, logSuccess } from '../../../utils/logger.js';
|
|
6
|
-
export const logProcessingStart = (
|
|
7
|
-
logInfo(`🎯 Processing
|
|
6
|
+
export const logProcessingStart = (issue, verbose) => {
|
|
7
|
+
logInfo(`🎯 Processing issue: ${issue.name} (${issue.id})`);
|
|
8
8
|
if (verbose) {
|
|
9
|
-
logInfo(` Description: ${
|
|
10
|
-
logInfo(` Last updated: ${
|
|
9
|
+
logInfo(` Description: ${issue.description}`);
|
|
10
|
+
logInfo(` Last updated: ${issue.updated_at}`);
|
|
11
11
|
}
|
|
12
12
|
};
|
|
13
|
-
export const logRetryInfo = (
|
|
13
|
+
export const logRetryInfo = (issueName, retryCount, maxRetries) => {
|
|
14
14
|
if (retryCount < maxRetries) {
|
|
15
|
-
logInfo(`🔄 Will retry
|
|
15
|
+
logInfo(`🔄 Will retry issue ${issueName} (attempt ${retryCount + 1}/${maxRetries})`);
|
|
16
16
|
}
|
|
17
17
|
else {
|
|
18
|
-
logError(`⛔ Max retries reached for
|
|
18
|
+
logError(`⛔ Max retries reached for issue ${issueName}, marking as permanently failed`);
|
|
19
19
|
}
|
|
20
20
|
};
|
|
21
21
|
export const logPipelineResults = (results) => {
|
|
@@ -34,34 +34,34 @@ export const logProcessorStart = (productId, pollInterval) => {
|
|
|
34
34
|
logInfo(`🔄 Poll interval: ${pollInterval}ms`);
|
|
35
35
|
};
|
|
36
36
|
export const logProcessorReady = () => {
|
|
37
|
-
logInfo('✅ Workflow processor started and monitoring for new
|
|
37
|
+
logInfo('✅ Workflow processor started and monitoring for new issues');
|
|
38
38
|
};
|
|
39
39
|
export const logProcessorStop = () => {
|
|
40
40
|
logInfo('⏹️ Workflow processor stopped');
|
|
41
41
|
};
|
|
42
|
-
export const
|
|
43
|
-
logSuccess(`✅
|
|
42
|
+
export const logIssueSuccess = (issueName) => {
|
|
43
|
+
logSuccess(`✅ Issue ${issueName} completed successfully!`);
|
|
44
44
|
};
|
|
45
|
-
export const
|
|
46
|
-
logError(`❌
|
|
45
|
+
export const logIssueFailed = (issueName) => {
|
|
46
|
+
logError(`❌ Issue ${issueName} failed in pipeline`);
|
|
47
47
|
};
|
|
48
|
-
export const
|
|
49
|
-
logError(`❌ Error processing
|
|
48
|
+
export const logIssueError = (issueName, error) => {
|
|
49
|
+
logError(`❌ Error processing issue ${issueName}: ${error instanceof Error ? error.message : String(error)}`);
|
|
50
50
|
};
|
|
51
|
-
export const
|
|
52
|
-
logInfo('🔍 No ready_for_ai
|
|
51
|
+
export const logNoIssuesFound = () => {
|
|
52
|
+
logInfo('🔍 No ready_for_ai issues found, continuing to monitor...');
|
|
53
53
|
};
|
|
54
|
-
export const
|
|
55
|
-
logInfo('🔄 All current
|
|
54
|
+
export const logAllIssuesProcessed = () => {
|
|
55
|
+
logInfo('🔄 All current issues are processed or being processed, continuing to monitor...');
|
|
56
56
|
};
|
|
57
57
|
export const logSkippingProcessing = (processingCount) => {
|
|
58
|
-
logInfo(`⏳ Skipping
|
|
58
|
+
logInfo(`⏳ Skipping issue fetching as ${processingCount} issue(s) are currently being processed`);
|
|
59
59
|
};
|
|
60
60
|
export const logPollingError = (error) => {
|
|
61
61
|
logError(`Error in polling cycle: ${error instanceof Error ? error.message : String(error)}`);
|
|
62
62
|
};
|
|
63
|
-
export const
|
|
64
|
-
logError(`Error in
|
|
63
|
+
export const logProcessNextIssueError = (error) => {
|
|
64
|
+
logError(`Error in processNextIssue: ${error instanceof Error ? error.message : String(error)}`);
|
|
65
65
|
};
|
|
66
66
|
export const logAutonomousIterationStart = (iteration, remainingHours) => {
|
|
67
67
|
logInfo(`🔄 Autonomous iteration ${iteration} (${remainingHours.toFixed(1)}h remaining)`);
|
|
@@ -4,5 +4,5 @@
|
|
|
4
4
|
import { type EdsgerConfig } from '../../../types/index.js';
|
|
5
5
|
import { type PhaseConfig, type PipelinePhaseOptions, type PipelineResult } from '../../../types/pipeline.js';
|
|
6
6
|
export declare const createPhaseRunner: (phaseConfig: PhaseConfig) => (options: PipelinePhaseOptions, config: EdsgerConfig) => Promise<PipelineResult>;
|
|
7
|
-
declare const
|
|
8
|
-
export { runAutonomousPhase, runBranchPlanningPhase, runCodeImplementationPhase, runCodeRefinePhase, runCodeRefineVerificationPhase, runCodeReviewPhase, runCodeTestingPhase,
|
|
7
|
+
declare const runIssueAnalysisPhase: (options: PipelinePhaseOptions, config: EdsgerConfig) => Promise<PipelineResult>, runUserStoriesAnalysisPhase: (options: PipelinePhaseOptions, config: EdsgerConfig) => Promise<PipelineResult>, runTestCasesAnalysisPhase: (options: PipelinePhaseOptions, config: EdsgerConfig) => Promise<PipelineResult>, runTechnicalDesignPhase: (options: PipelinePhaseOptions, config: EdsgerConfig) => Promise<PipelineResult>, runBranchPlanningPhase: (options: PipelinePhaseOptions, config: EdsgerConfig) => Promise<PipelineResult>, runCodeImplementationPhase: (options: PipelinePhaseOptions, config: EdsgerConfig) => Promise<PipelineResult>, runPRSplittingPhase: (options: PipelinePhaseOptions, config: EdsgerConfig) => Promise<PipelineResult>, runPRExecutionPhase: (options: PipelinePhaseOptions, config: EdsgerConfig) => Promise<PipelineResult>, runFunctionalTestingPhase: (options: PipelinePhaseOptions, config: EdsgerConfig) => Promise<PipelineResult>, runCodeTestingPhase: (options: PipelinePhaseOptions, config: EdsgerConfig) => Promise<PipelineResult>, runCodeRefinePhase: (options: PipelinePhaseOptions, config: EdsgerConfig) => Promise<PipelineResult>, runCodeRefineVerificationPhase: (options: PipelinePhaseOptions, config: EdsgerConfig) => Promise<PipelineResult>, runCodeReviewPhase: (options: PipelinePhaseOptions, config: EdsgerConfig) => Promise<PipelineResult>, runAutonomousPhase: (options: PipelinePhaseOptions, config: EdsgerConfig) => Promise<PipelineResult>;
|
|
8
|
+
export { runAutonomousPhase, runBranchPlanningPhase, runCodeImplementationPhase, runCodeRefinePhase, runCodeRefineVerificationPhase, runCodeReviewPhase, runCodeTestingPhase, runFunctionalTestingPhase, runIssueAnalysisPhase, runPRExecutionPhase, runPRSplittingPhase, runTechnicalDesignPhase, runTestCasesAnalysisPhase, runUserStoriesAnalysisPhase, };
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Phase execution logic for pipeline runner
|
|
3
3
|
*/
|
|
4
|
-
import { checkApprovalBeforePhaseExecution } from '../../../api/
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
4
|
+
import { checkApprovalBeforePhaseExecution } from '../../../api/issues/approval-checker.js';
|
|
5
|
+
import { updateIssueStatusForPhase } from '../../../api/issues/index.js';
|
|
6
|
+
import { logIssuePhaseEvent, } from '../../../services/audit-logs.js';
|
|
7
7
|
import { getChecklistsForPhase, processChecklistItemResultsFromResponse, processChecklistResultsFromResponse, validateChecklistsForPhase, validateRequiredChecklistResults, } from '../../../services/checklist.js';
|
|
8
8
|
import { runHooksForPhase } from '../../../services/phase-hooks/index.js';
|
|
9
9
|
import { logDebug, logInfo, logWarning } from '../../../utils/logger.js';
|
|
@@ -72,14 +72,14 @@ async function processPhaseChecklistResults(result, options, name, verbose) {
|
|
|
72
72
|
/**
|
|
73
73
|
* Validate checklists and log completion status
|
|
74
74
|
*/
|
|
75
|
-
async function validateAndLogChecklists(options, name, checklistContext,
|
|
75
|
+
async function validateAndLogChecklists(options, name, checklistContext, issueId, verbose) {
|
|
76
76
|
try {
|
|
77
77
|
const strictValidation = await validateRequiredChecklistResults(options, name, verbose);
|
|
78
78
|
if (!strictValidation.success) {
|
|
79
79
|
return {
|
|
80
80
|
validation: null,
|
|
81
81
|
error: {
|
|
82
|
-
|
|
82
|
+
issueId,
|
|
83
83
|
phase: name,
|
|
84
84
|
status: 'error',
|
|
85
85
|
message: `Checklist validation failed: ${strictValidation.error}`,
|
|
@@ -115,7 +115,7 @@ async function validateAndLogChecklists(options, name, checklistContext, feature
|
|
|
115
115
|
return {
|
|
116
116
|
validation: null,
|
|
117
117
|
error: {
|
|
118
|
-
|
|
118
|
+
issueId,
|
|
119
119
|
phase: name,
|
|
120
120
|
status: 'error',
|
|
121
121
|
message: `Checklist validation error: ${validationError instanceof Error ? validationError.message : String(validationError)}`,
|
|
@@ -133,17 +133,17 @@ async function validateAndLogChecklists(options, name, checklistContext, feature
|
|
|
133
133
|
export const createPhaseRunner = (phaseConfig) =>
|
|
134
134
|
// eslint-disable-next-line complexity
|
|
135
135
|
async (options, config) => {
|
|
136
|
-
const {
|
|
136
|
+
const { issueId, verbose } = options;
|
|
137
137
|
const { name, execute } = phaseConfig;
|
|
138
138
|
// Track phase duration for logging
|
|
139
139
|
const phaseStartTime = Date.now();
|
|
140
140
|
try {
|
|
141
141
|
// CHECK APPROVAL BEFORE EXECUTING PHASE
|
|
142
|
-
// This checks if the current
|
|
142
|
+
// This checks if the current issue status has been approved
|
|
143
143
|
if (verbose) {
|
|
144
144
|
logDebug(`Checking approval before executing ${name} phase...`, verbose);
|
|
145
145
|
}
|
|
146
|
-
const approvalCheck = await checkApprovalBeforePhaseExecution(
|
|
146
|
+
const approvalCheck = await checkApprovalBeforePhaseExecution(issueId, verbose);
|
|
147
147
|
if (!approvalCheck.canProceed) {
|
|
148
148
|
// Current status requires approval but hasn't been approved yet
|
|
149
149
|
// Block phase execution and return blocked result
|
|
@@ -151,11 +151,11 @@ async (options, config) => {
|
|
|
151
151
|
logWarning(`Phase ${name} blocked: ${approvalCheck.message || 'Waiting for approval'}`);
|
|
152
152
|
}
|
|
153
153
|
return {
|
|
154
|
-
|
|
154
|
+
issueId,
|
|
155
155
|
phase: name,
|
|
156
156
|
status: 'blocked',
|
|
157
157
|
message: approvalCheck.message ||
|
|
158
|
-
'Phase execution blocked - waiting for approval of current
|
|
158
|
+
'Phase execution blocked - waiting for approval of current issue status',
|
|
159
159
|
data: {
|
|
160
160
|
approval_required: true,
|
|
161
161
|
approval_id: approvalCheck.approvalId,
|
|
@@ -166,14 +166,14 @@ async (options, config) => {
|
|
|
166
166
|
if (verbose && approvalCheck.requiresApproval) {
|
|
167
167
|
logDebug(`Approval verified for current status. Proceeding with ${name} phase.`, verbose);
|
|
168
168
|
}
|
|
169
|
-
// Update
|
|
170
|
-
await
|
|
169
|
+
// Update issue status to reflect current phase
|
|
170
|
+
await updateIssueStatusForPhase(issueId, name, verbose);
|
|
171
171
|
if (verbose) {
|
|
172
|
-
logDebug(`Starting ${name} for: ${
|
|
172
|
+
logDebug(`Starting ${name} for: ${issueId}`, verbose);
|
|
173
173
|
}
|
|
174
174
|
// Log phase start
|
|
175
|
-
await
|
|
176
|
-
|
|
175
|
+
await logIssuePhaseEvent({
|
|
176
|
+
issueId,
|
|
177
177
|
eventType: 'phase_started',
|
|
178
178
|
phase: name.replace(/-/g, '_'),
|
|
179
179
|
result: 'info',
|
|
@@ -199,14 +199,14 @@ async (options, config) => {
|
|
|
199
199
|
}
|
|
200
200
|
// Run 'before' hooks
|
|
201
201
|
const beforeHooks = await runHooksForPhase({
|
|
202
|
-
|
|
202
|
+
issueId,
|
|
203
203
|
phase: name,
|
|
204
204
|
hookPoint: 'before',
|
|
205
205
|
verbose,
|
|
206
206
|
});
|
|
207
207
|
if (beforeHooks.blocked) {
|
|
208
208
|
return {
|
|
209
|
-
|
|
209
|
+
issueId,
|
|
210
210
|
phase: name,
|
|
211
211
|
status: 'blocked',
|
|
212
212
|
message: `Phase ${name} blocked by pre-execution hook`,
|
|
@@ -219,7 +219,7 @@ async (options, config) => {
|
|
|
219
219
|
const result = (await execute(options, config, checklistContext));
|
|
220
220
|
// Run 'after' hooks
|
|
221
221
|
const afterHooks = await runHooksForPhase({
|
|
222
|
-
|
|
222
|
+
issueId,
|
|
223
223
|
phase: name,
|
|
224
224
|
hookPoint: 'after',
|
|
225
225
|
phaseResult: result,
|
|
@@ -227,7 +227,7 @@ async (options, config) => {
|
|
|
227
227
|
});
|
|
228
228
|
if (afterHooks.blocked) {
|
|
229
229
|
return {
|
|
230
|
-
|
|
230
|
+
issueId,
|
|
231
231
|
phase: name,
|
|
232
232
|
status: 'blocked',
|
|
233
233
|
message: `Phase ${name} blocked by post-execution hook`,
|
|
@@ -241,7 +241,7 @@ async (options, config) => {
|
|
|
241
241
|
// Strictly validate checklist results after phase execution
|
|
242
242
|
let checklistValidation = null;
|
|
243
243
|
if (result.status === 'success') {
|
|
244
|
-
const validationOutcome = await validateAndLogChecklists(options, name, checklistContext,
|
|
244
|
+
const validationOutcome = await validateAndLogChecklists(options, name, checklistContext, issueId, verbose);
|
|
245
245
|
if (validationOutcome.error) {
|
|
246
246
|
return validationOutcome.error;
|
|
247
247
|
}
|
|
@@ -251,8 +251,8 @@ async (options, config) => {
|
|
|
251
251
|
const phaseEndTime = Date.now();
|
|
252
252
|
const phaseDuration = phaseEndTime - phaseStartTime;
|
|
253
253
|
if (result.status === 'success') {
|
|
254
|
-
await
|
|
255
|
-
|
|
254
|
+
await logIssuePhaseEvent({
|
|
255
|
+
issueId,
|
|
256
256
|
eventType: 'phase_completed',
|
|
257
257
|
phase: name.replace(/-/g, '_'),
|
|
258
258
|
result: 'success',
|
|
@@ -271,8 +271,8 @@ async (options, config) => {
|
|
|
271
271
|
};
|
|
272
272
|
// For verification phases, include suggestions and details
|
|
273
273
|
enrichFailureMetadata(failureMetadata, name, result.data);
|
|
274
|
-
await
|
|
275
|
-
|
|
274
|
+
await logIssuePhaseEvent({
|
|
275
|
+
issueId,
|
|
276
276
|
eventType: 'phase_failed',
|
|
277
277
|
phase: name.replace(/-/g, '_'),
|
|
278
278
|
result: 'error',
|
|
@@ -281,7 +281,7 @@ async (options, config) => {
|
|
|
281
281
|
}, verbose);
|
|
282
282
|
}
|
|
283
283
|
return {
|
|
284
|
-
|
|
284
|
+
issueId,
|
|
285
285
|
phase: name,
|
|
286
286
|
status: result.status === 'success' ? 'success' : 'error',
|
|
287
287
|
message: result.status === 'success'
|
|
@@ -298,7 +298,7 @@ async (options, config) => {
|
|
|
298
298
|
// Run 'on_error' hooks (best effort — never mask the original error)
|
|
299
299
|
try {
|
|
300
300
|
await runHooksForPhase({
|
|
301
|
-
|
|
301
|
+
issueId,
|
|
302
302
|
phase: name,
|
|
303
303
|
hookPoint: 'on_error',
|
|
304
304
|
error: error instanceof Error ? error : new Error(String(error)),
|
|
@@ -311,8 +311,8 @@ async (options, config) => {
|
|
|
311
311
|
// Log phase failure for exceptions
|
|
312
312
|
const phaseEndTime = Date.now();
|
|
313
313
|
const phaseDuration = phaseEndTime - phaseStartTime;
|
|
314
|
-
await
|
|
315
|
-
|
|
314
|
+
await logIssuePhaseEvent({
|
|
315
|
+
issueId,
|
|
316
316
|
eventType: 'phase_failed',
|
|
317
317
|
phase: name.replace(/-/g, '_'),
|
|
318
318
|
result: 'error',
|
|
@@ -323,7 +323,7 @@ async (options, config) => {
|
|
|
323
323
|
errorMessage: error instanceof Error ? error.message : String(error),
|
|
324
324
|
}, verbose);
|
|
325
325
|
return {
|
|
326
|
-
|
|
326
|
+
issueId,
|
|
327
327
|
phase: name,
|
|
328
328
|
status: 'error',
|
|
329
329
|
message: `${name.replace('-', ' ')} failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
@@ -331,6 +331,6 @@ async (options, config) => {
|
|
|
331
331
|
}
|
|
332
332
|
};
|
|
333
333
|
// Create phase runners using the configuration
|
|
334
|
-
const [
|
|
334
|
+
const [runIssueAnalysisPhase, runUserStoriesAnalysisPhase, runTestCasesAnalysisPhase, runTechnicalDesignPhase, runBranchPlanningPhase, runCodeImplementationPhase, runPRSplittingPhase, runPRExecutionPhase, runFunctionalTestingPhase, runCodeTestingPhase, runCodeRefinePhase, runCodeRefineVerificationPhase, runCodeReviewPhase, runAutonomousPhase,] = phaseConfigs.map(createPhaseRunner);
|
|
335
335
|
// Export individual phase runners for granular control
|
|
336
|
-
export { runAutonomousPhase, runBranchPlanningPhase, runCodeImplementationPhase, runCodeRefinePhase, runCodeRefineVerificationPhase, runCodeReviewPhase, runCodeTestingPhase,
|
|
336
|
+
export { runAutonomousPhase, runBranchPlanningPhase, runCodeImplementationPhase, runCodeRefinePhase, runCodeRefineVerificationPhase, runCodeReviewPhase, runCodeTestingPhase, runFunctionalTestingPhase, runIssueAnalysisPhase, runPRExecutionPhase, runPRSplittingPhase, runTechnicalDesignPhase, runTestCasesAnalysisPhase, runUserStoriesAnalysisPhase, };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Issue Coordinator - High-level workflow orchestration
|
|
3
|
+
*
|
|
4
|
+
* Responsibilities:
|
|
5
|
+
* - Fetch issue configuration from API
|
|
6
|
+
* - Execute phases based on workflow field (pending phases in order)
|
|
7
|
+
* - Coordinate issue-level workflow initialization
|
|
8
|
+
* - Handle phase execution results and stop on failure/blocked
|
|
9
|
+
*
|
|
10
|
+
* This is the entry point for issue workflow execution
|
|
11
|
+
*/
|
|
12
|
+
import { type EdsgerConfig } from '../../types/index.js';
|
|
13
|
+
import { type PipelinePhaseOptions, type PipelineResult } from '../../types/pipeline.js';
|
|
14
|
+
/**
|
|
15
|
+
* Run workflow for an issue based on its workflow field
|
|
16
|
+
* Executes all pending phases in order, stopping on failure or blocked
|
|
17
|
+
*/
|
|
18
|
+
export declare function runIssueWorkflow(options: PipelinePhaseOptions, config: EdsgerConfig): Promise<readonly PipelineResult[]>;
|