@agentstep/agent-sdk 0.5.33 → 0.5.34

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 (85) hide show
  1. package/dist/{chunk-3B4JRSYA.js → chunk-25E64UIV.js} +1 -1
  2. package/dist/{chunk-SHUFUWAB.js → chunk-2R4IT7HG.js} +2 -2
  3. package/dist/{chunk-NLJK7FEN.js → chunk-3EI7IPMI.js} +2 -2
  4. package/dist/{chunk-EUMA5Q4U.js → chunk-3EWEKBVC.js} +1 -1
  5. package/dist/{chunk-USSUE7J2.js → chunk-3LYNN5VT.js} +1 -1
  6. package/dist/{chunk-XOWRUT4X.js → chunk-4EKHW6VS.js} +1 -1
  7. package/dist/{chunk-KSL2D4AD.js → chunk-6CODFATQ.js} +1 -1
  8. package/dist/{chunk-J7VBHBXL.js → chunk-6NEWWPL4.js} +1 -1
  9. package/dist/{chunk-Y5RNFM44.js → chunk-6NFK5RJX.js} +1 -1
  10. package/dist/{chunk-7JA6HCMK.js → chunk-75US4UAE.js} +1 -1
  11. package/dist/{chunk-AK6HMO7I.js → chunk-AD2WPGDN.js} +1 -1
  12. package/dist/chunk-B5RR422E.js +0 -0
  13. package/dist/{chunk-SDTRWSGF.js → chunk-BSAF4YJB.js} +3 -3
  14. package/dist/{chunk-TKFAWQD7.js → chunk-CZ4N5FJW.js} +1 -1
  15. package/dist/{chunk-TTZGQIQS.js → chunk-FCPZF7KJ.js} +1 -1
  16. package/dist/{chunk-CHNJK2KW.js → chunk-FHOJOLXU.js} +1 -1
  17. package/dist/{chunk-BKMY6TSV.js → chunk-GABMXDZZ.js} +1 -1
  18. package/dist/{chunk-ZV5Y5JBE.js → chunk-GBBQD6VY.js} +1 -1
  19. package/dist/{chunk-CWVYFBZF.js → chunk-GFZ2WIVH.js} +1 -1
  20. package/dist/{chunk-JMDV55BV.js → chunk-HHLVVJGT.js} +1 -1
  21. package/dist/{chunk-QGPHATO3.js → chunk-JDAOTVWV.js} +1 -1
  22. package/dist/{chunk-C3UXUDZS.js → chunk-JIXRTWYL.js} +1 -1
  23. package/dist/{chunk-T3TNJHED.js → chunk-K3LM6O44.js} +2 -2
  24. package/dist/{chunk-YRFWPBGX.js → chunk-K5J4IN2S.js} +1 -1
  25. package/dist/{chunk-AKGWEACL.js → chunk-KYKVHH7I.js} +2 -2
  26. package/dist/{chunk-7PFDF5PN.js → chunk-LKHJLSYG.js} +3 -3
  27. package/dist/{chunk-B24Q4CUC.js → chunk-LR6FK2J7.js} +1 -1
  28. package/dist/{chunk-ZPKQT6X2.js → chunk-NQ6BN7WH.js} +1 -1
  29. package/dist/chunk-OANORRFX.js +276 -0
  30. package/dist/{chunk-DAOKOXGY.js → chunk-OEYLPPID.js} +2 -2
  31. package/dist/{chunk-N7XSXI5O.js → chunk-P7V3S2T3.js} +5 -5
  32. package/dist/{chunk-UNO3TSAT.js → chunk-SUEPFZN2.js} +1 -1
  33. package/dist/{chunk-6RRK27I3.js → chunk-VQM2MCQR.js} +1 -1
  34. package/dist/{chunk-CJIGDJIJ.js → chunk-XXAO5YYL.js} +1 -1
  35. package/dist/{chunk-S6HILC3F.js → chunk-ZACPJA3G.js} +1 -1
  36. package/dist/{chunk-JNLVQGSH.js → chunk-ZAUWB5DQ.js} +1 -1
  37. package/dist/{chunk-U4SVWPLC.js → chunk-ZCCHLDLC.js} +1 -1
  38. package/dist/{chunk-KLGAE7V4.js → chunk-ZHEE6UTX.js} +1 -1
  39. package/dist/containers/lifecycle.js +2 -2
  40. package/dist/containers/setup.js +2 -2
  41. package/dist/handlers/agents.js +8 -8
  42. package/dist/handlers/api_keys.js +8 -8
  43. package/dist/handlers/audit.js +8 -8
  44. package/dist/handlers/batch.js +8 -8
  45. package/dist/handlers/credentials.js +9 -9
  46. package/dist/handlers/enrollment.js +8 -8
  47. package/dist/handlers/environments.js +9 -9
  48. package/dist/handlers/events.js +8 -8
  49. package/dist/handlers/files.js +8 -8
  50. package/dist/handlers/google-compat/index.js +101 -0
  51. package/dist/handlers/google-compat/interactions.js +100 -0
  52. package/dist/handlers/google-compat/types.js +0 -0
  53. package/dist/handlers/index.js +41 -36
  54. package/dist/handlers/license.js +8 -8
  55. package/dist/handlers/memory.js +8 -8
  56. package/dist/handlers/metrics.js +8 -8
  57. package/dist/handlers/models.js +8 -8
  58. package/dist/handlers/providers.js +8 -8
  59. package/dist/handlers/resources.js +8 -8
  60. package/dist/handlers/sessions.js +9 -9
  61. package/dist/handlers/settings.js +8 -8
  62. package/dist/handlers/skills-write.js +8 -8
  63. package/dist/handlers/skills.js +8 -8
  64. package/dist/handlers/stream.js +7 -7
  65. package/dist/handlers/tenants.js +8 -8
  66. package/dist/handlers/threads.js +8 -8
  67. package/dist/handlers/traces.js +8 -8
  68. package/dist/handlers/upstream_keys.js +8 -8
  69. package/dist/handlers/user-profiles.js +8 -8
  70. package/dist/handlers/vaults.js +8 -8
  71. package/dist/handlers/whoami.js +8 -8
  72. package/dist/handlers/work.js +8 -8
  73. package/dist/http.js +7 -7
  74. package/dist/index.js +9 -9
  75. package/dist/init.js +6 -6
  76. package/dist/providers/registry.js +1 -1
  77. package/dist/providers/vercel.js +1 -1
  78. package/dist/sessions/driver.js +3 -3
  79. package/dist/sessions/sweeper.js +3 -3
  80. package/dist/sessions/threads.js +3 -3
  81. package/dist/shutdown.js +4 -4
  82. package/dist/workers/runner.js +4 -4
  83. package/package.json +1 -1
  84. package/dist/{chunk-C7P2TYOG.js → chunk-XLMNSDUJ.js} +0 -0
  85. package/dist/{dist-3ZD3ELTH.js → dist-EY25RQ2S.js} +3 -3
