@agentstep/agent-sdk 0.5.0 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/dist/auth/middleware.js +8 -8
  2. package/dist/backends/claude/args.js +7 -7
  3. package/dist/backends/claude/index.js +12 -12
  4. package/dist/backends/claude/wrapper-script.js +1 -1
  5. package/dist/backends/codex/auth.js +6 -6
  6. package/dist/backends/codex/index.js +11 -11
  7. package/dist/backends/factory/auth.js +6 -6
  8. package/dist/backends/factory/index.js +13 -13
  9. package/dist/backends/gemini/auth.js +6 -6
  10. package/dist/backends/gemini/index.js +11 -11
  11. package/dist/backends/opencode/auth.js +6 -6
  12. package/dist/backends/opencode/index.js +15 -15
  13. package/dist/backends/pi/auth.js +6 -6
  14. package/dist/backends/pi/index.js +13 -13
  15. package/dist/backends/registry.js +31 -31
  16. package/dist/backends/shared/wrap-prompt.js +1 -1
  17. package/dist/chunk-3LUY2POB.js +50 -0
  18. package/dist/{chunk-3PA4NXRP.js → chunk-3VPTHB7I.js} +2 -2
  19. package/dist/{chunk-YMCS6AB7.js → chunk-4236UQNZ.js} +2 -2
  20. package/dist/{chunk-HMOSAXVZ.js → chunk-4A4F4L4H.js} +2 -2
  21. package/dist/{chunk-JFOHGHW5.js → chunk-4B5H2MFO.js} +59 -16
  22. package/dist/{chunk-OZFSKR2W.js → chunk-5525T7PL.js} +4 -4
  23. package/dist/{chunk-AXBM7HAR.js → chunk-5EFY6UGV.js} +1 -1
  24. package/dist/chunk-5UTTNXNJ.js +166 -0
  25. package/dist/{chunk-4RDILRIO.js → chunk-5YGYUGDQ.js} +3 -3
  26. package/dist/{chunk-HWR2HYQJ.js → chunk-6DPJVMEC.js} +1 -1
  27. package/dist/{chunk-PNZF7HIU.js → chunk-6KJS42ZL.js} +8 -7
  28. package/dist/{chunk-LQP6XGFU.js → chunk-6KQFP32G.js} +3 -3
  29. package/dist/{chunk-DMMNAQUM.js → chunk-6L4AGHAV.js} +2 -2
  30. package/dist/{chunk-WEC625LQ.js → chunk-6TJBZXD4.js} +1 -1
  31. package/dist/{chunk-QTXAWC5J.js → chunk-6URMGCAC.js} +2 -2
  32. package/dist/{chunk-DJZSPWG2.js → chunk-6WUYI3DJ.js} +4 -4
  33. package/dist/{chunk-H6OT5GUL.js → chunk-7APAOJIZ.js} +3 -3
  34. package/dist/{chunk-HVLYE4S5.js → chunk-7EDLLXFQ.js} +1 -1
  35. package/dist/chunk-7IYL2O7H.js +185 -0
  36. package/dist/{chunk-KGBKIJPF.js → chunk-7JAUY5SG.js} +3 -3
  37. package/dist/{chunk-NDTIDWBE.js → chunk-7XIAKW75.js} +1 -1
  38. package/dist/{chunk-TUEBRYPZ.js → chunk-A2W3USEZ.js} +1 -1
  39. package/dist/chunk-ACPP4KN7.js +164 -0
  40. package/dist/{chunk-22OUZJAV.js → chunk-AESA3ARX.js} +3 -3
  41. package/dist/{chunk-Z4LFLXRR.js → chunk-AIAF5ZZA.js} +1 -1
  42. package/dist/{chunk-GIMDS46L.js → chunk-ANS2TQYT.js} +3 -3
  43. package/dist/{chunk-T3FQPTOA.js → chunk-BCBDHUFY.js} +2 -2
  44. package/dist/{chunk-MCWCRZM4.js → chunk-BLTCDZ3O.js} +4 -4
  45. package/dist/{chunk-VP527YC5.js → chunk-BYIU4WAQ.js} +3 -3
  46. package/dist/{chunk-L26TVIB6.js → chunk-C52BVTYC.js} +8 -8
  47. package/dist/{chunk-EWIWVXXP.js → chunk-CA76BJWL.js} +44 -14
  48. package/dist/{chunk-DKLHYSPW.js → chunk-DZGFZMUE.js} +5 -5
  49. package/dist/{chunk-R3QHLKJG.js → chunk-E35XHOFL.js} +5 -5
  50. package/dist/{chunk-PZNAQBHQ.js → chunk-FILGQF2G.js} +2 -2
  51. package/dist/{chunk-JP7Y3TKK.js → chunk-FSVDF57K.js} +5 -5
  52. package/dist/{chunk-S7DFMJR5.js → chunk-FWJOTEVY.js} +3 -3
  53. package/dist/{chunk-XSNJ7NT2.js → chunk-G4DTLYOD.js} +1 -1
  54. package/dist/{chunk-IEZFRNLC.js → chunk-GBLR2CPP.js} +107 -9
  55. package/dist/{chunk-7SY65LWY.js → chunk-GEC3NFYO.js} +4 -4
  56. package/dist/{chunk-GLKWJESP.js → chunk-GZZHVIEG.js} +2 -2
  57. package/dist/{chunk-NHAYKVXG.js → chunk-IAKR572X.js} +8 -8
  58. package/dist/{chunk-GFSRNOPI.js → chunk-IBUFLAAJ.js} +7 -7
  59. package/dist/{chunk-OKT2J4ZB.js → chunk-IZ5TUMCF.js} +23 -7
  60. package/dist/{chunk-W3JMIUHV.js → chunk-KQTTKYZY.js} +1 -1
  61. package/dist/{chunk-AJL3T5JS.js → chunk-L2DCOJTQ.js} +3 -3
  62. package/dist/{chunk-JLUCJMAQ.js → chunk-LA6IFUVR.js} +70 -24
  63. package/dist/{chunk-AB7MPL3H.js → chunk-LW4OCFIP.js} +9 -7
  64. package/dist/{chunk-BCIFFAGW.js → chunk-M3752GFZ.js} +15 -5
  65. package/dist/{chunk-5U5LRAFJ.js → chunk-MTLM36QD.js} +2 -2
  66. package/dist/{chunk-A6VORSKD.js → chunk-MV42BTU3.js} +1 -1
  67. package/dist/{chunk-5MERXOLJ.js → chunk-NRX5WHHN.js} +4 -4
  68. package/dist/{chunk-T3HMVHDG.js → chunk-O2X4XBU7.js} +1 -1
  69. package/dist/{chunk-2YZOIFVN.js → chunk-P4NU74SP.js} +47 -0
  70. package/dist/{chunk-TVODT2UR.js → chunk-P4OCCRQW.js} +1 -1
  71. package/dist/{chunk-YXOCKQZU.js → chunk-P4VJADXA.js} +2 -2
  72. package/dist/{chunk-6QZ23WRF.js → chunk-P6LESAPO.js} +54 -20
  73. package/dist/{chunk-HY3T4YJV.js → chunk-PICGSLMG.js} +5 -5
  74. package/dist/{chunk-64IQEPSD.js → chunk-PQKIXSEP.js} +2 -2
  75. package/dist/{chunk-GV6GUSCP.js → chunk-Q2JYAAJO.js} +9 -9
  76. package/dist/{chunk-IU457W7Q.js → chunk-QBJOYOVF.js} +2 -1
  77. package/dist/{chunk-MAJWADF7.js → chunk-RZOCX57A.js} +2 -2
  78. package/dist/{chunk-4D345E27.js → chunk-SQZPJFBF.js} +2 -2
  79. package/dist/{chunk-OSNMIPHV.js → chunk-TE6KCRPP.js} +1 -1
  80. package/dist/{chunk-Z6VZYRVN.js → chunk-TF36SWHG.js} +2 -2
  81. package/dist/{chunk-KUWJJD6O.js → chunk-TSR33JMZ.js} +14 -5
  82. package/dist/{chunk-L3IACZ72.js → chunk-TWH4UH6G.js} +1 -1
  83. package/dist/{chunk-445EL6J5.js → chunk-UAEVL47I.js} +1 -1
  84. package/dist/{chunk-X6QIWZ33.js → chunk-UGH5JDXX.js} +3 -3
  85. package/dist/{chunk-FSQ4HGHX.js → chunk-UJW3I3TX.js} +3 -3
  86. package/dist/{chunk-I26QP3A3.js → chunk-UQZFFG7U.js} +1 -1
  87. package/dist/{chunk-ILHIHMO3.js → chunk-VC5DELR4.js} +37 -2
  88. package/dist/{chunk-NKQVOAWN.js → chunk-VMLXV2H6.js} +1 -1
  89. package/dist/{chunk-FCUXFLNK.js → chunk-VY6IWBSK.js} +17 -4
  90. package/dist/{chunk-6CVQDSTS.js → chunk-WDAFSCYQ.js} +1 -1
  91. package/dist/{chunk-GCQDNUS2.js → chunk-WFRHLTKI.js} +3 -3
  92. package/dist/{chunk-R6EEBWM3.js → chunk-WRLCJNQF.js} +1 -1
  93. package/dist/{chunk-KKAJC3Z2.js → chunk-X4ARJS6I.js} +10 -10
  94. package/dist/{chunk-MQBMXAPU.js → chunk-Y4MI27HU.js} +1 -1
  95. package/dist/{chunk-PN3AWRMX.js → chunk-YDP3YA5D.js} +17 -17
  96. package/dist/{chunk-FVBDEOTZ.js → chunk-YE2RMJY7.js} +18 -4
  97. package/dist/{chunk-IRW7AYTP.js → chunk-YEWYRPN4.js} +42 -4
  98. package/dist/{chunk-24IDJ7LY.js → chunk-YL6IQUJC.js} +4 -4
  99. package/dist/{chunk-CLSGNQ7J.js → chunk-Z46R47QX.js} +8 -8
  100. package/dist/{chunk-STJNO6SL.js → chunk-Z6OPLBPQ.js} +1 -1
  101. package/dist/{chunk-RYJXSXCV.js → chunk-ZEJOFHR7.js} +5 -5
  102. package/dist/{chunk-EOJ66GY7.js → chunk-ZFGG62JW.js} +4 -4
  103. package/dist/config/index.js +5 -5
  104. package/dist/containers/client.js +6 -6
  105. package/dist/containers/exec.js +6 -6
  106. package/dist/containers/lifecycle.js +45 -43
  107. package/dist/containers/setup.js +9 -9
  108. package/dist/db/agents.js +6 -6
  109. package/dist/db/api_keys.js +5 -5
  110. package/dist/db/audit.js +3 -3
  111. package/dist/db/batch.js +10 -10
  112. package/dist/db/client.js +2 -2
  113. package/dist/db/credentials.js +3 -3
  114. package/dist/db/drizzle.js +4 -4
  115. package/dist/db/environments.js +6 -6
  116. package/dist/db/events.js +5 -5
  117. package/dist/db/files.js +5 -5
  118. package/dist/db/memory.js +13 -5
  119. package/dist/db/migrations.js +1 -1
  120. package/dist/db/proxy.js +5 -5
  121. package/dist/db/schema.js +5 -1
  122. package/dist/db/session-resources.js +5 -5
  123. package/dist/db/sessions.js +8 -8
  124. package/dist/db/sync.js +5 -5
  125. package/dist/db/tenants.js +3 -3
  126. package/dist/db/threads.js +27 -0
  127. package/dist/db/traces.js +5 -5
  128. package/dist/db/upstream_keys.js +3 -3
  129. package/dist/db/vaults.js +6 -6
  130. package/dist/dreaming/prompts.js +9 -0
  131. package/dist/dreaming/review.js +22 -0
  132. package/dist/handlers/agents.js +59 -59
  133. package/dist/handlers/api_keys.js +60 -60
  134. package/dist/handlers/audit.js +60 -60
  135. package/dist/handlers/batch.js +60 -60
  136. package/dist/handlers/credentials.js +60 -60
  137. package/dist/handlers/environments.js +60 -60
  138. package/dist/handlers/events.js +63 -63
  139. package/dist/handlers/files.js +60 -60
  140. package/dist/handlers/index.js +159 -144
  141. package/dist/handlers/license.js +59 -59
  142. package/dist/handlers/memory.js +66 -60
  143. package/dist/handlers/metrics.js +59 -59
  144. package/dist/handlers/models.js +60 -60
  145. package/dist/handlers/providers.js +59 -59
  146. package/dist/handlers/resources.js +59 -59
  147. package/dist/handlers/sessions.js +63 -62
  148. package/dist/handlers/settings.js +59 -59
  149. package/dist/handlers/skills-write.js +59 -59
  150. package/dist/handlers/skills.js +60 -60
  151. package/dist/handlers/stream.js +59 -59
  152. package/dist/handlers/tenants.js +60 -60
  153. package/dist/handlers/threads.js +70 -61
  154. package/dist/handlers/traces.js +60 -60
  155. package/dist/handlers/upstream_keys.js +62 -62
  156. package/dist/handlers/vaults.js +59 -59
  157. package/dist/handlers/whoami.js +59 -59
  158. package/dist/http.js +58 -58
  159. package/dist/index.js +72 -67
  160. package/dist/init.js +55 -55
  161. package/dist/lib/model-registry.js +6 -6
  162. package/dist/lib/skills-cache.js +6 -6
  163. package/dist/observability/otlp.js +12 -12
  164. package/dist/observability/redactor.js +8 -8
  165. package/dist/providers/fly.js +5 -5
  166. package/dist/providers/modal.js +5 -5
  167. package/dist/providers/registry.js +1 -1
  168. package/dist/providers/resolve-secrets.js +7 -7
  169. package/dist/providers/sprites.js +7 -7
  170. package/dist/providers/upstream-keys.js +12 -12
  171. package/dist/providers/vercel.js +6 -6
  172. package/dist/proxy/forward.js +6 -6
  173. package/dist/queue/index.js +6 -6
  174. package/dist/sessions/bus.js +10 -10
  175. package/dist/sessions/driver.js +48 -48
  176. package/dist/sessions/grader.js +5 -5
  177. package/dist/sessions/secrets.js +8 -8
  178. package/dist/sessions/sweeper.js +44 -44
  179. package/dist/sessions/threads.js +121 -55
  180. package/dist/shutdown.js +45 -45
  181. package/dist/sync/anthropic.js +10 -10
  182. package/dist/sync/container-file-sync.js +6 -6
  183. package/dist/sync/file-sync.js +17 -17
  184. package/dist/sync/memory-sync.js +79 -0
  185. package/package.json +1 -1
  186. package/dist/chunk-XTKTIFHC.js +0 -48
  187. package/dist/{chunk-UE6DNLSV.js → chunk-LT5PRO54.js} +0 -0
  188. package/dist/{dist-EY25RQ2S.js → dist-S64ZABZX.js} +3 -3
