agentenkit 0.3.0 → 0.5.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.
- package/README.md +82 -15
- package/dist/adapters/brave.d.ts +21 -0
- package/dist/adapters/brave.d.ts.map +1 -0
- package/dist/adapters/brave.js +52 -0
- package/dist/adapters/brave.js.map +1 -0
- package/dist/adapters/computesdk.d.ts +71 -0
- package/dist/adapters/computesdk.d.ts.map +1 -0
- package/dist/adapters/computesdk.js +163 -0
- package/dist/adapters/computesdk.js.map +1 -0
- package/dist/adapters/docker.d.ts +35 -0
- package/dist/adapters/docker.d.ts.map +1 -0
- package/dist/adapters/docker.js +246 -0
- package/dist/adapters/docker.js.map +1 -0
- package/dist/adapters/e2b.d.ts +44 -0
- package/dist/adapters/e2b.d.ts.map +1 -0
- package/dist/adapters/e2b.js +349 -0
- package/dist/adapters/e2b.js.map +1 -0
- package/dist/adapters/inline.d.ts +19 -5
- package/dist/adapters/inline.d.ts.map +1 -1
- package/dist/adapters/inline.js +87 -14
- package/dist/adapters/inline.js.map +1 -1
- package/dist/adapters/jina.d.ts +34 -0
- package/dist/adapters/jina.d.ts.map +1 -0
- package/dist/adapters/jina.js +99 -0
- package/dist/adapters/jina.js.map +1 -0
- package/dist/adapters/local-sandbox.d.ts +32 -0
- package/dist/adapters/local-sandbox.d.ts.map +1 -0
- package/dist/adapters/local-sandbox.js +257 -0
- package/dist/adapters/local-sandbox.js.map +1 -0
- package/dist/adapters/memory.d.ts +146 -3
- package/dist/adapters/memory.d.ts.map +1 -1
- package/dist/adapters/memory.js +474 -3
- package/dist/adapters/memory.js.map +1 -1
- package/dist/adapters/page-reader.d.ts +39 -0
- package/dist/adapters/page-reader.d.ts.map +1 -0
- package/dist/adapters/page-reader.js +165 -0
- package/dist/adapters/page-reader.js.map +1 -0
- package/dist/adapters/prisma.d.ts +125 -18
- package/dist/adapters/prisma.d.ts.map +1 -1
- package/dist/adapters/prisma.js +308 -67
- package/dist/adapters/prisma.js.map +1 -1
- package/dist/adapters/qstash.d.ts +15 -2
- package/dist/adapters/qstash.d.ts.map +1 -1
- package/dist/adapters/qstash.js +31 -14
- package/dist/adapters/qstash.js.map +1 -1
- package/dist/adapters/redis.d.ts +40 -4
- package/dist/adapters/redis.d.ts.map +1 -1
- package/dist/adapters/redis.js +265 -20
- package/dist/adapters/redis.js.map +1 -1
- package/dist/adapters/sandbox-shell.d.ts +60 -0
- package/dist/adapters/sandbox-shell.d.ts.map +1 -0
- package/dist/adapters/sandbox-shell.js +129 -0
- package/dist/adapters/sandbox-shell.js.map +1 -0
- package/dist/adapters/sqlite.d.ts +88 -2
- package/dist/adapters/sqlite.d.ts.map +1 -1
- package/dist/adapters/sqlite.js +443 -37
- package/dist/adapters/sqlite.js.map +1 -1
- package/dist/adapters/stream-scripts.d.ts +49 -0
- package/dist/adapters/stream-scripts.d.ts.map +1 -0
- package/dist/adapters/stream-scripts.js +150 -0
- package/dist/adapters/stream-scripts.js.map +1 -0
- package/dist/adapters/upstash.d.ts +20 -0
- package/dist/adapters/upstash.d.ts.map +1 -1
- package/dist/adapters/upstash.js +29 -0
- package/dist/adapters/upstash.js.map +1 -1
- package/dist/adapters/web-search-shared.d.ts +11 -0
- package/dist/adapters/web-search-shared.d.ts.map +1 -0
- package/dist/adapters/web-search-shared.js +40 -0
- package/dist/adapters/web-search-shared.js.map +1 -0
- package/dist/admin/memory.d.ts +11 -1
- package/dist/admin/memory.d.ts.map +1 -1
- package/dist/admin/memory.js +83 -14
- package/dist/admin/memory.js.map +1 -1
- package/dist/admin/migrations/postgres/0002-run-settled-at.d.ts +5 -0
- package/dist/admin/migrations/postgres/0002-run-settled-at.d.ts.map +1 -0
- package/dist/admin/migrations/postgres/0002-run-settled-at.js +11 -0
- package/dist/admin/migrations/postgres/0002-run-settled-at.js.map +1 -0
- package/dist/admin/migrations/postgres/0003-run-enqueued-at.d.ts +5 -0
- package/dist/admin/migrations/postgres/0003-run-enqueued-at.d.ts.map +1 -0
- package/dist/admin/migrations/postgres/0003-run-enqueued-at.js +15 -0
- package/dist/admin/migrations/postgres/0003-run-enqueued-at.js.map +1 -0
- package/dist/admin/migrations/postgres/0004-run-settle-claim.d.ts +5 -0
- package/dist/admin/migrations/postgres/0004-run-settle-claim.d.ts.map +1 -0
- package/dist/admin/migrations/postgres/0004-run-settle-claim.js +15 -0
- package/dist/admin/migrations/postgres/0004-run-settle-claim.js.map +1 -0
- package/dist/admin/migrations/postgres/0005-bigint-counters.d.ts +5 -0
- package/dist/admin/migrations/postgres/0005-bigint-counters.d.ts.map +1 -0
- package/dist/admin/migrations/postgres/0005-bigint-counters.js +12 -0
- package/dist/admin/migrations/postgres/0005-bigint-counters.js.map +1 -0
- package/dist/admin/migrations/postgres/index.d.ts.map +1 -1
- package/dist/admin/migrations/postgres/index.js +16 -1
- package/dist/admin/migrations/postgres/index.js.map +1 -1
- package/dist/admin/migrations/runner.d.ts +21 -1
- package/dist/admin/migrations/runner.d.ts.map +1 -1
- package/dist/admin/migrations/runner.js +41 -4
- package/dist/admin/migrations/runner.js.map +1 -1
- package/dist/admin/migrations/sqlite/0002-run-settled-at.d.ts +5 -0
- package/dist/admin/migrations/sqlite/0002-run-settled-at.d.ts.map +1 -0
- package/dist/admin/migrations/sqlite/0002-run-settled-at.js +11 -0
- package/dist/admin/migrations/sqlite/0002-run-settled-at.js.map +1 -0
- package/dist/admin/migrations/sqlite/0003-run-enqueued-at.d.ts +5 -0
- package/dist/admin/migrations/sqlite/0003-run-enqueued-at.d.ts.map +1 -0
- package/dist/admin/migrations/sqlite/0003-run-enqueued-at.js +15 -0
- package/dist/admin/migrations/sqlite/0003-run-enqueued-at.js.map +1 -0
- package/dist/admin/migrations/sqlite/0004-run-settle-claim.d.ts +5 -0
- package/dist/admin/migrations/sqlite/0004-run-settle-claim.d.ts.map +1 -0
- package/dist/admin/migrations/sqlite/0004-run-settle-claim.js +15 -0
- package/dist/admin/migrations/sqlite/0004-run-settle-claim.js.map +1 -0
- package/dist/admin/migrations/sqlite/index.d.ts +2 -2
- package/dist/admin/migrations/sqlite/index.d.ts.map +1 -1
- package/dist/admin/migrations/sqlite/index.js +17 -3
- package/dist/admin/migrations/sqlite/index.js.map +1 -1
- package/dist/admin/postgres.d.ts +14 -4
- package/dist/admin/postgres.d.ts.map +1 -1
- package/dist/admin/postgres.js +131 -36
- package/dist/admin/postgres.js.map +1 -1
- package/dist/admin/shared.d.ts +19 -0
- package/dist/admin/shared.d.ts.map +1 -0
- package/dist/admin/shared.js +28 -0
- package/dist/admin/shared.js.map +1 -0
- package/dist/admin/sqlite.d.ts +9 -1
- package/dist/admin/sqlite.d.ts.map +1 -1
- package/dist/admin/sqlite.js +112 -29
- package/dist/admin/sqlite.js.map +1 -1
- package/dist/core/admin.d.ts +28 -6
- package/dist/core/admin.d.ts.map +1 -1
- package/dist/core/admin.js +92 -23
- package/dist/core/admin.js.map +1 -1
- package/dist/core/agent.d.ts +7 -4
- package/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js +15 -11
- package/dist/core/agent.js.map +1 -1
- package/dist/core/agui.d.ts +17 -0
- package/dist/core/agui.d.ts.map +1 -0
- package/dist/core/agui.js +69 -0
- package/dist/core/agui.js.map +1 -0
- package/dist/core/builtin/definitions.d.ts +12 -0
- package/dist/core/builtin/definitions.d.ts.map +1 -0
- package/dist/core/builtin/definitions.js +149 -0
- package/dist/core/builtin/definitions.js.map +1 -0
- package/dist/core/builtin/html.d.ts +13 -0
- package/dist/core/builtin/html.d.ts.map +1 -0
- package/dist/core/builtin/html.js +96 -0
- package/dist/core/builtin/html.js.map +1 -0
- package/dist/core/builtin/index.d.ts +21 -0
- package/dist/core/builtin/index.d.ts.map +1 -0
- package/dist/core/builtin/index.js +55 -0
- package/dist/core/builtin/index.js.map +1 -0
- package/dist/core/builtin/run.d.ts +37 -0
- package/dist/core/builtin/run.d.ts.map +1 -0
- package/dist/core/builtin/run.js +55 -0
- package/dist/core/builtin/run.js.map +1 -0
- package/dist/core/builtin/sandbox-tools.d.ts +69 -0
- package/dist/core/builtin/sandbox-tools.d.ts.map +1 -0
- package/dist/core/builtin/sandbox-tools.js +389 -0
- package/dist/core/builtin/sandbox-tools.js.map +1 -0
- package/dist/core/builtin/sandbox.d.ts +52 -0
- package/dist/core/builtin/sandbox.d.ts.map +1 -0
- package/dist/core/builtin/sandbox.js +174 -0
- package/dist/core/builtin/sandbox.js.map +1 -0
- package/dist/core/builtin/web.d.ts +54 -0
- package/dist/core/builtin/web.d.ts.map +1 -0
- package/dist/core/builtin/web.js +167 -0
- package/dist/core/builtin/web.js.map +1 -0
- package/dist/core/context.d.ts +13 -1
- package/dist/core/context.d.ts.map +1 -1
- package/dist/core/context.js +70 -19
- package/dist/core/context.js.map +1 -1
- package/dist/core/deleteThread.d.ts.map +1 -1
- package/dist/core/deleteThread.js +36 -4
- package/dist/core/deleteThread.js.map +1 -1
- package/dist/core/engine.d.ts +41 -11
- package/dist/core/engine.d.ts.map +1 -1
- package/dist/core/engine.js +880 -353
- package/dist/core/engine.js.map +1 -1
- package/dist/core/follow.d.ts +63 -1
- package/dist/core/follow.d.ts.map +1 -1
- package/dist/core/follow.js +293 -16
- package/dist/core/follow.js.map +1 -1
- package/dist/core/hitl.d.ts +43 -0
- package/dist/core/hitl.d.ts.map +1 -1
- package/dist/core/hitl.js +163 -35
- package/dist/core/hitl.js.map +1 -1
- package/dist/core/keys.d.ts +22 -4
- package/dist/core/keys.d.ts.map +1 -1
- package/dist/core/keys.js +23 -5
- package/dist/core/keys.js.map +1 -1
- package/dist/core/lease.d.ts +46 -0
- package/dist/core/lease.d.ts.map +1 -0
- package/dist/core/lease.js +142 -0
- package/dist/core/lease.js.map +1 -0
- package/dist/core/loop.d.ts +27 -7
- package/dist/core/loop.d.ts.map +1 -1
- package/dist/core/loop.js +140 -55
- package/dist/core/loop.js.map +1 -1
- package/dist/core/messages.d.ts +21 -2
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js +61 -2
- package/dist/core/messages.js.map +1 -1
- package/dist/core/permanent.d.ts +11 -0
- package/dist/core/permanent.d.ts.map +1 -0
- package/dist/core/permanent.js +37 -0
- package/dist/core/permanent.js.map +1 -0
- package/dist/core/prune.d.ts +24 -0
- package/dist/core/prune.d.ts.map +1 -0
- package/dist/core/prune.js +43 -0
- package/dist/core/prune.js.map +1 -0
- package/dist/core/publish.d.ts +38 -10
- package/dist/core/publish.d.ts.map +1 -1
- package/dist/core/publish.js +126 -12
- package/dist/core/publish.js.map +1 -1
- package/dist/core/reclaim.d.ts +8 -1
- package/dist/core/reclaim.d.ts.map +1 -1
- package/dist/core/reclaim.js +149 -18
- package/dist/core/reclaim.js.map +1 -1
- package/dist/core/run.d.ts +7 -3
- package/dist/core/run.d.ts.map +1 -1
- package/dist/core/run.js +95 -35
- package/dist/core/run.js.map +1 -1
- package/dist/core/segment.d.ts +62 -0
- package/dist/core/segment.d.ts.map +1 -0
- package/dist/core/segment.js +318 -0
- package/dist/core/segment.js.map +1 -0
- package/dist/core/settle.d.ts +57 -0
- package/dist/core/settle.d.ts.map +1 -0
- package/dist/core/settle.js +181 -0
- package/dist/core/settle.js.map +1 -0
- package/dist/core/snapshot.d.ts +36 -0
- package/dist/core/snapshot.d.ts.map +1 -0
- package/dist/core/snapshot.js +87 -0
- package/dist/core/snapshot.js.map +1 -0
- package/dist/core/stop.d.ts +16 -1
- package/dist/core/stop.d.ts.map +1 -1
- package/dist/core/stop.js +69 -15
- package/dist/core/stop.js.map +1 -1
- package/dist/core/stream-events.d.ts +184 -0
- package/dist/core/stream-events.d.ts.map +1 -0
- package/dist/core/stream-events.js +26 -0
- package/dist/core/stream-events.js.map +1 -0
- package/dist/core/stream.d.ts +29 -0
- package/dist/core/stream.d.ts.map +1 -1
- package/dist/core/stream.js +79 -0
- package/dist/core/stream.js.map +1 -1
- package/dist/core/subagent.d.ts +36 -5
- package/dist/core/subagent.d.ts.map +1 -1
- package/dist/core/subagent.js +130 -25
- package/dist/core/subagent.js.map +1 -1
- package/dist/core/tools.d.ts +9 -3
- package/dist/core/tools.d.ts.map +1 -1
- package/dist/core/tools.js.map +1 -1
- package/dist/core/types.d.ts +212 -13
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +29 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/usage.d.ts +53 -5
- package/dist/core/usage.d.ts.map +1 -1
- package/dist/core/usage.js +170 -47
- package/dist/core/usage.js.map +1 -1
- package/dist/index.d.ts +29 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -7
- package/dist/index.js.map +1 -1
- package/dist/ports/admin.d.ts +59 -0
- package/dist/ports/admin.d.ts.map +1 -1
- package/dist/ports/kv.d.ts +17 -0
- package/dist/ports/kv.d.ts.map +1 -1
- package/dist/ports/queue.d.ts +87 -7
- package/dist/ports/queue.d.ts.map +1 -1
- package/dist/ports/queue.js +36 -1
- package/dist/ports/queue.js.map +1 -1
- package/dist/ports/runtime.d.ts +188 -20
- package/dist/ports/runtime.d.ts.map +1 -1
- package/dist/ports/sandbox.d.ts +159 -0
- package/dist/ports/sandbox.d.ts.map +1 -0
- package/dist/ports/sandbox.js +44 -0
- package/dist/ports/sandbox.js.map +1 -0
- package/dist/ports/storage.d.ts +26 -5
- package/dist/ports/storage.d.ts.map +1 -1
- package/dist/ports/streams.d.ts +60 -0
- package/dist/ports/streams.d.ts.map +1 -0
- package/dist/ports/streams.js +20 -0
- package/dist/ports/streams.js.map +1 -0
- package/dist/ports/tools.d.ts +60 -0
- package/dist/ports/tools.d.ts.map +1 -0
- package/dist/ports/tools.js +5 -0
- package/dist/ports/tools.js.map +1 -0
- package/dist/pricing.d.ts +29 -0
- package/dist/pricing.d.ts.map +1 -1
- package/dist/pricing.js +64 -10
- package/dist/pricing.js.map +1 -1
- package/dist/runtime.d.ts +6 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +147 -46
- package/dist/runtime.js.map +1 -1
- package/package.json +1 -1
package/dist/core/hitl.d.ts
CHANGED
|
@@ -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: {
|
package/dist/core/hitl.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hitl.d.ts","sourceRoot":"","sources":["../../src/core/hitl.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,KAAK,EAAc,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
83
|
-
|
|
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
|
-
|
|
115
|
-
|
|
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
|
-
|
|
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
|
|
219
|
+
await enqueueJob(deps, {
|
|
220
|
+
kind: 'expiry',
|
|
142
221
|
threadId: i.threadId,
|
|
143
|
-
runId
|
|
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
|
-
|
|
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
|
-
|
|
211
|
-
|
|
212
|
-
|
|
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
|
-
|
|
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
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
? {
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
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
|
}
|
package/dist/core/hitl.js.map
CHANGED
|
@@ -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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"}
|
package/dist/core/keys.d.ts
CHANGED
|
@@ -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
|
-
/**
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
|
|
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. */
|
package/dist/core/keys.d.ts.map
CHANGED
|
@@ -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;;
|
|
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
|
-
/**
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
|
|
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
|
package/dist/core/keys.js.map
CHANGED
|
@@ -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;;
|
|
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"}
|