local-deep-research 0.5.3__py3-none-any.whl → 0.5.4__py3-none-any.whl

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.
@@ -1 +1 @@
1
- __version__ = "0.5.3"
1
+ __version__ = "0.5.4"
@@ -119,6 +119,18 @@ a:hover {
119
119
  color: var(--text-primary);
120
120
  }
121
121
 
122
+ .sidebar-nav li a:focus {
123
+ outline: 2px solid var(--accent-primary);
124
+ outline-offset: -2px;
125
+ background-color: var(--bg-tertiary);
126
+ color: var(--text-primary);
127
+ }
128
+
129
+ .sidebar-nav li a:focus .nav-shortcut {
130
+ background-color: var(--accent-primary);
131
+ color: var(--text-primary);
132
+ }
133
+
122
134
  .sidebar-nav li.active {
123
135
  color: var(--accent-primary);
124
136
  background-color: rgba(110, 79, 246, 0.1);
@@ -130,13 +142,53 @@ a:hover {
130
142
  color: inherit;
131
143
  }
132
144
 
145
+ /* Navigation shortcuts */
146
+ .nav-shortcut {
147
+ margin-left: auto;
148
+ background-color: var(--bg-tertiary);
149
+ color: var(--text-muted);
150
+ padding: 0.2rem 0.5rem;
151
+ border-radius: 4px;
152
+ font-size: 0.75rem;
153
+ font-weight: 600;
154
+ min-width: 1.5rem;
155
+ text-align: center;
156
+ transition: all 0.2s;
157
+ }
158
+
159
+ .sidebar-nav li:hover .nav-shortcut {
160
+ background-color: var(--accent-primary);
161
+ color: var(--text-primary);
162
+ }
163
+
164
+ .sidebar-nav li.active .nav-shortcut {
165
+ background-color: var(--accent-primary);
166
+ color: var(--text-primary);
167
+ }
168
+
133
169
  .sidebar-footer {
134
170
  padding: 1rem 1.5rem;
135
171
  border-top: 1px solid var(--border-color);
136
172
  color: var(--text-muted);
137
173
  font-size: 0.875rem;
138
174
  display: flex;
139
- justify-content: center;
175
+ flex-direction: column;
176
+ align-items: center;
177
+ gap: 0.5rem;
178
+ }
179
+
180
+ .nav-hint {
181
+ font-size: 0.75rem;
182
+ opacity: 0.7;
183
+ margin: 0;
184
+ }
185
+
186
+ .nav-hint kbd {
187
+ background-color: var(--bg-tertiary);
188
+ padding: 0.1rem 0.3rem;
189
+ border-radius: 3px;
190
+ font-size: 0.7rem;
191
+ border: 1px solid var(--border-color);
140
192
  }
141
193
 
142
194
  /* Main Content */
@@ -1046,6 +1098,11 @@ textarea:focus, input[type="text"]:focus {
1046
1098
  justify-content: center;
1047
1099
  }
1048
1100
 
1101
+ /* Hide navigation shortcuts on small screens */
1102
+ .nav-shortcut {
1103
+ display: none;
1104
+ }
1105
+
1049
1106
  /* Active state fix for icon view */
1050
1107
  .sidebar-nav li.active {
1051
1108
  border-left-width: 3px;
@@ -1581,6 +1638,10 @@ textarea:focus, input[type="text"]:focus {
1581
1638
  border-radius: 8px;
1582
1639
  background-color: rgba(64, 191, 255, 0.05);
1583
1640
  border: 1px solid rgba(64, 191, 255, 0.1);
1641
+ width: 100%;
1642
+ text-align: left;
1643
+ font-family: inherit;
1644
+ font-size: inherit;
1584
1645
  }
1585
1646
 
1586
1647
  .advanced-options-toggle:hover {
@@ -1605,11 +1666,25 @@ textarea:focus, input[type="text"]:focus {
1605
1666
  .advanced-options-panel {
1606
1667
  background-color: rgba(42, 42, 58, 0.5);
1607
1668
  border-radius: 8px;
1608
- padding: 1.5rem;
1669
+ padding: 0 1.5rem;
1609
1670
  margin-bottom: 1.5rem;
1610
1671
  border: 1px solid var(--border-color);
1611
- display: none;
1612
1672
  box-shadow: inset 0 2px 10px rgba(0, 0, 0, 0.1);
1673
+ max-height: 0;
1674
+ overflow: hidden;
1675
+ opacity: 0;
1676
+ visibility: hidden;
1677
+ pointer-events: none;
1678
+ transition: all 0.3s ease;
1679
+ }
1680
+
1681
+ .advanced-options-toggle.open + .advanced-options-panel,
1682
+ .advanced-options-panel.expanded {
1683
+ max-height: 1000px;
1684
+ opacity: 1;
1685
+ visibility: visible;
1686
+ pointer-events: auto;
1687
+ padding: 1.5rem;
1613
1688
  }
1614
1689
 
1615
1690
  .form-row {
@@ -293,6 +293,18 @@
293
293
  }
294
294
  });
295
295
 
296
+ // Blur event - close dropdown when tabbing away
297
+ input.addEventListener('blur', (e) => {
298
+ // Small delay to allow click events on dropdown items to fire first
299
+ setTimeout(() => {
300
+ // Check if focus has moved to an element inside the dropdown
301
+ const activeElement = document.activeElement;
302
+ if (!dropdownList.contains(activeElement) && activeElement !== input) {
303
+ hideDropdown();
304
+ }
305
+ }, 150);
306
+ });
307
+
296
308
  // Keyboard navigation for dropdown
297
309
  input.addEventListener('keydown', (e) => {
298
310
  const items = dropdownList.querySelectorAll('.custom-dropdown-item');
@@ -436,8 +436,17 @@
436
436
  const savedState = localStorage.getItem('advancedOptionsOpen') === 'true';
437
437
 
438
438
  if (savedState) {
439
- advancedToggle.classList.add('open', 'expanded');
440
- advancedToggle.classList.toggle('expanded', true);
439
+ advancedToggle.classList.add('open');
440
+ advancedPanel.classList.add('expanded');
441
+
442
+ // Update ARIA attributes
443
+ advancedToggle.setAttribute('aria-expanded', 'true');
444
+
445
+ // Update screen reader text
446
+ const srText = advancedToggle.querySelector('.sr-only');
447
+ if (srText) {
448
+ srText.textContent = 'Click to collapse advanced options';
449
+ }
441
450
 
442
451
  // Update icon immediately
443
452
  const icon = advancedToggle.querySelector('i');
@@ -445,8 +454,18 @@
445
454
  icon.className = 'fas fa-chevron-up';
446
455
  }
447
456
  } else {
448
- advancedToggle.classList.remove('open', 'expanded');
449
- advancedToggle.classList.toggle('expanded', false);
457
+ advancedToggle.classList.remove('open');
458
+ advancedPanel.classList.remove('expanded');
459
+
460
+ // Update ARIA attributes
461
+ advancedToggle.setAttribute('aria-expanded', 'false');
462
+
463
+ // Update screen reader text
464
+ const srText = advancedToggle.querySelector('.sr-only');
465
+ if (srText) {
466
+ srText.textContent = 'Click to expand advanced options';
467
+ }
468
+
450
469
  // Ensure icon is correct
451
470
  const icon = advancedToggle.querySelector('i');
452
471
  if (icon) {
@@ -460,6 +479,15 @@
460
479
  const isOpen = advancedToggle.classList.toggle('open');
461
480
  advancedToggle.classList.toggle('expanded', isOpen);
462
481
 
482
+ // Update ARIA attributes for accessibility
483
+ this.setAttribute('aria-expanded', isOpen);
484
+
485
+ // Update screen reader text
486
+ const srText = this.querySelector('.sr-only');
487
+ if (srText) {
488
+ srText.textContent = isOpen ? 'Click to collapse advanced options' : 'Click to expand advanced options';
489
+ }
490
+
463
491
  // Save state to localStorage
464
492
  localStorage.setItem('advancedOptionsOpen', isOpen);
465
493
 
@@ -469,27 +497,40 @@
469
497
  icon.className = isOpen ? 'fas fa-chevron-up' : 'fas fa-chevron-down';
470
498
  }
471
499
 
472
- // Animate using CSS transitions based on the 'expanded' class
473
- // No need for direct style manipulation or timeouts here if CSS is set up correctly
474
- // Example: CSS might have transition on max-height and opacity
475
- // If explicit display toggle is needed for transition logic:
476
- if (isOpen) {
477
- advancedPanel.style.display = 'block'; // Show before transition starts
478
- // Force reflow to ensure display:block is applied before transition
479
- advancedPanel.offsetHeight;
480
- advancedPanel.classList.add('expanded'); // Add class to trigger transition
481
- } else {
482
- advancedPanel.classList.remove('expanded'); // Remove class to trigger transition
483
- // Optionally hide with display:none after transition ends (using event listener)
484
- advancedPanel.addEventListener('transitionend', () => {
485
- if (!advancedPanel.classList.contains('expanded')) {
486
- advancedPanel.style.display = 'none';
487
- }
488
- }, { once: true });
500
+ // Update panel expanded class for CSS animation
501
+ advancedPanel.classList.toggle('expanded', isOpen);
502
+ });
503
+
504
+ // Add keyboard support for the advanced options toggle
505
+ advancedToggle.addEventListener('keydown', function(event) {
506
+ if (event.key === 'Enter' || event.key === ' ') {
507
+ event.preventDefault();
508
+ this.click(); // Trigger the click handler
489
509
  }
490
510
  });
491
511
  }
492
512
 
513
+ // Global keyboard shortcuts for this page
514
+ document.addEventListener('keydown', function(event) {
515
+ // Escape key: return focus to search field (override global Esc behavior when on search page)
516
+ if (event.key === 'Escape') {
517
+ if (queryInput && document.activeElement !== queryInput) {
518
+ event.preventDefault();
519
+ event.stopPropagation(); // Prevent global keyboard service from handling this
520
+ queryInput.focus();
521
+ queryInput.select(); // Select all text for easy replacement
522
+ }
523
+ }
524
+
525
+ // Ctrl/Cmd + Enter: submit form from anywhere on the page
526
+ if ((event.ctrlKey || event.metaKey) && event.key === 'Enter') {
527
+ if (form) {
528
+ event.preventDefault();
529
+ handleResearchSubmit(new Event('submit'));
530
+ }
531
+ }
532
+ });
533
+
493
534
  // Form submission
494
535
  form.addEventListener('submit', handleResearchSubmit);
495
536
 
@@ -505,15 +546,21 @@
505
546
  selectMode(this);
506
547
  } else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {
507
548
  event.preventDefault();
508
- const previousMode = this.previousElementSibling;
509
- if (previousMode && previousMode.classList.contains('mode-option')) {
549
+ // Find the previous mode option, skipping hidden inputs
550
+ const allModeOptions = Array.from(document.querySelectorAll('.mode-option'));
551
+ const currentIndex = allModeOptions.indexOf(this);
552
+ const previousMode = allModeOptions[currentIndex - 1];
553
+ if (previousMode) {
510
554
  selectMode(previousMode);
511
555
  previousMode.focus();
512
556
  }
513
557
  } else if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {
514
558
  event.preventDefault();
515
- const nextMode = this.nextElementSibling;
516
- if (nextMode && nextMode.classList.contains('mode-option')) {
559
+ // Find the next mode option, skipping hidden inputs
560
+ const allModeOptions = Array.from(document.querySelectorAll('.mode-option'));
561
+ const currentIndex = allModeOptions.indexOf(this);
562
+ const nextMode = allModeOptions[currentIndex + 1];
563
+ if (nextMode) {
517
564
  selectMode(nextMode);
518
565
  nextMode.focus();
519
566
  }
@@ -8,12 +8,40 @@
8
8
  // Keyboard shortcut registry - simplified to just the essential ones
9
9
  const shortcuts = {
10
10
  'newSearch': {
11
- keys: ['ctrl+enter', 'cmd+enter'],
11
+ keys: ['escape'],
12
12
  description: 'Return to main search',
13
13
  handler: () => {
14
14
  // Always navigate to main research page
15
15
  window.location.href = '/';
16
16
  }
17
+ },
18
+ 'navNewResearch': {
19
+ keys: ['ctrl+shift+1'],
20
+ description: 'Go to New Research',
21
+ handler: () => {
22
+ window.location.href = '/';
23
+ }
24
+ },
25
+ 'navHistory': {
26
+ keys: ['ctrl+shift+2'],
27
+ description: 'Go to History',
28
+ handler: () => {
29
+ window.location.href = '/research/history';
30
+ }
31
+ },
32
+ 'navMetrics': {
33
+ keys: ['ctrl+shift+3'],
34
+ description: 'Go to Metrics',
35
+ handler: () => {
36
+ window.location.href = '/metrics';
37
+ }
38
+ },
39
+ 'navSettings': {
40
+ keys: ['ctrl+shift+4'],
41
+ description: 'Go to Settings',
42
+ handler: () => {
43
+ window.location.href = '/research/settings';
44
+ }
17
45
  }
18
46
  };
19
47
 
@@ -39,7 +67,7 @@
39
67
 
40
68
  // Match key
41
69
  const eventKey = event.key.toLowerCase();
42
- if (eventKey !== key && event.code.toLowerCase() !== `key${key}`) {
70
+ if (eventKey !== key && event.code.toLowerCase() !== `key${key}` && event.code.toLowerCase() !== `digit${key}`) {
43
71
  // Special handling for special keys
44
72
  if (key === '/' && eventKey !== '/') return false;
45
73
  else if (key === ',' && eventKey !== ',') return false;
@@ -70,9 +98,22 @@
70
98
  activeElement.contentEditable === 'true'
71
99
  );
72
100
 
73
- // Allow Escape even when typing
74
- if (isTyping && event.key !== 'Escape') {
75
- return;
101
+ // Skip shortcuts when typing, except for navigation shortcuts and Esc (unless on settings page)
102
+ if (isTyping) {
103
+ const isNavShortcut = event.ctrlKey && event.shiftKey && (
104
+ ['1', '2', '3', '4'].includes(event.key) ||
105
+ ['Digit1', 'Digit2', 'Digit3', 'Digit4'].includes(event.code)
106
+ );
107
+ const isEscOnSettingsPage = event.key === 'Escape' && window.location.pathname.includes('/settings');
108
+
109
+ // Debug navigation shortcuts
110
+ if (event.ctrlKey && event.shiftKey) {
111
+ console.log('Nav shortcut attempt:', event.key, event.code, 'isNavShortcut:', isNavShortcut);
112
+ }
113
+
114
+ if (!isNavShortcut && (event.key !== 'Escape' || isEscOnSettingsPage)) {
115
+ return;
116
+ }
76
117
  }
77
118
 
78
119
  // Debug log
@@ -35,7 +35,11 @@
35
35
  </span>
36
36
  <span class="hint-item">
37
37
  <i class="fas fa-home hint-icon"></i>
38
- <span class="hint-text"><kbd>Ctrl</kbd>+<kbd>Enter</kbd> returns here from anywhere</span>
38
+ <span class="hint-text"><kbd>Esc</kbd> returns here from anywhere</span>
39
+ </span>
40
+ <span class="hint-item">
41
+ <i class="fas fa-bars hint-icon"></i>
42
+ <span class="hint-text"><kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>1-4</kbd> to navigate menu</span>
39
43
  </span>
40
44
  </div>
41
45
  </div>
@@ -65,13 +69,14 @@
65
69
  </fieldset>
66
70
  </div>
67
71
 
68
- <!-- Advanced Options -->
69
- <div class="advanced-options-toggle">
72
+ <!-- Advanced Options - positioned before start for configuration -->
73
+ <button type="button" class="advanced-options-toggle" aria-expanded="false" aria-controls="advanced-options-panel">
70
74
  <span class="toggle-text">Advanced Options</span>
71
- <i class="fas fa-chevron-down"></i>
72
- </div>
75
+ <i class="fas fa-chevron-down" aria-hidden="true"></i>
76
+ <span class="sr-only">Click to expand advanced options</span>
77
+ </button>
73
78
 
74
- <div class="advanced-options-panel">
79
+ <div class="advanced-options-panel" id="advanced-options-panel" aria-labelledby="advanced-options-toggle">
75
80
  <div class="form-row">
76
81
  <!-- Model Provider Selection -->
77
82
  <div class="form-group half">
@@ -151,6 +156,12 @@
151
156
  </div>
152
157
  </div>
153
158
 
159
+ <!-- Start Research Button -->
160
+ <div class="form-actions">
161
+ <button type="submit" class="btn btn-primary" id="start-research-btn"><i class="fas fa-rocket"></i> Start Research</button>
162
+ </div>
163
+
164
+ <!-- Audio Notifications -->
154
165
  <div class="form-options">
155
166
  <div class="form-option">
156
167
  <label for="notification-toggle" class="checkbox-label">
@@ -159,10 +170,6 @@
159
170
  </label>
160
171
  </div>
161
172
  </div>
162
-
163
- <div class="form-actions">
164
- <button type="submit" class="btn btn-primary" id="start-research-btn"><i class="fas fa-rocket"></i> Start Research</button>
165
- </div>
166
173
  </form>
167
174
  </div>
168
175
  </div>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: local-deep-research
3
- Version: 0.5.3
3
+ Version: 0.5.4
4
4
  Summary: AI-powered research assistant with deep, iterative analysis using LLMs and web searches
5
5
  Author-Email: LearningCircuit <185559241+LearningCircuit@users.noreply.github.com>, HashedViking <6432677+HashedViking@users.noreply.github.com>
6
6
  License: MIT License
@@ -1,9 +1,9 @@
1
- local_deep_research-0.5.3.dist-info/METADATA,sha256=sJGfKxEAI9Nn8wafKK3qnTOaj8sJzq2mqNvl130ep0s,17676
2
- local_deep_research-0.5.3.dist-info/WHEEL,sha256=tSfRZzRHthuv7vxpI4aehrdN9scLjk-dCJkPLzkHxGg,90
3
- local_deep_research-0.5.3.dist-info/entry_points.txt,sha256=GcXS501Rjh-P80S8db7hnrQ23mS_Jg27PwpVQVO77as,113
4
- local_deep_research-0.5.3.dist-info/licenses/LICENSE,sha256=Qg2CaTdu6SWnSqk1_JtgBPp_Da-LdqJDhT1Vt1MUc5s,1072
1
+ local_deep_research-0.5.4.dist-info/METADATA,sha256=1fnH-5wpmsGOOrww0M6gFDdKKjw3XW3XTDKGvpf5syE,17676
2
+ local_deep_research-0.5.4.dist-info/WHEEL,sha256=tSfRZzRHthuv7vxpI4aehrdN9scLjk-dCJkPLzkHxGg,90
3
+ local_deep_research-0.5.4.dist-info/entry_points.txt,sha256=GcXS501Rjh-P80S8db7hnrQ23mS_Jg27PwpVQVO77as,113
4
+ local_deep_research-0.5.4.dist-info/licenses/LICENSE,sha256=Qg2CaTdu6SWnSqk1_JtgBPp_Da-LdqJDhT1Vt1MUc5s,1072
5
5
  local_deep_research/__init__.py,sha256=j1ktf_e9HeXPe86NHibY5aINtZfTSGRTvLNtz9BJZa4,1071
6
- local_deep_research/__version__.py,sha256=tgzuqHKcEdKBaP57F5oXxq4XlW2n9J4Fj8ZGu7nGOZg,22
6
+ local_deep_research/__version__.py,sha256=DITpct-LrdIsTgwx2NgH5Ghx5y8Xgz1YMimy1ZV5RTY,22
7
7
  local_deep_research/advanced_search_system/__init__.py,sha256=sGusMj4eFIrhXR6QbOM16UDKB6aI-iS4IFivKWpMlh0,234
8
8
  local_deep_research/advanced_search_system/answer_decoding/__init__.py,sha256=BmmbIPQnouYyboFD61CDq71fW5On555w7dbt42s9gV4,148
9
9
  local_deep_research/advanced_search_system/answer_decoding/browsecomp_answer_decoder.py,sha256=4FDMP4n_z5DOzVIisH3_kexRqNm1AO3MDe-Md3WtgE0,12856
@@ -198,8 +198,8 @@ local_deep_research/web/services/settings_service.py,sha256=W3TdSb1_WTBdKVQEvi4s
198
198
  local_deep_research/web/services/socket_service.py,sha256=kKV9LbMvgMtuvX32nuZnrMWwS6IzSOM90FxL9nWsfCQ,11904
199
199
  local_deep_research/web/static/css/custom_dropdown.css,sha256=MFRm4HaMGM7X2Z-Yvb-_y20BE1NInSmN1cUJc_v5k4k,11542
200
200
  local_deep_research/web/static/css/settings.css,sha256=QZbjLz8zNQZvM_ROzQOH67ZHZHEQ8WohkIPJlsekqfk,24719
201
- local_deep_research/web/static/css/styles.css,sha256=ABUv1h_0hXY5aSPJfdma9BywQSkqhgao-coKF9PK1vg,35270
202
- local_deep_research/web/static/js/components/custom_dropdown.js,sha256=Ot4Z0Du4an61-MSKwZmuq26qcmbjMUCTbzmUaoJKBdg,16835
201
+ local_deep_research/web/static/css/styles.css,sha256=ya6TVTZL9B8ihWqYukW8u2i20lKwa7BkeVPt3fkB4mk,36856
202
+ local_deep_research/web/static/js/components/custom_dropdown.js,sha256=yWYSxFBgjqE3jXveET_x7FBeNDfrALUBbRoPmhCrhYs,17368
203
203
  local_deep_research/web/static/js/components/detail.js,sha256=iVm4n_1n7vw0zo_fngT-uZP9OiY7TK4ozutIi9of_L4,27436
204
204
  local_deep_research/web/static/js/components/details.js,sha256=acDE_KnnTMGn4tGTYq7HMaOGUg9UsjyFeqTgm1VC6kI,29899
205
205
  local_deep_research/web/static/js/components/fallback/formatting.js,sha256=OoP38zcapAV-zvMd5wvjdBgbQFfueVVbKRK89V9aMh4,3294
@@ -207,7 +207,7 @@ local_deep_research/web/static/js/components/fallback/ui.js,sha256=O4fMeHXodvpFT
207
207
  local_deep_research/web/static/js/components/history.js,sha256=TiE1R1U81L0bOuKhBgmB-9gS-66YNgmi_yIy-rG_5uY,15507
208
208
  local_deep_research/web/static/js/components/logpanel.js,sha256=IiTpKPSEn7KtKT4xh9X6FcMZWfloj5eTDa8Oday2lhs,42808
209
209
  local_deep_research/web/static/js/components/progress.js,sha256=8cydtosQZpdX2MTpYEq9GPARCWV5azKMaRHxYiDvJoM,42542
210
- local_deep_research/web/static/js/components/research.js,sha256=EGWDdpswJnvH3GNlmp5albNzMv6-_20uF2D0qB73-zo,86577
210
+ local_deep_research/web/static/js/components/research.js,sha256=9oGOTpm0J6nO43qPOWQJsWt9ukLSbAC1MV5AegGnp9E,88282
211
211
  local_deep_research/web/static/js/components/results.js,sha256=3kDk0kodglBqIODh_ve0I9ERIZkITz2yB5isUUda-bc,35763
212
212
  local_deep_research/web/static/js/components/settings.js,sha256=qnRxnx9LdyOpjIEKfb4mJdES9sLkNKvyzxy4OGUqmGQ,169998
213
213
  local_deep_research/web/static/js/components/settings_sync.js,sha256=LWDZ2EE8ChCxI5TPmPm9F4rOiYIEzEJxSCE1GLXk-2w,3925
@@ -216,7 +216,7 @@ local_deep_research/web/static/js/research_form.js,sha256=qOZK0z_BE_xx2a1sx5vTjs
216
216
  local_deep_research/web/static/js/services/api.js,sha256=AP24hrw6VBrEjQxIMnxrZuGFmrdm9MReSjjZ-AIKqr0,6776
217
217
  local_deep_research/web/static/js/services/audio.js,sha256=JeeTkj485limzvawdiluLSr67QWlb6AyB57u9oTwIw0,857
218
218
  local_deep_research/web/static/js/services/formatting.js,sha256=7XwyJLLvPOdlWReCbHRRVMdvsZxGEfIGRIEDLqZLnnc,3294
219
- local_deep_research/web/static/js/services/keyboard.js,sha256=Yt7Ve76PykGzfDI-gCEdWDZV3NUc2S-VTB9xOnSU0sc,5171
219
+ local_deep_research/web/static/js/services/keyboard.js,sha256=WuJCp-tWmEy6DaZQYNe4jP9FDHztuLVQtI_eYliJZv4,6793
220
220
  local_deep_research/web/static/js/services/pdf.js,sha256=SIjoHw44PYuYkF4nIo_47s9m2ifLQMTcNYGdcOj4mf8,26059
221
221
  local_deep_research/web/static/js/services/socket.js,sha256=9h6XOi29nFJ42xGuxT0ZLN-7U1-MMmo9-mGC8KgCjT8,36805
222
222
  local_deep_research/web/static/js/services/ui.js,sha256=XkJCUqhDjfeY58bExyurcFmWCYBbWRHSpsIABmWtU7s,16349
@@ -234,7 +234,7 @@ local_deep_research/web/templates/pages/details.html,sha256=Led51_cv97e_Z057_7QV
234
234
  local_deep_research/web/templates/pages/history.html,sha256=dGeXmpp1WTsd3Em_8k1cscwOJEPO_7puu04KC966QhA,1982
235
235
  local_deep_research/web/templates/pages/metrics.html,sha256=IYG08UNnWAATqCDh0fRskJONKjHTLGgLWcrztiAm0Yg,81507
236
236
  local_deep_research/web/templates/pages/progress.html,sha256=iRKGkgyo9wBKrYAiwk61MbnaDUxeQf8SGP3wGoHWteQ,2546
237
- local_deep_research/web/templates/pages/research.html,sha256=Nn_LatiSZfKxa-Oq7z1WaV65GfPHu35YvYJDlHiTDs0,9634
237
+ local_deep_research/web/templates/pages/research.html,sha256=4puS2jcJNrcXI_6NPwfvvZiD_uaNhsKtFCdSG03bVqo,10291
238
238
  local_deep_research/web/templates/pages/results.html,sha256=n5tHESU5iRcjwjga4y589r41B9NEqHIvzpMsXlRL0vw,3591
239
239
  local_deep_research/web/templates/pages/star_reviews.html,sha256=Bg3cGwRjNBBSvC9ZoqZqjY-6_0-cM4VZHRGlTai_Wng,24361
240
240
  local_deep_research/web/templates/settings_dashboard.html,sha256=A1fBe1D29v8G3ys94_rIiBP6Ky-rtYL6TRbDluoBMPI,4342
@@ -264,4 +264,4 @@ local_deep_research/web_search_engines/engines/search_engine_wikipedia.py,sha256
264
264
  local_deep_research/web_search_engines/search_engine_base.py,sha256=sRgtszDM9RqNw_oVdmGk8CmKS_9EJYR-LyE1as53cp8,12401
265
265
  local_deep_research/web_search_engines/search_engine_factory.py,sha256=eMaFup2p4u1nP4fTmjzfLUAl_mUZkoE1mUABBIvNzDM,12095
266
266
  local_deep_research/web_search_engines/search_engines_config.py,sha256=oJ5GL9BhFvWFgmFtvwJ7AZ9o-uPLEfTNhJJouHF40iA,5296
267
- local_deep_research-0.5.3.dist-info/RECORD,,
267
+ local_deep_research-0.5.4.dist-info/RECORD,,