openfox 1.6.76 → 1.6.78

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 (32) hide show
  1. package/README.md +18 -18
  2. package/dist/agent-defaults/code-reviewer.agent.md +1 -0
  3. package/dist/agent-defaults/explorer.agent.md +2 -1
  4. package/dist/agent-defaults/verifier.agent.md +4 -0
  5. package/dist/{auto-compaction-V3PA77WG.js → auto-compaction-AN3U2AD5.js} +5 -5
  6. package/dist/{chat-handler-7DKHGTVO.js → chat-handler-AIBOSHAQ.js} +8 -8
  7. package/dist/{chunk-LCQ3MPXD.js → chunk-2IZMUXMP.js} +3 -3
  8. package/dist/{chunk-K2V7EW5F.js → chunk-DKKDNJT7.js} +36 -22
  9. package/dist/{chunk-XKIEDGQF.js → chunk-DL6ZILAF.js} +1 -2
  10. package/dist/{chunk-H5EICXF3.js → chunk-GLVNO4DS.js} +188 -91
  11. package/dist/{chunk-NHJ2GVCF.js → chunk-NWXLRRDD.js} +4 -4
  12. package/dist/{chunk-5ZD3GZTK.js → chunk-RJRG2VER.js} +33 -2
  13. package/dist/{chunk-VAMTEAYI.js → chunk-TS5XFQ2D.js} +100 -49
  14. package/dist/{chunk-RQ4XSKUR.js → chunk-VSYJIPRI.js} +3 -3
  15. package/dist/cli/dev.js +1 -1
  16. package/dist/cli/index.js +1 -1
  17. package/dist/{events-BDXQOC7F.js → events-ND5GZBT2.js} +7 -5
  18. package/dist/{folding-2HW7FIKL.js → folding-XIKR6AFM.js} +14 -4
  19. package/dist/{inspect-proxy-Y75AXMRX.js → inspect-proxy-42ZXL2R5.js} +2 -2
  20. package/dist/{orchestrator-KCHEENHK.js → orchestrator-5BY2MH72.js} +6 -6
  21. package/dist/package.json +1 -1
  22. package/dist/{processor-6TS37IYH.js → processor-PV446N55.js} +5 -5
  23. package/dist/{serve-OLDABBV3.js → serve-6ME66XOO.js} +7 -7
  24. package/dist/server/index.js +6 -6
  25. package/dist/server/public/__inspect__.js +161 -142
  26. package/dist/{service-D6LC3CAM.js → service-TU4XSXYJ.js} +33 -2
  27. package/dist/{tools-BHYHS3RY.js → tools-6DXPHBUV.js} +5 -5
  28. package/dist/web/__inspect__.js +178 -155
  29. package/dist/web/assets/{index-DAuZ02-Q.js → index-0igqGWob.js} +65 -65
  30. package/dist/web/index.html +2 -2
  31. package/dist/web/sw.js +1 -1
  32. package/package.json +1 -1
package/README.md CHANGED
@@ -4,13 +4,13 @@
4
4
 
5
5
  Autonomous coding agent for local LLMs with contract-driven execution.
6
6
 
7
- *Session — Criteria tracking, tool calls, and streaming responses*
7
+ _Session — Criteria tracking, tool calls, and streaming responses_
8
8
  ![Session](docs/screenshots/session.png)
9
9
 
10
- *Providers — Local LLM backend configuration*
10
+ _Providers — Local LLM backend configuration_
11
11
  ![Providers](docs/screenshots/providers.png)
12
12
 
13
- *Workflows — Contract-driven execution pipeline*
13
+ _Workflows — Contract-driven execution pipeline_
14
14
  ![Workflows](docs/screenshots/workflows.png)
15
15
 
16
16
  ## Quick Start
@@ -46,12 +46,12 @@ openfox provider remove # Remove provider
46
46
 
47
47
  ## CLI Options
48
48
 