@@ -1,21 +1,21 @@
1
+ import {
2
+ resolveVaultSecrets
3
+ } from "./chunk-O2X4XBU7.js";
1
4
  import {
2
5
  dockerProvider
3
6
  } from "./chunk-4XXQAVKE.js";
4
- import {
5
- resolveVaultSecrets
6
- } from "./chunk-T3HMVHDG.js";
7
7
  import {
8
8
  appendEvent
9
- } from "./chunk-5MERXOLJ.js";
9
+ } from "./chunk-NRX5WHHN.js";
10
10
  import {
11
11
  getSession,
12
12
  getSessionRow,
13
13
  setSessionSandbox
14
- } from "./chunk-KUWJJD6O.js";
14
+ } from "./chunk-TSR33JMZ.js";
15
15
  import {
16
16
  deleteSprite,
17
17
  listSprites
18
- } from "./chunk-NKQVOAWN.js";
18
+ } from "./chunk-VMLXV2H6.js";
19
19
  import {
20
20
  allSessionSandboxes,
21
21
  countInEnv,
@@ -24,12 +24,12 @@ import {
24
24
  } from "./chunk-EFOIR7R3.js";
25
25
  import {
26
26
  resolveContainerProvider
27
- } from "./chunk-UE6DNLSV.js";
27
+ } from "./chunk-LT5PRO54.js";
28
28
  import {
29
29
  getEnvironment,
30
30
  getEnvironmentRow,
31
31
  listEnvironments
32
- } from "./chunk-H6OT5GUL.js";
32
+ } from "./chunk-7APAOJIZ.js";
33
33
  import {
34
34
  addWarm,
35
35
  claimWarm,
@@ -40,13 +40,13 @@ import {
40
40
  } from "./chunk-G7KUVNDY.js";
41
41
  import {
42
42
  getAgent
43
- } from "./chunk-BCIFFAGW.js";
43
+ } from "./chunk-M3752GFZ.js";
44
44
  import {
45
45
  resolveBackend
46
- } from "./chunk-GV6GUSCP.js";
46
+ } from "./chunk-Q2JYAAJO.js";
47
47
  import {
48
48
  getConfig
49
- } from "./chunk-X6QIWZ33.js";
49
+ } from "./chunk-UGH5JDXX.js";
50
50
  import {
51
51
  init_clock,
52
52
  nowMs
@@ -123,15 +123,22 @@ async function acquireForFirstTurn(sessionId) {
123
123
  );
124
124
  }
