@agentstep/agent-sdk 0.4.41 → 0.5.1

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 (197) 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 +8 -8
  4. package/dist/backends/claude/wrapper-script.js +1 -1
  5. package/dist/backends/codex/args.js +1 -1
  6. package/dist/backends/codex/auth.js +6 -6
  7. package/dist/backends/codex/index.js +8 -8
  8. package/dist/backends/factory/args.js +1 -1
  9. package/dist/backends/factory/auth.js +6 -6
  10. package/dist/backends/factory/index.js +8 -8
  11. package/dist/backends/gemini/args.js +1 -1
  12. package/dist/backends/gemini/auth.js +6 -6
  13. package/dist/backends/gemini/index.js +8 -8
  14. package/dist/backends/opencode/args.js +1 -1
  15. package/dist/backends/opencode/auth.js +6 -6
  16. package/dist/backends/opencode/index.js +9 -9
  17. package/dist/backends/opencode/mcp.js +1 -1
  18. package/dist/backends/pi/args.js +1 -1
  19. package/dist/backends/pi/auth.js +6 -6
  20. package/dist/backends/pi/index.js +8 -8
  21. package/dist/backends/registry.js +25 -25
  22. package/dist/{chunk-L2RX552S.js → chunk-22OUZJAV.js} +3 -3
  23. package/dist/{chunk-XWWLMJXT.js → chunk-2YFS435Z.js} +6 -15
  24. package/dist/{chunk-W2NHS4IF.js → chunk-2YIMCZJK.js} +15 -19
  25. package/dist/{chunk-WCDWL6ED.js → chunk-2YZOIFVN.js} +49 -0
  26. package/dist/{chunk-2PPB644A.js → chunk-37C5BNVV.js} +1 -1
  27. package/dist/{chunk-RDGOGAQ5.js → chunk-3FLQ7KZP.js} +1 -1
  28. package/dist/{chunk-2RSL5SO7.js → chunk-3NKK4M23.js} +2 -2
  29. package/dist/{chunk-CHDQ3HIR.js → chunk-3S4CGFKJ.js} +5 -9
  30. package/dist/{chunk-H7UKW666.js → chunk-445EL6J5.js} +1 -1
  31. package/dist/{chunk-FP4E3QUS.js → chunk-4LHJJXH3.js} +2 -2
  32. package/dist/{chunk-ZFJPOQSY.js → chunk-4MKBT3KA.js} +69 -30
  33. package/dist/{chunk-ENGKR2JT.js → chunk-56XDLNEW.js} +1 -1
  34. package/dist/{chunk-Y6SFUNGO.js → chunk-57LAR6EM.js} +4 -4
  35. package/dist/{chunk-JZL4L54R.js → chunk-5M47X54D.js} +2 -2
  36. package/dist/{chunk-MHBLVGRF.js → chunk-5MERXOLJ.js} +4 -4
  37. package/dist/{chunk-E7DD7F7J.js → chunk-5U5LRAFJ.js} +2 -2
  38. package/dist/{chunk-MQQ44IGX.js → chunk-63AKPSCV.js} +3 -3
  39. package/dist/{chunk-T5VRE77P.js → chunk-6KWJASEO.js} +1 -1
  40. package/dist/{chunk-EUINGLHA.js → chunk-6RFQCFL2.js} +30 -20
  41. package/dist/{chunk-V5HWHJ4P.js → chunk-74E7GKUG.js} +1 -1
  42. package/dist/{chunk-DU7LSFQQ.js → chunk-7SY65LWY.js} +6 -9
  43. package/dist/{chunk-JCW3ZRES.js → chunk-A46RUKGA.js} +1 -1
  44. package/dist/{chunk-LZFB3HRK.js → chunk-AQB3P5ZP.js} +5 -10
  45. package/dist/{chunk-RP6WQ4IH.js → chunk-B5EY2VJC.js} +3 -3
  46. package/dist/{chunk-ZTH5JRZG.js → chunk-BCIFFAGW.js} +41 -10
  47. package/dist/{chunk-2Z2KAPUL.js → chunk-BJP5BIHE.js} +3 -3
  48. package/dist/{chunk-5EQJOUWM.js → chunk-C35ZTCBP.js} +2 -2
  49. package/dist/{chunk-OXWELRJL.js → chunk-CBPO2P4I.js} +101 -16
  50. package/dist/{chunk-HH4OXSOV.js → chunk-CE366H6Z.js} +5 -5
  51. package/dist/{chunk-C46UG6GQ.js → chunk-CKFJN5XK.js} +1 -1
  52. package/dist/{chunk-YBZJHDSE.js → chunk-COZG53R3.js} +2 -2
  53. package/dist/{chunk-SV2B3P6B.js → chunk-DBFPJSOY.js} +19 -17
  54. package/dist/{chunk-NQVRZAIX.js → chunk-DMMNAQUM.js} +2 -2
  55. package/dist/{chunk-JWH4OIBP.js → chunk-DRNZ24RF.js} +4 -4
  56. package/dist/{chunk-3FDE3BPB.js → chunk-EDUTIJAU.js} +9 -7
  57. package/dist/{chunk-5EKQBD2H.js → chunk-FCUXFLNK.js} +2 -2
  58. package/dist/{chunk-34EB622U.js → chunk-FYBHPBWY.js} +2 -2
  59. package/dist/{chunk-HOIDGDU5.js → chunk-GD3WXIHX.js} +1 -1
  60. package/dist/{chunk-6IYCBW4J.js → chunk-GIUB2OPA.js} +1 -1
  61. package/dist/{chunk-V7MTIMPB.js → chunk-GQYSSSVA.js} +3 -3
  62. package/dist/{chunk-X6IQ57SC.js → chunk-H6OT5GUL.js} +9 -5
  63. package/dist/{chunk-TPPLYCJF.js → chunk-HMOSAXVZ.js} +2 -2
  64. package/dist/{chunk-L5RW66H5.js → chunk-HVLYE4S5.js} +1 -1
  65. package/dist/{chunk-PIJKJNGB.js → chunk-HZZ6ZLKP.js} +4 -4
  66. package/dist/{chunk-AR2TM7CR.js → chunk-I26QP3A3.js} +1 -1
  67. package/dist/{chunk-D2TRWKVQ.js → chunk-I2WVMCYN.js} +80 -2
  68. package/dist/{chunk-JHGJG2Z2.js → chunk-IBYOMAZ3.js} +1 -1
  69. package/dist/{chunk-SUGSHXND.js → chunk-IEZFRNLC.js} +2 -2
  70. package/dist/{chunk-ZMJ4EP4C.js → chunk-ILHIHMO3.js} +7 -2
  71. package/dist/{chunk-FDBR634Z.js → chunk-IMPLRDOV.js} +6 -6
  72. package/dist/{chunk-ZYISLRS6.js → chunk-JWHSUEDE.js} +114 -37
  73. package/dist/{chunk-TH7WJLZC.js → chunk-KGBKIJPF.js} +3 -3
  74. package/dist/{chunk-3NK6YTA5.js → chunk-KUWJJD6O.js} +42 -8
  75. package/dist/{chunk-2I35VGHX.js → chunk-L35CBI7F.js} +2 -2
  76. package/dist/{chunk-KLN6HPYM.js → chunk-L3IACZ72.js} +1 -1
  77. package/dist/{chunk-MXOG5SAO.js → chunk-LIXSR7BG.js} +11 -14
  78. package/dist/{chunk-7GG3FEK2.js → chunk-MCWCRZM4.js} +4 -4
  79. package/dist/{chunk-V66YKIW6.js → chunk-MXMXJYN4.js} +5 -5
  80. package/dist/{chunk-GVPJL3XS.js → chunk-MZYJFU4K.js} +5 -5
  81. package/dist/{chunk-ZMNQ2YJ6.js → chunk-NBYCX6L4.js} +4 -4
  82. package/dist/{chunk-ZQXBHNEZ.js → chunk-NL4UNA53.js} +2 -2
  83. package/dist/{chunk-WQARLGBG.js → chunk-NRXTWATQ.js} +3 -3
  84. package/dist/{chunk-FXLUSECC.js → chunk-O56RNR7B.js} +1 -1
  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-R5T4LJSK.js → chunk-PZNAQBHQ.js} +2 -2
  88. package/dist/{chunk-32XS3Y6P.js → chunk-Q4XF3OBK.js} +8 -8
  89. package/dist/{chunk-IU457W7Q.js → chunk-QBJOYOVF.js} +2 -1
  90. package/dist/{chunk-C6AXM3M7.js → chunk-QJ6QQO6D.js} +3 -3
  91. package/dist/{chunk-2GIX4HAT.js → chunk-R6EXYBCT.js} +2 -2
  92. package/dist/{chunk-RVR6C22M.js → chunk-RT5S5KRX.js} +1 -1
  93. package/dist/{chunk-USYY3L7G.js → chunk-T3FQPTOA.js} +2 -2
  94. package/dist/{chunk-5IGBMS2U.js → chunk-T3HMVHDG.js} +1 -1
  95. package/dist/{chunk-RH4GKU52.js → chunk-T3IGOI6Z.js} +18 -3
  96. package/dist/{chunk-DAVYI5H4.js → chunk-T7BHW3CP.js} +23 -23
  97. package/dist/{chunk-QSUGIJWV.js → chunk-TG3S4RVJ.js} +4 -9
  98. package/dist/{chunk-IAF6VMPO.js → chunk-TPMZO6S2.js} +1 -1
  99. package/dist/{chunk-OGJUSGF7.js → chunk-UMRDMOB6.js} +1 -1
  100. package/dist/{chunk-KKCLTWG7.js → chunk-UMVZZQKD.js} +1 -1
  101. package/dist/{chunk-LAVHQCRP.js → chunk-UQ3LKJPM.js} +3 -3
  102. package/dist/{chunk-P26WOAA3.js → chunk-USIMPXUH.js} +1 -1
  103. package/dist/{chunk-Z25I7DRV.js → chunk-V5DH3OAC.js} +10 -5
  104. package/dist/{chunk-N3QIXC2B.js → chunk-VJWNFMMQ.js} +2 -2
  105. package/dist/{chunk-ZVXIZ2JD.js → chunk-VP527YC5.js} +35 -6
  106. package/dist/{chunk-6POQAFEC.js → chunk-W3JMIUHV.js} +1 -1
  107. package/dist/{chunk-V2R7RWVY.js → chunk-WDACZSRU.js} +1 -1
  108. package/dist/{chunk-FOOH6SCB.js → chunk-WU74DV5R.js} +2 -2
  109. package/dist/{chunk-6GP5IKXE.js → chunk-XSNJ7NT2.js} +1 -1
  110. package/dist/{chunk-S7W3KJYH.js → chunk-YYMUSVUI.js} +9 -4
  111. package/dist/{chunk-CREPPDHX.js → chunk-YZZHDZ7B.js} +1 -1
  112. package/dist/{chunk-LMNFIJ6M.js → chunk-ZWC5V2DB.js} +15 -15
  113. package/dist/{chunk-N76ZVITA.js → chunk-ZY2U24QP.js} +24 -14
  114. package/dist/config/index.js +5 -5
  115. package/dist/containers/client.js +6 -6
  116. package/dist/containers/exec.js +6 -6
  117. package/dist/containers/lifecycle.js +37 -37
  118. package/dist/containers/setup.js +9 -9
  119. package/dist/db/agents.js +8 -6
  120. package/dist/db/api_keys.js +5 -5
  121. package/dist/db/audit.js +3 -3
  122. package/dist/db/batch.js +10 -10
  123. package/dist/db/client.js +2 -2
  124. package/dist/db/credentials.js +3 -3
  125. package/dist/db/drizzle.js +4 -4
  126. package/dist/db/environments.js +6 -6
  127. package/dist/db/events.js +5 -5
  128. package/dist/db/files.js +5 -5
  129. package/dist/db/memory.js +5 -5
  130. package/dist/db/migrations.js +1 -1
  131. package/dist/db/proxy.js +5 -5
  132. package/dist/db/schema.js +1 -1
  133. package/dist/db/session-resources.js +5 -5
  134. package/dist/db/sessions.js +8 -7
  135. package/dist/db/sync.js +5 -5
  136. package/dist/db/tenants.js +3 -3
  137. package/dist/db/traces.js +5 -5
  138. package/dist/db/upstream_keys.js +3 -3
  139. package/dist/db/vaults.js +12 -8
  140. package/dist/handlers/agents.js +57 -53
  141. package/dist/handlers/api_keys.js +54 -54
  142. package/dist/handlers/audit.js +54 -54
  143. package/dist/handlers/batch.js +54 -54
  144. package/dist/handlers/credentials.js +54 -54
  145. package/dist/handlers/environments.js +54 -54
  146. package/dist/handlers/events.js +57 -57
  147. package/dist/handlers/files.js +54 -54
  148. package/dist/handlers/index.js +101 -93
  149. package/dist/handlers/license.js +53 -53
  150. package/dist/handlers/memory.js +54 -54
  151. package/dist/handlers/metrics.js +53 -53
  152. package/dist/handlers/models.js +54 -54
  153. package/dist/handlers/openapi.js +3 -3
  154. package/dist/handlers/providers.js +53 -53
  155. package/dist/handlers/resources.js +53 -53
  156. package/dist/handlers/sessions.js +56 -56
  157. package/dist/handlers/settings.js +53 -53
  158. package/dist/handlers/skills-write.js +53 -53
  159. package/dist/handlers/skills.js +54 -54
  160. package/dist/handlers/stream.js +53 -53
  161. package/dist/handlers/tenants.js +54 -54
  162. package/dist/handlers/threads.js +53 -53
  163. package/dist/handlers/traces.js +54 -54
  164. package/dist/handlers/upstream_keys.js +56 -56
  165. package/dist/handlers/vaults.js +57 -53
  166. package/dist/handlers/whoami.js +53 -53
  167. package/dist/http.js +56 -52
  168. package/dist/index.js +58 -58
  169. package/dist/init.js +49 -49
  170. package/dist/lib/model-registry.js +6 -6
  171. package/dist/lib/skills-cache.js +6 -6
  172. package/dist/observability/otlp.js +12 -12
  173. package/dist/observability/redactor.js +8 -8
  174. package/dist/openapi/schemas.js +3 -1
  175. package/dist/openapi/spec.js +2 -2
  176. package/dist/providers/fly.js +5 -5
  177. package/dist/providers/modal.js +5 -5
  178. package/dist/providers/registry.js +1 -1
  179. package/dist/providers/resolve-secrets.js +7 -7
  180. package/dist/providers/sprites.js +7 -7
  181. package/dist/providers/upstream-keys.js +12 -11
  182. package/dist/providers/vercel.js +5 -5
  183. package/dist/proxy/forward.js +6 -6
  184. package/dist/queue/index.js +6 -6
  185. package/dist/sessions/bus.js +10 -10
  186. package/dist/sessions/driver.js +42 -42
  187. package/dist/sessions/grader.js +5 -5
  188. package/dist/sessions/mcp-auth.js +1 -1
  189. package/dist/sessions/secrets.js +8 -8
  190. package/dist/sessions/sweeper.js +38 -38
  191. package/dist/sessions/threads.js +42 -42
  192. package/dist/shutdown.js +39 -39
  193. package/dist/sync/anthropic.js +11 -11
  194. package/dist/sync/container-file-sync.js +6 -6
  195. package/dist/sync/file-sync.js +17 -17
  196. package/package.json +1 -1
  197. /package/dist/{chunk-WPK4ZPMG.js → chunk-JRQB3SHR.js} +0 -0
