@finalai/final-agent-provider 0.10.1 → 0.12.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 +334 -245
- package/README.md +125 -46
- package/WORKSPACE-EGRESS.md +11 -11
- package/dist/modules/catalog.d.mts +9 -0
- package/dist/modules/catalog.mjs +21 -0
- package/dist/modules/catalog.mjs.map +7 -0
- package/dist/modules/harnesses/acp-agent.d.mts +4 -0
- package/dist/modules/harnesses/acp-agent.mjs +35 -0
- package/dist/modules/harnesses/acp-agent.mjs.map +7 -0
- package/dist/modules/harnesses/adapters.d.mts +7 -0
- package/dist/modules/harnesses/adapters.mjs +74 -0
- package/dist/modules/harnesses/adapters.mjs.map +7 -0
- package/dist/modules/harnesses/claude-code.d.mts +14 -0
- package/dist/modules/harnesses/claude-code.mjs +79 -0
- package/dist/modules/harnesses/claude-code.mjs.map +7 -0
- package/dist/modules/harnesses/codex.d.mts +12 -0
- package/dist/modules/harnesses/codex.mjs +90 -0
- package/dist/modules/harnesses/codex.mjs.map +7 -0
- package/dist/modules/harnesses/config-fields.d.mts +98 -57
- package/dist/modules/harnesses/config-fields.mjs +58 -35
- package/dist/modules/harnesses/config-fields.mjs.map +3 -3
- package/dist/modules/harnesses/definitions.d.mts +3 -0
- package/dist/modules/harnesses/definitions.mjs +21 -0
- package/dist/modules/harnesses/definitions.mjs.map +7 -0
- package/dist/modules/harnesses/fidelity.d.mts +1 -1
- package/dist/modules/harnesses/fidelity.mjs +17 -14
- package/dist/modules/harnesses/fidelity.mjs.map +2 -2
- package/dist/modules/harnesses/final.d.mts +12 -0
- package/dist/modules/harnesses/final.mjs +70 -0
- package/dist/modules/harnesses/final.mjs.map +7 -0
- package/dist/modules/harnesses/index.d.mts +13 -12
- package/dist/modules/harnesses/index.mjs +86 -45
- package/dist/modules/harnesses/index.mjs.map +3 -3
- package/dist/modules/harnesses/names.d.mts +43 -0
- package/dist/modules/harnesses/names.mjs +59 -0
- package/dist/modules/harnesses/names.mjs.map +7 -0
- package/dist/modules/harnesses/nanocode-claude.d.mts +18 -0
- package/dist/modules/harnesses/nanocode-claude.mjs +101 -0
- package/dist/modules/harnesses/nanocode-claude.mjs.map +7 -0
- package/dist/modules/harnesses/nanocode-codex.d.mts +13 -0
- package/dist/modules/harnesses/nanocode-codex.mjs +64 -0
- package/dist/modules/harnesses/nanocode-codex.mjs.map +7 -0
- package/dist/modules/harnesses/pi.d.mts +12 -0
- package/dist/modules/harnesses/pi.mjs +71 -0
- package/dist/modules/harnesses/pi.mjs.map +7 -0
- package/dist/modules/integrations.d.mts +9 -0
- package/dist/modules/integrations.mjs +29 -0
- package/dist/modules/integrations.mjs.map +7 -0
- package/dist/modules/provider/general.bundle.d.mts +1 -0
- package/dist/modules/provider/general.bundle.mjs +5 -0
- package/dist/modules/provider/general.bundle.mjs.map +7 -0
- package/dist/modules/provider/general.d.mts +11 -0
- package/dist/modules/provider/general.mjs +130 -0
- package/dist/modules/provider/general.mjs.map +7 -0
- package/dist/modules/provider/index.d.mts +3 -0
- package/dist/modules/provider/index.mjs +13 -0
- package/dist/modules/provider/index.mjs.map +7 -0
- package/dist/modules/sandboxes/access.d.mts +34 -0
- package/dist/modules/sandboxes/access.mjs +15 -0
- package/dist/modules/sandboxes/access.mjs.map +7 -0
- package/dist/modules/sandboxes/computer.d.mts +24 -51
- package/dist/modules/sandboxes/computer.mjs +523 -888
- package/dist/modules/sandboxes/computer.mjs.map +3 -3
- package/dist/modules/sandboxes/computers-api.d.mts +3 -2
- package/dist/modules/sandboxes/computers-api.mjs +2 -4
- package/dist/modules/sandboxes/computers-api.mjs.map +2 -2
- package/dist/modules/sandboxes/device-api.d.mts +4 -3
- package/dist/modules/sandboxes/device-api.mjs +2 -4
- package/dist/modules/sandboxes/device-api.mjs.map +2 -2
- package/dist/modules/sandboxes/device.d.mts +6 -6
- package/dist/modules/sandboxes/device.mjs +126 -121
- package/dist/modules/sandboxes/device.mjs.map +3 -3
- package/dist/modules/sandboxes/egress.d.mts +10 -9
- package/dist/modules/sandboxes/egress.mjs +73 -56
- package/dist/modules/sandboxes/egress.mjs.map +2 -2
- package/dist/modules/sandboxes/environment.d.mts +35 -269
- package/dist/modules/sandboxes/environment.mjs +27 -104
- package/dist/modules/sandboxes/environment.mjs.map +3 -3
- package/dist/modules/sandboxes/index.d.mts +9 -69
- package/dist/modules/sandboxes/index.mjs +35 -95
- package/dist/modules/sandboxes/index.mjs.map +3 -3
- package/dist/modules/sandboxes/local.d.mts +29 -0
- package/dist/modules/sandboxes/local.mjs +555 -0
- package/dist/modules/sandboxes/local.mjs.map +7 -0
- package/dist/modules/sandboxes/session.d.mts +0 -3
- package/dist/modules/sandboxes/session.mjs +2 -22
- package/dist/modules/sandboxes/session.mjs.map +2 -2
- package/dist/modules/sandboxes/testing/fake-machine.mjs +0 -28
- package/dist/modules/sandboxes/testing/fake-machine.mjs.map +2 -2
- package/package.json +73 -137
- package/dist/modules/authoring-final-channel.d.mts +0 -3
- package/dist/modules/authoring-final-channel.mjs +0 -10
- package/dist/modules/authoring-final-channel.mjs.map +0 -7
- package/dist/modules/channel-factories.d.mts +0 -40
- package/dist/modules/channel-factories.mjs +0 -212
- package/dist/modules/channel-factories.mjs.map +0 -7
- package/dist/modules/channels/content.d.mts +0 -6
- package/dist/modules/channels/content.mjs +0 -31
- package/dist/modules/channels/content.mjs.map +0 -7
- package/dist/modules/channels/delivery.d.mts +0 -54
- package/dist/modules/channels/delivery.mjs +0 -243
- package/dist/modules/channels/delivery.mjs.map +0 -7
- package/dist/modules/channels/direct-messaging.d.mts +0 -5
- package/dist/modules/channels/direct-messaging.mjs +0 -8
- package/dist/modules/channels/direct-messaging.mjs.map +0 -7
- package/dist/modules/channels/fake-platform.d.mts +0 -36
- package/dist/modules/channels/fake-platform.mjs +0 -168
- package/dist/modules/channels/fake-platform.mjs.map +0 -7
- package/dist/modules/channels/group-messaging.d.mts +0 -5
- package/dist/modules/channels/group-messaging.mjs +0 -8
- package/dist/modules/channels/group-messaging.mjs.map +0 -7
- package/dist/modules/channels/inbound.d.mts +0 -52
- package/dist/modules/channels/inbound.mjs +0 -42
- package/dist/modules/channels/inbound.mjs.map +0 -7
- package/dist/modules/channels/index.d.mts +0 -9
- package/dist/modules/channels/index.mjs +0 -10
- package/dist/modules/channels/index.mjs.map +0 -7
- package/dist/modules/channels/messaging-channel.d.mts +0 -7
- package/dist/modules/channels/messaging-channel.mjs +0 -99
- package/dist/modules/channels/messaging-channel.mjs.map +0 -7
- package/dist/modules/channels/projection.d.mts +0 -36
- package/dist/modules/channels/projection.mjs +0 -233
- package/dist/modules/channels/projection.mjs.map +0 -7
- package/dist/modules/channels/prompt.d.mts +0 -72
- package/dist/modules/channels/prompt.mjs +0 -208
- package/dist/modules/channels/prompt.mjs.map +0 -7
- package/dist/modules/channels/routing.d.mts +0 -5
- package/dist/modules/channels/routing.mjs +0 -53
- package/dist/modules/channels/routing.mjs.map +0 -7
- package/dist/modules/connections.d.mts +0 -11
- package/dist/modules/connections.mjs +0 -16
- package/dist/modules/connections.mjs.map +0 -7
- package/dist/modules/harnesses/acp-describe.d.mts +0 -20
- package/dist/modules/harnesses/acp-describe.mjs +0 -110
- package/dist/modules/harnesses/acp-describe.mjs.map +0 -7
- package/dist/modules/harnesses/local-stdio.d.mts +0 -47
- package/dist/modules/harnesses/local-stdio.mjs +0 -41
- package/dist/modules/harnesses/local-stdio.mjs.map +0 -7
- package/dist/modules/harnesses/remote-acp.d.mts +0 -76
- package/dist/modules/harnesses/remote-acp.mjs +0 -83
- package/dist/modules/harnesses/remote-acp.mjs.map +0 -7
- package/dist/modules/harnesses/remote-claude-code.d.mts +0 -88
- package/dist/modules/harnesses/remote-claude-code.mjs +0 -113
- package/dist/modules/harnesses/remote-claude-code.mjs.map +0 -7
- package/dist/modules/harnesses/remote-client-tls.d.mts +0 -35
- package/dist/modules/harnesses/remote-client-tls.mjs +0 -37
- package/dist/modules/harnesses/remote-client-tls.mjs.map +0 -7
- package/dist/modules/harnesses/remote-codex.d.mts +0 -98
- package/dist/modules/harnesses/remote-codex.mjs +0 -128
- package/dist/modules/harnesses/remote-codex.mjs.map +0 -7
- package/dist/modules/harnesses/remote-pi.d.mts +0 -78
- package/dist/modules/harnesses/remote-pi.mjs +0 -104
- package/dist/modules/harnesses/remote-pi.mjs.map +0 -7
- package/dist/modules/harnesses/remote-url.d.mts +0 -5
- package/dist/modules/harnesses/remote-url.mjs +0 -19
- package/dist/modules/harnesses/remote-url.mjs.map +0 -7
- package/dist/modules/harnesses/serverless-final.d.mts +0 -63
- package/dist/modules/harnesses/serverless-final.mjs +0 -88
- package/dist/modules/harnesses/serverless-final.mjs.map +0 -7
- package/dist/modules/harnesses/serverless-nanocode-claude.d.mts +0 -64
- package/dist/modules/harnesses/serverless-nanocode-claude.mjs +0 -105
- package/dist/modules/harnesses/serverless-nanocode-claude.mjs.map +0 -7
- package/dist/modules/harnesses/serverless-nanocode-codex.d.mts +0 -66
- package/dist/modules/harnesses/serverless-nanocode-codex.mjs +0 -113
- package/dist/modules/harnesses/serverless-nanocode-codex.mjs.map +0 -7
- package/dist/modules/harnesses/serverless-pi.d.mts +0 -64
- package/dist/modules/harnesses/serverless-pi.mjs +0 -98
- package/dist/modules/harnesses/serverless-pi.mjs.map +0 -7
- package/dist/modules/runtime/index.d.mts +0 -7
- package/dist/modules/runtime/index.mjs +0 -18
- package/dist/modules/runtime/index.mjs.map +0 -7
- package/dist/modules/runtime/local-stdio.d.mts +0 -10
- package/dist/modules/runtime/local-stdio.mjs +0 -106
- package/dist/modules/runtime/local-stdio.mjs.map +0 -7
- package/dist/modules/runtime/remote-acp.d.mts +0 -16
- package/dist/modules/runtime/remote-acp.mjs +0 -152
- package/dist/modules/runtime/remote-acp.mjs.map +0 -7
- package/dist/modules/runtime/remote-claude-code.d.mts +0 -5
- package/dist/modules/runtime/remote-claude-code.mjs +0 -47
- package/dist/modules/runtime/remote-claude-code.mjs.map +0 -7
- package/dist/modules/runtime/remote-codex.d.mts +0 -5
- package/dist/modules/runtime/remote-codex.mjs +0 -47
- package/dist/modules/runtime/remote-codex.mjs.map +0 -7
- package/dist/modules/runtime/remote-host.d.mts +0 -127
- package/dist/modules/runtime/remote-host.mjs +0 -387
- package/dist/modules/runtime/remote-host.mjs.map +0 -7
- package/dist/modules/runtime/remote-pi.d.mts +0 -5
- package/dist/modules/runtime/remote-pi.mjs +0 -44
- package/dist/modules/runtime/remote-pi.mjs.map +0 -7
- package/dist/modules/sandboxes/guide.d.mts +0 -35
- package/dist/modules/sandboxes/guide.mjs +0 -119
- package/dist/modules/sandboxes/guide.mjs.map +0 -7
- package/dist/modules/sandboxes/workspace-setup.d.mts +0 -42
- package/dist/modules/sandboxes/workspace-setup.mjs +0 -242
- package/dist/modules/sandboxes/workspace-setup.mjs.map +0 -7
- package/dist/modules/testing/harness.d.mts +0 -9
- package/dist/modules/testing/harness.mjs +0 -123
- package/dist/modules/testing/harness.mjs.map +0 -7
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../../src/channels/delivery.ts"],
|
|
4
|
-
"sourcesContent": ["import type { ContentBlock } from '@agentclientprotocol/sdk/experimental/v2';\nimport {\n Delivery,\n ParticipantKind,\n RoutingMode,\n TurnPolicy,\n type RoomPlatformIface,\n type ConversationIface,\n type ConversationMessageIface,\n type ParticipantIface,\n type RouteArgsIface,\n type RouteDecisionIface,\n} from '@finalai/agent-provider';\nimport * as z from 'zod';\nimport {\n authorPrefixedContent,\n buildPromptContent,\n catchUpFor,\n excerpt,\n finalAuthorOf,\n finalContextOf,\n messageRefOf,\n messageSummary,\n renderReplyContext,\n systemNoticeBlock,\n type ReplyContextArgsIface,\n} from \"./prompt.mjs\";\nimport { MAX_AGENT_HOP_DEPTH } from \"./routing.mjs\";\n\n// How a channel hands a conversation message to its agents: route, then build\n// each recipient's ACP content and call prompt or observe. Prompt construction,\n// not orchestration.\n\nconst thrownMessageSchema = z.object({ message: z.string() });\n\nexport const CONTEXT_WINDOW_MESSAGES = 50;\n\nexport interface DeliveryOutcomeIface {\n participantId: string;\n delivery: Delivery;\n // What actually happened: an observe can fall back to a silent prompt, or be\n // skipped for an agent with no session yet (its first prompt catches up).\n sent: 'prompt' | 'observe' | 'silent-prompt' | 'skipped' | 'failed';\n messageId: string | null;\n error: string | null;\n}\n\nexport interface DeliverMessageArgsIface {\n platform: RoomPlatformIface;\n // A channel's pure route(), or a bundle channel's run in its isolate.\n route: (args: RouteArgsIface) => RouteDecisionIface[] | Promise<RouteDecisionIface[]>;\n conversation: ConversationIface;\n message: ConversationMessageIface;\n participants?: ParticipantIface[];\n // The delivering channel's turnPolicy.\n turnPolicy: TurnPolicy;\n}\n\n// A channel's policy applies unless the conversation is set to\n// queue, the per-conversation override.\nexport const effectiveTurnPolicy = (args: {\n channel: TurnPolicy;\n conversation: TurnPolicy;\n}): TurnPolicy => (args.conversation === TurnPolicy.Queue ? TurnPolicy.Queue : args.channel);\n\n// Every person in the room: who may answer what a turn no person prompted asks.\nexport const humanAudience = (participants: ParticipantIface[]): string[] =>\n participants\n .filter((participant) => !participant.left && participant.kind === ParticipantKind.User)\n .map((participant) => participant.id);\n\n// A person answers their own prompt; an agent's prompt is answered by the room's people.\nexport const audienceFor = (\n author: ParticipantIface | null,\n participants: ParticipantIface[],\n): string[] => (author?.kind === ParticipantKind.User ? [author.id] : humanAudience(participants));\n\n// Reply, thread and quote context. A referenced message outside the\n// recent window is read by id, however old.\nconst replyContextFor = async (args: {\n platform: RoomPlatformIface;\n message: ConversationMessageIface;\n earlier: ConversationMessageIface[];\n participants: ParticipantIface[];\n}): Promise<ReplyContextArgsIface> => {\n const byId = new Map(args.earlier.map((message) => [message.messageId, message]));\n const referenced = [\n args.message.replyToMessageId,\n args.message.threadRootId,\n ...args.message.quotedMessageIds,\n ].flatMap((id) => (id == null || byId.has(id) ? [] : [id]));\n if (referenced.length > 0) {\n const found = await args.platform.conversations.getMessages({\n conversationId: args.message.conversationId,\n messageIds: [...new Set(referenced)],\n });\n for (const message of found) byId.set(message.messageId, message);\n }\n const replyTo =\n args.message.replyToMessageId == null\n ? null\n : (byId.get(args.message.replyToMessageId) ?? null);\n const root =\n args.message.threadRootId == null ? null : (byId.get(args.message.threadRootId) ?? null);\n const rootAuthor =\n root == null\n ? null\n : args.participants.find((participant) => participant.id === root.authorParticipantId);\n return {\n replyTo:\n replyTo == null || replyTo.messageId === root?.messageId\n ? null\n : messageRefOf(replyTo, args.participants),\n thread:\n args.message.threadRootId == null\n ? null\n : {\n rootMessageId: args.message.threadRootId,\n rootExcerpt: root == null ? '' : excerpt(messageSummary(root.content)),\n rootAuthor: rootAuthor == null ? null : finalAuthorOf(rootAuthor),\n },\n quotes: args.message.quotedMessageIds.flatMap((id) => {\n const quoted = byId.get(id);\n return quoted == null ? [] : [messageRefOf(quoted, args.participants)];\n }),\n };\n};\n\nexport const deliveryIdempotencyKey = (messageId: string, participantId: string): string =>\n `${messageId}:${participantId}`;\n\nexport const deliverMessage = async (\n args: DeliverMessageArgsIface,\n): Promise<DeliveryOutcomeIface[]> => {\n const { platform, conversation, message } = args;\n const participants =\n args.participants ?? (await platform.conversations.participants(conversation.conversationId));\n const decisions = await args.route({ conversation, message, participants });\n const author =\n participants.find((participant) => participant.id === message.authorParticipantId) ?? null;\n for (const participant of participants) {\n if (participant.kind !== ParticipantKind.Agent) continue;\n const decision = decisions.find((candidate) => candidate.participantId === participant.id);\n platform.log('channel route decision', {\n observed_at: new Date().toISOString(),\n organization_id: conversation.organizationId,\n conversation_id: conversation.conversationId,\n conversation_kind: conversation.kind,\n message_id: message.messageId,\n author_kind: author?.kind ?? '',\n participant_id: participant.id,\n routing_mode: participant.routingMode ?? '',\n delivery: decision?.delivery ?? 'skipped',\n reason: participant.left\n ? 'left conversation'\n : participant.id === message.authorParticipantId\n ? 'author'\n : decision == null\n ? 'not selected by route'\n : 'selected by route',\n hop_depth: message.hopDepth,\n });\n }\n if (decisions.length === 0) return [];\n const earlier = await platform.conversations.recentMessages({\n conversationId: conversation.conversationId,\n limit: CONTEXT_WINDOW_MESSAGES,\n beforeSeq: message.seq,\n });\n const replyContext = await replyContextFor({ platform, message, earlier, participants });\n const turnPolicy = effectiveTurnPolicy({\n channel: args.turnPolicy,\n conversation: conversation.turnPolicy,\n });\n const audience = audienceFor(author, participants);\n const authorParticipant: ParticipantIface = author ?? {\n id: message.authorParticipantId,\n kind: ParticipantKind.User,\n displayName: 'Someone',\n userId: null,\n definitionId: null,\n routingMode: null,\n sessionId: null,\n supportsObserve: null,\n rendersAuthorMeta: null,\n left: true,\n };\n\n const deliverOne = async (decision: RouteDecisionIface): Promise<DeliveryOutcomeIface> => {\n const recipient = participants.find((participant) => participant.id === decision.participantId);\n const base = { participantId: decision.participantId, delivery: decision.delivery };\n if (recipient == null) {\n return { ...base, sent: 'skipped', messageId: null, error: null };\n }\n const idempotencyKey = deliveryIdempotencyKey(message.messageId, recipient.id);\n const prompt = async (content: ContentBlock[], replyExpected: boolean): Promise<string> => {\n const result = await platform.sessions.prompt({\n participantId: recipient.id,\n content,\n turnPolicy,\n replyExpected,\n idempotencyKey,\n authorParticipantId: message.authorParticipantId,\n audienceParticipantIds: audience,\n sourceMessageId: message.messageId,\n });\n return result.messageId;\n };\n try {\n if (decision.delivery === Delivery.Prompt) {\n const content = buildPromptContent({\n message,\n author: authorParticipant,\n recipient,\n replyContext,\n catchUp: catchUpFor({ recipient, earlier, participants }),\n });\n return { ...base, sent: 'prompt', messageId: await prompt(content, true), error: null };\n }\n if (recipient.sessionId == null) {\n return { ...base, sent: 'skipped', messageId: null, error: null };\n }\n const contextBlock = renderReplyContext(replyContext);\n const content = [\n ...(contextBlock == null ? [] : [contextBlock]),\n ...authorPrefixedContent({\n content: message.content,\n author: finalAuthorOf(authorParticipant),\n rendersAuthorMeta: recipient.rendersAuthorMeta ?? false,\n context: finalContextOf(replyContext),\n }),\n ];\n if (recipient.supportsObserve === false) {\n if (message.hopDepth >= MAX_AGENT_HOP_DEPTH) {\n return { ...base, sent: 'skipped', messageId: null, error: null };\n }\n return {\n ...base,\n sent: 'silent-prompt',\n messageId: await prompt(content, false),\n error: null,\n };\n }\n await platform.sessions.observe({ participantId: recipient.id, content, idempotencyKey });\n return { ...base, sent: 'observe', messageId: null, error: null };\n } catch (error) {\n // JSON-RPC failures arrive as plain `{ code, message }` objects.\n const reason =\n error instanceof Error\n ? error.message\n : (thrownMessageSchema.safeParse(error).data?.message ?? String(error));\n platform.log('channel delivery failed', {\n conversationId: conversation.conversationId,\n messageId: message.messageId,\n participantId: recipient.id,\n delivery: decision.delivery,\n error: reason,\n });\n return { ...base, sent: 'failed', messageId: null, error: reason };\n }\n };\n\n return Promise.all(decisions.map(deliverOne));\n};\n\nexport interface ObserveNoticeArgsIface {\n platform: RoomPlatformIface;\n recipients: ParticipantIface[];\n text: string;\n idempotencyKey: string;\n}\n\n// System blocks with no model call. Agents without a session skip them (their\n// first prompt catches up); agents without observe support skip them too, since\n// a silent prompt per reaction is not worth a model call.\nexport const observeNotice = async (args: ObserveNoticeArgsIface): Promise<string[]> => {\n const delivered: string[] = [];\n for (const recipient of args.recipients) {\n if (recipient.sessionId == null || recipient.supportsObserve === false || recipient.left)\n continue;\n try {\n await args.platform.sessions.observe({\n participantId: recipient.id,\n content: [systemNoticeBlock({ text: args.text })],\n idempotencyKey: `${args.idempotencyKey}:${recipient.id}`,\n });\n delivered.push(recipient.id);\n } catch (error) {\n args.platform.log('channel notice failed', {\n participantId: recipient.id,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n return delivered;\n};\n\nexport interface ReactionNoticeArgsIface {\n platform: RoomPlatformIface;\n participants: ParticipantIface[];\n message: ConversationMessageIface;\n // Whether the reacted message is the agent's latest one.\n isLatestOfAuthor: boolean;\n reactorParticipantId: string;\n emoji: string;\n eventId?: string;\n}\n\n// Only the agent whose message was reacted to hears about it.\nexport const reactionNotice = async (args: ReactionNoticeArgsIface): Promise<string[]> => {\n const author = args.participants.find(\n (participant) => participant.id === args.message.authorParticipantId,\n );\n const reactor = args.participants.find(\n (participant) => participant.id === args.reactorParticipantId,\n );\n if (\n author == null ||\n author.kind !== ParticipantKind.Agent ||\n reactor == null ||\n reactor.id === author.id\n ) {\n return [];\n }\n const target = args.isLatestOfAuthor\n ? 'your last message'\n : `your message \"${excerpt(messageSummary(args.message.content), 120)}\"`;\n const reactionId = `reaction:${args.message.messageId}:${reactor.id}:${args.emoji}`;\n return observeNotice({\n platform: args.platform,\n recipients: [author],\n text: `${reactor.displayName} reacted ${args.emoji} to ${target}`,\n idempotencyKey: args.eventId == null ? reactionId : `${reactionId}:${args.eventId}`,\n });\n};\n\nexport enum MembershipChange {\n Joined = 'joined',\n Left = 'left',\n}\n\nexport interface MembershipNoticeArgsIface {\n platform: RoomPlatformIface;\n participants: ParticipantIface[];\n subject: ParticipantIface;\n change: MembershipChange;\n idempotencyKey: string;\n}\n\n// Membership changes reach agents that follow the whole conversation.\nexport const membershipNotice = async (args: MembershipNoticeArgsIface): Promise<string[]> => {\n const recipients = args.participants.filter(\n (participant) =>\n participant.kind === ParticipantKind.Agent &&\n participant.id !== args.subject.id &&\n (participant.routingMode === RoutingMode.All ||\n participant.routingMode === RoutingMode.Default),\n );\n const verb = args.change === MembershipChange.Joined ? 'joined' : 'left';\n return observeNotice({\n platform: args.platform,\n recipients,\n text: `${args.subject.displayName} ${verb} the conversation`,\n idempotencyKey: args.idempotencyKey,\n });\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["content", "MembershipChange"]
|
|
7
|
-
}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { RoomSurfaceDefinitionIface, JsonValue } from '@finalai/agent-provider';
|
|
2
|
-
import { type MessagingChannelConfigIface } from "./messaging-channel.mjs";
|
|
3
|
-
export type DirectMessagingChannelConfigIface = MessagingChannelConfigIface;
|
|
4
|
-
export declare const DIRECT_MESSAGING_SPECIFIER = "@finalai/final-agent-provider/channels/direct-messaging";
|
|
5
|
-
export declare const createDirectMessagingChannel: (config?: DirectMessagingChannelConfigIface) => RoomSurfaceDefinitionIface<JsonValue, JsonValue>;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { createMessagingChannel } from "./messaging-channel.mjs";
|
|
2
|
-
const DIRECT_MESSAGING_SPECIFIER = "@finalai/final-agent-provider/channels/direct-messaging";
|
|
3
|
-
const createDirectMessagingChannel = (config = {}) => createMessagingChannel(config);
|
|
4
|
-
export {
|
|
5
|
-
DIRECT_MESSAGING_SPECIFIER,
|
|
6
|
-
createDirectMessagingChannel
|
|
7
|
-
};
|
|
8
|
-
//# sourceMappingURL=direct-messaging.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../../src/channels/direct-messaging.ts"],
|
|
4
|
-
"sourcesContent": ["import type { RoomSurfaceDefinitionIface, JsonValue } from '@finalai/agent-provider';\nimport { createMessagingChannel, type MessagingChannelConfigIface } from \"./messaging-channel.mjs\";\n\nexport type DirectMessagingChannelConfigIface = MessagingChannelConfigIface;\n\nexport const DIRECT_MESSAGING_SPECIFIER = '@finalai/final-agent-provider/channels/direct-messaging';\n\n// One user and one agent; every human message prompts the agent.\nexport const createDirectMessagingChannel = (\n config: DirectMessagingChannelConfigIface = {},\n): RoomSurfaceDefinitionIface<JsonValue, JsonValue> => createMessagingChannel(config);\n"],
|
|
5
|
-
"mappings": "AACA,SAAS,8BAAgE;AAIlE,MAAM,6BAA6B;AAGnC,MAAM,+BAA+B,CAC1C,SAA4C,CAAC,MACQ,uBAAuB,MAAM;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { ConversationKind, ParticipantKind, TurnPolicy, type RoomPlatformIface, type ConversationIface, type ConversationMessageIface, type JsonObject, type ObserveArgsIface, type ParticipantIface, type PromptArgsIface } from '@finalai/agent-provider';
|
|
2
|
-
export interface FakeMessageIface extends ConversationMessageIface {
|
|
3
|
-
final: boolean;
|
|
4
|
-
updates: number;
|
|
5
|
-
source: {
|
|
6
|
-
turnId: string;
|
|
7
|
-
fromSeq: number;
|
|
8
|
-
toSeq: number;
|
|
9
|
-
} | null;
|
|
10
|
-
}
|
|
11
|
-
export interface FakeCardIface {
|
|
12
|
-
messageId: string;
|
|
13
|
-
decisionId: string | null;
|
|
14
|
-
state: JsonObject;
|
|
15
|
-
}
|
|
16
|
-
export interface FakePlatformIface {
|
|
17
|
-
platform: RoomPlatformIface;
|
|
18
|
-
conversations: Map<string, ConversationIface>;
|
|
19
|
-
participants: Map<string, ParticipantIface[]>;
|
|
20
|
-
messages: FakeMessageIface[];
|
|
21
|
-
cards: FakeCardIface[];
|
|
22
|
-
prompts: PromptArgsIface[];
|
|
23
|
-
observes: ObserveArgsIface[];
|
|
24
|
-
logs: string[];
|
|
25
|
-
getMessagesCalls: string[][];
|
|
26
|
-
addConversation(args: {
|
|
27
|
-
conversationId: string;
|
|
28
|
-
kind: ConversationKind;
|
|
29
|
-
turnPolicy?: TurnPolicy;
|
|
30
|
-
}): ConversationIface;
|
|
31
|
-
addParticipant(conversationId: string, participant: Partial<ParticipantIface> & {
|
|
32
|
-
id: string;
|
|
33
|
-
kind: ParticipantKind;
|
|
34
|
-
}): ParticipantIface;
|
|
35
|
-
}
|
|
36
|
-
export declare const createFakePlatform: () => FakePlatformIface;
|
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ConversationKind,
|
|
3
|
-
MessageKind,
|
|
4
|
-
ParticipantKind,
|
|
5
|
-
TurnPolicy
|
|
6
|
-
} from "@finalai/agent-provider";
|
|
7
|
-
import { routeToParticipant } from "./routing.mjs";
|
|
8
|
-
import { deliverMessage } from "./delivery.mjs";
|
|
9
|
-
import { messageSummary } from "./prompt.mjs";
|
|
10
|
-
import { routeMessage } from "./routing.mjs";
|
|
11
|
-
const createFakePlatform = () => {
|
|
12
|
-
const conversations = /* @__PURE__ */ new Map();
|
|
13
|
-
const participants = /* @__PURE__ */ new Map();
|
|
14
|
-
const messages = [];
|
|
15
|
-
const cards = [];
|
|
16
|
-
const prompts = [];
|
|
17
|
-
const observes = [];
|
|
18
|
-
const logs = [];
|
|
19
|
-
const getMessagesCalls = [];
|
|
20
|
-
let nextId = 1;
|
|
21
|
-
const addConversation = (args) => {
|
|
22
|
-
const conversation = {
|
|
23
|
-
conversationId: args.conversationId,
|
|
24
|
-
organizationId: "org",
|
|
25
|
-
kind: args.kind,
|
|
26
|
-
title: null,
|
|
27
|
-
isHome: false,
|
|
28
|
-
turnPolicy: args.turnPolicy ?? TurnPolicy.Steer
|
|
29
|
-
};
|
|
30
|
-
conversations.set(args.conversationId, conversation);
|
|
31
|
-
participants.set(args.conversationId, []);
|
|
32
|
-
return conversation;
|
|
33
|
-
};
|
|
34
|
-
const addParticipant = (conversationId, partial) => {
|
|
35
|
-
const participant = {
|
|
36
|
-
displayName: partial.id,
|
|
37
|
-
userId: null,
|
|
38
|
-
definitionId: null,
|
|
39
|
-
routingMode: null,
|
|
40
|
-
sessionId: partial.kind === ParticipantKind.Agent ? `session-${partial.id}` : null,
|
|
41
|
-
supportsObserve: partial.kind === ParticipantKind.Agent ? true : null,
|
|
42
|
-
rendersAuthorMeta: partial.kind === ParticipantKind.Agent ? true : null,
|
|
43
|
-
left: false,
|
|
44
|
-
...partial
|
|
45
|
-
};
|
|
46
|
-
participants.get(conversationId)?.push(participant);
|
|
47
|
-
return participant;
|
|
48
|
-
};
|
|
49
|
-
const nextSeq = (conversationId) => messages.filter((message) => message.conversationId === conversationId).length + 1;
|
|
50
|
-
const insert = (args) => {
|
|
51
|
-
const message = {
|
|
52
|
-
messageId: `m${nextId++}`,
|
|
53
|
-
seq: nextSeq(args.conversationId),
|
|
54
|
-
conversationId: args.conversationId,
|
|
55
|
-
authorParticipantId: args.authorParticipantId,
|
|
56
|
-
kind: args.kind,
|
|
57
|
-
body: messageSummary(args.content),
|
|
58
|
-
content: args.content,
|
|
59
|
-
replyToMessageId: args.replyToMessageId ?? null,
|
|
60
|
-
threadRootId: args.threadRootId ?? null,
|
|
61
|
-
quotedMessageIds: args.quotedMessageIds ?? [],
|
|
62
|
-
mentionedParticipantIds: args.mentionedParticipantIds ?? [],
|
|
63
|
-
hopDepth: args.hopDepth ?? 0,
|
|
64
|
-
createdAt: (/* @__PURE__ */ new Date(0)).toISOString(),
|
|
65
|
-
final: args.source == null,
|
|
66
|
-
updates: 0,
|
|
67
|
-
source: args.source ?? null
|
|
68
|
-
};
|
|
69
|
-
messages.push(message);
|
|
70
|
-
return message;
|
|
71
|
-
};
|
|
72
|
-
const platform = {
|
|
73
|
-
conversations: {
|
|
74
|
-
dispatchMessage: async (input) => {
|
|
75
|
-
const room = conversations.get(input.conversationId);
|
|
76
|
-
const message = messages.find((entry) => entry.messageId === input.messageId);
|
|
77
|
-
if (room == null || message == null) throw new Error("dispatch source missing");
|
|
78
|
-
await deliverMessage({
|
|
79
|
-
platform,
|
|
80
|
-
conversation: room,
|
|
81
|
-
message,
|
|
82
|
-
turnPolicy: room.turnPolicy,
|
|
83
|
-
route: input.participantId == null ? routeMessage : routeToParticipant(input.participantId)
|
|
84
|
-
});
|
|
85
|
-
},
|
|
86
|
-
get: async (conversationId) => conversations.get(conversationId) ?? null,
|
|
87
|
-
participants: async (conversationId) => participants.get(conversationId) ?? [],
|
|
88
|
-
postMessage: async (args) => {
|
|
89
|
-
if (args.clientMessageId != null) {
|
|
90
|
-
const existing = messages.find(
|
|
91
|
-
(message) => message.conversationId === args.conversationId && message.messageId === args.clientMessageId
|
|
92
|
-
);
|
|
93
|
-
if (existing != null) return existing;
|
|
94
|
-
}
|
|
95
|
-
return insert({ ...args, kind: args.kind ?? MessageKind.Message });
|
|
96
|
-
},
|
|
97
|
-
updateMessage: async (args) => {
|
|
98
|
-
const message = messages.find((candidate) => candidate.messageId === args.messageId);
|
|
99
|
-
if (message == null) throw new Error(`no message ${args.messageId}`);
|
|
100
|
-
message.content = args.content;
|
|
101
|
-
message.body = messageSummary(args.content);
|
|
102
|
-
message.final = args.final;
|
|
103
|
-
message.updates += 1;
|
|
104
|
-
},
|
|
105
|
-
postCard: async (args) => {
|
|
106
|
-
const message = insert({
|
|
107
|
-
conversationId: args.conversationId,
|
|
108
|
-
authorParticipantId: args.authorParticipantId,
|
|
109
|
-
kind: MessageKind.Card,
|
|
110
|
-
content: []
|
|
111
|
-
});
|
|
112
|
-
cards.push({
|
|
113
|
-
messageId: message.messageId,
|
|
114
|
-
decisionId: args.decisionId,
|
|
115
|
-
state: args.state
|
|
116
|
-
});
|
|
117
|
-
return message;
|
|
118
|
-
},
|
|
119
|
-
updateCard: async (args) => {
|
|
120
|
-
const card = cards.find(
|
|
121
|
-
(candidate) => candidate.messageId === args.messageId || candidate.decisionId === args.messageId
|
|
122
|
-
);
|
|
123
|
-
if (card == null) throw new Error(`no card ${args.messageId}`);
|
|
124
|
-
card.state = { ...card.state, ...args.state };
|
|
125
|
-
},
|
|
126
|
-
recentMessages: async (args) => messages.filter(
|
|
127
|
-
(message) => message.conversationId === args.conversationId && (args.beforeSeq == null || message.seq < args.beforeSeq) && (args.afterSeq == null || message.seq > args.afterSeq)
|
|
128
|
-
).slice(-args.limit),
|
|
129
|
-
getMessages: async (args) => {
|
|
130
|
-
getMessagesCalls.push(args.messageIds);
|
|
131
|
-
return messages.filter(
|
|
132
|
-
(message) => message.conversationId === args.conversationId && args.messageIds.includes(message.messageId)
|
|
133
|
-
);
|
|
134
|
-
}
|
|
135
|
-
},
|
|
136
|
-
sessions: {
|
|
137
|
-
prompt: async (args) => {
|
|
138
|
-
prompts.push(args);
|
|
139
|
-
return { messageId: `acp-${prompts.length}` };
|
|
140
|
-
},
|
|
141
|
-
observe: async (args) => {
|
|
142
|
-
observes.push(args);
|
|
143
|
-
},
|
|
144
|
-
cancel: async () => {
|
|
145
|
-
}
|
|
146
|
-
},
|
|
147
|
-
log: (message) => {
|
|
148
|
-
logs.push(message);
|
|
149
|
-
}
|
|
150
|
-
};
|
|
151
|
-
return {
|
|
152
|
-
platform,
|
|
153
|
-
conversations,
|
|
154
|
-
participants,
|
|
155
|
-
messages,
|
|
156
|
-
cards,
|
|
157
|
-
prompts,
|
|
158
|
-
observes,
|
|
159
|
-
logs,
|
|
160
|
-
getMessagesCalls,
|
|
161
|
-
addConversation,
|
|
162
|
-
addParticipant
|
|
163
|
-
};
|
|
164
|
-
};
|
|
165
|
-
export {
|
|
166
|
-
createFakePlatform
|
|
167
|
-
};
|
|
168
|
-
//# sourceMappingURL=fake-platform.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../../src/channels/fake-platform.ts"],
|
|
4
|
-
"sourcesContent": ["import type { ContentBlock } from '@agentclientprotocol/sdk/experimental/v2';\nimport {\n ConversationKind,\n MessageKind,\n ParticipantKind,\n TurnPolicy,\n type CardArgsIface,\n type RoomPlatformIface,\n type ConversationIface,\n type ConversationMessageIface,\n type JsonObject,\n type ObserveArgsIface,\n type ParticipantIface,\n type PromptArgsIface,\n} from '@finalai/agent-provider';\nimport { routeToParticipant } from \"./routing.mjs\";\nimport { deliverMessage } from \"./delivery.mjs\";\nimport { messageSummary } from \"./prompt.mjs\";\nimport { routeMessage } from \"./routing.mjs\";\n\n// An in-memory RoomPlatformIface for channel tests (not exported from the\n// package index). Records every prompt, observe, channel input and\n// visible-message write.\n\nexport interface FakeMessageIface extends ConversationMessageIface {\n final: boolean;\n updates: number;\n source: { turnId: string; fromSeq: number; toSeq: number } | null;\n}\n\nexport interface FakeCardIface {\n messageId: string;\n decisionId: string | null;\n state: JsonObject;\n}\n\nexport interface FakePlatformIface {\n platform: RoomPlatformIface;\n conversations: Map<string, ConversationIface>;\n participants: Map<string, ParticipantIface[]>;\n messages: FakeMessageIface[];\n cards: FakeCardIface[];\n prompts: PromptArgsIface[];\n observes: ObserveArgsIface[];\n logs: string[];\n // The message ids of each getMessages call.\n getMessagesCalls: string[][];\n addConversation(args: {\n conversationId: string;\n kind: ConversationKind;\n turnPolicy?: TurnPolicy;\n }): ConversationIface;\n addParticipant(\n conversationId: string,\n participant: Partial<ParticipantIface> & { id: string; kind: ParticipantKind },\n ): ParticipantIface;\n}\n\nexport const createFakePlatform = (): FakePlatformIface => {\n const conversations = new Map<string, ConversationIface>();\n const participants = new Map<string, ParticipantIface[]>();\n const messages: FakeMessageIface[] = [];\n const cards: FakeCardIface[] = [];\n const prompts: PromptArgsIface[] = [];\n const observes: ObserveArgsIface[] = [];\n const logs: string[] = [];\n const getMessagesCalls: string[][] = [];\n let nextId = 1;\n\n const addConversation: FakePlatformIface['addConversation'] = (args) => {\n const conversation: ConversationIface = {\n conversationId: args.conversationId,\n organizationId: 'org',\n kind: args.kind,\n title: null,\n isHome: false,\n turnPolicy: args.turnPolicy ?? TurnPolicy.Steer,\n };\n conversations.set(args.conversationId, conversation);\n participants.set(args.conversationId, []);\n return conversation;\n };\n\n const addParticipant: FakePlatformIface['addParticipant'] = (conversationId, partial) => {\n const participant: ParticipantIface = {\n displayName: partial.id,\n userId: null,\n definitionId: null,\n routingMode: null,\n sessionId: partial.kind === ParticipantKind.Agent ? `session-${partial.id}` : null,\n supportsObserve: partial.kind === ParticipantKind.Agent ? true : null,\n rendersAuthorMeta: partial.kind === ParticipantKind.Agent ? true : null,\n left: false,\n ...partial,\n };\n participants.get(conversationId)?.push(participant);\n return participant;\n };\n\n const nextSeq = (conversationId: string): number =>\n messages.filter((message) => message.conversationId === conversationId).length + 1;\n\n const insert = (args: {\n conversationId: string;\n authorParticipantId: string;\n kind: MessageKind;\n content: ContentBlock[];\n replyToMessageId?: string | null;\n threadRootId?: string | null;\n quotedMessageIds?: string[];\n mentionedParticipantIds?: string[];\n hopDepth?: number;\n source?: FakeMessageIface['source'];\n }): FakeMessageIface => {\n const message: FakeMessageIface = {\n messageId: `m${nextId++}`,\n seq: nextSeq(args.conversationId),\n conversationId: args.conversationId,\n authorParticipantId: args.authorParticipantId,\n kind: args.kind,\n body: messageSummary(args.content),\n content: args.content,\n replyToMessageId: args.replyToMessageId ?? null,\n threadRootId: args.threadRootId ?? null,\n quotedMessageIds: args.quotedMessageIds ?? [],\n mentionedParticipantIds: args.mentionedParticipantIds ?? [],\n hopDepth: args.hopDepth ?? 0,\n createdAt: new Date(0).toISOString(),\n final: args.source == null,\n updates: 0,\n source: args.source ?? null,\n };\n messages.push(message);\n return message;\n };\n\n const platform: RoomPlatformIface = {\n conversations: {\n dispatchMessage: async (input) => {\n const room = conversations.get(input.conversationId);\n const message = messages.find((entry) => entry.messageId === input.messageId);\n if (room == null || message == null) throw new Error('dispatch source missing');\n await deliverMessage({\n platform,\n conversation: room,\n message,\n turnPolicy: room.turnPolicy,\n route:\n input.participantId == null ? routeMessage : routeToParticipant(input.participantId),\n });\n },\n get: async (conversationId) => conversations.get(conversationId) ?? null,\n participants: async (conversationId) => participants.get(conversationId) ?? [],\n postMessage: async (args) => {\n if (args.clientMessageId != null) {\n const existing = messages.find(\n (message) =>\n message.conversationId === args.conversationId &&\n message.messageId === args.clientMessageId,\n );\n if (existing != null) return existing;\n }\n return insert({ ...args, kind: args.kind ?? MessageKind.Message });\n },\n updateMessage: async (args) => {\n const message = messages.find((candidate) => candidate.messageId === args.messageId);\n if (message == null) throw new Error(`no message ${args.messageId}`);\n message.content = args.content;\n message.body = messageSummary(args.content);\n message.final = args.final;\n message.updates += 1;\n },\n postCard: async (args: CardArgsIface) => {\n const message = insert({\n conversationId: args.conversationId,\n authorParticipantId: args.authorParticipantId,\n kind: MessageKind.Card,\n content: [],\n });\n cards.push({\n messageId: message.messageId,\n decisionId: args.decisionId,\n state: args.state,\n });\n return message;\n },\n updateCard: async (args) => {\n const card = cards.find(\n (candidate) =>\n candidate.messageId === args.messageId || candidate.decisionId === args.messageId,\n );\n if (card == null) throw new Error(`no card ${args.messageId}`);\n card.state = { ...card.state, ...args.state };\n },\n recentMessages: async (args) =>\n messages\n .filter(\n (message) =>\n message.conversationId === args.conversationId &&\n (args.beforeSeq == null || message.seq < args.beforeSeq) &&\n (args.afterSeq == null || message.seq > args.afterSeq),\n )\n .slice(-args.limit),\n getMessages: async (args) => {\n getMessagesCalls.push(args.messageIds);\n return messages.filter(\n (message) =>\n message.conversationId === args.conversationId &&\n args.messageIds.includes(message.messageId),\n );\n },\n },\n sessions: {\n prompt: async (args) => {\n prompts.push(args);\n return { messageId: `acp-${prompts.length}` };\n },\n observe: async (args) => {\n observes.push(args);\n },\n cancel: async () => {},\n },\n log: (message) => {\n logs.push(message);\n },\n };\n\n return {\n platform,\n conversations,\n participants,\n messages,\n cards,\n prompts,\n observes,\n logs,\n getMessagesCalls,\n addConversation,\n addParticipant,\n };\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { RoomSurfaceDefinitionIface, JsonValue } from '@finalai/agent-provider';
|
|
2
|
-
import { type MessagingChannelConfigIface } from "./messaging-channel.mjs";
|
|
3
|
-
export type GroupMessagingChannelConfigIface = MessagingChannelConfigIface;
|
|
4
|
-
export declare const GROUP_MESSAGING_SPECIFIER = "@finalai/final-agent-provider/channels/group-messaging";
|
|
5
|
-
export declare const createGroupMessagingChannel: (config?: GroupMessagingChannelConfigIface) => RoomSurfaceDefinitionIface<JsonValue, JsonValue>;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { createMessagingChannel } from "./messaging-channel.mjs";
|
|
2
|
-
const GROUP_MESSAGING_SPECIFIER = "@finalai/final-agent-provider/channels/group-messaging";
|
|
3
|
-
const createGroupMessagingChannel = (config = {}) => createMessagingChannel(config);
|
|
4
|
-
export {
|
|
5
|
-
GROUP_MESSAGING_SPECIFIER,
|
|
6
|
-
createGroupMessagingChannel
|
|
7
|
-
};
|
|
8
|
-
//# sourceMappingURL=group-messaging.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../../src/channels/group-messaging.ts"],
|
|
4
|
-
"sourcesContent": ["import type { RoomSurfaceDefinitionIface, JsonValue } from '@finalai/agent-provider';\nimport { createMessagingChannel, type MessagingChannelConfigIface } from \"./messaging-channel.mjs\";\n\nexport type GroupMessagingChannelConfigIface = MessagingChannelConfigIface;\n\nexport const GROUP_MESSAGING_SPECIFIER = '@finalai/final-agent-provider/channels/group-messaging';\n\n// N users and M agents; routing modes and mentions decide prompt or observe.\nexport const createGroupMessagingChannel = (\n config: GroupMessagingChannelConfigIface = {},\n): RoomSurfaceDefinitionIface<JsonValue, JsonValue> => createMessagingChannel(config);\n"],
|
|
5
|
-
"mappings": "AACA,SAAS,8BAAgE;AAIlE,MAAM,4BAA4B;AAGlC,MAAM,8BAA8B,CACzC,SAA2C,CAAC,MACS,uBAAuB,MAAM;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import * as z from 'zod';
|
|
2
|
-
import { MembershipChange } from "./delivery.mjs";
|
|
3
|
-
export declare const messageInboundSchema: z.ZodObject<{
|
|
4
|
-
conversationId: z.ZodString;
|
|
5
|
-
authorParticipantId: z.ZodString;
|
|
6
|
-
kind: z.ZodDefault<z.ZodEnum<typeof import("@finalai/agent-provider").MessageKind>>;
|
|
7
|
-
content: z.ZodArray<z.ZodType<import("@finalai/agent-provider").JsonObject, unknown, z.core.$ZodTypeInternals<import("@finalai/agent-provider").JsonObject, unknown>>>;
|
|
8
|
-
clientMessageId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
9
|
-
replyToMessageId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
10
|
-
threadRootId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
11
|
-
quotedMessageIds: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
12
|
-
mentionedParticipantIds: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
13
|
-
}, z.core.$strip>;
|
|
14
|
-
export type MessageInboundIface = z.infer<typeof messageInboundSchema>;
|
|
15
|
-
export declare enum ConversationEventKind {
|
|
16
|
-
Reaction = "reaction",
|
|
17
|
-
Membership = "membership"
|
|
18
|
-
}
|
|
19
|
-
export declare const reactionInboundSchema: z.ZodObject<{
|
|
20
|
-
event: z.ZodLiteral<ConversationEventKind.Reaction>;
|
|
21
|
-
conversationId: z.ZodString;
|
|
22
|
-
messageId: z.ZodString;
|
|
23
|
-
messageSeq: z.ZodNumber;
|
|
24
|
-
latestOfAuthor: z.ZodBoolean;
|
|
25
|
-
reactorParticipantId: z.ZodString;
|
|
26
|
-
emoji: z.ZodString;
|
|
27
|
-
eventId: z.ZodOptional<z.ZodString>;
|
|
28
|
-
}, z.core.$strip>;
|
|
29
|
-
export declare const membershipInboundSchema: z.ZodObject<{
|
|
30
|
-
event: z.ZodLiteral<ConversationEventKind.Membership>;
|
|
31
|
-
conversationId: z.ZodString;
|
|
32
|
-
participantId: z.ZodString;
|
|
33
|
-
change: z.ZodEnum<typeof MembershipChange>;
|
|
34
|
-
eventId: z.ZodString;
|
|
35
|
-
}, z.core.$strip>;
|
|
36
|
-
export declare const conversationEventInboundSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
37
|
-
event: z.ZodLiteral<ConversationEventKind.Reaction>;
|
|
38
|
-
conversationId: z.ZodString;
|
|
39
|
-
messageId: z.ZodString;
|
|
40
|
-
messageSeq: z.ZodNumber;
|
|
41
|
-
latestOfAuthor: z.ZodBoolean;
|
|
42
|
-
reactorParticipantId: z.ZodString;
|
|
43
|
-
emoji: z.ZodString;
|
|
44
|
-
eventId: z.ZodOptional<z.ZodString>;
|
|
45
|
-
}, z.core.$strip>, z.ZodObject<{
|
|
46
|
-
event: z.ZodLiteral<ConversationEventKind.Membership>;
|
|
47
|
-
conversationId: z.ZodString;
|
|
48
|
-
participantId: z.ZodString;
|
|
49
|
-
change: z.ZodEnum<typeof MembershipChange>;
|
|
50
|
-
eventId: z.ZodString;
|
|
51
|
-
}, z.core.$strip>], "event">;
|
|
52
|
-
export type ConversationEventInboundIface = z.infer<typeof conversationEventInboundSchema>;
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { roomMessageInputSchema } from "@finalai/agent-provider";
|
|
2
|
-
import * as z from "zod";
|
|
3
|
-
import { MembershipChange } from "./delivery.mjs";
|
|
4
|
-
const messageInboundSchema = roomMessageInputSchema;
|
|
5
|
-
var ConversationEventKind = /* @__PURE__ */ ((ConversationEventKind2) => {
|
|
6
|
-
ConversationEventKind2["Reaction"] = "reaction";
|
|
7
|
-
ConversationEventKind2["Membership"] = "membership";
|
|
8
|
-
return ConversationEventKind2;
|
|
9
|
-
})(ConversationEventKind || {});
|
|
10
|
-
const reactionInboundSchema = z.object({
|
|
11
|
-
event: z.literal("reaction" /* Reaction */),
|
|
12
|
-
conversationId: z.string().min(1),
|
|
13
|
-
messageId: z.string().min(1),
|
|
14
|
-
// The reacted message's position, so it is read back however old it is.
|
|
15
|
-
messageSeq: z.number().int().positive(),
|
|
16
|
-
// Whether it is its author's newest message ("your last message").
|
|
17
|
-
latestOfAuthor: z.boolean(),
|
|
18
|
-
reactorParticipantId: z.string().min(1),
|
|
19
|
-
emoji: z.string().min(1),
|
|
20
|
-
// A new persisted message revision distinguishes removing and re-adding a reaction.
|
|
21
|
-
eventId: z.string().min(1).optional()
|
|
22
|
-
});
|
|
23
|
-
const membershipInboundSchema = z.object({
|
|
24
|
-
event: z.literal("membership" /* Membership */),
|
|
25
|
-
conversationId: z.string().min(1),
|
|
26
|
-
participantId: z.string().min(1),
|
|
27
|
-
change: z.nativeEnum(MembershipChange),
|
|
28
|
-
// Distinguishes repeated joins and leaves of one participant.
|
|
29
|
-
eventId: z.string().min(1)
|
|
30
|
-
});
|
|
31
|
-
const conversationEventInboundSchema = z.discriminatedUnion("event", [
|
|
32
|
-
reactionInboundSchema,
|
|
33
|
-
membershipInboundSchema
|
|
34
|
-
]);
|
|
35
|
-
export {
|
|
36
|
-
ConversationEventKind,
|
|
37
|
-
conversationEventInboundSchema,
|
|
38
|
-
membershipInboundSchema,
|
|
39
|
-
messageInboundSchema,
|
|
40
|
-
reactionInboundSchema
|
|
41
|
-
};
|
|
42
|
-
//# sourceMappingURL=inbound.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../../src/channels/inbound.ts"],
|
|
4
|
-
"sourcesContent": ["import { roomMessageInputSchema } from '@finalai/agent-provider';\nimport * as z from 'zod';\nimport { MembershipChange } from \"./delivery.mjs\";\n\n// What the messaging channels receive: a message for an existing conversation,\n// authored by one of its participants (the HTTP API, an isolate callback).\nexport const messageInboundSchema = roomMessageInputSchema;\n\nexport type MessageInboundIface = z.infer<typeof messageInboundSchema>;\n\nexport enum ConversationEventKind {\n Reaction = 'reaction',\n Membership = 'membership',\n}\n\n// Conversation events that reach agents as observe-only system blocks.\nexport const reactionInboundSchema = z.object({\n event: z.literal(ConversationEventKind.Reaction),\n conversationId: z.string().min(1),\n messageId: z.string().min(1),\n // The reacted message's position, so it is read back however old it is.\n messageSeq: z.number().int().positive(),\n // Whether it is its author's newest message (\"your last message\").\n latestOfAuthor: z.boolean(),\n reactorParticipantId: z.string().min(1),\n emoji: z.string().min(1),\n // A new persisted message revision distinguishes removing and re-adding a reaction.\n eventId: z.string().min(1).optional(),\n});\n\nexport const membershipInboundSchema = z.object({\n event: z.literal(ConversationEventKind.Membership),\n conversationId: z.string().min(1),\n participantId: z.string().min(1),\n change: z.nativeEnum(MembershipChange),\n // Distinguishes repeated joins and leaves of one participant.\n eventId: z.string().min(1),\n});\n\nexport const conversationEventInboundSchema = z.discriminatedUnion('event', [\n reactionInboundSchema,\n membershipInboundSchema,\n]);\n\nexport type ConversationEventInboundIface = z.infer<typeof conversationEventInboundSchema>;\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,8BAA8B;AACvC,YAAY,OAAO;AACnB,SAAS,wBAAwB;AAI1B,MAAM,uBAAuB;AAI7B,IAAK,wBAAL,kBAAKA,2BAAL;AACL,EAAAA,uBAAA,cAAW;AACX,EAAAA,uBAAA,gBAAa;AAFH,SAAAA;AAAA,GAAA;AAML,MAAM,wBAAwB,EAAE,OAAO;AAAA,EAC5C,OAAO,EAAE,QAAQ,yBAA8B;AAAA,EAC/C,gBAAgB,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAChC,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA;AAAA,EAE3B,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA;AAAA,EAEtC,gBAAgB,EAAE,QAAQ;AAAA,EAC1B,sBAAsB,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA;AAAA,EAEvB,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AACtC,CAAC;AAEM,MAAM,0BAA0B,EAAE,OAAO;AAAA,EAC9C,OAAO,EAAE,QAAQ,6BAAgC;AAAA,EACjD,gBAAgB,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAChC,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC/B,QAAQ,EAAE,WAAW,gBAAgB;AAAA;AAAA,EAErC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC;AAC3B,CAAC;AAEM,MAAM,iCAAiC,EAAE,mBAAmB,SAAS;AAAA,EAC1E;AAAA,EACA;AACF,CAAC;",
|
|
6
|
-
"names": ["ConversationEventKind"]
|
|
7
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export * from "./content.mjs";
|
|
2
|
-
export * from "./delivery.mjs";
|
|
3
|
-
export * from "./direct-messaging.mjs";
|
|
4
|
-
export * from "./group-messaging.mjs";
|
|
5
|
-
export * from "./inbound.mjs";
|
|
6
|
-
export * from "./messaging-channel.mjs";
|
|
7
|
-
export * from "./projection.mjs";
|
|
8
|
-
export * from "./prompt.mjs";
|
|
9
|
-
export * from "./routing.mjs";
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export * from "./content.mjs";
|
|
2
|
-
export * from "./delivery.mjs";
|
|
3
|
-
export * from "./direct-messaging.mjs";
|
|
4
|
-
export * from "./group-messaging.mjs";
|
|
5
|
-
export * from "./inbound.mjs";
|
|
6
|
-
export * from "./messaging-channel.mjs";
|
|
7
|
-
export * from "./projection.mjs";
|
|
8
|
-
export * from "./prompt.mjs";
|
|
9
|
-
export * from "./routing.mjs";
|
|
10
|
-
//# sourceMappingURL=index.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../../src/channels/index.ts"],
|
|
4
|
-
"sourcesContent": ["export * from \"./content.mjs\";\nexport * from \"./delivery.mjs\";\nexport * from \"./direct-messaging.mjs\";\nexport * from \"./group-messaging.mjs\";\nexport * from \"./inbound.mjs\";\nexport * from \"./messaging-channel.mjs\";\nexport * from \"./projection.mjs\";\nexport * from \"./prompt.mjs\";\nexport * from \"./routing.mjs\";\n"],
|
|
5
|
-
"mappings": "AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { TurnPolicy, type RoomSurfaceDefinitionIface, type RoomReceiveContextIface, type ConversationRefIface, type JsonValue, type RouteArgsIface, type RouteDecisionIface } from '@finalai/agent-provider';
|
|
2
|
-
import { type ProjectorConfigIface } from "./projection.mjs";
|
|
3
|
-
export interface MessagingChannelConfigIface extends ProjectorConfigIface {
|
|
4
|
-
route?: (args: RouteArgsIface) => RouteDecisionIface[] | Promise<RouteDecisionIface[]>;
|
|
5
|
-
}
|
|
6
|
-
export declare const createConversationReceive: (turnPolicy: TurnPolicy, route?: NonNullable<MessagingChannelConfigIface["route"]>) => (input: JsonValue, ctx: RoomReceiveContextIface) => Promise<ConversationRefIface>;
|
|
7
|
-
export declare const createMessagingChannel: (config?: MessagingChannelConfigIface) => RoomSurfaceDefinitionIface<JsonValue, JsonValue>;
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
defineRoomSurface,
|
|
3
|
-
TurnPolicy
|
|
4
|
-
} from "@finalai/agent-provider";
|
|
5
|
-
import { contentBlocksOf } from "./content.mjs";
|
|
6
|
-
import { deliverMessage, membershipNotice, reactionNotice } from "./delivery.mjs";
|
|
7
|
-
import {
|
|
8
|
-
conversationEventInboundSchema,
|
|
9
|
-
ConversationEventKind,
|
|
10
|
-
messageInboundSchema
|
|
11
|
-
} from "./inbound.mjs";
|
|
12
|
-
import { createProjector } from "./projection.mjs";
|
|
13
|
-
import { routeMessage } from "./routing.mjs";
|
|
14
|
-
const receiveConversationEvent = async (event, ctx) => {
|
|
15
|
-
const participants = await ctx.platform.conversations.participants(event.conversationId);
|
|
16
|
-
if (event.event === ConversationEventKind.Membership) {
|
|
17
|
-
const subject = participants.find((participant) => participant.id === event.participantId);
|
|
18
|
-
if (subject != null) {
|
|
19
|
-
await membershipNotice({
|
|
20
|
-
platform: ctx.platform,
|
|
21
|
-
participants: participants.filter(
|
|
22
|
-
(participant) => !participant.left && (participant.kind !== "agent" || ctx.agentParticipantId == null || participant.id === ctx.agentParticipantId)
|
|
23
|
-
),
|
|
24
|
-
subject,
|
|
25
|
-
change: event.change,
|
|
26
|
-
idempotencyKey: `membership:${event.participantId}:${event.eventId}`
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
return { conversationId: event.conversationId };
|
|
30
|
-
}
|
|
31
|
-
const [message] = (await ctx.platform.conversations.recentMessages({
|
|
32
|
-
conversationId: event.conversationId,
|
|
33
|
-
beforeSeq: event.messageSeq + 1,
|
|
34
|
-
limit: 1
|
|
35
|
-
})).filter((candidate) => candidate.messageId === event.messageId);
|
|
36
|
-
if (message != null && (ctx.agentParticipantId == null || message.authorParticipantId === ctx.agentParticipantId)) {
|
|
37
|
-
await reactionNotice({
|
|
38
|
-
platform: ctx.platform,
|
|
39
|
-
participants,
|
|
40
|
-
message,
|
|
41
|
-
isLatestOfAuthor: event.latestOfAuthor,
|
|
42
|
-
reactorParticipantId: event.reactorParticipantId,
|
|
43
|
-
emoji: event.emoji,
|
|
44
|
-
eventId: event.eventId
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
return { conversationId: event.conversationId };
|
|
48
|
-
};
|
|
49
|
-
const createConversationReceive = (turnPolicy, route = routeMessage) => async (input, ctx) => {
|
|
50
|
-
const event = conversationEventInboundSchema.safeParse(input);
|
|
51
|
-
if (event.success) {
|
|
52
|
-
return receiveConversationEvent(event.data, ctx);
|
|
53
|
-
}
|
|
54
|
-
const inbound = messageInboundSchema.parse(input);
|
|
55
|
-
const conversation = ctx.conversation ?? await ctx.platform.conversations.get(inbound.conversationId);
|
|
56
|
-
if (conversation == null) {
|
|
57
|
-
throw new Error(`conversation ${inbound.conversationId} not found`);
|
|
58
|
-
}
|
|
59
|
-
const message = ctx.message ?? await ctx.platform.conversations.postMessage({
|
|
60
|
-
conversationId: inbound.conversationId,
|
|
61
|
-
authorParticipantId: inbound.authorParticipantId,
|
|
62
|
-
kind: inbound.kind,
|
|
63
|
-
content: contentBlocksOf(inbound.content),
|
|
64
|
-
clientMessageId: inbound.clientMessageId ?? null,
|
|
65
|
-
replyToMessageId: inbound.replyToMessageId ?? null,
|
|
66
|
-
threadRootId: inbound.threadRootId ?? null,
|
|
67
|
-
quotedMessageIds: inbound.quotedMessageIds,
|
|
68
|
-
mentionedParticipantIds: inbound.mentionedParticipantIds
|
|
69
|
-
});
|
|
70
|
-
await deliverMessage({
|
|
71
|
-
platform: ctx.platform,
|
|
72
|
-
route: async (args) => {
|
|
73
|
-
const requested = ctx.requestedDelivery != null && ctx.agentParticipantId != null && route === routeMessage ? [{ participantId: ctx.agentParticipantId, delivery: ctx.requestedDelivery }] : await route({ ...args, agentParticipantId: ctx.agentParticipantId });
|
|
74
|
-
return requested.filter(
|
|
75
|
-
(decision) => ctx.agentParticipantId == null || decision.participantId === ctx.agentParticipantId
|
|
76
|
-
);
|
|
77
|
-
},
|
|
78
|
-
conversation,
|
|
79
|
-
message,
|
|
80
|
-
participants: ctx.participants == null ? void 0 : [...ctx.participants],
|
|
81
|
-
turnPolicy
|
|
82
|
-
});
|
|
83
|
-
return { conversationId: conversation.conversationId };
|
|
84
|
-
};
|
|
85
|
-
const createMessagingChannel = (config = {}) => {
|
|
86
|
-
const turnPolicy = config.turnPolicy ?? TurnPolicy.Steer;
|
|
87
|
-
const projector = createProjector({ ...config, turnPolicy });
|
|
88
|
-
return defineRoomSurface({
|
|
89
|
-
receive: createConversationReceive(turnPolicy, config.route),
|
|
90
|
-
route: config.route ?? routeMessage,
|
|
91
|
-
turnPolicy,
|
|
92
|
-
project: projector.project
|
|
93
|
-
});
|
|
94
|
-
};
|
|
95
|
-
export {
|
|
96
|
-
createConversationReceive,
|
|
97
|
-
createMessagingChannel
|
|
98
|
-
};
|
|
99
|
-
//# sourceMappingURL=messaging-channel.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../../src/channels/messaging-channel.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n defineRoomSurface,\n TurnPolicy,\n type RoomSurfaceDefinitionIface,\n type RoomReceiveContextIface,\n type ConversationRefIface,\n type JsonValue,\n type RouteArgsIface,\n type RouteDecisionIface,\n} from '@finalai/agent-provider';\nimport { contentBlocksOf } from \"./content.mjs\";\nimport { deliverMessage, membershipNotice, reactionNotice } from \"./delivery.mjs\";\nimport {\n conversationEventInboundSchema,\n ConversationEventKind,\n messageInboundSchema,\n type ConversationEventInboundIface,\n} from \"./inbound.mjs\";\nimport { createProjector, type ProjectorConfigIface } from \"./projection.mjs\";\nimport { routeMessage } from \"./routing.mjs\";\n\n// `turnPolicy` (ProjectorConfigIface): steer unless configured; a conversation\n// set to queue overrides it.\nexport interface MessagingChannelConfigIface extends ProjectorConfigIface {\n route?: (args: RouteArgsIface) => RouteDecisionIface[] | Promise<RouteDecisionIface[]>;\n}\n\nconst receiveConversationEvent = async (\n event: ConversationEventInboundIface,\n ctx: RoomReceiveContextIface,\n): Promise<ConversationRefIface> => {\n const participants = await ctx.platform.conversations.participants(event.conversationId);\n if (event.event === ConversationEventKind.Membership) {\n const subject = participants.find((participant) => participant.id === event.participantId);\n if (subject != null) {\n await membershipNotice({\n platform: ctx.platform,\n participants: participants.filter(\n (participant) =>\n !participant.left &&\n (participant.kind !== 'agent' ||\n ctx.agentParticipantId == null ||\n participant.id === ctx.agentParticipantId),\n ),\n subject,\n change: event.change,\n idempotencyKey: `membership:${event.participantId}:${event.eventId}`,\n });\n }\n return { conversationId: event.conversationId };\n }\n const [message] = (\n await ctx.platform.conversations.recentMessages({\n conversationId: event.conversationId,\n beforeSeq: event.messageSeq + 1,\n limit: 1,\n })\n ).filter((candidate) => candidate.messageId === event.messageId);\n if (\n message != null &&\n (ctx.agentParticipantId == null || message.authorParticipantId === ctx.agentParticipantId)\n ) {\n await reactionNotice({\n platform: ctx.platform,\n participants,\n message,\n isLatestOfAuthor: event.latestOfAuthor,\n reactorParticipantId: event.reactorParticipantId,\n emoji: event.emoji,\n eventId: event.eventId,\n });\n }\n return { conversationId: event.conversationId };\n};\n\n// Persists the message before routing and delivering it to sessions,\n// using the channel's turnPolicy.\nexport const createConversationReceive =\n (\n turnPolicy: TurnPolicy,\n route: NonNullable<MessagingChannelConfigIface['route']> = routeMessage,\n ) =>\n async (input: JsonValue, ctx: RoomReceiveContextIface): Promise<ConversationRefIface> => {\n const event = conversationEventInboundSchema.safeParse(input);\n if (event.success) {\n return receiveConversationEvent(event.data, ctx);\n }\n const inbound = messageInboundSchema.parse(input);\n const conversation =\n ctx.conversation ?? (await ctx.platform.conversations.get(inbound.conversationId));\n if (conversation == null) {\n throw new Error(`conversation ${inbound.conversationId} not found`);\n }\n const message =\n ctx.message ??\n (await ctx.platform.conversations.postMessage({\n conversationId: inbound.conversationId,\n authorParticipantId: inbound.authorParticipantId,\n kind: inbound.kind,\n content: contentBlocksOf(inbound.content),\n clientMessageId: inbound.clientMessageId ?? null,\n replyToMessageId: inbound.replyToMessageId ?? null,\n threadRootId: inbound.threadRootId ?? null,\n quotedMessageIds: inbound.quotedMessageIds,\n mentionedParticipantIds: inbound.mentionedParticipantIds,\n }));\n await deliverMessage({\n platform: ctx.platform,\n route: async (args) => {\n const requested =\n ctx.requestedDelivery != null && ctx.agentParticipantId != null && route === routeMessage\n ? [{ participantId: ctx.agentParticipantId, delivery: ctx.requestedDelivery }]\n : await route({ ...args, agentParticipantId: ctx.agentParticipantId });\n return requested.filter(\n (decision) =>\n ctx.agentParticipantId == null || decision.participantId === ctx.agentParticipantId,\n );\n },\n conversation,\n message,\n participants: ctx.participants == null ? undefined : [...ctx.participants],\n turnPolicy,\n });\n return { conversationId: conversation.conversationId };\n };\n\n// The shared body of direct-messaging and group-messaging: one routing table\n// and one projection; the conversation kind selects the rules.\nexport const createMessagingChannel = (\n config: MessagingChannelConfigIface = {},\n): RoomSurfaceDefinitionIface<JsonValue, JsonValue> => {\n const turnPolicy = config.turnPolicy ?? TurnPolicy.Steer;\n const projector = createProjector({ ...config, turnPolicy });\n return defineRoomSurface<JsonValue, JsonValue>({\n receive: createConversationReceive(turnPolicy, config.route),\n route: config.route ?? routeMessage,\n turnPolicy,\n project: projector.project,\n });\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|