@quanta-intellect/vessel-browser 0.1.95 → 0.1.99

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.
@@ -18,6 +18,7 @@ const Channels = {
18
18
  AI_STREAM_CHUNK: "ai:stream-chunk",
19
19
  AI_STREAM_END: "ai:stream-end",
20
20
  AI_STREAM_IDLE: "ai:stream-idle",
21
+ AI_RESEARCH_CLARIFICATION: "ai:research-clarification",
21
22
  AUTOMATION_ACTIVITY_START: "automation:activity-start",
22
23
  AUTOMATION_ACTIVITY_CHUNK: "automation:activity-chunk",
23
24
  AUTOMATION_ACTIVITY_END: "automation:activity-end",
@@ -194,6 +195,16 @@ const Channels = {
194
195
  CLEAR_BROWSING_DATA_OPEN: "browsing-data:open",
195
196
  // Picture-in-Picture
196
197
  TAB_TOGGLE_PIP: "tab:toggle-pip",
198
+ // Research Desk
199
+ RESEARCH_STATE_GET: "research:state-get",
200
+ RESEARCH_STATE_UPDATE: "research:state-update",
201
+ RESEARCH_START_BRIEF: "research:start-brief",
202
+ RESEARCH_CONFIRM_BRIEF: "research:confirm-brief",
203
+ RESEARCH_APPROVE_OBJECTIVES: "research:approve-objectives",
204
+ RESEARCH_SET_MODE: "research:set-mode",
205
+ RESEARCH_SET_TRACES: "research:set-traces",
206
+ RESEARCH_CANCEL: "research:cancel",
207
+ RESEARCH_EXPORT_REPORT: "research:export-report",
197
208
  // Codex OAuth
198
209
  CODEX_START_AUTH: "codex:start-auth",
199
210
  CODEX_CANCEL_AUTH: "codex:cancel-auth",
@@ -266,6 +277,14 @@ const api = {
266
277
  electron.ipcRenderer.on(Channels.AI_STREAM_IDLE, handler);
267
278
  return () => electron.ipcRenderer.removeListener(Channels.AI_STREAM_IDLE, handler);
268
279
  },
280
+ onResearchClarification: (cb) => {
281
+ const handler = (_, payload) => cb(payload);
282
+ electron.ipcRenderer.on(Channels.AI_RESEARCH_CLARIFICATION, handler);
283
+ return () => electron.ipcRenderer.removeListener(
284
+ Channels.AI_RESEARCH_CLARIFICATION,
285
+ handler
286
+ );
287
+ },
269
288
  onAutomationActivityStart: (cb) => {
270
289
  const handler = (_, entry) => cb(entry);
271
290
  electron.ipcRenderer.on(Channels.AUTOMATION_ACTIVITY_START, handler);
@@ -300,6 +319,21 @@ const api = {
300
319
  captureSession: (note) => electron.ipcRenderer.invoke(Channels.AGENT_SESSION_CAPTURE, note),
301
320
  restoreSession: (snapshot) => electron.ipcRenderer.invoke(Channels.AGENT_SESSION_RESTORE, snapshot)
302
321
  },
322
+ research: {
323
+ getState: () => electron.ipcRenderer.invoke(Channels.RESEARCH_STATE_GET),
324
+ onStateUpdate: (cb) => {
325
+ const handler = (_, state) => cb(state);
326
+ electron.ipcRenderer.on(Channels.RESEARCH_STATE_UPDATE, handler);
327
+ return () => electron.ipcRenderer.removeListener(Channels.RESEARCH_STATE_UPDATE, handler);
328
+ },
329
+ startBrief: (query) => electron.ipcRenderer.invoke(Channels.RESEARCH_START_BRIEF, query),
330
+ confirmBrief: () => electron.ipcRenderer.invoke(Channels.RESEARCH_CONFIRM_BRIEF),
331
+ approveObjectives: (options) => electron.ipcRenderer.invoke(Channels.RESEARCH_APPROVE_OBJECTIVES, options ?? {}),
332
+ setMode: (mode) => electron.ipcRenderer.invoke(Channels.RESEARCH_SET_MODE, mode),
333
+ setTraces: (include) => electron.ipcRenderer.invoke(Channels.RESEARCH_SET_TRACES, include),
334
+ cancel: () => electron.ipcRenderer.invoke(Channels.RESEARCH_CANCEL),
335
+ exportReport: () => electron.ipcRenderer.invoke(Channels.RESEARCH_EXPORT_REPORT)
336
+ },
303
337
  content: {
304
338
  extract: () => electron.ipcRenderer.invoke(Channels.CONTENT_EXTRACT),
305
339
  toggleReader: () => electron.ipcRenderer.invoke(Channels.READER_MODE_TOGGLE)
@@ -2486,6 +2486,19 @@
2486
2486
  animation: badge-enter var(--duration-enter) var(--ease-out-back) both;
2487
2487
  }
2488
2488
 
2489
+ .sidebar-tab-beta {
2490
+ height: 15px;
2491
+ padding: 0 5px;
2492
+ border: 1px solid var(--border-subtle);
2493
+ border-radius: 999px;
2494
+ background: var(--bg-tertiary);
2495
+ color: var(--text-secondary);
2496
+ font-size: 8.5px;
2497
+ font-weight: 700;
2498
+ line-height: 14px;
2499
+ text-transform: uppercase;
2500
+ }
2501
+
2489
2502
  .sidebar-messages {
2490
2503
  flex: 1;
2491
2504
  overflow-y: auto;
@@ -5265,6 +5278,281 @@
5265
5278
  color: var(--text-muted);
5266
5279
  text-align: center;
5267
5280
  }
5281
+
5282
+ /* ═══════════════════════════════════════
5283
+ Research Desk
5284
+ ═══════════════════════════════════════ */
5285
+
5286
+ .research-desk,
5287
+ .research-idle,
5288
+ .research-phase {
5289
+ display: flex;
5290
+ flex-direction: column;
5291
+ gap: 12px;
5292
+ min-height: 0;
5293
+ }
5294
+
5295
+ .research-desk {
5296
+ flex: 1;
5297
+ padding: 14px;
5298
+ overflow: hidden;
5299
+ }
5300
+
5301
+ .research-phase {
5302
+ flex: 1;
5303
+ }
5304
+
5305
+ .research-idle h3,
5306
+ .research-phase h3 {
5307
+ margin: 0;
5308
+ font-size: 14px;
5309
+ line-height: 1.3;
5310
+ color: var(--text-primary);
5311
+ }
5312
+
5313
+ .research-idle p,
5314
+ .research-phase p {
5315
+ margin: 0;
5316
+ font-size: 12px;
5317
+ line-height: 1.5;
5318
+ color: var(--text-secondary);
5319
+ }
5320
+
5321
+ .research-premium-notice {
5322
+ padding: 9px 10px;
5323
+ border: 1px solid var(--border-subtle);
5324
+ border-radius: var(--radius-md);
5325
+ background: var(--surface-glass);
5326
+ color: var(--text-secondary);
5327
+ font-size: 12px;
5328
+ line-height: 1.4;
5329
+ }
5330
+
5331
+ .research-topic-form,
5332
+ .research-brief-form {
5333
+ display: flex;
5334
+ gap: 8px;
5335
+ align-items: flex-end;
5336
+ }
5337
+
5338
+ .research-topic-form {
5339
+ flex-direction: column;
5340
+ align-items: stretch;
5341
+ }
5342
+
5343
+ .research-topic-input,
5344
+ .research-brief-input {
5345
+ width: 100%;
5346
+ min-width: 0;
5347
+ resize: vertical;
5348
+ border: 1px solid var(--border-subtle);
5349
+ border-radius: var(--radius-md);
5350
+ background: var(--bg-tertiary);
5351
+ color: var(--text-primary);
5352
+ font-family: var(--font-ui);
5353
+ font-size: 13px;
5354
+ line-height: 1.4;
5355
+ padding: 9px 10px;
5356
+ }
5357
+
5358
+ .research-topic-input:focus,
5359
+ .research-brief-input:focus {
5360
+ outline: none;
5361
+ border-color: var(--accent-primary);
5362
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent-primary) 10%, transparent);
5363
+ }
5364
+
5365
+ .research-topic-input::placeholder,
5366
+ .research-brief-input::placeholder {
5367
+ color: var(--text-muted);
5368
+ }
5369
+
5370
+ .research-start-btn,
5371
+ .research-brief-form button,
5372
+ .phase-controls button,
5373
+ .report-card button {
5374
+ min-height: 34px;
5375
+ border-radius: var(--radius-md);
5376
+ padding: 0 14px;
5377
+ font-size: 12px;
5378
+ font-weight: 500;
5379
+ background: var(--accent-primary);
5380
+ color: var(--button-primary-fg);
5381
+ white-space: nowrap;
5382
+ transition:
5383
+ background var(--duration-fast) var(--ease-in-out),
5384
+ transform var(--duration-fast) var(--ease-out-expo),
5385
+ opacity var(--duration-fast) var(--ease-in-out);
5386
+ }
5387
+
5388
+ .research-start-btn:hover:not(:disabled),
5389
+ .research-brief-form button:hover:not(:disabled),
5390
+ .phase-controls button:hover:not(:disabled),
5391
+ .report-card button:hover:not(:disabled) {
5392
+ background: var(--button-primary-hover-bg);
5393
+ }
5394
+
5395
+ .research-start-btn:active:not(:disabled),
5396
+ .research-brief-form button:active:not(:disabled),
5397
+ .phase-controls button:active:not(:disabled),
5398
+ .report-card button:active:not(:disabled) {
5399
+ transform: scale(0.97);
5400
+ }
5401
+
5402
+ .research-start-btn:disabled,
5403
+ .research-brief-form button:disabled,
5404
+ .phase-controls button:disabled,
5405
+ .report-card button:disabled {
5406
+ opacity: 0.38;
5407
+ cursor: default;
5408
+ }
5409
+
5410
+ .research-brief-thread {
5411
+ display: flex;
5412
+ flex: 1;
5413
+ min-height: 0;
5414
+ flex-direction: column;
5415
+ gap: 8px;
5416
+ overflow-y: auto;
5417
+ padding: 10px;
5418
+ border: 1px solid var(--border-subtle);
5419
+ border-radius: var(--radius-md);
5420
+ background: var(--surface-glass);
5421
+ }
5422
+
5423
+ .research-brief-message {
5424
+ max-width: 94%;
5425
+ padding: 9px 11px;
5426
+ border-radius: var(--radius-md);
5427
+ font-size: 12px;
5428
+ line-height: 1.5;
5429
+ white-space: pre-wrap;
5430
+ word-break: break-word;
5431
+ color: var(--text-primary);
5432
+ }
5433
+
5434
+ .research-brief-message .markdown-content {
5435
+ white-space: normal;
5436
+ }
5437
+
5438
+ .research-brief-message.user {
5439
+ align-self: flex-end;
5440
+ background: var(--bg-tertiary);
5441
+ border-bottom-right-radius: var(--radius-sm);
5442
+ }
5443
+
5444
+ .research-brief-message.assistant {
5445
+ align-self: flex-start;
5446
+ background: color-mix(in srgb, var(--accent-primary) 8%, transparent);
5447
+ border: 1px solid color-mix(in srgb, var(--accent-primary) 12%, transparent);
5448
+ border-bottom-left-radius: var(--radius-sm);
5449
+ }
5450
+
5451
+ .research-brief-status {
5452
+ align-self: flex-start;
5453
+ color: var(--text-muted);
5454
+ font-size: 11px;
5455
+ }
5456
+
5457
+ .research-brief-status.thinking {
5458
+ display: inline-flex;
5459
+ align-items: center;
5460
+ gap: 8px;
5461
+ }
5462
+
5463
+ .research-brief-loading {
5464
+ display: flex;
5465
+ align-items: center;
5466
+ gap: 10px;
5467
+ align-self: flex-start;
5468
+ padding: 10px 11px;
5469
+ border: 1px solid color-mix(in srgb, var(--accent-primary) 12%, transparent);
5470
+ border-radius: var(--radius-md);
5471
+ background: color-mix(in srgb, var(--accent-primary) 7%, transparent);
5472
+ color: var(--text-secondary);
5473
+ }
5474
+
5475
+ .research-spinner {
5476
+ width: 14px;
5477
+ height: 14px;
5478
+ flex: 0 0 auto;
5479
+ border: 2px solid color-mix(in srgb, var(--accent-primary) 22%, transparent);
5480
+ border-top-color: var(--accent-primary);
5481
+ border-radius: 50%;
5482
+ animation: research-spin 0.7s linear infinite;
5483
+ }
5484
+
5485
+ .research-loading-title {
5486
+ color: var(--text-primary);
5487
+ font-size: 12px;
5488
+ font-weight: 600;
5489
+ line-height: 1.3;
5490
+ }
5491
+
5492
+ .research-loading-copy {
5493
+ margin-top: 2px;
5494
+ color: var(--text-muted);
5495
+ font-size: 11px;
5496
+ line-height: 1.35;
5497
+ }
5498
+
5499
+ @keyframes research-spin {
5500
+ to { transform: rotate(360deg); }
5501
+ }
5502
+
5503
+ .research-quick-replies {
5504
+ display: flex;
5505
+ flex-wrap: wrap;
5506
+ gap: 6px;
5507
+ padding: 1px 0;
5508
+ }
5509
+
5510
+ .research-quick-replies.inline {
5511
+ max-width: 94%;
5512
+ align-self: flex-start;
5513
+ margin-top: -2px;
5514
+ padding-left: 2px;
5515
+ }
5516
+
5517
+ .research-quick-reply {
5518
+ min-height: 28px;
5519
+ padding: 0 10px;
5520
+ border: 1px solid var(--border-subtle);
5521
+ border-radius: 999px;
5522
+ background: var(--bg-tertiary);
5523
+ color: var(--text-secondary);
5524
+ font-size: 11px;
5525
+ font-weight: 500;
5526
+ line-height: 1;
5527
+ transition:
5528
+ border-color var(--duration-fast) var(--ease-in-out),
5529
+ color var(--duration-fast) var(--ease-in-out),
5530
+ background var(--duration-fast) var(--ease-in-out);
5531
+ }
5532
+
5533
+ .research-quick-reply:hover {
5534
+ border-color: color-mix(in srgb, var(--accent-primary) 28%, var(--border-subtle));
5535
+ background: color-mix(in srgb, var(--accent-primary) 8%, var(--bg-tertiary));
5536
+ color: var(--text-primary);
5537
+ }
5538
+
5539
+ .phase-controls {
5540
+ display: flex;
5541
+ gap: 8px;
5542
+ flex-wrap: wrap;
5543
+ }
5544
+
5545
+ .phase-controls .secondary,
5546
+ .report-card .secondary {
5547
+ background: var(--surface-hover);
5548
+ color: var(--text-secondary);
5549
+ border: 1px solid var(--border-glass);
5550
+ }
5551
+
5552
+ .phase-controls .secondary:hover:not(:disabled),
5553
+ .report-card .secondary:hover:not(:disabled) {
5554
+ background: var(--surface-active);
5555
+ }
5268
5556
  .devtools-panel {
5269
5557
  width: 100%;
5270
5558
  height: 100%;