@finalai/agent-definition 0.1.3 → 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.
- package/HOSTING.md +69 -0
- package/dist/compiler-assets/{chunk-BEFBCBUL.ts → chunk-4A66SVBJ.ts} +1 -1
- package/dist/compiler-assets/{chunk-5IZTHCGZ.ts → chunk-5NTKRRMC.ts} +105 -14
- package/dist/compiler-assets/{chunk-OO67EO5E.ts → chunk-APU2VKLW.ts} +42 -3
- package/dist/compiler-assets/{chunk-3YAKMWV4.ts → chunk-RIEMTCTV.ts} +6 -2
- package/dist/compiler-assets/{chunk-JXJPBM5W.ts → chunk-TJ536HI4.ts} +1 -1
- package/dist/compiler-assets/{chunk-I6U47R5U.ts → chunk-UBR53WBH.ts} +20 -4
- package/dist/compiler-assets/{chunk-FHKYXT3F.ts → chunk-YW7HDGQA.ts} +1 -1
- package/dist/compiler-assets/{chunk-TCKYMNPM.ts → chunk-YWFGIPHD.ts} +3 -3
- package/dist/compiler-assets/{chunk-TS7XNNHN.ts → chunk-Z5TO7RSJ.ts} +4 -2
- package/dist/compiler-assets/src/authoring/approval.ts +2 -2
- package/dist/compiler-assets/src/authoring/connections.ts +2 -2
- package/dist/compiler-assets/src/authoring/harness.ts +3 -3
- package/dist/compiler-assets/src/authoring/index.ts +5 -5
- package/dist/compiler-assets/src/authoring/sandbox.ts +2 -2
- package/dist/compiler-assets/src/compatibility.ts +2 -2
- package/dist/compiler-assets/src/index.ts +10 -6
- package/dist/compiler-assets/src/manifest.ts +5 -1
- package/dist/compiler-assets/src/resolve.ts +2 -2
- package/dist/compiler-assets/src/runtime/bundle.ts +5 -5
- package/dist/compiler-assets/src/runtime/describe.ts +4 -4
- package/dist/compiler-assets/src/runtime/described.ts +6 -4
- package/dist/compiler-assets/src/runtime/isolate.ts +4 -4
- package/dist/compiler-assets/src/runtime/lower.ts +3 -3
- package/dist/modules/authoring/agent.d.mts +3 -2
- package/dist/modules/authoring/agent.mjs.map +2 -2
- package/dist/modules/authoring/connections.d.mts +10 -2
- package/dist/modules/authoring/connections.mjs.map +2 -2
- package/dist/modules/authoring/harness.mjs +2 -0
- package/dist/modules/authoring/harness.mjs.map +2 -2
- package/dist/modules/authoring/index.d.mts +1 -1
- package/dist/modules/authoring/index.mjs.map +2 -2
- package/dist/modules/compiler/assemble.mjs +1 -1
- package/dist/modules/compiler/assemble.mjs.map +2 -2
- package/dist/modules/manifest.d.mts +2 -2
- package/dist/modules/manifest.mjs +4 -0
- package/dist/modules/manifest.mjs.map +2 -2
- package/dist/modules/runtime/describe.mjs +17 -3
- package/dist/modules/runtime/describe.mjs.map +2 -2
- package/dist/modules/runtime/described.d.mts +4 -4
- package/dist/modules/runtime/described.mjs +6 -2
- package/dist/modules/runtime/described.mjs.map +2 -2
- package/dist/modules/runtime/lower.mjs +76 -14
- package/dist/modules/runtime/lower.mjs.map +2 -2
- package/fixtures/assistant/agent/agent.ts +7 -0
- package/package.json +3 -3
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/compiler/assemble.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n agentManifestSchema,\n BaseCapability,\n bundleRef,\n CredentialNodeKind,\n credentialPolicySchema,\n DynamicEvent,\n findDynamicSlots,\n formatProviderRef,\n httpMcpServerBindingSchema,\n InstructionRole,\n jsonObjectSchema,\n MANIFEST_VERSION,\n McpServerBindingKind,\n packageRef,\n ProviderRefKind,\n providerRefSchema,\n SandboxAccess,\n SandboxAttach,\n ScheduleTarget,\n skillBundleSchema,\n ToolApproval,\n toolDescriptorSchema,\n TurnPolicy,\n type AgentManifestIface,\n type ChannelBindingIface,\n type DynamicSlotIface,\n type HookBindingIface,\n type JsonObject,\n type JsonValue,\n type McpServerBinding,\n type ProviderRef,\n type SandboxBindingIface,\n type ScheduleDefinitionIface,\n type SkillBundleIface,\n type ToolDescriptorIface,\n} from '@finalai/agent-provider';\nimport { Cron } from 'croner';\nimport * as z from 'zod';\nimport { HookEventKeyKind, normalizeHookKey } from \"../authoring/hooks.mjs\";\nimport type {\n DescribedAgentIface,\n DescribedBundleIface,\n DescribedDynamicIface,\n DescribedModuleIface,\n DescribedSandboxIface,\n} from \"../runtime/described.mjs\";\nimport { AUTHORED_SERVER_KEY, COMBINED_MCP_SERVERS_EXPORT, SlotKind } from \"../runtime/layout.mjs\";\nimport { IssueSeverity } from \"../runtime/lower.mjs\";\nimport {\n diagnostic,\n DiagnosticCode,\n DiagnosticSeverity,\n type DiagnosticIface,\n} from \"./diagnostics.mjs\";\nimport { InstructionSourceKind, isModulePath, type DiscoveryIface } from \"./discovery.mjs\";\nimport { preparationFiles } from \"./files.mjs\";\nimport { firstParagraphLine, frontMatterString, parseFrontMatter } from \"./frontmatter.mjs\";\n\nexport interface AssembleInputIface {\n installedSandboxProviders?: Readonly<Record<string, string>>;\n files: Record<string, string>;\n discovery: DiscoveryIface;\n described: DescribedBundleIface | null;\n fallbackName: string;\n bundle: { hash: string; code: string } | null;\n}\n\nexport interface AssembleOutputIface {\n manifest: AgentManifestIface | null;\n // Bundle export \u2192 directory-relative source path, for what the runtime calls.\n modules: Record<string, string>;\n // Target \u2192 bundle export of the sandbox.ts selector that opens it.\n sandboxOpeners: Record<string, string>;\n // Bundle channel export \u2192 its routes, for the public route URLs.\n channelRoutes: Record<string, { method: string; path: string }[]>;\n // Which config fields came from directory files, for the compatibility report.\n directoryFields: { instructions: string[]; skills: string[] };\n diagnostics: DiagnosticIface[];\n}\n\nconst SEVERITY = {\n [IssueSeverity.Error]: DiagnosticSeverity.Error,\n [IssueSeverity.Warning]: DiagnosticSeverity.Warning,\n [IssueSeverity.Note]: DiagnosticSeverity.Note,\n} satisfies Record<IssueSeverity, DiagnosticSeverity>;\n\nconst isObject = (value: JsonValue | undefined): value is JsonObject =>\n jsonObjectSchema.safeParse(value).success;\n\nconst DYNAMIC_EVENTS: ReadonlySet<string> = new Set(Object.values(DynamicEvent));\n\nconst toDynamicEvents = (events: string[]): DynamicEvent[] =>\n Object.values(DynamicEvent).filter((event) => events.includes(event));\n\nconst capabilityOf = (name: string): BaseCapability | null =>\n Object.values(BaseCapability).find((capability) => capability === name) ?? null;\n\nconst apiKeySecretSchema = z.looseObject({\n kind: z.literal(CredentialNodeKind.ApiKey),\n secret: z.string().min(1),\n});\n\n// A secret reference in harness config (`hop: { secretKey }` and every other\n// `final://schemas` secret ref).\nconst secretRefSchema = z.looseObject({ secretKey: z.string().min(1) });\n\n// Secret names a definition references outside authored code: API key\n// credential nodes and secret refs anywhere in the harness config (walked as JSON).\nconst configSecrets = (value: JsonValue): string[] => {\n if (Array.isArray(value)) return value.flatMap(configSecrets);\n if (!isObject(value)) return [];\n const node = apiKeySecretSchema.safeParse(value);\n const ref = secretRefSchema.safeParse(value);\n return [\n ...(node.success ? [node.data.secret] : []),\n ...(ref.success ? [ref.data.secretKey] : []),\n ...Object.values(value).flatMap(configSecrets),\n ];\n};\n\n// The manifest's secret allowlist: declared names plus every secret the\n// definition references by name. Sandbox `variables` are organization\n// variables, not secrets, and stay out.\nconst collectSecrets = (args: {\n declared: string[];\n config: JsonValue;\n mcpServers: AgentManifestIface['mcpServers'];\n reads: string[];\n}): string[] => {\n const names = new Set([...args.declared, ...args.reads]);\n for (const name of configSecrets(args.config)) names.add(name);\n if (Array.isArray(args.mcpServers)) {\n for (const binding of args.mcpServers) {\n if (\n binding.kind === McpServerBindingKind.Http &&\n binding.auth != null &&\n 'secretKey' in binding.auth\n ) {\n names.add(binding.auth.secretKey);\n }\n }\n }\n return [...names].sort();\n};\n\nconst SECRET_READ = /secrets\\s*\\.\\s*get\\(\\s*(?:(['\"`])([^'\"`$\\\\]+)\\1\\s*\\)|(?!\\s*\\)))/g;\n\n// `secrets.get(...)` calls in authored source files, helpers included: a\n// string literal names the secret; any other argument is a computed read the\n// compiler cannot see.\nconst secretReferences = (files: Record<string, string>): { path: string; name: string | null }[] =>\n Object.entries(files)\n .filter(([path]) => isModulePath(path) || /\\.[jt]sx$/.test(path))\n .flatMap(([path, source]) =>\n [...source.matchAll(SECRET_READ)].map((match) => ({ path, name: match[2] ?? null })),\n );\n\nexport const assemble = (input: AssembleInputIface): AssembleOutputIface => {\n const diagnostics: DiagnosticIface[] = [];\n const report = (\n severity: DiagnosticSeverity,\n code: DiagnosticCode,\n message: string,\n path: string | null = null,\n ): void => {\n diagnostics.push(diagnostic({ severity, code, message, path }));\n };\n const modules: Record<string, string> = {};\n const runtimeExport = (name: string, path: string): void => {\n modules[name] = path;\n };\n const described = input.described?.modules ?? [];\n for (const module of described) {\n for (const issue of module.issues)\n report(SEVERITY[issue.severity], DiagnosticCode.Module, issue.message, module.path);\n }\n const ofSlot = (slot: SlotKind): DescribedModuleIface[] =>\n described.filter((module) => module.slot === slot);\n const withDefault = (slot: SlotKind): DescribedModuleIface[] =>\n ofSlot(slot).filter((module) => module.hasDefault && module.value != null);\n\n const dynamicSlotFor = (\n dynamic: DescribedDynamicIface,\n resolver: string,\n path: string,\n slotName: string,\n ): DynamicSlotIface | null => {\n for (const event of dynamic.events) {\n if (!DYNAMIC_EVENTS.has(event)) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Module,\n `${slotName} resolves on ${event}; dynamic slots support session.started and turn.started (the harness owns steps)`,\n path,\n );\n }\n }\n const events = toDynamicEvents(dynamic.events);\n if (events.length === 0) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Module,\n `${slotName} defineDynamic has no session.started or turn.started handler`,\n path,\n );\n return null;\n }\n runtimeExport(resolver, path);\n const slot: DynamicSlotIface = { $dynamic: { resolver, events } };\n if (dynamic.description != null) slot.$dynamic.description = dynamic.description;\n if (dynamic.preview != null) slot.$dynamic.preview = dynamic.preview;\n if ((dynamic.requiredBindings?.length ?? 0) > 0)\n slot.$dynamic.requiredBindings = dynamic.requiredBindings;\n // Build shows \"resolved at <export> on <event>\" without them.\n if (dynamic.description == null && dynamic.preview == null) {\n report(\n DiagnosticSeverity.Note,\n DiagnosticCode.Module,\n `${slotName} is resolved per session; give defineDynamic a description (and a preview) so Build can show what it resolves to`,\n path,\n );\n }\n return slot;\n };\n\n // agent.ts\n const agentModule = ofSlot(SlotKind.Agent)[0] ?? null;\n let agent: DescribedAgentIface | null = null;\n if (agentModule != null) {\n if (!agentModule.hasDefault) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Module,\n 'agent.ts must export defineAgent({ ... }) as its default export',\n agentModule.path,\n );\n } else if (agentModule.value?.type === 'agent') agent = agentModule.value;\n }\n const agentPath = agentModule?.path ?? 'agent.ts';\n for (const name of input.described?.synthesized ?? []) {\n if (name !== COMBINED_MCP_SERVERS_EXPORT) runtimeExport(name, agentPath);\n }\n\n // Harness binding. Model, reasoning, credentials and permission mode are\n // harness config, never top-level agent fields.\n let harnessRef: ProviderRef | null = null;\n let config: JsonValue = {};\n if (agent?.harness == null) {\n // A missing or invalid default export is reported above.\n if (agentModule == null || agent != null) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Harness,\n 'agent.ts must name a harness, e.g. defineAgent({ harness: serverlessPi({ model }) })',\n agentPath,\n );\n }\n } else {\n const parsed = providerRefSchema.safeParse(agent.harness.harness);\n if (parsed.success) harnessRef = parsed.data;\n else\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Harness,\n 'agent.ts harness has an invalid provider reference',\n agentPath,\n );\n config = agent.harness.config;\n }\n if (harnessRef?.kind === 'bundle') runtimeExport(harnessRef.export, agentPath);\n const credentialPolicies = Object.values(jsonObjectSchema.safeParse(config).data ?? {}).filter(\n (value) => credentialPolicySchema.safeParse(value).success,\n );\n if (harnessRef != null && credentialPolicies.length !== 1) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Harness,\n 'Declare exactly one credential policy in the harness config; billing policy belongs to this definition.',\n agentPath,\n );\n }\n\n const configObject = isObject(config) ? config : null;\n if (configObject == null && !findDynamicSlots(config).some((slot) => slot.path === '')) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Harness,\n 'harness config must be an object',\n agentPath,\n );\n }\n\n // Instructions.\n const instructionFragments: JsonValue[] = [];\n const instructionSources: string[] = [];\n const instructionModules = new Map(\n ofSlot(SlotKind.Instructions).map((module) => [module.path, module]),\n );\n for (const source of input.discovery.instructions) {\n if (source.kind === InstructionSourceKind.Markdown) {\n const content = input.files[source.path] ?? '';\n if (content.trim().length === 0) {\n report(\n DiagnosticSeverity.Warning,\n DiagnosticCode.Instructions,\n `${source.path} is empty and was skipped`,\n source.path,\n );\n continue;\n }\n instructionFragments.push({ role: InstructionRole.System, content, source: source.path });\n instructionSources.push(source.path);\n continue;\n }\n const module = instructionModules.get(source.path);\n if (module == null || module.value == null) continue;\n if (module.value.type === 'instructions') {\n instructionFragments.push({\n role: module.value.role,\n content: module.value.content,\n source: source.path,\n });\n instructionSources.push(source.path);\n } else if (module.value.type === 'dynamic') {\n const slot = dynamicSlotFor(module.value, module.base, source.path, source.path);\n if (slot != null) {\n instructionFragments.push(slot);\n instructionSources.push(source.path);\n }\n }\n }\n\n // Skills.\n const skills: JsonValue[] = [];\n const skillSources: string[] = [];\n const skillKeys = new Set<string>();\n const addSkill = (key: string, skill: JsonValue, path: string): void => {\n if (skillKeys.has(key)) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Skills,\n `skill ${key} is defined more than once`,\n path,\n );\n return;\n }\n skillKeys.add(key);\n skills.push(skill);\n skillSources.push(path);\n };\n for (const directory of input.discovery.skillDirectories) {\n const skillPath = `${directory.directory}/SKILL.md`;\n const text = input.files[skillPath] ?? '';\n const front = parseFrontMatter(text);\n if (front.error != null)\n report(DiagnosticSeverity.Warning, DiagnosticCode.Skills, front.error, skillPath);\n const description =\n frontMatterString(front.data, 'description') ?? firstParagraphLine(front.body);\n const files = [\n { path: 'SKILL.md', content: text },\n ...directory.files\n .filter((file) => file !== skillPath)\n .map((file) => ({\n path: file.slice(directory.directory.length + 1),\n content: input.files[file] ?? '',\n })),\n ];\n const skill: SkillBundleIface = { key: directory.key, files };\n if (description != null) skill.description = description;\n addSkill(directory.key, skill, skillPath);\n }\n for (const flat of input.discovery.skillMarkdown) {\n const text = input.files[flat.path] ?? '';\n const front = parseFrontMatter(text);\n const description =\n frontMatterString(front.data, 'description') ??\n firstParagraphLine(front.body) ??\n `Instructions for the ${flat.key} skill.`;\n const content = text.startsWith('---\\n')\n ? text\n : `---\\nname: ${JSON.stringify(flat.key)}\\ndescription: ${JSON.stringify(description)}\\n---\\n\\n${text}`;\n addSkill(\n flat.key,\n { key: flat.key, description, files: [{ path: 'SKILL.md', content }] },\n flat.path,\n );\n }\n for (const module of withDefault(SlotKind.Skill)) {\n if (module.value?.type === 'skill') {\n const parsed = skillBundleSchema.safeParse(module.value.skill);\n if (parsed.success) addSkill(module.key, parsed.data, module.path);\n } else if (module.value?.type === 'dynamic') {\n const slot = dynamicSlotFor(module.value, module.base, module.path, module.path);\n if (slot != null) addSkill(module.key, slot, module.path);\n }\n }\n\n const directoryFields = { instructions: instructionSources, skills: skillSources };\n if (configObject != null) {\n if (instructionFragments.length > 0) {\n if (configObject['instructions'] != null) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Conflict,\n 'harness config sets instructions and the directory has instruction files; keep one source',\n agentPath,\n );\n } else configObject['instructions'] = instructionFragments;\n }\n if (skills.length > 0) {\n if (configObject['skills'] != null) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Conflict,\n 'harness config sets skills and the directory has skills/; keep one source',\n agentPath,\n );\n } else configObject['skills'] = skills;\n }\n } else if (instructionFragments.length > 0 || skills.length > 0) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Conflict,\n 'harness config is dynamic, so directory instructions and skills cannot be added to it',\n agentPath,\n );\n }\n\n // MCP servers: authored tools and connections.\n const toolPolicy: Record<string, ToolApproval> = {};\n const toolDescriptors: ToolDescriptorIface[] = [];\n const toolApprovals: Record<string, ToolApproval> = {};\n let anyDynamicServer = false;\n let anyTurnStartedServer = false;\n for (const module of ofSlot(SlotKind.Tool)) {\n if (!module.hasDefault || module.value == null) continue;\n if (module.value.type === 'dynamic') {\n anyDynamicServer = true;\n anyTurnStartedServer ||= module.value.events.includes(DynamicEvent.TurnStarted);\n runtimeExport(module.base, module.path);\n continue;\n }\n if (module.value.type !== 'tool') continue;\n const parsed = toolDescriptorSchema.safeParse(module.value.descriptor);\n if (!parsed.success) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Module,\n `tool ${module.key} has an invalid descriptor`,\n module.path,\n );\n continue;\n }\n toolDescriptors.push(parsed.data);\n const approval =\n module.value.approval === ToolApproval.Ask ? ToolApproval.Ask : ToolApproval.Allow;\n toolApprovals[module.key] = approval;\n if (approval === ToolApproval.Ask && parsed.data.inputApproval == null)\n toolPolicy[`${AUTHORED_SERVER_KEY}/${module.key}`] = ToolApproval.Ask;\n runtimeExport(module.base, module.path);\n }\n const connections: McpServerBinding[] = [];\n const connectionKeys = new Set<string>();\n for (const module of ofSlot(SlotKind.Connection)) {\n if (!module.hasDefault || module.value == null) continue;\n if (module.key === AUTHORED_SERVER_KEY) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Connections,\n `connection name ${AUTHORED_SERVER_KEY} is reserved for authored tools`,\n module.path,\n );\n continue;\n }\n if (connectionKeys.has(module.key)) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Connections,\n `connection ${module.key} is defined more than once`,\n module.path,\n );\n continue;\n }\n connectionKeys.add(module.key);\n if (module.value.type === 'dynamic') {\n anyDynamicServer = true;\n anyTurnStartedServer ||= module.value.events.includes(DynamicEvent.TurnStarted);\n runtimeExport(module.base, module.path);\n continue;\n }\n if (module.value.type !== 'connection') continue;\n const parsed = httpMcpServerBindingSchema.safeParse(module.value.binding);\n if (!parsed.success) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Connections,\n `connection ${module.key} is invalid: ${parsed.error.issues[0]?.message ?? 'invalid'}`,\n module.path,\n );\n continue;\n }\n connections.push(parsed.data);\n if (parsed.data.inputApprovals != null) runtimeExport(module.base, module.path);\n for (const [tool, approval] of Object.entries(parsed.data.approvals ?? {})) {\n if (approval === ToolApproval.Ask && !Object.hasOwn(parsed.data.inputApprovals ?? {}, tool))\n toolPolicy[`${module.key}/${tool}`] = ToolApproval.Ask;\n }\n }\n let mcpServers: AgentManifestIface['mcpServers'];\n if (anyDynamicServer) {\n mcpServers = {\n $dynamic: {\n resolver: COMBINED_MCP_SERVERS_EXPORT,\n requiredBindings: [...ofSlot(SlotKind.Connection), ...ofSlot(SlotKind.Tool)].flatMap(\n (module) =>\n module.value?.type === 'dynamic' ? (module.value.requiredBindings ?? []) : [],\n ),\n events: anyTurnStartedServer\n ? [DynamicEvent.SessionStarted, DynamicEvent.TurnStarted]\n : [DynamicEvent.SessionStarted],\n description:\n 'Authored tools and connections, including the dynamic ones, resolved when the session starts.',\n },\n };\n runtimeExport(COMBINED_MCP_SERVERS_EXPORT, '<synthesized>');\n } else {\n mcpServers = [\n ...(toolDescriptors.length === 0\n ? []\n : [\n {\n key: AUTHORED_SERVER_KEY,\n kind: McpServerBindingKind.Worker,\n tools: toolDescriptors,\n approvals: toolApprovals,\n } satisfies McpServerBinding,\n ]),\n ...connections,\n ];\n }\n for (const [key, policy] of Object.entries(agent?.toolPolicy ?? {})) {\n toolPolicy[key] = policy === 'ask' ? ToolApproval.Ask : ToolApproval.Allow;\n }\n\n // Sandboxes.\n const sandboxModule = ofSlot(SlotKind.Sandbox)[0];\n const sandbox: DescribedSandboxIface | null =\n sandboxModule?.value?.type === 'sandbox' ? sandboxModule.value : null;\n const sandboxPath = sandboxModule?.path ?? 'sandbox.ts';\n const sandboxes: Record<string, SandboxBindingIface> = {};\n const sandboxOpeners: Record<string, string> = {};\n const providerExportByName = new Map(\n Object.entries(sandbox?.providers ?? {}).map(([exportName, name]) => [name, exportName]),\n );\n const duplicateNames = new Set<string>();\n for (const name of Object.values(sandbox?.providers ?? {})) {\n if (duplicateNames.has(name))\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Sandbox,\n `sandbox.ts exports multiple providers named ${name}; give each provider a distinct name`,\n sandboxPath,\n );\n duplicateNames.add(name);\n }\n const providerFor = (args: {\n ref: JsonValue | null;\n name: string | null;\n target: string;\n }): ProviderRef | null => {\n if (args.ref != null) {\n const parsed = providerRefSchema.safeParse(args.ref);\n if (parsed.success) return parsed.data;\n }\n if (args.name != null) {\n const exportName = providerExportByName.get(args.name);\n if (exportName != null) {\n runtimeExport(exportName, sandboxPath);\n return bundleRef(exportName);\n }\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Sandbox,\n `sandbox target ${args.target} uses provider ${args.name}, which is neither installed nor exported from sandbox.ts`,\n sandboxPath,\n );\n return null;\n }\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Sandbox,\n `sandbox target ${args.target} is dynamic and its provider cannot be inferred; give defineDynamic a provider ({ provider: computer, events })`,\n sandboxPath,\n );\n return null;\n };\n // A dynamic target without a provider hint: the\n // provider its resolver returns an environment of is unknown until a session\n // starts, so an installed provider is inferred here (the target's name, or\n // the one installed provider sandbox.ts uses) and checked by reference when\n // the slot resolves. Providers defined in sandbox.ts still need the hint:\n // their environments carry only a name, which cannot be checked.\n const inferredProvider = (target: string): { ref: JsonValue; name: string } | null => {\n if (providerExportByName.size > 0) return null;\n const specifier = Object.hasOwn(input.installedSandboxProviders ?? {}, target)\n ? input.installedSandboxProviders?.[target]\n : undefined;\n if (specifier != null) return { ref: packageRef(specifier), name: target };\n const installed = new Map<string, { ref: JsonValue; name: string }>();\n for (const described of Object.values(sandbox?.targets ?? {})) {\n const environment = described.environment;\n const parsed = providerRefSchema.safeParse(environment?.providerRef);\n if (environment?.providerName == null || !parsed.success) continue;\n if (parsed.data.kind !== ProviderRefKind.Package) continue;\n installed.set(formatProviderRef(parsed.data), {\n ref: environment.providerRef,\n name: environment.providerName,\n });\n }\n return installed.size === 1 ? ([...installed.values()][0] ?? null) : null;\n };\n for (const [target, described] of Object.entries(sandbox?.targets ?? {})) {\n if (described.environment != null) {\n const environment = described.environment;\n const provider = providerFor({\n ref: environment.providerRef,\n name: environment.providerName,\n target,\n });\n if (provider == null) continue;\n const open: JsonValue | undefined = environment.openOptions ?? undefined;\n if (\n open != null &&\n (!isObject(open) || Object.keys(open).some((key) => key !== 'access' && key !== 'attach'))\n ) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Sandbox,\n `sandbox target ${target} open options support only access and attach`,\n sandboxPath,\n );\n continue;\n }\n const access = isObject(open) ? open['access'] : undefined;\n const attach = isObject(open) ? open['attach'] : undefined;\n if (\n access != null &&\n access !== SandboxAccess.Read &&\n access !== SandboxAccess.Execute &&\n access !== SandboxAccess.Write\n ) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Sandbox,\n `sandbox target ${target} has invalid access ${String(access)}`,\n sandboxPath,\n );\n continue;\n }\n if (attach != null && attach !== SandboxAttach.OnPrompt && attach !== SandboxAttach.Lazy) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Sandbox,\n `sandbox target ${target} has invalid attach ${String(attach)}`,\n sandboxPath,\n );\n continue;\n }\n sandboxes[target] = {\n provider,\n environment: environment.options,\n access:\n access === SandboxAccess.Read || access === SandboxAccess.Execute\n ? access\n : SandboxAccess.Write,\n attach: attach === SandboxAttach.OnPrompt ? SandboxAttach.OnPrompt : SandboxAttach.Lazy,\n };\n } else if (described.dynamic != null) {\n const hinted = described.dynamic.provider;\n const inferred = hinted == null ? inferredProvider(target) : null;\n if (inferred != null) {\n report(\n DiagnosticSeverity.Note,\n DiagnosticCode.Sandbox,\n `sandbox target ${target} is dynamic; its provider is ${inferred.name}, and its resolver must return a ${inferred.name} environment`,\n sandboxPath,\n );\n }\n const provider = providerFor({\n ref: hinted?.ref ?? inferred?.ref ?? null,\n name: hinted?.name ?? inferred?.name ?? null,\n target,\n });\n const slot = dynamicSlotFor(\n described.dynamic,\n described.exportName,\n sandboxPath,\n `sandbox target ${target}`,\n );\n if (provider == null || slot == null) continue;\n sandboxes[target] = {\n provider,\n environment: slot,\n access: SandboxAccess.Write,\n attach: SandboxAttach.Lazy,\n };\n }\n }\n if (\n sandbox?.selector === true &&\n sandbox.defaultTarget != null &&\n sandboxes[sandbox.defaultTarget] != null\n ) {\n sandboxOpeners[sandbox.defaultTarget] = 'sandbox';\n runtimeExport('sandbox', sandboxPath);\n report(\n DiagnosticSeverity.Note,\n DiagnosticCode.Sandbox,\n `sandbox.ts default export opens target ${sandbox.defaultTarget} for each session`,\n sandboxPath,\n );\n }\n\n // Base tools.\n const base: AgentManifestIface['tools']['base'] = {};\n if (agent?.tools != null) {\n for (const [name, target] of Object.entries(agent.tools)) {\n const capability = capabilityOf(name);\n if (capability == null) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.BaseTools,\n `baseTools has unknown capability ${name}`,\n agentPath,\n );\n continue;\n }\n if (sandboxes[target] == null) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.BaseTools,\n `baseTools ${name} is bound to ${target}, which is not a sandbox target`,\n agentPath,\n );\n continue;\n }\n base[capability] = { target };\n }\n }\n // Capabilities declared on the harness's own host (`harnessHost`).\n const host: BaseCapability[] = [];\n for (const name of agent?.hostTools ?? []) {\n const capability = capabilityOf(name);\n if (capability == null) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.BaseTools,\n `baseTools has unknown capability ${name}`,\n agentPath,\n );\n continue;\n }\n if (base[capability] != null) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.BaseTools,\n `baseTools ${name} is bound both to a sandbox target and to harnessHost`,\n agentPath,\n );\n continue;\n }\n host.push(capability);\n }\n\n // Channels.\n const channels: ChannelBindingIface[] = [];\n const channelKeys = new Set<string>();\n const channelRoutes: AssembleOutputIface['channelRoutes'] = {};\n const addChannel = (binding: ChannelBindingIface, path: string): void => {\n if (channelKeys.has(binding.key)) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Channel,\n `channel ${binding.key} is bound more than once`,\n path,\n );\n return;\n }\n channelKeys.add(binding.key);\n channels.push(binding);\n };\n for (const module of withDefault(SlotKind.Channel)) {\n if (module.value?.type !== 'channel') continue;\n const { value } = module;\n if (value.disabled) continue;\n if (\n value.turnPolicy != null &&\n value.turnPolicy !== TurnPolicy.Steer &&\n value.turnPolicy !== TurnPolicy.Queue\n ) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Channel,\n `channel ${module.key} turnPolicy must be steer or queue`,\n module.path,\n );\n }\n for (const route of value.routes) {\n if (!route.path.startsWith('/')) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Channel,\n `channel ${module.key} route ${route.path} must start with /`,\n module.path,\n );\n }\n }\n const parsedConfig = jsonObjectSchema.safeParse(value.config);\n const installed = value.installed == null ? null : providerRefSchema.safeParse(value.installed);\n if (installed != null && !installed.success) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Channel,\n `channel ${module.key} has an invalid installed reference`,\n module.path,\n );\n continue;\n }\n addChannel(\n {\n key: module.key,\n channel: installed == null ? bundleRef(module.base) : installed.data,\n config: parsedConfig.success ? parsedConfig.data : {},\n source: 'authored',\n },\n module.path,\n );\n if (value.installed != null) continue;\n runtimeExport(module.base, module.path);\n channelRoutes[module.base] = value.routes.map((route) => ({\n method: route.method,\n path: route.path,\n }));\n }\n for (const [index, binding] of (agent?.channels ?? []).entries()) {\n const ref = providerRefSchema.safeParse(binding.channel);\n if (!ref.success) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Channel,\n `agent.ts channels[${index}] has an invalid channel reference`,\n agentPath,\n );\n continue;\n }\n const config = jsonObjectSchema.safeParse(binding.config);\n const key =\n binding.key ??\n (ref.data.kind === 'package'\n ? (ref.data.specifier.split('/').at(-1) ?? ref.data.specifier)\n : ref.data.export);\n addChannel({ key, channel: ref.data, config: config.success ? config.data : {} }, agentPath);\n }\n\n // Hooks.\n const hooks: HookBindingIface[] = [];\n for (const module of withDefault(SlotKind.Hook)) {\n if (module.value?.type !== 'hook') continue;\n const events: string[] = [];\n for (const key of module.value.keys) {\n const normalized = normalizeHookKey(key);\n switch (normalized.kind) {\n case HookEventKeyKind.Unknown:\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Hook,\n `hook ${module.key} subscribes to unknown event ${key}`,\n module.path,\n );\n break;\n case HookEventKeyKind.Canonical:\n case HookEventKeyKind.Wildcard:\n events.push(...normalized.events);\n break;\n }\n }\n const unique = [...new Set(events)];\n if (unique.length === 0) {\n report(\n DiagnosticSeverity.Warning,\n DiagnosticCode.Hook,\n `hook ${module.key} subscribes to no events and was left out`,\n module.path,\n );\n continue;\n }\n hooks.push({ slug: module.key, export: module.base, events: unique });\n runtimeExport(module.base, module.path);\n }\n\n // Schedules.\n const schedules: ScheduleDefinitionIface[] = [];\n const addSchedule = (args: {\n key: string;\n path: string;\n cron: string | null;\n timezone: string | null;\n target: string | null;\n prompt: string | null;\n }): void => {\n const { key, path } = args;\n if (args.cron == null) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Schedule,\n `schedule ${key} needs a cron expression`,\n path,\n );\n return;\n }\n const timezone = args.timezone ?? 'UTC';\n try {\n new Cron(args.cron, { timezone, paused: true }).nextRun();\n } catch (cause) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Schedule,\n `schedule ${key}: ${cause instanceof Error ? cause.message : String(cause)}`,\n path,\n );\n return;\n }\n const target = Object.values(ScheduleTarget).find(\n (candidate) => candidate === (args.target ?? ScheduleTarget.OwnerDirect),\n );\n if (target == null) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Schedule,\n `schedule ${key} target must be owner-direct or bound-conversation`,\n path,\n );\n return;\n }\n const prompt = args.prompt?.trim() ?? '';\n if (prompt.length === 0) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Schedule,\n `schedule ${key} needs a prompt`,\n path,\n );\n return;\n }\n schedules.push({ key, cron: args.cron, timezone, prompt, target });\n };\n for (const item of input.discovery.scheduleMarkdown) {\n const front = parseFrontMatter(input.files[item.path] ?? '');\n if (front.error != null)\n report(DiagnosticSeverity.Error, DiagnosticCode.Schedule, front.error, item.path);\n const field = (name: string): string | null => frontMatterString(front.data, name);\n addSchedule({\n key: item.key,\n path: item.path,\n cron: field('cron'),\n timezone: field('timezone'),\n target: field('target'),\n prompt: front.body,\n });\n }\n for (const module of withDefault(SlotKind.Schedule)) {\n if (module.value?.type !== 'schedule') continue;\n addSchedule({\n key: module.key,\n path: module.path,\n cron: module.value.cron,\n timezone: module.value.timezone,\n target: module.value.target,\n prompt: module.value.markdown,\n });\n }\n const scheduleKeys = new Set<string>();\n for (const schedule of schedules) {\n if (scheduleKeys.has(schedule.key)) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Schedule,\n `schedule ${schedule.key} is defined more than once`,\n );\n }\n scheduleKeys.add(schedule.key);\n }\n\n for (const rejected of input.discovery.rejected) {\n report(DiagnosticSeverity.Error, DiagnosticCode.RejectedSlot, rejected.message, rejected.path);\n }\n for (const unsupported of input.discovery.unsupported) {\n report(\n DiagnosticSeverity.Warning,\n DiagnosticCode.RejectedSlot,\n unsupported.message,\n unsupported.path,\n );\n }\n\n // Literal `secrets.get('<name>')` reads join the allowlist; a computed name\n // must be declared in agent.ts, or the read fails at run time.\n const references = secretReferences(input.files);\n const secrets = collectSecrets({\n declared: agent?.secrets ?? [],\n config,\n mcpServers: connections,\n reads: references.flatMap((reference) => (reference.name == null ? [] : [reference.name])),\n });\n const computedReads = new Set(\n references.flatMap((reference) => (reference.name == null ? [reference.path] : [])),\n );\n for (const path of computedReads) {\n report(\n DiagnosticSeverity.Note,\n DiagnosticCode.Secrets,\n `${path} reads a secret by a computed name; list it in defineAgent({ secrets: [...] }) or the read fails at run time`,\n path,\n );\n }\n\n if (harnessRef == null) {\n return { manifest: null, modules, sandboxOpeners, channelRoutes, directoryFields, diagnostics };\n }\n const draft: AgentManifestIface = {\n version: MANIFEST_VERSION,\n identity: {\n name: agent?.name ?? input.fallbackName,\n description: agent?.description ?? null,\n avatarUrl: agent?.avatarUrl ?? null,\n },\n harness: { harness: harnessRef, config },\n mcpServers,\n sandboxes,\n tools: host.length === 0 ? { base } : { base, host },\n toolPolicy,\n secrets,\n channels,\n channelSources: Object.fromEntries(\n withDefault(SlotKind.Channel).flatMap((module) =>\n module.value?.type === 'channel'\n ? [\n [\n module.key,\n { path: module.path, source: 'authored', disabled: module.value.disabled },\n ],\n ]\n : [],\n ),\n ),\n hooks,\n schedules,\n bundle: null,\n };\n const resolvers: NonNullable<AgentManifestIface['bundle']>['resolvers'] = {};\n for (const found of findDynamicSlots(draft)) {\n resolvers[found.path] = {\n export: found.slot.$dynamic.resolver,\n events: found.slot.$dynamic.events,\n };\n }\n const hasSandboxes = Object.keys(sandboxes).length > 0;\n if (Object.keys(modules).length > 0 || hasSandboxes) {\n if (input.bundle == null) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Bundle,\n 'the definition needs a bundle but none was produced',\n );\n } else\n draft.bundle = {\n hash: input.bundle.hash,\n resolvers,\n hasPreparationFiles: Object.keys(preparationFiles(input.files)).length > 0,\n };\n }\n const validated = agentManifestSchema.safeParse(draft);\n if (!validated.success) {\n for (const issue of validated.error.issues) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Manifest,\n `manifest ${issue.path.join('.')}: ${issue.message}`,\n );\n }\n }\n const failed = diagnostics.some((item) => item.severity === DiagnosticSeverity.Error);\n return {\n manifest: failed || !validated.success ? null : validated.data,\n modules,\n sandboxOpeners,\n channelRoutes,\n directoryFields,\n diagnostics,\n };\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import {\n agentManifestSchema,\n BaseCapability,\n bundleRef,\n CredentialNodeKind,\n credentialPolicySchema,\n DynamicEvent,\n findDynamicSlots,\n formatProviderRef,\n httpMcpServerBindingSchema,\n InstructionRole,\n jsonObjectSchema,\n MANIFEST_VERSION,\n McpServerBindingKind,\n packageRef,\n ProviderRefKind,\n providerRefSchema,\n SandboxAccess,\n SandboxAttach,\n ScheduleTarget,\n skillBundleSchema,\n ToolApproval,\n toolDescriptorSchema,\n TurnPolicy,\n type AgentManifestIface,\n type ChannelBindingIface,\n type DynamicSlotIface,\n type HookBindingIface,\n type JsonObject,\n type JsonValue,\n type McpServerBinding,\n type ProviderRef,\n type SandboxBindingIface,\n type ScheduleDefinitionIface,\n type SkillBundleIface,\n type ToolDescriptorIface,\n} from '@finalai/agent-provider';\nimport { Cron } from 'croner';\nimport * as z from 'zod';\nimport { HookEventKeyKind, normalizeHookKey } from \"../authoring/hooks.mjs\";\nimport type {\n DescribedAgentIface,\n DescribedBundleIface,\n DescribedDynamicIface,\n DescribedModuleIface,\n DescribedSandboxIface,\n} from \"../runtime/described.mjs\";\nimport { AUTHORED_SERVER_KEY, COMBINED_MCP_SERVERS_EXPORT, SlotKind } from \"../runtime/layout.mjs\";\nimport { IssueSeverity } from \"../runtime/lower.mjs\";\nimport {\n diagnostic,\n DiagnosticCode,\n DiagnosticSeverity,\n type DiagnosticIface,\n} from \"./diagnostics.mjs\";\nimport { InstructionSourceKind, isModulePath, type DiscoveryIface } from \"./discovery.mjs\";\nimport { preparationFiles } from \"./files.mjs\";\nimport { firstParagraphLine, frontMatterString, parseFrontMatter } from \"./frontmatter.mjs\";\n\nexport interface AssembleInputIface {\n installedSandboxProviders?: Readonly<Record<string, string>>;\n files: Record<string, string>;\n discovery: DiscoveryIface;\n described: DescribedBundleIface | null;\n fallbackName: string;\n bundle: { hash: string; code: string } | null;\n}\n\nexport interface AssembleOutputIface {\n manifest: AgentManifestIface | null;\n // Bundle export \u2192 directory-relative source path, for what the runtime calls.\n modules: Record<string, string>;\n // Target \u2192 bundle export of the sandbox.ts selector that opens it.\n sandboxOpeners: Record<string, string>;\n // Bundle channel export \u2192 its routes, for the public route URLs.\n channelRoutes: Record<string, { method: string; path: string }[]>;\n // Which config fields came from directory files, for the compatibility report.\n directoryFields: { instructions: string[]; skills: string[] };\n diagnostics: DiagnosticIface[];\n}\n\nconst SEVERITY = {\n [IssueSeverity.Error]: DiagnosticSeverity.Error,\n [IssueSeverity.Warning]: DiagnosticSeverity.Warning,\n [IssueSeverity.Note]: DiagnosticSeverity.Note,\n} satisfies Record<IssueSeverity, DiagnosticSeverity>;\n\nconst isObject = (value: JsonValue | undefined): value is JsonObject =>\n jsonObjectSchema.safeParse(value).success;\n\nconst DYNAMIC_EVENTS: ReadonlySet<string> = new Set(Object.values(DynamicEvent));\n\nconst toDynamicEvents = (events: string[]): DynamicEvent[] =>\n Object.values(DynamicEvent).filter((event) => events.includes(event));\n\nconst capabilityOf = (name: string): BaseCapability | null =>\n Object.values(BaseCapability).find((capability) => capability === name) ?? null;\n\nconst apiKeySecretSchema = z.looseObject({\n kind: z.literal(CredentialNodeKind.ApiKey),\n secret: z.string().min(1),\n});\n\n// A secret reference in harness config (`hop: { secretKey }` and every other\n// `final://schemas` secret ref).\nconst secretRefSchema = z.looseObject({ secretKey: z.string().min(1) });\n\n// Secret names a definition references outside authored code: API key\n// credential nodes and secret refs anywhere in the harness config (walked as JSON).\nconst configSecrets = (value: JsonValue): string[] => {\n if (Array.isArray(value)) return value.flatMap(configSecrets);\n if (!isObject(value)) return [];\n const node = apiKeySecretSchema.safeParse(value);\n const ref = secretRefSchema.safeParse(value);\n return [\n ...(node.success ? [node.data.secret] : []),\n ...(ref.success ? [ref.data.secretKey] : []),\n ...Object.values(value).flatMap(configSecrets),\n ];\n};\n\n// The manifest's secret allowlist: declared names plus every secret the\n// definition references by name. Sandbox `variables` are organization\n// variables, not secrets, and stay out.\nconst collectSecrets = (args: {\n declared: string[];\n config: JsonValue;\n mcpServers: AgentManifestIface['mcpServers'];\n reads: string[];\n}): string[] => {\n const names = new Set([...args.declared, ...args.reads]);\n for (const name of configSecrets(args.config)) names.add(name);\n if (Array.isArray(args.mcpServers)) {\n for (const binding of args.mcpServers) {\n if (\n binding.kind === McpServerBindingKind.Http &&\n binding.auth != null &&\n 'secretKey' in binding.auth\n ) {\n names.add(binding.auth.secretKey);\n }\n }\n }\n return [...names].sort();\n};\n\nconst SECRET_READ = /secrets\\s*\\.\\s*get\\(\\s*(?:(['\"`])([^'\"`$\\\\]+)\\1\\s*\\)|(?!\\s*\\)))/g;\n\n// `secrets.get(...)` calls in authored source files, helpers included: a\n// string literal names the secret; any other argument is a computed read the\n// compiler cannot see.\nconst secretReferences = (files: Record<string, string>): { path: string; name: string | null }[] =>\n Object.entries(files)\n .filter(([path]) => isModulePath(path) || /\\.[jt]sx$/.test(path))\n .flatMap(([path, source]) =>\n [...source.matchAll(SECRET_READ)].map((match) => ({ path, name: match[2] ?? null })),\n );\n\nexport const assemble = (input: AssembleInputIface): AssembleOutputIface => {\n const diagnostics: DiagnosticIface[] = [];\n const report = (\n severity: DiagnosticSeverity,\n code: DiagnosticCode,\n message: string,\n path: string | null = null,\n ): void => {\n diagnostics.push(diagnostic({ severity, code, message, path }));\n };\n const modules: Record<string, string> = {};\n const runtimeExport = (name: string, path: string): void => {\n modules[name] = path;\n };\n const described = input.described?.modules ?? [];\n for (const module of described) {\n for (const issue of module.issues)\n report(SEVERITY[issue.severity], DiagnosticCode.Module, issue.message, module.path);\n }\n const ofSlot = (slot: SlotKind): DescribedModuleIface[] =>\n described.filter((module) => module.slot === slot);\n const withDefault = (slot: SlotKind): DescribedModuleIface[] =>\n ofSlot(slot).filter((module) => module.hasDefault && module.value != null);\n\n const dynamicSlotFor = (\n dynamic: DescribedDynamicIface,\n resolver: string,\n path: string,\n slotName: string,\n ): DynamicSlotIface | null => {\n for (const event of dynamic.events) {\n if (!DYNAMIC_EVENTS.has(event)) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Module,\n `${slotName} resolves on ${event}; dynamic slots support session.started and turn.started (the harness owns steps)`,\n path,\n );\n }\n }\n const events = toDynamicEvents(dynamic.events);\n if (events.length === 0) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Module,\n `${slotName} defineDynamic has no session.started or turn.started handler`,\n path,\n );\n return null;\n }\n runtimeExport(resolver, path);\n const slot: DynamicSlotIface = { $dynamic: { resolver, events } };\n if (dynamic.description != null) slot.$dynamic.description = dynamic.description;\n if (dynamic.preview != null) slot.$dynamic.preview = dynamic.preview;\n if ((dynamic.requiredBindings?.length ?? 0) > 0)\n slot.$dynamic.requiredBindings = dynamic.requiredBindings;\n // Build shows \"resolved at <export> on <event>\" without them.\n if (dynamic.description == null && dynamic.preview == null) {\n report(\n DiagnosticSeverity.Note,\n DiagnosticCode.Module,\n `${slotName} is resolved per session; give defineDynamic a description (and a preview) so Build can show what it resolves to`,\n path,\n );\n }\n return slot;\n };\n\n // agent.ts\n const agentModule = ofSlot(SlotKind.Agent)[0] ?? null;\n let agent: DescribedAgentIface | null = null;\n if (agentModule != null) {\n if (!agentModule.hasDefault) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Module,\n 'agent.ts must export defineAgent({ ... }) as its default export',\n agentModule.path,\n );\n } else if (agentModule.value?.type === 'agent') agent = agentModule.value;\n }\n const agentPath = agentModule?.path ?? 'agent.ts';\n for (const name of input.described?.synthesized ?? []) {\n if (name !== COMBINED_MCP_SERVERS_EXPORT) runtimeExport(name, agentPath);\n }\n\n // Harness binding. Model, reasoning, credentials and permission mode are\n // harness config, never top-level agent fields.\n let harnessRef: ProviderRef | null = null;\n let config: JsonValue = {};\n if (agent?.harness == null) {\n // A missing or invalid default export is reported above.\n if (agentModule == null || agent != null) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Harness,\n 'agent.ts must name a harness, e.g. defineAgent({ harness: serverlessPi({ model }) })',\n agentPath,\n );\n }\n } else {\n const parsed = providerRefSchema.safeParse(agent.harness.harness);\n if (parsed.success) harnessRef = parsed.data;\n else\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Harness,\n 'agent.ts harness has an invalid provider reference',\n agentPath,\n );\n config = agent.harness.config;\n }\n if (harnessRef?.kind === 'bundle') runtimeExport(harnessRef.export, agentPath);\n const credentialPolicies = Object.values(jsonObjectSchema.safeParse(config).data ?? {}).filter(\n (value) => credentialPolicySchema.safeParse(value).success,\n );\n if (harnessRef != null && credentialPolicies.length !== 1) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Harness,\n 'Declare exactly one credential policy in the harness config; billing policy belongs to this definition.',\n agentPath,\n );\n }\n\n const configObject = isObject(config) ? config : null;\n if (configObject == null && !findDynamicSlots(config).some((slot) => slot.path === '')) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Harness,\n 'harness config must be an object',\n agentPath,\n );\n }\n\n // Instructions.\n const instructionFragments: JsonValue[] = [];\n const instructionSources: string[] = [];\n const instructionModules = new Map(\n ofSlot(SlotKind.Instructions).map((module) => [module.path, module]),\n );\n for (const source of input.discovery.instructions) {\n if (source.kind === InstructionSourceKind.Markdown) {\n const content = input.files[source.path] ?? '';\n if (content.trim().length === 0) {\n report(\n DiagnosticSeverity.Warning,\n DiagnosticCode.Instructions,\n `${source.path} is empty and was skipped`,\n source.path,\n );\n continue;\n }\n instructionFragments.push({ role: InstructionRole.System, content, source: source.path });\n instructionSources.push(source.path);\n continue;\n }\n const module = instructionModules.get(source.path);\n if (module == null || module.value == null) continue;\n if (module.value.type === 'instructions') {\n instructionFragments.push({\n role: module.value.role,\n content: module.value.content,\n source: source.path,\n });\n instructionSources.push(source.path);\n } else if (module.value.type === 'dynamic') {\n const slot = dynamicSlotFor(module.value, module.base, source.path, source.path);\n if (slot != null) {\n instructionFragments.push(slot);\n instructionSources.push(source.path);\n }\n }\n }\n\n // Skills.\n const skills: JsonValue[] = [];\n const skillSources: string[] = [];\n const skillKeys = new Set<string>();\n const addSkill = (key: string, skill: JsonValue, path: string): void => {\n if (skillKeys.has(key)) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Skills,\n `skill ${key} is defined more than once`,\n path,\n );\n return;\n }\n skillKeys.add(key);\n skills.push(skill);\n skillSources.push(path);\n };\n for (const directory of input.discovery.skillDirectories) {\n const skillPath = `${directory.directory}/SKILL.md`;\n const text = input.files[skillPath] ?? '';\n const front = parseFrontMatter(text);\n if (front.error != null)\n report(DiagnosticSeverity.Warning, DiagnosticCode.Skills, front.error, skillPath);\n const description =\n frontMatterString(front.data, 'description') ?? firstParagraphLine(front.body);\n const files = [\n { path: 'SKILL.md', content: text },\n ...directory.files\n .filter((file) => file !== skillPath)\n .map((file) => ({\n path: file.slice(directory.directory.length + 1),\n content: input.files[file] ?? '',\n })),\n ];\n const skill: SkillBundleIface = { key: directory.key, files };\n if (description != null) skill.description = description;\n addSkill(directory.key, skill, skillPath);\n }\n for (const flat of input.discovery.skillMarkdown) {\n const text = input.files[flat.path] ?? '';\n const front = parseFrontMatter(text);\n const description =\n frontMatterString(front.data, 'description') ??\n firstParagraphLine(front.body) ??\n `Instructions for the ${flat.key} skill.`;\n const content = text.startsWith('---\\n')\n ? text\n : `---\\nname: ${JSON.stringify(flat.key)}\\ndescription: ${JSON.stringify(description)}\\n---\\n\\n${text}`;\n addSkill(\n flat.key,\n { key: flat.key, description, files: [{ path: 'SKILL.md', content }] },\n flat.path,\n );\n }\n for (const module of withDefault(SlotKind.Skill)) {\n if (module.value?.type === 'skill') {\n const parsed = skillBundleSchema.safeParse(module.value.skill);\n if (parsed.success) addSkill(module.key, parsed.data, module.path);\n } else if (module.value?.type === 'dynamic') {\n const slot = dynamicSlotFor(module.value, module.base, module.path, module.path);\n if (slot != null) addSkill(module.key, slot, module.path);\n }\n }\n\n const directoryFields = { instructions: instructionSources, skills: skillSources };\n if (configObject != null) {\n if (instructionFragments.length > 0) {\n if (configObject['instructions'] != null) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Conflict,\n 'harness config sets instructions and the directory has instruction files; keep one source',\n agentPath,\n );\n } else configObject['instructions'] = instructionFragments;\n }\n if (skills.length > 0) {\n if (configObject['skills'] != null) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Conflict,\n 'harness config sets skills and the directory has skills/; keep one source',\n agentPath,\n );\n } else configObject['skills'] = skills;\n }\n } else if (instructionFragments.length > 0 || skills.length > 0) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Conflict,\n 'harness config is dynamic, so directory instructions and skills cannot be added to it',\n agentPath,\n );\n }\n\n // MCP servers: authored tools and connections.\n const toolPolicy: Record<string, ToolApproval> = {};\n const toolDescriptors: ToolDescriptorIface[] = [];\n const toolApprovals: Record<string, ToolApproval> = {};\n let anyDynamicServer = false;\n let anyTurnStartedServer = false;\n for (const module of ofSlot(SlotKind.Tool)) {\n if (!module.hasDefault || module.value == null) continue;\n if (module.value.type === 'dynamic') {\n anyDynamicServer = true;\n anyTurnStartedServer ||= module.value.events.includes(DynamicEvent.TurnStarted);\n runtimeExport(module.base, module.path);\n continue;\n }\n if (module.value.type !== 'tool') continue;\n const parsed = toolDescriptorSchema.safeParse(module.value.descriptor);\n if (!parsed.success) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Module,\n `tool ${module.key} has an invalid descriptor`,\n module.path,\n );\n continue;\n }\n toolDescriptors.push(parsed.data);\n const approval =\n module.value.approval === ToolApproval.Ask ? ToolApproval.Ask : ToolApproval.Allow;\n toolApprovals[module.key] = approval;\n if (approval === ToolApproval.Ask && parsed.data.inputApproval == null)\n toolPolicy[`${AUTHORED_SERVER_KEY}/${module.key}`] = ToolApproval.Ask;\n runtimeExport(module.base, module.path);\n }\n const connections: McpServerBinding[] = [];\n const connectionKeys = new Set<string>();\n for (const module of ofSlot(SlotKind.Connection)) {\n if (!module.hasDefault || module.value == null) continue;\n if (module.key === AUTHORED_SERVER_KEY) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Connections,\n `connection name ${AUTHORED_SERVER_KEY} is reserved for authored tools`,\n module.path,\n );\n continue;\n }\n if (connectionKeys.has(module.key)) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Connections,\n `connection ${module.key} is defined more than once`,\n module.path,\n );\n continue;\n }\n connectionKeys.add(module.key);\n if (module.value.type === 'dynamic') {\n anyDynamicServer = true;\n anyTurnStartedServer ||= module.value.events.includes(DynamicEvent.TurnStarted);\n runtimeExport(module.base, module.path);\n continue;\n }\n if (module.value.type !== 'connection') continue;\n const parsed = httpMcpServerBindingSchema.safeParse(module.value.binding);\n if (!parsed.success) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Connections,\n `connection ${module.key} is invalid: ${parsed.error.issues[0]?.message ?? 'invalid'}`,\n module.path,\n );\n continue;\n }\n connections.push(parsed.data);\n if (parsed.data.inputApprovals != null) runtimeExport(module.base, module.path);\n for (const [tool, approval] of Object.entries(parsed.data.approvals ?? {})) {\n if (approval === ToolApproval.Ask && !Object.hasOwn(parsed.data.inputApprovals ?? {}, tool))\n toolPolicy[`${module.key}/${tool}`] = ToolApproval.Ask;\n }\n }\n let mcpServers: AgentManifestIface['mcpServers'];\n if (anyDynamicServer) {\n mcpServers = {\n $dynamic: {\n resolver: COMBINED_MCP_SERVERS_EXPORT,\n requiredBindings: [...ofSlot(SlotKind.Connection), ...ofSlot(SlotKind.Tool)].flatMap(\n (module) =>\n module.value?.type === 'dynamic' ? (module.value.requiredBindings ?? []) : [],\n ),\n events: anyTurnStartedServer\n ? [DynamicEvent.SessionStarted, DynamicEvent.TurnStarted]\n : [DynamicEvent.SessionStarted],\n description:\n 'Authored tools and connections, including the dynamic ones, resolved when the session starts.',\n },\n };\n runtimeExport(COMBINED_MCP_SERVERS_EXPORT, '<synthesized>');\n } else {\n mcpServers = [\n ...(toolDescriptors.length === 0\n ? []\n : [\n {\n key: AUTHORED_SERVER_KEY,\n kind: McpServerBindingKind.Worker,\n tools: toolDescriptors,\n approvals: toolApprovals,\n } satisfies McpServerBinding,\n ]),\n ...connections,\n ];\n }\n for (const [key, policy] of Object.entries(agent?.toolPolicy ?? {})) {\n toolPolicy[key] = policy === 'ask' ? ToolApproval.Ask : ToolApproval.Allow;\n }\n\n // Sandboxes.\n const sandboxModule = ofSlot(SlotKind.Sandbox)[0];\n const sandbox: DescribedSandboxIface | null =\n sandboxModule?.value?.type === 'sandbox' ? sandboxModule.value : null;\n const sandboxPath = sandboxModule?.path ?? 'sandbox.ts';\n const sandboxes: Record<string, SandboxBindingIface> = {};\n const sandboxOpeners: Record<string, string> = {};\n const providerExportByName = new Map(\n Object.entries(sandbox?.providers ?? {}).map(([exportName, name]) => [name, exportName]),\n );\n const duplicateNames = new Set<string>();\n for (const name of Object.values(sandbox?.providers ?? {})) {\n if (duplicateNames.has(name))\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Sandbox,\n `sandbox.ts exports multiple providers named ${name}; give each provider a distinct name`,\n sandboxPath,\n );\n duplicateNames.add(name);\n }\n const providerFor = (args: {\n ref: JsonValue | null;\n name: string | null;\n target: string;\n }): ProviderRef | null => {\n if (args.ref != null) {\n const parsed = providerRefSchema.safeParse(args.ref);\n if (parsed.success) return parsed.data;\n }\n if (args.name != null) {\n const exportName = providerExportByName.get(args.name);\n if (exportName != null) {\n runtimeExport(exportName, sandboxPath);\n return bundleRef(exportName);\n }\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Sandbox,\n `sandbox target ${args.target} uses provider ${args.name}, which is neither installed nor exported from sandbox.ts`,\n sandboxPath,\n );\n return null;\n }\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Sandbox,\n `sandbox target ${args.target} is dynamic and its provider cannot be inferred; give defineDynamic a provider ({ provider: computer, events })`,\n sandboxPath,\n );\n return null;\n };\n // A dynamic target without a provider hint: the\n // provider its resolver returns an environment of is unknown until a session\n // starts, so an installed provider is inferred here (the target's name, or\n // the one installed provider sandbox.ts uses) and checked by reference when\n // the slot resolves. Providers defined in sandbox.ts still need the hint:\n // their environments carry only a name, which cannot be checked.\n const inferredProvider = (target: string): { ref: JsonValue; name: string } | null => {\n if (providerExportByName.size > 0) return null;\n const specifier = Object.hasOwn(input.installedSandboxProviders ?? {}, target)\n ? input.installedSandboxProviders?.[target]\n : undefined;\n if (specifier != null) return { ref: packageRef(specifier), name: target };\n const installed = new Map<string, { ref: JsonValue; name: string }>();\n for (const described of Object.values(sandbox?.targets ?? {})) {\n const environment = described.environment;\n const parsed = providerRefSchema.safeParse(environment?.providerRef);\n if (environment?.providerName == null || !parsed.success) continue;\n if (parsed.data.kind !== ProviderRefKind.Package) continue;\n installed.set(formatProviderRef(parsed.data), {\n ref: environment.providerRef,\n name: environment.providerName,\n });\n }\n return installed.size === 1 ? ([...installed.values()][0] ?? null) : null;\n };\n for (const [target, described] of Object.entries(sandbox?.targets ?? {})) {\n if (described.environment != null) {\n const environment = described.environment;\n const provider = providerFor({\n ref: environment.providerRef,\n name: environment.providerName,\n target,\n });\n if (provider == null) continue;\n const open: JsonValue | undefined = environment.openOptions ?? undefined;\n if (\n open != null &&\n (!isObject(open) || Object.keys(open).some((key) => key !== 'access' && key !== 'attach'))\n ) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Sandbox,\n `sandbox target ${target} open options support only access and attach`,\n sandboxPath,\n );\n continue;\n }\n const access = isObject(open) ? open['access'] : undefined;\n const attach = isObject(open) ? open['attach'] : undefined;\n if (\n access != null &&\n access !== SandboxAccess.Read &&\n access !== SandboxAccess.Execute &&\n access !== SandboxAccess.Write\n ) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Sandbox,\n `sandbox target ${target} has invalid access ${String(access)}`,\n sandboxPath,\n );\n continue;\n }\n if (attach != null && attach !== SandboxAttach.OnPrompt && attach !== SandboxAttach.Lazy) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Sandbox,\n `sandbox target ${target} has invalid attach ${String(attach)}`,\n sandboxPath,\n );\n continue;\n }\n sandboxes[target] = {\n provider,\n environment: environment.options,\n access:\n access === SandboxAccess.Read || access === SandboxAccess.Execute\n ? access\n : SandboxAccess.Write,\n attach: attach === SandboxAttach.OnPrompt ? SandboxAttach.OnPrompt : SandboxAttach.Lazy,\n };\n } else if (described.dynamic != null) {\n const hinted = described.dynamic.provider;\n const inferred = hinted == null ? inferredProvider(target) : null;\n if (inferred != null) {\n report(\n DiagnosticSeverity.Note,\n DiagnosticCode.Sandbox,\n `sandbox target ${target} is dynamic; its provider is ${inferred.name}, and its resolver must return a ${inferred.name} environment`,\n sandboxPath,\n );\n }\n const provider = providerFor({\n ref: hinted?.ref ?? inferred?.ref ?? null,\n name: hinted?.name ?? inferred?.name ?? null,\n target,\n });\n const slot = dynamicSlotFor(\n described.dynamic,\n described.exportName,\n sandboxPath,\n `sandbox target ${target}`,\n );\n if (provider == null || slot == null) continue;\n sandboxes[target] = {\n provider,\n environment: slot,\n access: SandboxAccess.Write,\n attach: SandboxAttach.Lazy,\n };\n }\n }\n if (\n sandbox?.selector === true &&\n sandbox.defaultTarget != null &&\n sandboxes[sandbox.defaultTarget] != null\n ) {\n sandboxOpeners[sandbox.defaultTarget] = 'sandbox';\n runtimeExport('sandbox', sandboxPath);\n report(\n DiagnosticSeverity.Note,\n DiagnosticCode.Sandbox,\n `sandbox.ts default export opens target ${sandbox.defaultTarget} for each session`,\n sandboxPath,\n );\n }\n\n // Base tools.\n const base: AgentManifestIface['tools']['base'] = {};\n if (agent?.tools != null) {\n for (const [name, target] of Object.entries(agent.tools)) {\n const capability = capabilityOf(name);\n if (capability == null) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.BaseTools,\n `baseTools has unknown capability ${name}`,\n agentPath,\n );\n continue;\n }\n if (sandboxes[target] == null) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.BaseTools,\n `baseTools ${name} is bound to ${target}, which is not a sandbox target`,\n agentPath,\n );\n continue;\n }\n base[capability] = { target };\n }\n }\n // Capabilities declared on the harness's own host (`harnessHost`).\n const host: BaseCapability[] = [];\n for (const name of agent?.hostTools ?? []) {\n const capability = capabilityOf(name);\n if (capability == null) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.BaseTools,\n `baseTools has unknown capability ${name}`,\n agentPath,\n );\n continue;\n }\n if (base[capability] != null) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.BaseTools,\n `baseTools ${name} is bound both to a sandbox target and to harnessHost`,\n agentPath,\n );\n continue;\n }\n host.push(capability);\n }\n\n // Channels.\n const channels: ChannelBindingIface[] = [];\n const channelKeys = new Set<string>();\n const channelRoutes: AssembleOutputIface['channelRoutes'] = {};\n const addChannel = (binding: ChannelBindingIface, path: string): void => {\n if (channelKeys.has(binding.key)) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Channel,\n `channel ${binding.key} is bound more than once`,\n path,\n );\n return;\n }\n channelKeys.add(binding.key);\n channels.push(binding);\n };\n for (const module of withDefault(SlotKind.Channel)) {\n if (module.value?.type !== 'channel') continue;\n const { value } = module;\n if (value.disabled) continue;\n if (\n value.turnPolicy != null &&\n value.turnPolicy !== TurnPolicy.Steer &&\n value.turnPolicy !== TurnPolicy.Queue\n ) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Channel,\n `channel ${module.key} turnPolicy must be steer or queue`,\n module.path,\n );\n }\n for (const route of value.routes) {\n if (!route.path.startsWith('/')) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Channel,\n `channel ${module.key} route ${route.path} must start with /`,\n module.path,\n );\n }\n }\n const parsedConfig = jsonObjectSchema.safeParse(value.config);\n const installed = value.installed == null ? null : providerRefSchema.safeParse(value.installed);\n if (installed != null && !installed.success) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Channel,\n `channel ${module.key} has an invalid installed reference`,\n module.path,\n );\n continue;\n }\n addChannel(\n {\n key: module.key,\n channel: installed == null ? bundleRef(module.base) : installed.data,\n config: parsedConfig.success ? parsedConfig.data : {},\n source: 'authored',\n },\n module.path,\n );\n if (value.installed != null) continue;\n runtimeExport(module.base, module.path);\n channelRoutes[module.base] = value.routes.map((route) => ({\n method: route.method,\n path: route.path,\n }));\n }\n for (const [index, binding] of (agent?.channels ?? []).entries()) {\n const ref = providerRefSchema.safeParse(binding.channel);\n if (!ref.success) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Channel,\n `agent.ts channels[${index}] has an invalid channel reference`,\n agentPath,\n );\n continue;\n }\n const config = jsonObjectSchema.safeParse(binding.config);\n const key =\n binding.key ??\n (ref.data.kind === 'package'\n ? (ref.data.specifier.split('/').at(-1) ?? ref.data.specifier)\n : ref.data.export);\n addChannel({ key, channel: ref.data, config: config.success ? config.data : {} }, agentPath);\n }\n\n // Hooks.\n const hooks: HookBindingIface[] = [];\n for (const module of withDefault(SlotKind.Hook)) {\n if (module.value?.type !== 'hook') continue;\n const events: string[] = [];\n for (const key of module.value.keys) {\n const normalized = normalizeHookKey(key);\n switch (normalized.kind) {\n case HookEventKeyKind.Unknown:\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Hook,\n `hook ${module.key} subscribes to unknown event ${key}`,\n module.path,\n );\n break;\n case HookEventKeyKind.Canonical:\n case HookEventKeyKind.Wildcard:\n events.push(...normalized.events);\n break;\n }\n }\n const unique = [...new Set(events)];\n if (unique.length === 0) {\n report(\n DiagnosticSeverity.Warning,\n DiagnosticCode.Hook,\n `hook ${module.key} subscribes to no events and was left out`,\n module.path,\n );\n continue;\n }\n hooks.push({ slug: module.key, export: module.base, events: unique });\n runtimeExport(module.base, module.path);\n }\n\n // Schedules.\n const schedules: ScheduleDefinitionIface[] = [];\n const addSchedule = (args: {\n key: string;\n path: string;\n cron: string | null;\n timezone: string | null;\n target: string | null;\n prompt: string | null;\n }): void => {\n const { key, path } = args;\n if (args.cron == null) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Schedule,\n `schedule ${key} needs a cron expression`,\n path,\n );\n return;\n }\n const timezone = args.timezone ?? 'UTC';\n try {\n new Cron(args.cron, { timezone, paused: true }).nextRun();\n } catch (cause) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Schedule,\n `schedule ${key}: ${cause instanceof Error ? cause.message : String(cause)}`,\n path,\n );\n return;\n }\n const target = Object.values(ScheduleTarget).find(\n (candidate) => candidate === (args.target ?? ScheduleTarget.OwnerDirect),\n );\n if (target == null) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Schedule,\n `schedule ${key} target must be owner-direct or bound-conversation`,\n path,\n );\n return;\n }\n const prompt = args.prompt?.trim() ?? '';\n if (prompt.length === 0) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Schedule,\n `schedule ${key} needs a prompt`,\n path,\n );\n return;\n }\n schedules.push({ key, cron: args.cron, timezone, prompt, target });\n };\n for (const item of input.discovery.scheduleMarkdown) {\n const front = parseFrontMatter(input.files[item.path] ?? '');\n if (front.error != null)\n report(DiagnosticSeverity.Error, DiagnosticCode.Schedule, front.error, item.path);\n const field = (name: string): string | null => frontMatterString(front.data, name);\n addSchedule({\n key: item.key,\n path: item.path,\n cron: field('cron'),\n timezone: field('timezone'),\n target: field('target'),\n prompt: front.body,\n });\n }\n for (const module of withDefault(SlotKind.Schedule)) {\n if (module.value?.type !== 'schedule') continue;\n addSchedule({\n key: module.key,\n path: module.path,\n cron: module.value.cron,\n timezone: module.value.timezone,\n target: module.value.target,\n prompt: module.value.markdown,\n });\n }\n const scheduleKeys = new Set<string>();\n for (const schedule of schedules) {\n if (scheduleKeys.has(schedule.key)) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Schedule,\n `schedule ${schedule.key} is defined more than once`,\n );\n }\n scheduleKeys.add(schedule.key);\n }\n\n for (const rejected of input.discovery.rejected) {\n report(DiagnosticSeverity.Error, DiagnosticCode.RejectedSlot, rejected.message, rejected.path);\n }\n for (const unsupported of input.discovery.unsupported) {\n report(\n DiagnosticSeverity.Warning,\n DiagnosticCode.RejectedSlot,\n unsupported.message,\n unsupported.path,\n );\n }\n\n // Literal `secrets.get('<name>')` reads join the allowlist; a computed name\n // must be declared in agent.ts, or the read fails at run time.\n const references = secretReferences(input.files);\n const secrets = collectSecrets({\n declared: agent?.secrets ?? [],\n config,\n mcpServers: connections,\n reads: references.flatMap((reference) => (reference.name == null ? [] : [reference.name])),\n });\n const computedReads = new Set(\n references.flatMap((reference) => (reference.name == null ? [reference.path] : [])),\n );\n for (const path of computedReads) {\n report(\n DiagnosticSeverity.Note,\n DiagnosticCode.Secrets,\n `${path} reads a secret by a computed name; list it in defineAgent({ secrets: [...] }) or the read fails at run time`,\n path,\n );\n }\n\n if (harnessRef == null) {\n return { manifest: null, modules, sandboxOpeners, channelRoutes, directoryFields, diagnostics };\n }\n const draft: AgentManifestIface = {\n version: MANIFEST_VERSION,\n identity: {\n name: agent?.name ?? input.fallbackName,\n description: agent?.description ?? null,\n ...(agent?.avatar == null ? {} : { avatar: agent.avatar }),\n },\n harness: { harness: harnessRef, config },\n mcpServers,\n sandboxes,\n tools: host.length === 0 ? { base } : { base, host },\n toolPolicy,\n secrets,\n channels,\n channelSources: Object.fromEntries(\n withDefault(SlotKind.Channel).flatMap((module) =>\n module.value?.type === 'channel'\n ? [\n [\n module.key,\n { path: module.path, source: 'authored', disabled: module.value.disabled },\n ],\n ]\n : [],\n ),\n ),\n hooks,\n schedules,\n bundle: null,\n };\n const resolvers: NonNullable<AgentManifestIface['bundle']>['resolvers'] = {};\n for (const found of findDynamicSlots(draft)) {\n resolvers[found.path] = {\n export: found.slot.$dynamic.resolver,\n events: found.slot.$dynamic.events,\n };\n }\n const hasSandboxes = Object.keys(sandboxes).length > 0;\n if (Object.keys(modules).length > 0 || hasSandboxes) {\n if (input.bundle == null) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Bundle,\n 'the definition needs a bundle but none was produced',\n );\n } else\n draft.bundle = {\n hash: input.bundle.hash,\n resolvers,\n hasPreparationFiles: Object.keys(preparationFiles(input.files)).length > 0,\n };\n }\n const validated = agentManifestSchema.safeParse(draft);\n if (!validated.success) {\n for (const issue of validated.error.issues) {\n report(\n DiagnosticSeverity.Error,\n DiagnosticCode.Manifest,\n `manifest ${issue.path.join('.')}: ${issue.message}`,\n );\n }\n }\n const failed = diagnostics.some((item) => item.severity === DiagnosticSeverity.Error);\n return {\n manifest: failed || !validated.success ? null : validated.data,\n modules,\n sandboxOpeners,\n channelRoutes,\n directoryFields,\n diagnostics,\n };\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["described", "config"]
|
|
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
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
+
agentAvatarSchema,
|
|
2
3
|
jsonValueSchema,
|
|
3
4
|
hostedBindingRequirementSchema
|
|
4
5
|
} from "@finalai/agent-provider";
|
|
@@ -101,7 +102,7 @@ const isDefinedHarnessLike = (value) => isCallable(value) && isCallable(fieldOf(
|
|
|
101
102
|
const KNOWN_AGENT_FIELDS = /* @__PURE__ */ new Set([
|
|
102
103
|
"name",
|
|
103
104
|
"description",
|
|
104
|
-
"
|
|
105
|
+
"avatar",
|
|
105
106
|
"harness",
|
|
106
107
|
"tools",
|
|
107
108
|
"toolPolicy",
|
|
@@ -128,7 +129,7 @@ const unknownAgentField = (key) => {
|
|
|
128
129
|
if (key === "defaultTools")
|
|
129
130
|
return "agent.ts field defaultTools is not supported: base tools are declared with tools: baseTools({ ... }) and are off by default";
|
|
130
131
|
if (key === "subagents" || key === "memory") return `agent.ts field ${key} is not supported yet`;
|
|
131
|
-
return `agent.ts field ${key} is not an agent field (name, description,
|
|
132
|
+
return `agent.ts field ${key} is not an agent field (name, description, avatar, harness, tools, toolPolicy, secrets, channels)`;
|
|
132
133
|
};
|
|
133
134
|
const describeHarness = (harness, ctx, issues) => {
|
|
134
135
|
if (harness == null) return null;
|
|
@@ -198,6 +199,19 @@ const describeSecrets = (value, issues) => {
|
|
|
198
199
|
issues.push(error("agent.ts secrets must be a list of secret names"));
|
|
199
200
|
return null;
|
|
200
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
|
+
};
|
|
201
215
|
const describeAgent = (value, ctx, issues) => {
|
|
202
216
|
if (value == null) return null;
|
|
203
217
|
if (!isPlainObject(value)) {
|
|
@@ -236,7 +250,7 @@ const describeAgent = (value, ctx, issues) => {
|
|
|
236
250
|
type: "agent",
|
|
237
251
|
name: stringOrNull(value["name"]),
|
|
238
252
|
description: stringOrNull(value["description"]),
|
|
239
|
-
|
|
253
|
+
avatar: describeAvatar(value["avatar"], issues),
|
|
240
254
|
harness: describeHarness(value["harness"], ctx, issues),
|
|
241
255
|
tools: baseToolsDescription?.targets ?? null,
|
|
242
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 {\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 '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": "AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP,YAAY,OAAO;AACnB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAUP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP;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,OAEK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AAWA,MAAM,kBAAkB,CAAC,UAAgD;AAC9E,QAAM,WAAW,QAAQ,OAAO,UAAU;AAC1C,MAAI,OAA0C;AAC9C,MAAI,YAAY,MAAM;AACpB,UAAM,OAAO,QAAQ,UAAU,MAAM;AACrC,UAAM,MAAM,QAAQ,UAAU,aAAa;AAC3C,UAAM,SAAuB,CAAC;AAC9B,SAAK,SAAS,aAAa,SAAS,aAAa,YAAY,MAAM;AACjE,aAAO,EAAE,KAAK,OAAO,UAAU,EAAE,MAAM,YAAY,OAAO,CAAC,GAAG,MAAM,KAAK;AAAA,IAC3E,WAAW,OAAO,MAAM;AACtB,aAAO,EAAE,KAAK,OAAO,KAAK,EAAE,MAAM,YAAY,OAAO,CAAC,GAAG,MAAM,KAAK;AAAA,IACtE,OAAO;AACL,aAAO;AAAA,QACL,KAAK;AAAA,QACL,MACE,aAAa,QAAQ,UAAU,MAAM,CAAC,KACtC,aAAa,QAAQ,QAAQ,UAAU,YAAY,GAAG,MAAM,CAAC;AAAA,MACjE;AAAA,IACF;AAAA,EACF;AACA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ,gBAAgB,KAAK;AAAA,IAC7B,aAAa,aAAa,QAAQ,OAAO,aAAa,CAAC;AAAA,IACvD,SAAS,aAAa,QAAQ,OAAO,SAAS,CAAC;AAAA,IAC/C,UAAU;AAAA,IACV,kBAAkB,EACf,MAAM,8BAA8B,EACpC,MAAM,QAAQ,OAAO,kBAAkB,KAAK,CAAC,CAAC;AAAA,EACnD;AACF;AAIO,MAAM,uBAAuB,CAClC,UAC6C;AAC7C,QAAM,QAAkD,CAAC;AACzD,QAAM,OAAO,CAAC,OAAsB,MAAc,UAAwB;AACxE,QAAI,QAAQ,GAAI;AAChB,QAAI,kBAAkB,KAAK,GAAG;AAC5B,YAAM,KAAK,EAAE,MAAM,MAAM,CAAC;AAC1B;AAAA,IACF;AACA,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,YAAM,QAAQ,CAAC,MAAM,UAAU,KAAK,MAAM,UAAU,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC;AAC5E;AAAA,IACF;AACA,QAAI,cAAc,KAAK,KAAK,eAAe,KAAK,KAAK,MAAM;AACzD,iBAAW,CAAC,KAAK,IAAI,KAAK,UAAU,KAAK,EAAG,MAAK,MAAM,UAAU,MAAM,GAAG,GAAG,QAAQ,CAAC;AAAA,IACxF;AAAA,EACF;AACA,OAAK,QAAQ,QAAQ,OAAO,SAAS,GAAG,QAAQ,GAAG,kBAAkB,CAAC;AACtE,SAAO;AACT;AAEA,MAAM,cAAc,CAAC,OAAsB,SAA4B;AACrE,QAAM,YAAY,gBAAgB,KAAK;AACvC,QAAM,OAAmB,EAAE,UAAU,GAAG,oBAAoB,GAAG,IAAI,IAAI,QAAQ,UAAU,OAAO;AAChG,MAAI,UAAU,eAAe,KAAM,MAAK,aAAa,IAAI,UAAU;AACnE,MAAI,UAAU,WAAW,KAAM,MAAK,SAAS,IAAI,UAAU;AAC3D,OAAK,UAAU,kBAAkB,UAAU,KAAK;AAC9C,SAAK,kBAAkB,IAAI,gBAAgB,MAAM,UAAU,gBAAgB;AAC7E,SAAO,EAAE,UAAU,KAAK;AAC1B;AAEA,MAAM,uBAAuB,CAAC,UAC5B,WAAW,KAAK,KAAK,WAAW,QAAQ,OAAO,UAAU,CAAC,KAAK,WAAW,QAAQ,OAAO,MAAM,CAAC;AAElG,MAAM,qBAA0C,oBAAI,IAAI;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGD,MAAM,wBAA6C,oBAAI,IAAI;AAAA,EACzD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,MAAM,oBAAoB,CAAC,QAAwB;AACjD,MAAI,sBAAsB,IAAI,GAAG;AAC/B,WAAO,kBAAkB,GAAG,uDAAuD,GAAG;AACxF,MAAI,QAAQ;AACV,WAAO;AACT,MAAI,QAAQ,eAAe,QAAQ,SAAU,QAAO,kBAAkB,GAAG;AACzE,SAAO,kBAAkB,GAAG;AAC9B;AAOA,MAAM,kBAAkB,CACtB,SACA,KACA,WACmC;AACnC,MAAI,WAAW,KAAM,QAAO;AAC5B,QAAM,MAAM,QAAQ,SAAS,SAAS;AACtC,MAAI,CAAC,aAAa,GAAG,GAAG;AACtB,WAAO,KAAK,MAAM,wEAAwE,CAAC;AAC3F,WAAO;AAAA,EACT;AACA,MAAI,UAAU,OAAO,KAAK,EAAE,MAAM,mBAAmB,OAAO,CAAC;AAC7D,MAAI,QAAQ,KAAK,MAAM,MAAM,YAAY,QAAQ,KAAK,QAAQ,MAAM,aAAa;AAC/E,UAAM,aAAa,IAAI,QAAQ;AAAA,MAAQ,CAAC,UACtC,OAAO,QAAQ,MAAM,SAAS,EAC3B,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,qBAAqB,KAAK,CAAC,EACjD,IAAI,CAAC,CAAC,IAAI,MAAM,gBAAgB,MAAM,OAAO,MAAM,IAAI,CAAC;AAAA,IAC7D;AACA,QAAI,WAAW,WAAW,KAAK,WAAW,CAAC,KAAK;AAC9C,gBAAU,EAAE,MAAM,UAAU,QAAQ,WAAW,CAAC,EAAE;AAAA;AAElD,aAAO;AAAA,QACL;AAAA,UACE;AAAA,QACF;AAAA,MACF;AAAA,EACJ;AACA,QAAM,SAAS,OAAO,QAAQ,SAAS,QAAQ,KAAK,CAAC,GAAG;AAAA,IACtD,MAAM;AAAA,IACN;AAAA,IACA,OAAO,CAAC,OAAO,SAAU,kBAAkB,KAAK,IAAI,YAAY,OAAO,IAAI,IAAI;AAAA,EACjF,CAAC;AACD,SAAO,EAAE,SAAS,SAAS,OAAO;AACpC;AAIA,MAAM,oBAAoB,CACxB,OACA,KACA,WAC+D;AAC/D,MAAI,SAAS,KAAM,QAAO;AAC1B,MAAI,eAAe,KAAK,MAAM,aAAa,WAAW;AACpD,WAAO,KAAK,MAAM,yEAAyE,CAAC;AAC5F,WAAO;AAAA,EACT;AACA,QAAM,OAAO,QAAQ,OAAO,MAAM;AAClC,QAAM,MAA8B,CAAC;AACrC,QAAM,OAAiB,CAAC;AACxB,MAAI,CAAC,cAAc,IAAI,EAAG,QAAO,EAAE,SAAS,KAAK,KAAK;AACtD,aAAW,CAAC,YAAY,MAAM,KAAK,OAAO,QAAQ,IAAI,GAAG;AACvD,QAAI,UAAU,KAAM;AACpB,QAAI,eAAe,MAAM,MAAM,aAAa,aAAa;AACvD,WAAK,KAAK,UAAU;AACpB;AAAA,IACF;AACA,QAAI,SAAS,MAAM,GAAG;AACpB,UAAI,UAAU,IAAI;AAClB;AAAA,IACF;AACA,UAAM,OAAO,IAAI,gBAAgB,IAAI,MAAM;AAC3C,QAAI,QAAQ,MAAM;AAChB,aAAO;AAAA,QACL;AAAA,UACE,aAAa,UAAU;AAAA,QACzB;AAAA,MACF;AACA;AAAA,IACF;AACA,QAAI,UAAU,IAAI;AAAA,EACpB;AACA,SAAO,EAAE,SAAS,KAAK,KAAK;AAC9B;AAEA,MAAM,kBAAkB,CAAC,OAAsB,WAA0C;AACvF,MAAI,SAAS,KAAM,QAAO;AAC1B,QAAM,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,UAAU,KAAK;AACzD,MAAI,OAAO,QAAS,QAAO,OAAO;AAClC,SAAO,KAAK,MAAM,iDAAiD,CAAC;AACpE,SAAO;AACT;AAEA,MAAM,iBAAiB,CACrB,OACA,WACkC;AAClC,MAAI,UAAU,OAAW,QAAO;AAChC,QAAM,SAAS,kBAAkB,UAAU,OAAO,OAAO,EAAE,MAAM,UAAU,OAAO,CAAC,CAAC;AACpF,MAAI,OAAO,QAAS,QAAO,OAAO;AAClC,aAAW,SAAS,OAAO,MAAM,QAAQ;AACvC,WAAO;AAAA,MACL;AAAA,QACE,kBAAkB,MAAM,KAAK,SAAS,IAAI,IAAI,MAAM,KAAK,KAAK,GAAG,CAAC,KAAK,EAAE,KAAK,MAAM,OAAO;AAAA,MAC7F;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,MAAM,gBAAgB,CACpB,OACA,KACA,WAC+B;AAC/B,MAAI,SAAS,KAAM,QAAO;AAC1B,MAAI,CAAC,cAAc,KAAK,GAAG;AACzB,WAAO,KAAK,MAAM,iEAAiE,CAAC;AACpF,WAAO;AAAA,EACT;AACA,aAAW,OAAO,OAAO,KAAK,KAAK,GAAG;AACpC,QAAI,CAAC,mBAAmB,IAAI,GAAG,EAAG,QAAO,KAAK,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAAA,EAC7E;AACA,QAAM,gBAAgB,MAAM,YAAY;AACxC,MAAI,aAA4C;AAChD,MAAI,cAAc,aAAa,GAAG;AAChC,iBAAa,CAAC;AACd,eAAW,CAAC,KAAK,MAAM,KAAK,OAAO,QAAQ,aAAa,GAAG;AACzD,UAAI,WAAW,WAAW,WAAW,MAAO,YAAW,GAAG,IAAI;AAAA,UACzD,QAAO,KAAK,MAAM,uBAAuB,GAAG,2BAA2B,CAAC;AAAA,IAC/E;AAAA,EACF;AACA,QAAM,cAAc,MAAM,UAAU;AACpC,MAAI,WAA4C;AAChD,MAAI,MAAM,QAAQ,WAAW,GAAG;AAC9B,eAAW,YAAY,IAAI,CAAC,SAAS,WAAW;AAAA,MAC9C,KAAK,aAAa,QAAQ,SAAS,KAAK,CAAC;AAAA,MACzC,SAAS,OAAO,QAAQ,SAAS,SAAS,KAAK,MAAM;AAAA,QACnD,MAAM,YAAY,KAAK;AAAA,QACvB;AAAA,MACF,CAAC;AAAA,MACD,QAAQ,OAAO,QAAQ,SAAS,QAAQ,KAAK,CAAC,GAAG;AAAA,QAC/C,MAAM,YAAY,KAAK;AAAA,QACvB;AAAA,MACF,CAAC;AAAA,IACH,EAAE;AAAA,EACJ;AACA,QAAM,uBAAuB,kBAAkB,MAAM,OAAO,GAAG,KAAK,MAAM;AAC1E,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,aAAa,MAAM,MAAM,CAAC;AAAA,IAChC,aAAa,aAAa,MAAM,aAAa,CAAC;AAAA,IAC9C,QAAQ,eAAe,MAAM,QAAQ,GAAG,MAAM;AAAA,IAC9C,SAAS,gBAAgB,MAAM,SAAS,GAAG,KAAK,MAAM;AAAA,IACtD,OAAO,sBAAsB,WAAW;AAAA,IACxC,WAAW,sBAAsB,QAAQ;AAAA,IACzC;AAAA,IACA,SAAS,gBAAgB,MAAM,SAAS,GAAG,MAAM;AAAA,IACjD;AAAA,EACF;AACF;AAEA,MAAM,gBAAgB,CAAC,UAAyB,WAA+C;AAC7F,MAAI,CAAC,WAAW,QAAQ,EAAG,QAAO;AAClC,MAAI;AACF,UAAM,SAAS,SAAS;AAAA,MACtB,SAAS;AAAA,MACT,SAAS,EAAE,KAAK,YAAY,KAAK;AAAA,MACjC,MAAM,YAAY;AAChB,cAAM,IAAI,MAAM,uCAAuC;AAAA,MACzD;AAAA,IACF,CAAC;AACD,QAAI,kBAAkB,MAAM,KAAK,kBAAkB,MAAM,EAAG,QAAO;AAEnE,QAAI,cAAc,MAAM,EAAG,SAAQ,QAAQ,MAAM,EAAE,MAAM,MAAM,MAAS;AACxE,WAAO;AAAA,EACT,SAAS,OAAO;AACd,WAAO;AAAA,MACL;AAAA,QACE,kDAAkD,OAAO,KAAK,CAAC;AAAA,MACjE;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;AAEA,MAAM,kBAAkB,CACtB,WACA,WAC0B;AAC1B,QAAM,UAAuD,CAAC;AAC9D,QAAM,YAAoC,CAAC;AAC3C,QAAM,iBAAiB,CACrB,OACA,YACA,SACuC;AACvC,QAAI,kBAAkB,KAAK;AACzB,aAAO,EAAE,YAAY,aAAa,MAAM,SAAS,gBAAgB,KAAK,EAAE;AAC1E,QAAI,kBAAkB,KAAK,KAAK,kBAAkB,KAAK,GAAG;AACxD,aAAO,EAAE,YAAY,aAAa,iBAAiB,OAAO,MAAM,MAAM,GAAG,SAAS,KAAK;AAAA,IACzF;AACA,WAAO;AAAA,EACT;AACA,aAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,SAAS,GAAG;AACrD,QAAI,SAAS,UAAW;AACxB,UAAM,aAAa,gBAAgB,WAAW,IAAI;AAClD,UAAM,eAAe,sBAAsB,KAAK;AAChD,QAAI,gBAAgB,MAAM;AACxB,gBAAU,UAAU,IAAI;AACxB;AAAA,IACF;AACA,UAAM,SAAS,eAAe,OAAO,YAAY,cAAc,IAAI,EAAE;AACrE,QAAI,UAAU,KAAM,SAAQ,IAAI,IAAI;AAAA,EACtC;AACA,QAAM,QAAQ,OAAO,KAAK,OAAO;AACjC,QAAM,WAAW,eAAe,UAAU,SAAS,GAAG,WAAW,2BAA2B;AAC5F,QAAM,WAAW,eAAe,UAAU,SAAS,CAAC,MAAM,aAAa;AACvE,MAAI,YAAY,KAAM,SAAQ,SAAS,IAAI;AAAA,WAClC,UAAU,SAAS,KAAK,QAAQ,CAAC,UAAU;AAClD,WAAO;AAAA,MACL;AAAA,QACE;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAKA,MAAI,YAAY,MAAM,WAAW,KAAK,YAAY,MAAM;AACtD,UAAM,SAAS,cAAc,UAAU,SAAS,GAAG,MAAM;AACzD,QAAI,UAAU,MAAM;AAClB,cAAQ,SAAS,IAAI;AAAA,QACnB,YAAY;AAAA,QACZ,aAAa,iBAAiB,QAAQ,6BAA6B,MAAM;AAAA,QACzE,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACA,MAAI,gBAA+B;AACnC,MAAI,QAAQ,SAAS,KAAK,KAAM,iBAAgB;AAAA,WACvC,MAAM,WAAW,EAAG,iBAAgB,MAAM,CAAC,KAAK;AACzD,MAAI,YAAY,iBAAiB,MAAM;AACrC,WAAO;AAAA,MACL;AAAA,QACE,MAAM,WAAW,IACb,0JACA;AAAA,MACN;AAAA,IACF;AAAA,EACF;AACA,SAAO,EAAE,MAAM,WAAW,SAAS,WAAW,UAAU,cAAc;AACxE;AAEA,MAAM,oBAAoB,CACxB,WACA,YAC+B;AAC/B,QAAM,WAAW,oBAAI,IAA2B;AAChD,MAAI,aAAa,QAAQ,WAAW,KAAM,QAAO;AACjD,aAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,SAAS,GAAG;AACrD,QAAI,SAAS,WAAW;AACtB,UAAI,QAAQ,iBAAiB,KAAM,UAAS,IAAI,OAAO,QAAQ,aAAa;AAAA,IAC9E,WAAW,QAAQ,QAAQ,IAAI,KAAK,KAAM,UAAS,IAAI,OAAO,IAAI;AAAA,EACpE;AACA,SAAO;AACT;AAEA,MAAM,sBAAsB,CAC1B,OACA,KACA,SACA,WAC0B;AAC1B,QAAM,EAAE,QAAQ,UAAU,IAAI;AAC9B,QAAM,QAAQ,UAAU,SAAS;AACjC,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK,SAAS;AACZ,aAAO,cAAc,OAAO,KAAK,MAAM;AAAA,IACzC,KAAK,SAAS;AACZ,aAAO;AAAA,IACT,KAAK,SAAS,cAAc;AAC1B,UAAI,kBAAkB,KAAK,EAAG,QAAO,gBAAgB,KAAK;AAC1D,YAAM,WAAW,kBAAkB,OAAO,IAAI;AAC9C,UAAI,YAAY,MAAM;AACpB,eAAO;AAAA,UACL;AAAA,YACE,GAAG,OAAO,IAAI;AAAA,UAChB;AAAA,QACF;AACA,eAAO;AAAA,MACT;AACA,aAAO,EAAE,MAAM,gBAAgB,MAAM,SAAS,MAAM,SAAS,SAAS,QAAQ;AAAA,IAChF;AAAA,IACA,KAAK,SAAS,OAAO;AACnB,UAAI,kBAAkB,KAAK,EAAG,QAAO,gBAAgB,KAAK;AAC1D,YAAM,UAAU,WAAW,EAAE,KAAK,OAAO,KAAK,MAAM,CAAC;AACrD,aAAO,KAAK,GAAG,QAAQ,MAAM;AAC7B,aAAO,EAAE,MAAM,SAAS,OAAO,OAAO,QAAQ,OAAO,EAAE,MAAM,OAAO,MAAM,OAAO,CAAC,EAAE;AAAA,IACtF;AAAA,IACA,KAAK,SAAS,MAAM;AAClB,UAAI,kBAAkB,KAAK,EAAG,QAAO,gBAAgB,KAAK;AAC1D,YAAM,UAAU,UAAU,EAAE,MAAM,OAAO,KAAK,YAAY,OAAO,MAAM,MAAM,CAAC;AAC9E,aAAO,KAAK,GAAG,QAAQ,MAAM;AAC7B,aAAO;AAAA,QACL,MAAM;AAAA,QACN,YAAY,OAAO,QAAQ,YAAY,EAAE,MAAM,OAAO,MAAM,OAAO,CAAC;AAAA,QACpE,UAAU,QAAQ;AAAA,MACpB;AAAA,IACF;AAAA,IACA,KAAK,SAAS,YAAY;AACxB,UAAI,kBAAkB,KAAK,EAAG,QAAO,gBAAgB,KAAK;AAC1D,YAAM,UAAU,gBAAgB,EAAE,KAAK,OAAO,KAAK,YAAY,OAAO,MAAM,MAAM,CAAC;AACnF,aAAO,KAAK,GAAG,QAAQ,MAAM;AAC7B,aAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS,OAAO,QAAQ,SAAS,EAAE,MAAM,OAAO,MAAM,OAAO,CAAC;AAAA,MAChE;AAAA,IACF;AAAA,IACA,KAAK,SAAS;AACZ,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,aAAa,QAAQ,OAAO,MAAM,CAAC;AAAA,QACzC,UAAU,aAAa,QAAQ,OAAO,UAAU,CAAC;AAAA,QACjD,UAAU,aAAa,QAAQ,OAAO,UAAU,CAAC;AAAA,QACjD,QAAQ,aAAa,QAAQ,OAAO,QAAQ,CAAC;AAAA,MAC/C;AAAA,IACF,KAAK,SAAS,MAAM;AAClB,YAAM,SAAS,QAAQ,OAAO,QAAQ;AACtC,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,UAAU,MAAM,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,GAAG;AAAA,MAC5C;AAAA,IACF;AAAA,IACA,KAAK,SAAS,SAAS;AACrB,YAAM,SAAS,QAAQ,OAAO,QAAQ;AACtC,aAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU,QAAQ,OAAO,UAAU,MAAM;AAAA,QACzC,WAAW,OAAO,QAAQ,OAAO,WAAW,KAAK,MAAM;AAAA,UACrD,MAAM,GAAG,OAAO,IAAI;AAAA,UACpB;AAAA,QACF,CAAC;AAAA,QACD,QAAQ,MAAM,QAAQ,MAAM,IACxB,OAAO,IAAI,CAAC,WAAW;AAAA,UACrB,QAAQ,OAAO,QAAQ,OAAO,QAAQ,CAAC;AAAA,UACvC,MAAM,OAAO,QAAQ,OAAO,MAAM,CAAC;AAAA,QACrC,EAAE,IACF,CAAC;AAAA,QACL,YAAY,aAAa,QAAQ,OAAO,YAAY,CAAC;AAAA,QACrD,QAAQ,OAAO,QAAQ,OAAO,QAAQ,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,IAAI,WAAW,OAAO,CAAC;AAAA,MAC1F;AAAA,IACF;AAAA,EACF;AACF;AAEO,MAAM,iBAAiB,CAC5B,SACA,gBACyB;AACzB,QAAM,eAAe,QAAQ,KAAK,CAAC,UAAU,MAAM,OAAO,SAAS,SAAS,OAAO,KAAK;AACxF,QAAM,gBAA8B,CAAC;AACrC,MAAI,UAAwC;AAC5C,MAAI,gBAAgB,MAAM;AACxB,QAAI;AACF,gBAAU,gBAAgB,aAAa,WAAW,aAAa;AAAA,IACjE,SAAS,OAAO;AACd,oBAAc,KAAK,MAAM,sCAAsC,UAAU,KAAK,CAAC,EAAE,CAAC;AAAA,IACpF;AAAA,EACF;AACA,QAAM,MAA4B;AAAA,IAChC;AAAA,IACA,iBAAiB,kBAAkB,cAAc,aAAa,MAAM,OAAO;AAAA,EAC7E;AACA,QAAM,UAAkC,QAAQ,IAAI,CAAC,UAAU;AAC7D,UAAM,SAAuB,MAAM,OAAO,SAAS,SAAS,UAAU,gBAAgB,CAAC;AACvF,UAAM,aAAa,aAAa,MAAM,aAAa,MAAM,UAAU,SAAS,MAAM;AAClF,QAAI,QAA+B;AACnC,QAAI,cAAc,MAAM,OAAO,SAAS,SAAS,SAAS;AACxD,UAAI;AACF,gBAAQ,oBAAoB,OAAO,KAAK,SAAS,MAAM;AAAA,MACzD,SAAS,OAAO;AACd,eAAO,KAAK,MAAM,GAAG,MAAM,OAAO,IAAI,4BAA4B,UAAU,KAAK,CAAC,EAAE,CAAC;AAAA,MACvF;AAAA,IACF,WAAW,MAAM,OAAO,SAAS,SAAS,OAAO;AAC/C,aAAO,KAAK,KAAK,GAAG,MAAM,OAAO,IAAI,oDAAoD,CAAC;AAAA,IAC5F;AACA,WAAO;AAAA,MACL,MAAM,MAAM,OAAO;AAAA,MACnB,MAAM,MAAM,OAAO;AAAA,MACnB,MAAM,MAAM,OAAO;AAAA,MACnB,KAAK,MAAM,OAAO;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AACD,SAAO,EAAE,SAAS,YAAY;AAChC;AAIO,MAAM,qBAAqB,CAChC,YAC6C;AAC7C,QAAM,MAAgD,CAAC;AACvD,aAAW,SAAS,SAAS;AAC3B,QAAI,MAAM,OAAO,SAAS,SAAS,MAAO;AAC1C,eAAW,SAAS,qBAAqB,MAAM,UAAU,SAAS,CAAC,GAAG;AACpE,UAAI,KAAK,EAAE,MAAM,GAAG,oBAAoB,GAAG,MAAM,IAAI,IAAI,OAAO,MAAM,MAAM,CAAC;AAAA,IAC/E;AAAA,EACF;AACA,aAAW,WAAW,eAAe;AACnC,QAAI,KAAK,EAAE,MAAM,kBAAkB,QAAQ,KAAK,GAAG,OAAO,QAAQ,MAAM,CAAC;AAC3E,SAAO;AACT;AAEO,MAAM,0BAA0B,CAAC,YACtC,QAAQ;AAAA,EACN,CAAC,WACE,MAAM,OAAO,SAAS,SAAS,QAAQ,MAAM,OAAO,SAAS,SAAS,eACvE,kBAAkB,MAAM,UAAU,SAAS,CAAC;AAChD;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -23,7 +23,7 @@ declare const describedAgentSchema: z.ZodObject<{
|
|
|
23
23
|
type: z.ZodLiteral<"agent">;
|
|
24
24
|
name: z.ZodNullable<z.ZodString>;
|
|
25
25
|
description: z.ZodNullable<z.ZodString>;
|
|
26
|
-
|
|
26
|
+
avatar: z.ZodDefault<z.ZodNullable<z.ZodType<import("@finalai/agent-protocol").AgentAvatarIface, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-protocol").AgentAvatarIface, unknown>>>>;
|
|
27
27
|
harness: z.ZodNullable<z.ZodObject<{
|
|
28
28
|
harness: z.ZodType<import("@finalai/agent-provider").JsonValue, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonValue, unknown>>;
|
|
29
29
|
config: z.ZodType<import("@finalai/agent-provider").JsonValue, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonValue, unknown>>;
|
|
@@ -100,7 +100,7 @@ export declare const describedValueSchema: z.ZodDiscriminatedUnion<[z.ZodObject<
|
|
|
100
100
|
type: z.ZodLiteral<"agent">;
|
|
101
101
|
name: z.ZodNullable<z.ZodString>;
|
|
102
102
|
description: z.ZodNullable<z.ZodString>;
|
|
103
|
-
|
|
103
|
+
avatar: z.ZodDefault<z.ZodNullable<z.ZodType<import("@finalai/agent-protocol").AgentAvatarIface, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-protocol").AgentAvatarIface, unknown>>>>;
|
|
104
104
|
harness: z.ZodNullable<z.ZodObject<{
|
|
105
105
|
harness: z.ZodType<import("@finalai/agent-provider").JsonValue, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonValue, unknown>>;
|
|
106
106
|
config: z.ZodType<import("@finalai/agent-provider").JsonValue, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonValue, unknown>>;
|
|
@@ -203,7 +203,7 @@ export declare const describedModuleSchema: z.ZodObject<{
|
|
|
203
203
|
type: z.ZodLiteral<"agent">;
|
|
204
204
|
name: z.ZodNullable<z.ZodString>;
|
|
205
205
|
description: z.ZodNullable<z.ZodString>;
|
|
206
|
-
|
|
206
|
+
avatar: z.ZodDefault<z.ZodNullable<z.ZodType<import("@finalai/agent-protocol").AgentAvatarIface, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-protocol").AgentAvatarIface, unknown>>>>;
|
|
207
207
|
harness: z.ZodNullable<z.ZodObject<{
|
|
208
208
|
harness: z.ZodType<import("@finalai/agent-provider").JsonValue, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonValue, unknown>>;
|
|
209
209
|
config: z.ZodType<import("@finalai/agent-provider").JsonValue, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonValue, unknown>>;
|
|
@@ -308,7 +308,7 @@ export declare const describedBundleSchema: z.ZodObject<{
|
|
|
308
308
|
type: z.ZodLiteral<"agent">;
|
|
309
309
|
name: z.ZodNullable<z.ZodString>;
|
|
310
310
|
description: z.ZodNullable<z.ZodString>;
|
|
311
|
-
|
|
311
|
+
avatar: z.ZodDefault<z.ZodNullable<z.ZodType<import("@finalai/agent-protocol").AgentAvatarIface, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-protocol").AgentAvatarIface, unknown>>>>;
|
|
312
312
|
harness: z.ZodNullable<z.ZodObject<{
|
|
313
313
|
harness: z.ZodType<import("@finalai/agent-provider").JsonValue, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonValue, unknown>>;
|
|
314
314
|
config: z.ZodType<import("@finalai/agent-provider").JsonValue, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonValue, unknown>>;
|