openfox 2.0.0-beta.10 → 2.0.0-beta.11

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.
@@ -5,18 +5,18 @@ import {
5
5
  generateSessionName,
6
6
  getSessionMessageCount,
7
7
  needsNameGenerationCheck
8
- } from "./chunk-CDDMHSZF.js";
8
+ } from "./chunk-EXYMWI7A.js";
9
9
  import {
10
10
  runChatTurn
11
- } from "./chunk-C75I2KZM.js";
12
- import "./chunk-LR5R7EEE.js";
11
+ } from "./chunk-BU56QFHW.js";
12
+ import "./chunk-EQQDA4D3.js";
13
13
  import "./chunk-DL6ZILAF.js";
14
14
  import "./chunk-PBGOZMVY.js";
15
15
  import "./chunk-VRGRAQDG.js";
16
16
  import {
17
17
  getEventStore
18
- } from "./chunk-NPHYEUYE.js";
19
- import "./chunk-XJEOP6XU.js";
18
+ } from "./chunk-NSBYORD5.js";
19
+ import "./chunk-ITWVFGFV.js";
20
20
  import {
21
21
  createChatMessageMessage,
22
22
  createPhaseChangedMessage,
@@ -161,4 +161,4 @@ export {
161
161
  startChatSession,
162
162
  stopSessionExecution
163
163
  };
164
- //# sourceMappingURL=chat-handler-6COBLIDR.js.map
164
+ //# sourceMappingURL=chat-handler-NMJCOCCB.js.map
@@ -3,7 +3,7 @@ import {
3
3
  injectWorkflowKickoffIfNeeded,
4
4
  runAgentTurn,
5
5
  runChatTurn
6
- } from "./chunk-C75I2KZM.js";
6
+ } from "./chunk-BU56QFHW.js";
7
7
  import {
8
8
  COMPACTION_PROMPT,
9
9
  TurnMetrics,
@@ -59,7 +59,7 @@ import {
59
59
  skillExists,
60
60
  spawnShellProcess,
61
61
  streamLLMPure
62
- } from "./chunk-LR5R7EEE.js";
62
+ } from "./chunk-EQQDA4D3.js";
63
63
  import {
64
64
  getPathSeparator,
65
65
  getPlatformShell,
@@ -94,11 +94,11 @@ import {
94
94
  updateSessionMetadata,
95
95
  updateSessionProvider,
96
96
  updateSessionRunning
97
- } from "./chunk-NPHYEUYE.js";
97
+ } from "./chunk-NSBYORD5.js";
98
98
  import {
99
99
  buildMessagesFromStoredEvents,
100
100
  foldPendingConfirmations
101
- } from "./chunk-XJEOP6XU.js";
101
+ } from "./chunk-ITWVFGFV.js";
102
102
  import {
103
103
  createChatErrorMessage,
104
104
  createChatMessageMessage,
@@ -5282,8 +5282,7 @@ ${summary}`,
5282
5282
  metadataEntries: eventState.metadataEntries,
5283
5283
  contextWindows: [],
5284
5284
  // Derived from events, not stored separately
5285
- executionState: eventState.lastModeWithReminder || eventState.cachedSystemPrompt || hasCachedPrompt ? {
5286
- lastModeWithReminder: eventState.lastModeWithReminder,
5285
+ executionState: eventState.cachedSystemPrompt || hasCachedPrompt ? {
5287
5286
  cachedSystemPrompt: cachedData?.systemPrompt ?? eventState.cachedSystemPrompt,
5288
5287
  dynamicContextHash: cachedData?.hash ?? eventState.dynamicContextHash
5289
5288
  } : null
@@ -5831,7 +5830,7 @@ import { Router as Router6 } from "express";
5831
5830
  import { spawn as spawn5 } from "child_process";
5832
5831
 
5833
5832
  // src/constants.ts
5834
- var VERSION = "2.0.0-beta.10";
5833
+ var VERSION = "2.0.0-beta.11";
5835
5834
 
5836
5835
  // src/server/routes/auto-update.ts
5837
5836
  var updateInProgress = false;
@@ -6134,7 +6133,7 @@ async function createServerHandle(config4) {
6134
6133
  res.json({ project });
6135
6134
  });
6136
6135
  app.get("/api/sessions", async (req, res) => {
6137
- const { getRecentUserPromptsForSession } = await import("./events-PQ3KTI5H.js");
6136
+ const { getRecentUserPromptsForSession } = await import("./events-UGTGGFG3.js");
6138
6137
  const projectId = req.query["projectId"];
6139
6138
  const limit = Math.min(parseInt(req.query["limit"]) || 20, 100);
6140
6139
  const offset = parseInt(req.query["offset"]) || 0;
@@ -6167,8 +6166,8 @@ async function createServerHandle(config4) {
6167
6166
  res.status(201).json({ session });
6168
6167
  });
6169
6168
  app.get("/api/sessions/:id", async (req, res) => {
6170
- const { getEventStore: getEventStore2 } = await import("./events-PQ3KTI5H.js");
6171
- const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-CXORTBAU.js");
6169
+ const { getEventStore: getEventStore2 } = await import("./events-UGTGGFG3.js");
6170
+ const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-YOCGTZYH.js");
6172
6171
  const session = sessionManager.getSession(req.params.id);
6173
6172
  if (!session) {
6174
6173
  return res.status(404).json({ error: "Session not found" });
@@ -6198,8 +6197,8 @@ async function createServerHandle(config4) {
6198
6197
  res.json({ success: true });
6199
6198
  });
6200
6199
  app.post("/api/sessions/:id/provider", async (req, res) => {
6201
- const { getEventStore: getEventStore2 } = await import("./events-PQ3KTI5H.js");
6202
- const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-CXORTBAU.js");
6200
+ const { getEventStore: getEventStore2 } = await import("./events-UGTGGFG3.js");
6201
+ const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-YOCGTZYH.js");
6203
6202
  const sessionId = req.params.id;
6204
6203
  const session = sessionManager.getSession(sessionId);
6205
6204
  if (!session) {
@@ -6241,8 +6240,8 @@ async function createServerHandle(config4) {
6241
6240
  res.json({ success: true });
6242
6241
  });
6243
6242
  app.put("/api/sessions/:id/mode", async (req, res) => {
6244
- const { getEventStore: getEventStore2 } = await import("./events-PQ3KTI5H.js");
6245
- const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-CXORTBAU.js");
6243
+ const { getEventStore: getEventStore2 } = await import("./events-UGTGGFG3.js");
6244
+ const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-YOCGTZYH.js");
6246
6245
  const sessionId = req.params.id;
6247
6246
  const session = sessionManager.getSession(sessionId);
6248
6247
  if (!session) {
@@ -6298,13 +6297,13 @@ async function createServerHandle(config4) {
6298
6297
  if (!callId || approved === void 0) {
6299
6298
  return res.status(400).json({ error: "callId and approved are required" });
6300
6299
  }
6301
- const { providePathConfirmation } = await import("./tools-CQGEU3JK.js");
6300
+ const { providePathConfirmation } = await import("./tools-D3WWIOQD.js");
6302
6301
  const result = providePathConfirmation(callId, approved, alwaysAllow);
6303
6302
  if (!result.found) {
6304
6303
  return res.status(404).json({ error: "No pending path confirmation with that ID" });
6305
6304
  }
6306
- const { getEventStore: getEventStore2 } = await import("./events-PQ3KTI5H.js");
6307
- const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2, foldPendingConfirmations: foldPendingConfirmations2 } = await import("./folding-CXORTBAU.js");
6305
+ const { getEventStore: getEventStore2 } = await import("./events-UGTGGFG3.js");
6306
+ const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2, foldPendingConfirmations: foldPendingConfirmations2 } = await import("./folding-YOCGTZYH.js");
6308
6307
  const { createSessionStateMessage: createSessionStateMessage2 } = await import("./protocol-CN24IKQN.js");
6309
6308
  const eventStore = getEventStore2();
6310
6309
  const events = eventStore.getEvents(sessionId);
@@ -6322,7 +6321,7 @@ async function createServerHandle(config4) {
6322
6321
  if (!callId || !answer) {
6323
6322
  return res.status(400).json({ error: "callId and answer are required" });
6324
6323
  }
6325
- const { provideAnswer: provideAnswer2 } = await import("./tools-CQGEU3JK.js");
6324
+ const { provideAnswer: provideAnswer2 } = await import("./tools-D3WWIOQD.js");
6326
6325
  const found = provideAnswer2(callId, answer);
6327
6326
  if (!found) {
6328
6327
  return res.status(404).json({ error: "No pending question with that ID" });
@@ -6358,14 +6357,14 @@ async function createServerHandle(config4) {
6358
6357
  if (!session) {
6359
6358
  return res.status(404).json({ error: "Session not found" });
6360
6359
  }
6361
- const { stopSessionExecution } = await import("./chat-handler-6COBLIDR.js");
6362
- const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-CQGEU3JK.js");
6360
+ const { stopSessionExecution } = await import("./chat-handler-NMJCOCCB.js");
6361
+ const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-D3WWIOQD.js");
6363
6362
  stopSessionExecution(sessionId, sessionManager);
6364
6363
  abortSession(sessionId);
6365
6364
  cancelQuestionsForSession(sessionId, "Session stopped by user");
6366
6365
  cancelPathConfirmationsForSession(sessionId, "Session stopped by user");
6367
6366
  sessionManager.clearMessageQueue(sessionId);
6368
- const eventStore = (await import("./events-PQ3KTI5H.js")).getEventStore();
6367
+ const eventStore = (await import("./events-UGTGGFG3.js")).getEventStore();
6369
6368
  eventStore.append(sessionId, { type: "running.changed", data: { isRunning: false } });
6370
6369
  res.json({ success: true });
6371
6370
  });
@@ -6379,7 +6378,7 @@ async function createServerHandle(config4) {
6379
6378
  if (typeof messageIndex !== "number" || messageIndex < 0) {
6380
6379
  return res.status(400).json({ error: "messageIndex must be a non-negative number" });
6381
6380
  }
6382
- const { truncateSessionMessages } = await import("./events-PQ3KTI5H.js");
6381
+ const { truncateSessionMessages } = await import("./events-UGTGGFG3.js");
6383
6382
  truncateSessionMessages(sessionId, messageIndex);
6384
6383
  res.json({ success: true });
6385
6384
  });
@@ -6397,7 +6396,7 @@ async function createServerHandle(config4) {
6397
6396
  if (!msg) {
6398
6397
  return res.status(400).json({ error: "Message not found at this index" });
6399
6398
  }
6400
- const { truncateSessionMessages } = await import("./events-PQ3KTI5H.js");
6399
+ const { truncateSessionMessages } = await import("./events-UGTGGFG3.js");
6401
6400
  truncateSessionMessages(sessionId, messageIndex - 1);
6402
6401
  sessionManager.queueMessage(sessionId, "asap", msg.content, msg.attachments, msg.messageKind);
6403
6402
  res.json({ success: true });
@@ -6895,7 +6894,7 @@ async function createServerHandle(config4) {
6895
6894
  providerManager
6896
6895
  );
6897
6896
  const wss = wssExports.wss;
6898
- const { QueueProcessor } = await import("./processor-WMAU4C2N.js");
6897
+ const { QueueProcessor } = await import("./processor-GHESQ2YV.js");
6899
6898
  const queueProcessor = new QueueProcessor({
6900
6899
  sessionManager,
6901
6900
  providerManager,
@@ -6967,4 +6966,4 @@ export {
6967
6966
  createServerHandle,
6968
6967
  createServer
6969
6968
  };
6970
- //# sourceMappingURL=chunk-G4SACK4E.js.map
6969
+ //# sourceMappingURL=chunk-4RLDN2LL.js.map
@@ -4,6 +4,7 @@ import {
4
4
  WORKFLOW_KICKOFF_PROMPT,
5
5
  assembleAgentRequest,
6
6
  buildAgentReminder,
7
+ buildAgentSmallReminder,
7
8
  createAssemblyResult,
8
9
  createChatDoneEvent,
9
10
  createMessageStartEvent,
@@ -16,16 +17,16 @@ import {
16
17
  loadAllAgentsDefault,
17
18
  processEventsForConversation,
18
19
  runTopLevelAgentLoop
19
- } from "./chunk-LR5R7EEE.js";
20
+ } from "./chunk-EQQDA4D3.js";
20
21
  import {
21
22
  getCurrentContextWindowId,
22
23
  getCurrentWindowMessageOptions,
23
24
  getEventStore,
24
25
  getRuntimeConfig
25
- } from "./chunk-NPHYEUYE.js";
26
+ } from "./chunk-NSBYORD5.js";
26
27
  import {
27
28
  buildSnapshotFromSessionState
28
- } from "./chunk-XJEOP6XU.js";
29
+ } from "./chunk-ITWVFGFV.js";
29
30
  import {
30
31
  logger
31
32
  } from "./chunk-K44MW7JJ.js";
@@ -166,28 +167,24 @@ async function runChatTurn(options) {
166
167
  eventStore.append(sessionId, { type: "running.changed", data: { isRunning: false } });
167
168
  }
168
169
  }
169
- function windowHasReminder(sessionId, windowId) {
170
+ function injectAgentReminder(sessionId, agentDef) {
170
171
  const eventStore = getEventStore();
171
- const events = eventStore.getEvents(sessionId);
172
- return events.some((event) => {
173
- if (event.type !== "message.start") return false;
174
- const data = event.data;
175
- return data.contextWindowId === windowId && data.messageKind === "auto-prompt" && typeof data.content === "string" && data.content.includes("<system-reminder>");
176
- });
177
- }
178
- function injectModeReminderIfNeeded(sessionManager, sessionId, agentId, allAgents, _onMessage) {
179
- const eventStore = getEventStore();
180
- const session = sessionManager.requireSession(sessionId);
181
172
  const currentWindowId = getCurrentContextWindowId(sessionId);
182
- const lastModeReminder = session.executionState?.lastModeWithReminder;
183
- if (lastModeReminder === agentId) {
184
- if (!currentWindowId || windowHasReminder(sessionId, currentWindowId)) {
185
- return;
173
+ let latestAgentName;
174
+ const events = eventStore.getAllEvents(sessionId);
175
+ for (let i = events.length - 1; i >= 0; i--) {
176
+ const event = events[i];
177
+ if (event.type === "message.start") {
178
+ const data = event.data;
179
+ if (data.isSystemGenerated && data.metadata?.type === "agent" && (data.contextWindowId === currentWindowId || !currentWindowId && !data.contextWindowId)) {
180
+ latestAgentName = data.metadata.name;
181
+ break;
182
+ }
186
183
  }
187
184
  }
188
- const agentDef = findAgentById(agentId, allAgents);
189
- if (!agentDef) return;
190
- const reminderContent = buildAgentReminder(agentDef);
185
+ const currentAgentName = agentDef.metadata.name ?? agentDef.metadata.id;
186
+ const isSmallReminder = latestAgentName === currentAgentName;
187
+ const content = isSmallReminder ? buildAgentSmallReminder(currentAgentName) : buildAgentReminder(agentDef);
191
188
  const reminderMsgId = crypto.randomUUID();
192
189
  const currentWindowMessageOptions = currentWindowId ? { contextWindowId: currentWindowId } : void 0;
193
190
  eventStore.append(sessionId, {
@@ -195,14 +192,15 @@ function injectModeReminderIfNeeded(sessionManager, sessionId, agentId, allAgent
195
192
  data: {
196
193
  messageId: reminderMsgId,
197
194
  role: "user",
198
- content: reminderContent,
195
+ content,
199
196
  ...currentWindowMessageOptions ?? {},
200
197
  isSystemGenerated: true,
201
198
  messageKind: "auto-prompt",
202
199
  metadata: {
203
200
  type: "agent",
204
- name: agentDef.metadata.name ?? agentDef.metadata.id,
205
- color: agentDef.metadata.color ?? "#6b7280"
201
+ name: currentAgentName,
202
+ color: agentDef.metadata.color ?? "#6b7280",
203
+ kind: isSmallReminder ? "reminder" : "definition"
206
204
  }
207
205
  }
208
206
  });
@@ -210,15 +208,12 @@ function injectModeReminderIfNeeded(sessionManager, sessionId, agentId, allAgent
210
208
  type: "message.done",
211
209
  data: { messageId: reminderMsgId }
212
210
  });
213
- sessionManager.updateExecutionState(sessionId, {
214
- lastModeWithReminder: agentId
215
- });
216
211
  }
217
212
  async function runAgentTurn(options, turnMetrics, agentId, append, callbacks) {
218
213
  const statsIdentity = resolveStatsIdentity(options);
219
214
  const allAgents = await loadAllAgentsDefault();
220
- injectModeReminderIfNeeded(options.sessionManager, options.sessionId, agentId, allAgents, options.onMessage);
221
215
  const agentDef = findAgentById(agentId, allAgents) ?? findAgentById("planner", allAgents);
216
+ injectAgentReminder(options.sessionId, agentDef);
222
217
  const subAgentDefs = getSubAgents(allAgents);
223
218
  const { content: instructionContent } = await getAllInstructions(
224
219
  options.sessionManager.requireSession(options.sessionId).workdir,
@@ -266,7 +261,7 @@ async function runAgentTurn(options, turnMetrics, agentId, append, callbacks) {
266
261
  },
267
262
  getToolRegistry: () => getToolRegistryForAgent(agentDef),
268
263
  getConversationMessages: buildGetConversationMessages(options.sessionId, options.llmClient, append),
269
- injectModeReminder: () => injectModeReminderIfNeeded(options.sessionManager, options.sessionId, agentId, allAgents, options.onMessage),
264
+ injectAgentReminder: () => injectAgentReminder(options.sessionId, agentDef),
270
265
  ...callbacks?.injectKickoff ? { injectKickoff: callbacks.injectKickoff } : {},
271
266
  ...callbacks?.onToolExecuted ? { onToolExecuted: callbacks.onToolExecuted } : {}
272
267
  },
@@ -317,4 +312,4 @@ export {
317
312
  runAgentTurn,
318
313
  injectWorkflowKickoffIfNeeded
319
314
  };
320
- //# sourceMappingURL=chunk-C75I2KZM.js.map
315
+ //# sourceMappingURL=chunk-BU56QFHW.js.map
@@ -19,7 +19,7 @@ import {
19
19
  getCurrentWindowMessageOptions,
20
20
  getEventStore,
21
21
  getRuntimeConfig
22
- } from "./chunk-NPHYEUYE.js";
22
+ } from "./chunk-NSBYORD5.js";
23
23
  import {
24
24
  buildContextMessagesFromEventHistory,
25
25
  foldContextState,
@@ -28,7 +28,7 @@ import {
28
28
  handleToolCall,
29
29
  handleToolResult,
30
30
  stripOrphanedToolCalls
31
- } from "./chunk-XJEOP6XU.js";
31
+ } from "./chunk-ITWVFGFV.js";
32
32
  import {
33
33
  createChatDoneMessage,
34
34
  createChatMessageMessage,
@@ -1955,6 +1955,11 @@ function buildAgentReminder(agentDef) {
1955
1955
  ${agentDef.prompt}${toolPermissions}
1956
1956
  </system-reminder>`;
1957
1957
  }
