@adonis-agora/agent 0.54.0 → 0.56.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 +62 -0
- package/dist/providers/agent_provider.d.ts.map +1 -1
- package/dist/providers/agent_provider.js +139 -10
- package/dist/providers/agent_provider.js.map +1 -1
- package/dist/src/ag-ui/adapter.d.ts +26 -0
- package/dist/src/ag-ui/adapter.d.ts.map +1 -0
- package/dist/src/ag-ui/adapter.js +295 -0
- package/dist/src/ag-ui/adapter.js.map +1 -0
- package/dist/src/ag-ui/encoder.d.ts +107 -0
- package/dist/src/ag-ui/encoder.d.ts.map +1 -0
- package/dist/src/ag-ui/encoder.js +519 -0
- package/dist/src/ag-ui/encoder.js.map +1 -0
- package/dist/src/ag-ui/index.d.ts +12 -0
- package/dist/src/ag-ui/index.d.ts.map +1 -0
- package/dist/src/ag-ui/index.js +12 -0
- package/dist/src/ag-ui/index.js.map +1 -0
- package/dist/src/ag-ui/input.d.ts +72 -0
- package/dist/src/ag-ui/input.d.ts.map +1 -0
- package/dist/src/ag-ui/input.js +216 -0
- package/dist/src/ag-ui/input.js.map +1 -0
- package/dist/src/ag-ui/interrupt-id.d.ts +27 -0
- package/dist/src/ag-ui/interrupt-id.d.ts.map +1 -0
- package/dist/src/ag-ui/interrupt-id.js +42 -0
- package/dist/src/ag-ui/interrupt-id.js.map +1 -0
- package/dist/src/ag-ui/stream.d.ts +28 -0
- package/dist/src/ag-ui/stream.d.ts.map +1 -0
- package/dist/src/ag-ui/stream.js +68 -0
- package/dist/src/ag-ui/stream.js.map +1 -0
- package/dist/src/ag-ui/types.d.ts +202 -0
- package/dist/src/ag-ui/types.d.ts.map +1 -0
- package/dist/src/ag-ui/types.js +33 -0
- package/dist/src/ag-ui/types.js.map +1 -0
- package/dist/src/agent-loop.d.ts.map +1 -1
- package/dist/src/agent-loop.js +1 -0
- package/dist/src/agent-loop.js.map +1 -1
- package/dist/src/agent-service.d.ts +28 -0
- package/dist/src/agent-service.d.ts.map +1 -1
- package/dist/src/agent-service.js +58 -5
- package/dist/src/agent-service.js.map +1 -1
- package/dist/src/ai-tool-ref.d.ts +26 -4
- package/dist/src/ai-tool-ref.d.ts.map +1 -1
- package/dist/src/ai-tool-ref.js +6 -1
- package/dist/src/ai-tool-ref.js.map +1 -1
- package/dist/src/confirmed-tool.d.ts +2 -2
- package/dist/src/confirmed-tool.d.ts.map +1 -1
- package/dist/src/confirmed-tool.js.map +1 -1
- package/dist/src/define_config.d.ts +8 -0
- package/dist/src/define_config.d.ts.map +1 -1
- package/dist/src/define_config.js.map +1 -1
- package/dist/src/guardrails/agent.d.ts.map +1 -1
- package/dist/src/guardrails/agent.js +11 -0
- package/dist/src/guardrails/agent.js.map +1 -1
- package/dist/src/index.d.ts +5 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +5 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp-client/options.d.ts +12 -0
- package/dist/src/mcp-client/options.d.ts.map +1 -1
- package/dist/src/mcp-client/tool-source.d.ts.map +1 -1
- package/dist/src/mcp-client/tool-source.js +2 -0
- package/dist/src/mcp-client/tool-source.js.map +1 -1
- package/dist/src/media/index.d.ts +1 -1
- package/dist/src/media/index.d.ts.map +1 -1
- package/dist/src/media/index.js +1 -1
- package/dist/src/media/index.js.map +1 -1
- package/dist/src/media/media-attachment-staging.d.ts +107 -6
- package/dist/src/media/media-attachment-staging.d.ts.map +1 -1
- package/dist/src/media/media-attachment-staging.js +173 -21
- package/dist/src/media/media-attachment-staging.js.map +1 -1
- package/dist/src/react/ag-ui.d.ts +41 -0
- package/dist/src/react/ag-ui.d.ts.map +1 -0
- package/dist/src/react/ag-ui.js +63 -0
- package/dist/src/react/ag-ui.js.map +1 -0
- package/dist/src/react/client.d.ts +12 -0
- package/dist/src/react/client.d.ts.map +1 -0
- package/dist/src/react/client.js +21 -0
- package/dist/src/react/client.js.map +1 -0
- package/dist/src/react/index.d.ts +3 -8
- package/dist/src/react/index.d.ts.map +1 -1
- package/dist/src/react/index.js +4 -20
- package/dist/src/react/index.js.map +1 -1
- package/dist/src/react/media.d.ts +18 -0
- package/dist/src/react/media.d.ts.map +1 -0
- package/dist/src/react/media.js +18 -0
- package/dist/src/react/media.js.map +1 -0
- package/dist/src/spi/agent-store.d.ts +29 -0
- package/dist/src/spi/agent-store.d.ts.map +1 -1
- package/dist/src/spi/agent-store.js.map +1 -1
- package/dist/src/spi/attachment-staging.d.ts +5 -0
- package/dist/src/spi/attachment-staging.d.ts.map +1 -1
- package/dist/src/spi/protocol-adapter.d.ts +57 -0
- package/dist/src/spi/protocol-adapter.d.ts.map +1 -0
- package/dist/src/spi/protocol-adapter.js +2 -0
- package/dist/src/spi/protocol-adapter.js.map +1 -0
- package/dist/src/spi/tool.d.ts +24 -0
- package/dist/src/spi/tool.d.ts.map +1 -1
- package/dist/src/stores/factory.d.ts +8 -2
- package/dist/src/stores/factory.d.ts.map +1 -1
- package/dist/src/stores/factory.js +8 -2
- package/dist/src/stores/factory.js.map +1 -1
- package/dist/src/stores/lucid-schema.d.ts.map +1 -1
- package/dist/src/stores/lucid-schema.js +2 -0
- package/dist/src/stores/lucid-schema.js.map +1 -1
- package/dist/src/stores/lucid.d.ts +12 -0
- package/dist/src/stores/lucid.d.ts.map +1 -1
- package/dist/src/stores/lucid.js +48 -1
- package/dist/src/stores/lucid.js.map +1 -1
- package/dist/src/stream-events.d.ts +2 -0
- package/dist/src/stream-events.d.ts.map +1 -1
- package/dist/src/testing/in-memory-store.d.ts +7 -0
- package/dist/src/testing/in-memory-store.d.ts.map +1 -1
- package/dist/src/testing/in-memory-store.js +37 -1
- package/dist/src/testing/in-memory-store.js.map +1 -1
- package/dist/src/tool-discovery.d.ts.map +1 -1
- package/dist/src/tool-discovery.js +27 -9
- package/dist/src/tool-discovery.js.map +1 -1
- package/dist/src/tool-filters.d.ts +33 -0
- package/dist/src/tool-filters.d.ts.map +1 -0
- package/dist/src/tool-filters.js +45 -0
- package/dist/src/tool-filters.js.map +1 -0
- package/dist/src/tool-registry.d.ts +33 -5
- package/dist/src/tool-registry.d.ts.map +1 -1
- package/dist/src/tool-registry.js +55 -11
- package/dist/src/tool-registry.js.map +1 -1
- package/dist/src/types.d.ts +16 -0
- package/dist/src/types.d.ts.map +1 -1
- package/package.json +22 -3
- package/skills/agent-setup/SKILL.md +36 -0
- package/skills/agent-tools/SKILL.md +19 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/ag-ui/adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAuB,MAAM,4BAA4B,CAAC;AAevF,MAAM,WAAW,kBAAkB;IACjC,+FAA+F;IAC/F,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAcD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,eAAe,CA+I7E"}
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
import { parseRunInput, planResume, readAnswersPayload, readApprovalPayload, readContext, readForwardedProps, readUserTurn, } from './input.js';
|
|
2
|
+
import { agUiEvents, agUiSse } from './stream.js';
|
|
3
|
+
import { AG_UI_CUSTOM } from './types.js';
|
|
4
|
+
/** The surface an AG-UI resume decision is recorded as having come through. */
|
|
5
|
+
const AG_UI_VIA = 'ag-ui';
|
|
6
|
+
/** Input material the route could not use, as the events that say so. */
|
|
7
|
+
function warningEvents(warnings) {
|
|
8
|
+
return warnings.map((message) => ({
|
|
9
|
+
type: 'CUSTOM',
|
|
10
|
+
name: AG_UI_CUSTOM.warning,
|
|
11
|
+
value: { message },
|
|
12
|
+
}));
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Serve the agent over AG-UI 1.0 (https://docs.ag-ui.com/spec/1.0): the body of `POST <path>/ag-ui`
|
|
16
|
+
* is a `RunAgentInput`, the answer the run as AG-UI events. A run that stops to ask ends with the
|
|
17
|
+
* interrupt outcome and is continued by a later request carrying `resume`.
|
|
18
|
+
*
|
|
19
|
+
* ```ts
|
|
20
|
+
* import { agUiAdapter } from '@adonis-agora/agent/ag-ui'
|
|
21
|
+
*
|
|
22
|
+
* export default defineConfig({ adapters: [agUiAdapter()] })
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* Authenticated and owner-scoped exactly as `chat`, `chat/:runId/stream` and the decision routes
|
|
26
|
+
* are: it goes through the gates the provider hands every adapter.
|
|
27
|
+
*/
|
|
28
|
+
export function agUiAdapter(options = {}) {
|
|
29
|
+
const path = (options.path ?? 'ag-ui').replace(/^\/+|\/+$/g, '');
|
|
30
|
+
const quietMs = options.quietMs;
|
|
31
|
+
return {
|
|
32
|
+
name: 'ag-ui',
|
|
33
|
+
mount(host) {
|
|
34
|
+
const { service } = host;
|
|
35
|
+
const staging = host.attachments;
|
|
36
|
+
host.post(path, async (ctx) => {
|
|
37
|
+
const input = parseRunInput(ctx.request.body());
|
|
38
|
+
if (typeof input === 'string') {
|
|
39
|
+
return ctx.response.badRequest({ message: input, code: 'invalid_input' });
|
|
40
|
+
}
|
|
41
|
+
const forwarded = readForwardedProps(input.forwardedProps);
|
|
42
|
+
const agentName = forwarded.agent ?? host.defaultAgentName;
|
|
43
|
+
const actor = await host.resolveActor(ctx, agentName);
|
|
44
|
+
if (actor === null)
|
|
45
|
+
return;
|
|
46
|
+
const warnings = [];
|
|
47
|
+
if (Array.isArray(input.tools) && input.tools.length > 0) {
|
|
48
|
+
warnings.push('Frontend tools are not supported by this agent: the tools list was ignored.');
|
|
49
|
+
}
|
|
50
|
+
if (input.resume !== undefined && input.resume.length > 0) {
|
|
51
|
+
const plan = planResume(input.resume);
|
|
52
|
+
if (typeof plan === 'string') {
|
|
53
|
+
return ctx.response.badRequest({ message: plan, code: 'invalid_resume' });
|
|
54
|
+
}
|
|
55
|
+
for (const id of plan.unrecognised) {
|
|
56
|
+
warnings.push(`The resume entry ${id} answers an interrupt this agent did not raise.`);
|
|
57
|
+
}
|
|
58
|
+
const first = plan.decisions[0];
|
|
59
|
+
// A list that answers nothing this agent asked continues nothing: an ordinary run.
|
|
60
|
+
if (first !== undefined) {
|
|
61
|
+
const streamRunId = first.address.stream;
|
|
62
|
+
const owner = await service.runOwner(streamRunId);
|
|
63
|
+
if (!(await host.assertOwner(ctx, actor, owner, 'run')))
|
|
64
|
+
return;
|
|
65
|
+
if (!(await service.hasStream(streamRunId))) {
|
|
66
|
+
return ctx.response.conflict({
|
|
67
|
+
code: 'run_not_active',
|
|
68
|
+
message: 'The interrupted run is no longer waiting.',
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
if (!(await settleResume(host, ctx, actor, plan.decisions))) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
await pipe(ctx, service, streamRunId, {
|
|
75
|
+
threadId: input.threadId,
|
|
76
|
+
runId: input.runId,
|
|
77
|
+
streamRunId,
|
|
78
|
+
skip: first.address.position,
|
|
79
|
+
answered: plan.decisions.map((decision) => decision.address.toolCallId),
|
|
80
|
+
...(quietMs !== undefined ? { quietMs } : {}),
|
|
81
|
+
preamble: warningEvents(warnings),
|
|
82
|
+
});
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
const turn = readUserTurn(input.messages);
|
|
87
|
+
if (turn === null) {
|
|
88
|
+
return ctx.response.badRequest({
|
|
89
|
+
message: 'messages carries no user message to answer',
|
|
90
|
+
code: 'no_user_message',
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
warnings.push(...turn.dropped);
|
|
94
|
+
// The consumer names the conversation. A thread it already has is continued (its owner
|
|
95
|
+
// checked, as on `chat`); one nobody has is created under that name.
|
|
96
|
+
const owner = await service.threadOwner(input.threadId);
|
|
97
|
+
if (owner !== null) {
|
|
98
|
+
if (!(await host.assertOwner(ctx, actor, owner, 'thread')))
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
const refs = [];
|
|
102
|
+
for (const media of turn.media) {
|
|
103
|
+
const label = `The ${media.kind} "${media.filename}" was not used`;
|
|
104
|
+
if (staging === undefined) {
|
|
105
|
+
warnings.push(`${label}: attachments are not enabled on this agent.`);
|
|
106
|
+
}
|
|
107
|
+
else if (refs.length >= staging.maxPerMessage) {
|
|
108
|
+
warnings.push(`${label}: a message carries at most ${staging.maxPerMessage} attachments.`);
|
|
109
|
+
}
|
|
110
|
+
else if (!staging.allowedContentTypes.includes(media.contentType)) {
|
|
111
|
+
warnings.push(`${label}: ${media.contentType} is not an accepted type.`);
|
|
112
|
+
}
|
|
113
|
+
else if (media.data.length > staging.maxBytes) {
|
|
114
|
+
warnings.push(`${label}: it is larger than ${staging.maxBytes} bytes.`);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
try {
|
|
118
|
+
const staged = await staging.store.stage({
|
|
119
|
+
data: media.data,
|
|
120
|
+
filename: media.filename,
|
|
121
|
+
contentType: media.contentType,
|
|
122
|
+
sizeBytes: media.data.length,
|
|
123
|
+
actor,
|
|
124
|
+
});
|
|
125
|
+
refs.push({ mediaId: staged.mediaId });
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
warnings.push(`${label}: it could not be stored.`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
if (turn.text.trim().length === 0 && refs.length === 0) {
|
|
133
|
+
return ctx.response.badRequest({
|
|
134
|
+
message: 'the user message to answer is empty',
|
|
135
|
+
code: 'no_user_message',
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
const context = readContext(input.context);
|
|
139
|
+
const pageContext = forwarded.pageContext !== undefined || context !== undefined
|
|
140
|
+
? {
|
|
141
|
+
...forwarded.pageContext,
|
|
142
|
+
...(context !== undefined ? { agUiContext: context } : {}),
|
|
143
|
+
}
|
|
144
|
+
: undefined;
|
|
145
|
+
let started;
|
|
146
|
+
try {
|
|
147
|
+
started = await service.chat({
|
|
148
|
+
actor,
|
|
149
|
+
message: turn.text,
|
|
150
|
+
...(owner !== null ? { threadId: input.threadId } : { newThreadId: input.threadId }),
|
|
151
|
+
...(forwarded.agent !== undefined ? { agentName: forwarded.agent } : {}),
|
|
152
|
+
...(forwarded.model !== undefined ? { model: forwarded.model } : {}),
|
|
153
|
+
...(forwarded.persona !== undefined ? { personaId: forwarded.persona } : {}),
|
|
154
|
+
...(pageContext !== undefined ? { pageContext } : {}),
|
|
155
|
+
...(refs.length > 0 ? { attachments: refs } : {}),
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
if (host.refuseSend(ctx, error))
|
|
160
|
+
return;
|
|
161
|
+
throw error;
|
|
162
|
+
}
|
|
163
|
+
await pipe(ctx, service, started.runId, {
|
|
164
|
+
threadId: input.threadId,
|
|
165
|
+
runId: input.runId,
|
|
166
|
+
streamRunId: started.runId,
|
|
167
|
+
streamThreadId: started.threadId,
|
|
168
|
+
...(quietMs !== undefined ? { quietMs } : {}),
|
|
169
|
+
preamble: warningEvents(warnings),
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
},
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Deliver what a resume list decided, through the same calls the native decision routes make.
|
|
177
|
+
* Everything that can refuse — who may decide, an answer a question's rules reject, a payload that
|
|
178
|
+
* says nothing — is checked for EVERY entry before the first one is delivered, so a list with one
|
|
179
|
+
* bad entry settles nothing. Answers `false` after writing the refusal.
|
|
180
|
+
*/
|
|
181
|
+
async function settleResume(host, ctx, actor, decisions) {
|
|
182
|
+
const { service } = host;
|
|
183
|
+
const deliveries = [];
|
|
184
|
+
for (const { address, entry } of decisions) {
|
|
185
|
+
const { parked, toolCallId } = address;
|
|
186
|
+
const abandoned = entry.status === 'cancelled';
|
|
187
|
+
if (address.kind === 'approval') {
|
|
188
|
+
if (!(await host.mayDecide(ctx, actor, parked, toolCallId))) {
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
191
|
+
const decision = abandoned ? { approved: false } : readApprovalPayload(entry.payload);
|
|
192
|
+
if (decision === null) {
|
|
193
|
+
ctx.response.badRequest({
|
|
194
|
+
code: 'invalid_resume',
|
|
195
|
+
message: 'an approval is answered with { approved: boolean, reason?, remember? }',
|
|
196
|
+
});
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
deliveries.push(() => decision.approved
|
|
200
|
+
? service.approve(parked, toolCallId, {
|
|
201
|
+
executedByRef: actor.id,
|
|
202
|
+
via: AG_UI_VIA,
|
|
203
|
+
...(decision.remember !== undefined ? { remember: decision.remember } : {}),
|
|
204
|
+
})
|
|
205
|
+
: service.reject(parked, toolCallId, decision.reason ?? (abandoned ? 'abandoned' : undefined), {
|
|
206
|
+
executedByRef: actor.id,
|
|
207
|
+
via: AG_UI_VIA,
|
|
208
|
+
}));
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
const owner = await service.runOwner(parked);
|
|
212
|
+
if (!(await host.assertOwner(ctx, actor, owner, 'run')))
|
|
213
|
+
return false;
|
|
214
|
+
if (abandoned) {
|
|
215
|
+
deliveries.push(() => service.skip({
|
|
216
|
+
runId: parked,
|
|
217
|
+
toolCallId,
|
|
218
|
+
answeredByRef: actor.id,
|
|
219
|
+
answeredVia: AG_UI_VIA,
|
|
220
|
+
}));
|
|
221
|
+
continue;
|
|
222
|
+
}
|
|
223
|
+
const answers = readAnswersPayload(entry.payload);
|
|
224
|
+
if (answers === null) {
|
|
225
|
+
ctx.response.badRequest({
|
|
226
|
+
code: 'invalid_resume',
|
|
227
|
+
message: 'a question set is answered with { answers: { <questionId>: string[] } }',
|
|
228
|
+
});
|
|
229
|
+
return false;
|
|
230
|
+
}
|
|
231
|
+
const problem = await service.answerProblem(toolCallId, answers);
|
|
232
|
+
if (problem !== null) {
|
|
233
|
+
ctx.response.badRequest({ code: 'invalid_resume', message: problem });
|
|
234
|
+
return false;
|
|
235
|
+
}
|
|
236
|
+
deliveries.push(() => service.answer({
|
|
237
|
+
runId: parked,
|
|
238
|
+
toolCallId,
|
|
239
|
+
answers,
|
|
240
|
+
answeredByRef: actor.id,
|
|
241
|
+
answeredVia: AG_UI_VIA,
|
|
242
|
+
}));
|
|
243
|
+
}
|
|
244
|
+
try {
|
|
245
|
+
for (const deliver of deliveries)
|
|
246
|
+
await deliver();
|
|
247
|
+
}
|
|
248
|
+
catch (error) {
|
|
249
|
+
host.conflictOnMismatch(ctx, error);
|
|
250
|
+
return false;
|
|
251
|
+
}
|
|
252
|
+
return true;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Pipe a run to the client as AG-UI 1.0 over SSE: one event per `data:` line, from `RUN_STARTED` to
|
|
256
|
+
* the run's terminal event. It ends when the run stops to ask — the library run stays parked, and
|
|
257
|
+
* the request that answers re-attaches to it.
|
|
258
|
+
*/
|
|
259
|
+
async function pipe(ctx, service, runId, options) {
|
|
260
|
+
const raw = ctx.response.response;
|
|
261
|
+
const headers = {
|
|
262
|
+
'Content-Type': 'text/event-stream',
|
|
263
|
+
'Cache-Control': 'no-cache, no-transform',
|
|
264
|
+
Connection: 'keep-alive',
|
|
265
|
+
'X-Accel-Buffering': 'no',
|
|
266
|
+
'X-Agent-Run-Id': runId,
|
|
267
|
+
};
|
|
268
|
+
const pending = ctx.response.getHeaders();
|
|
269
|
+
for (const [name, value] of Object.entries(pending)) {
|
|
270
|
+
if (value !== undefined && !(name in headers))
|
|
271
|
+
raw.setHeader(name, value);
|
|
272
|
+
}
|
|
273
|
+
raw.writeHead(200, headers);
|
|
274
|
+
let terminal = false;
|
|
275
|
+
try {
|
|
276
|
+
for await (const event of agUiEvents(service.subscribe(runId), options)) {
|
|
277
|
+
if (event.type === 'RUN_FINISHED' || event.type === 'RUN_ERROR')
|
|
278
|
+
terminal = true;
|
|
279
|
+
raw.write(agUiSse(event));
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
catch {
|
|
283
|
+
// The stream under the run broke. The status line is long gone, so the failure travels
|
|
284
|
+
// in-stream — and says nothing of what broke, which is the server's to know.
|
|
285
|
+
if (!terminal) {
|
|
286
|
+
raw.write(agUiSse({
|
|
287
|
+
type: 'RUN_ERROR',
|
|
288
|
+
message: 'The run could not be followed.',
|
|
289
|
+
code: 'run_failed',
|
|
290
|
+
}));
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
raw.end();
|
|
294
|
+
}
|
|
295
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/ag-ui/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import type { StreamFrame } from '../spi/token-stream-sink.js';
|
|
2
|
+
import { type AgUiEvent } from './types.js';
|
|
3
|
+
export interface AgUiEncoderOptions {
|
|
4
|
+
/** The ids the consumer sent on `RunAgentInput`: every boundary event echoes them. */
|
|
5
|
+
threadId: string;
|
|
6
|
+
runId: string;
|
|
7
|
+
/** The library run whose stream is being projected (it mints interrupt ids and the `agora.run` event). */
|
|
8
|
+
streamRunId: string;
|
|
9
|
+
/** The library's thread id, when it differs from what the consumer calls the thread. */
|
|
10
|
+
streamThreadId?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Frames of the library run's stream that an earlier AG-UI run already delivered (a resume). They
|
|
13
|
+
* are fed to the encoder like any other — it has to know what they opened — but produce no events.
|
|
14
|
+
*/
|
|
15
|
+
skip?: number;
|
|
16
|
+
/**
|
|
17
|
+
* Tool calls a resuming request just answered. The run has not necessarily said so yet — a parked
|
|
18
|
+
* run takes a moment to wake — so without this the encoder would read them as still waiting and
|
|
19
|
+
* report the interrupt again before the answer had any effect.
|
|
20
|
+
*/
|
|
21
|
+
answered?: readonly string[];
|
|
22
|
+
/** Model id for the usage entry when the step frames carry none. */
|
|
23
|
+
model?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Projects one library run's stream ({@link StreamFrame}s, in buffer order) onto AG-UI 1.0 events.
|
|
27
|
+
*
|
|
28
|
+
* A pure state machine: the same frames always give the same events, which is what lets a resuming
|
|
29
|
+
* request — served by any replica — replay the run's buffer, skip what the interrupted AG-UI run
|
|
30
|
+
* already delivered, and continue. It writes nothing itself; {@link agUiEvents} drives it and
|
|
31
|
+
* decides when the run has stopped to ask.
|
|
32
|
+
*
|
|
33
|
+
* What maps where:
|
|
34
|
+
* - `text` → `TEXT_MESSAGE_*` (one message per stretch of text);
|
|
35
|
+
* - `reasoning` → a reasoning span with one reasoning message;
|
|
36
|
+
* - `step-start`/`step-finish` → `STEP_STARTED`/`STEP_FINISHED`, the step's usage folded into the
|
|
37
|
+
* run's `usage`;
|
|
38
|
+
* - `tool-input-*` → `TOOL_CALL_START`/`ARGS`/`END`; `tool-output*` → `TOOL_CALL_RESULT`;
|
|
39
|
+
* - an approval or a question set the run parks on → an `Interrupt` on the closing `RUN_FINISHED`;
|
|
40
|
+
* - `cancelled` → the cancelled outcome; an error frame → `RUN_ERROR`;
|
|
41
|
+
* - generative UI, title, queue and the native approval/elicitation frames → `CUSTOM` events named
|
|
42
|
+
* in {@link AG_UI_CUSTOM}, for what AG-UI has no event for.
|
|
43
|
+
*
|
|
44
|
+
* Not mapped: sub-agent attribution (`subagentRunId`) — a delegated agent's frames are projected
|
|
45
|
+
* flat, as the protocol allows of a producer that does not attribute.
|
|
46
|
+
*/
|
|
47
|
+
export declare class AgUiEncoder {
|
|
48
|
+
private readonly options;
|
|
49
|
+
private position;
|
|
50
|
+
private started;
|
|
51
|
+
private closed;
|
|
52
|
+
private cancelled;
|
|
53
|
+
private crossed;
|
|
54
|
+
private messageSeq;
|
|
55
|
+
private stepSeq;
|
|
56
|
+
private openText;
|
|
57
|
+
private openReasoning;
|
|
58
|
+
/** The last text message of the current step: a tool call attaches to it. */
|
|
59
|
+
private stepMessage;
|
|
60
|
+
private readonly openSteps;
|
|
61
|
+
private readonly calls;
|
|
62
|
+
private readonly pending;
|
|
63
|
+
private readonly usage;
|
|
64
|
+
constructor(options: AgUiEncoderOptions);
|
|
65
|
+
/** How many frames of the library stream this encoder has consumed. */
|
|
66
|
+
get consumed(): number;
|
|
67
|
+
/** The run is waiting on at least one approval or question set nobody has settled yet. */
|
|
68
|
+
get waiting(): boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Is anything still in flight that is NOT waiting on a person — a tool call announced and neither
|
|
71
|
+
* answered nor parked? While there is, more frames are coming without anyone's help.
|
|
72
|
+
*/
|
|
73
|
+
get busy(): boolean;
|
|
74
|
+
/** `RUN_STARTED`, and the library's own ids for the run. Call once, before the first frame. */
|
|
75
|
+
start(): AgUiEvent[];
|
|
76
|
+
/** The AG-UI events the next frame of the library stream stands for (possibly none). */
|
|
77
|
+
encode(frame: StreamFrame): AgUiEvent[];
|
|
78
|
+
/**
|
|
79
|
+
* The replayed frames are behind us: from here on events are written. The AG-UI run that delivered
|
|
80
|
+
* them closed everything it had open before it finished, so this run starts with nothing open, and
|
|
81
|
+
* what the resuming request answered is no longer waiting.
|
|
82
|
+
*/
|
|
83
|
+
private crossBoundary;
|
|
84
|
+
private get replaying();
|
|
85
|
+
private project;
|
|
86
|
+
private event;
|
|
87
|
+
/**
|
|
88
|
+
* The events that end the AG-UI run: whatever is still open is closed first, then `RUN_FINISHED`
|
|
89
|
+
* with how it ended — interrupted when the run is waiting on someone, cancelled when it was
|
|
90
|
+
* stopped, success otherwise. Nothing after a `RUN_ERROR`. `ended` says the library run's stream
|
|
91
|
+
* itself ended, rather than this reader having stopped following it.
|
|
92
|
+
*/
|
|
93
|
+
finish(ended?: boolean): AgUiEvent[];
|
|
94
|
+
private interrupts;
|
|
95
|
+
private custom;
|
|
96
|
+
private nextMessageId;
|
|
97
|
+
private textDelta;
|
|
98
|
+
private reasoningDelta;
|
|
99
|
+
private closeText;
|
|
100
|
+
private closeReasoning;
|
|
101
|
+
private closeStreams;
|
|
102
|
+
private callStart;
|
|
103
|
+
private result;
|
|
104
|
+
private addUsage;
|
|
105
|
+
private usageEntries;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=encoder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../../../src/ag-ui/encoder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAI/D,OAAO,EAGL,KAAK,SAAS,EAGf,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,kBAAkB;IACjC,sFAAsF;IACtF,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,0GAA0G;IAC1G,WAAW,EAAE,MAAM,CAAC;IACpB,wFAAwF;IACxF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA0DD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,WAAW;IAiBV,OAAO,CAAC,QAAQ,CAAC,OAAO;IAhBpC,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,aAAa,CAAqB;IAC1C,6EAA6E;IAC7E,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+B;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;IACtD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqC;IAE3D,YAA6B,OAAO,EAAE,kBAAkB,EAAI;IAE5D,uEAAuE;IACvE,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,0FAA0F;IAC1F,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;;OAGG;IACH,IAAI,IAAI,IAAI,OAAO,CAKlB;IAED,+FAA+F;IAC/F,KAAK,IAAI,SAAS,EAAE,CAmBnB;IAED,wFAAwF;IACxF,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,EAAE,CAgBtC;IAED;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAarB,OAAO,KAAK,SAAS,GAEpB;IAED,OAAO,CAAC,OAAO;IA+Ef,OAAO,CAAC,KAAK;IAgHb;;;;;OAKG;IACH,MAAM,CAAC,KAAK,UAAQ,GAAG,SAAS,EAAE,CA+BjC;IAED,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,MAAM;IA0Bd,OAAO,CAAC,QAAQ;IAsBhB,OAAO,CAAC,YAAY;CAGrB"}
|