@agentstep/agent-sdk 0.5.11 → 0.5.12

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 (191) hide show
  1. package/dist/auth/middleware.js +8 -8
  2. package/dist/backends/claude/args.js +6 -6
  3. package/dist/backends/claude/index.js +11 -11
  4. package/dist/backends/codex/auth.js +6 -6
  5. package/dist/backends/codex/index.js +12 -12
  6. package/dist/backends/factory/auth.js +6 -6
  7. package/dist/backends/factory/index.js +14 -14
  8. package/dist/backends/gemini/auth.js +6 -6
  9. package/dist/backends/gemini/index.js +10 -10
  10. package/dist/backends/opencode/auth.js +6 -6
  11. package/dist/backends/opencode/index.js +12 -12
  12. package/dist/backends/pi/auth.js +6 -6
  13. package/dist/backends/pi/index.js +12 -12
  14. package/dist/backends/registry.js +30 -30
  15. package/dist/{chunk-ZEDULYKX.js → chunk-2IISXUVF.js} +1 -1
  16. package/dist/{chunk-34Q6WMIT.js → chunk-2Z56TPBL.js} +3 -3
  17. package/dist/{chunk-MMB7ZTAF.js → chunk-3DRK36FB.js} +5 -5
  18. package/dist/{chunk-LXSGQ2VF.js → chunk-3NNU7TQ4.js} +8 -8
  19. package/dist/{chunk-SAA6477U.js → chunk-3UK3IF27.js} +4 -4
  20. package/dist/chunk-4ANV3AH3.js +65 -0
  21. package/dist/{chunk-RNU253MD.js → chunk-4ENK7S24.js} +21 -2
  22. package/dist/{chunk-IFZ7EXMG.js → chunk-4EVT4MFD.js} +1 -1
  23. package/dist/{chunk-7POF237O.js → chunk-4MKJB6U2.js} +1 -1
  24. package/dist/{chunk-WKPUTJGD.js → chunk-5LDBCBOR.js} +1 -1
  25. package/dist/{chunk-5KXAMBPI.js → chunk-6PIL2RJD.js} +2 -2
  26. package/dist/{chunk-KZGFT75I.js → chunk-6X3G5SAS.js} +41 -18
  27. package/dist/{chunk-WUMBZMBF.js → chunk-7ASUTNKE.js} +2 -2
  28. package/dist/{chunk-CR3UN3BC.js → chunk-7BT6V4CH.js} +20 -18
  29. package/dist/{chunk-5COWXLGO.js → chunk-7D55V4XP.js} +1 -1
  30. package/dist/{chunk-BJ3EPRZU.js → chunk-7NZ46LIO.js} +29 -28
  31. package/dist/{chunk-6FNPCZTL.js → chunk-7SO7O6RV.js} +2 -2
  32. package/dist/{chunk-4JPJ3ZIV.js → chunk-7Z6LTBYQ.js} +5 -5
  33. package/dist/{chunk-NVTDXBGV.js → chunk-APKELBCA.js} +1 -1
  34. package/dist/{chunk-RYVVSBST.js → chunk-B3UOTIOI.js} +7 -7
  35. package/dist/{chunk-4UNMDYKD.js → chunk-B5JUCPYW.js} +1 -1
  36. package/dist/{chunk-LJSD6G6K.js → chunk-BQ5MWNWN.js} +3 -3
  37. package/dist/{chunk-KB4EKC5T.js → chunk-BYJRL4IQ.js} +5 -5
  38. package/dist/{chunk-7NIUHK63.js → chunk-C3ZPWUDE.js} +2 -2
  39. package/dist/{chunk-LSXVCZN7.js → chunk-CD2FQVQR.js} +1 -1
  40. package/dist/{chunk-6BOOQV4Q.js → chunk-CFLMIJ2C.js} +3 -3
  41. package/dist/{chunk-GMIAU3CP.js → chunk-CGGGCKSK.js} +4 -4
  42. package/dist/chunk-D2GADI73.js +253 -0
  43. package/dist/{chunk-MPG77WHN.js → chunk-D3TY7PMJ.js} +5 -5
  44. package/dist/{chunk-UHPS3XNG.js → chunk-DAIEVD4O.js} +4 -4
  45. package/dist/{chunk-2U2KCTMF.js → chunk-DDF2CRA3.js} +2 -2
  46. package/dist/{chunk-WL3VMUAI.js → chunk-FCKUWBUL.js} +2 -2
  47. package/dist/{chunk-YFGBTXID.js → chunk-FV2XE3DX.js} +2 -2
  48. package/dist/{chunk-73BYGQWA.js → chunk-G7Y5YGLE.js} +1 -1
  49. package/dist/{chunk-JE5Z2GLG.js → chunk-HE3IEIKM.js} +3 -3
  50. package/dist/{chunk-WKMRBRJQ.js → chunk-HH23DOBB.js} +1 -1
  51. package/dist/{chunk-HCORTMQH.js → chunk-HHS6EHSG.js} +4 -4
  52. package/dist/{chunk-T4IPZC4G.js → chunk-ISXWS5Y4.js} +6 -6
  53. package/dist/{chunk-TCTAUIAQ.js → chunk-JK2GXKOQ.js} +5 -5
  54. package/dist/{chunk-7KSQJK2V.js → chunk-JXU6SA6S.js} +42 -1
  55. package/dist/{chunk-ALIJNBQY.js → chunk-KHICXOTH.js} +3 -3
  56. package/dist/{chunk-BUQATYS7.js → chunk-KNWM237Q.js} +2 -2
  57. package/dist/{chunk-RNDLMMKI.js → chunk-LOWHDHDD.js} +3 -3
  58. package/dist/{chunk-6SVZD3UA.js → chunk-M4OF5D4K.js} +4 -4
  59. package/dist/{chunk-VFVLRR3Z.js → chunk-M7SYXJBT.js} +1 -1
  60. package/dist/{chunk-IBO36HUU.js → chunk-MQBNN4KH.js} +1 -1
  61. package/dist/{chunk-32RP2UX6.js → chunk-MTB7SCZ5.js} +5 -5
  62. package/dist/{chunk-LEVIKSPQ.js → chunk-MTRTBT7L.js} +1 -1
  63. package/dist/{chunk-UMIIZKVX.js → chunk-N5F5OUUZ.js} +3 -3
  64. package/dist/{chunk-KGTWD46T.js → chunk-NWIMPG4M.js} +1 -1
  65. package/dist/chunk-ONEKY3CM.js +146 -0
  66. package/dist/{chunk-OMI5CR4P.js → chunk-ONS32E65.js} +28 -20
  67. package/dist/{chunk-N5C3WQWD.js → chunk-PDUQCDIO.js} +1 -1
  68. package/dist/{chunk-DSNNEER4.js → chunk-PJTGQVKB.js} +1 -1
  69. package/dist/{chunk-M2ZBXMYO.js → chunk-PLSXDJT4.js} +5 -4
  70. package/dist/{chunk-2UDGQWRA.js → chunk-PPI76YVT.js} +2 -2
  71. package/dist/{chunk-N33MOUCH.js → chunk-PRWWTLPR.js} +3 -3
  72. package/dist/{chunk-T75UYYMI.js → chunk-PVFGDKXO.js} +2 -2
  73. package/dist/{chunk-PIJJXKMK.js → chunk-PXMTLKUJ.js} +3 -3
  74. package/dist/{chunk-6ERUVF2Y.js → chunk-QB7JAMWG.js} +1 -1
  75. package/dist/{chunk-KRQRJEQY.js → chunk-QS544PN6.js} +4 -4
  76. package/dist/{chunk-4N7WVJHB.js → chunk-R5LXEIOJ.js} +9 -9
  77. package/dist/{chunk-OJUDLJOG.js → chunk-REY2YZ5X.js} +3 -3
  78. package/dist/{chunk-4IEDAORR.js → chunk-RFK4W5PZ.js} +1 -1
  79. package/dist/{chunk-NOG7ZJJA.js → chunk-RLLVP37Q.js} +1 -1
  80. package/dist/{chunk-UONJFSWM.js → chunk-S5NB47IR.js} +6 -6
  81. package/dist/{chunk-3XGUMXGR.js → chunk-SXR4HQZY.js} +2 -2
  82. package/dist/{chunk-YN2F26NN.js → chunk-T3CXZ2BE.js} +2 -2
  83. package/dist/{chunk-I7FLMXEF.js → chunk-TN34IN7S.js} +16 -13
  84. package/dist/{chunk-XUODI55L.js → chunk-U3QU5AVC.js} +1 -1
  85. package/dist/{chunk-GTHATO73.js → chunk-UB5WVCY4.js} +3 -3
  86. package/dist/{chunk-3TF3YLM2.js → chunk-UROFA6OZ.js} +2 -2
  87. package/dist/{chunk-4HFKDLD7.js → chunk-UTQRPXTL.js} +9 -8
  88. package/dist/{chunk-Y3EUEPGQ.js → chunk-UWHV7EJG.js} +2 -2
  89. package/dist/{chunk-5VL4L6BJ.js → chunk-VG2TYPZ4.js} +18 -2
  90. package/dist/{chunk-EZBJEV6F.js → chunk-VTH56ERA.js} +4 -4
  91. package/dist/{chunk-Z4DZMNDE.js → chunk-W6QYWXOZ.js} +2 -2
  92. package/dist/{chunk-3WZGFAV4.js → chunk-WKGJQIRC.js} +4 -3
  93. package/dist/{chunk-EGN4TPN5.js → chunk-WT3SEE34.js} +3 -3
  94. package/dist/{chunk-CZ4IOIWV.js → chunk-X23OAFFE.js} +4 -4
  95. package/dist/{chunk-DVDNHXCM.js → chunk-XSRIFWHR.js} +2 -2
  96. package/dist/{chunk-SS5IC3XV.js → chunk-Y6BFKPNB.js} +1 -1
  97. package/dist/{chunk-EFSLGRY2.js → chunk-YCL5RHEC.js} +2 -2
  98. package/dist/{chunk-RTLMLG3A.js → chunk-YD67W6DW.js} +7 -7
  99. package/dist/{chunk-4QRE6LZG.js → chunk-YE47YUGE.js} +6 -6
  100. package/dist/{chunk-F6DCNXO5.js → chunk-YEJFXJHR.js} +2 -2
  101. package/dist/{chunk-RJB7YG26.js → chunk-YUVQQCT4.js} +15 -15
  102. package/dist/{chunk-T64ECODW.js → chunk-YUZFNAG6.js} +21 -0
  103. package/dist/{chunk-G43CK3VC.js → chunk-YWAMRRAX.js} +9 -9
  104. package/dist/config/index.js +5 -5
  105. package/dist/containers/client.js +6 -6
  106. package/dist/containers/exec.js +6 -6
  107. package/dist/containers/lifecycle.js +42 -42
  108. package/dist/containers/setup.js +9 -8
  109. package/dist/db/agents.js +6 -6
  110. package/dist/db/api_keys.js +5 -5
  111. package/dist/db/audit.js +3 -3
  112. package/dist/db/batch.js +10 -10
  113. package/dist/db/client.js +2 -2
  114. package/dist/db/credentials.js +3 -3
  115. package/dist/db/drizzle.js +4 -4
  116. package/dist/db/environments.js +6 -6
  117. package/dist/db/events.js +5 -5
  118. package/dist/db/files.js +5 -5
  119. package/dist/db/memory.js +5 -5
  120. package/dist/db/migrations.js +1 -1
  121. package/dist/db/proxy.js +5 -5
  122. package/dist/db/schema.js +5 -3
  123. package/dist/db/session-resources.js +5 -5
  124. package/dist/db/sessions.js +8 -8
  125. package/dist/db/skills.js +5 -5
  126. package/dist/db/sync.js +5 -5
  127. package/dist/db/tenants.js +3 -3
  128. package/dist/db/threads.js +7 -7
  129. package/dist/db/traces.js +5 -5
  130. package/dist/db/upstream_keys.js +3 -3
  131. package/dist/db/vaults.js +6 -6
  132. package/dist/db/work.js +33 -0
  133. package/dist/dreaming/review.js +11 -11
  134. package/dist/handlers/agents.js +58 -58
  135. package/dist/handlers/api_keys.js +59 -59
  136. package/dist/handlers/audit.js +59 -59
  137. package/dist/handlers/batch.js +59 -59
  138. package/dist/handlers/credentials.js +59 -59
  139. package/dist/handlers/environments.js +59 -59
  140. package/dist/handlers/events.js +62 -62
  141. package/dist/handlers/files.js +59 -59
  142. package/dist/handlers/index.js +135 -114
  143. package/dist/handlers/license.js +58 -58
  144. package/dist/handlers/memory.js +60 -60
  145. package/dist/handlers/metrics.js +58 -58
  146. package/dist/handlers/models.js +59 -59
  147. package/dist/handlers/providers.js +58 -58
  148. package/dist/handlers/resources.js +58 -58
  149. package/dist/handlers/sessions.js +62 -62
  150. package/dist/handlers/settings.js +58 -58
  151. package/dist/handlers/skills-write.js +61 -59
  152. package/dist/handlers/skills.js +59 -59
  153. package/dist/handlers/stream.js +58 -58
  154. package/dist/handlers/tenants.js +59 -59
  155. package/dist/handlers/threads.js +59 -59
  156. package/dist/handlers/traces.js +59 -59
  157. package/dist/handlers/ui.d.ts +6 -0
  158. package/dist/handlers/ui.d.ts.map +1 -0
  159. package/dist/handlers/ui.js +1 -1
  160. package/dist/handlers/upstream_keys.js +61 -61
  161. package/dist/handlers/vaults.js +58 -58
  162. package/dist/handlers/whoami.js +58 -58
  163. package/dist/handlers/work.js +114 -0
  164. package/dist/http.js +57 -57
  165. package/dist/index.js +78 -67
  166. package/dist/init.js +54 -54
  167. package/dist/lib/model-registry.js +6 -6
  168. package/dist/lib/skills-cache.js +6 -6
  169. package/dist/observability/otlp.js +12 -12
  170. package/dist/observability/redactor.js +8 -8
  171. package/dist/providers/fly.js +5 -5
  172. package/dist/providers/modal.js +5 -5
  173. package/dist/providers/registry.js +15 -3
  174. package/dist/providers/resolve-secrets.js +7 -7
  175. package/dist/providers/sprites.js +7 -7
  176. package/dist/providers/upstream-keys.js +12 -12
  177. package/dist/providers/vercel.js +5 -5
  178. package/dist/proxy/forward.js +6 -6
  179. package/dist/queue/index.js +6 -6
  180. package/dist/sessions/bus.js +10 -10
  181. package/dist/sessions/driver.js +47 -47
  182. package/dist/sessions/grader.js +5 -5
  183. package/dist/sessions/secrets.js +8 -8
  184. package/dist/sessions/sweeper.js +43 -43
  185. package/dist/sessions/threads.js +48 -48
  186. package/dist/shutdown.js +44 -44
  187. package/dist/sync/anthropic.js +10 -10
  188. package/dist/sync/container-file-sync.js +6 -6
  189. package/dist/sync/file-sync.js +17 -17
  190. package/dist/workers/runner.js +85 -0
  191. package/package.json +1 -1
