@quanta-intellect/vessel-browser 0.1.128 → 0.1.130

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.
@@ -2491,93 +2491,11 @@ function useRuntime() {
2491
2491
  restoreSession: () => window.vessel.ai.restoreSession()
2492
2492
  };
2493
2493
  }
2494
- function formatAgentActionName(name) {
2495
- return name.split(/[_-]+/).filter(Boolean).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join(" ");
2496
- }
2497
- function summarizeAgentAction(action) {
2498
- if (action.status === "waiting-approval") {
2499
- return action.argsSummary || "Waiting for approval";
2500
- }
2501
- if (action.status === "running") {
2502
- return action.argsSummary || "Running";
2503
- }
2504
- if (action.status === "failed") {
2505
- return action.error || action.resultSummary || "Action failed";
2506
- }
2507
- return action.resultSummary || action.argsSummary || "Completed";
2508
- }
2509
- function formatAgentTimelineDuration(durationMs) {
2510
- if (!durationMs || durationMs < 1) return null;
2511
- if (durationMs < 1e3) return `${Math.round(durationMs)}ms`;
2512
- return `${(durationMs / 1e3).toFixed(durationMs < 1e4 ? 1 : 0)}s`;
2513
- }
2514
- function buildAgentTimelineItems(state, limit = 12) {
2515
- const transcriptItems = state.transcript.map((entry) => ({
2516
- id: `transcript:${entry.id}`,
2517
- type: "transcript",
2518
- timestamp: entry.updatedAt,
2519
- status: entry.status,
2520
- kind: entry.kind,
2521
- label: entry.title || entry.kind,
2522
- detail: entry.text
2523
- }));
2524
- const actionItems = state.actions.map((action) => ({
2525
- id: `action:${action.id}`,
2526
- type: "action",
2527
- timestamp: action.finishedAt || action.startedAt,
2528
- status: action.status,
2529
- kind: "action",
2530
- label: formatAgentActionName(action.name),
2531
- detail: summarizeAgentAction(action),
2532
- durationMs: action.durationMs
2533
- }));
2534
- return [...transcriptItems, ...actionItems].sort(
2535
- (left, right) => new Date(right.timestamp).getTime() - new Date(left.timestamp).getTime()
2536
- ).slice(0, limit);
2537
- }
2538
- function isLiveAgentTimelineItem(item) {
2539
- return item.status === "streaming" || item.status === "running";
2540
- }
2541
2494
  const AGENT_ACTIVITY_WINDOW_MS = 6e3;
2542
- const AGENT_RECENT_WINDOW_MS = 3e4;
2543
2495
  const AGENT_RUNNING_STALE_WINDOW_MS = 5 * 6e4;
2544
2496
  function isAgentActionSource(source) {
2545
2497
  return source === "ai" || source === "mcp";
2546
2498
  }
