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,7 +1,7 @@
|
|
|
1
|
-
import { type ChecklistVerificationResult } from '../
|
|
1
|
+
import { type ChecklistVerificationResult } from '../issue-analysis-verification/agent.js';
|
|
2
2
|
export declare const createTestCasesAnalysisSystemPrompt: (projectDir?: string) => Promise<string>;
|
|
3
|
-
export declare const createTestCasesAnalysisPromptWithContext: (
|
|
4
|
-
export declare const createTestCasesFeedbackFocusedPromptWithContext: (
|
|
3
|
+
export declare const createTestCasesAnalysisPromptWithContext: (issueId: string, contextInfo: string) => string;
|
|
4
|
+
export declare const createTestCasesFeedbackFocusedPromptWithContext: (issueId: string, contextInfo: string) => string;
|
|
5
5
|
export declare const createTestCasesImprovementPrompt: (verificationResult: ChecklistVerificationResult, previousAnalysis: {
|
|
6
6
|
created_test_cases: Record<string, unknown>[];
|
|
7
7
|
}) => string;
|
|
@@ -7,8 +7,8 @@ export const createTestCasesAnalysisSystemPrompt = async (projectDir) => {
|
|
|
7
7
|
}
|
|
8
8
|
return `${skill.prompt}\n\n${OUTPUT_CONTRACTS['test-cases-analysis']}`;
|
|
9
9
|
};
|
|
10
|
-
export const createTestCasesAnalysisPromptWithContext = (
|
|
11
|
-
return `Please create comprehensive test cases for
|
|
10
|
+
export const createTestCasesAnalysisPromptWithContext = (issueId, contextInfo) => {
|
|
11
|
+
return `Please create comprehensive test cases for issue ID: ${issueId}
|
|
12
12
|
|
|
13
13
|
${contextInfo}
|
|
14
14
|
|
|
@@ -37,8 +37,8 @@ Follow this systematic approach:
|
|
|
37
37
|
|
|
38
38
|
Begin your systematic test case design based on the above context.`;
|
|
39
39
|
};
|
|
40
|
-
export const createTestCasesFeedbackFocusedPromptWithContext = (
|
|
41
|
-
return `Please update test cases for
|
|
40
|
+
export const createTestCasesFeedbackFocusedPromptWithContext = (issueId, contextInfo) => {
|
|
41
|
+
return `Please update test cases for issue ID: ${issueId} based on human feedback.
|
|
42
42
|
|
|
43
43
|
${contextInfo}
|
|
44
44
|
|
|
@@ -53,7 +53,7 @@ This is a RE-RUN with human feedback. Existing test cases have already been crea
|
|
|
53
53
|
4. **Keep all [APPROVED] test cases untouched** — they are immutable
|
|
54
54
|
|
|
55
55
|
**What you MUST NOT do:**
|
|
56
|
-
- Do NOT re-analyze the entire
|
|
56
|
+
- Do NOT re-analyze the entire issue from scratch
|
|
57
57
|
- Do NOT create a full new set of test cases
|
|
58
58
|
- Do NOT delete or recreate test cases just to "improve" them unless feedback specifically requests it
|
|
59
59
|
- Do NOT ignore any feedback item
|
|
@@ -139,7 +139,7 @@ Return ONLY the JSON object:
|
|
|
139
139
|
\`\`\`json
|
|
140
140
|
{
|
|
141
141
|
"analysis": {
|
|
142
|
-
"
|
|
142
|
+
"issue_id": "...",
|
|
143
143
|
"status": "success",
|
|
144
144
|
"summary": "Improved test cases based on verification feedback",
|
|
145
145
|
"created_test_cases": [
|
|
@@ -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 UserStoriesAnalysisContext {
|
|
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 fetchUserStoriesAnalysisContext(
|
|
11
|
-
export declare function prepareUserStoriesAnalysisContext(
|
|
12
|
-
|
|
10
|
+
export declare function fetchUserStoriesAnalysisContext(issueId: string, verbose?: boolean): Promise<UserStoriesAnalysisContext>;
|
|
11
|
+
export declare function prepareUserStoriesAnalysisContext(issueId: string, checklistContext: ChecklistPhaseContext | null | undefined, verbose?: boolean): Promise<{
|
|
12
|
+
issueContext: UserStoriesAnalysisContext;
|
|
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 { formatUserStoriesAnalysisContext } from './formatters.js';
|
|
7
7
|
import { createUserStoriesAnalysisPromptWithContext, createUserStoriesFeedbackFocusedPromptWithContext, } from './prompts.js';
|
|
8
|
-
export async function fetchUserStoriesAnalysisContext(
|
|
8
|
+
export async function fetchUserStoriesAnalysisContext(issueId, verbose) {
|
|
9
9
|
try {
|
|
10
10
|
if (verbose) {
|
|
11
|
-
logInfo(`Fetching user stories analysis context for
|
|
11
|
+
logInfo(`Fetching user stories 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(`✅ User stories analysis context fetched successfully:`);
|
|
21
|
-
logInfo(`
|
|
21
|
+
logInfo(` Issue: ${issue.name}`);
|
|
22
22
|
logInfo(` Product: ${product.name}`);
|
|
23
23
|
logInfo(` Existing 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 fetchUserStoriesAnalysisContext(featureId, verbose) {
|
|
|
36
36
|
throw new Error(`Context fetch failed: ${errorMessage}`);
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
|
-
export async function prepareUserStoriesAnalysisContext(
|
|
39
|
+
export async function prepareUserStoriesAnalysisContext(issueId, checklistContext, verbose) {
|
|
40
40
|
if (verbose) {
|
|
41
41
|
logInfo('Fetching user stories analysis context via MCP endpoints...');
|
|
42
42
|
}
|
|
43
|
-
const
|
|
44
|
-
const { content: contextInfo, downloadedImages } = await formatUserStoriesAnalysisContext(
|
|
43
|
+
const issueContext = await fetchUserStoriesAnalysisContext(issueId, verbose);
|
|
44
|
+
const { content: contextInfo, downloadedImages } = await formatUserStoriesAnalysisContext(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 prepareUserStoriesAnalysisContext(featureId, checklistCont
|
|
|
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 }, 'user-stories-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 prepareUserStoriesAnalysisContext(featureId, checklistCont
|
|
|
75
75
|
logInfo(`Added ${checklistContext.checklists.length} checklists to analysis context`);
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
|
-
const hasExistingArtifacts =
|
|
78
|
+
const hasExistingArtifacts = issueContext.existing_user_stories.length > 0;
|
|
79
79
|
const analysisPrompt = hasFeedbacks && hasExistingArtifacts
|
|
80
|
-
? createUserStoriesFeedbackFocusedPromptWithContext(
|
|
81
|
-
: createUserStoriesAnalysisPromptWithContext(
|
|
80
|
+
? createUserStoriesFeedbackFocusedPromptWithContext(issueId, finalContextInfo)
|
|
81
|
+
: createUserStoriesAnalysisPromptWithContext(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 { formatUserStories } from '../../utils/formatters.js';
|
|
2
2
|
import { downloadImagesForClaudeCode, } from '../../utils/image-downloader.js';
|
|
3
3
|
export async function formatUserStoriesAnalysisContext(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 = `# User Stories 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}
|
|
@@ -23,10 +23,10 @@ ${downloadedImages.length > 0 ? '**IMPORTANT**: The description contains images
|
|
|
23
23
|
${formatUserStories(context.existing_user_stories)}
|
|
24
24
|
|
|
25
25
|
## Current Technical Design
|
|
26
|
-
${context.
|
|
26
|
+
${context.issue.technical_design || 'No technical design available yet'}
|
|
27
27
|
|
|
28
28
|
---
|
|
29
29
|
|
|
30
|
-
**Analysis Instructions**: Based on the above
|
|
30
|
+
**Analysis Instructions**: Based on the above issue information and existing user stories, conduct comprehensive business analysis to create professional, detailed user stories that add business value.`;
|
|
31
31
|
return { content, downloadedImages };
|
|
32
32
|
}
|
|
@@ -2,7 +2,7 @@ import { type ChecklistPhaseContext } from '../../services/checklist.js';
|
|
|
2
2
|
import { type EdsgerConfig } from '../../types/index.js';
|
|
3
3
|
import { type UserStoriesAnalysisResult } from './outcome.js';
|
|
4
4
|
export interface UserStoriesAnalysisOptions {
|
|
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 { executeUserStoriesAnalysisQuery, parseAnalysisResult, } from './agent.js';
|
|
6
6
|
import { prepareUserStoriesAnalysisContext } from './context.js';
|
|
7
7
|
import { buildUserStoriesAnalysisResult, deleteSpecificUserStories, deleteUserStoryArtifacts, getAllDraftUserStoryIds, resetReadyUserStoriesToDraft, saveUserStoriesAsDraft, updateUserStoriesToReady, } from './outcome.js';
|
|
8
8
|
import { createUserStoriesAnalysisSystemPrompt } from './prompts.js';
|
|
9
9
|
// eslint-disable-next-line complexity
|
|
10
10
|
export const analyseUserStories = async (options, config, checklistContext) => {
|
|
11
|
-
const {
|
|
11
|
+
const { issueId, verbose } = options;
|
|
12
12
|
if (verbose) {
|
|
13
|
-
logInfo(`Starting user stories analysis for
|
|
13
|
+
logInfo(`Starting user stories analysis for issue ID: ${issueId}`);
|
|
14
14
|
}
|
|
15
15
|
try {
|
|
16
16
|
// Reset pending_approval user stories to draft so AI can manage them on re-run
|
|
17
|
-
const resetCount = await resetReadyUserStoriesToDraft(
|
|
17
|
+
const resetCount = await resetReadyUserStoriesToDraft(issueId, verbose);
|
|
18
18
|
if (verbose && resetCount > 0) {
|
|
19
19
|
logInfo(`✅ Reset ${resetCount} pending_approval user stories to draft for re-analysis`);
|
|
20
20
|
}
|
|
21
|
-
const context = await prepareUserStoriesAnalysisContext(
|
|
21
|
+
const context = await prepareUserStoriesAnalysisContext(issueId, checklistContext, verbose);
|
|
22
22
|
const systemPrompt = await createUserStoriesAnalysisSystemPrompt();
|
|
23
23
|
const initialAnalysisPrompt = context.analysisPrompt;
|
|
24
24
|
const maxIterations = options.maxVerificationIterations || 10;
|
|
@@ -37,8 +37,8 @@ export const analyseUserStories = async (options, config, checklistContext) => {
|
|
|
37
37
|
logInfo(`\n🔄 Iteration ${currentIteration}/${maxIterations}: Improving user stories 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: 'user_stories_analysis',
|
|
44
44
|
result: 'info',
|
|
@@ -54,8 +54,8 @@ export const analyseUserStories = 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: 'user_stories_analysis',
|
|
61
61
|
result: 'success',
|
|
@@ -73,14 +73,14 @@ export const analyseUserStories = async (options, config, checklistContext) => {
|
|
|
73
73
|
if (verbose) {
|
|
74
74
|
logInfo('🗑️ Processing user story deletions identified by AI...');
|
|
75
75
|
}
|
|
76
|
-
await deleteSpecificUserStories(
|
|
76
|
+
await deleteSpecificUserStories(issueId, structuredAnalysisResult.deleted_user_story_ids || [], structuredAnalysisResult.deletion_reasons || {}, verbose);
|
|
77
77
|
}
|
|
78
78
|
// Save user stories as draft
|
|
79
|
-
const { userStoryIds } = await saveUserStoriesAsDraft(
|
|
79
|
+
const { userStoryIds } = await saveUserStoriesAsDraft(issueId, structuredAnalysisResult.created_user_stories || [], verbose);
|
|
80
80
|
currentDraftUserStoryIds = userStoryIds;
|
|
81
81
|
// Coaching loop between execute and verify
|
|
82
82
|
await runPhaseCoaching({
|
|
83
|
-
|
|
83
|
+
issueId,
|
|
84
84
|
phase: 'user_stories_analysis',
|
|
85
85
|
phaseResult: structuredAnalysisResult,
|
|
86
86
|
checklistItems: extractChecklistItems(checklistContext),
|
|
@@ -88,7 +88,7 @@ export const analyseUserStories = async (options, config, checklistContext) => {
|
|
|
88
88
|
const parsed = parseAnalysisResult(responseText);
|
|
89
89
|
if (parsed.analysis) {
|
|
90
90
|
await deleteUserStoryArtifacts(currentDraftUserStoryIds, verbose);
|
|
91
|
-
const { userStoryIds: newUserStoryIds } = await saveUserStoriesAsDraft(
|
|
91
|
+
const { userStoryIds: newUserStoryIds } = await saveUserStoriesAsDraft(issueId, parsed.analysis.created_user_stories || [], verbose);
|
|
92
92
|
currentDraftUserStoryIds = newUserStoryIds;
|
|
93
93
|
structuredAnalysisResult = parsed.analysis;
|
|
94
94
|
}
|
|
@@ -105,11 +105,11 @@ export const analyseUserStories = async (options, config, checklistContext) => {
|
|
|
105
105
|
created_test_cases: [],
|
|
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 analyseUserStories = async (options, config, checklistContext) => {
|
|
|
118
118
|
logInfo('✅ Verification passed! Updating all draft user stories to pending_approval status...');
|
|
119
119
|
}
|
|
120
120
|
// Update ALL remaining draft stories (both kept old ones and newly created)
|
|
121
|
-
const allDraftIds = await getAllDraftUserStoryIds(
|
|
121
|
+
const allDraftIds = await getAllDraftUserStoryIds(issueId, verbose);
|
|
122
122
|
await updateUserStoriesToReady(allDraftIds, verbose);
|
|
123
123
|
break;
|
|
124
124
|
}
|
|
@@ -143,7 +143,7 @@ export const analyseUserStories = async (options, config, checklistContext) => {
|
|
|
143
143
|
if (!checklistContext ||
|
|
144
144
|
checklistContext.checklists.length === 0 ||
|
|
145
145
|
!verificationResult) {
|
|
146
|
-
const allDraftIds = await getAllDraftUserStoryIds(
|
|
146
|
+
const allDraftIds = await getAllDraftUserStoryIds(issueId, verbose);
|
|
147
147
|
if (allDraftIds.length > 0) {
|
|
148
148
|
if (verbose) {
|
|
149
149
|
logInfo('✅ No checklist verification needed. Updating all draft user stories to pending_approval status...');
|
|
@@ -159,14 +159,14 @@ export const analyseUserStories = async (options, config, checklistContext) => {
|
|
|
159
159
|
logError(` Draft user stories (${currentDraftUserStoryIds.length}) kept for manual review`);
|
|
160
160
|
throw new Error(`Checklist verification failed after ${currentIteration} iterations`);
|
|
161
161
|
}
|
|
162
|
-
return buildUserStoriesAnalysisResult(
|
|
162
|
+
return buildUserStoriesAnalysisResult(issueId, context.issueContext, structuredAnalysisResult, currentIteration);
|
|
163
163
|
}
|
|
164
164
|
catch (error) {
|
|
165
165
|
logError(`User stories 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
|
existingUserStories: [],
|
|
171
171
|
createdUserStories: [],
|
|
172
172
|
summary: `Analysis failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { type UserStoriesAnalysisContext } from './context.js';
|
|
2
|
-
export declare function resetReadyUserStoriesToDraft(
|
|
3
|
-
export declare function getAllDraftUserStoryIds(
|
|
2
|
+
export declare function resetReadyUserStoriesToDraft(issueId: string, verbose?: boolean): Promise<number>;
|
|
3
|
+
export declare function getAllDraftUserStoryIds(issueId: string, verbose?: boolean): Promise<string[]>;
|
|
4
4
|
export declare function deleteUserStoryArtifacts(userStoryIds: string[], verbose?: boolean): Promise<void>;
|
|
5
|
-
export declare function deleteSpecificUserStories(
|
|
5
|
+
export declare function deleteSpecificUserStories(issueId: string, deletedUserStoryIds: string[], deletionReasons: Record<string, string>, verbose?: boolean): Promise<void>;
|
|
6
6
|
export declare function updateUserStoriesToReady(userStoryIds: string[], verbose?: boolean): Promise<void>;
|
|
7
|
-
export declare function saveUserStoriesAsDraft(
|
|
7
|
+
export declare function saveUserStoriesAsDraft(issueId: string, createdUserStories: any[], verbose?: boolean): Promise<{
|
|
8
8
|
userStoryIds: string[];
|
|
9
9
|
}>;
|
|
10
10
|
export interface UserStoriesAnalysisResult {
|
|
11
|
-
|
|
11
|
+
issueId: string;
|
|
12
12
|
productInfo: unknown;
|
|
13
|
-
|
|
13
|
+
issueInfo: unknown;
|
|
14
14
|
existingUserStories: any[];
|
|
15
15
|
createdUserStories: any[];
|
|
16
16
|
summary: string;
|
|
@@ -24,4 +24,4 @@ export interface UserStoriesAnalysisResult {
|
|
|
24
24
|
deletion_reasons?: Record<string, string>;
|
|
25
25
|
};
|
|
26
26
|
}
|
|
27
|
-
export declare function buildUserStoriesAnalysisResult(
|
|
27
|
+
export declare function buildUserStoriesAnalysisResult(issueId: string, context: UserStoriesAnalysisContext, structuredAnalysisResult: any, currentIteration: number): UserStoriesAnalysisResult;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { batchDeleteUserStories, batchUpdateUserStoryStatus, getUserStories, } from '../../api/
|
|
1
|
+
import { batchDeleteUserStories, batchUpdateUserStoryStatus, getUserStories, } 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 resetReadyUserStoriesToDraft(
|
|
5
|
-
const stories = await getUserStories(
|
|
4
|
+
export async function resetReadyUserStoriesToDraft(issueId, verbose) {
|
|
5
|
+
const stories = await getUserStories(issueId, false);
|
|
6
6
|
const readyStoryIds = stories
|
|
7
7
|
.filter((story) => story.status === 'pending_approval')
|
|
8
8
|
.map((story) => story.id);
|
|
@@ -15,13 +15,13 @@ export async function resetReadyUserStoriesToDraft(featureId, verbose) {
|
|
|
15
15
|
await batchUpdateUserStoryStatus(readyStoryIds, 'draft', verbose);
|
|
16
16
|
return readyStoryIds.length;
|
|
17
17
|
}
|
|
18
|
-
export async function getAllDraftUserStoryIds(
|
|
19
|
-
const stories = await getUserStories(
|
|
18
|
+
export async function getAllDraftUserStoryIds(issueId, verbose) {
|
|
19
|
+
const stories = await getUserStories(issueId, false);
|
|
20
20
|
const draftIds = stories
|
|
21
21
|
.filter((story) => story.status === 'draft')
|
|
22
22
|
.map((story) => story.id);
|
|
23
23
|
if (verbose) {
|
|
24
|
-
logInfo(`Found ${draftIds.length} draft user stories for
|
|
24
|
+
logInfo(`Found ${draftIds.length} draft user stories 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 deleteSpecificUserStories(
|
|
41
|
-
const currentUserStories = await getUserStories(
|
|
40
|
+
export async function deleteSpecificUserStories(issueId, deletedUserStoryIds, deletionReasons, verbose) {
|
|
41
|
+
const currentUserStories = await getUserStories(issueId, false);
|
|
42
42
|
const userStoryStatusMap = new Map(currentUserStories.map((story) => [story.id, story.status]));
|
|
43
43
|
const validUserStoryIds = deletedUserStoryIds.filter((id) => {
|
|
44
44
|
if (!isValidUUID(id)) {
|
|
@@ -75,7 +75,7 @@ export async function updateUserStoriesToReady(userStoryIds, verbose) {
|
|
|
75
75
|
await batchUpdateUserStoryStatus(userStoryIds, 'pending_approval', verbose);
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
|
-
export async function saveUserStoriesAsDraft(
|
|
78
|
+
export async function saveUserStoriesAsDraft(issueId,
|
|
79
79
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
80
80
|
createdUserStories, verbose) {
|
|
81
81
|
const userStoryIds = [];
|
|
@@ -85,7 +85,7 @@ createdUserStories, verbose) {
|
|
|
85
85
|
}
|
|
86
86
|
try {
|
|
87
87
|
const result = (await callMcpEndpoint('user_stories/create', {
|
|
88
|
-
|
|
88
|
+
issue_id: issueId,
|
|
89
89
|
user_stories: createdUserStories.map((story) => ({
|
|
90
90
|
title: story.title,
|
|
91
91
|
description: story.description,
|
|
@@ -108,14 +108,14 @@ createdUserStories, verbose) {
|
|
|
108
108
|
}
|
|
109
109
|
return { userStoryIds };
|
|
110
110
|
}
|
|
111
|
-
export function buildUserStoriesAnalysisResult(
|
|
111
|
+
export function buildUserStoriesAnalysisResult(issueId, context,
|
|
112
112
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
113
113
|
structuredAnalysisResult, currentIteration) {
|
|
114
114
|
const { created_user_stories, deleted_user_story_ids, deletion_reasons, checklist_results, checklist_item_results, } = structuredAnalysisResult;
|
|
115
115
|
return {
|
|
116
|
-
|
|
116
|
+
issueId,
|
|
117
117
|
productInfo: context.product,
|
|
118
|
-
|
|
118
|
+
issueInfo: context.issue,
|
|
119
119
|
existingUserStories: context.existing_user_stories.map((story) => ({
|
|
120
120
|
...story,
|
|
121
121
|
status: story.status === 'pending_approval' ? 'pending_approval' : 'draft',
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { type ChecklistVerificationResult } from '../
|
|
1
|
+
import { type ChecklistVerificationResult } from '../issue-analysis-verification/agent.js';
|
|
2
2
|
export declare const createUserStoriesAnalysisSystemPrompt: (projectDir?: string) => Promise<string>;
|
|
3
|
-
export declare const createUserStoriesAnalysisPromptWithContext: (
|
|
4
|
-
export declare const createUserStoriesFeedbackFocusedPromptWithContext: (
|
|
3
|
+
export declare const createUserStoriesAnalysisPromptWithContext: (issueId: string, contextInfo: string) => string;
|
|
4
|
+
export declare const createUserStoriesFeedbackFocusedPromptWithContext: (issueId: string, contextInfo: string) => string;
|
|
5
5
|
export declare const createUserStoriesImprovementPrompt: (verificationResult: ChecklistVerificationResult, previousAnalysis: {
|
|
6
6
|
created_user_stories: Record<string, unknown>[];
|
|
7
7
|
}) => string;
|
|
@@ -9,8 +9,8 @@ export const createUserStoriesAnalysisSystemPrompt = async (projectDir) => {
|
|
|
9
9
|
}
|
|
10
10
|
return `${skill.prompt}\n\n${OUTPUT_CONTRACTS['user-stories-analysis']}`;
|
|
11
11
|
};
|
|
12
|
-
export const createUserStoriesAnalysisPromptWithContext = (
|
|
13
|
-
return `Please create comprehensive, professional user stories for
|
|
12
|
+
export const createUserStoriesAnalysisPromptWithContext = (issueId, contextInfo) => {
|
|
13
|
+
return `Please create comprehensive, professional user stories for issue ID: ${issueId}
|
|
14
14
|
|
|
15
15
|
${contextInfo}
|
|
16
16
|
|
|
@@ -18,11 +18,11 @@ ${contextInfo}
|
|
|
18
18
|
|
|
19
19
|
Follow this systematic approach:
|
|
20
20
|
|
|
21
|
-
1. **Deeply Understand the
|
|
21
|
+
1. **Deeply Understand the Issue**: Read the issue description, product context, and any provided images carefully. Understand the full scope of what this issue needs to accomplish.
|
|
22
22
|
|
|
23
|
-
2. **Identify All User Personas**: List every type of user who will interact with this
|
|
23
|
+
2. **Identify All User Personas**: List every type of user who will interact with this issue (e.g., admin, manager, regular user, analyst, coach, etc.)
|
|
24
24
|
|
|
25
|
-
3. **Map Functional Areas**: Group the
|
|
25
|
+
3. **Map Functional Areas**: Group the issue's functionality into logical categories (e.g., "Core Interface & Navigation", "Data Display & Visualization", "Configuration & Settings", "Notifications & Alerts")
|
|
26
26
|
|
|
27
27
|
4. **Review Existing Stories**: Check existing user stories for:
|
|
28
28
|
- What's already well-covered
|
|
@@ -42,7 +42,7 @@ Follow this systematic approach:
|
|
|
42
42
|
- Happy paths AND edge cases
|
|
43
43
|
- Error states and graceful degradation
|
|
44
44
|
- Accessibility considerations
|
|
45
|
-
- Integration with existing
|
|
45
|
+
- Integration with existing issues
|
|
46
46
|
|
|
47
47
|
7. **Output Results**: Return your analysis in the required JSON format
|
|
48
48
|
|
|
@@ -56,8 +56,8 @@ Follow this systematic approach:
|
|
|
56
56
|
|
|
57
57
|
Begin your systematic analysis based on the above context.`;
|
|
58
58
|
};
|
|
59
|
-
export const createUserStoriesFeedbackFocusedPromptWithContext = (
|
|
60
|
-
return `Please update user stories for
|
|
59
|
+
export const createUserStoriesFeedbackFocusedPromptWithContext = (issueId, contextInfo) => {
|
|
60
|
+
return `Please update user stories for issue ID: ${issueId} based on human feedback.
|
|
61
61
|
|
|
62
62
|
${contextInfo}
|
|
63
63
|
|
|
@@ -72,7 +72,7 @@ This is a RE-RUN with human feedback. Existing user stories have already been cr
|
|
|
72
72
|
4. **Keep all [APPROVED] stories untouched** — they are immutable
|
|
73
73
|
|
|
74
74
|
**What you MUST NOT do:**
|
|
75
|
-
- Do NOT re-analyze the entire
|
|
75
|
+
- Do NOT re-analyze the entire issue from scratch
|
|
76
76
|
- Do NOT create a full new set of user stories
|
|
77
77
|
- Do NOT delete or recreate stories just to "improve" them unless feedback specifically requests it
|
|
78
78
|
- Do NOT ignore any feedback item
|
|
@@ -161,7 +161,7 @@ Return ONLY the JSON object. Do NOT include any text before or after the JSON.
|
|
|
161
161
|
\`\`\`json
|
|
162
162
|
{
|
|
163
163
|
"analysis": {
|
|
164
|
-
"
|
|
164
|
+
"issue_id": "...",
|
|
165
165
|
"status": "success",
|
|
166
166
|
"summary": "Improved user stories based on verification feedback",
|
|
167
167
|
"id_prefix": "XX",
|
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* Provides functions to log
|
|
2
|
+
* Issue Audit Logs Service
|
|
3
|
+
* Provides functions to log issue lifecycle events to the database
|
|
4
4
|
*/
|
|
5
5
|
export interface LogPhaseEventParams {
|
|
6
|
-
|
|
6
|
+
issueId: string;
|
|
7
7
|
eventType: 'phase_started' | 'phase_completed' | 'phase_failed' | 'autonomous_iteration_completed' | 'autonomous_iteration_failed' | 'hook_started' | 'hook_completed' | 'hook_failed';
|
|
8
|
-
phase: '
|
|
8
|
+
phase: 'issue_analysis' | 'user_stories_analysis' | 'test_cases_analysis' | 'technical_design' | 'branch_planning' | 'code_implementation' | 'pr_splitting' | 'pr_execution' | 'functional_testing' | 'pull_request' | 'code_review' | 'code_refine' | 'code_refine_verification' | 'autonomous' | (string & {});
|
|
9
9
|
result?: 'success' | 'error' | 'warning' | 'info';
|
|
10
10
|
metadata?: Record<string, unknown>;
|
|
11
11
|
errorMessage?: string;
|
|
12
12
|
}
|
|
13
13
|
export interface LogChecklistEventParams {
|
|
14
|
-
|
|
14
|
+
issueId: string;
|
|
15
15
|
eventType: 'checklist_validated' | 'checklist_verified';
|
|
16
16
|
checklistId: string;
|
|
17
17
|
result?: 'success' | 'error' | 'warning' | 'info';
|
|
18
18
|
metadata?: Record<string, unknown>;
|
|
19
19
|
}
|
|
20
20
|
export interface LogVerificationEventParams {
|
|
21
|
-
|
|
22
|
-
phase: '
|
|
21
|
+
issueId: string;
|
|
22
|
+
phase: 'issue_analysis' | 'user_stories_analysis' | 'test_cases_analysis' | 'technical_design' | 'branch_planning' | 'code_implementation' | 'pr_splitting' | 'pr_execution' | 'functional_testing' | 'pull_request' | 'code_review' | 'code_refine' | 'code_refine_verification';
|
|
23
23
|
iteration: number;
|
|
24
24
|
result: 'success' | 'error';
|
|
25
25
|
verificationData: {
|
|
@@ -62,12 +62,12 @@ export interface LogVerificationEventParams {
|
|
|
62
62
|
/**
|
|
63
63
|
* Log a phase event (start, completion, or failure)
|
|
64
64
|
*/
|
|
65
|
-
export declare function
|
|
65
|
+
export declare function logIssuePhaseEvent(params: LogPhaseEventParams, verbose?: boolean): Promise<string | null>;
|
|
66
66
|
/**
|
|
67
67
|
* Log a checklist validation event
|
|
68
68
|
*/
|
|
69
|
-
export declare function
|
|
69
|
+
export declare function logIssueChecklistEvent(params: LogChecklistEventParams, verbose?: boolean): Promise<string | null>;
|
|
70
70
|
/**
|
|
71
71
|
* Log a verification event (dual-agent verification result)
|
|
72
72
|
*/
|
|
73
|
-
export declare function
|
|
73
|
+
export declare function logIssueVerificationEvent(params: LogVerificationEventParams, verbose?: boolean): Promise<string | null>;
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* Provides functions to log
|
|
2
|
+
* Issue Audit Logs Service
|
|
3
|
+
* Provides functions to log issue lifecycle events to the database
|
|
4
4
|
*/
|
|
5
5
|
import { callMcpEndpoint } from '../api/mcp-client.js';
|
|
6
6
|
import { logError, logInfo } from '../utils/logger.js';
|
|
7
7
|
/**
|
|
8
8
|
* Log a phase event (start, completion, or failure)
|
|
9
9
|
*/
|
|
10
|
-
export async function
|
|
10
|
+
export async function logIssuePhaseEvent(params, verbose) {
|
|
11
11
|
try {
|
|
12
|
-
const result = await callMcpEndpoint('
|
|
13
|
-
|
|
12
|
+
const result = await callMcpEndpoint('issue_audit_logs/create', {
|
|
13
|
+
issue_id: params.issueId,
|
|
14
14
|
event_type: params.eventType,
|
|
15
15
|
phase: params.phase,
|
|
16
16
|
source: 'pipeline',
|
|
@@ -25,7 +25,7 @@ export async function logFeaturePhaseEvent(params, verbose) {
|
|
|
25
25
|
if (params.eventType === 'phase_completed') {
|
|
26
26
|
try {
|
|
27
27
|
await callMcpEndpoint('notifications/send_phase_completion_email', {
|
|
28
|
-
|
|
28
|
+
issue_id: params.issueId,
|
|
29
29
|
phase: params.phase,
|
|
30
30
|
result: params.result || 'success',
|
|
31
31
|
metadata: params.metadata,
|
|
@@ -55,10 +55,10 @@ export async function logFeaturePhaseEvent(params, verbose) {
|
|
|
55
55
|
/**
|
|
56
56
|
* Log a checklist validation event
|
|
57
57
|
*/
|
|
58
|
-
export async function
|
|
58
|
+
export async function logIssueChecklistEvent(params, verbose) {
|
|
59
59
|
try {
|
|
60
|
-
const result = await callMcpEndpoint('
|
|
61
|
-
|
|
60
|
+
const result = await callMcpEndpoint('issue_audit_logs/create', {
|
|
61
|
+
issue_id: params.issueId,
|
|
62
62
|
event_type: params.eventType,
|
|
63
63
|
source: 'pipeline',
|
|
64
64
|
result: params.result || 'success',
|
|
@@ -84,13 +84,13 @@ export async function logFeatureChecklistEvent(params, verbose) {
|
|
|
84
84
|
/**
|
|
85
85
|
* Log a verification event (dual-agent verification result)
|
|
86
86
|
*/
|
|
87
|
-
export async function
|
|
87
|
+
export async function logIssueVerificationEvent(params, verbose) {
|
|
88
88
|
try {
|
|
89
89
|
const eventType = params.result === 'success'
|
|
90
90
|
? 'verification_passed'
|
|
91
91
|
: 'verification_failed';
|
|
92
|
-
const result = await callMcpEndpoint('
|
|
93
|
-
|
|
92
|
+
const result = await callMcpEndpoint('issue_audit_logs/create', {
|
|
93
|
+
issue_id: params.issueId,
|
|
94
94
|
event_type: eventType,
|
|
95
95
|
phase: params.phase,
|
|
96
96
|
source: 'pipeline',
|