125
125
  const config = getConfig();
126
- if (countInEnv(env.id) + countWarm(env.id) >= config.maxSandboxesPerEnv) {
127
- throw new ApiError(503, "server_busy", "env sandbox pool exhausted");
126
+ const envObj = getEnvironment(row.environment_id);
127
+ const maxSandboxes = envObj?.config?.max_sandboxes ?? config.maxSandboxesPerEnv;
128
+ const active = countInEnv(env.id);
129
+ const warmCount = countWarm(env.id);
130
+ if (active + warmCount >= maxSandboxes) {
131
+ throw new ApiError(
132
+ 503,
133
+ "server_busy",
134
+ `environment ${env.id} sandbox pool exhausted (${active} active + ${warmCount} warm, limit ${maxSandboxes})`
135
+ );
128
136
  }
129
137
  const agent = getAgent(row.agent_id, row.agent_version);
130
138
  if (!agent) {
131
139
  throw new ApiError(404, "not_found_error", "agent not found for session");
132
140
  }
133
141
  const backend = resolveBackend(agent.engine);
134
- const envObj = getEnvironment(row.environment_id);
135
142
  const provider = await resolveContainerProvider(envObj?.config?.provider);
136
143
  const sessionForSecrets = getSession(sessionId);
137
144
  const secrets = sessionForSecrets?.vault_ids?.length ? resolveVaultSecrets(sessionForSecrets.vault_ids) : {};
@@ -209,6 +216,7 @@ async function acquireForFirstTurn(sessionId) {
209
216
  await provisionResources(name2, session.resources, sp);
210
217
  }
211
218
  }
