@agentstep/agent-sdk 0.4.41 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) 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 +7 -7
  4. package/dist/backends/codex/args.js +1 -1
  5. package/dist/backends/codex/auth.js +6 -6
  6. package/dist/backends/codex/index.js +8 -8
  7. package/dist/backends/factory/args.js +1 -1
  8. package/dist/backends/factory/auth.js +6 -6
  9. package/dist/backends/factory/index.js +8 -8
  10. package/dist/backends/gemini/args.js +1 -1
  11. package/dist/backends/gemini/auth.js +6 -6
  12. package/dist/backends/gemini/index.js +8 -8
  13. package/dist/backends/opencode/args.js +1 -1
  14. package/dist/backends/opencode/auth.js +6 -6
  15. package/dist/backends/opencode/index.js +9 -9
  16. package/dist/backends/opencode/mcp.js +1 -1
  17. package/dist/backends/pi/args.js +1 -1
  18. package/dist/backends/pi/auth.js +6 -6
  19. package/dist/backends/pi/index.js +8 -8
  20. package/dist/backends/registry.js +24 -24
  21. package/dist/{chunk-L2RX552S.js → chunk-22OUZJAV.js} +3 -3
  22. package/dist/{chunk-PIJKJNGB.js → chunk-24IDJ7LY.js} +4 -4
  23. package/dist/{chunk-WCDWL6ED.js → chunk-2YZOIFVN.js} +49 -0
  24. package/dist/{chunk-RDGOGAQ5.js → chunk-3FLQ7KZP.js} +1 -1
  25. package/dist/{chunk-ZQXBHNEZ.js → chunk-3PA4NXRP.js} +2 -2
  26. package/dist/{chunk-H7UKW666.js → chunk-445EL6J5.js} +1 -1
  27. package/dist/{chunk-2RSL5SO7.js → chunk-4D345E27.js} +2 -2
  28. package/dist/{chunk-2Z2KAPUL.js → chunk-4RDILRIO.js} +3 -3
  29. package/dist/{chunk-MHBLVGRF.js → chunk-5MERXOLJ.js} +4 -4
  30. package/dist/{chunk-E7DD7F7J.js → chunk-5U5LRAFJ.js} +2 -2
  31. package/dist/{chunk-34EB622U.js → chunk-64IQEPSD.js} +2 -2
  32. package/dist/{chunk-ENGKR2JT.js → chunk-6CVQDSTS.js} +1 -1
  33. package/dist/{chunk-T5VRE77P.js → chunk-6KWJASEO.js} +1 -1
  34. package/dist/{chunk-W2NHS4IF.js → chunk-6QZ23WRF.js} +15 -19
  35. package/dist/{chunk-DU7LSFQQ.js → chunk-7SY65LWY.js} +6 -9
  36. package/dist/{chunk-C46UG6GQ.js → chunk-A6VORSKD.js} +1 -1
  37. package/dist/{chunk-3FDE3BPB.js → chunk-AB7MPL3H.js} +6 -6
  38. package/dist/{chunk-RP6WQ4IH.js → chunk-AJL3T5JS.js} +3 -3
  39. package/dist/{chunk-KKCLTWG7.js → chunk-AXBM7HAR.js} +1 -1
  40. package/dist/{chunk-ZTH5JRZG.js → chunk-BCIFFAGW.js} +41 -10
  41. package/dist/{chunk-OXWELRJL.js → chunk-CBPO2P4I.js} +101 -16
  42. package/dist/{chunk-32XS3Y6P.js → chunk-CLSGNQ7J.js} +8 -8
  43. package/dist/{chunk-SV2B3P6B.js → chunk-DBFPJSOY.js} +19 -17
  44. package/dist/{chunk-JWH4OIBP.js → chunk-DJZSPWG2.js} +4 -4
  45. package/dist/{chunk-JZL4L54R.js → chunk-DKLHYSPW.js} +2 -2
  46. package/dist/{chunk-NQVRZAIX.js → chunk-DMMNAQUM.js} +2 -2
  47. package/dist/{chunk-Y6SFUNGO.js → chunk-EOJ66GY7.js} +4 -4
  48. package/dist/{chunk-EUINGLHA.js → chunk-EWIWVXXP.js} +30 -20
  49. package/dist/{chunk-5EKQBD2H.js → chunk-FCUXFLNK.js} +2 -2
  50. package/dist/{chunk-LAVHQCRP.js → chunk-FSQ4HGHX.js} +3 -3
  51. package/dist/{chunk-WQARLGBG.js → chunk-GCQDNUS2.js} +3 -3
  52. package/dist/{chunk-MXOG5SAO.js → chunk-GFSRNOPI.js} +11 -14
  53. package/dist/{chunk-S7W3KJYH.js → chunk-GIMDS46L.js} +9 -4
  54. package/dist/{chunk-FP4E3QUS.js → chunk-GLKWJESP.js} +2 -2
  55. package/dist/{chunk-FDBR634Z.js → chunk-GV6GUSCP.js} +6 -6
  56. package/dist/{chunk-X6IQ57SC.js → chunk-H6OT5GUL.js} +9 -5
  57. package/dist/{chunk-TPPLYCJF.js → chunk-HMOSAXVZ.js} +2 -2
  58. package/dist/{chunk-L5RW66H5.js → chunk-HVLYE4S5.js} +1 -1
  59. package/dist/{chunk-RVR6C22M.js → chunk-HWR2HYQJ.js} +1 -1
  60. package/dist/{chunk-HH4OXSOV.js → chunk-HY3T4YJV.js} +5 -5
  61. package/dist/{chunk-AR2TM7CR.js → chunk-I26QP3A3.js} +1 -1
  62. package/dist/{chunk-D2TRWKVQ.js → chunk-I2WVMCYN.js} +80 -2
  63. package/dist/{chunk-JHGJG2Z2.js → chunk-IBYOMAZ3.js} +1 -1
  64. package/dist/{chunk-SUGSHXND.js → chunk-IEZFRNLC.js} +2 -2
  65. package/dist/{chunk-ZMJ4EP4C.js → chunk-ILHIHMO3.js} +7 -2
  66. package/dist/{chunk-XWWLMJXT.js → chunk-IRW7AYTP.js} +6 -15
  67. package/dist/{chunk-N76ZVITA.js → chunk-JFOHGHW5.js} +9 -9
  68. package/dist/{chunk-DAVYI5H4.js → chunk-JLUCJMAQ.js} +23 -23
  69. package/dist/{chunk-GVPJL3XS.js → chunk-JP7Y3TKK.js} +5 -5
  70. package/dist/{chunk-TH7WJLZC.js → chunk-KGBKIJPF.js} +3 -3
  71. package/dist/{chunk-MQQ44IGX.js → chunk-KKAJC3Z2.js} +3 -3
  72. package/dist/{chunk-3NK6YTA5.js → chunk-KUWJJD6O.js} +42 -8
  73. package/dist/{chunk-2GIX4HAT.js → chunk-L26TVIB6.js} +2 -2
  74. package/dist/{chunk-KLN6HPYM.js → chunk-L3IACZ72.js} +1 -1
  75. package/dist/{chunk-C6AXM3M7.js → chunk-LQP6XGFU.js} +2 -2
  76. package/dist/{chunk-YBZJHDSE.js → chunk-MAJWADF7.js} +2 -2
  77. package/dist/{chunk-7GG3FEK2.js → chunk-MCWCRZM4.js} +4 -4
  78. package/dist/{chunk-JCW3ZRES.js → chunk-MQBMXAPU.js} +1 -1
  79. package/dist/{chunk-CREPPDHX.js → chunk-NDTIDWBE.js} +1 -1
  80. package/dist/{chunk-5EQJOUWM.js → chunk-NHAYKVXG.js} +2 -2
  81. package/dist/{chunk-FXLUSECC.js → chunk-NKQVOAWN.js} +1 -1
  82. package/dist/{chunk-ZYISLRS6.js → chunk-OKT2J4ZB.js} +114 -37
  83. package/dist/{chunk-V5HWHJ4P.js → chunk-OSNMIPHV.js} +1 -1
  84. package/dist/{chunk-ZFJPOQSY.js → chunk-OZFSKR2W.js} +69 -30
  85. package/dist/{chunk-3IV56JJW.js → chunk-P56WU3UT.js} +3 -2
  86. package/dist/{chunk-NQX7WBA4.js → chunk-PJYCPDV5.js} +14 -9
  87. package/dist/{chunk-LMNFIJ6M.js → chunk-PN3AWRMX.js} +15 -15
  88. package/dist/{chunk-ZMNQ2YJ6.js → chunk-PNZF7HIU.js} +3 -3
  89. package/dist/{chunk-R5T4LJSK.js → chunk-PZNAQBHQ.js} +2 -2
  90. package/dist/{chunk-RH4GKU52.js → chunk-QTXAWC5J.js} +18 -3
  91. package/dist/{chunk-2I35VGHX.js → chunk-R3QHLKJG.js} +2 -2
  92. package/dist/{chunk-OGJUSGF7.js → chunk-R6EEBWM3.js} +1 -1
  93. package/dist/{chunk-V66YKIW6.js → chunk-RYJXSXCV.js} +5 -5
  94. package/dist/{chunk-CHDQ3HIR.js → chunk-S7DFMJR5.js} +5 -9
  95. package/dist/{chunk-V2R7RWVY.js → chunk-STJNO6SL.js} +1 -1
  96. package/dist/{chunk-USYY3L7G.js → chunk-T3FQPTOA.js} +2 -2
  97. package/dist/{chunk-5IGBMS2U.js → chunk-T3HMVHDG.js} +1 -1
  98. package/dist/{chunk-IAF6VMPO.js → chunk-TPMZO6S2.js} +1 -1
  99. package/dist/{chunk-P26WOAA3.js → chunk-TUEBRYPZ.js} +1 -1
  100. package/dist/{chunk-HOIDGDU5.js → chunk-TVODT2UR.js} +1 -1
  101. package/dist/{chunk-Z25I7DRV.js → chunk-V5DH3OAC.js} +10 -5
  102. package/dist/{chunk-ZVXIZ2JD.js → chunk-VP527YC5.js} +35 -6
  103. package/dist/{chunk-6POQAFEC.js → chunk-W3JMIUHV.js} +1 -1
  104. package/dist/{chunk-6IYCBW4J.js → chunk-WEC625LQ.js} +1 -1
  105. package/dist/{chunk-V7MTIMPB.js → chunk-X6QIWZ33.js} +2 -2
  106. package/dist/{chunk-6GP5IKXE.js → chunk-XSNJ7NT2.js} +1 -1
  107. package/dist/{chunk-LZFB3HRK.js → chunk-XTKTIFHC.js} +5 -10
  108. package/dist/{chunk-QSUGIJWV.js → chunk-YMCS6AB7.js} +4 -9
  109. package/dist/{chunk-FOOH6SCB.js → chunk-YXOCKQZU.js} +2 -2
  110. package/dist/{chunk-2PPB644A.js → chunk-Z4LFLXRR.js} +1 -1
  111. package/dist/{chunk-N3QIXC2B.js → chunk-Z6VZYRVN.js} +2 -2
  112. package/dist/config/index.js +5 -5
  113. package/dist/containers/client.js +6 -6
  114. package/dist/containers/exec.js +6 -6
  115. package/dist/containers/lifecycle.js +36 -36
  116. package/dist/containers/setup.js +8 -8
  117. package/dist/db/agents.js +8 -6
  118. package/dist/db/api_keys.js +5 -5
  119. package/dist/db/audit.js +3 -3
  120. package/dist/db/batch.js +10 -10
  121. package/dist/db/client.js +2 -2
  122. package/dist/db/credentials.js +3 -3
  123. package/dist/db/drizzle.js +4 -4
  124. package/dist/db/environments.js +6 -6
  125. package/dist/db/events.js +5 -5
  126. package/dist/db/files.js +5 -5
  127. package/dist/db/memory.js +5 -5
  128. package/dist/db/migrations.js +1 -1
  129. package/dist/db/proxy.js +5 -5
  130. package/dist/db/schema.js +1 -1
  131. package/dist/db/session-resources.js +5 -5
  132. package/dist/db/sessions.js +8 -7
  133. package/dist/db/sync.js +5 -5
  134. package/dist/db/tenants.js +3 -3
  135. package/dist/db/traces.js +5 -5
  136. package/dist/db/upstream_keys.js +3 -3
  137. package/dist/db/vaults.js +12 -8
  138. package/dist/handlers/agents.js +56 -52
  139. package/dist/handlers/api_keys.js +53 -53
  140. package/dist/handlers/audit.js +53 -53
  141. package/dist/handlers/batch.js +53 -53
  142. package/dist/handlers/credentials.js +53 -53
  143. package/dist/handlers/environments.js +53 -53
  144. package/dist/handlers/events.js +56 -56
  145. package/dist/handlers/files.js +53 -53
  146. package/dist/handlers/index.js +100 -92
  147. package/dist/handlers/license.js +52 -52
  148. package/dist/handlers/memory.js +53 -53
  149. package/dist/handlers/metrics.js +52 -52
  150. package/dist/handlers/models.js +53 -53
  151. package/dist/handlers/openapi.js +3 -3
  152. package/dist/handlers/providers.js +52 -52
  153. package/dist/handlers/resources.js +52 -52
  154. package/dist/handlers/sessions.js +55 -55
  155. package/dist/handlers/settings.js +52 -52
  156. package/dist/handlers/skills-write.js +52 -52
  157. package/dist/handlers/skills.js +53 -53
  158. package/dist/handlers/stream.js +52 -52
  159. package/dist/handlers/tenants.js +53 -53
  160. package/dist/handlers/threads.js +52 -52
  161. package/dist/handlers/traces.js +53 -53
  162. package/dist/handlers/upstream_keys.js +55 -55
  163. package/dist/handlers/vaults.js +56 -52
  164. package/dist/handlers/whoami.js +52 -52
  165. package/dist/http.js +55 -51
  166. package/dist/index.js +57 -57
  167. package/dist/init.js +48 -48
  168. package/dist/lib/model-registry.js +6 -6
  169. package/dist/lib/skills-cache.js +6 -6
  170. package/dist/observability/otlp.js +12 -12
  171. package/dist/observability/redactor.js +8 -8
  172. package/dist/openapi/schemas.js +3 -1
  173. package/dist/openapi/spec.js +2 -2
  174. package/dist/providers/fly.js +5 -5
  175. package/dist/providers/modal.js +5 -5
  176. package/dist/providers/registry.js +1 -1
  177. package/dist/providers/resolve-secrets.js +7 -7
  178. package/dist/providers/sprites.js +7 -7
  179. package/dist/providers/upstream-keys.js +12 -11
  180. package/dist/providers/vercel.js +5 -5
  181. package/dist/proxy/forward.js +6 -6
  182. package/dist/queue/index.js +6 -6
  183. package/dist/sessions/bus.js +10 -10
  184. package/dist/sessions/driver.js +41 -41
  185. package/dist/sessions/grader.js +5 -5
  186. package/dist/sessions/mcp-auth.js +1 -1
  187. package/dist/sessions/secrets.js +8 -8
  188. package/dist/sessions/sweeper.js +37 -37
  189. package/dist/sessions/threads.js +41 -41
  190. package/dist/shutdown.js +38 -38
  191. package/dist/sync/anthropic.js +11 -11
  192. package/dist/sync/container-file-sync.js +6 -6
  193. package/dist/sync/file-sync.js +17 -17
  194. package/package.json +1 -1
  195. /package/dist/{chunk-WPK4ZPMG.js → chunk-UE6DNLSV.js} +0 -0
