@spotpatch/runtime 1.8.0 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-7ES63LA7.js +28 -0
- package/dist/chunk-7ES63LA7.js.map +1 -0
- package/dist/chunk-NII5OBAN.js +14 -0
- package/dist/chunk-NII5OBAN.js.map +1 -0
- package/dist/chunk-QY5T4DPA.js +552 -0
- package/dist/chunk-QY5T4DPA.js.map +1 -0
- package/dist/chunk-XBD55BCF.js +14 -0
- package/dist/chunk-XBD55BCF.js.map +1 -0
- package/dist/data-flow-panel.cjs +333 -0
- package/dist/data-flow-panel.cjs.map +1 -0
- package/dist/data-flow-panel.d.cts +38 -0
- package/dist/data-flow-panel.d.ts +38 -0
- package/dist/data-flow-panel.js +283 -0
- package/dist/data-flow-panel.js.map +1 -0
- package/dist/data-flow-runtime-B3itbieT.d.cts +67 -0
- package/dist/data-flow-runtime-B3itbieT.d.ts +67 -0
- package/dist/data-flow.cjs +575 -0
- package/dist/data-flow.cjs.map +1 -0
- package/dist/data-flow.d.cts +8 -0
- package/dist/data-flow.d.ts +8 -0
- package/dist/data-flow.js +15 -0
- package/dist/data-flow.js.map +1 -0
- package/dist/external-handoff-panel.cjs +1002 -0
- package/dist/external-handoff-panel.cjs.map +1 -0
- package/dist/external-handoff-panel.d.cts +36 -0
- package/dist/external-handoff-panel.d.ts +36 -0
- package/dist/external-handoff-panel.js +959 -0
- package/dist/external-handoff-panel.js.map +1 -0
- package/dist/index.cjs +871 -14
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +335 -31
- package/dist/index.js.map +1 -1
- package/package.json +46 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/controller/external-handoff-workflow.ts","../src/ui/external-handoff-panel.ts"],"sourcesContent":["import {\n ERROR_CODES,\n EXTERNAL_HANDOFF_BROKER_PROTOCOL_VERSION,\n EXTERNAL_HANDOFF_LIMITS,\n EXTERNAL_HANDOFF_SNAPSHOT_SCHEMA_VERSION,\n SPOTPATCH_ENDPOINTS,\n SPOTPATCH_TOKEN_HEADER,\n isErrorCode,\n type ErrorCode,\n type ActiveAdapterSummary,\n type DispatchSummary,\n type ExternalHandoffCapability,\n type ExternalHandoffPublishResult,\n type ExternalHandoffStatusResult,\n type ExternalHandoffSummary,\n type SpotAnnotation,\n} from \"@spotpatch/shared/external-handoff-browser\";\n\nimport type {\n ExternalHandoffPanel,\n ExternalHandoffWorkflow,\n} from \"../ui/external-handoff-contract.js\";\n\ninterface WorkflowOptions {\n readonly fetch: typeof globalThis.fetch;\n readonly panel: ExternalHandoffPanel;\n readonly selectedAnnotation: () => SpotAnnotation | undefined;\n readonly sessionToken: string;\n readonly window: Window;\n}\n\nconst MAX_SUMMARY_RESPONSE_BYTES = 64 * 1_024;\nconst OPAQUE_ID_PATTERN = /^[A-Za-z0-9_-]{22,128}$/u;\n\nclass ExternalHandoffApiError extends Error {\n constructor(readonly code?: ErrorCode) {\n super(\"SpotPatch external handoff API request failed.\");\n this.name = \"ExternalHandoffApiError\";\n }\n}\n\nfunction record(value: unknown): value is Readonly<Record<string, unknown>> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction exactKeys(\n value: Readonly<Record<string, unknown>>,\n keys: readonly string[],\n): boolean {\n const actual = Object.keys(value).sort();\n const expected = [...keys].sort();\n return (\n actual.length === expected.length &&\n actual.every((key, index) => key === expected[index])\n );\n}\n\nfunction validTimestamp(value: unknown): value is string {\n return typeof value === \"string\" && Number.isFinite(Date.parse(value));\n}\n\nfunction parseActiveAdapter(value: unknown): ActiveAdapterSummary | null {\n if (value === null) return null;\n\n if (\n !record(value) ||\n !exactKeys(value, [\"canDispatch\", \"connectedAt\", \"kind\", \"state\", \"updatedAt\"]) ||\n (value.kind !== \"claude-channel\" && value.kind !== \"codex-app-server\") ||\n (value.state !== \"ready\" && value.state !== \"busy\" && value.state !== \"blocked\") ||\n typeof value.canDispatch !== \"boolean\" ||\n value.canDispatch !== (value.state === \"ready\") ||\n !validTimestamp(value.connectedAt) ||\n !validTimestamp(value.updatedAt)\n ) {\n throw new ExternalHandoffApiError();\n }\n\n return Object.freeze({\n kind: value.kind,\n state: value.state,\n canDispatch: value.canDispatch,\n connectedAt: value.connectedAt,\n updatedAt: value.updatedAt,\n });\n}\n\nfunction parseDispatch(value: unknown): DispatchSummary | null {\n if (value === null) return null;\n if (!record(value)) throw new ExternalHandoffApiError();\n\n if (\n !exactKeys(value, [\"adapterKind\", \"phase\", \"revision\", \"updatedAt\"]) ||\n (value.adapterKind !== \"claude-channel\" &&\n value.adapterKind !== \"codex-app-server\") ||\n !Number.isSafeInteger(value.revision) ||\n (value.revision as number) <= 0 ||\n (value.phase !== \"queued\" &&\n value.phase !== \"dispatching\" &&\n value.phase !== \"dispatched\" &&\n value.phase !== \"working\" &&\n value.phase !== \"completed\" &&\n value.phase !== \"failed\" &&\n value.phase !== \"delivery-unknown\") ||\n !validTimestamp(value.updatedAt)\n ) {\n throw new ExternalHandoffApiError();\n }\n\n return Object.freeze({\n adapterKind: value.adapterKind,\n revision: value.revision as number,\n phase: value.phase,\n updatedAt: value.updatedAt,\n });\n}\n\nfunction parseCapability(value: unknown): ExternalHandoffCapability {\n if (\n !record(value) ||\n !exactKeys(value, [\n \"activeAdapter\",\n \"activeWaitCount\",\n \"brokerProtocolVersion\",\n \"brokerReady\",\n \"dispatch\",\n \"enabled\",\n \"snapshotSchemaVersion\",\n ]) ||\n value.enabled !== true ||\n typeof value.brokerReady !== \"boolean\" ||\n !Number.isSafeInteger(value.activeWaitCount) ||\n (value.activeWaitCount as number) < 0 ||\n (value.activeWaitCount as number) > EXTERNAL_HANDOFF_LIMITS.maximumWaiters ||\n value.snapshotSchemaVersion !== EXTERNAL_HANDOFF_SNAPSHOT_SCHEMA_VERSION ||\n value.brokerProtocolVersion !== EXTERNAL_HANDOFF_BROKER_PROTOCOL_VERSION\n ) {\n throw new ExternalHandoffApiError();\n }\n\n return Object.freeze({\n enabled: true,\n brokerReady: value.brokerReady,\n activeWaitCount: value.activeWaitCount as number,\n activeAdapter: parseActiveAdapter(value.activeAdapter),\n dispatch: parseDispatch(value.dispatch),\n snapshotSchemaVersion: EXTERNAL_HANDOFF_SNAPSHOT_SCHEMA_VERSION,\n brokerProtocolVersion: EXTERNAL_HANDOFF_BROKER_PROTOCOL_VERSION,\n });\n}\n\nfunction parsePublishResult(value: unknown): ExternalHandoffPublishResult {\n if (\n !record(value) ||\n !exactKeys(value, [\"delivery\", \"handoff\", \"replayed\"]) ||\n typeof value.replayed !== \"boolean\" ||\n !record(value.delivery)\n ) {\n throw new ExternalHandoffApiError();\n }\n\n const handoff = parseSummary(value.handoff);\n\n if (value.delivery.mode === \"inbox\") {\n if (!exactKeys(value.delivery, [\"mode\"])) {\n throw new ExternalHandoffApiError();\n }\n\n return Object.freeze({\n handoff,\n delivery: Object.freeze({ mode: \"inbox\" as const }),\n replayed: value.replayed,\n });\n }\n\n if (\n value.delivery.mode !== \"active\" ||\n !exactKeys(value.delivery, [\"adapter\", \"dispatch\", \"mode\"])\n ) {\n throw new ExternalHandoffApiError();\n }\n\n const adapter = parseActiveAdapter(value.delivery.adapter);\n const dispatch = parseDispatch(value.delivery.dispatch);\n\n if (adapter === null || dispatch?.revision !== handoff.revision) {\n throw new ExternalHandoffApiError();\n }\n\n return Object.freeze({\n handoff,\n delivery: Object.freeze({ mode: \"active\" as const, adapter, dispatch }),\n replayed: value.replayed,\n });\n}\n\nfunction parseStatusResult(value: unknown): ExternalHandoffStatusResult {\n if (!record(value) || !exactKeys(value, [\"activeAdapter\", \"dispatch\", \"handoff\"])) {\n throw new ExternalHandoffApiError();\n }\n\n const handoff = parseSummary(value.handoff);\n const dispatch = parseDispatch(value.dispatch);\n\n if (dispatch !== null && dispatch.revision !== handoff.revision) {\n throw new ExternalHandoffApiError();\n }\n\n return Object.freeze({\n handoff,\n activeAdapter: parseActiveAdapter(value.activeAdapter),\n dispatch,\n });\n}\n\nfunction parseSummary(value: unknown): ExternalHandoffSummary {\n if (!record(value)) throw new ExternalHandoffApiError();\n const expectedKeys = [\n \"cursor\",\n \"expiresAt\",\n \"framework\",\n \"page\",\n \"pickupCount\",\n \"publishedAt\",\n \"revision\",\n \"sessionId\",\n \"state\",\n \"targetCount\",\n ...(value.pickedUpAt === undefined ? [] : [\"pickedUpAt\"]),\n ];\n\n if (\n !exactKeys(value, expectedKeys) ||\n typeof value.sessionId !== \"string\" ||\n !OPAQUE_ID_PATTERN.test(value.sessionId) ||\n (value.framework !== \"vite\" && value.framework !== \"next\") ||\n !Number.isSafeInteger(value.revision) ||\n (value.revision as number) <= 0 ||\n typeof value.cursor !== \"string\" ||\n !OPAQUE_ID_PATTERN.test(value.cursor) ||\n !Number.isSafeInteger(value.targetCount) ||\n (value.targetCount as number) <= 0 ||\n !record(value.page) ||\n !exactKeys(value.page, [\"origin\", \"pathname\"]) ||\n typeof value.page.origin !== \"string\" ||\n typeof value.page.pathname !== \"string\" ||\n !validTimestamp(value.publishedAt) ||\n !validTimestamp(value.expiresAt) ||\n (value.state !== \"available\" &&\n value.state !== \"expired\" &&\n value.state !== \"superseded\") ||\n !Number.isSafeInteger(value.pickupCount) ||\n (value.pickupCount as number) < 0 ||\n (value.pickupCount as number) > EXTERNAL_HANDOFF_LIMITS.maximumConnectorReceipts ||\n (value.pickedUpAt !== undefined && !validTimestamp(value.pickedUpAt))\n ) {\n throw new ExternalHandoffApiError();\n }\n\n return Object.freeze({\n sessionId: value.sessionId,\n framework: value.framework,\n revision: value.revision as number,\n cursor: value.cursor,\n targetCount: value.targetCount as number,\n page: Object.freeze({ origin: value.page.origin, pathname: value.page.pathname }),\n publishedAt: value.publishedAt,\n expiresAt: value.expiresAt,\n state: value.state,\n pickupCount: value.pickupCount as number,\n ...(value.pickedUpAt === undefined ? {} : { pickedUpAt: value.pickedUpAt }),\n });\n}\n\nasync function boundedJson(response: Response): Promise<unknown> {\n const declaredLength = Number(response.headers.get(\"content-length\"));\n\n if (Number.isFinite(declaredLength) && declaredLength > MAX_SUMMARY_RESPONSE_BYTES) {\n await response.body?.cancel();\n throw new ExternalHandoffApiError();\n }\n\n if (response.body === null) throw new ExternalHandoffApiError();\n const reader = response.body.getReader();\n const chunks: Uint8Array[] = [];\n let total = 0;\n\n try {\n for (;;) {\n const chunk = await reader.read();\n if (chunk.done) break;\n total += chunk.value.byteLength;\n\n if (total > MAX_SUMMARY_RESPONSE_BYTES) {\n await reader.cancel();\n throw new ExternalHandoffApiError();\n }\n\n chunks.push(chunk.value);\n }\n } finally {\n reader.releaseLock();\n }\n\n const payload = new Uint8Array(total);\n let offset = 0;\n\n for (const chunk of chunks) {\n payload.set(chunk, offset);\n offset += chunk.byteLength;\n }\n\n try {\n return JSON.parse(\n new TextDecoder(\"utf-8\", { fatal: true }).decode(payload),\n ) as unknown;\n } catch {\n throw new ExternalHandoffApiError();\n }\n}\n\nfunction failureCode(value: unknown): ErrorCode | undefined {\n return record(value) &&\n value.ok === false &&\n record(value.error) &&\n isErrorCode(value.error.code)\n ? value.error.code\n : undefined;\n}\n\nfunction successData(value: unknown): unknown {\n if (!record(value) || !exactKeys(value, [\"data\", \"ok\"]) || value.ok !== true) {\n throw new ExternalHandoffApiError();\n }\n\n return value.data;\n}\n\nfunction omitBrowserCode(annotation: SpotAnnotation): SpotAnnotation {\n return {\n ...annotation,\n targets: annotation.targets.map((target) => ({\n instruction: target.instruction,\n ...(target.page === undefined ? {} : { page: target.page }),\n source: target.source,\n react: target.react,\n element: target.element,\n styles: target.styles,\n warnings: target.warnings,\n })),\n };\n}\n\nfunction createRequestId(window: Window): string {\n const bytes = new Uint8Array(24);\n window.crypto.getRandomValues(bytes);\n return Array.from(bytes, (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction dispatchIsPending(dispatch: DispatchSummary | null): boolean {\n return (\n dispatch !== null &&\n dispatch.phase !== \"completed\" &&\n dispatch.phase !== \"failed\" &&\n dispatch.phase !== \"delivery-unknown\"\n );\n}\n\nfunction api(options: WorkflowOptions) {\n const pending = new Set<AbortController>();\n\n const request = async (endpoint: string, body: unknown): Promise<unknown> => {\n const controller = new AbortController();\n pending.add(controller);\n\n try {\n const response = await options.fetch(endpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n [SPOTPATCH_TOKEN_HEADER]: options.sessionToken,\n },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n const envelope = await boundedJson(response);\n\n if (!response.ok) throw new ExternalHandoffApiError(failureCode(envelope));\n return successData(envelope);\n } finally {\n pending.delete(controller);\n }\n };\n\n return Object.freeze({\n cancel() {\n for (const controller of pending) controller.abort();\n pending.clear();\n },\n async capability() {\n return parseCapability(\n await request(SPOTPATCH_ENDPOINTS.externalHandoffCapability, {}),\n );\n },\n async publish(requestId: string, annotation: SpotAnnotation) {\n return parsePublishResult(\n await request(SPOTPATCH_ENDPOINTS.externalHandoffPublish, {\n annotation: omitBrowserCode(annotation),\n requestId,\n }),\n );\n },\n async status(cursor?: string) {\n return parseStatusResult(\n await request(\n SPOTPATCH_ENDPOINTS.externalHandoffStatus,\n cursor === undefined ? {} : { cursor },\n ),\n );\n },\n async resolveDelivery(cursor: string) {\n return parseStatusResult(\n await request(SPOTPATCH_ENDPOINTS.externalHandoffResolveDelivery, {\n confirmation: \"workspace-reviewed\",\n cursor,\n }),\n );\n },\n });\n}\n\nexport function createExternalHandoffWorkflow(\n fetch: typeof globalThis.fetch,\n panel: ExternalHandoffPanel,\n selectedAnnotation: () => SpotAnnotation | undefined,\n sessionToken: string,\n window: Window,\n): ExternalHandoffWorkflow {\n const options: WorkflowOptions = {\n fetch,\n panel,\n selectedAnnotation,\n sessionToken,\n window,\n };\n const client = api(options);\n const timers = new Set<number>();\n const lifecycle = {\n disposed: false,\n mounted: false,\n operation: 0,\n userActionPending: false,\n };\n let capability: ExternalHandoffCapability | undefined;\n let current: ExternalHandoffStatusResult | undefined;\n let retryablePublish:\n Readonly<{ annotation: SpotAnnotation; requestId: string }> | undefined;\n\n const clearTimers = (): void => {\n for (const timer of timers) options.window.clearTimeout(timer);\n timers.clear();\n };\n const errorCode = (error: unknown): ErrorCode | undefined =>\n error instanceof ExternalHandoffApiError ? error.code : undefined;\n const restorePanel = (): void => {\n if (current !== undefined) options.panel.renderStatus(current);\n else if (capability !== undefined) options.panel.renderCapability(capability);\n };\n const refreshCapability = async (revision: number): Promise<void> => {\n try {\n const result = await client.capability();\n if (lifecycle.disposed || revision !== lifecycle.operation) return;\n capability = result;\n options.panel.renderCapability(result);\n if (result.dispatch !== null) {\n const status = await client.status();\n if (revision !== lifecycle.operation) return;\n current = status;\n options.panel.renderStatus(status);\n }\n } catch (error: unknown) {\n if (\n lifecycle.disposed ||\n revision !== lifecycle.operation ||\n (error instanceof DOMException && error.name === \"AbortError\")\n )\n return;\n options.panel.renderError(errorCode(error));\n }\n };\n const refreshStatus = async (revision: number): Promise<void> => {\n if (current === undefined) {\n await refreshCapability(revision);\n return;\n }\n\n try {\n const result = await client.status(current.handoff.cursor);\n if (lifecycle.disposed || revision !== lifecycle.operation) return;\n current = result;\n options.panel.renderStatus(result);\n } catch (error: unknown) {\n if (\n lifecycle.disposed ||\n revision !== lifecycle.operation ||\n (error instanceof DOMException && error.name === \"AbortError\")\n )\n return;\n options.panel.renderError(errorCode(error));\n }\n };\n const scheduleRefresh = (delay: number, continueWhilePending: boolean): void => {\n const revision = lifecycle.operation;\n const timer = options.window.setTimeout(() => {\n timers.delete(timer);\n void refreshStatus(revision).then(() => {\n if (\n continueWhilePending &&\n !lifecycle.disposed &&\n revision === lifecycle.operation &&\n !lifecycle.userActionPending &&\n current !== undefined &&\n dispatchIsPending(current.dispatch)\n ) {\n scheduleRefresh(\n EXTERNAL_HANDOFF_LIMITS.activeStatusPollMs,\n continueWhilePending,\n );\n }\n });\n }, delay);\n timers.add(timer);\n };\n const handleSend = async (): Promise<void> => {\n if (lifecycle.userActionPending) return;\n lifecycle.userActionPending = true;\n let pending = retryablePublish;\n\n if (pending === undefined) {\n const annotation = options.selectedAnnotation();\n if (annotation === undefined) {\n lifecycle.userActionPending = false;\n options.panel.renderError(ERROR_CODES.HANDOFF_VALIDATION_FAILED);\n return;\n }\n\n const disclosureRevision = lifecycle.operation;\n options.panel.setBusy(true);\n const confirmed = await options.panel.confirmDisclosure(annotation);\n if (!confirmed || disclosureRevision !== lifecycle.operation) {\n lifecycle.userActionPending = false;\n options.panel.setBusy(false);\n return;\n }\n\n pending = Object.freeze({\n annotation,\n requestId: createRequestId(options.window),\n });\n }\n\n retryablePublish = pending;\n lifecycle.operation += 1;\n const revision = lifecycle.operation;\n clearTimers();\n client.cancel();\n options.panel.renderPublishing();\n\n try {\n const result = await client.publish(pending.requestId, pending.annotation);\n if (revision !== lifecycle.operation) return;\n retryablePublish = undefined;\n current = Object.freeze({\n handoff: result.handoff,\n activeAdapter:\n result.delivery.mode === \"active\" ? result.delivery.adapter : null,\n dispatch: result.delivery.mode === \"active\" ? result.delivery.dispatch : null,\n });\n options.panel.renderPublishResult(result);\n scheduleRefresh(\n result.delivery.mode === \"active\"\n ? EXTERNAL_HANDOFF_LIMITS.activeStatusPollMs\n : 500,\n result.delivery.mode === \"active\",\n );\n } catch (error: unknown) {\n if (\n revision !== lifecycle.operation ||\n (error instanceof DOMException && error.name === \"AbortError\")\n )\n return;\n const code = errorCode(error);\n const retryable = code === undefined;\n if (!retryable) retryablePublish = undefined;\n options.panel.renderError(code, retryable);\n } finally {\n if (revision === lifecycle.operation) {\n lifecycle.userActionPending = false;\n options.panel.setBusy(false);\n }\n }\n };\n const handleRefresh = async (): Promise<void> => {\n if (lifecycle.userActionPending) return;\n lifecycle.userActionPending = true;\n lifecycle.operation += 1;\n const revision = lifecycle.operation;\n clearTimers();\n client.cancel();\n options.panel.setBusy(true);\n\n try {\n await refreshStatus(revision);\n } finally {\n if (!lifecycle.disposed && revision === lifecycle.operation) {\n lifecycle.userActionPending = false;\n options.panel.setBusy(false);\n }\n }\n };\n const handleResolveDelivery = async (): Promise<void> => {\n if (\n lifecycle.userActionPending ||\n current === undefined ||\n current.dispatch?.phase !== \"delivery-unknown\"\n ) {\n return;\n }\n\n lifecycle.userActionPending = true;\n lifecycle.operation += 1;\n const revision = lifecycle.operation;\n clearTimers();\n client.cancel();\n options.panel.setBusy(true);\n\n try {\n const result = await client.resolveDelivery(current.handoff.cursor);\n if (lifecycle.disposed || revision !== lifecycle.operation) return;\n current = result;\n options.panel.renderStatus(result);\n } catch (error: unknown) {\n if (\n lifecycle.disposed ||\n revision !== lifecycle.operation ||\n (error instanceof DOMException && error.name === \"AbortError\")\n ) {\n return;\n }\n options.panel.renderError(errorCode(error));\n } finally {\n if (!lifecycle.disposed && revision === lifecycle.operation) {\n lifecycle.userActionPending = false;\n options.panel.setBusy(false);\n }\n }\n };\n const handleSendClick = (): void => {\n void handleSend();\n };\n const handleRefreshClick = (): void => {\n void handleRefresh();\n };\n const handleResolveClick = (): void => {\n void handleResolveDelivery();\n };\n const cancelPending = (): void => {\n lifecycle.operation += 1;\n lifecycle.userActionPending = false;\n retryablePublish = undefined;\n clearTimers();\n client.cancel();\n restorePanel();\n if (capability === undefined && lifecycle.mounted && !lifecycle.disposed) {\n void refreshCapability(lifecycle.operation);\n }\n };\n\n return Object.freeze({\n mount(): void {\n if (lifecycle.mounted || lifecycle.disposed) return;\n lifecycle.mounted = true;\n options.panel.sendButton.addEventListener(\"click\", handleSendClick);\n options.panel.refreshButton.addEventListener(\"click\", handleRefreshClick);\n options.panel.resolveButton.addEventListener(\"click\", handleResolveClick);\n void refreshCapability(lifecycle.operation);\n },\n cancelPending,\n dispose(): void {\n if (lifecycle.disposed) return;\n lifecycle.disposed = true;\n lifecycle.operation += 1;\n lifecycle.userActionPending = false;\n retryablePublish = undefined;\n clearTimers();\n client.cancel();\n options.panel.sendButton.removeEventListener(\"click\", handleSendClick);\n options.panel.refreshButton.removeEventListener(\"click\", handleRefreshClick);\n options.panel.resolveButton.removeEventListener(\"click\", handleResolveClick);\n },\n });\n}\n","import type {\n ActiveAdapterSummary,\n DispatchSummary,\n ErrorCode,\n ExternalHandoffCapability,\n ExternalHandoffPublishResult,\n ExternalHandoffStatusResult,\n ExternalHandoffSummary,\n SpotAnnotation,\n SpotPatchLocale,\n} from \"@spotpatch/shared/external-handoff-browser\";\n\nimport { createButton, createMarkedElement } from \"./dom.js\";\nimport type { ExternalHandoffPanel } from \"./external-handoff-contract.js\";\n\ninterface PanelOptions {\n readonly document: Document;\n readonly framework: \"vite\" | \"next\";\n readonly locale: () => SpotPatchLocale;\n readonly onViewChange: () => void;\n readonly sessionId: string;\n readonly subscribeLocale: (listener: () => void) => () => void;\n}\n\ninterface ExternalHandoffMessages {\n readonly activeReady: (agent: string) => string;\n readonly cancel: string;\n readonly confirm: string;\n readonly completed: (agent: string, revision: number) => string;\n readonly description: string;\n readonly dispatched: (agent: string, revision: number) => string;\n readonly dispatching: (agent: string, revision: number) => string;\n readonly disclosureData: string;\n readonly disclosureInbox: string;\n readonly disclosureIntro: (targets: number, files: number) => string;\n readonly disclosureNoGuarantee: string;\n readonly disclosureProvider: string;\n readonly disclosureTitle: string;\n readonly error: (code?: ErrorCode) => string;\n readonly expired: (revision: number) => string;\n readonly failed: (agent: string, revision: number) => string;\n readonly inboxSend: string;\n readonly pickedUp: (revision: number, count: number, time?: string) => string;\n readonly published: (revision: number, expiresAt: string) => string;\n readonly publishing: string;\n readonly queued: (agent: string, revision: number) => string;\n readonly ready: string;\n readonly readyWaiting: (count: number) => string;\n readonly refresh: string;\n readonly resolveUnknown: string;\n readonly retry: string;\n readonly send: string;\n readonly settingsHelp: string;\n readonly settingsTitle: string;\n readonly superseded: (revision: number) => string;\n readonly title: string;\n readonly unknown: (agent: string, revision: number) => string;\n readonly unknownResolved: (agent: string, revision: number) => string;\n readonly working: (agent: string, revision: number) => string;\n}\n\nconst MESSAGES = Object.freeze({\n \"en-US\": Object.freeze({\n title: \"External Agent connection\",\n description:\n \"Send through a ready active adapter, or publish to the project Agent inbox when no active adapter is connected.\",\n ready:\n \"Local Broker ready. No Agent connection is assumed until a connector reads or waits.\",\n readyWaiting: (count: number) =>\n `${String(count)} active connector wait request(s); publishing can wake them immediately.`,\n activeReady: (agent: string) =>\n `${agent} is connected and idle. The next send will dispatch immediately.`,\n publishing: \"Authorizing current source and publishing the handoff…\",\n published: (revision: number, expiresAt: string) =>\n `Revision ${String(revision)} is available until ${expiresAt}. It has not been claimed as edited.`,\n queued: (agent: string, revision: number) =>\n `Revision ${String(revision)} is reserved for ${agent}.`,\n dispatching: (agent: string, revision: number) =>\n `Dispatching revision ${String(revision)} to ${agent}…`,\n dispatched: (agent: string, revision: number) =>\n agent === \"Claude Code\"\n ? `Revision ${String(revision)} was written to the Claude Channel transport; there is no model ACK yet.`\n : `Codex App Server accepted revision ${String(revision)}; waiting for the matching turn to start.`,\n working: (agent: string, revision: number) =>\n `${agent} is working on revision ${String(revision)}.`,\n completed: (agent: string, revision: number) =>\n `${agent} ended revision ${String(revision)} normally. Review the diff and checks; this does not prove the requested change is correct.`,\n failed: (agent: string, revision: number) =>\n `${agent} reported revision ${String(revision)} as failed. The connector is idle again.`,\n unknown: (agent: string, revision: number) =>\n `Delivery of revision ${String(revision)} to ${agent} is uncertain. The managed writer stopped; review the workspace before allowing another task.`,\n unknownResolved: (agent: string, revision: number) =>\n `Revision ${String(revision)} for ${agent} remains delivery-unknown, but the workspace review was confirmed. A new connector or inbox task may now be used.`,\n pickedUp: (revision: number, count: number, time?: string) =>\n `Revision ${String(revision)} was picked up by ${String(count)} connector instance(s)${time === undefined ? \".\" : `; last pickup ${time}.`} This does not prove a code change.`,\n expired: (revision: number) =>\n `Revision ${String(revision)} expired. Review the current selection and publish again.`,\n superseded: (revision: number) =>\n `Revision ${String(revision)} was superseded by a newer handoff.`,\n send: \"Send to Agent\",\n inboxSend: \"Publish to Agent inbox\",\n retry: \"Retry same send\",\n refresh: \"Refresh pickup status\",\n resolveUnknown: \"Workspace reviewed — allow a new task\",\n settingsTitle: \"Project connection setup\",\n settingsHelp:\n \"Setup commands are project-scoped dry runs; append --write only after review. Claude active mode also needs the shown Research Preview launch flag. Codex active mode is zero-setup: run its explicit connector command and keep it open.\",\n disclosureTitle: \"Confirm external Agent handoff\",\n disclosureIntro: (targets: number, files: number) =>\n `Publish ${String(targets)} selected target(s) referencing ${String(files)} relative file(s).`,\n disclosureData:\n \"The handoff includes your instructions, component/page context, sanitized DOM/CSS, and bounded source read again by the local Node service.\",\n disclosureInbox:\n \"Any SpotPatch connector configured for this project may read it during the 15-minute lifetime.\",\n disclosureProvider:\n \"The Agent host may send the content to its cloud provider under that product's data policy.\",\n disclosureNoGuarantee:\n \"External edits do not receive SpotPatch's built-in worktree, Apply, or Revert guarantees.\",\n cancel: \"Cancel\",\n confirm: \"Confirm and send\",\n error: (code?: ErrorCode) =>\n code === \"EXTERNAL_AGENT_BUSY\"\n ? \"The active Agent is still busy or blocked by an uncertain delivery.\"\n : code === \"ACTIVE_DISPATCH_INVALID\"\n ? \"The active delivery state changed. Refresh before continuing.\"\n : code === \"HANDOFF_SOURCE_STALE\"\n ? \"The selected source changed. Select the current component again.\"\n : code === \"HANDOFF_RESPONSE_TOO_LARGE\"\n ? \"The handoff is too large. Reduce the selected context.\"\n : code === \"EXTERNAL_HANDOFF_DISABLED\"\n ? \"External Agent handoff is disabled in trusted project configuration.\"\n : code === \"EXTERNAL_HANDOFF_UNAVAILABLE\" || code === \"SESSION_CLOSED\"\n ? \"The local external Agent Broker is unavailable. Restart the development server.\"\n : \"The external Agent handoff request failed without publishing a partial revision.\",\n }),\n \"zh-CN\": Object.freeze({\n title: \"外部 Agent 连接\",\n description:\n \"有主动适配器就立即派发;未连接主动适配器时,诚实降级为项目 Agent 收件箱。\",\n ready: \"本地 Broker 已就绪。只有连接器读取或等待后,才能证明发生过连接。\",\n readyWaiting: (count: number) =>\n `当前有 ${String(count)} 个连接器等待请求,发布后可立即唤醒。`,\n activeReady: (agent: string) =>\n `${agent} 已连接并处于空闲状态,下次发送会立即派发。`,\n publishing: \"正在重新授权当前源码并发布交接……\",\n published: (revision: number, expiresAt: string) =>\n `交接 revision ${String(revision)} 可读取至 ${expiresAt};这不表示代码已被修改。`,\n queued: (agent: string, revision: number) =>\n `交接 revision ${String(revision)} 已为 ${agent} 预留。`,\n dispatching: (agent: string, revision: number) =>\n `正在把 revision ${String(revision)} 派发给 ${agent}……`,\n dispatched: (agent: string, revision: number) =>\n agent === \"Claude Code\"\n ? `revision ${String(revision)} 已写入 Claude Channel transport;当前没有模型 ACK。`\n : `Codex App Server 已接受 revision ${String(revision)},正在等待匹配 turn 启动。`,\n working: (agent: string, revision: number) =>\n `${agent} 正在处理 revision ${String(revision)}。`,\n completed: (agent: string, revision: number) =>\n `${agent} 已正常结束 revision ${String(revision)}。请核对 diff 和检查结果;这不证明修改要求已经正确完成。`,\n failed: (agent: string, revision: number) =>\n `${agent} 已将 revision ${String(revision)} 报告为失败,连接器已恢复空闲。`,\n unknown: (agent: string, revision: number) =>\n `revision ${String(revision)} 向 ${agent} 的投递结果不确定。受管 writer 已停止,请先核对工作区再允许新任务。`,\n unknownResolved: (agent: string, revision: number) =>\n `${agent} 的 revision ${String(revision)} 仍记为投递未知,但工作区核对已经确认;现在可以重新连接或发布新的收件箱任务。`,\n pickedUp: (revision: number, count: number, time?: string) =>\n `交接 revision ${String(revision)} 已被 ${String(count)} 个连接器实例取走${time === undefined ? \"。\" : `,最近取件于 ${time}。`}这不能证明代码已经修改。`,\n expired: (revision: number) =>\n `交接 revision ${String(revision)} 已过期,请核对当前选择后重新发布。`,\n superseded: (revision: number) =>\n `交接 revision ${String(revision)} 已被更新版本取代。`,\n send: \"发送给 Agent\",\n inboxSend: \"发布到 Agent 收件箱\",\n retry: \"重试同一次发送\",\n refresh: \"刷新取件状态\",\n resolveUnknown: \"已核对工作区,允许新任务\",\n settingsTitle: \"项目连接设置\",\n settingsHelp:\n \"setup 命令均为项目级 dry-run,核对后才追加 --write。Claude 主动模式还需使用下方 Research Preview 启动参数;Codex 主动模式无需 setup,只需显式启动并保持 Connector 命令运行。\",\n disclosureTitle: \"确认发布到外部 Agent\",\n disclosureIntro: (targets: number, files: number) =>\n `将发布 ${String(targets)} 个目标,涉及 ${String(files)} 个项目相对文件。`,\n disclosureData:\n \"交接包含修改说明、组件与页面上下文、已清洗的 DOM/CSS,以及本地 Node 服务重新读取的有界源码。\",\n disclosureInbox:\n \"15 分钟有效期内,本项目中任何已配置的 SpotPatch Connector 都可能读取。\",\n disclosureProvider: \"Agent 宿主可能依据其产品数据策略,将内容发送给云端模型服务。\",\n disclosureNoGuarantee:\n \"外部修改不具备 SpotPatch 内建 Agent 的 worktree、Apply 或 Revert 保证。\",\n cancel: \"取消\",\n confirm: \"确认并发送\",\n error: (code?: ErrorCode) =>\n code === \"EXTERNAL_AGENT_BUSY\"\n ? \"主动 Agent 仍在工作,或存在尚未核对的投递未知状态。\"\n : code === \"ACTIVE_DISPATCH_INVALID\"\n ? \"主动投递状态已经变化,请刷新后再继续。\"\n : code === \"HANDOFF_SOURCE_STALE\"\n ? \"选中源码已经变化,请重新选择当前组件。\"\n : code === \"HANDOFF_RESPONSE_TOO_LARGE\"\n ? \"交接内容超过上限,请减少所选上下文。\"\n : code === \"EXTERNAL_HANDOFF_DISABLED\"\n ? \"可信项目配置没有启用外部 Agent 交接。\"\n : code === \"EXTERNAL_HANDOFF_UNAVAILABLE\" || code === \"SESSION_CLOSED\"\n ? \"本地外部 Agent Broker 不可用,请重启开发服务。\"\n : \"外部 Agent 交接请求失败,未发布任何部分 revision。\",\n }),\n}) satisfies Readonly<Record<SpotPatchLocale, ExternalHandoffMessages>>;\n\nfunction createStyles(document: Document): HTMLStyleElement {\n const styles = document.createElement(\"style\");\n styles.textContent = `\n .spotpatch-external-handoff { margin-top: 12px; padding: 12px; border: 1px solid var(--spotpatch-border); border-radius: var(--spotpatch-radius-card); background: rgb(82 168 255 / 5%); }\n .spotpatch-external-handoff[hidden] { display: none; }\n .spotpatch-external-heading { display: flex; align-items: center; justify-content: space-between; gap: 8px; }\n .spotpatch-external-heading strong { font-size: 12px; font-weight: 680; color: var(--spotpatch-text); }\n .spotpatch-external-description, .spotpatch-external-status, .spotpatch-external-settings p { margin: 6px 0 0; font-size: 11px; line-height: 1.5; color: var(--spotpatch-text-secondary); }\n .spotpatch-external-status { padding-left: 10px; border-left: 2px solid var(--spotpatch-accent-cyan); color: #cbd5e1; }\n .spotpatch-external-status[data-state=\"error\"] { border-color: var(--spotpatch-danger); color: #fecdd3; }\n .spotpatch-external-status[data-state=\"picked-up\"] { border-color: var(--spotpatch-success); color: #a7f3d0; }\n .spotpatch-external-settings { margin-top: 9px; }\n .spotpatch-external-settings summary { cursor: pointer; color: #c4b5fd; font-size: 11px; }\n .spotpatch-external-command { display: block; margin-top: 6px; padding: 6px 8px; overflow: auto; border-radius: 6px; background: var(--spotpatch-bg-input); color: #d8d6ff; font: 10px/1.45 ui-monospace, SFMono-Regular, Menlo, monospace; white-space: nowrap; }\n .spotpatch-external-refresh { padding: 3px 7px; border: 1px solid var(--spotpatch-border); border-radius: 6px; background: transparent; color: var(--spotpatch-text-secondary); font: inherit; font-size: 10px; cursor: pointer; }\n .spotpatch-external-refresh:disabled { cursor: default; opacity: .45; }\n .spotpatch-external-resolve { margin-top: 8px; padding: 6px 8px; border: 1px solid #f59e0b; border-radius: 6px; background: rgb(245 158 11 / 10%); color: #fde68a; font: inherit; font-size: 10px; cursor: pointer; }\n .spotpatch-external-resolve[hidden] { display: none; }\n .spotpatch-external-resolve:disabled { cursor: default; opacity: .45; }\n .spotpatch-external-disclosure { position: fixed; inset: 0; z-index: 4; display: grid; place-items: center; padding: 20px; background: rgb(3 3 8 / 72%); backdrop-filter: blur(3px); }\n .spotpatch-external-disclosure[hidden] { display: none; }\n .spotpatch-external-disclosure-card { width: min(420px, calc(100vw - 40px)); max-height: calc(100vh - 40px); overflow: auto; padding: 18px; border: 1px solid rgb(139 123 255 / 55%); border-radius: 14px; background: var(--spotpatch-bg-raised); box-shadow: var(--spotpatch-shadow-panel); }\n .spotpatch-external-disclosure-card h3 { margin: 0; color: var(--spotpatch-text); font-size: 15px; }\n .spotpatch-external-disclosure-card p { margin: 9px 0 0; color: #c4c7d0; font-size: 11.5px; line-height: 1.55; }\n .spotpatch-external-files { max-height: 96px; overflow: auto; color: #a5b4fc; font: 10px/1.5 ui-monospace, SFMono-Regular, Menlo, monospace; white-space: pre-wrap; }\n .spotpatch-external-disclosure-actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 15px; }\n .spotpatch-external-disclosure-actions button { padding: 7px 10px; border: 1px solid var(--spotpatch-border); border-radius: 7px; background: var(--spotpatch-bg-active); color: var(--spotpatch-text); font: inherit; cursor: pointer; }\n .spotpatch-external-disclosure-actions .spotpatch-primary { border-color: transparent; background: var(--spotpatch-accent); color: var(--spotpatch-text-on-accent); }\n `;\n return styles;\n}\n\nfunction formatTime(value: string, locale: SpotPatchLocale): string {\n const date = new Date(value);\n return Number.isNaN(date.valueOf())\n ? value\n : new Intl.DateTimeFormat(locale, {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n }).format(date);\n}\n\nfunction agentName(kind: ActiveAdapterSummary[\"kind\"]): string {\n return kind === \"claude-channel\" ? \"Claude Code\" : \"Codex\";\n}\n\nfunction dispatchMessage(\n messages: ExternalHandoffMessages,\n dispatch: DispatchSummary,\n): string {\n const agent = agentName(dispatch.adapterKind);\n\n if (dispatch.phase === \"queued\") {\n return messages.queued(agent, dispatch.revision);\n }\n if (dispatch.phase === \"dispatching\") {\n return messages.dispatching(agent, dispatch.revision);\n }\n if (dispatch.phase === \"dispatched\") {\n return messages.dispatched(agent, dispatch.revision);\n }\n if (dispatch.phase === \"working\") {\n return messages.working(agent, dispatch.revision);\n }\n if (dispatch.phase === \"completed\") {\n return messages.completed(agent, dispatch.revision);\n }\n if (dispatch.phase === \"failed\") {\n return messages.failed(agent, dispatch.revision);\n }\n return messages.unknown(agent, dispatch.revision);\n}\n\nfunction disclosurePaths(annotation: SpotAnnotation): readonly string[] {\n return Object.freeze([\n ...new Set(\n annotation.targets.flatMap((target) => {\n const relativePath = target.code?.relativePath ?? target.source.relativePath;\n return relativePath === undefined ? [] : [relativePath];\n }),\n ),\n ]);\n}\n\nexport function createExternalHandoffPanel(\n document: Document,\n framework: \"vite\" | \"next\",\n locale: () => SpotPatchLocale,\n sessionId: string,\n subscribeLocale: (listener: () => void) => () => void,\n onViewChange: () => void,\n): ExternalHandoffPanel {\n const options: PanelOptions = {\n document,\n framework,\n locale,\n onViewChange,\n sessionId,\n subscribeLocale,\n };\n let messages = MESSAGES[options.locale()];\n let activeAdapter: ActiveAdapterSummary | null = null;\n let brokerReady = false;\n let dispatchBlocksSend = false;\n let operationBusy = false;\n let retryable = false;\n let unknownDelivery = false;\n let contextReady = false;\n let visible = false;\n let pendingDisclosure: ((confirmed: boolean) => void) | undefined;\n let previousFocus: HTMLElement | undefined;\n const consentKey = `spotpatch:external-handoff-consent:${options.sessionId}`;\n const root = createMarkedElement(document, \"section\");\n root.className = \"spotpatch-external-handoff\";\n root.hidden = true;\n const heading = createMarkedElement(document, \"div\");\n heading.className = \"spotpatch-external-heading\";\n const title = createMarkedElement(document, \"strong\");\n const refreshButton = createButton(document, \"\", \"spotpatch-external-refresh\");\n heading.append(title, refreshButton);\n const description = createMarkedElement(document, \"p\");\n description.className = \"spotpatch-external-description\";\n const status = createMarkedElement(document, \"p\");\n status.className = \"spotpatch-external-status\";\n status.setAttribute(\"role\", \"status\");\n status.setAttribute(\"aria-live\", \"polite\");\n const resolveButton = createButton(document, \"\", \"spotpatch-external-resolve\");\n resolveButton.hidden = true;\n const settings = createMarkedElement(document, \"details\");\n settings.className = \"spotpatch-external-settings\";\n const settingsTitle = createMarkedElement(document, \"summary\");\n const settingsHelp = createMarkedElement(document, \"p\");\n const cliPrefix = `node ./node_modules/@spotpatch/${options.framework}/dist/cli.js`;\n const bridgePrefix = `${cliPrefix} bridge`;\n const commands = [\n `${bridgePrefix} setup --client claude --scope project --mode active`,\n \"MCP_PROTOCOL_NEGOTIATION=legacy claude --dangerously-load-development-channels server:spotpatch\",\n `${cliPrefix} connect codex --allow-workspace-write`,\n `${bridgePrefix} setup --client cursor --scope project`,\n ].map((value) => {\n const command = createMarkedElement(document, \"code\");\n command.className = \"spotpatch-external-command\";\n command.textContent = value;\n return command;\n });\n settings.append(settingsTitle, settingsHelp, ...commands);\n root.append(heading, description, status, resolveButton, settings);\n\n const sendButton = createButton(document, \"\", \"spotpatch-primary\");\n sendButton.hidden = true;\n const disclosure = createMarkedElement(document, \"div\");\n disclosure.className = \"spotpatch-external-disclosure\";\n disclosure.hidden = true;\n const disclosureCard = createMarkedElement(document, \"section\");\n disclosureCard.className = \"spotpatch-external-disclosure-card\";\n disclosureCard.tabIndex = -1;\n disclosureCard.setAttribute(\"role\", \"alertdialog\");\n disclosureCard.setAttribute(\"aria-modal\", \"true\");\n const disclosureTitle = createMarkedElement(document, \"h3\");\n const disclosureIntro = createMarkedElement(document, \"p\");\n const disclosureFiles = createMarkedElement(document, \"p\");\n disclosureFiles.className = \"spotpatch-external-files\";\n const disclosureData = createMarkedElement(document, \"p\");\n const disclosureInbox = createMarkedElement(document, \"p\");\n const disclosureProvider = createMarkedElement(document, \"p\");\n const disclosureNoGuarantee = createMarkedElement(document, \"p\");\n const disclosureActions = createMarkedElement(document, \"div\");\n disclosureActions.className = \"spotpatch-external-disclosure-actions\";\n const cancelButton = createButton(document, \"\");\n const confirmButton = createButton(document, \"\", \"spotpatch-primary\");\n disclosureActions.append(cancelButton, confirmButton);\n disclosureCard.append(\n disclosureTitle,\n disclosureIntro,\n disclosureFiles,\n disclosureData,\n disclosureInbox,\n disclosureProvider,\n disclosureNoGuarantee,\n disclosureActions,\n );\n disclosure.append(disclosureCard);\n root.append(disclosure);\n\n const hasConsent = (): boolean => {\n try {\n return document.defaultView?.sessionStorage.getItem(consentKey) === \"confirmed\";\n } catch {\n return false;\n }\n };\n const rememberConsent = (): void => {\n try {\n document.defaultView?.sessionStorage.setItem(consentKey, \"confirmed\");\n } catch {\n // A blocked storage API only means the disclosure is shown again next time.\n }\n };\n const refreshActions = (): void => {\n sendButton.textContent = retryable\n ? messages.retry\n : activeAdapter?.canDispatch === true\n ? messages.send\n : messages.inboxSend;\n sendButton.disabled =\n !visible ||\n !brokerReady ||\n !contextReady ||\n operationBusy ||\n (!retryable && dispatchBlocksSend);\n sendButton.setAttribute(\"aria-busy\", String(operationBusy));\n refreshButton.disabled = !visible || operationBusy;\n resolveButton.hidden = !unknownDelivery;\n resolveButton.disabled = !visible || operationBusy || !unknownDelivery;\n };\n const settleDisclosure = (confirmed: boolean): void => {\n if (pendingDisclosure === undefined) return;\n const resolve = pendingDisclosure;\n pendingDisclosure = undefined;\n disclosure.hidden = true;\n if (confirmed) rememberConsent();\n previousFocus?.focus({ preventScroll: true });\n previousFocus = undefined;\n resolve(confirmed);\n options.onViewChange();\n };\n const handleDisclosureKeydown = (event: KeyboardEvent): void => {\n if (event.key === \"Escape\") {\n event.preventDefault();\n settleDisclosure(false);\n return;\n }\n\n if (event.key !== \"Tab\") return;\n const first = cancelButton;\n const last = confirmButton;\n const rootNode = disclosure.getRootNode();\n const activeElement =\n \"activeElement\" in rootNode ? rootNode.activeElement : document.activeElement;\n\n if (event.shiftKey && activeElement === first) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && activeElement === last) {\n event.preventDefault();\n first.focus();\n }\n };\n const applyMessages = (): void => {\n messages = MESSAGES[options.locale()];\n title.textContent = messages.title;\n description.textContent = messages.description;\n refreshButton.textContent = messages.refresh;\n refreshButton.title = messages.refresh;\n settingsTitle.textContent = messages.settingsTitle;\n settingsHelp.textContent = messages.settingsHelp;\n disclosureTitle.textContent = messages.disclosureTitle;\n disclosureData.textContent = messages.disclosureData;\n disclosureInbox.textContent = messages.disclosureInbox;\n disclosureProvider.textContent = messages.disclosureProvider;\n disclosureNoGuarantee.textContent = messages.disclosureNoGuarantee;\n cancelButton.textContent = messages.cancel;\n confirmButton.textContent = messages.confirm;\n resolveButton.textContent = messages.resolveUnknown;\n refreshActions();\n };\n\n cancelButton.addEventListener(\"click\", () => {\n settleDisclosure(false);\n });\n confirmButton.addEventListener(\"click\", () => {\n settleDisclosure(true);\n });\n disclosure.addEventListener(\"keydown\", handleDisclosureKeydown);\n settings.addEventListener(\"toggle\", options.onViewChange);\n const unsubscribeLocale = options.subscribeLocale(applyMessages);\n applyMessages();\n status.textContent = messages.ready;\n refreshActions();\n\n const summaryMessage = (summary: ExternalHandoffSummary): string =>\n summary.state === \"expired\"\n ? messages.expired(summary.revision)\n : summary.state === \"superseded\"\n ? messages.superseded(summary.revision)\n : summary.pickupCount > 0\n ? messages.pickedUp(\n summary.revision,\n summary.pickupCount,\n summary.pickedUpAt === undefined\n ? undefined\n : formatTime(summary.pickedUpAt, options.locale()),\n )\n : messages.published(\n summary.revision,\n formatTime(summary.expiresAt, options.locale()),\n );\n\n const applyStatus = (result: ExternalHandoffStatusResult): void => {\n operationBusy = false;\n retryable = false;\n activeAdapter = result.activeAdapter;\n unknownDelivery =\n result.dispatch?.phase === \"delivery-unknown\" &&\n result.activeAdapter?.state === \"blocked\";\n dispatchBlocksSend =\n unknownDelivery ||\n (result.activeAdapter !== null && !result.activeAdapter.canDispatch);\n\n if (result.dispatch !== null) {\n status.dataset.state = result.dispatch.phase;\n status.textContent =\n result.dispatch.phase === \"delivery-unknown\" && !unknownDelivery\n ? messages.unknownResolved(\n agentName(result.dispatch.adapterKind),\n result.dispatch.revision,\n )\n : dispatchMessage(messages, result.dispatch);\n } else {\n status.dataset.state =\n result.handoff.state === \"available\" && result.handoff.pickupCount > 0\n ? \"picked-up\"\n : result.handoff.state;\n status.textContent = summaryMessage(result.handoff);\n }\n\n refreshActions();\n options.onViewChange();\n };\n\n return Object.freeze({\n root,\n styles: createStyles(document),\n sendButton,\n refreshButton,\n resolveButton,\n\n confirmDisclosure(annotation: SpotAnnotation): Promise<boolean> {\n if (hasConsent()) return Promise.resolve(true);\n if (pendingDisclosure !== undefined) return Promise.resolve(false);\n const paths = disclosurePaths(annotation);\n disclosureIntro.textContent = messages.disclosureIntro(\n annotation.targets.length,\n paths.length,\n );\n disclosureFiles.textContent = paths.length === 0 ? \"—\" : paths.join(\"\\n\");\n disclosure.hidden = false;\n const rootNode = root.getRootNode();\n const activeElement =\n \"activeElement\" in rootNode ? rootNode.activeElement : document.activeElement;\n previousFocus = activeElement instanceof HTMLElement ? activeElement : undefined;\n options.onViewChange();\n disclosureCard.focus({ preventScroll: true });\n\n return new Promise<boolean>((resolve) => {\n pendingDisclosure = resolve;\n });\n },\n\n renderCapability(capability: ExternalHandoffCapability): void {\n brokerReady = capability.brokerReady;\n operationBusy = false;\n retryable = false;\n activeAdapter = capability.activeAdapter;\n unknownDelivery = false;\n dispatchBlocksSend =\n capability.activeAdapter !== null && !capability.activeAdapter.canDispatch;\n status.dataset.state = capability.brokerReady ? \"ready\" : \"error\";\n status.textContent = capability.brokerReady\n ? capability.activeAdapter?.canDispatch === true\n ? messages.activeReady(agentName(capability.activeAdapter.kind))\n : capability.dispatch !== null && capability.activeAdapter !== null\n ? dispatchMessage(messages, capability.dispatch)\n : capability.activeWaitCount > 0\n ? messages.readyWaiting(capability.activeWaitCount)\n : messages.ready\n : messages.error(\"EXTERNAL_HANDOFF_UNAVAILABLE\");\n refreshActions();\n options.onViewChange();\n },\n\n renderPublishing(): void {\n operationBusy = true;\n retryable = false;\n status.dataset.state = \"publishing\";\n status.textContent = messages.publishing;\n refreshActions();\n options.onViewChange();\n },\n\n renderPublishResult(result: ExternalHandoffPublishResult): void {\n applyStatus(\n Object.freeze({\n handoff: result.handoff,\n activeAdapter:\n result.delivery.mode === \"active\" ? result.delivery.adapter : null,\n dispatch: result.delivery.mode === \"active\" ? result.delivery.dispatch : null,\n }),\n );\n },\n\n renderStatus(result: ExternalHandoffStatusResult): void {\n applyStatus(result);\n },\n\n renderError(code?: ErrorCode, canRetry = false): void {\n operationBusy = false;\n retryable = canRetry;\n if (code === \"EXTERNAL_AGENT_BUSY\") dispatchBlocksSend = true;\n status.dataset.state = \"error\";\n status.textContent = canRetry\n ? `${messages.error(code)} ${messages.retry}.`\n : messages.error(code);\n refreshActions();\n options.onViewChange();\n },\n\n setBusy(nextBusy: boolean): void {\n operationBusy = nextBusy;\n refreshActions();\n },\n\n setContextReady(ready: boolean): void {\n contextReady = ready;\n refreshActions();\n },\n\n setSelectionVisible(nextVisible: boolean): void {\n visible = nextVisible;\n root.hidden = !nextVisible;\n sendButton.hidden = !nextVisible;\n if (!nextVisible) settleDisclosure(false);\n refreshActions();\n },\n\n dispose(): void {\n settleDisclosure(false);\n disclosure.removeEventListener(\"keydown\", handleDisclosureKeydown);\n settings.removeEventListener(\"toggle\", options.onViewChange);\n unsubscribeLocale();\n },\n });\n}\n"],"mappings":"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","names":[]}
|