@@ -1,3 +1,7 @@
1
+ import {
2
+ buildClaudeArgs,
3
+ buildClaudeAuthEnv
4
+ } from "./chunk-Y6BFKPNB.js";
1
5
  import {
2
6
  PERMISSION_BRIDGE_DIR,
3
7
  PERMISSION_HOOK_SCRIPT_PATH,
@@ -15,17 +19,13 @@ import {
15
19
  import {
16
20
  createClaudeTranslator
17
21
  } from "./chunk-D6RQPBRG.js";
18
- import {
19
- buildClaudeArgs,
20
- buildClaudeAuthEnv
21
- } from "./chunk-SS5IC3XV.js";
22
22
  import {
23
23
  CLAUDE_WRAPPER_PATH,
24
24
  installClaudeWrapper
25
25
  } from "./chunk-J6T3W6RY.js";
26
26
  import {
27
27
  getConfig
28
- } from "./chunk-3WZGFAV4.js";
28
+ } from "./chunk-WKGJQIRC.js";
29
29
 
30
30
  // src/backends/claude/index.ts
31
31
  function buildTurn(input) {
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  jsonOk,
3
3
  routeWrap
4
- } from "./chunk-WL3VMUAI.js";
4
+ } from "./chunk-FCKUWBUL.js";
5
5
  import {
6
6
  readSetting,
7
7
  writeSetting
8
- } from "./chunk-3WZGFAV4.js";
8
+ } from "./chunk-WKGJQIRC.js";
9
9
  import {
10
10
  badRequest
11
11
  } from "./chunk-EZYKRG4W.js";
