@agentstep/agent-sdk 0.5.28 → 0.5.33

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 (205) hide show
  1. package/dist/auth/middleware.js +8 -8
  2. package/dist/backends/claude/args.js +6 -6
  3. package/dist/backends/claude/index.js +11 -11
  4. package/dist/backends/codex/auth.js +6 -6
  5. package/dist/backends/codex/index.js +10 -10
  6. package/dist/backends/factory/auth.js +6 -6
  7. package/dist/backends/factory/index.js +12 -12
  8. package/dist/backends/gemini/auth.js +6 -6
  9. package/dist/backends/gemini/index.js +13 -13
  10. package/dist/backends/opencode/args.js +1 -1
  11. package/dist/backends/opencode/auth.js +6 -6
  12. package/dist/backends/opencode/index.js +14 -14
  13. package/dist/backends/pi/args.js +1 -1
  14. package/dist/backends/pi/auth.js +6 -6
  15. package/dist/backends/pi/index.js +11 -11
  16. package/dist/backends/registry.js +29 -29
  17. package/dist/{chunk-PZKWZKRP.js → chunk-2KF2TIEY.js} +5 -5
  18. package/dist/{chunk-33QZ6KIY.js → chunk-3B4JRSYA.js} +5 -5
  19. package/dist/{chunk-LJNLU5PQ.js → chunk-3NUTTKE5.js} +2 -2
  20. package/dist/{chunk-MZ6HBYGV.js → chunk-65XY7HRS.js} +7 -7
  21. package/dist/{chunk-US26CY2Y.js → chunk-6EIONZ7F.js} +2 -2
  22. package/dist/{chunk-TV6QMCDS.js → chunk-6RRK27I3.js} +3 -3
  23. package/dist/chunk-6SD6MC2B.js +29 -0
  24. package/dist/{chunk-ENFWZ2QM.js → chunk-6U6HEVSN.js} +7 -3
  25. package/dist/{chunk-CXIP6H55.js → chunk-7JA6HCMK.js} +2 -2
  26. package/dist/{chunk-ZM33GAEB.js → chunk-7PFDF5PN.js} +7 -7
  27. package/dist/{chunk-UB7GS7XT.js → chunk-A3FQHVUG.js} +7 -7
  28. package/dist/{chunk-ZP5QO5BR.js → chunk-ABUNDZCE.js} +1 -1
  29. package/dist/{chunk-Q62QJXGO.js → chunk-AGIXZFHQ.js} +1 -1
  30. package/dist/{chunk-QCP37SCU.js → chunk-AK6HMO7I.js} +8 -8
  31. package/dist/{chunk-BYUIOMPX.js → chunk-AKGWEACL.js} +23 -23
  32. package/dist/{chunk-NKOGWVP3.js → chunk-AUEKXYNE.js} +4 -4
  33. package/dist/{chunk-RKPT6O7I.js → chunk-B24Q4CUC.js} +5 -5
  34. package/dist/{chunk-SKVAM5H2.js → chunk-B3W3E5CS.js} +1 -1
  35. package/dist/{chunk-5AV732JY.js → chunk-BKMY6TSV.js} +2 -2
  36. package/dist/{chunk-WLCI57J6.js → chunk-C3UXUDZS.js} +4 -4
  37. package/dist/{chunk-QQGXM2OQ.js → chunk-C7P2TYOG.js} +1 -1
  38. package/dist/{chunk-HVCY7DET.js → chunk-CHNJK2KW.js} +2 -2
  39. package/dist/{chunk-MAN6OCOP.js → chunk-CJIGDJIJ.js} +3 -3
  40. package/dist/{chunk-CVYNMYIE.js → chunk-CWB2DQN5.js} +3 -3
  41. package/dist/{chunk-QBZMVYDV.js → chunk-CWVYFBZF.js} +4 -4
  42. package/dist/{chunk-4ENK7S24.js → chunk-CXYMVLYK.js} +4 -0
  43. package/dist/{chunk-4BJTLMHV.js → chunk-DAOKOXGY.js} +17 -17
  44. package/dist/{chunk-R37QM2U4.js → chunk-DF34ESOO.js} +1 -1
  45. package/dist/{chunk-GKNBECPD.js → chunk-DZKBUOYU.js} +2 -2
  46. package/dist/{chunk-Z25QQE5Z.js → chunk-EUMA5Q4U.js} +4 -4
  47. package/dist/{chunk-FC3UAHXM.js → chunk-FDLQ3IUB.js} +1 -1
  48. package/dist/{chunk-FDL2JHXO.js → chunk-GCT7A5KR.js} +2 -2
  49. package/dist/{chunk-Z5XQQN7H.js → chunk-HWWFRSAX.js} +4 -4
  50. package/dist/{chunk-KWG7NGYF.js → chunk-I2RVN7CP.js} +4 -4
  51. package/dist/{chunk-JCIAIJFF.js → chunk-IC2ETYU5.js} +3 -3
  52. package/dist/{chunk-3FLQ7KZP.js → chunk-IMJTHYN3.js} +1 -1
  53. package/dist/{chunk-ISGA4AOC.js → chunk-J6ESQUW6.js} +2 -2
  54. package/dist/{chunk-Y3V4COP7.js → chunk-J7F2OFWQ.js} +5 -5
  55. package/dist/chunk-J7VBHBXL.js +210 -0
  56. package/dist/{chunk-A4GJADRQ.js → chunk-JF777FWD.js} +2 -2
  57. package/dist/{chunk-IDQKHWWN.js → chunk-JFHYXFAL.js} +1 -1
  58. package/dist/{chunk-ANTKOI3K.js → chunk-JMDV55BV.js} +2 -2
  59. package/dist/{chunk-WG3N6VUA.js → chunk-JN3DHH7Z.js} +11 -11
  60. package/dist/{chunk-NOHH2ZH7.js → chunk-JNLVQGSH.js} +6 -6
  61. package/dist/{chunk-FQQ2R6FA.js → chunk-JNSJKHYX.js} +1 -1
  62. package/dist/{chunk-TJORQTH6.js → chunk-KGOOCFQY.js} +1 -1
  63. package/dist/chunk-KLGAE7V4.js +108 -0
  64. package/dist/{chunk-KHTLT44I.js → chunk-KSL2D4AD.js} +3 -3
  65. package/dist/{chunk-MNW6D7T4.js → chunk-M72ERPMT.js} +1 -1
  66. package/dist/{chunk-IC5ZTBAW.js → chunk-MUARVVXF.js} +3 -3
  67. package/dist/{chunk-G6XFFNCQ.js → chunk-N7XSXI5O.js} +18 -18
  68. package/dist/{chunk-N627DRI6.js → chunk-NLJK7FEN.js} +3 -3
  69. package/dist/{chunk-BRULBMRN.js → chunk-NSUVDKNC.js} +3 -3
  70. package/dist/{chunk-IS6CQPAQ.js → chunk-OEFJPZYH.js} +3 -3
  71. package/dist/{chunk-P56WU3UT.js → chunk-PDWLVL34.js} +8 -5
  72. package/dist/{chunk-I2WVMCYN.js → chunk-PWLWDWRL.js} +1 -1
  73. package/dist/{chunk-JTGISCYV.js → chunk-QCGIYXN4.js} +1 -1
  74. package/dist/{chunk-3V4BPIBU.js → chunk-QGPHATO3.js} +2 -2
  75. package/dist/{chunk-YS3W5AQA.js → chunk-REHIJQUD.js} +9 -9
  76. package/dist/{chunk-2K3UO6TC.js → chunk-RES4BCTF.js} +4 -4
  77. package/dist/{chunk-HDLPEXWS.js → chunk-S5CMAWEC.js} +20 -0
  78. package/dist/{chunk-KD5Y4XSU.js → chunk-S6HILC3F.js} +2 -2
  79. package/dist/{chunk-CBPO2P4I.js → chunk-SAI6LBXW.js} +2 -2
  80. package/dist/{chunk-IWI74DWW.js → chunk-SDTRWSGF.js} +51 -14
  81. package/dist/{chunk-CXXL77ER.js → chunk-SHUFUWAB.js} +61 -4
  82. package/dist/{chunk-YMKQJY5F.js → chunk-SIO4LO2M.js} +1 -1
  83. package/dist/{chunk-IITCQTBZ.js → chunk-T2PXAQND.js} +1 -1
  84. package/dist/{chunk-HPL2MQGY.js → chunk-T3TNJHED.js} +6 -6
  85. package/dist/{chunk-MNZB2OWP.js → chunk-TKFAWQD7.js} +2 -2
  86. package/dist/{chunk-D3LKWVPA.js → chunk-TTDMQ54U.js} +2 -2
  87. package/dist/{chunk-CACVB5PH.js → chunk-TTZGQIQS.js} +1 -1
  88. package/dist/{chunk-GNXIA5WC.js → chunk-TVV7AE3G.js} +2 -2
  89. package/dist/{chunk-2REGK4VO.js → chunk-U4SVWPLC.js} +11 -11
  90. package/dist/{chunk-5BA36MSQ.js → chunk-UMXXZ6OX.js} +1 -1
  91. package/dist/{chunk-QSRH4XUG.js → chunk-UNO3TSAT.js} +1 -1
  92. package/dist/{chunk-V4DEOZFK.js → chunk-USSUE7J2.js} +5 -5
  93. package/dist/{chunk-WHTGWLGJ.js → chunk-UTGP4X74.js} +1 -1
  94. package/dist/{chunk-XMZQW5G5.js → chunk-V5RHOS43.js} +8 -8
  95. package/dist/{chunk-Z2AVP3QL.js → chunk-VB6GGRIA.js} +16 -3
  96. package/dist/{chunk-RSXTLOY3.js → chunk-VY5XWTW7.js} +1 -1
  97. package/dist/{chunk-VVCRJ46V.js → chunk-WEUPM3IN.js} +4 -4
  98. package/dist/{chunk-RZHIYTI3.js → chunk-WK33IBKY.js} +10 -1
  99. package/dist/{chunk-DI5WC2SQ.js → chunk-XOWRUT4X.js} +2 -2
  100. package/dist/{chunk-AZLZOG5N.js → chunk-XYNEAJDF.js} +1 -1
  101. package/dist/{chunk-TFTJ734B.js → chunk-Y5RNFM44.js} +2 -2
  102. package/dist/{chunk-GSDVHR43.js → chunk-YJCH35J4.js} +5 -3
  103. package/dist/{chunk-T77N7C3M.js → chunk-YKPRNV6J.js} +2 -2
  104. package/dist/chunk-YOZ6WDP3.js +103 -0
  105. package/dist/{chunk-7DPZMROX.js → chunk-YRFWPBGX.js} +2 -2
  106. package/dist/{chunk-F5SHFZUA.js → chunk-YTBVILAH.js} +1 -1
  107. package/dist/{chunk-IPTEXVQG.js → chunk-Z5IENUYV.js} +3 -3
  108. package/dist/{chunk-MQSTE4WH.js → chunk-ZBWKJ42J.js} +3 -3
  109. package/dist/{chunk-GBJ3OT4D.js → chunk-ZC7OR65K.js} +7 -5
  110. package/dist/{chunk-7U62OZSD.js → chunk-ZDDMPGN4.js} +2 -2
  111. package/dist/{chunk-RRP4F6XC.js → chunk-ZPKQT6X2.js} +16 -6
  112. package/dist/{chunk-LSMTQBMW.js → chunk-ZV5Y5JBE.js} +2 -2
  113. package/dist/config/index.js +5 -5
  114. package/dist/containers/client.js +6 -6
  115. package/dist/containers/exec.js +6 -6
  116. package/dist/containers/lifecycle.js +41 -41
  117. package/dist/containers/setup.js +9 -9
  118. package/dist/db/agents.js +6 -6
  119. package/dist/db/api_keys.js +5 -5
  120. package/dist/db/audit.js +3 -3
  121. package/dist/db/batch.js +10 -10
  122. package/dist/db/client.js +2 -2
  123. package/dist/db/credentials.js +5 -3
  124. package/dist/db/drizzle.js +4 -4
  125. package/dist/db/environments.js +6 -6
  126. package/dist/db/events.js +5 -5
  127. package/dist/db/files.js +5 -5
  128. package/dist/db/memory.js +5 -5
  129. package/dist/db/migrations.js +1 -1
  130. package/dist/db/proxy.js +5 -5
  131. package/dist/db/schema.js +1 -1
  132. package/dist/db/session-resources.js +5 -5
  133. package/dist/db/sessions.js +8 -8
  134. package/dist/db/skills.js +5 -5
  135. package/dist/db/sync.js +5 -5
  136. package/dist/db/tenants.js +3 -3
  137. package/dist/db/threads.js +7 -7
  138. package/dist/db/traces.js +5 -5
  139. package/dist/db/upstream_keys.js +3 -3
  140. package/dist/db/user-profiles.js +17 -0
  141. package/dist/db/vaults.js +6 -6
  142. package/dist/db/work.js +5 -5
  143. package/dist/dreaming/review.js +11 -11
  144. package/dist/handlers/agents.js +58 -57
  145. package/dist/handlers/api_keys.js +59 -58
  146. package/dist/handlers/audit.js +59 -58
  147. package/dist/handlers/batch.js +59 -58
  148. package/dist/handlers/credentials.js +61 -58
  149. package/dist/handlers/enrollment.js +103 -0
  150. package/dist/handlers/environments.js +59 -58
  151. package/dist/handlers/events.js +62 -61
  152. package/dist/handlers/files.js +59 -58
  153. package/dist/handlers/index.js +145 -126
  154. package/dist/handlers/license.js +58 -57
  155. package/dist/handlers/memory.js +60 -59
  156. package/dist/handlers/metrics.js +58 -57
  157. package/dist/handlers/models.js +59 -58
  158. package/dist/handlers/openapi.js +3 -3
  159. package/dist/handlers/providers.js +58 -57
  160. package/dist/handlers/resources.js +58 -57
  161. package/dist/handlers/sessions.js +62 -61
  162. package/dist/handlers/settings.js +58 -57
  163. package/dist/handlers/skills-write.js +59 -58
  164. package/dist/handlers/skills.js +59 -58
  165. package/dist/handlers/stream.js +58 -57
  166. package/dist/handlers/tenants.js +59 -58
  167. package/dist/handlers/threads.js +59 -58
  168. package/dist/handlers/traces.js +59 -58
  169. package/dist/handlers/upstream_keys.js +61 -60
  170. package/dist/handlers/user-profiles.js +107 -0
  171. package/dist/handlers/vaults.js +58 -57
  172. package/dist/handlers/whoami.js +58 -57
  173. package/dist/handlers/work.js +59 -58
  174. package/dist/http.js +57 -56
  175. package/dist/index.js +68 -67
  176. package/dist/init.js +54 -53
  177. package/dist/lib/model-registry.js +6 -6
  178. package/dist/lib/skills-cache.js +6 -6
  179. package/dist/observability/otlp.js +12 -12
  180. package/dist/observability/redactor.js +8 -8
  181. package/dist/openapi/schemas.js +1 -1
  182. package/dist/openapi/spec.js +2 -2
  183. package/dist/providers/fly.js +5 -5
  184. package/dist/providers/modal.js +5 -5
  185. package/dist/providers/registry.js +6 -6
  186. package/dist/providers/resolve-secrets.js +7 -7
  187. package/dist/providers/sprites.js +7 -7
  188. package/dist/providers/upstream-keys.js +12 -12
  189. package/dist/providers/vercel.js +6 -6
  190. package/dist/proxy/forward.js +6 -6
  191. package/dist/queue/index.js +6 -6
  192. package/dist/sessions/bus.js +10 -10
  193. package/dist/sessions/driver.js +47 -46
  194. package/dist/sessions/grader.js +5 -5
  195. package/dist/sessions/secrets.js +9 -8
  196. package/dist/sessions/sweeper.js +42 -42
  197. package/dist/sessions/threads.js +55 -47
  198. package/dist/shutdown.js +43 -43
  199. package/dist/sync/anthropic.js +10 -10
  200. package/dist/sync/container-file-sync.js +6 -6
  201. package/dist/sync/file-sync.js +17 -17
  202. package/dist/workers/runner.js +49 -48
  203. package/package.json +1 -1
  204. package/dist/chunk-6KWJASEO.js +0 -21
  205. package/dist/{dist-EY25RQ2S.js → dist-3ZD3ELTH.js} +3 -3
