@finalai/agent-definition 0.1.2 → 0.1.3
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 +165 -0
- package/README.md +7 -0
- package/dist/compiler-assets/{chunk-TATN3PYK.ts → chunk-2ZRYQO4Q.ts} +4 -4
- package/dist/compiler-assets/{chunk-HGW4YHAY.ts → chunk-3K4C4SVG.ts} +9 -0
- package/dist/compiler-assets/{chunk-JPY4L2UJ.ts → chunk-3YAKMWV4.ts} +7 -7
- package/dist/compiler-assets/{chunk-CWWRTRWW.ts → chunk-4E5HECVD.ts} +1 -1
- package/dist/compiler-assets/{chunk-7QP2CKPI.ts → chunk-4X2DS5BR.ts} +1 -1
- package/dist/compiler-assets/{chunk-ZDLVA6XF.ts → chunk-5IZTHCGZ.ts} +8 -8
- package/dist/compiler-assets/{chunk-2CZRHOLL.ts → chunk-7XUPKRZU.ts} +1 -1
- package/dist/compiler-assets/{chunk-7VSSVZM4.ts → chunk-BEFBCBUL.ts} +4 -4
- package/dist/compiler-assets/{chunk-HFS4KLEL.ts → chunk-D3SB4CCB.ts} +1 -1
- package/dist/compiler-assets/{chunk-EVQIK62B.ts → chunk-FHKYXT3F.ts} +11 -7
- package/dist/compiler-assets/{chunk-HNPUTP35.ts → chunk-GCFSHHH2.ts} +2 -2
- package/dist/compiler-assets/{chunk-MZMSKIKU.ts → chunk-I6U47R5U.ts} +14 -5
- package/dist/compiler-assets/{chunk-5BK6FVRE.ts → chunk-IF6MR7JF.ts} +2 -2
- package/dist/compiler-assets/{chunk-LUSAAV4L.ts → chunk-IZGOMT7K.ts} +2 -2
- package/dist/compiler-assets/{chunk-GTUZOATD.ts → chunk-JGQ2KAN7.ts} +1 -1
- package/dist/compiler-assets/chunk-JXJPBM5W.ts +61 -0
- package/dist/compiler-assets/{chunk-NYTOYKKF.ts → chunk-K6D7ZK74.ts} +3 -3
- package/dist/compiler-assets/{chunk-WMXMVFHM.ts → chunk-K7V4IMOB.ts} +3 -3
- package/dist/compiler-assets/{chunk-VHXHUU7L.ts → chunk-LHMUAIYJ.ts} +1 -1
- package/dist/compiler-assets/{chunk-SKTNMUO7.ts → chunk-MSE7X5YG.ts} +25 -2
- package/dist/compiler-assets/{chunk-OWC6SFFF.ts → chunk-OO67EO5E.ts} +10 -9
- package/dist/compiler-assets/chunk-PFLSBTJA.ts +39 -0
- package/dist/compiler-assets/{chunk-XHKPWT3G.ts → chunk-QJ26GEUM.ts} +1 -1
- package/dist/compiler-assets/chunk-RMIQJHSL.ts +0 -0
- package/dist/compiler-assets/{chunk-BLB6JGLO.ts → chunk-TCKYMNPM.ts} +27 -24
- package/dist/compiler-assets/{chunk-QMWTDPNT.ts → chunk-TJZS457N.ts} +3 -3
- package/dist/compiler-assets/{chunk-JIPNTA56.ts → chunk-TM36NO3C.ts} +1 -1
- package/dist/compiler-assets/{chunk-QMKWAFVZ.ts → chunk-TS7XNNHN.ts} +3 -3
- package/dist/compiler-assets/chunk-ULI5WWRR.ts +40 -0
- package/dist/compiler-assets/chunk-W6DOJA4W.ts +3763 -0
- package/dist/compiler-assets/src/authoring/agent.ts +4 -4
- package/dist/compiler-assets/src/authoring/approval.ts +7 -7
- package/dist/compiler-assets/src/authoring/brand.ts +3 -3
- package/dist/compiler-assets/src/authoring/channels.ts +6 -6
- package/dist/compiler-assets/src/authoring/connections.ts +14 -4
- package/dist/compiler-assets/src/authoring/credentials.ts +7 -6
- package/dist/compiler-assets/src/authoring/dynamic.ts +9 -4
- package/dist/compiler-assets/src/authoring/harness.ts +9 -9
- package/dist/compiler-assets/src/authoring/hooks.ts +10 -8
- package/dist/compiler-assets/src/authoring/index.ts +33 -26
- package/dist/compiler-assets/src/authoring/instructions.ts +10 -5
- package/dist/compiler-assets/src/authoring/sandbox.ts +10 -10
- package/dist/compiler-assets/src/authoring/schedules.ts +4 -4
- package/dist/compiler-assets/src/authoring/skills.ts +4 -4
- package/dist/compiler-assets/src/authoring/tools.ts +10 -8
- package/dist/compiler-assets/src/compatibility.ts +11 -11
- package/dist/compiler-assets/src/hosted-bindings.ts +15 -0
- package/dist/compiler-assets/src/index.ts +50 -41
- package/dist/compiler-assets/src/manifest.ts +4 -4
- package/dist/compiler-assets/src/resolve.ts +5 -5
- package/dist/compiler-assets/src/runtime/bundle.ts +22 -20
- package/dist/compiler-assets/src/runtime/describe.ts +14 -12
- package/dist/compiler-assets/src/runtime/described.ts +16 -11
- package/dist/compiler-assets/src/runtime/isolate.ts +18 -16
- package/dist/compiler-assets/src/runtime/lower.ts +13 -11
- package/dist/compiler-assets/src/runtime/schema-validation.ts +4 -4
- package/dist/compiler-assets/src/runtime/values.ts +2 -2
- package/dist/modules/authoring/connections.d.mts +5 -0
- package/dist/modules/authoring/connections.mjs +36 -0
- package/dist/modules/authoring/connections.mjs.map +2 -2
- package/dist/modules/authoring/context.d.mts +3 -1
- package/dist/modules/authoring/context.mjs.map +2 -2
- package/dist/modules/authoring/dynamic.d.mts +3 -1
- package/dist/modules/authoring/dynamic.mjs +19 -1
- package/dist/modules/authoring/dynamic.mjs.map +2 -2
- package/dist/modules/authoring/hooks.d.mts +2 -1
- package/dist/modules/authoring/hooks.mjs.map +2 -2
- package/dist/modules/authoring/index.d.mts +4 -2
- package/dist/modules/authoring/index.mjs +4 -1
- package/dist/modules/authoring/index.mjs.map +2 -2
- package/dist/modules/authoring/sandbox.d.mts +2 -1
- package/dist/modules/authoring/sandbox.mjs.map +2 -2
- package/dist/modules/compiler/assemble.mjs +5 -0
- package/dist/modules/compiler/assemble.mjs.map +2 -2
- package/dist/modules/compiler/index.d.mts +2 -1
- package/dist/modules/compiler/index.mjs +18 -0
- package/dist/modules/compiler/index.mjs.map +2 -2
- package/dist/modules/compiler/local-isolate.d.mts +2 -1
- package/dist/modules/compiler/local-isolate.mjs +6 -1
- package/dist/modules/compiler/local-isolate.mjs.map +2 -2
- package/dist/modules/hosted-bindings.d.mts +10 -0
- package/dist/modules/hosted-bindings.mjs +36 -0
- package/dist/modules/hosted-bindings.mjs.map +7 -0
- package/dist/modules/index.d.mts +2 -0
- package/dist/modules/index.mjs +2 -0
- package/dist/modules/index.mjs.map +2 -2
- package/dist/modules/resolve.mjs +4 -0
- package/dist/modules/resolve.mjs.map +2 -2
- package/dist/modules/runtime/describe.mjs +8 -1
- package/dist/modules/runtime/describe.mjs.map +2 -2
- package/dist/modules/runtime/described.d.mts +36 -0
- package/dist/modules/runtime/described.mjs +2 -1
- package/dist/modules/runtime/described.mjs.map +2 -2
- package/dist/modules/runtime/isolate.d.mts +2 -0
- package/dist/modules/runtime/isolate.mjs +7 -4
- package/dist/modules/runtime/isolate.mjs.map +2 -2
- package/dist/modules/runtime/schema-validation.mjs +19 -2
- package/dist/modules/runtime/schema-validation.mjs.map +2 -2
- package/package.json +4 -3
- package/dist/compiler-assets/chunk-GNR7XBPN.ts +0 -3364
- package/dist/compiler-assets/chunk-JNJE72EH.ts +0 -10
- package/dist/compiler-assets/chunk-T6WG4L4M.ts +0 -19
- /package/dist/compiler-assets/{chunk-6WR3PGNF.ts → chunk-CIWWFQHL.ts} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/runtime/isolate.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n ConversationKind,\n DynamicEvent,\n InputApprovalKind,\n jsonObjectSchema,\n jsonValueSchema,\n McpServerBindingKind,\n mcpServerBindingSchema,\n ParticipantKind,\n providerRefSchema,\n ToolApproval,\n unopenedRequestOf,\n type ChannelReceiveResult,\n type ChannelSocketIface,\n type InputApprovalIface,\n type JsonObject,\n type JsonValue,\n type McpServerBinding,\n type ToolDescriptorIface,\n} from '@finalai/agent-provider';\nimport * as z from 'zod';\nimport { lowerApproval } from \"../authoring/approval.mjs\";\nimport { AuthoredKind, authoredKindOf, stamp } from \"../authoring/brand.mjs\";\nimport {\n TranscriptRole,\n type DynamicResolveContextIface,\n type ToolContextIface,\n} from \"../authoring/context.mjs\";\nimport type { DynamicBoundaryEventIface } from \"../authoring/dynamic.mjs\";\nimport {\n hookHandlersFor,\n type HookContextIface,\n type HookDispatchEventIface,\n} from \"../authoring/hooks.mjs\";\nimport { registerToolName, toolLabelSchema } from \"../authoring/tools.mjs\";\nimport { AUTHORED_SERVER_KEY } from \"./layout.mjs\";\nimport {\n isDynamicSentinel,\n isEnvironmentLike,\n isOpenRequestLike,\n lowerConnection,\n lowerEnvironment,\n lowerInstructions,\n lowerSkill,\n lowerTool,\n toJson,\n type IssueIface,\n} from \"./lower.mjs\";\nimport { validateSchemaValue } from \"./schema-validation.mjs\";\nimport {\n authoredRecordSchema,\n callableSchema,\n entriesOf,\n fieldOf,\n isAsyncIterable,\n isCallable,\n isObjectLike,\n isPlainObject,\n messageOf,\n optionalValueSchema,\n type AuthoredCallable,\n type AuthoredRecord,\n type AuthoredValue,\n} from \"./values.mjs\";\n\n// What an agent bundle exposes to the Worker isolate that runs it (B4/B7):\n// the authored module map plus helpers that run its exports. The bundle is\n// the only place authored code executes.\n\nexport interface RunToolArgsIface {\n export: string;\n input: AuthoredValue;\n dynamic?: JsonValue;\n ctx: ToolContextIface;\n // Each yield of an async-generator execute, for MCP progress notifications.\n onProgress?: (value: JsonValue, label?: string) => void;\n}\n\nexport interface RunToolResultIface {\n output: JsonValue;\n // toModelOutput's projection, when the tool has one.\n modelOutput: JsonValue | null;\n}\n\nexport interface ResolveDynamicArgsIface {\n export: string;\n event: DynamicEvent;\n payload: DynamicBoundaryEventIface;\n ctx: DynamicResolveContextIface;\n // Names a single returned skill (defaults to the export's last path segment).\n key?: string;\n}\n\nexport interface DispatchHookArgsIface {\n export: string;\n event: HookDispatchEventIface;\n ctx: HookContextIface;\n}\n\nexport interface HookFailureIface {\n message: string;\n}\n\nexport interface ChannelRouteArgsIface {\n export: string;\n request: Request;\n configuration?: JsonObject;\n // The route path relative to the channel's mount point ('/webhook').\n path: string;\n secrets: { get(name: string): Promise<string | null> };\n receive: (input: JsonValue) => Promise<ChannelReceiveResult>;\n}\n\nexport interface ChannelSocketArgsIface extends ChannelRouteArgsIface {\n socket: ChannelSocketIface;\n}\n\nexport interface IsolateRuntimeIface {\n evaluateApproval(args: {\n reference: InputApprovalIface;\n input: AuthoredValue;\n secrets: { get(name: string): Promise<string | null> };\n }): Promise<ToolApproval>;\n runTool(args: RunToolArgsIface): Promise<RunToolResultIface>;\n resolveDynamic(args: ResolveDynamicArgsIface): Promise<JsonValue | null>;\n dispatchHook(\n args: DispatchHookArgsIface,\n ): Promise<{ handled: number; failures: HookFailureIface[] }>;\n // Null when no route of the channel matches the method and path.\n handleChannelRoute(args: ChannelRouteArgsIface): Promise<Response | null>;\n handleChannelSocket(args: ChannelSocketArgsIface): Promise<Response | void | null>;\n}\n\nconst jsonOf = (value: AuthoredValue, path: string): JsonValue => {\n const issues: IssueIface[] = [];\n const json = toJson(value, { path, issues });\n const failure = issues.find((issue) => issue.severity === 'error');\n if (failure != null) throw new Error(failure.message);\n return json;\n};\n\nconst lastSegment = (exportName: string): string => {\n const base = exportName.split('#')[0] ?? exportName;\n return base.split('/').at(-1) ?? base;\n};\n\n// Lowers a resolver's return value to manifest JSON by what it is.\nexport const lowerResolvedValue = (value: AuthoredValue, key: string): JsonValue | null => {\n if (value == null) return null;\n const kind = authoredKindOf(value);\n if (kind === AuthoredKind.Instructions)\n return jsonOf(lowerInstructions(value, null), 'instructions');\n if (kind === AuthoredKind.Skill) {\n const lowered = lowerSkill({ key, value });\n const failure = lowered.issues.find((issue) => issue.severity === 'error');\n if (failure != null) throw new Error(failure.message);\n return jsonOf(lowered.skill, 'skill');\n }\n if (isEnvironmentLike(value) || isOpenRequestLike(value)) {\n const issues: IssueIface[] = [];\n const environment = lowerEnvironment(value, 'environment', issues);\n return jsonOf(environment, 'environment');\n }\n if (isPlainObject(value)) {\n const entries = entriesOf(value);\n if (\n entries.length > 0 &&\n entries.every(([, item]) => authoredKindOf(item) === AuthoredKind.Skill)\n ) {\n return entries.map(([entryKey, item]) =>\n jsonOf(lowerSkill({ key: entryKey, value: item }).skill, 'skill'),\n );\n }\n }\n return jsonOf(value, 'resolved value');\n};\n\nexport interface CombinedEntryIface {\n kind: 'tool' | 'connection';\n key: string;\n exportName: string;\n value: AuthoredValue;\n}\n\nconst throwOnErrors = (issues: IssueIface[]): void => {\n const failure = issues.find((issue) => issue.severity === 'error');\n if (failure != null) throw new Error(failure.message);\n};\n\n// A resolver for the whole `mcpServers` field, used when any tool or\n// connection is dynamic: the manifest stores one slot and the session gets\n// the static and resolved entries together.\nexport const combineMcpServers = (entries: CombinedEntryIface[]): AuthoredValue => {\n const handler =\n (event: DynamicEvent) =>\n async (payload: DynamicBoundaryEventIface, ctx: DynamicResolveContextIface) => {\n const previous = z.array(mcpServerBindingSchema).safeParse(ctx.previousValue).data ?? [];\n const tools: ToolDescriptorIface[] = [];\n const approvals: Record<string, ToolApproval> = {};\n const connections: McpServerBinding[] = [];\n const addTool = (\n name: string,\n exportName: string,\n value: AuthoredValue,\n resolver?: string,\n ): void => {\n const lowered = lowerTool({ name, exportName, value });\n throwOnErrors(lowered.issues);\n registerToolName(value, name);\n if (resolver != null) {\n const snapshot = jsonObjectSchema.parse(\n jsonOf(\n {\n resolver,\n name,\n event,\n payload,\n session: ctx.session,\n messages: ctx.messages,\n channel: ctx.channel,\n },\n 'dynamic tool boundary',\n ),\n );\n lowered.descriptor.dynamic = snapshot;\n if (lowered.descriptor.inputApproval != null)\n lowered.descriptor.inputApproval = {\n ...lowered.descriptor.inputApproval,\n dynamic: snapshot,\n };\n }\n tools.push(lowered.descriptor);\n approvals[name] = lowered.approval;\n };\n const addConnection = (\n key: string,\n exportName: string,\n value: AuthoredValue,\n resolver?: string,\n ): void => {\n const lowered = lowerConnection({ key, exportName, value });\n throwOnErrors(lowered.issues);\n if (resolver != null && lowered.binding.inputApprovals != null) {\n const snapshot = jsonObjectSchema.parse(\n jsonOf(\n {\n resolver,\n name: key,\n event,\n payload,\n session: ctx.session,\n messages: ctx.messages,\n channel: ctx.channel,\n },\n 'dynamic connection boundary',\n ),\n );\n lowered.binding.inputApprovals = Object.fromEntries(\n Object.entries(lowered.binding.inputApprovals).map(([name, reference]) => [\n name,\n { ...reference, dynamic: snapshot },\n ]),\n );\n }\n connections.push(\n resolver == null ? lowered.binding : { ...lowered.binding, dynamicResolver: resolver },\n );\n };\n for (const entry of entries) {\n const add =\n entry.kind === 'tool'\n ? addTool\n : (name: string, exportName: string, value: AuthoredValue) =>\n addConnection(name, exportName, value);\n if (!isDynamicSentinel(entry.value)) {\n add(entry.key, entry.exportName, entry.value);\n continue;\n }\n const resolve = fieldOf(fieldOf(entry.value, 'events'), event);\n if (!isCallable(resolve)) {\n for (const server of previous) {\n if (\n entry.kind === 'connection' &&\n server.kind === McpServerBindingKind.Http &&\n server.dynamicResolver === entry.exportName\n ) {\n connections.push(server);\n } else if (entry.kind === 'tool' && server.kind === McpServerBindingKind.Worker) {\n for (const tool of server.tools) {\n if (tool.dynamic?.['resolver'] !== entry.exportName) continue;\n tools.push(tool);\n approvals[tool.name] = Object.hasOwn(server.approvals ?? {}, tool.name)\n ? (server.approvals?.[tool.name] ?? ToolApproval.Allow)\n : ToolApproval.Allow;\n }\n }\n }\n continue;\n }\n const result = await resolve(payload, ctx);\n if (result == null) continue;\n const kind = authoredKindOf(result);\n if (kind === AuthoredKind.Tool || kind === AuthoredKind.Connection) {\n if (entry.kind === 'tool') addTool(entry.key, entry.exportName, result, entry.exportName);\n else addConnection(entry.key, entry.exportName, result, entry.exportName);\n } else if (isPlainObject(result)) {\n for (const [name, item] of entriesOf(result)) {\n if (entry.kind === 'tool')\n addTool(name, `${entry.exportName}#${name}`, item, entry.exportName);\n else addConnection(name, `${entry.exportName}#${name}`, item, entry.exportName);\n }\n }\n }\n const servers: McpServerBinding[] = [];\n if (tools.length > 0) {\n servers.push({\n key: AUTHORED_SERVER_KEY,\n kind: McpServerBindingKind.Worker,\n tools,\n approvals,\n });\n }\n return jsonOf([...servers, ...connections], 'mcpServers');\n };\n return stamp(\n {\n kind: 'final:dynamic' as const,\n events: {\n [DynamicEvent.SessionStarted]: handler(DynamicEvent.SessionStarted),\n [DynamicEvent.TurnStarted]: handler(DynamicEvent.TurnStarted),\n },\n },\n AuthoredKind.Dynamic,\n );\n};\n\nconst matchRoute = (pattern: string, path: string): boolean => {\n const patternParts = pattern.split('/').filter((part) => part.length > 0);\n const pathParts = path.split('/').filter((part) => part.length > 0);\n if (patternParts.length !== pathParts.length) return false;\n return patternParts.every((part, index) => part.startsWith(':') || part === pathParts[index]);\n};\n\nconst toolModuleSchema = z.looseObject({\n execute: callableSchema,\n inputSchema: optionalValueSchema,\n outputSchema: optionalValueSchema,\n toModelOutput: callableSchema.optional(),\n label: toolLabelSchema.nullish(),\n});\n\nconst sentinelSchema = z.looseObject({ events: authoredRecordSchema });\n\nconst channelModuleSchema = z.looseObject({\n configure: callableSchema.optional(),\n routes: z.array(z.looseObject({ method: z.string(), path: z.string(), handler: callableSchema })),\n});\n\nconst dynamicToolBoundarySchema = z.object({\n resolver: z.string(),\n name: z.string(),\n event: z.nativeEnum(DynamicEvent),\n payload: z.object({\n type: z.nativeEnum(DynamicEvent),\n prompt: z.array(jsonValueSchema).nullable(),\n }),\n session: z.object({\n id: z.string(),\n organizationId: z.string(),\n definitionId: z.string(),\n revisionId: z.string(),\n conversation: z\n .object({\n id: z.string(),\n kind: z.nativeEnum(ConversationKind),\n title: z.string().nullable(),\n metadata: jsonObjectSchema,\n participants: z.array(\n z.object({\n id: z.string(),\n kind: z.nativeEnum(ParticipantKind),\n displayName: z.string(),\n userId: z.string().nullable(),\n }),\n ),\n })\n .nullable(),\n author: z\n .object({\n participantId: z.string().nullable(),\n userId: z.string().nullable(),\n displayName: z.string(),\n })\n .nullable(),\n turn: z.object({ id: z.string() }).nullable(),\n harness: providerRefSchema,\n }),\n messages: z.array(\n z.object({\n role: z.nativeEnum(TranscriptRole),\n content: z.array(jsonValueSchema),\n toolCallId: z.string().nullable(),\n seq: z.number(),\n }),\n ),\n channel: z.object({ kind: z.string().nullable() }),\n});\n\nexport const createIsolateRuntime = (modules: AuthoredRecord): IsolateRuntimeIface => {\n const lookup = (name: string): AuthoredValue => {\n if (!(name in modules)) throw new Error(`bundle has no export ${name}`);\n return modules[name];\n };\n const resolveAuthored = async (args: {\n exportName: string;\n dynamic?: JsonValue;\n kind: InputApprovalKind;\n secrets: { get(name: string): Promise<string | null> };\n }): Promise<AuthoredValue> => {\n if (args.dynamic == null) return lookup(args.exportName);\n const boundary = dynamicToolBoundarySchema.parse(args.dynamic);\n if (\n args.exportName !== boundary.resolver &&\n args.exportName !== `${boundary.resolver}#${boundary.name}`\n )\n throw new Error('dynamic export does not match its boundary');\n const sentinel = lookup(boundary.resolver);\n if (!isDynamicSentinel(sentinel)) throw new Error('dynamic resolver is not a defineDynamic');\n const resolve = fieldOf(fieldOf(sentinel, 'events'), boundary.event);\n if (!isCallable(resolve)) throw new Error('dynamic resolver has no boundary handler');\n const result = await resolve(boundary.payload, {\n session: boundary.session,\n messages: boundary.messages,\n channel: boundary.channel,\n secrets: args.secrets,\n });\n const expected =\n args.kind === InputApprovalKind.Tool ? AuthoredKind.Tool : AuthoredKind.Connection;\n return authoredKindOf(result) === expected ? result : fieldOf(result, boundary.name);\n };\n return {\n evaluateApproval: async ({ reference, input, secrets }) => {\n const value = await resolveAuthored({\n exportName: reference.export,\n dynamic: reference.dynamic,\n kind: reference.kind,\n secrets,\n });\n let policy: AuthoredValue;\n let validated: AuthoredValue = input;\n if (reference.kind === InputApprovalKind.Tool) {\n const tool = toolModuleSchema.parse(value);\n validated = await validateSchemaValue({\n schema: tool.inputSchema,\n value: input,\n what: 'approval input',\n });\n policy = fieldOf(value, 'approval');\n } else {\n if (authoredKindOf(value) !== AuthoredKind.Connection)\n throw new Error('approval export is not a connection');\n policy =\n reference.policyKey == null\n ? fieldOf(value, 'approval')\n : fieldOf(fieldOf(fieldOf(value, 'tools'), 'approval'), reference.policyKey);\n }\n const lowered = lowerApproval(policy);\n const predicate = fieldOf(policy, 'predicate');\n if (lowered.error != null || !lowered.inputDependent || !isCallable(predicate))\n throw new Error('approval reference has no valid input predicate');\n return z.boolean().parse(await predicate(validated)) ? ToolApproval.Ask : ToolApproval.Allow;\n },\n runTool: async (args) => {\n const value = await resolveAuthored({\n exportName: args.export,\n dynamic: args.dynamic,\n kind: InputApprovalKind.Tool,\n secrets: args.ctx.secrets,\n });\n if (args.dynamic != null)\n registerToolName(value, dynamicToolBoundarySchema.parse(args.dynamic).name);\n const parsed = toolModuleSchema.safeParse(value);\n if (!parsed.success) throw new Error(`${args.export} is not a tool`);\n const tool = parsed.data;\n const input = await validateSchemaValue({\n schema: tool.inputSchema,\n value: args.input,\n what: 'tool input',\n });\n const label = isObjectLike(tool.label) ? tool.label : null;\n const statusLabel = async (\n callback: AuthoredCallable | undefined,\n values: AuthoredValue[],\n ): Promise<string | undefined> => {\n if (callback == null) return undefined;\n try {\n const text = z.string().safeParse(await callback(...values));\n return text.success ? text.data : undefined;\n } catch {\n // Display labels must not turn a completed side effect into a tool failure.\n return undefined;\n }\n };\n const started = await statusLabel(label?.start, [input]);\n if (started != null) args.onProgress?.(null, started);\n const result = await tool.execute(input, args.ctx);\n let output: AuthoredValue = result;\n if (isAsyncIterable(result)) {\n for await (const item of result) {\n output = item;\n args.onProgress?.(\n jsonOf(item, 'tool progress'),\n await statusLabel(label?.delta, [input, item]),\n );\n }\n }\n const validated = await validateSchemaValue({\n schema: tool.outputSchema,\n value: output,\n what: 'tool output',\n });\n const modelOutput = tool.toModelOutput == null ? null : await tool.toModelOutput(validated);\n const completed = await statusLabel(label?.complete, [input, validated]);\n if (completed != null) args.onProgress?.(null, completed);\n return {\n output: jsonOf(validated ?? null, 'tool output'),\n modelOutput: modelOutput == null ? null : jsonOf(modelOutput, 'tool model output'),\n };\n },\n resolveDynamic: async (args) => {\n const sentinel = lookup(args.export);\n const parsed = sentinelSchema.safeParse(sentinel);\n if (!isDynamicSentinel(sentinel) || !parsed.success) {\n throw new Error(`${args.export} is not a defineDynamic resolver`);\n }\n const resolve = parsed.data.events[args.event];\n if (!isCallable(resolve)) return null;\n let result: AuthoredValue;\n try {\n result = await resolve(args.payload, args.ctx);\n } catch (cause) {\n // Dynamic handlers describe configurations; live setup belongs in defineSandbox.\n // `async () => environment.open(...)` is lowered as a request.\n const request = unopenedRequestOf(cause);\n if (request == null) throw cause;\n result = request;\n }\n return lowerResolvedValue(result, args.key ?? lastSegment(args.export));\n },\n dispatchHook: async (args) => {\n const handlers = hookHandlersFor(lookup(args.export), args.event);\n const failures: HookFailureIface[] = [];\n for (const invoke of handlers) {\n try {\n await invoke(args.event, args.ctx);\n } catch (cause) {\n failures.push({ message: messageOf(cause) });\n }\n }\n return { handled: handlers.length, failures };\n },\n handleChannelSocket: async (args) => {\n const original = channelModuleSchema.safeParse(lookup(args.export));\n if (!original.success) return null;\n const parsed =\n original.data.configure == null\n ? original\n : channelModuleSchema.safeParse(await original.data.configure(args.configuration ?? {}));\n if (!parsed.success) throw new Error(`${args.export} configured channel is invalid`);\n const route = parsed.data.routes.find(\n (candidate) => candidate.method === 'WS' && matchRoute(candidate.path, args.path),\n );\n if (route == null) return null;\n const response = await route.handler({\n request: args.request,\n secrets: args.secrets,\n receive: args.receive,\n socket: args.socket,\n });\n if (response != null && !(response instanceof Response))\n throw new Error(`${args.export} socket route returned an invalid response`);\n return response;\n },\n handleChannelRoute: async (args) => {\n const original = channelModuleSchema.safeParse(lookup(args.export));\n if (!original.success) return null;\n const parsed =\n original.data.configure == null\n ? original\n : channelModuleSchema.safeParse(await original.data.configure(args.configuration ?? {}));\n if (!parsed.success) throw new Error(`${args.export} configured channel is invalid`);\n const route = parsed.data.routes.find(\n (candidate) =>\n candidate.method === args.request.method && matchRoute(candidate.path, args.path),\n );\n if (route == null) return null;\n const response = await route.handler({\n request: args.request,\n secrets: args.secrets,\n receive: args.receive,\n });\n if (!(response instanceof Response)) {\n throw new Error(`${args.export} route ${args.path} did not return a Response`);\n }\n return response;\n },\n };\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import type { HostedBindingsIface } from '@finalai/agent-provider';\nimport {\n ConversationKind,\n DynamicEvent,\n InputApprovalKind,\n jsonObjectSchema,\n jsonValueSchema,\n McpServerBindingKind,\n mcpServerBindingSchema,\n ParticipantKind,\n providerRefSchema,\n ToolApproval,\n unopenedRequestOf,\n type ChannelReceiveResult,\n type ChannelSocketIface,\n type InputApprovalIface,\n type JsonObject,\n type JsonValue,\n type McpServerBinding,\n type ToolDescriptorIface,\n} from '@finalai/agent-provider';\nimport * as z from 'zod';\nimport { lowerApproval } from \"../authoring/approval.mjs\";\nimport { AuthoredKind, authoredKindOf, stamp } from \"../authoring/brand.mjs\";\nimport {\n TranscriptRole,\n type DynamicResolveContextIface,\n type ToolContextIface,\n} from \"../authoring/context.mjs\";\nimport type { DynamicBoundaryEventIface } from \"../authoring/dynamic.mjs\";\nimport {\n hookHandlersFor,\n type HookContextIface,\n type HookDispatchEventIface,\n} from \"../authoring/hooks.mjs\";\nimport { registerToolName, toolLabelSchema } from \"../authoring/tools.mjs\";\nimport { AUTHORED_SERVER_KEY } from \"./layout.mjs\";\nimport {\n isDynamicSentinel,\n isEnvironmentLike,\n isOpenRequestLike,\n lowerConnection,\n lowerEnvironment,\n lowerInstructions,\n lowerSkill,\n lowerTool,\n toJson,\n type IssueIface,\n} from \"./lower.mjs\";\nimport { validateSchemaValue } from \"./schema-validation.mjs\";\nimport {\n authoredRecordSchema,\n callableSchema,\n entriesOf,\n fieldOf,\n isAsyncIterable,\n isCallable,\n isObjectLike,\n isPlainObject,\n messageOf,\n optionalValueSchema,\n type AuthoredCallable,\n type AuthoredRecord,\n type AuthoredValue,\n} from \"./values.mjs\";\n\n// What an agent bundle exposes to the Worker isolate that runs it (B4/B7):\n// the authored module map plus helpers that run its exports. The bundle is\n// the only place authored code executes.\n\nexport interface RunToolArgsIface {\n export: string;\n input: AuthoredValue;\n dynamic?: JsonValue;\n ctx: ToolContextIface;\n // Each yield of an async-generator execute, for MCP progress notifications.\n onProgress?: (value: JsonValue, label?: string) => void;\n}\n\nexport interface RunToolResultIface {\n output: JsonValue;\n // toModelOutput's projection, when the tool has one.\n modelOutput: JsonValue | null;\n}\n\nexport interface ResolveDynamicArgsIface {\n export: string;\n event: DynamicEvent;\n payload: DynamicBoundaryEventIface;\n ctx: DynamicResolveContextIface;\n // Names a single returned skill (defaults to the export's last path segment).\n key?: string;\n}\n\nexport interface DispatchHookArgsIface {\n export: string;\n event: HookDispatchEventIface;\n ctx: HookContextIface;\n}\n\nexport interface HookFailureIface {\n message: string;\n}\n\nexport interface ChannelRouteArgsIface {\n export: string;\n request: Request;\n configuration?: JsonObject;\n // The route path relative to the channel's mount point ('/webhook').\n path: string;\n secrets: { get(name: string): Promise<string | null> };\n receive: (input: JsonValue) => Promise<ChannelReceiveResult>;\n}\n\nexport interface ChannelSocketArgsIface extends ChannelRouteArgsIface {\n socket: ChannelSocketIface;\n}\n\nexport interface IsolateRuntimeIface {\n evaluateApproval(args: {\n reference: InputApprovalIface;\n bindings?: HostedBindingsIface;\n input: AuthoredValue;\n secrets: { get(name: string): Promise<string | null> };\n }): Promise<ToolApproval>;\n runTool(args: RunToolArgsIface): Promise<RunToolResultIface>;\n resolveDynamic(args: ResolveDynamicArgsIface): Promise<JsonValue | null>;\n dispatchHook(\n args: DispatchHookArgsIface,\n ): Promise<{ handled: number; failures: HookFailureIface[] }>;\n // Null when no route of the channel matches the method and path.\n handleChannelRoute(args: ChannelRouteArgsIface): Promise<Response | null>;\n handleChannelSocket(args: ChannelSocketArgsIface): Promise<Response | void | null>;\n}\n\nconst jsonOf = (value: AuthoredValue, path: string): JsonValue => {\n const issues: IssueIface[] = [];\n const json = toJson(value, { path, issues });\n const failure = issues.find((issue) => issue.severity === 'error');\n if (failure != null) throw new Error(failure.message);\n return json;\n};\n\nconst lastSegment = (exportName: string): string => {\n const base = exportName.split('#')[0] ?? exportName;\n return base.split('/').at(-1) ?? base;\n};\n\n// Lowers a resolver's return value to manifest JSON by what it is.\nexport const lowerResolvedValue = (value: AuthoredValue, key: string): JsonValue | null => {\n if (value == null) return null;\n const kind = authoredKindOf(value);\n if (kind === AuthoredKind.Instructions)\n return jsonOf(lowerInstructions(value, null), 'instructions');\n if (kind === AuthoredKind.Skill) {\n const lowered = lowerSkill({ key, value });\n const failure = lowered.issues.find((issue) => issue.severity === 'error');\n if (failure != null) throw new Error(failure.message);\n return jsonOf(lowered.skill, 'skill');\n }\n if (isEnvironmentLike(value) || isOpenRequestLike(value)) {\n const issues: IssueIface[] = [];\n const environment = lowerEnvironment(value, 'environment', issues);\n return jsonOf(environment, 'environment');\n }\n if (isPlainObject(value)) {\n const entries = entriesOf(value);\n if (\n entries.length > 0 &&\n entries.every(([, item]) => authoredKindOf(item) === AuthoredKind.Skill)\n ) {\n return entries.map(([entryKey, item]) =>\n jsonOf(lowerSkill({ key: entryKey, value: item }).skill, 'skill'),\n );\n }\n }\n return jsonOf(value, 'resolved value');\n};\n\nexport interface CombinedEntryIface {\n kind: 'tool' | 'connection';\n key: string;\n exportName: string;\n value: AuthoredValue;\n}\n\nconst throwOnErrors = (issues: IssueIface[]): void => {\n const failure = issues.find((issue) => issue.severity === 'error');\n if (failure != null) throw new Error(failure.message);\n};\n\n// A resolver for the whole `mcpServers` field, used when any tool or\n// connection is dynamic: the manifest stores one slot and the session gets\n// the static and resolved entries together.\nexport const combineMcpServers = (entries: CombinedEntryIface[]): AuthoredValue => {\n const handler =\n (event: DynamicEvent) =>\n async (payload: DynamicBoundaryEventIface, ctx: DynamicResolveContextIface) => {\n const previous = z.array(mcpServerBindingSchema).safeParse(ctx.previousValue).data ?? [];\n const tools: ToolDescriptorIface[] = [];\n const approvals: Record<string, ToolApproval> = {};\n const connections: McpServerBinding[] = [];\n const addTool = (\n name: string,\n exportName: string,\n value: AuthoredValue,\n resolver?: string,\n ): void => {\n const lowered = lowerTool({ name, exportName, value });\n throwOnErrors(lowered.issues);\n registerToolName(value, name);\n if (resolver != null) {\n const snapshot = jsonObjectSchema.parse(\n jsonOf(\n {\n resolver,\n name,\n event,\n payload,\n session: ctx.session,\n messages: ctx.messages,\n channel: ctx.channel,\n },\n 'dynamic tool boundary',\n ),\n );\n lowered.descriptor.dynamic = snapshot;\n if (lowered.descriptor.inputApproval != null)\n lowered.descriptor.inputApproval = {\n ...lowered.descriptor.inputApproval,\n dynamic: snapshot,\n };\n }\n tools.push(lowered.descriptor);\n approvals[name] = lowered.approval;\n };\n const addConnection = (\n key: string,\n exportName: string,\n value: AuthoredValue,\n resolver?: string,\n ): void => {\n const lowered = lowerConnection({ key, exportName, value });\n throwOnErrors(lowered.issues);\n if (resolver != null && lowered.binding.inputApprovals != null) {\n const snapshot = jsonObjectSchema.parse(\n jsonOf(\n {\n resolver,\n name: key,\n event,\n payload,\n session: ctx.session,\n messages: ctx.messages,\n channel: ctx.channel,\n },\n 'dynamic connection boundary',\n ),\n );\n lowered.binding.inputApprovals = Object.fromEntries(\n Object.entries(lowered.binding.inputApprovals).map(([name, reference]) => [\n name,\n { ...reference, dynamic: snapshot },\n ]),\n );\n }\n connections.push(\n resolver == null ? lowered.binding : { ...lowered.binding, dynamicResolver: resolver },\n );\n };\n for (const entry of entries) {\n const add =\n entry.kind === 'tool'\n ? addTool\n : (name: string, exportName: string, value: AuthoredValue) =>\n addConnection(name, exportName, value);\n if (!isDynamicSentinel(entry.value)) {\n add(entry.key, entry.exportName, entry.value);\n continue;\n }\n const resolve = fieldOf(fieldOf(entry.value, 'events'), event);\n if (!isCallable(resolve)) {\n for (const server of previous) {\n if (\n entry.kind === 'connection' &&\n server.kind === McpServerBindingKind.Http &&\n server.dynamicResolver === entry.exportName\n ) {\n connections.push(server);\n } else if (entry.kind === 'tool' && server.kind === McpServerBindingKind.Worker) {\n for (const tool of server.tools) {\n if (tool.dynamic?.['resolver'] !== entry.exportName) continue;\n tools.push(tool);\n approvals[tool.name] = Object.hasOwn(server.approvals ?? {}, tool.name)\n ? (server.approvals?.[tool.name] ?? ToolApproval.Allow)\n : ToolApproval.Allow;\n }\n }\n }\n continue;\n }\n const result = await resolve(payload, ctx);\n if (result == null) continue;\n const kind = authoredKindOf(result);\n if (kind === AuthoredKind.Tool || kind === AuthoredKind.Connection) {\n if (entry.kind === 'tool') addTool(entry.key, entry.exportName, result, entry.exportName);\n else addConnection(entry.key, entry.exportName, result, entry.exportName);\n } else if (isPlainObject(result)) {\n for (const [name, item] of entriesOf(result)) {\n if (entry.kind === 'tool')\n addTool(name, `${entry.exportName}#${name}`, item, entry.exportName);\n else addConnection(name, `${entry.exportName}#${name}`, item, entry.exportName);\n }\n }\n }\n const servers: McpServerBinding[] = [];\n if (tools.length > 0) {\n servers.push({\n key: AUTHORED_SERVER_KEY,\n kind: McpServerBindingKind.Worker,\n tools,\n approvals,\n });\n }\n return jsonOf([...servers, ...connections], 'mcpServers');\n };\n return stamp(\n {\n kind: 'final:dynamic' as const,\n events: {\n [DynamicEvent.SessionStarted]: handler(DynamicEvent.SessionStarted),\n [DynamicEvent.TurnStarted]: handler(DynamicEvent.TurnStarted),\n },\n },\n AuthoredKind.Dynamic,\n );\n};\n\nconst matchRoute = (pattern: string, path: string): boolean => {\n const patternParts = pattern.split('/').filter((part) => part.length > 0);\n const pathParts = path.split('/').filter((part) => part.length > 0);\n if (patternParts.length !== pathParts.length) return false;\n return patternParts.every((part, index) => part.startsWith(':') || part === pathParts[index]);\n};\n\nconst toolModuleSchema = z.looseObject({\n execute: callableSchema,\n inputSchema: optionalValueSchema,\n outputSchema: optionalValueSchema,\n toModelOutput: callableSchema.optional(),\n label: toolLabelSchema.nullish(),\n});\n\nconst sentinelSchema = z.looseObject({ events: authoredRecordSchema });\n\nconst channelModuleSchema = z.looseObject({\n configure: callableSchema.optional(),\n routes: z.array(z.looseObject({ method: z.string(), path: z.string(), handler: callableSchema })),\n});\n\nconst dynamicToolBoundarySchema = z.object({\n resolver: z.string(),\n name: z.string(),\n event: z.nativeEnum(DynamicEvent),\n payload: z.object({\n type: z.nativeEnum(DynamicEvent),\n prompt: z.array(jsonValueSchema).nullable(),\n }),\n session: z.object({\n id: z.string(),\n organizationId: z.string(),\n definitionId: z.string(),\n revisionId: z.string(),\n conversation: z\n .object({\n id: z.string(),\n kind: z.nativeEnum(ConversationKind),\n title: z.string().nullable(),\n metadata: jsonObjectSchema,\n participants: z.array(\n z.object({\n id: z.string(),\n kind: z.nativeEnum(ParticipantKind),\n displayName: z.string(),\n userId: z.string().nullable(),\n }),\n ),\n })\n .nullable(),\n author: z\n .object({\n participantId: z.string().nullable(),\n userId: z.string().nullable(),\n displayName: z.string(),\n })\n .nullable(),\n turn: z.object({ id: z.string() }).nullable(),\n harness: providerRefSchema,\n }),\n messages: z.array(\n z.object({\n role: z.nativeEnum(TranscriptRole),\n content: z.array(jsonValueSchema),\n toolCallId: z.string().nullable(),\n seq: z.number(),\n }),\n ),\n channel: z.object({ kind: z.string().nullable() }),\n});\n\nexport const createIsolateRuntime = (modules: AuthoredRecord): IsolateRuntimeIface => {\n const lookup = (name: string): AuthoredValue => {\n if (!(name in modules)) throw new Error(`bundle has no export ${name}`);\n return modules[name];\n };\n const resolveAuthored = async (args: {\n bindings?: HostedBindingsIface;\n exportName: string;\n dynamic?: JsonValue;\n kind: InputApprovalKind;\n secrets: { get(name: string): Promise<string | null> };\n }): Promise<AuthoredValue> => {\n if (args.dynamic == null) return lookup(args.exportName);\n const boundary = dynamicToolBoundarySchema.parse(args.dynamic);\n if (\n args.exportName !== boundary.resolver &&\n args.exportName !== `${boundary.resolver}#${boundary.name}`\n )\n throw new Error('dynamic export does not match its boundary');\n const sentinel = lookup(boundary.resolver);\n if (!isDynamicSentinel(sentinel)) throw new Error('dynamic resolver is not a defineDynamic');\n const resolve = fieldOf(fieldOf(sentinel, 'events'), boundary.event);\n if (!isCallable(resolve)) throw new Error('dynamic resolver has no boundary handler');\n const result = await resolve(boundary.payload, {\n session: boundary.session,\n messages: boundary.messages,\n channel: boundary.channel,\n secrets: args.secrets,\n bindings: args.bindings,\n });\n const expected =\n args.kind === InputApprovalKind.Tool ? AuthoredKind.Tool : AuthoredKind.Connection;\n return authoredKindOf(result) === expected ? result : fieldOf(result, boundary.name);\n };\n return {\n evaluateApproval: async ({ reference, input, secrets, bindings }) => {\n const value = await resolveAuthored({\n exportName: reference.export,\n dynamic: reference.dynamic,\n kind: reference.kind,\n secrets,\n bindings,\n });\n let policy: AuthoredValue;\n let validated: AuthoredValue = input;\n if (reference.kind === InputApprovalKind.Tool) {\n const tool = toolModuleSchema.parse(value);\n validated = await validateSchemaValue({\n schema: tool.inputSchema,\n value: input,\n what: 'approval input',\n });\n policy = fieldOf(value, 'approval');\n } else {\n if (authoredKindOf(value) !== AuthoredKind.Connection)\n throw new Error('approval export is not a connection');\n policy =\n reference.policyKey == null\n ? fieldOf(value, 'approval')\n : fieldOf(fieldOf(fieldOf(value, 'tools'), 'approval'), reference.policyKey);\n }\n const lowered = lowerApproval(policy);\n const predicate = fieldOf(policy, 'predicate');\n if (lowered.error != null || !lowered.inputDependent || !isCallable(predicate))\n throw new Error('approval reference has no valid input predicate');\n return z.boolean().parse(await predicate(validated)) ? ToolApproval.Ask : ToolApproval.Allow;\n },\n runTool: async (args) => {\n const value = await resolveAuthored({\n exportName: args.export,\n dynamic: args.dynamic,\n kind: InputApprovalKind.Tool,\n secrets: args.ctx.secrets,\n bindings: args.ctx.bindings,\n });\n if (args.dynamic != null)\n registerToolName(value, dynamicToolBoundarySchema.parse(args.dynamic).name);\n const parsed = toolModuleSchema.safeParse(value);\n if (!parsed.success) throw new Error(`${args.export} is not a tool`);\n const tool = parsed.data;\n const input = await validateSchemaValue({\n schema: tool.inputSchema,\n value: args.input,\n what: 'tool input',\n });\n const label = isObjectLike(tool.label) ? tool.label : null;\n const statusLabel = async (\n callback: AuthoredCallable | undefined,\n values: AuthoredValue[],\n ): Promise<string | undefined> => {\n if (callback == null) return undefined;\n try {\n const text = z.string().safeParse(await callback(...values));\n return text.success ? text.data : undefined;\n } catch {\n // Display labels must not turn a completed side effect into a tool failure.\n return undefined;\n }\n };\n const started = await statusLabel(label?.start, [input]);\n if (started != null) args.onProgress?.(null, started);\n const result = await tool.execute(input, args.ctx);\n let output: AuthoredValue = result;\n if (isAsyncIterable(result)) {\n for await (const item of result) {\n output = item;\n args.onProgress?.(\n jsonOf(item, 'tool progress'),\n await statusLabel(label?.delta, [input, item]),\n );\n }\n }\n const validated = await validateSchemaValue({\n schema: tool.outputSchema,\n value: output,\n what: 'tool output',\n });\n const modelOutput = tool.toModelOutput == null ? null : await tool.toModelOutput(validated);\n const completed = await statusLabel(label?.complete, [input, validated]);\n if (completed != null) args.onProgress?.(null, completed);\n return {\n output: jsonOf(validated ?? null, 'tool output'),\n modelOutput: modelOutput == null ? null : jsonOf(modelOutput, 'tool model output'),\n };\n },\n resolveDynamic: async (args) => {\n const sentinel = lookup(args.export);\n const parsed = sentinelSchema.safeParse(sentinel);\n if (!isDynamicSentinel(sentinel) || !parsed.success) {\n throw new Error(`${args.export} is not a defineDynamic resolver`);\n }\n const resolve = parsed.data.events[args.event];\n if (!isCallable(resolve)) return null;\n let result: AuthoredValue;\n try {\n result = await resolve(args.payload, args.ctx);\n } catch (cause) {\n // Dynamic handlers describe configurations; live setup belongs in defineSandbox.\n // `async () => environment.open(...)` is lowered as a request.\n const request = unopenedRequestOf(cause);\n if (request == null) throw cause;\n result = request;\n }\n return lowerResolvedValue(result, args.key ?? lastSegment(args.export));\n },\n dispatchHook: async (args) => {\n const handlers = hookHandlersFor(lookup(args.export), args.event);\n const failures: HookFailureIface[] = [];\n for (const invoke of handlers) {\n try {\n await invoke(args.event, args.ctx);\n } catch (cause) {\n failures.push({ message: messageOf(cause) });\n }\n }\n return { handled: handlers.length, failures };\n },\n handleChannelSocket: async (args) => {\n const original = channelModuleSchema.safeParse(lookup(args.export));\n if (!original.success) return null;\n const parsed =\n original.data.configure == null\n ? original\n : channelModuleSchema.safeParse(await original.data.configure(args.configuration ?? {}));\n if (!parsed.success) throw new Error(`${args.export} configured channel is invalid`);\n const route = parsed.data.routes.find(\n (candidate) => candidate.method === 'WS' && matchRoute(candidate.path, args.path),\n );\n if (route == null) return null;\n const response = await route.handler({\n request: args.request,\n secrets: args.secrets,\n receive: args.receive,\n socket: args.socket,\n });\n if (response != null && !(response instanceof Response))\n throw new Error(`${args.export} socket route returned an invalid response`);\n return response;\n },\n handleChannelRoute: async (args) => {\n const original = channelModuleSchema.safeParse(lookup(args.export));\n if (!original.success) return null;\n const parsed =\n original.data.configure == null\n ? original\n : channelModuleSchema.safeParse(await original.data.configure(args.configuration ?? {}));\n if (!parsed.success) throw new Error(`${args.export} configured channel is invalid`);\n const route = parsed.data.routes.find(\n (candidate) =>\n candidate.method === args.request.method && matchRoute(candidate.path, args.path),\n );\n if (route == null) return null;\n const response = await route.handler({\n request: args.request,\n secrets: args.secrets,\n receive: args.receive,\n });\n if (!(response instanceof Response)) {\n throw new Error(`${args.export} route ${args.path} did not return a Response`);\n }\n return response;\n },\n };\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -2,7 +2,16 @@ import {
|
|
|
2
2
|
jsonObjectSchema,
|
|
3
3
|
jsonValueSchema
|
|
4
4
|
} from "@finalai/agent-provider";
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
compileSchema,
|
|
7
|
+
draft04,
|
|
8
|
+
draft06,
|
|
9
|
+
draft07,
|
|
10
|
+
draft2019,
|
|
11
|
+
draft2020,
|
|
12
|
+
isSchemaNode
|
|
13
|
+
} from "json-schema-library";
|
|
14
|
+
import { formats } from "json-schema-library/formats";
|
|
6
15
|
import { remotes } from "json-schema-library/remotes";
|
|
7
16
|
import * as z from "zod";
|
|
8
17
|
import { callableSchema, fieldOf } from "./values.mjs";
|
|
@@ -11,6 +20,10 @@ var SchemaIo = /* @__PURE__ */ ((SchemaIo2) => {
|
|
|
11
20
|
SchemaIo2["Output"] = "output";
|
|
12
21
|
return SchemaIo2;
|
|
13
22
|
})(SchemaIo || {});
|
|
23
|
+
const validationDrafts = [draft04, draft06, draft07, draft2019, draft2020].map((draft) => ({
|
|
24
|
+
...draft,
|
|
25
|
+
formats: { ...draft.formats, ...formats }
|
|
26
|
+
}));
|
|
14
27
|
const dialects = /* @__PURE__ */ new Set([
|
|
15
28
|
"https://json-schema.org/draft/2020-12/schema",
|
|
16
29
|
"https://json-schema.org/draft/2019-09/schema",
|
|
@@ -138,7 +151,11 @@ const validatorFor = (schema) => {
|
|
|
138
151
|
if (text == null) throw new Error("Expected a JSON Schema object");
|
|
139
152
|
const parsed = jsonObjectSchema.parse(canonicalJson(jsonObjectSchema.parse(JSON.parse(text))));
|
|
140
153
|
checkDialect(parsed);
|
|
141
|
-
const node = compileSchema(parsed, {
|
|
154
|
+
const node = compileSchema(parsed, {
|
|
155
|
+
drafts: validationDrafts,
|
|
156
|
+
formatAssertion: true,
|
|
157
|
+
throwOnInvalidRef: true
|
|
158
|
+
});
|
|
142
159
|
if (node.schemaErrors != null && node.schemaErrors.length > 0)
|
|
143
160
|
throw new Error(node.schemaErrors.map((issue) => issue.message).join("; "));
|
|
144
161
|
const nodes = /* @__PURE__ */ new Set([node, ...Object.values(node.context.refs)]);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/runtime/schema-validation.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n jsonObjectSchema,\n jsonValueSchema,\n type JsonObject,\n type JsonValue,\n} from '@finalai/agent-provider';\nimport { compileSchema, isSchemaNode, type SchemaNode } from 'json-schema-library';\nimport { remotes } from 'json-schema-library/remotes';\nimport * as z from 'zod';\nimport { callableSchema, fieldOf, type AuthoredValue } from \"./values.mjs\";\n\nexport enum SchemaIo {\n Input = 'input',\n Output = 'output',\n}\n\nconst dialects = new Set([\n 'https://json-schema.org/draft/2020-12/schema',\n 'https://json-schema.org/draft/2019-09/schema',\n 'http://json-schema.org/draft-07/schema#',\n 'https://json-schema.org/draft-07/schema#',\n 'http://json-schema.org/draft-06/schema#',\n 'https://json-schema.org/draft-06/schema#',\n 'http://json-schema.org/draft-04/schema#',\n 'https://json-schema.org/draft-04/schema#',\n]);\nconst vocabularies = new Set([\n 'https://json-schema.org/draft/2020-12/vocab/core',\n 'https://json-schema.org/draft/2020-12/vocab/applicator',\n 'https://json-schema.org/draft/2020-12/vocab/validation',\n 'https://json-schema.org/draft/2020-12/vocab/unevaluated',\n 'https://json-schema.org/draft/2020-12/vocab/meta-data',\n 'https://json-schema.org/draft/2020-12/vocab/format-annotation',\n 'https://json-schema.org/draft/2020-12/vocab/format-assertion',\n 'https://json-schema.org/draft/2020-12/vocab/content',\n 'https://json-schema.org/draft/2019-09/vocab/core',\n 'https://json-schema.org/draft/2019-09/vocab/applicator',\n 'https://json-schema.org/draft/2019-09/vocab/validation',\n 'https://json-schema.org/draft/2019-09/vocab/meta-data',\n 'https://json-schema.org/draft/2019-09/vocab/format',\n 'https://json-schema.org/draft/2019-09/vocab/content',\n]);\nconst declarationSchema = z.looseObject({\n $schema: z.string().optional(),\n $vocabulary: z.record(z.string(), z.boolean()).optional(),\n});\n\nconst checkDialect = (value: AuthoredValue): void => {\n if (z.boolean().safeParse(value).success) return;\n const schema = declarationSchema.parse(value);\n if (schema.$schema != null && !dialects.has(schema.$schema))\n throw new Error(`Unsupported JSON Schema dialect ${schema.$schema}`);\n for (const [name, required] of Object.entries(schema.$vocabulary ?? {})) {\n if (required && !vocabularies.has(name))\n throw new Error(`Unsupported required JSON Schema vocabulary ${name}`);\n }\n};\n\nconst dialectByVersion = {\n 'draft-04': 'http://json-schema.org/draft-04/schema#',\n 'draft-06': 'http://json-schema.org/draft-06/schema#',\n 'draft-07': 'http://json-schema.org/draft-07/schema#',\n 'draft-2019-09': 'https://json-schema.org/draft/2019-09/schema',\n 'draft-2020-12': 'https://json-schema.org/draft/2020-12/schema',\n} satisfies Record<string, string>;\nlet metaRoot: SchemaNode | null = null;\nconst metaSchemas = (): SchemaNode => {\n if (metaRoot != null) return metaRoot;\n const schemas = z\n .array(jsonObjectSchema)\n .parse(remotes)\n .map((schema) => {\n const identity = z\n .string()\n .parse(schema.$id ?? schema.id)\n .replace(/#$/, '');\n const remote: JsonObject = { ...schema, $id: identity };\n if (schema.id != null) remote['id'] = identity;\n return remote;\n });\n metaRoot = compileSchema(\n {},\n { remotes: schemas, formatAssertion: true, throwOnInvalidRef: true },\n );\n return metaRoot;\n};\n\nconst schemaKeywords = new Set([\n 'additionalItems',\n 'additionalProperties',\n 'contains',\n 'propertyNames',\n 'unevaluatedItems',\n 'unevaluatedProperties',\n 'not',\n 'if',\n 'then',\n 'else',\n]);\nconst schemaMaps = new Set([\n 'properties',\n 'patternProperties',\n '$defs',\n 'definitions',\n 'dependentSchemas',\n 'dependencies',\n]);\nconst schemaArrays = new Set(['allOf', 'anyOf', 'oneOf', 'prefixItems']);\nconst childPlaceholder = (value: JsonValue): JsonValue =>\n jsonObjectSchema.safeParse(value).success ? {} : value;\n\n// Validate each parsed node against its own dialect. Child schemas are checked\n// separately, so an embedded resource can declare a different dialect.\nconst shallowDeclaration = (schema: JsonObject): JsonObject =>\n Object.fromEntries(\n Object.entries(schema).map(([key, value]) => {\n if (schemaKeywords.has(key)) return [key, childPlaceholder(value)];\n if ((schemaArrays.has(key) || key === 'items') && Array.isArray(value))\n return [key, value.map(childPlaceholder)];\n if (key === 'items') return [key, childPlaceholder(value)];\n const object = jsonObjectSchema.safeParse(value);\n if (schemaMaps.has(key) && object.success)\n return [\n key,\n Object.fromEntries(\n Object.entries(object.data).map(([name, child]) => [name, childPlaceholder(child)]),\n ),\n ];\n return [key, value];\n }),\n );\nconst checkDeclaration = (node: SchemaNode): void => {\n if (z.boolean().safeParse(node.schema).success) return;\n const schema = jsonObjectSchema.parse(node.schema);\n checkDialect(schema);\n const dialect = Object.entries(dialectByVersion).find(\n ([version]) => version === node.context.version,\n )?.[1];\n if (dialect == null) throw new Error(`Unsupported JSON Schema version ${node.context.version}`);\n const meta = metaSchemas().getNodeRef(dialect);\n if (!isSchemaNode(meta)) throw new Error(`Missing JSON Schema metaschema ${dialect}`);\n const result = meta.validate(shallowDeclaration(schema));\n if (!result.valid) throw new Error(result.errors.map((issue) => issue.message).join('; '));\n};\n\nconst canonicalJson = (value: JsonValue): JsonValue => {\n if (Array.isArray(value)) return value.map(canonicalJson);\n const object = jsonObjectSchema.safeParse(value);\n if (!object.success) return value;\n return Object.fromEntries(\n Object.entries(object.data)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, item]) => [key, canonicalJson(item)]),\n );\n};\n\n// Compile a private tree for each validation. The interpreter never fetches\n// references or shares a schema registry, and retains no tool data between calls.\nconst validatorFor = (schema: AuthoredValue): SchemaNode => {\n const text = JSON.stringify(schema);\n if (text == null) throw new Error('Expected a JSON Schema object');\n const parsed = jsonObjectSchema.parse(canonicalJson(jsonObjectSchema.parse(JSON.parse(text))));\n checkDialect(parsed);\n const node = compileSchema(parsed, { formatAssertion: true, throwOnInvalidRef: true });\n if (node.schemaErrors != null && node.schemaErrors.length > 0)\n throw new Error(node.schemaErrors.map((issue) => issue.message).join('; '));\n // Check even unused declarations: an unresolved reference must fail publish,\n // rather than surviving until some input happens to select that branch.\n const nodes = new Set([node, ...Object.values(node.context.refs)]);\n for (const child of nodes) {\n checkDeclaration(child);\n const ref =\n fieldOf(child.schema, '$ref') ??\n fieldOf(child.schema, '$dynamicRef') ??\n fieldOf(child.schema, '$recursiveRef');\n if (ref == null) continue;\n const resolved = child.resolveRef();\n if (!isSchemaNode(resolved))\n throw new Error(`Unresolved JSON Schema reference ${String(ref)} at ${child.schemaLocation}`);\n }\n return node;\n};\n\nexport const jsonSchemaError = (schema: AuthoredValue, value: AuthoredValue): string | null => {\n const validator = validatorFor(schema);\n const parsed = jsonValueSchema.safeParse(value);\n if (!parsed.success) return 'Expected a JSON-compatible value';\n // JSON object order is immaterial, including inside enum assertions.\n const result = validator.validate(canonicalJson(parsed.data));\n return result.valid ? null : result.errors.map((issue) => issue.message).join('; ');\n};\n\nexport const jsonSchemaDeclarationError = (schema: AuthoredValue): string | null => {\n try {\n validatorFor(schema);\n return null;\n } catch (cause) {\n return cause instanceof Error ? cause.message : String(cause);\n }\n};\n\nexport const standardValidatorSchema = z.looseObject({\n '~standard': z.looseObject({\n version: z.literal(1),\n vendor: z.string(),\n validate: callableSchema,\n }),\n});\nconst validationResultSchema = z.looseObject({\n value: z.unknown().optional(),\n issues: z.array(z.looseObject({ message: z.string().optional() })).optional(),\n});\n\nexport const validateSchemaValue = async (args: {\n schema: AuthoredValue;\n value: AuthoredValue;\n what: string;\n}): Promise<AuthoredValue> => {\n if (args.schema == null) return args.value;\n const standard = standardValidatorSchema.safeParse(args.schema);\n if (standard.success) {\n // Zod's Standard Schema validator retries asynchronous transforms after a\n // synchronous attempt; its public async parser performs them only once.\n if (standard.data['~standard'].vendor === 'zod') {\n const parser = callableSchema.safeParse(fieldOf(args.schema, 'safeParseAsync'));\n if (parser.success) {\n const result = z\n .looseObject({\n success: z.boolean(),\n data: z.unknown().optional(),\n error: z.looseObject({ issues: z.array(z.object({ message: z.string() })) }).optional(),\n })\n .parse(await parser.data.call(args.schema, args.value));\n if (!result.success)\n throw new Error(\n `Invalid ${args.what}: ${result.error?.issues.map((issue) => issue.message).join('; ') ?? 'invalid'}`,\n );\n return result.data;\n }\n }\n const raw = await standard.data['~standard'].validate.call(\n fieldOf(args.schema, '~standard'),\n args.value,\n );\n const result = validationResultSchema.parse(raw);\n if (result.issues != null)\n throw new Error(\n `Invalid ${args.what}: ${result.issues.map((issue) => issue.message ?? 'invalid').join('; ') || 'invalid'}`,\n );\n if (!Object.hasOwn(result, 'value'))\n throw new Error(`Invalid ${args.what}: schema validator returned no value`);\n return result.value;\n }\n const error = jsonSchemaError(args.schema, args.value);\n if (error != null) throw new Error(`Invalid ${args.what}: ${error}`);\n return args.value;\n};\n\n// Published results have already been transformed. Never run their input\n// validator again: use the output JSON Schema for synchronous hook narrowing.\nexport const resultMatchesSchema = (schema: AuthoredValue, value: AuthoredValue): boolean => {\n if (schema == null) return true;\n try {\n const standard = standardValidatorSchema.safeParse(schema);\n if (!standard.success) return jsonSchemaError(schema, value) == null;\n const jsonSchemas = fieldOf(fieldOf(schema, '~standard'), 'jsonSchema');\n const converter = callableSchema.safeParse(fieldOf(jsonSchemas, SchemaIo.Output));\n if (!converter.success) return false;\n return (\n jsonSchemaError(converter.data.call(jsonSchemas, { target: 'draft-2020-12' }), value) == null\n );\n } catch {\n return false;\n }\n};\n"],
|
|
5
|
-
"mappings": "AAAA;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AACP,SAAS,eAAe
|
|
4
|
+
"sourcesContent": ["import {\n jsonObjectSchema,\n jsonValueSchema,\n type JsonObject,\n type JsonValue,\n} from '@finalai/agent-provider';\nimport {\n compileSchema,\n draft04,\n draft06,\n draft07,\n draft2019,\n draft2020,\n isSchemaNode,\n type SchemaNode,\n} from 'json-schema-library';\nimport { formats } from 'json-schema-library/formats';\nimport { remotes } from 'json-schema-library/remotes';\nimport * as z from 'zod';\nimport { callableSchema, fieldOf, type AuthoredValue } from \"./values.mjs\";\n\nexport enum SchemaIo {\n Input = 'input',\n Output = 'output',\n}\n\n// Include URI formats in private drafts without mutating the library defaults.\nconst validationDrafts = [draft04, draft06, draft07, draft2019, draft2020].map((draft) => ({\n ...draft,\n formats: { ...draft.formats, ...formats },\n}));\n\nconst dialects = new Set([\n 'https://json-schema.org/draft/2020-12/schema',\n 'https://json-schema.org/draft/2019-09/schema',\n 'http://json-schema.org/draft-07/schema#',\n 'https://json-schema.org/draft-07/schema#',\n 'http://json-schema.org/draft-06/schema#',\n 'https://json-schema.org/draft-06/schema#',\n 'http://json-schema.org/draft-04/schema#',\n 'https://json-schema.org/draft-04/schema#',\n]);\nconst vocabularies = new Set([\n 'https://json-schema.org/draft/2020-12/vocab/core',\n 'https://json-schema.org/draft/2020-12/vocab/applicator',\n 'https://json-schema.org/draft/2020-12/vocab/validation',\n 'https://json-schema.org/draft/2020-12/vocab/unevaluated',\n 'https://json-schema.org/draft/2020-12/vocab/meta-data',\n 'https://json-schema.org/draft/2020-12/vocab/format-annotation',\n 'https://json-schema.org/draft/2020-12/vocab/format-assertion',\n 'https://json-schema.org/draft/2020-12/vocab/content',\n 'https://json-schema.org/draft/2019-09/vocab/core',\n 'https://json-schema.org/draft/2019-09/vocab/applicator',\n 'https://json-schema.org/draft/2019-09/vocab/validation',\n 'https://json-schema.org/draft/2019-09/vocab/meta-data',\n 'https://json-schema.org/draft/2019-09/vocab/format',\n 'https://json-schema.org/draft/2019-09/vocab/content',\n]);\nconst declarationSchema = z.looseObject({\n $schema: z.string().optional(),\n $vocabulary: z.record(z.string(), z.boolean()).optional(),\n});\n\nconst checkDialect = (value: AuthoredValue): void => {\n if (z.boolean().safeParse(value).success) return;\n const schema = declarationSchema.parse(value);\n if (schema.$schema != null && !dialects.has(schema.$schema))\n throw new Error(`Unsupported JSON Schema dialect ${schema.$schema}`);\n for (const [name, required] of Object.entries(schema.$vocabulary ?? {})) {\n if (required && !vocabularies.has(name))\n throw new Error(`Unsupported required JSON Schema vocabulary ${name}`);\n }\n};\n\nconst dialectByVersion = {\n 'draft-04': 'http://json-schema.org/draft-04/schema#',\n 'draft-06': 'http://json-schema.org/draft-06/schema#',\n 'draft-07': 'http://json-schema.org/draft-07/schema#',\n 'draft-2019-09': 'https://json-schema.org/draft/2019-09/schema',\n 'draft-2020-12': 'https://json-schema.org/draft/2020-12/schema',\n} satisfies Record<string, string>;\nlet metaRoot: SchemaNode | null = null;\nconst metaSchemas = (): SchemaNode => {\n if (metaRoot != null) return metaRoot;\n const schemas = z\n .array(jsonObjectSchema)\n .parse(remotes)\n .map((schema) => {\n const identity = z\n .string()\n .parse(schema.$id ?? schema.id)\n .replace(/#$/, '');\n const remote: JsonObject = { ...schema, $id: identity };\n if (schema.id != null) remote['id'] = identity;\n return remote;\n });\n metaRoot = compileSchema(\n {},\n { remotes: schemas, formatAssertion: true, throwOnInvalidRef: true },\n );\n return metaRoot;\n};\n\nconst schemaKeywords = new Set([\n 'additionalItems',\n 'additionalProperties',\n 'contains',\n 'propertyNames',\n 'unevaluatedItems',\n 'unevaluatedProperties',\n 'not',\n 'if',\n 'then',\n 'else',\n]);\nconst schemaMaps = new Set([\n 'properties',\n 'patternProperties',\n '$defs',\n 'definitions',\n 'dependentSchemas',\n 'dependencies',\n]);\nconst schemaArrays = new Set(['allOf', 'anyOf', 'oneOf', 'prefixItems']);\nconst childPlaceholder = (value: JsonValue): JsonValue =>\n jsonObjectSchema.safeParse(value).success ? {} : value;\n\n// Validate each parsed node against its own dialect. Child schemas are checked\n// separately, so an embedded resource can declare a different dialect.\nconst shallowDeclaration = (schema: JsonObject): JsonObject =>\n Object.fromEntries(\n Object.entries(schema).map(([key, value]) => {\n if (schemaKeywords.has(key)) return [key, childPlaceholder(value)];\n if ((schemaArrays.has(key) || key === 'items') && Array.isArray(value))\n return [key, value.map(childPlaceholder)];\n if (key === 'items') return [key, childPlaceholder(value)];\n const object = jsonObjectSchema.safeParse(value);\n if (schemaMaps.has(key) && object.success)\n return [\n key,\n Object.fromEntries(\n Object.entries(object.data).map(([name, child]) => [name, childPlaceholder(child)]),\n ),\n ];\n return [key, value];\n }),\n );\nconst checkDeclaration = (node: SchemaNode): void => {\n if (z.boolean().safeParse(node.schema).success) return;\n const schema = jsonObjectSchema.parse(node.schema);\n checkDialect(schema);\n const dialect = Object.entries(dialectByVersion).find(\n ([version]) => version === node.context.version,\n )?.[1];\n if (dialect == null) throw new Error(`Unsupported JSON Schema version ${node.context.version}`);\n const meta = metaSchemas().getNodeRef(dialect);\n if (!isSchemaNode(meta)) throw new Error(`Missing JSON Schema metaschema ${dialect}`);\n const result = meta.validate(shallowDeclaration(schema));\n if (!result.valid) throw new Error(result.errors.map((issue) => issue.message).join('; '));\n};\n\nconst canonicalJson = (value: JsonValue): JsonValue => {\n if (Array.isArray(value)) return value.map(canonicalJson);\n const object = jsonObjectSchema.safeParse(value);\n if (!object.success) return value;\n return Object.fromEntries(\n Object.entries(object.data)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, item]) => [key, canonicalJson(item)]),\n );\n};\n\n// Compile a private tree for each validation. The interpreter never fetches\n// references or shares a schema registry, and retains no tool data between calls.\nconst validatorFor = (schema: AuthoredValue): SchemaNode => {\n const text = JSON.stringify(schema);\n if (text == null) throw new Error('Expected a JSON Schema object');\n const parsed = jsonObjectSchema.parse(canonicalJson(jsonObjectSchema.parse(JSON.parse(text))));\n checkDialect(parsed);\n const node = compileSchema(parsed, {\n drafts: validationDrafts,\n formatAssertion: true,\n throwOnInvalidRef: true,\n });\n if (node.schemaErrors != null && node.schemaErrors.length > 0)\n throw new Error(node.schemaErrors.map((issue) => issue.message).join('; '));\n // Check even unused declarations: an unresolved reference must fail publish,\n // rather than surviving until some input happens to select that branch.\n const nodes = new Set([node, ...Object.values(node.context.refs)]);\n for (const child of nodes) {\n checkDeclaration(child);\n const ref =\n fieldOf(child.schema, '$ref') ??\n fieldOf(child.schema, '$dynamicRef') ??\n fieldOf(child.schema, '$recursiveRef');\n if (ref == null) continue;\n const resolved = child.resolveRef();\n if (!isSchemaNode(resolved))\n throw new Error(`Unresolved JSON Schema reference ${String(ref)} at ${child.schemaLocation}`);\n }\n return node;\n};\n\nexport const jsonSchemaError = (schema: AuthoredValue, value: AuthoredValue): string | null => {\n const validator = validatorFor(schema);\n const parsed = jsonValueSchema.safeParse(value);\n if (!parsed.success) return 'Expected a JSON-compatible value';\n // JSON object order is immaterial, including inside enum assertions.\n const result = validator.validate(canonicalJson(parsed.data));\n return result.valid ? null : result.errors.map((issue) => issue.message).join('; ');\n};\n\nexport const jsonSchemaDeclarationError = (schema: AuthoredValue): string | null => {\n try {\n validatorFor(schema);\n return null;\n } catch (cause) {\n return cause instanceof Error ? cause.message : String(cause);\n }\n};\n\nexport const standardValidatorSchema = z.looseObject({\n '~standard': z.looseObject({\n version: z.literal(1),\n vendor: z.string(),\n validate: callableSchema,\n }),\n});\nconst validationResultSchema = z.looseObject({\n value: z.unknown().optional(),\n issues: z.array(z.looseObject({ message: z.string().optional() })).optional(),\n});\n\nexport const validateSchemaValue = async (args: {\n schema: AuthoredValue;\n value: AuthoredValue;\n what: string;\n}): Promise<AuthoredValue> => {\n if (args.schema == null) return args.value;\n const standard = standardValidatorSchema.safeParse(args.schema);\n if (standard.success) {\n // Zod's Standard Schema validator retries asynchronous transforms after a\n // synchronous attempt; its public async parser performs them only once.\n if (standard.data['~standard'].vendor === 'zod') {\n const parser = callableSchema.safeParse(fieldOf(args.schema, 'safeParseAsync'));\n if (parser.success) {\n const result = z\n .looseObject({\n success: z.boolean(),\n data: z.unknown().optional(),\n error: z.looseObject({ issues: z.array(z.object({ message: z.string() })) }).optional(),\n })\n .parse(await parser.data.call(args.schema, args.value));\n if (!result.success)\n throw new Error(\n `Invalid ${args.what}: ${result.error?.issues.map((issue) => issue.message).join('; ') ?? 'invalid'}`,\n );\n return result.data;\n }\n }\n const raw = await standard.data['~standard'].validate.call(\n fieldOf(args.schema, '~standard'),\n args.value,\n );\n const result = validationResultSchema.parse(raw);\n if (result.issues != null)\n throw new Error(\n `Invalid ${args.what}: ${result.issues.map((issue) => issue.message ?? 'invalid').join('; ') || 'invalid'}`,\n );\n if (!Object.hasOwn(result, 'value'))\n throw new Error(`Invalid ${args.what}: schema validator returned no value`);\n return result.value;\n }\n const error = jsonSchemaError(args.schema, args.value);\n if (error != null) throw new Error(`Invalid ${args.what}: ${error}`);\n return args.value;\n};\n\n// Published results have already been transformed. Never run their input\n// validator again: use the output JSON Schema for synchronous hook narrowing.\nexport const resultMatchesSchema = (schema: AuthoredValue, value: AuthoredValue): boolean => {\n if (schema == null) return true;\n try {\n const standard = standardValidatorSchema.safeParse(schema);\n if (!standard.success) return jsonSchemaError(schema, value) == null;\n const jsonSchemas = fieldOf(fieldOf(schema, '~standard'), 'jsonSchema');\n const converter = callableSchema.safeParse(fieldOf(jsonSchemas, SchemaIo.Output));\n if (!converter.success) return false;\n return (\n jsonSchemaError(converter.data.call(jsonSchemas, { target: 'draft-2020-12' }), value) == null\n );\n } catch {\n return false;\n }\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["SchemaIo", "result"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@finalai/agent-definition",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Provider-independent agent authoring, manifest schemas, directory compiler, and harness compatibility reports.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
"README.md",
|
|
11
11
|
"LICENSE",
|
|
12
12
|
"NOTICE",
|
|
13
|
+
"HOSTING.md",
|
|
13
14
|
"THIRD_PARTY_NOTICES.md"
|
|
14
15
|
],
|
|
15
16
|
"type": "module",
|
|
@@ -74,8 +75,8 @@
|
|
|
74
75
|
"registry": "https://registry.npmjs.org/"
|
|
75
76
|
},
|
|
76
77
|
"dependencies": {
|
|
77
|
-
"@finalai/agent-protocol": "0.1.
|
|
78
|
-
"@finalai/agent-provider": "0.1.
|
|
78
|
+
"@finalai/agent-protocol": "0.1.3",
|
|
79
|
+
"@finalai/agent-provider": "0.1.3",
|
|
79
80
|
"ajv": "^8.20.0",
|
|
80
81
|
"ajv-formats": "^3.0.1",
|
|
81
82
|
"croner": "^10.0.1",
|