@@ -25,7 +25,7 @@ import {
25
25
  jsonOk,
26
26
  paginatedOk,
27
27
  routeWrap
28
- } from "./chunk-XOWRUT4X.js";
28
+ } from "./chunk-4EKHW6VS.js";
29
29
  import {
30
30
  getConfig
31
31
  } from "./chunk-6EIONZ7F.js";
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  loadVaultForCaller
3
- } from "./chunk-CWVYFBZF.js";
3
+ } from "./chunk-GFZ2WIVH.js";
4
4
  import {
5
5
  jsonOk,
6
6
  paginatedOk,
7
7
  routeWrap
8
- } from "./chunk-XOWRUT4X.js";
8
+ } from "./chunk-4EKHW6VS.js";
9
9
  import {
10
10
  archiveCredential,
11
11
  createCredential,
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  jsonOk,
3
3
  routeWrap
4
- } from "./chunk-XOWRUT4X.js";
4
+ } from "./chunk-4EKHW6VS.js";
5
5
  import {
6
6
  resolveContainerProvider
7
- } from "./chunk-C7P2TYOG.js";
7
+ } from "./chunk-XLMNSDUJ.js";
8
8
  import {
9
9
  getConfig
10
10
  } from "./chunk-6EIONZ7F.js";
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  jsonOk,
6
6
  routeWrap
