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,926 +0,0 @@
|
|
|
1
|
-
/* eslint-disable max-lines -- orchestration module with inline prompt generation and agent execution */
|
|
2
|
-
import { query } from '@anthropic-ai/claude-agent-sdk';
|
|
3
|
-
import { getGitHubConfig } from '../../api/github.js';
|
|
4
|
-
import { getIssue } from '../../api/issues/index.js';
|
|
5
|
-
import { DEFAULT_MODEL } from '../../constants.js';
|
|
6
|
-
import { logIssuePhaseEvent } from '../../services/audit-logs.js';
|
|
7
|
-
import { createBranches, getBaseBranchInfo, getBranches, getCurrentBranch, updateBranch, } from '../../services/branches.js';
|
|
8
|
-
import { formatChecklistsForContext, } from '../../services/checklist.js';
|
|
9
|
-
import { extractChecklistItems, runPhaseCoaching, } from '../../services/coaching/index.js';
|
|
10
|
-
import { formatFeedbacksForContext, getFeedbacksForPhase, } from '../../services/feedbacks.js';
|
|
11
|
-
import { getDefaultBranchForIssue } from '../../services/repo-config.js';
|
|
12
|
-
import { prepareCustomBranchGitEnvironmentAsync, syncFeatBranchWithMain, } from '../../utils/git-branch-manager.js';
|
|
13
|
-
import { gitPush } from '../../utils/git-push.js';
|
|
14
|
-
import { extractJsonFromResponse } from '../../utils/json-extractor.js';
|
|
15
|
-
import { logDebug, logError, logInfo } from '../../utils/logger.js';
|
|
16
|
-
import { performVerificationCycle } from '../code-implementation-verification/index.js';
|
|
17
|
-
import { createBranchPullRequest, } from './branch-pr-creator.js';
|
|
18
|
-
import { fetchCodeImplementationContext, formatContextForPrompt, } from './context.js';
|
|
19
|
-
import { buildImplementationResult, buildNoResultsError, buildVerificationFailureResult, } from './outcome.js';
|
|
20
|
-
/**
|
|
21
|
-
* Truncate text to a maximum length, adding ellipsis if truncated
|
|
22
|
-
*/
|
|
23
|
-
function truncateText(text, maxLength) {
|
|
24
|
-
if (text.length <= maxLength) {
|
|
25
|
-
return text;
|
|
26
|
-
}
|
|
27
|
-
return `${text.slice(0, maxLength - 3)}...`;
|
|
28
|
-
}
|
|
29
|
-
function userMessage(content) {
|
|
30
|
-
return {
|
|
31
|
-
type: 'user',
|
|
32
|
-
message: { role: 'user', content },
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
async function* prompt(implementationPrompt) {
|
|
36
|
-
yield userMessage(implementationPrompt);
|
|
37
|
-
await new Promise((res) => {
|
|
38
|
-
setTimeout(res, 10000);
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
42
|
-
function processAssistantContent(content, verbose) {
|
|
43
|
-
let text = '';
|
|
44
|
-
for (const item of content) {
|
|
45
|
-
if (item.type === 'text') {
|
|
46
|
-
text += `${item.text}\n`;
|
|
47
|
-
logDebug(`🤖 ${item.text}`, verbose);
|
|
48
|
-
}
|
|
49
|
-
else if (item.type === 'tool_use') {
|
|
50
|
-
logDebug(`🔧 ${item.name}: ${item.input.description || 'Running...'}`, verbose);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
return text;
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Log debug details about the response text for checklist analysis
|
|
57
|
-
*/
|
|
58
|
-
function logResponseDebugInfo(responseText, hasMessageResult, hasAssistantResponse, verbose) {
|
|
59
|
-
logDebug('Code Implementation Response Analysis', verbose);
|
|
60
|
-
logDebug(`message.result exists: ${hasMessageResult}`, verbose);
|
|
61
|
-
logDebug(`lastAssistantResponse exists: ${hasAssistantResponse}`, verbose);
|
|
62
|
-
logDebug(`responseText length: ${responseText.length}`, verbose);
|
|
63
|
-
logDebug(`responseText first 200 chars: ${JSON.stringify(responseText.substring(0, 200))}`, verbose);
|
|
64
|
-
logDebug(`responseText last 200 chars: ${JSON.stringify(responseText.substring(responseText.length - 200))}`, verbose);
|
|
65
|
-
logDebug(`Contains \`\`\`json: ${responseText.includes('```json')}`, verbose);
|
|
66
|
-
logDebug(`Contains implementation_result: ${responseText.includes('"implementation_result"')}`, verbose);
|
|
67
|
-
logDebug('Checklist Content in Response', verbose);
|
|
68
|
-
logDebug(`Contains "checklist": ${responseText.toLowerCase().includes('checklist')}`, verbose);
|
|
69
|
-
logDebug(`Contains "checklist_item_results": ${responseText.includes('checklist_item_results')}`, verbose);
|
|
70
|
-
logDebug(`Contains checklist_item_id: ${responseText.includes('checklist_item_id')}`, verbose);
|
|
71
|
-
logDebug(`Contains is_passed: ${responseText.includes('is_passed')}`, verbose);
|
|
72
|
-
const checklistMatches = responseText.match(/checklist/gi) || [];
|
|
73
|
-
const checklistItemMatches = responseText.match(/checklist_item/gi) || [];
|
|
74
|
-
logDebug(`Total "checklist" mentions: ${checklistMatches.length}`, verbose);
|
|
75
|
-
logDebug(`Total "checklist_item" mentions: ${checklistItemMatches.length}`, verbose);
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Log debug details about checklist items in the implementation result
|
|
79
|
-
*/
|
|
80
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
81
|
-
function logChecklistDebugInfo(implResult, verbose) {
|
|
82
|
-
logDebug(`Keys in implementation_result: ${Object.keys(implResult)}`, verbose);
|
|
83
|
-
logDebug(`Has checklist_item_results field: ${'checklist_item_results' in implResult}`, verbose);
|
|
84
|
-
logDebug(`checklist_item_results value type: ${typeof implResult.checklist_item_results}`, verbose);
|
|
85
|
-
logDebug(`checklist_item_results is array: ${Array.isArray(implResult.checklist_item_results)}`, verbose);
|
|
86
|
-
if (implResult.checklist_item_results) {
|
|
87
|
-
logDebug(`checklist_item_results length: ${implResult.checklist_item_results.length}`, verbose);
|
|
88
|
-
if (implResult.checklist_item_results.length > 0) {
|
|
89
|
-
logDebug(`First checklist item keys: ${Object.keys(implResult.checklist_item_results[0])}`, verbose);
|
|
90
|
-
logDebug(`First checklist item sample: ${JSON.stringify(implResult.checklist_item_results[0], null, 2)}`, verbose);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
else {
|
|
94
|
-
logDebug('checklist_item_results is null/undefined/empty', verbose);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Parse and extract the implementation result from a successful query response
|
|
99
|
-
*/
|
|
100
|
-
function parseSuccessResponse(responseText, hasMessageResult, hasAssistantResponse, issueId, verbose
|
|
101
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
102
|
-
) {
|
|
103
|
-
logResponseDebugInfo(responseText, hasMessageResult, hasAssistantResponse, verbose);
|
|
104
|
-
try {
|
|
105
|
-
const jsonBlockMatch = responseText.match(/```json\s*\n([\s\S]*?)\n\s*```/);
|
|
106
|
-
logDebug(`jsonBlockMatch found: ${!!jsonBlockMatch}`, verbose);
|
|
107
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
108
|
-
let jsonResult = null;
|
|
109
|
-
if (jsonBlockMatch) {
|
|
110
|
-
logDebug(`Matched JSON length: ${jsonBlockMatch[1].length}`, verbose);
|
|
111
|
-
logDebug(`Matched JSON first 100 chars: ${JSON.stringify(jsonBlockMatch[1].substring(0, 100))}`, verbose);
|
|
112
|
-
jsonResult = JSON.parse(jsonBlockMatch[1]);
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
logDebug('Trying direct JSON parse', verbose);
|
|
116
|
-
jsonResult = JSON.parse(responseText);
|
|
117
|
-
}
|
|
118
|
-
logDebug(`jsonResult exists: ${!!jsonResult}`, verbose);
|
|
119
|
-
logDebug(`jsonResult has implementation_result: ${!!(jsonResult && jsonResult.implementation_result)}`, verbose);
|
|
120
|
-
if (jsonResult && jsonResult.implementation_result) {
|
|
121
|
-
logChecklistDebugInfo(jsonResult.implementation_result, verbose);
|
|
122
|
-
logDebug('Successfully extracted implementation_result', verbose);
|
|
123
|
-
return jsonResult.implementation_result;
|
|
124
|
-
}
|
|
125
|
-
logDebug('Invalid JSON structure - missing implementation_result', verbose);
|
|
126
|
-
throw new Error('Invalid JSON structure');
|
|
127
|
-
}
|
|
128
|
-
catch (error) {
|
|
129
|
-
const nonSyntaxErrorType = error instanceof Error ? error.constructor.name : 'Unknown';
|
|
130
|
-
const errorType = error instanceof SyntaxError ? 'SyntaxError' : nonSyntaxErrorType;
|
|
131
|
-
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
132
|
-
logDebug(`JSON Parsing Failed - ${errorType}: ${errorMsg}`, verbose);
|
|
133
|
-
logError(`Failed to parse structured implementation result: ${error}`);
|
|
134
|
-
logDebug('Using Fallback Parsing', verbose);
|
|
135
|
-
const parsedResult = parseImplementationResponse(responseText, issueId, verbose);
|
|
136
|
-
logDebug(`Fallback parsed result: branchName=${parsedResult.branchName}, filesModified=${parsedResult.filesModified?.length || 0}, hasSummary=${!!parsedResult.summary}, commitHash=${parsedResult.commitHash}`, verbose);
|
|
137
|
-
return {
|
|
138
|
-
branch_name: parsedResult.branchName,
|
|
139
|
-
files_modified: parsedResult.filesModified,
|
|
140
|
-
commit_hash: parsedResult.commitHash,
|
|
141
|
-
summary: parsedResult.summary || 'Implementation completed',
|
|
142
|
-
tests_passed: true,
|
|
143
|
-
pre_commit_passed: true,
|
|
144
|
-
checklist_item_results: parsedResult.checklist_item_results || [],
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Process the query result message and extract implementation result
|
|
150
|
-
*/
|
|
151
|
-
function processQueryResult(
|
|
152
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
153
|
-
message, lastAssistantResponse, issueId, verbose
|
|
154
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
155
|
-
) {
|
|
156
|
-
if (message.subtype === 'success') {
|
|
157
|
-
logInfo('\n💻 Code implementation completed, parsing results...');
|
|
158
|
-
const responseText = message.result || lastAssistantResponse;
|
|
159
|
-
return parseSuccessResponse(responseText, !!message.result, !!lastAssistantResponse, issueId, verbose);
|
|
160
|
-
}
|
|
161
|
-
logError(`\n⚠️ Code implementation incomplete: ${message.subtype}`);
|
|
162
|
-
if (message.subtype === 'error_max_turns') {
|
|
163
|
-
logError('💡 Try breaking down the issue into smaller tasks');
|
|
164
|
-
}
|
|
165
|
-
if (lastAssistantResponse) {
|
|
166
|
-
logDebug(`Fallback for incomplete result, subtype: ${message.subtype}`, verbose);
|
|
167
|
-
const fallbackJson = extractJsonFromResponse(lastAssistantResponse, '"implementation_result"');
|
|
168
|
-
if (fallbackJson?.implementation_result) {
|
|
169
|
-
return fallbackJson.implementation_result;
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
return null;
|
|
173
|
-
}
|
|
174
|
-
export const implementIssueCode = async (options, config, checklistContext) => {
|
|
175
|
-
const { issueId, verbose } = options;
|
|
176
|
-
// Resolve the repo's default branch (handles forks where default is master, etc.).
|
|
177
|
-
// Caller may override via options.baseBranch (e.g. branch-chained PR base).
|
|
178
|
-
const baseBranch = options.baseBranch ?? (await getDefaultBranchForIssue(issueId, verbose));
|
|
179
|
-
if (verbose) {
|
|
180
|
-
logInfo(`Starting code implementation for issue ID: ${issueId}`);
|
|
181
|
-
logInfo(`Base branch: ${baseBranch}`);
|
|
182
|
-
}
|
|
183
|
-
// Check for issue branches - use current branch if available
|
|
184
|
-
// If no branches exist (no branch planning), create a default branch record
|
|
185
|
-
let currentBranch = null;
|
|
186
|
-
try {
|
|
187
|
-
currentBranch = await getCurrentBranch({ issueId, verbose });
|
|
188
|
-
if (currentBranch && verbose) {
|
|
189
|
-
logInfo(`📋 Using issue branch: ${currentBranch.name}`);
|
|
190
|
-
logInfo(` Branch name: ${currentBranch.branch_name || 'To be created'}`);
|
|
191
|
-
logInfo(` Status: ${currentBranch.status}`);
|
|
192
|
-
logInfo(` Description: ${currentBranch.description || 'No description'}`);
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
catch (_error) {
|
|
196
|
-
// Issue branches not available or error - continue with default behavior
|
|
197
|
-
if (verbose) {
|
|
198
|
-
logInfo('No issue branches found, using default branch naming');
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
// If no branch exists (no branch planning phase), create a default branch record
|
|
202
|
-
if (!currentBranch) {
|
|
203
|
-
try {
|
|
204
|
-
if (verbose) {
|
|
205
|
-
logInfo(`📋 Creating default branch record for issue: ${issueId}`);
|
|
206
|
-
}
|
|
207
|
-
// Fetch issue info to get the issue name for branch naming
|
|
208
|
-
let issueName = 'Issue Implementation';
|
|
209
|
-
try {
|
|
210
|
-
const issueInfo = await getIssue(issueId, verbose);
|
|
211
|
-
if (issueInfo?.name) {
|
|
212
|
-
// Truncate issue name for branch display (max 100 chars)
|
|
213
|
-
issueName = truncateText(issueInfo.name, 100);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
catch (error) {
|
|
217
|
-
if (verbose) {
|
|
218
|
-
logInfo(`Could not fetch issue name, using default: ${error}`);
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
const defaultBranchName = `dev/${issueId}`;
|
|
222
|
-
const createdBranches = await createBranches({ issueId, verbose }, [
|
|
223
|
-
{
|
|
224
|
-
name: issueName,
|
|
225
|
-
description: `Implementation branch for: ${issueName}`,
|
|
226
|
-
branch_name: defaultBranchName,
|
|
227
|
-
status: 'pending',
|
|
228
|
-
},
|
|
229
|
-
]);
|
|
230
|
-
if (createdBranches.length > 0) {
|
|
231
|
-
currentBranch = createdBranches[0];
|
|
232
|
-
if (verbose) {
|
|
233
|
-
logInfo(`✅ Created default branch: ${currentBranch.branch_name}`);
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
catch (error) {
|
|
238
|
-
if (verbose) {
|
|
239
|
-
logError(`Failed to create default branch record: ${error}`);
|
|
240
|
-
logInfo('Continuing without branch record...');
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
// Update issue branch status to in_progress if we have one
|
|
245
|
-
if (currentBranch && currentBranch.status === 'pending') {
|
|
246
|
-
try {
|
|
247
|
-
await updateBranch(currentBranch.id, { status: 'in_progress' }, verbose);
|
|
248
|
-
if (verbose) {
|
|
249
|
-
logInfo(`✅ Updated issue branch status to in_progress`);
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
catch (error) {
|
|
253
|
-
if (verbose) {
|
|
254
|
-
logError(`Failed to update issue branch status: ${error}`);
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
// Determine the actual base branch for branch chaining
|
|
259
|
-
// If the current issue branch depends on another branch, use that as the base
|
|
260
|
-
let actualBaseBranch = baseBranch;
|
|
261
|
-
let rebaseTargetBranch;
|
|
262
|
-
let originalBaseBranch;
|
|
263
|
-
let baseBranchCompleted = false;
|
|
264
|
-
if (currentBranch && currentBranch.base_branch_id) {
|
|
265
|
-
try {
|
|
266
|
-
const allBranches = await getBranches({
|
|
267
|
-
issueId,
|
|
268
|
-
verbose: false,
|
|
269
|
-
});
|
|
270
|
-
const baseBranchInfo = getBaseBranchInfo(currentBranch, allBranches, baseBranch);
|
|
271
|
-
actualBaseBranch = baseBranchInfo.baseBranch;
|
|
272
|
-
({ rebaseTargetBranch, originalBaseBranch } = baseBranchInfo);
|
|
273
|
-
baseBranchCompleted = baseBranchInfo.baseBranchCompleted || false;
|
|
274
|
-
if (verbose) {
|
|
275
|
-
logInfo(`🔗 Branch chaining detected:`);
|
|
276
|
-
logInfo(` Current branch: ${currentBranch.name}`);
|
|
277
|
-
logInfo(` Base branch (for new branches): ${actualBaseBranch}`);
|
|
278
|
-
if (rebaseTargetBranch) {
|
|
279
|
-
logInfo(` Rebase target: ${rebaseTargetBranch}`);
|
|
280
|
-
}
|
|
281
|
-
if (originalBaseBranch) {
|
|
282
|
-
logInfo(` Original base branch: ${originalBaseBranch} (for --onto rebase)`);
|
|
283
|
-
}
|
|
284
|
-
if (baseBranchInfo.baseBranchMerged) {
|
|
285
|
-
logInfo(` Parent branch merged: yes`);
|
|
286
|
-
}
|
|
287
|
-
else {
|
|
288
|
-
logInfo(` Parent branch merged: no (using parent branch)`);
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
catch (error) {
|
|
293
|
-
if (verbose) {
|
|
294
|
-
logError(`Failed to compute base branch info: ${error}`);
|
|
295
|
-
logInfo(` Falling back to default base branch: ${baseBranch}`);
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
// Prepare git environment: switch to issue branch and rebase with base
|
|
300
|
-
// Branch names are stored as dev/... (development branch)
|
|
301
|
-
// PR will be created from dev/... to feat/... after implementation
|
|
302
|
-
const devBranchName = currentBranch?.branch_name || `dev/${issueId}`;
|
|
303
|
-
if (verbose && currentBranch) {
|
|
304
|
-
logInfo(`🔄 Using dev branch for development: ${devBranchName}`);
|
|
305
|
-
}
|
|
306
|
-
// Sync feat branch to main before rebase to ensure it's up to date
|
|
307
|
-
// This prevents the PR (dev → feat) from showing extra commits
|
|
308
|
-
let featSyncedToMain = false;
|
|
309
|
-
let githubTokenForPush;
|
|
310
|
-
if (devBranchName.startsWith('dev/')) {
|
|
311
|
-
try {
|
|
312
|
-
const githubConfig = await getGitHubConfig(issueId, verbose);
|
|
313
|
-
if (githubConfig.configured &&
|
|
314
|
-
githubConfig.token &&
|
|
315
|
-
githubConfig.owner &&
|
|
316
|
-
githubConfig.repo) {
|
|
317
|
-
githubTokenForPush = githubConfig.token;
|
|
318
|
-
const { devBranchToFeatBranch } = await import('./branch-pr-creator.js');
|
|
319
|
-
const featBranchName = devBranchToFeatBranch(devBranchName);
|
|
320
|
-
if (verbose) {
|
|
321
|
-
logInfo(`📥 Syncing ${featBranchName} with main before rebase...`);
|
|
322
|
-
}
|
|
323
|
-
featSyncedToMain = await syncFeatBranchWithMain({
|
|
324
|
-
featBranch: featBranchName,
|
|
325
|
-
githubToken: githubConfig.token,
|
|
326
|
-
owner: githubConfig.owner,
|
|
327
|
-
repo: githubConfig.repo,
|
|
328
|
-
baseBranch,
|
|
329
|
-
verbose,
|
|
330
|
-
});
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
catch (error) {
|
|
334
|
-
// Don't fail the phase if sync fails
|
|
335
|
-
if (verbose) {
|
|
336
|
-
logInfo(`⚠️ Could not sync feat branch: ${error instanceof Error ? error.message : String(error)}`);
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
// Use async version to support --onto rebase for branch chaining
|
|
341
|
-
// This correctly handles cases where base branch was squash-merged
|
|
342
|
-
const { cleanup: cleanupGit } = await prepareCustomBranchGitEnvironmentAsync({
|
|
343
|
-
issueBranch: devBranchName,
|
|
344
|
-
baseBranch: actualBaseBranch,
|
|
345
|
-
rebaseTargetBranch, // For --onto rebase target (e.g., main) when base branch is merged
|
|
346
|
-
originalBaseBranch, // For --onto rebase starting point when base branch was squash-merged
|
|
347
|
-
verbose,
|
|
348
|
-
resolveConflicts: true,
|
|
349
|
-
conflictResolverConfig: {
|
|
350
|
-
model: DEFAULT_MODEL,
|
|
351
|
-
},
|
|
352
|
-
forcePushAfterRebase: featSyncedToMain, // Trigger GitHub to recalculate PR diff
|
|
353
|
-
baseBranchCompleted, // Tell conflict resolver to use --theirs for all conflicts
|
|
354
|
-
githubToken: githubTokenForPush,
|
|
355
|
-
});
|
|
356
|
-
try {
|
|
357
|
-
// Fetch all required context information via MCP endpoints
|
|
358
|
-
if (verbose) {
|
|
359
|
-
logInfo('Fetching code implementation context via MCP endpoints...');
|
|
360
|
-
}
|
|
361
|
-
const context = await fetchCodeImplementationContext(issueId, verbose);
|
|
362
|
-
// Fetch feedbacks for code implementation phase
|
|
363
|
-
// For multi-branch issues, filter by the current branch to get branch-specific feedbacks
|
|
364
|
-
let feedbacksInfo;
|
|
365
|
-
try {
|
|
366
|
-
const feedbacksContext = await getFeedbacksForPhase({ issueId, verbose }, 'code_implementation', currentBranch?.id // Pass branch_id if we have a current branch
|
|
367
|
-
);
|
|
368
|
-
if (feedbacksContext.feedbacks.length > 0) {
|
|
369
|
-
feedbacksInfo = await formatFeedbacksForContext(feedbacksContext);
|
|
370
|
-
if (verbose) {
|
|
371
|
-
logInfo(`Added ${feedbacksContext.feedbacks.length} human feedbacks to implementation context${currentBranch ? ` (including branch-specific for "${currentBranch.name}")` : ''}`);
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
catch (error) {
|
|
376
|
-
// Don't fail if feedbacks fetch fails - just log and continue
|
|
377
|
-
if (verbose) {
|
|
378
|
-
logInfo(`Note: Could not fetch feedbacks (${error instanceof Error ? error.message : String(error)})`);
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
// Use the dev branch name for development (already computed above)
|
|
382
|
-
const branchName = devBranchName;
|
|
383
|
-
const systemPrompt = createSystemPrompt(config, actualBaseBranch, // Use computed base branch for branch chaining
|
|
384
|
-
issueId, branchName);
|
|
385
|
-
const initialImplementationPrompt = createImplementationPromptWithContext({
|
|
386
|
-
issueId,
|
|
387
|
-
context,
|
|
388
|
-
baseBranch: actualBaseBranch, // Use computed base branch for branch chaining
|
|
389
|
-
checklistContext,
|
|
390
|
-
verbose,
|
|
391
|
-
feedbacksInfo,
|
|
392
|
-
issueBranch: currentBranch,
|
|
393
|
-
});
|
|
394
|
-
const maxIterations = options.maxVerificationIterations || 10;
|
|
395
|
-
let currentIteration = 0;
|
|
396
|
-
let currentPrompt = initialImplementationPrompt;
|
|
397
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
398
|
-
let structuredImplementationResult = null;
|
|
399
|
-
let verificationResult = null;
|
|
400
|
-
if (verbose) {
|
|
401
|
-
logInfo('Starting Claude Code query with pre-fetched information...');
|
|
402
|
-
}
|
|
403
|
-
let executionSessionId = '';
|
|
404
|
-
// Iterative improvement loop: implement → verify → improve → re-implement
|
|
405
|
-
while (currentIteration < maxIterations) {
|
|
406
|
-
currentIteration++;
|
|
407
|
-
if (verbose && currentIteration > 1) {
|
|
408
|
-
logInfo(`\n🔄 Iteration ${currentIteration}/${maxIterations}: Improving implementation based on code review feedback...`);
|
|
409
|
-
}
|
|
410
|
-
// Log iteration start (for iterations after the first)
|
|
411
|
-
if (currentIteration > 1) {
|
|
412
|
-
await logIssuePhaseEvent({
|
|
413
|
-
issueId,
|
|
414
|
-
eventType: 'phase_started',
|
|
415
|
-
phase: 'code_implementation',
|
|
416
|
-
result: 'info',
|
|
417
|
-
metadata: {
|
|
418
|
-
iteration: currentIteration,
|
|
419
|
-
max_iterations: maxIterations,
|
|
420
|
-
re_implementation: true,
|
|
421
|
-
timestamp: new Date().toISOString(),
|
|
422
|
-
},
|
|
423
|
-
}, verbose);
|
|
424
|
-
}
|
|
425
|
-
let lastAssistantResponse = '';
|
|
426
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
427
|
-
let newImplementationResult = null;
|
|
428
|
-
// Log checklist context before query
|
|
429
|
-
logDebug('Checklist Context Before Claude Query', verbose);
|
|
430
|
-
logDebug(`Has checklistContext: ${!!checklistContext}`, verbose);
|
|
431
|
-
if (checklistContext) {
|
|
432
|
-
logDebug(`Number of checklists: ${checklistContext.checklists.length}`, verbose);
|
|
433
|
-
const totalItems = checklistContext.checklists.reduce((sum, checklist) => sum + (checklist.items?.length || 0), 0);
|
|
434
|
-
logDebug(`Total checklist items: ${totalItems}`, verbose);
|
|
435
|
-
}
|
|
436
|
-
logDebug(`Implementation prompt includes checklist: ${currentPrompt.includes('checklist')}`, verbose);
|
|
437
|
-
logDebug(`System prompt includes checklist: ${systemPrompt.includes('checklist')}`, verbose);
|
|
438
|
-
// Execute implementation query
|
|
439
|
-
for await (const message of query({
|
|
440
|
-
prompt: prompt(currentPrompt),
|
|
441
|
-
options: {
|
|
442
|
-
systemPrompt: {
|
|
443
|
-
type: 'preset',
|
|
444
|
-
preset: 'claude_code',
|
|
445
|
-
append: systemPrompt,
|
|
446
|
-
},
|
|
447
|
-
model: DEFAULT_MODEL,
|
|
448
|
-
maxTurns: 3000,
|
|
449
|
-
permissionMode: 'bypassPermissions',
|
|
450
|
-
},
|
|
451
|
-
})) {
|
|
452
|
-
if (verbose) {
|
|
453
|
-
logInfo(`Received message type: ${message.type}`);
|
|
454
|
-
}
|
|
455
|
-
// Stream the implementation process
|
|
456
|
-
if (message.type === 'assistant') {
|
|
457
|
-
lastAssistantResponse += processAssistantContent(message.message?.content ?? [], verbose);
|
|
458
|
-
continue;
|
|
459
|
-
}
|
|
460
|
-
if (message.type !== 'result') {
|
|
461
|
-
continue;
|
|
462
|
-
}
|
|
463
|
-
// Capture session ID for coaching loop
|
|
464
|
-
executionSessionId = message.session_id || executionSessionId;
|
|
465
|
-
newImplementationResult = processQueryResult(message, lastAssistantResponse, issueId, verbose);
|
|
466
|
-
}
|
|
467
|
-
// Check if implementation produced results
|
|
468
|
-
if (!newImplementationResult) {
|
|
469
|
-
if (verbose) {
|
|
470
|
-
logError('⚠️ Implementation failed in this iteration');
|
|
471
|
-
}
|
|
472
|
-
break;
|
|
473
|
-
}
|
|
474
|
-
// Update with new implementation result
|
|
475
|
-
structuredImplementationResult = newImplementationResult;
|
|
476
|
-
// Log implementation completion for this iteration
|
|
477
|
-
await logIssuePhaseEvent({
|
|
478
|
-
issueId,
|
|
479
|
-
eventType: 'phase_completed',
|
|
480
|
-
phase: 'code_implementation',
|
|
481
|
-
result: 'success',
|
|
482
|
-
metadata: {
|
|
483
|
-
iteration: currentIteration,
|
|
484
|
-
max_iterations: maxIterations,
|
|
485
|
-
implementation_step: 'completed',
|
|
486
|
-
branch_name: structuredImplementationResult.branch_name,
|
|
487
|
-
files_modified: structuredImplementationResult.files_modified || [],
|
|
488
|
-
commit_hash: structuredImplementationResult.commit_hash || '',
|
|
489
|
-
timestamp: new Date().toISOString(),
|
|
490
|
-
},
|
|
491
|
-
}, verbose);
|
|
492
|
-
// Coaching loop: self-rate → coach → improve → repeat (between execute and verify)
|
|
493
|
-
// Runs before push so any improvements are committed and pushed together
|
|
494
|
-
const coaching = await runPhaseCoaching({
|
|
495
|
-
issueId,
|
|
496
|
-
phase: 'code_implementation',
|
|
497
|
-
phaseResult: { execution_session_id: executionSessionId },
|
|
498
|
-
checklistItems: extractChecklistItems(checklistContext),
|
|
499
|
-
verbose,
|
|
500
|
-
});
|
|
501
|
-
executionSessionId = coaching.executionSessionId || executionSessionId;
|
|
502
|
-
// Push code to remote after commit + coaching improvements
|
|
503
|
-
if (verbose) {
|
|
504
|
-
logInfo(`📤 Pushing code to remote repository...`);
|
|
505
|
-
}
|
|
506
|
-
const pushResult = gitPush({
|
|
507
|
-
branchName: structuredImplementationResult.branch_name || branchName,
|
|
508
|
-
token: githubTokenForPush,
|
|
509
|
-
verbose,
|
|
510
|
-
});
|
|
511
|
-
if (!pushResult.success && verbose) {
|
|
512
|
-
logError(`⚠️ Failed to push to remote: ${pushResult.error}`);
|
|
513
|
-
logInfo(' Code is committed locally and will be reviewed. Manual push may be needed.');
|
|
514
|
-
}
|
|
515
|
-
else if (verbose) {
|
|
516
|
-
logInfo('✅ Code pushed to remote successfully');
|
|
517
|
-
}
|
|
518
|
-
// Perform verification cycle
|
|
519
|
-
const verificationCycle = await performVerificationCycle({
|
|
520
|
-
branchName: structuredImplementationResult.branch_name || branchName,
|
|
521
|
-
baseBranch: actualBaseBranch, // Use computed base branch for branch chaining
|
|
522
|
-
checklistContext: checklistContext || null,
|
|
523
|
-
issueId,
|
|
524
|
-
issueName: context.issue.name,
|
|
525
|
-
issueDescription: context.issue.description,
|
|
526
|
-
config,
|
|
527
|
-
currentIteration,
|
|
528
|
-
maxIterations,
|
|
529
|
-
verbose,
|
|
530
|
-
});
|
|
531
|
-
({ verificationResult } = verificationCycle);
|
|
532
|
-
// If verification passed, exit
|
|
533
|
-
if (verificationCycle.passed) {
|
|
534
|
-
if (verbose) {
|
|
535
|
-
logInfo('✅ Verification passed! Code implementation complete.');
|
|
536
|
-
}
|
|
537
|
-
break;
|
|
538
|
-
}
|
|
539
|
-
// Verification failed
|
|
540
|
-
if (currentIteration < maxIterations && verificationCycle.nextPrompt) {
|
|
541
|
-
// We have more iterations - retry with improvement prompt
|
|
542
|
-
if (verbose) {
|
|
543
|
-
logInfo(`🔄 Will improve implementation in next iteration (${maxIterations - currentIteration} attempts remaining)`);
|
|
544
|
-
}
|
|
545
|
-
currentPrompt = verificationCycle.nextPrompt;
|
|
546
|
-
}
|
|
547
|
-
else {
|
|
548
|
-
// Max iterations reached or no next prompt - exit loop
|
|
549
|
-
if (verbose) {
|
|
550
|
-
logInfo('⚠️ Max iterations reached. Last implementation committed.');
|
|
551
|
-
}
|
|
552
|
-
break;
|
|
553
|
-
}
|
|
554
|
-
}
|
|
555
|
-
// Handle results
|
|
556
|
-
if (!structuredImplementationResult) {
|
|
557
|
-
return buildNoResultsError(issueId, branchName);
|
|
558
|
-
}
|
|
559
|
-
const { branch_name, files_modified, commit_hash, summary, checklist_results, checklist_item_results, } = structuredImplementationResult;
|
|
560
|
-
// Check if verification failed after all iterations
|
|
561
|
-
if (verificationResult &&
|
|
562
|
-
verificationResult.rejected_count > 0 &&
|
|
563
|
-
checklistContext &&
|
|
564
|
-
checklistContext.checklists.length > 0) {
|
|
565
|
-
logError(`❌ Final result: Code verification FAILED after ${currentIteration} iterations`);
|
|
566
|
-
logError(` Code committed for manual review`);
|
|
567
|
-
return buildVerificationFailureResult({
|
|
568
|
-
issueId,
|
|
569
|
-
branchName: branch_name || branchName,
|
|
570
|
-
implementationSummary: summary || 'Implementation completed with verification failures',
|
|
571
|
-
filesModified: files_modified || [],
|
|
572
|
-
commitHash: commit_hash || '',
|
|
573
|
-
verificationResult,
|
|
574
|
-
iterations: currentIteration,
|
|
575
|
-
});
|
|
576
|
-
}
|
|
577
|
-
// Create pull request from dev/ branch to feat/ branch if this is a multi-branch issue
|
|
578
|
-
let pullRequestUrl = null;
|
|
579
|
-
let pullRequestNumber = null;
|
|
580
|
-
if (currentBranch && devBranchName.startsWith('dev/')) {
|
|
581
|
-
// Get GitHub configuration from developer settings via MCP
|
|
582
|
-
const githubConfig = await getGitHubConfig(issueId, verbose);
|
|
583
|
-
if (githubConfig.configured &&
|
|
584
|
-
githubConfig.token &&
|
|
585
|
-
githubConfig.owner &&
|
|
586
|
-
githubConfig.repo) {
|
|
587
|
-
const prConfig = {
|
|
588
|
-
githubToken: githubConfig.token,
|
|
589
|
-
owner: githubConfig.owner,
|
|
590
|
-
repo: githubConfig.repo,
|
|
591
|
-
verbose,
|
|
592
|
-
};
|
|
593
|
-
// Derive feat/ branch name from dev/ branch name for PR target
|
|
594
|
-
const { devBranchToFeatBranch } = await import('./branch-pr-creator.js');
|
|
595
|
-
const featBranchName = devBranchToFeatBranch(devBranchName);
|
|
596
|
-
if (verbose) {
|
|
597
|
-
logInfo(`📝 Creating pull request from ${devBranchName} to ${featBranchName}...`);
|
|
598
|
-
}
|
|
599
|
-
const prResult = await createBranchPullRequest(prConfig, devBranchName, currentBranch.name, currentBranch.description || 'Issue branch implementation', baseBranch);
|
|
600
|
-
if (prResult.success) {
|
|
601
|
-
pullRequestUrl = prResult.pullRequestUrl || null;
|
|
602
|
-
pullRequestNumber = prResult.pullRequestNumber || null;
|
|
603
|
-
if (verbose) {
|
|
604
|
-
logInfo(`✅ Pull request created: ${pullRequestUrl}`);
|
|
605
|
-
}
|
|
606
|
-
}
|
|
607
|
-
else if (verbose) {
|
|
608
|
-
logError(`⚠️ Failed to create pull request: ${prResult.error}`);
|
|
609
|
-
logInfo(' Implementation is complete, but PR was not created.');
|
|
610
|
-
}
|
|
611
|
-
}
|
|
612
|
-
else if (verbose) {
|
|
613
|
-
logInfo('⚠️ GitHub configuration not available, skipping PR creation');
|
|
614
|
-
logInfo(` ${githubConfig.message || 'Please configure GitHub App in product developer settings.'}`);
|
|
615
|
-
}
|
|
616
|
-
}
|
|
617
|
-
// Update issue branch status to ready_for_review if we have one
|
|
618
|
-
if (currentBranch) {
|
|
619
|
-
try {
|
|
620
|
-
// Note: branch_name is stored as dev/... and used directly by all phases.
|
|
621
|
-
// The feat/ branch name is derived at runtime using devBranchToFeatBranch() for PR targets.
|
|
622
|
-
await updateBranch(currentBranch.id, {
|
|
623
|
-
status: 'ready_for_review',
|
|
624
|
-
pull_request_url: pullRequestUrl,
|
|
625
|
-
pull_request_number: pullRequestNumber,
|
|
626
|
-
}, verbose);
|
|
627
|
-
if (verbose) {
|
|
628
|
-
logInfo(`✅ Updated issue branch status to ready_for_review`);
|
|
629
|
-
}
|
|
630
|
-
}
|
|
631
|
-
catch (error) {
|
|
632
|
-
if (verbose) {
|
|
633
|
-
logError(`Failed to update issue branch status: ${error}`);
|
|
634
|
-
}
|
|
635
|
-
}
|
|
636
|
-
}
|
|
637
|
-
// Return success result with session ID for coaching
|
|
638
|
-
const implResult = buildImplementationResult({
|
|
639
|
-
issueId,
|
|
640
|
-
branchName: branch_name || branchName,
|
|
641
|
-
implementationSummary: summary || 'Implementation completed successfully',
|
|
642
|
-
filesModified: files_modified || [],
|
|
643
|
-
commitHash: commit_hash || '',
|
|
644
|
-
iterations: currentIteration,
|
|
645
|
-
checklistResults: checklist_results,
|
|
646
|
-
checklistItemResults: checklist_item_results,
|
|
647
|
-
});
|
|
648
|
-
return {
|
|
649
|
-
...implResult,
|
|
650
|
-
data: {
|
|
651
|
-
...implResult.data,
|
|
652
|
-
execution_session_id: executionSessionId || undefined,
|
|
653
|
-
},
|
|
654
|
-
};
|
|
655
|
-
}
|
|
656
|
-
catch (error) {
|
|
657
|
-
logError(`Code implementation failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
658
|
-
return {
|
|
659
|
-
issueId,
|
|
660
|
-
branchName: `dev/${issueId}`,
|
|
661
|
-
implementationSummary: null,
|
|
662
|
-
status: 'error',
|
|
663
|
-
message: `Implementation failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
664
|
-
};
|
|
665
|
-
}
|
|
666
|
-
finally {
|
|
667
|
-
// Always return to main branch after phase completion
|
|
668
|
-
cleanupGit();
|
|
669
|
-
}
|
|
670
|
-
};
|
|
671
|
-
const createSystemPrompt = (_config, baseBranch, issueId, branchName) => {
|
|
672
|
-
const mcpInstructions = `
|
|
673
|
-
|
|
674
|
-
**MANDATORY Checklist Compliance**:
|
|
675
|
-
If you are provided with checklists in the context, you MUST satisfy ALL of them during your implementation work. Checklists are mandatory requirements that define quality standards and cannot be ignored or skipped.
|
|
676
|
-
|
|
677
|
-
- Review each checklist carefully and ensure your implementation addresses every requirement
|
|
678
|
-
- You MUST include ALL provided checklist item IDs in the "checklist_item_results" field of your JSON response
|
|
679
|
-
- CRITICAL: Use the exact UUID from the "ID:" field in each checklist ITEM, NOT the item title or description
|
|
680
|
-
- Set "is_passed": true for each checklist item you have completed successfully
|
|
681
|
-
- Provide appropriate "value" based on the item type (boolean: true/false, text: descriptive text, number: numeric value)
|
|
682
|
-
- If you cannot satisfy a checklist item requirement, set "is_passed": false and explain why in the "notes" field
|
|
683
|
-
- The system will validate that all checklists have been addressed - missing checklists will cause the pipeline to fail
|
|
684
|
-
|
|
685
|
-
CRITICAL: Checklists are not optional suggestions - they are mandatory quality gates that must be satisfied.`;
|
|
686
|
-
return `You are an expert full-stack developer implementing issues based on specifications. Your task is to implement complete, production-ready code based on issue requirements, user stories, test cases, and technical design.
|
|
687
|
-
|
|
688
|
-
**Your Role**: Implement complete, working issues based on provided specifications and requirements.
|
|
689
|
-
|
|
690
|
-
**Available Tools**:
|
|
691
|
-
- Bash: Git operations, running commands, tests, and builds
|
|
692
|
-
- Glob: Find files and understand project structure
|
|
693
|
-
- Read: Examine existing code, configuration, and documentation files
|
|
694
|
-
- Edit: Modify existing files
|
|
695
|
-
- Write: Create new files
|
|
696
|
-
- TodoWrite: Track implementation tasks (use proactively)${mcpInstructions}
|
|
697
|
-
|
|
698
|
-
**CRITICAL WORKFLOW - YOU MUST FOLLOW THESE STEPS IN ORDER**:
|
|
699
|
-
|
|
700
|
-
1. **GIT PULL REBASE**: First, ensure main branch is up to date with remote:
|
|
701
|
-
- git checkout ${baseBranch}
|
|
702
|
-
- git pull origin ${baseBranch} --rebase
|
|
703
|
-
2. **CREATE BRANCH**: Create issue branch \`${branchName}\` from ${baseBranch}
|
|
704
|
-
3. **ANALYZE CODEBASE**: Use Glob and Read to understand the existing code structure
|
|
705
|
-
4. **IMPLEMENT CODE**: Write the actual implementation using Edit/Write tools
|
|
706
|
-
5. **FIX ISSUES**: Address any lint or build failures
|
|
707
|
-
6. **COMMIT**: Commit your changes with a descriptive message
|
|
708
|
-
7. **HANDLE PRE-COMMIT**: This project has strict pre-commit hooks - handle them properly:
|
|
709
|
-
- If lint-staged fails: Fix formatting and linting issues, then retry commit
|
|
710
|
-
- If AI code review fails: Either fix code quality issues or use SKIP_REVIEW=1
|
|
711
|
-
- If other issues persist: Only use --no-verify as last resort after confirming code quality
|
|
712
|
-
|
|
713
|
-
**Important Rules**:
|
|
714
|
-
1. **Git Workflow**:
|
|
715
|
-
- ALWAYS pull latest changes from main before creating branch: git pull origin ${baseBranch} --rebase
|
|
716
|
-
- ALWAYS create branch \`${branchName}\` before making changes: git checkout -b ${branchName}
|
|
717
|
-
- Use descriptive commit messages that explain what and why
|
|
718
|
-
- Handle pre-commit checks properly: fix issues first, use workarounds only when necessary
|
|
719
|
-
|
|
720
|
-
2. **Code Quality**:
|
|
721
|
-
- Follow existing code patterns and conventions in the repository
|
|
722
|
-
- Ensure proper TypeScript types and interfaces
|
|
723
|
-
- Add appropriate error handling and validation
|
|
724
|
-
- Write clean, maintainable code with proper comments where necessary
|
|
725
|
-
|
|
726
|
-
3. **Pre-commit Handling**:
|
|
727
|
-
- This project has strict pre-commit hooks including lint-staged, linting, and AI code review
|
|
728
|
-
- When pre-commit hooks fail, READ the error messages carefully
|
|
729
|
-
- Fix ALL issues reported (lint errors, type errors, formatting, code quality)
|
|
730
|
-
- Re-run the commit after fixing issues
|
|
731
|
-
- If you encounter persistent issues with AI code review or non-critical pre-commit failures:
|
|
732
|
-
* First attempt to fix the actual issues
|
|
733
|
-
* Only use --no-verify as a last resort if you are 100% confident your code is correct
|
|
734
|
-
* When using --no-verify, add a comment explaining why it was necessary
|
|
735
|
-
- IMPORTANT: AI code review can be skipped with SKIP_REVIEW=1 environment variable if needed
|
|
736
|
-
|
|
737
|
-
5. **File Modification**:
|
|
738
|
-
- Prefer modifying existing files over creating new ones
|
|
739
|
-
- Follow the existing file structure and naming conventions
|
|
740
|
-
- Use the appropriate tools (Edit for existing files, Write for new files)
|
|
741
|
-
|
|
742
|
-
**CRITICAL - Result Format**:
|
|
743
|
-
You MUST end your response with a JSON object containing the implementation results in this EXACT format:
|
|
744
|
-
|
|
745
|
-
\`\`\`json
|
|
746
|
-
{
|
|
747
|
-
"implementation_result": {
|
|
748
|
-
"issue_id": "ISSUE_ID_PLACEHOLDER",
|
|
749
|
-
"branch_name": "dev/ISSUE_ID",
|
|
750
|
-
"files_modified": ["file1.ts", "file2.tsx"],
|
|
751
|
-
"commit_hash": "abc123...",
|
|
752
|
-
"summary": "Brief description of what was implemented",
|
|
753
|
-
"tests_passed": true,
|
|
754
|
-
"pre_commit_passed": true,
|
|
755
|
-
"checklist_item_results": [
|
|
756
|
-
{
|
|
757
|
-
"checklist_item_id": "EXACT_CHECKLIST_ITEM_UUID_FROM_ID_FIELD",
|
|
758
|
-
"is_passed": true,
|
|
759
|
-
"value": "Result value based on item type (boolean, text, number, etc.)",
|
|
760
|
-
"notes": "Optional notes about this specific checklist item"
|
|
761
|
-
}
|
|
762
|
-
]
|
|
763
|
-
}
|
|
764
|
-
}
|
|
765
|
-
\`\`\`
|
|
766
|
-
|
|
767
|
-
MANDATORY: If checklists are provided in the context, you MUST include checklist_item_results for ALL checklist items. Every checklist item ID must be addressed - either passed or with explanation in notes why it cannot be satisfied. Missing any checklist item will cause the pipeline to fail.
|
|
768
|
-
|
|
769
|
-
IMPORTANT: In the checklist context, look for lines that say "ID: [UUID]" in the items list - use these exact UUIDs as checklist_item_id values. Do NOT use the item title or description as the checklist_item_id.
|
|
770
|
-
|
|
771
|
-
Remember: Quality over speed. It's better to implement correctly than to rush and create bugs.`;
|
|
772
|
-
};
|
|
773
|
-
const createImplementationPromptWithContext = (opts) => {
|
|
774
|
-
const { issueId, context, baseBranch, checklistContext, verbose, feedbacksInfo, issueBranch, } = opts;
|
|
775
|
-
const contextInfo = formatContextForPrompt(context);
|
|
776
|
-
let finalContextInfo = contextInfo;
|
|
777
|
-
// Add issue branch context if available
|
|
778
|
-
if (issueBranch) {
|
|
779
|
-
const branchContext = `
|
|
780
|
-
## Current Issue Branch
|
|
781
|
-
|
|
782
|
-
This is a **multi-branch issue** - the issue has been split into multiple branches for incremental development.
|
|
783
|
-
|
|
784
|
-
**Current Branch Information:**
|
|
785
|
-
- **Name**: ${issueBranch.name}
|
|
786
|
-
- **Branch**: ${issueBranch.branch_name || 'To be created'}
|
|
787
|
-
- **Description**: ${issueBranch.description || 'No description'}
|
|
788
|
-
|
|
789
|
-
**Important**: Focus ONLY on implementing the scope defined for this specific branch. Do not implement functionality that belongs to other branches.
|
|
790
|
-
`;
|
|
791
|
-
finalContextInfo = `${branchContext}\n${finalContextInfo}`;
|
|
792
|
-
}
|
|
793
|
-
// Add feedbacks context to the implementation prompt
|
|
794
|
-
if (feedbacksInfo) {
|
|
795
|
-
finalContextInfo = `${finalContextInfo}\n\n${feedbacksInfo}`;
|
|
796
|
-
}
|
|
797
|
-
// Add checklist context to the implementation prompt
|
|
798
|
-
let checklistInstructions = '';
|
|
799
|
-
if (checklistContext && checklistContext.checklists.length > 0) {
|
|
800
|
-
const checklistInfo = formatChecklistsForContext(checklistContext);
|
|
801
|
-
finalContextInfo = `${finalContextInfo}\n\n${checklistInfo}`;
|
|
802
|
-
// Log checklist context details
|
|
803
|
-
logDebug('Checklist Context for Code Implementation', verbose);
|
|
804
|
-
logDebug(`Number of checklists: ${checklistContext.checklists.length}`, verbose);
|
|
805
|
-
logDebug(`Checklist info length: ${checklistInfo.length}`, verbose);
|
|
806
|
-
logDebug(`Checklist info preview: ${checklistInfo.substring(0, 300)}`, verbose);
|
|
807
|
-
checklistContext.checklists.forEach((checklist, index) => {
|
|
808
|
-
logDebug(`Checklist ${index + 1}: id=${checklist.id}, name=${checklist.name}, phases=${checklist.phases?.join(',')}, role=${checklist.role}, itemCount=${checklist.items?.length || 0}`, verbose);
|
|
809
|
-
if (checklist.items) {
|
|
810
|
-
checklist.items.forEach((item, itemIndex) => {
|
|
811
|
-
logDebug(` Item ${itemIndex + 1}: id=${item.id}, title=${item.title?.substring(0, 50) || 'No title'}, description=${item.description?.substring(0, 50) || 'No description'}`, verbose);
|
|
812
|
-
});
|
|
813
|
-
}
|
|
814
|
-
});
|
|
815
|
-
// Add specific instructions for creating checklist results
|
|
816
|
-
checklistInstructions = `
|
|
817
|
-
|
|
818
|
-
## MANDATORY Checklist Compliance
|
|
819
|
-
|
|
820
|
-
**CRITICAL**: You MUST address ALL checklists provided in the context above. Checklists are mandatory quality requirements that cannot be ignored.
|
|
821
|
-
|
|
822
|
-
- Review each checklist carefully during your implementation
|
|
823
|
-
- Ensure your code and processes satisfy every checklist requirement
|
|
824
|
-
- Include ALL checklist item IDs in your final JSON response under "checklist_item_results" (use the exact UUID from "ID:" field in items list)
|
|
825
|
-
- Set "is_passed": true for completed checklist items, or explain in "notes" why a requirement cannot be met
|
|
826
|
-
- Missing any checklist will cause the entire pipeline to fail
|
|
827
|
-
|
|
828
|
-
Remember: Checklists are not suggestions - they are mandatory quality gates.`;
|
|
829
|
-
if (verbose) {
|
|
830
|
-
logInfo(`Added ${checklistContext.checklists.length} checklists to implementation context`);
|
|
831
|
-
}
|
|
832
|
-
}
|
|
833
|
-
// Determine branch name
|
|
834
|
-
const branchName = issueBranch?.branch_name || `dev/${issueId}`;
|
|
835
|
-
const branchDescription = issueBranch
|
|
836
|
-
? `\n\n**Note**: This is a multi-branch issue. Focus only on the scope defined for this branch.`
|
|
837
|
-
: '';
|
|
838
|
-
return `Implement the ${issueBranch ? `"${issueBranch.name}" branch of` : 'complete'} issue for issue ID: ${issueId}${branchDescription}
|
|
839
|
-
|
|
840
|
-
${finalContextInfo}
|
|
841
|
-
|
|
842
|
-
## Implementation Instructions
|
|
843
|
-
|
|
844
|
-
Follow this systematic approach:
|
|
845
|
-
|
|
846
|
-
1. **GIT PULL REBASE**: First ensure ${baseBranch} is up to date:
|
|
847
|
-
\`git checkout ${baseBranch}\`
|
|
848
|
-
\`git pull origin ${baseBranch} --rebase\`
|
|
849
|
-
|
|
850
|
-
2. **CREATE BRANCH**: Create git branch from ${baseBranch}:
|
|
851
|
-
\`git checkout -b ${branchName}\`
|
|
852
|
-
|
|
853
|
-
3. **ANALYZE CODEBASE**: Study the existing codebase structure to understand:
|
|
854
|
-
- Technology stack and architecture
|
|
855
|
-
- Existing patterns and conventions
|
|
856
|
-
- Where to place new components/files
|
|
857
|
-
- How to integrate with existing systems
|
|
858
|
-
|
|
859
|
-
4. **IMPLEMENT ISSUE**: Based on the context above, implement the issue by:
|
|
860
|
-
- Following the technical design (if available)
|
|
861
|
-
- Satisfying all user stories${issueBranch ? ' relevant to this branch' : ''}
|
|
862
|
-
- Creating components, services, APIs, database changes as needed
|
|
863
|
-
- Following existing code patterns and conventions
|
|
864
|
-
- Adding proper error handling and validation
|
|
865
|
-
|
|
866
|
-
5. **COMMIT CHANGES**: Commit your work with a descriptive message
|
|
867
|
-
- This project has strict pre-commit hooks (lint-staged, linting, AI code review)
|
|
868
|
-
- If hooks fail, try these approaches in order:
|
|
869
|
-
1. Fix the reported issues (preferred)
|
|
870
|
-
2. For AI code review issues: SKIP_REVIEW=1 git commit -m "message"
|
|
871
|
-
3. Last resort only: git commit --no-verify -m "message" (explain why in commit message)
|
|
872
|
-
|
|
873
|
-
## Important Notes
|
|
874
|
-
${issueBranch ? `- Focus ONLY on implementing the scope for this branch: "${issueBranch.name}"` : '- Focus on implementing ALL user stories completely'}
|
|
875
|
-
- Follow the technical design if provided, or create your own approach
|
|
876
|
-
- Maintain existing code quality and patterns
|
|
877
|
-
- Never skip pre-commit checks - always fix the issues
|
|
878
|
-
- Focus on implementation only - automated tests will be written in a separate phase
|
|
879
|
-
|
|
880
|
-
${checklistInstructions}
|
|
881
|
-
|
|
882
|
-
Begin by creating the issue branch and analyzing the codebase structure.`;
|
|
883
|
-
};
|
|
884
|
-
const parseImplementationResponse = (response, issueId, verbose) => {
|
|
885
|
-
logDebug('Parsing implementation response...', verbose);
|
|
886
|
-
try {
|
|
887
|
-
// Try to find JSON in the response
|
|
888
|
-
const jsonMatch = response.match(/```json\s*([\s\S]*?)\s*```/) ||
|
|
889
|
-
response.match(/\{[\s\S]*"implementation_result"[\s\S]*\}/);
|
|
890
|
-
if (jsonMatch) {
|
|
891
|
-
const jsonStr = jsonMatch[1] || jsonMatch[0];
|
|
892
|
-
const parsed = JSON.parse(jsonStr);
|
|
893
|
-
if (parsed.implementation_result) {
|
|
894
|
-
const result = parsed.implementation_result;
|
|
895
|
-
return {
|
|
896
|
-
branchName: result.branch_name || `dev/${issueId}`,
|
|
897
|
-
filesModified: result.files_modified || [],
|
|
898
|
-
commitHash: result.commit_hash || '',
|
|
899
|
-
summary: result.summary || '',
|
|
900
|
-
checklist_item_results: result.checklist_item_results || [],
|
|
901
|
-
};
|
|
902
|
-
}
|
|
903
|
-
}
|
|
904
|
-
// Fallback: try to extract information from the text
|
|
905
|
-
const branchMatch = response.match(/branch[:\s]+(\S+)/i);
|
|
906
|
-
const filesMatch = response.match(/files?[:\s]+([^\n]+)/i);
|
|
907
|
-
const commitMatch = response.match(/commit[:\s]+([a-f0-9]{7,})/i);
|
|
908
|
-
return {
|
|
909
|
-
branchName: branchMatch?.[1] || `dev/${issueId}`,
|
|
910
|
-
filesModified: filesMatch
|
|
911
|
-
? filesMatch[1].split(/[,\s]+/).filter((f) => f)
|
|
912
|
-
: [],
|
|
913
|
-
commitHash: commitMatch?.[1] || '',
|
|
914
|
-
summary: 'Implementation completed',
|
|
915
|
-
};
|
|
916
|
-
}
|
|
917
|
-
catch (error) {
|
|
918
|
-
logError(`Response parsing failed: ${error}`);
|
|
919
|
-
return {
|
|
920
|
-
branchName: `dev/${issueId}`,
|
|
921
|
-
filesModified: [],
|
|
922
|
-
commitHash: '',
|
|
923
|
-
summary: 'Implementation completed',
|
|
924
|
-
};
|
|
925
|
-
}
|
|
926
|
-
};
|