@agent-native/core 0.77.7 → 0.77.10

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 (192) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +46 -0
  3. package/corpus/core/package.json +1 -1
  4. package/corpus/core/src/a2a/task-store.ts +25 -3
  5. package/corpus/core/src/agent/harness/store.ts +89 -55
  6. package/corpus/core/src/agent/observational-memory/store.ts +40 -14
  7. package/corpus/core/src/agent/production-agent.ts +18 -0
  8. package/corpus/core/src/agent/run-store.ts +116 -59
  9. package/corpus/core/src/application-state/store.ts +36 -2
  10. package/corpus/core/src/audit/store.ts +37 -6
  11. package/corpus/core/src/browser-sessions/store.ts +31 -12
  12. package/corpus/core/src/chat-threads/store.ts +67 -3
  13. package/corpus/core/src/checkpoints/store.ts +14 -3
  14. package/corpus/core/src/cli/create.ts +9 -0
  15. package/corpus/core/src/collab/storage.ts +20 -2
  16. package/corpus/core/src/db/ddl-guard.ts +302 -0
  17. package/corpus/core/src/extensions/store.ts +76 -3
  18. package/corpus/core/src/integrations/a2a-continuations-store.ts +69 -26
  19. package/corpus/core/src/integrations/config-store.ts +19 -18
  20. package/corpus/core/src/integrations/pending-tasks-store.ts +40 -16
  21. package/corpus/core/src/integrations/remote-commands-store.ts +37 -23
  22. package/corpus/core/src/integrations/remote-devices-store.ts +64 -20
  23. package/corpus/core/src/integrations/remote-push-store.ts +75 -35
  24. package/corpus/core/src/integrations/remote-run-events-store.ts +38 -12
  25. package/corpus/core/src/integrations/thread-mapping-store.ts +11 -2
  26. package/corpus/core/src/mcp/connect-store.ts +53 -16
  27. package/corpus/core/src/mcp/oauth-store.ts +32 -7
  28. package/corpus/core/src/notifications/store.ts +20 -4
  29. package/corpus/core/src/oauth-tokens/store.ts +45 -2
  30. package/corpus/core/src/observability/store.ts +154 -47
  31. package/corpus/core/src/progress/store.ts +36 -21
  32. package/corpus/core/src/provider-api/corpus-jobs-store.ts +25 -5
  33. package/corpus/core/src/provider-api/custom-registry.ts +15 -4
  34. package/corpus/core/src/provider-api/quota-governor.ts +15 -3
  35. package/corpus/core/src/provider-api/staged-datasets-store.ts +22 -5
  36. package/corpus/core/src/resources/store.ts +66 -31
  37. package/corpus/core/src/secrets/storage.ts +32 -2
  38. package/corpus/core/src/server/agent-teams-run-queue.ts +22 -10
  39. package/corpus/core/src/server/auth.ts +22 -4
  40. package/corpus/core/src/server/better-auth-instance.ts +49 -15
  41. package/corpus/core/src/server/embed-session.ts +19 -4
  42. package/corpus/core/src/server/identity-sso-store.ts +40 -11
  43. package/corpus/core/src/server/recap-image-store.ts +28 -9
  44. package/corpus/core/src/settings/store.ts +35 -6
  45. package/corpus/core/src/usage/store.ts +51 -16
  46. package/corpus/core/src/workspace-connections/store.ts +200 -22
  47. package/corpus/templates/calendar/changelog/2026-06-25-booking-link-previews-now-show-the-content-directly-on-the-g.md +6 -0
  48. package/corpus/templates/calendar/server/lib/booking-og-image.ts +0 -2
  49. package/corpus/templates/forms/changelog/2026-06-25-form-previews-now-show-the-content-directly-on-the-grid-back.md +6 -0
  50. package/corpus/templates/forms/server/lib/form-og-image.ts +0 -2
  51. package/corpus/templates/plan/app/global.css +6 -11
  52. package/corpus/templates/plan/app/pages/PlansPage.tsx +12 -10
  53. package/corpus/templates/plan/changelog/2026-06-25-plan-access-request-pages-stay-visible-during-background-ref.md +6 -0
  54. package/corpus/templates/plan/changelog/2026-06-25-plan-documents-keep-their-full-reading-width-below-1200px-an.md +6 -0
  55. package/dist/a2a/task-store.d.ts.map +1 -1
  56. package/dist/a2a/task-store.js +19 -3
  57. package/dist/a2a/task-store.js.map +1 -1
  58. package/dist/agent/harness/store.d.ts.map +1 -1
  59. package/dist/agent/harness/store.js +63 -34
  60. package/dist/agent/harness/store.js.map +1 -1
  61. package/dist/agent/observational-memory/store.d.ts.map +1 -1
  62. package/dist/agent/observational-memory/store.js +30 -8
  63. package/dist/agent/observational-memory/store.js.map +1 -1
  64. package/dist/agent/production-agent.d.ts.map +1 -1
  65. package/dist/agent/production-agent.js +18 -0
  66. package/dist/agent/production-agent.js.map +1 -1
  67. package/dist/agent/run-store.d.ts.map +1 -1
  68. package/dist/agent/run-store.js +103 -46
  69. package/dist/agent/run-store.js.map +1 -1
  70. package/dist/application-state/store.d.ts.map +1 -1
  71. package/dist/application-state/store.js +28 -2
  72. package/dist/application-state/store.js.map +1 -1
  73. package/dist/audit/store.d.ts.map +1 -1
  74. package/dist/audit/store.js +18 -3
  75. package/dist/audit/store.js.map +1 -1
  76. package/dist/browser-sessions/store.d.ts.map +1 -1
  77. package/dist/browser-sessions/store.js +22 -7
  78. package/dist/browser-sessions/store.js.map +1 -1
  79. package/dist/chat-threads/store.d.ts.map +1 -1
  80. package/dist/chat-threads/store.js +51 -3
  81. package/dist/chat-threads/store.js.map +1 -1
  82. package/dist/checkpoints/store.d.ts.map +1 -1
  83. package/dist/checkpoints/store.js +12 -3
  84. package/dist/checkpoints/store.js.map +1 -1
  85. package/dist/cli/create.d.ts.map +1 -1
  86. package/dist/cli/create.js +9 -0
  87. package/dist/cli/create.js.map +1 -1
  88. package/dist/collab/routes.d.ts +2 -2
  89. package/dist/collab/storage.d.ts.map +1 -1
  90. package/dist/collab/storage.js +14 -2
  91. package/dist/collab/storage.js.map +1 -1
  92. package/dist/db/ddl-guard.d.ts +151 -0
  93. package/dist/db/ddl-guard.d.ts.map +1 -0
  94. package/dist/db/ddl-guard.js +265 -0
  95. package/dist/db/ddl-guard.js.map +1 -0
  96. package/dist/extensions/store.d.ts.map +1 -1
  97. package/dist/extensions/store.js +32 -3
  98. package/dist/extensions/store.js.map +1 -1
  99. package/dist/file-upload/actions/upload-image.d.ts +2 -2
  100. package/dist/integrations/a2a-continuations-store.d.ts.map +1 -1
  101. package/dist/integrations/a2a-continuations-store.js +44 -24
  102. package/dist/integrations/a2a-continuations-store.js.map +1 -1
  103. package/dist/integrations/config-store.d.ts.map +1 -1
  104. package/dist/integrations/config-store.js +17 -11
  105. package/dist/integrations/config-store.js.map +1 -1
  106. package/dist/integrations/pending-tasks-store.d.ts.map +1 -1
  107. package/dist/integrations/pending-tasks-store.js +24 -16
  108. package/dist/integrations/pending-tasks-store.js.map +1 -1
  109. package/dist/integrations/remote-commands-store.d.ts.map +1 -1
  110. package/dist/integrations/remote-commands-store.js +29 -21
  111. package/dist/integrations/remote-commands-store.js.map +1 -1
  112. package/dist/integrations/remote-devices-store.d.ts.map +1 -1
  113. package/dist/integrations/remote-devices-store.js +33 -18
  114. package/dist/integrations/remote-devices-store.js.map +1 -1
  115. package/dist/integrations/remote-push-store.d.ts.map +1 -1
  116. package/dist/integrations/remote-push-store.js +53 -31
  117. package/dist/integrations/remote-push-store.js.map +1 -1
  118. package/dist/integrations/remote-run-events-store.d.ts.map +1 -1
  119. package/dist/integrations/remote-run-events-store.js +26 -10
  120. package/dist/integrations/remote-run-events-store.js.map +1 -1
  121. package/dist/integrations/thread-mapping-store.d.ts.map +1 -1
  122. package/dist/integrations/thread-mapping-store.js +10 -2
  123. package/dist/integrations/thread-mapping-store.js.map +1 -1
  124. package/dist/mcp/connect-store.d.ts.map +1 -1
  125. package/dist/mcp/connect-store.js +34 -16
  126. package/dist/mcp/connect-store.js.map +1 -1
  127. package/dist/mcp/oauth-store.d.ts.map +1 -1
  128. package/dist/mcp/oauth-store.js +22 -7
  129. package/dist/mcp/oauth-store.js.map +1 -1
  130. package/dist/notifications/routes.d.ts +2 -2
  131. package/dist/notifications/store.d.ts.map +1 -1
  132. package/dist/notifications/store.js +15 -3
  133. package/dist/notifications/store.js.map +1 -1
  134. package/dist/oauth-tokens/store.d.ts.map +1 -1
  135. package/dist/oauth-tokens/store.js +33 -2
  136. package/dist/oauth-tokens/store.js.map +1 -1
  137. package/dist/observability/routes.d.ts +7 -7
  138. package/dist/observability/store.d.ts.map +1 -1
  139. package/dist/observability/store.js +72 -29
  140. package/dist/observability/store.js.map +1 -1
  141. package/dist/progress/store.d.ts.map +1 -1
  142. package/dist/progress/store.js +31 -16
  143. package/dist/progress/store.js.map +1 -1
  144. package/dist/provider-api/corpus-jobs-store.d.ts.map +1 -1
  145. package/dist/provider-api/corpus-jobs-store.js +16 -5
  146. package/dist/provider-api/corpus-jobs-store.js.map +1 -1
  147. package/dist/provider-api/custom-registry.d.ts.map +1 -1
  148. package/dist/provider-api/custom-registry.js +14 -4
  149. package/dist/provider-api/custom-registry.js.map +1 -1
  150. package/dist/provider-api/quota-governor.d.ts.map +1 -1
  151. package/dist/provider-api/quota-governor.js +12 -3
  152. package/dist/provider-api/quota-governor.js.map +1 -1
  153. package/dist/provider-api/staged-datasets-store.d.ts.map +1 -1
  154. package/dist/provider-api/staged-datasets-store.js +16 -5
  155. package/dist/provider-api/staged-datasets-store.js.map +1 -1
  156. package/dist/resources/handlers.d.ts +2 -2
  157. package/dist/resources/store.d.ts.map +1 -1
  158. package/dist/resources/store.js +56 -25
  159. package/dist/resources/store.js.map +1 -1
  160. package/dist/secrets/storage.d.ts.map +1 -1
  161. package/dist/secrets/storage.js +22 -2
  162. package/dist/secrets/storage.js.map +1 -1
  163. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  164. package/dist/server/agent-teams-run-queue.d.ts.map +1 -1
  165. package/dist/server/agent-teams-run-queue.js +15 -4
  166. package/dist/server/agent-teams-run-queue.js.map +1 -1
  167. package/dist/server/auth.d.ts.map +1 -1
  168. package/dist/server/auth.js +16 -2
  169. package/dist/server/auth.js.map +1 -1
  170. package/dist/server/better-auth-instance.d.ts.map +1 -1
  171. package/dist/server/better-auth-instance.js +55 -21
  172. package/dist/server/better-auth-instance.js.map +1 -1
  173. package/dist/server/embed-session.d.ts.map +1 -1
  174. package/dist/server/embed-session.js +15 -4
  175. package/dist/server/embed-session.js.map +1 -1
  176. package/dist/server/identity-sso-store.d.ts.map +1 -1
  177. package/dist/server/identity-sso-store.js +30 -11
  178. package/dist/server/identity-sso-store.js.map +1 -1
  179. package/dist/server/recap-image-store.d.ts.map +1 -1
  180. package/dist/server/recap-image-store.js +21 -7
  181. package/dist/server/recap-image-store.js.map +1 -1
  182. package/dist/server/transcribe-voice.d.ts +1 -1
  183. package/dist/settings/store.d.ts.map +1 -1
  184. package/dist/settings/store.js +30 -6
  185. package/dist/settings/store.js.map +1 -1
  186. package/dist/usage/store.d.ts.map +1 -1
  187. package/dist/usage/store.js +36 -11
  188. package/dist/usage/store.js.map +1 -1
  189. package/dist/workspace-connections/store.d.ts.map +1 -1
  190. package/dist/workspace-connections/store.js +57 -7
  191. package/dist/workspace-connections/store.js.map +1 -1
  192. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"agent-teams-run-queue.js","sourceRoot":"","sources":["../../src/server/agent-teams-run-queue.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Durable dispatch queue for Agent Teams sub-agent runs.\n *\n * Background sub-agents used to run as an in-process detached promise from the\n * spawning request, which serverless hosts (Netlify/Lambda/Vercel) freeze the\n * moment the response flushes — so the sub-agent never actually completed. This\n * queue is the durable hand-off: `spawnTask` enqueues a row here and self-fires\n * the `/_agent-native/agent-teams/_process-run` route (see `self-dispatch.ts`),\n * which claims the row and runs the sub-agent in its own fresh function\n * invocation. The same pattern A2A (`a2a/task-store.ts`) and integration\n * webhooks use.\n *\n * The app_state task record (`agent-task:{taskId}`) remains the source of truth\n * for UI/status; this table only drives dispatch, idempotent claiming, and\n * cross-invocation continuation.\n */\nimport { getDbExec, intType, retryOnDdlRace } from \"../db/client.js\";\n\n/** Max cross-invocation continuations for one sub-agent run. Each continuation\n * is one ~40s soft-timeout chunk, so ~60 ≈ ~40 minutes of wall-clock work. Two\n * independent guards bound runaway self-fire: this persisted cap and the\n * per-invocation `MAX_RUN_LOOP_CONTINUATIONS` inside the run loop.\n *\n * Progress-aware continuation: non-progressing chunks count against a much\n * smaller budget (`MAX_AGENT_TEAM_NO_PROGRESS_CONTINUATIONS`) so a stalled\n * sub-agent is detected and finalized quickly, while actively-working sub-agents\n * can run for as long as this absolute cap allows. */\nexport const MAX_AGENT_TEAM_CONTINUATIONS = 60;\n\n/** Max consecutive *non-progressing* continuations before the run is finalized.\n * A chunk that emits no new events, tool calls, or text counts as no-progress. */\nexport const MAX_AGENT_TEAM_NO_PROGRESS_CONTINUATIONS = 3;\n\n/** A `running` row whose `updated_at` is older than this is treated as a\n * dropped dispatch and may be re-claimed / re-fired. Must be comfortably larger\n * than the processor heartbeat interval so a healthy run is never re-claimed. */\nexport const RUN_DISPATCH_STUCK_AFTER_MS = 15_000;\n\n/** Hard cutoff after which a stuck row is failed deterministically rather than\n * retried (side-effectful work may already have happened). Mirrors A2A. */\nexport const RUN_PROCESSING_STUCK_AFTER_MS = 5 * 60 * 1000;\n\nexport type AgentTeamRunQueueStatus = \"queued\" | \"running\" | \"done\" | \"failed\";\n\nexport interface AgentTeamRunPayload {\n description: string;\n instructions?: string;\n model?: string;\n /** Custom agent profile name (agents/*.md) to brief the sub-agent with. */\n agentRef?: string;\n /** Parent thread to post a completion recap to. */\n parentThreadId?: string;\n /** Display name for the sub-agent tab. */\n name?: string;\n /** Logical-turn id, stable across continuation chunks so durable assistant\n * messages fold into one. */\n turnId: string;\n}\n\nexport interface AgentTeamRunQueueRow {\n taskId: string;\n threadId: string;\n runId: string;\n status: AgentTeamRunQueueStatus;\n ownerEmail: string | null;\n orgId: string | null;\n payload: AgentTeamRunPayload;\n continuationCount: number;\n attempts: number;\n createdAt: number;\n updatedAt: number;\n}\n\nlet _initPromise: Promise<void> | undefined;\n\nasync function ensureTable(): Promise<void> {\n if (!_initPromise) {\n _initPromise = (async () => {\n const client = getDbExec();\n await retryOnDdlRace(() =>\n client.execute(`\n CREATE TABLE IF NOT EXISTS agent_team_run_queue (\n task_id TEXT PRIMARY KEY,\n thread_id TEXT NOT NULL,\n run_id TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'queued',\n owner_email TEXT,\n org_id TEXT,\n payload TEXT NOT NULL,\n continuation_count ${intType()} NOT NULL DEFAULT 0,\n attempts ${intType()} NOT NULL DEFAULT 0,\n created_at ${intType()} NOT NULL,\n updated_at ${intType()} NOT NULL\n )\n `),\n );\n await retryOnDdlRace(() =>\n client.execute(\n `CREATE INDEX IF NOT EXISTS idx_agent_team_run_queue_status ON agent_team_run_queue (status, updated_at)`,\n ),\n );\n })().catch((err) => {\n _initPromise = undefined;\n throw err;\n });\n }\n return _initPromise;\n}\n\nfunction getAffectedRowCount(result: unknown): number {\n const r = result as\n | { rowsAffected?: number; rowCount?: number; count?: number }\n | undefined;\n return r?.rowsAffected ?? r?.rowCount ?? r?.count ?? 0;\n}\n\nfunction rowToQueueRow(row: any): AgentTeamRunQueueRow {\n let payload: AgentTeamRunPayload;\n try {\n payload = JSON.parse(String(row.payload));\n } catch {\n payload = { description: \"\", turnId: String(row.run_id ?? row.task_id) };\n }\n return {\n taskId: String(row.task_id),\n threadId: String(row.thread_id),\n runId: String(row.run_id),\n status: String(row.status) as AgentTeamRunQueueStatus,\n ownerEmail: (row.owner_email as string | null) ?? null,\n orgId: (row.org_id as string | null) ?? null,\n payload,\n continuationCount: Number(row.continuation_count ?? 0),\n attempts: Number(row.attempts ?? 0),\n createdAt: Number(row.created_at ?? 0),\n updatedAt: Number(row.updated_at ?? 0),\n };\n}\n\nexport interface EnqueueAgentTeamRunInput {\n taskId: string;\n threadId: string;\n runId: string;\n ownerEmail?: string | null;\n orgId?: string | null;\n payload: AgentTeamRunPayload;\n}\n\nexport async function enqueueAgentTeamRun(\n input: EnqueueAgentTeamRunInput,\n): Promise<void> {\n await ensureTable();\n const client = getDbExec();\n const now = Date.now();\n await client.execute({\n sql: `INSERT INTO agent_team_run_queue\n (task_id, thread_id, run_id, status, owner_email, org_id, payload, continuation_count, attempts, created_at, updated_at)\n VALUES (?, ?, ?, 'queued', ?, ?, ?, 0, 0, ?, ?)`,\n args: [\n input.taskId,\n input.threadId,\n input.runId,\n input.ownerEmail ?? null,\n input.orgId ?? null,\n JSON.stringify(input.payload),\n now,\n now,\n ],\n });\n}\n\n/**\n * Atomically claim a run for processing. Succeeds when the row is `queued`, or\n * `running` but stale (a dropped dispatch past `RUN_DISPATCH_STUCK_AFTER_MS`).\n * Flips it to `running`, bumps `attempts`, and stamps `updated_at`. Returns the\n * claimed row, or null if another invocation already holds it (idempotency).\n */\nexport async function claimAgentTeamRun(\n taskId: string,\n options: { stuckAfterMs?: number } = {},\n): Promise<AgentTeamRunQueueRow | null> {\n await ensureTable();\n const client = getDbExec();\n const now = Date.now();\n const stuckCutoff =\n now - (options.stuckAfterMs ?? RUN_DISPATCH_STUCK_AFTER_MS);\n const result = await client.execute({\n sql: `UPDATE agent_team_run_queue\n SET status = 'running', attempts = attempts + 1, updated_at = ?\n WHERE task_id = ?\n AND (status = 'queued' OR (status = 'running' AND updated_at < ?))`,\n args: [now, taskId, stuckCutoff],\n });\n if (getAffectedRowCount(result) === 0) return null;\n\n const { rows } = await client.execute({\n sql: `SELECT * FROM agent_team_run_queue WHERE task_id = ?`,\n args: [taskId],\n });\n if (rows.length === 0) return null;\n return rowToQueueRow(rows[0]);\n}\n\n/** Heartbeat: bump `updated_at` while a claimed run is actively processing so a\n * healthy run isn't re-claimed by the stuck-refire path.\n *\n * When `claimedAttempts` is provided the UPDATE is fenced to\n * `attempts = claimedAttempts`: a superseded invocation (one that was\n * re-claimed after it stalled) will find the attempts counter has been bumped\n * and the update will be a no-op, signalling that this invocation should\n * self-terminate. */\nexport async function touchAgentTeamRun(\n taskId: string,\n claimedAttempts?: number,\n): Promise<boolean> {\n await ensureTable();\n const client = getDbExec();\n if (claimedAttempts !== undefined) {\n const result = await client.execute({\n sql: `UPDATE agent_team_run_queue SET updated_at = ? WHERE task_id = ? AND status = 'running' AND attempts = ?`,\n args: [Date.now(), taskId, claimedAttempts],\n });\n return getAffectedRowCount(result) > 0;\n }\n const result = await client.execute({\n sql: `UPDATE agent_team_run_queue SET updated_at = ? WHERE task_id = ? AND status = 'running'`,\n args: [Date.now(), taskId],\n });\n return getAffectedRowCount(result) > 0;\n}\n\n/**\n * Record a soft-timeout continuation: re-queue the row (so the next\n * self-fired invocation can claim it) and increment the counter. Returns the\n * new continuation count, or null if the row wasn't in a continuable state.\n *\n * When `claimedAttempts` is provided the UPDATE is fenced to\n * `attempts = claimedAttempts` so a superseded invocation cannot queue a\n * spurious continuation. */\nexport async function bumpAgentTeamContinuation(\n taskId: string,\n claimedAttempts?: number,\n): Promise<number | null> {\n await ensureTable();\n const client = getDbExec();\n const now = Date.now();\n const result =\n claimedAttempts !== undefined\n ? await client.execute({\n sql: `UPDATE agent_team_run_queue\n SET continuation_count = continuation_count + 1, status = 'queued', updated_at = ?\n WHERE task_id = ? AND status = 'running' AND attempts = ?`,\n args: [now, taskId, claimedAttempts],\n })\n : await client.execute({\n sql: `UPDATE agent_team_run_queue\n SET continuation_count = continuation_count + 1, status = 'queued', updated_at = ?\n WHERE task_id = ? AND status = 'running'`,\n args: [now, taskId],\n });\n if (getAffectedRowCount(result) === 0) return null;\n const { rows } = await client.execute({\n sql: `SELECT continuation_count FROM agent_team_run_queue WHERE task_id = ?`,\n args: [taskId],\n });\n if (rows.length === 0) return null;\n return Number((rows[0] as any).continuation_count ?? 0);\n}\n\n/**\n * Mark a run terminal.\n *\n * When `claimedAttempts` is provided the UPDATE is fenced to\n * `attempts = claimedAttempts` so a superseded invocation cannot overwrite a\n * freshly-claimed row's status. Returns whether the row was actually updated. */\nexport async function completeAgentTeamRun(\n taskId: string,\n status: \"done\" | \"failed\",\n claimedAttempts?: number,\n): Promise<boolean> {\n await ensureTable();\n const client = getDbExec();\n const result =\n claimedAttempts !== undefined\n ? await client.execute({\n sql: `UPDATE agent_team_run_queue SET status = ?, updated_at = ? WHERE task_id = ? AND attempts = ?`,\n args: [status, Date.now(), taskId, claimedAttempts],\n })\n : await client.execute({\n sql: `UPDATE agent_team_run_queue SET status = ?, updated_at = ? WHERE task_id = ?`,\n args: [status, Date.now(), taskId],\n });\n return getAffectedRowCount(result) > 0;\n}\n\n/** Task ids of an owner's in-flight (queued/running) sub-agent runs. Used by\n * the RunsTray data path to self-heal dropped dispatches and dead runs. */\nexport async function listActiveAgentTeamTaskIdsForOwner(\n owner: string,\n limit = 50,\n): Promise<string[]> {\n await ensureTable();\n const client = getDbExec();\n const { rows } = await client.execute({\n sql: `SELECT task_id FROM agent_team_run_queue\n WHERE owner_email = ? AND status IN ('queued', 'running')\n ORDER BY updated_at DESC\n LIMIT ?`,\n args: [owner, limit],\n });\n return rows.map((r: any) => String(r.task_id));\n}\n\nexport async function getAgentTeamRunDispatchState(\n taskId: string,\n): Promise<AgentTeamRunQueueRow | null> {\n await ensureTable();\n const client = getDbExec();\n const { rows } = await client.execute({\n sql: `SELECT * FROM agent_team_run_queue WHERE task_id = ?`,\n args: [taskId],\n });\n if (rows.length === 0) return null;\n return rowToQueueRow(rows[0]);\n}\n\n/** Test-only accessor for resetting the cached init promise between specs. */\nexport const _agentTeamRunQueueForTests = {\n resetInit() {\n _initPromise = undefined;\n },\n getAffectedRowCount,\n};\n"]}