@@ -1,32 +1,32 @@
1
1
  import {
2
2
  resolveRemoteSessionId
3
- } from "./chunk-L2RX552S.js";
3
+ } from "./chunk-22OUZJAV.js";
4
4
  import {
5
5
  assertResourceTenant
6
6
  } from "./chunk-23UKWXJH.js";
7
7
  import {
8
8
  authenticateAndIntercept
9
- } from "./chunk-WQARLGBG.js";
9
+ } from "./chunk-GCQDNUS2.js";
10
10
  import {
11
11
  forwardToAnthropic
12
- } from "./chunk-JCW3ZRES.js";
12
+ } from "./chunk-MQBMXAPU.js";
13
13
  import {
14
14
  ensureInitialized
15
- } from "./chunk-LMNFIJ6M.js";
15
+ } from "./chunk-PN3AWRMX.js";
16
16
  import {
17
17
  getProxiedTenantId,
18
18
  isProxied
19
- } from "./chunk-E7DD7F7J.js";
19
+ } from "./chunk-5U5LRAFJ.js";
20
20
  import {
21
21
  subscribe
22
- } from "./chunk-MHBLVGRF.js";
22
+ } from "./chunk-5MERXOLJ.js";
23
23
  import {
24
24
  getSession
25
- } from "./chunk-3NK6YTA5.js";
25
+ } from "./chunk-KUWJJD6O.js";
26
26
  import {
27
27
  getDb,
28
28
  init_client
29
- } from "./chunk-6POQAFEC.js";
29
+ } from "./chunk-W3JMIUHV.js";
30
30
  import {
31
31
  notFound,
32
32
  toResponse
@@ -1,11 +1,12 @@
1
1
  // src/sessions/mcp-auth.ts
2
2
  function injectMcpAuthHeaders(agent, vaultEntries) {
3
3
  const mcpServers = agent.mcp_servers;
4
- if (!mcpServers || Object.keys(mcpServers).length === 0) return agent;
4
+ if (!mcpServers || mcpServers.length === 0) return agent;
5
5
  if (vaultEntries.length === 0) return agent;
6
6
  const serverLookup = /* @__PURE__ */ new Map();
7
- for (const name of Object.keys(mcpServers)) {
8
- serverLookup.set(name.toUpperCase().replace(/-/g, "_"), name);
7
+ for (let i = 0; i < mcpServers.length; i++) {
8
+ const name = mcpServers[i].name;
9
+ serverLookup.set(name.toUpperCase().replace(/-/g, "_"), i);
9
10
  }
10
11
  let mutated = false;
11
12
  const merged = {};
@@ -13,10 +14,10 @@ function injectMcpAuthHeaders(agent, vaultEntries) {
13
14
  const authMatch = /^MCP_AUTH_(.+)$/i.exec(key);
14
15
  if (authMatch) {
15
16
  const norm = authMatch[1].toUpperCase();
16
- const serverName = serverLookup.get(norm);
17
- if (serverName) {
18
- merged[serverName] = merged[serverName] ?? {};
19
- merged[serverName]["Authorization"] = `Bearer ${value}`;
17
+ const idx = serverLookup.get(norm);
18
+ if (idx !== void 0) {
19
+ merged[idx] = merged[idx] ?? {};
20
+ merged[idx]["Authorization"] = `Bearer ${value}`;
20
21
  mutated = true;
21
22
  }
22
23
  continue;
@@ -28,10 +29,10 @@ function injectMcpAuthHeaders(agent, vaultEntries) {
28
29
  for (let i = parts.length - 1; i >= 1; i--) {
29
30
  const serverPart = parts.slice(0, i).join("_").toUpperCase();
30
31
  const headerPart = parts.slice(i).join("-");
31
- const serverName = serverLookup.get(serverPart);
32
- if (serverName) {
33
- merged[serverName] = merged[serverName] ?? {};
34
- merged[serverName][headerPart] = value;
32
+ const idx = serverLookup.get(serverPart);
33
+ if (idx !== void 0) {
34
+ merged[idx] = merged[idx] ?? {};
35
+ merged[idx][headerPart] = value;
35
36
  mutated = true;
36
37
  break;
37
38
  }
@@ -39,13 +40,14 @@ function injectMcpAuthHeaders(agent, vaultEntries) {
39
40
  }
40
41
  }
41
42
  if (!mutated) return agent;
42
- const newServers = { ...mcpServers };
43
- for (const [name, headers] of Object.entries(merged)) {
44
- newServers[name] = {
45
- ...newServers[name],
46
- headers: { ...newServers[name].headers, ...headers }
43
+ const newServers = mcpServers.map((server, idx) => {
44
+ const headers = merged[idx];
45
+ if (!headers) return server;
46
+ return {
47
+ ...server,
48
+ headers: { ...server.headers, ...headers }
47
49
  };
48
- }
50
+ });
49
51
  return { ...agent, mcp_servers: newServers };
50
52
  }
51
53
 
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  listTraces
3
- } from "./chunk-6GP5IKXE.js";
3
+ } from "./chunk-XSNJ7NT2.js";
4
4
  import {
5
5
  jsonOk,
6
6
  routeWrap
7
- } from "./chunk-RH4GKU52.js";
7
+ } from "./chunk-QTXAWC5J.js";
8
8
  import {
9
9
  exportTrace
10
- } from "./chunk-GVPJL3XS.js";
10
+ } from "./chunk-JP7Y3TKK.js";
11
11
  import {
12
12
  listEventsByTrace,
13
13
  rowToManagedEvent
14
- } from "./chunk-TH7WJLZC.js";
14
+ } from "./chunk-KGBKIJPF.js";
15
15
  import {
16
16
  badRequest,
17
17
  notFound
@@ -3,11 +3,11 @@ import {
3
3
  } from "./chunk-S3JRZFF5.js";
4
4
  import {
5
5
  buildGeminiArgs
6
- } from "./chunk-JHGJG2Z2.js";
6
+ } from "./chunk-IBYOMAZ3.js";
7
7
  import {
8
8
  buildGeminiAuthEnv,
9
9
  validateGeminiRuntime
10
- } from "./chunk-V2R7RWVY.js";
10
+ } from "./chunk-STJNO6SL.js";
11
11
  import {
12
12
  prepareGeminiOnSandbox
13
13
  } from "./chunk-XG4UIGDH.js";
@@ -10,10 +10,10 @@ import {
10
10
  import {
11
11
  getDrizzle,
12
12
  init_drizzle
13
- } from "./chunk-R5T4LJSK.js";
13
+ } from "./chunk-PZNAQBHQ.js";
14
14
  import {
15
15
  schema_exports
16
- } from "./chunk-ZMJ4EP4C.js";
16
+ } from "./chunk-ILHIHMO3.js";
17
17
 
18
18
  // src/db/files.ts
19
19
  init_drizzle();
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  SUPPORTED_PROVIDERS
3
- } from "./chunk-PIJKJNGB.js";
3
+ } from "./chunk-24IDJ7LY.js";
4
4
  import {
5
5
  addUpstreamKey,
6
6
  deleteUpstreamKey,
@@ -8,20 +8,20 @@ import {
8
8
  enableUpstreamKey,
9
9
  getUpstreamKey,
10
10
  listUpstreamKeys
11
- } from "./chunk-H7UKW666.js";
11
+ } from "./chunk-445EL6J5.js";
12
12
  import {
13
13
  requireGlobalAdmin
14
14
  } from "./chunk-23UKWXJH.js";
