@nylorun/runtime 0.23.0-beta → 0.24.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 +148 -0
- package/README.md +79 -28
- package/dist/adapters/execution/restate.js +1 -1
- package/dist/adapters/replication/pgoutput.d.ts +2 -0
- package/dist/adapters/replication/pgoutput.js +6 -3
- package/dist/adapters/sandbox/local.d.ts +9 -1
- package/dist/adapters/sandbox/local.js +16 -4
- package/dist/adapters/sandbox/virtual.js +4 -1
- package/dist/api/a2a/endpoint.js +5 -1
- package/dist/api/a2a/routes.d.ts +2 -0
- package/dist/api/a2a/routes.js +2 -2
- package/dist/api/a2a/tasks.js +2 -1
- package/dist/api/ag-ui/endpoint.js +4 -2
- package/dist/api/ag-ui/history.js +4 -1
- package/dist/api/ag-ui/routes.d.ts +4 -1
- package/dist/api/ag-ui/routes.js +11 -10
- package/dist/api/ag-ui/translate.js +3 -2
- package/dist/api/components.d.ts +4953 -1204
- package/dist/api/components.js +25 -16
- package/dist/api/gate/keys.js +7 -1
- package/dist/api/gate/routes.d.ts +6 -0
- package/dist/api/gate/routes.js +39 -3
- package/dist/api/http/app.js +4 -4
- package/dist/api/http/define.d.ts +6 -0
- package/dist/api/http/define.js +13 -1
- package/dist/api/http/respond.js +1 -1
- package/dist/api/http/routes/artifacts.js +35 -8
- package/dist/api/http/routes/coverage.d.ts +9 -0
- package/dist/api/http/routes/coverage.js +34 -0
- package/dist/api/http/routes/environments.d.ts +11 -0
- package/dist/api/http/routes/environments.js +283 -0
- package/dist/api/http/routes/mcp.d.ts +1 -1
- package/dist/api/http/routes/mcp.js +2 -2
- package/dist/api/http/routes/me.js +1 -1
- package/dist/api/http/routes/reads.d.ts +45 -9
- package/dist/api/http/routes/reads.js +54 -5
- package/dist/api/http/routes/sessions.js +11 -6
- package/dist/api/http/routes/tenant.js +32 -10
- package/dist/api/openapi.js +31 -26
- package/dist/artifacts/disk.d.ts +59 -0
- package/dist/artifacts/disk.js +563 -0
- package/dist/artifacts/export.d.ts +1 -1
- package/dist/artifacts/export.js +2 -3
- package/dist/artifacts/folders.d.ts +6 -3
- package/dist/artifacts/folders.js +17 -12
- package/dist/artifacts/service.d.ts +2 -1
- package/dist/artifacts/service.js +6 -1
- package/dist/artifacts/workspace.d.ts +1 -1
- package/dist/artifacts/workspace.js +1 -1
- package/dist/core/flow-host.d.ts +2 -3
- package/dist/core/flow-host.js +3 -0
- package/dist/core/provider.d.ts +3 -2
- package/dist/core/provider.js +5 -37
- package/dist/core/sandbox-routes.d.ts +2 -21
- package/dist/core/sandbox-routes.js +10 -43
- package/dist/execution/types.d.ts +1 -1
- package/dist/gates/contract.d.ts +3 -24
- package/dist/gates/contract.js +1 -36
- package/dist/gates/egress-credentials.d.ts +9 -0
- package/dist/gates/egress-credentials.js +11 -4
- package/dist/gates/egress.d.ts +28 -1
- package/dist/gates/egress.js +115 -10
- package/dist/gates/fixture-model.d.ts +28 -0
- package/dist/gates/fixture-model.js +92 -0
- package/dist/gates/handler.js +4 -4
- package/dist/gates/http-tool.d.ts +6 -2
- package/dist/gates/http-tool.js +3 -5
- package/dist/gates/in-process.d.ts +5 -0
- package/dist/gates/in-process.js +12 -1
- package/dist/gates/journal.d.ts +30 -0
- package/dist/gates/journal.js +52 -0
- package/dist/gates/mcp-handler.d.ts +4 -0
- package/dist/gates/mcp-handler.js +5 -1
- package/dist/gates/meter.d.ts +10 -2
- package/dist/gates/meter.js +20 -5
- package/dist/gates/policy.d.ts +49 -0
- package/dist/gates/policy.js +134 -0
- package/dist/gates/tenant-vaults.d.ts +7 -7
- package/dist/gates/tenant-vaults.js +5 -5
- package/dist/gates/tool-calls.d.ts +10 -5
- package/dist/gates/tool-calls.js +28 -10
- package/dist/gates/tool-client.d.ts +8 -0
- package/dist/gates/tool-client.js +27 -11
- package/dist/gates/tool-contract.d.ts +10 -68
- package/dist/gates/tool-contract.js +1 -85
- package/dist/gates/tool-gate.d.ts +1 -1
- package/dist/harness/calls.d.ts +12 -5
- package/dist/harness/calls.js +21 -12
- package/dist/harness/executors.js +12 -9
- package/dist/harness/main.js +18 -5
- package/dist/harness/pod.d.ts +34 -0
- package/dist/harness/pod.js +41 -0
- package/dist/harness/service.d.ts +0 -1
- package/dist/harness/service.js +13 -5
- package/dist/harness/setup.d.ts +27 -0
- package/dist/harness/setup.js +150 -0
- package/dist/harness/ws-client.js +3 -2
- package/dist/harness/ws-port.d.ts +1 -5
- package/dist/harness/ws-port.js +1 -5
- package/dist/harness-api/in-process.js +3 -3
- package/dist/harness-api/record.d.ts +15 -1
- package/dist/harness-api/record.js +174 -44
- package/dist/harness-api/redact.d.ts +3 -0
- package/dist/harness-api/redact.js +45 -0
- package/dist/harness-api/server.d.ts +8 -0
- package/dist/harness-api/server.js +93 -13
- package/dist/harness-api/start.d.ts +10 -3
- package/dist/harness-api/start.js +40 -10
- package/dist/harness-api/tool-journal.d.ts +96 -0
- package/dist/harness-api/tool-journal.js +102 -0
- package/dist/harness-api/tool-status.d.ts +13 -0
- package/dist/harness-api/tool-status.js +26 -0
- package/dist/harness-api/workspace.d.ts +6 -3
- package/dist/harness-api/workspace.js +27 -11
- package/dist/harness-api/ws-server.d.ts +11 -3
- package/dist/harness-api/ws-server.js +94 -15
- package/dist/host/gates.d.ts +2 -1
- package/dist/host/gates.js +10 -2
- package/dist/host/main.js +54 -5
- package/dist/host/operate.js +67 -5
- package/dist/host/stack-config.d.ts +64 -0
- package/dist/host/stack-config.js +61 -1
- package/dist/keys/client.js +4 -1
- package/dist/keys/keys.d.ts +5 -5
- package/dist/keys/keys.js +5 -7
- package/dist/management-openapi.json +999 -2211
- package/dist/mcp/connect.d.ts +25 -20
- package/dist/mcp/connect.js +29 -30
- package/dist/mcp/pool.d.ts +2 -2
- package/dist/mcp/pool.js +1 -1
- package/dist/mcp/preview.d.ts +3 -3
- package/dist/mcp/preview.js +10 -20
- package/dist/mcp/snapshot.d.ts +5 -11
- package/dist/mcp/snapshot.js +6 -7
- package/dist/model/pi-model.js +8 -0
- package/dist/openapi.json +6955 -2526
- package/dist/reads/types.d.ts +16 -3
- package/dist/record/append.d.ts +3 -1
- package/dist/record/append.js +1 -0
- package/dist/record/envelope.d.ts +5 -1
- package/dist/record/envelope.js +7 -3
- package/dist/record/environment.d.ts +25 -0
- package/dist/record/environment.js +44 -0
- package/dist/record/index.d.ts +1 -1
- package/dist/record/index.js +1 -1
- package/dist/sandbox/disk-fs.d.ts +95 -0
- package/dist/sandbox/disk-fs.js +206 -0
- package/dist/sandbox/join.d.ts +17 -18
- package/dist/sandbox/join.js +42 -15
- package/dist/sandbox/manager.d.ts +16 -8
- package/dist/sandbox/manager.js +33 -17
- package/dist/sandbox/placement.d.ts +13 -12
- package/dist/sandbox/placement.js +29 -12
- package/dist/sandbox/pods/client.d.ts +6 -1
- package/dist/sandbox/pods/lifecycle.d.ts +28 -27
- package/dist/sandbox/pods/lifecycle.js +14 -26
- package/dist/sandbox/pods/reconcile.js +18 -12
- package/dist/sandbox/pods/spec.d.ts +15 -13
- package/dist/sandbox/pods/spec.js +16 -20
- package/dist/sandbox/records.d.ts +2 -2
- package/dist/sandbox/records.js +3 -3
- package/dist/sandbox/resolve.d.ts +35 -27
- package/dist/sandbox/resolve.js +66 -41
- package/dist/sandbox/session-sandbox.js +1 -1
- package/dist/sandbox/setup.d.ts +61 -0
- package/dist/sandbox/setup.js +123 -0
- package/dist/sandbox/share.d.ts +11 -21
- package/dist/sandbox/share.js +12 -41
- package/dist/sandbox/tenant-config.d.ts +12 -14
- package/dist/sandbox/tenant-config.js +12 -17
- package/dist/sandbox/types.d.ts +6 -0
- package/dist/store/postgres/drizzle/0020_environments.sql +63 -0
- package/dist/store/postgres/drizzle/0021_disk_versions.sql +7 -0
- package/dist/store/postgres/drizzle/0022_model_usage_timing.sql +5 -0
- package/dist/store/postgres/drizzle/0023_artifact_pages.sql +1 -0
- package/dist/store/postgres/drizzle/meta/_journal.json +28 -0
- package/dist/store/postgres/reads.js +117 -17
- package/dist/store/postgres/record-writer.d.ts +4 -4
- package/dist/store/postgres/record-writer.js +9 -9
- package/dist/store/postgres/record.d.ts +7 -0
- package/dist/store/postgres/record.js +23 -2
- package/dist/store/postgres/schema.d.ts +934 -761
- package/dist/store/postgres/schema.js +102 -73
- package/dist/store/postgres/store.js +119 -66
- package/dist/store/types.d.ts +109 -48
- package/dist/tenant/advance.d.ts +7 -6
- package/dist/tenant/advance.js +115 -42
- package/dist/tenant/artifact-tool.js +3 -4
- package/dist/tenant/commands.d.ts +15 -2
- package/dist/tenant/commands.js +93 -12
- package/dist/tenant/context.d.ts +48 -22
- package/dist/tenant/context.js +4 -15
- package/dist/tenant/effects.d.ts +1 -1
- package/dist/tenant/effects.js +37 -20
- package/dist/tenant/environments.d.ts +167 -0
- package/dist/tenant/environments.js +823 -0
- package/dist/tenant/harness-tokens.d.ts +21 -0
- package/dist/tenant/harness-tokens.js +61 -0
- package/dist/tenant/host-token.d.ts +1 -1
- package/dist/tenant/host-token.js +2 -4
- package/dist/tenant/identity-file.d.ts +4 -4
- package/dist/tenant/identity-file.js +17 -8
- package/dist/tenant/issuers.js +3 -3
- package/dist/tenant/principals.js +1 -1
- package/dist/tenant/reset.js +3 -3
- package/dist/tenant/runtime.d.ts +6 -1
- package/dist/tenant/runtime.js +7 -1
- package/dist/tenant/session.d.ts +3 -3
- package/dist/tenant/session.js +0 -14
- package/dist/tenant/sessions.d.ts +13 -13
- package/dist/tenant/sessions.js +61 -138
- package/dist/tenant/signing-keys.d.ts +5 -1
- package/dist/tenant/status.js +3 -3
- package/dist/tenant/sweep.js +12 -6
- package/dist/tenant/transcript.d.ts +210 -20
- package/dist/tenant/transcript.js +62 -11
- package/dist/tenant/turn-timing.d.ts +43 -0
- package/dist/tenant/turn-timing.js +39 -0
- package/dist/tenant/types.d.ts +2 -0
- package/dist/traces/ids.d.ts +42 -0
- package/dist/traces/ids.js +85 -0
- package/dist/traces/key.d.ts +6 -0
- package/dist/traces/key.js +37 -0
- package/dist/traces/map.d.ts +113 -0
- package/dist/traces/map.js +317 -0
- package/dist/traces/options.d.ts +7 -0
- package/dist/traces/options.js +1 -0
- package/dist/traces/otlp.d.ts +42 -0
- package/dist/traces/otlp.js +84 -0
- package/dist/traces/projector.d.ts +58 -0
- package/dist/traces/projector.js +200 -0
- package/dist/traces/read.d.ts +23 -0
- package/dist/traces/read.js +16 -0
- package/dist/vault/coverage.d.ts +26 -0
- package/dist/vault/coverage.js +64 -0
- package/dist/vault/error.d.ts +11 -1
- package/dist/vault/error.js +5 -1
- package/dist/vault/service.d.ts +47 -48
- package/dist/vault/service.js +321 -382
- package/dist/vault/sources.d.ts +5 -16
- package/dist/vault/sources.js +6 -8
- package/dist/version.d.ts +1 -1
- package/dist/version.js +2 -2
- package/package.json +13 -13
- package/dist/api/http/routes/sandboxes.d.ts +0 -9
- package/dist/api/http/routes/sandboxes.js +0 -153
- package/dist/api/http/routes/vaults.d.ts +0 -10
- package/dist/api/http/routes/vaults.js +0 -139
- package/dist/record/sandbox.d.ts +0 -25
- package/dist/record/sandbox.js +0 -43
- package/dist/tenant/sandboxes.d.ts +0 -123
- package/dist/tenant/sandboxes.js +0 -566
|
@@ -2,7 +2,8 @@ import { RESPONSE_ALREADY_SENT } from "@hono/node-server/utils/response";
|
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import { EventSchemas, MessageSchema, RunAgentInputSchema } from "@ag-ui/core/schemas";
|
|
4
4
|
import { readJson } from "../http/body.js";
|
|
5
|
-
import { tenantRoute } from "../http/define.js";
|
|
5
|
+
import { TraceHeaders, tenantRoute } from "../http/define.js";
|
|
6
|
+
import { traceContextOf } from "../../traces/ids.js";
|
|
6
7
|
import { jsonResponse } from "../http/respond.js";
|
|
7
8
|
import { agUiCaller, cancelRun, reattachRun, startRun, threadMessages } from "./routes.js";
|
|
8
9
|
import { sessionIdFor } from "./session-id.js";
|
|
@@ -56,11 +57,12 @@ export function agUiRoutes(api) {
|
|
|
56
57
|
required: true,
|
|
57
58
|
content: { "application/json": { schema: ref("AgUiRunAgentInput") } },
|
|
58
59
|
},
|
|
60
|
+
headers: TraceHeaders,
|
|
59
61
|
},
|
|
60
62
|
responses: { 200: events("The run's events, from RUN_STARTED to its end") },
|
|
61
63
|
}, async (c) => {
|
|
62
64
|
const { scope, subject, access } = callerOf(c);
|
|
63
|
-
await startRun(c.env.tenant, scope, c.req.param("agentId"), { subject, access }, await readJson(c.req.raw), c.env.outgoing);
|
|
65
|
+
await startRun(c.env.tenant, scope, c.req.param("agentId"), { subject, access }, await readJson(c.req.raw), c.env.outgoing, traceContextOf(c.req.raw.headers));
|
|
64
66
|
return RESPONSE_ALREADY_SENT;
|
|
65
67
|
});
|
|
66
68
|
tenantRoute(api, FOR_A_PERSON, {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { parseTranscriptEvent } from "@nylorun/core/contracts";
|
|
1
|
+
import { isEmptyAssistantMessage, parseTranscriptEvent, } from "@nylorun/core/contracts";
|
|
2
2
|
import { outputText, toolResultOf } from "./translate.js";
|
|
3
3
|
export function messagesFromEvents(items) {
|
|
4
4
|
const messages = [];
|
|
@@ -37,6 +37,9 @@ export function messagesFromEvents(items) {
|
|
|
37
37
|
});
|
|
38
38
|
continue;
|
|
39
39
|
}
|
|
40
|
+
// A step that said nothing is in the log for its timing (R7.1), never a message.
|
|
41
|
+
if (event.type === "message.assistant" && isEmptyAssistantMessage(event.payload))
|
|
42
|
+
continue;
|
|
40
43
|
if (event.type === "message.assistant" && !event.payload.agent) {
|
|
41
44
|
const p = event.payload;
|
|
42
45
|
sawAssistant = true;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ServerResponse } from "node:http";
|
|
2
2
|
import { type Message } from "@ag-ui/core";
|
|
3
3
|
import { type AuthScope, type SessionAccess, type TenantContext } from "../../tenant/context.js";
|
|
4
|
+
import type { TraceContext } from "../../traces/ids.js";
|
|
4
5
|
/**
|
|
5
6
|
* Who an AG-UI request acts for, once its agent is known: a person (an issuer token's subject,
|
|
6
7
|
* or `Nylorun-Subject`), who may use the agent; else 400, or the 404 of a missing agent.
|
|
@@ -13,7 +14,9 @@ export declare function agUiCaller(scope: AuthScope, agentId: string): {
|
|
|
13
14
|
export declare function startRun(ctx: TenantContext, scope: AuthScope, agentId: string, caller: {
|
|
14
15
|
subject: string;
|
|
15
16
|
access: SessionAccess | undefined;
|
|
16
|
-
}, body: unknown, response: ServerResponse
|
|
17
|
+
}, body: unknown, response: ServerResponse,
|
|
18
|
+
/** The request's trace context (R7.4): the turn the run starts joins the caller's trace. */
|
|
19
|
+
trace?: TraceContext): Promise<void>;
|
|
17
20
|
/** `GET …/threads/:thread/messages`: the thread's messages; none before its first run. */
|
|
18
21
|
export declare function threadMessages(ctx: TenantContext, id: string, access: SessionAccess | undefined): Promise<Message[]>;
|
|
19
22
|
/**
|
package/dist/api/ag-ui/routes.js
CHANGED
|
@@ -33,7 +33,7 @@ import { fail, HttpError } from "../../tenant/http.js";
|
|
|
33
33
|
import { observeSession, readHistory, StreamClosed, streamHolderOf, } from "../../tenant/session-streams.js";
|
|
34
34
|
import { putSession, sessionView } from "../../tenant/sessions.js";
|
|
35
35
|
import { mayUseAgent } from "../../tenant/auth.js";
|
|
36
|
-
import {
|
|
36
|
+
import { environmentGrantsOf } from "../../tenant/environments.js";
|
|
37
37
|
const HEARTBEAT_MS = 15_000;
|
|
38
38
|
const TERMINAL = new Set([
|
|
39
39
|
"turn.completed",
|
|
@@ -83,8 +83,7 @@ function sessionOptions(input, scope) {
|
|
|
83
83
|
return {};
|
|
84
84
|
const parsed = PutSessionRequestSchema.pick({
|
|
85
85
|
info: true,
|
|
86
|
-
|
|
87
|
-
credentialSelections: true,
|
|
86
|
+
environment: true,
|
|
88
87
|
})
|
|
89
88
|
.strict()
|
|
90
89
|
.safeParse(raw);
|
|
@@ -99,11 +98,11 @@ function sessionOptions(input, scope) {
|
|
|
99
98
|
});
|
|
100
99
|
return parsed.data;
|
|
101
100
|
}
|
|
102
|
-
async function accepted(ctx, id, body, scope) {
|
|
103
|
-
const result = (await command(ctx, id, body, scope));
|
|
101
|
+
async function accepted(ctx, id, body, scope, trace) {
|
|
102
|
+
const result = (await command(ctx, id, body, scope, trace ? { trace } : {}));
|
|
104
103
|
return result?.cursor ?? null;
|
|
105
104
|
}
|
|
106
|
-
async function submit(ctx, id, input, scope) {
|
|
105
|
+
async function submit(ctx, id, input, scope, trace) {
|
|
107
106
|
if (input.resume?.length) {
|
|
108
107
|
// The interaction's kind is on the session's pending view, not in its id.
|
|
109
108
|
const view = (await ctx.store.tx(async (t) => sessionView(t, await sessionOf(t, id, accessOf(scope)))));
|
|
@@ -144,7 +143,7 @@ async function submit(ctx, id, input, scope) {
|
|
|
144
143
|
requestId: randomUUID(),
|
|
145
144
|
idempotencyKey: message.id,
|
|
146
145
|
content: message.text,
|
|
147
|
-
}, scope);
|
|
146
|
+
}, scope, trace);
|
|
148
147
|
}
|
|
149
148
|
/**
|
|
150
149
|
* Streams translated events until the run ends. Closing the connection stops the read, never
|
|
@@ -229,7 +228,9 @@ export function agUiCaller(scope, agentId) {
|
|
|
229
228
|
return { subject, access: accessOf(scope) };
|
|
230
229
|
}
|
|
231
230
|
/** `POST /v1/ag-ui/agents/:agent`: start a run, and stream it on `response`. */
|
|
232
|
-
export async function startRun(ctx, scope, agentId, caller, body, response
|
|
231
|
+
export async function startRun(ctx, scope, agentId, caller, body, response,
|
|
232
|
+
/** The request's trace context (R7.4): the turn the run starts joins the caller's trace. */
|
|
233
|
+
trace) {
|
|
233
234
|
const parsed = RunAgentInputSchema.safeParse(body);
|
|
234
235
|
if (!parsed.success)
|
|
235
236
|
return fail(400, "Invalid RunAgentInput", { code: "invalid_request" });
|
|
@@ -245,12 +246,12 @@ export async function startRun(ctx, scope, agentId, caller, body, response) {
|
|
|
245
246
|
...sessionOptions(input, scope),
|
|
246
247
|
}, caller.access, {
|
|
247
248
|
createOnly: true,
|
|
248
|
-
...(
|
|
249
|
+
...(environmentGrantsOf(scope) === undefined ? {} : { environmentGrants: environmentGrantsOf(scope) }),
|
|
249
250
|
});
|
|
250
251
|
const translator = new RunTranslator(input.threadId, input.runId);
|
|
251
252
|
let cursor;
|
|
252
253
|
try {
|
|
253
|
-
cursor = await submit(ctx, id, input, scope);
|
|
254
|
+
cursor = await submit(ctx, id, input, scope, trace);
|
|
254
255
|
}
|
|
255
256
|
catch (error) {
|
|
256
257
|
// A busy session or a limit is a run that could not start, not a transport failure.
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* `<callId>:result`, so live runs and `messagesFromEvents` agree.
|
|
5
5
|
*/
|
|
6
6
|
import { EventType } from "@ag-ui/core";
|
|
7
|
-
import { parseTranscriptEvent, } from "@nylorun/core/contracts";
|
|
7
|
+
import { isEmptyAssistantMessage, parseTranscriptEvent, } from "@nylorun/core/contracts";
|
|
8
8
|
/** The text a tool result shows; `undefined` while there is no result yet. */
|
|
9
9
|
export function toolResultText(result) {
|
|
10
10
|
const value = result;
|
|
@@ -89,7 +89,8 @@ export class RunTranslator {
|
|
|
89
89
|
switch (event.type) {
|
|
90
90
|
case "message.assistant": {
|
|
91
91
|
const p = event.payload;
|
|
92
|
-
|
|
92
|
+
// A step that said nothing is in the log for its timing (R7.1), never a message.
|
|
93
|
+
if (p.agent || isEmptyAssistantMessage(p))
|
|
93
94
|
return none;
|
|
94
95
|
this.sawAssistant = true;
|
|
95
96
|
return { events: assistantEvents(p), finished: false };
|