@@ -1,60 +1,60 @@
1
- import {
2
- enqueueTurn
3
- } from "./chunk-SKVAM5H2.js";
4
1
  import {
5
2
  runTurn
6
- } from "./chunk-BYUIOMPX.js";
3
+ } from "./chunk-AKGWEACL.js";
7
4
  import {
8
- installOtlpExporter
9
- } from "./chunk-PZKWZKRP.js";
5
+ enqueueTurn
6
+ } from "./chunk-B3W3E5CS.js";
10
7
  import {
11
8
  redactAppendInput
12
- } from "./chunk-ISGA4AOC.js";
9
+ } from "./chunk-J6ESQUW6.js";
10
+ import {
11
+ installOtlpExporter
12
+ } from "./chunk-2KF2TIEY.js";
13
13
  import {
14
14
  createApiKey,
15
15
  listApiKeys
16
- } from "./chunk-LJNLU5PQ.js";
16
+ } from "./chunk-3NUTTKE5.js";
17
17
  import {
18
18
  initSentry
19
19
  } from "./chunk-3MQ2FWXS.js";
20
20
  import {
21
21
  installShutdownHandlers
22
- } from "./chunk-KD5Y4XSU.js";
22
+ } from "./chunk-S6HILC3F.js";
23
23
  import {
24
24
  runSweep
25
- } from "./chunk-HPL2MQGY.js";
25
+ } from "./chunk-T3TNJHED.js";
26
26
  import {
27
27
  fillWarmPools,
28
28
  reconcileDockerOrphanSandboxes,
29
29
  reconcileOrphanSandboxes
30
- } from "./chunk-2REGK4VO.js";
30
+ } from "./chunk-U4SVWPLC.js";
31
31
  import {
32
32
  appendEvent,
33
33
  installPayloadRedactor
34
- } from "./chunk-2K3UO6TC.js";
34
+ } from "./chunk-RES4BCTF.js";
35
35
  import {
36
36
  setSessionSandbox
37
- } from "./chunk-GBJ3OT4D.js";
37
+ } from "./chunk-ZC7OR65K.js";
38
38
  import {
39
39
  readEnvValue,
40
40
  upsertEnvLine
41
41
  } from "./chunk-YPXI7Q2M.js";
