@opentag/dispatcher 0.3.0 → 0.3.2
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/dist/callbacks.d.ts.map +1 -1
- package/dist/index.js +1600 -250
- package/dist/index.js.map +1 -1
- package/dist/presentation.d.ts +40 -1
- package/dist/presentation.d.ts.map +1 -1
- package/dist/server.d.ts +28 -2
- package/dist/server.d.ts.map +1 -1
- package/package.json +7 -7
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/callbacks.ts","../src/presentation.ts","../src/server.ts","../src/admission.ts"],"sourcesContent":["import { createLarkReplyClient, type LarkReplyClient, parseLarkThreadKey, replyLarkMessage } from \"@opentag/lark\";\nimport {\n createSlackPostMessagePayload,\n createSlackReactionPayload,\n createSlackUpdateMessagePayload,\n parseSlackThreadKey,\n slackSourceReceiptReactionName\n} from \"@opentag/slack\";\nimport { createTelegramSendMessageDraftPayload, createTelegramSendMessagePayload, parseTelegramThreadKey } from \"@opentag/telegram\";\nimport type { CallbackMessage, CallbackSink, SourceReceipt, SourceReceiptSink } from \"./server.js\";\n\nexport type FetchLike = typeof fetch;\n\nconst DEFAULT_SLACK_SOURCE_RECEIPT_TIMEOUT_MS = 5_000;\n\nfunction slackUpdateUriFrom(postMessageUri: string): string {\n return postMessageUri.replace(/\\/chat\\.postMessage$/, \"/chat.update\");\n}\n\nfunction githubCommentUriFrom(input: { commentsUri: string; responseBody: { id?: number; url?: string } }): string | undefined {\n if (input.responseBody.url) return input.responseBody.url;\n if (typeof input.responseBody.id === \"number\") {\n return input.commentsUri.replace(/\\/comments$/, `/comments/${input.responseBody.id}`);\n }\n return undefined;\n}\n\nfunction slackBotTokenFor(input: {\n botToken?: string | undefined;\n botTokensByAgentId?: Record<string, string> | undefined;\n agentId?: string | undefined;\n}): string | undefined {\n if (\n input.agentId &&\n input.botTokensByAgentId &&\n Object.hasOwn(input.botTokensByAgentId, input.agentId) &&\n typeof input.botTokensByAgentId[input.agentId] === \"string\"\n ) {\n return input.botTokensByAgentId[input.agentId];\n }\n return input.botToken;\n}\n\nfunction metadataString(metadata: Record<string, unknown>, key: string): string | undefined {\n const value = metadata[key];\n return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nfunction slackSourceMessageTarget(receipt: SourceReceipt): { channelId: string; messageTs: string } | null {\n if (receipt.provider !== \"slack\") return null;\n const channelId = metadataString(receipt.event.metadata, \"channelId\");\n const messageTs = metadataString(receipt.event.metadata, \"messageTs\");\n return channelId && messageTs ? { channelId, messageTs } : null;\n}\n\nfunction isAbortError(error: unknown): boolean {\n return error instanceof Error && error.name === \"AbortError\";\n}\n\nasync function fetchWithTimeout(input: {\n fetchImpl: FetchLike;\n uri: string;\n init: RequestInit;\n timeoutMs: number;\n}): Promise<Response | null> {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), input.timeoutMs);\n try {\n return await input.fetchImpl(input.uri, { ...input.init, signal: controller.signal });\n } catch (error) {\n if (isAbortError(error)) return null;\n throw error;\n } finally {\n clearTimeout(timeout);\n }\n}\n\nexport function createGitHubCallbackSink(input: { token?: string; fetchImpl?: FetchLike }): CallbackSink {\n const fetchImpl = input.fetchImpl ?? fetch;\n const commentUriByKey = new Map<string, string>();\n const deliveryByKey = new Map<string, Promise<void>>();\n\n return {\n async deliver(message: CallbackMessage): Promise<void> {\n if (message.provider !== \"github\") return;\n if (!input.token) return;\n\n const statusKey = message.statusMessageKey ?? `${message.runId}:status`;\n const previous = deliveryByKey.get(statusKey) ?? Promise.resolve();\n const current = previous.then(async () => {\n const existingCommentUri = commentUriByKey.get(statusKey);\n const response = await fetchImpl(existingCommentUri ?? message.uri, {\n method: existingCommentUri ? \"PATCH\" : \"POST\",\n headers: {\n accept: \"application/vnd.github+json\",\n authorization: `Bearer ${input.token}`,\n \"content-type\": \"application/json\",\n \"x-github-api-version\": \"2022-11-28\"\n },\n body: JSON.stringify({ body: message.body })\n });\n\n if (!response.ok) {\n throw new Error(`deliver GitHub callback failed: ${response.status} ${await response.text()}`);\n }\n if (!existingCommentUri) {\n const body = (await response.json()) as { id?: number; url?: string };\n const commentUri = githubCommentUriFrom({ commentsUri: message.uri, responseBody: body });\n if (commentUri) {\n commentUriByKey.set(statusKey, commentUri);\n }\n }\n if (message.kind === \"final\") {\n commentUriByKey.delete(statusKey);\n }\n });\n deliveryByKey.set(statusKey, current);\n await current.finally(() => {\n if (deliveryByKey.get(statusKey) === current) {\n deliveryByKey.delete(statusKey);\n }\n });\n }\n };\n}\n\nexport function createSlackCallbackSink(input: {\n botToken?: string;\n botTokensByAgentId?: Record<string, string>;\n fetchImpl?: FetchLike;\n}): CallbackSink {\n const fetchImpl = input.fetchImpl ?? fetch;\n const statusMessageTsByKey = new Map<string, string>();\n\n return {\n async deliver(message: CallbackMessage): Promise<void> {\n if (message.provider !== \"slack\") return;\n const botToken = slackBotTokenFor({\n botToken: input.botToken,\n botTokensByAgentId: input.botTokensByAgentId,\n agentId: message.agentId\n });\n if (!botToken) return;\n\n const thread = parseSlackThreadKey(message.threadKey ?? \"\");\n const existingStatusTs = message.statusMessageKey ? statusMessageTsByKey.get(message.statusMessageKey) : undefined;\n const response = await fetchImpl(existingStatusTs ? slackUpdateUriFrom(message.uri) : message.uri, {\n method: \"POST\",\n headers: {\n authorization: `Bearer ${botToken}`,\n \"content-type\": \"application/json\"\n },\n body: JSON.stringify(\n existingStatusTs\n ? createSlackUpdateMessagePayload({\n channelId: thread.channelId,\n text: message.body,\n messageTs: existingStatusTs,\n ...(message.blocks?.length ? { blocks: message.blocks } : {})\n })\n : createSlackPostMessagePayload({\n channelId: thread.channelId,\n text: message.body,\n threadTs: thread.threadTs,\n ...(message.blocks?.length ? { blocks: message.blocks } : {})\n })\n )\n });\n\n if (!response.ok) {\n throw new Error(`deliver Slack callback failed: ${response.status} ${await response.text()}`);\n }\n const body = (await response.json()) as { ok?: boolean; error?: string; ts?: string };\n if (body.ok === false) {\n throw new Error(`deliver Slack callback failed: ${body.error ?? \"unknown_error\"}`);\n }\n if (message.statusMessageKey && !existingStatusTs && body.ts) {\n statusMessageTsByKey.set(message.statusMessageKey, body.ts);\n }\n if (message.kind === \"final\") {\n for (const key of statusMessageTsByKey.keys()) {\n if (key.startsWith(`${message.runId}:`)) {\n statusMessageTsByKey.delete(key);\n }\n }\n }\n }\n };\n}\n\nexport function createSlackSourceReceiptSink(input: {\n botToken?: string;\n botTokensByAgentId?: Record<string, string>;\n fetchImpl?: FetchLike;\n reactionsAddUri?: string;\n timeoutMs?: number;\n}): SourceReceiptSink {\n const fetchImpl = input.fetchImpl ?? fetch;\n const reactionsAddUri = input.reactionsAddUri ?? \"https://slack.com/api/reactions.add\";\n const timeoutMs = input.timeoutMs ?? DEFAULT_SLACK_SOURCE_RECEIPT_TIMEOUT_MS;\n\n return {\n async deliver(receipt: SourceReceipt) {\n const target = slackSourceMessageTarget(receipt);\n if (!target) return { delivered: false };\n\n const botToken = slackBotTokenFor({\n botToken: input.botToken,\n botTokensByAgentId: input.botTokensByAgentId,\n agentId: receipt.agentId\n });\n if (!botToken) return { delivered: false };\n\n const response = await fetchWithTimeout({\n fetchImpl,\n uri: reactionsAddUri,\n timeoutMs,\n init: {\n method: \"POST\",\n headers: {\n authorization: `Bearer ${botToken}`,\n \"content-type\": \"application/json\"\n },\n body: JSON.stringify(\n createSlackReactionPayload({\n channelId: target.channelId,\n messageTs: target.messageTs,\n name: slackSourceReceiptReactionName(receipt.state)\n })\n )\n }\n });\n if (!response) return { delivered: false };\n\n if (!response.ok) {\n throw new Error(`deliver Slack source receipt failed: ${response.status} ${await response.text()}`);\n }\n const body = (await response.json().catch(() => ({}))) as { ok?: boolean; error?: string } | null;\n if (body?.ok === false && body.error !== \"already_reacted\") {\n throw new Error(`deliver Slack source receipt failed: ${body?.error ?? \"unknown_error\"}`);\n }\n return { delivered: true };\n }\n };\n}\n\nexport function createLarkCallbackSink(input: {\n appId?: string;\n appSecret?: string;\n domain?: \"lark\" | \"feishu\";\n client?: LarkReplyClient;\n}): CallbackSink {\n // Reject partial credentials so a misconfigured sink fails at startup, not silently.\n if (!input.client && Boolean(input.appId) !== Boolean(input.appSecret)) {\n throw new Error(\"Lark callback sink requires both appId and appSecret (or neither).\");\n }\n\n const client: LarkReplyClient | undefined =\n input.client ??\n (input.appId && input.appSecret\n ? createLarkReplyClient({ appId: input.appId, appSecret: input.appSecret, ...(input.domain ? { domain: input.domain } : {}) })\n : undefined);\n\n return {\n async deliver(message: CallbackMessage): Promise<void> {\n if (message.provider !== \"lark\") return;\n // A lark run was accepted, so a missing client/threadKey is a real failure, not a silent success.\n if (!client) {\n throw new Error(\"Lark callback sink received a lark message but has no client configured (missing appId/appSecret).\");\n }\n if (!message.threadKey) {\n throw new Error(\"Lark callback message is missing threadKey.\");\n }\n const { messageId } = parseLarkThreadKey(message.threadKey);\n await replyLarkMessage(client, { messageId, text: message.body });\n }\n };\n}\n\nexport function createTelegramCallbackSink(input: {\n botToken?: string;\n botTokensByAgentId?: Record<string, string>;\n fetchImpl?: FetchLike;\n}): CallbackSink {\n const fetchImpl = input.fetchImpl ?? fetch;\n const draftIdByKey = new Map<string, number>();\n let nextDraftId = 1;\n\n return {\n async deliver(message: CallbackMessage): Promise<void> {\n if (message.provider !== \"telegram\") return;\n const botToken = slackBotTokenFor({\n botToken: input.botToken,\n botTokensByAgentId: input.botTokensByAgentId,\n agentId: message.agentId\n });\n if (!botToken) return;\n\n const thread = parseTelegramThreadKey(message.threadKey ?? \"\");\n const statusKey = message.statusMessageKey ?? `${message.runId}:status`;\n const isDraft = message.kind === \"progress\";\n const draftId = isDraft ? (draftIdByKey.get(statusKey) ?? nextDraftId++) : undefined;\n if (isDraft && draftId && !draftIdByKey.has(statusKey)) {\n draftIdByKey.set(statusKey, draftId);\n }\n\n const response = await fetchImpl(`https://api.telegram.org/bot${botToken}/${isDraft ? \"sendMessageDraft\" : \"sendMessage\"}`, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\"\n },\n body: JSON.stringify(\n isDraft\n ? createTelegramSendMessageDraftPayload({\n chatId: thread.chatId,\n text: message.body,\n draftId: draftId!,\n ...(thread.messageThreadId ? { messageThreadId: thread.messageThreadId } : {})\n })\n : createTelegramSendMessagePayload({\n chatId: thread.chatId,\n text: message.body,\n replyToMessageId: thread.replyToMessageId,\n ...(thread.messageThreadId ? { messageThreadId: thread.messageThreadId } : {})\n })\n )\n });\n\n if (!response.ok) {\n throw new Error(`deliver Telegram callback failed: ${response.status} ${await response.text()}`);\n }\n const body = (await response.json()) as { ok?: boolean; description?: string };\n if (body.ok === false) {\n throw new Error(`deliver Telegram callback failed: ${body.description ?? \"unknown_error\"}`);\n }\n if (message.kind === \"final\") {\n draftIdByKey.delete(statusKey);\n }\n }\n };\n}\n\nexport function createCompositeCallbackSink(sinks: CallbackSink[]): CallbackSink {\n return {\n async deliver(message: CallbackMessage): Promise<void> {\n for (const sink of sinks) {\n await sink.deliver(message);\n }\n }\n };\n}\n","import type { OpenTagRunResult } from \"@opentag/core\";\nimport { renderAcknowledgement, renderFinalResult, renderProgress } from \"@opentag/github\";\nimport { renderLarkAcknowledgement, renderLarkFinalResult } from \"@opentag/lark\";\nimport { createSlackFinalResultBlocks, renderSlackAcknowledgement, renderSlackFinalResult, type SlackBlock } from \"@opentag/slack\";\nimport { renderTelegramAcknowledgement, renderTelegramFinalResult, renderTelegramProgress } from \"@opentag/telegram\";\nimport type { CallbackMessage } from \"./server.js\";\n\nexport type CallbackProvider = CallbackMessage[\"provider\"];\n\nexport type PresentedCallbackBody = {\n body: string;\n blocks?: SlackBlock[];\n};\n\nexport type CallbackPresentation = {\n shouldDeliverAcknowledgement(provider: CallbackProvider): boolean;\n shouldDeliverProgress(provider: CallbackProvider): boolean;\n acknowledgement(input: { provider: CallbackProvider; runId: string }): string;\n progress(input: { provider: CallbackProvider; runId: string; message: string }): string;\n final(input: { provider: CallbackProvider; result: OpenTagRunResult }): PresentedCallbackBody;\n};\n\nexport function createDefaultCallbackPresentation(): CallbackPresentation {\n return {\n shouldDeliverAcknowledgement(provider) {\n return provider !== \"lark\" && provider !== \"slack\";\n },\n\n shouldDeliverProgress(provider) {\n return provider !== \"slack\" && provider !== \"lark\";\n },\n\n acknowledgement(input) {\n if (input.provider === \"slack\") {\n return renderSlackAcknowledgement(input.runId);\n }\n if (input.provider === \"lark\") {\n return renderLarkAcknowledgement(input.runId);\n }\n if (input.provider === \"telegram\") {\n return renderTelegramAcknowledgement(input.runId);\n }\n return renderAcknowledgement(input.runId);\n },\n\n progress(input) {\n if (input.provider === \"telegram\") {\n return renderTelegramProgress(input.message);\n }\n return renderProgress({ runId: input.runId, message: input.message });\n },\n\n final(input) {\n if (input.provider === \"slack\") {\n return {\n body: renderSlackFinalResult(input.result),\n blocks: createSlackFinalResultBlocks(input.result)\n };\n }\n if (input.provider === \"lark\") {\n return { body: renderLarkFinalResult(input.result) };\n }\n if (input.provider === \"telegram\") {\n return { body: renderTelegramFinalResult(input.result) };\n }\n return { body: renderFinalResult(input.result) };\n }\n };\n}\n","import { createHash } from \"node:crypto\";\nimport {\n AdapterMutationMappingSchema,\n ActorIdentitySchema,\n ActionHintSchema,\n conversationKeysFromEvent,\n parseThreadActionCommand,\n projectTargetRefFromEvent,\n suggestedActionCandidatesFromSnapshots,\n type ActorIdentity,\n type ApplyIntentOutcome,\n type ApplyPlan,\n type MutationIntent,\n type OpenTagEvent,\n type OpenTagRun,\n type PermissionGrant,\n type SuggestedChangesSnapshot,\n type SuggestedActionCandidate,\n type ThreadActionCommand,\n createAdapterMutationCompilerRegistry,\n OpenTagEventSchema,\n OpenTagRunResultSchema,\n PolicyRuleSchema,\n RunEventImportanceSchema,\n RunEventVisibilitySchema\n} from \"@opentag/core\";\nimport {\n applyGitHubIssueMutationOperation,\n createGitHubIssueMutationCompiler,\n type FetchLike as GitHubFetchLike\n} from \"@opentag/github\";\nimport type { GitHubIssueMutationOperation } from \"@opentag/github\";\nimport type { SlackBlock } from \"@opentag/slack\";\nimport { createOpenTagRepository, migrateSchema } from \"@opentag/store\";\nimport Database from \"better-sqlite3\";\nimport { drizzle } from \"drizzle-orm/better-sqlite3\";\nimport { Hono } from \"hono\";\nimport type { Context } from \"hono\";\nimport { HTTPException } from \"hono/http-exception\";\nimport { z } from \"zod\";\n\n/**\n * Parse and validate a request body, mapping ONLY request-body parse failures to\n * HTTP 400. Malformed JSON (SyntaxError from c.req.json()) and request-schema\n * validation failures (ZodError from schema.parse()) are tagged as HTTPException\n * with status 400 so the global onError handler can return them as client errors\n * without masking unrelated internal ZodError/SyntaxError as 400s. Any other\n * error is rethrown unchanged and falls through to a 500.\n */\nasync function parseBody<S extends z.ZodTypeAny>(c: Context, schema: S): Promise<z.infer<S>> {\n let json: unknown;\n try {\n json = await c.req.json();\n } catch (err) {\n if (err instanceof SyntaxError) {\n throw new HTTPException(400, {\n res: c.json({ error: \"invalid_json_body\" }, 400)\n });\n }\n throw err;\n }\n\n const result = schema.safeParse(json);\n if (!result.success) {\n throw new HTTPException(400, {\n res: c.json({ error: \"invalid_request_body\", issues: result.error.issues }, 400)\n });\n }\n return result.data;\n}\nimport { createAdmissionRuntime, type AgentAccessProfileCheck } from \"./admission.js\";\nimport { createDefaultCallbackPresentation, type CallbackPresentation } from \"./presentation.js\";\n\nconst CreateRunnerSchema = z.object({\n runnerId: z.string().min(1),\n name: z.string().min(1)\n});\n\nconst CreateRepoBindingSchema = z.object({\n provider: z.string().min(1),\n owner: z.string().min(1),\n repo: z.string().min(1),\n runnerId: z.string().min(1),\n workspacePath: z.string().min(1).optional(),\n defaultExecutor: z.string().min(1).optional(),\n allowedActors: z.array(z.string().min(1)).optional()\n});\n\nconst CreateSlackChannelBindingSchema = z.object({\n teamId: z.string().min(1),\n channelId: z.string().min(1),\n repoProvider: z.string().min(1).default(\"github\"),\n owner: z.string().min(1),\n repo: z.string().min(1)\n});\n\nconst CreateChannelBindingSchema = z.object({\n provider: z.string().min(1),\n accountId: z.string().min(1),\n conversationId: z.string().min(1),\n repoProvider: z.string().min(1),\n owner: z.string().min(1),\n repo: z.string().min(1),\n metadata: z.record(z.string(), z.unknown()).optional()\n});\n\nconst UpsertPolicyRuleSchema = z.object({\n rule: PolicyRuleSchema\n});\n\nconst UpsertMutationMappingSchema = z.object({\n mapping: AdapterMutationMappingSchema\n});\n\nconst CreateRunSchema = z.object({\n runId: z.string().min(1),\n event: OpenTagEventSchema\n});\n\nconst PromoteFollowUpRequestSchema = z.object({\n runId: z.string().min(1)\n});\n\nconst CompleteRunSchema = z.object({\n result: OpenTagRunResultSchema\n});\n\nconst ApprovalDecisionInputSchema = z.object({\n id: z.string().min(1).optional(),\n approvedIntentIds: z.array(z.string().min(1)),\n rejectedIntentIds: z.array(z.string().min(1)).optional(),\n approvedBy: ActorIdentitySchema,\n approvedAt: z.string().datetime().optional(),\n scope: z.enum([\"manual\", \"policy\"]).default(\"manual\"),\n reason: z.string().min(1).optional(),\n metadata: z.record(z.string(), z.unknown()).optional()\n}).refine((value) => {\n const rejected = new Set(value.rejectedIntentIds ?? []);\n return value.approvedIntentIds.every((intentId) => !rejected.has(intentId));\n}, {\n message: \"approvedIntentIds and rejectedIntentIds must not overlap\"\n});\n\nconst ApplyPlanInputSchema = z.object({\n id: z.string().min(1).optional(),\n approvalDecisionId: z.string().min(1),\n selectedIntentIds: z.array(z.string().min(1)).optional(),\n adapter: z.string().min(1).optional(),\n execute: z.boolean().optional()\n});\n\nconst ThreadActionInputSchema = z.object({\n id: z.string().min(1).optional(),\n rawText: z.string().min(1),\n actor: ActorIdentitySchema,\n callback: z.object({\n provider: z.string().min(1),\n uri: z.string().min(1),\n threadKey: z.string().min(1).optional()\n }),\n metadata: z.record(z.string(), z.unknown()).optional()\n});\n\nconst ChildRunInputSchema = z.object({\n runId: z.string().min(1),\n action: ActionHintSchema,\n commandText: z.string().min(1).optional(),\n sourceProposalId: z.string().min(1).optional(),\n sourceApplyPlanId: z.string().min(1).optional()\n});\n\nconst ProgressSchema = z.object({\n type: z.string().min(1).optional(),\n message: z.string().min(1),\n at: z.string().datetime().optional(),\n visibility: RunEventVisibilitySchema.optional(),\n importance: RunEventImportanceSchema.optional()\n});\n\nfunction childEventFromParent(input: {\n parentEvent: OpenTagEvent;\n childRunId: string;\n commandText?: string;\n actionKind: string;\n receivedAt: string;\n extraContext?: OpenTagEvent[\"context\"];\n metadata?: Record<string, unknown>;\n permissions?: PermissionGrant[];\n}): OpenTagEvent {\n return {\n ...input.parentEvent,\n id: `evt_${input.childRunId}`,\n sourceEventId: `${input.parentEvent.sourceEventId}:${input.childRunId}`,\n receivedAt: input.receivedAt,\n context: [...input.parentEvent.context, ...(input.extraContext ?? [])],\n command: {\n rawText: input.commandText ?? `Execute next action: ${input.actionKind}`,\n intent: \"run\",\n args: {\n parentSourceEventId: input.parentEvent.sourceEventId,\n actionKind: input.actionKind\n }\n },\n metadata: {\n ...input.parentEvent.metadata,\n ...(input.metadata ?? {})\n },\n permissions: input.permissions ?? input.parentEvent.permissions\n };\n}\n\nfunction mappingsFromAdapterPlan(adapterPlan: unknown) {\n if (!adapterPlan || typeof adapterPlan !== \"object\" || Array.isArray(adapterPlan)) return [];\n const mappings = (adapterPlan as { mappings?: unknown }).mappings;\n if (!Array.isArray(mappings)) return [];\n return mappings.map((mapping) => AdapterMutationMappingSchema.parse(mapping));\n}\n\nfunction conversationKeyFromCallback(input: { provider: string; uri: string; threadKey?: string | undefined }): string {\n return `${input.provider}:${input.threadKey ?? input.uri}`;\n}\n\nfunction metadataIssueNumber(metadata: Record<string, unknown> | undefined): string | undefined {\n const value = metadata?.[\"issueNumber\"];\n if (typeof value === \"number\" && Number.isInteger(value) && value > 0) return String(value);\n if (typeof value === \"string\" && /^[1-9]\\d*$/.test(value)) return value;\n return undefined;\n}\n\nfunction metadataString(metadata: Record<string, unknown> | undefined, key: string): string | undefined {\n const value = metadata?.[key];\n return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nfunction githubIssueWorkItemExternalId(metadata: Record<string, unknown> | undefined): string | undefined {\n const owner = metadataString(metadata, \"owner\");\n const repo = metadataString(metadata, \"repo\");\n const issueNumber = metadataIssueNumber(metadata);\n if (!owner || !repo || !issueNumber) return undefined;\n return `${owner}/${repo}#${issueNumber}`;\n}\n\nfunction conversationKeysFromThreadAction(input: {\n callback: { provider: string; uri: string; threadKey?: string | undefined };\n metadata?: Record<string, unknown> | undefined;\n}): string[] {\n const primary = conversationKeyFromCallback(input.callback);\n const keys = [primary];\n const issueNumber = metadataIssueNumber(input.metadata);\n if (input.callback.provider === \"github\" && input.callback.threadKey && issueNumber) {\n const suffix = `#${issueNumber}`;\n if (input.callback.threadKey.endsWith(suffix)) {\n keys.push(`github:${input.callback.threadKey.slice(0, -suffix.length)}`);\n }\n }\n return [...new Set(keys)];\n}\n\nfunction proposalMatchesWorkItem(proposal: ActionProposal, externalId: string): boolean {\n return proposal.snapshot.workThread?.workItemReference.externalId === externalId || proposal.event.workItem?.externalId === externalId;\n}\n\nfunction stableHash(value: string): string {\n return createHash(\"sha256\").update(value).digest(\"hex\").slice(0, 12);\n}\n\nfunction stableId(prefix: string, parts: unknown[]): string {\n return `${prefix}_${stableHash(JSON.stringify(parts))}`;\n}\n\nfunction actorKeys(actor: ActorIdentity): string[] {\n return [\n actor.providerUserId,\n actor.handle,\n `${actor.provider}:${actor.providerUserId}`,\n actor.handle ? `${actor.provider}:${actor.handle}` : undefined\n ].filter((value): value is string => typeof value === \"string\" && value.length > 0);\n}\n\nfunction actorAllowedByList(actor: ActorIdentity, allowedActors: string[] | undefined): boolean {\n if (!allowedActors?.length) return true;\n const keys = new Set(actorKeys(actor));\n return allowedActors.some((allowedActor) => keys.has(allowedActor));\n}\n\ntype ActionProposal = {\n runId: string;\n run: OpenTagRun;\n event: OpenTagEvent;\n snapshot: SuggestedChangesSnapshot;\n};\n\ntype ResolvedThreadAction = {\n proposal: ActionProposal;\n selectedIntentIds: string[];\n selectedCandidates: Array<SuggestedActionCandidate & { proposal: ActionProposal }>;\n};\n\ntype ResolveThreadActionResult =\n | { ok: true; resolved: ResolvedThreadAction }\n | { ok: false; reason: \"no_proposal\" | \"no_match\" | \"ambiguous\"; message: string; runId?: string | undefined };\n\nfunction actionCandidatesFor(proposals: ActionProposal[]): Array<SuggestedActionCandidate & { proposal: ActionProposal }> {\n const candidates: Array<SuggestedActionCandidate & { proposal: ActionProposal }> = [];\n let startIndex = 1;\n for (const proposal of proposals) {\n const proposalCandidates = suggestedActionCandidatesFromSnapshots([proposal.snapshot], startIndex).map((candidate) => ({\n ...candidate,\n proposal\n }));\n candidates.push(...proposalCandidates);\n startIndex += proposalCandidates.length;\n }\n return candidates;\n}\n\nfunction resolveCandidateSelection(input: {\n command: ThreadActionCommand;\n proposals: ActionProposal[];\n}): ResolveThreadActionResult {\n const candidates = actionCandidatesFor(input.proposals);\n if (candidates.length === 0) {\n return { ok: false, reason: \"no_proposal\", message: \"I could not find any suggested actions for this thread.\" };\n }\n\n let selected: Array<SuggestedActionCandidate & { proposal: ActionProposal }> = [];\n const selection = input.command.selection;\n if (selection.kind === \"all\") {\n selected = candidates;\n } else if (selection.kind === \"index\") {\n selected = candidates.filter((candidate) => candidate.index === selection.index);\n } else if (selection.kind === \"proposal\") {\n selected = candidates.filter((candidate) => candidate.proposalId === selection.proposalId);\n } else if (selection.kind === \"intent\") {\n selected = candidates.filter((candidate) => candidate.intent.intentId === selection.intentId);\n } else if (selection.kind === \"domain\") {\n selected = candidates.filter((candidate) => candidate.intent.domain === selection.domain);\n } else if (candidates.length === 1) {\n selected = candidates;\n } else {\n return {\n ok: false,\n reason: \"ambiguous\",\n runId: candidates[0]?.proposal.runId,\n message: `I found ${candidates.length} suggested actions. Please reply with ${candidates\n .map((candidate) => `\\`${input.command.verb} ${candidate.index}\\``)\n .join(\", \")} or \\`${input.command.verb} all\\`.`\n };\n }\n\n if (selected.length === 0) {\n return {\n ok: false,\n reason: \"no_match\",\n runId: candidates[0]?.proposal.runId,\n message: \"I could not match that reply to a suggested action. Please use an action number like `apply 1`.\"\n };\n }\n\n const proposalIds = new Set(selected.map((candidate) => candidate.proposalId));\n if (proposalIds.size !== 1) {\n return {\n ok: false,\n reason: \"ambiguous\",\n runId: selected[0]?.proposal.runId,\n message: \"That selection spans multiple proposals. Please apply or approve one proposal at a time using its action number.\"\n };\n }\n\n return {\n ok: true,\n resolved: {\n proposal: selected[0]!.proposal,\n selectedIntentIds: selected.map((candidate) => candidate.intent.intentId),\n selectedCandidates: selected\n }\n };\n}\n\nasync function resolveThreadAction(input: {\n repo: ReturnType<typeof createOpenTagRepository>;\n command: ThreadActionCommand;\n callback: { provider: string; uri: string; threadKey?: string | undefined };\n metadata?: Record<string, unknown> | undefined;\n}): Promise<ResolveThreadActionResult> {\n const conversationKeys = conversationKeysFromThreadAction({\n callback: input.callback,\n ...(input.metadata ? { metadata: input.metadata } : {})\n });\n const primaryConversationKey = conversationKeys[0];\n const targetWorkItemExternalId = githubIssueWorkItemExternalId(input.metadata);\n if (input.command.selection.kind === \"proposal\") {\n const stored = await input.repo.getSuggestedChanges({ proposalId: input.command.selection.proposalId });\n if (!stored) {\n return { ok: false, reason: \"no_proposal\", message: `I could not find proposal \\`${input.command.selection.proposalId}\\`.` };\n }\n const claimed = await input.repo.getRun({ runId: stored.runId });\n if (!claimed) {\n return { ok: false, reason: \"no_proposal\", message: `I found the proposal but not its source run.` };\n }\n const proposalConversationKeys = conversationKeysFromEvent(claimed.event);\n if (!proposalConversationKeys.some((key) => conversationKeys.includes(key))) {\n return { ok: false, reason: \"no_match\", runId: stored.runId, message: \"That proposal does not belong to this source thread.\" };\n }\n const proposal = { runId: stored.runId, run: claimed.run, event: claimed.event, snapshot: stored.snapshot };\n if (targetWorkItemExternalId && !proposalMatchesWorkItem(proposal, targetWorkItemExternalId)) {\n return { ok: false, reason: \"no_match\", runId: stored.runId, message: \"That proposal does not belong to this source thread.\" };\n }\n return resolveCandidateSelection({\n command: input.command,\n proposals: [proposal]\n });\n }\n\n for (const conversationKey of conversationKeys) {\n const proposals = await input.repo.listLatestSuggestedChangesForConversation({ conversationKey });\n const scopedProposals =\n conversationKey !== primaryConversationKey && targetWorkItemExternalId\n ? proposals.filter((proposal) => proposalMatchesWorkItem(proposal, targetWorkItemExternalId))\n : proposals;\n if (scopedProposals.length > 0) return resolveCandidateSelection({ command: input.command, proposals: scopedProposals });\n }\n return resolveCandidateSelection({ command: input.command, proposals: [] });\n}\n\nfunction isGitHubRepoEvent(event: OpenTagEvent): boolean {\n const repoProvider = event.metadata[\"repoProvider\"];\n return repoProvider === \"github\" || (event.source === \"github\" && repoProvider === undefined);\n}\n\nfunction hasGitHubRepoTarget(event: OpenTagEvent): boolean {\n return isGitHubRepoEvent(event) && typeof event.metadata[\"owner\"] === \"string\" && typeof event.metadata[\"repo\"] === \"string\";\n}\n\nfunction hasGitHubIssueOrPullTarget(event: OpenTagEvent): boolean {\n return typeof event.metadata[\"issueNumber\"] === \"number\" || typeof event.metadata[\"pullRequestNumber\"] === \"number\";\n}\n\nfunction isRepoLevelGitHubIntent(intent: MutationIntent): boolean {\n return intent.action === \"create_pull_request\";\n}\n\nfunction adapterForAction(input: { event: OpenTagEvent; callbackProvider: string; selectedIntents: MutationIntent[] }): string {\n return hasGitHubRepoTarget(input.event) &&\n (hasGitHubIssueOrPullTarget(input.event) ||\n (input.selectedIntents.length > 0 && input.selectedIntents.every((intent) => isRepoLevelGitHubIntent(intent))))\n ? \"github\"\n : input.callbackProvider;\n}\n\nasync function authorizeThreadAction(input: {\n repo: ReturnType<typeof createOpenTagRepository>;\n resolved: ResolvedThreadAction;\n actor: ActorIdentity;\n}): Promise<{ ok: true } | { ok: false; reason: string; message: string }> {\n const repoKey = projectTargetRefFromEvent(input.resolved.proposal.event);\n if (!repoKey) {\n return { ok: false, reason: \"repo_context_missing\", message: \"The proposal does not resolve to a repository binding.\" };\n }\n\n const binding = await input.repo.getRepoBinding(repoKey);\n if (!binding) {\n return { ok: false, reason: \"repo_binding_not_found\", message: \"No repository binding is configured for this proposal.\" };\n }\n\n if (!actorAllowedByList(input.actor, binding.allowedActors)) {\n return {\n ok: false,\n reason: \"actor_not_allowed\",\n message: \"This actor is not allowed to approve or apply actions for the bound repository.\"\n };\n }\n\n if (input.resolved.proposal.event.source === \"slack\") {\n const teamId = input.resolved.proposal.event.metadata[\"teamId\"];\n const channelId = input.resolved.proposal.event.metadata[\"channelId\"];\n if (typeof teamId === \"string\" && typeof channelId === \"string\") {\n const channelBinding = await input.repo.getChannelBinding({\n provider: \"slack\",\n accountId: teamId,\n conversationId: channelId\n });\n if (\n !channelBinding ||\n channelBinding.repoProvider !== repoKey.provider ||\n channelBinding.owner !== repoKey.owner ||\n channelBinding.repo !== repoKey.repo\n ) {\n return {\n ok: false,\n reason: \"channel_binding_mismatch\",\n message: \"The source channel binding is missing or no longer points at the proposal repository.\"\n };\n }\n }\n }\n\n return { ok: true };\n}\n\nfunction stableApprovalId(input: {\n providedId?: string;\n command: ThreadActionCommand;\n resolved: ResolvedThreadAction;\n actor: ActorIdentity;\n}): string {\n return input.providedId ?? stableId(\"approval\", [\n input.resolved.proposal.snapshot.proposalId,\n input.command.verb,\n [...input.resolved.selectedIntentIds].sort(),\n actorKeys(input.actor).sort()\n ]);\n}\n\nfunction sortedValues(values: string[] | undefined): string[] {\n return [...(values ?? [])].sort();\n}\n\nfunction sameStringSet(left: string[] | undefined, right: string[] | undefined): boolean {\n return JSON.stringify(sortedValues(left)) === JSON.stringify(sortedValues(right));\n}\n\nfunction sameActor(left: ActorIdentity, right: ActorIdentity): boolean {\n return left.provider === right.provider &&\n left.providerUserId === right.providerUserId &&\n (left.handle ?? \"\") === (right.handle ?? \"\") &&\n (left.organizationId ?? \"\") === (right.organizationId ?? \"\");\n}\n\nfunction approvalDecisionMatchesThreadAction(input: {\n decision: NonNullable<Awaited<ReturnType<ReturnType<typeof createOpenTagRepository>[\"getApprovalDecision\"]>>>;\n command: ThreadActionCommand;\n resolved: ResolvedThreadAction;\n actor: ActorIdentity;\n}): boolean {\n const approvedIntentIds = input.command.verb === \"reject\" ? [] : input.resolved.selectedIntentIds;\n const rejectedIntentIds = input.command.verb === \"reject\" ? input.resolved.selectedIntentIds : [];\n const metadata = input.decision.metadata;\n const verb = metadata && typeof metadata === \"object\" && !Array.isArray(metadata) ? metadata[\"verb\"] : undefined;\n return input.decision.proposalId === input.resolved.proposal.snapshot.proposalId &&\n sameStringSet(input.decision.approvedIntentIds, approvedIntentIds) &&\n sameStringSet(input.decision.rejectedIntentIds, rejectedIntentIds) &&\n sameActor(input.decision.approvedBy, input.actor) &&\n verb === input.command.verb;\n}\n\nfunction stableApplyPlanId(input: { resolved: ResolvedThreadAction; adapter: string }): string {\n return stableId(\"apply\", [\n input.resolved.proposal.snapshot.proposalId,\n input.adapter,\n [...input.resolved.selectedIntentIds].sort()\n ]);\n}\n\nfunction stableChildRunId(input: {\n command: ThreadActionCommand;\n resolved: ResolvedThreadAction;\n sourceApplyPlanId?: string;\n fallbackReason?: string;\n}): string {\n return stableId(\"run_child\", [\n input.resolved.proposal.runId,\n input.resolved.proposal.snapshot.proposalId,\n input.command.verb,\n [...input.resolved.selectedIntentIds].sort(),\n input.sourceApplyPlanId ?? \"\",\n input.fallbackReason ?? \"\"\n ]);\n}\n\nfunction selectedIntentsAlreadyApplied(input: { plan: ApplyPlan; selectedIntentIds: string[] }): boolean {\n return input.selectedIntentIds.every((intentId) =>\n input.plan.outcomes?.some((outcome) => outcome.intentId === intentId && outcome.outcome === \"applied\")\n );\n}\n\nfunction githubTargetFromEvent(event: OpenTagEvent):\n | {\n owner: string;\n repoName: string;\n issueNumber?: number;\n pullRequestNumber?: number;\n targetKind?: \"issue\" | \"pull_request\";\n }\n | null {\n const owner = event.metadata[\"owner\"];\n const repoName = event.metadata[\"repo\"];\n const issueNumber = event.metadata[\"issueNumber\"];\n const pullRequestNumber = event.metadata[\"pullRequestNumber\"];\n if (!hasGitHubRepoTarget(event)) return null;\n if (typeof owner !== \"string\" || typeof repoName !== \"string\") return null;\n if (typeof pullRequestNumber === \"number\") {\n return { owner, repoName, issueNumber: pullRequestNumber, pullRequestNumber, targetKind: \"pull_request\" };\n }\n if (typeof issueNumber === \"number\") {\n return { owner, repoName, issueNumber, targetKind: \"issue\" };\n }\n return { owner, repoName };\n}\n\nfunction selectedActionSummary(candidates: ResolvedThreadAction[\"selectedCandidates\"]): string {\n return candidates.map((candidate) => `${candidate.index}. ${candidate.intent.summary}`).join(\"; \");\n}\n\nfunction addPermissionGrant(permissions: PermissionGrant[], grant: PermissionGrant): PermissionGrant[] {\n if (permissions.some((permission) => permission.scope === grant.scope)) return permissions;\n return [...permissions, grant];\n}\n\nfunction childRunPermissionsForThreadAction(input: { resolved: ResolvedThreadAction; command: ThreadActionCommand }): PermissionGrant[] {\n let permissions = [...(input.resolved.proposal.event.permissions ?? [])];\n if (input.command.verb === \"apply\" || input.command.verb === \"continue\") {\n permissions = addPermissionGrant(permissions, {\n scope: \"repo:read\",\n reason: \"inspect the repository while continuing an approved source-thread action\"\n });\n permissions = addPermissionGrant(permissions, {\n scope: \"repo:write\",\n reason: \"apply an approved source-thread mutation on a run branch\"\n });\n }\n if (input.resolved.selectedCandidates.some((candidate) => candidate.intent.action === \"create_pull_request\")) {\n permissions = addPermissionGrant(permissions, {\n scope: \"pr:create\",\n reason: \"create the pull request approved in the source thread\"\n });\n }\n return permissions;\n}\n\nfunction childRunContextLines(input: {\n resolved: ResolvedThreadAction;\n approvalDecisionId?: string;\n sourceApplyPlanId?: string;\n fallbackReason?: string;\n}): string[] {\n const previousSummary = input.resolved.proposal.run.result?.summary ?? input.resolved.proposal.snapshot.summary;\n return [\n `- Proposal: \\`${input.resolved.proposal.snapshot.proposalId}\\``,\n `- Selected intents: ${input.resolved.selectedIntentIds.map((intentId) => `\\`${intentId}\\``).join(\", \")}`,\n `- Previous run: \\`${input.resolved.proposal.runId}\\``,\n ...(input.approvalDecisionId ? [`- Approval decision: \\`${input.approvalDecisionId}\\``] : []),\n `- Previous result: ${previousSummary}`,\n ...(input.sourceApplyPlanId ? [`- Apply plan: \\`${input.sourceApplyPlanId}\\``] : []),\n ...(input.fallbackReason ? [`- Fallback reason: ${input.fallbackReason}`] : [])\n ];\n}\n\nfunction renderChildRunCreatedBody(input: {\n lead: string;\n resolved: ResolvedThreadAction;\n childRun: OpenTagRun;\n provider?: string;\n approvalDecisionId?: string;\n sourceApplyPlanId?: string;\n fallbackReason?: string;\n}): string {\n if (input.provider === \"slack\") {\n return [\n \"Approved. OpenTag will continue from this proposal in a follow-up run.\",\n ...(input.fallbackReason ? [`Reason: ${input.fallbackReason}`] : [])\n ].join(\"\\n\");\n }\n return [\n input.lead,\n \"\",\n `Child run: \\`${input.childRun.id}\\``,\n \"\",\n \"Context carried into the child run:\",\n ...childRunContextLines(input),\n \"\",\n \"The model will continue from this approved proposal instead of starting from a fresh mention.\"\n ].join(\"\\n\");\n}\n\nfunction renderAppliedThreadActionBody(input: {\n provider: string;\n selectionText: string;\n proposalId: string;\n selectedIntentIds: string[];\n outcomes: ApplyIntentOutcome[];\n}): string {\n const selectedOutcomes = input.outcomes.filter((outcome) => input.selectedIntentIds.includes(outcome.intentId));\n if (input.provider === \"slack\") {\n const lines = [`Applied ${input.selectionText}.`];\n for (const outcome of selectedOutcomes) {\n if (outcome.externalUri) {\n lines.push(`Result: ${outcome.externalUri}`);\n } else if (outcome.message) {\n lines.push(`Result: ${outcome.outcome}. ${outcome.message}`);\n } else {\n lines.push(`Result: ${outcome.outcome}.`);\n }\n }\n return lines.join(\"\\n\");\n }\n\n return [\n `Applied ${input.selectionText} from \\`${input.proposalId}\\`.`,\n \"\",\n \"Result:\",\n ...selectedOutcomes.map((outcome) => `- \\`${outcome.intentId}\\`: ${outcome.outcome}${outcome.externalUri ? ` (${outcome.externalUri})` : \"\"}`)\n ].join(\"\\n\");\n}\n\nfunction renderThreadActionRecordedBody(input: {\n provider: string;\n verb: \"approve\" | \"reject\";\n selectionText: string;\n proposalId: string;\n applyIndex?: number;\n}): string {\n const pastTense = input.verb === \"approve\" ? \"Approved\" : \"Rejected\";\n if (input.provider === \"slack\") {\n if (input.verb === \"approve\") {\n return `${pastTense} ${input.selectionText}.\\nNext: use Apply ${input.applyIndex ?? 1} when you want OpenTag to perform it.`;\n }\n return `${pastTense} ${input.selectionText}.`;\n }\n if (input.verb === \"approve\") {\n return `${pastTense} ${input.selectionText} from \\`${input.proposalId}\\`.\\n\\nReply with \\`apply ${input.applyIndex ?? 1}\\` to apply it, or \\`continue ${input.applyIndex ?? 1}\\` to continue with a follow-up run.`;\n }\n return `${pastTense} ${input.selectionText} from \\`${input.proposalId}\\`.`;\n}\n\nfunction actionContextPointer(input: {\n command: ThreadActionCommand;\n resolved: ResolvedThreadAction;\n approvalDecisionId?: string;\n applyPlanId?: string;\n fallbackReason?: string;\n}): OpenTagEvent[\"context\"][number] {\n const lines = [\n \"OpenTag thread action continuation.\",\n `User reply: ${input.command.rawText}`,\n `Action: ${input.command.verb}`,\n `Proposal: ${input.resolved.proposal.snapshot.proposalId}`,\n `Proposal summary: ${input.resolved.proposal.snapshot.summary}`,\n `Selected actions: ${selectedActionSummary(input.resolved.selectedCandidates)}`,\n `Selected intents: ${input.resolved.selectedIntentIds.join(\", \")}`,\n `Previous run: ${input.resolved.proposal.runId}`,\n `Previous summary: ${input.resolved.proposal.run.result?.summary ?? input.resolved.proposal.snapshot.summary}`\n ];\n if (input.approvalDecisionId) lines.push(`Approval decision: ${input.approvalDecisionId}`);\n if (input.applyPlanId) lines.push(`Apply plan: ${input.applyPlanId}`);\n if (input.fallbackReason) lines.push(`Fallback reason: ${input.fallbackReason}`);\n return {\n kind: \"text\",\n uri: lines.join(\"\\n\"),\n visibility: input.resolved.proposal.event.source === \"github\" ? \"public\" : \"organization\",\n title: \"OpenTag approved action context\"\n };\n}\n\nasync function createChildRunForThreadAction(input: {\n repo: ReturnType<typeof createOpenTagRepository>;\n command: ThreadActionCommand;\n resolved: ResolvedThreadAction;\n runId?: string;\n approvalDecisionId?: string;\n sourceApplyPlanId?: string;\n fallbackReason?: string;\n}): Promise<OpenTagRun> {\n const runId = input.runId ?? stableChildRunId(input);\n const action = ActionHintSchema.parse({\n kind: \"apply_suggested_changes\",\n targetId: input.resolved.proposal.snapshot.proposalId,\n selectedIntentIds: input.resolved.selectedIntentIds,\n metadata: {\n threadActionVerb: input.command.verb,\n rawText: input.command.rawText,\n ...(input.command.reason ? { reason: input.command.reason } : {}),\n ...(input.approvalDecisionId ? { approvalDecisionId: input.approvalDecisionId } : {}),\n ...(input.fallbackReason ? { fallbackReason: input.fallbackReason } : {})\n }\n });\n const previousRunSummary = input.resolved.proposal.run.result?.summary ?? input.resolved.proposal.snapshot.summary;\n const commandText =\n input.command.verb === \"continue\"\n ? `Continue approved OpenTag action: ${selectedActionSummary(input.resolved.selectedCandidates)}`\n : `Continue because OpenTag could not directly apply approved action: ${selectedActionSummary(input.resolved.selectedCandidates)}`;\n const { run } = await input.repo.createRun({\n id: runId,\n event: childEventFromParent({\n parentEvent: input.resolved.proposal.event,\n childRunId: runId,\n actionKind: action.kind,\n commandText,\n receivedAt: new Date().toISOString(),\n extraContext: [\n actionContextPointer({\n command: input.command,\n resolved: input.resolved,\n ...(input.approvalDecisionId ? { approvalDecisionId: input.approvalDecisionId } : {}),\n ...(input.sourceApplyPlanId ? { applyPlanId: input.sourceApplyPlanId } : {}),\n ...(input.fallbackReason ? { fallbackReason: input.fallbackReason } : {})\n })\n ],\n metadata: {\n parentRunId: input.resolved.proposal.runId,\n sourceProposalId: input.resolved.proposal.snapshot.proposalId,\n selectedIntentIds: input.resolved.selectedIntentIds,\n threadActionVerb: input.command.verb,\n previousRunSummary,\n ...(input.approvalDecisionId ? { approvalDecisionId: input.approvalDecisionId } : {}),\n ...(input.sourceApplyPlanId ? { sourceApplyPlanId: input.sourceApplyPlanId } : {}),\n ...(input.fallbackReason ? { fallbackReason: input.fallbackReason } : {})\n },\n permissions: childRunPermissionsForThreadAction({ resolved: input.resolved, command: input.command })\n }),\n parentRunId: input.resolved.proposal.runId,\n triggeredByAction: action,\n sourceProposalId: input.resolved.proposal.snapshot.proposalId,\n ...(input.sourceApplyPlanId ? { sourceApplyPlanId: input.sourceApplyPlanId } : {})\n });\n return run;\n}\n\nexport type CallbackMessage = {\n runId: string;\n kind: \"acknowledgement\" | \"progress\" | \"final\";\n provider: string;\n uri: string;\n body: string;\n agentId?: string;\n threadKey?: string;\n statusMessageKey?: string;\n blocks?: SlackBlock[];\n};\n\nexport type CallbackSink = {\n deliver(message: CallbackMessage): Promise<void>;\n};\n\nexport type SourceReceiptState = \"received\";\n\nexport type SourceReceiptDelivery = {\n delivered: boolean;\n};\n\nexport type SourceReceipt = {\n runId: string;\n provider: string;\n state: SourceReceiptState;\n event: OpenTagEvent;\n agentId?: string;\n};\n\nexport type SourceReceiptSink = {\n deliver(receipt: SourceReceipt): Promise<SourceReceiptDelivery>;\n};\n\nexport type CallbackRetryOptions = {\n maxAttempts?: number;\n baseDelayMs?: number;\n maxDelayMs?: number;\n now?: Date;\n};\n\nexport type GitHubApplyOptions = {\n token: string;\n fetchImpl?: GitHubFetchLike;\n};\n\nasync function executeGitHubApplyPlan(input: {\n repo: ReturnType<typeof createOpenTagRepository>;\n plan: ApplyPlan;\n resolved: ResolvedThreadAction;\n githubApply?: GitHubApplyOptions;\n}): Promise<{ plan: ApplyPlan; executed: boolean; fallbackReason?: string }> {\n if (input.plan.adapter !== \"github\") {\n return { plan: input.plan, executed: false, fallbackReason: `Adapter ${input.plan.adapter ?? \"unknown\"} is not directly executable yet.` };\n }\n if (!input.githubApply) {\n return { plan: input.plan, executed: false, fallbackReason: \"GitHub apply is not configured on this dispatcher.\" };\n }\n\n const target = githubTargetFromEvent(input.resolved.proposal.event);\n if (!target) {\n return { plan: input.plan, executed: false, fallbackReason: \"The source run does not include a GitHub issue or pull request target.\" };\n }\n\n const preflightOutcomeByIntentId = new Map((input.plan.outcomes ?? []).map((outcome) => [outcome.intentId, outcome]));\n const executableIntents = input.resolved.proposal.snapshot.intents.filter((intent) => {\n if (!input.resolved.selectedIntentIds.includes(intent.intentId)) return false;\n const outcome = preflightOutcomeByIntentId.get(intent.intentId);\n return outcome?.outcome === \"skipped\" && outcome.message?.startsWith(\"Preflight passed\");\n });\n if (executableIntents.length === 0) {\n return { plan: input.plan, executed: false, fallbackReason: \"No selected intent has a direct adapter execution path.\" };\n }\n\n const executedOutcomes: ApplyIntentOutcome[] = [];\n const compilerRegistry = createAdapterMutationCompilerRegistry([\n createGitHubIssueMutationCompiler({\n mappings: mappingsFromAdapterPlan(input.plan.adapterPlan),\n ...(target.targetKind ? { targetKind: target.targetKind } : {})\n })\n ]);\n for (const compilation of compilerRegistry.compile(\"github\", executableIntents)) {\n if (!compilation.ok) {\n executedOutcomes.push(compilation.outcome);\n continue;\n }\n executedOutcomes.push(\n await applyGitHubIssueMutationOperation({\n target: {\n token: input.githubApply.token,\n owner: target.owner,\n repo: target.repoName,\n ...(typeof target.issueNumber === \"number\" ? { issueNumber: target.issueNumber } : {}),\n ...(target.pullRequestNumber ? { pullRequestNumber: target.pullRequestNumber } : {})\n },\n operation: compilation.operation as GitHubIssueMutationOperation,\n ...(input.githubApply.fetchImpl ? { fetchImpl: input.githubApply.fetchImpl } : {})\n })\n );\n }\n\n const executedOutcomeByIntentId = new Map(executedOutcomes.map((outcome) => [outcome.intentId, outcome]));\n const mergedOutcomes = (input.plan.outcomes ?? []).map((outcome) => executedOutcomeByIntentId.get(outcome.intentId) ?? outcome);\n const updated = await input.repo.updateApplyPlanOutcomes({\n id: input.plan.id,\n outcomes: mergedOutcomes,\n externalWritesExecuted: true\n });\n const plan = updated ?? input.plan;\n const allSelectedApplied = input.resolved.selectedIntentIds.every((intentId) =>\n plan.outcomes?.some((outcome) => outcome.intentId === intentId && outcome.outcome === \"applied\")\n );\n return {\n plan,\n executed: allSelectedApplied,\n ...(allSelectedApplied ? {} : { fallbackReason: \"Some selected intents were not directly applied.\" })\n };\n}\n\nconst noopCallbackSink: CallbackSink = {\n async deliver() {\n return;\n }\n};\n\nconst noopSourceReceiptSink: SourceReceiptSink = {\n async deliver() {\n return { delivered: false };\n }\n};\n\nfunction nextCallbackAttemptAt(input: { attempts: number } & CallbackRetryOptions): string | undefined {\n const maxAttempts = input.maxAttempts ?? 5;\n const nextAttempt = input.attempts + 1;\n if (nextAttempt >= maxAttempts) return undefined;\n\n const baseDelayMs = input.baseDelayMs ?? 5_000;\n const maxDelayMs = input.maxDelayMs ?? 300_000;\n const delayMs = Math.min(maxDelayMs, baseDelayMs * 2 ** Math.max(0, input.attempts));\n return new Date((input.now ?? new Date()).getTime() + delayMs).toISOString();\n}\n\nasync function deliverCallbackDelivery(input: {\n repo: ReturnType<typeof createOpenTagRepository>;\n sink: CallbackSink;\n delivery: import(\"@opentag/store\").CallbackDelivery;\n retry?: CallbackRetryOptions;\n}): Promise<boolean> {\n try {\n await input.sink.deliver({\n runId: input.delivery.runId,\n kind: input.delivery.kind,\n provider: input.delivery.provider,\n uri: input.delivery.uri,\n body: input.delivery.body,\n ...(input.delivery.threadKey ? { threadKey: input.delivery.threadKey } : {}),\n ...(input.delivery.agentId ? { agentId: input.delivery.agentId } : {}),\n ...(input.delivery.statusMessageKey ? { statusMessageKey: input.delivery.statusMessageKey } : {}),\n ...(input.delivery.blocks ? { blocks: input.delivery.blocks as SlackBlock[] } : {})\n });\n await input.repo.markCallbackDelivered({ deliveryId: input.delivery.id });\n return true;\n } catch (error) {\n const nextAttemptAt = nextCallbackAttemptAt({ attempts: input.delivery.attempts, ...(input.retry ?? {}) });\n await input.repo.markCallbackFailed({\n deliveryId: input.delivery.id,\n error: error instanceof Error ? error.message : String(error),\n ...(nextAttemptAt ? { nextAttemptAt } : {})\n });\n return false;\n }\n}\n\nexport async function processPendingCallbacks(input: {\n repo: ReturnType<typeof createOpenTagRepository>;\n sink: CallbackSink;\n limit?: number;\n retry?: CallbackRetryOptions;\n}): Promise<{ processed: number; delivered: number; failed: number }> {\n const maxAttempts = input.retry?.maxAttempts ?? 5;\n const deliveries = await input.repo.claimPendingCallbackDeliveries({\n limit: input.limit ?? 20,\n ...(input.retry?.now ? { now: input.retry.now } : {}),\n maxAttempts\n });\n const result = { processed: 0, delivered: 0, failed: 0 };\n for (const delivery of deliveries) {\n result.processed += 1;\n const delivered = await deliverCallbackDelivery({\n repo: input.repo,\n sink: input.sink,\n delivery,\n ...(input.retry ? { retry: input.retry } : {})\n });\n if (delivered) {\n result.delivered += 1;\n } else {\n result.failed += 1;\n }\n }\n return result;\n}\n\nasync function deliverAndAudit(input: {\n repo: ReturnType<typeof createOpenTagRepository>;\n sink: CallbackSink;\n message: CallbackMessage;\n retry?: CallbackRetryOptions;\n}): Promise<void> {\n const delivery = await input.repo.enqueueCallbackDelivery({\n runId: input.message.runId,\n kind: input.message.kind,\n provider: input.message.provider,\n uri: input.message.uri,\n body: input.message.body,\n ...(input.message.threadKey ? { threadKey: input.message.threadKey } : {}),\n ...(input.message.agentId ? { agentId: input.message.agentId } : {}),\n ...(input.message.statusMessageKey ? { statusMessageKey: input.message.statusMessageKey } : {}),\n ...(input.message.blocks ? { blocks: input.message.blocks } : {})\n });\n await deliverCallbackDelivery({\n repo: input.repo,\n sink: input.sink,\n delivery,\n ...(input.retry ? { retry: input.retry } : {})\n });\n}\n\nasync function deliverSourceReceiptBestEffort(input: {\n repo: ReturnType<typeof createOpenTagRepository>;\n sink: SourceReceiptSink;\n receipt: SourceReceipt;\n}): Promise<SourceReceiptDelivery> {\n try {\n const result = await input.sink.deliver(input.receipt);\n if (!result.delivered) return result;\n await input.repo.appendRunEvent({\n runId: input.receipt.runId,\n type: \"source_receipt.delivered\",\n payload: {\n provider: input.receipt.provider,\n state: input.receipt.state\n },\n visibility: \"audit\",\n importance: \"low\",\n message: `Source ${input.receipt.state} receipt delivered.`\n });\n return result;\n } catch (error) {\n await input.repo.appendRunEvent({\n runId: input.receipt.runId,\n type: \"source_receipt.failed\",\n payload: {\n provider: input.receipt.provider,\n state: input.receipt.state,\n error: error instanceof Error ? error.message : String(error)\n },\n visibility: \"audit\",\n importance: \"low\",\n message: `Source ${input.receipt.state} receipt failed.`\n });\n return { delivered: false };\n }\n}\n\nfunction isAuthorized(request: Request, pairingToken: string | undefined): boolean {\n if (!pairingToken) return true;\n return request.headers.get(\"authorization\") === `Bearer ${pairingToken}`;\n}\n\nexport function createDispatcherApp(input: {\n databasePath: string;\n callbackSink?: CallbackSink;\n sourceReceiptSink?: SourceReceiptSink;\n pairingToken?: string;\n presentation?: CallbackPresentation;\n githubApply?: GitHubApplyOptions;\n callbackRetry?: CallbackRetryOptions;\n agentAccessProfileCheck?: AgentAccessProfileCheck;\n}) {\n const sqlite = new Database(input.databasePath);\n migrateSchema(sqlite);\n const repo = createOpenTagRepository(drizzle(sqlite));\n const app = new Hono();\n const callbackSink = input.callbackSink ?? noopCallbackSink;\n const sourceReceiptSink = input.sourceReceiptSink ?? noopSourceReceiptSink;\n const presentation = input.presentation ?? createDefaultCallbackPresentation();\n const callbackRetry = input.callbackRetry ?? {};\n const admission = createAdmissionRuntime({\n repo,\n ...(input.agentAccessProfileCheck ? { agentAccessProfileCheck: input.agentAccessProfileCheck } : {})\n });\n\n app.get(\"/healthz\", (c) => c.json({ ok: true }));\n\n app.use(\"/v1/*\", async (c, next) => {\n if (!isAuthorized(c.req.raw, input.pairingToken)) {\n return c.json({ error: \"unauthorized\" }, 401);\n }\n await next();\n });\n\n app.post(\"/v1/runners\", async (c) => {\n const parsed = await parseBody(c, CreateRunnerSchema);\n await repo.registerRunner(parsed);\n return c.json({ ok: true }, 201);\n });\n\n app.get(\"/v1/runners/:runnerId\", async (c) => {\n const runner = await repo.getRunner({ runnerId: c.req.param(\"runnerId\") });\n if (!runner) return c.json({ error: \"runner_not_found\" }, 404);\n return c.json({ runner });\n });\n\n app.post(\"/v1/repo-bindings\", async (c) => {\n const parsed = await parseBody(c, CreateRepoBindingSchema);\n await repo.createRepoBinding({\n provider: parsed.provider,\n owner: parsed.owner,\n repo: parsed.repo,\n runnerId: parsed.runnerId,\n ...(parsed.workspacePath ? { workspacePath: parsed.workspacePath } : {}),\n ...(parsed.defaultExecutor ? { defaultExecutor: parsed.defaultExecutor } : {}),\n ...(parsed.allowedActors?.length ? { allowedActors: parsed.allowedActors } : {})\n });\n return c.json({ ok: true }, 201);\n });\n\n app.get(\"/v1/repo-bindings/:provider/:owner/:repo\", async (c) => {\n const binding = await repo.getRepoBinding({\n provider: c.req.param(\"provider\"),\n owner: c.req.param(\"owner\"),\n repo: c.req.param(\"repo\")\n });\n if (!binding) return c.json({ error: \"repo_binding_not_found\" }, 404);\n return c.json({ binding });\n });\n\n app.post(\"/v1/repo-bindings/:provider/:owner/:repo/policy-rules\", async (c) => {\n const parsed = await parseBody(c, UpsertPolicyRuleSchema);\n const rule = await repo.upsertRepoPolicyRule({\n provider: c.req.param(\"provider\"),\n owner: c.req.param(\"owner\"),\n repo: c.req.param(\"repo\"),\n rule: parsed.rule\n });\n return c.json({ rule }, 201);\n });\n\n app.get(\"/v1/repo-bindings/:provider/:owner/:repo/policy-rules\", async (c) => {\n const rules = await repo.listRepoPolicyRules({\n provider: c.req.param(\"provider\"),\n owner: c.req.param(\"owner\"),\n repo: c.req.param(\"repo\")\n });\n return c.json({ rules });\n });\n\n app.post(\"/v1/repo-bindings/:provider/:owner/:repo/mutation-mappings\", async (c) => {\n const parsed = await parseBody(c, UpsertMutationMappingSchema);\n const mapping = await repo.upsertRepoMutationMapping({\n provider: c.req.param(\"provider\"),\n owner: c.req.param(\"owner\"),\n repo: c.req.param(\"repo\"),\n mapping: parsed.mapping\n });\n return c.json({ mapping }, 201);\n });\n\n app.get(\"/v1/repo-bindings/:provider/:owner/:repo/mutation-mappings\", async (c) => {\n const mappings = await repo.listRepoMutationMappings({\n provider: c.req.param(\"provider\"),\n owner: c.req.param(\"owner\"),\n repo: c.req.param(\"repo\")\n });\n return c.json({ mappings });\n });\n\n app.get(\"/v1/repo-bindings/:provider/:owner/:repo/metrics\", async (c) => {\n const metrics = await repo.getRepoMetrics({\n provider: c.req.param(\"provider\"),\n owner: c.req.param(\"owner\"),\n repo: c.req.param(\"repo\")\n });\n return c.json({ metrics });\n });\n\n app.get(\"/v1/work-thread-metrics\", async (c) => {\n const threadId = c.req.query(\"threadId\");\n if (!threadId) return c.json({ error: \"thread_id_required\" }, 422);\n const metrics = await repo.getWorkThreadMetrics({ threadId });\n return c.json({ metrics });\n });\n\n app.post(\"/v1/channel-bindings\", async (c) => {\n const parsed = await parseBody(c, CreateChannelBindingSchema);\n await repo.upsertChannelBinding({\n provider: parsed.provider,\n accountId: parsed.accountId,\n conversationId: parsed.conversationId,\n repoProvider: parsed.repoProvider,\n owner: parsed.owner,\n repo: parsed.repo,\n ...(parsed.metadata ? { metadata: parsed.metadata } : {})\n });\n return c.json({ ok: true }, 201);\n });\n\n app.get(\"/v1/channel-bindings/:provider/:accountId/:conversationId\", async (c) => {\n const binding = await repo.getChannelBinding({\n provider: c.req.param(\"provider\"),\n accountId: c.req.param(\"accountId\"),\n conversationId: c.req.param(\"conversationId\")\n });\n if (!binding) return c.json({ error: \"channel_binding_not_found\" }, 404);\n return c.json({ binding });\n });\n\n app.post(\"/v1/slack-channel-bindings\", async (c) => {\n const parsed = await parseBody(c, CreateSlackChannelBindingSchema);\n await repo.createSlackChannelBinding(parsed);\n return c.json({ ok: true }, 201);\n });\n\n app.get(\"/v1/slack-channel-bindings/:teamId/:channelId\", async (c) => {\n const binding = await repo.getSlackChannelBinding({\n teamId: c.req.param(\"teamId\"),\n channelId: c.req.param(\"channelId\")\n });\n if (!binding) return c.json({ error: \"slack_channel_binding_not_found\" }, 404);\n return c.json({ binding });\n });\n\n app.post(\"/v1/runs\", async (c) => {\n const parsed = await parseBody(c, CreateRunSchema);\n const admitted = await admission.admitRun({ requestId: parsed.runId, event: parsed.event });\n\n if (admitted.outcome === \"needs_human_decision\") {\n return c.json({ decision: admitted.decision }, 202);\n }\n\n if (admitted.outcome === \"drop_duplicate\") {\n await repo.appendRunEvent({\n runId: admitted.run.id,\n type: \"admission.decided\",\n payload: admitted.decision,\n visibility: \"audit\",\n importance: \"normal\",\n message: admitted.decision.reason\n });\n await repo.appendRunEvent({\n runId: admitted.run.id,\n type: \"run.create_idempotent_replay\",\n payload: { requestedRunId: parsed.runId, eventId: parsed.event.id },\n visibility: \"audit\",\n importance: \"low\"\n });\n return c.json({ decision: admitted.decision, run: admitted.run, idempotentReplay: true }, 200);\n }\n\n if (admitted.outcome === \"follow_up_queued\") {\n return c.json({ decision: admitted.decision, followUpRequest: admitted.followUpRequest }, 202);\n }\n\n const createdRun = await repo.createRun({ id: parsed.runId, event: parsed.event });\n if (!createdRun.created) {\n return c.json(\n {\n decision: {\n ...admitted.decision,\n action: \"drop_duplicate\",\n reason: \"Source event already created a run.\",\n reasonCode: \"duplicate_source_event\",\n activeRunId: createdRun.run.id\n },\n run: createdRun.run,\n idempotentReplay: true\n },\n 200\n );\n }\n const { run } = createdRun;\n const sourceReceiptDelivery = await deliverSourceReceiptBestEffort({\n repo,\n sink: sourceReceiptSink,\n receipt: {\n runId: run.id,\n provider: parsed.event.callback.provider,\n state: \"received\",\n event: parsed.event,\n ...(parsed.event.target.agentId ? { agentId: parsed.event.target.agentId } : {})\n }\n });\n const shouldDeliverAcknowledgement =\n presentation.shouldDeliverAcknowledgement(parsed.event.callback.provider) ||\n (parsed.event.callback.provider === \"slack\" && !sourceReceiptDelivery.delivered);\n if (shouldDeliverAcknowledgement) {\n await deliverAndAudit({\n repo,\n sink: callbackSink,\n retry: callbackRetry,\n message: {\n runId: run.id,\n kind: \"acknowledgement\",\n provider: parsed.event.callback.provider,\n uri: parsed.event.callback.uri,\n body: presentation.acknowledgement({ provider: parsed.event.callback.provider, runId: run.id }),\n ...(parsed.event.target.agentId ? { agentId: parsed.event.target.agentId } : {}),\n ...(parsed.event.callback.threadKey ? { threadKey: parsed.event.callback.threadKey } : {})\n }\n });\n }\n return c.json({ decision: admitted.decision, run }, 201);\n });\n\n app.post(\"/v1/thread-actions\", async (c) => {\n const parsed = await parseBody(c, ThreadActionInputSchema);\n const command = parseThreadActionCommand(parsed.rawText);\n if (!command) {\n return c.json({ outcome: \"ignored\", reason: \"not_action_command\" }, 202);\n }\n\n const resolved = await resolveThreadAction({\n repo,\n command,\n callback: parsed.callback,\n ...(parsed.metadata ? { metadata: parsed.metadata } : {})\n });\n if (!resolved.ok) {\n if (resolved.runId) {\n await deliverAndAudit({\n repo,\n sink: callbackSink,\n retry: callbackRetry,\n message: {\n runId: resolved.runId,\n kind: \"final\",\n provider: parsed.callback.provider,\n uri: parsed.callback.uri,\n body: resolved.message,\n ...(parsed.callback.threadKey ? { threadKey: parsed.callback.threadKey } : {})\n }\n });\n }\n return c.json({ outcome: resolved.reason, message: resolved.message }, resolved.reason === \"no_proposal\" ? 404 : 409);\n }\n\n const authorization = await authorizeThreadAction({\n repo,\n resolved: resolved.resolved,\n actor: parsed.actor\n });\n if (!authorization.ok) {\n return c.json({ outcome: \"unauthorized\", reason: authorization.reason, message: authorization.message }, 403);\n }\n\n const selectionText = selectedActionSummary(resolved.resolved.selectedCandidates);\n const selectedIntents = resolved.resolved.proposal.snapshot.intents.filter((intent) =>\n resolved.resolved.selectedIntentIds.includes(intent.intentId)\n );\n const adapter = adapterForAction({\n event: resolved.resolved.proposal.event,\n callbackProvider: parsed.callback.provider,\n selectedIntents\n });\n const applyPlanId = stableApplyPlanId({ resolved: resolved.resolved, adapter });\n if (command.verb === \"apply\") {\n const existingPlan = await repo.getApplyPlan({ id: applyPlanId });\n if (existingPlan) {\n const existingDecision = await repo.getApprovalDecision({ id: existingPlan.approvalDecisionId });\n if (selectedIntentsAlreadyApplied({ plan: existingPlan, selectedIntentIds: resolved.resolved.selectedIntentIds })) {\n return c.json({ outcome: \"already_applied\", decision: existingDecision, plan: existingPlan }, 200);\n }\n const fallbackReason = \"An apply plan already exists for this selected action; OpenTag will not execute it again from a repeated thread reply.\";\n const childRun = await createChildRunForThreadAction({\n repo,\n command,\n resolved: resolved.resolved,\n runId: stableChildRunId({\n command,\n resolved: resolved.resolved,\n sourceApplyPlanId: existingPlan.id,\n fallbackReason\n }),\n approvalDecisionId: existingPlan.approvalDecisionId,\n sourceApplyPlanId: existingPlan.id,\n fallbackReason\n });\n await deliverAndAudit({\n repo,\n sink: callbackSink,\n retry: callbackRetry,\n message: {\n runId: resolved.resolved.proposal.runId,\n kind: \"final\",\n provider: parsed.callback.provider,\n uri: parsed.callback.uri,\n body: renderChildRunCreatedBody({\n lead: \"This action was already planned, so OpenTag will not execute the external write again.\",\n resolved: resolved.resolved,\n childRun,\n provider: parsed.callback.provider,\n approvalDecisionId: existingPlan.approvalDecisionId,\n sourceApplyPlanId: existingPlan.id,\n fallbackReason\n }),\n ...(parsed.callback.threadKey ? { threadKey: parsed.callback.threadKey } : {})\n }\n });\n return c.json({ outcome: \"already_planned\", decision: existingDecision, plan: existingPlan, run: childRun }, 200);\n }\n }\n\n const providedDecision = parsed.id ? await repo.getApprovalDecision({ id: parsed.id }) : null;\n const canReuseProvidedDecision = providedDecision\n ? approvalDecisionMatchesThreadAction({\n decision: providedDecision,\n command,\n resolved: resolved.resolved,\n actor: parsed.actor\n })\n : false;\n const approvalId = parsed.id && (!providedDecision || canReuseProvidedDecision)\n ? parsed.id\n : stableApprovalId({\n command,\n resolved: resolved.resolved,\n actor: parsed.actor\n });\n const existingDecision = canReuseProvidedDecision\n ? providedDecision\n : await repo.getApprovalDecision({ id: approvalId });\n const decision = existingDecision ?? await repo.recordApprovalDecision({\n id: approvalId,\n proposalId: resolved.resolved.proposal.snapshot.proposalId,\n approvedIntentIds: command.verb === \"reject\" ? [] : resolved.resolved.selectedIntentIds,\n ...(command.verb === \"reject\" ? { rejectedIntentIds: resolved.resolved.selectedIntentIds } : {}),\n approvedBy: parsed.actor,\n approvedAt: new Date().toISOString(),\n scope: \"manual\",\n ...(command.reason ? { reason: command.reason } : {}),\n metadata: {\n source: \"thread_action\",\n rawText: command.rawText,\n verb: command.verb,\n selection: command.selection,\n callback: parsed.callback,\n ...(parsed.metadata ? { ingressMetadata: parsed.metadata } : {})\n }\n });\n if (!decision) {\n return c.json({ error: \"proposal_not_found\" }, 404);\n }\n\n if (command.verb === \"reject\") {\n if (existingDecision) {\n return c.json({ outcome: \"already_rejected\", decision }, 200);\n }\n const body = renderThreadActionRecordedBody({\n provider: parsed.callback.provider,\n verb: \"reject\",\n selectionText,\n proposalId: resolved.resolved.proposal.snapshot.proposalId\n });\n await deliverAndAudit({\n repo,\n sink: callbackSink,\n retry: callbackRetry,\n message: {\n runId: resolved.resolved.proposal.runId,\n kind: \"final\",\n provider: parsed.callback.provider,\n uri: parsed.callback.uri,\n body,\n ...(parsed.callback.threadKey ? { threadKey: parsed.callback.threadKey } : {})\n }\n });\n return c.json({ outcome: \"rejected\", decision }, 201);\n }\n\n if (command.verb === \"approve\") {\n if (existingDecision) {\n return c.json({ outcome: \"already_approved\", decision }, 200);\n }\n const body = renderThreadActionRecordedBody({\n provider: parsed.callback.provider,\n verb: \"approve\",\n selectionText,\n proposalId: resolved.resolved.proposal.snapshot.proposalId,\n applyIndex: resolved.resolved.selectedCandidates[0]?.index ?? 1\n });\n await deliverAndAudit({\n repo,\n sink: callbackSink,\n retry: callbackRetry,\n message: {\n runId: resolved.resolved.proposal.runId,\n kind: \"final\",\n provider: parsed.callback.provider,\n uri: parsed.callback.uri,\n body,\n ...(parsed.callback.threadKey ? { threadKey: parsed.callback.threadKey } : {})\n }\n });\n return c.json({ outcome: \"approved\", decision }, 201);\n }\n\n if (command.verb === \"continue\") {\n const childRun = await createChildRunForThreadAction({\n repo,\n command,\n resolved: resolved.resolved,\n runId: stableChildRunId({ command, resolved: resolved.resolved }),\n approvalDecisionId: decision.id\n });\n const body = renderChildRunCreatedBody({\n lead: `Continuing from ${selectionText} in \\`${resolved.resolved.proposal.snapshot.proposalId}\\`.`,\n resolved: resolved.resolved,\n childRun,\n provider: parsed.callback.provider,\n approvalDecisionId: decision.id\n });\n await deliverAndAudit({\n repo,\n sink: callbackSink,\n retry: callbackRetry,\n message: {\n runId: resolved.resolved.proposal.runId,\n kind: \"final\",\n provider: parsed.callback.provider,\n uri: parsed.callback.uri,\n body,\n ...(parsed.callback.threadKey ? { threadKey: parsed.callback.threadKey } : {})\n }\n });\n return c.json({ outcome: \"child_run_created\", decision, run: childRun }, 201);\n }\n\n const planResult = await repo.createApplyPlanOnce({\n id: applyPlanId,\n proposalId: resolved.resolved.proposal.snapshot.proposalId,\n approvalDecisionId: decision.id,\n selectedIntentIds: resolved.resolved.selectedIntentIds,\n adapter\n });\n if (!planResult) {\n return c.json({ error: \"proposal_or_approval_not_found\" }, 404);\n }\n if (!planResult.created) {\n if (selectedIntentsAlreadyApplied({ plan: planResult.plan, selectedIntentIds: resolved.resolved.selectedIntentIds })) {\n return c.json({ outcome: \"already_applied\", decision, plan: planResult.plan }, 200);\n }\n const fallbackReason = \"An apply plan already exists for this selected action; OpenTag will not execute it again from a repeated thread reply.\";\n const childRun = await createChildRunForThreadAction({\n repo,\n command,\n resolved: resolved.resolved,\n runId: stableChildRunId({\n command,\n resolved: resolved.resolved,\n sourceApplyPlanId: planResult.plan.id,\n fallbackReason\n }),\n approvalDecisionId: decision.id,\n sourceApplyPlanId: planResult.plan.id,\n fallbackReason\n });\n await deliverAndAudit({\n repo,\n sink: callbackSink,\n retry: callbackRetry,\n message: {\n runId: resolved.resolved.proposal.runId,\n kind: \"final\",\n provider: parsed.callback.provider,\n uri: parsed.callback.uri,\n body: renderChildRunCreatedBody({\n lead: \"This action was already planned, so OpenTag will not execute the external write again.\",\n resolved: resolved.resolved,\n childRun,\n provider: parsed.callback.provider,\n approvalDecisionId: decision.id,\n sourceApplyPlanId: planResult.plan.id,\n fallbackReason\n }),\n ...(parsed.callback.threadKey ? { threadKey: parsed.callback.threadKey } : {})\n }\n });\n return c.json({ outcome: \"already_planned\", decision, plan: planResult.plan, run: childRun }, 200);\n }\n const plan = planResult.plan;\n\n const execution = await executeGitHubApplyPlan({\n repo,\n plan,\n resolved: resolved.resolved,\n ...(input.githubApply ? { githubApply: input.githubApply } : {})\n });\n if (execution.executed) {\n const outcomes = execution.plan.outcomes ?? [];\n const body = renderAppliedThreadActionBody({\n provider: parsed.callback.provider,\n selectionText,\n proposalId: resolved.resolved.proposal.snapshot.proposalId,\n selectedIntentIds: resolved.resolved.selectedIntentIds,\n outcomes\n });\n await deliverAndAudit({\n repo,\n sink: callbackSink,\n retry: callbackRetry,\n message: {\n runId: resolved.resolved.proposal.runId,\n kind: \"final\",\n provider: parsed.callback.provider,\n uri: parsed.callback.uri,\n body,\n ...(parsed.callback.threadKey ? { threadKey: parsed.callback.threadKey } : {})\n }\n });\n return c.json({ outcome: \"applied\", decision, plan: execution.plan }, 201);\n }\n\n const childRun = await createChildRunForThreadAction({\n repo,\n command,\n resolved: resolved.resolved,\n runId: stableChildRunId({\n command,\n resolved: resolved.resolved,\n sourceApplyPlanId: execution.plan.id,\n fallbackReason: execution.fallbackReason ?? \"OpenTag cannot directly apply this intent yet.\"\n }),\n approvalDecisionId: decision.id,\n sourceApplyPlanId: execution.plan.id,\n fallbackReason: execution.fallbackReason ?? \"OpenTag cannot directly apply this intent yet.\"\n });\n const body = renderChildRunCreatedBody({\n lead: `Action ${selectionText} was approved, but OpenTag cannot directly apply it yet.`,\n resolved: resolved.resolved,\n childRun,\n provider: parsed.callback.provider,\n approvalDecisionId: decision.id,\n sourceApplyPlanId: execution.plan.id,\n fallbackReason: execution.fallbackReason ?? \"The adapter could not execute the selected intent.\"\n });\n await deliverAndAudit({\n repo,\n sink: callbackSink,\n retry: callbackRetry,\n message: {\n runId: resolved.resolved.proposal.runId,\n kind: \"final\",\n provider: parsed.callback.provider,\n uri: parsed.callback.uri,\n body,\n ...(parsed.callback.threadKey ? { threadKey: parsed.callback.threadKey } : {})\n }\n });\n return c.json({ outcome: \"child_run_created\", decision, plan: execution.plan, run: childRun }, 201);\n });\n\n app.get(\"/v1/follow-up-requests/:id\", async (c) => {\n const followUpRequest = await repo.getFollowUpRequest({ id: c.req.param(\"id\") });\n if (!followUpRequest) return c.json({ error: \"follow_up_request_not_found\" }, 404);\n return c.json({ followUpRequest });\n });\n\n app.post(\"/v1/follow-up-requests/:id/create-run\", async (c) => {\n const parsed = await parseBody(c, PromoteFollowUpRequestSchema);\n let promoted;\n try {\n promoted = await repo.createRunFromFollowUpRequest({\n followUpRequestId: c.req.param(\"id\"),\n runId: parsed.runId\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (message.startsWith(\"Follow-up request not found:\")) {\n return c.json({ error: \"follow_up_request_not_found\" }, 404);\n }\n if (message.includes(\"is not queued\")) {\n return c.json({ error: \"follow_up_request_not_queued\" }, 409);\n }\n throw error;\n }\n const followUpRequest = promoted.followUpRequest;\n const event = followUpRequest.event;\n if (presentation.shouldDeliverAcknowledgement(event.callback.provider)) {\n await deliverAndAudit({\n repo,\n sink: callbackSink,\n retry: callbackRetry,\n message: {\n runId: promoted.run.id,\n kind: \"acknowledgement\",\n provider: event.callback.provider,\n uri: event.callback.uri,\n body: presentation.acknowledgement({ provider: event.callback.provider, runId: promoted.run.id }),\n ...(event.target.agentId ? { agentId: event.target.agentId } : {}),\n ...(event.callback.threadKey ? { threadKey: event.callback.threadKey } : {})\n }\n });\n }\n return c.json({ followUpRequest, run: promoted.run }, 201);\n });\n\n app.post(\"/v1/runners/:runnerId/claim\", async (c) => {\n const claimed = await repo.claimNextRun({ runnerId: c.req.param(\"runnerId\"), leaseSeconds: 60 });\n if (!claimed) return c.body(null, 204);\n return c.json(claimed, 200);\n });\n\n app.post(\"/v1/runners/:runnerId/runs/:runId/heartbeat\", async (c) => {\n const ok = await repo.heartbeat({ runnerId: c.req.param(\"runnerId\"), runId: c.req.param(\"runId\") });\n if (!ok) return c.json({ error: \"run_not_claimed_by_runner\" }, 404);\n return c.json({ ok: true });\n });\n\n app.post(\"/v1/runs/:runId/running\", async (c) => {\n return c.json({\n error: \"runner_scoped_endpoint_required\",\n message: \"Use /v1/runners/:runnerId/runs/:runId/running, /progress, or /complete.\"\n }, 410);\n });\n\n app.post(\"/v1/runners/:runnerId/runs/:runId/running\", async (c) => {\n const body = await parseBody(c, z.object({ executor: z.string().min(1) }));\n const ok = await repo.markRunning({\n runId: c.req.param(\"runId\"),\n runnerId: c.req.param(\"runnerId\"),\n executor: body.executor\n });\n if (!ok) return c.json({ error: \"run_not_claimed_by_runner\" }, 404);\n return c.json({ ok: true });\n });\n\n app.post(\"/v1/runs/:runId/progress\", async () => {\n return new Response(JSON.stringify({\n error: \"runner_scoped_endpoint_required\",\n message: \"Use /v1/runners/:runnerId/runs/:runId/running, /progress, or /complete.\"\n }), { status: 410, headers: { \"content-type\": \"application/json\" } });\n });\n\n app.post(\"/v1/runners/:runnerId/runs/:runId/progress\", async (c) => {\n const runId = c.req.param(\"runId\");\n const body = await parseBody(c, ProgressSchema);\n const ok = await repo.recordProgress({\n runId,\n runnerId: c.req.param(\"runnerId\"),\n message: body.message,\n ...(body.type ? { type: body.type } : {}),\n ...(body.at ? { at: body.at } : {}),\n ...(body.visibility ? { visibility: body.visibility } : {}),\n ...(body.importance ? { importance: body.importance } : {})\n });\n if (!ok) return c.json({ error: \"run_not_claimed_by_runner\" }, 404);\n const stored = await repo.getRun({ runId });\n if (!stored) return c.json({ error: \"run_not_found\" }, 404);\n if (presentation.shouldDeliverProgress(stored.event.callback.provider)) {\n await deliverAndAudit({\n repo,\n sink: callbackSink,\n retry: callbackRetry,\n message: {\n runId,\n kind: \"progress\",\n provider: stored.event.callback.provider,\n uri: stored.event.callback.uri,\n body: presentation.progress({ provider: stored.event.callback.provider, runId, message: body.message }),\n ...(stored.event.target.agentId ? { agentId: stored.event.target.agentId } : {}),\n ...(stored.event.callback.threadKey ? { threadKey: stored.event.callback.threadKey } : {}),\n statusMessageKey: `${runId}:status`\n }\n });\n }\n return c.json({ ok: true });\n });\n\n app.post(\"/v1/runs/:runId/complete\", async () => {\n return new Response(JSON.stringify({\n error: \"runner_scoped_endpoint_required\",\n message: \"Use /v1/runners/:runnerId/runs/:runId/running, /progress, or /complete.\"\n }), { status: 410, headers: { \"content-type\": \"application/json\" } });\n });\n\n app.post(\"/v1/runners/:runnerId/runs/:runId/complete\", async (c) => {\n const runId = c.req.param(\"runId\");\n const parsed = await parseBody(c, CompleteRunSchema);\n const ok = await repo.completeRun({ runId, runnerId: c.req.param(\"runnerId\"), result: parsed.result });\n if (!ok) return c.json({ error: \"run_not_claimed_by_runner\" }, 404);\n const stored = await repo.getRun({ runId });\n if (!stored) return c.json({ error: \"run_not_found\" }, 404);\n const finalPresentation = presentation.final({ provider: stored.event.callback.provider, result: parsed.result });\n await deliverAndAudit({\n repo,\n sink: callbackSink,\n retry: callbackRetry,\n message: {\n runId,\n kind: \"final\",\n provider: stored.event.callback.provider,\n uri: stored.event.callback.uri,\n body: finalPresentation.body,\n ...(stored.event.target.agentId ? { agentId: stored.event.target.agentId } : {}),\n ...(stored.event.callback.threadKey ? { threadKey: stored.event.callback.threadKey } : {}),\n ...(finalPresentation.blocks?.length ? { blocks: finalPresentation.blocks } : {})\n }\n });\n return c.json({ ok: true });\n });\n\n app.get(\"/v1/proposals/:proposalId\", async (c) => {\n const proposal = await repo.getSuggestedChanges({ proposalId: c.req.param(\"proposalId\") });\n if (!proposal) return c.json({ error: \"proposal_not_found\" }, 404);\n return c.json(proposal);\n });\n\n app.get(\"/v1/proposals/:proposalId/lineage\", async (c) => {\n const lineage = await repo.getProposalLineage({ proposalId: c.req.param(\"proposalId\") });\n if (!lineage) return c.json({ error: \"proposal_not_found\" }, 404);\n return c.json({ lineage });\n });\n\n app.get(\"/v1/proposals/:proposalId/current-intents\", async (c) => {\n const intents = await repo.listCurrentMutationIntents({ proposalId: c.req.param(\"proposalId\") });\n if (!intents) return c.json({ error: \"proposal_not_found\" }, 404);\n return c.json({ intents });\n });\n\n app.post(\"/v1/proposals/:proposalId/approvals\", async (c) => {\n const proposalId = c.req.param(\"proposalId\");\n let rawBody: unknown;\n try {\n rawBody = await c.req.json();\n } catch (err) {\n if (err instanceof SyntaxError) {\n return c.json({ error: \"invalid_json_body\" }, 400);\n }\n throw err;\n }\n const parsedBody = ApprovalDecisionInputSchema.safeParse(rawBody);\n if (!parsedBody.success) return c.json({ error: \"invalid_approval_decision\" }, 400);\n const body = parsedBody.data;\n const decision = await repo.recordApprovalDecision({\n id: body.id ?? `approval_${proposalId}_${Date.now()}`,\n proposalId,\n approvedIntentIds: body.approvedIntentIds,\n ...(body.rejectedIntentIds?.length ? { rejectedIntentIds: body.rejectedIntentIds } : {}),\n approvedBy: body.approvedBy,\n approvedAt: body.approvedAt ?? new Date().toISOString(),\n scope: body.scope,\n ...(body.reason ? { reason: body.reason } : {}),\n ...(body.metadata ? { metadata: body.metadata } : {})\n });\n if (!decision) return c.json({ error: \"proposal_not_found\" }, 404);\n return c.json({ decision }, 201);\n });\n\n app.get(\"/v1/approvals/:approvalDecisionId\", async (c) => {\n const decision = await repo.getApprovalDecision({ id: c.req.param(\"approvalDecisionId\") });\n if (!decision) return c.json({ error: \"approval_decision_not_found\" }, 404);\n return c.json({ decision });\n });\n\n app.post(\"/v1/proposals/:proposalId/apply-plans\", async (c) => {\n const proposalId = c.req.param(\"proposalId\");\n const body = await parseBody(c, ApplyPlanInputSchema);\n let executableTarget:\n | {\n proposal: NonNullable<Awaited<ReturnType<typeof repo.getSuggestedChanges>>>;\n target: NonNullable<ReturnType<typeof githubTargetFromEvent>>;\n }\n | undefined;\n\n if (body.execute) {\n if (body.adapter !== \"github\") {\n return c.json({ error: \"apply_execution_adapter_not_supported\" }, 422);\n }\n if (!input.githubApply) {\n return c.json({ error: \"github_apply_not_configured\" }, 422);\n }\n const proposal = await repo.getSuggestedChanges({ proposalId });\n if (!proposal) return c.json({ error: \"proposal_not_found\" }, 404);\n const stored = await repo.getRun({ runId: proposal.runId });\n if (!stored) return c.json({ error: \"run_not_found\" }, 404);\n const target = githubTargetFromEvent(stored.event);\n if (!target) {\n return c.json({ error: \"github_target_missing\" }, 422);\n }\n executableTarget = { proposal, target };\n }\n\n const applyPlanInput = {\n id: body.id ?? `apply_${proposalId}_${Date.now()}`,\n proposalId,\n approvalDecisionId: body.approvalDecisionId,\n ...(body.selectedIntentIds !== undefined ? { selectedIntentIds: body.selectedIntentIds } : {}),\n ...(body.adapter ? { adapter: body.adapter } : {})\n };\n let plan: ApplyPlan;\n if (body.execute) {\n const planResult = await repo.createApplyPlanOnce(applyPlanInput);\n if (!planResult) return c.json({ error: \"proposal_or_approval_not_found\" }, 404);\n plan = planResult.plan;\n if (!planResult.created) {\n return c.json({ plan, alreadyPlanned: true }, 200);\n }\n } else {\n const planResult = await repo.createApplyPlan(applyPlanInput);\n if (!planResult) return c.json({ error: \"proposal_or_approval_not_found\" }, 404);\n plan = planResult;\n }\n if (body.execute && executableTarget) {\n const githubApply = input.githubApply;\n if (!githubApply) {\n return c.json({ error: \"github_apply_not_configured\" }, 422);\n }\n const preflightOutcomeByIntentId = new Map((plan.outcomes ?? []).map((outcome) => [outcome.intentId, outcome]));\n const executableIntents = executableTarget.proposal.snapshot.intents.filter((intent) => {\n const outcome = preflightOutcomeByIntentId.get(intent.intentId);\n return outcome?.outcome === \"skipped\" && outcome.message?.startsWith(\"Preflight passed\");\n });\n const target = {\n token: githubApply.token,\n owner: executableTarget.target.owner,\n repo: executableTarget.target.repoName,\n ...(typeof executableTarget.target.issueNumber === \"number\" ? { issueNumber: executableTarget.target.issueNumber } : {}),\n ...(executableTarget.target.pullRequestNumber ? { pullRequestNumber: executableTarget.target.pullRequestNumber } : {})\n };\n const executedOutcomes = [];\n const compilerRegistry = createAdapterMutationCompilerRegistry([\n createGitHubIssueMutationCompiler({\n mappings: mappingsFromAdapterPlan(plan.adapterPlan),\n ...(executableTarget.target.targetKind ? { targetKind: executableTarget.target.targetKind } : {})\n })\n ]);\n for (const compilation of compilerRegistry.compile(\"github\", executableIntents)) {\n if (!compilation.ok) {\n executedOutcomes.push(compilation.outcome);\n continue;\n }\n executedOutcomes.push(\n await applyGitHubIssueMutationOperation({\n target,\n operation: compilation.operation as GitHubIssueMutationOperation,\n ...(githubApply.fetchImpl ? { fetchImpl: githubApply.fetchImpl } : {})\n })\n );\n }\n const executedOutcomeByIntentId = new Map(executedOutcomes.map((outcome) => [outcome.intentId, outcome]));\n const mergedOutcomes = (plan.outcomes ?? []).map((outcome) => executedOutcomeByIntentId.get(outcome.intentId) ?? outcome);\n const executedPlan = await repo.updateApplyPlanOutcomes({\n id: plan.id,\n outcomes: mergedOutcomes,\n externalWritesExecuted: true\n });\n return c.json({ plan: executedPlan ?? plan }, 201);\n }\n return c.json({ plan }, 201);\n });\n\n app.get(\"/v1/apply-plans/:applyPlanId\", async (c) => {\n const plan = await repo.getApplyPlan({ id: c.req.param(\"applyPlanId\") });\n if (!plan) return c.json({ error: \"apply_plan_not_found\" }, 404);\n return c.json({ plan });\n });\n\n app.post(\"/v1/runs/:runId/child-runs\", async (c) => {\n const parentRunId = c.req.param(\"runId\");\n const body = await parseBody(c, ChildRunInputSchema);\n const parent = await repo.getRun({ runId: parentRunId });\n if (!parent) return c.json({ error: \"parent_run_not_found\" }, 404);\n const receivedAt = new Date().toISOString();\n const sourceProposalId = body.sourceProposalId ?? body.action.targetId;\n const { run } = await repo.createRun({\n id: body.runId,\n event: childEventFromParent({\n parentEvent: parent.event,\n childRunId: body.runId,\n ...(body.commandText ? { commandText: body.commandText } : {}),\n actionKind: body.action.kind,\n receivedAt\n }),\n parentRunId,\n triggeredByAction: body.action,\n ...(sourceProposalId ? { sourceProposalId } : {}),\n ...(body.sourceApplyPlanId ? { sourceApplyPlanId: body.sourceApplyPlanId } : {})\n });\n return c.json({ run }, 201);\n });\n\n app.get(\"/v1/runs/:runId\", async (c) => {\n const stored = await repo.getRun({ runId: c.req.param(\"runId\") });\n if (!stored) return c.json({ error: \"run_not_found\" }, 404);\n return c.json(stored);\n });\n\n app.get(\"/v1/runs/:runId/metrics\", async (c) => {\n const runId = c.req.param(\"runId\");\n const stored = await repo.getRun({ runId });\n if (!stored) return c.json({ error: \"run_not_found\" }, 404);\n const metrics = await repo.getRunMetrics({ runId });\n return c.json({ metrics });\n });\n\n app.get(\"/v1/runs/:runId/events\", async (c) => {\n const events = await repo.listRunEvents({ runId: c.req.param(\"runId\") });\n return c.json({ events });\n });\n\n app.onError((err, c) => {\n // Preserve explicit HTTP errors raised by handlers/middleware. Request-body\n // parse failures are surfaced as tagged HTTPException(400) by parseBody(),\n // so they are returned to the client here. Crucially, we no longer map raw\n // ZodError/SyntaxError to 400 globally: an internal ZodError (e.g. a store\n // repository validating a DB row) or a SyntaxError from an internal\n // JSON.parse must remain a 500 so monitoring still alerts on it.\n if (err instanceof HTTPException) {\n return err.getResponse();\n }\n // Unknown errors (including internal ZodError/SyntaxError) remain 500 so\n // monitoring still alerts on genuine server faults.\n console.error(\"dispatcher unhandled error\", err);\n return c.json({ error: \"internal_server_error\" }, 500);\n });\n\n return app;\n}\n","import {\n conversationKeysFromEvent,\n projectTargetRefFromEvent,\n RunAdmissionDecisionSchema,\n type OpenTagEvent,\n type OpenTagRun,\n type RunAdmissionDecision,\n type RunAdmissionReasonCode\n} from \"@opentag/core\";\nimport { type FollowUpRequest, type RepoBinding, type createOpenTagRepository } from \"@opentag/store\";\n\ntype Repository = ReturnType<typeof createOpenTagRepository>;\n\nexport type AgentAccessProfileCheckInput = {\n event: OpenTagEvent;\n binding: RepoBinding;\n};\n\nexport type AgentAccessProfileCheckResult =\n | { allowed: true }\n | {\n allowed: false;\n reason: string;\n reasonCode?: Extract<RunAdmissionReasonCode, \"agent_access_profile_denied\" | \"policy_rejected\">;\n };\n\nexport type AgentAccessProfileCheck = (input: AgentAccessProfileCheckInput) => Promise<AgentAccessProfileCheckResult>;\n\nexport type AdmitRunInput = {\n requestId: string;\n event: OpenTagEvent;\n};\n\nexport type AdmitRunResult =\n | {\n outcome: \"start\";\n decision: RunAdmissionDecision;\n binding: RepoBinding;\n }\n | {\n outcome: \"drop_duplicate\";\n decision: RunAdmissionDecision;\n run: OpenTagRun;\n idempotentReplay: true;\n }\n | {\n outcome: \"follow_up_queued\";\n decision: RunAdmissionDecision;\n followUpRequest: FollowUpRequest;\n }\n | {\n outcome: \"needs_human_decision\";\n decision: RunAdmissionDecision;\n };\n\nfunction isWriteCapable(event: OpenTagEvent): boolean {\n return event.permissions.some((permission) => [\"repo:write\", \"pr:create\", \"pr:update\"].includes(permission.scope));\n}\n\nfunction actorIsAllowed(event: OpenTagEvent, allowedActors: string[] | undefined): boolean {\n if (!allowedActors?.length) return true;\n return allowedActors.includes(event.actor.handle ?? \"\") || allowedActors.includes(event.actor.providerUserId);\n}\n\nfunction admissionDecision(input: {\n action: RunAdmissionDecision[\"action\"];\n reason: string;\n reasonCode: RunAdmissionReasonCode;\n event: OpenTagEvent;\n activeRunId?: string;\n}): RunAdmissionDecision {\n return RunAdmissionDecisionSchema.parse({\n action: input.action,\n reason: input.reason,\n reasonCode: input.reasonCode,\n decidedAt: new Date().toISOString(),\n ...(input.activeRunId ? { activeRunId: input.activeRunId } : {}),\n eventId: input.event.id\n });\n}\n\nasync function defaultAgentAccessProfileCheck(): Promise<AgentAccessProfileCheckResult> {\n return { allowed: true };\n}\n\nexport function createAdmissionRuntime(input: {\n repo: Repository;\n agentAccessProfileCheck?: AgentAccessProfileCheck;\n}) {\n const agentAccessProfileCheck = input.agentAccessProfileCheck ?? defaultAgentAccessProfileCheck;\n\n return {\n async admitRun(request: AdmitRunInput): Promise<AdmitRunResult> {\n const existingRun = await input.repo.getRunByEventId({ eventId: request.event.id });\n if (existingRun) {\n return {\n outcome: \"drop_duplicate\",\n decision: admissionDecision({\n action: \"drop_duplicate\",\n reason: \"Source event already created a run.\",\n reasonCode: \"duplicate_source_event\",\n event: request.event,\n activeRunId: existingRun.run.id\n }),\n run: existingRun.run,\n idempotentReplay: true\n };\n }\n\n const repoKey = projectTargetRefFromEvent(request.event);\n if (!repoKey) {\n return {\n outcome: \"needs_human_decision\",\n decision: admissionDecision({\n action: \"needs_human_decision\",\n reason: \"The event did not resolve to a repository context.\",\n reasonCode: \"repo_context_missing\",\n event: request.event\n })\n };\n }\n\n const binding = await input.repo.getRepoBinding(repoKey);\n if (!binding) {\n return {\n outcome: \"needs_human_decision\",\n decision: admissionDecision({\n action: \"needs_human_decision\",\n reason: \"No repository binding is configured for this work context.\",\n reasonCode: \"repo_not_bound\",\n event: request.event\n })\n };\n }\n\n if (isWriteCapable(request.event) && !actorIsAllowed(request.event, binding.allowedActors)) {\n return {\n outcome: \"needs_human_decision\",\n decision: admissionDecision({\n action: \"needs_human_decision\",\n reason: \"The requesting actor is not allowed to start a write-capable run in this repository.\",\n reasonCode: \"actor_not_allowed_for_write\",\n event: request.event\n })\n };\n }\n\n const accessDecision = await agentAccessProfileCheck({ event: request.event, binding });\n if (!accessDecision.allowed) {\n return {\n outcome: \"needs_human_decision\",\n decision: admissionDecision({\n action: \"needs_human_decision\",\n reason: accessDecision.reason,\n reasonCode: accessDecision.reasonCode ?? \"agent_access_profile_denied\",\n event: request.event\n })\n };\n }\n\n let activeRun: { run: OpenTagRun; event: OpenTagEvent } | null = null;\n for (const conversationKey of conversationKeysFromEvent(request.event)) {\n activeRun = await input.repo.findActiveRunForConversation({ conversationKey });\n if (activeRun) break;\n }\n if (activeRun) {\n const decision = admissionDecision({\n action: \"queue_follow_up\",\n reason: \"A run is already active for this thread; queue the new request as follow-up work.\",\n reasonCode: isWriteCapable(request.event) ? \"active_write_run_same_thread\" : \"active_run_same_thread\",\n event: request.event,\n activeRunId: activeRun.run.id\n });\n const { followUpRequest, created } = await input.repo.createFollowUpRequest({\n id: request.requestId,\n event: request.event,\n decision,\n activeRunId: activeRun.run.id\n });\n if (created) {\n await input.repo.appendRunEvent({\n runId: activeRun.run.id,\n type: \"follow_up_request.queued\",\n payload: { followUpRequestId: followUpRequest.id, sourceEventId: request.event.id },\n visibility: \"audit\",\n importance: \"normal\",\n message: decision.reason\n });\n }\n return {\n outcome: \"follow_up_queued\",\n decision,\n followUpRequest\n };\n }\n\n return {\n outcome: \"start\",\n decision: admissionDecision({\n action: \"start\",\n reason: \"Source event accepted and ready to create a run.\",\n reasonCode: \"new_event\",\n event: request.event\n }),\n binding\n };\n }\n };\n}\n"],"mappings":"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","names":["conversationKeysFromEvent","projectTargetRefFromEvent","metadataString","conversationKeysFromEvent","projectTargetRefFromEvent","existingDecision","childRun","body"]}
|
|
1
|
+
{"version":3,"sources":["../src/callbacks.ts","../src/presentation.ts","../src/server.ts","../src/admission.ts"],"sourcesContent":["import {\n createLarkReplyClient,\n patchLarkMessageCard,\n type LarkCard,\n type LarkReplyClient,\n parseLarkThreadKey,\n replyLarkMessage,\n updateLarkTextMessage\n} from \"@opentag/lark\";\nimport {\n createSlackPostMessagePayload,\n createSlackReactionPayload,\n createSlackUpdateMessagePayload,\n parseSlackThreadKey,\n slackSourceReceiptReactionName\n} from \"@opentag/slack\";\nimport { createTelegramSendMessageDraftPayload, createTelegramSendMessagePayload, parseTelegramThreadKey } from \"@opentag/telegram\";\nimport type { CallbackDeliveryResult, CallbackMessage, CallbackSink, SourceReceipt, SourceReceiptSink } from \"./server.js\";\n\nexport type FetchLike = typeof fetch;\n\nconst DEFAULT_SLACK_SOURCE_RECEIPT_TIMEOUT_MS = 5_000;\n\nfunction slackUpdateUriFrom(postMessageUri: string): string {\n return postMessageUri.replace(/\\/chat\\.postMessage$/, \"/chat.update\");\n}\n\nfunction githubCommentUriFrom(input: { commentsUri: string; responseBody: { id?: number; url?: string } }): string | undefined {\n if (input.responseBody.url) return input.responseBody.url;\n if (typeof input.responseBody.id === \"number\") {\n return input.commentsUri.replace(/\\/comments$/, `/comments/${input.responseBody.id}`);\n }\n return undefined;\n}\n\nfunction slackBotTokenFor(input: {\n botToken?: string | undefined;\n botTokensByAgentId?: Record<string, string> | undefined;\n agentId?: string | undefined;\n}): string | undefined {\n if (\n input.agentId &&\n input.botTokensByAgentId &&\n Object.hasOwn(input.botTokensByAgentId, input.agentId) &&\n typeof input.botTokensByAgentId[input.agentId] === \"string\"\n ) {\n return input.botTokensByAgentId[input.agentId];\n }\n return input.botToken;\n}\n\nfunction metadataString(metadata: Record<string, unknown>, key: string): string | undefined {\n const value = metadata[key];\n return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nfunction slackSourceMessageTarget(receipt: SourceReceipt): { channelId: string; messageTs: string } | null {\n if (receipt.provider !== \"slack\") return null;\n const channelId = metadataString(receipt.event.metadata, \"channelId\");\n const messageTs = metadataString(receipt.event.metadata, \"messageTs\");\n return channelId && messageTs ? { channelId, messageTs } : null;\n}\n\nfunction isAbortError(error: unknown): boolean {\n return error instanceof Error && error.name === \"AbortError\";\n}\n\nasync function fetchWithTimeout(input: {\n fetchImpl: FetchLike;\n uri: string;\n init: RequestInit;\n timeoutMs: number;\n}): Promise<Response | null> {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), input.timeoutMs);\n try {\n return await input.fetchImpl(input.uri, { ...input.init, signal: controller.signal });\n } catch (error) {\n if (isAbortError(error)) return null;\n throw error;\n } finally {\n clearTimeout(timeout);\n }\n}\n\nexport function createGitHubCallbackSink(input: { token?: string; fetchImpl?: FetchLike }): CallbackSink {\n const fetchImpl = input.fetchImpl ?? fetch;\n const commentUriByKey = new Map<string, string>();\n const deliveryByKey = new Map<string, Promise<void>>();\n\n return {\n async deliver(message: CallbackMessage): Promise<void> {\n if (message.provider !== \"github\") return;\n if (!input.token) return;\n\n const statusKey = message.statusMessageKey ?? `${message.runId}:status`;\n const previous = deliveryByKey.get(statusKey) ?? Promise.resolve();\n const current = previous.then(async () => {\n const existingCommentUri = commentUriByKey.get(statusKey);\n const response = await fetchImpl(existingCommentUri ?? message.uri, {\n method: existingCommentUri ? \"PATCH\" : \"POST\",\n headers: {\n accept: \"application/vnd.github+json\",\n authorization: `Bearer ${input.token}`,\n \"content-type\": \"application/json\",\n \"x-github-api-version\": \"2022-11-28\"\n },\n body: JSON.stringify({ body: message.body })\n });\n\n if (!response.ok) {\n throw new Error(`deliver GitHub callback failed: ${response.status} ${await response.text()}`);\n }\n if (!existingCommentUri) {\n const body = (await response.json()) as { id?: number; url?: string };\n const commentUri = githubCommentUriFrom({ commentsUri: message.uri, responseBody: body });\n if (commentUri) {\n commentUriByKey.set(statusKey, commentUri);\n }\n }\n if (message.kind === \"final\") {\n commentUriByKey.delete(statusKey);\n }\n });\n deliveryByKey.set(statusKey, current);\n await current.finally(() => {\n if (deliveryByKey.get(statusKey) === current) {\n deliveryByKey.delete(statusKey);\n }\n });\n }\n };\n}\n\nexport function createSlackCallbackSink(input: {\n botToken?: string;\n botTokensByAgentId?: Record<string, string>;\n fetchImpl?: FetchLike;\n}): CallbackSink {\n const fetchImpl = input.fetchImpl ?? fetch;\n const statusMessageTsByKey = new Map<string, string>();\n\n return {\n async deliver(message: CallbackMessage): Promise<void> {\n if (message.provider !== \"slack\") return;\n const botToken = slackBotTokenFor({\n botToken: input.botToken,\n botTokensByAgentId: input.botTokensByAgentId,\n agentId: message.agentId\n });\n if (!botToken) return;\n\n const thread = parseSlackThreadKey(message.threadKey ?? \"\");\n const existingStatusTs = message.statusMessageKey ? statusMessageTsByKey.get(message.statusMessageKey) : undefined;\n const response = await fetchImpl(existingStatusTs ? slackUpdateUriFrom(message.uri) : message.uri, {\n method: \"POST\",\n headers: {\n authorization: `Bearer ${botToken}`,\n \"content-type\": \"application/json\"\n },\n body: JSON.stringify(\n existingStatusTs\n ? createSlackUpdateMessagePayload({\n channelId: thread.channelId,\n text: message.body,\n messageTs: existingStatusTs,\n ...(message.blocks?.length ? { blocks: message.blocks } : {})\n })\n : createSlackPostMessagePayload({\n channelId: thread.channelId,\n text: message.body,\n threadTs: thread.threadTs,\n ...(message.blocks?.length ? { blocks: message.blocks } : {})\n })\n )\n });\n\n if (!response.ok) {\n throw new Error(`deliver Slack callback failed: ${response.status} ${await response.text()}`);\n }\n const body = (await response.json()) as { ok?: boolean; error?: string; ts?: string };\n if (body.ok === false) {\n throw new Error(`deliver Slack callback failed: ${body.error ?? \"unknown_error\"}`);\n }\n if (message.statusMessageKey && !existingStatusTs && body.ts) {\n statusMessageTsByKey.set(message.statusMessageKey, body.ts);\n }\n if (message.kind === \"final\") {\n for (const key of statusMessageTsByKey.keys()) {\n if (key.startsWith(`${message.runId}:`)) {\n statusMessageTsByKey.delete(key);\n }\n }\n }\n }\n };\n}\n\nexport function createSlackSourceReceiptSink(input: {\n botToken?: string;\n botTokensByAgentId?: Record<string, string>;\n fetchImpl?: FetchLike;\n reactionsAddUri?: string;\n timeoutMs?: number;\n}): SourceReceiptSink {\n const fetchImpl = input.fetchImpl ?? fetch;\n const reactionsAddUri = input.reactionsAddUri ?? \"https://slack.com/api/reactions.add\";\n const timeoutMs = input.timeoutMs ?? DEFAULT_SLACK_SOURCE_RECEIPT_TIMEOUT_MS;\n\n return {\n async deliver(receipt: SourceReceipt) {\n const target = slackSourceMessageTarget(receipt);\n if (!target) return { delivered: false };\n\n const botToken = slackBotTokenFor({\n botToken: input.botToken,\n botTokensByAgentId: input.botTokensByAgentId,\n agentId: receipt.agentId\n });\n if (!botToken) return { delivered: false };\n\n const response = await fetchWithTimeout({\n fetchImpl,\n uri: reactionsAddUri,\n timeoutMs,\n init: {\n method: \"POST\",\n headers: {\n authorization: `Bearer ${botToken}`,\n \"content-type\": \"application/json\"\n },\n body: JSON.stringify(\n createSlackReactionPayload({\n channelId: target.channelId,\n messageTs: target.messageTs,\n name: slackSourceReceiptReactionName(receipt.state)\n })\n )\n }\n });\n if (!response) return { delivered: false };\n\n if (!response.ok) {\n throw new Error(`deliver Slack source receipt failed: ${response.status} ${await response.text()}`);\n }\n const body = (await response.json().catch(() => ({}))) as { ok?: boolean; error?: string } | null;\n if (body?.ok === false && body.error !== \"already_reacted\") {\n throw new Error(`deliver Slack source receipt failed: ${body?.error ?? \"unknown_error\"}`);\n }\n return { delivered: true };\n }\n };\n}\n\nexport function createLarkCallbackSink(input: {\n appId?: string;\n appSecret?: string;\n domain?: \"lark\" | \"feishu\";\n client?: LarkReplyClient;\n}): CallbackSink {\n // Reject partial credentials so a misconfigured sink fails at startup, not silently.\n if (!input.client && Boolean(input.appId) !== Boolean(input.appSecret)) {\n throw new Error(\"Lark callback sink requires both appId and appSecret (or neither).\");\n }\n\n const client: LarkReplyClient | undefined =\n input.client ??\n (input.appId && input.appSecret\n ? createLarkReplyClient({ appId: input.appId, appSecret: input.appSecret, ...(input.domain ? { domain: input.domain } : {}) })\n : undefined);\n\n return {\n async deliver(message: CallbackMessage): Promise<CallbackDeliveryResult | void> {\n if (message.provider !== \"lark\") return;\n // A lark run was accepted, so a missing client/threadKey is a real failure, not a silent success.\n if (!client) {\n throw new Error(\"Lark callback sink received a lark message but has no client configured (missing appId/appSecret).\");\n }\n if (!message.threadKey) {\n throw new Error(\"Lark callback message is missing threadKey.\");\n }\n if (message.externalMessageId) {\n if (message.rich?.provider === \"lark\") {\n await patchLarkMessageCard(client, {\n messageId: message.externalMessageId,\n card: message.rich.payload as LarkCard\n });\n } else {\n await updateLarkTextMessage(client, {\n messageId: message.externalMessageId,\n text: message.body\n });\n }\n return { externalMessageId: message.externalMessageId };\n }\n const { messageId } = parseLarkThreadKey(message.threadKey);\n const reply = await replyLarkMessage(client, {\n messageId,\n text: message.body,\n ...(message.rich?.provider === \"lark\" ? { card: message.rich.payload as LarkCard } : {})\n });\n return reply.messageId ? { externalMessageId: reply.messageId } : undefined;\n }\n };\n}\n\nexport function createTelegramCallbackSink(input: {\n botToken?: string;\n botTokensByAgentId?: Record<string, string>;\n fetchImpl?: FetchLike;\n}): CallbackSink {\n const fetchImpl = input.fetchImpl ?? fetch;\n const draftIdByKey = new Map<string, number>();\n let nextDraftId = 1;\n\n return {\n async deliver(message: CallbackMessage): Promise<void> {\n if (message.provider !== \"telegram\") return;\n const botToken = slackBotTokenFor({\n botToken: input.botToken,\n botTokensByAgentId: input.botTokensByAgentId,\n agentId: message.agentId\n });\n if (!botToken) return;\n\n const thread = parseTelegramThreadKey(message.threadKey ?? \"\");\n const statusKey = message.statusMessageKey ?? `${message.runId}:status`;\n const isDraft = message.kind === \"progress\";\n const draftId = isDraft ? (draftIdByKey.get(statusKey) ?? nextDraftId++) : undefined;\n if (isDraft && draftId && !draftIdByKey.has(statusKey)) {\n draftIdByKey.set(statusKey, draftId);\n }\n\n const response = await fetchImpl(`https://api.telegram.org/bot${botToken}/${isDraft ? \"sendMessageDraft\" : \"sendMessage\"}`, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\"\n },\n body: JSON.stringify(\n isDraft\n ? createTelegramSendMessageDraftPayload({\n chatId: thread.chatId,\n text: message.body,\n draftId: draftId!,\n ...(thread.messageThreadId ? { messageThreadId: thread.messageThreadId } : {})\n })\n : createTelegramSendMessagePayload({\n chatId: thread.chatId,\n text: message.body,\n replyToMessageId: thread.replyToMessageId,\n ...(thread.messageThreadId ? { messageThreadId: thread.messageThreadId } : {})\n })\n )\n });\n\n if (!response.ok) {\n throw new Error(`deliver Telegram callback failed: ${response.status} ${await response.text()}`);\n }\n const body = (await response.json()) as { ok?: boolean; description?: string };\n if (body.ok === false) {\n throw new Error(`deliver Telegram callback failed: ${body.description ?? \"unknown_error\"}`);\n }\n if (message.kind === \"final\") {\n draftIdByKey.delete(statusKey);\n }\n }\n };\n}\n\nexport function createCompositeCallbackSink(sinks: CallbackSink[]): CallbackSink {\n return {\n async deliver(message: CallbackMessage): Promise<CallbackDeliveryResult | void> {\n let result: CallbackDeliveryResult | undefined;\n let delivered = false;\n const failures: unknown[] = [];\n for (const sink of sinks) {\n try {\n const deliveredResult = await sink.deliver(message);\n delivered = true;\n if (deliveredResult?.externalMessageId && !result?.externalMessageId) {\n result = { externalMessageId: deliveredResult.externalMessageId };\n }\n } catch (error) {\n failures.push(error);\n }\n }\n if (!delivered && failures.length > 0) {\n throw new AggregateError(failures, \"Composite callback delivery failed for every sink.\");\n }\n return result;\n }\n };\n}\n","import {\n createFinalSummaryPresentation,\n createRunStatusPresentation,\n platformCapabilityForProvider,\n renderOpenTagPresentationPlainText,\n shouldDeliverCallbackProgress,\n shouldDeliverCallbackRunStatus,\n type ActionReceiptContext,\n type OpenTagActionReceiptPresentation,\n type OpenTagDoctorSummaryPresentation,\n type OpenTagFinalSummaryPresentation,\n type OpenTagPresentation,\n type OpenTagRunResult,\n type OpenTagRunStatusPresentation,\n type OpenTagSourceThreadStatusPresentation\n} from \"@opentag/core\";\nimport { renderAcknowledgement, renderFinalSummaryPresentation, renderProgress } from \"@opentag/github\";\nimport {\n createLarkActionReceiptCard,\n createLarkDoctorSummaryCard,\n createLarkFinalSummaryCard,\n createLarkRunStatusCard,\n createLarkSourceThreadStatusCard,\n renderLarkActionReceiptPresentation,\n renderLarkFinalSummaryPresentation,\n renderLarkRunStatusPresentation\n} from \"@opentag/lark\";\nimport {\n createSlackActionReceiptBlocks,\n createSlackDoctorSummaryBlocks,\n createSlackFinalSummaryBlocks,\n createSlackSourceThreadStatusBlocks,\n renderSlackActionReceiptPresentation,\n renderSlackAcknowledgement,\n renderSlackFinalSummaryPresentation,\n type SlackBlock\n} from \"@opentag/slack\";\nimport { renderTelegramAcknowledgement, renderTelegramFinalSummaryPresentation, renderTelegramProgress } from \"@opentag/telegram\";\nimport type { CallbackMessage } from \"./server.js\";\n\nexport type CallbackProvider = CallbackMessage[\"provider\"];\n\nexport type PresentedCallbackBody = {\n body: string;\n blocks?: SlackBlock[];\n rich?: CallbackMessage[\"rich\"];\n};\n\nexport type CallbackPresentation = {\n shouldDeliverAcknowledgement(provider: CallbackProvider): boolean;\n shouldDeliverStatusUpdate(provider: CallbackProvider): boolean;\n shouldDeliverRunStatusUpdate?(input: { provider: CallbackProvider; state: OpenTagRunStatusPresentation[\"state\"] }): boolean;\n shouldDeliverProgress(provider: CallbackProvider): boolean;\n runStatusPresentation(input: {\n runId: string;\n state: OpenTagRunStatusPresentation[\"state\"];\n message?: string;\n nextAction?: string;\n detailVisibility?: OpenTagRunStatusPresentation[\"detailVisibility\"];\n }): OpenTagRunStatusPresentation;\n acknowledgementPresentation(input: { runId: string }): OpenTagRunStatusPresentation;\n progressPresentation(input: { runId: string; message: string }): OpenTagRunStatusPresentation;\n finalPresentation(input: { result: OpenTagRunResult; runId?: string; receiptContext?: ActionReceiptContext }): OpenTagFinalSummaryPresentation;\n render(input: { provider: CallbackProvider; presentation: OpenTagPresentation }): PresentedCallbackBody;\n acknowledgement(input: { provider: CallbackProvider; runId: string }): string;\n runStatus(input: {\n provider: CallbackProvider;\n runId: string;\n state: OpenTagRunStatusPresentation[\"state\"];\n message?: string;\n nextAction?: string;\n detailVisibility?: OpenTagRunStatusPresentation[\"detailVisibility\"];\n }): PresentedCallbackBody;\n progress(input: { provider: CallbackProvider; runId: string; message: string }): string;\n final(input: { provider: CallbackProvider; result: OpenTagRunResult; runId?: string; receiptContext?: ActionReceiptContext }): PresentedCallbackBody;\n};\n\nfunction renderRunStatus(provider: CallbackProvider, presentation: OpenTagRunStatusPresentation): PresentedCallbackBody {\n const canRenderRich = supportsRichPresentation(provider);\n if (canRenderRich && provider === \"lark\") {\n return {\n body: renderLarkRunStatusPresentation(presentation),\n rich: {\n provider: \"lark\",\n payload: createLarkRunStatusCard(presentation)\n }\n };\n }\n\n if (presentation.state === \"received\") {\n if (provider === \"slack\") {\n return { body: renderSlackAcknowledgement(presentation.runId) };\n }\n if (provider === \"telegram\") {\n return { body: renderTelegramAcknowledgement(presentation.runId) };\n }\n return { body: renderAcknowledgement(presentation.runId) };\n }\n\n const message = presentation.message ?? presentation.nextAction ?? presentation.state;\n if (provider === \"telegram\") {\n return { body: renderTelegramProgress(message) };\n }\n return { body: renderProgress({ runId: presentation.runId, message }) };\n}\n\nfunction supportsRichPresentation(provider: CallbackProvider): boolean {\n return platformCapabilityForProvider(provider)?.supportsRichPresentation === true;\n}\n\nfunction renderFinalSummary(provider: CallbackProvider, presentation: OpenTagFinalSummaryPresentation): PresentedCallbackBody {\n const canRenderRich = supportsRichPresentation(provider);\n if (canRenderRich && provider === \"slack\") {\n return {\n body: renderSlackFinalSummaryPresentation(presentation),\n blocks: createSlackFinalSummaryBlocks(presentation)\n };\n }\n if (canRenderRich && provider === \"lark\") {\n return {\n body: renderLarkFinalSummaryPresentation(presentation),\n rich: {\n provider: \"lark\",\n payload: createLarkFinalSummaryCard(presentation)\n }\n };\n }\n if (provider === \"telegram\") {\n return { body: renderTelegramFinalSummaryPresentation(presentation) };\n }\n return { body: renderFinalSummaryPresentation(presentation) };\n}\n\nfunction renderDoctorSummary(provider: CallbackProvider, presentation: OpenTagDoctorSummaryPresentation): PresentedCallbackBody {\n const body = renderOpenTagPresentationPlainText(presentation);\n const canRenderRich = supportsRichPresentation(provider);\n if (canRenderRich && provider === \"slack\") {\n return {\n body,\n blocks: createSlackDoctorSummaryBlocks(presentation)\n };\n }\n if (canRenderRich && provider === \"lark\") {\n return {\n body,\n rich: {\n provider: \"lark\",\n payload: createLarkDoctorSummaryCard(presentation)\n }\n };\n }\n return { body };\n}\n\nfunction renderSourceThreadStatus(provider: CallbackProvider, presentation: OpenTagSourceThreadStatusPresentation): PresentedCallbackBody {\n const body = renderOpenTagPresentationPlainText(presentation);\n const canRenderRich = supportsRichPresentation(provider);\n if (canRenderRich && provider === \"slack\") {\n return {\n body,\n blocks: createSlackSourceThreadStatusBlocks(presentation)\n };\n }\n if (canRenderRich && provider === \"lark\") {\n return {\n body,\n rich: {\n provider: \"lark\",\n payload: createLarkSourceThreadStatusCard(presentation)\n }\n };\n }\n return { body };\n}\n\nfunction renderActionReceipt(provider: CallbackProvider, presentation: OpenTagActionReceiptPresentation): PresentedCallbackBody {\n const body =\n provider === \"slack\"\n ? renderSlackActionReceiptPresentation(presentation)\n : provider === \"lark\"\n ? renderLarkActionReceiptPresentation(presentation)\n : renderOpenTagPresentationPlainText(presentation);\n const canRenderRich = supportsRichPresentation(provider);\n if (canRenderRich && provider === \"slack\") {\n return {\n body,\n blocks: createSlackActionReceiptBlocks(presentation)\n };\n }\n if (canRenderRich && provider === \"lark\") {\n return {\n body,\n rich: {\n provider: \"lark\",\n payload: createLarkActionReceiptCard(presentation)\n }\n };\n }\n return { body };\n}\n\nexport function createDefaultCallbackPresentation(): CallbackPresentation {\n return {\n shouldDeliverAcknowledgement(provider) {\n return shouldDeliverCallbackRunStatus(provider);\n },\n\n shouldDeliverStatusUpdate(provider) {\n return shouldDeliverCallbackRunStatus(provider);\n },\n\n shouldDeliverRunStatusUpdate(input) {\n if (input.provider === \"lark\" && input.state === \"running\") return false;\n return this.shouldDeliverStatusUpdate(input.provider);\n },\n\n shouldDeliverProgress(provider) {\n return shouldDeliverCallbackProgress(provider);\n },\n\n runStatusPresentation(input) {\n return createRunStatusPresentation({\n runId: input.runId,\n state: input.state,\n ...(input.message ? { message: input.message } : {}),\n ...(input.nextAction ? { nextAction: input.nextAction } : {}),\n ...(input.detailVisibility ? { detailVisibility: input.detailVisibility } : {})\n });\n },\n\n acknowledgementPresentation(input) {\n return this.runStatusPresentation({\n runId: input.runId,\n state: \"received\",\n detailVisibility: \"source_thread\"\n });\n },\n\n progressPresentation(input) {\n return this.runStatusPresentation({\n runId: input.runId,\n state: \"running\",\n message: input.message,\n detailVisibility: \"audit\"\n });\n },\n\n finalPresentation(input) {\n return createFinalSummaryPresentation({\n result: input.result,\n ...(input.receiptContext ? { receiptContext: input.receiptContext } : {}),\n ...(input.runId ? { auditRunId: input.runId } : {})\n });\n },\n\n render(input) {\n if (input.presentation.kind === \"run_status\") {\n return renderRunStatus(input.provider, input.presentation);\n }\n if (input.presentation.kind === \"final_summary\") {\n return renderFinalSummary(input.provider, input.presentation);\n }\n if (input.presentation.kind === \"doctor_summary\") {\n return renderDoctorSummary(input.provider, input.presentation);\n }\n if (input.presentation.kind === \"source_thread_status\") {\n return renderSourceThreadStatus(input.provider, input.presentation);\n }\n if (input.presentation.kind === \"action_receipt\") {\n return renderActionReceipt(input.provider, input.presentation);\n }\n return {\n body: renderOpenTagPresentationPlainText(input.presentation)\n };\n },\n\n acknowledgement(input) {\n return this.render({ provider: input.provider, presentation: this.acknowledgementPresentation({ runId: input.runId }) }).body;\n },\n\n runStatus(input) {\n return this.render({\n provider: input.provider,\n presentation: this.runStatusPresentation({\n runId: input.runId,\n state: input.state,\n ...(input.message ? { message: input.message } : {}),\n ...(input.nextAction ? { nextAction: input.nextAction } : {}),\n ...(input.detailVisibility ? { detailVisibility: input.detailVisibility } : {})\n })\n });\n },\n\n progress(input) {\n return this.runStatus({\n provider: input.provider,\n runId: input.runId,\n state: \"running\",\n message: input.message,\n detailVisibility: \"audit\"\n }).body;\n },\n\n final(input) {\n return this.render({\n provider: input.provider,\n presentation: this.finalPresentation({\n result: input.result,\n ...(input.runId ? { runId: input.runId } : {}),\n ...(input.receiptContext ? { receiptContext: input.receiptContext } : {})\n })\n });\n }\n };\n}\n","import { createHash, randomUUID } from \"node:crypto\";\nimport {\n AdapterMutationMappingSchema,\n ActorIdentitySchema,\n ActionHintSchema,\n capabilityForMutationIntent,\n conversationKeysFromEvent,\n parseThreadActionCommand,\n permissionScopesAllowCapability,\n projectTargetRefFromEvent,\n suggestedActionCandidatesFromSnapshots,\n type ActorIdentity,\n type ActionReceiptCapability,\n type ActionReceiptContext,\n type ApplyIntentOutcome,\n type ApplyPlan,\n type MutationIntent,\n type OpenTagEvent,\n type OpenTagRunResult,\n type OpenTagRun,\n type PermissionGrant,\n type SuggestedChangesSnapshot,\n type SuggestedActionCandidate,\n type ThreadActionCommand,\n createAdapterMutationCompilerRegistry,\n OpenTagEventSchema,\n OpenTagRunResultSchema,\n PolicyRuleSchema,\n RunEventImportanceSchema,\n RunEventVisibilitySchema,\n DEFAULT_MAX_REQUEST_BODY_BYTES,\n RequestBodyTooLargeError,\n platformCapabilityForProvider,\n readRequestTextWithLimit,\n shouldDeliverSourceReceipt\n} from \"@opentag/core\";\nimport {\n applyGitHubIssueMutationOperation,\n createGitHubIssueMutationCompiler,\n type FetchLike as GitHubFetchLike\n} from \"@opentag/github\";\nimport type { GitHubIssueMutationOperation } from \"@opentag/github\";\nimport type { SlackBlock } from \"@opentag/slack\";\nimport { createOpenTagRepository, migrateSchema } from \"@opentag/store\";\nimport Database from \"better-sqlite3\";\nimport { drizzle } from \"drizzle-orm/better-sqlite3\";\nimport { Hono } from \"hono\";\nimport type { Context } from \"hono\";\nimport { HTTPException } from \"hono/http-exception\";\nimport { z } from \"zod\";\n\n/**\n * Parse and validate a request body, mapping ONLY request-body parse failures to\n * HTTP client errors. Oversized bodies return 413, malformed JSON returns 400,\n * and request-schema validation failures return 400 so the global onError\n * handler can return them to the client without masking unrelated internal\n * ZodError/SyntaxError as 400s. Any other error is rethrown unchanged and falls\n * through to a 500.\n */\nexport type DispatcherRateLimitOptions = {\n windowMs: number;\n maxRequests: number;\n now?(): number;\n};\n\ntype DispatcherRateLimitBucket = {\n count: number;\n resetAt: number;\n};\n\nclass RequestBodyRejectedError extends Error {\n readonly reason: \"invalid_json_body\" | \"invalid_request_body\";\n readonly publicError: string;\n\n constructor(input: { reason: \"invalid_json_body\" | \"invalid_request_body\"; publicError?: string }) {\n super(input.reason);\n this.name = \"RequestBodyRejectedError\";\n this.reason = input.reason;\n this.publicError = input.publicError ?? input.reason;\n }\n}\n\nfunction requestBodyTooLarge(c: Context, maxBytes: number): HTTPException {\n return new HTTPException(413, {\n res: c.json({ error: \"request_body_too_large\", maxBytes }, 413)\n });\n}\n\nasync function parseBody<S extends z.ZodTypeAny>(\n c: Context,\n schema: S,\n options: { maxBytes?: number; invalidBodyError?: string } = {}\n): Promise<z.infer<S>> {\n let json: unknown;\n try {\n const rawBody = await readRequestTextWithLimit(c.req.raw, { maxBytes: options.maxBytes ?? DEFAULT_MAX_REQUEST_BODY_BYTES });\n json = JSON.parse(rawBody);\n } catch (err) {\n if (err instanceof RequestBodyTooLargeError) throw requestBodyTooLarge(c, err.maxBytes);\n if (err instanceof HTTPException) throw err;\n if (err instanceof SyntaxError) {\n throw new HTTPException(400, {\n res: c.json({ error: \"invalid_json_body\" }, 400),\n cause: new RequestBodyRejectedError({ reason: \"invalid_json_body\" })\n });\n }\n throw err;\n }\n\n const result = schema.safeParse(json);\n if (!result.success) {\n const publicError = options.invalidBodyError ?? \"invalid_request_body\";\n throw new HTTPException(400, {\n res: c.json({ error: publicError, issues: result.error.issues }, 400),\n cause: new RequestBodyRejectedError({ reason: \"invalid_request_body\", publicError })\n });\n }\n return result.data;\n}\n\nfunction normalizeRateLimitedEndpoint(method: string, path: string): string {\n return `${method.toUpperCase()} ${path}`\n .replace(/^([A-Z]+) \\/v1\\/runners\\/[^/]+\\/runs\\/[^/]+/, \"$1 /v1/runners/:runnerId/runs/:runId\")\n .replace(/^([A-Z]+) \\/v1\\/runners\\/[^/]+/, \"$1 /v1/runners/:runnerId\")\n .replace(/^([A-Z]+) \\/v1\\/repo-bindings\\/[^/]+\\/[^/]+\\/[^/]+/, \"$1 /v1/repo-bindings/:provider/:owner/:repo\")\n .replace(/^([A-Z]+) \\/v1\\/channel-bindings\\/[^/]+\\/[^/]+\\/[^/]+/, \"$1 /v1/channel-bindings/:provider/:accountId/:conversationId\")\n .replace(/^([A-Z]+) \\/v1\\/slack-channel-bindings\\/[^/]+\\/[^/]+/, \"$1 /v1/slack-channel-bindings/:teamId/:channelId\")\n .replace(/^([A-Z]+) \\/v1\\/follow-up-requests\\/[^/]+/, \"$1 /v1/follow-up-requests/:id\")\n .replace(/^([A-Z]+) \\/v1\\/proposals\\/[^/]+/, \"$1 /v1/proposals/:proposalId\")\n .replace(/^([A-Z]+) \\/v1\\/approvals\\/[^/]+/, \"$1 /v1/approvals/:approvalDecisionId\")\n .replace(/^([A-Z]+) \\/v1\\/apply-plans\\/[^/]+/, \"$1 /v1/apply-plans/:applyPlanId\")\n .replace(/^([A-Z]+) \\/v1\\/runs\\/[^/]+/, \"$1 /v1/runs/:runId\");\n}\n\nfunction rateLimitRunnerId(path: string): string {\n return path.match(/^\\/v1\\/runners\\/([^/]+)/)?.[1] ?? \"none\";\n}\n\nfunction rateLimitSourcePlatform(path: string): string {\n const channelProvider = path.match(/^\\/v1\\/channel-bindings\\/([^/]+)/)?.[1];\n if (channelProvider) return channelProvider;\n const repoProvider = path.match(/^\\/v1\\/repo-bindings\\/([^/]+)/)?.[1];\n if (repoProvider) return repoProvider;\n if (path.startsWith(\"/v1/slack-channel-bindings/\")) return \"slack\";\n return \"unknown\";\n}\n\nfunction safeDecodeRateLimitSegment(value: string | undefined): string | undefined {\n if (!value) return undefined;\n try {\n return decodeURIComponent(value);\n } catch {\n return value;\n }\n}\n\nfunction rateLimitTenant(path: string): string {\n const channel = path.match(/^\\/v1\\/channel-bindings\\/([^/]+)\\/([^/]+)/);\n if (channel) {\n const provider = safeDecodeRateLimitSegment(channel[1]) ?? \"unknown\";\n const accountId = safeDecodeRateLimitSegment(channel[2]) ?? \"unknown\";\n return `${provider}:${accountId}`;\n }\n\n const legacySlack = path.match(/^\\/v1\\/slack-channel-bindings\\/([^/]+)/);\n if (legacySlack) return `slack:${safeDecodeRateLimitSegment(legacySlack[1]) ?? \"unknown\"}`;\n\n const repo = path.match(/^\\/v1\\/repo-bindings\\/([^/]+)\\/([^/]+)/);\n if (repo) {\n const provider = safeDecodeRateLimitSegment(repo[1]) ?? \"unknown\";\n const owner = safeDecodeRateLimitSegment(repo[2]) ?? \"unknown\";\n return `${provider}:${owner}`;\n }\n\n return \"unknown\";\n}\n\nfunction rateLimitTokenFingerprint(authorization: string | null): string {\n if (!authorization) return \"none\";\n return createHash(\"sha256\").update(authorization).digest(\"hex\").slice(0, 16);\n}\n\nfunction rawTokenFingerprint(token: string): string {\n return createHash(\"sha256\").update(token).digest(\"hex\");\n}\n\nfunction rateLimitKey(c: Context): string {\n const path = new URL(c.req.url).pathname;\n return [\n `token=${rateLimitTokenFingerprint(c.req.raw.headers.get(\"authorization\"))}`,\n `runner=${rateLimitRunnerId(path)}`,\n `source=${rateLimitSourcePlatform(path)}`,\n `tenant=${rateLimitTenant(path)}`,\n `endpoint=${normalizeRateLimitedEndpoint(c.req.method, path)}`\n ].join(\"|\");\n}\n\nfunction createDispatcherRateLimitMiddleware(options: DispatcherRateLimitOptions) {\n if (!Number.isFinite(options.windowMs) || options.windowMs <= 0) {\n throw new Error(\"rateLimit.windowMs must be a positive number.\");\n }\n if (!Number.isFinite(options.maxRequests) || options.maxRequests <= 0) {\n throw new Error(\"rateLimit.maxRequests must be a positive number.\");\n }\n\n const buckets = new Map<string, DispatcherRateLimitBucket>();\n const now = options.now ?? (() => Date.now());\n\n return async (c: Context, next: () => Promise<void>) => {\n const currentTime = now();\n for (const [bucketKey, bucket] of buckets) {\n if (bucket.resetAt <= currentTime) buckets.delete(bucketKey);\n }\n const key = rateLimitKey(c);\n const existing = buckets.get(key);\n const bucket =\n existing && existing.resetAt > currentTime\n ? existing\n : { count: 0, resetAt: currentTime + options.windowMs };\n\n if (bucket.count >= options.maxRequests) {\n const retryAfterMs = Math.max(0, bucket.resetAt - currentTime);\n c.header(\"retry-after\", String(Math.ceil(retryAfterMs / 1000)));\n return c.json(\n {\n error: \"rate_limited\",\n retryAfterMs,\n maxRequests: options.maxRequests,\n windowMs: options.windowMs\n },\n 429\n );\n }\n\n bucket.count += 1;\n buckets.set(key, bucket);\n await next();\n };\n}\nimport { createAdmissionRuntime, type AgentAccessProfileCheck } from \"./admission.js\";\nimport { createDefaultCallbackPresentation, type CallbackPresentation } from \"./presentation.js\";\n\ntype CallbackRunStatusState = Parameters<CallbackPresentation[\"runStatusPresentation\"]>[0][\"state\"];\n\nfunction shouldDeliverRunStatusUpdate(\n presentation: CallbackPresentation,\n input: { provider: string; state: CallbackRunStatusState }\n): boolean {\n return presentation.shouldDeliverRunStatusUpdate?.(input) ?? presentation.shouldDeliverStatusUpdate(input.provider);\n}\n\nfunction larkLifecycleStatusMessageKey(input: { provider: string; runId: string }): string | undefined {\n return input.provider === \"lark\" ? `${input.runId}:status` : undefined;\n}\n\nconst CreateRunnerSchema = z.object({\n runnerId: z.string().min(1),\n name: z.string().min(1)\n});\n\nconst CreateRepoBindingSchema = z.object({\n provider: z.string().min(1),\n owner: z.string().min(1),\n repo: z.string().min(1),\n runnerId: z.string().min(1),\n workspacePath: z.string().min(1).optional(),\n defaultExecutor: z.string().min(1).optional(),\n allowedActors: z.array(z.string().min(1)).optional()\n});\n\nconst CreateSlackChannelBindingSchema = z.object({\n teamId: z.string().min(1),\n channelId: z.string().min(1),\n repoProvider: z.string().min(1).default(\"github\"),\n owner: z.string().min(1),\n repo: z.string().min(1)\n});\n\nconst CreateChannelBindingSchema = z.object({\n provider: z.string().min(1),\n accountId: z.string().min(1),\n conversationId: z.string().min(1),\n repoProvider: z.string().min(1),\n owner: z.string().min(1),\n repo: z.string().min(1),\n metadata: z.record(z.string(), z.unknown()).optional()\n});\n\nconst UpsertPolicyRuleSchema = z.object({\n rule: PolicyRuleSchema\n});\n\nconst UpsertMutationMappingSchema = z.object({\n mapping: AdapterMutationMappingSchema\n});\n\nconst CreateRunSchema = z.object({\n runId: z.string().min(1),\n event: OpenTagEventSchema\n});\n\nconst RecordControlPlaneEventSchema = z.object({\n type: z.string().min(1),\n severity: z.enum([\"info\", \"warn\", \"error\"]).optional(),\n subject: z.string().min(1).optional(),\n payload: z.record(z.string(), z.unknown()).optional(),\n createdAt: z.string().datetime().optional()\n});\n\nconst PruneSourceDeliveriesSchema = z.object({\n olderThan: z.string().datetime(),\n limit: z.number().int().positive().max(100_000).optional()\n});\n\nconst PromoteFollowUpRequestSchema = z.object({\n runId: z.string().min(1)\n});\n\nconst CompleteRunSchema = z.object({\n result: OpenTagRunResultSchema,\n idempotencyKey: z.string().min(1).max(256).optional()\n});\n\nconst MarkRunningSchema = z.object({\n executor: z.string().min(1),\n runTimeoutMs: z.number().int().positive().optional(),\n idempotencyKey: z.string().min(1).max(256).optional()\n});\n\nconst CancelRunSchema = z.object({\n reason: z.string().min(1).optional(),\n requestedBy: z.string().min(1).optional()\n});\n\nconst ApprovalDecisionInputSchema = z.object({\n id: z.string().min(1).optional(),\n approvedIntentIds: z.array(z.string().min(1)),\n rejectedIntentIds: z.array(z.string().min(1)).optional(),\n approvedBy: ActorIdentitySchema,\n approvedAt: z.string().datetime().optional(),\n scope: z.enum([\"manual\", \"policy\"]).default(\"manual\"),\n reason: z.string().min(1).optional(),\n metadata: z.record(z.string(), z.unknown()).optional()\n}).refine((value) => {\n const rejected = new Set(value.rejectedIntentIds ?? []);\n return value.approvedIntentIds.every((intentId) => !rejected.has(intentId));\n}, {\n message: \"approvedIntentIds and rejectedIntentIds must not overlap\"\n});\n\nconst ApplyPlanInputSchema = z.object({\n id: z.string().min(1).optional(),\n approvalDecisionId: z.string().min(1),\n selectedIntentIds: z.array(z.string().min(1)).optional(),\n adapter: z.string().min(1).optional(),\n execute: z.boolean().optional()\n});\n\nconst ThreadActionInputSchema = z.object({\n id: z.string().min(1).optional(),\n rawText: z.string().min(1),\n actor: ActorIdentitySchema,\n callback: z.object({\n provider: z.string().min(1),\n uri: z.string().min(1),\n threadKey: z.string().min(1).optional()\n }),\n metadata: z.record(z.string(), z.unknown()).optional()\n});\n\nconst ChildRunInputSchema = z.object({\n runId: z.string().min(1),\n action: ActionHintSchema,\n commandText: z.string().min(1).optional(),\n sourceProposalId: z.string().min(1).optional(),\n sourceApplyPlanId: z.string().min(1).optional()\n});\n\nconst CHILD_EVENT_METADATA_REPLAY_KEYS = [\n \"sourceDeliveryId\",\n \"webhookDeliveryId\",\n \"deliveryId\",\n \"githubDeliveryId\",\n \"githubDeliveryGuid\",\n \"slackEventId\",\n \"larkEventId\",\n \"signatureState\",\n \"signatureVerified\",\n \"verifiedSignature\",\n \"webhookSignatureVerified\",\n \"githubSignatureVerified\"\n] as const;\n\nconst ProgressSchema = z.object({\n type: z.string().min(1).optional(),\n message: z.string().min(1),\n at: z.string().datetime().optional(),\n visibility: RunEventVisibilitySchema.optional(),\n importance: RunEventImportanceSchema.optional(),\n idempotencyKey: z.string().min(1).max(256).optional()\n});\n\nfunction childEventMetadata(parentMetadata: OpenTagEvent[\"metadata\"], metadata?: Record<string, unknown>): Record<string, unknown> {\n const sanitized = { ...parentMetadata };\n for (const key of CHILD_EVENT_METADATA_REPLAY_KEYS) {\n delete sanitized[key];\n }\n return {\n ...sanitized,\n ...(metadata ?? {})\n };\n}\n\nfunction childEventFromParent(input: {\n parentEvent: OpenTagEvent;\n childRunId: string;\n commandText?: string;\n actionKind: string;\n receivedAt: string;\n extraContext?: OpenTagEvent[\"context\"];\n metadata?: Record<string, unknown>;\n permissions?: PermissionGrant[];\n}): OpenTagEvent {\n return {\n ...input.parentEvent,\n id: `evt_${input.childRunId}`,\n sourceEventId: `${input.parentEvent.sourceEventId}:${input.childRunId}`,\n receivedAt: input.receivedAt,\n context: [...input.parentEvent.context, ...(input.extraContext ?? [])],\n command: {\n rawText: input.commandText ?? `Execute next action: ${input.actionKind}`,\n intent: \"run\",\n args: {\n parentSourceEventId: input.parentEvent.sourceEventId,\n actionKind: input.actionKind\n }\n },\n metadata: childEventMetadata(input.parentEvent.metadata, input.metadata),\n permissions: input.permissions ?? input.parentEvent.permissions\n };\n}\n\nfunction mappingsFromAdapterPlan(adapterPlan: unknown) {\n if (!adapterPlan || typeof adapterPlan !== \"object\" || Array.isArray(adapterPlan)) return [];\n const mappings = (adapterPlan as { mappings?: unknown }).mappings;\n if (!Array.isArray(mappings)) return [];\n return mappings.map((mapping) => AdapterMutationMappingSchema.parse(mapping));\n}\n\nfunction conversationKeyFromCallback(input: { provider: string; uri: string; threadKey?: string | undefined }): string {\n return `${input.provider}:${input.threadKey ?? input.uri}`;\n}\n\nfunction metadataIssueNumber(metadata: Record<string, unknown> | undefined): string | undefined {\n const value = metadata?.[\"issueNumber\"];\n if (typeof value === \"number\" && Number.isInteger(value) && value > 0) return String(value);\n if (typeof value === \"string\" && /^[1-9]\\d*$/.test(value)) return value;\n return undefined;\n}\n\nfunction metadataString(metadata: Record<string, unknown> | undefined, key: string): string | undefined {\n const value = metadata?.[key];\n return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nfunction sourceContainerMetadata(input: { provider: string; accountId: string; conversationId: string }): Record<string, string> {\n if (input.provider === \"lark\") {\n return { tenantKey: input.accountId, chatId: input.conversationId };\n }\n if (input.provider === \"slack\") {\n return { teamId: input.accountId, channelId: input.conversationId };\n }\n if (input.provider === \"telegram\") {\n return { botId: input.accountId, chatId: input.conversationId };\n }\n return { accountId: input.accountId, conversationId: input.conversationId };\n}\n\nfunction latestRunTimeoutMs(events: Array<{ type: string; payload: unknown }>): number | undefined {\n for (const event of [...events].reverse()) {\n if (event.type !== \"run.running\" || !event.payload || typeof event.payload !== \"object\") continue;\n const runTimeoutMs = (event.payload as { runTimeoutMs?: unknown }).runTimeoutMs;\n if (typeof runTimeoutMs === \"number\" && Number.isInteger(runTimeoutMs) && runTimeoutMs > 0) {\n return runTimeoutMs;\n }\n }\n return undefined;\n}\n\nfunction githubIssueWorkItemExternalId(metadata: Record<string, unknown> | undefined): string | undefined {\n const owner = metadataString(metadata, \"owner\");\n const repo = metadataString(metadata, \"repo\");\n const issueNumber = metadataIssueNumber(metadata);\n if (!owner || !repo || !issueNumber) return undefined;\n return `${owner}/${repo}#${issueNumber}`;\n}\n\nfunction conversationKeysFromThreadAction(input: {\n callback: { provider: string; uri: string; threadKey?: string | undefined };\n metadata?: Record<string, unknown> | undefined;\n}): string[] {\n const primary = conversationKeyFromCallback(input.callback);\n const keys = [primary];\n const issueNumber = metadataIssueNumber(input.metadata);\n if (input.callback.provider === \"github\" && input.callback.threadKey && issueNumber) {\n const suffix = `#${issueNumber}`;\n if (input.callback.threadKey.endsWith(suffix)) {\n keys.push(`github:${input.callback.threadKey.slice(0, -suffix.length)}`);\n }\n }\n return [...new Set(keys)];\n}\n\nfunction proposalMatchesWorkItem(proposal: ActionProposal, externalId: string): boolean {\n return proposal.snapshot.workThread?.workItemReference.externalId === externalId || proposal.event.workItem?.externalId === externalId;\n}\n\nfunction stableHash(value: string): string {\n return createHash(\"sha256\").update(value).digest(\"hex\").slice(0, 12);\n}\n\nfunction stableId(prefix: string, parts: unknown[]): string {\n return `${prefix}_${stableHash(JSON.stringify(parts))}`;\n}\n\nfunction actorKeys(actor: ActorIdentity): string[] {\n return [\n actor.providerUserId,\n actor.handle,\n `${actor.provider}:${actor.providerUserId}`,\n actor.handle ? `${actor.provider}:${actor.handle}` : undefined\n ].filter((value): value is string => typeof value === \"string\" && value.length > 0);\n}\n\nfunction actorAllowedByList(actor: ActorIdentity, allowedActors: string[] | undefined): boolean {\n if (!allowedActors?.length) return true;\n const keys = new Set(actorKeys(actor));\n return allowedActors.some((allowedActor) => keys.has(allowedActor));\n}\n\ntype ActionProposal = {\n runId: string;\n run: OpenTagRun;\n event: OpenTagEvent;\n snapshot: SuggestedChangesSnapshot;\n};\n\ntype ResolvedThreadAction = {\n proposal: ActionProposal;\n selectedIntentIds: string[];\n selectedCandidates: Array<SuggestedActionCandidate & { proposal: ActionProposal }>;\n};\n\ntype ResolveThreadActionResult =\n | { ok: true; resolved: ResolvedThreadAction }\n | { ok: false; reason: \"no_proposal\" | \"no_match\" | \"ambiguous\"; message: string; runId?: string | undefined };\n\nfunction actionCandidatesFor(proposals: ActionProposal[]): Array<SuggestedActionCandidate & { proposal: ActionProposal }> {\n const candidates: Array<SuggestedActionCandidate & { proposal: ActionProposal }> = [];\n let startIndex = 1;\n for (const proposal of proposals) {\n const proposalCandidates = suggestedActionCandidatesFromSnapshots([proposal.snapshot], startIndex).map((candidate) => ({\n ...candidate,\n proposal\n }));\n candidates.push(...proposalCandidates);\n startIndex += proposalCandidates.length;\n }\n return candidates;\n}\n\nfunction resolveCandidateSelection(input: {\n command: ThreadActionCommand;\n proposals: ActionProposal[];\n}): ResolveThreadActionResult {\n const candidates = actionCandidatesFor(input.proposals);\n if (candidates.length === 0) {\n return { ok: false, reason: \"no_proposal\", message: \"I could not find any suggested actions for this thread.\" };\n }\n\n let selected: Array<SuggestedActionCandidate & { proposal: ActionProposal }> = [];\n const selection = input.command.selection;\n if (selection.kind === \"all\") {\n selected = candidates;\n } else if (selection.kind === \"index\") {\n selected = candidates.filter((candidate) => candidate.index === selection.index);\n } else if (selection.kind === \"proposal\") {\n selected = candidates.filter((candidate) => candidate.proposalId === selection.proposalId);\n } else if (selection.kind === \"intent\") {\n selected = candidates.filter((candidate) => candidate.intent.intentId === selection.intentId);\n } else if (selection.kind === \"domain\") {\n selected = candidates.filter((candidate) => candidate.intent.domain === selection.domain);\n } else if (candidates.length === 1) {\n selected = candidates;\n } else {\n return {\n ok: false,\n reason: \"ambiguous\",\n runId: candidates[0]?.proposal.runId,\n message: `I found ${candidates.length} suggested actions. Please reply with ${candidates\n .map((candidate) => `\\`${input.command.verb} ${candidate.index}\\``)\n .join(\", \")} or \\`${input.command.verb} all\\`.`\n };\n }\n\n if (selected.length === 0) {\n return {\n ok: false,\n reason: \"no_match\",\n runId: candidates[0]?.proposal.runId,\n message: \"I could not match that reply to a suggested action. Please use an action number like `apply 1`.\"\n };\n }\n\n const proposalIds = new Set(selected.map((candidate) => candidate.proposalId));\n if (proposalIds.size !== 1) {\n return {\n ok: false,\n reason: \"ambiguous\",\n runId: selected[0]?.proposal.runId,\n message: \"That selection spans multiple proposals. Please apply or approve one proposal at a time using its action number.\"\n };\n }\n\n return {\n ok: true,\n resolved: {\n proposal: selected[0]!.proposal,\n selectedIntentIds: selected.map((candidate) => candidate.intent.intentId),\n selectedCandidates: selected\n }\n };\n}\n\nasync function resolveThreadAction(input: {\n repo: ReturnType<typeof createOpenTagRepository>;\n command: ThreadActionCommand;\n callback: { provider: string; uri: string; threadKey?: string | undefined };\n metadata?: Record<string, unknown> | undefined;\n}): Promise<ResolveThreadActionResult> {\n const conversationKeys = conversationKeysFromThreadAction({\n callback: input.callback,\n ...(input.metadata ? { metadata: input.metadata } : {})\n });\n const primaryConversationKey = conversationKeys[0];\n const targetWorkItemExternalId = githubIssueWorkItemExternalId(input.metadata);\n const metadataProposalId = metadataString(input.metadata, \"proposalId\");\n const metadataIntentId = metadataString(input.metadata, \"intentId\");\n if (\n metadataProposalId &&\n (input.command.selection.kind === \"index\" || input.command.selection.kind === \"latest\")\n ) {\n const stored = await input.repo.getSuggestedChanges({ proposalId: metadataProposalId });\n if (!stored) {\n return { ok: false, reason: \"no_proposal\", message: `I could not find proposal \\`${metadataProposalId}\\`.` };\n }\n const claimed = await input.repo.getRun({ runId: stored.runId });\n if (!claimed) {\n return { ok: false, reason: \"no_proposal\", message: \"I found the proposal but not its source run.\" };\n }\n const proposalConversationKeys = conversationKeysFromEvent(claimed.event);\n if (!proposalConversationKeys.some((key) => conversationKeys.includes(key))) {\n return { ok: false, reason: \"no_match\", runId: stored.runId, message: \"That proposal does not belong to this source thread.\" };\n }\n const proposal = { runId: stored.runId, run: claimed.run, event: claimed.event, snapshot: stored.snapshot };\n if (targetWorkItemExternalId && !proposalMatchesWorkItem(proposal, targetWorkItemExternalId)) {\n return { ok: false, reason: \"no_match\", runId: stored.runId, message: \"That proposal does not belong to this source thread.\" };\n }\n return resolveCandidateSelection({\n command: metadataIntentId\n ? { ...input.command, selection: { kind: \"intent\", intentId: metadataIntentId } }\n : { ...input.command, selection: { kind: \"proposal\", proposalId: metadataProposalId } },\n proposals: [proposal]\n });\n }\n if (input.command.selection.kind === \"proposal\") {\n const stored = await input.repo.getSuggestedChanges({ proposalId: input.command.selection.proposalId });\n if (!stored) {\n return { ok: false, reason: \"no_proposal\", message: `I could not find proposal \\`${input.command.selection.proposalId}\\`.` };\n }\n const claimed = await input.repo.getRun({ runId: stored.runId });\n if (!claimed) {\n return { ok: false, reason: \"no_proposal\", message: `I found the proposal but not its source run.` };\n }\n const proposalConversationKeys = conversationKeysFromEvent(claimed.event);\n if (!proposalConversationKeys.some((key) => conversationKeys.includes(key))) {\n return { ok: false, reason: \"no_match\", runId: stored.runId, message: \"That proposal does not belong to this source thread.\" };\n }\n const proposal = { runId: stored.runId, run: claimed.run, event: claimed.event, snapshot: stored.snapshot };\n if (targetWorkItemExternalId && !proposalMatchesWorkItem(proposal, targetWorkItemExternalId)) {\n return { ok: false, reason: \"no_match\", runId: stored.runId, message: \"That proposal does not belong to this source thread.\" };\n }\n return resolveCandidateSelection({\n command: input.command,\n proposals: [proposal]\n });\n }\n\n for (const conversationKey of conversationKeys) {\n const proposals = await input.repo.listLatestSuggestedChangesForConversation({ conversationKey });\n const scopedProposals =\n conversationKey !== primaryConversationKey && targetWorkItemExternalId\n ? proposals.filter((proposal) => proposalMatchesWorkItem(proposal, targetWorkItemExternalId))\n : proposals;\n if (scopedProposals.length > 0) return resolveCandidateSelection({ command: input.command, proposals: scopedProposals });\n }\n return resolveCandidateSelection({ command: input.command, proposals: [] });\n}\n\nfunction isGitHubRepoEvent(event: OpenTagEvent): boolean {\n const repoProvider = event.metadata[\"repoProvider\"];\n return repoProvider === \"github\" || (event.source === \"github\" && repoProvider === undefined);\n}\n\nfunction hasGitHubRepoTarget(event: OpenTagEvent): boolean {\n return isGitHubRepoEvent(event) && typeof event.metadata[\"owner\"] === \"string\" && typeof event.metadata[\"repo\"] === \"string\";\n}\n\nfunction hasGitHubIssueOrPullTarget(event: OpenTagEvent): boolean {\n return typeof event.metadata[\"issueNumber\"] === \"number\" || typeof event.metadata[\"pullRequestNumber\"] === \"number\";\n}\n\nfunction isRepoLevelGitHubIntent(intent: MutationIntent): boolean {\n return intent.action === \"create_pull_request\";\n}\n\nfunction adapterForAction(input: { event: OpenTagEvent; callbackProvider: string; selectedIntents: MutationIntent[] }): string {\n return hasGitHubRepoTarget(input.event) &&\n (hasGitHubIssueOrPullTarget(input.event) ||\n (input.selectedIntents.length > 0 && input.selectedIntents.every((intent) => isRepoLevelGitHubIntent(intent))))\n ? \"github\"\n : input.callbackProvider;\n}\n\nfunction executorConditionsFromIntent(intent: { params?: Record<string, unknown> | undefined }): string[] {\n const value = intent.params?.[\"executorConditions\"];\n if (!Array.isArray(value)) return [];\n return value.filter((condition): condition is string => typeof condition === \"string\" && condition.length > 0);\n}\n\nconst GITHUB_PREFLIGHT_TIMEOUT_MS = 5_000;\n\ntype GitHubPreflightCache = Map<string, Promise<ActionReceiptCapability | null>>;\n\nfunction githubPreflightCacheKey(input: { owner: string; repo: string; path: string }): string {\n return `${input.owner}/${input.repo}${input.path}`;\n}\n\nfunction createGitHubPreflightDeadline(timeoutMs: number): { signal?: AbortSignal; clear: () => void; didTimeout: () => boolean } {\n if (typeof AbortController === \"undefined\") return { clear: () => {}, didTimeout: () => false };\n const controller = new AbortController();\n let didTimeout = false;\n const timeout = setTimeout(() => {\n didTimeout = true;\n controller.abort();\n }, timeoutMs);\n return {\n signal: controller.signal,\n clear: () => clearTimeout(timeout),\n didTimeout: () => didTimeout\n };\n}\n\ntype GitHubPreflightInput = {\n githubApply: GitHubApplyOptions;\n owner: string;\n repo: string;\n path: string;\n description: string;\n notFoundReason: string;\n cache?: GitHubPreflightCache;\n};\n\nasync function githubPreflight(input: GitHubPreflightInput): Promise<ActionReceiptCapability | null> {\n if (input.cache) {\n const cacheKey = githubPreflightCacheKey(input);\n const cached = input.cache.get(cacheKey);\n if (cached) return await cached;\n const pending = githubPreflightUncached(input);\n input.cache.set(cacheKey, pending);\n return await pending;\n }\n return await githubPreflightUncached(input);\n}\n\nasync function githubPreflightUncached(input: Omit<GitHubPreflightInput, \"cache\">): Promise<ActionReceiptCapability | null> {\n let response: Response;\n const deadline = createGitHubPreflightDeadline(GITHUB_PREFLIGHT_TIMEOUT_MS);\n try {\n response = await (input.githubApply.fetchImpl ?? fetch)(`https://api.github.com/repos/${input.owner}/${input.repo}${input.path}`, {\n method: \"GET\",\n headers: {\n accept: \"application/vnd.github+json\",\n authorization: `Bearer ${input.githubApply.token}`,\n \"x-github-api-version\": \"2022-11-28\"\n },\n ...(deadline.signal ? { signal: deadline.signal } : {})\n });\n } catch (error) {\n if (deadline.didTimeout()) {\n return {\n state: \"needs_setup\",\n setupReason: `GitHub preflight timed out for ${input.description} after ${GITHUB_PREFLIGHT_TIMEOUT_MS}ms.`\n };\n }\n return {\n state: \"needs_setup\",\n setupReason: `GitHub preflight failed for ${input.description}: ${error instanceof Error ? error.message : String(error)}.`\n };\n } finally {\n deadline.clear();\n }\n\n if (response.ok) return null;\n\n if (response.status === 401 || response.status === 403) {\n return {\n state: \"needs_setup\",\n setupReason: `GitHub apply token cannot access ${input.description}. Check repository permissions and token scopes.`\n };\n }\n if (response.status === 404) {\n return {\n state: \"needs_setup\",\n setupReason: input.notFoundReason\n };\n }\n return {\n state: \"needs_setup\",\n setupReason: `GitHub preflight failed for ${input.description}: HTTP ${response.status}.`\n };\n}\n\nasync function preflightGitHubOperation(input: {\n githubApply: GitHubApplyOptions;\n target: NonNullable<ReturnType<typeof githubTargetFromEvent>>;\n operation: GitHubIssueMutationOperation;\n preflightCache?: GitHubPreflightCache;\n}): Promise<ActionReceiptCapability | null> {\n const base = {\n githubApply: input.githubApply,\n owner: input.target.owner,\n repo: input.target.repoName,\n ...(input.preflightCache ? { cache: input.preflightCache } : {})\n };\n\n if (input.operation.kind === \"create_pull_request\") {\n const head = encodeURIComponent(input.operation.head);\n const baseBranch = encodeURIComponent(input.operation.base);\n const [headPreflight, basePreflight] = await Promise.all([\n githubPreflight({\n ...base,\n path: `/branches/${head}`,\n description: `GitHub branch ${input.operation.head}`,\n notFoundReason: `GitHub branch ${input.operation.head} was not found.`\n }),\n githubPreflight({\n ...base,\n path: `/branches/${baseBranch}`,\n description: `GitHub base branch ${input.operation.base}`,\n notFoundReason: `GitHub base branch ${input.operation.base} was not found.`\n })\n ]);\n return headPreflight ?? basePreflight;\n }\n\n if (input.operation.kind === \"request_review\") {\n if (typeof input.target.pullRequestNumber !== \"number\") {\n return {\n state: \"needs_setup\",\n setupReason: \"The source thread does not include a GitHub pull request target.\"\n };\n }\n return await githubPreflight({\n ...base,\n path: `/pulls/${input.target.pullRequestNumber}`,\n description: `GitHub pull request #${input.target.pullRequestNumber}`,\n notFoundReason: `GitHub pull request #${input.target.pullRequestNumber} was not found.`\n });\n }\n\n if (typeof input.target.issueNumber !== \"number\") {\n return {\n state: \"needs_setup\",\n setupReason: \"The source thread does not include a GitHub issue or pull request target.\"\n };\n }\n return await githubPreflight({\n ...base,\n path: `/issues/${input.target.issueNumber}`,\n description: `GitHub issue or pull request #${input.target.issueNumber}`,\n notFoundReason: `GitHub issue or pull request #${input.target.issueNumber} was not found.`\n });\n}\n\nasync function directApplyReceiptCapability(input: {\n event: OpenTagEvent;\n callbackProvider: string;\n intent: MutationIntent;\n githubApply?: GitHubApplyOptions;\n preflightCache?: GitHubPreflightCache;\n}): Promise<ActionReceiptCapability> {\n const capability = capabilityForMutationIntent(input.intent);\n if (!capability) {\n return {\n state: \"unsupported\",\n setupReason: `No source-thread apply capability is registered for ${input.intent.action}.`\n };\n }\n if (capability.capabilityClass !== \"external_write\") {\n return {\n state: \"unsupported\",\n setupReason: \"This action is audit-only for now; continue if a follow-up run should handle it.\"\n };\n }\n\n const adapter = adapterForAction({\n event: input.event,\n callbackProvider: input.callbackProvider,\n selectedIntents: [input.intent]\n });\n if (adapter !== \"github\") {\n return {\n state: \"needs_setup\",\n setupReason: `Direct apply for ${adapter} actions is not configured on this dispatcher.`\n };\n }\n if (!input.githubApply) {\n return {\n state: \"needs_setup\",\n setupReason: \"GitHub apply is not configured on this dispatcher.\"\n };\n }\n if (!hasGitHubRepoTarget(input.event)) {\n return {\n state: \"needs_setup\",\n setupReason: \"The source thread does not include a GitHub repository target.\"\n };\n }\n if (!isRepoLevelGitHubIntent(input.intent) && !hasGitHubIssueOrPullTarget(input.event)) {\n return {\n state: \"needs_setup\",\n setupReason: \"The source thread does not include a GitHub issue or pull request target.\"\n };\n }\n if (!permissionScopesAllowCapability(input.event.permissions ?? [], capability)) {\n return {\n state: \"needs_setup\",\n setupReason: `Missing platform permission for ${capability.id}.`\n };\n }\n\n const missingExecutorConditions = (capability.requiredExecutorConditions ?? []).filter(\n (condition) => !executorConditionsFromIntent(input.intent).includes(condition)\n );\n if (missingExecutorConditions.length > 0) {\n return {\n state: \"needs_setup\",\n setupReason: `Missing executor condition: ${missingExecutorConditions.join(\", \")}.`\n };\n }\n\n const githubTarget = githubTargetFromEvent(input.event);\n if (!githubTarget) {\n return {\n state: \"needs_setup\",\n setupReason: \"The source thread does not include a GitHub repository target.\"\n };\n }\n const compilation = createGitHubIssueMutationCompiler({\n ...(githubTarget?.targetKind ? { targetKind: githubTarget.targetKind } : {})\n }).compile(input.intent);\n if (!compilation.ok) {\n return {\n state: compilation.outcome.outcome === \"unsupported\" ? \"unsupported\" : \"needs_setup\",\n setupReason: compilation.outcome.message ?? \"GitHub cannot apply this action from the current source thread.\"\n };\n }\n\n const preflight = await preflightGitHubOperation({\n githubApply: input.githubApply,\n target: githubTarget,\n operation: compilation.operation as GitHubIssueMutationOperation,\n ...(input.preflightCache ? { preflightCache: input.preflightCache } : {})\n });\n if (preflight) return preflight;\n\n return { state: \"ready_to_apply\" };\n}\n\nasync function actionReceiptContextForFinal(input: {\n event: OpenTagEvent;\n result: OpenTagRunResult;\n githubApply?: GitHubApplyOptions;\n}): Promise<ActionReceiptContext> {\n const preflightCache: GitHubPreflightCache = new Map();\n const capabilityEntries = await Promise.all(\n (input.result.suggestedChanges ?? []).flatMap((snapshot) =>\n snapshot.intents.map(async (intent) => {\n const capability = await directApplyReceiptCapability({\n event: input.event,\n callbackProvider: input.event.callback.provider,\n intent,\n ...(input.githubApply ? { githubApply: input.githubApply } : {}),\n preflightCache\n });\n return [intent.intentId, capability] as const;\n })\n )\n );\n return { capabilityByIntentId: Object.fromEntries(capabilityEntries) };\n}\n\nasync function authorizeThreadAction(input: {\n repo: ReturnType<typeof createOpenTagRepository>;\n resolved: ResolvedThreadAction;\n actor: ActorIdentity;\n}): Promise<{ ok: true } | { ok: false; reason: string; message: string }> {\n const repoKey = projectTargetRefFromEvent(input.resolved.proposal.event);\n if (!repoKey) {\n return { ok: false, reason: \"repo_context_missing\", message: \"The proposal does not resolve to a repository binding.\" };\n }\n\n const binding = await input.repo.getRepoBinding(repoKey);\n if (!binding) {\n return { ok: false, reason: \"repo_binding_not_found\", message: \"No repository binding is configured for this proposal.\" };\n }\n\n if (!actorAllowedByList(input.actor, binding.allowedActors)) {\n return {\n ok: false,\n reason: \"actor_not_allowed\",\n message: \"This actor is not allowed to approve or apply actions for the bound repository.\"\n };\n }\n\n if (input.resolved.proposal.event.source === \"slack\") {\n const teamId = input.resolved.proposal.event.metadata[\"teamId\"];\n const channelId = input.resolved.proposal.event.metadata[\"channelId\"];\n if (typeof teamId === \"string\" && typeof channelId === \"string\") {\n const channelBinding = await input.repo.getChannelBinding({\n provider: \"slack\",\n accountId: teamId,\n conversationId: channelId\n });\n if (\n !channelBinding ||\n channelBinding.repoProvider !== repoKey.provider ||\n channelBinding.owner !== repoKey.owner ||\n channelBinding.repo !== repoKey.repo\n ) {\n return {\n ok: false,\n reason: \"channel_binding_mismatch\",\n message: \"The source channel binding is missing or no longer points at the proposal repository.\"\n };\n }\n }\n }\n\n return { ok: true };\n}\n\nfunction stableApprovalId(input: {\n providedId?: string;\n command: ThreadActionCommand;\n resolved: ResolvedThreadAction;\n actor: ActorIdentity;\n}): string {\n return input.providedId ?? stableId(\"approval\", [\n input.resolved.proposal.snapshot.proposalId,\n input.command.verb,\n [...input.resolved.selectedIntentIds].sort(),\n actorKeys(input.actor).sort()\n ]);\n}\n\nfunction sortedValues(values: string[] | undefined): string[] {\n return [...(values ?? [])].sort();\n}\n\nfunction sameStringSet(left: string[] | undefined, right: string[] | undefined): boolean {\n return JSON.stringify(sortedValues(left)) === JSON.stringify(sortedValues(right));\n}\n\nfunction sameActor(left: ActorIdentity, right: ActorIdentity): boolean {\n return left.provider === right.provider &&\n left.providerUserId === right.providerUserId &&\n (left.handle ?? \"\") === (right.handle ?? \"\") &&\n (left.organizationId ?? \"\") === (right.organizationId ?? \"\");\n}\n\nfunction approvalDecisionMatchesThreadAction(input: {\n decision: NonNullable<Awaited<ReturnType<ReturnType<typeof createOpenTagRepository>[\"getApprovalDecision\"]>>>;\n command: ThreadActionCommand;\n resolved: ResolvedThreadAction;\n actor: ActorIdentity;\n}): boolean {\n const approvedIntentIds = input.command.verb === \"reject\" ? [] : input.resolved.selectedIntentIds;\n const rejectedIntentIds = input.command.verb === \"reject\" ? input.resolved.selectedIntentIds : [];\n const metadata = input.decision.metadata;\n const verb = metadata && typeof metadata === \"object\" && !Array.isArray(metadata) ? metadata[\"verb\"] : undefined;\n return input.decision.proposalId === input.resolved.proposal.snapshot.proposalId &&\n sameStringSet(input.decision.approvedIntentIds, approvedIntentIds) &&\n sameStringSet(input.decision.rejectedIntentIds, rejectedIntentIds) &&\n sameActor(input.decision.approvedBy, input.actor) &&\n verb === input.command.verb;\n}\n\nfunction stableApplyPlanId(input: { resolved: ResolvedThreadAction; adapter: string }): string {\n return stableId(\"apply\", [\n input.resolved.proposal.snapshot.proposalId,\n input.adapter,\n [...input.resolved.selectedIntentIds].sort()\n ]);\n}\n\nfunction stableChildRunId(input: {\n command: ThreadActionCommand;\n resolved: ResolvedThreadAction;\n sourceApplyPlanId?: string;\n fallbackReason?: string;\n}): string {\n return stableId(\"run_child\", [\n input.resolved.proposal.runId,\n input.resolved.proposal.snapshot.proposalId,\n input.command.verb,\n [...input.resolved.selectedIntentIds].sort(),\n input.sourceApplyPlanId ?? \"\",\n input.fallbackReason ?? \"\"\n ]);\n}\n\nfunction selectedIntentsAlreadyApplied(input: { plan: ApplyPlan; selectedIntentIds: string[] }): boolean {\n return input.selectedIntentIds.every((intentId) =>\n input.plan.outcomes?.some((outcome) => outcome.intentId === intentId && outcome.outcome === \"applied\")\n );\n}\n\nfunction selectedPlanOutcomes(input: { plan: ApplyPlan; selectedIntentIds: string[] }): ApplyIntentOutcome[] {\n return (input.plan.outcomes ?? []).filter((outcome) => input.selectedIntentIds.includes(outcome.intentId));\n}\n\nfunction selectedIntentsHaveStaleOutcome(input: { plan: ApplyPlan; selectedIntentIds: string[] }): boolean {\n const outcomes = selectedPlanOutcomes(input);\n return outcomes.some((outcome) => outcome.outcome === \"stale\") && outcomes.every((outcome) => outcome.outcome !== \"applied\");\n}\n\nfunction githubTargetFromEvent(event: OpenTagEvent):\n | {\n owner: string;\n repoName: string;\n issueNumber?: number;\n pullRequestNumber?: number;\n targetKind?: \"issue\" | \"pull_request\";\n }\n | null {\n const owner = event.metadata[\"owner\"];\n const repoName = event.metadata[\"repo\"];\n const issueNumber = event.metadata[\"issueNumber\"];\n const pullRequestNumber = event.metadata[\"pullRequestNumber\"];\n if (!hasGitHubRepoTarget(event)) return null;\n if (typeof owner !== \"string\" || typeof repoName !== \"string\") return null;\n if (typeof pullRequestNumber === \"number\") {\n return { owner, repoName, issueNumber: pullRequestNumber, pullRequestNumber, targetKind: \"pull_request\" };\n }\n if (typeof issueNumber === \"number\") {\n return { owner, repoName, issueNumber, targetKind: \"issue\" };\n }\n return { owner, repoName };\n}\n\nfunction selectedActionSummary(candidates: ResolvedThreadAction[\"selectedCandidates\"]): string {\n return candidates.map((candidate) => `${candidate.index}. ${candidate.intent.summary}`).join(\"; \");\n}\n\nfunction selectedActionReceiptTitle(selectionText: string): string {\n return selectionText\n .split(\";\")\n .map((part) => part.trim().replace(/^\\d+\\.\\s*/, \"\"))\n .filter(Boolean)\n .join(\"; \");\n}\n\nfunction sentenceWithTerminalPunctuation(value: string): string {\n return /[.!?。!?]$/u.test(value) ? value : `${value}.`;\n}\n\nfunction addPermissionGrant(permissions: PermissionGrant[], grant: PermissionGrant): PermissionGrant[] {\n if (permissions.some((permission) => permission.scope === grant.scope)) return permissions;\n return [...permissions, grant];\n}\n\nfunction childRunPermissionsForThreadAction(input: { resolved: ResolvedThreadAction; command: ThreadActionCommand }): PermissionGrant[] {\n let permissions = [...(input.resolved.proposal.event.permissions ?? [])];\n if (input.command.verb === \"apply\" || input.command.verb === \"continue\") {\n permissions = addPermissionGrant(permissions, {\n scope: \"repo:read\",\n reason: \"inspect the repository while continuing an approved source-thread action\"\n });\n permissions = addPermissionGrant(permissions, {\n scope: \"repo:write\",\n reason: \"apply an approved source-thread mutation on a run branch\"\n });\n }\n if (input.resolved.selectedCandidates.some((candidate) => candidate.intent.action === \"create_pull_request\")) {\n permissions = addPermissionGrant(permissions, {\n scope: \"pr:create\",\n reason: \"create the pull request approved in the source thread\"\n });\n }\n return permissions;\n}\n\nfunction renderChildRunCreatedBody(input: {\n lead: string;\n resolved: ResolvedThreadAction;\n childRun: OpenTagRun;\n provider?: string;\n selectionText?: string;\n approvalDecisionId?: string;\n sourceApplyPlanId?: string;\n fallbackReason?: string;\n}): string {\n const title = selectedActionReceiptTitle(input.selectionText ?? selectedActionSummary(input.resolved.selectedCandidates));\n if (input.provider === \"slack\") {\n return [\n input.lead,\n `Action: ${title}`,\n ...(input.fallbackReason ? [`Reason: ${input.fallbackReason}`] : [])\n ].join(\"\\n\");\n }\n return [\n input.lead,\n \"\",\n `Action: ${title}`,\n \"\",\n `Child run: \\`${input.childRun.id}\\``,\n \"\",\n ...(input.fallbackReason ? [`Reason: ${input.fallbackReason}`, \"\"] : []),\n `Audit: run \\`opentag status --run ${input.childRun.id}\\` locally.`\n ].join(\"\\n\");\n}\n\nfunction applyOutcomeSummary(outcome: ApplyIntentOutcome): string {\n if (outcome.externalUri) return `${outcome.outcome}: ${outcome.externalUri}`;\n if (outcome.message) return `${outcome.outcome}: ${outcome.message}`;\n return `${outcome.outcome}.`;\n}\n\nfunction applyOutcomeReceiptLines(outcomes: ApplyIntentOutcome[]): string[] {\n if (outcomes.length === 0) return [\"Result: applied.\"];\n if (outcomes.length === 1) {\n const outcome = outcomes[0]!;\n if (outcome.externalUri) return [`Result: ${outcome.externalUri}`];\n if (outcome.message) return [`Result: ${outcome.outcome}. ${outcome.message}`];\n return [`Result: ${outcome.outcome}.`];\n }\n return [\"Results:\", ...outcomes.map((outcome) => `- ${applyOutcomeSummary(outcome)}`)];\n}\n\nfunction renderAppliedThreadActionBody(input: {\n selectionText: string;\n selectedIntentIds: string[];\n outcomes: ApplyIntentOutcome[];\n}): string {\n const selectedOutcomes = input.outcomes.filter((outcome) => input.selectedIntentIds.includes(outcome.intentId));\n return [`Applied: ${sentenceWithTerminalPunctuation(selectedActionReceiptTitle(input.selectionText))}`, ...applyOutcomeReceiptLines(selectedOutcomes)].join(\"\\n\");\n}\n\nfunction renderAlreadyAppliedThreadActionBody(input: { selectionText: string }): string {\n return [`Already applied: ${sentenceWithTerminalPunctuation(selectedActionReceiptTitle(input.selectionText))}`, \"No external write was repeated.\"].join(\"\\n\");\n}\n\nfunction renderAlreadyPlannedThreadActionBody(input: { selectionText: string }): string {\n return [`Already planned: ${sentenceWithTerminalPunctuation(selectedActionReceiptTitle(input.selectionText))}`, \"OpenTag did not execute this repeated reply.\"].join(\"\\n\");\n}\n\nfunction renderStaleThreadActionBody(input: { selectionText: string; continueIndex: number }): string {\n return [\n `Stale: ${sentenceWithTerminalPunctuation(selectedActionReceiptTitle(input.selectionText))}`,\n \"The target changed since this action was proposed.\",\n `Reply \\`continue ${input.continueIndex}\\` to refresh from the current thread state.`\n ].join(\"\\n\");\n}\n\nfunction renderThreadActionRecordedBody(input: {\n verb: \"approve\" | \"reject\";\n selectionText: string;\n applyIndex?: number;\n directApply?: { ready: boolean; reason?: string };\n}): string {\n const title = selectedActionReceiptTitle(input.selectionText);\n if (input.verb === \"approve\") {\n const index = input.applyIndex ?? 1;\n const nextLines = input.directApply?.ready\n ? [`Next: reply \\`apply ${index}\\` to write it to the system of record, or \\`continue ${index}\\` to continue in OpenTag.`]\n : [\n ...(input.directApply?.reason\n ? [`Direct apply is not available yet: ${sentenceWithTerminalPunctuation(input.directApply.reason)}`]\n : [\"Direct apply is not available yet.\"]),\n `Next: reply \\`continue ${index}\\` to continue in OpenTag.`\n ];\n return [\n `Approved only: ${sentenceWithTerminalPunctuation(title)}`,\n \"No external write was performed.\",\n ...nextLines\n ].join(\"\\n\");\n }\n return [`Rejected: ${sentenceWithTerminalPunctuation(title)}`, \"No external write will be performed for this action.\"].join(\"\\n\");\n}\n\nasync function selectedDirectApplyStatus(input: {\n event: OpenTagEvent;\n callbackProvider: string;\n candidates: ResolvedThreadAction[\"selectedCandidates\"];\n githubApply?: GitHubApplyOptions;\n}): Promise<{ ready: boolean; reason?: string }> {\n if (input.candidates.length === 0) return { ready: false, reason: \"No selected action was found.\" };\n const preflightCache: GitHubPreflightCache = new Map();\n for (const candidate of input.candidates) {\n const capability = await directApplyReceiptCapability({\n event: input.event,\n callbackProvider: input.callbackProvider,\n intent: candidate.intent,\n ...(input.githubApply ? { githubApply: input.githubApply } : {}),\n preflightCache\n });\n if (capability.state !== \"ready_to_apply\") {\n return {\n ready: false,\n reason: capability.setupReason ?? `Receipt state is ${capability.state}.`\n };\n }\n }\n return { ready: true };\n}\n\nfunction actionContextPointer(input: {\n command: ThreadActionCommand;\n resolved: ResolvedThreadAction;\n approvalDecisionId?: string;\n applyPlanId?: string;\n fallbackReason?: string;\n}): OpenTagEvent[\"context\"][number] {\n const lines = [\n \"OpenTag thread action continuation.\",\n `User reply: ${input.command.rawText}`,\n `Action: ${input.command.verb}`,\n `Proposal: ${input.resolved.proposal.snapshot.proposalId}`,\n `Proposal summary: ${input.resolved.proposal.snapshot.summary}`,\n `Selected actions: ${selectedActionSummary(input.resolved.selectedCandidates)}`,\n `Selected intents: ${input.resolved.selectedIntentIds.join(\", \")}`,\n `Previous run: ${input.resolved.proposal.runId}`,\n `Previous summary: ${input.resolved.proposal.run.result?.summary ?? input.resolved.proposal.snapshot.summary}`\n ];\n if (input.approvalDecisionId) lines.push(`Approval decision: ${input.approvalDecisionId}`);\n if (input.applyPlanId) lines.push(`Apply plan: ${input.applyPlanId}`);\n if (input.fallbackReason) lines.push(`Fallback reason: ${input.fallbackReason}`);\n return {\n kind: \"text\",\n uri: lines.join(\"\\n\"),\n visibility: input.resolved.proposal.event.source === \"github\" ? \"public\" : \"organization\",\n title: \"OpenTag approved action context\"\n };\n}\n\nasync function createChildRunForThreadAction(input: {\n repo: ReturnType<typeof createOpenTagRepository>;\n command: ThreadActionCommand;\n resolved: ResolvedThreadAction;\n runId?: string;\n approvalDecisionId?: string;\n sourceApplyPlanId?: string;\n fallbackReason?: string;\n}): Promise<OpenTagRun> {\n const runId = input.runId ?? stableChildRunId(input);\n const action = ActionHintSchema.parse({\n kind: \"apply_suggested_changes\",\n targetId: input.resolved.proposal.snapshot.proposalId,\n selectedIntentIds: input.resolved.selectedIntentIds,\n metadata: {\n threadActionVerb: input.command.verb,\n rawText: input.command.rawText,\n ...(input.command.reason ? { reason: input.command.reason } : {}),\n ...(input.approvalDecisionId ? { approvalDecisionId: input.approvalDecisionId } : {}),\n ...(input.fallbackReason ? { fallbackReason: input.fallbackReason } : {})\n }\n });\n const previousRunSummary = input.resolved.proposal.run.result?.summary ?? input.resolved.proposal.snapshot.summary;\n const commandText =\n input.command.verb === \"continue\"\n ? `Continue approved OpenTag action: ${selectedActionSummary(input.resolved.selectedCandidates)}`\n : `Continue because OpenTag could not directly apply approved action: ${selectedActionSummary(input.resolved.selectedCandidates)}`;\n const { run } = await input.repo.createRun({\n id: runId,\n event: childEventFromParent({\n parentEvent: input.resolved.proposal.event,\n childRunId: runId,\n actionKind: action.kind,\n commandText,\n receivedAt: new Date().toISOString(),\n extraContext: [\n actionContextPointer({\n command: input.command,\n resolved: input.resolved,\n ...(input.approvalDecisionId ? { approvalDecisionId: input.approvalDecisionId } : {}),\n ...(input.sourceApplyPlanId ? { applyPlanId: input.sourceApplyPlanId } : {}),\n ...(input.fallbackReason ? { fallbackReason: input.fallbackReason } : {})\n })\n ],\n metadata: {\n parentRunId: input.resolved.proposal.runId,\n sourceProposalId: input.resolved.proposal.snapshot.proposalId,\n selectedIntentIds: input.resolved.selectedIntentIds,\n threadActionVerb: input.command.verb,\n previousRunSummary,\n ...(input.approvalDecisionId ? { approvalDecisionId: input.approvalDecisionId } : {}),\n ...(input.sourceApplyPlanId ? { sourceApplyPlanId: input.sourceApplyPlanId } : {}),\n ...(input.fallbackReason ? { fallbackReason: input.fallbackReason } : {})\n },\n permissions: childRunPermissionsForThreadAction({ resolved: input.resolved, command: input.command })\n }),\n parentRunId: input.resolved.proposal.runId,\n triggeredByAction: action,\n sourceProposalId: input.resolved.proposal.snapshot.proposalId,\n ...(input.sourceApplyPlanId ? { sourceApplyPlanId: input.sourceApplyPlanId } : {})\n });\n return run;\n}\n\nexport type CallbackMessage = {\n runId: string;\n kind: \"acknowledgement\" | \"progress\" | \"final\";\n provider: string;\n uri: string;\n body: string;\n agentId?: string;\n threadKey?: string;\n statusMessageKey?: string;\n externalMessageId?: string;\n blocks?: SlackBlock[];\n rich?: {\n provider: string;\n payload: unknown;\n };\n};\n\nexport type CallbackDeliveryResult = {\n externalMessageId?: string;\n};\n\nexport type CallbackSink = {\n deliver(message: CallbackMessage): Promise<void | CallbackDeliveryResult>;\n};\n\nexport type SourceReceiptState = \"received\" | \"running\";\n\nexport type SourceReceiptDelivery = {\n delivered: boolean;\n};\n\nexport type SourceReceipt = {\n runId: string;\n provider: string;\n state: SourceReceiptState;\n event: OpenTagEvent;\n agentId?: string;\n};\n\nexport type SourceReceiptSink = {\n deliver(receipt: SourceReceipt): Promise<SourceReceiptDelivery>;\n};\n\nexport type CallbackRetryOptions = {\n maxAttempts?: number;\n baseDelayMs?: number;\n maxDelayMs?: number;\n now?: Date;\n};\n\nexport type GitHubApplyOptions = {\n token: string;\n fetchImpl?: GitHubFetchLike;\n};\n\nasync function executeGitHubApplyPlan(input: {\n repo: ReturnType<typeof createOpenTagRepository>;\n plan: ApplyPlan;\n resolved: ResolvedThreadAction;\n githubApply?: GitHubApplyOptions;\n}): Promise<{ plan: ApplyPlan; executed: boolean; fallbackReason?: string }> {\n if (input.plan.adapter !== \"github\") {\n return { plan: input.plan, executed: false, fallbackReason: `Adapter ${input.plan.adapter ?? \"unknown\"} is not directly executable yet.` };\n }\n if (!input.githubApply) {\n return { plan: input.plan, executed: false, fallbackReason: \"GitHub apply is not configured on this dispatcher.\" };\n }\n\n const target = githubTargetFromEvent(input.resolved.proposal.event);\n if (!target) {\n return { plan: input.plan, executed: false, fallbackReason: \"The source run does not include a GitHub issue or pull request target.\" };\n }\n\n const preflightOutcomeByIntentId = new Map((input.plan.outcomes ?? []).map((outcome) => [outcome.intentId, outcome]));\n const executableIntents = input.resolved.proposal.snapshot.intents.filter((intent) => {\n if (!input.resolved.selectedIntentIds.includes(intent.intentId)) return false;\n const outcome = preflightOutcomeByIntentId.get(intent.intentId);\n return outcome?.outcome === \"skipped\" && outcome.message?.startsWith(\"Preflight passed\");\n });\n if (executableIntents.length === 0) {\n return { plan: input.plan, executed: false, fallbackReason: \"No selected intent has a direct adapter execution path.\" };\n }\n\n const executedOutcomes: ApplyIntentOutcome[] = [];\n const compilerRegistry = createAdapterMutationCompilerRegistry([\n createGitHubIssueMutationCompiler({\n mappings: mappingsFromAdapterPlan(input.plan.adapterPlan),\n ...(target.targetKind ? { targetKind: target.targetKind } : {})\n })\n ]);\n for (const compilation of compilerRegistry.compile(\"github\", executableIntents)) {\n if (!compilation.ok) {\n executedOutcomes.push(compilation.outcome);\n continue;\n }\n executedOutcomes.push(\n await applyGitHubIssueMutationOperation({\n target: {\n token: input.githubApply.token,\n owner: target.owner,\n repo: target.repoName,\n ...(typeof target.issueNumber === \"number\" ? { issueNumber: target.issueNumber } : {}),\n ...(target.pullRequestNumber ? { pullRequestNumber: target.pullRequestNumber } : {})\n },\n operation: compilation.operation as GitHubIssueMutationOperation,\n ...(input.githubApply.fetchImpl ? { fetchImpl: input.githubApply.fetchImpl } : {})\n })\n );\n }\n\n const executedOutcomeByIntentId = new Map(executedOutcomes.map((outcome) => [outcome.intentId, outcome]));\n const mergedOutcomes = (input.plan.outcomes ?? []).map((outcome) => executedOutcomeByIntentId.get(outcome.intentId) ?? outcome);\n const updated = await input.repo.updateApplyPlanOutcomes({\n id: input.plan.id,\n outcomes: mergedOutcomes,\n externalWritesExecuted: true\n });\n const plan = updated ?? input.plan;\n const allSelectedApplied = input.resolved.selectedIntentIds.every((intentId) =>\n plan.outcomes?.some((outcome) => outcome.intentId === intentId && outcome.outcome === \"applied\")\n );\n return {\n plan,\n executed: allSelectedApplied,\n ...(allSelectedApplied ? {} : { fallbackReason: \"Some selected intents were not directly applied.\" })\n };\n}\n\nconst noopCallbackSink: CallbackSink = {\n async deliver() {\n return;\n }\n};\n\nconst noopSourceReceiptSink: SourceReceiptSink = {\n async deliver() {\n return { delivered: false };\n }\n};\n\nfunction nextCallbackAttemptAt(input: { attempts: number } & CallbackRetryOptions): string | undefined {\n const maxAttempts = input.maxAttempts ?? 5;\n const nextAttempt = input.attempts + 1;\n if (nextAttempt >= maxAttempts) return undefined;\n\n const baseDelayMs = input.baseDelayMs ?? 5_000;\n const maxDelayMs = input.maxDelayMs ?? 300_000;\n const delayMs = Math.min(maxDelayMs, baseDelayMs * 2 ** Math.max(0, input.attempts));\n return new Date((input.now ?? new Date()).getTime() + delayMs).toISOString();\n}\n\nasync function deliverCallbackDelivery(input: {\n repo: ReturnType<typeof createOpenTagRepository>;\n sink: CallbackSink;\n delivery: import(\"@opentag/store\").CallbackDelivery;\n retry?: CallbackRetryOptions;\n}): Promise<boolean> {\n try {\n const externalMessageId =\n input.delivery.externalMessageId ??\n (input.delivery.statusMessageKey\n ? await input.repo.findCallbackExternalMessageId({\n runId: input.delivery.runId,\n provider: input.delivery.provider,\n ...(input.delivery.threadKey ? { threadKey: input.delivery.threadKey } : {}),\n statusMessageKey: input.delivery.statusMessageKey\n })\n : undefined);\n const deliveryResult = await input.sink.deliver({\n runId: input.delivery.runId,\n kind: input.delivery.kind,\n provider: input.delivery.provider,\n uri: input.delivery.uri,\n body: input.delivery.body,\n ...(input.delivery.threadKey ? { threadKey: input.delivery.threadKey } : {}),\n ...(input.delivery.agentId ? { agentId: input.delivery.agentId } : {}),\n ...(input.delivery.statusMessageKey ? { statusMessageKey: input.delivery.statusMessageKey } : {}),\n ...(externalMessageId ? { externalMessageId } : {}),\n ...(input.delivery.blocks ? { blocks: input.delivery.blocks as SlackBlock[] } : {}),\n ...(input.delivery.rich ? { rich: input.delivery.rich as NonNullable<CallbackMessage[\"rich\"]> } : {})\n });\n const deliveredExternalMessageId = deliveryResult?.externalMessageId ?? externalMessageId;\n await input.repo.markCallbackDelivered({\n deliveryId: input.delivery.id,\n ...(deliveredExternalMessageId ? { externalMessageId: deliveredExternalMessageId } : {})\n });\n return true;\n } catch (error) {\n const maxAttempts = input.retry?.maxAttempts ?? 5;\n const nextAttemptAt = nextCallbackAttemptAt({ attempts: input.delivery.attempts, ...(input.retry ?? {}) });\n await input.repo.markCallbackFailed({\n deliveryId: input.delivery.id,\n error: error instanceof Error ? error.message : String(error),\n maxAttempts,\n ...(nextAttemptAt ? { nextAttemptAt } : {})\n });\n return false;\n }\n}\n\nexport async function processPendingCallbacks(input: {\n repo: ReturnType<typeof createOpenTagRepository>;\n sink: CallbackSink;\n limit?: number;\n retry?: CallbackRetryOptions;\n}): Promise<{ processed: number; delivered: number; failed: number }> {\n const maxAttempts = input.retry?.maxAttempts ?? 5;\n const deliveries = await input.repo.claimPendingCallbackDeliveries({\n limit: input.limit ?? 20,\n ...(input.retry?.now ? { now: input.retry.now } : {}),\n maxAttempts\n });\n const result = { processed: 0, delivered: 0, failed: 0 };\n for (const delivery of deliveries) {\n result.processed += 1;\n const delivered = await deliverCallbackDelivery({\n repo: input.repo,\n sink: input.sink,\n delivery,\n ...(input.retry ? { retry: input.retry } : {})\n });\n if (delivered) {\n result.delivered += 1;\n } else {\n result.failed += 1;\n }\n }\n return result;\n}\n\nasync function deliverAndAudit(input: {\n repo: ReturnType<typeof createOpenTagRepository>;\n sink: CallbackSink;\n message: CallbackMessage;\n retry?: CallbackRetryOptions;\n}): Promise<void> {\n const delivery = await input.repo.enqueueCallbackDelivery({\n runId: input.message.runId,\n kind: input.message.kind,\n provider: input.message.provider,\n uri: input.message.uri,\n body: input.message.body,\n ...(input.message.threadKey ? { threadKey: input.message.threadKey } : {}),\n ...(input.message.agentId ? { agentId: input.message.agentId } : {}),\n ...(input.message.statusMessageKey ? { statusMessageKey: input.message.statusMessageKey } : {}),\n ...(input.message.blocks ? { blocks: input.message.blocks } : {}),\n ...(input.message.rich ? { rich: input.message.rich } : {})\n });\n await deliverCallbackDelivery({\n repo: input.repo,\n sink: input.sink,\n delivery,\n ...(input.retry ? { retry: input.retry } : {})\n });\n}\n\nasync function deliverSourceReceiptBestEffort(input: {\n repo: ReturnType<typeof createOpenTagRepository>;\n sink: SourceReceiptSink;\n receipt: SourceReceipt;\n}): Promise<SourceReceiptDelivery> {\n try {\n const result = await input.sink.deliver(input.receipt);\n if (!result.delivered) return result;\n await input.repo.appendRunEvent({\n runId: input.receipt.runId,\n type: \"source_receipt.delivered\",\n payload: {\n provider: input.receipt.provider,\n state: input.receipt.state\n },\n visibility: \"audit\",\n importance: \"low\",\n message: `Source ${input.receipt.state} receipt delivered.`\n });\n return result;\n } catch (error) {\n await input.repo.appendRunEvent({\n runId: input.receipt.runId,\n type: \"source_receipt.failed\",\n payload: {\n provider: input.receipt.provider,\n state: input.receipt.state,\n error: error instanceof Error ? error.message : String(error)\n },\n visibility: \"audit\",\n importance: \"low\",\n message: `Source ${input.receipt.state} receipt failed.`\n });\n return { delivered: false };\n }\n}\n\ntype DispatcherAuthScope = \"pairing\" | \"runner_runtime\" | \"runner_operator\";\ntype DispatcherAuthResult =\n | { ok: true }\n | {\n ok: false;\n reason: \"invalid_pairing_token\" | \"invalid_runner_token\" | \"invalid_dispatcher_token\" | \"runner_token_revoked\";\n message?: string;\n };\n\nfunction isRunnerRuntimeEndpoint(method: string, path: string): boolean {\n if (method !== \"POST\") return false;\n if (/^\\/v1\\/runners\\/[^/]+\\/claim$/.test(path)) return true;\n if (/^\\/v1\\/runners\\/[^/]+\\/runs\\/[^/]+\\/(running|heartbeat|progress|complete)$/.test(path)) return true;\n return /^\\/v1\\/runs\\/[^/]+\\/(running|progress|complete)$/.test(path);\n}\n\nfunction isRunnerOperatorEndpoint(method: string, path: string): boolean {\n if (method === \"GET\") {\n if (path === \"/v1/control-plane-alerts\") return true;\n if (/^\\/v1\\/runners\\/[^/]+$/.test(path)) return true;\n if (/^\\/v1\\/repo-bindings\\/[^/]+\\/[^/]+\\/[^/]+$/.test(path)) return true;\n if (/^\\/v1\\/channel-bindings\\/[^/]+\\/[^/]+\\/[^/]+(?:\\/status)?$/.test(path)) return true;\n return /^\\/v1\\/runs\\/[^/]+(?:\\/events|\\/metrics)?$/.test(path);\n }\n if (method !== \"POST\") return false;\n if (path === \"/v1/source-deliveries/prune\") return true;\n if (/^\\/v1\\/runs\\/[^/]+\\/cancel$/.test(path)) return true;\n return /^\\/v1\\/channel-bindings\\/[^/]+\\/[^/]+\\/[^/]+\\/cancel-active-run$/.test(path);\n}\n\nfunction dispatcherAuthScope(request: Request): DispatcherAuthScope {\n const path = new URL(request.url).pathname;\n const method = request.method.toUpperCase();\n if (isRunnerRuntimeEndpoint(method, path)) return \"runner_runtime\";\n if (isRunnerOperatorEndpoint(method, path)) return \"runner_operator\";\n return \"pairing\";\n}\n\nfunction authMatches(request: Request, token: string | undefined): boolean {\n return Boolean(token) && request.headers.get(\"authorization\") === `Bearer ${token}`;\n}\n\nfunction bearerToken(request: Request): string | undefined {\n const authorization = request.headers.get(\"authorization\");\n if (!authorization?.startsWith(\"Bearer \")) return undefined;\n return authorization.slice(\"Bearer \".length);\n}\n\nfunction configuredRunnerTokens(input: { runnerToken?: string; runnerTokens?: string[] }): string[] {\n return [...new Set([input.runnerToken, ...(input.runnerTokens ?? [])].map((token) => token?.trim()).filter((token): token is string => Boolean(token)))];\n}\n\nfunction normalizeRevokedRunnerTokenFingerprints(fingerprints: string[] | undefined): Set<string> {\n return new Set((fingerprints ?? []).map((fingerprint) => fingerprint.trim().toLowerCase()).filter(Boolean));\n}\n\nfunction authMatchesAny(request: Request, tokens: string[]): boolean {\n return tokens.some((token) => authMatches(request, token));\n}\n\nfunction requestUsesRevokedRunnerToken(input: { request: Request; revokedRunnerTokenFingerprints: Set<string> }): boolean {\n const token = bearerToken(input.request);\n if (!token) return false;\n return input.revokedRunnerTokenFingerprints.has(rawTokenFingerprint(token).toLowerCase());\n}\n\nfunction revokedRunnerTokenResult(): DispatcherAuthResult {\n return {\n ok: false,\n reason: \"runner_token_revoked\",\n message: \"Runner token has been revoked or expired. Pair again or update daemon.runnerToken before retrying.\"\n };\n}\n\nfunction authorizeDispatcherRequest(input: {\n request: Request;\n pairingToken: string | undefined;\n runnerTokens: string[];\n revokedRunnerTokenFingerprints: Set<string>;\n}): DispatcherAuthResult {\n if (!input.pairingToken && input.runnerTokens.length === 0) return { ok: true };\n\n const revokedRunnerToken = requestUsesRevokedRunnerToken({\n request: input.request,\n revokedRunnerTokenFingerprints: input.revokedRunnerTokenFingerprints\n });\n if (revokedRunnerToken) return revokedRunnerTokenResult();\n\n const scope = dispatcherAuthScope(input.request);\n const pairingMatches = authMatches(input.request, input.pairingToken);\n const runnerMatches = authMatchesAny(input.request, input.runnerTokens);\n\n if (scope === \"pairing\") {\n return pairingMatches ? { ok: true } : { ok: false, reason: \"invalid_pairing_token\" };\n }\n\n if (scope === \"runner_runtime\") {\n if (input.runnerTokens.length > 0) {\n return runnerMatches ? { ok: true } : { ok: false, reason: \"invalid_runner_token\" };\n }\n return pairingMatches ? { ok: true } : { ok: false, reason: \"invalid_pairing_token\" };\n }\n\n return runnerMatches || pairingMatches ? { ok: true } : { ok: false, reason: \"invalid_dispatcher_token\" };\n}\n\nexport function createDispatcherApp(input: {\n databasePath: string;\n callbackSink?: CallbackSink;\n sourceReceiptSink?: SourceReceiptSink;\n pairingToken?: string;\n runnerToken?: string;\n runnerTokens?: string[];\n revokedRunnerTokenFingerprints?: string[];\n presentation?: CallbackPresentation;\n githubApply?: GitHubApplyOptions;\n callbackRetry?: CallbackRetryOptions;\n agentAccessProfileCheck?: AgentAccessProfileCheck;\n maxRequestBodyBytes?: number;\n rateLimit?: DispatcherRateLimitOptions | false;\n}) {\n const sqlite = new Database(input.databasePath);\n migrateSchema(sqlite);\n const repo = createOpenTagRepository(drizzle(sqlite));\n const app = new Hono();\n const callbackSink = input.callbackSink ?? noopCallbackSink;\n const sourceReceiptSink = input.sourceReceiptSink ?? noopSourceReceiptSink;\n const presentation = input.presentation ?? createDefaultCallbackPresentation();\n const callbackRetry = input.callbackRetry ?? {};\n const maxRequestBodyBytes = input.maxRequestBodyBytes ?? DEFAULT_MAX_REQUEST_BODY_BYTES;\n const runnerTokens = configuredRunnerTokens(input);\n const revokedRunnerTokenFingerprints = normalizeRevokedRunnerTokenFingerprints(input.revokedRunnerTokenFingerprints);\n const requestEndpoint = (c: Context) => normalizeRateLimitedEndpoint(c.req.method, new URL(c.req.url).pathname);\n const recordControlPlaneEvent = async (input: {\n type: string;\n severity?: \"info\" | \"warn\" | \"error\" | undefined;\n subject?: string | undefined;\n payload?: Record<string, unknown> | undefined;\n createdAt?: string | undefined;\n }) => {\n await repo.appendControlPlaneEvent({\n type: input.type,\n ...(input.severity ? { severity: input.severity } : {}),\n ...(input.subject ? { subject: input.subject } : {}),\n ...(input.payload ? { payload: input.payload } : {}),\n ...(input.createdAt ? { createdAt: input.createdAt } : {})\n });\n };\n const parseDispatcherBody = async <S extends z.ZodTypeAny>(\n c: Context,\n schema: S,\n options: { invalidBodyError?: string } = {}\n ): Promise<z.infer<S>> => {\n try {\n return await parseBody(c, schema, { maxBytes: maxRequestBodyBytes, ...options });\n } catch (err) {\n if (err instanceof HTTPException && err.status === 413) {\n await recordControlPlaneEvent({\n type: \"security.request_body_rejected\",\n severity: \"warn\",\n subject: requestEndpoint(c),\n payload: {\n reason: \"request_body_too_large\",\n endpoint: requestEndpoint(c),\n maxBytes: maxRequestBodyBytes,\n contentLength: c.req.raw.headers.get(\"content-length\") ?? null\n }\n });\n }\n if (err instanceof HTTPException && err.status === 400 && err.cause instanceof RequestBodyRejectedError) {\n await recordControlPlaneEvent({\n type: \"security.request_body_rejected\",\n severity: \"warn\",\n subject: requestEndpoint(c),\n payload: {\n reason: err.cause.reason,\n error: err.cause.publicError,\n endpoint: requestEndpoint(c),\n contentLength: c.req.raw.headers.get(\"content-length\") ?? null\n }\n });\n }\n throw err;\n }\n };\n\n const appendSuppressedRunStatusCallback = async (input: {\n runId: string;\n provider: string;\n state: CallbackRunStatusState;\n }): Promise<void> => {\n const capability = platformCapabilityForProvider(input.provider);\n await repo.appendRunEvent({\n runId: input.runId,\n type: \"callback.progress.suppressed\",\n payload: {\n provider: input.provider,\n reason: \"platform_liveness_strategy\",\n requestedStatus: input.state,\n livenessStrategy: capability?.livenessStrategy ?? \"unknown\"\n },\n visibility: \"audit\",\n importance: \"low\",\n message: \"Run status callback suppressed by platform liveness strategy; use status or audit for details.\"\n });\n };\n\n async function deliverPromotedFollowUpAcknowledgement(input: {\n run: OpenTagRun;\n event: OpenTagEvent;\n }): Promise<void> {\n if (!presentation.shouldDeliverAcknowledgement(input.event.callback.provider)) return;\n const acknowledgementPresentation = presentation.acknowledgementPresentation({ runId: input.run.id });\n const acknowledgement = presentation.render({\n provider: input.event.callback.provider,\n presentation: acknowledgementPresentation\n });\n const statusMessageKey = larkLifecycleStatusMessageKey({ provider: input.event.callback.provider, runId: input.run.id });\n await deliverAndAudit({\n repo,\n sink: callbackSink,\n retry: callbackRetry,\n message: {\n runId: input.run.id,\n kind: \"acknowledgement\",\n provider: input.event.callback.provider,\n uri: input.event.callback.uri,\n body: acknowledgement.body,\n ...(input.event.target.agentId ? { agentId: input.event.target.agentId } : {}),\n ...(input.event.callback.threadKey ? { threadKey: input.event.callback.threadKey } : {}),\n ...(statusMessageKey ? { statusMessageKey } : {}),\n ...(acknowledgement.blocks?.length ? { blocks: acknowledgement.blocks } : {}),\n ...(acknowledgement.rich ? { rich: acknowledgement.rich } : {})\n }\n });\n }\n\n async function promoteFollowUpRequest(input: {\n followUpRequestId: string;\n runId: string;\n }): Promise<{ followUpRequest: import(\"@opentag/core\").FollowUpRequest; run: OpenTagRun }> {\n const promoted = await repo.createRunFromFollowUpRequest(input);\n await deliverPromotedFollowUpAcknowledgement({\n run: promoted.run,\n event: promoted.followUpRequest.event\n });\n return promoted;\n }\n\n async function promoteNextFollowUpAfterTerminalRun(input: {\n activeRunId: string;\n }): Promise<{ followUpRequest: import(\"@opentag/core\").FollowUpRequest; run: OpenTagRun } | null> {\n const [next] = await repo.listQueuedFollowUpsForActiveRun({ activeRunId: input.activeRunId });\n if (!next) return null;\n\n try {\n const promoted = await promoteFollowUpRequest({\n followUpRequestId: next.id,\n runId: `run_${randomUUID()}`\n });\n await repo.appendRunEvent({\n runId: input.activeRunId,\n type: \"follow_up_request.auto_promoted\",\n payload: {\n followUpRequestId: promoted.followUpRequest.id,\n createdRunId: promoted.run.id\n },\n visibility: \"audit\",\n importance: \"normal\",\n message: `Promoted queued follow-up ${promoted.followUpRequest.id} into run ${promoted.run.id}.`\n });\n return promoted;\n } catch (error) {\n await repo.appendRunEvent({\n runId: input.activeRunId,\n type: \"follow_up_request.auto_promote_failed\",\n payload: {\n followUpRequestId: next.id,\n error: error instanceof Error ? error.message : String(error)\n },\n visibility: \"audit\",\n importance: \"high\",\n message: `Could not auto-promote queued follow-up ${next.id}.`\n });\n return null;\n }\n }\n const admission = createAdmissionRuntime({\n repo,\n ...(input.agentAccessProfileCheck ? { agentAccessProfileCheck: input.agentAccessProfileCheck } : {})\n });\n\n app.get(\"/healthz\", (c) => c.json({ ok: true }));\n\n if (input.rateLimit) {\n app.use(\"/v1/*\", createDispatcherRateLimitMiddleware(input.rateLimit));\n }\n\n app.use(\"/v1/*\", async (c, next) => {\n const authorization = authorizeDispatcherRequest({\n request: c.req.raw,\n pairingToken: input.pairingToken,\n runnerTokens,\n revokedRunnerTokenFingerprints\n });\n if (!authorization.ok) {\n await recordControlPlaneEvent({\n type: \"security.auth_failed\",\n severity: \"warn\",\n subject: requestEndpoint(c),\n payload: {\n reason: authorization.reason,\n endpoint: requestEndpoint(c),\n hasAuthorization: Boolean(c.req.raw.headers.get(\"authorization\")),\n tokenFingerprint: rateLimitTokenFingerprint(c.req.raw.headers.get(\"authorization\"))\n }\n });\n return c.json(\n {\n error: \"unauthorized\",\n reason: authorization.reason,\n ...(authorization.message ? { message: authorization.message } : {})\n },\n 401\n );\n }\n await next();\n });\n\n app.get(\"/v1/control-plane-events\", async (c) => {\n const limitValue = Number(c.req.query(\"limit\") ?? 100);\n const limit = Number.isFinite(limitValue) ? Math.max(1, Math.min(500, Math.floor(limitValue))) : 100;\n const eventQuery: { limit: number; type?: string; severity?: \"info\" | \"warn\" | \"error\" } = { limit };\n const type = c.req.query(\"type\");\n const severity = c.req.query(\"severity\");\n if (type) eventQuery.type = type;\n if (severity === \"info\" || severity === \"warn\" || severity === \"error\") eventQuery.severity = severity;\n const events = await repo.listControlPlaneEvents(eventQuery);\n return c.json({ events });\n });\n\n app.post(\"/v1/control-plane-events\", async (c) => {\n const parsed = await parseDispatcherBody(c, RecordControlPlaneEventSchema);\n await recordControlPlaneEvent(parsed);\n return c.json({ ok: true }, 201);\n });\n\n app.get(\"/v1/control-plane-alerts\", async (c) => {\n const limitValue = Number(c.req.query(\"limit\") ?? 5_000);\n const limit = Number.isFinite(limitValue) ? Math.max(1, Math.min(10_000, Math.floor(limitValue))) : 5_000;\n const since = c.req.query(\"since\");\n const alerts = await repo.summarizeControlPlaneAlerts({\n limit,\n ...(since ? { since } : {})\n });\n return c.json({ alerts });\n });\n\n app.post(\"/v1/source-deliveries/prune\", async (c) => {\n const parsed = await parseDispatcherBody(c, PruneSourceDeliveriesSchema);\n const pruneInput = {\n olderThan: parsed.olderThan,\n ...(parsed.limit !== undefined ? { limit: parsed.limit } : {})\n };\n const result = await repo.pruneSourceDeliveries(pruneInput);\n await recordControlPlaneEvent({\n type: \"maintenance.source_deliveries_pruned\",\n severity: \"info\",\n subject: \"source_deliveries\",\n payload: {\n olderThan: parsed.olderThan,\n limit: parsed.limit ?? null,\n scanned: result.scanned,\n pruned: result.pruned,\n retainedActive: result.retainedActive\n }\n });\n return c.json({ result });\n });\n\n app.post(\"/v1/runners\", async (c) => {\n const parsed = await parseDispatcherBody(c, CreateRunnerSchema);\n await repo.registerRunner(parsed);\n await recordControlPlaneEvent({\n type: \"runner.registered\",\n severity: \"info\",\n subject: parsed.runnerId,\n payload: {\n runnerId: parsed.runnerId,\n name: parsed.name\n }\n });\n return c.json({ ok: true }, 201);\n });\n\n app.get(\"/v1/runners/:runnerId\", async (c) => {\n const runner = await repo.getRunner({ runnerId: c.req.param(\"runnerId\") });\n if (!runner) return c.json({ error: \"runner_not_found\" }, 404);\n return c.json({ runner });\n });\n\n app.post(\"/v1/repo-bindings\", async (c) => {\n const parsed = await parseDispatcherBody(c, CreateRepoBindingSchema);\n await repo.createRepoBinding({\n provider: parsed.provider,\n owner: parsed.owner,\n repo: parsed.repo,\n runnerId: parsed.runnerId,\n ...(parsed.workspacePath ? { workspacePath: parsed.workspacePath } : {}),\n ...(parsed.defaultExecutor ? { defaultExecutor: parsed.defaultExecutor } : {}),\n ...(parsed.allowedActors?.length ? { allowedActors: parsed.allowedActors } : {})\n });\n await recordControlPlaneEvent({\n type: \"binding.repository.upserted\",\n severity: \"info\",\n subject: `${parsed.provider}:${parsed.owner}/${parsed.repo}`,\n payload: {\n provider: parsed.provider,\n owner: parsed.owner,\n repo: parsed.repo,\n runnerId: parsed.runnerId,\n hasWorkspacePath: Boolean(parsed.workspacePath),\n ...(parsed.defaultExecutor ? { defaultExecutor: parsed.defaultExecutor } : {}),\n allowedActorsCount: parsed.allowedActors?.length ?? 0\n }\n });\n return c.json({ ok: true }, 201);\n });\n\n app.get(\"/v1/repo-bindings/:provider/:owner/:repo\", async (c) => {\n const binding = await repo.getRepoBinding({\n provider: c.req.param(\"provider\"),\n owner: c.req.param(\"owner\"),\n repo: c.req.param(\"repo\")\n });\n if (!binding) return c.json({ error: \"repo_binding_not_found\" }, 404);\n return c.json({ binding });\n });\n\n app.post(\"/v1/repo-bindings/:provider/:owner/:repo/policy-rules\", async (c) => {\n const parsed = await parseDispatcherBody(c, UpsertPolicyRuleSchema);\n const provider = c.req.param(\"provider\");\n const owner = c.req.param(\"owner\");\n const repoName = c.req.param(\"repo\");\n const rule = await repo.upsertRepoPolicyRule({\n provider,\n owner,\n repo: repoName,\n rule: parsed.rule\n });\n await recordControlPlaneEvent({\n type: \"binding.repository.policy_rule.upserted\",\n severity: \"info\",\n subject: `${provider}:${owner}/${repoName}:${rule.id}`,\n payload: {\n provider,\n owner,\n repo: repoName,\n ruleId: rule.id,\n scope: rule.scope,\n effect: rule.effect,\n ...(rule.capabilityId ? { capabilityId: rule.capabilityId } : {}),\n ...(rule.mutationDomain ? { mutationDomain: rule.mutationDomain } : {}),\n hasReason: Boolean(rule.reason)\n }\n });\n return c.json({ rule }, 201);\n });\n\n app.get(\"/v1/repo-bindings/:provider/:owner/:repo/policy-rules\", async (c) => {\n const rules = await repo.listRepoPolicyRules({\n provider: c.req.param(\"provider\"),\n owner: c.req.param(\"owner\"),\n repo: c.req.param(\"repo\")\n });\n return c.json({ rules });\n });\n\n app.post(\"/v1/repo-bindings/:provider/:owner/:repo/mutation-mappings\", async (c) => {\n const parsed = await parseDispatcherBody(c, UpsertMutationMappingSchema);\n const provider = c.req.param(\"provider\");\n const owner = c.req.param(\"owner\");\n const repoName = c.req.param(\"repo\");\n const mapping = await repo.upsertRepoMutationMapping({\n provider,\n owner,\n repo: repoName,\n mapping: parsed.mapping\n });\n await recordControlPlaneEvent({\n type: \"binding.repository.mutation_mapping.upserted\",\n severity: \"info\",\n subject: `${provider}:${owner}/${repoName}:${mapping.id}`,\n payload: {\n provider,\n owner,\n repo: repoName,\n mappingId: mapping.id,\n adapter: mapping.adapter,\n domain: mapping.domain,\n strategy: mapping.strategy,\n valueCount: Object.keys(mapping.values).length,\n hasDescription: Boolean(mapping.description)\n }\n });\n return c.json({ mapping }, 201);\n });\n\n app.get(\"/v1/repo-bindings/:provider/:owner/:repo/mutation-mappings\", async (c) => {\n const mappings = await repo.listRepoMutationMappings({\n provider: c.req.param(\"provider\"),\n owner: c.req.param(\"owner\"),\n repo: c.req.param(\"repo\")\n });\n return c.json({ mappings });\n });\n\n app.get(\"/v1/repo-bindings/:provider/:owner/:repo/metrics\", async (c) => {\n const metrics = await repo.getRepoMetrics({\n provider: c.req.param(\"provider\"),\n owner: c.req.param(\"owner\"),\n repo: c.req.param(\"repo\")\n });\n return c.json({ metrics });\n });\n\n app.get(\"/v1/work-thread-metrics\", async (c) => {\n const threadId = c.req.query(\"threadId\");\n if (!threadId) return c.json({ error: \"thread_id_required\" }, 422);\n const metrics = await repo.getWorkThreadMetrics({ threadId });\n return c.json({ metrics });\n });\n\n app.post(\"/v1/channel-bindings\", async (c) => {\n const parsed = await parseDispatcherBody(c, CreateChannelBindingSchema);\n await repo.upsertChannelBinding({\n provider: parsed.provider,\n accountId: parsed.accountId,\n conversationId: parsed.conversationId,\n repoProvider: parsed.repoProvider,\n owner: parsed.owner,\n repo: parsed.repo,\n ...(parsed.metadata ? { metadata: parsed.metadata } : {})\n });\n await recordControlPlaneEvent({\n type: \"binding.channel.upserted\",\n severity: \"info\",\n subject: `${parsed.provider}:${parsed.accountId}/${parsed.conversationId}`,\n payload: {\n provider: parsed.provider,\n accountId: parsed.accountId,\n conversationId: parsed.conversationId,\n repoProvider: parsed.repoProvider,\n owner: parsed.owner,\n repo: parsed.repo,\n hasMetadata: Boolean(parsed.metadata)\n }\n });\n return c.json({ ok: true }, 201);\n });\n\n app.get(\"/v1/channel-bindings/:provider/:accountId/:conversationId\", async (c) => {\n const binding = await repo.getChannelBinding({\n provider: c.req.param(\"provider\"),\n accountId: c.req.param(\"accountId\"),\n conversationId: c.req.param(\"conversationId\")\n });\n if (!binding) return c.json({ error: \"channel_binding_not_found\" }, 404);\n return c.json({ binding });\n });\n\n app.get(\"/v1/channel-bindings/:provider/:accountId/:conversationId/status\", async (c) => {\n const provider = c.req.param(\"provider\");\n const accountId = c.req.param(\"accountId\");\n const conversationId = c.req.param(\"conversationId\");\n const binding = await repo.getChannelBinding({ provider, accountId, conversationId });\n if (!binding) return c.json({ error: \"channel_binding_not_found\" }, 404);\n const active = await repo.findCancelableRunForSourceContainer({\n source: provider,\n repoProvider: binding.repoProvider,\n owner: binding.owner,\n repo: binding.repo,\n metadata: sourceContainerMetadata({ provider, accountId, conversationId })\n });\n const queuedFollowUps = active ? await repo.listQueuedFollowUpsForActiveRun({ activeRunId: active.run.id }) : [];\n const runTimeoutMs = active ? latestRunTimeoutMs(await repo.listRunEvents({ runId: active.run.id })) : undefined;\n return c.json({\n binding,\n ...(active ? { activeRun: active.run, activeEvent: active.event } : {}),\n ...(runTimeoutMs ? { runTimeoutPolicy: { hardTimeoutMs: runTimeoutMs } } : {}),\n queuedFollowUps\n });\n });\n\n app.delete(\"/v1/channel-bindings/:provider/:accountId/:conversationId\", async (c) => {\n const provider = c.req.param(\"provider\");\n const accountId = c.req.param(\"accountId\");\n const conversationId = c.req.param(\"conversationId\");\n const deleted = await repo.deleteChannelBinding({\n provider,\n accountId,\n conversationId\n });\n if (!deleted) return c.json({ error: \"channel_binding_not_found\" }, 404);\n await recordControlPlaneEvent({\n type: \"binding.channel.deleted\",\n severity: \"info\",\n subject: `${provider}:${accountId}/${conversationId}`,\n payload: {\n provider,\n accountId,\n conversationId\n }\n });\n return c.body(null, 204);\n });\n\n app.post(\"/v1/channel-bindings/:provider/:accountId/:conversationId/cancel-active-run\", async (c) => {\n const provider = c.req.param(\"provider\");\n const accountId = c.req.param(\"accountId\");\n const conversationId = c.req.param(\"conversationId\");\n const parsed = await parseDispatcherBody(c, CancelRunSchema);\n const binding = await repo.getChannelBinding({ provider, accountId, conversationId });\n if (!binding) return c.json({ error: \"channel_binding_not_found\" }, 404);\n const active = await repo.findCancelableRunForSourceContainer({\n source: provider,\n repoProvider: binding.repoProvider,\n owner: binding.owner,\n repo: binding.repo,\n metadata: sourceContainerMetadata({ provider, accountId, conversationId })\n });\n if (!active) return c.json({ error: \"active_run_not_found\" }, 404);\n const outcome = await repo.cancelRun({\n runId: active.run.id,\n ...(parsed.reason ? { reason: parsed.reason } : {}),\n ...(parsed.requestedBy ? { requestedBy: parsed.requestedBy } : {})\n });\n if (outcome.outcome === \"not_found\") return c.json({ error: \"run_not_found\" }, 404);\n if (outcome.outcome === \"already_terminal\") {\n return c.json({ error: \"run_already_terminal\", run: outcome.run }, 409);\n }\n return c.json({ outcome: \"cancelled\", run: outcome.run });\n });\n\n app.post(\"/v1/slack-channel-bindings\", async (c) => {\n const parsed = await parseDispatcherBody(c, CreateSlackChannelBindingSchema);\n await repo.createSlackChannelBinding(parsed);\n await recordControlPlaneEvent({\n type: \"binding.channel.upserted\",\n severity: \"info\",\n subject: `slack:${parsed.teamId}/${parsed.channelId}`,\n payload: {\n provider: \"slack\",\n accountId: parsed.teamId,\n conversationId: parsed.channelId,\n repoProvider: parsed.repoProvider ?? \"github\",\n owner: parsed.owner,\n repo: parsed.repo,\n compatibilityEndpoint: \"/v1/slack-channel-bindings\",\n hasMetadata: false\n }\n });\n return c.json({ ok: true }, 201);\n });\n\n app.get(\"/v1/slack-channel-bindings/:teamId/:channelId\", async (c) => {\n const binding = await repo.getSlackChannelBinding({\n teamId: c.req.param(\"teamId\"),\n channelId: c.req.param(\"channelId\")\n });\n if (!binding) return c.json({ error: \"slack_channel_binding_not_found\" }, 404);\n return c.json({ binding });\n });\n\n app.post(\"/v1/runs\", async (c) => {\n const parsed = await parseDispatcherBody(c, CreateRunSchema);\n const admitted = await admission.admitRun({ requestId: parsed.runId, event: parsed.event });\n\n if (admitted.outcome === \"needs_human_decision\") {\n const projectTarget = projectTargetRefFromEvent(parsed.event);\n await recordControlPlaneEvent({\n type: \"admission.needs_human_decision\",\n severity: [\"repo_context_missing\", \"repo_not_bound\"].includes(admitted.decision.reasonCode) ? \"warn\" : \"info\",\n subject: parsed.runId,\n payload: {\n runId: parsed.runId,\n decision: admitted.decision,\n source: parsed.event.source,\n sourceEventId: parsed.event.sourceEventId,\n projectTarget: projectTarget ? `${projectTarget.provider}:${projectTarget.owner}/${projectTarget.repo}` : null\n }\n });\n return c.json({ decision: admitted.decision }, 202);\n }\n\n if (admitted.outcome === \"drop_duplicate\") {\n const replay = await repo.createRun({ id: parsed.runId, event: parsed.event });\n const decision = replay.created ? admitted.decision : replay.replayDecision;\n return c.json({ decision, run: replay.run, idempotentReplay: true }, 200);\n }\n\n if (admitted.outcome === \"follow_up_queued\") {\n const event = admitted.followUpRequest.event;\n const activeRunId = admitted.followUpRequest.activeRunId;\n if (activeRunId && shouldDeliverRunStatusUpdate(presentation, { provider: event.callback.provider, state: \"queued\" })) {\n const queuedPresentation = presentation.runStatusPresentation({\n runId: activeRunId,\n state: \"queued\",\n message: `Queued follow-up ${admitted.followUpRequest.id} behind the active run.`,\n nextAction: \"Wait for the active run final reply, send another follow-up to queue more context, or request cancellation with /stop.\",\n detailVisibility: \"source_thread\"\n });\n const queued = presentation.render({\n provider: event.callback.provider,\n presentation: queuedPresentation\n });\n await deliverAndAudit({\n repo,\n sink: callbackSink,\n retry: callbackRetry,\n message: {\n runId: activeRunId,\n kind: \"progress\",\n provider: event.callback.provider,\n uri: event.callback.uri,\n body: queued.body,\n ...(event.target.agentId ? { agentId: event.target.agentId } : {}),\n ...(event.callback.threadKey ? { threadKey: event.callback.threadKey } : {}),\n ...(queued.blocks?.length ? { blocks: queued.blocks } : {}),\n ...(queued.rich ? { rich: queued.rich } : {}),\n statusMessageKey: `${activeRunId}:status`\n }\n });\n }\n return c.json({ decision: admitted.decision, followUpRequest: admitted.followUpRequest }, 202);\n }\n\n const createdRun = await repo.createRun({ id: parsed.runId, event: parsed.event });\n if (!createdRun.created) {\n return c.json(\n {\n decision: createdRun.replayDecision,\n run: createdRun.run,\n idempotentReplay: true\n },\n 200\n );\n }\n const { run } = createdRun;\n const sourceReceiptDelivery = await deliverSourceReceiptBestEffort({\n repo,\n sink: sourceReceiptSink,\n receipt: {\n runId: run.id,\n provider: parsed.event.callback.provider,\n state: \"received\",\n event: parsed.event,\n ...(parsed.event.target.agentId ? { agentId: parsed.event.target.agentId } : {})\n }\n });\n const shouldDeliverAcknowledgement =\n presentation.shouldDeliverAcknowledgement(parsed.event.callback.provider) ||\n (shouldDeliverSourceReceipt(parsed.event.callback.provider) && !sourceReceiptDelivery.delivered);\n if (shouldDeliverAcknowledgement) {\n const acknowledgementPresentation = presentation.acknowledgementPresentation({ runId: run.id });\n const acknowledgement = presentation.render({\n provider: parsed.event.callback.provider,\n presentation: acknowledgementPresentation\n });\n const statusMessageKey = larkLifecycleStatusMessageKey({ provider: parsed.event.callback.provider, runId: run.id });\n await deliverAndAudit({\n repo,\n sink: callbackSink,\n retry: callbackRetry,\n message: {\n runId: run.id,\n kind: \"acknowledgement\",\n provider: parsed.event.callback.provider,\n uri: parsed.event.callback.uri,\n body: acknowledgement.body,\n ...(parsed.event.target.agentId ? { agentId: parsed.event.target.agentId } : {}),\n ...(parsed.event.callback.threadKey ? { threadKey: parsed.event.callback.threadKey } : {}),\n ...(statusMessageKey ? { statusMessageKey } : {}),\n ...(acknowledgement.blocks?.length ? { blocks: acknowledgement.blocks } : {}),\n ...(acknowledgement.rich ? { rich: acknowledgement.rich } : {})\n }\n });\n }\n return c.json({ decision: admitted.decision, run }, 201);\n });\n\n app.post(\"/v1/thread-actions\", async (c) => {\n const parsed = await parseDispatcherBody(c, ThreadActionInputSchema);\n const command = parseThreadActionCommand(parsed.rawText);\n if (!command) {\n return c.json({ outcome: \"ignored\", reason: \"not_action_command\" }, 202);\n }\n\n const resolved = await resolveThreadAction({\n repo,\n command,\n callback: parsed.callback,\n ...(parsed.metadata ? { metadata: parsed.metadata } : {})\n });\n if (!resolved.ok) {\n if (resolved.runId) {\n await deliverAndAudit({\n repo,\n sink: callbackSink,\n retry: callbackRetry,\n message: {\n runId: resolved.runId,\n kind: \"final\",\n provider: parsed.callback.provider,\n uri: parsed.callback.uri,\n body: resolved.message,\n ...(parsed.callback.threadKey ? { threadKey: parsed.callback.threadKey } : {})\n }\n });\n }\n return c.json({ outcome: resolved.reason, message: resolved.message }, resolved.reason === \"no_proposal\" ? 404 : 409);\n }\n\n const authorization = await authorizeThreadAction({\n repo,\n resolved: resolved.resolved,\n actor: parsed.actor\n });\n if (!authorization.ok) {\n return c.json({ outcome: \"unauthorized\", reason: authorization.reason, message: authorization.message }, 403);\n }\n\n const selectionText = selectedActionSummary(resolved.resolved.selectedCandidates);\n const selectedIntents = resolved.resolved.proposal.snapshot.intents.filter((intent) =>\n resolved.resolved.selectedIntentIds.includes(intent.intentId)\n );\n const adapter = adapterForAction({\n event: resolved.resolved.proposal.event,\n callbackProvider: parsed.callback.provider,\n selectedIntents\n });\n const applyPlanId = stableApplyPlanId({ resolved: resolved.resolved, adapter });\n if (command.verb === \"apply\") {\n const existingPlan = await repo.getApplyPlan({ id: applyPlanId });\n if (existingPlan) {\n const existingDecision = await repo.getApprovalDecision({ id: existingPlan.approvalDecisionId });\n if (selectedIntentsAlreadyApplied({ plan: existingPlan, selectedIntentIds: resolved.resolved.selectedIntentIds })) {\n await deliverAndAudit({\n repo,\n sink: callbackSink,\n retry: callbackRetry,\n message: {\n runId: resolved.resolved.proposal.runId,\n kind: \"final\",\n provider: parsed.callback.provider,\n uri: parsed.callback.uri,\n body: renderAlreadyAppliedThreadActionBody({ selectionText }),\n ...(parsed.callback.threadKey ? { threadKey: parsed.callback.threadKey } : {})\n }\n });\n return c.json({ outcome: \"already_applied\", decision: existingDecision, plan: existingPlan }, 200);\n }\n const isStale = selectedIntentsHaveStaleOutcome({\n plan: existingPlan,\n selectedIntentIds: resolved.resolved.selectedIntentIds\n });\n await deliverAndAudit({\n repo,\n sink: callbackSink,\n retry: callbackRetry,\n message: {\n runId: resolved.resolved.proposal.runId,\n kind: \"final\",\n provider: parsed.callback.provider,\n uri: parsed.callback.uri,\n body: isStale\n ? renderStaleThreadActionBody({\n selectionText,\n continueIndex: resolved.resolved.selectedCandidates[0]?.index ?? 1\n })\n : renderAlreadyPlannedThreadActionBody({ selectionText }),\n ...(parsed.callback.threadKey ? { threadKey: parsed.callback.threadKey } : {})\n }\n });\n return c.json({ outcome: isStale ? \"stale\" : \"already_planned\", decision: existingDecision, plan: existingPlan }, 200);\n }\n }\n\n const providedDecision = parsed.id ? await repo.getApprovalDecision({ id: parsed.id }) : null;\n const canReuseProvidedDecision = providedDecision\n ? approvalDecisionMatchesThreadAction({\n decision: providedDecision,\n command,\n resolved: resolved.resolved,\n actor: parsed.actor\n })\n : false;\n const approvalId = parsed.id && (!providedDecision || canReuseProvidedDecision)\n ? parsed.id\n : stableApprovalId({\n command,\n resolved: resolved.resolved,\n actor: parsed.actor\n });\n const existingDecision = canReuseProvidedDecision\n ? providedDecision\n : await repo.getApprovalDecision({ id: approvalId });\n const decision = existingDecision ?? await repo.recordApprovalDecision({\n id: approvalId,\n proposalId: resolved.resolved.proposal.snapshot.proposalId,\n approvedIntentIds: command.verb === \"reject\" ? [] : resolved.resolved.selectedIntentIds,\n ...(command.verb === \"reject\" ? { rejectedIntentIds: resolved.resolved.selectedIntentIds } : {}),\n approvedBy: parsed.actor,\n approvedAt: new Date().toISOString(),\n scope: \"manual\",\n ...(command.reason ? { reason: command.reason } : {}),\n metadata: {\n source: \"thread_action\",\n rawText: command.rawText,\n verb: command.verb,\n selection: command.selection,\n callback: parsed.callback,\n ...(parsed.metadata ? { ingressMetadata: parsed.metadata } : {})\n }\n });\n if (!decision) {\n return c.json({ error: \"proposal_not_found\" }, 404);\n }\n\n if (command.verb === \"reject\") {\n if (existingDecision) {\n return c.json({ outcome: \"already_rejected\", decision }, 200);\n }\n const body = renderThreadActionRecordedBody({\n verb: \"reject\",\n selectionText\n });\n await deliverAndAudit({\n repo,\n sink: callbackSink,\n retry: callbackRetry,\n message: {\n runId: resolved.resolved.proposal.runId,\n kind: \"final\",\n provider: parsed.callback.provider,\n uri: parsed.callback.uri,\n body,\n ...(parsed.callback.threadKey ? { threadKey: parsed.callback.threadKey } : {})\n }\n });\n return c.json({ outcome: \"rejected\", decision }, 201);\n }\n\n if (command.verb === \"approve\") {\n if (existingDecision) {\n return c.json({ outcome: \"already_approved\", decision }, 200);\n }\n const directApply = await selectedDirectApplyStatus({\n event: resolved.resolved.proposal.event,\n callbackProvider: parsed.callback.provider,\n candidates: resolved.resolved.selectedCandidates,\n ...(input.githubApply ? { githubApply: input.githubApply } : {})\n });\n const body = renderThreadActionRecordedBody({\n verb: \"approve\",\n selectionText,\n applyIndex: resolved.resolved.selectedCandidates[0]?.index ?? 1,\n directApply\n });\n await deliverAndAudit({\n repo,\n sink: callbackSink,\n retry: callbackRetry,\n message: {\n runId: resolved.resolved.proposal.runId,\n kind: \"final\",\n provider: parsed.callback.provider,\n uri: parsed.callback.uri,\n body,\n ...(parsed.callback.threadKey ? { threadKey: parsed.callback.threadKey } : {})\n }\n });\n return c.json({ outcome: \"approved\", decision }, 201);\n }\n\n if (command.verb === \"continue\") {\n const childRun = await createChildRunForThreadAction({\n repo,\n command,\n resolved: resolved.resolved,\n runId: stableChildRunId({ command, resolved: resolved.resolved }),\n approvalDecisionId: decision.id\n });\n const body = renderChildRunCreatedBody({\n lead: \"Continuing in OpenTag from this approved action.\",\n resolved: resolved.resolved,\n childRun,\n provider: parsed.callback.provider,\n selectionText,\n approvalDecisionId: decision.id\n });\n await deliverAndAudit({\n repo,\n sink: callbackSink,\n retry: callbackRetry,\n message: {\n runId: resolved.resolved.proposal.runId,\n kind: \"final\",\n provider: parsed.callback.provider,\n uri: parsed.callback.uri,\n body,\n ...(parsed.callback.threadKey ? { threadKey: parsed.callback.threadKey } : {})\n }\n });\n return c.json({ outcome: \"child_run_created\", decision, run: childRun }, 201);\n }\n\n const planResult = await repo.createApplyPlanOnce({\n id: applyPlanId,\n proposalId: resolved.resolved.proposal.snapshot.proposalId,\n approvalDecisionId: decision.id,\n selectedIntentIds: resolved.resolved.selectedIntentIds,\n adapter\n });\n if (!planResult) {\n return c.json({ error: \"proposal_or_approval_not_found\" }, 404);\n }\n if (!planResult.created) {\n if (selectedIntentsAlreadyApplied({ plan: planResult.plan, selectedIntentIds: resolved.resolved.selectedIntentIds })) {\n await deliverAndAudit({\n repo,\n sink: callbackSink,\n retry: callbackRetry,\n message: {\n runId: resolved.resolved.proposal.runId,\n kind: \"final\",\n provider: parsed.callback.provider,\n uri: parsed.callback.uri,\n body: renderAlreadyAppliedThreadActionBody({ selectionText }),\n ...(parsed.callback.threadKey ? { threadKey: parsed.callback.threadKey } : {})\n }\n });\n return c.json({ outcome: \"already_applied\", decision, plan: planResult.plan }, 200);\n }\n const isStale = selectedIntentsHaveStaleOutcome({\n plan: planResult.plan,\n selectedIntentIds: resolved.resolved.selectedIntentIds\n });\n await deliverAndAudit({\n repo,\n sink: callbackSink,\n retry: callbackRetry,\n message: {\n runId: resolved.resolved.proposal.runId,\n kind: \"final\",\n provider: parsed.callback.provider,\n uri: parsed.callback.uri,\n body: isStale\n ? renderStaleThreadActionBody({\n selectionText,\n continueIndex: resolved.resolved.selectedCandidates[0]?.index ?? 1\n })\n : renderAlreadyPlannedThreadActionBody({ selectionText }),\n ...(parsed.callback.threadKey ? { threadKey: parsed.callback.threadKey } : {})\n }\n });\n return c.json({ outcome: isStale ? \"stale\" : \"already_planned\", decision, plan: planResult.plan }, 200);\n }\n const plan = planResult.plan;\n\n const execution = await executeGitHubApplyPlan({\n repo,\n plan,\n resolved: resolved.resolved,\n ...(input.githubApply ? { githubApply: input.githubApply } : {})\n });\n if (execution.executed) {\n const outcomes = execution.plan.outcomes ?? [];\n const body = renderAppliedThreadActionBody({\n selectionText,\n selectedIntentIds: resolved.resolved.selectedIntentIds,\n outcomes\n });\n await deliverAndAudit({\n repo,\n sink: callbackSink,\n retry: callbackRetry,\n message: {\n runId: resolved.resolved.proposal.runId,\n kind: \"final\",\n provider: parsed.callback.provider,\n uri: parsed.callback.uri,\n body,\n ...(parsed.callback.threadKey ? { threadKey: parsed.callback.threadKey } : {})\n }\n });\n return c.json({ outcome: \"applied\", decision, plan: execution.plan }, 201);\n }\n\n if (selectedIntentsHaveStaleOutcome({ plan: execution.plan, selectedIntentIds: resolved.resolved.selectedIntentIds })) {\n await deliverAndAudit({\n repo,\n sink: callbackSink,\n retry: callbackRetry,\n message: {\n runId: resolved.resolved.proposal.runId,\n kind: \"final\",\n provider: parsed.callback.provider,\n uri: parsed.callback.uri,\n body: renderStaleThreadActionBody({\n selectionText,\n continueIndex: resolved.resolved.selectedCandidates[0]?.index ?? 1\n }),\n ...(parsed.callback.threadKey ? { threadKey: parsed.callback.threadKey } : {})\n }\n });\n return c.json({ outcome: \"stale\", decision, plan: execution.plan }, 200);\n }\n\n const childRun = await createChildRunForThreadAction({\n repo,\n command,\n resolved: resolved.resolved,\n runId: stableChildRunId({\n command,\n resolved: resolved.resolved,\n sourceApplyPlanId: execution.plan.id,\n fallbackReason: execution.fallbackReason ?? \"OpenTag cannot directly apply this intent yet.\"\n }),\n approvalDecisionId: decision.id,\n sourceApplyPlanId: execution.plan.id,\n fallbackReason: execution.fallbackReason ?? \"OpenTag cannot directly apply this intent yet.\"\n });\n const body = renderChildRunCreatedBody({\n lead: \"Needs setup before OpenTag can apply this action directly.\",\n resolved: resolved.resolved,\n childRun,\n provider: parsed.callback.provider,\n selectionText,\n approvalDecisionId: decision.id,\n sourceApplyPlanId: execution.plan.id,\n fallbackReason: execution.fallbackReason ?? \"The adapter could not execute the selected intent.\"\n });\n await deliverAndAudit({\n repo,\n sink: callbackSink,\n retry: callbackRetry,\n message: {\n runId: resolved.resolved.proposal.runId,\n kind: \"final\",\n provider: parsed.callback.provider,\n uri: parsed.callback.uri,\n body,\n ...(parsed.callback.threadKey ? { threadKey: parsed.callback.threadKey } : {})\n }\n });\n return c.json({ outcome: \"child_run_created\", decision, plan: execution.plan, run: childRun }, 201);\n });\n\n app.get(\"/v1/follow-up-requests/:id\", async (c) => {\n const followUpRequest = await repo.getFollowUpRequest({ id: c.req.param(\"id\") });\n if (!followUpRequest) return c.json({ error: \"follow_up_request_not_found\" }, 404);\n return c.json({ followUpRequest });\n });\n\n app.post(\"/v1/follow-up-requests/:id/create-run\", async (c) => {\n const parsed = await parseDispatcherBody(c, PromoteFollowUpRequestSchema);\n let promoted;\n try {\n promoted = await promoteFollowUpRequest({\n followUpRequestId: c.req.param(\"id\"),\n runId: parsed.runId\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (message.startsWith(\"Follow-up request not found:\")) {\n return c.json({ error: \"follow_up_request_not_found\" }, 404);\n }\n if (message.includes(\"is not queued\")) {\n return c.json({ error: \"follow_up_request_not_queued\" }, 409);\n }\n throw error;\n }\n const followUpRequest = promoted.followUpRequest;\n return c.json({ followUpRequest, run: promoted.run }, 201);\n });\n\n app.post(\"/v1/runners/:runnerId/claim\", async (c) => {\n const claimed = await repo.claimNextRun({ runnerId: c.req.param(\"runnerId\"), leaseSeconds: 60 });\n if (!claimed) return c.body(null, 204);\n return c.json(claimed, 200);\n });\n\n app.post(\"/v1/runners/:runnerId/runs/:runId/heartbeat\", async (c) => {\n const ok = await repo.heartbeat({ runnerId: c.req.param(\"runnerId\"), runId: c.req.param(\"runId\") });\n if (!ok) return c.json({ error: \"run_not_claimed_by_runner\" }, 404);\n return c.json({ ok: true });\n });\n\n app.post(\"/v1/runs/:runId/running\", async (c) => {\n return c.json({\n error: \"runner_scoped_endpoint_required\",\n message: \"Use /v1/runners/:runnerId/runs/:runId/running, /progress, or /complete.\"\n }, 410);\n });\n\n app.post(\"/v1/runners/:runnerId/runs/:runId/running\", async (c) => {\n const runId = c.req.param(\"runId\");\n const body = await parseDispatcherBody(c, MarkRunningSchema);\n const headerIdempotencyKey = c.req.header(\"idempotency-key\")?.trim();\n const idempotencyKey = body.idempotencyKey?.trim() || headerIdempotencyKey;\n const runningOutcome = await repo.markRunning({\n runId,\n runnerId: c.req.param(\"runnerId\"),\n executor: body.executor,\n ...(body.runTimeoutMs ? { runTimeoutMs: body.runTimeoutMs } : {}),\n ...(idempotencyKey ? { idempotencyKey } : {})\n });\n if (runningOutcome === \"not_found\") return c.json({ error: \"run_not_claimed_by_runner\" }, 404);\n if (runningOutcome === \"duplicate\") return c.json({ ok: true, replayed: true });\n const stored = await repo.getRun({ runId });\n if (!stored) return c.json({ error: \"run_not_found\" }, 404);\n const provider = stored.event.callback.provider;\n if (shouldDeliverSourceReceipt(provider)) {\n await deliverSourceReceiptBestEffort({\n repo,\n sink: sourceReceiptSink,\n receipt: {\n runId,\n provider,\n state: \"running\",\n event: stored.event,\n ...(stored.event.target.agentId ? { agentId: stored.event.target.agentId } : {})\n }\n });\n }\n if (shouldDeliverRunStatusUpdate(presentation, { provider, state: \"running\" })) {\n const runningPresentation = presentation.runStatusPresentation({\n runId,\n state: \"running\",\n message: `Running with ${body.executor}.`,\n nextAction: \"Wait for the final reply, send a follow-up to queue more context, or request cancellation with /stop.\",\n detailVisibility: \"source_thread\"\n });\n const running = presentation.render({\n provider,\n presentation: runningPresentation\n });\n await deliverAndAudit({\n repo,\n sink: callbackSink,\n retry: callbackRetry,\n message: {\n runId,\n kind: \"progress\",\n provider,\n uri: stored.event.callback.uri,\n body: running.body,\n ...(stored.event.target.agentId ? { agentId: stored.event.target.agentId } : {}),\n ...(stored.event.callback.threadKey ? { threadKey: stored.event.callback.threadKey } : {}),\n ...(running.blocks?.length ? { blocks: running.blocks } : {}),\n ...(running.rich ? { rich: running.rich } : {}),\n statusMessageKey: `${runId}:status`\n }\n });\n } else if (presentation.shouldDeliverStatusUpdate(provider)) {\n await appendSuppressedRunStatusCallback({ runId, provider, state: \"running\" });\n }\n return c.json({ ok: true });\n });\n\n app.post(\"/v1/runs/:runId/progress\", async () => {\n return new Response(JSON.stringify({\n error: \"runner_scoped_endpoint_required\",\n message: \"Use /v1/runners/:runnerId/runs/:runId/running, /progress, or /complete.\"\n }), { status: 410, headers: { \"content-type\": \"application/json\" } });\n });\n\n app.post(\"/v1/runners/:runnerId/runs/:runId/progress\", async (c) => {\n const runId = c.req.param(\"runId\");\n const body = await parseDispatcherBody(c, ProgressSchema);\n const headerIdempotencyKey = c.req.header(\"idempotency-key\")?.trim();\n const idempotencyKey = body.idempotencyKey?.trim() || headerIdempotencyKey;\n const progressOutcome = await repo.recordProgress({\n runId,\n runnerId: c.req.param(\"runnerId\"),\n message: body.message,\n ...(body.type ? { type: body.type } : {}),\n ...(body.at ? { at: body.at } : {}),\n ...(body.visibility ? { visibility: body.visibility } : {}),\n ...(body.importance ? { importance: body.importance } : {}),\n ...(idempotencyKey ? { idempotencyKey } : {})\n });\n if (progressOutcome === \"not_found\") return c.json({ error: \"run_not_claimed_by_runner\" }, 404);\n if (progressOutcome === \"duplicate\") return c.json({ ok: true, replayed: true });\n const stored = await repo.getRun({ runId });\n if (!stored) return c.json({ error: \"run_not_found\" }, 404);\n const progressVisibility = body.visibility ?? \"audit\";\n const shouldDeliverProgress = presentation.shouldDeliverProgress(stored.event.callback.provider);\n if (progressVisibility === \"human\" && shouldDeliverProgress) {\n const progressPresentation = presentation.progressPresentation({ runId, message: body.message });\n const progress = presentation.render({\n provider: stored.event.callback.provider,\n presentation: progressPresentation\n });\n await deliverAndAudit({\n repo,\n sink: callbackSink,\n retry: callbackRetry,\n message: {\n runId,\n kind: \"progress\",\n provider: stored.event.callback.provider,\n uri: stored.event.callback.uri,\n body: progress.body,\n ...(stored.event.target.agentId ? { agentId: stored.event.target.agentId } : {}),\n ...(stored.event.callback.threadKey ? { threadKey: stored.event.callback.threadKey } : {}),\n ...(progress.blocks?.length ? { blocks: progress.blocks } : {}),\n ...(progress.rich ? { rich: progress.rich } : {}),\n statusMessageKey: `${runId}:status`\n }\n });\n } else if (progressVisibility === \"human\") {\n const capability = platformCapabilityForProvider(stored.event.callback.provider);\n await repo.appendRunEvent({\n runId,\n type: \"callback.progress.suppressed\",\n payload: {\n provider: stored.event.callback.provider,\n reason: \"platform_liveness_strategy\",\n requestedVisibility: progressVisibility,\n livenessStrategy: capability?.livenessStrategy ?? \"unknown\"\n },\n visibility: \"audit\",\n importance: \"low\",\n message: \"Progress callback suppressed by platform liveness strategy; use status or audit for details.\"\n });\n }\n return c.json({ ok: true });\n });\n\n app.post(\"/v1/runs/:runId/complete\", async () => {\n return new Response(JSON.stringify({\n error: \"runner_scoped_endpoint_required\",\n message: \"Use /v1/runners/:runnerId/runs/:runId/running, /progress, or /complete.\"\n }), { status: 410, headers: { \"content-type\": \"application/json\" } });\n });\n\n app.post(\"/v1/runners/:runnerId/runs/:runId/complete\", async (c) => {\n const runId = c.req.param(\"runId\");\n const parsed = await parseDispatcherBody(c, CompleteRunSchema);\n const headerIdempotencyKey = c.req.header(\"idempotency-key\")?.trim();\n const idempotencyKey = parsed.idempotencyKey?.trim() || headerIdempotencyKey;\n const outcome = await repo.completeRun({\n runId,\n runnerId: c.req.param(\"runnerId\"),\n result: parsed.result,\n ...(idempotencyKey ? { idempotencyKey } : {})\n });\n if (outcome === \"not_found\") return c.json({ error: \"run_not_claimed_by_runner\" }, 404);\n if (outcome === \"duplicate\") return c.json({ ok: true, replayed: true });\n const stored = await repo.getRun({ runId });\n if (!stored) return c.json({ error: \"run_not_found\" }, 404);\n const receiptContext = await actionReceiptContextForFinal({\n event: stored.event,\n result: parsed.result,\n ...(input.githubApply ? { githubApply: input.githubApply } : {})\n });\n if (\n parsed.result.conclusion === \"needs_human\" &&\n shouldDeliverRunStatusUpdate(presentation, { provider: stored.event.callback.provider, state: \"waiting_for_approval\" })\n ) {\n const waitingPresentation = presentation.runStatusPresentation({\n runId,\n state: \"waiting_for_approval\",\n message: \"Waiting for approval.\",\n nextAction: \"Review the source-thread action receipt, then approve, reject, apply, or continue from the source thread.\",\n detailVisibility: \"source_thread\"\n });\n const waiting = presentation.render({\n provider: stored.event.callback.provider,\n presentation: waitingPresentation\n });\n await deliverAndAudit({\n repo,\n sink: callbackSink,\n retry: callbackRetry,\n message: {\n runId,\n kind: \"progress\",\n provider: stored.event.callback.provider,\n uri: stored.event.callback.uri,\n body: waiting.body,\n ...(stored.event.target.agentId ? { agentId: stored.event.target.agentId } : {}),\n ...(stored.event.callback.threadKey ? { threadKey: stored.event.callback.threadKey } : {}),\n ...(waiting.blocks?.length ? { blocks: waiting.blocks } : {}),\n ...(waiting.rich ? { rich: waiting.rich } : {}),\n statusMessageKey: `${runId}:status`\n }\n });\n }\n const finalPresentation = presentation.finalPresentation({\n result: parsed.result,\n runId,\n receiptContext\n });\n const finalCallback = presentation.render({\n provider: stored.event.callback.provider,\n presentation: finalPresentation\n });\n const statusMessageKey = larkLifecycleStatusMessageKey({ provider: stored.event.callback.provider, runId });\n await deliverAndAudit({\n repo,\n sink: callbackSink,\n retry: callbackRetry,\n message: {\n runId,\n kind: \"final\",\n provider: stored.event.callback.provider,\n uri: stored.event.callback.uri,\n body: finalCallback.body,\n ...(stored.event.target.agentId ? { agentId: stored.event.target.agentId } : {}),\n ...(stored.event.callback.threadKey ? { threadKey: stored.event.callback.threadKey } : {}),\n ...(statusMessageKey ? { statusMessageKey } : {}),\n ...(finalCallback.blocks?.length ? { blocks: finalCallback.blocks } : {}),\n ...(finalCallback.rich ? { rich: finalCallback.rich } : {})\n }\n });\n const shouldPromoteFollowUp = parsed.result.conclusion !== \"needs_human\" && parsed.result.conclusion !== \"cancelled\";\n const promotedFollowUp = shouldPromoteFollowUp ? await promoteNextFollowUpAfterTerminalRun({ activeRunId: runId }) : null;\n return c.json({\n ok: true,\n ...(promotedFollowUp\n ? {\n promotedFollowUp: {\n followUpRequest: promotedFollowUp.followUpRequest,\n run: promotedFollowUp.run\n }\n }\n : {})\n });\n });\n\n app.get(\"/v1/proposals/:proposalId\", async (c) => {\n const proposal = await repo.getSuggestedChanges({ proposalId: c.req.param(\"proposalId\") });\n if (!proposal) return c.json({ error: \"proposal_not_found\" }, 404);\n return c.json(proposal);\n });\n\n app.get(\"/v1/proposals/:proposalId/lineage\", async (c) => {\n const lineage = await repo.getProposalLineage({ proposalId: c.req.param(\"proposalId\") });\n if (!lineage) return c.json({ error: \"proposal_not_found\" }, 404);\n return c.json({ lineage });\n });\n\n app.get(\"/v1/proposals/:proposalId/current-intents\", async (c) => {\n const intents = await repo.listCurrentMutationIntents({ proposalId: c.req.param(\"proposalId\") });\n if (!intents) return c.json({ error: \"proposal_not_found\" }, 404);\n return c.json({ intents });\n });\n\n app.post(\"/v1/proposals/:proposalId/approvals\", async (c) => {\n const proposalId = c.req.param(\"proposalId\");\n const body = await parseDispatcherBody(c, ApprovalDecisionInputSchema, { invalidBodyError: \"invalid_approval_decision\" });\n const decision = await repo.recordApprovalDecision({\n id: body.id ?? `approval_${proposalId}_${Date.now()}`,\n proposalId,\n approvedIntentIds: body.approvedIntentIds,\n ...(body.rejectedIntentIds?.length ? { rejectedIntentIds: body.rejectedIntentIds } : {}),\n approvedBy: body.approvedBy,\n approvedAt: body.approvedAt ?? new Date().toISOString(),\n scope: body.scope,\n ...(body.reason ? { reason: body.reason } : {}),\n ...(body.metadata ? { metadata: body.metadata } : {})\n });\n if (!decision) return c.json({ error: \"proposal_not_found\" }, 404);\n return c.json({ decision }, 201);\n });\n\n app.get(\"/v1/approvals/:approvalDecisionId\", async (c) => {\n const decision = await repo.getApprovalDecision({ id: c.req.param(\"approvalDecisionId\") });\n if (!decision) return c.json({ error: \"approval_decision_not_found\" }, 404);\n return c.json({ decision });\n });\n\n app.post(\"/v1/proposals/:proposalId/apply-plans\", async (c) => {\n const proposalId = c.req.param(\"proposalId\");\n const body = await parseDispatcherBody(c, ApplyPlanInputSchema);\n let executableTarget:\n | {\n proposal: NonNullable<Awaited<ReturnType<typeof repo.getSuggestedChanges>>>;\n target: NonNullable<ReturnType<typeof githubTargetFromEvent>>;\n }\n | undefined;\n\n if (body.execute) {\n if (body.adapter !== \"github\") {\n return c.json({ error: \"apply_execution_adapter_not_supported\" }, 422);\n }\n if (!input.githubApply) {\n return c.json({ error: \"github_apply_not_configured\" }, 422);\n }\n const proposal = await repo.getSuggestedChanges({ proposalId });\n if (!proposal) return c.json({ error: \"proposal_not_found\" }, 404);\n const stored = await repo.getRun({ runId: proposal.runId });\n if (!stored) return c.json({ error: \"run_not_found\" }, 404);\n const target = githubTargetFromEvent(stored.event);\n if (!target) {\n return c.json({ error: \"github_target_missing\" }, 422);\n }\n executableTarget = { proposal, target };\n }\n\n const applyPlanInput = {\n id: body.id ?? `apply_${proposalId}_${Date.now()}`,\n proposalId,\n approvalDecisionId: body.approvalDecisionId,\n ...(body.selectedIntentIds !== undefined ? { selectedIntentIds: body.selectedIntentIds } : {}),\n ...(body.adapter ? { adapter: body.adapter } : {})\n };\n let plan: ApplyPlan;\n if (body.execute) {\n const planResult = await repo.createApplyPlanOnce(applyPlanInput);\n if (!planResult) return c.json({ error: \"proposal_or_approval_not_found\" }, 404);\n plan = planResult.plan;\n if (!planResult.created) {\n return c.json({ plan, alreadyPlanned: true }, 200);\n }\n } else {\n const planResult = await repo.createApplyPlan(applyPlanInput);\n if (!planResult) return c.json({ error: \"proposal_or_approval_not_found\" }, 404);\n plan = planResult;\n }\n if (body.execute && executableTarget) {\n const githubApply = input.githubApply;\n if (!githubApply) {\n return c.json({ error: \"github_apply_not_configured\" }, 422);\n }\n const preflightOutcomeByIntentId = new Map((plan.outcomes ?? []).map((outcome) => [outcome.intentId, outcome]));\n const executableIntents = executableTarget.proposal.snapshot.intents.filter((intent) => {\n const outcome = preflightOutcomeByIntentId.get(intent.intentId);\n return outcome?.outcome === \"skipped\" && outcome.message?.startsWith(\"Preflight passed\");\n });\n const target = {\n token: githubApply.token,\n owner: executableTarget.target.owner,\n repo: executableTarget.target.repoName,\n ...(typeof executableTarget.target.issueNumber === \"number\" ? { issueNumber: executableTarget.target.issueNumber } : {}),\n ...(executableTarget.target.pullRequestNumber ? { pullRequestNumber: executableTarget.target.pullRequestNumber } : {})\n };\n const executedOutcomes = [];\n const compilerRegistry = createAdapterMutationCompilerRegistry([\n createGitHubIssueMutationCompiler({\n mappings: mappingsFromAdapterPlan(plan.adapterPlan),\n ...(executableTarget.target.targetKind ? { targetKind: executableTarget.target.targetKind } : {})\n })\n ]);\n for (const compilation of compilerRegistry.compile(\"github\", executableIntents)) {\n if (!compilation.ok) {\n executedOutcomes.push(compilation.outcome);\n continue;\n }\n executedOutcomes.push(\n await applyGitHubIssueMutationOperation({\n target,\n operation: compilation.operation as GitHubIssueMutationOperation,\n ...(githubApply.fetchImpl ? { fetchImpl: githubApply.fetchImpl } : {})\n })\n );\n }\n const executedOutcomeByIntentId = new Map(executedOutcomes.map((outcome) => [outcome.intentId, outcome]));\n const mergedOutcomes = (plan.outcomes ?? []).map((outcome) => executedOutcomeByIntentId.get(outcome.intentId) ?? outcome);\n const executedPlan = await repo.updateApplyPlanOutcomes({\n id: plan.id,\n outcomes: mergedOutcomes,\n externalWritesExecuted: true\n });\n return c.json({ plan: executedPlan ?? plan }, 201);\n }\n return c.json({ plan }, 201);\n });\n\n app.get(\"/v1/apply-plans/:applyPlanId\", async (c) => {\n const plan = await repo.getApplyPlan({ id: c.req.param(\"applyPlanId\") });\n if (!plan) return c.json({ error: \"apply_plan_not_found\" }, 404);\n return c.json({ plan });\n });\n\n app.post(\"/v1/runs/:runId/child-runs\", async (c) => {\n const parentRunId = c.req.param(\"runId\");\n const body = await parseDispatcherBody(c, ChildRunInputSchema);\n const parent = await repo.getRun({ runId: parentRunId });\n if (!parent) return c.json({ error: \"parent_run_not_found\" }, 404);\n const receivedAt = new Date().toISOString();\n const sourceProposalId = body.sourceProposalId ?? body.action.targetId;\n const { run } = await repo.createRun({\n id: body.runId,\n event: childEventFromParent({\n parentEvent: parent.event,\n childRunId: body.runId,\n ...(body.commandText ? { commandText: body.commandText } : {}),\n actionKind: body.action.kind,\n receivedAt\n }),\n parentRunId,\n triggeredByAction: body.action,\n ...(sourceProposalId ? { sourceProposalId } : {}),\n ...(body.sourceApplyPlanId ? { sourceApplyPlanId: body.sourceApplyPlanId } : {})\n });\n return c.json({ run }, 201);\n });\n\n app.get(\"/v1/runs/:runId\", async (c) => {\n const stored = await repo.getRun({ runId: c.req.param(\"runId\") });\n if (!stored) return c.json({ error: \"run_not_found\" }, 404);\n return c.json(stored);\n });\n\n app.post(\"/v1/runs/:runId/cancel\", async (c) => {\n const parsed = await parseDispatcherBody(c, CancelRunSchema);\n const outcome = await repo.cancelRun({\n runId: c.req.param(\"runId\"),\n ...(parsed.reason ? { reason: parsed.reason } : {}),\n ...(parsed.requestedBy ? { requestedBy: parsed.requestedBy } : {})\n });\n if (outcome.outcome === \"not_found\") return c.json({ error: \"run_not_found\" }, 404);\n if (outcome.outcome === \"already_terminal\") {\n return c.json({ error: \"run_already_terminal\", run: outcome.run }, 409);\n }\n return c.json({ outcome: \"cancelled\", run: outcome.run });\n });\n\n app.get(\"/v1/runs/:runId/metrics\", async (c) => {\n const runId = c.req.param(\"runId\");\n const stored = await repo.getRun({ runId });\n if (!stored) return c.json({ error: \"run_not_found\" }, 404);\n const metrics = await repo.getRunMetrics({ runId });\n return c.json({ metrics });\n });\n\n app.get(\"/v1/runs/:runId/events\", async (c) => {\n const events = await repo.listRunEvents({ runId: c.req.param(\"runId\") });\n return c.json({ events });\n });\n\n app.onError((err, c) => {\n // Preserve explicit HTTP errors raised by handlers/middleware. Request-body\n // parse failures are surfaced as tagged HTTPException(4xx) by parseBody(),\n // so they are returned to the client here. Crucially, we no longer map raw\n // ZodError/SyntaxError to 400 globally: an internal ZodError (e.g. a store\n // repository validating a DB row) or a SyntaxError from an internal\n // JSON.parse must remain a 500 so monitoring still alerts on it.\n if (err instanceof HTTPException) {\n return err.getResponse();\n }\n // Unknown errors (including internal ZodError/SyntaxError) remain 500 so\n // monitoring still alerts on genuine server faults.\n console.error(\"dispatcher unhandled error\", err);\n return c.json({ error: \"internal_server_error\" }, 500);\n });\n\n return app;\n}\n","import {\n conversationKeysFromEvent,\n projectTargetRefFromEvent,\n RunAdmissionDecisionSchema,\n type OpenTagEvent,\n type OpenTagRun,\n type RunAdmissionDecision,\n type RunAdmissionReasonCode\n} from \"@opentag/core\";\nimport { type FollowUpRequest, type RepoBinding, type createOpenTagRepository } from \"@opentag/store\";\n\ntype Repository = ReturnType<typeof createOpenTagRepository>;\n\nexport type AgentAccessProfileCheckInput = {\n event: OpenTagEvent;\n binding: RepoBinding;\n};\n\nexport type AgentAccessProfileCheckResult =\n | { allowed: true }\n | {\n allowed: false;\n reason: string;\n reasonCode?: Extract<RunAdmissionReasonCode, \"agent_access_profile_denied\" | \"policy_rejected\">;\n };\n\nexport type AgentAccessProfileCheck = (input: AgentAccessProfileCheckInput) => Promise<AgentAccessProfileCheckResult>;\n\nexport type AdmitRunInput = {\n requestId: string;\n event: OpenTagEvent;\n};\n\nexport type AdmitRunResult =\n | {\n outcome: \"start\";\n decision: RunAdmissionDecision;\n binding: RepoBinding;\n }\n | {\n outcome: \"drop_duplicate\";\n decision: RunAdmissionDecision;\n run: OpenTagRun;\n idempotentReplay: true;\n }\n | {\n outcome: \"follow_up_queued\";\n decision: RunAdmissionDecision;\n followUpRequest: FollowUpRequest;\n }\n | {\n outcome: \"needs_human_decision\";\n decision: RunAdmissionDecision;\n };\n\nfunction isWriteCapable(event: OpenTagEvent): boolean {\n return event.permissions.some((permission) => [\"repo:write\", \"pr:create\", \"pr:update\"].includes(permission.scope));\n}\n\nfunction actorIsAllowed(event: OpenTagEvent, allowedActors: string[] | undefined): boolean {\n if (!allowedActors?.length) return true;\n return allowedActors.includes(event.actor.handle ?? \"\") || allowedActors.includes(event.actor.providerUserId);\n}\n\nfunction admissionDecision(input: {\n action: RunAdmissionDecision[\"action\"];\n reason: string;\n reasonCode: RunAdmissionReasonCode;\n event: OpenTagEvent;\n activeRunId?: string;\n}): RunAdmissionDecision {\n return RunAdmissionDecisionSchema.parse({\n action: input.action,\n reason: input.reason,\n reasonCode: input.reasonCode,\n decidedAt: new Date().toISOString(),\n ...(input.activeRunId ? { activeRunId: input.activeRunId } : {}),\n eventId: input.event.id\n });\n}\n\nasync function defaultAgentAccessProfileCheck(): Promise<AgentAccessProfileCheckResult> {\n return { allowed: true };\n}\n\nexport function createAdmissionRuntime(input: {\n repo: Repository;\n agentAccessProfileCheck?: AgentAccessProfileCheck;\n}) {\n const agentAccessProfileCheck = input.agentAccessProfileCheck ?? defaultAgentAccessProfileCheck;\n\n return {\n async admitRun(request: AdmitRunInput): Promise<AdmitRunResult> {\n const existingRun = await input.repo.getRunByEventId({ eventId: request.event.id });\n if (existingRun) {\n return {\n outcome: \"drop_duplicate\",\n decision: admissionDecision({\n action: \"drop_duplicate\",\n reason: \"Source event already created a run.\",\n reasonCode: \"duplicate_source_event\",\n event: request.event,\n activeRunId: existingRun.run.id\n }),\n run: existingRun.run,\n idempotentReplay: true\n };\n }\n\n const repoKey = projectTargetRefFromEvent(request.event);\n if (!repoKey) {\n return {\n outcome: \"needs_human_decision\",\n decision: admissionDecision({\n action: \"needs_human_decision\",\n reason: \"The event did not resolve to a repository context.\",\n reasonCode: \"repo_context_missing\",\n event: request.event\n })\n };\n }\n\n const binding = await input.repo.getRepoBinding(repoKey);\n if (!binding) {\n return {\n outcome: \"needs_human_decision\",\n decision: admissionDecision({\n action: \"needs_human_decision\",\n reason: \"No repository binding is configured for this work context.\",\n reasonCode: \"repo_not_bound\",\n event: request.event\n })\n };\n }\n\n if (isWriteCapable(request.event) && !actorIsAllowed(request.event, binding.allowedActors)) {\n return {\n outcome: \"needs_human_decision\",\n decision: admissionDecision({\n action: \"needs_human_decision\",\n reason: \"The requesting actor is not allowed to start a write-capable run in this repository.\",\n reasonCode: \"actor_not_allowed_for_write\",\n event: request.event\n })\n };\n }\n\n const accessDecision = await agentAccessProfileCheck({ event: request.event, binding });\n if (!accessDecision.allowed) {\n return {\n outcome: \"needs_human_decision\",\n decision: admissionDecision({\n action: \"needs_human_decision\",\n reason: accessDecision.reason,\n reasonCode: accessDecision.reasonCode ?? \"agent_access_profile_denied\",\n event: request.event\n })\n };\n }\n\n let activeRun: { run: OpenTagRun; event: OpenTagEvent } | null = null;\n for (const conversationKey of conversationKeysFromEvent(request.event)) {\n activeRun = await input.repo.findActiveRunForConversation({ conversationKey });\n if (activeRun) break;\n }\n if (activeRun) {\n const decision = admissionDecision({\n action: \"queue_follow_up\",\n reason: \"A run is already active for this thread; queue the new request as follow-up work.\",\n reasonCode: isWriteCapable(request.event) ? \"active_write_run_same_thread\" : \"active_run_same_thread\",\n event: request.event,\n activeRunId: activeRun.run.id\n });\n const { followUpRequest, created } = await input.repo.createFollowUpRequest({\n id: request.requestId,\n event: request.event,\n decision,\n activeRunId: activeRun.run.id\n });\n if (created) {\n await input.repo.appendRunEvent({\n runId: activeRun.run.id,\n type: \"follow_up_request.queued\",\n payload: { followUpRequestId: followUpRequest.id, sourceEventId: request.event.id },\n visibility: \"audit\",\n importance: \"normal\",\n message: decision.reason\n });\n }\n return {\n outcome: \"follow_up_queued\",\n decision,\n followUpRequest\n };\n }\n\n return {\n outcome: \"start\",\n decision: admissionDecision({\n action: \"start\",\n reason: \"Source event accepted and ready to create a run.\",\n reasonCode: \"new_event\",\n event: request.event\n }),\n binding\n };\n }\n };\n}\n"],"mappings":"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","names":["conversationKeysFromEvent","projectTargetRefFromEvent","platformCapabilityForProvider","bucket","metadataString","conversationKeysFromEvent","projectTargetRefFromEvent","input","platformCapabilityForProvider","existingDecision","body","childRun"]}
|