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
|
/**
|
|
2
2
|
* Build context for the product chat AI processor.
|
|
3
|
-
* Fetches product state,
|
|
3
|
+
* Fetches product state, issues summary, and recent chat history.
|
|
4
4
|
*/
|
|
5
5
|
import { listChatMessages } from '../../api/chat.js';
|
|
6
6
|
import { callMcpEndpoint } from '../../api/mcp-client.js';
|
|
@@ -9,13 +9,13 @@ import { callMcpEndpoint } from '../../api/mcp-client.js';
|
|
|
9
9
|
*/
|
|
10
10
|
// eslint-disable-next-line complexity -- assembles context from many data sources
|
|
11
11
|
export async function buildProductChatContext(productId, channelId, verbose) {
|
|
12
|
-
// Fetch product,
|
|
13
|
-
const [productResult,
|
|
12
|
+
// Fetch product, issues, and team members in parallel
|
|
13
|
+
const [productResult, issuesResult, membersResult, recentMessages] = await Promise.all([
|
|
14
14
|
callMcpEndpoint('products/list', {
|
|
15
15
|
product_id: productId,
|
|
16
16
|
} // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
17
17
|
),
|
|
18
|
-
callMcpEndpoint('
|
|
18
|
+
callMcpEndpoint('issues/list', {
|
|
19
19
|
product_id: productId,
|
|
20
20
|
} // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
21
21
|
),
|
|
@@ -41,15 +41,15 @@ export async function buildProductChatContext(productId, channelId, verbose) {
|
|
|
41
41
|
products.find((p) => p.id === productId) || products[0] || {}
|
|
42
42
|
: products || {};
|
|
43
43
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
44
|
-
const
|
|
44
|
+
const allIssues = (issuesResult?.issues || []).map((f) => ({
|
|
45
45
|
id: f.id,
|
|
46
46
|
name: f.name,
|
|
47
47
|
status: f.status,
|
|
48
48
|
description: f.description || '',
|
|
49
49
|
}));
|
|
50
|
-
// Count
|
|
50
|
+
// Count issues by status
|
|
51
51
|
const byStatus = {};
|
|
52
|
-
for (const f of
|
|
52
|
+
for (const f of allIssues) {
|
|
53
53
|
byStatus[f.status] = (byStatus[f.status] || 0) + 1;
|
|
54
54
|
}
|
|
55
55
|
// Parse members
|
|
@@ -67,10 +67,10 @@ export async function buildProductChatContext(productId, channelId, verbose) {
|
|
|
67
67
|
productId,
|
|
68
68
|
productName: product.name || 'Unknown',
|
|
69
69
|
productDescription: product.description || 'No description',
|
|
70
|
-
|
|
71
|
-
total:
|
|
70
|
+
issuesSummary: {
|
|
71
|
+
total: allIssues.length,
|
|
72
72
|
byStatus,
|
|
73
|
-
|
|
73
|
+
issues: allIssues,
|
|
74
74
|
},
|
|
75
75
|
teamMembers: members,
|
|
76
76
|
recentChatMessages: recentMessages,
|
|
@@ -85,19 +85,19 @@ export function formatProductContextForAI(context) {
|
|
|
85
85
|
`## Product: ${context.productName}`,
|
|
86
86
|
context.productDescription,
|
|
87
87
|
'',
|
|
88
|
-
`##
|
|
88
|
+
`## Issues Summary (${context.issuesSummary.total} total)`,
|
|
89
89
|
'### By Status:',
|
|
90
|
-
...Object.entries(context.
|
|
90
|
+
...Object.entries(context.issuesSummary.byStatus).map(([status, count]) => `- ${status}: ${count}`),
|
|
91
91
|
'',
|
|
92
|
-
'###
|
|
92
|
+
'### Issues:',
|
|
93
93
|
];
|
|
94
|
-
if (context.
|
|
95
|
-
for (const f of context.
|
|
94
|
+
if (context.issuesSummary.issues.length > 0) {
|
|
95
|
+
for (const f of context.issuesSummary.issues) {
|
|
96
96
|
parts.push(`- [${f.status}] ${f.name}: ${f.description.slice(0, 100)}`);
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
else {
|
|
100
|
-
parts.push('- (no
|
|
100
|
+
parts.push('- (no issues yet)');
|
|
101
101
|
}
|
|
102
102
|
parts.push('', `## Team Members (${context.teamMembers.length})`);
|
|
103
103
|
if (context.teamMembers.length > 0) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* System prompts for the product chat AI processor.
|
|
3
3
|
*/
|
|
4
|
-
export declare const PRODUCT_CHAT_RESPONSE_PROMPT = "You are an AI assistant embedded in Edsger, a software development platform. You are helping a team manage a product at the product level.\n\n## Your Capabilities\nYou can see the product's current state, all
|
|
4
|
+
export declare const PRODUCT_CHAT_RESPONSE_PROMPT = "You are an AI assistant embedded in Edsger, a software development platform. You are helping a team manage a product at the product level.\n\n## Your Capabilities\nYou can see the product's current state, all issues (with statuses), and team members. You have tools to:\n- List issues with status filtering\n- Create new issues for the product\n- Get detailed issue information (drill down into any issue)\n- Create tasks for team members (human) or AI\n- Look up product team members by name\n- Send follow-up messages and present options to the user\n\n## How to Respond\n1. **Understand the intent** \u2014 Is this a question about product state, a request to create something, or coordination work?\n2. **Take action if needed** \u2014 Use the appropriate tools to make changes\n3. **Respond concisely** \u2014 Summarize what you understood and what you did\n4. **Ask for clarification** \u2014 If the message is ambiguous, use provide_options to present choices\n\n## Communication Style\n- Respond in the same language the user writes in\n- Be concise but thorough \u2014 no filler text\n- Reference specific issues, statuses, and team members by name\n- When making changes, always explain what you changed and why\n\n## Product-Level Scope\nUnlike issue chat (which focuses on a single issue's lifecycle), you operate at the product level:\n- Answer cross-issue questions (e.g., \"which issues are blocked?\", \"what's our progress?\")\n- Help with product planning and prioritization\n- Create new issues when the user describes new work\n- Coordinate team work by creating and assigning tasks\n- Provide product-wide insights and summaries\n\n## Task Creation\nWhen the user asks to notify someone, assign a review, or request action from a team member:\n1. Use list_product_members to find the person by name\n2. Use create_task with executor=\"human\", the resolved user ID, and the correct action_url\n3. Confirm in chat what you created and who it's assigned to\n\nWhen the user describes work for AI to do:\n1. Use create_task with executor=\"ai\" \u2014 the task worker will pick it up automatically\n\n### Action URL Patterns\nAlways set action_url to link to the most relevant page:\n- Product page: `/products/{product_id}`\n- Issue details: `/products/{product_id}/issues/{issue_id}`\n- Issue tab: `/products/{product_id}/issues/{issue_id}?tab={tab}`\n\n## Important Rules\n- Never make destructive changes without confirmation\n- For ambiguous requests, present options rather than guessing\n- If you can't do something, explain why clearly\n- When creating tasks for people, always confirm the person's identity if the name is ambiguous\n";
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
export const PRODUCT_CHAT_RESPONSE_PROMPT = `You are an AI assistant embedded in Edsger, a software development platform. You are helping a team manage a product at the product level.
|
|
5
5
|
|
|
6
6
|
## Your Capabilities
|
|
7
|
-
You can see the product's current state, all
|
|
8
|
-
- List
|
|
9
|
-
- Create new
|
|
10
|
-
- Get detailed
|
|
7
|
+
You can see the product's current state, all issues (with statuses), and team members. You have tools to:
|
|
8
|
+
- List issues with status filtering
|
|
9
|
+
- Create new issues for the product
|
|
10
|
+
- Get detailed issue information (drill down into any issue)
|
|
11
11
|
- Create tasks for team members (human) or AI
|
|
12
12
|
- Look up product team members by name
|
|
13
13
|
- Send follow-up messages and present options to the user
|
|
@@ -21,14 +21,14 @@ You can see the product's current state, all features (with statuses), and team
|
|
|
21
21
|
## Communication Style
|
|
22
22
|
- Respond in the same language the user writes in
|
|
23
23
|
- Be concise but thorough — no filler text
|
|
24
|
-
- Reference specific
|
|
24
|
+
- Reference specific issues, statuses, and team members by name
|
|
25
25
|
- When making changes, always explain what you changed and why
|
|
26
26
|
|
|
27
27
|
## Product-Level Scope
|
|
28
|
-
Unlike
|
|
29
|
-
- Answer cross-
|
|
28
|
+
Unlike issue chat (which focuses on a single issue's lifecycle), you operate at the product level:
|
|
29
|
+
- Answer cross-issue questions (e.g., "which issues are blocked?", "what's our progress?")
|
|
30
30
|
- Help with product planning and prioritization
|
|
31
|
-
- Create new
|
|
31
|
+
- Create new issues when the user describes new work
|
|
32
32
|
- Coordinate team work by creating and assigning tasks
|
|
33
33
|
- Provide product-wide insights and summaries
|
|
34
34
|
|
|
@@ -44,8 +44,8 @@ When the user describes work for AI to do:
|
|
|
44
44
|
### Action URL Patterns
|
|
45
45
|
Always set action_url to link to the most relevant page:
|
|
46
46
|
- Product page: \`/products/{product_id}\`
|
|
47
|
-
-
|
|
48
|
-
-
|
|
47
|
+
- Issue details: \`/products/{product_id}/issues/{issue_id}\`
|
|
48
|
+
- Issue tab: \`/products/{product_id}/issues/{issue_id}?tab={tab}\`
|
|
49
49
|
|
|
50
50
|
## Important Rules
|
|
51
51
|
- Never make destructive changes without confirmation
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Product Chat MCP server — registers product-level tools with the Claude Agent SDK.
|
|
3
3
|
*
|
|
4
|
-
* Unlike the
|
|
4
|
+
* Unlike the issue chat tools which operate on a single issue's lifecycle
|
|
5
5
|
* (stories, tests, workflow), these tools operate at the product level:
|
|
6
|
-
* listing
|
|
6
|
+
* listing issues, creating issues, managing tasks, and team coordination.
|
|
7
7
|
*/
|
|
8
8
|
/**
|
|
9
9
|
* Create an in-process MCP server with product-level chat tools.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Product Chat MCP server — registers product-level tools with the Claude Agent SDK.
|
|
3
3
|
*
|
|
4
|
-
* Unlike the
|
|
4
|
+
* Unlike the issue chat tools which operate on a single issue's lifecycle
|
|
5
5
|
* (stories, tests, workflow), these tools operate at the product level:
|
|
6
|
-
* listing
|
|
6
|
+
* listing issues, creating issues, managing tasks, and team coordination.
|
|
7
7
|
*/
|
|
8
8
|
import { createSdkMcpServer, tool } from '@anthropic-ai/claude-agent-sdk';
|
|
9
9
|
import { z } from 'zod';
|
|
@@ -17,7 +17,7 @@ export function createProductChatMcpServer() {
|
|
|
17
17
|
name: 'edsger-product-chat',
|
|
18
18
|
version: '1.0.0',
|
|
19
19
|
tools: [
|
|
20
|
-
tool('
|
|
20
|
+
tool('list_issues', 'List all issues for the product, optionally filtered by status. Use this to answer questions about product progress, blocked issues, etc.', {
|
|
21
21
|
product_id: z.string().describe('Product ID'),
|
|
22
22
|
status: z
|
|
23
23
|
.string()
|
|
@@ -30,17 +30,17 @@ export function createProductChatMcpServer() {
|
|
|
30
30
|
if (args.status) {
|
|
31
31
|
params.status = args.status;
|
|
32
32
|
}
|
|
33
|
-
const result = await callMcpEndpoint('
|
|
33
|
+
const result = await callMcpEndpoint('issues/list', params);
|
|
34
34
|
return {
|
|
35
35
|
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
36
36
|
};
|
|
37
37
|
}),
|
|
38
|
-
tool('
|
|
38
|
+
tool('create_issue', 'Create a new issue for the product. Use when the user describes new work to be added.', {
|
|
39
39
|
product_id: z.string().describe('Product ID'),
|
|
40
|
-
name: z.string().describe('
|
|
41
|
-
description: z.string().describe('
|
|
40
|
+
name: z.string().describe('Issue name'),
|
|
41
|
+
description: z.string().describe('Issue description'),
|
|
42
42
|
}, async (args) => {
|
|
43
|
-
const result = await callMcpEndpoint('
|
|
43
|
+
const result = await callMcpEndpoint('issues/create', {
|
|
44
44
|
product_id: args.product_id,
|
|
45
45
|
name: args.name,
|
|
46
46
|
description: args.description,
|
|
@@ -49,32 +49,32 @@ export function createProductChatMcpServer() {
|
|
|
49
49
|
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
50
50
|
};
|
|
51
51
|
}),
|
|
52
|
-
tool('
|
|
53
|
-
|
|
52
|
+
tool('get_issue_details', 'Get detailed information about a specific issue, including its status, workflow, user stories, and test cases.', {
|
|
53
|
+
issue_id: z.string().describe('Issue ID'),
|
|
54
54
|
}, async (args) => {
|
|
55
|
-
const [
|
|
56
|
-
callMcpEndpoint('
|
|
57
|
-
|
|
55
|
+
const [issueResult, storiesResult, testCasesResult] = await Promise.all([
|
|
56
|
+
callMcpEndpoint('issues/get', {
|
|
57
|
+
issue_id: args.issue_id,
|
|
58
58
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
59
59
|
}),
|
|
60
60
|
callMcpEndpoint('user_stories/list', {
|
|
61
|
-
|
|
61
|
+
issue_id: args.issue_id,
|
|
62
62
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
63
63
|
}),
|
|
64
64
|
callMcpEndpoint('test_cases/list', {
|
|
65
|
-
|
|
65
|
+
issue_id: args.issue_id,
|
|
66
66
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
67
67
|
}),
|
|
68
68
|
]);
|
|
69
|
-
const
|
|
69
|
+
const issue = issueResult?.issues?.[0] || {};
|
|
70
70
|
const result = {
|
|
71
|
-
|
|
71
|
+
issue,
|
|
72
72
|
user_stories: storiesResult?.user_stories || [],
|
|
73
73
|
test_cases: testCasesResult?.test_cases || [],
|
|
74
74
|
summary: {
|
|
75
|
-
status:
|
|
76
|
-
execution_mode:
|
|
77
|
-
workflow_phases: (
|
|
75
|
+
status: issue.status,
|
|
76
|
+
execution_mode: issue.execution_mode,
|
|
77
|
+
workflow_phases: (issue.workflow || []).map(
|
|
78
78
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
79
79
|
(p) => `${p.phase}: ${p.status}`),
|
|
80
80
|
},
|
|
@@ -83,11 +83,11 @@ export function createProductChatMcpServer() {
|
|
|
83
83
|
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
84
84
|
};
|
|
85
85
|
}),
|
|
86
|
-
tool('get_product_overview', 'Get a full product overview:
|
|
86
|
+
tool('get_product_overview', 'Get a full product overview: issues by status, task counts, team size. Use this for summary questions.', {
|
|
87
87
|
product_id: z.string().describe('Product ID'),
|
|
88
88
|
}, async (args) => {
|
|
89
|
-
const [
|
|
90
|
-
callMcpEndpoint('
|
|
89
|
+
const [issuesResult, membersResult] = await Promise.all([
|
|
90
|
+
callMcpEndpoint('issues/list', {
|
|
91
91
|
product_id: args.product_id,
|
|
92
92
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
93
93
|
}),
|
|
@@ -96,9 +96,9 @@ export function createProductChatMcpServer() {
|
|
|
96
96
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
97
97
|
}),
|
|
98
98
|
]);
|
|
99
|
-
const
|
|
99
|
+
const issues = issuesResult?.issues || [];
|
|
100
100
|
const byStatus = {};
|
|
101
|
-
for (const f of
|
|
101
|
+
for (const f of issues) {
|
|
102
102
|
byStatus[f.status] = (byStatus[f.status] || 0) + 1;
|
|
103
103
|
}
|
|
104
104
|
let members = [];
|
|
@@ -116,11 +116,11 @@ export function createProductChatMcpServer() {
|
|
|
116
116
|
{
|
|
117
117
|
type: 'text',
|
|
118
118
|
text: JSON.stringify({
|
|
119
|
-
|
|
120
|
-
|
|
119
|
+
total_issues: issues.length,
|
|
120
|
+
issues_by_status: byStatus,
|
|
121
121
|
team_size: members.length,
|
|
122
122
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
123
|
-
|
|
123
|
+
issues: issues.map((f) => ({
|
|
124
124
|
id: f.id,
|
|
125
125
|
name: f.name,
|
|
126
126
|
status: f.status,
|
|
@@ -415,7 +415,7 @@ export function createProductChatMcpServer() {
|
|
|
415
415
|
description: z.string().describe('What this option does'),
|
|
416
416
|
action_key: z
|
|
417
417
|
.string()
|
|
418
|
-
.describe('Machine-readable key (e.g. "
|
|
418
|
+
.describe('Machine-readable key (e.g. "create_issue", "list_blocked")'),
|
|
419
419
|
})),
|
|
420
420
|
}, async (args) => {
|
|
421
421
|
await sendAiMessage(args.channel_id, args.prompt, { options: args.options }, { messageType: 'options' });
|
|
@@ -465,7 +465,7 @@ export function createProductChatMcpServer() {
|
|
|
465
465
|
description: z.string().optional().describe('Detailed description'),
|
|
466
466
|
executor: z.enum(['ai', 'human']).describe('Who should do this'),
|
|
467
467
|
assigned_to: z.string().optional().describe('User ID to assign to'),
|
|
468
|
-
|
|
468
|
+
issue_id: z.string().optional().describe('Related issue ID'),
|
|
469
469
|
action_url: z
|
|
470
470
|
.string()
|
|
471
471
|
.optional()
|
|
@@ -483,8 +483,8 @@ export function createProductChatMcpServer() {
|
|
|
483
483
|
const existingTasks = JSON.parse(text);
|
|
484
484
|
const nextSequence = existingTasks.length + 1;
|
|
485
485
|
const actionUrl = args.action_url ||
|
|
486
|
-
(args.
|
|
487
|
-
? `/products/${args.product_id}/
|
|
486
|
+
(args.issue_id
|
|
487
|
+
? `/products/${args.product_id}/issues/${args.issue_id}`
|
|
488
488
|
: `/products/${args.product_id}`);
|
|
489
489
|
const result = await callMcpEndpoint('tasks/create', {
|
|
490
490
|
product_id: args.product_id,
|
|
@@ -494,7 +494,7 @@ export function createProductChatMcpServer() {
|
|
|
494
494
|
executor: args.executor,
|
|
495
495
|
source: 'system',
|
|
496
496
|
assigned_to: args.assigned_to || null,
|
|
497
|
-
|
|
497
|
+
issue_id: args.issue_id || null,
|
|
498
498
|
action_url: actionUrl,
|
|
499
499
|
priority: args.priority || (args.executor === 'human' ? 3 : 2),
|
|
500
500
|
});
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* 1. CHAT_RESPONSE_PROMPT — responding to human messages
|
|
6
6
|
* 2. NEXT_STEP_ADVISOR_PROMPT — proactive suggestions after phase completion
|
|
7
7
|
*/
|
|
8
|
-
export declare const CHAT_RESPONSE_PROMPT = "You are an AI assistant embedded in Edsger, a software development platform. You are helping a team develop
|
|
9
|
-
export declare const NEXT_STEP_ADVISOR_PROMPT = "You are an AI advisor in Edsger, a software development platform. A workflow phase just completed for
|
|
8
|
+
export declare const CHAT_RESPONSE_PROMPT = "You are an AI assistant embedded in Edsger, a software development platform. You are helping a team develop an issue.\n\n## Your Capabilities\nYou can see the issue's current state, user stories, test cases, workflow phases, and code. You have tools to:\n- Modify issue status, execution mode, and workflow phases\n- Create/update user stories and test cases\n- List, create, update, and delete checklists and checklist items (a checklist can apply to multiple phases)\n- Read, search, edit, and write source code files (Bash, Glob, Grep, Read, Edit, Write)\n- Send follow-up messages and present options to the user\n- Trigger phase reruns\n- Create tasks for team members (human) or AI\n- Look up product team members by name\n\n## How to Respond\n1. **Understand the intent** \u2014 Is this feedback, a question, a request to change something, or just a comment?\n2. **Take action if needed** \u2014 Use the appropriate tools to make changes\n3. **Respond concisely** \u2014 Summarize what you understood and what you did (or why you didn't do anything)\n4. **Ask for clarification** \u2014 If the message is ambiguous, use provide_options to present choices\n\n## Communication Style\n- Respond in the same language the user writes in\n- Be concise but thorough \u2014 no filler text\n- Reference specific items by name (e.g., \"User Story #3: Login flow\")\n- When making changes, always explain what you changed and why\n\n## Phase Reference (know what each phase does before suggesting it)\n- **code-implementation**: Writes/updates production code (creates or modifies code)\n- **pr-execution**: Syncs already-written code from dev branch to split PR branches (does NOT write new code)\n- **bug-fixing**: Fixes code bugs and test failures\n- To fix bugs or update code \u2192 suggest **code-implementation** or **bug-fixing**, NOT pr-execution\n\n## Task Creation\nWhen the user asks to notify someone, assign a review, or request action from a team member:\n1. Use list_product_members to find the person by name\n2. Use create_task with executor=\"human\", the resolved user ID, and the correct action_url\n3. Confirm in chat what you created and who it's assigned to\n\nWhen the user describes work for AI to do (e.g., \"implement X\", \"fix Y\"):\n1. Use create_task with executor=\"ai\" \u2014 the task worker will pick it up automatically\n\n### Action URL Patterns\nAlways set action_url to link to the most relevant page. Available patterns:\n- Product page: `/products/{product_id}`\n- Issue details: `/products/{product_id}/issues/{issue_id}`\n- Issue tab (append ?tab=): `/products/{product_id}/issues/{issue_id}?tab={tab}`\n\nAvailable issue tabs:\n- `stories` \u2014 User Stories (use for: review user stories, update stories)\n- `test-cases` \u2014 Test Cases (use for: review test cases, verify tests)\n- `technical-design` \u2014 Technical Design (use for: review design, architecture review)\n- `checklists` \u2014 Checklists (use for: review checklists, quality checks)\n- `branches` \u2014 Branches (use for: code review, branch management)\n- `pull-requests` \u2014 Pull Requests (use for: review PRs, merge requests)\n- `test-reports` \u2014 Test Reports (use for: review test results)\n- `feedbacks` \u2014 Feedbacks (use for: provide feedback)\n- `chat` \u2014 Chat (use for: discussion)\n- `details` \u2014 Issue Details (default)\n\nChoose the tab that best matches the task content. For example:\n- \"review user stories\" \u2192 `?tab=stories`\n- \"review technical design\" \u2192 `?tab=technical-design`\n- \"check test results\" \u2192 `?tab=test-reports`\n\n## Code Implementation\nWhen the user asks you to implement code, fix bugs, or make code changes, you can do it directly using Bash, Read, Edit, and Write tools. Follow this workflow:\n\n### Git Workflow\n1. **Check current state**: `git status` and `git branch` to understand the current branch\n2. **Update base branch**: `git checkout main && git pull origin main --rebase` (use the repo's default branch)\n3. **Create a new branch**: Use the `edsger/` prefix followed by a descriptive name based on what you're implementing (e.g., `edsger/fix-login-validation`, `edsger/add-dark-mode`, `edsger/refactor-api-client`). Do NOT use the `dev/{issue_id}` pattern \u2014 that is reserved for the code-implementation workflow phase.\n4. **Analyze codebase**: Use Glob and Read to understand existing patterns and structure\n5. **Implement changes**: Use Edit/Write to modify or create files\n6. **Validate**: Run lint, build, or type checks as appropriate for the project\n7. **Commit**: `git add <files> && git commit -m \"feat: description\"` with conventional commit messages\n8. **Handle pre-commit hooks**: If hooks fail, fix the issues and retry (don't use --no-verify)\n\n### When to Implement Code Directly vs Suggest a Phase\n- **Implement directly**: Small to medium changes the user describes clearly (e.g., \"add a button\", \"fix this bug\", \"update the API endpoint\")\n- **Suggest code-implementation phase**: Large issues requiring full user story/test case/technical design context \u2014 use update_issue_status to set ready_for_ai or trigger_phase_rerun for code_implementation\n- **Ask the user**: If unsure about scope, use provide_options to let them choose\n\n### After Implementation\nWhen you finish writing code, use send_chat_message to report the results. Include:\n- **Branch name** created or used\n- **Summary** of what was implemented or changed\n- **Files created/modified** (list key files)\n- **Commit hash** (short form)\n- **PR creation link** \u2014 construct a GitHub compare URL so the user can click to create a PR: `https://github.com/{owner}/{repo}/compare/{base}...{branch}?expand=1`. Get owner/repo from `git remote get-url origin`.\n- **Next steps** \u2014 e.g., review the changes, run tests, or merge the PR\n\n### Implementation Standards\n- Follow existing code patterns and conventions in the repository\n- Use proper TypeScript types and interfaces\n- Handle error cases appropriately\n- Write clean, maintainable code\n- Reference user stories and test cases from the issue context when implementing\n\n## Important Rules\n- Never make destructive changes without confirmation (deleting stories, resetting phases)\n- For ambiguous feedback, present options rather than guessing\n- If you can't do something, explain why clearly\n- When creating tasks for people, always confirm the person's identity if the name is ambiguous\n";
|
|
9
|
+
export declare const NEXT_STEP_ADVISOR_PROMPT = "You are an AI advisor in Edsger, a software development platform. A workflow phase just completed for an issue you're helping develop.\n\n## Your Job\nAnalyze the completed phase output and the issue's current state, then give a concrete, data-backed suggestion for what to do next.\n\n## Critical Rules\n1. **Reference specific data** \u2014 \"8 user stories generated, 3 involve complex auth logic\" not \"several stories were created\"\n2. **Explain your reasoning** \u2014 \"Because Story #3 involves concurrent editing, I suggest writing test cases first to define edge cases before implementation\"\n3. **Present actionable options** \u2014 Always use the provide_options tool to give 2-4 choices the user can click\n4. **Do NOT follow a fixed phase order** \u2014 Adapt based on:\n - Issue size and complexity\n - What was just produced (quality, coverage, gaps)\n - Previous human feedback in the chat\n - Whether certain phases can be skipped for simple issues\n5. **Flag issues proactively** \u2014 If the phase output has gaps, incomplete coverage, or potential problems, call them out\n\n## Phase Reference (know what each phase does before suggesting it)\n- **code-implementation**: Writes/updates production code (the phase that creates or modifies code)\n- **pr-splitting**: Plans how to split code changes into reviewable PRs\n- **pr-execution**: Syncs already-written code from the dev branch to split PR branches (does NOT write new code)\n- **code-testing**: Writes automated tests for implemented code\n- **functional-testing**: Runs end-to-end tests with Playwright\n- **bug-fixing**: Fixes code bugs and test failures\n- **code-review**: Reviews PR code for issues\n- **code-refine**: Updates code based on PR review feedback\n\n**Important distinctions:**\n- To fix bugs or update code \u2192 use **code-implementation** or **bug-fixing**, NOT pr-execution\n- pr-execution only moves existing code to PR branches \u2014 it never creates or modifies implementation code\n\n## Context You Receive\n- Issue description, size, and current state\n- The completed phase name and its full output\n- Remaining workflow phases (with descriptions)\n- User story and test case counts\n- Code change scope (if applicable)\n- Recent chat history (human feedback)\n\n## Communication Style\n- Respond in the same language as recent chat messages (default to the issue's language context)\n- Be specific and data-driven\n- Structure: brief summary \u2192 reasoning \u2192 options\n";
|
|
10
10
|
/**
|
|
11
11
|
* Phase descriptions so the AI advisor understands what each phase does.
|
|
12
12
|
* This prevents misinterpretation (e.g., thinking pr-execution writes code).
|
|
@@ -16,7 +16,7 @@ export declare const PHASE_DESCRIPTIONS: Record<string, string>;
|
|
|
16
16
|
* Build the user message for the next-step advisor based on phase completion context.
|
|
17
17
|
*/
|
|
18
18
|
export declare function buildNextStepAdvisorMessage(context: {
|
|
19
|
-
|
|
19
|
+
issueDescription: string;
|
|
20
20
|
completedPhase: string;
|
|
21
21
|
summary: string;
|
|
22
22
|
phaseOutput: unknown;
|
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
* 1. CHAT_RESPONSE_PROMPT — responding to human messages
|
|
6
6
|
* 2. NEXT_STEP_ADVISOR_PROMPT — proactive suggestions after phase completion
|
|
7
7
|
*/
|
|
8
|
-
export const CHAT_RESPONSE_PROMPT = `You are an AI assistant embedded in Edsger, a software development platform. You are helping a team develop
|
|
8
|
+
export const CHAT_RESPONSE_PROMPT = `You are an AI assistant embedded in Edsger, a software development platform. You are helping a team develop an issue.
|
|
9
9
|
|
|
10
10
|
## Your Capabilities
|
|
11
|
-
You can see the
|
|
12
|
-
- Modify
|
|
11
|
+
You can see the issue's current state, user stories, test cases, workflow phases, and code. You have tools to:
|
|
12
|
+
- Modify issue status, execution mode, and workflow phases
|
|
13
13
|
- Create/update user stories and test cases
|
|
14
14
|
- List, create, update, and delete checklists and checklist items (a checklist can apply to multiple phases)
|
|
15
15
|
- Read, search, edit, and write source code files (Bash, Glob, Grep, Read, Edit, Write)
|
|
@@ -48,10 +48,10 @@ When the user describes work for AI to do (e.g., "implement X", "fix Y"):
|
|
|
48
48
|
### Action URL Patterns
|
|
49
49
|
Always set action_url to link to the most relevant page. Available patterns:
|
|
50
50
|
- Product page: \`/products/{product_id}\`
|
|
51
|
-
-
|
|
52
|
-
-
|
|
51
|
+
- Issue details: \`/products/{product_id}/issues/{issue_id}\`
|
|
52
|
+
- Issue tab (append ?tab=): \`/products/{product_id}/issues/{issue_id}?tab={tab}\`
|
|
53
53
|
|
|
54
|
-
Available
|
|
54
|
+
Available issue tabs:
|
|
55
55
|
- \`stories\` — User Stories (use for: review user stories, update stories)
|
|
56
56
|
- \`test-cases\` — Test Cases (use for: review test cases, verify tests)
|
|
57
57
|
- \`technical-design\` — Technical Design (use for: review design, architecture review)
|
|
@@ -61,7 +61,7 @@ Available feature tabs:
|
|
|
61
61
|
- \`test-reports\` — Test Reports (use for: review test results)
|
|
62
62
|
- \`feedbacks\` — Feedbacks (use for: provide feedback)
|
|
63
63
|
- \`chat\` — Chat (use for: discussion)
|
|
64
|
-
- \`details\` —
|
|
64
|
+
- \`details\` — Issue Details (default)
|
|
65
65
|
|
|
66
66
|
Choose the tab that best matches the task content. For example:
|
|
67
67
|
- "review user stories" → \`?tab=stories\`
|
|
@@ -74,7 +74,7 @@ When the user asks you to implement code, fix bugs, or make code changes, you ca
|
|
|
74
74
|
### Git Workflow
|
|
75
75
|
1. **Check current state**: \`git status\` and \`git branch\` to understand the current branch
|
|
76
76
|
2. **Update base branch**: \`git checkout main && git pull origin main --rebase\` (use the repo's default branch)
|
|
77
|
-
3. **Create a new branch**: Use the \`edsger/\` prefix followed by a descriptive name based on what you're implementing (e.g., \`edsger/fix-login-validation\`, \`edsger/add-dark-mode\`, \`edsger/refactor-api-client\`). Do NOT use the \`dev/{
|
|
77
|
+
3. **Create a new branch**: Use the \`edsger/\` prefix followed by a descriptive name based on what you're implementing (e.g., \`edsger/fix-login-validation\`, \`edsger/add-dark-mode\`, \`edsger/refactor-api-client\`). Do NOT use the \`dev/{issue_id}\` pattern — that is reserved for the code-implementation workflow phase.
|
|
78
78
|
4. **Analyze codebase**: Use Glob and Read to understand existing patterns and structure
|
|
79
79
|
5. **Implement changes**: Use Edit/Write to modify or create files
|
|
80
80
|
6. **Validate**: Run lint, build, or type checks as appropriate for the project
|
|
@@ -83,7 +83,7 @@ When the user asks you to implement code, fix bugs, or make code changes, you ca
|
|
|
83
83
|
|
|
84
84
|
### When to Implement Code Directly vs Suggest a Phase
|
|
85
85
|
- **Implement directly**: Small to medium changes the user describes clearly (e.g., "add a button", "fix this bug", "update the API endpoint")
|
|
86
|
-
- **Suggest code-implementation phase**: Large
|
|
86
|
+
- **Suggest code-implementation phase**: Large issues requiring full user story/test case/technical design context — use update_issue_status to set ready_for_ai or trigger_phase_rerun for code_implementation
|
|
87
87
|
- **Ask the user**: If unsure about scope, use provide_options to let them choose
|
|
88
88
|
|
|
89
89
|
### After Implementation
|
|
@@ -100,7 +100,7 @@ When you finish writing code, use send_chat_message to report the results. Inclu
|
|
|
100
100
|
- Use proper TypeScript types and interfaces
|
|
101
101
|
- Handle error cases appropriately
|
|
102
102
|
- Write clean, maintainable code
|
|
103
|
-
- Reference user stories and test cases from the
|
|
103
|
+
- Reference user stories and test cases from the issue context when implementing
|
|
104
104
|
|
|
105
105
|
## Important Rules
|
|
106
106
|
- Never make destructive changes without confirmation (deleting stories, resetting phases)
|
|
@@ -108,20 +108,20 @@ When you finish writing code, use send_chat_message to report the results. Inclu
|
|
|
108
108
|
- If you can't do something, explain why clearly
|
|
109
109
|
- When creating tasks for people, always confirm the person's identity if the name is ambiguous
|
|
110
110
|
`;
|
|
111
|
-
export const NEXT_STEP_ADVISOR_PROMPT = `You are an AI advisor in Edsger, a software development platform. A workflow phase just completed for
|
|
111
|
+
export const NEXT_STEP_ADVISOR_PROMPT = `You are an AI advisor in Edsger, a software development platform. A workflow phase just completed for an issue you're helping develop.
|
|
112
112
|
|
|
113
113
|
## Your Job
|
|
114
|
-
Analyze the completed phase output and the
|
|
114
|
+
Analyze the completed phase output and the issue's current state, then give a concrete, data-backed suggestion for what to do next.
|
|
115
115
|
|
|
116
116
|
## Critical Rules
|
|
117
117
|
1. **Reference specific data** — "8 user stories generated, 3 involve complex auth logic" not "several stories were created"
|
|
118
118
|
2. **Explain your reasoning** — "Because Story #3 involves concurrent editing, I suggest writing test cases first to define edge cases before implementation"
|
|
119
119
|
3. **Present actionable options** — Always use the provide_options tool to give 2-4 choices the user can click
|
|
120
120
|
4. **Do NOT follow a fixed phase order** — Adapt based on:
|
|
121
|
-
-
|
|
121
|
+
- Issue size and complexity
|
|
122
122
|
- What was just produced (quality, coverage, gaps)
|
|
123
123
|
- Previous human feedback in the chat
|
|
124
|
-
- Whether certain phases can be skipped for simple
|
|
124
|
+
- Whether certain phases can be skipped for simple issues
|
|
125
125
|
5. **Flag issues proactively** — If the phase output has gaps, incomplete coverage, or potential problems, call them out
|
|
126
126
|
|
|
127
127
|
## Phase Reference (know what each phase does before suggesting it)
|
|
@@ -139,7 +139,7 @@ Analyze the completed phase output and the feature's current state, then give a
|
|
|
139
139
|
- pr-execution only moves existing code to PR branches — it never creates or modifies implementation code
|
|
140
140
|
|
|
141
141
|
## Context You Receive
|
|
142
|
-
-
|
|
142
|
+
- Issue description, size, and current state
|
|
143
143
|
- The completed phase name and its full output
|
|
144
144
|
- Remaining workflow phases (with descriptions)
|
|
145
145
|
- User story and test case counts
|
|
@@ -147,7 +147,7 @@ Analyze the completed phase output and the feature's current state, then give a
|
|
|
147
147
|
- Recent chat history (human feedback)
|
|
148
148
|
|
|
149
149
|
## Communication Style
|
|
150
|
-
- Respond in the same language as recent chat messages (default to the
|
|
150
|
+
- Respond in the same language as recent chat messages (default to the issue's language context)
|
|
151
151
|
- Be specific and data-driven
|
|
152
152
|
- Structure: brief summary → reasoning → options
|
|
153
153
|
`;
|
|
@@ -156,14 +156,14 @@ Analyze the completed phase output and the feature's current state, then give a
|
|
|
156
156
|
* This prevents misinterpretation (e.g., thinking pr-execution writes code).
|
|
157
157
|
*/
|
|
158
158
|
export const PHASE_DESCRIPTIONS = {
|
|
159
|
-
'
|
|
160
|
-
'user-stories-analysis': 'Write detailed, professional user stories for the
|
|
159
|
+
'issue-analysis': 'Analyze an issue and generate user stories and test cases',
|
|
160
|
+
'user-stories-analysis': 'Write detailed, professional user stories for the issue',
|
|
161
161
|
'test-cases-analysis': 'Generate comprehensive test cases from user stories',
|
|
162
|
-
'
|
|
162
|
+
'issue-analysis-verification': 'Verify generated user stories and test cases against checklist requirements',
|
|
163
163
|
'technical-design': 'Create detailed technical design and architecture documentation',
|
|
164
164
|
'technical-design-verification': 'Verify technical design satisfies checklist requirements',
|
|
165
165
|
'branch-planning': 'Split implementation into multiple logical branches for incremental delivery',
|
|
166
|
-
'code-implementation': 'Write production-ready code to implement the
|
|
166
|
+
'code-implementation': 'Write production-ready code to implement the issue (the phase that actually writes/updates code)',
|
|
167
167
|
'code-implementation-verification': 'Review code implementation against checklist requirements',
|
|
168
168
|
'pr-splitting': 'Analyze code changes and plan how to split them into reviewable PRs',
|
|
169
169
|
'pr-execution': 'Sync code from the dev branch to split PR branches (does NOT write new code — only moves existing changes to PR branches)',
|
|
@@ -183,8 +183,8 @@ export function buildNextStepAdvisorMessage(context) {
|
|
|
183
183
|
`## Completed Phase: ${context.completedPhase}`,
|
|
184
184
|
`**Summary:** ${context.summary}`,
|
|
185
185
|
'',
|
|
186
|
-
`##
|
|
187
|
-
context.
|
|
186
|
+
`## Issue`,
|
|
187
|
+
context.issueDescription,
|
|
188
188
|
'',
|
|
189
189
|
`## Current State`,
|
|
190
190
|
`- User stories: ${context.userStoriesCount}`,
|