1
+ {"version":3,"file":"agent-teams-run-queue.js","sourceRoot":"","sources":["../../src/server/agent-teams-run-queue.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Durable dispatch queue for Agent Teams sub-agent runs.\n *\n * Background sub-agents used to run as an in-process detached promise from the\n * spawning request, which serverless hosts (Netlify/Lambda/Vercel) freeze the\n * moment the response flushes — so the sub-agent never actually completed. This\n * queue is the durable hand-off: `spawnTask` enqueues a row here and self-fires\n * the `/_agent-native/agent-teams/_process-run` route (see `self-dispatch.ts`),\n * which claims the row and runs the sub-agent in its own fresh function\n * invocation. The same pattern A2A (`a2a/task-store.ts`) and integration\n * webhooks use.\n *\n * The app_state task record (`agent-task:{taskId}`) remains the source of truth\n * for UI/status; this table only drives dispatch, idempotent claiming, and\n * cross-invocation continuation.\n */\nimport {\n getDbExec,\n intType,\n isPostgres,\n retryOnDdlRace,\n} from \"../db/client.js\";\nimport { ensureIndexExists, ensureTableExists } from \"../db/ddl-guard.js\";\n\n/** Max cross-invocation continuations for one sub-agent run. Each continuation\n * is one ~40s soft-timeout chunk, so ~60 ≈ ~40 minutes of wall-clock work. Two\n * independent guards bound runaway self-fire: this persisted cap and the\n * per-invocation `MAX_RUN_LOOP_CONTINUATIONS` inside the run loop.\n *\n * Progress-aware continuation: non-progressing chunks count against a much\n * smaller budget (`MAX_AGENT_TEAM_NO_PROGRESS_CONTINUATIONS`) so a stalled\n * sub-agent is detected and finalized quickly, while actively-working sub-agents\n * can run for as long as this absolute cap allows. */\nexport const MAX_AGENT_TEAM_CONTINUATIONS = 60;\n\n/** Max consecutive *non-progressing* continuations before the run is finalized.\n * A chunk that emits no new events, tool calls, or text counts as no-progress. */\nexport const MAX_AGENT_TEAM_NO_PROGRESS_CONTINUATIONS = 3;\n\n/** A `running` row whose `updated_at` is older than this is treated as a\n * dropped dispatch and may be re-claimed / re-fired. Must be comfortably larger\n * than the processor heartbeat interval so a healthy run is never re-claimed. */\nexport const RUN_DISPATCH_STUCK_AFTER_MS = 15_000;\n\n/** Hard cutoff after which a stuck row is failed deterministically rather than\n * retried (side-effectful work may already have happened). Mirrors A2A. */\nexport const RUN_PROCESSING_STUCK_AFTER_MS = 5 * 60 * 1000;\n\nexport type AgentTeamRunQueueStatus = \"queued\" | \"running\" | \"done\" | \"failed\";\n\nexport interface AgentTeamRunPayload {\n description: string;\n instructions?: string;\n model?: string;\n /** Custom agent profile name (agents/*.md) to brief the sub-agent with. */\n agentRef?: string;\n /** Parent thread to post a completion recap to. */\n parentThreadId?: string;\n /** Display name for the sub-agent tab. */\n name?: string;\n /** Logical-turn id, stable across continuation chunks so durable assistant\n * messages fold into one. */\n turnId: string;\n}\n\nexport interface AgentTeamRunQueueRow {\n taskId: string;\n threadId: string;\n runId: string;\n status: AgentTeamRunQueueStatus;\n ownerEmail: string | null;\n orgId: string | null;\n payload: AgentTeamRunPayload;\n continuationCount: number;\n attempts: number;\n createdAt: number;\n updatedAt: number;\n}\n\nlet _initPromise: Promise<void> | undefined;\n\nasync function ensureTable(): Promise<void> {\n if (!_initPromise) {\n _initPromise = (async () => {\n const client = getDbExec();\n const createSql = `\n CREATE TABLE IF NOT EXISTS agent_team_run_queue (\n task_id TEXT PRIMARY KEY,\n thread_id TEXT NOT NULL,\n run_id TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'queued',\n owner_email TEXT,\n org_id TEXT,\n payload TEXT NOT NULL,\n continuation_count ${intType()} NOT NULL DEFAULT 0,\n attempts ${intType()} NOT NULL DEFAULT 0,\n created_at ${intType()} NOT NULL,\n updated_at ${intType()} NOT NULL\n )\n `;\n const indexSql = `CREATE INDEX IF NOT EXISTS idx_agent_team_run_queue_status ON agent_team_run_queue (status, updated_at)`;\n\n // PG guard: probe information_schema / pg_indexes first (no lock), run\n // DDL only when missing, bounded by a transaction-scoped lock_timeout.\n if (isPostgres()) {\n await ensureTableExists(\"agent_team_run_queue\", createSql);\n await ensureIndexExists(\"idx_agent_team_run_queue_status\", indexSql);\n return;\n }\n\n // SQLite (local dev): no lock problem — keep the original behaviour.\n await retryOnDdlRace(() => client.execute(createSql));\n await retryOnDdlRace(() => client.execute(indexSql));\n })().catch((err) => {\n _initPromise = undefined;\n throw err;\n });\n }\n return _initPromise;\n}\n\nfunction getAffectedRowCount(result: unknown): number {\n const r = result as\n | { rowsAffected?: number; rowCount?: number; count?: number }\n | undefined;\n return r?.rowsAffected ?? r?.rowCount ?? r?.count ?? 0;\n}\n\nfunction rowToQueueRow(row: any): AgentTeamRunQueueRow {\n let payload: AgentTeamRunPayload;\n try {\n payload = JSON.parse(String(row.payload));\n } catch {\n payload = { description: \"\", turnId: String(row.run_id ?? row.task_id) };\n }\n return {\n taskId: String(row.task_id),\n threadId: String(row.thread_id),\n runId: String(row.run_id),\n status: String(row.status) as AgentTeamRunQueueStatus,\n ownerEmail: (row.owner_email as string | null) ?? null,\n orgId: (row.org_id as string | null) ?? null,\n payload,\n continuationCount: Number(row.continuation_count ?? 0),\n attempts: Number(row.attempts ?? 0),\n createdAt: Number(row.created_at ?? 0),\n updatedAt: Number(row.updated_at ?? 0),\n };\n}\n\nexport interface EnqueueAgentTeamRunInput {\n taskId: string;\n threadId: string;\n runId: string;\n ownerEmail?: string | null;\n orgId?: string | null;\n payload: AgentTeamRunPayload;\n}\n\nexport async function enqueueAgentTeamRun(\n input: EnqueueAgentTeamRunInput,\n): Promise<void> {\n await ensureTable();\n const client = getDbExec();\n const now = Date.now();\n await client.execute({\n sql: `INSERT INTO agent_team_run_queue\n (task_id, thread_id, run_id, status, owner_email, org_id, payload, continuation_count, attempts, created_at, updated_at)\n VALUES (?, ?, ?, 'queued', ?, ?, ?, 0, 0, ?, ?)`,\n args: [\n input.taskId,\n input.threadId,\n input.runId,\n input.ownerEmail ?? null,\n input.orgId ?? null,\n JSON.stringify(input.payload),\n now,\n now,\n ],\n });\n}\n\n/**\n * Atomically claim a run for processing. Succeeds when the row is `queued`, or\n * `running` but stale (a dropped dispatch past `RUN_DISPATCH_STUCK_AFTER_MS`).\n * Flips it to `running`, bumps `attempts`, and stamps `updated_at`. Returns the\n * claimed row, or null if another invocation already holds it (idempotency).\n */\nexport async function claimAgentTeamRun(\n taskId: string,\n options: { stuckAfterMs?: number } = {},\n): Promise<AgentTeamRunQueueRow | null> {\n await ensureTable();\n const client = getDbExec();\n const now = Date.now();\n const stuckCutoff =\n now - (options.stuckAfterMs ?? RUN_DISPATCH_STUCK_AFTER_MS);\n const result = await client.execute({\n sql: `UPDATE agent_team_run_queue\n SET status = 'running', attempts = attempts + 1, updated_at = ?\n WHERE task_id = ?\n AND (status = 'queued' OR (status = 'running' AND updated_at < ?))`,\n args: [now, taskId, stuckCutoff],\n });\n if (getAffectedRowCount(result) === 0) return null;\n\n const { rows } = await client.execute({\n sql: `SELECT * FROM agent_team_run_queue WHERE task_id = ?`,\n args: [taskId],\n });\n if (rows.length === 0) return null;\n return rowToQueueRow(rows[0]);\n}\n\n/** Heartbeat: bump `updated_at` while a claimed run is actively processing so a\n * healthy run isn't re-claimed by the stuck-refire path.\n *\n * When `claimedAttempts` is provided the UPDATE is fenced to\n * `attempts = claimedAttempts`: a superseded invocation (one that was\n * re-claimed after it stalled) will find the attempts counter has been bumped\n * and the update will be a no-op, signalling that this invocation should\n * self-terminate. */\nexport async function touchAgentTeamRun(\n taskId: string,\n claimedAttempts?: number,\n): Promise<boolean> {\n await ensureTable();\n const client = getDbExec();\n if (claimedAttempts !== undefined) {\n const result = await client.execute({\n sql: `UPDATE agent_team_run_queue SET updated_at = ? WHERE task_id = ? AND status = 'running' AND attempts = ?`,\n args: [Date.now(), taskId, claimedAttempts],\n });\n return getAffectedRowCount(result) > 0;\n }\n const result = await client.execute({\n sql: `UPDATE agent_team_run_queue SET updated_at = ? WHERE task_id = ? AND status = 'running'`,\n args: [Date.now(), taskId],\n });\n return getAffectedRowCount(result) > 0;\n}\n\n/**\n * Record a soft-timeout continuation: re-queue the row (so the next\n * self-fired invocation can claim it) and increment the counter. Returns the\n * new continuation count, or null if the row wasn't in a continuable state.\n *\n * When `claimedAttempts` is provided the UPDATE is fenced to\n * `attempts = claimedAttempts` so a superseded invocation cannot queue a\n * spurious continuation. */\nexport async function bumpAgentTeamContinuation(\n taskId: string,\n claimedAttempts?: number,\n): Promise<number | null> {\n await ensureTable();\n const client = getDbExec();\n const now = Date.now();\n const result =\n claimedAttempts !== undefined\n ? await client.execute({\n sql: `UPDATE agent_team_run_queue\n SET continuation_count = continuation_count + 1, status = 'queued', updated_at = ?\n WHERE task_id = ? AND status = 'running' AND attempts = ?`,\n args: [now, taskId, claimedAttempts],\n })\n : await client.execute({\n sql: `UPDATE agent_team_run_queue\n SET continuation_count = continuation_count + 1, status = 'queued', updated_at = ?\n WHERE task_id = ? AND status = 'running'`,\n args: [now, taskId],\n });\n if (getAffectedRowCount(result) === 0) return null;\n const { rows } = await client.execute({\n sql: `SELECT continuation_count FROM agent_team_run_queue WHERE task_id = ?`,\n args: [taskId],\n });\n if (rows.length === 0) return null;\n return Number((rows[0] as any).continuation_count ?? 0);\n}\n\n/**\n * Mark a run terminal.\n *\n * When `claimedAttempts` is provided the UPDATE is fenced to\n * `attempts = claimedAttempts` so a superseded invocation cannot overwrite a\n * freshly-claimed row's status. Returns whether the row was actually updated. */\nexport async function completeAgentTeamRun(\n taskId: string,\n status: \"done\" | \"failed\",\n claimedAttempts?: number,\n): Promise<boolean> {\n await ensureTable();\n const client = getDbExec();\n const result =\n claimedAttempts !== undefined\n ? await client.execute({\n sql: `UPDATE agent_team_run_queue SET status = ?, updated_at = ? WHERE task_id = ? AND attempts = ?`,\n args: [status, Date.now(), taskId, claimedAttempts],\n })\n : await client.execute({\n sql: `UPDATE agent_team_run_queue SET status = ?, updated_at = ? WHERE task_id = ?`,\n args: [status, Date.now(), taskId],\n });\n return getAffectedRowCount(result) > 0;\n}\n\n/** Task ids of an owner's in-flight (queued/running) sub-agent runs. Used by\n * the RunsTray data path to self-heal dropped dispatches and dead runs. */\nexport async function listActiveAgentTeamTaskIdsForOwner(\n owner: string,\n limit = 50,\n): Promise<string[]> {\n await ensureTable();\n const client = getDbExec();\n const { rows } = await client.execute({\n sql: `SELECT task_id FROM agent_team_run_queue\n WHERE owner_email = ? AND status IN ('queued', 'running')\n ORDER BY updated_at DESC\n LIMIT ?`,\n args: [owner, limit],\n });\n return rows.map((r: any) => String(r.task_id));\n}\n\nexport async function getAgentTeamRunDispatchState(\n taskId: string,\n): Promise<AgentTeamRunQueueRow | null> {\n await ensureTable();\n const client = getDbExec();\n const { rows } = await client.execute({\n sql: `SELECT * FROM agent_team_run_queue WHERE task_id = ?`,\n args: [taskId],\n });\n if (rows.length === 0) return null;\n return rowToQueueRow(rows[0]);\n}\n\n/** Test-only accessor for resetting the cached init promise between specs. */\nexport const _agentTeamRunQueueForTests = {\n resetInit() {\n _initPromise = undefined;\n },\n getAffectedRowCount,\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/server/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/server/auth.ts"],"names":[],"mappings":"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"}
@@ -39,6 +39,7 @@ function toWebRequest(event) {
39
39
  return req;
40
40
  }