15
15
  import {
16
16
  recordAudit
17
- } from "./chunk-KLN6HPYM.js";
17
+ } from "./chunk-L3IACZ72.js";
18
18
  import {
19
19
  requireFeature
20
20
  } from "./chunk-2N2KL4KM.js";
21
21
  import {
22
22
  jsonOk,
23
23
  routeWrap
24
- } from "./chunk-RH4GKU52.js";
24
+ } from "./chunk-QTXAWC5J.js";
25
25
  import {
26
26
  badRequest,
27
27
  notFound
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  syncAndCreateSession
3
- } from "./chunk-DU7LSFQQ.js";
3
+ } from "./chunk-7SY65LWY.js";
4
4
  import {
5
5
  resolveRemoteSessionId,
6
6
  upsertSync
7
- } from "./chunk-L2RX552S.js";
7
+ } from "./chunk-22OUZJAV.js";
8
8
  import {
9
9
  assertResourceTenant,
10
10
  tenantFilter
@@ -14,14 +14,16 @@ import {
14
14
  } from "./chunk-DC2UMEQH.js";
15
15
  import {
16
16
  kickoffEnvironmentSetup
17
- } from "./chunk-C6AXM3M7.js";
17
+ } from "./chunk-LQP6XGFU.js";
18
18
  import {
19
+ decodeCursor,
19
20
  jsonOk,
21
+ paginatedOk,
20
22
  routeWrap
21
- } from "./chunk-RH4GKU52.js";
23
+ } from "./chunk-QTXAWC5J.js";
22
24
  import {
23
25
  forwardToAnthropic
24
- } from "./chunk-JCW3ZRES.js";
26
+ } from "./chunk-MQBMXAPU.js";
25
27
  import {
26
28
  errors_exports,
27
29
  init_errors
@@ -31,18 +33,18 @@ import {
31
33
  isProxied,
32
34
  markProxied,
33
35
  unmarkProxied
34
- } from "./chunk-E7DD7F7J.js";
36
+ } from "./chunk-5U5LRAFJ.js";
35
37
  import {
36
38
  dropActor,
37
39
  getActor
38
40
  } from "./chunk-LAWTTG2E.js";
