local-deep-research 0.5.2__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.
@@ -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');
@@ -630,18 +630,20 @@
630
630
  cancelButton.style.display = 'none';
631
631
  }
632
632
  } else if (data.status === 'failed' || data.status === 'cancelled') {
633
- // Show error message
634
- if (window.ui) {
635
- window.ui.showError(data.error || 'Research was unsuccessful');
633
+ // For failed research, try to show the error report if available
634
+ if (data.status === 'failed') {
635
+ if (viewResultsButton) {
636
+ viewResultsButton.textContent = 'View Error Report';
637
+ viewResultsButton.href = `/research/results/${currentResearchId}`;
638
+ viewResultsButton.style.display = 'inline-block';
639
+ }
636
640
  } else {
637
- console.error('Research failed:', data.error || 'Unknown error');
638
- }
639
-
640
- // Update button to go back to home
641
- if (viewResultsButton) {
642
- viewResultsButton.textContent = 'Start New Research';
643
- viewResultsButton.href = '/';
644
- viewResultsButton.style.display = 'inline-block';
641
+ // For cancelled research, go back to home
642
+ if (viewResultsButton) {
643
+ viewResultsButton.textContent = 'Start New Research';
644
+ viewResultsButton.href = '/';
645
+ viewResultsButton.style.display = 'inline-block';
646
+ }
645
647
  }
646
648
 
647
649
  // Hide cancel button
@@ -917,8 +919,12 @@
917
919
  cancelButton.style.display = 'none';
918
920
  }
919
921
 
920
- // Show results button (might have partial results)
921
- showResultsButton();
922
+ // Show error report button
923
+ if (viewResultsButton) {
924
+ viewResultsButton.textContent = 'View Error Report';
925
+ viewResultsButton.href = `/research/results/${currentResearchId}`;
926
+ viewResultsButton.style.display = 'inline-block';
927
+ }
922
928
 
923
929
  // Show notification if enabled
924
930
  showNotification('Research Error', `There was an error with your research: ${data.error}`);
@@ -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
  }
@@ -98,7 +98,7 @@
98
98
  resultsContainer.innerHTML = '<div class="text-center my-5"><i class="fas fa-spinner fa-pulse"></i><p class="mt-3">Loading research results...</p></div>';
99
99
 
100
100
  // Fetch result from API
101
- const response = await fetch(`/research/api/report/${researchId}`);
101
+ const response = await fetch(`/research/api/history/report/${researchId}`);
102
102
 
