openfox 1.6.83 → 1.6.85

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 (31) hide show
  1. package/dist/{auto-compaction-YKNSXB3B.js → auto-compaction-LI6J3L5Y.js} +6 -6
  2. package/dist/{chat-handler-XORXAICJ.js → chat-handler-2J457X35.js} +9 -9
  3. package/dist/{chunk-3Y3HDOT3.js → chunk-2XCN5AUU.js} +28 -27
  4. package/dist/{chunk-6THJULLK.js → chunk-67LWZEDE.js} +15 -5
  5. package/dist/{chunk-6GH2PJJC.js → chunk-7FVEX6UG.js} +2 -2
  6. package/dist/{chunk-AET6LELP.js → chunk-EBPKXVOF.js} +2 -2
  7. package/dist/{chunk-NAONQLLT.js → chunk-FBQWGH6N.js} +49 -13
  8. package/dist/{chunk-KIOUKC3Z.js → chunk-HEQ3V5SW.js} +5 -1
  9. package/dist/{chunk-ZSTL3GO6.js → chunk-MNRVSEGN.js} +3 -3
  10. package/dist/{chunk-OXI26S7U.js → chunk-PI7L2SEU.js} +2 -2
  11. package/dist/{chunk-CMQCO27Y.js → chunk-X4VMSNLI.js} +7 -2
  12. package/dist/cli/dev.js +1 -1
  13. package/dist/cli/index.js +1 -1
  14. package/dist/{events-H563T5M5.js → events-BKR4RUU3.js} +3 -3
  15. package/dist/{orchestrator-4YKFENVV.js → orchestrator-Y2YGSF4I.js} +7 -7
  16. package/dist/package.json +1 -1
  17. package/dist/{processor-I2NXOFPC.js → processor-KULEUD7B.js} +5 -5
  18. package/dist/{project-creator-GPOIXKX4.js → project-creator-Q5P4XA6O.js} +3 -3
  19. package/dist/{projects-XLMSDFTQ.js → projects-3EZINCLA.js} +3 -3
  20. package/dist/{protocol-DEXfLRbe.d.ts → protocol-C9hfluLv.d.ts} +3 -0
  21. package/dist/{serve-IED7B4A5.js → serve-K5T5YSDU.js} +8 -8
  22. package/dist/server/index.d.ts +1 -1
  23. package/dist/server/index.js +7 -7
  24. package/dist/{settings-TQNQB56H.js → settings-E3KEHN2M.js} +3 -3
  25. package/dist/shared/index.d.ts +2 -2
  26. package/dist/{tools-RGERQUMC.js → tools-OPJZOAZX.js} +6 -6
  27. package/dist/web/assets/{index-DmpkTC-2.js → index-C0VIA4P8.js} +52 -52
  28. package/dist/web/assets/{index-CA0bz_5H.css → index-sEj9u40w.css} +1 -1
  29. package/dist/web/index.html +2 -2
  30. package/dist/web/sw.js +1 -1
  31. package/package.json +1 -1
@@ -2,15 +2,15 @@ import {
2
2
  maybeAutoCompactContext,
3
3
  performManualContextCompaction,
4
4
  resolveCompactionStatsIdentity
5
- } from "./chunk-NAONQLLT.js";
6
- import "./chunk-OXI26S7U.js";
7
- import "./chunk-CMQCO27Y.js";
5
+ } from "./chunk-FBQWGH6N.js";
6
+ import "./chunk-PI7L2SEU.js";
7
+ import "./chunk-X4VMSNLI.js";
8
8
  import "./chunk-DL6ZILAF.js";
9
9
  import "./chunk-PBGOZMVY.js";
10
10
  import "./chunk-VRGRAQDG.js";
11
11
  import "./chunk-YNIAFX24.js";
12
- import "./chunk-6THJULLK.js";
13
- import "./chunk-KIOUKC3Z.js";
12
+ import "./chunk-67LWZEDE.js";
13
+ import "./chunk-HEQ3V5SW.js";
14
14
  import "./chunk-XVWVAWSG.js";
15
15
  import "./chunk-GN7RB4Y4.js";
16
16
  import "./chunk-BJYPTN5S.js";
@@ -24,4 +24,4 @@ export {
24
24
  performManualContextCompaction,
25
25
  resolveCompactionStatsIdentity
26
26
  };