7
- } from "./chunk-XOWRUT4X.js";
7
+ } from "./chunk-4EKHW6VS.js";
8
8
  import {
9
9
  exportTrace
10
10
  } from "./chunk-2KF2TIEY.js";
@@ -15,7 +15,7 @@ import {
15
15
  import {
16
16
  jsonOk,
17
17
  routeWrap
18
- } from "./chunk-XOWRUT4X.js";
18
+ } from "./chunk-4EKHW6VS.js";
19
19
  import {
20
20
  createApiKey,
21
21
  getApiKeyById,
@@ -10,7 +10,7 @@ import {
10
10
  } from "./chunk-HVUWXUUI.js";
11
11
  import {
12
12
  ensureInitialized
13
- } from "./chunk-N7XSXI5O.js";
13
+ } from "./chunk-P7V3S2T3.js";
14
14
  import {
15
15
  captureException
16
16
  } from "./chunk-3MQ2FWXS.js";
@@ -13,7 +13,7 @@ import {
13
13
  jsonOk,
14
14
  paginatedOk,
15
15
  routeWrap
16
- } from "./chunk-XOWRUT4X.js";
16
+ } from "./chunk-4EKHW6VS.js";
17
17
  import {
18
18
  getEnvironment
19
19
  } from "./chunk-NSUVDKNC.js";
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  jsonOk,
6
6
  routeWrap
7
- } from "./chunk-XOWRUT4X.js";
7
+ } from "./chunk-4EKHW6VS.js";
8
8
  import {
9
9
  getUserProfile,
10
10
  updateUserProfile
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  jsonOk,
3
3
  routeWrap
4
- } from "./chunk-XOWRUT4X.js";
4
+ } from "./chunk-4EKHW6VS.js";
5
5
  import {
6
6
  readSetting,
7
7
  writeSetting
@@ -15,7 +15,7 @@ import {
15
15
  jsonOk,
16
16
  paginatedOk,
17
17
  routeWrap
18
- } from "./chunk-XOWRUT4X.js";
18
+ } from "./chunk-4EKHW6VS.js";
19
19
  import {
20
20
  badRequest,
21
21
  notFound
@@ -12,7 +12,7 @@ import {
12
12
  } from "./chunk-JFHYXFAL.js";
13
13
  import {
14
14
  ensureInitialized
15
- } from "./chunk-N7XSXI5O.js";
15
+ } from "./chunk-P7V3S2T3.js";
16
16
  import {
17
17
  getProxiedTenantId,
18
18
  isProxied
File without changes
@@ -17,13 +17,13 @@ import {
17
17
  } from "./chunk-TVV7AE3G.js";
18
18
  import {
19
19
  kickoffEnvironmentSetup
20
- } from "./chunk-YRFWPBGX.js";
20
+ } from "./chunk-K5J4IN2S.js";
21
21
  import {
22
22
  decodeCursor,
23
23
  jsonOk,
24
24
  paginatedOk,
25
25
  routeWrap
26
- } from "./chunk-XOWRUT4X.js";
26
+ } from "./chunk-4EKHW6VS.js";
27
27
  import {
28
28
  forwardToAnthropic
29
29
  } from "./chunk-JFHYXFAL.js";
@@ -43,7 +43,7 @@ import {
43
43
  } from "./chunk-LAWTTG2E.js";
44
44
  import {
45
45
  releaseSession
46
- } from "./chunk-U4SVWPLC.js";
46
+ } from "./chunk-ZCCHLDLC.js";
47
47
  import {
48
48
  appendEvent,
49
49
  dropEmitter
@@ -8,7 +8,7 @@ import {
8
8
  import {
9
9
  jsonOk,
10
10
  routeWrap
11
- } from "./chunk-XOWRUT4X.js";
11
+ } from "./chunk-4EKHW6VS.js";
12
12
  import {
13
13
  snapshotApiMetrics
14
14
  } from "./chunk-D2XITRN6.js";
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  jsonOk,
6
6
  routeWrap
7
- } from "./chunk-XOWRUT4X.js";
7
+ } from "./chunk-4EKHW6VS.js";
8
8
 
9
9
  // src/handlers/license.ts
