openfox 1.5.3 → 1.6.0

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.
@@ -2,11 +2,11 @@ import {
2
2
  maybeAutoCompactContext,
3
3
  performManualContextCompaction,
4
4
  resolveCompactionStatsIdentity
5
- } from "./chunk-QJIHXG4P.js";
6
- import "./chunk-JHL5ZO3K.js";
5
+ } from "./chunk-GBBTJ6ND.js";
6
+ import "./chunk-NBU6KIOD.js";
7
7
  import "./chunk-574HZVLE.js";
8
8
  import "./chunk-XFXOSPYH.js";
9
- import "./chunk-NW7PIZH3.js";
9
+ import "./chunk-CIXMZ73F.js";
10
10
  import "./chunk-WQ4W5H6A.js";
11
11
  import "./chunk-EBOKO2PW.js";
12
12
  import "./chunk-22CTURMH.js";
@@ -22,4 +22,4 @@ export {
22
22
  performManualContextCompaction,
23
23
  resolveCompactionStatsIdentity
24
24
  };
25
- //# sourceMappingURL=auto-compaction-DDQPVS7Z.js.map
25
+ //# sourceMappingURL=auto-compaction-BRT6SDEP.js.map
@@ -4,15 +4,15 @@ import {
4
4
  } from "./chunk-QDEKU5RL.js";
5
5
  import {
6
6
  runChatTurn
7
- } from "./chunk-TWUJFSH6.js";
8
- import "./chunk-QJIHXG4P.js";
9
- import "./chunk-JHL5ZO3K.js";
7
+ } from "./chunk-S73ATBSR.js";
8
+ import "./chunk-GBBTJ6ND.js";
9
+ import "./chunk-NBU6KIOD.js";
10
10
  import "./chunk-574HZVLE.js";
11
11
  import "./chunk-XFXOSPYH.js";
