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
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { type PipelinePhaseOptions } from '../types/pipeline.js';
|
|
6
6
|
export interface Branch {
|
|
7
7
|
id: string;
|
|
8
|
-
|
|
8
|
+
issue_id: string;
|
|
9
9
|
name: string;
|
|
10
10
|
description: string | null;
|
|
11
11
|
branch_name: string | null;
|
|
@@ -24,11 +24,11 @@ export interface CreateBranchInput {
|
|
|
24
24
|
status?: Branch['status'];
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
|
-
* List all branches for
|
|
27
|
+
* List all branches for an issue
|
|
28
28
|
*/
|
|
29
29
|
export declare function getBranches(options: PipelinePhaseOptions): Promise<Branch[]>;
|
|
30
30
|
/**
|
|
31
|
-
* Get the current active branch for
|
|
31
|
+
* Get the current active branch for an issue
|
|
32
32
|
*/
|
|
33
33
|
export declare function getCurrentBranch(options: PipelinePhaseOptions): Promise<Branch | null>;
|
|
34
34
|
/**
|
|
@@ -38,9 +38,9 @@ export declare function createBranches(options: PipelinePhaseOptions, branches:
|
|
|
38
38
|
/**
|
|
39
39
|
* Update a branch
|
|
40
40
|
*/
|
|
41
|
-
export declare function updateBranch(branchId: string, updates: Partial<Omit<Branch, 'id' | '
|
|
41
|
+
export declare function updateBranch(branchId: string, updates: Partial<Omit<Branch, 'id' | 'issue_id' | 'created_at' | 'updated_at'>>, verbose?: boolean): Promise<Branch>;
|
|
42
42
|
/**
|
|
43
|
-
* Clear all branches for
|
|
43
|
+
* Clear all branches for an issue (used before re-planning)
|
|
44
44
|
*/
|
|
45
45
|
export declare function clearBranches(options: PipelinePhaseOptions, force?: boolean): Promise<number>;
|
|
46
46
|
/**
|
|
@@ -48,7 +48,7 @@ export declare function clearBranches(options: PipelinePhaseOptions, force?: boo
|
|
|
48
48
|
*/
|
|
49
49
|
export declare function formatBranchesForContext(branches: Branch[]): string;
|
|
50
50
|
/**
|
|
51
|
-
* Check if
|
|
51
|
+
* Check if issue has multiple branches planned
|
|
52
52
|
*/
|
|
53
53
|
export declare function hasMultipleBranches(options: PipelinePhaseOptions): Promise<boolean>;
|
|
54
54
|
/**
|
|
@@ -5,15 +5,15 @@
|
|
|
5
5
|
import { callMcpEndpoint } from '../api/mcp-client.js';
|
|
6
6
|
import { logDebug, logInfo, logSuccess } from '../utils/logger.js';
|
|
7
7
|
/**
|
|
8
|
-
* List all branches for
|
|
8
|
+
* List all branches for an issue
|
|
9
9
|
*/
|
|
10
10
|
export async function getBranches(options) {
|
|
11
|
-
const {
|
|
11
|
+
const { issueId, verbose } = options;
|
|
12
12
|
if (verbose) {
|
|
13
|
-
logInfo(`Fetching branches for
|
|
13
|
+
logInfo(`Fetching branches for issue: ${issueId}`);
|
|
14
14
|
}
|
|
15
15
|
const result = (await callMcpEndpoint('branches/list', {
|
|
16
|
-
|
|
16
|
+
issue_id: issueId,
|
|
17
17
|
}));
|
|
18
18
|
const branches = result?.branches || [];
|
|
19
19
|
if (verbose) {
|
|
@@ -22,15 +22,15 @@ export async function getBranches(options) {
|
|
|
22
22
|
return branches;
|
|
23
23
|
}
|
|
24
24
|
/**
|
|
25
|
-
* Get the current active branch for
|
|
25
|
+
* Get the current active branch for an issue
|
|
26
26
|
*/
|
|
27
27
|
export async function getCurrentBranch(options) {
|
|
28
|
-
const {
|
|
28
|
+
const { issueId, verbose } = options;
|
|
29
29
|
if (verbose) {
|
|
30
|
-
logInfo(`Getting current branch for
|
|
30
|
+
logInfo(`Getting current branch for issue: ${issueId}`);
|
|
31
31
|
}
|
|
32
32
|
const result = (await callMcpEndpoint('branches/current', {
|
|
33
|
-
|
|
33
|
+
issue_id: issueId,
|
|
34
34
|
}));
|
|
35
35
|
return result?.current_branch || null;
|
|
36
36
|
}
|
|
@@ -38,12 +38,12 @@ export async function getCurrentBranch(options) {
|
|
|
38
38
|
* Create branches
|
|
39
39
|
*/
|
|
40
40
|
export async function createBranches(options, branches) {
|
|
41
|
-
const {
|
|
41
|
+
const { issueId, verbose } = options;
|
|
42
42
|
if (verbose) {
|
|
43
|
-
logInfo(`Creating ${branches.length} branches for
|
|
43
|
+
logInfo(`Creating ${branches.length} branches for issue: ${issueId}`);
|
|
44
44
|
}
|
|
45
45
|
const result = (await callMcpEndpoint('branches/create', {
|
|
46
|
-
|
|
46
|
+
issue_id: issueId,
|
|
47
47
|
branches,
|
|
48
48
|
}));
|
|
49
49
|
const createdBranches = result?.created_branches || [];
|
|
@@ -72,15 +72,15 @@ export async function updateBranch(branchId, updates, verbose) {
|
|
|
72
72
|
return result?.branch;
|
|
73
73
|
}
|
|
74
74
|
/**
|
|
75
|
-
* Clear all branches for
|
|
75
|
+
* Clear all branches for an issue (used before re-planning)
|
|
76
76
|
*/
|
|
77
77
|
export async function clearBranches(options, force = false) {
|
|
78
|
-
const {
|
|
78
|
+
const { issueId, verbose } = options;
|
|
79
79
|
if (verbose) {
|
|
80
|
-
logInfo(`Clearing branches for
|
|
80
|
+
logInfo(`Clearing branches for issue: ${issueId}`);
|
|
81
81
|
}
|
|
82
82
|
const result = (await callMcpEndpoint('branches/clear', {
|
|
83
|
-
|
|
83
|
+
issue_id: issueId,
|
|
84
84
|
force,
|
|
85
85
|
}));
|
|
86
86
|
const deletedCount = result?.deleted_count || 0;
|
|
@@ -137,7 +137,7 @@ In Progress: ${branches.filter((b) => b.status === 'in_progress').length}
|
|
|
137
137
|
Pending: ${branches.filter((b) => b.status === 'pending').length}`;
|
|
138
138
|
}
|
|
139
139
|
/**
|
|
140
|
-
* Check if
|
|
140
|
+
* Check if issue has multiple branches planned
|
|
141
141
|
*/
|
|
142
142
|
export async function hasMultipleBranches(options) {
|
|
143
143
|
const branches = await getBranches(options);
|
|
@@ -15,7 +15,7 @@ export interface ChecklistItem {
|
|
|
15
15
|
export interface Checklist {
|
|
16
16
|
id: string;
|
|
17
17
|
product_id: string;
|
|
18
|
-
|
|
18
|
+
issue_id: string | null;
|
|
19
19
|
name: string;
|
|
20
20
|
description: string | null;
|
|
21
21
|
role: string;
|
|
@@ -36,12 +36,12 @@ export interface ChecklistValidation {
|
|
|
36
36
|
}
|
|
37
37
|
export interface ChecklistPhaseContext {
|
|
38
38
|
phase: string;
|
|
39
|
-
|
|
39
|
+
issue_id: string;
|
|
40
40
|
checklists: Checklist[];
|
|
41
41
|
}
|
|
42
42
|
export interface ChecklistValidationResult {
|
|
43
43
|
phase: string;
|
|
44
|
-
|
|
44
|
+
issue_id: string;
|
|
45
45
|
all_completed: boolean;
|
|
46
46
|
checklists_validation: ChecklistValidation[];
|
|
47
47
|
summary: string;
|
|
@@ -7,20 +7,20 @@ import { logDebug, logError, logInfo, logSuccess, logWarning, } from '../utils/l
|
|
|
7
7
|
* Fetch checklists for a specific phase
|
|
8
8
|
*/
|
|
9
9
|
export async function getChecklistsForPhase(options, phase) {
|
|
10
|
-
const {
|
|
10
|
+
const { issueId } = options;
|
|
11
11
|
// Convert phase name from hyphen to underscore format for database compatibility
|
|
12
|
-
// e.g., '
|
|
12
|
+
// e.g., 'issue-analysis' -> 'issue_analysis'
|
|
13
13
|
const dbPhase = phase.replace(/-/g, '_');
|
|
14
|
-
logInfo(`Fetching checklists: phase="${phase}" (db: "${dbPhase}"),
|
|
14
|
+
logInfo(`Fetching checklists: phase="${phase}" (db: "${dbPhase}"), issue_id="${issueId}"`);
|
|
15
15
|
const result = await callMcpEndpoint('checklists/phase', {
|
|
16
|
-
|
|
16
|
+
issue_id: issueId,
|
|
17
17
|
phase: dbPhase,
|
|
18
18
|
});
|
|
19
19
|
// Handle empty result gracefully
|
|
20
20
|
if (!result) {
|
|
21
21
|
return {
|
|
22
22
|
phase,
|
|
23
|
-
|
|
23
|
+
issue_id: issueId,
|
|
24
24
|
checklists: [],
|
|
25
25
|
};
|
|
26
26
|
}
|
|
@@ -30,11 +30,11 @@ export async function getChecklistsForPhase(options, phase) {
|
|
|
30
30
|
* Validate checklist completion for a phase
|
|
31
31
|
*/
|
|
32
32
|
export async function validateChecklistsForPhase(options, phase) {
|
|
33
|
-
const {
|
|
33
|
+
const { issueId } = options;
|
|
34
34
|
// Convert phase name from hyphen to underscore format for database compatibility
|
|
35
35
|
const dbPhase = phase.replace(/-/g, '_');
|
|
36
36
|
const result = await callMcpEndpoint('checklists/validate', {
|
|
37
|
-
|
|
37
|
+
issue_id: issueId,
|
|
38
38
|
phase: dbPhase,
|
|
39
39
|
});
|
|
40
40
|
return result;
|
|
@@ -43,9 +43,9 @@ export async function validateChecklistsForPhase(options, phase) {
|
|
|
43
43
|
* Create checklist results (mark as started/in-progress)
|
|
44
44
|
*/
|
|
45
45
|
export async function createChecklistResult(options, checklistId, itemResults) {
|
|
46
|
-
const {
|
|
46
|
+
const { issueId } = options;
|
|
47
47
|
return await callMcpEndpoint('checklist_results/create', {
|
|
48
|
-
|
|
48
|
+
issue_id: issueId,
|
|
49
49
|
checklist_id: checklistId,
|
|
50
50
|
item_results: itemResults,
|
|
51
51
|
});
|
|
@@ -105,9 +105,9 @@ export async function validateRequiredChecklistResults(options, phase, verbose)
|
|
|
105
105
|
* Create checklist item result
|
|
106
106
|
*/
|
|
107
107
|
export async function createChecklistItemResult(options, checklistItemId, isPassed, value, notes) {
|
|
108
|
-
const {
|
|
108
|
+
const { issueId } = options;
|
|
109
109
|
return await callMcpEndpoint('checklist_item_results/create', {
|
|
110
|
-
|
|
110
|
+
issue_id: issueId,
|
|
111
111
|
checklist_item_id: checklistItemId,
|
|
112
112
|
is_passed: isPassed,
|
|
113
113
|
value,
|
|
@@ -21,7 +21,7 @@ function extractTextContent(content) {
|
|
|
21
21
|
}
|
|
22
22
|
/** JSON output format templates per phase category */
|
|
23
23
|
const PHASE_JSON_TEMPLATES = {
|
|
24
|
-
|
|
24
|
+
issue_analysis: `\`\`\`json
|
|
25
25
|
{
|
|
26
26
|
"analysis": {
|
|
27
27
|
"created_user_stories": [{ "title": "...", "description": "..." }],
|
|
@@ -49,7 +49,7 @@ const PHASE_JSON_TEMPLATES = {
|
|
|
49
49
|
technical_design: `\`\`\`json
|
|
50
50
|
{
|
|
51
51
|
"technical_design_result": {
|
|
52
|
-
"
|
|
52
|
+
"issue_id": "...",
|
|
53
53
|
"status": "success",
|
|
54
54
|
"summary": "...",
|
|
55
55
|
"technical_design": "The COMPLETE improved technical design in markdown"
|
|
@@ -18,7 +18,7 @@ import { type SelfRatingChecklistItem } from './self-rating.js';
|
|
|
18
18
|
export type OnImprovedCallback = (executionSessionId: string, responseText: string) => Promise<void>;
|
|
19
19
|
/** Options for the coaching loop */
|
|
20
20
|
export interface CoachingLoopOptions {
|
|
21
|
-
|
|
21
|
+
issueId: string;
|
|
22
22
|
phase: RatablePhase;
|
|
23
23
|
/** The initial execution session ID (from the first phase execution) */
|
|
24
24
|
executionSessionId: string;
|
|
@@ -70,7 +70,7 @@ export function isStagnant(ratings) {
|
|
|
70
70
|
*/
|
|
71
71
|
// eslint-disable-next-line complexity -- coaching loop with rating, decision, and improvement cycles
|
|
72
72
|
export async function runCoachingLoop(options) {
|
|
73
|
-
const {
|
|
73
|
+
const { issueId, phase, onImproved, checklistItems, verbose } = options;
|
|
74
74
|
let { executionSessionId } = options;
|
|
75
75
|
let coachingSessionId = null;
|
|
76
76
|
const allRatings = [];
|
|
@@ -97,7 +97,7 @@ export async function runCoachingLoop(options) {
|
|
|
97
97
|
}
|
|
98
98
|
// Step 2: Write rating to DB (capture ID for coaching_analysis update)
|
|
99
99
|
const ratingId = await createPhaseRating({
|
|
100
|
-
|
|
100
|
+
issueId,
|
|
101
101
|
phase,
|
|
102
102
|
rating,
|
|
103
103
|
ratingType: 'ai_self',
|
|
@@ -14,7 +14,7 @@ import { type SelfRatingChecklistItem } from './self-rating.js';
|
|
|
14
14
|
*/
|
|
15
15
|
export declare function extractChecklistItems(checklistContext?: ChecklistPhaseContext | null): SelfRatingChecklistItem[] | undefined;
|
|
16
16
|
export interface PhaseCoachingParams {
|
|
17
|
-
|
|
17
|
+
issueId: string;
|
|
18
18
|
phase: RatablePhase;
|
|
19
19
|
/** The phase result object containing execution_session_id */
|
|
20
20
|
phaseResult: WithExecutionSessionId;
|
|
@@ -37,7 +37,7 @@ export interface PhaseCoachingResult {
|
|
|
37
37
|
*
|
|
38
38
|
* Usage:
|
|
39
39
|
* const { executionSessionId } = await runPhaseCoaching({
|
|
40
|
-
*
|
|
40
|
+
* issueId,
|
|
41
41
|
* phase: 'technical_design',
|
|
42
42
|
* phaseResult: structuredResult,
|
|
43
43
|
* onImproved: async () => { ... re-save output ... },
|
|
@@ -26,7 +26,7 @@ export function extractChecklistItems(checklistContext) {
|
|
|
26
26
|
*
|
|
27
27
|
* Usage:
|
|
28
28
|
* const { executionSessionId } = await runPhaseCoaching({
|
|
29
|
-
*
|
|
29
|
+
* issueId,
|
|
30
30
|
* phase: 'technical_design',
|
|
31
31
|
* phaseResult: structuredResult,
|
|
32
32
|
* onImproved: async () => { ... re-save output ... },
|
|
@@ -34,7 +34,7 @@ export function extractChecklistItems(checklistContext) {
|
|
|
34
34
|
* })
|
|
35
35
|
*/
|
|
36
36
|
export async function runPhaseCoaching(params) {
|
|
37
|
-
const {
|
|
37
|
+
const { issueId, phase, phaseResult, onImproved, checklistItems, verbose } = params;
|
|
38
38
|
const executionSessionId = phaseResult.execution_session_id;
|
|
39
39
|
if (!executionSessionId) {
|
|
40
40
|
if (verbose) {
|
|
@@ -43,7 +43,7 @@ export async function runPhaseCoaching(params) {
|
|
|
43
43
|
return { executionSessionId: '', coaching: null };
|
|
44
44
|
}
|
|
45
45
|
const coachingResult = await runCoachingLoop({
|
|
46
|
-
|
|
46
|
+
issueId,
|
|
47
47
|
phase,
|
|
48
48
|
executionSessionId,
|
|
49
49
|
onImproved,
|
|
@@ -28,7 +28,7 @@ const CODE_CRITERIA = [
|
|
|
28
28
|
/** Get the evaluation criteria for a given phase */
|
|
29
29
|
export function getCriteriaForPhase(phase) {
|
|
30
30
|
switch (phase) {
|
|
31
|
-
case '
|
|
31
|
+
case 'issue_analysis':
|
|
32
32
|
case 'user_stories_analysis':
|
|
33
33
|
case 'test_cases_analysis':
|
|
34
34
|
return ANALYSIS_CRITERIA;
|
|
@@ -9,7 +9,7 @@ export type FeedbackTargetType = 'phase' | 'line' | 'range';
|
|
|
9
9
|
export type DocumentType = 'technical_design' | 'code' | 'test_case' | 'user_story';
|
|
10
10
|
export interface Feedback {
|
|
11
11
|
id: string;
|
|
12
|
-
|
|
12
|
+
issue_id: string | null;
|
|
13
13
|
product_id: string | null;
|
|
14
14
|
branch_id?: string | null;
|
|
15
15
|
user_story_id?: string | null;
|
|
@@ -35,14 +35,14 @@ export interface Feedback {
|
|
|
35
35
|
}
|
|
36
36
|
export interface FeedbacksContext {
|
|
37
37
|
phase: string;
|
|
38
|
-
|
|
38
|
+
issue_id: string;
|
|
39
39
|
branch_id?: string | null;
|
|
40
40
|
feedbacks: Feedback[];
|
|
41
41
|
}
|
|
42
42
|
/**
|
|
43
43
|
* Fetch feedbacks for a specific phase
|
|
44
|
-
* Includes both
|
|
45
|
-
* For multi-branch
|
|
44
|
+
* Includes both issue-level and product-level feedbacks
|
|
45
|
+
* For multi-branch issues, can optionally filter by branch_id
|
|
46
46
|
*/
|
|
47
47
|
export declare function getFeedbacksForPhase(options: PipelinePhaseOptions, phase: string, branchId?: string | null): Promise<FeedbacksContext>;
|
|
48
48
|
/**
|
|
@@ -7,28 +7,28 @@ import { downloadImagesForClaudeCode } from '../utils/image-downloader.js';
|
|
|
7
7
|
import { logDebug, logError, logInfo, logSuccess, logWarning, } from '../utils/logger.js';
|
|
8
8
|
/**
|
|
9
9
|
* Fetch feedbacks for a specific phase
|
|
10
|
-
* Includes both
|
|
11
|
-
* For multi-branch
|
|
10
|
+
* Includes both issue-level and product-level feedbacks
|
|
11
|
+
* For multi-branch issues, can optionally filter by branch_id
|
|
12
12
|
*/
|
|
13
13
|
export async function getFeedbacksForPhase(options, phase, branchId) {
|
|
14
|
-
const {
|
|
14
|
+
const { issueId, verbose } = options;
|
|
15
15
|
const mcpServerUrl = getMcpServerUrl();
|
|
16
16
|
const mcpToken = getMcpToken();
|
|
17
17
|
// Convert phase name from hyphen to underscore format for database compatibility
|
|
18
|
-
// e.g., '
|
|
18
|
+
// e.g., 'issue-analysis' -> 'issue_analysis'
|
|
19
19
|
const dbPhase = phase.replace(/-/g, '_');
|
|
20
20
|
const requestBody = {
|
|
21
21
|
jsonrpc: '2.0',
|
|
22
22
|
id: 1,
|
|
23
23
|
method: 'feedbacks/get',
|
|
24
24
|
params: {
|
|
25
|
-
|
|
25
|
+
issue_id: issueId,
|
|
26
26
|
phase: dbPhase,
|
|
27
27
|
...(branchId ? { branch_id: branchId } : {}),
|
|
28
28
|
},
|
|
29
29
|
};
|
|
30
30
|
if (verbose) {
|
|
31
|
-
logInfo(`Fetching feedbacks: phase="${phase}" (db: "${dbPhase}"),
|
|
31
|
+
logInfo(`Fetching feedbacks: phase="${phase}" (db: "${dbPhase}"), issue_id="${issueId}"`);
|
|
32
32
|
logDebug(`Request body: ${JSON.stringify(requestBody, null, 2)}`, verbose);
|
|
33
33
|
}
|
|
34
34
|
const response = await fetch(`${mcpServerUrl}/mcp`, {
|
|
@@ -66,7 +66,7 @@ export async function getFeedbacksForPhase(options, phase, branchId) {
|
|
|
66
66
|
}
|
|
67
67
|
return {
|
|
68
68
|
phase,
|
|
69
|
-
|
|
69
|
+
issue_id: issueId,
|
|
70
70
|
feedbacks: [],
|
|
71
71
|
};
|
|
72
72
|
}
|
|
@@ -88,7 +88,7 @@ export async function formatFeedbacksForContext(context) {
|
|
|
88
88
|
if (!feedback.content) {
|
|
89
89
|
return feedback;
|
|
90
90
|
}
|
|
91
|
-
const { processedMarkdown } = await downloadImagesForClaudeCode(feedback.content, context.
|
|
91
|
+
const { processedMarkdown } = await downloadImagesForClaudeCode(feedback.content, context.issue_id);
|
|
92
92
|
return { ...feedback, content: processedMarkdown };
|
|
93
93
|
}));
|
|
94
94
|
// Group feedbacks by type
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Bindings fetcher — retrieves phase hook bindings from Supabase via MCP
|
|
3
|
-
* and manages a per-
|
|
3
|
+
* and manages a per-issue in-memory cache so bindings are fetched once
|
|
4
4
|
* per workflow execution, not once per phase.
|
|
5
5
|
*/
|
|
6
6
|
import type { HookPoint, PhaseHookBinding, ResolvedHookBindings } from './types.js';
|
|
7
|
-
export declare function cacheBindings(
|
|
8
|
-
export declare function getCachedBindings(
|
|
9
|
-
export declare function clearBindingsCache(
|
|
7
|
+
export declare function cacheBindings(issueId: string, productId: string, bindings: readonly PhaseHookBinding[]): void;
|
|
8
|
+
export declare function getCachedBindings(issueId: string): ResolvedHookBindings | null;
|
|
9
|
+
export declare function clearBindingsCache(issueId: string): void;
|
|
10
10
|
/**
|
|
11
11
|
* Fetch all enabled hook bindings for a product from Supabase via MCP.
|
|
12
12
|
*/
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Bindings fetcher — retrieves phase hook bindings from Supabase via MCP
|
|
3
|
-
* and manages a per-
|
|
3
|
+
* and manages a per-issue in-memory cache so bindings are fetched once
|
|
4
4
|
* per workflow execution, not once per phase.
|
|
5
5
|
*/
|
|
6
6
|
import { callMcpEndpoint } from '../../api/mcp-client.js';
|
|
7
7
|
import { logDebug } from '../../utils/logger.js';
|
|
8
|
-
// ---- Per-
|
|
8
|
+
// ---- Per-issue cache ----
|
|
9
9
|
const bindingsCache = new Map();
|
|
10
|
-
export function cacheBindings(
|
|
11
|
-
bindingsCache.set(
|
|
10
|
+
export function cacheBindings(issueId, productId, bindings) {
|
|
11
|
+
bindingsCache.set(issueId, {
|
|
12
12
|
productId,
|
|
13
13
|
bindings,
|
|
14
14
|
fetchedAt: Date.now(),
|
|
15
15
|
});
|
|
16
16
|
}
|
|
17
|
-
export function getCachedBindings(
|
|
18
|
-
return bindingsCache.get(
|
|
17
|
+
export function getCachedBindings(issueId) {
|
|
18
|
+
return bindingsCache.get(issueId) ?? null;
|
|
19
19
|
}
|
|
20
|
-
export function clearBindingsCache(
|
|
21
|
-
bindingsCache.delete(
|
|
20
|
+
export function clearBindingsCache(issueId) {
|
|
21
|
+
bindingsCache.delete(issueId);
|
|
22
22
|
}
|
|
23
23
|
// ---- Fetching ----
|
|
24
24
|
/**
|
|
@@ -20,7 +20,7 @@ export function buildHookPrompt(binding, context) {
|
|
|
20
20
|
const sections = [
|
|
21
21
|
'## Phase Hook Execution Context',
|
|
22
22
|
'',
|
|
23
|
-
`- **
|
|
23
|
+
`- **Issue ID**: ${context.issueId}`,
|
|
24
24
|
`- **Phase**: ${context.phase}`,
|
|
25
25
|
`- **Hook Point**: ${context.hookPoint}`,
|
|
26
26
|
`- **Plugin**: ${binding.plugin_name}`,
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import type { HookExecutionResult, PhaseHookBinding } from './types.js';
|
|
6
6
|
export interface LogHookEventParams {
|
|
7
|
-
|
|
7
|
+
issueId: string;
|
|
8
8
|
binding: PhaseHookBinding;
|
|
9
9
|
result: HookExecutionResult;
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
12
|
-
* Log a hook execution event to the
|
|
12
|
+
* Log a hook execution event to the issue audit log.
|
|
13
13
|
*/
|
|
14
14
|
export declare function logHookEvent(params: LogHookEventParams, verbose?: boolean): Promise<void>;
|
|
@@ -10,14 +10,14 @@ const EVENT_TYPE_MAP = {
|
|
|
10
10
|
skipped: 'hook_completed', // skipped is a non-error completion
|
|
11
11
|
};
|
|
12
12
|
/**
|
|
13
|
-
* Log a hook execution event to the
|
|
13
|
+
* Log a hook execution event to the issue audit log.
|
|
14
14
|
*/
|
|
15
15
|
export async function logHookEvent(params, verbose) {
|
|
16
|
-
const {
|
|
16
|
+
const { issueId, binding, result } = params;
|
|
17
17
|
const eventType = EVENT_TYPE_MAP[result.status];
|
|
18
18
|
try {
|
|
19
|
-
await callMcpEndpoint('
|
|
20
|
-
|
|
19
|
+
await callMcpEndpoint('issue_audit_logs/create', {
|
|
20
|
+
issue_id: issueId,
|
|
21
21
|
event_type: eventType,
|
|
22
22
|
phase: binding.phase === '*' ? 'all' : binding.phase.replace(/-/g, '_'),
|
|
23
23
|
source: 'pipeline',
|
|
@@ -12,7 +12,7 @@ export interface HookRunResult {
|
|
|
12
12
|
/**
|
|
13
13
|
* Run all matching hooks for a phase at a given hook point.
|
|
14
14
|
*
|
|
15
|
-
* @param context - Phase context (
|
|
15
|
+
* @param context - Phase context (issueId, phase, hookPoint, etc.)
|
|
16
16
|
* @param deps - Injectable dependencies (defaults to real implementations).
|
|
17
17
|
* Pass mock deps in tests to avoid SDK/network calls.
|
|
18
18
|
*/
|
|
@@ -17,14 +17,14 @@ const defaultDeps = {
|
|
|
17
17
|
/**
|
|
18
18
|
* Run all matching hooks for a phase at a given hook point.
|
|
19
19
|
*
|
|
20
|
-
* @param context - Phase context (
|
|
20
|
+
* @param context - Phase context (issueId, phase, hookPoint, etc.)
|
|
21
21
|
* @param deps - Injectable dependencies (defaults to real implementations).
|
|
22
22
|
* Pass mock deps in tests to avoid SDK/network calls.
|
|
23
23
|
*/
|
|
24
24
|
export async function runHooksForPhase(context, deps = defaultDeps) {
|
|
25
|
-
const {
|
|
25
|
+
const { issueId, phase, hookPoint, verbose } = context;
|
|
26
26
|
// 1. Get cached bindings
|
|
27
|
-
const cached = deps.getCachedBindings(
|
|
27
|
+
const cached = deps.getCachedBindings(issueId);
|
|
28
28
|
if (!cached || cached.bindings.length === 0) {
|
|
29
29
|
return { results: [], blocked: false };
|
|
30
30
|
}
|
|
@@ -45,7 +45,7 @@ export async function runHooksForPhase(context, deps = defaultDeps) {
|
|
|
45
45
|
results.push(result);
|
|
46
46
|
// Log the event (best-effort)
|
|
47
47
|
try {
|
|
48
|
-
await deps.logHookEvent({
|
|
48
|
+
await deps.logHookEvent({ issueId, binding, result }, verbose);
|
|
49
49
|
}
|
|
50
50
|
catch {
|
|
51
51
|
// Logging failures must not block hook execution
|
|
@@ -33,7 +33,7 @@ export interface ParsedSkillFile {
|
|
|
33
33
|
readonly body: string;
|
|
34
34
|
}
|
|
35
35
|
export interface HookContext {
|
|
36
|
-
readonly
|
|
36
|
+
readonly issueId: string;
|
|
37
37
|
/** Phase name in kebab-case. */
|
|
38
38
|
readonly phase: string;
|
|
39
39
|
readonly hookPoint: HookPoint;
|
|
@@ -59,10 +59,10 @@ export interface ResolvedHookBindings {
|
|
|
59
59
|
}
|
|
60
60
|
export interface HookRunnerDeps {
|
|
61
61
|
executeHook: (binding: PhaseHookBinding, context: HookContext, verbose?: boolean) => Promise<HookExecutionResult>;
|
|
62
|
-
getCachedBindings: (
|
|
62
|
+
getCachedBindings: (issueId: string) => ResolvedHookBindings | null;
|
|
63
63
|
getBindingsForPhase: (bindings: readonly PhaseHookBinding[], phase: string, hookPoint: HookPoint) => readonly PhaseHookBinding[];
|
|
64
64
|
logHookEvent: (params: {
|
|
65
|
-
|
|
65
|
+
issueId: string;
|
|
66
66
|
binding: PhaseHookBinding;
|
|
67
67
|
result: HookExecutionResult;
|
|
68
68
|
}, verbose?: boolean) => Promise<void>;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Provides functions to create and query phase ratings for AI quality tracking
|
|
4
4
|
*/
|
|
5
5
|
/** Phase names that can be rated */
|
|
6
|
-
export type RatablePhase = '
|
|
6
|
+
export type RatablePhase = 'issue_analysis' | 'user_stories_analysis' | 'test_cases_analysis' | 'technical_design' | 'branch_planning' | 'code_implementation' | 'pr_splitting' | 'pr_execution' | 'code_testing' | 'functional_testing' | 'code_review' | 'code_refine' | 'autonomous';
|
|
7
7
|
export type RatingType = 'ai_self' | 'human' | 'ai_peer';
|
|
8
8
|
/** Score for a single evaluation criterion */
|
|
9
9
|
export interface CriterionScore {
|
|
@@ -27,7 +27,7 @@ export interface CoachingAnalysis {
|
|
|
27
27
|
}
|
|
28
28
|
/** Parameters for creating a phase rating record */
|
|
29
29
|
export interface CreatePhaseRatingParams {
|
|
30
|
-
|
|
30
|
+
issueId: string;
|
|
31
31
|
phase: RatablePhase;
|
|
32
32
|
rating: PhaseRating;
|
|
33
33
|
ratingType: RatingType;
|
|
@@ -38,7 +38,7 @@ export interface CreatePhaseRatingParams {
|
|
|
38
38
|
/** A phase rating record from the database */
|
|
39
39
|
export interface PhaseRatingRecord {
|
|
40
40
|
id: string;
|
|
41
|
-
|
|
41
|
+
issue_id: string;
|
|
42
42
|
phase: RatablePhase;
|
|
43
43
|
score: number;
|
|
44
44
|
summary: string | null;
|
|
@@ -61,10 +61,10 @@ export declare function createPhaseRating(params: CreatePhaseRatingParams, verbo
|
|
|
61
61
|
*/
|
|
62
62
|
export declare function updatePhaseRatingCoachingAnalysis(ratingId: string, coachingAnalysis: CoachingAnalysis, verbose?: boolean): Promise<boolean>;
|
|
63
63
|
/**
|
|
64
|
-
* Get all ratings for
|
|
64
|
+
* Get all ratings for an issue's phase, ordered by iteration
|
|
65
65
|
*/
|
|
66
|
-
export declare function getPhaseRatings(
|
|
66
|
+
export declare function getPhaseRatings(issueId: string, phase: RatablePhase, verbose?: boolean): Promise<PhaseRatingRecord[]>;
|
|
67
67
|
/**
|
|
68
|
-
* Get the latest rating for
|
|
68
|
+
* Get the latest rating for an issue's phase
|
|
69
69
|
*/
|
|
70
|
-
export declare function getLatestPhaseRating(
|
|
70
|
+
export declare function getLatestPhaseRating(issueId: string, phase: RatablePhase, verbose?: boolean): Promise<PhaseRatingRecord | null>;
|
|
@@ -10,7 +10,7 @@ import { logDebug, logError, logInfo } from '../utils/logger.js';
|
|
|
10
10
|
export async function createPhaseRating(params, verbose) {
|
|
11
11
|
try {
|
|
12
12
|
const result = await callMcpEndpoint('phase_ratings/create', {
|
|
13
|
-
|
|
13
|
+
issue_id: params.issueId,
|
|
14
14
|
phase: params.phase,
|
|
15
15
|
score: params.rating.score,
|
|
16
16
|
summary: params.rating.summary,
|
|
@@ -52,18 +52,18 @@ export async function updatePhaseRatingCoachingAnalysis(ratingId, coachingAnalys
|
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
/**
|
|
55
|
-
* Get all ratings for
|
|
55
|
+
* Get all ratings for an issue's phase, ordered by iteration
|
|
56
56
|
*/
|
|
57
|
-
export async function getPhaseRatings(
|
|
57
|
+
export async function getPhaseRatings(issueId, phase, verbose) {
|
|
58
58
|
try {
|
|
59
59
|
const result = await callMcpEndpoint('phase_ratings/list', {
|
|
60
|
-
|
|
60
|
+
issue_id: issueId,
|
|
61
61
|
phase,
|
|
62
62
|
});
|
|
63
63
|
const ratings = (result?.ratings ||
|
|
64
64
|
[]);
|
|
65
65
|
if (verbose) {
|
|
66
|
-
logDebug(`Fetched ${ratings.length} ratings for ${phase} (
|
|
66
|
+
logDebug(`Fetched ${ratings.length} ratings for ${phase} (issue: ${issueId})`, verbose);
|
|
67
67
|
}
|
|
68
68
|
return ratings;
|
|
69
69
|
}
|
|
@@ -73,9 +73,9 @@ export async function getPhaseRatings(featureId, phase, verbose) {
|
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
75
|
/**
|
|
76
|
-
* Get the latest rating for
|
|
76
|
+
* Get the latest rating for an issue's phase
|
|
77
77
|
*/
|
|
78
|
-
export async function getLatestPhaseRating(
|
|
79
|
-
const ratings = await getPhaseRatings(
|
|
78
|
+
export async function getLatestPhaseRating(issueId, phase, verbose) {
|
|
79
|
+
const ratings = await getPhaseRatings(issueId, phase, verbose);
|
|
80
80
|
return ratings.length > 0 ? ratings[ratings.length - 1] : null;
|
|
81
81
|
}
|