10
10
  function handleGetLicense(request) {
@@ -8,7 +8,7 @@ import {
8
8
  import {
9
9
  jsonOk,
10
10
  routeWrap
11
- } from "./chunk-XOWRUT4X.js";
11
+ } from "./chunk-4EKHW6VS.js";
12
12
 
13
13
  // src/handlers/skills.ts
14
14
  async function handleGetSkillsCatalog(request) {
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-JF777FWD.js";
8
8
  import {
9
9
  runTurn
10
- } from "./chunk-AKGWEACL.js";
10
+ } from "./chunk-KYKVHH7I.js";
11
11
 
12
12
  // src/workers/runner.ts
13
13
  async function startWorker(opts) {
@@ -8,7 +8,7 @@ import {
8
8
  import {
9
9
  paginatedOk,
10
10
  routeWrap
11
- } from "./chunk-XOWRUT4X.js";
11
+ } from "./chunk-4EKHW6VS.js";
12
12
  import {
13
13
  badRequest
14
14
  } from "./chunk-EZYKRG4W.js";
@@ -7,7 +7,7 @@ import {
7
7
  jsonOk,
8
8
  paginatedOk,
9
9
  routeWrap
10
- } from "./chunk-XOWRUT4X.js";
10
+ } from "./chunk-4EKHW6VS.js";
11
11
  import {
12
12
  archiveVault,
13
13
  createVault,
@@ -5,7 +5,7 @@ import {
5
5
  import {
6
6
  jsonOk,
7
7
  routeWrap
8
- } from "./chunk-XOWRUT4X.js";
8
+ } from "./chunk-4EKHW6VS.js";
9
9
  import {
10
10
  badRequest
11
11
  } from "./chunk-EZYKRG4W.js";
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  jsonOk,
6
6
  routeWrap
7
- } from "./chunk-XOWRUT4X.js";
7
+ } from "./chunk-4EKHW6VS.js";
8
8
 
9
9
  // src/handlers/models.ts
10
10
  function handleListModels(request) {
@@ -21,7 +21,7 @@ import {
21
21
  import {
22
22
  jsonOk,
23
23
  routeWrap
24
- } from "./chunk-XOWRUT4X.js";
24
+ } from "./chunk-4EKHW6VS.js";
25
25
  import {
26
26
  badRequest,
27
27
  notFound
@@ -6,7 +6,7 @@ import {
6
6
  reconcileDockerOrphanSandboxes,
7
7
  reconcileOrphanSandboxes,
8
8
  releaseSession
9
- } from "./chunk-U4SVWPLC.js";
9
+ } from "./chunk-ZCCHLDLC.js";
10
10
  import {
11
11
  appendEvent,
12
12
  dropEmitter
@@ -19,7 +19,7 @@ import {
19
19
  } from "./chunk-ZC7OR65K.js";
20
20
  import {
21
21
  tryResolveProvider
22
- } from "./chunk-C7P2TYOG.js";
22
+ } from "./chunk-XLMNSDUJ.js";
23
23
  import {
24
24
  getEnvironment
25
25
  } from "./chunk-NSUVDKNC.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  resolveContainerProvider,
3
3
  resolveProvider
4
- } from "./chunk-C7P2TYOG.js";
4
+ } from "./chunk-XLMNSDUJ.js";
5
5
  import {
6
6
  getEnvironmentRow,
7
7
  updateEnvironmentState
@@ -30,7 +30,7 @@ import {
30
30
  installSkills,
31
31
  provisionResources,
32
32
  wrapProviderWithSecrets
33
- } from "./chunk-U4SVWPLC.js";
33
+ } from "./chunk-ZCCHLDLC.js";
34
34
  import {
35
35
  BLOCKED_ENV_KEYS,
36
36
  resolveVaultSecrets
@@ -60,7 +60,7 @@ import {
60
60
  import {
61
61
  resolveProvider,
62
62
  resolveProviderName
63
- } from "./chunk-C7P2TYOG.js";
63
+ } from "./chunk-XLMNSDUJ.js";
64
64
  import {
65
65
  getEnvironment
66
66
  } from "./chunk-NSUVDKNC.js";
@@ -5,13 +5,13 @@ import {
5
5
  } from "./chunk-23UKWXJH.js";
6
6
  import {
7
7
  kickoffEnvironmentSetup
8
- } from "./chunk-YRFWPBGX.js";
8
+ } from "./chunk-K5J4IN2S.js";
9
9
  import {
10
10
  decodeCursor,
11
11
  jsonOk,
12
12
  paginatedOk,
13
13
  routeWrap
14
- } from "./chunk-XOWRUT4X.js";
14
+ } from "./chunk-4EKHW6VS.js";
15
15
  import {
16
16
  forwardToAnthropic
17
17
  } from "./chunk-JFHYXFAL.js";