@@ -10,7 +10,7 @@ import {
10
10
  import {
11
11
  getDb,
12
12
  init_client
13
- } from "./chunk-XUODI55L.js";
13
+ } from "./chunk-U3QU5AVC.js";
14
14
 
15
15
  // src/db/tenants.ts
16
16
  init_client();
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  DEFAULT_TENANT_ID
3
- } from "./chunk-LSXVCZN7.js";
3
+ } from "./chunk-CD2FQVQR.js";
4
4
  import {
5
5
  init_ids,
6
6
  newId
@@ -13,10 +13,10 @@ import {
13
13
  import {
14
14
  getDrizzle,
15
15
  init_drizzle
16
- } from "./chunk-T75UYYMI.js";
16
+ } from "./chunk-PVFGDKXO.js";
17
17
  import {
18
18
  schema_exports
19
- } from "./chunk-RNU253MD.js";
19
+ } from "./chunk-4ENK7S24.js";
20
20
 
21
21
  // src/db/environments.ts
22
22
  init_drizzle();
@@ -7,7 +7,7 @@ import {
7
7
  jsonOk,
8
8
  paginatedOk,
9
9
  routeWrap
10
- } from "./chunk-WL3VMUAI.js";
10
+ } from "./chunk-FCKUWBUL.js";
11
11
  import {
12
12
  archiveVault,
13
13
  createVault,
@@ -19,14 +19,14 @@ import {
19
19
  listVaults,
20
20
  setEntry,
21
21
  updateVault
22
- } from "./chunk-OJUDLJOG.js";
22
+ } from "./chunk-REY2YZ5X.js";
23
23
  import {
24
24
  getAgent
25
- } from "./chunk-EGN4TPN5.js";
25
+ } from "./chunk-WT3SEE34.js";
26
26
  import {
27
27
  getDb,
28
28
  init_client
29
- } from "./chunk-XUODI55L.js";
29
+ } from "./chunk-U3QU5AVC.js";
30
30
  import {
31
31
  badRequest,
32
32
  conflict,
@@ -0,0 +1,253 @@
1
+ import {
2
+ init_ids,
3
+ newId
4
+ } from "./chunk-F4WUVOLE.js";
5
+ import {
6
+ init_clock,
7
+ nowMs,
8
+ toIso
9
+ } from "./chunk-HFDLUBWN.js";
10
+ import {
11
+ getDrizzle,
12
+ init_drizzle
13
+ } from "./chunk-PVFGDKXO.js";
14
+ import {
15
+ schema_exports
16
+ } from "./chunk-4ENK7S24.js";
17
+
18
+ // src/db/work.ts
19
+ init_drizzle();
20
+ init_ids();
21
+ init_clock();
22
+ import { eq, and, sql } from "drizzle-orm";
23
+ var LEASE_TTL_MS = 6e4;
24
+ function hydrate(row) {
25
+ const metadata = row.metadata_json ? JSON.parse(row.metadata_json) : {};
26
+ return {
27
+ type: "work",
28
+ id: row.id,
29
+ environment_id: row.environment_id,
30
+ state: row.state,
31
+ data: { type: "session", id: row.session_id },
32
+ metadata,
33
+ worker_id: row.worker_id ?? null,
34
+ created_at: toIso(row.created_at),
35
+ acknowledged_at: row.acknowledged_at ? toIso(row.acknowledged_at) : null,
36
+ started_at: row.started_at ? toIso(row.started_at) : null,
37
+ latest_heartbeat_at: row.latest_heartbeat_at ? toIso(row.latest_heartbeat_at) : null,
38
+ stop_requested_at: row.stop_requested_at ? toIso(row.stop_requested_at) : null,
39
+ stopped_at: row.stopped_at ? toIso(row.stopped_at) : null
40
+ };
41
+ }
42
+ function createWorkItem(envId, sessionId, opts) {
43
+ const db = getDrizzle();
44
+ const id = newId("work");
45
+ const now = nowMs();
46
+ db.insert(schema_exports.workItems).values({
47
+ id,
48
+ environment_id: envId,
49
+ session_id: sessionId,
50
+ state: "queued",
51
+ inputs_json: opts?.inputsJson ?? null,
52
+ metadata_json: "{}",
53
+ tenant_id: opts?.tenantId ?? null,
54
+ created_at: now
55
+ }).run();
56
+ return getWorkItem(id);
57
+ }
58
+ function getWorkItem(id) {
59
+ const db = getDrizzle();
60
+ const row = db.select().from(schema_exports.workItems).where(eq(schema_exports.workItems.id, id)).get();
61
+ return row ? hydrate(row) : void 0;
62
+ }
63
+ function getWorkItemInputs(id) {
64
+ const db = getDrizzle();
65
+ const row = db.select({ inputs_json: schema_exports.workItems.inputs_json }).from(schema_exports.workItems).where(eq(schema_exports.workItems.id, id)).get();
66
+ return row?.inputs_json ?? null;
67
+ }
68
+ function listWorkItems(envId, opts) {
69
+ const db = getDrizzle();
70
+ const limit = Math.min(Math.max(opts?.limit ?? 20, 1), 100);
71
+ const conditions = [
72
+ eq(schema_exports.workItems.environment_id, envId)
73
+ ];
74
+ if (opts?.state) {
75
+ conditions.push(eq(schema_exports.workItems.state, opts.state));
76
+ }
77
+ if (opts?.cursor) {
78
+ conditions.push(sql`${schema_exports.workItems.created_at} < (SELECT created_at FROM work_items WHERE id = ${opts.cursor})`);
79
+ }
80
+ const rows = db.select().from(schema_exports.workItems).where(and(...conditions)).orderBy(sql`${schema_exports.workItems.created_at} DESC`).limit(limit).all();
81
+ return rows.map(hydrate);
82
+ }
83
+ function pollWorkItem(envId, workerId) {
84
+ const db = getDrizzle();
85
+ const now = nowMs();
86
+ db.run(
87
+ sql`UPDATE work_items
88
+ SET state = 'queued', worker_id = NULL, lease_expires_at = NULL
89
+ WHERE state IN ('pending', 'active')
90
+ AND lease_expires_at IS NOT NULL
91
+ AND lease_expires_at < ${now}`
92
+ );
93
+ const leaseExpires = now + LEASE_TTL_MS;
94
+ const wid = workerId ?? null;
95
+ const result = db.run(
96
+ sql`UPDATE work_items
97
+ SET state = 'pending',
98
+ worker_id = ${wid},
99
+ lease_expires_at = ${leaseExpires}
100
+ WHERE id = (
101
+ SELECT id FROM work_items
102
+ WHERE environment_id = ${envId} AND state = 'queued'
103
+ ORDER BY created_at ASC LIMIT 1
104
+ )
105
+ AND state = 'queued'`
106
+ );
107
+ if (result.changes === 0) return null;
108
+ const rows = db.all(
109
+ sql`SELECT * FROM work_items
110
+ WHERE environment_id = ${envId}
111
+ AND state = 'pending'
112
+ AND lease_expires_at = ${leaseExpires}
113
+ AND worker_id IS ${wid}
114
+ ORDER BY created_at ASC LIMIT 1`
115
+ );
116
+ if (rows.length === 0) return null;
117
+ return hydrate(rows[0]);
118
+ }
119
+ function ackWorkItem(id, workerId) {
120
+ const db = getDrizzle();
121
+ const now = nowMs();
122
+ const leaseExpires = now + LEASE_TTL_MS;
123
+ const conditions = [eq(schema_exports.workItems.id, id), eq(schema_exports.workItems.state, "pending")];
124
+ const res = db.update(schema_exports.workItems).set({
125
+ state: "active",
126
+ worker_id: workerId ?? void 0,
127
+ acknowledged_at: now,
128
+ started_at: now,
129
+ lease_expires_at: leaseExpires
130
+ }).where(and(...conditions)).run();
131
+ if (res.changes === 0) return void 0;
132
+ return getWorkItem(id);
133
+ }
134
+ function heartbeatWorkItem(id) {
135
+ const db = getDrizzle();
136
+ const item = getWorkItem(id);
137
+ if (!item) return void 0;
138
+ const now = nowMs();
139
+ if (item.state === "completed" || item.state === "failed") {
140
+ return {
141
+ type: "work_heartbeat",
142
+ last_heartbeat: toIso(now),
143
+ lease_extended: false,
144
+ state: item.state,
145
+ ttl_seconds: 0
146
+ };
147
+ }
148
+ const leaseExpires = now + LEASE_TTL_MS;
149
+ db.update(schema_exports.workItems).set({
150
+ latest_heartbeat_at: now,
151
+ lease_expires_at: leaseExpires
152
+ }).where(eq(schema_exports.workItems.id, id)).run();
153
+ return {
154
+ type: "work_heartbeat",
155
+ last_heartbeat: toIso(now),
156
+ lease_extended: true,
157
+ state: item.state,
158
+ ttl_seconds: LEASE_TTL_MS / 1e3
159
+ };
160
+ }
161
+ function completeWorkItem(id, state) {
162
+ const db = getDrizzle();
163
+ const now = nowMs();
164
+ const res = db.update(schema_exports.workItems).set({
165
+ state,
166
+ stopped_at: now,
167
+ lease_expires_at: null
168
+ }).where(eq(schema_exports.workItems.id, id)).run();
169
+ if (res.changes === 0) return void 0;
170
+ return getWorkItem(id);
171
+ }
172
+ function stopWorkItem(id, force) {
173
+ const db = getDrizzle();
174
+ const now = nowMs();
175
+ if (force) {
176
+ const res = db.update(schema_exports.workItems).set({
177
+ state: "failed",
178
+ stop_requested_at: now,
179
+ stopped_at: now,
180
+ lease_expires_at: null
181
+ }).where(eq(schema_exports.workItems.id, id)).run();
182
+ if (res.changes === 0) return void 0;
183
+ } else {
184
+ const res = db.update(schema_exports.workItems).set({ stop_requested_at: now }).where(eq(schema_exports.workItems.id, id)).run();
185
+ if (res.changes === 0) return void 0;
186
+ }
187
+ return getWorkItem(id);
188
+ }
189
+ function updateWorkItemMetadata(id, metadata) {
190
+ const db = getDrizzle();
191
+ const item = getWorkItem(id);
192
+ if (!item) return void 0;
193
+ const merged = { ...item.metadata };
194
+ for (const [key, value] of Object.entries(metadata)) {
195
+ if (value === null) {
196
+ delete merged[key];
197
+ } else {
198
+ merged[key] = value;
199
+ }
200
+ }
201
+ db.update(schema_exports.workItems).set({ metadata_json: JSON.stringify(merged) }).where(eq(schema_exports.workItems.id, id)).run();
202
+ return getWorkItem(id);
203
+ }
204
+ function getWorkQueueStats(envId) {
205
+ const db = getDrizzle();
206
+ const rows = db.all(
207
+ sql`SELECT state, COUNT(*) as cnt
208
+ FROM work_items
209
+ WHERE environment_id = ${envId}
210
+ GROUP BY state`
211
+ );
212
+ const counts = {};
213
+ for (const row of rows) {
214
+ counts[row.state] = row.cnt;
215
+ }
216
+ const depth = counts["queued"] ?? 0;
217
+ const pending = (counts["pending"] ?? 0) + (counts["active"] ?? 0);
218
+ const oldestRow = db.all(
219
+ sql`SELECT MIN(created_at) as oldest
220
+ FROM work_items
221
+ WHERE environment_id = ${envId} AND state = 'queued'`
222
+ );
223
+ const oldestQueuedAt = oldestRow[0]?.oldest ? toIso(oldestRow[0].oldest) : null;
224
+ const workerRows = db.all(
225
+ sql`SELECT COUNT(DISTINCT worker_id) as cnt
226
+ FROM work_items
227
+ WHERE environment_id = ${envId}
228
+ AND state IN ('pending', 'active')
229
+ AND worker_id IS NOT NULL`
230
+ );
231
+ const workersPollling = workerRows[0]?.cnt ?? 0;
232
+ return {
233
+ type: "work_queue_stats",
234
+ depth,
235
+ pending,
236
+ workers_polling: workersPollling > 0 ? workersPollling : null,
237
+ oldest_queued_at: oldestQueuedAt
238
+ };
239
+ }
240
+
241
+ export {
242
+ createWorkItem,
243
+ getWorkItem,
244
+ getWorkItemInputs,
245
+ listWorkItems,
246
+ pollWorkItem,
247
+ ackWorkItem,
248
+ heartbeatWorkItem,
249
+ completeWorkItem,
250
+ stopWorkItem,
251
+ updateWorkItemMetadata,
252
+ getWorkQueueStats
253
+ };
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-23UKWXJH.js";
7
7
  import {
8
8
  recordAudit
9
- } from "./chunk-N5C3WQWD.js";
9
+ } from "./chunk-PDUQCDIO.js";
10
10
  import {
11
11
  COMMUNITY_LIMITS,
12
12
  hasFeature,
@@ -15,7 +15,7 @@ import {
15
15
  import {
16
16
  jsonOk,
17
17
  routeWrap
18
- } from "./chunk-WL3VMUAI.js";
18
+ } from "./chunk-FCKUWBUL.js";
19
19
  import {
20
20
  createApiKey,
21
21
  getApiKeyById,
@@ -23,14 +23,14 @@ import {
23
23
  listApiKeys,
24
24
  revokeApiKey,
25
25
  updateApiKeyPermissions
26
- } from "./chunk-Z4DZMNDE.js";
26
+ } from "./chunk-W6QYWXOZ.js";
27
27
  import {
28
28
  listSessionsByApiKey
29
- } from "./chunk-32RP2UX6.js";
29
+ } from "./chunk-MTB7SCZ5.js";
30
30
  import {
31
31
  getDb,
32
32
  init_client
33
- } from "./chunk-XUODI55L.js";
33
+ } from "./chunk-U3QU5AVC.js";
34
34
  import {
35
35
  badRequest,
36
36
  forbidden,
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  listTraces
3
- } from "./chunk-7POF237O.js";
3
+ } from "./chunk-4MKJB6U2.js";
4
4
  import {
5
5
  jsonOk,
6
6
  routeWrap
7
- } from "./chunk-WL3VMUAI.js";
7
+ } from "./chunk-FCKUWBUL.js";
8
8
  import {
9
9
  exportTrace
10
- } from "./chunk-4JPJ3ZIV.js";
10
+ } from "./chunk-7Z6LTBYQ.js";
11
11
  import {
12
12
  listEventsByTrace,
13
13
  rowToManagedEvent
14
- } from "./chunk-N33MOUCH.js";
14
+ } from "./chunk-PRWWTLPR.js";
15
15
  import {
16
16
  badRequest,
17
17
  notFound
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  getModels
3
- } from "./chunk-KGTWD46T.js";
3
+ } from "./chunk-NWIMPG4M.js";
4
4
  import {
5
5
  jsonOk,
6
6
  routeWrap
7
- } from "./chunk-WL3VMUAI.js";
7
+ } from "./chunk-FCKUWBUL.js";
8
8
 
