harness-engineering-agent 0.3.31 → 0.3.33
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 +9 -7
- package/dist/agent/harness-role-capability-directory-data.d.ts.map +1 -1
- package/dist/agent/harness-role-capability-directory-data.js +1 -2
- package/dist/agent/harness-role-capability-directory-data.js.map +1 -1
- package/dist/controller/agent-output.d.ts +11 -0
- package/dist/controller/agent-output.d.ts.map +1 -1
- package/dist/controller/agent-output.js +91 -1
- package/dist/controller/agent-output.js.map +1 -1
- package/dist/controller/failure-factory.d.ts.map +1 -1
- package/dist/controller/failure-factory.js +27 -0
- package/dist/controller/failure-factory.js.map +1 -1
- package/dist/controller/index.d.ts +2 -0
- package/dist/controller/index.d.ts.map +1 -1
- package/dist/controller/index.js +1 -0
- package/dist/controller/index.js.map +1 -1
- package/dist/controller/parallel-task-delta.d.ts +24 -0
- package/dist/controller/parallel-task-delta.d.ts.map +1 -0
- package/dist/controller/parallel-task-delta.js +34 -0
- package/dist/controller/parallel-task-delta.js.map +1 -0
- package/dist/controller/repair-loop.d.ts.map +1 -1
- package/dist/controller/repair-loop.js +3 -4
- package/dist/controller/repair-loop.js.map +1 -1
- package/dist/controller/route-resolver.js +3 -2
- package/dist/controller/route-resolver.js.map +1 -1
- package/dist/controller/run-controller.d.ts.map +1 -1
- package/dist/controller/run-controller.js +14 -26
- package/dist/controller/run-controller.js.map +1 -1
- package/dist/controller/run-error-finalizer.d.ts +13 -0
- package/dist/controller/run-error-finalizer.d.ts.map +1 -1
- package/dist/controller/run-error-finalizer.js +74 -9
- package/dist/controller/run-error-finalizer.js.map +1 -1
- package/dist/controller/run-state.d.ts.map +1 -1
- package/dist/controller/run-state.js +3 -1
- package/dist/controller/run-state.js.map +1 -1
- package/dist/controller/streamlined-runner.d.ts.map +1 -1
- package/dist/controller/streamlined-runner.js +59 -4
- package/dist/controller/streamlined-runner.js.map +1 -1
- package/dist/controller/task-executor.d.ts.map +1 -1
- package/dist/controller/task-executor.js +216 -40
- package/dist/controller/task-executor.js.map +1 -1
- package/dist/domain/failure.d.ts +291 -0
- package/dist/domain/failure.d.ts.map +1 -1
- package/dist/domain/failure.js +25 -0
- package/dist/domain/failure.js.map +1 -1
- package/dist/domain/index.d.ts +1 -1
- package/dist/domain/index.d.ts.map +1 -1
- package/dist/domain/index.js +1 -1
- package/dist/domain/index.js.map +1 -1
- package/dist/domain/report.d.ts +596 -0
- package/dist/domain/report.d.ts.map +1 -1
- package/dist/domain/run.d.ts +607 -0
- package/dist/domain/run.d.ts.map +1 -1
- package/dist/domain/run.js +7 -1
- package/dist/domain/run.js.map +1 -1
- package/dist/plugin/harness-delivery-envelope.d.ts.map +1 -1
- package/dist/plugin/harness-delivery-envelope.js +2 -1
- package/dist/plugin/harness-delivery-envelope.js.map +1 -1
- package/dist/plugin/harness-request-router.d.ts.map +1 -1
- package/dist/plugin/harness-request-router.js +13 -0
- package/dist/plugin/harness-request-router.js.map +1 -1
- package/dist/plugin/harness-status-projection.js +13 -5
- package/dist/plugin/harness-status-projection.js.map +1 -1
- package/dist/store/run-event.d.ts +596 -0
- package/dist/store/run-event.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -130,7 +130,9 @@ export const consumeBudget = (run, budget) => {
|
|
|
130
130
|
export const canResume = (run) => hasAllowedStatus(RESUMEABLE_RUN_STATUSES, run.status);
|
|
131
131
|
export const canAdvanceRun = (run) => run.status === "blocked"
|
|
132
132
|
? run.blockingDetails?.kind === "blocked"
|
|
133
|
-
:
|
|
133
|
+
: run.status === "paused"
|
|
134
|
+
? true
|
|
135
|
+
: hasAllowedStatus(ADVANCEABLE_RUN_STATUSES, run.status);
|
|
134
136
|
export const canPause = (run) => hasAllowedStatus(PAUSEABLE_RUN_STATUSES, run.status);
|
|
135
137
|
export const canAnswer = (run) => hasAllowedStatus(ANSWERABLE_RUN_STATUSES, run.status);
|
|
136
138
|
export const isEnvBlocked = (run) => hasAllowedStatus(ENV_BLOCKED_RUN_STATUSES, run.status);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-state.js","sourceRoot":"","sources":["../../src/controller/run-state.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"run-state.js","sourceRoot":"","sources":["../../src/controller/run-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streamlined-runner.d.ts","sourceRoot":"","sources":["../../src/controller/streamlined-runner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAA8B,WAAW,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"streamlined-runner.d.ts","sourceRoot":"","sources":["../../src/controller/streamlined-runner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAA8B,WAAW,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAQjG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAEnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AASxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAgB1D,MAAM,MAAM,6BAA6B,GAAG;IAC1C,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAA;IACrC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAA;IAC/B,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAAA;IAChC,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IACvD,QAAQ,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IACjE,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IACjD,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,GAAG;QAAE,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;KAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;CAClF,CAAA;AAED,eAAO,MAAM,uBAAuB,GAAI,MAAM,6BAA6B;iBA4KpD,GAAG,eAAe,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC;CAqGlE,CAAA"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { PlanReviewSchema, TaskGraphSchema } from "../domain/index.js";
|
|
3
3
|
import { HARNESS_SESSION_ROLE } from "../session/index.js";
|
|
4
|
-
import { parseAgentJson } from "./agent-output.js";
|
|
4
|
+
import { describeContractRetryFeedback, emitAgentDiagnostics, parseAgentJson, } from "./agent-output.js";
|
|
5
5
|
import { buildContextSnapshot } from "./context-builder.js";
|
|
6
6
|
import { AgentOutputParseError, AgentRunFailedError, GraphValidationError, isReadOnlyContractError, } from "./errors.js";
|
|
7
7
|
import { validateTaskGraph } from "./graph-validator.js";
|
|
8
8
|
import { plannerTaskPrompt } from "./role-prompts.js";
|
|
9
|
-
import { consumeBudget, withStatus } from "./run-state.js";
|
|
9
|
+
import { consumeBudget, RunBudgetExceededError, withStatus } from "./run-state.js";
|
|
10
10
|
import { getTaskGraphPlannerContract } from "./task-graph-contract.js";
|
|
11
11
|
const StreamlinedPlanReviewSchema = z
|
|
12
12
|
.object({
|
|
@@ -63,7 +63,7 @@ export const createStreamlinedRunner = (deps) => {
|
|
|
63
63
|
taskGraph,
|
|
64
64
|
};
|
|
65
65
|
};
|
|
66
|
-
const requestStreamlinedGraphReview = async (run, requirement, taskGraph) => {
|
|
66
|
+
const requestStreamlinedGraphReview = async (run, requirement, taskGraph, previousSchemaError) => {
|
|
67
67
|
const snapshot = buildContextSnapshot({
|
|
68
68
|
ids: deps.ids,
|
|
69
69
|
run,
|
|
@@ -82,6 +82,13 @@ export const createStreamlinedRunner = (deps) => {
|
|
|
82
82
|
"执行轻量 TaskGraph 审查,不执行完整 ContextPackage/PlanReview 流程。",
|
|
83
83
|
"审查每个 task 的 verificationPlan、allowedPaths 和验收项覆盖。",
|
|
84
84
|
"复用 PlanReview 数据契约输出结构化图审查结果。",
|
|
85
|
+
"只输出符合契约的完整 JSON,不要解释、不要对话。",
|
|
86
|
+
...(previousSchemaError === undefined
|
|
87
|
+
? []
|
|
88
|
+
: [
|
|
89
|
+
`上一次审查输出未通过契约校验,具体原因:${previousSchemaError}`,
|
|
90
|
+
"本次必须修正上述问题后一次性输出合规 JSON。",
|
|
91
|
+
]),
|
|
85
92
|
],
|
|
86
93
|
evidence: [
|
|
87
94
|
{
|
|
@@ -109,6 +116,54 @@ export const createStreamlinedRunner = (deps) => {
|
|
|
109
116
|
}
|
|
110
117
|
return output.planReview;
|
|
111
118
|
};
|
|
119
|
+
/**
|
|
120
|
+
* 图审查契约失败的重试闭环:把 schema 错误摘要回喂 verifier 重试,
|
|
121
|
+
* 纳入 overall 预算计量;GraphValidationError(rejected)与 AgentRunFailedError
|
|
122
|
+
* 保持既有升级/终止语义,不进入 parse 重试。
|
|
123
|
+
*/
|
|
124
|
+
const requestStreamlinedGraphReviewWithRetry = async (run, requirement, taskGraph) => {
|
|
125
|
+
let currentRun = run;
|
|
126
|
+
let lastError;
|
|
127
|
+
let wastedAttempts = 0;
|
|
128
|
+
const maxAttempts = currentRun.budgets.overall.limit;
|
|
129
|
+
while (true) {
|
|
130
|
+
const isFinalAttempt = lastError !== undefined &&
|
|
131
|
+
(wastedAttempts >= maxAttempts - 1 || currentRun.budgets.overall.used >= maxAttempts - 1);
|
|
132
|
+
try {
|
|
133
|
+
return await requestStreamlinedGraphReview(currentRun, requirement, taskGraph, lastError === undefined
|
|
134
|
+
? undefined
|
|
135
|
+
: describeContractRetryFeedback(lastError, "verifier", isFinalAttempt));
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
if (!(error instanceof AgentOutputParseError)) {
|
|
139
|
+
throw error;
|
|
140
|
+
}
|
|
141
|
+
lastError = error;
|
|
142
|
+
emitAgentDiagnostics("verifier", error, wastedAttempts + 1);
|
|
143
|
+
const isBudgetExemptFailure = error.reasonCode === "empty-output" || error.reasonCode === "truncated";
|
|
144
|
+
if (isBudgetExemptFailure) {
|
|
145
|
+
wastedAttempts += 1;
|
|
146
|
+
if (wastedAttempts >= maxAttempts) {
|
|
147
|
+
throw error;
|
|
148
|
+
}
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
currentRun = (() => {
|
|
152
|
+
try {
|
|
153
|
+
return consumeBudget(currentRun, "overall");
|
|
154
|
+
}
|
|
155
|
+
catch (budgetError) {
|
|
156
|
+
// 预算耗尽按契约失败归因终止:携带真实角色与具体 schema 原因,
|
|
157
|
+
// 而不是退化为泛化的 BUDGET 归因(对齐 spec 的按角色归因要求)。
|
|
158
|
+
if (budgetError instanceof RunBudgetExceededError && lastError !== undefined) {
|
|
159
|
+
throw lastError;
|
|
160
|
+
}
|
|
161
|
+
throw budgetError;
|
|
162
|
+
}
|
|
163
|
+
})();
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
};
|
|
112
167
|
return {
|
|
113
168
|
async execute(run, requirement) {
|
|
114
169
|
const planningSnapshot = buildContextSnapshot({
|
|
@@ -161,7 +216,7 @@ export const createStreamlinedRunner = (deps) => {
|
|
|
161
216
|
await deps.writer.persist(planReady, deps.writer.createEvent(run.runId, "run.planning.streamlined.completed", {
|
|
162
217
|
graphId: taskGraph.graphId,
|
|
163
218
|
}));
|
|
164
|
-
const planReview = await
|
|
219
|
+
const planReview = await requestStreamlinedGraphReviewWithRetry(run, requirement, taskGraph);
|
|
165
220
|
const reviewed = {
|
|
166
221
|
...planReady,
|
|
167
222
|
planReview,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streamlined-runner.js","sourceRoot":"","sources":["../../src/controller/streamlined-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,
|
|
1
|
+
{"version":3,"file":"streamlined-runner.js","sourceRoot":"","sources":["../../src/controller/streamlined-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-executor.d.ts","sourceRoot":"","sources":["../../src/controller/task-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmC,KAAK,GAAG,EAAa,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"task-executor.d.ts","sourceRoot":"","sources":["../../src/controller/task-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmC,KAAK,GAAG,EAAa,MAAM,oBAAoB,CAAA;AAQzF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AACnE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAA;AAkBhE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAkBhD,KAAK,oBAAoB,GAAG;IAC1B,QAAQ,CAAC,OAAO,EAAE,0BAA0B,CAAA;IAC5C,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAA;IACrC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAA;IAC/B,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;CACxD,CAAA;AAkBD,eAAO,MAAM,kBAAkB,GAAI,OAAO,oBAAoB;oBAi1B/B,UAAU,KAAG,OAAO,CAAC,GAAG,CAAC;CAwvBvD,CAAA"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { AgentResultSchema } from "../domain/index.js";
|
|
2
2
|
import { normalizeVerificationCommand } from "../verification/command-policy.js";
|
|
3
3
|
import { VerificationExecutionStatus } from "../verification/index.js";
|
|
4
|
-
import { createGitWorkspaceAdapter, createGitWorktreeAdapter } from "../workspace/index.js";
|
|
4
|
+
import { createGitWorkspaceAdapter, createGitWorktreeAdapter, } from "../workspace/index.js";
|
|
5
5
|
import { createEvidence } from "./evidence-factory.js";
|
|
6
6
|
import { resolveFailureAnalysis } from "./failure-analysis.js";
|
|
7
7
|
import { classifyFailureScope } from "./failure-classification.js";
|
|
8
8
|
import { createContextGapFailure, createImplementationFailure, createMergeConflictFailure, createModelFailure, createScopeDriftFailure, createVerificationEnvironmentFailure, } from "./failure-factory.js";
|
|
9
9
|
import { orderTasks } from "./graph-validator.js";
|
|
10
|
+
import { createParallelTaskDelta } from "./parallel-task-delta.js";
|
|
10
11
|
import { reassessRemainingTasks } from "./reassessor.js";
|
|
11
12
|
import { runRepairLoop } from "./repair-loop.js";
|
|
12
13
|
import { finalizeRunAcceptance } from "./run-acceptance.js";
|
|
@@ -729,7 +730,7 @@ export const createTaskExecutor = (input) => {
|
|
|
729
730
|
if (readyTasks.length >= 2) {
|
|
730
731
|
const batchResult = await runParallelReadyBatch(currentRun, readyTasks);
|
|
731
732
|
if (batchResult.kind === "paused") {
|
|
732
|
-
return batchResult.run;
|
|
733
|
+
return reassessAfterFailure(batchResult.run);
|
|
733
734
|
}
|
|
734
735
|
if (batchResult.kind === "completed") {
|
|
735
736
|
currentRun = batchResult.run;
|
|
@@ -786,7 +787,7 @@ export const createTaskExecutor = (input) => {
|
|
|
786
787
|
break;
|
|
787
788
|
currentRun = await runTask(currentRun, task);
|
|
788
789
|
if (currentRun.status !== "executing") {
|
|
789
|
-
return currentRun;
|
|
790
|
+
return reassessAfterFailure(currentRun);
|
|
790
791
|
}
|
|
791
792
|
const completedTask = currentRun.taskGraph.tasks.find((candidate) => candidate.taskId === task.taskId);
|
|
792
793
|
if (completedTask?.status === "completed") {
|
|
@@ -842,7 +843,7 @@ export const createTaskExecutor = (input) => {
|
|
|
842
843
|
}
|
|
843
844
|
currentRun = await runTask(currentRun, task);
|
|
844
845
|
if (currentRun.status !== "executing") {
|
|
845
|
-
return currentRun;
|
|
846
|
+
return reassessAfterFailure(currentRun);
|
|
846
847
|
}
|
|
847
848
|
const completedTask = currentRun.taskGraph.tasks.find((candidate) => candidate.taskId === task.taskId);
|
|
848
849
|
if (completedTask?.status === "completed") {
|
|
@@ -893,9 +894,27 @@ export const createTaskExecutor = (input) => {
|
|
|
893
894
|
runtime: input.runtime,
|
|
894
895
|
run: currentRun,
|
|
895
896
|
});
|
|
897
|
+
const acceptanceBlockingDetails = runAcceptanceResult.status === "blocked"
|
|
898
|
+
? {
|
|
899
|
+
kind: "blocked",
|
|
900
|
+
missingContext: runAcceptanceResult.runAcceptance.criterionDecisions
|
|
901
|
+
.filter((decision) => decision.status === "blocked" || decision.status === "unknown")
|
|
902
|
+
.map((decision) => decision.criterionId),
|
|
903
|
+
discoveredEvidence: runAcceptanceResult.runAcceptance.criterionDecisions.flatMap((decision) => decision.evidenceIds),
|
|
904
|
+
nextActions: ["补充缺失证据后执行 resume", "检查阻塞 criterion 后重新验收"],
|
|
905
|
+
failureIds: runAcceptanceResult.runAcceptance.criterionDecisions.flatMap((decision) => decision.failureIds),
|
|
906
|
+
criterionIds: runAcceptanceResult.runAcceptance.criterionDecisions
|
|
907
|
+
.filter((decision) => decision.status === "blocked" || decision.status === "unknown")
|
|
908
|
+
.map((decision) => decision.criterionId),
|
|
909
|
+
allowedOperations: ["resume", "report", "cancel"],
|
|
910
|
+
}
|
|
911
|
+
: undefined;
|
|
896
912
|
const completed = withPlannedStatus(withParts(parsePlannedRun({
|
|
897
913
|
...currentRun,
|
|
898
914
|
runAcceptance: runAcceptanceResult.runAcceptance,
|
|
915
|
+
...(acceptanceBlockingDetails === undefined
|
|
916
|
+
? {}
|
|
917
|
+
: { blockingDetails: acceptanceBlockingDetails }),
|
|
899
918
|
}), {
|
|
900
919
|
evidence: currentRun.evidence,
|
|
901
920
|
failures: runAcceptanceResult.failure === undefined
|
|
@@ -921,10 +940,6 @@ export const createTaskExecutor = (input) => {
|
|
|
921
940
|
verificationCommands: commands,
|
|
922
941
|
defaultWorkingDirectory: runWorkingDirectory(run),
|
|
923
942
|
});
|
|
924
|
-
if (result.records.length === 0 ||
|
|
925
|
-
result.records.some((record) => record.status !== VerificationExecutionStatus.passed)) {
|
|
926
|
-
return persistIntegrationVerificationFailure(run, task, "integration verification failed");
|
|
927
|
-
}
|
|
928
943
|
const evidence = result.records.map((record, index) => createEvidence({
|
|
929
944
|
ids: input.options.ids,
|
|
930
945
|
runId: run.runId,
|
|
@@ -940,6 +955,63 @@ export const createTaskExecutor = (input) => {
|
|
|
940
955
|
agentResults: run.agentResults,
|
|
941
956
|
workspace: run.workspace,
|
|
942
957
|
});
|
|
958
|
+
if (result.records.length === 0) {
|
|
959
|
+
const failure = createContextGapFailure({
|
|
960
|
+
failureId: input.options.ids.createFailureId(`${run.runId}-integration-empty`),
|
|
961
|
+
runId: run.runId,
|
|
962
|
+
taskId: task.taskId,
|
|
963
|
+
relatedEvidenceIds: [],
|
|
964
|
+
summary: "Integration verification produced no evidence records.",
|
|
965
|
+
detail: "At least one integration verification record is required before acceptance.",
|
|
966
|
+
recoveryPlan: "Rerun integration verification and capture a real result.",
|
|
967
|
+
missingContext: ["integration-verification-record"],
|
|
968
|
+
});
|
|
969
|
+
return (await analyzeFailure({
|
|
970
|
+
run: withParts(verified, {
|
|
971
|
+
evidence: verified.evidence,
|
|
972
|
+
failures: [...verified.failures, failure],
|
|
973
|
+
agentResults: verified.agentResults,
|
|
974
|
+
workspace: verified.workspace,
|
|
975
|
+
}),
|
|
976
|
+
task,
|
|
977
|
+
attempt: 1,
|
|
978
|
+
failure,
|
|
979
|
+
evidence,
|
|
980
|
+
})).run;
|
|
981
|
+
}
|
|
982
|
+
if (result.records.some((record) => record.status !== VerificationExecutionStatus.passed)) {
|
|
983
|
+
const failure = createImplementationFailure({
|
|
984
|
+
failureId: input.options.ids.createFailureId(`${run.runId}-integration-failed`),
|
|
985
|
+
runId: run.runId,
|
|
986
|
+
taskId: task.taskId,
|
|
987
|
+
...(evidence[0] === undefined ? {} : { failingEvidenceId: evidence[0].evidenceId }),
|
|
988
|
+
summary: "Integration verification failed after task execution.",
|
|
989
|
+
detail: "A run-level integration verification command returned a failed result.",
|
|
990
|
+
recoveryPlan: "Analyze the integration failure before authorizing a bounded repair.",
|
|
991
|
+
});
|
|
992
|
+
const analyzed = await analyzeFailure({
|
|
993
|
+
run: withParts(verified, {
|
|
994
|
+
evidence: verified.evidence,
|
|
995
|
+
failures: [...verified.failures, failure],
|
|
996
|
+
agentResults: verified.agentResults,
|
|
997
|
+
workspace: verified.workspace,
|
|
998
|
+
}),
|
|
999
|
+
task,
|
|
1000
|
+
attempt: 1,
|
|
1001
|
+
failure,
|
|
1002
|
+
evidence,
|
|
1003
|
+
});
|
|
1004
|
+
if (analyzed.repairRequested && analyzed.run.status === "executing" && task.repairEnabled) {
|
|
1005
|
+
return handleRepairRequest({
|
|
1006
|
+
run: analyzed.run,
|
|
1007
|
+
task,
|
|
1008
|
+
attempt: 1,
|
|
1009
|
+
failure: analyzed.failure,
|
|
1010
|
+
evidence,
|
|
1011
|
+
});
|
|
1012
|
+
}
|
|
1013
|
+
return analyzed.run;
|
|
1014
|
+
}
|
|
943
1015
|
await input.writer.persist(verified, input.writer.createEvent(run.runId, "run.integration.verified", {
|
|
944
1016
|
evidenceIds: evidence.map((item) => item.evidenceId),
|
|
945
1017
|
}));
|
|
@@ -948,28 +1020,37 @@ export const createTaskExecutor = (input) => {
|
|
|
948
1020
|
catch (error) {
|
|
949
1021
|
if (!(error instanceof Error))
|
|
950
1022
|
throw error;
|
|
951
|
-
|
|
1023
|
+
const failure = createVerificationEnvironmentFailure({
|
|
1024
|
+
failureId: input.options.ids.createFailureId(`${run.runId}-integration-environment`),
|
|
1025
|
+
runId: run.runId,
|
|
1026
|
+
taskId: task.taskId,
|
|
1027
|
+
commandName: commands[0]?.name ?? "integration verification",
|
|
1028
|
+
detail: error.message,
|
|
1029
|
+
});
|
|
1030
|
+
const blocked = withPlannedStatus(withParts(run, {
|
|
1031
|
+
evidence: run.evidence,
|
|
1032
|
+
failures: [...run.failures, failure],
|
|
1033
|
+
agentResults: run.agentResults,
|
|
1034
|
+
workspace: run.workspace,
|
|
1035
|
+
}), "blocked");
|
|
1036
|
+
const withDetails = parsePlannedRun({
|
|
1037
|
+
...blocked,
|
|
1038
|
+
blockingDetails: {
|
|
1039
|
+
kind: "blocked",
|
|
1040
|
+
missingContext: ["integration-environment"],
|
|
1041
|
+
discoveredEvidence: [],
|
|
1042
|
+
nextActions: ["修复集成验证环境后执行 resume"],
|
|
1043
|
+
failureIds: [failure.failureId],
|
|
1044
|
+
criterionIds: [],
|
|
1045
|
+
allowedOperations: ["resume", "report", "cancel"],
|
|
1046
|
+
},
|
|
1047
|
+
});
|
|
1048
|
+
await input.writer.persist(withDetails, input.writer.createEvent(run.runId, "run.integration.blocked", {
|
|
1049
|
+
failureId: failure.failureId,
|
|
1050
|
+
}));
|
|
1051
|
+
return withDetails;
|
|
952
1052
|
}
|
|
953
1053
|
};
|
|
954
|
-
const persistIntegrationVerificationFailure = async (run, task, detail) => {
|
|
955
|
-
const failure = createVerificationEnvironmentFailure({
|
|
956
|
-
failureId: input.options.ids.createFailureId(`${run.runId}-integration`),
|
|
957
|
-
runId: run.runId,
|
|
958
|
-
taskId: task.taskId,
|
|
959
|
-
commandName: "integration verification",
|
|
960
|
-
detail,
|
|
961
|
-
});
|
|
962
|
-
const nextRun = withParts(run, {
|
|
963
|
-
evidence: run.evidence,
|
|
964
|
-
failures: [...run.failures, failure],
|
|
965
|
-
agentResults: run.agentResults,
|
|
966
|
-
workspace: run.workspace,
|
|
967
|
-
});
|
|
968
|
-
await input.writer.persist(nextRun, input.writer.createEvent(run.runId, "run.integration.failed", {
|
|
969
|
-
failureId: failure.failureId,
|
|
970
|
-
}));
|
|
971
|
-
return nextRun;
|
|
972
|
-
};
|
|
973
1054
|
return { runTasks };
|
|
974
1055
|
async function runParallelReadyBatch(run, orderedTasks) {
|
|
975
1056
|
if (run.workspace.git.mode !== "git") {
|
|
@@ -1046,7 +1127,10 @@ export const createTaskExecutor = (input) => {
|
|
|
1046
1127
|
return { kind: "completed", run: serialRun };
|
|
1047
1128
|
}
|
|
1048
1129
|
case "parallel-completed":
|
|
1049
|
-
return {
|
|
1130
|
+
return {
|
|
1131
|
+
kind: "completed",
|
|
1132
|
+
run: mergeChildRuns(run, childRuns, new Map(result.results.map((item) => [item.task.taskId, item.lease]))),
|
|
1133
|
+
};
|
|
1050
1134
|
case "merge-conflict":
|
|
1051
1135
|
return { kind: "paused", run: await persistMergeConflict(run, result.conflict.detail) };
|
|
1052
1136
|
case "execution-failed":
|
|
@@ -1061,24 +1145,68 @@ export const createTaskExecutor = (input) => {
|
|
|
1061
1145
|
const result = run.agentResults.findLast((candidate) => candidate.role === "worker" && candidate.taskId === task.taskId);
|
|
1062
1146
|
return result?.status === "completed" ? result.changedPaths : [];
|
|
1063
1147
|
}
|
|
1064
|
-
function mergeChildRuns(parentRun, childRuns) {
|
|
1148
|
+
function mergeChildRuns(parentRun, childRuns, leasesByTaskId) {
|
|
1065
1149
|
let merged = parentRun;
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1150
|
+
const appliedDeltaIds = new Set();
|
|
1151
|
+
const deltas = childRuns
|
|
1152
|
+
.map((childRun) => {
|
|
1153
|
+
const task = childRun.taskGraph.tasks.find((candidate) => candidate.status === "completed" && candidate.taskId);
|
|
1154
|
+
if (task === undefined)
|
|
1155
|
+
return undefined;
|
|
1156
|
+
const lease = leasesByTaskId.get(task.taskId);
|
|
1157
|
+
if (lease === undefined)
|
|
1158
|
+
return undefined;
|
|
1159
|
+
return createParallelTaskDelta({
|
|
1160
|
+
parentRun,
|
|
1161
|
+
childRun,
|
|
1162
|
+
task,
|
|
1163
|
+
lease,
|
|
1164
|
+
});
|
|
1165
|
+
})
|
|
1166
|
+
.filter((delta) => delta !== undefined)
|
|
1167
|
+
.sort((left, right) => left.taskId.localeCompare(right.taskId));
|
|
1168
|
+
for (const delta of deltas) {
|
|
1169
|
+
if (delta.runId !== merged.runId)
|
|
1170
|
+
continue;
|
|
1171
|
+
if (appliedDeltaIds.has(delta.deltaId))
|
|
1172
|
+
continue;
|
|
1173
|
+
const parentTask = merged.taskGraph.tasks.find((candidate) => candidate.taskId === delta.taskId);
|
|
1174
|
+
if (parentTask === undefined)
|
|
1175
|
+
continue;
|
|
1176
|
+
if (delta.baselineDigest !== parentRun.workspace.git.baselineDiffDigest) {
|
|
1177
|
+
throw new Error(`stale parallel task delta baseline for ${delta.taskId}`);
|
|
1072
1178
|
}
|
|
1179
|
+
appliedDeltaIds.add(delta.deltaId);
|
|
1180
|
+
merged = withTask(merged, delta.task);
|
|
1073
1181
|
merged = withParts(merged, {
|
|
1074
|
-
evidence: uniqueById([...merged.evidence, ...
|
|
1075
|
-
failures: uniqueById([...merged.failures, ...
|
|
1076
|
-
agentResults: uniqueById([...merged.agentResults, ...
|
|
1077
|
-
workspace:
|
|
1182
|
+
evidence: uniqueById([...merged.evidence, ...delta.evidence], (item) => item.evidenceId),
|
|
1183
|
+
failures: uniqueById([...merged.failures, ...delta.failures], (item) => item.failureId),
|
|
1184
|
+
agentResults: uniqueById([...merged.agentResults, ...delta.agentResults], (item) => item.resultId),
|
|
1185
|
+
workspace: merged.workspace,
|
|
1078
1186
|
});
|
|
1187
|
+
merged = applyBudgetDelta(merged, delta.budgetDelta);
|
|
1079
1188
|
}
|
|
1080
1189
|
return merged;
|
|
1081
1190
|
}
|
|
1191
|
+
function applyBudgetDelta(run, delta) {
|
|
1192
|
+
return parsePlannedRun({
|
|
1193
|
+
...run,
|
|
1194
|
+
budgets: Object.fromEntries(Object.entries(run.budgets).map(([key, counter]) => [
|
|
1195
|
+
key,
|
|
1196
|
+
{
|
|
1197
|
+
...counter,
|
|
1198
|
+
used: checkedBudgetUsage(counter.used, delta[key] ?? 0, counter.limit, key, run.runId),
|
|
1199
|
+
},
|
|
1200
|
+
])),
|
|
1201
|
+
});
|
|
1202
|
+
}
|
|
1203
|
+
function checkedBudgetUsage(used, delta, limit, budget, runId) {
|
|
1204
|
+
const next = used + delta;
|
|
1205
|
+
if (next > limit) {
|
|
1206
|
+
throw new RunBudgetExceededError(runId, budget, limit);
|
|
1207
|
+
}
|
|
1208
|
+
return next;
|
|
1209
|
+
}
|
|
1082
1210
|
async function persistMergeConflict(run, detail) {
|
|
1083
1211
|
const task = firstIncompleteTask(run);
|
|
1084
1212
|
const failure = createMergeConflictFailure({
|
|
@@ -1149,6 +1277,54 @@ export const createTaskExecutor = (input) => {
|
|
|
1149
1277
|
}));
|
|
1150
1278
|
return paused;
|
|
1151
1279
|
}
|
|
1280
|
+
async function reassessAfterFailure(run) {
|
|
1281
|
+
const failure = run.failures.at(-1);
|
|
1282
|
+
if (failure === undefined ||
|
|
1283
|
+
!["implementation-defect", "scope-drift", "merge-conflict"].includes(failure.category)) {
|
|
1284
|
+
return run;
|
|
1285
|
+
}
|
|
1286
|
+
const affectedRemainingTasks = run.taskGraph.tasks
|
|
1287
|
+
.filter((task) => task.status !== "completed")
|
|
1288
|
+
.map((task) => task.taskId);
|
|
1289
|
+
if (affectedRemainingTasks.length === 0 || run.resolvedTier === "complex") {
|
|
1290
|
+
return run;
|
|
1291
|
+
}
|
|
1292
|
+
const event = {
|
|
1293
|
+
triggerTaskId: failure.taskId,
|
|
1294
|
+
previousTier: run.resolvedTier,
|
|
1295
|
+
newTier: "complex",
|
|
1296
|
+
reason: `Failure ${failure.failureId} requires conservative complexity escalation`,
|
|
1297
|
+
affectedRemainingTasks,
|
|
1298
|
+
};
|
|
1299
|
+
const updated = parsePlannedRun({
|
|
1300
|
+
...run,
|
|
1301
|
+
resolvedTier: "complex",
|
|
1302
|
+
resolvedRoute: "full",
|
|
1303
|
+
routingDecision: {
|
|
1304
|
+
...run.routingDecision,
|
|
1305
|
+
tier: "complex",
|
|
1306
|
+
governance: "full",
|
|
1307
|
+
scheduling: run.routingDecision?.scheduling ?? "serial",
|
|
1308
|
+
source: "reassessment",
|
|
1309
|
+
reasons: [event.reason],
|
|
1310
|
+
},
|
|
1311
|
+
reassessmentHistory: [...run.reassessmentHistory, event],
|
|
1312
|
+
taskGraph: {
|
|
1313
|
+
...run.taskGraph,
|
|
1314
|
+
tasks: run.taskGraph.tasks.map((task) => affectedRemainingTasks.includes(task.taskId)
|
|
1315
|
+
? { ...task, complexityTier: "complex" }
|
|
1316
|
+
: task),
|
|
1317
|
+
},
|
|
1318
|
+
});
|
|
1319
|
+
await input.writer.persist(updated, input.writer.createEvent(run.runId, "task.reassessment.after_failure", {
|
|
1320
|
+
triggerTaskId: event.triggerTaskId,
|
|
1321
|
+
failureId: failure.failureId,
|
|
1322
|
+
previousTier: event.previousTier,
|
|
1323
|
+
newTier: event.newTier,
|
|
1324
|
+
affectedRemainingTasks,
|
|
1325
|
+
}));
|
|
1326
|
+
return updated;
|
|
1327
|
+
}
|
|
1152
1328
|
};
|
|
1153
1329
|
const findWorkerScopeViolations = (task, output) => {
|
|
1154
1330
|
const violations = [];
|