219
+ await mountMemoryStores(name2, sessionId, sp);
212
220
  register({
213
221
  sandboxName: name2,
214
222
  envId: env.id,
@@ -316,6 +324,7 @@ async function acquireForFirstTurn(sessionId) {
316
324
  await provisionResources(name, session.resources, sp);
317
325
  }
318
326
  }
327
+ await mountMemoryStores(name, sessionId, sp);
319
328
  register({
320
329
  sandboxName: name,
321
330
  envId: env.id,
@@ -337,7 +346,9 @@ async function replenishWarmPool(envId, engine, provider, secrets) {
337
346
  if (target <= 0) return;
338
347
  if (countWarm(envId) + countInflight(envId) >= target) return;
339
348
  const cfg = getConfig();
340
- if (countInEnv(envId) + countWarm(envId) + countInflight(envId) >= cfg.maxSandboxesPerEnv) return;
349
+ const envObj = getEnvironment(envId);
350
+ const maxSandboxes = envObj?.config?.max_sandboxes ?? cfg.maxSandboxesPerEnv;
351
+ if (countInEnv(envId) + countWarm(envId) + countInflight(envId) >= maxSandboxes) return;
341
352
  incrementInflight(envId);
342
353
  try {
343
354
  const sp = wrapProviderWithSecrets(provider, secrets);
@@ -391,7 +402,8 @@ async function fillOneEnv(env) {
391
402
  try {
392
403
  const provider = await resolveContainerProvider(env.config?.provider);
393
404
  if (!provider.supportsWarmPool) return;
394
- const backend = resolveBackend("claude");
405
+ const engine = env.config?.default_engine ?? "claude";
406
+ const backend = resolveBackend(engine);
395
407
  const needed = target - countWarm(env.id) - countInflight(env.id);
396
408
  for (let i = 0; i < needed; i++) {
397
409
  void replenishWarmPool(env.id, backend.name, provider, {});
@@ -507,6 +519,36 @@ async function provisionResources(sandboxName, resources, provider) {
507
519
  }
508
520
  }
509
521
  }
522
+ async function mountMemoryStores(sandboxName, sessionId, provider) {
523
+ const { listResources: listSessionResources } = await import("./db/session-resources.js");
524
+ const { getMemoryStore, listMemories } = await import("./db/memory.js");
525
+ const resources = listSessionResources(sessionId);
526
+ const memStoreResources = resources.filter((r) => r.type === "memory_store" && r.memory_store_id);
527
+ if (memStoreResources.length === 0) return;
528
+ await provider.exec(sandboxName, ["mkdir", "-p", "/mnt/memory"]);
529
+ for (const r of memStoreResources) {
530
+ const store = getMemoryStore(r.memory_store_id);
531
+ if (!store) {
532
+ lcLog(`[lifecycle] memory store not found: ${r.memory_store_id}`);
533
+ continue;
534
+ }
535
+ const storeName = store.name.replace(/[^a-zA-Z0-9_.-]/g, "_");
536
+ const storeDir = `/mnt/memory/${storeName}`;
537
+ await provider.exec(sandboxName, ["mkdir", "-p", storeDir]);
538
+ const memories = listMemories(store.id);
539
+ for (const mem of memories) {
540
+ const memPath = `${storeDir}/${mem.path}`;
541
+ const dir = memPath.substring(0, memPath.lastIndexOf("/"));
542
+ if (dir && dir !== storeDir) {
543
+ await provider.exec(sandboxName, ["mkdir", "-p", dir]);
544
+ }
545
+ await provider.exec(sandboxName, ["sh", "-c", 'cat > "$1"', "sh", memPath], {
546
+ stdin: mem.content
547
+ });
548
+ }
549
+ lcLog(`[lifecycle] ${sessionId} mounted ${memories.length} memories from store "${store.name}" at ${storeDir}`);
550
+ }
551
+ }
510
552
  async function releaseSession(sessionId) {
511
553
  const entry = unregister(sessionId);
512
554
  const row = getSessionRow(sessionId);
@@ -574,6 +616,7 @@ export {
574
616
  replenishWarmPool,
575
617
  fillWarmPools,
576
618
  provisionResources,
619
+ mountMemoryStores,
577
620
  releaseSession,
578
621
  reconcileOrphanSandboxes,
579
622
  reconcileDockerOrphanSandboxes
@@ -7,7 +7,7 @@ import {
7
7
  jsonOk,
8
8
  paginatedOk,
9
9
  routeWrap
10
- } from "./chunk-QTXAWC5J.js";
10
+ } from "./chunk-6URMGCAC.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-VP527YC5.js";
22
+ } from "./chunk-BYIU4WAQ.js";
23
23
  import {
24
24
  getAgent
25
- } from "./chunk-BCIFFAGW.js";
25
+ } from "./chunk-M3752GFZ.js";
26
26
  import {
27
27
  getDb,
28
28
  init_client
29
- } from "./chunk-W3JMIUHV.js";
29
+ } from "./chunk-KQTTKYZY.js";
30
30
  import {
31
31
  badRequest,
32
32
  conflict,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  jsonOk,
3
3
  routeWrap
4
- } from "./chunk-QTXAWC5J.js";
4
+ } from "./chunk-6URMGCAC.js";
5
5
 
6
6
  // src/handlers/whoami.ts
7
7
  function handleWhoami(request) {
@@ -0,0 +1,166 @@
1
+ import {
2
+ archiveThread,
3
+ getThread,
4
+ listThreads
5
+ } from "./chunk-7IYL2O7H.js";
6
+ import {
7
+ assertResourceTenant
8
+ } from "./chunk-23UKWXJH.js";
9
+ import {
10
+ jsonOk,
11
+ paginatedOk,
12
+ routeWrap
13
+ } from "./chunk-6URMGCAC.js";
14
+ import {
15
+ subscribe
16
+ } from "./chunk-NRX5WHHN.js";
17
+ import {
18
+ getSession
19
+ } from "./chunk-TSR33JMZ.js";
20
+ import {
21
+ listEvents,
22
+ rowToManagedEvent
23
+ } from "./chunk-7JAUY5SG.js";
24
+ import {
25
+ getDb,
26
+ init_client
27
+ } from "./chunk-KQTTKYZY.js";
28
+ import {
29
+ badRequest,
30
+ notFound
31
+ } from "./chunk-EZYKRG4W.js";
32
+
33
+ // src/handlers/threads.ts
34
+ init_client();
35
+ function loadSession(auth, sessionId) {
36
+ const row = getDb().prepare(`SELECT tenant_id FROM sessions WHERE id = ?`).get(sessionId);
37
+ if (!row) throw notFound(`session ${sessionId} not found`);
38
+ assertResourceTenant(auth, row.tenant_id, `session ${sessionId} not found`);
39
+ const session = getSession(sessionId);
40
+ if (!session) throw notFound(`session ${sessionId} not found`);
41
+ return session;
42
+ }
43
+ function handleListThreads(request, sessionId) {
44
+ return routeWrap(request, async ({ auth }) => {
45
+ loadSession(auth, sessionId);
46
+ const url = new URL(request.url);
47
+ const limit = url.searchParams.get("limit");
48
+ const order = url.searchParams.get("order");
49
+ const requestedLimit = limit ? Number(limit) : 50;
50
+ const data = listThreads(sessionId, {
51
+ limit: requestedLimit,
52
+ order: order ?? void 0
53
+ });
54
+ return paginatedOk(data, requestedLimit);
55
+ });
56
+ }
57
+ function handleGetThread(request, sessionId, threadId) {
58
+ return routeWrap(request, async ({ auth }) => {
59
+ loadSession(auth, sessionId);
60
+ const thread = getThread(sessionId, threadId);
61
+ if (!thread) throw notFound(`thread ${threadId} not found`);
62
+ return jsonOk(thread);
63
+ });
64
+ }
65
+ function handleArchiveThread(request, sessionId, threadId) {
66
+ return routeWrap(request, async ({ auth }) => {
67
+ loadSession(auth, sessionId);
68
+ const existing = getThread(sessionId, threadId);
69
+ if (!existing) throw notFound(`thread ${threadId} not found`);
70
+ if (existing.status !== "idle") {
71
+ throw badRequest(`cannot archive thread in status "${existing.status}" \u2014 must be idle`);
72
+ }
73
+ const archived = archiveThread(sessionId, threadId);
74
+ if (!archived) throw notFound(`thread ${threadId} not found`);
75
+ return jsonOk(archived);
76
+ });
77
+ }
78
+ function handleListThreadEvents(request, sessionId, threadId) {
79
+ return routeWrap(request, async ({ auth }) => {
80
+ loadSession(auth, sessionId);
81
+ const thread = getThread(sessionId, threadId);
82
+ if (!thread) throw notFound(`thread ${threadId} not found`);
83
+ const url = new URL(request.url);
84
+ const limit = url.searchParams.get("limit");
85
+ const order = url.searchParams.get("order");
86
+ const afterSeq = url.searchParams.get("after_seq");
87
+ const requestedLimit = limit ? Number(limit) : 50;
88
+ const allEvents = listEvents(sessionId, {
89
+ limit: 500,
90
+ // fetch more than needed since we filter
91
+ order: order ?? "asc",
92
+ afterSeq: afterSeq ? Number(afterSeq) : void 0
93
+ });
94
+ const threadEvents = allEvents.filter((e) => {
95
+ const payload = JSON.parse(e.payload_json);
96
+ return payload.thread_id === threadId || e.type.startsWith("session.thread_");
97
+ }).slice(0, requestedLimit).map(rowToManagedEvent);
98
+ return paginatedOk(threadEvents, requestedLimit);
99
+ });
100
+ }
101
+ function handleStreamThreadEvents(request, sessionId, threadId) {
102
+ return routeWrap(request, async ({ auth }) => {
103
+ loadSession(auth, sessionId);
104
+ const thread = getThread(sessionId, threadId);
105
+ if (!thread) throw notFound(`thread ${threadId} not found`);
106
+ const url = new URL(request.url);
107
+ const lastEventId = request.headers.get("last-event-id");
108
+ const afterSeq = lastEventId ? Number(lastEventId) : Number(url.searchParams.get("after_seq") ?? "0");
109
+ const encoder = new TextEncoder();
110
+ let controller;
111
+ const stream = new ReadableStream({
112
+ start(c) {
113
+ controller = c;
114
+ }
115
+ });
116
+ const write = (payload) => {
117
+ try {
118
+ controller.enqueue(encoder.encode(payload));
119
+ } catch {
120
+ }
121
+ };
122
+ const sub = subscribe(
123
+ sessionId,
124
+ Number.isFinite(afterSeq) ? afterSeq : 0,
125
+ (evt) => {
126
+ if (evt.thread_id === threadId) {
127
+ write(`id: ${evt.seq}
128
+ event: ${evt.type}
129
+ data: ${JSON.stringify(evt)}
130
+
131
+ `);
132
+ }
133
+ }
134
+ );
135
+ const keepalive = setInterval(() => {
136
+ write(`data: {"type":"ping"}
137
+
138
+ `);
139
+ }, 15e3);
140
+ const abort = () => {
141
+ clearInterval(keepalive);
142
+ sub.unsubscribe();
143
+ try {
144
+ controller.close();
145
+ } catch {
146
+ }
147
+ };
148
+ request.signal.addEventListener("abort", abort);
149
+ return new Response(stream, {
150
+ headers: {
151
+ "Content-Type": "text/event-stream",
152
+ "Cache-Control": "no-cache",
153
+ Connection: "keep-alive",
154
+ "X-Accel-Buffering": "no"
155
+ }
156
+ });
157
+ });
158
+ }
159
+
160
+ export {
161
+ handleListThreads,
162
+ handleGetThread,
163
+ handleArchiveThread,
164
+ handleListThreadEvents,
165
+ handleStreamThreadEvents
166
+ };
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  jsonOk,
3
3
  routeWrap
4
- } from "./chunk-QTXAWC5J.js";
4
+ } from "./chunk-6URMGCAC.js";
5
5
  import {
6
6
  resolveContainerProvider
7
- } from "./chunk-UE6DNLSV.js";
7
+ } from "./chunk-LT5PRO54.js";
8
8
  import {
9
9
  getConfig
10
- } from "./chunk-X6QIWZ33.js";
10
+ } from "./chunk-UGH5JDXX.js";
11
11
 
