@nylorun/runtime 0.13.0-beta → 0.14.0-beta
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 +330 -0
- package/README.md +69 -15
- package/dist/adapters/execution/restate.d.ts +7 -2
- package/dist/adapters/execution/restate.js +38 -8
- package/dist/adapters/replication/pgoutput.d.ts +16 -0
- package/dist/adapters/replication/pgoutput.js +169 -0
- package/dist/adapters/streams/s2.js +37 -20
- package/dist/admin-openapi.json +1071 -0
- package/dist/api/a2a/card.d.ts +15 -0
- package/dist/api/a2a/card.js +24 -0
- package/dist/api/a2a/endpoint.d.ts +8 -0
- package/dist/api/a2a/endpoint.js +81 -0
- package/dist/api/a2a/protocol.d.ts +144 -0
- package/dist/api/a2a/protocol.js +188 -0
- package/dist/api/a2a/routes.d.ts +19 -0
- package/dist/api/a2a/routes.js +289 -0
- package/dist/api/a2a/tasks.d.ts +50 -0
- package/dist/api/a2a/tasks.js +186 -0
- package/dist/api/ag-ui/endpoint.d.ts +8 -0
- package/dist/api/ag-ui/endpoint.js +126 -0
- package/dist/api/ag-ui/history.d.ts +7 -0
- package/dist/api/ag-ui/history.js +60 -0
- package/dist/api/ag-ui/routes.d.ts +32 -0
- package/dist/api/ag-ui/routes.js +305 -0
- package/dist/api/ag-ui/session-id.d.ts +1 -0
- package/dist/api/ag-ui/session-id.js +12 -0
- package/dist/api/ag-ui/sse.d.ts +9 -0
- package/dist/api/ag-ui/sse.js +7 -0
- package/dist/api/ag-ui/translate.d.ts +38 -0
- package/dist/api/ag-ui/translate.js +222 -0
- package/dist/api/components.d.ts +7825 -0
- package/dist/api/components.js +83 -0
- package/dist/api/http/app.d.ts +18 -0
- package/dist/api/http/app.js +58 -0
- package/dist/api/http/body.d.ts +4 -0
- package/dist/api/http/body.js +37 -0
- package/dist/api/http/define.d.ts +39 -0
- package/dist/api/http/define.js +130 -0
- package/dist/api/http/respond.d.ts +9 -0
- package/dist/api/http/respond.js +44 -0
- package/dist/api/http/routes/access.d.ts +24 -0
- package/dist/api/http/routes/access.js +259 -0
- package/dist/api/http/routes/actions.d.ts +8 -0
- package/dist/api/http/routes/actions.js +76 -0
- package/dist/api/http/routes/endpoints.d.ts +7 -0
- package/dist/api/http/routes/endpoints.js +100 -0
- package/dist/api/http/routes/sessions.d.ts +3 -0
- package/dist/api/http/routes/sessions.js +205 -0
- package/dist/api/http/routes/tenant.d.ts +10 -0
- package/dist/api/http/routes/tenant.js +172 -0
- package/dist/api/http/routes/vaults.d.ts +8 -0
- package/dist/api/http/routes/vaults.js +167 -0
- package/dist/api/openapi.d.ts +19 -0
- package/dist/api/openapi.js +138 -0
- package/dist/api/route.d.ts +12 -0
- package/dist/api/route.js +4 -0
- package/dist/core/bearer.d.ts +8 -0
- package/dist/core/bearer.js +11 -0
- package/dist/core/flow-host.d.ts +7 -15
- package/dist/core/flow-host.js +16 -41
- package/dist/core/sandbox-routes.d.ts +12 -7
- package/dist/core/sandbox-routes.js +24 -25
- package/dist/execution/memory.d.ts +8 -5
- package/dist/execution/memory.js +33 -13
- package/dist/execution/types.d.ts +38 -6
- package/dist/execution/types.js +12 -3
- package/dist/host/admin-api.d.ts +22 -0
- package/dist/host/admin-api.js +178 -0
- package/dist/host/app.d.ts +34 -0
- package/dist/host/app.js +185 -0
- package/dist/host/config-for.d.ts +2 -0
- package/dist/host/config-for.js +1 -0
- package/dist/host/config.d.ts +11 -0
- package/dist/host/cors.d.ts +27 -0
- package/dist/host/cors.js +64 -0
- package/dist/host/create-host.d.ts +31 -3
- package/dist/host/create-host.js +168 -327
- package/dist/host/http.d.ts +14 -3
- package/dist/host/http.js +64 -23
- package/dist/host/main.js +55 -4
- package/dist/host/stack-config.d.ts +20 -0
- package/dist/host/stack-config.js +55 -0
- package/dist/mcp/pool.d.ts +19 -1
- package/dist/mcp/pool.js +60 -10
- package/dist/model/catalog.d.ts +2 -10
- package/dist/model/classify.d.ts +13 -0
- package/dist/model/classify.js +61 -0
- package/dist/model/models.d.ts +10 -1
- package/dist/model/models.js +14 -6
- package/dist/model/pi-model.d.ts +17 -2
- package/dist/model/pi-model.js +366 -222
- package/dist/openapi.json +25696 -0
- package/dist/sandbox/manager.d.ts +13 -1
- package/dist/sandbox/manager.js +8 -11
- package/dist/sandbox/resolve.d.ts +33 -0
- package/dist/sandbox/resolve.js +81 -0
- package/dist/sandbox/session-sandbox.d.ts +11 -0
- package/dist/sandbox/session-sandbox.js +51 -0
- package/dist/sandbox/share.d.ts +14 -2
- package/dist/sandbox/share.js +33 -3
- package/dist/sandbox/tenant-config.d.ts +37 -0
- package/dist/sandbox/tenant-config.js +51 -0
- package/dist/sandbox/tools.d.ts +7 -9
- package/dist/sandbox/tools.js +11 -3
- package/dist/sandbox/types.d.ts +8 -2
- package/dist/store/event.d.ts +19 -0
- package/dist/store/event.js +49 -0
- package/dist/store/memory.d.ts +20 -8
- package/dist/store/memory.js +265 -100
- package/dist/store/postgres/connect.d.ts +13 -0
- package/dist/store/postgres/connect.js +5 -0
- package/dist/store/postgres/migrations/003_subject_tokens.d.ts +8 -0
- package/dist/store/postgres/migrations/003_subject_tokens.js +42 -0
- package/dist/store/postgres/migrations/004_publishable_keys.d.ts +6 -0
- package/dist/store/postgres/migrations/004_publishable_keys.js +18 -0
- package/dist/store/postgres/migrations/005_action_endpoints.d.ts +6 -0
- package/dist/store/postgres/migrations/005_action_endpoints.js +32 -0
- package/dist/store/postgres/migrations/006_drop_executors.d.ts +11 -0
- package/dist/store/postgres/migrations/006_drop_executors.js +32 -0
- package/dist/store/postgres/migrations/007_event_time.d.ts +7 -0
- package/dist/store/postgres/migrations/007_event_time.js +14 -0
- package/dist/store/postgres/migrations/008_durable_streams.d.ts +13 -0
- package/dist/store/postgres/migrations/008_durable_streams.js +35 -0
- package/dist/store/postgres/migrations/index.d.ts +5 -1
- package/dist/store/postgres/migrations/index.js +22 -2
- package/dist/store/postgres/migrations/shared/index.d.ts +31 -0
- package/dist/store/postgres/migrations/shared/index.js +92 -0
- package/dist/store/postgres/record.d.ts +11 -0
- package/dist/store/postgres/record.js +64 -0
- package/dist/store/postgres/store.js +337 -95
- package/dist/store/postgres/tenants.js +14 -0
- package/dist/store/types.d.ts +176 -81
- package/dist/streams/basin.d.ts +18 -1
- package/dist/streams/basin.js +34 -2
- package/dist/streams/control.d.ts +18 -0
- package/dist/streams/control.js +29 -0
- package/dist/streams/memory.d.ts +3 -1
- package/dist/streams/memory.js +14 -8
- package/dist/streams/relay/core.d.ts +35 -0
- package/dist/streams/relay/core.js +366 -0
- package/dist/streams/relay/memory.d.ts +69 -0
- package/dist/streams/relay/memory.js +176 -0
- package/dist/streams/relay/types.d.ts +77 -0
- package/dist/streams/relay/types.js +7 -0
- package/dist/streams/types.d.ts +66 -36
- package/dist/streams/types.js +18 -53
- package/dist/tenant/access-policy.d.ts +30 -0
- package/dist/tenant/access-policy.js +52 -0
- package/dist/tenant/actions.d.ts +10 -149
- package/dist/tenant/actions.js +5 -167
- package/dist/tenant/advance.js +32 -0
- package/dist/tenant/auth.d.ts +19 -17
- package/dist/tenant/auth.js +90 -93
- package/dist/tenant/browser.d.ts +15 -0
- package/dist/tenant/browser.js +39 -0
- package/dist/tenant/commands.d.ts +18 -2
- package/dist/tenant/commands.js +107 -113
- package/dist/tenant/context.d.ts +75 -18
- package/dist/tenant/context.js +14 -10
- package/dist/tenant/delivery-token.d.ts +41 -0
- package/dist/tenant/delivery-token.js +105 -0
- package/dist/tenant/delivery.d.ts +62 -0
- package/dist/tenant/delivery.js +476 -0
- package/dist/tenant/effects.d.ts +5 -0
- package/dist/tenant/effects.js +78 -37
- package/dist/tenant/endpoints.d.ts +67 -0
- package/dist/tenant/endpoints.js +90 -0
- package/dist/tenant/ephemeral.d.ts +6 -0
- package/dist/tenant/ephemeral.js +60 -36
- package/dist/tenant/http.d.ts +8 -9
- package/dist/tenant/http.js +13 -27
- package/dist/tenant/jwt.d.ts +16 -0
- package/dist/tenant/jwt.js +50 -0
- package/dist/tenant/module.d.ts +3 -0
- package/dist/tenant/module.js +6 -12
- package/dist/tenant/outbound.d.ts +44 -0
- package/dist/tenant/outbound.js +127 -0
- package/dist/tenant/pool.d.ts +0 -2
- package/dist/tenant/pool.js +0 -18
- package/dist/tenant/reset.d.ts +0 -4
- package/dist/tenant/reset.js +0 -5
- package/dist/tenant/runtime.d.ts +10 -20
- package/dist/tenant/runtime.js +59 -42
- package/dist/tenant/scheduler.d.ts +7 -2
- package/dist/tenant/scheduler.js +7 -3
- package/dist/tenant/session-streams.d.ts +125 -0
- package/dist/tenant/session-streams.js +399 -0
- package/dist/tenant/sessions.d.ts +28 -4
- package/dist/tenant/sessions.js +118 -24
- package/dist/tenant/signing-keys.d.ts +55 -0
- package/dist/tenant/signing-keys.js +172 -0
- package/dist/tenant/slim.d.ts +8 -0
- package/dist/tenant/slim.js +21 -0
- package/dist/tenant/status.d.ts +0 -3
- package/dist/tenant/status.js +19 -12
- package/dist/tenant/streams.d.ts +60 -67
- package/dist/tenant/streams.js +140 -208
- package/dist/tenant/subject-limits.d.ts +16 -0
- package/dist/tenant/subject-limits.js +45 -0
- package/dist/tenant/sweep.d.ts +1 -10
- package/dist/tenant/sweep.js +29 -69
- package/dist/tenant/tokens.d.ts +14 -0
- package/dist/tenant/tokens.js +178 -0
- package/dist/tenant/transcript.d.ts +48 -5
- package/dist/tenant/transcript.js +58 -1
- package/dist/tenant/types.d.ts +29 -7
- package/dist/tenant/worker.d.ts +3 -1
- package/dist/tenant/worker.js +9 -3
- package/dist/vault/service.d.ts +18 -2
- package/dist/vault/service.js +57 -13
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +20 -8
- package/dist/core/executors.d.ts +0 -44
- package/dist/core/executors.js +0 -95
- package/dist/streams/relay.d.ts +0 -37
- package/dist/streams/relay.js +0 -254
- package/dist/tenant/live.d.ts +0 -92
- package/dist/tenant/live.js +0 -290
- package/dist/tenant/routes-tenant.d.ts +0 -12
- package/dist/tenant/routes-tenant.js +0 -137
- package/dist/tenant/routes.d.ts +0 -9
- package/dist/tenant/routes.js +0 -151
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime transcript events → AG-UI 1.0 events for one run. Ids: an assistant message is its
|
|
3
|
+
* model call's `invocationId`, a tool call is the model's `callId`, a tool result is
|
|
4
|
+
* `<callId>:result`, so live runs and `messagesFromEvents` agree.
|
|
5
|
+
*/
|
|
6
|
+
import { EventType } from "@ag-ui/core";
|
|
7
|
+
import { parseTranscriptEvent, } from "@nylorun/core/contracts";
|
|
8
|
+
/** The text a tool result shows; `undefined` while there is no result yet. */
|
|
9
|
+
export function toolResultText(result) {
|
|
10
|
+
const value = result;
|
|
11
|
+
switch (value?.kind) {
|
|
12
|
+
case "completed":
|
|
13
|
+
return outputText(value.output ?? null);
|
|
14
|
+
case "failed":
|
|
15
|
+
return JSON.stringify({ error: value.code, message: value.message });
|
|
16
|
+
case "denied":
|
|
17
|
+
return JSON.stringify({ denied: true, reason: value.reason });
|
|
18
|
+
default:
|
|
19
|
+
// interaction-required and deferred: the call is still open.
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export function outputText(output) {
|
|
24
|
+
return typeof output === "string" ? output : JSON.stringify(output);
|
|
25
|
+
}
|
|
26
|
+
const none = { events: [], finished: false };
|
|
27
|
+
/** A tool result from any of the three places a call can end. */
|
|
28
|
+
export function toolResultOf(event) {
|
|
29
|
+
switch (event.type) {
|
|
30
|
+
case "action.completed": {
|
|
31
|
+
const p = event.payload;
|
|
32
|
+
if (p.kind !== "tool" || !p.callId || p.agent)
|
|
33
|
+
return undefined;
|
|
34
|
+
const content = toolResultText(p.result);
|
|
35
|
+
return content === undefined ? undefined : { callId: p.callId, content };
|
|
36
|
+
}
|
|
37
|
+
case "tool.completed": {
|
|
38
|
+
const p = event.payload;
|
|
39
|
+
if (p.agent)
|
|
40
|
+
return undefined;
|
|
41
|
+
return {
|
|
42
|
+
callId: p.callId,
|
|
43
|
+
content: p.error !== undefined
|
|
44
|
+
? JSON.stringify({ error: p.error.code, message: p.error.message })
|
|
45
|
+
: outputText(p.output ?? null),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
case "delegation.completed": {
|
|
49
|
+
// An agent used as a tool: its own work stays inside it; the parent sees the result.
|
|
50
|
+
const p = event.payload;
|
|
51
|
+
if (!p.callId)
|
|
52
|
+
return undefined;
|
|
53
|
+
const content = toolResultText(p.outcome);
|
|
54
|
+
return content === undefined ? undefined : { callId: p.callId, content };
|
|
55
|
+
}
|
|
56
|
+
default:
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
export class RunTranslator {
|
|
61
|
+
threadId;
|
|
62
|
+
runId;
|
|
63
|
+
/** Tool invocation → the model's call id, for interrupts that name the invocation. */
|
|
64
|
+
callIds = new Map();
|
|
65
|
+
closed = new Set();
|
|
66
|
+
sawAssistant;
|
|
67
|
+
/**
|
|
68
|
+
* `reattached`: the run continues from a cursor, so earlier assistant messages already
|
|
69
|
+
* reached the client and a workflow's output is not repeated as text.
|
|
70
|
+
*/
|
|
71
|
+
constructor(threadId, runId, options = {}) {
|
|
72
|
+
this.threadId = threadId;
|
|
73
|
+
this.runId = runId;
|
|
74
|
+
this.sawAssistant = options.reattached ?? false;
|
|
75
|
+
}
|
|
76
|
+
translate(raw) {
|
|
77
|
+
const event = parseTranscriptEvent(raw);
|
|
78
|
+
if (!event)
|
|
79
|
+
return none;
|
|
80
|
+
if (event.type === "action.pending" || event.type === "action.completed") {
|
|
81
|
+
const { callId, invocationId } = event.payload;
|
|
82
|
+
if (callId && invocationId)
|
|
83
|
+
this.callIds.set(invocationId, callId);
|
|
84
|
+
}
|
|
85
|
+
const result = toolResultOf(event);
|
|
86
|
+
if (result) {
|
|
87
|
+
if (this.closed.has(result.callId))
|
|
88
|
+
return none;
|
|
89
|
+
this.closed.add(result.callId);
|
|
90
|
+
return {
|
|
91
|
+
events: [
|
|
92
|
+
{
|
|
93
|
+
type: EventType.TOOL_CALL_RESULT,
|
|
94
|
+
messageId: `${result.callId}:result`,
|
|
95
|
+
toolCallId: result.callId,
|
|
96
|
+
content: result.content,
|
|
97
|
+
role: "tool",
|
|
98
|
+
},
|
|
99
|
+
],
|
|
100
|
+
finished: false,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
switch (event.type) {
|
|
104
|
+
case "message.assistant": {
|
|
105
|
+
const p = event.payload;
|
|
106
|
+
if (p.agent)
|
|
107
|
+
return none;
|
|
108
|
+
this.sawAssistant = true;
|
|
109
|
+
return { events: assistantEvents(p), finished: false };
|
|
110
|
+
}
|
|
111
|
+
case "turn.completed": {
|
|
112
|
+
const p = event.payload;
|
|
113
|
+
// Workflows finish without a model step of their own: show their output.
|
|
114
|
+
const text = this.sawAssistant || p.output === undefined || p.output === null
|
|
115
|
+
? []
|
|
116
|
+
: textEvents(raw.eventId, outputText(p.output));
|
|
117
|
+
return {
|
|
118
|
+
events: [...text, this.finished({ type: "success" }, p.output)],
|
|
119
|
+
finished: true,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
case "turn.paused": {
|
|
123
|
+
const interrupts = event.payload.interactions.map((w) => {
|
|
124
|
+
const interaction = w.interaction;
|
|
125
|
+
const toolCallId = this.callIds.get(w.invocationId);
|
|
126
|
+
return {
|
|
127
|
+
id: interaction.id,
|
|
128
|
+
reason: interaction.kind === "approval" ? "tool_approval" : "input_required",
|
|
129
|
+
...(typeof interaction.prompt === "string"
|
|
130
|
+
? { message: interaction.prompt }
|
|
131
|
+
: {}),
|
|
132
|
+
...(toolCallId ? { toolCallId } : {}),
|
|
133
|
+
...(interaction.kind === "approval"
|
|
134
|
+
? {
|
|
135
|
+
responseSchema: {
|
|
136
|
+
type: "object",
|
|
137
|
+
properties: { approved: { type: "boolean" } },
|
|
138
|
+
required: ["approved"],
|
|
139
|
+
},
|
|
140
|
+
}
|
|
141
|
+
: {}),
|
|
142
|
+
metadata: { nylorun: { kind: interaction.kind } },
|
|
143
|
+
};
|
|
144
|
+
});
|
|
145
|
+
return {
|
|
146
|
+
events: [this.finished({ type: "interrupt", interrupts })],
|
|
147
|
+
finished: true,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
case "turn.cancelled":
|
|
151
|
+
return { events: [this.finished({ type: "cancelled" })], finished: true };
|
|
152
|
+
case "turn.failed": {
|
|
153
|
+
const p = event.payload;
|
|
154
|
+
return {
|
|
155
|
+
events: [
|
|
156
|
+
{
|
|
157
|
+
type: EventType.RUN_ERROR,
|
|
158
|
+
message: p.error?.message ?? p.message ?? "The agent failed",
|
|
159
|
+
code: p.error?.code ?? "turn.failed",
|
|
160
|
+
},
|
|
161
|
+
],
|
|
162
|
+
finished: true,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
case "effect.uncertain":
|
|
166
|
+
case "action.uncertain":
|
|
167
|
+
// The Runtime cannot tell whether a side effect happened; the run goes on.
|
|
168
|
+
return {
|
|
169
|
+
events: [
|
|
170
|
+
{
|
|
171
|
+
type: EventType.CUSTOM,
|
|
172
|
+
name: "nylorun.uncertain",
|
|
173
|
+
value: event.payload,
|
|
174
|
+
},
|
|
175
|
+
],
|
|
176
|
+
finished: false,
|
|
177
|
+
};
|
|
178
|
+
default:
|
|
179
|
+
return none;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
started() {
|
|
183
|
+
return {
|
|
184
|
+
type: EventType.RUN_STARTED,
|
|
185
|
+
threadId: this.threadId,
|
|
186
|
+
runId: this.runId,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
finished(outcome, result) {
|
|
190
|
+
return {
|
|
191
|
+
type: EventType.RUN_FINISHED,
|
|
192
|
+
threadId: this.threadId,
|
|
193
|
+
runId: this.runId,
|
|
194
|
+
outcome,
|
|
195
|
+
...(result === undefined ? {} : { result }),
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
function textEvents(messageId, text) {
|
|
200
|
+
if (!text)
|
|
201
|
+
return [];
|
|
202
|
+
return [
|
|
203
|
+
{ type: EventType.TEXT_MESSAGE_START, messageId, role: "assistant" },
|
|
204
|
+
{ type: EventType.TEXT_MESSAGE_CONTENT, messageId, delta: text },
|
|
205
|
+
{ type: EventType.TEXT_MESSAGE_END, messageId },
|
|
206
|
+
];
|
|
207
|
+
}
|
|
208
|
+
function assistantEvents(p) {
|
|
209
|
+
const events = textEvents(p.invocationId, p.text);
|
|
210
|
+
for (const call of p.toolCalls)
|
|
211
|
+
events.push({
|
|
212
|
+
type: EventType.TOOL_CALL_START,
|
|
213
|
+
toolCallId: call.callId,
|
|
214
|
+
toolCallName: call.name,
|
|
215
|
+
parentMessageId: p.invocationId,
|
|
216
|
+
}, {
|
|
217
|
+
type: EventType.TOOL_CALL_ARGS,
|
|
218
|
+
toolCallId: call.callId,
|
|
219
|
+
delta: JSON.stringify(call.input ?? {}),
|
|
220
|
+
}, { type: EventType.TOOL_CALL_END, toolCallId: call.callId });
|
|
221
|
+
return events;
|
|
222
|
+
}
|