12
12
  import {
13
13
  getEventStore,
14
14
  updateSessionMetadata
15
- } from "./chunk-NW7PIZH3.js";
15
+ } from "./chunk-CIXMZ73F.js";
16
16
  import {
17
17
  buildMessagesFromStoredEvents,
18
18
  foldPendingConfirmations
@@ -61,7 +61,7 @@ async function startChatSession(sessionId, content, deps, options) {
61
61
  sessionManager.setRunning(sessionId, true);
62
62
  broadcastForSession(sessionId, createSessionRunningMessage(true));
63
63
  try {
64
- const { maybeAutoCompactContext } = await import("./auto-compaction-DDQPVS7Z.js");
64
+ const { maybeAutoCompactContext } = await import("./auto-compaction-BRT6SDEP.js");
65
65
  await maybeAutoCompactContext({
66
66
  sessionManager,
67
67
  sessionId,
@@ -200,4 +200,4 @@ export {
200
200
  startChatSession,
201
201
  stopSessionExecution
202
202
  };
203
- //# sourceMappingURL=chat-handler-S3LRWAEV.js.map
203
+ //# sourceMappingURL=chat-handler-55LA4LI2.js.map
@@ -18,6 +18,8 @@ import {
18
18
  var EventStore = class {
19
19
  db;
20
20
  subscribers = /* @__PURE__ */ new Map();
21
+ globalSubscribers = /* @__PURE__ */ new Map();
22
+ globalSubscriberIdCounter = 0;
21
23
  constructor(db) {
22
24
  this.db = db;
23
25
  this.initSchema();
@@ -239,13 +241,82 @@ var EventStore = class {
239
241
  }
240
242
  notifySubscribers(sessionId, event) {
241
243
  const sessionSubs = this.subscribers.get(sessionId);
242
- if (!sessionSubs) return;
243
- for (const subscriber of sessionSubs) {
244
+ if (sessionSubs) {
245
+ for (const subscriber of sessionSubs) {
246
+ if (!subscriber.closed) {
247
+ subscriber.callback(event);
248
+ }
249
+ }
250
+ }
251
+ for (const subscriber of this.globalSubscribers.values()) {
244
252
  if (!subscriber.closed) {
245
253
  subscriber.callback(event);
246
254
  }
247
255
  }
248
256
  }
257
+ /**
258
+ * Subscribe to ALL events across ALL sessions.
259
+ * Unlike subscribe() which is session-specific, this receives every event.
260
+ * Used by WebSocket clients to receive real-time updates for all sessions.
261
+ *
262
+ * Returns an async iterator that yields events and an unsubscribe function
263
+ */
264
+ subscribeAll() {
265
+ const queue = [];
266
+ let resolveNext = null;
267
+ let closed = false;
268
+ const closeIterator = () => {
269
+ closed = true;
270
+ if (resolveNext) {
271
+ resolveNext({ value: void 0, done: true });
272
+ resolveNext = null;
273
+ }
274
+ };
275
+ const wsId = ++this.globalSubscriberIdCounter;
276
+ const subscriber = {
277
+ wsId,
278
+ callback: (event) => {
279
+ if (closed) return;
280
+ if (resolveNext) {
281
+ resolveNext({ value: event, done: false });
282
+ resolveNext = null;
283
+ } else {
284
+ queue.push(event);
285
+ }
286
+ },
287
+ close: closeIterator,
288
+ closed: false
289
+ };
290
+ this.globalSubscribers.set(wsId, subscriber);
291
+ const iterator = {
292
+ [Symbol.asyncIterator]() {
293
+ return this;
294
+ },
295
+ async next() {
296
+ if (closed) {
297
+ return { value: void 0, done: true };
298
+ }
299
+ const queued = queue.shift();
300
+ if (queued) {
301
+ return { value: queued, done: false };
302
+ }
303
+ return new Promise((resolve) => {
304
+ resolveNext = resolve;
305
+ });
306
+ },
307
+ async return() {
308
+ closed = true;
309
+ subscriber.closed = true;
310
+ return { value: void 0, done: true };
311
+ }
312
+ };
313
+ const unsubscribe = () => {
314
+ subscriber.closed = true;
315
+ closeIterator();
316
+ this.globalSubscribers.delete(wsId);
317
+ };
318
+ return { iterator, unsubscribe };
319
+ }
249
320
  // --------------------------------------------------------------------------
250
321
  // Cleanup
251
322
  // --------------------------------------------------------------------------
@@ -506,6 +577,13 @@ function updateSessionDangerLevel(id, dangerLevel) {
506
577
  UPDATE sessions SET danger_level = ?, updated_at = ? WHERE id = ?
507
578
  `).run(dangerLevel, now, id);
508
579
  }
580
+ function updateSessionRunning(id, isRunning) {
581
+ const db = getDatabase();
582
+ const now = (/* @__PURE__ */ new Date()).toISOString();
583
+ db.prepare(`
584
+ UPDATE sessions SET is_running = ?, updated_at = ? WHERE id = ?
585
+ `).run(isRunning ? 1 : 0, now, id);
586
+ }
509
587
  function updateSessionSummary(id, summary) {
510
588
  const db = getDatabase();
511
589
  const now = (/* @__PURE__ */ new Date()).toISOString();
@@ -1027,6 +1105,7 @@ export {
1027
1105
  getSession,
1028
1106
  updateSessionProvider,
1029
1107
  updateSessionDangerLevel,
1108
+ updateSessionRunning,
1030
1109
  updateSessionSummary,
1031
1110
  updateSessionMetadata,
1032
1111
  listSessions,
@@ -1064,4 +1143,4 @@ export {
1064
1143
  compactContext,
1065
1144
  getRecentUserPromptsForSession
1066
1145
  };
1067
- //# sourceMappingURL=chunk-NW7PIZH3.js.map
1146
+ //# sourceMappingURL=chunk-CIXMZ73F.js.map
@@ -1,11 +1,12 @@
1
1
  import {
2
2
  createProcess,
3
+ getPlatformShell,
3
4
  getProcessLogs,
4
5
  getProcessStatus,
5
6
  getSessionProcesses,
6
7
  startProcessCommand,
7
8
  stopProcess
8
- } from "./chunk-JHL5ZO3K.js";
9
+ } from "./chunk-NBU6KIOD.js";
9
10
  import {
10
11
  getMaxPerSession,
11
12
  getSessionProcessCount
@@ -17,7 +18,7 @@ import {
17
18
  getContextMessages,
18
19
  getCurrentContextWindowId,
19
20
  getEventStore
20
- } from "./chunk-NW7PIZH3.js";
21
+ } from "./chunk-CIXMZ73F.js";
21
22
  import {
22
23
  createChatMessageMessage,
23
24
  createChatPathConfirmationMessage,
@@ -1133,8 +1134,8 @@ import { resolve as resolve2, isAbsolute } from "path";
1133
1134
 
1134
1135
  // src/server/tools/path-security.ts
1135
1136
  import { realpath } from "fs/promises";
1136
- import { resolve, normalize, join as join3 } from "path";
1137
- import { homedir } from "os";
1137
+ import { resolve, normalize, join as join3, basename, sep } from "path";
1138
+ import { homedir, tmpdir } from "os";
1138
1139
  var SAFE_PATHS = /* @__PURE__ */ new Set([
1139
1140
  "/dev/null",
1140
1141
  "/dev/zero",
@@ -1147,7 +1148,11 @@ var SAFE_PATHS = /* @__PURE__ */ new Set([
1147
1148
  "/dev/fd/1",
1148
1149
  "/dev/fd/2"
1149
1150
  ]);
1150
- var ALLOWED_ROOTS = ["/tmp", "/var/tmp"];
1151
+ var ALLOWED_ROOTS = [
1152
+ "/tmp",
1153
+ "/var/tmp",
1154
+ tmpdir()
1155
+ ];
1151
1156
  var SENSITIVE_FILE_PATTERNS = [
1152
1157
  // Dotenv files (but not .envrc, .env-example, .env.example)
1153
1158
  /^\.env$/,
@@ -1168,9 +1173,9 @@ var SENSITIVE_FILE_PATTERNS = [
1168
1173
  /^\.netrc$/
1169
1174
  ];
1170
1175
  function isSensitivePath(path) {
1171
- const basename = path.split("/").pop() ?? "";
1172
- if (!basename) return false;
1173
- return SENSITIVE_FILE_PATTERNS.some((pattern) => pattern.test(basename));
1176
+ const fileName = basename(path);
1177
+ if (!fileName) return false;
1178
+ return SENSITIVE_FILE_PATTERNS.some((pattern) => pattern.test(fileName));
1174
1179
  }
1175
1180
  var sessionAllowedPaths = /* @__PURE__ */ new Map();
1176
1181
  function addAllowedPath(sessionId, path) {
@@ -1212,12 +1217,12 @@ async function isPathWithinSandbox(path, workdir, sessionId) {
1212
1217
  }
1213
1218
  }
1214
1219
  resolvedPath = resolvedPath.replace(/\/+$/, "");
1215
- if (resolvedPath === normalizedWorkdir || resolvedPath.startsWith(normalizedWorkdir + "/")) {
1220
+ if (resolvedPath === normalizedWorkdir || resolvedPath.startsWith(normalizedWorkdir + sep)) {
1216
1221
  return { allowed: true, resolvedPath };
1217
1222
  }
1218
1223
  for (const root of ALLOWED_ROOTS) {
1219
1224
  const normalizedRoot = normalize(root);
1220
- if (resolvedPath === normalizedRoot || resolvedPath.startsWith(normalizedRoot + "/")) {
1225
+ if (resolvedPath === normalizedRoot || resolvedPath.startsWith(normalizedRoot + sep)) {
1221
1226
  return { allowed: true, resolvedPath };
1222
1227
  }
1223
1228
  }
@@ -2123,7 +2128,8 @@ function executeCommand(command, cwd, timeout, signal, onProgress) {
2123
2128
  reject(new Error("Command aborted before execution"));
2124
2129
  return;
2125
2130
  }
2126
- const proc = spawn2("sh", ["-c", command], {
2131
+ const shell = getPlatformShell();
2132
+ const proc = spawn2(shell.command, [...shell.args, command], {
2127
2133
  cwd,
2128
2134
  env: { ...process.env, FORCE_COLOR: "0" },
2129
2135
  stdio: ["ignore", "pipe", "pipe"],
@@ -3619,7 +3625,7 @@ var callSubAgentTool = {
3619
3625
  };
3620
3626
  }
3621
3627
  try {
3622
- const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-XSK3J4II.js");
3628
+ const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-GQ3PJL6N.js");
3623
3629
  const toolRegistry = getToolRegistryForAgent2(agentDef);
3624
3630
  const turnMetrics = new TurnMetrics();
3625
3631
  const result = await executeSubAgent({
@@ -3966,7 +3972,8 @@ var DevServerManager = class {
3966
3972
  instance.errorMessage = void 0;
3967
3973
  instance.exited = false;
3968
3974
  const resolved = this.resolveWorkdir(workdir);
3969
- const proc = spawn3("sh", ["-c", config.command], {
3975
+ const shell = getPlatformShell();
3976
+ const proc = spawn3(shell.command, [...shell.args, config.command], {
3970
3977
  cwd: resolved,
3971
3978
  env: { ...process.env, FORCE_COLOR: "1" },
3972
3979
  stdio: ["ignore", "pipe", "pipe"],
@@ -4751,4 +4758,4 @@ export {
4751
4758
  getToolRegistryForAgent,
4752
4759
  createToolRegistry
4753
4760
  };
4754
- //# sourceMappingURL=chunk-QJIHXG4P.js.map
4761
+ //# sourceMappingURL=chunk-GBBTJ6ND.js.map
@@ -11,6 +11,30 @@ import {
11
11
 
12
12
  // src/server/tools/background-process/manager.ts
13
13
  import { spawn } from "child_process";
14
+
15
+ // src/server/utils/platform.ts
16
+ import os from "os";
17
+ function getPlatformShell() {
18
+ if (process.platform === "win32") {
19
+ return { command: "cmd.exe", args: ["/c"] };
20
+ }
21
+ const userShell = os.userInfo().shell;
22
+ if (userShell) {
23
+ return { command: userShell, args: ["-c"] };
24
+ }
25
+ return { command: "sh", args: ["-c"] };
26
+ }
27
+ function getPathSeparator() {
28
+ return process.platform === "win32" ? ";" : ":";
29
+ }
30
+ function isWindowsPath(path) {
31
+ return /^[A-Za-z]:[/\\]/.test(path);
32
+ }
33
+ function isAbsolutePath(path) {
34
+ return path.startsWith("/") || isWindowsPath(path);
35
+ }
36
+
37
+ // src/server/tools/background-process/manager.ts
14
38
  var STOP_SIGNAL_TIMEOUT = 5e3;
15
39
  var listeners = /* @__PURE__ */ new Set();
16
40
  function onProcessEvent(callback) {
@@ -40,7 +64,8 @@ function createProcess2(sessionId, name, command, cwd, timeout) {
40
64
  function startProcessCommand(processId, sessionId, command, cwd) {
41
65
  const proc = startProcess(processId, sessionId, 0);
42
66
  if (!proc) return null;
43
- const child = spawn("sh", ["-c", command], {
67
+ const shell = getPlatformShell();
68
+ const child = spawn(shell.command, [...shell.args, command], {
44
69
  cwd,
45
70
  env: { ...process.env, FORCE_COLOR: "1" },
46
71
  stdio: ["ignore", "pipe", "pipe"],
@@ -145,6 +170,9 @@ function getProcessLogs(processId, since = 0, maxLines) {
145
170
  }
146
171
 
147
172
  export {
173
+ getPlatformShell,
174
+ getPathSeparator,
175
+ isAbsolutePath,
148
176
  onProcessEvent,
149
177
  createProcess2 as createProcess,
150
178
  startProcessCommand,
@@ -153,4 +181,4 @@ export {
153
181
  getSessionProcesses2 as getSessionProcesses,
154
182
  getProcessLogs
155
183
  };
156
- //# sourceMappingURL=chunk-JHL5ZO3K.js.map
184
+ //# sourceMappingURL=chunk-NBU6KIOD.js.map
@@ -13,11 +13,11 @@ import {
13
13
  getToolRegistryForAgent,
14
14
  loadAllAgentsDefault,
15
15
  runTopLevelAgentLoop
16
- } from "./chunk-QJIHXG4P.js";
16
+ } from "./chunk-GBBTJ6ND.js";
17
17
  import {
18
18
  getCurrentContextWindowId,
19
19
  getEventStore
20
- } from "./chunk-NW7PIZH3.js";
20
+ } from "./chunk-CIXMZ73F.js";
21
21
  import {
22
22
  buildSnapshotFromSessionState
23
23
  } from "./chunk-WQ4W5H6A.js";
@@ -311,4 +311,4 @@ export {
311
311
  runBuilderTurn,
312
312
  runVerifierTurn
313
313
  };
314
- //# sourceMappingURL=chunk-TWUJFSH6.js.map
314
+ //# sourceMappingURL=chunk-S73ATBSR.js.map
@@ -154,7 +154,7 @@ async function runCli(options) {
154
154
  if (!configExists) {
155
155
  await runNetworkSetup(mode);
156
156
  }
157
- const { runServe } = await import("./serve-DCCIXC4Q.js");
157
+ const { runServe } = await import("./serve-SDBFDRNJ.js");
158
158
  await runServe({
159
159
  mode,
160
160
  port: values.port ? parseInt(values.port) : void 0,
@@ -167,4 +167,4 @@ async function runCli(options) {
167
167
  export {
168
168
  runCli
169
169
  };
170
- //# sourceMappingURL=chunk-KUHCFENT.js.map
170
+ //# sourceMappingURL=chunk-TKWJ665A.js.map
@@ -6,7 +6,7 @@ import {
6
6
  createVerifierNudgeConfig,
7
7
  runBuilderTurn,
8
8
  runChatTurn
9
- } from "./chunk-TWUJFSH6.js";
9
+ } from "./chunk-S73ATBSR.js";
10
10
  import {
11
11
  TurnMetrics,
12
12
  agentExists,
@@ -44,10 +44,13 @@ import {
44
44
  saveSkill,
45
45
  setSkillEnabled,
46
46
  skillExists
47
- } from "./chunk-QJIHXG4P.js";
47
+ } from "./chunk-GBBTJ6ND.js";
48
48
  import {
49
+ getPathSeparator,
50
+ getPlatformShell,
51
+ isAbsolutePath,
49
52
  onProcessEvent
50
- } from "./chunk-JHL5ZO3K.js";
53
+ } from "./chunk-NBU6KIOD.js";
51
54
  import {
52
55
  createProviderManager,
53
56
  parseDefaultModelSelection
@@ -84,8 +87,9 @@ import {
84
87
  updateSessionDangerLevel,
85
88
  updateSessionMetadata,
86
89
  updateSessionProvider,
90
+ updateSessionRunning,
87
91
  updateSessionSummary
88
- } from "./chunk-NW7PIZH3.js";
92
+ } from "./chunk-CIXMZ73F.js";
89
93
  import {
90
94
  buildContextMessagesFromEventHistory,
91
95
  buildMessagesFromStoredEvents,
@@ -1197,8 +1201,7 @@ var TerminalManager = class {
1197
1201
  return `term_${Date.now()}_${Math.random().toString(36).slice(2, 11)}`;
1198
1202
  }
1199
1203
  getShell() {
1200
- const shell = process.env["SHELL"] || "/bin/bash";
1201
- return shell;
1204
+ return getPlatformShell().command;
1202
1205
  }
1203
1206
  resolveWorkdir(workdir) {
1204
1207
  if (workdir && workdir.length > 0) {
@@ -1583,7 +1586,8 @@ function executeShellCommand(command, cwd, timeout, signal) {
1583
1586
  reject(new Error("Aborted"));
1584
1587
  return;
1585
1588
  }
1586
- const proc = spawn2("sh", ["-c", command], {
1589
+ const shell = getPlatformShell();
1590
+ const proc = spawn2(shell.command, [...shell.args, command], {
1587
1591
  cwd,
1588
1592
  env: { ...process.env, FORCE_COLOR: "0" },
1589
1593
  stdio: ["ignore", "pipe", "pipe"]
@@ -2515,7 +2519,23 @@ function createWebSocketServer(httpServer, config, getLLMClient, getActiveProvid
2515
2519
  }
2516
2520
  }
2517
2521
  logger.debug("WebSocket client connected");
2518
- clients.set(ws, { ws, activeSessionId: null, subscribedSessions: /* @__PURE__ */ new Map(), eventStoreSubscriptions: /* @__PURE__ */ new Map() });
2522
+ clients.set(ws, { ws, activeSessionId: null, subscribedSessions: /* @__PURE__ */ new Map(), eventStoreSubscriptions: /* @__PURE__ */ new Map(), globalSubscription: null });
2523
+ const eventStore = getEventStore();
2524
+ const { iterator: globalIterator, unsubscribe: globalUnsubscribe } = eventStore.subscribeAll();
2525
+ clients.get(ws).globalSubscription = globalUnsubscribe;
2526
+ (async () => {
2527
+ try {
2528
+ for await (const storedEvent of globalIterator) {
2529
+ if (ws.readyState !== WebSocket2.OPEN) break;
2530
+ const serverMsg = storedEventToServerMessage(storedEvent);
2531
+ if (serverMsg) {
2532
+ ws.send(serializeServerMessage({ ...serverMsg, seq: storedEvent.seq, sessionId: storedEvent.sessionId }));
2533
+ }
2534
+ }
2535
+ } catch (error) {
2536
+ logger.debug("Global event subscription ended", { error });
2537
+ }
2538
+ })();
2519
2539
  ws.on("message", async (data) => {
2520
2540
  const message = parseClientMessage(data.toString());
2521
2541
  if (!message) {
@@ -2550,6 +2570,9 @@ function createWebSocketServer(httpServer, config, getLLMClient, getActiveProvid
2550
2570
  for (const unsubscribe of client.eventStoreSubscriptions.values()) {
2551
2571
  unsubscribe();
2552
2572
  }
2573
+ if (client.globalSubscription) {
2574
+ client.globalSubscription();
2575
+ }
2553
2576
  }
2554
2577
  unsubscribeAllFromTerminal(ws);
2555
2578
  clients.delete(ws);
@@ -2598,27 +2621,7 @@ async function handleClientMessage(ws, client, message, getLLMClient, getActiveP
2598
2621
  sendForSession(sessionId, createContextStateMessage(contextState));
2599
2622
  return true;
2600
2623
  };
2601
- const ensureEventStoreSubscription = (sessionId) => {
2602
- if (client.eventStoreSubscriptions.has(sessionId)) {
2603
- return;
2604
- }
2605
- const sid = sessionId;
2606
- const eventStore = getEventStore();
2607
- const { iterator, unsubscribe } = eventStore.subscribe(sid);
2608
- client.eventStoreSubscriptions.set(sessionId, unsubscribe);
2609
- (async () => {
2610
- try {
2611
- for await (const storedEvent of iterator) {
2612
- const serverMsg = storedEventToServerMessage(storedEvent);
2613
- if (serverMsg && ws.readyState === WebSocket2.OPEN) {
2614
- ws.send(serializeServerMessage({ ...serverMsg, seq: storedEvent.seq, sessionId: sid }));
2615
- }
2616
- }
2617
- } catch (error) {
2618
- logger.debug("EventStore subscription ended", { sessionId: sid, error });
2619
- }
2620
- })();
2621
- logger.debug("Subscribed to EventStore", { sessionId });
2624
+ const ensureEventStoreSubscription = (_sessionId) => {
2622
2625
  };
2623
2626
  switch (message.type) {
2624
2627
  // =========================================================================
@@ -3549,7 +3552,7 @@ async function existsExecutable(path) {
3549
3552
  }
3550
3553
  }
3551
3554
  async function which(command, workdir) {
3552
- if (command.startsWith("/")) {
3555
+ if (isAbsolutePath(command)) {
3553
3556
  if (await existsExecutable(command)) {
3554
3557
  return command;
3555
3558
  }
@@ -3568,7 +3571,7 @@ async function which(command, workdir) {
3568
3571
  }
3569
3572
  }
3570
3573
  const pathEnv = process.env["PATH"] ?? "";
3571
- const paths = pathEnv.split(":");
3574
+ const paths = pathEnv.split(getPathSeparator());
3572
3575
  for (const dir of paths) {
3573
3576
  if (!dir) continue;
3574
3577
  const fullPath = join3(dir, command);
@@ -4393,6 +4396,7 @@ var SessionManager = class {
4393
4396
  return session;
4394
4397
  }
4395
4398
  logger.debug("Setting session running state", { sessionId, isRunning });
4399
+ updateSessionRunning(sessionId, isRunning);
4396
4400
  emitRunningChanged(sessionId, isRunning);
4397
4401
  const updatedSession = this.requireSession(sessionId);
4398
4402
  this.emit({ type: "session_updated", session: updatedSession });
@@ -5726,7 +5730,7 @@ async function createServerHandle(config) {
5726
5730
  res.json({ success: true });
5727
5731
  });
5728
5732
  app.get("/api/sessions", async (req, res) => {
5729
- const { getRecentUserPromptsForSession } = await import("./events-B7S4U4DB.js");
5733
+ const { getRecentUserPromptsForSession } = await import("./events-OZKDX6XE.js");
5730
5734
  const projectId = req.query["projectId"];
5731
5735
  const limit = Math.min(parseInt(req.query["limit"]) || 20, 100);
5732
5736
  const offset = parseInt(req.query["offset"]) || 0;
@@ -5759,7 +5763,7 @@ async function createServerHandle(config) {
5759
5763
  res.status(201).json({ session });
5760
5764
  });
5761
5765
  app.get("/api/sessions/:id", async (req, res) => {
5762
- const { getEventStore: getEventStore2 } = await import("./events-B7S4U4DB.js");
5766
+ const { getEventStore: getEventStore2 } = await import("./events-OZKDX6XE.js");
5763
5767
  const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-NZYOXNKK.js");
5764
5768
  const session = sessionManager.getSession(req.params.id);
5765
5769
  if (!session) {
@@ -5790,7 +5794,7 @@ async function createServerHandle(config) {
5790
5794
  res.json({ success: true });
5791
5795
  });
5792
5796
  app.post("/api/sessions/:id/provider", async (req, res) => {
5793
- const { getEventStore: getEventStore2 } = await import("./events-B7S4U4DB.js");
5797
+ const { getEventStore: getEventStore2 } = await import("./events-OZKDX6XE.js");
5794
5798
  const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-NZYOXNKK.js");
5795
5799
  const sessionId = req.params.id;
5796
5800
  const session = sessionManager.getSession(sessionId);
@@ -5828,7 +5832,7 @@ async function createServerHandle(config) {
5828
5832
  res.json({ success: true });
5829
5833
  });
5830
5834
  app.put("/api/sessions/:id/mode", async (req, res) => {
5831
- const { getEventStore: getEventStore2 } = await import("./events-B7S4U4DB.js");
5835
+ const { getEventStore: getEventStore2 } = await import("./events-OZKDX6XE.js");
5832
5836
  const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-NZYOXNKK.js");
5833
5837
  const sessionId = req.params.id;
5834
5838
  const session = sessionManager.getSession(sessionId);
@@ -5867,12 +5871,12 @@ async function createServerHandle(config) {
5867
5871
  if (!callId || approved === void 0) {
5868
5872
  return res.status(400).json({ error: "callId and approved are required" });
5869
5873
  }
5870
- const { providePathConfirmation: providePathConfirmation2 } = await import("./tools-XSK3J4II.js");
5874
+ const { providePathConfirmation: providePathConfirmation2 } = await import("./tools-GQ3PJL6N.js");
5871
5875
  const result = providePathConfirmation2(callId, approved, alwaysAllow);
5872
5876
  if (!result.found) {
5873
5877
  return res.status(404).json({ error: "No pending path confirmation with that ID" });
5874
5878
  }
5875
- const { getEventStore: getEventStore2 } = await import("./events-B7S4U4DB.js");
5879
+ const { getEventStore: getEventStore2 } = await import("./events-OZKDX6XE.js");
5876
5880
  const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2, foldPendingConfirmations: foldPendingConfirmations2 } = await import("./folding-NZYOXNKK.js");
5877
5881
  const { createSessionStateMessage: createSessionStateMessage2 } = await import("./protocol-ODKD7QJO.js");
5878
5882
  const eventStore = getEventStore2();
@@ -5892,7 +5896,7 @@ async function createServerHandle(config) {
5892
5896
  if (!callId || !answer) {
5893
5897
  return res.status(400).json({ error: "callId and answer are required" });
5894
5898
  }
5895
- const { provideAnswer: provideAnswer2 } = await import("./tools-XSK3J4II.js");
5899
+ const { provideAnswer: provideAnswer2 } = await import("./tools-GQ3PJL6N.js");
5896
5900
  const found = provideAnswer2(callId, answer);
5897
5901
  if (!found) {
5898
5902
  return res.status(404).json({ error: "No pending question with that ID" });
@@ -5928,14 +5932,14 @@ async function createServerHandle(config) {
5928
5932
  if (!session) {
5929
5933
  return res.status(404).json({ error: "Session not found" });
5930
5934
  }
5931
- const { stopSessionExecution } = await import("./chat-handler-S3LRWAEV.js");
5932
- const { cancelQuestionsForSession: cancelQuestionsForSession2, cancelPathConfirmationsForSession: cancelPathConfirmationsForSession2 } = await import("./tools-XSK3J4II.js");
5935
+ const { stopSessionExecution } = await import("./chat-handler-55LA4LI2.js");
5936
+ const { cancelQuestionsForSession: cancelQuestionsForSession2, cancelPathConfirmationsForSession: cancelPathConfirmationsForSession2 } = await import("./tools-GQ3PJL6N.js");
5933
5937
  stopSessionExecution(sessionId, sessionManager);
5934
5938
  abortSession(sessionId);
5935
5939
  cancelQuestionsForSession2(sessionId, "Session stopped by user");
5936
5940
  cancelPathConfirmationsForSession2(sessionId, "Session stopped by user");
5937
5941
  sessionManager.clearMessageQueue(sessionId);
5938
- const eventStore = (await import("./events-B7S4U4DB.js")).getEventStore();
5942
+ const eventStore = (await import("./events-OZKDX6XE.js")).getEventStore();
5939
5943
  eventStore.append(sessionId, { type: "running.changed", data: { isRunning: false } });
5940
5944
  res.json({ success: true });
5941
5945
  });
@@ -6216,13 +6220,13 @@ async function createServerHandle(config) {
6216
6220
  app.use("/api/dev-server", createDevServerRoutes());
6217
6221
  app.use("/api/terminals", createTerminalRoutes());
6218
6222
  app.get("/api/sessions/:id/background-processes", async (req, res) => {
6219
- const { getSessionProcesses } = await import("./manager-TMIDRUVA.js");
6223
+ const { getSessionProcesses } = await import("./manager-HM2J5VMW.js");
6220
6224
  const sessionId = req.params.id;
6221
6225
  const processes = getSessionProcesses(sessionId);
6222
6226
  res.json({ processes });
6223
6227
  });
6224
6228
  app.post("/api/sessions/:id/background-process/:processId/stop", async (req, res) => {
6225
- const { stopProcess } = await import("./manager-TMIDRUVA.js");
6229
+ const { stopProcess } = await import("./manager-HM2J5VMW.js");
6226
6230
  const sessionId = req.params.id;
6227
6231
  const processId = req.params.processId;
6228
6232
  const session = sessionManager.getSession(sessionId);
@@ -6376,7 +6380,7 @@ async function createServerHandle(config) {
6376
6380
  providerManager
6377
6381
  );
6378
6382
  const wss = wssExports.wss;
6379
- const { QueueProcessor } = await import("./processor-HYEPZECF.js");
6383
+ const { QueueProcessor } = await import("./processor-I4BGYK3T.js");
6380
6384
  const queueProcessor = new QueueProcessor({
6381
6385
  sessionManager,
6382
6386
  providerManager,
@@ -6448,4 +6452,4 @@ export {
6448
6452
  createServerHandle,
6449
6453
  createServer
6450
6454
  };
6451
- //# sourceMappingURL=chunk-AL7KUHBF.js.map
6455
+ //# sourceMappingURL=chunk-WZJLCOV3.js.map
package/dist/cli/dev.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runCli
4
- } from "../chunk-KUHCFENT.js";
4
+ } from "../chunk-TKWJ665A.js";
5
5
  import {
6
6
  logger
7
7
  } from "../chunk-PNBH3RAX.js";
package/dist/cli/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runCli
4
- } from "../chunk-KUHCFENT.js";
4
+ } from "../chunk-TKWJ665A.js";
5
5
  import {
6
6
  logger
7
7
  } from "../chunk-PNBH3RAX.js";
@@ -36,7 +36,7 @@ import {
36
36
  isFileInCache,
37
37
  isStoredEvent,
38
38
  isTurnEvent
39
- } from "./chunk-NW7PIZH3.js";
39
+ } from "./chunk-CIXMZ73F.js";
40
40
  import {
41
41
  buildContextMessagesFromEventHistory,
42
42
  buildContextMessagesFromMessages,
@@ -111,4 +111,4 @@ export {
111
111
  isStoredEvent,
112
112
  isTurnEvent
113
113
  };
114
- //# sourceMappingURL=events-B7S4U4DB.js.map
114
+ //# sourceMappingURL=events-OZKDX6XE.js.map
@@ -6,7 +6,7 @@ import {
6
6
  onProcessEvent,
7
7
  startProcessCommand,
8
8
  stopProcess
9
- } from "./chunk-JHL5ZO3K.js";
9
+ } from "./chunk-NBU6KIOD.js";
10
10
  import "./chunk-574HZVLE.js";
11
11
  export {
12
12
  createProcess,
@@ -17,4 +17,4 @@ export {
17
17
  startProcessCommand,
18
18
  stopProcess
19
19
  };
20
- //# sourceMappingURL=manager-TMIDRUVA.js.map
20
+ //# sourceMappingURL=manager-HM2J5VMW.js.map