harness-engineering-agent 0.1.7 → 0.1.8

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.
Files changed (43) hide show
  1. package/README.md +15 -2
  2. package/dist/controller/agent-session.d.ts +15 -0
  3. package/dist/controller/agent-session.d.ts.map +1 -1
  4. package/dist/controller/agent-session.js +52 -7
  5. package/dist/controller/agent-session.js.map +1 -1
  6. package/dist/controller/contracts.d.ts +1 -0
  7. package/dist/controller/contracts.d.ts.map +1 -1
  8. package/dist/controller/errors.d.ts +5 -0
  9. package/dist/controller/errors.d.ts.map +1 -1
  10. package/dist/controller/errors.js +8 -0
  11. package/dist/controller/errors.js.map +1 -1
  12. package/dist/controller/run-controller.d.ts.map +1 -1
  13. package/dist/controller/run-controller.js +144 -78
  14. package/dist/controller/run-controller.js.map +1 -1
  15. package/dist/controller/run-state.d.ts +1 -0
  16. package/dist/controller/run-state.d.ts.map +1 -1
  17. package/dist/controller/run-state.js +12 -0
  18. package/dist/controller/run-state.js.map +1 -1
  19. package/dist/controller/task-executor.d.ts +1 -0
  20. package/dist/controller/task-executor.d.ts.map +1 -1
  21. package/dist/controller/task-executor.js +35 -0
  22. package/dist/controller/task-executor.js.map +1 -1
  23. package/dist/plugin/create-harness-plugin.d.ts.map +1 -1
  24. package/dist/plugin/create-harness-plugin.js +49 -1
  25. package/dist/plugin/create-harness-plugin.js.map +1 -1
  26. package/dist/plugin/harness-agent-config.js +3 -3
  27. package/dist/plugin/harness-agent-config.js.map +1 -1
  28. package/dist/plugin/harness-chat-hook.d.ts +1 -1
  29. package/dist/plugin/harness-chat-hook.d.ts.map +1 -1
  30. package/dist/plugin/harness-chat-hook.js +15 -23
  31. package/dist/plugin/harness-chat-hook.js.map +1 -1
  32. package/dist/plugin/harness-chat-protocol.d.ts +2 -2
  33. package/dist/plugin/harness-chat-protocol.d.ts.map +1 -1
  34. package/dist/plugin/harness-chat-protocol.js +13 -2
  35. package/dist/plugin/harness-chat-protocol.js.map +1 -1
  36. package/dist/plugin/harness-coordinator.d.ts +4 -0
  37. package/dist/plugin/harness-coordinator.d.ts.map +1 -1
  38. package/dist/plugin/harness-coordinator.js +7 -1
  39. package/dist/plugin/harness-coordinator.js.map +1 -1
  40. package/dist/plugin/harness-request-router.d.ts.map +1 -1
  41. package/dist/plugin/harness-request-router.js +14 -23
  42. package/dist/plugin/harness-request-router.js.map +1 -1
  43. package/package.json +1 -1
package/README.md CHANGED
@@ -13,7 +13,7 @@ Harness 是确定性的控制平面,内部 Agent 是受约束的概率执行
13
13
  - 选择 `harness` Agent 后,使用自然语言发起 `start`、`status`、`resume`、`pause`、`cancel`、`answer`、`waive`、`report` 生命周期操作。
14
14
  - 插件只在当前消息的 `agent === "harness"` 时触发 Harness 协调。普通 Agent 和普通聊天不会自动拦截。
15
15
  - 自然语言请求先进入内部 Intake Session,转换为严格 JSON intent,再由确定性的 RunController 执行对应操作。
16
- - `chat.message` 采用两阶段非阻塞流程:前台先返回 synthetic 受理确认,协调工作在后台运行;后台完成后再向同一父会话补发 Harness 内部完成消息,供 `harness` Agent 做最终总结。
16
+ - `chat.message` 采用两阶段非阻塞流程:前台先返回包含真实 `runId` 和初始状态的 synthetic 受理结果,协调工作在后台运行;后台完成后再向同一父会话补发 Harness 内部完成消息,供 `harness` Agent 做最终总结。
17
17
  - 所有内部 Session 显式绑定到 Harness 自有 agent,并同时保留稳定兼容 ID 与英文显示名映射。
18
18
  - Git 基线、脏工作区、外部修改、scope drift、merge conflict 与 verification evidence gap 全部由 Controller 的确定性状态机保护,不能被 Agent 自报绕过。