42
42
  import {
43
43
  getLastUnprocessedUserMessage
44
- } from "./chunk-IS6CQPAQ.js";
44
+ } from "./chunk-OEFJPZYH.js";
45
45
  import {
46
46
  getBySession,
47
47
  register
48
48
  } from "./chunk-EFOIR7R3.js";
49
49
  import {
50
50
  tryResolveProvider
51
- } from "./chunk-QQGXM2OQ.js";
51
+ } from "./chunk-C7P2TYOG.js";
52
52
  import {
53
53
  getEnvironment
54
- } from "./chunk-BRULBMRN.js";
54
+ } from "./chunk-NSUVDKNC.js";
55
55
  import {
56
56
  getConfig
57
- } from "./chunk-US26CY2Y.js";
57
+ } from "./chunk-6EIONZ7F.js";
58
58
  import {
59
59
  init_clock,
60
60
  nowMs
@@ -62,7 +62,7 @@ import {
62
62
  import {
63
63
  getDb,
64
64
  init_client
65
- } from "./chunk-Q62QJXGO.js";
65
+ } from "./chunk-AGIXZFHQ.js";
66
66
  import {
67
67
  getRuntime
68
68
  } from "./chunk-UYTSKFGK.js";
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  jsonOk,
3
3
  routeWrap
4
- } from "./chunk-DI5WC2SQ.js";
4
+ } from "./chunk-XOWRUT4X.js";
5
5
  import {
6
6
  resolveContainerProvider
7
- } from "./chunk-QQGXM2OQ.js";
7
+ } from "./chunk-C7P2TYOG.js";
8
8
  import {
9
9
  getConfig
10
- } from "./chunk-US26CY2Y.js";
10
+ } from "./chunk-6EIONZ7F.js";
11
11
 
