@agentstep/agent-sdk 0.4.29 → 0.4.31

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 (176) 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/auth.js +6 -6
  5. package/dist/backends/codex/index.js +7 -7
  6. package/dist/backends/factory/auth.js +6 -6
  7. package/dist/backends/factory/index.js +7 -7
  8. package/dist/backends/gemini/auth.js +6 -6
  9. package/dist/backends/gemini/index.js +7 -7
  10. package/dist/backends/opencode/auth.js +6 -6
  11. package/dist/backends/opencode/index.js +7 -7
  12. package/dist/backends/pi/auth.js +6 -6
  13. package/dist/backends/pi/index.js +7 -7
  14. package/dist/backends/registry.js +18 -18
  15. package/dist/{chunk-R5OZHLAD.js → chunk-2COVNKOK.js} +2 -2
  16. package/dist/{chunk-2NAUMCWE.js → chunk-33OBMYKV.js} +1 -1
  17. package/dist/{chunk-MJ5J57UJ.js → chunk-4LKSYF4M.js} +1 -1
  18. package/dist/{chunk-ESXH27JB.js → chunk-4MDF5N2L.js} +2 -2
  19. package/dist/{chunk-GQFC44YI.js → chunk-55SVTKOM.js} +8 -5
  20. package/dist/{chunk-YIVJ3JTW.js → chunk-5H2CQ6L4.js} +2 -2
  21. package/dist/{chunk-JK5TPJHH.js → chunk-6GP5IKXE.js} +1 -1
  22. package/dist/{chunk-5GZEX4HV.js → chunk-6POQAFEC.js} +1 -1
  23. package/dist/{chunk-EF5QCTEQ.js → chunk-6YZ5WTLB.js} +2 -2
  24. package/dist/{chunk-BFXQ3IOS.js → chunk-7RJNOZLB.js} +18 -15
  25. package/dist/{chunk-4DTL7OKD.js → chunk-A7CS7RTM.js} +5 -5
  26. package/dist/{chunk-DO4WVWW7.js → chunk-AJPZY6EJ.js} +1 -1
  27. package/dist/{chunk-JDELTTHV.js → chunk-AR2TM7CR.js} +1 -1
  28. package/dist/{chunk-YGAHGTVZ.js → chunk-BCUBVYE3.js} +3 -3
  29. package/dist/{chunk-LLYP77OL.js → chunk-BNXUV6NZ.js} +11 -5
  30. package/dist/{chunk-NX6SIEN6.js → chunk-BQRKJAOP.js} +2 -2
  31. package/dist/{chunk-4GC7D5GD.js → chunk-CGKRD37R.js} +2 -2
  32. package/dist/{chunk-ZMMDLKR3.js → chunk-CIUFOD65.js} +3 -3
  33. package/dist/{chunk-HMBJOI5F.js → chunk-DKBNLGZO.js} +23 -14
  34. package/dist/{chunk-ZP5VMV5O.js → chunk-FEXR57M4.js} +4 -4
  35. package/dist/{chunk-OONL25NZ.js → chunk-FOOPNRHA.js} +2 -2
  36. package/dist/{chunk-EGCAA6KI.js → chunk-G6JKWW2S.js} +2 -2
  37. package/dist/{chunk-UXMCHRGA.js → chunk-GNHRAWOX.js} +2 -2
  38. package/dist/{chunk-BZ6HFTHU.js → chunk-H7UKW666.js} +1 -1
  39. package/dist/{chunk-HLNTWWAZ.js → chunk-I2SLDKCN.js} +2 -2
  40. package/dist/{chunk-NWW4246M.js → chunk-IN5KO2L2.js} +1 -1
  41. package/dist/{chunk-VIGJQU6V.js → chunk-J37F7PXJ.js} +4 -4
  42. package/dist/{chunk-X2CAT5MN.js → chunk-JIURGVRG.js} +1 -1
  43. package/dist/{chunk-WFIMX3HG.js → chunk-JJGAQMPS.js} +1 -1
  44. package/dist/{chunk-B2JLKTBJ.js → chunk-JWSR5TZ3.js} +1 -1
  45. package/dist/{chunk-I5ZA45YL.js → chunk-KFORPY7J.js} +9 -5
  46. package/dist/{chunk-4RNCKCDV.js → chunk-KLFJTFDB.js} +1 -1
  47. package/dist/{chunk-MHQXDTJB.js → chunk-KLN6HPYM.js} +1 -1
  48. package/dist/{chunk-RK3QBYXO.js → chunk-KRLVSKID.js} +5 -5
  49. package/dist/{chunk-ZQGJKPPY.js → chunk-L5RW66H5.js} +31 -6
  50. package/dist/{chunk-NUINUAXO.js → chunk-LASUEMN6.js} +3 -3
  51. package/dist/{chunk-AMWWPUSK.js → chunk-LHQD4KLV.js} +1 -1
  52. package/dist/{chunk-UIVEK3MD.js → chunk-M7W3PCFS.js} +1 -1
  53. package/dist/{chunk-T45NOW43.js → chunk-MHL3EXDR.js} +1 -1
  54. package/dist/{chunk-BMPB7XJH.js → chunk-MVC2FD32.js} +4 -4
  55. package/dist/{chunk-O45IQUWS.js → chunk-NDVC4J3H.js} +3 -3
  56. package/dist/{chunk-Y2KDIPCT.js → chunk-NIW3B4V2.js} +5 -5
  57. package/dist/{chunk-OWP537VU.js → chunk-NJ4JTJJM.js} +1 -1
  58. package/dist/{chunk-ZNQD65DN.js → chunk-O3XR457F.js} +4 -4
  59. package/dist/{chunk-I44FSUBC.js → chunk-O5B7GRUK.js} +1 -1
  60. package/dist/{chunk-OC2RYYTW.js → chunk-OLF7H564.js} +11 -8
  61. package/dist/{chunk-OTLXV4RO.js → chunk-OZJG5G7V.js} +4 -4
  62. package/dist/{chunk-JEI7I3EH.js → chunk-P2IGNOJI.js} +3 -3
  63. package/dist/{chunk-LYTHR3HC.js → chunk-PTYMGYNJ.js} +1 -1
  64. package/dist/chunk-PVITAFPJ.js +212 -0
  65. package/dist/{chunk-YCXELHKG.js → chunk-Q3DOTREK.js} +1 -1
  66. package/dist/{chunk-NUO56TF7.js → chunk-QVFRPABA.js} +3 -3
  67. package/dist/{chunk-HGZ6R6ST.js → chunk-R3Q62FVO.js} +19 -6
  68. package/dist/{chunk-SXE7H3VK.js → chunk-R5T4LJSK.js} +2 -2
  69. package/dist/{chunk-DT57EZQB.js → chunk-RCF2SVUO.js} +15 -15
  70. package/dist/{chunk-EHCGLMPC.js → chunk-RKL2NK3V.js} +1 -1
  71. package/dist/{chunk-TY3HD5I5.js → chunk-S4AYCMMB.js} +1 -1
  72. package/dist/{chunk-5D5P37FY.js → chunk-TGEDOUUD.js} +1 -1
  73. package/dist/{chunk-W26HCKWX.js → chunk-TLEGXMX7.js} +3 -3
  74. package/dist/{chunk-RZKUB4JQ.js → chunk-TLH4JLC7.js} +2 -2
  75. package/dist/{chunk-OA3CLTYY.js → chunk-UBFEHVPY.js} +3 -3
  76. package/dist/{chunk-WHASPTF3.js → chunk-UCOSSYKZ.js} +12 -9
  77. package/dist/{chunk-AQXCXWAZ.js → chunk-ULS4X3UQ.js} +1 -1
  78. package/dist/{chunk-XZOBOKL6.js → chunk-UW4T4TG3.js} +3 -3
  79. package/dist/{chunk-ATTHVKNE.js → chunk-UZHSDRAK.js} +4 -4
  80. package/dist/{chunk-KZ4AECAK.js → chunk-UZQLLGX4.js} +43 -16
  81. package/dist/{chunk-JURAGCGR.js → chunk-V5XH43NK.js} +8 -8
  82. package/dist/{chunk-NIOWKTIF.js → chunk-VND46TDY.js} +2 -2
  83. package/dist/{chunk-XGUSWFDD.js → chunk-W63RBT7H.js} +9 -9
  84. package/dist/{chunk-2BDD6OHG.js → chunk-WCDWL6ED.js} +14 -0
  85. package/dist/{chunk-NXRJ7Z4G.js → chunk-WNHJTUPW.js} +2 -2
  86. package/dist/{chunk-FJAWIVSD.js → chunk-WORPHTCS.js} +4 -4
  87. package/dist/{chunk-O3Z7JWR7.js → chunk-WU52LOGJ.js} +7 -4
  88. package/dist/{chunk-ADK2TYO4.js → chunk-XTZWBXAO.js} +2 -2
  89. package/dist/{chunk-4WMYJM36.js → chunk-XVK7YFZP.js} +1 -1
  90. package/dist/{chunk-S3SKODVV.js → chunk-Y2VQ65PM.js} +4 -4
  91. package/dist/{chunk-KOGG7CSN.js → chunk-YS5UPMTH.js} +6 -6
  92. package/dist/{chunk-LMHXLYUV.js → chunk-ZG7FD2KD.js} +2 -2
  93. package/dist/{chunk-M4CTE7EH.js → chunk-ZKHUJB7A.js} +2 -2
  94. package/dist/{chunk-LHHBOQUR.js → chunk-ZMJ4EP4C.js} +2 -0
  95. package/dist/{chunk-DNGLD7VN.js → chunk-ZOWT6X6Y.js} +1 -1
  96. package/dist/config/index.js +5 -5
  97. package/dist/containers/client.js +6 -6
  98. package/dist/containers/exec.js +6 -6
  99. package/dist/containers/lifecycle.js +30 -30
  100. package/dist/containers/setup.js +8 -8
  101. package/dist/db/agents.js +6 -6
  102. package/dist/db/api_keys.js +5 -5
  103. package/dist/db/audit.js +3 -3
  104. package/dist/db/batch.js +10 -10
  105. package/dist/db/client.js +2 -2
  106. package/dist/db/credentials.js +3 -3
  107. package/dist/db/drizzle.js +4 -4
  108. package/dist/db/environments.js +6 -6
  109. package/dist/db/events.js +5 -5
  110. package/dist/db/files.js +5 -5
  111. package/dist/db/memory.js +5 -5
  112. package/dist/db/migrations.js +1 -1
  113. package/dist/db/proxy.js +5 -5
  114. package/dist/db/schema.js +1 -1
  115. package/dist/db/session-resources.js +5 -5
  116. package/dist/db/sessions.js +7 -7
  117. package/dist/db/sync.js +5 -5
  118. package/dist/db/tenants.js +3 -3
  119. package/dist/db/traces.js +5 -5
  120. package/dist/db/upstream_keys.js +3 -3
  121. package/dist/db/vaults.js +6 -6
  122. package/dist/handlers/agents.js +45 -45
  123. package/dist/handlers/api_keys.js +46 -46
  124. package/dist/handlers/audit.js +46 -46
  125. package/dist/handlers/batch.js +46 -46
  126. package/dist/handlers/credentials.js +46 -46
  127. package/dist/handlers/environments.js +46 -46
  128. package/dist/handlers/events.js +49 -49
  129. package/dist/handlers/files.js +46 -46
  130. package/dist/handlers/index.js +81 -81
  131. package/dist/handlers/license.js +45 -45
  132. package/dist/handlers/memory.js +46 -46
  133. package/dist/handlers/metrics.js +45 -45
  134. package/dist/handlers/models.js +46 -46
  135. package/dist/handlers/providers.js +45 -45
  136. package/dist/handlers/resources.js +45 -45
  137. package/dist/handlers/sessions.js +48 -48
  138. package/dist/handlers/settings.js +45 -45
  139. package/dist/handlers/skills-write.js +45 -45
  140. package/dist/handlers/skills.js +46 -46
  141. package/dist/handlers/stream.js +45 -45
  142. package/dist/handlers/tenants.js +46 -46
  143. package/dist/handlers/threads.js +45 -45
  144. package/dist/handlers/traces.js +46 -46
  145. package/dist/handlers/upstream_keys.js +48 -48
  146. package/dist/handlers/vaults.js +45 -45
  147. package/dist/handlers/whoami.js +45 -45
  148. package/dist/http.js +44 -44
  149. package/dist/index.js +48 -48
  150. package/dist/init.js +41 -41
  151. package/dist/lib/model-registry.js +6 -6
  152. package/dist/lib/skills-cache.js +6 -6
  153. package/dist/observability/otlp.js +12 -12
  154. package/dist/observability/redactor.js +8 -8
  155. package/dist/providers/fly.js +5 -5
  156. package/dist/providers/modal.js +5 -5
  157. package/dist/providers/registry.js +1 -1
  158. package/dist/providers/resolve-secrets.js +7 -7
  159. package/dist/providers/sprites.js +7 -7
  160. package/dist/providers/upstream-keys.js +11 -11
  161. package/dist/providers/vercel.js +5 -5
  162. package/dist/proxy/forward.js +6 -6
  163. package/dist/queue/index.js +6 -6
  164. package/dist/sessions/bus.js +10 -10
  165. package/dist/sessions/driver.js +34 -34
  166. package/dist/sessions/grader.js +5 -5
  167. package/dist/sessions/secrets.js +8 -8
  168. package/dist/sessions/sweeper.js +31 -31
  169. package/dist/sessions/threads.js +34 -34
  170. package/dist/shutdown.js +32 -32
  171. package/dist/sync/anthropic.js +10 -10
  172. package/dist/sync/container-file-sync.js +6 -6
  173. package/dist/sync/file-sync.js +17 -17
  174. package/package.json +1 -1
  175. package/dist/chunk-AE5JQORN.js +0 -131
  176. /package/dist/{chunk-QUJNG4RA.js → chunk-C4II4GGZ.js} +0 -0
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  jsonOk,
3
3
  routeWrap
