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
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { logInfo } from '../../utils/logger.js';
|
|
2
|
+
import { callMcpEndpoint } from '../mcp-client.js';
|
|
3
|
+
/**
|
|
4
|
+
* Get issue details by ID
|
|
5
|
+
*/
|
|
6
|
+
export async function getIssue(issueId, verbose) {
|
|
7
|
+
if (verbose) {
|
|
8
|
+
logInfo(`Fetching issue details for: ${issueId}`);
|
|
9
|
+
}
|
|
10
|
+
const result = (await callMcpEndpoint('issues/get', {
|
|
11
|
+
issue_id: issueId,
|
|
12
|
+
}));
|
|
13
|
+
if (!result.issues || result.issues.length === 0) {
|
|
14
|
+
throw new Error(`Issue not found: ${issueId}`);
|
|
15
|
+
}
|
|
16
|
+
const issue = result.issues[0];
|
|
17
|
+
if (!issue || typeof issue !== 'object') {
|
|
18
|
+
throw new Error(`Invalid issue data returned for: ${issueId}`);
|
|
19
|
+
}
|
|
20
|
+
return issue;
|
|
21
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './batch-operations.js';
|
|
2
|
+
export * from './get-issue.js';
|
|
3
|
+
export * from './issue-utils.js';
|
|
4
|
+
export * from './status-updater.js';
|
|
5
|
+
export * from './test-cases.js';
|
|
6
|
+
export * from './update-issue.js';
|
|
7
|
+
export * from './user-stories.js';
|
|
8
|
+
export * from '../../types/issues.js';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Re-export all issue-related functions
|
|
2
|
+
export * from './batch-operations.js';
|
|
3
|
+
export * from './get-issue.js';
|
|
4
|
+
export * from './issue-utils.js';
|
|
5
|
+
export * from './status-updater.js';
|
|
6
|
+
export * from './test-cases.js';
|
|
7
|
+
export * from './update-issue.js';
|
|
8
|
+
export * from './user-stories.js';
|
|
9
|
+
// Re-export types
|
|
10
|
+
export * from '../../types/issues.js';
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type IssueInfo } from '../../types/issues.js';
|
|
2
|
+
/**
|
|
3
|
+
* Claim the next available ready_for_ai issue for processing.
|
|
4
|
+
* Uses database-level locking (FOR UPDATE SKIP LOCKED) to prevent
|
|
5
|
+
* race conditions between multiple workers.
|
|
6
|
+
*
|
|
7
|
+
* @param productId - The product ID to claim an issue from
|
|
8
|
+
* @param verbose - Whether to log verbose output
|
|
9
|
+
* @returns The claimed issue or null if no issues available
|
|
10
|
+
*/
|
|
11
|
+
export declare function claimNextIssue(productId: string, verbose?: boolean): Promise<IssueInfo | null>;
|
|
12
|
+
/**
|
|
13
|
+
* Filter issues by status
|
|
14
|
+
*/
|
|
15
|
+
export declare function filterIssuesByStatus(issues: IssueInfo[], status: string): IssueInfo[];
|
|
16
|
+
/**
|
|
17
|
+
* Sort issues by updated_at (oldest first for processing)
|
|
18
|
+
*/
|
|
19
|
+
export declare function sortIssuesByUpdatedAt(issues: IssueInfo[]): IssueInfo[];
|
|
20
|
+
/**
|
|
21
|
+
* Get issues with ready_for_ai status for a product
|
|
22
|
+
*/
|
|
23
|
+
export declare function getReadyForAIIssues(productId: string, verbose?: boolean): Promise<IssueInfo[]>;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { logError, logInfo } from '../../utils/logger.js';
|
|
2
|
+
import { callMcpEndpoint } from '../mcp-client.js';
|
|
3
|
+
/**
|
|
4
|
+
* Claim the next available ready_for_ai issue for processing.
|
|
5
|
+
* Uses database-level locking (FOR UPDATE SKIP LOCKED) to prevent
|
|
6
|
+
* race conditions between multiple workers.
|
|
7
|
+
*
|
|
8
|
+
* @param productId - The product ID to claim an issue from
|
|
9
|
+
* @param verbose - Whether to log verbose output
|
|
10
|
+
* @returns The claimed issue or null if no issues available
|
|
11
|
+
*/
|
|
12
|
+
export async function claimNextIssue(productId, verbose) {
|
|
13
|
+
if (verbose) {
|
|
14
|
+
logInfo(`Attempting to claim next ready_for_ai issue for product: ${productId}`);
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
const result = (await callMcpEndpoint('issues/claim', {
|
|
18
|
+
product_id: productId,
|
|
19
|
+
}));
|
|
20
|
+
if (result.issue) {
|
|
21
|
+
if (verbose) {
|
|
22
|
+
logInfo(`✅ Claimed issue: ${result.issue.name} (${result.issue.id})`);
|
|
23
|
+
}
|
|
24
|
+
return result.issue;
|
|
25
|
+
}
|
|
26
|
+
if (verbose) {
|
|
27
|
+
logInfo('No issues available for processing');
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
33
|
+
logError(`Failed to claim issue: ${errorMessage}`);
|
|
34
|
+
throw error;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Filter issues by status
|
|
39
|
+
*/
|
|
40
|
+
export function filterIssuesByStatus(issues, status) {
|
|
41
|
+
return issues.filter((issue) => issue.status === status);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Sort issues by updated_at (oldest first for processing)
|
|
45
|
+
*/
|
|
46
|
+
export function sortIssuesByUpdatedAt(issues) {
|
|
47
|
+
return [...issues].sort((a, b) => {
|
|
48
|
+
const dateA = new Date(a.updated_at || 0).getTime();
|
|
49
|
+
const dateB = new Date(b.updated_at || 0).getTime();
|
|
50
|
+
return dateA - dateB;
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get issues with ready_for_ai status for a product
|
|
55
|
+
*/
|
|
56
|
+
export async function getReadyForAIIssues(productId, verbose) {
|
|
57
|
+
if (verbose) {
|
|
58
|
+
logInfo(`Fetching ready_for_ai issues for product: ${productId}`);
|
|
59
|
+
}
|
|
60
|
+
try {
|
|
61
|
+
const result = (await callMcpEndpoint('issues/list', {
|
|
62
|
+
product_id: productId,
|
|
63
|
+
status: 'ready_for_ai',
|
|
64
|
+
}));
|
|
65
|
+
const issues = result.issues || [];
|
|
66
|
+
const sortedIssues = sortIssuesByUpdatedAt(issues);
|
|
67
|
+
if (verbose) {
|
|
68
|
+
logInfo(`✅ Found ${sortedIssues.length} ready_for_ai issues (oldest first)`);
|
|
69
|
+
sortedIssues.forEach((issue, index) => {
|
|
70
|
+
logInfo(` ${index + 1}. ${issue.name} (updated: ${issue.updated_at})`);
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
return sortedIssues;
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
77
|
+
logError(`Failed to fetch ready_for_ai issues: ${errorMessage}`);
|
|
78
|
+
throw error;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Issue status updater for workflow pipeline
|
|
3
|
+
* Updates issue status at each phase of the development workflow
|
|
4
|
+
*/
|
|
5
|
+
import type { IssueStatus } from '../../types/index.js';
|
|
6
|
+
interface StatusUpdateOptions {
|
|
7
|
+
readonly issueId: string;
|
|
8
|
+
readonly status: IssueStatus;
|
|
9
|
+
readonly verbose?: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Check if moving from currentStatus to newStatus is forward progression
|
|
13
|
+
*
|
|
14
|
+
* Special cases for archived status:
|
|
15
|
+
* - Any status → archived: Always allowed (archiving from any state)
|
|
16
|
+
* - Archived → backlog: Always allowed (unarchiving restores to backlog)
|
|
17
|
+
*/
|
|
18
|
+
export declare function isForwardProgression(currentStatus: IssueStatus, newStatus: IssueStatus): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Update issue status via MCP endpoint
|
|
21
|
+
*/
|
|
22
|
+
export declare function updateIssueStatus({ issueId, status, verbose, }: StatusUpdateOptions): Promise<boolean>;
|
|
23
|
+
/**
|
|
24
|
+
* Map pipeline phase to issue status
|
|
25
|
+
*/
|
|
26
|
+
export declare const getStatusForPhase: (phase: string) => IssueStatus | null;
|
|
27
|
+
/**
|
|
28
|
+
* Update issue status based on pipeline phase
|
|
29
|
+
*
|
|
30
|
+
* @param issueId - The issue ID to update
|
|
31
|
+
* @param phase - The pipeline phase name
|
|
32
|
+
* @param verbose - Whether to log verbose output
|
|
33
|
+
* @returns Promise<boolean> - true if update succeeded, false if skipped or failed
|
|
34
|
+
*
|
|
35
|
+
* BREAKING CHANGE: This function was changed from synchronous to asynchronous in PR #87
|
|
36
|
+
* to support regression prevention checks. All callers must now use await/then to handle
|
|
37
|
+
* the Promise return type. The function now validates against status regression and will
|
|
38
|
+
* skip updates that would move an issue backward in the development workflow.
|
|
39
|
+
*/
|
|
40
|
+
export declare const updateIssueStatusForPhase: (issueId: string, phase: string, verbose?: boolean) => Promise<boolean>;
|
|
41
|
+
export {};
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* Updates
|
|
2
|
+
* Issue status updater for workflow pipeline
|
|
3
|
+
* Updates issue status at each phase of the development workflow
|
|
4
4
|
*/
|
|
5
|
-
import { PHASE_STATUS_MAP, STATUS_PROGRESSION_ORDER, } from '../../config/
|
|
5
|
+
import { PHASE_STATUS_MAP, STATUS_PROGRESSION_ORDER, } from '../../config/issue-status.js';
|
|
6
6
|
import { logError, logInfo } from '../../utils/logger.js';
|
|
7
7
|
import { callMcpEndpoint } from '../mcp-client.js';
|
|
8
|
-
import {
|
|
8
|
+
import { getIssue } from './get-issue.js';
|
|
9
9
|
/**
|
|
10
10
|
* Check if moving from currentStatus to newStatus is forward progression
|
|
11
11
|
*
|
|
@@ -28,23 +28,23 @@ export function isForwardProgression(currentStatus, newStatus) {
|
|
|
28
28
|
return newIndex >= currentIndex;
|
|
29
29
|
}
|
|
30
30
|
/**
|
|
31
|
-
* Update
|
|
31
|
+
* Update issue status via MCP endpoint
|
|
32
32
|
*/
|
|
33
|
-
export async function
|
|
33
|
+
export async function updateIssueStatus({ issueId, status, verbose = false, }) {
|
|
34
34
|
try {
|
|
35
35
|
if (verbose) {
|
|
36
|
-
logInfo(`Updating
|
|
36
|
+
logInfo(`Updating issue ${issueId} status to: ${status}`);
|
|
37
37
|
}
|
|
38
|
-
// Get current
|
|
39
|
-
let
|
|
38
|
+
// Get current issue status to check for regression
|
|
39
|
+
let issue;
|
|
40
40
|
let currentStatus;
|
|
41
41
|
try {
|
|
42
|
-
|
|
43
|
-
currentStatus =
|
|
42
|
+
issue = await getIssue(issueId, verbose);
|
|
43
|
+
currentStatus = issue.status;
|
|
44
44
|
}
|
|
45
45
|
catch (error) {
|
|
46
46
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
47
|
-
logError(`Failed to get current
|
|
47
|
+
logError(`Failed to get current issue status for ${issueId}: ${errorMessage}`);
|
|
48
48
|
// If we can't get the current status, we can't safely check for regression
|
|
49
49
|
// so we'll skip the update to prevent potential regression
|
|
50
50
|
if (verbose) {
|
|
@@ -68,34 +68,34 @@ export async function updateFeatureStatus({ featureId, status, verbose = false,
|
|
|
68
68
|
return true;
|
|
69
69
|
}
|
|
70
70
|
// Update status
|
|
71
|
-
await callMcpEndpoint('
|
|
72
|
-
|
|
71
|
+
await callMcpEndpoint('issues/update', {
|
|
72
|
+
issue_id: issueId,
|
|
73
73
|
status,
|
|
74
74
|
});
|
|
75
75
|
if (verbose) {
|
|
76
|
-
logInfo(`✅
|
|
76
|
+
logInfo(`✅ Issue status updated successfully from ${currentStatus} to: ${status}`);
|
|
77
77
|
}
|
|
78
78
|
return true;
|
|
79
79
|
}
|
|
80
80
|
catch (error) {
|
|
81
81
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
82
82
|
if (verbose) {
|
|
83
|
-
logError(`Failed to update
|
|
83
|
+
logError(`Failed to update issue status: ${errorMessage}`);
|
|
84
84
|
}
|
|
85
85
|
return false;
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
88
|
/**
|
|
89
|
-
* Map pipeline phase to
|
|
89
|
+
* Map pipeline phase to issue status
|
|
90
90
|
*/
|
|
91
91
|
export const getStatusForPhase = (phase) => {
|
|
92
92
|
// Use the externalized phase-to-status mapping
|
|
93
93
|
return PHASE_STATUS_MAP[phase] ?? null;
|
|
94
94
|
};
|
|
95
95
|
/**
|
|
96
|
-
* Update
|
|
96
|
+
* Update issue status based on pipeline phase
|
|
97
97
|
*
|
|
98
|
-
* @param
|
|
98
|
+
* @param issueId - The issue ID to update
|
|
99
99
|
* @param phase - The pipeline phase name
|
|
100
100
|
* @param verbose - Whether to log verbose output
|
|
101
101
|
* @returns Promise<boolean> - true if update succeeded, false if skipped or failed
|
|
@@ -103,9 +103,9 @@ export const getStatusForPhase = (phase) => {
|
|
|
103
103
|
* BREAKING CHANGE: This function was changed from synchronous to asynchronous in PR #87
|
|
104
104
|
* to support regression prevention checks. All callers must now use await/then to handle
|
|
105
105
|
* the Promise return type. The function now validates against status regression and will
|
|
106
|
-
* skip updates that would move
|
|
106
|
+
* skip updates that would move an issue backward in the development workflow.
|
|
107
107
|
*/
|
|
108
|
-
export const
|
|
108
|
+
export const updateIssueStatusForPhase = async (issueId, phase, verbose) => {
|
|
109
109
|
const status = getStatusForPhase(phase);
|
|
110
110
|
if (!status) {
|
|
111
111
|
const message = `⚠️ Unknown phase '${phase}' - skipping status update to prevent regression`;
|
|
@@ -114,8 +114,8 @@ export const updateFeatureStatusForPhase = async (featureId, phase, verbose) =>
|
|
|
114
114
|
}
|
|
115
115
|
return false;
|
|
116
116
|
}
|
|
117
|
-
return
|
|
118
|
-
|
|
117
|
+
return updateIssueStatus({
|
|
118
|
+
issueId,
|
|
119
119
|
status,
|
|
120
120
|
verbose,
|
|
121
121
|
});
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { type TestCase, type TestCaseStatus } from '../../types/
|
|
1
|
+
import { type TestCase, type TestCaseStatus } from '../../types/issues.js';
|
|
2
2
|
/**
|
|
3
|
-
* Get test cases for
|
|
3
|
+
* Get test cases for an issue
|
|
4
4
|
*/
|
|
5
|
-
export declare function getTestCases(
|
|
5
|
+
export declare function getTestCases(issueId: string, verbose?: boolean): Promise<TestCase[]>;
|
|
6
6
|
/**
|
|
7
|
-
* Create a new test case for
|
|
7
|
+
* Create a new test case for an issue
|
|
8
8
|
*/
|
|
9
|
-
export declare function createTestCase(
|
|
9
|
+
export declare function createTestCase(issueId: string, testCase: {
|
|
10
10
|
name: string;
|
|
11
11
|
description: string;
|
|
12
12
|
is_critical?: boolean;
|
|
13
13
|
}, verbose?: boolean): Promise<boolean>;
|
|
14
14
|
/**
|
|
15
|
-
* Create multiple test cases for
|
|
15
|
+
* Create multiple test cases for an issue
|
|
16
16
|
*/
|
|
17
|
-
export declare function createTestCases(mcpServerUrl: string, mcpToken: string,
|
|
17
|
+
export declare function createTestCases(mcpServerUrl: string, mcpToken: string, issueId: string, testCases: {
|
|
18
18
|
name: string;
|
|
19
19
|
description: string;
|
|
20
20
|
is_critical?: boolean;
|
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
import { logError, logInfo } from '../../utils/logger.js';
|
|
2
2
|
import { callMcpEndpoint } from '../mcp-client.js';
|
|
3
3
|
/**
|
|
4
|
-
* Get test cases for
|
|
4
|
+
* Get test cases for an issue
|
|
5
5
|
*/
|
|
6
|
-
export async function getTestCases(
|
|
6
|
+
export async function getTestCases(issueId, verbose) {
|
|
7
7
|
if (verbose) {
|
|
8
|
-
logInfo(`Fetching test cases for
|
|
8
|
+
logInfo(`Fetching test cases for issue: ${issueId}`);
|
|
9
9
|
}
|
|
10
10
|
const result = (await callMcpEndpoint('test_cases/list', {
|
|
11
|
-
|
|
11
|
+
issue_id: issueId,
|
|
12
12
|
}));
|
|
13
13
|
return (result.test_cases || []);
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
16
|
-
* Create a new test case for
|
|
16
|
+
* Create a new test case for an issue
|
|
17
17
|
*/
|
|
18
|
-
export async function createTestCase(
|
|
18
|
+
export async function createTestCase(issueId, testCase, verbose) {
|
|
19
19
|
try {
|
|
20
20
|
if (verbose) {
|
|
21
|
-
logInfo(`Creating test case for
|
|
21
|
+
logInfo(`Creating test case for issue: ${issueId}`);
|
|
22
22
|
}
|
|
23
23
|
await callMcpEndpoint('test_cases/create', {
|
|
24
|
-
|
|
24
|
+
issue_id: issueId,
|
|
25
25
|
test_cases: [
|
|
26
26
|
{
|
|
27
27
|
name: testCase.name,
|
|
@@ -42,15 +42,15 @@ export async function createTestCase(featureId, testCase, verbose) {
|
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
/**
|
|
45
|
-
* Create multiple test cases for
|
|
45
|
+
* Create multiple test cases for an issue
|
|
46
46
|
*/
|
|
47
|
-
export async function createTestCases(mcpServerUrl, mcpToken,
|
|
47
|
+
export async function createTestCases(mcpServerUrl, mcpToken, issueId, testCases, verbose) {
|
|
48
48
|
try {
|
|
49
49
|
if (verbose) {
|
|
50
|
-
logInfo(`Creating ${testCases.length} test cases for
|
|
50
|
+
logInfo(`Creating ${testCases.length} test cases for issue: ${issueId}`);
|
|
51
51
|
}
|
|
52
52
|
for (const testCase of testCases) {
|
|
53
|
-
await createTestCase(
|
|
53
|
+
await createTestCase(issueId, testCase, false);
|
|
54
54
|
}
|
|
55
55
|
if (verbose) {
|
|
56
56
|
logInfo('✅ All test cases created successfully');
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type IssueWorkflow } from '../../types/pipeline.js';
|
|
2
|
+
/**
|
|
3
|
+
* Update issue with new data
|
|
4
|
+
*/
|
|
5
|
+
export declare function updateIssue(issueId: string, updates: {
|
|
6
|
+
technical_design?: string;
|
|
7
|
+
status?: string;
|
|
8
|
+
execution_mode?: string;
|
|
9
|
+
workflow?: IssueWorkflow;
|
|
10
|
+
}, verbose?: boolean): Promise<boolean>;
|
|
11
|
+
/**
|
|
12
|
+
* Update technical design for an issue
|
|
13
|
+
*/
|
|
14
|
+
export declare function updateTechnicalDesign(issueId: string, technicalDesign: string, verbose?: boolean): Promise<boolean>;
|
|
15
|
+
/**
|
|
16
|
+
* Mark a workflow phase as completed
|
|
17
|
+
* Fetches current workflow, updates the phase status, and saves back
|
|
18
|
+
* Accepts phase names in either format (hyphens or underscores)
|
|
19
|
+
*/
|
|
20
|
+
export declare function markWorkflowPhaseCompleted(issueId: string, phaseName: string, verbose?: boolean): Promise<boolean>;
|
|
@@ -1,37 +1,37 @@
|
|
|
1
1
|
import { logError, logInfo } from '../../utils/logger.js';
|
|
2
2
|
import { callMcpEndpoint } from '../mcp-client.js';
|
|
3
3
|
/**
|
|
4
|
-
* Update
|
|
4
|
+
* Update issue with new data
|
|
5
5
|
*/
|
|
6
|
-
export async function
|
|
6
|
+
export async function updateIssue(issueId, updates, verbose) {
|
|
7
7
|
try {
|
|
8
8
|
if (verbose) {
|
|
9
|
-
logInfo(`Updating
|
|
9
|
+
logInfo(`Updating issue: ${issueId}`);
|
|
10
10
|
}
|
|
11
|
-
await callMcpEndpoint('
|
|
12
|
-
|
|
11
|
+
await callMcpEndpoint('issues/update', {
|
|
12
|
+
issue_id: issueId,
|
|
13
13
|
...updates,
|
|
14
14
|
});
|
|
15
15
|
if (verbose) {
|
|
16
|
-
logInfo('✅
|
|
16
|
+
logInfo('✅ Issue updated successfully');
|
|
17
17
|
}
|
|
18
18
|
return true;
|
|
19
19
|
}
|
|
20
20
|
catch (error) {
|
|
21
21
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
22
|
-
logError(`Failed to update
|
|
22
|
+
logError(`Failed to update issue: ${errorMessage}`);
|
|
23
23
|
return false;
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
|
-
* Update technical design for
|
|
27
|
+
* Update technical design for an issue
|
|
28
28
|
*/
|
|
29
|
-
export async function updateTechnicalDesign(
|
|
30
|
-
return
|
|
29
|
+
export async function updateTechnicalDesign(issueId, technicalDesign, verbose) {
|
|
30
|
+
return updateIssue(issueId, { technical_design: technicalDesign }, verbose);
|
|
31
31
|
}
|
|
32
32
|
/**
|
|
33
33
|
* Normalize phase name from pipeline format (hyphens) to workflow format (underscores)
|
|
34
|
-
* e.g., '
|
|
34
|
+
* e.g., 'issue-analysis' -> 'issue_analysis'
|
|
35
35
|
*/
|
|
36
36
|
function normalizePhaseNameForWorkflow(phaseName) {
|
|
37
37
|
return phaseName.replace(/-/g, '_');
|
|
@@ -41,26 +41,26 @@ function normalizePhaseNameForWorkflow(phaseName) {
|
|
|
41
41
|
* Fetches current workflow, updates the phase status, and saves back
|
|
42
42
|
* Accepts phase names in either format (hyphens or underscores)
|
|
43
43
|
*/
|
|
44
|
-
export async function markWorkflowPhaseCompleted(
|
|
44
|
+
export async function markWorkflowPhaseCompleted(issueId, phaseName, verbose) {
|
|
45
45
|
try {
|
|
46
46
|
// Normalize phase name to workflow format (underscores)
|
|
47
47
|
const normalizedPhaseName = normalizePhaseNameForWorkflow(phaseName);
|
|
48
48
|
if (verbose) {
|
|
49
|
-
logInfo(`Marking workflow phase '${normalizedPhaseName}' as completed for
|
|
49
|
+
logInfo(`Marking workflow phase '${normalizedPhaseName}' as completed for issue: ${issueId}`);
|
|
50
50
|
}
|
|
51
|
-
// Fetch current
|
|
52
|
-
const response = (await callMcpEndpoint('
|
|
53
|
-
|
|
51
|
+
// Fetch current issue to get workflow
|
|
52
|
+
const response = (await callMcpEndpoint('issues/get', {
|
|
53
|
+
issue_id: issueId,
|
|
54
54
|
}));
|
|
55
|
-
const
|
|
56
|
-
if (!
|
|
57
|
-
logError(`
|
|
55
|
+
const issue = response?.issues?.[0];
|
|
56
|
+
if (!issue) {
|
|
57
|
+
logError(`Issue not found: ${issueId}`);
|
|
58
58
|
return false;
|
|
59
59
|
}
|
|
60
|
-
const workflow =
|
|
60
|
+
const workflow = issue.workflow || [];
|
|
61
61
|
if (workflow.length === 0) {
|
|
62
62
|
if (verbose) {
|
|
63
|
-
logInfo(`No workflow defined for
|
|
63
|
+
logInfo(`No workflow defined for issue, skipping phase completion`);
|
|
64
64
|
}
|
|
65
65
|
return true;
|
|
66
66
|
}
|
|
@@ -73,7 +73,7 @@ export async function markWorkflowPhaseCompleted(featureId, phaseName, verbose)
|
|
|
73
73
|
}
|
|
74
74
|
: p);
|
|
75
75
|
// Save updated workflow
|
|
76
|
-
return await
|
|
76
|
+
return await updateIssue(issueId, { workflow: updatedWorkflow }, verbose);
|
|
77
77
|
}
|
|
78
78
|
catch (error) {
|
|
79
79
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { type UserStory, type UserStoryStatus } from '../../types/
|
|
1
|
+
import { type UserStory, type UserStoryStatus } from '../../types/issues.js';
|
|
2
2
|
/**
|
|
3
|
-
* Get user stories for
|
|
3
|
+
* Get user stories for an issue
|
|
4
4
|
*/
|
|
5
|
-
export declare function getUserStories(
|
|
5
|
+
export declare function getUserStories(issueId: string, verbose?: boolean): Promise<UserStory[]>;
|
|
6
6
|
/**
|
|
7
|
-
* Create a new user story for
|
|
7
|
+
* Create a new user story for an issue
|
|
8
8
|
*/
|
|
9
|
-
export declare function createUserStory(
|
|
9
|
+
export declare function createUserStory(issueId: string, userStory: {
|
|
10
10
|
title: string;
|
|
11
11
|
description: string;
|
|
12
12
|
status?: string;
|
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
import { logError, logInfo } from '../../utils/logger.js';
|
|
2
2
|
import { callMcpEndpoint } from '../mcp-client.js';
|
|
3
3
|
/**
|
|
4
|
-
* Get user stories for
|
|
4
|
+
* Get user stories for an issue
|
|
5
5
|
*/
|
|
6
|
-
export async function getUserStories(
|
|
6
|
+
export async function getUserStories(issueId, verbose) {
|
|
7
7
|
if (verbose) {
|
|
8
|
-
logInfo(`Fetching user stories for
|
|
8
|
+
logInfo(`Fetching user stories for issue: ${issueId}`);
|
|
9
9
|
}
|
|
10
10
|
const result = (await callMcpEndpoint('user_stories/list', {
|
|
11
|
-
|
|
11
|
+
issue_id: issueId,
|
|
12
12
|
}));
|
|
13
13
|
return (result.user_stories || []);
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
16
|
-
* Create a new user story for
|
|
16
|
+
* Create a new user story for an issue
|
|
17
17
|
*/
|
|
18
|
-
export async function createUserStory(
|
|
18
|
+
export async function createUserStory(issueId, userStory, verbose) {
|
|
19
19
|
try {
|
|
20
20
|
if (verbose) {
|
|
21
|
-
logInfo(`Creating user story for
|
|
21
|
+
logInfo(`Creating user story for issue: ${issueId}`);
|
|
22
22
|
}
|
|
23
23
|
await callMcpEndpoint('user_stories/create', {
|
|
24
|
-
|
|
24
|
+
issue_id: issueId,
|
|
25
25
|
user_stories: [
|
|
26
26
|
{
|
|
27
27
|
title: userStory.title,
|
package/dist/api/products.d.ts
CHANGED
package/dist/api/tasks.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Create test report for
|
|
2
|
+
* Create test report for an issue
|
|
3
3
|
*/
|
|
4
|
-
export declare function createTestReport(mcpServerUrl: string, mcpToken: string,
|
|
4
|
+
export declare function createTestReport(mcpServerUrl: string, mcpToken: string, issueId: string, reportData: {
|
|
5
5
|
test_type: string;
|
|
6
6
|
status: 'passed' | 'failed' | 'error';
|
|
7
7
|
summary: string;
|
package/dist/api/test-reports.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { logError, logInfo } from '../utils/logger.js';
|
|
2
2
|
import { callMcpEndpoint } from './mcp-client.js';
|
|
3
3
|
/**
|
|
4
|
-
* Create test report for
|
|
4
|
+
* Create test report for an issue
|
|
5
5
|
*/
|
|
6
|
-
export async function createTestReport(mcpServerUrl, mcpToken,
|
|
6
|
+
export async function createTestReport(mcpServerUrl, mcpToken, issueId, reportData, verbose) {
|
|
7
7
|
try {
|
|
8
8
|
if (verbose) {
|
|
9
|
-
logInfo(`Creating test report for
|
|
9
|
+
logInfo(`Creating test report for issue: ${issueId}`);
|
|
10
10
|
}
|
|
11
11
|
await callMcpEndpoint('test_reports/create', {
|
|
12
|
-
|
|
12
|
+
issue_id: issueId,
|
|
13
13
|
...reportData,
|
|
14
14
|
});
|
|
15
15
|
if (verbose) {
|
package/dist/auth/login.js
CHANGED
|
@@ -143,7 +143,7 @@ export async function runLogin() {
|
|
|
143
143
|
});
|
|
144
144
|
}
|
|
145
145
|
logRaw('');
|
|
146
|
-
logInfo('You can now run `edsger` to start processing
|
|
146
|
+
logInfo('You can now run `edsger` to start processing issues.');
|
|
147
147
|
}
|
|
148
148
|
catch (error) {
|
|
149
149
|
logError(`Connection failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Chat Worker — Child process entry point for processing chat messages.
|
|
3
3
|
*
|
|
4
|
-
* Spawned by AgentWorkflowProcessor as a parallel subprocess alongside
|
|
5
|
-
* Runs continuously, polling for unprocessed human messages across all active
|
|
4
|
+
* Spawned by AgentWorkflowProcessor as a parallel subprocess alongside issue workers.
|
|
5
|
+
* Runs continuously, polling for unprocessed human messages across all active issue channels.
|
|
6
6
|
*
|
|
7
7
|
* Communication with parent via IPC:
|
|
8
8
|
* - Parent sends: { type: 'init', config }
|
|
9
|
-
* - Parent sends: { type: 'event:phase_completed',
|
|
10
|
-
* - Parent sends: { type: 'event:phase_failed',
|
|
11
|
-
* - Parent sends: { type: 'event:
|
|
9
|
+
* - Parent sends: { type: 'event:phase_completed', issueId, phase, summary, phaseOutput }
|
|
10
|
+
* - Parent sends: { type: 'event:phase_failed', issueId, phase, error }
|
|
11
|
+
* - Parent sends: { type: 'event:issue_done', issueId }
|
|
12
12
|
* - Worker sends: { type: 'log', level, message }
|
|
13
|
-
* - Worker sends: { type: 'command:
|
|
14
|
-
* - Worker sends: { type: 'command:
|
|
13
|
+
* - Worker sends: { type: 'command:pause_issue', issueId }
|
|
14
|
+
* - Worker sends: { type: 'command:resume_issue', issueId }
|
|
15
15
|
*/
|
|
16
16
|
export {};
|