@quanta-intellect/vessel-browser 0.1.137 → 0.1.140

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.
@@ -2262,6 +2262,7 @@ function notifyPageDiffActivity() {
2262
2262
  function startPageDiffObserver() {
2263
2263
  if (typeof MutationObserver === "undefined") return;
2264
2264
  if (!document.documentElement) return;
2265
+ if (isDocumentViewerPage()) return;
2265
2266
  lastPageDiffSignature = getPageDiffSignature();
2266
2267
  const observer = new MutationObserver((mutations) => {
2267
2268
  if (mutations.every((mutation) => shouldIgnorePageDiffMutation(mutation))) {
@@ -2311,6 +2312,23 @@ function startPageDiffObserver() {
2311
2312
  }
2312
2313
  });
2313
2314
  }
2315
+ function isDocumentViewerPage() {
2316
+ const contentType = document.contentType?.toLowerCase() || "";
2317
+ if (contentType.includes("application/pdf")) return true;
2318
+ try {
2319
+ const url = new URL(window.location.href);
2320
+ const pathname = decodeURIComponent(url.pathname).toLowerCase();
2321
+ if (/\.(pdf|epub|mobi|cbz|cbr)$/.test(pathname)) return true;
2322
+ const host = url.hostname.toLowerCase().replace(/^www\./, "");
2323
+ if (host === "archive.org" && /^\/(details|stream|download)\//.test(pathname)) {
2324
+ return true;
2325
+ }
2326
+ } catch {
2327
+ }
2328
+ return !!document.querySelector(
2329
+ "#BookReader, ia-bookreader, bookreader, embed[type='application/pdf'], object[type='application/pdf']"
2330
+ );
2331
+ }
2314
2332
  const MAX_SHADOW_HOSTS = 150;
2315
2333
  const MAX_SHADOW_DEPTH = 5;
2316
2334
  const MAX_WALK_ELEMENTS = 1e4;
@@ -32,6 +32,8 @@ const AutofillChannels = {
32
32
  const AutomationChannels = {
33
33
  AUTOMATION_GET_INSTALLED: "automation:get-installed",
34
34
  AUTOMATION_INSTALL_FROM_FILE: "automation:install-from-file",
35
+ AUTOMATION_CREATE_FROM_TEXT: "automation:create-from-text",
36
+ AUTOMATION_UPDATE_FROM_TEXT: "automation:update-from-text",
35
37
  AUTOMATION_UNINSTALL: "automation:uninstall",
36
38
  AUTOMATION_ACTIVITY_START: "automation:activity-start",
37
39
  AUTOMATION_ACTIVITY_CHUNK: "automation:activity-chunk",
@@ -576,6 +578,8 @@ const api = {
576
578
  automation: {
577
579
  getInstalled: () => electron.ipcRenderer.invoke(Channels.AUTOMATION_GET_INSTALLED),
578
580
  installFromFile: () => electron.ipcRenderer.invoke(Channels.AUTOMATION_INSTALL_FROM_FILE),
581
+ createFromText: (source) => electron.ipcRenderer.invoke(Channels.AUTOMATION_CREATE_FROM_TEXT, source),
582
+ updateFromText: (id, source) => electron.ipcRenderer.invoke(Channels.AUTOMATION_UPDATE_FROM_TEXT, id, source),
579
583
  uninstall: (id) => electron.ipcRenderer.invoke(Channels.AUTOMATION_UNINSTALL, id)
580
584
  },
581
585
  schedule: {
@@ -3763,6 +3763,17 @@
3763
3763
  background: var(--surface-active);
3764
3764
  }
3765
3765
 
3766
+ .tool-chip-failed {
3767
+ border-left-color: color-mix(in srgb, var(--error) 60%, transparent);
3768
+ background: color-mix(in srgb, var(--error) 8%, var(--surface-hover));
3769
+ }
3770
+
3771
+ .tool-chip-failed .tool-chip-icon,
3772
+ .tool-chip-failed .tool-chip-args {
3773
+ color: color-mix(in srgb, var(--error) 80%, var(--text-muted));
3774
+ opacity: 1;
3775
+ }
3776
+
3766
3777
  .tool-chip-icon {
3767
3778
  flex-shrink: 0;
3768
3779
  width: 16px;
@@ -4209,8 +4220,155 @@
4209
4220
  text-overflow: ellipsis;
4210
4221
  }
4211
4222
 
4212
- .sidebar-input {
4223
+ .chat-command-error {
4224
+ display: flex;
4225
+ align-items: center;
4226
+ justify-content: space-between;
4227
+ gap: 8px;
4228
+ margin: 10px 14px 0;
4229
+ padding: 7px 10px;
4230
+ border-radius: var(--radius-sm);
4231
+ background: color-mix(in srgb, var(--status-warning) 10%, transparent);
4232
+ border: 1px solid color-mix(in srgb, var(--status-warning) 25%, transparent);
4233
+ color: var(--text-secondary);
4234
+ font-size: 11px;
4235
+ line-height: 1.4;
4236
+ }
4237
+
4238
+ .chat-command-error-dismiss {
4239
+ flex-shrink: 0;
4240
+ color: var(--text-muted);
4241
+ font-size: 14px;
4242
+ line-height: 1;
4243
+ padding: 0 2px;
4244
+ }
4245
+
4246
+ .chat-command-error-dismiss:hover {
4247
+ color: var(--text-primary);
4248
+ }
4249
+
4250
+ .chat-skill-suggestions {
4251
+ display: flex;
4252
+ flex-direction: column;
4253
+ gap: 4px;
4254
+ margin: 10px 14px 0;
4255
+ padding: 5px;
4256
+ border-radius: var(--radius-md);
4257
+ border: 1px solid var(--border-glass);
4258
+ background: var(--surface-elevated);
4259
+ box-shadow: var(--shadow-lg);
4260
+ }
4261
+
4262
+ .chat-skill-suggestion {
4263
+ display: flex;
4264
+ align-items: center;
4265
+ gap: 9px;
4266
+ width: 100%;
4267
+ min-height: 40px;
4268
+ padding: 7px 8px;
4269
+ border-radius: var(--radius-sm);
4270
+ color: var(--text-secondary);
4271
+ text-align: left;
4272
+ transition:
4273
+ background var(--duration-fast) var(--ease-in-out),
4274
+ color var(--duration-fast) var(--ease-in-out);
4275
+ }
4276
+
4277
+ .chat-skill-suggestion:hover,
4278
+ .chat-skill-suggestion.active {
4279
+ color: var(--text-primary);
4280
+ background: var(--surface-hover);
4281
+ }
4282
+
4283
+ .chat-skill-suggestion-command {
4284
+ flex-shrink: 0;
4285
+ min-width: 86px;
4286
+ max-width: 118px;
4287
+ overflow: hidden;
4288
+ text-overflow: ellipsis;
4289
+ white-space: nowrap;
4290
+ font-family: var(--font-mono, monospace);
4291
+ font-size: 11px;
4292
+ color: var(--accent-primary);
4293
+ }
4294
+
4295
+ .chat-skill-suggestion-body {
4296
+ display: flex;
4297
+ flex-direction: column;
4298
+ min-width: 0;
4299
+ gap: 1px;
4300
+ }
4301
+
4302
+ .chat-skill-suggestion-name {
4303
+ font-size: 11px;
4304
+ font-weight: 600;
4305
+ color: inherit;
4306
+ }
4307
+
4308
+ .chat-skill-suggestion-desc {
4309
+ font-size: 10px;
4310
+ color: var(--text-muted);
4311
+ overflow: hidden;
4312
+ text-overflow: ellipsis;
4313
+ white-space: nowrap;
4314
+ }
4315
+
4316
+ .sidebar-input-frame {
4213
4317
  flex: 1;
4318
+ min-width: 0;
4319
+ position: relative;
4320
+ }
4321
+
4322
+ .sidebar-input-highlight {
4323
+ position: absolute;
4324
+ inset: 0;
4325
+ z-index: 2;
4326
+ pointer-events: none;
4327
+ box-sizing: border-box;
4328
+ border: 1px solid transparent;
4329
+ padding: 8px 12px;
4330
+ color: var(--text-primary);
4331
+ font-family: var(--font-ui);
4332
+ font-size: 13px;
4333
+ line-height: 1.4;
4334
+ white-space: pre-wrap;
4335
+ overflow: hidden;
4336
+ overflow-wrap: anywhere;
4337
+ }
4338
+
4339
+ .sidebar-input-highlight-command {
4340
+ color: #f4c542;
4341
+ font-weight: 600;
4342
+ background: linear-gradient(100deg, #f0b429 0%, #fff3a3 45%, #f4c542 70%);
4343
+ background-size: 220% 100%;
4344
+ background-position: 100% 0;
4345
+ -webkit-background-clip: text;
4346
+ background-clip: text;
4347
+ -webkit-text-fill-color: transparent;
4348
+ animation: skill-command-shimmer 1.9s ease-in-out infinite;
4349
+ }
4350
+
4351
+ @keyframes skill-command-shimmer {
4352
+ 0%,
4353
+ 42% {
4354
+ background-position: 100% 0;
4355
+ }
4356
+
4357
+ 100% {
4358
+ background-position: -120% 0;
4359
+ }
4360
+ }
4361
+
4362
+ @media (prefers-reduced-motion: reduce) {
4363
+ .sidebar-input-highlight-command {
4364
+ animation: none;
4365
+ background: none;
4366
+ -webkit-text-fill-color: #f4c542;
4367
+ }
4368
+ }
4369
+
4370
+ .sidebar-input {
4371
+ width: 100%;
4214
4372
  background: var(--bg-tertiary);
4215
4373
  border: 1px solid var(--border-subtle);
4216
4374
  border-radius: var(--radius-md);
@@ -4222,12 +4380,21 @@
4222
4380
  line-height: 1.4;
4223
4381
  }
4224
4382
 
4383
+ .sidebar-input.skill-command-registered {
4384
+ color: transparent;
4385
+ caret-color: var(--text-primary);
4386
+ }
4387
+
4225
4388
  .sidebar-input:focus {
4226
4389
  border-color: var(--accent-primary);
4227
4390
  outline: none;
4228
4391
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent-primary) 10%, transparent);
4229
4392
  }
4230
4393
 
4394
+ .sidebar-input.skill-command-registered:focus {
4395
+ color: transparent;
4396
+ }
4397
+
4231
4398
  .sidebar-input::placeholder {
4232
4399
  color: var(--text-muted);
4233
4400
  }
@@ -4525,7 +4692,7 @@
4525
4692
  }
4526
4693
 
4527
4694
  /* ═══════════════════════════════════════
4528
- Automation Kits panel
4695
+ Skills panel
4529
4696
  ═══════════════════════════════════════ */
4530
4697
 
4531
4698
  .automation-panel {
@@ -4554,21 +4721,6 @@
4554
4721
  gap: 8px;
4555
4722
  }
4556
4723
 
4557
- .kit-beta-tag {
4558
- font-size: 9px;
4559
- font-weight: 600;
4560
- letter-spacing: 0.08em;
4561
- text-transform: uppercase;
4562
- color: var(--accent-primary);
4563
- background: color-mix(in srgb, var(--accent-primary) 12%, transparent);
4564
- border: 1px solid color-mix(in srgb, var(--accent-primary) 25%, transparent);
4565
- border-radius: 4px;
4566
- padding: 1px 5px;
4567
- vertical-align: middle;
4568
- position: relative;
4569
- top: -1px;
4570
- }
4571
-
4572
4724
  .kit-list-count {
4573
4725
  font-size: 10px;
4574
4726
  font-weight: 600;
@@ -4578,6 +4730,10 @@
4578
4730
  }
4579
4731
 
4580
4732
  .kit-install-btn {
4733
+ display: inline-flex;
4734
+ align-items: center;
4735
+ justify-content: center;
4736
+ gap: 5px;
4581
4737
  height: 22px;
4582
4738
  padding: 0 8px;
4583
4739
  border-radius: var(--radius-sm);
@@ -4632,6 +4788,96 @@
4632
4788
  gap: 6px;
4633
4789
  }
4634
4790
 
4791
+ .kit-empty-state {
4792
+ display: flex;
4793
+ flex-direction: column;
4794
+ align-items: center;
4795
+ gap: 8px;
4796
+ padding: 22px 14px 20px;
4797
+ border-radius: var(--radius-md);
4798
+ background: var(--surface-elevated);
4799
+ border: 1px dashed var(--border-glass);
4800
+ text-align: center;
4801
+ }
4802
+
4803
+ .kit-empty-title {
4804
+ font-size: 12px;
4805
+ font-weight: 600;
4806
+ color: var(--text-primary);
4807
+ }
4808
+
4809
+ .kit-empty-copy {
4810
+ max-width: 220px;
4811
+ margin: 0;
4812
+ font-size: 11px;
4813
+ line-height: 1.5;
4814
+ color: var(--text-secondary);
4815
+ }
4816
+
4817
+ .kit-empty-actions {
4818
+ display: flex;
4819
+ align-items: center;
4820
+ gap: 8px;
4821
+ margin-top: 2px;
4822
+ }
4823
+
4824
+ .kit-create-panel {
4825
+ display: flex;
4826
+ flex-direction: column;
4827
+ gap: 8px;
4828
+ padding: 10px;
4829
+ border-radius: var(--radius-md);
4830
+ background: var(--surface-elevated);
4831
+ border: 1px solid var(--border-glass);
4832
+ }
4833
+
4834
+ .kit-create-header {
4835
+ display: flex;
4836
+ align-items: center;
4837
+ justify-content: space-between;
4838
+ gap: 8px;
4839
+ }
4840
+
4841
+ .kit-create-title {
4842
+ font-size: 12px;
4843
+ font-weight: 600;
4844
+ color: var(--text-primary);
4845
+ }
4846
+
4847
+ .kit-create-textarea {
4848
+ width: 100%;
4849
+ min-height: 220px;
4850
+ resize: vertical;
4851
+ padding: 9px 10px;
4852
+ border-radius: var(--radius-sm);
4853
+ border: 1px solid var(--border-glass);
4854
+ background: var(--surface-base);
4855
+ color: var(--text-primary);
4856
+ font-family: var(--font-mono, monospace);
4857
+ font-size: 11px;
4858
+ line-height: 1.45;
4859
+ outline: none;
4860
+ transition:
4861
+ border-color var(--duration-fast) var(--ease-in-out),
4862
+ background var(--duration-fast) var(--ease-in-out);
4863
+ }
4864
+
4865
+ .kit-create-textarea:focus {
4866
+ border-color: color-mix(in srgb, var(--accent-primary) 35%, transparent);
4867
+ background: var(--surface-hover);
4868
+ }
4869
+
4870
+ .kit-create-actions {
4871
+ display: flex;
4872
+ justify-content: flex-end;
4873
+ gap: 8px;
4874
+ }
4875
+
4876
+ .kit-create-save {
4877
+ height: 28px;
4878
+ padding: 0 10px;
4879
+ }
4880
+
4635
4881
  .kit-card {
4636
4882
  display: flex;
4637
4883
  align-items: flex-start;
@@ -4711,13 +4957,12 @@
4711
4957
  color: var(--accent-primary);
4712
4958
  }
4713
4959
 
4960
+ .kit-card-action-btn,
4714
4961
  .kit-remove-btn {
4715
4962
  flex-shrink: 0;
4716
4963
  width: 20px;
4717
4964
  height: 20px;
4718
4965
  border-radius: var(--radius-sm);
4719
- font-size: 15px;
4720
- line-height: 1;
4721
4966
  color: var(--text-muted);
4722
4967
  background: transparent;
4723
4968
  border: 1px solid transparent;
@@ -4730,6 +4975,12 @@
4730
4975
  border-color var(--duration-fast) var(--ease-in-out);
4731
4976
  }
4732
4977
 
4978
+ .kit-card-action-btn:hover {
4979
+ background: var(--surface-hover);
4980
+ border-color: var(--border-glass);
4981
+ color: var(--text-primary);
4982
+ }
4983
+
4733
4984
  .kit-remove-btn:hover {
4734
4985
  background: color-mix(in srgb, var(--status-error) 10%, transparent);
4735
4986
  border-color: color-mix(in srgb, var(--status-error) 20%, transparent);