4
- } from "./chunk-ESXH27JB.js";
4
+ } from "./chunk-4MDF5N2L.js";
5
5
  import {
6
6
  resolveContainerProvider
7
- } from "./chunk-QUJNG4RA.js";
7
+ } from "./chunk-C4II4GGZ.js";
8
8
  import {
9
9
  getConfig
10
- } from "./chunk-EF5QCTEQ.js";
10
+ } from "./chunk-6YZ5WTLB.js";
11
11
 
12
12
  // src/handlers/providers.ts
13
13
  var LOCAL_PROVIDERS = ["docker", "apple-container", "podman"];
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  buildClaudeArgs,
3
3
  buildClaudeAuthEnv
4
- } from "./chunk-WFIMX3HG.js";
4
+ } from "./chunk-JJGAQMPS.js";
5
5
  import {
6
6
  PERMISSION_BRIDGE_DIR,
7
7
  PERMISSION_HOOK_SCRIPT_PATH,
@@ -25,7 +25,7 @@ import {
25
25
  } from "./chunk-IU457W7Q.js";
26
26
  import {
27
27
  getConfig
28
- } from "./chunk-EF5QCTEQ.js";
28
+ } from "./chunk-6YZ5WTLB.js";
29
29
 
30
30
  // src/backends/claude/index.ts
