@nylorun/runtime 0.26.0-beta → 0.28.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 +171 -0
- package/README.md +18 -14
- package/dist/adapters/execution/restate.d.ts +15 -18
- package/dist/adapters/execution/restate.js +31 -27
- package/dist/adapters/replication/pgoutput.d.ts +1 -1
- package/dist/adapters/replication/pgoutput.js +3 -2
- package/dist/adapters/sandbox/local.js +8 -5
- package/dist/adapters/sandbox/virtual.js +2 -2
- package/dist/adapters/streams/s2.d.ts +1 -1
- package/dist/adapters/streams/s2.js +18 -14
- package/dist/api/a2a/card.d.ts +4 -3
- package/dist/api/a2a/card.js +4 -4
- package/dist/api/a2a/endpoint.js +3 -4
- package/dist/api/a2a/protocol.js +4 -0
- package/dist/api/a2a/routes.d.ts +2 -6
- package/dist/api/a2a/routes.js +30 -25
- package/dist/api/ag-ui/endpoint.js +2 -3
- package/dist/api/ag-ui/routes.js +8 -11
- package/dist/api/components.d.ts +6789 -3405
- package/dist/api/components.js +43 -30
- package/dist/api/gate/keys.js +7 -4
- package/dist/api/gate/routes.d.ts +6 -2
- package/dist/api/gate/routes.js +15 -11
- package/dist/api/http/app.js +9 -4
- package/dist/api/http/body.d.ts +17 -3
- package/dist/api/http/body.js +35 -7
- package/dist/api/http/respond.js +6 -2
- package/dist/api/http/routes/access.js +5 -4
- package/dist/api/http/routes/agent-manifests.d.ts +10 -0
- package/dist/api/http/routes/agent-manifests.js +135 -0
- package/dist/api/http/routes/agents.d.ts +11 -0
- package/dist/api/http/routes/agents.js +418 -0
- package/dist/api/http/routes/artifacts.js +21 -9
- package/dist/api/http/routes/coverage.d.ts +4 -4
- package/dist/api/http/routes/coverage.js +13 -7
- package/dist/api/http/routes/files.d.ts +2 -1
- package/dist/api/http/routes/files.js +31 -5
- package/dist/api/http/routes/mcp.js +3 -3
- package/dist/api/http/routes/me.d.ts +1 -1
- package/dist/api/http/routes/me.js +1 -2
- package/dist/api/http/routes/memories.d.ts +9 -0
- package/dist/api/http/routes/memories.js +152 -0
- package/dist/api/http/routes/reads.d.ts +10 -111
- package/dist/api/http/routes/reads.js +51 -29
- package/dist/api/http/routes/sessions.js +26 -54
- package/dist/api/http/routes/tenant.d.ts +2 -2
- package/dist/api/http/routes/tenant.js +77 -24
- package/dist/api/http/routes/triggers.d.ts +10 -0
- package/dist/api/http/routes/triggers.js +180 -0
- package/dist/api/inbound-files.d.ts +3 -9
- package/dist/api/inbound-files.js +18 -24
- package/dist/api/openapi.js +73 -47
- package/dist/artifacts/disk.d.ts +10 -14
- package/dist/artifacts/disk.js +99 -95
- package/dist/artifacts/files.d.ts +13 -4
- package/dist/artifacts/files.js +27 -9
- package/dist/artifacts/folder-upload.d.ts +75 -0
- package/dist/artifacts/folder-upload.js +263 -0
- package/dist/artifacts/folders.d.ts +14 -8
- package/dist/artifacts/folders.js +19 -11
- package/dist/artifacts/links.js +7 -6
- package/dist/artifacts/parts.d.ts +9 -14
- package/dist/artifacts/parts.js +11 -9
- package/dist/artifacts/pipe.d.ts +15 -0
- package/dist/artifacts/pipe.js +71 -0
- package/dist/artifacts/quota.d.ts +36 -0
- package/dist/artifacts/quota.js +44 -0
- package/dist/artifacts/service.d.ts +25 -1
- package/dist/artifacts/service.js +72 -27
- package/dist/blob/fs.js +2 -1
- package/dist/blob/s3.d.ts +6 -2
- package/dist/blob/s3.js +9 -7
- package/dist/blob/types.d.ts +1 -1
- package/dist/blob/types.js +1 -1
- package/dist/core/flow-host.d.ts +0 -1
- package/dist/core/limits.d.ts +11 -35
- package/dist/core/limits.js +5 -73
- package/dist/core/sandbox-routes.js +0 -1
- package/dist/core/turn-manifest.d.ts +1 -2
- package/dist/core/turn-manifest.js +4 -28
- package/dist/execution/memory.d.ts +8 -5
- package/dist/execution/memory.js +8 -6
- package/dist/execution/types.d.ts +1 -6
- package/dist/execution/types.js +0 -5
- package/dist/gates/contract.d.ts +3 -2
- package/dist/gates/contract.js +1 -1
- package/dist/gates/egress-credentials.js +5 -4
- package/dist/gates/egress.d.ts +13 -13
- package/dist/gates/egress.js +19 -21
- package/dist/gates/fixture-model.js +13 -2
- package/dist/gates/handler.d.ts +1 -3
- package/dist/gates/handler.js +4 -3
- package/dist/gates/http-client.d.ts +4 -3
- package/dist/gates/http-client.js +5 -7
- package/dist/gates/http-tool.d.ts +24 -4
- package/dist/gates/http-tool.js +41 -13
- package/dist/gates/in-process.d.ts +2 -1
- package/dist/gates/in-process.js +17 -9
- package/dist/gates/inflight.d.ts +2 -2
- package/dist/gates/inflight.js +3 -2
- package/dist/gates/journal.js +5 -7
- package/dist/gates/mcp-handler.d.ts +4 -3
- package/dist/gates/mcp-handler.js +15 -5
- package/dist/gates/meter.js +6 -5
- package/dist/gates/model-gate.d.ts +11 -2
- package/dist/gates/policy.d.ts +34 -6
- package/dist/gates/policy.js +66 -18
- package/dist/gates/provider-gate.d.ts +22 -0
- package/dist/gates/provider-gate.js +30 -0
- package/dist/gates/tool-calls.d.ts +1 -3
- package/dist/gates/tool-calls.js +2 -3
- package/dist/gates/tool-client.d.ts +1 -1
- package/dist/gates/tool-client.js +5 -6
- package/dist/gates/tool-contract.d.ts +8 -5
- package/dist/gates/tool-contract.js +1 -1
- package/dist/gates/tool-gate.d.ts +18 -7
- package/dist/gates/tool-gate.js +49 -7
- package/dist/harness/calls.d.ts +27 -25
- package/dist/harness/calls.js +40 -46
- package/dist/harness/executors.d.ts +10 -3
- package/dist/harness/executors.js +53 -23
- package/dist/harness/main.js +2 -2
- package/dist/harness/pod.d.ts +2 -2
- package/dist/harness/pod.js +7 -6
- package/dist/harness/run-tokens.d.ts +4 -1
- package/dist/harness/run-tokens.js +6 -2
- package/dist/harness/service.d.ts +17 -14
- package/dist/harness/service.js +21 -35
- package/dist/harness/setup.d.ts +0 -2
- package/dist/harness/setup.js +21 -15
- package/dist/harness/ws-client.d.ts +2 -2
- package/dist/harness/ws-client.js +7 -5
- package/dist/harness/ws-port.d.ts +3 -4
- package/dist/harness/ws-port.js +3 -4
- package/dist/harness-api/artifacts.d.ts +20 -0
- package/dist/harness-api/artifacts.js +478 -0
- package/dist/harness-api/in-process.d.ts +2 -2
- package/dist/harness-api/in-process.js +18 -16
- package/dist/harness-api/record.d.ts +10 -9
- package/dist/harness-api/record.js +113 -157
- package/dist/harness-api/renew.d.ts +1 -1
- package/dist/harness-api/renew.js +2 -2
- package/dist/harness-api/server.d.ts +1 -16
- package/dist/harness-api/server.js +86 -73
- package/dist/harness-api/start.d.ts +27 -5
- package/dist/harness-api/start.js +102 -19
- package/dist/harness-api/tool-journal.d.ts +15 -10
- package/dist/harness-api/tool-journal.js +26 -24
- package/dist/harness-api/workspace.d.ts +0 -4
- package/dist/harness-api/workspace.js +4 -47
- package/dist/harness-api/ws-server.js +10 -10
- package/dist/host/create-host.js +2 -3
- package/dist/host/execution.js +2 -3
- package/dist/host/gates.d.ts +2 -9
- package/dist/host/gates.js +15 -12
- package/dist/host/http.d.ts +2 -4
- package/dist/host/http.js +5 -29
- package/dist/host/main.js +10 -3
- package/dist/host/operate.js +12 -3
- package/dist/host/stack-config.d.ts +11 -0
- package/dist/host/stack-config.js +21 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/infra/index.js +2 -1
- package/dist/infra/readiness.d.ts +0 -2
- package/dist/infra/readiness.js +4 -3
- package/dist/keys/client.d.ts +1 -0
- package/dist/keys/client.js +2 -3
- package/dist/keys/contract.d.ts +0 -2
- package/dist/keys/contract.js +0 -2
- package/dist/keys/egress-ca.d.ts +0 -2
- package/dist/keys/egress-ca.js +2 -3
- package/dist/keys/keys.d.ts +15 -4
- package/dist/keys/keys.js +22 -1
- package/dist/keys/webhooks.d.ts +25 -0
- package/dist/keys/webhooks.js +62 -0
- package/dist/keys/x509.d.ts +8 -4
- package/dist/keys/x509.js +14 -5
- package/dist/management-openapi.json +3043 -1954
- package/dist/mcp/connect.d.ts +35 -26
- package/dist/mcp/connect.js +112 -141
- package/dist/mcp/pool.d.ts +27 -22
- package/dist/mcp/pool.js +34 -48
- package/dist/mcp/preview.d.ts +12 -5
- package/dist/mcp/preview.js +43 -26
- package/dist/mcp/snapshot.d.ts +35 -86
- package/dist/mcp/snapshot.js +93 -135
- package/dist/memory/service.d.ts +97 -0
- package/dist/memory/service.js +335 -0
- package/dist/memory/tool.d.ts +36 -0
- package/dist/memory/tool.js +84 -0
- package/dist/model/auth-store.js +5 -3
- package/dist/model/capabilities.d.ts +1 -1
- package/dist/model/catalog.d.ts +9 -36
- package/dist/model/catalog.js +6 -33
- package/dist/model/descriptor.d.ts +51 -0
- package/dist/model/descriptor.js +83 -0
- package/dist/model/models.d.ts +0 -3
- package/dist/model/models.js +3 -5
- package/dist/model/native-blocks.js +1 -1
- package/dist/model/pi-model.d.ts +16 -5
- package/dist/model/pi-model.js +86 -105
- package/dist/openapi.json +13653 -9986
- package/dist/reads/cursor.js +3 -1
- package/dist/reads/types.d.ts +3 -3
- package/dist/record/agent.d.ts +27 -0
- package/dist/record/agent.js +46 -0
- package/dist/record/append.d.ts +34 -2
- package/dist/record/append.js +50 -1
- package/dist/record/index.d.ts +2 -2
- package/dist/record/index.js +2 -2
- package/dist/redact.d.ts +1 -1
- package/dist/redact.js +3 -2
- package/dist/sandbox/egress-token.d.ts +3 -3
- package/dist/sandbox/egress-token.js +3 -3
- package/dist/sandbox/join.js +8 -7
- package/dist/sandbox/manager.d.ts +41 -41
- package/dist/sandbox/manager.js +112 -44
- package/dist/sandbox/placement.d.ts +2 -2
- package/dist/sandbox/placement.js +7 -10
- package/dist/sandbox/pods/client.d.ts +1 -10
- package/dist/sandbox/pods/client.js +8 -4
- package/dist/sandbox/pods/lifecycle.d.ts +25 -17
- package/dist/sandbox/pods/lifecycle.js +51 -29
- package/dist/sandbox/pods/network-gate.d.ts +4 -5
- package/dist/sandbox/pods/network-gate.js +7 -7
- package/dist/sandbox/pods/reconcile.js +14 -3
- package/dist/sandbox/pods/spec.js +8 -5
- package/dist/sandbox/policy.d.ts +7 -1
- package/dist/sandbox/policy.js +10 -3
- package/dist/sandbox/resolve.d.ts +11 -6
- package/dist/sandbox/resolve.js +19 -9
- package/dist/sandbox/setup.d.ts +6 -2
- package/dist/sandbox/setup.js +47 -14
- package/dist/sandbox/share.d.ts +5 -14
- package/dist/sandbox/share.js +5 -34
- package/dist/sandbox/skills.d.ts +7 -13
- package/dist/sandbox/skills.js +16 -31
- package/dist/sandbox/tenant-config.d.ts +2 -2
- package/dist/sandbox/tenant-config.js +4 -3
- package/dist/sandbox/tools.d.ts +7 -1
- package/dist/sandbox/tools.js +26 -26
- package/dist/sandbox/types.d.ts +10 -3
- package/dist/sandbox/types.js +9 -0
- package/dist/store/postgres/connect.d.ts +6 -5
- package/dist/store/postgres/connect.js +14 -11
- package/dist/store/postgres/control.js +13 -13
- package/dist/store/postgres/drizzle/0028_artifact_write_keys.sql +2 -0
- package/dist/store/postgres/drizzle/0029_protocol_15.sql +11 -0
- package/dist/store/postgres/drizzle/0030_protocol_15_runtime_block.sql +11 -0
- package/dist/store/postgres/drizzle/0031_protocol_15_mcp_snapshot.sql +8 -0
- package/dist/store/postgres/drizzle/0032_agents.sql +54 -0
- package/dist/store/postgres/drizzle/0033_agent_versions.sql +7 -0
- package/dist/store/postgres/drizzle/0034_protocol_17_session_queue.sql +13 -0
- package/dist/store/postgres/drizzle/0035_t4_triggers.sql +41 -0
- package/dist/store/postgres/drizzle/0036_t5_memories.sql +30 -0
- package/dist/store/postgres/drizzle/meta/_journal.json +63 -0
- package/dist/store/postgres/reads.js +17 -82
- package/dist/store/postgres/record-writer.d.ts +4 -4
- package/dist/store/postgres/record-writer.js +9 -9
- package/dist/store/postgres/schema.d.ts +1382 -151
- package/dist/store/postgres/schema.js +191 -37
- package/dist/store/postgres/store.js +384 -105
- package/dist/store/postgres/tenant.js +1 -2
- package/dist/store/types.d.ts +172 -57
- package/dist/store/types.js +0 -1
- package/dist/streams/relay/core.d.ts +3 -3
- package/dist/streams/relay/core.js +9 -10
- package/dist/tenant/advance.js +41 -39
- package/dist/tenant/agent-manifests.d.ts +72 -0
- package/dist/tenant/agent-manifests.js +359 -0
- package/dist/tenant/agent-versions.d.ts +126 -0
- package/dist/tenant/agent-versions.js +389 -0
- package/dist/tenant/agents.d.ts +230 -0
- package/dist/tenant/{environments.js → agents.js} +493 -328
- package/dist/tenant/auth.d.ts +1 -1
- package/dist/tenant/auth.js +3 -3
- package/dist/tenant/commands.d.ts +63 -2
- package/dist/tenant/commands.js +240 -90
- package/dist/tenant/context.d.ts +57 -33
- package/dist/tenant/context.js +6 -2
- package/dist/tenant/definition-files.d.ts +25 -4
- package/dist/tenant/definition-files.js +85 -47
- package/dist/tenant/effects.js +15 -51
- package/dist/tenant/ephemeral.js +2 -1
- package/dist/tenant/history.d.ts +1 -1
- package/dist/tenant/history.js +1 -1
- package/dist/tenant/host-token.d.ts +3 -3
- package/dist/tenant/host-token.js +11 -10
- package/dist/tenant/http.d.ts +5 -8
- package/dist/tenant/http.js +9 -0
- package/dist/tenant/identity-file.d.ts +29 -6
- package/dist/tenant/identity-file.js +45 -15
- package/dist/tenant/issuers.d.ts +5 -5
- package/dist/tenant/issuers.js +34 -26
- package/dist/tenant/jwt.d.ts +8 -2
- package/dist/tenant/jwt.js +10 -2
- package/dist/tenant/limits.d.ts +87 -0
- package/dist/tenant/limits.js +172 -0
- package/dist/tenant/memories.d.ts +38 -0
- package/dist/tenant/memories.js +119 -0
- package/dist/tenant/module.d.ts +4 -1
- package/dist/tenant/module.js +9 -8
- package/dist/tenant/outbound.d.ts +11 -14
- package/dist/tenant/outbound.js +10 -15
- package/dist/tenant/reset.js +2 -2
- package/dist/tenant/run-grants.d.ts +6 -0
- package/dist/tenant/run-grants.js +7 -2
- package/dist/tenant/run-token.d.ts +0 -4
- package/dist/tenant/run-token.js +6 -11
- package/dist/tenant/runtime-limits.d.ts +24 -0
- package/dist/tenant/runtime-limits.js +27 -0
- package/dist/tenant/runtime.d.ts +1 -1
- package/dist/tenant/runtime.js +38 -43
- package/dist/tenant/session-streams.js +7 -6
- package/dist/tenant/session.d.ts +1 -1
- package/dist/tenant/session.js +1 -1
- package/dist/tenant/sessions.d.ts +28 -45
- package/dist/tenant/sessions.js +89 -209
- package/dist/tenant/signing-keys.d.ts +1 -1
- package/dist/tenant/signing-keys.js +5 -6
- package/dist/tenant/status.js +10 -10
- package/dist/tenant/streams.js +18 -20
- package/dist/tenant/sweep.d.ts +1 -21
- package/dist/tenant/sweep.js +51 -51
- package/dist/tenant/transcript.d.ts +70 -23
- package/dist/tenant/transcript.js +28 -22
- package/dist/tenant/triggers.d.ts +143 -0
- package/dist/tenant/triggers.js +715 -0
- package/dist/tenant/turn-timing.d.ts +11 -1
- package/dist/tenant/turn-timing.js +3 -1
- package/dist/tenant/types.d.ts +9 -14
- package/dist/tenant/worker.d.ts +4 -10
- package/dist/tenant/worker.js +10 -14
- package/dist/traces/ids.js +5 -1
- package/dist/traces/map.d.ts +10 -7
- package/dist/traces/map.js +16 -12
- package/dist/traces/otlp.d.ts +3 -3
- package/dist/traces/otlp.js +5 -3
- package/dist/traces/projector.d.ts +9 -4
- package/dist/traces/projector.js +13 -7
- package/dist/traces/read.js +6 -1
- package/dist/tuning.d.ts +390 -0
- package/dist/tuning.js +677 -0
- package/dist/vault/headers.js +4 -2
- package/dist/vault/service.d.ts +13 -8
- package/dist/vault/service.js +61 -17
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +13 -12
- package/dist/api/http/routes/environment-manifests.d.ts +0 -9
- package/dist/api/http/routes/environment-manifests.js +0 -118
- package/dist/api/http/routes/environments.d.ts +0 -11
- package/dist/api/http/routes/environments.js +0 -332
- package/dist/artifacts/export.d.ts +0 -8
- package/dist/artifacts/export.js +0 -204
- package/dist/artifacts/media-types.d.ts +0 -30
- package/dist/artifacts/media-types.js +0 -137
- package/dist/artifacts/workspace.d.ts +0 -60
- package/dist/artifacts/workspace.js +0 -45
- package/dist/media.d.ts +0 -10
- package/dist/media.js +0 -58
- package/dist/record/environment.d.ts +0 -25
- package/dist/record/environment.js +0 -44
- package/dist/sandbox/runtime-tools.d.ts +0 -9
- package/dist/sandbox/runtime-tools.js +0 -16
- package/dist/sandbox/session-sandbox.d.ts +0 -16
- package/dist/sandbox/session-sandbox.js +0 -77
- package/dist/tenant/artifact-tool.d.ts +0 -13
- package/dist/tenant/artifact-tool.js +0 -243
- package/dist/tenant/environment-manifests.d.ts +0 -57
- package/dist/tenant/environment-manifests.js +0 -200
- package/dist/tenant/environments.d.ts +0 -174
- package/dist/tenant/skill-tool.d.ts +0 -20
- package/dist/tenant/skill-tool.js +0 -67
- package/dist/tenant/tool-results.d.ts +0 -57
- package/dist/tenant/tool-results.js +0 -298
- package/dist/tenant/tool-search.d.ts +0 -39
- package/dist/tenant/tool-search.js +0 -103
package/dist/mcp/snapshot.js
CHANGED
|
@@ -1,20 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { delegatesOf, pluginOf, delegateManifest, mcpToolSettings, } from "@nylorun/core/define";
|
|
2
|
+
import { findServer } from "./pool.js";
|
|
3
3
|
/**
|
|
4
|
-
* The `mcp.discovered` payload: each server's outcome, with the tools it added to the snapshot
|
|
5
|
-
*
|
|
4
|
+
* The `mcp.discovered` payload: each server's outcome, with the tools it added to the snapshot
|
|
5
|
+
* that its settings in `manifest` (the session's pinned one) leave enabled, and the Agent Plugin
|
|
6
|
+
* that brought the server.
|
|
6
7
|
*/
|
|
7
8
|
export function mcpDiscovered(snapshot, diagnostics, manifest) {
|
|
8
9
|
const agents = new Map(manifest === undefined
|
|
9
10
|
? []
|
|
10
11
|
: [[undefined, manifest], ...delegatesOf(manifest).map(({ manifest: child }) => [child.id, child])]);
|
|
11
|
-
const key = (
|
|
12
|
+
const key = (agentId, serverName) => JSON.stringify([agentId ?? null, serverName]);
|
|
12
13
|
const tools = new Map();
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
tools.set(key(
|
|
16
|
-
if (tool.deferred)
|
|
17
|
-
deferred.set(key(tool), (deferred.get(key(tool)) ?? 0) + 1);
|
|
14
|
+
for (const server of snapshot.servers) {
|
|
15
|
+
const enabled = server.tools.filter((tool) => manifest === undefined || isEnabledIn(manifest, server.agentId, server.name, tool.name));
|
|
16
|
+
tools.set(key(server.agentId, server.name), enabled.length);
|
|
18
17
|
}
|
|
19
18
|
return {
|
|
20
19
|
servers: diagnostics.map((item) => ({
|
|
@@ -23,149 +22,108 @@ export function mcpDiscovered(snapshot, diagnostics, manifest) {
|
|
|
23
22
|
...withPlugin(pluginOf(agents.get(item.agentId), { server: item.serverName })),
|
|
24
23
|
outcome: item.outcome,
|
|
25
24
|
message: item.message,
|
|
26
|
-
tools: tools.get(key(item)) ?? 0,
|
|
27
|
-
...(deferred.has(key(item)) ? { deferred: deferred.get(key(item)) } : {}),
|
|
25
|
+
tools: tools.get(key(item.agentId, item.serverName)) ?? 0,
|
|
28
26
|
...(item.disabled ? { disabled: item.disabled } : {}),
|
|
29
27
|
...(item.unknownTools?.length ? { unknownTools: [...item.unknownTools] } : {}),
|
|
30
28
|
...(item.credentialIds === undefined ? {} : { credentialIds: [...item.credentialIds] }),
|
|
31
|
-
...(item.renamed?.length ? { renamed: item.renamed.map((tool) => ({ ...tool })) } : {}),
|
|
32
29
|
})),
|
|
33
30
|
};
|
|
34
31
|
}
|
|
35
32
|
function withPlugin(plugin) {
|
|
36
33
|
return plugin === undefined ? {} : { plugin };
|
|
37
34
|
}
|
|
38
|
-
/** The
|
|
39
|
-
export
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
* Bedrock and Gemini on Vertex do not. A name over 64 characters, or one that collides
|
|
44
|
-
* (`suffixed`), keeps 55 and adds `_` and 8 hex characters of the SHA-256 of the raw
|
|
45
|
-
* `server/tool`.
|
|
46
|
-
*/
|
|
47
|
-
export function normalizeToolName(serverName, serverToolName, options = {}) {
|
|
48
|
-
const name = `${serverName}__${serverToolName}`.replace(/[^A-Za-z0-9_-]/gu, "_");
|
|
49
|
-
if (name.length <= MODEL_TOOL_NAME_MAX && !options.suffixed)
|
|
50
|
-
return name;
|
|
51
|
-
const hash = createHash("sha256")
|
|
52
|
-
.update(`${serverName}/${serverToolName}`)
|
|
53
|
-
.digest("hex")
|
|
54
|
-
.slice(0, 8);
|
|
55
|
-
return `${name.slice(0, MODEL_TOOL_NAME_MAX - 9)}_${hash}`;
|
|
56
|
-
}
|
|
57
|
-
/** The names of the agent's tools: its own and those the Runtime pinned. */
|
|
58
|
-
export function declaredToolNames(manifest) {
|
|
59
|
-
return new Set([...(manifest.tools ?? []), ...(manifest.runtime?.tools ?? [])].map((tool) => tool.name));
|
|
60
|
-
}
|
|
61
|
-
/** The declaration of the server a tool of the snapshot comes from, in `manifest`. */
|
|
62
|
-
function serverOf(manifest, tool) {
|
|
63
|
-
const agent = tool.agentId === undefined ? manifest : delegateManifest(manifest, tool.agentId);
|
|
64
|
-
return agent?.mcpServers?.[tool.serverName];
|
|
35
|
+
/** The tool `tool` of server `server` of agent `agentId` (the root when absent), as discovered. */
|
|
36
|
+
export function mcpToolIn(snapshot, agentId, server, tool) {
|
|
37
|
+
return snapshot?.servers
|
|
38
|
+
.find((item) => item.agentId === agentId && item.name === server)
|
|
39
|
+
?.tools.find((item) => item.name === tool);
|
|
65
40
|
}
|
|
66
41
|
/** The tool's settings in `manifest` (R2b C9); the defaults when its server is not there. */
|
|
67
|
-
export function mcpToolSettingsIn(manifest, tool) {
|
|
68
|
-
const
|
|
69
|
-
return
|
|
42
|
+
export function mcpToolSettingsIn(manifest, agentId, server, tool) {
|
|
43
|
+
const declared = findServer(manifest, agentId, server);
|
|
44
|
+
return declared ? mcpToolSettings(declared.server, tool) : { enabled: true, approval: "never" };
|
|
45
|
+
}
|
|
46
|
+
/** True when the tool's settings in `manifest` leave it enabled (R2b C9). */
|
|
47
|
+
export function isEnabledIn(manifest, agentId, server, tool) {
|
|
48
|
+
return mcpToolSettingsIn(manifest, agentId, server, tool).enabled;
|
|
70
49
|
}
|
|
71
50
|
/**
|
|
72
|
-
* The
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
* or the Tenant's tool policy asks a person about (R5 step 2);
|
|
77
|
-
* - a deferred tool (R2b C10) is marked so, out of the model's list, and its agent gets the
|
|
78
|
-
* session tools `tool_search`, with the note on the servers it holds deferred tools of, and
|
|
79
|
-
* `tool_call`. Their names are reserved: no tool of the agent's own takes them.
|
|
80
|
-
*
|
|
81
|
-
* Nothing here changes between the steps of a turn, so neither does the model's tool list.
|
|
51
|
+
* The snapshot's facts for a turn whose manifest is `manifest` (the session's pin, or a turn
|
|
52
|
+
* variant that tightened its MCP servers' tools): each tool with whether its settings leave it
|
|
53
|
+
* `enabled` and, when they say, whether to defer it. A server the turn's manifest no longer
|
|
54
|
+
* declares is left out.
|
|
82
55
|
*/
|
|
83
|
-
export function
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
notes.set(tool.agentId, servers);
|
|
110
|
-
}
|
|
111
|
-
const session = [];
|
|
112
|
-
for (const [agentId, tools] of deferred) {
|
|
113
|
-
const servers = [...notes.get(agentId)].map(([serverName, count]) => {
|
|
114
|
-
const instructions = snapshot.servers?.find((item) => item.agentId === agentId && item.serverName === serverName)?.instructions;
|
|
115
|
-
return { serverName, tools: count, ...(instructions ? { instructions } : {}) };
|
|
116
|
-
});
|
|
117
|
-
const [search, call] = deferredToolsTools();
|
|
118
|
-
for (const tool of [
|
|
119
|
-
{ ...search, instructions: [deferredToolsInstructions(servers)] },
|
|
120
|
-
call,
|
|
121
|
-
])
|
|
122
|
-
session.push({ ...(agentId === undefined ? {} : { agentId }), ...tool });
|
|
123
|
-
session.push(...tools);
|
|
124
|
-
}
|
|
125
|
-
return [...inline, ...session];
|
|
56
|
+
export function mcpFactsOf(snapshot, manifest) {
|
|
57
|
+
return {
|
|
58
|
+
servers: snapshot.servers.flatMap((server) => {
|
|
59
|
+
if (!findServer(manifest, server.agentId, server.name))
|
|
60
|
+
return [];
|
|
61
|
+
return [
|
|
62
|
+
{
|
|
63
|
+
...(server.agentId === undefined ? {} : { agentId: server.agentId }),
|
|
64
|
+
name: server.name,
|
|
65
|
+
...(server.instructions === undefined ? {} : { instructions: server.instructions }),
|
|
66
|
+
tools: server.tools.map((tool) => {
|
|
67
|
+
const settings = mcpToolSettingsIn(manifest, server.agentId, server.name, tool.name);
|
|
68
|
+
return {
|
|
69
|
+
...tool,
|
|
70
|
+
enabled: settings.enabled,
|
|
71
|
+
...(settings.deferred === undefined ? {} : { deferred: settings.deferred }),
|
|
72
|
+
};
|
|
73
|
+
}),
|
|
74
|
+
},
|
|
75
|
+
];
|
|
76
|
+
}),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/** The manifest of the agent an effect belongs to: the root, or an agent it uses as a tool. */
|
|
80
|
+
export function manifestFor(manifest, agent) {
|
|
81
|
+
return agent ? delegateManifest(manifest, agent.id) : manifest;
|
|
126
82
|
}
|
|
127
|
-
/** The share of the model's context window past which an agent's MCP tools are deferred (Q21). */
|
|
128
|
-
export const DEFER_CONTEXT_SHARE = 0.1;
|
|
129
|
-
/** Characters per token, to estimate what tool definitions take of a context window (Q21). */
|
|
130
|
-
export const CHARS_PER_TOKEN = 4;
|
|
131
83
|
/**
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
* the
|
|
84
|
+
* `snapshot` within the Tenant's Runtime limit `mcpSnapshotBytes` (its JSON, which every
|
|
85
|
+
* `turn.start.mcp` carries): its servers in order while they fit. A server that does not is left
|
|
86
|
+
* out, so the session never offers its tools, and its diagnostic says so (`failed`, replacing
|
|
87
|
+
* the one it had). Unchanged when the whole snapshot fits.
|
|
136
88
|
*/
|
|
137
|
-
export function
|
|
138
|
-
const
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
89
|
+
export function fitSnapshot(snapshot, diagnostics, limitBytes) {
|
|
90
|
+
const bytes = (value) => Buffer.byteLength(JSON.stringify(value));
|
|
91
|
+
if (bytes(snapshot) <= limitBytes)
|
|
92
|
+
return { snapshot, diagnostics: [...diagnostics] };
|
|
93
|
+
const kept = [];
|
|
94
|
+
const dropped = new Map();
|
|
95
|
+
const key = (agentId, serverName) => JSON.stringify([agentId ?? null, serverName]);
|
|
96
|
+
for (const server of snapshot.servers) {
|
|
97
|
+
const next = { ...snapshot, servers: [...kept, server] };
|
|
98
|
+
const size = bytes(next);
|
|
99
|
+
if (size <= limitBytes)
|
|
100
|
+
kept.push(server);
|
|
101
|
+
else
|
|
102
|
+
dropped.set(key(server.agentId, server.name), bytes(server));
|
|
103
|
+
}
|
|
104
|
+
const tooLarge = (agentId, serverName, size) => ({
|
|
105
|
+
...(agentId === undefined ? {} : { agentId }),
|
|
106
|
+
serverName,
|
|
107
|
+
outcome: "failed",
|
|
108
|
+
message: `The server's tools and instructions take ${size} bytes, past what the session may pin with the rest: the Runtime limit mcpSnapshotBytes (${limitBytes} bytes; PUT /v1/tenant/limits). Its tools are not offered.`,
|
|
146
109
|
});
|
|
147
|
-
const
|
|
148
|
-
const
|
|
149
|
-
|
|
150
|
-
return defer ? { ...rest, deferred: true } : rest;
|
|
110
|
+
const out = diagnostics.map((item) => {
|
|
111
|
+
const size = dropped.get(key(item.agentId, item.serverName));
|
|
112
|
+
return size === undefined ? item : tooLarge(item.agentId, item.serverName, size);
|
|
151
113
|
});
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
export function mcpToolOf(snapshot, request, manifest) {
|
|
159
|
-
const tool = snapshot?.mcpTools.find((tool) => tool.agentId === request.agent?.id && tool.name === request.toolName);
|
|
160
|
-
if (tool && manifest && !isEnabledIn(manifest, tool))
|
|
161
|
-
return undefined;
|
|
162
|
-
return tool;
|
|
163
|
-
}
|
|
164
|
-
/** True when the tool's settings in `manifest` leave it enabled (R2b C9). */
|
|
165
|
-
export function isEnabledIn(manifest, tool) {
|
|
166
|
-
return mcpToolSettingsIn(manifest, tool).enabled;
|
|
114
|
+
for (const server of snapshot.servers) {
|
|
115
|
+
const size = dropped.get(key(server.agentId, server.name));
|
|
116
|
+
if (size !== undefined && !out.some((item) => key(item.agentId, item.serverName) === key(server.agentId, server.name)))
|
|
117
|
+
out.push(tooLarge(server.agentId, server.name, size));
|
|
118
|
+
}
|
|
119
|
+
return { snapshot: { ...snapshot, servers: kept }, diagnostics: out };
|
|
167
120
|
}
|
|
168
|
-
/**
|
|
169
|
-
export function
|
|
170
|
-
|
|
121
|
+
/** True for a snapshot of the shape this Runtime pins (`snapshotSchemaVersion` 2). */
|
|
122
|
+
export function isSnapshot(value) {
|
|
123
|
+
const snapshot = value;
|
|
124
|
+
return (typeof snapshot === "object" &&
|
|
125
|
+
snapshot !== null &&
|
|
126
|
+
snapshot.snapshotSchemaVersion === 2 &&
|
|
127
|
+
typeof snapshot.manifestHash === "string" &&
|
|
128
|
+
Array.isArray(snapshot.servers));
|
|
171
129
|
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { type MemoryOperation, type MemorySummary, type MemoryVersion, type MemoryVersionDetail, type RuntimeLimits } from "@nylorun/core/contracts";
|
|
2
|
+
import type { MemoryRow, MemoryVersionRow, Tx } from "../store/types.js";
|
|
3
|
+
/** Who makes a write: `agent:<manifest>@<n>` with its session, turn and run, or an API caller. */
|
|
4
|
+
export interface MemoryAuthor {
|
|
5
|
+
readonly actor: string;
|
|
6
|
+
readonly sessionId?: string;
|
|
7
|
+
readonly turnId?: string;
|
|
8
|
+
readonly triggerRunId?: string;
|
|
9
|
+
}
|
|
10
|
+
/** One of the `memory` tool's write commands, with Anthropic's parameters. */
|
|
11
|
+
export type MemoryCommand = {
|
|
12
|
+
readonly command: "create";
|
|
13
|
+
readonly path: string;
|
|
14
|
+
readonly fileText: string;
|
|
15
|
+
} | {
|
|
16
|
+
readonly command: "str_replace";
|
|
17
|
+
readonly path: string;
|
|
18
|
+
readonly oldStr: string;
|
|
19
|
+
readonly newStr?: string;
|
|
20
|
+
} | {
|
|
21
|
+
readonly command: "insert";
|
|
22
|
+
readonly path: string;
|
|
23
|
+
readonly insertLine: number;
|
|
24
|
+
readonly insertText: string;
|
|
25
|
+
} | {
|
|
26
|
+
readonly command: "delete";
|
|
27
|
+
readonly path: string;
|
|
28
|
+
} | {
|
|
29
|
+
readonly command: "rename";
|
|
30
|
+
readonly oldPath: string;
|
|
31
|
+
readonly newPath: string;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Why a command did not apply. `path_invalid`, `too_large` and `limit` are the Runtime's rules;
|
|
35
|
+
* the rest are Anthropic's ordinary failures (a missing path, an `old_str` that is not there or
|
|
36
|
+
* not unique, an `insert_line` out of range, a rename onto an existing path).
|
|
37
|
+
*/
|
|
38
|
+
export type MemoryRefusal = "memory.path_invalid" | "memory.too_large" | "memory.limit" | "memory.not_found" | "memory.no_match" | "memory.not_unique" | "memory.invalid_line" | "memory.exists";
|
|
39
|
+
/** A memory a command changed: its path, what changed it and its version after. */
|
|
40
|
+
export interface MemoryChange {
|
|
41
|
+
readonly path: string;
|
|
42
|
+
readonly operation: MemoryOperation;
|
|
43
|
+
readonly version: number;
|
|
44
|
+
}
|
|
45
|
+
/** A refused command or view: the code, and the text for the model. */
|
|
46
|
+
export interface MemoryRefused {
|
|
47
|
+
readonly ok: false;
|
|
48
|
+
readonly code: MemoryRefusal;
|
|
49
|
+
readonly text: string;
|
|
50
|
+
}
|
|
51
|
+
/** What a command came to: the text for the model, and the changes, or why it was refused. */
|
|
52
|
+
export type MemoryResult = {
|
|
53
|
+
readonly ok: true;
|
|
54
|
+
readonly text: string;
|
|
55
|
+
readonly changes: readonly MemoryChange[];
|
|
56
|
+
} | MemoryRefused;
|
|
57
|
+
/** What a view came to: the listing or the text, or why it was refused. */
|
|
58
|
+
export type MemoryViewResult = {
|
|
59
|
+
readonly ok: true;
|
|
60
|
+
readonly text: string;
|
|
61
|
+
} | MemoryRefused;
|
|
62
|
+
/** A new version id: increasing with time, so versions page newest first by id. */
|
|
63
|
+
export declare function newMemoryVersionId(now?: number): string;
|
|
64
|
+
export declare function sha256(text: string): string;
|
|
65
|
+
/**
|
|
66
|
+
* The tool's `view`: a memory's text with line numbers (`viewRange` `[start, end]`, 1-based,
|
|
67
|
+
* `end` -1 for the last line), or a folder's listing two levels deep with sizes. `/memories`
|
|
68
|
+
* lists even when the Agent has no memories.
|
|
69
|
+
*/
|
|
70
|
+
export declare function viewMemory(t: Tx, agentId: string, rawPath: string, viewRange?: readonly [number, number]): Promise<MemoryViewResult>;
|
|
71
|
+
interface Applied {
|
|
72
|
+
readonly t: Tx;
|
|
73
|
+
readonly agentId: string;
|
|
74
|
+
readonly author: MemoryAuthor;
|
|
75
|
+
readonly limits: Pick<RuntimeLimits, "memoryBytes" | "memoriesPerAgent">;
|
|
76
|
+
readonly now: string;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Applies one write command to Agent `agentId`'s memories in `t`, as `author`, within the
|
|
80
|
+
* Runtime limits. Access is the caller's to check. A command that changes nothing (a `create`
|
|
81
|
+
* with the same text) makes no version.
|
|
82
|
+
*/
|
|
83
|
+
export declare function applyMemoryCommand(t: Tx, agentId: string, command: MemoryCommand, author: MemoryAuthor, limits: Applied["limits"], now?: string): Promise<MemoryResult>;
|
|
84
|
+
/**
|
|
85
|
+
* The index a session pins (`turn.start.memory.index`, design §6.3): a line per memory, newest
|
|
86
|
+
* first, `- <path>`, then ` — <description>` when it has one, within `memoryIndexLines` lines and
|
|
87
|
+
* `memoryIndexBytes` bytes. `truncated` when some memories were left out; the harness tells the
|
|
88
|
+
* model to view folders for the rest.
|
|
89
|
+
*/
|
|
90
|
+
export declare function renderMemoryIndex(t: Tx, agentId: string, limits: Pick<RuntimeLimits, "memoryIndexLines" | "memoryIndexBytes">): Promise<{
|
|
91
|
+
index: string;
|
|
92
|
+
truncated: boolean;
|
|
93
|
+
}>;
|
|
94
|
+
export declare function memorySummaryOf(row: MemoryRow): MemorySummary;
|
|
95
|
+
export declare function memoryVersionOf(row: MemoryVersionRow): MemoryVersion;
|
|
96
|
+
export declare function memoryVersionDetailOf(row: MemoryVersionRow): MemoryVersionDetail;
|
|
97
|
+
export {};
|