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.
Files changed (75) hide show
  1. package/docs/README.md +1 -1
  2. package/docs/config.json +1 -1
  3. package/docs/guides/tools.md +27 -2
  4. package/docs/manifest.json +6 -6
  5. package/esm/deno.js +1 -1
  6. package/esm/src/agent/ag-ui/connected-local-platform-tools.d.ts.map +1 -1
  7. package/esm/src/agent/ag-ui/connected-local-platform-tools.js +9 -2
  8. package/esm/src/agent/ag-ui/tool-shared.d.ts +2 -0
  9. package/esm/src/agent/ag-ui/tool-shared.d.ts.map +1 -1
  10. package/esm/src/agent/ag-ui/tool-shared.js +7 -0
  11. package/esm/src/agent/hosted/chat-runtime-tool-assembly.d.ts +2 -0
  12. package/esm/src/agent/hosted/chat-runtime-tool-assembly.d.ts.map +1 -1
  13. package/esm/src/agent/hosted/chat-runtime-tool-assembly.js +18 -2
  14. package/esm/src/agent/hosted/child-fork-tool-sources.d.ts +1 -0
  15. package/esm/src/agent/hosted/child-fork-tool-sources.d.ts.map +1 -1
  16. package/esm/src/agent/hosted/child-fork-tool-sources.js +49 -12
  17. package/esm/src/agent/hosted/default-chat-runtime.d.ts.map +1 -1
  18. package/esm/src/agent/hosted/default-chat-runtime.js +26 -1
  19. package/esm/src/agent/hosted/executor-runtime-facades.d.ts.map +1 -1
  20. package/esm/src/agent/hosted/executor-runtime-facades.js +3 -0
  21. package/esm/src/agent/hosted/executor-tool-schema.d.ts.map +1 -1
  22. package/esm/src/agent/hosted/executor-tool-schema.js +7 -1
  23. package/esm/src/agent/hosted/platform-dependency-credential.d.ts.map +1 -1
  24. package/esm/src/agent/hosted/platform-dependency-credential.js +26 -1
  25. package/esm/src/agent/hosted/project-remote-tool-source.d.ts.map +1 -1
  26. package/esm/src/agent/hosted/project-remote-tool-source.js +18 -0
  27. package/esm/src/agent/hosted/terminal-credential.d.ts.map +1 -1
  28. package/esm/src/agent/hosted/terminal-credential.js +9 -3
  29. package/esm/src/agent/platform-mcp-tool-source.d.ts.map +1 -1
  30. package/esm/src/agent/platform-mcp-tool-source.js +4 -0
  31. package/esm/src/agent/project/live-studio-mcp-tools.d.ts.map +1 -1
  32. package/esm/src/agent/project/live-studio-mcp-tools.js +14 -2
  33. package/esm/src/agent/runtime/index.d.ts.map +1 -1
  34. package/esm/src/agent/runtime/index.js +2269 -2191
  35. package/esm/src/agent/runtime/mcp-server-tool-sources.d.ts +2 -0
  36. package/esm/src/agent/runtime/mcp-server-tool-sources.d.ts.map +1 -1
  37. package/esm/src/agent/runtime/mcp-server-tool-sources.js +27 -0
  38. package/esm/src/agent/runtime/runtime-tool-config.d.ts +1 -0
  39. package/esm/src/agent/runtime/runtime-tool-config.d.ts.map +1 -1
  40. package/esm/src/agent/runtime/runtime-tool-config.js +4 -0
  41. package/esm/src/agent/runtime/tool-exposure.d.ts +4 -2
  42. package/esm/src/agent/runtime/tool-exposure.d.ts.map +1 -1
  43. package/esm/src/agent/runtime/tool-exposure.js +17 -4
  44. package/esm/src/html/hydration-script-builder/hydration-runtime.generated.js +1 -1
  45. package/esm/src/internal-agents/run-stream.d.ts.map +1 -1
  46. package/esm/src/internal-agents/run-stream.js +95 -23
  47. package/esm/src/platform/compat/http/pinned-fetch.d.ts +1 -1
  48. package/esm/src/server/handlers/request/agent-stream.handler.d.ts +2 -0
  49. package/esm/src/server/handlers/request/agent-stream.handler.d.ts.map +1 -1
  50. package/esm/src/server/handlers/request/agent-stream.handler.js +24 -3
  51. package/esm/src/server/handlers/request/run-terminal-tool-source.d.ts.map +1 -1
  52. package/esm/src/server/handlers/request/run-terminal-tool-source.js +12 -3
  53. package/esm/src/tool/factory.d.ts +2 -0
  54. package/esm/src/tool/factory.d.ts.map +1 -1
  55. package/esm/src/tool/factory.js +7 -0
  56. package/esm/src/tool/host-tools.d.ts +2 -0
  57. package/esm/src/tool/host-tools.d.ts.map +1 -1
  58. package/esm/src/tool/host-tools.js +14 -0
  59. package/esm/src/tool/project-scoped-remote-tools.d.ts.map +1 -1
  60. package/esm/src/tool/project-scoped-remote-tools.js +12 -0
  61. package/esm/src/tool/registry.d.ts.map +1 -1
  62. package/esm/src/tool/registry.js +3 -0
  63. package/esm/src/tool/remote-mcp.d.ts +11 -0
  64. package/esm/src/tool/remote-mcp.d.ts.map +1 -1
  65. package/esm/src/tool/remote-mcp.js +685 -85
  66. package/esm/src/tool/remote-source-tools.d.ts.map +1 -1
  67. package/esm/src/tool/remote-source-tools.js +1 -0
  68. package/esm/src/tool/remote-tool-source-owner.d.ts +14 -0
  69. package/esm/src/tool/remote-tool-source-owner.d.ts.map +1 -0
  70. package/esm/src/tool/remote-tool-source-owner.js +65 -0
  71. package/esm/src/tool/types.d.ts +4 -0
  72. package/esm/src/tool/types.d.ts.map +1 -1
  73. package/esm/src/utils/version-constant.d.ts +1 -1
  74. package/esm/src/utils/version-constant.js +1 -1
  75. 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":"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"}
1
+ {"version":3,"file":"agent-stream.handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/request/agent-stream.handler.ts"],"names":[],"mappings":"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"}
@@ -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 platformRemoteToolSource = createRunPlatformToolSource({
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;AAM/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,CAkElB"}
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
- const ordinary = createSource(config);
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
- ...config,
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
- ...config,
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,CAkD7E"}
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"}
@@ -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;AAkBpB,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,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;AAkGD,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"}
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,CAqBnE"}
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"}
@@ -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":"AAWA,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;AAkErD,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;AAwjCD,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"}
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"}