9
9
  // src/handlers/models.ts
10
10
  function handleListModels(request) {
@@ -4,13 +4,13 @@ import {
4
4
  } from "./chunk-D2XITRN6.js";
5
5
  import {
6
6
  authenticateAndIntercept
7
- } from "./chunk-LJSD6G6K.js";
7
+ } from "./chunk-BQ5MWNWN.js";
8
8
  import {
9
9
  checkAndBump
10
10
  } from "./chunk-HVUWXUUI.js";
11
11
  import {
12
12
  ensureInitialized
13
- } from "./chunk-CR3UN3BC.js";
13
+ } from "./chunk-7BT6V4CH.js";
14
14
  import {
15
15
  captureException
16
16
  } from "./chunk-3MQ2FWXS.js";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  listEntries
3
- } from "./chunk-OJUDLJOG.js";
3
+ } from "./chunk-REY2YZ5X.js";
4
4
  import {
5
5
  getConfig
6
- } from "./chunk-3WZGFAV4.js";
6
+ } from "./chunk-WKGJQIRC.js";
7
7
 
8
8
  // src/observability/redactor.ts
9
9
  var REDACTED = "[REDACTED]";
@@ -13,7 +13,7 @@ import {
13
13
  import {
14
14
  getDb,
15
15
  init_client
16
- } from "./chunk-XUODI55L.js";
16
+ } from "./chunk-U3QU5AVC.js";
17
17
 