39
41
  import {
40
42
  releaseSession
41
- } from "./chunk-N76ZVITA.js";
43
+ } from "./chunk-JFOHGHW5.js";
42
44
  import {
43
45
  appendEvent,
44
46
  dropEmitter
45
- } from "./chunk-MHBLVGRF.js";
47
+ } from "./chunk-5MERXOLJ.js";
46
48
  import {
47
49
  archiveSession,
48
50
  createSession,
@@ -50,13 +52,13 @@ import {
50
52
  listSessions,
51
53
  updateSessionMutable,
52
54
  updateSessionStatus
53
- } from "./chunk-3NK6YTA5.js";
55
+ } from "./chunk-KUWJJD6O.js";
54
56
  import {
55
57
  getEnvironment
56
- } from "./chunk-X6IQ57SC.js";
58
+ } from "./chunk-H6OT5GUL.js";
57
59
  import {
58
60
  getAgent
59
- } from "./chunk-ZTH5JRZG.js";
61
+ } from "./chunk-BCIFFAGW.js";
60
62
  import {
61
63
  init_clock,
62
64
  nowMs
@@ -64,7 +66,7 @@ import {
64
66
  import {
65
67
  getDb,
66
68
  init_client
67
- } from "./chunk-6POQAFEC.js";
69
+ } from "./chunk-W3JMIUHV.js";
68
70
  import {
69
71
  badRequest,
70
72
  notFound
@@ -445,13 +447,25 @@ function handleListSessions(request) {
445
447
  const limit = url.searchParams.get("limit");
446
448
  const order = url.searchParams.get("order");
447
449
  const includeArchived = url.searchParams.get("include_archived") === "true";
448
- const cursor = url.searchParams.get("page") ?? void 0;
450
+ const cursor = decodeCursor(url.searchParams.get("page"));
449
451
  const agentId = url.searchParams.get("agent_id") ?? void 0;
450
452
  const agentVersion = url.searchParams.get("agent_version");
451
453
  const environmentId = url.searchParams.get("environment_id") ?? void 0;
454
+ const statusesRaw = url.searchParams.getAll("statuses");
452
455
  const statusRaw = url.searchParams.get("status");
456
+ let statuses;
453
457
  let status;
454
- if (statusRaw != null) {
458
+ if (statusesRaw.length > 0) {
459
+ const values = statusesRaw.flatMap((v) => v.split(","));
460
+ for (const v of values) {
461
+ if (!ALLOWED_STATUSES.includes(v)) {
462
+ throw badRequest(
463
+ `invalid statuses value: ${v} (allowed: ${ALLOWED_STATUSES.join(",")})`
464
+ );
465
+ }
466
+ }
467
+ statuses = values;
468
+ } else if (statusRaw != null) {
455
469
  if (!ALLOWED_STATUSES.includes(statusRaw)) {
456
470
  throw badRequest(
457
471
  `invalid status value: ${statusRaw} (allowed: ${ALLOWED_STATUSES.join(",")})`
@@ -465,6 +479,7 @@ function handleListSessions(request) {
465
479
  agent_version: agentVersion ? Number(agentVersion) : void 0,
466
480
  environmentId,
467
481
  status,
482
+ statuses,
468
483
  limit: requestedLimit,
469
484
  order: order ?? void 0,
470
485
  includeArchived,
@@ -475,12 +490,7 @@ function handleListSessions(request) {
475
490
  createdLte: parseMs(url.searchParams.get("created_at[lte]")),
476
491
  tenantFilter: tenantFilter(auth)
477
492
  });
478
- return jsonOk({
479
- data,
480
- has_more: data.length === requestedLimit,
481
- first_id: data.length > 0 ? data[0].id : null,
482
- last_id: data.length > 0 ? data[data.length - 1].id : null
483
- });
493
+ return paginatedOk(data, requestedLimit);
484
494
  });
485
495
  }
486
496
  function handleGetSession(request, id) {
@@ -10,10 +10,10 @@ import {
10
10
  import {
11
11
  getDrizzle,
12
12
  init_drizzle
13
- } from "./chunk-R5T4LJSK.js";
13
+ } from "./chunk-PZNAQBHQ.js";
14
14
  import {
15
15
  schema_exports
16
- } from "./chunk-ZMJ4EP4C.js";
16
+ } from "./chunk-ILHIHMO3.js";
17
17
  import {
18
18
  __esm,
19
19
  __export
@@ -11,18 +11,18 @@ import {
11
11
  getFileRecord,
12
12
  listFiles,
13
13
  updateFileStoragePath
14
- } from "./chunk-NQVRZAIX.js";
14
+ } from "./chunk-DMMNAQUM.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-RH4GKU52.js";
21
+ } from "./chunk-QTXAWC5J.js";
22
22
  import {
23
23
  getDb,
24
24
  init_client
25
- } from "./chunk-6POQAFEC.js";
25
+ } from "./chunk-W3JMIUHV.js";
26
26
  import {
27
27
  badRequest,
28
28
  notFound
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  forwardToAnthropic
3
- } from "./chunk-JCW3ZRES.js";
3
+ } from "./chunk-MQBMXAPU.js";
4
4
  import {
5
5
  isAnthropicApiKey,
6
6
  isPassthroughAllowedPath
@@ -8,10 +8,10 @@ import {
8
8
  import {
9
9
  findByRawKey,
10
10
  hydratePermissions
11
- } from "./chunk-USYY3L7G.js";
11
+ } from "./chunk-T3FQPTOA.js";
12
12
  import {
13
13
  getConfig
14
- } from "./chunk-V7MTIMPB.js";
14
+ } from "./chunk-X6QIWZ33.js";
15
15
  import {
16
16
  unauthorized
17
17
  } from "./chunk-EZYKRG4W.js";
@@ -5,23 +5,25 @@ import {
5
5
  } from "./chunk-23UKWXJH.js";
6
6
  import {
7
7
  kickoffEnvironmentSetup
8
- } from "./chunk-C6AXM3M7.js";
8
+ } from "./chunk-LQP6XGFU.js";
9
9
  import {
10
+ decodeCursor,
10
11
  jsonOk,
12
+ paginatedOk,
11
13
  routeWrap
12
- } from "./chunk-RH4GKU52.js";
14
+ } from "./chunk-QTXAWC5J.js";
13
15
  import {
14
16
  forwardToAnthropic
15
- } from "./chunk-JCW3ZRES.js";
17
+ } from "./chunk-MQBMXAPU.js";
16
18
  import {
17
19
  getProxiedTenantId,
18
20
  isProxied,
19
21
  markProxied,
20
22
  unmarkProxied
21
- } from "./chunk-E7DD7F7J.js";
23
+ } from "./chunk-5U5LRAFJ.js";
22
24
  import {
23
25
  resolveContainerProvider
24
- } from "./chunk-WPK4ZPMG.js";
26
+ } from "./chunk-UE6DNLSV.js";
25
27
  import {
26
28
  archiveEnvironment,
27
29
  createEnvironment,
@@ -30,11 +32,11 @@ import {
30
32
  hasSessionsAttached,
31
33
  listEnvironments,
32
34
  updateEnvironment
33
- } from "./chunk-X6IQ57SC.js";
35
+ } from "./chunk-H6OT5GUL.js";
34
36
  import {
35
37
  getDb,
36
38
  init_client
37
- } from "./chunk-6POQAFEC.js";
39
+ } from "./chunk-W3JMIUHV.js";
38
40
  import {
39
41
  badRequest,
40
42
  conflict,
@@ -155,7 +157,7 @@ function handleListEnvironments(request) {
155
157
  const limit = url.searchParams.get("limit");
156
158
  const order = url.searchParams.get("order");
157
159
  const includeArchived = url.searchParams.get("include_archived") === "true";
158
- const cursor = url.searchParams.get("page") ?? void 0;
160
+ const cursor = decodeCursor(url.searchParams.get("page"));
159
161
  const requestedLimit = limit ? Number(limit) : 20;
160
162
  const data = listEnvironments({
161
163
  limit: requestedLimit,
@@ -164,12 +166,7 @@ function handleListEnvironments(request) {
164
166
  cursor,
165
167
  tenantFilter: tenantFilter(auth)
166
168
  });
167
- return jsonOk({
168
- data,
169
- has_more: data.length === requestedLimit,
170
- first_id: data.length > 0 ? data[0].id : null,
171
- last_id: data.length > 0 ? data[data.length - 1].id : null
172
- });
169
+ return paginatedOk(data, requestedLimit);
173
170
  });
174
171
  }
