harness-engineering-agent 0.3.27 → 0.3.29

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 (121) hide show
  1. package/README.md +3 -0
  2. package/dist/controller/agent-output-contracts.d.ts +16 -0
  3. package/dist/controller/agent-output-contracts.d.ts.map +1 -1
  4. package/dist/controller/agent-output.d.ts.map +1 -1
  5. package/dist/controller/agent-output.js +48 -1
  6. package/dist/controller/agent-output.js.map +1 -1
  7. package/dist/controller/agent-session.d.ts +2 -0
  8. package/dist/controller/agent-session.d.ts.map +1 -1
  9. package/dist/controller/agent-session.js +1 -0
  10. package/dist/controller/agent-session.js.map +1 -1
  11. package/dist/controller/contracts.d.ts +7 -0
  12. package/dist/controller/contracts.d.ts.map +1 -1
  13. package/dist/controller/contracts.js.map +1 -1
  14. package/dist/controller/failure-classification.d.ts +5 -0
  15. package/dist/controller/failure-classification.d.ts.map +1 -0
  16. package/dist/controller/failure-classification.js +6 -0
  17. package/dist/controller/failure-classification.js.map +1 -0
  18. package/dist/controller/index.d.ts +5 -0
  19. package/dist/controller/index.d.ts.map +1 -1
  20. package/dist/controller/index.js +5 -0
  21. package/dist/controller/index.js.map +1 -1
  22. package/dist/controller/planner-context-contract.d.ts +12 -0
  23. package/dist/controller/planner-context-contract.d.ts.map +1 -1
  24. package/dist/controller/route-resolver.d.ts.map +1 -1
  25. package/dist/controller/route-resolver.js +19 -8
  26. package/dist/controller/route-resolver.js.map +1 -1
  27. package/dist/controller/run-controller.d.ts.map +1 -1
  28. package/dist/controller/run-controller.js +110 -9
  29. package/dist/controller/run-controller.js.map +1 -1
  30. package/dist/controller/run-error-finalizer.d.ts +15 -0
  31. package/dist/controller/run-error-finalizer.d.ts.map +1 -1
  32. package/dist/controller/run-error-finalizer.js +103 -4
  33. package/dist/controller/run-error-finalizer.js.map +1 -1
  34. package/dist/controller/run-lease.d.ts +26 -0
  35. package/dist/controller/run-lease.d.ts.map +1 -0
  36. package/dist/controller/run-lease.js +63 -0
  37. package/dist/controller/run-lease.js.map +1 -0
  38. package/dist/controller/run-persistence.d.ts +1 -1
  39. package/dist/controller/run-persistence.d.ts.map +1 -1
  40. package/dist/controller/run-persistence.js +14 -12
  41. package/dist/controller/run-persistence.js.map +1 -1
  42. package/dist/controller/run-stage-projection.d.ts +64 -0
  43. package/dist/controller/run-stage-projection.d.ts.map +1 -0
  44. package/dist/controller/run-stage-projection.js +184 -0
  45. package/dist/controller/run-stage-projection.js.map +1 -0
  46. package/dist/controller/run-watchdog.d.ts +36 -0
  47. package/dist/controller/run-watchdog.d.ts.map +1 -0
  48. package/dist/controller/run-watchdog.js +124 -0
  49. package/dist/controller/run-watchdog.js.map +1 -0
  50. package/dist/controller/task-agent-schemas.d.ts +20 -0
  51. package/dist/controller/task-agent-schemas.d.ts.map +1 -1
  52. package/dist/controller/task-executor.d.ts.map +1 -1
  53. package/dist/controller/task-executor.js +22 -0
  54. package/dist/controller/task-executor.js.map +1 -1
  55. package/dist/controller/task-graph-contract.d.ts +1 -0
  56. package/dist/controller/task-graph-contract.d.ts.map +1 -1
  57. package/dist/controller/task-graph-contract.js +1 -0
  58. package/dist/controller/task-graph-contract.js.map +1 -1
  59. package/dist/domain/context-package.d.ts +4 -0
  60. package/dist/domain/context-package.d.ts.map +1 -1
  61. package/dist/domain/context-package.js +8 -0
  62. package/dist/domain/context-package.js.map +1 -1
  63. package/dist/domain/failure.d.ts +100 -0
  64. package/dist/domain/failure.d.ts.map +1 -1
  65. package/dist/domain/failure.js +9 -0
  66. package/dist/domain/failure.js.map +1 -1
  67. package/dist/domain/index.d.ts +1 -1
  68. package/dist/domain/index.d.ts.map +1 -1
  69. package/dist/domain/index.js +1 -1
  70. package/dist/domain/index.js.map +1 -1
  71. package/dist/domain/plan-artifacts.d.ts +8 -0
  72. package/dist/domain/plan-artifacts.d.ts.map +1 -1
  73. package/dist/domain/report.d.ts +232 -0
  74. package/dist/domain/report.d.ts.map +1 -1
  75. package/dist/domain/requirement.d.ts +17 -0
  76. package/dist/domain/requirement.d.ts.map +1 -1
  77. package/dist/domain/requirement.js +10 -0
  78. package/dist/domain/requirement.js.map +1 -1
  79. package/dist/domain/run.d.ts +232 -0
  80. package/dist/domain/run.d.ts.map +1 -1
  81. package/dist/plugin/create-harness-plugin.d.ts.map +1 -1
  82. package/dist/plugin/create-harness-plugin.js +35 -6
  83. package/dist/plugin/create-harness-plugin.js.map +1 -1
  84. package/dist/plugin/harness-chat-hook.d.ts +2 -1
  85. package/dist/plugin/harness-chat-hook.d.ts.map +1 -1
  86. package/dist/plugin/harness-chat-hook.js +15 -16
  87. package/dist/plugin/harness-chat-hook.js.map +1 -1
  88. package/dist/plugin/harness-delivery-envelope.d.ts +19 -0
  89. package/dist/plugin/harness-delivery-envelope.d.ts.map +1 -0
  90. package/dist/plugin/harness-delivery-envelope.js +105 -0
  91. package/dist/plugin/harness-delivery-envelope.js.map +1 -0
  92. package/dist/plugin/harness-escalate-tool.d.ts +2 -1
  93. package/dist/plugin/harness-escalate-tool.d.ts.map +1 -1
  94. package/dist/plugin/harness-escalate-tool.js +11 -2
  95. package/dist/plugin/harness-escalate-tool.js.map +1 -1
  96. package/dist/plugin/harness-intent.d.ts +12 -0
  97. package/dist/plugin/harness-intent.d.ts.map +1 -1
  98. package/dist/plugin/harness-intent.js +2 -1
  99. package/dist/plugin/harness-intent.js.map +1 -1
  100. package/dist/plugin/harness-plugin-runtime.d.ts +2 -0
  101. package/dist/plugin/harness-plugin-runtime.d.ts.map +1 -1
  102. package/dist/plugin/harness-plugin-runtime.js +40 -7
  103. package/dist/plugin/harness-plugin-runtime.js.map +1 -1
  104. package/dist/plugin/harness-plugin-scheduler.d.ts +7 -2
  105. package/dist/plugin/harness-plugin-scheduler.d.ts.map +1 -1
  106. package/dist/plugin/harness-plugin-scheduler.js +16 -14
  107. package/dist/plugin/harness-plugin-scheduler.js.map +1 -1
  108. package/dist/plugin/harness-requirement.d.ts.map +1 -1
  109. package/dist/plugin/harness-requirement.js +4 -0
  110. package/dist/plugin/harness-requirement.js.map +1 -1
  111. package/dist/plugin/harness-run-status-tool.d.ts +7 -0
  112. package/dist/plugin/harness-run-status-tool.d.ts.map +1 -0
  113. package/dist/plugin/harness-run-status-tool.js +33 -0
  114. package/dist/plugin/harness-run-status-tool.js.map +1 -0
  115. package/dist/store/filesystem-run-store.js +5 -0
  116. package/dist/store/filesystem-run-store.js.map +1 -1
  117. package/dist/store/pending-start.d.ts +4 -0
  118. package/dist/store/pending-start.d.ts.map +1 -1
  119. package/dist/store/run-event.d.ts +232 -0
  120. package/dist/store/run-event.d.ts.map +1 -1
  121. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-lease.js","sourceRoot":"","sources":["../../src/controller/run-lease.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ type RunPersistenceOptions = {
8
8
  };