@@ -2,10 +2,10 @@ import {
2
2
  reportUpstreamFailure,
3
3
  reportUpstreamSuccess,
4
4
  resolveAnthropicKey
5
- } from "./chunk-PIJKJNGB.js";
5
+ } from "./chunk-HZZ6ZLKP.js";
6
6
  import {
7
7
  resolveRemoteSessionId
8
- } from "./chunk-L2RX552S.js";
8
+ } from "./chunk-22OUZJAV.js";
9
9
  import {
10
10
  assertResourceTenant
11
11
  } from "./chunk-23UKWXJH.js";
@@ -20,45 +20,46 @@ import {
20
20
  listMemoryStores,
21
21
  searchMemories,
22
22
  updateMemory
23
- } from "./chunk-SUGSHXND.js";
23
+ } from "./chunk-IEZFRNLC.js";
24
24
  import {
25
25
  jsonOk,
26
+ paginatedOk,
26
27
  routeWrap
27
- } from "./chunk-RH4GKU52.js";
28
+ } from "./chunk-T3IGOI6Z.js";
28
29
  import {
29
30
  forwardToAnthropic
30
- } from "./chunk-JCW3ZRES.js";
31
+ } from "./chunk-A46RUKGA.js";
31
32
  import {
32
33
  runTurn,
33
34
  writePermissionResponse
34
- } from "./chunk-DAVYI5H4.js";
35
+ } from "./chunk-T7BHW3CP.js";
35
36
  import {
36
37
  enqueueTurn
37
- } from "./chunk-2PPB644A.js";
38
+ } from "./chunk-37C5BNVV.js";
38
39
  import {
39
40
  getProxiedTenantId,
40
41
  isProxied
41
- } from "./chunk-E7DD7F7J.js";
42
+ } from "./chunk-5U5LRAFJ.js";
42
43
  import {
43
44
  getActor
44
45
  } from "./chunk-LAWTTG2E.js";