12
12
  // src/handlers/providers.ts
13
13
  var LOCAL_PROVIDERS = ["docker", "apple-container", "podman"];
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  DEFAULT_TENANT_ID
3
- } from "./chunk-F5SHFZUA.js";
3
+ } from "./chunk-YTBVILAH.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-7U62OZSD.js";
16
+ } from "./chunk-ZDDMPGN4.js";
17
17
  import {
18
18
  schema_exports
19
- } from "./chunk-4ENK7S24.js";
19
+ } from "./chunk-CXYMVLYK.js";
20
20
 
21
21
  // src/db/environments.ts
22
22
  init_drizzle();
@@ -10,14 +10,14 @@ import {
10
10
  import {
11
11
  getDrizzle,
12
12
  init_drizzle
13
- } from "./chunk-7U62OZSD.js";
13
+ } from "./chunk-ZDDMPGN4.js";
14
14
  import {
15
15
  schema_exports
16
- } from "./chunk-4ENK7S24.js";
16
+ } from "./chunk-CXYMVLYK.js";
17
17
  import {
18
18
  getDb,
19
19
  init_client
20
- } from "./chunk-Q62QJXGO.js";
20
+ } from "./chunk-AGIXZFHQ.js";
21
21
 
22
22
  // src/db/events.ts
23
23
  init_client();
@@ -1,15 +1,18 @@
1
1
  // src/backends/opencode/args.ts