19
19
  - 验证命令通过结构化 argv、`shell: false`、工作区包含校验、嵌套解释器/包管理器绕过检查和审批元数据约束执行,不接受 Agent 自报"已通过"替代命令证据。
@@ -280,7 +280,8 @@ Git 与工作区管理:
280
280
  ### Agent 生命周期管理
281
281
  - 支持 `start`、`status`、`resume`、`pause`、`cancel`、`answer`、`waive`、`report` 操作
282
282
  - 自然语言请求转换为严格 JSON intent
283
- - 两阶段非阻塞流程:先受理确认,后台协调运行
283
+ - 两阶段非阻塞流程:先返回持久化 Run 的 `runId`,后台协调运行
284
+ - Run 执行期间可在同一或其他 Harness 会话中查询、暂停、取消、恢复或生成报告
284
285
 
285
286
  ### 内部 Agent 链
286
287
  当前激活链:`Nuwa → Fuxi → Luban → deterministic verification → Zhulong → Yinglong`
@@ -442,10 +443,22 @@ stateDirectory: .harness/runs
442
443
 
443
444
  1. 在 OpenCode 中选择 primary `harness` Agent
444
445
  2. 发送自然语言请求,例如:"启动一个 run,目标是实现用户登录功能"
446
+ 3. Harness 首轮返回已持久化的 `runId` 和初始状态,规划、实现、验证和验收在后台继续
447
+
448
+ 不需要打开或部署独立控制面板。Harness 会话和 `runId` 就是长任务的控制入口:
449
+
450
+ ```text
451
+ status <runId>
452
+ pause <runId> 等待人工确认
453
+ resume <runId>
454
+ cancel <runId>
455
+ report <runId>
456
+ ```
445
457
 
446
458
  使用要点:
447
459
  - `start` 请求必须能被 Intake 提炼成 title、summary、acceptanceCriteria。如果缺少必要信息,Harness 会返回 clarification 响应而不是猜测。
448
460
  - `status`、`resume`、`cancel`、`report` 必须显式提供 `runId`。Harness 不会默认选择"最近一次运行"。
461
+ - `status`、`pause`、`cancel`、`resume` 和 `report` 不受父会话后台任务锁阻塞;重复推进同一 Run 不会创建重复内部 Agent Session。
449
462
 
450
463
  ### 基本操作
451
464
 
@@ -22,9 +22,24 @@ export type AgentSessionRuntime = {
22
22
  readonly hasActiveSession: (runId: RunId) => boolean;
23
23
  readonly isCancelled: (runId: RunId) => boolean;
24
24
  readonly markCancelled: (runId: RunId) => void;
25
+ readonly markPaused: (runId: RunId) => void;
26
+ readonly clearInterruption: (runId: RunId) => void;
25
27
  readonly listOrphanSessions: () => Promise<readonly OrphanSession[]>;
26
28
  readonly rebindSession: (input: RebindSessionInput) => Promise<void>;
27
29
  readonly safeAbandonSession: (input: AbandonSessionInput) => Promise<void>;
30
+ readonly reconcileOrphanSessions: (input: {
31
+ readonly runId: RunId;
32
+ readonly actorId: string;
33
+ }) => Promise<OrphanReconciliation>;
34
+ };
35
+ export type OrphanReconciliation = {
36
+ readonly kind: "none";
37
+ } | {
38
+ readonly kind: "rebound";
39
+ readonly sessionIds: readonly string[];
40
+ } | {
41
+ readonly kind: "abandoned";
42
+ readonly sessionIds: readonly string[];
28
43
  };
