edsger 0.50.0 → 0.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +23 -3
- package/.env.local +12 -0
- package/README.md +25 -25
- package/dist/api/chat.d.ts +7 -7
- package/dist/api/chat.js +13 -13
- package/dist/api/cross-product.d.ts +10 -10
- package/dist/api/cross-product.js +30 -30
- package/dist/api/github.d.ts +5 -5
- package/dist/api/github.js +10 -10
- package/dist/api/intelligence.d.ts +3 -3
- package/dist/api/issues/approval-checker.d.ts +20 -0
- package/dist/api/{features → issues}/approval-checker.js +16 -16
- package/dist/api/issues/get-issue.d.ts +5 -0
- package/dist/api/issues/get-issue.js +21 -0
- package/dist/api/issues/index.d.ts +8 -0
- package/dist/api/issues/index.js +10 -0
- package/dist/api/issues/issue-utils.d.ts +23 -0
- package/dist/api/issues/issue-utils.js +80 -0
- package/dist/api/issues/status-updater.d.ts +41 -0
- package/dist/api/{features → issues}/status-updater.js +23 -23
- package/dist/api/{features → issues}/test-cases.d.ts +7 -7
- package/dist/api/{features → issues}/test-cases.js +12 -12
- package/dist/api/issues/update-issue.d.ts +20 -0
- package/dist/api/{features/update-feature.js → issues/update-issue.js} +22 -22
- package/dist/api/{features → issues}/user-stories.d.ts +5 -5
- package/dist/api/{features → issues}/user-stories.js +8 -8
- package/dist/api/products.d.ts +1 -1
- package/dist/api/tasks.d.ts +1 -1
- package/dist/api/test-reports.d.ts +2 -2
- package/dist/api/test-reports.js +4 -4
- package/dist/auth/login.js +1 -1
- package/dist/commands/agent-workflow/chat-worker.d.ts +7 -7
- package/dist/commands/agent-workflow/chat-worker.js +50 -50
- package/dist/commands/agent-workflow/index.d.ts +2 -2
- package/dist/commands/agent-workflow/index.js +3 -3
- package/dist/commands/agent-workflow/{feature-worker.d.ts → issue-worker.d.ts} +4 -4
- package/dist/commands/agent-workflow/{feature-worker.js → issue-worker.js} +12 -12
- package/dist/commands/agent-workflow/processor.d.ts +9 -9
- package/dist/commands/agent-workflow/processor.js +90 -90
- package/dist/commands/build/index.js +2 -2
- package/dist/commands/find-bugs/index.d.ts +11 -0
- package/dist/commands/find-bugs/index.js +39 -0
- package/dist/commands/find-features/index.d.ts +14 -0
- package/dist/commands/find-features/index.js +42 -0
- package/dist/commands/find-smells/index.d.ts +21 -0
- package/dist/commands/find-smells/index.js +65 -0
- package/dist/commands/init/prompts.js +1 -1
- package/dist/commands/init/templates.d.ts +1 -1
- package/dist/commands/init/templates.js +4 -4
- package/dist/commands/workflow/config/phase-configs.js +17 -17
- package/dist/commands/workflow/core/index.d.ts +1 -1
- package/dist/commands/workflow/core/index.js +2 -2
- package/dist/commands/workflow/core/issue-filter.d.ts +16 -0
- package/dist/commands/workflow/core/issue-filter.js +47 -0
- package/dist/commands/workflow/core/state-manager.d.ts +10 -10
- package/dist/commands/workflow/core/state-manager.js +10 -10
- package/dist/commands/workflow/core/workflow-logger.d.ts +9 -9
- package/dist/commands/workflow/core/workflow-logger.js +21 -21
- package/dist/commands/workflow/executors/phase-executor.d.ts +2 -2
- package/dist/commands/workflow/executors/phase-executor.js +32 -32
- package/dist/commands/workflow/issue-coordinator.d.ts +18 -0
- package/dist/commands/workflow/{feature-coordinator.js → issue-coordinator.js} +29 -29
- package/dist/commands/workflow/phase-orchestrator.d.ts +2 -2
- package/dist/commands/workflow/phase-orchestrator.js +82 -82
- package/dist/commands/workflow/processor.d.ts +7 -7
- package/dist/commands/workflow/processor.js +44 -44
- package/dist/config/{feature-status.d.ts → issue-status.d.ts} +14 -14
- package/dist/config/{feature-status.js → issue-status.js} +14 -14
- package/dist/errors/index.d.ts +6 -6
- package/dist/errors/index.js +11 -11
- package/dist/index.js +90 -1
- package/dist/phases/app-store-generation/context.js +6 -6
- package/dist/phases/app-store-generation/index.js +2 -2
- package/dist/phases/app-store-generation/prompts.js +2 -2
- package/dist/phases/autonomous/index.d.ts +3 -3
- package/dist/phases/autonomous/index.js +37 -37
- package/dist/phases/autonomous/prompts.d.ts +2 -2
- package/dist/phases/autonomous/prompts.js +4 -4
- package/dist/phases/branch-planning/context.d.ts +3 -3
- package/dist/phases/branch-planning/context.js +12 -12
- package/dist/phases/branch-planning/index.d.ts +3 -3
- package/dist/phases/branch-planning/index.js +32 -32
- package/dist/phases/branch-planning/outcome.d.ts +5 -5
- package/dist/phases/branch-planning/outcome.js +12 -12
- package/dist/phases/branch-planning/prompts.d.ts +3 -3
- package/dist/phases/branch-planning/prompts.js +13 -13
- package/dist/phases/bug-fixing/analyzer.d.ts +2 -2
- package/dist/phases/bug-fixing/analyzer.js +13 -13
- package/dist/phases/bug-fixing/context-fetcher.d.ts +3 -3
- package/dist/phases/bug-fixing/context-fetcher.js +18 -18
- package/dist/phases/bug-fixing/mcp-server.js +17 -18
- package/dist/phases/chat-processor/context.d.ts +5 -5
- package/dist/phases/chat-processor/context.js +17 -17
- package/dist/phases/chat-processor/index.d.ts +4 -4
- package/dist/phases/chat-processor/index.js +17 -17
- package/dist/phases/chat-processor/product-context.d.ts +3 -3
- package/dist/phases/chat-processor/product-context.js +16 -16
- package/dist/phases/chat-processor/product-prompts.d.ts +1 -1
- package/dist/phases/chat-processor/product-prompts.js +10 -10
- package/dist/phases/chat-processor/product-tools.d.ts +2 -2
- package/dist/phases/chat-processor/product-tools.js +33 -33
- package/dist/phases/chat-processor/prompts.d.ts +3 -3
- package/dist/phases/chat-processor/prompts.js +22 -22
- package/dist/phases/chat-processor/tools.js +46 -46
- package/dist/phases/code-implementation/branch-pr-creator.d.ts +3 -3
- package/dist/phases/code-implementation/branch-pr-creator.js +5 -5
- package/dist/phases/code-implementation/context.d.ts +3 -3
- package/dist/phases/code-implementation/context.js +18 -18
- package/dist/phases/code-implementation/index.d.ts +4 -4
- package/dist/phases/code-implementation/index.js +88 -88
- package/dist/phases/code-implementation/outcome.d.ts +3 -3
- package/dist/phases/code-implementation/outcome.js +6 -6
- package/dist/phases/code-implementation/prompts.d.ts +1 -1
- package/dist/phases/code-implementation/prompts.js +6 -6
- package/dist/phases/code-implementation-verification/agent.d.ts +3 -3
- package/dist/phases/code-implementation-verification/agent.js +5 -5
- package/dist/phases/code-implementation-verification/index.d.ts +3 -3
- package/dist/phases/code-implementation-verification/index.js +11 -11
- package/dist/phases/code-implementation-verification/prompts.d.ts +3 -3
- package/dist/phases/code-implementation-verification/prompts.js +7 -7
- package/dist/phases/code-refine/context.d.ts +8 -8
- package/dist/phases/code-refine/context.js +29 -29
- package/dist/phases/code-refine/index.d.ts +2 -2
- package/dist/phases/code-refine/index.js +20 -20
- package/dist/phases/code-refine/prompts.d.ts +1 -1
- package/dist/phases/code-refine/prompts.js +3 -3
- package/dist/phases/code-refine/refine-iteration.d.ts +1 -1
- package/dist/phases/code-refine/refine-iteration.js +4 -4
- package/dist/phases/code-refine/retry-handler.js +2 -2
- package/dist/phases/code-refine-verification/index.js +10 -10
- package/dist/phases/code-refine-verification/types.d.ts +2 -2
- package/dist/phases/code-review/context.d.ts +8 -8
- package/dist/phases/code-review/context.js +25 -25
- package/dist/phases/code-review/diff-utils.d.ts +1 -1
- package/dist/phases/code-review/diff-utils.js +1 -1
- package/dist/phases/code-review/index.d.ts +2 -2
- package/dist/phases/code-review/index.js +26 -26
- package/dist/phases/code-testing/analyzer.d.ts +2 -2
- package/dist/phases/code-testing/analyzer.js +18 -18
- package/dist/phases/code-testing/context-fetcher.d.ts +3 -3
- package/dist/phases/code-testing/context-fetcher.js +16 -16
- package/dist/phases/code-testing/prompts.d.ts +1 -1
- package/dist/phases/code-testing/prompts.js +5 -5
- package/dist/phases/find-bugs/index.d.ts +30 -0
- package/dist/phases/find-bugs/index.js +216 -0
- package/dist/phases/find-bugs/prompts.d.ts +22 -0
- package/dist/phases/find-bugs/prompts.js +101 -0
- package/dist/phases/find-bugs/state.d.ts +19 -0
- package/dist/phases/find-bugs/state.js +13 -0
- package/dist/phases/find-bugs/types.d.ts +21 -0
- package/dist/phases/find-bugs/types.js +16 -0
- package/dist/phases/find-features/index.d.ts +40 -0
- package/dist/phases/find-features/index.js +279 -0
- package/dist/phases/find-features/prompts.d.ts +43 -0
- package/dist/phases/find-features/prompts.js +138 -0
- package/dist/phases/find-features/state.d.ts +25 -0
- package/dist/phases/find-features/state.js +22 -0
- package/dist/phases/find-features/types.d.ts +27 -0
- package/dist/phases/find-features/types.js +16 -0
- package/dist/phases/find-shared/git.d.ts +24 -0
- package/dist/phases/find-shared/git.js +60 -0
- package/dist/phases/find-shared/mcp.d.ts +33 -0
- package/dist/phases/find-shared/mcp.js +69 -0
- package/dist/phases/find-shared/scan-state.d.ts +33 -0
- package/dist/phases/find-shared/scan-state.js +112 -0
- package/dist/phases/find-smells/index.d.ts +47 -0
- package/dist/phases/find-smells/index.js +278 -0
- package/dist/phases/find-smells/prompts.d.ts +30 -0
- package/dist/phases/find-smells/prompts.js +129 -0
- package/dist/phases/find-smells/state.d.ts +21 -0
- package/dist/phases/find-smells/state.js +17 -0
- package/dist/phases/find-smells/types.d.ts +51 -0
- package/dist/phases/find-smells/types.js +64 -0
- package/dist/phases/functional-testing/analyzer.d.ts +2 -2
- package/dist/phases/functional-testing/analyzer.js +40 -40
- package/dist/phases/functional-testing/context-fetcher.d.ts +3 -3
- package/dist/phases/functional-testing/context-fetcher.js +16 -16
- package/dist/phases/functional-testing/http-fallback.d.ts +2 -2
- package/dist/phases/functional-testing/http-fallback.js +9 -9
- package/dist/phases/functional-testing/mcp-server.js +23 -24
- package/dist/phases/functional-testing/prompts.d.ts +1 -1
- package/dist/phases/functional-testing/prompts.js +4 -4
- package/dist/phases/functional-testing/test-report-creator.d.ts +2 -2
- package/dist/phases/functional-testing/test-report-creator.js +10 -10
- package/dist/phases/functional-testing/test-retry-handler.js +3 -3
- package/dist/phases/growth-analysis/context.js +6 -6
- package/dist/phases/growth-analysis/index.js +2 -2
- package/dist/phases/growth-analysis/prompts.js +2 -2
- package/dist/phases/intelligence-analysis/context.js +7 -7
- package/dist/phases/intelligence-analysis/index.js +3 -3
- package/dist/phases/{feature-analysis → issue-analysis}/agent.js +1 -1
- package/dist/phases/issue-analysis/context.d.ts +24 -0
- package/dist/phases/{feature-analysis → issue-analysis}/context.js +30 -30
- package/dist/phases/issue-analysis/index.d.ts +8 -0
- package/dist/phases/{feature-analysis → issue-analysis}/index.js +29 -29
- package/dist/phases/issue-analysis/outcome.d.ts +40 -0
- package/dist/phases/{feature-analysis → issue-analysis}/outcome.js +17 -17
- package/dist/phases/{feature-analysis → issue-analysis}/prompts.d.ts +3 -3
- package/dist/phases/{feature-analysis → issue-analysis}/prompts.js +12 -12
- package/dist/phases/{feature-analysis-verification → issue-analysis-verification}/agent.d.ts +2 -2
- package/dist/phases/{feature-analysis-verification → issue-analysis-verification}/agent.js +1 -1
- package/dist/phases/{feature-analysis-verification → issue-analysis-verification}/index.d.ts +5 -5
- package/dist/phases/{feature-analysis-verification → issue-analysis-verification}/index.js +9 -9
- package/dist/phases/{feature-analysis-verification → issue-analysis-verification}/prompts.d.ts +2 -2
- package/dist/phases/{feature-analysis-verification → issue-analysis-verification}/prompts.js +7 -7
- package/dist/phases/output-contracts.js +37 -37
- package/dist/phases/pr-execution/context.d.ts +3 -3
- package/dist/phases/pr-execution/context.js +14 -14
- package/dist/phases/pr-execution/index.d.ts +2 -2
- package/dist/phases/pr-execution/index.js +22 -22
- package/dist/phases/pr-execution/outcome.d.ts +4 -4
- package/dist/phases/pr-execution/outcome.js +6 -6
- package/dist/phases/pr-execution/prompts.d.ts +4 -4
- package/dist/phases/pr-execution/prompts.js +6 -6
- package/dist/phases/pr-resolve/checklist-learner.js +2 -2
- package/dist/phases/pr-review/index.d.ts +1 -1
- package/dist/phases/pr-review/index.js +1 -1
- package/dist/phases/pr-review/prompts.d.ts +1 -1
- package/dist/phases/pr-review/prompts.js +1 -1
- package/dist/phases/pr-shared/context.d.ts +3 -3
- package/dist/phases/pr-shared/context.js +3 -3
- package/dist/phases/pr-splitting/context.d.ts +3 -3
- package/dist/phases/pr-splitting/context.js +16 -16
- package/dist/phases/pr-splitting/index.d.ts +4 -4
- package/dist/phases/pr-splitting/index.js +29 -29
- package/dist/phases/pr-splitting/outcome.d.ts +3 -3
- package/dist/phases/pr-splitting/outcome.js +7 -7
- package/dist/phases/pr-splitting/prompts.d.ts +3 -3
- package/dist/phases/pr-splitting/prompts.js +11 -11
- package/dist/phases/pull-request/creator.d.ts +4 -4
- package/dist/phases/pull-request/creator.js +25 -25
- package/dist/phases/pull-request/handler.d.ts +3 -3
- package/dist/phases/pull-request/handler.js +16 -16
- package/dist/phases/release-sync/index.js +2 -2
- package/dist/phases/run-sheet/agent.js +1 -2
- package/dist/phases/run-sheet/index.js +3 -3
- package/dist/phases/smoke-test/index.js +2 -2
- package/dist/phases/technical-design/context.d.ts +3 -3
- package/dist/phases/technical-design/context.js +11 -11
- package/dist/phases/technical-design/index.d.ts +2 -2
- package/dist/phases/technical-design/index.js +27 -27
- package/dist/phases/technical-design/outcome.d.ts +4 -4
- package/dist/phases/technical-design/outcome.js +6 -6
- package/dist/phases/technical-design/prompts.d.ts +2 -2
- package/dist/phases/technical-design/prompts.js +10 -10
- package/dist/phases/technical-design-verification/agent.d.ts +3 -3
- package/dist/phases/technical-design-verification/agent.js +4 -4
- package/dist/phases/technical-design-verification/index.d.ts +4 -4
- package/dist/phases/technical-design-verification/index.js +12 -12
- package/dist/phases/technical-design-verification/prompts.d.ts +3 -3
- package/dist/phases/technical-design-verification/prompts.js +6 -6
- package/dist/phases/test-cases-analysis/context.d.ts +5 -5
- package/dist/phases/test-cases-analysis/context.js +18 -18
- package/dist/phases/test-cases-analysis/formatters.js +7 -7
- package/dist/phases/test-cases-analysis/index.d.ts +1 -1
- package/dist/phases/test-cases-analysis/index.js +21 -21
- package/dist/phases/test-cases-analysis/outcome.d.ts +7 -7
- package/dist/phases/test-cases-analysis/outcome.js +13 -13
- package/dist/phases/test-cases-analysis/prompts.d.ts +3 -3
- package/dist/phases/test-cases-analysis/prompts.js +6 -6
- package/dist/phases/user-stories-analysis/context.d.ts +5 -5
- package/dist/phases/user-stories-analysis/context.js +18 -18
- package/dist/phases/user-stories-analysis/formatters.js +7 -7
- package/dist/phases/user-stories-analysis/index.d.ts +1 -1
- package/dist/phases/user-stories-analysis/index.js +21 -21
- package/dist/phases/user-stories-analysis/outcome.d.ts +7 -7
- package/dist/phases/user-stories-analysis/outcome.js +13 -13
- package/dist/phases/user-stories-analysis/prompts.d.ts +3 -3
- package/dist/phases/user-stories-analysis/prompts.js +10 -10
- package/dist/services/audit-logs.d.ts +10 -10
- package/dist/services/audit-logs.js +12 -12
- package/dist/services/branches.d.ts +6 -6
- package/dist/services/branches.js +16 -16
- package/dist/services/checklist.d.ts +3 -3
- package/dist/services/checklist.js +11 -11
- package/dist/services/coaching/coaching-agent.js +2 -2
- package/dist/services/coaching/coaching-loop.d.ts +1 -1
- package/dist/services/coaching/coaching-loop.js +2 -2
- package/dist/services/coaching/phase-coaching.d.ts +2 -2
- package/dist/services/coaching/phase-coaching.js +3 -3
- package/dist/services/coaching/self-rating.js +1 -1
- package/dist/services/feedbacks.d.ts +4 -4
- package/dist/services/feedbacks.js +8 -8
- package/dist/services/phase-hooks/bindings-fetcher.d.ts +4 -4
- package/dist/services/phase-hooks/bindings-fetcher.js +8 -8
- package/dist/services/phase-hooks/hook-executor.js +1 -1
- package/dist/services/phase-hooks/hook-logging.d.ts +2 -2
- package/dist/services/phase-hooks/hook-logging.js +4 -4
- package/dist/services/phase-hooks/hook-runner.d.ts +1 -1
- package/dist/services/phase-hooks/hook-runner.js +4 -4
- package/dist/services/phase-hooks/types.d.ts +3 -3
- package/dist/services/phase-ratings.d.ts +7 -7
- package/dist/services/phase-ratings.js +8 -8
- package/dist/services/pull-requests.d.ts +4 -4
- package/dist/services/pull-requests.js +11 -11
- package/dist/services/skill-resolver.d.ts +1 -1
- package/dist/services/skill-resolver.js +1 -1
- package/dist/skills/phase/app-store-generation/SKILL.md +9 -9
- package/dist/skills/phase/autonomous/SKILL.md +2 -2
- package/dist/skills/phase/branch-planning/SKILL.md +12 -12
- package/dist/skills/phase/bug-fixing/SKILL.md +1 -1
- package/dist/skills/phase/code-implementation/SKILL.md +6 -6
- package/dist/skills/phase/code-implementation-verification/SKILL.md +3 -3
- package/dist/skills/phase/code-testing/SKILL.md +5 -5
- package/dist/skills/phase/functional-testing/SKILL.md +3 -3
- package/dist/skills/phase/growth-analysis/SKILL.md +8 -8
- package/dist/skills/phase/incremental-sync/SKILL.md +6 -6
- package/dist/skills/phase/intelligence-analysis/SKILL.md +7 -7
- package/dist/skills/phase/{feature-analysis → issue-analysis}/SKILL.md +8 -8
- package/dist/skills/phase/pr-execution/SKILL.md +7 -7
- package/dist/skills/phase/pr-splitting/SKILL.md +14 -14
- package/dist/skills/phase/smoke-test/SKILL.md +1 -1
- package/dist/skills/phase/technical-design/SKILL.md +5 -5
- package/dist/skills/phase/test-cases-analysis/SKILL.md +4 -4
- package/dist/skills/phase/user-stories-analysis/SKILL.md +13 -13
- package/dist/system/session-manager.d.ts +3 -3
- package/dist/system/session-manager.js +3 -3
- package/dist/system/sleep-notification.js +2 -2
- package/dist/system/sleep-prevention.js +1 -1
- package/dist/types/index.d.ts +21 -21
- package/dist/types/{features.d.ts → issues.d.ts} +3 -3
- package/dist/types/pipeline.d.ts +4 -4
- package/dist/updater/auto-updater.d.ts +2 -2
- package/dist/updater/auto-updater.js +3 -3
- package/dist/utils/conflict-resolver.d.ts +1 -1
- package/dist/utils/conflict-resolver.js +5 -5
- package/dist/utils/formatters.d.ts +4 -4
- package/dist/utils/formatters.js +29 -29
- package/dist/utils/git-branch-manager-async.d.ts +6 -6
- package/dist/utils/git-branch-manager-async.js +41 -41
- package/dist/utils/git-branch-manager.d.ts +11 -11
- package/dist/utils/git-branch-manager.js +42 -42
- package/dist/utils/image-downloader.d.ts +4 -4
- package/dist/utils/image-downloader.js +17 -17
- package/dist/utils/pipeline-logger.d.ts +1 -1
- package/dist/utils/pipeline-logger.js +5 -5
- package/dist/workspace/workspace-manager.d.ts +17 -17
- package/dist/workspace/workspace-manager.js +21 -21
- package/package.json +1 -1
- package/vitest.config.ts +4 -0
- package/dist/api/__tests__/app-store.test.d.ts +0 -7
- package/dist/api/__tests__/app-store.test.js +0 -60
- package/dist/api/__tests__/intelligence.test.d.ts +0 -11
- package/dist/api/__tests__/intelligence.test.js +0 -315
- package/dist/api/features/__tests__/feature-utils.test.d.ts +0 -4
- package/dist/api/features/__tests__/feature-utils.test.js +0 -370
- package/dist/api/features/__tests__/status-updater.test.d.ts +0 -4
- package/dist/api/features/__tests__/status-updater.test.js +0 -88
- package/dist/api/features/approval-checker.d.ts +0 -20
- package/dist/api/features/feature-utils.d.ts +0 -23
- package/dist/api/features/feature-utils.js +0 -80
- package/dist/api/features/get-feature.d.ts +0 -5
- package/dist/api/features/get-feature.js +0 -21
- package/dist/api/features/index.d.ts +0 -8
- package/dist/api/features/index.js +0 -10
- package/dist/api/features/status-updater.d.ts +0 -41
- package/dist/api/features/update-feature.d.ts +0 -20
- package/dist/commands/build/__tests__/build.test.d.ts +0 -5
- package/dist/commands/build/__tests__/build.test.js +0 -206
- package/dist/commands/build/__tests__/detect-project.test.d.ts +0 -6
- package/dist/commands/build/__tests__/detect-project.test.js +0 -160
- package/dist/commands/build/__tests__/run-build.test.d.ts +0 -6
- package/dist/commands/build/__tests__/run-build.test.js +0 -433
- package/dist/commands/intelligence/__tests__/command.test.d.ts +0 -4
- package/dist/commands/intelligence/__tests__/command.test.js +0 -48
- package/dist/commands/workflow/core/__tests__/feature-filter.test.d.ts +0 -5
- package/dist/commands/workflow/core/__tests__/feature-filter.test.js +0 -316
- package/dist/commands/workflow/core/__tests__/pipeline-evaluator.test.d.ts +0 -4
- package/dist/commands/workflow/core/__tests__/pipeline-evaluator.test.js +0 -397
- package/dist/commands/workflow/core/__tests__/state-manager.test.d.ts +0 -4
- package/dist/commands/workflow/core/__tests__/state-manager.test.js +0 -384
- package/dist/commands/workflow/core/feature-filter.d.ts +0 -16
- package/dist/commands/workflow/core/feature-filter.js +0 -47
- package/dist/commands/workflow/feature-coordinator.d.ts +0 -18
- package/dist/config/__tests__/config.test.d.ts +0 -4
- package/dist/config/__tests__/config.test.js +0 -286
- package/dist/config/__tests__/feature-status.test.d.ts +0 -4
- package/dist/config/__tests__/feature-status.test.js +0 -111
- package/dist/errors/__tests__/index.test.d.ts +0 -4
- package/dist/errors/__tests__/index.test.js +0 -349
- package/dist/phases/app-store-generation/__tests__/agent.test.d.ts +0 -5
- package/dist/phases/app-store-generation/__tests__/agent.test.js +0 -142
- package/dist/phases/app-store-generation/__tests__/context.test.d.ts +0 -4
- package/dist/phases/app-store-generation/__tests__/context.test.js +0 -284
- package/dist/phases/app-store-generation/__tests__/prompts.test.d.ts +0 -4
- package/dist/phases/app-store-generation/__tests__/prompts.test.js +0 -122
- package/dist/phases/app-store-generation/__tests__/screenshot-composer.test.d.ts +0 -5
- package/dist/phases/app-store-generation/__tests__/screenshot-composer.test.js +0 -826
- package/dist/phases/code-review/__tests__/diff-utils.test.js +0 -101
- package/dist/phases/feature-analysis/context.d.ts +0 -24
- package/dist/phases/feature-analysis/index.d.ts +0 -8
- package/dist/phases/feature-analysis/outcome.d.ts +0 -40
- package/dist/phases/intelligence-analysis/__tests__/context.test.d.ts +0 -4
- package/dist/phases/intelligence-analysis/__tests__/context.test.js +0 -192
- package/dist/phases/intelligence-analysis/__tests__/matching.test.d.ts +0 -13
- package/dist/phases/intelligence-analysis/__tests__/matching.test.js +0 -154
- package/dist/phases/intelligence-analysis/__tests__/orchestration.test.d.ts +0 -5
- package/dist/phases/intelligence-analysis/__tests__/orchestration.test.js +0 -378
- package/dist/phases/intelligence-analysis/__tests__/prompts.test.d.ts +0 -4
- package/dist/phases/intelligence-analysis/__tests__/prompts.test.js +0 -33
- package/dist/phases/pr-execution/__tests__/file-assigner.test.d.ts +0 -1
- package/dist/phases/pr-execution/__tests__/file-assigner.test.js +0 -303
- package/dist/phases/pr-resolve/__tests__/checklist-learner.test.d.ts +0 -1
- package/dist/phases/pr-resolve/__tests__/checklist-learner.test.js +0 -157
- package/dist/phases/pr-resolve/__tests__/prompts.test.d.ts +0 -1
- package/dist/phases/pr-resolve/__tests__/prompts.test.js +0 -116
- package/dist/phases/pr-resolve/__tests__/resolve-mapping.test.d.ts +0 -1
- package/dist/phases/pr-resolve/__tests__/resolve-mapping.test.js +0 -138
- package/dist/phases/pr-resolve/__tests__/types.test.d.ts +0 -1
- package/dist/phases/pr-resolve/__tests__/types.test.js +0 -43
- package/dist/phases/pr-resolve/__tests__/workspace.test.d.ts +0 -1
- package/dist/phases/pr-resolve/__tests__/workspace.test.js +0 -111
- package/dist/phases/pr-review/__tests__/prompts.test.d.ts +0 -1
- package/dist/phases/pr-review/__tests__/prompts.test.js +0 -49
- package/dist/phases/pr-review/__tests__/review-comments.test.d.ts +0 -1
- package/dist/phases/pr-review/__tests__/review-comments.test.js +0 -110
- package/dist/phases/pr-shared/__tests__/agent-utils.test.d.ts +0 -1
- package/dist/phases/pr-shared/__tests__/agent-utils.test.js +0 -91
- package/dist/phases/pr-shared/__tests__/context.test.d.ts +0 -1
- package/dist/phases/pr-shared/__tests__/context.test.js +0 -94
- package/dist/phases/pr-splitting/__tests__/import-dep-validator.test.d.ts +0 -1
- package/dist/phases/pr-splitting/__tests__/import-dep-validator.test.js +0 -331
- package/dist/phases/run-sheet/render.d.ts +0 -60
- package/dist/phases/run-sheet/render.js +0 -297
- package/dist/phases/smoke-test/__tests__/agent.test.d.ts +0 -4
- package/dist/phases/smoke-test/__tests__/agent.test.js +0 -84
- package/dist/phases/smoke-test/__tests__/github.test.d.ts +0 -9
- package/dist/phases/smoke-test/__tests__/github.test.js +0 -120
- package/dist/phases/smoke-test/__tests__/snapshot.test.d.ts +0 -8
- package/dist/phases/smoke-test/__tests__/snapshot.test.js +0 -93
- package/dist/phases/smoke-test/github.d.ts +0 -54
- package/dist/phases/smoke-test/github.js +0 -101
- package/dist/phases/smoke-test/snapshot.d.ts +0 -27
- package/dist/phases/smoke-test/snapshot.js +0 -157
- package/dist/services/coaching/__tests__/coaching-agent.test.d.ts +0 -1
- package/dist/services/coaching/__tests__/coaching-agent.test.js +0 -74
- package/dist/services/coaching/__tests__/coaching-loop.test.d.ts +0 -1
- package/dist/services/coaching/__tests__/coaching-loop.test.js +0 -59
- package/dist/services/coaching/__tests__/self-rating.test.d.ts +0 -1
- package/dist/services/coaching/__tests__/self-rating.test.js +0 -188
- package/dist/services/lifecycle-agent/__tests__/phase-criteria.test.d.ts +0 -4
- package/dist/services/lifecycle-agent/__tests__/phase-criteria.test.js +0 -133
- package/dist/services/lifecycle-agent/__tests__/transition-rules.test.d.ts +0 -4
- package/dist/services/lifecycle-agent/__tests__/transition-rules.test.js +0 -336
- package/dist/services/lifecycle-agent/index.d.ts +0 -24
- package/dist/services/lifecycle-agent/index.js +0 -25
- package/dist/services/lifecycle-agent/phase-criteria.d.ts +0 -57
- package/dist/services/lifecycle-agent/phase-criteria.js +0 -335
- package/dist/services/lifecycle-agent/transition-rules.d.ts +0 -60
- package/dist/services/lifecycle-agent/transition-rules.js +0 -184
- package/dist/services/lifecycle-agent/types.d.ts +0 -190
- package/dist/services/lifecycle-agent/types.js +0 -12
- package/dist/services/phase-hooks/__tests__/bindings-fetcher.test.d.ts +0 -1
- package/dist/services/phase-hooks/__tests__/bindings-fetcher.test.js +0 -122
- package/dist/services/phase-hooks/__tests__/hook-executor.test.d.ts +0 -1
- package/dist/services/phase-hooks/__tests__/hook-executor.test.js +0 -321
- package/dist/services/phase-hooks/__tests__/hook-runner.test.d.ts +0 -1
- package/dist/services/phase-hooks/__tests__/hook-runner.test.js +0 -261
- package/dist/services/phase-hooks/__tests__/plugin-loader.test.d.ts +0 -1
- package/dist/services/phase-hooks/__tests__/plugin-loader.test.js +0 -158
- package/dist/services/video/__tests__/video-pipeline.test.d.ts +0 -6
- package/dist/services/video/__tests__/video-pipeline.test.js +0 -249
- package/dist/types/features.js +0 -1
- package/dist/workspace/__tests__/workspace-manager.test.d.ts +0 -7
- package/dist/workspace/__tests__/workspace-manager.test.js +0 -52
- /package/dist/api/{features → issues}/batch-operations.d.ts +0 -0
- /package/dist/api/{features → issues}/batch-operations.js +0 -0
- /package/dist/phases/{feature-analysis → issue-analysis}/agent.d.ts +0 -0
- /package/dist/skills/phase/{feature-analysis-verification → issue-analysis-verification}/SKILL.md +0 -0
- /package/dist/{phases/code-review/__tests__/diff-utils.test.d.ts → types/issues.js} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { processConditionals, resolveSkill, substituteVariables, } from '../../services/skill-resolver.js';
|
|
2
2
|
import { OUTPUT_CONTRACTS } from '../output-contracts.js';
|
|
3
|
-
export const createTechnicalDesignSystemPrompt = async (_config, mcpServerUrl, mcpToken,
|
|
3
|
+
export const createTechnicalDesignSystemPrompt = async (_config, mcpServerUrl, mcpToken, issueId, projectDir) => {
|
|
4
4
|
const skill = await resolveSkill('phase/technical-design', {
|
|
5
5
|
projectDir,
|
|
6
6
|
});
|
|
@@ -13,14 +13,14 @@ export const createTechnicalDesignSystemPrompt = async (_config, mcpServerUrl, m
|
|
|
13
13
|
MCP_TOKEN: mcpToken || '',
|
|
14
14
|
});
|
|
15
15
|
prompt = processConditionals(prompt, {
|
|
16
|
-
hasMcp: !!(mcpServerUrl && mcpToken &&
|
|
16
|
+
hasMcp: !!(mcpServerUrl && mcpToken && issueId),
|
|
17
17
|
});
|
|
18
18
|
return `${prompt}\n\n${OUTPUT_CONTRACTS['technical-design']}`;
|
|
19
19
|
};
|
|
20
|
-
export const createTechnicalDesignPromptWithContext = (
|
|
20
|
+
export const createTechnicalDesignPromptWithContext = (issueId, contextInfo, existingTechnicalDesign, isIncrementalUpdate = false) => {
|
|
21
21
|
// If incremental update mode (existing design + feedbacks), create focused update prompt
|
|
22
22
|
if (isIncrementalUpdate && existingTechnicalDesign) {
|
|
23
|
-
return `Update the technical design for
|
|
23
|
+
return `Update the technical design for issue ID: ${issueId} based on human feedbacks
|
|
24
24
|
|
|
25
25
|
## Current Technical Design
|
|
26
26
|
|
|
@@ -43,7 +43,7 @@ You are in **INCREMENTAL UPDATE** mode. This means:
|
|
|
43
43
|
**CRITICAL RULE**:
|
|
44
44
|
- **ONLY optimize based on feedbacks** - Do NOT make other improvements or optimizations
|
|
45
45
|
- **Do NOT proactively improve** other parts of the design that feedbacks don't mention
|
|
46
|
-
- **Do NOT add
|
|
46
|
+
- **Do NOT add issues** that feedbacks don't request
|
|
47
47
|
- **Do NOT refactor** sections that feedbacks don't ask about
|
|
48
48
|
- If you see potential improvements but no feedback requests them, IGNORE them
|
|
49
49
|
- Your job is ONLY to address the specific feedbacks, nothing more
|
|
@@ -75,7 +75,7 @@ Begin by reviewing the feedbacks and identifying which sections of the current d
|
|
|
75
75
|
const designMode = existingTechnicalDesign
|
|
76
76
|
? 'Update and improve the existing technical design, or redesign if needed'
|
|
77
77
|
: 'Generate a comprehensive technical design';
|
|
78
|
-
return `${designMode} for
|
|
78
|
+
return `${designMode} for issue ID: ${issueId}
|
|
79
79
|
|
|
80
80
|
${existingTechnicalDesign ? `## Existing Technical Design\n\n${existingTechnicalDesign}\n\n` : ''}${contextInfo}
|
|
81
81
|
|
|
@@ -91,15 +91,15 @@ Follow this systematic approach:
|
|
|
91
91
|
- Examine README.md, CLAUDE.md or other documentation files if they exist
|
|
92
92
|
|
|
93
93
|
2. **Technical Design Creation**: Create comprehensive technical design documentation that addresses:
|
|
94
|
-
- **Architecture Overview**: How the
|
|
94
|
+
- **Architecture Overview**: How the issue integrates with the existing system
|
|
95
95
|
- **Component Design**: Frontend components, backend services, database changes needed
|
|
96
|
-
- **Data Flow**: How data moves through the system for this
|
|
96
|
+
- **Data Flow**: How data moves through the system for this issue
|
|
97
97
|
- **API Design**: Endpoints, request/response formats, error handling
|
|
98
98
|
- **Database Design**: Schema changes, indexes, relationships, migration strategy
|
|
99
99
|
- **Security**: Authentication, authorization, data validation requirements
|
|
100
100
|
- **Performance**: Caching strategies, optimization, scalability considerations
|
|
101
101
|
- **Testing Strategy**: Unit, integration, and end-to-end testing approaches
|
|
102
|
-
- **Deployment**: How the
|
|
102
|
+
- **Deployment**: How the issue will be deployed and monitored
|
|
103
103
|
|
|
104
104
|
3. **Implementation Guidance**: Provide specific implementation recommendations and considerations
|
|
105
105
|
|
|
@@ -197,7 +197,7 @@ You MUST return ONLY the JSON object below. Do NOT include any explanatory text,
|
|
|
197
197
|
\`\`\`json
|
|
198
198
|
{
|
|
199
199
|
"technical_design_result": {
|
|
200
|
-
"
|
|
200
|
+
"issue_id": "...",
|
|
201
201
|
"status": "success",
|
|
202
202
|
"summary": "Improved technical design based on verification feedback",
|
|
203
203
|
"technical_design": "The COMPLETE improved technical design document in markdown format",
|
|
@@ -41,9 +41,9 @@ export interface ChecklistVerificationResult {
|
|
|
41
41
|
export interface VerifyTechnicalDesignOptions {
|
|
42
42
|
checklistContext: ChecklistPhaseContext;
|
|
43
43
|
feedbacksContext?: FeedbacksContext | null;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
issueId: string;
|
|
45
|
+
issueName: string;
|
|
46
|
+
issueDescription?: string;
|
|
47
47
|
technicalDesign: string;
|
|
48
48
|
verbose?: boolean;
|
|
49
49
|
}
|
|
@@ -57,7 +57,7 @@ async function* prompt(verificationPrompt) {
|
|
|
57
57
|
*/
|
|
58
58
|
// eslint-disable-next-line complexity -- orchestration function with checklist verification and result processing
|
|
59
59
|
export async function verifyTechnicalDesignCompliance(options, _config) {
|
|
60
|
-
const { checklistContext, feedbacksContext,
|
|
60
|
+
const { checklistContext, feedbacksContext, issueId, issueName, issueDescription, technicalDesign, verbose, } = options;
|
|
61
61
|
const totalChecklistItems = checklistContext.checklists.reduce((sum, checklist) => sum + checklist.items.length, 0);
|
|
62
62
|
const totalFeedbacks = feedbacksContext?.feedbacks?.length || 0;
|
|
63
63
|
const hasFeedbacks = totalFeedbacks > 0;
|
|
@@ -73,9 +73,9 @@ export async function verifyTechnicalDesignCompliance(options, _config) {
|
|
|
73
73
|
const verificationPrompt = await createTechnicalDesignVerificationPrompt({
|
|
74
74
|
checklistContext,
|
|
75
75
|
feedbacksContext: feedbacksContext || undefined,
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
76
|
+
issueId,
|
|
77
|
+
issueName,
|
|
78
|
+
issueDescription,
|
|
79
79
|
technicalDesign,
|
|
80
80
|
});
|
|
81
81
|
let lastAssistantResponse = '';
|
|
@@ -3,7 +3,7 @@ import { type FeedbacksContext } from '../../services/feedbacks.js';
|
|
|
3
3
|
import { type EdsgerConfig } from '../../types/index.js';
|
|
4
4
|
import { type ChecklistVerificationResult } from '../technical-design-verification/agent.js';
|
|
5
5
|
export interface TechnicalDesignResult {
|
|
6
|
-
|
|
6
|
+
issueId: string;
|
|
7
7
|
technicalDesign: string | null;
|
|
8
8
|
status: 'success' | 'error';
|
|
9
9
|
summary: string;
|
|
@@ -26,9 +26,9 @@ export interface TechnicalDesignVerificationOptions {
|
|
|
26
26
|
technicalDesign: string;
|
|
27
27
|
checklistContext: ChecklistPhaseContext | null;
|
|
28
28
|
feedbacksContext: FeedbacksContext | null;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
issueId: string;
|
|
30
|
+
issueName: string;
|
|
31
|
+
issueDescription: string | undefined;
|
|
32
32
|
config: EdsgerConfig;
|
|
33
33
|
currentIteration: number;
|
|
34
34
|
maxIterations: number;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { logIssueVerificationEvent } from '../../services/audit-logs.js';
|
|
2
2
|
import { processChecklistItemResultsFromResponse, } from '../../services/checklist.js';
|
|
3
3
|
import { resolveFeedbacks, } from '../../services/feedbacks.js';
|
|
4
4
|
import { logError, logInfo } from '../../utils/logger.js';
|
|
@@ -6,7 +6,7 @@ import { createTechnicalDesignImprovementPrompt } from '../technical-design/prom
|
|
|
6
6
|
import { verifyTechnicalDesignCompliance, } from '../technical-design-verification/agent.js';
|
|
7
7
|
// eslint-disable-next-line complexity -- orchestration function coordinating design verification and improvement cycles
|
|
8
8
|
export async function performVerificationCycle(opts) {
|
|
9
|
-
const { technicalDesign, checklistContext, feedbacksContext,
|
|
9
|
+
const { technicalDesign, checklistContext, feedbacksContext, issueId, issueName, issueDescription, config, currentIteration, maxIterations, verbose, } = opts;
|
|
10
10
|
// No verification needed if no checklist context
|
|
11
11
|
if (!checklistContext || checklistContext.checklists.length === 0) {
|
|
12
12
|
return { passed: true, verificationResult: null };
|
|
@@ -17,9 +17,9 @@ export async function performVerificationCycle(opts) {
|
|
|
17
17
|
const verificationResult = await verifyTechnicalDesignCompliance({
|
|
18
18
|
checklistContext,
|
|
19
19
|
feedbacksContext,
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
issueId,
|
|
21
|
+
issueName,
|
|
22
|
+
issueDescription,
|
|
23
23
|
technicalDesign,
|
|
24
24
|
verbose,
|
|
25
25
|
}, config);
|
|
@@ -36,8 +36,8 @@ export async function performVerificationCycle(opts) {
|
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
// Log verification success
|
|
39
|
-
await
|
|
40
|
-
|
|
39
|
+
await logIssueVerificationEvent({
|
|
40
|
+
issueId,
|
|
41
41
|
phase: 'technical_design',
|
|
42
42
|
iteration: currentIteration,
|
|
43
43
|
result: 'success',
|
|
@@ -55,7 +55,7 @@ export async function performVerificationCycle(opts) {
|
|
|
55
55
|
value: item.verification_status,
|
|
56
56
|
notes: item.verification_reason || undefined,
|
|
57
57
|
}));
|
|
58
|
-
await processChecklistItemResultsFromResponse({
|
|
58
|
+
await processChecklistItemResultsFromResponse({ issueId }, 'technical_design', checklistItemResults, verbose);
|
|
59
59
|
// Mark confirmed feedbacks as resolved
|
|
60
60
|
if (verificationResult.feedback_verifications &&
|
|
61
61
|
verificationResult.feedback_verifications.length > 0) {
|
|
@@ -63,7 +63,7 @@ export async function performVerificationCycle(opts) {
|
|
|
63
63
|
.filter((fb) => fb.verification_status === 'confirmed')
|
|
64
64
|
.map((fb) => fb.feedback_id);
|
|
65
65
|
if (confirmedFeedbackIds.length > 0) {
|
|
66
|
-
await resolveFeedbacks({
|
|
66
|
+
await resolveFeedbacks({ issueId }, confirmedFeedbackIds, verbose);
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
return { passed: true, verificationResult };
|
|
@@ -78,8 +78,8 @@ export async function performVerificationCycle(opts) {
|
|
|
78
78
|
}
|
|
79
79
|
logError(`❌ Iteration ${currentIteration}: Verification FAILED - ${errorMessages.join('; ')}`);
|
|
80
80
|
// Log verification failure with improvement suggestions
|
|
81
|
-
await
|
|
82
|
-
|
|
81
|
+
await logIssueVerificationEvent({
|
|
82
|
+
issueId,
|
|
83
83
|
phase: 'technical_design',
|
|
84
84
|
iteration: currentIteration,
|
|
85
85
|
result: 'error',
|
|
@@ -147,6 +147,6 @@ export async function performVerificationCycle(opts) {
|
|
|
147
147
|
value: item.verification_status,
|
|
148
148
|
notes: item.verification_reason || undefined,
|
|
149
149
|
}));
|
|
150
|
-
await processChecklistItemResultsFromResponse({
|
|
150
|
+
await processChecklistItemResultsFromResponse({ issueId }, 'technical_design', checklistItemResults, verbose);
|
|
151
151
|
return { passed: false, verificationResult };
|
|
152
152
|
}
|
|
@@ -4,9 +4,9 @@ export declare const createTechnicalDesignVerificationSystemPrompt: (projectDir?
|
|
|
4
4
|
export interface TechnicalDesignVerificationPromptOptions {
|
|
5
5
|
checklistContext: ChecklistPhaseContext;
|
|
6
6
|
feedbacksContext?: FeedbacksContext;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
issueId: string;
|
|
8
|
+
issueName: string;
|
|
9
|
+
issueDescription?: string;
|
|
10
10
|
technicalDesign: string;
|
|
11
11
|
}
|
|
12
12
|
export declare const createTechnicalDesignVerificationPrompt: (options: TechnicalDesignVerificationPromptOptions) => Promise<string>;
|
|
@@ -13,7 +13,7 @@ export const createTechnicalDesignVerificationSystemPrompt = async (projectDir)
|
|
|
13
13
|
${OUTPUT_CONTRACTS['technical-design-verification']}`;
|
|
14
14
|
};
|
|
15
15
|
export const createTechnicalDesignVerificationPrompt = async (options) => {
|
|
16
|
-
const { checklistContext, feedbacksContext,
|
|
16
|
+
const { checklistContext, feedbacksContext, issueId, issueName, issueDescription, technicalDesign, } = options;
|
|
17
17
|
// Format all checklist items with their requirements
|
|
18
18
|
const checklistItemsSection = checklistContext.checklists
|
|
19
19
|
.flatMap((checklist) => checklist.items.map((item) => {
|
|
@@ -37,7 +37,7 @@ export const createTechnicalDesignVerificationPrompt = async (options) => {
|
|
|
37
37
|
if (!feedback.content) {
|
|
38
38
|
return feedback;
|
|
39
39
|
}
|
|
40
|
-
const { processedMarkdown } = await downloadImagesForClaudeCode(feedback.content,
|
|
40
|
+
const { processedMarkdown } = await downloadImagesForClaudeCode(feedback.content, issueId);
|
|
41
41
|
return { ...feedback, content: processedMarkdown };
|
|
42
42
|
}));
|
|
43
43
|
feedbacksSection = `
|
|
@@ -64,11 +64,11 @@ ${processedFeedbacks
|
|
|
64
64
|
|
|
65
65
|
You are verifying that a technical design document satisfies checklist requirements${totalFeedbacks > 0 ? ' and addresses human feedbacks' : ''}.
|
|
66
66
|
|
|
67
|
-
##
|
|
67
|
+
## Issue Context
|
|
68
68
|
|
|
69
|
-
**
|
|
70
|
-
**
|
|
71
|
-
**Description**: ${
|
|
69
|
+
**Issue**: ${issueName}
|
|
70
|
+
**Issue ID**: ${issueId}
|
|
71
|
+
**Description**: ${issueDescription || 'No description'}
|
|
72
72
|
|
|
73
73
|
## Technical Design Document
|
|
74
74
|
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { type ProductInfo } from '../../api/products.js';
|
|
2
2
|
import { type ChecklistPhaseContext } from '../../services/checklist.js';
|
|
3
|
-
import type {
|
|
3
|
+
import type { IssueInfo, TestCase, UserStory } from '../../types/issues.js';
|
|
4
4
|
export interface TestCasesAnalysisContext {
|
|
5
|
-
|
|
5
|
+
issue: IssueInfo;
|
|
6
6
|
product: ProductInfo;
|
|
7
7
|
existing_user_stories: UserStory[];
|
|
8
8
|
existing_test_cases: TestCase[];
|
|
9
9
|
}
|
|
10
|
-
export declare function fetchTestCasesAnalysisContext(
|
|
11
|
-
export declare function prepareTestCasesAnalysisContext(
|
|
12
|
-
|
|
10
|
+
export declare function fetchTestCasesAnalysisContext(issueId: string, verbose?: boolean): Promise<TestCasesAnalysisContext>;
|
|
11
|
+
export declare function prepareTestCasesAnalysisContext(issueId: string, checklistContext: ChecklistPhaseContext | null | undefined, verbose?: boolean): Promise<{
|
|
12
|
+
issueContext: TestCasesAnalysisContext;
|
|
13
13
|
analysisPrompt: string;
|
|
14
14
|
hasFeedbacks: boolean;
|
|
15
15
|
}>;
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getIssue, getTestCases, getUserStories, } from '../../api/issues/index.js';
|
|
2
2
|
import { getProduct } from '../../api/products.js';
|
|
3
3
|
import { formatChecklistsForContext, } from '../../services/checklist.js';
|
|
4
4
|
import { formatFeedbacksForContext, getFeedbacksForPhase, } from '../../services/feedbacks.js';
|
|
5
5
|
import { logError, logInfo } from '../../utils/logger.js';
|
|
6
6
|
import { formatTestCasesAnalysisContext } from './formatters.js';
|
|
7
7
|
import { createTestCasesAnalysisPromptWithContext, createTestCasesFeedbackFocusedPromptWithContext, } from './prompts.js';
|
|
8
|
-
export async function fetchTestCasesAnalysisContext(
|
|
8
|
+
export async function fetchTestCasesAnalysisContext(issueId, verbose) {
|
|
9
9
|
try {
|
|
10
10
|
if (verbose) {
|
|
11
|
-
logInfo(`Fetching test cases analysis context for
|
|
11
|
+
logInfo(`Fetching test cases analysis context for issue: ${issueId}`);
|
|
12
12
|
}
|
|
13
|
-
const [
|
|
14
|
-
|
|
15
|
-
getUserStories(
|
|
16
|
-
getTestCases(
|
|
13
|
+
const [issue, existingUserStories, existingTestCases] = await Promise.all([
|
|
14
|
+
getIssue(issueId, verbose),
|
|
15
|
+
getUserStories(issueId, verbose),
|
|
16
|
+
getTestCases(issueId, verbose),
|
|
17
17
|
]);
|
|
18
|
-
const product = await getProduct(
|
|
18
|
+
const product = await getProduct(issue.product_id, verbose);
|
|
19
19
|
if (verbose) {
|
|
20
20
|
logInfo(`✅ Test cases analysis context fetched successfully:`);
|
|
21
|
-
logInfo(`
|
|
21
|
+
logInfo(` Issue: ${issue.name}`);
|
|
22
22
|
logInfo(` Product: ${product.name}`);
|
|
23
23
|
logInfo(` User Stories: ${existingUserStories.length}`);
|
|
24
24
|
logInfo(` Existing Test Cases: ${existingTestCases.length}`);
|
|
25
25
|
}
|
|
26
26
|
return {
|
|
27
|
-
|
|
27
|
+
issue,
|
|
28
28
|
product,
|
|
29
29
|
existing_user_stories: existingUserStories,
|
|
30
30
|
existing_test_cases: existingTestCases,
|
|
@@ -36,12 +36,12 @@ export async function fetchTestCasesAnalysisContext(featureId, verbose) {
|
|
|
36
36
|
throw new Error(`Context fetch failed: ${errorMessage}`);
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
|
-
export async function prepareTestCasesAnalysisContext(
|
|
39
|
+
export async function prepareTestCasesAnalysisContext(issueId, checklistContext, verbose) {
|
|
40
40
|
if (verbose) {
|
|
41
41
|
logInfo('Fetching test cases analysis context via MCP endpoints...');
|
|
42
42
|
}
|
|
43
|
-
const
|
|
44
|
-
const { content: contextInfo, downloadedImages } = await formatTestCasesAnalysisContext(
|
|
43
|
+
const issueContext = await fetchTestCasesAnalysisContext(issueId, verbose);
|
|
44
|
+
const { content: contextInfo, downloadedImages } = await formatTestCasesAnalysisContext(issueContext);
|
|
45
45
|
if (verbose && downloadedImages.length > 0) {
|
|
46
46
|
logInfo(`Downloaded ${downloadedImages.length} images for Claude Code:`);
|
|
47
47
|
downloadedImages.forEach((img) => {
|
|
@@ -52,7 +52,7 @@ export async function prepareTestCasesAnalysisContext(featureId, checklistContex
|
|
|
52
52
|
let hasFeedbacks = false;
|
|
53
53
|
// Add feedbacks context
|
|
54
54
|
try {
|
|
55
|
-
const feedbacksContext = await getFeedbacksForPhase({
|
|
55
|
+
const feedbacksContext = await getFeedbacksForPhase({ issueId, verbose }, 'test-cases-analysis');
|
|
56
56
|
if (feedbacksContext.feedbacks.length > 0) {
|
|
57
57
|
hasFeedbacks = true;
|
|
58
58
|
const feedbacksInfo = await formatFeedbacksForContext(feedbacksContext);
|
|
@@ -75,12 +75,12 @@ export async function prepareTestCasesAnalysisContext(featureId, checklistContex
|
|
|
75
75
|
logInfo(`Added ${checklistContext.checklists.length} checklists to analysis context`);
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
|
-
const hasExistingArtifacts =
|
|
78
|
+
const hasExistingArtifacts = issueContext.existing_test_cases.length > 0;
|
|
79
79
|
const analysisPrompt = hasFeedbacks && hasExistingArtifacts
|
|
80
|
-
? createTestCasesFeedbackFocusedPromptWithContext(
|
|
81
|
-
: createTestCasesAnalysisPromptWithContext(
|
|
80
|
+
? createTestCasesFeedbackFocusedPromptWithContext(issueId, finalContextInfo)
|
|
81
|
+
: createTestCasesAnalysisPromptWithContext(issueId, finalContextInfo);
|
|
82
82
|
if (verbose && hasFeedbacks && hasExistingArtifacts) {
|
|
83
83
|
logInfo('Using feedback-focused prompt (re-run with human feedbacks detected)');
|
|
84
84
|
}
|
|
85
|
-
return {
|
|
85
|
+
return { issueContext, analysisPrompt, hasFeedbacks };
|
|
86
86
|
}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { formatTestCases, formatUserStories } from '../../utils/formatters.js';
|
|
2
2
|
import { downloadImagesForClaudeCode, } from '../../utils/image-downloader.js';
|
|
3
3
|
export async function formatTestCasesAnalysisContext(context) {
|
|
4
|
-
const { processedMarkdown, downloadedImages } = await downloadImagesForClaudeCode(context.
|
|
4
|
+
const { processedMarkdown, downloadedImages } = await downloadImagesForClaudeCode(context.issue.description || 'No description provided', context.issue.id);
|
|
5
5
|
const content = `# Test Cases Analysis Context
|
|
6
6
|
|
|
7
|
-
##
|
|
8
|
-
- **ID**: ${context.
|
|
9
|
-
- **Name**: ${context.
|
|
7
|
+
## Issue Information
|
|
8
|
+
- **ID**: ${context.issue.id}
|
|
9
|
+
- **Name**: ${context.issue.name}
|
|
10
10
|
- **Description**:
|
|
11
11
|
${processedMarkdown}
|
|
12
12
|
|
|
13
13
|
${downloadedImages.length > 0 ? '**IMPORTANT**: The description contains images that have been downloaded locally. Please use the Read tool to view these images to fully understand the requirements.' : ''}
|
|
14
14
|
|
|
15
|
-
- **Current Status**: ${context.
|
|
15
|
+
- **Current Status**: ${context.issue.status}
|
|
16
16
|
|
|
17
17
|
## Product Information
|
|
18
18
|
- **Product**: ${context.product.name}
|
|
@@ -26,10 +26,10 @@ ${formatUserStories(context.existing_user_stories)}
|
|
|
26
26
|
${formatTestCases(context.existing_test_cases)}
|
|
27
27
|
|
|
28
28
|
## Current Technical Design
|
|
29
|
-
${context.
|
|
29
|
+
${context.issue.technical_design || 'No technical design available yet'}
|
|
30
30
|
|
|
31
31
|
---
|
|
32
32
|
|
|
33
|
-
**Analysis Instructions**: Based on the above
|
|
33
|
+
**Analysis Instructions**: Based on the above issue information, user stories, and existing test cases, create comprehensive test cases that ensure thorough testing coverage.`;
|
|
34
34
|
return { content, downloadedImages };
|
|
35
35
|
}
|
|
@@ -2,7 +2,7 @@ import { type ChecklistPhaseContext } from '../../services/checklist.js';
|
|
|
2
2
|
import { type EdsgerConfig } from '../../types/index.js';
|
|
3
3
|
import { type TestCasesAnalysisResult } from './outcome.js';
|
|
4
4
|
export interface TestCasesAnalysisOptions {
|
|
5
|
-
|
|
5
|
+
issueId: string;
|
|
6
6
|
verbose?: boolean;
|
|
7
7
|
maxVerificationIterations?: number;
|
|
8
8
|
}
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { logIssuePhaseEvent } from '../../services/audit-logs.js';
|
|
2
2
|
import { extractChecklistItems, runPhaseCoaching, } from '../../services/coaching/index.js';
|
|
3
3
|
import { logError, logInfo, logWarning } from '../../utils/logger.js';
|
|
4
|
-
import { performVerificationCycle } from '../
|
|
4
|
+
import { performVerificationCycle } from '../issue-analysis-verification/index.js';
|
|
5
5
|
import { executeTestCasesAnalysisQuery, parseAnalysisResult } from './agent.js';
|
|
6
6
|
import { prepareTestCasesAnalysisContext } from './context.js';
|
|
7
7
|
import { buildTestCasesAnalysisResult, deleteSpecificTestCases, deleteTestCaseArtifacts, getAllDraftTestCaseIds, resetReadyTestCasesToDraft, saveTestCasesAsDraft, updateTestCasesToReady, } from './outcome.js';
|
|
8
8
|
import { createTestCasesAnalysisSystemPrompt } from './prompts.js';
|
|
9
9
|
// eslint-disable-next-line complexity
|
|
10
10
|
export const analyseTestCases = async (options, config, checklistContext) => {
|
|
11
|
-
const {
|
|
11
|
+
const { issueId, verbose } = options;
|
|
12
12
|
if (verbose) {
|
|
13
|
-
logInfo(`Starting test cases analysis for
|
|
13
|
+
logInfo(`Starting test cases analysis for issue ID: ${issueId}`);
|
|
14
14
|
}
|
|
15
15
|
try {
|
|
16
16
|
// Reset pending_approval test cases to draft so AI can manage them on re-run
|
|
17
|
-
const resetCount = await resetReadyTestCasesToDraft(
|
|
17
|
+
const resetCount = await resetReadyTestCasesToDraft(issueId, verbose);
|
|
18
18
|
if (verbose && resetCount > 0) {
|
|
19
19
|
logInfo(`✅ Reset ${resetCount} pending_approval test cases to draft for re-analysis`);
|
|
20
20
|
}
|
|
21
|
-
const context = await prepareTestCasesAnalysisContext(
|
|
21
|
+
const context = await prepareTestCasesAnalysisContext(issueId, checklistContext, verbose);
|
|
22
22
|
const systemPrompt = await createTestCasesAnalysisSystemPrompt();
|
|
23
23
|
const initialAnalysisPrompt = context.analysisPrompt;
|
|
24
24
|
const maxIterations = options.maxVerificationIterations || 10;
|
|
@@ -37,8 +37,8 @@ export const analyseTestCases = async (options, config, checklistContext) => {
|
|
|
37
37
|
logInfo(`\n🔄 Iteration ${currentIteration}/${maxIterations}: Improving test cases based on verification feedback...`);
|
|
38
38
|
}
|
|
39
39
|
if (currentIteration > 1) {
|
|
40
|
-
await
|
|
41
|
-
|
|
40
|
+
await logIssuePhaseEvent({
|
|
41
|
+
issueId,
|
|
42
42
|
eventType: 'phase_started',
|
|
43
43
|
phase: 'test_cases_analysis',
|
|
44
44
|
result: 'info',
|
|
@@ -54,8 +54,8 @@ export const analyseTestCases = async (options, config, checklistContext) => {
|
|
|
54
54
|
if (!structuredAnalysisResult) {
|
|
55
55
|
break;
|
|
56
56
|
}
|
|
57
|
-
await
|
|
58
|
-
|
|
57
|
+
await logIssuePhaseEvent({
|
|
58
|
+
issueId,
|
|
59
59
|
eventType: 'phase_completed',
|
|
60
60
|
phase: 'test_cases_analysis',
|
|
61
61
|
result: 'success',
|
|
@@ -73,14 +73,14 @@ export const analyseTestCases = async (options, config, checklistContext) => {
|
|
|
73
73
|
if (verbose) {
|
|
74
74
|
logInfo('🗑️ Processing test case deletions identified by AI...');
|
|
75
75
|
}
|
|
76
|
-
await deleteSpecificTestCases(
|
|
76
|
+
await deleteSpecificTestCases(issueId, structuredAnalysisResult.deleted_test_case_ids || [], structuredAnalysisResult.deletion_reasons || {}, verbose);
|
|
77
77
|
}
|
|
78
78
|
// Save test cases as draft
|
|
79
|
-
const { testCaseIds } = await saveTestCasesAsDraft(
|
|
79
|
+
const { testCaseIds } = await saveTestCasesAsDraft(issueId, structuredAnalysisResult.created_test_cases || [], verbose);
|
|
80
80
|
currentDraftTestCaseIds = testCaseIds;
|
|
81
81
|
// Coaching loop between execute and verify
|
|
82
82
|
await runPhaseCoaching({
|
|
83
|
-
|
|
83
|
+
issueId,
|
|
84
84
|
phase: 'test_cases_analysis',
|
|
85
85
|
phaseResult: structuredAnalysisResult,
|
|
86
86
|
checklistItems: extractChecklistItems(checklistContext),
|
|
@@ -88,7 +88,7 @@ export const analyseTestCases = async (options, config, checklistContext) => {
|
|
|
88
88
|
const parsed = parseAnalysisResult(responseText);
|
|
89
89
|
if (parsed.analysis) {
|
|
90
90
|
await deleteTestCaseArtifacts(currentDraftTestCaseIds, verbose);
|
|
91
|
-
const { testCaseIds: newTestCaseIds } = await saveTestCasesAsDraft(
|
|
91
|
+
const { testCaseIds: newTestCaseIds } = await saveTestCasesAsDraft(issueId, parsed.analysis.created_test_cases || [], verbose);
|
|
92
92
|
currentDraftTestCaseIds = newTestCaseIds;
|
|
93
93
|
structuredAnalysisResult = parsed.analysis;
|
|
94
94
|
}
|
|
@@ -105,11 +105,11 @@ export const analyseTestCases = async (options, config, checklistContext) => {
|
|
|
105
105
|
created_user_stories: [],
|
|
106
106
|
},
|
|
107
107
|
checklistContext: checklistContext || null,
|
|
108
|
-
context: context.
|
|
108
|
+
context: context.issueContext,
|
|
109
109
|
config,
|
|
110
110
|
currentIteration,
|
|
111
111
|
maxIterations,
|
|
112
|
-
|
|
112
|
+
issueId,
|
|
113
113
|
verbose,
|
|
114
114
|
});
|
|
115
115
|
({ verificationResult } = verificationCycle);
|
|
@@ -118,7 +118,7 @@ export const analyseTestCases = async (options, config, checklistContext) => {
|
|
|
118
118
|
logInfo('✅ Verification passed! Updating all draft test cases to pending_approval status...');
|
|
119
119
|
}
|
|
120
120
|
// Update ALL remaining draft test cases (both kept old ones and newly created)
|
|
121
|
-
const allDraftIds = await getAllDraftTestCaseIds(
|
|
121
|
+
const allDraftIds = await getAllDraftTestCaseIds(issueId, verbose);
|
|
122
122
|
await updateTestCasesToReady(allDraftIds, verbose);
|
|
123
123
|
break;
|
|
124
124
|
}
|
|
@@ -143,7 +143,7 @@ export const analyseTestCases = async (options, config, checklistContext) => {
|
|
|
143
143
|
if (!checklistContext ||
|
|
144
144
|
checklistContext.checklists.length === 0 ||
|
|
145
145
|
!verificationResult) {
|
|
146
|
-
const allDraftIds = await getAllDraftTestCaseIds(
|
|
146
|
+
const allDraftIds = await getAllDraftTestCaseIds(issueId, verbose);
|
|
147
147
|
if (allDraftIds.length > 0) {
|
|
148
148
|
if (verbose) {
|
|
149
149
|
logInfo('✅ No checklist verification needed. Updating all draft test cases to pending_approval status...');
|
|
@@ -159,14 +159,14 @@ export const analyseTestCases = async (options, config, checklistContext) => {
|
|
|
159
159
|
logError(` Draft test cases (${currentDraftTestCaseIds.length}) kept for manual review`);
|
|
160
160
|
throw new Error(`Checklist verification failed after ${currentIteration} iterations`);
|
|
161
161
|
}
|
|
162
|
-
return buildTestCasesAnalysisResult(
|
|
162
|
+
return buildTestCasesAnalysisResult(issueId, context.issueContext, structuredAnalysisResult, currentIteration);
|
|
163
163
|
}
|
|
164
164
|
catch (error) {
|
|
165
165
|
logError(`Test cases analysis failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
166
166
|
return {
|
|
167
|
-
|
|
167
|
+
issueId,
|
|
168
168
|
productInfo: null,
|
|
169
|
-
|
|
169
|
+
issueInfo: null,
|
|
170
170
|
existingTestCases: [],
|
|
171
171
|
createdTestCases: [],
|
|
172
172
|
summary: `Analysis failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { type TestCasesAnalysisContext } from './context.js';
|
|
2
|
-
export declare function resetReadyTestCasesToDraft(
|
|
3
|
-
export declare function getAllDraftTestCaseIds(
|
|
2
|
+
export declare function resetReadyTestCasesToDraft(issueId: string, verbose?: boolean): Promise<number>;
|
|
3
|
+
export declare function getAllDraftTestCaseIds(issueId: string, verbose?: boolean): Promise<string[]>;
|
|
4
4
|
export declare function deleteTestCaseArtifacts(testCaseIds: string[], verbose?: boolean): Promise<void>;
|
|
5
|
-
export declare function deleteSpecificTestCases(
|
|
5
|
+
export declare function deleteSpecificTestCases(issueId: string, deletedTestCaseIds: string[], deletionReasons: Record<string, string>, verbose?: boolean): Promise<void>;
|
|
6
6
|
export declare function updateTestCasesToReady(testCaseIds: string[], verbose?: boolean): Promise<void>;
|
|
7
|
-
export declare function saveTestCasesAsDraft(
|
|
7
|
+
export declare function saveTestCasesAsDraft(issueId: string, createdTestCases: any[], verbose?: boolean): Promise<{
|
|
8
8
|
testCaseIds: string[];
|
|
9
9
|
}>;
|
|
10
10
|
export interface TestCasesAnalysisResult {
|
|
11
|
-
|
|
11
|
+
issueId: string;
|
|
12
12
|
productInfo: unknown;
|
|
13
|
-
|
|
13
|
+
issueInfo: unknown;
|
|
14
14
|
existingTestCases: any[];
|
|
15
15
|
createdTestCases: any[];
|
|
16
16
|
summary: string;
|
|
@@ -24,4 +24,4 @@ export interface TestCasesAnalysisResult {
|
|
|
24
24
|
deletion_reasons?: Record<string, string>;
|
|
25
25
|
};
|
|
26
26
|
}
|
|
27
|
-
export declare function buildTestCasesAnalysisResult(
|
|
27
|
+
export declare function buildTestCasesAnalysisResult(issueId: string, context: TestCasesAnalysisContext, structuredAnalysisResult: any, currentIteration: number): TestCasesAnalysisResult;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { batchDeleteTestCases, batchUpdateTestCaseStatus, getTestCases, } from '../../api/
|
|
1
|
+
import { batchDeleteTestCases, batchUpdateTestCaseStatus, getTestCases, } from '../../api/issues/index.js';
|
|
2
2
|
import { callMcpEndpoint } from '../../api/mcp-client.js';
|
|
3
3
|
import { logError, logInfo } from '../../utils/logger.js';
|
|
4
|
-
export async function resetReadyTestCasesToDraft(
|
|
5
|
-
const testCases = await getTestCases(
|
|
4
|
+
export async function resetReadyTestCasesToDraft(issueId, verbose) {
|
|
5
|
+
const testCases = await getTestCases(issueId, false);
|
|
6
6
|
const readyIds = testCases
|
|
7
7
|
.filter((tc) => tc.status === 'pending_approval')
|
|
8
8
|
.map((tc) => tc.id);
|
|
@@ -15,13 +15,13 @@ export async function resetReadyTestCasesToDraft(featureId, verbose) {
|
|
|
15
15
|
await batchUpdateTestCaseStatus(readyIds, 'draft', verbose);
|
|
16
16
|
return readyIds.length;
|
|
17
17
|
}
|
|
18
|
-
export async function getAllDraftTestCaseIds(
|
|
19
|
-
const testCases = await getTestCases(
|
|
18
|
+
export async function getAllDraftTestCaseIds(issueId, verbose) {
|
|
19
|
+
const testCases = await getTestCases(issueId, false);
|
|
20
20
|
const draftIds = testCases
|
|
21
21
|
.filter((tc) => tc.status === 'draft')
|
|
22
22
|
.map((tc) => tc.id);
|
|
23
23
|
if (verbose) {
|
|
24
|
-
logInfo(`Found ${draftIds.length} draft test cases for
|
|
24
|
+
logInfo(`Found ${draftIds.length} draft test cases for issue`);
|
|
25
25
|
}
|
|
26
26
|
return draftIds;
|
|
27
27
|
}
|
|
@@ -37,8 +37,8 @@ function isValidUUID(id) {
|
|
|
37
37
|
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
38
38
|
return uuidRegex.test(id);
|
|
39
39
|
}
|
|
40
|
-
export async function deleteSpecificTestCases(
|
|
41
|
-
const currentTestCases = await getTestCases(
|
|
40
|
+
export async function deleteSpecificTestCases(issueId, deletedTestCaseIds, deletionReasons, verbose) {
|
|
41
|
+
const currentTestCases = await getTestCases(issueId, false);
|
|
42
42
|
const testCaseStatusMap = new Map(currentTestCases.map((testCase) => [testCase.id, testCase.status]));
|
|
43
43
|
const validTestCaseIds = deletedTestCaseIds.filter((id) => {
|
|
44
44
|
if (!isValidUUID(id)) {
|
|
@@ -75,7 +75,7 @@ export async function updateTestCasesToReady(testCaseIds, verbose) {
|
|
|
75
75
|
await batchUpdateTestCaseStatus(testCaseIds, 'pending_approval', verbose);
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
|
-
export async function saveTestCasesAsDraft(
|
|
78
|
+
export async function saveTestCasesAsDraft(issueId,
|
|
79
79
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
80
80
|
createdTestCases, verbose) {
|
|
81
81
|
const testCaseIds = [];
|
|
@@ -85,7 +85,7 @@ createdTestCases, verbose) {
|
|
|
85
85
|
}
|
|
86
86
|
try {
|
|
87
87
|
const result = (await callMcpEndpoint('test_cases/create', {
|
|
88
|
-
|
|
88
|
+
issue_id: issueId,
|
|
89
89
|
test_cases: createdTestCases.map((testCase) => ({
|
|
90
90
|
name: testCase.name,
|
|
91
91
|
description: testCase.description,
|
|
@@ -109,14 +109,14 @@ createdTestCases, verbose) {
|
|
|
109
109
|
}
|
|
110
110
|
return { testCaseIds };
|
|
111
111
|
}
|
|
112
|
-
export function buildTestCasesAnalysisResult(
|
|
112
|
+
export function buildTestCasesAnalysisResult(issueId, context,
|
|
113
113
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
114
114
|
structuredAnalysisResult, currentIteration) {
|
|
115
115
|
const { created_test_cases, deleted_test_case_ids, deletion_reasons, checklist_results, checklist_item_results, } = structuredAnalysisResult;
|
|
116
116
|
return {
|
|
117
|
-
|
|
117
|
+
issueId,
|
|
118
118
|
productInfo: context.product,
|
|
119
|
-
|
|
119
|
+
issueInfo: context.issue,
|
|
120
120
|
existingTestCases: context.existing_test_cases.map((testCase) => ({
|
|
121
121
|
...testCase,
|
|
122
122
|
created_at: testCase.created_at || new Date().toISOString(),
|