@finalai/agent-definition 0.1.2 → 0.1.4

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 (115) hide show
  1. package/HOSTING.md +234 -0
  2. package/README.md +7 -0
  3. package/dist/compiler-assets/{chunk-TATN3PYK.ts → chunk-2ZRYQO4Q.ts} +4 -4
  4. package/dist/compiler-assets/{chunk-HGW4YHAY.ts → chunk-3K4C4SVG.ts} +9 -0
  5. package/dist/compiler-assets/{chunk-7VSSVZM4.ts → chunk-4A66SVBJ.ts} +4 -4
  6. package/dist/compiler-assets/{chunk-CWWRTRWW.ts → chunk-4E5HECVD.ts} +1 -1
  7. package/dist/compiler-assets/{chunk-7QP2CKPI.ts → chunk-4X2DS5BR.ts} +1 -1
  8. package/dist/compiler-assets/{chunk-ZDLVA6XF.ts → chunk-5NTKRRMC.ts} +112 -21
  9. package/dist/compiler-assets/{chunk-2CZRHOLL.ts → chunk-7XUPKRZU.ts} +1 -1
  10. package/dist/compiler-assets/{chunk-OWC6SFFF.ts → chunk-APU2VKLW.ts} +52 -12
  11. package/dist/compiler-assets/{chunk-HFS4KLEL.ts → chunk-D3SB4CCB.ts} +1 -1
  12. package/dist/compiler-assets/{chunk-HNPUTP35.ts → chunk-GCFSHHH2.ts} +2 -2
  13. package/dist/compiler-assets/{chunk-5BK6FVRE.ts → chunk-IF6MR7JF.ts} +2 -2
  14. package/dist/compiler-assets/{chunk-LUSAAV4L.ts → chunk-IZGOMT7K.ts} +2 -2
  15. package/dist/compiler-assets/{chunk-GTUZOATD.ts → chunk-JGQ2KAN7.ts} +1 -1
  16. package/dist/compiler-assets/{chunk-NYTOYKKF.ts → chunk-K6D7ZK74.ts} +3 -3
  17. package/dist/compiler-assets/{chunk-WMXMVFHM.ts → chunk-K7V4IMOB.ts} +3 -3
  18. package/dist/compiler-assets/{chunk-VHXHUU7L.ts → chunk-LHMUAIYJ.ts} +1 -1
  19. package/dist/compiler-assets/{chunk-SKTNMUO7.ts → chunk-MSE7X5YG.ts} +25 -2
  20. package/dist/compiler-assets/chunk-PFLSBTJA.ts +39 -0
  21. package/dist/compiler-assets/{chunk-XHKPWT3G.ts → chunk-QJ26GEUM.ts} +1 -1
  22. package/dist/compiler-assets/{chunk-JPY4L2UJ.ts → chunk-RIEMTCTV.ts} +12 -8
  23. package/dist/compiler-assets/chunk-RMIQJHSL.ts +0 -0
  24. package/dist/compiler-assets/chunk-TJ536HI4.ts +61 -0
  25. package/dist/compiler-assets/{chunk-QMWTDPNT.ts → chunk-TJZS457N.ts} +3 -3
  26. package/dist/compiler-assets/{chunk-JIPNTA56.ts → chunk-TM36NO3C.ts} +1 -1
  27. package/dist/compiler-assets/{chunk-MZMSKIKU.ts → chunk-UBR53WBH.ts} +33 -8
  28. package/dist/compiler-assets/chunk-ULI5WWRR.ts +40 -0
  29. package/dist/compiler-assets/chunk-W6DOJA4W.ts +3763 -0
  30. package/dist/compiler-assets/{chunk-EVQIK62B.ts → chunk-YW7HDGQA.ts} +11 -7
  31. package/dist/compiler-assets/{chunk-BLB6JGLO.ts → chunk-YWFGIPHD.ts} +27 -24
  32. package/dist/compiler-assets/{chunk-QMKWAFVZ.ts → chunk-Z5TO7RSJ.ts} +5 -3
  33. package/dist/compiler-assets/src/authoring/agent.ts +4 -4
  34. package/dist/compiler-assets/src/authoring/approval.ts +7 -7
  35. package/dist/compiler-assets/src/authoring/brand.ts +3 -3
  36. package/dist/compiler-assets/src/authoring/channels.ts +6 -6
  37. package/dist/compiler-assets/src/authoring/connections.ts +14 -4
  38. package/dist/compiler-assets/src/authoring/credentials.ts +7 -6
  39. package/dist/compiler-assets/src/authoring/dynamic.ts +9 -4
  40. package/dist/compiler-assets/src/authoring/harness.ts +9 -9
  41. package/dist/compiler-assets/src/authoring/hooks.ts +10 -8
  42. package/dist/compiler-assets/src/authoring/index.ts +33 -26
  43. package/dist/compiler-assets/src/authoring/instructions.ts +10 -5
  44. package/dist/compiler-assets/src/authoring/sandbox.ts +10 -10
  45. package/dist/compiler-assets/src/authoring/schedules.ts +4 -4
  46. package/dist/compiler-assets/src/authoring/skills.ts +4 -4
  47. package/dist/compiler-assets/src/authoring/tools.ts +10 -8
  48. package/dist/compiler-assets/src/compatibility.ts +11 -11
  49. package/dist/compiler-assets/src/hosted-bindings.ts +15 -0
  50. package/dist/compiler-assets/src/index.ts +54 -41
  51. package/dist/compiler-assets/src/manifest.ts +8 -4
  52. package/dist/compiler-assets/src/resolve.ts +5 -5
  53. package/dist/compiler-assets/src/runtime/bundle.ts +22 -20
  54. package/dist/compiler-assets/src/runtime/describe.ts +14 -12
  55. package/dist/compiler-assets/src/runtime/described.ts +19 -12
  56. package/dist/compiler-assets/src/runtime/isolate.ts +18 -16
  57. package/dist/compiler-assets/src/runtime/lower.ts +13 -11
  58. package/dist/compiler-assets/src/runtime/schema-validation.ts +4 -4
  59. package/dist/compiler-assets/src/runtime/values.ts +2 -2
  60. package/dist/modules/authoring/agent.d.mts +3 -2
  61. package/dist/modules/authoring/agent.mjs.map +2 -2
  62. package/dist/modules/authoring/connections.d.mts +15 -2
  63. package/dist/modules/authoring/connections.mjs +36 -0
  64. package/dist/modules/authoring/connections.mjs.map +2 -2
  65. package/dist/modules/authoring/context.d.mts +3 -1
  66. package/dist/modules/authoring/context.mjs.map +2 -2
  67. package/dist/modules/authoring/dynamic.d.mts +3 -1
  68. package/dist/modules/authoring/dynamic.mjs +19 -1
  69. package/dist/modules/authoring/dynamic.mjs.map +2 -2
  70. package/dist/modules/authoring/harness.mjs +2 -0
  71. package/dist/modules/authoring/harness.mjs.map +2 -2
  72. package/dist/modules/authoring/hooks.d.mts +2 -1
  73. package/dist/modules/authoring/hooks.mjs.map +2 -2
  74. package/dist/modules/authoring/index.d.mts +4 -2
  75. package/dist/modules/authoring/index.mjs +4 -1
  76. package/dist/modules/authoring/index.mjs.map +2 -2
  77. package/dist/modules/authoring/sandbox.d.mts +2 -1
  78. package/dist/modules/authoring/sandbox.mjs.map +2 -2
  79. package/dist/modules/compiler/assemble.mjs +6 -1
  80. package/dist/modules/compiler/assemble.mjs.map +2 -2
  81. package/dist/modules/compiler/index.d.mts +2 -1
  82. package/dist/modules/compiler/index.mjs +18 -0
  83. package/dist/modules/compiler/index.mjs.map +2 -2
  84. package/dist/modules/compiler/local-isolate.d.mts +2 -1
  85. package/dist/modules/compiler/local-isolate.mjs +6 -1
  86. package/dist/modules/compiler/local-isolate.mjs.map +2 -2
  87. package/dist/modules/hosted-bindings.d.mts +10 -0
  88. package/dist/modules/hosted-bindings.mjs +36 -0
  89. package/dist/modules/hosted-bindings.mjs.map +7 -0
  90. package/dist/modules/index.d.mts +2 -0
  91. package/dist/modules/index.mjs +2 -0
  92. package/dist/modules/index.mjs.map +2 -2
  93. package/dist/modules/manifest.d.mts +2 -2
  94. package/dist/modules/manifest.mjs +4 -0
  95. package/dist/modules/manifest.mjs.map +2 -2
  96. package/dist/modules/resolve.mjs +4 -0
  97. package/dist/modules/resolve.mjs.map +2 -2
  98. package/dist/modules/runtime/describe.mjs +25 -4
  99. package/dist/modules/runtime/describe.mjs.map +2 -2
  100. package/dist/modules/runtime/described.d.mts +40 -4
  101. package/dist/modules/runtime/described.mjs +7 -2
  102. package/dist/modules/runtime/described.mjs.map +2 -2
  103. package/dist/modules/runtime/isolate.d.mts +2 -0
  104. package/dist/modules/runtime/isolate.mjs +7 -4
  105. package/dist/modules/runtime/isolate.mjs.map +2 -2
  106. package/dist/modules/runtime/lower.mjs +76 -14
  107. package/dist/modules/runtime/lower.mjs.map +2 -2
  108. package/dist/modules/runtime/schema-validation.mjs +19 -2
  109. package/dist/modules/runtime/schema-validation.mjs.map +2 -2
  110. package/fixtures/assistant/agent/agent.ts +7 -0
  111. package/package.json +4 -3
  112. package/dist/compiler-assets/chunk-GNR7XBPN.ts +0 -3364
  113. package/dist/compiler-assets/chunk-JNJE72EH.ts +0 -10
  114. package/dist/compiler-assets/chunk-T6WG4L4M.ts +0 -19
  115. /package/dist/compiler-assets/{chunk-6WR3PGNF.ts → chunk-CIWWFQHL.ts} +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/index.ts"],
4
- "sourcesContent": ["// Authoring API, the manifest schema and per-session dynamic resolution. The\n// compiler (esbuild, Node) is `@finalai/agent-definition/compiler`; the\n// compatibility report (ajv) is `@finalai/agent-definition/compatibility`.\nexport * from \"./authoring/index.mjs\";\nexport * from \"./manifest.mjs\";\nexport {\n SlotValueKind,\n resolveManifest,\n resolveManifestDetailed,\n slotKindOf,\n validateSlotValue,\n} from \"./resolve.mjs\";\nexport type { ResolveManifestArgsIface, ResolveSlot, ResolvedManifestDetailIface } from \"./resolve.mjs\";\nexport type { AgentBundleIface } from \"./runtime/bundle.mjs\";\nexport type {\n ChannelRouteArgsIface,\n ChannelSocketArgsIface,\n DispatchHookArgsIface,\n IsolateRuntimeIface,\n ResolveDynamicArgsIface,\n RunToolArgsIface,\n RunToolResultIface,\n} from \"./runtime/isolate.mjs\";\nexport {\n AGENT_DYNAMIC_PREFIX,\n AUTHORED_SERVER_KEY,\n COMBINED_MCP_SERVERS_EXPORT,\n} from \"./runtime/layout.mjs\";\n"],
5
- "mappings": "AAGA,cAAc;AACd,cAAc;AACd;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAYP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;",
4
+ "sourcesContent": ["// Authoring API, the manifest schema and per-session dynamic resolution. The\n// compiler (esbuild, Node) is `@finalai/agent-definition/compiler`; the\n// compatibility report (ajv) is `@finalai/agent-definition/compatibility`.\nexport * from \"./authoring/index.mjs\";\nexport * from \"./manifest.mjs\";\nexport { validateHostedBindings } from \"./hosted-bindings.mjs\";\nexport type { ValidateHostedBindingsOptionsIface } from \"./hosted-bindings.mjs\";\nexport {\n SlotValueKind,\n resolveManifest,\n resolveManifestDetailed,\n slotKindOf,\n validateSlotValue,\n} from \"./resolve.mjs\";\nexport type { ResolveManifestArgsIface, ResolveSlot, ResolvedManifestDetailIface } from \"./resolve.mjs\";\nexport type { AgentBundleIface } from \"./runtime/bundle.mjs\";\nexport type {\n ChannelRouteArgsIface,\n ChannelSocketArgsIface,\n DispatchHookArgsIface,\n IsolateRuntimeIface,\n ResolveDynamicArgsIface,\n RunToolArgsIface,\n RunToolResultIface,\n} from \"./runtime/isolate.mjs\";\nexport {\n AGENT_DYNAMIC_PREFIX,\n AUTHORED_SERVER_KEY,\n COMBINED_MCP_SERVERS_EXPORT,\n} from \"./runtime/layout.mjs\";\n"],
5
+ "mappings": "AAGA,cAAc;AACd,cAAc;AACd,SAAS,8BAA8B;AAEvC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAYP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;",
6
6
  "names": []
7
7
  }