29
44
  export type OrphanSession = {
30
45
  readonly runId: RunId;
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session.d.ts","sourceRoot":"","sources":["../../src/controller/agent-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,wBAAwB,EACxB,qBAAqB,EAEtB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAY,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAIxD,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAA;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAA;IACvC,QAAQ,CAAC,QAAQ,EAAE,SAAS,wBAAwB,EAAE,CAAA;IACtD,QAAQ,CAAC,cAAc,EAAE,qBAAqB,CAAA;IAC9C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CACnC,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IAC9D,QAAQ,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5D,QAAQ,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAA;IACpD,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAA;IAC/C,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAC9C,QAAQ,CAAC,kBAAkB,EAAE,MAAM,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC,CAAA;IACpE,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACpE,QAAQ,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3E,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAA;IACjC,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAAA;CACtC,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAOlF,eAAO,MAAM,yBAAyB,GAAI,OAAO;IAC/C,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAA;IACvC,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAAA;IAChC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAA;IACxB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;CAClC,KAAG,mBAgOH,CAAA"}
1
+ {"version":3,"file":"agent-session.d.ts","sourceRoot":"","sources":["../../src/controller/agent-session.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,18 @@
1
1
  import { readAgentOutput } from "./agent-output.js";
2
- import { RunCancellationError } from "./errors.js";
2
+ import { RunCancellationError, RunPausedError } from "./errors.js";
3
3
  import { roleSystemPrompt } from "./role-prompts.js";
4
4
  export const createAgentSessionRuntime = (input) => {
5
5
  const activeSessions = new Map();
6
- const cancelledRunIds = new Set();
6
+ const interruptedRuns = new Map();
7
7
  const throwIfCancelled = (runId) => {
8
- if (cancelledRunIds.has(runId)) {
9
- throw new RunCancellationError(runId);
8
+ const interruption = interruptedRuns.get(runId);
9
+ switch (interruption) {
10
+ case "cancelled":
11
+ throw new RunCancellationError(runId);
12
+ case "paused":
13
+ throw new RunPausedError(runId);
14
+ default:
15
+ return;
10
16
  }
11
17
  };
12
18
  const createPromptInput = (request) => ({
@@ -138,7 +144,6 @@ export const createAgentSessionRuntime = (input) => {
138
144
  }
139
145
  },
140
146
  async abortActiveSession(runId) {
141
- cancelledRunIds.add(runId);
142
147
  const sessions = activeSessions.get(runId);
143
148
  if (sessions !== undefined) {
144
149
  for (const activeSession of sessions.values()) {
@@ -154,10 +159,16 @@ export const createAgentSessionRuntime = (input) => {
154
159
  return (activeSessions.get(runId)?.size ?? 0) > 0;
155
160
  },
156
161
  isCancelled(runId) {
157
- return cancelledRunIds.has(runId);
162
+ return interruptedRuns.get(runId) === "cancelled";
158
163
  },
159
164
  markCancelled(runId) {
160
- cancelledRunIds.add(runId);
165
+ interruptedRuns.set(runId, "cancelled");
166
+ },
167
+ markPaused(runId) {
168
+ interruptedRuns.set(runId, "paused");
169
+ },
170
+ clearInterruption(runId) {
171
+ interruptedRuns.delete(runId);
161
172
  },
162
173
  async listOrphanSessions() {
163
174
  return listOrphanSessions();
@@ -193,6 +204,40 @@ export const createAgentSessionRuntime = (input) => {
193
204
  reason: session.reason,
194
205
  });
195
206
  },
207
+ async reconcileOrphanSessions(request) {
208
+ const orphanSessions = (await listOrphanSessions()).filter((session) => session.runId === request.runId);
209
+ if (orphanSessions.length === 0) {
210
+ return { kind: "none" };
211
+ }
212
+ const reboundSessionIds = [];
213
+ const abandonedSessionIds = [];
214
+ for (const orphanSession of orphanSessions) {
215
+ const snapshot = input.sessionAdapter.getSession(orphanSession.sessionId);
216
+ if (snapshot !== undefined && snapshot.role === orphanSession.role) {
217
+ setActiveSession(request.runId, { sessionId: orphanSession.sessionId });
218
+ await appendSessionEvent(request.runId, "session.rebound", orphanSession.sessionId, {
219
+ sessionId: orphanSession.sessionId,
220
+ actorId: request.actorId,
221
+ });
222
+ reboundSessionIds.push(orphanSession.sessionId);
223
+ continue;
224
+ }
225
+ const reason = "session unavailable during run recovery";
226
+ await input.sessionAdapter.release({
227
+ sessionId: orphanSession.sessionId,
228
+ reason: `safe-abandon:${reason}`,
229
+ });
230
+ await appendSessionEvent(request.runId, "session.safe-abandoned", orphanSession.sessionId, {
231
+ sessionId: orphanSession.sessionId,
232
+ actorId: request.actorId,
233
+ reason,
234
+ });
235
+ abandonedSessionIds.push(orphanSession.sessionId);
236
+ }
237
+ return abandonedSessionIds.length > 0
238
+ ? { kind: "abandoned", sessionIds: abandonedSessionIds }
239
+ : { kind: "rebound", sessionIds: reboundSessionIds };
240
+ },
196
241
  };
197
242
  };
198
243
  const readStringPayload = (payload, key) => {
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session.js","sourceRoot":"","sources":["../../src/controller/agent-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-session.js","sourceRoot":"","sources":["../../src/controller/agent-session.ts"],"names":[],"mappings":"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"}
@@ -54,6 +54,7 @@ export type CreateRunControllerOptions = {
54
54
  };
55
55
  export interface RunController {
56
56
  start(input: RequirementInput): Promise<Run>;
57
+ advanceRun(runId: RunId): Promise<Run>;
57
58
  status(runId: RunId): Promise<Run>;
58
59
  pause(input: PauseRunInput): Promise<Run>;
59
60
  answer(input: AnswerRunInput): Promise<Run>;
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/controller/contracts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/controller/contracts.ts"],"names":[],"mappings":"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"}
@@ -20,4 +20,9 @@ export declare class RunCancellationError extends Error {
20
20
  readonly name = "RunCancellationError";
21
21
  constructor(runId: string);
22
22
  }
23
+ export declare class RunPausedError extends Error {
24
+ readonly runId: string;
25
+ readonly name = "RunPausedError";
26
+ constructor(runId: string);
27
+ }
23
28
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/controller/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,oBAAqB,SAAQ,KAAK;IAGjC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE;IAF9C,QAAQ,CAAC,IAAI,0BAAyB;gBAEjB,MAAM,EAAE,SAAS,MAAM,EAAE;CAG/C;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAI1C,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM;IAJ1B,QAAQ,CAAC,IAAI,yBAAwB;gBAG1B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM;CAI3B;AAED,qBAAa,qBAAsB,SAAQ,KAAK;IAI5C,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM;IAJzB,QAAQ,CAAC,IAAI,2BAA0B;gBAG5B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACvB,OAAO,CAAC,EAAE,YAAY;CAIzB;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IAGjC,QAAQ,CAAC,KAAK,EAAE,MAAM;IAFlC,QAAQ,CAAC,IAAI,0BAAyB;gBAEjB,KAAK,EAAE,MAAM;CAGnC"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/controller/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,oBAAqB,SAAQ,KAAK;IAGjC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE;IAF9C,QAAQ,CAAC,IAAI,0BAAyB;gBAEjB,MAAM,EAAE,SAAS,MAAM,EAAE;CAG/C;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAI1C,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM;IAJ1B,QAAQ,CAAC,IAAI,yBAAwB;gBAG1B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM;CAI3B;AAED,qBAAa,qBAAsB,SAAQ,KAAK;IAI5C,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM;IAJzB,QAAQ,CAAC,IAAI,2BAA0B;gBAG5B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACvB,OAAO,CAAC,EAAE,YAAY;CAIzB;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IAGjC,QAAQ,CAAC,KAAK,EAAE,MAAM;IAFlC,QAAQ,CAAC,IAAI,0BAAyB;gBAEjB,KAAK,EAAE,MAAM;CAGnC;AAED,qBAAa,cAAe,SAAQ,KAAK;IAG3B,QAAQ,CAAC,KAAK,EAAE,MAAM;IAFlC,QAAQ,CAAC,IAAI,oBAAmB;gBAEX,KAAK,EAAE,MAAM;CAGnC"}
@@ -34,4 +34,12 @@ export class RunCancellationError extends Error {
34
34
  this.runId = runId;
35
35
  }
36
36
  }
37
+ export class RunPausedError extends Error {
38
+ runId;
39
+ name = "RunPausedError";
40
+ constructor(runId) {
41
+ super(`run ${runId} was paused`);
42
+ this.runId = runId;
43
+ }
44
+ }
37
45
  //# sourceMappingURL=errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/controller/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAGxB;IAFZ,IAAI,GAAG,sBAAsB,CAAA;IAEtC,YAAqB,MAAyB;QAC5C,KAAK,CAAC,wBAAwB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAD/B,WAAM,GAAN,MAAM,CAAmB;IAE9C,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAIjC;IACA;IAJF,IAAI,GAAG,qBAAqB,CAAA;IAErC,YACW,IAAY,EACZ,OAAe;QAExB,KAAK,CAAC,GAAG,IAAI,kBAAkB,OAAO,EAAE,CAAC,CAAA;QAHhC,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAAQ;IAG1B,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAInC;IACA;IAJF,IAAI,GAAG,uBAAuB,CAAA;IAEvC,YACW,IAAY,EACZ,MAAc,EACvB,OAAsB;QAEtB,KAAK,CAAC,GAAG,IAAI,iCAAiC,MAAM,EAAE,EAAE,OAAO,CAAC,CAAA;QAJvD,SAAI,GAAJ,IAAI,CAAQ;QACZ,WAAM,GAAN,MAAM,CAAQ;IAIzB,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAGxB;IAFZ,IAAI,GAAG,sBAAsB,CAAA;IAEtC,YAAqB,KAAa;QAChC,KAAK,CAAC,OAAO,KAAK,gBAAgB,CAAC,CAAA;QADhB,UAAK,GAAL,KAAK,CAAQ;IAElC,CAAC;CACF"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/controller/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAGxB;IAFZ,IAAI,GAAG,sBAAsB,CAAA;IAEtC,YAAqB,MAAyB;QAC5C,KAAK,CAAC,wBAAwB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAD/B,WAAM,GAAN,MAAM,CAAmB;IAE9C,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAIjC;IACA;IAJF,IAAI,GAAG,qBAAqB,CAAA;IAErC,YACW,IAAY,EACZ,OAAe;QAExB,KAAK,CAAC,GAAG,IAAI,kBAAkB,OAAO,EAAE,CAAC,CAAA;QAHhC,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAAQ;IAG1B,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAInC;IACA;IAJF,IAAI,GAAG,uBAAuB,CAAA;IAEvC,YACW,IAAY,EACZ,MAAc,EACvB,OAAsB;QAEtB,KAAK,CAAC,GAAG,IAAI,iCAAiC,MAAM,EAAE,EAAE,OAAO,CAAC,CAAA;QAJvD,SAAI,GAAJ,IAAI,CAAQ;QACZ,WAAM,GAAN,MAAM,CAAQ;IAIzB,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAGxB;IAFZ,IAAI,GAAG,sBAAsB,CAAA;IAEtC,YAAqB,KAAa;QAChC,KAAK,CAAC,OAAO,KAAK,gBAAgB,CAAC,CAAA;QADhB,UAAK,GAAL,KAAK,CAAQ;IAElC,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,KAAK;IAGlB;IAFZ,IAAI,GAAG,gBAAgB,CAAA;IAEhC,YAAqB,KAAa;QAChC,KAAK,CAAC,OAAO,KAAK,aAAa,CAAC,CAAA;QADb,UAAK,GAAL,KAAK,CAAQ;IAElC,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"run-controller.d.ts","sourceRoot":"","sources":["../../src/controller/run-controller.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,0BAA0B,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAmC/E,eAAO,MAAM,mBAAmB,GAAI,SAAS,0BAA0B,KAAG,aAsVzE,CAAA"}
1
+ {"version":3,"file":"run-controller.d.ts","sourceRoot":"","sources":["../../src/controller/run-controller.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,0BAA0B,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAqC/E,eAAO,MAAM,mBAAmB,GAAI,SAAS,0BAA0B,KAAG,aAkbzE,CAAA"}
@@ -3,12 +3,12 @@ import { HARNESS_SESSION_ROLE } from "../session/index.js";
3
3
  import { createGitWorkspaceAdapter } from "../workspace/index.js";
4
4
  import { parseAgentJson } from "./agent-output.js";
5
5
  import { createAgentSessionRuntime } from "./agent-session.js";
6
- import { AgentOutputParseError, AgentRunFailedError, GraphValidationError, RunCancellationError, } from "./errors.js";
6
+ import { AgentOutputParseError, AgentRunFailedError, GraphValidationError, RunCancellationError, RunPausedError, } from "./errors.js";
7
7
  import { validateTaskGraph } from "./graph-validator.js";
8
8
  import { createReport } from "./report-factory.js";
9
9
  import { plannerTaskPrompt } from "./role-prompts.js";
10
10
  import { createRunPersistence } from "./run-persistence.js";
11
- import { appendAnswer, appendWaiver, canAnswer, canCancel, canPause, canWaive, consumeBudget, createBlockedQuestionId, createInitialRunBudgets, createInitialRunGovernance, hasAnswer, hasWaiver, isTerminalRunStatus, parsePlannedRun, RunBudgetExceededError, requireTransition, requireWaivableRequirement, setPaused, withGovernance, withStatus, } from "./run-state.js";
11
+ import { appendAnswer, appendWaiver, canAdvanceRun, canAnswer, canCancel, canPause, canWaive, consumeBudget, createBlockedQuestionId, createInitialRunBudgets, createInitialRunGovernance, hasAnswer, hasWaiver, isTerminalRunStatus, parsePlannedRun, RunBudgetExceededError, requireTransition, requireWaivableRequirement, setPaused, withGovernance, withStatus, } from "./run-state.js";
12
12
  import { createTaskExecutor } from "./task-executor.js";
13
13
  export const createRunController = (options) => {
14
14
  const workspacePolicy = options.workspacePolicy ?? { allowDirty: false };
@@ -20,11 +20,27 @@ export const createRunController = (options) => {
20
20
  store: options.store,
21
21
  workingDirectory: options.workingDirectory,
22
22
  });
23
+ const loadRunWithRetry = async (runId) => {
24
+ for (let attempt = 0; attempt < 3; attempt += 1) {
25
+ try {
26
+ return await options.store.loadState(runId);
27
+ }
28
+ catch (error) {
29
+ if (!isMissingRunError(error, runId) || attempt === 2) {
30
+ throw error;
31
+ }
32
+ await waitForNextTurn();
33
+ }
34
+ }
35
+ throw new TypeError(`missing run ${runId}`);
36
+ };
23
37
  const { runTasks } = createTaskExecutor({
24
38
  options,
25
39
  runtime,
26
40
  writer,
41
+ loadRun: loadRunWithRetry,
27
42
  });
43
+ const advancingRuns = new Map();
28
44
  const requestPlan = async (run, requirement) => {
29
45
  const maxPlannerAttempts = run.budgets.planner.limit;
30
46
  let planningRun = run;
@@ -54,7 +70,7 @@ export const createRunController = (options) => {
54
70
  return parsePlannerGraph(output);
55
71
  }
56
72
  catch (error) {
57
- if (error instanceof RunBudgetExceededError) {
73
+ if (error instanceof RunBudgetExceededError || error instanceof RunCancellationError) {
58
74
  throw error;
59
75
  }
60
76
  if (!(error instanceof AgentRunFailedError || error instanceof AgentOutputParseError)) {
@@ -72,21 +88,118 @@ export const createRunController = (options) => {
72
88
  }
73
89
  throw lastError;
74
90
  };
75
- const loadRunWithRetry = async (runId) => {
76
- for (let attempt = 0; attempt < 3; attempt += 1) {
77
- try {
78
- return await options.store.loadState(runId);
91
+ const persistPlanningState = async (run) => {
92
+ if (run.status === "planning") {
93
+ return run;
94
+ }
95
+ const planning = withStatus(run, "planning");
96
+ await writer.persist(planning, writer.createEvent(run.runId, "run.planning", { status: "planning" }));
97
+ return planning;
98
+ };
99
+ const persistExecutingState = async (run) => {
100
+ const executing = parsePlannedRun({ ...run, status: "executing" });
101
+ await writer.persist(executing, writer.createEvent(executing.runId, "run.executing", { status: "executing" }));
102
+ return executing;
103
+ };
104
+ const continueRun = async (runId) => {
105
+ const current = await loadRunWithRetry(runId);
106
+ if (!canAdvanceRun(current)) {
107
+ return current;
108
+ }
109
+ const reconciliation = await runtime.reconcileOrphanSessions({
110
+ runId,
111
+ actorId: "harness-recovery",
112
+ });
113
+ if (reconciliation.kind === "rebound") {
114
+ return current;
115
+ }
116
+ if (reconciliation.kind === "abandoned") {
117
+ const interrupted = "taskGraph" in current
118
+ ? withStatus(current, "paused")
119
+ : withStatus(withGovernance(current, {
120
+ ...current.governance,
121
+ blockingQuestionId: createBlockedQuestionId(current),
122
+ }), "clarification_required");
123
+ await writer.persist(interrupted, writer.createEvent(runId, "run.recovery.session_abandoned", {
124
+ sessionIds: reconciliation.sessionIds,
125
+ status: interrupted.status,
126
+ }));
127
+ return interrupted;
128
+ }
129
+ if (current.status === "created" ||
130
+ current.status === "analyzing" ||
131
+ current.status === "planning") {
132
+ const planning = await persistPlanningState(current);
133
+ const graph = await requestPlan(planning, planning.requirement);
134
+ validateTaskGraph(graph, planning.requirement, runId);
135
+ runtime.clearInterruption(runId);
136
+ return await runTasks(await persistExecutingState(parsePlannedRun({
137
+ ...planning,
138
+ status: "executing",
139
+ taskGraph: graph,
140
+ })));
141
+ }
142
+ const planned = parsePlannedRun(setPaused(current, null));
143
+ runtime.clearInterruption(runId);
144
+ if (planned.status !== "executing" || current.governance.paused !== null) {
145
+ return await runTasks(await persistExecutingState(planned));
146
+ }
147
+ return await runTasks(planned);
148
+ };
149
+ const finalizeAdvanceError = async (runId, error) => {
150
+ if (error instanceof GraphValidationError ||
151
+ error instanceof AgentRunFailedError ||
152
+ error instanceof AgentOutputParseError ||
153
+ error instanceof RunBudgetExceededError) {
154
+ const latest = await loadRunWithRetry(runId);
155
+ const planning = withStatus(latest, "planning");
156
+ const blocked = withStatus(withGovernance(planning, {
157
+ ...planning.governance,
158
+ blockingQuestionId: error instanceof RunBudgetExceededError ? createBlockedQuestionId(planning) : null,
159
+ }), error instanceof RunBudgetExceededError ? "paused" : "failed");
160
+ await writer.persist(blocked, writer.createEvent(runId, error instanceof RunBudgetExceededError ? "run.paused" : "run.failed", {
161
+ reason: error.message,
162
+ ...(error instanceof RunBudgetExceededError
163
+ ? {
164
+ budget: error.budget,
165
+ blockingQuestionId: blocked.governance.blockingQuestionId,
166
+ }
167
+ : {}),
168
+ }));
169
+ return blocked;
170
+ }
171
+ if (error instanceof RunPausedError) {
172
+ const latest = await loadRunWithRetry(runId);
173
+ if (latest.status === "paused") {
174
+ return latest;
79
175
  }
80
- catch (error) {
81
- if (!isMissingRunError(error, runId) || attempt === 2) {
82
- throw error;
83
- }
84
- await waitForNextTurn();
176
+ return withStatus(setPaused(latest, latest.governance.paused), "paused");
177
+ }
178
+ if (error instanceof RunCancellationError) {
179
+ const latest = await loadRunWithRetry(runId);
180
+ if (latest.status === "cancelled") {
181
+ return latest;
85
182
  }
183
+ const cancelled = withStatus(latest, "cancelled");
184
+ await writer.persist(cancelled, writer.createEvent(runId, "run.cancelled", { status: "cancelled" }));
185
+ return cancelled;
86
186
  }
87
- throw new TypeError(`missing run ${runId}`);
187
+ throw error;
88
188
  };
89
- return {
189
+ const advanceRun = async (runId) => {
190
+ const active = advancingRuns.get(runId);
191
+ if (active !== undefined) {
192
+ return active;
193
+ }
194
+ const pending = continueRun(runId)
195
+ .catch(async (error) => finalizeAdvanceError(runId, error))
196
+ .finally(() => {
197
+ advancingRuns.delete(runId);
198
+ });
199
+ advancingRuns.set(runId, pending);
200
+ return pending;
201
+ };
202
+ const controller = {
90
203
  async start(input) {
91
204
  const requirement = RequirementSchema.parse({ schemaVersion: "1.0.0", ...input });
92
205
  const created = RunSchema.parse({
@@ -124,75 +237,35 @@ export const createRunController = (options) => {
124
237
  }));
125
238
  return blocked;
126
239
  }
127
- const planning = withStatus(created, "planning");
128
- await writer.persist(planning, writer.createEvent(created.runId, "run.planning", { status: "planning" }));
129
- try {
130
- const graph = await requestPlan(created, requirement);
131
- validateTaskGraph(graph, requirement, created.runId);
132
- const executing = parsePlannedRun({ ...planning, status: "executing", taskGraph: graph });
133
- await writer.persist(executing, writer.createEvent(created.runId, "run.executing", { status: "executing" }));
134
- return await runTasks(executing);
135
- }
136
- catch (error) {
137
- if (error instanceof GraphValidationError ||
138
- error instanceof AgentRunFailedError ||
139
- error instanceof AgentOutputParseError ||
140
- error instanceof RunBudgetExceededError) {
141
- const failed = withStatus(withGovernance(planning, {
142
- ...planning.governance,
143
- blockingQuestionId: error instanceof RunBudgetExceededError ? createBlockedQuestionId(planning) : null,
144
- }), error instanceof RunBudgetExceededError ? "paused" : "failed");
145
- await writer.persist(failed, writer.createEvent(created.runId, error instanceof RunBudgetExceededError ? "run.paused" : "run.failed", {
146
- reason: error.message,
147
- ...(error instanceof RunBudgetExceededError
148
- ? {
149
- budget: error.budget,
150
- blockingQuestionId: failed.governance.blockingQuestionId,
151
- }
152
- : {}),
153
- }));
154
- if (error instanceof RunBudgetExceededError) {
155
- return failed;
156
- }
157
- }
158
- if (error instanceof RunCancellationError) {
159
- const latest = await options.store.loadState(created.runId);
160
- if (latest.status === "cancelled") {
161
- return latest;
162
- }
163
- const cancelled = withStatus(latest, "cancelled");
164
- await writer.persist(cancelled, writer.createEvent(created.runId, "run.cancelled", { status: "cancelled" }));
165
- return cancelled;
166
- }
167
- throw error;
168
- }
240
+ return created;
241
+ },
242
+ async advanceRun(runId) {
243
+ return advanceRun(runId);
169
244
  },
170
245
  async status(runId) {
171
246
  return loadRunWithRetry(runId);
172
247
  },
173
248
  async pause(input) {
174
249
  const current = await loadRunWithRetry(input.runId);
175
- if (current.status === "paused") {
176
- return current;
177
- }
178
- if (isTerminalRunStatus(current)) {
250
+ if (current.status === "paused" || isTerminalRunStatus(current)) {
179
251
  return current;
180
252
  }
181
253
  requireTransition(current, "pause", canPause);
182
- await runtime.abortActiveSession(input.runId);
183
- const pausedAt = options.clock.now().toISOString();
184
254
  const paused = withStatus(setPaused(current, {
185
255
  pauseId: options.ids.createEventId(`pause-${input.runId}`),
186
256
  actor: input.actor,
187
257
  reason: input.reason,
188
- pausedAt,
258
+ pausedAt: options.clock.now().toISOString(),
189
259
  }), "paused");
260
+ runtime.markPaused(input.runId);
190
261
  await writer.persist(paused, writer.createEvent(input.runId, "run.paused", {
191
262
  pauseId: paused.governance.paused?.pauseId ?? null,
192
263
  actor: input.actor,
193
264
  reason: input.reason,
194
265
  }));
195
- return paused;
266
+ await runtime.abortActiveSession(input.runId);
267
+ const latest = await loadRunWithRetry(input.runId);
268
+ return latest.status === "paused" ? latest : paused;
196
269
  },
197
270
  async answer(input) {
198
271
  const current = await loadRunWithRetry(input.runId);
@@ -200,13 +273,12 @@ export const createRunController = (options) => {
200
273
  return current;
201
274
  }
202
275
  requireTransition(current, "answer", canAnswer);
203
- const answeredAt = options.clock.now().toISOString();
204
276
  const updated = withStatus(appendAnswer(current, {
205
277
  answerId: options.ids.createEventId(`answer-${input.questionId}`),
206
278
  questionId: input.questionId,
207
279
  answer: input.answer,
208
280
  actor: input.actor,
209
- answeredAt,
281
+ answeredAt: options.clock.now().toISOString(),
210
282
  }), "planning");
211
283
  await writer.persist(updated, writer.createEvent(input.runId, "run.answered", {
212
284
  answerId: updated.governance.answers.at(-1)?.answerId ?? null,
@@ -221,37 +293,30 @@ export const createRunController = (options) => {
221
293
  case "completed":
222
294
  case "cancelled":
223
295
  case "failed":
296
+ case "clarification_required":
224
297
  return run;
225
298
  case "created":
226
299
  case "analyzing":
227
300
  case "planning":
228
- case "clarification_required":
229
- return run;
230
301
  case "plan_ready":
231
302
  case "executing":
232
303
  case "verifying":
233
304
  case "paused":
234
- if (runtime.hasActiveSession(runId)) {
235
- return run;
236
- }
237
- return "taskGraph" in run ? await runTasks(parsePlannedRun(setPaused(run, null))) : run;
305
+ return advanceRun(runId);
238
306
  default:
239
307
  return run;
240
308
  }
241
309
  },
242
310
  async cancel(runId) {
243
311
  const current = await loadRunWithRetry(runId);
244
- if (current.status === "completed" ||
245
- current.status === "cancelled" ||
246
- current.status === "failed") {
312
+ if (isTerminalRunStatus(current)) {
247
313
  return current;
248
314
  }
249
315
  requireTransition(current, "cancel", canCancel);
316
+ runtime.markCancelled(runId);
250
317
  await runtime.abortActiveSession(runId);
251
318
  const latest = await loadRunWithRetry(runId);
252
- if (latest.status === "completed" ||
253
- latest.status === "cancelled" ||
254
- latest.status === "failed") {
319
+ if (isTerminalRunStatus(latest)) {
255
320
  return latest;
256
321
  }
257
322
  const cancelled = withStatus(latest, "cancelled");
@@ -282,6 +347,7 @@ export const createRunController = (options) => {
282
347
  return createReport(run, options.clock);
283
348
  },
284
349
  };
350
+ return controller;
285
351
  };
286
352
  const parsePlannerGraph = (text) => parseAgentJson(text, TaskGraphSchema, "planner");
287
353
  const waitForNextTurn = async () => await new Promise((resolve) => {