31
31
  function buildTurn(input) {
@@ -11,18 +11,18 @@ import {
11
11
  getFileRecord,
12
12
  listFiles,
13
13
  updateFileStoragePath
14
- } from "./chunk-NXRJ7Z4G.js";
14
+ } from "./chunk-WNHJTUPW.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-ESXH27JB.js";
21
+ } from "./chunk-4MDF5N2L.js";
22
22
  import {
23
23
  getDb,
24
24
  init_client
25
- } from "./chunk-5GZEX4HV.js";
25
+ } from "./chunk-6POQAFEC.js";
26
26
  import {
27
27
  badRequest,
28
28
  notFound
@@ -5,23 +5,23 @@ import {
5
5
  } from "./chunk-23UKWXJH.js";
6
6
  import {
7
7
  kickoffEnvironmentSetup
8
- } from "./chunk-HLNTWWAZ.js";
8
+ } from "./chunk-I2SLDKCN.js";
9
9
  import {
10
10
  jsonOk,
11
11
  routeWrap
12
- } from "./chunk-ESXH27JB.js";
12
+ } from "./chunk-4MDF5N2L.js";
13
13
  import {
14
14
  forwardToAnthropic
15
- } from "./chunk-T45NOW43.js";
15
+ } from "./chunk-MHL3EXDR.js";
16
16
  import {
17
17
  getProxiedTenantId,
18
18
  isProxied,
19
19
  markProxied,
20
20
  unmarkProxied
21
- } from "./chunk-NIOWKTIF.js";
21
+ } from "./chunk-VND46TDY.js";
22
22
  import {
23
23
  resolveContainerProvider
24
- } from "./chunk-QUJNG4RA.js";
24
+ } from "./chunk-C4II4GGZ.js";
25
25
  import {
26
26
  archiveEnvironment,
27
27
  createEnvironment,
@@ -30,11 +30,11 @@ import {
30
30
  hasSessionsAttached,
31
31
  listEnvironments,
32
32
  updateEnvironment
33
- } from "./chunk-NUO56TF7.js";
33
+ } from "./chunk-QVFRPABA.js";
34
34
  import {
35
35
  getDb,
36
36
  init_client
37
- } from "./chunk-5GZEX4HV.js";
37
+ } from "./chunk-6POQAFEC.js";
38
38
  import {
39
39
  badRequest,
40
40
  conflict,
@@ -155,8 +155,9 @@ function handleListEnvironments(request) {
155
155
  const order = url.searchParams.get("order");
156
156
  const includeArchived = url.searchParams.get("include_archived") === "true";
157
157
  const cursor = url.searchParams.get("page") ?? void 0;
158
+ const requestedLimit = limit ? Number(limit) : 20;
158
159
  const data = listEnvironments({
159
- limit: limit ? Number(limit) : void 0,
160
+ limit: requestedLimit,
160
161
  order: order ?? void 0,
161
162
  includeArchived,
162
163
  cursor,
@@ -164,7 +165,9 @@ function handleListEnvironments(request) {
164
165
  });
165
166
  return jsonOk({
166
167
  data,
167
- next_page: data.length > 0 ? data[data.length - 1].id : null
168
+ has_more: data.length === requestedLimit,
169
+ first_id: data.length > 0 ? data[0].id : null,
170
+ last_id: data.length > 0 ? data[data.length - 1].id : null
168
171
  });
169
172
  });
170
173
  }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getConfig