27
- //# sourceMappingURL=auto-compaction-YKNSXB3B.js.map
27
+ //# sourceMappingURL=auto-compaction-LI6J3L5Y.js.map
@@ -5,21 +5,21 @@ import {
5
5
  generateSessionName,
6
6
  getSessionMessageCount,
7
7
  needsNameGenerationCheck
8
- } from "./chunk-6GH2PJJC.js";
8
+ } from "./chunk-7FVEX6UG.js";
9
9
  import {
10
10
  runChatTurn
11
- } from "./chunk-ZSTL3GO6.js";
12
- import "./chunk-NAONQLLT.js";
13
- import "./chunk-OXI26S7U.js";
14
- import "./chunk-CMQCO27Y.js";
11
+ } from "./chunk-MNRVSEGN.js";
12
+ import "./chunk-FBQWGH6N.js";
13
+ import "./chunk-PI7L2SEU.js";
14
+ import "./chunk-X4VMSNLI.js";
15
15
  import "./chunk-DL6ZILAF.js";
16
16
  import "./chunk-PBGOZMVY.js";
17
17
  import "./chunk-VRGRAQDG.js";
18
18
  import "./chunk-YNIAFX24.js";
19
19
  import {
20
20
  getEventStore
21
- } from "./chunk-6THJULLK.js";
22
- import "./chunk-KIOUKC3Z.js";
21
+ } from "./chunk-67LWZEDE.js";
22
+ import "./chunk-HEQ3V5SW.js";
23
23
  import "./chunk-XVWVAWSG.js";
24
24
  import {
25
25
  createChatMessageMessage,
@@ -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-YKNSXB3B.js");
64
+ const { maybeAutoCompactContext } = await import("./auto-compaction-LI6J3L5Y.js");
65
65
  await maybeAutoCompactContext({
66
66
  sessionManager,
67
67
  sessionId,
@@ -175,4 +175,4 @@ export {
175
175
  startChatSession,
176
176
  stopSessionExecution
177
177
  };
178
- //# sourceMappingURL=chat-handler-XORXAICJ.js.map
178
+ //# sourceMappingURL=chat-handler-2J457X35.js.map
@@ -2,7 +2,7 @@ import {
2
2
  createVerifierNudgeConfig,
3
3
  runBuilderTurn,
4
4
  runChatTurn
5
- } from "./chunk-ZSTL3GO6.js";
5
+ } from "./chunk-MNRVSEGN.js";
6
6
  import {
7
7
  TurnMetrics,
8
8
  agentExists,
@@ -37,10 +37,10 @@ import {
37
37
  setSkillEnabled,
38
38
  skillExists,
39
39
  spawnShellProcess
40
- } from "./chunk-NAONQLLT.js";
40
+ } from "./chunk-FBQWGH6N.js";
41
41
  import {
42
42
  getProject
43
- } from "./chunk-CMQCO27Y.js";
43
+ } from "./chunk-X4VMSNLI.js";
44
44
  import {
45
45
  getPathSeparator,
46
46
  getPlatformShell,
@@ -87,10 +87,10 @@ import {
87
87
  updateSessionProvider,
88
88
  updateSessionRunning,
89
89
  updateSessionSummary
90
- } from "./chunk-6THJULLK.js";
90
+ } from "./chunk-67LWZEDE.js";
91
91
  import {
92
92
  initDatabase
93
- } from "./chunk-KIOUKC3Z.js";
93
+ } from "./chunk-HEQ3V5SW.js";
94
94
  import {
95
95
  buildMessagesFromStoredEvents,
96
96
  foldPendingConfirmations
@@ -5261,7 +5261,7 @@ function createTerminalRoutes() {
5261
5261
  }
5262
5262
 
5263
5263
  // src/constants.ts
5264
- var VERSION = "1.6.83";
5264
+ var VERSION = "1.6.85";
5265
5265
 
5266
5266
  // src/server/index.ts
5267
5267
  var __dirname2 = dirname5(fileURLToPath4(import.meta.url));
@@ -5380,7 +5380,7 @@ async function createServerHandle(config) {
5380
5380
  res.json({ tools });
5381
5381
  });
5382
5382
  app.get("/api/projects", async (_req, res) => {
5383
- const { listProjects } = await import("./projects-XLMSDFTQ.js");
5383
+ const { listProjects } = await import("./projects-3EZINCLA.js");
5384
5384
  const projects = listProjects();
5385
5385
  res.json({ projects });
5386
5386
  });
@@ -5389,7 +5389,7 @@ async function createServerHandle(config) {
5389
5389
  if (!name || !workdir) {
5390
5390
  return res.status(400).json({ error: "name and workdir are required" });
5391
5391
  }
5392
- const { createDirectoryWithGit } = await import("./project-creator-GPOIXKX4.js");
5392
+ const { createDirectoryWithGit } = await import("./project-creator-Q5P4XA6O.js");
5393
5393
  try {
5394
5394
  const project = await createDirectoryWithGit(name, workdir);
5395
5395
  res.status(201).json({ project });
@@ -5434,7 +5434,7 @@ async function createServerHandle(config) {
5434
5434
  }
5435
5435
  });