41
41
  import { getDbExec, isPostgres, intType, retryOnDdlRace, describeDbError, } from "../db/client.js";
42
+ import { ensureColumnExists, ensureTableExists } from "../db/ddl-guard.js";
42
43
  import { widenIntColumnsToBigInt } from "../db/widen-columns.js";
43
44
  import { readBody } from "../server/h3-helpers.js";
44
45
  import { putSetting } from "../settings/store.js";
@@ -591,13 +592,26 @@ async function ensureSessionTable() {
591
592
  if (!_sessionInitPromise) {
592
593
  _sessionInitPromise = (async () => {
593
594
  const client = getDbExec();
594
- await retryOnDdlRace(() => client.execute(`
595
+ const createSql = `
595
596
  CREATE TABLE IF NOT EXISTS sessions (
596
597
  token TEXT PRIMARY KEY,
597
598
  email TEXT,
598
599
  created_at ${intType()} NOT NULL
599
600
  )
600
- `));
601
+ `;
602
+ // PG guard: probe information_schema first (no lock), run DDL only when
603
+ // missing, bounded by a transaction-scoped lock_timeout.
604
+ if (isPostgres()) {
605
+ await ensureTableExists("sessions", createSql);
606
+ await ensureColumnExists("sessions", "email", `ALTER TABLE sessions ADD COLUMN IF NOT EXISTS email TEXT`);
607
+ // Older deployments have a 32-bit `created_at`; on Postgres the
608
+ // `Date.now()` written on session create overflows int4. Widen in place
609
+ // (no-op once done / on fresh DBs).
610
+ await widenIntColumnsToBigInt("sessions", ["created_at"]);
611
+ return;
612
+ }
613
+ // SQLite (local dev): no lock problem — keep the original behaviour.
614
+ await retryOnDdlRace(() => client.execute(createSql));
601
615
  try {
602
616
  await client.execute(`ALTER TABLE sessions ADD COLUMN email TEXT`);
603
617
  }