3
- } from "./chunk-EF5QCTEQ.js";
3
+ } from "./chunk-6YZ5WTLB.js";
4
4
  import {
5
5
  serverBusy
6
6
  } from "./chunk-EZYKRG4W.js";
@@ -3,21 +3,21 @@ import {
3
3
  } from "./chunk-23UKWXJH.js";
4
4
  import {
5
5
  recordAudit
6
- } from "./chunk-MHQXDTJB.js";
6
+ } from "./chunk-KLN6HPYM.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-ESXH27JB.js";
13
+ } from "./chunk-4MDF5N2L.js";
14
14
  import {
15
15
  archiveTenant,
16
16
  createTenant,
17
17
  getTenant,
18
18
  listTenants,
19
19
  renameTenant
20
- } from "./chunk-JDELTTHV.js";
20
+ } from "./chunk-AR2TM7CR.js";
21
21
  import {
22
22
  badRequest,
23
23
  notFound
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  disableUpstreamKey,
3
3
  selectNextUpstreamKey
4
- } from "./chunk-BZ6HFTHU.js";
4
+ } from "./chunk-H7UKW666.js";
5
5
  import {
6
6
  listEntries
7
- } from "./chunk-VIGJQU6V.js";
7
+ } from "./chunk-J37F7PXJ.js";
8
8
  import {
9
9
  getSession
10
- } from "./chunk-I5ZA45YL.js";
10
+ } from "./chunk-KFORPY7J.js";
11
11
  import {
12
12
  getConfig
13
- } from "./chunk-EF5QCTEQ.js";
13
+ } from "./chunk-6YZ5WTLB.js";
14
14
 