1958
+ function buildAgentSmallReminder(name) {
1959
+ return `<system-reminder>
1960
+ Reminder: you are in '${name}' mode.
1961
+ </system-reminder>`;
1962
+ }
1958
1963
  var WORKFLOW_KICKOFF_PROMPT = (criteriaCount) => `Implement the task and make sure you fulfil the ${criteriaCount} criteria.`;
1959
1964
  var COMPACTION_PROMPT = `You are a helpful AI assistant tasked with summarizing conversations for continuation.
1960
1965
 
@@ -3100,7 +3105,7 @@ ${COMPACTION_PROMPT}`,
3100
3105
  });
3101
3106
  append(createMessageDoneEvent(assistantMsgId, { stats: turnMetrics.buildStats(statsIdentity, mode) }));
3102
3107
  append(createChatDoneEvent(assistantMsgId, "complete"));
3103
- config.injectModeReminder?.();
3108
+ config.injectAgentReminder?.();
3104
3109
  compacting = false;
3105
3110
  continue;
3106
3111
  }
@@ -3730,7 +3735,7 @@ var callSubAgentTool = {
3730
3735
  };
3731
3736
  }
3732
3737
  try {
3733
- const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-CQGEU3JK.js");
3738
+ const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-D3WWIOQD.js");
3734
3739
  const toolRegistry = getToolRegistryForAgent2(agentDef);
3735
3740
  const turnMetrics = new TurnMetrics();
3736
3741
  const result = await executeSubAgent({
@@ -4738,6 +4743,7 @@ export {
4738
4743
  buildBasePrompt,
4739
4744
  buildTopLevelSystemPrompt,
4740
4745
  buildAgentReminder,
4746
+ buildAgentSmallReminder,
4741
4747
  WORKFLOW_KICKOFF_PROMPT,
4742
4748
  COMPACTION_PROMPT,
4743
4749
  streamLLMPure,
@@ -4781,4 +4787,4 @@ export {
4781
4787
  getToolRegistryForAgent,
4782
4788
  createToolRegistry
4783
4789
  };
4784
- //# sourceMappingURL=chunk-LR5R7EEE.js.map
4790
+ //# sourceMappingURL=chunk-EQQDA4D3.js.map
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  getEventStore,
3
3
  updateSessionMetadata
4
- } from "./chunk-NPHYEUYE.js";
4
+ } from "./chunk-NSBYORD5.js";
5
5
  import {
6
6
  buildMessagesFromStoredEvents,
7
7
  foldPendingConfirmations
8
- } from "./chunk-XJEOP6XU.js";
8
+ } from "./chunk-ITWVFGFV.js";
9
9
  import {
10
10
  createContextStateMessage,
11
11
  createSessionStateMessage
@@ -143,4 +143,4 @@ export {
143
143
  needsNameGenerationCheck,
144
144
  applyGeneratedSessionName
145
145
  };
146
- //# sourceMappingURL=chunk-CDDMHSZF.js.map
146
+ //# sourceMappingURL=chunk-EXYMWI7A.js.map
@@ -621,30 +621,12 @@ function foldSessionState(events, initialWindowId, maxTokens, initialMessages) {
621
621
  dynamicContextChanged: false
622
622
  };
623
623
  const contextState = baseContextState.compactionCount !== contextResult.compactionCount || baseContextState.maxTokens !== maxTokens ? { ...baseContextState, compactionCount: contextResult.compactionCount, maxTokens } : { ...baseContextState, maxTokens };
624
- let messageReminderMode;
625
- let snapshotReminderMode;
626
624
  let cachedSystemPrompt;
627
625
  let dynamicContextHash;
628
626
  for (let i = events.length - 1; i >= 0; i--) {
629
627
  const event = events[i];
630
- if (event.type === "message.start") {
631
- const data = event.data;
632
- if (data.role === "user" && data.messageKind === "auto-prompt" && data.content?.includes("<system-reminder>")) {
633
- if (data.content.includes("Plan Mode")) {
634
- messageReminderMode = { seq: event.seq, mode: "planner" };
635
- } else if (data.content.includes("Build Mode")) {
636
- messageReminderMode = { seq: event.seq, mode: "builder" };
637
- }
638
- }
639
- }
640
628
  if (event.type === "turn.snapshot") {
641
629
  const snapshotData = event.data;
642
- if (snapshotData.lastModeWithReminder) {
643
- snapshotReminderMode = {
644
- seq: event.seq,
645
- mode: snapshotData.lastModeWithReminder
646
- };
647
- }
648
630
  if (snapshotData.cachedSystemPrompt && !cachedSystemPrompt) {
649
631
  cachedSystemPrompt = snapshotData.cachedSystemPrompt;
650
632
  }
@@ -656,14 +638,6 @@ function foldSessionState(events, initialWindowId, maxTokens, initialMessages) {
656
638
  }
657
639
  }
658
640
  }
659
- let lastModeWithReminder;
660
- if (messageReminderMode && snapshotReminderMode) {
661
- lastModeWithReminder = messageReminderMode.seq > snapshotReminderMode.seq ? messageReminderMode.mode : snapshotReminderMode.mode;
662
- } else if (snapshotReminderMode) {
663
- lastModeWithReminder = snapshotReminderMode.mode;
664
- } else if (messageReminderMode) {
665
- lastModeWithReminder = messageReminderMode.mode;
666
- }
667
641
  let sessionInit;
668
642
  let sessionTitle;
669
643
  const visionFallbacks = [];
@@ -758,7 +732,6 @@ function foldSessionState(events, initialWindowId, maxTokens, initialMessages) {
758
732
  contextState,
759
733
  currentContextWindowId: contextResult.currentContextWindowId,
760
734
  readFiles: contextResult.readFiles,
761
- ...lastModeWithReminder !== void 0 && { lastModeWithReminder },
762
735
  ...cachedSystemPrompt !== void 0 && { cachedSystemPrompt },
763
736
  ...dynamicContextHash !== void 0 && { dynamicContextHash },
764
737
  pendingConfirmations,
@@ -784,7 +757,6 @@ function buildSnapshot(foldedState, latestSeq, snapshotAt = Date.now()) {
784
757
  currentContextWindowId: foldedState.currentContextWindowId,
785
758
  todos: foldedState.todos,
786
759
  readFiles: foldedState.readFiles,
787
- ...foldedState.lastModeWithReminder !== void 0 && { lastModeWithReminder: foldedState.lastModeWithReminder },
788
760
  ...foldedState.cachedSystemPrompt !== void 0 && { cachedSystemPrompt: foldedState.cachedSystemPrompt },
789
761
  ...foldedState.dynamicContextHash !== void 0 && { dynamicContextHash: foldedState.dynamicContextHash },
790
762
  snapshotSeq: latestSeq,
@@ -841,7 +813,6 @@ function buildSnapshotFromSessionState(input) {
841
813
  snapshotSeq: latestSeq,
842
814
  snapshotAt,
843
815
  ...foldedState.sessionInit !== void 0 && { sessionInit: foldedState.sessionInit },
844
- ...foldedState.lastModeWithReminder !== void 0 && { lastModeWithReminder: foldedState.lastModeWithReminder },
845
816
  ...input.cachedSystemPrompt !== void 0 ? { cachedSystemPrompt: input.cachedSystemPrompt } : foldedState.cachedSystemPrompt !== void 0 ? { cachedSystemPrompt: foldedState.cachedSystemPrompt } : {},
846
817
  ...input.dynamicContextHash !== void 0 ? { dynamicContextHash: input.dynamicContextHash } : foldedState.dynamicContextHash !== void 0 ? { dynamicContextHash: foldedState.dynamicContextHash } : {}
847
818
  };
@@ -885,4 +856,4 @@ export {
885
856
  getMessagesForWindow,
886
857
  buildContextMessagesFromMessages
887
858
  };
888
- //# sourceMappingURL=chunk-XJEOP6XU.js.map
859
+ //# sourceMappingURL=chunk-ITWVFGFV.js.map
@@ -193,7 +193,7 @@ async function runCli(options) {
193
193
  if (!configExists) {
194
194
  await runNetworkSetup(mode);
195
195
  }
196
- const { runServe } = await import("./serve-7VMTNIXT.js");
196
+ const { runServe } = await import("./serve-I6T7V62Z.js");
197
197
  const serveOptions = { mode };
198
198
  if (values.port) serveOptions.port = parseInt(values.port);
199
199
  if (values["no-browser"] === true) serveOptions.openBrowser = false;
@@ -205,4 +205,4 @@ async function runCli(options) {
205
205
  export {
206
206
  runCli
207
207
  };
208
- //# sourceMappingURL=chunk-BE2S4NJX.js.map
208
+ //# sourceMappingURL=chunk-LCRJWUW7.js.map
@@ -5,7 +5,7 @@ import {
5
5
  foldContextState,
6
6
  foldSessionState,
7
7
  spreadOptionalMessageFields
8
- } from "./chunk-XJEOP6XU.js";
8
+ } from "./chunk-ITWVFGFV.js";
9
9
  import {
10
10
  getDatabase
11
11
  } from "./chunk-FBGWG4N6.js";
@@ -263,6 +263,55 @@ var EventStore = class {
263
263
  events
264
264
  };
265
265
  }
266
+ /**
267
+ * Get ALL events for a session, including synthetic events reconstructed
268
+ * from the latest snapshot's messages. This provides a unified view of the
269
+ * full event history even after cleanupOldEvents has deleted raw events.
270
+ *
271
+ * Synthetic events have seq=0 and are reconstructed as message.start +
272
+ * message.done pairs from snapshot messages. Real events since the snapshot
273
+ * keep their original seq numbers.
274
+ */
275
+ getAllEvents(sessionId) {
276
+ const { snapshot, events } = this.getEventsSinceSnapshot(sessionId);
277
+ if (!snapshot) {
278
+ return events;
279
+ }
280
+ const syntheticEvents = [];
281
+ for (const msg of snapshot.messages) {
282
+ syntheticEvents.push({
283
+ seq: 0,
284
+ timestamp: msg.timestamp,
285
+ sessionId,
286
+ type: "message.start",
287
+ data: {
288
+ messageId: msg.id,
289
+ role: msg.role,
290
+ content: msg.content,
291
+ ...msg.contextWindowId !== void 0 && { contextWindowId: msg.contextWindowId },
292
+ ...msg.isSystemGenerated !== void 0 && { isSystemGenerated: msg.isSystemGenerated },
293
+ ...msg.messageKind !== void 0 && { messageKind: msg.messageKind },
294
+ ...msg.metadata !== void 0 && { metadata: msg.metadata },
295
+ ...msg.subAgentId !== void 0 && { subAgentId: msg.subAgentId },
296
+ ...msg.subAgentType !== void 0 && { subAgentType: msg.subAgentType },
297
+ ...msg.isCompactionSummary !== void 0 && { isCompactionSummary: msg.isCompactionSummary },
298
+ ...msg.attachments !== void 0 && { attachments: msg.attachments }
299
+ }
300
+ });
301
+ syntheticEvents.push({
302
+ seq: 0,
303
+ timestamp: msg.timestamp,
304
+ sessionId,
305
+ type: "message.done",
306
+ data: { messageId: msg.id }
307
+ });
308
+ }
309
+ return [...syntheticEvents, ...events].sort((a, b) => {
310
+ const tsDiff = a.timestamp - b.timestamp;
311
+ if (tsDiff !== 0) return tsDiff;
312
+ return a.seq - b.seq;
313
+ });
314
+ }
266
315
  rowToStoredEvent(row) {
267
316
  return {
268
317
  seq: row.seq,
@@ -1373,4 +1422,4 @@ export {
1373
1422
  compactContext,
1374
1423
  getRecentUserPromptsForSession
1375
1424
  };
1376
- //# sourceMappingURL=chunk-NPHYEUYE.js.map
1425
+ //# sourceMappingURL=chunk-NSBYORD5.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-BE2S4NJX.js";
4
+ } from "../chunk-LCRJWUW7.js";
5
5
  import {
6
6
  logger
7
7
  } from "../chunk-K44MW7JJ.js";
package/dist/cli/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runCli
4
- } from "../chunk-BE2S4NJX.js";
4
+ } from "../chunk-LCRJWUW7.js";
5
5
  import {
6
6
  logger
7
7
  } from "../chunk-K44MW7JJ.js";
@@ -39,7 +39,7 @@ import {
39
39
  isStoredEvent,
40
40
  isTurnEvent,
41
41
  truncateSessionMessages
42
- } from "./chunk-NPHYEUYE.js";
42
+ } from "./chunk-NSBYORD5.js";
43
43
  import {
44
44
  buildContextMessagesFromEventHistory,
45
45
  buildContextMessagesFromMessages,
@@ -56,7 +56,7 @@ import {
56
56
  foldTodos,
57
57
  foldTurnEventsToSnapshotMessages,
58
58
  getMessagesForWindow
59
- } from "./chunk-XJEOP6XU.js";
59
+ } from "./chunk-ITWVFGFV.js";
60
60
  import "./chunk-FBGWG4N6.js";
61
61
  import "./chunk-K44MW7JJ.js";
62
62
  export {
@@ -116,4 +116,4 @@ export {
116
116
  isTurnEvent,
117
117
  truncateSessionMessages
118
118
  };
119
- //# sourceMappingURL=events-PQ3KTI5H.js.map
119
+ //# sourceMappingURL=events-UGTGGFG3.js.map
@@ -23,7 +23,7 @@ import {
23
23
  handleToolResult,
24
24
  spreadOptionalMessageFields,
25
25
  stripOrphanedToolCalls
26
- } from "./chunk-XJEOP6XU.js";
26
+ } from "./chunk-ITWVFGFV.js";
27
27
  export {
28
28
  buildContextMessagesFromEventHistory,
29
29
  buildContextMessagesFromMessages,
@@ -50,4 +50,4 @@ export {
50
50
  spreadOptionalMessageFields,
51
51
  stripOrphanedToolCalls
52
52
  };
53
- //# sourceMappingURL=folding-CXORTBAU.js.map
53
+ //# sourceMappingURL=folding-YOCGTZYH.js.map
@@ -2,7 +2,7 @@ import {
2
2
  injectWorkflowKickoffIfNeeded,
3
3
  runAgentTurn,
4
4
  runChatTurn
5
- } from "./chunk-C75I2KZM.js";
5
+ } from "./chunk-BU56QFHW.js";
6
6
  import {
7
7
  TurnMetrics,
8
8
  createChatDoneEvent,
@@ -10,12 +10,12 @@ import {
10
10
  createMessageStartEvent,
11
11
  createToolCallEvent,
12
12
  createToolResultEvent
13
- } from "./chunk-LR5R7EEE.js";
13
+ } from "./chunk-EQQDA4D3.js";
14
14
  import "./chunk-DL6ZILAF.js";
15
15
  import "./chunk-PBGOZMVY.js";
16
16
  import "./chunk-VRGRAQDG.js";
17
- import "./chunk-NPHYEUYE.js";
18
- import "./chunk-XJEOP6XU.js";
17
+ import "./chunk-NSBYORD5.js";
18
+ import "./chunk-ITWVFGFV.js";
19
19
  import "./chunk-7TTEGAO6.js";
20
20
  import "./chunk-BJYPTN5S.js";
21
21
  import "./chunk-RFNEDBVO.js";
@@ -36,4 +36,4 @@ export {
36
36
  runAgentTurn,
37
37
  runChatTurn
38
38
  };
39
- //# sourceMappingURL=orchestrator-ZNGTMZ7W.js.map
39
+ //# sourceMappingURL=orchestrator-75L5UGDU.js.map
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openfox",
3
- "version": "2.0.0-beta.10",
3
+ "version": "2.0.0-beta.11",
4
4
  "description": "Local-LLM-first agentic coding assistant",
5
5
  "type": "module",
6
6
  "bin": {
@@ -5,11 +5,11 @@ import {
5
5
  generateSessionName,
6
6
  getSessionMessageCount,
7
7
  needsNameGenerationCheck
8
- } from "./chunk-CDDMHSZF.js";
8
+ } from "./chunk-EXYMWI7A.js";
9
9
  import {
10
10
  getEventStore
11
- } from "./chunk-NPHYEUYE.js";
12
- import "./chunk-XJEOP6XU.js";
11
+ } from "./chunk-NSBYORD5.js";
12
+ import "./chunk-ITWVFGFV.js";
13
13
  import {
14
14
  createChatMessageMessage,
15
15
  createSessionRunningMessage
@@ -176,7 +176,7 @@ var QueueProcessor = class {
176
176
  backend: provider?.backend ?? llmClient.getBackend(),
177
177
  model: llmClient.getModel()
178
178
  };
179
- const { runChatTurn } = await import("./orchestrator-ZNGTMZ7W.js");
179
+ const { runChatTurn } = await import("./orchestrator-75L5UGDU.js");
180
180
  const runChatTurnParams = buildRunChatTurnParams({
181
181
  sessionManager,
182
182
  sessionId,
@@ -220,4 +220,4 @@ var QueueProcessor = class {
220
220
  export {
221
221
  QueueProcessor
222
222
  };
223
- //# sourceMappingURL=processor-WMAU4C2N.js.map
223
+ //# sourceMappingURL=processor-GHESQ2YV.js.map
@@ -238,6 +238,7 @@ interface Message {
238
238
  type: string;
239
239
  name: string;
240
240
  color: string;
241
+ kind?: 'definition' | 'reminder';
241
242
  };
242
243
  }
243
244
  interface ToolCall {
@@ -347,7 +348,6 @@ interface ExecutionState {
347
348
  compactionCount: number;
348
349
  startedAt: string;
349
350
  lastActivityAt: string;
350
- lastModeWithReminder?: string;
351
351
  cachedSystemPrompt?: string;
352
352
  dynamicContextHash?: string;
353
353
  dynamicContextChanged?: boolean;
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  VERSION,
3
3
  createServer
4
- } from "./chunk-G4SACK4E.js";
4
+ } from "./chunk-4RLDN2LL.js";
5
5
  import "./chunk-RI6GAMNP.js";
6
- import "./chunk-C75I2KZM.js";
7
- import "./chunk-LR5R7EEE.js";
6
+ import "./chunk-BU56QFHW.js";
7
+ import "./chunk-EQQDA4D3.js";
8
8
  import "./chunk-DL6ZILAF.js";
9
9
  import "./chunk-PBGOZMVY.js";
10
10
  import "./chunk-VRGRAQDG.js";
11
11
  import {
12
12
  loadConfig
13
- } from "./chunk-NPHYEUYE.js";
14
- import "./chunk-XJEOP6XU.js";
13
+ } from "./chunk-NSBYORD5.js";
14
+ import "./chunk-ITWVFGFV.js";
15
15
  import "./chunk-7TTEGAO6.js";
16
16
  import "./chunk-BJYPTN5S.js";
17
17
  import "./chunk-RFNEDBVO.js";
@@ -189,4 +189,4 @@ async function runServe(options) {
189
189
  export {
190
190
  runServe
191
191
  };
192
- //# sourceMappingURL=serve-7VMTNIXT.js.map
192
+ //# sourceMappingURL=serve-I6T7V62Z.js.map
@@ -1,4 +1,4 @@
1
- import { aN as ToolCall, c as Attachment, R as Diagnostic, am as Provider, ab as ModelConfig, az as Session, aI as SessionSummary, ai as Project, aD as SessionMode, aF as SessionPhase, M as Message, J as Criterion, L as CriterionStatus, a8 as MetadataEntry, av as QueuedMessage, F as ContextState, O as DangerLevel$1, ax as ServerMessage, aK as StatsIdentity, aQ as ToolResult, D as Config } from '../protocol-CDOV1pyc.js';
1
+ import { aN as ToolCall, c as Attachment, R as Diagnostic, am as Provider, ab as ModelConfig, az as Session, aI as SessionSummary, ai as Project, aD as SessionMode, aF as SessionPhase, M as Message, J as Criterion, L as CriterionStatus, a8 as MetadataEntry, av as QueuedMessage, F as ContextState, O as DangerLevel$1, ax as ServerMessage, aK as StatsIdentity, aQ as ToolResult, D as Config } from '../protocol-B9R1CUvt.js';
2
2
  import { Server } from 'node:http';
3
3
 
4
4
  interface LLMMessage {
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  createServer,
3
3
  createServerHandle
4
- } from "../chunk-G4SACK4E.js";
4
+ } from "../chunk-4RLDN2LL.js";
5
5
  import "../chunk-RI6GAMNP.js";
6
- import "../chunk-C75I2KZM.js";
7
- import "../chunk-LR5R7EEE.js";
6
+ import "../chunk-BU56QFHW.js";
7
+ import "../chunk-EQQDA4D3.js";
8
8
  import "../chunk-DL6ZILAF.js";
9
9
  import "../chunk-PBGOZMVY.js";
10
10
  import "../chunk-VRGRAQDG.js";
11
- import "../chunk-NPHYEUYE.js";
12
- import "../chunk-XJEOP6XU.js";
11
+ import "../chunk-NSBYORD5.js";
12
+ import "../chunk-ITWVFGFV.js";
13
13
  import "../chunk-7TTEGAO6.js";
14
14
  import "../chunk-BJYPTN5S.js";
15
15
  import "../chunk-RFNEDBVO.js";
@@ -1,5 +1,5 @@
1
- import { M as Message, S as SessionStats } from '../protocol-CDOV1pyc.js';
2
- export { A as AgentEvent, a as AskAnswerPayload, b as AskUserEvent, c as Attachment, B as BackgroundProcess, d as BackgroundProcessExitedPayload, e as BackgroundProcessOutputPayload, f as BackgroundProcessRemovedPayload, g as BackgroundProcessStartedPayload, h as BackgroundProcessStatus, C as CallStatsDataPoint, i as ChatAskUserPayload, j as ChatDeltaPayload, k as ChatDonePayload, l as ChatErrorPayload, m as ChatFormatRetryPayload, n as ChatMessagePayload, o as ChatMessageUpdatedPayload, p as ChatPathConfirmationPayload, q as ChatProgressPayload, r as ChatThinkingPayload, s as ChatTodoPayload, t as ChatToolCallPayload, u as ChatToolOutputPayload, v as ChatToolPreparingPayload, w as ChatToolResultPayload, x as ChatVisionFallbackPayload, y as ClientMessage, z as ClientMessageType, D as Config, E as ContextCompactionEvent, F as ContextState, G as ContextStatePayload, H as ContextWindow, I as CriteriaUpdatedPayload, J as Criterion, K as CriterionAttempt, L as CriterionStatus, N as CriterionValidation, O as DangerLevel, P as DevServerOutputPayload, Q as DevServerStatePayload, R as Diagnostic, T as EditContextEdit, U as EditContextLine, V as EditContextRegion, W as ElementData, X as ErrorPayload, Y as ExecutionState, Z as FileReadEntry, _ as GitDiffFile, $ as GitStatusPayload, a0 as InjectedFile, a1 as LLMCallStats, a2 as LlmBackend, a3 as LogLine, a4 as LspDiagnosticsPayload, a5 as MessageRole, a6 as MessageSegment, a7 as MessageStats, a8 as MetadataEntry, a9 as MetadataUpdatedPayload, aa as ModeChangedPayload, ab as ModelConfig, ac as ModelSessionStats, ad as PathConfirmPayload, ae as PathConfirmationReason, af as PendingPathConfirmationPayload, ag as PhaseChangedPayload, ah as PreparingToolCall, ai as Project, aj as ProjectDeletedPayload, ak as ProjectListPayload, al as ProjectStatePayload, am as Provider, an as ProviderBackend, ao as ProviderChangedPayload, ap as QueueAddedEvent, aq as QueueCancelledEvent, ar as QueueDrainedEvent, as as QueueEvent, at as QueueEventType, au as QueueStatePayload, av as QueuedMessage, aw as RecentUserPrompt, ax as ServerMessage, ay as ServerMessageType, az as Session, aA as SessionListPayload, aB as SessionLoadPayload, aC as SessionMetadata, aD as SessionMode, aE as SessionNameGeneratedPayload, aF as SessionPhase, aG as SessionRunningPayload, aH as SessionStatePayload, aI as SessionSummary, aJ as StatsDataPoint, aK as StatsIdentity, aL as TaskCompletedPayload, aM as Todo, aN as ToolCall, aO as ToolMode, aP as ToolName, aQ as ToolResult, aR as ValidationResult, aS as createClientMessage, aT as createServerMessage, aU as isClientMessage, aV as isServerMessage } from '../protocol-CDOV1pyc.js';
1
+ import { M as Message, S as SessionStats } from '../protocol-B9R1CUvt.js';
2
+ export { A as AgentEvent, a as AskAnswerPayload, b as AskUserEvent, c as Attachment, B as BackgroundProcess, d as BackgroundProcessExitedPayload, e as BackgroundProcessOutputPayload, f as BackgroundProcessRemovedPayload, g as BackgroundProcessStartedPayload, h as BackgroundProcessStatus, C as CallStatsDataPoint, i as ChatAskUserPayload, j as ChatDeltaPayload, k as ChatDonePayload, l as ChatErrorPayload, m as ChatFormatRetryPayload, n as ChatMessagePayload, o as ChatMessageUpdatedPayload, p as ChatPathConfirmationPayload, q as ChatProgressPayload, r as ChatThinkingPayload, s as ChatTodoPayload, t as ChatToolCallPayload, u as ChatToolOutputPayload, v as ChatToolPreparingPayload, w as ChatToolResultPayload, x as ChatVisionFallbackPayload, y as ClientMessage, z as ClientMessageType, D as Config, E as ContextCompactionEvent, F as ContextState, G as ContextStatePayload, H as ContextWindow, I as CriteriaUpdatedPayload, J as Criterion, K as CriterionAttempt, L as CriterionStatus, N as CriterionValidation, O as DangerLevel, P as DevServerOutputPayload, Q as DevServerStatePayload, R as Diagnostic, T as EditContextEdit, U as EditContextLine, V as EditContextRegion, W as ElementData, X as ErrorPayload, Y as ExecutionState, Z as FileReadEntry, _ as GitDiffFile, $ as GitStatusPayload, a0 as InjectedFile, a1 as LLMCallStats, a2 as LlmBackend, a3 as LogLine, a4 as LspDiagnosticsPayload, a5 as MessageRole, a6 as MessageSegment, a7 as MessageStats, a8 as MetadataEntry, a9 as MetadataUpdatedPayload, aa as ModeChangedPayload, ab as ModelConfig, ac as ModelSessionStats, ad as PathConfirmPayload, ae as PathConfirmationReason, af as PendingPathConfirmationPayload, ag as PhaseChangedPayload, ah as PreparingToolCall, ai as Project, aj as ProjectDeletedPayload, ak as ProjectListPayload, al as ProjectStatePayload, am as Provider, an as ProviderBackend, ao as ProviderChangedPayload, ap as QueueAddedEvent, aq as QueueCancelledEvent, ar as QueueDrainedEvent, as as QueueEvent, at as QueueEventType, au as QueueStatePayload, av as QueuedMessage, aw as RecentUserPrompt, ax as ServerMessage, ay as ServerMessageType, az as Session, aA as SessionListPayload, aB as SessionLoadPayload, aC as SessionMetadata, aD as SessionMode, aE as SessionNameGeneratedPayload, aF as SessionPhase, aG as SessionRunningPayload, aH as SessionStatePayload, aI as SessionSummary, aJ as StatsDataPoint, aK as StatsIdentity, aL as TaskCompletedPayload, aM as Todo, aN as ToolCall, aO as ToolMode, aP as ToolName, aQ as ToolResult, aR as ValidationResult, aS as createClientMessage, aT as createServerMessage, aU as isClientMessage, aV as isServerMessage } from '../protocol-B9R1CUvt.js';
3
3
 
4
4
  /**
5
5
  * Session stats computation - aggregates response-level MessageStats from
@@ -11,12 +11,12 @@ import {
11
11
  requestPathAccess,
12
12
  stepDoneTool,
13
13
  validateToolAction
14
- } from "./chunk-LR5R7EEE.js";
14
+ } from "./chunk-EQQDA4D3.js";
15
15
  import "./chunk-DL6ZILAF.js";
16
16
  import "./chunk-PBGOZMVY.js";
17
17
  import "./chunk-VRGRAQDG.js";
18
- import "./chunk-NPHYEUYE.js";
19
- import "./chunk-XJEOP6XU.js";
18
+ import "./chunk-NSBYORD5.js";
19
+ import "./chunk-ITWVFGFV.js";
20
20
  import "./chunk-7TTEGAO6.js";
21
21
  import {
22
22
  AskUserInterrupt,
@@ -47,4 +47,4 @@ export {
47
47
  stepDoneTool,
48
48
  validateToolAction
49
49
  };
50
- //# sourceMappingURL=tools-CQGEU3JK.js.map
50
+ //# sourceMappingURL=tools-D3WWIOQD.js.map
@@ -280,7 +280,7 @@ XID_Start XIDS`.split(/\s/).map(e=>[ld(e),e])),jP=new Map([["s",nn(383)],[nn(383
280
280
  [`)&&!t.startsWith("[")).map(t=>t.replace(/^\d+: /,"")).join(`
281
281
  `)}const E6=R.memo(function({result:t,metadata:n,filePath:s,heightExpanded:a=!1}){const[o,u]=R.useState(!1),c=R.useMemo(()=>dd(s),[s]),h=n==null?void 0:n.mimeType,f=n==null?void 0:n.base64Data;if(h!=null&&h.startsWith("image/")&&f){const k=`data:${h};base64,${f}`;return l.jsxs(l.Fragment,{children:[l.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:l.jsx("img",{src:k,alt:s,className:"max-w-full max-h-[45vh] object-contain"})}),l.jsx(TC,{src:k,alt:s,isOpen:o,onClose:()=>u(!1)})]})}if(!t)return l.jsx("div",{className:"text-xs text-text-muted italic p-2",children:"Empty file"});const p=t;if(c==="markdown"){const k=O0(p);return l.jsx("div",{className:`rounded overflow-hidden border border-border ${a?"":"max-h-[45vh]"} overflow-y-auto p-2`,children:l.jsx(ds,{content:k})})}const m=O0(p),x=p.split(`
282
282
  `)[0],_=x==null?void 0:x.match(/^(\d+): /),w=_?parseInt(_[1],10):1;return l.jsx("div",{className:`rounded overflow-hidden border border-border ${a?"":"max-h-[45vh]"} overflow-y-auto`,children:l.jsx(Ua,{code:m,language:c,variant:"block",showLineNumbers:!0,startLine:w})})}),j6={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"}},M0=R.memo(function({diagnostics:t}){if(t.length===0)return null;const n=t.filter(o=>o.severity==="error"),s=t.filter(o=>o.severity==="warning"),a=t.filter(o=>o.severity==="info"||o.severity==="hint");return l.jsxs("div",{className:"rounded border border-border overflow-hidden mt-2",children:[l.jsxs("div",{className:"flex items-center gap-3 px-2 py-1.5 bg-bg-tertiary border-b border-border",children:[l.jsx("span",{className:"text-xs font-medium text-text-secondary",children:"LSP Diagnostics"}),n.length>0&&l.jsxs("span",{className:"text-xs text-accent-error font-medium",children:[n.length," error",n.length!==1?"s":""]}),s.length>0&&l.jsxs("span",{className:"text-xs text-accent-warning font-medium",children:[s.length," warning",s.length!==1?"s":""]}),a.length>0&&l.jsxs("span",{className:"text-xs text-text-muted",children:[a.length," info"]})]}),l.jsx("div",{className:"max-h-48 overflow-y-auto",children:t.map((o,u)=>{const c=j6[o.severity];return l.jsxs("div",{className:`flex items-start gap-2 px-2 py-1.5 ${c.bg} border-b border-border last:border-b-0`,children:[l.jsx("span",{className:`${c.color} text-xs flex-shrink-0 w-4 text-center`,children:c.icon}),l.jsxs("div",{className:"flex-1 min-w-0",children:[l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsxs("span",{className:"text-[10px] text-text-muted font-mono",children:["Ln ",o.range.start.line+1,":",o.range.start.character+1]}),o.code&&l.jsxs("span",{className:"text-[10px] text-text-muted font-mono",children:["[",o.code,"]"]})]}),l.jsx("div",{className:"text-xs text-text-primary break-words",children:o.message})]})]},u)})})]})}),T6=R.memo(function({command:t,timeout:n,startedAt:s,streamingOutput:a,status:o,result:u,error:c,durationMs:h}){const f=R.useRef(null),[p,m]=R.useState(0);R.useEffect(()=>{f.current&&o==="pending"&&(f.current.scrollTop=f.current.scrollHeight)},[a,o]),R.useEffect(()=>{if(o!=="pending"||!s)return;const k=setInterval(()=>{m(Date.now()-s)},100);return()=>clearInterval(k)},[o,s]);const x=n/1e3,_=o==="pending"?p/1e3:(h??0)/1e3,w=o==="pending"?(a==null?void 0:a.map(k=>k.content).join(""))??"":u??"";return l.jsxs("div",{className:"space-y-2",children:[l.jsxs("div",{className:"flex items-center justify-between gap-4",children:[l.jsxs("div",{className:"flex items-center gap-2 text-xs flex-1 min-w-0",children:[l.jsx("span",{className:"text-text-muted flex-shrink-0",children:"$"}),l.jsx("code",{className:"text-text-primary break-all",children:t})]}),l.jsxs("div",{className:"flex items-center gap-2 text-xs text-text-muted flex-shrink-0",children:[o==="pending"&&l.jsx("span",{className:"animate-pulse text-accent-warning",children:"running"}),o==="interrupted"&&l.jsx("span",{className:"text-red-400",children:"interrupted"}),l.jsxs("span",{className:o==="pending"?"text-text-secondary":"text-text-muted",children:[_.toFixed(1),"s / ",x,"s"]})]})]}),o==="pending"&&l.jsx("div",{className:"h-1 bg-bg-tertiary rounded overflow-hidden",children:l.jsx("div",{className:"h-full bg-accent-warning transition-all duration-100",style:{width:`${Math.min(100,p/n*100)}%`}})}),(w||o==="pending")&&l.jsx("pre",{ref:f,className:`text-xs bg-bg-primary p-2 rounded max-h-64 overflow-y-auto ${o==="pending"?"border border-accent-warning/30":""}`,style:{overflowX:"hidden",whiteSpace:"normal"},children:o==="pending"&&a?a.map((k,v)=>l.jsx("span",{className:k.stream==="stderr"?"text-accent-warning":"",children:xu(k.content)},v)):xu(w)}),o==="error"&&c&&l.jsx("div",{className:"text-xs text-accent-error bg-accent-error/10 p-2 rounded",children:c}),o!=="pending"&&h!==void 0&&l.jsxs("div",{className:"text-[10px] text-text-muted",children:["Completed in ",(h/1e3).toFixed(2),"s"]})]})});function N6(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 A6({confirmation:e}){const t=we(m=>m.confirmPath),n=we(m=>m.currentSession),s=we(m=>m.switchDangerLevel),{title:a,description:o}=N6(e.reason),u=e.reason==="sensitive_file"||e.reason==="both",c=u?"border-red-500/50":"border-amber-500/50",h=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 l.jsxs("div",{className:`border ${c} ${h} rounded p-3 my-2`,children:[l.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[l.jsx(Em,{}),l.jsxs("div",{className:"flex-1 min-w-0",children:[l.jsx("div",{className:`text-sm font-medium ${u?"text-red-400":"text-amber-400"}`,children:a}),l.jsx("div",{className:"text-xs text-text-muted",children:o})]})]}),l.jsxs("div",{className:"text-xs text-text-muted mb-2",children:[l.jsx("span",{className:"font-medium",children:e.tool})," wants to access:"]}),l.jsx("div",{className:"bg-bg-primary rounded p-2 mb-3 max-h-24 overflow-y-auto",children:l.jsx("ul",{className:"space-y-0.5",children:e.paths.map((m,x)=>l.jsx("li",{className:`text-xs font-mono ${u?"text-red-300":"text-amber-300"} break-all`,children:m},x))})}),l.jsxs("div",{className:"flex gap-2",children:[l.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"}),l.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"}),l.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 D6(e,t){if(e==="read_file"){const s=String(t.path??""),a=t.offset,o=t.limit,u=[];return a!==void 0&&a!==1&&u.push(`offset=${a}`),o!==void 0&&u.push(`limit=${o}`),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 I0(e,t,n){return D6(e,t)}function L6(e){return JSON.stringify(e,null,2)}const R6={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}},O6=R.memo(function({tool:t,args:n,status:s,variant:a="compact",forceCompact:o,result:u,error:c,durationMs:h,diagnostics:f,editContext:p,startedAt:m,streamingOutput:x,metadata:_,callId:w}){var q;const k=t==="edit_file"||t==="write_file",v=t==="run_command"&&s==="pending",S=t==="read_file",b=o?!1:k||v||t==="return_value",[E,N]=R.useState(b),T=R6[s],D=rn(G=>G.settings[Be.DISPLAY_SHOW_OPEN_IN_EDITOR])==="true",A=t==="edit_file"?(q=p==null?void 0:p.regions[0])==null?void 0:q.startLine:t==="read_file"?(()=>{const G=u==null?void 0:u.split(`
283
- `)[0],M=G==null?void 0:G.match(/^(\d+): /);return M?parseInt(M[1],10):void 0})():void 0,L=we(G=>G.pendingPathConfirmations),B=s==="pending"&&w?L.find(G=>G.callId===w)??null:null;return a==="compact"?l.jsxs("div",{className:"flex items-center gap-1.5 text-xs bg-secondary rounded px-2 py-1.5",children:[l.jsx(jC,{tool:t}),l.jsx("span",{className:"text-accent-primary font-medium",children:t}),l.jsx("span",{className:"text-text-muted truncate flex-1",children:I0(t,n)}),l.jsx("span",{className:`${T.color} ${T.animate?"animate-pulse":""}`,children:s==="pending"?"...":"done"})]}):l.jsxs("div",{className:"border border-border rounded overflow-hidden my-1 min-w-0",children:[l.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:[l.jsx("span",{className:`${T.color} ${T.animate?"animate-pulse":""}`,children:T.icon}),l.jsx("span",{className:"font-mono text-accent-primary text-sm",children:t}),l.jsx("span",{className:"text-text-muted text-xs flex-1 truncate",children:I0(t,n)}),l.jsx("span",{className:"text-text-muted text-xs",children:E?"▼":"▶"})]}),B&&l.jsx(A6,{confirmation:B}),(E||S)&&l.jsxs("div",{className:"p-2 bg-primary border-t border-border space-y-2 min-w-0",children:[t==="run_command"&&l.jsx(T6,{command:String(n.command??""),timeout:n.timeout??12e4,startedAt:m,streamingOutput:x,status:s,result:u,error:c,durationMs:h}),t==="edit_file"&&s==="success"&&l.jsxs(l.Fragment,{children:[p&&p.regions.length>0?l.jsx(S6,{regions:p.regions,filePath:String(n.path??"")}):l.jsx(v6,{oldString:String(n.old_string??""),newString:String(n.new_string??""),filePath:String(n.path??"")}),f&&f.length>0&&l.jsx(M0,{diagnostics:f})]}),t==="write_file"&&s==="success"&&l.jsxs(l.Fragment,{children:[l.jsx(b6,{content:String(n.content??""),filePath:String(n.path??"")}),f&&f.length>0&&l.jsx(M0,{diagnostics:f})]}),t==="read_file"&&s==="success"&&l.jsx(E6,{result:u,metadata:_,filePath:String(n.path??""),heightExpanded:E}),t==="return_value"&&(()=>{const G=(x==null?void 0:x.map(W=>W.content).join(""))??"",M=s==="pending"&&G?G:String(n.content??"");return l.jsxs("div",{children:[l.jsx("div",{className:"text-[10px] text-accent-primary font-medium mb-1 uppercase tracking-wide",children:"Sub-Agent Summary"}),l.jsx("div",{className:"text-xs prose prose-invert prose-sm max-w-none",children:l.jsx(ds,{content:M})})]})})(),t!=="edit_file"&&t!=="write_file"&&t!=="run_command"&&t!=="read_file"&&t!=="return_value"&&l.jsxs(l.Fragment,{children:[l.jsxs("div",{children:[l.jsx("div",{className:"text-[10px] text-text-muted mb-0.5",children:"Arguments:"}),l.jsx("pre",{className:"text-xs bg-bg-primary p-1.5 rounded overflow-x-auto",children:L6(n)})]}),s==="success"&&u!==void 0&&l.jsxs("div",{children:[l.jsxs("div",{className:"text-[10px] text-text-muted mb-0.5",children:["Result",h!==void 0&&` (${h}ms)`,":"]}),l.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")&&h!==void 0&&l.jsxs("div",{className:"text-[10px] text-text-muted flex items-center gap-2",children:[l.jsxs("span",{children:["Completed in ",h,"ms"]}),D&&(t==="read_file"||t==="write_file"||t==="edit_file")&&String(n.path??"")&&l.jsx("a",{href:`vscode://file/${String(n.path)}${A?`:${A}`:""}`,className:"text-accent-primary hover:underline ml-auto",children:"Open in VSCode"})]}),s==="error"&&c&&t!=="run_command"&&l.jsxs("div",{children:[l.jsx("div",{className:"text-[10px] text-accent-error mb-0.5",children:"Error:"}),l.jsx("pre",{className:"text-xs bg-bg-primary p-1.5 rounded text-accent-error",children:c})]})]})]})}),M6={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"},I6={criteria:"criteria",review_findings:"review findings",todos:"tasks"};function P6(e,t){const n=M6[e];if(!n)return`Preparing ${e}`;if(e==="session_metadata"&&t)try{const a=JSON.parse(t).key;if(a){const o=I6[a]??a;return`${n} ${o}`}}catch{}return n}function B6(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 z6=R.memo(function({name:t,arguments:n}){let a=P6(t,n)+"...";if(t==="run_command"&&n){const o=B6(n);o&&(a=o)}return l.jsx("div",{className:"border border-border rounded overflow-hidden my-1 min-w-0 animate-pulse",children:l.jsxs("div",{className:"flex items-center gap-1.5 p-2 bg-bg-tertiary",children:[l.jsx("span",{className:"text-accent-warning animate-pulse",children:"..."}),l.jsx(jC,{tool:t}),l.jsx("span",{className:"font-mono text-accent-primary text-sm",children:t}),t==="run_command"&&n?l.jsx("code",{className:"text-text-muted text-xs flex-1 truncate",children:a}):l.jsx("span",{className:"text-text-muted text-xs flex-1",children:a})]})})}),H6={pending:{icon:"○",color:"text-text-muted"},in_progress:{icon:"●",color:"text-accent-warning",animate:!0},completed:{icon:"✓",color:"text-accent-success"}},$6=R.memo(function({todos:t}){return Array.isArray(t)?t.length===0?l.jsx("div",{className:"text-xs text-text-muted italic my-1",children:"No tasks"}):l.jsxs("div",{className:"my-1 rounded border border-border bg-bg-tertiary overflow-hidden",children:[l.jsx("div",{className:"px-2 py-1.5 border-b border-border bg-bg-secondary",children:l.jsx("span",{className:"text-xs font-medium text-text-muted",children:"Tasks"})}),l.jsx("div",{children:t.map((n,s)=>{const a=H6[n.status];return l.jsxs("div",{className:`flex items-start gap-2 px-2 py-1.5 ${s>0?"border-t border-border":""}`,children:[l.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)??"○"}),l.jsx("span",{className:`text-sm leading-tight ${n.status==="completed"?"text-text-muted":"text-text-primary"}`,children:n.content})]},s)})})]}):l.jsx("div",{className:"text-xs text-accent-warning italic my-1",children:"⚠️ Invalid todos data"})}),P0={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"}},NC=R.memo(function({toolCalls:t,criteria:n}){if(t.length===0)return null;const s=new Map((n==null?void 0:n.map(h=>[h.id,h]))??[]),a=t.find(h=>{var f,p;return h.arguments.action==="get"&&((f=h.result)==null?void 0:f.success)&&((p=h.result)==null?void 0:p.output)}),o=t.some(h=>h.name==="session_metadata"),u={criteria:"Acceptance Criteria",review_findings:"Review Findings",todos:"Tasks"},c=(()=>{if(!o)return"Acceptance Criteria";const h=new Set(t.map(f=>f.arguments.key).filter(Boolean));if(h.size===1){const f=h.values().next().value;return f?u[f]??f:"Session Data"}return"Session Data"})();return l.jsxs("div",{className:"my-1 rounded border border-border bg-secondary overflow-hidden",children:[l.jsx("div",{className:"px-2 py-1.5 border-b border-border bg-secondary",children:l.jsx("span",{className:"text-xs font-medium text-text-muted",children:c})}),l.jsx("div",{className:"bg-primary",children:a?(()=>{const h=a.result.output;if(h==="No criteria defined yet.")return l.jsxs("div",{className:"flex items-start gap-2 px-2 py-1.5",children:[l.jsx("span",{className:"text-text-muted text-sm leading-tight flex-shrink-0",children:"○"}),l.jsx("div",{className:"flex-1 min-w-0 text-text-muted text-sm",children:"No criteria defined yet."})]});try{return JSON.parse(h).map((p,m)=>l.jsxs("div",{className:`flex items-start gap-2 px-2 py-1.5 ${m>0?"border-t border-border":""}`,children:[l.jsx("span",{className:"text-text-muted text-sm leading-tight flex-shrink-0",children:"○"}),l.jsx("div",{className:"flex-1 min-w-0",children:l.jsx(ds,{content:`[${p.id}] ${p.description}`})})]},p.id??m))}catch{return t.map((f,p)=>l.jsx(B0,{tc:f,index:p,criteriaMap:s},f.id??p))}})():t.map((h,f)=>l.jsx(B0,{tc:h,index:f,criteriaMap:s},h.id??f))})]})});function B0({tc:e,index:t,criteriaMap:n}){const s=e.arguments.action,a=e.arguments,o=e.name==="session_metadata",u=s==="remove",c=a.id,h=a.description,f=c?n.get(c):void 0,p=h??(f==null?void 0:f.description)??(u&&c?`[${c}]`:"Criterion updated"),m=a.reason,x=s==="fail";return l.jsxs("div",{className:`flex items-start gap-2 px-2 py-1.5 ${t>0?"border-t border-border":""}`,children:[o?l.jsx(Wu,{status:a.status,className:"text-sm leading-tight flex-shrink-0"}):(()=>{const _=s&&P0[s]?P0[s]:{icon:"○",color:"text-text-muted"};return l.jsx("span",{className:`${_.color} text-sm leading-tight flex-shrink-0`,children:_.icon})})(),l.jsxs("div",{className:"flex-1 min-w-0",children:[l.jsx("div",{className:u?"line-through text-text-muted":"",children:l.jsx(ds,{content:p})}),m&&l.jsxs("div",{className:`mt-1 text-sm ${x?"text-accent-error":"text-text-muted"}`,children:[l.jsx("span",{className:"text-text-muted",children:"└ "}),'"',m,'"']})]})]})}function U6(e){return e==="criterion"||e==="session_metadata"}function F6(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"&&U6(a.toolCall.name)?n.push(a.toolCall):(s(),t.push(a));return s(),t}function V6(e,t){if(e.segments&&e.segments.length>0)return G6(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 G6(e,t,n,s,a){const o=[],u=new Map(t.map(c=>[c.id,c]));for(const c of e)switch(c.type){case"text":o.push({type:"text",content:c.content});break;case"thinking":c.content&&c.content.trim().length>0&&o.push({type:"thinking",content:c.content});break;case"tool_call":{const h=u.get(c.toolCallId);h&&o.push({type:"tool_call",toolCall:h});break}}for(const c of n)o.push({type:"preparing_tool_call",preparing:c});return a&&s&&o.push({type:"stats",stats:s}),o}const ig=R.memo(function({message:t,showStats:n=!0,showThinking:s=!0,showVerboseToolOutput:a=!0}){const o=we(x=>{var _,w;return(w=(_=x.currentSession)==null?void 0:_.metadataEntries)==null?void 0:w.criteria}),u=ht(x=>x.defaults),c=ht(x=>x.userItems),h=[...u,...c],f=V6(t,n),p=s?f:f.filter(x=>x.type!=="thinking"),m=F6(p);return m.length===0?null:l.jsx("div",{className:"feed-item",children:l.jsxs("div",{className:"min-w-0",children:[m.map((x,_)=>{var w,k;switch(x.type){case"thinking":return l.jsx(y6,{content:x.content},_);case"text":return l.jsx("div",{className:"prose prose-sm prose-invert max-w-none",children:l.jsx(ds,{content:x.content})},_);case"preparing_tool_call":return l.jsx(z6,{name:x.preparing.name,arguments:x.preparing.arguments},`preparing-${x.preparing.index}`);case"tool_call":{const v=x.toolCall,S=v.result;if(v.name==="todo_write"){const E=v.arguments.todos,N=Array.isArray(E)?E:[];return l.jsx($6,{todos:N},_)}const y=(w=S==null?void 0:S.output)==null?void 0:w.includes("[interrupted by user]"),b=S?y?"interrupted":S.success?"success":"error":"pending";return l.jsx(O6,{tool:v.name,args:v.arguments,status:b,variant:"expandable",forceCompact:!a,result:S==null?void 0:S.output,error:S==null?void 0:S.error,durationMs:S==null?void 0:S.durationMs,diagnostics:S==null?void 0:S.diagnostics,editContext:S==null?void 0:S.editContext,startedAt:v.startedAt,streamingOutput:v.streamingOutput,metadata:S==null?void 0:S.metadata,callId:v.id},_)}case"criteria_group":return l.jsx(NC,{toolCalls:x.toolCalls,criteria:o},_);case"stats":{const v=x.stats;if(!v||"error"in v)return null;const S=((k=v.model.split("/").pop())==null?void 0:k.split("-").slice(0,2).join("-"))??v.model,y=ll(h,v.mode),b=N=>N>=1e3?`${(N/1e3).toFixed(1)}k`:N.toString(),E=N=>N>=1e3?`${(N/1e3).toFixed(1)}k`:N.toFixed(1);return l.jsxs("div",{className:"flex items-center justify-center gap-1.5 text-[10px] text-text-muted mt-3",children:[l.jsx("span",{className:"flex-1 h-px bg-border"}),l.jsx("span",{className:"text-text-secondary",children:S}),l.jsx("span",{className:"text-text-muted",children:"·"}),l.jsx("span",{style:{color:y},children:v.mode}),l.jsx("span",{className:"text-text-muted",children:"·"}),l.jsxs("span",{children:[v.totalTime.toFixed(1),"s"]}),v.toolTime>0&&l.jsxs(l.Fragment,{children:[l.jsx("span",{className:"text-text-muted",children:"·"}),l.jsxs("span",{children:[v.toolTime.toFixed(1),"s tools"]})]}),l.jsx("span",{className:"text-text-muted",children:"·"}),l.jsxs("span",{children:[b(v.prefillTokens)," @ ",E(v.prefillSpeed)," pp"]}),l.jsx("span",{className:"text-text-muted",children:"·"}),l.jsxs("span",{children:[b(v.generationTokens)," @ ",E(v.generationSpeed)," tg"]}),l.jsx("span",{className:"text-text-muted",children:"·"}),l.jsx("button",{type:"button",className:"text-text-muted hover:text-text-secondary transition-colors",title:"View detailed stats",onClick:()=>{const N=new CustomEvent("open-turn-stats",{detail:{stats:v}});window.dispatchEvent(N)},children:l.jsx(xS,{className:"w-3 h-3"})}),l.jsx("span",{className:"flex-1 h-px bg-border"})]},_)}}}),t.partial&&l.jsxs("div",{className:"flex items-center gap-1.5 text-[10px] text-accent-warning mt-1",children:[l.jsx(Em,{}),l.jsx("span",{children:"Aborted"})]}),t.completeReason==="truncated"&&l.jsxs("div",{className:"flex items-center gap-1.5 text-[10px] text-amber-400/80 mt-1",children:[l.jsx(Em,{}),l.jsx("span",{children:"Response was truncated — the model ran out of output tokens."})]})]})})});function Ou(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 W6(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 q6(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}const K6=R.memo(function({data:t}){var u;const n=Ct(c=>c.defaults),s=Ct(c=>c.userItems),o=((u=[...n,...s].find(c=>c.id===t.workflowId))==null?void 0:u.color)??t.workflowColor??"#8b949e";return l.jsxs("div",{className:"feed-item rounded p-3 border",style:{borderColor:Ou(o,.3),backgroundColor:Ou(o,.08)},children:[l.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[l.jsx(Oj,{color:o}),l.jsx("span",{className:"text-sm font-medium",style:{color:o},children:t.workflowName??"Task Completed"})]}),l.jsxs("div",{className:"grid grid-cols-3 sm:grid-cols-5 gap-2",children:[l.jsx(Qo,{label:"Iterations",value:String(t.iterations)}),l.jsx(Qo,{label:"Total time",value:W6(t.totalTimeSeconds)}),l.jsx(Qo,{label:"Tool calls",value:String(t.totalToolCalls)}),l.jsx(Qo,{label:"Tokens",value:q6(t.totalTokensGenerated)}),l.jsx(Qo,{label:"Speed",value:t.avgGenerationSpeed>0?`${t.avgGenerationSpeed} tok/s`:"-"})]})]})});function Qo({label:e,value:t}){return l.jsxs("div",{className:"bg-bg-primary/50 rounded px-2 py-1",children:[l.jsx("div",{className:"text-sm text-text-muted",children:e}),l.jsx("div",{className:"text-sm text-text-primary font-medium",children:t})]})}const Y6=R.memo(function({data:t}){var u;const n=Ct(c=>c.defaults),s=Ct(c=>c.userItems),o=((u=[...n,...s].find(c=>c.id===t.workflowId))==null?void 0:u.color)??t.workflowColor??"#6b7280";return l.jsxs("div",{className:"feed-item flex items-center gap-2 px-3 py-2 rounded border",style:{borderColor:Ou(o,.3),backgroundColor:Ou(o,.08)},children:[l.jsx(Tj,{className:"w-3 h-3 shrink-0",color:o}),l.jsx("span",{className:"text-sm font-medium",style:{color:o},children:t.workflowName}),l.jsx("span",{className:"text-text-muted text-sm",children:"started"})]})});function X6({attachments:e,messageId:t}){const[n,s]=R.useState(null),a=we(p=>p.visionFallbackByMessage),o=we(p=>p.messages),u=R.useMemo(()=>{const p=o.findIndex(m=>m.id===t);if(p===-1)return null;for(let m=p+1;m<o.length;m++){const x=o[m];if(x&&x.role==="assistant")return x.id}return null},[o,t]),c=p=>{s(p)},h=()=>{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:l.jsxs(l.Fragment,{children:[l.jsx("div",{className:"mt-3 flex flex-wrap gap-3",children:e.map(p=>{const m=f(p.id);return l.jsxs("div",{className:"relative inline-block",children:[l.jsxs("button",{onClick:()=>c(p.data),className:"group relative inline-block",title:p.filename,disabled:(m==null?void 0:m.type)==="start",children:[l.jsx("img",{src:p.data,alt: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"&&l.jsx("div",{className:"absolute inset-0 bg-black/60 flex items-center justify-center rounded-lg",children:l.jsx("span",{className:"text-xs text-text-primary animate-pulse",children:"Describing image..."})})]}),(m==null?void 0:m.type)==="done"&&m.description&&l.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&&l.jsx(TC,{src:n,alt:"Attached image",isOpen:!0,onClose:h})]})}function Q6({content:e,align:t="right",messageIndex:n,sessionId:s}){const[a,o]=R.useState(!1),[u,c]=R.useState(!1),[h,f]=R.useState("left"),p=R.useRef(null),m=R.useRef(null),x=we(S=>S.loadSession),_=t==="right",w=()=>{if(!m.current)return"left";const S=m.current.getBoundingClientRect(),y=window.innerWidth-S.right,b=S.left,E=160,N=y>=E,T=b>=E;return T&&N||T?"left":N?"right":b>=y?"left":"right"};R.useEffect(()=>{const S=y=>{p.current&&!p.current.contains(y.target)&&o(!1)};return a&&document.addEventListener("mousedown",S),()=>document.removeEventListener("mousedown",S)},[a]);const k=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),o(!1),window.setTimeout(()=>c(!1),1500)}catch(S){console.error("Failed to copy:",S)}},v=async()=>{!s||n===void 0||(o(!1),await x2(s,n),x(s))};return l.jsx(l.Fragment,{children:l.jsxs("div",{className:`flex items-start gap-1.5 ${_?"":"order-first"}`,children:[u&&l.jsx(Or,{className:"w-4 h-4 text-accent-success"}),l.jsxs("div",{ref:p,className:"relative",children:[l.jsx("button",{ref:m,onClick:()=>{a||f(w()),o(!a)},className:"p-1 rounded hover:bg-bg-tertiary text-text-muted hover:text-text-primary",title:"Message options",children:l.jsx(dp,{})}),a&&l.jsxs("div",{className:`absolute top-full mt-1 bg-bg-secondary border border-border rounded shadow-xl z-50 py-1 min-w-36 ${h==="right"?"left-0":"right-0"}`,children:[l.jsxs("button",{onClick:k,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:[l.jsx(up,{className:"w-4 h-4"}),"Copy"]}),s&&n!==void 0&&l.jsxs(l.Fragment,{children:[l.jsx("div",{className:"border-t border-border my-1"}),l.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:[l.jsx(hp,{className:"w-4 h-4"}),"Replay"]})]})]})]})]})})}function J6({message:e}){const[t,n]=R.useState(!1);if(e.messageKind!=="auto-prompt")return null;const s=e.metadata,a=(s==null?void 0:s.color)??"#6b7280",o=(s==null?void 0:s.name)??"Agent",u=(s==null?void 0:s.type)??"agent",h={agent:"definition injected",workflow:"instructions",compaction:"prompt injected",subagent:"instructions"}[u]??"injected",f=u==="workflow"||u==="subagent";return l.jsxs(l.Fragment,{children:[l.jsxs("div",{className:"flex items-center justify-center gap-1.5 text-[10px] text-text-muted font-mono mt-3 mb-4",children:[l.jsx("span",{className:"flex-1 h-px bg-border"}),l.jsx("span",{className:`w-1.5 h-1.5 rounded-full flex-shrink-0 ${f?"":"cursor-pointer"}`,style:{backgroundColor:a},onClick:()=>!f&&n(!0)}),l.jsx("span",{className:f?"":"cursor-pointer hover:text-text-secondary transition-colors",style:{color:a},onClick:()=>!f&&n(!0),children:o}),l.jsx("span",{children:"·"}),l.jsx("span",{className:f?"":"cursor-pointer hover:text-text-secondary transition-colors",onClick:()=>!f&&n(!0),children:h}),l.jsx("span",{className:"flex-1 h-px bg-border"})]}),f&&l.jsx("div",{className:"flex justify-center feed-item mb-4",children:l.jsx("div",{className:"max-w-[75%] rounded p-3 bg-bg-tertiary/50 text-text-secondary text-sm",style:{borderLeft:`3px solid ${a}`},children:l.jsx("pre",{className:"whitespace-pre-wrap font-mono text-xs",children:e.content})})}),l.jsx(kt,{isOpen:t,onClose:()=>n(!1),title:`${o} Prompt`,size:"lg",children:l.jsxs("div",{className:"space-y-4",children:[l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx("span",{className:"w-3 h-3 rounded-full",style:{backgroundColor:a}}),l.jsx("span",{className:"text-sm text-text-primary font-medium",children:o}),l.jsxs("span",{className:"text-xs text-text-muted",children:["(",u,")"]})]}),l.jsx("div",{className:"h-full min-h-96",children:l.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 Z6({message:e,messageIndex:t,sessionId:n}){const s=e.messageKind==="auto-prompt",a=e.messageKind==="command",o=e.isSystemGenerated;return l.jsxs("div",{className:"flex justify-end items-start gap-1.5 feed-item",children:[!o&&l.jsx(Q6,{content:e.content,align:"right",messageIndex:t,sessionId:n}),l.jsxs("div",{className:`max-w-[75%] rounded p-2 ${o?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:[o&&l.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"}),l.jsx("div",{className:`whitespace-pre-wrap text-sm ${o?`${a?"text-teal-200":s?"text-slate-200":"text-amber-200 italic"}`:""}`,children:e.content}),e.attachments&&e.attachments.length>0&&l.jsx(X6,{attachments:e.attachments,messageId:e.id})]})]})}const AC=R.memo(function({message:t,isLastAssistantMessage:n=!1,messageIndex:s,sessionId:a}){const o=t.role==="user",u=t.role==="assistant",c=t.role==="system",h=t.role==="tool";if(u)return l.jsx(ig,{message:t,showStats:n});if(c&&t.isCompacted)return l.jsxs("div",{className:"feed-item bg-bg-tertiary/50 border border-border rounded p-2",children:[l.jsx("div",{className:"text-text-muted text-xs mb-0.5",children:"[Compacted]"}),l.jsx("div",{className:"text-text-secondary text-xs whitespace-pre-wrap",children:t.content.replace(`[COMPACTED HISTORY]
283
+ `)[0],M=G==null?void 0:G.match(/^(\d+): /);return M?parseInt(M[1],10):void 0})():void 0,L=we(G=>G.pendingPathConfirmations),B=s==="pending"&&w?L.find(G=>G.callId===w)??null:null;return a==="compact"?l.jsxs("div",{className:"flex items-center gap-1.5 text-xs bg-secondary rounded px-2 py-1.5",children:[l.jsx(jC,{tool:t}),l.jsx("span",{className:"text-accent-primary font-medium",children:t}),l.jsx("span",{className:"text-text-muted truncate flex-1",children:I0(t,n)}),l.jsx("span",{className:`${T.color} ${T.animate?"animate-pulse":""}`,children:s==="pending"?"...":"done"})]}):l.jsxs("div",{className:"border border-border rounded overflow-hidden my-1 min-w-0",children:[l.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:[l.jsx("span",{className:`${T.color} ${T.animate?"animate-pulse":""}`,children:T.icon}),l.jsx("span",{className:"font-mono text-accent-primary text-sm",children:t}),l.jsx("span",{className:"text-text-muted text-xs flex-1 truncate",children:I0(t,n)}),l.jsx("span",{className:"text-text-muted text-xs",children:E?"▼":"▶"})]}),B&&l.jsx(A6,{confirmation:B}),(E||S)&&l.jsxs("div",{className:"p-2 bg-primary border-t border-border space-y-2 min-w-0",children:[t==="run_command"&&l.jsx(T6,{command:String(n.command??""),timeout:n.timeout??12e4,startedAt:m,streamingOutput:x,status:s,result:u,error:c,durationMs:h}),t==="edit_file"&&s==="success"&&l.jsxs(l.Fragment,{children:[p&&p.regions.length>0?l.jsx(S6,{regions:p.regions,filePath:String(n.path??"")}):l.jsx(v6,{oldString:String(n.old_string??""),newString:String(n.new_string??""),filePath:String(n.path??"")}),f&&f.length>0&&l.jsx(M0,{diagnostics:f})]}),t==="write_file"&&s==="success"&&l.jsxs(l.Fragment,{children:[l.jsx(b6,{content:String(n.content??""),filePath:String(n.path??"")}),f&&f.length>0&&l.jsx(M0,{diagnostics:f})]}),t==="read_file"&&s==="success"&&l.jsx(E6,{result:u,metadata:_,filePath:String(n.path??""),heightExpanded:E}),t==="return_value"&&(()=>{const G=(x==null?void 0:x.map(W=>W.content).join(""))??"",M=s==="pending"&&G?G:String(n.content??"");return l.jsxs("div",{children:[l.jsx("div",{className:"text-[10px] text-accent-primary font-medium mb-1 uppercase tracking-wide",children:"Sub-Agent Summary"}),l.jsx("div",{className:"text-xs prose prose-invert prose-sm max-w-none",children:l.jsx(ds,{content:M})})]})})(),t!=="edit_file"&&t!=="write_file"&&t!=="run_command"&&t!=="read_file"&&t!=="return_value"&&l.jsxs(l.Fragment,{children:[l.jsxs("div",{children:[l.jsx("div",{className:"text-[10px] text-text-muted mb-0.5",children:"Arguments:"}),l.jsx("pre",{className:"text-xs bg-bg-primary p-1.5 rounded overflow-x-auto",children:L6(n)})]}),s==="success"&&u!==void 0&&l.jsxs("div",{children:[l.jsxs("div",{className:"text-[10px] text-text-muted mb-0.5",children:["Result",h!==void 0&&` (${h}ms)`,":"]}),l.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")&&h!==void 0&&l.jsxs("div",{className:"text-[10px] text-text-muted flex items-center gap-2",children:[l.jsxs("span",{children:["Completed in ",h,"ms"]}),D&&(t==="read_file"||t==="write_file"||t==="edit_file")&&String(n.path??"")&&l.jsx("a",{href:`vscode://file/${String(n.path)}${A?`:${A}`:""}`,className:"text-accent-primary hover:underline ml-auto",children:"Open in VSCode"})]}),s==="error"&&c&&t!=="run_command"&&l.jsxs("div",{children:[l.jsx("div",{className:"text-[10px] text-accent-error mb-0.5",children:"Error:"}),l.jsx("pre",{className:"text-xs bg-bg-primary p-1.5 rounded text-accent-error",children:c})]})]})]})}),M6={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"},I6={criteria:"criteria",review_findings:"review findings",todos:"tasks"};function P6(e,t){const n=M6[e];if(!n)return`Preparing ${e}`;if(e==="session_metadata"&&t)try{const a=JSON.parse(t).key;if(a){const o=I6[a]??a;return`${n} ${o}`}}catch{}return n}function B6(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 z6=R.memo(function({name:t,arguments:n}){let a=P6(t,n)+"...";if(t==="run_command"&&n){const o=B6(n);o&&(a=o)}return l.jsx("div",{className:"border border-border rounded overflow-hidden my-1 min-w-0 animate-pulse",children:l.jsxs("div",{className:"flex items-center gap-1.5 p-2 bg-bg-tertiary",children:[l.jsx("span",{className:"text-accent-warning animate-pulse",children:"..."}),l.jsx(jC,{tool:t}),l.jsx("span",{className:"font-mono text-accent-primary text-sm",children:t}),t==="run_command"&&n?l.jsx("code",{className:"text-text-muted text-xs flex-1 truncate",children:a}):l.jsx("span",{className:"text-text-muted text-xs flex-1",children:a})]})})}),H6={pending:{icon:"○",color:"text-text-muted"},in_progress:{icon:"●",color:"text-accent-warning",animate:!0},completed:{icon:"✓",color:"text-accent-success"}},$6=R.memo(function({todos:t}){return Array.isArray(t)?t.length===0?l.jsx("div",{className:"text-xs text-text-muted italic my-1",children:"No tasks"}):l.jsxs("div",{className:"my-1 rounded border border-border bg-bg-tertiary overflow-hidden",children:[l.jsx("div",{className:"px-2 py-1.5 border-b border-border bg-bg-secondary",children:l.jsx("span",{className:"text-xs font-medium text-text-muted",children:"Tasks"})}),l.jsx("div",{children:t.map((n,s)=>{const a=H6[n.status];return l.jsxs("div",{className:`flex items-start gap-2 px-2 py-1.5 ${s>0?"border-t border-border":""}`,children:[l.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)??"○"}),l.jsx("span",{className:`text-sm leading-tight ${n.status==="completed"?"text-text-muted":"text-text-primary"}`,children:n.content})]},s)})})]}):l.jsx("div",{className:"text-xs text-accent-warning italic my-1",children:"⚠️ Invalid todos data"})}),P0={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"}},NC=R.memo(function({toolCalls:t,criteria:n}){if(t.length===0)return null;const s=new Map((n==null?void 0:n.map(h=>[h.id,h]))??[]),a=t.find(h=>{var f,p;return h.arguments.action==="get"&&((f=h.result)==null?void 0:f.success)&&((p=h.result)==null?void 0:p.output)}),o=t.some(h=>h.name==="session_metadata"),u={criteria:"Acceptance Criteria",review_findings:"Review Findings",todos:"Tasks"},c=(()=>{if(!o)return"Acceptance Criteria";const h=new Set(t.map(f=>f.arguments.key).filter(Boolean));if(h.size===1){const f=h.values().next().value;return f?u[f]??f:"Session Data"}return"Session Data"})();return l.jsxs("div",{className:"my-1 rounded border border-border bg-secondary overflow-hidden",children:[l.jsx("div",{className:"px-2 py-1.5 border-b border-border bg-secondary",children:l.jsx("span",{className:"text-xs font-medium text-text-muted",children:c})}),l.jsx("div",{className:"bg-primary",children:a?(()=>{const h=a.result.output;if(h==="No criteria defined yet.")return l.jsxs("div",{className:"flex items-start gap-2 px-2 py-1.5",children:[l.jsx("span",{className:"text-text-muted text-sm leading-tight flex-shrink-0",children:"○"}),l.jsx("div",{className:"flex-1 min-w-0 text-text-muted text-sm",children:"No criteria defined yet."})]});try{return JSON.parse(h).map((p,m)=>l.jsxs("div",{className:`flex items-start gap-2 px-2 py-1.5 ${m>0?"border-t border-border":""}`,children:[l.jsx("span",{className:"text-text-muted text-sm leading-tight flex-shrink-0",children:"○"}),l.jsx("div",{className:"flex-1 min-w-0",children:l.jsx(ds,{content:`[${p.id}] ${p.description}`})})]},p.id??m))}catch{return t.map((f,p)=>l.jsx(B0,{tc:f,index:p,criteriaMap:s},f.id??p))}})():t.map((h,f)=>l.jsx(B0,{tc:h,index:f,criteriaMap:s},h.id??f))})]})});function B0({tc:e,index:t,criteriaMap:n}){const s=e.arguments.action,a=e.arguments,o=e.name==="session_metadata",u=s==="remove",c=a.id,h=a.description,f=c?n.get(c):void 0,p=h??(f==null?void 0:f.description)??(u&&c?`[${c}]`:"Criterion updated"),m=a.reason,x=s==="fail";return l.jsxs("div",{className:`flex items-start gap-2 px-2 py-1.5 ${t>0?"border-t border-border":""}`,children:[o?l.jsx(Wu,{status:a.status,className:"text-sm leading-tight flex-shrink-0"}):(()=>{const _=s&&P0[s]?P0[s]:{icon:"○",color:"text-text-muted"};return l.jsx("span",{className:`${_.color} text-sm leading-tight flex-shrink-0`,children:_.icon})})(),l.jsxs("div",{className:"flex-1 min-w-0",children:[l.jsx("div",{className:u?"line-through text-text-muted":"",children:l.jsx(ds,{content:p})}),m&&l.jsxs("div",{className:`mt-1 text-sm ${x?"text-accent-error":"text-text-muted"}`,children:[l.jsx("span",{className:"text-text-muted",children:"└ "}),'"',m,'"']})]})]})}function U6(e){return e==="criterion"||e==="session_metadata"}function F6(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"&&U6(a.toolCall.name)?n.push(a.toolCall):(s(),t.push(a));return s(),t}function V6(e,t){if(e.segments&&e.segments.length>0)return G6(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 G6(e,t,n,s,a){const o=[],u=new Map(t.map(c=>[c.id,c]));for(const c of e)switch(c.type){case"text":o.push({type:"text",content:c.content});break;case"thinking":c.content&&c.content.trim().length>0&&o.push({type:"thinking",content:c.content});break;case"tool_call":{const h=u.get(c.toolCallId);h&&o.push({type:"tool_call",toolCall:h});break}}for(const c of n)o.push({type:"preparing_tool_call",preparing:c});return a&&s&&o.push({type:"stats",stats:s}),o}const ig=R.memo(function({message:t,showStats:n=!0,showThinking:s=!0,showVerboseToolOutput:a=!0}){const o=we(x=>{var _,w;return(w=(_=x.currentSession)==null?void 0:_.metadataEntries)==null?void 0:w.criteria}),u=ht(x=>x.defaults),c=ht(x=>x.userItems),h=[...u,...c],f=V6(t,n),p=s?f:f.filter(x=>x.type!=="thinking"),m=F6(p);return m.length===0?null:l.jsx("div",{className:"feed-item",children:l.jsxs("div",{className:"min-w-0",children:[m.map((x,_)=>{var w,k;switch(x.type){case"thinking":return l.jsx(y6,{content:x.content},_);case"text":return l.jsx("div",{className:"prose prose-sm prose-invert max-w-none",children:l.jsx(ds,{content:x.content})},_);case"preparing_tool_call":return l.jsx(z6,{name:x.preparing.name,arguments:x.preparing.arguments},`preparing-${x.preparing.index}`);case"tool_call":{const v=x.toolCall,S=v.result;if(v.name==="todo_write"){const E=v.arguments.todos,N=Array.isArray(E)?E:[];return l.jsx($6,{todos:N},_)}const y=(w=S==null?void 0:S.output)==null?void 0:w.includes("[interrupted by user]"),b=S?y?"interrupted":S.success?"success":"error":"pending";return l.jsx(O6,{tool:v.name,args:v.arguments,status:b,variant:"expandable",forceCompact:!a,result:S==null?void 0:S.output,error:S==null?void 0:S.error,durationMs:S==null?void 0:S.durationMs,diagnostics:S==null?void 0:S.diagnostics,editContext:S==null?void 0:S.editContext,startedAt:v.startedAt,streamingOutput:v.streamingOutput,metadata:S==null?void 0:S.metadata,callId:v.id},_)}case"criteria_group":return l.jsx(NC,{toolCalls:x.toolCalls,criteria:o},_);case"stats":{const v=x.stats;if(!v||"error"in v)return null;const S=((k=v.model.split("/").pop())==null?void 0:k.split("-").slice(0,2).join("-"))??v.model,y=ll(h,v.mode),b=N=>N>=1e3?`${(N/1e3).toFixed(1)}k`:N.toString(),E=N=>N>=1e3?`${(N/1e3).toFixed(1)}k`:N.toFixed(1);return l.jsxs("div",{className:"flex items-center justify-center gap-1.5 text-[10px] text-text-muted mt-3",children:[l.jsx("span",{className:"flex-1 h-px bg-border"}),l.jsx("span",{className:"text-text-secondary",children:S}),l.jsx("span",{className:"text-text-muted",children:"·"}),l.jsx("span",{style:{color:y},children:v.mode}),l.jsx("span",{className:"text-text-muted",children:"·"}),l.jsxs("span",{children:[v.totalTime.toFixed(1),"s"]}),v.toolTime>0&&l.jsxs(l.Fragment,{children:[l.jsx("span",{className:"text-text-muted",children:"·"}),l.jsxs("span",{children:[v.toolTime.toFixed(1),"s tools"]})]}),l.jsx("span",{className:"text-text-muted",children:"·"}),l.jsxs("span",{children:[b(v.prefillTokens)," @ ",E(v.prefillSpeed)," pp"]}),l.jsx("span",{className:"text-text-muted",children:"·"}),l.jsxs("span",{children:[b(v.generationTokens)," @ ",E(v.generationSpeed)," tg"]}),l.jsx("span",{className:"text-text-muted",children:"·"}),l.jsx("button",{type:"button",className:"text-text-muted hover:text-text-secondary transition-colors",title:"View detailed stats",onClick:()=>{const N=new CustomEvent("open-turn-stats",{detail:{stats:v}});window.dispatchEvent(N)},children:l.jsx(xS,{className:"w-3 h-3"})}),l.jsx("span",{className:"flex-1 h-px bg-border"})]},_)}}}),t.partial&&l.jsxs("div",{className:"flex items-center gap-1.5 text-[10px] text-accent-warning mt-1",children:[l.jsx(Em,{}),l.jsx("span",{children:"Aborted"})]}),t.completeReason==="truncated"&&l.jsxs("div",{className:"flex items-center gap-1.5 text-[10px] text-amber-400/80 mt-1",children:[l.jsx(Em,{}),l.jsx("span",{children:"Response was truncated — the model ran out of output tokens."})]})]})})});function Ou(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 W6(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 q6(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}const K6=R.memo(function({data:t}){var u;const n=Ct(c=>c.defaults),s=Ct(c=>c.userItems),o=((u=[...n,...s].find(c=>c.id===t.workflowId))==null?void 0:u.color)??t.workflowColor??"#8b949e";return l.jsxs("div",{className:"feed-item rounded p-3 border",style:{borderColor:Ou(o,.3),backgroundColor:Ou(o,.08)},children:[l.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[l.jsx(Oj,{color:o}),l.jsx("span",{className:"text-sm font-medium",style:{color:o},children:t.workflowName??"Task Completed"})]}),l.jsxs("div",{className:"grid grid-cols-3 sm:grid-cols-5 gap-2",children:[l.jsx(Qo,{label:"Iterations",value:String(t.iterations)}),l.jsx(Qo,{label:"Total time",value:W6(t.totalTimeSeconds)}),l.jsx(Qo,{label:"Tool calls",value:String(t.totalToolCalls)}),l.jsx(Qo,{label:"Tokens",value:q6(t.totalTokensGenerated)}),l.jsx(Qo,{label:"Speed",value:t.avgGenerationSpeed>0?`${t.avgGenerationSpeed} tok/s`:"-"})]})]})});function Qo({label:e,value:t}){return l.jsxs("div",{className:"bg-bg-primary/50 rounded px-2 py-1",children:[l.jsx("div",{className:"text-sm text-text-muted",children:e}),l.jsx("div",{className:"text-sm text-text-primary font-medium",children:t})]})}const Y6=R.memo(function({data:t}){var u;const n=Ct(c=>c.defaults),s=Ct(c=>c.userItems),o=((u=[...n,...s].find(c=>c.id===t.workflowId))==null?void 0:u.color)??t.workflowColor??"#6b7280";return l.jsxs("div",{className:"feed-item flex items-center gap-2 px-3 py-2 rounded border",style:{borderColor:Ou(o,.3),backgroundColor:Ou(o,.08)},children:[l.jsx(Tj,{className:"w-3 h-3 shrink-0",color:o}),l.jsx("span",{className:"text-sm font-medium",style:{color:o},children:t.workflowName}),l.jsx("span",{className:"text-text-muted text-sm",children:"started"})]})});function X6({attachments:e,messageId:t}){const[n,s]=R.useState(null),a=we(p=>p.visionFallbackByMessage),o=we(p=>p.messages),u=R.useMemo(()=>{const p=o.findIndex(m=>m.id===t);if(p===-1)return null;for(let m=p+1;m<o.length;m++){const x=o[m];if(x&&x.role==="assistant")return x.id}return null},[o,t]),c=p=>{s(p)},h=()=>{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:l.jsxs(l.Fragment,{children:[l.jsx("div",{className:"mt-3 flex flex-wrap gap-3",children:e.map(p=>{const m=f(p.id);return l.jsxs("div",{className:"relative inline-block",children:[l.jsxs("button",{onClick:()=>c(p.data),className:"group relative inline-block",title:p.filename,disabled:(m==null?void 0:m.type)==="start",children:[l.jsx("img",{src:p.data,alt: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"&&l.jsx("div",{className:"absolute inset-0 bg-black/60 flex items-center justify-center rounded-lg",children:l.jsx("span",{className:"text-xs text-text-primary animate-pulse",children:"Describing image..."})})]}),(m==null?void 0:m.type)==="done"&&m.description&&l.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&&l.jsx(TC,{src:n,alt:"Attached image",isOpen:!0,onClose:h})]})}function Q6({content:e,align:t="right",messageIndex:n,sessionId:s}){const[a,o]=R.useState(!1),[u,c]=R.useState(!1),[h,f]=R.useState("left"),p=R.useRef(null),m=R.useRef(null),x=we(S=>S.loadSession),_=t==="right",w=()=>{if(!m.current)return"left";const S=m.current.getBoundingClientRect(),y=window.innerWidth-S.right,b=S.left,E=160,N=y>=E,T=b>=E;return T&&N||T?"left":N?"right":b>=y?"left":"right"};R.useEffect(()=>{const S=y=>{p.current&&!p.current.contains(y.target)&&o(!1)};return a&&document.addEventListener("mousedown",S),()=>document.removeEventListener("mousedown",S)},[a]);const k=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),o(!1),window.setTimeout(()=>c(!1),1500)}catch(S){console.error("Failed to copy:",S)}},v=async()=>{!s||n===void 0||(o(!1),await x2(s,n),x(s))};return l.jsx(l.Fragment,{children:l.jsxs("div",{className:`flex items-start gap-1.5 ${_?"":"order-first"}`,children:[u&&l.jsx(Or,{className:"w-4 h-4 text-accent-success"}),l.jsxs("div",{ref:p,className:"relative",children:[l.jsx("button",{ref:m,onClick:()=>{a||f(w()),o(!a)},className:"p-1 rounded hover:bg-bg-tertiary text-text-muted hover:text-text-primary",title:"Message options",children:l.jsx(dp,{})}),a&&l.jsxs("div",{className:`absolute top-full mt-1 bg-bg-secondary border border-border rounded shadow-xl z-50 py-1 min-w-36 ${h==="right"?"left-0":"right-0"}`,children:[l.jsxs("button",{onClick:k,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:[l.jsx(up,{className:"w-4 h-4"}),"Copy"]}),s&&n!==void 0&&l.jsxs(l.Fragment,{children:[l.jsx("div",{className:"border-t border-border my-1"}),l.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:[l.jsx(hp,{className:"w-4 h-4"}),"Replay"]})]})]})]})]})})}function J6({message:e}){const[t,n]=R.useState(!1);if(e.messageKind!=="auto-prompt")return null;const s=e.metadata,a=(s==null?void 0:s.color)??"#6b7280",o=(s==null?void 0:s.name)??"Agent",u=(s==null?void 0:s.type)??"agent",h={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 l.jsxs(l.Fragment,{children:[l.jsxs("div",{className:"flex items-center justify-center gap-1.5 text-[10px] text-text-muted font-mono mt-3 mb-4",children:[l.jsx("span",{className:"flex-1 h-px bg-border"}),l.jsx("span",{className:`w-1.5 h-1.5 rounded-full flex-shrink-0 ${f?"":"cursor-pointer"}`,style:{backgroundColor:a},onClick:()=>!f&&n(!0)}),l.jsx("span",{className:f?"":"cursor-pointer hover:text-text-secondary transition-colors",style:{color:a},onClick:()=>!f&&n(!0),children:o}),l.jsx("span",{children:"·"}),l.jsx("span",{className:f?"":"cursor-pointer hover:text-text-secondary transition-colors",onClick:()=>!f&&n(!0),children:h}),l.jsx("span",{className:"flex-1 h-px bg-border"})]}),f&&l.jsx("div",{className:"flex justify-center feed-item mb-4",children:l.jsx("div",{className:"max-w-[75%] rounded p-3 bg-bg-tertiary/50 text-text-secondary text-sm",style:{borderLeft:`3px solid ${a}`},children:l.jsx("pre",{className:"whitespace-pre-wrap font-mono text-xs",children:e.content})})}),l.jsx(kt,{isOpen:t,onClose:()=>n(!1),title:`${o} Prompt`,size:"lg",children:l.jsxs("div",{className:"space-y-4",children:[l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx("span",{className:"w-3 h-3 rounded-full",style:{backgroundColor:a}}),l.jsx("span",{className:"text-sm text-text-primary font-medium",children:o}),l.jsxs("span",{className:"text-xs text-text-muted",children:["(",u,")"]})]}),l.jsx("div",{className:"h-full min-h-96",children:l.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 Z6({message:e,messageIndex:t,sessionId:n}){const s=e.messageKind==="auto-prompt",a=e.messageKind==="command",o=e.isSystemGenerated;return l.jsxs("div",{className:"flex justify-end items-start gap-1.5 feed-item",children:[!o&&l.jsx(Q6,{content:e.content,align:"right",messageIndex:t,sessionId:n}),l.jsxs("div",{className:`max-w-[75%] rounded p-2 ${o?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:[o&&l.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"}),l.jsx("div",{className:`whitespace-pre-wrap text-sm ${o?`${a?"text-teal-200":s?"text-slate-200":"text-amber-200 italic"}`:""}`,children:e.content}),e.attachments&&e.attachments.length>0&&l.jsx(X6,{attachments:e.attachments,messageId:e.id})]})]})}const AC=R.memo(function({message:t,isLastAssistantMessage:n=!1,messageIndex:s,sessionId:a}){const o=t.role==="user",u=t.role==="assistant",c=t.role==="system",h=t.role==="tool";if(u)return l.jsx(ig,{message:t,showStats:n});if(c&&t.isCompacted)return l.jsxs("div",{className:"feed-item bg-bg-tertiary/50 border border-border rounded p-2",children:[l.jsx("div",{className:"text-text-muted text-xs mb-0.5",children:"[Compacted]"}),l.jsx("div",{className:"text-text-secondary text-xs whitespace-pre-wrap",children:t.content.replace(`[COMPACTED HISTORY]
284
284
  `,"")})]});if(h)return l.jsxs("div",{className:"feed-item bg-bg-tertiary/30 border-l-2 border-accent-primary rounded-r p-2",children:[l.jsxs("div",{className:"text-accent-primary text-xs mb-0.5",children:["Tool: ",t.toolName]}),l.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 l.jsx(Y6,{data:f})}catch{}if(t.messageKind==="task-completed")try{const f=JSON.parse(t.content);return l.jsx(K6,{data:f})}catch{}return t.messageKind==="context-reset"?l.jsxs("div",{className:"flex items-center gap-4 mb-6 text-text-muted text-xs uppercase tracking-wide",children:[l.jsx("div",{className:"flex-1 border-t border-border"}),l.jsx("span",{children:t.content}),l.jsx("div",{className:"flex-1 border-t border-border"})]}):t.messageKind==="auto-prompt"&&t.isSystemGenerated?l.jsx(J6,{message:t}):t.messageKind==="correction"&&t.isSystemGenerated?l.jsx("div",{className:"flex justify-end feed-item",children:l.jsxs("div",{className:"max-w-[75%] rounded p-2 bg-amber-500/10 border border-amber-500/30",children:[l.jsx("span",{className:"text-[10px] block mb-0.5 text-amber-400",children:"System"}),l.jsx("div",{className:"whitespace-pre-wrap text-sm text-amber-200 italic",children:t.content})]})}):o?l.jsx(Z6,{message:t,messageIndex:s,sessionId:a}):l.jsx("div",{className:"flex justify-start feed-item",children:l.jsx("div",{className:"max-w-[75%] rounded p-2 bg-bg-tertiary text-text-primary",children:l.jsx(ds,{content:t.content})})})}),DC=(e,t)=>{const n=R.useRef(!0),s=R.useRef(null),[a,o]=R.useState(!0),u=()=>{const c=e.current;c&&(c.scrollTop=c.scrollHeight)};return R.useEffect(()=>{const c=e.current;if(!c)return;const h=_=>{if(_.deltaY>0){requestAnimationFrame(()=>requestAnimationFrame(()=>{c.scrollHeight-c.scrollTop-c.offsetHeight<100&&(n.current=!0,o(!0))}));return}n.current=!1,o(!1)},f=_=>{_.touches[0]&&(s.current=_.touches[0].clientY)},p=_=>{if(s.current===null)return;const w=_.touches[0];if(!w)return;if(w.clientY-s.current>0){n.current=!1,o(!1);return}requestAnimationFrame(()=>requestAnimationFrame(()=>{c.scrollHeight-c.scrollTop-c.offsetHeight<100&&(n.current=!0,o(!0))}))},m=new MutationObserver(()=>{n.current&&requestAnimationFrame(u)}),x=setInterval(()=>{n.current&&u()},1e3);return c.addEventListener("wheel",h,{passive:!0}),c.addEventListener("touchstart",f,{passive:!0}),c.addEventListener("touchmove",p,{passive:!0}),m.observe(c,{childList:!0,subtree:!0,characterData:!0}),()=>{c.removeEventListener("wheel",h),c.removeEventListener("touchstart",f),c.removeEventListener("touchmove",p),m.disconnect(),clearInterval(x)}},[t==null?void 0:t.id]),{force_scroll_to_bottom:()=>{n.current=!0,o(!0),u()},isAutoScrollActive:a,setAutoScroll:c=>{n.current=c,o(c),c&&u()}}},eB={verifier:"Verification",code_reviewer:"Code Review",test_generator:"Test Generation",debugger:"Debug"};function tB(e){return{backgroundColor:`${e}20`,color:e,borderColor:`${e}4d`}}function z0(e,t){return t||e>85?"text-accent-error":e>60?"text-accent-warning":"text-text-muted"}function nB({contextState:e}){const{currentTokens:t,maxTokens:n,compactionCount:s,dangerZone:a}=e,o=Math.round(t/n*100);return l.jsxs("div",{className:"flex items-center gap-1.5 text-[10px]",children:[l.jsxs("span",{className:z0(o,a),children:[pu(t),"/",pu(n)]}),l.jsxs("span",{className:z0(o,a),children:["(",o,"%)"]}),l.jsx(YS,{percent:o,dangerZone:a,size:"sm"}),a&&l.jsx("span",{className:"text-accent-error animate-pulse",children:"Low!"}),s>0&&l.jsxs("span",{className:"text-text-muted bg-bg-tertiary px-1 rounded",children:[s,"x"]})]})}const rB=R.memo(function({messages:t,subAgentType:n,subAgentId:s,isStreaming:a}){const o=R.useRef(null),u=R.useRef(null),[c,h]=R.useState(!1),f=ht(D=>D.defaults),p=ht(D=>D.userItems),m=[...f,...p],x=we(D=>D.subAgentContextStates[s]),{showThinking:_,showVerboseToolOutput:w}=Pu(),{isAutoScrollActive:k,setAutoScroll:v}=DC(u,null);R.useEffect(()=>{a||v(!0)},[a]);const S=R.useCallback(()=>{const D=!c;h(D),D&&setTimeout(()=>{var A;(A=o.current)==null||A.scrollIntoView({block:"start",behavior:"smooth"})},220)},[c]),y=m.find(D=>D.id===n),b=(y==null?void 0:y.name)??eB[n]??n,E=ll(m,n),N=tB(E),T=t.filter(D=>D.role!=="tool");return l.jsxs("div",{ref:o,className:"feed-item border border-border rounded overflow-hidden bg-secondary",children:[l.jsxs("div",{className:"w-full flex items-center justify-between px-2 py-1 border-b relative",style:N,children:[l.jsx("span",{className:"text-xs font-medium",children:b}),l.jsx("div",{className:"absolute left-1/2 -translate-x-1/2",children:x&&l.jsx(nB,{contextState:x})}),l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsxs("button",{type:"button",className:"text-sm text-text-muted hover:text-text-primary flex items-center gap-1.5",onClick:()=>v(!k),children:[l.jsx("span",{className:`w-1 h-1 rounded-full ${k?"bg-accent-success":"border border-text-muted"}`}),"live"]}),l.jsxs("button",{type:"button",className:"text-[10px] px-1.5 py-0.5 rounded bg-bg-tertiary",onClick:S,children:[c?"▼":"▶"," Expand"]})]})]}),l.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"?l.jsx(ig,{message:D,showStats:!0,showThinking:_,showVerboseToolOutput:w},D.id):l.jsx(AC,{message:D,isLastAssistantMessage:!1},D.id))})]})});function LC(e,t,n=!0){R.useEffect(()=>{if(!n)return;const s=a=>{var o;(o=e.current)!=null&&o.contains(a.target)||t()};return document.addEventListener("mousedown",s),()=>document.removeEventListener("mousedown",s)},[e,t,n])}const sB=[],iB=R.memo(function({displayItems:t,scrollContainerRef:n,highlightedMessageId:s}){const a=we(L=>{var B,q;return((q=(B=L.currentSession)==null?void 0:B.metadataEntries)==null?void 0:q.criteria)??sB}),o=we(L=>{var B;return(B=L.currentSession)==null?void 0:B.id}),u=we(L=>{var B;return(B=L.currentSession)==null?void 0:B.mode}),c=we(L=>{var B;return(B=L.currentSession)==null?void 0:B.phase}),h=we(L=>L.error),f=we(L=>L.clearError),p=we(L=>L.acceptAndBuild),m=Hu(),{showThinking:x,showVerboseToolOutput:_,showStats:w,showAgentDefinitions:k,showWorkflowBars:v}=Pu(),S=Ct(L=>L.defaults),y=Ct(L=>L.userItems),b=[...S,...y],E=u==="planner",N=a.length>0,T=c==="done",D=t.some(L=>L.type==="message"&&L.message.role==="assistant"),A=E&&N&&!m&&D&&!T;return l.jsxs("div",{ref:n,"data-testid":"chat-scroll-container",className:"flex-1 min-w-0 overflow-y-auto relative bg-primary",children:[l.jsx("div",{className:"pt-4",children:t.map((L,B)=>{if(L.type==="context-divider")return l.jsxs("div",{"data-item-index":B,className:"flex items-center gap-2 feed-item px-2 md:px-4",children:[l.jsx("div",{className:"flex-1 border-t border-border"}),l.jsx("span",{className:"text-[10px] text-text-muted font-medium px-2",children:"Earlier context summarized"}),l.jsx("div",{className:"flex-1 border-t border-border"})]},B);if(L.type==="subagent"){const W=L.messages.some(F=>F.isStreaming);return l.jsx("div",{"data-item-index":B,className:"px-2 md:px-4",children:l.jsx(rB,{messages:L.messages,subAgentType:L.subAgentType,subAgentId:L.subAgentId,isStreaming:W})},B)}if(L.type==="criteria-batch")return l.jsx("div",{"data-item-index":B,className:"feed-item px-2 md:px-4",children:l.jsx(NC,{toolCalls:L.toolCalls,criteria:a})},B);const q=L.message;if(q.role==="assistant")return l.jsx("div",{"data-item-index":B,className:"px-2 md:px-4",children:l.jsx(ig,{message:q,showStats:w,showThinking:x,showVerboseToolOutput:_})},B);const G=!k&&q.messageKind==="auto-prompt",M=!v&&(q.messageKind==="workflow-started"||q.messageKind==="task-completed");return G||M?null:l.jsx("div",{"data-item-index":B,className:"px-2 md:px-4",children:l.jsx("div",{"data-message-id":q.id,className:s===q.id?"rounded animate-highlight-fade":void 0,children:l.jsx(AC,{message:q,messageIndex:B,sessionId:o,isLastAssistantMessage:!1})})},B)})}),l.jsxs("div",{className:"px-2 md:px-4 pb-4",children:[h&&l.jsx("div",{className:"feed-item bg-red-500/10 border border-red-500/50 rounded p-2",children:l.jsxs("div",{className:"flex items-start justify-between gap-2",children:[l.jsxs("div",{children:[l.jsx("div",{className:"text-red-400 text-sm font-medium",children:h.code}),l.jsx("div",{className:"text-red-300 text-xs mt-0.5",children:h.message})]}),l.jsx(Sl,{onClick:f,className:"text-red-400 hover:text-red-300 p-0.5",size:"sm"})]})}),A&&l.jsx("div",{className:"flex justify-center gap-2 feed-item flex-wrap",children:b.map(L=>{const B=L.color??"#3b82f6",q=parseInt(B.slice(1,3),16),G=parseInt(B.slice(3,5),16),M=parseInt(B.slice(5,7),16),W=`rgba(${q},${G},${M},0.12)`,F=`rgba(${q},${G},${M},0.22)`,z=`rgba(${q},${G},${M},0.25)`;return l.jsx(aB,{workflowName:L.name,color:B,bg:W,bgHover:F,border:z,subGroups:L.subGroups,onLaunch:K=>p(L.id,void 0,void 0,K)},L.id)})})]})]})});function aB({workflowName:e,color:t,bg:n,bgHover:s,border:a,subGroups:o,onLaunch:u}){const[c,h]=R.useState(!1),f=R.useRef(null);return LC(f,()=>h(!1),c),l.jsxs("div",{className:"relative flex",children:[l.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]}),o&&o.length>0&&l.jsxs("div",{ref:f,className:"relative",children:[l.jsx("button",{onClick:()=>h(!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&&l.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:[l.jsx("button",{onClick:()=>{u(),h(!1)},className:"w-full text-left px-3 py-2 text-sm text-text-primary hover:bg-bg-tertiary transition-colors",children:"Full workflow"}),l.jsx("div",{className:"border-t border-border/50"}),o.map(p=>l.jsx("button",{onClick:()=>{u(p),h(!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 oB({question:e}){const t=we(u=>u.answerQuestion),[n,s]=R.useState(""),a=()=>{t(e.callId,n)},o=u=>{u.key==="Enter"&&!u.shiftKey&&(u.preventDefault(),a())};return l.jsx(kt,{isOpen:!0,onClose:()=>{},size:"sm",closeOnBackdropClick:!1,closeOnEscape:!1,showCloseButton:!1,children:l.jsxs("div",{className:"space-y-4",children:[l.jsx("p",{className:"text-sm text-text-primary",children:e.question}),l.jsx("textarea",{value:n,onChange:u=>s(u.target.value),onKeyDown:o,placeholder:"Type your answer here...",className:"w-full min-h-[120px] 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}),l.jsxs("div",{className:"flex justify-end gap-2",children:[l.jsx(Je,{variant:"secondary",size:"sm",onClick:()=>t(e.callId,""),children:"Skip"}),l.jsx(Je,{variant:"primary",size:"sm",onClick:a,children:"Send Answer"})]})]})})}function lB(){const e=we(s=>s.connectionStatus),t=we(s=>s.reconnect);if(e==="connected")return null;const n=e==="reconnecting";return l.jsxs("div",{className:`
285
285
  flex items-center justify-between px-4 py-2
286
286
  text-sm font-medium
@@ -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-BF6jgTAb.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-tJDr1ODC.js"></script>
9
9
  <link rel="stylesheet" crossorigin href="/assets/index-CSOB8dwI.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:"8f2be11d71cec888f520fe01d13199ab"},{url:"__inspect__.js",revision:"878b477aaf1805c028895f3d3bb4af71"},{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-CSOB8dwI.css",revision:null},{url:"assets/index-BF6jgTAb.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")))});
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:"4cab97265e9020a6065f041ad4743f7e"},{url:"__inspect__.js",revision:"878b477aaf1805c028895f3d3bb4af71"},{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-tJDr1ODC.js",revision:null},{url:"assets/index-CSOB8dwI.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")))});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openfox",
3
- "version": "2.0.0-beta.10",
3
+ "version": "2.0.0-beta.11",
4
4
  "description": "Local-LLM-first agentic coding assistant",
5
5
  "type": "module",
6
6
  "bin": {