5436
5436
  app.get("/api/projects/:id", async (req, res) => {
5437
- const { getProject: getProject2 } = await import("./projects-XLMSDFTQ.js");
5437
+ const { getProject: getProject2 } = await import("./projects-3EZINCLA.js");
5438
5438
  const project = getProject2(req.params.id);
5439
5439
  if (!project) {
5440
5440
  return res.status(404).json({ error: "Project not found" });
@@ -5442,11 +5442,12 @@ async function createServerHandle(config) {
5442
5442
  res.json({ project });
5443
5443
  });
5444
5444
  app.put("/api/projects/:id", async (req, res) => {
5445
- const { updateProject } = await import("./projects-XLMSDFTQ.js");
5446
- const { name, customInstructions } = req.body;
5445
+ const { updateProject } = await import("./projects-3EZINCLA.js");
5446
+ const { name, customInstructions, dangerLevel } = req.body;
5447
5447
  const updates = {};
5448
5448
  if (name !== void 0) updates.name = name;
5449
5449
  if (customInstructions !== void 0) updates.customInstructions = customInstructions;
5450
+ if (dangerLevel !== void 0) updates.dangerLevel = dangerLevel;
5450
5451
  const updated = updateProject(req.params.id, updates);
5451
5452
  if (!updated) {
5452
5453
  return res.status(404).json({ error: "Project not found" });
@@ -5454,7 +5455,7 @@ async function createServerHandle(config) {
5454
5455
  res.json({ project: updated });
5455
5456
  });
5456
5457
  app.delete("/api/projects/:id", async (req, res) => {
5457
- const { getProject: getProject2, deleteProject } = await import("./projects-XLMSDFTQ.js");
5458
+ const { getProject: getProject2, deleteProject } = await import("./projects-3EZINCLA.js");
5458
5459
  const project = getProject2(req.params.id);
5459
5460
  if (!project) {
5460
5461
  return res.status(404).json({ error: "Project not found" });
@@ -5463,7 +5464,7 @@ async function createServerHandle(config) {
5463
5464
  res.json({ success: true });
5464
5465
  });
5465
5466
  app.get("/api/sessions", async (req, res) => {
5466
- const { getRecentUserPromptsForSession } = await import("./events-H563T5M5.js");
5467
+ const { getRecentUserPromptsForSession } = await import("./events-BKR4RUU3.js");
5467
5468
  const projectId = req.query["projectId"];
5468
5469
  const limit = Math.min(parseInt(req.query["limit"]) || 20, 100);
5469
5470
  const offset = parseInt(req.query["offset"]) || 0;
@@ -5496,7 +5497,7 @@ async function createServerHandle(config) {
5496
5497
  res.status(201).json({ session });
5497
5498
  });
5498
5499
  app.get("/api/sessions/:id", async (req, res) => {
5499
- const { getEventStore: getEventStore2 } = await import("./events-H563T5M5.js");
5500
+ const { getEventStore: getEventStore2 } = await import("./events-BKR4RUU3.js");
5500
5501
  const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-4VHGQE6Y.js");
5501
5502
  const session = sessionManager.getSession(req.params.id);
5502
5503
  if (!session) {
@@ -5527,7 +5528,7 @@ async function createServerHandle(config) {
5527
5528
  res.json({ success: true });
5528
5529
  });
5529
5530
  app.post("/api/sessions/:id/provider", async (req, res) => {
5530
- const { getEventStore: getEventStore2 } = await import("./events-H563T5M5.js");
5531
+ const { getEventStore: getEventStore2 } = await import("./events-BKR4RUU3.js");
5531
5532
  const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-4VHGQE6Y.js");
5532
5533
  const sessionId = req.params.id;
5533
5534
  const session = sessionManager.getSession(sessionId);
@@ -5565,7 +5566,7 @@ async function createServerHandle(config) {
5565
5566
  res.json({ success: true });
5566
5567
  });
5567
5568
  app.put("/api/sessions/:id/mode", async (req, res) => {
5568
- const { getEventStore: getEventStore2 } = await import("./events-H563T5M5.js");
5569
+ const { getEventStore: getEventStore2 } = await import("./events-BKR4RUU3.js");
5569
5570
  const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-4VHGQE6Y.js");
5570
5571
  const sessionId = req.params.id;
5571
5572
  const session = sessionManager.getSession(sessionId);
@@ -5618,12 +5619,12 @@ async function createServerHandle(config) {
5618
5619
  if (!callId || approved === void 0) {
5619
5620
  return res.status(400).json({ error: "callId and approved are required" });
5620
5621
  }
5621
- const { providePathConfirmation } = await import("./tools-RGERQUMC.js");
5622
+ const { providePathConfirmation } = await import("./tools-OPJZOAZX.js");
5622
5623
  const result = providePathConfirmation(callId, approved, alwaysAllow);
5623
5624
  if (!result.found) {
5624
5625
  return res.status(404).json({ error: "No pending path confirmation with that ID" });
5625
5626
  }
5626
- const { getEventStore: getEventStore2 } = await import("./events-H563T5M5.js");
5627
+ const { getEventStore: getEventStore2 } = await import("./events-BKR4RUU3.js");
5627
5628
  const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2, foldPendingConfirmations: foldPendingConfirmations2 } = await import("./folding-4VHGQE6Y.js");
5628
5629
  const { createSessionStateMessage: createSessionStateMessage2 } = await import("./protocol-NEBXAMJ3.js");
5629
5630
  const eventStore = getEventStore2();
@@ -5642,7 +5643,7 @@ async function createServerHandle(config) {
5642
5643
  if (!callId || !answer) {
5643
5644
  return res.status(400).json({ error: "callId and answer are required" });
5644
5645
  }
5645
- const { provideAnswer: provideAnswer2 } = await import("./tools-RGERQUMC.js");
5646
+ const { provideAnswer: provideAnswer2 } = await import("./tools-OPJZOAZX.js");
5646
5647
  const found = provideAnswer2(callId, answer);
5647
5648
  if (!found) {
5648
5649
  return res.status(404).json({ error: "No pending question with that ID" });
@@ -5678,14 +5679,14 @@ async function createServerHandle(config) {
5678
5679
  if (!session) {
5679
5680
  return res.status(404).json({ error: "Session not found" });
5680
5681
  }
5681
- const { stopSessionExecution } = await import("./chat-handler-XORXAICJ.js");
5682
- const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-RGERQUMC.js");
5682
+ const { stopSessionExecution } = await import("./chat-handler-2J457X35.js");
5683
+ const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-OPJZOAZX.js");
5683
5684
  stopSessionExecution(sessionId, sessionManager);
5684
5685
  abortSession(sessionId);
5685
5686
  cancelQuestionsForSession(sessionId, "Session stopped by user");
5686
5687
  cancelPathConfirmationsForSession(sessionId, "Session stopped by user");
5687
5688
  sessionManager.clearMessageQueue(sessionId);
5688
- const eventStore = (await import("./events-H563T5M5.js")).getEventStore();
5689
+ const eventStore = (await import("./events-BKR4RUU3.js")).getEventStore();
5689
5690
  eventStore.append(sessionId, { type: "running.changed", data: { isRunning: false } });
5690
5691
  res.json({ success: true });
5691
5692
  });
@@ -5699,7 +5700,7 @@ async function createServerHandle(config) {
5699
5700
  if (typeof messageIndex !== "number" || messageIndex < 0) {
5700
5701
  return res.status(400).json({ error: "messageIndex must be a non-negative number" });
5701
5702
  }
5702
- const { truncateSessionMessages } = await import("./events-H563T5M5.js");
5703
+ const { truncateSessionMessages } = await import("./events-BKR4RUU3.js");
5703
5704
  truncateSessionMessages(sessionId, messageIndex);
5704
5705
  res.json({ success: true });
5705
5706
  });
@@ -5730,13 +5731,13 @@ async function createServerHandle(config) {
5730
5731
  res.json({ accepted: true });
5731
5732
  });
5732
5733
  app.get("/api/settings/:key", async (req, res) => {
5733
- const { getSetting, SETTINGS_DEFAULTS } = await import("./settings-TQNQB56H.js");
5734
+ const { getSetting, SETTINGS_DEFAULTS } = await import("./settings-E3KEHN2M.js");
5734
5735
  const key = req.params.key;
5735
5736
  const value = getSetting(key) ?? SETTINGS_DEFAULTS[key] ?? null;
5736
5737
  res.json({ key, value });
5737
5738
  });
5738
5739
  app.put("/api/settings/:key", async (req, res) => {
5739
- const { setSetting } = await import("./settings-TQNQB56H.js");
5740
+ const { setSetting } = await import("./settings-E3KEHN2M.js");
5740
5741
  const key = req.params.key;
5741
5742
  const { value } = req.body;
5742
5743
  if (value === void 0) {
@@ -6168,7 +6169,7 @@ async function createServerHandle(config) {
6168
6169
  providerManager
6169
6170
  );
6170
6171
  const wss = wssExports.wss;
6171
- const { QueueProcessor } = await import("./processor-I2NXOFPC.js");
6172
+ const { QueueProcessor } = await import("./processor-KULEUD7B.js");
6172
6173
  const queueProcessor = new QueueProcessor({
6173
6174
  sessionManager,
6174
6175
  providerManager,
@@ -6243,4 +6244,4 @@ export {
6243
6244
  createServerHandle,
6244
6245
  createServer
6245
6246
  };
6246
- //# sourceMappingURL=chunk-3Y3HDOT3.js.map
6247
+ //# sourceMappingURL=chunk-2XCN5AUU.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getDatabase
3
- } from "./chunk-KIOUKC3Z.js";
3
+ } from "./chunk-HEQ3V5SW.js";
4
4
  import {
5
5
  buildContextMessagesFromEventHistory,
6
6
  buildMessagesFromStoredEvents,
@@ -587,16 +587,26 @@ function createEvent(type, data) {
587
587
  }
588
588
 
589
589
  // src/server/db/sessions.ts
590
+ function getProjectDangerLevel(projectId) {
591
+ try {
592
+ const db = getDatabase();
593
+ const row = db.prepare("SELECT danger_level FROM projects WHERE id = ?").get(projectId);
594
+ return row?.danger_level ?? "normal";
595
+ } catch {
596
+ return "normal";
597
+ }
598
+ }
590
599
  function createSession(projectId, workdir, title, providerId, providerModel) {
591
600
  const db = getDatabase();
592
601
  const now = (/* @__PURE__ */ new Date()).toISOString();
593
602
  const id = crypto.randomUUID();
603
+ const dangerLevel = getProjectDangerLevel(projectId);
594
604
  db.prepare(
595
605
  `
596
606
  INSERT INTO sessions (id, project_id, workdir, phase, mode, workflow_phase, is_running, created_at, updated_at, title, provider_id, provider_model, danger_level)
597
- VALUES (?, ?, ?, 'idle', 'planner', 'plan', 0, ?, ?, ?, ?, ?, 'normal')
607
+ VALUES (?, ?, ?, 'idle', 'planner', 'plan', 0, ?, ?, ?, ?, ?, ?)
598
608
  `
599
- ).run(id, projectId, workdir, now, now, title ?? null, providerId ?? null, providerModel ?? null);
609
+ ).run(id, projectId, workdir, now, now, title ?? null, providerId ?? null, providerModel ?? null, dangerLevel);
600
610
  return {
601
611
  id,
602
612
  projectId,
@@ -619,7 +629,7 @@ function createSession(projectId, workdir, title, providerId, providerModel) {
619
629
  totalToolCalls: 0,
620
630
  iterationCount: 0
621
631
  },
622
- dangerLevel: "normal"
632
+ dangerLevel
623
633
  };
624
634
  }
625
635
  function getSession(id) {
@@ -1269,4 +1279,4 @@ export {
1269
1279
  compactContext,
1270
1280
  getRecentUserPromptsForSession
1271
1281
  };
1272
- //# sourceMappingURL=chunk-6THJULLK.js.map
1282
+ //# sourceMappingURL=chunk-67LWZEDE.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  getEventStore,
3
3
  updateSessionMetadata
4
- } from "./chunk-6THJULLK.js";
4
+ } from "./chunk-67LWZEDE.js";
5
5
  import {
6
6
  buildMessagesFromStoredEvents,
7
7
  foldPendingConfirmations
@@ -143,4 +143,4 @@ export {
143
143
  needsNameGenerationCheck,
144
144
  applyGeneratedSessionName
145
145
  };
146
- //# sourceMappingURL=chunk-6GH2PJJC.js.map
146
+ //# sourceMappingURL=chunk-7FVEX6UG.js.map
@@ -190,7 +190,7 @@ async function runCli(options) {
190
190
  if (!configExists) {
191
191
  await runNetworkSetup(mode);
192
192
  }
193
- const { runServe } = await import("./serve-IED7B4A5.js");
193
+ const { runServe } = await import("./serve-K5T5YSDU.js");
194
194
  const serveOptions = { mode };
195
195
  if (values.port) serveOptions.port = parseInt(values.port);
196
196
  if (values["no-browser"] === true) serveOptions.openBrowser = false;
@@ -202,4 +202,4 @@ async function runCli(options) {
202
202
  export {
203
203
  runCli
204
204
  };
205
- //# sourceMappingURL=chunk-AET6LELP.js.map
205
+ //# sourceMappingURL=chunk-EBPKXVOF.js.map
@@ -3,10 +3,10 @@ import {
3
3
  deleteSetting,
4
4
  getSetting,
5
5
  setSetting
6
- } from "./chunk-OXI26S7U.js";
6
+ } from "./chunk-PI7L2SEU.js";
7
7
  import {
8
8
  getProject
9
- } from "./chunk-CMQCO27Y.js";
9
+ } from "./chunk-X4VMSNLI.js";
10
10
  import {
11
11
  startInspectProxy
12
12
  } from "./chunk-DL6ZILAF.js";
@@ -32,7 +32,7 @@ import {
32
32
  import {
33
33
  getCurrentContextWindowId,
34
34
  getEventStore
35
- } from "./chunk-6THJULLK.js";
35
+ } from "./chunk-67LWZEDE.js";
36
36
  import {
37
37
  buildContextMessagesFromEventHistory,
38
38
  foldContextState,
@@ -539,6 +539,7 @@ function computeAggregatedStats(input) {
539
539
  identity,
540
540
  mode,
541
541
  totalPrefillTokens,
542
+ totalPrefillIncrement,
542
543
  totalGenTokens,
543
544
  totalPrefillTime,
544
545
  totalGenTime,
@@ -546,13 +547,15 @@ function computeAggregatedStats(input) {
546
547
  totalTime,
547
548
  llmCalls
548
549
  } = input;
550
+ const prefillSource = totalPrefillIncrement ?? totalPrefillTokens;
549
551
  return {
550
552
  ...identity,
551
553
  mode,
552
554
  totalTime,
553
555
  toolTime: totalToolTime,
554
556
  prefillTokens: totalPrefillTokens,
555
- prefillSpeed: totalPrefillTime > 0 ? roundTo1(totalPrefillTokens / totalPrefillTime) : 0,
557
+ ...totalPrefillIncrement !== void 0 && { prefTokenIncrement: totalPrefillIncrement },
558
+ prefillSpeed: totalPrefillTime > 0 ? roundTo1(prefillSource / totalPrefillTime) : 0,
556
559
  generationTokens: totalGenTokens,
557
560
  generationSpeed: totalGenTime > 0 ? roundTo1(totalGenTokens / totalGenTime) : 0,
558
561
  ...llmCalls ? { llmCalls } : {}
@@ -766,6 +769,7 @@ async function* streamLLMPure(options) {
766
769
  var TurnMetrics = class {
767
770
  startTime;
768
771
  totalPrefillTokens = 0;
772
+ totalPrefillIncrement = 0;
769
773
  totalPrefillTime = 0;
770
774
  // seconds
771
775
  totalGenTokens = 0;
@@ -778,8 +782,10 @@ var TurnMetrics = class {
778
782
  constructor() {
779
783
  this.startTime = performance.now();
780
784
  }
781
- /** Add metrics from an LLM call */
782
- addLLMCall(timing, promptTokens, completionTokens, modelParams) {
785
+ /** Add metrics from an LLM call.
786
+ * @param previousContextTokens - context size BEFORE this LLM call (for computing the non-cached increment)
787
+ */
788
+ addLLMCall(timing, promptTokens, completionTokens, previousContextTokens, modelParams) {
783
789
  const callIndex = this.llmCalls.length + 1;
784
790
  this.totalPrefillTokens += promptTokens;
785
791
  this.totalPrefillTime += timing.ttft;
@@ -788,15 +794,21 @@ var TurnMetrics = class {
788
794
  if (modelParams) {
789
795
  this.modelParams = modelParams;
790
796
  }
797
+ const prefTokenIncrement = previousContextTokens !== void 0 ? Math.max(0, promptTokens - previousContextTokens) : void 0;
798
+ if (prefTokenIncrement !== void 0) {
799
+ this.totalPrefillIncrement += prefTokenIncrement;
800
+ }
801
+ const prefillSource = prefTokenIncrement ?? promptTokens;
791
802
  this.llmCalls = [
792
803
  ...this.llmCalls,
793
804
  {
794
805
  callIndex,
795
806
  promptTokens,
796
807
  completionTokens,
808
+ ...prefTokenIncrement !== void 0 && { prefTokenIncrement },
797
809
  ttft: timing.ttft,
798
810
  completionTime: timing.completionTime,
799
- prefillSpeed: timing.ttft > 0 ? Math.round(promptTokens / timing.ttft * 10) / 10 : 0,
811
+ prefillSpeed: timing.ttft > 0 ? Math.round(prefillSource / timing.ttft * 10) / 10 : 0,
800
812
  generationSpeed: timing.completionTime > 0 ? Math.round(completionTokens / timing.completionTime * 10) / 10 : 0,
801
813
  totalTime: Math.round((timing.ttft + timing.completionTime) * 10) / 10,
802
814
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
@@ -821,6 +833,7 @@ var TurnMetrics = class {
821
833
  identity,
822
834
  mode,
823
835
  totalPrefillTokens: this.totalPrefillTokens,
836
+ ...this.totalPrefillIncrement > 0 && { totalPrefillIncrement: this.totalPrefillIncrement },
824
837
  totalGenTokens: this.totalGenTokens,
825
838
  totalPrefillTime: this.totalPrefillTime,
826
839
  totalGenTime: this.totalGenTime,
@@ -916,7 +929,8 @@ async function consumeStreamWithToolLoop(options) {
916
929
  workdir,
917
930
  onEvent,
918
931
  statsIdentity,
919
- dangerLevel
932
+ dangerLevel,
933
+ sessionManager
920
934
  } = options;
921
935
  let currentMessages = [...messages];
922
936
  let iterations = 0;
@@ -927,6 +941,7 @@ async function consumeStreamWithToolLoop(options) {
927
941
  if (++iterations > MAX_TOOL_LOOP_ITERATIONS) {
928
942
  throw new Error("Max tool loop iterations exceeded during compaction");
929
943
  }
944
+ const previousContextTokens = sessionManager?.getContextState(sessionId).currentTokens;
930
945
  const streamGen = streamLLMPure({
931
946
  messageId,
932
947
  systemPrompt,
@@ -946,7 +961,13 @@ async function consumeStreamWithToolLoop(options) {
946
961
  currentMessages = [...currentMessages, correctionMsg];
947
962
  continue;
948
963
  }
949
- turnMetrics.addLLMCall(result.timing, result.usage.promptTokens, result.usage.completionTokens, result.modelParams);
964
+ turnMetrics.addLLMCall(
965
+ result.timing,
966
+ result.usage.promptTokens,
967
+ result.usage.completionTokens,
968
+ previousContextTokens,
969
+ result.modelParams
970
+ );
950
971
  if (result.toolCalls.length > 0) {
951
972
  const stats = turnMetrics.buildStats(statsIdentity, "compaction");
952
973
  onEvent(
@@ -3164,6 +3185,7 @@ async function runTopLevelAgentLoop(config, turnMetrics) {
3164
3185
  createChatVisionFallbackMessage({ type: "done", messageId: assistantMsgId, attachmentId, description })
3165
3186
  );
3166
3187
  };
3188
+ const previousContextTokens = sessionManager.getContextState(sessionId).currentTokens;
3167
3189
  const modelSettings = currentMaxTokensOverride !== void 0 ? { ...sessionManager.getCurrentModelSettings(), maxTokens: currentMaxTokensOverride } : sessionManager.getCurrentModelSettings();
3168
3190
  const streamGen = streamLLMPure({
3169
3191
  messageId: assistantMsgId,
@@ -3205,7 +3227,13 @@ async function runTopLevelAgentLoop(config, turnMetrics) {
3205
3227
  );
3206
3228
  throw new Error("Aborted");
3207
3229
  }
3208
- turnMetrics.addLLMCall(result.timing, result.usage.promptTokens, result.usage.completionTokens, result.modelParams);
3230
+ turnMetrics.addLLMCall(
3231
+ result.timing,
3232
+ result.usage.promptTokens,
3233
+ result.usage.completionTokens,
3234
+ previousContextTokens,
3235
+ result.modelParams
3236
+ );
3209
3237
  sessionManager.setCurrentContextSize(sessionId, result.usage.promptTokens);
3210
3238
  if (result.finishReason === "length" && result.toolCalls.length === 0) {
3211
3239
  if (truncationRetryCount < MAX_TRUNCATION_RETRIES) {
@@ -3545,6 +3573,7 @@ async function executeSubAgent(options) {
3545
3573
  modelName: llmClient.getModel()
3546
3574
  });
3547
3575
  const effectiveSystemPrompt = assembledRequest.systemPrompt + RETURN_VALUE_INSTRUCTION;
3576
+ const previousContextTokens = sessionManager.getContextState(sessionId).currentTokens;
3548
3577
  const streamGen = streamLLMPure({
3549
3578
  messageId: assistantMsgId,
3550
3579
  systemPrompt: effectiveSystemPrompt,
@@ -3571,7 +3600,13 @@ async function executeSubAgent(options) {
3571
3600
  eventStore.append(sessionId, createChatDoneEvent(assistantMsgId, "stopped", stats));
3572
3601
  throw new Error("Aborted");
3573
3602
  }
3574
- turnMetrics.addLLMCall(result.timing, result.usage.promptTokens, result.usage.completionTokens, result.modelParams);
3603
+ turnMetrics.addLLMCall(
3604
+ result.timing,
3605
+ result.usage.promptTokens,
3606
+ result.usage.completionTokens,
3607
+ previousContextTokens,
3608
+ result.modelParams
3609
+ );
3575
3610
  finalContent = result.content;
3576
3611
  session = sessionManager.requireSession(sessionId);
3577
3612
  if (result.toolCalls.length === 0) {
@@ -3758,7 +3793,7 @@ var callSubAgentTool = {
3758
3793
  };
3759
3794
  }
3760
3795
  try {
3761
- const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-RGERQUMC.js");
3796
+ const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-OPJZOAZX.js");
3762
3797
  const toolRegistry = getToolRegistryForAgent2(agentDef);
3763
3798
  const turnMetrics = new TurnMetrics();
3764
3799
  const result = await executeSubAgent({
@@ -4853,6 +4888,7 @@ ${COMPACTION_PROMPT}
4853
4888
  workdir: session.workdir,
4854
4889
  onEvent: (event) => eventStore.append(sessionId, event),
4855
4890
  statsIdentity,
4891
+ sessionManager,
4856
4892
  ...session.dangerLevel ? { dangerLevel: session.dangerLevel } : {},
4857
4893
  ...signal ? { signal } : {}
4858
4894
  });
@@ -4947,4 +4983,4 @@ export {
4947
4983
  getToolRegistryForAgent,
4948
4984
  createToolRegistry
4949
4985
  };
4950
- //# sourceMappingURL=chunk-NAONQLLT.js.map
4986
+ //# sourceMappingURL=chunk-FBQWGH6N.js.map
@@ -106,6 +106,10 @@ function runMigrations(db2) {
106
106
  logger.info("Migrating projects table: adding custom_instructions column");
107
107
  db2.exec(`ALTER TABLE projects ADD COLUMN custom_instructions TEXT`);
108
108
  }
109
+ if (!projectColumnNames.includes("danger_level")) {
110
+ logger.info("Migrating projects table: adding danger_level column");
111
+ db2.exec(`ALTER TABLE projects ADD COLUMN danger_level TEXT`);
112
+ }
109
113
  db2.exec(`
110
114
  CREATE TABLE IF NOT EXISTS events (
111
115
  id INTEGER PRIMARY KEY AUTOINCREMENT,
@@ -164,4 +168,4 @@ export {
164
168
  initDatabase,
165
169
  getDatabase
166
170
  };
167
- //# sourceMappingURL=chunk-KIOUKC3Z.js.map
171
+ //# sourceMappingURL=chunk-HEQ3V5SW.js.map
@@ -13,11 +13,11 @@ import {
13
13
  getToolRegistryForAgent,
14
14
  loadAllAgentsDefault,
15
15
  runTopLevelAgentLoop
16
- } from "./chunk-NAONQLLT.js";
16
+ } from "./chunk-FBQWGH6N.js";
17
17
  import {
18
18
  getCurrentContextWindowId,
19
19
  getEventStore
20
- } from "./chunk-6THJULLK.js";
20
+ } from "./chunk-67LWZEDE.js";
21
21
  import {
22
22
  buildSnapshotFromSessionState
23
23
  } from "./chunk-XVWVAWSG.js";
@@ -327,4 +327,4 @@ export {
327
327
  runBuilderTurn,
328
328
  runVerifierTurn
329
329
  };
330
- //# sourceMappingURL=chunk-ZSTL3GO6.js.map
330
+ //# sourceMappingURL=chunk-MNRVSEGN.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getDatabase
3
- } from "./chunk-KIOUKC3Z.js";
3
+ } from "./chunk-HEQ3V5SW.js";
4
4
 
5
5
  // src/server/db/settings.ts
6
6
  var SETTINGS_KEYS = {
@@ -63,4 +63,4 @@ export {
63
63
  deleteSetting,
64
64
  getAllSettings
65
65
  };
66
- //# sourceMappingURL=chunk-OXI26S7U.js.map
66
+ //# sourceMappingURL=chunk-PI7L2SEU.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getDatabase
3
- } from "./chunk-KIOUKC3Z.js";
3
+ } from "./chunk-HEQ3V5SW.js";
4
4
 
5
5
  // src/server/db/projects.ts
6
6
  function createProject(name, workdir) {
@@ -67,6 +67,10 @@ function updateProject(id, updates) {
67
67
  sets.push("custom_instructions = ?");
68
68
  values.push(updates.customInstructions);
69
69
  }
70
+ if (updates.dangerLevel !== void 0) {
71
+ sets.push("danger_level = ?");
72
+ values.push(updates.dangerLevel);
73
+ }
70
74
  values.push(id);
71
75
  const result = db.prepare(
72
76
  `
@@ -88,6 +92,7 @@ function rowToProject(row) {
88
92
  name: row.name,
89
93
  workdir: row.workdir,
90
94
  ...row.custom_instructions ? { customInstructions: row.custom_instructions } : {},
95
+ ...row.danger_level ? { dangerLevel: row.danger_level } : {},
91
96
  createdAt: row.created_at,
92
97
  updatedAt: row.updated_at
93
98
  };
@@ -101,4 +106,4 @@ export {
101
106
  updateProject,
102
107
  deleteProject
103
108
  };
104
- //# sourceMappingURL=chunk-CMQCO27Y.js.map
109
+ //# sourceMappingURL=chunk-X4VMSNLI.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-AET6LELP.js";
4
+ } from "../chunk-EBPKXVOF.js";
5
5
  import {
6
6
  logger
7
7
  } from "../chunk-K44MW7JJ.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-AET6LELP.js";
4
+ } from "../chunk-EBPKXVOF.js";
5
5
  import {
6
6
  logger
7
7
  } from "../chunk-K44MW7JJ.js";