@finalai/agent-definition 0.1.2 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/HOSTING.md +234 -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-7VSSVZM4.ts → chunk-4A66SVBJ.ts} +4 -4
- 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-5NTKRRMC.ts} +112 -21
- package/dist/compiler-assets/{chunk-2CZRHOLL.ts → chunk-7XUPKRZU.ts} +1 -1
- package/dist/compiler-assets/{chunk-OWC6SFFF.ts → chunk-APU2VKLW.ts} +52 -12
- package/dist/compiler-assets/{chunk-HFS4KLEL.ts → chunk-D3SB4CCB.ts} +1 -1
- package/dist/compiler-assets/{chunk-HNPUTP35.ts → chunk-GCFSHHH2.ts} +2 -2
- 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-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-PFLSBTJA.ts +39 -0
- package/dist/compiler-assets/{chunk-XHKPWT3G.ts → chunk-QJ26GEUM.ts} +1 -1
- package/dist/compiler-assets/{chunk-JPY4L2UJ.ts → chunk-RIEMTCTV.ts} +12 -8
- package/dist/compiler-assets/chunk-RMIQJHSL.ts +0 -0
- package/dist/compiler-assets/chunk-TJ536HI4.ts +61 -0
- 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-MZMSKIKU.ts → chunk-UBR53WBH.ts} +33 -8
- package/dist/compiler-assets/chunk-ULI5WWRR.ts +40 -0
- package/dist/compiler-assets/chunk-W6DOJA4W.ts +3763 -0
- package/dist/compiler-assets/{chunk-EVQIK62B.ts → chunk-YW7HDGQA.ts} +11 -7
- package/dist/compiler-assets/{chunk-BLB6JGLO.ts → chunk-YWFGIPHD.ts} +27 -24
- package/dist/compiler-assets/{chunk-QMKWAFVZ.ts → chunk-Z5TO7RSJ.ts} +5 -3
- 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 +54 -41
- package/dist/compiler-assets/src/manifest.ts +8 -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 +19 -12
- 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/agent.d.mts +3 -2
- package/dist/modules/authoring/agent.mjs.map +2 -2
- package/dist/modules/authoring/connections.d.mts +15 -2
- 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/harness.mjs +2 -0
- package/dist/modules/authoring/harness.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 +6 -1
- 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/manifest.d.mts +2 -2
- package/dist/modules/manifest.mjs +4 -0
- package/dist/modules/manifest.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 +25 -4
- package/dist/modules/runtime/describe.mjs.map +2 -2
- package/dist/modules/runtime/described.d.mts +40 -4
- package/dist/modules/runtime/described.mjs +7 -2
- 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/lower.mjs +76 -14
- package/dist/modules/runtime/lower.mjs.map +2 -2
- package/dist/modules/runtime/schema-validation.mjs +19 -2
- package/dist/modules/runtime/schema-validation.mjs.map +2 -2
- package/fixtures/assistant/agent/agent.ts +7 -0
- 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,3 +1,4 @@
|
|
|
1
|
+
import type { HostedBindingsIface } from '@finalai/agent-provider';
|
|
1
2
|
import { DynamicEvent, ToolApproval, type ChannelReceiveResult, type ChannelSocketIface, type InputApprovalIface, type JsonObject, type JsonValue } from '@finalai/agent-provider';
|
|
2
3
|
import { type DynamicResolveContextIface, type ToolContextIface } from "../authoring/context.mjs";
|
|
3
4
|
import type { DynamicBoundaryEventIface } from "../authoring/dynamic.mjs";
|
|
@@ -45,6 +46,7 @@ export interface ChannelSocketArgsIface extends ChannelRouteArgsIface {
|
|
|
45
46
|
export interface IsolateRuntimeIface {
|
|
46
47
|
evaluateApproval(args: {
|
|
47
48
|
reference: InputApprovalIface;
|
|
49
|
+
bindings?: HostedBindingsIface;
|
|
48
50
|
input: AuthoredValue;
|
|
49
51
|
secrets: {
|
|
50
52
|
get(name: string): Promise<string | null>;
|
|
@@ -289,18 +289,20 @@ const createIsolateRuntime = (modules) => {
|
|
|
289
289
|
session: boundary.session,
|
|
290
290
|
messages: boundary.messages,
|
|
291
291
|
channel: boundary.channel,
|
|
292
|
-
secrets: args.secrets
|
|
292
|
+
secrets: args.secrets,
|
|
293
|
+
bindings: args.bindings
|
|
293
294
|
});
|
|
294
295
|
const expected = args.kind === InputApprovalKind.Tool ? AuthoredKind.Tool : AuthoredKind.Connection;
|
|
295
296
|
return authoredKindOf(result) === expected ? result : fieldOf(result, boundary.name);
|
|
296
297
|
};
|
|
297
298
|
return {
|
|
298
|
-
evaluateApproval: async ({ reference, input, secrets }) => {
|
|
299
|
+
evaluateApproval: async ({ reference, input, secrets, bindings }) => {
|
|
299
300
|
const value = await resolveAuthored({
|
|
300
301
|
exportName: reference.export,
|
|
301
302
|
dynamic: reference.dynamic,
|
|
302
303
|
kind: reference.kind,
|
|
303
|
-
secrets
|
|
304
|
+
secrets,
|
|
305
|
+
bindings
|
|
304
306
|
});
|
|
305
307
|
let policy;
|
|
306
308
|
let validated = input;
|
|
@@ -328,7 +330,8 @@ const createIsolateRuntime = (modules) => {
|
|
|
328
330
|
exportName: args.export,
|
|
329
331
|
dynamic: args.dynamic,
|
|
330
332
|
kind: InputApprovalKind.Tool,
|
|
331
|
-
secrets: args.ctx.secrets
|
|
333
|
+
secrets: args.ctx.secrets,
|
|
334
|
+
bindings: args.ctx.bindings
|
|
332
335
|
});
|
|
333
336
|
if (args.dynamic != null)
|
|
334
337
|
registerToolName(value, dynamicToolBoundarySchema.parse(args.dynamic).name);
|
|
@@ -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
|
}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
InputApprovalKind,
|
|
3
3
|
InstructionRole,
|
|
4
|
+
isToolDenied,
|
|
4
5
|
McpServerBindingKind,
|
|
5
|
-
ToolApproval
|
|
6
|
+
ToolApproval,
|
|
7
|
+
TOOL_PATTERN_WILDCARD,
|
|
8
|
+
toolAnnotationSelectorSchema,
|
|
9
|
+
toolPatternMatches
|
|
6
10
|
} from "@finalai/agent-provider";
|
|
7
11
|
import * as z from "zod";
|
|
8
12
|
import { lowerApproval } from "../authoring/approval.mjs";
|
|
@@ -223,9 +227,10 @@ const authoredConnectionSchema = z.looseObject({
|
|
|
223
227
|
approval: optionalValueSchema,
|
|
224
228
|
toolCall: optionalValueSchema,
|
|
225
229
|
tools: z.looseObject({
|
|
226
|
-
allow: z.array(z.
|
|
227
|
-
deny: z.array(z.
|
|
228
|
-
approval: authoredRecordSchema.optional()
|
|
230
|
+
allow: z.array(z.unknown()).optional(),
|
|
231
|
+
deny: z.array(z.unknown()).optional(),
|
|
232
|
+
approval: authoredRecordSchema.optional(),
|
|
233
|
+
load: z.array(z.string()).optional()
|
|
229
234
|
}).optional()
|
|
230
235
|
});
|
|
231
236
|
const connectionAuthSchema = z.union([
|
|
@@ -250,6 +255,25 @@ const lowerAuth = (value, path, issues) => {
|
|
|
250
255
|
);
|
|
251
256
|
return null;
|
|
252
257
|
};
|
|
258
|
+
const splitToolEntries = (args) => {
|
|
259
|
+
const names = [];
|
|
260
|
+
const selectors = [];
|
|
261
|
+
for (const entry of args.entries) {
|
|
262
|
+
if (isString(entry)) {
|
|
263
|
+
names.push(entry);
|
|
264
|
+
continue;
|
|
265
|
+
}
|
|
266
|
+
const parsed = toolAnnotationSelectorSchema.safeParse(entry);
|
|
267
|
+
if (parsed.success) selectors.push(parsed.data);
|
|
268
|
+
else
|
|
269
|
+
args.issues.push(
|
|
270
|
+
error(
|
|
271
|
+
`${args.label} entries must be tool names, * patterns, or annotation selectors such as { readOnlyHint: true }`
|
|
272
|
+
)
|
|
273
|
+
);
|
|
274
|
+
}
|
|
275
|
+
return { names, selectors };
|
|
276
|
+
};
|
|
253
277
|
const lowerConnection = (args) => {
|
|
254
278
|
const issues = [];
|
|
255
279
|
const path = `connection ${args.key}`;
|
|
@@ -288,12 +312,29 @@ const lowerConnection = (args) => {
|
|
|
288
312
|
const overrides = Object.fromEntries(overrideEntries);
|
|
289
313
|
const inputApprovals = Object.fromEntries(inputApprovalEntries);
|
|
290
314
|
for (const key of staticOverrideKeys) delete inputApprovals[key];
|
|
291
|
-
const defaultPolicy = overrides[
|
|
292
|
-
const
|
|
315
|
+
const defaultPolicy = overrides[TOOL_PATTERN_WILDCARD] ?? defaultApproval.policy;
|
|
316
|
+
const allowEntries = tools?.allow == null ? null : splitToolEntries({ entries: tools.allow, label: `${path} tools.allow`, issues });
|
|
317
|
+
const allow = allowEntries?.names ?? null;
|
|
318
|
+
const allowSelectors = allowEntries?.selectors ?? [];
|
|
319
|
+
const denyEntries = splitToolEntries({
|
|
320
|
+
entries: tools?.deny ?? [],
|
|
321
|
+
label: `${path} tools.deny`,
|
|
322
|
+
issues
|
|
323
|
+
});
|
|
324
|
+
const deny = denyEntries.names;
|
|
325
|
+
const authoredEntries = {
|
|
326
|
+
allow: allow ?? [],
|
|
327
|
+
deny,
|
|
328
|
+
approval: Object.keys(overrides)
|
|
329
|
+
};
|
|
330
|
+
for (const [field, entries] of Object.entries(authoredEntries)) {
|
|
331
|
+
if (entries.some((entry) => entry.trim().length === 0))
|
|
332
|
+
issues.push(error(`${path} tools.${field} entries must be tool names or * patterns`));
|
|
333
|
+
}
|
|
334
|
+
const inherited = Object.hasOwn(inputApprovals, "*") ? inputApprovals["*"] : void 0;
|
|
293
335
|
let approvals = null;
|
|
294
336
|
if (allow != null) {
|
|
295
337
|
approvals = Object.fromEntries(allow.map((tool) => [tool, overrides[tool] ?? defaultPolicy]));
|
|
296
|
-
const inherited = Object.hasOwn(inputApprovals, "*") ? inputApprovals["*"] : void 0;
|
|
297
338
|
if (inherited != null) {
|
|
298
339
|
for (const tool of allow) {
|
|
299
340
|
if (!Object.hasOwn(overrides, tool))
|
|
@@ -306,20 +347,33 @@ const lowerConnection = (args) => {
|
|
|
306
347
|
}
|
|
307
348
|
}
|
|
308
349
|
for (const tool of Object.keys(overrides)) {
|
|
309
|
-
if (
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
350
|
+
if (tool === TOOL_PATTERN_WILDCARD || allow.includes(tool)) continue;
|
|
351
|
+
if (allow.some((pattern) => toolPatternMatches(pattern, tool))) {
|
|
352
|
+
approvals[tool] = overrides[tool] ?? defaultPolicy;
|
|
353
|
+
continue;
|
|
313
354
|
}
|
|
355
|
+
issues.push(
|
|
356
|
+
warning(
|
|
357
|
+
allowSelectors.length > 0 ? `${path} sets an approval for ${tool}, which tools.allow does not name; approvals apply only to named tools` : `${path} sets an approval for ${tool}, which tools.allow does not expose`
|
|
358
|
+
)
|
|
359
|
+
);
|
|
314
360
|
}
|
|
315
361
|
} else if (defaultApproval.policy === ToolApproval.Ask || Object.keys(overrides).length > 0) {
|
|
316
362
|
approvals = { "*": defaultApproval.policy, ...overrides };
|
|
317
363
|
}
|
|
318
|
-
const
|
|
319
|
-
|
|
320
|
-
if (Object.hasOwn(overrides, tool))
|
|
364
|
+
for (const tool of Object.keys(overrides)) {
|
|
365
|
+
if (tool !== TOOL_PATTERN_WILDCARD && isToolDenied(deny, tool))
|
|
321
366
|
issues.push(warning(`${path} sets an approval for ${tool}, which tools.deny hides`));
|
|
322
367
|
}
|
|
368
|
+
const load = tools?.load ?? null;
|
|
369
|
+
if (load?.some((tool) => tool.trim().length === 0) === true)
|
|
370
|
+
issues.push(error(`${path} tools.load entries must be tool names or * patterns`));
|
|
371
|
+
for (const tool of load ?? []) {
|
|
372
|
+
if (isToolDenied(deny, tool))
|
|
373
|
+
issues.push(warning(`${path} loads ${tool}, which tools.deny hides`));
|
|
374
|
+
else if (allow != null && allowSelectors.length === 0 && !allow.some((pattern) => toolPatternMatches(pattern, tool)))
|
|
375
|
+
issues.push(warning(`${path} loads ${tool}, which tools.allow does not expose`));
|
|
376
|
+
}
|
|
323
377
|
if (connection?.toolCall != null)
|
|
324
378
|
issues.push(error(`${path} uses toolCall.providedArguments, which is not supported`));
|
|
325
379
|
const binding = {
|
|
@@ -331,6 +385,14 @@ const lowerConnection = (args) => {
|
|
|
331
385
|
approvals
|
|
332
386
|
};
|
|
333
387
|
if (deny.length > 0) binding.deny = [...new Set(deny)];
|
|
388
|
+
if (load != null) binding.load = [...new Set(load)];
|
|
389
|
+
if (allowSelectors.length > 0)
|
|
390
|
+
binding.allowAnnotations = allowSelectors.map((match) => ({
|
|
391
|
+
match,
|
|
392
|
+
approval: defaultPolicy,
|
|
393
|
+
...inherited == null ? {} : { inputApproval: inherited }
|
|
394
|
+
}));
|
|
395
|
+
if (denyEntries.selectors.length > 0) binding.denyAnnotations = denyEntries.selectors;
|
|
334
396
|
if (Object.keys(inputApprovals).length > 0) binding.inputApprovals = inputApprovals;
|
|
335
397
|
return { binding, issues };
|
|
336
398
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/runtime/lower.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n InputApprovalKind,\n InstructionRole,\n McpServerBindingKind,\n ToolApproval,\n type HttpMcpServerBindingIface,\n type InputApprovalIface,\n type InstructionFragmentIface,\n type JsonObject,\n type JsonValue,\n type SkillBundleIface,\n type ToolDescriptorIface,\n} from '@finalai/agent-provider';\nimport * as z from 'zod';\nimport { lowerApproval } from \"../authoring/approval.mjs\";\nimport {\n AuthoredKind,\n authoredKindOf,\n pendingExportName,\n pendingIndexOf,\n} from \"../authoring/brand.mjs\";\nimport { toolLabelSchema } from \"../authoring/tools.mjs\";\nimport { jsonSchemaDeclarationError, SchemaIo } from \"./schema-validation.mjs\";\nimport {\n authoredRecordSchema,\n authoredValueSchema,\n callableSchema,\n entriesOf,\n fieldOf,\n isBoolean,\n isCallable,\n isNumber,\n isObjectLike,\n isPlainObject,\n isString,\n messageOf,\n optionalValueSchema,\n type AuthoredValue,\n} from \"./values.mjs\";\n\n// Lowering of authored values to manifest JSON. Runs inside the realm that\n// evaluated the authored modules (the compiler's vm context, or the agent's\n// Worker isolate for dynamic resolver outputs), so it never crosses realms\n// with live values.\n\nexport enum IssueSeverity {\n Error = 'error',\n Warning = 'warning',\n Note = 'note',\n}\n\nexport interface IssueIface {\n severity: IssueSeverity;\n message: string;\n}\n\nexport const error = (message: string): IssueIface => ({ severity: IssueSeverity.Error, message });\nexport const warning = (message: string): IssueIface => ({\n severity: IssueSeverity.Warning,\n message,\n});\nexport const note = (message: string): IssueIface => ({ severity: IssueSeverity.Note, message });\n\nexport const childPath = (parent: string, key: string | number): string => {\n if (isNumber(key)) return `${parent}[${key}]`;\n return parent.length === 0 ? key : `${parent}.${key}`;\n};\n\nexport interface ToJsonOptionsIface {\n path: string;\n issues: IssueIface[];\n // Replaces an authored value (a dynamic sentinel) with its manifest form;\n // return undefined to fall back to the default conversion.\n visit?: (value: AuthoredValue, path: string) => JsonValue | undefined;\n}\n\nconst PENDING_PLACEHOLDER = /^<pending:\\d+>$/;\n\nconst label = (path: string): string => (path.length === 0 ? 'value' : path);\n\n// Plain JSON conversion with diagnostics for values JSON cannot hold.\nexport const toJson = (value: AuthoredValue, options: ToJsonOptionsIface): JsonValue => {\n const visited = options.visit?.(value, options.path);\n if (visited !== undefined) return visited;\n if (value == null) return null;\n if (isString(value)) {\n const index = PENDING_PLACEHOLDER.test(value) ? pendingIndexOf(value) : null;\n return index == null ? value : pendingExportName(index);\n }\n if (isNumber(value)) {\n if (Number.isFinite(value)) return value;\n options.issues.push(error(`${label(options.path)} is not a finite number`));\n return null;\n }\n if (isBoolean(value)) return value;\n if (Array.isArray(value)) {\n return value.map((item, index) =>\n toJson(item, { ...options, path: childPath(options.path, index) }),\n );\n }\n if (isCallable(value)) {\n options.issues.push(\n error(`${label(options.path)} is a function; only static values can appear here`),\n );\n return null;\n }\n if (isPlainObject(value) || authoredKindOf(value) != null) {\n const out: JsonObject = {};\n for (const [key, item] of entriesOf(value)) {\n if (item === undefined) continue;\n out[key] = toJson(item, { ...options, path: childPath(options.path, key) });\n }\n return out;\n }\n options.issues.push(\n error(`${label(options.path)} is not JSON (${Object.prototype.toString.call(value)})`),\n );\n return null;\n};\n\nconst jsonSchemaObjectSchema = z.record(z.string(), authoredValueSchema);\n\nconst standardJsonSchemaSchema = z.looseObject({\n '~standard': z.looseObject({\n jsonSchema: z\n .looseObject({ input: callableSchema, output: callableSchema.optional() })\n .optional(),\n }),\n});\n\nconst isZodSchema = (value: AuthoredValue): value is z.ZodType => value instanceof z.ZodType;\n\n// Tool input/output schemas: Standard JSON Schema (zod 4 and others), a zod\n// schema, or a JSON Schema document.\nexport const toJsonSchema = (args: {\n schema: AuthoredValue;\n path: string;\n issues: IssueIface[];\n io?: SchemaIo;\n}): JsonObject | null => {\n const { schema, path, issues } = args;\n const io = args.io ?? SchemaIo.Input;\n const standard = standardJsonSchemaSchema.safeParse(schema);\n const jsonSchema = fieldOf(fieldOf(schema, '~standard'), 'jsonSchema');\n let converted: AuthoredValue = null;\n if (standard.success && standard.data['~standard'].jsonSchema != null) {\n try {\n const convert = standard.data['~standard'].jsonSchema[io];\n if (convert == null) throw new Error(`Standard JSON Schema has no ${io} converter`);\n converted = convert.call(jsonSchema, {\n target: 'draft-2020-12',\n });\n } catch (cause) {\n issues.push(error(`${path} could not be converted to JSON Schema: ${messageOf(cause)}`));\n return null;\n }\n } else if (isZodSchema(schema)) {\n converted = z.toJSONSchema(schema, { io });\n } else if (standard.success) {\n issues.push(\n error(\n `${path} is a Standard Schema without JSON Schema support; use zod 4 or a JSON Schema object`,\n ),\n );\n return null;\n } else if (isPlainObject(schema)) {\n converted = schema;\n } else {\n issues.push(error(`${path} must be a zod schema or a JSON Schema object`));\n return null;\n }\n const json = toJson(converted, { path, issues });\n if (\n json == null ||\n Array.isArray(json) ||\n !jsonSchemaObjectSchema.safeParse(json).success ||\n !isPlainObject(json)\n ) {\n issues.push(error(`${path} did not produce a JSON Schema object`));\n return null;\n }\n const out: JsonObject = {};\n for (const [key, item] of Object.entries(json)) {\n if (key !== '$schema' || (!standard.success && !isZodSchema(schema))) out[key] = item;\n }\n const declarationError = jsonSchemaDeclarationError(out);\n if (declarationError != null) {\n issues.push(error(`${path} is an invalid JSON Schema: ${declarationError}`));\n return null;\n }\n return out;\n};\n\nconst authoredToolSchema = z.looseObject({\n description: optionalValueSchema,\n execute: optionalValueSchema,\n inputSchema: optionalValueSchema,\n outputSchema: optionalValueSchema,\n endsTurn: optionalValueSchema,\n approval: optionalValueSchema,\n label: optionalValueSchema,\n annotations: z\n .looseObject({\n title: z.string().optional(),\n readOnlyHint: z.boolean().optional(),\n destructiveHint: z.boolean().optional(),\n idempotentHint: z.boolean().optional(),\n openWorldHint: z.boolean().optional(),\n })\n .optional()\n .catch(undefined),\n});\n\nexport interface LoweredToolIface {\n descriptor: ToolDescriptorIface;\n approval: ToolApproval;\n issues: IssueIface[];\n}\n\nexport const lowerTool = (args: {\n name: string;\n exportName: string;\n value: AuthoredValue;\n}): LoweredToolIface => {\n const issues: IssueIface[] = [];\n const path = `tool ${args.name}`;\n const parsed = authoredToolSchema.safeParse(args.value);\n if (!parsed.success) {\n issues.push(error(`${path} must be defineTool({ description, inputSchema, execute })`));\n return {\n descriptor: {\n name: args.name,\n description: '',\n inputSchema: { type: 'object' },\n export: args.exportName,\n },\n approval: ToolApproval.Ask,\n issues,\n };\n }\n const tool = parsed.data;\n const description = isString(tool.description) ? tool.description : '';\n if (description.length === 0) issues.push(error(`${path} needs a description`));\n if (!isCallable(tool.execute)) issues.push(error(`${path} needs an execute function`));\n const inputSchema = toJsonSchema({\n schema: tool.inputSchema,\n path: `${path} inputSchema`,\n issues,\n }) ?? {\n type: 'object',\n };\n if (tool.endsTurn != null && tool.endsTurn !== false) {\n issues.push(\n error(`${path} sets endsTurn; it is not supported because the harness owns the loop`),\n );\n }\n const approval = lowerApproval(tool.approval);\n if (approval.error != null) issues.push(error(`${path}: ${approval.error}`));\n if (approval.note != null) issues.push(note(`${path}: ${approval.note}`));\n const descriptor: ToolDescriptorIface = {\n name: args.name,\n description,\n inputSchema,\n export: args.exportName,\n };\n if (approval.inputDependent)\n descriptor.inputApproval = { kind: InputApprovalKind.Tool, export: args.exportName };\n if (tool.outputSchema != null) {\n const outputSchema = toJsonSchema({\n schema: tool.outputSchema,\n path: `${path} outputSchema`,\n issues,\n io: SchemaIo.Output,\n });\n if (outputSchema != null) descriptor.outputSchema = outputSchema;\n }\n const annotations: NonNullable<ToolDescriptorIface['annotations']> = { ...tool.annotations };\n if (tool.label != null && !toolLabelSchema.safeParse(tool.label).success)\n issues.push(error(`${path} label must be text or { start, delta?, complete? } callbacks`));\n if (isString(tool.label)) annotations.title = tool.label;\n if (Object.keys(annotations).length > 0) descriptor.annotations = annotations;\n return { descriptor, approval: approval.policy, issues };\n};\n\nconst authoredConnectionSchema = z.looseObject({\n url: optionalValueSchema,\n auth: optionalValueSchema,\n headers: optionalValueSchema,\n approval: optionalValueSchema,\n toolCall: optionalValueSchema,\n tools: z\n .looseObject({\n allow: z.array(z.string()).optional(),\n deny: z.array(z.string()).optional(),\n approval: authoredRecordSchema.optional(),\n })\n .optional(),\n});\n\nconst connectionAuthSchema = z.union([\n z\n .object({ kind: z.literal('final-session') })\n .transform(() => ({ kind: 'final-session' as const })),\n z\n .looseObject({ secretKey: z.string().min(1), headerName: z.string().nullish() })\n .transform((auth) => ({ secretKey: auth.secretKey, headerName: auth.headerName ?? null })),\n]);\n\nexport interface LoweredConnectionIface {\n binding: HttpMcpServerBindingIface;\n issues: IssueIface[];\n}\n\nconst stringRecord = (\n value: AuthoredValue,\n path: string,\n issues: IssueIface[],\n): Record<string, string> => {\n if (value == null) return {};\n const parsed = z.record(z.string(), z.string()).safeParse(value);\n if (parsed.success) return parsed.data;\n issues.push(error(`${path} must be a record of strings (header callbacks are not supported)`));\n return {};\n};\n\nconst lowerAuth = (\n value: AuthoredValue,\n path: string,\n issues: IssueIface[],\n): HttpMcpServerBindingIface['auth'] => {\n if (value == null) return null;\n const parsed = connectionAuthSchema.safeParse(value);\n if (parsed.success) return parsed.data;\n issues.push(\n error(\n `${path} must be { secretKey, headerName } or { kind: 'final-session' }; auth providers and callbacks are not supported`,\n ),\n );\n return null;\n};\n\nexport const lowerConnection = (args: {\n key: string;\n exportName: string;\n value: AuthoredValue;\n}): LoweredConnectionIface => {\n const issues: IssueIface[] = [];\n const path = `connection ${args.key}`;\n const parsed = authoredConnectionSchema.safeParse(args.value);\n const connection = parsed.success ? parsed.data : null;\n if (connection == null)\n issues.push(error(`${path} must be defineMcpClientConnection({ url, ... })`));\n const url = isString(connection?.url) ? connection.url : null;\n if (url == null || !z.url().safeParse(url).success)\n issues.push(error(`${path} needs a valid url`));\n const tools = connection?.tools;\n const defaultApproval = lowerApproval(connection?.approval);\n if (defaultApproval.error != null) issues.push(error(`${path}: ${defaultApproval.error}`));\n if (defaultApproval.note != null) issues.push(note(`${path}: ${defaultApproval.note}`));\n const overrideEntries: [string, ToolApproval][] = [];\n const inputApprovalEntries: [string, InputApprovalIface][] = [];\n const staticOverrideKeys: string[] = [];\n if (defaultApproval.inputDependent)\n inputApprovalEntries.push([\n '*',\n { kind: InputApprovalKind.Connection, export: args.exportName },\n ]);\n for (const [tool, approval] of Object.entries(tools?.approval ?? {})) {\n const lowered = lowerApproval(approval);\n if (lowered.error != null)\n issues.push(error(`${path} tools.approval.${tool}: ${lowered.error}`));\n if (lowered.note != null) issues.push(note(`${path} tools.approval.${tool}: ${lowered.note}`));\n overrideEntries.push([tool, lowered.policy]);\n if (lowered.inputDependent)\n inputApprovalEntries.push([\n tool,\n { kind: InputApprovalKind.Connection, export: args.exportName, policyKey: tool },\n ]);\n else staticOverrideKeys.push(tool);\n }\n const overrides = Object.fromEntries(overrideEntries);\n const inputApprovals = Object.fromEntries(inputApprovalEntries);\n for (const key of staticOverrideKeys) delete inputApprovals[key];\n const defaultPolicy = overrides['*'] ?? defaultApproval.policy;\n const allow = tools?.allow ?? null;\n let approvals: Record<string, ToolApproval> | null = null;\n if (allow != null) {\n approvals = Object.fromEntries(allow.map((tool) => [tool, overrides[tool] ?? defaultPolicy]));\n const inherited = Object.hasOwn(inputApprovals, '*') ? inputApprovals['*'] : undefined;\n if (inherited != null) {\n for (const tool of allow) {\n if (!Object.hasOwn(overrides, tool))\n Object.defineProperty(inputApprovals, tool, {\n value: inherited,\n enumerable: true,\n configurable: true,\n writable: true,\n });\n }\n }\n for (const tool of Object.keys(overrides)) {\n if (!allow.includes(tool)) {\n issues.push(\n warning(`${path} sets an approval for ${tool}, which tools.allow does not expose`),\n );\n }\n }\n } else if (defaultApproval.policy === ToolApproval.Ask || Object.keys(overrides).length > 0) {\n // '*' applies to every listed tool without its own entry.\n approvals = { '*': defaultApproval.policy, ...overrides };\n }\n const deny = tools?.deny ?? [];\n for (const tool of deny) {\n if (Object.hasOwn(overrides, tool))\n issues.push(warning(`${path} sets an approval for ${tool}, which tools.deny hides`));\n }\n if (connection?.toolCall != null)\n issues.push(error(`${path} uses toolCall.providedArguments, which is not supported`));\n const binding: HttpMcpServerBindingIface = {\n key: args.key,\n kind: McpServerBindingKind.Http,\n url: url ?? 'https://invalid.invalid',\n auth: lowerAuth(connection?.auth, `${path} auth`, issues),\n headers: stringRecord(connection?.headers, `${path} headers`, issues),\n approvals,\n };\n if (deny.length > 0) binding.deny = [...new Set(deny)];\n if (Object.keys(inputApprovals).length > 0) binding.inputApprovals = inputApprovals;\n return { binding, issues };\n};\n\nexport const skillMarkdown = (args: {\n key: string;\n description: string;\n markdown: string;\n}): string =>\n args.markdown.startsWith('---\\n')\n ? args.markdown\n : `---\\nname: ${JSON.stringify(args.key)}\\ndescription: ${JSON.stringify(args.description)}\\n---\\n\\n${args.markdown}`;\n\nconst authoredSkillSchema = z.looseObject({\n description: optionalValueSchema,\n markdown: optionalValueSchema,\n files: authoredRecordSchema.optional().catch(undefined),\n});\n\nexport interface LoweredSkillIface {\n skill: SkillBundleIface;\n issues: IssueIface[];\n}\n\nexport const lowerSkill = (args: { key: string; value: AuthoredValue }): LoweredSkillIface => {\n const issues: IssueIface[] = [];\n const parsed = authoredSkillSchema.safeParse(args.value);\n const description =\n parsed.success && isString(parsed.data.description) ? parsed.data.description : null;\n const markdown = parsed.success && isString(parsed.data.markdown) ? parsed.data.markdown : null;\n if (description == null || description.length === 0)\n issues.push(error(`skill ${args.key} needs a description`));\n if (markdown == null) issues.push(error(`skill ${args.key} needs markdown`));\n const files: SkillBundleIface['files'] = [\n {\n path: 'SKILL.md',\n content: skillMarkdown({\n key: args.key,\n description: description ?? '',\n markdown: markdown ?? '',\n }),\n },\n ];\n for (const [path, content] of Object.entries(\n (parsed.success ? parsed.data.files : undefined) ?? {},\n )) {\n if (path.startsWith('/') || path.split(/[\\\\/]/).includes('..')) {\n issues.push(error(`skill ${args.key} file ${path} must stay inside the skill directory`));\n } else if (!isString(content)) {\n issues.push(warning(`skill ${args.key} file ${path} is binary and was left out`));\n } else if (path !== 'SKILL.md') files.push({ path, content });\n }\n const skill: SkillBundleIface = { key: args.key, files };\n if (description != null) skill.description = description;\n return { skill, issues };\n};\n\nconst authoredInstructionsSchema = z.looseObject({\n content: z.string(),\n role: z.string().optional(),\n});\n\nexport const lowerInstructions = (\n value: AuthoredValue,\n source: string | null,\n): InstructionFragmentIface | null => {\n const parsed = authoredInstructionsSchema.safeParse(value);\n if (!parsed.success) return null;\n const fragment: InstructionFragmentIface = {\n role: parsed.data.role === InstructionRole.User ? InstructionRole.User : InstructionRole.System,\n content: parsed.data.content,\n };\n if (source != null) fragment.source = source;\n return fragment;\n};\n\nexport interface LoweredEnvironmentIface {\n providerName: string;\n providerRef: JsonValue | null;\n options: JsonValue;\n openOptions: JsonValue | null;\n}\n\nconst environmentSchema = z.looseObject({\n providerName: z.string(),\n providerRef: optionalValueSchema,\n options: optionalValueSchema,\n open: callableSchema,\n});\n\nconst openRequestSchema = z.looseObject({\n providerName: z.string(),\n providerRef: optionalValueSchema,\n environmentOptions: optionalValueSchema,\n openOptions: optionalValueSchema,\n});\n\nconst sandboxProviderSchema = z.looseObject({\n name: z.string(),\n environment: callableSchema,\n definition: z.looseObject({}),\n});\n\nexport const isEnvironmentLike = (value: AuthoredValue): boolean =>\n environmentSchema.safeParse(value).success;\n\nexport const isOpenRequestLike = (value: AuthoredValue): boolean =>\n openRequestSchema.safeParse(value).success &&\n isObjectLike(value) &&\n 'environmentOptions' in value;\n\nexport const sandboxProviderNameOf = (value: AuthoredValue): string | null => {\n const parsed = sandboxProviderSchema.safeParse(value);\n return parsed.success ? parsed.data.name : null;\n};\n\nexport const lowerEnvironment = (\n value: AuthoredValue,\n path: string,\n issues: IssueIface[],\n): LoweredEnvironmentIface | null => {\n const warnings = z.array(z.string()).safeParse(fieldOf(value, 'authoringWarnings'));\n if (warnings.success)\n for (const message of warnings.data) issues.push(warning(`${path}: ${message}`));\n const request = isOpenRequestLike(value) ? openRequestSchema.safeParse(value) : null;\n if (request?.success === true) {\n return {\n providerName: request.data.providerName,\n providerRef:\n request.data.providerRef == null\n ? null\n : toJson(request.data.providerRef, { path, issues }),\n options: toJson(request.data.environmentOptions ?? {}, { path: `${path} options`, issues }),\n openOptions: toJson(request.data.openOptions ?? null, {\n path: `${path} open options`,\n issues,\n }),\n };\n }\n const environment = environmentSchema.safeParse(value);\n if (!environment.success) return null;\n return {\n providerName: environment.data.providerName,\n providerRef:\n environment.data.providerRef == null\n ? null\n : toJson(environment.data.providerRef, { path, issues }),\n options: toJson(environment.data.options ?? {}, { path: `${path} options`, issues }),\n openOptions: null,\n };\n};\n\nexport const isDynamicSentinel = (value: AuthoredValue): boolean =>\n authoredKindOf(value) === AuthoredKind.Dynamic;\n\nexport const dynamicEventsOf = (value: AuthoredValue): string[] =>\n entriesOf(fieldOf(value, 'events'))\n .filter(([, handler]) => isCallable(handler))\n .map(([event]) => event);\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import {\n InputApprovalKind,\n InstructionRole,\n isToolDenied,\n McpServerBindingKind,\n ToolApproval,\n TOOL_PATTERN_WILDCARD,\n toolAnnotationSelectorSchema,\n toolPatternMatches,\n type HttpMcpServerBindingIface,\n type InputApprovalIface,\n type InstructionFragmentIface,\n type JsonObject,\n type JsonValue,\n type SkillBundleIface,\n type ToolAnnotationSelectorIface,\n type ToolDescriptorIface,\n} from '@finalai/agent-provider';\nimport * as z from 'zod';\nimport { lowerApproval } from \"../authoring/approval.mjs\";\nimport {\n AuthoredKind,\n authoredKindOf,\n pendingExportName,\n pendingIndexOf,\n} from \"../authoring/brand.mjs\";\nimport { toolLabelSchema } from \"../authoring/tools.mjs\";\nimport { jsonSchemaDeclarationError, SchemaIo } from \"./schema-validation.mjs\";\nimport {\n authoredRecordSchema,\n authoredValueSchema,\n callableSchema,\n entriesOf,\n fieldOf,\n isBoolean,\n isCallable,\n isNumber,\n isObjectLike,\n isPlainObject,\n isString,\n messageOf,\n optionalValueSchema,\n type AuthoredValue,\n} from \"./values.mjs\";\n\n// Lowering of authored values to manifest JSON. Runs inside the realm that\n// evaluated the authored modules (the compiler's vm context, or the agent's\n// Worker isolate for dynamic resolver outputs), so it never crosses realms\n// with live values.\n\nexport enum IssueSeverity {\n Error = 'error',\n Warning = 'warning',\n Note = 'note',\n}\n\nexport interface IssueIface {\n severity: IssueSeverity;\n message: string;\n}\n\nexport const error = (message: string): IssueIface => ({ severity: IssueSeverity.Error, message });\nexport const warning = (message: string): IssueIface => ({\n severity: IssueSeverity.Warning,\n message,\n});\nexport const note = (message: string): IssueIface => ({ severity: IssueSeverity.Note, message });\n\nexport const childPath = (parent: string, key: string | number): string => {\n if (isNumber(key)) return `${parent}[${key}]`;\n return parent.length === 0 ? key : `${parent}.${key}`;\n};\n\nexport interface ToJsonOptionsIface {\n path: string;\n issues: IssueIface[];\n // Replaces an authored value (a dynamic sentinel) with its manifest form;\n // return undefined to fall back to the default conversion.\n visit?: (value: AuthoredValue, path: string) => JsonValue | undefined;\n}\n\nconst PENDING_PLACEHOLDER = /^<pending:\\d+>$/;\n\nconst label = (path: string): string => (path.length === 0 ? 'value' : path);\n\n// Plain JSON conversion with diagnostics for values JSON cannot hold.\nexport const toJson = (value: AuthoredValue, options: ToJsonOptionsIface): JsonValue => {\n const visited = options.visit?.(value, options.path);\n if (visited !== undefined) return visited;\n if (value == null) return null;\n if (isString(value)) {\n const index = PENDING_PLACEHOLDER.test(value) ? pendingIndexOf(value) : null;\n return index == null ? value : pendingExportName(index);\n }\n if (isNumber(value)) {\n if (Number.isFinite(value)) return value;\n options.issues.push(error(`${label(options.path)} is not a finite number`));\n return null;\n }\n if (isBoolean(value)) return value;\n if (Array.isArray(value)) {\n return value.map((item, index) =>\n toJson(item, { ...options, path: childPath(options.path, index) }),\n );\n }\n if (isCallable(value)) {\n options.issues.push(\n error(`${label(options.path)} is a function; only static values can appear here`),\n );\n return null;\n }\n if (isPlainObject(value) || authoredKindOf(value) != null) {\n const out: JsonObject = {};\n for (const [key, item] of entriesOf(value)) {\n if (item === undefined) continue;\n out[key] = toJson(item, { ...options, path: childPath(options.path, key) });\n }\n return out;\n }\n options.issues.push(\n error(`${label(options.path)} is not JSON (${Object.prototype.toString.call(value)})`),\n );\n return null;\n};\n\nconst jsonSchemaObjectSchema = z.record(z.string(), authoredValueSchema);\n\nconst standardJsonSchemaSchema = z.looseObject({\n '~standard': z.looseObject({\n jsonSchema: z\n .looseObject({ input: callableSchema, output: callableSchema.optional() })\n .optional(),\n }),\n});\n\nconst isZodSchema = (value: AuthoredValue): value is z.ZodType => value instanceof z.ZodType;\n\n// Tool input/output schemas: Standard JSON Schema (zod 4 and others), a zod\n// schema, or a JSON Schema document.\nexport const toJsonSchema = (args: {\n schema: AuthoredValue;\n path: string;\n issues: IssueIface[];\n io?: SchemaIo;\n}): JsonObject | null => {\n const { schema, path, issues } = args;\n const io = args.io ?? SchemaIo.Input;\n const standard = standardJsonSchemaSchema.safeParse(schema);\n const jsonSchema = fieldOf(fieldOf(schema, '~standard'), 'jsonSchema');\n let converted: AuthoredValue = null;\n if (standard.success && standard.data['~standard'].jsonSchema != null) {\n try {\n const convert = standard.data['~standard'].jsonSchema[io];\n if (convert == null) throw new Error(`Standard JSON Schema has no ${io} converter`);\n converted = convert.call(jsonSchema, {\n target: 'draft-2020-12',\n });\n } catch (cause) {\n issues.push(error(`${path} could not be converted to JSON Schema: ${messageOf(cause)}`));\n return null;\n }\n } else if (isZodSchema(schema)) {\n converted = z.toJSONSchema(schema, { io });\n } else if (standard.success) {\n issues.push(\n error(\n `${path} is a Standard Schema without JSON Schema support; use zod 4 or a JSON Schema object`,\n ),\n );\n return null;\n } else if (isPlainObject(schema)) {\n converted = schema;\n } else {\n issues.push(error(`${path} must be a zod schema or a JSON Schema object`));\n return null;\n }\n const json = toJson(converted, { path, issues });\n if (\n json == null ||\n Array.isArray(json) ||\n !jsonSchemaObjectSchema.safeParse(json).success ||\n !isPlainObject(json)\n ) {\n issues.push(error(`${path} did not produce a JSON Schema object`));\n return null;\n }\n const out: JsonObject = {};\n for (const [key, item] of Object.entries(json)) {\n if (key !== '$schema' || (!standard.success && !isZodSchema(schema))) out[key] = item;\n }\n const declarationError = jsonSchemaDeclarationError(out);\n if (declarationError != null) {\n issues.push(error(`${path} is an invalid JSON Schema: ${declarationError}`));\n return null;\n }\n return out;\n};\n\nconst authoredToolSchema = z.looseObject({\n description: optionalValueSchema,\n execute: optionalValueSchema,\n inputSchema: optionalValueSchema,\n outputSchema: optionalValueSchema,\n endsTurn: optionalValueSchema,\n approval: optionalValueSchema,\n label: optionalValueSchema,\n annotations: z\n .looseObject({\n title: z.string().optional(),\n readOnlyHint: z.boolean().optional(),\n destructiveHint: z.boolean().optional(),\n idempotentHint: z.boolean().optional(),\n openWorldHint: z.boolean().optional(),\n })\n .optional()\n .catch(undefined),\n});\n\nexport interface LoweredToolIface {\n descriptor: ToolDescriptorIface;\n approval: ToolApproval;\n issues: IssueIface[];\n}\n\nexport const lowerTool = (args: {\n name: string;\n exportName: string;\n value: AuthoredValue;\n}): LoweredToolIface => {\n const issues: IssueIface[] = [];\n const path = `tool ${args.name}`;\n const parsed = authoredToolSchema.safeParse(args.value);\n if (!parsed.success) {\n issues.push(error(`${path} must be defineTool({ description, inputSchema, execute })`));\n return {\n descriptor: {\n name: args.name,\n description: '',\n inputSchema: { type: 'object' },\n export: args.exportName,\n },\n approval: ToolApproval.Ask,\n issues,\n };\n }\n const tool = parsed.data;\n const description = isString(tool.description) ? tool.description : '';\n if (description.length === 0) issues.push(error(`${path} needs a description`));\n if (!isCallable(tool.execute)) issues.push(error(`${path} needs an execute function`));\n const inputSchema = toJsonSchema({\n schema: tool.inputSchema,\n path: `${path} inputSchema`,\n issues,\n }) ?? {\n type: 'object',\n };\n if (tool.endsTurn != null && tool.endsTurn !== false) {\n issues.push(\n error(`${path} sets endsTurn; it is not supported because the harness owns the loop`),\n );\n }\n const approval = lowerApproval(tool.approval);\n if (approval.error != null) issues.push(error(`${path}: ${approval.error}`));\n if (approval.note != null) issues.push(note(`${path}: ${approval.note}`));\n const descriptor: ToolDescriptorIface = {\n name: args.name,\n description,\n inputSchema,\n export: args.exportName,\n };\n if (approval.inputDependent)\n descriptor.inputApproval = { kind: InputApprovalKind.Tool, export: args.exportName };\n if (tool.outputSchema != null) {\n const outputSchema = toJsonSchema({\n schema: tool.outputSchema,\n path: `${path} outputSchema`,\n issues,\n io: SchemaIo.Output,\n });\n if (outputSchema != null) descriptor.outputSchema = outputSchema;\n }\n const annotations: NonNullable<ToolDescriptorIface['annotations']> = { ...tool.annotations };\n if (tool.label != null && !toolLabelSchema.safeParse(tool.label).success)\n issues.push(error(`${path} label must be text or { start, delta?, complete? } callbacks`));\n if (isString(tool.label)) annotations.title = tool.label;\n if (Object.keys(annotations).length > 0) descriptor.annotations = annotations;\n return { descriptor, approval: approval.policy, issues };\n};\n\nconst authoredConnectionSchema = z.looseObject({\n url: optionalValueSchema,\n auth: optionalValueSchema,\n headers: optionalValueSchema,\n approval: optionalValueSchema,\n toolCall: optionalValueSchema,\n tools: z\n .looseObject({\n allow: z.array(z.unknown()).optional(),\n deny: z.array(z.unknown()).optional(),\n approval: authoredRecordSchema.optional(),\n load: z.array(z.string()).optional(),\n })\n .optional(),\n});\n\nconst connectionAuthSchema = z.union([\n z\n .object({ kind: z.literal('final-session') })\n .transform(() => ({ kind: 'final-session' as const })),\n z\n .looseObject({ secretKey: z.string().min(1), headerName: z.string().nullish() })\n .transform((auth) => ({ secretKey: auth.secretKey, headerName: auth.headerName ?? null })),\n]);\n\nexport interface LoweredConnectionIface {\n binding: HttpMcpServerBindingIface;\n issues: IssueIface[];\n}\n\nconst stringRecord = (\n value: AuthoredValue,\n path: string,\n issues: IssueIface[],\n): Record<string, string> => {\n if (value == null) return {};\n const parsed = z.record(z.string(), z.string()).safeParse(value);\n if (parsed.success) return parsed.data;\n issues.push(error(`${path} must be a record of strings (header callbacks are not supported)`));\n return {};\n};\n\nconst lowerAuth = (\n value: AuthoredValue,\n path: string,\n issues: IssueIface[],\n): HttpMcpServerBindingIface['auth'] => {\n if (value == null) return null;\n const parsed = connectionAuthSchema.safeParse(value);\n if (parsed.success) return parsed.data;\n issues.push(\n error(\n `${path} must be { secretKey, headerName } or { kind: 'final-session' }; auth providers and callbacks are not supported`,\n ),\n );\n return null;\n};\n\ninterface ToolEntriesIface {\n names: string[];\n selectors: ToolAnnotationSelectorIface[];\n}\n\n// `tools.allow` and `tools.deny` entries: tool names, or MCP annotation selectors.\nconst splitToolEntries = (args: {\n entries: readonly unknown[];\n label: string;\n issues: IssueIface[];\n}): ToolEntriesIface => {\n const names: string[] = [];\n const selectors: ToolAnnotationSelectorIface[] = [];\n for (const entry of args.entries) {\n if (isString(entry)) {\n names.push(entry);\n continue;\n }\n const parsed = toolAnnotationSelectorSchema.safeParse(entry);\n if (parsed.success) selectors.push(parsed.data);\n else\n args.issues.push(\n error(\n `${args.label} entries must be tool names, * patterns, or annotation selectors such as { readOnlyHint: true }`,\n ),\n );\n }\n return { names, selectors };\n};\n\nexport const lowerConnection = (args: {\n key: string;\n exportName: string;\n value: AuthoredValue;\n}): LoweredConnectionIface => {\n const issues: IssueIface[] = [];\n const path = `connection ${args.key}`;\n const parsed = authoredConnectionSchema.safeParse(args.value);\n const connection = parsed.success ? parsed.data : null;\n if (connection == null)\n issues.push(error(`${path} must be defineMcpClientConnection({ url, ... })`));\n const url = isString(connection?.url) ? connection.url : null;\n if (url == null || !z.url().safeParse(url).success)\n issues.push(error(`${path} needs a valid url`));\n const tools = connection?.tools;\n const defaultApproval = lowerApproval(connection?.approval);\n if (defaultApproval.error != null) issues.push(error(`${path}: ${defaultApproval.error}`));\n if (defaultApproval.note != null) issues.push(note(`${path}: ${defaultApproval.note}`));\n const overrideEntries: [string, ToolApproval][] = [];\n const inputApprovalEntries: [string, InputApprovalIface][] = [];\n const staticOverrideKeys: string[] = [];\n if (defaultApproval.inputDependent)\n inputApprovalEntries.push([\n '*',\n { kind: InputApprovalKind.Connection, export: args.exportName },\n ]);\n for (const [tool, approval] of Object.entries(tools?.approval ?? {})) {\n const lowered = lowerApproval(approval);\n if (lowered.error != null)\n issues.push(error(`${path} tools.approval.${tool}: ${lowered.error}`));\n if (lowered.note != null) issues.push(note(`${path} tools.approval.${tool}: ${lowered.note}`));\n overrideEntries.push([tool, lowered.policy]);\n if (lowered.inputDependent)\n inputApprovalEntries.push([\n tool,\n { kind: InputApprovalKind.Connection, export: args.exportName, policyKey: tool },\n ]);\n else staticOverrideKeys.push(tool);\n }\n const overrides = Object.fromEntries(overrideEntries);\n const inputApprovals = Object.fromEntries(inputApprovalEntries);\n for (const key of staticOverrideKeys) delete inputApprovals[key];\n const defaultPolicy = overrides[TOOL_PATTERN_WILDCARD] ?? defaultApproval.policy;\n const allowEntries =\n tools?.allow == null\n ? null\n : splitToolEntries({ entries: tools.allow, label: `${path} tools.allow`, issues });\n const allow = allowEntries?.names ?? null;\n const allowSelectors = allowEntries?.selectors ?? [];\n const denyEntries = splitToolEntries({\n entries: tools?.deny ?? [],\n label: `${path} tools.deny`,\n issues,\n });\n const deny = denyEntries.names;\n const authoredEntries: Record<string, readonly string[]> = {\n allow: allow ?? [],\n deny,\n approval: Object.keys(overrides),\n };\n for (const [field, entries] of Object.entries(authoredEntries)) {\n if (entries.some((entry) => entry.trim().length === 0))\n issues.push(error(`${path} tools.${field} entries must be tool names or * patterns`));\n }\n const inherited = Object.hasOwn(inputApprovals, '*') ? inputApprovals['*'] : undefined;\n let approvals: Record<string, ToolApproval> | null = null;\n if (allow != null) {\n approvals = Object.fromEntries(allow.map((tool) => [tool, overrides[tool] ?? defaultPolicy]));\n if (inherited != null) {\n for (const tool of allow) {\n if (!Object.hasOwn(overrides, tool))\n Object.defineProperty(inputApprovals, tool, {\n value: inherited,\n enumerable: true,\n configurable: true,\n writable: true,\n });\n }\n }\n // A narrower approval inside an allow pattern (`github.delete_*` under\n // `github.*`) keeps its own key; the most specific key governs a tool.\n // `*` is the connection default here, already folded into each entry.\n for (const tool of Object.keys(overrides)) {\n if (tool === TOOL_PATTERN_WILDCARD || allow.includes(tool)) continue;\n if (allow.some((pattern) => toolPatternMatches(pattern, tool))) {\n approvals[tool] = overrides[tool] ?? defaultPolicy;\n continue;\n }\n issues.push(\n warning(\n allowSelectors.length > 0\n ? `${path} sets an approval for ${tool}, which tools.allow does not name; approvals apply only to named tools`\n : `${path} sets an approval for ${tool}, which tools.allow does not expose`,\n ),\n );\n }\n } else if (defaultApproval.policy === ToolApproval.Ask || Object.keys(overrides).length > 0) {\n // '*' applies to every listed tool without its own entry.\n approvals = { '*': defaultApproval.policy, ...overrides };\n }\n for (const tool of Object.keys(overrides)) {\n if (tool !== TOOL_PATTERN_WILDCARD && isToolDenied(deny, tool))\n issues.push(warning(`${path} sets an approval for ${tool}, which tools.deny hides`));\n }\n const load = tools?.load ?? null;\n if (load?.some((tool) => tool.trim().length === 0) === true)\n issues.push(error(`${path} tools.load entries must be tool names or * patterns`));\n for (const tool of load ?? []) {\n if (isToolDenied(deny, tool))\n issues.push(warning(`${path} loads ${tool}, which tools.deny hides`));\n // A tool an annotation selector exposes cannot be checked by name here.\n else if (\n allow != null &&\n allowSelectors.length === 0 &&\n !allow.some((pattern) => toolPatternMatches(pattern, tool))\n )\n issues.push(warning(`${path} loads ${tool}, which tools.allow does not expose`));\n }\n if (connection?.toolCall != null)\n issues.push(error(`${path} uses toolCall.providedArguments, which is not supported`));\n const binding: HttpMcpServerBindingIface = {\n key: args.key,\n kind: McpServerBindingKind.Http,\n url: url ?? 'https://invalid.invalid',\n auth: lowerAuth(connection?.auth, `${path} auth`, issues),\n headers: stringRecord(connection?.headers, `${path} headers`, issues),\n approvals,\n };\n if (deny.length > 0) binding.deny = [...new Set(deny)];\n if (load != null) binding.load = [...new Set(load)];\n // Annotation-selected tools run under the connection default, as unnamed tools do.\n if (allowSelectors.length > 0)\n binding.allowAnnotations = allowSelectors.map((match) => ({\n match,\n approval: defaultPolicy,\n ...(inherited == null ? {} : { inputApproval: inherited }),\n }));\n if (denyEntries.selectors.length > 0) binding.denyAnnotations = denyEntries.selectors;\n if (Object.keys(inputApprovals).length > 0) binding.inputApprovals = inputApprovals;\n return { binding, issues };\n};\n\nexport const skillMarkdown = (args: {\n key: string;\n description: string;\n markdown: string;\n}): string =>\n args.markdown.startsWith('---\\n')\n ? args.markdown\n : `---\\nname: ${JSON.stringify(args.key)}\\ndescription: ${JSON.stringify(args.description)}\\n---\\n\\n${args.markdown}`;\n\nconst authoredSkillSchema = z.looseObject({\n description: optionalValueSchema,\n markdown: optionalValueSchema,\n files: authoredRecordSchema.optional().catch(undefined),\n});\n\nexport interface LoweredSkillIface {\n skill: SkillBundleIface;\n issues: IssueIface[];\n}\n\nexport const lowerSkill = (args: { key: string; value: AuthoredValue }): LoweredSkillIface => {\n const issues: IssueIface[] = [];\n const parsed = authoredSkillSchema.safeParse(args.value);\n const description =\n parsed.success && isString(parsed.data.description) ? parsed.data.description : null;\n const markdown = parsed.success && isString(parsed.data.markdown) ? parsed.data.markdown : null;\n if (description == null || description.length === 0)\n issues.push(error(`skill ${args.key} needs a description`));\n if (markdown == null) issues.push(error(`skill ${args.key} needs markdown`));\n const files: SkillBundleIface['files'] = [\n {\n path: 'SKILL.md',\n content: skillMarkdown({\n key: args.key,\n description: description ?? '',\n markdown: markdown ?? '',\n }),\n },\n ];\n for (const [path, content] of Object.entries(\n (parsed.success ? parsed.data.files : undefined) ?? {},\n )) {\n if (path.startsWith('/') || path.split(/[\\\\/]/).includes('..')) {\n issues.push(error(`skill ${args.key} file ${path} must stay inside the skill directory`));\n } else if (!isString(content)) {\n issues.push(warning(`skill ${args.key} file ${path} is binary and was left out`));\n } else if (path !== 'SKILL.md') files.push({ path, content });\n }\n const skill: SkillBundleIface = { key: args.key, files };\n if (description != null) skill.description = description;\n return { skill, issues };\n};\n\nconst authoredInstructionsSchema = z.looseObject({\n content: z.string(),\n role: z.string().optional(),\n});\n\nexport const lowerInstructions = (\n value: AuthoredValue,\n source: string | null,\n): InstructionFragmentIface | null => {\n const parsed = authoredInstructionsSchema.safeParse(value);\n if (!parsed.success) return null;\n const fragment: InstructionFragmentIface = {\n role: parsed.data.role === InstructionRole.User ? InstructionRole.User : InstructionRole.System,\n content: parsed.data.content,\n };\n if (source != null) fragment.source = source;\n return fragment;\n};\n\nexport interface LoweredEnvironmentIface {\n providerName: string;\n providerRef: JsonValue | null;\n options: JsonValue;\n openOptions: JsonValue | null;\n}\n\nconst environmentSchema = z.looseObject({\n providerName: z.string(),\n providerRef: optionalValueSchema,\n options: optionalValueSchema,\n open: callableSchema,\n});\n\nconst openRequestSchema = z.looseObject({\n providerName: z.string(),\n providerRef: optionalValueSchema,\n environmentOptions: optionalValueSchema,\n openOptions: optionalValueSchema,\n});\n\nconst sandboxProviderSchema = z.looseObject({\n name: z.string(),\n environment: callableSchema,\n definition: z.looseObject({}),\n});\n\nexport const isEnvironmentLike = (value: AuthoredValue): boolean =>\n environmentSchema.safeParse(value).success;\n\nexport const isOpenRequestLike = (value: AuthoredValue): boolean =>\n openRequestSchema.safeParse(value).success &&\n isObjectLike(value) &&\n 'environmentOptions' in value;\n\nexport const sandboxProviderNameOf = (value: AuthoredValue): string | null => {\n const parsed = sandboxProviderSchema.safeParse(value);\n return parsed.success ? parsed.data.name : null;\n};\n\nexport const lowerEnvironment = (\n value: AuthoredValue,\n path: string,\n issues: IssueIface[],\n): LoweredEnvironmentIface | null => {\n const warnings = z.array(z.string()).safeParse(fieldOf(value, 'authoringWarnings'));\n if (warnings.success)\n for (const message of warnings.data) issues.push(warning(`${path}: ${message}`));\n const request = isOpenRequestLike(value) ? openRequestSchema.safeParse(value) : null;\n if (request?.success === true) {\n return {\n providerName: request.data.providerName,\n providerRef:\n request.data.providerRef == null\n ? null\n : toJson(request.data.providerRef, { path, issues }),\n options: toJson(request.data.environmentOptions ?? {}, { path: `${path} options`, issues }),\n openOptions: toJson(request.data.openOptions ?? null, {\n path: `${path} open options`,\n issues,\n }),\n };\n }\n const environment = environmentSchema.safeParse(value);\n if (!environment.success) return null;\n return {\n providerName: environment.data.providerName,\n providerRef:\n environment.data.providerRef == null\n ? null\n : toJson(environment.data.providerRef, { path, issues }),\n options: toJson(environment.data.options ?? {}, { path: `${path} options`, issues }),\n openOptions: null,\n };\n};\n\nexport const isDynamicSentinel = (value: AuthoredValue): boolean =>\n authoredKindOf(value) === AuthoredKind.Dynamic;\n\nexport const dynamicEventsOf = (value: AuthoredValue): string[] =>\n entriesOf(fieldOf(value, 'events'))\n .filter(([, handler]) => isCallable(handler))\n .map(([event]) => event);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["IssueSeverity"]
|
|
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)]);
|