2
+ function normalizeOpencodeModel(model) {
3
+ if (model.includes("/")) return model;
4
+ if (model.startsWith("claude-")) return `anthropic/${model}`;
5
+ if (model.startsWith("gemini-")) return `google/${model}`;
6
+ if (model.startsWith("gpt-") || model.startsWith("o1-") || model.startsWith("o3-") || model.startsWith("o4-") || model.startsWith("chatgpt-")) return `openai/${model}`;
7
+ return `ollama/${model}`;
8
+ }
2
9
  function buildOpencodeArgs(input) {
3
10
  const args = ["run", "--format", "json", "--dangerously-skip-permissions"];
4
11
  if (input.backendSessionId) {
5
12
  args.push("--session", input.backendSessionId);
6
13
  }
7
14
  if (input.agent.model) {
8
- const modelId = input.agent.model.id;
9
- const cloudPrefixes = ["claude-", "gpt-", "o1-", "o3-", "o4-", "codex-", "chatgpt-", "gemini-"];
10
- const isOllama = !modelId.includes("/") && !cloudPrefixes.some((p) => modelId.startsWith(p));
11
- const modelArg = isOllama ? `ollama/${modelId}` : modelId;
12
- args.push("--model", modelArg);
15
+ args.push("--model", normalizeOpencodeModel(input.agent.model.id));
13
16
  }
14
17
  return args;
15
18
  }
@@ -84,7 +84,7 @@ import {
84
84
  VaultListResponseSchema,
85
85
  VaultSchema,
86
86
  WhoamiResponseSchema
87
- } from "./chunk-CBPO2P4I.js";
87
+ } from "./chunk-SAI6LBXW.js";
88
88
  import {
89
89
  registry
90
90
  } from "./chunk-7346CKTF.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getConfig
3
- } from "./chunk-US26CY2Y.js";
3
+ } from "./chunk-6EIONZ7F.js";
4
4
 
5
5
  // src/backends/opencode/auth.ts
6
6
  function buildOpencodeAuthEnv() {
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  getModels
3
- } from "./chunk-WHTGWLGJ.js";
3
+ } from "./chunk-UTGP4X74.js";
4
4
  import {
5
5
  jsonOk,
6
6
  routeWrap
7
- } from "./chunk-DI5WC2SQ.js";
7
+ } from "./chunk-XOWRUT4X.js";
8
8
 
9
9
  // src/handlers/models.ts
10
10
  function handleListModels(request) {
@@ -1,22 +1,22 @@
1
- import {
2
- buildOpencodeArgs
3
- } from "./chunk-P56WU3UT.js";
4
- import {
5
- buildOpencodeAuthEnv,
6
- validateOpencodeRuntime
7
- } from "./chunk-JTGISCYV.js";
8
1
  import {
9
2
  buildOpencodeConfigEnv
10
3
  } from "./chunk-V5DH3OAC.js";
11
4
  import {
12
5
  prepareOpencodeOnSandbox
13
6
  } from "./chunk-URNG7ZX2.js";
7
+ import {
8
+ createOpencodeTranslator
9
+ } from "./chunk-ETWGCBIQ.js";
14
10
  import {
15
11
  OPENCODE_WRAPPER_PATH
16
12
  } from "./chunk-UY3VT3HQ.js";
17
13
  import {
18
- createOpencodeTranslator
19
- } from "./chunk-ETWGCBIQ.js";
14
+ buildOpencodeArgs
15
+ } from "./chunk-PDWLVL34.js";
16
+ import {
17
+ buildOpencodeAuthEnv,
18
+ validateOpencodeRuntime
19
+ } from "./chunk-QCGIYXN4.js";
20
20
  import {
21
21
  wrapPromptWithSystem
22
22
  } from "./chunk-YE2RMJY7.js";
@@ -1,19 +1,19 @@
1
1
  import {
2
2
  getSession
3
- } from "./chunk-GBJ3OT4D.js";
3
+ } from "./chunk-ZC7OR65K.js";
4
4
  import {
5
5
  appendEvent,
6
6
  appendEventsBatch,
7
7
  listEvents,
8
8
  rowToManagedEvent
9
- } from "./chunk-IS6CQPAQ.js";
9
+ } from "./chunk-OEFJPZYH.js";
10
10
  import {
11
11
  getAgent
12
- } from "./chunk-ENFWZ2QM.js";
12
+ } from "./chunk-6U6HEVSN.js";
13
13
  import {
14
14
  getDb,
15
15
  init_client
16
- } from "./chunk-Q62QJXGO.js";
16
+ } from "./chunk-AGIXZFHQ.js";
17
17
 
18
18
  // src/sessions/bus.ts
19
19
  import { EventEmitter } from "events";
@@ -636,6 +636,26 @@ function runMigrations(db) {
636
636
  db.exec(`CREATE INDEX IF NOT EXISTS idx_vaults_tenant ON vaults(tenant_id)`);
637
637
  }
638
638
  }
639
+ db.exec(`
640
+ CREATE TABLE IF NOT EXISTS user_profiles (
641
+ id TEXT PRIMARY KEY,
642
+ external_id TEXT,
643
+ display_name TEXT,
644
+ trust_grants_json TEXT NOT NULL DEFAULT '[]',
645
+ tenant_id TEXT,
646
+ created_at INTEGER NOT NULL,
647
+ updated_at INTEGER NOT NULL,
648
+ UNIQUE(tenant_id, external_id)
649
+ )
650
+ `);
651
+ try {
652
+ db.exec(`ALTER TABLE sessions ADD COLUMN user_profile_id TEXT`);
653
+ } catch {
654
+ }
655
+ try {
656
+ db.exec(`ALTER TABLE agent_versions ADD COLUMN permission_policy_json TEXT`);
657
+ } catch {
658
+ }
639
659
  }