45
46
  import {
46
47
  appendEvent
47
- } from "./chunk-MHBLVGRF.js";
48
+ } from "./chunk-5MERXOLJ.js";
48
49
  import {
49
50
  bumpSessionStats,
50
51
  getSession,
51
52
  getSessionRow,
52
53
  setOutcomeCriteria,
53
54
  updateSessionMutable
54
- } from "./chunk-3NK6YTA5.js";
55
+ } from "./chunk-KUWJJD6O.js";
55
56
  import {
56
57
  listEvents,
57
58
  rowToManagedEvent
58
- } from "./chunk-TH7WJLZC.js";
59
+ } from "./chunk-KGBKIJPF.js";
59
60
  import {
60
61
  getAgent
61
- } from "./chunk-ZTH5JRZG.js";
62
+ } from "./chunk-BCIFFAGW.js";
62
63
  import {
63
64
  init_clock,
64
65
  nowMs
@@ -66,7 +67,7 @@ import {
66
67
  import {
67
68
  getDb,
68
69
  init_client
69
- } from "./chunk-6POQAFEC.js";
70
+ } from "./chunk-W3JMIUHV.js";
70
71
  import {
71
72
  badRequest,
72
73
  notFound
@@ -634,12 +635,7 @@ function handleListEvents(request, sessionId) {
634
635
  const afterSeq = Number(url.searchParams.get("after_seq") ?? url.searchParams.get("page") ?? "0");
635
636
  const rows = listEvents(sessionId, { limit, order, afterSeq });
636
637
  const data = rows.map(rowToManagedEvent);
637
- return jsonOk({
638
- data,
639
- has_more: rows.length === limit,
640
- first_id: data.length > 0 ? data[0].id : null,
641
- last_id: data.length > 0 ? data[data.length - 1].id : null
642
- });
638
+ return paginatedOk(data, limit);
643
639
  });
644
640
  }
