openfox 2.0.73 → 2.0.75

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 (42) hide show
  1. package/dist/{chat-handler-LK5RUAGO.js → chat-handler-QLMBYRDY.js} +15 -14
  2. package/dist/{chunk-YD6NDTKF.js → chunk-5GOOSZX7.js} +1 -1
  3. package/dist/chunk-6COWK53A.js +7 -0
  4. package/dist/{chunk-GMF36EZ3.js → chunk-6ZMGWDOD.js} +87 -506
  5. package/dist/{chunk-2DCJERYX.js → chunk-CJ2AJ7HU.js} +3 -3
  6. package/dist/{chunk-O2BE7KVQ.js → chunk-J3VQBVGO.js} +8 -6
  7. package/dist/chunk-KEVRZWL3.js +495 -0
  8. package/dist/{chunk-TK4BZIXA.js → chunk-LKUAKQZY.js} +42 -20
  9. package/dist/{chunk-PYB2UEC3.js → chunk-LTFB2WWE.js} +4 -4
  10. package/dist/{chunk-CHPRGEY5.js → chunk-LUG5QTFC.js} +2 -2
  11. package/dist/{chunk-X2Y3AJPP.js → chunk-MF3UW36X.js} +10 -2
  12. package/dist/{chunk-EYXDM2FY.js → chunk-MIJX54CG.js} +395 -116
  13. package/dist/{chunk-NOU2QIL5.js → chunk-O3NUNU4H.js} +5 -2
  14. package/dist/{chunk-KKRLQH6F.js → chunk-PJQW6TYI.js} +17 -7
  15. package/dist/{chunk-6XKM25OT.js → chunk-YFFP4DR4.js} +4 -4
  16. package/dist/cli/dev.js +1 -1
  17. package/dist/cli/index.js +1 -1
  18. package/dist/{compactor-4UKYWC5F.js → compactor-AERNYEMP.js} +4 -4
  19. package/dist/{events-AEQ6GQXI.js → events-X353XCPN.js} +3 -3
  20. package/dist/install-CPOPMCSE.js +120 -0
  21. package/dist/{manager-24C2AXVF.js → manager-5GILDCVD.js} +3 -3
  22. package/dist/{orchestrator-RTZVMWQV.js → orchestrator-BIFTALBG.js} +13 -12
  23. package/dist/package.json +1 -1
  24. package/dist/path-security-3FAIPJSV.js +50 -0
  25. package/dist/{processor-3O26I7DO.js → processor-MQ47QSDR.js} +15 -14
  26. package/dist/{protocol-4QFU7WAI.js → protocol-EWEVW65B.js} +3 -3
  27. package/dist/{protocol-DGQWVFcP.d.ts → protocol-Sr6Jr4ZS.d.ts} +5 -2
  28. package/dist/{serve-I6K7A7RL.js → serve-UD27KOL2.js} +18 -17
  29. package/dist/server/index.d.ts +5 -1
  30. package/dist/server/index.js +16 -15
  31. package/dist/{server-G2J4RAXL.js → server-TJ3PP5EW.js} +15 -14
  32. package/dist/shared/index.d.ts +1 -1
  33. package/dist/shared/index.js +1 -1
  34. package/dist/{tools-X52DFUS6.js → tools-RZ464GUJ.js} +17 -15
  35. package/dist/{update-RJB4GPHE.js → update-MWIZH4P2.js} +12 -3
  36. package/dist/web/assets/{index-CmechlaK.css → index-BNVBxKnB.css} +1 -1
  37. package/dist/web/assets/{index-C7SW16F7.js → index-Bn4hwZeP.js} +74 -74
  38. package/dist/web/index.html +2 -2
  39. package/dist/web/sw.js +1 -1
  40. package/dist/{workspace-ET3FHZYN.js → workspace-6QTTUMMW.js} +4 -2
  41. package/package.json +1 -1
  42. package/dist/chunk-NE7OWIIO.js +0 -7
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createServerMessage,
3
3
  isClientMessage
4
- } from "./chunk-YD6NDTKF.js";
4
+ } from "./chunk-5GOOSZX7.js";
5
5
 
6
6
  // src/server/ws/protocol.ts
7
7
  function enrichMessagesWithToolResults(messages) {
@@ -294,6 +294,9 @@ function storedEventToServerMessage(event) {
294
294
  const data = event.data;
295
295
  return createChatFormatRetryMessage(data.attempt, data.maxAttempts, data.pattern, data.field, data.matchedContent);
296
296
  }
297
+ case "path.confirmation_pending":
298
+ case "path.confirmation_responded":
299
+ return null;
297
300
  case "turn.snapshot":
298
301
  case "context.compacted":
299
302
  return null;
@@ -340,4 +343,4 @@ export {
340
343
  createQueueStateMessage,
341
344
  storedEventToServerMessage
342
345
  };
343
- //# sourceMappingURL=chunk-NOU2QIL5.js.map
346
+ //# sourceMappingURL=chunk-O3NUNU4H.js.map
@@ -25,6 +25,7 @@ Commands:
25
25
  provider remove Remove a provider
26
26
  service Manage the systemd service (install, start, stop, status, logs, uninstall)
27
27
  pwa Manage the PWA installation (install, uninstall, launch, update, status)
28
+ install Install a persistent OpenFox launcher (use --check to inspect)
28
29
  update Update OpenFox to the latest version
29
30
 
30
31
  Options:
@@ -73,13 +74,13 @@ async function runNetworkSetup(mode) {
73
74
  privateKeyEncoding: { type: "pkcs8", format: "pem" },
74
75
  publicKeyEncoding: { type: "spki", format: "pem" }
75
76
  });