103
103
  if (!response.ok) {
104
104
  throw new Error(`HTTP error ${response.status}`);
@@ -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>
@@ -48,7 +52,7 @@
48
52
  <label for="mode-quick" class="mode-option active" data-mode="quick" role="radio" aria-checked="true" tabindex="0">
49
53
  <div class="mode-icon"><i class="fas fa-bolt" aria-hidden="true"></i></div>
50
54
  <div class="mode-info">
51
- <h3>Quick Summary</h3>
55
+ <h2>Quick Summary</h2>
52
56
  <p>Generated in a few minutes</p>
53
57
  </div>
54
58
  </label>
@@ -57,7 +61,7 @@
57
61
  <label for="mode-detailed" class="mode-option" data-mode="detailed" role="radio" aria-checked="false" tabindex="-1">
58
62
  <div class="mode-icon"><i class="fas fa-microscope" aria-hidden="true"></i></div>
59
63
  <div class="mode-info">
60
- <h3>Detailed Report</h3>
64
+ <h2>Detailed Report</h2>
61
65
  <p>In-depth analysis (takes longer)</p>
62
66
  </div>
63
67
  </label>
@@ -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.2
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.2.dist-info/METADATA,sha256=kAVbaFqnR6nls4PM_vMyRtVnZuj4z1LthPtEz3YREJk,17676
2
- local_deep_research-0.5.2.dist-info/WHEEL,sha256=tSfRZzRHthuv7vxpI4aehrdN9scLjk-dCJkPLzkHxGg,90
3
- local_deep_research-0.5.2.dist-info/entry_points.txt,sha256=GcXS501Rjh-P80S8db7hnrQ23mS_Jg27PwpVQVO77as,113
4
- local_deep_research-0.5.2.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=isJrmDBLRag7Zc2UK9ZovWGOv7ji1Oh-zJtJMNJFkXw,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
@@ -135,11 +135,14 @@ local_deep_research/citation_handlers/forced_answer_citation_handler.py,sha256=o
135
135
  local_deep_research/citation_handlers/precision_extraction_handler.py,sha256=wJkoWzu4ODAZRJoCH5WPZVD96UnsrfBDvW8cE4FCm_Q,19835
136
136
  local_deep_research/citation_handlers/standard_citation_handler.py,sha256=PaJDvkwWOW6J4ZtA1VYSE78F4p3xiMtH1ZvdIBceyDQ,2987
137
137
  local_deep_research/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
138
- local_deep_research/config/llm_config.py,sha256=2f4hoAAGg4yVlsiZZKyLjIWj0u4a3FFzfFKkgFm6Dbs,18775
138
+ local_deep_research/config/llm_config.py,sha256=_IIYxtdn9S3ry2OVrBX9ztLNg3frSp2vNqDcqhie-aY,21512
139
139
  local_deep_research/config/search_config.py,sha256=DP7SbdcqGPu1yxv3fxtqd1vda5pVY3fH66DyDKuzJio,2209
140
140
  local_deep_research/defaults/.env.template,sha256=_eVCy4d_XwpGXy8n50CG3wH9xx2oqJCFKS7IbqgInDk,491
141
141
  local_deep_research/defaults/__init__.py,sha256=EUnb-wRT2mtv6lqM0hB16KfHJkR7d8JBNCIbEKwu48k,1342
142
142
  local_deep_research/defaults/default_settings.json,sha256=0dfTFkplu7wnLJQYLBf4wKER55EmYbp_rMAJ5kgmUXc,124250
143
+ local_deep_research/error_handling/__init__.py,sha256=3kiEhchFP-gDeD_qM3lhtQqeVx7enqIwm_4hBKtohLg,396
144
+ local_deep_research/error_handling/error_reporter.py,sha256=tPBWUftpw6NWIcoRJJbaGaLApx7CQdcz3AppGDWKmnM,8583
145
+ local_deep_research/error_handling/report_generator.py,sha256=EQnKC2uENEWNAhOA2swJTxEG5CEwZDTHY4dlM1s4kM0,17303
143
146
  local_deep_research/metrics/__init__.py,sha256=u1yUJndwNie8Pq3HGx2NxmFCVwIl0EvkxSxiMFpzSyM,331
144
147
  local_deep_research/metrics/database.py,sha256=Nd6jTN__ZLM2lHld9sHT_tiVe3XNFgNeanFhIVuAVhw,1686
145
148
  local_deep_research/metrics/db_models.py,sha256=X3ow1uXjjmZhdARE7MV37pQhr3UQknB1X5iWdTiJtSs,3464
@@ -159,7 +162,6 @@ local_deep_research/migrate_db.py,sha256=-Ql7bC2VmXlWtDOXj7CGVBvBlSk--wHyZCniWJn
159
162
  local_deep_research/report_generator.py,sha256=J7Y7_soTAPkIajzbkIAPeq1ziTsXPMMz4Fwl6C-n6Zw,9282
160
163
  local_deep_research/search_system.py,sha256=BpHhWXj82iVAJajpwyHaYyeBcNKbYY5DG2oxoNDERlo,27194
161
164
  local_deep_research/setup_data_dir.py,sha256=7MJa2MMdDUnktJVHwMpyNL2079-qylpIyyLpVbF5AUY,1134
162
- local_deep_research/test_migration.py,sha256=vzgGkY2EkmvQYJtUGD7Vt14i8jf04oCvNkzMnwuMBzY,6683
163
165
  local_deep_research/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
164
166
  local_deep_research/utilities/db_utils.py,sha256=BE3oP7WRbtlaqOxMrVFoAo11NpTk3RlC9w8tZUC_INU,1681
165
167
  local_deep_research/utilities/enums.py,sha256=yFwmodt93uETdQd7qyW4vOUhiAzZF-BHBbVYHKN7scU,223
@@ -185,28 +187,28 @@ local_deep_research/web/models/settings.py,sha256=rXBI9vY5k3ndR8dPd3fZJy-6HwYltQ
185
187
  local_deep_research/web/routes/api_routes.py,sha256=7hOFqF7Y3Qc5PwugXRoSi1CEVIcXUeW6nSwWayLB0P4,20052
186
188
  local_deep_research/web/routes/benchmark_routes.py,sha256=bXiURrmWoaGtbOQ3jhgXgxjs3Qa440Jqk1CPZ1QMyO0,15725
187
189
  local_deep_research/web/routes/globals.py,sha256=cCCSW0MPxHKNXDy0kGG5HqOz197i1iyqJdWRI72DCWw,454
188
- local_deep_research/web/routes/history_routes.py,sha256=ZKuLJRahQfSzyxVDTm02QqrLgPHNZ1OsUv1kaO-6cbc,12839
190
+ local_deep_research/web/routes/history_routes.py,sha256=fFdZbMBWAQmtgTipWD1zNeRDhXRGAYiJhCmWrlWYaaY,12847
189
191
  local_deep_research/web/routes/metrics_routes.py,sha256=b0fYdhH_OvyvMRjdswA41qPNV4DIWrZjoOnlysEBcAE,41619
190
192
  local_deep_research/web/routes/research_routes.py,sha256=fVMV9WDO2T6XVVH1oU_bCXR1ekg6XNbnvkc61NB-DQs,27964
191
193
  local_deep_research/web/routes/settings_routes.py,sha256=0VZPWSZ9-yQNFNdid_rC4jzqKI2sE0AjucuIstZx548,60600
192
- local_deep_research/web/services/research_service.py,sha256=w0eNd_Q21Ky2dk7GxpFE84zpScDLwjSm_QMLKCEyx1E,43426
194
+ local_deep_research/web/services/research_service.py,sha256=UXzq9Kx5t3fOv4IHKk2fP413XvEEwDzUapF5ehZzAIM,48027
193
195
  local_deep_research/web/services/resource_service.py,sha256=aU7SDADxcIAAuIymL_TOxUV_HvEMAfL8gZSB5gVSzFM,4674
194
196
  local_deep_research/web/services/settings_manager.py,sha256=EsAqZ5LTFFJcrWdCEheQYUqMWCwh7AUGe6Jefi8-Df4,19744
195
197
  local_deep_research/web/services/settings_service.py,sha256=W3TdSb1_WTBdKVQEvi4swXBP99dMm2IT7H-5Y1weEH4,3535
196
198
  local_deep_research/web/services/socket_service.py,sha256=kKV9LbMvgMtuvX32nuZnrMWwS6IzSOM90FxL9nWsfCQ,11904
197
199
  local_deep_research/web/static/css/custom_dropdown.css,sha256=MFRm4HaMGM7X2Z-Yvb-_y20BE1NInSmN1cUJc_v5k4k,11542
198
200
  local_deep_research/web/static/css/settings.css,sha256=QZbjLz8zNQZvM_ROzQOH67ZHZHEQ8WohkIPJlsekqfk,24719
199
- local_deep_research/web/static/css/styles.css,sha256=ABUv1h_0hXY5aSPJfdma9BywQSkqhgao-coKF9PK1vg,35270
200
- 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
201
203
  local_deep_research/web/static/js/components/detail.js,sha256=iVm4n_1n7vw0zo_fngT-uZP9OiY7TK4ozutIi9of_L4,27436
202
204
  local_deep_research/web/static/js/components/details.js,sha256=acDE_KnnTMGn4tGTYq7HMaOGUg9UsjyFeqTgm1VC6kI,29899
203
205
  local_deep_research/web/static/js/components/fallback/formatting.js,sha256=OoP38zcapAV-zvMd5wvjdBgbQFfueVVbKRK89V9aMh4,3294
204
206
  local_deep_research/web/static/js/components/fallback/ui.js,sha256=O4fMeHXodvpFTEgSYR2TmcbL5Kyt2Hq1Tv2O7B3fDpk,7210
205
207
  local_deep_research/web/static/js/components/history.js,sha256=TiE1R1U81L0bOuKhBgmB-9gS-66YNgmi_yIy-rG_5uY,15507
206
208
  local_deep_research/web/static/js/components/logpanel.js,sha256=IiTpKPSEn7KtKT4xh9X6FcMZWfloj5eTDa8Oday2lhs,42808
207
- local_deep_research/web/static/js/components/progress.js,sha256=tw2RchReAeU5mQcN9KgYKD6Qh1uhv2RTsBHL5aOJ1IU,42130
208
- local_deep_research/web/static/js/components/research.js,sha256=EGWDdpswJnvH3GNlmp5albNzMv6-_20uF2D0qB73-zo,86577
209
- local_deep_research/web/static/js/components/results.js,sha256=3gIfl44dxsG0pMG7MHBIRAT7c_R5Lc0A5WakSdTzxV8,35755
209
+ local_deep_research/web/static/js/components/progress.js,sha256=8cydtosQZpdX2MTpYEq9GPARCWV5azKMaRHxYiDvJoM,42542
210
+ local_deep_research/web/static/js/components/research.js,sha256=9oGOTpm0J6nO43qPOWQJsWt9ukLSbAC1MV5AegGnp9E,88282
211
+ local_deep_research/web/static/js/components/results.js,sha256=3kDk0kodglBqIODh_ve0I9ERIZkITz2yB5isUUda-bc,35763
210
212
  local_deep_research/web/static/js/components/settings.js,sha256=qnRxnx9LdyOpjIEKfb4mJdES9sLkNKvyzxy4OGUqmGQ,169998
211
213
  local_deep_research/web/static/js/components/settings_sync.js,sha256=LWDZ2EE8ChCxI5TPmPm9F4rOiYIEzEJxSCE1GLXk-2w,3925
212
214
  local_deep_research/web/static/js/main.js,sha256=z7gJvwL6A7xqAYloen8uoshdOLeRWohM57xsfrCDUuI,8143
@@ -214,7 +216,7 @@ local_deep_research/web/static/js/research_form.js,sha256=qOZK0z_BE_xx2a1sx5vTjs
214
216
  local_deep_research/web/static/js/services/api.js,sha256=AP24hrw6VBrEjQxIMnxrZuGFmrdm9MReSjjZ-AIKqr0,6776
215
217
  local_deep_research/web/static/js/services/audio.js,sha256=JeeTkj485limzvawdiluLSr67QWlb6AyB57u9oTwIw0,857
216
218
  local_deep_research/web/static/js/services/formatting.js,sha256=7XwyJLLvPOdlWReCbHRRVMdvsZxGEfIGRIEDLqZLnnc,3294
217
- 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
218
220
  local_deep_research/web/static/js/services/pdf.js,sha256=SIjoHw44PYuYkF4nIo_47s9m2ifLQMTcNYGdcOj4mf8,26059
219
221
  local_deep_research/web/static/js/services/socket.js,sha256=9h6XOi29nFJ42xGuxT0ZLN-7U1-MMmo9-mGC8KgCjT8,36805
220
222
  local_deep_research/web/static/js/services/ui.js,sha256=XkJCUqhDjfeY58bExyurcFmWCYBbWRHSpsIABmWtU7s,16349
@@ -232,7 +234,7 @@ local_deep_research/web/templates/pages/details.html,sha256=Led51_cv97e_Z057_7QV
232
234
  local_deep_research/web/templates/pages/history.html,sha256=dGeXmpp1WTsd3Em_8k1cscwOJEPO_7puu04KC966QhA,1982
233
235
  local_deep_research/web/templates/pages/metrics.html,sha256=IYG08UNnWAATqCDh0fRskJONKjHTLGgLWcrztiAm0Yg,81507
234
236
  local_deep_research/web/templates/pages/progress.html,sha256=iRKGkgyo9wBKrYAiwk61MbnaDUxeQf8SGP3wGoHWteQ,2546
235
- local_deep_research/web/templates/pages/research.html,sha256=KnIZQ1GiyJ2wRwQWJi9fn2ozzF1x0NL8xaEZsx059QM,9634
237
+ local_deep_research/web/templates/pages/research.html,sha256=4puS2jcJNrcXI_6NPwfvvZiD_uaNhsKtFCdSG03bVqo,10291
236
238
  local_deep_research/web/templates/pages/results.html,sha256=n5tHESU5iRcjwjga4y589r41B9NEqHIvzpMsXlRL0vw,3591
237
239
  local_deep_research/web/templates/pages/star_reviews.html,sha256=Bg3cGwRjNBBSvC9ZoqZqjY-6_0-cM4VZHRGlTai_Wng,24361
238
240
  local_deep_research/web/templates/settings_dashboard.html,sha256=A1fBe1D29v8G3ys94_rIiBP6Ky-rtYL6TRbDluoBMPI,4342
@@ -262,4 +264,4 @@ local_deep_research/web_search_engines/engines/search_engine_wikipedia.py,sha256
262
264
  local_deep_research/web_search_engines/search_engine_base.py,sha256=sRgtszDM9RqNw_oVdmGk8CmKS_9EJYR-LyE1as53cp8,12401
263
265
  local_deep_research/web_search_engines/search_engine_factory.py,sha256=eMaFup2p4u1nP4fTmjzfLUAl_mUZkoE1mUABBIvNzDM,12095
264
266
  local_deep_research/web_search_engines/search_engines_config.py,sha256=oJ5GL9BhFvWFgmFtvwJ7AZ9o-uPLEfTNhJJouHF40iA,5296
265
- local_deep_research-0.5.2.dist-info/RECORD,,
267
+ local_deep_research-0.5.4.dist-info/RECORD,,