2547
- function isAgentTranscriptActive(entry, currentTime) {
2548
- if (!isAgentActionSource(entry.source)) return false;
2549
- if (entry.status === "streaming") {
2550
- const updatedAt2 = new Date(entry.updatedAt).getTime();
2551
- if (Number.isNaN(updatedAt2)) return true;
2552
- return currentTime - updatedAt2 < AGENT_ACTIVITY_WINDOW_MS;
2553
- }
2554
- const updatedAt = new Date(entry.updatedAt).getTime();
2555
- if (Number.isNaN(updatedAt)) return false;
2556
- return currentTime - updatedAt < AGENT_ACTIVITY_WINDOW_MS;
2557
- }
2558
- function summarizeTranscriptText(entry) {
2559
- const raw = `${entry.title ? `${entry.title}: ` : ""}${entry.text}`.trim();
2560
- const singleLine = raw.replace(/\s+/g, " ").trim();
2561
- return singleLine.length > 96 ? `${singleLine.slice(0, 93).trimEnd()}...` : singleLine;
2562
- }
2563
- function summarizeActionText(action) {
2564
- const name = formatAgentActionName(action.name);
2565
- if (action.status === "running") {
2566
- return `${name} in progress`;
2567
- }
2568
- if (action.status === "waiting-approval") {
2569
- return `${name} waiting for approval`;
2570
- }
2571
- if (action.status === "completed" && action.resultSummary) {
2572
- const singleLine = action.resultSummary.replace(/\s+/g, " ").trim();
2573
- return singleLine.length > 96 ? `${singleLine.slice(0, 93).trimEnd()}...` : singleLine;
2574
- }
2575
- if (action.status === "failed" && action.error) {
2576
- const singleLine = action.error.replace(/\s+/g, " ").trim();
2577
- return `${name} failed: ${singleLine.length > 72 ? `${singleLine.slice(0, 69).trimEnd()}...` : singleLine}`;
2578
- }
2579
- return name;
2580
- }
2581
2499
  function isAgentActionActive(action, currentTime) {
2582
2500
  if (!isAgentActionSource(action.source)) return false;
2583
2501
  if (action.status === "waiting-approval") {
@@ -2595,9 +2513,6 @@ function isAgentActionActive(action, currentTime) {
2595
2513
  if (Number.isNaN(finishedAt)) return false;
2596
2514
  return currentTime - finishedAt < AGENT_ACTIVITY_WINDOW_MS;
2597
2515
  }
2598
- function hasRecentAgentActivity(state, currentTime = Date.now()) {
2599
- return state.actions.some((action) => isAgentActionActive(action, currentTime)) || state.transcript.some((entry) => isAgentTranscriptActive(entry, currentTime));
2600
- }
2601
2516
  function getAgentActiveTabIds(state, currentTime = Date.now()) {
2602
2517
  const activeTabIds = /* @__PURE__ */ new Set();
2603
2518
  for (const action of state.actions) {
@@ -2608,50 +2523,7 @@ function getAgentActiveTabIds(state, currentTime = Date.now()) {
2608
2523
  }
2609
2524
  return activeTabIds;
2610
2525
  }
2611
- function getLatestAgentStatusMessage(state, currentTime = Date.now()) {
2612
- const recentTranscript = [...state.transcript].filter((entry) => isAgentTranscriptActive(entry, currentTime)).sort(
2613
- (left, right) => new Date(right.updatedAt).getTime() - new Date(left.updatedAt).getTime()
2614
- )[0];
2615
- if (recentTranscript) {
2616
- const summary = summarizeTranscriptText(recentTranscript);
2617
- if (summary) return summary;
2618
- }
2619
- const recentAction = [...state.actions].filter((action) => isAgentActionActive(action, currentTime)).sort((left, right) => {
2620
- const leftTime = new Date(
2621
- left.finishedAt || left.startedAt
2622
- ).getTime();
2623
- const rightTime = new Date(
2624
- right.finishedAt || right.startedAt
2625
- ).getTime();
2626
- return rightTime - leftTime;
2627
- })[0];
2628
- return recentAction ? summarizeActionText(recentAction) : null;
2629
- }
2630
- function hasRecentActivity(state, windowMs, currentTime) {
2631
- for (const action of state.actions) {
2632
- if (!isAgentActionSource(action.source)) continue;
2633
- if (isAgentActionActive(action, currentTime)) return true;
2634
- const ts = action.finishedAt ? new Date(action.finishedAt).getTime() : new Date(action.startedAt).getTime();
2635
- if (!Number.isNaN(ts) && currentTime - ts < windowMs) return true;
2636
- }
2637
- for (const entry of state.transcript) {
2638
- if (!isAgentActionSource(entry.source)) continue;
2639
- const ts = new Date(entry.updatedAt).getTime();
2640
- if (!Number.isNaN(ts) && currentTime - ts < windowMs) return true;
2641
- }
2642
- return false;
2643
- }
2644
- function getAgentPresence(state, currentTime = Date.now()) {
2645
- if (hasRecentAgentActivity(state, currentTime)) {
2646
- return "active";
2647
- }
2648
- const mcpConnected = state.mcpStatus === "ready";
2649
- if (mcpConnected || hasRecentActivity(state, AGENT_RECENT_WINDOW_MS, currentTime)) {
2650
- return "recent";
2651
- }
2652
- return "idle";
2653
- }
2654
- var _tmpl$$r = /* @__PURE__ */ template(`<img class=tab-favicon alt>`), _tmpl$2$q = /* @__PURE__ */ template(`<span class=tab-favicon-fallback>`), _tmpl$3$m = /* @__PURE__ */ template(`<div class=tab-bar><div class=tab-list></div><div class=tab-actions><button class=tab-new data-tooltip="New window"data-tooltip-pos=left></button><button class=tab-new data-tooltip="Add active tab to group"data-tooltip-pos=left></button><button class=tab-new data-tooltip="New tab"data-tooltip-pos=left></button><button class="tab-new tab-new-private"data-tooltip="Private window"data-tooltip-pos=left><svg width=12 height=12 viewBox="0 0 16 16"fill=currentColor><path d="M8 1a7 7 0 100 14A7 7 0 008 1zm0 1.5a5.5 5.5 0 110 11 5.5 5.5 0 010-11z">`), _tmpl$4$l = /* @__PURE__ */ template(`<button><span class=tab-group-dot></span><span class=tab-group-name></span><span class=tab-group-count>`), _tmpl$5$i = /* @__PURE__ */ template(`<button class="tab-audio tab-audio-pinned">`), _tmpl$6$g = /* @__PURE__ */ template(`<div role=tab>`), _tmpl$7$e = /* @__PURE__ */ template(`<span class=tab-title>`), _tmpl$8$a = /* @__PURE__ */ template(`<button class=tab-audio>`), _tmpl$9$9 = /* @__PURE__ */ template(`<button class=tab-close>×`), _tmpl$0$7 = /* @__PURE__ */ template(`<span class=tab-agent-indicator aria-hidden=true title="Agent active on this tab">`), _tmpl$1$7 = /* @__PURE__ */ template(`<span class=tab-loading>`);
2526
+ var _tmpl$$r = /* @__PURE__ */ template(`<img class=tab-favicon alt>`), _tmpl$2$q = /* @__PURE__ */ template(`<span class=tab-favicon-fallback>`), _tmpl$3$m = /* @__PURE__ */ template(`<div class=tab-bar><div class=tab-list></div><div class=tab-actions><button class=tab-new data-tooltip="New window"data-tooltip-pos=left></button><button class=tab-new data-tooltip="Add active tab to group"data-tooltip-pos=left></button><button class=tab-new data-tooltip="New tab"data-tooltip-pos=left></button><button class="tab-new tab-new-private"data-tooltip="Private window"data-tooltip-pos=left><svg width=12 height=12 viewBox="0 0 16 16"fill=currentColor><path d="M8 1a7 7 0 100 14A7 7 0 008 1zm0 1.5a5.5 5.5 0 110 11 5.5 5.5 0 010-11z">`), _tmpl$4$l = /* @__PURE__ */ template(`<button><span class=tab-group-dot></span><span class=tab-group-name></span><span class=tab-group-count>`), _tmpl$5$h = /* @__PURE__ */ template(`<button class="tab-audio tab-audio-pinned">`), _tmpl$6$f = /* @__PURE__ */ template(`<div role=tab>`), _tmpl$7$d = /* @__PURE__ */ template(`<span class=tab-title>`), _tmpl$8$a = /* @__PURE__ */ template(`<button class=tab-audio>`), _tmpl$9$9 = /* @__PURE__ */ template(`<button class=tab-close>×`), _tmpl$0$7 = /* @__PURE__ */ template(`<span class=tab-agent-indicator aria-hidden=true title="Agent active on this tab">`), _tmpl$1$7 = /* @__PURE__ */ template(`<span class=tab-loading>`);
2655
2527
  const TAB_CLOSE_MS = 200;
2656
2528
  function stringToHue(str) {
2657
2529
  let hash = 0;
@@ -2788,7 +2660,7 @@ const TabBar = () => {
2788
2660
  return memo(() => entry.type === "tab")() && (() => {
2789
2661
  const tab = entry.tab;
2790
2662
  return (() => {
2791
- var _el$12 = _tmpl$6$g();
2663
+ var _el$12 = _tmpl$6$f();
2792
2664
  _el$12.$$contextmenu = (e) => {
2793
2665
  e.preventDefault();
2794
2666
  window.vessel.tabs.showContextMenu(tab.id);
@@ -2813,7 +2685,7 @@ const TabBar = () => {
2813
2685
  return memo(() => !!tab.isPinned)() && (tab.isAudible || tab.isMuted);
2814
2686
  },
2815
2687
  get children() {
2816
- var _el$13 = _tmpl$5$i();
2688
+ var _el$13 = _tmpl$5$h();
2817
2689
  _el$13.$$click = (e) => {
2818
2690
  e.stopPropagation();
2819
2691
  void toggleMute(tab.id);
@@ -2840,7 +2712,7 @@ const TabBar = () => {
2840
2712
  insert(_el$12, (() => {
2841
2713
  var _c$ = memo(() => !!!tab.isPinned);
2842
2714
  return () => _c$() && [memo(() => memo(() => !!modelActiveTabIds().has(tab.id))() && _tmpl$0$7()), (() => {
2843
- var _el$14 = _tmpl$7$e();
2715
+ var _el$14 = _tmpl$7$d();
2844
2716
  insert(_el$14, () => tab.title || "New Tab");
2845
2717
  return _el$14;
2846
2718
  })(), createComponent(Show, {
@@ -2917,7 +2789,7 @@ const TabBar = () => {
2917
2789
  })();
2918
2790
  };
2919
2791
  delegateEvents(["click", "contextmenu"]);
2920
- var _tmpl$$q = /* @__PURE__ */ template(`<button class=security-popup-link>Reset permissions for this site`), _tmpl$2$p = /* @__PURE__ */ template(`<div class=security-popup><div class=security-popup-content><p class=security-popup-text></p><button class=security-popup-link>Learn More</button><div class=security-popup-section><div class=security-popup-section-title>Site permissions`), _tmpl$3$l = /* @__PURE__ */ template(`<p class=security-popup-muted>No saved permission decisions for this site.`), _tmpl$4$k = /* @__PURE__ */ template(`<div class=security-popup-permission-row><span></span><strong>`), _tmpl$5$h = /* @__PURE__ */ template(`<div class=security-popup-actions><button class=security-popup-action-proceed>Proceed Anyway</button><button class=security-popup-action-back>Go Back to Safety`);
2792
+ var _tmpl$$q = /* @__PURE__ */ template(`<button class=security-popup-link>Reset permissions for this site`), _tmpl$2$p = /* @__PURE__ */ template(`<div class=security-popup><div class=security-popup-content><p class=security-popup-text></p><button class=security-popup-link>Learn More</button><div class=security-popup-section><div class=security-popup-section-title>Site permissions`), _tmpl$3$l = /* @__PURE__ */ template(`<p class=security-popup-muted>No saved permission decisions for this site.`), _tmpl$4$k = /* @__PURE__ */ template(`<div class=security-popup-permission-row><span></span><strong>`), _tmpl$5$g = /* @__PURE__ */ template(`<div class=security-popup-actions><button class=security-popup-action-proceed>Proceed Anyway</button><button class=security-popup-action-back>Go Back to Safety`);
2921
2793
  const SecurityPopup = (props) => {
2922
2794
  const statusText = () => {
2923
2795
  switch (props.state.status) {
@@ -3008,7 +2880,7 @@ const SecurityPopup = (props) => {
3008
2880
  insert(_el$2, (() => {
3009
2881
  var _c$ = memo(() => !!props.state.canProceed);
3010
2882
  return () => _c$() && (() => {
3011
- var _el$10 = _tmpl$5$h(), _el$11 = _el$10.firstChild, _el$12 = _el$11.nextSibling;
2883
+ var _el$10 = _tmpl$5$g(), _el$11 = _el$10.firstChild, _el$12 = _el$11.nextSibling;
3012
2884
  _el$11.$$click = handleProceedAnyway;
3013
2885
  _el$12.$$click = handleGoBackToSafety;
3014
2886
  return _el$10;
@@ -3408,7 +3280,7 @@ const SEARCH_ENGINE_PRESETS = {
3408
3280
  ecosia: { label: "Ecosia", url: "https://www.ecosia.org/search?q=" },
3409
3281
  kagi: { label: "Kagi", url: "https://kagi.com/search?q=" }
3410
3282
  };
3411
- var _tmpl$$p = /* @__PURE__ */ template(`<div class=private-badge title="Private Browsing - history and cookies are not saved"><svg width=12 height=12 viewBox="0 0 16 16"fill=currentColor><path d="M8 1a7 7 0 100 14A7 7 0 008 1zm0 1.5a5.5 5.5 0 110 11 5.5 5.5 0 010-11zM5.5 7a1.5 1.5 0 103 0 1.5 1.5 0 00-3 0zm3.5 3.5c0-1-1.5-2-2.5-2s-2.5 1-2.5 2"></path></svg><span>Private`), _tmpl$2$o = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z">`), _tmpl$3$k = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z"></path><line x1=2 y1=12 x2=12 y2=2 stroke=currentColor stroke-width=1.5>`), _tmpl$4$j = /* @__PURE__ */ template(`<div class=security-indicator-wrapper><button>`), _tmpl$5$g = /* @__PURE__ */ template(`<div id=address-autocomplete class=autocomplete-dropdown role=listbox>`), _tmpl$6$f = /* @__PURE__ */ template(`<div><span class=agent-status-dot aria-hidden=true></span><span class=agent-status-text></span><button type=button class=agent-status-dismiss aria-label="Dismiss agent status"title=Dismiss>`), _tmpl$7$d = /* @__PURE__ */ template(`<button class="agent-status-badge recent"title="Open the What Changed timeline"style=cursor:pointer;font-size:11px><span class=agent-status-dot aria-hidden=true style=background:var(--status-warning-amber)></span><span class=agent-status-text>What Changed?`), _tmpl$8$9 = /* @__PURE__ */ template(`<span class=page-diff-burst-meta>Updated <!> times over `), _tmpl$9$8 = /* @__PURE__ */ template(`<div class=page-diff-burst-history><div class=page-diff-burst-history-label>Recent detections`), _tmpl$0$6 = /* @__PURE__ */ template(`<div class=page-diff-popup><div class=page-diff-popup-header><div class=page-diff-popup-header-copy><span>Compared with your last visit</span><span class=page-diff-burst-meta>Previous snapshot from </span></div><div style=display:flex;gap:8px;align-items:center><button class=nav-btn title="Open the full What Changed timeline"style="height:24px;min-width:auto;padding:0 8px">Timeline</button><button class=page-diff-popup-close>&times;`), _tmpl$1$6 = /* @__PURE__ */ template(`<svg><path d="M3 3 L11 3 L11 9 Q7 13 3 9 Z"fill=none stroke=currentColor stroke-width=1.2 stroke-linejoin=round></svg>`, false, true, false), _tmpl$10$6 = /* @__PURE__ */ template(`<svg><line x1=2 y1=12 x2=12 y2=2 stroke=currentColor stroke-width=1.4 stroke-linecap=round></svg>`, false, true, false), _tmpl$11$6 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Reader Mode"><svg width=14 height=14 viewBox="0 0 14 14"><rect x=2 y=1 width=10 height=12 rx=1 fill=none stroke=currentColor stroke-width=1.2></rect><line x1=4 y1=4 x2=10 y2=4 stroke=currentColor stroke-width=1></line><line x1=4 y1=6.5 x2=10 y2=6.5 stroke=currentColor stroke-width=1></line><line x1=4 y1=9 x2=8 y2=9 stroke=currentColor stroke-width=1>`), _tmpl$12$6 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Dev Tools"><svg width=14 height=14 viewBox="0 0 14 14"><polyline points="3,5 1,7 3,9"fill=none stroke=currentColor stroke-width=1.2 stroke-linecap=round stroke-linejoin=round></polyline><polyline points="11,5 13,7 11,9"fill=none stroke=currentColor stroke-width=1.2 stroke-linecap=round stroke-linejoin=round></polyline><line x1=8.5 y1=2 x2=5.5 y2=12 stroke=currentColor stroke-width=1.2 stroke-linecap=round>`), _tmpl$13$5 = /* @__PURE__ */ template(`<span class=nav-btn-badge>`), _tmpl$14$5 = /* @__PURE__ */ template(`<button class="nav-btn nav-btn-sidebar"><svg width=14 height=14 viewBox="0 0 14 14"><rect x=1 y=1 width=12 height=12 rx=1.5 fill=none stroke=currentColor stroke-width=1.2></rect><line x1=9 y1=1 x2=9 y2=13 stroke=currentColor stroke-width=1.2>`), _tmpl$15$5 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Clear Data">`), _tmpl$16$4 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip=Settings><svg width=14 height=14 viewBox="0 0 14 14"><circle cx=7 cy=7 r=2 fill=none stroke=currentColor stroke-width=1.2></circle><path d="M7 1v2M7 11v2M1 7h2M11 7h2M2.8 2.8l1.4 1.4M9.8 9.8l1.4 1.4M11.2 2.8l-1.4 1.4M4.2 9.8l-1.4 1.4"stroke=currentColor stroke-width=1 stroke-linecap=round>`), _tmpl$17$4 = /* @__PURE__ */ template(`<div class=address-bar><div class=nav-controls><button class=nav-btn data-tooltip=Back><svg width=14 height=14 viewBox="0 0 14 14"><path d="M9 2L4 7l5 5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=nav-btn data-tooltip=Forward><svg width=14 height=14 viewBox="0 0 14 14"><path d="M5 2l5 5-5 5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=nav-btn data-tooltip=Reload><svg width=14 height=14 viewBox="0 0 14 14"><path d="M2.5 7a4.5 4.5 0 1 1 1 3"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round></path><path d="M2 4v3.5h3.5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button></div><div class=url-shell><form class=url-form><input class=url-input type=text placeholder="Search or enter URL"autocomplete=off aria-autocomplete=list aria-controls=address-autocomplete></form></div><div class=toolbar-actions><button class=nav-btn><svg width=14 height=14 viewBox="0 0 14 14">`), _tmpl$18$4 = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z"></path><circle cx=7 cy=8 r=0.8 fill=white>`), _tmpl$19$4 = /* @__PURE__ */ template(`<div role=option><span class=autocomplete-icon></span><span class=autocomplete-text><span class=autocomplete-title></span><span class=autocomplete-url>`), _tmpl$20$4 = /* @__PURE__ */ template(`<div class=page-diff-burst-row><span class=page-diff-burst-time></span><span class=page-diff-burst-summary>`), _tmpl$21$4 = /* @__PURE__ */ template(`<span class=page-diff-burst-summary-section>`), _tmpl$22$4 = /* @__PURE__ */ template(`<span class=page-diff-burst-summary-part><span>`), _tmpl$23$4 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>Before</span><span class=page-diff-snippet-text>`), _tmpl$24$4 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>After</span><span class=page-diff-snippet-text>`), _tmpl$25$3 = /* @__PURE__ */ template(`<div class=page-diff-snippets>`), _tmpl$26$3 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Added</span><ul class=page-diff-list>`), _tmpl$27$3 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Removed</span><ul class=page-diff-list>`), _tmpl$28$3 = /* @__PURE__ */ template(`<div><div class=page-diff-item-header><div class=page-diff-badges><span class=page-diff-kind></span><span class=page-diff-section></span></div><span class=page-diff-summary>`), _tmpl$29$3 = /* @__PURE__ */ template(`<li>`);
3283
+ var _tmpl$$p = /* @__PURE__ */ template(`<div class=private-badge title="Private Browsing - history and cookies are not saved"><svg width=12 height=12 viewBox="0 0 16 16"fill=currentColor><path d="M8 1a7 7 0 100 14A7 7 0 008 1zm0 1.5a5.5 5.5 0 110 11 5.5 5.5 0 010-11zM5.5 7a1.5 1.5 0 103 0 1.5 1.5 0 00-3 0zm3.5 3.5c0-1-1.5-2-2.5-2s-2.5 1-2.5 2"></path></svg><span>Private`), _tmpl$2$o = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z">`), _tmpl$3$k = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z"></path><line x1=2 y1=12 x2=12 y2=2 stroke=currentColor stroke-width=1.5>`), _tmpl$4$j = /* @__PURE__ */ template(`<div class=security-indicator-wrapper><button>`), _tmpl$5$f = /* @__PURE__ */ template(`<div id=address-autocomplete class=autocomplete-dropdown role=listbox>`), _tmpl$6$e = /* @__PURE__ */ template(`<button class=page-diff-trigger title="Open the What Changed timeline"><span class=page-diff-trigger-dot aria-hidden=true></span><span class=page-diff-trigger-text>What Changed?`), _tmpl$7$c = /* @__PURE__ */ template(`<span class=page-diff-burst-meta>Updated <!> times over `), _tmpl$8$9 = /* @__PURE__ */ template(`<div class=page-diff-burst-history><div class=page-diff-burst-history-label>Recent detections`), _tmpl$9$8 = /* @__PURE__ */ template(`<div class=page-diff-popup><div class=page-diff-popup-header><div class=page-diff-popup-header-copy><span>Compared with your last visit</span><span class=page-diff-burst-meta>Previous snapshot from </span></div><div style=display:flex;gap:8px;align-items:center><button class=nav-btn title="Open the full What Changed timeline"style="height:24px;min-width:auto;padding:0 8px">Timeline</button><button class=page-diff-popup-close>&times;`), _tmpl$0$6 = /* @__PURE__ */ template(`<svg><path d="M3 3 L11 3 L11 9 Q7 13 3 9 Z"fill=none stroke=currentColor stroke-width=1.2 stroke-linejoin=round></svg>`, false, true, false), _tmpl$1$6 = /* @__PURE__ */ template(`<svg><line x1=2 y1=12 x2=12 y2=2 stroke=currentColor stroke-width=1.4 stroke-linecap=round></svg>`, false, true, false), _tmpl$10$6 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Reader Mode"><svg width=14 height=14 viewBox="0 0 14 14"><rect x=2 y=1 width=10 height=12 rx=1 fill=none stroke=currentColor stroke-width=1.2></rect><line x1=4 y1=4 x2=10 y2=4 stroke=currentColor stroke-width=1></line><line x1=4 y1=6.5 x2=10 y2=6.5 stroke=currentColor stroke-width=1></line><line x1=4 y1=9 x2=8 y2=9 stroke=currentColor stroke-width=1>`), _tmpl$11$6 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Dev Tools"><svg width=14 height=14 viewBox="0 0 14 14"><polyline points="3,5 1,7 3,9"fill=none stroke=currentColor stroke-width=1.2 stroke-linecap=round stroke-linejoin=round></polyline><polyline points="11,5 13,7 11,9"fill=none stroke=currentColor stroke-width=1.2 stroke-linecap=round stroke-linejoin=round></polyline><line x1=8.5 y1=2 x2=5.5 y2=12 stroke=currentColor stroke-width=1.2 stroke-linecap=round>`), _tmpl$12$6 = /* @__PURE__ */ template(`<span class=nav-btn-badge>`), _tmpl$13$5 = /* @__PURE__ */ template(`<button class="nav-btn nav-btn-sidebar"><svg width=14 height=14 viewBox="0 0 14 14"><rect x=1 y=1 width=12 height=12 rx=1.5 fill=none stroke=currentColor stroke-width=1.2></rect><line x1=9 y1=1 x2=9 y2=13 stroke=currentColor stroke-width=1.2>`), _tmpl$14$5 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip="Clear Data">`), _tmpl$15$5 = /* @__PURE__ */ template(`<button class=nav-btn data-tooltip=Settings><svg width=14 height=14 viewBox="0 0 14 14"><circle cx=7 cy=7 r=2 fill=none stroke=currentColor stroke-width=1.2></circle><path d="M7 1v2M7 11v2M1 7h2M11 7h2M2.8 2.8l1.4 1.4M9.8 9.8l1.4 1.4M11.2 2.8l-1.4 1.4M4.2 9.8l-1.4 1.4"stroke=currentColor stroke-width=1 stroke-linecap=round>`), _tmpl$16$4 = /* @__PURE__ */ template(`<div class=address-bar><div class=nav-controls><button class=nav-btn data-tooltip=Back><svg width=14 height=14 viewBox="0 0 14 14"><path d="M9 2L4 7l5 5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=nav-btn data-tooltip=Forward><svg width=14 height=14 viewBox="0 0 14 14"><path d="M5 2l5 5-5 5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button><button class=nav-btn data-tooltip=Reload><svg width=14 height=14 viewBox="0 0 14 14"><path d="M2.5 7a4.5 4.5 0 1 1 1 3"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round></path><path d="M2 4v3.5h3.5"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round></path></svg></button></div><div class=url-shell><form class=url-form><input class=url-input type=text placeholder="Search or enter URL"autocomplete=off aria-autocomplete=list aria-controls=address-autocomplete></form></div><div class=toolbar-actions><button class=nav-btn><svg width=14 height=14 viewBox="0 0 14 14">`), _tmpl$17$4 = /* @__PURE__ */ template(`<svg width=14 height=14 viewBox="0 0 14 14"fill=currentColor><path d="M7 1a4 4 0 00-4 4v2H1.5a.5.5 0 00-.5.5v5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5v-5a.5.5 0 00-.5-.5H11V5a4 4 0 00-4-4zm0 1a3 3 0 013 3v2H4V5a3 3 0 013-3z"></path><circle cx=7 cy=8 r=0.8 fill=white>`), _tmpl$18$4 = /* @__PURE__ */ template(`<div role=option><span class=autocomplete-icon></span><span class=autocomplete-text><span class=autocomplete-title></span><span class=autocomplete-url>`), _tmpl$19$4 = /* @__PURE__ */ template(`<div class=page-diff-burst-row><span class=page-diff-burst-time></span><span class=page-diff-burst-summary>`), _tmpl$20$4 = /* @__PURE__ */ template(`<span class=page-diff-burst-summary-section>`), _tmpl$21$4 = /* @__PURE__ */ template(`<span class=page-diff-burst-summary-part><span>`), _tmpl$22$4 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>Before</span><span class=page-diff-snippet-text>`), _tmpl$23$4 = /* @__PURE__ */ template(`<div class=page-diff-snippet><span class=page-diff-snippet-label>After</span><span class=page-diff-snippet-text>`), _tmpl$24$4 = /* @__PURE__ */ template(`<div class=page-diff-snippets>`), _tmpl$25$3 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Added</span><ul class=page-diff-list>`), _tmpl$26$3 = /* @__PURE__ */ template(`<div class=page-diff-list-group><span class=page-diff-list-label>Removed</span><ul class=page-diff-list>`), _tmpl$27$3 = /* @__PURE__ */ template(`<div><div class=page-diff-item-header><div class=page-diff-badges><span class=page-diff-kind></span><span class=page-diff-section></span></div><span class=page-diff-summary>`), _tmpl$28$3 = /* @__PURE__ */ template(`<li>`);
3412
3284
  const AddressBar = (props) => {
3413
3285
  const {
3414
3286
  activeTab,
@@ -3444,8 +3316,6 @@ const AddressBar = (props) => {
3444
3316
  const [searchEngine, setSearchEngine] = createSignal("duckduckgo");
3445
3317
  const [showSecurityPopup, setShowSecurityPopup] = createSignal(false);
3446
3318
  const [hasEditedAddress, setHasEditedAddress] = createSignal(false);
3447
- const [dismissedAgentStatusKey, setDismissedAgentStatusKey] = createSignal(null);
3448
- const now2 = useNow();
3449
3319
  let inputRef;
3450
3320
  let addressBlurTimer = null;
3451
3321
  let skipNextAddressBlurSync = false;
@@ -3456,22 +3326,6 @@ const AddressBar = (props) => {
3456
3326
  const tabId = activeTabId2();
3457
3327
  return tabId ? getSecurityState(tabId) : void 0;
3458
3328
  });
3459
- const agentPresence = createMemo(() => getAgentPresence(runtimeState2(), now2()));
3460
- const agentStatusMessage = createMemo(() => getLatestAgentStatusMessage(runtimeState2(), now2()));
3461
- const agentStatusKey = createMemo(() => {
3462
- const message = agentStatusMessage();
3463
- if (!message) return null;
3464
- return `${agentPresence()}:${message}`;
3465
- });
3466
- const showAgentStatusBadge = createMemo(() => {
3467
- const key = agentStatusKey();
3468
- return !!key && dismissedAgentStatusKey() !== key;
3469
- });
3470
- createEffect(() => {
3471
- if (!agentStatusKey()) {
3472
- setDismissedAgentStatusKey(null);
3473
- }
3474
- });
3475
3329
  const pendingApprovalCount = createMemo(() => runtimeState2().supervisor.pendingApprovals.length);
3476
3330
  const searchEnginePreset = createMemo(() => {
3477
3331
  const engine = searchEngine();
@@ -3719,7 +3573,7 @@ const AddressBar = (props) => {
3719
3573
  };
3720
3574
  const formatSectionLabel = (section) => section === "title" ? "Title" : section === "headings" ? "Headings" : "Content";
3721
3575
  return (() => {
3722
- var _el$ = _tmpl$17$4(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling, _el$11 = _el$2.nextSibling, _el$12 = _el$11.firstChild, _el$13 = _el$12.firstChild, _el$36 = _el$11.nextSibling, _el$37 = _el$36.firstChild, _el$38 = _el$37.firstChild;
3576
+ var _el$ = _tmpl$16$4(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling, _el$11 = _el$2.nextSibling, _el$12 = _el$11.firstChild, _el$13 = _el$12.firstChild, _el$32 = _el$11.nextSibling, _el$33 = _el$32.firstChild, _el$34 = _el$33.firstChild;
3723
3577
  addEventListener(_el$3, "click", goBack, true);
3724
3578
  addEventListener(_el$4, "click", goForward, true);
3725
3579
  addEventListener(_el$5, "click", reload, true);
@@ -3739,9 +3593,9 @@ const AddressBar = (props) => {
3739
3593
  insert(_el$8, createComponent(Switch, {
3740
3594
  get fallback() {
3741
3595
  return (() => {
3742
- var _el$49 = _tmpl$18$4();
3743
- _el$49.firstChild;
3744
- return _el$49;
3596
+ var _el$45 = _tmpl$17$4();
3597
+ _el$45.firstChild;
3598
+ return _el$45;
3745
3599
  })();
3746
3600
  },
3747
3601
  get children() {
@@ -3819,75 +3673,49 @@ const AddressBar = (props) => {
3819
3673
  return memo(() => !!showSuggestions())() && suggestions().length > 0;
3820
3674
  },
3821
3675
  get children() {
3822
- var _el$14 = _tmpl$5$g();
3676
+ var _el$14 = _tmpl$5$f();
3823
3677
  insert(_el$14, createComponent(For, {
3824
3678
  get each() {
3825
3679
  return suggestions();
3826
3680
  },
3827
3681
  children: (item, i) => (() => {
3828
- var _el$51 = _tmpl$19$4(), _el$52 = _el$51.firstChild, _el$53 = _el$52.nextSibling, _el$54 = _el$53.firstChild, _el$55 = _el$54.nextSibling;
3829
- _el$51.addEventListener("mouseenter", () => setSelectedIndex(i()));
3830
- _el$51.$$mousedown = (e) => {
3682
+ var _el$47 = _tmpl$18$4(), _el$48 = _el$47.firstChild, _el$49 = _el$48.nextSibling, _el$50 = _el$49.firstChild, _el$51 = _el$50.nextSibling;
3683
+ _el$47.addEventListener("mouseenter", () => setSelectedIndex(i()));
3684
+ _el$47.$$mousedown = (e) => {
3831
3685
  e.preventDefault();
3832
3686
  selectSuggestion(item.url);
3833
3687
  };
3834
- insert(_el$52, (() => {
3688
+ insert(_el$48, (() => {
3835
3689
  var _c$ = memo(() => item.source === "bookmark");
3836
3690
  return () => _c$() ? "★" : item.source === "search" ? "⌕" : "◌";
3837
3691
  })());
3838
- insert(_el$54, () => item.title || item.url);
3839
- insert(_el$55, () => item.subtitle || item.url);
3692
+ insert(_el$50, () => item.title || item.url);
3693
+ insert(_el$51, () => item.subtitle || item.url);
3840
3694
  createRenderEffect((_p$) => {
3841
- var _v$12 = `address-autocomplete-${i()}`, _v$13 = `autocomplete-item ${selectedIndex() === i() ? "selected" : ""}`, _v$14 = selectedIndex() === i();
3842
- _v$12 !== _p$.e && setAttribute(_el$51, "id", _p$.e = _v$12);
3843
- _v$13 !== _p$.t && className(_el$51, _p$.t = _v$13);
3844
- _v$14 !== _p$.a && setAttribute(_el$51, "aria-selected", _p$.a = _v$14);
3695
+ var _v$10 = `address-autocomplete-${i()}`, _v$11 = `autocomplete-item ${selectedIndex() === i() ? "selected" : ""}`, _v$12 = selectedIndex() === i();
3696
+ _v$10 !== _p$.e && setAttribute(_el$47, "id", _p$.e = _v$10);
3697
+ _v$11 !== _p$.t && className(_el$47, _p$.t = _v$11);
3698
+ _v$12 !== _p$.a && setAttribute(_el$47, "aria-selected", _p$.a = _v$12);
3845
3699
  return _p$;
3846
3700
  }, {
3847
3701
  e: void 0,
3848
3702
  t: void 0,
3849
3703
  a: void 0
3850
3704
  });
3851
- return _el$51;
3705
+ return _el$47;
3852
3706
  })()
3853
3707
  }));
3854
3708
  return _el$14;
3855
3709
  }
3856
3710
  }), null);
3857
- insert(_el$11, createComponent(Show, {
3858
- get when() {
3859
- return !isPrivateWindow && showAgentStatusBadge();
3860
- },
3861
- get children() {
3862
- var _el$15 = _tmpl$6$f(), _el$16 = _el$15.firstChild, _el$17 = _el$16.nextSibling, _el$18 = _el$17.nextSibling;
3863
- insert(_el$17, agentStatusMessage);
3864
- _el$18.$$click = (event) => {
3865
- event.stopPropagation();
3866
- setDismissedAgentStatusKey(agentStatusKey());
3867
- };
3868
- insert(_el$18, createComponent(x_default, {
3869
- size: 12
3870
- }));
3871
- createRenderEffect((_p$) => {
3872
- var _v$3 = `agent-status-badge ${agentPresence()}`, _v$4 = agentStatusMessage() || "Agent is using the browser";
3873
- _v$3 !== _p$.e && className(_el$15, _p$.e = _v$3);
3874
- _v$4 !== _p$.t && setAttribute(_el$15, "title", _p$.t = _v$4);
3875
- return _p$;
3876
- }, {
3877
- e: void 0,
3878
- t: void 0
3879
- });
3880
- return _el$15;
3881
- }
3882
- }), null);
3883
3711
  insert(_el$11, createComponent(Show, {
3884
3712
  get when() {
3885
3713
  return pageDiff();
3886
3714
  },
3887
3715
  get children() {
3888
- var _el$19 = _tmpl$7$d();
3889
- _el$19.$$click = () => void openDiffTimeline();
3890
- return _el$19;
3716
+ var _el$15 = _tmpl$6$e();
3717
+ _el$15.$$click = () => void openDiffTimeline();
3718
+ return _el$15;
3891
3719
  }
3892
3720
  }), null);
3893
3721
  insert(_el$, createComponent(Show, {
@@ -3895,245 +3723,245 @@ const AddressBar = (props) => {
3895
3723
  return memo(() => !!pageDiff())() && diffExpanded();
3896
3724
  },
3897
3725
  get children() {
3898
- var _el$20 = _tmpl$0$6(), _el$21 = _el$20.firstChild, _el$22 = _el$21.firstChild, _el$23 = _el$22.firstChild, _el$24 = _el$23.nextSibling;
3899
- _el$24.firstChild;
3900
- var _el$31 = _el$22.nextSibling, _el$32 = _el$31.firstChild, _el$33 = _el$32.nextSibling;
3901
- insert(_el$24, () => formatRelativeTime(pageDiff().oldSnapshot.capturedAt), null);
3902
- insert(_el$22, createComponent(Show, {
3726
+ var _el$16 = _tmpl$9$8(), _el$17 = _el$16.firstChild, _el$18 = _el$17.firstChild, _el$19 = _el$18.firstChild, _el$20 = _el$19.nextSibling;
3727
+ _el$20.firstChild;
3728
+ var _el$27 = _el$18.nextSibling, _el$28 = _el$27.firstChild, _el$29 = _el$28.nextSibling;
3729
+ insert(_el$20, () => formatRelativeTime(pageDiff().oldSnapshot.capturedAt), null);
3730
+ insert(_el$18, createComponent(Show, {
3903
3731
  get when() {
3904
3732
  return memo(() => !!((pageDiff().burstCount || 0) > 1 && pageDiff().firstDetectedAt))() && pageDiff().lastDetectedAt;
3905
3733
  },
3906
3734
  get children() {
3907
- var _el$26 = _tmpl$8$9(), _el$27 = _el$26.firstChild, _el$30 = _el$27.nextSibling;
3908
- _el$30.nextSibling;
3909
- insert(_el$26, () => pageDiff().burstCount, _el$30);
3910
- insert(_el$26, () => formatElapsedTime(pageDiff().firstDetectedAt, pageDiff().lastDetectedAt), null);
3911
- return _el$26;
3735
+ var _el$22 = _tmpl$7$c(), _el$23 = _el$22.firstChild, _el$26 = _el$23.nextSibling;
3736
+ _el$26.nextSibling;
3737
+ insert(_el$22, () => pageDiff().burstCount, _el$26);
3738
+ insert(_el$22, () => formatElapsedTime(pageDiff().firstDetectedAt, pageDiff().lastDetectedAt), null);
3739
+ return _el$22;
3912
3740
  }
3913
3741
  }), null);
3914
- _el$32.$$click = () => void openDiffTimeline();
3915
- _el$33.$$click = () => setDiffExpanded(false);
3916
- insert(_el$20, createComponent(Show, {
3742
+ _el$28.$$click = () => void openDiffTimeline();
3743
+ _el$29.$$click = () => setDiffExpanded(false);
3744
+ insert(_el$16, createComponent(Show, {
3917
3745
  get when() {
3918
3746
  return memo(() => !!pageDiff().recentBursts?.length)() && (pageDiff().recentBursts?.length || 0) > 1;
3919
3747
  },
3920
3748
  get children() {
3921
- var _el$34 = _tmpl$9$8();
3922
- _el$34.firstChild;
3923
- insert(_el$34, createComponent(For, {
3749
+ var _el$30 = _tmpl$8$9();
3750
+ _el$30.firstChild;
3751
+ insert(_el$30, createComponent(For, {
3924
3752
  get each() {
3925
3753
  return pageDiff().recentBursts;
3926
3754
  },
3927
3755
  children: (burst, i) => (() => {
3928
- var _el$56 = _tmpl$20$4(), _el$57 = _el$56.firstChild, _el$58 = _el$57.nextSibling;
3929
- insert(_el$57, (() => {
3756
+ var _el$52 = _tmpl$19$4(), _el$53 = _el$52.firstChild, _el$54 = _el$53.nextSibling;
3757
+ insert(_el$53, (() => {
3930
3758
  var _c$2 = memo(() => i() === 0);
3931
3759
  return () => _c$2() ? "Latest" : formatRelativeTime(burst.detectedAt);
3932
3760
  })());
3933
- insert(_el$58, createComponent(For, {
3761
+ insert(_el$54, createComponent(For, {
3934
3762
  get each() {
3935
3763
  return parseDiffSummaryParts(burst.summary);
3936
3764
  },
3937
3765
  children: (part) => (() => {
3938
- var _el$59 = _tmpl$22$4(), _el$61 = _el$59.firstChild;
3939
- insert(_el$59, createComponent(Show, {
3766
+ var _el$55 = _tmpl$21$4(), _el$57 = _el$55.firstChild;
3767
+ insert(_el$55, createComponent(Show, {
3940
3768
  get when() {
3941
3769
  return part.section;
3942
3770
  },
3943
3771
  get children() {
3944
- var _el$60 = _tmpl$21$4();
3945
- insert(_el$60, () => part.section);
3946
- return _el$60;
3772
+ var _el$56 = _tmpl$20$4();
3773
+ insert(_el$56, () => part.section);
3774
+ return _el$56;
3947
3775
  }
3948
- }), _el$61);
3949
- insert(_el$61, () => part.text);
3950
- return _el$59;
3776
+ }), _el$57);
3777
+ insert(_el$57, () => part.text);
3778
+ return _el$55;
3951
3779
  })()
3952
3780
  }));
3953
- createRenderEffect(() => _el$56.classList.toggle("latest", !!(i() === 0)));
3954
- return _el$56;
3781
+ createRenderEffect(() => _el$52.classList.toggle("latest", !!(i() === 0)));
3782
+ return _el$52;
3955
3783
  })()
3956
3784
  }), null);
3957
- return _el$34;
3785
+ return _el$30;
3958
3786
  }
3959
3787
  }), null);
3960
- insert(_el$20, createComponent(For, {
3788
+ insert(_el$16, createComponent(For, {
3961
3789
  get each() {
3962
3790
  return pageDiff().changes;
3963
3791
  },
3964
3792
  children: (change) => (() => {
3965
- var _el$62 = _tmpl$28$3(), _el$63 = _el$62.firstChild, _el$64 = _el$63.firstChild, _el$65 = _el$64.firstChild, _el$66 = _el$65.nextSibling, _el$67 = _el$64.nextSibling;
3966
- insert(_el$65, () => getChangeKindLabel(change.kind));
3967
- insert(_el$66, () => formatSectionLabel(change.section));
3968
- insert(_el$67, () => change.summary);
3969
- insert(_el$62, createComponent(Show, {
3793
+ var _el$58 = _tmpl$27$3(), _el$59 = _el$58.firstChild, _el$60 = _el$59.firstChild, _el$61 = _el$60.firstChild, _el$62 = _el$61.nextSibling, _el$63 = _el$60.nextSibling;
3794
+ insert(_el$61, () => getChangeKindLabel(change.kind));
3795
+ insert(_el$62, () => formatSectionLabel(change.section));
3796
+ insert(_el$63, () => change.summary);
3797
+ insert(_el$58, createComponent(Show, {
3970
3798
  get when() {
3971
3799
  return change.before || change.after;
3972
3800
  },
3973
3801
  get children() {
3974
- var _el$68 = _tmpl$25$3();
3975
- insert(_el$68, createComponent(Show, {
3802
+ var _el$64 = _tmpl$24$4();
3803
+ insert(_el$64, createComponent(Show, {
3976
3804
  get when() {
3977
3805
  return change.before;
3978
3806
  },
3979
3807
  get children() {
3980
- var _el$69 = _tmpl$23$4(), _el$70 = _el$69.firstChild, _el$71 = _el$70.nextSibling;
3981
- insert(_el$71, () => change.before);
3982
- return _el$69;
3808
+ var _el$65 = _tmpl$22$4(), _el$66 = _el$65.firstChild, _el$67 = _el$66.nextSibling;
3809
+ insert(_el$67, () => change.before);
3810
+ return _el$65;
3983
3811
  }
3984
3812
  }), null);
3985
- insert(_el$68, createComponent(Show, {
3813
+ insert(_el$64, createComponent(Show, {
3986
3814
  get when() {
3987
3815
  return change.after;
3988
3816
  },
3989
3817
  get children() {
3990
- var _el$72 = _tmpl$24$4(), _el$73 = _el$72.firstChild, _el$74 = _el$73.nextSibling;
3991
- insert(_el$74, () => change.after);
3992
- return _el$72;
3818
+ var _el$68 = _tmpl$23$4(), _el$69 = _el$68.firstChild, _el$70 = _el$69.nextSibling;
3819
+ insert(_el$70, () => change.after);
3820
+ return _el$68;
3993
3821
  }
3994
3822
  }), null);
3995
- return _el$68;
3823
+ return _el$64;
3996
3824
  }
3997
3825
  }), null);
3998
- insert(_el$62, createComponent(Show, {
3826
+ insert(_el$58, createComponent(Show, {
3999
3827
  get when() {
4000
3828
  return change.addedItems?.length;
4001
3829
  },
4002
3830
  get children() {
4003
- var _el$75 = _tmpl$26$3(), _el$76 = _el$75.firstChild, _el$77 = _el$76.nextSibling;
4004
- insert(_el$77, createComponent(For, {
3831
+ var _el$71 = _tmpl$25$3(), _el$72 = _el$71.firstChild, _el$73 = _el$72.nextSibling;
3832
+ insert(_el$73, createComponent(For, {
4005
3833
  get each() {
4006
3834
  return change.addedItems;
4007
3835
  },
4008
3836
  children: (item) => (() => {
4009
- var _el$81 = _tmpl$29$3();
4010
- insert(_el$81, item);
4011
- return _el$81;
3837
+ var _el$77 = _tmpl$28$3();
3838
+ insert(_el$77, item);
3839
+ return _el$77;
4012
3840
  })()
4013
3841
  }));
4014
- return _el$75;
3842
+ return _el$71;
4015
3843
  }
4016
3844
  }), null);
4017
- insert(_el$62, createComponent(Show, {
3845
+ insert(_el$58, createComponent(Show, {
4018
3846
  get when() {
4019
3847
  return change.removedItems?.length;
4020
3848
  },
4021
3849
  get children() {
4022
- var _el$78 = _tmpl$27$3(), _el$79 = _el$78.firstChild, _el$80 = _el$79.nextSibling;
4023
- insert(_el$80, createComponent(For, {
3850
+ var _el$74 = _tmpl$26$3(), _el$75 = _el$74.firstChild, _el$76 = _el$75.nextSibling;
3851
+ insert(_el$76, createComponent(For, {
4024
3852
  get each() {
4025
3853
  return change.removedItems;
4026
3854
  },
4027
3855
  children: (item) => (() => {
4028
- var _el$82 = _tmpl$29$3();
4029
- insert(_el$82, item);
4030
- return _el$82;
3856
+ var _el$78 = _tmpl$28$3();
3857
+ insert(_el$78, item);
3858
+ return _el$78;
4031
3859
  })()
4032
3860
  }));
4033
- return _el$78;
3861
+ return _el$74;
4034
3862
  }
4035
3863
  }), null);
4036
- createRenderEffect(() => className(_el$62, `page-diff-item page-diff-${change.kind}`));
4037
- return _el$62;
3864
+ createRenderEffect(() => className(_el$58, `page-diff-item page-diff-${change.kind}`));
3865
+ return _el$58;
4038
3866
  })()
4039
3867
  }), null);
4040
- return _el$20;
3868
+ return _el$16;
4041
3869
  }
4042
- }), _el$36);
4043
- _el$37.$$click = async () => {
3870
+ }), _el$32);
3871
+ _el$33.$$click = async () => {
4044
3872
  const id = activeTabId2();
4045
3873
  if (!id) return;
4046
3874
  await toggleAdBlock(id);
4047
3875
  };
4048
- insert(_el$38, createComponent(Show, {
3876
+ insert(_el$34, createComponent(Show, {
4049
3877
  get when() {
4050
3878
  return activeTab()?.adBlockingEnabled;
4051
3879
  },
4052
3880
  get children() {
4053
- return _tmpl$1$6();
3881
+ return _tmpl$0$6();
4054
3882
  }
4055
3883
  }), null);
4056
- insert(_el$38, createComponent(Show, {
3884
+ insert(_el$34, createComponent(Show, {
4057
3885
  get when() {
4058
3886
  return !activeTab()?.adBlockingEnabled;
4059
3887
  },
4060
3888
  get children() {
4061
- return [_tmpl$1$6(), _tmpl$10$6()];
3889
+ return [_tmpl$0$6(), _tmpl$1$6()];
4062
3890
  }
4063
3891
  }), null);
4064
- insert(_el$36, createComponent(Show, {
3892
+ insert(_el$32, createComponent(Show, {
4065
3893
  when: !isPrivateWindow,
4066
3894
  get children() {
4067
- var _el$42 = _tmpl$11$6();
4068
- _el$42.$$click = () => window.vessel.content.toggleReader();
4069
- createRenderEffect(() => _el$42.classList.toggle("active", !!activeTab()?.isReaderMode));
4070
- return _el$42;
3895
+ var _el$38 = _tmpl$10$6();
3896
+ _el$38.$$click = () => window.vessel.content.toggleReader();
3897
+ createRenderEffect(() => _el$38.classList.toggle("active", !!activeTab()?.isReaderMode));
3898
+ return _el$38;
4071
3899
  }
4072
3900
  }), null);
4073
- insert(_el$36, createComponent(Show, {
3901
+ insert(_el$32, createComponent(Show, {
4074
3902
  when: !isPrivateWindow,
4075
3903
  get children() {
4076
- var _el$43 = _tmpl$12$6();
4077
- addEventListener(_el$43, "click", toggleDevTools, true);
4078
- createRenderEffect(() => _el$43.classList.toggle("active", !!devtoolsPanelOpen2()));
4079
- return _el$43;
3904
+ var _el$39 = _tmpl$11$6();
3905
+ addEventListener(_el$39, "click", toggleDevTools, true);
3906
+ createRenderEffect(() => _el$39.classList.toggle("active", !!devtoolsPanelOpen2()));
3907
+ return _el$39;
4080
3908
  }
4081
3909
  }), null);
4082
- insert(_el$36, createComponent(Show, {
3910
+ insert(_el$32, createComponent(Show, {
4083
3911
  when: !isPrivateWindow,
4084
3912
  get children() {
4085
- var _el$44 = _tmpl$14$5();
4086
- _el$44.firstChild;
4087
- addEventListener(_el$44, "click", toggleSidebar, true);
4088
- insert(_el$44, createComponent(Show, {
3913
+ var _el$40 = _tmpl$13$5();
3914
+ _el$40.firstChild;
3915
+ addEventListener(_el$40, "click", toggleSidebar, true);
3916
+ insert(_el$40, createComponent(Show, {
4089
3917
  get when() {
4090
3918
  return pendingApprovalCount() > 0;
4091
3919
  },
4092
3920
  get children() {
4093
- var _el$46 = _tmpl$13$5();
4094
- insert(_el$46, pendingApprovalCount);
4095
- createRenderEffect(() => setAttribute(_el$46, "aria-label", `${pendingApprovalCount()} pending`));
4096
- return _el$46;
3921
+ var _el$42 = _tmpl$12$6();
3922
+ insert(_el$42, pendingApprovalCount);
3923
+ createRenderEffect(() => setAttribute(_el$42, "aria-label", `${pendingApprovalCount()} pending`));
3924
+ return _el$42;
4097
3925
  }
4098
3926
  }), null);
4099
3927
  createRenderEffect((_p$) => {
4100
- var _v$5 = !!(pendingApprovalCount() > 0), _v$6 = pendingApprovalCount() > 0 ? `AI Sidebar — ${pendingApprovalCount()} pending approval${pendingApprovalCount() > 1 ? "s" : ""}` : "AI Sidebar (Ctrl+Shift+L)";
4101
- _v$5 !== _p$.e && _el$44.classList.toggle("has-approvals", _p$.e = _v$5);
4102
- _v$6 !== _p$.t && setAttribute(_el$44, "title", _p$.t = _v$6);
3928
+ var _v$3 = !!(pendingApprovalCount() > 0), _v$4 = pendingApprovalCount() > 0 ? `AI Sidebar — ${pendingApprovalCount()} pending approval${pendingApprovalCount() > 1 ? "s" : ""}` : "AI Sidebar (Ctrl+Shift+L)";
3929
+ _v$3 !== _p$.e && _el$40.classList.toggle("has-approvals", _p$.e = _v$3);
3930
+ _v$4 !== _p$.t && setAttribute(_el$40, "title", _p$.t = _v$4);
4103
3931
  return _p$;
4104
3932
  }, {
4105
3933
  e: void 0,
4106
3934
  t: void 0
4107
3935
  });
4108
- return _el$44;
3936
+ return _el$40;
4109
3937
  }
4110
3938
  }), null);
4111
- insert(_el$36, createComponent(Show, {
3939
+ insert(_el$32, createComponent(Show, {
4112
3940
  when: !isPrivateWindow,
4113
3941
  get children() {
4114
3942
  return [(() => {
4115
- var _el$47 = _tmpl$15$5();
4116
- addEventListener(_el$47, "click", props.onClearData, true);
4117
- insert(_el$47, createComponent(trash_2_default, {
3943
+ var _el$43 = _tmpl$14$5();
3944
+ addEventListener(_el$43, "click", props.onClearData, true);
3945
+ insert(_el$43, createComponent(trash_2_default, {
4118
3946
  size: 14
4119
3947
  }));
4120
- return _el$47;
3948
+ return _el$43;
4121
3949
  })(), (() => {
4122
- var _el$48 = _tmpl$16$4();
4123
- addEventListener(_el$48, "click", openSettings, true);
4124
- return _el$48;
3950
+ var _el$44 = _tmpl$15$5();
3951
+ addEventListener(_el$44, "click", openSettings, true);
3952
+ return _el$44;
4125
3953
  })()];
4126
3954
  }
4127
3955
  }), null);
4128
3956
  createRenderEffect((_p$) => {
4129
- var _v$7 = !activeTab()?.canGoBack, _v$8 = !activeTab()?.canGoForward, _v$9 = showSuggestions() && suggestions().length > 0, _v$0 = selectedIndex() >= 0 ? `address-autocomplete-${selectedIndex()}` : void 0, _v$1 = !!activeTab()?.adBlockingEnabled, _v$10 = !activeTab()?.adBlockingEnabled, _v$11 = activeTab()?.adBlockingEnabled ? "Ad Block: On (click to disable)" : "Ad Block: Off (click to enable)";
4130
- _v$7 !== _p$.e && (_el$3.disabled = _p$.e = _v$7);
4131
- _v$8 !== _p$.t && (_el$4.disabled = _p$.t = _v$8);
4132
- _v$9 !== _p$.a && setAttribute(_el$13, "aria-expanded", _p$.a = _v$9);
4133
- _v$0 !== _p$.o && setAttribute(_el$13, "aria-activedescendant", _p$.o = _v$0);
4134
- _v$1 !== _p$.i && _el$37.classList.toggle("active", _p$.i = _v$1);
4135
- _v$10 !== _p$.n && _el$37.classList.toggle("nav-btn-muted", _p$.n = _v$10);
4136
- _v$11 !== _p$.s && setAttribute(_el$37, "title", _p$.s = _v$11);
3957
+ var _v$5 = !activeTab()?.canGoBack, _v$6 = !activeTab()?.canGoForward, _v$7 = showSuggestions() && suggestions().length > 0, _v$8 = selectedIndex() >= 0 ? `address-autocomplete-${selectedIndex()}` : void 0, _v$9 = !!activeTab()?.adBlockingEnabled, _v$0 = !activeTab()?.adBlockingEnabled, _v$1 = activeTab()?.adBlockingEnabled ? "Ad Block: On (click to disable)" : "Ad Block: Off (click to enable)";
3958
+ _v$5 !== _p$.e && (_el$3.disabled = _p$.e = _v$5);
3959
+ _v$6 !== _p$.t && (_el$4.disabled = _p$.t = _v$6);
3960
+ _v$7 !== _p$.a && setAttribute(_el$13, "aria-expanded", _p$.a = _v$7);
3961
+ _v$8 !== _p$.o && setAttribute(_el$13, "aria-activedescendant", _p$.o = _v$8);
3962
+ _v$9 !== _p$.i && _el$33.classList.toggle("active", _p$.i = _v$9);
3963
+ _v$0 !== _p$.n && _el$33.classList.toggle("nav-btn-muted", _p$.n = _v$0);
3964
+ _v$1 !== _p$.s && setAttribute(_el$33, "title", _p$.s = _v$1);
4137
3965
  return _p$;
4138
3966
  }, {
4139
3967
  e: void 0,
@@ -4276,7 +4104,7 @@ const HighlightNotifications = (props) => {
4276
4104
  });
4277
4105
  };
4278
4106
  delegateEvents(["click"]);
4279
- var _tmpl$$m = /* @__PURE__ */ template(`<div class=download-toast-stack aria-live=polite>`), _tmpl$2$m = /* @__PURE__ */ template(`<span class=download-toast-done>&#10003;`), _tmpl$3$j = /* @__PURE__ */ template(`<span class=download-toast-failed>!`), _tmpl$4$i = /* @__PURE__ */ template(`<div class=download-toast-bar-track><div class=download-toast-bar-fill>`), _tmpl$5$f = /* @__PURE__ */ template(`<div class=download-toast-size>`), _tmpl$6$e = /* @__PURE__ */ template(`<div class="download-toast-size download-toast-size-done"> downloaded`), _tmpl$7$c = /* @__PURE__ */ template(`<div class=download-toast role=status><div class=download-toast-header><span class=download-toast-filename>`);
4107
+ var _tmpl$$m = /* @__PURE__ */ template(`<div class=download-toast-stack aria-live=polite>`), _tmpl$2$m = /* @__PURE__ */ template(`<span class=download-toast-done>&#10003;`), _tmpl$3$j = /* @__PURE__ */ template(`<span class=download-toast-failed>!`), _tmpl$4$i = /* @__PURE__ */ template(`<div class=download-toast-bar-track><div class=download-toast-bar-fill>`), _tmpl$5$e = /* @__PURE__ */ template(`<div class=download-toast-size>`), _tmpl$6$d = /* @__PURE__ */ template(`<div class="download-toast-size download-toast-size-done"> downloaded`), _tmpl$7$b = /* @__PURE__ */ template(`<div class=download-toast role=status><div class=download-toast-header><span class=download-toast-filename>`);
4280
4108
  const TOAST_DONE_DURATION_MS = 4200;
4281
4109
  const TOAST_EXIT_MS = 300;
4282
4110
  function formatBytes$1(bytes) {
@@ -4373,7 +4201,7 @@ const DownloadToast = () => {
4373
4201
  return downloads();
4374
4202
  },
4375
4203
  children: (dl) => (() => {
4376
- var _el$2 = _tmpl$7$c(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild;
4204
+ var _el$2 = _tmpl$7$b(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild;
4377
4205
  insert(_el$4, () => dl.filename);
4378
4206
  insert(_el$3, createComponent(Show, {
4379
4207
  get when() {
@@ -4401,7 +4229,7 @@ const DownloadToast = () => {
4401
4229
  createRenderEffect((_$p) => setStyleProperty(_el$8, "width", `${progressPercent(dl)}%`));
4402
4230
  return _el$7;
4403
4231
  })(), (() => {
4404
- var _el$9 = _tmpl$5$f();
4232
+ var _el$9 = _tmpl$5$e();
4405
4233
  insert(_el$9, () => formatBytes$1(dl.receivedBytes), null);
4406
4234
  insert(_el$9, createComponent(Show, {
4407
4235
  get when() {
@@ -4420,7 +4248,7 @@ const DownloadToast = () => {
4420
4248
  return dl.state === "completed";
4421
4249
  },
4422
4250
  get children() {
4423
- var _el$0 = _tmpl$6$e(), _el$1 = _el$0.firstChild;
4251
+ var _el$0 = _tmpl$6$d(), _el$1 = _el$0.firstChild;
4424
4252
  insert(_el$0, () => formatBytes$1(dl.receivedBytes), _el$1);
4425
4253
  return _el$0;
4426
4254
  }
@@ -4609,7 +4437,7 @@ const FindBar = () => {
4609
4437
  });
4610
4438
  };
4611
4439
  delegateEvents(["input", "click"]);
4612
- var _tmpl$$j = /* @__PURE__ */ template(`<div class=flow-progress>`), _tmpl$2$j = /* @__PURE__ */ template(`<div class=flow-progress-hint>Last: `), _tmpl$3$h = /* @__PURE__ */ template(`<div class=flow-progress-hint>Next: `), _tmpl$4$g = /* @__PURE__ */ template(`<div class=flow-progress-section><div class=flow-progress-header><span class=flow-progress-goal></span><span class=flow-progress-pct>%</span></div><div class=flow-progress-bar-track><div class=flow-progress-bar-fill></div></div><div class=flow-steps>`), _tmpl$5$e = /* @__PURE__ */ template(`<div><span class=flow-step-dot></span><span class=flow-step-label>`);
4440
+ var _tmpl$$j = /* @__PURE__ */ template(`<div class=flow-progress>`), _tmpl$2$j = /* @__PURE__ */ template(`<div class=flow-progress-hint>Last: `), _tmpl$3$h = /* @__PURE__ */ template(`<div class=flow-progress-hint>Next: `), _tmpl$4$g = /* @__PURE__ */ template(`<div class=flow-progress-section><div class=flow-progress-header><span class=flow-progress-goal></span><span class=flow-progress-pct>%</span></div><div class=flow-progress-bar-track><div class=flow-progress-bar-fill></div></div><div class=flow-steps>`), _tmpl$5$d = /* @__PURE__ */ template(`<div><span class=flow-step-dot></span><span class=flow-step-label>`);
4613
4441
  const FlowProgress = () => {
4614
4442
  const {
4615
4443
  runtimeState: runtimeState2
@@ -4654,7 +4482,7 @@ const FlowProgress = () => {
4654
4482
  return t().steps;
4655
4483
  },
4656
4484
  children: (step) => (() => {
4657
- var _el$12 = _tmpl$5$e(), _el$13 = _el$12.firstChild, _el$14 = _el$13.nextSibling;
4485
+ var _el$12 = _tmpl$5$d(), _el$13 = _el$12.firstChild, _el$14 = _el$13.nextSibling;
4658
4486
  insert(_el$14, () => step.label);
4659
4487
  createRenderEffect(() => className(_el$12, `flow-step ${stepStatusClass(step.status)}`));
4660
4488
  return _el$12;
@@ -4699,7 +4527,7 @@ const FlowProgress = () => {
4699
4527
  return f().steps;
4700
4528
  },
4701
4529
  children: (step) => (() => {
4702
- var _el$23 = _tmpl$5$e(), _el$24 = _el$23.firstChild, _el$25 = _el$24.nextSibling;
4530
+ var _el$23 = _tmpl$5$d(), _el$24 = _el$23.firstChild, _el$25 = _el$24.nextSibling;
4703
4531
  insert(_el$25, () => step.label);
4704
4532
  createRenderEffect(() => className(_el$23, `flow-step ${stepStatusClass(step.status)}`));
4705
4533
  return _el$23;
@@ -4740,19 +4568,66 @@ function formatTime(iso, options) {
4740
4568
  ...options?.includeSeconds && { second: "2-digit" }
4741
4569
  });
4742
4570
  }
4743
- var _tmpl$$i = /* @__PURE__ */ template(`<div class=agent-summary-hud>`), _tmpl$2$i = /* @__PURE__ */ template(`<span class=agent-transcript-live><span class=agent-transcript-live-dot aria-hidden=true></span>Live`), _tmpl$3$g = /* @__PURE__ */ template(`<div class=agent-transcript-list>`), _tmpl$4$f = /* @__PURE__ */ template(`<aside class=agent-transcript-dock><div class=agent-transcript-header><div class=agent-transcript-title-row><span class=agent-transcript-title>Agent Timeline</span></div><div class=agent-transcript-actions><button class=agent-transcript-icon></button><button class=agent-transcript-icon data-tooltip=Hide>×`), _tmpl$5$d = /* @__PURE__ */ template(`<span class=agent-summary-live-dot aria-hidden=true>`), _tmpl$6$d = /* @__PURE__ */ template(`<span class=agent-summary-text>: `), _tmpl$7$b = /* @__PURE__ */ template(`<article><div class=agent-transcript-meta><span class=agent-transcript-badge></span><span class=agent-transcript-time></span></div><div class=agent-transcript-text>`);
4571
+ function formatAgentActionName(name) {
4572
+ return name.split(/[_-]+/).filter(Boolean).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join(" ");
4573
+ }
4574
+ function summarizeAgentAction(action) {
4575
+ if (action.status === "waiting-approval") {
4576
+ return action.argsSummary || "Waiting for approval";
4577
+ }
4578
+ if (action.status === "running") {
4579
+ return action.argsSummary || "Running";
4580
+ }
4581
+ if (action.status === "failed") {
4582
+ return action.error || action.resultSummary || "Action failed";
4583
+ }
4584
+ return action.resultSummary || action.argsSummary || "Completed";
4585
+ }
4586
+ function formatAgentTimelineDuration(durationMs) {
4587
+ if (!durationMs || durationMs < 1) return null;
4588
+ if (durationMs < 1e3) return `${Math.round(durationMs)}ms`;
4589
+ return `${(durationMs / 1e3).toFixed(durationMs < 1e4 ? 1 : 0)}s`;
4590
+ }
4591
+ function buildAgentTimelineItems(state, limit = 12) {
4592
+ const transcriptItems = state.transcript.map((entry) => ({
4593
+ id: `transcript:${entry.id}`,
4594
+ type: "transcript",
4595
+ timestamp: entry.updatedAt,
4596
+ status: entry.status,
4597
+ kind: entry.kind,
4598
+ label: entry.title || entry.kind,
4599
+ detail: entry.text
4600
+ }));
4601
+ const actionItems = state.actions.map((action) => ({
4602
+ id: `action:${action.id}`,
4603
+ type: "action",
4604
+ timestamp: action.finishedAt || action.startedAt,
4605
+ status: action.status,
4606
+ kind: "action",
4607
+ label: formatAgentActionName(action.name),
4608
+ detail: summarizeAgentAction(action),
4609
+ durationMs: action.durationMs
4610
+ }));
4611
+ return [...transcriptItems, ...actionItems].sort(
4612
+ (left, right) => new Date(right.timestamp).getTime() - new Date(left.timestamp).getTime()
4613
+ ).slice(0, limit);
4614
+ }
4615
+ function isLiveAgentTimelineItem(item) {
4616
+ return item.status === "streaming" || item.status === "running";
4617
+ }
4618
+ var _tmpl$$i = /* @__PURE__ */ template(`<span class=agent-transcript-live><span class=agent-transcript-live-dot aria-hidden=true></span>Live`), _tmpl$2$i = /* @__PURE__ */ template(`<div class=agent-transcript-list>`), _tmpl$3$g = /* @__PURE__ */ template(`<aside class=agent-transcript-dock><div class=agent-transcript-header><div class=agent-transcript-title-row><span class=agent-transcript-title>Agent Timeline</span></div><div class=agent-transcript-actions><button class=agent-transcript-icon></button><button class=agent-transcript-icon data-tooltip=Hide>×`), _tmpl$4$f = /* @__PURE__ */ template(`<article><div class=agent-transcript-meta><span class=agent-transcript-badge></span><span class=agent-transcript-time></span></div><div class=agent-transcript-text>`);
4744
4619
  const AgentTranscriptDock = () => {
4745
4620
  const {
4746
4621
  runtimeState: runtimeState2
4747
4622
  } = useRuntime();
4748
- const [mode, setMode] = createSignal("summary");
4623
+ const [mode, setMode] = createSignal("off");
4749
4624
  const [collapsed, setCollapsed] = createSignal(false);
4750
4625
  onMount(() => {
4751
4626
  void window.vessel.settings.get().then((settings) => {
4752
- setMode(settings.agentTranscriptMode ?? "summary");
4627
+ setMode(settings.agentTranscriptMode ?? "off");
4753
4628
  });
4754
4629
  const unsubscribe2 = window.vessel.settings.onUpdate((settings) => {
4755
- setMode(settings.agentTranscriptMode ?? "summary");
4630
+ setMode(settings.agentTranscriptMode ?? "off");
4756
4631
  });
4757
4632
  onCleanup(unsubscribe2);
4758
4633
  });
@@ -4762,120 +4637,79 @@ const AgentTranscriptDock = () => {
4762
4637
  setMode("off");
4763
4638
  await window.vessel.settings.set("agentTranscriptMode", "off");
4764
4639
  };
4765
- const isSummary = createMemo(() => mode() === "summary");
4766
- const latestEntry = createMemo(() => {
4767
- const entries2 = timelineItems();
4768
- return entries2.length > 0 ? entries2[0] : null;
4769
- });
4770
4640
  return createComponent(Show, {
4771
4641
  get when() {
4772
- return memo(() => mode() !== "off")() && timelineItems().length > 0;
4642
+ return memo(() => mode() === "full")() && timelineItems().length > 0;
4773
4643
  },
4774
4644
  get children() {
4775
- return [createComponent(Show, {
4645
+ var _el$ = _tmpl$3$g(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild;
4646
+ _el$3.firstChild;
4647
+ var _el$6 = _el$3.nextSibling, _el$7 = _el$6.firstChild, _el$8 = _el$7.nextSibling;
4648
+ insert(_el$3, createComponent(Show, {
4776
4649
  get when() {
4777
- return isSummary();
4650
+ return hasStreamingEntry();
4778
4651
  },
4779
4652
  get children() {
4780
- var _el$ = _tmpl$$i();
4781
- insert(_el$, createComponent(Show, {
4782
- get when() {
4783
- return latestEntry();
4784
- },
4785
- children: (entry) => [createComponent(Show, {
4786
- get when() {
4787
- return hasStreamingEntry();
4788
- },
4789
- get children() {
4790
- return _tmpl$5$d();
4791
- }
4792
- }), (() => {
4793
- var _el$10 = _tmpl$6$d(), _el$11 = _el$10.firstChild;
4794
- insert(_el$10, () => entry().label, _el$11);
4795
- insert(_el$10, (() => {
4796
- var _c$ = memo(() => entry().detail.length > 80);
4797
- return () => _c$() ? entry().detail.slice(0, 77) + "..." : entry().detail;
4798
- })(), null);
4799
- return _el$10;
4800
- })()]
4801
- }));
4802
- return _el$;
4653
+ return _tmpl$$i();
4803
4654
  }
4804
- }), createComponent(Show, {
4655
+ }), null);
4656
+ _el$7.$$click = () => setCollapsed((value) => !value);
4657
+ insert(_el$7, () => collapsed() ? "▴" : "▾");
4658
+ _el$8.$$click = () => void hideDock();
4659
+ insert(_el$, createComponent(Show, {
4805
4660
  get when() {
4806
- return !isSummary();
4661
+ return !collapsed();
4807
4662
  },
4808
4663
  get children() {
4809
- var _el$2 = _tmpl$4$f(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild;
4810
- _el$4.firstChild;
4811
- var _el$7 = _el$4.nextSibling, _el$8 = _el$7.firstChild, _el$9 = _el$8.nextSibling;
4812
- insert(_el$4, createComponent(Show, {
4813
- get when() {
4814
- return hasStreamingEntry();
4815
- },
4816
- get children() {
4817
- return _tmpl$2$i();
4818
- }
4819
- }), null);
4820
- _el$8.$$click = () => setCollapsed((value) => !value);
4821
- insert(_el$8, () => collapsed() ? "▴" : "▾");
4822
- _el$9.$$click = () => void hideDock();
4823
- insert(_el$2, createComponent(Show, {
4824
- get when() {
4825
- return !collapsed();
4664
+ var _el$9 = _tmpl$2$i();
4665
+ use((el) => useScrollFade(el), _el$9);
4666
+ insert(_el$9, createComponent(For, {
4667
+ get each() {
4668
+ return timelineItems();
4826
4669
  },
4827
- get children() {
4828
- var _el$0 = _tmpl$3$g();
4829
- use((el) => useScrollFade(el), _el$0);
4830
- insert(_el$0, createComponent(For, {
4831
- get each() {
4832
- return timelineItems();
4833
- },
4834
- children: (entry) => {
4835
- const duration = () => entry.type === "action" ? formatAgentTimelineDuration(entry.durationMs) : null;
4836
- return (() => {
4837
- var _el$13 = _tmpl$7$b(), _el$14 = _el$13.firstChild, _el$15 = _el$14.firstChild, _el$16 = _el$15.nextSibling, _el$17 = _el$14.nextSibling;
4838
- insert(_el$15, () => entry.label);
4839
- insert(_el$16, () => formatTime(entry.timestamp), null);
4840
- insert(_el$16, createComponent(Show, {
4841
- get when() {
4842
- return duration();
4843
- },
4844
- children: (value) => [" · ", memo(value)]
4845
- }), null);
4846
- insert(_el$17, () => entry.detail);
4847
- createRenderEffect((_p$) => {
4848
- var _v$3 = `agent-transcript-entry ${entry.kind}`, _v$4 = !!isLiveAgentTimelineItem(entry), _v$5 = !!(entry.status === "failed"), _v$6 = !!(entry.status === "waiting-approval");
4849
- _v$3 !== _p$.e && className(_el$13, _p$.e = _v$3);
4850
- _v$4 !== _p$.t && _el$13.classList.toggle("streaming", _p$.t = _v$4);
4851
- _v$5 !== _p$.a && _el$13.classList.toggle("failed", _p$.a = _v$5);
4852
- _v$6 !== _p$.o && _el$13.classList.toggle("waiting-approval", _p$.o = _v$6);
4853
- return _p$;
4854
- }, {
4855
- e: void 0,
4856
- t: void 0,
4857
- a: void 0,
4858
- o: void 0
4859
- });
4860
- return _el$13;
4861
- })();
4862
- }
4863
- }));
4864
- return _el$0;
4670
+ children: (entry) => {
4671
+ const duration = () => entry.type === "action" ? formatAgentTimelineDuration(entry.durationMs) : null;
4672
+ return (() => {
4673
+ var _el$0 = _tmpl$4$f(), _el$1 = _el$0.firstChild, _el$10 = _el$1.firstChild, _el$11 = _el$10.nextSibling, _el$12 = _el$1.nextSibling;
4674
+ insert(_el$10, () => entry.label);
4675
+ insert(_el$11, () => formatTime(entry.timestamp), null);
4676
+ insert(_el$11, createComponent(Show, {
4677
+ get when() {
4678
+ return duration();
4679
+ },
4680
+ children: (value) => [" · ", memo(value)]
4681
+ }), null);
4682
+ insert(_el$12, () => entry.detail);
4683
+ createRenderEffect((_p$) => {
4684
+ var _v$3 = `agent-transcript-entry ${entry.kind}`, _v$4 = !!isLiveAgentTimelineItem(entry), _v$5 = !!(entry.status === "failed"), _v$6 = !!(entry.status === "waiting-approval");
4685
+ _v$3 !== _p$.e && className(_el$0, _p$.e = _v$3);
4686
+ _v$4 !== _p$.t && _el$0.classList.toggle("streaming", _p$.t = _v$4);
4687
+ _v$5 !== _p$.a && _el$0.classList.toggle("failed", _p$.a = _v$5);
4688
+ _v$6 !== _p$.o && _el$0.classList.toggle("waiting-approval", _p$.o = _v$6);
4689
+ return _p$;
4690
+ }, {
4691
+ e: void 0,
4692
+ t: void 0,
4693
+ a: void 0,
4694
+ o: void 0
4695
+ });
4696
+ return _el$0;
4697
+ })();
4865
4698
  }
4866
- }), null);
4867
- createRenderEffect((_p$) => {
4868
- var _v$ = !!collapsed(), _v$2 = collapsed() ? "Expand" : "Collapse";
4869
- _v$ !== _p$.e && _el$2.classList.toggle("collapsed", _p$.e = _v$);
4870
- _v$2 !== _p$.t && setAttribute(_el$8, "data-tooltip", _p$.t = _v$2);
4871
- return _p$;
4872
- }, {
4873
- e: void 0,
4874
- t: void 0
4875
- });
4876
- return _el$2;
4699
+ }));
4700
+ return _el$9;
4877
4701
  }
4878
- })];
4702
+ }), null);
4703
+ createRenderEffect((_p$) => {
4704
+ var _v$ = !!collapsed(), _v$2 = collapsed() ? "Expand" : "Collapse";
4705
+ _v$ !== _p$.e && _el$.classList.toggle("collapsed", _p$.e = _v$);
4706
+ _v$2 !== _p$.t && setAttribute(_el$7, "data-tooltip", _p$.t = _v$2);
4707
+ return _p$;
4708
+ }, {
4709
+ e: void 0,
4710
+ t: void 0
4711
+ });
4712
+ return _el$;
4879
4713
  }
4880
4714
  });
4881
4715
  };
@@ -12022,7 +11856,7 @@ const SettingsGeneral = (props) => {
12022
11856
  })();
12023
11857
  };
12024
11858
  delegateEvents(["click", "input"]);
12025
- var _tmpl$$7 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--error)>`), _tmpl$2$7 = /* @__PURE__ */ template(`<div class=settings-callout><div class=settings-callout-title>Start With Free AI</div><p class=settings-callout-copy>Connect OpenRouter and Vessel will use the free model router automatically.</p><div class=settings-inline-actions style=margin-top:12px><button type=button class=settings-secondary-btn>`), _tmpl$3$6 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-provider>Provider</label><select id=chat-provider class="settings-input settings-select">`), _tmpl$4$5 = /* @__PURE__ */ template(`<div style=display:flex;align-items:center;gap:8px><span style=width:8px;height:8px;border-radius:50%;background:var(--success);display:inline-block></span><span>Connected as `), _tmpl$5$5 = /* @__PURE__ */ template(`<p class=settings-hint><button type=button class=settings-link-btn>Disconnect`), _tmpl$6$5 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label>Account`), _tmpl$7$4 = /* @__PURE__ */ template(`<span class=settings-label-optional> (optional)`), _tmpl$8$3 = /* @__PURE__ */ template(`<p class=settings-hint>An API key is already stored securely for this provider. Leave this blank to keep it, or enter a new key to replace it.`), _tmpl$9$2 = /* @__PURE__ */ template(`<p class=settings-hint>If your endpoint requires authentication, enter the API key or bearer token here.`), _tmpl$0$1 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-api-key>API Key</label><input id=chat-api-key class=settings-input type=password>`), _tmpl$1$1 = /* @__PURE__ */ template(`<select id=chat-model class="settings-input settings-select"style=flex:1>`), _tmpl$10$1 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--error)>Could not fetch models — check your API key and connection.`), _tmpl$11$1 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-model>Model</label><div style=display:flex;gap:6px;align-items:center><button type=button class=settings-refresh-btn title="Refresh model list">↺`), _tmpl$12$1 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-base-url>Base URL</label><input id=chat-base-url class=settings-input>`), _tmpl$13$1 = /* @__PURE__ */ template(`<p class=settings-hint>Vessel auto-detects the active model from your configured <code>llama-server</code> base URL. For agent loops, run <code>llama-server</code> with <code>--ctx-size 16384</code> minimum and <code>32768</code> recommended.`), _tmpl$14$1 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-reasoning-effort>Reasoning Level</label><select id=chat-reasoning-effort class="settings-input settings-select"></select><p class=settings-hint>Applies to providers and models that expose reasoning controls. Off requests no reasoning where supported and otherwise leaves the model at its normal behavior; Max requests the strongest supported reasoning tier.`), _tmpl$15$1 = /* @__PURE__ */ template(`<input id=max-tool-iterations class=settings-input type=number min=10 max=1000 placeholder=200>`), _tmpl$16 = /* @__PURE__ */ template(`<div class=settings-category-panel><div class=settings-callout><div class=settings-callout-title>External Agent Control</div><p class=settings-callout-copy>Vessel is configured to run under an external harness such as Hermes Agent or OpenClaw. Provider and model selection are not configured inside Vessel.</p></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Enable Chat Assistant</span></label><p class=settings-hint>Adds a Chat tab to the sidebar for conversing with an AI provider of your choice.</p></div><div class=settings-field><label class=settings-label for=mcp-port>MCP Port</label><input id=mcp-port class=settings-input placeholder=3100><p class=settings-hint>External harnesses connect to Vessel at <code>http://127.0.0.1:&lt;port&gt;/mcp</code>. Changing this value restarts the MCP server immediately.</p><div class=settings-inline-actions><button type=button class=settings-secondary-btn>Regenerate MCP token</button></div></div><div class=settings-field><label class=settings-label for=max-tool-iterations>Max Tool Iterations</label><p class=settings-hint></p></div><div class=settings-field><label class=settings-label for=agent-transcript-mode>Agent Transcript Monitor</label><select id=agent-transcript-mode class="settings-input settings-select"><option value=off>Off</option><option value=summary>Summary HUD</option><option value=full>Full transcript</option></select><p class=settings-hint>Controls the in-browser transcript monitor when an external harness publishes reasoning or status updates into Vessel via the <code>vessel_publish_transcript</code> MCP tool. Summary HUD shows a compact 2-line status surface; Full transcript shows the recent entry list.</p></div><div class=settings-field><label class=settings-label for=obsidian-vault-path>Obsidian Vault Path</label><input id=obsidian-vault-path class=settings-input placeholder=/home/you/Documents/MyVault><p class=settings-hint>Optional. When set, Vessel memory tools can write markdown notes into this vault for research breadcrumbs and summaries.`), _tmpl$17 = /* @__PURE__ */ template(`<option>`), _tmpl$18 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--accent-primary)> <button type=button class=settings-link-btn>Cancel`), _tmpl$19 = /* @__PURE__ */ template(`<div>`), _tmpl$20 = /* @__PURE__ */ template(`<button type=button class=settings-btn>Try Again`), _tmpl$21 = /* @__PURE__ */ template(`<div><button type=button class=settings-btn>Connect with ChatGPT</button><p class=settings-hint>Sign in with your ChatGPT Plus or Pro subscription. A browser tab will open where you'll authorize Vessel.`), _tmpl$22 = /* @__PURE__ */ template(`<input id=chat-model class=settings-input style=flex:1>`), _tmpl$23 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--accent-primary)>`), _tmpl$24 = /* @__PURE__ */ template(`<p class=settings-hint>`), _tmpl$25 = /* @__PURE__ */ template(`<div class="settings-input settings-input-disabled"title="Upgrade to Vessel Premium for unlimited tool iterations">50`), _tmpl$26 = /* @__PURE__ */ template(`<div class=settings-health-issues>`), _tmpl$27 = /* @__PURE__ */ template(`<div class=settings-health><div class=settings-callout-title>Runtime Health</div><p class=settings-hint>MCP status: <strong></strong> `), _tmpl$28 = /* @__PURE__ */ template(`<p class=settings-hint>Active endpoint: <code>`), _tmpl$29 = /* @__PURE__ */ template(`<div class=settings-health-issue><strong></strong><div>`);
11859
+ var _tmpl$$7 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--error)>`), _tmpl$2$7 = /* @__PURE__ */ template(`<div class=settings-callout><div class=settings-callout-title>Start With Free AI</div><p class=settings-callout-copy>Connect OpenRouter and Vessel will use the free model router automatically.</p><div class=settings-inline-actions style=margin-top:12px><button type=button class=settings-secondary-btn>`), _tmpl$3$6 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-provider>Provider</label><select id=chat-provider class="settings-input settings-select">`), _tmpl$4$5 = /* @__PURE__ */ template(`<div style=display:flex;align-items:center;gap:8px><span style=width:8px;height:8px;border-radius:50%;background:var(--success);display:inline-block></span><span>Connected as `), _tmpl$5$5 = /* @__PURE__ */ template(`<p class=settings-hint><button type=button class=settings-link-btn>Disconnect`), _tmpl$6$5 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label>Account`), _tmpl$7$4 = /* @__PURE__ */ template(`<span class=settings-label-optional> (optional)`), _tmpl$8$3 = /* @__PURE__ */ template(`<p class=settings-hint>An API key is already stored securely for this provider. Leave this blank to keep it, or enter a new key to replace it.`), _tmpl$9$2 = /* @__PURE__ */ template(`<p class=settings-hint>If your endpoint requires authentication, enter the API key or bearer token here.`), _tmpl$0$1 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-api-key>API Key</label><input id=chat-api-key class=settings-input type=password>`), _tmpl$1$1 = /* @__PURE__ */ template(`<select id=chat-model class="settings-input settings-select"style=flex:1>`), _tmpl$10$1 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--error)>Could not fetch models — check your API key and connection.`), _tmpl$11$1 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-model>Model</label><div style=display:flex;gap:6px;align-items:center><button type=button class=settings-refresh-btn title="Refresh model list">↺`), _tmpl$12$1 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-base-url>Base URL</label><input id=chat-base-url class=settings-input>`), _tmpl$13$1 = /* @__PURE__ */ template(`<p class=settings-hint>Vessel auto-detects the active model from your configured <code>llama-server</code> base URL. For agent loops, run <code>llama-server</code> with <code>--ctx-size 16384</code> minimum and <code>32768</code> recommended.`), _tmpl$14$1 = /* @__PURE__ */ template(`<div class=settings-field><label class=settings-label for=chat-reasoning-effort>Reasoning Level</label><select id=chat-reasoning-effort class="settings-input settings-select"></select><p class=settings-hint>Applies to providers and models that expose reasoning controls. Off requests no reasoning where supported and otherwise leaves the model at its normal behavior; Max requests the strongest supported reasoning tier.`), _tmpl$15$1 = /* @__PURE__ */ template(`<input id=max-tool-iterations class=settings-input type=number min=10 max=1000 placeholder=200>`), _tmpl$16 = /* @__PURE__ */ template(`<div class=settings-category-panel><div class=settings-callout><div class=settings-callout-title>External Agent Control</div><p class=settings-callout-copy>Vessel is configured to run under an external harness such as Hermes Agent or OpenClaw. Provider and model selection are not configured inside Vessel.</p></div><div class=settings-field><label class=settings-toggle><button type=button class=toggle-switch role=switch><span class=toggle-switch-thumb></span></button><span>Enable Chat Assistant</span></label><p class=settings-hint>Adds a Chat tab to the sidebar for conversing with an AI provider of your choice.</p></div><div class=settings-field><label class=settings-label for=mcp-port>MCP Port</label><input id=mcp-port class=settings-input placeholder=3100><p class=settings-hint>External harnesses connect to Vessel at <code>http://127.0.0.1:&lt;port&gt;/mcp</code>. Changing this value restarts the MCP server immediately.</p><div class=settings-inline-actions><button type=button class=settings-secondary-btn>Regenerate MCP token</button></div></div><div class=settings-field><label class=settings-label for=max-tool-iterations>Max Tool Iterations</label><p class=settings-hint></p></div><div class=settings-field><label class=settings-label for=agent-transcript-mode>Agent Transcript Monitor</label><select id=agent-transcript-mode class="settings-input settings-select"><option value=off>Off</option><option value=full>Full transcript</option></select><p class=settings-hint>Controls the in-browser transcript monitor when an external harness publishes reasoning or status updates into Vessel via the <code>vessel_publish_transcript</code> MCP tool. Full transcript shows the recent entry list.</p></div><div class=settings-field><label class=settings-label for=obsidian-vault-path>Obsidian Vault Path</label><input id=obsidian-vault-path class=settings-input placeholder=/home/you/Documents/MyVault><p class=settings-hint>Optional. When set, Vessel memory tools can write markdown notes into this vault for research breadcrumbs and summaries.`), _tmpl$17 = /* @__PURE__ */ template(`<option>`), _tmpl$18 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--accent-primary)> <button type=button class=settings-link-btn>Cancel`), _tmpl$19 = /* @__PURE__ */ template(`<div>`), _tmpl$20 = /* @__PURE__ */ template(`<button type=button class=settings-btn>Try Again`), _tmpl$21 = /* @__PURE__ */ template(`<div><button type=button class=settings-btn>Connect with ChatGPT</button><p class=settings-hint>Sign in with your ChatGPT Plus or Pro subscription. A browser tab will open where you'll authorize Vessel.`), _tmpl$22 = /* @__PURE__ */ template(`<input id=chat-model class=settings-input style=flex:1>`), _tmpl$23 = /* @__PURE__ */ template(`<p class=settings-hint style=color:var(--accent-primary)>`), _tmpl$24 = /* @__PURE__ */ template(`<p class=settings-hint>`), _tmpl$25 = /* @__PURE__ */ template(`<div class="settings-input settings-input-disabled"title="Upgrade to Vessel Premium for unlimited tool iterations">50`), _tmpl$26 = /* @__PURE__ */ template(`<div class=settings-health-issues>`), _tmpl$27 = /* @__PURE__ */ template(`<div class=settings-health><div class=settings-callout-title>Runtime Health</div><p class=settings-hint>MCP status: <strong></strong> `), _tmpl$28 = /* @__PURE__ */ template(`<p class=settings-hint>Active endpoint: <code>`), _tmpl$29 = /* @__PURE__ */ template(`<div class=settings-health-issue><strong></strong><div>`);
12026
11860
  const CHAT_PROVIDERS$1 = Object.values(PROVIDERS).map((p) => ({
12027
11861
  id: p.id,
12028
11862
  name: p.name,
@@ -13261,7 +13095,7 @@ const Settings = () => {
13261
13095
  const [obsidianVaultPath, setObsidianVaultPath] = createSignal("");
13262
13096
  const [mcpPort, setMcpPort] = createSignal("3100");
13263
13097
  const [maxToolIterations, setMaxToolIterations] = createSignal("200");
13264
- const [agentTranscriptMode, setAgentTranscriptMode] = createSignal("summary");
13098
+ const [agentTranscriptMode, setAgentTranscriptMode] = createSignal("off");
13265
13099
  const [health, setHealth] = createSignal(null);
13266
13100
  const [defaultUrl, setDefaultUrl] = createSignal("https://start.duckduckgo.com");
13267
13101
  const [defaultSearchEngine, setDefaultSearchEngine] = createSignal("duckduckgo");
@@ -13670,7 +13504,7 @@ const Settings = () => {
13670
13504
  setObsidianVaultPath(settings.obsidianVaultPath ?? "");
13671
13505
  setMcpPort(String(settings.mcpPort ?? 3100));
13672
13506
  setMaxToolIterations(String(settings.maxToolIterations ?? 200));
13673
- setAgentTranscriptMode(settings.agentTranscriptMode ?? "summary");
13507
+ setAgentTranscriptMode(settings.agentTranscriptMode ?? "off");
13674
13508
  setHealth(runtimeHealth);
13675
13509
  const cp = settings.chatProvider ?? null;
13676
13510
  setChatEnabled(cp !== null);