76
- const keyPath = getAuthKeyPath(mode);
77
- await writeFile(keyPath, privateKey, { mode: 384 });
78
77
  const encryptedPassword = encryptPassword(passwordValue, publicKey);
79
78
  await saveAuthConfig(mode, {
80
79
  strategy: "network",
81
80
  encryptedPassword
82
81
  });
82
+ const keyPath = getAuthKeyPath(mode);
83
+ await writeFile(keyPath, privateKey, { mode: 384 });
83
84
  } else {
84
85
  await saveAuthConfig(mode, {
85
86
  strategy: isNetwork ? "network" : "local",
@@ -134,7 +135,8 @@ async function runCli(options) {
134
135
  help: { type: "boolean", short: "h" },
135
136
  version: { type: "boolean", short: "v" },
136
137
  service: { type: "boolean" },
137
- follow: { type: "boolean", short: "f" }
138
+ follow: { type: "boolean", short: "f" },
139
+ check: { type: "boolean" }
138
140
  },
139
141
  allowPositionals: true,
140
142
  strict: true
@@ -189,9 +191,17 @@ async function runCli(options) {
189
191
  }
190
192
  break;
191
193
  }
194
+ case "install": {
195
+ const { runInstall } = await import("./install-CPOPMCSE.js");
196
+ const code = await runInstall({ check: values.check === true });
197
+ if (code !== 0) {
198
+ process.exit(code);
199
+ }
200
+ break;
201
+ }
192
202
  case "update": {
193
- const { runUpdate } = await import("./update-RJB4GPHE.js");
194
- const code = runUpdate();
203
+ const { runUpdate } = await import("./update-MWIZH4P2.js");
204
+ const code = await runUpdate();
195
205
  if (code !== 0) {
196
206
  process.exit(code);
197
207
  }
@@ -203,7 +213,7 @@ async function runCli(options) {
203
213
  if (!configExists) {
204
214
  await runNetworkSetup(mode);
205
215
  }
206
- const { runServe } = await import("./serve-I6K7A7RL.js");
216
+ const { runServe } = await import("./serve-UD27KOL2.js");
207
217
  const serveOptions = { mode };
208
218
  if (values.port) serveOptions.port = parseInt(values.port);
209
219
  if (values["no-browser"] === true) serveOptions.openBrowser = false;
@@ -215,4 +225,4 @@ async function runCli(options) {
215
225
  export {
216
226
  runCli
217
227
  };
218
- //# sourceMappingURL=chunk-KKRLQH6F.js.map
228
+ //# sourceMappingURL=chunk-PJQW6TYI.js.map
@@ -1,3 +1,6 @@
1
+ import {
2
+ getDatabase
3
+ } from "./chunk-I4RWK2L2.js";
1
4
  import {
2
5
  buildContextMessagesFromEventHistory,
3
6
  buildMessagesFromStoredEvents,
@@ -6,9 +9,6 @@ import {
6
9
  foldSessionState,
7
10
  spreadOptionalMessageFields
8
11
  } from "./chunk-DJASQ2ZB.js";
9
- import {
10
- getDatabase
11
- } from "./chunk-I4RWK2L2.js";
12
12
  import {
13
13
  logger
14
14
  } from "./chunk-K44MW7JJ.js";
@@ -1460,4 +1460,4 @@ export {
1460
1460
  truncateSessionMessages,
1461
1461
  getRecentUserPromptsForSession
1462
1462
  };
1463
- //# sourceMappingURL=chunk-6XKM25OT.js.map
1463
+ //# sourceMappingURL=chunk-YFFP4DR4.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-KKRLQH6F.js";
4
+ } from "../chunk-PJQW6TYI.js";
5
5
  import "../chunk-XY3LESVZ.js";
6
6
  import {
7
7
  logger
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-KKRLQH6F.js";
4
+ } from "../chunk-PJQW6TYI.js";
5
5
  import "../chunk-XY3LESVZ.js";
6
6
  import {
7
7
  logger
@@ -2,13 +2,13 @@ import {
2
2
  appendCompactionPrompt,
3
3
  getCompactionTarget,
4
4
  shouldCompact
5
- } from "./chunk-CHPRGEY5.js";
5
+ } from "./chunk-LUG5QTFC.js";
6
6
  import "./chunk-XWBNYU2L.js";
7
- import "./chunk-6XKM25OT.js";
8
- import "./chunk-DJASQ2ZB.js";
9
7
  import "./chunk-S7O77CVO.js";
10
8
  import "./chunk-QNKXZH3Z.js";
9
+ import "./chunk-YFFP4DR4.js";
11
10
  import "./chunk-I4RWK2L2.js";
11
+ import "./chunk-DJASQ2ZB.js";
12
12
  import "./chunk-J2GP3J3X.js";
13
13
  import "./chunk-V4IE7HJY.js";
14
14
  import "./chunk-YHEQTVFV.js";
@@ -20,4 +20,4 @@ export {
20
20
  getCompactionTarget,
21
21
  shouldCompact
22
22
  };
23
- //# sourceMappingURL=compactor-4UKYWC5F.js.map
23
+ //# sourceMappingURL=compactor-AERNYEMP.js.map
@@ -38,7 +38,8 @@ import {
38
38
  isStoredEvent,
39
39
  isTurnEvent,
40
40
  truncateSessionMessages
41
- } from "./chunk-6XKM25OT.js";
41
+ } from "./chunk-YFFP4DR4.js";
42
+ import "./chunk-I4RWK2L2.js";
42
43
  import {
43
44
  buildContextMessagesFromEventHistory,
44
45
  buildContextMessagesFromMessages,
@@ -56,7 +57,6 @@ import {
56
57
  foldTurnEventsToSnapshotMessages,
57
58
  getMessagesForWindow
58
59
  } from "./chunk-DJASQ2ZB.js";
59
- import "./chunk-I4RWK2L2.js";
60
60
  import "./chunk-K44MW7JJ.js";
61
61
  import "./chunk-5WRI5ZAA.js";
62
62
  export {
@@ -115,4 +115,4 @@ export {
115
115
  isTurnEvent,
116
116
  truncateSessionMessages
117
117
  };
118
- //# sourceMappingURL=events-AEQ6GQXI.js.map
118
+ //# sourceMappingURL=events-X353XCPN.js.map
@@ -0,0 +1,120 @@
1
+ import "./chunk-5WRI5ZAA.js";
2
+
3
+ // src/cli/install.ts
4
+ import { spawnSync } from "child_process";
5
+ import { access, mkdir, readFile, writeFile } from "fs/promises";
6
+ import { dirname, join } from "path";
7
+ import { homedir } from "os";
8
+ function npmGlobalPrefix(platform) {
9
+ const windows = platform === "win32";
10
+ const result = spawnSync(windows ? "npm.cmd" : "npm", ["prefix", "-g"], {
11
+ encoding: "utf-8",
12
+ windowsHide: true
13
+ });
14
+ return result.status === 0 ? (result.stdout ?? "").trim() : "(unavailable)";
15
+ }
16
+ function getLauncherPath(env = {}) {
17
+ const platform = env.platform ?? process.platform;
18
+ const home = env.home ?? homedir();
19
+ if (platform === "win32") {
20
+ const base = env.localAppData ?? process.env["LOCALAPPDATA"] ?? join(home, "AppData", "Local");
21
+ return join(base, "OpenFox", "bin", "openfox.cmd");
22
+ }
23
+ return join(home, ".local", "bin", "openfox");
24
+ }
25
+ function quoteShell(value) {
26
+ return `'${value.replaceAll("'", `'\\''`)}'`;
27
+ }
28
+ function buildLauncher(platform, nodeExecutable, cliExecutable) {
29
+ if (platform === "win32") {
30
+ return `@echo off\r
31
+ "${nodeExecutable}" "${cliExecutable}" %*\r
32
+ `;
33
+ }
34
+ return `#!/bin/sh
35
+ exec ${quoteShell(nodeExecutable)} ${quoteShell(cliExecutable)} "$@"
36
+ `;
37
+ }
38
+ function pathContains(directory, pathValue, platform) {
39
+ const normalize = (value) => platform === "win32" ? value.toLowerCase() : value;
40
+ const pathDelimiter = platform === "win32" ? ";" : ":";
41
+ return pathValue.split(pathDelimiter).filter(Boolean).some((entry) => normalize(entry.replace(/[\\/]$/, "")) === normalize(directory.replace(/[\\/]$/, "")));
42
+ }
43
+ async function fileExists(path) {
44
+ try {
45
+ await access(path);
46
+ return true;
47
+ } catch {
48
+ return false;
49
+ }
50
+ }
51
+ async function checkInstall(env = {}) {
52
+ const platform = env.platform ?? process.platform;
53
+ const launcherPath = getLauncherPath(env);
54
+ const launcherDirectory = dirname(launcherPath);
55
+ const nodeExecutable = env.nodeExecutable ?? process.execPath;
56
+ const cliExecutable = env.cliExecutable ?? process.argv[1] ?? "";
57
+ const launcherExists = await fileExists(launcherPath);
58
+ const expected = buildLauncher(platform, nodeExecutable, cliExecutable);
59
+ const launcherPersistent = launcherExists && await readFile(launcherPath, "utf-8") === expected;
60
+ return {
61
+ currentExecutable: cliExecutable,
62
+ nodeExecutable,
63
+ npmPrefix: env.npmPrefix ?? npmGlobalPrefix(platform),
64
+ launcherPath,
65
+ launcherDirectory,
66
+ launcherExists,
67
+ launcherPersistent,
68
+ directoryInPath: pathContains(launcherDirectory, env.path ?? process.env["PATH"] ?? "", platform)
69
+ };
70
+ }
71
+ function printCheck(check) {
72
+ console.log("OpenFox CLI installation:");
73
+ console.log(` Current executable: ${check.currentExecutable}`);
74
+ console.log(` Node executable: ${check.nodeExecutable}`);
75
+ console.log(` npm global prefix: ${check.npmPrefix}`);
76
+ console.log(` Persistent launcher: ${check.launcherPath}`);
77
+ console.log(` Launcher exists: ${check.launcherExists ? "yes" : "no"}`);
78
+ console.log(` Launcher is current: ${check.launcherPersistent ? "yes" : "no"}`);
79
+ console.log(` Launcher directory in PATH: ${check.directoryInPath ? "yes" : "no"}`);
80
+ }
81
+ async function runInstall(options = {}) {
82
+ const env = options.env ?? {};
83
+ const platform = env.platform ?? process.platform;
84
+ if (options.check) {
85
+ printCheck(await checkInstall(env));
86
+ return 0;
87
+ }
88
+ const launcherPath = getLauncherPath(env);
89
+ const nodeExecutable = env.nodeExecutable ?? process.execPath;
90
+ const cliExecutable = env.cliExecutable ?? process.argv[1];
91
+ if (!cliExecutable) {
92
+ console.error("Unable to determine the OpenFox CLI executable path.");
93
+ return 1;
94
+ }
95
+ await mkdir(dirname(launcherPath), { recursive: true });
96
+ await writeFile(launcherPath, buildLauncher(platform, nodeExecutable, cliExecutable), {
97
+ mode: platform === "win32" ? void 0 : 493
98
+ });
99
+ const check = await checkInstall({ ...env, nodeExecutable, cliExecutable });
100
+ if (!options.quiet) {
101
+ console.log(`Persistent OpenFox launcher installed: ${launcherPath}`);
102
+ }
103
+ if (!check.directoryInPath) {
104
+ if (platform === "win32") {
105
+ console.log(`Add this directory to your user PATH:
106
+ ${check.launcherDirectory}`);
107
+ } else {
108
+ console.log(`Add this line to your shell configuration:
109
+ export PATH="$HOME/.local/bin:$PATH"`);
110
+ }
111
+ }
112
+ return 0;
113
+ }
114
+ export {
115
+ buildLauncher,
116
+ checkInstall,
117
+ getLauncherPath,
118
+ runInstall
119
+ };
120
+ //# sourceMappingURL=install-CPOPMCSE.js.map
@@ -6,10 +6,10 @@ import {
6
6
  onProcessEvent,
7
7
  startProcessCommand,
8
8
  stopProcess
9
- } from "./chunk-PYB2UEC3.js";
10
- import "./chunk-I72ACQ6R.js";
9
+ } from "./chunk-LTFB2WWE.js";
11
10
  import "./chunk-S7O77CVO.js";
12
11
  import "./chunk-QNKXZH3Z.js";
12
+ import "./chunk-I72ACQ6R.js";
13
13
  import "./chunk-I4RWK2L2.js";
14
14
  import "./chunk-K44MW7JJ.js";
15
15
  import "./chunk-5WRI5ZAA.js";
@@ -22,4 +22,4 @@ export {
22
22
  startProcessCommand,
23
23
  stopProcess
24
24
  };
25
- //# sourceMappingURL=manager-24C2AXVF.js.map
25
+ //# sourceMappingURL=manager-5GILDCVD.js.map
@@ -1,9 +1,11 @@
1
1
  import {
2
2
  runAgentTurn,
3
3
  runChatTurn
4
- } from "./chunk-O2BE7KVQ.js";
5
- import "./chunk-GMF36EZ3.js";
6
- import "./chunk-X2Y3AJPP.js";
4
+ } from "./chunk-J3VQBVGO.js";
5
+ import "./chunk-6ZMGWDOD.js";
6
+ import "./chunk-NWO6GRYE.js";
7
+ import "./chunk-UN26GIQG.js";
8
+ import "./chunk-MF3UW36X.js";
7
9
  import "./chunk-WGMJCFCE.js";
8
10
  import "./chunk-EU3WWTFH.js";
9
11
  import {
@@ -16,22 +18,21 @@ import {
16
18
  } from "./chunk-XWBNYU2L.js";
17
19
  import "./chunk-E5LLEO3C.js";
18
20
  import "./chunk-UV3EMWL4.js";
19
- import "./chunk-PYB2UEC3.js";
20
- import "./chunk-I72ACQ6R.js";
21
- import "./chunk-NWO6GRYE.js";
22
- import "./chunk-UN26GIQG.js";
23
- import "./chunk-6XKM25OT.js";
24
- import "./chunk-DJASQ2ZB.js";
25
- import "./chunk-NOU2QIL5.js";
21
+ import "./chunk-LTFB2WWE.js";
26
22
  import "./chunk-S7O77CVO.js";
27
23
  import "./chunk-QNKXZH3Z.js";
24
+ import "./chunk-I72ACQ6R.js";
25
+ import "./chunk-KEVRZWL3.js";
26
+ import "./chunk-YFFP4DR4.js";
28
27
  import "./chunk-I4RWK2L2.js";
28
+ import "./chunk-DJASQ2ZB.js";
29
+ import "./chunk-O3NUNU4H.js";
29
30
  import "./chunk-J2GP3J3X.js";
30
31
  import "./chunk-V4IE7HJY.js";
31
32
  import "./chunk-YHEQTVFV.js";
32
33
  import "./chunk-EZK7CGJ7.js";
33
34
  import "./chunk-K44MW7JJ.js";
34
- import "./chunk-YD6NDTKF.js";
35
+ import "./chunk-5GOOSZX7.js";
35
36
  import "./chunk-WGAAQASA.js";
36
37
  import "./chunk-CQGTEGKL.js";
37
38
  import "./chunk-5WRI5ZAA.js";
@@ -45,4 +46,4 @@ export {
45
46
  runAgentTurn,
46
47
  runChatTurn
47
48
  };
48
- //# sourceMappingURL=orchestrator-RTZVMWQV.js.map
49
+ //# sourceMappingURL=orchestrator-BIFTALBG.js.map
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openfox",
3
- "version": "2.0.73",
3
+ "version": "2.0.75",
4
4
  "description": "Local-LLM-first agentic coding assistant",
5
5
  "type": "module",
6
6
  "bin": {
@@ -0,0 +1,50 @@
1
+ import {
2
+ PathAccessDeniedError,
3
+ addAllowedPath,
4
+ addAllowedPaths,
5
+ cancelPathConfirmation,
6
+ cancelPathConfirmationsForSession,
7
+ checkPathsAccess,
8
+ clearAllowedPaths,
9
+ extractAbsolutePathsFromCommand,
10
+ extractDangerousPatterns,
11
+ extractGitNoVerify,
12
+ extractSensitivePathsFromCommand,
13
+ getPendingConfirmationsBySession,
14
+ hasPendingPathConfirmation,
15
+ isPathAllowed,
16
+ isPathWithinSandbox,
17
+ isSensitivePath,
18
+ providePathConfirmation,
19
+ registerPathConfirmation,
20
+ requestPathAccess
21
+ } from "./chunk-KEVRZWL3.js";
22
+ import "./chunk-YFFP4DR4.js";
23
+ import "./chunk-I4RWK2L2.js";
24
+ import "./chunk-DJASQ2ZB.js";
25
+ import "./chunk-O3NUNU4H.js";
26
+ import "./chunk-K44MW7JJ.js";
27
+ import "./chunk-5GOOSZX7.js";
28
+ import "./chunk-5WRI5ZAA.js";
29
+ export {
30
+ PathAccessDeniedError,
31
+ addAllowedPath,
32
+ addAllowedPaths,
33
+ cancelPathConfirmation,
34
+ cancelPathConfirmationsForSession,
35
+ checkPathsAccess,
36
+ clearAllowedPaths,
37
+ extractAbsolutePathsFromCommand,
38
+ extractDangerousPatterns,
39
+ extractGitNoVerify,
40
+ extractSensitivePathsFromCommand,
41
+ getPendingConfirmationsBySession,
42
+ hasPendingPathConfirmation,
43
+ isPathAllowed,
44
+ isPathWithinSandbox,
45
+ isSensitivePath,
46
+ providePathConfirmation,
47
+ registerPathConfirmation,
48
+ requestPathAccess
49
+ };
50
+ //# sourceMappingURL=path-security-3FAIPJSV.js.map
@@ -2,29 +2,30 @@ import {
2
2
  buildRunChatTurnParams,
3
3
  finalizeTurnCompletion,
4
4
  generateSessionNameForSession
5
- } from "./chunk-2DCJERYX.js";
6
- import "./chunk-GMF36EZ3.js";
7
- import "./chunk-X2Y3AJPP.js";
5
+ } from "./chunk-CJ2AJ7HU.js";
6
+ import "./chunk-6ZMGWDOD.js";
7
+ import "./chunk-NWO6GRYE.js";
8
+ import "./chunk-UN26GIQG.js";
9
+ import "./chunk-MF3UW36X.js";
8
10
  import "./chunk-WGMJCFCE.js";
9
11
  import "./chunk-EU3WWTFH.js";
10
12
  import "./chunk-XWBNYU2L.js";
11
13
  import "./chunk-E5LLEO3C.js";
12
14
  import "./chunk-UV3EMWL4.js";
13
- import "./chunk-PYB2UEC3.js";
15
+ import "./chunk-LTFB2WWE.js";
16
+ import "./chunk-S7O77CVO.js";
17
+ import "./chunk-QNKXZH3Z.js";
14
18
  import "./chunk-I72ACQ6R.js";
15
- import "./chunk-NWO6GRYE.js";
16
- import "./chunk-UN26GIQG.js";
19
+ import "./chunk-KEVRZWL3.js";
17
20
  import {
18
21
  getEventStore
19
- } from "./chunk-6XKM25OT.js";
22
+ } from "./chunk-YFFP4DR4.js";
23
+ import "./chunk-I4RWK2L2.js";
20
24
  import "./chunk-DJASQ2ZB.js";
21
25
  import {
22
26
  createChatMessageMessage,
23
27
  createSessionRunningMessage
24
- } from "./chunk-NOU2QIL5.js";
25
- import "./chunk-S7O77CVO.js";
26
- import "./chunk-QNKXZH3Z.js";
27
- import "./chunk-I4RWK2L2.js";
28
+ } from "./chunk-O3NUNU4H.js";
28
29
  import "./chunk-J2GP3J3X.js";
29
30
  import "./chunk-V4IE7HJY.js";
30
31
  import "./chunk-YHEQTVFV.js";
@@ -32,7 +33,7 @@ import "./chunk-EZK7CGJ7.js";
32
33
  import {
33
34
  logger
34
35
  } from "./chunk-K44MW7JJ.js";
35
- import "./chunk-YD6NDTKF.js";
36
+ import "./chunk-5GOOSZX7.js";
36
37
  import "./chunk-WGAAQASA.js";
37
38
  import "./chunk-CQGTEGKL.js";
38
39
  import "./chunk-5WRI5ZAA.js";
@@ -179,7 +180,7 @@ var QueueProcessor = class {
179
180
  backend: provider?.backend ?? llmClient.getBackend(),
180
181
  model: llmClient.getModel()
181
182
  };
182
- const { runChatTurn } = await import("./orchestrator-RTZVMWQV.js");
183
+ const { runChatTurn } = await import("./orchestrator-BIFTALBG.js");
183
184
  const runChatTurnParams = buildRunChatTurnParams({
184
185
  sessionManager,
185
186
  sessionId,
@@ -227,4 +228,4 @@ var QueueProcessor = class {
227
228
  export {
228
229
  QueueProcessor
229
230
  };
230
- //# sourceMappingURL=processor-3O26I7DO.js.map
231
+ //# sourceMappingURL=processor-MQ47QSDR.js.map
@@ -35,8 +35,8 @@ import {
35
35
  parseClientMessage,
36
36
  serializeServerMessage,
37
37
  storedEventToServerMessage
38
- } from "./chunk-NOU2QIL5.js";
39
- import "./chunk-YD6NDTKF.js";
38
+ } from "./chunk-O3NUNU4H.js";
39
+ import "./chunk-5GOOSZX7.js";
40
40
  import "./chunk-5WRI5ZAA.js";
41
41
  export {
42
42
  createChatAskUserMessage,
@@ -76,4 +76,4 @@ export {
76
76
  serializeServerMessage,
77
77
  storedEventToServerMessage
78
78
  };
79
- //# sourceMappingURL=protocol-4QFU7WAI.js.map
79
+ //# sourceMappingURL=protocol-EWEVW65B.js.map
@@ -23,7 +23,7 @@ interface QueuedMessage {
23
23
  queuedAt: string;
24
24
  messageKind?: string;
25
25
  }
26
- type ServerMessageType = 'project.state' | 'project.list' | 'project.deleted' | 'session.state' | 'session.list' | 'session.deleted' | 'session.deletedAll' | 'session.running' | 'session.name_generated' | 'chat.delta' | 'chat.thinking' | 'chat.tool_preparing' | 'chat.tool_call' | 'chat.tool_output' | 'chat.tool_result' | 'chat.todo' | 'chat.progress' | 'chat.format_retry' | 'chat.message' | 'chat.message_updated' | 'chat.done' | 'chat.vision_fallback' | 'chat.error' | 'chat.path_confirmation' | 'chat.ask_user' | 'mode.changed' | 'phase.changed' | 'task.completed' | 'criteria.updated' | 'metadata.updated' | 'context.state' | 'settings.value' | 'provider.changed' | 'queue.state' | 'devServer.output' | 'devServer.state' | 'backgroundProcess.started' | 'backgroundProcess.output' | 'backgroundProcess.exited' | 'backgroundProcess.removed' | 'git.status' | 'mcp.servers.changed' | 'lsp.diagnostics' | 'error' | 'ack';
26
+ type ServerMessageType = 'project.state' | 'project.list' | 'project.deleted' | 'session.state' | 'session.list' | 'session.created' | 'session.deleted' | 'session.deletedAll' | 'session.running' | 'session.name_generated' | 'session.confirmation_pending' | 'session.confirmation_resolved' | 'chat.delta' | 'chat.thinking' | 'chat.tool_preparing' | 'chat.tool_call' | 'chat.tool_output' | 'chat.tool_result' | 'chat.todo' | 'chat.progress' | 'chat.format_retry' | 'chat.message' | 'chat.message_updated' | 'chat.done' | 'chat.vision_fallback' | 'chat.error' | 'chat.path_confirmation' | 'chat.ask_user' | 'mode.changed' | 'phase.changed' | 'task.completed' | 'criteria.updated' | 'metadata.updated' | 'context.state' | 'settings.value' | 'provider.changed' | 'queue.state' | 'devServer.output' | 'devServer.state' | 'backgroundProcess.started' | 'backgroundProcess.output' | 'backgroundProcess.exited' | 'backgroundProcess.removed' | 'git.status' | 'mcp.servers.changed' | 'lsp.diagnostics' | 'error' | 'ack';
27
27
  interface ServerMessage<T = unknown> {
28
28
  id?: string;
29
29
  type: ServerMessageType;
@@ -63,6 +63,9 @@ interface PendingPathConfirmationPayload {
63
63
  interface SessionListPayload {
64
64
  sessions: SessionSummary[];
65
65
  }
66
+ interface SessionCreatedPayload {
67
+ session: SessionSummary;
68
+ }
66
69
  interface SessionRunningPayload {
67
70
  isRunning: boolean;
68
71
  }
@@ -372,4 +375,4 @@ interface QueueCancelledEvent {
372
375
  }
373
376
  type QueueEvent = QueueAddedEvent | QueueDrainedEvent | QueueCancelledEvent;
374
377
 
375
- export { type QueueStatePayload as $, type AgentEvent as A, type BackgroundProcess as B, type ChatAskUserPayload as C, type CriteriaUpdatedPayload as D, type DevServerOutputPayload as E, type DevServerStatePayload as F, type ErrorPayload as G, type GitDiffFile as H, type GitStatusPayload as I, type LspDiagnosticsPayload as J, type ModeChangedPayload as K, type LogLine as L, type MetadataUpdatedPayload as M, type PathConfirmationReason as N, type PendingPathConfirmationPayload as O, type PathConfirmPayload as P, type PendingQuestionPayload as Q, type PhaseChangedPayload as R, type ProjectDeletedPayload as S, type ProjectListPayload as T, type ProjectStatePayload as U, type ProviderChangedPayload as V, type QueueAddedEvent as W, type QueueCancelledEvent as X, type QueueDrainedEvent as Y, type QueueEvent as Z, type QueueEventType as _, type AskAnswerPayload as a, type QueuedMessage as a0, type ServerMessage as a1, type ServerMessageType as a2, type SessionListPayload as a3, type SessionLoadPayload as a4, type SessionNameGeneratedPayload as a5, type SessionRunningPayload as a6, type SessionStatePayload as a7, type TaskCompletedPayload as a8, createClientMessage as a9, createServerMessage as aa, isClientMessage as ab, isServerMessage as ac, type AskUserEvent as b, type BackgroundProcessExitedPayload as c, type BackgroundProcessOutputPayload as d, type BackgroundProcessRemovedPayload as e, type BackgroundProcessStartedPayload as f, type BackgroundProcessStatus as g, type ChatDeltaPayload as h, type ChatDonePayload as i, type ChatErrorPayload as j, type ChatFormatRetryPayload as k, type ChatMessagePayload as l, type ChatMessageUpdatedPayload as m, type ChatPathConfirmationPayload as n, type ChatProgressPayload as o, type ChatThinkingPayload as p, type ChatTodoPayload as q, type ChatToolCallPayload as r, type ChatToolOutputPayload as s, type ChatToolPreparingPayload as t, type ChatToolResultPayload as u, type ChatVisionFallbackPayload as v, type ClientMessage as w, type ClientMessageType as x, type ContextCompactionEvent as y, type ContextStatePayload as z };
378
+ export { type QueueStatePayload as $, type AgentEvent as A, type BackgroundProcess as B, type ChatAskUserPayload as C, type CriteriaUpdatedPayload as D, type DevServerOutputPayload as E, type DevServerStatePayload as F, type ErrorPayload as G, type GitDiffFile as H, type GitStatusPayload as I, type LspDiagnosticsPayload as J, type ModeChangedPayload as K, type LogLine as L, type MetadataUpdatedPayload as M, type PathConfirmationReason as N, type PendingPathConfirmationPayload as O, type PathConfirmPayload as P, type PendingQuestionPayload as Q, type PhaseChangedPayload as R, type ProjectDeletedPayload as S, type ProjectListPayload as T, type ProjectStatePayload as U, type ProviderChangedPayload as V, type QueueAddedEvent as W, type QueueCancelledEvent as X, type QueueDrainedEvent as Y, type QueueEvent as Z, type QueueEventType as _, type AskAnswerPayload as a, type QueuedMessage as a0, type ServerMessage as a1, type ServerMessageType as a2, type SessionCreatedPayload as a3, type SessionListPayload as a4, type SessionLoadPayload as a5, type SessionNameGeneratedPayload as a6, type SessionRunningPayload as a7, type SessionStatePayload as a8, type TaskCompletedPayload as a9, createClientMessage as aa, createServerMessage as ab, isClientMessage as ac, isServerMessage as ad, type AskUserEvent as b, type BackgroundProcessExitedPayload as c, type BackgroundProcessOutputPayload as d, type BackgroundProcessRemovedPayload as e, type BackgroundProcessStartedPayload as f, type BackgroundProcessStatus as g, type ChatDeltaPayload as h, type ChatDonePayload as i, type ChatErrorPayload as j, type ChatFormatRetryPayload as k, type ChatMessagePayload as l, type ChatMessageUpdatedPayload as m, type ChatPathConfirmationPayload as n, type ChatProgressPayload as o, type ChatThinkingPayload as p, type ChatTodoPayload as q, type ChatToolCallPayload as r, type ChatToolOutputPayload as s, type ChatToolPreparingPayload as t, type ChatToolResultPayload as u, type ChatVisionFallbackPayload as v, type ClientMessage as w, type ClientMessageType as x, type ContextCompactionEvent as y, type ContextStatePayload as z };
@@ -1,31 +1,32 @@
1
1
  import {
2
2
  createServer
3
- } from "./chunk-EYXDM2FY.js";
4
- import "./chunk-TK4BZIXA.js";
5
- import "./chunk-O2BE7KVQ.js";
6
- import "./chunk-GMF36EZ3.js";
7
- import "./chunk-X2Y3AJPP.js";
3
+ } from "./chunk-MIJX54CG.js";
4
+ import "./chunk-LKUAKQZY.js";
5
+ import "./chunk-J3VQBVGO.js";
6
+ import "./chunk-6ZMGWDOD.js";
7
+ import "./chunk-NWO6GRYE.js";
8
+ import "./chunk-UN26GIQG.js";
9
+ import "./chunk-MF3UW36X.js";
8
10
  import "./chunk-WGMJCFCE.js";
9
11
  import "./chunk-EU3WWTFH.js";
10
- import "./chunk-CHPRGEY5.js";
12
+ import "./chunk-LUG5QTFC.js";
11
13
  import "./chunk-XWBNYU2L.js";
12
14
  import "./chunk-E5LLEO3C.js";
13
15
  import "./chunk-UV3EMWL4.js";
14
- import "./chunk-PYB2UEC3.js";
16
+ import "./chunk-LTFB2WWE.js";
17
+ import "./chunk-S7O77CVO.js";
18
+ import "./chunk-QNKXZH3Z.js";
15
19
  import "./chunk-I72ACQ6R.js";
16
- import "./chunk-NWO6GRYE.js";
17
- import "./chunk-UN26GIQG.js";
18
20
  import {
19
21
  VERSION
20
- } from "./chunk-NE7OWIIO.js";
22
+ } from "./chunk-6COWK53A.js";
23
+ import "./chunk-KEVRZWL3.js";
21
24
  import {
22
25
  loadConfig
23
- } from "./chunk-6XKM25OT.js";
24
- import "./chunk-DJASQ2ZB.js";
25
- import "./chunk-NOU2QIL5.js";
26
- import "./chunk-S7O77CVO.js";
27
- import "./chunk-QNKXZH3Z.js";
26
+ } from "./chunk-YFFP4DR4.js";
28
27
  import "./chunk-I4RWK2L2.js";
28
+ import "./chunk-DJASQ2ZB.js";
29
+ import "./chunk-O3NUNU4H.js";
29
30
  import "./chunk-OHGQILRF.js";
30
31
  import "./chunk-J2GP3J3X.js";
31
32
  import "./chunk-6XOA2WPU.js";
@@ -38,7 +39,7 @@ import {
38
39
  logger
39
40
  } from "./chunk-K44MW7JJ.js";
40
41
  import "./chunk-VUQCQXXJ.js";
41
- import "./chunk-YD6NDTKF.js";
42
+ import "./chunk-5GOOSZX7.js";
42
43
  import {
43
44
  getActiveProvider,
44
45
  getDefaultModel,
@@ -210,4 +211,4 @@ async function runServe(options) {
210
211
  export {
211
212
  runServe
212
213
  };
213
- //# sourceMappingURL=serve-I6K7A7RL.js.map
214
+ //# sourceMappingURL=serve-UD27KOL2.js.map
@@ -1,7 +1,7 @@
1
1
  import { h as Diagnostic, u as Provider, r as ModelConfig, w as Session, B as SessionSummary, t as Project, y as SessionMode, z as SessionPhase, M as Message, d as Criterion, f as CriterionStatus, q as MetadataEntry, A as Attachment, b as ContextState, D as DangerLevel$1, H as StatsIdentity, O as ToolResult, a as Config } from '../types-C4cG9CtC.js';
2
2
  import { Server } from 'node:http';
3
3
  import { e as LLMClient, d as LLMToolDefinition } from '../types-DSZhFA8O.js';
4
- import { a0 as QueuedMessage, a1 as ServerMessage } from '../protocol-DGQWVFcP.js';
4
+ import { a0 as QueuedMessage, a1 as ServerMessage } from '../protocol-Sr6Jr4ZS.js';
5
5
 
6
6
  /**
7
7
  * Model-specific configuration profiles.
@@ -318,6 +318,8 @@ declare class SessionManager {
318
318
  private dynamicContextChangedStore;
319
319
  private debugDumpStore;
320
320
  private warmedUpSessions;
321
+ private switchLocks;
322
+ private workspaceCreationLocks;
321
323
  constructor(providerManager: ProviderManager);
322
324
  getCurrentModelSettings(sessionId?: string): {
323
325
  temperature?: number;
@@ -527,11 +529,13 @@ declare class SessionManager {
527
529
  * Switch to a workspace. Target can be "original" (project root) or a workspace name.
528
530
  * If the workspace doesn't exist yet, it's created first.
529
531
  * Emits a single type of event — switching is always "opening" a workspace.
532
+ * Switches are serialized per-session to prevent race conditions.
530
533
  */
531
534
  switchWorkspace(sessionId: string, target: string, branch?: string): Promise<Session>;
532
535
  /**
533
536
  * Delete a workspace by name. If the session is currently in that workspace,
534
537
  * switches to original first. Throws if target is "original".
538
+ * Refuses deletion if other sessions reference this workspace.
535
539
  */
536
540
  deleteWorkspace(sessionId: string, target: string): Promise<Session>;
537
541
  setActiveSession(id: string | null): void;