640
660
  var init_migrations = __esm({
641
661
  "src/db/migrations.ts"() {
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  markStopping
3
- } from "./chunk-HPL2MQGY.js";
3
+ } from "./chunk-T3TNJHED.js";
4
4
  import {
5
5
  closeDb,
6
6
  init_client,
7
7
  syncDb
8
- } from "./chunk-Q62QJXGO.js";
8
+ } from "./chunk-AGIXZFHQ.js";
9
9
  import {
10
10
  getRuntime
11
11
  } from "./chunk-UYTSKFGK.js";
@@ -139,7 +139,7 @@ var CreateAgentRequestSchema = registry.register(
139
139
  "CreateAgentRequest",
140
140
  z.object({
141
141
  name: z.string().min(1).openapi({ example: "my-agent" }),
142
- model: z.object({ id: z.string().min(1), speed: z.enum(["standard", "fast"]).optional() }).openapi({ description: "Model configuration. `id` is the canonical model identifier.", example: { id: "claude-sonnet-4-6" } }),
142
+ model: z.object({ id: z.string().min(1), speed: z.enum(["standard", "fast"]).optional() }).openapi({ description: "Model configuration. `id` is the bare model identifier (e.g. `gemini-2.5-flash`, `claude-sonnet-4-6`, `gpt-5.4`). Do not include provider prefixes.", example: { id: "claude-sonnet-4-6" } }),
143
143
  description: z.string().max(2048).optional().openapi({
144
144
  description: "Human-readable description of the agent."
145
145
  }),
@@ -156,7 +156,7 @@ var CreateAgentRequestSchema = registry.register(
156
156
  description: "MCP servers as an array of objects with name, type, and optional url."
157
157
  }),
158
158
  engine: z.enum(["claude", "opencode", "codex", "anthropic", "gemini", "factory", "pi"]).optional().openapi({
159
- description: "Agent harness. Defaults to `claude`. Opencode agents must set `model` to a `provider/model` string (e.g. `anthropic/claude-sonnet-4-6`) and must NOT declare `tools` \u2014 opencode manages its tool surface internally. Gemini agents require GEMINI_API_KEY. Factory agents require FACTORY_API_KEY. Pi agents (pi.dev) require at least one of ANTHROPIC_API_KEY, OPENAI_API_KEY, or GEMINI_API_KEY.",
159
+ description: "Agent harness. Auto-inferred from model prefix if omitted: `gemini-*` \u2192 gemini, `gpt-*`/`o1-*` \u2192 codex, `claude-*` \u2192 claude. Always use bare model IDs (`gemini-2.5-flash`, not `google/gemini-2.5-flash`) \u2014 provider prefixes are added internally where needed. Non-claude engines must NOT declare `tools` (they manage tool permissions internally). Required vault keys: claude \u2192 ANTHROPIC_API_KEY, gemini \u2192 GEMINI_API_KEY, codex \u2192 OPENAI_API_KEY, pi \u2192 any of the three.",
160
160
  example: "claude"
161
161
  }),
162
162
  webhook_url: z.string().url().optional().openapi({
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  syncAndCreateSession
3
- } from "./chunk-NKOGWVP3.js";
3
+ } from "./chunk-AUEKXYNE.js";
4
4
  import {
5
5
  resolveRemoteSessionId,
6
6
  upsertSync
7
- } from "./chunk-MQSTE4WH.js";
7
+ } from "./chunk-ZBWKJ42J.js";
8
8
  import {
9
9
  assertResourceTenant,
10
10
  tenantFilter
@@ -14,19 +14,19 @@ import {
14
14
  } from "./chunk-DC2UMEQH.js";
15
15
  import {
16
16
  getMemoryStore
17
- } from "./chunk-GNXIA5WC.js";
17
+ } from "./chunk-TVV7AE3G.js";
18
18
  import {
19
19
  kickoffEnvironmentSetup
20
- } from "./chunk-7DPZMROX.js";
20
+ } from "./chunk-YRFWPBGX.js";
21
21
  import {
22
22
  decodeCursor,
23
23
  jsonOk,
24
24
  paginatedOk,
25
25
  routeWrap
26
- } from "./chunk-DI5WC2SQ.js";
26
+ } from "./chunk-XOWRUT4X.js";
27
27
  import {
28
28
  forwardToAnthropic
29
- } from "./chunk-IDQKHWWN.js";
29
+ } from "./chunk-JFHYXFAL.js";
30
30
  import {
31
31
  errors_exports,
32
32
  init_errors
@@ -36,32 +36,33 @@ import {
36
36
  isProxied,
37
37
  markProxied,
38
38
  unmarkProxied
39
- } from "./chunk-GKNBECPD.js";
39
+ } from "./chunk-DZKBUOYU.js";
40
40
  import {
41
41
  dropActor,
42
42
  getActor
43
43
  } from "./chunk-LAWTTG2E.js";
