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
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Issue Coordinator - High-level workflow orchestration
|
|
3
3
|
*
|
|
4
4
|
* Responsibilities:
|
|
5
|
-
* - Fetch
|
|
5
|
+
* - Fetch issue configuration from API
|
|
6
6
|
* - Execute phases based on workflow field (pending phases in order)
|
|
7
|
-
* - Coordinate
|
|
7
|
+
* - Coordinate issue-level workflow initialization
|
|
8
8
|
* - Handle phase execution results and stop on failure/blocked
|
|
9
9
|
*
|
|
10
|
-
* This is the entry point for
|
|
10
|
+
* This is the entry point for issue workflow execution
|
|
11
11
|
*/
|
|
12
|
-
import {
|
|
13
|
-
import { markWorkflowPhaseCompleted } from '../../api/
|
|
12
|
+
import { getIssue } from '../../api/issues/get-issue.js';
|
|
13
|
+
import { markWorkflowPhaseCompleted } from '../../api/issues/update-issue.js';
|
|
14
14
|
import { cacheBindings, clearBindingsCache, fetchHookBindings, } from '../../services/phase-hooks/index.js';
|
|
15
15
|
import { logError, logInfo, logWarning } from '../../utils/logger.js';
|
|
16
16
|
import { logPhaseResult } from '../../utils/pipeline-logger.js';
|
|
17
|
-
import { runAutonomousPhase, runBranchPlanningPhase, runCodeImplementationPhase, runCodeRefinePhase, runCodeReviewPhase,
|
|
17
|
+
import { runAutonomousPhase, runBranchPlanningPhase, runCodeImplementationPhase, runCodeRefinePhase, runCodeReviewPhase, runFunctionalTestingPhase, runIssueAnalysisPhase, runPRExecutionPhase, runPRSplittingPhase, runTechnicalDesignPhase, runTestCasesAnalysisPhase, runUserStoriesAnalysisPhase, } from './executors/phase-executor.js';
|
|
18
18
|
/**
|
|
19
19
|
* Map workflow phase names (underscore format) to phase runner functions
|
|
20
20
|
* Note: code_refine includes built-in verification loop (similar to technical_design)
|
|
21
21
|
*/
|
|
22
22
|
const PHASE_RUNNERS = {
|
|
23
|
-
|
|
23
|
+
issue_analysis: runIssueAnalysisPhase,
|
|
24
24
|
user_stories_analysis: runUserStoriesAnalysisPhase,
|
|
25
25
|
test_cases_analysis: runTestCasesAnalysisPhase,
|
|
26
26
|
technical_design: runTechnicalDesignPhase,
|
|
@@ -47,14 +47,14 @@ function getPendingPhases(workflow) {
|
|
|
47
47
|
* Returns the result and marks workflow phase as completed if successful
|
|
48
48
|
*/
|
|
49
49
|
async function executePhase(phaseName, options, config) {
|
|
50
|
-
const {
|
|
50
|
+
const { issueId, verbose } = options;
|
|
51
51
|
// Normalize phase name: kebab-case → snake_case (e.g., code-implementation → code_implementation)
|
|
52
52
|
const normalizedName = phaseName.replace(/-/g, '_');
|
|
53
53
|
const phaseRunner = PHASE_RUNNERS[normalizedName];
|
|
54
54
|
if (!phaseRunner) {
|
|
55
55
|
logWarning(`Unknown workflow phase: ${phaseName}, skipping`);
|
|
56
56
|
return {
|
|
57
|
-
|
|
57
|
+
issueId,
|
|
58
58
|
phase: phaseName,
|
|
59
59
|
status: 'error',
|
|
60
60
|
message: `Unknown workflow phase: ${phaseName}`,
|
|
@@ -69,28 +69,28 @@ async function executePhase(phaseName, options, config) {
|
|
|
69
69
|
logPhaseResult(result, verbose);
|
|
70
70
|
// Mark workflow phase as completed if successful
|
|
71
71
|
if (result.status === 'success') {
|
|
72
|
-
await markWorkflowPhaseCompleted(
|
|
72
|
+
await markWorkflowPhaseCompleted(issueId, normalizedName, verbose);
|
|
73
73
|
}
|
|
74
74
|
return result;
|
|
75
75
|
}
|
|
76
76
|
/**
|
|
77
|
-
* Run workflow for
|
|
77
|
+
* Run workflow for an issue based on its workflow field
|
|
78
78
|
* Executes all pending phases in order, stopping on failure or blocked
|
|
79
79
|
*/
|
|
80
|
-
export async function
|
|
81
|
-
const {
|
|
80
|
+
export async function runIssueWorkflow(options, config) {
|
|
81
|
+
const { issueId, verbose } = options;
|
|
82
82
|
try {
|
|
83
|
-
// 1. Get
|
|
83
|
+
// 1. Get issue details to check workflow
|
|
84
84
|
if (verbose) {
|
|
85
|
-
logInfo(`🔍 Fetching
|
|
85
|
+
logInfo(`🔍 Fetching issue configuration for: ${issueId}`);
|
|
86
86
|
}
|
|
87
|
-
const
|
|
88
|
-
// Fetch and cache hook bindings for this
|
|
87
|
+
const issue = await getIssue(issueId, verbose);
|
|
88
|
+
// Fetch and cache hook bindings for this issue's product
|
|
89
89
|
try {
|
|
90
|
-
const bindings = await fetchHookBindings(
|
|
91
|
-
cacheBindings(
|
|
90
|
+
const bindings = await fetchHookBindings(issue.product_id, verbose);
|
|
91
|
+
cacheBindings(issueId, issue.product_id, bindings);
|
|
92
92
|
if (verbose && bindings.length > 0) {
|
|
93
|
-
logInfo(`🪝 Loaded ${bindings.length} phase hook binding(s) for product ${
|
|
93
|
+
logInfo(`🪝 Loaded ${bindings.length} phase hook binding(s) for product ${issue.product_id}`);
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
96
|
catch (hookError) {
|
|
@@ -99,18 +99,18 @@ export async function runFeatureWorkflow(options, config) {
|
|
|
99
99
|
}
|
|
100
100
|
// Debug log workflow data
|
|
101
101
|
if (verbose) {
|
|
102
|
-
logInfo(`🔍
|
|
103
|
-
logInfo(` - workflow: ${JSON.stringify(
|
|
102
|
+
logInfo(`🔍 Issue data from API:`);
|
|
103
|
+
logInfo(` - workflow: ${JSON.stringify(issue.workflow, null, 2)}`);
|
|
104
104
|
}
|
|
105
105
|
// 2. Get all pending phases from workflow
|
|
106
|
-
const pendingPhases = getPendingPhases(
|
|
106
|
+
const pendingPhases = getPendingPhases(issue.workflow);
|
|
107
107
|
if (pendingPhases.length === 0) {
|
|
108
108
|
if (verbose) {
|
|
109
109
|
logInfo('No pending phases in workflow, nothing to execute');
|
|
110
110
|
}
|
|
111
111
|
return [
|
|
112
112
|
{
|
|
113
|
-
|
|
113
|
+
issueId,
|
|
114
114
|
phase: 'workflow-initialization',
|
|
115
115
|
status: 'success',
|
|
116
116
|
message: 'No pending phases in workflow, nothing to execute',
|
|
@@ -137,7 +137,7 @@ export async function runFeatureWorkflow(options, config) {
|
|
|
137
137
|
// so we no longer need to create it here after code_implementation succeeds.
|
|
138
138
|
}
|
|
139
139
|
// Clean up hook bindings cache
|
|
140
|
-
clearBindingsCache(
|
|
140
|
+
clearBindingsCache(issueId);
|
|
141
141
|
if (verbose) {
|
|
142
142
|
const successCount = results.filter((r) => r.status === 'success').length;
|
|
143
143
|
logInfo(`\n✅ Workflow execution completed: ${successCount}/${results.length} phases succeeded`);
|
|
@@ -145,13 +145,13 @@ export async function runFeatureWorkflow(options, config) {
|
|
|
145
145
|
return results;
|
|
146
146
|
}
|
|
147
147
|
catch (error) {
|
|
148
|
-
clearBindingsCache(
|
|
148
|
+
clearBindingsCache(issueId);
|
|
149
149
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
150
|
-
logError(`Failed to run
|
|
150
|
+
logError(`Failed to run issue workflow: ${errorMessage}`);
|
|
151
151
|
// Return error result
|
|
152
152
|
return [
|
|
153
153
|
{
|
|
154
|
-
|
|
154
|
+
issueId,
|
|
155
155
|
phase: 'workflow-initialization',
|
|
156
156
|
status: 'error',
|
|
157
157
|
message: `Workflow initialization failed: ${errorMessage}`,
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* - Manage phase result collection and status updates
|
|
9
9
|
*
|
|
10
10
|
* Complete phase flow:
|
|
11
|
-
*
|
|
11
|
+
* issue-analysis → technical-design → code-implementation →
|
|
12
12
|
* functional-testing → code-review → code-refine → code-refine-verification
|
|
13
13
|
*
|
|
14
14
|
* Uses functional programming principles for composability
|
|
@@ -21,6 +21,6 @@ import { type ExecutionMode, type PipelinePhaseOptions, type PipelineResult } fr
|
|
|
21
21
|
*/
|
|
22
22
|
export declare const runPipelineByMode: (options: PipelinePhaseOptions, config: EdsgerConfig, executionMode: ExecutionMode) => Promise<readonly PipelineResult[]>;
|
|
23
23
|
/**
|
|
24
|
-
* Run complete pipeline for
|
|
24
|
+
* Run complete pipeline for an issue using functional composition (legacy)
|
|
25
25
|
*/
|
|
26
26
|
export declare const runCompletePipeline: (options: PipelinePhaseOptions, config: EdsgerConfig) => () => Promise<readonly PipelineResult[]>;
|
|
@@ -9,18 +9,18 @@
|
|
|
9
9
|
* - Manage phase result collection and status updates
|
|
10
10
|
*
|
|
11
11
|
* Complete phase flow:
|
|
12
|
-
*
|
|
12
|
+
* issue-analysis → technical-design → code-implementation →
|
|
13
13
|
* functional-testing → code-review → code-refine → code-refine-verification
|
|
14
14
|
*
|
|
15
15
|
* Uses functional programming principles for composability
|
|
16
16
|
*/
|
|
17
|
-
import { markWorkflowPhaseCompleted,
|
|
17
|
+
import { markWorkflowPhaseCompleted, updateIssueStatusForPhase, } from '../../api/issues/index.js';
|
|
18
18
|
import { handleCodeRefineWithRetry } from '../../phases/code-refine/retry-handler.js';
|
|
19
19
|
import { handleTestFailuresWithRetry } from '../../phases/functional-testing/test-retry-handler.js';
|
|
20
20
|
import { handlePullRequestCreation } from '../../phases/pull-request/handler.js';
|
|
21
21
|
import { logInfo } from '../../utils/logger.js';
|
|
22
22
|
import { logPhaseResult, logPipelineComplete, logPipelineStart, shouldContinuePipeline, } from '../../utils/pipeline-logger.js';
|
|
23
|
-
import { runCodeImplementationPhase, runCodeReviewPhase, runCodeTestingPhase,
|
|
23
|
+
import { runCodeImplementationPhase, runCodeReviewPhase, runCodeTestingPhase, runFunctionalTestingPhase, runIssueAnalysisPhase, runPRExecutionPhase, runPRSplittingPhase, runTechnicalDesignPhase, runTestCasesAnalysisPhase, runUserStoriesAnalysisPhase, } from './executors/phase-executor.js';
|
|
24
24
|
/**
|
|
25
25
|
* Helper to log phase result and mark workflow phase as completed if successful
|
|
26
26
|
*/
|
|
@@ -28,7 +28,7 @@ const logAndMarkPhaseCompleted = async (result, verbose) => {
|
|
|
28
28
|
const logged = logPhaseResult(result, verbose);
|
|
29
29
|
// Mark workflow phase as completed if phase succeeded
|
|
30
30
|
if (result.status === 'success') {
|
|
31
|
-
await markWorkflowPhaseCompleted(result.
|
|
31
|
+
await markWorkflowPhaseCompleted(result.issueId, result.phase, verbose);
|
|
32
32
|
}
|
|
33
33
|
return logged;
|
|
34
34
|
};
|
|
@@ -38,28 +38,28 @@ const logAndMarkPhaseCompleted = async (result, verbose) => {
|
|
|
38
38
|
*/
|
|
39
39
|
// eslint-disable-next-line complexity
|
|
40
40
|
export const runPipelineByMode = async (options, config, executionMode) => {
|
|
41
|
-
const {
|
|
41
|
+
const { issueId, verbose } = options;
|
|
42
42
|
if (verbose) {
|
|
43
|
-
logInfo(`🚀 Starting pipeline with mode: ${executionMode} for
|
|
43
|
+
logInfo(`🚀 Starting pipeline with mode: ${executionMode} for issue: ${issueId}`);
|
|
44
44
|
logInfo(`📋 Execution mode details:`);
|
|
45
45
|
logInfo(` - Mode value: "${executionMode}"`);
|
|
46
46
|
logInfo(` - Mode type: ${typeof executionMode}`);
|
|
47
|
-
logInfo(` - Mode === '
|
|
47
|
+
logInfo(` - Mode === 'only_issue_analysis': ${executionMode === 'only_issue_analysis'}`);
|
|
48
48
|
}
|
|
49
49
|
switch (executionMode) {
|
|
50
50
|
// Complete pipeline
|
|
51
51
|
case 'full_pipeline':
|
|
52
|
-
case '
|
|
52
|
+
case 'from_issue_analysis':
|
|
53
53
|
if (verbose) {
|
|
54
|
-
logInfo(` ➡️ Matched: full_pipeline or
|
|
54
|
+
logInfo(` ➡️ Matched: full_pipeline or from_issue_analysis - running complete pipeline`);
|
|
55
55
|
}
|
|
56
|
-
return await
|
|
57
|
-
//
|
|
58
|
-
case '
|
|
56
|
+
return await runFromIssueAnalysis(options, config);
|
|
57
|
+
// Issue Analysis (legacy - generates both user stories and test cases)
|
|
58
|
+
case 'only_issue_analysis':
|
|
59
59
|
if (verbose) {
|
|
60
|
-
logInfo(` ➡️ Matched:
|
|
60
|
+
logInfo(` ➡️ Matched: only_issue_analysis - running analysis only`);
|
|
61
61
|
}
|
|
62
|
-
return await
|
|
62
|
+
return await runOnlyIssueAnalysis(options, config);
|
|
63
63
|
// User Stories Analysis
|
|
64
64
|
case 'only_user_stories_analysis':
|
|
65
65
|
return await runOnlyUserStoriesAnalysis(options, config);
|
|
@@ -113,37 +113,37 @@ export const runPipelineByMode = async (options, config, executionMode) => {
|
|
|
113
113
|
}
|
|
114
114
|
};
|
|
115
115
|
/**
|
|
116
|
-
* Run complete pipeline for
|
|
116
|
+
* Run complete pipeline for an issue using functional composition (legacy)
|
|
117
117
|
*/
|
|
118
118
|
export const runCompletePipeline = (options, config) => {
|
|
119
119
|
return async () => {
|
|
120
|
-
return await
|
|
120
|
+
return await runFromIssueAnalysis(options, config);
|
|
121
121
|
};
|
|
122
122
|
};
|
|
123
123
|
// Helper functions for different execution patterns
|
|
124
124
|
/**
|
|
125
|
-
* Finalize pipeline execution by updating
|
|
125
|
+
* Finalize pipeline execution by updating issue status to ready_for_review if all phases succeeded
|
|
126
126
|
*/
|
|
127
127
|
const finalizePipelineExecution = async (options, results, verbose) => {
|
|
128
128
|
// Check if all phases succeeded
|
|
129
129
|
const allSucceeded = results.every((result) => result.status === 'success');
|
|
130
130
|
if (allSucceeded && results.length > 0) {
|
|
131
131
|
// Update status to ready_for_review
|
|
132
|
-
await
|
|
132
|
+
await updateIssueStatusForPhase(options.issueId, 'ready-for-review', verbose);
|
|
133
133
|
if (verbose) {
|
|
134
|
-
logInfo('✅ Pipeline execution completed -
|
|
134
|
+
logInfo('✅ Pipeline execution completed - issue is ready for review');
|
|
135
135
|
}
|
|
136
136
|
}
|
|
137
137
|
return logPipelineComplete(results, verbose);
|
|
138
138
|
};
|
|
139
139
|
/**
|
|
140
|
-
* Run only
|
|
140
|
+
* Run only issue analysis phase
|
|
141
141
|
*/
|
|
142
|
-
const
|
|
143
|
-
const {
|
|
144
|
-
logPipelineStart(
|
|
142
|
+
const runOnlyIssueAnalysis = async (options, config) => {
|
|
143
|
+
const { issueId, verbose } = options;
|
|
144
|
+
logPipelineStart(issueId, verbose);
|
|
145
145
|
const results = [];
|
|
146
|
-
const analysisResult = await
|
|
146
|
+
const analysisResult = await runIssueAnalysisPhase(options, config);
|
|
147
147
|
results.push(await logAndMarkPhaseCompleted(analysisResult, verbose));
|
|
148
148
|
return finalizePipelineExecution(options, results, verbose);
|
|
149
149
|
};
|
|
@@ -151,8 +151,8 @@ const runOnlyFeatureAnalysis = async (options, config) => {
|
|
|
151
151
|
* Run only user stories analysis phase
|
|
152
152
|
*/
|
|
153
153
|
const runOnlyUserStoriesAnalysis = async (options, config) => {
|
|
154
|
-
const {
|
|
155
|
-
logPipelineStart(
|
|
154
|
+
const { issueId, verbose } = options;
|
|
155
|
+
logPipelineStart(issueId, verbose);
|
|
156
156
|
const results = [];
|
|
157
157
|
const analysisResult = await runUserStoriesAnalysisPhase(options, config);
|
|
158
158
|
results.push(await logAndMarkPhaseCompleted(analysisResult, verbose));
|
|
@@ -162,8 +162,8 @@ const runOnlyUserStoriesAnalysis = async (options, config) => {
|
|
|
162
162
|
* Run only test cases analysis phase
|
|
163
163
|
*/
|
|
164
164
|
const runOnlyTestCasesAnalysis = async (options, config) => {
|
|
165
|
-
const {
|
|
166
|
-
logPipelineStart(
|
|
165
|
+
const { issueId, verbose } = options;
|
|
166
|
+
logPipelineStart(issueId, verbose);
|
|
167
167
|
const results = [];
|
|
168
168
|
const analysisResult = await runTestCasesAnalysisPhase(options, config);
|
|
169
169
|
results.push(await logAndMarkPhaseCompleted(analysisResult, verbose));
|
|
@@ -174,8 +174,8 @@ const runOnlyTestCasesAnalysis = async (options, config) => {
|
|
|
174
174
|
* Flow: user-stories-analysis → test-cases-analysis → technical-design → code-implementation → ...
|
|
175
175
|
*/
|
|
176
176
|
const runFromUserStoriesAnalysis = async (options, config) => {
|
|
177
|
-
const {
|
|
178
|
-
logPipelineStart(
|
|
177
|
+
const { issueId, verbose } = options;
|
|
178
|
+
logPipelineStart(issueId, verbose);
|
|
179
179
|
const results = [];
|
|
180
180
|
// 1. User Stories Analysis
|
|
181
181
|
const userStoriesResult = await runUserStoriesAnalysisPhase(options, config);
|
|
@@ -209,10 +209,10 @@ const runFromUserStoriesAnalysis = async (options, config) => {
|
|
|
209
209
|
verbose,
|
|
210
210
|
});
|
|
211
211
|
const finalStatus = testingResult.status === 'success' ? 'testing_passed' : 'testing_failed';
|
|
212
|
-
await
|
|
212
|
+
await updateIssueStatusForPhase(issueId, finalStatus === 'testing_passed' ? 'testing-passed' : 'testing-failed', verbose);
|
|
213
213
|
if (testingResult.status === 'success') {
|
|
214
214
|
const prCreated = await handlePullRequestCreation({
|
|
215
|
-
|
|
215
|
+
issueId,
|
|
216
216
|
results,
|
|
217
217
|
testingResult,
|
|
218
218
|
verbose,
|
|
@@ -231,8 +231,8 @@ const runFromUserStoriesAnalysis = async (options, config) => {
|
|
|
231
231
|
* Flow: test-cases-analysis → technical-design → code-implementation → ...
|
|
232
232
|
*/
|
|
233
233
|
const runFromTestCasesAnalysis = async (options, config) => {
|
|
234
|
-
const {
|
|
235
|
-
logPipelineStart(
|
|
234
|
+
const { issueId, verbose } = options;
|
|
235
|
+
logPipelineStart(issueId, verbose);
|
|
236
236
|
const results = [];
|
|
237
237
|
// 1. Test Cases Analysis
|
|
238
238
|
const testCasesResult = await runTestCasesAnalysisPhase(options, config);
|
|
@@ -260,10 +260,10 @@ const runFromTestCasesAnalysis = async (options, config) => {
|
|
|
260
260
|
verbose,
|
|
261
261
|
});
|
|
262
262
|
const finalStatus = testingResult.status === 'success' ? 'testing_passed' : 'testing_failed';
|
|
263
|
-
await
|
|
263
|
+
await updateIssueStatusForPhase(issueId, finalStatus === 'testing_passed' ? 'testing-passed' : 'testing-failed', verbose);
|
|
264
264
|
if (testingResult.status === 'success') {
|
|
265
265
|
const prCreated = await handlePullRequestCreation({
|
|
266
|
-
|
|
266
|
+
issueId,
|
|
267
267
|
results,
|
|
268
268
|
testingResult,
|
|
269
269
|
verbose,
|
|
@@ -281,8 +281,8 @@ const runFromTestCasesAnalysis = async (options, config) => {
|
|
|
281
281
|
* Run only technical design phase
|
|
282
282
|
*/
|
|
283
283
|
const runOnlyTechnicalDesign = async (options, config) => {
|
|
284
|
-
const {
|
|
285
|
-
logPipelineStart(
|
|
284
|
+
const { issueId, verbose } = options;
|
|
285
|
+
logPipelineStart(issueId, verbose);
|
|
286
286
|
const results = [];
|
|
287
287
|
const designResult = await runTechnicalDesignPhase(options, config);
|
|
288
288
|
results.push(await logAndMarkPhaseCompleted(designResult, verbose));
|
|
@@ -293,8 +293,8 @@ const runOnlyTechnicalDesign = async (options, config) => {
|
|
|
293
293
|
* After successful implementation, creates a pull request so the code can be reviewed
|
|
294
294
|
*/
|
|
295
295
|
const runOnlyCodeImplementation = async (options, config) => {
|
|
296
|
-
const {
|
|
297
|
-
logPipelineStart(
|
|
296
|
+
const { issueId, verbose } = options;
|
|
297
|
+
logPipelineStart(issueId, verbose);
|
|
298
298
|
const results = [];
|
|
299
299
|
const implementationResult = await runCodeImplementationPhase(options, config);
|
|
300
300
|
results.push(await logAndMarkPhaseCompleted(implementationResult, verbose));
|
|
@@ -304,14 +304,14 @@ const runOnlyCodeImplementation = async (options, config) => {
|
|
|
304
304
|
logInfo('\n📝 Creating pull request for implemented code...');
|
|
305
305
|
}
|
|
306
306
|
const prCreated = await handlePullRequestCreation({
|
|
307
|
-
|
|
307
|
+
issueId,
|
|
308
308
|
results,
|
|
309
309
|
// No testingResult - functional testing was skipped
|
|
310
310
|
verbose,
|
|
311
311
|
});
|
|
312
312
|
// Add PR creation result to results array
|
|
313
313
|
const prResult = {
|
|
314
|
-
|
|
314
|
+
issueId,
|
|
315
315
|
phase: 'pull-request',
|
|
316
316
|
status: prCreated ? 'success' : 'error',
|
|
317
317
|
message: prCreated
|
|
@@ -327,8 +327,8 @@ const runOnlyCodeImplementation = async (options, config) => {
|
|
|
327
327
|
* Run only PR splitting phase
|
|
328
328
|
*/
|
|
329
329
|
const runOnlyPRSplitting = async (options, config) => {
|
|
330
|
-
const {
|
|
331
|
-
logPipelineStart(
|
|
330
|
+
const { issueId, verbose } = options;
|
|
331
|
+
logPipelineStart(issueId, verbose);
|
|
332
332
|
const results = [];
|
|
333
333
|
const prSplittingResult = await runPRSplittingPhase(options, config);
|
|
334
334
|
results.push(await logAndMarkPhaseCompleted(prSplittingResult, verbose));
|
|
@@ -339,8 +339,8 @@ const runOnlyPRSplitting = async (options, config) => {
|
|
|
339
339
|
* Flow: pr-splitting → (human review) → pr-execution → testing → ...
|
|
340
340
|
*/
|
|
341
341
|
const runFromPRSplitting = async (options, config) => {
|
|
342
|
-
const {
|
|
343
|
-
logPipelineStart(
|
|
342
|
+
const { issueId, verbose } = options;
|
|
343
|
+
logPipelineStart(issueId, verbose);
|
|
344
344
|
const results = [];
|
|
345
345
|
// 1. PR Splitting (planning only)
|
|
346
346
|
const prSplittingResult = await runPRSplittingPhase(options, config);
|
|
@@ -362,10 +362,10 @@ const runFromPRSplitting = async (options, config) => {
|
|
|
362
362
|
verbose,
|
|
363
363
|
});
|
|
364
364
|
const finalStatus = testingResult.status === 'success' ? 'testing_passed' : 'testing_failed';
|
|
365
|
-
await
|
|
365
|
+
await updateIssueStatusForPhase(issueId, finalStatus === 'testing_passed' ? 'testing-passed' : 'testing-failed', verbose);
|
|
366
366
|
if (testingResult.status === 'success') {
|
|
367
367
|
const prCreated = await handlePullRequestCreation({
|
|
368
|
-
|
|
368
|
+
issueId,
|
|
369
369
|
results,
|
|
370
370
|
testingResult,
|
|
371
371
|
verbose,
|
|
@@ -383,8 +383,8 @@ const runFromPRSplitting = async (options, config) => {
|
|
|
383
383
|
* Run only PR execution phase
|
|
384
384
|
*/
|
|
385
385
|
const runOnlyPRExecution = async (options, config) => {
|
|
386
|
-
const {
|
|
387
|
-
logPipelineStart(
|
|
386
|
+
const { issueId, verbose } = options;
|
|
387
|
+
logPipelineStart(issueId, verbose);
|
|
388
388
|
const results = [];
|
|
389
389
|
const prExecutionResult = await runPRExecutionPhase(options, config);
|
|
390
390
|
results.push(await logAndMarkPhaseCompleted(prExecutionResult, verbose));
|
|
@@ -395,8 +395,8 @@ const runOnlyPRExecution = async (options, config) => {
|
|
|
395
395
|
* Flow: pr-execution → testing → code-review → code-refine
|
|
396
396
|
*/
|
|
397
397
|
const runFromPRExecution = async (options, config) => {
|
|
398
|
-
const {
|
|
399
|
-
logPipelineStart(
|
|
398
|
+
const { issueId, verbose } = options;
|
|
399
|
+
logPipelineStart(issueId, verbose);
|
|
400
400
|
const results = [];
|
|
401
401
|
// 1. PR Execution
|
|
402
402
|
const prExecutionResult = await runPRExecutionPhase(options, config);
|
|
@@ -412,10 +412,10 @@ const runFromPRExecution = async (options, config) => {
|
|
|
412
412
|
verbose,
|
|
413
413
|
});
|
|
414
414
|
const finalStatus = testingResult.status === 'success' ? 'testing_passed' : 'testing_failed';
|
|
415
|
-
await
|
|
415
|
+
await updateIssueStatusForPhase(issueId, finalStatus === 'testing_passed' ? 'testing-passed' : 'testing-failed', verbose);
|
|
416
416
|
if (testingResult.status === 'success') {
|
|
417
417
|
const prCreated = await handlePullRequestCreation({
|
|
418
|
-
|
|
418
|
+
issueId,
|
|
419
419
|
results,
|
|
420
420
|
testingResult,
|
|
421
421
|
verbose,
|
|
@@ -433,22 +433,22 @@ const runFromPRExecution = async (options, config) => {
|
|
|
433
433
|
* Run only functional testing phase
|
|
434
434
|
*/
|
|
435
435
|
const runOnlyFunctionalTesting = async (options, config) => {
|
|
436
|
-
const {
|
|
437
|
-
logPipelineStart(
|
|
436
|
+
const { issueId, verbose } = options;
|
|
437
|
+
logPipelineStart(issueId, verbose);
|
|
438
438
|
const results = [];
|
|
439
439
|
const testingResult = await runFunctionalTestingPhase(options, config);
|
|
440
440
|
results.push(await logAndMarkPhaseCompleted(testingResult, verbose));
|
|
441
441
|
return finalizePipelineExecution(options, results, verbose);
|
|
442
442
|
};
|
|
443
443
|
/**
|
|
444
|
-
* Run from
|
|
444
|
+
* Run from issue analysis to end
|
|
445
445
|
*/
|
|
446
|
-
const
|
|
447
|
-
const {
|
|
448
|
-
logPipelineStart(
|
|
446
|
+
const runFromIssueAnalysis = async (options, config) => {
|
|
447
|
+
const { issueId, verbose } = options;
|
|
448
|
+
logPipelineStart(issueId, verbose);
|
|
449
449
|
const results = [];
|
|
450
|
-
// 1.
|
|
451
|
-
const analysisResult = await
|
|
450
|
+
// 1. Issue Analysis
|
|
451
|
+
const analysisResult = await runIssueAnalysisPhase(options, config);
|
|
452
452
|
results.push(await logAndMarkPhaseCompleted(analysisResult, verbose));
|
|
453
453
|
if (!shouldContinuePipeline(results)) {
|
|
454
454
|
return finalizePipelineExecution(options, results, verbose);
|
|
@@ -474,11 +474,11 @@ const runFromFeatureAnalysis = async (options, config) => {
|
|
|
474
474
|
});
|
|
475
475
|
// Update final status based on functional testing result
|
|
476
476
|
const finalStatus = testingResult.status === 'success' ? 'testing_passed' : 'testing_failed';
|
|
477
|
-
await
|
|
477
|
+
await updateIssueStatusForPhase(issueId, finalStatus === 'testing_passed' ? 'testing-passed' : 'testing-failed', verbose);
|
|
478
478
|
// Create pull request if tests passed
|
|
479
479
|
if (testingResult.status === 'success') {
|
|
480
480
|
const prCreated = await handlePullRequestCreation({
|
|
481
|
-
|
|
481
|
+
issueId,
|
|
482
482
|
results,
|
|
483
483
|
testingResult,
|
|
484
484
|
verbose,
|
|
@@ -497,8 +497,8 @@ const runFromFeatureAnalysis = async (options, config) => {
|
|
|
497
497
|
* Run from technical design to end
|
|
498
498
|
*/
|
|
499
499
|
const runFromTechnicalDesign = async (options, config) => {
|
|
500
|
-
const {
|
|
501
|
-
logPipelineStart(
|
|
500
|
+
const { issueId, verbose } = options;
|
|
501
|
+
logPipelineStart(issueId, verbose);
|
|
502
502
|
const results = [];
|
|
503
503
|
// 1. Technical Design
|
|
504
504
|
const designResult = await runTechnicalDesignPhase(options, config);
|
|
@@ -521,11 +521,11 @@ const runFromTechnicalDesign = async (options, config) => {
|
|
|
521
521
|
});
|
|
522
522
|
// Update final status based on functional testing result
|
|
523
523
|
const finalStatus = testingResult.status === 'success' ? 'testing_passed' : 'testing_failed';
|
|
524
|
-
await
|
|
524
|
+
await updateIssueStatusForPhase(issueId, finalStatus === 'testing_passed' ? 'testing-passed' : 'testing-failed', verbose);
|
|
525
525
|
// Create pull request if tests passed
|
|
526
526
|
if (testingResult.status === 'success') {
|
|
527
527
|
const prCreated = await handlePullRequestCreation({
|
|
528
|
-
|
|
528
|
+
issueId,
|
|
529
529
|
results,
|
|
530
530
|
testingResult,
|
|
531
531
|
verbose,
|
|
@@ -544,8 +544,8 @@ const runFromTechnicalDesign = async (options, config) => {
|
|
|
544
544
|
* Run from code implementation to end
|
|
545
545
|
*/
|
|
546
546
|
const runFromCodeImplementation = async (options, config) => {
|
|
547
|
-
const {
|
|
548
|
-
logPipelineStart(
|
|
547
|
+
const { issueId, verbose } = options;
|
|
548
|
+
logPipelineStart(issueId, verbose);
|
|
549
549
|
const results = [];
|
|
550
550
|
// 1. Code Implementation
|
|
551
551
|
const implementationResult = await runCodeImplementationPhase(options, config);
|
|
@@ -562,11 +562,11 @@ const runFromCodeImplementation = async (options, config) => {
|
|
|
562
562
|
});
|
|
563
563
|
// Update final status based on functional testing result
|
|
564
564
|
const finalStatus = testingResult.status === 'success' ? 'testing_passed' : 'testing_failed';
|
|
565
|
-
await
|
|
565
|
+
await updateIssueStatusForPhase(issueId, finalStatus === 'testing_passed' ? 'testing-passed' : 'testing-failed', verbose);
|
|
566
566
|
// Create pull request if tests passed
|
|
567
567
|
if (testingResult.status === 'success') {
|
|
568
568
|
const prCreated = await handlePullRequestCreation({
|
|
569
|
-
|
|
569
|
+
issueId,
|
|
570
570
|
results,
|
|
571
571
|
testingResult,
|
|
572
572
|
verbose,
|
|
@@ -585,8 +585,8 @@ const runFromCodeImplementation = async (options, config) => {
|
|
|
585
585
|
* Run from functional testing to end
|
|
586
586
|
*/
|
|
587
587
|
const runFromFunctionalTesting = async (options, config) => {
|
|
588
|
-
const {
|
|
589
|
-
logPipelineStart(
|
|
588
|
+
const { issueId, verbose } = options;
|
|
589
|
+
logPipelineStart(issueId, verbose);
|
|
590
590
|
const results = [];
|
|
591
591
|
// 1. Functional Testing with retry loop for bug fixes
|
|
592
592
|
const testingResult = await handleTestFailuresWithRetry({
|
|
@@ -597,11 +597,11 @@ const runFromFunctionalTesting = async (options, config) => {
|
|
|
597
597
|
});
|
|
598
598
|
// Update final status based on functional testing result
|
|
599
599
|
const finalStatus = testingResult.status === 'success' ? 'testing_passed' : 'testing_failed';
|
|
600
|
-
await
|
|
600
|
+
await updateIssueStatusForPhase(issueId, finalStatus === 'testing_passed' ? 'testing-passed' : 'testing-failed', verbose);
|
|
601
601
|
// Create pull request if tests passed
|
|
602
602
|
if (testingResult.status === 'success') {
|
|
603
603
|
const prCreated = await handlePullRequestCreation({
|
|
604
|
-
|
|
604
|
+
issueId,
|
|
605
605
|
results,
|
|
606
606
|
testingResult,
|
|
607
607
|
verbose,
|
|
@@ -621,8 +621,8 @@ const runFromFunctionalTesting = async (options, config) => {
|
|
|
621
621
|
* Includes automatic retry loop for verification failures
|
|
622
622
|
*/
|
|
623
623
|
const runOnlyCodeRefine = async (options, config) => {
|
|
624
|
-
const {
|
|
625
|
-
logPipelineStart(
|
|
624
|
+
const { issueId, verbose } = options;
|
|
625
|
+
logPipelineStart(issueId, verbose);
|
|
626
626
|
const results = [];
|
|
627
627
|
// Code Refine with automatic retry for verification failures
|
|
628
628
|
await handleCodeRefineWithRetry({
|
|
@@ -637,8 +637,8 @@ const runOnlyCodeRefine = async (options, config) => {
|
|
|
637
637
|
* Run only code review phase (review PR and create review comments)
|
|
638
638
|
*/
|
|
639
639
|
const runOnlyCodeReview = async (options, config) => {
|
|
640
|
-
const {
|
|
641
|
-
logPipelineStart(
|
|
640
|
+
const { issueId, verbose } = options;
|
|
641
|
+
logPipelineStart(issueId, verbose);
|
|
642
642
|
const results = [];
|
|
643
643
|
// Code Review - analyze PR and create review comments
|
|
644
644
|
const reviewResult = await runCodeReviewPhase(options, config);
|
|
@@ -649,8 +649,8 @@ const runOnlyCodeReview = async (options, config) => {
|
|
|
649
649
|
* Run from code review to end (code-review → code-refine → code-refine-verification)
|
|
650
650
|
*/
|
|
651
651
|
const runFromCodeReview = async (options, config) => {
|
|
652
|
-
const {
|
|
653
|
-
logPipelineStart(
|
|
652
|
+
const { issueId, verbose } = options;
|
|
653
|
+
logPipelineStart(issueId, verbose);
|
|
654
654
|
const results = [];
|
|
655
655
|
// 1. Code Review - analyze PR and create review comments
|
|
656
656
|
const reviewResult = await runCodeReviewPhase(options, config);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Main workflow processor for continuous
|
|
3
|
-
* Monitors for ready_for_ai
|
|
2
|
+
* Main workflow processor for continuous issue development
|
|
3
|
+
* Monitors for ready_for_ai issues and processes them through the complete pipeline
|
|
4
4
|
* Uses functional programming principles
|
|
5
5
|
*/
|
|
6
6
|
import { type EdsgerConfig } from '../../types/index.js';
|
|
@@ -20,7 +20,7 @@ export declare class WorkflowProcessor {
|
|
|
20
20
|
private readonly options;
|
|
21
21
|
private readonly config;
|
|
22
22
|
private isRunning;
|
|
23
|
-
private
|
|
23
|
+
private processedIssues;
|
|
24
24
|
private pollTimer?;
|
|
25
25
|
constructor(options: WorkflowOptions, config: EdsgerConfig);
|
|
26
26
|
/**
|
|
@@ -32,14 +32,14 @@ export declare class WorkflowProcessor {
|
|
|
32
32
|
*/
|
|
33
33
|
stop(): void;
|
|
34
34
|
/**
|
|
35
|
-
* Process the next available
|
|
35
|
+
* Process the next available issue using atomic claim mechanism
|
|
36
36
|
* Uses database-level locking to prevent race conditions between workers
|
|
37
37
|
*/
|
|
38
|
-
private
|
|
38
|
+
private processNextIssue;
|
|
39
39
|
/**
|
|
40
|
-
* Process a single
|
|
40
|
+
* Process a single issue through the complete pipeline using functional composition
|
|
41
41
|
*/
|
|
42
|
-
private
|
|
42
|
+
private processIssue;
|
|
43
43
|
/**
|
|
44
44
|
* Get current processing statistics using pure function
|
|
45
45
|
*/
|