@quanta-intellect/vessel-browser 0.1.60 → 0.1.63

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.
@@ -1491,32 +1491,34 @@ const [activeTabId, setActiveTabId] = createSignal("");
1491
1491
  let initialized$4 = false;
1492
1492
  let initPromise$3 = null;
1493
1493
  let unsubscribeStateUpdate = null;
1494
+ async function doInit() {
1495
+ try {
1496
+ if (unsubscribeStateUpdate) {
1497
+ unsubscribeStateUpdate();
1498
+ unsubscribeStateUpdate = null;
1499
+ }
1500
+ unsubscribeStateUpdate = window.vessel.tabs.onStateUpdate(
1501
+ (newTabs, newActiveId) => {
1502
+ setTabs(newTabs);
1503
+ setActiveTabId(newActiveId);
1504
+ }
1505
+ );
1506
+ const initialState = await window.vessel.tabs.getState();
1507
+ setTabs(initialState.tabs);
1508
+ setActiveTabId(initialState.activeId);
1509
+ } catch (error) {
1510
+ initialized$4 = false;
1511
+ console.error("Failed to initialize tabs store", error);
1512
+ throw error;
1513
+ }
1514
+ }
1494
1515
  function init$4() {
1495
1516
  if (initPromise$3) return initPromise$3;
1496
1517
  if (initialized$4) return;
1497
1518
  initialized$4 = true;
1498
- initPromise$3 = (async () => {
1499
- try {
1500
- if (unsubscribeStateUpdate) {
1501
- unsubscribeStateUpdate();
1502
- unsubscribeStateUpdate = null;
1503
- }
1504
- unsubscribeStateUpdate = window.vessel.tabs.onStateUpdate(
1505
- (newTabs, newActiveId) => {
1506
- setTabs(newTabs);
1507
- setActiveTabId(newActiveId);
1508
- }
1509
- );
1510
- const initialState = await window.vessel.tabs.getState();
1511
- setTabs(initialState.tabs);
1512
- setActiveTabId(initialState.activeId);
1513
- } catch (error) {
1514
- initialized$4 = false;
1515
- console.error("Failed to initialize tabs store", error);
1516
- } finally {
1517
- initPromise$3 = null;
1518
- }
1519
- })();
1519
+ initPromise$3 = doInit().finally(() => {
1520
+ initPromise$3 = null;
1521
+ });
1520
1522
  return initPromise$3;
1521
1523
  }