@@ -23,7 +23,7 @@ import {
23
23
  } from "./chunk-DZKBUOYU.js";
24
24
  import {
25
25
  resolveContainerProvider
26
- } from "./chunk-C7P2TYOG.js";
26
+ } from "./chunk-XLMNSDUJ.js";
27
27
  import {
28
28
  archiveEnvironment,
29
29
  createEnvironment,
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  jsonOk,
6
6
  routeWrap
7
- } from "./chunk-XOWRUT4X.js";
7
+ } from "./chunk-4EKHW6VS.js";
8
8
  import {
9
9
  getProxiedTenantId
10
10
  } from "./chunk-DZKBUOYU.js";
@@ -8,7 +8,7 @@ import {
8
8
  jsonOk,
9
9
  paginatedOk,
10
10
  routeWrap
11
- } from "./chunk-XOWRUT4X.js";
11
+ } from "./chunk-4EKHW6VS.js";
12
12
  import {
13
13
  forwardToAnthropic,
14
14
  validateAnthropicProxy
@@ -0,0 +1,276 @@
1
+ import {
2
+ jsonOk,
3
+ routeWrap
4
+ } from "./chunk-4EKHW6VS.js";
5
+ import {
6
+ init_ids,
7
+ newId
8
+ } from "./chunk-F4WUVOLE.js";
9
+ import {
10
+ getDb,
11
+ init_client
12
+ } from "./chunk-AGIXZFHQ.js";
13
+ import {
14
+ badRequest,
15
+ notFound
16
+ } from "./chunk-EZYKRG4W.js";
17
+
18
+ // src/handlers/google-compat/interactions.ts
19
+ import { z } from "zod";
20
+ init_client();
21
+ init_ids();
22
+ function ensureTable() {
23
+ const db = getDb();
24
+ db.exec(`
25
+ CREATE TABLE IF NOT EXISTS google_interactions (
26
+ id TEXT PRIMARY KEY,
27
+ session_id TEXT NOT NULL,
28
+ seq INTEGER NOT NULL DEFAULT 1,
29
+ status TEXT NOT NULL DEFAULT 'completed',
30
+ environment_id TEXT,
31
+ created_at TEXT NOT NULL
32
+ )
33
+ `);
34
+ }
35
+ var CreateSchema = z.object({
36
+ model: z.string().optional(),
37
+ agent: z.string().optional(),
38
+ input: z.union([z.string(), z.array(z.unknown())]),
39
+ system_instruction: z.string().optional(),
40
+ tools: z.array(z.unknown()).optional(),
41
+ generation_config: z.record(z.unknown()).optional(),
42
+ previous_interaction_id: z.string().optional(),
43
+ environment: z.union([z.string(), z.object({ type: z.string() }).passthrough()]).optional(),
44
+ stream: z.boolean().optional()
45
+ });
46
+ function handleCreateInteraction(request) {
47
+ return routeWrap(request, async ({ auth }) => {
48
+ ensureTable();
49
+ const body = await request.json().catch(() => null);
50
+ const parsed = CreateSchema.safeParse(body);
51
+ if (!parsed.success) {
52
+ throw badRequest(`invalid body: ${parsed.error.issues.map((i) => i.message).join("; ")}`);
53
+ }
54
+ const data = parsed.data;
55
+ if (!data.model && !data.agent) {
56
+ throw badRequest("either 'model' or 'agent' is required");
57
+ }
58
+ const inputText = typeof data.input === "string" ? data.input : JSON.stringify(data.input);
59
+ const { handleCreateAgent, handleListAgents } = await import("./handlers/agents.js");
60
+ const { handleCreateSession } = await import("./handlers/sessions.js");
61
+ const { handlePostEvents } = await import("./handlers/events.js");
62
+ let agentId;
63
+ let environmentId;
64
+ if (data.previous_interaction_id) {
65
+ const db2 = getDb();
66
+ const prev = db2.prepare(
67
+ `SELECT session_id, environment_id FROM google_interactions WHERE id = ?`
68
+ ).get(data.previous_interaction_id);
69
+ if (!prev) throw notFound(`interaction not found: ${data.previous_interaction_id}`);
70
+ agentId = "";
71
+ environmentId = prev.environment_id ?? void 0;
72
+ const sessionId2 = prev.session_id;
73
+ const eventsReq2 = new Request(request.url.replace(/\/google\/v1beta\/interactions.*/, `/v1/sessions/${sessionId2}/events`), {
74
+ method: "POST",
75
+ headers: request.headers,
76
+ body: JSON.stringify({
77
+ events: [{ type: "user.message", content: [{ type: "text", text: inputText }] }]
78
+ })
79
+ });
80
+ const eventsRes2 = await handlePostEvents(eventsReq2, sessionId2);
81
+ if (!eventsRes2.ok) {
82
+ const err = await eventsRes2.json().catch(() => ({}));
83
+ throw badRequest(err.error?.message || `failed to send message: ${eventsRes2.status}`);
84
+ }
85
+ const result2 = await waitForCompletion(sessionId2);
86
+ const interactionId2 = `int_${newId("sesn").slice(5)}`;
87
+ const prevSeq = db2.prepare(
88
+ `SELECT MAX(seq) as maxSeq FROM google_interactions WHERE session_id = ?`
89
+ ).get(sessionId2);
90
+ const seq = (prevSeq?.maxSeq ?? 0) + 1;
91
+ db2.prepare(
92
+ `INSERT INTO google_interactions (id, session_id, seq, status, environment_id, created_at) VALUES (?, ?, ?, ?, ?, ?)`
93
+ ).run(interactionId2, sessionId2, seq, result2.status, environmentId ?? null, (/* @__PURE__ */ new Date()).toISOString());
94
+ return jsonOk(buildResponse(interactionId2, result2, environmentId));
95
+ }
96
+ const agentName = data.agent || `auto-${(data.model || "gemini-2.5-flash").replace(/[^a-z0-9-]/g, "-")}`;
97
+ const listReq = new Request(request.url.replace(/\/google\/v1beta\/interactions.*/, `/v1/agents?limit=1000`), {
98
+ headers: request.headers
99
+ });
100
+ const listRes = await handleListAgents(listReq);
101
+ const listBody = await listRes.json();
102
+ const existing = listBody.data?.find((a) => a.name === agentName);
103
+ if (existing) {
104
+ agentId = existing.id;
105
+ } else {
106
+ const modelId = data.model || "gemini-2.5-flash";
107
+ const createReq = new Request(request.url.replace(/\/google\/v1beta\/interactions.*/, `/v1/agents`), {
108
+ method: "POST",
109
+ headers: request.headers,
110
+ body: JSON.stringify({
111
+ name: agentName,
112
+ model: { id: modelId },
113
+ system: data.system_instruction ?? null
114
+ })
115
+ });
116
+ const createRes = await handleCreateAgent(createReq);
117
+ if (!createRes.ok) {
118
+ const err = await createRes.json().catch(() => ({}));
119
+ throw badRequest(err.error?.message || `failed to create agent: ${createRes.status}`);
120
+ }
121
+ const created = await createRes.json();
122
+ agentId = created.id;
123
+ }
124
+ const { listEnvironments } = await import("./db/environments.js");
125
+ const envs = listEnvironments({ includeArchived: false, limit: 10 });
126
+ const readyEnv = envs.find((e) => e.state === "ready");
127
+ if (readyEnv) {
128
+ environmentId = readyEnv.id;
129
+ } else {
130
+ const { handleCreateEnvironment } = await import("./handlers/environments.js");
131
+ const envReq = new Request(request.url.replace(/\/google\/v1beta\/interactions.*/, `/v1/environments`), {
132
+ method: "POST",
133
+ headers: request.headers,
134
+ body: JSON.stringify({ name: `google-compat-${Date.now()}` })
135
+ });
136
+ const envRes = await handleCreateEnvironment(envReq);
137
+ if (envRes.ok) {
138
+ const envBody = await envRes.json();
139
+ environmentId = envBody.id;
140
+ }
141
+ }
142
+ if (!environmentId) throw badRequest("no environment available");
143
+ const sessReq = new Request(request.url.replace(/\/google\/v1beta\/interactions.*/, `/v1/sessions`), {
144
+ method: "POST",
145
+ headers: request.headers,
146
+ body: JSON.stringify({
147
+ agent: agentId,
148
+ environment_id: environmentId
149
+ })
150
+ });
151
+ const sessRes = await handleCreateSession(sessReq);
152
+ if (!sessRes.ok) {
153
+ const err = await sessRes.json().catch(() => ({}));
154
+ throw badRequest(err.error?.message || `failed to create session: ${sessRes.status}`);
155
+ }
156
+ const sessBody = await sessRes.json();
157
+ const sessionId = sessBody.id;
158
+ const eventsReq = new Request(request.url.replace(/\/google\/v1beta\/interactions.*/, `/v1/sessions/${sessionId}/events`), {
159
+ method: "POST",
160
+ headers: request.headers,
161
+ body: JSON.stringify({
162
+ events: [{ type: "user.message", content: [{ type: "text", text: inputText }] }]
163
+ })
164
+ });
165
+ const eventsRes = await handlePostEvents(eventsReq, sessionId);
166
+ if (!eventsRes.ok) {
167
+ const err = await eventsRes.json().catch(() => ({}));
168
+ throw badRequest(err.error?.message || `failed to send message: ${eventsRes.status}`);
169
+ }
170
+ const result = await waitForCompletion(sessionId);
171
+ const interactionId = `int_${newId("sesn").slice(5)}`;
172
+ const db = getDb();
173
+ db.prepare(
174
+ `INSERT INTO google_interactions (id, session_id, seq, status, environment_id, created_at) VALUES (?, ?, ?, ?, ?, ?)`
175
+ ).run(interactionId, sessionId, 1, result.status, environmentId ?? null, (/* @__PURE__ */ new Date()).toISOString());
176
+ return jsonOk(buildResponse(interactionId, result, environmentId));
177
+ });
178
+ }
179
+ async function waitForCompletion(sessionId) {
180
+ const { subscribe } = await import("./sessions/bus.js");
181
+ const { listEvents } = await import("./db/events.js");
182
+ return new Promise((resolve) => {
183
+ const steps = [];
184
+ let outputText = "";
185
+ let inputTokens = 0;
186
+ let outputTokens = 0;
187
+ let status = "completed";
188
+ let resolved = false;
189
+ const timeout = setTimeout(() => {
190
+ if (resolved) return;
191
+ resolved = true;
192
+ sub.unsubscribe();
193
+ resolve({
194
+ status: "failed",
195
+ steps,
196
+ usage: { total_input_tokens: inputTokens, total_output_tokens: outputTokens, total_tokens: inputTokens + outputTokens },
197
+ outputText
198
+ });
199
+ }, 5 * 6e4);
200
+ function finish() {
201
+ if (resolved) return;
202
+ resolved = true;
203
+ clearTimeout(timeout);
204
+ sub.unsubscribe();
205
+ resolve({
206
+ status,
207
+ steps,
208
+ usage: { total_input_tokens: inputTokens, total_output_tokens: outputTokens, total_tokens: inputTokens + outputTokens },
209
+ outputText
210
+ });
211
+ }
212
+ function handleEvent(event) {
213
+ if (resolved) return;
214
+ if (event.type === "agent.message") {
215
+ const content = event.content;
216
+ const text = content?.filter((c) => c.type === "text").map((c) => c.text).join("") ?? "";
217
+ if (text) {
218
+ outputText += text;
219
+ steps.push({ type: "model_output", content: [{ type: "text", text }] });
220
+ }
221
+ } else if (event.type === "agent.tool_use") {
222
+ steps.push({
223
+ type: "function_call",
224
+ id: event.tool_use_id ?? "",
225
+ name: event.name ?? "",
226
+ arguments: event.input ?? {}
227
+ });
228
+ } else if (event.type === "agent.tool_result") {
229
+ steps.push({
230
+ type: "code_execution_result",
231
+ call_id: event.tool_use_id ?? "",
232
+ result: JSON.stringify(event.content ?? "")
233
+ });
234
+ } else if (event.type === "agent.custom_tool_use") {
235
+ status = "requires_action";
236
+ steps.push({
237
+ type: "function_call",
238
+ id: event.tool_use_id ?? "",
239
+ name: event.name ?? "",
240
+ arguments: event.input ?? {}
241
+ });
242
+ } else if (event.type === "span.model_request_end") {
243
+ const mu = event.model_usage;
244
+ inputTokens += mu?.input_tokens ?? 0;
245
+ outputTokens += mu?.output_tokens ?? 0;
246
+ } else if (event.type === "session.status_idle") {
247
+ const stopReason = event.stop_reason;
248
+ if (stopReason === "error") status = "failed";
249
+ else if (status !== "requires_action") status = "completed";
250
+ finish();
251
+ } else if (event.type === "session.error") {
252
+ status = "failed";
253
+ }
254
+ }
255
+ const sub = subscribe(sessionId, 0, handleEvent);
256
+ if (resolved) {
257
+ clearTimeout(timeout);
258
+ }
259
+ });
260
+ }
261
+ function buildResponse(id, result, environmentId) {
262
+ const now = (/* @__PURE__ */ new Date()).toISOString();
263
+ return {
264
+ id,
265
+ created: now,
266
+ updated: now,
267
+ status: result.status,
268
+ steps: result.steps,
269
+ usage: result.usage,
270
+ environment_id: environmentId
271
+ };
272
+ }
273
+
274
+ export {
275
+ handleCreateInteraction
276
+ };
@@ -25,14 +25,14 @@ import {
25
25
  jsonOk,
26
26
  paginatedOk,
27
27
  routeWrap
28
- } from "./chunk-XOWRUT4X.js";
28
+ } from "./chunk-4EKHW6VS.js";
29
29
  import {
30
30
  forwardToAnthropic
31
31
  } from "./chunk-JFHYXFAL.js";
