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,15 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Main workflow processor for continuous
|
|
3
|
-
* Monitors for ready_for_ai
|
|
2
|
+
* Main workflow processor for continuous issue development
|
|
3
|
+
* Monitors for ready_for_ai issues and processes them through the complete pipeline
|
|
4
4
|
* Uses functional programming principles
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
6
|
+
import { claimNextIssue } from '../../api/issues/index.js';
|
|
7
7
|
import { logInfo } from '../../utils/logger.js';
|
|
8
8
|
import { evaluatePipelineResults } from './core/pipeline-evaluator.js';
|
|
9
9
|
// Import core modules
|
|
10
|
-
import { calculateStats, createCompletedState, createFailedState, createInitialState, createProcessingState,
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
10
|
+
import { calculateStats, createCompletedState, createFailedState, createInitialState, createProcessingState, updateIssueState, } from './core/state-manager.js';
|
|
11
|
+
import { logIssueError, logIssueFailed, logIssueSuccess, logNoIssuesFound, logPipelineResults, logPollingError, logProcessingStart, logProcessNextIssueError, logProcessorReady, logProcessorStart, logProcessorStop, logRetryInfo, logSkippingProcessing, } from './core/workflow-logger.js';
|
|
12
|
+
import { runIssueWorkflow } from './issue-coordinator.js';
|
|
13
13
|
/**
|
|
14
14
|
* Workflow processor using functional programming principles
|
|
15
15
|
*/
|
|
@@ -17,7 +17,7 @@ export class WorkflowProcessor {
|
|
|
17
17
|
options;
|
|
18
18
|
config;
|
|
19
19
|
isRunning = false;
|
|
20
|
-
|
|
20
|
+
processedIssues = createInitialState();
|
|
21
21
|
pollTimer;
|
|
22
22
|
constructor(options, config) {
|
|
23
23
|
this.options = {
|
|
@@ -39,10 +39,10 @@ export class WorkflowProcessor {
|
|
|
39
39
|
this.isRunning = true;
|
|
40
40
|
logProcessorStart(this.options.productId, this.options.pollInterval);
|
|
41
41
|
// Initial check
|
|
42
|
-
await this.
|
|
43
|
-
// Set up polling for new
|
|
42
|
+
await this.processNextIssue();
|
|
43
|
+
// Set up polling for new issues
|
|
44
44
|
this.pollTimer = setInterval(() => {
|
|
45
|
-
this.
|
|
45
|
+
this.processNextIssue().catch((error) => {
|
|
46
46
|
logPollingError(error);
|
|
47
47
|
});
|
|
48
48
|
}, this.options.pollInterval);
|
|
@@ -63,87 +63,87 @@ export class WorkflowProcessor {
|
|
|
63
63
|
logProcessorStop();
|
|
64
64
|
}
|
|
65
65
|
/**
|
|
66
|
-
* Process the next available
|
|
66
|
+
* Process the next available issue using atomic claim mechanism
|
|
67
67
|
* Uses database-level locking to prevent race conditions between workers
|
|
68
68
|
*/
|
|
69
|
-
async
|
|
69
|
+
async processNextIssue() {
|
|
70
70
|
try {
|
|
71
|
-
// Skip
|
|
72
|
-
const stats = calculateStats(this.
|
|
71
|
+
// Skip issue fetching if there are any issues currently being processed
|
|
72
|
+
const stats = calculateStats(this.processedIssues, this.isRunning);
|
|
73
73
|
if (stats.processing > 0) {
|
|
74
74
|
if (this.options.verbose) {
|
|
75
75
|
logSkippingProcessing(stats.processing);
|
|
76
76
|
}
|
|
77
77
|
return;
|
|
78
78
|
}
|
|
79
|
-
// Atomically claim the next available
|
|
80
|
-
// This uses FOR UPDATE SKIP LOCKED to prevent multiple workers from claiming the same
|
|
81
|
-
const
|
|
82
|
-
if (!
|
|
79
|
+
// Atomically claim the next available issue
|
|
80
|
+
// This uses FOR UPDATE SKIP LOCKED to prevent multiple workers from claiming the same issue
|
|
81
|
+
const claimedIssue = await claimNextIssue(this.options.productId, this.options.verbose);
|
|
82
|
+
if (!claimedIssue) {
|
|
83
83
|
if (this.options.verbose) {
|
|
84
|
-
|
|
84
|
+
logNoIssuesFound();
|
|
85
85
|
}
|
|
86
86
|
return;
|
|
87
87
|
}
|
|
88
|
-
// Process the claimed
|
|
89
|
-
await this.
|
|
88
|
+
// Process the claimed issue
|
|
89
|
+
await this.processIssue(claimedIssue);
|
|
90
90
|
}
|
|
91
91
|
catch (error) {
|
|
92
|
-
|
|
92
|
+
logProcessNextIssueError(error);
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
/**
|
|
96
|
-
* Process a single
|
|
96
|
+
* Process a single issue through the complete pipeline using functional composition
|
|
97
97
|
*/
|
|
98
|
-
async
|
|
99
|
-
const
|
|
100
|
-
// Check if this is a reprocess due to
|
|
101
|
-
const existingState = this.
|
|
98
|
+
async processIssue(issue) {
|
|
99
|
+
const issueId = issue.id;
|
|
100
|
+
// Check if this is a reprocess due to issue update
|
|
101
|
+
const existingState = this.processedIssues.get(issueId);
|
|
102
102
|
if (existingState &&
|
|
103
103
|
existingState.status === 'completed' &&
|
|
104
104
|
this.options.verbose) {
|
|
105
|
-
logInfo(`🔄 Reprocessing
|
|
106
|
-
if (
|
|
105
|
+
logInfo(`🔄 Reprocessing issue "${issue.name}" - detected status change`);
|
|
106
|
+
if (issue.updated_at) {
|
|
107
107
|
logInfo(` Previous process: ${existingState.lastAttempt.toISOString()}`);
|
|
108
|
-
logInfo(`
|
|
108
|
+
logInfo(` Issue updated: ${issue.updated_at}`);
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
111
|
// Update state to processing using pure function
|
|
112
|
-
this.
|
|
113
|
-
logProcessingStart(
|
|
112
|
+
this.processedIssues = updateIssueState(this.processedIssues, issueId, (currentState) => createProcessingState(issueId, currentState));
|
|
113
|
+
logProcessingStart(issue, this.options.verbose);
|
|
114
114
|
try {
|
|
115
|
-
// Run
|
|
116
|
-
const results = await
|
|
117
|
-
|
|
115
|
+
// Run issue workflow using issue coordinator with execution mode support
|
|
116
|
+
const results = await runIssueWorkflow({
|
|
117
|
+
issueId,
|
|
118
118
|
verbose: this.options.verbose,
|
|
119
119
|
}, this.config);
|
|
120
120
|
// Evaluate results using pure function
|
|
121
121
|
const allSuccessful = evaluatePipelineResults(results);
|
|
122
122
|
if (allSuccessful) {
|
|
123
123
|
// Mark as completed using pure function
|
|
124
|
-
this.
|
|
125
|
-
|
|
124
|
+
this.processedIssues = updateIssueState(this.processedIssues, issueId, (currentState) => createCompletedState(issueId, currentState));
|
|
125
|
+
logIssueSuccess(issue.name);
|
|
126
126
|
logPipelineResults(results);
|
|
127
127
|
}
|
|
128
128
|
else {
|
|
129
129
|
// Mark as failed using pure function
|
|
130
|
-
this.
|
|
131
|
-
|
|
130
|
+
this.processedIssues = updateIssueState(this.processedIssues, issueId, (currentState) => createFailedState(issueId, currentState));
|
|
131
|
+
logIssueFailed(issue.name);
|
|
132
132
|
logPipelineResults(results);
|
|
133
|
-
const currentState = this.
|
|
134
|
-
logRetryInfo(
|
|
133
|
+
const currentState = this.processedIssues.get(issueId);
|
|
134
|
+
logRetryInfo(issue.name, currentState?.retryCount ?? 0, this.options.maxRetries);
|
|
135
135
|
}
|
|
136
136
|
}
|
|
137
137
|
catch (error) {
|
|
138
138
|
// Mark as failed using pure function
|
|
139
|
-
this.
|
|
140
|
-
|
|
139
|
+
this.processedIssues = updateIssueState(this.processedIssues, issueId, (currentState) => createFailedState(issueId, currentState));
|
|
140
|
+
logIssueError(issue.name, error);
|
|
141
141
|
}
|
|
142
142
|
}
|
|
143
143
|
/**
|
|
144
144
|
* Get current processing statistics using pure function
|
|
145
145
|
*/
|
|
146
146
|
getStats() {
|
|
147
|
-
return calculateStats(this.
|
|
147
|
+
return calculateStats(this.processedIssues, this.isRunning);
|
|
148
148
|
}
|
|
149
149
|
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* Defines the progression order and mappings for
|
|
2
|
+
* Issue status configuration
|
|
3
|
+
* Defines the progression order and mappings for issue statuses
|
|
4
4
|
*/
|
|
5
|
-
import type {
|
|
5
|
+
import type { IssueStatus } from '../types/index.js';
|
|
6
6
|
/**
|
|
7
7
|
* Status progression order - higher index means more advanced status
|
|
8
|
-
* This defines the allowed forward progression through the
|
|
8
|
+
* This defines the allowed forward progression through the issue workflow
|
|
9
9
|
*
|
|
10
10
|
* Business Logic Rules:
|
|
11
|
-
* -
|
|
11
|
+
* - Issues can only move forward or stay at the same status level
|
|
12
12
|
* - No regression to earlier stages is allowed (e.g., cannot go back to 'backlog' from 'code_implementation')
|
|
13
13
|
* - Status updates preserve development momentum and prevent accidental rollbacks
|
|
14
14
|
*
|
|
@@ -21,21 +21,21 @@ import type { FeatureStatus } from '../types/index.js';
|
|
|
21
21
|
* through to final shipping. All status values must match the database constraint
|
|
22
22
|
* in migration 20251019000000_update_feature_status_constraint.sql
|
|
23
23
|
*/
|
|
24
|
-
export declare const STATUS_PROGRESSION_ORDER: readonly
|
|
24
|
+
export declare const STATUS_PROGRESSION_ORDER: readonly IssueStatus[];
|
|
25
25
|
/**
|
|
26
26
|
* Phase to status mapping
|
|
27
|
-
* Maps pipeline phase names to their corresponding
|
|
27
|
+
* Maps pipeline phase names to their corresponding issue statuses
|
|
28
28
|
*
|
|
29
|
-
* This mapping ensures that each pipeline phase updates the
|
|
30
|
-
* status. Phase names use kebab-case (e.g., '
|
|
31
|
-
* use snake_case (e.g., '
|
|
29
|
+
* This mapping ensures that each pipeline phase updates the issue to the appropriate
|
|
30
|
+
* status. Phase names use kebab-case (e.g., 'issue-analysis') while status values
|
|
31
|
+
* use snake_case (e.g., 'issue_analysis') to match database schema.
|
|
32
32
|
*
|
|
33
33
|
* All status values must match the database constraint in migration 20251019000000_update_feature_status_constraint.sql
|
|
34
34
|
*
|
|
35
|
-
* If a phase is not found in this mapping,
|
|
35
|
+
* If a phase is not found in this mapping, updateIssueStatusForPhase will return null
|
|
36
36
|
* and skip the status update to prevent unintended regression to 'backlog'.
|
|
37
37
|
*/
|
|
38
|
-
export declare const PHASE_STATUS_MAP: Record<string,
|
|
38
|
+
export declare const PHASE_STATUS_MAP: Record<string, IssueStatus>;
|
|
39
39
|
/**
|
|
40
40
|
* Human-selectable statuses
|
|
41
41
|
* These are the statuses that a human user can manually set.
|
|
@@ -49,8 +49,8 @@ export declare const PHASE_STATUS_MAP: Record<string, FeatureStatus>;
|
|
|
49
49
|
* These excluded statuses should not be shown in UI dropdowns for manual status changes
|
|
50
50
|
* because they represent intermediate states that are managed by the workflow system.
|
|
51
51
|
*/
|
|
52
|
-
export declare const HUMAN_SELECTABLE_STATUSES: readonly
|
|
52
|
+
export declare const HUMAN_SELECTABLE_STATUSES: readonly IssueStatus[];
|
|
53
53
|
/**
|
|
54
54
|
* Check if a status can be manually selected by a human user
|
|
55
55
|
*/
|
|
56
|
-
export declare function isHumanSelectableStatus(status:
|
|
56
|
+
export declare function isHumanSelectableStatus(status: IssueStatus): boolean;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* Defines the progression order and mappings for
|
|
2
|
+
* Issue status configuration
|
|
3
|
+
* Defines the progression order and mappings for issue statuses
|
|
4
4
|
*/
|
|
5
5
|
/**
|
|
6
6
|
* Status progression order - higher index means more advanced status
|
|
7
|
-
* This defines the allowed forward progression through the
|
|
7
|
+
* This defines the allowed forward progression through the issue workflow
|
|
8
8
|
*
|
|
9
9
|
* Business Logic Rules:
|
|
10
|
-
* -
|
|
10
|
+
* - Issues can only move forward or stay at the same status level
|
|
11
11
|
* - No regression to earlier stages is allowed (e.g., cannot go back to 'backlog' from 'code_implementation')
|
|
12
12
|
* - Status updates preserve development momentum and prevent accidental rollbacks
|
|
13
13
|
*
|
|
@@ -24,8 +24,8 @@ export const STATUS_PROGRESSION_ORDER = [
|
|
|
24
24
|
'backlog',
|
|
25
25
|
'ready_for_ai',
|
|
26
26
|
'assigned_to_ai',
|
|
27
|
-
'
|
|
28
|
-
'
|
|
27
|
+
'issue_analysis',
|
|
28
|
+
'issue_analysis_verification',
|
|
29
29
|
'user_stories_analysis',
|
|
30
30
|
'user_stories_analysis_verification',
|
|
31
31
|
'test_cases_analysis',
|
|
@@ -53,20 +53,20 @@ export const STATUS_PROGRESSION_ORDER = [
|
|
|
53
53
|
];
|
|
54
54
|
/**
|
|
55
55
|
* Phase to status mapping
|
|
56
|
-
* Maps pipeline phase names to their corresponding
|
|
56
|
+
* Maps pipeline phase names to their corresponding issue statuses
|
|
57
57
|
*
|
|
58
|
-
* This mapping ensures that each pipeline phase updates the
|
|
59
|
-
* status. Phase names use kebab-case (e.g., '
|
|
60
|
-
* use snake_case (e.g., '
|
|
58
|
+
* This mapping ensures that each pipeline phase updates the issue to the appropriate
|
|
59
|
+
* status. Phase names use kebab-case (e.g., 'issue-analysis') while status values
|
|
60
|
+
* use snake_case (e.g., 'issue_analysis') to match database schema.
|
|
61
61
|
*
|
|
62
62
|
* All status values must match the database constraint in migration 20251019000000_update_feature_status_constraint.sql
|
|
63
63
|
*
|
|
64
|
-
* If a phase is not found in this mapping,
|
|
64
|
+
* If a phase is not found in this mapping, updateIssueStatusForPhase will return null
|
|
65
65
|
* and skip the status update to prevent unintended regression to 'backlog'.
|
|
66
66
|
*/
|
|
67
67
|
export const PHASE_STATUS_MAP = {
|
|
68
|
-
'
|
|
69
|
-
'
|
|
68
|
+
'issue-analysis': 'issue_analysis',
|
|
69
|
+
'issue-analysis-verification': 'issue_analysis_verification',
|
|
70
70
|
'user-stories-analysis': 'user_stories_analysis',
|
|
71
71
|
'user-stories-analysis-verification': 'user_stories_analysis_verification',
|
|
72
72
|
'test-cases-analysis': 'test_cases_analysis',
|
|
@@ -106,7 +106,7 @@ export const PHASE_STATUS_MAP = {
|
|
|
106
106
|
export const HUMAN_SELECTABLE_STATUSES = [
|
|
107
107
|
'backlog',
|
|
108
108
|
'ready_for_ai',
|
|
109
|
-
'
|
|
109
|
+
'issue_analysis',
|
|
110
110
|
'user_stories_analysis',
|
|
111
111
|
'test_cases_analysis',
|
|
112
112
|
'technical_design',
|
package/dist/errors/index.d.ts
CHANGED
|
@@ -38,23 +38,23 @@ export declare class ConfigError extends EdsgerError {
|
|
|
38
38
|
}
|
|
39
39
|
export declare class PhaseError extends EdsgerError {
|
|
40
40
|
readonly phase: string;
|
|
41
|
-
readonly
|
|
41
|
+
readonly issueId: string;
|
|
42
42
|
readonly iteration?: number;
|
|
43
|
-
constructor(phase: string,
|
|
43
|
+
constructor(phase: string, issueId: string, message: string, iteration?: number, options?: ErrorOptions);
|
|
44
44
|
}
|
|
45
45
|
export declare class LLMParseError extends EdsgerError {
|
|
46
46
|
readonly rawResponse?: string;
|
|
47
47
|
constructor(message: string, rawResponse?: string, options?: ErrorOptions);
|
|
48
48
|
}
|
|
49
49
|
export declare class WorkerTimeoutError extends EdsgerError {
|
|
50
|
-
readonly
|
|
50
|
+
readonly issueId: string;
|
|
51
51
|
readonly timeoutMs: number;
|
|
52
|
-
constructor(
|
|
52
|
+
constructor(issueId: string, timeoutMs: number, options?: ErrorOptions);
|
|
53
53
|
}
|
|
54
54
|
export declare class WorkerCrashError extends EdsgerError {
|
|
55
|
-
readonly
|
|
55
|
+
readonly issueId: string;
|
|
56
56
|
readonly exitCode: number | null;
|
|
57
|
-
constructor(
|
|
57
|
+
constructor(issueId: string, exitCode: number | null, options?: ErrorOptions);
|
|
58
58
|
}
|
|
59
59
|
export declare class ValidationError extends EdsgerError {
|
|
60
60
|
readonly fields: string[];
|
package/dist/errors/index.js
CHANGED
|
@@ -65,13 +65,13 @@ export class ConfigError extends EdsgerError {
|
|
|
65
65
|
// ---- Phase execution errors ----
|
|
66
66
|
export class PhaseError extends EdsgerError {
|
|
67
67
|
phase;
|
|
68
|
-
|
|
68
|
+
issueId;
|
|
69
69
|
iteration;
|
|
70
|
-
constructor(phase,
|
|
70
|
+
constructor(phase, issueId, message, iteration, options) {
|
|
71
71
|
super('PHASE_ERROR', message, options);
|
|
72
72
|
this.name = 'PhaseError';
|
|
73
73
|
this.phase = phase;
|
|
74
|
-
this.
|
|
74
|
+
this.issueId = issueId;
|
|
75
75
|
this.iteration = iteration;
|
|
76
76
|
}
|
|
77
77
|
}
|
|
@@ -86,22 +86,22 @@ export class LLMParseError extends EdsgerError {
|
|
|
86
86
|
}
|
|
87
87
|
// ---- Worker errors ----
|
|
88
88
|
export class WorkerTimeoutError extends EdsgerError {
|
|
89
|
-
|
|
89
|
+
issueId;
|
|
90
90
|
timeoutMs;
|
|
91
|
-
constructor(
|
|
92
|
-
super('WORKER_TIMEOUT', `Worker for
|
|
91
|
+
constructor(issueId, timeoutMs, options) {
|
|
92
|
+
super('WORKER_TIMEOUT', `Worker for issue ${issueId} timed out after ${Math.round(timeoutMs / 1000)}s`, options);
|
|
93
93
|
this.name = 'WorkerTimeoutError';
|
|
94
|
-
this.
|
|
94
|
+
this.issueId = issueId;
|
|
95
95
|
this.timeoutMs = timeoutMs;
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
98
|
export class WorkerCrashError extends EdsgerError {
|
|
99
|
-
|
|
99
|
+
issueId;
|
|
100
100
|
exitCode;
|
|
101
|
-
constructor(
|
|
102
|
-
super('WORKER_CRASH', `Worker for
|
|
101
|
+
constructor(issueId, exitCode, options) {
|
|
102
|
+
super('WORKER_CRASH', `Worker for issue ${issueId} crashed with exit code ${exitCode}`, options);
|
|
103
103
|
this.name = 'WorkerCrashError';
|
|
104
|
-
this.
|
|
104
|
+
this.issueId = issueId;
|
|
105
105
|
this.exitCode = exitCode;
|
|
106
106
|
}
|
|
107
107
|
}
|
package/dist/index.js
CHANGED
|
@@ -13,6 +13,9 @@ import { runBuild } from './commands/build/index.js';
|
|
|
13
13
|
import { runChecklists } from './commands/checklists/index.js';
|
|
14
14
|
import { runCodeReview } from './commands/code-review/index.js';
|
|
15
15
|
import { runConfigGet, runConfigList, runConfigSet, runConfigUnset, } from './commands/config/index.js';
|
|
16
|
+
import { runFindBugs } from './commands/find-bugs/index.js';
|
|
17
|
+
import { runFindFeatures } from './commands/find-features/index.js';
|
|
18
|
+
import { parseCategoriesOption, runFindSmells, } from './commands/find-smells/index.js';
|
|
16
19
|
import { runGrowthAnalysis } from './commands/growth-analysis/index.js';
|
|
17
20
|
import { runInit } from './commands/init/index.js';
|
|
18
21
|
import { runIntelligence } from './commands/intelligence/index.js';
|
|
@@ -24,6 +27,8 @@ import { runRunSheetCommand } from './commands/run-sheet/index.js';
|
|
|
24
27
|
import { runSmokeTestCommand } from './commands/smoke-test/index.js';
|
|
25
28
|
import { runTaskWorker } from './commands/task-worker/index.js';
|
|
26
29
|
import { runWorkflow } from './commands/workflow/index.js';
|
|
30
|
+
import { DEFAULT_MAX_FILES as FIND_SMELLS_DEFAULT_MAX_FILES } from './phases/find-smells/index.js';
|
|
31
|
+
import { SMELL_CATEGORIES, } from './phases/find-smells/types.js';
|
|
27
32
|
import { logError, logInfo } from './utils/logger.js';
|
|
28
33
|
// Get package.json version dynamically
|
|
29
34
|
// eslint-disable-next-line @typescript-eslint/naming-convention -- ESM __filename/__dirname polyfill
|
|
@@ -354,6 +359,90 @@ program
|
|
|
354
359
|
}
|
|
355
360
|
});
|
|
356
361
|
// ============================================================
|
|
362
|
+
// Subcommand: edsger find-bugs <productId>
|
|
363
|
+
// ============================================================
|
|
364
|
+
program
|
|
365
|
+
.command('find-bugs <productId>')
|
|
366
|
+
.description("AI-audit a product's repository for bugs and file each new finding as an issue")
|
|
367
|
+
.option('--full', 'Force a full scan even if previous-scan state exists')
|
|
368
|
+
.option('--branch <name>', 'Branch to scan (defaults to repo default branch)')
|
|
369
|
+
.option('--max-files <n>', 'Upper bound on files the auditor may Read (default 200)', (value) => {
|
|
370
|
+
const n = parseInt(value, 10);
|
|
371
|
+
if (Number.isNaN(n) || n <= 0) {
|
|
372
|
+
throw new Error('--max-files must be a positive integer');
|
|
373
|
+
}
|
|
374
|
+
return n;
|
|
375
|
+
})
|
|
376
|
+
.option('-v, --verbose', 'Verbose output')
|
|
377
|
+
.action(async (productId, opts) => {
|
|
378
|
+
try {
|
|
379
|
+
await runFindBugs(productId, opts);
|
|
380
|
+
}
|
|
381
|
+
catch (error) {
|
|
382
|
+
logError(error instanceof Error ? error.message : String(error));
|
|
383
|
+
process.exit(1);
|
|
384
|
+
}
|
|
385
|
+
});
|
|
386
|
+
// ============================================================
|
|
387
|
+
// Subcommand: edsger find-features <productId>
|
|
388
|
+
// ============================================================
|
|
389
|
+
program
|
|
390
|
+
.command('find-features <productId>')
|
|
391
|
+
.description("Synthesise feature opportunities from user feedback + intelligence reports + the product's codebase, and file each one as an issue")
|
|
392
|
+
.option('--branch <name>', 'Branch to scan (defaults to repo default branch)')
|
|
393
|
+
.option('--since <duration>', 'Feedback lookback window — e.g. "30d", "12h", "4w" (default 90d)')
|
|
394
|
+
.option('--min-cluster-size <n>', 'Min feedback mentions for a theme to count as high-confidence (default 3)', (value) => {
|
|
395
|
+
const n = parseInt(value, 10);
|
|
396
|
+
if (Number.isNaN(n) || n <= 0) {
|
|
397
|
+
throw new Error('--min-cluster-size must be a positive integer');
|
|
398
|
+
}
|
|
399
|
+
return n;
|
|
400
|
+
})
|
|
401
|
+
.option('--max-suggestions <n>', 'Cap on opportunities the agent may surface (default 10)', (value) => {
|
|
402
|
+
const n = parseInt(value, 10);
|
|
403
|
+
if (Number.isNaN(n) || n <= 0) {
|
|
404
|
+
throw new Error('--max-suggestions must be a positive integer');
|
|
405
|
+
}
|
|
406
|
+
return n;
|
|
407
|
+
})
|
|
408
|
+
.option('--against-report <id>', 'Narrow the run to opportunities implied by a specific intelligence report')
|
|
409
|
+
.option('-v, --verbose', 'Verbose output')
|
|
410
|
+
.action(async (productId, opts) => {
|
|
411
|
+
try {
|
|
412
|
+
await runFindFeatures(productId, opts);
|
|
413
|
+
}
|
|
414
|
+
catch (error) {
|
|
415
|
+
logError(error instanceof Error ? error.message : String(error));
|
|
416
|
+
process.exit(1);
|
|
417
|
+
}
|
|
418
|
+
});
|
|
419
|
+
// ============================================================
|
|
420
|
+
// Subcommand: edsger find-smells <productId>
|
|
421
|
+
// ============================================================
|
|
422
|
+
program
|
|
423
|
+
.command('find-smells <productId>')
|
|
424
|
+
.description("AI-audit a product's repository for code smells (refactor candidates, perf cliffs, dead code, type-safety gaps) and file each new finding as an issue")
|
|
425
|
+
.option('--full', 'Force a full scan even if previous-scan state exists')
|
|
426
|
+
.option('--branch <name>', 'Branch to scan (defaults to repo default branch)')
|
|
427
|
+
.option('--max-files <n>', `Upper bound on files the auditor may Read (default ${FIND_SMELLS_DEFAULT_MAX_FILES})`, (value) => {
|
|
428
|
+
const n = parseInt(value, 10);
|
|
429
|
+
if (Number.isNaN(n) || n <= 0) {
|
|
430
|
+
throw new Error('--max-files must be a positive integer');
|
|
431
|
+
}
|
|
432
|
+
return n;
|
|
433
|
+
})
|
|
434
|
+
.option('--categories <list>', `Comma-separated category filter (${SMELL_CATEGORIES.join(',')})`, parseCategoriesOption)
|
|
435
|
+
.option('-v, --verbose', 'Verbose output')
|
|
436
|
+
.action(async (productId, opts) => {
|
|
437
|
+
try {
|
|
438
|
+
await runFindSmells(productId, opts);
|
|
439
|
+
}
|
|
440
|
+
catch (error) {
|
|
441
|
+
logError(error instanceof Error ? error.message : String(error));
|
|
442
|
+
process.exit(1);
|
|
443
|
+
}
|
|
444
|
+
});
|
|
445
|
+
// ============================================================
|
|
357
446
|
// Subcommand: edsger pr-resolve <productId>
|
|
358
447
|
// ============================================================
|
|
359
448
|
program
|
|
@@ -383,7 +472,7 @@ program
|
|
|
383
472
|
.option('--init', 'Initialize .edsger directory with project templates')
|
|
384
473
|
.option('--product-level', 'Use legacy product-level workflow (requires EDSGER_PRODUCT_ID, EDSGER_MCP_SERVER_URL, EDSGER_MCP_TOKEN env vars)')
|
|
385
474
|
.option('--watch-tasks <productId>', 'Watch and execute pending tasks for a product')
|
|
386
|
-
.option('--concurrency <number>', 'Max concurrent
|
|
475
|
+
.option('--concurrency <number>', 'Max concurrent issues to process (default: 3)', parseInt)
|
|
387
476
|
.option('-c, --config <path>', 'Path to config file')
|
|
388
477
|
.option('-v, --verbose', 'Verbose output');
|
|
389
478
|
program.action(async (options) => {
|
|
@@ -32,11 +32,11 @@ export async function fetchAppStoreContext(productId, verbose) {
|
|
|
32
32
|
*/
|
|
33
33
|
export function formatContextForPrompt(context) {
|
|
34
34
|
const { product, existingConfigs } = context;
|
|
35
|
-
const
|
|
36
|
-
? product.
|
|
35
|
+
const issuesList = product.issues && product.issues.length > 0
|
|
36
|
+
? product.issues
|
|
37
37
|
.map((f) => `- **${f.name}**: ${f.description || 'No description'} (Status: ${f.status || 'unknown'})`)
|
|
38
38
|
.join('\n')
|
|
39
|
-
: 'No
|
|
39
|
+
: 'No issues listed.';
|
|
40
40
|
const existingListings = existingConfigs.length > 0
|
|
41
41
|
? existingConfigs
|
|
42
42
|
.map((c) => {
|
|
@@ -54,15 +54,15 @@ export function formatContextForPrompt(context) {
|
|
|
54
54
|
- **Product ID**: ${product.id}
|
|
55
55
|
- **Description**: ${product.description || 'No description provided'}
|
|
56
56
|
|
|
57
|
-
## Product
|
|
58
|
-
${
|
|
57
|
+
## Product Issues (${product.issues?.length || 0})
|
|
58
|
+
${issuesList}
|
|
59
59
|
|
|
60
60
|
## Existing Store Configurations
|
|
61
61
|
${existingListings}
|
|
62
62
|
|
|
63
63
|
---
|
|
64
64
|
|
|
65
|
-
**Important**: Generate professional app store assets for this product. Use the product name, description, and
|
|
65
|
+
**Important**: Generate professional app store assets for this product. Use the product name, description, and issues to create specific, compelling content. Each screenshot should showcase a real issue with realistic mock data.`;
|
|
66
66
|
}
|
|
67
67
|
/**
|
|
68
68
|
* Prepare the full prompt with all context
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getAppStorePrimaryLocale, saveAppStoreListings, upsertAppStoreConfig, } from '../../api/app-store.js';
|
|
2
2
|
import { getGitHubConfigByProduct } from '../../api/github.js';
|
|
3
3
|
import { logError, logInfo, logSuccess } from '../../utils/logger.js';
|
|
4
|
-
import {
|
|
4
|
+
import { cloneIssueRepo, ensureWorkspaceDir, } from '../../workspace/workspace-manager.js';
|
|
5
5
|
import { executeAppStoreQuery } from './agent.js';
|
|
6
6
|
import { prepareAppStoreContext } from './context.js';
|
|
7
7
|
import { createAppStoreSystemPrompt } from './prompts.js';
|
|
@@ -48,7 +48,7 @@ export const generateAppStoreAssets = async (options, config) => {
|
|
|
48
48
|
'Please configure a GitHub repo in the product settings before generating assets.');
|
|
49
49
|
}
|
|
50
50
|
const workspaceRoot = ensureWorkspaceDir();
|
|
51
|
-
const { repoPath: repoCwd } =
|
|
51
|
+
const { repoPath: repoCwd } = cloneIssueRepo(workspaceRoot, `app-store-${productId}`, githubConfig.owner, githubConfig.repo, githubConfig.token);
|
|
52
52
|
logInfo(`Repository cloned to: ${repoCwd}`);
|
|
53
53
|
// Prepare context and prompt
|
|
54
54
|
const { context, prompt: analysisPrompt } = await prepareAppStoreContext(productId, targetStore, locale, verbose, true);
|
|
@@ -62,8 +62,8 @@ ${contextInfo}
|
|
|
62
62
|
## Instructions
|
|
63
63
|
${codebaseInstructions}
|
|
64
64
|
1. Create compelling store listing content (app_name, subtitle, description, keywords, etc.) for the "${locale}" locale
|
|
65
|
-
2. Design 5-8 screenshot compositions, each highlighting a different key
|
|
66
|
-
3. For each screenshot, create a complete HTML template that renders realistic mock app UI for that
|
|
65
|
+
2. Design 5-8 screenshot compositions, each highlighting a different key issue
|
|
66
|
+
3. For each screenshot, create a complete HTML template that renders realistic mock app UI for that issue
|
|
67
67
|
4. Use varied gradient backgrounds and engaging headline text for visual appeal
|
|
68
68
|
5. Ensure mock data looks realistic — use real-looking names, numbers, dates, not "Lorem ipsum"
|
|
69
69
|
6. Design mobile screenshots in portrait orientation (phone viewport: 390x844)
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Autonomous Development Phase
|
|
3
3
|
*
|
|
4
4
|
* Runs a time-limited loop where Claude Code SDK analyzes the codebase,
|
|
5
|
-
* decides the next actionable step toward the
|
|
5
|
+
* decides the next actionable step toward the issue's objective (description),
|
|
6
6
|
* implements it, and commits. All iterations build on the same branch.
|
|
7
7
|
* A PR is created after the first iteration; subsequent pushes update it.
|
|
8
8
|
*/
|
|
@@ -10,7 +10,7 @@ import { type ChecklistPhaseContext } from '../../services/checklist.js';
|
|
|
10
10
|
import { type EdsgerConfig } from '../../types/index.js';
|
|
11
11
|
import { type PipelinePhaseOptions } from '../../types/pipeline.js';
|
|
12
12
|
export interface AutonomousResult {
|
|
13
|
-
|
|
13
|
+
issueId: string;
|
|
14
14
|
status: 'success' | 'error';
|
|
15
15
|
message: string;
|
|
16
16
|
branchName: string;
|
|
@@ -22,7 +22,7 @@ export interface AutonomousResult {
|
|
|
22
22
|
* Main entry point for autonomous development phase
|
|
23
23
|
*/
|
|
24
24
|
export declare function runAutonomousDevelopment(options: PipelinePhaseOptions, config: EdsgerConfig, _checklistContext?: ChecklistPhaseContext | null): Promise<{
|
|
25
|
-
|
|
25
|
+
issueId: string;
|
|
26
26
|
status: string;
|
|
27
27
|
message: string;
|
|
28
28
|
branchName?: string;
|