49
- | Option | Description | Default |
50
- |--------|-------------|---------|
51
- | `-p, --port <number>` | Specify server port | 10369 |
52
- | `--no-browser` | Don't open browser on start | Opens browser |
53
- | `-h, --help` | Show help message | - |
54
- | `-v, --version` | Show version number | - |
49
+ | Option | Description | Default |
50
+ | --------------------- | --------------------------- | ------------- |
51
+ | `-p, --port <number>` | Specify server port | 10369 |
52
+ | `--no-browser` | Don't open browser on start | Opens browser |
53
+ | `-h, --help` | Show help message | - |
54
+ | `-v, --version` | Show version number | - |
55
55
 
56
56
  ## Requirements
57
57
 
@@ -72,30 +72,30 @@ openfox provider remove # Remove provider
72
72
 
73
73
  ## Screenshots
74
74
 
75
- *Homepage — Project overview and session history*
75
+ _Homepage — Project overview and session history_
76
76
  ![Homepage](docs/screenshots/homepage.png)
77
77
 
78
- *Project Selected — Active session with context stats*
78
+ _Project Selected — Active session with context stats_
79
79
  ![Project Selected](docs/screenshots/project-selected.png)
80
80
 
81
- *Stats — Prefill time, generation speed, token usage*
81
+ _Stats — Prefill time, generation speed, token usage_
82
82
  ![Stats](docs/screenshots/stats.png)
83
83
 
84
- *Terminal — Integrated terminal for running commands*
84
+ _Terminal — Integrated terminal for running commands_
85
85
  ![Terminal](docs/screenshots/terminal.png)
86
86
 
87
- *Notifications — Event log and system messages*
87
+ _Notifications — Event log and system messages_
88
88
  ![Notifications](docs/screenshots/notifications.png)
89
89
 
90
- *Agents — Sub-agent management and execution*
90
+ _Agents — Sub-agent management and execution_
91
91
  ![Agents](docs/screenshots/agents.png)
92
92
 
93
- *General Instructions — Global custom instructions*
93
+ _General Instructions — Global custom instructions_
94
94
  ![General Instructions](docs/screenshots/general-instructions.png)
95
95
 
96
- *Vision Fallback — Image processing configuration*
96
+ _Vision Fallback — Image processing configuration_
97
97
  ![Vision Fallback](docs/screenshots/vision-fallback.png)
98
98
 
99
99
  ## License
100
100
 
101
- MIT
101
+ MIT
@@ -11,6 +11,7 @@ allowedTools:
11
11
 
12
12
  You are a senior code reviewer.
13
13
  Review the provided code changes for:
14
+
14
15
  - Bugs and logic errors
15
16
  - Security vulnerabilities
16
17
  - Performance issues
@@ -15,8 +15,9 @@ You are a codebase exploration expert.
15
15
  Your role is to investigate and map out code structure, find relevant files, and explain how components work together.
16
16
 
17
17
  Guidelines:
18
+
18
19
  - Use run_command with grep/glob to discover code
19
20
  - Trace dependencies and imports to understand relationships
20
21
  - Identify patterns and conventions in the codebase
21
22
  - Report findings clearly with file paths and key observations
22
- - Look for tests, documentation, and configuration to supplement your understanding
23
+ - Look for tests, documentation, and configuration to supplement your understanding
@@ -14,6 +14,7 @@ allowedTools:
14
14
  You are a code reviewer performing independent verification.
15
15
 
16
16
  The user will provide:
17
+
17
18
  - Task summary
18
19
  - Criteria to verify (with status markers)
19
20
  - Modified files
@@ -21,16 +22,19 @@ The user will provide:
21
22
  ## YOUR TASK
22
23
 
23
24
  For each criterion marked [NEEDS VERIFICATION]:
25
+
24
26
  1. Consider the task summary and criterion description
25
27
  2. If the criterion requires code changes, read the modified files and verify the implementation
26
28
  3. If the criterion is conceptual or doesn't require code (e.g., test/placeholder criteria), verify based on the description alone
