agentenkit 0.3.0 → 0.4.0

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 (216) hide show
  1. package/README.md +34 -14
  2. package/dist/adapters/inline.d.ts +19 -5
  3. package/dist/adapters/inline.d.ts.map +1 -1
  4. package/dist/adapters/inline.js +87 -14
  5. package/dist/adapters/inline.js.map +1 -1
  6. package/dist/adapters/memory.d.ts +65 -3
  7. package/dist/adapters/memory.d.ts.map +1 -1
  8. package/dist/adapters/memory.js +267 -3
  9. package/dist/adapters/memory.js.map +1 -1
  10. package/dist/adapters/prisma.d.ts +125 -18
  11. package/dist/adapters/prisma.d.ts.map +1 -1
  12. package/dist/adapters/prisma.js +308 -67
  13. package/dist/adapters/prisma.js.map +1 -1
  14. package/dist/adapters/qstash.d.ts +15 -2
  15. package/dist/adapters/qstash.d.ts.map +1 -1
  16. package/dist/adapters/qstash.js +31 -14
  17. package/dist/adapters/qstash.js.map +1 -1
  18. package/dist/adapters/redis.d.ts +40 -4
  19. package/dist/adapters/redis.d.ts.map +1 -1
  20. package/dist/adapters/redis.js +265 -20
  21. package/dist/adapters/redis.js.map +1 -1
  22. package/dist/adapters/sqlite.d.ts +52 -2
  23. package/dist/adapters/sqlite.d.ts.map +1 -1
  24. package/dist/adapters/sqlite.js +342 -35
  25. package/dist/adapters/sqlite.js.map +1 -1
  26. package/dist/adapters/stream-scripts.d.ts +49 -0
  27. package/dist/adapters/stream-scripts.d.ts.map +1 -0
  28. package/dist/adapters/stream-scripts.js +150 -0
  29. package/dist/adapters/stream-scripts.js.map +1 -0
  30. package/dist/adapters/upstash.d.ts +20 -0
  31. package/dist/adapters/upstash.d.ts.map +1 -1
  32. package/dist/adapters/upstash.js +29 -0
  33. package/dist/adapters/upstash.js.map +1 -1
  34. package/dist/admin/memory.d.ts +11 -1
  35. package/dist/admin/memory.d.ts.map +1 -1
  36. package/dist/admin/memory.js +83 -14
  37. package/dist/admin/memory.js.map +1 -1
  38. package/dist/admin/migrations/postgres/0002-run-settled-at.d.ts +5 -0
  39. package/dist/admin/migrations/postgres/0002-run-settled-at.d.ts.map +1 -0
  40. package/dist/admin/migrations/postgres/0002-run-settled-at.js +11 -0
  41. package/dist/admin/migrations/postgres/0002-run-settled-at.js.map +1 -0
  42. package/dist/admin/migrations/postgres/0003-run-enqueued-at.d.ts +5 -0
  43. package/dist/admin/migrations/postgres/0003-run-enqueued-at.d.ts.map +1 -0
  44. package/dist/admin/migrations/postgres/0003-run-enqueued-at.js +15 -0
  45. package/dist/admin/migrations/postgres/0003-run-enqueued-at.js.map +1 -0
  46. package/dist/admin/migrations/postgres/0004-run-settle-claim.d.ts +5 -0
  47. package/dist/admin/migrations/postgres/0004-run-settle-claim.d.ts.map +1 -0
  48. package/dist/admin/migrations/postgres/0004-run-settle-claim.js +15 -0
  49. package/dist/admin/migrations/postgres/0004-run-settle-claim.js.map +1 -0
  50. package/dist/admin/migrations/postgres/0005-bigint-counters.d.ts +5 -0
  51. package/dist/admin/migrations/postgres/0005-bigint-counters.d.ts.map +1 -0
  52. package/dist/admin/migrations/postgres/0005-bigint-counters.js +12 -0
  53. package/dist/admin/migrations/postgres/0005-bigint-counters.js.map +1 -0
  54. package/dist/admin/migrations/postgres/index.d.ts.map +1 -1
  55. package/dist/admin/migrations/postgres/index.js +16 -1
  56. package/dist/admin/migrations/postgres/index.js.map +1 -1
  57. package/dist/admin/migrations/runner.d.ts +21 -1
  58. package/dist/admin/migrations/runner.d.ts.map +1 -1
  59. package/dist/admin/migrations/runner.js +41 -4
  60. package/dist/admin/migrations/runner.js.map +1 -1
  61. package/dist/admin/migrations/sqlite/0002-run-settled-at.d.ts +5 -0
  62. package/dist/admin/migrations/sqlite/0002-run-settled-at.d.ts.map +1 -0
  63. package/dist/admin/migrations/sqlite/0002-run-settled-at.js +11 -0
  64. package/dist/admin/migrations/sqlite/0002-run-settled-at.js.map +1 -0
  65. package/dist/admin/migrations/sqlite/0003-run-enqueued-at.d.ts +5 -0
  66. package/dist/admin/migrations/sqlite/0003-run-enqueued-at.d.ts.map +1 -0
  67. package/dist/admin/migrations/sqlite/0003-run-enqueued-at.js +15 -0
  68. package/dist/admin/migrations/sqlite/0003-run-enqueued-at.js.map +1 -0
  69. package/dist/admin/migrations/sqlite/0004-run-settle-claim.d.ts +5 -0
  70. package/dist/admin/migrations/sqlite/0004-run-settle-claim.d.ts.map +1 -0
  71. package/dist/admin/migrations/sqlite/0004-run-settle-claim.js +15 -0
  72. package/dist/admin/migrations/sqlite/0004-run-settle-claim.js.map +1 -0
  73. package/dist/admin/migrations/sqlite/index.d.ts +2 -2
  74. package/dist/admin/migrations/sqlite/index.d.ts.map +1 -1
  75. package/dist/admin/migrations/sqlite/index.js +17 -3
  76. package/dist/admin/migrations/sqlite/index.js.map +1 -1
  77. package/dist/admin/postgres.d.ts +14 -4
  78. package/dist/admin/postgres.d.ts.map +1 -1
  79. package/dist/admin/postgres.js +131 -36
  80. package/dist/admin/postgres.js.map +1 -1
  81. package/dist/admin/shared.d.ts +19 -0
  82. package/dist/admin/shared.d.ts.map +1 -0
  83. package/dist/admin/shared.js +28 -0
  84. package/dist/admin/shared.js.map +1 -0
  85. package/dist/admin/sqlite.d.ts +9 -1
  86. package/dist/admin/sqlite.d.ts.map +1 -1
  87. package/dist/admin/sqlite.js +112 -29
  88. package/dist/admin/sqlite.js.map +1 -1
  89. package/dist/core/admin.d.ts +28 -6
  90. package/dist/core/admin.d.ts.map +1 -1
  91. package/dist/core/admin.js +92 -23
  92. package/dist/core/admin.js.map +1 -1
  93. package/dist/core/agent.d.ts +7 -4
  94. package/dist/core/agent.d.ts.map +1 -1
  95. package/dist/core/agent.js +15 -11
  96. package/dist/core/agent.js.map +1 -1
  97. package/dist/core/agui.d.ts +17 -0
  98. package/dist/core/agui.d.ts.map +1 -0
  99. package/dist/core/agui.js +69 -0
  100. package/dist/core/agui.js.map +1 -0
  101. package/dist/core/context.d.ts +13 -1
  102. package/dist/core/context.d.ts.map +1 -1
  103. package/dist/core/context.js +70 -19
  104. package/dist/core/context.js.map +1 -1
  105. package/dist/core/deleteThread.d.ts.map +1 -1
  106. package/dist/core/deleteThread.js +33 -4
  107. package/dist/core/deleteThread.js.map +1 -1
  108. package/dist/core/engine.d.ts +41 -11
  109. package/dist/core/engine.d.ts.map +1 -1
  110. package/dist/core/engine.js +855 -352
  111. package/dist/core/engine.js.map +1 -1
  112. package/dist/core/follow.d.ts +63 -1
  113. package/dist/core/follow.d.ts.map +1 -1
  114. package/dist/core/follow.js +293 -16
  115. package/dist/core/follow.js.map +1 -1
  116. package/dist/core/hitl.d.ts +43 -0
  117. package/dist/core/hitl.d.ts.map +1 -1
  118. package/dist/core/hitl.js +163 -35
  119. package/dist/core/hitl.js.map +1 -1
  120. package/dist/core/keys.d.ts +22 -4
  121. package/dist/core/keys.d.ts.map +1 -1
  122. package/dist/core/keys.js +23 -5
  123. package/dist/core/keys.js.map +1 -1
  124. package/dist/core/lease.d.ts +46 -0
  125. package/dist/core/lease.d.ts.map +1 -0
  126. package/dist/core/lease.js +142 -0
  127. package/dist/core/lease.js.map +1 -0
  128. package/dist/core/loop.d.ts +27 -7
  129. package/dist/core/loop.d.ts.map +1 -1
  130. package/dist/core/loop.js +140 -55
  131. package/dist/core/loop.js.map +1 -1
  132. package/dist/core/messages.d.ts +21 -2
  133. package/dist/core/messages.d.ts.map +1 -1
  134. package/dist/core/messages.js +61 -2
  135. package/dist/core/messages.js.map +1 -1
  136. package/dist/core/prune.d.ts +24 -0
  137. package/dist/core/prune.d.ts.map +1 -0
  138. package/dist/core/prune.js +43 -0
  139. package/dist/core/prune.js.map +1 -0
  140. package/dist/core/publish.d.ts +38 -10
  141. package/dist/core/publish.d.ts.map +1 -1
  142. package/dist/core/publish.js +126 -12
  143. package/dist/core/publish.js.map +1 -1
  144. package/dist/core/reclaim.d.ts +8 -1
  145. package/dist/core/reclaim.d.ts.map +1 -1
  146. package/dist/core/reclaim.js +149 -18
  147. package/dist/core/reclaim.js.map +1 -1
  148. package/dist/core/run.d.ts +7 -3
  149. package/dist/core/run.d.ts.map +1 -1
  150. package/dist/core/run.js +95 -35
  151. package/dist/core/run.js.map +1 -1
  152. package/dist/core/segment.d.ts +62 -0
  153. package/dist/core/segment.d.ts.map +1 -0
  154. package/dist/core/segment.js +318 -0
  155. package/dist/core/segment.js.map +1 -0
  156. package/dist/core/settle.d.ts +57 -0
  157. package/dist/core/settle.d.ts.map +1 -0
  158. package/dist/core/settle.js +181 -0
  159. package/dist/core/settle.js.map +1 -0
  160. package/dist/core/snapshot.d.ts +36 -0
  161. package/dist/core/snapshot.d.ts.map +1 -0
  162. package/dist/core/snapshot.js +87 -0
  163. package/dist/core/snapshot.js.map +1 -0
  164. package/dist/core/stop.d.ts +16 -1
  165. package/dist/core/stop.d.ts.map +1 -1
  166. package/dist/core/stop.js +69 -15
  167. package/dist/core/stop.js.map +1 -1
  168. package/dist/core/stream-events.d.ts +184 -0
  169. package/dist/core/stream-events.d.ts.map +1 -0
  170. package/dist/core/stream-events.js +26 -0
  171. package/dist/core/stream-events.js.map +1 -0
  172. package/dist/core/stream.d.ts +29 -0
  173. package/dist/core/stream.d.ts.map +1 -1
  174. package/dist/core/stream.js +79 -0
  175. package/dist/core/stream.js.map +1 -1
  176. package/dist/core/subagent.d.ts +36 -5
  177. package/dist/core/subagent.d.ts.map +1 -1
  178. package/dist/core/subagent.js +117 -22
  179. package/dist/core/subagent.js.map +1 -1
  180. package/dist/core/types.d.ts +195 -12
  181. package/dist/core/types.d.ts.map +1 -1
  182. package/dist/core/types.js +26 -1
  183. package/dist/core/types.js.map +1 -1
  184. package/dist/core/usage.d.ts +53 -5
  185. package/dist/core/usage.d.ts.map +1 -1
  186. package/dist/core/usage.js +170 -47
  187. package/dist/core/usage.js.map +1 -1
  188. package/dist/index.d.ts +16 -11
  189. package/dist/index.d.ts.map +1 -1
  190. package/dist/index.js +12 -7
  191. package/dist/index.js.map +1 -1
  192. package/dist/ports/admin.d.ts +59 -0
  193. package/dist/ports/admin.d.ts.map +1 -1
  194. package/dist/ports/kv.d.ts +17 -0
  195. package/dist/ports/kv.d.ts.map +1 -1
  196. package/dist/ports/queue.d.ts +87 -7
  197. package/dist/ports/queue.d.ts.map +1 -1
  198. package/dist/ports/queue.js +36 -1
  199. package/dist/ports/queue.js.map +1 -1
  200. package/dist/ports/runtime.d.ts +171 -20
  201. package/dist/ports/runtime.d.ts.map +1 -1
  202. package/dist/ports/storage.d.ts +26 -5
  203. package/dist/ports/storage.d.ts.map +1 -1
  204. package/dist/ports/streams.d.ts +60 -0
  205. package/dist/ports/streams.d.ts.map +1 -0
  206. package/dist/ports/streams.js +20 -0
  207. package/dist/ports/streams.js.map +1 -0
  208. package/dist/pricing.d.ts +5 -0
  209. package/dist/pricing.d.ts.map +1 -1
  210. package/dist/pricing.js +35 -10
  211. package/dist/pricing.js.map +1 -1
  212. package/dist/runtime.d.ts +6 -0
  213. package/dist/runtime.d.ts.map +1 -1
  214. package/dist/runtime.js +144 -46
  215. package/dist/runtime.js.map +1 -1
  216. package/package.json +1 -1
