openfox 2.0.73 → 2.0.74

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.
@@ -73,13 +73,13 @@ async function runNetworkSetup(mode) {
73
73
  privateKeyEncoding: { type: "pkcs8", format: "pem" },
74
74
  publicKeyEncoding: { type: "spki", format: "pem" }
75
75
  });
76
- const keyPath = getAuthKeyPath(mode);
77
- await writeFile(keyPath, privateKey, { mode: 384 });
78
76
  const encryptedPassword = encryptPassword(passwordValue, publicKey);
79
77
  await saveAuthConfig(mode, {
80
78
  strategy: "network",
81
79
  encryptedPassword
82
80
  });
81
+ const keyPath = getAuthKeyPath(mode);
82
+ await writeFile(keyPath, privateKey, { mode: 384 });
83
83
  } else {
84
84
  await saveAuthConfig(mode, {
85
85
  strategy: isNetwork ? "network" : "local",
@@ -190,7 +190,7 @@ async function runCli(options) {
190
190
  break;
191
191
  }
192
192
  case "update": {
193
- const { runUpdate } = await import("./update-RJB4GPHE.js");
193
+ const { runUpdate } = await import("./update-FWO365SV.js");
194
194
  const code = runUpdate();
195
195
  if (code !== 0) {
196
196
  process.exit(code);
@@ -203,7 +203,7 @@ async function runCli(options) {
203
203
  if (!configExists) {
204
204
  await runNetworkSetup(mode);
205
205
  }
206
- const { runServe } = await import("./serve-I6K7A7RL.js");
206
+ const { runServe } = await import("./serve-T5U6SLB7.js");
207
207
  const serveOptions = { mode };
208
208
  if (values.port) serveOptions.port = parseInt(values.port);
209
209
  if (values["no-browser"] === true) serveOptions.openBrowser = false;
@@ -215,4 +215,4 @@ async function runCli(options) {
215
215
  export {
216
216
  runCli
217
217
  };
218
- //# sourceMappingURL=chunk-KKRLQH6F.js.map
218
+ //# sourceMappingURL=chunk-R6L2QXQ5.js.map
@@ -3,7 +3,7 @@ import {
3
3
  computeSessionHash,
4
4
  runAgentTurn,
5
5
  runChatTurn
6
- } from "./chunk-O2BE7KVQ.js";
6
+ } from "./chunk-ZRQDCQ7R.js";
7
7
  import {
8
8
  deleteItemFromDir,
9
9
  devServerManager,
@@ -13,7 +13,7 @@ import {
13
13
  jsonSerializer,
14
14
  loadAllAgentsDefault,
15
15
  saveItemToDir
16
- } from "./chunk-GMF36EZ3.js";
16
+ } from "./chunk-2VBETAU2.js";
17
17
  import {
18
18
  gitSpawnEnv
19
19
  } from "./chunk-WGMJCFCE.js";
@@ -1631,7 +1631,14 @@ function createWebSocketServer(httpServer, _config, getLLMClient, getActiveProvi
1631
1631
  workspaceChanged = true;
1632
1632
  const prevWorkdir = client.activeWorkdir;
1633
1633
  client.activeWorkdir = effectiveWorkdir;
1634
- if (prevWorkdir) moduleStopGitPolling(prevWorkdir);
1634
+ if (prevWorkdir) {
1635
+ const hasOtherClients = [...clients.values()].some(
1636
+ (c) => c !== client && c.activeWorkdir === prevWorkdir
1637
+ );
1638
+ if (!hasOtherClients) {
1639
+ moduleStopGitPolling(prevWorkdir);
1640
+ }
1641
+ }
1635
1642
  }
1636
1643
  }
1637
1644
  if (effectiveWorkdir) moduleStartGitPolling(effectiveWorkdir);
@@ -2172,4 +2179,4 @@ export {
2172
2179
  signalMcpReady,
2173
2180
  createWebSocketServer
2174
2181
  };
2175
- //# sourceMappingURL=chunk-TK4BZIXA.js.map
2182
+ //# sourceMappingURL=chunk-TMRFTWXP.js.map
@@ -10,7 +10,7 @@ import {
10
10
  loadAllAgentsDefault,
11
11
  processEventsForConversation,
12
12
  runTopLevelAgentLoop
13
- } from "./chunk-GMF36EZ3.js";
13
+ } from "./chunk-2VBETAU2.js";
14
14
  import {
15
15
  TurnMetrics,
16
16
  buildAgentReminder,
@@ -64,7 +64,7 @@ function resolveAgentDef(sessionManager, sessionId) {
64
64
  }
65
65
  async function buildCachedPrompt(sessionManager, sessionId, agentDef) {
66
66
  const { instructionContent, skills } = await loadSessionContext(sessionManager, sessionId);
67
- const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-X52DFUS6.js");
67
+ const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-APW7MY4E.js");
68
68
  const tools = getToolRegistryForAgent2(agentDef).definitions;
69
69
  const toolFingerprint = getToolFingerprint(tools);
70
70
  const allAgents = await loadAllAgentsDefault();
@@ -77,7 +77,7 @@ async function buildCachedPrompt(sessionManager, sessionId, agentDef) {
77
77
  async function computeSessionHash(sessionManager, sessionId) {
78
78
  const { instructionContent, skills } = await loadSessionContext(sessionManager, sessionId);
79
79
  const agentDef = await resolveAgentDef(sessionManager, sessionId);
80
- const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-X52DFUS6.js");
80
+ const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-APW7MY4E.js");
81
81
  const tools = getToolRegistryForAgent2(agentDef).definitions;
82
82
  const toolFingerprint = getToolFingerprint(tools);
83
83
  return computeDynamicContextHash(instructionContent, skills, toolFingerprint);
@@ -357,4 +357,4 @@ export {
357
357
  runChatTurn,
358
358
  runAgentTurn
359
359
  };
360
- //# sourceMappingURL=chunk-O2BE7KVQ.js.map
360
+ //# sourceMappingURL=chunk-ZRQDCQ7R.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-R6L2QXQ5.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-R6L2QXQ5.js";
5
5
  import "../chunk-XY3LESVZ.js";
6
6
  import {
7
7
  logger
@@ -1,9 +1,9 @@
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-ZRQDCQ7R.js";
5
+ import "./chunk-2VBETAU2.js";
6
+ import "./chunk-MF3UW36X.js";
7
7
  import "./chunk-WGMJCFCE.js";
8
8
  import "./chunk-EU3WWTFH.js";
9
9
  import {
@@ -45,4 +45,4 @@ export {
45
45
  runAgentTurn,
46
46
  runChatTurn
47
47
  };
48
- //# sourceMappingURL=orchestrator-RTZVMWQV.js.map
48
+ //# sourceMappingURL=orchestrator-O2YAAZ3U.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.74",
4
4
  "description": "Local-LLM-first agentic coding assistant",
5
5
  "type": "module",
6
6
  "bin": {
@@ -3,8 +3,8 @@ import {
3
3
  finalizeTurnCompletion,
4
4
  generateSessionNameForSession
5
5
  } from "./chunk-2DCJERYX.js";
6
- import "./chunk-GMF36EZ3.js";
7
- import "./chunk-X2Y3AJPP.js";
6
+ import "./chunk-2VBETAU2.js";
7
+ import "./chunk-MF3UW36X.js";
8
8
  import "./chunk-WGMJCFCE.js";
9
9
  import "./chunk-EU3WWTFH.js";
10
10
  import "./chunk-XWBNYU2L.js";
@@ -179,7 +179,7 @@ var QueueProcessor = class {
179
179
  backend: provider?.backend ?? llmClient.getBackend(),
180
180
  model: llmClient.getModel()
181
181
  };
182
- const { runChatTurn } = await import("./orchestrator-RTZVMWQV.js");
182
+ const { runChatTurn } = await import("./orchestrator-O2YAAZ3U.js");
183
183
  const runChatTurnParams = buildRunChatTurnParams({
184
184
  sessionManager,
185
185
  sessionId,
@@ -227,4 +227,4 @@ var QueueProcessor = class {
227
227
  export {
228
228
  QueueProcessor
229
229
  };
230
- //# sourceMappingURL=processor-3O26I7DO.js.map
230
+ //# sourceMappingURL=processor-FKAS3K4L.js.map
@@ -1,10 +1,10 @@
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-QFR6JF32.js";
4
+ import "./chunk-TMRFTWXP.js";
5
+ import "./chunk-ZRQDCQ7R.js";
6
+ import "./chunk-2VBETAU2.js";
7
+ import "./chunk-MF3UW36X.js";
8
8
  import "./chunk-WGMJCFCE.js";
9
9
  import "./chunk-EU3WWTFH.js";
10
10
  import "./chunk-CHPRGEY5.js";
@@ -17,7 +17,7 @@ import "./chunk-NWO6GRYE.js";
17
17
  import "./chunk-UN26GIQG.js";
18
18
  import {
19
19
  VERSION
20
- } from "./chunk-NE7OWIIO.js";
20
+ } from "./chunk-3OZBPWHP.js";
21
21
  import {
22
22
  loadConfig
23
23
  } from "./chunk-6XKM25OT.js";
@@ -210,4 +210,4 @@ async function runServe(options) {
210
210
  export {
211
211
  runServe
212
212
  };
213
- //# sourceMappingURL=serve-I6K7A7RL.js.map
213
+ //# sourceMappingURL=serve-T5U6SLB7.js.map
@@ -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;
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  createServer,
3
3
  createServerHandle
4
- } from "../chunk-EYXDM2FY.js";
5
- import "../chunk-TK4BZIXA.js";
6
- import "../chunk-O2BE7KVQ.js";
7
- import "../chunk-GMF36EZ3.js";
8
- import "../chunk-X2Y3AJPP.js";
4
+ } from "../chunk-QFR6JF32.js";
5
+ import "../chunk-TMRFTWXP.js";
6
+ import "../chunk-ZRQDCQ7R.js";
7
+ import "../chunk-2VBETAU2.js";
8
+ import "../chunk-MF3UW36X.js";
9
9
  import "../chunk-WGMJCFCE.js";
10
10
  import "../chunk-EU3WWTFH.js";
11
11
  import "../chunk-CHPRGEY5.js";
@@ -16,7 +16,7 @@ import "../chunk-PYB2UEC3.js";
16
16
  import "../chunk-I72ACQ6R.js";
17
17
  import "../chunk-NWO6GRYE.js";
18
18
  import "../chunk-UN26GIQG.js";
19
- import "../chunk-NE7OWIIO.js";
19
+ import "../chunk-3OZBPWHP.js";
20
20
  import "../chunk-6XKM25OT.js";
21
21
  import "../chunk-DJASQ2ZB.js";
22
22
  import "../chunk-NOU2QIL5.js";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  createWebSocketServer,
3
3
  signalMcpReady
4
- } from "./chunk-TK4BZIXA.js";
5
- import "./chunk-O2BE7KVQ.js";
6
- import "./chunk-GMF36EZ3.js";
7
- import "./chunk-X2Y3AJPP.js";
4
+ } from "./chunk-TMRFTWXP.js";
5
+ import "./chunk-ZRQDCQ7R.js";
6
+ import "./chunk-2VBETAU2.js";
7
+ import "./chunk-MF3UW36X.js";
8
8
  import "./chunk-WGMJCFCE.js";
9
9
  import "./chunk-EU3WWTFH.js";
10
10
  import "./chunk-CHPRGEY5.js";
@@ -35,4 +35,4 @@ export {
35
35
  createWebSocketServer,
36
36
  signalMcpReady
37
37
  };
38
- //# sourceMappingURL=server-G2J4RAXL.js.map
38
+ //# sourceMappingURL=server-T2YP3VT2.js.map
@@ -12,8 +12,8 @@ import {
12
12
  setMcpTools,
13
13
  stepDoneTool,
14
14
  validateToolAction
15
- } from "./chunk-GMF36EZ3.js";
16
- import "./chunk-X2Y3AJPP.js";
15
+ } from "./chunk-2VBETAU2.js";
16
+ import "./chunk-MF3UW36X.js";
17
17
  import "./chunk-WGMJCFCE.js";
18
18
  import {
19
19
  AskUserInterrupt,
@@ -62,4 +62,4 @@ export {
62
62
  stepDoneTool,
63
63
  validateToolAction
64
64
  };
65
- //# sourceMappingURL=tools-X52DFUS6.js.map
65
+ //# sourceMappingURL=tools-APW7MY4E.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  VERSION
3
- } from "./chunk-NE7OWIIO.js";
3
+ } from "./chunk-3OZBPWHP.js";
4
4
  import "./chunk-5WRI5ZAA.js";
5
5
 
6
6
  // src/cli/update.ts
@@ -37,4 +37,4 @@ function runUpdate() {
37
37
  export {
38
38
  runUpdate
39
39
  };
40
- //# sourceMappingURL=update-RJB4GPHE.js.map
40
+ //# sourceMappingURL=update-FWO365SV.js.map