175
172
  function handleGetEnvironment(request, id) {
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-XBHDQK4Z.js";
7
7
  import {
8
8
  getConfig
9
- } from "./chunk-V7MTIMPB.js";
9
+ } from "./chunk-X6QIWZ33.js";
10
10
 
11
11
  // src/backends/claude/args.ts
12
12
  function buildClaudeArgs(input) {
@@ -37,7 +37,7 @@ Your custom tools are: ${toolList}. Call them by these exact names \u2014 do not
37
37
  }
38
38
  argv.push("--system-prompt", systemPrompt);
39
39
  if (input.agent.model) {
40
- argv.push("--model", input.agent.model);
40
+ argv.push("--model", input.agent.model.id);
41
41
  }
42
42
  const mcpToolNames = Array.from(tools.customToolNames).map(
43
43
  (name) => `mcp__tool-bridge__${name}`
@@ -52,10 +52,15 @@ Your custom tools are: ${toolList}. Call them by these exact names \u2014 do not
52
52
  if (input.agent.model_config?.speed === "fast") {
53
53
  argv.push("--fast");
54
54
  }
55
- if (input.agent.mcp_servers && Object.keys(input.agent.mcp_servers).length > 0) {
55
+ if (input.agent.mcp_servers && input.agent.mcp_servers.length > 0) {
56
+ const mcpRecord = {};
57
+ for (const s of input.agent.mcp_servers) {
58
+ const { name, ...rest } = s;
59
+ mcpRecord[name] = rest;
60
+ }
56
61
  argv.push(
57
62
  "--mcp-config",
58
- JSON.stringify({ mcpServers: input.agent.mcp_servers })
63
+ JSON.stringify({ mcpServers: mcpRecord })
59
64
  );
60
65
  }
61
66
  return argv;
@@ -8,14 +8,14 @@ import {
8
8
  import {
9
9
  jsonOk,
10
10
  routeWrap
11
- } from "./chunk-RH4GKU52.js";
11
+ } from "./chunk-QTXAWC5J.js";
12
12
  import {
13
13
  snapshotApiMetrics
14
14
  } from "./chunk-D2XITRN6.js";
15
15
  import {
16
16
  getDb,
17
17
  init_client
18
- } from "./chunk-6POQAFEC.js";
18
+ } from "./chunk-W3JMIUHV.js";
19
19
  import {
20
20
  badRequest
21
21
  } from "./chunk-EZYKRG4W.js";
@@ -1,21 +1,21 @@
1
1
  import {
2
2
  piBackend
3
- } from "./chunk-5EQJOUWM.js";
3
+ } from "./chunk-NHAYKVXG.js";
4
4
  import {
5
5
  opencodeBackend
6
- } from "./chunk-MQQ44IGX.js";
6
+ } from "./chunk-KKAJC3Z2.js";
7
7
  import {
8
8
  factoryBackend
9
- } from "./chunk-2GIX4HAT.js";
9
+ } from "./chunk-L26TVIB6.js";
10
10
  import {
11
11
  geminiBackend
12
- } from "./chunk-JZL4L54R.js";
12
+ } from "./chunk-DKLHYSPW.js";
13
13
  import {
14
14
  codexBackend
15
- } from "./chunk-2I35VGHX.js";
15
+ } from "./chunk-R3QHLKJG.js";
16
16
  import {
17
17
  claudeBackend
18
- } from "./chunk-ZMNQ2YJ6.js";
18
+ } from "./chunk-PNZF7HIU.js";
19
19
 