@@ -8,6 +8,14 @@ export declare const HITL_TTL_MS: number;
8
8
  * user's verdict (or the timeout denial) instead. */
9
9
  export declare const HITL_PARKED = "__hitl_parked__";
10
10
  export declare const hitlKey: (toolCallId: string) => string;
11
+ /** A park's expiry row on the queue, so an answer can withdraw it. */
12
+ export declare const expiryJobKey: (toolCallId: string) => string;
13
+ /** A park's resume row on the queue: one per answer, so the queue itself
14
+ * refuses a second resume for the same call. */
15
+ export declare const resumeJobKey: (toolCallId: string) => string;
16
+ /** Keeps an approved tool's output until its result is saved (§2.5), so a
17
+ * retry lands the same output instead of running the tool again. */
18
+ export declare const hitlDoneKey: (toolCallId: string) => string;
11
19
  export interface HitlResponse {
12
20
  approved: boolean;
13
21
  payload?: unknown;
@@ -56,6 +64,11 @@ export declare class ToolParkedError extends Error {
56
64
  readonly request: ParkRequest;
57
65
  constructor(request: ParkRequest);
58
66
  }
67
+ /** A tool call cut off by a user stop (§2.1). Unlike any other tool error it
68
+ * is not handed to the model: a stop tears the whole run down. */
69
+ export declare class RunStoppedError extends Error {
70
+ constructor(cause: unknown);
71
+ }
59
72
  export declare function parkForInput(request?: ParkRequest): ToolParkedError;
60
73
  export interface ParkInput {
61
74
  threadId: string;
@@ -75,6 +88,22 @@ export interface ParkInput {
75
88
  /** Dispatch ticket persisted in the INPUT_REQUIRED payload (§2.5) */
76
89
  resume: ResumeInfo;
77
90
  }
91
+ /** Holds the parks a segment raised until the step that raised them is saved
92
+ * (§2.5). A tool call parks in the middle of a model step, before the step's
93
+ * messages exist. Writing the park then would let the answer, a failed step
94
+ * or a stop act on a tool call the history does not have yet. So the wrapper
95
+ * only records the park here; the main loop commits the box once its step is
96
+ * saved, and a failed step simply drops it. Nested runs share their parent's
97
+ * box, so a park raised any depth down waits for the main agent's step too. */
98
+ export declare class ParkBox {
99
+ private parks;
100
+ add(p: ParkInput): void;
101
+ take(): ParkInput[];
102
+ }
103
+ /** Write every park the box holds: WAITING_FOR_INPUT, the INPUT_REQUIRED
104
+ * request and its expiry job (see parkForApproval). Called once the step that
105
+ * raised them is durable. */
106
+ export declare function commitParks(deps: RuntimePorts, box: ParkBox | undefined): Promise<void>;
78
107
  /** Wrap every tool so a call can park (§2.5) instead of blocking. A marked
79
108
  * tool parks BEFORE it runs: the request is persisted as INPUT_REQUIRED and
80
109
  * the wrapper returns the park sentinel; the real tool runs when a human
@@ -90,6 +119,12 @@ export declare function withHitl(deps: RuntimePorts, threadId: string, tools: Re
90
119
  agentId?: string | null;
91
120
  frames?: HitlFrame[];
92
121
  nested?: NestedDescriptor;
122
+ /** Where parks wait for their step to be saved (see ParkBox). Absent
123
+ * parks at once. */
124
+ parks?: ParkBox;
125
+ /** Calls whose tool failed, by id, with the message: their live chunk
126
+ * names the error (see chunkPayload). */
127
+ toolErrors?: Map<string, string>;
93
128
  }): Record<string, any>;
