openfox 2.0.42 → 2.0.44

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.
package/README.md CHANGED
@@ -107,6 +107,28 @@ _General Instructions — Global custom instructions_
107
107
  _Vision Fallback — Image processing configuration_
108
108
  ![Vision Fallback](docs/screenshots/vision-fallback.png)
109
109
 
110
+ ## Environment Variables
111
+
112
+ | Variable | Default | Description |
113
+ | --------------------------- | -------------------------- | --------------------------------------------------------------- |
114
+ | `OPENFOX_LLM_URL` | `http://localhost:8000/v1` | LLM API base URL |
115
+ | `OPENFOX_VLLM_URL` | — | Deprecated alias for `OPENFOX_LLM_URL` |
116
+ | `OPENFOX_BACKEND` | `unknown` | Backend type: `vllm`, `sglang`, `ollama`, `llamacpp`, `unknown` |
117
+ | `OPENFOX_MODEL_NAME` | `''` | Override default model name |
118
+ | `OPENFOX_MAX_CONTEXT` | `200000` | Max context window in tokens |
119
+ | `OPENFOX_LLM_TIMEOUT` | `300000` | LLM request timeout in ms |
120
+ | `OPENFOX_LLM_IDLE_TIMEOUT` | `300000` | LLM stream idle timeout in ms |
121
+ | `OPENFOX_PORT` | `10369` | Server listen port |
122
+ | `OPENFOX_HOST` | `127.0.0.1` | Server bind host |
123
+ | `OPENFOX_WORKDIR` | `cwd` | Working directory |
124
+ | `OPENFOX_DB_PATH` | `./openfox.db` | SQLite database path |
125
+ | `OPENFOX_LOG_LEVEL` | `info` | Log level: `debug`, `info`, `warn`, `error` |
126
+ | `OPENFOX_REASONING_EFFORT` | — | Reasoning effort (e.g. `none`, `low`, `medium`, `high`) |
127
+ | `OPENFOX_DEV` | `false` | Enable dev mode |
128
+ | `OPENFOX_MODE` | `production` | Force mode: `production`, `development`, `test` |
129
+ | `OPENFOX_SERVICE` | `false` | Run as systemd service (suppresses browser open) |
130
+ | `OPENFOX_GIT_POLL_INTERVAL` | `10000` | Git status poll interval in ms |
131
+
110
132
  ## License
111
133
 
112
134
  MIT
@@ -2,11 +2,11 @@ import {
2
2
  buildRunChatTurnParams,
3
3
  finalizeTurnCompletion,
4
4
  generateSessionNameForSession
5
- } from "./chunk-NVQFIZJI.js";
5
+ } from "./chunk-QOZ2DIWF.js";
6
6
  import {
7
7
  runChatTurn
8
- } from "./chunk-ULZORR3T.js";
9
- import "./chunk-TT6LDJU5.js";
8
+ } from "./chunk-A45RDSCQ.js";
9
+ import "./chunk-H72PI4S5.js";
10
10
  import "./chunk-LBGHZLLH.js";
11
11
  import "./chunk-PBGOZMVY.js";
12
12
  import "./chunk-VRGRAQDG.js";
@@ -22,7 +22,7 @@ import "./chunk-YQ3SOPBI.js";
22
22
  import "./chunk-55RWNJBT.js";
23
23
  import {
24
24
  getEventStore
25
- } from "./chunk-NF6WHQAT.js";
25
+ } from "./chunk-BSDMJT53.js";
26
26
  import "./chunk-EHYFYQXY.js";
27
27
  import "./chunk-ZPIZLTWU.js";
28
28
  import "./chunk-J2GP3J3X.js";
@@ -37,6 +37,7 @@ import "./chunk-5WRI5ZAA.js";
37
37
 
38
38
  // src/server/session/chat-handler.ts
39
39
  var activeAgents = /* @__PURE__ */ new Map();
40
+ var abortedSessions = /* @__PURE__ */ new Set();
40
41
  async function startChatSession(sessionId, content, deps, options) {
41
42
  const { sessionManager, broadcastForSession } = deps;
42
43
  const session = sessionManager.getSession(sessionId);
@@ -113,6 +114,12 @@ function startTurnWithCompletionChain(sessionId, controller, deps) {
113
114
  return;
114
115
  }
115
116
  activeAgents.delete(sessionId);
117
+ if (abortedSessions.has(sessionId)) {
118
+ abortedSessions.delete(sessionId);
119
+ sessionManager.clearMessageQueue(sessionId);
120
+ finalizeTurnCompletion(sessionId, sessionManager, broadcastForSession);
121
+ return;
122
+ }
116
123
  const completionMsgs = sessionManager.drainCompletionMessages(sessionId);
117
124
  const next = completionMsgs[0];
118
125
  if (next) {
@@ -135,6 +142,7 @@ function startTurnWithCompletionChain(sessionId, controller, deps) {
135
142
  });
136
143
  }
137
144
  function stopSessionExecution(sessionId, sessionManager) {
145
+ abortedSessions.add(sessionId);
138
146
  const controller = activeAgents.get(sessionId);
139
147
  if (controller) {
140
148
  activeAgents.delete(sessionId);
@@ -146,4 +154,4 @@ export {
146
154
  startChatSession,
147
155
  stopSessionExecution
148
156
  };
149
- //# sourceMappingURL=chat-handler-KW4CAXTH.js.map
157
+ //# sourceMappingURL=chat-handler-XAJ2MZRG.js.map
@@ -21,7 +21,7 @@ import {
21
21
  tokenFromPassword,
22
22
  verifyPassword,
23
23
  workflowExists
24
- } from "./chunk-XIBT7GFC.js";
24
+ } from "./chunk-AJDU5GID.js";
25
25
  import {
26
26
  agentExists,
27
27
  createToolRegistry,
@@ -61,7 +61,7 @@ import {
61
61
  setMcpTools,
62
62
  setNotifyMcpServersChanged,
63
63
  skillExists
64
- } from "./chunk-TT6LDJU5.js";
64
+ } from "./chunk-H72PI4S5.js";
65
65
  import {
66
66
  getPathSeparator,
67
67
  isAbsolutePath
@@ -109,7 +109,7 @@ import {
109
109
  updateSessionMetadata,
110
110
  updateSessionProvider,
111
111
  updateSessionRunning
112
- } from "./chunk-NF6WHQAT.js";
112
+ } from "./chunk-BSDMJT53.js";
113
113
  import {
114
114
  initDatabase
115
115
  } from "./chunk-ZPIZLTWU.js";
@@ -3837,7 +3837,7 @@ import { Router as Router7 } from "express";
3837
3837
  import { spawn as spawn2 } from "child_process";
3838
3838
 
3839
3839
  // src/constants.ts
3840
- var VERSION = "2.0.42";
3840
+ var VERSION = "2.0.44";
3841
3841
 
3842
3842
  // src/server/routes/auto-update.ts
3843
3843
  var updateInProgress = false;
@@ -4034,7 +4034,7 @@ async function createServerHandle(config4) {
4034
4034
  setMcpTools(mcpTools);
4035
4035
  logger.info("MCP tools registered", { count: mcpTools.length });
4036
4036
  }
4037
- const { signalMcpReady } = await import("./server-NJ56QOTU.js");
4037
+ const { signalMcpReady } = await import("./server-EJQIYEXN.js");
4038
4038
  signalMcpReady();
4039
4039
  });
4040
4040
  const app = express();
@@ -4192,7 +4192,7 @@ async function createServerHandle(config4) {
4192
4192
  res.json({ project });
4193
4193
  });