20
20
  // src/backends/registry.ts
21
21
  var BACKENDS = {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  DEFAULT_TENANT_ID
3
- } from "./chunk-AR2TM7CR.js";
3
+ } from "./chunk-I26QP3A3.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-R5T4LJSK.js";
16
+ } from "./chunk-PZNAQBHQ.js";
17
17
  import {
18
18
  schema_exports
19
- } from "./chunk-ZMJ4EP4C.js";
19
+ } from "./chunk-ILHIHMO3.js";
20
20
 
21
21
  // src/db/environments.ts
22
22
  init_drizzle();
@@ -25,6 +25,7 @@ init_clock();
25
25
  import { eq, and, isNull, lt, gt, sql } from "drizzle-orm";
26
26
  function hydrate(row) {
27
27
  return {
28
+ type: "environment",
28
29
  id: row.id,
29
30
  name: row.name,
30
31
  description: row.description ?? null,
@@ -33,6 +34,7 @@ function hydrate(row) {
33
34
  state: row.state,
34
35
  state_message: row.state_message,
35
36
  created_at: toIso(row.created_at),
37
+ updated_at: toIso(row.updated_at),
36
38
  archived_at: row.archived_at ? toIso(row.archived_at) : null
37
39
  };
38
40
  }
@@ -48,7 +50,8 @@ function createEnvironment(input) {
48
50
  metadata_json: JSON.stringify(input.metadata ?? {}),
49
51
  tenant_id: input.tenant_id ?? DEFAULT_TENANT_ID,
50
52
  state: "preparing",
51
- created_at: now
53
+ created_at: now,
54
+ updated_at: now
52
55
  }).run();