18
18
  // src/db/upstream_keys.ts
19
19
  init_client();
@@ -3,21 +3,21 @@ import {
3
3
  } from "./chunk-23UKWXJH.js";
4
4
  import {
5
5
  recordAudit
6
- } from "./chunk-N5C3WQWD.js";
6
+ } from "./chunk-PDUQCDIO.js";
7
7
  import {
8
8
  requireFeature
9
9
  } from "./chunk-2N2KL4KM.js";
10
10
  import {
11
11
  jsonOk,
12
12
  routeWrap
13
- } from "./chunk-WL3VMUAI.js";
13
+ } from "./chunk-FCKUWBUL.js";
14
14
  import {
15
15
  archiveTenant,
16
16
  createTenant,
17
17
  getTenant,
18
18
  listTenants,
19
19
  renameTenant
20
- } from "./chunk-LSXVCZN7.js";
20
+ } from "./chunk-CD2FQVQR.js";
21
21
  import {
22
22
  badRequest,
23
23
  notFound
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getConfig
3
- } from "./chunk-3WZGFAV4.js";
3
+ } from "./chunk-WKGJQIRC.js";
4
4
 
5
5
  // src/backends/factory/auth.ts
6
6
  function buildFactoryAuthEnv() {
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  disableUpstreamKey,
3
3
  selectNextUpstreamKey
4
- } from "./chunk-73BYGQWA.js";
4
+ } from "./chunk-G7Y5YGLE.js";
5
5
  import {
6
6
  listEntries
7
- } from "./chunk-OJUDLJOG.js";
7
+ } from "./chunk-REY2YZ5X.js";
8
8
  import {
9
9
  getSession
10
- } from "./chunk-32RP2UX6.js";
10
+ } from "./chunk-MTB7SCZ5.js";
11
11
  import {
12
12
  getConfig
13
- } from "./chunk-3WZGFAV4.js";
13
+ } from "./chunk-WKGJQIRC.js";
14
14
 