44
44
  import {
45
45
  releaseSession
46
- } from "./chunk-2REGK4VO.js";
46
+ } from "./chunk-U4SVWPLC.js";
47
47
  import {
48
48
  appendEvent,
49
49
  dropEmitter
50
- } from "./chunk-2K3UO6TC.js";
50
+ } from "./chunk-RES4BCTF.js";
51
51
  import {
52
52
  archiveSession,
53
53
  createSession,
54
54
  getSession,
55
55
  listSessions,
56
+ setOutcomeCriteria,
56
57
  updateSessionMutable,
57
58
  updateSessionStatus
58
- } from "./chunk-GBJ3OT4D.js";
59
+ } from "./chunk-ZC7OR65K.js";
59
60
  import {
60
61
  getEnvironment
61
- } from "./chunk-BRULBMRN.js";
62
+ } from "./chunk-NSUVDKNC.js";
62
63
  import {
63
64
  getAgent
64
- } from "./chunk-ENFWZ2QM.js";
65
+ } from "./chunk-6U6HEVSN.js";
65
66
  import {
66
67
  init_clock,
67
68
  nowMs
@@ -69,7 +70,7 @@ import {
69
70
  import {
70
71
  getDb,
71
72
  init_client
72
- } from "./chunk-Q62QJXGO.js";
73
+ } from "./chunk-AGIXZFHQ.js";
73
74
  import {
74
75
  badRequest,
75
76
  notFound
@@ -149,7 +150,17 @@ var CreateSchema = z.object({
149
150
  max_tokens: z.number().int().positive().optional(),
150
151
  max_wall_duration_ms: z.number().int().positive().optional(),
151
152
  resources: z.array(ResourceSchema).optional(),
152
- vault_ids: z.array(z.string()).optional()
153
+ vault_ids: z.array(z.string()).optional(),
154
+ user_profile_id: z.string().optional(),
155
+ outcomes: z.object({
156
+ description: z.string().min(1),
157
+ rubric: z.array(z.object({
158
+ name: z.string(),
159
+ description: z.string(),
160
+ weight: z.number().optional()
161
+ })).optional(),
162
+ max_iterations: z.number().int().min(1).max(10).optional()
163
+ }).optional()
153
164
  });
154
165
  var UpdateSchema = z.object({
155
166
  title: z.string().nullish(),
@@ -250,6 +261,14 @@ function handleCreateSession(request) {
250
261
  }
251
262
  }
252
263
  }
264
+ if (data.user_profile_id) {
265
+ const { getUserProfile } = await import("./db/user-profiles.js");
266
+ const profile = getUserProfile(data.user_profile_id);
267
+ if (!profile) throw badRequest(`user profile not found: ${data.user_profile_id}`);
268
+ if (profile.tenant_id && profile.tenant_id !== agentTenantId) {
269
+ throw badRequest(`user profile does not belong to this tenant`);
270
+ }
271
+ }
253
272
  if (data.resources?.length) {
254
273
  const memStoreResources = data.resources.filter((r) => r.type === "memory_store");
255
274
  if (memStoreResources.length > 8) {
@@ -296,6 +315,7 @@ function handleCreateSession(request) {
296
315
  max_wall_duration_ms: data.max_wall_duration_ms ?? null,
297
316
  resources: data.resources?.length ? data.resources : null,
298
317
  vault_ids: data.vault_ids?.length ? data.vault_ids : null,
318
+ user_profile_id: data.user_profile_id ?? null,
299
319
  api_key_id: auth.keyId,
300
320
  tenant_id: agentTenantId
301
321
  });
@@ -335,6 +355,14 @@ function handleCreateSession(request) {
335
355
  });
336
356
  upsertSync(session2.id, "session", remoteSessionId);
337
357
  markProxied(session2.id, "session", agentTenantId);
358
+ if (data.outcomes) {
359
+ setOutcomeCriteria(session2.id, {
360
+ description: data.outcomes.description,
361
+ rubric: data.outcomes.rubric ?? [],
362
+ max_iterations: data.outcomes.max_iterations ?? 3,
363
+ status: "running"
364
+ });
365
+ }
338
366
  getActor(session2.id);
339
367
  return jsonOk(session2, 201);
340
368
  }
@@ -357,6 +385,7 @@ function handleCreateSession(request) {
357
385
  max_wall_duration_ms: data.max_wall_duration_ms ?? null,
358
386
  resources: data.resources?.length ? data.resources : null,
359
387
  vault_ids: data.vault_ids?.length ? data.vault_ids : null,
388
+ user_profile_id: data.user_profile_id ?? null,
360
389
  api_key_id: auth.keyId,
361
390
  tenant_id: agentTenantId
362
391
  });
@@ -391,6 +420,14 @@ function handleCreateSession(request) {
391
420
  });
392
421
  }
393
422
  }
423
+ if (data.outcomes) {
424
+ setOutcomeCriteria(session.id, {
425
+ description: data.outcomes.description,
426
+ rubric: data.outcomes.rubric ?? [],
427
+ max_iterations: data.outcomes.max_iterations ?? 3,
428
+ status: "running"
429
+ });
430
+ }
394
431
  getActor(session.id);
395
432
  return jsonOk(session, 201);
396
433
  }
@@ -1,19 +1,20 @@
1
1
  import {
2
2
  loadVaultForCaller
3
- } from "./chunk-QBZMVYDV.js";
3
+ } from "./chunk-CWVYFBZF.js";
4
4
  import {
5
5
  jsonOk,
6
6
  paginatedOk,
7
7
  routeWrap
8
- } from "./chunk-DI5WC2SQ.js";
8
+ } from "./chunk-XOWRUT4X.js";
9
9
  import {
10
10
  archiveCredential,
11
11
  createCredential,
12
12
  deleteCredential,
13
13
  getCredential,
14
+ getRefreshConfig,
14
15
  listCredentials,
15
16
  updateCredential
16
- } from "./chunk-RZHIYTI3.js";
17
+ } from "./chunk-WK33IBKY.js";
17
18
  import {
18
19
  badRequest,
19
20
  conflict,
@@ -207,6 +208,61 @@ function handleDeleteCredential(request, vaultId, credentialId) {
207
208
  return jsonOk({ id: credentialId, type: "vault_credential_deleted" });
208
209
  });
209
210
  }