15
15
  // src/providers/upstream-keys.ts
16
16
  var CONSECUTIVE_FAIL_THRESHOLD = 3;
@@ -21,24 +21,24 @@ import {
21
21
  } from "./chunk-72BKGVBE.js";
22
22
  import {
23
23
  loadSessionSecrets
24
- } from "./chunk-M4CTE7EH.js";
24
+ } from "./chunk-ZKHUJB7A.js";
25
25
  import {
26
26
  isProxied
27
- } from "./chunk-NIOWKTIF.js";
27
+ } from "./chunk-VND46TDY.js";
28
28
  import {
29
29
  acquireForFirstTurn,
30
30
  installSkills,
31
31
  provisionResources,
32
32
  wrapProviderWithSecrets
33
- } from "./chunk-XGUSWFDD.js";
33
+ } from "./chunk-W63RBT7H.js";
34
34
  import {
35
35
  BLOCKED_ENV_KEYS,
36
36
  resolveVaultSecrets
37
- } from "./chunk-DO4WVWW7.js";
37
+ } from "./chunk-AJPZY6EJ.js";
38
38
  import {
39
39
  appendEvent,
40
40
  appendEventsBatch
41
- } from "./chunk-BMPB7XJH.js";
41
+ } from "./chunk-MVC2FD32.js";
42
42
  import {
43
43
  bumpSessionStats,
44
44
  getOutcomeCriteria,
@@ -49,26 +49,26 @@ import {
49
49
  setOutcomeCriteria,
50
50
  updateSessionMutable,
51
51
  updateSessionStatus
52
- } from "./chunk-I5ZA45YL.js";
52
+ } from "./chunk-KFORPY7J.js";
53
53
  import {
54
54
  listEvents,
55
55
  markUserEventProcessed
56
- } from "./chunk-O45IQUWS.js";
56
+ } from "./chunk-NDVC4J3H.js";
57
57
  import {
58
58
  getBySession
59
59
  } from "./chunk-EFOIR7R3.js";