4194
4194
  app.get("/api/sessions", async (req, res) => {
4195
- const { getRecentUserPromptsForSession } = await import("./events-THW3MYXE.js");
4195
+ const { getRecentUserPromptsForSession } = await import("./events-7RIPFG62.js");
4196
4196
  const projectId = req.query["projectId"];
4197
4197
  const limit = Math.min(parseInt(req.query["limit"]) || 20, 100);
4198
4198
  const offset = parseInt(req.query["offset"]) || 0;
@@ -4225,9 +4225,9 @@ async function createServerHandle(config4) {
4225
4225
  res.status(201).json({ session });
4226
4226
  });
4227
4227
  app.get("/api/sessions/:id", async (req, res) => {
4228
- const { getEventStore: getEventStore2 } = await import("./events-THW3MYXE.js");
4228
+ const { getEventStore: getEventStore2 } = await import("./events-7RIPFG62.js");
4229
4229
  const { buildMessagesFromStoredEvents } = await import("./folding-H5C6HS7O.js");
4230
- const { getPendingQuestionsForSession } = await import("./tools-PS5CSPGS.js");
4230
+ const { getPendingQuestionsForSession } = await import("./tools-3LE2M25T.js");
4231
4231
  const session = sessionManager.getSession(req.params.id);
4232
4232
  if (!session) {
4233
4233
  return res.status(404).json({ error: "Session not found" });
@@ -4258,7 +4258,7 @@ async function createServerHandle(config4) {
4258
4258
  res.json({ success: true });
4259
4259
  });
4260
4260
  app.post("/api/sessions/:id/provider", async (req, res) => {
4261
- const { getEventStore: getEventStore2 } = await import("./events-THW3MYXE.js");
4261
+ const { getEventStore: getEventStore2 } = await import("./events-7RIPFG62.js");
4262
4262
  const { buildMessagesFromStoredEvents } = await import("./folding-H5C6HS7O.js");
4263
4263
  const sessionId = req.params.id;
4264
4264
  const session = sessionManager.getSession(sessionId);
@@ -4321,7 +4321,7 @@ async function createServerHandle(config4) {
4321
4321
  res.json({ success: true });
4322
4322
  });
4323
4323
  app.put("/api/sessions/:id/mode", async (req, res) => {
4324
- const { getEventStore: getEventStore2 } = await import("./events-THW3MYXE.js");
4324
+ const { getEventStore: getEventStore2 } = await import("./events-7RIPFG62.js");
4325
4325
  const { buildMessagesFromStoredEvents } = await import("./folding-H5C6HS7O.js");
4326
4326
  const sessionId = req.params.id;
4327
4327
  const session = sessionManager.getSession(sessionId);
@@ -4378,15 +4378,15 @@ async function createServerHandle(config4) {
4378
4378
  if (!callId || approved === void 0) {
4379
4379
  return res.status(400).json({ error: "callId and approved are required" });
4380
4380
  }
4381
- const { providePathConfirmation } = await import("./tools-PS5CSPGS.js");
4381
+ const { providePathConfirmation } = await import("./tools-3LE2M25T.js");
4382
4382
  const result = providePathConfirmation(callId, approved, alwaysAllow);
4383
4383
  if (!result.found) {
4384
4384
  return res.status(404).json({ error: "No pending path confirmation with that ID" });
4385
4385
  }
4386
- const { getEventStore: getEventStore2 } = await import("./events-THW3MYXE.js");
4386
+ const { getEventStore: getEventStore2 } = await import("./events-7RIPFG62.js");
4387
4387
  const { buildMessagesFromStoredEvents, foldPendingConfirmations } = await import("./folding-H5C6HS7O.js");
4388
4388
  const { createSessionStateMessage } = await import("./protocol-CTNE3ANP.js");
4389
- const { getPendingQuestionsForSession } = await import("./tools-PS5CSPGS.js");
4389
+ const { getPendingQuestionsForSession } = await import("./tools-3LE2M25T.js");
4390
4390
  const eventStore = getEventStore2();
4391
4391
  const events = eventStore.getEvents(sessionId);
4392
4392
  const messages = buildMessagesFromStoredEvents(events);
@@ -4407,7 +4407,7 @@ async function createServerHandle(config4) {
4407
4407
  if (!skip && typeof answer !== "string") {
4408
4408
  return res.status(400).json({ error: "answer is required when not skipping" });
4409
4409
  }
4410
- const { provideAnswer } = await import("./tools-PS5CSPGS.js");
4410
+ const { provideAnswer } = await import("./tools-3LE2M25T.js");
4411
4411
  const found = provideAnswer(callId, answer ?? "", skip ?? false);
4412
4412
  if (!found) {
4413
4413
  return res.status(404).json({ error: "No pending question with that ID" });
@@ -4443,15 +4443,15 @@ async function createServerHandle(config4) {
4443
4443
  if (!session) {
4444
4444
  return res.status(404).json({ error: "Session not found" });
4445
4445
  }
4446
- const { stopSessionExecution } = await import("./chat-handler-KW4CAXTH.js");
4447
- const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-PS5CSPGS.js");
4446
+ const { stopSessionExecution } = await import("./chat-handler-XAJ2MZRG.js");
4447
+ const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-3LE2M25T.js");
4448
4448
  const queuedMessages = sessionManager.getQueueState(sessionId);
4449
4449
  sessionManager.clearMessageQueue(sessionId);
4450
4450
  stopSessionExecution(sessionId, sessionManager);
4451
4451
  abortSession(sessionId);
4452
4452
  cancelQuestionsForSession(sessionId, "Session stopped by user");
4453
4453
  cancelPathConfirmationsForSession(sessionId, "Session stopped by user");
4454
- const eventStore = (await import("./events-THW3MYXE.js")).getEventStore();
4454
+ const eventStore = (await import("./events-7RIPFG62.js")).getEventStore();
4455
4455
  eventStore.append(sessionId, { type: "running.changed", data: { isRunning: false } });
4456
4456
  res.json({ success: true, queuedMessages });
4457
4457
  });
@@ -4465,7 +4465,7 @@ async function createServerHandle(config4) {
4465
4465
  if (typeof messageIndex !== "number" || messageIndex < 0) {
4466
4466
  return res.status(400).json({ error: "messageIndex must be a non-negative number" });
4467
4467
  }
4468
- const { truncateSessionMessages } = await import("./events-THW3MYXE.js");
4468
+ const { truncateSessionMessages } = await import("./events-7RIPFG62.js");
4469
4469
  truncateSessionMessages(sessionId, messageIndex);
4470
4470
  res.json({ success: true });
4471
4471
  });
@@ -4483,7 +4483,7 @@ async function createServerHandle(config4) {
4483
4483
  if (!msg) {
4484
4484
  return res.status(400).json({ error: "Message not found at this index" });
4485
4485
  }
4486
- const { truncateSessionMessages } = await import("./events-THW3MYXE.js");
4486
+ const { truncateSessionMessages } = await import("./events-7RIPFG62.js");
4487
4487
  truncateSessionMessages(sessionId, messageIndex - 1);
4488
4488
  sessionManager.queueMessage(sessionId, "asap", msg.content, msg.attachments, msg.messageKind);
4489
4489
  res.json({ success: true });
@@ -4940,7 +4940,7 @@ async function createServerHandle(config4) {
4940
4940
  });
4941
4941
  async function rebuildMcpTools() {
4942
4942
  const { createMcpTools: createMcpTools2 } = await import("./tool-adapter-MOGEI6TP.js");
4943
- const { setMcpTools: setMcpTools2 } = await import("./tools-PS5CSPGS.js");
4943
+ const { setMcpTools: setMcpTools2 } = await import("./tools-3LE2M25T.js");
4944
4944
  const mcpTools = createMcpTools2(mcpManager);
4945
4945
  setMcpTools2(mcpTools);
4946
4946
  }
@@ -5248,7 +5248,7 @@ async function createServerHandle(config4) {
5248
5248
  const state = sessionManager.getContextState(sessionId);
5249
5249
  wssExports.broadcastForSession(sessionId, createContextStateMessage(state));
5250
5250
  });
5251
- const { QueueProcessor } = await import("./processor-VGEPABSY.js");
5251
+ const { QueueProcessor } = await import("./processor-QOV6XGBF.js");
5252
5252
  const queueProcessor = new QueueProcessor({
5253
5253
  sessionManager,
5254
5254
  providerManager,
@@ -5323,4 +5323,4 @@ export {
5323
5323
  createServerHandle,
5324
5324
  createServer
5325
5325
  };
5326
- //# sourceMappingURL=chunk-LS3FQ4UQ.js.map
5326
+ //# sourceMappingURL=chunk-33HVSYWA.js.map
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-55RWNJBT.js";
5
5
  import {
6
6
  getCurrentWindowMessageOptions
7
- } from "./chunk-NF6WHQAT.js";
7
+ } from "./chunk-BSDMJT53.js";
8
8
 
9
9
  // src/server/context/compactor.ts
10
10
  function appendCompactionPrompt(sessionId, append) {
@@ -31,4 +31,4 @@ export {
31
31
  shouldCompact,
32
32
  getCompactionTarget
33
33
  };
34
- //# sourceMappingURL=chunk-WXAOEWJS.js.map
34
+ //# sourceMappingURL=chunk-4EFNO4BV.js.map
@@ -12,7 +12,7 @@ import {
12
12
  loadAllAgentsDefault,
13
13
  processEventsForConversation,
14
14
  runTopLevelAgentLoop
15
- } from "./chunk-TT6LDJU5.js";
15
+ } from "./chunk-H72PI4S5.js";
16
16
  import {
17
17
  TurnMetrics,
18
18
  WORKFLOW_KICKOFF_PROMPT,
@@ -26,7 +26,7 @@ import {
26
26
  getCurrentWindowMessageOptions,
27
27
  getEventStore,
28
28
  getRuntimeConfig
29
- } from "./chunk-NF6WHQAT.js";
29
+ } from "./chunk-BSDMJT53.js";
30
30
  import {
31
31
  buildSnapshotFromSessionState
32
32
  } from "./chunk-EHYFYQXY.js";
@@ -310,4 +310,4 @@ export {
310
310
  runAgentTurn,
311
311
  injectWorkflowKickoffIfNeeded
312
312
  };
313
- //# sourceMappingURL=chunk-ULZORR3T.js.map
313
+ //# sourceMappingURL=chunk-A45RDSCQ.js.map
@@ -2,7 +2,7 @@ import {
2
2
  injectWorkflowKickoffIfNeeded,
3
3
  runAgentTurn,
4
4
  runChatTurn
5
- } from "./chunk-ULZORR3T.js";
5
+ } from "./chunk-A45RDSCQ.js";
6
6
  import {
7
7
  applyDynamicContext,
8
8
  checkAborted,
@@ -16,7 +16,7 @@ import {
16
16
  loadAllAgentsDefault,
17
17
  saveItemToDir,
18
18
  spawnShellProcess
19
- } from "./chunk-TT6LDJU5.js";
19
+ } from "./chunk-H72PI4S5.js";
20
20
  import {
21
21
  getPlatformShell,
22
22
  onProcessEvent
@@ -40,7 +40,7 @@ import {
40
40
  } from "./chunk-EU3WWTFH.js";
41
41
  import {
42
42
  appendCompactionPrompt
43
- } from "./chunk-WXAOEWJS.js";
43
+ } from "./chunk-4EFNO4BV.js";
44
44
  import {
45
45
  TurnMetrics,
46
46
  createMessageStartEvent
@@ -49,7 +49,7 @@ import {
49
49
  getCurrentContextWindowId,
50
50
  getEventStore,
51
51
  getRuntimeConfig
52
- } from "./chunk-NF6WHQAT.js";
52
+ } from "./chunk-BSDMJT53.js";
53
53
  import {
54
54
  createLLMClient
55
55
  } from "./chunk-ZBLT7MNL.js";
@@ -1372,6 +1372,7 @@ function processQueueAndRestartTurn(sessionManager, sessionId, drainFn, queueMod
1372
1372
  return true;
1373
1373
  }
1374
1374
  var activeAgents = /* @__PURE__ */ new Map();
1375
+ var abortedSessions = /* @__PURE__ */ new Set();
1375
1376
  var MAX_SEND_QUEUE_SIZE = 1e3;
1376
1377
  function createWebSocketServer(httpServer, config, getLLMClient, getActiveProvider, sessionManager, providerManager) {
1377
1378
  const wss = new WebSocketServer({ server: httpServer });
@@ -1483,6 +1484,13 @@ function createWebSocketServer(httpServer, config, getLLMClient, getActiveProvid
1483
1484
  return;
1484
1485
  }
1485
1486
  activeAgents.delete(sessionId);
1487
+ if (abortedSessions.has(sessionId)) {
1488
+ abortedSessions.delete(sessionId);
1489
+ sessionManager.clearMessageQueue(sessionId);
1490
+ const contextState2 = sessionManager.getContextState(sessionId);
1491
+ sendFn(sessionId, createContextStateMessage(contextState2));
1492
+ return;
1493
+ }
1486
1494
  const processed = processQueueAndRestartTurn(
1487
1495
  sessionManager,
1488
1496
  sessionId,
@@ -1684,6 +1692,7 @@ function createWebSocketServer(httpServer, config, getLLMClient, getActiveProvid
1684
1692
  return {
1685
1693
  wss,
1686
1694
  abortSession: (sessionId) => {
1695
+ abortedSessions.add(sessionId);
1687
1696
  const controller = activeAgents.get(sessionId);
1688
1697
  if (controller) {
1689
1698
  activeAgents.delete(sessionId);
@@ -2056,4 +2065,4 @@ export {
2056
2065
  signalMcpReady,
2057
2066
  createWebSocketServer
2058
2067
  };
2059
- //# sourceMappingURL=chunk-XIBT7GFC.js.map
2068
+ //# sourceMappingURL=chunk-AJDU5GID.js.map
@@ -931,6 +931,8 @@ var envSchema = z.object({
931
931
  OPENFOX_REASONING_EFFORT: z.string().optional(),
932
932
  // Deprecated: use OPENFOX_REASONING_EFFORT=none instead
933
933
  OPENFOX_DISABLE_THINKING: z.coerce.boolean().default(false),
934
+ OPENFOX_LLM_TIMEOUT: z.coerce.number().default(3e5),
935
+ OPENFOX_LLM_IDLE_TIMEOUT: z.coerce.number().default(3e5),
934
936
  OPENFOX_DEV: z.coerce.boolean().default(false)
935
937
  });
936
938
  function loadConfig() {
@@ -941,10 +943,8 @@ function loadConfig() {
941
943
  llm: {
942
944
  baseUrl: llmUrl,
943
945
  model: env.OPENFOX_MODEL_NAME,
944
- timeout: 3e5,
945
- // 5 minutes (deprecated, kept for backward compatibility)
946
- idleTimeout: 3e5,
947
- // 5 minutes of inactivity
946
+ timeout: env.OPENFOX_LLM_TIMEOUT,
947
+ idleTimeout: env.OPENFOX_LLM_IDLE_TIMEOUT,
948
948
  backend: env.OPENFOX_BACKEND,
949
949
  ...env.OPENFOX_REASONING_EFFORT ? { reasoningEffort: env.OPENFOX_REASONING_EFFORT } : env.OPENFOX_DISABLE_THINKING ? { reasoningEffort: "none" } : {}
950
950
  },
@@ -1432,4 +1432,4 @@ export {
1432
1432
  truncateSessionMessages,
1433
1433
  getRecentUserPromptsForSession
1434
1434
  };
1435
- //# sourceMappingURL=chunk-NF6WHQAT.js.map
1435
+ //# sourceMappingURL=chunk-BSDMJT53.js.map
@@ -55,7 +55,7 @@ import {
55
55
  getCurrentWindowMessageOptions,
56
56
  getEventStore,
57
57
  getRuntimeConfig
58
- } from "./chunk-NF6WHQAT.js";
58
+ } from "./chunk-BSDMJT53.js";
59
59
  import {
60
60
  buildContextMessagesFromEventHistory,
61
61
  foldContextState,
@@ -948,7 +948,7 @@ var readFileTool = createTool(
948
948
  const startLine = Math.max(1, offset);
949
949
  const endLine = Math.min(startLine + limit - 1, totalLines);
950
950
  const selectedLines = lines.slice(startLine - 1, endLine);
951
- const formatted = selectedLines.map((line, i) => `${startLine + i}: ${line}`).join("\n");
951
+ const formatted = selectedLines.map((line, i) => `${startLine + i}|${line}`).join("\n");
952
952
  const truncated = endLine < totalLines;
953
953
  let output = formatted;
954
954
  if (truncated) {
@@ -2581,7 +2581,7 @@ ${CONTINUE_PROMPT}` : CONTINUE_PROMPT;
2581
2581
  sessionManager.setCurrentContextSize(sessionId, result.usage.promptTokens);
2582
2582
  if (!compacting) {
2583
2583
  const contextState2 = sessionManager.getContextState(sessionId);
2584
- const { shouldCompact, appendCompactionPrompt } = await import("./compactor-TJEAAZL3.js");
2584
+ const { shouldCompact, appendCompactionPrompt } = await import("./compactor-LQ46XQJV.js");
2585
2585
  if (shouldCompact(contextState2.currentTokens, contextState2.maxTokens, runtimeConfig.context.compactionThreshold)) {
2586
2586
  appendCompactionPrompt(sessionId, append);
2587
2587
  compacting = true;
@@ -3452,7 +3452,7 @@ var callSubAgentTool = {
3452
3452
  };
3453
3453
  }
3454
3454
  try {
3455
- const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-PS5CSPGS.js");
3455
+ const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-3LE2M25T.js");
3456
3456
  const toolRegistry = getToolRegistryForAgent2(agentDef);
3457
3457
  const turnMetrics = new TurnMetrics();
3458
3458
  const result = await executeSubAgent({
@@ -4268,7 +4268,7 @@ function resolveAgentDef2(sessionManager, sessionId) {
4268
4268
  }
4269
4269
  async function buildCachedPrompt(sessionManager, sessionId, agentDef) {
4270
4270
  const { instructionContent, skills } = await loadSessionContext(sessionManager, sessionId);
4271
- const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-PS5CSPGS.js");
4271
+ const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-3LE2M25T.js");
4272
4272
  const tools = getToolRegistryForAgent2(agentDef).definitions;
4273
4273
  const toolFingerprint = getToolFingerprint(tools);
4274
4274
  const allAgents = await loadAllAgentsDefault();
@@ -4281,7 +4281,7 @@ async function buildCachedPrompt(sessionManager, sessionId, agentDef) {
4281
4281
  async function computeSessionHash(sessionManager, sessionId) {
4282
4282
  const { instructionContent, skills } = await loadSessionContext(sessionManager, sessionId);
4283
4283
  const agentDef = await resolveAgentDef2(sessionManager, sessionId);
4284
- const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-PS5CSPGS.js");
4284
+ const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-3LE2M25T.js");
4285
4285
  const tools = getToolRegistryForAgent2(agentDef).definitions;
4286
4286
  const toolFingerprint = getToolFingerprint(tools);
4287
4287
  return computeDynamicContextHash(instructionContent, skills, toolFingerprint);
@@ -4388,7 +4388,7 @@ var mcpConfigTool = createTool(
4388
4388
  await saveGlobalConfig(mcpConfigMode, { ...globalConfig, mcpServers: updated });
4389
4389
  }
4390
4390
  async function rebuildTools() {
4391
- const { setMcpTools: setMcpTools2 } = await import("./tools-PS5CSPGS.js");
4391
+ const { setMcpTools: setMcpTools2 } = await import("./tools-3LE2M25T.js");
4392
4392
  const mcpTools = createMcpTools(mcpManagerForTools);
4393
4393
  setMcpTools2(mcpTools);
4394
4394
  }
@@ -5058,4 +5058,4 @@ export {
5058
5058
  getToolRegistryForAgent,
5059
5059
  createToolRegistry
5060
5060
  };
5061
- //# sourceMappingURL=chunk-TT6LDJU5.js.map
5061
+ //# sourceMappingURL=chunk-H72PI4S5.js.map
@@ -8,7 +8,7 @@ import {
8
8
  import {
9
9
  getEventStore,
10
10
  updateSessionMetadata
11
- } from "./chunk-NF6WHQAT.js";
11
+ } from "./chunk-BSDMJT53.js";
12
12
  import {
13
13
  buildMessagesFromStoredEvents,
14
14
  foldPendingConfirmations
@@ -175,4 +175,4 @@ export {
175
175
  buildRunChatTurnParams,
176
176
  generateSessionNameForSession
177
177
  };
178
- //# sourceMappingURL=chunk-NVQFIZJI.js.map
178
+ //# sourceMappingURL=chunk-QOZ2DIWF.js.map
@@ -208,7 +208,7 @@ async function runCli(options) {
208
208
  if (!configExists) {
209
209
  await runNetworkSetup(mode);
210
210
  }
211
- const { runServe } = await import("./serve-J5POPC5Z.js");
211
+ const { runServe } = await import("./serve-6XZEFLFP.js");
212
212
  const serveOptions = { mode };
213
213
  if (values.port) serveOptions.port = parseInt(values.port);
214
214
  if (values["no-browser"] === true) serveOptions.openBrowser = false;
@@ -220,4 +220,4 @@ async function runCli(options) {
220
220
  export {
221
221
  runCli
222
222
  };
223
- //# sourceMappingURL=chunk-6ZS7YQOO.js.map
223
+ //# sourceMappingURL=chunk-YUIR2I64.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-6ZS7YQOO.js";
4
+ } from "../chunk-YUIR2I64.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-6ZS7YQOO.js";
4
+ } from "../chunk-YUIR2I64.js";
5
5
  import "../chunk-XY3LESVZ.js";
6
6
  import {
7
7
  logger
@@ -2,9 +2,9 @@ import {
2
2
  appendCompactionPrompt,
3
3
  getCompactionTarget,
4
4
  shouldCompact
5
- } from "./chunk-WXAOEWJS.js";
5
+ } from "./chunk-4EFNO4BV.js";
6
6
  import "./chunk-55RWNJBT.js";
7
- import "./chunk-NF6WHQAT.js";
7
+ import "./chunk-BSDMJT53.js";
8
8
  import "./chunk-EHYFYQXY.js";
9
9
  import "./chunk-ZPIZLTWU.js";
10
10
  import "./chunk-J2GP3J3X.js";
@@ -18,4 +18,4 @@ export {
18
18
  getCompactionTarget,
19
19
  shouldCompact
20
20
  };
21
- //# sourceMappingURL=compactor-TJEAAZL3.js.map
21
+ //# sourceMappingURL=compactor-LQ46XQJV.js.map
@@ -38,7 +38,7 @@ import {
38
38
  isStoredEvent,
39
39
  isTurnEvent,
40
40
  truncateSessionMessages
41
- } from "./chunk-NF6WHQAT.js";
41
+ } from "./chunk-BSDMJT53.js";
42
42
  import {
43
43
  buildContextMessagesFromEventHistory,
44
44
  buildContextMessagesFromMessages,
@@ -115,4 +115,4 @@ export {
115
115
  isTurnEvent,
116
116
  truncateSessionMessages
117
117
  };
118
- //# sourceMappingURL=events-THW3MYXE.js.map
118
+ //# sourceMappingURL=events-7RIPFG62.js.map
@@ -2,8 +2,8 @@ import {
2
2
  injectWorkflowKickoffIfNeeded,
3
3
  runAgentTurn,
4
4
  runChatTurn
5
- } from "./chunk-ULZORR3T.js";
6
- import "./chunk-TT6LDJU5.js";
5
+ } from "./chunk-A45RDSCQ.js";
6
+ import "./chunk-H72PI4S5.js";
7
7
  import "./chunk-LBGHZLLH.js";
8
8
  import "./chunk-PBGOZMVY.js";
9
9
  import "./chunk-VRGRAQDG.js";
@@ -20,7 +20,7 @@ import {
20
20
  createToolCallEvent,
21
21
  createToolResultEvent
22
22
  } from "./chunk-55RWNJBT.js";
23
- import "./chunk-NF6WHQAT.js";
23
+ import "./chunk-BSDMJT53.js";
24
24
  import "./chunk-EHYFYQXY.js";
25
25
  import "./chunk-ZPIZLTWU.js";
26
26
  import "./chunk-J2GP3J3X.js";
@@ -43,4 +43,4 @@ export {
43
43
  runAgentTurn,
44
44
  runChatTurn
45
45
  };
46
- //# sourceMappingURL=orchestrator-XIGRXAEC.js.map
46
+ //# sourceMappingURL=orchestrator-YNVVDDPW.js.map
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openfox",
3
- "version": "2.0.42",
3
+ "version": "2.0.44",
4
4
  "description": "Local-LLM-first agentic coding assistant",
5
5
  "type": "module",
6
6
  "bin": {
@@ -2,8 +2,8 @@ import {
2
2
  buildRunChatTurnParams,
3
3
  finalizeTurnCompletion,
4
4
  generateSessionNameForSession
5
- } from "./chunk-NVQFIZJI.js";
6
- import "./chunk-TT6LDJU5.js";
5
+ } from "./chunk-QOZ2DIWF.js";
6
+ import "./chunk-H72PI4S5.js";
7
7
  import "./chunk-LBGHZLLH.js";
8
8
  import "./chunk-PBGOZMVY.js";
9
9
  import "./chunk-VRGRAQDG.js";
@@ -18,7 +18,7 @@ import "./chunk-YQ3SOPBI.js";
18
18
  import "./chunk-55RWNJBT.js";
19
19
  import {
20
20
  getEventStore
21
- } from "./chunk-NF6WHQAT.js";
21
+ } from "./chunk-BSDMJT53.js";
22
22
  import "./chunk-EHYFYQXY.js";
23
23
  import "./chunk-ZPIZLTWU.js";
24
24
  import "./chunk-J2GP3J3X.js";
@@ -38,6 +38,7 @@ var QueueProcessor = class {
38
38
  deps;
39
39
  unsubscribe = null;
40
40
  activeAgents = /* @__PURE__ */ new Map();
41
+ abortedSessions = /* @__PURE__ */ new Set();
41
42
  constructor(deps) {
42
43
  this.deps = deps;
43
44
  }
@@ -67,6 +68,7 @@ var QueueProcessor = class {
67
68
  logger.debug("QueueProcessor stopped");
68
69
  }
69
70
  abortSession(sessionId) {
71
+ this.abortedSessions.add(sessionId);
70
72
  const controller = this.activeAgents.get(sessionId);
71
73
  if (controller) {
72
74
  controller.abort();
@@ -172,7 +174,7 @@ var QueueProcessor = class {
172
174
  backend: provider?.backend ?? llmClient.getBackend(),
173
175
  model: llmClient.getModel()
174
176
  };
175
- const { runChatTurn } = await import("./orchestrator-XIGRXAEC.js");
177
+ const { runChatTurn } = await import("./orchestrator-YNVVDDPW.js");
176
178
  const runChatTurnParams = buildRunChatTurnParams({
177
179
  sessionManager,
178
180
  sessionId,
@@ -195,6 +197,11 @@ var QueueProcessor = class {
195
197
  broadcastForSession(sessionId, createSessionRunningMessage(false));
196
198
  return;
197
199
  }
200
+ if (this.abortedSessions.has(sessionId)) {
201
+ this.abortedSessions.delete(sessionId);
202
+ finalizeTurnCompletion(sessionId, sessionManager, broadcastForSession);
203
+ return;
204
+ }
198
205
  const hasMore = sessionManager.hasQueuedMessages(sessionId);
199
206
  if (!hasMore) {
200
207
  finalizeTurnCompletion(sessionId, sessionManager, broadcastForSession);
@@ -217,4 +224,4 @@ var QueueProcessor = class {
217
224
  export {
218
225
  QueueProcessor
219
226
  };
220
- //# sourceMappingURL=processor-VGEPABSY.js.map
227
+ //# sourceMappingURL=processor-QOV6XGBF.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  VERSION,
3
3
  createServer
4
- } from "./chunk-LS3FQ4UQ.js";
5
- import "./chunk-XIBT7GFC.js";
6
- import "./chunk-ULZORR3T.js";
7
- import "./chunk-TT6LDJU5.js";
4
+ } from "./chunk-33HVSYWA.js";
5
+ import "./chunk-AJDU5GID.js";
6
+ import "./chunk-A45RDSCQ.js";
7
+ import "./chunk-H72PI4S5.js";
8
8
  import "./chunk-LBGHZLLH.js";
9
9
  import "./chunk-PBGOZMVY.js";
10
10
  import "./chunk-VRGRAQDG.js";
@@ -13,11 +13,11 @@ import "./chunk-F4PMNP7S.js";
13
13
  import "./chunk-EU3WWTFH.js";
14
14
  import "./chunk-JNSSFTVD.js";
15
15
  import "./chunk-YQ3SOPBI.js";
16
- import "./chunk-WXAOEWJS.js";
16
+ import "./chunk-4EFNO4BV.js";
17
17
  import "./chunk-55RWNJBT.js";
18
18
  import {
19
19
  loadConfig
20
- } from "./chunk-NF6WHQAT.js";
20
+ } from "./chunk-BSDMJT53.js";
21
21
  import "./chunk-EHYFYQXY.js";
22
22
  import "./chunk-ZPIZLTWU.js";
23
23
  import "./chunk-SM2PK6TV.js";
@@ -200,4 +200,4 @@ async function runServe(options) {
200
200
  export {
201
201
  runServe
202
202
  };
203
- //# sourceMappingURL=serve-J5POPC5Z.js.map
203
+ //# sourceMappingURL=serve-6XZEFLFP.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  createServer,
3
3
  createServerHandle
4
- } from "../chunk-LS3FQ4UQ.js";
5
- import "../chunk-XIBT7GFC.js";
6
- import "../chunk-ULZORR3T.js";
7
- import "../chunk-TT6LDJU5.js";
4
+ } from "../chunk-33HVSYWA.js";
5
+ import "../chunk-AJDU5GID.js";
6
+ import "../chunk-A45RDSCQ.js";
7
+ import "../chunk-H72PI4S5.js";
8
8
  import "../chunk-LBGHZLLH.js";
9
9
  import "../chunk-PBGOZMVY.js";
10
10
  import "../chunk-VRGRAQDG.js";
@@ -13,9 +13,9 @@ import "../chunk-F4PMNP7S.js";
13
13
  import "../chunk-EU3WWTFH.js";
14
14
  import "../chunk-JNSSFTVD.js";
15
15
  import "../chunk-YQ3SOPBI.js";
16
- import "../chunk-WXAOEWJS.js";
16
+ import "../chunk-4EFNO4BV.js";
17
17
  import "../chunk-55RWNJBT.js";
18
- import "../chunk-NF6WHQAT.js";
18
+ import "../chunk-BSDMJT53.js";
19
19
  import "../chunk-EHYFYQXY.js";
20
20
  import "../chunk-ZPIZLTWU.js";
21
21
  import "../chunk-SM2PK6TV.js";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  createWebSocketServer,
3
3
  signalMcpReady
4
- } from "./chunk-XIBT7GFC.js";
5
- import "./chunk-ULZORR3T.js";
6
- import "./chunk-TT6LDJU5.js";
4
+ } from "./chunk-AJDU5GID.js";
5
+ import "./chunk-A45RDSCQ.js";
6
+ import "./chunk-H72PI4S5.js";
7
7
  import "./chunk-LBGHZLLH.js";
8
8
  import "./chunk-PBGOZMVY.js";
9
9
  import "./chunk-VRGRAQDG.js";
@@ -12,9 +12,9 @@ import "./chunk-F4PMNP7S.js";
12
12
  import "./chunk-EU3WWTFH.js";
13
13
  import "./chunk-JNSSFTVD.js";
14
14
  import "./chunk-YQ3SOPBI.js";
15
- import "./chunk-WXAOEWJS.js";
15
+ import "./chunk-4EFNO4BV.js";
16
16
  import "./chunk-55RWNJBT.js";
17
- import "./chunk-NF6WHQAT.js";
17
+ import "./chunk-BSDMJT53.js";
18
18
  import "./chunk-EHYFYQXY.js";
19
19
  import "./chunk-ZPIZLTWU.js";
20
20
  import "./chunk-M3RB4IF6.js";
@@ -35,4 +35,4 @@ export {
35
35
  createWebSocketServer,
36
36
  signalMcpReady
37
37
  };
38
- //# sourceMappingURL=server-NJ56QOTU.js.map
38
+ //# sourceMappingURL=server-EJQIYEXN.js.map
@@ -12,7 +12,7 @@ import {
12
12
  setMcpTools,
13
13
  stepDoneTool,
14
14
  validateToolAction
15
- } from "./chunk-TT6LDJU5.js";
15
+ } from "./chunk-H72PI4S5.js";
16
16
  import "./chunk-LBGHZLLH.js";
17
17
  import "./chunk-PBGOZMVY.js";
18
18
  import "./chunk-VRGRAQDG.js";
@@ -27,7 +27,7 @@ import {
27
27
  import "./chunk-JNSSFTVD.js";
28
28
  import "./chunk-YQ3SOPBI.js";
29
29
  import "./chunk-55RWNJBT.js";
30
- import "./chunk-NF6WHQAT.js";
30
+ import "./chunk-BSDMJT53.js";
31
31
  import "./chunk-EHYFYQXY.js";
32
32
  import "./chunk-ZPIZLTWU.js";
33
33
  import "./chunk-J2GP3J3X.js";
@@ -58,4 +58,4 @@ export {
58
58
  stepDoneTool,
59
59
  validateToolAction
60
60
  };
61
- //# sourceMappingURL=tools-PS5CSPGS.js.map
61
+ //# sourceMappingURL=tools-3LE2M25T.js.map
@@ -273,15 +273,15 @@ XID_Start XIDS`.split(/\s/).map(e=>[fd(e),e])),OP=new Map([["s",an(383)],[an(383
273
273
  ]`:`(?>\r
274
274
  ?|[
275
275
  \v\f…\u2028\u2029])`),t));else if(d==="posix")if(!a&&(p==="graph"||p==="print")){if(s==="strict")throw new Error(`POSIX class "${p}" requires min target ES2024 or non-strict accuracy`);let m={graph:"!-~",print:" -~"}[p];f&&(m=`\0-${an(m.codePointAt(0)-1)}${an(m.codePointAt(2)+1)}-􏿿`),n(qt(ds(`[${m}]`),t))}else n(qt(bm(ds(PP.get(p)),f),t));else if(d==="property")hg.has(fd(p))||(e.key="sc");else if(d==="space")n(Gs(Ia("space",{negate:f}),t));else if(d==="word")n(qt(bm(ds(us),f),t));else throw new Error(`Unexpected character set kind "${d}"`)},Directive({node:e,parent:t,root:n,remove:s,replaceWith:a,removeAllPrevSiblings:l,removeAllNextSiblings:u}){const{kind:c,flags:d}=e;if(c==="flags")if(!d.enable&&!d.disable)s();else{const f=br({flags:d});f.body[0].body=u(),a(qt(f,t),{traverse:!0})}else if(c==="keep"){const f=n.body[0],m=n.body.length===1&&cC(f,{type:"Group"})&&f.body[0].body.length===1?f.body[0]:n;if(t.parent!==m||m.body.length>1)throw new Error(Ke`Uses "\K" in a way that's unsupported`);const x=Ai({behind:!0});x.body[0].body=l(),a(qt(x,t))}else throw new Error(`Unexpected directive kind "${c}"`)},Flags({node:e,parent:t}){if(e.posixIsAscii)throw new Error('Unsupported flag "P"');if(e.textSegmentMode==="word")throw new Error('Unsupported flag "y{w}"');["digitIsAscii","extended","posixIsAscii","spaceIsAscii","wordIsAscii","textSegmentMode"].forEach(n=>delete e[n]),Object.assign(e,{global:!1,hasIndices:!1,multiline:!1,sticky:e.sticky??!1}),t.options={disable:{x:!0,n:!0},force:{v:!0}}},Group({node:e}){if(!e.flags)return;const{enable:t,disable:n}=e.flags;t!=null&&t.extended&&delete t.extended,n!=null&&n.extended&&delete n.extended,t!=null&&t.dotAll&&(n!=null&&n.dotAll)&&delete t.dotAll,t!=null&&t.ignoreCase&&(n!=null&&n.ignoreCase)&&delete t.ignoreCase,t&&!Object.keys(t).length&&delete e.flags.enable,n&&!Object.keys(n).length&&delete e.flags.disable,!e.flags.enable&&!e.flags.disable&&delete e.flags},LookaroundAssertion({node:e},t){const{kind:n}=e;n==="lookbehind"&&(t.passedLookbehind=!0)},NamedCallout({node:e,parent:t,replaceWith:n}){const{kind:s}=e;if(s==="fail")n(qt(Ai({negate:!0}),t));else throw new Error(`Unsupported named callout "(*${s.toUpperCase()}"`)},Quantifier({node:e}){if(e.body.type==="Quantifier"){const t=br();t.body[0].body.push(e.body),e.body=qt(t,e)}},Regex:{enter({node:e},{supportedGNodes:t}){const n=[];let s=!1,a=!1;for(const l of e.body)if(l.body.length===1&&l.body[0].kind==="search_start")l.body.pop();else{const u=kC(l.body);u?(s=!0,Array.isArray(u)?n.push(...u):n.push(u)):a=!0}s&&!a&&n.forEach(l=>t.add(l))},exit(e,{accuracy:t,passedLookbehind:n,strategy:s}){if(t==="strict"&&n&&s)throw new Error(Ke`Uses "\G" in a way that requires non-strict accuracy`)}},Subroutine({node:e},{jsGroupNameMap:t}){let{ref:n}=e;typeof n=="string"&&!vm(n)&&(n=ym(n,t),e.ref=n)}},HP={Backreference({node:e},{multiplexCapturesToLeftByRef:t,reffedNodesByReferencer:n}){const{orphan:s,ref:a}=e;s||n.set(e,[...t.get(a).map(({node:l})=>l)])},CapturingGroup:{enter({node:e,parent:t,replaceWith:n,skip:s},{groupOriginByCopy:a,groupsByName:l,multiplexCapturesToLeftByRef:u,openRefs:c,reffedNodesByReferencer:d}){const f=a.get(e);if(f&&c.has(e.number)){const m=Gs(B0(e.number),t);d.set(m,c.get(e.number)),n(m);return}c.set(e.number,e),u.set(e.number,[]),e.name&&yl(u,e.name,[]);const p=u.get(e.name??e.number);for(let m=0;m<p.length;m++){const x=p[m];if(f===x.node||f&&f===x.origin||e===x.origin){p.splice(m,1);break}}if(u.get(e.number).push({node:e,origin:f}),e.name&&u.get(e.name).push({node:e,origin:f}),e.name){const m=yl(l,e.name,new Map);let x=!1;if(f)x=!0;else for(const y of m.values())if(!y.hasDuplicateNameToRemove){x=!0;break}l.get(e.name).set(e,{node:e,hasDuplicateNameToRemove:x})}},exit({node:e},{openRefs:t}){t.get(e.number)===e&&t.delete(e.number)}},Group:{enter({node:e},t){t.prevFlags=t.currentFlags,e.flags&&(t.currentFlags=Iu(t.currentFlags,e.flags))},exit(e,t){t.currentFlags=t.prevFlags}},Subroutine({node:e,parent:t,replaceWith:n},s){const{isRecursive:a,ref:l}=e;if(a){let p=t;for(;(p=p.parent)&&!(p.type==="CapturingGroup"&&(p.name===l||p.number===l)););s.reffedNodesByReferencer.set(e,p);return}const u=s.subroutineRefMap.get(l),c=l===0,d=c?B0(0):SC(u,s.groupOriginByCopy,null);let f=d;if(!c){const p=wC(GP(u,x=>x.type==="Group"&&!!x.flags)),m=p?Iu(s.globalFlags,p):s.globalFlags;FP(m,s.currentFlags)||(f=br({flags:WP(m)}),f.body[0].body.push(d))}n(qt(f,t),{traverse:!c})}},UP={Backreference({node:e,parent:t,replaceWith:n},s){if(e.orphan){s.highestOrphanBackref=Math.max(s.highestOrphanBackref,e.ref);return}const l=s.reffedNodesByReferencer.get(e).filter(u=>VP(u,e));if(!l.length)n(qt(Ai({negate:!0}),t));else if(l.length>1){const u=br({atomic:!0,body:l.reverse().map(c=>Pi({body:[op(c.number)]}))});n(qt(u,t))}else e.ref=l[0].number},CapturingGroup({node:e},t){e.number=++t.numCapturesToLeft,e.name&&t.groupsByName.get(e.name).get(e).hasDuplicateNameToRemove&&delete e.name},Regex:{exit({node:e},t){const n=Math.max(t.highestOrphanBackref-t.numCapturesToLeft,0);for(let s=0;s<n;s++){const a=dC();e.body.at(-1).body.push(a)}}},Subroutine({node:e},t){!e.isRecursive||e.ref===0||(e.ref=t.reffedNodesByReferencer.get(e).number)}};function bC(e){dl(e,{"*"({node:t,parent:n}){t.parent=n}})}function FP(e,t){return e.dotAll===t.dotAll&&e.ignoreCase===t.ignoreCase}function VP(e,t){let n=t;do{if(n.type==="Regex")return!1;if(n.type==="Alternative")continue;if(n===e)return!1;const s=CC(n.parent);for(const a of s){if(a===n)break;if(a===e||EC(a,e))return!0}}while(n=n.parent);throw new Error("Unexpected path")}function SC(e,t,n,s){const a=Array.isArray(e)?[]:{};for(const[l,u]of Object.entries(e))l==="parent"?a.parent=Array.isArray(n)?s:n:u&&typeof u=="object"?a[l]=SC(u,t,a,n):(l==="type"&&u==="CapturingGroup"&&t.set(a,t.get(e)??e),a[l]=u);return a}function B0(e){const t=fC(e);return t.isRecursive=!0,t}function GP(e,t){const n=[];for(;e=e.parent;)(!t||t(e))&&n.push(e);return n}function ym(e,t){if(t.has(e))return t.get(e);const n=`$${t.size}_${e.replace(/^[^$_\p{IDS}]|[^$\u200C\u200D\p{IDC}]/ug,"_")}`;return t.set(e,n),n}function wC(e){const t=["dotAll","ignoreCase"],n={enable:{},disable:{}};return e.forEach(({flags:s})=>{t.forEach(a=>{var l,u;(l=s.enable)!=null&&l[a]&&(delete n.disable[a],n.enable[a]=!0),(u=s.disable)!=null&&u[a]&&(n.disable[a]=!0)})}),Object.keys(n.enable).length||delete n.enable,Object.keys(n.disable).length||delete n.disable,n.enable||n.disable?n:null}function WP({dotAll:e,ignoreCase:t}){const n={};return(e||t)&&(n.enable={},e&&(n.enable.dotAll=!0),t&&(n.enable.ignoreCase=!0)),(!e||!t)&&(n.disable={},!e&&(n.disable.dotAll=!0),!t&&(n.disable.ignoreCase=!0)),n}function CC(e){if(!e)throw new Error("Node expected");const{body:t}=e;return Array.isArray(t)?t:t?[t]:null}function kC(e){const t=e.find(n=>n.kind==="search_start"||YP(n,{negate:!1})||!qP(n));if(!t)return null;if(t.kind==="search_start")return t;if(t.type==="LookaroundAssertion")return t.body[0].body[0];if(t.type==="CapturingGroup"||t.type==="Group"){const n=[];for(const s of t.body){const a=kC(s.body);if(!a)return null;Array.isArray(a)?n.push(...a):n.push(a)}return n}return null}function EC(e,t){const n=CC(e)??[];for(const s of n)if(s===t||EC(s,t))return!0;return!1}function qP({type:e}){return e==="Assertion"||e==="Directive"||e==="LookaroundAssertion"}function KP(e){const t=["Character","CharacterClass","CharacterSet"];return t.includes(e.type)||e.type==="Quantifier"&&e.min&&t.includes(e.body.type)}function YP(e,t){const n={negate:null,...t};return e.type==="LookaroundAssertion"&&(n.negate===null||e.negate===n.negate)&&e.body.length===1&&cC(e.body[0],{type:"Assertion",kind:"search_start"})}function vm(e){return/^[$_\p{IDS}][$\u200C\u200D\p{IDC}]*$/u.test(e)}function ds(e,t){const s=uC(e,{...t,unicodePropertyMap:hg}).body;return s.length>1||s[0].body.length>1?br({body:s}):s[0].body[0]}function bm(e,t){return e.negate=t,e}function Gs(e,t){return e.parent=t,e}function qt(e,t){return bC(e),e.parent=t,e}function XP(e,t){const n=_C(t),s=up(n.target,"ES2024"),a=up(n.target,"ES2025"),l=n.rules.recursionLimit;if(!Number.isInteger(l)||l<2||l>20)throw new Error("Invalid recursionLimit; use 2-20");let u=null,c=null;if(!a){const y=[e.flags.ignoreCase];dl(e,QP,{getCurrentModI:()=>y.at(-1),popModI(){y.pop()},pushModI(w){y.push(w)},setHasCasedChar(){y.at(-1)?u=!0:c=!0}})}const d={dotAll:e.flags.dotAll,ignoreCase:!!((e.flags.ignoreCase||u)&&!c)};let f=e;const p={accuracy:n.accuracy,appliedGlobalFlags:d,captureMap:new Map,currentFlags:{dotAll:e.flags.dotAll,ignoreCase:e.flags.ignoreCase},inCharClass:!1,lastNode:f,originMap:e._originMap,recursionLimit:l,useAppliedIgnoreCase:!!(!a&&u&&c),useFlagMods:a,useFlagV:s,verbose:n.verbose};function m(y){return p.lastNode=f,f=y,AP(JP[y.type],`Unexpected node type "${y.type}"`)(y,p,m)}const x={pattern:e.body.map(m).join("|"),flags:m(e.flags),options:{...e.options}};return s||(delete x.options.force.v,x.options.disable.v=!0,x.options.unicodeSetsPlugin=null),x._captureTransfers=new Map,x._hiddenCaptures=[],p.captureMap.forEach((y,w)=>{y.hidden&&x._hiddenCaptures.push(w),y.transferTo&&yl(x._captureTransfers,y.transferTo,[]).push(w)}),x}var QP={"*":{enter({node:e},t){if($0(e)){const n=t.getCurrentModI();t.pushModI(e.flags?Iu({ignoreCase:n},e.flags).ignoreCase:n)}},exit({node:e},t){$0(e)&&t.popModI()}},Backreference(e,t){t.setHasCasedChar()},Character({node:e},t){fg(an(e.value))&&t.setHasCasedChar()},CharacterClassRange({node:e,skip:t},n){t(),jC(e,{firstOnly:!0}).length&&n.setHasCasedChar()},CharacterSet({node:e},t){e.kind==="property"&&vC.has(e.value)&&t.setHasCasedChar()}},JP={Alternative({body:e},t,n){return e.map(n).join("")},Assertion({kind:e,negate:t}){if(e==="string_end")return"$";if(e==="string_start")return"^";if(e==="word_boundary")return t?Ke`\B`:Ke`\b`;throw new Error(`Unexpected assertion kind "${e}"`)},Backreference({ref:e},t){if(typeof e!="number")throw new Error("Unexpected named backref in transformed AST");if(!t.useFlagMods&&t.accuracy==="strict"&&t.currentFlags.ignoreCase&&!t.captureMap.get(e).ignoreCase)throw new Error("Use of case-insensitive backref to case-sensitive group requires target ES2025 or non-strict accuracy");return"\\"+e},CapturingGroup(e,t,n){const{body:s,name:a,number:l}=e,u={ignoreCase:t.currentFlags.ignoreCase},c=t.originMap.get(e);return c&&(u.hidden=!0,l>c.number&&(u.transferTo=c.number)),t.captureMap.set(l,u),`(${a?`?<${a}>`:""}${s.map(n).join("|")})`},Character({value:e},t){const n=an(e),s=Na(e,{escDigit:t.lastNode.type==="Backreference",inCharClass:t.inCharClass,useFlagV:t.useFlagV});if(s!==n)return s;if(t.useAppliedIgnoreCase&&t.currentFlags.ignoreCase&&fg(n)){const a=yC(n);return t.inCharClass?a.join(""):a.length>1?`[${a.join("")}]`:a[0]}return n},CharacterClass(e,t,n){const{kind:s,negate:a,parent:l}=e;let{body:u}=e;if(s==="intersection"&&!t.useFlagV)throw new Error("Use of character class intersection requires min target ES2024");Cr.bugFlagVLiteralHyphenIsRange&&t.useFlagV&&u.some(H0)&&(u=[hd(45),...u.filter(f=>!H0(f))]);const c=()=>`[${a?"^":""}${u.map(n).join(s==="intersection"?"&&":"")}]`;if(!t.inCharClass){if((!t.useFlagV||Cr.bugNestedClassIgnoresNegation)&&!a){const p=u.filter(m=>m.type==="CharacterClass"&&m.kind==="union"&&m.negate);if(p.length){const m=br(),x=m.body[0];return m.parent=l,x.parent=m,u=u.filter(y=>!p.includes(y)),e.body=u,u.length?(e.parent=x,x.body.push(e)):m.body.pop(),p.forEach(y=>{const w=Pi({body:[y]});y.parent=w,w.parent=m,m.body.push(w)}),n(m)}}t.inCharClass=!0;const f=c();return t.inCharClass=!1,f}const d=u[0];if(s==="union"&&!a&&d&&((!t.useFlagV||!t.verbose)&&l.kind==="union"&&!(Cr.bugFlagVLiteralHyphenIsRange&&t.useFlagV)||!t.verbose&&l.kind==="intersection"&&u.length===1&&d.type!=="CharacterClassRange"))return u.map(n).join("");if(!t.useFlagV&&l.type==="CharacterClass")throw new Error("Uses nested character class in a way that requires min target ES2024");return c()},CharacterClassRange(e,t){const n=e.min.value,s=e.max.value,a={escDigit:!1,inCharClass:!0,useFlagV:t.useFlagV},l=Na(n,a),u=Na(s,a),c=new Set;if(t.useAppliedIgnoreCase&&t.currentFlags.ignoreCase){const d=jC(e);r6(d).forEach(p=>{c.add(Array.isArray(p)?`${Na(p[0],a)}-${Na(p[1],a)}`:Na(p,a))})}return`${l}-${u}${[...c].join("")}`},CharacterSet({kind:e,negate:t,value:n,key:s},a){if(e==="dot")return a.currentFlags.dotAll?a.appliedGlobalFlags.dotAll||a.useFlagMods?".":"[^]":Ke`[^\n]`;if(e==="digit")return t?Ke`\D`:Ke`\d`;if(e==="property"){if(a.useAppliedIgnoreCase&&a.currentFlags.ignoreCase&&vC.has(n))throw new Error(`Unicode property "${n}" can't be case-insensitive when other chars have specific case`);return`${t?Ke`\P`:Ke`\p`}{${s?`${s}=`:""}${n}}`}if(e==="word")return t?Ke`\W`:Ke`\w`;throw new Error(`Unexpected character set kind "${e}"`)},Flags(e,t){return(t.appliedGlobalFlags.ignoreCase?"i":"")+(e.dotAll?"s":"")+(e.sticky?"y":"")},Group({atomic:e,body:t,flags:n,parent:s},a,l){const u=a.currentFlags;n&&(a.currentFlags=Iu(u,n));const c=t.map(l).join("|"),d=!a.verbose&&t.length===1&&s.type!=="Quantifier"&&!e&&(!a.useFlagMods||!n)?c:`(?${s6(e,n,a.useFlagMods)}${c})`;return a.currentFlags=u,d},LookaroundAssertion({body:e,kind:t,negate:n},s,a){return`(?${`${t==="lookahead"?"":"<"}${n?"!":"="}`}${e.map(a).join("|")})`},Quantifier(e,t,n){return n(e.body)+i6(e)},Subroutine({isRecursive:e,ref:t},n){if(!e)throw new Error("Unexpected non-recursive subroutine in transformed AST");const s=n.recursionLimit;return t===0?`(?R=${s})`:Ke`\g<${t}&R=${s}>`}},ZP=new Set(["$","(",")","*","+",".","?","[","\\","]","^","{","|","}"]),e6=new Set(["-","\\","]","^","["]),t6=new Set(["(",")","-","/","[","\\","]","^","{","|","}","!","#","$","%","&","*","+",",",".",":",";","<","=",">","?","@","`","~"]),z0=new Map([[9,Ke`\t`],[10,Ke`\n`],[11,Ke`\v`],[12,Ke`\f`],[13,Ke`\r`],[8232,Ke`\u2028`],[8233,Ke`\u2029`],[65279,Ke`\uFEFF`]]),n6=new RegExp("^\\p{Cased}$","u");function fg(e){return n6.test(e)}function jC(e,t){const n=!!(t!=null&&t.firstOnly),s=e.min.value,a=e.max.value,l=[];if(s<65&&(a===65535||a>=131071)||s===65536&&a>=131071)return l;for(let u=s;u<=a;u++){const c=an(u);if(!fg(c))continue;const d=yC(c).filter(f=>{const p=f.codePointAt(0);return p<s||p>a});if(d.length&&(l.push(...d),n))break}return l}function Na(e,{escDigit:t,inCharClass:n,useFlagV:s}){if(z0.has(e))return z0.get(e);if(e<32||e>126&&e<160||e>262143||t&&a6(e))return e>255?`\\u{${e.toString(16).toUpperCase()}}`:`\\x${e.toString(16).toUpperCase().padStart(2,"0")}`;const a=n?s?t6:e6:ZP,l=an(e);return(a.has(l)?"\\":"")+l}function r6(e){const t=e.map(a=>a.codePointAt(0)).sort((a,l)=>a-l),n=[];let s=null;for(let a=0;a<t.length;a++)t[a+1]===t[a]+1?s??(s=t[a]):s===null?n.push(t[a]):(n.push([s,t[a]]),s=null);return n}function s6(e,t,n){if(e)return">";let s="";if(t&&n){const{enable:a,disable:l}=t;s=(a!=null&&a.ignoreCase?"i":"")+(a!=null&&a.dotAll?"s":"")+(l?"-":"")+(l!=null&&l.ignoreCase?"i":"")+(l!=null&&l.dotAll?"s":"")}return`${s}:`}function i6({kind:e,max:t,min:n}){let s;return!n&&t===1?s="?":!n&&t===1/0?s="*":n===1&&t===1/0?s="+":n===t?s=`{${n}}`:s=`{${n},${t===1/0?"":t}}`,s+{greedy:"",lazy:"?",possessive:"+"}[e]}function $0({type:e}){return e==="CapturingGroup"||e==="Group"||e==="LookaroundAssertion"}function a6(e){return e>47&&e<58}function H0({type:e,value:t}){return e==="Character"&&t===45}var Ws,ms,Ri,qs,Oi,vl,dp,Js,o6=(Js=class extends RegExp{constructor(n,s,a){var t=(...v$)=>(super(...v$),vi(this,vl),vi(this,Ws,new Map),vi(this,ms,null),vi(this,Ri),vi(this,qs,null),vi(this,Oi,null),xe(this,"rawOptions",{}),this);const l=!!(a!=null&&a.lazyCompile);if(n instanceof RegExp){if(a)throw new Error("Cannot provide options when copying a regexp");const u=n;t(u,s),_r(this,Ri,u.source),u instanceof Js&&(_r(this,Ws,Cn(u,Ws)),_r(this,qs,Cn(u,qs)),_r(this,Oi,Cn(u,Oi)),this.rawOptions=u.rawOptions)}else{const u={hiddenCaptures:[],strategy:null,transfers:[],...a};t(l?"":n,s),_r(this,Ri,n),_r(this,Ws,c6(u.hiddenCaptures,u.transfers)),_r(this,Oi,u.strategy),this.rawOptions=a??{}}l||_r(this,ms,this)}get source(){return Cn(this,Ri)||"(?:)"}exec(n){if(!Cn(this,ms)){const{lazyCompile:l,...u}=this.rawOptions;_r(this,ms,new Js(Cn(this,Ri),this.flags,u))}const s=this.global||this.sticky,a=this.lastIndex;if(Cn(this,Oi)==="clip_search"&&s&&a){this.lastIndex=0;const l=Nf(this,vl,dp).call(this,n.slice(a));return l&&(l6(l,a,n,this.hasIndices),this.lastIndex+=a),l}return Nf(this,vl,dp).call(this,n)}},Ws=new WeakMap,ms=new WeakMap,Ri=new WeakMap,qs=new WeakMap,Oi=new WeakMap,vl=new WeakSet,dp=function(n){Cn(this,ms).lastIndex=this.lastIndex;const s=cv(Js.prototype,this,"exec").call(Cn(this,ms),n);if(this.lastIndex=Cn(this,ms).lastIndex,!s||!Cn(this,Ws).size)return s;const a=[...s];s.length=1;let l;this.hasIndices&&(l=[...s.indices],s.indices.length=1);const u=[0];for(let c=1;c<a.length;c++){const{hidden:d,transferTo:f}=Cn(this,Ws).get(c)??{};if(d?u.push(null):(u.push(s.length),s.push(a[c]),this.hasIndices&&s.indices.push(l[c])),f&&a[c]!==void 0){const p=u[f];if(!p)throw new Error(`Invalid capture transfer to "${p}"`);if(s[p]=a[c],this.hasIndices&&(s.indices[p]=l[c]),s.groups){Cn(this,qs)||_r(this,qs,u6(this.source));const m=Cn(this,qs).get(f);m&&(s.groups[m]=a[c],this.hasIndices&&(s.indices.groups[m]=l[c]))}}}return s},Js);function l6(e,t,n,s){if(e.index+=t,e.input=n,s){const a=e.indices;for(let u=0;u<a.length;u++){const c=a[u];c&&(a[u]=[c[0]+t,c[1]+t])}const l=a.groups;l&&Object.keys(l).forEach(u=>{const c=l[u];c&&(l[u]=[c[0]+t,c[1]+t])})}}function c6(e,t){const n=new Map;for(const s of e)n.set(s,{hidden:!0});for(const[s,a]of t)for(const l of a)yl(n,l,{}).transferTo=s;return n}function u6(e){const t=/(?<capture>\((?:\?<(?![=!])(?<name>[^>]+)>|(?!\?)))|\\?./gsu,n=new Map;let s=0,a=0,l;for(;l=t.exec(e);){const{0:u,groups:{capture:c,name:d}}=l;u==="["?s++:s?u==="]"&&s--:c&&(a++,d&&n.set(a,d))}return n}function d6(e,t){const n=h6(e,t);return n.options?new o6(n.pattern,n.flags,n.options):new RegExp(n.pattern,n.flags)}function h6(e,t){const n=_C(t),s=uC(e,{flags:n.flags,normalizeUnknownPropertyNames:!0,rules:{captureGroup:n.rules.captureGroup,singleline:n.rules.singleline},skipBackrefValidation:n.rules.allowOrphanBackrefs,unicodePropertyMap:hg}),a=zP(s,{accuracy:n.accuracy,asciiWordBoundaries:n.rules.asciiWordBoundaries,avoidSubclass:n.avoidSubclass,bestEffortTarget:n.target}),l=XP(a,n),u=NP(l.pattern,{captureTransfers:l._captureTransfers,hiddenCaptures:l._hiddenCaptures,mode:"external"}),c=EP(u.pattern),d=kP(c.pattern,{captureTransfers:u.captureTransfers,hiddenCaptures:u.hiddenCaptures}),f={pattern:d.pattern,flags:`${n.hasIndices?"d":""}${n.global?"g":""}${l.flags}${l.options.disable.v?"u":"v"}`};if(n.avoidSubclass){if(n.lazyCompileLength!==1/0)throw new Error("Lazy compilation requires subclass")}else{const p=d.hiddenCaptures.sort((w,C)=>w-C),m=Array.from(d.captureTransfers),x=a._strategy,y=f.pattern.length>=n.lazyCompileLength;(p.length||m.length||x||y)&&(f.options={...p.length&&{hiddenCaptures:p},...m.length&&{transfers:m},...x&&{strategy:x},...y&&{lazyCompile:y}})}return f}function NC(e,t){return d6(e,{global:!0,hasIndices:!0,lazyCompileLength:3e3,rules:{allowOrphanBackrefs:!0,asciiWordBoundaries:!0,captureGroup:!0,recursionLimit:5,singleline:!0},...t})}function f6(e={}){const t={target:"auto",cache:new Map,...e};return t.regexConstructor||(t.regexConstructor=n=>NC(n,{target:t.target})),{createScanner(n){return new TI(n,t)},createString(n){return{content:n}}}}iw(Yp({bundledLanguages:()=>Jp,bundledLanguagesAlias:()=>Qp,bundledLanguagesBase:()=>Xp,bundledLanguagesInfo:()=>rd,bundledThemes:()=>eg,bundledThemesInfo:()=>Zp,codeToHast:()=>Jw,codeToHtml:()=>Qw,codeToTokens:()=>Zw,codeToTokensBase:()=>eC,codeToTokensWithThemes:()=>tC,createHighlighter:()=>dd,createJavaScriptRegexEngine:()=>f6,createOnigurumaEngine:()=>lw,defaultJavaScriptRegexConstructor:()=>NC,getLastGrammarState:()=>rC,getSingletonHighlighter:()=>nC,loadWasm:()=>ng}),NI);let Sm=null;const m6=["typescript","javascript","tsx","jsx","python","bash","json","css","html","sql","yaml","markdown","diff","rust","go","java","c","cpp","ruby","toml","scss","graphql","docker","powershell"],p6=["github-dark-default","vitesse-light","monokai","dracula","nord"],g6={dark:"github-dark-default",light:"vitesse-light",monokai:"monokai",dracula:"dracula",nord:"nord"};function x6(){return{name:"line-numbers",line(e,t){e.properties["data-line"]=String(t+1)}}}async function _6(){return Sm||(Sm=dd({themes:p6,langs:m6})),Sm}const Zo=new Map,y6=50;function v6(e,t,n){return`${e}|${t}|${n}`}async function TC(e,t,n="github-dark-default"){const s=v6(e,t,n),a=Zo.get(s);if(a)return a;const u=(await _6()).codeToHtml(e,{lang:t,theme:n,transformers:[x6()]});if(Zo.size>=y6){const c=Zo.keys().next().value;c&&Zo.delete(c)}return Zo.set(s,u),u}const b6={ts:"typescript",tsx:"tsx",js:"javascript",jsx:"jsx",py:"python",rb:"ruby",rs:"rust",go:"go",java:"java",c:"c",cpp:"cpp",h:"c",hpp:"cpp",cs:"csharp",php:"php",swift:"swift",kt:"kotlin",scala:"scala",sh:"bash",bash:"bash",zsh:"bash",fish:"bash",ps1:"powershell",sql:"sql",html:"html",htm:"html",css:"css",scss:"scss",sass:"sass",less:"less",json:"json",yaml:"yaml",yml:"yaml",xml:"xml",md:"markdown",markdown:"markdown",toml:"toml",ini:"ini",conf:"ini",dockerfile:"docker",makefile:"makefile",cmake:"cmake",graphql:"graphql",gql:"graphql",vue:"vue",svelte:"svelte"};function gd(e){var a;if(!e)return"text";const t=e.split("/").pop()??"",n=t.toLowerCase();if(n==="dockerfile")return"docker";if(n==="makefile")return"makefile";if(n==="cmakelists.txt")return"cmake";const s=(a=t.split(".").pop())==null?void 0:a.toLowerCase();return s?b6[s]??"text":"text"}function AC(){const e=Ut(n=>n.currentPreset);return Ut(n=>n.isCustom)?"github-dark-default":g6[e]??"github-dark-default"}function LC(e=2e3){const[t,n]=L.useState(!1),s=L.useCallback(async a=>{try{if(navigator.clipboard&&window.isSecureContext)await navigator.clipboard.writeText(a);else{const l=document.createElement("textarea");l.value=a,l.style.position="fixed",l.style.left="-9999px",document.body.appendChild(l),l.select(),document.execCommand("copy"),document.body.removeChild(l)}n(!0),setTimeout(()=>n(!1),e)}catch(l){console.error("Failed to copy:",l)}},[e]);return{copied:t,copy:s}}const S6=L.memo(function({language:t,codeString:n,showSyntaxHighlighting:s}){const{copied:a,copy:l}=LC(),[u,c]=L.useState(null),d=AC(),f=L.useRef(n);return L.useEffect(()=>{s&&(f.current=n,TC(n,t,d).then(p=>{f.current===n&&c(p)}))},[n,t,d,s]),o.jsxs("div",{className:"relative group my-1.5 rounded overflow-hidden",children:[o.jsxs("div",{className:"absolute bottom-0 right-0 flex items-center gap-2 px-2 py-1 text-xs text-text-muted/70 bg-bg-tertiary/60 rounded-tl rounded-tr z-10",children:[o.jsx("span",{children:t}),o.jsx("button",{type:"button",onClick:p=>{p.preventDefault(),p.stopPropagation(),l(n)},className:"opacity-0 group-hover:opacity-100 transition-opacity hover:text-text-primary p-0.5",title:"Copy code",children:a?o.jsx(Br,{}):o.jsx(_p,{})})]}),s&&u?o.jsx("div",{className:"min-w-0",dangerouslySetInnerHTML:{__html:u}}):o.jsx("div",{className:"overflow-x-auto",children:o.jsx("pre",{className:"my-0 px-4 py-3 overflow-x-auto font-mono text-sm whitespace-pre-wrap break-word",children:o.jsx("code",{className:`language-${t}`,children:n})})})]})});function w6(e,t){const n=e?"text-text-muted":"text-sky-400",s=e?"text-text-secondary":"text-amber-400";return{code({className:a,children:l,...u}){const c=/language-(\w+)/.exec(a||"");if(!c&&!String(l).includes(`
276
- `)){const m=e?"text-text-muted":"text-accent-secondary";return o.jsx("code",{className:`bg-bg-tertiary px-1 py-0.5 rounded ${m} font-mono text-xs`,...u,children:l})}const f=(c==null?void 0:c[1])||"text",p=String(l).replace(/\n$/,"");return o.jsx(S6,{language:f,codeString:p,showSyntaxHighlighting:t})},p({children:a}){const l=e?"text-text-muted":"text-text-primary";return o.jsx("p",{className:`${l} mb-1.5 last:mb-0 leading-tight`,children:a})},ul({children:a}){return o.jsx("ul",{className:"list-disc list-inside mb-1.5 space-y-0.5",children:a})},ol({children:a}){return o.jsx("ol",{className:"list-decimal list-inside mb-1.5 space-y-0.5",children:a})},li({children:a}){const l=e?"text-text-muted":"text-text-primary";return o.jsx("li",{className:`${l} text-sm list-item`,children:a})},h1({children:a}){return o.jsx("h1",{className:`text-base font-bold mb-1.5 mt-2 first:mt-0 ${n}`,children:a})},h2({children:a}){return o.jsx("h2",{className:`text-sm font-bold mb-1.5 mt-2 first:mt-0 ${n}`,children:a})},h3({children:a}){return o.jsx("h3",{className:`text-sm font-bold mb-1.5 mt-1.5 first:mt-0 ${n}`,children:a})},h4({children:a}){return o.jsx("h4",{className:`text-sm font-bold mb-1.5 mt-1.5 first:mt-0 ${n}`,children:a})},strong({children:a}){return o.jsx("strong",{className:`font-bold ${s}`,children:a})},em({children:a}){return o.jsx("em",{className:e?"italic text-text-secondary":"italic",children:a})},a({href:a,children:l}){return o.jsx("a",{href:a,className:"text-accent-primary hover:underline text-sm",target:"_blank",rel:"noopener noreferrer",children:l})},blockquote({children:a}){const l=e?"text-text-muted":"text-text-secondary";return o.jsx("blockquote",{className:`border-l-2 border-accent-primary pl-2 my-1.5 ${l} italic text-sm`,children:a})},table({children:a}){return o.jsx("div",{className:"overflow-x-auto my-1.5",children:o.jsx("table",{className:"min-w-full border border-border",children:a})})},th({children:a}){return o.jsx("th",{className:"border border-border bg-bg-tertiary px-2 py-1 text-left font-semibold text-sm",children:a})},td({children:a}){return o.jsx("td",{className:"border border-border px-2 py-1 text-sm",children:a})},hr(){return o.jsx("hr",{className:"border-border my-2"})},input({checked:a,...l}){return o.jsx("input",{type:"checkbox",checked:a,disabled:!0,className:"mr-1.5 w-3.5 h-3.5",...l})}}}const xs=L.memo(function({content:t,className:n="",muted:s=!1}){const{showSyntaxHighlighting:a}=Fa(),l=L.useMemo(()=>{let c=C6(t);return c=k6(c),c},[t]),u=L.useMemo(()=>w6(s,a),[s,a]);return o.jsx("div",{className:`markdown-content [&_li>p]:inline ${n}`,children:o.jsx(WR,{remarkPlugins:[iO],components:u,children:l})})});function C6(e){let t=e.replace(/^(\s*)•\s/gm,"$1- ");return t=t.replace(/^(\d+)\.\s*\n(?=\S)/gm,"$1. "),t=t.replace(/^\|\s*$/gm,""),t=t.replace(/^\d+:\s/gm,""),t}function k6(e){const t=/```/g,n=e.match(t);if(((n==null?void 0:n.length)??0)%2===1){const a=e.lastIndexOf("```");return e.slice(a+3).includes(`
276
+ `)){const m=e?"text-text-muted":"text-accent-secondary";return o.jsx("code",{className:`bg-bg-tertiary px-1 py-0.5 rounded ${m} font-mono text-xs`,...u,children:l})}const f=(c==null?void 0:c[1])||"text",p=String(l).replace(/\n$/,"");return o.jsx(S6,{language:f,codeString:p,showSyntaxHighlighting:t})},p({children:a}){const l=e?"text-text-muted":"text-text-primary";return o.jsx("p",{className:`${l} mb-1.5 last:mb-0 leading-tight`,children:a})},ul({children:a}){return o.jsx("ul",{className:"list-disc list-inside mb-1.5 space-y-0.5",children:a})},ol({children:a}){return o.jsx("ol",{className:"list-decimal list-inside mb-1.5 space-y-0.5",children:a})},li({children:a}){const l=e?"text-text-muted":"text-text-primary";return o.jsx("li",{className:`${l} text-sm list-item`,children:a})},h1({children:a}){return o.jsx("h1",{className:`text-base font-bold mb-1.5 mt-2 first:mt-0 ${n}`,children:a})},h2({children:a}){return o.jsx("h2",{className:`text-sm font-bold mb-1.5 mt-2 first:mt-0 ${n}`,children:a})},h3({children:a}){return o.jsx("h3",{className:`text-sm font-bold mb-1.5 mt-1.5 first:mt-0 ${n}`,children:a})},h4({children:a}){return o.jsx("h4",{className:`text-sm font-bold mb-1.5 mt-1.5 first:mt-0 ${n}`,children:a})},strong({children:a}){return o.jsx("strong",{className:`font-bold ${s}`,children:a})},em({children:a}){return o.jsx("em",{className:e?"italic text-text-secondary":"italic",children:a})},a({href:a,children:l}){return o.jsx("a",{href:a,className:"text-accent-primary hover:underline text-sm",target:"_blank",rel:"noopener noreferrer",children:l})},blockquote({children:a}){const l=e?"text-text-muted":"text-text-secondary";return o.jsx("blockquote",{className:`border-l-2 border-accent-primary pl-2 my-1.5 ${l} italic text-sm`,children:a})},table({children:a}){return o.jsx("div",{className:"overflow-x-auto my-1.5",children:o.jsx("table",{className:"min-w-full border border-border",children:a})})},th({children:a}){return o.jsx("th",{className:"border border-border bg-bg-tertiary px-2 py-1 text-left font-semibold text-sm",children:a})},td({children:a}){return o.jsx("td",{className:"border border-border px-2 py-1 text-sm",children:a})},hr(){return o.jsx("hr",{className:"border-border my-2"})},input({checked:a,...l}){return o.jsx("input",{type:"checkbox",checked:a,disabled:!0,className:"mr-1.5 w-3.5 h-3.5",...l})}}}const xs=L.memo(function({content:t,className:n="",muted:s=!1}){const{showSyntaxHighlighting:a}=Fa(),l=L.useMemo(()=>{let c=C6(t);return c=k6(c),c},[t]),u=L.useMemo(()=>w6(s,a),[s,a]);return o.jsx("div",{className:`markdown-content [&_li>p]:inline ${n}`,children:o.jsx(WR,{remarkPlugins:[iO],components:u,children:l})})});function C6(e){let t=e.replace(/^(\s*)•\s/gm,"$1- ");return t=t.replace(/^(\d+)\.\s*\n(?=\S)/gm,"$1. "),t=t.replace(/^\|\s*$/gm,""),t=t.replace(/^\d+\|/gm,""),t}function k6(e){const t=/```/g,n=e.match(t);if(((n==null?void 0:n.length)??0)%2===1){const a=e.lastIndexOf("```");return e.slice(a+3).includes(`
277
277
  `),e+"\n```"}return e}const E6=L.memo(function({content:t,variant:n="default"}){return n==="labeled"?o.jsxs("div",{className:"text-text-muted text-sm italic feed-item",children:[o.jsx("span",{className:"text-purple-400",children:"thinking:"}),o.jsx("div",{className:"ml-1.5 mt-0.5",children:o.jsx(xs,{content:t})})]}):o.jsx("div",{className:"text-text-muted text-sm italic bg-secondary rounded p-1.5 feed-item",children:o.jsx(xs,{content:t,muted:!0})})});function DC({tool:e,className:t="w-4 h-4 text-text-muted flex-shrink-0"}){return e==="glob"||e==="grep"?o.jsx("svg",{className:t,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:o.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"})}):e==="run_command"||e==="bash"?o.jsx("svg",{className:t,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:o.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"})}):o.jsx("svg",{className:t,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:o.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})})}const Ua=L.memo(function({code:t,language:n,variant:s,showLineNumbers:a=!1,startLine:l=1}){const[u,c]=L.useState(null),d=AC(),f=L.useRef(t);if(L.useEffect(()=>{f.current=t,TC(t,n,d).then(m=>{f.current===t&&c(m)})},[t,n,d]),!u){const m=s==="inline"?"span":s==="block-nowrap"?"div":"pre";return o.jsx(m,{className:"language-",children:o.jsx("code",{className:"language-",children:t})})}if(s==="inline")return o.jsx("span",{dangerouslySetInnerHTML:{__html:u}});const p=a?"":"shiki-plain";return o.jsx("div",{className:p,style:{"--shiki-start":l},dangerouslySetInnerHTML:{__html:u}})});function RC({src:e,alt:t,isOpen:n,onClose:s}){return n?o.jsx(Rt,{isOpen:n,onClose:s,title:"",size:"full",children:o.jsx("div",{className:"flex items-center justify-center h-full",children:o.jsx("img",{src:e,alt:t,className:"max-w-full max-h-[80vh] object-contain rounded-lg shadow-2xl"})})}):null}const Pu=L.memo(function({type:t,children:n}){const s=t==="removed"?"diff-removed-bg diff-removed-border":"diff-added-bg diff-added-border",a=t==="removed"?"line-through decoration-red-400/30":"";return o.jsx("div",{className:`border-l-[3px] ${s}`,children:o.jsx("div",{className:`min-w-0 py-3 ${a}`,children:o.jsx("div",{className:"shiki-compact shiki-transparent-bg",children:n})})})}),j6=L.memo(function({oldString:t,newString:n,filePath:s}){const a=L.useMemo(()=>gd(s),[s]),l=t.length>0,u=n.length>0;return!l&&!u?o.jsx("div",{className:"text-xs text-text-muted italic p-2",children:"No changes"}):o.jsxs("div",{className:"rounded overflow-hidden border border-border",children:[l&&o.jsx(Pu,{type:"removed",children:o.jsx(Ua,{code:t,language:a,variant:"block",showLineNumbers:!0})}),u&&o.jsx(Pu,{type:"added",children:o.jsx(Ua,{code:n,language:a,variant:"block",showLineNumbers:!0})})]})}),N6=L.memo(function({content:t,filePath:n}){const s=L.useMemo(()=>gd(n),[n]);return o.jsx("div",{className:"rounded overflow-hidden border border-border max-h-[45vh] overflow-y-auto",children:o.jsx(Pu,{type:"added",children:o.jsx(Ua,{code:t,language:s,variant:"block",showLineNumbers:!0})})})}),T6=L.memo(function({regions:t,filePath:n}){const s=L.useMemo(()=>gd(n),[n]);return t.length===0?o.jsx("div",{className:"text-xs text-text-muted italic p-2",children:"No changes"}):o.jsx("div",{className:"space-y-2",children:t.map((a,l)=>o.jsx(L6,{region:a,language:s},l))})});function A6(e){const t=[];function n(s,a,l){const u=t[t.length-1];u&&u.type===s&&u.startLine+u.lines.length===a?u.lines.push(l):t.push({type:s,startLine:a,lines:[l]})}for(const s of e.beforeContext)n("context",s.lineNumber,s.content);for(const s of e.edits){const a=s.oldContent.split(`
278
278
  `);for(let u=0;u<a.length;u++)n("removed",s.startLine+u,a[u]);const l=s.newContent.split(`
279
279
  `);for(let u=0;u<l.length;u++)n("added",s.startLine+u,l[u])}for(const s of e.afterContext)n("context",s.lineNumber,s.content);return t}const L6=L.memo(function({region:t,language:n}){const s=A6(t);return o.jsx("div",{className:"rounded overflow-hidden border border-border font-mono text-sm",children:s.map((a,l)=>o.jsx(D6,{section:a,language:n},l))})}),D6=L.memo(function({section:t,language:n}){const s=t.lines.join(`
280
280
  `);return t.type==="context"?o.jsx("div",{children:o.jsx("div",{className:"min-w-0 py-3",children:o.jsx("div",{className:"shiki-compact shiki-transparent-bg",children:o.jsx(Ua,{code:s,language:n,variant:"block",showLineNumbers:!0,startLine:t.startLine})})})}):o.jsx(Pu,{type:t.type,children:o.jsx(Ua,{code:s,language:n,variant:"block",showLineNumbers:!0,startLine:t.startLine})})});function U0(e){return e.split(`
281
281
  `).filter(t=>!t.startsWith(`
282
- [`)&&!t.startsWith("[")).map(t=>t.replace(/^\d+: /,"")).join(`
282
+ [`)&&!t.startsWith("[")).map(t=>t.replace(/^\d+\|/,"")).join(`
283
283
  `)}const R6=L.memo(function({result:t,metadata:n,filePath:s,heightExpanded:a=!1}){const[l,u]=L.useState(!1),c=L.useMemo(()=>gd(s),[s]),d=n==null?void 0:n.mimeType,f=n==null?void 0:n.base64Data;if(d!=null&&d.startsWith("image/")&&f){const C=`data:${d};base64,${f}`;return o.jsxs(o.Fragment,{children:[o.jsx("div",{className:`rounded overflow-hidden border border-border ${a?"":"max-h-[45vh]"} flex items-center justify-center cursor-pointer hover:border-accent-primary transition-colors`,onClick:()=>u(!0),children:o.jsx("img",{src:C,alt:s,className:"max-w-full max-h-[45vh] object-contain"})}),o.jsx(RC,{src:C,alt:s,isOpen:l,onClose:()=>u(!1)})]})}if(!t)return o.jsx("div",{className:"text-xs text-text-muted italic p-2",children:"Empty file"});const p=t;if(c==="markdown"){const C=U0(p);return o.jsx("div",{className:`rounded overflow-hidden border border-border ${a?"":"max-h-[45vh]"} overflow-y-auto p-2`,children:o.jsx(xs,{content:C})})}const m=U0(p),x=p.split(`
284
- `)[0],y=x==null?void 0:x.match(/^(\d+): /),w=y?parseInt(y[1],10):1;return o.jsx("div",{className:`rounded overflow-hidden border border-border ${a?"":"max-h-[45vh]"} overflow-y-auto`,children:o.jsx(Ua,{code:m,language:c,variant:"block",showLineNumbers:!0,startLine:w})})}),O6={error:{icon:"✗",color:"text-accent-error",bg:"bg-red-500/10",border:"border-red-500/30"},warning:{icon:"⚠",color:"text-accent-warning",bg:"bg-yellow-500/10",border:"border-yellow-500/30"},info:{icon:"ℹ",color:"text-accent-info",bg:"bg-blue-500/10",border:"border-blue-500/30"},hint:{icon:"💡",color:"text-text-muted",bg:"bg-gray-500/10",border:"border-gray-500/30"}},F0=L.memo(function({diagnostics:t}){if(t.length===0)return null;const n=t.filter(l=>l.severity==="error"),s=t.filter(l=>l.severity==="warning"),a=t.filter(l=>l.severity==="info"||l.severity==="hint");return o.jsxs("div",{className:"rounded border border-border overflow-hidden mt-2",children:[o.jsxs("div",{className:"flex items-center gap-3 px-2 py-1.5 bg-bg-tertiary border-b border-border",children:[o.jsx("span",{className:"text-xs font-medium text-text-secondary",children:"LSP Diagnostics"}),n.length>0&&o.jsxs("span",{className:"text-xs text-accent-error font-medium",children:[n.length," error",n.length!==1?"s":""]}),s.length>0&&o.jsxs("span",{className:"text-xs text-accent-warning font-medium",children:[s.length," warning",s.length!==1?"s":""]}),a.length>0&&o.jsxs("span",{className:"text-xs text-text-muted",children:[a.length," info"]})]}),o.jsx("div",{className:"max-h-48 overflow-y-auto",children:t.map((l,u)=>{const c=O6[l.severity];return o.jsxs("div",{className:`flex items-start gap-2 px-2 py-1.5 ${c.bg} border-b border-border last:border-b-0`,children:[o.jsx("span",{className:`${c.color} text-xs flex-shrink-0 w-4 text-center`,children:c.icon}),o.jsxs("div",{className:"flex-1 min-w-0",children:[o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsxs("span",{className:"text-[10px] text-text-muted font-mono",children:["Ln ",l.range.start.line+1,":",l.range.start.character+1]}),l.code&&o.jsxs("span",{className:"text-[10px] text-text-muted font-mono",children:["[",l.code,"]"]})]}),o.jsx("div",{className:"text-xs text-text-primary break-words",children:l.message})]})]},u)})})]})}),M6=L.memo(function({command:t,timeout:n,startedAt:s,streamingOutput:a,status:l,result:u,error:c,durationMs:d}){const f=L.useRef(null),[p,m]=L.useState(0);L.useEffect(()=>{f.current&&l==="pending"&&(f.current.scrollTop=f.current.scrollHeight)},[a,l]),L.useEffect(()=>{if(l!=="pending"||!s)return;const C=setInterval(()=>{m(Date.now()-s)},100);return()=>clearInterval(C)},[l,s]);const x=n/1e3,y=l==="pending"?p/1e3:(d??0)/1e3,w=l==="pending"?(a==null?void 0:a.map(C=>C.content).join(""))??"":u??"";return o.jsxs("div",{className:"space-y-2",children:[o.jsxs("div",{className:"flex items-center justify-between gap-4",children:[o.jsxs("div",{className:"flex items-center gap-2 text-xs flex-1 min-w-0",children:[o.jsx("span",{className:"text-text-muted flex-shrink-0",children:"$"}),o.jsx("code",{className:"text-text-primary break-all",children:t})]}),o.jsxs("div",{className:"flex items-center gap-2 text-xs text-text-muted flex-shrink-0",children:[l==="pending"&&o.jsx("span",{className:"animate-pulse text-accent-warning",children:"running"}),l==="interrupted"&&o.jsx("span",{className:"text-red-400",children:"interrupted"}),o.jsxs("span",{className:l==="pending"?"text-text-secondary":"text-text-muted",children:[y.toFixed(1),"s / ",x,"s"]})]})]}),l==="pending"&&o.jsx("div",{className:"h-1 bg-bg-tertiary rounded overflow-hidden",children:o.jsx("div",{className:"h-full bg-accent-warning transition-all duration-100",style:{width:`${Math.min(100,p/n*100)}%`}})}),(w||l==="pending")&&o.jsx("pre",{ref:f,className:`text-xs bg-bg-primary p-2 rounded max-h-64 overflow-y-auto ${l==="pending"?"border border-accent-warning/30":""}`,style:{overflowX:"hidden",whiteSpace:"normal"},children:l==="pending"&&a?a.map((C,v)=>o.jsx("span",{className:C.stream==="stderr"?"text-accent-warning":"",children:bu(C.content)},v)):bu(w)}),l==="error"&&c&&o.jsx("div",{className:"text-xs text-accent-error bg-accent-error/10 p-2 rounded",children:c}),l!=="pending"&&d!==void 0&&o.jsxs("div",{className:"text-[10px] text-text-muted",children:["Completed in ",(d/1e3).toFixed(2),"s"]})]})});function I6(e){switch(e){case"sensitive_file":return{title:"Sensitive File Access",description:"Accessing files that may contain secrets"};case"both":return{title:"Sensitive File Access",description:"Accessing sensitive files outside project"};case"dangerous_command":return{title:"Dangerous Command",description:"Running potentially dangerous command"};case"git_no_verify":return{title:"Git --no-verify",description:"Bypassing git hooks/pre-commit checks"};case"outside_workdir":default:return{title:"Path Access Request",description:"Accessing paths outside project directory"}}}function P6({confirmation:e}){const t=Le(m=>m.confirmPath),n=Le(m=>m.currentSession),s=Le(m=>m.switchDangerLevel),{title:a,description:l}=I6(e.reason),u=e.reason==="sensitive_file"||e.reason==="both",c=u?"border-red-500/50":"border-amber-500/50",d=u?"bg-red-500/10":"bg-amber-500/10",f=e.reason==="git_no_verify",p=()=>{n!=null&&n.id&&s("dangerous"),t(e.callId,!0,!1)};return o.jsxs("div",{className:`border ${c} ${d} rounded p-3 my-2`,children:[o.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[o.jsx(Lm,{}),o.jsxs("div",{className:"flex-1 min-w-0",children:[o.jsx("div",{className:`text-sm font-medium ${u?"text-red-400":"text-amber-400"}`,children:a}),o.jsx("div",{className:"text-xs text-text-muted",children:l})]})]}),o.jsxs("div",{className:"text-xs text-text-muted mb-2",children:[o.jsx("span",{className:"font-medium",children:e.tool})," wants to access:"]}),o.jsx("div",{className:"bg-bg-primary rounded p-2 mb-3 max-h-24 overflow-y-auto",children:o.jsx("ul",{className:"space-y-0.5",children:e.paths.map((m,x)=>o.jsx("li",{className:`text-xs font-mono ${u?"text-red-300":"text-amber-300"} break-all`,children:m},x))})}),o.jsxs("div",{className:"flex gap-2",children:[o.jsx("button",{onClick:()=>t(e.callId,!1),className:"flex-1 px-3 py-1.5 text-xs font-medium rounded bg-bg-tertiary hover:bg-bg-tertiary/80 text-text-secondary border border-border transition-colors",children:"Deny"}),o.jsx("button",{onClick:()=>t(e.callId,!0,!1),className:"flex-1 px-3 py-1.5 text-xs font-medium rounded bg-accent-primary hover:bg-accent-primary/80 text-text-primary transition-colors",children:"Allow"}),o.jsx("button",{onClick:p,className:`flex-1 px-3 py-1.5 text-xs font-medium rounded transition-colors ${f?"hidden":"bg-red-600 hover:bg-red-700 text-white"}`,title:"Enable dangerous mode and allow this request",children:"Allow Everything"})]})]})}function B6(e,t){if(e==="read_file"){const s=String(t.path??""),a=t.offset,l=t.limit,u=[];return a!==void 0&&a!==1&&u.push(`offset=${a}`),l!==void 0&&u.push(`limit=${l}`),u.length>0?`${s} [${u.join(", ")}]`:s}if(e==="write_file"||e==="edit_file")return String(t.path??"");if(e==="run_command"||e==="bash")return String(t.command??"");if(e==="return_value"){const s=String(t.content??"");return s.length>60?s.slice(0,60)+"...":s}const n=JSON.stringify(t);return n.length>50?n.slice(0,50)+"...":n}function V0(e,t,n){return B6(e,t)}function z6(e){return JSON.stringify(e,null,2)}const $6={pending:{icon:"●",color:"text-accent-warning",animate:!0},success:{icon:"✓",color:"text-accent-success",animate:!1},error:{icon:"✗",color:"text-accent-error",animate:!1},interrupted:{icon:"✗",color:"text-red-400",animate:!1}},H6=L.memo(function({tool:t,args:n,status:s,variant:a="compact",forceCompact:l,result:u,error:c,durationMs:d,diagnostics:f,editContext:p,startedAt:m,streamingOutput:x,metadata:y,callId:w}){var G;const C=t==="edit_file"||t==="write_file",v=t==="run_command",S=t==="read_file",_=l?!1:C||v||t==="return_value",[E,N]=L.useState(_),T=$6[s],D=Kt(V=>V.settings[ze.DISPLAY_SHOW_OPEN_IN_EDITOR])==="true",A=t==="edit_file"?(G=p==null?void 0:p.regions[0])==null?void 0:G.startLine:t==="read_file"?(()=>{const V=u==null?void 0:u.split(`
284
+ `)[0],y=x==null?void 0:x.match(/^(\d+)\|/),w=y?parseInt(y[1],10):1;return o.jsx("div",{className:`rounded overflow-hidden border border-border ${a?"":"max-h-[45vh]"} overflow-y-auto`,children:o.jsx(Ua,{code:m,language:c,variant:"block",showLineNumbers:!0,startLine:w})})}),O6={error:{icon:"✗",color:"text-accent-error",bg:"bg-red-500/10",border:"border-red-500/30"},warning:{icon:"⚠",color:"text-accent-warning",bg:"bg-yellow-500/10",border:"border-yellow-500/30"},info:{icon:"ℹ",color:"text-accent-info",bg:"bg-blue-500/10",border:"border-blue-500/30"},hint:{icon:"💡",color:"text-text-muted",bg:"bg-gray-500/10",border:"border-gray-500/30"}},F0=L.memo(function({diagnostics:t}){if(t.length===0)return null;const n=t.filter(l=>l.severity==="error"),s=t.filter(l=>l.severity==="warning"),a=t.filter(l=>l.severity==="info"||l.severity==="hint");return o.jsxs("div",{className:"rounded border border-border overflow-hidden mt-2",children:[o.jsxs("div",{className:"flex items-center gap-3 px-2 py-1.5 bg-bg-tertiary border-b border-border",children:[o.jsx("span",{className:"text-xs font-medium text-text-secondary",children:"LSP Diagnostics"}),n.length>0&&o.jsxs("span",{className:"text-xs text-accent-error font-medium",children:[n.length," error",n.length!==1?"s":""]}),s.length>0&&o.jsxs("span",{className:"text-xs text-accent-warning font-medium",children:[s.length," warning",s.length!==1?"s":""]}),a.length>0&&o.jsxs("span",{className:"text-xs text-text-muted",children:[a.length," info"]})]}),o.jsx("div",{className:"max-h-48 overflow-y-auto",children:t.map((l,u)=>{const c=O6[l.severity];return o.jsxs("div",{className:`flex items-start gap-2 px-2 py-1.5 ${c.bg} border-b border-border last:border-b-0`,children:[o.jsx("span",{className:`${c.color} text-xs flex-shrink-0 w-4 text-center`,children:c.icon}),o.jsxs("div",{className:"flex-1 min-w-0",children:[o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsxs("span",{className:"text-[10px] text-text-muted font-mono",children:["Ln ",l.range.start.line+1,":",l.range.start.character+1]}),l.code&&o.jsxs("span",{className:"text-[10px] text-text-muted font-mono",children:["[",l.code,"]"]})]}),o.jsx("div",{className:"text-xs text-text-primary break-words",children:l.message})]})]},u)})})]})}),M6=L.memo(function({command:t,timeout:n,startedAt:s,streamingOutput:a,status:l,result:u,error:c,durationMs:d}){const f=L.useRef(null),[p,m]=L.useState(0);L.useEffect(()=>{f.current&&l==="pending"&&(f.current.scrollTop=f.current.scrollHeight)},[a,l]),L.useEffect(()=>{if(l!=="pending"||!s)return;const C=setInterval(()=>{m(Date.now()-s)},100);return()=>clearInterval(C)},[l,s]);const x=n/1e3,y=l==="pending"?p/1e3:(d??0)/1e3,w=l==="pending"?(a==null?void 0:a.map(C=>C.content).join(""))??"":u??"";return o.jsxs("div",{className:"space-y-2",children:[o.jsxs("div",{className:"flex items-center justify-between gap-4",children:[o.jsxs("div",{className:"flex items-center gap-2 text-xs flex-1 min-w-0",children:[o.jsx("span",{className:"text-text-muted flex-shrink-0",children:"$"}),o.jsx("code",{className:"text-text-primary break-all",children:t})]}),o.jsxs("div",{className:"flex items-center gap-2 text-xs text-text-muted flex-shrink-0",children:[l==="pending"&&o.jsx("span",{className:"animate-pulse text-accent-warning",children:"running"}),l==="interrupted"&&o.jsx("span",{className:"text-red-400",children:"interrupted"}),o.jsxs("span",{className:l==="pending"?"text-text-secondary":"text-text-muted",children:[y.toFixed(1),"s / ",x,"s"]})]})]}),l==="pending"&&o.jsx("div",{className:"h-1 bg-bg-tertiary rounded overflow-hidden",children:o.jsx("div",{className:"h-full bg-accent-warning transition-all duration-100",style:{width:`${Math.min(100,p/n*100)}%`}})}),(w||l==="pending")&&o.jsx("pre",{ref:f,className:`text-xs bg-bg-primary p-2 rounded max-h-64 overflow-y-auto ${l==="pending"?"border border-accent-warning/30":""}`,style:{overflowX:"hidden",whiteSpace:"normal"},children:l==="pending"&&a?a.map((C,v)=>o.jsx("span",{className:C.stream==="stderr"?"text-accent-warning":"",children:bu(C.content)},v)):bu(w)}),l==="error"&&c&&o.jsx("div",{className:"text-xs text-accent-error bg-accent-error/10 p-2 rounded",children:c}),l!=="pending"&&d!==void 0&&o.jsxs("div",{className:"text-[10px] text-text-muted",children:["Completed in ",(d/1e3).toFixed(2),"s"]})]})});function I6(e){switch(e){case"sensitive_file":return{title:"Sensitive File Access",description:"Accessing files that may contain secrets"};case"both":return{title:"Sensitive File Access",description:"Accessing sensitive files outside project"};case"dangerous_command":return{title:"Dangerous Command",description:"Running potentially dangerous command"};case"git_no_verify":return{title:"Git --no-verify",description:"Bypassing git hooks/pre-commit checks"};case"outside_workdir":default:return{title:"Path Access Request",description:"Accessing paths outside project directory"}}}function P6({confirmation:e}){const t=Le(m=>m.confirmPath),n=Le(m=>m.currentSession),s=Le(m=>m.switchDangerLevel),{title:a,description:l}=I6(e.reason),u=e.reason==="sensitive_file"||e.reason==="both",c=u?"border-red-500/50":"border-amber-500/50",d=u?"bg-red-500/10":"bg-amber-500/10",f=e.reason==="git_no_verify",p=()=>{n!=null&&n.id&&s("dangerous"),t(e.callId,!0,!1)};return o.jsxs("div",{className:`border ${c} ${d} rounded p-3 my-2`,children:[o.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[o.jsx(Lm,{}),o.jsxs("div",{className:"flex-1 min-w-0",children:[o.jsx("div",{className:`text-sm font-medium ${u?"text-red-400":"text-amber-400"}`,children:a}),o.jsx("div",{className:"text-xs text-text-muted",children:l})]})]}),o.jsxs("div",{className:"text-xs text-text-muted mb-2",children:[o.jsx("span",{className:"font-medium",children:e.tool})," wants to access:"]}),o.jsx("div",{className:"bg-bg-primary rounded p-2 mb-3 max-h-24 overflow-y-auto",children:o.jsx("ul",{className:"space-y-0.5",children:e.paths.map((m,x)=>o.jsx("li",{className:`text-xs font-mono ${u?"text-red-300":"text-amber-300"} break-all`,children:m},x))})}),o.jsxs("div",{className:"flex gap-2",children:[o.jsx("button",{onClick:()=>t(e.callId,!1),className:"flex-1 px-3 py-1.5 text-xs font-medium rounded bg-bg-tertiary hover:bg-bg-tertiary/80 text-text-secondary border border-border transition-colors",children:"Deny"}),o.jsx("button",{onClick:()=>t(e.callId,!0,!1),className:"flex-1 px-3 py-1.5 text-xs font-medium rounded bg-accent-primary hover:bg-accent-primary/80 text-text-primary transition-colors",children:"Allow"}),o.jsx("button",{onClick:p,className:`flex-1 px-3 py-1.5 text-xs font-medium rounded transition-colors ${f?"hidden":"bg-red-600 hover:bg-red-700 text-white"}`,title:"Enable dangerous mode and allow this request",children:"Allow Everything"})]})]})}function B6(e,t){if(e==="read_file"){const s=String(t.path??""),a=t.offset,l=t.limit,u=[];return a!==void 0&&a!==1&&u.push(`offset=${a}`),l!==void 0&&u.push(`limit=${l}`),u.length>0?`${s} [${u.join(", ")}]`:s}if(e==="write_file"||e==="edit_file")return String(t.path??"");if(e==="run_command"||e==="bash")return String(t.command??"");if(e==="return_value"){const s=String(t.content??"");return s.length>60?s.slice(0,60)+"...":s}const n=JSON.stringify(t);return n.length>50?n.slice(0,50)+"...":n}function V0(e,t,n){return B6(e,t)}function z6(e){return JSON.stringify(e,null,2)}const $6={pending:{icon:"●",color:"text-accent-warning",animate:!0},success:{icon:"✓",color:"text-accent-success",animate:!1},error:{icon:"✗",color:"text-accent-error",animate:!1},interrupted:{icon:"✗",color:"text-red-400",animate:!1}},H6=L.memo(function({tool:t,args:n,status:s,variant:a="compact",forceCompact:l,result:u,error:c,durationMs:d,diagnostics:f,editContext:p,startedAt:m,streamingOutput:x,metadata:y,callId:w}){var G;const C=t==="edit_file"||t==="write_file",v=t==="run_command",S=t==="read_file",_=l?!1:C||v||t==="return_value",[E,N]=L.useState(_),T=$6[s],D=Kt(V=>V.settings[ze.DISPLAY_SHOW_OPEN_IN_EDITOR])==="true",A=t==="edit_file"?(G=p==null?void 0:p.regions[0])==null?void 0:G.startLine:t==="read_file"?(()=>{const V=u==null?void 0:u.split(`
285
285
  `)[0],R=V==null?void 0:V.match(/^(\d+): /);return R?parseInt(R[1],10):void 0})():void 0,O=Le(V=>V.pendingPathConfirmations),M=s==="pending"&&w?O.find(V=>V.callId===w)??null:null;return a==="compact"?o.jsxs("div",{className:"flex items-center gap-1.5 text-xs bg-secondary rounded px-2 py-1.5",children:[o.jsx(DC,{tool:t}),o.jsx("span",{className:"text-accent-primary font-medium",children:t}),o.jsx("span",{className:"text-text-muted truncate flex-1",children:V0(t,n)}),o.jsx("span",{className:`${T.color} ${T.animate?"animate-pulse":""}`,children:s==="pending"?"...":"done"})]}):o.jsxs("div",{className:"border border-border rounded overflow-hidden my-1 min-w-0",children:[o.jsxs("button",{className:"w-full flex items-center gap-1.5 p-2 bg-secondary hover:bg-secondary/80 text-left",onClick:()=>N(!E),children:[o.jsx("span",{className:`${T.color} ${T.animate?"animate-pulse":""}`,children:T.icon}),o.jsx("span",{className:"font-mono text-accent-primary text-sm",children:t}),o.jsx("span",{className:"text-text-muted text-xs flex-1 truncate",children:V0(t,n)}),o.jsx("span",{className:"text-text-muted text-xs",children:E?"▼":"▶"})]}),M&&o.jsx(P6,{confirmation:M}),(E||S)&&o.jsxs("div",{className:"p-2 bg-primary border-t border-border space-y-2 min-w-0",children:[t==="run_command"&&o.jsx(M6,{command:String(n.command??""),timeout:n.timeout??12e4,startedAt:m,streamingOutput:x,status:s,result:u,error:c,durationMs:d}),t==="edit_file"&&s==="success"&&o.jsxs(o.Fragment,{children:[p&&p.regions.length>0?o.jsx(T6,{regions:p.regions,filePath:String(n.path??"")}):o.jsx(j6,{oldString:String(n.old_string??""),newString:String(n.new_string??""),filePath:String(n.path??"")}),f&&f.length>0&&o.jsx(F0,{diagnostics:f})]}),t==="write_file"&&s==="success"&&o.jsxs(o.Fragment,{children:[o.jsx(N6,{content:String(n.content??""),filePath:String(n.path??"")}),f&&f.length>0&&o.jsx(F0,{diagnostics:f})]}),t==="read_file"&&s==="success"&&o.jsx(R6,{result:u,metadata:y,filePath:String(n.path??""),heightExpanded:E}),t==="return_value"&&(()=>{const V=(x==null?void 0:x.map(F=>F.content).join(""))??"",R=s==="pending"&&V?V:String(n.content??"");return o.jsxs("div",{children:[o.jsx("div",{className:"text-[10px] text-accent-primary font-medium mb-1 uppercase tracking-wide",children:"Sub-Agent Summary"}),o.jsx("div",{className:"text-xs prose prose-invert prose-sm max-w-none",children:o.jsx(xs,{content:R})})]})})(),t!=="edit_file"&&t!=="write_file"&&t!=="run_command"&&t!=="read_file"&&t!=="return_value"&&o.jsxs(o.Fragment,{children:[o.jsxs("div",{children:[o.jsx("div",{className:"text-[10px] text-text-muted mb-0.5",children:"Arguments:"}),o.jsx("pre",{className:"text-xs bg-bg-primary p-1.5 rounded overflow-x-auto",children:z6(n)})]}),s==="success"&&u!==void 0&&o.jsxs("div",{children:[o.jsxs("div",{className:"text-[10px] text-text-muted mb-0.5",children:["Result",d!==void 0&&` (${d}ms)`,":"]}),o.jsx("pre",{className:"text-xs bg-bg-primary p-1.5 rounded overflow-x-auto max-h-32",children:u||"No output"})]})]}),s==="success"&&(t==="edit_file"||t==="write_file"||t==="read_file")&&d!==void 0&&o.jsxs("div",{className:"text-[10px] text-text-muted flex items-center gap-2",children:[o.jsxs("span",{children:["Completed in ",d,"ms"]}),D&&(t==="read_file"||t==="write_file"||t==="edit_file")&&String((y==null?void 0:y.path)??n.path??"")&&o.jsx("a",{href:`vscode://file/${String((y==null?void 0:y.path)??n.path)}${A?`:${A}`:""}`,className:"text-accent-primary hover:underline ml-auto",children:"Open in VSCode"})]}),s==="error"&&c&&t!=="run_command"&&o.jsxs("div",{children:[o.jsx("div",{className:"text-[10px] text-accent-error mb-0.5",children:"Error:"}),o.jsx("pre",{className:"text-xs bg-bg-primary p-1.5 rounded text-accent-error",children:c})]})]})]})}),U6={read_file:"Reading file",write_file:"Writing file",edit_file:"Editing file",run_command:"Running command",glob:"Searching files",grep:"Searching content",ask_user:"Asking user",criterion:"Managing criterion",session_metadata:"Managing",todo_write:"Updating tasks"},F6={criteria:"criteria",review_findings:"review findings",todos:"tasks"};function V6(e,t){const n=U6[e];if(!n)return`Preparing ${e}`;if(e==="session_metadata"&&t)try{const a=JSON.parse(t).key;if(a){const l=F6[a]??a;return`${n} ${l}`}}catch{}return n}function G6(e){try{const t=e.replace(/\s*\}\s*$/,""),n=JSON.parse(t);if(typeof n.command=="string")return n.command}catch{const t=e.match(/"command"\s*:\s*"([^"]*)/);if(t&&t[1])return t[1]}return null}const W6=L.memo(function({name:t,arguments:n}){let a=V6(t,n)+"...";if(t==="run_command"&&n){const l=G6(n);l&&(a=l)}return o.jsx("div",{className:"border border-border rounded overflow-hidden my-1 min-w-0 animate-pulse",children:o.jsxs("div",{className:"flex items-center gap-1.5 p-2 bg-bg-tertiary",children:[o.jsx("span",{className:"text-accent-warning animate-pulse",children:"..."}),o.jsx(DC,{tool:t}),o.jsx("span",{className:"font-mono text-accent-primary text-sm",children:t}),t==="run_command"&&n?o.jsx("code",{className:"text-text-muted text-xs flex-1 truncate",children:a}):o.jsx("span",{className:"text-text-muted text-xs flex-1",children:a})]})})}),q6={pending:{icon:"○",color:"text-text-muted"},in_progress:{icon:"●",color:"text-accent-warning",animate:!0},completed:{icon:"✓",color:"text-accent-success"}},K6=L.memo(function({todos:t}){return Array.isArray(t)?t.length===0?o.jsx("div",{className:"text-xs text-text-muted italic my-1",children:"No tasks"}):o.jsxs("div",{className:"my-1 rounded border border-border bg-bg-tertiary overflow-hidden",children:[o.jsx("div",{className:"px-2 py-1.5 border-b border-border bg-bg-secondary",children:o.jsx("span",{className:"text-xs font-medium text-text-muted",children:"Tasks"})}),o.jsx("div",{children:t.map((n,s)=>{const a=q6[n.status];return o.jsxs("div",{className:`flex items-start gap-2 px-2 py-1.5 ${s>0?"border-t border-border":""}`,children:[o.jsx("span",{className:`${(a==null?void 0:a.color)??"text-text-muted"} ${a!=null&&a.animate?"animate-pulse":""} text-sm leading-tight`,children:(a==null?void 0:a.icon)??"○"}),o.jsx("span",{className:`text-sm leading-tight ${n.status==="completed"?"text-text-muted":"text-text-primary"}`,children:n.content})]},s)})})]}):o.jsx("div",{className:"text-xs text-accent-warning italic my-1",children:"⚠️ Invalid todos data"})});function Y6({toolCall:e}){var E;const t=Le(N=>N.pendingQuestions),n=Le(N=>N.answerQuestion),[s,a]=L.useState(""),l=L.useRef(null),u=L.useRef(null),c=t.find(N=>N.callId===e.id),d=e.arguments.question??(c==null?void 0:c.question)??"",f=e.arguments.type??(c==null?void 0:c.type)??"text",p=e.arguments.options??(c==null?void 0:c.options)??void 0,m=e.result!==void 0,x=c!==void 0&&!m,y=((E=e.result)==null?void 0:E.output)??"",w=y==="[user skipped]";L.useEffect(()=>{x&&l.current&&l.current.focus()},[x]),L.useEffect(()=>{x&&u.current&&u.current.scrollIntoView({behavior:"smooth",block:"nearest"})},[x]);const C=L.useCallback(()=>{c&&n(c.callId,s)},[c,s,n]),v=L.useCallback(()=>{c&&n(c.callId,"",!0)},[c,n]),S=L.useCallback(N=>{N.key==="Enter"&&!N.shiftKey&&(N.preventDefault(),C()),N.key==="Escape"&&!N.shiftKey&&(N.preventDefault(),v())},[C,v]),b=L.useCallback(N=>{c&&n(c.callId,N)},[c,n]),_="px-3 py-1.5 text-xs font-medium rounded transition-colors";return o.jsxs("div",{ref:u,className:"my-1",children:[o.jsx("div",{className:"text-sm text-text-primary",children:d}),x&&o.jsx("div",{className:"mt-2 border border-border rounded overflow-hidden",children:o.jsx("div",{className:"p-3 bg-primary space-y-2",children:f==="confirm"?o.jsxs("div",{className:"flex gap-2",children:[o.jsx("button",{onClick:()=>b("yes"),className:`${_} flex-1 bg-accent-success/20 hover:bg-accent-success/30 text-accent-success border border-accent-success/30`,children:"Yes"}),o.jsx("button",{onClick:()=>b("no"),className:`${_} flex-1 bg-accent-error/20 hover:bg-accent-error/30 text-accent-error border border-accent-error/30`,children:"No"}),o.jsx("button",{onClick:v,className:`${_} bg-bg-tertiary hover:bg-bg-tertiary/80 text-text-secondary border border-border`,children:"Skip"})]}):f==="choice"&&p&&p.length>0?o.jsxs(o.Fragment,{children:[o.jsx("div",{className:"flex flex-col gap-1.5",children:p.map(N=>o.jsx("button",{onClick:()=>b(N),className:`${_} text-left w-full bg-bg-tertiary hover:bg-accent-primary/20 text-text-primary border border-border hover:border-accent-primary/50`,children:N},N))}),o.jsxs("div",{className:"flex gap-2",children:[o.jsx("textarea",{ref:l,value:s,onChange:N=>a(N.target.value),onKeyDown:S,placeholder:"Or type your own answer... (Enter to submit)",className:"flex-1 min-h-[36px] max-h-[80px] px-2 py-1.5 bg-bg-tertiary border border-border rounded text-xs text-text-primary placeholder:text-text-muted focus:outline-none focus:ring-2 focus:ring-accent-primary/50 resize-y",rows:1}),o.jsx("button",{onClick:C,disabled:!s.trim(),className:`${_} bg-accent-primary/25 hover:bg-accent-primary/40 text-text-primary disabled:opacity-50 disabled:cursor-not-allowed`,children:"Send"}),o.jsx("button",{onClick:v,className:`${_} bg-bg-tertiary hover:bg-bg-tertiary/80 text-text-secondary border border-border`,children:"Skip"})]})]}):o.jsxs(o.Fragment,{children:[o.jsx("textarea",{ref:l,value:s,onChange:N=>a(N.target.value),onKeyDown:S,placeholder:"Type your answer here... (Enter to submit, Shift+Enter for new line)",className:"w-full min-h-[80px] px-3 py-2 bg-bg-tertiary border border-border rounded text-sm text-text-primary placeholder:text-text-muted focus:outline-none focus:ring-2 focus:ring-accent-primary/50 resize-y",autoFocus:!0}),o.jsxs("div",{className:"flex justify-end gap-2",children:[o.jsx("button",{onClick:v,className:`${_} bg-bg-tertiary hover:bg-bg-tertiary/80 text-text-secondary border border-border`,children:"Skip"}),o.jsx("button",{onClick:C,disabled:!s.trim(),className:`${_} bg-accent-primary/25 hover:bg-accent-primary/40 text-text-primary disabled:opacity-50 disabled:cursor-not-allowed`,children:"Send Answer"})]})]})})}),m&&o.jsx("div",{className:"mt-1 flex items-center gap-2",children:o.jsx("span",{className:`text-xs ${w?"text-amber-400":"text-accent-success"}`,children:w?"Skipped":`Answered: ${y}`})})]})}const G0={add:{icon:"○",color:"text-text-muted"},update:{icon:"○",color:"text-text-muted"},remove:{icon:"○",color:"text-text-muted"},complete:{icon:"◉",color:"text-purple-400"},pass:{icon:"✓",color:"text-accent-success"},fail:{icon:"✗",color:"text-accent-error"},get:{icon:"○",color:"text-text-muted"},list:{icon:"○",color:"text-text-muted"},schema:{icon:"○",color:"text-text-muted"}},X6=L.memo(function({toolCalls:t,criteria:n}){if(t.length===0)return null;const s=new Map((n==null?void 0:n.map(d=>[d.id,d]))??[]),a=t.find(d=>{var f,p;return d.arguments.action==="get"&&((f=d.result)==null?void 0:f.success)&&((p=d.result)==null?void 0:p.output)}),l=t.some(d=>d.name==="session_metadata"),u={criteria:"Acceptance Criteria",review_findings:"Review Findings",todos:"Tasks"},c=(()=>{if(!l)return"Acceptance Criteria";const d=new Set(t.map(f=>f.arguments.key).filter(Boolean));if(d.size===1){const f=d.values().next().value;return f?u[f]??f:"Session Data"}return"Session Data"})();return o.jsxs("div",{className:"my-1 rounded border border-border bg-secondary overflow-hidden",children:[o.jsx("div",{className:"px-2 py-1.5 border-b border-border bg-secondary",children:o.jsx("span",{className:"text-xs font-medium text-text-muted",children:c})}),o.jsx("div",{className:"bg-primary",children:a?(()=>{const d=a.result.output;if(d==="No criteria defined yet.")return o.jsxs("div",{className:"flex items-start gap-2 px-2 py-1.5",children:[o.jsx("span",{className:"text-text-muted text-sm leading-tight flex-shrink-0",children:"○"}),o.jsx("div",{className:"flex-1 min-w-0 text-text-muted text-sm",children:"No criteria defined yet."})]});try{return JSON.parse(d).map((p,m)=>o.jsxs("div",{className:`flex items-start gap-2 px-2 py-1.5 ${m>0?"border-t border-border":""}`,children:[o.jsx("span",{className:"text-text-muted text-sm leading-tight flex-shrink-0",children:"○"}),o.jsx("div",{className:"flex-1 min-w-0",children:o.jsx(xs,{content:`[${p.id}] ${p.description}`})})]},p.id??m))}catch{return t.map((f,p)=>o.jsx(W0,{tc:f,index:p,criteriaMap:s},f.id??p))}})():t.map((d,f)=>o.jsx(W0,{tc:d,index:f,criteriaMap:s},d.id??f))})]})});function W0({tc:e,index:t,criteriaMap:n}){const s=e.arguments.action,a=e.arguments,l=e.name==="session_metadata",u=s==="remove",c=a.id,d=a.description,f=c?n.get(c):void 0,p=d??(f==null?void 0:f.description)??(u&&c?`[${c}]`:"Criterion updated"),m=a.reason,x=s==="fail";return o.jsxs("div",{className:`flex items-start gap-2 px-2 py-1.5 ${t>0?"border-t border-border":""}`,children:[l?o.jsx(Xu,{status:a.status,className:"text-sm leading-tight flex-shrink-0"}):(()=>{const y=s&&G0[s]?G0[s]:{icon:"○",color:"text-text-muted"};return o.jsx("span",{className:`${y.color} text-sm leading-tight flex-shrink-0`,children:y.icon})})(),o.jsxs("div",{className:"flex-1 min-w-0",children:[o.jsx("div",{className:u?"line-through text-text-muted":"",children:o.jsx(xs,{content:p})}),m&&o.jsxs("div",{className:`mt-1 text-sm ${x?"text-accent-error":"text-text-muted"}`,children:[o.jsx("span",{className:"text-text-muted",children:"└ "}),'"',m,'"']})]})]})}function Q6(e){return e==="criterion"||e==="session_metadata"}function J6(e){const t=[];let n=[];const s=()=>{n.length>0&&(t.push({type:"criteria_group",toolCalls:n}),n=[])};for(const a of e)a.type==="tool_call"&&Q6(a.toolCall.name)?n.push(a.toolCall):(s(),t.push(a));return s(),t}function Z6(e,t){if(e.segments&&e.segments.length>0)return eB(e.segments,e.toolCalls??[],e.preparingToolCalls??[],e.stats,t);const n=[];if(e.thinkingContent&&n.push({type:"thinking",content:e.thinkingContent}),e.content&&n.push({type:"text",content:e.content}),e.toolCalls)for(const s of e.toolCalls)n.push({type:"tool_call",toolCall:s});if(e.preparingToolCalls)for(const s of e.preparingToolCalls)n.push({type:"preparing_tool_call",preparing:s});return t&&e.stats&&n.push({type:"stats",stats:e.stats}),n}function eB(e,t,n,s,a){const l=[],u=new Map(t.map(c=>[c.id,c]));for(const c of e)switch(c.type){case"text":l.push({type:"text",content:c.content});break;case"thinking":c.content&&c.content.trim().length>0&&l.push({type:"thinking",content:c.content});break;case"tool_call":{const d=u.get(c.toolCallId);d&&l.push({type:"tool_call",toolCall:d});break}}for(const c of n)l.push({type:"preparing_tool_call",preparing:c});return a&&s&&l.push({type:"stats",stats:s}),l}const mg=L.memo(function({message:t,showStats:n=!0,showThinking:s=!0,showVerboseToolOutput:a=!0}){const l=Le(x=>{var y,w;return(w=(y=x.currentSession)==null?void 0:y.metadataEntries)==null?void 0:w.criteria}),u=gt(x=>x.defaults),c=gt(x=>x.userItems),d=[...u,...c],f=Z6(t,n),p=s?f:f.filter(x=>x.type!=="thinking"),m=J6(p);return m.length===0?null:o.jsx("div",{className:"feed-item",children:o.jsxs("div",{className:"min-w-0",children:[m.map((x,y)=>{var w;switch(x.type){case"thinking":return o.jsx(E6,{content:x.content},y);case"text":return o.jsx("div",{className:"prose prose-sm prose-invert max-w-none",children:o.jsx(xs,{content:x.content})},y);case"preparing_tool_call":return o.jsx(W6,{name:x.preparing.name,arguments:x.preparing.arguments},`preparing-${x.preparing.index}`);case"tool_call":{const C=x.toolCall,v=C.result;if(C.name==="ask_user")return o.jsx(Y6,{toolCall:C},y);if(C.name==="todo_write"){const _=C.arguments.todos,E=Array.isArray(_)?_:[];return o.jsx(K6,{todos:E},y)}const S=(w=v==null?void 0:v.output)==null?void 0:w.includes("[interrupted by user]"),b=v?S?"interrupted":v.success?"success":"error":"pending";return o.jsx(H6,{tool:C.name,args:C.arguments,status:b,variant:"expandable",forceCompact:!a,result:v==null?void 0:v.output,error:v==null?void 0:v.error,durationMs:v==null?void 0:v.durationMs,diagnostics:v==null?void 0:v.diagnostics,editContext:v==null?void 0:v.editContext,startedAt:C.startedAt,streamingOutput:C.streamingOutput,metadata:v==null?void 0:v.metadata,callId:C.id},y)}case"criteria_group":return o.jsx(X6,{toolCalls:x.toolCalls,criteria:l},y);case"stats":{const C=x.stats;if(!C||"error"in C)return null;const v=C.model.split("/").pop()??C.model,S=hl(d,C.mode),b=E=>E>=1e3?`${(E/1e3).toFixed(1)}k`:E.toString(),_=E=>E>=1e3?`${(E/1e3).toFixed(1)}k`:E.toFixed(1);return o.jsxs("div",{className:"flex items-center justify-center gap-1.5 text-[10px] text-text-muted mt-3",children:[o.jsx("span",{className:"flex-1 h-px bg-border"}),o.jsx("span",{className:"text-text-secondary",children:v}),o.jsx("span",{className:"text-text-muted",children:"·"}),o.jsx("span",{style:{color:S},children:C.mode}),o.jsx("span",{className:"text-text-muted",children:"·"}),o.jsxs("span",{children:[C.totalTime.toFixed(1),"s"]}),C.toolTime>0&&o.jsxs(o.Fragment,{children:[o.jsx("span",{className:"text-text-muted",children:"·"}),o.jsxs("span",{children:[C.toolTime.toFixed(1),"s tools"]})]}),o.jsx("span",{className:"text-text-muted",children:"·"}),o.jsxs("span",{children:[b(C.prefillTokens)," @ ",_(C.prefillSpeed)," pp"]}),o.jsx("span",{className:"text-text-muted",children:"·"}),o.jsxs("span",{children:[b(C.generationTokens)," @ ",_(C.generationSpeed)," tg"]}),o.jsx("span",{className:"text-text-muted",children:"·"}),o.jsx("button",{type:"button",className:"text-text-muted hover:text-text-secondary transition-colors",title:"View detailed stats",onClick:()=>{const E=new CustomEvent("open-turn-stats",{detail:{stats:C}});window.dispatchEvent(E)},children:o.jsx(CS,{className:"w-3 h-3"})}),o.jsx("span",{className:"flex-1 h-px bg-border"})]},y)}}}),t.partial&&o.jsxs("div",{className:"flex items-center gap-1.5 text-[10px] text-accent-warning mt-1",children:[o.jsx(Lm,{}),o.jsx("span",{children:"Aborted"})]}),t.completeReason==="truncated"&&o.jsxs("div",{className:"flex items-center gap-1.5 text-[10px] text-amber-400/80 mt-1",children:[o.jsx(Lm,{}),o.jsx("span",{children:"Response was truncated — the model ran out of output tokens."})]})]})})});function Bu(e,t){const n=parseInt(e.slice(1,3),16),s=parseInt(e.slice(3,5),16),a=parseInt(e.slice(5,7),16);return`rgba(${n},${s},${a},${t})`}function tB(e){if(e<60)return`${e}s`;const t=Math.floor(e/60),n=Math.round(e%60);return n>0?`${t}m ${n}s`:`${t}m`}function nB(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}const rB=L.memo(function({data:t}){var u;const n=Et(c=>c.defaults),s=Et(c=>c.userItems),l=((u=[...n,...s].find(c=>c.id===t.workflowId))==null?void 0:u.color)??t.workflowColor??"#8b949e";return o.jsxs("div",{"data-testid":"task-completed-card",className:"feed-item rounded p-3 border",style:{borderColor:Bu(l,.3),backgroundColor:Bu(l,.08)},children:[o.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[o.jsx(Uj,{color:l}),o.jsx("span",{className:"text-sm font-medium",style:{color:l},children:t.workflowName??"Task Completed"})]}),o.jsxs("div",{className:"grid grid-cols-3 sm:grid-cols-5 gap-2",children:[o.jsx(el,{label:"Iterations",value:String(t.iterations)}),o.jsx(el,{label:"Total time",value:tB(t.totalTimeSeconds)}),o.jsx(el,{label:"Tool calls",value:String(t.totalToolCalls)}),o.jsx(el,{label:"Tokens",value:nB(t.totalTokensGenerated)}),o.jsx(el,{label:"Speed",value:t.avgGenerationSpeed>0?`${t.avgGenerationSpeed} tok/s`:"-"})]})]})});function el({label:e,value:t}){return o.jsxs("div",{className:"bg-bg-primary/50 rounded px-2 py-1",children:[o.jsx("div",{className:"text-sm text-text-muted",children:e}),o.jsx("div",{className:"text-sm text-text-primary font-medium",children:t})]})}const sB=L.memo(function({data:t}){var u;const n=Et(c=>c.defaults),s=Et(c=>c.userItems),l=((u=[...n,...s].find(c=>c.id===t.workflowId))==null?void 0:u.color)??t.workflowColor??"#6b7280";return o.jsxs("div",{className:"feed-item flex items-center gap-2 px-3 py-2 rounded border",style:{borderColor:Bu(l,.3),backgroundColor:Bu(l,.08)},children:[o.jsx(Ij,{className:"w-3 h-3 shrink-0",color:l}),o.jsx("span",{className:"text-sm font-medium",style:{color:l},children:t.workflowName}),o.jsx("span",{className:"text-text-muted text-sm",children:"started"})]})});function iB({attachments:e,messageId:t}){const[n,s]=L.useState(null),a=Le(p=>p.visionFallbackByMessage),l=Le(p=>p.messages),u=L.useMemo(()=>{const p=l.findIndex(m=>m.id===t);if(p===-1)return null;for(let m=p+1;m<l.length;m++){const x=l[m];if(x&&x.role==="assistant")return x.id}return null},[l,t]),c=p=>{s(p)},d=()=>{s(null)},f=p=>{const m=`${t}-${p}`;if(a[m])return a[m];if(u){const x=`${u}-${p}`;return a[x]}return null};return e.length===0?null:o.jsxs(o.Fragment,{children:[o.jsx("div",{className:"mt-3 flex flex-wrap gap-3",children:e.map(p=>{const m=f(p.id);return o.jsxs("div",{className:"relative inline-block",children:[o.jsxs("button",{onClick:()=>c(p.data),className:"group relative inline-block",title:(m==null?void 0:m.type)==="done"&&m.description||p.description||p.filename,disabled:(m==null?void 0:m.type)==="start",children:[o.jsx("img",{src:p.data,alt:(m==null?void 0:m.type)==="done"&&m.description||p.description||p.filename,className:"max-w-[256px] max-h-[256px] object-contain rounded-lg border border-border hover:border-accent-primary transition-colors cursor-pointer"}),(m==null?void 0:m.type)==="start"&&o.jsx("div",{className:"absolute inset-0 bg-black/60 flex items-center justify-center rounded-lg",children:o.jsx("span",{className:"text-xs text-text-primary animate-pulse",children:"Describing image..."})})]}),(m==null?void 0:m.type)==="done"&&m.description&&o.jsxs("div",{className:"mt-2 p-2 bg-bg-tertiary rounded text-xs text-text-secondary max-w-[256px]",children:[m.description.slice(0,200),m.description.length>200?"...":""]})]},p.id)})}),n&&o.jsx(RC,{src:n,alt:"Attached image",isOpen:!0,onClose:d})]})}function aB({content:e,align:t="right",messageIndex:n,sessionId:s}){const[a,l]=L.useState(!1),[u,c]=L.useState(!1),[d,f]=L.useState("left"),p=L.useRef(null),m=L.useRef(null),x=Le(S=>S.loadSession),y=t==="right",w=()=>{if(!m.current)return"left";const S=m.current.getBoundingClientRect(),b=window.innerWidth-S.right,_=S.left,E=160,N=b>=E,T=_>=E;return T&&N||T?"left":N?"right":_>=b?"left":"right"};L.useEffect(()=>{const S=b=>{p.current&&!p.current.contains(b.target)&&l(!1)};return a&&document.addEventListener("mousedown",S),()=>document.removeEventListener("mousedown",S)},[a]);const C=async()=>{try{if(navigator.clipboard)await navigator.clipboard.writeText(e);else{const S=document.createElement("textarea");S.value=e,S.style.position="fixed",S.style.left="-999999px",document.body.appendChild(S),S.select(),document.execCommand("copy"),document.body.removeChild(S)}c(!0),l(!1),window.setTimeout(()=>c(!1),1500)}catch(S){console.error("Failed to copy:",S)}},v=async()=>{!s||n===void 0||(l(!1),await k2(s,n),x(s))};return o.jsx(o.Fragment,{children:o.jsxs("div",{className:`flex items-start gap-1.5 ${y?"":"order-first"}`,children:[u&&o.jsx(Br,{className:"w-4 h-4 text-accent-success"}),o.jsxs("div",{ref:p,className:"relative",children:[o.jsx("button",{ref:m,onClick:()=>{a||f(w()),l(!a)},className:"p-1 rounded hover:bg-bg-tertiary text-text-muted hover:text-text-primary",title:"Message options",children:o.jsx(yp,{})}),a&&o.jsxs("div",{className:`absolute top-full mt-1 bg-bg-secondary border border-border rounded shadow-xl z-50 py-1 min-w-36 ${d==="right"?"left-0":"right-0"}`,children:[o.jsxs("button",{onClick:C,className:"w-full px-3 py-1.5 text-left text-sm text-text-primary hover:bg-bg-tertiary flex items-center gap-2",children:[o.jsx(_p,{className:"w-4 h-4"}),"Copy"]}),s&&n!==void 0&&o.jsxs(o.Fragment,{children:[o.jsx("div",{className:"border-t border-border my-1"}),o.jsxs("button",{onClick:v,className:"w-full px-3 py-1.5 text-left text-sm text-text-primary hover:bg-bg-tertiary flex items-center gap-2",children:[o.jsx(vp,{className:"w-4 h-4"}),"Replay"]})]})]})]})]})})}function oB({message:e}){const[t,n]=L.useState(!1);if(e.messageKind!=="auto-prompt")return null;const s=e.metadata,a=(s==null?void 0:s.color)??"#6b7280",l=(s==null?void 0:s.name)??"Agent",u=(s==null?void 0:s.type)??"agent",d={agent:(s==null?void 0:s.kind)==="reminder"?"reminder":"definition injected",workflow:"instructions",compaction:"prompt injected",subagent:"instructions"}[u]??"injected",f=u==="workflow"||u==="subagent";return o.jsxs(o.Fragment,{children:[o.jsxs("div",{className:"flex items-center justify-center gap-1.5 text-[10px] text-text-muted font-mono mt-3 mb-4",children:[o.jsx("span",{className:"flex-1 h-px bg-border"}),o.jsx("span",{className:`w-1.5 h-1.5 rounded-full flex-shrink-0 ${f?"":"cursor-pointer"}`,style:{backgroundColor:a},onClick:()=>!f&&n(!0)}),o.jsx("span",{className:f?"":"cursor-pointer hover:text-text-secondary transition-colors",style:{color:a},onClick:()=>!f&&n(!0),children:l}),o.jsx("span",{children:"·"}),o.jsx("span",{className:f?"":"cursor-pointer hover:text-text-secondary transition-colors",onClick:()=>!f&&n(!0),children:d}),o.jsx("span",{className:"flex-1 h-px bg-border"})]}),f&&o.jsx("div",{className:"flex justify-center feed-item mb-4",children:o.jsx("div",{className:"max-w-[75%] rounded p-3 bg-bg-tertiary/50 text-text-secondary text-sm",style:{borderLeft:`3px solid ${a}`},children:o.jsx("pre",{className:"whitespace-pre-wrap font-mono text-xs",children:e.content})})}),o.jsx(Rt,{isOpen:t,onClose:()=>n(!1),title:`${l} Prompt`,size:"lg",children:o.jsxs("div",{className:"space-y-4",children:[o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsx("span",{className:"w-3 h-3 rounded-full",style:{backgroundColor:a}}),o.jsx("span",{className:"text-sm text-text-primary font-medium",children:l}),o.jsxs("span",{className:"text-xs text-text-muted",children:["(",u,")"]})]}),o.jsx("div",{className:"h-full min-h-96",children:o.jsx("pre",{className:"text-sm text-text-secondary whitespace-pre-wrap bg-bg-tertiary rounded p-4 h-full min-h-96 overflow-auto font-mono",children:e.content})})]})})]})}function lB({message:e,messageIndex:t,sessionId:n}){const s=e.messageKind==="auto-prompt",a=e.messageKind==="command",l=e.isSystemGenerated;return o.jsxs("div",{className:"flex justify-end items-start gap-1.5 feed-item",children:[!l&&o.jsx(aB,{content:e.content,align:"right",messageIndex:t,sessionId:n}),o.jsxs("div",{className:`max-w-[75%] rounded p-2 ${l?a?"bg-teal-500/10 border border-teal-500/30":s?"bg-slate-500/10 border border-slate-500/30":"bg-amber-500/10 border border-amber-500/30":"bg-accent-primary/15 text-text-primary"}`,children:[l&&o.jsx("span",{className:`text-[10px] block mb-0.5 ${a?"text-teal-400":s?"text-slate-400":"text-amber-400"}`,children:a?"Command":s?"Auto":"System"}),o.jsx("div",{className:`whitespace-pre-wrap text-sm ${l?`${a?"text-teal-200":s?"text-slate-200":"text-amber-200 italic"}`:""}`,children:e.content}),e.attachments&&e.attachments.length>0&&o.jsx(iB,{attachments:e.attachments,messageId:e.id})]})]})}const OC=L.memo(function({message:t,isLastAssistantMessage:n=!1,messageIndex:s,sessionId:a}){const l=t.role==="user",u=t.role==="assistant",c=t.role==="system",d=t.role==="tool";if(u)return o.jsx(mg,{message:t,showStats:n});if(c&&t.isCompacted)return o.jsxs("div",{className:"feed-item bg-bg-tertiary/50 border border-border rounded p-2",children:[o.jsx("div",{className:"text-text-muted text-xs mb-0.5",children:"[Compacted]"}),o.jsx("div",{className:"text-text-secondary text-xs whitespace-pre-wrap",children:t.content.replace(`[COMPACTED HISTORY]
286
286
  `,"")})]});if(d)return o.jsxs("div",{className:"feed-item bg-bg-tertiary/30 border-l-2 border-accent-primary rounded-r p-2",children:[o.jsxs("div",{className:"text-accent-primary text-xs mb-0.5",children:["Tool: ",t.toolName]}),o.jsxs("pre",{className:"text-text-secondary text-xs whitespace-pre-wrap overflow-x-auto max-h-32",children:[t.content.slice(0,500),t.content.length>500&&"..."]})]});if(t.messageKind==="workflow-started")try{const f=JSON.parse(t.content);return o.jsx(sB,{data:f})}catch{}if(t.messageKind==="task-completed")try{const f=JSON.parse(t.content);return o.jsx(rB,{data:f})}catch{}return t.messageKind==="context-reset"?o.jsxs("div",{className:"flex items-center gap-4 mb-6 text-text-muted text-xs uppercase tracking-wide",children:[o.jsx("div",{className:"flex-1 border-t border-border"}),o.jsx("span",{children:t.content}),o.jsx("div",{className:"flex-1 border-t border-border"})]}):t.messageKind==="auto-prompt"&&t.isSystemGenerated?o.jsx(oB,{message:t}):t.messageKind==="correction"&&t.isSystemGenerated?o.jsx("div",{className:"flex justify-end feed-item",children:o.jsxs("div",{className:"max-w-[75%] rounded p-2 bg-amber-500/10 border border-amber-500/30",children:[o.jsx("span",{className:"text-[10px] block mb-0.5 text-amber-400",children:"System"}),o.jsx("div",{className:"whitespace-pre-wrap text-sm text-amber-200 italic",children:t.content})]})}):l?o.jsx(lB,{message:t,messageIndex:s,sessionId:a}):o.jsx("div",{className:"flex justify-start feed-item",children:o.jsx("div",{className:"max-w-[75%] rounded p-2 bg-bg-tertiary text-text-primary",children:o.jsx(xs,{content:t.content})})})}),cB={verifier:"Verification",code_reviewer:"Code Review",test_generator:"Test Generation",debugger:"Debug"};function uB(e){return{backgroundColor:`${e}20`,color:e,borderColor:`${e}4d`}}function q0(e,t){return t||e>85?"text-accent-error":e>60?"text-accent-warning":"text-text-muted"}function dB({contextState:e}){const{currentTokens:t,maxTokens:n,compactionCount:s,dangerZone:a}=e,l=Math.round(t/n*100);return o.jsxs("div",{className:"flex items-center gap-1.5 text-[10px]",children:[o.jsxs("span",{className:q0(l,a),children:[yu(t),"/",yu(n)]}),o.jsxs("span",{className:q0(l,a),children:["(",l,"%)"]}),o.jsx(e1,{percent:l,dangerZone:a,size:"sm"}),a&&o.jsx("span",{className:"text-accent-error animate-pulse",children:"Low!"}),s>0&&o.jsxs("span",{className:"text-text-muted bg-bg-tertiary px-1 rounded",children:[s,"x"]})]})}const hB=L.memo(function({messages:t,subAgentType:n,subAgentId:s,isStreaming:a}){const l=L.useRef(null),u=L.useRef(null),[c,d]=L.useState(!1),f=gt(D=>D.defaults),p=gt(D=>D.userItems),m=[...f,...p],x=Le(D=>D.subAgentContextStates[s]),{showThinking:y,showVerboseToolOutput:w}=Fa(),{isAutoScrollActive:C,setAutoScroll:v}=Qu(u,null);L.useEffect(()=>{a||v(!0)},[a]);const S=L.useCallback(()=>{const D=!c;d(D),D&&setTimeout(()=>{var A;(A=l.current)==null||A.scrollIntoView({block:"start",behavior:"smooth"})},220)},[c]),b=m.find(D=>D.id===n),_=(b==null?void 0:b.name)??cB[n]??n,E=hl(m,n),N=uB(E),T=t.filter(D=>D.role!=="tool");return o.jsxs("div",{ref:l,className:"feed-item border border-border rounded overflow-hidden bg-secondary",children:[o.jsxs("div",{className:"w-full flex items-center justify-between px-2 py-1 border-b relative",style:N,children:[o.jsx("span",{className:"text-xs font-medium",children:_}),o.jsx("div",{className:"absolute left-1/2 -translate-x-1/2",children:x&&o.jsx(dB,{contextState:x})}),o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsxs("button",{type:"button",className:"text-sm text-text-muted hover:text-text-primary flex items-center gap-1.5",onClick:()=>v(!C),children:[o.jsx("span",{className:`w-1 h-1 rounded-full ${C?"bg-accent-success":"border border-text-muted"}`}),"live"]}),o.jsxs("button",{type:"button",className:"text-[10px] px-1.5 py-0.5 rounded bg-bg-tertiary",onClick:S,children:[c?"▼":"▶"," Expand"]})]})]}),o.jsx("div",{ref:u,className:`${c?"max-h-[calc(100vh-10rem)]":"max-h-80"} overflow-y-auto p-2 transition-[max-height] duration-200`,children:T.map(D=>D.role==="assistant"?o.jsx(mg,{message:D,showStats:!0,showThinking:y,showVerboseToolOutput:w},D.id):o.jsx(OC,{message:D,isLastAssistantMessage:!1},D.id))})]})});function lu(e){var t;return e.type==="context-divider"?`ctx-${e.windowSequence}`:e.type==="subagent"?((t=e.messages[0])==null?void 0:t.id)??e.subAgentId:e.message.id}const MC=L.memo(function({displayItems:t,highlightedMessageId:n=null,sessionId:s,showThinking:a=!0,showVerboseToolOutput:l=!0,showStats:u=!0,showAgentDefinitions:c=!0,showWorkflowBars:d=!0}){return o.jsx(o.Fragment,{children:t.map((f,p)=>{if(f.type==="context-divider")return o.jsxs("div",{"data-item-index":p,className:"flex items-center gap-2 feed-item px-2 md:px-4",children:[o.jsx("div",{className:"flex-1 border-t border-border"}),o.jsx("span",{className:"text-[10px] text-text-muted font-medium px-2",children:"Earlier context summarized"}),o.jsx("div",{className:"flex-1 border-t border-border"})]},lu(f));if(f.type==="subagent"){const w=f.messages.some(C=>C.isStreaming);return o.jsx("div",{"data-item-index":p,className:"px-2 md:px-4",children:o.jsx(hB,{messages:f.messages,subAgentType:f.subAgentType,subAgentId:f.subAgentId,isStreaming:w})},lu(f))}const m=f.message;if(m.role==="assistant")return o.jsx("div",{"data-item-index":p,className:"px-2 md:px-4",children:o.jsx(mg,{message:m,showStats:u,showThinking:a,showVerboseToolOutput:l})},lu(f));const x=!c&&m.messageKind==="auto-prompt",y=!d&&(m.messageKind==="workflow-started"||m.messageKind==="task-completed");return x||y?null:o.jsx("div",{"data-item-index":p,className:"px-2 md:px-4",children:o.jsx("div",{"data-message-id":m.id,className:n===m.id?"rounded animate-highlight-fade":void 0,children:o.jsx(OC,{message:m,messageIndex:p,sessionId:s??void 0,isLastAssistantMessage:!1})})},lu(f))})})});function IC(e,t,n=!0){L.useEffect(()=>{if(!n)return;const s=a=>{var l;(l=e.current)!=null&&l.contains(a.target)||t()};return document.addEventListener("mousedown",s),()=>document.removeEventListener("mousedown",s)},[e,t,n])}const fB=[],mB=L.memo(function({displayItems:t,scrollContainerRef:n,highlightedMessageId:s,onLaunchWorkflow:a,hiddenCount:l=0}){const u=Le(F=>{var q,$;return(($=(q=F.currentSession)==null?void 0:q.metadataEntries)==null?void 0:$.criteria)??fB}),c=Le(F=>{var q;return(q=F.currentSession)==null?void 0:q.id}),d=Le(F=>{var q;return(q=F.currentSession)==null?void 0:q.mode}),f=Le(F=>{var q;return(q=F.currentSession)==null?void 0:q.phase}),p=Le(F=>F.error),m=Le(F=>F.clearError),x=Fu(),{showThinking:y,showVerboseToolOutput:w,showStats:C,showAgentDefinitions:v,showWorkflowBars:S}=Fa(),b=Et(F=>F.defaults),_=Et(F=>F.userItems),E=[...b,..._],N=d==="planner",T=u.length>0,D=f==="done",A=t.some(F=>F.type==="message"&&F.message.role==="assistant"),O=N&&T&&!x&&A&&!D,M=Le(F=>{var q;return(q=F.currentSession)==null?void 0:q.projectId}),[G,V]=L.useState(!1),R=()=>{if(!M||!c)return;V(!1),window.open(`/p/${M}/s/${c}/readonly`,"_blank")||V(!0)};return o.jsxs("div",{ref:n,"data-testid":"chat-scroll-container",className:"flex-1 min-w-0 overflow-y-auto relative bg-primary",children:[o.jsxs("div",{className:"pt-4",children:[l>0&&o.jsxs("div",{className:"px-2 md:px-4 pb-2 space-y-1",children:[o.jsxs("button",{onClick:R,className:"w-full text-sm text-text-muted hover:text-text-primary bg-bg-tertiary/50 hover:bg-bg-tertiary border border-border rounded px-3 py-2 transition-colors text-center",children:[l," older item",l!==1?"s":""," hidden — View full history"]}),G&&o.jsxs("p",{className:"text-xs text-text-muted text-center",children:["Popup blocked."," ",o.jsx("a",{href:M&&c?`/p/${M}/s/${c}/readonly`:"#",target:"_blank",rel:"noopener noreferrer",className:"underline hover:text-text-primary",children:"Open manually"})]})]}),o.jsx(MC,{displayItems:t,highlightedMessageId:s,sessionId:c,showThinking:y,showVerboseToolOutput:w,showStats:C,showAgentDefinitions:v,showWorkflowBars:S})]}),o.jsxs("div",{className:"px-2 md:px-4 pb-4",children:[p&&o.jsx("div",{className:"feed-item bg-red-500/10 border border-red-500/50 rounded p-2",children:o.jsxs("div",{className:"flex items-start justify-between gap-2",children:[o.jsxs("div",{children:[o.jsx("div",{className:"text-red-400 text-sm font-medium",children:p.code}),o.jsx("div",{className:"text-red-300 text-xs mt-0.5",children:p.message})]}),o.jsx(kl,{onClick:m,className:"text-red-400 hover:text-red-300 p-0.5",size:"sm"})]})}),O&&o.jsx("div",{className:"flex justify-center gap-2 feed-item flex-wrap",children:E.map(F=>{const q=F.color??"#3b82f6",$=parseInt(q.slice(1,3),16),J=parseInt(q.slice(3,5),16),te=parseInt(q.slice(5,7),16),U=`rgba(${$},${J},${te},0.12)`,I=`rgba(${$},${J},${te},0.22)`,z=`rgba(${$},${J},${te},0.25)`;return o.jsx(pB,{workflowName:F.name,color:q,bg:U,bgHover:I,border:z,subGroups:F.subGroups,onLaunch:H=>a(F.id,H)},F.id)})})]})]})});function pB({workflowName:e,color:t,bg:n,bgHover:s,border:a,subGroups:l,onLaunch:u}){const[c,d]=L.useState(!1),f=L.useRef(null);return IC(f,()=>d(!1),c),o.jsxs("div",{className:"relative flex",children:[o.jsxs("button",{onClick:()=>u(),"data-testid":"workflow-run-button",className:"px-4 py-1.5 rounded-l text-sm font-medium transition-colors",style:{backgroundColor:n,color:t,border:`1px solid ${a}`,borderRight:"none"},onMouseEnter:p=>{p.currentTarget.style.backgroundColor=s},onMouseLeave:p=>{p.currentTarget.style.backgroundColor=n},children:["▶ ",e]}),l&&l.length>0&&o.jsxs("div",{ref:f,className:"relative",children:[o.jsx("button",{onClick:()=>d(!c),className:"px-1.5 py-1.5 rounded-r text-sm font-medium transition-colors",style:{backgroundColor:n,color:t,border:`1px solid ${a}`},onMouseEnter:p=>{p.currentTarget.style.backgroundColor=s},onMouseLeave:p=>{p.currentTarget.style.backgroundColor=n},children:"⋮"}),c&&o.jsxs("div",{className:"absolute top-full right-0 mt-1 w-40 bg-bg-secondary border border-border rounded-lg shadow-xl z-50 overflow-hidden",children:[o.jsx("button",{onClick:()=>{u(),d(!1)},className:"w-full text-left px-3 py-2 text-sm text-text-primary hover:bg-bg-tertiary transition-colors",children:"Full workflow"}),o.jsx("div",{className:"border-t border-border/50"}),l.map(p=>o.jsx("button",{onClick:()=>{u(p),d(!1)},className:"w-full text-left px-3 py-2 text-sm text-text-primary hover:bg-bg-tertiary transition-colors",children:p},p))]})]})]})}function gB(){const e=Le(s=>s.connectionStatus),t=Le(s=>s.reconnect);if(e==="connected")return null;const n=e==="reconnecting";return o.jsxs("div",{className:`
287
287
  flex items-center justify-between px-4 py-2
@@ -5,7 +5,7 @@
5
5
  <link rel="icon" type="image/png" href="/assets/openfox.png" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0, height=device-height" />
7
7
  <title>OpenFox</title>
8
- <script type="module" crossorigin src="/assets/index-chkieEXf.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-D8oQRDLg.js"></script>
9
9
  <link rel="stylesheet" crossorigin href="/assets/index-GFd2V-Ja.css">
10
10
  <link rel="manifest" href="/manifest.webmanifest"><script id="vite-plugin-pwa:register-sw" src="/registerSW.js"></script></head>
11
11
  <body class="bg-bg-primary text-text-primary font-mono">
package/dist/web/sw.js CHANGED
@@ -1 +1 @@
1
- if(!self.define){let s,l={};const e=(e,r)=>(e=new URL(e+".js",r).href,l[e]||new Promise(l=>{if("document"in self){const s=document.createElement("script");s.src=e,s.onload=l,document.head.appendChild(s)}else s=e,importScripts(e),l()}).then(()=>{let s=l[e];if(!s)throw new Error(`Module ${e} didn’t register its module`);return s}));self.define=(r,i)=>{const n=s||("document"in self?document.currentScript.src:"")||location.href;if(l[n])return;let u={};const a=s=>e(s,n),t={module:{uri:n},exports:u,require:a};l[n]=Promise.all(r.map(s=>t[s]||a(s))).then(s=>(i(...s),u))}}define(["./workbox-8c29f6e4"],function(s){"use strict";self.skipWaiting(),s.clientsClaim(),s.precacheAndRoute([{url:"registerSW.js",revision:"1872c500de691dce40960bb85481de07"},{url:"index.html",revision:"9e279fded44acb3741d02bc0b9ae81aa"},{url:"__inspect__.js",revision:"616419159f6250026c61434e238ddec5"},{url:"assets/zig-VOosw3JB.js",revision:null},{url:"assets/zenscript-DVFEvuxE.js",revision:null},{url:"assets/yaml-Buea-lGh.js",revision:null},{url:"assets/xsl-CtQFsRM5.js",revision:null},{url:"assets/xml-sdJ4AIDG.js",revision:null},{url:"assets/wolfram-lXgVvXCa.js",revision:null},{url:"assets/wit-5i3qLPDT.js",revision:null},{url:"assets/wikitext-BhOHFoWU.js",revision:null},{url:"assets/wgsl-Dx-B1_4e.js",revision:null},{url:"assets/wenyan-BV7otONQ.js",revision:null},{url:"assets/wasm-MzD3tlZU.js",revision:null},{url:"assets/wasm-CG6Dc4jp.js",revision:null},{url:"assets/vyper-CDx5xZoG.js",revision:null},{url:"assets/vue-vine-BoDAl6tE.js",revision:null},{url:"assets/vue-html-AaS7Mt5G.js",revision:null},{url:"assets/vue-D2xRrEX4.js",revision:null},{url:"assets/vitesse-light-CVO1_9PV.js",revision:null},{url:"assets/vitesse-dark-D0r3Knsf.js",revision:null},{url:"assets/vitesse-black-Bkuqu6BP.js",revision:null},{url:"assets/viml-CJc9bBzg.js",revision:null},{url:"assets/vhdl-CeAyd5Ju.js",revision:null},{url:"assets/vesper-DRje8inN.js",revision:null},{url:"assets/verilog-BQ8w6xss.js",revision:null},{url:"assets/vb-D17OF-Vu.js",revision:null},{url:"assets/vala-CsfeWuGM.js",revision:null},{url:"assets/v-BcVCzyr7.js",revision:null},{url:"assets/typst-DHCkPAjA.js",revision:null},{url:"assets/typespec-CAFt9gP4.js",revision:null},{url:"assets/typescript-BPQ3VLAy.js",revision:null},{url:"assets/twig-CW1WmMYd.js",revision:null},{url:"assets/turtle-BsS91CYL.js",revision:null},{url:"assets/tsx-COt5Ahok.js",revision:null},{url:"assets/tsv-B_m7g4N7.js",revision:null},{url:"assets/ts-tags-D351s5mN.js",revision:null},{url:"assets/toml-vGWfd6FD.js",revision:null},{url:"assets/tokyo-night-hegEt444.js",revision:null},{url:"assets/tex-idrVyKtj.js",revision:null},{url:"assets/terraform-BETggiCN.js",revision:null},{url:"assets/templ-DhtptRzy.js",revision:null},{url:"assets/tcl-dwOrl1Do.js",revision:null},{url:"assets/tasl-QIJgUcNo.js",revision:null},{url:"assets/talonscript-CkByrt1z.js",revision:null},{url:"assets/systemd-4A_iFExJ.js",revision:null},{url:"assets/system-verilog-CnnmHF94.js",revision:null},{url:"assets/synthwave-84-CbfX1IO0.js",revision:null},{url:"assets/swift-D82vCrfD.js",revision:null},{url:"assets/svelte-Cy7k_4gC.js",revision:null},{url:"assets/surrealql-Bq5Q-fJD.js",revision:null},{url:"assets/stylus-BEDo0Tqx.js",revision:null},{url:"assets/stata-DI20mbqo.js",revision:null},{url:"assets/ssh-config-_ykCGR6B.js",revision:null},{url:"assets/sql-CRqJ_cUM.js",revision:null},{url:"assets/splunk-BtCnVYZw.js",revision:null},{url:"assets/sparql-rVzFXLq3.js",revision:null},{url:"assets/soy-8wufbnw4.js",revision:null},{url:"assets/solidity-rGO070M0.js",revision:null},{url:"assets/solarized-light-L9t79GZl.js",revision:null},{url:"assets/solarized-dark-DXbdFlpD.js",revision:null},{url:"assets/snazzy-light-Bw305WKR.js",revision:null},{url:"assets/smalltalk-BERRCDM3.js",revision:null},{url:"assets/slack-ochin-DqwNpetd.js",revision:null},{url:"assets/slack-dark-BthQWCQV.js",revision:null},{url:"assets/shellsession-BADoaaVG.js",revision:null},{url:"assets/shellscript-Yzrsuije.js",revision:null},{url:"assets/shaderlab-Dg9Lc6iA.js",revision:null},{url:"assets/sdbl-DVxCFoDh.js",revision:null},{url:"assets/scss-D5BDwBP9.js",revision:null},{url:"assets/scheme-C98Dy4si.js",revision:null},{url:"assets/scala-C151Ov-r.js",revision:null},{url:"assets/sass-Cj5Yp3dK.js",revision:null},{url:"assets/sas-DEy46yEz.js",revision:null},{url:"assets/rust-B1yitclQ.js",revision:null},{url:"assets/ruby-DyJCeAvU.js",revision:null},{url:"assets/rst-CpCqk9r5.js",revision:null},{url:"assets/rosmsg-BJDFO7_C.js",revision:null},{url:"assets/rose-pine-qdsjHGoJ.js",revision:null},{url:"assets/rose-pine-moon-D4_iv3hh.js",revision:null},{url:"assets/rose-pine-dawn-DHQR4-dF.js",revision:null},{url:"assets/ron-D8l8udqQ.js",revision:null},{url:"assets/riscv-BM1_JUlF.js",revision:null},{url:"assets/rel-C3B-1QV4.js",revision:null},{url:"assets/regexp-CDVJQ6XC.js",revision:null},{url:"assets/reg-C-SQnVFl.js",revision:null},{url:"assets/red-bN70gL4F.js",revision:null},{url:"assets/razor-BjBPvh-w.js",revision:null},{url:"assets/raku-DXvB9xmW.js",revision:null},{url:"assets/racket-BqYA7rlc.js",revision:null},{url:"assets/r-Dspwwk_N.js",revision:null},{url:"assets/qss-IeuSbFQv.js",revision:null},{url:"assets/qmldir-C8lEn-DE.js",revision:null},{url:"assets/qml-3beO22l8.js",revision:null},{url:"assets/python-B6aJPvgy.js",revision:null},{url:"assets/purescript-CklMAg4u.js",revision:null},{url:"assets/puppet-BMWR74SV.js",revision:null},{url:"assets/pug-DKIMFp6K.js",revision:null},{url:"assets/proto-C7zT0LnQ.js",revision:null},{url:"assets/prolog-CbFg5uaA.js",revision:null},{url:"assets/prisma-Dd19v3D-.js",revision:null},{url:"assets/powershell-Dpen1YoG.js",revision:null},{url:"assets/powerquery-CEu0bR-o.js",revision:null},{url:"assets/postcss-CXtECtnM.js",revision:null},{url:"assets/polar-C0HS_06l.js",revision:null},{url:"assets/poimandres-CS3Unz2-.js",revision:null},{url:"assets/po-BTJTHyun.js",revision:null},{url:"assets/plsql-ChMvpjG-.js",revision:null},{url:"assets/plastic-3e1v2bzS.js",revision:null},{url:"assets/pkl-u5AG7uiY.js",revision:null},{url:"assets/php-Csjmro_R.js",revision:null},{url:"assets/perl-B9cMNwum.js",revision:null},{url:"assets/pascal-D93ZcfNL.js",revision:null},{url:"assets/openscad-C4EeE6gA.js",revision:null},{url:"assets/one-light-C3Wv6jpd.js",revision:null},{url:"assets/one-dark-pro-DVMEJ2y_.js",revision:null},{url:"assets/odin-BBf5iR-q.js",revision:null},{url:"assets/ocaml-C0hk2d4L.js",revision:null},{url:"assets/objective-cpp-CLxacb5B.js",revision:null},{url:"assets/objective-c-DXmwc3jG.js",revision:null},{url:"assets/nushell-Cz2AlsmD.js",revision:null},{url:"assets/nord-Ddv68eIx.js",revision:null},{url:"assets/nix-CwoSXNpI.js",revision:null},{url:"assets/nim-BIad80T-.js",revision:null},{url:"assets/night-owl-light-CMTm3GFP.js",revision:null},{url:"assets/night-owl-C39BiMTA.js",revision:null},{url:"assets/nginx-BpAMiNFr.js",revision:null},{url:"assets/nextflow-groovy-vE_lwT2v.js",revision:null},{url:"assets/nextflow-C-mBbutL.js",revision:null},{url:"assets/narrat-DRg8JJMk.js",revision:null},{url:"assets/move-IF9eRakj.js",revision:null},{url:"assets/moonbit-_H4v1dQx.js",revision:null},{url:"assets/monokai-D4h5O-jR.js",revision:null},{url:"assets/mojo-rZm6bMo-.js",revision:null},{url:"assets/mipsasm-CKIfxQSi.js",revision:null},{url:"assets/min-light-CTRr51gU.js",revision:null},{url:"assets/min-dark-CafNBF8u.js",revision:null},{url:"assets/mermaid-mWjccvbQ.js",revision:null},{url:"assets/mdx-Cmh6b_Ma.js",revision:null},{url:"assets/mdc-DTYItulj.js",revision:null},{url:"assets/matlab-D7o27uSR.js",revision:null},{url:"assets/material-theme-palenight-Csfq5Kiy.js",revision:null},{url:"assets/material-theme-ocean-CyktbL80.js",revision:null},{url:"assets/material-theme-lighter-B0m2ddpp.js",revision:null},{url:"assets/material-theme-darker-BfHTSMKl.js",revision:null},{url:"assets/material-theme-D5KoaKCx.js",revision:null},{url:"assets/marko-DjSrsDqO.js",revision:null},{url:"assets/markdown-Cvjx9yec.js",revision:null},{url:"assets/make-CHLpvVh8.js",revision:null},{url:"assets/luau-KW6xsasC.js",revision:null},{url:"assets/lua-BaeVxFsk.js",revision:null},{url:"assets/logo-BtOb2qkB.js",revision:null},{url:"assets/log-2UxHyX5q.js",revision:null},{url:"assets/llvm-DjAJT7YJ.js",revision:null},{url:"assets/liquid-C0sCDyMI.js",revision:null},{url:"assets/light-plus-B7mTdjB0.js",revision:null},{url:"assets/less-B1dDrJ26.js",revision:null},{url:"assets/lean-BZvkOJ9d.js",revision:null},{url:"assets/latex-CaSxy8MP.js",revision:null},{url:"assets/laserwave-DUszq2jm.js",revision:null},{url:"assets/kusto-wEQ09or8.js",revision:null},{url:"assets/kotlin-BdnUsdx6.js",revision:null},{url:"assets/kdl-DV7GczEv.js",revision:null},{url:"assets/kanagawa-wave-DWedfzmr.js",revision:null},{url:"assets/kanagawa-lotus-CfQXZHmo.js",revision:null},{url:"assets/kanagawa-dragon-CkXjmgJE.js",revision:null},{url:"assets/just-CUsbIsdP.js",revision:null},{url:"assets/julia-D7OTSIA_.js",revision:null},{url:"assets/jsx-g9-lgVsj.js",revision:null},{url:"assets/jssm-C2t-YnRu.js",revision:null},{url:"assets/jsonnet-DFQXde-d.js",revision:null},{url:"assets/jsonl-DcaNXYhu.js",revision:null},{url:"assets/jsonc-Des-eS-w.js",revision:null},{url:"assets/json5-C9tS-k6U.js",revision:null},{url:"assets/json-Cp-IABpG.js",revision:null},{url:"assets/jison-wvAkD_A8.js",revision:null},{url:"assets/jinja-f2NsQr07.js",revision:null},{url:"assets/javascript-wDzz0qaB.js",revision:null},{url:"assets/java-CylS5w8V.js",revision:null},{url:"assets/ini-BEwlwnbL.js",revision:null},{url:"assets/index-chkieEXf.js",revision:null},{url:"assets/index-GFd2V-Ja.css",revision:null},{url:"assets/imba-DGztddWO.js",revision:null},{url:"assets/hy-DFXneXwc.js",revision:null},{url:"assets/hxml-Bvhsp5Yf.js",revision:null},{url:"assets/hurl-irOxFIW8.js",revision:null},{url:"assets/http-jrhK8wxY.js",revision:null},{url:"assets/html2canvas.esm-QH1iLAAe.js",revision:null},{url:"assets/html-pp8916En.js",revision:null},{url:"assets/html-derivative-DlHx6ybY.js",revision:null},{url:"assets/houston-DnULxvSX.js",revision:null},{url:"assets/horizon-bright-CUuTKBJd.js",revision:null},{url:"assets/horizon-BUw7H-hv.js",revision:null},{url:"assets/hlsl-D3lLCCz7.js",revision:null},{url:"assets/hjson-D5-asLiD.js",revision:null},{url:"assets/hcl-BWvSN4gD.js",revision:null},{url:"assets/haxe-CzTSHFRz.js",revision:null},{url:"assets/haskell-Df6bDoY_.js",revision:null},{url:"assets/handlebars-BpdQsYii.js",revision:null},{url:"assets/haml-D5jkg6IW.js",revision:null},{url:"assets/hack-DbPARsA_.js",revision:null},{url:"assets/gruvbox-light-soft-hJgmCMqR.js",revision:null},{url:"assets/gruvbox-light-medium-DRw_LuNl.js",revision:null},{url:"assets/gruvbox-light-hard-CH1njM8p.js",revision:null},{url:"assets/gruvbox-dark-soft-CVdnzihN.js",revision:null},{url:"assets/gruvbox-dark-medium-GsRaNv29.js",revision:null},{url:"assets/gruvbox-dark-hard-CFHQjOhq.js",revision:null},{url:"assets/groovy-gcz8RCvz.js",revision:null},{url:"assets/graphql-ChdNCCLP.js",revision:null},{url:"assets/go-C27-OAKa.js",revision:null},{url:"assets/gnuplot-DdkO51Og.js",revision:null},{url:"assets/gn-n2N0HUVH.js",revision:null},{url:"assets/glsl-DplSGwfg.js",revision:null},{url:"assets/glimmer-ts-BfAWNZQY.js",revision:null},{url:"assets/glimmer-js-ByusRIyA.js",revision:null},{url:"assets/gleam-BspZqrRM.js",revision:null},{url:"assets/github-light-high-contrast-BfjtVDDH.js",revision:null},{url:"assets/github-light-default-D7oLnXFd.js",revision:null},{url:"assets/github-light-DAi9KRSo.js",revision:null},{url:"assets/github-dark-high-contrast-E3gJ1_iC.js",revision:null},{url:"assets/github-dark-dimmed-DH5Ifo-i.js",revision:null},{url:"assets/github-dark-default-Cuk6v7N8.js",revision:null},{url:"assets/github-dark-DHJKELXO.js",revision:null},{url:"assets/git-rebase-r7XF79zn.js",revision:null},{url:"assets/git-commit-F4YmCXRG.js",revision:null},{url:"assets/gherkin-DyxjwDmM.js",revision:null},{url:"assets/genie-D0YGMca9.js",revision:null},{url:"assets/gdshader-DkwncUOv.js",revision:null},{url:"assets/gdscript-C5YyOfLZ.js",revision:null},{url:"assets/gdresource-BOOCDP_w.js",revision:null},{url:"assets/fsharp-CXgrBDvD.js",revision:null},{url:"assets/fortran-free-form-BxgE0vQu.js",revision:null},{url:"assets/fortran-fixed-form-CkoXwp7k.js",revision:null},{url:"assets/fluent-C4IJs8-o.js",revision:null},{url:"assets/fish-BvzEVeQv.js",revision:null},{url:"assets/fennel-BYunw83y.js",revision:null},{url:"assets/everforest-light-C8M2exoo.js",revision:null},{url:"assets/everforest-dark-BgDCqdQA.js",revision:null},{url:"assets/erlang-DsQrWhSR.js",revision:null},{url:"assets/erb-Dm6A9KJ5.js",revision:null},{url:"assets/emacs-lisp-CXvaQtF9.js",revision:null},{url:"assets/elm-DbKCFpqz.js",revision:null},{url:"assets/elixir-CkH2-t6x.js",revision:null},{url:"assets/edge-FbVlp4U3.js",revision:null},{url:"assets/dream-maker-BtqSS_iP.js",revision:null},{url:"assets/dracula-soft-BXkSAIEj.js",revision:null},{url:"assets/dracula-BzJJZx-M.js",revision:null},{url:"assets/dotenv-Da5cRb03.js",revision:null},{url:"assets/docker-BcOcwvcX.js",revision:null},{url:"assets/diff-D97Zzqfu.js",revision:null},{url:"assets/desktop-BmXAJ9_W.js",revision:null},{url:"assets/dax-CEL-wOlO.js",revision:null},{url:"assets/dart-bE4Kk8sk.js",revision:null},{url:"assets/dark-plus-C3mMm8J8.js",revision:null},{url:"assets/d-85-TOEBH.js",revision:null},{url:"assets/cypher-COkxafJQ.js",revision:null},{url:"assets/cue-D82EKSYY.js",revision:null},{url:"assets/csv-fuZLfV_i.js",revision:null},{url:"assets/css-CLj8gQPS.js",revision:null},{url:"assets/csharp-DSvCPggb.js",revision:null},{url:"assets/crystal-DGywbUpC.js",revision:null},{url:"assets/cpp-UfJy6YNI.js",revision:null},{url:"assets/coq-DkFqJrB1.js",revision:null},{url:"assets/common-lisp-Cg-RD9OK.js",revision:null},{url:"assets/coffee-Ch7k5sss.js",revision:null},{url:"assets/codeql-DsOJ9woJ.js",revision:null},{url:"assets/codeowners-Bp6g37R7.js",revision:null},{url:"assets/cobol-nBiQ_Alo.js",revision:null},{url:"assets/cmake-D1j8_8rp.js",revision:null},{url:"assets/clojure-P80f7IUj.js",revision:null},{url:"assets/clarity-D53aC0YG.js",revision:null},{url:"assets/catppuccin-mocha-D87Tk5Gz.js",revision:null},{url:"assets/catppuccin-macchiato-DQyhUUbL.js",revision:null},{url:"assets/catppuccin-latte-C9dUb6Cb.js",revision:null},{url:"assets/catppuccin-frappe-DFWUc33u.js",revision:null},{url:"assets/cairo-KRGpt6FW.js",revision:null},{url:"assets/cadence-Bv_4Rxtq.js",revision:null},{url:"assets/c3-MRO5bC_T.js",revision:null},{url:"assets/c-BIGW1oBm.js",revision:null},{url:"assets/bsl-BO_Y6i37.js",revision:null},{url:"assets/blade-2xfisSek.js",revision:null},{url:"assets/bird2-BIv1doCn.js",revision:null},{url:"assets/bicep-Bmn6On1c.js",revision:null},{url:"assets/bibtex-CHM0blh-.js",revision:null},{url:"assets/berry-uYugtg8r.js",revision:null},{url:"assets/beancount-k_qm7-4y.js",revision:null},{url:"assets/bat-BkioyH1T.js",revision:null},{url:"assets/ballerina-BFfxhgS-.js",revision:null},{url:"assets/ayu-mirage-32ctXXKs.js",revision:null},{url:"assets/ayu-light-BA47KaF1.js",revision:null},{url:"assets/ayu-dark-DYE7WIF3.js",revision:null},{url:"assets/awk-DMzUqQB5.js",revision:null},{url:"assets/aurora-x-D-2ljcwZ.js",revision:null},{url:"assets/astro-HNnZUWAn.js",revision:null},{url:"assets/asm-D_Q5rh1f.js",revision:null},{url:"assets/asciidoc-Ve4PFQV2.js",revision:null},{url:"assets/ara-BRHolxvo.js",revision:null},{url:"assets/applescript-Co6uUVPk.js",revision:null},{url:"assets/apl-CORt7UWP.js",revision:null},{url:"assets/apex-Dqspr-GT.js",revision:null},{url:"assets/apache-Pmp26Uib.js",revision:null},{url:"assets/angular-ts-BrjP3tb8.js",revision:null},{url:"assets/angular-html-DA-rfuFy.js",revision:null},{url:"assets/andromeeda-C4gqWexZ.js",revision:null},{url:"assets/ada-bCR0ucgS.js",revision:null},{url:"assets/actionscript-3-CoDkCxhg.js",revision:null},{url:"assets/abap-BdImnpbu.js",revision:null},{url:"assets/openfox-192.png",revision:"79feeb86d692c274854e37959a7dae67"},{url:"assets/openfox-512.png",revision:"fee24b214220594b4f595a467e73036e"},{url:"manifest.webmanifest",revision:"c25f372c782e623ab1e768a8dfe350ca"}],{}),s.cleanupOutdatedCaches(),s.registerRoute(new s.NavigationRoute(s.createHandlerBoundToURL("index.html")))});
1
+ if(!self.define){let s,l={};const e=(e,r)=>(e=new URL(e+".js",r).href,l[e]||new Promise(l=>{if("document"in self){const s=document.createElement("script");s.src=e,s.onload=l,document.head.appendChild(s)}else s=e,importScripts(e),l()}).then(()=>{let s=l[e];if(!s)throw new Error(`Module ${e} didn’t register its module`);return s}));self.define=(r,i)=>{const n=s||("document"in self?document.currentScript.src:"")||location.href;if(l[n])return;let u={};const a=s=>e(s,n),t={module:{uri:n},exports:u,require:a};l[n]=Promise.all(r.map(s=>t[s]||a(s))).then(s=>(i(...s),u))}}define(["./workbox-8c29f6e4"],function(s){"use strict";self.skipWaiting(),s.clientsClaim(),s.precacheAndRoute([{url:"registerSW.js",revision:"1872c500de691dce40960bb85481de07"},{url:"index.html",revision:"787a35d00f50dfefedbfe8e53408e7b1"},{url:"__inspect__.js",revision:"616419159f6250026c61434e238ddec5"},{url:"assets/zig-VOosw3JB.js",revision:null},{url:"assets/zenscript-DVFEvuxE.js",revision:null},{url:"assets/yaml-Buea-lGh.js",revision:null},{url:"assets/xsl-CtQFsRM5.js",revision:null},{url:"assets/xml-sdJ4AIDG.js",revision:null},{url:"assets/wolfram-lXgVvXCa.js",revision:null},{url:"assets/wit-5i3qLPDT.js",revision:null},{url:"assets/wikitext-BhOHFoWU.js",revision:null},{url:"assets/wgsl-Dx-B1_4e.js",revision:null},{url:"assets/wenyan-BV7otONQ.js",revision:null},{url:"assets/wasm-MzD3tlZU.js",revision:null},{url:"assets/wasm-CG6Dc4jp.js",revision:null},{url:"assets/vyper-CDx5xZoG.js",revision:null},{url:"assets/vue-vine-BoDAl6tE.js",revision:null},{url:"assets/vue-html-AaS7Mt5G.js",revision:null},{url:"assets/vue-D2xRrEX4.js",revision:null},{url:"assets/vitesse-light-CVO1_9PV.js",revision:null},{url:"assets/vitesse-dark-D0r3Knsf.js",revision:null},{url:"assets/vitesse-black-Bkuqu6BP.js",revision:null},{url:"assets/viml-CJc9bBzg.js",revision:null},{url:"assets/vhdl-CeAyd5Ju.js",revision:null},{url:"assets/vesper-DRje8inN.js",revision:null},{url:"assets/verilog-BQ8w6xss.js",revision:null},{url:"assets/vb-D17OF-Vu.js",revision:null},{url:"assets/vala-CsfeWuGM.js",revision:null},{url:"assets/v-BcVCzyr7.js",revision:null},{url:"assets/typst-DHCkPAjA.js",revision:null},{url:"assets/typespec-CAFt9gP4.js",revision:null},{url:"assets/typescript-BPQ3VLAy.js",revision:null},{url:"assets/twig-CW1WmMYd.js",revision:null},{url:"assets/turtle-BsS91CYL.js",revision:null},{url:"assets/tsx-COt5Ahok.js",revision:null},{url:"assets/tsv-B_m7g4N7.js",revision:null},{url:"assets/ts-tags-D351s5mN.js",revision:null},{url:"assets/toml-vGWfd6FD.js",revision:null},{url:"assets/tokyo-night-hegEt444.js",revision:null},{url:"assets/tex-idrVyKtj.js",revision:null},{url:"assets/terraform-BETggiCN.js",revision:null},{url:"assets/templ-DhtptRzy.js",revision:null},{url:"assets/tcl-dwOrl1Do.js",revision:null},{url:"assets/tasl-QIJgUcNo.js",revision:null},{url:"assets/talonscript-CkByrt1z.js",revision:null},{url:"assets/systemd-4A_iFExJ.js",revision:null},{url:"assets/system-verilog-CnnmHF94.js",revision:null},{url:"assets/synthwave-84-CbfX1IO0.js",revision:null},{url:"assets/swift-D82vCrfD.js",revision:null},{url:"assets/svelte-Cy7k_4gC.js",revision:null},{url:"assets/surrealql-Bq5Q-fJD.js",revision:null},{url:"assets/stylus-BEDo0Tqx.js",revision:null},{url:"assets/stata-DI20mbqo.js",revision:null},{url:"assets/ssh-config-_ykCGR6B.js",revision:null},{url:"assets/sql-CRqJ_cUM.js",revision:null},{url:"assets/splunk-BtCnVYZw.js",revision:null},{url:"assets/sparql-rVzFXLq3.js",revision:null},{url:"assets/soy-8wufbnw4.js",revision:null},{url:"assets/solidity-rGO070M0.js",revision:null},{url:"assets/solarized-light-L9t79GZl.js",revision:null},{url:"assets/solarized-dark-DXbdFlpD.js",revision:null},{url:"assets/snazzy-light-Bw305WKR.js",revision:null},{url:"assets/smalltalk-BERRCDM3.js",revision:null},{url:"assets/slack-ochin-DqwNpetd.js",revision:null},{url:"assets/slack-dark-BthQWCQV.js",revision:null},{url:"assets/shellsession-BADoaaVG.js",revision:null},{url:"assets/shellscript-Yzrsuije.js",revision:null},{url:"assets/shaderlab-Dg9Lc6iA.js",revision:null},{url:"assets/sdbl-DVxCFoDh.js",revision:null},{url:"assets/scss-D5BDwBP9.js",revision:null},{url:"assets/scheme-C98Dy4si.js",revision:null},{url:"assets/scala-C151Ov-r.js",revision:null},{url:"assets/sass-Cj5Yp3dK.js",revision:null},{url:"assets/sas-DEy46yEz.js",revision:null},{url:"assets/rust-B1yitclQ.js",revision:null},{url:"assets/ruby-DyJCeAvU.js",revision:null},{url:"assets/rst-CpCqk9r5.js",revision:null},{url:"assets/rosmsg-BJDFO7_C.js",revision:null},{url:"assets/rose-pine-qdsjHGoJ.js",revision:null},{url:"assets/rose-pine-moon-D4_iv3hh.js",revision:null},{url:"assets/rose-pine-dawn-DHQR4-dF.js",revision:null},{url:"assets/ron-D8l8udqQ.js",revision:null},{url:"assets/riscv-BM1_JUlF.js",revision:null},{url:"assets/rel-C3B-1QV4.js",revision:null},{url:"assets/regexp-CDVJQ6XC.js",revision:null},{url:"assets/reg-C-SQnVFl.js",revision:null},{url:"assets/red-bN70gL4F.js",revision:null},{url:"assets/razor-BjBPvh-w.js",revision:null},{url:"assets/raku-DXvB9xmW.js",revision:null},{url:"assets/racket-BqYA7rlc.js",revision:null},{url:"assets/r-Dspwwk_N.js",revision:null},{url:"assets/qss-IeuSbFQv.js",revision:null},{url:"assets/qmldir-C8lEn-DE.js",revision:null},{url:"assets/qml-3beO22l8.js",revision:null},{url:"assets/python-B6aJPvgy.js",revision:null},{url:"assets/purescript-CklMAg4u.js",revision:null},{url:"assets/puppet-BMWR74SV.js",revision:null},{url:"assets/pug-DKIMFp6K.js",revision:null},{url:"assets/proto-C7zT0LnQ.js",revision:null},{url:"assets/prolog-CbFg5uaA.js",revision:null},{url:"assets/prisma-Dd19v3D-.js",revision:null},{url:"assets/powershell-Dpen1YoG.js",revision:null},{url:"assets/powerquery-CEu0bR-o.js",revision:null},{url:"assets/postcss-CXtECtnM.js",revision:null},{url:"assets/polar-C0HS_06l.js",revision:null},{url:"assets/poimandres-CS3Unz2-.js",revision:null},{url:"assets/po-BTJTHyun.js",revision:null},{url:"assets/plsql-ChMvpjG-.js",revision:null},{url:"assets/plastic-3e1v2bzS.js",revision:null},{url:"assets/pkl-u5AG7uiY.js",revision:null},{url:"assets/php-Csjmro_R.js",revision:null},{url:"assets/perl-B9cMNwum.js",revision:null},{url:"assets/pascal-D93ZcfNL.js",revision:null},{url:"assets/openscad-C4EeE6gA.js",revision:null},{url:"assets/one-light-C3Wv6jpd.js",revision:null},{url:"assets/one-dark-pro-DVMEJ2y_.js",revision:null},{url:"assets/odin-BBf5iR-q.js",revision:null},{url:"assets/ocaml-C0hk2d4L.js",revision:null},{url:"assets/objective-cpp-CLxacb5B.js",revision:null},{url:"assets/objective-c-DXmwc3jG.js",revision:null},{url:"assets/nushell-Cz2AlsmD.js",revision:null},{url:"assets/nord-Ddv68eIx.js",revision:null},{url:"assets/nix-CwoSXNpI.js",revision:null},{url:"assets/nim-BIad80T-.js",revision:null},{url:"assets/night-owl-light-CMTm3GFP.js",revision:null},{url:"assets/night-owl-C39BiMTA.js",revision:null},{url:"assets/nginx-BpAMiNFr.js",revision:null},{url:"assets/nextflow-groovy-vE_lwT2v.js",revision:null},{url:"assets/nextflow-C-mBbutL.js",revision:null},{url:"assets/narrat-DRg8JJMk.js",revision:null},{url:"assets/move-IF9eRakj.js",revision:null},{url:"assets/moonbit-_H4v1dQx.js",revision:null},{url:"assets/monokai-D4h5O-jR.js",revision:null},{url:"assets/mojo-rZm6bMo-.js",revision:null},{url:"assets/mipsasm-CKIfxQSi.js",revision:null},{url:"assets/min-light-CTRr51gU.js",revision:null},{url:"assets/min-dark-CafNBF8u.js",revision:null},{url:"assets/mermaid-mWjccvbQ.js",revision:null},{url:"assets/mdx-Cmh6b_Ma.js",revision:null},{url:"assets/mdc-DTYItulj.js",revision:null},{url:"assets/matlab-D7o27uSR.js",revision:null},{url:"assets/material-theme-palenight-Csfq5Kiy.js",revision:null},{url:"assets/material-theme-ocean-CyktbL80.js",revision:null},{url:"assets/material-theme-lighter-B0m2ddpp.js",revision:null},{url:"assets/material-theme-darker-BfHTSMKl.js",revision:null},{url:"assets/material-theme-D5KoaKCx.js",revision:null},{url:"assets/marko-DjSrsDqO.js",revision:null},{url:"assets/markdown-Cvjx9yec.js",revision:null},{url:"assets/make-CHLpvVh8.js",revision:null},{url:"assets/luau-KW6xsasC.js",revision:null},{url:"assets/lua-BaeVxFsk.js",revision:null},{url:"assets/logo-BtOb2qkB.js",revision:null},{url:"assets/log-2UxHyX5q.js",revision:null},{url:"assets/llvm-DjAJT7YJ.js",revision:null},{url:"assets/liquid-C0sCDyMI.js",revision:null},{url:"assets/light-plus-B7mTdjB0.js",revision:null},{url:"assets/less-B1dDrJ26.js",revision:null},{url:"assets/lean-BZvkOJ9d.js",revision:null},{url:"assets/latex-CaSxy8MP.js",revision:null},{url:"assets/laserwave-DUszq2jm.js",revision:null},{url:"assets/kusto-wEQ09or8.js",revision:null},{url:"assets/kotlin-BdnUsdx6.js",revision:null},{url:"assets/kdl-DV7GczEv.js",revision:null},{url:"assets/kanagawa-wave-DWedfzmr.js",revision:null},{url:"assets/kanagawa-lotus-CfQXZHmo.js",revision:null},{url:"assets/kanagawa-dragon-CkXjmgJE.js",revision:null},{url:"assets/just-CUsbIsdP.js",revision:null},{url:"assets/julia-D7OTSIA_.js",revision:null},{url:"assets/jsx-g9-lgVsj.js",revision:null},{url:"assets/jssm-C2t-YnRu.js",revision:null},{url:"assets/jsonnet-DFQXde-d.js",revision:null},{url:"assets/jsonl-DcaNXYhu.js",revision:null},{url:"assets/jsonc-Des-eS-w.js",revision:null},{url:"assets/json5-C9tS-k6U.js",revision:null},{url:"assets/json-Cp-IABpG.js",revision:null},{url:"assets/jison-wvAkD_A8.js",revision:null},{url:"assets/jinja-f2NsQr07.js",revision:null},{url:"assets/javascript-wDzz0qaB.js",revision:null},{url:"assets/java-CylS5w8V.js",revision:null},{url:"assets/ini-BEwlwnbL.js",revision:null},{url:"assets/index-GFd2V-Ja.css",revision:null},{url:"assets/index-D8oQRDLg.js",revision:null},{url:"assets/imba-DGztddWO.js",revision:null},{url:"assets/hy-DFXneXwc.js",revision:null},{url:"assets/hxml-Bvhsp5Yf.js",revision:null},{url:"assets/hurl-irOxFIW8.js",revision:null},{url:"assets/http-jrhK8wxY.js",revision:null},{url:"assets/html2canvas.esm-QH1iLAAe.js",revision:null},{url:"assets/html-pp8916En.js",revision:null},{url:"assets/html-derivative-DlHx6ybY.js",revision:null},{url:"assets/houston-DnULxvSX.js",revision:null},{url:"assets/horizon-bright-CUuTKBJd.js",revision:null},{url:"assets/horizon-BUw7H-hv.js",revision:null},{url:"assets/hlsl-D3lLCCz7.js",revision:null},{url:"assets/hjson-D5-asLiD.js",revision:null},{url:"assets/hcl-BWvSN4gD.js",revision:null},{url:"assets/haxe-CzTSHFRz.js",revision:null},{url:"assets/haskell-Df6bDoY_.js",revision:null},{url:"assets/handlebars-BpdQsYii.js",revision:null},{url:"assets/haml-D5jkg6IW.js",revision:null},{url:"assets/hack-DbPARsA_.js",revision:null},{url:"assets/gruvbox-light-soft-hJgmCMqR.js",revision:null},{url:"assets/gruvbox-light-medium-DRw_LuNl.js",revision:null},{url:"assets/gruvbox-light-hard-CH1njM8p.js",revision:null},{url:"assets/gruvbox-dark-soft-CVdnzihN.js",revision:null},{url:"assets/gruvbox-dark-medium-GsRaNv29.js",revision:null},{url:"assets/gruvbox-dark-hard-CFHQjOhq.js",revision:null},{url:"assets/groovy-gcz8RCvz.js",revision:null},{url:"assets/graphql-ChdNCCLP.js",revision:null},{url:"assets/go-C27-OAKa.js",revision:null},{url:"assets/gnuplot-DdkO51Og.js",revision:null},{url:"assets/gn-n2N0HUVH.js",revision:null},{url:"assets/glsl-DplSGwfg.js",revision:null},{url:"assets/glimmer-ts-BfAWNZQY.js",revision:null},{url:"assets/glimmer-js-ByusRIyA.js",revision:null},{url:"assets/gleam-BspZqrRM.js",revision:null},{url:"assets/github-light-high-contrast-BfjtVDDH.js",revision:null},{url:"assets/github-light-default-D7oLnXFd.js",revision:null},{url:"assets/github-light-DAi9KRSo.js",revision:null},{url:"assets/github-dark-high-contrast-E3gJ1_iC.js",revision:null},{url:"assets/github-dark-dimmed-DH5Ifo-i.js",revision:null},{url:"assets/github-dark-default-Cuk6v7N8.js",revision:null},{url:"assets/github-dark-DHJKELXO.js",revision:null},{url:"assets/git-rebase-r7XF79zn.js",revision:null},{url:"assets/git-commit-F4YmCXRG.js",revision:null},{url:"assets/gherkin-DyxjwDmM.js",revision:null},{url:"assets/genie-D0YGMca9.js",revision:null},{url:"assets/gdshader-DkwncUOv.js",revision:null},{url:"assets/gdscript-C5YyOfLZ.js",revision:null},{url:"assets/gdresource-BOOCDP_w.js",revision:null},{url:"assets/fsharp-CXgrBDvD.js",revision:null},{url:"assets/fortran-free-form-BxgE0vQu.js",revision:null},{url:"assets/fortran-fixed-form-CkoXwp7k.js",revision:null},{url:"assets/fluent-C4IJs8-o.js",revision:null},{url:"assets/fish-BvzEVeQv.js",revision:null},{url:"assets/fennel-BYunw83y.js",revision:null},{url:"assets/everforest-light-C8M2exoo.js",revision:null},{url:"assets/everforest-dark-BgDCqdQA.js",revision:null},{url:"assets/erlang-DsQrWhSR.js",revision:null},{url:"assets/erb-Dm6A9KJ5.js",revision:null},{url:"assets/emacs-lisp-CXvaQtF9.js",revision:null},{url:"assets/elm-DbKCFpqz.js",revision:null},{url:"assets/elixir-CkH2-t6x.js",revision:null},{url:"assets/edge-FbVlp4U3.js",revision:null},{url:"assets/dream-maker-BtqSS_iP.js",revision:null},{url:"assets/dracula-soft-BXkSAIEj.js",revision:null},{url:"assets/dracula-BzJJZx-M.js",revision:null},{url:"assets/dotenv-Da5cRb03.js",revision:null},{url:"assets/docker-BcOcwvcX.js",revision:null},{url:"assets/diff-D97Zzqfu.js",revision:null},{url:"assets/desktop-BmXAJ9_W.js",revision:null},{url:"assets/dax-CEL-wOlO.js",revision:null},{url:"assets/dart-bE4Kk8sk.js",revision:null},{url:"assets/dark-plus-C3mMm8J8.js",revision:null},{url:"assets/d-85-TOEBH.js",revision:null},{url:"assets/cypher-COkxafJQ.js",revision:null},{url:"assets/cue-D82EKSYY.js",revision:null},{url:"assets/csv-fuZLfV_i.js",revision:null},{url:"assets/css-CLj8gQPS.js",revision:null},{url:"assets/csharp-DSvCPggb.js",revision:null},{url:"assets/crystal-DGywbUpC.js",revision:null},{url:"assets/cpp-UfJy6YNI.js",revision:null},{url:"assets/coq-DkFqJrB1.js",revision:null},{url:"assets/common-lisp-Cg-RD9OK.js",revision:null},{url:"assets/coffee-Ch7k5sss.js",revision:null},{url:"assets/codeql-DsOJ9woJ.js",revision:null},{url:"assets/codeowners-Bp6g37R7.js",revision:null},{url:"assets/cobol-nBiQ_Alo.js",revision:null},{url:"assets/cmake-D1j8_8rp.js",revision:null},{url:"assets/clojure-P80f7IUj.js",revision:null},{url:"assets/clarity-D53aC0YG.js",revision:null},{url:"assets/catppuccin-mocha-D87Tk5Gz.js",revision:null},{url:"assets/catppuccin-macchiato-DQyhUUbL.js",revision:null},{url:"assets/catppuccin-latte-C9dUb6Cb.js",revision:null},{url:"assets/catppuccin-frappe-DFWUc33u.js",revision:null},{url:"assets/cairo-KRGpt6FW.js",revision:null},{url:"assets/cadence-Bv_4Rxtq.js",revision:null},{url:"assets/c3-MRO5bC_T.js",revision:null},{url:"assets/c-BIGW1oBm.js",revision:null},{url:"assets/bsl-BO_Y6i37.js",revision:null},{url:"assets/blade-2xfisSek.js",revision:null},{url:"assets/bird2-BIv1doCn.js",revision:null},{url:"assets/bicep-Bmn6On1c.js",revision:null},{url:"assets/bibtex-CHM0blh-.js",revision:null},{url:"assets/berry-uYugtg8r.js",revision:null},{url:"assets/beancount-k_qm7-4y.js",revision:null},{url:"assets/bat-BkioyH1T.js",revision:null},{url:"assets/ballerina-BFfxhgS-.js",revision:null},{url:"assets/ayu-mirage-32ctXXKs.js",revision:null},{url:"assets/ayu-light-BA47KaF1.js",revision:null},{url:"assets/ayu-dark-DYE7WIF3.js",revision:null},{url:"assets/awk-DMzUqQB5.js",revision:null},{url:"assets/aurora-x-D-2ljcwZ.js",revision:null},{url:"assets/astro-HNnZUWAn.js",revision:null},{url:"assets/asm-D_Q5rh1f.js",revision:null},{url:"assets/asciidoc-Ve4PFQV2.js",revision:null},{url:"assets/ara-BRHolxvo.js",revision:null},{url:"assets/applescript-Co6uUVPk.js",revision:null},{url:"assets/apl-CORt7UWP.js",revision:null},{url:"assets/apex-Dqspr-GT.js",revision:null},{url:"assets/apache-Pmp26Uib.js",revision:null},{url:"assets/angular-ts-BrjP3tb8.js",revision:null},{url:"assets/angular-html-DA-rfuFy.js",revision:null},{url:"assets/andromeeda-C4gqWexZ.js",revision:null},{url:"assets/ada-bCR0ucgS.js",revision:null},{url:"assets/actionscript-3-CoDkCxhg.js",revision:null},{url:"assets/abap-BdImnpbu.js",revision:null},{url:"assets/openfox-192.png",revision:"79feeb86d692c274854e37959a7dae67"},{url:"assets/openfox-512.png",revision:"fee24b214220594b4f595a467e73036e"},{url:"manifest.webmanifest",revision:"c25f372c782e623ab1e768a8dfe350ca"}],{}),s.cleanupOutdatedCaches(),s.registerRoute(new s.NavigationRoute(s.createHandlerBoundToURL("index.html")))});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openfox",
3
- "version": "2.0.42",
3
+ "version": "2.0.44",
4
4
  "description": "Local-LLM-first agentic coding assistant",
5
5
  "type": "module",
6
6
  "bin": {