1522
1524
  const patchTab = (id, patch) => {
@@ -1867,28 +1869,10 @@ const [focusMode, setFocusMode] = createSignal(false);
1867
1869
  const [commandBarOpen, setCommandBarOpen] = createSignal(false);
1868
1870
  const [settingsOpen, setSettingsOpen] = createSignal(false);
1869
1871
  const [devtoolsPanelOpen, setDevtoolsPanelOpen] = createSignal(false);
1870
- let pendingWidth = null;
1871
- let resizeInFlight = null;
1872
- async function flushResize() {
1873
- if (resizeInFlight) {
1874
- await resizeInFlight;
1875
- if (pendingWidth !== null) {
1876
- return flushResize();
1877
- }
1878
- return;
1879
- }
1880
- resizeInFlight = (async () => {
1881
- while (pendingWidth !== null) {
1882
- const nextWidth = pendingWidth;
1883
- pendingWidth = null;
1884
- await window.vessel.ui.resizeSidebar(nextWidth);
1885
- }
1886
- })();
1887
- try {
1888
- await resizeInFlight;
1889
- } finally {
1890
- resizeInFlight = null;
1891
- }
1872
+ let lastIpcTime = 0;
1873
+ const IPC_THROTTLE_MS = 8;
1874
+ function clampSidebarWidth(width) {
1875
+ return Math.max(MIN_SIDEBAR, Math.min(MAX_SIDEBAR, Math.round(width)));
1892
1876
  }
1893
1877
  function useUI() {
1894
1878
  return {
@@ -1904,17 +1888,18 @@ function useUI() {
1904
1888
  setSidebarWidth(result.width);
1905
1889
  },
1906
1890
  resizeSidebar: (width) => {
1907
- const clamped = Math.max(
1908
- MIN_SIDEBAR,
1909
- Math.min(MAX_SIDEBAR, Math.round(width))
1910
- );
1891
+ const clamped = clampSidebarWidth(width);
1911
1892
  setSidebarWidth(clamped);
1912
- pendingWidth = clamped;
1913
- void flushResize();
1893
+ const now2 = performance.now();
1894
+ if (now2 - lastIpcTime >= IPC_THROTTLE_MS) {
1895
+ lastIpcTime = now2;
1896
+ void window.vessel.ui.resizeSidebar(clamped);
1897
+ }
1914
1898
  },
1915
1899
  commitResize: async () => {
1916
- pendingWidth = sidebarWidth();
1917
- await flushResize();
1900
+ const finalWidth = clampSidebarWidth(sidebarWidth());
1901
+ lastIpcTime = performance.now();
1902
+ await window.vessel.ui.resizeSidebar(finalWidth);
1918
1903
  await window.vessel.ui.commitSidebarResize();
1919
1904
  },
1920
1905
  toggleFocusMode: async () => {
@@ -3533,7 +3518,16 @@ function useBookmarks() {
3533
3518
  void init();
3534
3519
  return {
3535
3520
  bookmarksState,
3536
- saveBookmark: (url, title, folderId, note) => window.vessel.bookmarks.saveBookmark(url, title, folderId, note),
3521
+ saveBookmark: (url, title, folderId, note, intent, expectedContent, keyFields, agentHints) => window.vessel.bookmarks.saveBookmark(
3522
+ url,
3523
+ title,
3524
+ folderId,
3525
+ note,
3526
+ intent,
3527
+ expectedContent,
3528
+ keyFields,
3529
+ agentHints
3530
+ ),
3537
3531
  removeBookmark: (id) => window.vessel.bookmarks.removeBookmark(id),
3538
3532
  createFolder: (name) => window.vessel.bookmarks.createFolder(name),
3539
3533
  createFolderWithSummary: (name, summary) => window.vessel.bookmarks.createFolderWithSummary(name, summary),
@@ -4981,7 +4975,9 @@ const FIELD_WEIGHTS = {
4981
4975
  note: 5,
4982
4976
  folder: 3,
4983
4977
  folderSummary: 2,
4984
- url: 1
4978
+ url: 1,
4979
+ intent: 4,
4980
+ expectedContent: 3
4985
4981
  };
4986
4982
  function normalizeBookmarkSearchText(value) {
4987
4983
  let normalized = value.toLowerCase();
@@ -5012,7 +5008,9 @@ function getBookmarkSearchMatch(args) {
5012
5008
  url: args.url,
5013
5009
  note: args.note,
5014
5010
  folder: args.folder,
5015
- folderSummary: args.folderSummary
5011
+ folderSummary: args.folderSummary,
5012
+ intent: args.intent,
5013
+ expectedContent: args.expectedContent
5016
5014
  };
5017
5015
  for (const field of Object.keys(values)) {
5018
5016
  if (!bookmarkFieldMatchesQuery(values[field], normalizedQuery, tokens)) {
@@ -6671,6 +6669,18 @@ ${contextBlock}` : contextBlock);
6671
6669
  const startX = e.screenX;
6672
6670
  const startWidth = sidebarWidth2();
6673
6671
  let finished = false;
6672
+ const state = {
6673
+ currentX: startX,
6674
+ rafId: null
6675
+ };
6676
+ const flushResizeUpdate = () => {
6677
+ state.rafId = null;
6678
+ if (finished) return;
6679
+ const totalDelta = startX - state.currentX;
6680
+ const targetWidth = startWidth + totalDelta;
6681
+ const newWidth = Math.max(240, Math.min(800, Math.round(targetWidth)));
6682
+ resizeSidebar(newWidth);
6683
+ };
6674
6684
  const clearPointerTracking = () => {
6675
6685
  window.removeEventListener("pointermove", onPointerMove);
6676
6686
  window.removeEventListener("pointerup", onPointerUp);
@@ -6681,14 +6691,25 @@ ${contextBlock}` : contextBlock);
6681
6691
  if (target.hasPointerCapture?.(e.pointerId)) {
6682
6692
  target.releasePointerCapture(e.pointerId);
6683
6693
  }
6694
+ if (state.rafId !== null) {
6695
+ cancelAnimationFrame(state.rafId);
6696
+ state.rafId = null;
6697
+ }
6684
6698
  };
6685
6699
  const onPointerMove = (ev) => {
6686
- const delta = startX - ev.screenX;
6687
- resizeSidebar(startWidth + delta);
6700
+ state.currentX = ev.screenX;
6701
+ if (state.rafId === null) {
6702
+ state.rafId = requestAnimationFrame(flushResizeUpdate);
6703
+ }
6688
6704
  };
6689
6705
  const finishResize = () => {
6690
6706
  if (finished) return;
6691
6707
  finished = true;
6708
+ if (state.rafId !== null) {
6709
+ cancelAnimationFrame(state.rafId);
6710
+ state.rafId = null;
6711
+ }
6712
+ flushResizeUpdate();
6692
6713
  setIsDragging(false);
6693
6714
  clearPointerTracking();
6694
6715
  document.body.style.cursor = "";
@@ -8066,9 +8087,9 @@ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><butt
8066
8087
  overscroll-behavior: contain;
8067
8088
  scrollbar-gutter: stable;
8068
8089
  box-shadow:
8069
- 0 4px 24px rgba(0, 0, 0, 0.2),
8070
- 0 24px 64px rgba(0, 0, 0, 0.3),
8071
- inset 0 1px 0 rgba(255, 255, 255, 0.04);
8090
+ 0 4px 24px var(--shadow-color),
8091
+ 0 24px 64px var(--shadow-color-strong),
8092
+ inset 0 1px 0 var(--inset-highlight);
8072
8093
  animation: command-bar-enter 350ms var(--ease-out-expo) both;
8073
8094
  }
8074
8095
  .command-bar-overlay.closing .settings-panel {
@@ -8085,8 +8106,8 @@ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><butt
8085
8106
  margin-bottom: 20px;
8086
8107
  padding: 14px;
8087
8108
  border-radius: var(--radius-md);
8088
- border: 1px solid rgba(224, 200, 120, 0.14);
8089
- background: rgba(224, 200, 120, 0.06);
8109
+ border: 1px solid color-mix(in srgb, var(--accent-primary) 14%, transparent);
8110
+ background: color-mix(in srgb, var(--accent-primary) 6%, transparent);
8090
8111
  }
8091
8112
  .settings-callout-title {
8092
8113
  font-size: 12px;
@@ -8103,9 +8124,9 @@ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><butt
8103
8124
  }
8104
8125
  .settings-premium-callout {
8105
8126
  background:
8106
- radial-gradient(circle at top right, rgba(196, 160, 90, 0.16), transparent 40%),
8107
- rgba(224, 200, 120, 0.06);
8108
- border-color: rgba(196, 160, 90, 0.22);
8127
+ radial-gradient(circle at top right, color-mix(in srgb, var(--accent-primary) 16%, transparent), transparent 40%),
8128
+ color-mix(in srgb, var(--accent-primary) 6%, transparent);
8129
+ border-color: color-mix(in srgb, var(--accent-primary) 22%, transparent);
8109
8130
  }
8110
8131
  .settings-premium-callout-actions {
8111
8132
  display: flex;
@@ -8121,7 +8142,7 @@ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><butt
8121
8142
  padding: 14px;
8122
8143
  border-radius: var(--radius-md);
8123
8144
  border: 1px solid var(--border-visible);
8124
- background: rgba(255, 255, 255, 0.015);
8145
+ background: var(--surface-glass);
8125
8146
  }
8126
8147
  .settings-health-issues {
8127
8148
  display: flex;
@@ -8134,16 +8155,16 @@ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><butt
8134
8155
  line-height: 1.5;
8135
8156
  padding: 10px 12px;
8136
8157
  border-radius: var(--radius-md);
8137
- border: 1px solid rgba(255, 255, 255, 0.06);
8158
+ border: 1px solid var(--border-glass);
8138
8159
  color: var(--text-secondary);
8139
8160
  }
8140
8161
  .settings-health-issue.warning {
8141
- border-color: rgba(240, 198, 54, 0.28);
8142
- background: rgba(240, 198, 54, 0.06);
8162
+ border-color: color-mix(in srgb, var(--accent-primary) 28%, transparent);
8163
+ background: color-mix(in srgb, var(--accent-primary) 6%, transparent);
8143
8164
  }
8144
8165
  .settings-health-issue.error {
8145
- border-color: rgba(255, 108, 91, 0.32);
8146
- background: rgba(255, 108, 91, 0.06);
8166
+ border-color: color-mix(in srgb, var(--status-error) 32%, transparent);
8167
+ background: color-mix(in srgb, var(--status-error) 6%, transparent);
8147
8168
  }
8148
8169
  .settings-label {
8149
8170
  display: block;
@@ -8184,7 +8205,7 @@ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><butt
8184
8205
  }
8185
8206
  .settings-input:focus {
8186
8207
  border-color: var(--accent-primary);
8187
- box-shadow: 0 0 0 2px rgba(196, 160, 90, 0.1);
8208
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent-primary) 10%, transparent);
8188
8209
  outline: none;
8189
8210
  }
8190
8211
  .settings-hint {
@@ -8213,8 +8234,8 @@ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><butt
8213
8234
  width: 36px;
8214
8235
  height: 20px;
8215
8236
  border-radius: 999px;
8216
- background: rgba(255, 255, 255, 0.1);
8217
- border: 1px solid rgba(255, 255, 255, 0.06);
8237
+ background: var(--surface-hover);
8238
+ border: 1px solid var(--border-glass);
8218
8239
  padding: 0;
8219
8240
  flex-shrink: 0;
8220
8241
  cursor: pointer;
@@ -8223,14 +8244,14 @@ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><butt
8223
8244
  border-color var(--duration-normal) var(--ease-in-out);
8224
8245
  }
8225
8246
  .toggle-switch:hover {
8226
- background: rgba(255, 255, 255, 0.14);
8247
+ background: var(--surface-active);
8227
8248
  }
8228
8249
  .toggle-switch.on {
8229
8250
  background: var(--accent-primary);
8230
8251
  border-color: transparent;
8231
8252
  }
8232
8253
  .toggle-switch.on:hover {
8233
- background: #d4b06a;
8254
+ background: color-mix(in srgb, var(--accent-primary) 85%, white);
8234
8255
  }
8235
8256
  .toggle-switch-thumb {
8236
8257
  position: absolute;
@@ -8240,7 +8261,7 @@ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><butt
8240
8261
  height: 14px;
8241
8262
  border-radius: 999px;
8242
8263
  background: var(--text-primary);
8243
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
8264
+ box-shadow: 0 1px 3px var(--shadow-color-strong);
8244
8265
  transition: transform var(--duration-normal) var(--ease-out-expo);
8245
8266
  pointer-events: none;
8246
8267
  }
@@ -8253,10 +8274,10 @@ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><butt
8253
8274
  line-height: 1.5;
8254
8275
  }
8255
8276
  .settings-status.success {
8256
- color: #84d19a;
8277
+ color: var(--status-success);
8257
8278
  }
8258
8279
  .settings-status.error {
8259
- color: #ff8e8e;
8280
+ color: var(--status-error);
8260
8281
  }
8261
8282
  .settings-save, .settings-close {
8262
8283
  height: 34px;
@@ -8273,9 +8294,9 @@ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><butt
8273
8294
  }
8274
8295
  .settings-save {
8275
8296
  background: var(--accent-primary);
8276
- color: white;
8297
+ color: var(--button-primary-fg);
8277
8298
  }
8278
- .settings-save:hover { background: #d4b06a; }
8299
+ .settings-save:hover { background: var(--button-primary-hover-bg); }
8279
8300
  .settings-close {
8280
8301
  background: var(--bg-tertiary);
8281
8302
  color: var(--text-secondary);
@@ -8366,11 +8387,11 @@ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><butt
8366
8387
  }
8367
8388
  .premium-btn-upgrade {
8368
8389
  background: var(--accent-primary);
8369
- color: white;
8390
+ color: var(--button-primary-fg);
8370
8391
  width: 100%;
8371
8392
  }
8372
8393
  .premium-btn-upgrade:hover {
8373
- background: #d4b06a;
8394
+ background: var(--button-primary-hover-bg);
8374
8395
  }
8375
8396
  .premium-btn-manage {
8376
8397
  background: var(--bg-tertiary);
@@ -8386,8 +8407,8 @@ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><butt
8386
8407
  display: inline-flex;
8387
8408
  align-items: center;
8388
8409
  gap: 6px;
8389
- background: rgba(240, 198, 54, 0.15);
8390
- color: #f0c636;
8410
+ background: color-mix(in srgb, var(--accent-primary) 15%, transparent);
8411
+ color: var(--accent-primary);
8391
8412
  font-size: 12px;
8392
8413
  font-weight: 600;
8393
8414
  padding: 4px 12px;
@@ -8406,7 +8427,7 @@ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><butt
8406
8427
  }
8407
8428
  .premium-btn-reset {
8408
8429
  background: transparent;
8409
- color: var(--text-tertiary, #71717a);
8430
+ color: var(--text-muted);
8410
8431
  border: 1px solid var(--border-subtle);
8411
8432
  font-size: 11px;
8412
8433
  padding: 0 12px;
@@ -8422,8 +8443,8 @@ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><butt
8422
8443
  margin-bottom: 20px;
8423
8444
  padding: 16px;
8424
8445
  border-radius: var(--radius-md);
8425
- border: 1px solid rgba(196, 160, 90, 0.25);
8426
- background: rgba(196, 160, 90, 0.08);
8446
+ border: 1px solid color-mix(in srgb, var(--accent-primary) 25%, transparent);
8447
+ background: color-mix(in srgb, var(--accent-primary) 8%, transparent);
8427
8448
  }
8428
8449
  .welcome-banner-header {
8429
8450
  display: flex;
@@ -8450,7 +8471,7 @@ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><butt
8450
8471
  justify-content: center;
8451
8472
  }
8452
8473
  .welcome-banner-dismiss:hover {
8453
- background: rgba(255, 255, 255, 0.08);
8474
+ background: var(--surface-hover);
8454
8475
  color: var(--text-primary);
8455
8476
  }
8456
8477
  .welcome-banner-text {
@@ -8478,8 +8499,8 @@ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><butt
8478
8499
  padding: 0 5px;
8479
8500
  font-size: 11px;
8480
8501
  font-family: var(--font-mono);
8481
- background: rgba(255, 255, 255, 0.08);
8482
- border: 1px solid rgba(255, 255, 255, 0.1);
8502
+ background: var(--kbd-bg);
8503
+ border: 1px solid var(--kbd-border);
8483
8504
  border-radius: 3px;
8484
8505
  color: var(--text-primary);
8485
8506
  }
@@ -8502,8 +8523,8 @@ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><butt
8502
8523
  display: inline-block;
8503
8524
  font-size: 10px;
8504
8525
  font-weight: 600;
8505
- color: #f0c636;
8506
- background: rgba(240, 198, 54, 0.15);
8526
+ color: var(--accent-primary);
8527
+ background: color-mix(in srgb, var(--accent-primary) 15%, transparent);
8507
8528
  padding: 1px 6px;
8508
8529
  border-radius: 4px;
8509
8530
  margin-left: 8px;
@@ -8552,7 +8573,7 @@ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><butt
8552
8573
  border-radius: 4px;
8553
8574
  background: transparent;
8554
8575
  border: none;
8555
- color: var(--text-tertiary, #71717a);
8576
+ color: var(--text-muted);
8556
8577
  font-size: 16px;
8557
8578
  cursor: pointer;
8558
8579
  display: flex;
@@ -8561,8 +8582,8 @@ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><butt
8561
8582
  transition: background var(--duration-fast), color var(--duration-fast);
8562
8583
  }
8563
8584
  .vault-entry-remove:hover {
8564
- background: rgba(255, 108, 91, 0.12);
8565
- color: #ff8e8e;
8585
+ background: color-mix(in srgb, var(--status-error) 12%, transparent);
8586
+ color: var(--status-error);
8566
8587
  }
8567
8588
  .vault-add-btn {
8568
8589
  height: 32px;
@@ -8586,7 +8607,7 @@ var _tmpl$$2 = /* @__PURE__ */ template(`<div class=welcome-banner-actions><butt
8586
8607
  flex-direction: column;
8587
8608
  gap: 8px;
8588
8609
  padding: 12px;
8589
- background: rgba(255, 255, 255, 0.02);
8610
+ background: var(--surface-glass);
8590
8611
  border: 1px solid var(--border-subtle);
8591
8612
  border-radius: var(--radius-md);
8592
8613
  }
@@ -9922,9 +9943,9 @@ var _tmpl$$1 = /* @__PURE__ */ template(`<div class=command-bar-overlay><div cla
9922
9943
  border-radius: 14px;
9923
9944
  padding: 24px;
9924
9945
  box-shadow:
9925
- 0 4px 24px rgba(0, 0, 0, 0.2),
9926
- 0 24px 64px rgba(0, 0, 0, 0.3),
9927
- inset 0 1px 0 rgba(255, 255, 255, 0.04);
9946
+ 0 4px 24px var(--shadow-color),
9947
+ 0 24px 64px var(--shadow-color-strong),
9948
+ inset 0 1px 0 var(--inset-highlight);
9928
9949
  animation: command-bar-enter 350ms var(--ease-out-expo) both;
9929
9950
  }
9930
9951
  .command-bar-overlay.closing .keyboard-help {
@@ -9949,8 +9970,8 @@ var _tmpl$$1 = /* @__PURE__ */ template(`<div class=command-bar-overlay><div cla
9949
9970
  padding: 0;
9950
9971
  }
9951
9972
  .keyboard-help-close kbd {
9952
- background: rgba(255, 255, 255, 0.06);
9953
- border: 1px solid rgba(255, 255, 255, 0.08);
9973
+ background: var(--kbd-bg);
9974
+ border: 1px solid var(--kbd-border);
9954
9975
  padding: 2px 8px;
9955
9976
  border-radius: 4px;
9956
9977
  font-size: 11px;
@@ -9958,7 +9979,7 @@ var _tmpl$$1 = /* @__PURE__ */ template(`<div class=command-bar-overlay><div cla
9958
9979
  font-family: var(--font-ui);
9959
9980
  }
9960
9981
  .keyboard-help-close:hover kbd {
9961
- background: rgba(255, 255, 255, 0.1);
9982
+ background: var(--surface-hover);
9962
9983
  color: var(--text-secondary);
9963
9984
  }
9964
9985
  .keyboard-help-grid {
@@ -9981,11 +10002,11 @@ var _tmpl$$1 = /* @__PURE__ */ template(`<div class=command-bar-overlay><div cla
9981
10002
  font-size: 11px;
9982
10003
  font-family: var(--font-mono);
9983
10004
  font-weight: 500;
9984
- background: rgba(255, 255, 255, 0.06);
9985
- border: 1px solid rgba(255, 255, 255, 0.08);
10005
+ background: var(--kbd-bg);
10006
+ border: 1px solid var(--kbd-border);
9986
10007
  border-radius: 4px;
9987
10008
  color: var(--text-primary);
9988
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
10009
+ box-shadow: 0 1px 2px var(--shadow-color);
9989
10010
  }
9990
10011
  .keyboard-help-plus {
9991
10012
  font-size: 10px;
@@ -10166,18 +10187,26 @@ const App = () => {
10166
10187
  });
10167
10188
  }
10168
10189
  };
10169
- const applyTheme = async () => {
10170
- const s = await window.vessel.settings.get();
10171
- const theme = s.theme ?? "dark";
10190
+ const applyTheme = (theme) => {
10172
10191
  document.documentElement.setAttribute("data-theme", theme);
10173
10192
  try {
10174
10193
  localStorage.setItem("vessel:theme", theme);
10175
10194
  } catch {
10176
10195
  }
10177
10196
  };
10197
+ const loadAndApplyTheme = async () => {
10198
+ const s = await window.vessel.settings.get();
10199
+ applyTheme(s.theme ?? "dark");
10200
+ };
10178
10201
  onMount(() => {
10179
- void applyTheme();
10202
+ void loadAndApplyTheme();
10180
10203
  window.vessel.ui.rendererReady(view);
10204
+ const cleanupSettings = window.vessel.settings.onUpdate((settings) => {
10205
+ applyTheme(settings.theme ?? "dark");
10206
+ });
10207
+ onCleanup(() => {
10208
+ cleanupSettings();
10209
+ });
10181
10210
  if (view !== "chrome") return;
10182
10211
  const cleanupKeys = setupKeybindings({
10183
10212
  openCommandBar,
@@ -10196,13 +10225,9 @@ const App = () => {
10196
10225
  toggleKeyboardHelp: () => setKeyboardHelpOpen((v) => !v)
10197
10226
  });
10198
10227
  const cleanupCapture = window.vessel.highlights.onCaptureResult(showHighlightResult);
10199
- const cleanupSettings = window.vessel.settings.onUpdate(() => {
10200
- void applyTheme();
10201
- });
10202
10228
  onCleanup(() => {
10203
10229
  cleanupKeys();
10204
10230
  cleanupCapture();
10205
- cleanupSettings();
10206
10231
  });
10207
10232
  });
10208
10233
  if (view === "sidebar") {
@@ -5,8 +5,8 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self'; font-src 'self' data:;" />
7
7
  <title>Vessel</title>
8
- <script type="module" crossorigin src="./assets/index-NKk_lpQh.js"></script>
9
- <link rel="stylesheet" crossorigin href="./assets/index-CBe7EN_l.css">
8
+ <script type="module" crossorigin src="./assets/index-B2vPgkX2.js"></script>
9
+ <link rel="stylesheet" crossorigin href="./assets/index-4OgPv5GF.css">
10
10
  </head>
11
11
  <body>
12
12
  <div id="root"></div>
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@quanta-intellect/vessel-browser",
3
3
  "mcpName": "io.github.unmodeled-tyler/vessel-browser",
4
- "version": "0.1.60",
4
+ "version": "0.1.63",
5
5
  "description": "AI-native web browser runtime for autonomous agents with human supervision",
6
6
  "main": "./out/main/index.js",
7
7
  "bin": {