94
129
  /** The §2.5 suspension as a durable state transition — NO process waits.
95
130
  * Flips WAITING_FOR_INPUT on both homes and appends INPUT_REQUIRED to the
@@ -125,6 +160,14 @@ export interface PendingHitl {
125
160
  expiresAt?: number;
126
161
  /** REASON_APPROVAL, or the self-parking tool's word (§2.5). */
127
162
  reason?: string;
163
+ /** The dispatch ticket, when the park recorded one. */
164
+ resume?: ResumeInfo;
165
+ /** Marks a park whose own call already has its result in the history, but
166
+ * whose unwind stopped part way (§2.7): a worker died, or a child failed,
167
+ * between one level and the next. Nothing is left to answer; the unwind
168
+ * carries on from `resumeFrame`, the first frame still waiting. */
169
+ landed?: boolean;
170
+ resumeFrame?: number;
128
171
  }
129
172
  /** When a park stops being answerable, epoch ms. */
130
173
  export declare function hitlDeadline(p: PendingHitl, config: {
@@ -1 +1 @@
1
- {"version":3,"file":"hitl.d.ts","sourceRoot":"","sources":["../../src/core/hitl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hitl.d.ts","sourceRoot":"","sources":["../../src/core/hitl.ts"],"names":[],"mappings":"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"}
package/dist/core/hitl.js CHANGED
@@ -1,7 +1,9 @@
1
1
  import { randomUUID } from 'node:crypto';
2
- import { publish, setThreadState } from './publish.js';
2
+ import { publish, runStatePayload, transition } from './publish.js';
3
3
  import { currentRunId } from './keys.js';
4
4
  import { reclaimIfOrphaned } from './reclaim.js';
5
+ import { enqueueJob } from './lease.js';
6
+ import { DuplicateJobError, PRIORITY_LOW } from '../ports/queue.js';
5
7
  export const HITL_TTL_MS = 15 * 60_000;
6
8
  /** Result value a parked `requiresConfirmation` tool returns (§2.5). The
7
9
  * engine scans a step's tool results for this marker to end the run segment;
@@ -9,6 +11,14 @@ export const HITL_TTL_MS = 15 * 60_000;
9
11
  * user's verdict (or the timeout denial) instead. */
10
12
  export const HITL_PARKED = '__hitl_parked__';
11
13
  export const hitlKey = (toolCallId) => `agent:hitl:${toolCallId}`;
14
+ /** A park's expiry row on the queue, so an answer can withdraw it. */
15
+ export const expiryJobKey = (toolCallId) => `hitl-expiry:${toolCallId}`;
16
+ /** A park's resume row on the queue: one per answer, so the queue itself
17
+ * refuses a second resume for the same call. */
18
+ export const resumeJobKey = (toolCallId) => `hitl-resume:${toolCallId}`;
19
+ /** Keeps an approved tool's output until its result is saved (§2.5), so a
20
+ * retry lands the same output instead of running the tool again. */
21
+ export const hitlDoneKey = (toolCallId) => `agent:hitl-done:${toolCallId}`;
12
22
  /** Marks a park raised by a `requiresConfirmation` tool: a human decides.
13
23
  * Any other reason is a tool that parked itself (§2.5). */
14
24
  export const REASON_APPROVAL = 'approval';
@@ -29,9 +39,44 @@ export class ToolParkedError extends Error {
29
39
  this.name = 'ToolParkedError';
30
40
  }
31
41
  }
42
+ /** A tool call cut off by a user stop (§2.1). Unlike any other tool error it
43
+ * is not handed to the model: a stop tears the whole run down. */
44
+ export class RunStoppedError extends Error {
45
+ constructor(cause) {
46
+ super(cause instanceof Error ? cause.message : String(cause));
47
+ this.name = 'RunStoppedError';
48
+ }
49
+ }
32
50
  export function parkForInput(request = {}) {
33
51
  return new ToolParkedError(request);
34
52
  }
53
+ /** Holds the parks a segment raised until the step that raised them is saved
54
+ * (§2.5). A tool call parks in the middle of a model step, before the step's
55
+ * messages exist. Writing the park then would let the answer, a failed step
56
+ * or a stop act on a tool call the history does not have yet. So the wrapper
57
+ * only records the park here; the main loop commits the box once its step is
58
+ * saved, and a failed step simply drops it. Nested runs share their parent's
59
+ * box, so a park raised any depth down waits for the main agent's step too. */
60
+ export class ParkBox {
61
+ parks = [];
62
+ add(p) {
63
+ this.parks.push(p);
64
+ }
65
+ take() {
66
+ const out = this.parks;
67
+ this.parks = [];
68
+ return out;
69
+ }
70
+ }
71
+ /** Write every park the box holds: WAITING_FOR_INPUT, the INPUT_REQUIRED
72
+ * request and its expiry job (see parkForApproval). Called once the step that
73
+ * raised them is durable. */
74
+ export async function commitParks(deps, box) {
75
+ if (!box)
76
+ return;
77
+ for (const p of box.take())
78
+ await parkForApproval(deps, p);
79
+ }
35
80
  /** Wrap every tool so a call can park (§2.5) instead of blocking. A marked
36
81
  * tool parks BEFORE it runs: the request is persisted as INPUT_REQUIRED and
37
82
  * the wrapper returns the park sentinel; the real tool runs when a human
@@ -46,7 +91,7 @@ export function withHitl(deps, threadId, tools, ctx) {
46
91
  const out = {};
47
92
  for (const [name, t] of Object.entries(tools)) {
48
93
  const park = async (toolCallId, args, request) => {
49
- await parkForApproval(deps, {
94
+ const p = {
50
95
  threadId,
51
96
  toolCallId,
52
97
  toolName: name,
@@ -57,7 +102,12 @@ export function withHitl(deps, threadId, tools, ctx) {
57
102
  resume: ctx.resume,
58
103
  ...(request.reason ? { reason: request.reason } : {}),
59
104
  ...(request.ttlMs !== undefined ? { ttlMs: request.ttlMs } : {}),
60
- });
105
+ };
106
+ // Written once the step is saved; with no box, at once.
107
+ if (ctx.parks)
108
+ ctx.parks.add(p);
109
+ else
110
+ await parkForApproval(deps, p);
61
111
  return { [HITL_PARKED]: toolCallId };
62
112
  };
63
113
  if (t?.requiresConfirmation) {
@@ -79,8 +129,21 @@ export function withHitl(deps, threadId, tools, ctx) {
79
129
  return await execute(args, opts);
80
130
  }
81
131
  catch (err) {
82
- if (!(err instanceof ToolParkedError))
83
- throw err;
132
+ // A tool that fails is news for the model, not the end of the run:
133
+ // the error goes back as the call's result, worded exactly as the
134
+ // Go runtime words it, and the model decides what to do next.
135
+ // Thrown instead, the SDK would fail the whole step and spend a
136
+ // retry on what may be a plain bad input.
137
+ if (!(err instanceof ToolParkedError)) {
138
+ // A stop is not the tool's failure: it ends the run, as it does
139
+ // in Go, where the cancelled step never reaches the model.
140
+ if (err instanceof RunStoppedError || opts?.abortSignal?.aborted)
141
+ throw err;
142
+ const message = err instanceof Error ? err.message : String(err);
143
+ if (opts?.toolCallId)
144
+ ctx.toolErrors?.set(opts.toolCallId, message);
145
+ return `error: ${message}`;
146
+ }
84
147
  // A resumed call that parks again has nowhere to go: the verdict
85
148
  // for this call is being consumed right now.
86
149
  if (opts?.approval) {
@@ -111,8 +174,18 @@ export function withHitl(deps, threadId, tools, ctx) {
111
174
  export async function parkForApproval(deps, i) {
112
175
  const ttlMs = i.ttlMs && i.ttlMs > 0 ? i.ttlMs : deps.config.hitlTtlMs;
113
176
  const expiresAt = new Date(Date.now() + ttlMs).toISOString();
114
- await deps.kv.set(`agent:state:${i.threadId}`, 'WAITING_FOR_INPUT');
115
- await setThreadState(deps, i.threadId, 'WAITING_FOR_INPUT', i.resume.model);
177
+ // Only while the run still owns a going thread (§3.4). A step can park
178
+ // several calls, so the thread may already be WAITING. A run that was
179
+ // stopped meanwhile parks nothing: the stop has ended it, and a later prompt
180
+ // repairs the call it left without a result.
181
+ const parked = await transition(deps, i.threadId, {
182
+ from: ['RUNNING', 'WAITING_FOR_INPUT'],
183
+ to: 'WAITING_FOR_INPUT',
184
+ runId: i.resume.runId,
185
+ model: i.resume.model,
186
+ });
187
+ if (!parked)
188
+ return;
116
189
  await publish(deps, i.threadId, 'INPUT_REQUIRED', {
117
190
  toolCallId: i.toolCallId,
118
191
  toolName: i.toolName,
@@ -129,18 +202,24 @@ export async function parkForApproval(deps, i) {
129
202
  reason: i.reason ?? REASON_APPROVAL,
130
203
  expiresAt,
131
204
  });
132
- await publish(deps, i.threadId, 'STATE_CHANGE', { state: 'WAITING_FOR_INPUT' });
205
+ // The park names its run and when the run started, like every other
206
+ // STATE_CHANGE, so a client keeps its timer without refetching history.
207
+ const runId = await currentRunId(deps, i.threadId);
208
+ await publish(deps, i.threadId, 'STATE_CHANGE', await runStatePayload(deps, 'WAITING_FOR_INPUT', runId));
133
209
  // Best-effort, and deliberately last. The park is ALREADY durable by this
134
210
  // point — state flipped on both homes, INPUT_REQUIRED on the event log — so
135
211
  // a queue that cannot schedule must not be allowed to throw back through the
136
212
  // tool call and fail the run. Reclamation (§2.5) covers the thread instead.
137
213
  //
138
214
  // Arriving early is equally harmless: an unexpired, unanswered request
139
- // resolves to nothing and the job is a no-op (see resumePendingHitl).
215
+ // resolves to nothing and the job is a no-op (see resumePendingHitl). The
216
+ // row is keyed so an answer can withdraw it, and it queues behind every user
217
+ // message: an expiry that came due is never urgent.
140
218
  try {
141
- await deps.queue.enqueue({
219
+ await enqueueJob(deps, {
220
+ kind: 'expiry',
142
221
  threadId: i.threadId,
143
- runId: await currentRunId(deps, i.threadId),
222
+ runId,
144
223
  model: i.resume.model,
145
224
  agent: i.resume.agent,
146
225
  ...(i.resume.tokenBudget !== undefined ? { tokenBudget: i.resume.tokenBudget } : {}),
@@ -149,10 +228,18 @@ export async function parkForApproval(deps, i) {
149
228
  : {}),
150
229
  ...(i.resume.providerOptions ? { providerOptions: i.resume.providerOptions } : {}),
151
230
  ...(i.resume.state ? { state: i.resume.state } : {}),
152
- }, { delaySeconds: Math.ceil((ttlMs + deps.config.reclaimGraceMs) / 1000) });
231
+ ...(i.resume.maxSteps ? { maxSteps: i.resume.maxSteps } : {}),
232
+ ...(i.resume.dispatchedAt ? { dispatchedAt: i.resume.dispatchedAt } : {}),
233
+ }, {
234
+ delaySeconds: Math.ceil((ttlMs + deps.config.reclaimGraceMs) / 1000),
235
+ key: expiryJobKey(i.toolCallId), priority: PRIORITY_LOW,
236
+ });
153
237
  }
154
- catch {
238
+ catch (err) {
155
239
  // No expiry scheduled — the thread still heals on first touch (§2.5).
240
+ if (!(err instanceof DuplicateJobError)) {
241
+ (deps.log ?? console).warn?.('park expiry not scheduled; reclamation covers the thread', { threadId: i.threadId, toolCallId: i.toolCallId, err });
242
+ }
156
243
  }
157
244
  }
158
245
  /** When a park stops being answerable, epoch ms. */
@@ -183,6 +270,7 @@ function fromInputRequired(pending) {
183
270
  requestedAt: new Date(pending.createdAt).getTime(),
184
271
  ...(Number.isFinite(expiresAt) ? { expiresAt } : {}),
185
272
  ...(p.reason ? { reason: p.reason } : {}),
273
+ ...(p.resume ? { resume: p.resume } : {}),
186
274
  };
187
275
  }
188
276
  /** Every approval on the thread that is still open (§2.7).
@@ -207,9 +295,25 @@ export async function loadOpenHitls(deps, threadId) {
207
295
  answered.add(id);
208
296
  }
209
297
  }
210
- return requested
211
- .map((e) => fromInputRequired(e))
212
- .filter((p) => !answered.has(p.toolCallId) && !expired.has(p.toolCallId));
298
+ // Only the current run's parks. One an earlier run left behind can never be
299
+ // answered: the run failed, or an edit cut its turns out of the history,
300
+ // and its tool call may not even exist any more.
301
+ const current = await currentRunId(deps, threadId);
302
+ const open = [];
303
+ for (const e of requested) {
304
+ const p = fromInputRequired(e);
305
+ if (current && p.resume?.runId && p.resume.runId !== current)
306
+ continue;
307
+ if (!answered.has(p.toolCallId) && !expired.has(p.toolCallId)) {
308
+ open.push(p);
309
+ continue;
310
+ }
311
+ // Settled at its own level; is anything above still waiting?
312
+ const waiting = p.frames.findIndex((f) => !answered.has(f.toolCallId));
313
+ if (waiting >= 0)
314
+ open.push({ ...p, landed: true, resumeFrame: waiting });
315
+ }
316
+ return open;
213
317
  }
214
318
  /** The §5.4 behavior: heal orphans first (§2.5), then record the answer in
215
319
  * the handoff key and resume the run segment via the queue (§2.8) — the
@@ -223,7 +327,7 @@ export async function respond(deps, input) {
223
327
  // step can park several nested runs at once, and each is answered on its
224
328
  // own. The run resumes when the last of them is settled.
225
329
  const open = await loadOpenHitls(deps, input.threadId);
226
- const match = open.find((p) => p.toolCallId === input.toolCallId);
330
+ const match = open.find((p) => p.toolCallId === input.toolCallId && !p.landed);
227
331
  if (thread?.state !== 'WAITING_FOR_INPUT' || !match) {
228
332
  return { delivered: false, error: 'No matching pending input request' };
229
333
  }
@@ -231,7 +335,12 @@ export async function respond(deps, input) {
231
335
  // key vanishing is what makes the resumed segment treat the request as
232
336
  // unanswered (§2.5)
233
337
  const remainingSec = Math.max(60, Math.floor((hitlDeadline(match, deps.config) - Date.now()) / 1000));
234
- await deps.kv.set(hitlKey(input.toolCallId), JSON.stringify({ approved: input.approved, payload: input.payload }), { exSeconds: remainingSec });
338
+ // The first answer wins. A repeat, from a second tab or a retry, must not
339
+ // overwrite it: an approval that can be rewritten after it was taken is a
340
+ // suggestion, not an approval.
341
+ const written = await deps.kv.set(hitlKey(input.toolCallId), JSON.stringify({ approved: input.approved, payload: input.payload }), { exSeconds: remainingSec, onlyIfNotExists: true });
342
+ if (!written)
343
+ return { delivered: false, error: 'This request was already answered' };
235
344
  // Bus-only fast-path notice (seq 0 = never persisted) for live UIs (§2.5)
236
345
  await deps.bus.publish(input.threadId, {
237
346
  threadId: input.threadId,
@@ -250,23 +359,42 @@ export async function respond(deps, input) {
250
359
  // park's expiry job are the same run, and the lock must be able to tell
251
360
  // that. Bumping here would let both run and reply twice (§2.5).
252
361
  const runId = await currentRunId(deps, input.threadId);
253
- await deps.queue.enqueue({
254
- threadId: input.threadId,
255
- runId,
256
- model: resume?.model ?? thread.model,
257
- ...(resume
258
- ? {
259
- agent: resume.agent,
260
- ...(resume.tokenBudget !== undefined ? { tokenBudget: resume.tokenBudget } : {}),
261
- ...(resume.costBudgetMicros !== undefined
262
- ? { costBudgetMicros: resume.costBudgetMicros }
263
- : {}),
264
- ...(resume.providerOptions ? { providerOptions: resume.providerOptions } : {}),
265
- // The answer resumes the SAME run, so it must scope storage the same
266
- // way the parked segment did (§2.10).
267
- ...(resume.state ? { state: resume.state } : {}),
268
- }
269
- : {}),
362
+ try {
363
+ await enqueueJob(deps, {
364
+ kind: 'resume',
365
+ threadId: input.threadId,
366
+ runId,
367
+ model: resume?.model ?? thread.model,
368
+ ...(resume
369
+ ? {
370
+ agent: resume.agent,
371
+ ...(resume.tokenBudget !== undefined ? { tokenBudget: resume.tokenBudget } : {}),
372
+ ...(resume.costBudgetMicros !== undefined
373
+ ? { costBudgetMicros: resume.costBudgetMicros }
374
+ : {}),
375
+ ...(resume.providerOptions ? { providerOptions: resume.providerOptions } : {}),
376
+ // The answer resumes the SAME run, so it must scope storage the same
377
+ // way the parked segment did (§2.10).
378
+ ...(resume.state ? { state: resume.state } : {}),
379
+ ...(resume.maxSteps ? { maxSteps: resume.maxSteps } : {}),
380
+ ...(resume.dispatchedAt ? { dispatchedAt: resume.dispatchedAt } : {}),
381
+ }
382
+ : {}),
383
+ // One resume row per answer, keyed on the call: a second enqueue for the
384
+ // same answer is refused by the queue itself.
385
+ }, { key: resumeJobKey(input.toolCallId) });
386
+ }
387
+ catch (err) {
388
+ if (err instanceof DuplicateJobError)
389
+ return { delivered: false, error: 'This request was already answered' };
390
+ // The answer is withdrawn so a retry of the request can land it.
391
+ await deps.kv.del(hitlKey(input.toolCallId)).catch(() => undefined);
392
+ throw new Error(`resume dispatch: ${err instanceof Error ? err.message : String(err)}`);
393
+ }
394
+ // The park's own deadline is answered for: its row is withdrawn rather than
395
+ // left to be delivered as a no-op. Best-effort, like the row itself.
396
+ await deps.queue.cancel(expiryJobKey(input.toolCallId)).catch((err) => {
397
+ (deps.log ?? console).warn?.('park expiry row not withdrawn', { threadId: input.threadId, toolCallId: input.toolCallId, err });
270
398
  });
271
399
  return { delivered: true };
272
400
  }
@@ -1 +1 @@
1
- {"version":3,"file":"hitl.js","sourceRoot":"","sources":["../../src/core/hitl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hitl.js","sourceRoot":"","sources":["../../src/core/hitl.ts"],"names":[],"mappings":"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"}
@@ -9,10 +9,28 @@ import type { RuntimePorts } from '../ports/runtime.js';
9
9
  * This key only moves forward. A worker whose id no longer matches knows it
10
10
  * has been replaced, whatever the state key says. */
11
11
  export declare const runIdKey: (threadId: string) => string;
12
- /** Re-dispatch counter for a job that keeps finding the run lock held by an
13
- * OLDER run (§2.8). Separate from `agent:attempts:` — a blocked job has not
14
- * failed, it simply has not started yet. */
15
- export declare const redriveKey: (threadId: string) => string;
12
+ /** Counts §2.8 failure retries of ONE run. Keyed by the run, so a new run on
13
+ * the thread starts with a full budget by construction and nothing an older
14
+ * run banked can reach it. A legacy job without a run id keys it by the
15
+ * thread instead; see `counterScope`. */
16
+ export declare const attemptsKey: (scope: string) => string;
17
+ /** Re-dispatch counter for a job that keeps finding the run lock held (§2.8).
18
+ * Separate from the attempts key — a blocked job has not failed, it simply
19
+ * has not started yet. Keyed by the run, like `attemptsKey`. */
20
+ export declare const redriveKey: (scope: string) => string;
21
+ /** What the retry counters are keyed by: the run id, or the thread id for a
22
+ * legacy dispatch that has none. */
23
+ export declare const counterScope: (threadId: string, runId?: string) => string;
24
+ /** How long a retry counter lives when nothing clears it: long past any retry
25
+ * backoff, short enough that a counter a crash left behind does not sit in
26
+ * the kv for ever. */
27
+ export declare const COUNTER_TTL_SECONDS: number;
28
+ /** How long a thread's hot keys (state, current run, event seq) live after
29
+ * they were last written. The durable row is the truth; these only save a
30
+ * read, so a thread idle past this simply reads storage again, and its seq
31
+ * counter carries on from the stored events (see nextSeq). Without an
32
+ * expiry, every thread ever run keeps three keys in the kv for ever. */
33
+ export declare const THREAD_KEY_TTL_SECONDS: number;
16
34
  /** The run that owns the thread right now, or null on a thread that predates
17
35
  * run ids. Resuming a parked run (§2.5) REUSES this — a resume is the same
18
36
  * run continuing, not a new one, so it must never bump the id. */
@@ -1 +1 @@
1
- {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/core/keys.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD;;;;;;;;sDAQsD;AACtD,eAAO,MAAM,QAAQ,GAAI,UAAU,MAAM,WAA4B,CAAC;AAEtE;;6CAE6C;AAC7C,eAAO,MAAM,UAAU,GAAI,UAAU,MAAM,WAAgC,CAAC;AAE5E;;mEAEmE;AACnE,wBAAsB,YAAY,CAChC,IAAI,EAAE,YAAY,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE7B;AAED;;;;qCAIqC;AACrC,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAIpF"}
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/core/keys.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD;;;;;;;;sDAQsD;AACtD,eAAO,MAAM,QAAQ,GAAI,UAAU,MAAM,WAA4B,CAAC;AAEtE;;;0CAG0C;AAC1C,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,WAA8B,CAAC;AAExE;;iEAEiE;AACjE,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,WAA6B,CAAC;AAEtE;qCACqC;AACrC,eAAO,MAAM,YAAY,GAAI,UAAU,MAAM,EAAE,QAAQ,MAAM,WAAsB,CAAC;AAEpF;;uBAEuB;AACvB,eAAO,MAAM,mBAAmB,QAAc,CAAC;AAE/C;;;;yEAIyE;AACzE,eAAO,MAAM,sBAAsB,QAAoB,CAAC;AAExD;;mEAEmE;AACnE,wBAAsB,YAAY,CAChC,IAAI,EAAE,YAAY,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE7B;AAED;;;;qCAIqC;AACrC,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAIpF"}
package/dist/core/keys.js CHANGED
@@ -9,10 +9,28 @@ import { randomUUID } from 'node:crypto';
9
9
  * This key only moves forward. A worker whose id no longer matches knows it
10
10
  * has been replaced, whatever the state key says. */
11
11
  export const runIdKey = (threadId) => `agent:run:${threadId}`;
12
- /** Re-dispatch counter for a job that keeps finding the run lock held by an
13
- * OLDER run (§2.8). Separate from `agent:attempts:` — a blocked job has not
14
- * failed, it simply has not started yet. */
15
- export const redriveKey = (threadId) => `agent:redrive:${threadId}`;
12
+ /** Counts §2.8 failure retries of ONE run. Keyed by the run, so a new run on
13
+ * the thread starts with a full budget by construction and nothing an older
14
+ * run banked can reach it. A legacy job without a run id keys it by the
15
+ * thread instead; see `counterScope`. */
16
+ export const attemptsKey = (scope) => `agent:attempts:${scope}`;
17
+ /** Re-dispatch counter for a job that keeps finding the run lock held (§2.8).
18
+ * Separate from the attempts key — a blocked job has not failed, it simply
19
+ * has not started yet. Keyed by the run, like `attemptsKey`. */
20
+ export const redriveKey = (scope) => `agent:redrive:${scope}`;
21
+ /** What the retry counters are keyed by: the run id, or the thread id for a
22
+ * legacy dispatch that has none. */
23
+ export const counterScope = (threadId, runId) => runId || threadId;
24
+ /** How long a retry counter lives when nothing clears it: long past any retry
25
+ * backoff, short enough that a counter a crash left behind does not sit in
26
+ * the kv for ever. */
27
+ export const COUNTER_TTL_SECONDS = 6 * 60 * 60;
28
+ /** How long a thread's hot keys (state, current run, event seq) live after
29
+ * they were last written. The durable row is the truth; these only save a
30
+ * read, so a thread idle past this simply reads storage again, and its seq
31
+ * counter carries on from the stored events (see nextSeq). Without an
32
+ * expiry, every thread ever run keeps three keys in the kv for ever. */
33
+ export const THREAD_KEY_TTL_SECONDS = 30 * 24 * 60 * 60;
16
34
  /** The run that owns the thread right now, or null on a thread that predates
17
35
  * run ids. Resuming a parked run (§2.5) REUSES this — a resume is the same
18
36
  * run continuing, not a new one, so it must never bump the id. */
@@ -26,7 +44,7 @@ export async function currentRunId(deps, threadId) {
26
44
  * new run is about to overwrite. */
27
45
  export async function claimRun(deps, threadId) {
28
46
  const runId = randomUUID();
29
- await deps.kv.set(runIdKey(threadId), runId);
47
+ await deps.kv.set(runIdKey(threadId), runId, { exSeconds: THREAD_KEY_TTL_SECONDS });
30
48
  return runId;
31
49
  }
32
50
  //# sourceMappingURL=keys.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/core/keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC;;;;;;;;sDAQsD;AACtD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,QAAgB,EAAE,EAAE,CAAC,aAAa,QAAQ,EAAE,CAAC;AAEtE;;6CAE6C;AAC7C,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,QAAgB,EAAE,EAAE,CAAC,iBAAiB,QAAQ,EAAE,CAAC;AAE5E;;mEAEmE;AACnE,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAkB,EAClB,QAAgB;IAEhB,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;AAC9D,CAAC;AAED;;;;qCAIqC;AACrC,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAkB,EAAE,QAAgB;IACjE,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;IAC3B,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7C,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/core/keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC;;;;;;;;sDAQsD;AACtD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,QAAgB,EAAE,EAAE,CAAC,aAAa,QAAQ,EAAE,CAAC;AAEtE;;;0CAG0C;AAC1C,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,kBAAkB,KAAK,EAAE,CAAC;AAExE;;iEAEiE;AACjE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,iBAAiB,KAAK,EAAE,CAAC;AAEtE;qCACqC;AACrC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,QAAgB,EAAE,KAAc,EAAE,EAAE,CAAC,KAAK,IAAI,QAAQ,CAAC;AAEpF;;uBAEuB;AACvB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;AAE/C;;;;yEAIyE;AACzE,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAExD;;mEAEmE;AACnE,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAkB,EAClB,QAAgB;IAEhB,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;AAC9D,CAAC;AAED;;;;qCAIqC;AACrC,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAkB,EAAE,QAAgB;IACjE,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;IAC3B,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,sBAAsB,EAAE,CAAC,CAAC;IACpF,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,46 @@
1
+ import type { RuntimePorts } from '../ports/runtime.js';
2
+ import type { EnqueueOptions } from '../ports/queue.js';
3
+ import type { RunJob } from './types.js';
4
+ /** The one way the platform puts a job on the queue: it stamps the job with a
5
+ * fresh `dispatchId`, so every enqueue is a delivery of its own and only the
6
+ * queue's own redelivery repeats one (§3.4). */
7
+ export declare function enqueueJob(deps: RuntimePorts, job: RunJob, opts?: EnqueueOptions): Promise<void>;
8
+ /** The per-thread run lock (§3.4). */
9
+ export declare const runLockKey: (threadId: string) => string;
10
+ export declare function parseLockValue(value: string | null): {
11
+ runId: string | null;
12
+ dispatchId: string | null;
13
+ };
14
+ /** Thrown out of a loop whose lease was lost between steps: another worker
15
+ * may own the thread, so this one must not write another step to it. */
16
+ export declare class RunLockLostError extends Error {
17
+ constructor();
18
+ }
19
+ /** One holder's grip on a thread's run lock. */
20
+ export declare class Lease {
21
+ private readonly deps;
22
+ private readonly key;
23
+ private readonly value;
24
+ private lostFlag;
25
+ private timer?;
26
+ private released;
27
+ private constructor();
28
+ /** Take the thread's run lock for a run and one delivery of it; null when
29
+ * someone else holds it. */
30
+ static acquire(deps: RuntimePorts, threadId: string, runId: string | undefined, dispatchId: string | undefined): Promise<Lease | null>;
31
+ /** The lease could not be kept. Another worker may own the thread by now,
32
+ * so the holder must stop writing to it. */
33
+ get lost(): boolean;
34
+ /** Renew in the background until `release`, the way a queue renews a job
35
+ * lease: an expired lock then means a dead worker and nothing else.
36
+ * `onLost` runs once, when the lease cannot be kept — the key is gone or
37
+ * holds another holder's value, or no renewal has landed for two thirds of
38
+ * the lease (it is then close to lapsing, and another worker may take it
39
+ * before the next try). */
40
+ keep(onLost?: () => void): void;
41
+ /** Stop renewing and free the lock, only while it is still this holder's.
42
+ * Safe to call more than once. */
43
+ release(): Promise<void>;
44
+ private stop;
45
+ }
46
+ //# sourceMappingURL=lease.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lease.d.ts","sourceRoot":"","sources":["../../src/core/lease.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC;;iDAEiD;AACjD,wBAAgB,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhG;AAED,sCAAsC;AACtC,eAAO,MAAM,UAAU,GAAI,UAAU,MAAM,WAA6B,CAAC;AAiBzE,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG;IAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAKxG;AAED;yEACyE;AACzE,qBAAa,gBAAiB,SAAQ,KAAK;;CAK1C;AAED,gDAAgD;AAChD,qBAAa,KAAK;IAMd,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAPxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAC,CAAiC;IAC/C,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO;IAMP;iCAC6B;WAChB,OAAO,CAClB,IAAI,EAAE,YAAY,EAClB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAUxB;iDAC6C;IAC7C,IAAI,IAAI,IAAI,OAAO,CAElB;IAED;;;;;gCAK4B;IAC5B,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI;IAwD/B;uCACmC;IAC7B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B,OAAO,CAAC,IAAI;CAIb"}