@adonis-agora/agent 0.48.0 → 0.50.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 +29 -0
- package/dist/providers/agent_provider.d.ts.map +1 -1
- package/dist/providers/agent_provider.js +225 -46
- package/dist/providers/agent_provider.js.map +1 -1
- package/dist/providers/dashboard_provider.js +1 -1
- package/dist/providers/dashboard_provider.js.map +1 -1
- package/dist/src/agent-loop.d.ts +18 -0
- package/dist/src/agent-loop.d.ts.map +1 -1
- package/dist/src/agent-loop.js +52 -8
- package/dist/src/agent-loop.js.map +1 -1
- package/dist/src/agent-service.d.ts +129 -9
- package/dist/src/agent-service.d.ts.map +1 -1
- package/dist/src/agent-service.js +284 -8
- package/dist/src/agent-service.js.map +1 -1
- package/dist/src/chat-queue-service.d.ts +153 -0
- package/dist/src/chat-queue-service.d.ts.map +1 -0
- package/dist/src/chat-queue-service.js +360 -0
- package/dist/src/chat-queue-service.js.map +1 -0
- package/dist/src/client/chat-client.d.ts +52 -0
- package/dist/src/client/chat-client.d.ts.map +1 -1
- package/dist/src/client/chat-client.js +51 -2
- package/dist/src/client/chat-client.js.map +1 -1
- package/dist/src/client/index.d.ts +1 -1
- package/dist/src/client/index.d.ts.map +1 -1
- package/dist/src/client/index.js +1 -1
- package/dist/src/client/index.js.map +1 -1
- package/dist/src/client/sse.d.ts +5 -0
- package/dist/src/client/sse.d.ts.map +1 -1
- package/dist/src/client/sse.js +5 -1
- package/dist/src/client/sse.js.map +1 -1
- package/dist/src/define_config.d.ts +3 -1
- package/dist/src/define_config.d.ts.map +1 -1
- package/dist/src/define_config.js.map +1 -1
- package/dist/src/durable/agent-run-context.d.ts +6 -0
- package/dist/src/durable/agent-run-context.d.ts.map +1 -1
- package/dist/src/durable/agent-run-context.js.map +1 -1
- package/dist/src/durable/agent-run-workflow.d.ts.map +1 -1
- package/dist/src/durable/agent-run-workflow.js +94 -6
- package/dist/src/durable/agent-run-workflow.js.map +1 -1
- package/dist/src/durable/durable-agent-runner.d.ts +19 -3
- package/dist/src/durable/durable-agent-runner.d.ts.map +1 -1
- package/dist/src/durable/durable-agent-runner.js +62 -3
- package/dist/src/durable/durable-agent-runner.js.map +1 -1
- package/dist/src/elicitation.d.ts +12 -0
- package/dist/src/elicitation.d.ts.map +1 -1
- package/dist/src/elicitation.js +9 -1
- package/dist/src/elicitation.js.map +1 -1
- package/dist/src/index.d.ts +8 -5
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -4
- package/dist/src/index.js.map +1 -1
- package/dist/src/react/use-agent-chat.d.ts.map +1 -1
- package/dist/src/react/use-agent-chat.js +15 -1
- package/dist/src/react/use-agent-chat.js.map +1 -1
- package/dist/src/runners/inline-agent-runner.d.ts +30 -6
- package/dist/src/runners/inline-agent-runner.d.ts.map +1 -1
- package/dist/src/runners/inline-agent-runner.js +117 -21
- package/dist/src/runners/inline-agent-runner.js.map +1 -1
- package/dist/src/spi/agent-runner.d.ts +20 -1
- package/dist/src/spi/agent-runner.d.ts.map +1 -1
- package/dist/src/spi/chat-queue.d.ts +133 -0
- package/dist/src/spi/chat-queue.d.ts.map +1 -0
- package/dist/src/spi/chat-queue.js +48 -0
- package/dist/src/spi/chat-queue.js.map +1 -0
- package/dist/src/spi/model-catalog.d.ts +13 -0
- package/dist/src/spi/model-catalog.d.ts.map +1 -1
- package/dist/src/spi/model-catalog.js.map +1 -1
- package/dist/src/spi/quota-provider.d.ts +30 -1
- package/dist/src/spi/quota-provider.d.ts.map +1 -1
- package/dist/src/spi/quota-provider.js +34 -1
- package/dist/src/spi/quota-provider.js.map +1 -1
- package/dist/src/stores/ledger-quota-provider.d.ts +10 -1
- package/dist/src/stores/ledger-quota-provider.d.ts.map +1 -1
- package/dist/src/stores/ledger-quota-provider.js +14 -3
- package/dist/src/stores/ledger-quota-provider.js.map +1 -1
- package/dist/src/stores/lucid-schema.d.ts +8 -6
- package/dist/src/stores/lucid-schema.d.ts.map +1 -1
- package/dist/src/stores/lucid-schema.js +34 -7
- package/dist/src/stores/lucid-schema.js.map +1 -1
- package/dist/src/stores/lucid.d.ts +23 -1
- package/dist/src/stores/lucid.d.ts.map +1 -1
- package/dist/src/stores/lucid.js +192 -0
- package/dist/src/stores/lucid.js.map +1 -1
- package/dist/src/stream-events.d.ts +17 -0
- package/dist/src/stream-events.d.ts.map +1 -1
- package/dist/src/testing/chat-queue-store-contract.d.ts +26 -0
- package/dist/src/testing/chat-queue-store-contract.d.ts.map +1 -0
- package/dist/src/testing/chat-queue-store-contract.js +162 -0
- package/dist/src/testing/chat-queue-store-contract.js.map +1 -0
- package/dist/src/testing/in-memory-store.d.ts +20 -1
- package/dist/src/testing/in-memory-store.d.ts.map +1 -1
- package/dist/src/testing/in-memory-store.js +125 -0
- package/dist/src/testing/in-memory-store.js.map +1 -1
- package/dist/src/testing/index.d.ts +1 -0
- package/dist/src/testing/index.d.ts.map +1 -1
- package/dist/src/testing/index.js +1 -0
- package/dist/src/testing/index.js.map +1 -1
- package/dist/src/tool-presentation.d.ts +5 -0
- package/dist/src/tool-presentation.d.ts.map +1 -1
- package/dist/src/tool-presentation.js +5 -1
- package/dist/src/tool-presentation.js.map +1 -1
- package/dist/src/types.d.ts +25 -1
- package/dist/src/types.d.ts.map +1 -1
- package/dist/stubs/database/migrations/create_agent_tables.stub +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
import { utcDay } from './agent-deps.js';
|
|
2
|
+
import { isChatQueueStore, queuedMessageView, } from './spi/chat-queue.js';
|
|
3
|
+
/** How many times a drain retries when the head it picked is removed under it. */
|
|
4
|
+
const MAX_DRAIN_ATTEMPTS = 8;
|
|
5
|
+
/**
|
|
6
|
+
* The thread-level message queue: messages a person sends while a turn is running wait here, and
|
|
7
|
+
* the next one starts as soon as the running turn settles. A port of `@dudousxd/nestjs-agent`'s
|
|
8
|
+
* `ChatQueueService`; the wire is its `docs/stream-protocol.md`, *Message queue*.
|
|
9
|
+
*
|
|
10
|
+
* Everything that decides WHICH run holds a thread goes through the store's compare-and-set
|
|
11
|
+
* admission (`claimActiveStream` / `releaseActiveStream`), so two processes that both try to start
|
|
12
|
+
* the next turn — a settling run on a worker and a send on a web pod — cannot both win. The next
|
|
13
|
+
* run's id is the queued message's own id, which makes every step here idempotent: a retried claim
|
|
14
|
+
* for the same message succeeds again, and a durable start under the same id is a no-op.
|
|
15
|
+
*
|
|
16
|
+
* Policy, per outcome of the run that held the thread:
|
|
17
|
+
* - `completed` → the head starts.
|
|
18
|
+
* - `failed` → the queue pauses (`run_failed`), keeping every message.
|
|
19
|
+
* - `cancelled` → the queue pauses (`cancelled`), unless the head was queued by an interrupt — the
|
|
20
|
+
* cancel was made for it, so it starts.
|
|
21
|
+
* A paused queue starts nothing until it is resumed. A head whose actor is over quota pauses it
|
|
22
|
+
* (`quota_exceeded`) instead of starting.
|
|
23
|
+
*/
|
|
24
|
+
export class ChatQueueService {
|
|
25
|
+
store;
|
|
26
|
+
sink;
|
|
27
|
+
options;
|
|
28
|
+
/**
|
|
29
|
+
* Runs this process claimed a thread for and has not handed to a runner yet. A holder in here is
|
|
30
|
+
* alive whatever the runner says — it simply has not registered the run yet.
|
|
31
|
+
*/
|
|
32
|
+
starting = new Set();
|
|
33
|
+
constructor(store, sink, options = {}) {
|
|
34
|
+
this.store = store;
|
|
35
|
+
this.sink = sink;
|
|
36
|
+
this.options = options;
|
|
37
|
+
}
|
|
38
|
+
/** Whether the bound store can hold a queue. Without one, a busy thread is not queued. */
|
|
39
|
+
get supported() {
|
|
40
|
+
return isChatQueueStore(this.store);
|
|
41
|
+
}
|
|
42
|
+
/** The bound store as a queue store; throws when it is not one (check {@link supported} first). */
|
|
43
|
+
queueStore() {
|
|
44
|
+
if (!isChatQueueStore(this.store)) {
|
|
45
|
+
throw new Error('Queueing messages requires an AgentStore that implements ChatQueueStore (enqueueMessage, ' +
|
|
46
|
+
'listQueue, …, claimActiveStream, releaseActiveStream); the bound store does not.');
|
|
47
|
+
}
|
|
48
|
+
return this.store;
|
|
49
|
+
}
|
|
50
|
+
async state(threadId) {
|
|
51
|
+
const store = this.queueStore();
|
|
52
|
+
const [items, paused] = await Promise.all([
|
|
53
|
+
store.listQueue(threadId),
|
|
54
|
+
store.queuePause(threadId),
|
|
55
|
+
]);
|
|
56
|
+
return { items: items.map(queuedMessageView), paused };
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Whether `holder` is still running. A run this process is about to start is; otherwise the
|
|
60
|
+
* runner decides, and a runner that cannot tell says yes.
|
|
61
|
+
*/
|
|
62
|
+
async isAlive(holder, runner) {
|
|
63
|
+
if (this.starting.has(holder)) {
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
if (typeof runner.isRunActive !== 'function') {
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
try {
|
|
70
|
+
return await runner.isRunActive(holder);
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* The run holding `threadId`, or `null` when it is free — a holder the runner reports dead counts
|
|
78
|
+
* as free, and is returned as `stale` so the caller can claim over it.
|
|
79
|
+
*/
|
|
80
|
+
async holder(threadId, runner) {
|
|
81
|
+
const holder = await this.queueStore().activeRunForThread(threadId);
|
|
82
|
+
if (holder === null) {
|
|
83
|
+
return { live: null, stale: null };
|
|
84
|
+
}
|
|
85
|
+
return (await this.isAlive(holder, runner))
|
|
86
|
+
? { live: holder, stale: null }
|
|
87
|
+
: { live: null, stale: holder };
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Decide what follows a TOP-LEVEL run that is settling on `threadId`, and move the thread there:
|
|
91
|
+
* hand it to the next queued message (claimed and popped here, started by the caller), or pause
|
|
92
|
+
* the queue, or release the thread. Call it BEFORE the run's terminal frame, so a client reading
|
|
93
|
+
* the stream learns what comes next from the `queue` frame, and so the thread is already free
|
|
94
|
+
* when the client sees the run end.
|
|
95
|
+
*
|
|
96
|
+
* A no-op returning `{}` on a store without a queue.
|
|
97
|
+
*/
|
|
98
|
+
async plan(args) {
|
|
99
|
+
if (!isChatQueueStore(this.store)) {
|
|
100
|
+
return {};
|
|
101
|
+
}
|
|
102
|
+
const store = this.store;
|
|
103
|
+
const { threadId, outcome } = args;
|
|
104
|
+
// Only the run holding the thread moves it on. One that already handed it over (a durable
|
|
105
|
+
// cancel settles from outside the body, and the body may still settle after it) has nothing
|
|
106
|
+
// left to decide — deciding again would pause a queue the handover just started.
|
|
107
|
+
if ((await store.activeRunForThread(threadId)) !== args.runId) {
|
|
108
|
+
return {};
|
|
109
|
+
}
|
|
110
|
+
// The id holding the thread right now, as far as this drain knows: the settling run, until it
|
|
111
|
+
// is released, then nobody.
|
|
112
|
+
let holding = args.runId;
|
|
113
|
+
for (let attempt = 0; attempt < MAX_DRAIN_ATTEMPTS; attempt += 1) {
|
|
114
|
+
const items = await store.listQueue(threadId);
|
|
115
|
+
const head = items[0];
|
|
116
|
+
if (head === undefined) {
|
|
117
|
+
if (holding !== null) {
|
|
118
|
+
await store.releaseActiveStream(threadId, holding);
|
|
119
|
+
holding = null;
|
|
120
|
+
// An enqueue that landed between the read above and this release saw the thread held and
|
|
121
|
+
// left its message for this drain — read once more now that the thread is free.
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
return {};
|
|
125
|
+
}
|
|
126
|
+
let pause = await store.queuePause(threadId);
|
|
127
|
+
if (pause === null) {
|
|
128
|
+
const reason = pauseReasonFor(outcome, head);
|
|
129
|
+
if (reason !== null) {
|
|
130
|
+
pause = {
|
|
131
|
+
reason,
|
|
132
|
+
...(outcome === 'failed' && args.error !== undefined ? { message: args.error } : {}),
|
|
133
|
+
at: new Date().toISOString(),
|
|
134
|
+
};
|
|
135
|
+
await store.setQueuePause(threadId, pause);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
if (pause === null) {
|
|
139
|
+
const blocked = await this.quotaBlock(head.actor);
|
|
140
|
+
if (blocked !== null) {
|
|
141
|
+
pause = { reason: 'quota_exceeded', message: blocked, at: new Date().toISOString() };
|
|
142
|
+
await store.setQueuePause(threadId, pause);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
if (pause !== null) {
|
|
146
|
+
if (holding !== null) {
|
|
147
|
+
await store.releaseActiveStream(threadId, holding);
|
|
148
|
+
}
|
|
149
|
+
return { frame: queueFrame(items, pause) };
|
|
150
|
+
}
|
|
151
|
+
const claimed = await store.claimActiveStream(threadId, head.id, holding !== null ? { replacing: holding } : {});
|
|
152
|
+
if (!claimed) {
|
|
153
|
+
// Someone else holds the thread now (a send that got in first); its own settle drains.
|
|
154
|
+
return {};
|
|
155
|
+
}
|
|
156
|
+
holding = head.id;
|
|
157
|
+
if (!(await store.removeQueuedMessage(head.id))) {
|
|
158
|
+
// Removed (or started) under us between the read and the claim: give the claim back and
|
|
159
|
+
// look at the new head.
|
|
160
|
+
await store.releaseActiveStream(threadId, head.id);
|
|
161
|
+
holding = null;
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
const next = {
|
|
165
|
+
runId: head.id,
|
|
166
|
+
messageId: head.id,
|
|
167
|
+
input: await this.inputFor(head),
|
|
168
|
+
};
|
|
169
|
+
return {
|
|
170
|
+
next,
|
|
171
|
+
frame: queueFrame(items.slice(1), null, { messageId: head.id, runId: head.id }),
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
// Pathological churn (every head removed under us): leave the thread free rather than spin.
|
|
175
|
+
if (holding !== null) {
|
|
176
|
+
await store.releaseActiveStream(threadId, holding);
|
|
177
|
+
}
|
|
178
|
+
return {};
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* {@link plan}, then start what it picked with `start`. What an in-process settle (the inline
|
|
182
|
+
* runner, a durable cancel issued outside a workflow) calls; answers the frame to write.
|
|
183
|
+
*/
|
|
184
|
+
async handoff(args, start) {
|
|
185
|
+
const plan = await this.plan(args);
|
|
186
|
+
if (plan.next === undefined) {
|
|
187
|
+
return plan.frame;
|
|
188
|
+
}
|
|
189
|
+
return (await this.launch(args.threadId, plan.next, start))
|
|
190
|
+
? plan.frame
|
|
191
|
+
: this.pausedFrame(args.threadId);
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Start the head of an IDLE thread's queue — after a send queued behind a run that turned out to
|
|
195
|
+
* be gone, after a resume, after a stale holder. Does nothing while a live run holds the thread
|
|
196
|
+
* (its settle drains) or while the queue is paused. Answers the started run's id, if any.
|
|
197
|
+
*/
|
|
198
|
+
async kick(threadId, runner) {
|
|
199
|
+
if (!isChatQueueStore(this.store)) {
|
|
200
|
+
return undefined;
|
|
201
|
+
}
|
|
202
|
+
const { live, stale } = await this.holder(threadId, runner);
|
|
203
|
+
if (live !== null) {
|
|
204
|
+
return undefined;
|
|
205
|
+
}
|
|
206
|
+
if (stale !== null) {
|
|
207
|
+
console.warn(`[@adonis-agora/agent] thread ${threadId} was held by run ${stale}, which is no longer running`);
|
|
208
|
+
}
|
|
209
|
+
// Planned as if the stale holder completed: nothing it did pauses the queue.
|
|
210
|
+
const plan = await this.plan({ threadId, runId: stale, outcome: 'completed' });
|
|
211
|
+
if (plan.next === undefined) {
|
|
212
|
+
return undefined;
|
|
213
|
+
}
|
|
214
|
+
const started = await this.launch(threadId, plan.next, (input, runId) => runner.start(input, { runId }));
|
|
215
|
+
if (started && plan.frame !== undefined) {
|
|
216
|
+
// The new run's own stream is where a client attached to nothing yet learns about it.
|
|
217
|
+
await this.write(plan.next.runId, plan.frame);
|
|
218
|
+
}
|
|
219
|
+
return started ? plan.next.runId : undefined;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Start a turn the thread is already claimed for. On failure the message goes back to the head of
|
|
223
|
+
* the queue, the queue pauses (`start_failed`), and the claim is released — nothing is lost and
|
|
224
|
+
* nothing is left holding the thread.
|
|
225
|
+
*/
|
|
226
|
+
async launch(threadId, next, start) {
|
|
227
|
+
this.starting.add(next.runId);
|
|
228
|
+
try {
|
|
229
|
+
await start(next.input, next.runId);
|
|
230
|
+
return true;
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
234
|
+
console.error(`[@adonis-agora/agent] queued message ${next.messageId} could not start: ${message}`);
|
|
235
|
+
await this.restore(threadId, next, 'start_failed', message);
|
|
236
|
+
return false;
|
|
237
|
+
}
|
|
238
|
+
finally {
|
|
239
|
+
this.starting.delete(next.runId);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
/** Put a turn that never started back at the head of its queue, paused, and free the thread. */
|
|
243
|
+
async restore(threadId, next, reason, message) {
|
|
244
|
+
const store = this.queueStore();
|
|
245
|
+
const { input } = next;
|
|
246
|
+
await store.enqueueMessage({
|
|
247
|
+
threadId,
|
|
248
|
+
actor: input.actor,
|
|
249
|
+
content: input.userText,
|
|
250
|
+
at: 'head',
|
|
251
|
+
...(input.attachments !== undefined ? { attachments: input.attachments } : {}),
|
|
252
|
+
...(input.agentName !== undefined ? { agentName: input.agentName } : {}),
|
|
253
|
+
...(input.model !== undefined ? { model: input.model } : {}),
|
|
254
|
+
...(input.pageContext !== undefined ? { pageContext: input.pageContext } : {}),
|
|
255
|
+
});
|
|
256
|
+
await store.setQueuePause(threadId, { reason, message, at: new Date().toISOString() });
|
|
257
|
+
await store.releaseActiveStream(threadId, next.runId);
|
|
258
|
+
}
|
|
259
|
+
/** A `queue` frame with the thread's current state. */
|
|
260
|
+
async pausedFrame(threadId) {
|
|
261
|
+
return { kind: 'queue', queue: await this.state(threadId) };
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Tell whoever is watching the thread that its queue changed: a `queue` frame into the stream of
|
|
265
|
+
* the run holding it. Best-effort — a thread nobody is streaming has no one to tell, and the next
|
|
266
|
+
* read of the thread carries the queue anyway.
|
|
267
|
+
*/
|
|
268
|
+
async publish(threadId) {
|
|
269
|
+
const state = await this.state(threadId);
|
|
270
|
+
const holder = await this.queueStore().activeRunForThread(threadId);
|
|
271
|
+
if (holder !== null) {
|
|
272
|
+
await this.write(holder, { kind: 'queue', queue: state }).catch((error) => {
|
|
273
|
+
console.warn(`[@adonis-agora/agent] could not publish the queue of thread ${threadId}: ${error instanceof Error ? error.message : String(error)}`);
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
return state;
|
|
277
|
+
}
|
|
278
|
+
/** Write one agent-protocol event into `runId`'s stream. */
|
|
279
|
+
async write(runId, frame) {
|
|
280
|
+
const writer = await this.sink.open(runId);
|
|
281
|
+
await writer.write({ t: 'event', event: frame });
|
|
282
|
+
}
|
|
283
|
+
/** Why `actor` may not start a turn now (the quota message), or `null`. */
|
|
284
|
+
async quotaBlock(actor) {
|
|
285
|
+
const quota = this.options.quota;
|
|
286
|
+
if (quota === undefined) {
|
|
287
|
+
return null;
|
|
288
|
+
}
|
|
289
|
+
try {
|
|
290
|
+
const { blocked } = await quota.report({ actor });
|
|
291
|
+
if (blocked === undefined) {
|
|
292
|
+
return null;
|
|
293
|
+
}
|
|
294
|
+
return (blocked.reason ?? `The ${blocked.period === 'day' ? 'daily' : 'monthly'} quota is used up`);
|
|
295
|
+
}
|
|
296
|
+
catch {
|
|
297
|
+
// Failing to ask is not a verdict; the send path's own quota gate still runs.
|
|
298
|
+
return null;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* The turn a queued message starts: everything it was queued with, today's date, and its
|
|
303
|
+
* attachments' urls minted afresh — the ones stored at enqueue time may have expired while it
|
|
304
|
+
* waited. An attachment the store no longer resolves keeps its stored url.
|
|
305
|
+
*/
|
|
306
|
+
async inputFor(message) {
|
|
307
|
+
const attachments = await this.freshAttachments(message.actor, message.attachments ?? []);
|
|
308
|
+
const persona = this.options.personaFor?.(message.agentName);
|
|
309
|
+
return {
|
|
310
|
+
threadId: message.threadId,
|
|
311
|
+
actor: message.actor,
|
|
312
|
+
userText: message.content,
|
|
313
|
+
day: utcDay(),
|
|
314
|
+
...(message.agentName !== undefined ? { agentName: message.agentName } : {}),
|
|
315
|
+
...(persona !== undefined ? { persona } : {}),
|
|
316
|
+
...(attachments.length > 0 ? { attachments } : {}),
|
|
317
|
+
...(message.pageContext !== undefined ? { pageContext: message.pageContext } : {}),
|
|
318
|
+
...(message.model !== undefined ? { model: message.model } : {}),
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
async freshAttachments(actor, attachments) {
|
|
322
|
+
const staging = this.options.attachments;
|
|
323
|
+
if (attachments.length === 0 || staging === undefined) {
|
|
324
|
+
return attachments;
|
|
325
|
+
}
|
|
326
|
+
return Promise.all(attachments.map(async (attachment) => {
|
|
327
|
+
try {
|
|
328
|
+
return (await staging.resolve({ mediaId: attachment.mediaId, actor })) ?? attachment;
|
|
329
|
+
}
|
|
330
|
+
catch {
|
|
331
|
+
return attachment;
|
|
332
|
+
}
|
|
333
|
+
}));
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
/** The pause a settling run's outcome imposes on a non-empty queue, or `null` to keep draining. */
|
|
337
|
+
function pauseReasonFor(outcome, head) {
|
|
338
|
+
if (outcome === 'failed') {
|
|
339
|
+
return 'run_failed';
|
|
340
|
+
}
|
|
341
|
+
if (outcome === 'cancelled' && head.interrupt !== true) {
|
|
342
|
+
return 'cancelled';
|
|
343
|
+
}
|
|
344
|
+
return null;
|
|
345
|
+
}
|
|
346
|
+
function queueFrame(items, paused, started) {
|
|
347
|
+
return {
|
|
348
|
+
kind: 'queue',
|
|
349
|
+
queue: { items: items.map(queuedMessageView), paused },
|
|
350
|
+
...(started !== undefined ? { started } : {}),
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* A thread's own turn — not a sub-agent's run on a subthread, which neither holds its thread's
|
|
355
|
+
* queue nor answers to it.
|
|
356
|
+
*/
|
|
357
|
+
export function isThreadTurn(input) {
|
|
358
|
+
return input.sinkRunId === undefined && input.parentRunId === undefined;
|
|
359
|
+
}
|
|
360
|
+
//# sourceMappingURL=chat-queue-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-queue-service.js","sourceRoot":"","sources":["../../src/chat-queue-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,45 @@ export interface AgentChatRequestBody {
|
|
|
13
13
|
kind?: string;
|
|
14
14
|
[key: string]: unknown;
|
|
15
15
|
};
|
|
16
|
+
/** Uploads named by id alone (`POST <base>/attachments` answered them). */
|
|
16
17
|
attachments?: unknown[];
|
|
18
|
+
/** Run THIS turn on a catalog model (`GET <base>/models`). Never pins it on the thread. */
|
|
19
|
+
model?: string;
|
|
20
|
+
/**
|
|
21
|
+
* Answer the thread's last user message again (needs `threadId`; `message` is ignored): the
|
|
22
|
+
* server drops the old answer and streams a new one under a new run.
|
|
23
|
+
*/
|
|
24
|
+
regenerate?: true;
|
|
25
|
+
/**
|
|
26
|
+
* What to do when the thread already has a turn running: `'auto'` (default — run now, else wait
|
|
27
|
+
* in the thread's queue), `'queue'` (always queue), `'interrupt'` (cancel the running turn and run
|
|
28
|
+
* this next). A queued send answers `202` — see {@link AgentChatQueued}.
|
|
29
|
+
*/
|
|
30
|
+
mode?: 'auto' | 'queue' | 'interrupt';
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* What `POST {basePath}/chat` answers (`202`) when the message waits in its thread's queue instead
|
|
34
|
+
* of running: nothing streams. `runId` is present when it started straight away (attach with
|
|
35
|
+
* {@link AgentChatClient.resume}); otherwise it runs — under `messageId` as its run id — once the
|
|
36
|
+
* turn ahead of it settles, announced by a `queue` event with `started` in that turn's stream.
|
|
37
|
+
*/
|
|
38
|
+
export interface AgentChatQueued {
|
|
39
|
+
queued: true;
|
|
40
|
+
threadId: string;
|
|
41
|
+
messageId: string;
|
|
42
|
+
/** 0-based place in the queue (`0` → runs next). */
|
|
43
|
+
position: number;
|
|
44
|
+
queue: {
|
|
45
|
+
items: {
|
|
46
|
+
id: string;
|
|
47
|
+
content: string;
|
|
48
|
+
[key: string]: unknown;
|
|
49
|
+
}[];
|
|
50
|
+
paused: unknown;
|
|
51
|
+
};
|
|
52
|
+
runId?: string;
|
|
53
|
+
/** The run an interrupt cancelled to make room for it. */
|
|
54
|
+
interrupting?: string;
|
|
17
55
|
}
|
|
18
56
|
/** Options for {@link createAgentChatClient}. */
|
|
19
57
|
export interface AgentChatClientOptions {
|
|
@@ -60,6 +98,8 @@ export interface AgentChatResult {
|
|
|
60
98
|
runId?: string;
|
|
61
99
|
threadId?: string;
|
|
62
100
|
parts: ChatPart[];
|
|
101
|
+
/** Present when the server queued the message instead of streaming a reply (`202`). */
|
|
102
|
+
queued?: AgentChatQueued;
|
|
63
103
|
}
|
|
64
104
|
/**
|
|
65
105
|
* Thrown when a run's stream dropped and could not be resumed within the retry budget. Carries the
|
|
@@ -72,6 +112,18 @@ export declare class AgentChatDisconnectedError extends Error {
|
|
|
72
112
|
readonly parts: ChatPart[];
|
|
73
113
|
constructor(runId: string | undefined, threadId: string | undefined, parts: ChatPart[]);
|
|
74
114
|
}
|
|
115
|
+
/**
|
|
116
|
+
* The server refused the request before any stream started — a non-2xx answer. `message` is the
|
|
117
|
+
* server's own words (`{ message, code? }`, the body every refusal answers), `code` its
|
|
118
|
+
* machine-readable reason (`quota_exceeded`, `model_not_allowed`, `thread_required`, …) and `body`
|
|
119
|
+
* the parsed answer, or `undefined` when it was not JSON.
|
|
120
|
+
*/
|
|
121
|
+
export declare class AgentChatHttpError extends Error {
|
|
122
|
+
readonly status: number;
|
|
123
|
+
readonly code: string | undefined;
|
|
124
|
+
readonly body: unknown;
|
|
125
|
+
constructor(status: number, message: string, code: string | undefined, body: unknown);
|
|
126
|
+
}
|
|
75
127
|
/**
|
|
76
128
|
* The server ended the run with `event: error` (agent protocol). Not a dropped connection: the run
|
|
77
129
|
* is over, so it is surfaced rather than re-attached. `code` is the server's (`quota_exceeded`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-client.d.ts","sourceRoot":"","sources":["../../../src/client/chat-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAwC,MAAM,UAAU,CAAC;AAE/F;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IACxD,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"chat-client.d.ts","sourceRoot":"","sources":["../../../src/client/chat-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,39 @@ export class AgentChatDisconnectedError extends Error {
|
|
|
16
16
|
this.parts = parts;
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* The server refused the request before any stream started — a non-2xx answer. `message` is the
|
|
21
|
+
* server's own words (`{ message, code? }`, the body every refusal answers), `code` its
|
|
22
|
+
* machine-readable reason (`quota_exceeded`, `model_not_allowed`, `thread_required`, …) and `body`
|
|
23
|
+
* the parsed answer, or `undefined` when it was not JSON.
|
|
24
|
+
*/
|
|
25
|
+
export class AgentChatHttpError extends Error {
|
|
26
|
+
status;
|
|
27
|
+
code;
|
|
28
|
+
body;
|
|
29
|
+
constructor(status, message, code, body) {
|
|
30
|
+
super(message);
|
|
31
|
+
this.name = 'AgentChatHttpError';
|
|
32
|
+
this.status = status;
|
|
33
|
+
this.code = code;
|
|
34
|
+
this.body = body;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/** Read a refused response into an {@link AgentChatHttpError}, keeping the server's words. */
|
|
38
|
+
async function httpError(response) {
|
|
39
|
+
let body;
|
|
40
|
+
try {
|
|
41
|
+
body = await response.json();
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
body = undefined;
|
|
45
|
+
}
|
|
46
|
+
const record = (typeof body === 'object' && body !== null ? body : {});
|
|
47
|
+
const message = typeof record.message === 'string' && record.message.length > 0
|
|
48
|
+
? record.message
|
|
49
|
+
: `Failed to start agent chat (HTTP ${response.status}).`;
|
|
50
|
+
return new AgentChatHttpError(response.status, message, typeof record.code === 'string' ? record.code : undefined, body);
|
|
51
|
+
}
|
|
19
52
|
/**
|
|
20
53
|
* The server ended the run with `event: error` (agent protocol). Not a dropped connection: the run
|
|
21
54
|
* is over, so it is surfaced rather than re-attached. `code` is the server's (`quota_exceeded`,
|
|
@@ -154,8 +187,24 @@ export function createAgentChatClient(options = {}) {
|
|
|
154
187
|
headers: headers({ 'Content-Type': 'application/json', Accept: 'text/event-stream' }),
|
|
155
188
|
body: JSON.stringify(body),
|
|
156
189
|
});
|
|
157
|
-
if (!response.ok
|
|
158
|
-
throw
|
|
190
|
+
if (!response.ok) {
|
|
191
|
+
throw await httpError(response);
|
|
192
|
+
}
|
|
193
|
+
if (response.status === 202) {
|
|
194
|
+
// The thread already has a turn running: the message waits in its queue, and nothing streams.
|
|
195
|
+
const queued = (await response.json());
|
|
196
|
+
if (typeof queued.threadId === 'string') {
|
|
197
|
+
sendOptions.onThreadId?.(queued.threadId);
|
|
198
|
+
}
|
|
199
|
+
return {
|
|
200
|
+
parts: [],
|
|
201
|
+
queued,
|
|
202
|
+
...(typeof queued.threadId === 'string' ? { threadId: queued.threadId } : {}),
|
|
203
|
+
...(typeof queued.runId === 'string' ? { runId: queued.runId } : {}),
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
if (!response.body) {
|
|
207
|
+
throw new Error(`Failed to start agent chat (HTTP ${response.status}): no response body.`);
|
|
159
208
|
}
|
|
160
209
|
// The provider sets these before any byte; capture the runId now so a mid-stream drop (before the
|
|
161
210
|
// `meta` frame) can still re-attach.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-client.js","sourceRoot":"","sources":["../../../src/client/chat-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiC,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"chat-client.js","sourceRoot":"","sources":["../../../src/client/chat-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { type AgentChatClient, type AgentChatClientOptions, AgentChatDisconnectedError, type AgentChatHandlers, type AgentChatRequestBody, type AgentChatResult, type AgentChatResumeOptions, type AgentChatSendOptions, AgentChatStreamError, createAgentChatClient, } from './chat-client.js';
|
|
1
|
+
export { type AgentChatClient, type AgentChatClientOptions, AgentChatDisconnectedError, type AgentChatHandlers, AgentChatHttpError, type AgentChatQueued, type AgentChatRequestBody, type AgentChatResult, type AgentChatResumeOptions, type AgentChatSendOptions, AgentChatStreamError, createAgentChatClient, } from './chat-client.js';
|
|
2
2
|
export { type ChatFrame, type ChatPart, decodeFrame, foldPart, parseSseEvent, readSseStream, type SseEvent, } from './sse.js';
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,0BAA0B,EAC1B,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,WAAW,EACX,QAAQ,EACR,aAAa,EACb,aAAa,EACb,KAAK,QAAQ,GACd,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,0BAA0B,EAC1B,KAAK,iBAAiB,EACtB,kBAAkB,EAClB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,WAAW,EACX,QAAQ,EACR,aAAa,EACb,aAAa,EACb,KAAK,QAAQ,GACd,MAAM,UAAU,CAAC"}
|
package/dist/src/client/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { AgentChatDisconnectedError, AgentChatStreamError, createAgentChatClient, } from './chat-client.js';
|
|
1
|
+
export { AgentChatDisconnectedError, AgentChatHttpError, AgentChatStreamError, createAgentChatClient, } from './chat-client.js';
|
|
2
2
|
export { decodeFrame, foldPart, parseSseEvent, readSseStream, } from './sse.js';
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,0BAA0B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,0BAA0B,EAE1B,kBAAkB,EAMlB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAGL,WAAW,EACX,QAAQ,EACR,aAAa,EACb,aAAa,GAEd,MAAM,UAAU,CAAC"}
|
package/dist/src/client/sse.d.ts
CHANGED
|
@@ -81,6 +81,11 @@ export type ChatFrame = {
|
|
|
81
81
|
export interface SseEvent {
|
|
82
82
|
event: string;
|
|
83
83
|
data: string;
|
|
84
|
+
/**
|
|
85
|
+
* The frame's `id:` — its sequence number in the run. Strictly increasing within a run, gaps
|
|
86
|
+
* allowed; `meta`, `done` and `error` carry none.
|
|
87
|
+
*/
|
|
88
|
+
id?: string;
|
|
84
89
|
}
|
|
85
90
|
/**
|
|
86
91
|
* Parses one raw SSE frame (the text between `\n\n` separators, without them) into `{event, data}`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../../src/client/sse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,mGAAmG;AACnG,MAAM,MAAM,QAAQ,GAChB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpE,gEAAgE;AAChE,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/D;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE;AACrD,qFAAqF;GACnF;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AAClD,8EAA8E;GAC5E;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE;AACtE;;;;;;;GAOG;GACD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,kBAAkB,CAAA;CAAE;AACzF;;;;GAIG;GACD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GACzF;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErB,+FAA+F;AAC/F,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../../src/client/sse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,mGAAmG;AACnG,MAAM,MAAM,QAAQ,GAChB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpE,gEAAgE;AAChE,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/D;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE;AACrD,qFAAqF;GACnF;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AAClD,8EAA8E;GAC5E;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE;AACtE;;;;;;;GAOG;GACD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,kBAAkB,CAAA;CAAE;AACzF;;;;GAIG;GACD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GACzF;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErB,+FAA+F;AAC/F,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAiB5D;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,GAAG,IAAI,CAsC7D;AAgDD;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,GAAG,QAAQ,EAAE,CAuBxE;AAED;;;;GAIG;AACH,wBAAuB,aAAa,CAAC,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,CAyB/F"}
|
package/dist/src/client/sse.js
CHANGED
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
*/
|
|
18
18
|
export function parseSseEvent(frame) {
|
|
19
19
|
let event = 'message';
|
|
20
|
+
let id;
|
|
20
21
|
const dataLines = [];
|
|
21
22
|
for (const line of frame.split('\n')) {
|
|
22
23
|
if (line.startsWith('event:')) {
|
|
@@ -25,11 +26,14 @@ export function parseSseEvent(frame) {
|
|
|
25
26
|
else if (line.startsWith('data:')) {
|
|
26
27
|
dataLines.push(line.slice('data:'.length).trim());
|
|
27
28
|
}
|
|
29
|
+
else if (line.startsWith('id:')) {
|
|
30
|
+
id = line.slice('id:'.length).trim();
|
|
31
|
+
}
|
|
28
32
|
}
|
|
29
33
|
if (dataLines.length === 0) {
|
|
30
34
|
return null;
|
|
31
35
|
}
|
|
32
|
-
return { event, data: dataLines.join('\n') };
|
|
36
|
+
return { event, data: dataLines.join('\n'), ...(id !== undefined ? { id } : {}) };
|
|
33
37
|
}
|
|
34
38
|
/**
|
|
35
39
|
* Decodes a parsed {@link SseEvent} into a typed {@link ChatFrame}, or `null` when the payload is
|