12
12
  // src/handlers/providers.ts
13
13
  var LOCAL_PROVIDERS = ["docker", "apple-container", "podman"];
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getConfig
3
- } from "./chunk-X6QIWZ33.js";
3
+ } from "./chunk-UGH5JDXX.js";
4
4
 
5
5
  // src/backends/pi/auth.ts
6
6
  function buildPiAuthEnv() {
@@ -1,7 +1,3 @@
1
- import {
2
- buildClaudeArgs,
3
- buildClaudeAuthEnv
4
- } from "./chunk-GIMDS46L.js";
5
1
  import {
6
2
  PERMISSION_BRIDGE_DIR,
7
3
  PERMISSION_HOOK_SCRIPT_PATH,
@@ -19,13 +15,17 @@ import {
19
15
  import {
20
16
  createClaudeTranslator
21
17
  } from "./chunk-JFYE5BFI.js";
18
+ import {
19
+ buildClaudeArgs,
20
+ buildClaudeAuthEnv
21
+ } from "./chunk-ANS2TQYT.js";
22
22
  import {
23
23
  CLAUDE_WRAPPER_PATH,
24
24
  installClaudeWrapper
25
- } from "./chunk-IU457W7Q.js";
25
+ } from "./chunk-QBJOYOVF.js";
26
26
  import {
27
27
  getConfig
28
- } from "./chunk-X6QIWZ33.js";
28
+ } from "./chunk-UGH5JDXX.js";
29
29
 
30
30
  // src/backends/claude/index.ts
31
31
  function buildTurn(input) {
@@ -33,7 +33,8 @@ function buildTurn(input) {
33
33
  const argsBase = buildClaudeArgs({
34
34
  agent,
35
35
  claudeSessionId: backendSessionId,
36
- confirmationMode: agent.confirmation_mode
36
+ confirmationMode: agent.confirmation_mode,
37
+ memoryStores: input.memoryStores
37
38
  });
38
39
  const env = buildClaudeAuthEnv();
39
40
  const customTools = agent.tools.filter((t) => t.type === "custom");
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  resolveContainerProvider
3
- } from "./chunk-UE6DNLSV.js";
3
+ } from "./chunk-LT5PRO54.js";
4
4
  import {
5
5
  getEnvironmentRow,
6
6
  updateEnvironmentState
7
- } from "./chunk-H6OT5GUL.js";
7
+ } from "./chunk-7APAOJIZ.js";
8
8
  import {
9
9
  installClaudeWrapper
10
- } from "./chunk-IU457W7Q.js";
10
+ } from "./chunk-QBJOYOVF.js";
11
11
  import {
12
12
  init_ids,
13
13
  newId
@@ -10,10 +10,10 @@ import {
10
10
  import {
11
11
  getDrizzle,
12
12
  init_drizzle
13
- } from "./chunk-PZNAQBHQ.js";
13
+ } from "./chunk-FILGQF2G.js";
14
14
  import {
15
15
  schema_exports
16
- } from "./chunk-ILHIHMO3.js";
16
+ } from "./chunk-VC5DELR4.js";
17
17
 
