harness-engineering-agent 0.3.15 → 0.3.16
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 +8 -7
- package/dist/agent/harness-role-capability-directory-data.js +2 -2
- package/dist/agent/harness-role-capability-directory-data.js.map +1 -1
- package/dist/controller/direct-runner.d.ts +1 -1
- package/dist/controller/direct-runner.d.ts.map +1 -1
- package/dist/controller/direct-runner.js +2 -64
- package/dist/controller/direct-runner.js.map +1 -1
- package/dist/controller/reassessor.d.ts.map +1 -1
- package/dist/controller/reassessor.js +6 -4
- package/dist/controller/reassessor.js.map +1 -1
- package/dist/controller/route-resolver.d.ts +7 -2
- package/dist/controller/route-resolver.d.ts.map +1 -1
- package/dist/controller/route-resolver.js +70 -8
- 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 +82 -16
- package/dist/controller/run-controller.js.map +1 -1
- package/dist/controller/run-reflection.d.ts +1 -1
- package/dist/controller/run-reflection.d.ts.map +1 -1
- package/dist/controller/run-reflection.js +3 -1
- package/dist/controller/run-reflection.js.map +1 -1
- package/dist/controller/streamlined-runner.js +7 -7
- 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 +62 -10
- package/dist/controller/task-executor.js.map +1 -1
- package/dist/domain/complexity.d.ts +37 -0
- package/dist/domain/complexity.d.ts.map +1 -1
- package/dist/domain/complexity.js +29 -0
- package/dist/domain/complexity.js.map +1 -1
- package/dist/domain/context-snapshot.d.ts +3 -3
- package/dist/domain/evidence.d.ts +2 -2
- package/dist/domain/index.d.ts +2 -2
- 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 +50 -4
- package/dist/domain/report.d.ts.map +1 -1
- package/dist/domain/run.d.ts +50 -4
- package/dist/domain/run.d.ts.map +1 -1
- package/dist/domain/run.js +20 -1
- package/dist/domain/run.js.map +1 -1
- package/dist/plugin/harness-request-router.d.ts.map +1 -1
- package/dist/plugin/harness-request-router.js +5 -1
- package/dist/plugin/harness-request-router.js.map +1 -1
- package/dist/store/run-event.d.ts +50 -4
- package/dist/store/run-event.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -39,15 +39,15 @@ Harness 是确定性的控制平面,内部 Agent 是受约束的概率执行
|
|
|
39
39
|
Nuwa (Intake) ── 结构化 HarnessIntent;start 携带 Requirement + complexityAssessment
|
|
40
40
|
|
|
|
41
41
|
v
|
|
42
|
-
Controller.resolveRoute() ──
|
|
42
|
+
Controller.resolveRoute() ── 先解析治理路径,再由 TaskGraph 事实解析调度模式
|
|
43
43
|
|
|
|
44
|
-
├── direct (trivial) ──
|
|
44
|
+
├── direct (trivial) ── 仅用于已验证的单 TaskGraph,复用 Worker/验证/证据闭环
|
|
45
45
|
|
|
|
46
46
|
├── streamlined (standard) ── Fuxi 单阶段(跳过 ContextPackage)→ Luban → Zhulong TaskReview(跳过 PlanReview)
|
|
47
47
|
|
|
|
48
48
|
├── full (complex) ── 完整流水线:Fuxi → Zhulong PlanReview → Luban → Zhulong TaskReview → Yinglong
|
|
49
49
|
|
|
|
50
|
-
└── parallel
|
|
50
|
+
└── scheduling=parallel ── 与治理路径正交,资格检查通过后启用
|
|
51
51
|
|
|
|
52
52
|
v
|
|
53
53
|
最终报告 (final-report.md)
|
|
@@ -62,7 +62,7 @@ Nuwa 在 Intake 阶段输出结构化复杂度评估(`complexityAssessment`)
|
|
|
62
62
|
- `suggestedRoute`: direct | streamlined | full | parallel
|
|
63
63
|
- `confidence`: high | medium | low
|
|
64
64
|
|
|
65
|
-
Controller
|
|
65
|
+
Controller 将 Nuwa 的评估视为建议并进行保守校验;TaskGraph 生成后,再依据真实任务、路径、依赖和工作区事实解析最终治理与调度决策:
|
|
66
66
|
- `estimatedFileCount > 10` → 强制 complex
|
|
67
67
|
- `estimatedCrossModuleDeps > 3` → 强制 complex
|
|
68
68
|
- `confidence === "low"` → 强制 complex
|
|
@@ -70,19 +70,20 @@ Controller 使用客观指标校验 Nuwa 的评估:
|
|
|
70
70
|
|
|
71
71
|
### 执行路径
|
|
72
72
|
|
|
73
|
-
|
|
|
73
|
+
| 治理路径 | 适用场景 | 跳过阶段 |
|
|
74
74
|
|------|----------|----------|
|
|
75
75
|
| `direct` | trivial 任务(单文件修改、配置调整) | Fuxi、Zhulong PlanReview、Yinglong |
|
|
76
76
|
| `streamlined` | standard 任务(多文件但单模块) | ContextPackage、Zhulong PlanReview |
|
|
77
77
|
| `full` | complex 任务(跨模块、架构变更) | 无 |
|
|
78
|
-
|
|
78
|
+
|
|
79
|
+
调度模式独立为 `serial` 或 `parallel`。`parallel` 不是 `full` 的下一级;资格不满足时在同一治理路径回退 `serial` 并记录原因。
|
|
79
80
|
|
|
80
81
|
### 自动升级
|
|
81
82
|
|
|
82
83
|
当低路径失败时,自动升级到更高路径:
|
|
83
84
|
- `direct` 失败 → 升级到 `streamlined`
|
|
84
85
|
- `streamlined` 失败 → 升级到 `full`
|
|
85
|
-
- `full` 失败 →
|
|
86
|
+
- `full` 失败 → 进入失败分析、有限重试或修复链
|
|
86
87
|
|
|
87
88
|
升级时保留已有 evidence,不重复已完成的工作。
|
|
88
89
|
|
|
@@ -66,7 +66,7 @@ export const HARNESS_ROLE_CAPABILITY_DIRECTORY = validateHarnessRoleCapabilityDi
|
|
|
66
66
|
"",
|
|
67
67
|
"## 复杂度评估指引",
|
|
68
68
|
"",
|
|
69
|
-
"对于 `start` 意图,你必须在 `requirement`
|
|
69
|
+
"对于 `start` 意图,你必须在 `requirement` 中包含建议性的 `complexityAssessment` 字段;Controller 会基于 TaskGraph 和工作区事实做最终决策。",
|
|
70
70
|
"",
|
|
71
71
|
"### 复杂度分级标准",
|
|
72
72
|
"",
|
|
@@ -74,7 +74,7 @@ export const HARNESS_ROLE_CAPABILITY_DIRECTORY = validateHarnessRoleCapabilityDi
|
|
|
74
74
|
"|------|------|-----------|----------|",
|
|
75
75
|
"| trivial | 单文件修改、配置调整、简单文本替换 | 1-2 | direct |",
|
|
76
76
|
"| standard | 多文件但单模块、明确边界的功能 | 3-10 | streamlined |",
|
|
77
|
-
"| complex | 跨模块、架构变更、需要多轮审查 | >10 | full
|
|
77
|
+
"| complex | 跨模块、架构变更、需要多轮审查 | >10 | full(parallel 由 Controller 独立判断) |",
|
|
78
78
|
"",
|
|
79
79
|
"### 评估步骤",
|
|
80
80
|
"",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness-role-capability-directory-data.js","sourceRoot":"","sources":["../../src/agent/harness-role-capability-directory-data.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"harness-role-capability-directory-data.js","sourceRoot":"","sources":["../../src/agent/harness-role-capability-directory-data.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,6 @@ export type DirectRunnerDependencies = {
|
|
|
10
10
|
readonly upgradeRoute: (run: Run, reason: string) => Promise<Run>;
|
|
11
11
|
};
|
|
12
12
|
export declare const createDirectRunner: (deps: DirectRunnerDependencies) => {
|
|
13
|
-
execute(run: Run,
|
|
13
|
+
execute(run: Run, _requirement: Requirement): Promise<Run>;
|
|
14
14
|
};
|
|
15
15
|
//# sourceMappingURL=direct-runner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"direct-runner.d.ts","sourceRoot":"","sources":["../../src/controller/direct-runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"direct-runner.d.ts","sourceRoot":"","sources":["../../src/controller/direct-runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAE1D,MAAM,MAAM,wBAAwB,GAAG;IACrC,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;CAClE,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,MAAM,wBAAwB;iBAE1C,GAAG,gBAAgB,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC;CAOnE,CAAA"}
|
|
@@ -1,69 +1,7 @@
|
|
|
1
|
-
import { HARNESS_SESSION_ROLE } from "../session/index.js";
|
|
2
|
-
import { buildContextSnapshot } from "./context-builder.js";
|
|
3
|
-
import { AgentOutputParseError, AgentRunFailedError } from "./errors.js";
|
|
4
|
-
import { withStatus } from "./run-state.js";
|
|
5
1
|
export const createDirectRunner = (deps) => {
|
|
6
2
|
return {
|
|
7
|
-
async execute(run,
|
|
8
|
-
|
|
9
|
-
const snapshot = buildContextSnapshot({
|
|
10
|
-
ids: deps.ids,
|
|
11
|
-
run,
|
|
12
|
-
phase: "executing",
|
|
13
|
-
attempt: 0,
|
|
14
|
-
evidence: run.evidence,
|
|
15
|
-
});
|
|
16
|
-
const executing = {
|
|
17
|
-
...withStatus(run, "executing"),
|
|
18
|
-
contextSnapshot: snapshot,
|
|
19
|
-
};
|
|
20
|
-
await deps.writer.persist(executing, deps.writer.createEvent(run.runId, "run.executing.direct", {
|
|
21
|
-
route: "direct",
|
|
22
|
-
status: "executing",
|
|
23
|
-
contextId: snapshot.contextId,
|
|
24
|
-
contextDigest: snapshot.contentDigest,
|
|
25
|
-
}));
|
|
26
|
-
const outputText = await deps.runtime.sendAgent({
|
|
27
|
-
runId: run.runId,
|
|
28
|
-
role: HARNESS_SESSION_ROLE.worker,
|
|
29
|
-
title: requirement.title,
|
|
30
|
-
brief: JSON.stringify({ requirement, runId: run.runId }),
|
|
31
|
-
constraints: [
|
|
32
|
-
"直接实现需求,不需要生成 TaskGraph。",
|
|
33
|
-
"输出结构化 WorkerOutput JSON。",
|
|
34
|
-
"只修改必要的文件。",
|
|
35
|
-
],
|
|
36
|
-
evidence: [],
|
|
37
|
-
outputContract: {
|
|
38
|
-
schemaVersion: "1.0.0",
|
|
39
|
-
type: "WorkerOutput",
|
|
40
|
-
requiredFields: ["schemaVersion", "role", "status", "summary"],
|
|
41
|
-
},
|
|
42
|
-
messageLabel: `direct-worker-${run.runId}`,
|
|
43
|
-
contextId: snapshot.contextId,
|
|
44
|
-
contextVersion: snapshot.version,
|
|
45
|
-
contextDigest: snapshot.contentDigest,
|
|
46
|
-
phase: "executing",
|
|
47
|
-
});
|
|
48
|
-
try {
|
|
49
|
-
const output = JSON.parse(outputText);
|
|
50
|
-
if (output.status === "failed" || output.status === "blocked") {
|
|
51
|
-
const upgraded = await deps.upgradeRoute(run, `direct path failed: ${output.summary ?? "worker reported failure"}`);
|
|
52
|
-
return upgraded;
|
|
53
|
-
}
|
|
54
|
-
const completed = { ...withStatus(run, "completed"), contextSnapshot: snapshot };
|
|
55
|
-
await deps.writer.persist(completed, deps.writer.createEvent(run.runId, "run.completed.direct", {
|
|
56
|
-
summary: output.summary,
|
|
57
|
-
}));
|
|
58
|
-
return completed;
|
|
59
|
-
}
|
|
60
|
-
catch (error) {
|
|
61
|
-
if (error instanceof AgentRunFailedError || error instanceof AgentOutputParseError) {
|
|
62
|
-
const upgraded = await deps.upgradeRoute(run, `direct path failed: ${error.message}`);
|
|
63
|
-
return upgraded;
|
|
64
|
-
}
|
|
65
|
-
throw error;
|
|
66
|
-
}
|
|
3
|
+
async execute(run, _requirement) {
|
|
4
|
+
return deps.upgradeRoute(run, "legacy direct execution lacks a verified TaskGraph and cannot satisfy the minimum control loop");
|
|
67
5
|
},
|
|
68
6
|
};
|
|
69
7
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"direct-runner.js","sourceRoot":"","sources":["../../src/controller/direct-runner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"direct-runner.js","sourceRoot":"","sources":["../../src/controller/direct-runner.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAA8B,EAAE,EAAE;IACnE,OAAO;QACL,KAAK,CAAC,OAAO,CAAC,GAAQ,EAAE,YAAyB;YAC/C,OAAO,IAAI,CAAC,YAAY,CACtB,GAAG,EACH,gGAAgG,CACjG,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reassessor.d.ts","sourceRoot":"","sources":["../../src/controller/reassessor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAwB,iBAAiB,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAE5F,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAA;IACjB,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,IAAI,EAAE,CAAA;CACnC,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAA;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAA;CACtD,CAAA;
|
|
1
|
+
{"version":3,"file":"reassessor.d.ts","sourceRoot":"","sources":["../../src/controller/reassessor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAwB,iBAAiB,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAE5F,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAA;IACjB,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,IAAI,EAAE,CAAA;CACnC,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAA;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAA;CACtD,CAAA;AAsBD,eAAO,MAAM,sBAAsB,GAAI,OAAO,iBAAiB,KAAG,kBAyFjE,CAAA"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
const calculateDeviationRatio = (completedTask, assessment, totalTaskCount) => {
|
|
1
|
+
const calculateDeviationRatio = (run, completedTask, assessment, totalTaskCount) => {
|
|
2
2
|
const estimatedPerTask = assessment.estimatedFileCount / totalTaskCount;
|
|
3
|
-
const actualChangedPaths = completedTask.
|
|
3
|
+
const actualChangedPaths = new Set(run.agentResults.flatMap((result) => result.role === "worker" && result.taskId === completedTask.taskId && "changedPaths" in result
|
|
4
|
+
? result.changedPaths
|
|
5
|
+
: [])).size;
|
|
4
6
|
if (estimatedPerTask === 0) {
|
|
5
7
|
return actualChangedPaths > 0 ? 10 : 0;
|
|
6
8
|
}
|
|
@@ -16,7 +18,7 @@ export const reassessRemainingTasks = (input) => {
|
|
|
16
18
|
if (remainingTasks.length === 0) {
|
|
17
19
|
return { shouldReassess: false };
|
|
18
20
|
}
|
|
19
|
-
const deviationRatio = calculateDeviationRatio(completedTask, complexityAssessment, allTasks.length);
|
|
21
|
+
const deviationRatio = calculateDeviationRatio(run, completedTask, complexityAssessment, allTasks.length);
|
|
20
22
|
const currentTier = run.resolvedTier;
|
|
21
23
|
if (deviationRatio > 3.0 || completedTask.status === "failed") {
|
|
22
24
|
const newTier = "complex";
|
|
@@ -50,7 +52,7 @@ export const reassessRemainingTasks = (input) => {
|
|
|
50
52
|
if (downgradeCount === 0 && deviationRatio < 0.3) {
|
|
51
53
|
const allCompletedTasks = allTasks.filter((task) => task.status === "completed");
|
|
52
54
|
const allLowDeviation = allCompletedTasks.every((task) => {
|
|
53
|
-
const ratio = calculateDeviationRatio(task, complexityAssessment, allTasks.length);
|
|
55
|
+
const ratio = calculateDeviationRatio(run, task, complexityAssessment, allTasks.length);
|
|
54
56
|
return ratio < 0.3;
|
|
55
57
|
});
|
|
56
58
|
if (allLowDeviation) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reassessor.js","sourceRoot":"","sources":["../../src/controller/reassessor.ts"],"names":[],"mappings":"AAcA,MAAM,uBAAuB,GAAG,CAC9B,aAAmB,EACnB,UAAgC,EAChC,cAAsB,EACd,EAAE;IACV,MAAM,gBAAgB,GAAG,UAAU,CAAC,kBAAkB,GAAG,cAAc,CAAA;IACvE,MAAM,kBAAkB,GAAG,
|
|
1
|
+
{"version":3,"file":"reassessor.js","sourceRoot":"","sources":["../../src/controller/reassessor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
-
import type { ComplexityAssessment, ComplexityTier, ExecutionRoute } from "../domain/index.js";
|
|
1
|
+
import type { ComplexityAssessment, ComplexityTier, ExecutionRoute, RoutingDecision, TaskGraph } from "../domain/index.js";
|
|
2
2
|
export type RouteResolution = {
|
|
3
3
|
readonly resolvedTier: ComplexityTier;
|
|
4
4
|
readonly resolvedRoute: ExecutionRoute;
|
|
5
|
+
readonly routingDecision: RoutingDecision;
|
|
5
6
|
};
|
|
6
|
-
export
|
|
7
|
+
export type RouteFacts = {
|
|
8
|
+
readonly taskGraph: TaskGraph;
|
|
9
|
+
readonly workspaceMode: "git" | "non-git";
|
|
10
|
+
};
|
|
11
|
+
export declare const resolveRoute: (assessment: ComplexityAssessment, facts?: RouteFacts) => RouteResolution;
|
|
7
12
|
//# sourceMappingURL=route-resolver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-resolver.d.ts","sourceRoot":"","sources":["../../src/controller/route-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"route-resolver.d.ts","sourceRoot":"","sources":["../../src/controller/route-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,cAAc,EACd,cAAc,EAEd,eAAe,EAEf,SAAS,EACV,MAAM,oBAAoB,CAAA;AAG3B,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,YAAY,EAAE,cAAc,CAAA;IACrC,QAAQ,CAAC,aAAa,EAAE,cAAc,CAAA;IACtC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAA;CAC1C,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;IAC7B,QAAQ,CAAC,aAAa,EAAE,KAAK,GAAG,SAAS,CAAA;CAC1C,CAAA;AAED,eAAO,MAAM,YAAY,GACvB,YAAY,oBAAoB,EAChC,QAAQ,UAAU,KACjB,eAgFF,CAAA"}
|
|
@@ -1,25 +1,87 @@
|
|
|
1
|
-
|
|
1
|
+
import { analyzeWorktreeEligibility } from "./worktree-eligibility.js";
|
|
2
|
+
export const resolveRoute = (assessment, facts) => {
|
|
2
3
|
let tier = assessment.tier;
|
|
3
|
-
let
|
|
4
|
+
let governance = assessment.suggestedRoute === "parallel" ? "full" : assessment.suggestedRoute;
|
|
5
|
+
let scheduling = "serial";
|
|
6
|
+
const reasons = ["resolved from Intake assessment"];
|
|
7
|
+
if (facts === undefined && governance === "direct") {
|
|
8
|
+
governance = "streamlined";
|
|
9
|
+
reasons.push("direct execution requires a verified TaskGraph");
|
|
10
|
+
}
|
|
4
11
|
if (assessment.estimatedFileCount > 10) {
|
|
5
12
|
tier = "complex";
|
|
6
|
-
if (
|
|
7
|
-
|
|
13
|
+
if (governance !== "full") {
|
|
14
|
+
governance = "full";
|
|
15
|
+
reasons.push("estimated file count exceeds 10");
|
|
8
16
|
}
|
|
9
17
|
}
|
|
10
18
|
if (assessment.estimatedCrossModuleDeps > 3) {
|
|
11
19
|
tier = "complex";
|
|
20
|
+
governance = "full";
|
|
21
|
+
reasons.push("estimated cross-module dependencies exceed 3");
|
|
12
22
|
}
|
|
13
23
|
if (assessment.confidence === "low") {
|
|
14
24
|
tier = "complex";
|
|
15
|
-
|
|
25
|
+
governance = "full";
|
|
26
|
+
reasons.push("assessment confidence is low");
|
|
16
27
|
}
|
|
17
28
|
if (assessment.estimatedFileCount <= 2 &&
|
|
18
29
|
assessment.estimatedCrossModuleDeps === 0 &&
|
|
19
|
-
assessment.confidence === "high"
|
|
30
|
+
assessment.confidence === "high" &&
|
|
31
|
+
assessment.tier !== "complex") {
|
|
20
32
|
tier = "trivial";
|
|
21
|
-
|
|
33
|
+
if (facts !== undefined && qualifiesForDirect(facts.taskGraph)) {
|
|
34
|
+
governance = "direct";
|
|
35
|
+
reasons.push("verified single-task graph qualifies for direct governance");
|
|
36
|
+
}
|
|
37
|
+
else if (facts === undefined) {
|
|
38
|
+
reasons.push("direct execution requires a verified TaskGraph");
|
|
39
|
+
}
|
|
22
40
|
}
|
|
23
|
-
|
|
41
|
+
if (facts !== undefined) {
|
|
42
|
+
const repositories = new Set(facts.taskGraph.tasks.flatMap((task) => (task.repositoryId ? [task.repositoryId] : [])));
|
|
43
|
+
if (repositories.size > 1) {
|
|
44
|
+
tier = "complex";
|
|
45
|
+
governance = "full";
|
|
46
|
+
reasons.push("verified TaskGraph spans multiple repositories");
|
|
47
|
+
}
|
|
48
|
+
scheduling = resolveScheduling(facts);
|
|
49
|
+
reasons.push(scheduling === "parallel"
|
|
50
|
+
? "verified TaskGraph is eligible for Worktree parallelism"
|
|
51
|
+
: "verified TaskGraph requires serial scheduling");
|
|
52
|
+
}
|
|
53
|
+
if (tier === "complex")
|
|
54
|
+
governance = "full";
|
|
55
|
+
if (tier === "standard" && governance === "direct")
|
|
56
|
+
governance = "streamlined";
|
|
57
|
+
const resolvedRoute = governance === "full" && scheduling === "parallel" ? "parallel" : governance;
|
|
58
|
+
return {
|
|
59
|
+
resolvedTier: tier,
|
|
60
|
+
resolvedRoute,
|
|
61
|
+
routingDecision: {
|
|
62
|
+
tier,
|
|
63
|
+
governance,
|
|
64
|
+
scheduling,
|
|
65
|
+
source: "intake",
|
|
66
|
+
reasons,
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
const qualifiesForDirect = (taskGraph) => {
|
|
71
|
+
const task = taskGraph.tasks[0];
|
|
72
|
+
return (taskGraph.tasks.length === 1 &&
|
|
73
|
+
task !== undefined &&
|
|
74
|
+
task.allowedPaths.length <= 2 &&
|
|
75
|
+
task.dependencies.length === 0 &&
|
|
76
|
+
task.verificationPlan.length > 0);
|
|
77
|
+
};
|
|
78
|
+
const resolveScheduling = (facts) => {
|
|
79
|
+
if (facts.workspaceMode !== "git" || facts.taskGraph.tasks.length < 2)
|
|
80
|
+
return "serial";
|
|
81
|
+
const eligibility = analyzeWorktreeEligibility({
|
|
82
|
+
candidates: facts.taskGraph.tasks,
|
|
83
|
+
completedTaskIds: new Set(),
|
|
84
|
+
});
|
|
85
|
+
return eligibility.kind === "parallel" ? "parallel" : "serial";
|
|
24
86
|
};
|
|
25
87
|
//# sourceMappingURL=route-resolver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-resolver.js","sourceRoot":"","sources":["../../src/controller/route-resolver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"route-resolver.js","sourceRoot":"","sources":["../../src/controller/route-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-controller.d.ts","sourceRoot":"","sources":["../../src/controller/run-controller.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,0BAA0B,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AA8D/E,eAAO,MAAM,mBAAmB,GAAI,SAAS,0BAA0B,KAAG,
|
|
1
|
+
{"version":3,"file":"run-controller.d.ts","sourceRoot":"","sources":["../../src/controller/run-controller.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,0BAA0B,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AA8D/E,eAAO,MAAM,mBAAmB,GAAI,SAAS,0BAA0B,KAAG,aAw6BzE,CAAA"}
|
|
@@ -259,7 +259,7 @@ export const createRunController = (options) => {
|
|
|
259
259
|
requirement,
|
|
260
260
|
contextPackage: contextResult.contextPackage,
|
|
261
261
|
});
|
|
262
|
-
validateTaskGraph(taskGraph, requirement, run.runId);
|
|
262
|
+
validateTaskGraph(taskGraph, requirement, run.runId, run.resolvedTier);
|
|
263
263
|
ensureExecutionCategoriesConfigured(taskGraph);
|
|
264
264
|
const planReview = await requestPlanReview({
|
|
265
265
|
run: planningRun,
|
|
@@ -330,37 +330,71 @@ export const createRunController = (options) => {
|
|
|
330
330
|
}));
|
|
331
331
|
return reflected;
|
|
332
332
|
};
|
|
333
|
-
const runTasksWithReflection = async (run) =>
|
|
333
|
+
const runTasksWithReflection = async (run) => {
|
|
334
|
+
const assessment = run.complexityAssessment ?? {
|
|
335
|
+
tier: "complex",
|
|
336
|
+
rationale: "No Intake assessment was persisted.",
|
|
337
|
+
estimatedFileCount: Math.max(1, run.taskGraph.tasks.length),
|
|
338
|
+
estimatedCrossModuleDeps: 0,
|
|
339
|
+
suggestedRoute: "full",
|
|
340
|
+
confidence: "low",
|
|
341
|
+
};
|
|
342
|
+
const resolution = resolveRoute(assessment, {
|
|
343
|
+
taskGraph: run.taskGraph,
|
|
344
|
+
workspaceMode: run.workspace.git.mode,
|
|
345
|
+
});
|
|
346
|
+
const routed = parsePlannedRun({
|
|
347
|
+
...run,
|
|
348
|
+
resolvedTier: resolution.resolvedTier,
|
|
349
|
+
resolvedRoute: resolution.resolvedRoute,
|
|
350
|
+
routingDecision: { ...resolution.routingDecision, source: "task-graph" },
|
|
351
|
+
});
|
|
352
|
+
await writer.persist(routed, writer.createEvent(run.runId, "run.routing.resolved", {
|
|
353
|
+
routingDecision: resolution.routingDecision,
|
|
354
|
+
}));
|
|
355
|
+
return recordReflection(await runTasks(routed));
|
|
356
|
+
};
|
|
334
357
|
const upgradeRoute = async (run, reason) => {
|
|
335
|
-
const
|
|
336
|
-
|
|
358
|
+
const currentGovernance = run.routingDecision?.governance ??
|
|
359
|
+
(run.resolvedRoute === "parallel" ? "full" : run.resolvedRoute);
|
|
360
|
+
const currentScheduling = run.routingDecision?.scheduling ?? (run.resolvedRoute === "parallel" ? "parallel" : "serial");
|
|
361
|
+
let newGovernance;
|
|
337
362
|
let newTier;
|
|
338
|
-
switch (
|
|
363
|
+
switch (currentGovernance) {
|
|
339
364
|
case "direct":
|
|
340
|
-
|
|
365
|
+
newGovernance = "streamlined";
|
|
341
366
|
newTier = run.resolvedTier === "trivial" ? "standard" : run.resolvedTier;
|
|
342
367
|
break;
|
|
343
368
|
case "streamlined":
|
|
344
|
-
|
|
369
|
+
newGovernance = "full";
|
|
345
370
|
newTier = "complex";
|
|
346
371
|
break;
|
|
347
372
|
case "full":
|
|
348
|
-
|
|
373
|
+
newGovernance = "full";
|
|
349
374
|
newTier = "complex";
|
|
350
375
|
break;
|
|
351
|
-
case "parallel":
|
|
352
|
-
return run;
|
|
353
376
|
default:
|
|
354
377
|
return run;
|
|
355
378
|
}
|
|
379
|
+
if (currentGovernance === "full") {
|
|
380
|
+
return run;
|
|
381
|
+
}
|
|
382
|
+
const newRoute = newGovernance;
|
|
356
383
|
const upgraded = RunSchema.parse({
|
|
357
384
|
...run,
|
|
358
385
|
resolvedRoute: newRoute,
|
|
359
386
|
resolvedTier: newTier,
|
|
387
|
+
routingDecision: {
|
|
388
|
+
tier: newTier,
|
|
389
|
+
governance: newGovernance,
|
|
390
|
+
scheduling: currentScheduling,
|
|
391
|
+
source: "reassessment",
|
|
392
|
+
reasons: [reason],
|
|
393
|
+
},
|
|
360
394
|
reflectionSummary: createReflectionSummary({ ...run, resolvedRoute: newRoute, resolvedTier: newTier }, reason),
|
|
361
395
|
});
|
|
362
396
|
await writer.persist(upgraded, writer.createEvent(run.runId, "run.route.upgraded", {
|
|
363
|
-
previousRoute:
|
|
397
|
+
previousRoute: run.resolvedRoute,
|
|
364
398
|
newRoute,
|
|
365
399
|
previousTier: run.resolvedTier,
|
|
366
400
|
newTier,
|
|
@@ -460,6 +494,25 @@ export const createRunController = (options) => {
|
|
|
460
494
|
return blocked;
|
|
461
495
|
};
|
|
462
496
|
const continueRunWithWorkspace = async (current) => {
|
|
497
|
+
if (current.routingDecision?.source === "legacy") {
|
|
498
|
+
const migrated = RunSchema.parse({
|
|
499
|
+
...current,
|
|
500
|
+
routingDecision: {
|
|
501
|
+
...current.routingDecision,
|
|
502
|
+
source: "taskGraph" in current ? "task-graph" : "intake",
|
|
503
|
+
reasons: [...current.routingDecision.reasons, "legacy routing decision persisted"],
|
|
504
|
+
},
|
|
505
|
+
});
|
|
506
|
+
await writer.persist(migrated, writer.createEvent(current.runId, "run.routing.legacy_migrated", {
|
|
507
|
+
previousRoute: current.resolvedRoute,
|
|
508
|
+
routingDecision: {
|
|
509
|
+
...current.routingDecision,
|
|
510
|
+
source: "taskGraph" in current ? "task-graph" : "intake",
|
|
511
|
+
reasons: [...current.routingDecision.reasons, "legacy routing decision persisted"],
|
|
512
|
+
},
|
|
513
|
+
}));
|
|
514
|
+
return continueRunWithWorkspace(migrated);
|
|
515
|
+
}
|
|
463
516
|
const reconciliation = await runtime.reconcileOrphanSessions({
|
|
464
517
|
runId: current.runId,
|
|
465
518
|
actorId: "harness-recovery",
|
|
@@ -483,7 +536,8 @@ export const createRunController = (options) => {
|
|
|
483
536
|
if (current.status === "created" ||
|
|
484
537
|
current.status === "analyzing" ||
|
|
485
538
|
current.status === "planning") {
|
|
486
|
-
const route = current.
|
|
539
|
+
const route = current.routingDecision?.governance ??
|
|
540
|
+
(current.resolvedRoute === "parallel" ? "full" : current.resolvedRoute);
|
|
487
541
|
if (route === "direct") {
|
|
488
542
|
const directRunner = createDirectRunner({
|
|
489
543
|
runtime,
|
|
@@ -501,13 +555,13 @@ export const createRunController = (options) => {
|
|
|
501
555
|
ids: options.ids,
|
|
502
556
|
loadRun: loadRunWithRetry,
|
|
503
557
|
upgradeRoute,
|
|
504
|
-
runTasks,
|
|
558
|
+
runTasks: runTasksWithReflection,
|
|
505
559
|
});
|
|
506
|
-
return await
|
|
560
|
+
return await streamlinedRunner.execute(current, current.requirement);
|
|
507
561
|
}
|
|
508
562
|
const planning = await persistPlanningState(current);
|
|
509
563
|
const planningArtifacts = await requestPlan(planning, planning.requirement);
|
|
510
|
-
validateTaskGraph(planningArtifacts.taskGraph, planning.requirement, current.runId);
|
|
564
|
+
validateTaskGraph(planningArtifacts.taskGraph, planning.requirement, current.runId, current.resolvedTier);
|
|
511
565
|
runtime.clearInterruption(current.runId);
|
|
512
566
|
return await runTasksWithReflection(await persistExecutingState(parsePlannedRun({
|
|
513
567
|
...planning,
|
|
@@ -544,7 +598,17 @@ export const createRunController = (options) => {
|
|
|
544
598
|
const complexityAssessment = input.complexityAssessment;
|
|
545
599
|
const routeResolution = complexityAssessment
|
|
546
600
|
? resolveRoute(complexityAssessment)
|
|
547
|
-
: {
|
|
601
|
+
: {
|
|
602
|
+
resolvedTier: "complex",
|
|
603
|
+
resolvedRoute: "full",
|
|
604
|
+
routingDecision: {
|
|
605
|
+
tier: "complex",
|
|
606
|
+
governance: "full",
|
|
607
|
+
scheduling: "serial",
|
|
608
|
+
source: "intake",
|
|
609
|
+
reasons: ["missing Intake assessment; using conservative defaults"],
|
|
610
|
+
},
|
|
611
|
+
};
|
|
548
612
|
const created = RunSchema.parse({
|
|
549
613
|
schemaVersion: "1.0.0",
|
|
550
614
|
runId: options.ids.createRunId(),
|
|
@@ -574,6 +638,7 @@ export const createRunController = (options) => {
|
|
|
574
638
|
...(complexityAssessment ? { complexityAssessment } : {}),
|
|
575
639
|
resolvedTier: routeResolution.resolvedTier,
|
|
576
640
|
resolvedRoute: routeResolution.resolvedRoute,
|
|
641
|
+
routingDecision: routeResolution.routingDecision,
|
|
577
642
|
reflectionSummary: createReflectionSummary({
|
|
578
643
|
requirement,
|
|
579
644
|
failures: [],
|
|
@@ -589,6 +654,7 @@ export const createRunController = (options) => {
|
|
|
589
654
|
complexityAssessment,
|
|
590
655
|
resolvedTier: routeResolution.resolvedTier,
|
|
591
656
|
resolvedRoute: routeResolution.resolvedRoute,
|
|
657
|
+
routingDecision: routeResolution.routingDecision,
|
|
592
658
|
}
|
|
593
659
|
: {}),
|
|
594
660
|
}));
|