@agentstep/agent-sdk 0.5.0 → 0.5.2
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.
- package/dist/auth/middleware.js +8 -8
- package/dist/backends/claude/args.js +7 -7
- package/dist/backends/claude/index.js +12 -12
- package/dist/backends/claude/wrapper-script.js +1 -1
- package/dist/backends/codex/auth.js +6 -6
- package/dist/backends/codex/index.js +11 -11
- package/dist/backends/factory/auth.js +6 -6
- package/dist/backends/factory/index.js +13 -13
- package/dist/backends/gemini/auth.js +6 -6
- package/dist/backends/gemini/index.js +11 -11
- package/dist/backends/opencode/auth.js +6 -6
- package/dist/backends/opencode/index.js +15 -15
- package/dist/backends/pi/auth.js +6 -6
- package/dist/backends/pi/index.js +13 -13
- package/dist/backends/registry.js +31 -31
- package/dist/backends/shared/wrap-prompt.js +1 -1
- package/dist/chunk-3LUY2POB.js +50 -0
- package/dist/{chunk-3PA4NXRP.js → chunk-3VPTHB7I.js} +2 -2
- package/dist/{chunk-YMCS6AB7.js → chunk-4236UQNZ.js} +2 -2
- package/dist/{chunk-HMOSAXVZ.js → chunk-4A4F4L4H.js} +2 -2
- package/dist/{chunk-JFOHGHW5.js → chunk-4B5H2MFO.js} +59 -16
- package/dist/{chunk-OZFSKR2W.js → chunk-5525T7PL.js} +4 -4
- package/dist/{chunk-AXBM7HAR.js → chunk-5EFY6UGV.js} +1 -1
- package/dist/chunk-5UTTNXNJ.js +166 -0
- package/dist/{chunk-4RDILRIO.js → chunk-5YGYUGDQ.js} +3 -3
- package/dist/{chunk-HWR2HYQJ.js → chunk-6DPJVMEC.js} +1 -1
- package/dist/{chunk-PNZF7HIU.js → chunk-6KJS42ZL.js} +8 -7
- package/dist/{chunk-LQP6XGFU.js → chunk-6KQFP32G.js} +3 -3
- package/dist/{chunk-DMMNAQUM.js → chunk-6L4AGHAV.js} +2 -2
- package/dist/{chunk-WEC625LQ.js → chunk-6TJBZXD4.js} +1 -1
- package/dist/{chunk-QTXAWC5J.js → chunk-6URMGCAC.js} +2 -2
- package/dist/{chunk-DJZSPWG2.js → chunk-6WUYI3DJ.js} +4 -4
- package/dist/{chunk-H6OT5GUL.js → chunk-7APAOJIZ.js} +3 -3
- package/dist/{chunk-HVLYE4S5.js → chunk-7EDLLXFQ.js} +1 -1
- package/dist/chunk-7IYL2O7H.js +185 -0
- package/dist/{chunk-KGBKIJPF.js → chunk-7JAUY5SG.js} +3 -3
- package/dist/{chunk-NDTIDWBE.js → chunk-7XIAKW75.js} +1 -1
- package/dist/{chunk-TUEBRYPZ.js → chunk-A2W3USEZ.js} +1 -1
- package/dist/chunk-ACPP4KN7.js +164 -0
- package/dist/{chunk-22OUZJAV.js → chunk-AESA3ARX.js} +3 -3
- package/dist/{chunk-Z4LFLXRR.js → chunk-AIAF5ZZA.js} +1 -1
- package/dist/{chunk-GIMDS46L.js → chunk-ANS2TQYT.js} +3 -3
- package/dist/{chunk-T3FQPTOA.js → chunk-BCBDHUFY.js} +2 -2
- package/dist/{chunk-MCWCRZM4.js → chunk-BLTCDZ3O.js} +4 -4
- package/dist/{chunk-VP527YC5.js → chunk-BYIU4WAQ.js} +3 -3
- package/dist/{chunk-L26TVIB6.js → chunk-C52BVTYC.js} +8 -8
- package/dist/{chunk-EWIWVXXP.js → chunk-CA76BJWL.js} +44 -14
- package/dist/{chunk-DKLHYSPW.js → chunk-DZGFZMUE.js} +5 -5
- package/dist/{chunk-R3QHLKJG.js → chunk-E35XHOFL.js} +5 -5
- package/dist/{chunk-PZNAQBHQ.js → chunk-FILGQF2G.js} +2 -2
- package/dist/{chunk-JP7Y3TKK.js → chunk-FSVDF57K.js} +5 -5
- package/dist/{chunk-S7DFMJR5.js → chunk-FWJOTEVY.js} +3 -3
- package/dist/{chunk-XSNJ7NT2.js → chunk-G4DTLYOD.js} +1 -1
- package/dist/{chunk-IEZFRNLC.js → chunk-GBLR2CPP.js} +107 -9
- package/dist/{chunk-7SY65LWY.js → chunk-GEC3NFYO.js} +4 -4
- package/dist/{chunk-GLKWJESP.js → chunk-GZZHVIEG.js} +2 -2
- package/dist/{chunk-NHAYKVXG.js → chunk-IAKR572X.js} +8 -8
- package/dist/{chunk-GFSRNOPI.js → chunk-IBUFLAAJ.js} +7 -7
- package/dist/{chunk-OKT2J4ZB.js → chunk-IZ5TUMCF.js} +23 -7
- package/dist/{chunk-W3JMIUHV.js → chunk-KQTTKYZY.js} +1 -1
- package/dist/{chunk-AJL3T5JS.js → chunk-L2DCOJTQ.js} +3 -3
- package/dist/{chunk-JLUCJMAQ.js → chunk-LA6IFUVR.js} +70 -24
- package/dist/{chunk-AB7MPL3H.js → chunk-LW4OCFIP.js} +9 -7
- package/dist/{chunk-BCIFFAGW.js → chunk-M3752GFZ.js} +15 -5
- package/dist/{chunk-5U5LRAFJ.js → chunk-MTLM36QD.js} +2 -2
- package/dist/{chunk-A6VORSKD.js → chunk-MV42BTU3.js} +1 -1
- package/dist/{chunk-5MERXOLJ.js → chunk-NRX5WHHN.js} +4 -4
- package/dist/{chunk-T3HMVHDG.js → chunk-O2X4XBU7.js} +1 -1
- package/dist/{chunk-2YZOIFVN.js → chunk-P4NU74SP.js} +47 -0
- package/dist/{chunk-TVODT2UR.js → chunk-P4OCCRQW.js} +1 -1
- package/dist/{chunk-YXOCKQZU.js → chunk-P4VJADXA.js} +2 -2
- package/dist/{chunk-6QZ23WRF.js → chunk-P6LESAPO.js} +54 -20
- package/dist/{chunk-HY3T4YJV.js → chunk-PICGSLMG.js} +5 -5
- package/dist/{chunk-64IQEPSD.js → chunk-PQKIXSEP.js} +2 -2
- package/dist/{chunk-GV6GUSCP.js → chunk-Q2JYAAJO.js} +9 -9
- package/dist/{chunk-IU457W7Q.js → chunk-QBJOYOVF.js} +2 -1
- package/dist/{chunk-MAJWADF7.js → chunk-RZOCX57A.js} +2 -2
- package/dist/{chunk-4D345E27.js → chunk-SQZPJFBF.js} +2 -2
- package/dist/{chunk-OSNMIPHV.js → chunk-TE6KCRPP.js} +1 -1
- package/dist/{chunk-Z6VZYRVN.js → chunk-TF36SWHG.js} +2 -2
- package/dist/{chunk-KUWJJD6O.js → chunk-TSR33JMZ.js} +14 -5
- package/dist/{chunk-L3IACZ72.js → chunk-TWH4UH6G.js} +1 -1
- package/dist/{chunk-445EL6J5.js → chunk-UAEVL47I.js} +1 -1
- package/dist/{chunk-X6QIWZ33.js → chunk-UGH5JDXX.js} +3 -3
- package/dist/{chunk-FSQ4HGHX.js → chunk-UJW3I3TX.js} +3 -3
- package/dist/{chunk-I26QP3A3.js → chunk-UQZFFG7U.js} +1 -1
- package/dist/{chunk-ILHIHMO3.js → chunk-VC5DELR4.js} +37 -2
- package/dist/{chunk-NKQVOAWN.js → chunk-VMLXV2H6.js} +1 -1
- package/dist/{chunk-FCUXFLNK.js → chunk-VY6IWBSK.js} +17 -4
- package/dist/{chunk-6CVQDSTS.js → chunk-WDAFSCYQ.js} +1 -1
- package/dist/{chunk-GCQDNUS2.js → chunk-WFRHLTKI.js} +3 -3
- package/dist/{chunk-R6EEBWM3.js → chunk-WRLCJNQF.js} +1 -1
- package/dist/{chunk-KKAJC3Z2.js → chunk-X4ARJS6I.js} +10 -10
- package/dist/{chunk-MQBMXAPU.js → chunk-Y4MI27HU.js} +1 -1
- package/dist/{chunk-PN3AWRMX.js → chunk-YDP3YA5D.js} +17 -17
- package/dist/{chunk-FVBDEOTZ.js → chunk-YE2RMJY7.js} +18 -4
- package/dist/{chunk-IRW7AYTP.js → chunk-YEWYRPN4.js} +42 -4
- package/dist/{chunk-24IDJ7LY.js → chunk-YL6IQUJC.js} +4 -4
- package/dist/{chunk-CLSGNQ7J.js → chunk-Z46R47QX.js} +8 -8
- package/dist/{chunk-STJNO6SL.js → chunk-Z6OPLBPQ.js} +1 -1
- package/dist/{chunk-RYJXSXCV.js → chunk-ZEJOFHR7.js} +5 -5
- package/dist/{chunk-EOJ66GY7.js → chunk-ZFGG62JW.js} +4 -4
- package/dist/config/index.js +5 -5
- package/dist/containers/client.js +6 -6
- package/dist/containers/exec.js +6 -6
- package/dist/containers/lifecycle.js +45 -43
- package/dist/containers/setup.js +9 -9
- package/dist/db/agents.js +6 -6
- package/dist/db/api_keys.js +5 -5
- package/dist/db/audit.js +3 -3
- package/dist/db/batch.js +10 -10
- package/dist/db/client.js +2 -2
- package/dist/db/credentials.js +3 -3
- package/dist/db/drizzle.js +4 -4
- package/dist/db/environments.js +6 -6
- package/dist/db/events.js +5 -5
- package/dist/db/files.js +5 -5
- package/dist/db/memory.js +13 -5
- package/dist/db/migrations.js +1 -1
- package/dist/db/proxy.js +5 -5
- package/dist/db/schema.js +5 -1
- package/dist/db/session-resources.js +5 -5
- package/dist/db/sessions.js +8 -8
- package/dist/db/sync.js +5 -5
- package/dist/db/tenants.js +3 -3
- package/dist/db/threads.js +27 -0
- package/dist/db/traces.js +5 -5
- package/dist/db/upstream_keys.js +3 -3
- package/dist/db/vaults.js +6 -6
- package/dist/dreaming/prompts.js +9 -0
- package/dist/dreaming/review.js +22 -0
- package/dist/handlers/agents.js +59 -59
- package/dist/handlers/api_keys.js +60 -60
- package/dist/handlers/audit.js +60 -60
- package/dist/handlers/batch.js +60 -60
- package/dist/handlers/credentials.js +60 -60
- package/dist/handlers/environments.js +60 -60
- package/dist/handlers/events.js +63 -63
- package/dist/handlers/files.js +60 -60
- package/dist/handlers/index.js +159 -144
- package/dist/handlers/license.js +59 -59
- package/dist/handlers/memory.js +66 -60
- package/dist/handlers/metrics.js +59 -59
- package/dist/handlers/models.js +60 -60
- package/dist/handlers/providers.js +59 -59
- package/dist/handlers/resources.js +59 -59
- package/dist/handlers/sessions.js +63 -62
- package/dist/handlers/settings.js +59 -59
- package/dist/handlers/skills-write.js +59 -59
- package/dist/handlers/skills.js +60 -60
- package/dist/handlers/stream.js +59 -59
- package/dist/handlers/tenants.js +60 -60
- package/dist/handlers/threads.js +70 -61
- package/dist/handlers/traces.js +60 -60
- package/dist/handlers/upstream_keys.js +62 -62
- package/dist/handlers/vaults.js +59 -59
- package/dist/handlers/whoami.js +59 -59
- package/dist/http.js +58 -58
- package/dist/index.js +72 -67
- package/dist/init.js +55 -55
- package/dist/lib/model-registry.js +6 -6
- package/dist/lib/skills-cache.js +6 -6
- package/dist/observability/otlp.js +12 -12
- package/dist/observability/redactor.js +8 -8
- package/dist/providers/fly.js +5 -5
- package/dist/providers/modal.js +5 -5
- package/dist/providers/registry.js +1 -1
- package/dist/providers/resolve-secrets.js +7 -7
- package/dist/providers/sprites.js +7 -7
- package/dist/providers/upstream-keys.js +12 -12
- package/dist/providers/vercel.js +6 -6
- package/dist/proxy/forward.js +6 -6
- package/dist/queue/index.js +6 -6
- package/dist/sessions/bus.js +10 -10
- package/dist/sessions/driver.js +48 -48
- package/dist/sessions/grader.js +5 -5
- package/dist/sessions/secrets.js +8 -8
- package/dist/sessions/sweeper.js +44 -44
- package/dist/sessions/threads.js +121 -55
- package/dist/shutdown.js +45 -45
- package/dist/sync/anthropic.js +10 -10
- package/dist/sync/container-file-sync.js +6 -6
- package/dist/sync/file-sync.js +17 -17
- package/dist/sync/memory-sync.js +79 -0
- package/package.json +1 -1
- package/dist/chunk-XTKTIFHC.js +0 -48
- package/dist/{chunk-UE6DNLSV.js → chunk-LT5PRO54.js} +0 -0
- package/dist/{dist-EY25RQ2S.js → dist-S64ZABZX.js} +3 -3
|
@@ -1,21 +1,21 @@
|
|
|
1
|
+
import {
|
|
2
|
+
resolveVaultSecrets
|
|
3
|
+
} from "./chunk-O2X4XBU7.js";
|
|
1
4
|
import {
|
|
2
5
|
dockerProvider
|
|
3
6
|
} from "./chunk-4XXQAVKE.js";
|
|
4
|
-
import {
|
|
5
|
-
resolveVaultSecrets
|
|
6
|
-
} from "./chunk-T3HMVHDG.js";
|
|
7
7
|
import {
|
|
8
8
|
appendEvent
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-NRX5WHHN.js";
|
|
10
10
|
import {
|
|
11
11
|
getSession,
|
|
12
12
|
getSessionRow,
|
|
13
13
|
setSessionSandbox
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-TSR33JMZ.js";
|
|
15
15
|
import {
|
|
16
16
|
deleteSprite,
|
|
17
17
|
listSprites
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-VMLXV2H6.js";
|
|
19
19
|
import {
|
|
20
20
|
allSessionSandboxes,
|
|
21
21
|
countInEnv,
|
|
@@ -24,12 +24,12 @@ import {
|
|
|
24
24
|
} from "./chunk-EFOIR7R3.js";
|
|
25
25
|
import {
|
|
26
26
|
resolveContainerProvider
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-LT5PRO54.js";
|
|
28
28
|
import {
|
|
29
29
|
getEnvironment,
|
|
30
30
|
getEnvironmentRow,
|
|
31
31
|
listEnvironments
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-7APAOJIZ.js";
|
|
33
33
|
import {
|
|
34
34
|
addWarm,
|
|
35
35
|
claimWarm,
|
|
@@ -40,13 +40,13 @@ import {
|
|
|
40
40
|
} from "./chunk-G7KUVNDY.js";
|
|
41
41
|
import {
|
|
42
42
|
getAgent
|
|
43
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-M3752GFZ.js";
|
|
44
44
|
import {
|
|
45
45
|
resolveBackend
|
|
46
|
-
} from "./chunk-
|
|
46
|
+
} from "./chunk-Q2JYAAJO.js";
|
|
47
47
|
import {
|
|
48
48
|
getConfig
|
|
49
|
-
} from "./chunk-
|
|
49
|
+
} from "./chunk-UGH5JDXX.js";
|
|
50
50
|
import {
|
|
51
51
|
init_clock,
|
|
52
52
|
nowMs
|
|
@@ -123,15 +123,22 @@ async function acquireForFirstTurn(sessionId) {
|
|
|
123
123
|
);
|
|
124
124
|
}
|
|
125
125
|
const config = getConfig();
|
|
126
|
-
|
|
127
|
-
|
|
126
|
+
const envObj = getEnvironment(row.environment_id);
|
|
127
|
+
const maxSandboxes = envObj?.config?.max_sandboxes ?? config.maxSandboxesPerEnv;
|
|
128
|
+
const active = countInEnv(env.id);
|
|
129
|
+
const warmCount = countWarm(env.id);
|
|
130
|
+
if (active + warmCount >= maxSandboxes) {
|
|
131
|
+
throw new ApiError(
|
|
132
|
+
503,
|
|
133
|
+
"server_busy",
|
|
134
|
+
`environment ${env.id} sandbox pool exhausted (${active} active + ${warmCount} warm, limit ${maxSandboxes})`
|
|
135
|
+
);
|
|
128
136
|
}
|
|
129
137
|
const agent = getAgent(row.agent_id, row.agent_version);
|
|
130
138
|
if (!agent) {
|
|
131
139
|
throw new ApiError(404, "not_found_error", "agent not found for session");
|
|
132
140
|
}
|
|
133
141
|
const backend = resolveBackend(agent.engine);
|
|
134
|
-
const envObj = getEnvironment(row.environment_id);
|
|
135
142
|
const provider = await resolveContainerProvider(envObj?.config?.provider);
|
|
136
143
|
const sessionForSecrets = getSession(sessionId);
|
|
137
144
|
const secrets = sessionForSecrets?.vault_ids?.length ? resolveVaultSecrets(sessionForSecrets.vault_ids) : {};
|
|
@@ -209,6 +216,7 @@ async function acquireForFirstTurn(sessionId) {
|
|
|
209
216
|
await provisionResources(name2, session.resources, sp);
|
|
210
217
|
}
|
|
211
218
|
}
|
|
219
|
+
await mountMemoryStores(name2, sessionId, sp);
|
|
212
220
|
register({
|
|
213
221
|
sandboxName: name2,
|
|
214
222
|
envId: env.id,
|
|
@@ -316,6 +324,7 @@ async function acquireForFirstTurn(sessionId) {
|
|
|
316
324
|
await provisionResources(name, session.resources, sp);
|
|
317
325
|
}
|
|
318
326
|
}
|
|
327
|
+
await mountMemoryStores(name, sessionId, sp);
|
|
319
328
|
register({
|
|
320
329
|
sandboxName: name,
|
|
321
330
|
envId: env.id,
|
|
@@ -337,7 +346,9 @@ async function replenishWarmPool(envId, engine, provider, secrets) {
|
|
|
337
346
|
if (target <= 0) return;
|
|
338
347
|
if (countWarm(envId) + countInflight(envId) >= target) return;
|
|
339
348
|
const cfg = getConfig();
|
|
340
|
-
|
|
349
|
+
const envObj = getEnvironment(envId);
|
|
350
|
+
const maxSandboxes = envObj?.config?.max_sandboxes ?? cfg.maxSandboxesPerEnv;
|
|
351
|
+
if (countInEnv(envId) + countWarm(envId) + countInflight(envId) >= maxSandboxes) return;
|
|
341
352
|
incrementInflight(envId);
|
|
342
353
|
try {
|
|
343
354
|
const sp = wrapProviderWithSecrets(provider, secrets);
|
|
@@ -391,7 +402,8 @@ async function fillOneEnv(env) {
|
|
|
391
402
|
try {
|
|
392
403
|
const provider = await resolveContainerProvider(env.config?.provider);
|
|
393
404
|
if (!provider.supportsWarmPool) return;
|
|
394
|
-
const
|
|
405
|
+
const engine = env.config?.default_engine ?? "claude";
|
|
406
|
+
const backend = resolveBackend(engine);
|
|
395
407
|
const needed = target - countWarm(env.id) - countInflight(env.id);
|
|
396
408
|
for (let i = 0; i < needed; i++) {
|
|
397
409
|
void replenishWarmPool(env.id, backend.name, provider, {});
|
|
@@ -507,6 +519,36 @@ async function provisionResources(sandboxName, resources, provider) {
|
|
|
507
519
|
}
|
|
508
520
|
}
|
|
509
521
|
}
|
|
522
|
+
async function mountMemoryStores(sandboxName, sessionId, provider) {
|
|
523
|
+
const { listResources: listSessionResources } = await import("./db/session-resources.js");
|
|
524
|
+
const { getMemoryStore, listMemories } = await import("./db/memory.js");
|
|
525
|
+
const resources = listSessionResources(sessionId);
|
|
526
|
+
const memStoreResources = resources.filter((r) => r.type === "memory_store" && r.memory_store_id);
|
|
527
|
+
if (memStoreResources.length === 0) return;
|
|
528
|
+
await provider.exec(sandboxName, ["mkdir", "-p", "/mnt/memory"]);
|
|
529
|
+
for (const r of memStoreResources) {
|
|
530
|
+
const store = getMemoryStore(r.memory_store_id);
|
|
531
|
+
if (!store) {
|
|
532
|
+
lcLog(`[lifecycle] memory store not found: ${r.memory_store_id}`);
|
|
533
|
+
continue;
|
|
534
|
+
}
|
|
535
|
+
const storeName = store.name.replace(/[^a-zA-Z0-9_.-]/g, "_");
|
|
536
|
+
const storeDir = `/mnt/memory/${storeName}`;
|
|
537
|
+
await provider.exec(sandboxName, ["mkdir", "-p", storeDir]);
|
|
538
|
+
const memories = listMemories(store.id);
|
|
539
|
+
for (const mem of memories) {
|
|
540
|
+
const memPath = `${storeDir}/${mem.path}`;
|
|
541
|
+
const dir = memPath.substring(0, memPath.lastIndexOf("/"));
|
|
542
|
+
if (dir && dir !== storeDir) {
|
|
543
|
+
await provider.exec(sandboxName, ["mkdir", "-p", dir]);
|
|
544
|
+
}
|
|
545
|
+
await provider.exec(sandboxName, ["sh", "-c", 'cat > "$1"', "sh", memPath], {
|
|
546
|
+
stdin: mem.content
|
|
547
|
+
});
|
|
548
|
+
}
|
|
549
|
+
lcLog(`[lifecycle] ${sessionId} mounted ${memories.length} memories from store "${store.name}" at ${storeDir}`);
|
|
550
|
+
}
|
|
551
|
+
}
|
|
510
552
|
async function releaseSession(sessionId) {
|
|
511
553
|
const entry = unregister(sessionId);
|
|
512
554
|
const row = getSessionRow(sessionId);
|
|
@@ -574,6 +616,7 @@ export {
|
|
|
574
616
|
replenishWarmPool,
|
|
575
617
|
fillWarmPools,
|
|
576
618
|
provisionResources,
|
|
619
|
+
mountMemoryStores,
|
|
577
620
|
releaseSession,
|
|
578
621
|
reconcileOrphanSandboxes,
|
|
579
622
|
reconcileDockerOrphanSandboxes
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
jsonOk,
|
|
8
8
|
paginatedOk,
|
|
9
9
|
routeWrap
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-6URMGCAC.js";
|
|
11
11
|
import {
|
|
12
12
|
archiveVault,
|
|
13
13
|
createVault,
|
|
@@ -19,14 +19,14 @@ import {
|
|
|
19
19
|
listVaults,
|
|
20
20
|
setEntry,
|
|
21
21
|
updateVault
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-BYIU4WAQ.js";
|
|
23
23
|
import {
|
|
24
24
|
getAgent
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-M3752GFZ.js";
|
|
26
26
|
import {
|
|
27
27
|
getDb,
|
|
28
28
|
init_client
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-KQTTKYZY.js";
|
|
30
30
|
import {
|
|
31
31
|
badRequest,
|
|
32
32
|
conflict,
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import {
|
|
2
|
+
archiveThread,
|
|
3
|
+
getThread,
|
|
4
|
+
listThreads
|
|
5
|
+
} from "./chunk-7IYL2O7H.js";
|
|
6
|
+
import {
|
|
7
|
+
assertResourceTenant
|
|
8
|
+
} from "./chunk-23UKWXJH.js";
|
|
9
|
+
import {
|
|
10
|
+
jsonOk,
|
|
11
|
+
paginatedOk,
|
|
12
|
+
routeWrap
|
|
13
|
+
} from "./chunk-6URMGCAC.js";
|
|
14
|
+
import {
|
|
15
|
+
subscribe
|
|
16
|
+
} from "./chunk-NRX5WHHN.js";
|
|
17
|
+
import {
|
|
18
|
+
getSession
|
|
19
|
+
} from "./chunk-TSR33JMZ.js";
|
|
20
|
+
import {
|
|
21
|
+
listEvents,
|
|
22
|
+
rowToManagedEvent
|
|
23
|
+
} from "./chunk-7JAUY5SG.js";
|
|
24
|
+
import {
|
|
25
|
+
getDb,
|
|
26
|
+
init_client
|
|
27
|
+
} from "./chunk-KQTTKYZY.js";
|
|
28
|
+
import {
|
|
29
|
+
badRequest,
|
|
30
|
+
notFound
|
|
31
|
+
} from "./chunk-EZYKRG4W.js";
|
|
32
|
+
|
|
33
|
+
// src/handlers/threads.ts
|
|
34
|
+
init_client();
|
|
35
|
+
function loadSession(auth, sessionId) {
|
|
36
|
+
const row = getDb().prepare(`SELECT tenant_id FROM sessions WHERE id = ?`).get(sessionId);
|
|
37
|
+
if (!row) throw notFound(`session ${sessionId} not found`);
|
|
38
|
+
assertResourceTenant(auth, row.tenant_id, `session ${sessionId} not found`);
|
|
39
|
+
const session = getSession(sessionId);
|
|
40
|
+
if (!session) throw notFound(`session ${sessionId} not found`);
|
|
41
|
+
return session;
|
|
42
|
+
}
|
|
43
|
+
function handleListThreads(request, sessionId) {
|
|
44
|
+
return routeWrap(request, async ({ auth }) => {
|
|
45
|
+
loadSession(auth, sessionId);
|
|
46
|
+
const url = new URL(request.url);
|
|
47
|
+
const limit = url.searchParams.get("limit");
|
|
48
|
+
const order = url.searchParams.get("order");
|
|
49
|
+
const requestedLimit = limit ? Number(limit) : 50;
|
|
50
|
+
const data = listThreads(sessionId, {
|
|
51
|
+
limit: requestedLimit,
|
|
52
|
+
order: order ?? void 0
|
|
53
|
+
});
|
|
54
|
+
return paginatedOk(data, requestedLimit);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
function handleGetThread(request, sessionId, threadId) {
|
|
58
|
+
return routeWrap(request, async ({ auth }) => {
|
|
59
|
+
loadSession(auth, sessionId);
|
|
60
|
+
const thread = getThread(sessionId, threadId);
|
|
61
|
+
if (!thread) throw notFound(`thread ${threadId} not found`);
|
|
62
|
+
return jsonOk(thread);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
function handleArchiveThread(request, sessionId, threadId) {
|
|
66
|
+
return routeWrap(request, async ({ auth }) => {
|
|
67
|
+
loadSession(auth, sessionId);
|
|
68
|
+
const existing = getThread(sessionId, threadId);
|
|
69
|
+
if (!existing) throw notFound(`thread ${threadId} not found`);
|
|
70
|
+
if (existing.status !== "idle") {
|
|
71
|
+
throw badRequest(`cannot archive thread in status "${existing.status}" \u2014 must be idle`);
|
|
72
|
+
}
|
|
73
|
+
const archived = archiveThread(sessionId, threadId);
|
|
74
|
+
if (!archived) throw notFound(`thread ${threadId} not found`);
|
|
75
|
+
return jsonOk(archived);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
function handleListThreadEvents(request, sessionId, threadId) {
|
|
79
|
+
return routeWrap(request, async ({ auth }) => {
|
|
80
|
+
loadSession(auth, sessionId);
|
|
81
|
+
const thread = getThread(sessionId, threadId);
|
|
82
|
+
if (!thread) throw notFound(`thread ${threadId} not found`);
|
|
83
|
+
const url = new URL(request.url);
|
|
84
|
+
const limit = url.searchParams.get("limit");
|
|
85
|
+
const order = url.searchParams.get("order");
|
|
86
|
+
const afterSeq = url.searchParams.get("after_seq");
|
|
87
|
+
const requestedLimit = limit ? Number(limit) : 50;
|
|
88
|
+
const allEvents = listEvents(sessionId, {
|
|
89
|
+
limit: 500,
|
|
90
|
+
// fetch more than needed since we filter
|
|
91
|
+
order: order ?? "asc",
|
|
92
|
+
afterSeq: afterSeq ? Number(afterSeq) : void 0
|
|
93
|
+
});
|
|
94
|
+
const threadEvents = allEvents.filter((e) => {
|
|
95
|
+
const payload = JSON.parse(e.payload_json);
|
|
96
|
+
return payload.thread_id === threadId || e.type.startsWith("session.thread_");
|
|
97
|
+
}).slice(0, requestedLimit).map(rowToManagedEvent);
|
|
98
|
+
return paginatedOk(threadEvents, requestedLimit);
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
function handleStreamThreadEvents(request, sessionId, threadId) {
|
|
102
|
+
return routeWrap(request, async ({ auth }) => {
|
|
103
|
+
loadSession(auth, sessionId);
|
|
104
|
+
const thread = getThread(sessionId, threadId);
|
|
105
|
+
if (!thread) throw notFound(`thread ${threadId} not found`);
|
|
106
|
+
const url = new URL(request.url);
|
|
107
|
+
const lastEventId = request.headers.get("last-event-id");
|
|
108
|
+
const afterSeq = lastEventId ? Number(lastEventId) : Number(url.searchParams.get("after_seq") ?? "0");
|
|
109
|
+
const encoder = new TextEncoder();
|
|
110
|
+
let controller;
|
|
111
|
+
const stream = new ReadableStream({
|
|
112
|
+
start(c) {
|
|
113
|
+
controller = c;
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
const write = (payload) => {
|
|
117
|
+
try {
|
|
118
|
+
controller.enqueue(encoder.encode(payload));
|
|
119
|
+
} catch {
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
const sub = subscribe(
|
|
123
|
+
sessionId,
|
|
124
|
+
Number.isFinite(afterSeq) ? afterSeq : 0,
|
|
125
|
+
(evt) => {
|
|
126
|
+
if (evt.thread_id === threadId) {
|
|
127
|
+
write(`id: ${evt.seq}
|
|
128
|
+
event: ${evt.type}
|
|
129
|
+
data: ${JSON.stringify(evt)}
|
|
130
|
+
|
|
131
|
+
`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
);
|
|
135
|
+
const keepalive = setInterval(() => {
|
|
136
|
+
write(`data: {"type":"ping"}
|
|
137
|
+
|
|
138
|
+
`);
|
|
139
|
+
}, 15e3);
|
|
140
|
+
const abort = () => {
|
|
141
|
+
clearInterval(keepalive);
|
|
142
|
+
sub.unsubscribe();
|
|
143
|
+
try {
|
|
144
|
+
controller.close();
|
|
145
|
+
} catch {
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
request.signal.addEventListener("abort", abort);
|
|
149
|
+
return new Response(stream, {
|
|
150
|
+
headers: {
|
|
151
|
+
"Content-Type": "text/event-stream",
|
|
152
|
+
"Cache-Control": "no-cache",
|
|
153
|
+
Connection: "keep-alive",
|
|
154
|
+
"X-Accel-Buffering": "no"
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
export {
|
|
161
|
+
handleListThreads,
|
|
162
|
+
handleGetThread,
|
|
163
|
+
handleArchiveThread,
|
|
164
|
+
handleListThreadEvents,
|
|
165
|
+
handleStreamThreadEvents
|
|
166
|
+
};
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
jsonOk,
|
|
3
3
|
routeWrap
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-6URMGCAC.js";
|
|
5
5
|
import {
|
|
6
6
|
resolveContainerProvider
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-LT5PRO54.js";
|
|
8
8
|
import {
|
|
9
9
|
getConfig
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-UGH5JDXX.js";
|
|
11
11
|
|
|
12
12
|
// src/handlers/providers.ts
|
|
13
13
|
var LOCAL_PROVIDERS = ["docker", "apple-container", "podman"];
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
buildClaudeArgs,
|
|
3
|
-
buildClaudeAuthEnv
|
|
4
|
-
} from "./chunk-GIMDS46L.js";
|
|
5
1
|
import {
|
|
6
2
|
PERMISSION_BRIDGE_DIR,
|
|
7
3
|
PERMISSION_HOOK_SCRIPT_PATH,
|
|
@@ -19,13 +15,17 @@ import {
|
|
|
19
15
|
import {
|
|
20
16
|
createClaudeTranslator
|
|
21
17
|
} from "./chunk-JFYE5BFI.js";
|
|
18
|
+
import {
|
|
19
|
+
buildClaudeArgs,
|
|
20
|
+
buildClaudeAuthEnv
|
|
21
|
+
} from "./chunk-ANS2TQYT.js";
|
|
22
22
|
import {
|
|
23
23
|
CLAUDE_WRAPPER_PATH,
|
|
24
24
|
installClaudeWrapper
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-QBJOYOVF.js";
|
|
26
26
|
import {
|
|
27
27
|
getConfig
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-UGH5JDXX.js";
|
|
29
29
|
|
|
30
30
|
// src/backends/claude/index.ts
|
|
31
31
|
function buildTurn(input) {
|
|
@@ -33,7 +33,8 @@ function buildTurn(input) {
|
|
|
33
33
|
const argsBase = buildClaudeArgs({
|
|
34
34
|
agent,
|
|
35
35
|
claudeSessionId: backendSessionId,
|
|
36
|
-
confirmationMode: agent.confirmation_mode
|
|
36
|
+
confirmationMode: agent.confirmation_mode,
|
|
37
|
+
memoryStores: input.memoryStores
|
|
37
38
|
});
|
|
38
39
|
const env = buildClaudeAuthEnv();
|
|
39
40
|
const customTools = agent.tools.filter((t) => t.type === "custom");
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveContainerProvider
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-LT5PRO54.js";
|
|
4
4
|
import {
|
|
5
5
|
getEnvironmentRow,
|
|
6
6
|
updateEnvironmentState
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-7APAOJIZ.js";
|
|
8
8
|
import {
|
|
9
9
|
installClaudeWrapper
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-QBJOYOVF.js";
|
|
11
11
|
import {
|
|
12
12
|
init_ids,
|
|
13
13
|
newId
|
|
@@ -10,10 +10,10 @@ import {
|
|
|
10
10
|
import {
|
|
11
11
|
getDrizzle,
|
|
12
12
|
init_drizzle
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-FILGQF2G.js";
|
|
14
14
|
import {
|
|
15
15
|
schema_exports
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-VC5DELR4.js";
|
|
17
17
|
|
|
18
18
|
// src/db/files.ts
|
|
19
19
|
init_drizzle();
|
|
@@ -4,13 +4,13 @@ import {
|
|
|
4
4
|
} from "./chunk-D2XITRN6.js";
|
|
5
5
|
import {
|
|
6
6
|
authenticateAndIntercept
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-WFRHLTKI.js";
|
|
8
8
|
import {
|
|
9
9
|
checkAndBump
|
|
10
10
|
} from "./chunk-HVUWXUUI.js";
|
|
11
11
|
import {
|
|
12
12
|
ensureInitialized
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-YDP3YA5D.js";
|
|
14
14
|
import {
|
|
15
15
|
captureException
|
|
16
16
|
} from "./chunk-3MQ2FWXS.js";
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import {
|
|
2
2
|
listTraces
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-G4DTLYOD.js";
|
|
4
4
|
import {
|
|
5
5
|
jsonOk,
|
|
6
6
|
routeWrap
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-6URMGCAC.js";
|
|
8
8
|
import {
|
|
9
9
|
exportTrace
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-FSVDF57K.js";
|
|
11
11
|
import {
|
|
12
12
|
listEventsByTrace,
|
|
13
13
|
rowToManagedEvent
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-7JAUY5SG.js";
|
|
15
15
|
import {
|
|
16
16
|
badRequest,
|
|
17
17
|
notFound
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
DEFAULT_TENANT_ID
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-UQZFFG7U.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-
|
|
16
|
+
} from "./chunk-FILGQF2G.js";
|
|
17
17
|
import {
|
|
18
18
|
schema_exports
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-VC5DELR4.js";
|
|
20
20
|
|
|
21
21
|
// src/db/environments.ts
|
|
22
22
|
init_drizzle();
|