9
9
  export type RunPersistence = {
10
10
  readonly createEvent: (runId: RunId, type: string, payload: RunEvent["payload"]) => RunEvent;
11
- readonly persist: (run: Run, event: RunEvent) => Promise<void>;
11
+ readonly persist: (run: Run, event: RunEvent, ...extraEvents: readonly RunEvent[]) => Promise<void>;
12
12
  };
13
13
  export declare const createRunPersistence: (options: RunPersistenceOptions) => RunPersistence;
14
14
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"run-persistence.d.ts","sourceRoot":"","sources":["../../src/controller/run-persistence.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAEzE,KAAK,qBAAqB,GAAG;IAC3B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAA;IAC/B,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAAA;CACxD,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAA;IAC5F,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC/D,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,SAAS,qBAAqB,KAAG,cAiDrE,CAAA"}
1
+ {"version":3,"file":"run-persistence.d.ts","sourceRoot":"","sources":["../../src/controller/run-persistence.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAEzE,KAAK,qBAAqB,GAAG;IAC3B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAA;IAC/B,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAAA;CACxD,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAA;IAC5F,QAAQ,CAAC,OAAO,EAAE,CAChB,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,QAAQ,EACf,GAAG,WAAW,EAAE,SAAS,QAAQ,EAAE,KAChC,OAAO,CAAC,IAAI,CAAC,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,SAAS,qBAAqB,KAAG,cAuDrE,CAAA"}
@@ -17,29 +17,31 @@ export const createRunPersistence = (options) => {
17
17
  };
18
18
  return {
19
19
  createEvent,
20
- persist(run, event) {
21
- const committedEvent = {
22
- ...event,
23
- idempotencyKey: event.idempotencyKey ?? event.eventId,
20
+ persist(run, event, ...extraEvents) {
21
+ const committedEvents = [event, ...extraEvents].map((candidate) => ({
22
+ ...candidate,
23
+ idempotencyKey: candidate.idempotencyKey ?? candidate.eventId,
24
24
  state: createEventStateSnapshot(run),
25
- };
25
+ }));
26
+ const lastCommittedEvent = committedEvents.at(-1);
26
27
  const previousOperation = writeChain;
27
28
  const operation = (async () => {
28
29
  if (previousOperation !== undefined) {
29
30
  await previousOperation;
30
31
  }
31
32
  const knownKeys = persistedIdempotencyKeys.get(run.runId) ?? new Set();
32
- if (knownKeys.has(committedEvent.idempotencyKey ?? committedEvent.eventId)) {
33
- await options.store.saveState(run, committedEvent.eventId);
34
- return;
35
- }
33
+ const pendingEvents = committedEvents.filter((committed) => !knownKeys.has(committed.idempotencyKey ?? committed.eventId));
36
34
  if (!bootstrapSnapshotRunIds.has(run.runId)) {
37
35
  await options.store.saveState(run);
38
36
  bootstrapSnapshotRunIds.add(run.runId);
39
37
  }
40
- await options.store.appendEvents(run.runId, [committedEvent]);
41
- await options.store.saveState(run, committedEvent.eventId);
42
- knownKeys.add(committedEvent.idempotencyKey ?? committedEvent.eventId);
38
+ if (pendingEvents.length > 0) {
39
+ await options.store.appendEvents(run.runId, pendingEvents);
40
+ }
41
+ await options.store.saveState(run, lastCommittedEvent?.eventId);
42
+ for (const committed of pendingEvents) {
43
+ knownKeys.add(committed.idempotencyKey ?? committed.eventId);
44
+ }
43
45
  persistedIdempotencyKeys.set(run.runId, knownKeys);
44
46
  })();
45
47
  writeChain = operation.catch(() => undefined);
@@ -1 +1 @@
1
- {"version":3,"file":"run-persistence.js","sourceRoot":"","sources":["../../src/controller/run-persistence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-persistence.js","sourceRoot":"","sources":["../../src/controller/run-persistence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import type { Run } from "../domain/index.js";
2
+ import type { RunEvent, RunStore } from "../store/index.js";
3
+ export type RunStageEntry = {
4
+ readonly stage: string;
5
+ readonly enteredAt: string;
6
+ readonly exitedAt?: string;
7
+ readonly taskId?: string;
8
+ readonly taskOutcome?: "started" | "completed" | "failed";
9
+ };
10
+ /** 子 agent 阶段产出摘要(来自最近的 run.stage.progress 事件) */
11
+ export type AgentProgressEntry = {
12
+ readonly role: string;
13
+ readonly phase: string;
14
+ readonly summaryText: string;
15
+ readonly refutations: readonly {
16
+ claim: string;
17
+ evidenceSummary: string;
18
+ }[];
19
+ };
20
+ /** 提取事件流中最近一条 run.stage.progress 摘要;不存在时返回 undefined */
21
+ export declare const latestAgentProgress: (events: readonly RunEvent[]) => AgentProgressEntry | undefined;
22
+ /**
23
+ * 将 run store 事件流折叠为带时间戳的阶段/任务投影序列。
24
+ * 任务级 started/completed/failed 在投影中以 taskOutcome 区分;心跳与租约事件不进入投影。
25
+ */
26
+ export declare const projectRunStages: (events: readonly RunEvent[]) => readonly RunStageEntry[];
27
+ export declare const latestEventTimestamp: (events: readonly RunEvent[]) => string | undefined;
28
+ export declare const currentTaskIdFromEvents: (events: readonly RunEvent[]) => string | undefined;
29
+ export type RunStatusSnapshot = {
30
+ readonly status: Run["status"];
31
+ readonly phase: string;
32
+ readonly currentTaskId?: string | undefined;
33
+ readonly budgets: Run["budgets"];
34
+ readonly lastEventAt?: string | undefined;
35
+ readonly blockers: readonly string[];
36
+ readonly routingDecision?: {
37
+ readonly scheduling: string;
38
+ readonly governance: string;
39
+ readonly reasons: readonly string[];
40
+ } | undefined;
41
+ readonly stages: readonly RunStageEntry[];
42
+ readonly agentProgress?: AgentProgressEntry | undefined;
43
+ };
44
+ /** 从已加载的 run 状态与事件流构造 run_status 查询快照。 */
45
+ export declare const deriveRunStatusSnapshot: (run: Run, events: readonly RunEvent[]) => RunStatusSnapshot;
46
+ export type RunStatusQuery = {
47
+ readonly ok: true;
48
+ readonly runId: string;
49
+ readonly snapshot: RunStatusSnapshot;
50
+ } | {
51
+ readonly ok: false;
52
+ readonly runId: string;
53
+ readonly error: {
54
+ readonly code: "run-not-found" | "store-error";
55
+ readonly message: string;
56
+ };
57
+ };
58
+ export declare const createRunStatusQuery: (input: {
59
+ readonly store: RunStore;
60
+ }) => {
61
+ query: (runId: string) => Promise<RunStatusQuery>;
62
+ };
63
+ export declare const isMissingRunStateError: (error: unknown, runId: string) => boolean;
64
+ //# sourceMappingURL=run-stage-projection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-stage-projection.d.ts","sourceRoot":"","sources":["../../src/controller/run-stage-projection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,184 @@
1
+ const HEARTBEAT_AND_LEASE_EVENT_PREFIXES = ["run.heartbeat", "run.lease."];
2
+ const RUN_STAGE_EVENTS = new Set([
3
+ "run.created",
4
+ "run.planning",
5
+ "run.executing",
6
+ "run.paused",
7
+ "run.failed",
8
+ "run.completed",
9
+ "run.cancelled",
10
+ ]);
11
+ const TASK_OUTCOME_BY_EVENT = {
12
+ "task.started": "started",
13
+ "task.completed": "completed",
14
+ "task.failed": "failed",
15
+ };
16
+ const isInternalTrackingEvent = (type) => HEARTBEAT_AND_LEASE_EVENT_PREFIXES.some((prefix) => type.startsWith(prefix));
17
+ const readPayloadString = (payload, key) => {
18
+ if (typeof payload !== "object" || payload === null || Array.isArray(payload)) {
19
+ return undefined;
20
+ }
21
+ const value = Reflect.get(payload, key);
22
+ return typeof value === "string" ? value : undefined;
23
+ };
24
+ const readPayloadRefutations = (payload) => {
25
+ if (typeof payload !== "object" || payload === null || Array.isArray(payload))
26
+ return [];
27
+ const value = Reflect.get(payload, "refutations");
28
+ if (!Array.isArray(value))
29
+ return [];
30
+ return value.flatMap((item) => {
31
+ if (typeof item !== "object" || item === null)
32
+ return [];
33
+ const claim = Reflect.get(item, "claim");
34
+ const evidenceSummary = Reflect.get(item, "evidenceSummary");
35
+ return typeof claim === "string" && typeof evidenceSummary === "string"
36
+ ? [{ claim, evidenceSummary }]
37
+ : [];
38
+ });
39
+ };
40
+ /** 提取事件流中最近一条 run.stage.progress 摘要;不存在时返回 undefined */
41
+ export const latestAgentProgress = (events) => {
42
+ for (let index = events.length - 1; index >= 0; index -= 1) {
43
+ const event = events[index];
44
+ if (event?.type !== "run.stage.progress")
45
+ continue;
46
+ const role = readPayloadString(event.payload, "role");
47
+ const phase = readPayloadString(event.payload, "phase");
48
+ const summaryText = readPayloadString(event.payload, "summaryText");
49
+ if (role === undefined || phase === undefined || summaryText === undefined)
50
+ continue;
51
+ return { role, phase, summaryText, refutations: readPayloadRefutations(event.payload) };
52
+ }
53
+ return undefined;
54
+ };
55
+ /**
56
+ * 将 run store 事件流折叠为带时间戳的阶段/任务投影序列。
57
+ * 任务级 started/completed/failed 在投影中以 taskOutcome 区分;心跳与租约事件不进入投影。
58
+ */
59
+ export const projectRunStages = (events) => {
60
+ const stages = [];
61
+ let openRunStage;
62
+ const closeOpenRunStage = (exitedAt) => {
63
+ if (openRunStage === undefined)
64
+ return;
65
+ stages.push({ ...openRunStage, exitedAt });
66
+ openRunStage = undefined;
67
+ };
68
+ for (const event of events) {
69
+ if (isInternalTrackingEvent(event.type))
70
+ continue;
71
+ const taskOutcome = TASK_OUTCOME_BY_EVENT[event.type];
72
+ const taskId = readPayloadString(event.payload, "taskId");
73
+ if (taskOutcome !== undefined && taskId !== undefined) {
74
+ closeOpenRunStage(event.timestamp);
75
+ stages.push({
76
+ stage: event.type,
77
+ enteredAt: event.timestamp,
78
+ taskId,
79
+ taskOutcome,
80
+ });
81
+ continue;
82
+ }
83
+ if (RUN_STAGE_EVENTS.has(event.type)) {
84
+ closeOpenRunStage(event.timestamp);
85
+ openRunStage = { stage: event.type, enteredAt: event.timestamp };
86
+ }
87
+ }
88
+ if (openRunStage !== undefined)
89
+ stages.push(openRunStage);
90
+ return stages;
91
+ };
92
+ export const latestEventTimestamp = (events) => events.at(-1)?.timestamp;
93
+ export const currentTaskIdFromEvents = (events) => {
94
+ for (let index = events.length - 1; index >= 0; index -= 1) {
95
+ const event = events[index];
96
+ if (event === undefined)
97
+ continue;
98
+ if (event.type !== "task.started" &&
99
+ event.type !== "task.completed" &&
100
+ event.type !== "task.failed") {
101
+ continue;
102
+ }
103
+ if (event.type !== "task.started")
104
+ return undefined;
105
+ return readPayloadString(event.payload, "taskId");
106
+ }
107
+ return undefined;
108
+ };
109
+ /** 从已加载的 run 状态与事件流构造 run_status 查询快照。 */
110
+ export const deriveRunStatusSnapshot = (run, events) => {
111
+ const blockers = [];
112
+ if (run.governance.blockingQuestionId !== null) {
113
+ blockers.push(`blocking-question:${run.governance.blockingQuestionId}`);
114
+ }
115
+ if (run.governance.blockReason !== null) {
116
+ blockers.push(`block-reason:${run.governance.blockReason.kind}`);
117
+ }
118
+ if (run.blockingDetails !== undefined) {
119
+ blockers.push(`blocking-details:${run.blockingDetails.kind}`);
120
+ }
121
+ const lastFailure = run.failures.at(-1);
122
+ if (lastFailure !== undefined && run.status === "failed") {
123
+ blockers.push(`failure:${lastFailure.category}`);
124
+ }
125
+ return {
126
+ status: run.status,
127
+ phase: run.status,
128
+ ...(run.status === "executing" || run.status === "verifying"
129
+ ? { currentTaskId: currentTaskIdFromEvents(events) }
130
+ : {}),
131
+ budgets: run.budgets,
132
+ ...(events.length === 0 ? {} : { lastEventAt: latestEventTimestamp(events) }),
133
+ blockers,
134
+ ...(run.routingDecision === undefined
135
+ ? {}
136
+ : {
137
+ routingDecision: {
138
+ scheduling: run.routingDecision.scheduling,
139
+ governance: run.routingDecision.governance,
140
+ reasons: run.routingDecision.reasons,
141
+ },
142
+ }),
143
+ stages: projectRunStages(events),
144
+ ...(() => {
145
+ const agentProgress = latestAgentProgress(events);
146
+ return agentProgress === undefined ? {} : { agentProgress };
147
+ })(),
148
+ };
149
+ };
150
+ export const createRunStatusQuery = (input) => {
151
+ const query = async (runId) => {
152
+ let run;
153
+ try {
154
+ run = await input.store.loadState(runId);
155
+ }
156
+ catch (error) {
157
+ return {
158
+ ok: false,
159
+ runId,
160
+ error: isMissingRunStateError(error, runId)
161
+ ? { code: "run-not-found", message: `run ${runId} 不存在` }
162
+ : {
163
+ code: "store-error",
164
+ message: error instanceof Error ? error.message : "unknown run store error",
165
+ },
166
+ };
167
+ }
168
+ const events = await input.store.listEvents(runId);
169
+ return { ok: true, runId, snapshot: deriveRunStatusSnapshot(run, events) };
170
+ };
171
+ return { query };
172
+ };
173
+ export const isMissingRunStateError = (error, runId) => {
174
+ if (error instanceof TypeError && error.message === `missing run ${runId}`)
175
+ return true;
176
+ if (error instanceof Error &&
177
+ "code" in error &&
178
+ error.code === "ENOENT") {
179
+ return true;
180
+ }
181
+ const cause = error?.cause;
182
+ return (cause instanceof Error && "code" in cause && cause.code === "ENOENT");
183
+ };
184
+ //# sourceMappingURL=run-stage-projection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-stage-projection.js","sourceRoot":"","sources":["../../src/controller/run-stage-projection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { type Run } from "../domain/index.js";
2
+ import type { RunStore } from "../store/index.js";
3
+ export type RunWatchdogConfig = {
4
+ /** 活跃 run 心跳写入周期(毫秒),默认分钟级 */
5
+ readonly heartbeatIntervalMs: number;
6
+ /** 心跳超时阈值(毫秒),超时未刷新视为僵死 */
7
+ readonly staleTimeoutMs: number;
8
+ /** 后台扫描周期(毫秒) */
9
+ readonly scanIntervalMs: number;
10
+ };
11
+ export declare const DEFAULT_WATCHDOG_HEARTBEAT_INTERVAL_MS = 60000;
12
+ export declare const resolveRunWatchdogConfig: (overrides?: Partial<RunWatchdogConfig>, sessionTimeoutMs?: number) => RunWatchdogConfig;
13
+ export declare const WATCHDOG_ERROR_CODE_STALE = "RUN_HEARTBEAT_TIMEOUT";
14
+ export declare const WATCHDOG_ERROR_CODE_STALE_REPEATED = "RUN_HEARTBEAT_TIMEOUT_REPEATED";
15
+ export declare const WATCHDOG_ACTOR_ID = "harness-watchdog";
16
+ export type WatchdogMigration = {
17
+ readonly runId: Run["runId"];
18
+ readonly migratedTo: "paused" | "failed";
19
+ readonly errorCode: string;
20
+ };
21
+ export type RunWatchdog = {
22
+ /** 向 run store 追加一条持久化心跳事件(不带状态快照,避免写放大) */
23
+ readonly heartbeat: (runId: Run["runId"]) => Promise<void>;
24
+ /** 扫描心跳超时的活跃 run 并迁移到 paused(优先)或 failed(重复僵死) */
25
+ readonly scan: () => Promise<readonly WatchdogMigration[]>;
26
+ readonly start: () => void;
27
+ readonly stop: () => void;
28
+ };
29
+ export type RunWatchdogDependencies = {
30
+ readonly store: RunStore;
31
+ readonly clock: () => Date;
32
+ readonly createEventId: (label: string) => string;
33
+ readonly config: RunWatchdogConfig;
34
+ };
35
+ export declare const createRunWatchdog: (input: RunWatchdogDependencies) => RunWatchdog;
36
+ //# sourceMappingURL=run-watchdog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-watchdog.d.ts","sourceRoot":"","sources":["../../src/controller/run-watchdog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAa,MAAM,oBAAoB,CAAA;AACxD,OAAO,KAAK,EAAY,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE3D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,8BAA8B;IAC9B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAA;IACpC,2BAA2B;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,iBAAiB;IACjB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;CAChC,CAAA;AAED,eAAO,MAAM,sCAAsC,QAAS,CAAA;AAE5D,eAAO,MAAM,wBAAwB,GACnC,YAAY,OAAO,CAAC,iBAAiB,CAAC,EACtC,yBAA0B,KACzB,iBAID,CAAA;AASF,eAAO,MAAM,yBAAyB,0BAA0B,CAAA;AAChE,eAAO,MAAM,kCAAkC,mCAAmC,CAAA;AAClF,eAAO,MAAM,iBAAiB,qBAAqB,CAAA;AAEnD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IAC5B,QAAQ,CAAC,UAAU,EAAE,QAAQ,GAAG,QAAQ,CAAA;IACxC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,4CAA4C;IAC5C,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1D,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,SAAS,iBAAiB,EAAE,CAAC,CAAA;IAC1D,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAA;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAA;IAC1B,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IACjD,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAA;CACnC,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,OAAO,uBAAuB,KAAG,WA+GlE,CAAA"}
@@ -0,0 +1,124 @@
1
+ import { RunSchema } from "../domain/index.js";
2
+ export const DEFAULT_WATCHDOG_HEARTBEAT_INTERVAL_MS = 60_000;
3
+ export const resolveRunWatchdogConfig = (overrides, sessionTimeoutMs = 600_000) => ({
4
+ heartbeatIntervalMs: overrides?.heartbeatIntervalMs ?? DEFAULT_WATCHDOG_HEARTBEAT_INTERVAL_MS,
5
+ staleTimeoutMs: overrides?.staleTimeoutMs ?? sessionTimeoutMs * 2,
6
+ scanIntervalMs: overrides?.scanIntervalMs ?? DEFAULT_WATCHDOG_HEARTBEAT_INTERVAL_MS,
7
+ });
8
+ const ACTIVE_RUN_STATUSES = [
9
+ "planning",
10
+ "plan_ready",
11
+ "executing",
12
+ "verifying",
13
+ ];
14
+ export const WATCHDOG_ERROR_CODE_STALE = "RUN_HEARTBEAT_TIMEOUT";
15
+ export const WATCHDOG_ERROR_CODE_STALE_REPEATED = "RUN_HEARTBEAT_TIMEOUT_REPEATED";
16
+ export const WATCHDOG_ACTOR_ID = "harness-watchdog";
17
+ export const createRunWatchdog = (input) => {
18
+ let scanTimer;
19
+ const heartbeat = async (runId) => {
20
+ const event = {
21
+ schemaVersion: "1.0.0",
22
+ eventId: input.createEventId(`heartbeat-${runId}`),
23
+ idempotencyKey: `heartbeat-${runId}-${input.clock().toISOString()}`,
24
+ runId,
25
+ type: "run.heartbeat",
26
+ timestamp: input.clock().toISOString(),
27
+ payload: { at: input.clock().toISOString() },
28
+ };
29
+ await input.store.appendEvents(runId, [event]);
30
+ };
31
+ const scan = async () => {
32
+ const listRunIds = input.store.listRunIds;
33
+ if (listRunIds === undefined)
34
+ return [];
35
+ const runIds = await listRunIds.call(input.store);
36
+ const migrations = [];
37
+ const now = input.clock().getTime();
38
+ for (const runId of runIds) {
39
+ let run;
40
+ let events;
41
+ try {
42
+ run = await input.store.loadState(runId);
43
+ events = await input.store.listEvents(runId);
44
+ }
45
+ catch {
46
+ continue;
47
+ }
48
+ if (!ACTIVE_RUN_STATUSES.includes(run.status))
49
+ continue;
50
+ const lastEventAt = events.at(-1)?.timestamp;
51
+ if (lastEventAt === undefined)
52
+ continue;
53
+ const lastEventAgeMs = now - new Date(lastEventAt).getTime();
54
+ if (!Number.isFinite(lastEventAgeMs) || lastEventAgeMs < input.config.staleTimeoutMs)
55
+ continue;
56
+ const migration = await migrateStaleRun(runId, run, events);
57
+ if (migration !== undefined)
58
+ migrations.push(migration);
59
+ }
60
+ return migrations;
61
+ };
62
+ const migrateStaleRun = async (runId, run, events) => {
63
+ const previousMigrations = events.filter((event) => event.type === "run.watchdog.paused" ||
64
+ event.type === "run.watchdog.failed" ||
65
+ event.type === "run.watchdog.paused_heartbeat_timeout");
66
+ const repeated = previousMigrations.length > 0;
67
+ const nowIso = input.clock().toISOString();
68
+ // paused 仅是计划后状态:规划阶段(无 taskGraph)的僵死 run 直接迁移到 failed
69
+ const canPause = "taskGraph" in run && !repeated;
70
+ const migratedTo = canPause ? "paused" : "failed";
71
+ const errorCode = repeated ? WATCHDOG_ERROR_CODE_STALE_REPEATED : WATCHDOG_ERROR_CODE_STALE;
72
+ const migrated = RunSchema.parse(canPause
73
+ ? {
74
+ ...run,
75
+ status: "paused",
76
+ governance: {
77
+ ...run.governance,
78
+ paused: {
79
+ pauseId: input.createEventId(`watchdog-${runId}`),
80
+ actor: { id: WATCHDOG_ACTOR_ID, type: "user" },
81
+ reason: "heartbeat timeout detected by watchdog scanner",
82
+ pausedAt: nowIso,
83
+ },
84
+ },
85
+ }
86
+ : { ...run, status: "failed" });
87
+ const event = {
88
+ schemaVersion: "1.0.0",
89
+ eventId: input.createEventId(`watchdog-${runId}`),
90
+ idempotencyKey: `watchdog-${runId}-${nowIso}`,
91
+ runId,
92
+ type: migratedTo === "paused" ? "run.watchdog.paused" : "run.watchdog.failed",
93
+ timestamp: nowIso,
94
+ payload: {
95
+ errorCode,
96
+ lastEventAt: events.at(-1)?.timestamp ?? nowIso,
97
+ previousStatus: run.status,
98
+ },
99
+ state: migrated,
100
+ };
101
+ await input.store.saveState(migrated);
102
+ await input.store.appendEvents(runId, [event]);
103
+ return { runId, migratedTo, errorCode };
104
+ };
105
+ return {
106
+ heartbeat,
107
+ scan,
108
+ start: () => {
109
+ if (scanTimer !== undefined)
110
+ return;
111
+ scanTimer = setInterval(() => {
112
+ void scan().catch(() => undefined);
113
+ }, input.config.scanIntervalMs);
114
+ scanTimer.unref?.();
115
+ },
116
+ stop: () => {
117
+ if (scanTimer === undefined)
118
+ return;
119
+ clearInterval(scanTimer);
120
+ scanTimer = undefined;
121
+ },
122
+ };
123
+ };
124
+ //# sourceMappingURL=run-watchdog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-watchdog.js","sourceRoot":"","sources":["../../src/controller/run-watchdog.ts"],"names":[],"mappings":"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"}
@@ -225,6 +225,10 @@ export declare const VerifierOutputSchema: z.ZodReadonly<z.ZodDiscriminatedUnion
225
225
  routingRationale: z.ZodString;
226
226
  rejudgementTriggers: z.ZodReadonly<z.ZodArray<z.ZodString>>;
227
227
  }, z.core.$strict>>>;
228
+ hypotheses: z.ZodOptional<z.ZodArray<z.ZodReadonly<z.ZodObject<{
229
+ claim: z.ZodString;
230
+ evidence: z.ZodOptional<z.ZodString>;
231
+ }, z.core.$strict>>>>;
228
232
  repositoryId: z.ZodOptional<z.ZodString>;
229
233
  targetRepository: z.ZodOptional<z.ZodString>;
230
234
  workspaceMutation: z.ZodOptional<z.ZodEnum<{
@@ -365,6 +369,10 @@ export declare const VerifierOutputSchema: z.ZodReadonly<z.ZodDiscriminatedUnion
365
369
  question: z.ZodString;
366
370
  impact: z.ZodString;
367
371
  }, z.core.$strip>>>>;
372
+ refutations: z.ZodOptional<z.ZodArray<z.ZodReadonly<z.ZodObject<{
373
+ claim: z.ZodString;
374
+ evidenceSummary: z.ZodString;
375
+ }, z.core.$strip>>>>;
368
376
  constraints: z.ZodReadonly<z.ZodArray<z.ZodString>>;
369
377
  }, z.core.$strip>>;
370
378
  coverage: z.ZodReadonly<z.ZodArray<z.ZodReadonly<z.ZodObject<{
@@ -463,6 +471,10 @@ export declare const VerifierOutputSchema: z.ZodReadonly<z.ZodDiscriminatedUnion
463
471
  routingRationale: z.ZodString;
464
472
  rejudgementTriggers: z.ZodReadonly<z.ZodArray<z.ZodString>>;
465
473
  }, z.core.$strict>>>;
474
+ hypotheses: z.ZodOptional<z.ZodArray<z.ZodReadonly<z.ZodObject<{
475
+ claim: z.ZodString;
476
+ evidence: z.ZodOptional<z.ZodString>;
477
+ }, z.core.$strict>>>>;
466
478
  repositoryId: z.ZodOptional<z.ZodString>;
467
479
  targetRepository: z.ZodOptional<z.ZodString>;
468
480
  workspaceMutation: z.ZodOptional<z.ZodEnum<{
@@ -603,6 +615,10 @@ export declare const VerifierOutputSchema: z.ZodReadonly<z.ZodDiscriminatedUnion
603
615
  question: z.ZodString;
604
616
  impact: z.ZodString;
605
617
  }, z.core.$strip>>>>;
618
+ refutations: z.ZodOptional<z.ZodArray<z.ZodReadonly<z.ZodObject<{
619
+ claim: z.ZodString;
620
+ evidenceSummary: z.ZodString;
621
+ }, z.core.$strip>>>>;
606
622
  constraints: z.ZodReadonly<z.ZodArray<z.ZodString>>;
607
623
  }, z.core.$strip>>;
608
624
  coverage: z.ZodReadonly<z.ZodArray<z.ZodReadonly<z.ZodObject<{
@@ -934,6 +950,10 @@ export declare const PlannerContextOutputSchema: z.ZodReadonly<z.ZodDiscriminate
934
950
  question: z.ZodString;
935
951
  impact: z.ZodString;
936
952
  }, z.core.$strip>>>>;
953
+ refutations: z.ZodOptional<z.ZodArray<z.ZodReadonly<z.ZodObject<{
954
+ claim: z.ZodString;
955
+ evidenceSummary: z.ZodString;
956
+ }, z.core.$strip>>>>;
937
957
  constraints: z.ZodReadonly<z.ZodArray<z.ZodString>>;
938
958
  }, z.core.$strip>>;
939
959
  }, z.core.$strict>>, z.ZodReadonly<z.ZodObject<{
@@ -1 +1 @@
1
- {"version":3,"file":"task-agent-schemas.d.ts","sourceRoot":"","sources":["../../src/controller/task-agent-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAcvB,YAAY,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAC1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAA;AAQ3E,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAgClB,CAAA;AAEb,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBA2DpB,CAAA;AAEb,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAqC9B,CAAA;AAEb,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAkC1B,CAAA;AAEb,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;sBAkCtB,CAAA;AAEb,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAUxB,CAAA;AAEb,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAC7D,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAC7E,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACjE,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAA;AACrF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AACrE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA"}
1
+ {"version":3,"file":"task-agent-schemas.d.ts","sourceRoot":"","sources":["../../src/controller/task-agent-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAcvB,YAAY,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAC1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAA;AAQ3E,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAgClB,CAAA;AAEb,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBA2DpB,CAAA;AAEb,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAqC9B,CAAA;AAEb,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAkC1B,CAAA;AAEb,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;sBAkCtB,CAAA;AAEb,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAUxB,CAAA;AAEb,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAC7D,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAC7E,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACjE,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAA;AACrF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AACrE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA"}
@@ -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;AAIzF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AACnE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAA;AAgBhE,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;oBAkzB/B,UAAU,KAAG,OAAO,CAAC,GAAG,CAAC;CAiiBvD,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;AAIzF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AACnE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAA;AAiBhE,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;CAiiBvD,CAAA"}