15
15
  // src/providers/upstream-keys.ts
16
16
  var CONSECUTIVE_FAIL_THRESHOLD = 3;
@@ -1,22 +1,22 @@
1
+ import {
2
+ buildOpencodeArgs
3
+ } from "./chunk-P56WU3UT.js";
1
4
  import {
2
5
  buildOpencodeAuthEnv,
3
6
  validateOpencodeRuntime
4
- } from "./chunk-4IEDAORR.js";
7
+ } from "./chunk-RFK4W5PZ.js";
5
8
  import {
6
9
  buildOpencodeConfigEnv
7
10
  } from "./chunk-V5DH3OAC.js";
8
11
  import {
9
12
  prepareOpencodeOnSandbox
10
13
  } from "./chunk-URNG7ZX2.js";
11
- import {
12
- createOpencodeTranslator
13
- } from "./chunk-ETWGCBIQ.js";
14
14
  import {
15
15
  OPENCODE_WRAPPER_PATH
16
16
  } from "./chunk-UY3VT3HQ.js";
17
17
  import {
18
- buildOpencodeArgs
19
- } from "./chunk-P56WU3UT.js";
18
+ createOpencodeTranslator
19
+ } from "./chunk-ETWGCBIQ.js";
20
20
  import {
21
21
  wrapPromptWithSystem
22
22
  } from "./chunk-YE2RMJY7.js";
