openfox 2.0.63 → 2.0.64

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,8 +5,8 @@ import {
5
5
  } from "./chunk-QJ5FH5DP.js";
6
6
  import {
7
7
  runChatTurn
8
- } from "./chunk-IVJYQZSN.js";
9
- import "./chunk-5OPZLQDV.js";
8
+ } from "./chunk-73N5CJH3.js";
9
+ import "./chunk-WD75RSGR.js";
10
10
  import "./chunk-X5YCWKNS.js";
11
11
  import "./chunk-LBGHZLLH.js";
12
12
  import "./chunk-BGTEIA2S.js";
@@ -154,4 +154,4 @@ export {
154
154
  startChatSession,
155
155
  stopSessionExecution
156
156
  };
157
- //# sourceMappingURL=chat-handler-WNARPARQ.js.map
157
+ //# sourceMappingURL=chat-handler-LI4R4Z2E.js.map
@@ -10,7 +10,7 @@ import {
10
10
  loadAllAgentsDefault,
11
11
  processEventsForConversation,
12
12
  runTopLevelAgentLoop
13
- } from "./chunk-5OPZLQDV.js";
13
+ } from "./chunk-WD75RSGR.js";
14
14
  import {
15
15
  TurnMetrics,
16
16
  WORKFLOW_KICKOFF_PROMPT,
@@ -65,7 +65,7 @@ function resolveAgentDef(sessionManager, sessionId) {
65
65
  }
66
66
  async function buildCachedPrompt(sessionManager, sessionId, agentDef) {
67
67
  const { instructionContent, skills } = await loadSessionContext(sessionManager, sessionId);
68
- const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-W2FFSF4N.js");
68
+ const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-R6LPK6OS.js");
69
69
  const tools = getToolRegistryForAgent2(agentDef).definitions;
70
70
  const toolFingerprint = getToolFingerprint(tools);
71
71
  const allAgents = await loadAllAgentsDefault();
@@ -78,7 +78,7 @@ async function buildCachedPrompt(sessionManager, sessionId, agentDef) {
78
78
  async function computeSessionHash(sessionManager, sessionId) {
79
79
  const { instructionContent, skills } = await loadSessionContext(sessionManager, sessionId);
80
80
  const agentDef = await resolveAgentDef(sessionManager, sessionId);
81
- const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-W2FFSF4N.js");
81
+ const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-R6LPK6OS.js");
82
82
  const tools = getToolRegistryForAgent2(agentDef).definitions;
83
83
  const toolFingerprint = getToolFingerprint(tools);
84
84
  return computeDynamicContextHash(instructionContent, skills, toolFingerprint);
@@ -383,4 +383,4 @@ export {
383
383
  runAgentTurn,
384
384
  injectWorkflowKickoffIfNeeded
385
385
  };
386
- //# sourceMappingURL=chunk-IVJYQZSN.js.map
386
+ //# sourceMappingURL=chunk-73N5CJH3.js.map
@@ -7,7 +7,7 @@ import {
7
7
  injectWorkflowKickoffIfNeeded,
8
8
  runAgentTurn,
9
9
  runChatTurn
10
- } from "./chunk-IVJYQZSN.js";
10
+ } from "./chunk-73N5CJH3.js";
11
11
  import {
12
12
  checkAborted,
13
13
  deleteItemFromDir,
@@ -19,7 +19,7 @@ import {
19
19
  loadAllAgentsDefault,
20
20
  saveItemToDir,
21
21
  spawnShellProcess
22
- } from "./chunk-5OPZLQDV.js";
22
+ } from "./chunk-WD75RSGR.js";
23
23
  import {
24
24
  TurnMetrics,
25
25
  createMessageStartEvent
@@ -2092,4 +2092,4 @@ export {
2092
2092
  signalMcpReady,
2093
2093
  createWebSocketServer
2094
2094
  };
2095
- //# sourceMappingURL=chunk-W4PUAODY.js.map
2095
+ //# sourceMappingURL=chunk-HZNY77HZ.js.map
@@ -21,7 +21,7 @@ import {
21
21
  tokenFromPassword,
22
22
  verifyPassword,
23
23
  workflowExists
24
- } from "./chunk-W4PUAODY.js";
24
+ } from "./chunk-HZNY77HZ.js";
25
25
  import {
26
26
  agentExists,
27
27
  createToolRegistry,
@@ -66,7 +66,7 @@ import {
66
66
  setSkillEnabled,
67
67
  skillExists,
68
68
  updateOwnedSkill
69
- } from "./chunk-5OPZLQDV.js";
69
+ } from "./chunk-WD75RSGR.js";
70
70
  import {
71
71
  ALWAYS_ALLOWED,
72
72
  ALWAYS_ALLOWED_FOR_SUBAGENTS,
@@ -4076,7 +4076,7 @@ import { Router as Router8 } from "express";
4076
4076
  import { spawn as spawn2 } from "child_process";
4077
4077
 
4078
4078
  // src/constants.ts
4079
- var VERSION = "2.0.63";
4079
+ var VERSION = "2.0.64";
4080
4080
 
4081
4081
  // src/server/routes/auto-update.ts
4082
4082
  var updateInProgress = false;
@@ -4516,7 +4516,7 @@ async function createServerHandle(config3) {
4516
4516
  setMcpTools(mcpTools);
4517
4517
  logger.info("MCP tools registered", { count: mcpTools.length });
4518
4518
  }
4519
- const { signalMcpReady } = await import("./server-XDC7R2IX.js");
4519
+ const { signalMcpReady } = await import("./server-Z2A5YZM6.js");
4520
4520
  signalMcpReady();
4521
4521
  });
4522
4522
  const app = express();
@@ -4709,7 +4709,7 @@ async function createServerHandle(config3) {
4709
4709
  app.get("/api/sessions/:id", async (req, res) => {
4710
4710
  const { getEventStore: getEventStore2 } = await import("./events-52XADT6Y.js");
4711
4711
  const { buildMessagesFromStoredEvents } = await import("./folding-2BGFLV5J.js");
4712
- const { getPendingQuestionsForSession } = await import("./tools-W2FFSF4N.js");
4712
+ const { getPendingQuestionsForSession } = await import("./tools-R6LPK6OS.js");
4713
4713
  const session = sessionManager.getSession(req.params.id);
4714
4714
  if (!session) {
4715
4715
  return res.status(404).json({ error: "Session not found" });
@@ -4728,8 +4728,8 @@ async function createServerHandle(config3) {
4728
4728
  if (!session) {
4729
4729
  return res.status(404).json({ error: "Session not found" });
4730
4730
  }
4731
- const { stopSessionExecution } = await import("./chat-handler-WNARPARQ.js");
4732
- const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-W2FFSF4N.js");
4731
+ const { stopSessionExecution } = await import("./chat-handler-LI4R4Z2E.js");
4732
+ const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-R6LPK6OS.js");
4733
4733
  sessionManager.clearMessageQueue(sessionId);
4734
4734
  stopSessionExecution(sessionId, sessionManager);
4735
4735
  abortSession(sessionId);
@@ -4883,7 +4883,7 @@ async function createServerHandle(config3) {
4883
4883
  if (!callId || approved === void 0) {
4884
4884
  return res.status(400).json({ error: "callId and approved are required" });
4885
4885
  }
4886
- const { providePathConfirmation } = await import("./tools-W2FFSF4N.js");
4886
+ const { providePathConfirmation } = await import("./tools-R6LPK6OS.js");
4887
4887
  const result = providePathConfirmation(callId, approved, alwaysAllow);
4888
4888
  if (!result.found) {
4889
4889
  return res.status(404).json({ error: "No pending path confirmation with that ID" });
@@ -4891,7 +4891,7 @@ async function createServerHandle(config3) {
4891
4891
  const { getEventStore: getEventStore2 } = await import("./events-52XADT6Y.js");
4892
4892
  const { buildMessagesFromStoredEvents, foldPendingConfirmations } = await import("./folding-2BGFLV5J.js");
4893
4893
  const { createSessionStateMessage } = await import("./protocol-CTNE3ANP.js");
4894
- const { getPendingQuestionsForSession } = await import("./tools-W2FFSF4N.js");
4894
+ const { getPendingQuestionsForSession } = await import("./tools-R6LPK6OS.js");
4895
4895
  const eventStore = getEventStore2();
4896
4896
  const events = eventStore.getEvents(sessionId);
4897
4897
  const messages = buildMessagesFromStoredEvents(events);
@@ -4912,7 +4912,7 @@ async function createServerHandle(config3) {
4912
4912
  if (!skip && typeof answer !== "string") {
4913
4913
  return res.status(400).json({ error: "answer is required when not skipping" });
4914
4914
  }
4915
- const { provideAnswer } = await import("./tools-W2FFSF4N.js");
4915
+ const { provideAnswer } = await import("./tools-R6LPK6OS.js");
4916
4916
  const found = provideAnswer(callId, answer ?? "", skip ?? false);
4917
4917
  if (!found) {
4918
4918
  return res.status(404).json({ error: "No pending question with that ID" });
@@ -4972,7 +4972,7 @@ async function createServerHandle(config3) {
4972
4972
  backend: activeProvider?.backend ?? llmClient.getBackend(),
4973
4973
  model: llmClient.getModel()
4974
4974
  };
4975
- const { runAgentTurn, TurnMetrics } = await import("./orchestrator-OIBLY5QJ.js");
4975
+ const { runAgentTurn, TurnMetrics } = await import("./orchestrator-PFN7C5JI.js");
4976
4976
  runAgentTurn(
4977
4977
  {
4978
4978
  sessionManager,
@@ -5010,8 +5010,8 @@ async function createServerHandle(config3) {
5010
5010
  if (!session) {
5011
5011
  return res.status(404).json({ error: "Session not found" });
5012
5012
  }
5013
- const { stopSessionExecution } = await import("./chat-handler-WNARPARQ.js");
5014
- const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-W2FFSF4N.js");
5013
+ const { stopSessionExecution } = await import("./chat-handler-LI4R4Z2E.js");
5014
+ const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-R6LPK6OS.js");
5015
5015
  const queuedMessages = sessionManager.getQueueState(sessionId);
5016
5016
  sessionManager.clearMessageQueue(sessionId);
5017
5017
  stopSessionExecution(sessionId, sessionManager);
@@ -5612,7 +5612,7 @@ async function createServerHandle(config3) {
5612
5612
  });
5613
5613
  async function rebuildMcpTools() {
5614
5614
  const { createMcpTools: createMcpTools2 } = await import("./tool-adapter-MOGEI6TP.js");
5615
- const { setMcpTools: setMcpTools2 } = await import("./tools-W2FFSF4N.js");
5615
+ const { setMcpTools: setMcpTools2 } = await import("./tools-R6LPK6OS.js");
5616
5616
  const mcpTools = createMcpTools2(mcpManager);
5617
5617
  setMcpTools2(mcpTools);
5618
5618
  }
@@ -5932,7 +5932,7 @@ async function createServerHandle(config3) {
5932
5932
  const state = sessionManager.getContextState(sessionId);
5933
5933
  wssExports.broadcastForSession(sessionId, createContextStateMessage(state));
5934
5934
  });
5935
- const { QueueProcessor } = await import("./processor-27VCKRGB.js");
5935
+ const { QueueProcessor } = await import("./processor-AYYXP5NS.js");
5936
5936
  const queueProcessor = new QueueProcessor({
5937
5937
  sessionManager,
5938
5938
  providerManager,
@@ -6013,4 +6013,4 @@ export {
6013
6013
  createServerHandle,
6014
6014
  createServer
6015
6015
  };
6016
- //# sourceMappingURL=chunk-N5JF4RYJ.js.map
6016
+ //# sourceMappingURL=chunk-JFQSQO2N.js.map
@@ -208,7 +208,7 @@ async function runCli(options) {
208
208
  if (!configExists) {
209
209
  await runNetworkSetup(mode);
210
210
  }
211
- const { runServe } = await import("./serve-HB222ARV.js");
211
+ const { runServe } = await import("./serve-54KALE6R.js");
212
212
  const serveOptions = { mode };
213
213
  if (values.port) serveOptions.port = parseInt(values.port);
214
214
  if (values["no-browser"] === true) serveOptions.openBrowser = false;
@@ -220,4 +220,4 @@ async function runCli(options) {
220
220
  export {
221
221
  runCli
222
222
  };
223
- //# sourceMappingURL=chunk-FGG4KRFX.js.map
223
+ //# sourceMappingURL=chunk-O3G6X5CT.js.map
@@ -380,7 +380,21 @@ function extractGitNoVerify(command) {
380
380
  }
381
381
  return false;
382
382
  }
383
- async function requestPathAccess(paths, workdir, sessionId, callId, tool, onEvent, dangerLevel, command) {
383
+ async function requestPathAccess(paths, workdir, sessionId, callId, tool, onEvent, dangerLevel, command, isSubAgent) {
384
+ if (isSubAgent) {
385
+ const result2 = await checkPathsAccess(paths, workdir, sessionId);
386
+ if (!result2.needsConfirmation) return;
387
+ if (dangerLevel === "dangerous") {
388
+ const allPaths2 = [.../* @__PURE__ */ new Set([...result2.deniedPaths, ...result2.sensitivePaths])];
389
+ addAllowedPaths(sessionId, allPaths2);
390
+ return;
391
+ }
392
+ const allPaths = [.../* @__PURE__ */ new Set([...result2.deniedPaths, ...result2.sensitivePaths])];
393
+ const hasDenied2 = result2.deniedPaths.length > 0;
394
+ const hasSensitive2 = result2.sensitivePaths.length > 0;
395
+ const reason2 = hasDenied2 && hasSensitive2 ? "both" : hasDenied2 ? "outside_workdir" : "sensitive_file";
396
+ throw new PathAccessDeniedError(allPaths, tool, reason2);
397
+ }
384
398
  const emitPendingEvent = (confirmationPaths, confirmationReason) => {
385
399
  try {
386
400
  const eventStore = getEventStore();
@@ -553,7 +567,8 @@ function createTool(name, definition, handler2) {
553
567
  name,
554
568
  context.onEvent,
555
569
  context.dangerLevel,
556
- command
570
+ command,
571
+ context.isSubAgent
557
572
  );
558
573
  }
559
574
  },
@@ -2579,6 +2594,9 @@ async function executeTools(assistantMsgId, toolCalls, ctx, append) {
2579
2594
  if (ctx.dangerLevel) {
2580
2595
  toolContext.dangerLevel = ctx.dangerLevel;
2581
2596
  }
2597
+ if (ctx.isSubAgent) {
2598
+ toolContext.isSubAgent = true;
2599
+ }
2582
2600
  const startTime = Date.now();
2583
2601
  let toolResult;
2584
2602
  try {
@@ -2957,6 +2975,9 @@ ${COMPACTION_PROMPT}`,
2957
2975
  if (session.dangerLevel) {
2958
2976
  batchContext.dangerLevel = session.dangerLevel;
2959
2977
  }
2978
+ if (config.subAgentMetadata) {
2979
+ batchContext.isSubAgent = true;
2980
+ }
2960
2981
  batchContext.agentTimeout = getRuntimeConfig().agent.toolTimeout;
2961
2982
  const batchResult = await executeTools(assistantMsgId, result.toolCalls, batchContext, append);
2962
2983
  if (batchResult.stepDoneCalled) {
@@ -3766,7 +3787,7 @@ var callSubAgentTool = {
3766
3787
  };
3767
3788
  }
3768
3789
  try {
3769
- const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-W2FFSF4N.js");
3790
+ const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-R6LPK6OS.js");
3770
3791
  const toolRegistry = getToolRegistryForAgent2(agentDef);
3771
3792
  const turnMetrics = new TurnMetrics();
3772
3793
  const result = await executeSubAgent({
@@ -4688,7 +4709,7 @@ var mcpConfigTool = createTool(
4688
4709
  mcpNotifyChanged?.(sessionId);
4689
4710
  }
4690
4711
  async function rebuildTools() {
4691
- const { setMcpTools: setMcpTools2 } = await import("./tools-W2FFSF4N.js");
4712
+ const { setMcpTools: setMcpTools2 } = await import("./tools-R6LPK6OS.js");
4692
4713
  const mcpTools = createMcpTools(mcpManagerForTools);
4693
4714
  setMcpTools2(mcpTools);
4694
4715
  }
@@ -5259,103 +5280,114 @@ function createRegistryFromTools(tools, allowedTools, toolPermissions, agentId,
5259
5280
  for (const tool of tools) {
5260
5281
  toolMap.set(tool.name, tool);
5261
5282
  }
5283
+ async function trySubAgentAlias(name, args, context) {
5284
+ if (!toolMap.has("call_sub_agent")) {
5285
+ return null;
5286
+ }
5287
+ try {
5288
+ const agents = await loadAllAgentsDefault();
5289
+ const agentDef = findAgentById(name, agents);
5290
+ if (!agentDef?.metadata.subagent) {
5291
+ return null;
5292
+ }
5293
+ const prompt = extractSubAgentPrompt(args);
5294
+ logger.info("Sub-agent alias transformation", {
5295
+ from: name,
5296
+ to: "call_sub_agent",
5297
+ subAgentType: name
5298
+ });
5299
+ return callSubAgentTool.execute({ subAgentType: name, prompt }, context);
5300
+ } catch (err) {
5301
+ logger.warn("Sub-agent alias resolution failed", {
5302
+ tool: name,
5303
+ error: err instanceof Error ? err.message : String(err)
5304
+ });
5305
+ return null;
5306
+ }
5307
+ }
5262
5308
  return {
5263
5309
  tools,
5264
5310
  definitions: tools.map((t) => t.definition),
5265
5311
  async execute(name, args, context) {
5266
5312
  const tool = toolMap.get(name);
5267
- if (!tool) {
5268
- if (toolMap.has("call_sub_agent")) {
5269
- try {
5270
- const agents = await loadAllAgentsDefault();
5271
- const agentDef = findAgentById(name, agents);
5272
- if (agentDef?.metadata.subagent) {
5273
- const prompt = extractSubAgentPrompt(args);
5274
- logger.warn("Sub-agent alias redirect", { from: name, to: "call_sub_agent", subAgentType: name });
5275
- return callSubAgentTool.execute({ subAgentType: name, prompt }, context);
5276
- }
5277
- } catch (err) {
5278
- logger.warn("Sub-agent alias resolution failed", {
5313
+ if (tool) {
5314
+ const isMcpTool = !getBuiltInToolNames().has(name);
5315
+ const hasRestrictions = allowedTools !== void 0;
5316
+ if (!isMcpTool && hasRestrictions) {
5317
+ const effectiveTools = computeEffectiveTools(allowedTools, isSubAgent ? "sub-agent" : "agent");
5318
+ if (!effectiveTools.has(name)) {
5319
+ logger.debug("Permission denied: tool not in allowed list", {
5279
5320
  tool: name,
5280
- error: err instanceof Error ? err.message : String(err)
5321
+ allowedTools
5281
5322
  });
5323
+ return {
5324
+ success: false,
5325
+ error: createPermissionErrorMessage(name, allowedTools, agentId, isSubAgent),
5326
+ durationMs: 0,
5327
+ truncated: false
5328
+ };
5282
5329
  }
5283
5330
  }
5284
- return {
5285
- success: false,
5286
- error: `Unknown tool: ${name}. Available tools: ${tools.map((t) => t.name).join(", ")}`,
5287
- durationMs: 0,
5288
- truncated: false
5331
+ if (toolPermissions) {
5332
+ const action = args["action"];
5333
+ if (action) {
5334
+ const actionError = validateToolAction(name, action, toolPermissions);
5335
+ if (actionError) {
5336
+ logger.debug("Permission denied: action not allowed", {
5337
+ tool: name,
5338
+ action,
5339
+ toolPermissions
5340
+ });
5341
+ return {
5342
+ success: false,
5343
+ error: actionError,
5344
+ durationMs: 0,
5345
+ truncated: false
5346
+ };
5347
+ }
5348
+ }
5349
+ }
5350
+ const permittedActionsArray = {};
5351
+ for (const [key, value] of Object.entries(toolPermissions || {})) {
5352
+ permittedActionsArray[key] = [...value];
5353
+ }
5354
+ const contextWithPerms = {
5355
+ ...context,
5356
+ permittedActions: Object.keys(permittedActionsArray).length > 0 ? permittedActionsArray : void 0
5289
5357
  };
5290
- }
5291
- const isMcpTool = !getBuiltInToolNames().has(name);
5292
- const hasRestrictions = allowedTools !== void 0;
5293
- if (!isMcpTool && hasRestrictions) {
5294
- const effectiveTools = computeEffectiveTools(allowedTools, isSubAgent ? "sub-agent" : "agent");
5295
- if (!effectiveTools.has(name)) {
5296
- logger.debug("Permission denied: tool not in allowed list", {
5358
+ logger.debug("Executing tool", { tool: name, args });
5359
+ try {
5360
+ const result = await tool.execute(args, contextWithPerms);
5361
+ logger.debug("Tool completed", {
5297
5362
  tool: name,
5298
- allowedTools
5363
+ success: result.success,
5364
+ durationMs: result.durationMs
5299
5365
  });
5366
+ return result;
5367
+ } catch (error) {
5368
+ if (error instanceof AskUserInterrupt) {
5369
+ throw error;
5370
+ }
5371
+ if (error instanceof PathAccessDeniedError) {
5372
+ throw error;
5373
+ }
5374
+ logger.error("Tool execution error", { tool: name, error });
5300
5375
  return {
5301
5376
  success: false,
5302
- error: createPermissionErrorMessage(name, allowedTools, agentId, isSubAgent),
5377
+ error: error instanceof Error ? error.message : "Unknown error",
5303
5378
  durationMs: 0,
5304
5379
  truncated: false
5305
5380
  };
5306
5381
  }
5307
5382
  }
5308
- if (toolPermissions) {
5309
- const action = args["action"];
5310
- if (action) {
5311
- const actionError = validateToolAction(name, action, toolPermissions);
5312
- if (actionError) {
5313
- logger.debug("Permission denied: action not allowed", {
5314
- tool: name,
5315
- action,
5316
- toolPermissions
5317
- });
5318
- return {
5319
- success: false,
5320
- error: actionError,
5321
- durationMs: 0,
5322
- truncated: false
5323
- };
5324
- }
5325
- }
5326
- }
5327
- const permittedActionsArray = {};
5328
- for (const [key, value] of Object.entries(toolPermissions || {})) {
5329
- permittedActionsArray[key] = [...value];
5330
- }
5331
- const contextWithPerms = {
5332
- ...context,
5333
- permittedActions: Object.keys(permittedActionsArray).length > 0 ? permittedActionsArray : void 0
5383
+ const aliasResult = await trySubAgentAlias(name, args, context);
5384
+ if (aliasResult) return aliasResult;
5385
+ return {
5386
+ success: false,
5387
+ error: `Unknown tool: ${name}. Available tools: ${tools.map((t) => t.name).join(", ")}`,
5388
+ durationMs: 0,
5389
+ truncated: false
5334
5390
  };
5335
- logger.debug("Executing tool", { tool: name, args });
5336
- try {
5337
- const result = await tool.execute(args, contextWithPerms);
5338
- logger.debug("Tool completed", {
5339
- tool: name,
5340
- success: result.success,
5341
- durationMs: result.durationMs
5342
- });
5343
- return result;
5344
- } catch (error) {
5345
- if (error instanceof AskUserInterrupt) {
5346
- throw error;
5347
- }
5348
- if (error instanceof PathAccessDeniedError) {
5349
- throw error;
5350
- }
5351
- logger.error("Tool execution error", { tool: name, error });
5352
- return {
5353
- success: false,
5354
- error: error instanceof Error ? error.message : "Unknown error",
5355
- durationMs: 0,
5356
- truncated: false
5357
- };
5358
- }
5359
5391
  }
5360
5392
  };
5361
5393
  }
@@ -5492,4 +5524,4 @@ export {
5492
5524
  getToolRegistryForAgent,
5493
5525
  createToolRegistry
5494
5526
  };
5495
- //# sourceMappingURL=chunk-5OPZLQDV.js.map
5527
+ //# sourceMappingURL=chunk-WD75RSGR.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-FGG4KRFX.js";
4
+ } from "../chunk-O3G6X5CT.js";
5
5
  import "../chunk-XY3LESVZ.js";
6
6
  import {
7
7
  logger
package/dist/cli/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runCli
4
- } from "../chunk-FGG4KRFX.js";
4
+ } from "../chunk-O3G6X5CT.js";
5
5
  import "../chunk-XY3LESVZ.js";
6
6
  import {
7
7
  logger
@@ -2,8 +2,8 @@ import {
2
2
  injectWorkflowKickoffIfNeeded,
3
3
  runAgentTurn,
4
4
  runChatTurn
5
- } from "./chunk-IVJYQZSN.js";
6
- import "./chunk-5OPZLQDV.js";
5
+ } from "./chunk-73N5CJH3.js";
6
+ import "./chunk-WD75RSGR.js";
7
7
  import {
8
8
  TurnMetrics,
9
9
  createChatDoneEvent,
@@ -43,4 +43,4 @@ export {
43
43
  runAgentTurn,
44
44
  runChatTurn
45
45
  };
46
- //# sourceMappingURL=orchestrator-OIBLY5QJ.js.map
46
+ //# sourceMappingURL=orchestrator-PFN7C5JI.js.map
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openfox",
3
- "version": "2.0.63",
3
+ "version": "2.0.64",
4
4
  "description": "Local-LLM-first agentic coding assistant",
5
5
  "type": "module",
6
6
  "bin": {
@@ -3,7 +3,7 @@ import {
3
3
  finalizeTurnCompletion,
4
4
  generateSessionNameForSession
5
5
  } from "./chunk-QJ5FH5DP.js";
6
- import "./chunk-5OPZLQDV.js";
6
+ import "./chunk-WD75RSGR.js";
7
7
  import "./chunk-X5YCWKNS.js";
8
8
  import "./chunk-LBGHZLLH.js";
9
9
  import "./chunk-BGTEIA2S.js";
@@ -175,7 +175,7 @@ var QueueProcessor = class {
175
175
  backend: provider?.backend ?? llmClient.getBackend(),
176
176
  model: llmClient.getModel()
177
177
  };
178
- const { runChatTurn } = await import("./orchestrator-OIBLY5QJ.js");
178
+ const { runChatTurn } = await import("./orchestrator-PFN7C5JI.js");
179
179
  const runChatTurnParams = buildRunChatTurnParams({
180
180
  sessionManager,
181
181
  sessionId,
@@ -223,4 +223,4 @@ var QueueProcessor = class {
223
223
  export {
224
224
  QueueProcessor
225
225
  };
226
- //# sourceMappingURL=processor-27VCKRGB.js.map
226
+ //# sourceMappingURL=processor-AYYXP5NS.js.map
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  VERSION,
3
3
  createServer
4
- } from "./chunk-N5JF4RYJ.js";
5
- import "./chunk-W4PUAODY.js";
4
+ } from "./chunk-JFQSQO2N.js";
5
+ import "./chunk-HZNY77HZ.js";
6
6
  import "./chunk-OESYKZCM.js";
7
- import "./chunk-IVJYQZSN.js";
8
- import "./chunk-5OPZLQDV.js";
7
+ import "./chunk-73N5CJH3.js";
8
+ import "./chunk-WD75RSGR.js";
9
9
  import "./chunk-X5YCWKNS.js";
10
10
  import "./chunk-LBGHZLLH.js";
11
11
  import "./chunk-BGTEIA2S.js";
@@ -204,4 +204,4 @@ async function runServe(options) {
204
204
  export {
205
205
  runServe
206
206
  };
207
- //# sourceMappingURL=serve-HB222ARV.js.map
207
+ //# sourceMappingURL=serve-54KALE6R.js.map
@@ -542,6 +542,7 @@ interface ToolContext {
542
542
  sessionId: string;
543
543
  sessionManager: SessionManager;
544
544
  dangerLevel?: DangerLevel$1;
545
+ isSubAgent?: boolean;
545
546
  signal?: AbortSignal | undefined;
546
547
  onProgress?: ((message: string) => void) | undefined;
547
548
  onEvent?: ((event: ServerMessage) => void) | undefined;
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  createServer,
3
3
  createServerHandle
4
- } from "../chunk-N5JF4RYJ.js";
5
- import "../chunk-W4PUAODY.js";
4
+ } from "../chunk-JFQSQO2N.js";
5
+ import "../chunk-HZNY77HZ.js";
6
6
  import "../chunk-OESYKZCM.js";
7
- import "../chunk-IVJYQZSN.js";
8
- import "../chunk-5OPZLQDV.js";
7
+ import "../chunk-73N5CJH3.js";
8
+ import "../chunk-WD75RSGR.js";
9
9
  import "../chunk-X5YCWKNS.js";
10
10
  import "../chunk-LBGHZLLH.js";
11
11
  import "../chunk-BGTEIA2S.js";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  createWebSocketServer,
3
3
  signalMcpReady
4
- } from "./chunk-W4PUAODY.js";
4
+ } from "./chunk-HZNY77HZ.js";
5
5
  import "./chunk-OESYKZCM.js";
6
- import "./chunk-IVJYQZSN.js";
7
- import "./chunk-5OPZLQDV.js";
6
+ import "./chunk-73N5CJH3.js";
7
+ import "./chunk-WD75RSGR.js";
8
8
  import "./chunk-X5YCWKNS.js";
9
9
  import "./chunk-LBGHZLLH.js";
10
10
  import "./chunk-BGTEIA2S.js";
@@ -31,4 +31,4 @@ export {
31
31
  createWebSocketServer,
32
32
  signalMcpReady
33
33
  };
34
- //# sourceMappingURL=server-XDC7R2IX.js.map
34
+ //# sourceMappingURL=server-Z2A5YZM6.js.map
@@ -12,7 +12,7 @@ import {
12
12
  setMcpTools,
13
13
  stepDoneTool,
14
14
  validateToolAction
15
- } from "./chunk-5OPZLQDV.js";
15
+ } from "./chunk-WD75RSGR.js";
16
16
  import "./chunk-X5YCWKNS.js";
17
17
  import "./chunk-LBGHZLLH.js";
18
18
  import "./chunk-BGTEIA2S.js";
@@ -58,4 +58,4 @@ export {
58
58
  stepDoneTool,
59
59
  validateToolAction
60
60
  };
61
- //# sourceMappingURL=tools-W2FFSF4N.js.map
61
+ //# sourceMappingURL=tools-R6LPK6OS.js.map
@@ -284,7 +284,7 @@ XID_Start XIDS`.split(/\s/).map(e=>[bd(e),e])),ZP=new Map([["s",mn(383)],[mn(383
284
284
  `)[0],y=x==null?void 0:x.match(/^(\d+)\|/),w=y?parseInt(y[1],10):1;return o.jsx("div",{className:`rounded overflow-hidden border border-border ${a?"":"max-h-[45vh]"} overflow-y-auto`,children:o.jsx(Ga,{code:m,language:c,variant:"block",showLineNumbers:!0,startLine:w})})}),Z6={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"}},X0=L.memo(function({diagnostics:t}){if(t.length===0)return null;const n=t.filter(l=>l.severity==="error"),s=t.filter(l=>l.severity==="warning"),a=t.filter(l=>l.severity==="info"||l.severity==="hint");return o.jsxs("div",{className:"rounded border border-border overflow-hidden mt-2",children:[o.jsxs("div",{className:"flex items-center gap-3 px-2 py-1.5 bg-bg-tertiary border-b border-border",children:[o.jsx("span",{className:"text-xs font-medium text-text-secondary",children:"LSP Diagnostics"}),n.length>0&&o.jsxs("span",{className:"text-xs text-accent-error font-medium",children:[n.length," error",n.length!==1?"s":""]}),s.length>0&&o.jsxs("span",{className:"text-xs text-accent-warning font-medium",children:[s.length," warning",s.length!==1?"s":""]}),a.length>0&&o.jsxs("span",{className:"text-xs text-text-muted",children:[a.length," info"]})]}),o.jsx("div",{className:"max-h-48 overflow-y-auto",children:t.map((l,u)=>{const c=Z6[l.severity];return o.jsxs("div",{className:`flex items-start gap-2 px-2 py-1.5 ${c.bg} border-b border-border last:border-b-0`,children:[o.jsx("span",{className:`${c.color} text-xs flex-shrink-0 w-4 text-center`,children:c.icon}),o.jsxs("div",{className:"flex-1 min-w-0",children:[o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsxs("span",{className:"text-[10px] text-text-muted font-mono",children:["Ln ",l.range.start.line+1,":",l.range.start.character+1]}),l.code&&o.jsxs("span",{className:"text-[10px] text-text-muted font-mono",children:["[",l.code,"]"]})]}),o.jsx("div",{className:"text-xs text-text-primary break-words",children:l.message})]})]},u)})})]})}),eB=L.memo(function({command:t,timeout:n,startedAt:s,streamingOutput:a,status:l,result:u,error:c,durationMs:d}){const f=L.useRef(null),[p,m]=L.useState(0);L.useEffect(()=>{f.current&&l==="pending"&&(f.current.scrollTop=f.current.scrollHeight)},[a,l]),L.useEffect(()=>{if(l!=="pending"||!s)return;const C=setInterval(()=>{m(Date.now()-s)},100);return()=>clearInterval(C)},[l,s]);const x=n/1e3,y=l==="pending"?p/1e3:(d??0)/1e3,w=l==="pending"?(a==null?void 0:a.map(C=>C.content).join(""))??"":u??"";return o.jsxs("div",{className:"space-y-2",children:[o.jsxs("div",{className:"flex items-center justify-between gap-4",children:[o.jsxs("div",{className:"flex items-center gap-2 text-xs flex-1 min-w-0",children:[o.jsx("span",{className:"text-text-muted flex-shrink-0",children:"$"}),o.jsx("code",{className:"text-text-primary break-all",children:t})]}),o.jsxs("div",{className:"flex items-center gap-2 text-xs text-text-muted flex-shrink-0",children:[l==="pending"&&o.jsx("span",{className:"animate-pulse text-accent-warning",children:"running"}),l==="interrupted"&&o.jsx("span",{className:"text-red-400",children:"interrupted"}),o.jsxs("span",{className:l==="pending"?"text-text-secondary":"text-text-muted",children:[y.toFixed(1),"s / ",x,"s"]})]})]}),l==="pending"&&o.jsx("div",{className:"h-1 bg-bg-tertiary rounded overflow-hidden",children:o.jsx("div",{className:"h-full bg-accent-warning transition-all duration-100",style:{width:`${Math.min(100,p/n*100)}%`}})}),(w||l==="pending")&&o.jsx("pre",{ref:f,className:`text-xs bg-bg-primary p-2 rounded max-h-64 overflow-y-auto ${l==="pending"?"border border-accent-warning/30":""}`,style:{overflowX:"hidden",whiteSpace:"normal"},children:l==="pending"&&a?a.map((C,v)=>o.jsx("span",{className:C.stream==="stderr"?"text-accent-warning":"",children:Nu(C.content)},v)):Nu(w)}),l==="error"&&c&&o.jsx("div",{className:"text-xs text-accent-error bg-accent-error/10 p-2 rounded",children:c}),l!=="pending"&&d!==void 0&&o.jsxs("div",{className:"text-[10px] text-text-muted",children:["Completed in ",(d/1e3).toFixed(2),"s"]})]})}),rl=L.memo(function({className:t=""}){return o.jsx("div",{className:`text-[10px] text-accent-warning ${t}`,children:"Output truncated"})}),tB=L.memo(function({result:t,action:n}){let s;try{s=JSON.parse(t)}catch{return console.warn("DevServerView: failed to parse result JSON",t.slice(0,200)),o.jsx("pre",{className:"text-xs bg-bg-primary p-1.5 rounded overflow-x-auto max-h-[60vh] break-words",children:t})}return n==="logs"?nB(s):rB(s)});function nB(e){if(!e.logs)return o.jsx("div",{className:"text-xs text-text-muted italic",children:"No log output"});const t=e.logs.split(`
285
285
  `);return o.jsxs("div",{className:"space-y-2",children:[o.jsx("div",{className:"text-xs font-mono whitespace-pre-wrap bg-bg-primary p-2 rounded max-h-[60vh] overflow-y-auto break-words",children:t.map((n,s)=>{const a=n.startsWith("[stderr] ");return o.jsx("div",{className:a?"text-accent-warning":"",children:a?n.slice(9):n},s)})}),e.hasMore&&o.jsxs("div",{className:"text-[10px] text-text-muted",children:["Showing ",e.limit," of ",e.total," lines"]})]})}function rB(e){const t=String(e.state??""),n=String(e.url??""),s=e.error?String(e.error):void 0,a=t==="running"?"text-accent-success":t==="stopped"?"text-text-muted":t==="error"?"text-accent-error":"text-text-muted";return o.jsxs("div",{className:"space-y-2 text-xs",children:[o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsx("span",{className:"text-text-muted",children:"State:"}),o.jsx("span",{className:`font-medium ${a}`,children:t})]}),n&&n!=="undefined"&&o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsx("span",{className:"text-text-muted",children:"URL:"}),o.jsx("a",{href:n,className:"text-accent-primary hover:underline",target:"_blank",rel:"noopener noreferrer",children:n})]}),s&&o.jsx("div",{className:"text-accent-error bg-accent-error/10 p-2 rounded",children:s})]})}const sB=L.memo(function({result:t,action:n}){let s;try{s=JSON.parse(t)}catch{return console.warn("BackgroundProcessView: failed to parse result JSON",t.slice(0,200)),o.jsx("pre",{className:"text-xs bg-bg-primary p-1.5 rounded overflow-x-auto max-h-[60vh] break-words",children:t})}return n==="logs"?iB(s):n==="list"?aB(s):n==="status"?oB(s):n==="start"||n==="stop"?lB(s):o.jsxs("div",{className:"space-y-2 text-xs",children:[o.jsxs("div",{className:"text-accent-warning",children:["Unknown action: ",n]}),o.jsx("pre",{className:"text-xs bg-bg-primary p-1.5 rounded overflow-x-auto max-h-[60vh] break-words",children:t})]})});function iB(e){const t=e.lines,n=e.hasMore,s=e.totalLines;return!t||t.length===0?o.jsx("div",{className:"text-xs text-text-muted italic",children:"No log output"}):o.jsxs("div",{className:"space-y-2",children:[o.jsx("div",{className:"text-xs font-mono whitespace-pre-wrap bg-bg-primary p-2 rounded max-h-[60vh] overflow-y-auto break-words",children:t.map((a,l)=>o.jsx("div",{className:a.stream==="stderr"?"text-accent-warning":"",children:a.content},l))}),n&&s!=null&&o.jsxs("div",{className:"text-[10px] text-text-muted",children:["Showing ",t.length," of ",s," lines"]})]})}function aB(e){const t=e.processes,n=e.currentCount,s=e.maxPerSession;return!t||t.length===0?o.jsx("div",{className:"text-xs text-text-muted italic",children:"No background processes"}):o.jsxs("div",{className:"space-y-2",children:[t.map(a=>o.jsx(YC,{process:a},a.id)),n!=null&&s!=null&&o.jsxs("div",{className:"text-[10px] text-text-muted",children:[n," of ",s," slots used"]})]})}function oB(e){const t=e.process,n=e.uptime;return t?o.jsxs("div",{className:"space-y-2",children:[o.jsx(YC,{process:t}),n!=null&&o.jsxs("div",{className:"text-[10px] text-text-muted",children:["Uptime: ",cB(n)]})]}):o.jsx("div",{className:"text-xs text-text-muted italic",children:"Process not found"})}function lB(e){const t=e.processId,n=e.name,s=e.pid,a=e.status,l=a==="running"?"text-accent-success":"text-text-muted";return o.jsxs("div",{className:"space-y-2 text-xs",children:[n&&o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsx("span",{className:"text-text-muted",children:"Name:"}),o.jsx("span",{className:"font-medium",children:n})]}),t&&o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsx("span",{className:"text-text-muted",children:"ID:"}),o.jsx("span",{className:"font-mono",children:t})]}),s!=null&&o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsx("span",{className:"text-text-muted",children:"PID:"}),o.jsx("span",{className:"font-mono",children:s})]}),a&&o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsx("span",{className:"text-text-muted",children:"Status:"}),o.jsx("span",{className:`font-medium ${l}`,children:a})]})]})}function YC({process:e}){const t=e.status==="running"?"text-accent-success":(e.status==="exited","text-text-muted");return o.jsxs("div",{className:"border border-border rounded p-2 space-y-1 text-xs",children:[o.jsxs("div",{className:"flex items-center justify-between",children:[o.jsx("span",{className:"font-medium",children:e.name}),o.jsx("span",{className:`${t}`,children:e.status})]}),e.pid!=null&&o.jsxs("div",{className:"text-text-muted",children:["PID: ",o.jsx("span",{className:"font-mono",children:e.pid})]}),e.command&&o.jsx("div",{className:"text-text-muted font-mono truncate",children:e.command})]})}function cB(e){const t=Math.floor(e/1e3),n=Math.floor(t/60),s=Math.floor(n/60);return s>0?`${s}h ${n%60}m`:n>0?`${n}m ${t%60}s`:`${t}s`}function uB(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 dB({confirmation:e}){const t=Ie(m=>m.confirmPath),n=Ie(m=>m.currentSession),s=Ie(m=>m.switchDangerLevel),{title:a,description:l}=uB(e.reason),u=e.reason==="sensitive_file"||e.reason==="both",c=u?"border-red-500/50":"border-amber-500/50",d=u?"bg-red-500/10":"bg-amber-500/10",f=e.reason==="git_no_verify",p=()=>{n!=null&&n.id&&s("dangerous"),t(e.callId,!0,!1)};return o.jsxs("div",{className:`border ${c} ${d} rounded p-3 my-2`,children:[o.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[o.jsx(zm,{}),o.jsxs("div",{className:"flex-1 min-w-0",children:[o.jsx("div",{className:`text-sm font-medium ${u?"text-red-400":"text-amber-400"}`,children:a}),o.jsx("div",{className:"text-xs text-text-muted",children:l})]})]}),o.jsxs("div",{className:"text-xs text-text-muted mb-2",children:[o.jsx("span",{className:"font-medium",children:e.tool})," wants to access:"]}),o.jsx("div",{className:"bg-bg-primary rounded p-2 mb-3 max-h-24 overflow-y-auto",children:o.jsx("ul",{className:"space-y-0.5",children:e.paths.map((m,x)=>o.jsx("li",{className:`text-xs font-mono ${u?"text-red-300":"text-amber-300"} break-all`,children:m},x))})}),o.jsxs("div",{className:"flex gap-2",children:[o.jsx("button",{onClick:()=>t(e.callId,!1),className:"flex-1 px-3 py-1.5 text-xs font-medium rounded bg-bg-tertiary hover:bg-bg-tertiary/80 text-text-secondary border border-border transition-colors",children:"Deny"}),o.jsx("button",{onClick:()=>t(e.callId,!0,!1),className:"flex-1 px-3 py-1.5 text-xs font-medium rounded bg-accent-primary hover:bg-accent-primary/80 text-text-primary transition-colors",children:"Allow"}),o.jsx("button",{onClick:p,className:`flex-1 px-3 py-1.5 text-xs font-medium rounded transition-colors ${f?"hidden":"bg-red-600 hover:bg-red-700 text-white"}`,title:"Enable dangerous mode and allow this request",children:"Allow Everything"})]})]})}function hB(e,t){if(e==="read_file"){const s=String(t.path??""),a=t.offset,l=t.limit,u=[];return a!==void 0&&a!==1&&u.push(`offset=${a}`),l!==void 0&&u.push(`limit=${l}`),u.length>0?`${s} [${u.join(", ")}]`:s}if(e==="write_file"||e==="edit_file")return String(t.path??"");if(e==="run_command"||e==="bash")return String(t.command??"");if(e==="return_value"){const s=String(t.content??"");return s.length>60?s.slice(0,60)+"...":s}if(e==="call_sub_agent")return String(t.subAgentType??"");if(e==="load_skill")return String(t.skillId??"");if(e==="web_fetch")return String(t.url??"");if(e==="web_search"){const s=String(t.query??"");return s.length>60?s.slice(0,57)+"...":s}if(e==="dev_server")return String(t.action??"");if(e==="background_process"){const s=String(t.action??""),a=t.name?String(t.name):"";return a?`${s}: ${a}`:s}if(e==="mcp_config")return String(t.action??"");if(e==="trace_code")return String(t.symbol??"");const n=JSON.stringify(t);return n.length>50?n.slice(0,50)+"...":n}function Q0(e,t,n){var a;const s=hB(e,t);if(e==="read_file"&&n){const l=n.format,u=n.pageCount;if(l==="pdf"&&u!=null)return`${s} (PDF, ${u}p)`;if(l==="image")return`${s} (image)`}if(e==="web_fetch"&&n){const l=n.contentType;if(l){const u=((a=l.split(";")[0])==null?void 0:a.trim())??"";if(u&&u!=="text/html")return`${s} (${u})`}}return s}function fB(e){return JSON.stringify(e,null,2)}const mB={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}},pB=L.memo(function({tool:t,args:n,status:s,variant:a="compact",forceCompact:l,result:u,error:c,durationMs:d,diagnostics:f,editContext:p,startedAt:m,streamingOutput:x,metadata:y,truncated:w,callId:C}){var A;const v=!l,[S,b]=L.useState(v),_=mB[s],E=en(R=>R.settings[Be.DISPLAY_SHOW_OPEN_IN_EDITOR])==="true",j=t==="edit_file"?(A=p==null?void 0:p.regions[0])==null?void 0:A.startLine:t==="read_file"?(()=>{const R=u==null?void 0:u.split(`
286
286
  `)[0],P=R==null?void 0:R.match(/^(\d+): /);return P?parseInt(P[1],10):void 0})():void 0,T=Ie(R=>R.pendingPathConfirmations),D=s==="pending"&&C?T.find(R=>R.callId===C)??null:null;return a==="compact"?o.jsxs("div",{className:"flex items-center gap-1.5 text-xs bg-secondary rounded px-2 py-1.5",children:[o.jsx(qC,{tool:t}),o.jsx("span",{className:"text-accent-primary font-medium",children:t}),o.jsx("span",{className:"text-text-muted truncate flex-1",children:Q0(t,n,y)}),o.jsx("span",{className:`${_.color} ${_.animate?"animate-pulse":""}`,children:s==="pending"?"...":"done"})]}):o.jsxs("div",{className:"border border-border rounded overflow-hidden my-1 min-w-0",children:[o.jsxs("button",{className:"w-full flex items-center gap-1.5 p-2 bg-secondary hover:bg-secondary/80 text-left",onClick:()=>b(!S),children:[o.jsx("span",{className:`${_.color} ${_.animate?"animate-pulse":""}`,children:_.icon}),o.jsx("span",{className:"font-mono text-accent-primary text-sm",children:t}),o.jsx("span",{className:"text-text-muted text-xs flex-1 truncate",children:Q0(t,n,y)}),o.jsx("span",{className:"text-text-muted text-xs",children:S?"▼":"▶"})]}),D&&o.jsx(dB,{confirmation:D}),S&&o.jsxs("div",{className:"p-2 bg-primary border-t border-border space-y-2 min-w-0",children:[t==="run_command"&&o.jsx(eB,{command:String(n.command??""),timeout:n.timeout??12e4,startedAt:m,streamingOutput:x,status:s,result:u,error:c,durationMs:d}),t==="edit_file"&&s==="success"&&o.jsxs(o.Fragment,{children:[p&&p.regions.length>0?o.jsx(K6,{regions:p.regions,filePath:String(n.path??"")}):o.jsx(W6,{oldString:String(n.old_string??""),newString:String(n.new_string??""),filePath:String(n.path??"")}),f&&f.length>0&&o.jsx(X0,{diagnostics:f})]}),t==="write_file"&&s==="success"&&o.jsxs(o.Fragment,{children:[o.jsx(q6,{content:String(n.content??""),filePath:String(n.path??"")}),f&&f.length>0&&o.jsx(X0,{diagnostics:f})]}),t==="read_file"&&s==="success"&&o.jsx(J6,{result:u,metadata:y,filePath:String(n.path??""),heightExpanded:S}),t==="return_value"&&(()=>{const R=(x==null?void 0:x.map(W=>W.content).join(""))??"",P=s==="pending"&&R?R:String(n.content??"");return o.jsxs("div",{children:[o.jsx("div",{className:"text-[10px] text-accent-primary font-medium mb-1 uppercase tracking-wide",children:"Sub-Agent Summary"}),o.jsx("div",{className:"text-xs prose prose-invert prose-sm max-w-none",children:o.jsx(Vn,{content:P})})]})})(),t==="call_sub_agent"&&o.jsxs("div",{children:[o.jsxs("div",{className:"text-[10px] text-accent-primary font-medium mb-1 uppercase tracking-wide",children:[String(n.subAgentType??"Sub-Agent")," Prompt"]}),o.jsx("div",{className:"text-xs prose prose-invert prose-sm max-w-none max-h-[60vh] overflow-y-auto",children:o.jsx(Vn,{content:String(n.prompt??"")})})]}),t==="web_search"&&s==="success"&&o.jsxs("div",{children:[o.jsx("div",{className:"text-xs prose prose-invert prose-sm max-w-none max-h-[60vh] overflow-y-auto",children:o.jsx(Vn,{content:u??""})}),w&&o.jsx(rl,{className:"mt-1"})]}),t==="load_skill"&&s==="success"&&o.jsxs("div",{children:[o.jsxs("div",{className:"text-[10px] text-accent-primary font-medium mb-1 uppercase tracking-wide",children:["Skill: ",String(n.skillId??"")]}),o.jsx("div",{className:"text-xs prose prose-invert prose-sm max-w-none max-h-[60vh] overflow-y-auto",children:o.jsx(Vn,{content:u??""})}),w&&o.jsx(rl,{className:"mt-1"})]}),t==="web_fetch"&&s==="success"&&o.jsxs("div",{className:"space-y-2",children:[!!(y!=null&&y.url)&&o.jsxs("div",{className:"flex items-center gap-2 text-xs text-text-muted",children:[o.jsx("span",{children:"Source:"}),o.jsx("a",{href:String(y.url),className:"text-accent-primary hover:underline truncate",target:"_blank",rel:"noopener noreferrer",children:String(y.url)}),!!(y!=null&&y.contentType)&&o.jsxs("span",{className:"text-text-muted flex-shrink-0",children:["(",String(y.contentType),")"]}),(y==null?void 0:y.pageCount)!=null&&o.jsxs("span",{className:"text-text-muted flex-shrink-0",children:["· ",String(y.pageCount)," pages"]})]}),o.jsx("div",{className:"text-xs prose prose-invert prose-sm max-w-none max-h-[60vh] overflow-y-auto",children:o.jsx(Vn,{content:u??""})}),w&&o.jsx(rl,{})]}),t==="trace_code"&&s==="success"&&o.jsx("div",{children:o.jsx("div",{className:"text-xs font-mono whitespace-pre-wrap bg-bg-primary p-2 rounded max-h-[60vh] overflow-y-auto break-words",children:u??""})}),t==="dev_server"&&s==="success"&&u&&o.jsx(tB,{result:u,action:String(n.action??"")}),t==="background_process"&&s==="success"&&u&&o.jsx(sB,{result:u,action:String(n.action??"")}),t==="mcp_config"&&s==="success"&&o.jsxs("div",{children:[o.jsx("div",{className:"text-xs prose prose-invert prose-sm max-w-none max-h-[60vh] overflow-y-auto",children:o.jsx(Vn,{content:u??""})}),w&&o.jsx(rl,{className:"mt-1"})]}),t==="step_done"&&null,t!=="edit_file"&&t!=="write_file"&&t!=="run_command"&&t!=="read_file"&&t!=="return_value"&&t!=="call_sub_agent"&&t!=="web_search"&&t!=="load_skill"&&t!=="web_fetch"&&t!=="trace_code"&&t!=="dev_server"&&t!=="background_process"&&t!=="mcp_config"&&t!=="step_done"&&o.jsxs(o.Fragment,{children:[Object.keys(n).length>0&&o.jsxs("div",{children:[o.jsx("div",{className:"text-[10px] text-text-muted mb-0.5",children:"Arguments:"}),o.jsx("pre",{className:"text-xs bg-bg-primary p-1.5 rounded overflow-x-auto break-words",children:fB(n)})]}),s==="success"&&u!==void 0&&o.jsxs("div",{children:[o.jsxs("div",{className:"text-[10px] text-text-muted mb-0.5",children:["Result",d!==void 0&&` (${d}ms)`,":"]}),o.jsx("pre",{className:"text-xs bg-bg-primary p-1.5 rounded overflow-x-auto max-h-[60vh] break-words",children:u||"No output"}),w&&o.jsx(rl,{className:"mt-1"})]})]}),s==="success"&&(t==="edit_file"||t==="write_file"||t==="read_file")&&d!==void 0&&o.jsxs("div",{className:"text-[10px] text-text-muted flex items-center gap-2",children:[o.jsxs("span",{children:["Completed in ",d,"ms"]}),E&&(t==="read_file"||t==="write_file"||t==="edit_file")&&String((y==null?void 0:y.path)??n.path??"")&&o.jsx("a",{href:`vscode://file/${String((y==null?void 0:y.path)??n.path)}${j?`:${j}`:""}`,className:"text-accent-primary hover:underline ml-auto",children:"Open in VSCode"})]}),s==="error"&&c&&t!=="run_command"&&o.jsxs("div",{children:[o.jsx("div",{className:"text-[10px] text-accent-error mb-0.5",children:"Error:"}),o.jsx("pre",{className:"text-xs bg-bg-primary p-1.5 rounded text-accent-error break-words",children:c})]})]})]})}),gB={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"},xB={criteria:"criteria",review_findings:"review findings",todos:"tasks"};function yB(e,t){const n=gB[e];if(!n)return`Preparing ${e}`;if(e==="session_metadata"&&t)try{const a=JSON.parse(t).key;if(a){const l=xB[a]??a;return`${n} ${l}`}}catch{}return n}function _B(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 bB=L.memo(function({name:t,arguments:n}){let a=yB(t,n)+"...";if(t==="run_command"&&n){const l=_B(n);l&&(a=l)}return o.jsx("div",{className:"border border-border rounded overflow-hidden my-1 min-w-0 animate-pulse",children:o.jsxs("div",{className:"flex items-center gap-1.5 p-2 bg-bg-tertiary",children:[o.jsx("span",{className:"text-accent-warning animate-pulse",children:"..."}),o.jsx(qC,{tool:t}),o.jsx("span",{className:"font-mono text-accent-primary text-sm",children:t}),t==="run_command"&&n?o.jsx("code",{className:"text-text-muted text-xs flex-1 truncate",children:a}):o.jsx("span",{className:"text-text-muted text-xs flex-1",children:a})]})})}),vB={pending:{icon:"○",color:"text-text-muted"},in_progress:{icon:"●",color:"text-accent-warning",animate:!0},completed:{icon:"✓",color:"text-accent-success"}},SB=L.memo(function({todos:t}){return Array.isArray(t)?t.length===0?o.jsx("div",{className:"text-xs text-text-muted italic my-1",children:"No tasks"}):o.jsxs("div",{className:"my-1 rounded border border-border bg-bg-tertiary overflow-hidden",children:[o.jsx("div",{className:"px-2 py-1.5 border-b border-border bg-bg-secondary",children:o.jsx("span",{className:"text-xs font-medium text-text-muted",children:"Tasks"})}),o.jsx("div",{children:t.map((n,s)=>{const a=vB[n.status];return o.jsxs("div",{className:`flex items-start gap-2 px-2 py-1.5 ${s>0?"border-t border-border":""}`,children:[o.jsx("span",{className:`${(a==null?void 0:a.color)??"text-text-muted"} ${a!=null&&a.animate?"animate-pulse":""} text-sm leading-tight`,children:(a==null?void 0:a.icon)??"○"}),o.jsx("span",{className:`text-sm leading-tight ${n.status==="completed"?"text-text-muted":"text-text-primary"}`,children:n.content})]},s)})})]}):o.jsx("div",{className:"text-xs text-accent-warning italic my-1",children:"⚠️ Invalid todos data"})});function wB({toolCall:e}){var E;const t=Ie(j=>j.pendingQuestions),n=Ie(j=>j.answerQuestion),[s,a]=L.useState(""),l=L.useRef(null),u=L.useRef(null),c=t.find(j=>j.callId===e.id),d=e.arguments.question??(c==null?void 0:c.question)??"",f=e.arguments.type??(c==null?void 0:c.type)??"text",p=e.arguments.options??(c==null?void 0:c.options)??void 0,m=e.result!==void 0,x=c!==void 0&&!m,y=((E=e.result)==null?void 0:E.output)??"",w=y==="[user skipped]";L.useEffect(()=>{x&&l.current&&l.current.focus()},[x]),L.useEffect(()=>{x&&u.current&&u.current.scrollIntoView({behavior:"smooth",block:"nearest"})},[x]);const C=L.useCallback(()=>{c&&n(c.callId,s)},[c,s,n]),v=L.useCallback(()=>{c&&n(c.callId,"",!0)},[c,n]),S=L.useCallback(j=>{j.key==="Enter"&&!j.shiftKey&&(j.preventDefault(),C()),j.key==="Escape"&&!j.shiftKey&&(j.preventDefault(),v())},[C,v]),b=L.useCallback(j=>{c&&n(c.callId,j)},[c,n]),_="px-3 py-1.5 text-xs font-medium rounded transition-colors";return o.jsxs("div",{ref:u,className:"my-1",children:[o.jsx("div",{className:"text-sm text-text-primary",children:d}),x&&o.jsx("div",{className:"mt-2 border border-border rounded overflow-hidden",children:o.jsx("div",{className:"p-3 bg-primary space-y-2",children:f==="confirm"?o.jsxs("div",{className:"flex gap-2",children:[o.jsx("button",{onClick:()=>b("yes"),className:`${_} flex-1 bg-accent-success/20 hover:bg-accent-success/30 text-accent-success border border-accent-success/30`,children:"Yes"}),o.jsx("button",{onClick:()=>b("no"),className:`${_} flex-1 bg-accent-error/20 hover:bg-accent-error/30 text-accent-error border border-accent-error/30`,children:"No"}),o.jsx("button",{onClick:v,className:`${_} bg-bg-tertiary hover:bg-bg-tertiary/80 text-text-secondary border border-border`,children:"Skip"})]}):f==="choice"&&p&&p.length>0?o.jsxs(o.Fragment,{children:[o.jsx("div",{className:"flex flex-col gap-1.5",children:p.map(j=>o.jsx("button",{onClick:()=>b(j),className:`${_} text-left w-full bg-bg-tertiary hover:bg-accent-primary/20 text-text-primary border border-border hover:border-accent-primary/50`,children:j},j))}),o.jsxs("div",{className:"flex gap-2",children:[o.jsx("textarea",{ref:l,value:s,onChange:j=>a(j.target.value),onKeyDown:S,placeholder:"Or type your own answer... (Enter to submit)",className:"flex-1 min-h-[36px] max-h-[80px] px-2 py-1.5 bg-bg-tertiary border border-border rounded text-xs text-text-primary placeholder:text-text-muted focus:outline-none focus:ring-2 focus:ring-accent-primary/50 resize-y",rows:1}),o.jsx("button",{onClick:C,disabled:!s.trim(),className:`${_} bg-accent-primary/25 hover:bg-accent-primary/40 text-text-primary disabled:opacity-50 disabled:cursor-not-allowed`,children:"Send"}),o.jsx("button",{onClick:v,className:`${_} bg-bg-tertiary hover:bg-bg-tertiary/80 text-text-secondary border border-border`,children:"Skip"})]})]}):o.jsxs(o.Fragment,{children:[o.jsx("textarea",{ref:l,value:s,onChange:j=>a(j.target.value),onKeyDown:S,placeholder:"Type your answer here... (Enter to submit, Shift+Enter for new line)",className:"w-full min-h-[80px] px-3 py-2 bg-bg-tertiary border border-border rounded text-sm text-text-primary placeholder:text-text-muted focus:outline-none focus:ring-2 focus:ring-accent-primary/50 resize-y",autoFocus:!0}),o.jsxs("div",{className:"flex justify-end gap-2",children:[o.jsx("button",{onClick:v,className:`${_} bg-bg-tertiary hover:bg-bg-tertiary/80 text-text-secondary border border-border`,children:"Skip"}),o.jsx("button",{onClick:C,disabled:!s.trim(),className:`${_} bg-accent-primary/25 hover:bg-accent-primary/40 text-text-primary disabled:opacity-50 disabled:cursor-not-allowed`,children:"Send Answer"})]})]})})}),m&&o.jsx("div",{className:"mt-1 flex items-center gap-2",children:o.jsx("span",{className:`text-xs ${w?"text-amber-400":"text-accent-success"}`,children:w?"Skipped":`Answered: ${y}`})})]})}const J0={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"}},CB=L.memo(function({toolCalls:t,criteria:n}){if(t.length===0)return null;const s=new Map((n==null?void 0:n.map(d=>[d.id,d]))??[]),a=t.find(d=>{var f,p;return d.arguments.action==="get"&&((f=d.result)==null?void 0:f.success)&&((p=d.result)==null?void 0:p.output)}),l=t.some(d=>d.name==="session_metadata"),u={criteria:"Acceptance Criteria",review_findings:"Review Findings",todos:"Tasks"},c=(()=>{if(!l)return"Acceptance Criteria";const d=new Set(t.map(f=>f.arguments.key).filter(Boolean));if(d.size===1){const f=d.values().next().value;return f?u[f]??f:"Session Data"}return"Session Data"})();return o.jsxs("div",{className:"my-1 rounded border border-border bg-secondary overflow-hidden",children:[o.jsx("div",{className:"px-2 py-1.5 border-b border-border bg-secondary",children:o.jsx("span",{className:"text-xs font-medium text-text-muted",children:c})}),o.jsx("div",{className:"bg-primary",children:a?(()=>{const d=a.result.output;if(d==="No criteria defined yet.")return o.jsxs("div",{className:"flex items-start gap-2 px-2 py-1.5",children:[o.jsx("span",{className:"text-text-muted text-sm leading-tight flex-shrink-0",children:"○"}),o.jsx("div",{className:"flex-1 min-w-0 text-text-muted text-sm",children:"No criteria defined yet."})]});try{return JSON.parse(d).map((p,m)=>o.jsxs("div",{className:`flex items-start gap-2 px-2 py-1.5 ${m>0?"border-t border-border":""}`,children:[o.jsx("span",{className:"text-text-muted text-sm leading-tight flex-shrink-0",children:"○"}),o.jsx("div",{className:"flex-1 min-w-0",children:o.jsx(Vn,{content:`[${p.id}] ${p.description}`})})]},p.id??m))}catch{return t.map((f,p)=>o.jsx(Z0,{tc:f,index:p,criteriaMap:s},f.id??p))}})():t.map((d,f)=>o.jsx(Z0,{tc:d,index:f,criteriaMap:s},d.id??f))})]})});function Z0({tc:e,index:t,criteriaMap:n}){const s=e.arguments.action,a=e.arguments,l=e.name==="session_metadata",u=s==="remove",c=a.id,d=a.description,f=c?n.get(c):void 0,p=d??(f==null?void 0:f.description)??(u&&c?`[${c}]`:"Criterion updated"),m=a.reason,x=s==="fail";return o.jsxs("div",{className:`flex items-start gap-2 px-2 py-1.5 ${t>0?"border-t border-border":""}`,children:[l?o.jsx(nd,{status:a.status,className:"text-sm leading-tight flex-shrink-0"}):(()=>{const y=s&&J0[s]?J0[s]:{icon:"○",color:"text-text-muted"};return o.jsx("span",{className:`${y.color} text-sm leading-tight flex-shrink-0`,children:y.icon})})(),o.jsxs("div",{className:"flex-1 min-w-0",children:[o.jsx("div",{className:u?"line-through text-text-muted":"",children:o.jsx(Vn,{content:p})}),m&&o.jsxs("div",{className:`mt-1 text-sm ${x?"text-accent-error":"text-text-muted"}`,children:[o.jsx("span",{className:"text-text-muted",children:"└ "}),'"',m,'"']})]})]})}function kB(e){return e==="criterion"||e==="session_metadata"}function EB(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"&&kB(a.toolCall.name)?n.push(a.toolCall):(s(),t.push(a));return s(),t}function jB(e,t){if(e.segments&&e.segments.length>0)return NB(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 NB(e,t,n,s,a){const l=[],u=new Map(t.map(c=>[c.id,c]));for(const c of e)switch(c.type){case"text":l.push({type:"text",content:c.content});break;case"thinking":c.content&&c.content.trim().length>0&&l.push({type:"thinking",content:c.content});break;case"tool_call":{const d=u.get(c.toolCallId);d&&l.push({type:"tool_call",toolCall:d});break}}for(const c of n)l.push({type:"preparing_tool_call",preparing:c});return a&&s&&l.push({type:"stats",stats:s}),l}const yg=L.memo(function({message:t,showStats:n=!0,showThinking:s=!0,showVerboseToolOutput:a=!0}){const l=Ie(x=>{var y,w;return(w=(y=x.currentSession)==null?void 0:y.metadataEntries)==null?void 0:w.criteria}),u=wt(x=>x.defaults),c=wt(x=>x.userItems),d=[...u,...c],f=jB(t,n),p=s?f:f.filter(x=>x.type!=="thinking"),m=EB(p);return m.length===0?null:o.jsx("div",{className:"feed-item",children:o.jsxs("div",{className:"min-w-0",children:[m.map((x,y)=>{var w;switch(x.type){case"thinking":return o.jsx(V6,{content:x.content},y);case"text":return o.jsx("div",{className:"prose prose-sm prose-invert max-w-none",children:o.jsx(Vn,{content:x.content})},y);case"preparing_tool_call":return o.jsx(bB,{name:x.preparing.name,arguments:x.preparing.arguments},`preparing-${x.preparing.index}`);case"tool_call":{const C=x.toolCall,v=C.result;if(C.name==="ask_user")return o.jsx(wB,{toolCall:C},y);if(C.name==="todo_write"){const _=C.arguments.todos,E=Array.isArray(_)?_:[];return o.jsx(SB,{todos:E},y)}const S=(w=v==null?void 0:v.output)==null?void 0:w.includes("[interrupted by user]"),b=v?S?"interrupted":v.success?"success":"error":"pending";return o.jsx(pB,{tool:C.name,args:C.arguments,status:b,variant:"expandable",forceCompact:!a,result:v==null?void 0:v.output,error:v==null?void 0:v.error,durationMs:v==null?void 0:v.durationMs,diagnostics:v==null?void 0:v.diagnostics,editContext:v==null?void 0:v.editContext,startedAt:C.startedAt,streamingOutput:C.streamingOutput,metadata:v==null?void 0:v.metadata,truncated:(v==null?void 0:v.truncated)??!1,callId:C.id},y)}case"criteria_group":return o.jsx(CB,{toolCalls:x.toolCalls,criteria:l},y);case"stats":{const C=x.stats;if(!C||"error"in C)return null;const v=C.model.split("/").pop()??C.model,S=yl(d,C.mode),b=E=>E>=1e3?`${(E/1e3).toFixed(1)}k`:E.toString(),_=E=>E>=1e3?`${(E/1e3).toFixed(1)}k`:E.toFixed(1);return o.jsxs("div",{className:"flex items-center justify-center gap-1.5 text-[10px] text-text-muted mt-3",children:[o.jsx("span",{className:"flex-1 h-px bg-border"}),o.jsx("span",{className:"text-text-secondary",children:v}),o.jsx("span",{className:"text-text-muted",children:"·"}),o.jsx("span",{style:{color:S},children:C.mode}),o.jsx("span",{className:"text-text-muted",children:"·"}),o.jsxs("span",{children:[C.totalTime.toFixed(1),"s"]}),C.toolTime>0&&o.jsxs(o.Fragment,{children:[o.jsx("span",{className:"text-text-muted",children:"·"}),o.jsxs("span",{children:[C.toolTime.toFixed(1),"s tools"]})]}),o.jsx("span",{className:"text-text-muted",children:"·"}),o.jsxs("span",{children:[b(C.prefillTokens)," @ ",_(C.prefillSpeed)," pp"]}),o.jsx("span",{className:"text-text-muted",children:"·"}),o.jsxs("span",{children:[b(C.generationTokens)," @ ",_(C.generationSpeed)," tg"]}),o.jsx("span",{className:"text-text-muted",children:"·"}),o.jsx("button",{type:"button",className:"text-text-muted hover:text-text-secondary transition-colors",title:"View detailed stats",onClick:()=>{const E=new CustomEvent("open-turn-stats",{detail:{stats:C}});window.dispatchEvent(E)},children:o.jsx(DS,{className:"w-3 h-3"})}),o.jsx("span",{className:"flex-1 h-px bg-border"})]},y)}}}),t.partial&&o.jsxs("div",{className:"flex items-center gap-1.5 text-[10px] text-accent-warning mt-1",children:[o.jsx(zm,{}),o.jsx("span",{children:"Aborted"})]}),t.completeReason==="truncated"&&o.jsxs("div",{className:"flex items-center gap-1.5 text-[10px] text-amber-400/80 mt-1",children:[o.jsx(zm,{}),o.jsx("span",{children:"Response was truncated — the model ran out of output tokens."})]})]})})});function Gu(e,t){const n=parseInt(e.slice(1,3),16),s=parseInt(e.slice(3,5),16),a=parseInt(e.slice(5,7),16);return`rgba(${n},${s},${a},${t})`}function TB(e){if(e<60)return`${e}s`;const t=Math.floor(e/60),n=Math.round(e%60);return n>0?`${t}m ${n}s`:`${t}m`}function AB(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}const LB=L.memo(function({data:t}){var u;const n=Rt(c=>c.defaults),s=Rt(c=>c.userItems),l=((u=[...n,...s].find(c=>c.id===t.workflowId))==null?void 0:u.color)??t.workflowColor??"#8b949e";return o.jsxs("div",{"data-testid":"task-completed-card",className:"feed-item rounded p-3 border",style:{borderColor:Gu(l,.3),backgroundColor:Gu(l,.08)},children:[o.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[o.jsx(nN,{color:l}),o.jsx("span",{className:"text-sm font-medium",style:{color:l},children:t.workflowName??"Task Completed"})]}),o.jsxs("div",{className:"grid grid-cols-3 sm:grid-cols-5 gap-2",children:[o.jsx(sl,{label:"Iterations",value:String(t.iterations)}),o.jsx(sl,{label:"Total time",value:TB(t.totalTimeSeconds)}),o.jsx(sl,{label:"Tool calls",value:String(t.totalToolCalls)}),o.jsx(sl,{label:"Tokens",value:AB(t.totalTokensGenerated)}),o.jsx(sl,{label:"Speed",value:t.avgGenerationSpeed>0?`${t.avgGenerationSpeed} tok/s`:"-"})]})]})});function sl({label:e,value:t}){return o.jsxs("div",{className:"bg-bg-primary/50 rounded px-2 py-1",children:[o.jsx("div",{className:"text-sm text-text-muted",children:e}),o.jsx("div",{className:"text-sm text-text-primary font-medium",children:t})]})}const DB=L.memo(function({data:t}){var u;const n=Rt(c=>c.defaults),s=Rt(c=>c.userItems),l=((u=[...n,...s].find(c=>c.id===t.workflowId))==null?void 0:u.color)??t.workflowColor??"#6b7280";return o.jsxs("div",{className:"feed-item flex items-center gap-2 px-3 py-2 rounded border",style:{borderColor:Gu(l,.3),backgroundColor:Gu(l,.08)},children:[o.jsx(Jj,{className:"w-3 h-3 shrink-0",color:l}),o.jsx("span",{className:"text-sm font-medium",style:{color:l},children:t.workflowName}),o.jsx("span",{className:"text-text-muted text-sm",children:"started"})]})});function RB({attachments:e,messageId:t}){const[n,s]=L.useState(null),a=Ie(p=>p.visionFallbackByMessage),l=Ie(p=>p.messages),u=L.useMemo(()=>{const p=l.findIndex(m=>m.id===t);if(p===-1)return null;for(let m=p+1;m<l.length;m++){const x=l[m];if(x&&x.role==="assistant")return x.id}return null},[l,t]),c=p=>{s(p)},d=()=>{s(null)},f=p=>{const m=`${t}-${p}`;if(a[m])return a[m];if(u){const x=`${u}-${p}`;return a[x]}return null};return e.length===0?null:o.jsxs(o.Fragment,{children:[o.jsx("div",{className:"mt-3 flex flex-wrap gap-3",children:e.map(p=>{const m=f(p.id);return o.jsxs("div",{className:"relative inline-block",children:[o.jsxs("button",{onClick:()=>c(p.data),className:"group relative inline-block",title:(m==null?void 0:m.type)==="done"&&m.description||p.description||p.filename,disabled:(m==null?void 0:m.type)==="start",children:[o.jsx("img",{src:p.data,alt:(m==null?void 0:m.type)==="done"&&m.description||p.description||p.filename,className:"max-w-[256px] max-h-[256px] object-contain rounded-lg border border-border hover:border-accent-primary transition-colors cursor-pointer"}),(m==null?void 0:m.type)==="start"&&o.jsx("div",{className:"absolute inset-0 bg-black/60 flex items-center justify-center rounded-lg",children:o.jsx("span",{className:"text-xs text-text-primary animate-pulse",children:"Describing image..."})})]}),(m==null?void 0:m.type)==="done"&&m.description&&o.jsxs("div",{className:"mt-2 p-2 bg-bg-tertiary rounded text-xs text-text-secondary max-w-[256px]",children:[m.description.slice(0,200),m.description.length>200?"...":""]})]},p.id)})}),n&&o.jsx(KC,{src:n,alt:"Attached image",isOpen:!0,onClose:d})]})}function OB({content:e,align:t="right",messageId:n,sessionId:s}){const[a,l]=L.useState(!1),[u,c]=L.useState(!1),[d,f]=L.useState("left"),p=L.useRef(null),m=L.useRef(null),x=Ie(S=>S.loadSession),y=t==="right",w=()=>{if(!m.current)return"left";const S=m.current.getBoundingClientRect(),b=window.innerWidth-S.right,_=S.left,E=160,j=b>=E,T=_>=E;return T&&j||T?"left":j?"right":_>=b?"left":"right"};L.useEffect(()=>{const S=b=>{p.current&&!p.current.contains(b.target)&&l(!1)};return a&&document.addEventListener("mousedown",S),()=>document.removeEventListener("mousedown",S)},[a]);const C=async()=>{try{if(navigator.clipboard)await navigator.clipboard.writeText(e);else{const S=document.createElement("textarea");S.value=e,S.style.position="fixed",S.style.left="-999999px",document.body.appendChild(S),S.select(),document.execCommand("copy"),document.body.removeChild(S)}c(!0),l(!1),window.setTimeout(()=>c(!1),1500)}catch(S){console.error("Failed to copy:",S)}},v=async()=>{!s||!n||(l(!1),await z2(s,n),x(s))};return o.jsx(o.Fragment,{children:o.jsxs("div",{className:`flex items-start gap-1.5 ${y?"":"order-first"}`,children:[u&&o.jsx(Wr,{className:"w-4 h-4 text-accent-success"}),o.jsxs("div",{ref:p,className:"relative",children:[o.jsx("button",{ref:m,onClick:()=>{a||f(w()),l(!a)},className:"p-1 rounded hover:bg-bg-tertiary text-text-muted hover:text-text-primary",title:"Message options",children:o.jsx(jp,{})}),a&&o.jsxs("div",{className:`absolute top-full mt-1 bg-bg-secondary border border-border rounded shadow-xl z-50 py-1 min-w-36 ${d==="right"?"left-0":"right-0"}`,children:[o.jsxs("button",{onClick:C,className:"w-full px-3 py-1.5 text-left text-sm text-text-primary hover:bg-bg-tertiary flex items-center gap-2",children:[o.jsx(Ep,{className:"w-4 h-4"}),"Copy"]}),s&&n&&o.jsxs(o.Fragment,{children:[o.jsx("div",{className:"border-t border-border my-1"}),o.jsxs("button",{onClick:v,className:"w-full px-3 py-1.5 text-left text-sm text-text-primary hover:bg-bg-tertiary flex items-center gap-2",children:[o.jsx(Np,{className:"w-4 h-4"}),"Replay"]})]})]})]})]})})}function IB({message:e}){const[t,n]=L.useState(!1);if(e.messageKind!=="auto-prompt")return null;const s=e.metadata,a=(s==null?void 0:s.color)??"#6b7280",l=(s==null?void 0:s.name)??"Agent",u=(s==null?void 0:s.type)??"agent",d={agent:(s==null?void 0:s.kind)==="reminder"?"reminder":"definition injected",workflow:"instructions",compaction:"prompt injected",subagent:"instructions"}[u]??"injected",f=u==="workflow"||u==="subagent";return o.jsxs(o.Fragment,{children:[o.jsxs("div",{className:"flex items-center justify-center gap-1.5 text-[10px] text-text-muted font-mono mt-3 mb-4",children:[o.jsx("span",{className:"flex-1 h-px bg-border"}),o.jsx("span",{className:`w-1.5 h-1.5 rounded-full flex-shrink-0 ${f?"":"cursor-pointer"}`,style:{backgroundColor:a},onClick:()=>!f&&n(!0)}),o.jsx("span",{className:f?"":"cursor-pointer hover:text-text-secondary transition-colors",style:{color:a},onClick:()=>!f&&n(!0),children:l}),o.jsx("span",{children:"·"}),o.jsx("span",{className:f?"":"cursor-pointer hover:text-text-secondary transition-colors",onClick:()=>!f&&n(!0),children:d}),o.jsx("span",{className:"flex-1 h-px bg-border"})]}),f&&o.jsx("div",{className:"flex justify-center feed-item mb-4",children:o.jsx("div",{className:"max-w-[75%] rounded p-3 bg-bg-tertiary/50 text-text-secondary text-sm overflow-x-auto",style:{borderLeft:`3px solid ${a}`},children:o.jsx("pre",{className:"whitespace-pre-wrap break-words font-mono text-xs",children:e.content})})}),o.jsx(Mt,{isOpen:t,onClose:()=>n(!1),title:`${l} Prompt`,size:"lg",children:o.jsxs("div",{className:"space-y-4",children:[o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsx("span",{className:"w-3 h-3 rounded-full",style:{backgroundColor:a}}),o.jsx("span",{className:"text-sm text-text-primary font-medium",children:l}),o.jsxs("span",{className:"text-xs text-text-muted",children:["(",u,")"]})]}),o.jsx("div",{className:"h-full min-h-96",children:o.jsx("pre",{className:"text-sm text-text-secondary whitespace-pre-wrap break-words bg-bg-tertiary rounded p-4 h-full min-h-96 overflow-auto font-mono",children:e.content})})]})})]})}function MB({message:e,messageId:t,sessionId:n}){const s=e.messageKind==="auto-prompt",a=e.messageKind==="command",l=e.isSystemGenerated;return o.jsxs("div",{className:"flex justify-end items-start gap-1.5 feed-item",children:[!l&&o.jsx(OB,{content:e.content,align:"right",messageId:t,sessionId:n}),o.jsxs("div",{className:`max-w-[75%] rounded p-2 ${l?a?"bg-teal-500/10 border border-teal-500/30":s?"bg-slate-500/10 border border-slate-500/30":"bg-amber-500/10 border border-amber-500/30":"bg-accent-primary/15 text-text-primary"}`,children:[l&&o.jsx("span",{className:`text-[10px] block mb-0.5 ${a?"text-teal-400":s?"text-slate-400":"text-amber-400"}`,children:a?"Command":s?"Auto":"System"}),o.jsx("div",{className:`whitespace-pre-wrap break-words text-sm ${l?`${a?"text-teal-200":s?"text-slate-200":"text-amber-200 italic"}`:""}`,children:e.content}),e.attachments&&e.attachments.length>0&&o.jsx(RB,{attachments:e.attachments,messageId:e.id})]})]})}const XC=L.memo(function({message:t,isLastAssistantMessage:n=!1,messageId:s,sessionId:a}){const l=t.role==="user",u=t.role==="assistant",c=t.role==="system",d=t.role==="tool";if(u)return o.jsx(yg,{message:t,showStats:n});if(c&&t.isCompacted)return o.jsxs("div",{className:"feed-item bg-bg-tertiary/50 border border-border rounded p-2",children:[o.jsx("div",{className:"text-text-muted text-xs mb-0.5",children:"[Compacted]"}),o.jsx("div",{className:"text-text-secondary text-xs whitespace-pre-wrap",children:t.content.replace(`[COMPACTED HISTORY]
287
- `,"")})]});if(d)return o.jsxs("div",{className:"feed-item bg-bg-tertiary/30 border-l-2 border-accent-primary rounded-r p-2",children:[o.jsxs("div",{className:"text-accent-primary text-xs mb-0.5",children:["Tool: ",t.toolName]}),o.jsxs("pre",{className:"text-text-secondary text-xs whitespace-pre-wrap break-words overflow-x-auto max-h-32",children:[t.content.slice(0,500),t.content.length>500&&"..."]})]});if(t.messageKind==="workflow-started")try{const f=JSON.parse(t.content);return o.jsx(DB,{data:f})}catch{}if(t.messageKind==="task-completed")try{const f=JSON.parse(t.content);return o.jsx(LB,{data:f})}catch{}return t.messageKind==="context-reset"?o.jsxs("div",{className:"flex items-center gap-4 mb-6 text-text-muted text-xs uppercase tracking-wide",children:[o.jsx("div",{className:"flex-1 border-t border-border"}),o.jsx("span",{children:t.content}),o.jsx("div",{className:"flex-1 border-t border-border"})]}):t.messageKind==="auto-prompt"&&t.isSystemGenerated?o.jsx(IB,{message:t}):t.messageKind==="correction"&&t.isSystemGenerated?o.jsx("div",{className:"flex justify-end feed-item",children:o.jsxs("div",{className:"max-w-[75%] rounded p-2 bg-amber-500/10 border border-amber-500/30",children:[o.jsx("span",{className:"text-[10px] block mb-0.5 text-amber-400",children:"System"}),o.jsx("div",{className:"whitespace-pre-wrap break-words text-sm text-amber-200 italic",children:t.content})]})}):l?o.jsx(MB,{message:t,messageId:s,sessionId:a}):o.jsx("div",{className:"flex justify-start feed-item",children:o.jsx("div",{className:"max-w-[75%] rounded p-2 bg-bg-tertiary text-text-primary",children:o.jsx(Vn,{content:t.content})})})}),PB={verifier:"Verification",code_reviewer:"Code Review",test_generator:"Test Generation",debugger:"Debug"};function BB(e){return{backgroundColor:`${e}20`,color:e,borderColor:`${e}4d`}}function eS(e,t){return t||e>85?"text-accent-error":e>60?"text-accent-warning":"text-text-muted"}function $B({contextState:e}){const{currentTokens:t,maxTokens:n,compactionCount:s,dangerZone:a}=e,l=Math.round(t/n*100);return o.jsxs("div",{className:"flex items-center gap-1.5 text-[10px]",children:[o.jsxs("span",{className:eS(l,a),children:[Eu(t),"/",Eu(n)]}),o.jsxs("span",{className:eS(l,a),children:["(",l,"%)"]}),o.jsx(m1,{percent:l,dangerZone:a,size:"sm"}),a&&o.jsx("span",{className:"text-accent-error animate-pulse",children:"Low!"}),s>0&&o.jsxs("span",{className:"text-text-muted bg-bg-tertiary px-1 rounded",children:[s,"x"]})]})}const zB=L.memo(function({messages:t,subAgentType:n,subAgentId:s,isStreaming:a}){const l=L.useRef(null),u=L.useRef(null),[c,d]=L.useState(!1),f=wt(D=>D.defaults),p=wt(D=>D.userItems),m=[...f,...p],x=Ie(D=>D.subAgentContextStates[s]),{showThinking:y,showVerboseToolOutput:w}=$i(),{isAutoScrollActive:C,setAutoScroll:v}=rd(u,null);L.useEffect(()=>{a||v(!0)},[a]);const S=L.useCallback(()=>{const D=!c;d(D),D&&setTimeout(()=>{var A;(A=l.current)==null||A.scrollIntoView({block:"start",behavior:"smooth"})},220)},[c]),b=m.find(D=>D.id===n),_=(b==null?void 0:b.name)??PB[n]??n,E=yl(m,n),j=BB(E),T=t.filter(D=>D.role!=="tool");return o.jsxs("div",{ref:l,className:"feed-item border border-border rounded overflow-hidden bg-secondary",children:[o.jsxs("div",{className:"w-full flex items-center justify-between px-2 py-1 border-b relative",style:j,children:[o.jsx("span",{className:"text-xs font-medium",children:_}),o.jsx("div",{className:"absolute left-1/2 -translate-x-1/2",children:x&&o.jsx($B,{contextState:x})}),o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsxs("button",{type:"button",className:"text-sm text-text-muted hover:text-text-primary flex items-center gap-1.5",onClick:()=>v(!C),children:[o.jsx("span",{className:`w-1 h-1 rounded-full ${C?"bg-accent-success":"border border-text-muted"}`}),"live"]}),o.jsxs("button",{type:"button",className:"text-[10px] px-1.5 py-0.5 rounded bg-bg-tertiary",onClick:S,children:[c?"▼":"▶"," Expand"]})]})]}),o.jsx("div",{ref:u,className:`${c?"max-h-[calc(100vh-10rem)]":"max-h-80"} overflow-y-auto p-2 transition-[max-height] duration-200`,children:T.map(D=>D.role==="assistant"?o.jsx(yg,{message:D,showStats:!0,showThinking:y,showVerboseToolOutput:w},D.id):o.jsx(XC,{message:D,isLastAssistantMessage:!1},D.id))})]})});function pu(e){var t;return e.type==="context-divider"?`ctx-${e.windowSequence}`:e.type==="subagent"?((t=e.messages[0])==null?void 0:t.id)??e.subAgentId:e.message.id}const QC=L.memo(function({displayItems:t,highlightedMessageId:n=null,sessionId:s,showThinking:a=!0,showVerboseToolOutput:l=!0,showStats:u=!0,showAgentDefinitions:c=!0,showWorkflowBars:d=!0}){return o.jsx(o.Fragment,{children:t.map((f,p)=>{if(f.type==="context-divider")return o.jsxs("div",{"data-item-index":p,className:"flex items-center gap-2 feed-item px-2 md:px-4",children:[o.jsx("div",{className:"flex-1 border-t border-border"}),o.jsx("span",{className:"text-[10px] text-text-muted font-medium px-2",children:"Earlier context summarized"}),o.jsx("div",{className:"flex-1 border-t border-border"})]},pu(f));if(f.type==="subagent"){const w=f.messages.some(C=>C.isStreaming);return o.jsx("div",{"data-item-index":p,className:"px-2 md:px-4",children:o.jsx(zB,{messages:f.messages,subAgentType:f.subAgentType,subAgentId:f.subAgentId,isStreaming:w})},pu(f))}const m=f.message;if(m.role==="assistant")return o.jsx("div",{"data-item-index":p,className:"px-2 md:px-4",children:o.jsx(yg,{message:m,showStats:u,showThinking:a,showVerboseToolOutput:l})},pu(f));const x=!c&&m.messageKind==="auto-prompt",y=!d&&(m.messageKind==="workflow-started"||m.messageKind==="task-completed");return x||y?null:o.jsx("div",{"data-item-index":p,className:"px-2 md:px-4",children:o.jsx("div",{"data-message-id":m.id,className:n===m.id?"rounded animate-highlight-fade":void 0,children:o.jsx(XC,{message:m,messageId:m.id,sessionId:s??void 0,isLastAssistantMessage:!1})})},pu(f))})})});function JC(e,t,n=!0){L.useEffect(()=>{if(!n)return;const s=a=>{var l;(l=e.current)!=null&&l.contains(a.target)||t()};return document.addEventListener("mousedown",s),()=>document.removeEventListener("mousedown",s)},[e,t,n])}const HB=[],UB=L.memo(function({displayItems:t,scrollContainerRef:n,highlightedMessageId:s,onLaunchWorkflow:a,hiddenCount:l=0}){const u=Ie(U=>{var V,z;return((z=(V=U.currentSession)==null?void 0:V.metadataEntries)==null?void 0:z.criteria)??HB}),c=Ie(U=>{var V;return(V=U.currentSession)==null?void 0:V.id}),d=Ie(U=>{var V;return(V=U.currentSession)==null?void 0:V.mode}),f=Ie(U=>{var V;return(V=U.currentSession)==null?void 0:V.phase}),p=Ie(U=>U.error),m=Ie(U=>U.clearError),x=Xu(),{showThinking:y,showVerboseToolOutput:w,showStats:C,showAgentDefinitions:v,showWorkflowBars:S}=$i(),b=Rt(U=>U.defaults),_=Rt(U=>U.userItems),E=[...b,..._],j=d==="planner",T=u.length>0,D=f==="done",A=t.some(U=>U.type==="message"&&U.message.role==="assistant"),R=j&&T&&!x&&A&&!D,P=Ie(U=>{var V;return(V=U.currentSession)==null?void 0:V.projectId}),[W,G]=L.useState(!1),I=()=>{if(!P||!c)return;G(!1),window.open(`/p/${P}/s/${c}/readonly`,"_blank")||G(!0)};return o.jsxs("div",{ref:n,"data-testid":"chat-scroll-container",className:"flex-1 min-w-0 overflow-y-auto relative bg-primary",children:[o.jsxs("div",{className:"pt-4",children:[l>0&&o.jsxs("div",{className:"px-2 md:px-4 pb-2 space-y-1",children:[o.jsxs("button",{onClick:I,className:"w-full text-sm text-text-muted hover:text-text-primary bg-bg-tertiary/50 hover:bg-bg-tertiary border border-border rounded px-3 py-2 transition-colors text-center",children:[l," older item",l!==1?"s":""," hidden — View full history"]}),W&&o.jsxs("p",{className:"text-xs text-text-muted text-center",children:["Popup blocked."," ",o.jsx("a",{href:P&&c?`/p/${P}/s/${c}/readonly`:"#",target:"_blank",rel:"noopener noreferrer",className:"underline hover:text-text-primary",children:"Open manually"})]})]}),o.jsx(QC,{displayItems:t,highlightedMessageId:s,sessionId:c,showThinking:y,showVerboseToolOutput:w,showStats:C,showAgentDefinitions:v,showWorkflowBars:S})]}),o.jsxs("div",{className:"px-2 md:px-4 pb-4",children:[p&&o.jsx("div",{className:"feed-item bg-red-500/10 border border-red-500/50 rounded p-2",children:o.jsxs("div",{className:"flex items-start justify-between gap-2",children:[o.jsxs("div",{children:[o.jsx("div",{className:"text-red-400 text-sm font-medium",children:p.code}),o.jsx("div",{className:"text-red-300 text-xs mt-0.5",children:p.message})]}),o.jsx(Ll,{onClick:m,className:"text-red-400 hover:text-red-300 p-0.5",size:"sm"})]})}),R&&o.jsx("div",{className:"flex justify-center gap-2 feed-item flex-wrap",children:E.map(U=>{const V=U.color??"#3b82f6",z=parseInt(V.slice(1,3),16),Z=parseInt(V.slice(3,5),16),J=parseInt(V.slice(5,7),16),H=`rgba(${z},${Z},${J},0.12)`,O=`rgba(${z},${Z},${J},0.22)`,$=`rgba(${z},${Z},${J},0.25)`;return o.jsx(FB,{workflowName:U.name,color:V,bg:H,bgHover:O,border:$,subGroups:U.subGroups,onLaunch:q=>a(U.id,q)},U.id)})})]})]})});function FB({workflowName:e,color:t,bg:n,bgHover:s,border:a,subGroups:l,onLaunch:u}){const[c,d]=L.useState(!1),f=L.useRef(null);return JC(f,()=>d(!1),c),o.jsxs("div",{className:"relative flex",children:[o.jsxs("button",{onClick:()=>u(),"data-testid":"workflow-run-button",className:"px-4 py-1.5 rounded-l text-sm font-medium transition-colors",style:{backgroundColor:n,color:t,border:`1px solid ${a}`,borderRight:"none"},onMouseEnter:p=>{p.currentTarget.style.backgroundColor=s},onMouseLeave:p=>{p.currentTarget.style.backgroundColor=n},children:["▶ ",e]}),l&&l.length>0&&o.jsxs("div",{ref:f,className:"relative",children:[o.jsx("button",{onClick:()=>d(!c),className:"px-1.5 py-1.5 rounded-r text-sm font-medium transition-colors",style:{backgroundColor:n,color:t,border:`1px solid ${a}`},onMouseEnter:p=>{p.currentTarget.style.backgroundColor=s},onMouseLeave:p=>{p.currentTarget.style.backgroundColor=n},children:"⋮"}),c&&o.jsxs("div",{className:"absolute top-full right-0 mt-1 w-40 bg-bg-secondary border border-border rounded-lg shadow-xl z-50 overflow-hidden",children:[o.jsx("button",{onClick:()=>{u(),d(!1)},className:"w-full text-left px-3 py-2 text-sm text-text-primary hover:bg-bg-tertiary transition-colors",children:"Full workflow"}),o.jsx("div",{className:"border-t border-border/50"}),l.map(p=>o.jsx("button",{onClick:()=>{u(p),d(!1)},className:"w-full text-left px-3 py-2 text-sm text-text-primary hover:bg-bg-tertiary transition-colors",children:p},p))]})]})]})}function VB(){const e=Ie(s=>s.connectionStatus),t=Ie(s=>s.reconnect);if(e==="connected")return null;const n=e==="reconnecting";return o.jsxs("div",{className:`
287
+ `,"")})]});if(d)return o.jsxs("div",{className:"feed-item bg-bg-tertiary/30 border-l-2 border-accent-primary rounded-r p-2",children:[o.jsxs("div",{className:"text-accent-primary text-xs mb-0.5",children:["Tool: ",t.toolName]}),o.jsxs("pre",{className:"text-text-secondary text-xs whitespace-pre-wrap break-words overflow-x-auto max-h-32",children:[t.content.slice(0,500),t.content.length>500&&"..."]})]});if(t.messageKind==="workflow-started")try{const f=JSON.parse(t.content);return o.jsx(DB,{data:f})}catch{}if(t.messageKind==="task-completed")try{const f=JSON.parse(t.content);return o.jsx(LB,{data:f})}catch{}return t.messageKind==="context-reset"?o.jsxs("div",{className:"flex items-center gap-4 mb-6 text-text-muted text-xs uppercase tracking-wide",children:[o.jsx("div",{className:"flex-1 border-t border-border"}),o.jsx("span",{children:t.content}),o.jsx("div",{className:"flex-1 border-t border-border"})]}):t.messageKind==="auto-prompt"&&t.isSystemGenerated?o.jsx(IB,{message:t}):t.messageKind==="correction"&&t.isSystemGenerated?o.jsx("div",{className:"flex justify-end feed-item",children:o.jsxs("div",{className:"max-w-[75%] rounded p-2 bg-amber-500/10 border border-amber-500/30",children:[o.jsx("span",{className:"text-[10px] block mb-0.5 text-amber-400",children:"System"}),o.jsx("div",{className:"whitespace-pre-wrap break-words text-sm text-amber-200 italic",children:t.content})]})}):l?o.jsx(MB,{message:t,messageId:s,sessionId:a}):o.jsx("div",{className:"flex justify-start feed-item",children:o.jsx("div",{className:"max-w-[75%] rounded p-2 bg-bg-tertiary text-text-primary",children:o.jsx(Vn,{content:t.content})})})}),PB={verifier:"Verification",code_reviewer:"Code Review",test_generator:"Test Generation",debugger:"Debug"};function BB(e){return{backgroundColor:`${e}20`,color:e,borderColor:`${e}4d`}}function eS(e,t){return t||e>85?"text-accent-error":e>60?"text-accent-warning":"text-text-muted"}function $B({contextState:e}){const{currentTokens:t,maxTokens:n,compactionCount:s,dangerZone:a}=e,l=Math.round(t/n*100);return o.jsxs("div",{className:"flex items-center gap-1.5 text-[10px]",children:[o.jsxs("span",{className:eS(l,a),children:[Eu(t),"/",Eu(n)]}),o.jsxs("span",{className:eS(l,a),children:["(",l,"%)"]}),o.jsx(m1,{percent:l,dangerZone:a,size:"sm"}),a&&o.jsx("span",{className:"text-accent-error animate-pulse",children:"Low!"}),s>0&&o.jsxs("span",{className:"text-text-muted bg-bg-tertiary px-1 rounded",children:[s,"x"]})]})}const zB=L.memo(function({messages:t,subAgentType:n,subAgentId:s,isStreaming:a}){const l=L.useRef(null),u=L.useRef(null),[c,d]=L.useState(!1),f=wt(D=>D.defaults),p=wt(D=>D.userItems),m=[...f,...p],x=Ie(D=>D.subAgentContextStates[s]),{showThinking:y,showVerboseToolOutput:w}=$i(),{isAutoScrollActive:C,setAutoScroll:v}=rd(u,null),S=L.useCallback(()=>{const D=!c;d(D),D&&setTimeout(()=>{var A;(A=l.current)==null||A.scrollIntoView({block:"start",behavior:"smooth"})},220)},[c]),b=m.find(D=>D.id===n),_=(b==null?void 0:b.name)??PB[n]??n,E=yl(m,n),j=BB(E),T=t.filter(D=>D.role!=="tool");return o.jsxs("div",{ref:l,className:"feed-item border border-border rounded overflow-hidden bg-secondary",children:[o.jsxs("div",{className:"w-full flex items-center justify-between px-2 py-1 border-b relative",style:j,children:[o.jsx("span",{className:"text-xs font-medium",children:_}),o.jsx("div",{className:"absolute left-1/2 -translate-x-1/2",children:x&&o.jsx($B,{contextState:x})}),o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsxs("button",{type:"button",className:"text-sm text-text-muted hover:text-text-primary flex items-center gap-1.5",onClick:()=>v(!C),children:[o.jsx("span",{className:`w-1 h-1 rounded-full ${C?"bg-accent-success":"border border-text-muted"}`}),"live"]}),o.jsxs("button",{type:"button",className:"text-[10px] px-1.5 py-0.5 rounded bg-bg-tertiary",onClick:S,children:[c?"▼":"▶"," Expand"]})]})]}),o.jsx("div",{ref:u,className:`${c?"max-h-[calc(100vh-10rem)]":"max-h-80"} overflow-y-auto p-2 transition-[max-height] duration-200`,children:T.map(D=>D.role==="assistant"?o.jsx(yg,{message:D,showStats:!0,showThinking:y,showVerboseToolOutput:w},D.id):o.jsx(XC,{message:D,isLastAssistantMessage:!1},D.id))})]})});function pu(e){var t;return e.type==="context-divider"?`ctx-${e.windowSequence}`:e.type==="subagent"?((t=e.messages[0])==null?void 0:t.id)??e.subAgentId:e.message.id}const QC=L.memo(function({displayItems:t,highlightedMessageId:n=null,sessionId:s,showThinking:a=!0,showVerboseToolOutput:l=!0,showStats:u=!0,showAgentDefinitions:c=!0,showWorkflowBars:d=!0}){return o.jsx(o.Fragment,{children:t.map((f,p)=>{if(f.type==="context-divider")return o.jsxs("div",{"data-item-index":p,className:"flex items-center gap-2 feed-item px-2 md:px-4",children:[o.jsx("div",{className:"flex-1 border-t border-border"}),o.jsx("span",{className:"text-[10px] text-text-muted font-medium px-2",children:"Earlier context summarized"}),o.jsx("div",{className:"flex-1 border-t border-border"})]},pu(f));if(f.type==="subagent"){const w=f.messages.some(C=>C.isStreaming);return o.jsx("div",{"data-item-index":p,className:"px-2 md:px-4",children:o.jsx(zB,{messages:f.messages,subAgentType:f.subAgentType,subAgentId:f.subAgentId,isStreaming:w})},pu(f))}const m=f.message;if(m.role==="assistant")return o.jsx("div",{"data-item-index":p,className:"px-2 md:px-4",children:o.jsx(yg,{message:m,showStats:u,showThinking:a,showVerboseToolOutput:l})},pu(f));const x=!c&&m.messageKind==="auto-prompt",y=!d&&(m.messageKind==="workflow-started"||m.messageKind==="task-completed");return x||y?null:o.jsx("div",{"data-item-index":p,className:"px-2 md:px-4",children:o.jsx("div",{"data-message-id":m.id,className:n===m.id?"rounded animate-highlight-fade":void 0,children:o.jsx(XC,{message:m,messageId:m.id,sessionId:s??void 0,isLastAssistantMessage:!1})})},pu(f))})})});function JC(e,t,n=!0){L.useEffect(()=>{if(!n)return;const s=a=>{var l;(l=e.current)!=null&&l.contains(a.target)||t()};return document.addEventListener("mousedown",s),()=>document.removeEventListener("mousedown",s)},[e,t,n])}const HB=[],UB=L.memo(function({displayItems:t,scrollContainerRef:n,highlightedMessageId:s,onLaunchWorkflow:a,hiddenCount:l=0}){const u=Ie(U=>{var V,z;return((z=(V=U.currentSession)==null?void 0:V.metadataEntries)==null?void 0:z.criteria)??HB}),c=Ie(U=>{var V;return(V=U.currentSession)==null?void 0:V.id}),d=Ie(U=>{var V;return(V=U.currentSession)==null?void 0:V.mode}),f=Ie(U=>{var V;return(V=U.currentSession)==null?void 0:V.phase}),p=Ie(U=>U.error),m=Ie(U=>U.clearError),x=Xu(),{showThinking:y,showVerboseToolOutput:w,showStats:C,showAgentDefinitions:v,showWorkflowBars:S}=$i(),b=Rt(U=>U.defaults),_=Rt(U=>U.userItems),E=[...b,..._],j=d==="planner",T=u.length>0,D=f==="done",A=t.some(U=>U.type==="message"&&U.message.role==="assistant"),R=j&&T&&!x&&A&&!D,P=Ie(U=>{var V;return(V=U.currentSession)==null?void 0:V.projectId}),[W,G]=L.useState(!1),I=()=>{if(!P||!c)return;G(!1),window.open(`/p/${P}/s/${c}/readonly`,"_blank")||G(!0)};return o.jsxs("div",{ref:n,"data-testid":"chat-scroll-container",className:"flex-1 min-w-0 overflow-y-auto relative bg-primary",children:[o.jsxs("div",{className:"pt-4",children:[l>0&&o.jsxs("div",{className:"px-2 md:px-4 pb-2 space-y-1",children:[o.jsxs("button",{onClick:I,className:"w-full text-sm text-text-muted hover:text-text-primary bg-bg-tertiary/50 hover:bg-bg-tertiary border border-border rounded px-3 py-2 transition-colors text-center",children:[l," older item",l!==1?"s":""," hidden — View full history"]}),W&&o.jsxs("p",{className:"text-xs text-text-muted text-center",children:["Popup blocked."," ",o.jsx("a",{href:P&&c?`/p/${P}/s/${c}/readonly`:"#",target:"_blank",rel:"noopener noreferrer",className:"underline hover:text-text-primary",children:"Open manually"})]})]}),o.jsx(QC,{displayItems:t,highlightedMessageId:s,sessionId:c,showThinking:y,showVerboseToolOutput:w,showStats:C,showAgentDefinitions:v,showWorkflowBars:S})]}),o.jsxs("div",{className:"px-2 md:px-4 pb-4",children:[p&&o.jsx("div",{className:"feed-item bg-red-500/10 border border-red-500/50 rounded p-2",children:o.jsxs("div",{className:"flex items-start justify-between gap-2",children:[o.jsxs("div",{children:[o.jsx("div",{className:"text-red-400 text-sm font-medium",children:p.code}),o.jsx("div",{className:"text-red-300 text-xs mt-0.5",children:p.message})]}),o.jsx(Ll,{onClick:m,className:"text-red-400 hover:text-red-300 p-0.5",size:"sm"})]})}),R&&o.jsx("div",{className:"flex justify-center gap-2 feed-item flex-wrap",children:E.map(U=>{const V=U.color??"#3b82f6",z=parseInt(V.slice(1,3),16),Z=parseInt(V.slice(3,5),16),J=parseInt(V.slice(5,7),16),H=`rgba(${z},${Z},${J},0.12)`,O=`rgba(${z},${Z},${J},0.22)`,$=`rgba(${z},${Z},${J},0.25)`;return o.jsx(FB,{workflowName:U.name,color:V,bg:H,bgHover:O,border:$,subGroups:U.subGroups,onLaunch:q=>a(U.id,q)},U.id)})})]})]})});function FB({workflowName:e,color:t,bg:n,bgHover:s,border:a,subGroups:l,onLaunch:u}){const[c,d]=L.useState(!1),f=L.useRef(null);return JC(f,()=>d(!1),c),o.jsxs("div",{className:"relative flex",children:[o.jsxs("button",{onClick:()=>u(),"data-testid":"workflow-run-button",className:"px-4 py-1.5 rounded-l text-sm font-medium transition-colors",style:{backgroundColor:n,color:t,border:`1px solid ${a}`,borderRight:"none"},onMouseEnter:p=>{p.currentTarget.style.backgroundColor=s},onMouseLeave:p=>{p.currentTarget.style.backgroundColor=n},children:["▶ ",e]}),l&&l.length>0&&o.jsxs("div",{ref:f,className:"relative",children:[o.jsx("button",{onClick:()=>d(!c),className:"px-1.5 py-1.5 rounded-r text-sm font-medium transition-colors",style:{backgroundColor:n,color:t,border:`1px solid ${a}`},onMouseEnter:p=>{p.currentTarget.style.backgroundColor=s},onMouseLeave:p=>{p.currentTarget.style.backgroundColor=n},children:"⋮"}),c&&o.jsxs("div",{className:"absolute top-full right-0 mt-1 w-40 bg-bg-secondary border border-border rounded-lg shadow-xl z-50 overflow-hidden",children:[o.jsx("button",{onClick:()=>{u(),d(!1)},className:"w-full text-left px-3 py-2 text-sm text-text-primary hover:bg-bg-tertiary transition-colors",children:"Full workflow"}),o.jsx("div",{className:"border-t border-border/50"}),l.map(p=>o.jsx("button",{onClick:()=>{u(p),d(!1)},className:"w-full text-left px-3 py-2 text-sm text-text-primary hover:bg-bg-tertiary transition-colors",children:p},p))]})]})]})}function VB(){const e=Ie(s=>s.connectionStatus),t=Ie(s=>s.reconnect);if(e==="connected")return null;const n=e==="reconnecting";return o.jsxs("div",{className:`
288
288
  flex items-center justify-between px-4 py-2
289
289
  text-sm font-medium
290
290
  ${n?"bg-amber-500/15 border-b border-amber-500/30 text-amber-300":"bg-red-500/15 border-b border-red-500/30 text-red-300"}
@@ -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-bSaZSLjg.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-CkE65FP4.js"></script>
9
9
  <link rel="stylesheet" crossorigin href="/assets/index-DvPmgi8F.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:"fdd5010753955c03521e8e6cb79f4072"},{url:"__inspect__.js",revision:"616419159f6250026c61434e238ddec5"},{url:"assets/zig-VOosw3JB.js",revision:null},{url:"assets/zenscript-DVFEvuxE.js",revision:null},{url:"assets/yaml-Buea-lGh.js",revision:null},{url:"assets/xsl-CtQFsRM5.js",revision:null},{url:"assets/xml-sdJ4AIDG.js",revision:null},{url:"assets/wolfram-lXgVvXCa.js",revision:null},{url:"assets/wit-5i3qLPDT.js",revision:null},{url:"assets/wikitext-BhOHFoWU.js",revision:null},{url:"assets/wgsl-Dx-B1_4e.js",revision:null},{url:"assets/wenyan-BV7otONQ.js",revision:null},{url:"assets/wasm-MzD3tlZU.js",revision:null},{url:"assets/wasm-CG6Dc4jp.js",revision:null},{url:"assets/vyper-CDx5xZoG.js",revision:null},{url:"assets/vue-vine-BoDAl6tE.js",revision:null},{url:"assets/vue-html-AaS7Mt5G.js",revision:null},{url:"assets/vue-D2xRrEX4.js",revision:null},{url:"assets/vitesse-light-CVO1_9PV.js",revision:null},{url:"assets/vitesse-dark-D0r3Knsf.js",revision:null},{url:"assets/vitesse-black-Bkuqu6BP.js",revision:null},{url:"assets/viml-CJc9bBzg.js",revision:null},{url:"assets/vhdl-CeAyd5Ju.js",revision:null},{url:"assets/vesper-DRje8inN.js",revision:null},{url:"assets/verilog-BQ8w6xss.js",revision:null},{url:"assets/vb-D17OF-Vu.js",revision:null},{url:"assets/vala-CsfeWuGM.js",revision:null},{url:"assets/v-BcVCzyr7.js",revision:null},{url:"assets/typst-DHCkPAjA.js",revision:null},{url:"assets/typespec-CAFt9gP4.js",revision:null},{url:"assets/typescript-BPQ3VLAy.js",revision:null},{url:"assets/twig-CW1WmMYd.js",revision:null},{url:"assets/turtle-BsS91CYL.js",revision:null},{url:"assets/tsx-COt5Ahok.js",revision:null},{url:"assets/tsv-B_m7g4N7.js",revision:null},{url:"assets/ts-tags-D351s5mN.js",revision:null},{url:"assets/toml-vGWfd6FD.js",revision:null},{url:"assets/tokyo-night-hegEt444.js",revision:null},{url:"assets/tex-idrVyKtj.js",revision:null},{url:"assets/terraform-BETggiCN.js",revision:null},{url:"assets/templ-DhtptRzy.js",revision:null},{url:"assets/tcl-dwOrl1Do.js",revision:null},{url:"assets/tasl-QIJgUcNo.js",revision:null},{url:"assets/talonscript-CkByrt1z.js",revision:null},{url:"assets/systemd-4A_iFExJ.js",revision:null},{url:"assets/system-verilog-CnnmHF94.js",revision:null},{url:"assets/synthwave-84-CbfX1IO0.js",revision:null},{url:"assets/swift-D82vCrfD.js",revision:null},{url:"assets/svelte-Cy7k_4gC.js",revision:null},{url:"assets/surrealql-Bq5Q-fJD.js",revision:null},{url:"assets/stylus-BEDo0Tqx.js",revision:null},{url:"assets/stata-DI20mbqo.js",revision:null},{url:"assets/ssh-config-_ykCGR6B.js",revision:null},{url:"assets/sql-CRqJ_cUM.js",revision:null},{url:"assets/splunk-BtCnVYZw.js",revision:null},{url:"assets/sparql-rVzFXLq3.js",revision:null},{url:"assets/soy-8wufbnw4.js",revision:null},{url:"assets/solidity-rGO070M0.js",revision:null},{url:"assets/solarized-light-L9t79GZl.js",revision:null},{url:"assets/solarized-dark-DXbdFlpD.js",revision:null},{url:"assets/snazzy-light-Bw305WKR.js",revision:null},{url:"assets/smalltalk-BERRCDM3.js",revision:null},{url:"assets/slack-ochin-DqwNpetd.js",revision:null},{url:"assets/slack-dark-BthQWCQV.js",revision:null},{url:"assets/shellsession-BADoaaVG.js",revision:null},{url:"assets/shellscript-Yzrsuije.js",revision:null},{url:"assets/shaderlab-Dg9Lc6iA.js",revision:null},{url:"assets/sdbl-DVxCFoDh.js",revision:null},{url:"assets/scss-D5BDwBP9.js",revision:null},{url:"assets/scheme-C98Dy4si.js",revision:null},{url:"assets/scala-C151Ov-r.js",revision:null},{url:"assets/sass-Cj5Yp3dK.js",revision:null},{url:"assets/sas-DEy46yEz.js",revision:null},{url:"assets/rust-B1yitclQ.js",revision:null},{url:"assets/ruby-DyJCeAvU.js",revision:null},{url:"assets/rst-CpCqk9r5.js",revision:null},{url:"assets/rosmsg-BJDFO7_C.js",revision:null},{url:"assets/rose-pine-qdsjHGoJ.js",revision:null},{url:"assets/rose-pine-moon-D4_iv3hh.js",revision:null},{url:"assets/rose-pine-dawn-DHQR4-dF.js",revision:null},{url:"assets/ron-D8l8udqQ.js",revision:null},{url:"assets/riscv-BM1_JUlF.js",revision:null},{url:"assets/rel-C3B-1QV4.js",revision:null},{url:"assets/regexp-CDVJQ6XC.js",revision:null},{url:"assets/reg-C-SQnVFl.js",revision:null},{url:"assets/red-bN70gL4F.js",revision:null},{url:"assets/razor-BjBPvh-w.js",revision:null},{url:"assets/raku-DXvB9xmW.js",revision:null},{url:"assets/racket-BqYA7rlc.js",revision:null},{url:"assets/r-Dspwwk_N.js",revision:null},{url:"assets/qss-IeuSbFQv.js",revision:null},{url:"assets/qmldir-C8lEn-DE.js",revision:null},{url:"assets/qml-3beO22l8.js",revision:null},{url:"assets/python-B6aJPvgy.js",revision:null},{url:"assets/purescript-CklMAg4u.js",revision:null},{url:"assets/puppet-BMWR74SV.js",revision:null},{url:"assets/pug-DKIMFp6K.js",revision:null},{url:"assets/proto-C7zT0LnQ.js",revision:null},{url:"assets/prolog-CbFg5uaA.js",revision:null},{url:"assets/prisma-Dd19v3D-.js",revision:null},{url:"assets/powershell-Dpen1YoG.js",revision:null},{url:"assets/powerquery-CEu0bR-o.js",revision:null},{url:"assets/postcss-CXtECtnM.js",revision:null},{url:"assets/polar-C0HS_06l.js",revision:null},{url:"assets/poimandres-CS3Unz2-.js",revision:null},{url:"assets/po-BTJTHyun.js",revision:null},{url:"assets/plsql-ChMvpjG-.js",revision:null},{url:"assets/plastic-3e1v2bzS.js",revision:null},{url:"assets/pkl-u5AG7uiY.js",revision:null},{url:"assets/php-Csjmro_R.js",revision:null},{url:"assets/perl-B9cMNwum.js",revision:null},{url:"assets/pascal-D93ZcfNL.js",revision:null},{url:"assets/openscad-C4EeE6gA.js",revision:null},{url:"assets/one-light-C3Wv6jpd.js",revision:null},{url:"assets/one-dark-pro-DVMEJ2y_.js",revision:null},{url:"assets/odin-BBf5iR-q.js",revision:null},{url:"assets/ocaml-C0hk2d4L.js",revision:null},{url:"assets/objective-cpp-CLxacb5B.js",revision:null},{url:"assets/objective-c-DXmwc3jG.js",revision:null},{url:"assets/nushell-Cz2AlsmD.js",revision:null},{url:"assets/nord-Ddv68eIx.js",revision:null},{url:"assets/nix-CwoSXNpI.js",revision:null},{url:"assets/nim-BIad80T-.js",revision:null},{url:"assets/night-owl-light-CMTm3GFP.js",revision:null},{url:"assets/night-owl-C39BiMTA.js",revision:null},{url:"assets/nginx-BpAMiNFr.js",revision:null},{url:"assets/nextflow-groovy-vE_lwT2v.js",revision:null},{url:"assets/nextflow-C-mBbutL.js",revision:null},{url:"assets/narrat-DRg8JJMk.js",revision:null},{url:"assets/move-IF9eRakj.js",revision:null},{url:"assets/moonbit-_H4v1dQx.js",revision:null},{url:"assets/monokai-D4h5O-jR.js",revision:null},{url:"assets/mojo-rZm6bMo-.js",revision:null},{url:"assets/mipsasm-CKIfxQSi.js",revision:null},{url:"assets/min-light-CTRr51gU.js",revision:null},{url:"assets/min-dark-CafNBF8u.js",revision:null},{url:"assets/mermaid-mWjccvbQ.js",revision:null},{url:"assets/mdx-Cmh6b_Ma.js",revision:null},{url:"assets/mdc-DTYItulj.js",revision:null},{url:"assets/matlab-D7o27uSR.js",revision:null},{url:"assets/material-theme-palenight-Csfq5Kiy.js",revision:null},{url:"assets/material-theme-ocean-CyktbL80.js",revision:null},{url:"assets/material-theme-lighter-B0m2ddpp.js",revision:null},{url:"assets/material-theme-darker-BfHTSMKl.js",revision:null},{url:"assets/material-theme-D5KoaKCx.js",revision:null},{url:"assets/marko-DjSrsDqO.js",revision:null},{url:"assets/markdown-Cvjx9yec.js",revision:null},{url:"assets/make-CHLpvVh8.js",revision:null},{url:"assets/luau-KW6xsasC.js",revision:null},{url:"assets/lua-BaeVxFsk.js",revision:null},{url:"assets/logo-BtOb2qkB.js",revision:null},{url:"assets/log-2UxHyX5q.js",revision:null},{url:"assets/llvm-DjAJT7YJ.js",revision:null},{url:"assets/liquid-C0sCDyMI.js",revision:null},{url:"assets/light-plus-B7mTdjB0.js",revision:null},{url:"assets/less-B1dDrJ26.js",revision:null},{url:"assets/lean-BZvkOJ9d.js",revision:null},{url:"assets/latex-CaSxy8MP.js",revision:null},{url:"assets/laserwave-DUszq2jm.js",revision:null},{url:"assets/kusto-wEQ09or8.js",revision:null},{url:"assets/kotlin-BdnUsdx6.js",revision:null},{url:"assets/kdl-DV7GczEv.js",revision:null},{url:"assets/kanagawa-wave-DWedfzmr.js",revision:null},{url:"assets/kanagawa-lotus-CfQXZHmo.js",revision:null},{url:"assets/kanagawa-dragon-CkXjmgJE.js",revision:null},{url:"assets/just-CUsbIsdP.js",revision:null},{url:"assets/julia-D7OTSIA_.js",revision:null},{url:"assets/jsx-g9-lgVsj.js",revision:null},{url:"assets/jssm-C2t-YnRu.js",revision:null},{url:"assets/jsonnet-DFQXde-d.js",revision:null},{url:"assets/jsonl-DcaNXYhu.js",revision:null},{url:"assets/jsonc-Des-eS-w.js",revision:null},{url:"assets/json5-C9tS-k6U.js",revision:null},{url:"assets/json-Cp-IABpG.js",revision:null},{url:"assets/jison-wvAkD_A8.js",revision:null},{url:"assets/jinja-f2NsQr07.js",revision:null},{url:"assets/javascript-wDzz0qaB.js",revision:null},{url:"assets/java-CylS5w8V.js",revision:null},{url:"assets/ini-BEwlwnbL.js",revision:null},{url:"assets/index-bSaZSLjg.js",revision:null},{url:"assets/index-DvPmgi8F.css",revision:null},{url:"assets/imba-DGztddWO.js",revision:null},{url:"assets/hy-DFXneXwc.js",revision:null},{url:"assets/hxml-Bvhsp5Yf.js",revision:null},{url:"assets/hurl-irOxFIW8.js",revision:null},{url:"assets/http-jrhK8wxY.js",revision:null},{url:"assets/html2canvas.esm-QH1iLAAe.js",revision:null},{url:"assets/html-pp8916En.js",revision:null},{url:"assets/html-derivative-DlHx6ybY.js",revision:null},{url:"assets/houston-DnULxvSX.js",revision:null},{url:"assets/horizon-bright-CUuTKBJd.js",revision:null},{url:"assets/horizon-BUw7H-hv.js",revision:null},{url:"assets/hlsl-D3lLCCz7.js",revision:null},{url:"assets/hjson-D5-asLiD.js",revision:null},{url:"assets/hcl-BWvSN4gD.js",revision:null},{url:"assets/haxe-CzTSHFRz.js",revision:null},{url:"assets/haskell-Df6bDoY_.js",revision:null},{url:"assets/handlebars-BpdQsYii.js",revision:null},{url:"assets/haml-D5jkg6IW.js",revision:null},{url:"assets/hack-DbPARsA_.js",revision:null},{url:"assets/gruvbox-light-soft-hJgmCMqR.js",revision:null},{url:"assets/gruvbox-light-medium-DRw_LuNl.js",revision:null},{url:"assets/gruvbox-light-hard-CH1njM8p.js",revision:null},{url:"assets/gruvbox-dark-soft-CVdnzihN.js",revision:null},{url:"assets/gruvbox-dark-medium-GsRaNv29.js",revision:null},{url:"assets/gruvbox-dark-hard-CFHQjOhq.js",revision:null},{url:"assets/groovy-gcz8RCvz.js",revision:null},{url:"assets/graphql-ChdNCCLP.js",revision:null},{url:"assets/go-C27-OAKa.js",revision:null},{url:"assets/gnuplot-DdkO51Og.js",revision:null},{url:"assets/gn-n2N0HUVH.js",revision:null},{url:"assets/glsl-DplSGwfg.js",revision:null},{url:"assets/glimmer-ts-BfAWNZQY.js",revision:null},{url:"assets/glimmer-js-ByusRIyA.js",revision:null},{url:"assets/gleam-BspZqrRM.js",revision:null},{url:"assets/github-light-high-contrast-BfjtVDDH.js",revision:null},{url:"assets/github-light-default-D7oLnXFd.js",revision:null},{url:"assets/github-light-DAi9KRSo.js",revision:null},{url:"assets/github-dark-high-contrast-E3gJ1_iC.js",revision:null},{url:"assets/github-dark-dimmed-DH5Ifo-i.js",revision:null},{url:"assets/github-dark-default-Cuk6v7N8.js",revision:null},{url:"assets/github-dark-DHJKELXO.js",revision:null},{url:"assets/git-rebase-r7XF79zn.js",revision:null},{url:"assets/git-commit-F4YmCXRG.js",revision:null},{url:"assets/gherkin-DyxjwDmM.js",revision:null},{url:"assets/genie-D0YGMca9.js",revision:null},{url:"assets/gdshader-DkwncUOv.js",revision:null},{url:"assets/gdscript-C5YyOfLZ.js",revision:null},{url:"assets/gdresource-BOOCDP_w.js",revision:null},{url:"assets/fsharp-CXgrBDvD.js",revision:null},{url:"assets/fortran-free-form-BxgE0vQu.js",revision:null},{url:"assets/fortran-fixed-form-CkoXwp7k.js",revision:null},{url:"assets/fluent-C4IJs8-o.js",revision:null},{url:"assets/fish-BvzEVeQv.js",revision:null},{url:"assets/fennel-BYunw83y.js",revision:null},{url:"assets/everforest-light-C8M2exoo.js",revision:null},{url:"assets/everforest-dark-BgDCqdQA.js",revision:null},{url:"assets/erlang-DsQrWhSR.js",revision:null},{url:"assets/erb-Dm6A9KJ5.js",revision:null},{url:"assets/emacs-lisp-CXvaQtF9.js",revision:null},{url:"assets/elm-DbKCFpqz.js",revision:null},{url:"assets/elixir-CkH2-t6x.js",revision:null},{url:"assets/edge-FbVlp4U3.js",revision:null},{url:"assets/dream-maker-BtqSS_iP.js",revision:null},{url:"assets/dracula-soft-BXkSAIEj.js",revision:null},{url:"assets/dracula-BzJJZx-M.js",revision:null},{url:"assets/dotenv-Da5cRb03.js",revision:null},{url:"assets/docker-BcOcwvcX.js",revision:null},{url:"assets/diff-D97Zzqfu.js",revision:null},{url:"assets/desktop-BmXAJ9_W.js",revision:null},{url:"assets/dax-CEL-wOlO.js",revision:null},{url:"assets/dart-bE4Kk8sk.js",revision:null},{url:"assets/dark-plus-C3mMm8J8.js",revision:null},{url:"assets/d-85-TOEBH.js",revision:null},{url:"assets/cypher-COkxafJQ.js",revision:null},{url:"assets/cue-D82EKSYY.js",revision:null},{url:"assets/csv-fuZLfV_i.js",revision:null},{url:"assets/css-CLj8gQPS.js",revision:null},{url:"assets/csharp-DSvCPggb.js",revision:null},{url:"assets/crystal-DGywbUpC.js",revision:null},{url:"assets/cpp-UfJy6YNI.js",revision:null},{url:"assets/coq-DkFqJrB1.js",revision:null},{url:"assets/common-lisp-Cg-RD9OK.js",revision:null},{url:"assets/coffee-Ch7k5sss.js",revision:null},{url:"assets/codeql-DsOJ9woJ.js",revision:null},{url:"assets/codeowners-Bp6g37R7.js",revision:null},{url:"assets/cobol-nBiQ_Alo.js",revision:null},{url:"assets/cmake-D1j8_8rp.js",revision:null},{url:"assets/clojure-P80f7IUj.js",revision:null},{url:"assets/clarity-D53aC0YG.js",revision:null},{url:"assets/catppuccin-mocha-D87Tk5Gz.js",revision:null},{url:"assets/catppuccin-macchiato-DQyhUUbL.js",revision:null},{url:"assets/catppuccin-latte-C9dUb6Cb.js",revision:null},{url:"assets/catppuccin-frappe-DFWUc33u.js",revision:null},{url:"assets/cairo-KRGpt6FW.js",revision:null},{url:"assets/cadence-Bv_4Rxtq.js",revision:null},{url:"assets/c3-MRO5bC_T.js",revision:null},{url:"assets/c-BIGW1oBm.js",revision:null},{url:"assets/bsl-BO_Y6i37.js",revision:null},{url:"assets/blade-2xfisSek.js",revision:null},{url:"assets/bird2-BIv1doCn.js",revision:null},{url:"assets/bicep-Bmn6On1c.js",revision:null},{url:"assets/bibtex-CHM0blh-.js",revision:null},{url:"assets/berry-uYugtg8r.js",revision:null},{url:"assets/beancount-k_qm7-4y.js",revision:null},{url:"assets/bat-BkioyH1T.js",revision:null},{url:"assets/ballerina-BFfxhgS-.js",revision:null},{url:"assets/ayu-mirage-32ctXXKs.js",revision:null},{url:"assets/ayu-light-BA47KaF1.js",revision:null},{url:"assets/ayu-dark-DYE7WIF3.js",revision:null},{url:"assets/awk-DMzUqQB5.js",revision:null},{url:"assets/aurora-x-D-2ljcwZ.js",revision:null},{url:"assets/astro-HNnZUWAn.js",revision:null},{url:"assets/asm-D_Q5rh1f.js",revision:null},{url:"assets/asciidoc-Ve4PFQV2.js",revision:null},{url:"assets/ara-BRHolxvo.js",revision:null},{url:"assets/applescript-Co6uUVPk.js",revision:null},{url:"assets/apl-CORt7UWP.js",revision:null},{url:"assets/apex-Dqspr-GT.js",revision:null},{url:"assets/apache-Pmp26Uib.js",revision:null},{url:"assets/angular-ts-BrjP3tb8.js",revision:null},{url:"assets/angular-html-DA-rfuFy.js",revision:null},{url:"assets/andromeeda-C4gqWexZ.js",revision:null},{url:"assets/ada-bCR0ucgS.js",revision:null},{url:"assets/actionscript-3-CoDkCxhg.js",revision:null},{url:"assets/abap-BdImnpbu.js",revision:null},{url:"assets/openfox-192.png",revision:"79feeb86d692c274854e37959a7dae67"},{url:"assets/openfox-512.png",revision:"fee24b214220594b4f595a467e73036e"},{url:"manifest.webmanifest",revision:"c25f372c782e623ab1e768a8dfe350ca"}],{}),s.cleanupOutdatedCaches(),s.registerRoute(new s.NavigationRoute(s.createHandlerBoundToURL("index.html")))});
1
+ if(!self.define){let s,l={};const e=(e,r)=>(e=new URL(e+".js",r).href,l[e]||new Promise(l=>{if("document"in self){const s=document.createElement("script");s.src=e,s.onload=l,document.head.appendChild(s)}else s=e,importScripts(e),l()}).then(()=>{let s=l[e];if(!s)throw new Error(`Module ${e} didn’t register its module`);return s}));self.define=(r,i)=>{const n=s||("document"in self?document.currentScript.src:"")||location.href;if(l[n])return;let u={};const a=s=>e(s,n),t={module:{uri:n},exports:u,require:a};l[n]=Promise.all(r.map(s=>t[s]||a(s))).then(s=>(i(...s),u))}}define(["./workbox-8c29f6e4"],function(s){"use strict";self.skipWaiting(),s.clientsClaim(),s.precacheAndRoute([{url:"registerSW.js",revision:"1872c500de691dce40960bb85481de07"},{url:"index.html",revision:"a9465d4092a517e2dfbfab70e1e2bc7f"},{url:"__inspect__.js",revision:"616419159f6250026c61434e238ddec5"},{url:"assets/zig-VOosw3JB.js",revision:null},{url:"assets/zenscript-DVFEvuxE.js",revision:null},{url:"assets/yaml-Buea-lGh.js",revision:null},{url:"assets/xsl-CtQFsRM5.js",revision:null},{url:"assets/xml-sdJ4AIDG.js",revision:null},{url:"assets/wolfram-lXgVvXCa.js",revision:null},{url:"assets/wit-5i3qLPDT.js",revision:null},{url:"assets/wikitext-BhOHFoWU.js",revision:null},{url:"assets/wgsl-Dx-B1_4e.js",revision:null},{url:"assets/wenyan-BV7otONQ.js",revision:null},{url:"assets/wasm-MzD3tlZU.js",revision:null},{url:"assets/wasm-CG6Dc4jp.js",revision:null},{url:"assets/vyper-CDx5xZoG.js",revision:null},{url:"assets/vue-vine-BoDAl6tE.js",revision:null},{url:"assets/vue-html-AaS7Mt5G.js",revision:null},{url:"assets/vue-D2xRrEX4.js",revision:null},{url:"assets/vitesse-light-CVO1_9PV.js",revision:null},{url:"assets/vitesse-dark-D0r3Knsf.js",revision:null},{url:"assets/vitesse-black-Bkuqu6BP.js",revision:null},{url:"assets/viml-CJc9bBzg.js",revision:null},{url:"assets/vhdl-CeAyd5Ju.js",revision:null},{url:"assets/vesper-DRje8inN.js",revision:null},{url:"assets/verilog-BQ8w6xss.js",revision:null},{url:"assets/vb-D17OF-Vu.js",revision:null},{url:"assets/vala-CsfeWuGM.js",revision:null},{url:"assets/v-BcVCzyr7.js",revision:null},{url:"assets/typst-DHCkPAjA.js",revision:null},{url:"assets/typespec-CAFt9gP4.js",revision:null},{url:"assets/typescript-BPQ3VLAy.js",revision:null},{url:"assets/twig-CW1WmMYd.js",revision:null},{url:"assets/turtle-BsS91CYL.js",revision:null},{url:"assets/tsx-COt5Ahok.js",revision:null},{url:"assets/tsv-B_m7g4N7.js",revision:null},{url:"assets/ts-tags-D351s5mN.js",revision:null},{url:"assets/toml-vGWfd6FD.js",revision:null},{url:"assets/tokyo-night-hegEt444.js",revision:null},{url:"assets/tex-idrVyKtj.js",revision:null},{url:"assets/terraform-BETggiCN.js",revision:null},{url:"assets/templ-DhtptRzy.js",revision:null},{url:"assets/tcl-dwOrl1Do.js",revision:null},{url:"assets/tasl-QIJgUcNo.js",revision:null},{url:"assets/talonscript-CkByrt1z.js",revision:null},{url:"assets/systemd-4A_iFExJ.js",revision:null},{url:"assets/system-verilog-CnnmHF94.js",revision:null},{url:"assets/synthwave-84-CbfX1IO0.js",revision:null},{url:"assets/swift-D82vCrfD.js",revision:null},{url:"assets/svelte-Cy7k_4gC.js",revision:null},{url:"assets/surrealql-Bq5Q-fJD.js",revision:null},{url:"assets/stylus-BEDo0Tqx.js",revision:null},{url:"assets/stata-DI20mbqo.js",revision:null},{url:"assets/ssh-config-_ykCGR6B.js",revision:null},{url:"assets/sql-CRqJ_cUM.js",revision:null},{url:"assets/splunk-BtCnVYZw.js",revision:null},{url:"assets/sparql-rVzFXLq3.js",revision:null},{url:"assets/soy-8wufbnw4.js",revision:null},{url:"assets/solidity-rGO070M0.js",revision:null},{url:"assets/solarized-light-L9t79GZl.js",revision:null},{url:"assets/solarized-dark-DXbdFlpD.js",revision:null},{url:"assets/snazzy-light-Bw305WKR.js",revision:null},{url:"assets/smalltalk-BERRCDM3.js",revision:null},{url:"assets/slack-ochin-DqwNpetd.js",revision:null},{url:"assets/slack-dark-BthQWCQV.js",revision:null},{url:"assets/shellsession-BADoaaVG.js",revision:null},{url:"assets/shellscript-Yzrsuije.js",revision:null},{url:"assets/shaderlab-Dg9Lc6iA.js",revision:null},{url:"assets/sdbl-DVxCFoDh.js",revision:null},{url:"assets/scss-D5BDwBP9.js",revision:null},{url:"assets/scheme-C98Dy4si.js",revision:null},{url:"assets/scala-C151Ov-r.js",revision:null},{url:"assets/sass-Cj5Yp3dK.js",revision:null},{url:"assets/sas-DEy46yEz.js",revision:null},{url:"assets/rust-B1yitclQ.js",revision:null},{url:"assets/ruby-DyJCeAvU.js",revision:null},{url:"assets/rst-CpCqk9r5.js",revision:null},{url:"assets/rosmsg-BJDFO7_C.js",revision:null},{url:"assets/rose-pine-qdsjHGoJ.js",revision:null},{url:"assets/rose-pine-moon-D4_iv3hh.js",revision:null},{url:"assets/rose-pine-dawn-DHQR4-dF.js",revision:null},{url:"assets/ron-D8l8udqQ.js",revision:null},{url:"assets/riscv-BM1_JUlF.js",revision:null},{url:"assets/rel-C3B-1QV4.js",revision:null},{url:"assets/regexp-CDVJQ6XC.js",revision:null},{url:"assets/reg-C-SQnVFl.js",revision:null},{url:"assets/red-bN70gL4F.js",revision:null},{url:"assets/razor-BjBPvh-w.js",revision:null},{url:"assets/raku-DXvB9xmW.js",revision:null},{url:"assets/racket-BqYA7rlc.js",revision:null},{url:"assets/r-Dspwwk_N.js",revision:null},{url:"assets/qss-IeuSbFQv.js",revision:null},{url:"assets/qmldir-C8lEn-DE.js",revision:null},{url:"assets/qml-3beO22l8.js",revision:null},{url:"assets/python-B6aJPvgy.js",revision:null},{url:"assets/purescript-CklMAg4u.js",revision:null},{url:"assets/puppet-BMWR74SV.js",revision:null},{url:"assets/pug-DKIMFp6K.js",revision:null},{url:"assets/proto-C7zT0LnQ.js",revision:null},{url:"assets/prolog-CbFg5uaA.js",revision:null},{url:"assets/prisma-Dd19v3D-.js",revision:null},{url:"assets/powershell-Dpen1YoG.js",revision:null},{url:"assets/powerquery-CEu0bR-o.js",revision:null},{url:"assets/postcss-CXtECtnM.js",revision:null},{url:"assets/polar-C0HS_06l.js",revision:null},{url:"assets/poimandres-CS3Unz2-.js",revision:null},{url:"assets/po-BTJTHyun.js",revision:null},{url:"assets/plsql-ChMvpjG-.js",revision:null},{url:"assets/plastic-3e1v2bzS.js",revision:null},{url:"assets/pkl-u5AG7uiY.js",revision:null},{url:"assets/php-Csjmro_R.js",revision:null},{url:"assets/perl-B9cMNwum.js",revision:null},{url:"assets/pascal-D93ZcfNL.js",revision:null},{url:"assets/openscad-C4EeE6gA.js",revision:null},{url:"assets/one-light-C3Wv6jpd.js",revision:null},{url:"assets/one-dark-pro-DVMEJ2y_.js",revision:null},{url:"assets/odin-BBf5iR-q.js",revision:null},{url:"assets/ocaml-C0hk2d4L.js",revision:null},{url:"assets/objective-cpp-CLxacb5B.js",revision:null},{url:"assets/objective-c-DXmwc3jG.js",revision:null},{url:"assets/nushell-Cz2AlsmD.js",revision:null},{url:"assets/nord-Ddv68eIx.js",revision:null},{url:"assets/nix-CwoSXNpI.js",revision:null},{url:"assets/nim-BIad80T-.js",revision:null},{url:"assets/night-owl-light-CMTm3GFP.js",revision:null},{url:"assets/night-owl-C39BiMTA.js",revision:null},{url:"assets/nginx-BpAMiNFr.js",revision:null},{url:"assets/nextflow-groovy-vE_lwT2v.js",revision:null},{url:"assets/nextflow-C-mBbutL.js",revision:null},{url:"assets/narrat-DRg8JJMk.js",revision:null},{url:"assets/move-IF9eRakj.js",revision:null},{url:"assets/moonbit-_H4v1dQx.js",revision:null},{url:"assets/monokai-D4h5O-jR.js",revision:null},{url:"assets/mojo-rZm6bMo-.js",revision:null},{url:"assets/mipsasm-CKIfxQSi.js",revision:null},{url:"assets/min-light-CTRr51gU.js",revision:null},{url:"assets/min-dark-CafNBF8u.js",revision:null},{url:"assets/mermaid-mWjccvbQ.js",revision:null},{url:"assets/mdx-Cmh6b_Ma.js",revision:null},{url:"assets/mdc-DTYItulj.js",revision:null},{url:"assets/matlab-D7o27uSR.js",revision:null},{url:"assets/material-theme-palenight-Csfq5Kiy.js",revision:null},{url:"assets/material-theme-ocean-CyktbL80.js",revision:null},{url:"assets/material-theme-lighter-B0m2ddpp.js",revision:null},{url:"assets/material-theme-darker-BfHTSMKl.js",revision:null},{url:"assets/material-theme-D5KoaKCx.js",revision:null},{url:"assets/marko-DjSrsDqO.js",revision:null},{url:"assets/markdown-Cvjx9yec.js",revision:null},{url:"assets/make-CHLpvVh8.js",revision:null},{url:"assets/luau-KW6xsasC.js",revision:null},{url:"assets/lua-BaeVxFsk.js",revision:null},{url:"assets/logo-BtOb2qkB.js",revision:null},{url:"assets/log-2UxHyX5q.js",revision:null},{url:"assets/llvm-DjAJT7YJ.js",revision:null},{url:"assets/liquid-C0sCDyMI.js",revision:null},{url:"assets/light-plus-B7mTdjB0.js",revision:null},{url:"assets/less-B1dDrJ26.js",revision:null},{url:"assets/lean-BZvkOJ9d.js",revision:null},{url:"assets/latex-CaSxy8MP.js",revision:null},{url:"assets/laserwave-DUszq2jm.js",revision:null},{url:"assets/kusto-wEQ09or8.js",revision:null},{url:"assets/kotlin-BdnUsdx6.js",revision:null},{url:"assets/kdl-DV7GczEv.js",revision:null},{url:"assets/kanagawa-wave-DWedfzmr.js",revision:null},{url:"assets/kanagawa-lotus-CfQXZHmo.js",revision:null},{url:"assets/kanagawa-dragon-CkXjmgJE.js",revision:null},{url:"assets/just-CUsbIsdP.js",revision:null},{url:"assets/julia-D7OTSIA_.js",revision:null},{url:"assets/jsx-g9-lgVsj.js",revision:null},{url:"assets/jssm-C2t-YnRu.js",revision:null},{url:"assets/jsonnet-DFQXde-d.js",revision:null},{url:"assets/jsonl-DcaNXYhu.js",revision:null},{url:"assets/jsonc-Des-eS-w.js",revision:null},{url:"assets/json5-C9tS-k6U.js",revision:null},{url:"assets/json-Cp-IABpG.js",revision:null},{url:"assets/jison-wvAkD_A8.js",revision:null},{url:"assets/jinja-f2NsQr07.js",revision:null},{url:"assets/javascript-wDzz0qaB.js",revision:null},{url:"assets/java-CylS5w8V.js",revision:null},{url:"assets/ini-BEwlwnbL.js",revision:null},{url:"assets/index-DvPmgi8F.css",revision:null},{url:"assets/index-CkE65FP4.js",revision:null},{url:"assets/imba-DGztddWO.js",revision:null},{url:"assets/hy-DFXneXwc.js",revision:null},{url:"assets/hxml-Bvhsp5Yf.js",revision:null},{url:"assets/hurl-irOxFIW8.js",revision:null},{url:"assets/http-jrhK8wxY.js",revision:null},{url:"assets/html2canvas.esm-QH1iLAAe.js",revision:null},{url:"assets/html-pp8916En.js",revision:null},{url:"assets/html-derivative-DlHx6ybY.js",revision:null},{url:"assets/houston-DnULxvSX.js",revision:null},{url:"assets/horizon-bright-CUuTKBJd.js",revision:null},{url:"assets/horizon-BUw7H-hv.js",revision:null},{url:"assets/hlsl-D3lLCCz7.js",revision:null},{url:"assets/hjson-D5-asLiD.js",revision:null},{url:"assets/hcl-BWvSN4gD.js",revision:null},{url:"assets/haxe-CzTSHFRz.js",revision:null},{url:"assets/haskell-Df6bDoY_.js",revision:null},{url:"assets/handlebars-BpdQsYii.js",revision:null},{url:"assets/haml-D5jkg6IW.js",revision:null},{url:"assets/hack-DbPARsA_.js",revision:null},{url:"assets/gruvbox-light-soft-hJgmCMqR.js",revision:null},{url:"assets/gruvbox-light-medium-DRw_LuNl.js",revision:null},{url:"assets/gruvbox-light-hard-CH1njM8p.js",revision:null},{url:"assets/gruvbox-dark-soft-CVdnzihN.js",revision:null},{url:"assets/gruvbox-dark-medium-GsRaNv29.js",revision:null},{url:"assets/gruvbox-dark-hard-CFHQjOhq.js",revision:null},{url:"assets/groovy-gcz8RCvz.js",revision:null},{url:"assets/graphql-ChdNCCLP.js",revision:null},{url:"assets/go-C27-OAKa.js",revision:null},{url:"assets/gnuplot-DdkO51Og.js",revision:null},{url:"assets/gn-n2N0HUVH.js",revision:null},{url:"assets/glsl-DplSGwfg.js",revision:null},{url:"assets/glimmer-ts-BfAWNZQY.js",revision:null},{url:"assets/glimmer-js-ByusRIyA.js",revision:null},{url:"assets/gleam-BspZqrRM.js",revision:null},{url:"assets/github-light-high-contrast-BfjtVDDH.js",revision:null},{url:"assets/github-light-default-D7oLnXFd.js",revision:null},{url:"assets/github-light-DAi9KRSo.js",revision:null},{url:"assets/github-dark-high-contrast-E3gJ1_iC.js",revision:null},{url:"assets/github-dark-dimmed-DH5Ifo-i.js",revision:null},{url:"assets/github-dark-default-Cuk6v7N8.js",revision:null},{url:"assets/github-dark-DHJKELXO.js",revision:null},{url:"assets/git-rebase-r7XF79zn.js",revision:null},{url:"assets/git-commit-F4YmCXRG.js",revision:null},{url:"assets/gherkin-DyxjwDmM.js",revision:null},{url:"assets/genie-D0YGMca9.js",revision:null},{url:"assets/gdshader-DkwncUOv.js",revision:null},{url:"assets/gdscript-C5YyOfLZ.js",revision:null},{url:"assets/gdresource-BOOCDP_w.js",revision:null},{url:"assets/fsharp-CXgrBDvD.js",revision:null},{url:"assets/fortran-free-form-BxgE0vQu.js",revision:null},{url:"assets/fortran-fixed-form-CkoXwp7k.js",revision:null},{url:"assets/fluent-C4IJs8-o.js",revision:null},{url:"assets/fish-BvzEVeQv.js",revision:null},{url:"assets/fennel-BYunw83y.js",revision:null},{url:"assets/everforest-light-C8M2exoo.js",revision:null},{url:"assets/everforest-dark-BgDCqdQA.js",revision:null},{url:"assets/erlang-DsQrWhSR.js",revision:null},{url:"assets/erb-Dm6A9KJ5.js",revision:null},{url:"assets/emacs-lisp-CXvaQtF9.js",revision:null},{url:"assets/elm-DbKCFpqz.js",revision:null},{url:"assets/elixir-CkH2-t6x.js",revision:null},{url:"assets/edge-FbVlp4U3.js",revision:null},{url:"assets/dream-maker-BtqSS_iP.js",revision:null},{url:"assets/dracula-soft-BXkSAIEj.js",revision:null},{url:"assets/dracula-BzJJZx-M.js",revision:null},{url:"assets/dotenv-Da5cRb03.js",revision:null},{url:"assets/docker-BcOcwvcX.js",revision:null},{url:"assets/diff-D97Zzqfu.js",revision:null},{url:"assets/desktop-BmXAJ9_W.js",revision:null},{url:"assets/dax-CEL-wOlO.js",revision:null},{url:"assets/dart-bE4Kk8sk.js",revision:null},{url:"assets/dark-plus-C3mMm8J8.js",revision:null},{url:"assets/d-85-TOEBH.js",revision:null},{url:"assets/cypher-COkxafJQ.js",revision:null},{url:"assets/cue-D82EKSYY.js",revision:null},{url:"assets/csv-fuZLfV_i.js",revision:null},{url:"assets/css-CLj8gQPS.js",revision:null},{url:"assets/csharp-DSvCPggb.js",revision:null},{url:"assets/crystal-DGywbUpC.js",revision:null},{url:"assets/cpp-UfJy6YNI.js",revision:null},{url:"assets/coq-DkFqJrB1.js",revision:null},{url:"assets/common-lisp-Cg-RD9OK.js",revision:null},{url:"assets/coffee-Ch7k5sss.js",revision:null},{url:"assets/codeql-DsOJ9woJ.js",revision:null},{url:"assets/codeowners-Bp6g37R7.js",revision:null},{url:"assets/cobol-nBiQ_Alo.js",revision:null},{url:"assets/cmake-D1j8_8rp.js",revision:null},{url:"assets/clojure-P80f7IUj.js",revision:null},{url:"assets/clarity-D53aC0YG.js",revision:null},{url:"assets/catppuccin-mocha-D87Tk5Gz.js",revision:null},{url:"assets/catppuccin-macchiato-DQyhUUbL.js",revision:null},{url:"assets/catppuccin-latte-C9dUb6Cb.js",revision:null},{url:"assets/catppuccin-frappe-DFWUc33u.js",revision:null},{url:"assets/cairo-KRGpt6FW.js",revision:null},{url:"assets/cadence-Bv_4Rxtq.js",revision:null},{url:"assets/c3-MRO5bC_T.js",revision:null},{url:"assets/c-BIGW1oBm.js",revision:null},{url:"assets/bsl-BO_Y6i37.js",revision:null},{url:"assets/blade-2xfisSek.js",revision:null},{url:"assets/bird2-BIv1doCn.js",revision:null},{url:"assets/bicep-Bmn6On1c.js",revision:null},{url:"assets/bibtex-CHM0blh-.js",revision:null},{url:"assets/berry-uYugtg8r.js",revision:null},{url:"assets/beancount-k_qm7-4y.js",revision:null},{url:"assets/bat-BkioyH1T.js",revision:null},{url:"assets/ballerina-BFfxhgS-.js",revision:null},{url:"assets/ayu-mirage-32ctXXKs.js",revision:null},{url:"assets/ayu-light-BA47KaF1.js",revision:null},{url:"assets/ayu-dark-DYE7WIF3.js",revision:null},{url:"assets/awk-DMzUqQB5.js",revision:null},{url:"assets/aurora-x-D-2ljcwZ.js",revision:null},{url:"assets/astro-HNnZUWAn.js",revision:null},{url:"assets/asm-D_Q5rh1f.js",revision:null},{url:"assets/asciidoc-Ve4PFQV2.js",revision:null},{url:"assets/ara-BRHolxvo.js",revision:null},{url:"assets/applescript-Co6uUVPk.js",revision:null},{url:"assets/apl-CORt7UWP.js",revision:null},{url:"assets/apex-Dqspr-GT.js",revision:null},{url:"assets/apache-Pmp26Uib.js",revision:null},{url:"assets/angular-ts-BrjP3tb8.js",revision:null},{url:"assets/angular-html-DA-rfuFy.js",revision:null},{url:"assets/andromeeda-C4gqWexZ.js",revision:null},{url:"assets/ada-bCR0ucgS.js",revision:null},{url:"assets/actionscript-3-CoDkCxhg.js",revision:null},{url:"assets/abap-BdImnpbu.js",revision:null},{url:"assets/openfox-192.png",revision:"79feeb86d692c274854e37959a7dae67"},{url:"assets/openfox-512.png",revision:"fee24b214220594b4f595a467e73036e"},{url:"manifest.webmanifest",revision:"c25f372c782e623ab1e768a8dfe350ca"}],{}),s.cleanupOutdatedCaches(),s.registerRoute(new s.NavigationRoute(s.createHandlerBoundToURL("index.html")))});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openfox",
3
- "version": "2.0.63",
3
+ "version": "2.0.64",
4
4
  "description": "Local-LLM-first agentic coding assistant",
5
5
  "type": "module",
6
6
  "bin": {