@agent-native/core 0.59.0 → 0.60.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.
Files changed (220) hide show
  1. package/dist/a2a/index.d.ts +2 -0
  2. package/dist/a2a/index.d.ts.map +1 -1
  3. package/dist/a2a/index.js +1 -0
  4. package/dist/a2a/index.js.map +1 -1
  5. package/dist/a2a/invoke.d.ts +63 -0
  6. package/dist/a2a/invoke.d.ts.map +1 -0
  7. package/dist/a2a/invoke.js +157 -0
  8. package/dist/a2a/invoke.js.map +1 -0
  9. package/dist/agent/run-store.d.ts +15 -0
  10. package/dist/agent/run-store.d.ts.map +1 -1
  11. package/dist/agent/run-store.js +28 -0
  12. package/dist/agent/run-store.js.map +1 -1
  13. package/dist/chat-threads/store.d.ts +21 -0
  14. package/dist/chat-threads/store.d.ts.map +1 -1
  15. package/dist/chat-threads/store.js +128 -0
  16. package/dist/chat-threads/store.js.map +1 -1
  17. package/dist/cli/agent.d.ts +23 -0
  18. package/dist/cli/agent.d.ts.map +1 -0
  19. package/dist/cli/agent.js +300 -0
  20. package/dist/cli/agent.js.map +1 -0
  21. package/dist/cli/agents.d.ts +14 -0
  22. package/dist/cli/agents.d.ts.map +1 -0
  23. package/dist/cli/agents.js +95 -0
  24. package/dist/cli/agents.js.map +1 -0
  25. package/dist/cli/code-agent-executor.d.ts.map +1 -1
  26. package/dist/cli/code-agent-executor.js +264 -2
  27. package/dist/cli/code-agent-executor.js.map +1 -1
  28. package/dist/cli/create.d.ts +3 -2
  29. package/dist/cli/create.d.ts.map +1 -1
  30. package/dist/cli/create.js +154 -83
  31. package/dist/cli/create.js.map +1 -1
  32. package/dist/cli/index.js +50 -2
  33. package/dist/cli/index.js.map +1 -1
  34. package/dist/cli/invoke.d.ts +26 -0
  35. package/dist/cli/invoke.d.ts.map +1 -0
  36. package/dist/cli/invoke.js +227 -0
  37. package/dist/cli/invoke.js.map +1 -0
  38. package/dist/cli/templates-meta.d.ts +1 -1
  39. package/dist/cli/templates-meta.d.ts.map +1 -1
  40. package/dist/cli/templates-meta.js +9 -8
  41. package/dist/cli/templates-meta.js.map +1 -1
  42. package/dist/cli/workspacify.d.ts +1 -1
  43. package/dist/cli/workspacify.d.ts.map +1 -1
  44. package/dist/cli/workspacify.js +6 -6
  45. package/dist/cli/workspacify.js.map +1 -1
  46. package/dist/client/AgentPanel.js +1 -1
  47. package/dist/client/AgentPanel.js.map +1 -1
  48. package/dist/client/AssistantChat.d.ts.map +1 -1
  49. package/dist/client/AssistantChat.js +8 -2
  50. package/dist/client/AssistantChat.js.map +1 -1
  51. package/dist/client/NewWorkspaceAppFlow.d.ts.map +1 -1
  52. package/dist/client/NewWorkspaceAppFlow.js +5 -4
  53. package/dist/client/NewWorkspaceAppFlow.js.map +1 -1
  54. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  55. package/dist/client/agent-chat-adapter.js +65 -12
  56. package/dist/client/agent-chat-adapter.js.map +1 -1
  57. package/dist/client/blocks/library/diagram.d.ts.map +1 -1
  58. package/dist/client/blocks/library/diagram.js +23 -17
  59. package/dist/client/blocks/library/diagram.js.map +1 -1
  60. package/dist/client/blocks/types.d.ts +2 -0
  61. package/dist/client/blocks/types.d.ts.map +1 -1
  62. package/dist/client/blocks/types.js.map +1 -1
  63. package/dist/client/chat/index.d.ts +1 -1
  64. package/dist/client/chat/index.d.ts.map +1 -1
  65. package/dist/client/chat/index.js.map +1 -1
  66. package/dist/client/extensions/ExtensionViewer.js +1 -1
  67. package/dist/client/extensions/ExtensionViewer.js.map +1 -1
  68. package/dist/client/index.d.ts +1 -1
  69. package/dist/client/index.d.ts.map +1 -1
  70. package/dist/client/index.js.map +1 -1
  71. package/dist/client/notifications/NotificationsBell.d.ts +3 -1
  72. package/dist/client/notifications/NotificationsBell.d.ts.map +1 -1
  73. package/dist/client/notifications/NotificationsBell.js +7 -3
  74. package/dist/client/notifications/NotificationsBell.js.map +1 -1
  75. package/dist/client/use-chat-threads.d.ts +13 -0
  76. package/dist/client/use-chat-threads.d.ts.map +1 -1
  77. package/dist/client/use-chat-threads.js +41 -0
  78. package/dist/client/use-chat-threads.js.map +1 -1
  79. package/dist/integrations/plugin.d.ts.map +1 -1
  80. package/dist/integrations/plugin.js +2 -2
  81. package/dist/integrations/plugin.js.map +1 -1
  82. package/dist/onboarding/default-steps.d.ts.map +1 -1
  83. package/dist/onboarding/default-steps.js +102 -0
  84. package/dist/onboarding/default-steps.js.map +1 -1
  85. package/dist/org/auto-join-domain.d.ts +11 -3
  86. package/dist/org/auto-join-domain.d.ts.map +1 -1
  87. package/dist/org/auto-join-domain.js +7 -6
  88. package/dist/org/auto-join-domain.js.map +1 -1
  89. package/dist/org/context.d.ts.map +1 -1
  90. package/dist/org/context.js +68 -32
  91. package/dist/org/context.js.map +1 -1
  92. package/dist/org/migrations.d.ts.map +1 -1
  93. package/dist/org/migrations.js +6 -0
  94. package/dist/org/migrations.js.map +1 -1
  95. package/dist/provider-api/actions/github-repo-files.d.ts +84 -0
  96. package/dist/provider-api/actions/github-repo-files.d.ts.map +1 -0
  97. package/dist/provider-api/actions/github-repo-files.js +213 -0
  98. package/dist/provider-api/actions/github-repo-files.js.map +1 -0
  99. package/dist/provider-api/github-repo.d.ts +11 -0
  100. package/dist/provider-api/github-repo.d.ts.map +1 -0
  101. package/dist/provider-api/github-repo.js +553 -0
  102. package/dist/provider-api/github-repo.js.map +1 -0
  103. package/dist/provider-api/index.d.ts +184 -11
  104. package/dist/provider-api/index.d.ts.map +1 -1
  105. package/dist/provider-api/index.js +519 -0
  106. package/dist/provider-api/index.js.map +1 -1
  107. package/dist/scripts/docs/search.d.ts.map +1 -1
  108. package/dist/scripts/docs/search.js +38 -13
  109. package/dist/scripts/docs/search.js.map +1 -1
  110. package/dist/secrets/register-framework-secrets.d.ts.map +1 -1
  111. package/dist/secrets/register-framework-secrets.js +11 -0
  112. package/dist/secrets/register-framework-secrets.js.map +1 -1
  113. package/dist/server/agent-chat-plugin.d.ts +32 -0
  114. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  115. package/dist/server/agent-chat-plugin.js +297 -2
  116. package/dist/server/agent-chat-plugin.js.map +1 -1
  117. package/dist/server/auth-marketing.d.ts.map +1 -1
  118. package/dist/server/auth-marketing.js +17 -7
  119. package/dist/server/auth-marketing.js.map +1 -1
  120. package/dist/server/auth.d.ts.map +1 -1
  121. package/dist/server/auth.js +6 -0
  122. package/dist/server/auth.js.map +1 -1
  123. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  124. package/dist/server/core-routes-plugin.js +18 -98
  125. package/dist/server/core-routes-plugin.js.map +1 -1
  126. package/dist/styles/blocks.css +30 -8
  127. package/dist/styles/rich-markdown-editor.css +10 -4
  128. package/dist/templates/{starter-shell-sync.spec.ts → chat-shell-sync.spec.ts} +21 -21
  129. package/dist/templates/default/.agents/skills/actions/SKILL.md +5 -5
  130. package/dist/templates/default/.agents/skills/agent-native-docs/SKILL.md +63 -0
  131. package/dist/templates/default/AGENTS.md +22 -1
  132. package/dist/templates/default/actions/hello.ts +1 -1
  133. package/dist/templates/default/actions/navigate.ts +1 -1
  134. package/dist/templates/default/actions/view-screen.ts +1 -1
  135. package/dist/templates/headless/.agents/skills/agent-native-docs/SKILL.md +63 -0
  136. package/dist/templates/headless/.env.example +4 -0
  137. package/dist/templates/headless/.prettierrc +5 -0
  138. package/dist/templates/headless/AGENTS.md +58 -0
  139. package/dist/templates/headless/DEVELOPING.md +22 -0
  140. package/dist/templates/headless/_gitignore +36 -0
  141. package/dist/templates/headless/actions/hello.ts +14 -0
  142. package/dist/templates/headless/actions/run.ts +3 -0
  143. package/dist/templates/headless/package.json +22 -0
  144. package/dist/templates/headless/tsconfig.json +7 -0
  145. package/dist/templates/ui-primitives-sync.spec.ts +2 -2
  146. package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -5
  147. package/dist/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +63 -0
  148. package/dist/templates/workspace-core/.agents/skills/client-side-routing/SKILL.md +9 -0
  149. package/dist/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +93 -0
  150. package/dist/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +11 -1
  151. package/dist/templates/workspace-core/.agents/skills/secrets/SKILL.md +1 -1
  152. package/dist/templates/workspace-core/AGENTS.md +20 -3
  153. package/dist/templates/workspace-core/src/server/index.ts +1 -1
  154. package/dist/templates/workspace-root/AGENTS.md +25 -5
  155. package/dist/templates/workspace-root/README.md +7 -7
  156. package/dist/triggers/dispatcher.d.ts +2 -3
  157. package/dist/triggers/dispatcher.d.ts.map +1 -1
  158. package/dist/triggers/dispatcher.js +2 -3
  159. package/dist/triggers/dispatcher.js.map +1 -1
  160. package/dist/triggers/routes.d.ts +38 -0
  161. package/dist/triggers/routes.d.ts.map +1 -0
  162. package/dist/triggers/routes.js +202 -0
  163. package/dist/triggers/routes.js.map +1 -0
  164. package/dist/vite/client.d.ts +2 -1
  165. package/dist/vite/client.d.ts.map +1 -1
  166. package/dist/vite/client.js +121 -2
  167. package/dist/vite/client.js.map +1 -1
  168. package/docs/AGENTS.md +57 -0
  169. package/docs/SKILL.md +40 -0
  170. package/docs/content/a2a-protocol.md +1 -1
  171. package/docs/content/actions.md +48 -8
  172. package/docs/content/agent-surfaces.md +76 -14
  173. package/docs/content/cli-adapters.md +1 -1
  174. package/docs/content/cloneable-saas.md +5 -4
  175. package/docs/content/code-agents-ui.md +1 -1
  176. package/docs/content/components.md +1 -1
  177. package/docs/content/context-awareness.md +15 -3
  178. package/docs/content/creating-templates.md +15 -7
  179. package/docs/content/drop-in-agent.md +1 -1
  180. package/docs/content/faq.md +6 -4
  181. package/docs/content/getting-started.md +63 -73
  182. package/docs/content/key-concepts.md +24 -24
  183. package/docs/content/native-chat-ui.md +4 -4
  184. package/docs/content/pure-agent-apps.md +34 -10
  185. package/docs/content/security.md +1 -1
  186. package/docs/content/server.md +1 -1
  187. package/docs/content/template-chat.md +85 -0
  188. package/docs/content/template-dispatch.md +1 -1
  189. package/docs/content/tracking.md +1 -1
  190. package/docs/content/what-is-agent-native.md +7 -6
  191. package/package.json +10 -1
  192. package/src/templates/{starter-shell-sync.spec.ts → chat-shell-sync.spec.ts} +21 -21
  193. package/src/templates/default/.agents/skills/actions/SKILL.md +5 -5
  194. package/src/templates/default/.agents/skills/agent-native-docs/SKILL.md +63 -0
  195. package/src/templates/default/AGENTS.md +22 -1
  196. package/src/templates/default/actions/hello.ts +1 -1
  197. package/src/templates/default/actions/navigate.ts +1 -1
  198. package/src/templates/default/actions/view-screen.ts +1 -1
  199. package/src/templates/headless/.agents/skills/agent-native-docs/SKILL.md +63 -0
  200. package/src/templates/headless/.env.example +4 -0
  201. package/src/templates/headless/.prettierrc +5 -0
  202. package/src/templates/headless/AGENTS.md +58 -0
  203. package/src/templates/headless/DEVELOPING.md +22 -0
  204. package/src/templates/headless/_gitignore +36 -0
  205. package/src/templates/headless/actions/hello.ts +14 -0
  206. package/src/templates/headless/actions/run.ts +3 -0
  207. package/src/templates/headless/package.json +22 -0
  208. package/src/templates/headless/tsconfig.json +7 -0
  209. package/src/templates/ui-primitives-sync.spec.ts +2 -2
  210. package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -5
  211. package/src/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +63 -0
  212. package/src/templates/workspace-core/.agents/skills/client-side-routing/SKILL.md +9 -0
  213. package/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +93 -0
  214. package/src/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +11 -1
  215. package/src/templates/workspace-core/.agents/skills/secrets/SKILL.md +1 -1
  216. package/src/templates/workspace-core/AGENTS.md +20 -3
  217. package/src/templates/workspace-core/src/server/index.ts +1 -1
  218. package/src/templates/workspace-root/AGENTS.md +25 -5
  219. package/src/templates/workspace-root/README.md +7 -7
  220. package/docs/content/template-starter.md +0 -78
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/integrations/plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import { defineEventHandler, setResponseStatus, getMethod, getQuery } from \"h3\";\nimport { createRemoteJWKSet, jwtVerify } from \"jose\";\nimport { FRAMEWORK_ROUTE_PREFIX } from \"../server/core-routes-plugin.js\";\nimport {\n getH3App,\n markDefaultPluginProvided,\n} from \"../server/framework-request-handler.js\";\nimport type {\n PlatformAdapter,\n IntegrationsPluginOptions,\n IntegrationStatus,\n} from \"./types.js\";\nimport { handleWebhook, processIntegrationTask } from \"./webhook-handler.js\";\nimport {\n claimPendingTask,\n markTaskCompleted,\n markTaskFailed,\n} from \"./pending-tasks-store.js\";\nimport { extractBearerToken, verifyInternalToken } from \"./internal-token.js\";\nimport { readBody } from \"../server/h3-helpers.js\";\nimport { getRequestHeader } from \"h3\";\nimport { getIntegrationConfig, saveIntegrationConfig } from \"./config-store.js\";\nimport { slackAdapter } from \"./adapters/slack.js\";\nimport { telegramAdapter } from \"./adapters/telegram.js\";\nimport { whatsappAdapter } from \"./adapters/whatsapp.js\";\nimport { googleDocsAdapter } from \"./adapters/google-docs.js\";\nimport { emailAdapter } from \"./adapters/email.js\";\nimport {\n startGoogleDocsPoller,\n handlePushNotification,\n} from \"./google-docs-poller.js\";\nimport { startPendingTasksRetryJob } from \"./pending-tasks-retry-job.js\";\nimport {\n processA2AContinuationById,\n processDueA2AContinuations,\n} from \"./a2a-continuation-processor.js\";\nimport { failA2AContinuation } from \"./a2a-continuations-store.js\";\nimport { loadResourcesForPrompt } from \"../server/agent-chat-plugin.js\";\nimport { getTaskQueueStats } from \"./task-queue-stats.js\";\nimport { getSession } from \"../server/auth.js\";\nimport { getOrgContext } from \"../org/context.js\";\nimport { withConfiguredAppBasePath } from \"../server/app-base-path.js\";\nimport {\n authenticateRemoteDeviceToken,\n createRemoteDevice,\n getRemoteDeviceForOwner,\n listRemoteDevicesForOwner,\n revokeRemoteDeviceForOwner,\n toPublicRemoteDevice,\n unregisterRemoteDevice,\n updateRemoteDeviceDetails,\n} from \"./remote-devices-store.js\";\nimport {\n claimNextRemoteCommand,\n enqueueRemoteCommand as enqueueRemoteCommandRow,\n isRemoteCommandKind,\n listRemoteCommandsForOwner,\n updateRemoteCommandResult,\n} from \"./remote-commands-store.js\";\nimport {\n insertRemoteRunEvents,\n listRemoteRunEvents,\n} from \"./remote-run-events-store.js\";\nimport {\n listRemotePushNotificationsForOwner,\n listRemotePushRegistrationsForOwner,\n queueRemotePushNotifications,\n toPublicRemotePushRegistration,\n unregisterRemotePushRegistrationForOwner,\n upsertRemotePushRegistration,\n} from \"./remote-push-store.js\";\nimport { startRemoteCommandsRetryJob } from \"./remote-retry-job.js\";\nimport type {\n RemoteCommand,\n RemoteCommandKind,\n RemoteDevice,\n} from \"./remote-types.js\";\n\ntype NitroPluginDef = (nitroApp: any) => void | Promise<void>;\n\nlet a2aContinuationRetryInterval: ReturnType<typeof setInterval> | null = null;\n\nfunction startA2AContinuationRetryJob(\n adapters: Map<string, PlatformAdapter>,\n): void {\n if (a2aContinuationRetryInterval) return;\n const initialTimer = setTimeout(() => {\n processDueA2AContinuations({ adapters }).catch((err) => {\n console.error(\"[integrations] A2A continuation retry job failed:\", err);\n });\n }, 10_000);\n unrefTimer(initialTimer);\n a2aContinuationRetryInterval = setInterval(() => {\n processDueA2AContinuations({ adapters }).catch((err) => {\n console.error(\"[integrations] A2A continuation retry job failed:\", err);\n });\n }, 60_000);\n unrefTimer(a2aContinuationRetryInterval);\n}\n\nfunction unrefTimer(timer: ReturnType<typeof setInterval>): void {\n (timer as unknown as { unref?: () => void }).unref?.();\n}\n\n// ─── Google Pub/Sub OIDC verifier (for Drive changes.watch push) ────────────\n// Cache Google's public keys for OIDC verification. jose handles TTL +\n// refresh internally — same pattern as templates/mail/.../gmail/push.post.ts.\n// Used to verify Google Pub/Sub push notifications carry a valid bearer token\n// signed by a configured service account. Without this, the webhook is wide\n// open to anonymous callers who can force a Drive sync (H7 in the audit).\nconst GOOGLE_JWKS = createRemoteJWKSet(\n new URL(\"https://www.googleapis.com/oauth2/v3/certs\"),\n);\nconst GOOGLE_ISSUERS = [\"https://accounts.google.com\", \"accounts.google.com\"];\n\n/**\n * Verify a Pub/Sub OIDC bearer token. Throws on any verification failure.\n * Requires GOOGLE_DOCS_PUSH_AUDIENCE and GOOGLE_DOCS_PUSH_SIGNER_EMAIL to be\n * set; if either is missing in production, the webhook handler refuses the\n * request entirely (so a misconfigured deployment fails closed, surfacing in\n * Pub/Sub's delivery metrics).\n */\nasync function verifyGoogleDocsPushToken(authHeader: string): Promise<void> {\n if (!authHeader.startsWith(\"Bearer \")) {\n throw new Error(\"missing bearer token\");\n }\n const token = authHeader.slice(7);\n const audience = process.env.GOOGLE_DOCS_PUSH_AUDIENCE;\n if (!audience) {\n throw new Error(\"GOOGLE_DOCS_PUSH_AUDIENCE not configured\");\n }\n const { payload } = await jwtVerify(token, GOOGLE_JWKS, {\n issuer: GOOGLE_ISSUERS,\n audience,\n });\n if (payload.email_verified !== true) {\n throw new Error(\"email_verified claim is not true\");\n }\n // Pin to a specific service account — without this, any Google-issued\n // token with the right audience could trigger a Drive sync.\n const expectedSigner = process.env.GOOGLE_DOCS_PUSH_SIGNER_EMAIL;\n if (!expectedSigner) {\n throw new Error(\"GOOGLE_DOCS_PUSH_SIGNER_EMAIL not configured\");\n }\n if (payload.email !== expectedSigner) {\n throw new Error(`unexpected signer: ${String(payload.email)}`);\n }\n}\n\n/** Built-in adapters, instantiated lazily */\nfunction getDefaultAdapters(): PlatformAdapter[] {\n return [\n slackAdapter(),\n telegramAdapter(),\n whatsappAdapter(),\n googleDocsAdapter(),\n emailAdapter(),\n ];\n}\n\nconst INTEGRATION_SYSTEM_PROMPT = `You are an AI agent responding via a messaging platform integration (Slack, Telegram, WhatsApp, etc.).\n\nYou have the same capabilities as the web chat agent. Use your tools to help the user.\n\nKeep responses concise — messaging platforms have character limits and users expect shorter replies than in a web interface. Use markdown sparingly (bold and lists are fine, but avoid complex formatting that may not render well on all platforms).\n\nIf a task requires many steps, summarize what you did rather than streaming every detail.`;\n\ntype RemoteCodeCommandEnvelope = {\n kind?: unknown;\n ownerEmail?: unknown;\n orgId?: unknown;\n command?: unknown;\n source?: unknown;\n};\n\nconst REMOTE_DEVICE_ONLINE_MS = 90_000;\n\nexport async function enqueueRemoteCommand(\n envelope: RemoteCodeCommandEnvelope,\n): Promise<Record<string, unknown>> {\n const ownerEmail = readString(envelope.ownerEmail);\n if (!ownerEmail) throw new Error(\"ownerEmail is required\");\n const hasOrgId = Object.prototype.hasOwnProperty.call(envelope, \"orgId\");\n const orgId = hasOrgId ? (readString(envelope.orgId) ?? null) : undefined;\n const command = readObject(envelope.command);\n if (!command) throw new Error(\"command is required\");\n const commandType = readString(command.type);\n const commands = await listRemoteCommandsForOwner({\n ownerEmail,\n ...(hasOrgId ? { orgId } : {}),\n limit: 50,\n });\n\n if (commandType === \"list\") {\n return {\n ok: true,\n runs: commands.map(remoteCommandToRunSummary).filter(Boolean),\n hostOnline: await hasOnlineRemoteDevice(ownerEmail, orgId),\n };\n }\n\n if (commandType === \"status\") {\n const runRef = readString(command.runRef);\n const run = runRef\n ? commands.map(remoteCommandToRunSummary).find((item) => {\n const candidate = item as Record<string, unknown>;\n return candidate.id === runRef || candidate.runId === runRef;\n })\n : undefined;\n const hostOnline = await hasOnlineRemoteDevice(ownerEmail, orgId);\n return {\n ok: true,\n hostOnline,\n hostStatus: hostOnline ? \"online\" : \"offline\",\n ...(run ? { run } : {}),\n };\n }\n\n const devices = await listRemoteDevicesForOwner({\n ownerEmail,\n ...(hasOrgId ? { orgId } : {}),\n status: \"active\",\n limit: 10,\n });\n const requestedDeviceId =\n readString(command.hostId) ?? readString(command.deviceId);\n const device =\n (requestedDeviceId\n ? devices.find((candidate) => candidate.id === requestedDeviceId)\n : undefined) ?? devices[0];\n if (!device) {\n return {\n ok: false,\n hostOnline: false,\n hostStatus: \"offline\",\n error: \"No paired computer is available for code-agent commands.\",\n };\n }\n\n const source = readObject(envelope.source);\n const kind = remoteCodeCommandKind(commandType);\n if (!kind) throw new Error(`Unsupported code-agent command: ${commandType}`);\n const row = await enqueueRemoteCommandRow({\n deviceId: device.id,\n ownerEmail,\n orgId: device.orgId ?? orgId ?? null,\n kind,\n params: remoteCodeCommandParams(command),\n platform: readString(source?.platform) ?? null,\n externalThreadId: readString(source?.externalThreadId) ?? null,\n });\n const hostOnline = isRemoteDeviceOnline(device);\n return {\n ok: true,\n commandId: row.id,\n requestId: row.id,\n hostOnline,\n hostStatus: hostOnline ? \"online\" : \"offline\",\n message:\n commandType === \"create\"\n ? hostOnline\n ? `Queued code run (${row.id}).`\n : `Queued code run (${row.id}). Your computer looks offline or asleep, so it will pick this up when it wakes.`\n : undefined,\n };\n}\n\nfunction remoteCodeCommandKind(\n commandType: string | undefined,\n): RemoteCommandKind | null {\n switch (commandType) {\n case \"create\":\n return \"create-run\";\n case \"continue\":\n return \"append-followup\";\n case \"approve\":\n return \"approve\";\n case \"deny\":\n return \"deny\";\n case \"stop\":\n return \"stop\";\n default:\n return null;\n }\n}\n\nfunction remoteCodeCommandParams(\n command: Record<string, unknown>,\n): Record<string, unknown> {\n const type = readString(command.type);\n if (type === \"create\") {\n return {\n prompt: readString(command.prompt) ?? \"\",\n title: readString(command.title),\n cwd: readString(command.cwd),\n goalId: readString(command.goalId) ?? \"task\",\n permissionMode: readString(command.permissionMode),\n };\n }\n if (type === \"continue\") {\n return {\n runId: readString(command.runRef) ?? readString(command.runId),\n prompt: readString(command.text) ?? readString(command.prompt),\n permissionMode: readString(command.permissionMode),\n };\n }\n if (type === \"approve\" || type === \"deny\") {\n const id = readString(command.approvalId) ?? readString(command.runId);\n return { runId: id, approvalId: id };\n }\n if (type === \"stop\") {\n return { runId: readString(command.runRef) ?? readString(command.runId) };\n }\n return {};\n}\n\nfunction enqueueBodyToRemoteCodeCommand(\n body: Record<string, unknown>,\n): Record<string, unknown> | null {\n const direct = readObject(body.command);\n if (body.kind === \"code-agent\" && direct) return direct;\n\n const operation = readString(body.operation) ?? readString(body.type);\n const payload = readObject(body.payload) ?? body;\n if (!operation?.startsWith(\"code-agent.\")) return null;\n\n if (operation === \"code-agent.run.create\") {\n return {\n type: \"create\",\n prompt: payload.prompt,\n title: payload.title,\n hostId: payload.hostId,\n deviceId: payload.deviceId,\n cwd: payload.cwd,\n goalId: payload.goalId,\n permissionMode: payload.permissionMode,\n };\n }\n if (operation === \"code-agent.run.follow-up\") {\n return {\n type: \"continue\",\n runRef: payload.runId,\n text: payload.prompt ?? payload.message,\n hostId: payload.hostId,\n deviceId: payload.deviceId,\n permissionMode: payload.permissionMode,\n };\n }\n if (operation === \"code-agent.pending-command.decide\") {\n return {\n type: payload.decision === \"deny\" ? \"deny\" : \"approve\",\n approvalId: payload.commandId ?? payload.runId,\n runId: payload.runId,\n hostId: payload.hostId,\n deviceId: payload.deviceId,\n };\n }\n if (operation === \"code-agent.run.stop\") {\n return {\n type: \"stop\",\n runRef: payload.runId,\n hostId: payload.hostId,\n deviceId: payload.deviceId,\n };\n }\n return null;\n}\n\nfunction remoteCommandToRunSummary(\n command: RemoteCommand,\n): Record<string, unknown> | null {\n const result = readObject(command.result);\n const nestedResult = readObject(result?.result) ?? result;\n const run = readObject(nestedResult?.run);\n if (run) {\n return {\n ...run,\n commandId: command.id,\n hostId: command.deviceId,\n status: readString(run.status) ?? command.status,\n updatedAt: readString(run.updatedAt) ?? command.updatedAt,\n };\n }\n if (command.kind !== \"create-run\") return null;\n const params = readObject(command.params) ?? {};\n return {\n id: command.id,\n runId: command.id,\n hostId: command.deviceId,\n title:\n readString(params.title) ?? readString(params.prompt) ?? \"Queued run\",\n prompt: readString(params.prompt),\n status: command.status === \"failed\" ? \"errored\" : \"queued\",\n createdAt: command.createdAt,\n updatedAt: command.updatedAt,\n metadata: { remoteCommandId: command.id },\n };\n}\n\nfunction readObject(value: unknown): Record<string, unknown> | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction isRemoteDeviceOnline(device: { lastSeenAt: number | null }): boolean {\n return typeof device.lastSeenAt === \"number\"\n ? Date.now() - device.lastSeenAt <= REMOTE_DEVICE_ONLINE_MS\n : false;\n}\n\nasync function hasOnlineRemoteDevice(\n ownerEmail: string,\n orgId: string | null | undefined,\n): Promise<boolean> {\n const hasOrgId = orgId !== undefined;\n const devices = await listRemoteDevicesForOwner({\n ownerEmail,\n ...(hasOrgId ? { orgId } : {}),\n status: \"active\",\n limit: 10,\n });\n return devices.some(isRemoteDeviceOnline);\n}\n\nfunction remoteDeviceToHost(device: RemoteDevice): Record<string, unknown> {\n const online = device.status === \"active\" && isRemoteDeviceOnline(device);\n return {\n id: device.id,\n name: device.label,\n label: device.label,\n status:\n device.status === \"active\" ? (online ? \"online\" : \"offline\") : \"revoked\",\n lastSeenAt: device.lastSeenAt\n ? new Date(device.lastSeenAt).toISOString()\n : undefined,\n platform: device.platform ?? \"desktop\",\n appVersion: device.appVersion ?? undefined,\n hostName: device.hostName ?? undefined,\n metadata: device.metadata ?? undefined,\n device: toPublicRemoteDevice(device),\n };\n}\n\nfunction mountedPathParts(event: any, mountSuffix: string): string[] {\n const rawPath = String(\n event.path ?? event.url?.pathname ?? event.node?.req?.url ?? \"/\",\n ).split(\"?\")[0];\n const normalized = rawPath.replace(/^\\/+/, \"\");\n const marker = mountSuffix.replace(/^\\/+/, \"\");\n const markerIndex = normalized.indexOf(marker);\n const suffix =\n markerIndex >= 0\n ? normalized.slice(markerIndex + marker.length)\n : normalized;\n return suffix\n .split(\"/\")\n .filter(Boolean)\n .map((part) => decodeURIComponent(part));\n}\n\nfunction remoteCommandPushPayload(\n command: RemoteCommand,\n): Record<string, unknown> {\n const result = readObject(command.result);\n const status = command.status;\n const title =\n status === \"completed\"\n ? \"Remote run completed\"\n : status === \"failed\"\n ? \"Remote run failed\"\n : \"Remote run updated\";\n return {\n title,\n body: command.errorMessage ?? readString(result?.message),\n commandId: command.id,\n hostId: command.deviceId,\n kind: command.kind,\n status,\n result: command.result,\n updatedAt: command.updatedAt,\n };\n}\n\n/**\n * Creates a Nitro plugin that mounts messaging platform integration webhook routes.\n *\n * Routes:\n * POST /_agent-native/integrations/:platform/webhook — receive platform webhooks\n * GET /_agent-native/integrations/status — all integrations status\n * GET /_agent-native/integrations/:platform/status — single platform status\n * POST /_agent-native/integrations/:platform/enable — enable integration\n * POST /_agent-native/integrations/:platform/disable — disable integration\n * POST /_agent-native/integrations/:platform/setup — platform-specific setup\n */\nexport function createIntegrationsPlugin(\n options?: IntegrationsPluginOptions,\n): NitroPluginDef {\n return async (nitroApp: any) => {\n markDefaultPluginProvided(nitroApp, \"integrations\");\n const adapters = options?.adapters ?? getDefaultAdapters();\n const adapterMap = new Map<string, PlatformAdapter>();\n for (const adapter of adapters) {\n adapterMap.set(adapter.platform, adapter);\n }\n\n const model = options?.model;\n // Read the API key at REQUEST time, not plugin-init time. On Netlify\n // Lambda the plugin module loads in a context where env vars from the\n // site's runtime config may not yet be populated, so capturing at\n // init can leave us with an empty string forever. The getter\n // re-resolves on every webhook so freshly-set secrets work without\n // a redeploy.\n const getApiKey = () =>\n options?.apiKey ?? process.env.ANTHROPIC_API_KEY ?? \"\";\n\n // Build the system prompt\n const baseSystemPrompt = options?.systemPrompt ?? INTEGRATION_SYSTEM_PROMPT;\n\n // Resolve actions — auto-include call-agent so the integration agent can\n // delegate to other A2A apps, matching the behavior of the agent-chat plugin.\n const localActions = options?.actions ?? {};\n let callAgentEntry: Record<string, unknown> = {};\n try {\n const mod = await import(\"../scripts/call-agent.js\");\n callAgentEntry = {\n \"call-agent\": {\n tool: mod.tool,\n run: (args: Record<string, string>, context: unknown) =>\n mod.run(args, context as any, options?.appId),\n },\n };\n } catch {\n // call-agent script not available — skip\n }\n const actions = {\n ...localActions,\n ...callAgentEntry,\n } as typeof localActions;\n\n const h3 = getH3App(nitroApp);\n const P = `${FRAMEWORK_ROUTE_PREFIX}/integrations`;\n\n async function requireSession(event: any): Promise<boolean> {\n const session = await getSession(event).catch(() => null);\n if (session?.email) return true;\n setResponseStatus(event, 401);\n return false;\n }\n\n async function requireSessionContext(\n event: any,\n ): Promise<{ ownerEmail: string; orgId: string | null } | null> {\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return null;\n }\n const orgCtx = await getOrgContext(event).catch(() => null);\n return {\n ownerEmail: session.email,\n orgId: orgCtx?.orgId ?? session.orgId ?? null,\n };\n }\n\n async function requireRemoteDevice(event: any) {\n const token = extractBearerToken(\n getRequestHeader(event, \"authorization\"),\n );\n const device = await authenticateRemoteDeviceToken(token);\n if (device) return device;\n setResponseStatus(event, 401);\n return null;\n }\n\n /**\n * Gate destructive integration writes (enable/disable, setup,\n * setIntegrationConfig…) behind an org-owner/admin check.\n *\n * `integration_configs` is keyed `(platform, config_key)` with no\n * owner column in the PRIMARY KEY — so this row is effectively\n * deployment-wide. Any signed-in user toggling /enable or /disable\n * would otherwise affect every other user (a regular org member could\n * disable Slack/email org-wide, write a malicious allowlist for\n * inbound email, etc.). This check enforces that only owners and\n * admins of the user's active org may mutate integration config.\n *\n * Solo / no-org sessions (i.e. ctx.orgId == null) are allowed — that's\n * the local-dev / single-user case where there's no privilege gradient\n * to enforce. The deployment is single-tenant by definition there.\n *\n * Returns an `{ ok: true }` on pass, or `{ ok: false, error }` with the\n * status already set on the event. The error string lines up with the\n * status code (401 → \"unauthorized\"; 403 → admin-required message).\n */\n async function checkOrgAdmin(\n event: any,\n ): Promise<{ ok: true } | { ok: false; error: string }> {\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { ok: false, error: \"unauthorized\" };\n }\n const ctx = await getOrgContext(event).catch(() => null);\n // Solo (no org membership) — single-tenant flow, allow.\n if (!ctx?.orgId) return { ok: true };\n if (ctx.role === \"owner\" || ctx.role === \"admin\") return { ok: true };\n setResponseStatus(event, 403);\n return {\n ok: false,\n error:\n \"Only organization owners and admins can mutate integration config\",\n };\n }\n\n // ─── Status endpoint (all integrations) ───────────────────────\n h3.use(\n `${P}/status`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n if (!(await requireSession(event))) return { error: \"unauthorized\" };\n const baseUrl = getBaseUrl(event);\n const statuses: IntegrationStatus[] = [];\n for (const adapter of adapters) {\n const status = await adapter.getStatus(baseUrl);\n const config = await getIntegrationConfig(adapter.platform);\n status.enabled = !!config?.configData?.enabled;\n status.webhookUrl = `${baseUrl}${P}/${adapter.platform}/webhook`;\n if (!status.requiredEnvKeys) {\n try {\n status.requiredEnvKeys = adapter.getRequiredEnvKeys();\n } catch {\n status.requiredEnvKeys = [];\n }\n }\n statuses.push(status);\n }\n return statuses;\n }),\n );\n\n // ─── Task queue status (observability) ───────────────────────\n // GET /_agent-native/integrations/task-queue/status\n // Returns counts + recent failures for the integration_pending_tasks\n // queue. Requires a normal session — this exposes operational data, not\n // platform secrets. If the queue table doesn't exist yet (no inbound\n // webhook has been processed), returns zeroed stats rather than 500.\n h3.use(\n `${P}/task-queue/status`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n if (!(await requireSession(event))) return { error: \"unauthorized\" };\n try {\n return await getTaskQueueStats();\n } catch (err: any) {\n setResponseStatus(event, 500);\n return { error: err?.message ?? String(err) };\n }\n }),\n );\n\n // ─── Remote relay endpoints ──────────────────────────────────\n // These routes allow a signed-in browser session to enqueue work for a\n // registered remote device, and the device to claim/complete that work\n // using its one-time-issued bearer token. State lives entirely in SQL so\n // long polling can safely degrade to short polling on serverless hosts.\n h3.use(\n `${P}/remote/register`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const body = (await readBody(event)) as {\n label?: unknown;\n platform?: unknown;\n appVersion?: unknown;\n version?: unknown;\n hostName?: unknown;\n hostname?: unknown;\n metadata?: unknown;\n };\n const label =\n typeof body.label === \"string\" && body.label.trim()\n ? body.label.trim().slice(0, 200)\n : \"Remote device\";\n const { device, token } = await createRemoteDevice({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n label,\n platform: readString(body.platform),\n appVersion: readString(body.appVersion) ?? readString(body.version),\n hostName: readString(body.hostName) ?? readString(body.hostname),\n metadata: readObject(body.metadata),\n });\n return { device: toPublicRemoteDevice(device), token };\n }),\n );\n\n h3.use(\n `${P}/remote/hosts`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const devices = await listRemoteDevicesForOwner({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n limit: 50,\n });\n const hosts = devices.map(remoteDeviceToHost);\n const parts = mountedPathParts(event, \"remote/hosts\");\n if (parts[0]) {\n const host = hosts.find((candidate) => candidate.id === parts[0]);\n if (!host) {\n setResponseStatus(event, 404);\n return { error: \"host not found\" };\n }\n return { host, device: host.device };\n }\n return { hosts, devices: hosts };\n }),\n );\n\n h3.use(\n `${P}/remote/devices`,\n defineEventHandler(async (event) => {\n const method = getMethod(event);\n if (method !== \"GET\" && method !== \"DELETE\" && method !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const parts = mountedPathParts(event, \"remote/devices\");\n\n if (method === \"GET\") {\n if (!parts[0]) {\n const devices = await listRemoteDevicesForOwner({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n limit: 100,\n });\n return {\n devices: devices.map(toPublicRemoteDevice),\n hosts: devices.map(remoteDeviceToHost),\n };\n }\n const device = await getRemoteDeviceForOwner({\n id: parts[0],\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n });\n if (!device) {\n setResponseStatus(event, 404);\n return { error: \"device not found\" };\n }\n return {\n device: toPublicRemoteDevice(device),\n host: remoteDeviceToHost(device),\n };\n }\n\n const id = parts[0];\n const action = parts[1];\n if (!id || (method === \"POST\" && action !== \"revoke\")) {\n setResponseStatus(event, 404);\n return { error: \"not found\" };\n }\n const device = await revokeRemoteDeviceForOwner({\n id,\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n });\n if (!device) {\n setResponseStatus(event, 404);\n return { error: \"device not found\" };\n }\n return { ok: true, device: toPublicRemoteDevice(device) };\n }),\n );\n\n h3.use(\n `${P}/remote/unregister`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\" && getMethod(event) !== \"DELETE\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const device = await requireRemoteDevice(event);\n if (!device) return { error: \"unauthorized\" };\n await unregisterRemoteDevice(device.id);\n return { ok: true, deviceId: device.id };\n }),\n );\n\n h3.use(\n `${P}/remote/heartbeat`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const device = await requireRemoteDevice(event);\n if (!device) return { error: \"unauthorized\" };\n const body = (await readBody(event)) as Record<string, unknown>;\n const updated = await updateRemoteDeviceDetails({\n id: device.id,\n label: readString(body.label),\n platform: readString(body.platform),\n appVersion: readString(body.appVersion) ?? readString(body.version),\n hostName: readString(body.hostName) ?? readString(body.hostname),\n metadata: readObject(body.metadata),\n });\n return {\n ok: true,\n device: updated ? toPublicRemoteDevice(updated) : null,\n };\n }),\n );\n\n h3.use(\n `${P}/remote/push/register`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const body = (await readBody(event)) as Record<string, unknown>;\n const token = readString(body.token);\n if (!token) {\n setResponseStatus(event, 400);\n return { error: \"token required\" };\n }\n const registration = await upsertRemotePushRegistration({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n provider: readString(body.provider) ?? \"unknown\",\n token,\n platform: readString(body.platform),\n clientDeviceId:\n readString(body.clientDeviceId) ?? readString(body.deviceId),\n label: readString(body.label),\n });\n return {\n registration: toPublicRemotePushRegistration(registration),\n };\n }),\n );\n\n h3.use(\n `${P}/remote/push/registrations`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const registrations = await listRemotePushRegistrationsForOwner({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n includeInactive: getQuery(event).includeInactive === \"true\",\n limit: 100,\n });\n return {\n registrations: registrations.map(toPublicRemotePushRegistration),\n };\n }),\n );\n\n h3.use(\n `${P}/remote/push/unregister`,\n defineEventHandler(async (event) => {\n const method = getMethod(event);\n if (method !== \"POST\" && method !== \"DELETE\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const body = (await readBody(event)) as Record<string, unknown>;\n const removed = await unregisterRemotePushRegistrationForOwner({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n id: readString(body.id) ?? readString(body.registrationId),\n token: readString(body.token),\n });\n if (!removed) {\n setResponseStatus(event, 404);\n return { error: \"registration not found\" };\n }\n return { ok: true };\n }),\n );\n\n h3.use(\n `${P}/remote/push/notifications`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const query = getQuery(event);\n const status =\n query.status === \"delivered\" ||\n query.status === \"failed\" ||\n query.status === \"pending\"\n ? query.status\n : undefined;\n const notifications = await listRemotePushNotificationsForOwner({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n status,\n limit: Number(query.limit ?? 50) || 50,\n });\n return { notifications };\n }),\n );\n\n h3.use(\n `${P}/remote/runs`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const parts = mountedPathParts(event, \"remote/runs\");\n const commands = await listRemoteCommandsForOwner({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n limit: 100,\n });\n\n if (parts.length === 0) {\n return {\n runs: commands.map(remoteCommandToRunSummary).filter(Boolean),\n };\n }\n\n const runId = decodeURIComponent(parts[0] ?? \"\");\n const match = commands.find((command) => {\n const run = remoteCommandToRunSummary(command);\n return (\n command.id === runId || run?.id === runId || run?.runId === runId\n );\n });\n if (!match) {\n setResponseStatus(event, 404);\n return { error: \"run not found\" };\n }\n const run = remoteCommandToRunSummary(match);\n\n if (parts[1] === \"transcript\") {\n const remoteRunId =\n readString(run?.runId) ??\n readString(run?.id) ??\n readString(match.id);\n const events = remoteRunId\n ? await listRemoteRunEvents({\n deviceId: match.deviceId,\n remoteRunId,\n limit: 1000,\n })\n : [];\n return {\n run,\n events: events.map((event) => event.event),\n };\n }\n\n if (parts.length === 1) return { run };\n setResponseStatus(event, 404);\n return { error: \"not found\" };\n }),\n );\n\n h3.use(\n `${P}/remote/enqueue`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const body = (await readBody(event)) as {\n deviceId?: unknown;\n kind?: unknown;\n params?: unknown;\n platform?: unknown;\n externalThreadId?: unknown;\n operation?: unknown;\n payload?: unknown;\n command?: unknown;\n source?: unknown;\n };\n const highLevel = enqueueBodyToRemoteCodeCommand(body);\n if (highLevel) {\n return enqueueRemoteCommand({\n kind: \"code-agent\",\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId ?? undefined,\n command: highLevel,\n source: body.source ?? {\n platform:\n typeof body.platform === \"string\" ? body.platform : \"mobile\",\n externalThreadId:\n typeof body.externalThreadId === \"string\"\n ? body.externalThreadId\n : \"mobile\",\n },\n });\n }\n if (typeof body.deviceId !== \"string\" || !body.deviceId.trim()) {\n setResponseStatus(event, 400);\n return { error: \"deviceId required\" };\n }\n if (!isRemoteCommandKind(body.kind)) {\n setResponseStatus(event, 400);\n return { error: \"invalid command kind\" };\n }\n const device = await getRemoteDeviceForOwner({\n id: body.deviceId,\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n });\n if (!device) {\n setResponseStatus(event, 404);\n return { error: \"device not found\" };\n }\n if (device.status !== \"active\") {\n setResponseStatus(event, 410);\n return { error: \"device revoked\" };\n }\n const command = await enqueueRemoteCommandRow({\n deviceId: device.id,\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n kind: body.kind,\n params: body.params ?? {},\n platform: typeof body.platform === \"string\" ? body.platform : null,\n externalThreadId:\n typeof body.externalThreadId === \"string\"\n ? body.externalThreadId\n : null,\n });\n return { command };\n }),\n );\n\n h3.use(\n `${P}/remote/poll`,\n defineEventHandler(async (event) => {\n const method = getMethod(event);\n if (method !== \"POST\" && method !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const device = await requireRemoteDevice(event);\n if (!device) return { error: \"unauthorized\" };\n const query = getQuery(event);\n const body =\n method === \"POST\"\n ? ((await readBody(event)) as { waitMs?: unknown })\n : {};\n const requestedWait =\n Number(body.waitMs ?? query.waitMs ?? query.wait_ms ?? 25_000) || 0;\n const waitMs = Math.max(0, Math.min(25_000, requestedWait));\n const deadline = Date.now() + waitMs;\n\n while (true) {\n const command = await claimNextRemoteCommand(device.id);\n if (command) return { command };\n const remaining = deadline - Date.now();\n if (remaining <= 0) return { command: null };\n await sleep(Math.min(1000, remaining));\n }\n }),\n );\n\n h3.use(\n `${P}/remote/result`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const device = await requireRemoteDevice(event);\n if (!device) return { error: \"unauthorized\" };\n const body = (await readBody(event)) as {\n commandId?: unknown;\n status?: unknown;\n result?: unknown;\n errorMessage?: unknown;\n };\n if (typeof body.commandId !== \"string\" || !body.commandId.trim()) {\n setResponseStatus(event, 400);\n return { error: \"commandId required\" };\n }\n if (\n body.status !== \"running\" &&\n body.status !== \"completed\" &&\n body.status !== \"failed\"\n ) {\n setResponseStatus(event, 400);\n return { error: \"invalid command status\" };\n }\n const command = await updateRemoteCommandResult({\n deviceId: device.id,\n commandId: body.commandId,\n status: body.status,\n result: body.result,\n errorMessage:\n typeof body.errorMessage === \"string\" ? body.errorMessage : null,\n });\n if (!command) {\n setResponseStatus(event, 404);\n return { error: \"command not found\" };\n }\n if (command.status === \"completed\" || command.status === \"failed\") {\n await queueRemotePushNotifications({\n ownerEmail: device.ownerEmail,\n orgId: device.orgId,\n payload: remoteCommandPushPayload(command),\n }).catch((err) => {\n console.error(\"[integrations] remote push queue failed:\", err);\n });\n }\n return { command };\n }),\n );\n\n h3.use(\n `${P}/remote/run-events`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const device = await requireRemoteDevice(event);\n if (!device) return { error: \"unauthorized\" };\n const body = (await readBody(event)) as {\n remoteRunId?: unknown;\n runId?: unknown;\n events?: unknown;\n };\n const remoteRunId =\n typeof body.remoteRunId === \"string\" && body.remoteRunId.trim()\n ? body.remoteRunId.trim()\n : typeof body.runId === \"string\" && body.runId.trim()\n ? body.runId.trim()\n : \"\";\n if (!remoteRunId) {\n setResponseStatus(event, 400);\n return { error: \"remoteRunId required\" };\n }\n if (!Array.isArray(body.events)) {\n setResponseStatus(event, 400);\n return { error: \"events required\" };\n }\n const events = body.events\n .slice(0, 1000)\n .map((entry, index) => {\n const value = entry as { seq?: unknown; event?: unknown };\n const rawEvent =\n value && typeof value === \"object\" && \"event\" in value\n ? value.event\n : entry;\n return {\n seq:\n value && typeof value === \"object\" && \"seq\" in value\n ? Number(value.seq)\n : index,\n event: rawEvent ?? null,\n };\n })\n .filter((entry) => Number.isInteger(entry.seq) && entry.seq >= 0);\n if (events.length !== body.events.length) {\n setResponseStatus(event, 400);\n return { error: \"invalid event sequence\" };\n }\n const result = await insertRemoteRunEvents({\n deviceId: device.id,\n remoteRunId,\n events,\n });\n return { ok: true, ...result };\n }),\n );\n\n // ─── Process pending task (cross-platform task queue) ────────\n // POST /_agent-native/integrations/process-task\n // Internal endpoint invoked via fire-and-forget self-webhook from the\n // public webhook handler. Auth: HMAC bearer signed with A2A_SECRET.\n // Each invocation runs the agent loop in a fresh function execution.\n h3.use(\n `${P}/process-task`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n\n const body = (await readBody(event)) as { taskId?: string };\n const taskId = body?.taskId;\n if (!taskId) {\n setResponseStatus(event, 400);\n return { error: \"taskId required\" };\n }\n\n // Auth: HMAC token bound to the task id.\n //\n // In production we MUST require A2A_SECRET — a publicly-callable\n // process-task endpoint lets attackers re-trigger any queued task\n // by guessing or sniffing its id (C3 in the webhook security audit).\n // The atomic SQL claim only prevents *double*-processing, not the\n // first attacker-driven processing.\n //\n // In dev we keep the loose posture so contributors don't have to\n // configure A2A_SECRET to play with the integration locally.\n if (!process.env.A2A_SECRET) {\n if (process.env.NODE_ENV === \"production\") {\n setResponseStatus(event, 503);\n return {\n error:\n \"A2A_SECRET not configured — internal token signing is required to process integration tasks in production.\",\n };\n }\n // Dev: fall through unsigned (the atomic claim still gates double-processing).\n } else {\n const tok = extractBearerToken(\n getRequestHeader(event, \"authorization\"),\n );\n if (!tok || !verifyInternalToken(taskId, tok)) {\n setResponseStatus(event, 401);\n return { error: \"Invalid or expired internal token\" };\n }\n }\n\n // Atomic claim: only one invocation gets to process this task\n const task = await claimPendingTask(taskId);\n if (!task) {\n setResponseStatus(event, 200);\n return { ok: true, skipped: \"already-claimed-or-missing\" };\n }\n\n try {\n const adapter = adapterMap.get(task.platform);\n if (!adapter) {\n await markTaskFailed(taskId, `Unknown platform: ${task.platform}`);\n setResponseStatus(event, 404);\n return { error: \"Unknown platform\" };\n }\n const resources = await loadResourcesForPrompt(task.ownerEmail);\n await processIntegrationTask(task, {\n adapter,\n systemPrompt: baseSystemPrompt + resources,\n actions,\n model,\n apiKey: getApiKey(),\n engine: options?.engine,\n ownerEmail: task.ownerEmail,\n });\n await markTaskCompleted(taskId);\n await processDueA2AContinuations({\n adapters: adapterMap,\n limit: 2,\n }).catch((err) => {\n console.error(\n \"[integrations] A2A continuation opportunistic sweep failed:\",\n err,\n );\n });\n return { ok: true, taskId };\n } catch (err: any) {\n await markTaskFailed(\n taskId,\n err?.message\n ? String(err.message).slice(0, 1000)\n : \"processor failed\",\n );\n // Log the detail server-side; never return the raw error message\n // to the caller. Raw messages have leaked DB error codes, schema\n // names, and stack hints in the past (L3 in the webhook security\n // audit). Sentry / log providers still see the full error.\n console.error(\"[integrations] process-task failure:\", err);\n setResponseStatus(event, 500);\n return { error: \"Internal task failed\" };\n }\n }),\n );\n\n // ─── Process deferred A2A continuation ──────────────────────────\n // POST /_agent-native/integrations/process-a2a-continuation\n // Internal endpoint invoked when call-agent timed out inside an\n // integration processor but the remote A2A task kept running.\n h3.use(\n `${P}/process-a2a-continuation`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n\n const body = (await readBody(event)) as { continuationId?: string };\n const continuationId = body?.continuationId;\n if (!continuationId) {\n setResponseStatus(event, 400);\n return { error: \"continuationId required\" };\n }\n\n if (!process.env.A2A_SECRET) {\n if (process.env.NODE_ENV === \"production\") {\n setResponseStatus(event, 503);\n return {\n error:\n \"A2A_SECRET not configured — internal token signing is required to process A2A continuations in production.\",\n };\n }\n } else {\n const tok = extractBearerToken(\n getRequestHeader(event, \"authorization\"),\n );\n if (!tok || !verifyInternalToken(continuationId, tok)) {\n setResponseStatus(event, 401);\n return { error: \"Invalid or expired internal token\" };\n }\n }\n\n try {\n await processA2AContinuationById(continuationId, {\n adapters: adapterMap,\n });\n } catch (err: any) {\n // Mark the continuation failed so it isn't left dangling, and surface\n // a 500 to the caller instead of leaking an unhandled rejection.\n await failA2AContinuation(\n continuationId,\n err?.message?.slice(0, 500) || \"continuation processing failed\",\n ).catch(() => {});\n console.error(\n \"[integrations] process-a2a-continuation failure:\",\n err,\n );\n setResponseStatus(event, 500);\n return { error: \"Failed to process A2A continuation\" };\n }\n return { ok: true, continuationId };\n }),\n );\n\n // ─── Per-platform catch-all ───────────────────────────────────\n // Handles: webhook, status, enable, disable, setup for each platform\n h3.use(\n `${P}`,\n defineEventHandler(async (event) => {\n const method = getMethod(event);\n // event.path is stripped to the remainder after the mount prefix\n const raw = (event.path || \"/\").split(\"?\")[0].replace(/^\\//, \"\");\n const parts = raw.split(\"/\").filter(Boolean);\n\n // Already handled by the dedicated /status route above\n if (parts[0] === \"status\" && parts.length === 1) return;\n // Already handled by the dedicated /task-queue/status route above\n if (parts[0] === \"task-queue\") return;\n // Already handled by the dedicated /remote/* routes above\n if (parts[0] === \"remote\") return;\n // Already handled by the dedicated /process-task route above\n if (parts[0] === \"process-task\") return;\n // Already handled by the dedicated /process-a2a-continuation route above\n if (parts[0] === \"process-a2a-continuation\") return;\n\n const platform = parts[0];\n const action = parts[1]; // webhook, status, enable, disable, setup\n\n if (!platform) {\n setResponseStatus(event, 404);\n return { error: \"Platform required\" };\n }\n\n const adapter = adapterMap.get(platform);\n if (!adapter) {\n setResponseStatus(event, 404);\n return { error: `Unknown platform: ${platform}` };\n }\n\n // Set params for handlers that read them\n if (event.context) {\n event.context.params = {\n ...event.context.params,\n platform,\n };\n }\n\n // ─── GET /:platform/status ─────────────────────────────\n if (action === \"status\" && method === \"GET\") {\n if (!(await requireSession(event))) return { error: \"unauthorized\" };\n const baseUrl = getBaseUrl(event);\n const status = await adapter.getStatus(baseUrl);\n const config = await getIntegrationConfig(platform);\n status.enabled = !!config?.configData?.enabled;\n status.webhookUrl = `${baseUrl}${P}/${platform}/webhook`;\n if (!status.requiredEnvKeys) {\n try {\n status.requiredEnvKeys = adapter.getRequiredEnvKeys();\n } catch {\n status.requiredEnvKeys = [];\n }\n }\n return status;\n }\n\n // ─── POST /:platform/webhook ───────────────────────────\n if (action === \"webhook\" && method === \"POST\") {\n // Google Docs push notifications bypass the normal webhook flow —\n // they're opaque \"something changed\" pings, not message payloads.\n // We MUST verify the Pub/Sub OIDC token here. Without it, anyone\n // could POST any body to this URL and force a Drive changes pull\n // (H7 in the webhook security audit).\n if (platform === \"google-docs\") {\n const audience = process.env.GOOGLE_DOCS_PUSH_AUDIENCE;\n if (!audience) {\n if (process.env.NODE_ENV === \"production\") {\n // Fail closed in prod so a misconfigured deployment surfaces\n // in Pub/Sub's delivery metrics rather than silently\n // accepting anonymous requests.\n setResponseStatus(event, 503);\n return {\n ok: false,\n error:\n \"google-docs push endpoint disabled (audience not configured)\",\n };\n }\n // Dev: keep the loose posture so contributors can play with the\n // integration locally without configuring Pub/Sub.\n handlePushNotification().catch((err) => {\n console.error(\"[google-docs] Push handler error:\", err);\n });\n return \"ok\";\n }\n const authHeader = getRequestHeader(event, \"authorization\") || \"\";\n try {\n await verifyGoogleDocsPushToken(authHeader);\n } catch (err: any) {\n console.warn(\n `[google-docs] OIDC verify failed: ${err?.message ?? String(err)}`,\n );\n setResponseStatus(event, 401);\n return { ok: false, error: \"unauthorized\" };\n }\n handlePushNotification().catch((err) => {\n console.error(\"[google-docs] Push handler error:\", err);\n });\n return \"ok\";\n }\n\n // Handle platform verification challenges (e.g. Slack url_verification)\n // before checking enable state or parsing the message.\n const verification = await adapter.handleVerification(event);\n if (verification.handled) {\n return verification.response ?? \"ok\";\n }\n\n const config = await getIntegrationConfig(platform);\n if (!config?.configData?.enabled) {\n setResponseStatus(event, 404);\n return { error: `Integration ${platform} is not enabled` };\n }\n\n // Verify the webhook signature BEFORE parsing. We pre-parse the\n // body here (so handleWebhook can skip its second readBody, which\n // hangs on streaming providers), and that means handleWebhook's\n // own verifyWebhook step is bypassed. Without this call anyone\n // could POST a forged Slack/Telegram/email payload.\n const isValid = await adapter.verifyWebhook(event);\n if (!isValid) {\n setResponseStatus(event, 401);\n return { error: \"Invalid webhook signature\" };\n }\n\n const incoming = await adapter.parseIncomingMessage(event);\n if (!incoming) {\n setResponseStatus(event, 200);\n return \"ok\";\n }\n let owner = `integration@${platform}`;\n if (options?.resolveOwner) {\n try {\n owner = await options.resolveOwner(incoming);\n } catch (err) {\n console.error(\n `[integrations] resolveOwner failed, using default:`,\n err,\n );\n }\n }\n const resources = await loadResourcesForPrompt(owner);\n const systemPrompt = baseSystemPrompt + resources;\n const result = await handleWebhook(event, {\n adapter,\n systemPrompt,\n actions,\n model,\n apiKey: getApiKey(),\n engine: options?.engine,\n appId: options?.appId,\n ownerEmail: owner,\n beforeProcess: options?.beforeProcess,\n incoming,\n });\n setResponseStatus(event, result.status);\n return result.body;\n }\n\n // ─── POST /:platform/enable ────────────────────────────\n if (action === \"enable\" && method === \"POST\") {\n const adminCheck = await checkOrgAdmin(event);\n if (adminCheck.ok === false) return { error: adminCheck.error };\n // Stamp the org-admin who toggled this so downstream code can\n // tell who is responsible — useful for audit logs even though\n // the row itself remains deployment-wide.\n const session = await getSession(event).catch(() => null);\n await saveIntegrationConfig(\n platform,\n { enabled: true },\n \"default\",\n session?.email,\n );\n return { ok: true, platform, enabled: true };\n }\n\n // ─── POST /:platform/disable ───────────────────────────\n if (action === \"disable\" && method === \"POST\") {\n const adminCheck = await checkOrgAdmin(event);\n if (adminCheck.ok === false) return { error: adminCheck.error };\n const session = await getSession(event).catch(() => null);\n await saveIntegrationConfig(\n platform,\n { enabled: false },\n \"default\",\n session?.email,\n );\n return { ok: true, platform, enabled: false };\n }\n\n // ─── POST /:platform/setup ─────────────────────────────\n if (action === \"setup\" && method === \"POST\") {\n const adminCheck = await checkOrgAdmin(event);\n if (adminCheck.ok === false) return { error: adminCheck.error };\n if (platform === \"telegram\") {\n const baseUrl = getBaseUrl(event);\n const webhookUrl = `${baseUrl}${P}/telegram/webhook`;\n const token = process.env.TELEGRAM_BOT_TOKEN;\n if (!token) {\n setResponseStatus(event, 400);\n return { error: \"TELEGRAM_BOT_TOKEN not configured\" };\n }\n try {\n const res = await fetch(\n `https://api.telegram.org/bot${token}/setWebhook`,\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ url: webhookUrl }),\n },\n );\n const data = await res.json();\n return { ok: true, platform, webhookUrl, result: data };\n } catch (err: any) {\n setResponseStatus(event, 500);\n return { error: err.message };\n }\n }\n return { ok: true, platform, message: \"No setup required\" };\n }\n\n setResponseStatus(event, 404);\n return { error: \"Not found\" };\n }),\n );\n\n // ─── Start pending-tasks retry sweeper ────────────────────────\n // Sweeps the integration_pending_tasks queue every 60s and re-fires the\n // processor for any tasks that got stuck (initial dispatch lost or\n // processor killed mid-flight). No-ops gracefully if the queue table\n // hasn't been created yet on this deployment.\n startPendingTasksRetryJob({\n webhookBaseUrl: process.env.WEBHOOK_BASE_URL,\n });\n startA2AContinuationRetryJob(adapterMap);\n startRemoteCommandsRetryJob();\n\n // ─── Start Google Docs poller/push ────────────────────────────\n if (adapterMap.has(\"google-docs\")) {\n // Defer startup slightly so the server is fully ready\n setTimeout(() => {\n // We don't know the base URL at plugin init time — it depends on\n // the incoming request. For push mode, the webhook URL needs to be\n // resolved. We pass it as a special option; the poller will attempt\n // to register a watch when the first request reveals the base URL,\n // or use the WEBHOOK_BASE_URL env var if set.\n const baseUrl = process.env.WEBHOOK_BASE_URL;\n const webhookUrl = baseUrl\n ? `${withConfiguredAppBasePath(baseUrl)}${P}/google-docs/webhook`\n : undefined;\n\n startGoogleDocsPoller({\n systemPrompt: baseSystemPrompt,\n actions,\n model: model ?? \"\",\n apiKey: getApiKey(),\n ownerEmail: \"integration@google-docs\",\n webhookUrl,\n });\n }, 2000);\n }\n\n if (process.env.DEBUG)\n console.log(\n `[integrations] Mounted integration routes for: ${adapters.map((a) => a.platform).join(\", \")}`,\n );\n };\n}\n\n/**\n * Default integrations plugin — auto-mounts all adapters.\n */\nexport const defaultIntegrationsPlugin = createIntegrationsPlugin();\n\n/** Extract base URL from the request */\nfunction getBaseUrl(event: any): string {\n try {\n const headers = event.node?.req?.headers || event.headers || {};\n const getHeader = (name: string) =>\n typeof headers.get === \"function\"\n ? headers.get(name)\n : (headers as Record<string, string>)[name];\n const proto = getHeader(\"x-forwarded-proto\") || \"http\";\n const host = getHeader(\"host\") || \"localhost:3000\";\n return withConfiguredAppBasePath(`${proto}://${host}`);\n } catch {\n return withConfiguredAppBasePath(\"http://localhost:3000\");\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n"]}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/integrations/plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import { defineEventHandler, setResponseStatus, getMethod, getQuery } from \"h3\";\nimport { createRemoteJWKSet, jwtVerify } from \"jose\";\nimport { FRAMEWORK_ROUTE_PREFIX } from \"../server/core-routes-plugin.js\";\nimport {\n getH3App,\n markDefaultPluginProvided,\n} from \"../server/framework-request-handler.js\";\nimport type {\n PlatformAdapter,\n IntegrationsPluginOptions,\n IntegrationStatus,\n} from \"./types.js\";\nimport { handleWebhook, processIntegrationTask } from \"./webhook-handler.js\";\nimport {\n claimPendingTask,\n markTaskCompleted,\n markTaskFailed,\n} from \"./pending-tasks-store.js\";\nimport { extractBearerToken, verifyInternalToken } from \"./internal-token.js\";\nimport { readBody } from \"../server/h3-helpers.js\";\nimport { getRequestHeader } from \"h3\";\nimport { getIntegrationConfig, saveIntegrationConfig } from \"./config-store.js\";\nimport { slackAdapter } from \"./adapters/slack.js\";\nimport { telegramAdapter } from \"./adapters/telegram.js\";\nimport { whatsappAdapter } from \"./adapters/whatsapp.js\";\nimport { googleDocsAdapter } from \"./adapters/google-docs.js\";\nimport { emailAdapter } from \"./adapters/email.js\";\nimport {\n startGoogleDocsPoller,\n handlePushNotification,\n} from \"./google-docs-poller.js\";\nimport { startPendingTasksRetryJob } from \"./pending-tasks-retry-job.js\";\nimport {\n processA2AContinuationById,\n processDueA2AContinuations,\n} from \"./a2a-continuation-processor.js\";\nimport { failA2AContinuation } from \"./a2a-continuations-store.js\";\nimport { loadResourcesForPrompt } from \"../server/agent-chat-plugin.js\";\nimport { getTaskQueueStats } from \"./task-queue-stats.js\";\nimport { getSession } from \"../server/auth.js\";\nimport { getOrgContext } from \"../org/context.js\";\nimport { withConfiguredAppBasePath } from \"../server/app-base-path.js\";\nimport {\n authenticateRemoteDeviceToken,\n createRemoteDevice,\n getRemoteDeviceForOwner,\n listRemoteDevicesForOwner,\n revokeRemoteDeviceForOwner,\n toPublicRemoteDevice,\n unregisterRemoteDevice,\n updateRemoteDeviceDetails,\n} from \"./remote-devices-store.js\";\nimport {\n claimNextRemoteCommand,\n enqueueRemoteCommand as enqueueRemoteCommandRow,\n isRemoteCommandKind,\n listRemoteCommandsForOwner,\n updateRemoteCommandResult,\n} from \"./remote-commands-store.js\";\nimport {\n insertRemoteRunEvents,\n listRemoteRunEvents,\n} from \"./remote-run-events-store.js\";\nimport {\n listRemotePushNotificationsForOwner,\n listRemotePushRegistrationsForOwner,\n queueRemotePushNotifications,\n toPublicRemotePushRegistration,\n unregisterRemotePushRegistrationForOwner,\n upsertRemotePushRegistration,\n} from \"./remote-push-store.js\";\nimport { startRemoteCommandsRetryJob } from \"./remote-retry-job.js\";\nimport type {\n RemoteCommand,\n RemoteCommandKind,\n RemoteDevice,\n} from \"./remote-types.js\";\n\ntype NitroPluginDef = (nitroApp: any) => void | Promise<void>;\n\nlet a2aContinuationRetryInterval: ReturnType<typeof setInterval> | null = null;\n\nfunction startA2AContinuationRetryJob(\n adapters: Map<string, PlatformAdapter>,\n): void {\n if (a2aContinuationRetryInterval) return;\n const initialTimer = setTimeout(() => {\n processDueA2AContinuations({ adapters }).catch((err) => {\n console.error(\"[integrations] A2A continuation retry job failed:\", err);\n });\n }, 10_000);\n unrefTimer(initialTimer);\n a2aContinuationRetryInterval = setInterval(() => {\n processDueA2AContinuations({ adapters }).catch((err) => {\n console.error(\"[integrations] A2A continuation retry job failed:\", err);\n });\n }, 60_000);\n unrefTimer(a2aContinuationRetryInterval);\n}\n\nfunction unrefTimer(timer: ReturnType<typeof setInterval>): void {\n (timer as unknown as { unref?: () => void }).unref?.();\n}\n\n// ─── Google Pub/Sub OIDC verifier (for Drive changes.watch push) ────────────\n// Cache Google's public keys for OIDC verification. jose handles TTL +\n// refresh internally — same pattern as templates/mail/.../gmail/push.post.ts.\n// Used to verify Google Pub/Sub push notifications carry a valid bearer token\n// signed by a configured service account. Without this, the webhook is wide\n// open to anonymous callers who can force a Drive sync (H7 in the audit).\nconst GOOGLE_JWKS = createRemoteJWKSet(\n new URL(\"https://www.googleapis.com/oauth2/v3/certs\"),\n);\nconst GOOGLE_ISSUERS = [\"https://accounts.google.com\", \"accounts.google.com\"];\n\n/**\n * Verify a Pub/Sub OIDC bearer token. Throws on any verification failure.\n * Requires GOOGLE_DOCS_PUSH_AUDIENCE and GOOGLE_DOCS_PUSH_SIGNER_EMAIL to be\n * set; if either is missing in production, the webhook handler refuses the\n * request entirely (so a misconfigured deployment fails closed, surfacing in\n * Pub/Sub's delivery metrics).\n */\nasync function verifyGoogleDocsPushToken(authHeader: string): Promise<void> {\n if (!authHeader.startsWith(\"Bearer \")) {\n throw new Error(\"missing bearer token\");\n }\n const token = authHeader.slice(7);\n const audience = process.env.GOOGLE_DOCS_PUSH_AUDIENCE;\n if (!audience) {\n throw new Error(\"GOOGLE_DOCS_PUSH_AUDIENCE not configured\");\n }\n const { payload } = await jwtVerify(token, GOOGLE_JWKS, {\n issuer: GOOGLE_ISSUERS,\n audience,\n });\n if (payload.email_verified !== true) {\n throw new Error(\"email_verified claim is not true\");\n }\n // Pin to a specific service account — without this, any Google-issued\n // token with the right audience could trigger a Drive sync.\n const expectedSigner = process.env.GOOGLE_DOCS_PUSH_SIGNER_EMAIL;\n if (!expectedSigner) {\n throw new Error(\"GOOGLE_DOCS_PUSH_SIGNER_EMAIL not configured\");\n }\n if (payload.email !== expectedSigner) {\n throw new Error(`unexpected signer: ${String(payload.email)}`);\n }\n}\n\n/** Built-in adapters, instantiated lazily */\nfunction getDefaultAdapters(): PlatformAdapter[] {\n return [\n slackAdapter(),\n telegramAdapter(),\n whatsappAdapter(),\n googleDocsAdapter(),\n emailAdapter(),\n ];\n}\n\nconst INTEGRATION_SYSTEM_PROMPT = `You are an AI agent responding via a messaging platform integration (Slack, Telegram, WhatsApp, etc.).\n\nYou have the same capabilities as the web chat agent. Use your tools to help the user.\n\nKeep responses concise — messaging platforms have character limits and users expect shorter replies than in a web interface. Use markdown sparingly (bold and lists are fine, but avoid complex formatting that may not render well on all platforms).\n\nIf a task requires many steps, summarize what you did rather than streaming every detail.`;\n\ntype RemoteCodeCommandEnvelope = {\n kind?: unknown;\n ownerEmail?: unknown;\n orgId?: unknown;\n command?: unknown;\n source?: unknown;\n};\n\nconst REMOTE_DEVICE_ONLINE_MS = 90_000;\n\nexport async function enqueueRemoteCommand(\n envelope: RemoteCodeCommandEnvelope,\n): Promise<Record<string, unknown>> {\n const ownerEmail = readString(envelope.ownerEmail);\n if (!ownerEmail) throw new Error(\"ownerEmail is required\");\n const hasOrgId = Object.prototype.hasOwnProperty.call(envelope, \"orgId\");\n const orgId = hasOrgId ? (readString(envelope.orgId) ?? null) : undefined;\n const command = readObject(envelope.command);\n if (!command) throw new Error(\"command is required\");\n const commandType = readString(command.type);\n const commands = await listRemoteCommandsForOwner({\n ownerEmail,\n ...(hasOrgId ? { orgId } : {}),\n limit: 50,\n });\n\n if (commandType === \"list\") {\n return {\n ok: true,\n runs: commands.map(remoteCommandToRunSummary).filter(Boolean),\n hostOnline: await hasOnlineRemoteDevice(ownerEmail, orgId),\n };\n }\n\n if (commandType === \"status\") {\n const runRef = readString(command.runRef);\n const run = runRef\n ? commands.map(remoteCommandToRunSummary).find((item) => {\n const candidate = item as Record<string, unknown>;\n return candidate.id === runRef || candidate.runId === runRef;\n })\n : undefined;\n const hostOnline = await hasOnlineRemoteDevice(ownerEmail, orgId);\n return {\n ok: true,\n hostOnline,\n hostStatus: hostOnline ? \"online\" : \"offline\",\n ...(run ? { run } : {}),\n };\n }\n\n const devices = await listRemoteDevicesForOwner({\n ownerEmail,\n ...(hasOrgId ? { orgId } : {}),\n status: \"active\",\n limit: 10,\n });\n const requestedDeviceId =\n readString(command.hostId) ?? readString(command.deviceId);\n const device =\n (requestedDeviceId\n ? devices.find((candidate) => candidate.id === requestedDeviceId)\n : undefined) ?? devices[0];\n if (!device) {\n return {\n ok: false,\n hostOnline: false,\n hostStatus: \"offline\",\n error: \"No paired computer is available for code-agent commands.\",\n };\n }\n\n const source = readObject(envelope.source);\n const kind = remoteCodeCommandKind(commandType);\n if (!kind) throw new Error(`Unsupported code-agent command: ${commandType}`);\n const row = await enqueueRemoteCommandRow({\n deviceId: device.id,\n ownerEmail,\n orgId: device.orgId ?? orgId ?? null,\n kind,\n params: remoteCodeCommandParams(command),\n platform: readString(source?.platform) ?? null,\n externalThreadId: readString(source?.externalThreadId) ?? null,\n });\n const hostOnline = isRemoteDeviceOnline(device);\n return {\n ok: true,\n commandId: row.id,\n requestId: row.id,\n hostOnline,\n hostStatus: hostOnline ? \"online\" : \"offline\",\n message:\n commandType === \"create\"\n ? hostOnline\n ? `Queued code run (${row.id}).`\n : `Queued code run (${row.id}). Your computer looks offline or asleep, so it will pick this up when it wakes.`\n : undefined,\n };\n}\n\nfunction remoteCodeCommandKind(\n commandType: string | undefined,\n): RemoteCommandKind | null {\n switch (commandType) {\n case \"create\":\n return \"create-run\";\n case \"continue\":\n return \"append-followup\";\n case \"approve\":\n return \"approve\";\n case \"deny\":\n return \"deny\";\n case \"stop\":\n return \"stop\";\n default:\n return null;\n }\n}\n\nfunction remoteCodeCommandParams(\n command: Record<string, unknown>,\n): Record<string, unknown> {\n const type = readString(command.type);\n if (type === \"create\") {\n return {\n prompt: readString(command.prompt) ?? \"\",\n title: readString(command.title),\n cwd: readString(command.cwd),\n goalId: readString(command.goalId) ?? \"task\",\n permissionMode: readString(command.permissionMode),\n };\n }\n if (type === \"continue\") {\n return {\n runId: readString(command.runRef) ?? readString(command.runId),\n prompt: readString(command.text) ?? readString(command.prompt),\n permissionMode: readString(command.permissionMode),\n };\n }\n if (type === \"approve\" || type === \"deny\") {\n const id = readString(command.approvalId) ?? readString(command.runId);\n return { runId: id, approvalId: id };\n }\n if (type === \"stop\") {\n return { runId: readString(command.runRef) ?? readString(command.runId) };\n }\n return {};\n}\n\nfunction enqueueBodyToRemoteCodeCommand(\n body: Record<string, unknown>,\n): Record<string, unknown> | null {\n const direct = readObject(body.command);\n if (body.kind === \"code-agent\" && direct) return direct;\n\n const operation = readString(body.operation) ?? readString(body.type);\n const payload = readObject(body.payload) ?? body;\n if (!operation?.startsWith(\"code-agent.\")) return null;\n\n if (operation === \"code-agent.run.create\") {\n return {\n type: \"create\",\n prompt: payload.prompt,\n title: payload.title,\n hostId: payload.hostId,\n deviceId: payload.deviceId,\n cwd: payload.cwd,\n goalId: payload.goalId,\n permissionMode: payload.permissionMode,\n };\n }\n if (operation === \"code-agent.run.follow-up\") {\n return {\n type: \"continue\",\n runRef: payload.runId,\n text: payload.prompt ?? payload.message,\n hostId: payload.hostId,\n deviceId: payload.deviceId,\n permissionMode: payload.permissionMode,\n };\n }\n if (operation === \"code-agent.pending-command.decide\") {\n return {\n type: payload.decision === \"deny\" ? \"deny\" : \"approve\",\n approvalId: payload.commandId ?? payload.runId,\n runId: payload.runId,\n hostId: payload.hostId,\n deviceId: payload.deviceId,\n };\n }\n if (operation === \"code-agent.run.stop\") {\n return {\n type: \"stop\",\n runRef: payload.runId,\n hostId: payload.hostId,\n deviceId: payload.deviceId,\n };\n }\n return null;\n}\n\nfunction remoteCommandToRunSummary(\n command: RemoteCommand,\n): Record<string, unknown> | null {\n const result = readObject(command.result);\n const nestedResult = readObject(result?.result) ?? result;\n const run = readObject(nestedResult?.run);\n if (run) {\n return {\n ...run,\n commandId: command.id,\n hostId: command.deviceId,\n status: readString(run.status) ?? command.status,\n updatedAt: readString(run.updatedAt) ?? command.updatedAt,\n };\n }\n if (command.kind !== \"create-run\") return null;\n const params = readObject(command.params) ?? {};\n return {\n id: command.id,\n runId: command.id,\n hostId: command.deviceId,\n title:\n readString(params.title) ?? readString(params.prompt) ?? \"Queued run\",\n prompt: readString(params.prompt),\n status: command.status === \"failed\" ? \"errored\" : \"queued\",\n createdAt: command.createdAt,\n updatedAt: command.updatedAt,\n metadata: { remoteCommandId: command.id },\n };\n}\n\nfunction readObject(value: unknown): Record<string, unknown> | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction isRemoteDeviceOnline(device: { lastSeenAt: number | null }): boolean {\n return typeof device.lastSeenAt === \"number\"\n ? Date.now() - device.lastSeenAt <= REMOTE_DEVICE_ONLINE_MS\n : false;\n}\n\nasync function hasOnlineRemoteDevice(\n ownerEmail: string,\n orgId: string | null | undefined,\n): Promise<boolean> {\n const hasOrgId = orgId !== undefined;\n const devices = await listRemoteDevicesForOwner({\n ownerEmail,\n ...(hasOrgId ? { orgId } : {}),\n status: \"active\",\n limit: 10,\n });\n return devices.some(isRemoteDeviceOnline);\n}\n\nfunction remoteDeviceToHost(device: RemoteDevice): Record<string, unknown> {\n const online = device.status === \"active\" && isRemoteDeviceOnline(device);\n return {\n id: device.id,\n name: device.label,\n label: device.label,\n status:\n device.status === \"active\" ? (online ? \"online\" : \"offline\") : \"revoked\",\n lastSeenAt: device.lastSeenAt\n ? new Date(device.lastSeenAt).toISOString()\n : undefined,\n platform: device.platform ?? \"desktop\",\n appVersion: device.appVersion ?? undefined,\n hostName: device.hostName ?? undefined,\n metadata: device.metadata ?? undefined,\n device: toPublicRemoteDevice(device),\n };\n}\n\nfunction mountedPathParts(event: any, mountSuffix: string): string[] {\n const rawPath = String(\n event.path ?? event.url?.pathname ?? event.node?.req?.url ?? \"/\",\n ).split(\"?\")[0];\n const normalized = rawPath.replace(/^\\/+/, \"\");\n const marker = mountSuffix.replace(/^\\/+/, \"\");\n const markerIndex = normalized.indexOf(marker);\n const suffix =\n markerIndex >= 0\n ? normalized.slice(markerIndex + marker.length)\n : normalized;\n return suffix\n .split(\"/\")\n .filter(Boolean)\n .map((part) => decodeURIComponent(part));\n}\n\nfunction remoteCommandPushPayload(\n command: RemoteCommand,\n): Record<string, unknown> {\n const result = readObject(command.result);\n const status = command.status;\n const title =\n status === \"completed\"\n ? \"Remote run completed\"\n : status === \"failed\"\n ? \"Remote run failed\"\n : \"Remote run updated\";\n return {\n title,\n body: command.errorMessage ?? readString(result?.message),\n commandId: command.id,\n hostId: command.deviceId,\n kind: command.kind,\n status,\n result: command.result,\n updatedAt: command.updatedAt,\n };\n}\n\n/**\n * Creates a Nitro plugin that mounts messaging platform integration webhook routes.\n *\n * Routes:\n * POST /_agent-native/integrations/:platform/webhook — receive platform webhooks\n * GET /_agent-native/integrations/status — all integrations status\n * GET /_agent-native/integrations/:platform/status — single platform status\n * POST /_agent-native/integrations/:platform/enable — enable integration\n * POST /_agent-native/integrations/:platform/disable — disable integration\n * POST /_agent-native/integrations/:platform/setup — platform-specific setup\n */\nexport function createIntegrationsPlugin(\n options?: IntegrationsPluginOptions,\n): NitroPluginDef {\n return async (nitroApp: any) => {\n markDefaultPluginProvided(nitroApp, \"integrations\");\n const adapters = options?.adapters ?? getDefaultAdapters();\n const adapterMap = new Map<string, PlatformAdapter>();\n for (const adapter of adapters) {\n adapterMap.set(adapter.platform, adapter);\n }\n\n const model = options?.model;\n // Read the API key at REQUEST time, not plugin-init time. On Netlify\n // Lambda the plugin module loads in a context where env vars from the\n // site's runtime config may not yet be populated, so capturing at\n // init can leave us with an empty string forever. The getter\n // re-resolves on every webhook so freshly-set secrets work without\n // a redeploy.\n const getApiKey = () =>\n options?.apiKey ?? process.env.ANTHROPIC_API_KEY ?? \"\";\n\n // Build the system prompt\n const baseSystemPrompt = options?.systemPrompt ?? INTEGRATION_SYSTEM_PROMPT;\n\n // Resolve actions — auto-include call-agent so the integration agent can\n // delegate to other A2A apps, matching the behavior of the agent-chat plugin.\n const localActions = options?.actions ?? {};\n let callAgentEntry: Record<string, unknown> = {};\n try {\n const mod = await import(\"../scripts/call-agent.js\");\n callAgentEntry = {\n \"call-agent\": {\n tool: mod.tool,\n run: (args: Record<string, string>, context: unknown) =>\n mod.run(args, context as any, options?.appId),\n },\n };\n } catch {\n // call-agent script not available — skip\n }\n const actions = {\n ...localActions,\n ...callAgentEntry,\n } as typeof localActions;\n\n const h3 = getH3App(nitroApp);\n const P = `${FRAMEWORK_ROUTE_PREFIX}/integrations`;\n\n async function requireSession(event: any): Promise<boolean> {\n const session = await getSession(event).catch(() => null);\n if (session?.email) return true;\n setResponseStatus(event, 401);\n return false;\n }\n\n async function requireSessionContext(\n event: any,\n ): Promise<{ ownerEmail: string; orgId: string | null } | null> {\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return null;\n }\n const orgCtx = await getOrgContext(event).catch(() => null);\n return {\n ownerEmail: session.email,\n orgId: orgCtx?.orgId ?? session.orgId ?? null,\n };\n }\n\n async function requireRemoteDevice(event: any) {\n const token = extractBearerToken(\n getRequestHeader(event, \"authorization\"),\n );\n const device = await authenticateRemoteDeviceToken(token);\n if (device) return device;\n setResponseStatus(event, 401);\n return null;\n }\n\n /**\n * Gate destructive integration writes (enable/disable, setup,\n * setIntegrationConfig…) behind an org-owner/admin check.\n *\n * `integration_configs` is keyed `(platform, config_key)` with no\n * owner column in the PRIMARY KEY — so this row is effectively\n * deployment-wide. Any signed-in user toggling /enable or /disable\n * would otherwise affect every other user (a regular org member could\n * disable Slack/email org-wide, write a malicious allowlist for\n * inbound email, etc.). This check enforces that only owners and\n * admins of the user's active org may mutate integration config.\n *\n * Solo / no-org sessions (i.e. ctx.orgId == null) are allowed — that's\n * the local-dev / single-user case where there's no privilege gradient\n * to enforce. The deployment is single-tenant by definition there.\n *\n * Returns an `{ ok: true }` on pass, or `{ ok: false, error }` with the\n * status already set on the event. The error string lines up with the\n * status code (401 → \"unauthorized\"; 403 → admin-required message).\n */\n async function checkOrgAdmin(\n event: any,\n ): Promise<{ ok: true } | { ok: false; error: string }> {\n const session = await getSession(event).catch(() => null);\n if (!session?.email) {\n setResponseStatus(event, 401);\n return { ok: false, error: \"unauthorized\" };\n }\n const ctx = await getOrgContext(event).catch(() => null);\n // Solo (no org membership) — single-tenant flow, allow.\n if (!ctx?.orgId) return { ok: true };\n if (ctx.role === \"owner\" || ctx.role === \"admin\") return { ok: true };\n setResponseStatus(event, 403);\n return {\n ok: false,\n error:\n \"Only organization owners and admins can mutate integration config\",\n };\n }\n\n // ─── Status endpoint (all integrations) ───────────────────────\n h3.use(\n `${P}/status`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n if (!(await requireSession(event))) return { error: \"unauthorized\" };\n const baseUrl = getBaseUrl(event);\n const statuses: IntegrationStatus[] = [];\n for (const adapter of adapters) {\n const status = await adapter.getStatus(baseUrl);\n const config = await getIntegrationConfig(adapter.platform);\n status.enabled = !!config?.configData?.enabled;\n status.webhookUrl = `${baseUrl}${P}/${adapter.platform}/webhook`;\n if (!status.requiredEnvKeys) {\n try {\n status.requiredEnvKeys = adapter.getRequiredEnvKeys();\n } catch {\n status.requiredEnvKeys = [];\n }\n }\n statuses.push(status);\n }\n return statuses;\n }),\n );\n\n // ─── Task queue status (observability) ───────────────────────\n // GET /_agent-native/integrations/task-queue/status\n // Returns counts + recent failures for the integration_pending_tasks\n // queue. Requires a normal session — this exposes operational data, not\n // platform secrets. If the queue table doesn't exist yet (no inbound\n // webhook has been processed), returns zeroed stats rather than 500.\n h3.use(\n `${P}/task-queue/status`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n if (!(await requireSession(event))) return { error: \"unauthorized\" };\n try {\n return await getTaskQueueStats();\n } catch (err: any) {\n setResponseStatus(event, 500);\n return { error: err?.message ?? String(err) };\n }\n }),\n );\n\n // ─── Remote relay endpoints ──────────────────────────────────\n // These routes allow a signed-in browser session to enqueue work for a\n // registered remote device, and the device to claim/complete that work\n // using its one-time-issued bearer token. State lives entirely in SQL so\n // long polling can safely degrade to short polling on serverless hosts.\n h3.use(\n `${P}/remote/register`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const body = (await readBody(event)) as {\n label?: unknown;\n platform?: unknown;\n appVersion?: unknown;\n version?: unknown;\n hostName?: unknown;\n hostname?: unknown;\n metadata?: unknown;\n };\n const label =\n typeof body.label === \"string\" && body.label.trim()\n ? body.label.trim().slice(0, 200)\n : \"Remote device\";\n const { device, token } = await createRemoteDevice({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n label,\n platform: readString(body.platform),\n appVersion: readString(body.appVersion) ?? readString(body.version),\n hostName: readString(body.hostName) ?? readString(body.hostname),\n metadata: readObject(body.metadata),\n });\n return { device: toPublicRemoteDevice(device), token };\n }),\n );\n\n h3.use(\n `${P}/remote/hosts`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const devices = await listRemoteDevicesForOwner({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n limit: 50,\n });\n const hosts = devices.map(remoteDeviceToHost);\n const parts = mountedPathParts(event, \"remote/hosts\");\n if (parts[0]) {\n const host = hosts.find((candidate) => candidate.id === parts[0]);\n if (!host) {\n setResponseStatus(event, 404);\n return { error: \"host not found\" };\n }\n return { host, device: host.device };\n }\n return { hosts, devices: hosts };\n }),\n );\n\n h3.use(\n `${P}/remote/devices`,\n defineEventHandler(async (event) => {\n const method = getMethod(event);\n if (method !== \"GET\" && method !== \"DELETE\" && method !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const parts = mountedPathParts(event, \"remote/devices\");\n\n if (method === \"GET\") {\n if (!parts[0]) {\n const devices = await listRemoteDevicesForOwner({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n limit: 100,\n });\n return {\n devices: devices.map(toPublicRemoteDevice),\n hosts: devices.map(remoteDeviceToHost),\n };\n }\n const device = await getRemoteDeviceForOwner({\n id: parts[0],\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n });\n if (!device) {\n setResponseStatus(event, 404);\n return { error: \"device not found\" };\n }\n return {\n device: toPublicRemoteDevice(device),\n host: remoteDeviceToHost(device),\n };\n }\n\n const id = parts[0];\n const action = parts[1];\n if (!id || (method === \"POST\" && action !== \"revoke\")) {\n setResponseStatus(event, 404);\n return { error: \"not found\" };\n }\n const device = await revokeRemoteDeviceForOwner({\n id,\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n });\n if (!device) {\n setResponseStatus(event, 404);\n return { error: \"device not found\" };\n }\n return { ok: true, device: toPublicRemoteDevice(device) };\n }),\n );\n\n h3.use(\n `${P}/remote/unregister`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\" && getMethod(event) !== \"DELETE\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const device = await requireRemoteDevice(event);\n if (!device) return { error: \"unauthorized\" };\n await unregisterRemoteDevice(device.id);\n return { ok: true, deviceId: device.id };\n }),\n );\n\n h3.use(\n `${P}/remote/heartbeat`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const device = await requireRemoteDevice(event);\n if (!device) return { error: \"unauthorized\" };\n const body = (await readBody(event)) as Record<string, unknown>;\n const updated = await updateRemoteDeviceDetails({\n id: device.id,\n label: readString(body.label),\n platform: readString(body.platform),\n appVersion: readString(body.appVersion) ?? readString(body.version),\n hostName: readString(body.hostName) ?? readString(body.hostname),\n metadata: readObject(body.metadata),\n });\n return {\n ok: true,\n device: updated ? toPublicRemoteDevice(updated) : null,\n };\n }),\n );\n\n h3.use(\n `${P}/remote/push/register`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const body = (await readBody(event)) as Record<string, unknown>;\n const token = readString(body.token);\n if (!token) {\n setResponseStatus(event, 400);\n return { error: \"token required\" };\n }\n const registration = await upsertRemotePushRegistration({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n provider: readString(body.provider) ?? \"unknown\",\n token,\n platform: readString(body.platform),\n clientDeviceId:\n readString(body.clientDeviceId) ?? readString(body.deviceId),\n label: readString(body.label),\n });\n return {\n registration: toPublicRemotePushRegistration(registration),\n };\n }),\n );\n\n h3.use(\n `${P}/remote/push/registrations`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const registrations = await listRemotePushRegistrationsForOwner({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n includeInactive: getQuery(event).includeInactive === \"true\",\n limit: 100,\n });\n return {\n registrations: registrations.map(toPublicRemotePushRegistration),\n };\n }),\n );\n\n h3.use(\n `${P}/remote/push/unregister`,\n defineEventHandler(async (event) => {\n const method = getMethod(event);\n if (method !== \"POST\" && method !== \"DELETE\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const body = (await readBody(event)) as Record<string, unknown>;\n const removed = await unregisterRemotePushRegistrationForOwner({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n id: readString(body.id) ?? readString(body.registrationId),\n token: readString(body.token),\n });\n if (!removed) {\n setResponseStatus(event, 404);\n return { error: \"registration not found\" };\n }\n return { ok: true };\n }),\n );\n\n h3.use(\n `${P}/remote/push/notifications`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const query = getQuery(event);\n const status =\n query.status === \"delivered\" ||\n query.status === \"failed\" ||\n query.status === \"pending\"\n ? query.status\n : undefined;\n const notifications = await listRemotePushNotificationsForOwner({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n status,\n limit: Number(query.limit ?? 50) || 50,\n });\n return { notifications };\n }),\n );\n\n h3.use(\n `${P}/remote/runs`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const parts = mountedPathParts(event, \"remote/runs\");\n const commands = await listRemoteCommandsForOwner({\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n limit: 100,\n });\n\n if (parts.length === 0) {\n return {\n runs: commands.map(remoteCommandToRunSummary).filter(Boolean),\n };\n }\n\n const runId = decodeURIComponent(parts[0] ?? \"\");\n const match = commands.find((command) => {\n const run = remoteCommandToRunSummary(command);\n return (\n command.id === runId || run?.id === runId || run?.runId === runId\n );\n });\n if (!match) {\n setResponseStatus(event, 404);\n return { error: \"run not found\" };\n }\n const run = remoteCommandToRunSummary(match);\n\n if (parts[1] === \"transcript\") {\n const remoteRunId =\n readString(run?.runId) ??\n readString(run?.id) ??\n readString(match.id);\n const events = remoteRunId\n ? await listRemoteRunEvents({\n deviceId: match.deviceId,\n remoteRunId,\n limit: 1000,\n })\n : [];\n return {\n run,\n events: events.map((event) => event.event),\n };\n }\n\n if (parts.length === 1) return { run };\n setResponseStatus(event, 404);\n return { error: \"not found\" };\n }),\n );\n\n h3.use(\n `${P}/remote/enqueue`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const ctx = await requireSessionContext(event);\n if (!ctx) return { error: \"unauthorized\" };\n const body = (await readBody(event)) as {\n deviceId?: unknown;\n kind?: unknown;\n params?: unknown;\n platform?: unknown;\n externalThreadId?: unknown;\n operation?: unknown;\n payload?: unknown;\n command?: unknown;\n source?: unknown;\n };\n const highLevel = enqueueBodyToRemoteCodeCommand(body);\n if (highLevel) {\n return enqueueRemoteCommand({\n kind: \"code-agent\",\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId ?? undefined,\n command: highLevel,\n source: body.source ?? {\n platform:\n typeof body.platform === \"string\" ? body.platform : \"mobile\",\n externalThreadId:\n typeof body.externalThreadId === \"string\"\n ? body.externalThreadId\n : \"mobile\",\n },\n });\n }\n if (typeof body.deviceId !== \"string\" || !body.deviceId.trim()) {\n setResponseStatus(event, 400);\n return { error: \"deviceId required\" };\n }\n if (!isRemoteCommandKind(body.kind)) {\n setResponseStatus(event, 400);\n return { error: \"invalid command kind\" };\n }\n const device = await getRemoteDeviceForOwner({\n id: body.deviceId,\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n });\n if (!device) {\n setResponseStatus(event, 404);\n return { error: \"device not found\" };\n }\n if (device.status !== \"active\") {\n setResponseStatus(event, 410);\n return { error: \"device revoked\" };\n }\n const command = await enqueueRemoteCommandRow({\n deviceId: device.id,\n ownerEmail: ctx.ownerEmail,\n orgId: ctx.orgId,\n kind: body.kind,\n params: body.params ?? {},\n platform: typeof body.platform === \"string\" ? body.platform : null,\n externalThreadId:\n typeof body.externalThreadId === \"string\"\n ? body.externalThreadId\n : null,\n });\n return { command };\n }),\n );\n\n h3.use(\n `${P}/remote/poll`,\n defineEventHandler(async (event) => {\n const method = getMethod(event);\n if (method !== \"POST\" && method !== \"GET\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const device = await requireRemoteDevice(event);\n if (!device) return { error: \"unauthorized\" };\n const query = getQuery(event);\n const body =\n method === \"POST\"\n ? ((await readBody(event)) as { waitMs?: unknown })\n : {};\n const requestedWait =\n Number(body.waitMs ?? query.waitMs ?? query.wait_ms ?? 25_000) || 0;\n const waitMs = Math.max(0, Math.min(25_000, requestedWait));\n const deadline = Date.now() + waitMs;\n\n while (true) {\n const command = await claimNextRemoteCommand(device.id);\n if (command) return { command };\n const remaining = deadline - Date.now();\n if (remaining <= 0) return { command: null };\n await sleep(Math.min(1000, remaining));\n }\n }),\n );\n\n h3.use(\n `${P}/remote/result`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const device = await requireRemoteDevice(event);\n if (!device) return { error: \"unauthorized\" };\n const body = (await readBody(event)) as {\n commandId?: unknown;\n status?: unknown;\n result?: unknown;\n errorMessage?: unknown;\n };\n if (typeof body.commandId !== \"string\" || !body.commandId.trim()) {\n setResponseStatus(event, 400);\n return { error: \"commandId required\" };\n }\n if (\n body.status !== \"running\" &&\n body.status !== \"completed\" &&\n body.status !== \"failed\"\n ) {\n setResponseStatus(event, 400);\n return { error: \"invalid command status\" };\n }\n const command = await updateRemoteCommandResult({\n deviceId: device.id,\n commandId: body.commandId,\n status: body.status,\n result: body.result,\n errorMessage:\n typeof body.errorMessage === \"string\" ? body.errorMessage : null,\n });\n if (!command) {\n setResponseStatus(event, 404);\n return { error: \"command not found\" };\n }\n if (command.status === \"completed\" || command.status === \"failed\") {\n await queueRemotePushNotifications({\n ownerEmail: device.ownerEmail,\n orgId: device.orgId,\n payload: remoteCommandPushPayload(command),\n }).catch((err) => {\n console.error(\"[integrations] remote push queue failed:\", err);\n });\n }\n return { command };\n }),\n );\n\n h3.use(\n `${P}/remote/run-events`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n const device = await requireRemoteDevice(event);\n if (!device) return { error: \"unauthorized\" };\n const body = (await readBody(event)) as {\n remoteRunId?: unknown;\n runId?: unknown;\n events?: unknown;\n };\n const remoteRunId =\n typeof body.remoteRunId === \"string\" && body.remoteRunId.trim()\n ? body.remoteRunId.trim()\n : typeof body.runId === \"string\" && body.runId.trim()\n ? body.runId.trim()\n : \"\";\n if (!remoteRunId) {\n setResponseStatus(event, 400);\n return { error: \"remoteRunId required\" };\n }\n if (!Array.isArray(body.events)) {\n setResponseStatus(event, 400);\n return { error: \"events required\" };\n }\n const events = body.events\n .slice(0, 1000)\n .map((entry, index) => {\n const value = entry as { seq?: unknown; event?: unknown };\n const rawEvent =\n value && typeof value === \"object\" && \"event\" in value\n ? value.event\n : entry;\n return {\n seq:\n value && typeof value === \"object\" && \"seq\" in value\n ? Number(value.seq)\n : index,\n event: rawEvent ?? null,\n };\n })\n .filter((entry) => Number.isInteger(entry.seq) && entry.seq >= 0);\n if (events.length !== body.events.length) {\n setResponseStatus(event, 400);\n return { error: \"invalid event sequence\" };\n }\n const result = await insertRemoteRunEvents({\n deviceId: device.id,\n remoteRunId,\n events,\n });\n return { ok: true, ...result };\n }),\n );\n\n // ─── Process pending task (cross-platform task queue) ────────\n // POST /_agent-native/integrations/process-task\n // Internal endpoint invoked via fire-and-forget self-webhook from the\n // public webhook handler. Auth: HMAC bearer signed with A2A_SECRET.\n // Each invocation runs the agent loop in a fresh function execution.\n h3.use(\n `${P}/process-task`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n\n const body = (await readBody(event)) as { taskId?: string };\n const taskId = body?.taskId;\n if (!taskId) {\n setResponseStatus(event, 400);\n return { error: \"taskId required\" };\n }\n\n // Auth: HMAC token bound to the task id.\n //\n // In production we MUST require A2A_SECRET — a publicly-callable\n // process-task endpoint lets attackers re-trigger any queued task\n // by guessing or sniffing its id (C3 in the webhook security audit).\n // The atomic SQL claim only prevents *double*-processing, not the\n // first attacker-driven processing.\n //\n // In dev we keep the loose posture so contributors don't have to\n // configure A2A_SECRET to play with the integration locally.\n if (!process.env.A2A_SECRET) {\n if (process.env.NODE_ENV === \"production\") {\n setResponseStatus(event, 503);\n return {\n error:\n \"A2A_SECRET not configured — internal token signing is required to process integration tasks in production.\",\n };\n }\n // Dev: fall through unsigned (the atomic claim still gates double-processing).\n } else {\n const tok = extractBearerToken(\n getRequestHeader(event, \"authorization\"),\n );\n if (!tok || !verifyInternalToken(taskId, tok)) {\n setResponseStatus(event, 401);\n return { error: \"Invalid or expired internal token\" };\n }\n }\n\n // Atomic claim: only one invocation gets to process this task\n const task = await claimPendingTask(taskId);\n if (!task) {\n setResponseStatus(event, 200);\n return { ok: true, skipped: \"already-claimed-or-missing\" };\n }\n\n try {\n const adapter = adapterMap.get(task.platform);\n if (!adapter) {\n await markTaskFailed(taskId, `Unknown platform: ${task.platform}`);\n setResponseStatus(event, 404);\n return { error: \"Unknown platform\" };\n }\n const resources = await loadResourcesForPrompt(\n task.ownerEmail,\n true,\n options?.appId,\n );\n await processIntegrationTask(task, {\n adapter,\n systemPrompt: baseSystemPrompt + resources,\n actions,\n model,\n apiKey: getApiKey(),\n engine: options?.engine,\n ownerEmail: task.ownerEmail,\n });\n await markTaskCompleted(taskId);\n await processDueA2AContinuations({\n adapters: adapterMap,\n limit: 2,\n }).catch((err) => {\n console.error(\n \"[integrations] A2A continuation opportunistic sweep failed:\",\n err,\n );\n });\n return { ok: true, taskId };\n } catch (err: any) {\n await markTaskFailed(\n taskId,\n err?.message\n ? String(err.message).slice(0, 1000)\n : \"processor failed\",\n );\n // Log the detail server-side; never return the raw error message\n // to the caller. Raw messages have leaked DB error codes, schema\n // names, and stack hints in the past (L3 in the webhook security\n // audit). Sentry / log providers still see the full error.\n console.error(\"[integrations] process-task failure:\", err);\n setResponseStatus(event, 500);\n return { error: \"Internal task failed\" };\n }\n }),\n );\n\n // ─── Process deferred A2A continuation ──────────────────────────\n // POST /_agent-native/integrations/process-a2a-continuation\n // Internal endpoint invoked when call-agent timed out inside an\n // integration processor but the remote A2A task kept running.\n h3.use(\n `${P}/process-a2a-continuation`,\n defineEventHandler(async (event) => {\n if (getMethod(event) !== \"POST\") {\n setResponseStatus(event, 405);\n return { error: \"Method not allowed\" };\n }\n\n const body = (await readBody(event)) as { continuationId?: string };\n const continuationId = body?.continuationId;\n if (!continuationId) {\n setResponseStatus(event, 400);\n return { error: \"continuationId required\" };\n }\n\n if (!process.env.A2A_SECRET) {\n if (process.env.NODE_ENV === \"production\") {\n setResponseStatus(event, 503);\n return {\n error:\n \"A2A_SECRET not configured — internal token signing is required to process A2A continuations in production.\",\n };\n }\n } else {\n const tok = extractBearerToken(\n getRequestHeader(event, \"authorization\"),\n );\n if (!tok || !verifyInternalToken(continuationId, tok)) {\n setResponseStatus(event, 401);\n return { error: \"Invalid or expired internal token\" };\n }\n }\n\n try {\n await processA2AContinuationById(continuationId, {\n adapters: adapterMap,\n });\n } catch (err: any) {\n // Mark the continuation failed so it isn't left dangling, and surface\n // a 500 to the caller instead of leaking an unhandled rejection.\n await failA2AContinuation(\n continuationId,\n err?.message?.slice(0, 500) || \"continuation processing failed\",\n ).catch(() => {});\n console.error(\n \"[integrations] process-a2a-continuation failure:\",\n err,\n );\n setResponseStatus(event, 500);\n return { error: \"Failed to process A2A continuation\" };\n }\n return { ok: true, continuationId };\n }),\n );\n\n // ─── Per-platform catch-all ───────────────────────────────────\n // Handles: webhook, status, enable, disable, setup for each platform\n h3.use(\n `${P}`,\n defineEventHandler(async (event) => {\n const method = getMethod(event);\n // event.path is stripped to the remainder after the mount prefix\n const raw = (event.path || \"/\").split(\"?\")[0].replace(/^\\//, \"\");\n const parts = raw.split(\"/\").filter(Boolean);\n\n // Already handled by the dedicated /status route above\n if (parts[0] === \"status\" && parts.length === 1) return;\n // Already handled by the dedicated /task-queue/status route above\n if (parts[0] === \"task-queue\") return;\n // Already handled by the dedicated /remote/* routes above\n if (parts[0] === \"remote\") return;\n // Already handled by the dedicated /process-task route above\n if (parts[0] === \"process-task\") return;\n // Already handled by the dedicated /process-a2a-continuation route above\n if (parts[0] === \"process-a2a-continuation\") return;\n\n const platform = parts[0];\n const action = parts[1]; // webhook, status, enable, disable, setup\n\n if (!platform) {\n setResponseStatus(event, 404);\n return { error: \"Platform required\" };\n }\n\n const adapter = adapterMap.get(platform);\n if (!adapter) {\n setResponseStatus(event, 404);\n return { error: `Unknown platform: ${platform}` };\n }\n\n // Set params for handlers that read them\n if (event.context) {\n event.context.params = {\n ...event.context.params,\n platform,\n };\n }\n\n // ─── GET /:platform/status ─────────────────────────────\n if (action === \"status\" && method === \"GET\") {\n if (!(await requireSession(event))) return { error: \"unauthorized\" };\n const baseUrl = getBaseUrl(event);\n const status = await adapter.getStatus(baseUrl);\n const config = await getIntegrationConfig(platform);\n status.enabled = !!config?.configData?.enabled;\n status.webhookUrl = `${baseUrl}${P}/${platform}/webhook`;\n if (!status.requiredEnvKeys) {\n try {\n status.requiredEnvKeys = adapter.getRequiredEnvKeys();\n } catch {\n status.requiredEnvKeys = [];\n }\n }\n return status;\n }\n\n // ─── POST /:platform/webhook ───────────────────────────\n if (action === \"webhook\" && method === \"POST\") {\n // Google Docs push notifications bypass the normal webhook flow —\n // they're opaque \"something changed\" pings, not message payloads.\n // We MUST verify the Pub/Sub OIDC token here. Without it, anyone\n // could POST any body to this URL and force a Drive changes pull\n // (H7 in the webhook security audit).\n if (platform === \"google-docs\") {\n const audience = process.env.GOOGLE_DOCS_PUSH_AUDIENCE;\n if (!audience) {\n if (process.env.NODE_ENV === \"production\") {\n // Fail closed in prod so a misconfigured deployment surfaces\n // in Pub/Sub's delivery metrics rather than silently\n // accepting anonymous requests.\n setResponseStatus(event, 503);\n return {\n ok: false,\n error:\n \"google-docs push endpoint disabled (audience not configured)\",\n };\n }\n // Dev: keep the loose posture so contributors can play with the\n // integration locally without configuring Pub/Sub.\n handlePushNotification().catch((err) => {\n console.error(\"[google-docs] Push handler error:\", err);\n });\n return \"ok\";\n }\n const authHeader = getRequestHeader(event, \"authorization\") || \"\";\n try {\n await verifyGoogleDocsPushToken(authHeader);\n } catch (err: any) {\n console.warn(\n `[google-docs] OIDC verify failed: ${err?.message ?? String(err)}`,\n );\n setResponseStatus(event, 401);\n return { ok: false, error: \"unauthorized\" };\n }\n handlePushNotification().catch((err) => {\n console.error(\"[google-docs] Push handler error:\", err);\n });\n return \"ok\";\n }\n\n // Handle platform verification challenges (e.g. Slack url_verification)\n // before checking enable state or parsing the message.\n const verification = await adapter.handleVerification(event);\n if (verification.handled) {\n return verification.response ?? \"ok\";\n }\n\n const config = await getIntegrationConfig(platform);\n if (!config?.configData?.enabled) {\n setResponseStatus(event, 404);\n return { error: `Integration ${platform} is not enabled` };\n }\n\n // Verify the webhook signature BEFORE parsing. We pre-parse the\n // body here (so handleWebhook can skip its second readBody, which\n // hangs on streaming providers), and that means handleWebhook's\n // own verifyWebhook step is bypassed. Without this call anyone\n // could POST a forged Slack/Telegram/email payload.\n const isValid = await adapter.verifyWebhook(event);\n if (!isValid) {\n setResponseStatus(event, 401);\n return { error: \"Invalid webhook signature\" };\n }\n\n const incoming = await adapter.parseIncomingMessage(event);\n if (!incoming) {\n setResponseStatus(event, 200);\n return \"ok\";\n }\n let owner = `integration@${platform}`;\n if (options?.resolveOwner) {\n try {\n owner = await options.resolveOwner(incoming);\n } catch (err) {\n console.error(\n `[integrations] resolveOwner failed, using default:`,\n err,\n );\n }\n }\n const resources = await loadResourcesForPrompt(\n owner,\n true,\n options?.appId,\n );\n const systemPrompt = baseSystemPrompt + resources;\n const result = await handleWebhook(event, {\n adapter,\n systemPrompt,\n actions,\n model,\n apiKey: getApiKey(),\n engine: options?.engine,\n appId: options?.appId,\n ownerEmail: owner,\n beforeProcess: options?.beforeProcess,\n incoming,\n });\n setResponseStatus(event, result.status);\n return result.body;\n }\n\n // ─── POST /:platform/enable ────────────────────────────\n if (action === \"enable\" && method === \"POST\") {\n const adminCheck = await checkOrgAdmin(event);\n if (adminCheck.ok === false) return { error: adminCheck.error };\n // Stamp the org-admin who toggled this so downstream code can\n // tell who is responsible — useful for audit logs even though\n // the row itself remains deployment-wide.\n const session = await getSession(event).catch(() => null);\n await saveIntegrationConfig(\n platform,\n { enabled: true },\n \"default\",\n session?.email,\n );\n return { ok: true, platform, enabled: true };\n }\n\n // ─── POST /:platform/disable ───────────────────────────\n if (action === \"disable\" && method === \"POST\") {\n const adminCheck = await checkOrgAdmin(event);\n if (adminCheck.ok === false) return { error: adminCheck.error };\n const session = await getSession(event).catch(() => null);\n await saveIntegrationConfig(\n platform,\n { enabled: false },\n \"default\",\n session?.email,\n );\n return { ok: true, platform, enabled: false };\n }\n\n // ─── POST /:platform/setup ─────────────────────────────\n if (action === \"setup\" && method === \"POST\") {\n const adminCheck = await checkOrgAdmin(event);\n if (adminCheck.ok === false) return { error: adminCheck.error };\n if (platform === \"telegram\") {\n const baseUrl = getBaseUrl(event);\n const webhookUrl = `${baseUrl}${P}/telegram/webhook`;\n const token = process.env.TELEGRAM_BOT_TOKEN;\n if (!token) {\n setResponseStatus(event, 400);\n return { error: \"TELEGRAM_BOT_TOKEN not configured\" };\n }\n try {\n const res = await fetch(\n `https://api.telegram.org/bot${token}/setWebhook`,\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ url: webhookUrl }),\n },\n );\n const data = await res.json();\n return { ok: true, platform, webhookUrl, result: data };\n } catch (err: any) {\n setResponseStatus(event, 500);\n return { error: err.message };\n }\n }\n return { ok: true, platform, message: \"No setup required\" };\n }\n\n setResponseStatus(event, 404);\n return { error: \"Not found\" };\n }),\n );\n\n // ─── Start pending-tasks retry sweeper ────────────────────────\n // Sweeps the integration_pending_tasks queue every 60s and re-fires the\n // processor for any tasks that got stuck (initial dispatch lost or\n // processor killed mid-flight). No-ops gracefully if the queue table\n // hasn't been created yet on this deployment.\n startPendingTasksRetryJob({\n webhookBaseUrl: process.env.WEBHOOK_BASE_URL,\n });\n startA2AContinuationRetryJob(adapterMap);\n startRemoteCommandsRetryJob();\n\n // ─── Start Google Docs poller/push ────────────────────────────\n if (adapterMap.has(\"google-docs\")) {\n // Defer startup slightly so the server is fully ready\n setTimeout(() => {\n // We don't know the base URL at plugin init time — it depends on\n // the incoming request. For push mode, the webhook URL needs to be\n // resolved. We pass it as a special option; the poller will attempt\n // to register a watch when the first request reveals the base URL,\n // or use the WEBHOOK_BASE_URL env var if set.\n const baseUrl = process.env.WEBHOOK_BASE_URL;\n const webhookUrl = baseUrl\n ? `${withConfiguredAppBasePath(baseUrl)}${P}/google-docs/webhook`\n : undefined;\n\n startGoogleDocsPoller({\n systemPrompt: baseSystemPrompt,\n actions,\n model: model ?? \"\",\n apiKey: getApiKey(),\n ownerEmail: \"integration@google-docs\",\n webhookUrl,\n });\n }, 2000);\n }\n\n if (process.env.DEBUG)\n console.log(\n `[integrations] Mounted integration routes for: ${adapters.map((a) => a.platform).join(\", \")}`,\n );\n };\n}\n\n/**\n * Default integrations plugin — auto-mounts all adapters.\n */\nexport const defaultIntegrationsPlugin = createIntegrationsPlugin();\n\n/** Extract base URL from the request */\nfunction getBaseUrl(event: any): string {\n try {\n const headers = event.node?.req?.headers || event.headers || {};\n const getHeader = (name: string) =>\n typeof headers.get === \"function\"\n ? headers.get(name)\n : (headers as Record<string, string>)[name];\n const proto = getHeader(\"x-forwarded-proto\") || \"http\";\n const host = getHeader(\"host\") || \"localhost:3000\";\n return withConfiguredAppBasePath(`${proto}://${host}`);\n } catch {\n return withConfiguredAppBasePath(\"http://localhost:3000\");\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"default-steps.d.ts","sourceRoot":"","sources":["../../src/onboarding/default-steps.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAsSH,6DAA6D;AAC7D,wBAAgB,8BAA8B,IAAI,IAAI,CAOrD"}
1
+ {"version":3,"file":"default-steps.d.ts","sourceRoot":"","sources":["../../src/onboarding/default-steps.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAqZH,6DAA6D;AAC7D,wBAAgB,8BAA8B,IAAI,IAAI,CAQrD"}