@@ -1,2 +1,2 @@
1
- export { BaseCapability, DynamicEvent, InstructionRole, MANIFEST_VERSION, McpServerBindingKind, SandboxAccess, SandboxAttach, ScheduleTarget, ToolApproval, agentManifestSchema, baseToolsSchema, bundleSchema, channelBindingSchema, dynamicSlotSchema, emptyManifest, findDynamicSlots, harnessBindingSchema, hookBindingSchema, httpMcpServerBindingSchema, identitySchema, instructionFragmentSchema, isDynamicSlot, mcpAuthSchema, mcpServerBindingSchema, resolvedAgentManifestSchema, sandboxBindingSchema, scheduleDefinitionSchema, skillBundleSchema, skillFileSchema, toolDescriptorSchema, workerMcpServerBindingSchema, } from '@finalai/agent-provider';
2
- export type { AgentManifestIface, BaseToolsIface, BundleIface, ChannelBindingIface, DynamicSlotIface, DynamicSlotLocationIface, HarnessBindingIface, HookBindingIface, HttpMcpServerBindingIface, IdentityIface, InstructionFragmentIface, McpAuth, McpServerBinding, ResolvedAgentManifestIface, ResolvedSandboxBindingIface, SandboxBindingIface, ScheduleDefinitionIface, SkillBundleIface, ToolDescriptorIface, WorkerMcpServerBindingIface, } from '@finalai/agent-provider';
1
+ export { BaseCapability, DynamicEvent, InstructionRole, MANIFEST_VERSION, McpServerBindingKind, SandboxAccess, SandboxAttach, ScheduleTarget, ToolApproval, agentAvatarSchema, avatarMediaSchema, agentManifestSchema, baseToolsSchema, bundleSchema, channelBindingSchema, dynamicSlotSchema, emptyManifest, findDynamicSlots, harnessBindingSchema, hookBindingSchema, httpMcpServerBindingSchema, identitySchema, instructionFragmentSchema, isDynamicSlot, mcpAuthSchema, mcpServerBindingSchema, resolvedAgentManifestSchema, sandboxBindingSchema, scheduleDefinitionSchema, skillBundleSchema, skillFileSchema, toolDescriptorSchema, workerMcpServerBindingSchema, } from '@finalai/agent-provider';
2
+ export type { AgentAvatarIface, AvatarMedia, AvatarState, AgentManifestIface, BaseToolsIface, BundleIface, ChannelBindingIface, DynamicSlotIface, DynamicSlotLocationIface, HarnessBindingIface, HookBindingIface, HttpMcpServerBindingIface, IdentityIface, InstructionFragmentIface, McpAuth, McpServerBinding, ResolvedAgentManifestIface, ResolvedSandboxBindingIface, SandboxBindingIface, ScheduleDefinitionIface, SkillBundleIface, ToolDescriptorIface, WorkerMcpServerBindingIface, } from '@finalai/agent-provider';
@@ -8,6 +8,8 @@ import {
8
8
  SandboxAttach,
9
9
  ScheduleTarget,
10
10
  ToolApproval,
11
+ agentAvatarSchema,
12
+ avatarMediaSchema,
11
13
  agentManifestSchema,
12
14
  baseToolsSchema,
13
15
  bundleSchema,
@@ -41,7 +43,9 @@ export {
41
43
  SandboxAttach,
42
44
  ScheduleTarget,
43
45
  ToolApproval,
46
+ agentAvatarSchema,
44
47
  agentManifestSchema,
48
+ avatarMediaSchema,
45
49
  baseToolsSchema,
46
50
  bundleSchema,
47
51
  channelBindingSchema,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/manifest.ts"],
4
- "sourcesContent": ["// The Agent Manifest lives in the provider contract (harnesses, sandboxes and\n// channels receive it); this package compiles directories into it.\nexport {\n BaseCapability,\n DynamicEvent,\n InstructionRole,\n MANIFEST_VERSION,\n McpServerBindingKind,\n SandboxAccess,\n SandboxAttach,\n ScheduleTarget,\n ToolApproval,\n agentManifestSchema,\n baseToolsSchema,\n bundleSchema,\n channelBindingSchema,\n dynamicSlotSchema,\n emptyManifest,\n findDynamicSlots,\n harnessBindingSchema,\n hookBindingSchema,\n httpMcpServerBindingSchema,\n identitySchema,\n instructionFragmentSchema,\n isDynamicSlot,\n mcpAuthSchema,\n mcpServerBindingSchema,\n resolvedAgentManifestSchema,\n sandboxBindingSchema,\n scheduleDefinitionSchema,\n skillBundleSchema,\n skillFileSchema,\n toolDescriptorSchema,\n workerMcpServerBindingSchema,\n} from '@finalai/agent-provider';\nexport type {\n AgentManifestIface,\n BaseToolsIface,\n BundleIface,\n ChannelBindingIface,\n DynamicSlotIface,\n DynamicSlotLocationIface,\n HarnessBindingIface,\n HookBindingIface,\n HttpMcpServerBindingIface,\n IdentityIface,\n InstructionFragmentIface,\n McpAuth,\n McpServerBinding,\n ResolvedAgentManifestIface,\n ResolvedSandboxBindingIface,\n SandboxBindingIface,\n ScheduleDefinitionIface,\n SkillBundleIface,\n ToolDescriptorIface,\n WorkerMcpServerBindingIface,\n} from '@finalai/agent-provider';\n"],
5
- "mappings": "AAEA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;",
4
+ "sourcesContent": ["// The Agent Manifest lives in the provider contract (harnesses, sandboxes and\n// channels receive it); this package compiles directories into it.\nexport {\n BaseCapability,\n DynamicEvent,\n InstructionRole,\n MANIFEST_VERSION,\n McpServerBindingKind,\n SandboxAccess,\n SandboxAttach,\n ScheduleTarget,\n ToolApproval,\n agentAvatarSchema,\n avatarMediaSchema,\n agentManifestSchema,\n baseToolsSchema,\n bundleSchema,\n channelBindingSchema,\n dynamicSlotSchema,\n emptyManifest,\n findDynamicSlots,\n harnessBindingSchema,\n hookBindingSchema,\n httpMcpServerBindingSchema,\n identitySchema,\n instructionFragmentSchema,\n isDynamicSlot,\n mcpAuthSchema,\n mcpServerBindingSchema,\n resolvedAgentManifestSchema,\n sandboxBindingSchema,\n scheduleDefinitionSchema,\n skillBundleSchema,\n skillFileSchema,\n toolDescriptorSchema,\n workerMcpServerBindingSchema,\n} from '@finalai/agent-provider';\nexport type {\n AgentAvatarIface,\n AvatarMedia,\n AvatarState,\n AgentManifestIface,\n BaseToolsIface,\n BundleIface,\n ChannelBindingIface,\n DynamicSlotIface,\n DynamicSlotLocationIface,\n HarnessBindingIface,\n HookBindingIface,\n HttpMcpServerBindingIface,\n IdentityIface,\n InstructionFragmentIface,\n McpAuth,\n McpServerBinding,\n ResolvedAgentManifestIface,\n ResolvedSandboxBindingIface,\n SandboxBindingIface,\n ScheduleDefinitionIface,\n SkillBundleIface,\n ToolDescriptorIface,\n WorkerMcpServerBindingIface,\n} from '@finalai/agent-provider';\n"],
5
+ "mappings": "AAEA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;",
6
6
  "names": []
7
7
  }
@@ -145,6 +145,10 @@ const resolveManifestDetailed = async (args) => {
145
145
  for (const found of slots) {
146
146
  const subscribed = found.slot.$dynamic.events.includes(args.event);
147
147
  const raw = subscribed ? await args.resolve(found.slot, found.path) : args.previous?.[found.path] ?? null;
148
+ if ((found.slot.$dynamic.requiredBindings?.length ?? 0) > 0 && raw == null)
149
+ throw new Error(
150
+ `Required hosted bindings for ${found.path} did not resolve: ${found.slot.$dynamic.requiredBindings?.map((item) => item.name).join(", ")}`
151
+ );
148
152
  if (subscribed) checkEnvironmentProvider(args.manifest, found.path, raw);
149
153
  normalized[found.path] = validateSlotValue(found.path, raw) ?? FIELD_DEFAULTS.get(found.path) ?? null;
150
154
  values[found.path] = slotKindOf(found.path) === "sandbox-environment" /* SandboxEnvironment */ ? raw : normalized[found.path] ?? null;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/resolve.ts"],
4
- "sourcesContent": ["import {\n findDynamicSlots,\n formatProviderRef,\n instructionFragmentSchema,\n isDynamicSlot,\n jsonObjectSchema,\n jsonValueSchema,\n mcpServerBindingSchema,\n ProviderRefKind,\n providerRefSchema,\n resolvedAgentManifestSchema,\n sandboxBindingSchema,\n skillBundleSchema,\n type AgentManifestIface,\n type DynamicEvent,\n type DynamicSlotIface,\n type JsonValue,\n type ResolvedAgentManifestIface,\n} from '@finalai/agent-provider';\nimport * as z from 'zod';\n\n// Resolves a static manifest's dynamic slots for one session. The session service runs each resolver in the agent's isolate; this\n// helper decides which slots run at a boundary, validates each output against\n// the static field's schema, and splices the results in.\n\nexport type ResolveSlot = (slot: DynamicSlotIface, path: string) => Promise<JsonValue | null>;\n\nexport interface ResolveManifestArgsIface {\n manifest: AgentManifestIface;\n event: DynamicEvent;\n resolve: ResolveSlot;\n // Values from an earlier boundary (session.started values at turn.started),\n // used for slots that do not resolve at this event.\n previous?: Record<string, JsonValue | null>;\n}\n\nexport interface ResolvedManifestDetailIface {\n manifest: ResolvedAgentManifestIface;\n // Slot path \u2192 resolved value, for agent.session_manifests and later boundaries.\n values: Record<string, JsonValue | null>;\n}\n\nexport enum SlotValueKind {\n InstructionFragment = 'instruction-fragment',\n SkillBundle = 'skill-bundle',\n McpServers = 'mcp-servers',\n Sandboxes = 'sandboxes',\n SandboxEnvironment = 'sandbox-environment',\n Opaque = 'opaque',\n}\n\nexport const slotKindOf = (path: string): SlotValueKind => {\n if (/^harness\\.config\\.instructions\\[\\d+\\]$/.test(path)) return SlotValueKind.InstructionFragment;\n if (/^harness\\.config\\.skills\\[\\d+\\]$/.test(path)) return SlotValueKind.SkillBundle;\n if (path === 'mcpServers') return SlotValueKind.McpServers;\n if (path === 'sandboxes') return SlotValueKind.Sandboxes;\n if (/^sandboxes\\.[^.]+\\.environment$/.test(path)) return SlotValueKind.SandboxEnvironment;\n return SlotValueKind.Opaque;\n};\n\nconst resolvedSandboxesSchema = z.record(\n z.string(),\n sandboxBindingSchema.extend({ environment: jsonValueSchema }),\n);\n\nconst issueText = (error: z.ZodError): string =>\n error.issues.map((issue) => `${issue.path.join('.') || 'value'}: ${issue.message}`).join('; ');\n\nconst invalid = (path: string, detail: string): Error =>\n new Error(`dynamic slot ${path} resolved to an invalid value: ${detail}`);\n\nconst parseAs = <T extends z.ZodType>(schema: T, value: JsonValue, path: string): JsonValue => {\n const parsed = schema.safeParse(value);\n if (!parsed.success) throw invalid(path, issueText(parsed.error));\n return jsonValueSchema.parse(parsed.data);\n};\n\nconst isRecord = (value: JsonValue): value is { [key: string]: JsonValue } =>\n jsonObjectSchema.safeParse(value).success;\n\nconst roleless = z.looseObject({ role: z.null().optional() });\nconst environmentResultSchema = z.looseObject({\n providerName: z.string(),\n providerRef: jsonValueSchema.optional(),\n options: jsonValueSchema.optional(),\n openOptions: jsonValueSchema.optional(),\n});\n\n// Instruction results without a role ({ content }) default to system;\n// environment-shaped results normalize to their options.\nexport const validateSlotValue = (\n path: string,\n value: JsonValue | null,\n manifest?: AgentManifestIface,\n): JsonValue | null => {\n if (value == null) return null;\n switch (slotKindOf(path)) {\n case SlotValueKind.InstructionFragment: {\n if (isRecord(value) && roleless.safeParse(value).success) {\n return parseAs(instructionFragmentSchema, { ...value, role: 'system' }, path);\n }\n return parseAs(instructionFragmentSchema, value, path);\n }\n case SlotValueKind.SkillBundle:\n return Array.isArray(value)\n ? parseAs(z.array(skillBundleSchema), value, path)\n : parseAs(skillBundleSchema, value, path);\n case SlotValueKind.McpServers:\n return parseAs(z.array(mcpServerBindingSchema), value, path);\n case SlotValueKind.Sandboxes:\n return parseAs(resolvedSandboxesSchema, value, path);\n case SlotValueKind.SandboxEnvironment:\n if (manifest != null) checkEnvironmentProvider(manifest, path, value);\n const environment = environmentResultSchema.safeParse(value);\n if (environment.success && environment.data.openOptions != null)\n parseAs(\n sandboxBindingSchema.pick({ access: true, attach: true }).partial(),\n environment.data.openOptions,\n path,\n );\n return environment.success ? (environment.data.options ?? null) : value;\n case SlotValueKind.Opaque:\n return value;\n }\n};\n\nconst childPath = (parent: string, key: string | number): string => {\n if (z.number().safeParse(key).success) return `${parent}[${key}]`;\n return parent.length === 0 ? `${key}` : `${parent}.${key}`;\n};\n\n// Like replaceDynamicSlots, except that an array-item slot that resolved to\n// an array (several skills from one resolver) splices all of them in, and an\n// object field that resolved to null is omitted.\nconst splice = (\n value: JsonValue,\n values: Record<string, JsonValue | null>,\n path: string,\n): JsonValue => {\n if (isDynamicSlot(value)) return values[path] ?? null;\n if (Array.isArray(value)) {\n const out: JsonValue[] = [];\n value.forEach((item, index) => {\n const itemPath = childPath(path, index);\n if (isDynamicSlot(item)) {\n const resolved = values[itemPath];\n if (resolved == null) return;\n if (Array.isArray(resolved) && slotKindOf(itemPath) === SlotValueKind.SkillBundle)\n out.push(...resolved);\n else out.push(resolved);\n return;\n }\n out.push(splice(item, values, itemPath));\n });\n return out;\n }\n if (isRecord(value)) {\n const out: { [key: string]: JsonValue } = {};\n for (const [key, item] of Object.entries(value)) {\n const itemPath = childPath(path, key);\n // A config field whose resolver returned null is left out, so the\n // harness applies its own default; required fields keep their value.\n if (isDynamicSlot(item) && values[itemPath] == null && !KEEP_NULL.test(itemPath)) continue;\n out[key] = splice(item, values, itemPath);\n }\n return out;\n }\n return value;\n};\n\nconst KEEP_NULL = /^(sandboxes\\.[^.]+\\.environment)$/;\n\nconst FIELD_DEFAULTS = new Map<string, JsonValue>([\n ['mcpServers', []],\n ['sandboxes', {}],\n ['harness.config', {}],\n]);\n\n// A dynamic sandbox environment must be one of its binding's provider (the\n// compiler may have inferred that provider).\n\nconst checkEnvironmentProvider = (\n manifest: AgentManifestIface,\n path: string,\n value: JsonValue | null,\n): void => {\n if (slotKindOf(path) !== SlotValueKind.SandboxEnvironment || value == null) return;\n const returned = environmentResultSchema.safeParse(value);\n if (!returned.success) return;\n const target = path.slice('sandboxes.'.length, -'.environment'.length);\n const sandboxes = z.record(z.string(), sandboxBindingSchema).safeParse(manifest.sandboxes);\n const provider = sandboxes.success ? sandboxes.data[target]?.provider : undefined;\n if (provider == null) return;\n const returnedRef = providerRefSchema.safeParse(returned.data.providerRef);\n const mismatch = returnedRef.success\n ? formatProviderRef(returnedRef.data) !== formatProviderRef(provider)\n : // A bundle provider's environment carries only its name; installed ones are named for their specifier.\n provider.kind === ProviderRefKind.Package;\n if (mismatch) {\n throw invalid(\n path,\n `returned a ${returned.data.providerName} environment for a ${formatProviderRef(provider)} target`,\n );\n }\n};\n\nexport const resolveManifestDetailed = async (\n args: ResolveManifestArgsIface,\n): Promise<ResolvedManifestDetailIface> => {\n const manifestJson = jsonValueSchema.parse(args.manifest);\n const slots = findDynamicSlots(manifestJson);\n const values: Record<string, JsonValue | null> = {};\n const normalized: Record<string, JsonValue | null> = {};\n for (const found of slots) {\n const subscribed = found.slot.$dynamic.events.includes(args.event);\n const raw = subscribed\n ? await args.resolve(found.slot, found.path)\n : (args.previous?.[found.path] ?? null);\n if (subscribed) checkEnvironmentProvider(args.manifest, found.path, raw);\n normalized[found.path] =\n validateSlotValue(found.path, raw) ?? FIELD_DEFAULTS.get(found.path) ?? null;\n // Retain the descriptor so a later boundary preserves its open options too.\n values[found.path] =\n slotKindOf(found.path) === SlotValueKind.SandboxEnvironment\n ? raw\n : (normalized[found.path] ?? null);\n }\n const spliced = splice(manifestJson, normalized, '');\n const parsed = resolvedAgentManifestSchema.safeParse(spliced);\n if (!parsed.success) throw new Error(`resolved manifest is invalid: ${issueText(parsed.error)}`);\n const openOptionsSchema = sandboxBindingSchema.pick({ access: true, attach: true }).partial();\n for (const [path, raw] of Object.entries(values)) {\n if (slotKindOf(path) !== SlotValueKind.SandboxEnvironment) continue;\n const environment = environmentResultSchema.safeParse(raw);\n if (!environment.success || environment.data.openOptions == null) continue;\n const options = openOptionsSchema.safeParse(environment.data.openOptions);\n if (!options.success) throw invalid(path, issueText(options.error));\n const target = path.slice('sandboxes.'.length, -'.environment'.length);\n const binding = parsed.data.sandboxes[target];\n if (binding != null) parsed.data.sandboxes[target] = { ...binding, ...options.data };\n }\n return { manifest: parsed.data, values };\n};\n\nexport const resolveManifest = async (\n args: ResolveManifestArgsIface,\n): Promise<ResolvedAgentManifestIface> => (await resolveManifestDetailed(args)).manifest;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n findDynamicSlots,\n formatProviderRef,\n instructionFragmentSchema,\n isDynamicSlot,\n jsonObjectSchema,\n jsonValueSchema,\n mcpServerBindingSchema,\n ProviderRefKind,\n providerRefSchema,\n resolvedAgentManifestSchema,\n sandboxBindingSchema,\n skillBundleSchema,\n type AgentManifestIface,\n type DynamicEvent,\n type DynamicSlotIface,\n type JsonValue,\n type ResolvedAgentManifestIface,\n} from '@finalai/agent-provider';\nimport * as z from 'zod';\n\n// Resolves a static manifest's dynamic slots for one session. The session service runs each resolver in the agent's isolate; this\n// helper decides which slots run at a boundary, validates each output against\n// the static field's schema, and splices the results in.\n\nexport type ResolveSlot = (slot: DynamicSlotIface, path: string) => Promise<JsonValue | null>;\n\nexport interface ResolveManifestArgsIface {\n manifest: AgentManifestIface;\n event: DynamicEvent;\n resolve: ResolveSlot;\n // Values from an earlier boundary (session.started values at turn.started),\n // used for slots that do not resolve at this event.\n previous?: Record<string, JsonValue | null>;\n}\n\nexport interface ResolvedManifestDetailIface {\n manifest: ResolvedAgentManifestIface;\n // Slot path \u2192 resolved value, for agent.session_manifests and later boundaries.\n values: Record<string, JsonValue | null>;\n}\n\nexport enum SlotValueKind {\n InstructionFragment = 'instruction-fragment',\n SkillBundle = 'skill-bundle',\n McpServers = 'mcp-servers',\n Sandboxes = 'sandboxes',\n SandboxEnvironment = 'sandbox-environment',\n Opaque = 'opaque',\n}\n\nexport const slotKindOf = (path: string): SlotValueKind => {\n if (/^harness\\.config\\.instructions\\[\\d+\\]$/.test(path)) return SlotValueKind.InstructionFragment;\n if (/^harness\\.config\\.skills\\[\\d+\\]$/.test(path)) return SlotValueKind.SkillBundle;\n if (path === 'mcpServers') return SlotValueKind.McpServers;\n if (path === 'sandboxes') return SlotValueKind.Sandboxes;\n if (/^sandboxes\\.[^.]+\\.environment$/.test(path)) return SlotValueKind.SandboxEnvironment;\n return SlotValueKind.Opaque;\n};\n\nconst resolvedSandboxesSchema = z.record(\n z.string(),\n sandboxBindingSchema.extend({ environment: jsonValueSchema }),\n);\n\nconst issueText = (error: z.ZodError): string =>\n error.issues.map((issue) => `${issue.path.join('.') || 'value'}: ${issue.message}`).join('; ');\n\nconst invalid = (path: string, detail: string): Error =>\n new Error(`dynamic slot ${path} resolved to an invalid value: ${detail}`);\n\nconst parseAs = <T extends z.ZodType>(schema: T, value: JsonValue, path: string): JsonValue => {\n const parsed = schema.safeParse(value);\n if (!parsed.success) throw invalid(path, issueText(parsed.error));\n return jsonValueSchema.parse(parsed.data);\n};\n\nconst isRecord = (value: JsonValue): value is { [key: string]: JsonValue } =>\n jsonObjectSchema.safeParse(value).success;\n\nconst roleless = z.looseObject({ role: z.null().optional() });\nconst environmentResultSchema = z.looseObject({\n providerName: z.string(),\n providerRef: jsonValueSchema.optional(),\n options: jsonValueSchema.optional(),\n openOptions: jsonValueSchema.optional(),\n});\n\n// Instruction results without a role ({ content }) default to system;\n// environment-shaped results normalize to their options.\nexport const validateSlotValue = (\n path: string,\n value: JsonValue | null,\n manifest?: AgentManifestIface,\n): JsonValue | null => {\n if (value == null) return null;\n switch (slotKindOf(path)) {\n case SlotValueKind.InstructionFragment: {\n if (isRecord(value) && roleless.safeParse(value).success) {\n return parseAs(instructionFragmentSchema, { ...value, role: 'system' }, path);\n }\n return parseAs(instructionFragmentSchema, value, path);\n }\n case SlotValueKind.SkillBundle:\n return Array.isArray(value)\n ? parseAs(z.array(skillBundleSchema), value, path)\n : parseAs(skillBundleSchema, value, path);\n case SlotValueKind.McpServers:\n return parseAs(z.array(mcpServerBindingSchema), value, path);\n case SlotValueKind.Sandboxes:\n return parseAs(resolvedSandboxesSchema, value, path);\n case SlotValueKind.SandboxEnvironment:\n if (manifest != null) checkEnvironmentProvider(manifest, path, value);\n const environment = environmentResultSchema.safeParse(value);\n if (environment.success && environment.data.openOptions != null)\n parseAs(\n sandboxBindingSchema.pick({ access: true, attach: true }).partial(),\n environment.data.openOptions,\n path,\n );\n return environment.success ? (environment.data.options ?? null) : value;\n case SlotValueKind.Opaque:\n return value;\n }\n};\n\nconst childPath = (parent: string, key: string | number): string => {\n if (z.number().safeParse(key).success) return `${parent}[${key}]`;\n return parent.length === 0 ? `${key}` : `${parent}.${key}`;\n};\n\n// Like replaceDynamicSlots, except that an array-item slot that resolved to\n// an array (several skills from one resolver) splices all of them in, and an\n// object field that resolved to null is omitted.\nconst splice = (\n value: JsonValue,\n values: Record<string, JsonValue | null>,\n path: string,\n): JsonValue => {\n if (isDynamicSlot(value)) return values[path] ?? null;\n if (Array.isArray(value)) {\n const out: JsonValue[] = [];\n value.forEach((item, index) => {\n const itemPath = childPath(path, index);\n if (isDynamicSlot(item)) {\n const resolved = values[itemPath];\n if (resolved == null) return;\n if (Array.isArray(resolved) && slotKindOf(itemPath) === SlotValueKind.SkillBundle)\n out.push(...resolved);\n else out.push(resolved);\n return;\n }\n out.push(splice(item, values, itemPath));\n });\n return out;\n }\n if (isRecord(value)) {\n const out: { [key: string]: JsonValue } = {};\n for (const [key, item] of Object.entries(value)) {\n const itemPath = childPath(path, key);\n // A config field whose resolver returned null is left out, so the\n // harness applies its own default; required fields keep their value.\n if (isDynamicSlot(item) && values[itemPath] == null && !KEEP_NULL.test(itemPath)) continue;\n out[key] = splice(item, values, itemPath);\n }\n return out;\n }\n return value;\n};\n\nconst KEEP_NULL = /^(sandboxes\\.[^.]+\\.environment)$/;\n\nconst FIELD_DEFAULTS = new Map<string, JsonValue>([\n ['mcpServers', []],\n ['sandboxes', {}],\n ['harness.config', {}],\n]);\n\n// A dynamic sandbox environment must be one of its binding's provider (the\n// compiler may have inferred that provider).\n\nconst checkEnvironmentProvider = (\n manifest: AgentManifestIface,\n path: string,\n value: JsonValue | null,\n): void => {\n if (slotKindOf(path) !== SlotValueKind.SandboxEnvironment || value == null) return;\n const returned = environmentResultSchema.safeParse(value);\n if (!returned.success) return;\n const target = path.slice('sandboxes.'.length, -'.environment'.length);\n const sandboxes = z.record(z.string(), sandboxBindingSchema).safeParse(manifest.sandboxes);\n const provider = sandboxes.success ? sandboxes.data[target]?.provider : undefined;\n if (provider == null) return;\n const returnedRef = providerRefSchema.safeParse(returned.data.providerRef);\n const mismatch = returnedRef.success\n ? formatProviderRef(returnedRef.data) !== formatProviderRef(provider)\n : // A bundle provider's environment carries only its name; installed ones are named for their specifier.\n provider.kind === ProviderRefKind.Package;\n if (mismatch) {\n throw invalid(\n path,\n `returned a ${returned.data.providerName} environment for a ${formatProviderRef(provider)} target`,\n );\n }\n};\n\nexport const resolveManifestDetailed = async (\n args: ResolveManifestArgsIface,\n): Promise<ResolvedManifestDetailIface> => {\n const manifestJson = jsonValueSchema.parse(args.manifest);\n const slots = findDynamicSlots(manifestJson);\n const values: Record<string, JsonValue | null> = {};\n const normalized: Record<string, JsonValue | null> = {};\n for (const found of slots) {\n const subscribed = found.slot.$dynamic.events.includes(args.event);\n const raw = subscribed\n ? await args.resolve(found.slot, found.path)\n : (args.previous?.[found.path] ?? null);\n if ((found.slot.$dynamic.requiredBindings?.length ?? 0) > 0 && raw == null)\n throw new Error(\n `Required hosted bindings for ${found.path} did not resolve: ${found.slot.$dynamic.requiredBindings?.map((item) => item.name).join(', ')}`,\n );\n if (subscribed) checkEnvironmentProvider(args.manifest, found.path, raw);\n normalized[found.path] =\n validateSlotValue(found.path, raw) ?? FIELD_DEFAULTS.get(found.path) ?? null;\n // Retain the descriptor so a later boundary preserves its open options too.\n values[found.path] =\n slotKindOf(found.path) === SlotValueKind.SandboxEnvironment\n ? raw\n : (normalized[found.path] ?? null);\n }\n const spliced = splice(manifestJson, normalized, '');\n const parsed = resolvedAgentManifestSchema.safeParse(spliced);\n if (!parsed.success) throw new Error(`resolved manifest is invalid: ${issueText(parsed.error)}`);\n const openOptionsSchema = sandboxBindingSchema.pick({ access: true, attach: true }).partial();\n for (const [path, raw] of Object.entries(values)) {\n if (slotKindOf(path) !== SlotValueKind.SandboxEnvironment) continue;\n const environment = environmentResultSchema.safeParse(raw);\n if (!environment.success || environment.data.openOptions == null) continue;\n const options = openOptionsSchema.safeParse(environment.data.openOptions);\n if (!options.success) throw invalid(path, issueText(options.error));\n const target = path.slice('sandboxes.'.length, -'.environment'.length);\n const binding = parsed.data.sandboxes[target];\n if (binding != null) parsed.data.sandboxes[target] = { ...binding, ...options.data };\n }\n return { manifest: parsed.data, values };\n};\n\nexport const resolveManifest = async (\n args: ResolveManifestArgsIface,\n): Promise<ResolvedAgentManifestIface> => (await resolveManifestDetailed(args)).manifest;\n"],
5
+ "mappings": "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",
6
6
  "names": ["SlotValueKind"]
7
7
  }
@@ -1,3 +1,8 @@
1
+ import {
2
+ agentAvatarSchema,
3
+ jsonValueSchema,
4
+ hostedBindingRequirementSchema
5
+ } from "@finalai/agent-provider";
1
6
  import * as z from "zod";
2
7
  import {
3
8
  AuthoredKind,
@@ -61,7 +66,8 @@ const describeDynamic = (value) => {
61
66
  events: dynamicEventsOf(value),
62
67
  description: stringOrNull(fieldOf(value, "description")),
63
68
  preview: stringOrNull(fieldOf(value, "preview")),
64
- provider: hint
69
+ provider: hint,
70
+ requiredBindings: z.array(hostedBindingRequirementSchema).parse(fieldOf(value, "requiredBindings") ?? [])
65
71
  };
66
72
  };
67
73
  const collectAgentDynamics = (agent) => {
@@ -88,13 +94,15 @@ const dynamicSlot = (value, path) => {
88
94
  const slot = { resolver: `${AGENT_DYNAMIC_PREFIX}${path}`, events: described.events };
89
95
  if (described.description != null) slot["description"] = described.description;
90
96
  if (described.preview != null) slot["preview"] = described.preview;
97
+ if ((described.requiredBindings?.length ?? 0) > 0)
98
+ slot["requiredBindings"] = jsonValueSchema.parse(described.requiredBindings);
91
99
  return { $dynamic: slot };
92
100
  };
93
101
  const isDefinedHarnessLike = (value) => isCallable(value) && isCallable(fieldOf(value, "describe")) && isCallable(fieldOf(value, "open"));
94
102
  const KNOWN_AGENT_FIELDS = /* @__PURE__ */ new Set([
95
103
  "name",
96
104
  "description",
97
- "avatarUrl",
105
+ "avatar",
98
106
  "harness",
99
107
  "tools",
100
108
  "toolPolicy",
@@ -121,7 +129,7 @@ const unknownAgentField = (key) => {
121
129
  if (key === "defaultTools")
122
130
  return "agent.ts field defaultTools is not supported: base tools are declared with tools: baseTools({ ... }) and are off by default";
123
131
  if (key === "subagents" || key === "memory") return `agent.ts field ${key} is not supported yet`;
124
- return `agent.ts field ${key} is not an agent field (name, description, avatarUrl, harness, tools, toolPolicy, secrets, channels)`;
132
+ return `agent.ts field ${key} is not an agent field (name, description, avatar, harness, tools, toolPolicy, secrets, channels)`;
125
133
  };
126
134
  const describeHarness = (harness, ctx, issues) => {
127
135
  if (harness == null) return null;
@@ -191,6 +199,19 @@ const describeSecrets = (value, issues) => {
191
199
  issues.push(error("agent.ts secrets must be a list of secret names"));
192
200
  return null;
193
201
  };
202
+ const describeAvatar = (value, issues) => {
203
+ if (value === void 0) return null;
204
+ const parsed = agentAvatarSchema.safeParse(toJson(value, { path: "avatar", issues }));
205
+ if (parsed.success) return parsed.data;
206
+ for (const issue of parsed.error.issues) {
207
+ issues.push(
208
+ error(
209
+ `agent.ts avatar${issue.path.length > 0 ? `.${issue.path.join(".")}` : ""}: ${issue.message}`
210
+ )
211
+ );
212
+ }
213
+ return null;
214
+ };
194
215
  const describeAgent = (value, ctx, issues) => {
195
216
  if (value == null) return null;
196
217
  if (!isPlainObject(value)) {
@@ -229,7 +250,7 @@ const describeAgent = (value, ctx, issues) => {
229
250
  type: "agent",
230
251
  name: stringOrNull(value["name"]),
231
252
  description: stringOrNull(value["description"]),
232
- avatarUrl: stringOrNull(value["avatarUrl"]),
253
+ avatar: describeAvatar(value["avatar"], issues),
233
254
  harness: describeHarness(value["harness"], ctx, issues),
234
255
  tools: baseToolsDescription?.targets ?? null,
235
256
  hostTools: baseToolsDescription?.host ?? null,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/runtime/describe.ts"],
4
- "sourcesContent": ["import type { JsonObject, JsonValue } from '@finalai/agent-provider';\nimport * as z from 'zod';\nimport {\n AuthoredKind,\n authoredKindOf,\n pendingEntries,\n pendingExportName,\n} from \"../authoring/brand.mjs\";\nimport type {\n DescribedAgentIface,\n DescribedBundleIface,\n DescribedDynamicIface,\n DescribedModuleIface,\n DescribedSandboxIface,\n DescribedSandboxTargetIface,\n DescribedValue,\n} from \"./described.mjs\";\nimport {\n AGENT_DYNAMIC_PREFIX,\n COMBINED_MCP_SERVERS_EXPORT,\n namedExportName,\n SlotKind,\n type LayoutModuleIface,\n} from \"./layout.mjs\";\nimport {\n childPath,\n dynamicEventsOf,\n error,\n isDynamicSentinel,\n isEnvironmentLike,\n isOpenRequestLike,\n lowerConnection,\n lowerEnvironment,\n lowerInstructions,\n lowerSkill,\n lowerTool,\n note,\n sandboxProviderNameOf,\n toJson,\n type IssueIface,\n} from \"./lower.mjs\";\nimport {\n entriesOf,\n fieldOf,\n isCallable,\n isObjectLike,\n isPlainObject,\n isPromiseLike,\n isString,\n messageOf,\n stringOrNull,\n type AuthoredRecord,\n type AuthoredValue,\n} from \"./values.mjs\";\n\n// Static extraction, run inside the realm that evaluated the bundle. Reads\n// authored values; never calls tool bodies, resolvers or routes, and calls a\n// sandbox selector only to read the request a synchronous one returns.\n\nexport interface NamespaceEntryIface {\n layout: LayoutModuleIface;\n namespace: AuthoredRecord;\n}\n\nexport const describeDynamic = (value: AuthoredValue): DescribedDynamicIface => {\n const provider = fieldOf(value, 'provider');\n let hint: DescribedDynamicIface['provider'] = null;\n if (provider != null) {\n const kind = fieldOf(provider, 'kind');\n const ref = fieldOf(provider, 'providerRef');\n const issues: IssueIface[] = [];\n if ((kind === 'package' || kind === 'bundle') && provider != null) {\n hint = { ref: toJson(provider, { path: 'provider', issues }), name: null };\n } else if (ref != null) {\n hint = { ref: toJson(ref, { path: 'provider', issues }), name: null };\n } else {\n hint = {\n ref: null,\n name:\n stringOrNull(fieldOf(provider, 'name')) ??\n stringOrNull(fieldOf(fieldOf(provider, 'definition'), 'name')),\n };\n }\n }\n return {\n type: 'dynamic',\n events: dynamicEventsOf(value),\n description: stringOrNull(fieldOf(value, 'description')),\n preview: stringOrNull(fieldOf(value, 'preview')),\n provider: hint,\n };\n};\n\n// Dynamic sentinels inside agent.ts's harness config, addressed by their authored path. The bundle exports each as\n// `agent:<path>`.\nexport const collectAgentDynamics = (\n agent: AuthoredValue,\n): { path: string; value: AuthoredValue }[] => {\n const found: { path: string; value: AuthoredValue }[] = [];\n const walk = (value: AuthoredValue, path: string, depth: number): void => {\n if (depth > 32) return;\n if (isDynamicSentinel(value)) {\n found.push({ path, value });\n return;\n }\n if (Array.isArray(value)) {\n value.forEach((item, index) => walk(item, childPath(path, index), depth + 1));\n return;\n }\n if (isPlainObject(value) || authoredKindOf(value) != null) {\n for (const [key, item] of entriesOf(value)) walk(item, childPath(path, key), depth + 1);\n }\n };\n walk(fieldOf(fieldOf(agent, 'harness'), 'config'), 'harness.config', 0);\n return found;\n};\n\nconst dynamicSlot = (value: AuthoredValue, path: string): JsonValue => {\n const described = describeDynamic(value);\n const slot: JsonObject = { resolver: `${AGENT_DYNAMIC_PREFIX}${path}`, events: described.events };\n if (described.description != null) slot['description'] = described.description;\n if (described.preview != null) slot['preview'] = described.preview;\n return { $dynamic: slot };\n};\n\nconst isDefinedHarnessLike = (value: AuthoredValue): boolean =>\n isCallable(value) && isCallable(fieldOf(value, 'describe')) && isCallable(fieldOf(value, 'open'));\n\nconst KNOWN_AGENT_FIELDS: ReadonlySet<string> = new Set([\n 'name',\n 'description',\n 'avatarUrl',\n 'harness',\n 'tools',\n 'toolPolicy',\n 'secrets',\n 'channels',\n]);\n\n// Harness configuration belongs in the harness binding rather than top-level agent fields.\nconst HARNESS_CONFIG_FIELDS: ReadonlySet<string> = new Set([\n 'model',\n 'reasoning',\n 'credentials',\n 'permissions',\n 'permissionMode',\n 'instructions',\n 'skills',\n 'system',\n 'temperature',\n 'providerOptions',\n 'maxSteps',\n 'stopWhen',\n]);\n\nconst unknownAgentField = (key: string): string => {\n if (HARNESS_CONFIG_FIELDS.has(key))\n return `agent.ts field ${key} belongs in harness config (harness: serverlessPi({ ${key}: ... }))`;\n if (key === 'defaultTools')\n return 'agent.ts field defaultTools is not supported: base tools are declared with tools: baseTools({ ... }) and are off by default';\n if (key === 'subagents' || key === 'memory') return `agent.ts field ${key} is not supported yet`;\n return `agent.ts field ${key} is not an agent field (name, description, avatarUrl, harness, tools, toolPolicy, secrets, channels)`;\n};\n\ninterface DescribeContextIface {\n entries: NamespaceEntryIface[];\n sandboxIdentity: Map<AuthoredValue, string>;\n}\n\nconst describeHarness = (\n harness: AuthoredValue,\n ctx: DescribeContextIface,\n issues: IssueIface[],\n): DescribedAgentIface['harness'] => {\n if (harness == null) return null;\n const ref = fieldOf(harness, 'harness');\n if (!isObjectLike(ref)) {\n issues.push(error('agent.ts harness must be a harness binding, e.g. serverlessPi({ ... })'));\n return null;\n }\n let refJson = toJson(ref, { path: 'harness.harness', issues });\n if (fieldOf(ref, 'kind') === 'bundle' && fieldOf(ref, 'export') === '<pending>') {\n const candidates = ctx.entries.flatMap((entry) =>\n Object.entries(entry.namespace)\n .filter(([, value]) => isDefinedHarnessLike(value))\n .map(([name]) => namedExportName(entry.layout.base, name)),\n );\n if (candidates.length === 1 && candidates[0] != null)\n refJson = { kind: 'bundle', export: candidates[0] };\n else\n issues.push(\n error(\n 'the custom harness must come from defineHarness in @finalai/agents, or be exported once',\n ),\n );\n }\n const config = toJson(fieldOf(harness, 'config') ?? {}, {\n path: 'harness.config',\n issues,\n visit: (value, path) => (isDynamicSentinel(value) ? dynamicSlot(value, path) : undefined),\n });\n return { harness: refJson, config };\n};\n\n// Capabilities bound to sandbox targets (by export name) and those declared on\n// the harness's own host (`harnessHost`).\nconst describeBaseTools = (\n tools: AuthoredValue,\n ctx: DescribeContextIface,\n issues: IssueIface[],\n): { targets: Record<string, string>; host: string[] } | null => {\n if (tools == null) return null;\n if (authoredKindOf(tools) !== AuthoredKind.BaseTools) {\n issues.push(error('agent.ts tools must be baseTools({ shell: target, files: target, ... })'));\n return null;\n }\n const base = fieldOf(tools, 'base');\n const out: Record<string, string> = {};\n const host: string[] = [];\n if (!isPlainObject(base)) return { targets: out, host };\n for (const [capability, target] of Object.entries(base)) {\n if (target == null) continue;\n if (authoredKindOf(target) === AuthoredKind.HarnessHost) {\n host.push(capability);\n continue;\n }\n if (isString(target)) {\n out[capability] = target;\n continue;\n }\n const name = ctx.sandboxIdentity.get(target);\n if (name == null) {\n issues.push(\n error(\n `baseTools ${capability} is bound to a value that is not a sandbox target exported from sandbox.ts`,\n ),\n );\n continue;\n }\n out[capability] = name;\n }\n return { targets: out, host };\n};\n\nconst describeSecrets = (value: AuthoredValue, issues: IssueIface[]): string[] | null => {\n if (value == null) return null;\n const parsed = z.array(z.string().min(1)).safeParse(value);\n if (parsed.success) return parsed.data;\n issues.push(error('agent.ts secrets must be a list of secret names'));\n return null;\n};\n\nconst describeAgent = (\n value: AuthoredValue,\n ctx: DescribeContextIface,\n issues: IssueIface[],\n): DescribedAgentIface | null => {\n if (value == null) return null;\n if (!isPlainObject(value)) {\n issues.push(error('agent.ts must export defineAgent({ ... }) as its default export'));\n return null;\n }\n for (const key of Object.keys(value)) {\n if (!KNOWN_AGENT_FIELDS.has(key)) issues.push(error(unknownAgentField(key)));\n }\n const toolPolicyRaw = value['toolPolicy'];\n let toolPolicy: Record<string, string> | null = null;\n if (isPlainObject(toolPolicyRaw)) {\n toolPolicy = {};\n for (const [key, policy] of Object.entries(toolPolicyRaw)) {\n if (policy === 'allow' || policy === 'ask') toolPolicy[key] = policy;\n else issues.push(error(`agent.ts toolPolicy.${key} must be 'allow' or 'ask'`));\n }\n }\n const channelsRaw = value['channels'];\n let channels: DescribedAgentIface['channels'] = null;\n if (Array.isArray(channelsRaw)) {\n channels = channelsRaw.map((binding, index) => ({\n key: stringOrNull(fieldOf(binding, 'key')),\n channel: toJson(fieldOf(binding, 'channel') ?? null, {\n path: `channels[${index}].channel`,\n issues,\n }),\n config: toJson(fieldOf(binding, 'config') ?? {}, {\n path: `channels[${index}].config`,\n issues,\n }),\n }));\n }\n const baseToolsDescription = describeBaseTools(value['tools'], ctx, issues);\n return {\n type: 'agent',\n name: stringOrNull(value['name']),\n description: stringOrNull(value['description']),\n avatarUrl: stringOrNull(value['avatarUrl']),\n harness: describeHarness(value['harness'], ctx, issues),\n tools: baseToolsDescription?.targets ?? null,\n hostTools: baseToolsDescription?.host ?? null,\n toolPolicy,\n secrets: describeSecrets(value['secrets'], issues),\n channels,\n };\n};\n\nconst probeSelector = (selector: AuthoredValue, issues: IssueIface[]): AuthoredValue | null => {\n if (!isCallable(selector)) return null;\n try {\n const result = selector({\n session: null,\n secrets: { get: async () => null },\n open: async () => {\n throw new Error('sandboxes do not open while compiling');\n },\n });\n if (isEnvironmentLike(result) || isOpenRequestLike(result)) return result;\n // An async selector: what it opens is known only at session start.\n if (isPromiseLike(result)) Promise.resolve(result).catch(() => undefined);\n return null;\n } catch (cause) {\n issues.push(\n error(\n `sandbox.ts selector failed during compilation: ${String(cause)}; export its environment when it needs session context`,\n ),\n );\n return null;\n }\n};\n\nconst describeSandbox = (\n namespace: AuthoredRecord,\n issues: IssueIface[],\n): DescribedSandboxIface => {\n const targets: Record<string, DescribedSandboxTargetIface> = {};\n const providers: Record<string, string> = {};\n const describeTarget = (\n value: AuthoredValue,\n exportName: string,\n path: string,\n ): DescribedSandboxTargetIface | null => {\n if (isDynamicSentinel(value))\n return { exportName, environment: null, dynamic: describeDynamic(value) };\n if (isEnvironmentLike(value) || isOpenRequestLike(value)) {\n return { exportName, environment: lowerEnvironment(value, path, issues), dynamic: null };\n }\n return null;\n };\n for (const [name, value] of Object.entries(namespace)) {\n if (name === 'default') continue;\n const exportName = namedExportName('sandbox', name);\n const providerName = sandboxProviderNameOf(value);\n if (providerName != null) {\n providers[exportName] = providerName;\n continue;\n }\n const target = describeTarget(value, exportName, `sandbox.ts ${name}`);\n if (target != null) targets[name] = target;\n }\n const named = Object.keys(targets);\n const fallback = describeTarget(namespace['default'], 'sandbox', 'sandbox.ts default export');\n const selector = authoredKindOf(namespace['default']) === AuthoredKind.SandboxSelector;\n if (fallback != null) targets['default'] = fallback;\n else if (namespace['default'] != null && !selector) {\n issues.push(\n error(\n 'sandbox.ts default export must be defineSandbox(selector), an environment, or defineDynamic(...)',\n ),\n );\n }\n // A selector that opens an environment it creates itself\n // (`defineSandbox(() => computer().open())`) names no export\n // to bind; a synchronous one is called once to read the request it returns,\n // which becomes the default target.\n if (selector && named.length === 0 && fallback == null) {\n const opened = probeSelector(namespace['default'], issues);\n if (opened != null) {\n targets['default'] = {\n exportName: 'sandbox',\n environment: lowerEnvironment(opened, 'sandbox.ts default export', issues),\n dynamic: null,\n };\n }\n }\n let defaultTarget: string | null = null;\n if (targets['default'] != null) defaultTarget = 'default';\n else if (named.length === 1) defaultTarget = named[0] ?? null;\n if (selector && defaultTarget == null) {\n issues.push(\n error(\n named.length === 0\n ? 'sandbox.ts default export opens a sandbox but no environment is exported; export the environment it opens (export const computer = computer({ ... }))'\n : 'sandbox.ts default export opens a sandbox but several environments are exported; the selector needs exactly one',\n ),\n );\n }\n return { type: 'sandbox', targets, providers, selector, defaultTarget };\n};\n\nconst sandboxIdentityOf = (\n namespace: AuthoredRecord | null,\n sandbox: DescribedSandboxIface | null,\n): Map<AuthoredValue, string> => {\n const identity = new Map<AuthoredValue, string>();\n if (namespace == null || sandbox == null) return identity;\n for (const [name, value] of Object.entries(namespace)) {\n if (name === 'default') {\n if (sandbox.defaultTarget != null) identity.set(value, sandbox.defaultTarget);\n } else if (sandbox.targets[name] != null) identity.set(value, name);\n }\n return identity;\n};\n\nconst describeModuleValue = (\n entry: NamespaceEntryIface,\n ctx: DescribeContextIface,\n sandbox: DescribedSandboxIface | null,\n issues: IssueIface[],\n): DescribedValue | null => {\n const { layout, namespace } = entry;\n const value = namespace['default'];\n switch (layout.slot) {\n case SlotKind.Agent:\n return describeAgent(value, ctx, issues);\n case SlotKind.Sandbox:\n return sandbox;\n case SlotKind.Instructions: {\n if (isDynamicSentinel(value)) return describeDynamic(value);\n const fragment = lowerInstructions(value, null);\n if (fragment == null) {\n issues.push(\n error(\n `${layout.path} must export defineInstructions({ content, role }) or defineDynamic(...)`,\n ),\n );\n return null;\n }\n return { type: 'instructions', role: fragment.role, content: fragment.content };\n }\n case SlotKind.Skill: {\n if (isDynamicSentinel(value)) return describeDynamic(value);\n const lowered = lowerSkill({ key: layout.key, value });\n issues.push(...lowered.issues);\n return { type: 'skill', skill: toJson(lowered.skill, { path: layout.path, issues }) };\n }\n case SlotKind.Tool: {\n if (isDynamicSentinel(value)) return describeDynamic(value);\n const lowered = lowerTool({ name: layout.key, exportName: layout.base, value });\n issues.push(...lowered.issues);\n return {\n type: 'tool',\n descriptor: toJson(lowered.descriptor, { path: layout.path, issues }),\n approval: lowered.approval,\n };\n }\n case SlotKind.Connection: {\n if (isDynamicSentinel(value)) return describeDynamic(value);\n const lowered = lowerConnection({ key: layout.key, exportName: layout.base, value });\n issues.push(...lowered.issues);\n return {\n type: 'connection',\n binding: toJson(lowered.binding, { path: layout.path, issues }),\n };\n }\n case SlotKind.Schedule:\n return {\n type: 'schedule',\n cron: stringOrNull(fieldOf(value, 'cron')),\n markdown: stringOrNull(fieldOf(value, 'markdown')),\n timezone: stringOrNull(fieldOf(value, 'timezone')),\n target: stringOrNull(fieldOf(value, 'target')),\n };\n case SlotKind.Hook: {\n const events = fieldOf(value, 'events');\n return {\n type: 'hook',\n keys: entriesOf(events).map(([key]) => key),\n };\n }\n case SlotKind.Channel: {\n const routes = fieldOf(value, 'routes');\n return {\n type: 'channel',\n disabled: fieldOf(value, 'disabled') === true,\n installed: toJson(fieldOf(value, 'installed') ?? null, {\n path: `${layout.path} installed`,\n issues,\n }),\n routes: Array.isArray(routes)\n ? routes.map((route) => ({\n method: String(fieldOf(route, 'method')),\n path: String(fieldOf(route, 'path')),\n }))\n : [],\n turnPolicy: stringOrNull(fieldOf(value, 'turnPolicy')),\n config: toJson(fieldOf(value, 'config') ?? {}, { path: `${layout.path} config`, issues }),\n };\n }\n }\n};\n\nexport const describeBundle = (\n entries: NamespaceEntryIface[],\n synthesized: string[],\n): DescribedBundleIface => {\n const sandboxEntry = entries.find((entry) => entry.layout.slot === SlotKind.Sandbox) ?? null;\n const sandboxIssues: IssueIface[] = [];\n let sandbox: DescribedSandboxIface | null = null;\n if (sandboxEntry != null) {\n try {\n sandbox = describeSandbox(sandboxEntry.namespace, sandboxIssues);\n } catch (cause) {\n sandboxIssues.push(error(`sandbox.ts could not be described: ${messageOf(cause)}`));\n }\n }\n const ctx: DescribeContextIface = {\n entries,\n sandboxIdentity: sandboxIdentityOf(sandboxEntry?.namespace ?? null, sandbox),\n };\n const modules: DescribedModuleIface[] = entries.map((entry) => {\n const issues: IssueIface[] = entry.layout.slot === SlotKind.Sandbox ? sandboxIssues : [];\n const hasDefault = 'default' in entry.namespace && entry.namespace['default'] !== undefined;\n let value: DescribedValue | null = null;\n if (hasDefault || entry.layout.slot === SlotKind.Sandbox) {\n try {\n value = describeModuleValue(entry, ctx, sandbox, issues);\n } catch (cause) {\n issues.push(error(`${entry.layout.path} could not be described: ${messageOf(cause)}`));\n }\n } else if (entry.layout.slot !== SlotKind.Agent) {\n issues.push(note(`${entry.layout.path} has no default export; treated as a helper module`));\n }\n return {\n base: entry.layout.base,\n path: entry.layout.path,\n slot: entry.layout.slot,\n key: entry.layout.key,\n hasDefault,\n issues,\n value,\n };\n });\n return { modules, synthesized };\n};\n\n// Export names the bundle synthesizes, in the order describe and the isolate\n// both compute them.\nexport const synthesizedExports = (\n entries: NamespaceEntryIface[],\n): { name: string; value: AuthoredValue }[] => {\n const out: { name: string; value: AuthoredValue }[] = [];\n for (const entry of entries) {\n if (entry.layout.slot !== SlotKind.Agent) continue;\n for (const found of collectAgentDynamics(entry.namespace['default'])) {\n out.push({ name: `${AGENT_DYNAMIC_PREFIX}${found.path}`, value: found.value });\n }\n }\n for (const pending of pendingEntries())\n out.push({ name: pendingExportName(pending.index), value: pending.value });\n return out;\n};\n\nexport const needsCombinedMcpServers = (entries: NamespaceEntryIface[]): boolean =>\n entries.some(\n (entry) =>\n (entry.layout.slot === SlotKind.Tool || entry.layout.slot === SlotKind.Connection) &&\n isDynamicSentinel(entry.namespace['default']),\n );\n\nexport { COMBINED_MCP_SERVERS_EXPORT };\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n agentAvatarSchema,\n jsonValueSchema,\n hostedBindingRequirementSchema,\n type JsonObject,\n type JsonValue,\n} from '@finalai/agent-provider';\nimport * as z from 'zod';\nimport {\n AuthoredKind,\n authoredKindOf,\n pendingEntries,\n pendingExportName,\n} from \"../authoring/brand.mjs\";\nimport type {\n DescribedAgentIface,\n DescribedBundleIface,\n DescribedDynamicIface,\n DescribedModuleIface,\n DescribedSandboxIface,\n DescribedSandboxTargetIface,\n DescribedValue,\n} from \"./described.mjs\";\nimport {\n AGENT_DYNAMIC_PREFIX,\n COMBINED_MCP_SERVERS_EXPORT,\n namedExportName,\n SlotKind,\n type LayoutModuleIface,\n} from \"./layout.mjs\";\nimport {\n childPath,\n dynamicEventsOf,\n error,\n isDynamicSentinel,\n isEnvironmentLike,\n isOpenRequestLike,\n lowerConnection,\n lowerEnvironment,\n lowerInstructions,\n lowerSkill,\n lowerTool,\n note,\n sandboxProviderNameOf,\n toJson,\n type IssueIface,\n} from \"./lower.mjs\";\nimport {\n entriesOf,\n fieldOf,\n isCallable,\n isObjectLike,\n isPlainObject,\n isPromiseLike,\n isString,\n messageOf,\n stringOrNull,\n type AuthoredRecord,\n type AuthoredValue,\n} from \"./values.mjs\";\n\n// Static extraction, run inside the realm that evaluated the bundle. Reads\n// authored values; never calls tool bodies, resolvers or routes, and calls a\n// sandbox selector only to read the request a synchronous one returns.\n\nexport interface NamespaceEntryIface {\n layout: LayoutModuleIface;\n namespace: AuthoredRecord;\n}\n\nexport const describeDynamic = (value: AuthoredValue): DescribedDynamicIface => {\n const provider = fieldOf(value, 'provider');\n let hint: DescribedDynamicIface['provider'] = null;\n if (provider != null) {\n const kind = fieldOf(provider, 'kind');\n const ref = fieldOf(provider, 'providerRef');\n const issues: IssueIface[] = [];\n if ((kind === 'package' || kind === 'bundle') && provider != null) {\n hint = { ref: toJson(provider, { path: 'provider', issues }), name: null };\n } else if (ref != null) {\n hint = { ref: toJson(ref, { path: 'provider', issues }), name: null };\n } else {\n hint = {\n ref: null,\n name:\n stringOrNull(fieldOf(provider, 'name')) ??\n stringOrNull(fieldOf(fieldOf(provider, 'definition'), 'name')),\n };\n }\n }\n return {\n type: 'dynamic',\n events: dynamicEventsOf(value),\n description: stringOrNull(fieldOf(value, 'description')),\n preview: stringOrNull(fieldOf(value, 'preview')),\n provider: hint,\n requiredBindings: z\n .array(hostedBindingRequirementSchema)\n .parse(fieldOf(value, 'requiredBindings') ?? []),\n };\n};\n\n// Dynamic sentinels inside agent.ts's harness config, addressed by their authored path. The bundle exports each as\n// `agent:<path>`.\nexport const collectAgentDynamics = (\n agent: AuthoredValue,\n): { path: string; value: AuthoredValue }[] => {\n const found: { path: string; value: AuthoredValue }[] = [];\n const walk = (value: AuthoredValue, path: string, depth: number): void => {\n if (depth > 32) return;\n if (isDynamicSentinel(value)) {\n found.push({ path, value });\n return;\n }\n if (Array.isArray(value)) {\n value.forEach((item, index) => walk(item, childPath(path, index), depth + 1));\n return;\n }\n if (isPlainObject(value) || authoredKindOf(value) != null) {\n for (const [key, item] of entriesOf(value)) walk(item, childPath(path, key), depth + 1);\n }\n };\n walk(fieldOf(fieldOf(agent, 'harness'), 'config'), 'harness.config', 0);\n return found;\n};\n\nconst dynamicSlot = (value: AuthoredValue, path: string): JsonValue => {\n const described = describeDynamic(value);\n const slot: JsonObject = { resolver: `${AGENT_DYNAMIC_PREFIX}${path}`, events: described.events };\n if (described.description != null) slot['description'] = described.description;\n if (described.preview != null) slot['preview'] = described.preview;\n if ((described.requiredBindings?.length ?? 0) > 0)\n slot['requiredBindings'] = jsonValueSchema.parse(described.requiredBindings);\n return { $dynamic: slot };\n};\n\nconst isDefinedHarnessLike = (value: AuthoredValue): boolean =>\n isCallable(value) && isCallable(fieldOf(value, 'describe')) && isCallable(fieldOf(value, 'open'));\n\nconst KNOWN_AGENT_FIELDS: ReadonlySet<string> = new Set([\n 'name',\n 'description',\n 'avatar',\n 'harness',\n 'tools',\n 'toolPolicy',\n 'secrets',\n 'channels',\n]);\n\n// Harness configuration belongs in the harness binding rather than top-level agent fields.\nconst HARNESS_CONFIG_FIELDS: ReadonlySet<string> = new Set([\n 'model',\n 'reasoning',\n 'credentials',\n 'permissions',\n 'permissionMode',\n 'instructions',\n 'skills',\n 'system',\n 'temperature',\n 'providerOptions',\n 'maxSteps',\n 'stopWhen',\n]);\n\nconst unknownAgentField = (key: string): string => {\n if (HARNESS_CONFIG_FIELDS.has(key))\n return `agent.ts field ${key} belongs in harness config (harness: serverlessPi({ ${key}: ... }))`;\n if (key === 'defaultTools')\n return 'agent.ts field defaultTools is not supported: base tools are declared with tools: baseTools({ ... }) and are off by default';\n if (key === 'subagents' || key === 'memory') return `agent.ts field ${key} is not supported yet`;\n return `agent.ts field ${key} is not an agent field (name, description, avatar, harness, tools, toolPolicy, secrets, channels)`;\n};\n\ninterface DescribeContextIface {\n entries: NamespaceEntryIface[];\n sandboxIdentity: Map<AuthoredValue, string>;\n}\n\nconst describeHarness = (\n harness: AuthoredValue,\n ctx: DescribeContextIface,\n issues: IssueIface[],\n): DescribedAgentIface['harness'] => {\n if (harness == null) return null;\n const ref = fieldOf(harness, 'harness');\n if (!isObjectLike(ref)) {\n issues.push(error('agent.ts harness must be a harness binding, e.g. serverlessPi({ ... })'));\n return null;\n }\n let refJson = toJson(ref, { path: 'harness.harness', issues });\n if (fieldOf(ref, 'kind') === 'bundle' && fieldOf(ref, 'export') === '<pending>') {\n const candidates = ctx.entries.flatMap((entry) =>\n Object.entries(entry.namespace)\n .filter(([, value]) => isDefinedHarnessLike(value))\n .map(([name]) => namedExportName(entry.layout.base, name)),\n );\n if (candidates.length === 1 && candidates[0] != null)\n refJson = { kind: 'bundle', export: candidates[0] };\n else\n issues.push(\n error(\n 'the custom harness must come from defineHarness in @finalai/agents, or be exported once',\n ),\n );\n }\n const config = toJson(fieldOf(harness, 'config') ?? {}, {\n path: 'harness.config',\n issues,\n visit: (value, path) => (isDynamicSentinel(value) ? dynamicSlot(value, path) : undefined),\n });\n return { harness: refJson, config };\n};\n\n// Capabilities bound to sandbox targets (by export name) and those declared on\n// the harness's own host (`harnessHost`).\nconst describeBaseTools = (\n tools: AuthoredValue,\n ctx: DescribeContextIface,\n issues: IssueIface[],\n): { targets: Record<string, string>; host: string[] } | null => {\n if (tools == null) return null;\n if (authoredKindOf(tools) !== AuthoredKind.BaseTools) {\n issues.push(error('agent.ts tools must be baseTools({ shell: target, files: target, ... })'));\n return null;\n }\n const base = fieldOf(tools, 'base');\n const out: Record<string, string> = {};\n const host: string[] = [];\n if (!isPlainObject(base)) return { targets: out, host };\n for (const [capability, target] of Object.entries(base)) {\n if (target == null) continue;\n if (authoredKindOf(target) === AuthoredKind.HarnessHost) {\n host.push(capability);\n continue;\n }\n if (isString(target)) {\n out[capability] = target;\n continue;\n }\n const name = ctx.sandboxIdentity.get(target);\n if (name == null) {\n issues.push(\n error(\n `baseTools ${capability} is bound to a value that is not a sandbox target exported from sandbox.ts`,\n ),\n );\n continue;\n }\n out[capability] = name;\n }\n return { targets: out, host };\n};\n\nconst describeSecrets = (value: AuthoredValue, issues: IssueIface[]): string[] | null => {\n if (value == null) return null;\n const parsed = z.array(z.string().min(1)).safeParse(value);\n if (parsed.success) return parsed.data;\n issues.push(error('agent.ts secrets must be a list of secret names'));\n return null;\n};\n\nconst describeAvatar = (\n value: AuthoredValue,\n issues: IssueIface[],\n): DescribedAgentIface['avatar'] => {\n if (value === undefined) return null;\n const parsed = agentAvatarSchema.safeParse(toJson(value, { path: 'avatar', issues }));\n if (parsed.success) return parsed.data;\n for (const issue of parsed.error.issues) {\n issues.push(\n error(\n `agent.ts avatar${issue.path.length > 0 ? `.${issue.path.join('.')}` : ''}: ${issue.message}`,\n ),\n );\n }\n return null;\n};\n\nconst describeAgent = (\n value: AuthoredValue,\n ctx: DescribeContextIface,\n issues: IssueIface[],\n): DescribedAgentIface | null => {\n if (value == null) return null;\n if (!isPlainObject(value)) {\n issues.push(error('agent.ts must export defineAgent({ ... }) as its default export'));\n return null;\n }\n for (const key of Object.keys(value)) {\n if (!KNOWN_AGENT_FIELDS.has(key)) issues.push(error(unknownAgentField(key)));\n }\n const toolPolicyRaw = value['toolPolicy'];\n let toolPolicy: Record<string, string> | null = null;\n if (isPlainObject(toolPolicyRaw)) {\n toolPolicy = {};\n for (const [key, policy] of Object.entries(toolPolicyRaw)) {\n if (policy === 'allow' || policy === 'ask') toolPolicy[key] = policy;\n else issues.push(error(`agent.ts toolPolicy.${key} must be 'allow' or 'ask'`));\n }\n }\n const channelsRaw = value['channels'];\n let channels: DescribedAgentIface['channels'] = null;\n if (Array.isArray(channelsRaw)) {\n channels = channelsRaw.map((binding, index) => ({\n key: stringOrNull(fieldOf(binding, 'key')),\n channel: toJson(fieldOf(binding, 'channel') ?? null, {\n path: `channels[${index}].channel`,\n issues,\n }),\n config: toJson(fieldOf(binding, 'config') ?? {}, {\n path: `channels[${index}].config`,\n issues,\n }),\n }));\n }\n const baseToolsDescription = describeBaseTools(value['tools'], ctx, issues);\n return {\n type: 'agent',\n name: stringOrNull(value['name']),\n description: stringOrNull(value['description']),\n avatar: describeAvatar(value['avatar'], issues),\n harness: describeHarness(value['harness'], ctx, issues),\n tools: baseToolsDescription?.targets ?? null,\n hostTools: baseToolsDescription?.host ?? null,\n toolPolicy,\n secrets: describeSecrets(value['secrets'], issues),\n channels,\n };\n};\n\nconst probeSelector = (selector: AuthoredValue, issues: IssueIface[]): AuthoredValue | null => {\n if (!isCallable(selector)) return null;\n try {\n const result = selector({\n session: null,\n secrets: { get: async () => null },\n open: async () => {\n throw new Error('sandboxes do not open while compiling');\n },\n });\n if (isEnvironmentLike(result) || isOpenRequestLike(result)) return result;\n // An async selector: what it opens is known only at session start.\n if (isPromiseLike(result)) Promise.resolve(result).catch(() => undefined);\n return null;\n } catch (cause) {\n issues.push(\n error(\n `sandbox.ts selector failed during compilation: ${String(cause)}; export its environment when it needs session context`,\n ),\n );\n return null;\n }\n};\n\nconst describeSandbox = (\n namespace: AuthoredRecord,\n issues: IssueIface[],\n): DescribedSandboxIface => {\n const targets: Record<string, DescribedSandboxTargetIface> = {};\n const providers: Record<string, string> = {};\n const describeTarget = (\n value: AuthoredValue,\n exportName: string,\n path: string,\n ): DescribedSandboxTargetIface | null => {\n if (isDynamicSentinel(value))\n return { exportName, environment: null, dynamic: describeDynamic(value) };\n if (isEnvironmentLike(value) || isOpenRequestLike(value)) {\n return { exportName, environment: lowerEnvironment(value, path, issues), dynamic: null };\n }\n return null;\n };\n for (const [name, value] of Object.entries(namespace)) {\n if (name === 'default') continue;\n const exportName = namedExportName('sandbox', name);\n const providerName = sandboxProviderNameOf(value);\n if (providerName != null) {\n providers[exportName] = providerName;\n continue;\n }\n const target = describeTarget(value, exportName, `sandbox.ts ${name}`);\n if (target != null) targets[name] = target;\n }\n const named = Object.keys(targets);\n const fallback = describeTarget(namespace['default'], 'sandbox', 'sandbox.ts default export');\n const selector = authoredKindOf(namespace['default']) === AuthoredKind.SandboxSelector;\n if (fallback != null) targets['default'] = fallback;\n else if (namespace['default'] != null && !selector) {\n issues.push(\n error(\n 'sandbox.ts default export must be defineSandbox(selector), an environment, or defineDynamic(...)',\n ),\n );\n }\n // A selector that opens an environment it creates itself\n // (`defineSandbox(() => computer().open())`) names no export\n // to bind; a synchronous one is called once to read the request it returns,\n // which becomes the default target.\n if (selector && named.length === 0 && fallback == null) {\n const opened = probeSelector(namespace['default'], issues);\n if (opened != null) {\n targets['default'] = {\n exportName: 'sandbox',\n environment: lowerEnvironment(opened, 'sandbox.ts default export', issues),\n dynamic: null,\n };\n }\n }\n let defaultTarget: string | null = null;\n if (targets['default'] != null) defaultTarget = 'default';\n else if (named.length === 1) defaultTarget = named[0] ?? null;\n if (selector && defaultTarget == null) {\n issues.push(\n error(\n named.length === 0\n ? 'sandbox.ts default export opens a sandbox but no environment is exported; export the environment it opens (export const computer = computer({ ... }))'\n : 'sandbox.ts default export opens a sandbox but several environments are exported; the selector needs exactly one',\n ),\n );\n }\n return { type: 'sandbox', targets, providers, selector, defaultTarget };\n};\n\nconst sandboxIdentityOf = (\n namespace: AuthoredRecord | null,\n sandbox: DescribedSandboxIface | null,\n): Map<AuthoredValue, string> => {\n const identity = new Map<AuthoredValue, string>();\n if (namespace == null || sandbox == null) return identity;\n for (const [name, value] of Object.entries(namespace)) {\n if (name === 'default') {\n if (sandbox.defaultTarget != null) identity.set(value, sandbox.defaultTarget);\n } else if (sandbox.targets[name] != null) identity.set(value, name);\n }\n return identity;\n};\n\nconst describeModuleValue = (\n entry: NamespaceEntryIface,\n ctx: DescribeContextIface,\n sandbox: DescribedSandboxIface | null,\n issues: IssueIface[],\n): DescribedValue | null => {\n const { layout, namespace } = entry;\n const value = namespace['default'];\n switch (layout.slot) {\n case SlotKind.Agent:\n return describeAgent(value, ctx, issues);\n case SlotKind.Sandbox:\n return sandbox;\n case SlotKind.Instructions: {\n if (isDynamicSentinel(value)) return describeDynamic(value);\n const fragment = lowerInstructions(value, null);\n if (fragment == null) {\n issues.push(\n error(\n `${layout.path} must export defineInstructions({ content, role }) or defineDynamic(...)`,\n ),\n );\n return null;\n }\n return { type: 'instructions', role: fragment.role, content: fragment.content };\n }\n case SlotKind.Skill: {\n if (isDynamicSentinel(value)) return describeDynamic(value);\n const lowered = lowerSkill({ key: layout.key, value });\n issues.push(...lowered.issues);\n return { type: 'skill', skill: toJson(lowered.skill, { path: layout.path, issues }) };\n }\n case SlotKind.Tool: {\n if (isDynamicSentinel(value)) return describeDynamic(value);\n const lowered = lowerTool({ name: layout.key, exportName: layout.base, value });\n issues.push(...lowered.issues);\n return {\n type: 'tool',\n descriptor: toJson(lowered.descriptor, { path: layout.path, issues }),\n approval: lowered.approval,\n };\n }\n case SlotKind.Connection: {\n if (isDynamicSentinel(value)) return describeDynamic(value);\n const lowered = lowerConnection({ key: layout.key, exportName: layout.base, value });\n issues.push(...lowered.issues);\n return {\n type: 'connection',\n binding: toJson(lowered.binding, { path: layout.path, issues }),\n };\n }\n case SlotKind.Schedule:\n return {\n type: 'schedule',\n cron: stringOrNull(fieldOf(value, 'cron')),\n markdown: stringOrNull(fieldOf(value, 'markdown')),\n timezone: stringOrNull(fieldOf(value, 'timezone')),\n target: stringOrNull(fieldOf(value, 'target')),\n };\n case SlotKind.Hook: {\n const events = fieldOf(value, 'events');\n return {\n type: 'hook',\n keys: entriesOf(events).map(([key]) => key),\n };\n }\n case SlotKind.Channel: {\n const routes = fieldOf(value, 'routes');\n return {\n type: 'channel',\n disabled: fieldOf(value, 'disabled') === true,\n installed: toJson(fieldOf(value, 'installed') ?? null, {\n path: `${layout.path} installed`,\n issues,\n }),\n routes: Array.isArray(routes)\n ? routes.map((route) => ({\n method: String(fieldOf(route, 'method')),\n path: String(fieldOf(route, 'path')),\n }))\n : [],\n turnPolicy: stringOrNull(fieldOf(value, 'turnPolicy')),\n config: toJson(fieldOf(value, 'config') ?? {}, { path: `${layout.path} config`, issues }),\n };\n }\n }\n};\n\nexport const describeBundle = (\n entries: NamespaceEntryIface[],\n synthesized: string[],\n): DescribedBundleIface => {\n const sandboxEntry = entries.find((entry) => entry.layout.slot === SlotKind.Sandbox) ?? null;\n const sandboxIssues: IssueIface[] = [];\n let sandbox: DescribedSandboxIface | null = null;\n if (sandboxEntry != null) {\n try {\n sandbox = describeSandbox(sandboxEntry.namespace, sandboxIssues);\n } catch (cause) {\n sandboxIssues.push(error(`sandbox.ts could not be described: ${messageOf(cause)}`));\n }\n }\n const ctx: DescribeContextIface = {\n entries,\n sandboxIdentity: sandboxIdentityOf(sandboxEntry?.namespace ?? null, sandbox),\n };\n const modules: DescribedModuleIface[] = entries.map((entry) => {\n const issues: IssueIface[] = entry.layout.slot === SlotKind.Sandbox ? sandboxIssues : [];\n const hasDefault = 'default' in entry.namespace && entry.namespace['default'] !== undefined;\n let value: DescribedValue | null = null;\n if (hasDefault || entry.layout.slot === SlotKind.Sandbox) {\n try {\n value = describeModuleValue(entry, ctx, sandbox, issues);\n } catch (cause) {\n issues.push(error(`${entry.layout.path} could not be described: ${messageOf(cause)}`));\n }\n } else if (entry.layout.slot !== SlotKind.Agent) {\n issues.push(note(`${entry.layout.path} has no default export; treated as a helper module`));\n }\n return {\n base: entry.layout.base,\n path: entry.layout.path,\n slot: entry.layout.slot,\n key: entry.layout.key,\n hasDefault,\n issues,\n value,\n };\n });\n return { modules, synthesized };\n};\n\n// Export names the bundle synthesizes, in the order describe and the isolate\n// both compute them.\nexport const synthesizedExports = (\n entries: NamespaceEntryIface[],\n): { name: string; value: AuthoredValue }[] => {\n const out: { name: string; value: AuthoredValue }[] = [];\n for (const entry of entries) {\n if (entry.layout.slot !== SlotKind.Agent) continue;\n for (const found of collectAgentDynamics(entry.namespace['default'])) {\n out.push({ name: `${AGENT_DYNAMIC_PREFIX}${found.path}`, value: found.value });\n }\n }\n for (const pending of pendingEntries())\n out.push({ name: pendingExportName(pending.index), value: pending.value });\n return out;\n};\n\nexport const needsCombinedMcpServers = (entries: NamespaceEntryIface[]): boolean =>\n entries.some(\n (entry) =>\n (entry.layout.slot === SlotKind.Tool || entry.layout.slot === SlotKind.Connection) &&\n isDynamicSentinel(entry.namespace['default']),\n );\n\nexport { COMBINED_MCP_SERVERS_EXPORT };\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -10,6 +10,10 @@ export declare const describedDynamicSchema: z.ZodObject<{
10
10
  events: z.ZodArray<z.ZodString>;
11
11
  description: z.ZodNullable<z.ZodString>;
12
12
  preview: z.ZodNullable<z.ZodString>;
13
+ requiredBindings: z.ZodOptional<z.ZodArray<z.ZodObject<{
14
+ name: z.ZodString;
15
+ schema: z.ZodType<import("@finalai/agent-provider").JsonObject, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonObject, unknown>>;
16
+ }, z.core.$strip>>>;
13
17
  provider: z.ZodNullable<z.ZodObject<{
14
18
  ref: z.ZodNullable<z.ZodType<import("@finalai/agent-provider").JsonValue, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonValue, unknown>>>;
15
19
  name: z.ZodNullable<z.ZodString>;
@@ -19,7 +23,7 @@ declare const describedAgentSchema: z.ZodObject<{
19
23
  type: z.ZodLiteral<"agent">;
20
24
  name: z.ZodNullable<z.ZodString>;
21
25
  description: z.ZodNullable<z.ZodString>;
22
- avatarUrl: z.ZodNullable<z.ZodString>;
26
+ avatar: z.ZodDefault<z.ZodNullable<z.ZodType<import("@finalai/agent-protocol").AgentAvatarIface, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-protocol").AgentAvatarIface, unknown>>>>;
23
27
  harness: z.ZodNullable<z.ZodObject<{
24
28
  harness: z.ZodType<import("@finalai/agent-provider").JsonValue, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonValue, unknown>>;
25
29
  config: z.ZodType<import("@finalai/agent-provider").JsonValue, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonValue, unknown>>;
@@ -53,6 +57,10 @@ declare const describedSandboxTargetSchema: z.ZodObject<{
53
57
  events: z.ZodArray<z.ZodString>;
54
58
  description: z.ZodNullable<z.ZodString>;
55
59
  preview: z.ZodNullable<z.ZodString>;
60
+ requiredBindings: z.ZodOptional<z.ZodArray<z.ZodObject<{
61
+ name: z.ZodString;
62
+ schema: z.ZodType<import("@finalai/agent-provider").JsonObject, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonObject, unknown>>;
63
+ }, z.core.$strip>>>;
56
64
  provider: z.ZodNullable<z.ZodObject<{
57
65
  ref: z.ZodNullable<z.ZodType<import("@finalai/agent-provider").JsonValue, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonValue, unknown>>>;
58
66
  name: z.ZodNullable<z.ZodString>;
@@ -74,6 +82,10 @@ declare const describedSandboxSchema: z.ZodObject<{
74
82
  events: z.ZodArray<z.ZodString>;
75
83
  description: z.ZodNullable<z.ZodString>;
76
84
  preview: z.ZodNullable<z.ZodString>;
85
+ requiredBindings: z.ZodOptional<z.ZodArray<z.ZodObject<{
86
+ name: z.ZodString;
87
+ schema: z.ZodType<import("@finalai/agent-provider").JsonObject, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonObject, unknown>>;
88
+ }, z.core.$strip>>>;
77
89
  provider: z.ZodNullable<z.ZodObject<{
78
90
  ref: z.ZodNullable<z.ZodType<import("@finalai/agent-provider").JsonValue, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonValue, unknown>>>;
79
91
  name: z.ZodNullable<z.ZodString>;
@@ -88,7 +100,7 @@ export declare const describedValueSchema: z.ZodDiscriminatedUnion<[z.ZodObject<
88
100
  type: z.ZodLiteral<"agent">;
89
101
  name: z.ZodNullable<z.ZodString>;
90
102
  description: z.ZodNullable<z.ZodString>;
91
- avatarUrl: z.ZodNullable<z.ZodString>;
103
+ avatar: z.ZodDefault<z.ZodNullable<z.ZodType<import("@finalai/agent-protocol").AgentAvatarIface, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-protocol").AgentAvatarIface, unknown>>>>;
92
104
  harness: z.ZodNullable<z.ZodObject<{
93
105
  harness: z.ZodType<import("@finalai/agent-provider").JsonValue, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonValue, unknown>>;
94
106
  config: z.ZodType<import("@finalai/agent-provider").JsonValue, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonValue, unknown>>;
@@ -107,6 +119,10 @@ export declare const describedValueSchema: z.ZodDiscriminatedUnion<[z.ZodObject<
107
119
  events: z.ZodArray<z.ZodString>;
108
120
  description: z.ZodNullable<z.ZodString>;
109
121
  preview: z.ZodNullable<z.ZodString>;
122
+ requiredBindings: z.ZodOptional<z.ZodArray<z.ZodObject<{
123
+ name: z.ZodString;
124
+ schema: z.ZodType<import("@finalai/agent-provider").JsonObject, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonObject, unknown>>;
125
+ }, z.core.$strip>>>;
110
126
  provider: z.ZodNullable<z.ZodObject<{
111
127
  ref: z.ZodNullable<z.ZodType<import("@finalai/agent-provider").JsonValue, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonValue, unknown>>>;
112
128
  name: z.ZodNullable<z.ZodString>;
@@ -159,6 +175,10 @@ export declare const describedValueSchema: z.ZodDiscriminatedUnion<[z.ZodObject<
159
175
  events: z.ZodArray<z.ZodString>;
160
176
  description: z.ZodNullable<z.ZodString>;
161
177
  preview: z.ZodNullable<z.ZodString>;
178
+ requiredBindings: z.ZodOptional<z.ZodArray<z.ZodObject<{
179
+ name: z.ZodString;
180
+ schema: z.ZodType<import("@finalai/agent-provider").JsonObject, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonObject, unknown>>;
181
+ }, z.core.$strip>>>;
162
182
  provider: z.ZodNullable<z.ZodObject<{
163
183
  ref: z.ZodNullable<z.ZodType<import("@finalai/agent-provider").JsonValue, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonValue, unknown>>>;
164
184
  name: z.ZodNullable<z.ZodString>;
@@ -183,7 +203,7 @@ export declare const describedModuleSchema: z.ZodObject<{
183
203
  type: z.ZodLiteral<"agent">;
184
204
  name: z.ZodNullable<z.ZodString>;
185
205
  description: z.ZodNullable<z.ZodString>;
186
- avatarUrl: z.ZodNullable<z.ZodString>;
206
+ avatar: z.ZodDefault<z.ZodNullable<z.ZodType<import("@finalai/agent-protocol").AgentAvatarIface, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-protocol").AgentAvatarIface, unknown>>>>;
187
207
  harness: z.ZodNullable<z.ZodObject<{
188
208
  harness: z.ZodType<import("@finalai/agent-provider").JsonValue, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonValue, unknown>>;
189
209
  config: z.ZodType<import("@finalai/agent-provider").JsonValue, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonValue, unknown>>;
@@ -202,6 +222,10 @@ export declare const describedModuleSchema: z.ZodObject<{
202
222
  events: z.ZodArray<z.ZodString>;
203
223
  description: z.ZodNullable<z.ZodString>;
204
224
  preview: z.ZodNullable<z.ZodString>;
225
+ requiredBindings: z.ZodOptional<z.ZodArray<z.ZodObject<{
226
+ name: z.ZodString;
227
+ schema: z.ZodType<import("@finalai/agent-provider").JsonObject, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonObject, unknown>>;
228
+ }, z.core.$strip>>>;
205
229
  provider: z.ZodNullable<z.ZodObject<{
206
230
  ref: z.ZodNullable<z.ZodType<import("@finalai/agent-provider").JsonValue, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonValue, unknown>>>;
207
231
  name: z.ZodNullable<z.ZodString>;
@@ -254,6 +278,10 @@ export declare const describedModuleSchema: z.ZodObject<{
254
278
  events: z.ZodArray<z.ZodString>;
255
279
  description: z.ZodNullable<z.ZodString>;
256
280
  preview: z.ZodNullable<z.ZodString>;
281
+ requiredBindings: z.ZodOptional<z.ZodArray<z.ZodObject<{
282
+ name: z.ZodString;
283
+ schema: z.ZodType<import("@finalai/agent-provider").JsonObject, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonObject, unknown>>;
284
+ }, z.core.$strip>>>;
257
285
  provider: z.ZodNullable<z.ZodObject<{
258
286
  ref: z.ZodNullable<z.ZodType<import("@finalai/agent-provider").JsonValue, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonValue, unknown>>>;
259
287
  name: z.ZodNullable<z.ZodString>;
@@ -280,7 +308,7 @@ export declare const describedBundleSchema: z.ZodObject<{
280
308
  type: z.ZodLiteral<"agent">;
281
309
  name: z.ZodNullable<z.ZodString>;
282
310
  description: z.ZodNullable<z.ZodString>;
283
- avatarUrl: z.ZodNullable<z.ZodString>;
311
+ avatar: z.ZodDefault<z.ZodNullable<z.ZodType<import("@finalai/agent-protocol").AgentAvatarIface, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-protocol").AgentAvatarIface, unknown>>>>;
284
312
  harness: z.ZodNullable<z.ZodObject<{
285
313
  harness: z.ZodType<import("@finalai/agent-provider").JsonValue, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonValue, unknown>>;
286
314
  config: z.ZodType<import("@finalai/agent-provider").JsonValue, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonValue, unknown>>;
@@ -299,6 +327,10 @@ export declare const describedBundleSchema: z.ZodObject<{
299
327
  events: z.ZodArray<z.ZodString>;
300
328
  description: z.ZodNullable<z.ZodString>;
301
329
  preview: z.ZodNullable<z.ZodString>;
330
+ requiredBindings: z.ZodOptional<z.ZodArray<z.ZodObject<{
331
+ name: z.ZodString;
332
+ schema: z.ZodType<import("@finalai/agent-provider").JsonObject, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonObject, unknown>>;
333
+ }, z.core.$strip>>>;
302
334
  provider: z.ZodNullable<z.ZodObject<{
303
335
  ref: z.ZodNullable<z.ZodType<import("@finalai/agent-provider").JsonValue, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonValue, unknown>>>;
304
336
  name: z.ZodNullable<z.ZodString>;
@@ -351,6 +383,10 @@ export declare const describedBundleSchema: z.ZodObject<{
351
383
  events: z.ZodArray<z.ZodString>;
352
384
  description: z.ZodNullable<z.ZodString>;
353
385
  preview: z.ZodNullable<z.ZodString>;
386
+ requiredBindings: z.ZodOptional<z.ZodArray<z.ZodObject<{
387
+ name: z.ZodString;
388
+ schema: z.ZodType<import("@finalai/agent-provider").JsonObject, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonObject, unknown>>;
389
+ }, z.core.$strip>>>;
354
390
  provider: z.ZodNullable<z.ZodObject<{
355
391
  ref: z.ZodNullable<z.ZodType<import("@finalai/agent-provider").JsonValue, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonValue, unknown>>>;
356
392
  name: z.ZodNullable<z.ZodString>;
@@ -1,4 +1,8 @@
1
- import { jsonValueSchema } from "@finalai/agent-provider";
1
+ import {
2
+ agentAvatarSchema,
3
+ hostedBindingRequirementSchema,
4
+ jsonValueSchema
5
+ } from "@finalai/agent-provider";
2
6
  import * as z from "zod";
3
7
  import { SlotKind } from "./layout.mjs";
4
8
  import { IssueSeverity } from "./lower.mjs";
@@ -12,13 +16,14 @@ const describedDynamicSchema = z.object({
12
16
  events: z.array(z.string()),
13
17
  description: z.string().nullable(),
14
18
  preview: z.string().nullable(),
19
+ requiredBindings: z.array(hostedBindingRequirementSchema).optional(),
15
20
  provider: providerHintSchema.nullable()
16
21
  });
17
22
  const describedAgentSchema = z.object({
18
23
  type: z.literal("agent"),
19
24
  name: z.string().nullable(),
20
25
  description: z.string().nullable(),
21
- avatarUrl: z.string().nullable(),
26
+ avatar: agentAvatarSchema.nullable().default(null),
22
27
  harness: z.object({ harness: jsonValueSchema, config: jsonValueSchema }).nullable(),
23
28
  tools: z.record(z.string(), z.string()).nullable(),
24
29
  // Capabilities bound to `harnessHost` (the harness's own host, no target).
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/runtime/described.ts"],
4
- "sourcesContent": ["import { jsonValueSchema } from '@finalai/agent-provider';\nimport * as z from 'zod';\nimport { SlotKind } from \"./layout.mjs\";\nimport { IssueSeverity } from \"./lower.mjs\";\n\n// The static description of a bundle's authored modules, produced inside the\n// evaluation realm and parsed by the compiler. Everything is JSON.\n\nexport const issueSchema = z.object({ severity: z.nativeEnum(IssueSeverity), message: z.string() });\n\nconst providerHintSchema = z.object({\n ref: jsonValueSchema.nullable(),\n name: z.string().nullable(),\n});\n\nexport const describedDynamicSchema = z.object({\n type: z.literal('dynamic'),\n events: z.array(z.string()),\n description: z.string().nullable(),\n preview: z.string().nullable(),\n provider: providerHintSchema.nullable(),\n});\n\nconst describedAgentSchema = z.object({\n type: z.literal('agent'),\n name: z.string().nullable(),\n description: z.string().nullable(),\n avatarUrl: z.string().nullable(),\n harness: z.object({ harness: jsonValueSchema, config: jsonValueSchema }).nullable(),\n tools: z.record(z.string(), z.string()).nullable(),\n // Capabilities bound to `harnessHost` (the harness's own host, no target).\n hostTools: z.array(z.string()).nullable().default(null),\n toolPolicy: z.record(z.string(), z.string()).nullable(),\n secrets: z.array(z.string()).nullable(),\n channels: z\n .array(\n z.object({ key: z.string().nullable(), channel: jsonValueSchema, config: jsonValueSchema }),\n )\n .nullable(),\n});\n\nconst describedInstructionsSchema = z.object({\n type: z.literal('instructions'),\n role: z.string(),\n content: z.string(),\n});\n\nconst describedSkillSchema = z.object({ type: z.literal('skill'), skill: jsonValueSchema });\n\nconst describedToolSchema = z.object({\n type: z.literal('tool'),\n descriptor: jsonValueSchema,\n approval: z.string(),\n});\n\nconst describedConnectionSchema = z.object({\n type: z.literal('connection'),\n binding: jsonValueSchema,\n});\n\nconst describedScheduleSchema = z.object({\n type: z.literal('schedule'),\n cron: z.string().nullable(),\n markdown: z.string().nullable(),\n timezone: z.string().nullable(),\n target: z.string().nullable(),\n});\n\nconst describedHookSchema = z.object({ type: z.literal('hook'), keys: z.array(z.string()) });\n\nconst describedChannelSchema = z.object({\n type: z.literal('channel'),\n routes: z.array(z.object({ method: z.string(), path: z.string() })),\n turnPolicy: z.string().nullable(),\n config: jsonValueSchema,\n disabled: z.boolean().default(false),\n installed: jsonValueSchema.nullable().default(null),\n});\n\nexport const describedEnvironmentSchema = z.object({\n providerName: z.string(),\n providerRef: jsonValueSchema.nullable(),\n options: jsonValueSchema,\n openOptions: jsonValueSchema.nullable(),\n});\n\nconst describedSandboxTargetSchema = z.object({\n exportName: z.string(),\n environment: describedEnvironmentSchema.nullable(),\n dynamic: describedDynamicSchema.nullable(),\n});\n\nconst describedSandboxSchema = z.object({\n type: z.literal('sandbox'),\n targets: z.record(z.string(), describedSandboxTargetSchema),\n // Bundle export name \u2192 provider name, for providers defined in sandbox.ts.\n providers: z.record(z.string(), z.string()),\n selector: z.boolean(),\n defaultTarget: z.string().nullable(),\n});\n\nexport const describedValueSchema = z.discriminatedUnion('type', [\n describedAgentSchema,\n describedDynamicSchema,\n describedInstructionsSchema,\n describedSkillSchema,\n describedToolSchema,\n describedConnectionSchema,\n describedScheduleSchema,\n describedHookSchema,\n describedChannelSchema,\n describedSandboxSchema,\n]);\n\nexport const describedModuleSchema = z.object({\n base: z.string(),\n path: z.string(),\n slot: z.nativeEnum(SlotKind),\n key: z.string(),\n hasDefault: z.boolean(),\n issues: z.array(issueSchema),\n value: describedValueSchema.nullable(),\n});\n\nexport const describedBundleSchema = z.object({\n modules: z.array(describedModuleSchema),\n // Exports the bundle synthesizes beyond the authored ones.\n synthesized: z.array(z.string()),\n});\n\nexport type DescribedIssueIface = z.infer<typeof issueSchema>;\nexport type DescribedDynamicIface = z.infer<typeof describedDynamicSchema>;\nexport type DescribedAgentIface = z.infer<typeof describedAgentSchema>;\nexport type DescribedSandboxIface = z.infer<typeof describedSandboxSchema>;\nexport type DescribedSandboxTargetIface = z.infer<typeof describedSandboxTargetSchema>;\nexport type DescribedEnvironmentIface = z.infer<typeof describedEnvironmentSchema>;\nexport type DescribedValue = z.infer<typeof describedValueSchema>;\nexport type DescribedModuleIface = z.infer<typeof describedModuleSchema>;\nexport type DescribedBundleIface = z.infer<typeof describedBundleSchema>;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n agentAvatarSchema,\n hostedBindingRequirementSchema,\n jsonValueSchema,\n} from '@finalai/agent-provider';\nimport * as z from 'zod';\nimport { SlotKind } from \"./layout.mjs\";\nimport { IssueSeverity } from \"./lower.mjs\";\n\n// The static description of a bundle's authored modules, produced inside the\n// evaluation realm and parsed by the compiler. Everything is JSON.\n\nexport const issueSchema = z.object({ severity: z.nativeEnum(IssueSeverity), message: z.string() });\n\nconst providerHintSchema = z.object({\n ref: jsonValueSchema.nullable(),\n name: z.string().nullable(),\n});\n\nexport const describedDynamicSchema = z.object({\n type: z.literal('dynamic'),\n events: z.array(z.string()),\n description: z.string().nullable(),\n preview: z.string().nullable(),\n requiredBindings: z.array(hostedBindingRequirementSchema).optional(),\n provider: providerHintSchema.nullable(),\n});\n\nconst describedAgentSchema = z.object({\n type: z.literal('agent'),\n name: z.string().nullable(),\n description: z.string().nullable(),\n avatar: agentAvatarSchema.nullable().default(null),\n harness: z.object({ harness: jsonValueSchema, config: jsonValueSchema }).nullable(),\n tools: z.record(z.string(), z.string()).nullable(),\n // Capabilities bound to `harnessHost` (the harness's own host, no target).\n hostTools: z.array(z.string()).nullable().default(null),\n toolPolicy: z.record(z.string(), z.string()).nullable(),\n secrets: z.array(z.string()).nullable(),\n channels: z\n .array(\n z.object({ key: z.string().nullable(), channel: jsonValueSchema, config: jsonValueSchema }),\n )\n .nullable(),\n});\n\nconst describedInstructionsSchema = z.object({\n type: z.literal('instructions'),\n role: z.string(),\n content: z.string(),\n});\n\nconst describedSkillSchema = z.object({ type: z.literal('skill'), skill: jsonValueSchema });\n\nconst describedToolSchema = z.object({\n type: z.literal('tool'),\n descriptor: jsonValueSchema,\n approval: z.string(),\n});\n\nconst describedConnectionSchema = z.object({\n type: z.literal('connection'),\n binding: jsonValueSchema,\n});\n\nconst describedScheduleSchema = z.object({\n type: z.literal('schedule'),\n cron: z.string().nullable(),\n markdown: z.string().nullable(),\n timezone: z.string().nullable(),\n target: z.string().nullable(),\n});\n\nconst describedHookSchema = z.object({ type: z.literal('hook'), keys: z.array(z.string()) });\n\nconst describedChannelSchema = z.object({\n type: z.literal('channel'),\n routes: z.array(z.object({ method: z.string(), path: z.string() })),\n turnPolicy: z.string().nullable(),\n config: jsonValueSchema,\n disabled: z.boolean().default(false),\n installed: jsonValueSchema.nullable().default(null),\n});\n\nexport const describedEnvironmentSchema = z.object({\n providerName: z.string(),\n providerRef: jsonValueSchema.nullable(),\n options: jsonValueSchema,\n openOptions: jsonValueSchema.nullable(),\n});\n\nconst describedSandboxTargetSchema = z.object({\n exportName: z.string(),\n environment: describedEnvironmentSchema.nullable(),\n dynamic: describedDynamicSchema.nullable(),\n});\n\nconst describedSandboxSchema = z.object({\n type: z.literal('sandbox'),\n targets: z.record(z.string(), describedSandboxTargetSchema),\n // Bundle export name \u2192 provider name, for providers defined in sandbox.ts.\n providers: z.record(z.string(), z.string()),\n selector: z.boolean(),\n defaultTarget: z.string().nullable(),\n});\n\nexport const describedValueSchema = z.discriminatedUnion('type', [\n describedAgentSchema,\n describedDynamicSchema,\n describedInstructionsSchema,\n describedSkillSchema,\n describedToolSchema,\n describedConnectionSchema,\n describedScheduleSchema,\n describedHookSchema,\n describedChannelSchema,\n describedSandboxSchema,\n]);\n\nexport const describedModuleSchema = z.object({\n base: z.string(),\n path: z.string(),\n slot: z.nativeEnum(SlotKind),\n key: z.string(),\n hasDefault: z.boolean(),\n issues: z.array(issueSchema),\n value: describedValueSchema.nullable(),\n});\n\nexport const describedBundleSchema = z.object({\n modules: z.array(describedModuleSchema),\n // Exports the bundle synthesizes beyond the authored ones.\n synthesized: z.array(z.string()),\n});\n\nexport type DescribedIssueIface = z.infer<typeof issueSchema>;\nexport type DescribedDynamicIface = z.infer<typeof describedDynamicSchema>;\nexport type DescribedAgentIface = z.infer<typeof describedAgentSchema>;\nexport type DescribedSandboxIface = z.infer<typeof describedSandboxSchema>;\nexport type DescribedSandboxTargetIface = z.infer<typeof describedSandboxTargetSchema>;\nexport type DescribedEnvironmentIface = z.infer<typeof describedEnvironmentSchema>;\nexport type DescribedValue = z.infer<typeof describedValueSchema>;\nexport type DescribedModuleIface = z.infer<typeof describedModuleSchema>;\nexport type DescribedBundleIface = z.infer<typeof describedBundleSchema>;\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }