@fitlab-ai/agent-infra 0.11.3 → 0.11.5
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/README.md +17 -8
- package/README.zh-CN.md +17 -8
- package/dist/bin/internal-cli.js +1 -6
- package/dist/lib/decide.js +4 -41
- package/dist/lib/git/branch-worktree.js +45 -0
- package/dist/lib/internal/cli-route-inventory.js +1 -4
- package/dist/lib/internal/task-activity.js +7 -40
- package/dist/lib/internal/task-artifact.js +1 -1
- package/dist/lib/internal/task-event.js +4 -37
- package/dist/lib/internal/task-finalization.js +48 -1
- package/dist/lib/internal/task-ledger.js +14 -44
- package/dist/lib/internal/task-lifecycle.js +1 -1
- package/dist/lib/internal/task-operation-registry.js +2 -4
- package/dist/lib/internal/task-review.js +5 -37
- package/dist/lib/internal/task-verify.js +3 -47
- package/dist/lib/internal/task-warning.js +4 -40
- package/dist/lib/platform/completion-backfill.js +63 -17
- package/dist/lib/platform/pr-summary.js +4 -23
- package/dist/lib/platform/verification-sync.js +12 -49
- package/dist/lib/sandbox/control/client.js +4 -1
- package/dist/lib/sandbox/control/executor.js +12 -4
- package/dist/lib/sandbox/control/protocol.js +2 -1
- package/dist/lib/sandbox/control/server.js +26 -143
- package/dist/lib/sandbox/removal.js +15 -8
- package/dist/lib/sandbox/task-cleanup.js +13 -20
- package/dist/lib/task/activity-intent.js +1 -2
- package/dist/lib/task/artifact-command.js +11 -4
- package/dist/lib/task/artifact-lifecycle.js +217 -85
- package/dist/lib/task/artifact-operations.js +37 -28
- package/dist/lib/task/artifact-receipts.js +4 -1
- package/dist/lib/task/artifact-schema.js +8 -7
- package/dist/lib/task/artifact-selection.js +25 -0
- package/dist/lib/task/capabilities.js +158 -39
- package/dist/lib/task/commands/status.js +9 -2
- package/dist/lib/task/control-authority.js +12 -168
- package/dist/lib/task/decision-intents.js +14 -4
- package/dist/lib/task/delivery.js +1 -43
- package/dist/lib/task/events.js +68 -73
- package/dist/lib/task/finalization-handoff.js +92 -0
- package/dist/lib/task/finalization.js +423 -154
- package/dist/lib/task/intermediate-cleanup.js +9 -148
- package/dist/lib/task/ledger-intents.js +159 -20
- package/dist/lib/task/lifecycle-path.js +75 -0
- package/dist/lib/task/lifecycle.js +60 -11
- package/dist/lib/task/local-artifact-finalization.js +13 -47
- package/dist/lib/task/orchestration.js +17 -7
- package/dist/lib/task/review-command.js +1 -2
- package/dist/lib/task/review-finalization.js +4 -18
- package/dist/lib/task/rework-intent.js +70 -4
- package/dist/lib/task/snapshot.js +6 -6
- package/dist/lib/task/verification-engine.js +25 -30
- package/dist/lib/task/verification.js +2 -13
- package/dist/lib/task/workflow-warning-intents.js +23 -10
- package/dist/lib/task/workspace-snapshot.js +7 -2
- package/dist/lib/task/write.js +1 -2
- package/dist/lifecycle-build-manifest.json +3 -3
- package/lib/decide.ts +5 -35
- package/lib/git/branch-worktree.ts +41 -0
- package/lib/internal/cli-route-inventory.ts +1 -3
- package/lib/internal/task-activity.ts +6 -34
- package/lib/internal/task-artifact.ts +1 -1
- package/lib/internal/task-event.ts +4 -37
- package/lib/internal/task-finalization.ts +47 -1
- package/lib/internal/task-ledger.ts +15 -41
- package/lib/internal/task-lifecycle.ts +2 -2
- package/lib/internal/task-operation-registry.ts +2 -4
- package/lib/internal/task-review.ts +5 -31
- package/lib/internal/task-verify.ts +3 -39
- package/lib/internal/task-warning.ts +3 -32
- package/lib/platform/completion-backfill.ts +78 -16
- package/lib/platform/pr-summary.ts +4 -25
- package/lib/platform/verification-sync.ts +13 -53
- package/lib/sandbox/control/client.ts +5 -1
- package/lib/sandbox/control/executor.ts +13 -4
- package/lib/sandbox/control/protocol.ts +3 -2
- package/lib/sandbox/control/server.ts +21 -146
- package/lib/sandbox/removal.ts +23 -7
- package/lib/sandbox/task-cleanup.ts +12 -20
- package/lib/task/activity-intent.ts +1 -2
- package/lib/task/artifact-command.ts +14 -4
- package/lib/task/artifact-lifecycle.ts +236 -85
- package/lib/task/artifact-operations.ts +59 -28
- package/lib/task/artifact-receipts.ts +4 -1
- package/lib/task/artifact-schema.ts +10 -7
- package/lib/task/artifact-selection.ts +53 -0
- package/lib/task/capabilities.ts +154 -40
- package/lib/task/commands/status.ts +11 -2
- package/lib/task/control-authority.ts +17 -189
- package/lib/task/decision-intents.ts +11 -4
- package/lib/task/delivery.ts +1 -40
- package/lib/task/events.ts +73 -74
- package/lib/task/finalization-handoff.ts +104 -0
- package/lib/task/finalization.ts +388 -122
- package/lib/task/intermediate-cleanup.ts +9 -125
- package/lib/task/ledger-intents.ts +157 -20
- package/lib/task/lifecycle-path.ts +98 -0
- package/lib/task/lifecycle.ts +58 -13
- package/lib/task/local-artifact-finalization.ts +14 -56
- package/lib/task/orchestration.ts +26 -8
- package/lib/task/review-command.ts +2 -5
- package/lib/task/review-finalization.ts +4 -20
- package/lib/task/rework-intent.ts +75 -5
- package/lib/task/snapshot.ts +6 -6
- package/lib/task/verification-engine.ts +29 -30
- package/lib/task/verification.ts +3 -16
- package/lib/task/workflow-warning-intents.ts +20 -10
- package/lib/task/workspace-snapshot.ts +3 -2
- package/lib/task/write.ts +1 -4
- package/package.json +1 -1
- package/templates/.agents/rules/review-handshake.en.md +4 -4
- package/templates/.agents/rules/review-handshake.zh-CN.md +4 -4
- package/templates/.agents/skills/analyze-task/SKILL.en.md +21 -5
- package/templates/.agents/skills/analyze-task/SKILL.zh-CN.md +21 -5
- package/templates/.agents/skills/code-task/SKILL.en.md +14 -8
- package/templates/.agents/skills/code-task/SKILL.zh-CN.md +18 -13
- package/templates/.agents/skills/code-task/reference/code-rules.en.md +2 -2
- package/templates/.agents/skills/code-task/reference/code-rules.zh-CN.md +2 -2
- package/templates/.agents/skills/code-task/reference/dual-mode.en.md +4 -4
- package/templates/.agents/skills/code-task/reference/dual-mode.zh-CN.md +4 -4
- package/templates/.agents/skills/code-task/reference/report-template.en.md +7 -7
- package/templates/.agents/skills/code-task/reference/report-template.zh-CN.md +7 -7
- package/templates/.agents/skills/complete-manual-validation/config/verify.en.json +2 -2
- package/templates/.agents/skills/complete-manual-validation/config/verify.zh-CN.json +2 -2
- package/templates/.agents/skills/complete-manual-validation/reference/report-template.en.md +1 -3
- package/templates/.agents/skills/complete-manual-validation/reference/report-template.zh-CN.md +1 -3
- package/templates/.agents/skills/complete-task/SKILL.en.md +2 -2
- package/templates/.agents/skills/complete-task/SKILL.zh-CN.md +2 -2
- package/templates/.agents/skills/complete-task/config/verify.en.json +2 -2
- package/templates/.agents/skills/complete-task/config/verify.zh-CN.json +2 -2
- package/templates/.agents/skills/plan-task/SKILL.en.md +13 -10
- package/templates/.agents/skills/plan-task/SKILL.zh-CN.md +13 -10
- package/templates/.agents/skills/review-analysis/SKILL.en.md +5 -1
- package/templates/.agents/skills/review-analysis/SKILL.zh-CN.md +5 -1
- package/templates/.agents/skills/review-analysis/reference/report-template.en.md +3 -3
- package/templates/.agents/skills/review-analysis/reference/report-template.zh-CN.md +3 -3
- package/templates/.agents/skills/review-code/SKILL.en.md +5 -1
- package/templates/.agents/skills/review-code/SKILL.zh-CN.md +5 -1
- package/templates/.agents/skills/review-code/reference/report-template.en.md +3 -3
- package/templates/.agents/skills/review-code/reference/report-template.zh-CN.md +3 -3
- package/templates/.agents/skills/review-plan/SKILL.en.md +5 -1
- package/templates/.agents/skills/review-plan/SKILL.zh-CN.md +5 -1
- package/templates/.agents/skills/review-plan/reference/report-template.en.md +3 -3
- package/templates/.agents/skills/review-plan/reference/report-template.zh-CN.md +3 -3
- package/templates/.agents/skills/review-pr/config/verify.en.json +3 -1
- package/templates/.agents/skills/review-pr/config/verify.zh-CN.json +3 -1
- package/templates/.agents/skills/review-pr/reference/report-template.en.md +3 -3
- package/templates/.agents/skills/review-pr/reference/report-template.zh-CN.md +3 -3
- package/templates/.agents/skills/run-manual-validation/config/verify.en.json +2 -2
- package/templates/.agents/skills/run-manual-validation/config/verify.zh-CN.json +2 -2
- package/templates/.agents/skills/run-manual-validation/reference/report-template.en.md +2 -2
- package/templates/.agents/skills/run-manual-validation/reference/report-template.zh-CN.md +2 -2
- package/templates/.agents/skills/update-agent-infra/scripts/sync-templates.js +18 -2
- package/templates/.agents/templates/task.en.md +2 -2
- package/templates/.agents/templates/task.zh-CN.md +2 -2
- package/templates/.agents/workflows/bug-fix.en.yaml +11 -6
- package/templates/.agents/workflows/bug-fix.zh-CN.yaml +11 -6
- package/templates/.agents/workflows/feature-development.en.yaml +11 -6
- package/templates/.agents/workflows/feature-development.zh-CN.yaml +11 -6
- package/templates/.agents/workflows/refactoring.en.yaml +11 -6
- package/templates/.agents/workflows/refactoring.zh-CN.yaml +11 -6
- package/dist/lib/internal/task-override.js +0 -138
- package/dist/lib/sandbox/control/finalization-response.js +0 -33
- package/dist/lib/task/artifact-recovery.js +0 -476
- package/dist/lib/task/artifact-repair-intent.js +0 -181
- package/dist/lib/task/guard-override.js +0 -31
- package/dist/lib/task/human-override.js +0 -1259
- package/lib/internal/task-override.ts +0 -144
- package/lib/sandbox/control/finalization-response.ts +0 -35
- package/lib/task/artifact-recovery.ts +0 -572
- package/lib/task/artifact-repair-intent.ts +0 -227
- package/lib/task/guard-override.ts +0 -50
- package/lib/task/human-override.ts +0 -1522
|
@@ -8,6 +8,11 @@
|
|
|
8
8
|
name: feature-development
|
|
9
9
|
description: 开发新功能的端到端工作流。
|
|
10
10
|
|
|
11
|
+
lifecycle_paths:
|
|
12
|
+
streamlined: [analysis, code, code-review]
|
|
13
|
+
standard: [analysis, design, code, code-review]
|
|
14
|
+
full: [analysis, analysis-review, design, design-review, code, code-review]
|
|
15
|
+
|
|
11
16
|
steps:
|
|
12
17
|
- name: analysis
|
|
13
18
|
description: 分析功能需求,探索代码库,识别受影响的区域。
|
|
@@ -26,7 +31,7 @@ steps:
|
|
|
26
31
|
outputs:
|
|
27
32
|
- name: analysis
|
|
28
33
|
pattern: "analysis.md | analysis-r{N}.md"
|
|
29
|
-
rule: "
|
|
34
|
+
rule: "由 task-artifact 选择器决定:输入与实质结果未变化时复用已完成产物;仅在新输入、新返工证据或结果变化时创建下一轮"
|
|
30
35
|
outputs:
|
|
31
36
|
- 需求分析报告
|
|
32
37
|
- 受影响文件列表
|
|
@@ -53,7 +58,7 @@ steps:
|
|
|
53
58
|
outputs:
|
|
54
59
|
- name: review-analysis
|
|
55
60
|
pattern: "review-analysis.md | review-analysis-r{N}.md"
|
|
56
|
-
rule: "
|
|
61
|
+
rule: "由 task-artifact 选择器决定:输入与实质结果未变化时复用已完成产物;仅在新输入、新返工证据或结果变化时创建下一轮"
|
|
57
62
|
outputs:
|
|
58
63
|
- 需求分析审查报告
|
|
59
64
|
- 待修正问题列表(如有)
|
|
@@ -82,7 +87,7 @@ steps:
|
|
|
82
87
|
outputs:
|
|
83
88
|
- name: plan
|
|
84
89
|
pattern: "plan.md | plan-r{N}.md"
|
|
85
|
-
rule: "
|
|
90
|
+
rule: "由 task-artifact 选择器决定:输入与实质结果未变化时复用已完成产物;仅在新输入、新返工证据或结果变化时创建下一轮"
|
|
86
91
|
outputs:
|
|
87
92
|
- 技术方案
|
|
88
93
|
- 接口定义
|
|
@@ -109,7 +114,7 @@ steps:
|
|
|
109
114
|
outputs:
|
|
110
115
|
- name: review-plan
|
|
111
116
|
pattern: "review-plan.md | review-plan-r{N}.md"
|
|
112
|
-
rule: "
|
|
117
|
+
rule: "由 task-artifact 选择器决定:输入与实质结果未变化时复用已完成产物;仅在新输入、新返工证据或结果变化时创建下一轮"
|
|
113
118
|
outputs:
|
|
114
119
|
- 技术方案审查报告
|
|
115
120
|
- 待修正问题列表(如有)
|
|
@@ -145,7 +150,7 @@ steps:
|
|
|
145
150
|
outputs:
|
|
146
151
|
- name: code
|
|
147
152
|
pattern: "code.md | code-r{N}.md"
|
|
148
|
-
rule: "
|
|
153
|
+
rule: "由 task-artifact 选择器决定:输入与实质结果未变化时复用已完成产物;仅在新输入、新返工证据或结果变化时创建下一轮"
|
|
149
154
|
outputs:
|
|
150
155
|
- 包含实现或修复的功能分支
|
|
151
156
|
- 测试文件
|
|
@@ -172,7 +177,7 @@ steps:
|
|
|
172
177
|
outputs:
|
|
173
178
|
- name: review-code
|
|
174
179
|
pattern: "review-code.md | review-code-r{N}.md"
|
|
175
|
-
rule: "
|
|
180
|
+
rule: "由 task-artifact 选择器决定:输入与实质结果未变化时复用已完成产物;仅在新输入、新返工证据或结果变化时创建下一轮"
|
|
176
181
|
outputs:
|
|
177
182
|
- 代码审查报告
|
|
178
183
|
- 待修复问题列表
|
|
@@ -9,6 +9,11 @@
|
|
|
9
9
|
name: refactoring
|
|
10
10
|
description: Safe and structured workflow for code refactoring.
|
|
11
11
|
|
|
12
|
+
lifecycle_paths:
|
|
13
|
+
streamlined: [analysis, code, code-review]
|
|
14
|
+
standard: [analysis, design, code, code-review]
|
|
15
|
+
full: [analysis, analysis-review, design, design-review, code, code-review]
|
|
16
|
+
|
|
12
17
|
steps:
|
|
13
18
|
- name: analysis
|
|
14
19
|
description: Analyze the current code and define the refactoring scope.
|
|
@@ -28,7 +33,7 @@ steps:
|
|
|
28
33
|
outputs:
|
|
29
34
|
- name: analysis
|
|
30
35
|
pattern: "analysis.md | analysis-r{N}.md"
|
|
31
|
-
rule: "
|
|
36
|
+
rule: "Let the task-artifact selector decide: reuse a completed artifact when inputs and substantive results match; create the next round only for new inputs, rework evidence, or result changes"
|
|
32
37
|
outputs:
|
|
33
38
|
- Scope analysis with dependency map
|
|
34
39
|
- Risk assessment
|
|
@@ -55,7 +60,7 @@ steps:
|
|
|
55
60
|
outputs:
|
|
56
61
|
- name: review-analysis
|
|
57
62
|
pattern: "review-analysis.md | review-analysis-r{N}.md"
|
|
58
|
-
rule: "
|
|
63
|
+
rule: "Let the task-artifact selector decide: reuse a completed artifact when inputs and substantive results match; create the next round only for new inputs, rework evidence, or result changes"
|
|
59
64
|
outputs:
|
|
60
65
|
- Requirement analysis review report
|
|
61
66
|
- Findings to fix, if any
|
|
@@ -84,7 +89,7 @@ steps:
|
|
|
84
89
|
outputs:
|
|
85
90
|
- name: plan
|
|
86
91
|
pattern: "plan.md | plan-r{N}.md"
|
|
87
|
-
rule: "
|
|
92
|
+
rule: "Let the task-artifact selector decide: reuse a completed artifact when inputs and substantive results match; create the next round only for new inputs, rework evidence, or result changes"
|
|
88
93
|
outputs:
|
|
89
94
|
- Incremental refactoring plan
|
|
90
95
|
- Prerequisite test list
|
|
@@ -111,7 +116,7 @@ steps:
|
|
|
111
116
|
outputs:
|
|
112
117
|
- name: review-plan
|
|
113
118
|
pattern: "review-plan.md | review-plan-r{N}.md"
|
|
114
|
-
rule: "
|
|
119
|
+
rule: "Let the task-artifact selector decide: reuse a completed artifact when inputs and substantive results match; create the next round only for new inputs, rework evidence, or result changes"
|
|
115
120
|
outputs:
|
|
116
121
|
- Plan review report
|
|
117
122
|
- Findings to fix, if any
|
|
@@ -148,7 +153,7 @@ steps:
|
|
|
148
153
|
outputs:
|
|
149
154
|
- name: code
|
|
150
155
|
pattern: "code.md | code-r{N}.md"
|
|
151
|
-
rule: "
|
|
156
|
+
rule: "Let the task-artifact selector decide: reuse a completed artifact when inputs and substantive results match; create the next round only for new inputs, rework evidence, or result changes"
|
|
152
157
|
outputs:
|
|
153
158
|
- Refactoring branch with implementation or fixes
|
|
154
159
|
- Updated or new test files
|
|
@@ -177,7 +182,7 @@ steps:
|
|
|
177
182
|
outputs:
|
|
178
183
|
- name: review-code
|
|
179
184
|
pattern: "review-code.md | review-code-r{N}.md"
|
|
180
|
-
rule: "
|
|
185
|
+
rule: "Let the task-artifact selector decide: reuse a completed artifact when inputs and substantive results match; create the next round only for new inputs, rework evidence, or result changes"
|
|
181
186
|
outputs:
|
|
182
187
|
- Code review report
|
|
183
188
|
- Findings list, if any
|
|
@@ -8,6 +8,11 @@
|
|
|
8
8
|
name: refactoring
|
|
9
9
|
description: 安全且结构化的代码重构工作流。
|
|
10
10
|
|
|
11
|
+
lifecycle_paths:
|
|
12
|
+
streamlined: [analysis, code, code-review]
|
|
13
|
+
standard: [analysis, design, code, code-review]
|
|
14
|
+
full: [analysis, analysis-review, design, design-review, code, code-review]
|
|
15
|
+
|
|
11
16
|
steps:
|
|
12
17
|
- name: analysis
|
|
13
18
|
description: 分析当前代码并确定重构范围。
|
|
@@ -27,7 +32,7 @@ steps:
|
|
|
27
32
|
outputs:
|
|
28
33
|
- name: analysis
|
|
29
34
|
pattern: "analysis.md | analysis-r{N}.md"
|
|
30
|
-
rule: "
|
|
35
|
+
rule: "由 task-artifact 选择器决定:输入与实质结果未变化时复用已完成产物;仅在新输入、新返工证据或结果变化时创建下一轮"
|
|
31
36
|
outputs:
|
|
32
37
|
- 包含依赖关系图的范围分析
|
|
33
38
|
- 风险评估
|
|
@@ -54,7 +59,7 @@ steps:
|
|
|
54
59
|
outputs:
|
|
55
60
|
- name: review-analysis
|
|
56
61
|
pattern: "review-analysis.md | review-analysis-r{N}.md"
|
|
57
|
-
rule: "
|
|
62
|
+
rule: "由 task-artifact 选择器决定:输入与实质结果未变化时复用已完成产物;仅在新输入、新返工证据或结果变化时创建下一轮"
|
|
58
63
|
outputs:
|
|
59
64
|
- 需求分析审查报告
|
|
60
65
|
- 待修正问题列表(如有)
|
|
@@ -83,7 +88,7 @@ steps:
|
|
|
83
88
|
outputs:
|
|
84
89
|
- name: plan
|
|
85
90
|
pattern: "plan.md | plan-r{N}.md"
|
|
86
|
-
rule: "
|
|
91
|
+
rule: "由 task-artifact 选择器决定:输入与实质结果未变化时复用已完成产物;仅在新输入、新返工证据或结果变化时创建下一轮"
|
|
87
92
|
outputs:
|
|
88
93
|
- 包含增量步骤的重构计划
|
|
89
94
|
- 前置测试列表
|
|
@@ -110,7 +115,7 @@ steps:
|
|
|
110
115
|
outputs:
|
|
111
116
|
- name: review-plan
|
|
112
117
|
pattern: "review-plan.md | review-plan-r{N}.md"
|
|
113
|
-
rule: "
|
|
118
|
+
rule: "由 task-artifact 选择器决定:输入与实质结果未变化时复用已完成产物;仅在新输入、新返工证据或结果变化时创建下一轮"
|
|
114
119
|
outputs:
|
|
115
120
|
- 技术方案审查报告
|
|
116
121
|
- 待修正问题列表(如有)
|
|
@@ -147,7 +152,7 @@ steps:
|
|
|
147
152
|
outputs:
|
|
148
153
|
- name: code
|
|
149
154
|
pattern: "code.md | code-r{N}.md"
|
|
150
|
-
rule: "
|
|
155
|
+
rule: "由 task-artifact 选择器决定:输入与实质结果未变化时复用已完成产物;仅在新输入、新返工证据或结果变化时创建下一轮"
|
|
151
156
|
outputs:
|
|
152
157
|
- 包含变更的重构分支
|
|
153
158
|
- 更新或新增的测试文件
|
|
@@ -176,7 +181,7 @@ steps:
|
|
|
176
181
|
outputs:
|
|
177
182
|
- name: review-code
|
|
178
183
|
pattern: "review-code.md | review-code-r{N}.md"
|
|
179
|
-
rule: "
|
|
184
|
+
rule: "由 task-artifact 选择器决定:输入与实质结果未变化时复用已完成产物;仅在新输入、新返工证据或结果变化时创建下一轮"
|
|
180
185
|
outputs:
|
|
181
186
|
- 代码审查报告
|
|
182
187
|
- 问题列表(如有)
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
import { consumeHumanOverride, diagnoseHumanOverrideForTask, issueHumanOverride } from '../task/human-override.js';
|
|
2
|
-
import { resolveTaskRef } from '../task/resolve-ref.js';
|
|
3
|
-
import { TaskExecutionLockError, withTaskExecutionLock } from '../task/task-execution-lock.js';
|
|
4
|
-
import { ensureInternalHandlerRoute, internalHandlerRoute } from './cli-route-inventory.js';
|
|
5
|
-
const USAGE = `Usage: agent-infra-internal task-override <task-ref> <diagnose|issue|consume> [options]
|
|
6
|
-
|
|
7
|
-
Options: --failure-id <id> --target <target> --operator <operator> --reason <reason> --scope <scope>
|
|
8
|
-
--intent <lifecycle-intent> --alert-number <N> --issue-number <N> --staging-dir <path>
|
|
9
|
-
--expires-at <timestamp> --ticket <ticket-id> --pr-number <N>
|
|
10
|
-
`;
|
|
11
|
-
const FLAGS = {
|
|
12
|
-
'--failure-id': 'failureId',
|
|
13
|
-
'--target': 'target',
|
|
14
|
-
'--operator': 'operator',
|
|
15
|
-
'--reason': 'reason',
|
|
16
|
-
'--scope': 'scope',
|
|
17
|
-
'--intent': 'intent',
|
|
18
|
-
'--failure-digest': 'failureDigest',
|
|
19
|
-
'--expires-at': 'expiresAt',
|
|
20
|
-
'--ticket': 'ticketId',
|
|
21
|
-
'--facts': 'observedFacts',
|
|
22
|
-
'--alert-number': 'alertNumber',
|
|
23
|
-
'--issue-number': 'issueNumber',
|
|
24
|
-
'--pr-number': 'pullRequestNumber',
|
|
25
|
-
'--staging-dir': 'stagingDir'
|
|
26
|
-
};
|
|
27
|
-
function usageFailure(message) {
|
|
28
|
-
process.stdout.write(`${JSON.stringify({ status: 'failed', changed: false, error: { code: 'OVERRIDE_PAYLOAD_INVALID', message } })}\n`);
|
|
29
|
-
process.stderr.write(USAGE);
|
|
30
|
-
process.exitCode = 1;
|
|
31
|
-
}
|
|
32
|
-
async function taskOverride(args = []) {
|
|
33
|
-
if (!ensureInternalHandlerRoute('task-override', args))
|
|
34
|
-
return;
|
|
35
|
-
if (args[0] === '--help' || args[0] === '-h') {
|
|
36
|
-
process.stdout.write(USAGE);
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
const [taskRef, operation] = args;
|
|
40
|
-
if (!taskRef || !operation || ![
|
|
41
|
-
internalHandlerRoute('task-override', 'diagnose', operation ?? ''),
|
|
42
|
-
internalHandlerRoute('task-override', 'issue', operation ?? ''),
|
|
43
|
-
internalHandlerRoute('task-override', 'consume', operation ?? '')
|
|
44
|
-
].some(Boolean)) {
|
|
45
|
-
usageFailure('task ref and a valid operation are required');
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
const values = { taskRef };
|
|
49
|
-
const seen = new Set();
|
|
50
|
-
for (let index = 2; index < args.length; index += 1) {
|
|
51
|
-
const flag = args[index];
|
|
52
|
-
const key = FLAGS[flag];
|
|
53
|
-
if (!key) {
|
|
54
|
-
usageFailure(`unknown option '${flag}'`);
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
if (seen.has(flag)) {
|
|
58
|
-
usageFailure(`duplicate option '${flag}'`);
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
const value = args[++index];
|
|
62
|
-
if (value === undefined || value.startsWith('--')) {
|
|
63
|
-
usageFailure(`option '${flag}' requires a value`);
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
seen.add(flag);
|
|
67
|
-
values[key] = key === 'observedFacts' ? value.split(',').map((fact) => fact.trim()).filter(Boolean)
|
|
68
|
-
: key === 'alertNumber' || key === 'issueNumber' || key === 'pullRequestNumber' ? Number(value) : value;
|
|
69
|
-
}
|
|
70
|
-
const required = {
|
|
71
|
-
diagnose: [],
|
|
72
|
-
issue: ['failureId', 'target', 'operator', 'reason', 'scope', 'expiresAt'],
|
|
73
|
-
consume: ['failureId', 'target', 'scope', 'ticketId']
|
|
74
|
-
};
|
|
75
|
-
const missing = required[operation].find((key) => values[key] === undefined);
|
|
76
|
-
if (missing) {
|
|
77
|
-
usageFailure(`${operation} requires '--${missing.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)}'`);
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
const resolved = resolveTaskRef(taskRef);
|
|
81
|
-
if (!resolved.ok) {
|
|
82
|
-
process.stdout.write(`${JSON.stringify({ status: 'failed', changed: false, error: { code: resolved.code, message: resolved.message } })}\n`);
|
|
83
|
-
process.exitCode = 1;
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
let result;
|
|
87
|
-
try {
|
|
88
|
-
if (internalHandlerRoute('task-override', 'diagnose', operation)) {
|
|
89
|
-
result = await diagnoseHumanOverrideForTask(taskRef, values.failureId ? String(values.failureId) : undefined, values.target ? String(values.target) : undefined);
|
|
90
|
-
}
|
|
91
|
-
else if (internalHandlerRoute('task-override', 'issue', operation)) {
|
|
92
|
-
result = await withTaskExecutionLock(resolved.repoRoot, resolved.taskId, 'task-override.issue', async () => issueHumanOverride({
|
|
93
|
-
taskRef,
|
|
94
|
-
failureId: String(values.failureId),
|
|
95
|
-
target: String(values.target),
|
|
96
|
-
operator: String(values.operator),
|
|
97
|
-
reason: String(values.reason),
|
|
98
|
-
scope: String(values.scope),
|
|
99
|
-
expiresAt: String(values.expiresAt),
|
|
100
|
-
...(values.intent ? { intent: String(values.intent) } : {}),
|
|
101
|
-
...(values.alertNumber !== undefined ? { alertNumber: Number(values.alertNumber) } : {}),
|
|
102
|
-
...(values.issueNumber !== undefined ? { issueNumber: Number(values.issueNumber) } : {}),
|
|
103
|
-
...(values.pullRequestNumber !== undefined ? { pullRequestNumber: Number(values.pullRequestNumber) } : {}),
|
|
104
|
-
...(values.stagingDir ? { stagingDir: String(values.stagingDir) } : {}),
|
|
105
|
-
...(values.failureDigest ? { failureDigest: String(values.failureDigest) } : {})
|
|
106
|
-
}));
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
result = await withTaskExecutionLock(resolved.repoRoot, resolved.taskId, 'task-override.consume', async () => consumeHumanOverride({
|
|
110
|
-
taskRef,
|
|
111
|
-
ticketId: String(values.ticketId),
|
|
112
|
-
failureId: String(values.failureId),
|
|
113
|
-
target: String(values.target),
|
|
114
|
-
scope: String(values.scope),
|
|
115
|
-
...(values.intent ? { intent: String(values.intent) } : {}),
|
|
116
|
-
...(values.alertNumber !== undefined ? { alertNumber: Number(values.alertNumber) } : {}),
|
|
117
|
-
...(values.issueNumber !== undefined ? { issueNumber: Number(values.issueNumber) } : {}),
|
|
118
|
-
...(values.pullRequestNumber !== undefined ? { pullRequestNumber: Number(values.pullRequestNumber) } : {}),
|
|
119
|
-
...(values.stagingDir ? { stagingDir: String(values.stagingDir) } : {}),
|
|
120
|
-
...(values.failureDigest ? { failureDigest: String(values.failureDigest) } : {}),
|
|
121
|
-
...(values.observedFacts ? { observedFacts: values.observedFacts } : {})
|
|
122
|
-
}));
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
catch (cause) {
|
|
126
|
-
if (cause instanceof TaskExecutionLockError) {
|
|
127
|
-
process.stdout.write(`${JSON.stringify({ status: 'failed', changed: false, error: { code: cause.code, message: cause.message } })}\n`);
|
|
128
|
-
process.exitCode = 1;
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
throw cause;
|
|
132
|
-
}
|
|
133
|
-
process.stdout.write(`${JSON.stringify(result)}\n`);
|
|
134
|
-
if (result.status === 'failed')
|
|
135
|
-
process.exitCode = 1;
|
|
136
|
-
}
|
|
137
|
-
export { taskOverride };
|
|
138
|
-
//# sourceMappingURL=task-override.js.map
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
export function finalizationTerminalResponse(taskId, requestId, receipt) {
|
|
2
|
-
const pendingSteps = [
|
|
3
|
-
receipt.taskComment === 'pending' ? 'task-comment' : null,
|
|
4
|
-
receipt.verification === 'pending' ? 'verification' : null,
|
|
5
|
-
receipt.summary === 'pending' ? 'summary' : null
|
|
6
|
-
].filter((step) => step !== null);
|
|
7
|
-
const completedSteps = [
|
|
8
|
-
'lifecycle', receipt.taskComment === 'pending' ? null : 'task-comment',
|
|
9
|
-
receipt.verification === 'pending' ? null : 'verification', receipt.summary === 'pending' ? null : 'summary'
|
|
10
|
-
]
|
|
11
|
-
.filter((step) => step !== null);
|
|
12
|
-
const warnings = receipt.warnings
|
|
13
|
-
.filter((warning) => warning.status === 'open')
|
|
14
|
-
.map(({ status: _status, resolvedAt: _resolvedAt, ...warning }) => warning);
|
|
15
|
-
const result = {
|
|
16
|
-
status: 'completed', changed: false, taskId,
|
|
17
|
-
backfill: { status: 'no-op', changed: false, error: null },
|
|
18
|
-
lifecycle: { status: 'no-op', changed: false, error: null },
|
|
19
|
-
taskComment: receipt.taskComment === 'pending' ? null : { status: 'no-op', changed: false, error: null },
|
|
20
|
-
verification: receipt.verification === 'pending' ? null : { status: 'no-op', changed: false, error: null },
|
|
21
|
-
summary: receipt.summary === 'pending' ? null : { status: 'no-op', changed: false, error: null },
|
|
22
|
-
completedSteps, pendingSteps,
|
|
23
|
-
result: pendingSteps.length > 0 || receipt.warningProjection === 'pending' || warnings.length > 0
|
|
24
|
-
? 'completed_with_warnings' : 'completed',
|
|
25
|
-
warnings, error: null
|
|
26
|
-
};
|
|
27
|
-
return {
|
|
28
|
-
version: 2, id: requestId, phase: 'completed', exitCode: 0,
|
|
29
|
-
stdout: `${JSON.stringify({ version: 1, status: 'completed', changed: false, accepted: true, result, error: null })}\n`,
|
|
30
|
-
stderr: '', error: null
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
//# sourceMappingURL=finalization-response.js.map
|