27
29
  4. Run tests or commands only if applicable to the criterion
28
30
 
29
31
  Then call:
32
+
30
33
  - `criterion` with action "pass" if the criterion is satisfied
31
34
  - `criterion` with action "fail" if it is NOT satisfied (explain why clearly)
32
35
 
33
36
  ## IMPORTANT
37
+
34
38
  - Start by analyzing what each criterion actually requires
35
39
  - For trivial or non-code criteria, pass them immediately without exploring the codebase
36
40
  - For code-related criteria, focus on the modified files provided
@@ -2,16 +2,16 @@ import {
2
2
  maybeAutoCompactContext,
3
3
  performManualContextCompaction,
4
4
  resolveCompactionStatsIdentity
5
- } from "./chunk-H5EICXF3.js";
5
+ } from "./chunk-GLVNO4DS.js";
6
6
  import "./chunk-OXI26S7U.js";
7
7
  import "./chunk-CMQCO27Y.js";
8
- import "./chunk-XKIEDGQF.js";
8
+ import "./chunk-DL6ZILAF.js";
9
9
  import "./chunk-PBGOZMVY.js";
10
10
  import "./chunk-VRGRAQDG.js";
11
11
  import "./chunk-CUDAT6SS.js";
12
- import "./chunk-5ZD3GZTK.js";
12
+ import "./chunk-RJRG2VER.js";
13
13
  import "./chunk-KIOUKC3Z.js";
14
- import "./chunk-VAMTEAYI.js";
14
+ import "./chunk-TS5XFQ2D.js";
15
15
  import "./chunk-STYHKCG7.js";
16
16
  import "./chunk-BJYPTN5S.js";
17
17
  import "./chunk-NDJ6FKSP.js";
@@ -24,4 +24,4 @@ export {
24
24
  performManualContextCompaction,
25
25
  resolveCompactionStatsIdentity
26
26
  };
27
- //# sourceMappingURL=auto-compaction-V3PA77WG.js.map
27
+ //# sourceMappingURL=auto-compaction-AN3U2AD5.js.map
@@ -5,22 +5,22 @@ import {
5
5
  generateSessionName,
6
6
  getSessionMessageCount,
7
7
  needsNameGenerationCheck
8
- } from "./chunk-LCQ3MPXD.js";
8
+ } from "./chunk-2IZMUXMP.js";
9
9
  import {
10
10
  runChatTurn
11
- } from "./chunk-NHJ2GVCF.js";
12
- import "./chunk-H5EICXF3.js";
11
+ } from "./chunk-NWXLRRDD.js";
12
+ import "./chunk-GLVNO4DS.js";
13
13
  import "./chunk-OXI26S7U.js";
14
14
  import "./chunk-CMQCO27Y.js";
15
- import "./chunk-XKIEDGQF.js";
15
+ import "./chunk-DL6ZILAF.js";
16
16
  import "./chunk-PBGOZMVY.js";
17
17
  import "./chunk-VRGRAQDG.js";
18
18
  import "./chunk-CUDAT6SS.js";
19
19
  import {
20
20
  getEventStore
21
- } from "./chunk-5ZD3GZTK.js";
21
+ } from "./chunk-RJRG2VER.js";
22
22
  import "./chunk-KIOUKC3Z.js";