18
18
  // src/db/files.ts
19
19
  init_drizzle();
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getConfig
3
- } from "./chunk-X6QIWZ33.js";
3
+ } from "./chunk-UGH5JDXX.js";
4
4
 
5
5
  // src/backends/codex/auth.ts
6
6
  function buildCodexAuthEnv() {
@@ -4,13 +4,13 @@ import {
4
4
  } from "./chunk-D2XITRN6.js";
5
5
  import {
6
6
  authenticateAndIntercept
7
- } from "./chunk-GCQDNUS2.js";
7
+ } from "./chunk-WFRHLTKI.js";
8
8
  import {
9
9
  checkAndBump
10
10
  } from "./chunk-HVUWXUUI.js";
11
11
  import {
12
12
  ensureInitialized
13
- } from "./chunk-PN3AWRMX.js";
13
+ } from "./chunk-YDP3YA5D.js";
14
14
  import {
15
15
  captureException
16
16
  } from "./chunk-3MQ2FWXS.js";
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  listTraces
3
- } from "./chunk-XSNJ7NT2.js";
3
+ } from "./chunk-G4DTLYOD.js";
4
4
  import {
5
5
  jsonOk,
6
6
  routeWrap
7
- } from "./chunk-QTXAWC5J.js";
7
+ } from "./chunk-6URMGCAC.js";
8
8
  import {
9
9
  exportTrace
10
- } from "./chunk-JP7Y3TKK.js";
10
+ } from "./chunk-FSVDF57K.js";
11
11
  import {
12
12
  listEventsByTrace,
13
13
  rowToManagedEvent
14
- } from "./chunk-KGBKIJPF.js";
14
+ } from "./chunk-7JAUY5SG.js";
15
15
  import {
16
16
  badRequest,
17
17
  notFound
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  DEFAULT_TENANT_ID
3
- } from "./chunk-I26QP3A3.js";
3
+ } from "./chunk-UQZFFG7U.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-PZNAQBHQ.js";
16
+ } from "./chunk-FILGQF2G.js";
17
17
  import {
18
18
  schema_exports
19
- } from "./chunk-ILHIHMO3.js";
19
+ } from "./chunk-VC5DELR4.js";
20
20
 
21
21
  // src/db/environments.ts
22
22
  init_drizzle();
@@ -14,7 +14,7 @@ import {
14
14
  import {
15
15
  getDb,
16
16
  init_client
17
- } from "./chunk-W3JMIUHV.js";
17
+ } from "./chunk-KQTTKYZY.js";
18
18
 
19
19
  // src/db/credentials.ts
20
20
  init_client();