edsger 0.76.0 → 0.78.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/LICENSE +21 -0
- package/README.md +95 -210
- package/assets/LICENSE +21 -0
- package/assets/README.md +104 -0
- package/assets/benchmark/base.yaml +286 -0
- package/assets/benchmark/csharp.yaml +68 -0
- package/assets/benchmark/dart.yaml +70 -0
- package/assets/benchmark/go.yaml +71 -0
- package/assets/benchmark/java.yaml +68 -0
- package/assets/benchmark/python.yaml +72 -0
- package/assets/benchmark/typescript.yaml +71 -0
- package/assets/languages.yaml +35 -0
- package/assets/manifest.yaml +39 -0
- package/assets/review/base.yaml +111 -0
- package/assets/review/csharp.yaml +38 -0
- package/assets/review/dart.yaml +40 -0
- package/assets/review/go.yaml +40 -0
- package/assets/review/java.yaml +40 -0
- package/assets/review/python.yaml +41 -0
- package/assets/review/typescript.yaml +40 -0
- package/assets/schema/benchmark.schema.json +87 -0
- package/assets/schema/review.schema.json +73 -0
- package/assets/skills/benchmark/SKILL.md +66 -0
- package/assets/skills/pr-resolve/SKILL.md +58 -0
- package/assets/skills/pr-review/SKILL.md +66 -0
- package/dist/index.js +1339 -1218
- package/dist/index.js.map +1 -0
- package/package.json +58 -53
- package/dist/api/adr.d.ts +0 -48
- package/dist/api/adr.js +0 -139
- package/dist/api/app-store-iap.d.ts +0 -60
- package/dist/api/app-store-iap.js +0 -145
- package/dist/api/app-store.d.ts +0 -93
- package/dist/api/app-store.js +0 -206
- package/dist/api/chat.d.ts +0 -72
- package/dist/api/chat.js +0 -272
- package/dist/api/cross-product.d.ts +0 -33
- package/dist/api/cross-product.js +0 -127
- package/dist/api/financing.d.ts +0 -47
- package/dist/api/financing.js +0 -37
- package/dist/api/github.d.ts +0 -86
- package/dist/api/github.js +0 -203
- package/dist/api/growth.d.ts +0 -81
- package/dist/api/growth.js +0 -75
- package/dist/api/intelligence-normalize.d.ts +0 -25
- package/dist/api/intelligence-normalize.js +0 -103
- package/dist/api/intelligence.d.ts +0 -187
- package/dist/api/intelligence.js +0 -402
- package/dist/api/issues/approval-checker.d.ts +0 -22
- package/dist/api/issues/approval-checker.js +0 -141
- package/dist/api/issues/batch-operations.d.ts +0 -17
- package/dist/api/issues/batch-operations.js +0 -100
- package/dist/api/issues/get-issue.d.ts +0 -5
- package/dist/api/issues/get-issue.js +0 -47
- package/dist/api/issues/index.d.ts +0 -8
- package/dist/api/issues/index.js +0 -10
- package/dist/api/issues/issue-utils.d.ts +0 -25
- package/dist/api/issues/issue-utils.js +0 -133
- package/dist/api/issues/status-updater.d.ts +0 -68
- package/dist/api/issues/status-updater.js +0 -190
- package/dist/api/issues/test-cases.d.ts +0 -29
- package/dist/api/issues/test-cases.js +0 -185
- package/dist/api/issues/update-issue.d.ts +0 -25
- package/dist/api/issues/update-issue.js +0 -127
- package/dist/api/issues/user-stories.d.ts +0 -21
- package/dist/api/issues/user-stories.js +0 -163
- package/dist/api/mcp-client.d.ts +0 -22
- package/dist/api/mcp-client.js +0 -75
- package/dist/api/products/test-cases.d.ts +0 -18
- package/dist/api/products/test-cases.js +0 -51
- package/dist/api/products.d.ts +0 -15
- package/dist/api/products.js +0 -45
- package/dist/api/release-test-cases.d.ts +0 -7
- package/dist/api/release-test-cases.js +0 -59
- package/dist/api/releases.d.ts +0 -41
- package/dist/api/releases.js +0 -117
- package/dist/api/run-sheets.d.ts +0 -22
- package/dist/api/run-sheets.js +0 -13
- package/dist/api/storage.d.ts +0 -13
- package/dist/api/storage.js +0 -29
- package/dist/api/tasks.d.ts +0 -26
- package/dist/api/tasks.js +0 -81
- package/dist/api/test-reports.d.ts +0 -9
- package/dist/api/test-reports.js +0 -43
- package/dist/api/user-psychology.d.ts +0 -101
- package/dist/api/user-psychology.js +0 -143
- package/dist/api/web-deploy.d.ts +0 -67
- package/dist/api/web-deploy.js +0 -199
- package/dist/auth/auth-store.d.ts +0 -98
- package/dist/auth/auth-store.js +0 -194
- package/dist/auth/env-store.d.ts +0 -41
- package/dist/auth/env-store.js +0 -127
- package/dist/auth/login.d.ts +0 -18
- package/dist/auth/login.js +0 -179
- package/dist/commands/adr/index.d.ts +0 -13
- package/dist/commands/adr/index.js +0 -31
- package/dist/commands/agent-workflow/chat-worker.d.ts +0 -16
- package/dist/commands/agent-workflow/chat-worker.js +0 -465
- package/dist/commands/agent-workflow/index.d.ts +0 -13
- package/dist/commands/agent-workflow/index.js +0 -107
- package/dist/commands/agent-workflow/issue-worker.d.ts +0 -14
- package/dist/commands/agent-workflow/issue-worker.js +0 -65
- package/dist/commands/agent-workflow/processor.d.ts +0 -95
- package/dist/commands/agent-workflow/processor.js +0 -519
- package/dist/commands/analyze-logs/index.d.ts +0 -7
- package/dist/commands/analyze-logs/index.js +0 -34
- package/dist/commands/app-store/index.d.ts +0 -12
- package/dist/commands/app-store/index.js +0 -69
- package/dist/commands/architecture-diagram/index.d.ts +0 -8
- package/dist/commands/architecture-diagram/index.js +0 -10
- package/dist/commands/build/detect-project.d.ts +0 -52
- package/dist/commands/build/detect-project.js +0 -277
- package/dist/commands/build/index.d.ts +0 -66
- package/dist/commands/build/index.js +0 -544
- package/dist/commands/chat-serve/chat-server.d.ts +0 -114
- package/dist/commands/chat-serve/chat-server.js +0 -339
- package/dist/commands/chat-serve/index.d.ts +0 -20
- package/dist/commands/chat-serve/index.js +0 -58
- package/dist/commands/checklists/index.d.ts +0 -16
- package/dist/commands/checklists/index.js +0 -187
- package/dist/commands/checklists/tools.d.ts +0 -17
- package/dist/commands/checklists/tools.js +0 -19
- package/dist/commands/class-diagram/index.d.ts +0 -7
- package/dist/commands/class-diagram/index.js +0 -9
- package/dist/commands/code-review/index.d.ts +0 -2
- package/dist/commands/code-review/index.js +0 -37
- package/dist/commands/code-review/reviewer.d.ts +0 -3
- package/dist/commands/code-review/reviewer.js +0 -205
- package/dist/commands/config/index.d.ts +0 -16
- package/dist/commands/config/index.js +0 -60
- package/dist/commands/data-flow/index.d.ts +0 -19
- package/dist/commands/data-flow/index.js +0 -55
- package/dist/commands/diagram-shared/index.d.ts +0 -21
- package/dist/commands/diagram-shared/index.js +0 -37
- package/dist/commands/discover/index.d.ts +0 -14
- package/dist/commands/discover/index.js +0 -29
- package/dist/commands/er-diagram/index.d.ts +0 -19
- package/dist/commands/er-diagram/index.js +0 -55
- package/dist/commands/features/index.d.ts +0 -15
- package/dist/commands/features/index.js +0 -34
- package/dist/commands/financing-deck/index.d.ts +0 -8
- package/dist/commands/financing-deck/index.js +0 -66
- package/dist/commands/find-architecture/index.d.ts +0 -15
- package/dist/commands/find-architecture/index.js +0 -50
- package/dist/commands/find-bugs/index.d.ts +0 -13
- package/dist/commands/find-bugs/index.js +0 -48
- package/dist/commands/find-features/index.d.ts +0 -14
- package/dist/commands/find-features/index.js +0 -42
- package/dist/commands/find-smells/index.d.ts +0 -23
- package/dist/commands/find-smells/index.js +0 -74
- package/dist/commands/flowchart/index.d.ts +0 -8
- package/dist/commands/flowchart/index.js +0 -10
- package/dist/commands/growth-analysis/index.d.ts +0 -7
- package/dist/commands/growth-analysis/index.js +0 -89
- package/dist/commands/init/index.d.ts +0 -5
- package/dist/commands/init/index.js +0 -152
- package/dist/commands/init/prompts.d.ts +0 -9
- package/dist/commands/init/prompts.js +0 -128
- package/dist/commands/init/templates.d.ts +0 -9
- package/dist/commands/init/templates.js +0 -264
- package/dist/commands/intelligence/index.d.ts +0 -15
- package/dist/commands/intelligence/index.js +0 -138
- package/dist/commands/issue-analysis/index.d.ts +0 -5
- package/dist/commands/issue-analysis/index.js +0 -9
- package/dist/commands/pr-resolve/index.d.ts +0 -13
- package/dist/commands/pr-resolve/index.js +0 -50
- package/dist/commands/pr-review/index.d.ts +0 -12
- package/dist/commands/pr-review/index.js +0 -47
- package/dist/commands/product-techniques/index.d.ts +0 -15
- package/dist/commands/product-techniques/index.js +0 -37
- package/dist/commands/product-test-cases/index.d.ts +0 -12
- package/dist/commands/product-test-cases/index.js +0 -40
- package/dist/commands/quality-benchmark/index.d.ts +0 -40
- package/dist/commands/quality-benchmark/index.js +0 -219
- package/dist/commands/recipes/index.d.ts +0 -17
- package/dist/commands/recipes/index.js +0 -40
- package/dist/commands/refactor/refactor.d.ts +0 -2
- package/dist/commands/refactor/refactor.js +0 -134
- package/dist/commands/release-sync/index.d.ts +0 -5
- package/dist/commands/release-sync/index.js +0 -38
- package/dist/commands/run-sheet/index.d.ts +0 -6
- package/dist/commands/run-sheet/index.js +0 -48
- package/dist/commands/screen-flow/index.d.ts +0 -18
- package/dist/commands/screen-flow/index.js +0 -54
- package/dist/commands/sequence-diagram/index.d.ts +0 -19
- package/dist/commands/sequence-diagram/index.js +0 -55
- package/dist/commands/session-serve/index.d.ts +0 -32
- package/dist/commands/session-serve/index.js +0 -100
- package/dist/commands/session-turn/index.d.ts +0 -73
- package/dist/commands/session-turn/index.js +0 -254
- package/dist/commands/smoke-test/index.d.ts +0 -5
- package/dist/commands/smoke-test/index.js +0 -40
- package/dist/commands/state-diagram/index.d.ts +0 -7
- package/dist/commands/state-diagram/index.js +0 -9
- package/dist/commands/sync-aws/index.d.ts +0 -16
- package/dist/commands/sync-aws/index.js +0 -214
- package/dist/commands/sync-datadog/index.d.ts +0 -16
- package/dist/commands/sync-datadog/index.js +0 -236
- package/dist/commands/sync-github-issues/index.d.ts +0 -11
- package/dist/commands/sync-github-issues/index.js +0 -42
- package/dist/commands/sync-github-pull-requests/index.d.ts +0 -11
- package/dist/commands/sync-github-pull-requests/index.js +0 -42
- package/dist/commands/sync-org-repos/index.d.ts +0 -12
- package/dist/commands/sync-org-repos/index.js +0 -60
- package/dist/commands/sync-sentry-issues/index.d.ts +0 -14
- package/dist/commands/sync-sentry-issues/index.js +0 -73
- package/dist/commands/sync-terraform/index.d.ts +0 -16
- package/dist/commands/sync-terraform/index.js +0 -248
- package/dist/commands/task-worker/index.d.ts +0 -8
- package/dist/commands/task-worker/index.js +0 -34
- package/dist/commands/task-worker/processor.d.ts +0 -23
- package/dist/commands/task-worker/processor.js +0 -84
- package/dist/commands/technical-design/index.d.ts +0 -5
- package/dist/commands/technical-design/index.js +0 -9
- package/dist/commands/test-cases-analysis/index.d.ts +0 -5
- package/dist/commands/test-cases-analysis/index.js +0 -9
- package/dist/commands/user-psychology/index.d.ts +0 -7
- package/dist/commands/user-psychology/index.js +0 -51
- package/dist/commands/user-stories-analysis/index.d.ts +0 -5
- package/dist/commands/user-stories-analysis/index.js +0 -9
- package/dist/commands/workflow/config/phase-configs.d.ts +0 -5
- package/dist/commands/workflow/config/phase-configs.js +0 -132
- package/dist/commands/workflow/core/index.d.ts +0 -8
- package/dist/commands/workflow/core/index.js +0 -12
- package/dist/commands/workflow/core/issue-filter.d.ts +0 -16
- package/dist/commands/workflow/core/issue-filter.js +0 -47
- package/dist/commands/workflow/core/pipeline-evaluator.d.ts +0 -24
- package/dist/commands/workflow/core/pipeline-evaluator.js +0 -32
- package/dist/commands/workflow/core/state-manager.d.ts +0 -24
- package/dist/commands/workflow/core/state-manager.js +0 -42
- package/dist/commands/workflow/core/workflow-logger.d.ts +0 -23
- package/dist/commands/workflow/core/workflow-logger.js +0 -77
- package/dist/commands/workflow/executors/phase-executor.d.ts +0 -8
- package/dist/commands/workflow/executors/phase-executor.js +0 -338
- package/dist/commands/workflow/index.d.ts +0 -2
- package/dist/commands/workflow/index.js +0 -34
- package/dist/commands/workflow/issue-coordinator.d.ts +0 -18
- package/dist/commands/workflow/issue-coordinator.js +0 -161
- package/dist/commands/workflow/phase-orchestrator.d.ts +0 -26
- package/dist/commands/workflow/phase-orchestrator.js +0 -699
- package/dist/commands/workflow/processor.d.ts +0 -47
- package/dist/commands/workflow/processor.js +0 -149
- package/dist/config/issue-status.d.ts +0 -29
- package/dist/config/issue-status.js +0 -44
- package/dist/config.d.ts +0 -3
- package/dist/config.js +0 -79
- package/dist/constants.d.ts +0 -10
- package/dist/constants.js +0 -36
- package/dist/errors/index.d.ts +0 -68
- package/dist/errors/index.js +0 -129
- package/dist/index.d.ts +0 -4
- package/dist/phases/adr-generation/agent.d.ts +0 -6
- package/dist/phases/adr-generation/agent.js +0 -69
- package/dist/phases/adr-generation/index.d.ts +0 -15
- package/dist/phases/adr-generation/index.js +0 -66
- package/dist/phases/adr-generation/parse.d.ts +0 -12
- package/dist/phases/adr-generation/parse.js +0 -123
- package/dist/phases/adr-generation/prompts.d.ts +0 -8
- package/dist/phases/adr-generation/prompts.js +0 -35
- package/dist/phases/analyze-logs/agent.d.ts +0 -11
- package/dist/phases/analyze-logs/agent.js +0 -66
- package/dist/phases/analyze-logs/index.d.ts +0 -23
- package/dist/phases/analyze-logs/index.js +0 -152
- package/dist/phases/analyze-logs/prompts.d.ts +0 -3
- package/dist/phases/analyze-logs/prompts.js +0 -27
- package/dist/phases/app-store-generation/agent.d.ts +0 -2
- package/dist/phases/app-store-generation/agent.js +0 -177
- package/dist/phases/app-store-generation/assets/inter-latin-ext.woff2 +0 -0
- package/dist/phases/app-store-generation/assets/inter-latin.woff2 +0 -0
- package/dist/phases/app-store-generation/context.d.ts +0 -21
- package/dist/phases/app-store-generation/context.js +0 -78
- package/dist/phases/app-store-generation/index.d.ts +0 -20
- package/dist/phases/app-store-generation/index.js +0 -157
- package/dist/phases/app-store-generation/inter-font.d.ts +0 -20
- package/dist/phases/app-store-generation/inter-font.js +0 -49
- package/dist/phases/app-store-generation/prompts.d.ts +0 -43
- package/dist/phases/app-store-generation/prompts.js +0 -73
- package/dist/phases/app-store-generation/screenshot-composer.d.ts +0 -41
- package/dist/phases/app-store-generation/screenshot-composer.js +0 -516
- package/dist/phases/app-store-generation/uploader.d.ts +0 -19
- package/dist/phases/app-store-generation/uploader.js +0 -150
- package/dist/phases/architecture-diagram/index.d.ts +0 -15
- package/dist/phases/architecture-diagram/index.js +0 -51
- package/dist/phases/autonomous/index.d.ts +0 -32
- package/dist/phases/autonomous/index.js +0 -412
- package/dist/phases/autonomous/prompts.d.ts +0 -5
- package/dist/phases/autonomous/prompts.js +0 -31
- package/dist/phases/branch-planning/context.d.ts +0 -14
- package/dist/phases/branch-planning/context.js +0 -43
- package/dist/phases/branch-planning/index.d.ts +0 -25
- package/dist/phases/branch-planning/index.js +0 -404
- package/dist/phases/branch-planning/outcome.d.ts +0 -28
- package/dist/phases/branch-planning/outcome.js +0 -115
- package/dist/phases/branch-planning/prompts.d.ts +0 -41
- package/dist/phases/branch-planning/prompts.js +0 -157
- package/dist/phases/bug-fixing/analyzer.d.ts +0 -17
- package/dist/phases/bug-fixing/analyzer.js +0 -247
- package/dist/phases/bug-fixing/context-fetcher.d.ts +0 -22
- package/dist/phases/bug-fixing/context-fetcher.js +0 -137
- package/dist/phases/bug-fixing/index.d.ts +0 -7
- package/dist/phases/bug-fixing/index.js +0 -7
- package/dist/phases/bug-fixing/mcp-server.d.ts +0 -18
- package/dist/phases/bug-fixing/mcp-server.js +0 -19
- package/dist/phases/bug-fixing/prompts.d.ts +0 -2
- package/dist/phases/bug-fixing/prompts.js +0 -9
- package/dist/phases/chat-processor/context.d.ts +0 -38
- package/dist/phases/chat-processor/context.js +0 -91
- package/dist/phases/chat-processor/index.d.ts +0 -49
- package/dist/phases/chat-processor/index.js +0 -482
- package/dist/phases/chat-processor/product-context.d.ts +0 -36
- package/dist/phases/chat-processor/product-context.js +0 -113
- package/dist/phases/chat-processor/product-prompts.d.ts +0 -4
- package/dist/phases/chat-processor/product-prompts.js +0 -65
- package/dist/phases/chat-processor/product-tools.d.ts +0 -8
- package/dist/phases/chat-processor/product-tools.js +0 -11
- package/dist/phases/chat-processor/prompts.d.ts +0 -35
- package/dist/phases/chat-processor/prompts.js +0 -213
- package/dist/phases/chat-processor/tools.d.ts +0 -8
- package/dist/phases/chat-processor/tools.js +0 -11
- package/dist/phases/class-diagram/index.d.ts +0 -14
- package/dist/phases/class-diagram/index.js +0 -76
- package/dist/phases/code-implementation/branch-pr-creator.d.ts +0 -31
- package/dist/phases/code-implementation/branch-pr-creator.js +0 -172
- package/dist/phases/code-implementation/context.d.ts +0 -17
- package/dist/phases/code-implementation/context.js +0 -88
- package/dist/phases/code-implementation/index.d.ts +0 -33
- package/dist/phases/code-implementation/index.js +0 -926
- package/dist/phases/code-implementation/outcome.d.ts +0 -47
- package/dist/phases/code-implementation/outcome.js +0 -53
- package/dist/phases/code-implementation/prompts.d.ts +0 -8
- package/dist/phases/code-implementation/prompts.js +0 -166
- package/dist/phases/code-implementation-verification/agent.d.ts +0 -32
- package/dist/phases/code-implementation-verification/agent.js +0 -225
- package/dist/phases/code-implementation-verification/index.d.ts +0 -27
- package/dist/phases/code-implementation-verification/index.js +0 -121
- package/dist/phases/code-implementation-verification/prompts.d.ts +0 -10
- package/dist/phases/code-implementation-verification/prompts.js +0 -90
- package/dist/phases/code-refine/context.d.ts +0 -99
- package/dist/phases/code-refine/context.js +0 -457
- package/dist/phases/code-refine/index.d.ts +0 -59
- package/dist/phases/code-refine/index.js +0 -348
- package/dist/phases/code-refine/prompts.d.ts +0 -5
- package/dist/phases/code-refine/prompts.js +0 -162
- package/dist/phases/code-refine/refine-iteration.d.ts +0 -33
- package/dist/phases/code-refine/refine-iteration.js +0 -166
- package/dist/phases/code-refine/retry-handler.d.ts +0 -17
- package/dist/phases/code-refine/retry-handler.js +0 -87
- package/dist/phases/code-refine-verification/github.d.ts +0 -54
- package/dist/phases/code-refine-verification/github.js +0 -328
- package/dist/phases/code-refine-verification/index.d.ts +0 -11
- package/dist/phases/code-refine-verification/index.js +0 -260
- package/dist/phases/code-refine-verification/llm-analyzer.d.ts +0 -22
- package/dist/phases/code-refine-verification/llm-analyzer.js +0 -152
- package/dist/phases/code-refine-verification/prompts.d.ts +0 -5
- package/dist/phases/code-refine-verification/prompts.js +0 -119
- package/dist/phases/code-refine-verification/types.d.ts +0 -74
- package/dist/phases/code-refine-verification/types.js +0 -4
- package/dist/phases/code-review/context.d.ts +0 -96
- package/dist/phases/code-review/context.js +0 -278
- package/dist/phases/code-review/diff-utils.d.ts +0 -36
- package/dist/phases/code-review/diff-utils.js +0 -100
- package/dist/phases/code-review/index.d.ts +0 -40
- package/dist/phases/code-review/index.js +0 -627
- package/dist/phases/code-testing/analyzer.d.ts +0 -19
- package/dist/phases/code-testing/analyzer.js +0 -215
- package/dist/phases/code-testing/context-fetcher.d.ts +0 -16
- package/dist/phases/code-testing/context-fetcher.js +0 -83
- package/dist/phases/code-testing/index.d.ts +0 -2
- package/dist/phases/code-testing/index.js +0 -2
- package/dist/phases/code-testing/prompts.d.ts +0 -3
- package/dist/phases/code-testing/prompts.js +0 -63
- package/dist/phases/data-flow/index.d.ts +0 -28
- package/dist/phases/data-flow/index.js +0 -286
- package/dist/phases/data-flow/mcp-server.d.ts +0 -85
- package/dist/phases/data-flow/mcp-server.js +0 -140
- package/dist/phases/data-flow/prompts.d.ts +0 -14
- package/dist/phases/data-flow/prompts.js +0 -36
- package/dist/phases/data-flow/types.d.ts +0 -71
- package/dist/phases/data-flow/types.js +0 -86
- package/dist/phases/diagram-shared/clone-repos.d.ts +0 -63
- package/dist/phases/diagram-shared/clone-repos.js +0 -153
- package/dist/phases/diagram-shared/generate.d.ts +0 -42
- package/dist/phases/diagram-shared/generate.js +0 -162
- package/dist/phases/diagram-shared/graph.d.ts +0 -62
- package/dist/phases/diagram-shared/graph.js +0 -169
- package/dist/phases/diagram-shared/mcp.d.ts +0 -35
- package/dist/phases/diagram-shared/mcp.js +0 -68
- package/dist/phases/diagram-shared/prompts.d.ts +0 -23
- package/dist/phases/diagram-shared/prompts.js +0 -35
- package/dist/phases/discover-services/index.d.ts +0 -29
- package/dist/phases/discover-services/index.js +0 -528
- package/dist/phases/er-diagram/index.d.ts +0 -28
- package/dist/phases/er-diagram/index.js +0 -290
- package/dist/phases/er-diagram/mcp-server.d.ts +0 -77
- package/dist/phases/er-diagram/mcp-server.js +0 -144
- package/dist/phases/er-diagram/prompts.d.ts +0 -14
- package/dist/phases/er-diagram/prompts.js +0 -36
- package/dist/phases/er-diagram/types.d.ts +0 -76
- package/dist/phases/er-diagram/types.js +0 -84
- package/dist/phases/features/index.d.ts +0 -65
- package/dist/phases/features/index.js +0 -292
- package/dist/phases/features/mcp-server.d.ts +0 -61
- package/dist/phases/features/mcp-server.js +0 -165
- package/dist/phases/features/prompts.d.ts +0 -32
- package/dist/phases/features/prompts.js +0 -92
- package/dist/phases/features/types.d.ts +0 -34
- package/dist/phases/features/types.js +0 -15
- package/dist/phases/financing-deck/agent.d.ts +0 -1
- package/dist/phases/financing-deck/agent.js +0 -96
- package/dist/phases/financing-deck/context.d.ts +0 -13
- package/dist/phases/financing-deck/context.js +0 -69
- package/dist/phases/financing-deck/index.d.ts +0 -15
- package/dist/phases/financing-deck/index.js +0 -89
- package/dist/phases/financing-deck/prompts.d.ts +0 -2
- package/dist/phases/financing-deck/prompts.js +0 -94
- package/dist/phases/find-architecture/index.d.ts +0 -47
- package/dist/phases/find-architecture/index.js +0 -261
- package/dist/phases/find-architecture/prompts.d.ts +0 -31
- package/dist/phases/find-architecture/prompts.js +0 -128
- package/dist/phases/find-architecture/state.d.ts +0 -21
- package/dist/phases/find-architecture/state.js +0 -17
- package/dist/phases/find-architecture/types.d.ts +0 -55
- package/dist/phases/find-architecture/types.js +0 -69
- package/dist/phases/find-bugs/index.d.ts +0 -33
- package/dist/phases/find-bugs/index.js +0 -236
- package/dist/phases/find-bugs/prompts.d.ts +0 -22
- package/dist/phases/find-bugs/prompts.js +0 -101
- package/dist/phases/find-bugs/state.d.ts +0 -19
- package/dist/phases/find-bugs/state.js +0 -13
- package/dist/phases/find-bugs/types.d.ts +0 -21
- package/dist/phases/find-bugs/types.js +0 -16
- package/dist/phases/find-features/index.d.ts +0 -40
- package/dist/phases/find-features/index.js +0 -328
- package/dist/phases/find-features/prompts.d.ts +0 -43
- package/dist/phases/find-features/prompts.js +0 -138
- package/dist/phases/find-features/state.d.ts +0 -25
- package/dist/phases/find-features/state.js +0 -22
- package/dist/phases/find-features/types.d.ts +0 -27
- package/dist/phases/find-features/types.js +0 -16
- package/dist/phases/find-shared/git.d.ts +0 -24
- package/dist/phases/find-shared/git.js +0 -60
- package/dist/phases/find-shared/mcp.d.ts +0 -48
- package/dist/phases/find-shared/mcp.js +0 -125
- package/dist/phases/find-shared/scan-state.d.ts +0 -33
- package/dist/phases/find-shared/scan-state.js +0 -112
- package/dist/phases/find-smells/index.d.ts +0 -50
- package/dist/phases/find-smells/index.js +0 -298
- package/dist/phases/find-smells/prompts.d.ts +0 -30
- package/dist/phases/find-smells/prompts.js +0 -129
- package/dist/phases/find-smells/state.d.ts +0 -21
- package/dist/phases/find-smells/state.js +0 -17
- package/dist/phases/find-smells/types.d.ts +0 -51
- package/dist/phases/find-smells/types.js +0 -64
- package/dist/phases/flow-shared/clone-repos.d.ts +0 -63
- package/dist/phases/flow-shared/clone-repos.js +0 -153
- package/dist/phases/flowchart/index.d.ts +0 -15
- package/dist/phases/flowchart/index.js +0 -50
- package/dist/phases/functional-testing/analyzer.d.ts +0 -46
- package/dist/phases/functional-testing/analyzer.js +0 -622
- package/dist/phases/functional-testing/context-fetcher.d.ts +0 -16
- package/dist/phases/functional-testing/context-fetcher.js +0 -83
- package/dist/phases/functional-testing/http-fallback.d.ts +0 -10
- package/dist/phases/functional-testing/http-fallback.js +0 -156
- package/dist/phases/functional-testing/index.d.ts +0 -4
- package/dist/phases/functional-testing/index.js +0 -4
- package/dist/phases/functional-testing/mcp-server.d.ts +0 -9
- package/dist/phases/functional-testing/mcp-server.js +0 -13
- package/dist/phases/functional-testing/prompts.d.ts +0 -2
- package/dist/phases/functional-testing/prompts.js +0 -58
- package/dist/phases/functional-testing/test-report-creator.d.ts +0 -68
- package/dist/phases/functional-testing/test-report-creator.js +0 -306
- package/dist/phases/functional-testing/test-retry-handler.d.ts +0 -16
- package/dist/phases/functional-testing/test-retry-handler.js +0 -70
- package/dist/phases/growth-analysis/agent.d.ts +0 -2
- package/dist/phases/growth-analysis/agent.js +0 -107
- package/dist/phases/growth-analysis/context.d.ts +0 -23
- package/dist/phases/growth-analysis/context.js +0 -137
- package/dist/phases/growth-analysis/index.d.ts +0 -32
- package/dist/phases/growth-analysis/index.js +0 -226
- package/dist/phases/growth-analysis/prompts.d.ts +0 -2
- package/dist/phases/growth-analysis/prompts.js +0 -45
- package/dist/phases/intelligence-analysis/agent.d.ts +0 -2
- package/dist/phases/intelligence-analysis/agent.js +0 -338
- package/dist/phases/intelligence-analysis/context.d.ts +0 -23
- package/dist/phases/intelligence-analysis/context.js +0 -142
- package/dist/phases/intelligence-analysis/index.d.ts +0 -58
- package/dist/phases/intelligence-analysis/index.js +0 -244
- package/dist/phases/intelligence-analysis/prompts.d.ts +0 -2
- package/dist/phases/intelligence-analysis/prompts.js +0 -62
- package/dist/phases/issue-analysis/agent.d.ts +0 -21
- package/dist/phases/issue-analysis/agent.js +0 -153
- package/dist/phases/issue-analysis/context.d.ts +0 -20
- package/dist/phases/issue-analysis/context.js +0 -93
- package/dist/phases/issue-analysis/index.d.ts +0 -8
- package/dist/phases/issue-analysis/index.js +0 -147
- package/dist/phases/issue-analysis/outcome.d.ts +0 -10
- package/dist/phases/issue-analysis/outcome.js +0 -42
- package/dist/phases/issue-analysis/prompts.d.ts +0 -8
- package/dist/phases/issue-analysis/prompts.js +0 -99
- package/dist/phases/issue-analysis-verification/agent.d.ts +0 -33
- package/dist/phases/issue-analysis-verification/agent.js +0 -124
- package/dist/phases/issue-analysis-verification/index.d.ts +0 -27
- package/dist/phases/issue-analysis-verification/index.js +0 -79
- package/dist/phases/issue-analysis-verification/prompts.d.ts +0 -9
- package/dist/phases/issue-analysis-verification/prompts.js +0 -75
- package/dist/phases/output-contracts.d.ts +0 -7
- package/dist/phases/output-contracts.js +0 -1201
- package/dist/phases/pr-execution/context.d.ts +0 -32
- package/dist/phases/pr-execution/context.js +0 -246
- package/dist/phases/pr-execution/file-assigner.d.ts +0 -57
- package/dist/phases/pr-execution/file-assigner.js +0 -287
- package/dist/phases/pr-execution/index.d.ts +0 -22
- package/dist/phases/pr-execution/index.js +0 -401
- package/dist/phases/pr-execution/outcome.d.ts +0 -24
- package/dist/phases/pr-execution/outcome.js +0 -34
- package/dist/phases/pr-execution/pr-executor.d.ts +0 -42
- package/dist/phases/pr-execution/pr-executor.js +0 -78
- package/dist/phases/pr-execution/prompts.d.ts +0 -27
- package/dist/phases/pr-execution/prompts.js +0 -131
- package/dist/phases/pr-resolve/checklist-learner.d.ts +0 -28
- package/dist/phases/pr-resolve/checklist-learner.js +0 -153
- package/dist/phases/pr-resolve/github-reply.d.ts +0 -16
- package/dist/phases/pr-resolve/github-reply.js +0 -75
- package/dist/phases/pr-resolve/index.d.ts +0 -33
- package/dist/phases/pr-resolve/index.js +0 -272
- package/dist/phases/pr-resolve/prompts.d.ts +0 -17
- package/dist/phases/pr-resolve/prompts.js +0 -107
- package/dist/phases/pr-resolve/types.d.ts +0 -18
- package/dist/phases/pr-resolve/types.js +0 -14
- package/dist/phases/pr-resolve/workspace.d.ts +0 -45
- package/dist/phases/pr-resolve/workspace.js +0 -174
- package/dist/phases/pr-review/index.d.ts +0 -27
- package/dist/phases/pr-review/index.js +0 -209
- package/dist/phases/pr-review/prompts.d.ts +0 -5
- package/dist/phases/pr-review/prompts.js +0 -87
- package/dist/phases/pr-shared/agent-utils.d.ts +0 -47
- package/dist/phases/pr-shared/agent-utils.js +0 -112
- package/dist/phases/pr-shared/context.d.ts +0 -24
- package/dist/phases/pr-shared/context.js +0 -78
- package/dist/phases/pr-shared/status.d.ts +0 -18
- package/dist/phases/pr-shared/status.js +0 -37
- package/dist/phases/pr-splitting/context.d.ts +0 -28
- package/dist/phases/pr-splitting/context.js +0 -182
- package/dist/phases/pr-splitting/import-dep-validator.d.ts +0 -67
- package/dist/phases/pr-splitting/import-dep-validator.js +0 -255
- package/dist/phases/pr-splitting/index.d.ts +0 -36
- package/dist/phases/pr-splitting/index.js +0 -413
- package/dist/phases/pr-splitting/outcome.d.ts +0 -24
- package/dist/phases/pr-splitting/outcome.js +0 -114
- package/dist/phases/pr-splitting/prompts.d.ts +0 -43
- package/dist/phases/pr-splitting/prompts.js +0 -154
- package/dist/phases/product-techniques/index.d.ts +0 -52
- package/dist/phases/product-techniques/index.js +0 -268
- package/dist/phases/product-techniques/mcp-server.d.ts +0 -41
- package/dist/phases/product-techniques/mcp-server.js +0 -96
- package/dist/phases/product-techniques/prompts.d.ts +0 -19
- package/dist/phases/product-techniques/prompts.js +0 -66
- package/dist/phases/product-techniques/types.d.ts +0 -13
- package/dist/phases/product-techniques/types.js +0 -13
- package/dist/phases/product-test-cases/index.d.ts +0 -25
- package/dist/phases/product-test-cases/index.js +0 -174
- package/dist/phases/product-test-cases/prompts.d.ts +0 -24
- package/dist/phases/product-test-cases/prompts.js +0 -80
- package/dist/phases/product-test-cases/types.d.ts +0 -17
- package/dist/phases/product-test-cases/types.js +0 -27
- package/dist/phases/pull-request/creator.d.ts +0 -30
- package/dist/phases/pull-request/creator.js +0 -319
- package/dist/phases/pull-request/handler.d.ts +0 -15
- package/dist/phases/pull-request/handler.js +0 -92
- package/dist/phases/quality-benchmark/index.d.ts +0 -65
- package/dist/phases/quality-benchmark/index.js +0 -194
- package/dist/phases/quality-benchmark/mcp-server.d.ts +0 -46
- package/dist/phases/quality-benchmark/mcp-server.js +0 -252
- package/dist/phases/quality-benchmark/parsers.d.ts +0 -22
- package/dist/phases/quality-benchmark/parsers.js +0 -1101
- package/dist/phases/quality-benchmark/prompts.d.ts +0 -31
- package/dist/phases/quality-benchmark/prompts.js +0 -154
- package/dist/phases/quality-benchmark/rubric.md +0 -1174
- package/dist/phases/quality-benchmark/tool-catalog.d.ts +0 -33
- package/dist/phases/quality-benchmark/tool-catalog.js +0 -636
- package/dist/phases/quality-benchmark/tool-runner.d.ts +0 -69
- package/dist/phases/quality-benchmark/tool-runner.js +0 -399
- package/dist/phases/quality-benchmark/types.d.ts +0 -312
- package/dist/phases/quality-benchmark/types.js +0 -23
- package/dist/phases/quality-benchmark/workspace.d.ts +0 -31
- package/dist/phases/quality-benchmark/workspace.js +0 -110
- package/dist/phases/recipes/index.d.ts +0 -63
- package/dist/phases/recipes/index.js +0 -358
- package/dist/phases/recipes/mcp-server.d.ts +0 -66
- package/dist/phases/recipes/mcp-server.js +0 -229
- package/dist/phases/recipes/prompts.d.ts +0 -35
- package/dist/phases/recipes/prompts.js +0 -105
- package/dist/phases/recipes/types.d.ts +0 -42
- package/dist/phases/recipes/types.js +0 -16
- package/dist/phases/release-sync/github.d.ts +0 -66
- package/dist/phases/release-sync/github.js +0 -140
- package/dist/phases/release-sync/index.d.ts +0 -24
- package/dist/phases/release-sync/index.js +0 -156
- package/dist/phases/release-sync/snapshot.d.ts +0 -27
- package/dist/phases/release-sync/snapshot.js +0 -158
- package/dist/phases/run-sheet/agent.d.ts +0 -49
- package/dist/phases/run-sheet/agent.js +0 -156
- package/dist/phases/run-sheet/index.d.ts +0 -57
- package/dist/phases/run-sheet/index.js +0 -392
- package/dist/phases/screen-flow/index.d.ts +0 -26
- package/dist/phases/screen-flow/index.js +0 -349
- package/dist/phases/screen-flow/mcp-server.d.ts +0 -201
- package/dist/phases/screen-flow/mcp-server.js +0 -272
- package/dist/phases/screen-flow/prompts.d.ts +0 -19
- package/dist/phases/screen-flow/prompts.js +0 -43
- package/dist/phases/screen-flow/theme.d.ts +0 -19
- package/dist/phases/screen-flow/theme.js +0 -193
- package/dist/phases/screen-flow/types.d.ts +0 -137
- package/dist/phases/screen-flow/types.js +0 -81
- package/dist/phases/sequence-diagram/index.d.ts +0 -30
- package/dist/phases/sequence-diagram/index.js +0 -290
- package/dist/phases/sequence-diagram/mcp-server.d.ts +0 -64
- package/dist/phases/sequence-diagram/mcp-server.js +0 -134
- package/dist/phases/sequence-diagram/prompts.d.ts +0 -14
- package/dist/phases/sequence-diagram/prompts.js +0 -36
- package/dist/phases/sequence-diagram/types.d.ts +0 -52
- package/dist/phases/sequence-diagram/types.js +0 -93
- package/dist/phases/smoke-test/agent.d.ts +0 -12
- package/dist/phases/smoke-test/agent.js +0 -93
- package/dist/phases/smoke-test/index.d.ts +0 -22
- package/dist/phases/smoke-test/index.js +0 -241
- package/dist/phases/smoke-test/prompts.d.ts +0 -15
- package/dist/phases/smoke-test/prompts.js +0 -35
- package/dist/phases/state-diagram/index.d.ts +0 -15
- package/dist/phases/state-diagram/index.js +0 -53
- package/dist/phases/sync-github-issues/index.d.ts +0 -41
- package/dist/phases/sync-github-issues/index.js +0 -187
- package/dist/phases/sync-github-issues/state.d.ts +0 -26
- package/dist/phases/sync-github-issues/state.js +0 -18
- package/dist/phases/sync-github-issues/types.d.ts +0 -35
- package/dist/phases/sync-github-issues/types.js +0 -6
- package/dist/phases/sync-github-pull-requests/index.d.ts +0 -23
- package/dist/phases/sync-github-pull-requests/index.js +0 -210
- package/dist/phases/sync-github-pull-requests/state.d.ts +0 -24
- package/dist/phases/sync-github-pull-requests/state.js +0 -16
- package/dist/phases/sync-github-pull-requests/types.d.ts +0 -22
- package/dist/phases/sync-github-pull-requests/types.js +0 -1
- package/dist/phases/sync-org-repos/index.d.ts +0 -28
- package/dist/phases/sync-org-repos/index.js +0 -133
- package/dist/phases/sync-sentry-issues/index.d.ts +0 -29
- package/dist/phases/sync-sentry-issues/index.js +0 -153
- package/dist/phases/sync-sentry-issues/sentry-client.d.ts +0 -66
- package/dist/phases/sync-sentry-issues/sentry-client.js +0 -221
- package/dist/phases/sync-sentry-issues/state.d.ts +0 -23
- package/dist/phases/sync-sentry-issues/state.js +0 -18
- package/dist/phases/sync-sentry-issues/types.d.ts +0 -46
- package/dist/phases/sync-sentry-issues/types.js +0 -6
- package/dist/phases/sync-shared/mcp.d.ts +0 -81
- package/dist/phases/sync-shared/mcp.js +0 -111
- package/dist/phases/task/agent.d.ts +0 -10
- package/dist/phases/task/agent.js +0 -83
- package/dist/phases/task/context.d.ts +0 -16
- package/dist/phases/task/context.js +0 -50
- package/dist/phases/task/index.d.ts +0 -17
- package/dist/phases/task/index.js +0 -54
- package/dist/phases/task/prompts.d.ts +0 -9
- package/dist/phases/task/prompts.js +0 -21
- package/dist/phases/technical-design/context.d.ts +0 -12
- package/dist/phases/technical-design/context.js +0 -39
- package/dist/phases/technical-design/index.d.ts +0 -21
- package/dist/phases/technical-design/index.js +0 -456
- package/dist/phases/technical-design/outcome.d.ts +0 -25
- package/dist/phases/technical-design/outcome.js +0 -41
- package/dist/phases/technical-design/prompts.d.ts +0 -8
- package/dist/phases/technical-design/prompts.js +0 -210
- package/dist/phases/technical-design-verification/agent.d.ts +0 -53
- package/dist/phases/technical-design-verification/agent.js +0 -186
- package/dist/phases/technical-design-verification/index.d.ts +0 -38
- package/dist/phases/technical-design-verification/index.js +0 -152
- package/dist/phases/technical-design-verification/prompts.d.ts +0 -12
- package/dist/phases/technical-design-verification/prompts.js +0 -143
- package/dist/phases/test-cases-analysis/agent.d.ts +0 -9
- package/dist/phases/test-cases-analysis/agent.js +0 -105
- package/dist/phases/test-cases-analysis/context.d.ts +0 -15
- package/dist/phases/test-cases-analysis/context.js +0 -86
- package/dist/phases/test-cases-analysis/formatters.d.ts +0 -6
- package/dist/phases/test-cases-analysis/formatters.js +0 -35
- package/dist/phases/test-cases-analysis/index.d.ts +0 -9
- package/dist/phases/test-cases-analysis/index.js +0 -175
- package/dist/phases/test-cases-analysis/outcome.d.ts +0 -27
- package/dist/phases/test-cases-analysis/outcome.js +0 -146
- package/dist/phases/test-cases-analysis/prompts.d.ts +0 -7
- package/dist/phases/test-cases-analysis/prompts.js +0 -171
- package/dist/phases/user-psychology/agent.d.ts +0 -16
- package/dist/phases/user-psychology/agent.js +0 -105
- package/dist/phases/user-psychology/context.d.ts +0 -10
- package/dist/phases/user-psychology/context.js +0 -65
- package/dist/phases/user-psychology/index.d.ts +0 -18
- package/dist/phases/user-psychology/index.js +0 -96
- package/dist/phases/user-psychology/prompts.d.ts +0 -2
- package/dist/phases/user-psychology/prompts.js +0 -41
- package/dist/phases/user-stories-analysis/agent.d.ts +0 -9
- package/dist/phases/user-stories-analysis/agent.js +0 -105
- package/dist/phases/user-stories-analysis/context.d.ts +0 -15
- package/dist/phases/user-stories-analysis/context.js +0 -86
- package/dist/phases/user-stories-analysis/formatters.d.ts +0 -6
- package/dist/phases/user-stories-analysis/formatters.js +0 -32
- package/dist/phases/user-stories-analysis/index.d.ts +0 -9
- package/dist/phases/user-stories-analysis/index.js +0 -175
- package/dist/phases/user-stories-analysis/outcome.d.ts +0 -27
- package/dist/phases/user-stories-analysis/outcome.js +0 -146
- package/dist/phases/user-stories-analysis/prompts.d.ts +0 -7
- package/dist/phases/user-stories-analysis/prompts.js +0 -194
- package/dist/services/audit-logs.d.ts +0 -73
- package/dist/services/audit-logs.js +0 -174
- package/dist/services/branches.d.ts +0 -103
- package/dist/services/branches.js +0 -391
- package/dist/services/checklist.d.ts +0 -100
- package/dist/services/checklist.js +0 -259
- package/dist/services/coaching/coaching-agent.d.ts +0 -39
- package/dist/services/coaching/coaching-agent.js +0 -308
- package/dist/services/coaching/coaching-loop.d.ts +0 -62
- package/dist/services/coaching/coaching-loop.js +0 -265
- package/dist/services/coaching/index.d.ts +0 -8
- package/dist/services/coaching/index.js +0 -8
- package/dist/services/coaching/phase-coaching.d.ts +0 -47
- package/dist/services/coaching/phase-coaching.js +0 -60
- package/dist/services/coaching/self-rating.d.ts +0 -26
- package/dist/services/coaching/self-rating.js +0 -153
- package/dist/services/feedbacks.d.ts +0 -57
- package/dist/services/feedbacks.js +0 -264
- package/dist/services/phase-hooks/bindings-fetcher.d.ts +0 -21
- package/dist/services/phase-hooks/bindings-fetcher.js +0 -53
- package/dist/services/phase-hooks/hook-executor.d.ts +0 -36
- package/dist/services/phase-hooks/hook-executor.js +0 -167
- package/dist/services/phase-hooks/hook-logging.d.ts +0 -14
- package/dist/services/phase-hooks/hook-logging.js +0 -41
- package/dist/services/phase-hooks/hook-runner.d.ts +0 -19
- package/dist/services/phase-hooks/hook-runner.js +0 -83
- package/dist/services/phase-hooks/index.d.ts +0 -10
- package/dist/services/phase-hooks/index.js +0 -9
- package/dist/services/phase-hooks/plugin-loader.d.ts +0 -31
- package/dist/services/phase-hooks/plugin-loader.js +0 -207
- package/dist/services/phase-hooks/types.d.ts +0 -69
- package/dist/services/phase-hooks/types.js +0 -8
- package/dist/services/phase-ratings.d.ts +0 -70
- package/dist/services/phase-ratings.js +0 -143
- package/dist/services/product-logs.d.ts +0 -31
- package/dist/services/product-logs.js +0 -94
- package/dist/services/pull-requests.d.ts +0 -57
- package/dist/services/pull-requests.js +0 -186
- package/dist/services/quality-reports.d.ts +0 -45
- package/dist/services/quality-reports.js +0 -93
- package/dist/services/repo-config.d.ts +0 -17
- package/dist/services/repo-config.js +0 -50
- package/dist/services/skill-resolver.d.ts +0 -46
- package/dist/services/skill-resolver.js +0 -123
- package/dist/services/video/device-frames.d.ts +0 -34
- package/dist/services/video/device-frames.js +0 -513
- package/dist/services/video/index.d.ts +0 -66
- package/dist/services/video/index.js +0 -238
- package/dist/services/video/retry.d.ts +0 -20
- package/dist/services/video/retry.js +0 -76
- package/dist/services/video/screenshot-generator.d.ts +0 -69
- package/dist/services/video/screenshot-generator.js +0 -259
- package/dist/services/video/tts-generator.d.ts +0 -40
- package/dist/services/video/tts-generator.js +0 -121
- package/dist/services/video/video-assembler.d.ts +0 -45
- package/dist/services/video/video-assembler.js +0 -351
- package/dist/services/video/video-uploader.d.ts +0 -28
- package/dist/services/video/video-uploader.js +0 -108
- package/dist/skills/phase/adr-generation/SKILL.md +0 -51
- package/dist/skills/phase/analyze-logs/SKILL.md +0 -24
- package/dist/skills/phase/app-store-generation/SKILL.md +0 -60
- package/dist/skills/phase/architecture-diagram/SKILL.md +0 -41
- package/dist/skills/phase/autonomous/SKILL.md +0 -52
- package/dist/skills/phase/branch-planning/SKILL.md +0 -55
- package/dist/skills/phase/bug-fixing/SKILL.md +0 -47
- package/dist/skills/phase/class-diagram/SKILL.md +0 -44
- package/dist/skills/phase/code-implementation/SKILL.md +0 -68
- package/dist/skills/phase/code-implementation-verification/SKILL.md +0 -76
- package/dist/skills/phase/code-refine/SKILL.md +0 -62
- package/dist/skills/phase/code-testing/SKILL.md +0 -78
- package/dist/skills/phase/data-flow/SKILL.md +0 -82
- package/dist/skills/phase/er-diagram/SKILL.md +0 -71
- package/dist/skills/phase/flowchart/SKILL.md +0 -38
- package/dist/skills/phase/functional-testing/SKILL.md +0 -62
- package/dist/skills/phase/growth-analysis/SKILL.md +0 -97
- package/dist/skills/phase/incremental-sync/SKILL.md +0 -59
- package/dist/skills/phase/intelligence-analysis/SKILL.md +0 -52
- package/dist/skills/phase/issue-analysis/SKILL.md +0 -73
- package/dist/skills/phase/issue-analysis-verification/SKILL.md +0 -61
- package/dist/skills/phase/pr-execution/SKILL.md +0 -69
- package/dist/skills/phase/pr-splitting/SKILL.md +0 -78
- package/dist/skills/phase/screen-flow/SKILL.md +0 -78
- package/dist/skills/phase/sequence-diagram/SKILL.md +0 -67
- package/dist/skills/phase/smoke-test/SKILL.md +0 -80
- package/dist/skills/phase/state-diagram/SKILL.md +0 -38
- package/dist/skills/phase/task/SKILL.md +0 -19
- package/dist/skills/phase/technical-design/SKILL.md +0 -75
- package/dist/skills/phase/technical-design-verification/SKILL.md +0 -43
- package/dist/skills/phase/test-cases-analysis/SKILL.md +0 -88
- package/dist/skills/phase/user-psychology/SKILL.md +0 -135
- package/dist/skills/phase/user-stories-analysis/SKILL.md +0 -118
- package/dist/supabase/client.d.ts +0 -34
- package/dist/supabase/client.js +0 -123
- package/dist/system/session-manager.d.ts +0 -67
- package/dist/system/session-manager.js +0 -300
- package/dist/system/sleep-notification.d.ts +0 -15
- package/dist/system/sleep-notification.js +0 -108
- package/dist/system/sleep-prevention.d.ts +0 -20
- package/dist/system/sleep-prevention.js +0 -112
- package/dist/tools/bootstrap.d.ts +0 -45
- package/dist/tools/bootstrap.js +0 -50
- package/dist/types/external-sources.d.ts +0 -22
- package/dist/types/external-sources.js +0 -23
- package/dist/types/index.d.ts +0 -206
- package/dist/types/index.js +0 -1
- package/dist/types/issues.d.ts +0 -37
- package/dist/types/issues.js +0 -1
- package/dist/types/llm-responses.d.ts +0 -114
- package/dist/types/llm-responses.js +0 -9
- package/dist/types/pipeline.d.ts +0 -28
- package/dist/types/pipeline.js +0 -4
- package/dist/updater/auto-updater.d.ts +0 -39
- package/dist/updater/auto-updater.js +0 -134
- package/dist/utils/conflict-resolver.d.ts +0 -49
- package/dist/utils/conflict-resolver.js +0 -201
- package/dist/utils/formatters.d.ts +0 -42
- package/dist/utils/formatters.js +0 -166
- package/dist/utils/git-branch-manager-async.d.ts +0 -127
- package/dist/utils/git-branch-manager-async.js +0 -425
- package/dist/utils/git-branch-manager.d.ts +0 -160
- package/dist/utils/git-branch-manager.js +0 -613
- package/dist/utils/git-push.d.ts +0 -43
- package/dist/utils/git-push.js +0 -136
- package/dist/utils/github-repo-info.d.ts +0 -26
- package/dist/utils/github-repo-info.js +0 -45
- package/dist/utils/image-downloader.d.ts +0 -32
- package/dist/utils/image-downloader.js +0 -152
- package/dist/utils/issue-phase-cli.d.ts +0 -26
- package/dist/utils/issue-phase-cli.js +0 -44
- package/dist/utils/json-extract.d.ts +0 -6
- package/dist/utils/json-extract.js +0 -44
- package/dist/utils/json-extractor.d.ts +0 -27
- package/dist/utils/json-extractor.js +0 -102
- package/dist/utils/logger.d.ts +0 -35
- package/dist/utils/logger.js +0 -167
- package/dist/utils/pipeline-logger.d.ts +0 -8
- package/dist/utils/pipeline-logger.js +0 -38
- package/dist/utils/validation.d.ts +0 -68
- package/dist/utils/validation.js +0 -229
- package/dist/utils/workflow-utils.d.ts +0 -22
- package/dist/utils/workflow-utils.js +0 -48
- package/dist/workspace/session-workspace.d.ts +0 -43
- package/dist/workspace/session-workspace.js +0 -90
- package/dist/workspace/workspace-manager.d.ts +0 -105
- package/dist/workspace/workspace-manager.js +0 -280
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Agent Workflow Processor - Cross-product issue processing
|
|
3
|
-
*
|
|
4
|
-
* Uses child_process.fork() to run each issue in an isolated worker process.
|
|
5
|
-
* This enables:
|
|
6
|
-
* - Concurrent processing of multiple issues (each worker has its own cwd)
|
|
7
|
-
* - Auto-update takes effect on next issue (new workers load latest code)
|
|
8
|
-
* - Crash isolation (one worker failing doesn't affect others)
|
|
9
|
-
*/
|
|
10
|
-
import { type EdsgerConfig } from '../../types/index.js';
|
|
11
|
-
import { type WorkflowStats } from '../workflow/core/state-manager.js';
|
|
12
|
-
/**
|
|
13
|
-
* Maximum allowed concurrency (hard cap).
|
|
14
|
-
* Limits are due to:
|
|
15
|
-
* - MCP API rate limits (per-minute/per-hour per token)
|
|
16
|
-
* - AI API rate limits (Claude/OpenAI RPM/TPM)
|
|
17
|
-
* - GitHub App installation token rate limit (5000 req/hour)
|
|
18
|
-
* - Memory: each fork() creates ~50-80MB Node.js process
|
|
19
|
-
*/
|
|
20
|
-
export declare const MAX_CONCURRENCY = 10;
|
|
21
|
-
export interface AgentWorkflowOptions {
|
|
22
|
-
readonly workspaceRoot: string;
|
|
23
|
-
readonly pollInterval?: number;
|
|
24
|
-
readonly maxConcurrent?: number;
|
|
25
|
-
readonly maxRetries?: number;
|
|
26
|
-
readonly verbose?: boolean;
|
|
27
|
-
}
|
|
28
|
-
export declare class AgentWorkflowProcessor {
|
|
29
|
-
private readonly options;
|
|
30
|
-
private readonly config;
|
|
31
|
-
private isRunning;
|
|
32
|
-
private processedIssues;
|
|
33
|
-
private pollTimer?;
|
|
34
|
-
/** Currently active worker processes, keyed by issueId */
|
|
35
|
-
private activeWorkers;
|
|
36
|
-
/** Realtime subscription on `issues` — wakes processNextIssues when an
|
|
37
|
-
* issue flips to ready_for_ai, so the 30s poll can be relaxed. */
|
|
38
|
-
private issuesRealtimeChannel;
|
|
39
|
-
constructor(options: AgentWorkflowOptions, config: EdsgerConfig);
|
|
40
|
-
start(): Promise<void>;
|
|
41
|
-
/**
|
|
42
|
-
* Subscribe to `issues` UPDATE/INSERT events and trigger processNextIssues
|
|
43
|
-
* when a row arrives with `status='ready_for_ai'` assigned to this user.
|
|
44
|
-
*
|
|
45
|
-
* Returns true if the subscription was successfully started. RLS on `issues`
|
|
46
|
-
* already constrains delivery to products the user has access to.
|
|
47
|
-
*/
|
|
48
|
-
private startIssuesRealtime;
|
|
49
|
-
/**
|
|
50
|
-
* Post a best-effort workflow status update into the issue's chat channel.
|
|
51
|
-
* Chat itself is served by the standalone `edsger chat-serve` daemon; the
|
|
52
|
-
* workflow only narrates lifecycle milestones here. Fire-and-forget — a chat
|
|
53
|
-
* failure must never affect issue processing.
|
|
54
|
-
*/
|
|
55
|
-
private narrateToIssueChat;
|
|
56
|
-
stop(): void;
|
|
57
|
-
private processNextIssues;
|
|
58
|
-
/**
|
|
59
|
-
* Start a child process worker for a single issue.
|
|
60
|
-
* Handles: atomic claim, GitHub config lookup, repo cloning, then forks
|
|
61
|
-
* the worker.
|
|
62
|
-
*
|
|
63
|
-
* The candidate `issue` here comes from the listed ready_for_ai pool but is
|
|
64
|
-
* advisory — between list time and claim time another agent (or another
|
|
65
|
-
* process) may have grabbed it. We re-claim atomically per product. The
|
|
66
|
-
* RPC returns whichever ready issue is next in that product (most often
|
|
67
|
-
* the same one we listed, but not guaranteed); we operate on what claim
|
|
68
|
-
* actually returns. If claim returns null, someone else won the race —
|
|
69
|
-
* skip this slot for this cycle.
|
|
70
|
-
*/
|
|
71
|
-
private startIssueWorker;
|
|
72
|
-
/**
|
|
73
|
-
* After a successful claim moved the issue ready_for_ai → assigned_to_ai,
|
|
74
|
-
* any post-claim setup failure (GitHub config, clone, fork) leaves the
|
|
75
|
-
* issue stuck at assigned_to_ai with no worker — an orphan that the user
|
|
76
|
-
* can't fix from the UI. Push it forward to 'failed' so it shows up in
|
|
77
|
-
* the failed bucket and can be inspected / re-set to ready_for_ai by a
|
|
78
|
-
* human.
|
|
79
|
-
*
|
|
80
|
-
* Status guard: only force-progress if the issue is still at
|
|
81
|
-
* assigned_to_ai or in_progress. A worker may have already advanced the
|
|
82
|
-
* status to shipped / failed via a separate code path before we got the
|
|
83
|
-
* non-success IPC signal; clobbering those would lose real outcome data.
|
|
84
|
-
* STATUS_PROGRESSION_ORDER classifies shipped→failed as a forward move
|
|
85
|
-
* (so updateIssueStatus wouldn't reject it), which is why this guard
|
|
86
|
-
* lives here rather than at the RPC layer.
|
|
87
|
-
*
|
|
88
|
-
* Errors are swallowed: if the status fetch or update fails the issue
|
|
89
|
-
* stays orphaned but logging is the most we can do here.
|
|
90
|
-
*/
|
|
91
|
-
private releaseClaim;
|
|
92
|
-
private handleWorkerResult;
|
|
93
|
-
getStats(): WorkflowStats;
|
|
94
|
-
getActiveWorkerCount(): number;
|
|
95
|
-
}
|
|
@@ -1,519 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Agent Workflow Processor - Cross-product issue processing
|
|
3
|
-
*
|
|
4
|
-
* Uses child_process.fork() to run each issue in an isolated worker process.
|
|
5
|
-
* This enables:
|
|
6
|
-
* - Concurrent processing of multiple issues (each worker has its own cwd)
|
|
7
|
-
* - Auto-update takes effect on next issue (new workers load latest code)
|
|
8
|
-
* - Crash isolation (one worker failing doesn't affect others)
|
|
9
|
-
*/
|
|
10
|
-
import { fork } from 'child_process';
|
|
11
|
-
import { dirname, join } from 'path';
|
|
12
|
-
import { fileURLToPath } from 'url';
|
|
13
|
-
import { sendIssueSystemMessage } from '../../api/chat.js';
|
|
14
|
-
import { listAllReadyIssues, } from '../../api/cross-product.js';
|
|
15
|
-
import { getGitHubConfig } from '../../api/github.js';
|
|
16
|
-
import { claimNextIssue, getIssue } from '../../api/issues/index.js';
|
|
17
|
-
import { callMcpEndpoint } from '../../api/mcp-client.js';
|
|
18
|
-
import { getUserId } from '../../auth/auth-store.js';
|
|
19
|
-
import { WorkerTimeoutError } from '../../errors/index.js';
|
|
20
|
-
import { getSupabase, hasSupabaseSession } from '../../supabase/client.js';
|
|
21
|
-
import { sendHeartbeat, shouldProcess } from '../../system/session-manager.js';
|
|
22
|
-
import { logError, logInfo, logSuccess, logWarning, } from '../../utils/logger.js';
|
|
23
|
-
import { cleanupIssueRepo, cloneIssueRepo, getIssueRepoPath, } from '../../workspace/workspace-manager.js';
|
|
24
|
-
import { calculateStats, createCompletedState, createFailedState, createInitialState, createProcessingState, updateIssueState, } from '../workflow/core/state-manager.js';
|
|
25
|
-
/**
|
|
26
|
-
* Maximum allowed concurrency (hard cap).
|
|
27
|
-
* Limits are due to:
|
|
28
|
-
* - MCP API rate limits (per-minute/per-hour per token)
|
|
29
|
-
* - AI API rate limits (Claude/OpenAI RPM/TPM)
|
|
30
|
-
* - GitHub App installation token rate limit (5000 req/hour)
|
|
31
|
-
* - Memory: each fork() creates ~50-80MB Node.js process
|
|
32
|
-
*/
|
|
33
|
-
export const MAX_CONCURRENCY = 10;
|
|
34
|
-
/** Path to the compiled worker entry points */
|
|
35
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention -- ESM __filename/__dirname polyfill
|
|
36
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
37
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention -- ESM __filename/__dirname polyfill
|
|
38
|
-
const __dirname = dirname(__filename);
|
|
39
|
-
const WORKER_SCRIPT = join(__dirname, 'issue-worker.js');
|
|
40
|
-
export class AgentWorkflowProcessor {
|
|
41
|
-
options;
|
|
42
|
-
config;
|
|
43
|
-
isRunning = false;
|
|
44
|
-
processedIssues = createInitialState();
|
|
45
|
-
pollTimer;
|
|
46
|
-
/** Currently active worker processes, keyed by issueId */
|
|
47
|
-
activeWorkers = new Map();
|
|
48
|
-
/** Realtime subscription on `issues` — wakes processNextIssues when an
|
|
49
|
-
* issue flips to ready_for_ai, so the 30s poll can be relaxed. */
|
|
50
|
-
issuesRealtimeChannel = null;
|
|
51
|
-
constructor(options, config) {
|
|
52
|
-
const wf = config.workflow;
|
|
53
|
-
this.options = {
|
|
54
|
-
pollInterval: options.pollInterval ?? wf.pollInterval,
|
|
55
|
-
maxConcurrent: Math.min(options.maxConcurrent ?? wf.maxConcurrency, MAX_CONCURRENCY),
|
|
56
|
-
maxRetries: options.maxRetries ?? wf.maxRetries,
|
|
57
|
-
verbose: false,
|
|
58
|
-
...options,
|
|
59
|
-
};
|
|
60
|
-
this.config = config;
|
|
61
|
-
}
|
|
62
|
-
async start() {
|
|
63
|
-
if (this.isRunning) {
|
|
64
|
-
logInfo('Agent processor is already running');
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
this.isRunning = true;
|
|
68
|
-
logInfo(`Concurrent processing: up to ${this.options.maxConcurrent} issue(s)`);
|
|
69
|
-
// Initial issue check
|
|
70
|
-
await this.processNextIssues();
|
|
71
|
-
// Set up Realtime subscription on `issues` so a status flip to
|
|
72
|
-
// 'ready_for_ai' triggers an immediate processing pass instead of
|
|
73
|
-
// waiting for the next poll tick. Falls back to the timer-only path
|
|
74
|
-
// when the Supabase session isn't available yet.
|
|
75
|
-
const realtimeOk = this.startIssuesRealtime();
|
|
76
|
-
// Keep the timer as a safety net (Realtime can drop events on
|
|
77
|
-
// reconnect / publication lag). When Realtime is active we stretch the
|
|
78
|
-
// interval substantially — the timer is purely a backstop now.
|
|
79
|
-
const safetyNetInterval = realtimeOk
|
|
80
|
-
? Math.max(this.options.pollInterval, 5 * 60_000)
|
|
81
|
-
: this.options.pollInterval;
|
|
82
|
-
this.pollTimer = setInterval(() => {
|
|
83
|
-
this.processNextIssues().catch((error) => {
|
|
84
|
-
logError(`Polling error: ${error instanceof Error ? error.message : String(error)}`);
|
|
85
|
-
});
|
|
86
|
-
}, safetyNetInterval);
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Subscribe to `issues` UPDATE/INSERT events and trigger processNextIssues
|
|
90
|
-
* when a row arrives with `status='ready_for_ai'` assigned to this user.
|
|
91
|
-
*
|
|
92
|
-
* Returns true if the subscription was successfully started. RLS on `issues`
|
|
93
|
-
* already constrains delivery to products the user has access to.
|
|
94
|
-
*/
|
|
95
|
-
startIssuesRealtime() {
|
|
96
|
-
if (this.issuesRealtimeChannel) {
|
|
97
|
-
return true;
|
|
98
|
-
}
|
|
99
|
-
const userId = getUserId();
|
|
100
|
-
if (!hasSupabaseSession() || !userId) {
|
|
101
|
-
return false;
|
|
102
|
-
}
|
|
103
|
-
try {
|
|
104
|
-
const supabase = getSupabase();
|
|
105
|
-
const onChange = (payload) => {
|
|
106
|
-
const row = payload.new;
|
|
107
|
-
if (!row) {
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
// Realtime postgres_changes filter syntax only supports a single
|
|
111
|
-
// predicate, so filter the rest in-process.
|
|
112
|
-
if (row.status !== 'ready_for_ai' ||
|
|
113
|
-
(row.developer_id && row.developer_id !== userId)) {
|
|
114
|
-
return;
|
|
115
|
-
}
|
|
116
|
-
this.processNextIssues().catch((error) => {
|
|
117
|
-
logError(`Realtime-triggered processNextIssues failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
118
|
-
});
|
|
119
|
-
};
|
|
120
|
-
this.issuesRealtimeChannel = supabase
|
|
121
|
-
.channel('agent-workflow-issues')
|
|
122
|
-
.on('postgres_changes', { event: 'INSERT', schema: 'public', table: 'issues' }, onChange)
|
|
123
|
-
.on('postgres_changes', { event: 'UPDATE', schema: 'public', table: 'issues' }, onChange)
|
|
124
|
-
.subscribe((status) => {
|
|
125
|
-
if (status === 'SUBSCRIBED') {
|
|
126
|
-
logInfo('Realtime subscription on issues active');
|
|
127
|
-
}
|
|
128
|
-
else if (status === 'CHANNEL_ERROR' ||
|
|
129
|
-
status === 'TIMED_OUT' ||
|
|
130
|
-
status === 'CLOSED') {
|
|
131
|
-
logWarning(`Issues Realtime channel status: ${status}`);
|
|
132
|
-
}
|
|
133
|
-
});
|
|
134
|
-
return true;
|
|
135
|
-
}
|
|
136
|
-
catch (error) {
|
|
137
|
-
logWarning(`Failed to start issues Realtime subscription: ${error instanceof Error ? error.message : String(error)}`);
|
|
138
|
-
return false;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Post a best-effort workflow status update into the issue's chat channel.
|
|
143
|
-
* Chat itself is served by the standalone `edsger chat-serve` daemon; the
|
|
144
|
-
* workflow only narrates lifecycle milestones here. Fire-and-forget — a chat
|
|
145
|
-
* failure must never affect issue processing.
|
|
146
|
-
*/
|
|
147
|
-
narrateToIssueChat(issueId, content, metadata) {
|
|
148
|
-
void sendIssueSystemMessage(issueId, content, metadata).catch((error) => {
|
|
149
|
-
logWarning(`Failed to post chat update for issue ${issueId}: ${error instanceof Error ? error.message : String(error)}`);
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
stop() {
|
|
153
|
-
if (!this.isRunning) {
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
|
-
this.isRunning = false;
|
|
157
|
-
if (this.pollTimer) {
|
|
158
|
-
clearInterval(this.pollTimer);
|
|
159
|
-
this.pollTimer = undefined;
|
|
160
|
-
}
|
|
161
|
-
// Tear down Realtime first so a late event doesn't kick off new work
|
|
162
|
-
// while we're shutting down workers.
|
|
163
|
-
if (this.issuesRealtimeChannel) {
|
|
164
|
-
try {
|
|
165
|
-
void getSupabase().removeChannel(this.issuesRealtimeChannel);
|
|
166
|
-
}
|
|
167
|
-
catch {
|
|
168
|
-
// Best-effort
|
|
169
|
-
}
|
|
170
|
-
this.issuesRealtimeChannel = null;
|
|
171
|
-
}
|
|
172
|
-
// Kill all active issue workers gracefully
|
|
173
|
-
for (const [issueId, worker] of this.activeWorkers) {
|
|
174
|
-
logInfo(`Stopping worker for issue: ${issueId}`);
|
|
175
|
-
if (worker.timeoutTimer) {
|
|
176
|
-
clearTimeout(worker.timeoutTimer);
|
|
177
|
-
}
|
|
178
|
-
try {
|
|
179
|
-
worker.process.kill('SIGTERM');
|
|
180
|
-
}
|
|
181
|
-
catch {
|
|
182
|
-
// Ignore kill errors
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
async processNextIssues() {
|
|
187
|
-
try {
|
|
188
|
-
// Check if we should be processing (not paused/stopped from web dashboard)
|
|
189
|
-
if (!shouldProcess()) {
|
|
190
|
-
if (this.options.verbose) {
|
|
191
|
-
logInfo('Processing paused by remote control');
|
|
192
|
-
}
|
|
193
|
-
return;
|
|
194
|
-
}
|
|
195
|
-
// Calculate how many more issues we can take on
|
|
196
|
-
const availableSlots = this.options.maxConcurrent - this.activeWorkers.size;
|
|
197
|
-
if (availableSlots <= 0) {
|
|
198
|
-
if (this.options.verbose) {
|
|
199
|
-
logInfo(`All ${this.options.maxConcurrent} slots occupied, waiting...`);
|
|
200
|
-
}
|
|
201
|
-
return;
|
|
202
|
-
}
|
|
203
|
-
// Fetch ready issues across all products
|
|
204
|
-
const issues = await listAllReadyIssues(this.options.verbose);
|
|
205
|
-
if (issues.length === 0) {
|
|
206
|
-
if (this.options.verbose) {
|
|
207
|
-
logInfo('No issues available for processing');
|
|
208
|
-
}
|
|
209
|
-
return;
|
|
210
|
-
}
|
|
211
|
-
// Filter out issues already being processed or recently failed
|
|
212
|
-
const cooldownMs = this.config.workflow.retryCooldown;
|
|
213
|
-
const newIssues = issues.filter((f) => {
|
|
214
|
-
if (this.activeWorkers.has(f.id)) {
|
|
215
|
-
return false;
|
|
216
|
-
}
|
|
217
|
-
const state = this.processedIssues.get(f.id);
|
|
218
|
-
if (state?.status === 'failed') {
|
|
219
|
-
// Allow retry if issue was updated after our last attempt (user intervention)
|
|
220
|
-
if (f.updated_at && new Date(f.updated_at) > state.lastAttempt) {
|
|
221
|
-
return true;
|
|
222
|
-
}
|
|
223
|
-
// Skip if max retries exceeded
|
|
224
|
-
if (state.retryCount >= this.options.maxRetries) {
|
|
225
|
-
return false;
|
|
226
|
-
}
|
|
227
|
-
// Skip if within cooldown period
|
|
228
|
-
if (Date.now() - state.lastAttempt.getTime() < cooldownMs) {
|
|
229
|
-
return false;
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
return true;
|
|
233
|
-
});
|
|
234
|
-
if (newIssues.length === 0) {
|
|
235
|
-
// Log skipped issues for debugging
|
|
236
|
-
const skippedCount = issues.filter((f) => {
|
|
237
|
-
const state = this.processedIssues.get(f.id);
|
|
238
|
-
return (state?.status === 'failed' &&
|
|
239
|
-
state.retryCount >= this.options.maxRetries);
|
|
240
|
-
}).length;
|
|
241
|
-
if (skippedCount > 0) {
|
|
242
|
-
logInfo(`${skippedCount} issue(s) skipped (max retries exceeded)`);
|
|
243
|
-
}
|
|
244
|
-
if (this.options.verbose) {
|
|
245
|
-
logInfo('No issues available for processing');
|
|
246
|
-
}
|
|
247
|
-
return;
|
|
248
|
-
}
|
|
249
|
-
// Pick issues up to available slots
|
|
250
|
-
const toProcess = newIssues.slice(0, availableSlots);
|
|
251
|
-
// Start processing each issue concurrently
|
|
252
|
-
for (const issue of toProcess) {
|
|
253
|
-
this.startIssueWorker(issue).catch((error) => {
|
|
254
|
-
logError(`Failed to start worker for ${issue.name}: ${error instanceof Error ? error.message : String(error)}`);
|
|
255
|
-
});
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
catch (error) {
|
|
259
|
-
logError(`Failed to process issues: ${error instanceof Error ? error.message : String(error)}`);
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
/**
|
|
263
|
-
* Start a child process worker for a single issue.
|
|
264
|
-
* Handles: atomic claim, GitHub config lookup, repo cloning, then forks
|
|
265
|
-
* the worker.
|
|
266
|
-
*
|
|
267
|
-
* The candidate `issue` here comes from the listed ready_for_ai pool but is
|
|
268
|
-
* advisory — between list time and claim time another agent (or another
|
|
269
|
-
* process) may have grabbed it. We re-claim atomically per product. The
|
|
270
|
-
* RPC returns whichever ready issue is next in that product (most often
|
|
271
|
-
* the same one we listed, but not guaranteed); we operate on what claim
|
|
272
|
-
* actually returns. If claim returns null, someone else won the race —
|
|
273
|
-
* skip this slot for this cycle.
|
|
274
|
-
*/
|
|
275
|
-
async startIssueWorker(candidate) {
|
|
276
|
-
// In-process dedup runs BEFORE the claim. If we already have a worker
|
|
277
|
-
// for the listed candidate, skipping here avoids successfully claiming
|
|
278
|
-
// an issue we'd then refuse to start — which would leave it stuck at
|
|
279
|
-
// assigned_to_ai with no worker (an orphan, since the claim has no
|
|
280
|
-
// release path). Cross-process races are still handled by the DB.
|
|
281
|
-
if (this.activeWorkers.has(candidate.id)) {
|
|
282
|
-
return;
|
|
283
|
-
}
|
|
284
|
-
// Atomic claim transitions ready_for_ai → assigned_to_ai inside the RPC
|
|
285
|
-
// (FOR UPDATE SKIP LOCKED), so concurrent workers never share the same
|
|
286
|
-
// issue. Scoped to the candidate's product so a race within one product
|
|
287
|
-
// resolves locally instead of pulling work from elsewhere.
|
|
288
|
-
const claimResult = await claimNextIssue(candidate.product_id, this.options.verbose);
|
|
289
|
-
if (!claimResult) {
|
|
290
|
-
if (this.options.verbose) {
|
|
291
|
-
logInfo(`No claimable issue in product ${candidate.product_name ?? candidate.product_id} (raced or no longer ready)`);
|
|
292
|
-
}
|
|
293
|
-
return;
|
|
294
|
-
}
|
|
295
|
-
const issue = {
|
|
296
|
-
...claimResult,
|
|
297
|
-
product_name: candidate.product_name,
|
|
298
|
-
};
|
|
299
|
-
const issueId = issue.id;
|
|
300
|
-
// Update state to processing
|
|
301
|
-
this.processedIssues = updateIssueState(this.processedIssues, issueId, (currentState) => createProcessingState(issueId, currentState));
|
|
302
|
-
logInfo(`Processing issue: ${issue.name}`);
|
|
303
|
-
if (issue.product_name) {
|
|
304
|
-
logInfo(` Product: ${issue.product_name}`);
|
|
305
|
-
}
|
|
306
|
-
// Send heartbeat with current issue info
|
|
307
|
-
await sendHeartbeat(issueId, issue.name);
|
|
308
|
-
try {
|
|
309
|
-
// Step 1: Get GitHub config for this issue
|
|
310
|
-
const githubConfig = await getGitHubConfig(issueId, this.options.verbose);
|
|
311
|
-
if (!githubConfig.configured ||
|
|
312
|
-
!githubConfig.token ||
|
|
313
|
-
!githubConfig.owner ||
|
|
314
|
-
!githubConfig.repo) {
|
|
315
|
-
logWarning(`GitHub not configured for issue: ${issue.name}. ${githubConfig.message || ''}`);
|
|
316
|
-
this.processedIssues = updateIssueState(this.processedIssues, issueId, (currentState) => createFailedState(issueId, currentState));
|
|
317
|
-
await this.releaseClaim(issueId, issue.name);
|
|
318
|
-
return;
|
|
319
|
-
}
|
|
320
|
-
// Step 2: Clone or reuse repo
|
|
321
|
-
const { repoPath, freshClone } = cloneIssueRepo(this.options.workspaceRoot, issueId, githubConfig.owner, githubConfig.repo, githubConfig.token);
|
|
322
|
-
logInfo(`Repo: ${repoPath} (${freshClone ? 'fresh clone' : 'reused'})`);
|
|
323
|
-
// Step 3: Fork a worker process to run the issue workflow
|
|
324
|
-
// The worker runs with cwd set to the repo path, so each issue
|
|
325
|
-
// has its own isolated working directory.
|
|
326
|
-
const worker = fork(WORKER_SCRIPT, [], {
|
|
327
|
-
cwd: repoPath,
|
|
328
|
-
stdio: ['ignore', 'pipe', 'pipe', 'ipc'],
|
|
329
|
-
env: {
|
|
330
|
-
...process.env,
|
|
331
|
-
EDSGER_ISSUE_ID: issueId,
|
|
332
|
-
},
|
|
333
|
-
});
|
|
334
|
-
// Track the active worker
|
|
335
|
-
const activeWorker = {
|
|
336
|
-
process: worker,
|
|
337
|
-
issueId,
|
|
338
|
-
issueName: issue.name,
|
|
339
|
-
startedAt: new Date(),
|
|
340
|
-
};
|
|
341
|
-
this.activeWorkers.set(issueId, activeWorker);
|
|
342
|
-
logInfo(`Worker spawned for issue: ${issue.name} (pid: ${worker.pid})`);
|
|
343
|
-
// Forward worker stdout/stderr to parent logs
|
|
344
|
-
worker.stdout?.on('data', (data) => {
|
|
345
|
-
const lines = data.toString().trim().split('\n');
|
|
346
|
-
for (const line of lines) {
|
|
347
|
-
if (line) {
|
|
348
|
-
logInfo(` [${issue.name}] ${line}`);
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
});
|
|
352
|
-
worker.stderr?.on('data', (data) => {
|
|
353
|
-
const lines = data.toString().trim().split('\n');
|
|
354
|
-
for (const line of lines) {
|
|
355
|
-
if (line) {
|
|
356
|
-
logError(` [${issue.name}] ${line}`);
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
});
|
|
360
|
-
// Track whether we received a result message (to detect crashes)
|
|
361
|
-
let resultReceived = false;
|
|
362
|
-
// Handle worker IPC messages
|
|
363
|
-
worker.on('message', (msg) => {
|
|
364
|
-
if (msg.type === 'log') {
|
|
365
|
-
const prefix = `[${issue.name}]`;
|
|
366
|
-
switch (msg.level) {
|
|
367
|
-
case 'info':
|
|
368
|
-
logInfo(` ${prefix} ${msg.message}`);
|
|
369
|
-
break;
|
|
370
|
-
case 'warning':
|
|
371
|
-
logWarning(` ${prefix} ${msg.message}`);
|
|
372
|
-
break;
|
|
373
|
-
case 'error':
|
|
374
|
-
logError(` ${prefix} ${msg.message}`);
|
|
375
|
-
break;
|
|
376
|
-
case 'success':
|
|
377
|
-
logSuccess(` ${prefix} ${msg.message}`);
|
|
378
|
-
break;
|
|
379
|
-
case undefined:
|
|
380
|
-
default:
|
|
381
|
-
break;
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
|
-
else if (msg.type === 'result') {
|
|
385
|
-
resultReceived = true;
|
|
386
|
-
this.handleWorkerResult(issueId, issue.name, msg.success ?? false, msg.error);
|
|
387
|
-
}
|
|
388
|
-
});
|
|
389
|
-
// Handle worker exit (crash, killed, etc.)
|
|
390
|
-
worker.on('exit', (code) => {
|
|
391
|
-
// Clear timeout timer
|
|
392
|
-
const w = this.activeWorkers.get(issueId);
|
|
393
|
-
if (w?.timeoutTimer) {
|
|
394
|
-
clearTimeout(w.timeoutTimer);
|
|
395
|
-
}
|
|
396
|
-
this.activeWorkers.delete(issueId);
|
|
397
|
-
// If the worker exited without sending a result message, treat as failure
|
|
398
|
-
if (!resultReceived) {
|
|
399
|
-
if (code !== 0) {
|
|
400
|
-
logError(`Worker for ${issue.name} exited with code ${code}`);
|
|
401
|
-
}
|
|
402
|
-
this.handleWorkerResult(issueId, issue.name, false, `Worker exited with code ${code}`);
|
|
403
|
-
}
|
|
404
|
-
});
|
|
405
|
-
// Set up worker timeout
|
|
406
|
-
const { workerTimeout } = this.config.workflow;
|
|
407
|
-
activeWorker.timeoutTimer = setTimeout(() => {
|
|
408
|
-
logError(`Worker for ${issue.name} timed out after ${Math.round(workerTimeout / 1000)}s, killing...`);
|
|
409
|
-
try {
|
|
410
|
-
worker.kill('SIGTERM');
|
|
411
|
-
// Force kill after 10s if SIGTERM didn't work
|
|
412
|
-
setTimeout(() => {
|
|
413
|
-
try {
|
|
414
|
-
worker.kill('SIGKILL');
|
|
415
|
-
}
|
|
416
|
-
catch {
|
|
417
|
-
/* ignore */
|
|
418
|
-
}
|
|
419
|
-
}, 10_000);
|
|
420
|
-
}
|
|
421
|
-
catch {
|
|
422
|
-
// Worker may already be dead
|
|
423
|
-
}
|
|
424
|
-
const err = new WorkerTimeoutError(issueId, workerTimeout);
|
|
425
|
-
this.handleWorkerResult(issueId, issue.name, false, err.message);
|
|
426
|
-
}, workerTimeout);
|
|
427
|
-
// Send start message to worker
|
|
428
|
-
worker.send({
|
|
429
|
-
type: 'start',
|
|
430
|
-
issueId,
|
|
431
|
-
verbose: this.options.verbose,
|
|
432
|
-
config: this.config,
|
|
433
|
-
});
|
|
434
|
-
}
|
|
435
|
-
catch (error) {
|
|
436
|
-
this.activeWorkers.delete(issueId);
|
|
437
|
-
this.processedIssues = updateIssueState(this.processedIssues, issueId, (currentState) => createFailedState(issueId, currentState));
|
|
438
|
-
logError(`Issue error: ${issue.name} - ${error instanceof Error ? error.message : String(error)}`);
|
|
439
|
-
await this.releaseClaim(issueId, issue.name);
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
/**
|
|
443
|
-
* After a successful claim moved the issue ready_for_ai → assigned_to_ai,
|
|
444
|
-
* any post-claim setup failure (GitHub config, clone, fork) leaves the
|
|
445
|
-
* issue stuck at assigned_to_ai with no worker — an orphan that the user
|
|
446
|
-
* can't fix from the UI. Push it forward to 'failed' so it shows up in
|
|
447
|
-
* the failed bucket and can be inspected / re-set to ready_for_ai by a
|
|
448
|
-
* human.
|
|
449
|
-
*
|
|
450
|
-
* Status guard: only force-progress if the issue is still at
|
|
451
|
-
* assigned_to_ai or in_progress. A worker may have already advanced the
|
|
452
|
-
* status to shipped / failed via a separate code path before we got the
|
|
453
|
-
* non-success IPC signal; clobbering those would lose real outcome data.
|
|
454
|
-
* STATUS_PROGRESSION_ORDER classifies shipped→failed as a forward move
|
|
455
|
-
* (so updateIssueStatus wouldn't reject it), which is why this guard
|
|
456
|
-
* lives here rather than at the RPC layer.
|
|
457
|
-
*
|
|
458
|
-
* Errors are swallowed: if the status fetch or update fails the issue
|
|
459
|
-
* stays orphaned but logging is the most we can do here.
|
|
460
|
-
*/
|
|
461
|
-
async releaseClaim(issueId, issueName) {
|
|
462
|
-
try {
|
|
463
|
-
const current = await getIssue(issueId, false);
|
|
464
|
-
if (current.status !== 'assigned_to_ai' &&
|
|
465
|
-
current.status !== 'in_progress') {
|
|
466
|
-
return;
|
|
467
|
-
}
|
|
468
|
-
await callMcpEndpoint('issues/update', {
|
|
469
|
-
issue_id: issueId,
|
|
470
|
-
status: 'failed',
|
|
471
|
-
});
|
|
472
|
-
}
|
|
473
|
-
catch (releaseError) {
|
|
474
|
-
logWarning(`Failed to release claim on ${issueName} (${issueId}); issue may be orphaned at assigned_to_ai: ${releaseError instanceof Error ? releaseError.message : String(releaseError)}`);
|
|
475
|
-
}
|
|
476
|
-
}
|
|
477
|
-
handleWorkerResult(issueId, issueName, success, error) {
|
|
478
|
-
if (success) {
|
|
479
|
-
this.processedIssues = updateIssueState(this.processedIssues, issueId, (currentState) => createCompletedState(issueId, currentState));
|
|
480
|
-
logSuccess(`Issue completed: ${issueName}`);
|
|
481
|
-
// Narrate completion into the issue chat (served by `edsger chat-serve`).
|
|
482
|
-
this.narrateToIssueChat(issueId, 'All workflow phases completed.', {
|
|
483
|
-
status: 'issue_done',
|
|
484
|
-
});
|
|
485
|
-
// Clean up the per-issue clone now that the workflow is finished.
|
|
486
|
-
// Failures intentionally leave the workspace so the user (or a retry)
|
|
487
|
-
// can inspect the partial state.
|
|
488
|
-
cleanupIssueRepo(getIssueRepoPath(this.options.workspaceRoot, issueId));
|
|
489
|
-
}
|
|
490
|
-
else {
|
|
491
|
-
this.processedIssues = updateIssueState(this.processedIssues, issueId, (currentState) => createFailedState(issueId, currentState));
|
|
492
|
-
logError(`Issue failed: ${issueName}${error ? ` - ${error}` : ''}`);
|
|
493
|
-
// No releaseClaim here: this path runs after the worker reported a
|
|
494
|
-
// non-success result, but the worker may still have been mid-way
|
|
495
|
-
// through writing its own status (e.g. setting 'shipped' or 'failed'
|
|
496
|
-
// before exiting). A read-then-write release would race with the
|
|
497
|
-
// worker's final DB write. Worker code is responsible for advancing
|
|
498
|
-
// the lifecycle status before it exits; a worker that crashes
|
|
499
|
-
// without doing so leaves the issue at assigned_to_ai, which is a
|
|
500
|
-
// separate, pre-existing orphan class outside the scope of the
|
|
501
|
-
// pre-fork cleanup that releaseClaim handles.
|
|
502
|
-
// Only narrate on first failure to avoid flooding with duplicate messages.
|
|
503
|
-
const failedState = this.processedIssues.get(issueId);
|
|
504
|
-
if (failedState && failedState.retryCount <= 1) {
|
|
505
|
-
this.narrateToIssueChat(issueId, `Phase "workflow" failed: ${error || 'Unknown error'}`, { phase: 'workflow', status: 'failed', error: error || 'Unknown error' });
|
|
506
|
-
}
|
|
507
|
-
}
|
|
508
|
-
// Clear heartbeat issue info
|
|
509
|
-
sendHeartbeat().catch(() => {
|
|
510
|
-
/* noop */
|
|
511
|
-
});
|
|
512
|
-
}
|
|
513
|
-
getStats() {
|
|
514
|
-
return calculateStats(this.processedIssues, this.isRunning);
|
|
515
|
-
}
|
|
516
|
-
getActiveWorkerCount() {
|
|
517
|
-
return this.activeWorkers.size;
|
|
518
|
-
}
|
|
519
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { type CliOptions } from '../../types/index.js';
|
|
2
|
-
/**
|
|
3
|
-
* Run AI-powered log analysis for a product.
|
|
4
|
-
* Analyzes pending user logs (inactive >1 hour) and creates
|
|
5
|
-
* product feedback for any issues or improvements found.
|
|
6
|
-
*/
|
|
7
|
-
export declare const runAnalyzeLogs: (options: CliOptions) => Promise<void>;
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { analyzeLogs } from '../../phases/analyze-logs/index.js';
|
|
2
|
-
import { logError, logInfo, logSuccess } from '../../utils/logger.js';
|
|
3
|
-
/**
|
|
4
|
-
* Run AI-powered log analysis for a product.
|
|
5
|
-
* Analyzes pending user logs (inactive >1 hour) and creates
|
|
6
|
-
* product feedback for any issues or improvements found.
|
|
7
|
-
*/
|
|
8
|
-
export const runAnalyzeLogs = async (options) => {
|
|
9
|
-
const productId = options.analyzeLogs;
|
|
10
|
-
if (!productId) {
|
|
11
|
-
throw new Error('Product ID is required for log analysis');
|
|
12
|
-
}
|
|
13
|
-
logInfo(`Starting log analysis for product: ${productId}`);
|
|
14
|
-
try {
|
|
15
|
-
const result = await analyzeLogs({
|
|
16
|
-
productId,
|
|
17
|
-
verbose: options.verbose,
|
|
18
|
-
});
|
|
19
|
-
if (result.status === 'success') {
|
|
20
|
-
logSuccess('Log analysis completed!');
|
|
21
|
-
logInfo(` Groups processed: ${result.groupsProcessed}`);
|
|
22
|
-
logInfo(` Feedbacks created: ${result.feedbacksCreated}`);
|
|
23
|
-
logInfo(` Logs analyzed: ${result.logsAnalyzed}`);
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
logError(`Log analysis failed: ${result.summary}`);
|
|
27
|
-
process.exit(1);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
catch (error) {
|
|
31
|
-
logError(`Log analysis failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
32
|
-
process.exit(1);
|
|
33
|
-
}
|
|
34
|
-
};
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { type CliOptions } from '../../types/index.js';
|
|
2
|
-
/**
|
|
3
|
-
* Run AI-powered app store asset generation for a product.
|
|
4
|
-
* Generates professional screenshots and optimized listing content.
|
|
5
|
-
*/
|
|
6
|
-
export declare const runAppStoreGeneration: (options: CliOptions & {
|
|
7
|
-
appStoreProductId: string;
|
|
8
|
-
store?: string;
|
|
9
|
-
locale?: string;
|
|
10
|
-
screenshotsOnly?: boolean;
|
|
11
|
-
listingsOnly?: boolean;
|
|
12
|
-
}) => Promise<void>;
|