23
- import "./chunk-VAMTEAYI.js";
23
+ import "./chunk-TS5XFQ2D.js";
24
24
  import {
25
25
  createChatMessageMessage,
26
26
  createPhaseChangedMessage,
@@ -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-V3PA77WG.js");
64
+ const { maybeAutoCompactContext } = await import("./auto-compaction-AN3U2AD5.js");
65
65
  await maybeAutoCompactContext({
66
66
  sessionManager,
67
67
  sessionId,
@@ -172,4 +172,4 @@ export {
172
172
  startChatSession,
173
173
  stopSessionExecution
174
174
  };
175
- //# sourceMappingURL=chat-handler-7DKHGTVO.js.map
175
+ //# sourceMappingURL=chat-handler-AIBOSHAQ.js.map
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  getEventStore,
3
3
  updateSessionMetadata
4
- } from "./chunk-5ZD3GZTK.js";
4
+ } from "./chunk-RJRG2VER.js";
5
5
  import {
6
6
  buildMessagesFromStoredEvents,
7
7
  foldPendingConfirmations
8
- } from "./chunk-VAMTEAYI.js";
8
+ } from "./chunk-TS5XFQ2D.js";
9
9
  import {
10
10
  createContextStateMessage,
11
11
  createSessionStateMessage
@@ -143,4 +143,4 @@ export {
143
143
  needsNameGenerationCheck,
144
144
  applyGeneratedSessionName
145
145
  };
146
- //# sourceMappingURL=chunk-LCQ3MPXD.js.map
146
+ //# sourceMappingURL=chunk-2IZMUXMP.js.map
@@ -2,7 +2,7 @@ import {
2
2
  createVerifierNudgeConfig,
3
3
  runBuilderTurn,
4
4
  runChatTurn
5
- } from "./chunk-NHJ2GVCF.js";
5
+ } from "./chunk-NWXLRRDD.js";
6
6
  import {
7
7
  TurnMetrics,
8
8
  agentExists,
@@ -37,7 +37,7 @@ import {
37
37
  setSkillEnabled,
38
38
  skillExists,
39
39
  spawnShellProcess
40
- } from "./chunk-H5EICXF3.js";
40
+ } from "./chunk-GLVNO4DS.js";
41
41
  import {
42
42
  getProject
43
43
  } from "./chunk-CMQCO27Y.js";
@@ -87,14 +87,14 @@ import {
87
87
  updateSessionProvider,
88
88
  updateSessionRunning,
89
89
  updateSessionSummary
90
- } from "./chunk-5ZD3GZTK.js";
90
+ } from "./chunk-RJRG2VER.js";
91
91
  import {
92
92
  initDatabase
93
93
  } from "./chunk-KIOUKC3Z.js";
94
94
  import {
95
95
  buildMessagesFromStoredEvents,
96
96
  foldPendingConfirmations
97
- } from "./chunk-VAMTEAYI.js";
97
+ } from "./chunk-TS5XFQ2D.js";
98
98
  import {
99
99
  createChatErrorMessage,
100
100
  createChatMessageMessage,
@@ -5242,7 +5242,7 @@ function createTerminalRoutes() {
5242
5242
  }
5243
5243
 
5244
5244
  // src/constants.ts
5245
- var VERSION = "1.6.76";
5245
+ var VERSION = "1.6.78";
5246
5246
 
5247
5247
  // src/server/index.ts
5248
5248
  var __dirname2 = dirname5(fileURLToPath4(import.meta.url));
@@ -5404,7 +5404,7 @@ async function createServerHandle(config) {
5404
5404
  res.json({ success: true });
5405
5405
  });