53
56
  return getEnvironment(id);
54
57
  }
@@ -64,7 +67,8 @@ function updateEnvironment(id, updates) {
64
67
  name: newName,
65
68
  description: newDescription ?? null,
66
69
  config_json: newConfigJson,
67
- metadata_json: newMetadataJson
70
+ metadata_json: newMetadataJson,
71
+ updated_at: nowMs()
68
72
  }).where(eq(schema_exports.environments.id, id)).run();
69
73
  return getEnvironment(id);
70
74
  }
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  listCredentialsWithTokens
3
- } from "./chunk-L5RW66H5.js";
3
+ } from "./chunk-HVLYE4S5.js";
4
4
  import {
5
5
  listEntries
6
- } from "./chunk-ZVXIZ2JD.js";
6
+ } from "./chunk-VP527YC5.js";
7
7
 
8
8
  // src/sessions/secrets.ts
9
9
  function loadSessionSecrets(vaultIds) {
@@ -14,7 +14,7 @@ import {
14
14
  import {
15
15
  getDb,
16
16
  init_client
17
- } from "./chunk-6POQAFEC.js";
17
+ } from "./chunk-W3JMIUHV.js";
18
18
 
19
19
  // src/db/credentials.ts
20
20
  init_client();
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getConfig
3
- } from "./chunk-V7MTIMPB.js";
3
+ } from "./chunk-X6QIWZ33.js";
4
4
 
5
5
  // src/backends/pi/auth.ts
6
6
  function buildPiAuthEnv() {
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-23UKWXJH.js";
7
7
  import {
8
8
  recordAudit
9
- } from "./chunk-KLN6HPYM.js";
9
+ } from "./chunk-L3IACZ72.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-RH4GKU52.js";
18
+ } from "./chunk-QTXAWC5J.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-USYY3L7G.js";
26
+ } from "./chunk-T3FQPTOA.js";
27
27
  import {
28
28
  listSessionsByApiKey
29
- } from "./chunk-3NK6YTA5.js";
29
+ } from "./chunk-KUWJJD6O.js";
30
30
  import {
31
31
  getDb,
32
32
  init_client
33
- } from "./chunk-6POQAFEC.js";
33
+ } from "./chunk-W3JMIUHV.js";
34
34
  import {
35
35
  badRequest,
36
36
  forbidden,
@@ -10,7 +10,7 @@ import {
10
10
  import {
11
11
  getDb,
12
12
  init_client
13
- } from "./chunk-6POQAFEC.js";
13
+ } from "./chunk-W3JMIUHV.js";
14
14
 
15
15
  // src/db/tenants.ts
16
16
  init_client();