645
641
 
@@ -54,6 +54,7 @@ function runMigrations(db) {
54
54
  template_sandbox TEXT,
55
55
  checkpoint_id TEXT,
56
56
  created_at INTEGER NOT NULL,
57
+ updated_at INTEGER NOT NULL DEFAULT 0,
57
58
  archived_at INTEGER
58
59
  );
59
60
 
@@ -459,6 +460,16 @@ function runMigrations(db) {
459
460
  if (envCols3.some((c) => c.name === "template_sprite")) {
460
461
  db.exec(`ALTER TABLE environments RENAME COLUMN template_sprite TO template_sandbox`);
461
462
  }
463
+ {
464
+ const cols = db.prepare("PRAGMA table_info(agents)").all();
465
+ const names = new Set(cols.map((c) => c.name));
466
+ if (!names.has("description")) {
467
+ db.exec("ALTER TABLE agents ADD COLUMN description TEXT");
468
+ }
469
+ if (!names.has("metadata_json")) {
470
+ db.exec("ALTER TABLE agents ADD COLUMN metadata_json TEXT NOT NULL DEFAULT '{}'");
471
+ }
472
+ }
462
473
  const sessColsQuota = db.prepare(`PRAGMA table_info(sessions)`).all();
463
474
  if (!sessColsQuota.some((c) => c.name === "max_tokens")) {
464
475
  db.exec(`ALTER TABLE sessions ADD COLUMN max_tokens INTEGER DEFAULT NULL`);
@@ -466,6 +477,44 @@ function runMigrations(db) {
466
477
  if (!sessColsQuota.some((c) => c.name === "max_wall_duration_ms")) {
467
478
  db.exec(`ALTER TABLE sessions ADD COLUMN max_wall_duration_ms INTEGER DEFAULT NULL`);
468
479
  }
480
+ {
481
+ const cols = db.prepare("PRAGMA table_info(environments)").all();
482
+ if (!cols.some((c) => c.name === "updated_at")) {
483
+ db.exec("ALTER TABLE environments ADD COLUMN updated_at INTEGER");
484
+ db.exec("UPDATE environments SET updated_at = created_at WHERE updated_at IS NULL");
485
+ }
486
+ }
487
+ {
488
+ const cols = db.prepare("PRAGMA table_info(vaults)").all();
489
+ const names = new Set(cols.map((c) => c.name));
490
+ if (!names.has("metadata_json")) {
491
+ db.exec("ALTER TABLE vaults ADD COLUMN metadata_json TEXT NOT NULL DEFAULT '{}'");
492
+ }
493
+ if (!names.has("archived_at")) {
494
+ db.exec("ALTER TABLE vaults ADD COLUMN archived_at INTEGER");
495
+ }
496
+ const agentIdCol = cols.find((c) => c.name === "agent_id");
497
+ if (agentIdCol && agentIdCol.notnull === 1) {
498
+ db.exec(`
499
+ CREATE TABLE vaults_new (
500
+ id TEXT PRIMARY KEY,
501
+ agent_id TEXT,
502
+ name TEXT NOT NULL,
503
+ metadata_json TEXT NOT NULL DEFAULT '{}',
504
+ tenant_id TEXT,
505
+ created_at INTEGER NOT NULL,
506
+ updated_at INTEGER NOT NULL,
507
+ archived_at INTEGER
508
+ );
509
+ INSERT INTO vaults_new SELECT id, agent_id, name,
510
+ COALESCE(metadata_json, '{}'), tenant_id, created_at, updated_at,
511
+ archived_at FROM vaults;
512
+ DROP TABLE vaults;
513
+ ALTER TABLE vaults_new RENAME TO vaults;
514
+ `);
515
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_vaults_tenant ON vaults(tenant_id)`);
516
+ }
517
+ }
469
518
  }
470
519
  var init_migrations = __esm({
471
520
  "src/db/migrations.ts"() {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getConfig
3
- } from "./chunk-V7MTIMPB.js";
3
+ } from "./chunk-GQYSSSVA.js";
4
4
  import {
5
5
  serverBusy
6
6
  } from "./chunk-EZYKRG4W.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  buildOpenApiDocument
3
- } from "./chunk-D2TRWKVQ.js";
3
+ } from "./chunk-I2WVMCYN.js";
4
4
 
5
5
  // src/handlers/openapi.ts
6
6
  function originFromRequest(request) {
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  getModels
3
- } from "./chunk-C46UG6GQ.js";
3
+ } from "./chunk-CKFJN5XK.js";
4
4
  import {
5
5
  jsonOk,
6
6
  routeWrap
7
- } from "./chunk-RH4GKU52.js";
7
+ } from "./chunk-T3IGOI6Z.js";
8
8
 
9
9
  // src/handlers/models.ts
10
10
  function handleListModels(request) {
@@ -1,17 +1,18 @@
1
1
  import {
2
2
  loadVaultForCaller
3
- } from "./chunk-ZFJPOQSY.js";
3
+ } from "./chunk-4MKBT3KA.js";
4
4
  import {
5
5
  jsonOk,
6
+ paginatedOk,
6
7
  routeWrap
7
- } from "./chunk-RH4GKU52.js";
8
+ } from "./chunk-T3IGOI6Z.js";
8
9
  import {
9
10
  createCredential,
10
11
  deleteCredential,
11
12
  getCredential,
12
13
  listCredentials,
13
14
  updateCredential
14
- } from "./chunk-L5RW66H5.js";
15
+ } from "./chunk-HVLYE4S5.js";
15
16
  import {
16
17
  badRequest,
17
18
  conflict,
@@ -123,12 +124,7 @@ function handleListCredentials(request, vaultId) {
123
124
  const url = new URL(req.url);
124
125
  const requestedLimit = Number(url.searchParams.get("limit") || "100");
125
126
  const data = listCredentials(vaultId);
126
- return jsonOk({
127
- data,
128
- has_more: data.length === requestedLimit,
129
- first_id: data.length > 0 ? data[0].id : null,
130
- last_id: data.length > 0 ? data[data.length - 1].id : null
131
- });
127
+ return paginatedOk(data, requestedLimit);
132
128
  });
133
129
  }
134
130
  function handleGetCredential(request, vaultId, credentialId) {
@@ -13,7 +13,7 @@ import {
13
13
  import {
14
14
  getDb,
15
15
  init_client
16
- } from "./chunk-6POQAFEC.js";
16
+ } from "./chunk-W3JMIUHV.js";
17
17
 
18
18
  // src/db/upstream_keys.ts
19
19
  init_client();
@@ -8,14 +8,14 @@ import {
8
8
  import {
9
9
  jsonOk,
10
10
  routeWrap
11
- } from "./chunk-RH4GKU52.js";
11
+ } from "./chunk-T3IGOI6Z.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";
@@ -5,9 +5,11 @@ import {
5
5
  } from "./chunk-23UKWXJH.js";
6
6
  import {
7
7
  jsonOk,
8
+ paginatedOk,
8
9
  routeWrap
9
- } from "./chunk-RH4GKU52.js";
10
+ } from "./chunk-T3IGOI6Z.js";
10
11
  import {
12
+ archiveVault,
11
13
  createVault,
12
14
  deleteEntry,
13
15
  deleteVault,
@@ -15,15 +17,16 @@ import {
15
17
  getVault,
16
18
  listEntries,
17
19
  listVaults,
18
- setEntry
19
- } from "./chunk-ZVXIZ2JD.js";
20
+ setEntry,
21
+ updateVault
22
+ } from "./chunk-VP527YC5.js";
20
23
  import {
21
24
  getAgent
22
- } from "./chunk-ZTH5JRZG.js";
25
+ } from "./chunk-BCIFFAGW.js";
23
26
  import {
24
27
  getDb,
25
28
  init_client
26
- } from "./chunk-6POQAFEC.js";
29
+ } from "./chunk-W3JMIUHV.js";
27
30
  import {
28
31
  badRequest,
29
32
  conflict,
@@ -54,14 +57,17 @@ function maskValue(value) {
54
57
  return `${value.slice(0, 4)}****${value.slice(-2)}`;
55
58
  }
56
59
  var CreateVaultSchema = z.object({
57
- agent_id: z.string().min(1),
60
+ agent_id: z.string().min(1).optional(),
58
61
  name: z.string().min(1).optional(),
59
62
  /** Anthropic-compatible alias for `name`. */
60
63
  display_name: z.string().min(1).optional(),
64
+ metadata: z.record(z.string().max(512)).optional(),
61
65
  /** v0.5: required for global admin, ignored for tenant users. */
62
66
  tenant_id: z.string().optional()
63
67
  }).refine((data) => data.name || data.display_name, {
64
68
  message: "Either name or display_name is required"
69
+ }).refine((data) => !data.metadata || Object.keys(data.metadata).length <= 16, {
70
+ message: "metadata must have at most 16 key-value pairs"
65
71
  });
66
72
  var PutEntrySchema = z.object({
67
73
  value: z.string()
@@ -71,30 +77,37 @@ function handleCreateVault(request) {
71
77
  const body = await request.json();
72
78
  const parsed = CreateVaultSchema.safeParse(body);
73
79
  if (!parsed.success) throw badRequest(parsed.error.message);
74
- const agentTenantId = getAgentTenantId(parsed.data.agent_id);
75
- if (agentTenantId === void 0) {
76
- throw notFound(`agent not found: ${parsed.data.agent_id}`);
77
- }
78
- assertResourceTenant(auth, agentTenantId, `agent not found: ${parsed.data.agent_id}`);
79
- const agent = getAgent(parsed.data.agent_id);
80
- if (!agent) throw notFound(`agent not found: ${parsed.data.agent_id}`);
81
- const createTenantId = resolveCreateTenant(auth, parsed.data.tenant_id);
82
- if (createTenantId !== agentTenantId) {
83
- throw badRequest(
84
- `vault tenant_id must match agent tenant_id (${agentTenantId})`
85
- );
80
+ let createTenantId;
81
+ if (parsed.data.agent_id) {
82
+ const agentTenantId = getAgentTenantId(parsed.data.agent_id);
83
+ if (agentTenantId === void 0) {
84
+ throw notFound(`agent not found: ${parsed.data.agent_id}`);
85
+ }
86
+ assertResourceTenant(auth, agentTenantId, `agent not found: ${parsed.data.agent_id}`);
87
+ const agent = getAgent(parsed.data.agent_id);
88
+ if (!agent) throw notFound(`agent not found: ${parsed.data.agent_id}`);
89
+ createTenantId = resolveCreateTenant(auth, parsed.data.tenant_id);
90
+ if (createTenantId !== agentTenantId) {
91
+ throw badRequest(
92
+ `vault tenant_id must match agent tenant_id (${agentTenantId})`
93
+ );
94
+ }
95
+ const vaultName2 = parsed.data.name ?? parsed.data.display_name;
96
+ const existing = listVaults({ agent_id: parsed.data.agent_id, tenantFilter: tenantFilter(auth) });
97
+ if (existing.some((v) => v.name === vaultName2)) {
98
+ throw conflict(`Vault "${vaultName2}" already exists for this agent`);
99
+ }
100
+ } else {
101
+ createTenantId = resolveCreateTenant(auth, parsed.data.tenant_id);
86
102
  }
87
103
  const vaultName = parsed.data.name ?? parsed.data.display_name;
88
- const existing = listVaults({ agent_id: parsed.data.agent_id, tenantFilter: tenantFilter(auth) });
89
- if (existing.some((v) => v.name === vaultName)) {
90
- throw conflict(`Vault "${vaultName}" already exists for this agent`);
91
- }
92
104
  const vault = createVault({
93
- agent_id: parsed.data.agent_id,
105
+ agent_id: parsed.data.agent_id ?? null,
94
106
  name: vaultName,
107
+ metadata: parsed.data.metadata,
95
108
  tenant_id: createTenantId
96
109
  });
97
- return jsonOk({ ...vault, display_name: vault.name }, 201);
110
+ return jsonOk(vault, 201);
98
111
  });
99
112
  }
100
113
  function handleListVaults(request) {
@@ -103,12 +116,7 @@ function handleListVaults(request) {
103
116
  const agentId = url.searchParams.get("agent_id") ?? void 0;
104
117
  const requestedLimit = Number(url.searchParams.get("limit") || "100");
105
118
  const data = listVaults({ agent_id: agentId, tenantFilter: tenantFilter(auth) });
106
- return jsonOk({
107
- data,
108
- has_more: data.length === requestedLimit,
109
- first_id: data.length > 0 ? data[0].id : null,
110
- last_id: data.length > 0 ? data[data.length - 1].id : null
111
- });
119
+ return paginatedOk(data, requestedLimit);
112
120
  });
113
121
  }
114
122
  function handleGetVault(request, id) {
@@ -124,6 +132,35 @@ function handleDeleteVault(request, id) {
124
132
  return jsonOk({ id, type: "vault_deleted" });
125
133
  });
126
134
  }
135
+ var UpdateVaultSchema = z.object({
136
+ display_name: z.string().min(1).max(255).optional(),
137
+ metadata: z.record(z.string().max(512)).optional()
138
+ }).refine((data) => !data.metadata || Object.keys(data.metadata).length <= 16, {
139
+ message: "metadata must have at most 16 key-value pairs"
140
+ });
141
+ function handleUpdateVault(request, id) {
142
+ return routeWrap(request, async ({ auth }) => {
143
+ loadVaultForCaller(auth, id);
144
+ const body = await request.json();
145
+ const parsed = UpdateVaultSchema.safeParse(body);
146
+ if (!parsed.success) throw badRequest(parsed.error.message);
147
+ const vault = updateVault(id, {
148
+ display_name: parsed.data.display_name,
149
+ metadata: parsed.data.metadata
150
+ });
151
+ if (!vault) throw notFound(`vault not found: ${id}`);
152
+ return jsonOk(vault);
153
+ });
154
+ }
155
+ function handleArchiveVault(request, id) {
156
+ return routeWrap(request, async ({ auth }) => {
157
+ loadVaultForCaller(auth, id);
158
+ const ok = archiveVault(id);
159
+ if (!ok) throw notFound(`vault not found: ${id}`);
160
+ const vault = getVault(id);
161
+ return jsonOk(vault);
162
+ });
163
+ }
127
164
  function handleListEntries(request, vaultId) {
128
165
  return routeWrap(request, async ({ auth }) => {
129
166
  loadVaultForCaller(auth, vaultId);
@@ -165,6 +202,8 @@ export {
165
202
  handleListVaults,
166
203
  handleGetVault,
167
204
  handleDeleteVault,
205
+ handleUpdateVault,
206
+ handleArchiveVault,
168
207
  handleListEntries,
169
208
  handleGetEntry,
170
209
  handlePutEntry,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  routeWrap
3
- } from "./chunk-RH4GKU52.js";
3
+ } from "./chunk-T3IGOI6Z.js";
4
4
  import {
5
5
  ApiError
6
6
  } from "./chunk-EZYKRG4W.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  SUPPORTED_PROVIDERS
3
- } from "./chunk-PIJKJNGB.js";
3
+ } from "./chunk-HZZ6ZLKP.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-T3IGOI6Z.js";
25
25
  import {
26
26
  badRequest,
27
27
  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-WDACZSRU.js";
11
11
  import {
12
12
  prepareGeminiOnSandbox
13
13
  } from "./chunk-XG4UIGDH.js";
@@ -1,19 +1,19 @@
1
1
  import {
2
2
  getSession
3
- } from "./chunk-3NK6YTA5.js";
3
+ } from "./chunk-KUWJJD6O.js";
4
4
  import {
5
5
  appendEvent,
6
6
  appendEventsBatch,
7
7
  listEvents,
8
8
  rowToManagedEvent
9
- } from "./chunk-TH7WJLZC.js";
9
+ } from "./chunk-KGBKIJPF.js";
10
10
  import {
11
11
  getAgent
12
- } from "./chunk-ZTH5JRZG.js";
12
+ } from "./chunk-BCIFFAGW.js";
13
13
  import {
14
14
  getDb,
15
15
  init_client
16
- } from "./chunk-6POQAFEC.js";
16
+ } from "./chunk-W3JMIUHV.js";
17
17
 
18
18
  // src/sessions/bus.ts
19
19
  import { EventEmitter } from "events";
@@ -5,10 +5,10 @@ import {
5
5
  import {
6
6
  getDrizzle,
7
7
  init_drizzle
8
- } from "./chunk-R5T4LJSK.js";
8
+ } from "./chunk-PZNAQBHQ.js";
9
9
  import {
10
10
  schema_exports
11
- } from "./chunk-ZMJ4EP4C.js";
11
+ } from "./chunk-ILHIHMO3.js";
12
12
 
13
13
  // src/db/proxy.ts
14
14
  init_drizzle();
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  buildOpencodeArgs
3
- } from "./chunk-3IV56JJW.js";
3
+ } from "./chunk-P56WU3UT.js";
4
4
  import {
5
5
  buildOpencodeAuthEnv,
6
6
  validateOpencodeRuntime
7
- } from "./chunk-OGJUSGF7.js";
7
+ } from "./chunk-UMRDMOB6.js";
8
8
  import {
9
9
  buildOpencodeConfigEnv
10
- } from "./chunk-Z25I7DRV.js";
10
+ } from "./chunk-V5DH3OAC.js";
11
11
  import {
12
12
  prepareOpencodeOnSandbox
13
13
  } from "./chunk-P7P2NWZD.js";
@@ -10,7 +10,7 @@ function buildPiArgs(input) {
10
10
  args.push("--session", input.backendSessionId);
11
11
  }
12
12
  if (input.agent.model) {
13
- args.push("--model", input.agent.model);
13
+ args.push("--model", input.agent.model.id);
14
14
  }
15
15
  args.push(input.prompt);
16
16
  return args;
@@ -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-QJ6QQO6D.js";
18
18
  import {
19
+ decodeCursor,
19
20
  jsonOk,
21
+ paginatedOk,
20
22
  routeWrap
21
- } from "./chunk-RH4GKU52.js";
23
+ } from "./chunk-T3IGOI6Z.js";
22
24
  import {
23
25
  forwardToAnthropic
24
- } from "./chunk-JCW3ZRES.js";
26
+ } from "./chunk-A46RUKGA.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-ZY2U24QP.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) {