32
32
  import {
33
33
  runTurn,
34
34
  writePermissionResponse
35
- } from "./chunk-AKGWEACL.js";
35
+ } from "./chunk-KYKVHH7I.js";
36
36
  import {
37
37
  enqueueTurn
38
38
  } from "./chunk-B3W3E5CS.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  runTurn
3
- } from "./chunk-AKGWEACL.js";
3
+ } from "./chunk-KYKVHH7I.js";
4
4
  import {
5
5
  enqueueTurn
6
6
  } from "./chunk-B3W3E5CS.js";
@@ -19,15 +19,15 @@ import {
19
19
  } from "./chunk-3MQ2FWXS.js";
20
20
  import {
21
21
  installShutdownHandlers
22
- } from "./chunk-S6HILC3F.js";
22
+ } from "./chunk-ZACPJA3G.js";
23
23
  import {
24
24
  runSweep
25
- } from "./chunk-T3TNJHED.js";
25
+ } from "./chunk-K3LM6O44.js";
26
26
  import {
27
27
  fillWarmPools,
28
28
  reconcileDockerOrphanSandboxes,
29
29
  reconcileOrphanSandboxes
30
- } from "./chunk-U4SVWPLC.js";
30
+ } from "./chunk-ZCCHLDLC.js";
31
31
  import {
32
32
  appendEvent,
33
33
  installPayloadRedactor
@@ -48,7 +48,7 @@ import {
48
48
  } from "./chunk-EFOIR7R3.js";
49
49
  import {
50
50
  tryResolveProvider
51
- } from "./chunk-C7P2TYOG.js";
51
+ } from "./chunk-XLMNSDUJ.js";
52
52
  import {
53
53
  getEnvironment
54
54
  } from "./chunk-NSUVDKNC.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  jsonOk,
3
3
  routeWrap
4
- } from "./chunk-XOWRUT4X.js";
4
+ } from "./chunk-4EKHW6VS.js";
5
5
 
6
6
  // src/handlers/whoami.ts
7
7
  function handleWhoami(request) {