60
60
  import {
61
61
  resolveContainerProvider
62
- } from "./chunk-QUJNG4RA.js";
62
+ } from "./chunk-C4II4GGZ.js";
63
63
  import {
64
64
  getEnvironment
65
- } from "./chunk-NUO56TF7.js";
65
+ } from "./chunk-QVFRPABA.js";
66
66
  import {
67
67
  getAgent
68
- } from "./chunk-JEI7I3EH.js";
68
+ } from "./chunk-P2IGNOJI.js";
69
69
  import {
70
70
  resolveBackend
71
- } from "./chunk-KOGG7CSN.js";
71
+ } from "./chunk-YS5UPMTH.js";
72
72
  import {
73
73
  PERMISSION_BRIDGE_PENDING_PATH,
74
74
  PERMISSION_BRIDGE_REQUEST_PATH,
@@ -84,7 +84,7 @@ import {
84
84
  } from "./chunk-XBHDQK4Z.js";
85
85
  import {
86
86
  getConfig
87
- } from "./chunk-EF5QCTEQ.js";
87
+ } from "./chunk-6YZ5WTLB.js";
88
88
  import {
89
89
  init_clock,
90
90
  nowMs
@@ -101,11 +101,8 @@ import {
101
101
  init_errors();
102
102
  init_clock();
103
103
  function formatStopReason(reason, eventIds) {
104
- if (reason === "custom_tool_call" && eventIds?.length) {
105
- return { type: "requires_action", event_ids: eventIds };
106
- }
107
104
  if (reason === "custom_tool_call") {
108
- return { type: "requires_action" };
105
+ return { type: "requires_action", event_ids: eventIds ?? [] };
109
106
  }
110
107
  return { type: reason };
111
108
  }
@@ -183,6 +180,36 @@ async function runTurn(sessionId, inputs, _depth = 0, parentTrace) {
183
180
  return;
184
181
  }
185
182
  }
183
+ if (budgetRow != null) {
184
+ const totalTokens = (budgetRow.usage_input_tokens ?? 0) + (budgetRow.usage_output_tokens ?? 0);
185
+ if (budgetRow.max_tokens != null && totalTokens >= budgetRow.max_tokens) {
186
+ emit("session.error", {
187
+ error: {
188
+ type: "quota_exceeded",
189
+ scope: "session",
190
+ message: `tokens used ${totalTokens} >= session token limit ${budgetRow.max_tokens}`
191
+ }
192
+ });
193
+ emit("session.status_idle", { stop_reason: formatStopReason("error") });
194
+ updateSessionStatus(sessionId, "idle", "error");
195
+ return;
196
+ }
197
+ }
198
+ if (budgetRow != null && budgetRow.max_wall_duration_ms != null) {
199
+ const ageMs = nowMs() - budgetRow.created_at;
200
+ if (ageMs >= budgetRow.max_wall_duration_ms) {
201
+ emit("session.error", {
202
+ error: {
203
+ type: "quota_exceeded",
204
+ scope: "session",
205
+ message: `session age ${ageMs}ms >= wall limit ${budgetRow.max_wall_duration_ms}ms`
206
+ }
207
+ });
208
+ emit("session.status_idle", { stop_reason: formatStopReason("error") });
209
+ updateSessionStatus(sessionId, "idle", "error");
210
+ return;
211
+ }
212
+ }
186
213
  for (const p of inputs) markUserEventProcessed(p.eventId, nowMs());
187
214
  const row = getSessionRow(sessionId);
188
215
  if (row && row.title == null) {
@@ -1,32 +1,32 @@
1
1
  import {
2
2
  resolveRemoteSessionId
3
- } from "./chunk-YGAHGTVZ.js";
3
+ } from "./chunk-BCUBVYE3.js";
4
4
  import {
5
5
  assertResourceTenant
6
6
  } from "./chunk-23UKWXJH.js";
7
7
  import {
8
8
  authenticateAndIntercept
9
- } from "./chunk-ZMMDLKR3.js";
9
+ } from "./chunk-CIUFOD65.js";
10
10
  import {
11
11
  forwardToAnthropic
12
- } from "./chunk-T45NOW43.js";
12
+ } from "./chunk-MHL3EXDR.js";
13
13
  import {
14
14
  ensureInitialized
15
- } from "./chunk-DT57EZQB.js";
15
+ } from "./chunk-RCF2SVUO.js";
16
16
  import {
17
17
  getProxiedTenantId,
18
18
  isProxied
19
- } from "./chunk-NIOWKTIF.js";
19
+ } from "./chunk-VND46TDY.js";
20
20
  import {
21
21
  subscribe
22
- } from "./chunk-BMPB7XJH.js";
22
+ } from "./chunk-MVC2FD32.js";
23
23
  import {
24
24
  getSession
25
- } from "./chunk-I5ZA45YL.js";
25
+ } from "./chunk-KFORPY7J.js";
26
26
  import {
27
27
  getDb,
28
28
  init_client
29
- } from "./chunk-5GZEX4HV.js";
29
+ } from "./chunk-6POQAFEC.js";
30
30
  import {
31
31
  notFound,
32
32
  toResponse
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  getDrizzle,
3
3
  init_drizzle
4
- } from "./chunk-SXE7H3VK.js";
4
+ } from "./chunk-R5T4LJSK.js";
5
5
  import {
6
6
  schema_exports
7
- } from "./chunk-LHHBOQUR.js";
7
+ } from "./chunk-ZMJ4EP4C.js";
8
8
  import {
9
9
  init_clock,
10
10
  nowMs
@@ -1,21 +1,21 @@
1
1
  import {
2
2
  resolveVaultSecrets
3
- } from "./chunk-DO4WVWW7.js";
3
+ } from "./chunk-AJPZY6EJ.js";
4
4
  import {
5
5
  dockerProvider
6
6
  } from "./chunk-RMZRSYIJ.js";