5406
5406
  app.get("/api/sessions", async (req, res) => {
5407
- const { getRecentUserPromptsForSession } = await import("./events-BDXQOC7F.js");
5407
+ const { getRecentUserPromptsForSession } = await import("./events-ND5GZBT2.js");
5408
5408
  const projectId = req.query["projectId"];
5409
5409
  const limit = Math.min(parseInt(req.query["limit"]) || 20, 100);
5410
5410
  const offset = parseInt(req.query["offset"]) || 0;
@@ -5437,8 +5437,8 @@ async function createServerHandle(config) {
5437
5437
  res.status(201).json({ session });
5438
5438
  });
5439
5439
  app.get("/api/sessions/:id", async (req, res) => {
5440
- const { getEventStore: getEventStore2 } = await import("./events-BDXQOC7F.js");
5441
- const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-2HW7FIKL.js");
5440
+ const { getEventStore: getEventStore2 } = await import("./events-ND5GZBT2.js");
5441
+ const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-XIKR6AFM.js");
5442
5442
  const session = sessionManager.getSession(req.params.id);
5443
5443
  if (!session) {
5444
5444
  return res.status(404).json({ error: "Session not found" });
@@ -5468,8 +5468,8 @@ async function createServerHandle(config) {
5468
5468
  res.json({ success: true });
5469
5469
  });
5470
5470
  app.post("/api/sessions/:id/provider", async (req, res) => {
5471
- const { getEventStore: getEventStore2 } = await import("./events-BDXQOC7F.js");
5472
- const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-2HW7FIKL.js");
5471
+ const { getEventStore: getEventStore2 } = await import("./events-ND5GZBT2.js");
5472
+ const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-XIKR6AFM.js");
5473
5473
  const sessionId = req.params.id;
5474
5474
  const session = sessionManager.getSession(sessionId);
5475
5475
  if (!session) {
@@ -5506,8 +5506,8 @@ async function createServerHandle(config) {
5506
5506
  res.json({ success: true });
5507
5507
  });
5508
5508
  app.put("/api/sessions/:id/mode", async (req, res) => {
5509
- const { getEventStore: getEventStore2 } = await import("./events-BDXQOC7F.js");
5510
- const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-2HW7FIKL.js");
5509
+ const { getEventStore: getEventStore2 } = await import("./events-ND5GZBT2.js");
5510
+ const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-XIKR6AFM.js");
5511
5511
  const sessionId = req.params.id;
5512
5512
  const session = sessionManager.getSession(sessionId);
5513
5513
  if (!session) {
@@ -5559,13 +5559,13 @@ async function createServerHandle(config) {
5559
5559
  if (!callId || approved === void 0) {
5560
5560
  return res.status(400).json({ error: "callId and approved are required" });
5561
5561
  }
5562
- const { providePathConfirmation } = await import("./tools-BHYHS3RY.js");
5562
+ const { providePathConfirmation } = await import("./tools-6DXPHBUV.js");
5563
5563
  const result = providePathConfirmation(callId, approved, alwaysAllow);
5564
5564
  if (!result.found) {
5565
5565
  return res.status(404).json({ error: "No pending path confirmation with that ID" });
5566
5566
  }
5567
- const { getEventStore: getEventStore2 } = await import("./events-BDXQOC7F.js");
5568
- const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2, foldPendingConfirmations: foldPendingConfirmations2 } = await import("./folding-2HW7FIKL.js");
5567
+ const { getEventStore: getEventStore2 } = await import("./events-ND5GZBT2.js");
5568
+ const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2, foldPendingConfirmations: foldPendingConfirmations2 } = await import("./folding-XIKR6AFM.js");
5569
5569
  const { createSessionStateMessage: createSessionStateMessage2 } = await import("./protocol-4CTV7OZC.js");
5570
5570
  const eventStore = getEventStore2();
5571
5571
  const events = eventStore.getEvents(sessionId);
@@ -5583,7 +5583,7 @@ async function createServerHandle(config) {
5583
5583
  if (!callId || !answer) {
5584
5584
  return res.status(400).json({ error: "callId and answer are required" });
5585
5585
  }
5586
- const { provideAnswer: provideAnswer2 } = await import("./tools-BHYHS3RY.js");
5586
+ const { provideAnswer: provideAnswer2 } = await import("./tools-6DXPHBUV.js");
5587
5587
  const found = provideAnswer2(callId, answer);
5588
5588
  if (!found) {
5589
5589
  return res.status(404).json({ error: "No pending question with that ID" });
@@ -5619,17 +5619,31 @@ async function createServerHandle(config) {
5619
5619
  if (!session) {
5620
5620
  return res.status(404).json({ error: "Session not found" });
5621
5621
  }
5622
- const { stopSessionExecution } = await import("./chat-handler-7DKHGTVO.js");
5623
- const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-BHYHS3RY.js");
5622
+ const { stopSessionExecution } = await import("./chat-handler-AIBOSHAQ.js");
5623
+ const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-6DXPHBUV.js");
5624
5624
  stopSessionExecution(sessionId, sessionManager);
5625
5625
  abortSession(sessionId);
5626
5626
  cancelQuestionsForSession(sessionId, "Session stopped by user");
5627
5627
  cancelPathConfirmationsForSession(sessionId, "Session stopped by user");
5628
5628
  sessionManager.clearMessageQueue(sessionId);
5629
- const eventStore = (await import("./events-BDXQOC7F.js")).getEventStore();
5629
+ const eventStore = (await import("./events-ND5GZBT2.js")).getEventStore();
5630
5630
  eventStore.append(sessionId, { type: "running.changed", data: { isRunning: false } });
5631
5631
  res.json({ success: true });
5632
5632
  });
5633
+ app.post("/api/sessions/:id/truncate", async (req, res) => {
5634
+ const sessionId = req.params.id;
5635
+ const session = sessionManager.getSession(sessionId);
5636
+ if (!session) {
5637
+ return res.status(404).json({ error: "Session not found" });
5638
+ }
5639
+ const { messageIndex } = req.body;
5640
+ if (typeof messageIndex !== "number" || messageIndex < 0) {
5641
+ return res.status(400).json({ error: "messageIndex must be a non-negative number" });
5642
+ }
5643
+ const { truncateSessionMessages } = await import("./events-ND5GZBT2.js");
5644
+ truncateSessionMessages(sessionId, messageIndex);
5645
+ res.json({ success: true });
5646
+ });
5633
5647
  app.post("/api/sessions/:id/chat", async (req, res) => {
5634
5648
  const sessionId = req.params.id;
5635
5649
  const session = sessionManager.getSession(sessionId);
@@ -6094,7 +6108,7 @@ async function createServerHandle(config) {
6094
6108
  providerManager
6095
6109
  );
6096
6110
  const wss = wssExports.wss;
6097
- const { QueueProcessor } = await import("./processor-6TS37IYH.js");
6111
+ const { QueueProcessor } = await import("./processor-PV446N55.js");
6098
6112
  const queueProcessor = new QueueProcessor({
6099
6113
  sessionManager,
6100
6114
  providerManager,
@@ -6132,7 +6146,7 @@ async function createServerHandle(config) {
6132
6146
  logger.info("Shutting down...");
6133
6147
  void (async () => {
6134
6148
  await devServerManager.stopAll();
6135
- const { stopAllInspectProxies } = await import("./inspect-proxy-Y75AXMRX.js");
6149
+ const { stopAllInspectProxies } = await import("./inspect-proxy-42ZXL2R5.js");
6136
6150
  stopAllInspectProxies();
6137
6151
  const { cleanupAllProcesses } = await import("./store-OQ45KONN.js");
6138
6152
  cleanupAllProcesses();
@@ -6169,4 +6183,4 @@ export {
6169
6183
  createServerHandle,
6170
6184
  createServer
6171
6185
  };
6172
- //# sourceMappingURL=chunk-K2V7EW5F.js.map
6186
+ //# sourceMappingURL=chunk-DKKDNJT7.js.map
@@ -155,7 +155,6 @@ ${annotation || "(none)"}`;
155
155
  client.on("error", () => targetSocket.destroy());
156
156
  targetSocket.write(clientHead);
157
157
  targetSocket.pipe(client);
158
- client.pipe(targetSocket);
159
158
  return;
160
159
  }
161
160
  targetSocket = net.connect(targetPort, targetHost);
@@ -294,4 +293,4 @@ export {
294
293
  startInspectProxy,
295
294
  stopAllInspectProxies
296
295
  };
297
- //# sourceMappingURL=chunk-XKIEDGQF.js.map
296
+ //# sourceMappingURL=chunk-DL6ZILAF.js.map