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/reclaim.js
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import { currentRunId } from './keys.js';
|
|
2
2
|
import { hitlDeadline, loadOpenHitls } from './hitl.js';
|
|
3
|
+
import { enqueueJob } from './lease.js';
|
|
4
|
+
import { DuplicateJobError, PRIORITY_LOW, UnsupportedError } from '../ports/queue.js';
|
|
5
|
+
import { runLockKey } from './lease.js';
|
|
6
|
+
import { ACTIVE_STATES, publish, transition } from './publish.js';
|
|
7
|
+
import { closeLostSegment } from './segment.js';
|
|
8
|
+
import { isTerminal } from './settle.js';
|
|
3
9
|
// Small grace so an in-flight /respond delivery always lands first —
|
|
4
10
|
// reclamation only ever sees true orphans.
|
|
5
11
|
export function reclaimGraceAfterMs(deps) {
|
|
@@ -13,6 +19,13 @@ export function reclaimGraceAfterMs(deps) {
|
|
|
13
19
|
* delay. Callers are first-touch checks in run() and respond(), plus any
|
|
14
20
|
* listener that wants the denial to land live in front of a user.
|
|
15
21
|
*
|
|
22
|
+
* It also covers a run the queue lost: a thread QUEUED or RUNNING whose run
|
|
23
|
+
* lock nobody holds and whose job the queue no longer has. A worker that died
|
|
24
|
+
* leaves exactly that behind once its lock lapses, and so does a job dropped
|
|
25
|
+
* as dead. The run is re-dispatched and resumes from its last persisted
|
|
26
|
+
* step, unless its record already ended, in which case the thread is moved
|
|
27
|
+
* to match the record.
|
|
28
|
+
*
|
|
16
29
|
* It no longer heals inline. It re-dispatches the run and lets the engine
|
|
17
30
|
* resolve the park, so there is exactly ONE definition of what an expired
|
|
18
31
|
* approval becomes — and so a thread holding several open approvals (§2.7)
|
|
@@ -20,10 +33,14 @@ export function reclaimGraceAfterMs(deps) {
|
|
|
20
33
|
* same run twice is safe: the run lock and the engine's readiness check make
|
|
21
34
|
* the duplicate a no-op (§2.8).
|
|
22
35
|
*
|
|
23
|
-
* Returns true iff a re-dispatch was enqueued. */
|
|
36
|
+
* Returns true iff a re-dispatch was enqueued or the thread was healed. */
|
|
24
37
|
export async function reclaimIfOrphaned(deps, threadId) {
|
|
25
38
|
const thread = await deps.storage.threads.get(threadId);
|
|
26
|
-
if (thread
|
|
39
|
+
if (!thread)
|
|
40
|
+
return false;
|
|
41
|
+
if (thread.state === 'QUEUED' || thread.state === 'RUNNING')
|
|
42
|
+
return reclaimLost(deps, thread);
|
|
43
|
+
if (thread.state !== 'WAITING_FOR_INPUT')
|
|
27
44
|
return false;
|
|
28
45
|
const open = await loadOpenHitls(deps, threadId);
|
|
29
46
|
if (open.length === 0)
|
|
@@ -38,22 +55,136 @@ export async function reclaimIfOrphaned(deps, threadId) {
|
|
|
38
55
|
// payload; a legacy park without one falls back to the default handle.
|
|
39
56
|
const requested = await deps.storage.events.listByType(threadId, 'INPUT_REQUIRED');
|
|
40
57
|
const resume = requested.at(-1)?.payload?.resume;
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
58
|
+
// Resuming a parked run REUSES its id — it is the same run continuing, and
|
|
59
|
+
// the park's own expiry job must stay a duplicate of this one (§2.1). Keyed
|
|
60
|
+
// on the run, so two callers that heal the thread at once queue one job.
|
|
61
|
+
const runId = await currentRunId(deps, threadId);
|
|
62
|
+
try {
|
|
63
|
+
await enqueueJob(deps, {
|
|
64
|
+
kind: 'reclaim',
|
|
65
|
+
threadId,
|
|
66
|
+
runId,
|
|
67
|
+
model: resume?.model ?? thread.model,
|
|
68
|
+
...(resume
|
|
69
|
+
? {
|
|
70
|
+
agent: resume.agent,
|
|
71
|
+
...(resume.tokenBudget !== undefined ? { tokenBudget: resume.tokenBudget } : {}),
|
|
72
|
+
...(resume.providerOptions ? { providerOptions: resume.providerOptions } : {}),
|
|
73
|
+
...(resume.state ? { state: resume.state } : {}),
|
|
74
|
+
...(resume.costBudgetMicros !== undefined ? { costBudgetMicros: resume.costBudgetMicros } : {}),
|
|
75
|
+
...(resume.maxSteps ? { maxSteps: resume.maxSteps } : {}),
|
|
76
|
+
...(resume.dispatchedAt ? { dispatchedAt: resume.dispatchedAt } : {}),
|
|
77
|
+
}
|
|
78
|
+
: {}),
|
|
79
|
+
}, { key: `reclaim:${runId}`, priority: PRIORITY_LOW });
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
if (err instanceof DuplicateJobError)
|
|
83
|
+
return false; // someone else got there first
|
|
84
|
+
throw err;
|
|
85
|
+
}
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
/** Re-dispatch a QUEUED or RUNNING thread that nothing is working on: no run
|
|
89
|
+
* lock, no job on the queue, and a run record that has sat untouched for
|
|
90
|
+
* longer than a lock lease. With a queue that cannot look a job up, the
|
|
91
|
+
* run must also have been quiet for longer than any of its jobs could
|
|
92
|
+
* wait. */
|
|
93
|
+
async function reclaimLost(deps, thread) {
|
|
94
|
+
const threadId = thread.id;
|
|
95
|
+
const runId = await currentRunId(deps, threadId);
|
|
96
|
+
if (!runId)
|
|
97
|
+
return false;
|
|
98
|
+
// A live worker: the lock is renewed while one runs (§3.4).
|
|
99
|
+
if ((await deps.kv.get(runLockKey(threadId))) !== null)
|
|
100
|
+
return false;
|
|
101
|
+
// A queue that cannot look a job up (QStash) cannot say whether it still
|
|
102
|
+
// holds this one. Then only time can: see the wait below.
|
|
103
|
+
let queueCannotSay = false;
|
|
104
|
+
try {
|
|
105
|
+
if (await deps.queue.find(runId))
|
|
106
|
+
return false; // still queued, or leased: the queue has it
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
if (!(err instanceof UnsupportedError))
|
|
110
|
+
throw err;
|
|
111
|
+
queueCannotSay = true;
|
|
112
|
+
}
|
|
113
|
+
const rec = await deps.admin.runs.get(runId);
|
|
114
|
+
if (!rec)
|
|
115
|
+
return false;
|
|
116
|
+
const log = (deps.log ?? console);
|
|
117
|
+
if (rec.endedAt) {
|
|
118
|
+
// The run ended but the thread never heard: a finalize that failed half
|
|
119
|
+
// way. The thread is moved to match the record.
|
|
120
|
+
const state = isTerminal(rec.state) ? rec.state : 'FAILED';
|
|
121
|
+
log.warn?.("thread stuck past its run's end; moved to the run's state", { threadId, runId, state });
|
|
122
|
+
if (!(await transition(deps, threadId, { from: ACTIVE_STATES, to: state, runId, model: thread.model }))) {
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
await publish(deps, threadId, 'STATE_CHANGE', {
|
|
126
|
+
state, stopReason: rec.stopReason, runId, endedAt: rec.endedAt,
|
|
127
|
+
});
|
|
128
|
+
await closeLostSegment(deps, threadId, runId, 'the run ended but its worker never closed its stream');
|
|
129
|
+
return true;
|
|
130
|
+
}
|
|
131
|
+
// A run just accepted has no lock and no job for a moment between its state
|
|
132
|
+
// write and its enqueue. A lock lease of silence tells that apart from a run
|
|
133
|
+
// nobody will ever pick up.
|
|
134
|
+
let last = new Date(rec.startedAt).getTime();
|
|
135
|
+
if (rec.enqueuedAt && new Date(rec.enqueuedAt).getTime() > last)
|
|
136
|
+
last = new Date(rec.enqueuedAt).getTime();
|
|
137
|
+
let wait = deps.config.runLockLeaseSeconds * 1000;
|
|
138
|
+
if (queueCannotSay) {
|
|
139
|
+
// Without the queue's word, the run is lost only once it has been quiet
|
|
140
|
+
// for longer than any job of it could fairly wait: a retry sent back
|
|
141
|
+
// with a delay, or a queue with a wait limit. The thread's own last
|
|
142
|
+
// change counts too, since a retry moves it back to QUEUED. Should the
|
|
143
|
+
// job turn up after all, it finds the run taken and does nothing.
|
|
144
|
+
const touched = new Date(thread.updatedAt).getTime();
|
|
145
|
+
if (touched > last)
|
|
146
|
+
last = touched;
|
|
147
|
+
wait = Math.max(wait, deps.config.maxQueueWaitMs, longestRetryDelayMs(deps));
|
|
148
|
+
}
|
|
149
|
+
if (Date.now() - last < wait)
|
|
150
|
+
return false;
|
|
151
|
+
log.warn?.('run lost by the queue; re-dispatched', { threadId, runId, state: thread.state });
|
|
152
|
+
// A worker that took it and died may have left its segment's stream open.
|
|
153
|
+
await closeLostSegment(deps, threadId, runId, 'the worker was lost; the run was dispatched again');
|
|
154
|
+
try {
|
|
155
|
+
await enqueueJob(deps, {
|
|
156
|
+
kind: 'reclaim',
|
|
157
|
+
threadId, runId, model: rec.model, agent: rec.agent,
|
|
158
|
+
enqueuedAt: Date.now(),
|
|
159
|
+
...(rec.enqueuedAt ? { dispatchedAt: new Date(rec.enqueuedAt).getTime() } : {}),
|
|
160
|
+
...(rec.runState ? { state: rec.runState } : {}),
|
|
161
|
+
...(rec.providerOptions ? { providerOptions: rec.providerOptions } : {}),
|
|
162
|
+
...(rec.costBudgetMicros ? { costBudgetMicros: rec.costBudgetMicros } : {}),
|
|
163
|
+
...(rec.maxSteps ? { maxSteps: rec.maxSteps } : {}),
|
|
164
|
+
...(rec.tokenBudget ? { tokenBudget: rec.tokenBudget } : {}),
|
|
165
|
+
}, { key: `reclaim:${runId}`, priority: PRIORITY_LOW });
|
|
166
|
+
}
|
|
167
|
+
catch (err) {
|
|
168
|
+
if (err instanceof DuplicateJobError)
|
|
169
|
+
return false; // someone else got there first
|
|
170
|
+
throw err;
|
|
171
|
+
}
|
|
57
172
|
return true;
|
|
58
173
|
}
|
|
174
|
+
/** The longest a failed run's retry is held back (§2.8): the base doubled
|
|
175
|
+
* per attempt, capped, plus the most jitter a delay can get. */
|
|
176
|
+
function longestRetryDelayMs(deps) {
|
|
177
|
+
const { runRetryBackoffMs: base, runRetryBackoffMaxMs: max, runMaxAttempts } = deps.config;
|
|
178
|
+
if (base <= 0)
|
|
179
|
+
return 0;
|
|
180
|
+
let d = base;
|
|
181
|
+
for (let i = 1; i < runMaxAttempts; i++) {
|
|
182
|
+
d *= 2;
|
|
183
|
+
if (max > 0 && d >= max)
|
|
184
|
+
break;
|
|
185
|
+
}
|
|
186
|
+
if (max > 0 && d > max)
|
|
187
|
+
d = max;
|
|
188
|
+
return d + d / 4;
|
|
189
|
+
}
|
|
59
190
|
//# sourceMappingURL=reclaim.js.map
|
package/dist/core/reclaim.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reclaim.js","sourceRoot":"","sources":["../../src/core/reclaim.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"reclaim.js","sourceRoot":"","sources":["../../src/core/reclaim.ts"],"names":[],"mappings":"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"}
|
package/dist/core/run.d.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
import type { RuntimePorts, RunInput, RunResult } from '../ports/runtime.js';
|
|
1
|
+
import type { Attachment, RuntimePorts, RunInput, RunResult } from '../ports/runtime.js';
|
|
2
2
|
import type { RegisteredAgent } from './agent.js';
|
|
3
3
|
/** The §5.1 behavior: heal orphans → billing pre-check (§4) → persist the user
|
|
4
|
-
* message → state
|
|
4
|
+
* message → state QUEUED (hot + durable) → enqueue on the dispatch queue
|
|
5
5
|
* (§2.8). Accepts no execution responsibility whatsoever — the queue does
|
|
6
|
-
* the rest, and the job dispatches back to THIS handle.
|
|
6
|
+
* the rest, and the job dispatches back to THIS handle. The worker that picks
|
|
7
|
+
* the job up moves the thread to RUNNING. */
|
|
7
8
|
export declare function run(deps: RuntimePorts, agent: RegisteredAgent, input: RunInput): Promise<RunResult>;
|
|
9
|
+
/** A user turn: plain text alone, or text plus the images attached to it
|
|
10
|
+
* (§5.1), in the shape the model reads natively. */
|
|
11
|
+
export declare function userContent(text: string, attachments?: Attachment[]): unknown;
|
|
8
12
|
//# sourceMappingURL=run.d.ts.map
|
package/dist/core/run.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/core/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/core/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEzF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AASlD;;;;8CAI8C;AAC9C,wBAAsB,GAAG,CACvB,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,QAAQ,GACd,OAAO,CAAC,SAAS,CAAC,CAqNpB;AAwDD;qDACqD;AACrD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,UAAU,EAAE,GAAG,OAAO,CAO7E"}
|
package/dist/core/run.js
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
|
+
import { QueueFullError, UnsupportedError } from '../ports/queue.js';
|
|
1
2
|
import { reclaimIfOrphaned } from './reclaim.js';
|
|
2
|
-
import { runIdKey } from './keys.js';
|
|
3
|
+
import { runIdKey, THREAD_KEY_TTL_SECONDS } from './keys.js';
|
|
3
4
|
import { recordStoppedRun } from './stop.js';
|
|
4
5
|
import { randomUUID } from 'node:crypto';
|
|
5
|
-
import {
|
|
6
|
+
import { ACTIVE_STATES, publish, publishEvent, transition } from './publish.js';
|
|
6
7
|
import { mergeProviderOptions } from './types.js';
|
|
8
|
+
import { enqueueJob } from './lease.js';
|
|
7
9
|
/** The §5.1 behavior: heal orphans → billing pre-check (§4) → persist the user
|
|
8
|
-
* message → state
|
|
10
|
+
* message → state QUEUED (hot + durable) → enqueue on the dispatch queue
|
|
9
11
|
* (§2.8). Accepts no execution responsibility whatsoever — the queue does
|
|
10
|
-
* the rest, and the job dispatches back to THIS handle.
|
|
12
|
+
* the rest, and the job dispatches back to THIS handle. The worker that picks
|
|
13
|
+
* the job up moves the thread to RUNNING. */
|
|
11
14
|
export async function run(deps, agent, input) {
|
|
12
15
|
// Model resolution order (§3.1): run input → spec default → 'gpt-4o'
|
|
13
16
|
const model = input.model ?? agent.spec.model ?? 'gpt-4o';
|
|
@@ -23,9 +26,8 @@ export async function run(deps, agent, input) {
|
|
|
23
26
|
if (!thread)
|
|
24
27
|
return { accepted: false, threadId, error: 'Thread not found' };
|
|
25
28
|
const initialState = thread.state;
|
|
26
|
-
if (state
|
|
27
|
-
|
|
28
|
-
return { accepted: false, threadId, error: 'Thread has an active run' };
|
|
29
|
+
if (ACTIVE_STATES.includes(state) || ACTIVE_STATES.includes(thread.state)) {
|
|
30
|
+
return { accepted: false, threadId, reason: 'active_run', error: 'Thread has an active run' };
|
|
29
31
|
}
|
|
30
32
|
// Billing pre-execution check (§4) — user-injected hook. A refusal is
|
|
31
33
|
// published on the thread as well as returned, so every client on the
|
|
@@ -34,14 +36,45 @@ export async function run(deps, agent, input) {
|
|
|
34
36
|
const check = await deps.config.billingPreCheck({
|
|
35
37
|
threadId,
|
|
36
38
|
state: input.state ?? {},
|
|
39
|
+
stage: 'dispatch',
|
|
37
40
|
publishEvent: (type, payload, options) => publishEvent(deps, threadId, type, payload, options),
|
|
38
41
|
});
|
|
39
42
|
if (!check.ok) {
|
|
40
43
|
const error = check.error ?? 'Billing check failed';
|
|
41
44
|
await publish(deps, threadId, 'RUN_REFUSED', { reason: 'billing', error });
|
|
42
|
-
return { accepted: false, threadId, error };
|
|
45
|
+
return { accepted: false, threadId, reason: 'billing', error };
|
|
43
46
|
}
|
|
44
47
|
}
|
|
48
|
+
// Overload check (§2.8), BEFORE anything is written: a queue at its depth
|
|
49
|
+
// cap refuses the run outright, the thread stays as it was, and the caller
|
|
50
|
+
// can say "try again shortly". Only new work is refused here; a retry, a
|
|
51
|
+
// resume or an expiry belongs to a run already under way and always goes in.
|
|
52
|
+
if (deps.config.maxQueueDepth > 0) {
|
|
53
|
+
let ready;
|
|
54
|
+
try {
|
|
55
|
+
ready = (await deps.queue.stats()).ready;
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
if (!(err instanceof UnsupportedError))
|
|
59
|
+
throw err;
|
|
60
|
+
}
|
|
61
|
+
if (ready !== undefined && ready >= deps.config.maxQueueDepth) {
|
|
62
|
+
(deps.log ?? console).warn?.('run refused: queue full', { threadId, ready, maxQueueDepth: deps.config.maxQueueDepth });
|
|
63
|
+
await publish(deps, threadId, 'RUN_REFUSED', { reason: 'queue_full', error: new QueueFullError().message });
|
|
64
|
+
return { accepted: false, threadId, reason: 'queue_full', error: 'The assistant is busy right now. Try again shortly.' };
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// A caller-named run (§2.1) is checked before anything is written: a reused
|
|
68
|
+
// id must refuse, never resend.
|
|
69
|
+
if (input.runId && (await deps.admin.runs.get(input.runId))) {
|
|
70
|
+
return { accepted: false, threadId, error: 'Run id already used' };
|
|
71
|
+
}
|
|
72
|
+
if (input.maxSteps !== undefined && (!Number.isInteger(input.maxSteps) || input.maxSteps < 0)) {
|
|
73
|
+
return { accepted: false, threadId, error: 'maxSteps must be zero or a positive number' };
|
|
74
|
+
}
|
|
75
|
+
// A run may cap itself below the config, never above it. 0 keeps the
|
|
76
|
+
// config's.
|
|
77
|
+
const maxSteps = Math.min(input.maxSteps ?? 0, deps.config.maxSteps);
|
|
45
78
|
// Edit + resend (§5.1): the edited turn and everything it led to are
|
|
46
79
|
// dropped, then the new text is appended in its place — one thread, no
|
|
47
80
|
// forking. Only a user turn may be edited: cutting from anywhere else can
|
|
@@ -60,21 +93,28 @@ export async function run(deps, agent, input) {
|
|
|
60
93
|
}
|
|
61
94
|
// The durable store already provides an atomic state claim. Do this before
|
|
62
95
|
// editing or appending history, so only the winning send changes the thread.
|
|
63
|
-
const runId = randomUUID();
|
|
96
|
+
const runId = input.runId || randomUUID();
|
|
64
97
|
const previousRunId = await deps.kv.get(runIdKey(threadId));
|
|
65
|
-
|
|
98
|
+
// The thread now belongs to this run: every later state change names it, so
|
|
99
|
+
// a run that is stopped or replaced can never move the thread (§3.4).
|
|
100
|
+
const admitted = await transition(deps, threadId, {
|
|
101
|
+
from: [initialState], to: 'QUEUED', newRunId: runId, model,
|
|
102
|
+
});
|
|
66
103
|
if (!admitted)
|
|
67
|
-
return { accepted: false, threadId, error: 'Thread has an active run' };
|
|
104
|
+
return { accepted: false, threadId, reason: 'active_run', error: 'Thread has an active run' };
|
|
68
105
|
let installed = false;
|
|
69
106
|
try {
|
|
70
|
-
await deps.kv.set(runIdKey(threadId), runId);
|
|
107
|
+
await deps.kv.set(runIdKey(threadId), runId, { exSeconds: THREAD_KEY_TTL_SECONDS });
|
|
71
108
|
installed = true;
|
|
72
|
-
|
|
73
|
-
//
|
|
74
|
-
//
|
|
75
|
-
//
|
|
109
|
+
// The run's durable record opens here (§2.9), QUEUED: no worker has it
|
|
110
|
+
// yet. A thread accumulates many runs and Thread.state only ever describes
|
|
111
|
+
// the latest, so this is the only place "what happened, how long, what did
|
|
112
|
+
// it cost" can be answered from. It remembers when it was enqueued, so the
|
|
113
|
+
// wait is visible while it lasts and measurable once it ends.
|
|
114
|
+
const enqueuedAt = new Date();
|
|
76
115
|
await deps.admin.runs.start({
|
|
77
|
-
id: runId, threadId, agent: agent.name, model,
|
|
116
|
+
id: runId, threadId, agent: agent.name, model, state: 'QUEUED', enqueuedAt,
|
|
117
|
+
costBudgetMicros: input.costBudgetMicros ?? 0, maxSteps,
|
|
78
118
|
// What this run was asked to do (§2.9) — without it a dashboard can show
|
|
79
119
|
// that a run was slow but not what it was slow at.
|
|
80
120
|
...(deps.config.recordPayloads
|
|
@@ -99,7 +139,7 @@ export async function run(deps, agent, input) {
|
|
|
99
139
|
}
|
|
100
140
|
const userMessage = await deps.storage.messages.append(threadId, {
|
|
101
141
|
role: 'user',
|
|
102
|
-
content: input.prompt,
|
|
142
|
+
content: userContent(input.prompt, input.attachments),
|
|
103
143
|
});
|
|
104
144
|
// The user's turn goes on the bus like everything else (§2.2). Without it a
|
|
105
145
|
// second client watching the same thread sees the reply stream in with no
|
|
@@ -111,23 +151,27 @@ export async function run(deps, agent, input) {
|
|
|
111
151
|
content: userMessage.content,
|
|
112
152
|
agentId: userMessage.agentId,
|
|
113
153
|
createdAt: userMessage.createdAt,
|
|
154
|
+
// The sender's own name for it (see RunInput.clientMessageId).
|
|
155
|
+
...(input.clientMessageId ? { clientMessageId: input.clientMessageId } : {}),
|
|
114
156
|
});
|
|
115
|
-
// Admission already set durable
|
|
157
|
+
// Admission already set durable QUEUED. Never overwrite a stop that
|
|
116
158
|
// arrived while history was being persisted.
|
|
117
159
|
if (!await dispatchActive(deps, threadId, runId)) {
|
|
118
160
|
return { accepted: false, threadId, runId, error: 'Run was stopped before dispatch' };
|
|
119
161
|
}
|
|
120
162
|
// A durable run boundary lets reconnecting clients distinguish this turn's
|
|
121
|
-
// in-flight chunks from earlier completed turns.
|
|
122
|
-
|
|
163
|
+
// in-flight chunks from earlier completed turns. It names the run and when
|
|
164
|
+
// it was accepted; the worker that picks it up publishes RUNNING with the
|
|
165
|
+
// moment work started, so a client's clock measures work, not waiting.
|
|
166
|
+
await publish(deps, threadId, 'STATE_CHANGE', { state: 'QUEUED', runId, enqueuedAt });
|
|
123
167
|
// What started the thread (§2.9), recorded once: the first dispatched
|
|
124
168
|
// run's parameters. A later run never overwrites it. Observability must
|
|
125
169
|
// never fail a run, so this is best-effort.
|
|
126
170
|
await deps.admin.threads
|
|
127
171
|
.upsert({
|
|
128
|
-
id: threadId, state: '
|
|
172
|
+
id: threadId, state: 'QUEUED', model,
|
|
129
173
|
startedWith: {
|
|
130
|
-
runId, agent: agent.name, model, at:
|
|
174
|
+
runId, agent: agent.name, model, at: enqueuedAt,
|
|
131
175
|
...(deps.config.recordPayloads
|
|
132
176
|
? {
|
|
133
177
|
prompt: capText(input.prompt, deps.config.payloadCapChars),
|
|
@@ -142,9 +186,12 @@ export async function run(deps, agent, input) {
|
|
|
142
186
|
if (!await dispatchActive(deps, threadId, runId)) {
|
|
143
187
|
return { accepted: false, threadId, runId, error: 'Run was stopped before dispatch' };
|
|
144
188
|
}
|
|
145
|
-
await deps
|
|
189
|
+
await enqueueJob(deps, {
|
|
146
190
|
threadId, runId, model, agent: agent.name,
|
|
147
|
-
enqueuedAt:
|
|
191
|
+
enqueuedAt: enqueuedAt.getTime(),
|
|
192
|
+
dispatchedAt: enqueuedAt.getTime(),
|
|
193
|
+
...(maxSteps ? { maxSteps } : {}),
|
|
194
|
+
...(input.partitionKey ? { partitionKey: input.partitionKey } : {}),
|
|
148
195
|
// Persisted on the ticket so a worker — or a resume after an approval,
|
|
149
196
|
// hours later, in another process — rehydrates the same state (§2.10).
|
|
150
197
|
...(input.state ? { state: input.state } : {}),
|
|
@@ -152,43 +199,43 @@ export async function run(deps, agent, input) {
|
|
|
152
199
|
costBudgetMicros: input.costBudgetMicros,
|
|
153
200
|
providerOptions: input.providerOptions,
|
|
154
201
|
});
|
|
155
|
-
return { accepted: true, threadId, runId, state: '
|
|
202
|
+
return { accepted: true, threadId, runId, state: 'QUEUED' };
|
|
156
203
|
}
|
|
157
204
|
catch (err) {
|
|
158
205
|
const error = err instanceof Error ? err.message : String(err);
|
|
159
206
|
await failDispatch(deps, threadId, runId, model, error, installed ? undefined : previousRunId);
|
|
160
|
-
return {
|
|
207
|
+
return {
|
|
208
|
+
accepted: false, threadId, runId, error,
|
|
209
|
+
...(err instanceof QueueFullError ? { reason: 'queue_full' } : {}),
|
|
210
|
+
};
|
|
161
211
|
}
|
|
162
212
|
}
|
|
163
213
|
/** Stop can arrive while a request is still preparing its dispatch. */
|
|
164
214
|
async function dispatchActive(deps, threadId, runId) {
|
|
165
215
|
const current = await deps.kv.get(runIdKey(threadId));
|
|
166
216
|
const thread = await deps.storage.threads.get(threadId);
|
|
167
|
-
if (current === runId && thread?.state === '
|
|
217
|
+
if (current === runId && thread?.state === 'QUEUED')
|
|
168
218
|
return true;
|
|
169
219
|
await recordStoppedRun(deps, runId, new Date());
|
|
170
220
|
if (current === runId && thread?.state === 'CANCELLED') {
|
|
171
|
-
await deps.kv.set(`agent:state:${threadId}`, 'CANCELLED');
|
|
221
|
+
await deps.kv.set(`agent:state:${threadId}`, 'CANCELLED', { exSeconds: THREAD_KEY_TTL_SECONDS });
|
|
172
222
|
}
|
|
173
223
|
return false;
|
|
174
224
|
}
|
|
175
225
|
/** A rejected dispatch must not leave an active thread with no worker.
|
|
176
226
|
* Conditional cleanup cannot overwrite a stop or a newer run. */
|
|
177
227
|
async function failDispatch(deps, threadId, runId, model, error, previousRunId) {
|
|
178
|
-
const key = `agent:state:${threadId}`;
|
|
179
228
|
const current = await deps.kv.get(runIdKey(threadId));
|
|
180
229
|
// If installing the identity failed, the reservation can still be ours
|
|
181
230
|
// under the prior id. Never close or modify that prior run's record.
|
|
182
231
|
if (current !== runId && (previousRunId === undefined || current !== previousRunId))
|
|
183
232
|
return;
|
|
184
|
-
if (!await deps
|
|
233
|
+
if (!(await transition(deps, threadId, { from: ['QUEUED'], to: 'FAILED', runId, model })))
|
|
185
234
|
return;
|
|
186
|
-
|
|
187
|
-
await setThreadState(deps, threadId, 'FAILED', model);
|
|
235
|
+
const endedAt = new Date();
|
|
188
236
|
try {
|
|
189
237
|
const prior = await deps.admin.runs.get(runId);
|
|
190
238
|
if (prior) {
|
|
191
|
-
const endedAt = new Date();
|
|
192
239
|
await deps.admin.runs.patch(runId, {
|
|
193
240
|
state: 'FAILED', stopReason: 'failed', error, endedAt,
|
|
194
241
|
durationMs: endedAt.getTime() - new Date(prior.startedAt).getTime(),
|
|
@@ -196,7 +243,9 @@ async function failDispatch(deps, threadId, runId, model, error, previousRunId)
|
|
|
196
243
|
}
|
|
197
244
|
}
|
|
198
245
|
catch { /* Operational history must not block dispatch recovery. */ }
|
|
199
|
-
await publish(deps, threadId, 'STATE_CHANGE', {
|
|
246
|
+
await publish(deps, threadId, 'STATE_CHANGE', {
|
|
247
|
+
state: 'FAILED', stopReason: 'failed', runId, error, endedAt,
|
|
248
|
+
});
|
|
200
249
|
}
|
|
201
250
|
/** The provider options a run is dispatched with (§3.1): config → spec →
|
|
202
251
|
* input, each winning over the one before, per provider namespace. Null when
|
|
@@ -205,6 +254,17 @@ function providerOptionsFor(deps, agent, input) {
|
|
|
205
254
|
const merged = mergeProviderOptions(mergeProviderOptions(deps.config.providerOptions, agent.spec.providerOptions), input.providerOptions);
|
|
206
255
|
return merged && Object.keys(merged).length > 0 ? merged : null;
|
|
207
256
|
}
|
|
257
|
+
/** A user turn: plain text alone, or text plus the images attached to it
|
|
258
|
+
* (§5.1), in the shape the model reads natively. */
|
|
259
|
+
export function userContent(text, attachments) {
|
|
260
|
+
const images = (attachments ?? []).filter((a) => a.url);
|
|
261
|
+
if (images.length === 0)
|
|
262
|
+
return text;
|
|
263
|
+
return [
|
|
264
|
+
...(text ? [{ type: 'text', text }] : []),
|
|
265
|
+
...images.map((a) => ({ type: 'image', image: a.url, ...(a.mediaType ? { mimeType: a.mediaType } : {}) })),
|
|
266
|
+
];
|
|
267
|
+
}
|
|
208
268
|
function capText(text, limit) {
|
|
209
269
|
return text.length > limit ? `${text.slice(0, limit)}…` : text;
|
|
210
270
|
}
|
package/dist/core/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/core/run.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/core/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { RuntimePorts } from '../ports/runtime.js';
|
|
2
|
+
import type { RunStreams } from '../ports/streams.js';
|
|
3
|
+
import { type StreamEnd, type StreamEvent } from './stream-events.js';
|
|
4
|
+
/** The worker's side of a run stream: one per segment, open from pickup to
|
|
5
|
+
* the segment's end. Everything published on the thread while it is open
|
|
6
|
+
* is turned into typed stream events here (see forward), so the engine
|
|
7
|
+
* keeps calling `publish` and only opens and closes the segment.
|
|
8
|
+
*
|
|
9
|
+
* Events are appended together: they wait up to `streamFlushMs`, or until
|
|
10
|
+
* `streamFlushEvents` are waiting. A step end, a tool result, a park and a
|
|
11
|
+
* close go out at once. A failed append is logged, never thrown: the stream
|
|
12
|
+
* is delivery, and the run's messages are saved either way. */
|
|
13
|
+
/** The segment counter: each pickup of a run takes the next number, so a
|
|
14
|
+
* retry or a resume gets a stream of its own. */
|
|
15
|
+
export declare const segmentKey: (runId: string) => string;
|
|
16
|
+
/** The segment this process has open on a thread, if any. */
|
|
17
|
+
export declare function activeSegment(deps: RuntimePorts, threadId: string): SegmentStream | undefined;
|
|
18
|
+
/** Opens the segment's stream and says RUN_STARTED on it. Null when the
|
|
19
|
+
* runtime has no streams, or the open failed (logged): the run goes on
|
|
20
|
+
* without a stream. */
|
|
21
|
+
export declare function openSegment(deps: RuntimePorts, threadId: string, runId: string | undefined): Promise<SegmentStream | null>;
|
|
22
|
+
/** Closes a segment's stream that its worker could not: the sweep's end for
|
|
23
|
+
* a run whose worker died. A stream that is already closed or gone is left
|
|
24
|
+
* as it is. */
|
|
25
|
+
export declare function closeLostSegment(deps: RuntimePorts, threadId: string, runId: string, error: string): Promise<void>;
|
|
26
|
+
export declare class SegmentStream {
|
|
27
|
+
private readonly deps;
|
|
28
|
+
private readonly streams;
|
|
29
|
+
readonly threadId: string;
|
|
30
|
+
readonly runId: string;
|
|
31
|
+
readonly segment: number;
|
|
32
|
+
readonly streamId: string;
|
|
33
|
+
private buf;
|
|
34
|
+
private timer?;
|
|
35
|
+
private chain;
|
|
36
|
+
private ended;
|
|
37
|
+
private readonly agents;
|
|
38
|
+
private ids;
|
|
39
|
+
/** A one-shot agent's final text, carried on RUN_FINISHED. */
|
|
40
|
+
oneShotText?: string;
|
|
41
|
+
constructor(deps: RuntimePorts, streams: RunStreams, threadId: string, runId: string, segment: number, streamId: string);
|
|
42
|
+
get closed(): boolean;
|
|
43
|
+
/** Queue events; resolves once they are appended when any must go at once. */
|
|
44
|
+
push(events: StreamEvent[]): Promise<void>;
|
|
45
|
+
/** Append what waits; resolves once everything pushed so far is out. */
|
|
46
|
+
flush(): Promise<void>;
|
|
47
|
+
/** End the stream: what is open is ended, what waits is appended, and the
|
|
48
|
+
* end item goes last. A second close is a no-op. */
|
|
49
|
+
close(end: StreamEnd): Promise<void>;
|
|
50
|
+
/** Turn a published event into stream events. `reserved` is whether the
|
|
51
|
+
* type is one of the platform's; any other is an app's own, and goes out
|
|
52
|
+
* as CUSTOM. */
|
|
53
|
+
forward(type: string, payload: unknown, reserved: boolean): Promise<void>;
|
|
54
|
+
private blocks;
|
|
55
|
+
private newId;
|
|
56
|
+
private wrap;
|
|
57
|
+
/** End an agent's open text and reasoning. */
|
|
58
|
+
private endBlocks;
|
|
59
|
+
/** One SDK stream part as stream events, for one agent ('' the main one). */
|
|
60
|
+
private mapChunk;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=segment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"segment.d.ts","sourceRoot":"","sources":["../../src/core/segment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGtD,OAAO,EAAc,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAElF;;;;;;;;gEAQgE;AAEhE;kDACkD;AAClD,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,WAA6B,CAAC;AAMtE,6DAA6D;AAC7D,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAE7F;AAiBD;;wBAEwB;AACxB,wBAAsB,WAAW,CAC/B,IAAI,EAAE,YAAY,EAClB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAsB/B;AAED;;gBAEgB;AAChB,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,YAAY,EAClB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAWf;AAED,qBAAa,aAAa;IAWtB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM;IAf3B,OAAO,CAAC,GAAG,CAAqB;IAChC,OAAO,CAAC,KAAK,CAAC,CAAgC;IAC9C,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;IACpD,OAAO,CAAC,GAAG,CAAK;IAChB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;gBAGF,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,UAAU,EAC3B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM;IAG3B,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,8EAA8E;IAC9E,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAc1C,wEAAwE;IACxE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAetB;yDACqD;IAC/C,KAAK,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB1C;;qBAEiB;IACjB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA6DzE,OAAO,CAAC,MAAM;IASd,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,IAAI;IAIZ,8CAA8C;IAC9C,OAAO,CAAC,SAAS;IAWjB,6EAA6E;IAC7E,OAAO,CAAC,QAAQ;CAgEjB"}
|