7
7
  import {
8
8
  appendEvent
9
- } from "./chunk-BMPB7XJH.js";
9
+ } from "./chunk-MVC2FD32.js";
10
10
  import {
11
11
  getSession,
12
12
  getSessionRow,
13
13
  setSessionSandbox
14
- } from "./chunk-I5ZA45YL.js";
14
+ } from "./chunk-KFORPY7J.js";
15
15
  import {
16
16
  deleteSprite,
17
17
  listSprites
18
- } from "./chunk-YCXELHKG.js";
18
+ } from "./chunk-Q3DOTREK.js";
19
19
  import {
20
20
  allSessionSandboxes,
21
21
  countInEnv,
@@ -24,20 +24,20 @@ import {
24
24
  } from "./chunk-EFOIR7R3.js";
25
25
  import {
26
26
  resolveContainerProvider
27
- } from "./chunk-QUJNG4RA.js";
27
+ } from "./chunk-C4II4GGZ.js";
28
28
  import {
29
29
  getEnvironment,
30
30
  getEnvironmentRow
31
- } from "./chunk-NUO56TF7.js";
31
+ } from "./chunk-QVFRPABA.js";
32
32
  import {
33
33
  getAgent
34
- } from "./chunk-JEI7I3EH.js";
34
+ } from "./chunk-P2IGNOJI.js";
35
35
  import {
36
36
  resolveBackend
37
- } from "./chunk-KOGG7CSN.js";
37
+ } from "./chunk-YS5UPMTH.js";
38
38
  import {
39
39
  getConfig
40
- } from "./chunk-EF5QCTEQ.js";
40
+ } from "./chunk-6YZ5WTLB.js";
41
41
  import {
42
42
  init_clock,
43
43
  nowMs
@@ -444,6 +444,13 @@ function runMigrations(db) {
444
444
  UNIQUE(vault_id, display_name)
445
445
  )
446
446
  `);
447
+ const credCols = db.prepare(`PRAGMA table_info(vault_credentials)`).all();
448
+ if (!credCols.some((c) => c.name === "expires_at")) {
449
+ db.exec(`ALTER TABLE vault_credentials ADD COLUMN expires_at TEXT`);
450
+ }
451
+ if (!credCols.some((c) => c.name === "refresh_config_encrypted")) {
452
+ db.exec(`ALTER TABLE vault_credentials ADD COLUMN refresh_config_encrypted TEXT`);
453
+ }
447
454
  const sessCols3 = db.prepare(`PRAGMA table_info(sessions)`).all();
448
455
  if (sessCols3.some((c) => c.name === "sprite_name")) {
449
456
  db.exec(`ALTER TABLE sessions RENAME COLUMN sprite_name TO sandbox_name`);
@@ -452,6 +459,13 @@ function runMigrations(db) {
452
459
  if (envCols3.some((c) => c.name === "template_sprite")) {
453
460
  db.exec(`ALTER TABLE environments RENAME COLUMN template_sprite TO template_sandbox`);
454
461
  }
462
+ const sessColsQuota = db.prepare(`PRAGMA table_info(sessions)`).all();
463
+ if (!sessColsQuota.some((c) => c.name === "max_tokens")) {
464
+ db.exec(`ALTER TABLE sessions ADD COLUMN max_tokens INTEGER DEFAULT NULL`);
465
+ }
466
+ if (!sessColsQuota.some((c) => c.name === "max_wall_duration_ms")) {
467
+ db.exec(`ALTER TABLE sessions ADD COLUMN max_wall_duration_ms INTEGER DEFAULT NULL`);
468
+ }
455
469
  }
456
470
  var init_migrations = __esm({
457
471
  "src/db/migrations.ts"() {
@@ -5,10 +5,10 @@ import {
5
5
  import {
6
6
  getDrizzle,
7
7
  init_drizzle
8
- } from "./chunk-SXE7H3VK.js";
8
+ } from "./chunk-R5T4LJSK.js";
9
9
  import {
10
10
  schema_exports
11
- } from "./chunk-LHHBOQUR.js";
11
+ } from "./chunk-ZMJ4EP4C.js";
12
12
  import {
13
13
  init_clock,
14
14
  nowMs,
@@ -6,20 +6,20 @@ import {
6
6
  reconcileDockerOrphanSandboxes,
7
7
  reconcileOrphanSandboxes,
8
8
  releaseSession
9
- } from "./chunk-XGUSWFDD.js";
9
+ } from "./chunk-W63RBT7H.js";
10
10
  import {
11
11
  appendEvent,
12
12
  dropEmitter
13
- } from "./chunk-BMPB7XJH.js";
13
+ } from "./chunk-MVC2FD32.js";
14
14
  import {
15
15
  archiveSession,
16
16
  getSessionRow,
17
17
  listIdleSessions,
18
18
  updateSessionStatus
19
- } from "./chunk-I5ZA45YL.js";
19
+ } from "./chunk-KFORPY7J.js";
20
20
  import {
21
21
  getConfig
22
- } from "./chunk-EF5QCTEQ.js";
22
+ } from "./chunk-6YZ5WTLB.js";
23
23
  import {
24
24
  init_clock,
25
25
  nowMs
@@ -4,11 +4,11 @@ import {
4
4
  } from "./chunk-23UKWXJH.js";
5
5
  import {
6
6
  listAudit
7
- } from "./chunk-MHQXDTJB.js";
7
+ } from "./chunk-KLN6HPYM.js";
8
8
  import {
9
9
  jsonOk,
10
10
  routeWrap
11
- } from "./chunk-ESXH27JB.js";
11
+ } from "./chunk-4MDF5N2L.js";
12
12
  import {
13
13
  badRequest
14
14
  } from "./chunk-EZYKRG4W.js";
@@ -44,8 +44,9 @@ function handleListAudit(request) {
44
44
  }
45
45
  outcome = outcomeRaw;
46
46
  }
47
+ const requestedLimit = limit ? Number(limit) : 100;
47
48
  const data = listAudit({
48
- limit: limit ? Number(limit) : void 0,
49
+ limit: requestedLimit,
49
50
  cursor,
50
51
  action,
51
52
  actor_key_id: actorKeyId,
@@ -58,7 +59,9 @@ function handleListAudit(request) {
58
59
  });
59
60
  return jsonOk({
60
61
  data,
61
- next_page: data.length > 0 ? data[data.length - 1].id : null
62
+ has_more: data.length === requestedLimit,
63
+ first_id: data.length > 0 ? data[0].id : null,
64
+ last_id: data.length > 0 ? data[data.length - 1].id : null
62
65
  });
63
66
  });
64
67
  }
@@ -5,10 +5,10 @@ import {
5
5
  import {
6
6
  getDrizzle,
7
7
  init_drizzle
8
- } from "./chunk-SXE7H3VK.js";
8
+ } from "./chunk-R5T4LJSK.js";
9
9
  import {
10
10
  schema_exports
11
- } from "./chunk-LHHBOQUR.js";
11
+ } from "./chunk-ZMJ4EP4C.js";
12
12
  import {
13
13
  init_clock,
14
14
  nowMs
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  getConfig,
6
6
  readSetting
7
- } from "./chunk-EF5QCTEQ.js";
7
+ } from "./chunk-6YZ5WTLB.js";
8
8
  import {
9
9
  __commonJS
10
10
  } from "./chunk-2ESYSVXG.js";
@@ -1,20 +1,20 @@
1
1
  import {
2
2
  createSession
3
- } from "./chunk-I5ZA45YL.js";
3
+ } from "./chunk-KFORPY7J.js";
4
4
  import {
5
5
  createEnvironment,
6
6
  deleteEnvironment,
7
7
  getEnvironment
8
- } from "./chunk-NUO56TF7.js";
8
+ } from "./chunk-QVFRPABA.js";
9
9
  import {
10
10
  archiveAgent,
11
11
  createAgent,
12
12
  getAgent
13
- } from "./chunk-JEI7I3EH.js";
13
+ } from "./chunk-P2IGNOJI.js";
14
14
  import {
15
15
  getDrizzle,
16
16
  init_drizzle
17
- } from "./chunk-SXE7H3VK.js";
17
+ } from "./chunk-R5T4LJSK.js";
18
18
 
19
19
  // src/db/batch.ts
20
20
  init_drizzle();
@@ -1,21 +1,21 @@
1
1
  import {
2
2
  piBackend
3
- } from "./chunk-I44FSUBC.js";
3
+ } from "./chunk-O5B7GRUK.js";
4
4
  import {
5
5
  opencodeBackend
6
- } from "./chunk-DNGLD7VN.js";
6
+ } from "./chunk-ZOWT6X6Y.js";
7
7
  import {
8
8
  geminiBackend
9
- } from "./chunk-EHCGLMPC.js";
9
+ } from "./chunk-RKL2NK3V.js";
10
10
  import {
11
11
  codexBackend
12
- } from "./chunk-X2CAT5MN.js";
12
+ } from "./chunk-JIURGVRG.js";
13
13
  import {
14
14
  factoryBackend
15
- } from "./chunk-5D5P37FY.js";
15
+ } from "./chunk-TGEDOUUD.js";
16
16
  import {
17
17
  claudeBackend
18
- } from "./chunk-RZKUB4JQ.js";
18
+ } from "./chunk-TLH4JLC7.js";
19
19
 
20
20
  // src/backends/registry.ts
21
21
  var BACKENDS = {
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  jsonOk,
3
3
  routeWrap
4
- } from "./chunk-ESXH27JB.js";
4
+ } from "./chunk-4MDF5N2L.js";
5
5
  import {
6
6
  readSetting,
7
7
  writeSetting
8
- } from "./chunk-EF5QCTEQ.js";
8
+ } from "./chunk-6YZ5WTLB.js";
9
9
  import {
10
10
  badRequest
11
11
  } from "./chunk-EZYKRG4W.js";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  listCredentialsWithTokens
3
- } from "./chunk-ZQGJKPPY.js";
3
+ } from "./chunk-L5RW66H5.js";
4
4
  import {
5
5
  listEntries
6
- } from "./chunk-VIGJQU6V.js";
6
+ } from "./chunk-J37F7PXJ.js";
7
7
 
8
8
  // src/sessions/secrets.ts
9
9
  function loadSessionSecrets(vaultIds) {
@@ -126,6 +126,8 @@ var init_schema = __esm({
126
126
  parked_checkpoint_id: text("parked_checkpoint_id"),
127
127
  provider_name: text("provider_name").notNull().default("sprites"),
128
128
  max_budget_usd: real("max_budget_usd"),
129
+ max_tokens: integer("max_tokens"),
130
+ max_wall_duration_ms: integer("max_wall_duration_ms"),
129
131
  outcome_criteria_json: text("outcome_criteria_json"),
130
132
  resources_json: text("resources_json"),
131
133
  vault_ids_json: text("vault_ids_json"),
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  buildOpencodeAuthEnv,
6
6
  validateOpencodeRuntime
7
- } from "./chunk-B2JLKTBJ.js";
7
+ } from "./chunk-JWSR5TZ3.js";
8
8
  import {
9
9
  buildOpencodeConfigEnv
10
10
  } from "./chunk-Z25I7DRV.js";
@@ -5,12 +5,12 @@ import {
5
5
  readSetting,
6
6
  writeSetting,
7
7
  writeTokenSetting
8
- } from "../chunk-EF5QCTEQ.js";
9
- import "../chunk-SXE7H3VK.js";
10
- import "../chunk-LHHBOQUR.js";
8
+ } from "../chunk-6YZ5WTLB.js";
9
+ import "../chunk-R5T4LJSK.js";
10
+ import "../chunk-ZMJ4EP4C.js";
11
11
  import "../chunk-HFDLUBWN.js";
12
- import "../chunk-5GZEX4HV.js";
13
- import "../chunk-2BDD6OHG.js";
12
+ import "../chunk-6POQAFEC.js";
13
+ import "../chunk-WCDWL6ED.js";
14
14
  import "../chunk-2ESYSVXG.js";
15
15
  export {
16
16
  getConfig,