veryfront 0.1.1289-rc.25708 → 0.1.1289-rc.25721
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/docs/README.md +1 -1
- package/docs/config.json +1 -1
- package/docs/guides/tools.md +27 -2
- package/docs/manifest.json +6 -6
- package/esm/deno.js +1 -1
- package/esm/src/agent/ag-ui/connected-local-platform-tools.d.ts.map +1 -1
- package/esm/src/agent/ag-ui/connected-local-platform-tools.js +9 -2
- package/esm/src/agent/ag-ui/tool-shared.d.ts +2 -0
- package/esm/src/agent/ag-ui/tool-shared.d.ts.map +1 -1
- package/esm/src/agent/ag-ui/tool-shared.js +7 -0
- package/esm/src/agent/hosted/chat-runtime-tool-assembly.d.ts +2 -0
- package/esm/src/agent/hosted/chat-runtime-tool-assembly.d.ts.map +1 -1
- package/esm/src/agent/hosted/chat-runtime-tool-assembly.js +18 -2
- package/esm/src/agent/hosted/child-fork-tool-sources.d.ts +1 -0
- package/esm/src/agent/hosted/child-fork-tool-sources.d.ts.map +1 -1
- package/esm/src/agent/hosted/child-fork-tool-sources.js +49 -12
- package/esm/src/agent/hosted/default-chat-runtime.d.ts.map +1 -1
- package/esm/src/agent/hosted/default-chat-runtime.js +26 -1
- package/esm/src/agent/hosted/executor-runtime-facades.d.ts.map +1 -1
- package/esm/src/agent/hosted/executor-runtime-facades.js +3 -0
- package/esm/src/agent/hosted/executor-tool-schema.d.ts.map +1 -1
- package/esm/src/agent/hosted/executor-tool-schema.js +7 -1
- package/esm/src/agent/hosted/platform-dependency-credential.d.ts.map +1 -1
- package/esm/src/agent/hosted/platform-dependency-credential.js +26 -1
- package/esm/src/agent/hosted/project-remote-tool-source.d.ts.map +1 -1
- package/esm/src/agent/hosted/project-remote-tool-source.js +18 -0
- package/esm/src/agent/hosted/terminal-credential.d.ts.map +1 -1
- package/esm/src/agent/hosted/terminal-credential.js +9 -3
- package/esm/src/agent/platform-mcp-tool-source.d.ts.map +1 -1
- package/esm/src/agent/platform-mcp-tool-source.js +4 -0
- package/esm/src/agent/project/live-studio-mcp-tools.d.ts.map +1 -1
- package/esm/src/agent/project/live-studio-mcp-tools.js +14 -2
- package/esm/src/agent/runtime/index.d.ts.map +1 -1
- package/esm/src/agent/runtime/index.js +2269 -2191
- package/esm/src/agent/runtime/mcp-server-tool-sources.d.ts +2 -0
- package/esm/src/agent/runtime/mcp-server-tool-sources.d.ts.map +1 -1
- package/esm/src/agent/runtime/mcp-server-tool-sources.js +27 -0
- package/esm/src/agent/runtime/runtime-tool-config.d.ts +1 -0
- package/esm/src/agent/runtime/runtime-tool-config.d.ts.map +1 -1
- package/esm/src/agent/runtime/runtime-tool-config.js +4 -0
- package/esm/src/agent/runtime/tool-exposure.d.ts +4 -2
- package/esm/src/agent/runtime/tool-exposure.d.ts.map +1 -1
- package/esm/src/agent/runtime/tool-exposure.js +17 -4
- package/esm/src/html/hydration-script-builder/hydration-runtime.generated.js +1 -1
- package/esm/src/internal-agents/run-stream.d.ts.map +1 -1
- package/esm/src/internal-agents/run-stream.js +95 -23
- package/esm/src/platform/compat/http/pinned-fetch.d.ts +1 -1
- package/esm/src/server/handlers/request/agent-stream.handler.d.ts +2 -0
- package/esm/src/server/handlers/request/agent-stream.handler.d.ts.map +1 -1
- package/esm/src/server/handlers/request/agent-stream.handler.js +24 -3
- package/esm/src/server/handlers/request/run-terminal-tool-source.d.ts.map +1 -1
- package/esm/src/server/handlers/request/run-terminal-tool-source.js +12 -3
- package/esm/src/tool/factory.d.ts +2 -0
- package/esm/src/tool/factory.d.ts.map +1 -1
- package/esm/src/tool/factory.js +7 -0
- package/esm/src/tool/host-tools.d.ts +2 -0
- package/esm/src/tool/host-tools.d.ts.map +1 -1
- package/esm/src/tool/host-tools.js +14 -0
- package/esm/src/tool/project-scoped-remote-tools.d.ts.map +1 -1
- package/esm/src/tool/project-scoped-remote-tools.js +12 -0
- package/esm/src/tool/registry.d.ts.map +1 -1
- package/esm/src/tool/registry.js +3 -0
- package/esm/src/tool/remote-mcp.d.ts +11 -0
- package/esm/src/tool/remote-mcp.d.ts.map +1 -1
- package/esm/src/tool/remote-mcp.js +685 -85
- package/esm/src/tool/remote-source-tools.d.ts.map +1 -1
- package/esm/src/tool/remote-source-tools.js +1 -0
- package/esm/src/tool/remote-tool-source-owner.d.ts +14 -0
- package/esm/src/tool/remote-tool-source-owner.d.ts.map +1 -0
- package/esm/src/tool/remote-tool-source-owner.js +65 -0
- package/esm/src/tool/types.d.ts +4 -0
- package/esm/src/tool/types.d.ts.map +1 -1
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +9 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-stream.handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/request/agent-stream.handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-stream.handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/request/agent-stream.handler.ts"],"names":[],"mappings":"AAqDA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,EAEL,KAAK,gBAAgB,EAEtB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAOpF,OAAO,EAIL,KAAK,+BAA+B,EACrC,MAAM,wCAAwC,CAAC;AA0BhD,OAAO,EACL,4BAA4B,EAE7B,MAAM,2CAA2C,CAAC;AAmBnD,OAAO,EAEL,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAG/B,MAAM,oCAAoC,CAAC;AAc5C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AAkCnG,OAAO,EAAE,gCAAgC,EAAE,MAAM,wCAAwC,CAAC;AAmB1F,OAAO,EAAE,gDAAgD,EAAE,MAAM,kEAAkE,CAAC;AAGpI,MAAM,WAAW,sBACf,SAAQ,yBAAyB,EAAE,+BAA+B;IAClE,4BAA4B,CAAC,EAAE,OAAO,4BAA4B,CAAC;IACnE,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,+BAA+B,CAAC,YAAY,CAAC,CAAC;IACnF,0BAA0B,CAAC,EAAE,4BAA4B,CAAC;IAC1D,gCAAgC,CAAC,EAAE,OAAO,gCAAgC,CAAC;IAC3E,gDAAgD,CAAC,EAC/C,OAAO,gDAAgD,CAAC;IAC1D,sBAAsB,CAAC,EAAE,CACvB,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KACvD,OAAO,CAAC,OAAO,CAAC,CAAC;CACvB;AAED,KAAK,yBAAyB,GAAG,IAAI,CACnC,0BAA0B,EACxB,mBAAmB,GACnB,4BAA4B,GAC5B,uBAAuB,GACvB,wBAAwB,GACxB,2BAA2B,GAC3B,sBAAsB,CACzB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG,CACzC,GAAG,EAAE,cAAc,EACnB,aAAa,EAAE,yBAAyB,EACxC,cAAc,EAAE,yBAAyB,EACzC,YAAY,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAubrC;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC,GAAG,OAAO,CAGV;AAkCD,wBAAsB,gCAAgC,CAAC,KAAK,EAAE;IAC5D,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,8FAA8F;IAC9F,6BAA6B,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClD,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,iCAAiC,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACvE,iBAAiB,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5D,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,4FAA4F;IAC5F,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,gBAAgB,CAAC;CACtE,GAAG,OAAO,CAAC,KAAK,CAAC,CA8JjB;AA6rBD,qBAAa,kBAAmB,SAAQ,WAAW;IASrC,OAAO,CAAC,QAAQ,CAAC,IAAI;IARjC,QAAQ,EAAE,eAAe,CAMvB;gBAE2B,IAAI,GAAE,sBAAoC;IAIvE,OAAO,CAAC,sBAAsB;IAuBxB,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAskBvE,OAAO,CAAC,sBAAsB;CAuE/B"}
|
|
@@ -15,6 +15,7 @@ import { runWithRegistryScopeNamespace, tryGetRegistryScopeId, } from "../../../
|
|
|
15
15
|
import { clearRegistryScope } from "../../../registry/project-scoped-registry-manager.js";
|
|
16
16
|
import { clearTranspileCacheForNamespace } from "../../../discovery/transpiler.js";
|
|
17
17
|
import { withResponseCleanup } from "./response-cleanup.js";
|
|
18
|
+
import { createRemoteToolSourceOwner } from "../../../tool/remote-tool-source-owner.js";
|
|
18
19
|
import { clearProjectDiscoveryCacheForScope } from "./api/project-discovery.js";
|
|
19
20
|
import { resolveVisibleRegistryTool } from "../../../agent/runtime/tool-helpers.js";
|
|
20
21
|
import { createRemoteMCPToolSource, } from "../../../tool/index.js";
|
|
@@ -459,11 +460,13 @@ export async function withVeryfrontPlatformRemoteTools(input) {
|
|
|
459
460
|
const apiUrl = input.fileWriterToken
|
|
460
461
|
? resolveHostOwnedSourceApiBaseUrl()
|
|
461
462
|
: resolveVeryfrontApiBaseUrlFromHostEnv();
|
|
462
|
-
const
|
|
463
|
+
const createdPlatformSource = createRunPlatformToolSource({
|
|
463
464
|
id: VERYFRONT_API_MCP_SOURCE_ID,
|
|
464
465
|
endpoint: `${apiUrl}/mcp`,
|
|
465
466
|
headers: { Authorization: `Bearer ${input.token}` },
|
|
466
467
|
}, input.terminalAuthority ?? null, undefined, input.fileWriterToken ? { apiBaseUrl: apiUrl, token: input.fileWriterToken } : null);
|
|
468
|
+
const platformRemoteToolSource = input.ownRemoteToolSource?.(createdPlatformSource) ??
|
|
469
|
+
createdPlatformSource;
|
|
467
470
|
let platformToolDefinitions = null;
|
|
468
471
|
try {
|
|
469
472
|
platformToolDefinitions = await platformRemoteToolSource.listTools({
|
|
@@ -654,6 +657,7 @@ async function withExplicitVeryfrontStudioRemoteTools(input) {
|
|
|
654
657
|
const studioRemoteToolSources = [];
|
|
655
658
|
const broadStudioToolNames = new Set();
|
|
656
659
|
const resolvedStudioSources = [];
|
|
660
|
+
const ownStudioSource = (source) => input.ownRemoteToolSource?.(source) ?? source;
|
|
657
661
|
for (const server of configuredServers) {
|
|
658
662
|
const remoteConfig = createAgentServiceRemoteMcpConfig({
|
|
659
663
|
server,
|
|
@@ -670,7 +674,7 @@ async function withExplicitVeryfrontStudioRemoteTools(input) {
|
|
|
670
674
|
resolvedStudioSources.push({
|
|
671
675
|
policy: createMcpToolPolicyGate(withPlatformMcpPolicyAliases(server.toolPolicy)),
|
|
672
676
|
remoteConfig,
|
|
673
|
-
source: createLivePlatformMcpSource(createRemoteMCPToolSource(remoteConfig), {
|
|
677
|
+
source: createLivePlatformMcpSource(ownStudioSource(createRemoteMCPToolSource(remoteConfig)), {
|
|
674
678
|
runId: input.currentRunId,
|
|
675
679
|
runIdBindsToolAuthorization: true,
|
|
676
680
|
}),
|
|
@@ -1058,6 +1062,17 @@ export class AgentStreamHandler extends BaseHandler {
|
|
|
1058
1062
|
return this.respond(buildRuntimeShuttingDownResponse(this.createResponseBuilder(ctx)));
|
|
1059
1063
|
}
|
|
1060
1064
|
let pendingRecovery;
|
|
1065
|
+
// Platform MCP sources created for this run negotiate sessions that must be
|
|
1066
|
+
// released when its response ends, or here if no response takes them over.
|
|
1067
|
+
const platformSources = createRemoteToolSourceOwner();
|
|
1068
|
+
let platformSourcesReleaseDeferred = false;
|
|
1069
|
+
const releasePlatformSources = () => {
|
|
1070
|
+
platformSources.dispose().catch((cleanupError) => {
|
|
1071
|
+
logger.warn("Platform MCP session cleanup failed", {
|
|
1072
|
+
errorName: cleanupError instanceof Error ? cleanupError.name : typeof cleanupError,
|
|
1073
|
+
});
|
|
1074
|
+
});
|
|
1075
|
+
};
|
|
1061
1076
|
const builder = this.createResponseBuilder(ctx)
|
|
1062
1077
|
.withCORS(req, ctx.securityConfig?.cors)
|
|
1063
1078
|
.withSecurity(ctx.securityConfig ?? undefined, req);
|
|
@@ -1268,6 +1283,7 @@ export class AgentStreamHandler extends BaseHandler {
|
|
|
1268
1283
|
terminalAuthority: terminalToken && payload.credentials?.authToken
|
|
1269
1284
|
? { token: terminalToken, runId: payload.runId }
|
|
1270
1285
|
: null,
|
|
1286
|
+
ownRemoteToolSource: (source) => platformSources.own(source),
|
|
1271
1287
|
});
|
|
1272
1288
|
await assertRecoveryActive();
|
|
1273
1289
|
const runtimeAgent = await withExplicitVeryfrontStudioRemoteTools({
|
|
@@ -1279,6 +1295,7 @@ export class AgentStreamHandler extends BaseHandler {
|
|
|
1279
1295
|
forwardedProps: runtimeInput.forwardedProps,
|
|
1280
1296
|
availableToolNames: runtimeInput.tools.map((tool) => tool.name),
|
|
1281
1297
|
conversationId: runtimeInput.threadId,
|
|
1298
|
+
ownRemoteToolSource: (source) => platformSources.own(source),
|
|
1282
1299
|
});
|
|
1283
1300
|
// The remote-tool wrappers clone the agent; keep its
|
|
1284
1301
|
// markdown definition so fail-closed selectors survive.
|
|
@@ -1338,7 +1355,7 @@ export class AgentStreamHandler extends BaseHandler {
|
|
|
1338
1355
|
return await runWithProjectEnv(agentEnv, runAgentStream);
|
|
1339
1356
|
};
|
|
1340
1357
|
await assertRecoveryActive();
|
|
1341
|
-
let response = await executeStream();
|
|
1358
|
+
let response = withResponseCleanup(await executeStream(), releasePlatformSources, req.signal);
|
|
1342
1359
|
if (isSuccessfulAgentEventStream(response)) {
|
|
1343
1360
|
response = setResponseHeaders(response, [
|
|
1344
1361
|
[RUNTIME_ID_HEADER, runtimeIdentity.id],
|
|
@@ -1361,6 +1378,8 @@ export class AgentStreamHandler extends BaseHandler {
|
|
|
1361
1378
|
runtimeOwnerInvokeUrl,
|
|
1362
1379
|
]])
|
|
1363
1380
|
: response;
|
|
1381
|
+
// The response body now owns the release.
|
|
1382
|
+
platformSourcesReleaseDeferred = true;
|
|
1364
1383
|
return this.respond(applyBuilderHeaders(responseWithOwner, builder.headers));
|
|
1365
1384
|
};
|
|
1366
1385
|
let sharedRegistryScope = null;
|
|
@@ -1478,6 +1497,8 @@ export class AgentStreamHandler extends BaseHandler {
|
|
|
1478
1497
|
return this.respondToStreamFailure(error_, req, ctx, builder);
|
|
1479
1498
|
}
|
|
1480
1499
|
finally {
|
|
1500
|
+
if (!platformSourcesReleaseDeferred)
|
|
1501
|
+
releasePlatformSources();
|
|
1481
1502
|
if (pendingRecovery) {
|
|
1482
1503
|
const { runId, session } = pendingRecovery;
|
|
1483
1504
|
this.deps.sessionManager.cancelRun(runId, session.signal);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-terminal-tool-source.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/request/run-terminal-tool-source.ts"],"names":[],"mappings":"AAeA,OAAO,EAEL,KAAK,yBAAyB,EAC/B,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"run-terminal-tool-source.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/request/run-terminal-tool-source.ts"],"names":[],"mappings":"AAeA,OAAO,EAEL,KAAK,yBAAyB,EAC/B,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAQ/D;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,yBAAyB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,EACvE,QAAQ,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,EACjD,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,yBAAyB,KAAK,gBAAgB,EACtE,UAAU,GAAE;IAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAW,GAChF,gBAAgB,CA6ElB"}
|
|
@@ -5,6 +5,8 @@ import { computeHash } from "../../../utils/hash-utils.js";
|
|
|
5
5
|
import { terminalRoute } from "../../../agent/conversation/terminal-route.js";
|
|
6
6
|
import { bindTerminalRunResponseIdentity, hasCurrentTerminalRunCredentialAuthority, isTerminalRunToolName, RUN_TERMINAL_TOOL_CALL_ID_HEADER, terminalToolCallIdHeaderValue, } from "../../../agent/runtime/terminal-run-control.js";
|
|
7
7
|
import { createRemoteMCPToolSourceFactoryWithTransport, } from "../../../tool/index.js";
|
|
8
|
+
import { shareRemoteMCPProtocolState } from "../../../tool/remote-mcp.js";
|
|
9
|
+
import { disposeRemoteToolSources } from "../../../tool/remote-tool-source-owner.js";
|
|
8
10
|
import { INGRESS_RUN_EVENT_TOKEN_HEADER, INGRESS_RUN_TERMINAL_TOKEN_HEADER, } from "../../../security/http/ingress-credentials.js";
|
|
9
11
|
/**
|
|
10
12
|
* Builds the platform MCP source for one control-plane run. The API-minted
|
|
@@ -18,7 +20,10 @@ export function createRunPlatformToolSource(config, terminal, createSource, file
|
|
|
18
20
|
trustedEndpoints: [`${hostApi}/mcp`],
|
|
19
21
|
requestFetch: createVeryfrontApiOriginBoundOutboundFetch(hostApi),
|
|
20
22
|
});
|
|
21
|
-
|
|
23
|
+
// Only the ordinary source runs discovery; the credential-specialized
|
|
24
|
+
// sources reuse the protocol and header annotations it records.
|
|
25
|
+
const shared = shareRemoteMCPProtocolState(config);
|
|
26
|
+
const ordinary = createSource(shared);
|
|
22
27
|
let mutationSource = null;
|
|
23
28
|
if (fileWriter) {
|
|
24
29
|
const trustedApi = requireHostPrivateApiHttps(fileWriter.apiBaseUrl);
|
|
@@ -26,7 +31,7 @@ export function createRunPlatformToolSource(config, terminal, createSource, file
|
|
|
26
31
|
throw new TypeError("Canonical mutation authority requires the trusted API MCP endpoint");
|
|
27
32
|
}
|
|
28
33
|
mutationSource = createSource({
|
|
29
|
-
...
|
|
34
|
+
...shared,
|
|
30
35
|
headers: { ...config.headers, [INGRESS_RUN_EVENT_TOKEN_HEADER]: fileWriter.token },
|
|
31
36
|
});
|
|
32
37
|
}
|
|
@@ -34,6 +39,7 @@ export function createRunPlatformToolSource(config, terminal, createSource, file
|
|
|
34
39
|
const fileSource = retainedMutationSource
|
|
35
40
|
? {
|
|
36
41
|
id: ordinary.id,
|
|
42
|
+
dispose: (context) => disposeRemoteToolSources([ordinary, retainedMutationSource], context),
|
|
37
43
|
listTools: (context) => ordinary.listTools(context),
|
|
38
44
|
executeTool: (name, args, context) => isCanonicalFileMutationTool(name)
|
|
39
45
|
? retainedMutationSource.executeTool(name, args, context)
|
|
@@ -47,7 +53,7 @@ export function createRunPlatformToolSource(config, terminal, createSource, file
|
|
|
47
53
|
[INGRESS_RUN_TERMINAL_TOKEN_HEADER]: terminal.token,
|
|
48
54
|
};
|
|
49
55
|
const terminalSource = createSource({
|
|
50
|
-
...
|
|
56
|
+
...shared,
|
|
51
57
|
// The call id only names which call the API closes; the token is the authority.
|
|
52
58
|
headers: async (context) => {
|
|
53
59
|
const toolCallId = terminalToolCallIdHeaderValue(context);
|
|
@@ -71,6 +77,9 @@ export function createRunPlatformToolSource(config, terminal, createSource, file
|
|
|
71
77
|
});
|
|
72
78
|
return {
|
|
73
79
|
id: ordinary.id,
|
|
80
|
+
dispose: (context) => disposeRemoteToolSources(retainedMutationSource
|
|
81
|
+
? [ordinary, retainedMutationSource, terminalSource]
|
|
82
|
+
: [ordinary, terminalSource], context),
|
|
74
83
|
listTools: (context) => ordinary.listTools(context),
|
|
75
84
|
executeTool: (name, args, context) => isTerminalRunToolName(name) && context?.runId === terminal.runId &&
|
|
76
85
|
hasCurrentTerminalRunCredentialAuthority(context)
|
|
@@ -14,6 +14,8 @@ export interface DynamicToolConfig {
|
|
|
14
14
|
discovery?: ToolDiscoveryMetadata;
|
|
15
15
|
inputSchema: unknown;
|
|
16
16
|
inputSchemaJson?: JsonSchema;
|
|
17
|
+
/** Declared result contract; metadata only, without local result validation. */
|
|
18
|
+
outputSchemaJson?: JsonSchema;
|
|
17
19
|
execute: (input: unknown, context?: ToolExecutionContext) => Promise<unknown> | unknown;
|
|
18
20
|
toModelOutput?: (output: unknown) => unknown;
|
|
19
21
|
mcp?: ToolConfig["mcp"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/src/tool/factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEhG,OAAO,KAAK,EAAE,UAAU,EAAU,MAAM,+BAA+B,CAAC;AA4BxE,8FAA8F;AAC9F,wBAAgB,4BAA4B,CAAC,CAAC,SAAS,IAAI,EAAE,WAAW,EAAE,CAAC,GAAG,CAAC,CAiB9E;AA8KD,sCAAsC;AACtC,wBAAgB,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EACtD,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAkEvB;AAED,0CAA0C;AAC1C,MAAM,WAAW,iBAAiB;IAChC,uEAAuE;IACvE,sBAAsB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,0FAA0F;IAC1F,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,UAAU,CAAC;IAC7B,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IACxF,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;IAC7C,GAAG,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;CACzB;AAED,wCAAwC;AACxC,wBAAgB,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/src/tool/factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEhG,OAAO,KAAK,EAAE,UAAU,EAAU,MAAM,+BAA+B,CAAC;AA4BxE,8FAA8F;AAC9F,wBAAgB,4BAA4B,CAAC,CAAC,SAAS,IAAI,EAAE,WAAW,EAAE,CAAC,GAAG,CAAC,CAiB9E;AA8KD,sCAAsC;AACtC,wBAAgB,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EACtD,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAkEvB;AAED,0CAA0C;AAC1C,MAAM,WAAW,iBAAiB;IAChC,uEAAuE;IACvE,sBAAsB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,0FAA0F;IAC1F,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,UAAU,CAAC;IAC7B,gFAAgF;IAChF,gBAAgB,CAAC,EAAE,UAAU,CAAC;IAC9B,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IACxF,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;IAC7C,GAAG,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;CACzB;AAED,wCAAwC;AACxC,wBAAgB,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAyD7E"}
|
package/esm/src/tool/factory.js
CHANGED
|
@@ -240,6 +240,12 @@ export function dynamicTool(config) {
|
|
|
240
240
|
if (!inputSchemaJson) {
|
|
241
241
|
schemaError(id, "inputSchemaJson must be a bounded JSON Schema object");
|
|
242
242
|
}
|
|
243
|
+
const outputSchemaJson = config.outputSchemaJson === undefined
|
|
244
|
+
? undefined
|
|
245
|
+
: snapshotJsonSchemaObject(config.outputSchemaJson);
|
|
246
|
+
if (config.outputSchemaJson !== undefined && !outputSchemaJson) {
|
|
247
|
+
schemaError(id, "outputSchemaJson must be a bounded JSON Schema object");
|
|
248
|
+
}
|
|
243
249
|
const mcp = snapshotMcpConfig(config.mcp, id);
|
|
244
250
|
const discovery = readToolDiscoveryMetadata(config);
|
|
245
251
|
const delegatedPlatformTools = config.delegatedPlatformTools
|
|
@@ -253,6 +259,7 @@ export function dynamicTool(config) {
|
|
|
253
259
|
...(discovery ? { discovery } : {}),
|
|
254
260
|
inputSchema: inputSchema,
|
|
255
261
|
inputSchemaJson,
|
|
262
|
+
...(outputSchemaJson ? { outputSchemaJson } : {}),
|
|
256
263
|
execute: async (input, context) => {
|
|
257
264
|
if (parseInput) {
|
|
258
265
|
input = parseInput(input);
|
|
@@ -17,6 +17,8 @@ export type HostToolDefinition = {
|
|
|
17
17
|
description?: string;
|
|
18
18
|
inputSchema?: unknown;
|
|
19
19
|
inputSchemaJson?: JsonSchema;
|
|
20
|
+
/** Declared result contract; disclosure metadata only, without result validation. */
|
|
21
|
+
outputSchemaJson?: JsonSchema;
|
|
20
22
|
/** Catalog navigation hints, without execution authority. */
|
|
21
23
|
discovery?: ToolDiscoveryMetadata;
|
|
22
24
|
parameters?: unknown;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host-tools.d.ts","sourceRoot":"","sources":["../../../src/src/tool/host-tools.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAU,MAAM,+BAA+B,CAAC;AACxE,OAAO,KAAK,EACV,IAAI,EACJ,UAAU,EACV,qBAAqB,EACrB,oBAAoB,EACpB,OAAO,EACR,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"host-tools.d.ts","sourceRoot":"","sources":["../../../src/src/tool/host-tools.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAU,MAAM,+BAA+B,CAAC;AACxE,OAAO,KAAK,EACV,IAAI,EACJ,UAAU,EACV,qBAAqB,EACrB,oBAAoB,EACpB,OAAO,EACR,MAAM,YAAY,CAAC;AAmBpB,KAAK,eAAe,GAAG;IACrB,cAAc,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CAChG,CAAC,gBAAgB,CAAC,CAAC;AAEpB,gCAAgC;AAChC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACpB,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sFAAsF;IACtF,sBAAsB,CAAC,EAAE,UAAU,CAAC,wBAAwB,CAAC,CAAC;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,UAAU,CAAC;IAC7B,qFAAqF;IACrF,gBAAgB,CAAC,EAAE,UAAU,CAAC;IAC9B,6DAA6D;IAC7D,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,eAAe,CAAC;IAC5C,GAAG,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;CACzB,CAAC;AAEF,6CAA6C;AAC7C,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;AAO7D,qDAAqD;AACrD,MAAM,WAAW,8BAA8B;IAC7C,kBAAkB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;CACnD;AAmGD,0CAA0C;AAC1C,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,WAAW,EACxB,OAAO,CAAC,EAAE,8BAA8B,GACvC,OAAO,CAAC;AACX,0CAA0C;AAC1C,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,OAAO,CAAC,EAAE,8BAA8B,GACvC,OAAO,CAAC"}
|
|
@@ -7,6 +7,7 @@ import { getRemoteToolProvenance, markRemoteToolProvenance } from "./remote-tool
|
|
|
7
7
|
import { inheritTrustedHostToolProvenance } from "./host-tool-provenance.js";
|
|
8
8
|
import { defineOwnDataProperty } from "../security/own-data-property.js";
|
|
9
9
|
import { inheritProviderObservedSkillBodies } from "./provider-observed-skill-bodies.js";
|
|
10
|
+
import { snapshotJsonSchemaObject } from "../schemas/schema-input.js";
|
|
10
11
|
const apply = Reflect.apply;
|
|
11
12
|
const arrayIsArray = Array.isArray;
|
|
12
13
|
const objectEntries = Object.entries;
|
|
@@ -64,6 +65,7 @@ function snapshotHostToolDefinition(value) {
|
|
|
64
65
|
"execute",
|
|
65
66
|
"inputSchema",
|
|
66
67
|
"inputSchemaJson",
|
|
68
|
+
"outputSchemaJson",
|
|
67
69
|
"discovery",
|
|
68
70
|
"mcp",
|
|
69
71
|
];
|
|
@@ -126,6 +128,9 @@ export function createToolsFromHostDefinitions(definitions, options = {}) {
|
|
|
126
128
|
description: definition.description,
|
|
127
129
|
inputSchema: definition.inputSchema,
|
|
128
130
|
inputSchemaJson: definition.inputSchemaJson,
|
|
131
|
+
...(definition.outputSchemaJson === undefined
|
|
132
|
+
? {}
|
|
133
|
+
: { outputSchemaJson: definition.outputSchemaJson }),
|
|
129
134
|
execute,
|
|
130
135
|
mcp: definition.mcp,
|
|
131
136
|
delegatedPlatformTools: definition.delegatedPlatformTools,
|
|
@@ -143,6 +148,15 @@ export function createToolsFromHostDefinitions(definitions, options = {}) {
|
|
|
143
148
|
delegatedPlatformTools: definition.delegatedPlatformTools,
|
|
144
149
|
};
|
|
145
150
|
materializedTool = tool(config);
|
|
151
|
+
if (definition.outputSchemaJson !== undefined) {
|
|
152
|
+
// `tool()` derives output contracts from a Schema only; carry the
|
|
153
|
+
// declared JSON contract with the same bounds `dynamicTool` applies.
|
|
154
|
+
const outputSchemaJson = snapshotJsonSchemaObject(definition.outputSchemaJson);
|
|
155
|
+
if (!outputSchemaJson) {
|
|
156
|
+
throw new TypeError("outputSchemaJson must be a bounded JSON Schema object");
|
|
157
|
+
}
|
|
158
|
+
materializedTool.outputSchemaJson = outputSchemaJson;
|
|
159
|
+
}
|
|
146
160
|
}
|
|
147
161
|
if (materializedTool) {
|
|
148
162
|
copyToolDiscoveryMetadata(definition, materializedTool);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-scoped-remote-tools.d.ts","sourceRoot":"","sources":["../../../src/src/tool/project-scoped-remote-tools.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"project-scoped-remote-tools.d.ts","sourceRoot":"","sources":["../../../src/src/tool/project-scoped-remote-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -179,6 +179,18 @@ function normalizeToolDefinitions(sourceId, definitions) {
|
|
|
179
179
|
description: definition.description,
|
|
180
180
|
parameters: snapshotToolParameters(definition),
|
|
181
181
|
};
|
|
182
|
+
const outputDescriptor = Object.getOwnPropertyDescriptor(definition, "outputSchema");
|
|
183
|
+
if (outputDescriptor && !("value" in outputDescriptor)) {
|
|
184
|
+
throw new TypeError(`Remote source "${sourceId}" returned an accessor output schema for tool "${definition.name}"`);
|
|
185
|
+
}
|
|
186
|
+
if (outputDescriptor?.value !== undefined) {
|
|
187
|
+
const output = snapshotBoundedJsonValue(outputDescriptor.value);
|
|
188
|
+
if (!output.success || typeof output.value !== "object" ||
|
|
189
|
+
output.value === null || Array.isArray(output.value)) {
|
|
190
|
+
throw new TypeError(`Remote source "${sourceId}" returned a malformed output schema for tool "${definition.name}"`);
|
|
191
|
+
}
|
|
192
|
+
normalized.outputSchema = output.value;
|
|
193
|
+
}
|
|
182
194
|
copyToolDiscoveryMetadata(definition, normalized);
|
|
183
195
|
if (definition.title !== undefined) {
|
|
184
196
|
if (typeof definition.title !== "string" || definition.title.length === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/src/tool/registry.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGvD,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,uCAAuC,CAAC;AA2B/C,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAOlD;AAMD,cAAM,oBAAqB,SAAQ,oBAAoB,CAAC,IAAI,CAAC;IAClD,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI;IActC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI;IAMrD,sFAAsF;IACtF,sBAAsB,CAAC,EAAE,EAAE,cAAc,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI;IAOpE,mBAAmB,IAAI,cAAc,EAAE;CAGxC;AAED,+EAA+E;AAC/E,eAAO,MAAM,oBAAoB,sBAAwC,CAAC;AAE1E;;;;;GAKG;AACH,cAAM,YAAa,SAAQ,kBAAkB,CAAC,IAAI,CAAC;IACjD,mBAAmB,IAAI,cAAc,EAAE;CAGxC;AAED,0CAA0C;AAC1C,eAAO,MAAM,YAAY,cAAyC,CAAC;AAkCnE,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,IAAI,GAAG,cAAc,
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/src/tool/registry.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGvD,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,uCAAuC,CAAC;AA2B/C,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAOlD;AAMD,cAAM,oBAAqB,SAAQ,oBAAoB,CAAC,IAAI,CAAC;IAClD,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI;IActC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI;IAMrD,sFAAsF;IACtF,sBAAsB,CAAC,EAAE,EAAE,cAAc,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI;IAOpE,mBAAmB,IAAI,cAAc,EAAE;CAGxC;AAED,+EAA+E;AAC/E,eAAO,MAAM,oBAAoB,sBAAwC,CAAC;AAE1E;;;;;GAKG;AACH,cAAM,YAAa,SAAQ,kBAAkB,CAAC,IAAI,CAAC;IACjD,mBAAmB,IAAI,cAAc,EAAE;CAGxC;AAED,0CAA0C;AAC1C,eAAO,MAAM,YAAY,cAAyC,CAAC;AAkCnE,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,IAAI,GAAG,cAAc,CAwBnE"}
|
package/esm/src/tool/registry.js
CHANGED
|
@@ -115,6 +115,9 @@ export function toolToProviderDefinition(tool) {
|
|
|
115
115
|
name: tool.id,
|
|
116
116
|
description: tool.description,
|
|
117
117
|
parameters: jsonSchema,
|
|
118
|
+
...(tool.outputSchemaJson
|
|
119
|
+
? { outputSchema: snapshotProviderSchema(tool.outputSchemaJson, tool.id) }
|
|
120
|
+
: {}),
|
|
118
121
|
...(discovery ? { discovery } : {}),
|
|
119
122
|
...snapshotProviderMcpMetadata(tool.mcp, tool.id),
|
|
120
123
|
};
|
|
@@ -18,6 +18,17 @@ export interface RemoteMCPToolSourceConfig {
|
|
|
18
18
|
listMeta?: Record<string, unknown>;
|
|
19
19
|
callMethod?: string;
|
|
20
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Share endpoint protocol knowledge across sources derived from this config.
|
|
23
|
+
*
|
|
24
|
+
* A composite that routes some calls through a source with extra credentials
|
|
25
|
+
* (terminal or mutation authority) discovers tools only through its ordinary
|
|
26
|
+
* source. Sources created from configs spread from the returned value fall back
|
|
27
|
+
* to the protocol and header annotations that discovery recorded for the same
|
|
28
|
+
* endpoint, so their first call neither probes a legacy server with a call that
|
|
29
|
+
* cannot be replayed nor omits schema-declared headers.
|
|
30
|
+
*/
|
|
31
|
+
export declare function shareRemoteMCPProtocolState<T extends RemoteMCPToolSourceConfig>(config: T): T;
|
|
21
32
|
/** Create a remote MCP source with the framework's guarded outbound transport. */
|
|
22
33
|
export declare function createRemoteMCPToolSource(config: RemoteMCPToolSourceConfig): RemoteToolSource;
|
|
23
34
|
/** Deployment-owned transport policy for trusted MCP endpoint roots. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-mcp.d.ts","sourceRoot":"","sources":["../../../src/src/tool/remote-mcp.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"remote-mcp.d.ts","sourceRoot":"","sources":["../../../src/src/tool/remote-mcp.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,gBAAgB,EAAkB,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAczF,mDAAmD;AACnD,eAAO,MAAM,uCAAuC,QAAmB,CAAC;AACxE,mDAAmD;AACnD,eAAO,MAAM,kCAAkC,QAAkB,CAAC;AAIlE,8EAA8E;AAC9E,eAAO,MAAM,8BAA8B,KAAK,CAAC;AACjD,gEAAgE;AAChE,eAAO,MAAM,+BAA+B,OAAQ,CAAC;AAgGrD,KAAK,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,oBAAoB,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAEnF,oDAAoD;AACpD,MAAM,WAAW,yBAAyB;IACxC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,eAAe,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA8yCD;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,SAAS,yBAAyB,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAO7F;AAqaD,kFAAkF;AAClF,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,yBAAyB,GAChC,gBAAgB,CAElB;AAED,wEAAwE;AACxE,MAAM,WAAW,mCAAmC;IAClD,kEAAkE;IAClE,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,oEAAoE;IACpE,YAAY,EAAE,OAAO,KAAK,CAAC;CAC5B;AAoED;;;;;GAKG;AACH,wBAAgB,6CAA6C,CAC3D,OAAO,EAAE,mCAAmC,GAC3C,CAAC,MAAM,EAAE,yBAAyB,KAAK,gBAAgB,CAoBzD"}
|