@@ -4,14 +4,14 @@ import {
4
4
  import {
5
5
  jsonOk,
6
6
  routeWrap
7
- } from "./chunk-WL3VMUAI.js";
7
+ } from "./chunk-FCKUWBUL.js";
8
8
  import {
9
9
  getProxiedTenantId
10
- } from "./chunk-EFSLGRY2.js";
10
+ } from "./chunk-YCL5RHEC.js";
11
11
  import {
12
12
  getSession,
13
13
  updateSessionResources
14
- } from "./chunk-32RP2UX6.js";
14
+ } from "./chunk-MTB7SCZ5.js";
15
15
  import {
16
16
  countResources,
17
17
  createResource,
@@ -20,11 +20,11 @@ import {
20
20
  init_session_resources,
21
21
  listResources,
22
22
  updateResource
23
- } from "./chunk-3TF3YLM2.js";
23
+ } from "./chunk-UROFA6OZ.js";
24
24
  import {
25
25
  getDb,
26
26
  init_client
27
- } from "./chunk-XUODI55L.js";
27
+ } from "./chunk-U3QU5AVC.js";
28
28
  import {
29
29
  badRequest,
30
30
  notFound
@@ -1,3 +1,7 @@
1
+ import {
2
+ getConfig
3
+ } from "./chunk-WKGJQIRC.js";
4
+
1
5
  // src/providers/registry.ts
2
6
  var PROVIDERS = {
3
7
  sprites: async () => (await import("./providers/sprites.js")).spritesProvider,
@@ -20,7 +24,44 @@ async function resolveContainerProvider(providerName) {
20
24
  if (!loader) throw new Error(`Unknown provider: "${key}". Available: ${Object.keys(PROVIDERS).join(", ")}`);
21
25
  return loader();
22
26
  }
27
+ var warnedEnvProvider = false;
28
+ async function resolveProvider(opts) {
29
+ const result = await tryResolveProvider(opts);
30
+ if (!result) {
31
+ throw new Error(
32
+ "No container provider configured. Set DEFAULT_PROVIDER env var, use gateway serve --provider <name>, or gateway worker --provider <name>."
33
+ );
34
+ }
35
+ return result;
36
+ }
37
+ async function tryResolveProvider(opts) {
38
+ if (opts?.override) {
39
+ return resolveContainerProvider(opts.override);
40
+ }
41
+ if (opts?.envConfigProvider) {
42
+ if (!warnedEnvProvider) {
43
+ console.warn("[provider] config.provider on environment is deprecated \u2014 use gateway serve --provider or DEFAULT_PROVIDER env var");
44
+ warnedEnvProvider = true;
45
+ }
46
+ return resolveContainerProvider(opts.envConfigProvider);
47
+ }
48
+ const cfg = getConfig();
49
+ if (cfg.defaultProvider) {
50
+ return resolveContainerProvider(cfg.defaultProvider);
51
+ }
52
+ return null;
53
+ }
54
+ function resolveProviderName(opts) {
55
+ if (opts?.override) return opts.override;
56
+ if (opts?.envConfigProvider) return opts.envConfigProvider;
57
+ const cfg = getConfig();
58
+ if (cfg.defaultProvider) return cfg.defaultProvider;
59
+ return "unknown";
60
+ }
23
61
 
24
62
  export {
25
- resolveContainerProvider
63
+ resolveContainerProvider,
64
+ resolveProvider,
65
+ tryResolveProvider,
66
+ resolveProviderName
26
67
  };
@@ -11,18 +11,18 @@ import {
11
11
  getFileRecord,
12
12
  listFiles,
13
13
  updateFileStoragePath
14
- } from "./chunk-BUQATYS7.js";
14
+ } from "./chunk-KNWM237Q.js";
15
15
  import {
16
16
  assertResourceTenant
17
17
  } from "./chunk-23UKWXJH.js";
18
18
  import {
19
19
  jsonOk,
20
20
  routeWrap
21
- } from "./chunk-WL3VMUAI.js";
21
+ } from "./chunk-FCKUWBUL.js";
22
22
  import {
23
23
  getDb,
24
24
  init_client
25
- } from "./chunk-XUODI55L.js";
25
+ } from "./chunk-U3QU5AVC.js";
26
26
  import {
27
27
  badRequest,
28
28
  notFound
@@ -10,10 +10,10 @@ import {
10
10
  import {
11
11
  getDrizzle,
12
12
  init_drizzle
13
- } from "./chunk-T75UYYMI.js";
13
+ } from "./chunk-PVFGDKXO.js";
14
14
  import {
15
15
  schema_exports
16
- } from "./chunk-RNU253MD.js";
16
+ } from "./chunk-4ENK7S24.js";
17
17
 
18
18
  // src/db/files.ts
19
19
  init_drizzle();