211
+ function handleMcpOauthValidate(request, vaultId, credentialId) {
212
+ return routeWrap(request, async ({ auth }) => {
213
+ loadVaultForCaller(auth, vaultId);
214
+ const cred = getCredential(credentialId);
215
+ if (!cred || cred.vault_id !== vaultId) throw notFound(`credential not found: ${credentialId}`);
216
+ if (cred.auth.type !== "mcp_oauth") {
217
+ throw badRequest("credential is not mcp_oauth type");
218
+ }
219
+ const config = getRefreshConfig(credentialId);
220
+ if (!config) throw badRequest("credential has no refresh configuration");
221
+ const body = new URLSearchParams({
222
+ grant_type: "refresh_token",
223
+ client_id: config.client_id,
224
+ refresh_token: config.refresh_token,
225
+ ...config.scope ? { scope: config.scope } : {}
226
+ });
227
+ const headers = {
228
+ "Content-Type": "application/x-www-form-urlencoded"
229
+ };
230
+ if (config.token_endpoint_auth?.type === "client_secret_basic") {
231
+ headers.Authorization = `Basic ${btoa(`${config.client_id}:${config.token_endpoint_auth.client_secret}`)}`;
232
+ } else if (config.token_endpoint_auth?.client_secret) {
233
+ body.set("client_secret", config.token_endpoint_auth.client_secret);
234
+ }
235
+ try {
236
+ const res = await fetch(config.token_endpoint, {
237
+ method: "POST",
238
+ headers,
239
+ body: body.toString(),
240
+ signal: AbortSignal.timeout(15e3)
241
+ });
242
+ if (res.ok) {
243
+ return jsonOk({
244
+ type: "mcp_oauth_validation_result",
245
+ credential_id: credentialId,
246
+ valid: true
247
+ });
248
+ }
249
+ const errText = await res.text().catch(() => "");
250
+ return jsonOk({
251
+ type: "mcp_oauth_validation_result",
252
+ credential_id: credentialId,
253
+ valid: false,
254
+ error: `token endpoint returned ${res.status}: ${errText.slice(0, 200)}`
255
+ });
256
+ } catch (err) {
257
+ return jsonOk({
258
+ type: "mcp_oauth_validation_result",
259
+ credential_id: credentialId,
260
+ valid: false,
261
+ error: err instanceof Error ? err.message : "token endpoint unreachable"
262
+ });
263
+ }
264
+ });
265
+ }
210
266
 
211
267
  export {
212
268
  handleCreateCredential,
@@ -214,5 +270,6 @@ export {
214
270
  handleGetCredential,
215
271
  handleUpdateCredential,
216
272
  handleArchiveCredential,
217
- handleDeleteCredential
273
+ handleDeleteCredential,
274
+ handleMcpOauthValidate
218
275
  };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getConfig
3
- } from "./chunk-US26CY2Y.js";
3
+ } from "./chunk-6EIONZ7F.js";
4
4
 
5
5
  // src/backends/codex/auth.ts
6
6
  function buildCodexAuthEnv() {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getConfig
3
- } from "./chunk-US26CY2Y.js";
3
+ } from "./chunk-6EIONZ7F.js";
4
4
 
5
5
  // src/backends/pi/auth.ts
6
6
  function buildPiAuthEnv() {
@@ -6,29 +6,29 @@ import {
6
6
  reconcileDockerOrphanSandboxes,
7
7
  reconcileOrphanSandboxes,
8
8
  releaseSession
9
- } from "./chunk-2REGK4VO.js";
9
+ } from "./chunk-U4SVWPLC.js";
10
10
  import {
11
11
  appendEvent,
12
12
  dropEmitter
13
- } from "./chunk-2K3UO6TC.js";
13
+ } from "./chunk-RES4BCTF.js";
14
14
  import {
15
15
  archiveSession,
16
16
  getSessionRow,
17
17
  listIdleSessions,
18
18
  updateSessionStatus
19
- } from "./chunk-GBJ3OT4D.js";
19
+ } from "./chunk-ZC7OR65K.js";
20
20
  import {
21
21
  tryResolveProvider
22
- } from "./chunk-QQGXM2OQ.js";
22
+ } from "./chunk-C7P2TYOG.js";
23
23
  import {
24
24
  getEnvironment
25
- } from "./chunk-BRULBMRN.js";
25
+ } from "./chunk-NSUVDKNC.js";
26
26
  import {
27
27
  expireWarm
28
28
  } from "./chunk-G7KUVNDY.js";
29
29
  import {
30
30
  getConfig
31
- } from "./chunk-US26CY2Y.js";
31
+ } from "./chunk-6EIONZ7F.js";
32
32
  import {
33
33
  init_clock,
34
34
  nowMs
@@ -8,14 +8,14 @@ import {
8
8
  import {
9
9
  jsonOk,
10
10
  routeWrap
11
- } from "./chunk-DI5WC2SQ.js";
11
+ } from "./chunk-XOWRUT4X.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-Q62QJXGO.js";
18
+ } from "./chunk-AGIXZFHQ.js";
19
19
  import {
20
20
  badRequest
21
21
  } from "./chunk-EZYKRG4W.js";
@@ -10,10 +10,10 @@ import {
10
10
  import {
11
11
  getDrizzle,
12
12
  init_drizzle
13
- } from "./chunk-7U62OZSD.js";
13
+ } from "./chunk-ZDDMPGN4.js";
14
14
  import {
15
15
  schema_exports
16
- } from "./chunk-4ENK7S24.js";
16
+ } from "./chunk-CXYMVLYK.js";
17
17
 
18
18
  // src/db/skills.ts
19
19
  init_drizzle();
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  jsonOk,
6
6
  routeWrap
7
- } from "./chunk-DI5WC2SQ.js";
7
+ } from "./chunk-XOWRUT4X.js";
8
8
 
9
9
  // src/handlers/license.ts
10
10
  function handleGetLicense(request) {