@finalai/agent-definition 0.5.1 → 0.6.0
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 +4 -4
- package/THIRD_PARTY_NOTICES.md +1 -1
- package/dist/compiler-assets/{chunk-FU5VHNO4.ts → chunk-3R7MNW5L.ts} +1 -1
- package/dist/compiler-assets/{chunk-7KPWSOMK.ts → chunk-3SDZJK7K.ts} +1 -1
- package/dist/compiler-assets/{chunk-KTXTYIF4.ts → chunk-4A4EQHYK.ts} +57 -20
- package/dist/compiler-assets/{chunk-LZSLGWS7.ts → chunk-4MJF3ALN.ts} +5 -5
- package/dist/compiler-assets/{chunk-QVHDGZAN.ts → chunk-4T2URCJZ.ts} +2 -2
- package/dist/compiler-assets/{chunk-7MDGEPFT.ts → chunk-6K3WO73F.ts} +1 -1
- package/dist/compiler-assets/{chunk-KMBQVNAJ.ts → chunk-AMYJRTAC.ts} +3 -3
- package/dist/compiler-assets/{chunk-4T2XPIPH.ts → chunk-BHNF7BEJ.ts} +86 -17
- package/dist/compiler-assets/{chunk-U3MFLFVF.ts → chunk-CORCFNEY.ts} +3 -3
- package/dist/compiler-assets/{chunk-4ERFBLH7.ts → chunk-DRHDNSCQ.ts} +4 -4
- package/dist/compiler-assets/{chunk-O3JKMLDP.ts → chunk-EKR4AEM5.ts} +3 -3
- package/dist/compiler-assets/{chunk-MBX6PIN7.ts → chunk-FE7PIPSW.ts} +57 -10
- package/dist/compiler-assets/{chunk-YEKSPL76.ts → chunk-FFI2K5IJ.ts} +4 -4
- package/dist/compiler-assets/{chunk-36MVFRMA.ts → chunk-IZJMGIAH.ts} +2 -2
- package/dist/compiler-assets/{chunk-KTBNDKGJ.ts → chunk-JZTF36V2.ts} +2 -1
- package/dist/compiler-assets/{chunk-XJNO7EHQ.ts → chunk-KNYB36DW.ts} +2 -2
- package/dist/compiler-assets/{chunk-O2JWY454.ts → chunk-L7YJCQVB.ts} +4 -4
- package/dist/compiler-assets/{chunk-WJPAUIVM.ts → chunk-LGGJ6S3U.ts} +1 -1
- package/dist/compiler-assets/{chunk-BMX2HP6G.ts → chunk-LIRONA4O.ts} +6 -6
- package/dist/compiler-assets/{chunk-GIRUQ7QF.ts → chunk-MM4JCZSK.ts} +7 -7
- package/dist/compiler-assets/{chunk-VI5WBWUX.ts → chunk-MPZMRU56.ts} +4 -4
- package/dist/compiler-assets/chunk-PLQKTBKO.ts +27 -0
- package/dist/compiler-assets/{chunk-EAEQQT33.ts → chunk-Q26ZPNVB.ts} +25 -9
- package/dist/compiler-assets/{chunk-Z7HGOUC2.ts → chunk-RTC7AJBS.ts} +1 -1
- package/dist/compiler-assets/{chunk-OX46N5EP.ts → chunk-TCXQ4GLM.ts} +1 -1
- package/dist/compiler-assets/{chunk-R4IHPPTB.ts → chunk-UUQAHJRT.ts} +2 -2
- package/dist/compiler-assets/{chunk-KNFPKVUS.ts → chunk-XCX6VAK7.ts} +1 -1
- package/dist/compiler-assets/{chunk-OBFQTLWC.ts → chunk-Y73DOSSB.ts} +3 -3
- package/dist/compiler-assets/{chunk-VRW24MOJ.ts → chunk-YAO6DUQO.ts} +4 -4
- 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 -8
- package/dist/compiler-assets/src/authoring/connections.ts +11 -11
- package/dist/compiler-assets/src/authoring/credentials.ts +7 -7
- package/dist/compiler-assets/src/authoring/dynamic.ts +8 -8
- package/dist/compiler-assets/src/authoring/harness.ts +9 -9
- package/dist/compiler-assets/src/authoring/hooks.ts +10 -10
- package/dist/compiler-assets/src/authoring/index.ts +27 -26
- package/dist/compiler-assets/src/authoring/instructions.ts +9 -9
- package/dist/compiler-assets/src/authoring/sandbox.ts +11 -11
- 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 +9 -9
- package/dist/compiler-assets/src/compatibility.ts +6 -6
- package/dist/compiler-assets/src/hosted-bindings.ts +6 -6
- package/dist/compiler-assets/src/index.ts +28 -27
- package/dist/compiler-assets/src/manifest.ts +4 -4
- package/dist/compiler-assets/src/resolve.ts +5 -5
- package/dist/compiler-assets/src/runtime/bundle.ts +17 -18
- package/dist/compiler-assets/src/runtime/describe.ts +14 -14
- package/dist/compiler-assets/src/runtime/described.ts +28 -16
- package/dist/compiler-assets/src/runtime/isolate.ts +16 -17
- package/dist/compiler-assets/src/runtime/lower.ts +13 -13
- 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 +25 -1
- package/dist/modules/authoring/agent.mjs.map +2 -2
- package/dist/modules/authoring/brand.d.mts +1 -0
- package/dist/modules/authoring/brand.mjs +1 -0
- package/dist/modules/authoring/brand.mjs.map +2 -2
- package/dist/modules/authoring/channels.d.mts +13 -96
- package/dist/modules/authoring/channels.mjs +6 -52
- package/dist/modules/authoring/channels.mjs.map +3 -3
- package/dist/modules/authoring/index.d.mts +1 -1
- package/dist/modules/authoring/index.mjs +2 -0
- package/dist/modules/authoring/index.mjs.map +2 -2
- package/dist/modules/compiler/assemble.d.mts +0 -4
- package/dist/modules/compiler/assemble.mjs +55 -23
- package/dist/modules/compiler/assemble.mjs.map +2 -2
- package/dist/modules/compiler/bundle.mjs.map +1 -1
- package/dist/modules/compiler/index.d.mts +1 -4
- package/dist/modules/compiler/index.mjs +4 -3
- package/dist/modules/compiler/index.mjs.map +2 -2
- package/dist/modules/runtime/describe.mjs +49 -2
- package/dist/modules/runtime/describe.mjs.map +2 -2
- package/dist/modules/runtime/described.d.mts +94 -3
- package/dist/modules/runtime/described.mjs +14 -2
- package/dist/modules/runtime/described.mjs.map +2 -2
- package/dist/modules/runtime/isolate.d.mts +3 -2
- package/dist/modules/runtime/isolate.mjs +2 -0
- package/dist/modules/runtime/isolate.mjs.map +2 -2
- package/fixtures/release-scout/agent/channels/github.ts +2 -38
- package/fixtures/release-scout/agent/hooks/audit.ts +1 -1
- package/fixtures/release-scout/agent/instructions/org-context.ts +1 -1
- package/package.json +4 -4
- package/dist/compiler-assets/chunk-ISYIPH2T.ts +0 -120
- package/dist/compiler-assets/chunk-JRKGCYWA.ts +0 -87
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { HostedBindingsIface } from '@finalai/agent-provider';
|
|
2
|
-
import { DynamicEvent, ToolApproval, type ChannelReceiveResult, type ChannelSocketIface, type InputApprovalIface, type JsonObject, type JsonValue } from '@finalai/agent-provider';
|
|
2
|
+
import { DynamicEvent, ToolApproval, type RoomReceiveResult, type ChannelReceiveContextIface, type ChannelReceiveResult, type ChannelSocketIface, type InputApprovalIface, type JsonObject, type JsonValue } from '@finalai/agent-provider';
|
|
3
3
|
import { type DynamicResolveContextIface, type ToolContextIface } from "../authoring/context.mjs";
|
|
4
4
|
import type { DynamicBoundaryEventIface } from "../authoring/dynamic.mjs";
|
|
5
5
|
import { type HookContextIface, type HookDispatchEventIface } from "../authoring/hooks.mjs";
|
|
@@ -34,11 +34,12 @@ export interface ChannelRouteArgsIface {
|
|
|
34
34
|
export: string;
|
|
35
35
|
request: Request;
|
|
36
36
|
configuration?: JsonObject;
|
|
37
|
+
context?: ChannelReceiveContextIface;
|
|
37
38
|
path: string;
|
|
38
39
|
secrets: {
|
|
39
40
|
get(name: string): Promise<string | null>;
|
|
40
41
|
};
|
|
41
|
-
receive: (input: JsonValue) => Promise<ChannelReceiveResult>;
|
|
42
|
+
receive: (input: JsonValue) => Promise<RoomReceiveResult | ChannelReceiveResult>;
|
|
42
43
|
}
|
|
43
44
|
export interface ChannelSocketArgsIface extends ChannelRouteArgsIface {
|
|
44
45
|
socket: ChannelSocketIface;
|
|
@@ -419,6 +419,7 @@ const createIsolateRuntime = (modules) => {
|
|
|
419
419
|
);
|
|
420
420
|
if (route == null) return null;
|
|
421
421
|
const response = await route.handler({
|
|
422
|
+
...args.context,
|
|
422
423
|
request: args.request,
|
|
423
424
|
secrets: args.secrets,
|
|
424
425
|
receive: args.receive,
|
|
@@ -438,6 +439,7 @@ const createIsolateRuntime = (modules) => {
|
|
|
438
439
|
);
|
|
439
440
|
if (route == null) return null;
|
|
440
441
|
const response = await route.handler({
|
|
442
|
+
...args.context,
|
|
441
443
|
request: args.request,
|
|
442
444
|
secrets: args.secrets,
|
|
443
445
|
receive: args.receive
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/runtime/isolate.ts"],
|
|
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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",
|
|
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 RoomReceiveResult,\n type ChannelReceiveContextIface,\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 context?: ChannelReceiveContextIface;\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<RoomReceiveResult | 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 ...args.context,\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 ...args.context,\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,38 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import { verifyGithubSignature } from './github-signature';
|
|
4
|
-
|
|
5
|
-
const actionSchema = z.object({ action: z.string() });
|
|
6
|
-
const releaseEventSchema = actionSchema.extend({ release: z.object({ tag_name: z.string() }) });
|
|
7
|
-
|
|
8
|
-
export default defineChannel({
|
|
9
|
-
routes: [
|
|
10
|
-
POST('/webhook', async ({ request, secrets, receive }) => {
|
|
11
|
-
const body = await request.text();
|
|
12
|
-
if (
|
|
13
|
-
!(await verifyGithubSignature(request, body, await secrets.get('github-webhook-secret')))
|
|
14
|
-
) {
|
|
15
|
-
return new Response(null, { status: 401 });
|
|
16
|
-
}
|
|
17
|
-
let raw: unknown;
|
|
18
|
-
try {
|
|
19
|
-
raw = JSON.parse(body);
|
|
20
|
-
} catch {
|
|
21
|
-
return new Response(null, { status: 400 });
|
|
22
|
-
}
|
|
23
|
-
const action = actionSchema.safeParse(raw);
|
|
24
|
-
if (!action.success) return new Response(null, { status: 400 });
|
|
25
|
-
if (action.data.action !== 'published') return new Response(null, { status: 204 });
|
|
26
|
-
const parsed = releaseEventSchema.safeParse(raw);
|
|
27
|
-
if (!parsed.success) return new Response(null, { status: 400 });
|
|
28
|
-
await receive({
|
|
29
|
-
target: { kind: 'bound-conversation' },
|
|
30
|
-
content: [
|
|
31
|
-
{ type: 'text', text: `GitHub release published: ${parsed.data.release.tag_name}` },
|
|
32
|
-
],
|
|
33
|
-
});
|
|
34
|
-
return new Response(null, { status: 202 });
|
|
35
|
-
}),
|
|
36
|
-
],
|
|
37
|
-
turnPolicy: 'steer',
|
|
38
|
-
});
|
|
1
|
+
import { webhookChannel } from '@finalai/final-agent-provider/channels/webhook';
|
|
2
|
+
export default webhookChannel({ secret: 'github-webhook-secret' });
|
|
@@ -15,7 +15,7 @@ export default defineHook({
|
|
|
15
15
|
console.warn('release notes missing', { tag: event.data.rawInput['tag'] });
|
|
16
16
|
},
|
|
17
17
|
async '*'(event, ctx) {
|
|
18
|
-
await fetch('https://audit.
|
|
18
|
+
await fetch('https://audit.example.com/events', {
|
|
19
19
|
method: 'POST',
|
|
20
20
|
body: JSON.stringify({ id: event.meta.id, session: ctx.session.id, type: event.type }),
|
|
21
21
|
});
|
|
@@ -11,7 +11,7 @@ export default defineDynamic({
|
|
|
11
11
|
preview: 'Release calendar: 2.4.1 on 2026-10-10. On-call: @mina.',
|
|
12
12
|
events: {
|
|
13
13
|
'session.started': async (_event, ctx) => {
|
|
14
|
-
const url = new URL('https://ops.
|
|
14
|
+
const url = new URL('https://ops.example.com/calendar');
|
|
15
15
|
url.searchParams.set('org', ctx.session.organizationId);
|
|
16
16
|
const res = await fetch(url);
|
|
17
17
|
const text = await res.text();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@finalai/agent-definition",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Provider-independent agent authoring, manifest schemas, directory compiler, and harness compatibility reports.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -75,8 +75,8 @@
|
|
|
75
75
|
"registry": "https://registry.npmjs.org/"
|
|
76
76
|
},
|
|
77
77
|
"dependencies": {
|
|
78
|
-
"@finalai/agent-protocol": "0.
|
|
79
|
-
"@finalai/agent-provider": "0.
|
|
78
|
+
"@finalai/agent-protocol": "0.7.0",
|
|
79
|
+
"@finalai/agent-provider": "0.6.0",
|
|
80
80
|
"ajv": "^8.20.0",
|
|
81
81
|
"ajv-formats": "^3.0.1",
|
|
82
82
|
"croner": "^10.0.1",
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
"json-schema-library": "11.6.5",
|
|
85
85
|
"re2js": "2.8.6",
|
|
86
86
|
"yaml": "^2.8.3",
|
|
87
|
-
"zod": "4.6.
|
|
87
|
+
"zod": "4.6.6"
|
|
88
88
|
},
|
|
89
89
|
"engines": {
|
|
90
90
|
"node": ">=26"
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
jsonObjectSchema
|
|
3
|
-
} from "./chunk-FU5VHNO4.ts";
|
|
4
|
-
import {
|
|
5
|
-
stamp
|
|
6
|
-
} from "./chunk-KTBNDKGJ.ts";
|
|
7
|
-
import {
|
|
8
|
-
array,
|
|
9
|
-
object,
|
|
10
|
-
string
|
|
11
|
-
} from "./chunk-KTXTYIF4.ts";
|
|
12
|
-
|
|
13
|
-
// ../agent-provider/src/channel-context.ts
|
|
14
|
-
var channelInputReceiptSchema = object({
|
|
15
|
-
inputId: string().min(1),
|
|
16
|
-
sessionId: string().min(1)
|
|
17
|
-
});
|
|
18
|
-
var channelHandoffReceiptSchema = object({
|
|
19
|
-
inputId: string().min(1).nullable(),
|
|
20
|
-
sessionId: string().min(1).nullable()
|
|
21
|
-
});
|
|
22
|
-
var channelAccessors = (platform) => {
|
|
23
|
-
const operations = () => {
|
|
24
|
-
if (platform.channelSessions == null)
|
|
25
|
-
throw new Error("channel session operations are unavailable");
|
|
26
|
-
return platform.channelSessions;
|
|
27
|
-
};
|
|
28
|
-
const handle = (target) => ({
|
|
29
|
-
inspect: () => operations().inspect(target),
|
|
30
|
-
resolveSession: () => operations().resolve(target),
|
|
31
|
-
send: (input) => operations().send(target, input),
|
|
32
|
-
respond: (input) => operations().respond(target, input),
|
|
33
|
-
cancel: (input) => operations().cancel(target, input),
|
|
34
|
-
close: () => operations().close(target),
|
|
35
|
-
observe: (input) => operations().observe(target, input),
|
|
36
|
-
setConfigOption: (input) => operations().setConfigOption(target, input),
|
|
37
|
-
park: () => operations().park(target),
|
|
38
|
-
getState: () => operations().getState(target),
|
|
39
|
-
setState: (state) => operations().setState(target, state)
|
|
40
|
-
});
|
|
41
|
-
return {
|
|
42
|
-
from: (address) => handle({ address }),
|
|
43
|
-
resolveSession: (address) => operations().resolve({ address }),
|
|
44
|
-
attachSession: (sessionId) => handle({ sessionId }),
|
|
45
|
-
to: (channel, target) => ({ send: (input) => operations().handoff(channel, target, input) })
|
|
46
|
-
};
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
// ../agent-provider/src/semantic-events.ts
|
|
50
|
-
var channelMessageCompletedSchema = object({
|
|
51
|
-
message: object({ id: string(), content: array(jsonObjectSchema) }),
|
|
52
|
-
finishReason: string().nullable()
|
|
53
|
-
});
|
|
54
|
-
var channelTurnEventSchema = object({
|
|
55
|
-
turnId: string(),
|
|
56
|
-
stopReason: string().nullable().optional()
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
// src/authoring/channels.ts
|
|
60
|
-
var defineChannel = (definition) => {
|
|
61
|
-
const {
|
|
62
|
-
"message.delta": delta,
|
|
63
|
-
"message.completed": completed,
|
|
64
|
-
"turn.started": started,
|
|
65
|
-
"turn.completed": ended,
|
|
66
|
-
...raw
|
|
67
|
-
} = definition.events ?? {};
|
|
68
|
-
const events = { ...raw };
|
|
69
|
-
const wrap = (schema, handler) => handler == null ? void 0 : async (event, ctx) => handler(
|
|
70
|
-
schema.parse(event.data),
|
|
71
|
-
{ ...channelAccessors(ctx.platform), platform: ctx.platform },
|
|
72
|
-
{
|
|
73
|
-
sessionId: ctx.sessionId ?? null,
|
|
74
|
-
turnId: ctx.turn.id,
|
|
75
|
-
state: ctx.state,
|
|
76
|
-
config: ctx.config,
|
|
77
|
-
secrets: ctx.secrets
|
|
78
|
-
}
|
|
79
|
-
);
|
|
80
|
-
const semantic = {
|
|
81
|
-
"message.delta": wrap(object({ messageId: string(), delta: jsonObjectSchema }), delta),
|
|
82
|
-
"message.completed": wrap(channelMessageCompletedSchema, completed),
|
|
83
|
-
"turn.started": wrap(object({ turnId: string() }), started),
|
|
84
|
-
"turn.completed": wrap(
|
|
85
|
-
object({ turnId: string(), stopReason: string().nullable() }),
|
|
86
|
-
ended
|
|
87
|
-
)
|
|
88
|
-
};
|
|
89
|
-
for (const [kind, handler] of Object.entries(semantic))
|
|
90
|
-
if (handler != null) events[kind] = handler;
|
|
91
|
-
const { installed, configure, ...authored } = definition;
|
|
92
|
-
return stamp(
|
|
93
|
-
{ ...authored, configure: installed == null ? configure : void 0, events },
|
|
94
|
-
"channel" /* Channel */
|
|
95
|
-
);
|
|
96
|
-
};
|
|
97
|
-
var disableChannel = () => defineChannel({ disabled: true });
|
|
98
|
-
var route = (method) => (path, handler) => ({
|
|
99
|
-
method,
|
|
100
|
-
path,
|
|
101
|
-
handler
|
|
102
|
-
});
|
|
103
|
-
var GET = route("GET");
|
|
104
|
-
var POST = route("POST");
|
|
105
|
-
var PUT = route("PUT");
|
|
106
|
-
var DELETE = route("DELETE");
|
|
107
|
-
var WS = (path, handler) => ({ method: "WS", path, handler });
|
|
108
|
-
var defineProviderChannel = (definition) => stamp(definition, "channel" /* Channel */);
|
|
109
|
-
|
|
110
|
-
export {
|
|
111
|
-
channelAccessors,
|
|
112
|
-
defineChannel,
|
|
113
|
-
disableChannel,
|
|
114
|
-
GET,
|
|
115
|
-
POST,
|
|
116
|
-
PUT,
|
|
117
|
-
DELETE,
|
|
118
|
-
WS,
|
|
119
|
-
defineProviderChannel
|
|
120
|
-
};
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
jsonObjectSchema,
|
|
3
|
-
jsonValueSchema
|
|
4
|
-
} from "./chunk-FU5VHNO4.ts";
|
|
5
|
-
import {
|
|
6
|
-
_null,
|
|
7
|
-
array,
|
|
8
|
-
literal,
|
|
9
|
-
looseObject,
|
|
10
|
-
nativeEnum,
|
|
11
|
-
object,
|
|
12
|
-
string,
|
|
13
|
-
union
|
|
14
|
-
} from "./chunk-KTXTYIF4.ts";
|
|
15
|
-
|
|
16
|
-
// ../agent-provider/src/channel.ts
|
|
17
|
-
var ChannelPrincipalType = /* @__PURE__ */ ((ChannelPrincipalType2) => {
|
|
18
|
-
ChannelPrincipalType2["User"] = "user";
|
|
19
|
-
ChannelPrincipalType2["Service"] = "service";
|
|
20
|
-
return ChannelPrincipalType2;
|
|
21
|
-
})(ChannelPrincipalType || {});
|
|
22
|
-
var channelAuthSchema = object({
|
|
23
|
-
principalId: string().min(1),
|
|
24
|
-
principalType: nativeEnum(ChannelPrincipalType),
|
|
25
|
-
authenticator: string().min(1),
|
|
26
|
-
// How the agent and the people reading its reply name the principal.
|
|
27
|
-
displayName: string().min(1).max(200).optional(),
|
|
28
|
-
attributes: jsonObjectSchema.default({})
|
|
29
|
-
});
|
|
30
|
-
var ConversationKind = /* @__PURE__ */ ((ConversationKind2) => {
|
|
31
|
-
ConversationKind2["Direct"] = "direct";
|
|
32
|
-
ConversationKind2["Group"] = "group";
|
|
33
|
-
return ConversationKind2;
|
|
34
|
-
})(ConversationKind || {});
|
|
35
|
-
var ParticipantKind = /* @__PURE__ */ ((ParticipantKind2) => {
|
|
36
|
-
ParticipantKind2["User"] = "user";
|
|
37
|
-
ParticipantKind2["Agent"] = "agent";
|
|
38
|
-
return ParticipantKind2;
|
|
39
|
-
})(ParticipantKind || {});
|
|
40
|
-
var MessageKind = /* @__PURE__ */ ((MessageKind2) => {
|
|
41
|
-
MessageKind2["Message"] = "message";
|
|
42
|
-
MessageKind2["Card"] = "card";
|
|
43
|
-
return MessageKind2;
|
|
44
|
-
})(MessageKind || {});
|
|
45
|
-
var channelReceiveResultSchema = union([
|
|
46
|
-
object({ conversationId: string().min(1) }),
|
|
47
|
-
object({ sessionId: string().min(1) }),
|
|
48
|
-
_null()
|
|
49
|
-
]);
|
|
50
|
-
var channelMessageInputSchema = object({
|
|
51
|
-
conversationId: string().min(1),
|
|
52
|
-
authorParticipantId: string().min(1),
|
|
53
|
-
kind: nativeEnum(MessageKind).default("message" /* Message */),
|
|
54
|
-
content: array(jsonObjectSchema).min(1),
|
|
55
|
-
clientMessageId: string().min(1).nullish(),
|
|
56
|
-
replyToMessageId: string().min(1).nullish(),
|
|
57
|
-
threadRootId: string().min(1).nullish(),
|
|
58
|
-
quotedMessageIds: array(string().min(1)).default([]),
|
|
59
|
-
mentionedParticipantIds: array(string().min(1)).default([])
|
|
60
|
-
});
|
|
61
|
-
var DecisionKind = /* @__PURE__ */ ((DecisionKind2) => {
|
|
62
|
-
DecisionKind2["Permission"] = "permission";
|
|
63
|
-
DecisionKind2["Elicitation"] = "elicitation";
|
|
64
|
-
return DecisionKind2;
|
|
65
|
-
})(DecisionKind || {});
|
|
66
|
-
var decisionCreatedDataSchema = object({
|
|
67
|
-
decisionId: string().min(1),
|
|
68
|
-
kind: nativeEnum(DecisionKind),
|
|
69
|
-
audienceParticipantIds: array(string()),
|
|
70
|
-
request: jsonValueSchema
|
|
71
|
-
});
|
|
72
|
-
var decisionResolvedDataSchema = object({
|
|
73
|
-
decisionId: string().min(1),
|
|
74
|
-
outcome: jsonValueSchema,
|
|
75
|
-
respondedBy: channelAuthSchema.nullable().default(null)
|
|
76
|
-
});
|
|
77
|
-
var turnEndSchema = looseObject({
|
|
78
|
-
sessionUpdate: literal("state_update"),
|
|
79
|
-
state: literal("idle"),
|
|
80
|
-
stopReason: string().nullish(),
|
|
81
|
-
_meta: looseObject({ "final.ai": looseObject({ stopReason: string().nullish() }).nullish() }).nullish()
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
export {
|
|
85
|
-
ConversationKind,
|
|
86
|
-
ParticipantKind
|
|
87
|
-
};
|