@namzu/sdk 6.0.0 → 6.1.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/CHANGELOG.md +133 -0
- package/dist/agents/SupervisorAgent.d.ts.map +1 -1
- package/dist/agents/SupervisorAgent.js +13 -0
- package/dist/agents/SupervisorAgent.js.map +1 -1
- package/dist/gateway/__tests__/completion-inbox.test.d.ts +2 -0
- package/dist/gateway/__tests__/completion-inbox.test.d.ts.map +1 -0
- package/dist/gateway/__tests__/completion-inbox.test.js +258 -0
- package/dist/gateway/__tests__/completion-inbox.test.js.map +1 -0
- package/dist/gateway/completion-inbox.d.ts +113 -0
- package/dist/gateway/completion-inbox.d.ts.map +1 -0
- package/dist/gateway/completion-inbox.js +211 -0
- package/dist/gateway/completion-inbox.js.map +1 -0
- package/dist/public-runtime.d.ts +1 -0
- package/dist/public-runtime.d.ts.map +1 -1
- package/dist/public-runtime.js +4 -0
- package/dist/public-runtime.js.map +1 -1
- package/dist/registry/tool/__tests__/dialect.test.js +8 -5
- package/dist/registry/tool/__tests__/dialect.test.js.map +1 -1
- package/dist/registry/tool/dialect.js +11 -4
- package/dist/registry/tool/dialect.js.map +1 -1
- package/dist/registry/tool/execute.d.ts.map +1 -1
- package/dist/registry/tool/execute.js +34 -0
- package/dist/registry/tool/execute.js.map +1 -1
- package/dist/runtime/query/__tests__/completion-notification.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/completion-notification.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/completion-notification.test.js +168 -0
- package/dist/runtime/query/__tests__/completion-notification.test.js.map +1 -0
- package/dist/runtime/query/__tests__/step-allow-list.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/step-allow-list.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/step-allow-list.test.js +171 -0
- package/dist/runtime/query/__tests__/step-allow-list.test.js.map +1 -0
- package/dist/runtime/query/executor.d.ts +14 -0
- package/dist/runtime/query/executor.d.ts.map +1 -1
- package/dist/runtime/query/executor.js +20 -1
- package/dist/runtime/query/executor.js.map +1 -1
- package/dist/runtime/query/index.d.ts +9 -0
- package/dist/runtime/query/index.d.ts.map +1 -1
- package/dist/runtime/query/index.js +1 -0
- package/dist/runtime/query/index.js.map +1 -1
- package/dist/runtime/query/iteration/index.d.ts.map +1 -1
- package/dist/runtime/query/iteration/index.js +74 -1
- package/dist/runtime/query/iteration/index.js.map +1 -1
- package/dist/runtime/query/iteration/phases/context.d.ts +9 -0
- package/dist/runtime/query/iteration/phases/context.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/context.js.map +1 -1
- package/dist/tools/coordinator/__tests__/completion-delivery.test.d.ts +2 -0
- package/dist/tools/coordinator/__tests__/completion-delivery.test.d.ts.map +1 -0
- package/dist/tools/coordinator/__tests__/completion-delivery.test.js +255 -0
- package/dist/tools/coordinator/__tests__/completion-delivery.test.js.map +1 -0
- package/dist/tools/coordinator/__tests__/task-list.test.js +13 -7
- package/dist/tools/coordinator/__tests__/task-list.test.js.map +1 -1
- package/dist/tools/coordinator/index.d.ts +35 -0
- package/dist/tools/coordinator/index.d.ts.map +1 -1
- package/dist/tools/coordinator/index.js +222 -16
- package/dist/tools/coordinator/index.js.map +1 -1
- package/dist/types/tool/index.d.ts +13 -0
- package/dist/types/tool/index.d.ts.map +1 -1
- package/dist/types/tool/index.js.map +1 -1
- package/package.json +1 -1
- package/src/agents/SupervisorAgent.ts +14 -0
- package/src/gateway/__tests__/completion-inbox.test.ts +320 -0
- package/src/gateway/completion-inbox.ts +227 -0
- package/src/public-runtime.ts +4 -0
- package/src/registry/tool/__tests__/dialect.test.ts +8 -5
- package/src/registry/tool/dialect.ts +11 -4
- package/src/registry/tool/execute.ts +35 -0
- package/src/runtime/query/__tests__/completion-notification.test.ts +196 -0
- package/src/runtime/query/__tests__/step-allow-list.test.ts +205 -0
- package/src/runtime/query/executor.ts +21 -1
- package/src/runtime/query/index.ts +11 -0
- package/src/runtime/query/iteration/index.ts +77 -1
- package/src/runtime/query/iteration/phases/context.ts +10 -0
- package/src/tools/coordinator/__tests__/completion-delivery.test.ts +347 -0
- package/src/tools/coordinator/__tests__/task-list.test.ts +13 -7
- package/src/tools/coordinator/index.ts +250 -20
- package/src/types/tool/index.ts +13 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,138 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 6.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- ab0bb30: a worker that finishes now reaches the supervisor, without polling for it
|
|
8
|
+
|
|
9
|
+
A delegated worker's output reaches the supervisor as the `tool_result` of
|
|
10
|
+
the `create_task` that launched it. That works while the launching call is
|
|
11
|
+
still the live path — and there are two situations where it is not:
|
|
12
|
+
|
|
13
|
+
- the call hit the executor's deadline. The model was told _"timed out… it
|
|
14
|
+
may still be running"_, with no task id, and the worker then finished
|
|
15
|
+
normally holding a result nothing would ever read.
|
|
16
|
+
- there was never a call waiting, because the launch was meant to run
|
|
17
|
+
alongside the turn.
|
|
18
|
+
|
|
19
|
+
In both cases the completion existed, the gateway remembered it, and the
|
|
20
|
+
supervisor was never told. The one tool left to it, `agent_task_list`,
|
|
21
|
+
reported id, state and duration — and dropped the worker's output, reading
|
|
22
|
+
`result.status` and `result.lastError` off the handle while stepping over
|
|
23
|
+
`result.result` between them. So a supervisor could learn that a task had
|
|
24
|
+
definitely finished and still have no way to read what it said.
|
|
25
|
+
`agent_task_list` in a sleep loop was not the model misbehaving; it was the
|
|
26
|
+
only move on the board.
|
|
27
|
+
|
|
28
|
+
**Completions are now delivered rather than polled for.** A run subscribes
|
|
29
|
+
once through `onTaskCompleted` — which every `TaskGateway` already has, so
|
|
30
|
+
no gateway changes — and anything a tool did not hand over inline arrives in
|
|
31
|
+
the transcript as a task notification carrying the id, the agent, the state
|
|
32
|
+
and the output.
|
|
33
|
+
|
|
34
|
+
The distinction is the whole design. An earlier version of this channel was
|
|
35
|
+
removed because it fired for completions the blocking tool had _already_
|
|
36
|
+
delivered, so the supervisor saw each result twice. Tools now claim what they
|
|
37
|
+
deliver, and only unclaimed completions are announced. A blocking
|
|
38
|
+
`create_task` behaves exactly as it did.
|
|
39
|
+
|
|
40
|
+
Three additions come with it:
|
|
41
|
+
|
|
42
|
+
- `create_task` takes `background: true`, returning a `task_id` immediately
|
|
43
|
+
so the supervisor can keep working.
|
|
44
|
+
- `wait_for_task` joins a running task and returns its output. `continue_task`
|
|
45
|
+
blocked, but only as a side effect of sending a message, so a supervisor
|
|
46
|
+
that merely wanted to wait had to invent something to say.
|
|
47
|
+
- `cancel_task` is mounted again. It was dropped on the reasoning that a
|
|
48
|
+
blocking launch leaves every worker terminal before its id is known — true
|
|
49
|
+
then, and untrue now that a background launch hands back a live one.
|
|
50
|
+
|
|
51
|
+
`agent_task_list` also carries the worker's output, in the rendered text
|
|
52
|
+
rather than only in `data`: the executor builds the model-facing tool result
|
|
53
|
+
from `output` alone, so a field added to `data` would have been added
|
|
54
|
+
somewhere the model cannot see.
|
|
55
|
+
|
|
56
|
+
A run no longer settles while a background worker it launched is still
|
|
57
|
+
running — it would have discarded the very result the launch existed to
|
|
58
|
+
produce. The wait is bounded, so a worker that never finishes cannot hold a
|
|
59
|
+
run open.
|
|
60
|
+
|
|
61
|
+
`CompletionInbox` and `formatCompletionNotification` are exported for hosts
|
|
62
|
+
that build the coordinator surface themselves.
|
|
63
|
+
|
|
64
|
+
- 529d10f: a narrowed step now narrows what can RUN, not only what the model is shown
|
|
65
|
+
|
|
66
|
+
`prepareStep.activeTools` documents itself as _"restrict which tools the model
|
|
67
|
+
may call this step, by name"_, and run-level `allowedTools` makes the same
|
|
68
|
+
promise for a whole run. Neither restricted anything.
|
|
69
|
+
|
|
70
|
+
The list decided which schemas went into the request. It was then copied into
|
|
71
|
+
the tool context and read by nothing on the execution path — the registry gated
|
|
72
|
+
on availability and plan mode, and never on the allow-list. So the narrowing was
|
|
73
|
+
a statement about the menu rather than about the kitchen: a model that named a
|
|
74
|
+
withheld tool had it run.
|
|
75
|
+
|
|
76
|
+
That is not a hypothetical. A model names a tool it was not offered whenever it
|
|
77
|
+
repeats a call from earlier in the context, whenever a gateway carries its own
|
|
78
|
+
tool list, and whenever a cached prompt prefix is replayed. A host using this to
|
|
79
|
+
fence a step — the obvious use, and the one the type invites — was fenced by
|
|
80
|
+
nothing.
|
|
81
|
+
|
|
82
|
+
The check now sits where the call is made. A tool outside the list is answered
|
|
83
|
+
with a refusal that names what IS available, so the model can route around it
|
|
84
|
+
rather than guessing.
|
|
85
|
+
|
|
86
|
+
Two details worth stating:
|
|
87
|
+
|
|
88
|
+
- **Absent is not empty.** No list means no restriction; an empty list means the
|
|
89
|
+
step may call nothing. Reading an empty allow-list as "unrestricted" is the
|
|
90
|
+
fail-open this repository has already been bitten by once, in the delegate
|
|
91
|
+
roster.
|
|
92
|
+
- **A step's list beats the run's,** matching the precedence the request already
|
|
93
|
+
used, so the two can no longer disagree.
|
|
94
|
+
|
|
95
|
+
**If you pass `allowedTools` or `activeTools` today, calls that previously ran
|
|
96
|
+
may now be refused.** That is the point of the change, but it is a real
|
|
97
|
+
behavioural difference: a run that quietly depended on the leak will start
|
|
98
|
+
seeing refusals. The refusal is a normal `tool_result`, so the turn continues.
|
|
99
|
+
|
|
100
|
+
### Patch Changes
|
|
101
|
+
|
|
102
|
+
- 529d10f: a delegated child is no longer strangled by a file-read deadline, and a closed tuple stays closed
|
|
103
|
+
|
|
104
|
+
**The deadline.** `create_task` runs an entire agent and inherited the tool
|
|
105
|
+
executor's generic two-minute default — the one whose own docstring says _"a
|
|
106
|
+
tool that legitimately runs longer declares its own `timeoutMs`"_. It did not.
|
|
107
|
+
|
|
108
|
+
Measured on real traffic: three delegated children finished in 4m21s, 5m58s and
|
|
109
|
+
8m04s while all three parents timed out at 120s. The children were never killed
|
|
110
|
+
— only the parent's wait was — so the blocking path was not occasionally missed,
|
|
111
|
+
it was structurally unreachable, and the supervisor was left calling
|
|
112
|
+
`agent_task_list` in a sleep loop because nothing else was available to it.
|
|
113
|
+
|
|
114
|
+
`DELEGATION_TIMEOUT_MS` is now one hour, exported so it is greppable, and
|
|
115
|
+
applied to `create_task`, `wait_for_task` and `continue_task`. An hour rather
|
|
116
|
+
than "a bit more than eight minutes" because a generic stopwatch is the wrong
|
|
117
|
+
instrument for a child that is making progress: a failure should come from what
|
|
118
|
+
the child is doing. A wedged child is still caught, and the run budget and
|
|
119
|
+
iteration ceiling both still apply above this.
|
|
120
|
+
|
|
121
|
+
**The instruction to poll was ours.** `agent_task_list` described itself as the
|
|
122
|
+
way to _"confirm every launched task reached `completed`"_ and as _"safe to call
|
|
123
|
+
repeatedly"_ — an order to burn a turn on a listing whose answer a blocking
|
|
124
|
+
`create_task` had already delivered. It now says the opposite, and points at the
|
|
125
|
+
cases the listing is actually for. `create_task` gained the matching clause in
|
|
126
|
+
the other direction: until a worker's result arrives, do not fabricate,
|
|
127
|
+
summarise or predict it.
|
|
128
|
+
|
|
129
|
+
**The tuple.** `toSchemaDialect` translated draft-07's `additionalItems: false`
|
|
130
|
+
by dropping it, on the reasoning that 2020-12 closes a tuple by default. It does
|
|
131
|
+
not — with `prefixItems` set and no `items`, elements past the tuple are
|
|
132
|
+
unconstrained — so every closed tuple was silently widened into an open one. A
|
|
133
|
+
schema written to forbid a third element began to allow any number. It now
|
|
134
|
+
emits `items: false`, which the wire accepts.
|
|
135
|
+
|
|
3
136
|
## 6.0.0
|
|
4
137
|
|
|
5
138
|
### Major Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SupervisorAgent.d.ts","sourceRoot":"","sources":["../../src/agents/SupervisorAgent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SupervisorAgent.d.ts","sourceRoot":"","sources":["../../src/agents/SupervisorAgent.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAe,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACxE,OAAO,KAAK,EACX,UAAU,EACV,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,KAAK,EAAW,KAAK,EAAU,MAAM,uBAAuB,CAAA;AAEnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAG7D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CACpC,WAAW,EAAE,SAAS,UAAU,EAAE,EAClC,KAAK,EAAE,KAAK,EACZ,GAAG,GAAE,MAAmB,GACtB,eAAe,EAAE,CAcnB;AAED,4DAA4D;AAC5D,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,SAAS,eAAe,EAAE,GAAG,MAAM,CAEnF;AAED,qBAAa,eAAgB,SAAQ,aAAa,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IAC/F,QAAQ,CAAC,IAAI,EAAG,YAAY,CAAS;gBAEzB,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,cAAc,CAAC;IAalE;;;;;;;;OAQG;IACG,GAAG,CACR,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,qBAAqB,EAC7B,QAAQ,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,qBAAqB,CAAC;YAMnB,YAAY;CA+P1B"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { EMPTY_TOKEN_USAGE } from '../constants/limits.js';
|
|
2
|
+
import { CompletionInbox } from '../gateway/completion-inbox.js';
|
|
2
3
|
import { LocalTaskGateway } from '../gateway/local.js';
|
|
3
4
|
import { ToolNameCollisionError, ToolRegistry } from '../registry/tool/execute.js';
|
|
4
5
|
import { drainQuery } from '../runtime/query/index.js';
|
|
@@ -132,8 +133,19 @@ export class SupervisorAgent extends AbstractAgent {
|
|
|
132
133
|
// it does not exist yet. `query` binds them once it does.
|
|
133
134
|
const questionParks = new QuestionParkBinding();
|
|
134
135
|
const pendingAnswers = new PendingAnswers();
|
|
136
|
+
// Created here for the same reason: both ends are here. The tools claim
|
|
137
|
+
// a completion when they deliver it as a `tool_result`, and the loop
|
|
138
|
+
// drains whatever is left over into the transcript — so the inbox has
|
|
139
|
+
// to be the same object on both sides, and this is the only place that
|
|
140
|
+
// sees both.
|
|
141
|
+
//
|
|
142
|
+
// It attaches through `onTaskCompleted`, which every gateway already
|
|
143
|
+
// implements, so a host gateway needs no change to take part.
|
|
144
|
+
const completionInbox = new CompletionInbox();
|
|
145
|
+
completionInbox.attach(gateway);
|
|
135
146
|
const coordinatorToolDefs = buildCoordinatorTools({
|
|
136
147
|
gateway,
|
|
148
|
+
completionInbox,
|
|
137
149
|
workingDirectory: input.workingDirectory,
|
|
138
150
|
runtimeContext: input.runtimeContext,
|
|
139
151
|
allowedAgentIds: config.agentIds,
|
|
@@ -245,6 +257,7 @@ export class SupervisorAgent extends AbstractAgent {
|
|
|
245
257
|
runtimeToolOverrides: input.runtimeToolOverrides,
|
|
246
258
|
runtimeContext: input.runtimeContext,
|
|
247
259
|
taskGateway: gateway,
|
|
260
|
+
completionInbox,
|
|
248
261
|
launchedTasks,
|
|
249
262
|
advisory: config.advisory,
|
|
250
263
|
invocationState: childInvocationState,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SupervisorAgent.js","sourceRoot":"","sources":["../../src/agents/SupervisorAgent.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SupervisorAgent.js","sourceRoot":"","sources":["../../src/agents/SupervisorAgent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAClF,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAEtD,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAA;AACvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAWrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAG/D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,qBAAqB,CACpC,WAAkC,EAClC,KAAY,EACZ,MAAc,IAAI,CAAC,GAAG,EAAE;IAExB,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC1C,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI;YACxB,KAAK;YACL,MAAM,EAAE,QAAiB;YACzB,KAAK,EAAE,EAAE,GAAG,iBAAiB,EAAE;YAC/B,IAAI,EAAE,EAAE,GAAG,SAAS,EAAE;YACtB,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,GAAG,GAAG,MAAM,CAAC,SAAS;YAClC,QAAQ,EAAE,EAAE;SACZ;QACD,SAAS,EAAE,KAAK;KAChB,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,mBAAmB,CAAC,WAAuC;IAC1E,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM,CAAA;AACzE,CAAC;AAED,MAAM,OAAO,eAAgB,SAAQ,aAA2D;IACtF,IAAI,GAAG,YAAqB,CAAA;IAErC,YAAY,QAAsD;QACjE,KAAK,CAAC;YACL,GAAG,QAAQ;YACX,IAAI,EAAE,YAAY;YAClB,YAAY,EAAE;gBACb,aAAa,EAAE,IAAI;gBACnB,iBAAiB,EAAE,IAAI;gBACvB,mBAAmB,EAAE,IAAI;gBACzB,iBAAiB,EAAE,IAAI;aACvB;SACD,CAAC,CAAA;IACH,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,GAAG,CACR,KAAiB,EACjB,MAA6B,EAC7B,QAA2B;QAE3B,OAAO,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,EAAE,CACjE,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAC1E,CAAA;IACF,CAAC;IAEO,KAAK,CAAC,YAAY,CACzB,KAAiB,EACjB,MAA6B,EAC7B,QAA2B;QAE3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;QAEhC,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpF,MAAM,IAAI,KAAK,CACd,+GAA+G,CAC/G,CAAA;QACF,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAA;QAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;QAChC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAA;QAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;QAEhC,MAAM,WAAW,GAAa;YAC7B,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAa;YACpC,QAAQ;SACR,CAAA;QAED,IAAI,OAAoB,CAAA;QACxB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;QACzB,CAAC;aAAM,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YAChC,MAAM,oBAAoB,GAAG,MAAM,CAAC,cAAc;gBACjD,CAAC,CAAC;oBACA,GAAG,MAAM,CAAC,cAAc;oBACxB,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,cAAc,CAAC,UAAU;iBACjE;gBACF,CAAC,CAAC,MAAM,CAAC,UAAU;oBAClB,CAAC,CAAE;wBACD,UAAU,EAAE,MAAM,CAAC,UAAU;qBAC6B;oBAC5D,CAAC,CAAC,SAAS,CAAA;YAEb,MAAM,WAAW,GAAqB;gBACrC,WAAW,EAAE,KAAK;gBAClB,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAC/B,qBAAqB,EAAE,IAAI,CAAC,eAAe;gBAC3C,KAAK,EAAE,CAAC;gBACR,aAAa,EAAE;oBACd,KAAK,EAAE,MAAM,CAAC,WAAW;oBACzB,SAAS,EAAE,MAAM,CAAC,WAAW;iBAC7B;gBACD,cAAc,EAAE,oBAAoB;gBACpC,+DAA+D;gBAC/D,6DAA6D;gBAC7D,0DAA0D;gBAC1D,4DAA4D;gBAC5D,yDAAyD;gBACzD,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxE,QAAQ;gBACR,QAAQ;gBACR,SAAS;gBACT,SAAS;gBACT,WAAW;aACX,CAAA;YACD,OAAO,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAA;QAClF,CAAC;aAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAA;QACrF,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,GAAG,EAA4B,CAAA;QAEzD,IAAI,cAA8E,CAAA;QAElF,kEAAkE;QAClE,oEAAoE;QACpE,0DAA0D;QAC1D,MAAM,aAAa,GAAG,IAAI,mBAAmB,EAAE,CAAA;QAC/C,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAA;QAE3C,wEAAwE;QACxE,qEAAqE;QACrE,sEAAsE;QACtE,uEAAuE;QACvE,aAAa;QACb,EAAE;QACF,qEAAqE;QACrE,8DAA8D;QAC9D,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAA;QAC7C,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAE/B,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;YACjD,OAAO;YACP,eAAe;YACf,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,eAAe,EAAE,MAAM,CAAC,QAAQ;YAChC,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,KAAK;YACL,cAAc,EAAE,GAAG,EAAE,CAAC,cAAc;YACpC,cAAc,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE;gBACrC,aAAa,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;YACrC,CAAC;YACD,8DAA8D;YAC9D,+DAA+D;YAC/D,0DAA0D;YAC1D,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,aAAa;YACb,cAAc;SACd,CAAC,CAAA;QAEF,MAAM,KAAK,GAAG,IAAI,YAAY,EAAE,CAAA;QAChC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC1C,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;YAC9D,CAAC;QACF,CAAC;QACD,oEAAoE;QACpE,uEAAuE;QACvE,8BAA8B;QAC9B,EAAE;QACF,yEAAyE;QACzE,wEAAwE;QACxE,uEAAuE;QACvE,oEAAoE;QACpE,iEAAiE;QACjE,uEAAuE;QACvE,wEAAwE;QACxE,qBAAqB;QACrB,EAAE;QACF,iEAAiE;QACjE,wEAAwE;QACxE,wEAAwE;QACxE,yEAAyE;QACzE,qEAAqE;QACrE,uEAAuE;QACvE,kEAAkE;QAClE,6CAA6C;QAC7C,EAAE;QACF,kEAAkE;QAClE,wEAAwE;QACxE,mEAAmE;QACnE,uEAAuE;QACvE,yEAAyE;QACzE,wEAAwE;QACxE,yEAAyE;QACzE,qEAAqE;QACrE,wEAAwE;QACxE,uEAAuE;QACvE,qEAAqE;QACrE,oEAAoE;QACpE,+CAA+C;QAC/C,EAAE;QACF,kEAAkE;QAClE,yEAAyE;QACzE,wEAAwE;QACxE,qEAAqE;QACrE,yEAAyE;QACzE,yEAAyE;QACzE,8BAA8B;QAC9B,MAAM,SAAS,GAAG,KAAK,CAAC,oBAAoB,CAAA;QAC5C,KAAK,MAAM,IAAI,IAAI,mBAAmB,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,SAAS,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACvC,IAAI,QAAQ,KAAK,UAAU;gBAAE,SAAQ;YACrC,IAAI,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,sBAAsB,CAAC,IAAI,CAAC,IAAI,EAAE,oCAAoC,CAAC,CAAA;YAClF,CAAC;YACD,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,IAAI,QAAQ,CAAC,CAAA;QAC3C,CAAC;QAED,MAAM,oBAAoB,GAAG,gBAAgB,CAC5C,MAAM,CAAC,eAAe,IAAI,EAAE,QAAQ,EAAE,EACtC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAChB,CAAA;QAED,MAAM,GAAG,GAAG,MAAM,UAAU,CAC3B;YACC,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK;YACL,SAAS,EAAE;gBACV,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,aAAa,EAAE,MAAM,CAAC,aAAa;gBACnC,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,GAAG,EAAE,MAAM,CAAC,GAAG;aACf;YACD,aAAa;YACb,cAAc;YACd,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE;YACzB,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;YAC7B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS;YACT,QAAQ;YACR,SAAS;YACT,QAAQ;YACR,KAAK;YACL,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,YAAY,EAAE,MAAM;YACpB,gBAAgB,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE;gBACrC,cAAc,GAAG,WAAW,CAAA;YAC7B,CAAC;YACD,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;YAChD,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,WAAW,EAAE,OAAO;YACpB,eAAe;YACf,aAAa;YACb,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,eAAe,EAAE,oBAAoB;YACrC,gEAAgE;YAChE,6DAA6D;YAC7D,4DAA4D;YAC5D,8DAA8D;YAC9D,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,iEAAiE;YACjE,4DAA4D;YAC5D,gEAAgE;YAChE,gEAAgE;YAChE,uBAAuB;YACvB,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjF,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9E,kEAAkE;YAClE,yDAAyD;YACzD,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjF,GAAG,CAAC,MAAM,CAAC,qBAAqB;gBAC/B,CAAC,CAAC,EAAE,qBAAqB,EAAE,MAAM,CAAC,qBAAqB,EAAE;gBACzD,CAAC,CAAC,EAAE,CAAC;SACN,EACD,QAAQ,CACR,CAAA;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,CAAA;QACvC,MAAM,WAAW,GAAG,qBAAqB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;QAE7D,MAAM,cAAc,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAA;QAEvD,OAAO;YACN,KAAK,EAAE,GAAG,CAAC,EAAE;YACb,MAAM,EAAE,GAAG,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ;YAC3D,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,KAAK,EAAE,GAAG,CAAC,UAAU;YACrB,IAAI,EAAE,GAAG,CAAC,QAAQ;YAClB,UAAU,EAAE,GAAG,CAAC,gBAAgB;YAChC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YAClC,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,WAAW;YACX,cAAc;YACd,UAAU,EAAE,WAAW,CAAC,MAAM;SAC9B,CAAA;IACF,CAAC;CACD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion-inbox.test.d.ts","sourceRoot":"","sources":["../../../src/gateway/__tests__/completion-inbox.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { CompletionInbox, formatCompletionNotification } from '../completion-inbox.js';
|
|
3
|
+
/**
|
|
4
|
+
* Who tells the supervisor a worker finished.
|
|
5
|
+
*
|
|
6
|
+
* Normally the `create_task` call does: it blocks, and the worker's output
|
|
7
|
+
* comes back as that call's `tool_result`. Two cases have no such call — a
|
|
8
|
+
* launch made in the background, and a blocking launch whose deadline passed
|
|
9
|
+
* while the worker kept going — and until this existed the result of those
|
|
10
|
+
* simply vanished. The gateway still held it; nothing ever read it.
|
|
11
|
+
*
|
|
12
|
+
* An earlier version of this channel was removed in `dc16d58` because it
|
|
13
|
+
* fired for completions the blocking tool had ALREADY delivered, so the
|
|
14
|
+
* supervisor saw every result twice: once as a `tool_result`, once as an
|
|
15
|
+
* orphan envelope. That removal is the reason the tests below care as much
|
|
16
|
+
* about what does NOT get delivered as about what does.
|
|
17
|
+
*/
|
|
18
|
+
function handleFor(taskId, result) {
|
|
19
|
+
return {
|
|
20
|
+
taskId: taskId,
|
|
21
|
+
agentId: 'reviewer',
|
|
22
|
+
state: 'completed',
|
|
23
|
+
createdAt: 1_000,
|
|
24
|
+
completedAt: 3_500,
|
|
25
|
+
...(result !== undefined
|
|
26
|
+
? { result: { status: 'completed', result } }
|
|
27
|
+
: {}),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/** A gateway that only does the one thing the inbox uses. */
|
|
31
|
+
function fakeGateway() {
|
|
32
|
+
const listeners = new Set();
|
|
33
|
+
const gateway = {
|
|
34
|
+
onTaskCompleted(cb) {
|
|
35
|
+
listeners.add(cb);
|
|
36
|
+
return () => listeners.delete(cb);
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
return {
|
|
40
|
+
gateway,
|
|
41
|
+
settle: (h) => {
|
|
42
|
+
for (const cb of listeners)
|
|
43
|
+
cb(h);
|
|
44
|
+
},
|
|
45
|
+
get listeners() {
|
|
46
|
+
return listeners.size;
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
describe('a completion nobody waited for reaches the transcript', () => {
|
|
51
|
+
it('queues a settled task and hands it over once', () => {
|
|
52
|
+
const { gateway, settle } = fakeGateway();
|
|
53
|
+
const inbox = new CompletionInbox();
|
|
54
|
+
inbox.attach(gateway);
|
|
55
|
+
settle(handleFor('tsk_1', 'the report'));
|
|
56
|
+
expect(inbox.hasUnheard).toBe(true);
|
|
57
|
+
expect(inbox.drain().map((h) => h.taskId)).toEqual(['tsk_1']);
|
|
58
|
+
// Drained, not peeked: a notification that survives its own delivery
|
|
59
|
+
// is the duplicate bug wearing a different hat.
|
|
60
|
+
expect(inbox.drain()).toEqual([]);
|
|
61
|
+
expect(inbox.hasUnheard).toBe(false);
|
|
62
|
+
});
|
|
63
|
+
it('queues nothing at all when no task settles', () => {
|
|
64
|
+
const { gateway } = fakeGateway();
|
|
65
|
+
const inbox = new CompletionInbox();
|
|
66
|
+
inbox.attach(gateway);
|
|
67
|
+
expect(inbox.hasUnheard).toBe(false);
|
|
68
|
+
expect(inbox.drain()).toEqual([]);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
describe('a completion the tool already delivered is never delivered twice', () => {
|
|
72
|
+
it('drops a claimed completion', () => {
|
|
73
|
+
// The `dc16d58` regression, pinned. `create_task` blocked, got the
|
|
74
|
+
// result, and returned it as its own tool_result — so the envelope
|
|
75
|
+
// must not also carry it.
|
|
76
|
+
const { gateway, settle } = fakeGateway();
|
|
77
|
+
const inbox = new CompletionInbox();
|
|
78
|
+
inbox.attach(gateway);
|
|
79
|
+
settle(handleFor('tsk_1', 'the report'));
|
|
80
|
+
inbox.claim('tsk_1');
|
|
81
|
+
expect(inbox.hasUnheard).toBe(false);
|
|
82
|
+
expect(inbox.drain()).toEqual([]);
|
|
83
|
+
});
|
|
84
|
+
it('drops it even when the claim beats the announcement', () => {
|
|
85
|
+
// Ordering is not guaranteed: the tool's own `waitForTask` can resolve
|
|
86
|
+
// before the gateway's completion listener runs. A claim that only
|
|
87
|
+
// worked after the announcement would leak a duplicate exactly in the
|
|
88
|
+
// races that are hardest to reproduce.
|
|
89
|
+
const { gateway, settle } = fakeGateway();
|
|
90
|
+
const inbox = new CompletionInbox();
|
|
91
|
+
inbox.attach(gateway);
|
|
92
|
+
inbox.claim('tsk_1');
|
|
93
|
+
settle(handleFor('tsk_1', 'the report'));
|
|
94
|
+
expect(inbox.drain()).toEqual([]);
|
|
95
|
+
});
|
|
96
|
+
it('still delivers the sibling that nobody claimed', () => {
|
|
97
|
+
// The mixed turn: one worker awaited to completion, one abandoned.
|
|
98
|
+
const { gateway, settle } = fakeGateway();
|
|
99
|
+
const inbox = new CompletionInbox();
|
|
100
|
+
inbox.attach(gateway);
|
|
101
|
+
settle(handleFor('tsk_awaited', 'delivered inline'));
|
|
102
|
+
settle(handleFor('tsk_abandoned', 'nobody heard this'));
|
|
103
|
+
inbox.claim('tsk_awaited');
|
|
104
|
+
expect(inbox.drain().map((h) => h.taskId)).toEqual(['tsk_abandoned']);
|
|
105
|
+
});
|
|
106
|
+
it('subscribes once no matter how often it is attached', () => {
|
|
107
|
+
// Two subscriptions would queue every completion twice and reproduce
|
|
108
|
+
// the duplicate delivery from the inside.
|
|
109
|
+
const { gateway, settle, ...rest } = fakeGateway();
|
|
110
|
+
const inbox = new CompletionInbox();
|
|
111
|
+
inbox.attach(gateway);
|
|
112
|
+
inbox.attach(gateway);
|
|
113
|
+
settle(handleFor('tsk_1', 'once'));
|
|
114
|
+
expect(inbox.drain()).toHaveLength(1);
|
|
115
|
+
void rest;
|
|
116
|
+
});
|
|
117
|
+
it('stops listening when closed', () => {
|
|
118
|
+
const { gateway, settle } = fakeGateway();
|
|
119
|
+
const inbox = new CompletionInbox();
|
|
120
|
+
inbox.attach(gateway);
|
|
121
|
+
inbox.close();
|
|
122
|
+
settle(handleFor('tsk_1', 'too late'));
|
|
123
|
+
expect(inbox.drain()).toEqual([]);
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
describe('a launch nobody is waiting for holds the run open', () => {
|
|
127
|
+
it('counts an expected task as pending work before it settles', () => {
|
|
128
|
+
// Without this the run settles while a background worker is still
|
|
129
|
+
// going and discards the result the launch existed to produce.
|
|
130
|
+
const { gateway } = fakeGateway();
|
|
131
|
+
const inbox = new CompletionInbox();
|
|
132
|
+
inbox.attach(gateway);
|
|
133
|
+
expect(inbox.hasPendingWork).toBe(false);
|
|
134
|
+
inbox.expect('tsk_1');
|
|
135
|
+
expect(inbox.hasPendingWork).toBe(true);
|
|
136
|
+
});
|
|
137
|
+
it('stops counting it once it settles', () => {
|
|
138
|
+
const { gateway, settle } = fakeGateway();
|
|
139
|
+
const inbox = new CompletionInbox();
|
|
140
|
+
inbox.attach(gateway);
|
|
141
|
+
inbox.expect('tsk_1');
|
|
142
|
+
settle(handleFor('tsk_1', 'done'));
|
|
143
|
+
// Still pending — as an UNHEARD completion now rather than an
|
|
144
|
+
// outstanding one, which is what the loop drains.
|
|
145
|
+
expect(inbox.hasPendingWork).toBe(true);
|
|
146
|
+
inbox.drain();
|
|
147
|
+
expect(inbox.hasPendingWork).toBe(false);
|
|
148
|
+
});
|
|
149
|
+
it('ignores a task already delivered inline', () => {
|
|
150
|
+
const { gateway } = fakeGateway();
|
|
151
|
+
const inbox = new CompletionInbox();
|
|
152
|
+
inbox.attach(gateway);
|
|
153
|
+
inbox.claim('tsk_1');
|
|
154
|
+
inbox.expect('tsk_1');
|
|
155
|
+
expect(inbox.hasPendingWork).toBe(false);
|
|
156
|
+
});
|
|
157
|
+
it('stops expecting a task that was cancelled', () => {
|
|
158
|
+
// `expect` is only cleared by a COMPLETION, so a cancelled worker used
|
|
159
|
+
// to keep the run open for the whole grace period, every time it tried
|
|
160
|
+
// to settle, waiting for a result that had been called off.
|
|
161
|
+
const { gateway } = fakeGateway();
|
|
162
|
+
const inbox = new CompletionInbox();
|
|
163
|
+
inbox.attach(gateway);
|
|
164
|
+
inbox.expect('tsk_1');
|
|
165
|
+
inbox.forget('tsk_1');
|
|
166
|
+
expect(inbox.hasPendingWork).toBe(false);
|
|
167
|
+
});
|
|
168
|
+
it('waits for an arrival and returns as soon as one lands', async () => {
|
|
169
|
+
const { gateway, settle } = fakeGateway();
|
|
170
|
+
const inbox = new CompletionInbox();
|
|
171
|
+
inbox.attach(gateway);
|
|
172
|
+
inbox.expect('tsk_1');
|
|
173
|
+
const waited = inbox.waitForArrival(5_000);
|
|
174
|
+
settle(handleFor('tsk_1', 'done'));
|
|
175
|
+
await waited;
|
|
176
|
+
expect(inbox.drain().map((h) => h.taskId)).toEqual(['tsk_1']);
|
|
177
|
+
});
|
|
178
|
+
it('does not wait at all when there is nothing outstanding', async () => {
|
|
179
|
+
const { gateway } = fakeGateway();
|
|
180
|
+
const inbox = new CompletionInbox();
|
|
181
|
+
inbox.attach(gateway);
|
|
182
|
+
// A deadline this long would hang the suite if it were honoured.
|
|
183
|
+
await inbox.waitForArrival(600_000);
|
|
184
|
+
});
|
|
185
|
+
it('gives up at the deadline rather than holding a run forever', async () => {
|
|
186
|
+
// The bound is the point: a worker that never finishes must not keep
|
|
187
|
+
// the run open indefinitely.
|
|
188
|
+
const { gateway } = fakeGateway();
|
|
189
|
+
const inbox = new CompletionInbox();
|
|
190
|
+
inbox.attach(gateway);
|
|
191
|
+
inbox.expect('tsk_never');
|
|
192
|
+
await inbox.waitForArrival(10);
|
|
193
|
+
expect(inbox.hasPendingWork).toBe(true);
|
|
194
|
+
});
|
|
195
|
+
it('releases a waiter when the inbox closes', async () => {
|
|
196
|
+
const { gateway } = fakeGateway();
|
|
197
|
+
const inbox = new CompletionInbox();
|
|
198
|
+
inbox.attach(gateway);
|
|
199
|
+
inbox.expect('tsk_1');
|
|
200
|
+
const waited = inbox.waitForArrival(600_000);
|
|
201
|
+
inbox.close();
|
|
202
|
+
await waited;
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
describe('the notification says which task and what it produced', () => {
|
|
206
|
+
it('carries the id, the agent, the state and the output', () => {
|
|
207
|
+
// All four matter. Without the id the supervisor cannot say which of
|
|
208
|
+
// five workers this was; without the output it has to make the extra
|
|
209
|
+
// call this mechanism exists to remove.
|
|
210
|
+
const text = formatCompletionNotification([handleFor('tsk_42', 'the findings')]);
|
|
211
|
+
expect(text).toContain('task_id: tsk_42');
|
|
212
|
+
expect(text).toContain('agent: reviewer');
|
|
213
|
+
expect(text).toContain('state: completed');
|
|
214
|
+
expect(text).toContain('duration_ms: 2500');
|
|
215
|
+
expect(text).toContain('the findings');
|
|
216
|
+
});
|
|
217
|
+
it('names the tool that fetches the rest when it truncates', () => {
|
|
218
|
+
const text = formatCompletionNotification([handleFor('tsk_42', 'x'.repeat(10_000))]);
|
|
219
|
+
expect(text).toContain('truncated');
|
|
220
|
+
// The id is repeated in the truncation notice, so the follow-up call
|
|
221
|
+
// does not require scrolling back up through 4 kB of output.
|
|
222
|
+
expect(text).toContain('wait_for_task with task_id "tsk_42"');
|
|
223
|
+
expect(text.length).toBeLessThan(4_500);
|
|
224
|
+
});
|
|
225
|
+
it('says so rather than going blank when a task produced nothing', () => {
|
|
226
|
+
const text = formatCompletionNotification([handleFor('tsk_42')]);
|
|
227
|
+
expect(text).toContain('task_id: tsk_42');
|
|
228
|
+
expect(text).toContain('produced no output');
|
|
229
|
+
});
|
|
230
|
+
it('groups a batch into one message', () => {
|
|
231
|
+
const text = formatCompletionNotification([
|
|
232
|
+
handleFor('tsk_1', 'first'),
|
|
233
|
+
handleFor('tsk_2', 'second'),
|
|
234
|
+
]);
|
|
235
|
+
expect(text).toContain('2 tasks');
|
|
236
|
+
expect(text).toContain('tsk_1');
|
|
237
|
+
expect(text).toContain('tsk_2');
|
|
238
|
+
});
|
|
239
|
+
it('explains why it is arriving here and not as a tool result', () => {
|
|
240
|
+
// Otherwise the model has to guess whether it missed a call, and the
|
|
241
|
+
// guess it makes is to go looking — which is the polling loop again.
|
|
242
|
+
const text = formatCompletionNotification([handleFor('tsk_1', 'done')]);
|
|
243
|
+
expect(text).toContain('not waiting on it');
|
|
244
|
+
});
|
|
245
|
+
});
|
|
246
|
+
describe('the inbox does not require anything of a host gateway', () => {
|
|
247
|
+
it('uses only onTaskCompleted', () => {
|
|
248
|
+
// The whole point of attaching through the existing subscription: a
|
|
249
|
+
// host that implements TaskGateway keeps working untouched, and one
|
|
250
|
+
// that was already firing completions into an empty listener set now
|
|
251
|
+
// has a listener.
|
|
252
|
+
const onTaskCompleted = vi.fn(() => () => { });
|
|
253
|
+
const inbox = new CompletionInbox();
|
|
254
|
+
inbox.attach({ onTaskCompleted });
|
|
255
|
+
expect(onTaskCompleted).toHaveBeenCalledTimes(1);
|
|
256
|
+
});
|
|
257
|
+
});
|
|
258
|
+
//# sourceMappingURL=completion-inbox.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion-inbox.test.js","sourceRoot":"","sources":["../../../src/gateway/__tests__/completion-inbox.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import type { TaskGateway, TaskHandle } from '../types/agent/gateway.js';
|
|
2
|
+
import type { TaskId } from '../types/ids/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Completions that finished with nobody left to hear them.
|
|
5
|
+
*
|
|
6
|
+
* A worker's result reaches the supervisor as the `tool_result` of the
|
|
7
|
+
* `create_task` that launched it. That works whenever the launching call is
|
|
8
|
+
* still the live path — but it is not the only way a task ends:
|
|
9
|
+
*
|
|
10
|
+
* - the launching tool hit its deadline and the executor returned
|
|
11
|
+
* *"timed out… it may still be running"* to the model. The worker then
|
|
12
|
+
* finished normally, holding a result nothing would ever read.
|
|
13
|
+
* - the task was launched in the background on purpose, so there is no
|
|
14
|
+
* call waiting on it by design.
|
|
15
|
+
*
|
|
16
|
+
* In both cases the completion exists, the gateway remembers it, and the
|
|
17
|
+
* model is never told. That is the gap this closes: the run subscribes once,
|
|
18
|
+
* every settled task lands here, and anything a tool did NOT hand over
|
|
19
|
+
* inline is drained into the transcript as a notification the next turn can
|
|
20
|
+
* read.
|
|
21
|
+
*
|
|
22
|
+
* The disambiguation is the whole design. An earlier version of the envelope
|
|
23
|
+
* path was removed (`dc16d58`) because it fired for completions the blocking
|
|
24
|
+
* tool had ALREADY delivered, so the supervisor saw every result twice —
|
|
25
|
+
* once correctly as a `tool_result`, once as an orphan envelope. Removing it
|
|
26
|
+
* fixed the duplicate and left the abandoned case with no channel at all.
|
|
27
|
+
* Claiming is what tells the two apart: a tool that delivers a completion
|
|
28
|
+
* says so, and only unclaimed completions become envelopes.
|
|
29
|
+
*
|
|
30
|
+
* It attaches through `onTaskCompleted`, which every `TaskGateway` already
|
|
31
|
+
* has, so a host gateway needs no change to take part — a host that was
|
|
32
|
+
* firing completions into a listener set with no listeners now has one.
|
|
33
|
+
*/
|
|
34
|
+
export declare class CompletionInbox {
|
|
35
|
+
private readonly unheard;
|
|
36
|
+
private readonly claimed;
|
|
37
|
+
/** Launched with nothing waiting on it, and not settled yet. */
|
|
38
|
+
private readonly outstanding;
|
|
39
|
+
private readonly arrivals;
|
|
40
|
+
private detach?;
|
|
41
|
+
/**
|
|
42
|
+
* Start listening.
|
|
43
|
+
*
|
|
44
|
+
* Returns a detach function; calling `attach` twice is a no-op rather
|
|
45
|
+
* than a second subscription, because a doubly-attached inbox would
|
|
46
|
+
* queue every completion twice and reproduce the exact duplicate this
|
|
47
|
+
* class exists to prevent.
|
|
48
|
+
*/
|
|
49
|
+
attach(gateway: TaskGateway): () => void;
|
|
50
|
+
/**
|
|
51
|
+
* Say that a task was launched with nothing waiting on it.
|
|
52
|
+
*
|
|
53
|
+
* Without this the inbox can only see completions that have already
|
|
54
|
+
* happened, and a run whose supervisor launched a background worker and
|
|
55
|
+
* then answered would settle while the worker was still going — throwing
|
|
56
|
+
* away the very result the launch existed to produce. Knowing a task is
|
|
57
|
+
* outstanding is what lets the loop hold the run open for it.
|
|
58
|
+
*/
|
|
59
|
+
expect(taskId: TaskId): void;
|
|
60
|
+
/** Whether anything is either waiting to be told or still running. */
|
|
61
|
+
get hasPendingWork(): boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Wait for the next completion, or for the deadline, whichever comes first.
|
|
64
|
+
*
|
|
65
|
+
* Bounded on purpose. A worker that never finishes must not hold a run
|
|
66
|
+
* open forever, and the caller decides how long "long enough" is — the
|
|
67
|
+
* run's own budget is the only thing that knows.
|
|
68
|
+
*/
|
|
69
|
+
waitForArrival(timeoutMs: number): Promise<void>;
|
|
70
|
+
/**
|
|
71
|
+
* Say that this completion reached the model as a `tool_result`.
|
|
72
|
+
*
|
|
73
|
+
* Idempotent, and safe to call before the completion is announced: the
|
|
74
|
+
* claim is remembered so a late announcement does not re-queue it.
|
|
75
|
+
*/
|
|
76
|
+
claim(taskId: TaskId): void;
|
|
77
|
+
/** Whether anything is waiting to be told. */
|
|
78
|
+
get hasUnheard(): boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Take every unheard completion, leaving the inbox empty.
|
|
81
|
+
*
|
|
82
|
+
* Draining rather than peeking: a notification that stays queued after
|
|
83
|
+
* being delivered is the duplicate-delivery bug in a different costume.
|
|
84
|
+
*/
|
|
85
|
+
drain(): TaskHandle[];
|
|
86
|
+
/**
|
|
87
|
+
* Stop expecting a task that is never going to arrive.
|
|
88
|
+
*
|
|
89
|
+
* Cancelling is the case this exists for. `expect` puts a task on the
|
|
90
|
+
* outstanding list and only a COMPLETION takes it off, so a cancelled
|
|
91
|
+
* worker left `hasPendingWork` true for the rest of the run — and every
|
|
92
|
+
* attempt to settle then paid the full grace period waiting for a result
|
|
93
|
+
* that had been called off.
|
|
94
|
+
*/
|
|
95
|
+
forget(taskId: TaskId): void;
|
|
96
|
+
/** Stop listening. Safe to call more than once. */
|
|
97
|
+
close(): void;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* The message a supervisor reads when a worker it stopped waiting for
|
|
101
|
+
* finishes.
|
|
102
|
+
*
|
|
103
|
+
* It carries the task id, because without one the model cannot say which of
|
|
104
|
+
* five workers this was, and it carries the output, because a notification
|
|
105
|
+
* that only says "done" forces exactly the follow-up call this mechanism
|
|
106
|
+
* exists to remove. Long output is truncated with the task id repeated in
|
|
107
|
+
* the truncation notice, so the full text stays one `wait_for_task` away and
|
|
108
|
+
* the model knows which id to ask for — that tool takes a `task_id` and
|
|
109
|
+
* returns immediately for a task that has already finished, where the
|
|
110
|
+
* listing takes only a state filter and could not have been followed.
|
|
111
|
+
*/
|
|
112
|
+
export declare function formatCompletionNotification(handles: readonly TaskHandle[]): string;
|
|
113
|
+
//# sourceMappingURL=completion-inbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion-inbox.d.ts","sourceRoot":"","sources":["../../src/gateway/completion-inbox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACxE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,eAAe;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgC;IACxD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,gEAAgE;IAChE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAChD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwB;IACjD,OAAO,CAAC,MAAM,CAAC,CAAY;IAE3B;;;;;;;OAOG;IACH,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,IAAI;IAcxC;;;;;;;;OAQG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK5B,sEAAsE;IACtE,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED;;;;;;OAMG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BhD;;;;;OAKG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAM3B,8CAA8C;IAC9C,IAAI,UAAU,IAAI,OAAO,CAExB;IAED;;;;;OAKG;IACH,KAAK,IAAI,UAAU,EAAE;IAQrB;;;;;;;;OAQG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQ5B,mDAAmD;IACnD,KAAK,IAAI,IAAI;CAUb;AAKD;;;;;;;;;;;;GAYG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,GAAG,MAAM,CA8BnF"}
|