search-rotation 0.4.9

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.
Files changed (70) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +124 -0
  3. package/dist/abort.js +14 -0
  4. package/dist/config.js +109 -0
  5. package/dist/engines/base.js +72 -0
  6. package/dist/engines/duckduckgo.js +98 -0
  7. package/dist/engines/exa.js +113 -0
  8. package/dist/engines/firecrawl.js +78 -0
  9. package/dist/engines/googlecse.js +41 -0
  10. package/dist/engines/hosted-mcp.js +24 -0
  11. package/dist/engines/index.js +13 -0
  12. package/dist/engines/jina.js +28 -0
  13. package/dist/engines/parallel.js +74 -0
  14. package/dist/engines/tavily.js +74 -0
  15. package/dist/history.js +59 -0
  16. package/dist/index.js +182 -0
  17. package/dist/mcp/engine-status.js +58 -0
  18. package/dist/mcp/http.js +35 -0
  19. package/dist/mcp/server.js +105 -0
  20. package/dist/persistence.js +80 -0
  21. package/dist/quota.js +37 -0
  22. package/dist/router.js +183 -0
  23. package/dist/search-time.js +31 -0
  24. package/dist/status.js +141 -0
  25. package/dist/types.js +1 -0
  26. package/dist/usage.js +95 -0
  27. package/dist/version.js +5 -0
  28. package/dist/web/app.js +155 -0
  29. package/dist/web/security.js +116 -0
  30. package/docs/assets/brand/FONT-LICENSE.txt +93 -0
  31. package/docs/assets/brand/README.md +18 -0
  32. package/docs/assets/brand/icon-128.png +0 -0
  33. package/docs/assets/brand/icon-32.png +0 -0
  34. package/docs/assets/brand/icon-512.png +0 -0
  35. package/docs/assets/brand/icon-dark-128.png +0 -0
  36. package/docs/assets/brand/icon-dark-512.png +0 -0
  37. package/docs/assets/brand/icon-dark.svg +1 -0
  38. package/docs/assets/brand/icon-light-128.png +0 -0
  39. package/docs/assets/brand/icon-light-512.png +0 -0
  40. package/docs/assets/brand/icon-light.svg +1 -0
  41. package/docs/assets/brand/icon-mono.svg +1 -0
  42. package/docs/assets/brand/icon.svg +1 -0
  43. package/docs/assets/brand/preview.png +0 -0
  44. package/docs/assets/brand/preview.svg +1 -0
  45. package/docs/assets/brand/wordmark-dark.svg +1 -0
  46. package/docs/assets/brand/wordmark-light.svg +1 -0
  47. package/docs/assets/dashboard-dark.png +0 -0
  48. package/docs/assets/dashboard-light.png +0 -0
  49. package/docs/assets/dashboard.png +0 -0
  50. package/docs/assets/mcp-tools-dark.png +0 -0
  51. package/docs/assets/mcp-tools-light.png +0 -0
  52. package/docs/assets/mcp-tools.png +0 -0
  53. package/docs/assets/search-rotation.svg +52 -0
  54. package/docs/clients.md +93 -0
  55. package/docs/operations.md +66 -0
  56. package/docs/provider-access.md +38 -0
  57. package/docs/release-notes.md +52 -0
  58. package/package.json +65 -0
  59. package/static/app.js +1126 -0
  60. package/static/engine-logos/README.md +11 -0
  61. package/static/engine-logos/duckduckgo.png +0 -0
  62. package/static/engine-logos/exa.png +0 -0
  63. package/static/engine-logos/firecrawl.png +0 -0
  64. package/static/engine-logos/google-cse.png +0 -0
  65. package/static/engine-logos/jina.png +0 -0
  66. package/static/engine-logos/parallel.png +0 -0
  67. package/static/engine-logos/tavily.png +0 -0
  68. package/static/i18n.js +709 -0
  69. package/static/index.html +95 -0
  70. package/static/style.css +1258 -0
@@ -0,0 +1,95 @@
1
+ <!doctype html>
2
+ <html lang="en" data-theme="dark">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>search-rotation · LocalFoundry</title>
7
+ <meta name="theme-color" content="#0a0c12">
8
+ <link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0' y1='0' x2='1' y2='1'%3E%3Cstop offset='0' stop-color='%238b7cf7'/%3E%3Cstop offset='1' stop-color='%234dd8e6'/%3E%3C/linearGradient%3E%3C/defs%3E%3Ccircle cx='16' cy='16' r='14' fill='none' stroke='url(%23g)' stroke-width='3.5' stroke-dasharray='66 22' stroke-linecap='round'/%3E%3Ccircle cx='16' cy='16' r='4.5' fill='url(%23g)'/%3E%3C/svg%3E">
9
+ <link rel="stylesheet" href="/style.css">
10
+ </head>
11
+ <body>
12
+
13
+ <!-- SVG-Icon-Sprite -->
14
+ <svg width="0" height="0" style="position:absolute" aria-hidden="true">
15
+ <defs>
16
+ <linearGradient id="logo-grad" x1="0" y1="0" x2="1" y2="1">
17
+ <stop offset="0" stop-color="var(--accent)"/><stop offset="1" stop-color="var(--accent-2)"/>
18
+ </linearGradient>
19
+ </defs>
20
+ <symbol id="i-logo" viewBox="0 0 32 32">
21
+ <circle cx="16" cy="16" r="12.5" fill="none" stroke="url(#logo-grad)" stroke-width="3.2" stroke-dasharray="58 21" stroke-linecap="round"/>
22
+ <circle cx="16" cy="16" r="4" fill="url(#logo-grad)"/>
23
+ </symbol>
24
+ <symbol id="i-gauge" viewBox="0 0 24 24"><path d="M12 4a9 9 0 0 1 9 9c0 1.8-.5 3.4-1.4 4.8H4.4A8.9 8.9 0 0 1 3 13a9 9 0 0 1 9-9Zm0 4.5v4l3 2.5" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></symbol>
25
+ <symbol id="i-stack" viewBox="0 0 24 24"><path d="M4 6.5 12 3l8 3.5-8 3.5-8-3.5Zm0 5.5 8 3.5L20 12M4 17l8 3.5L20 17" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></symbol>
26
+ <symbol id="i-clock" viewBox="0 0 24 24"><circle cx="12" cy="12" r="8.5" fill="none" stroke="currentColor" stroke-width="1.8"/><path d="M12 7.5V12l3 2.5" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/></symbol>
27
+ <symbol id="i-globe" viewBox="0 0 24 24"><circle cx="12" cy="12" r="8.5" fill="none" stroke="currentColor" stroke-width="1.7"/><path d="M3.5 12h17M12 3.5c2.6 2.3 3.9 5.1 3.9 8.5s-1.3 6.2-3.9 8.5c-2.6-2.3-3.9-5.1-3.9-8.5S9.4 5.8 12 3.5Z" fill="none" stroke="currentColor" stroke-width="1.7"/></symbol>
28
+ <symbol id="i-sun" viewBox="0 0 24 24"><circle cx="12" cy="12" r="4" fill="none" stroke="currentColor" stroke-width="1.8"/><path d="M12 2.5v2.6m0 13.8v2.6M2.5 12h2.6m13.8 0h2.6M5 5l1.8 1.8M17.2 17.2 19 19M19 5l-1.8 1.8M6.8 17.2 5 19" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/></symbol>
29
+ <symbol id="i-moon" viewBox="0 0 24 24"><path d="M20 14.5A8.5 8.5 0 0 1 9.5 4 8.5 8.5 0 1 0 20 14.5Z" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"/></symbol>
30
+ <symbol id="i-grip" viewBox="0 0 24 24"><circle cx="9" cy="6" r="1.6"/><circle cx="15" cy="6" r="1.6"/><circle cx="9" cy="12" r="1.6"/><circle cx="15" cy="12" r="1.6"/><circle cx="9" cy="18" r="1.6"/><circle cx="15" cy="18" r="1.6"/></symbol>
31
+ <symbol id="i-chevron" viewBox="0 0 24 24"><path d="m8 10 4 4 4-4" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></symbol>
32
+ <symbol id="i-search" viewBox="0 0 24 24"><circle cx="11" cy="11" r="6.5" fill="none" stroke="currentColor" stroke-width="1.9"/><path d="m16 16 4.5 4.5" stroke="currentColor" stroke-width="1.9" stroke-linecap="round"/></symbol>
33
+ <symbol id="i-link" viewBox="0 0 24 24"><path d="M10 14a4.5 4.5 0 0 0 6.4.4l3-3a4.5 4.5 0 0 0-6.4-6.4l-1.5 1.5M14 10a4.5 4.5 0 0 0-6.4-.4l-3 3a4.5 4.5 0 0 0 6.4 6.4l1.5-1.5" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/></symbol>
34
+ <symbol id="i-trash" viewBox="0 0 24 24"><path d="M4.5 6.5h15M9.5 6V4.5h5V6m-8.5.5.8 13h9.4l.8-13M10 10v6m4-6v6" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"/></symbol>
35
+ <symbol id="i-external" viewBox="0 0 24 24"><path d="M13.5 5H19v5.5M19 5l-8 8M10 5H6.8C5.8 5 5 5.8 5 6.8v10.4c0 1 .8 1.8 1.8 1.8h10.4c1 0 1.8-.8 1.8-1.8V14" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></symbol>
36
+ <symbol id="i-check" viewBox="0 0 24 24"><path d="m5 12.5 4.5 4.5L19 7.5" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/></symbol>
37
+ <symbol id="i-x" viewBox="0 0 24 24"><path d="M6 6l12 12M18 6 6 18" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></symbol>
38
+ <symbol id="i-zap" viewBox="0 0 24 24"><path d="M13 2.5 4.5 13.5H11l-1 8 8.5-11H12l1-8Z" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linejoin="round"/></symbol>
39
+ <symbol id="i-activity" viewBox="0 0 24 24"><path d="M3 12h4l2.5-7 5 14 2.5-7H21" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"/></symbol>
40
+ <symbol id="i-key" viewBox="0 0 24 24"><circle cx="8" cy="14" r="4.5" fill="none" stroke="currentColor" stroke-width="1.8"/><path d="m11.5 10.5 8-8m-3 3 2.5 2.5m-5.5-.5 2.5 2.5" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/></symbol>
41
+ <symbol id="i-alert" viewBox="0 0 24 24"><path d="M12 3.5 21.5 20h-19L12 3.5Z" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"/><path d="M12 10v4.5" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/><circle cx="12" cy="17.2" r="1.1" /></symbol>
42
+ <symbol id="i-arrow" viewBox="0 0 24 24"><path d="M4 12h15m-5.5-5.5L19 12l-5.5 5.5" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"/></symbol>
43
+ </svg>
44
+
45
+ <header class="topbar">
46
+ <div class="topbar-inner">
47
+ <a class="brand" href="#/" aria-label="search-rotation">
48
+ <svg class="brand-mark" width="30" height="30"><use href="#i-logo"/></svg>
49
+ <span class="brand-name">search<span class="brand-accent">-</span>rotation</span>
50
+ <span class="brand-ver" id="version"></span>
51
+ </a>
52
+
53
+ <nav class="nav" id="nav" aria-label="Hauptnavigation">
54
+ <span class="nav-ind" id="nav-ind"></span>
55
+ <a class="nav-tab" href="#/" data-route="/" data-i18n="nav.overview"><svg width="16" height="16"><use href="#i-gauge"/></svg><span data-i18n="nav.overview"></span></a>
56
+ <a class="nav-tab" href="#/engines" data-route="/engines"><svg width="16" height="16"><use href="#i-stack"/></svg><span data-i18n="nav.engines"></span></a>
57
+ <a class="nav-tab" href="#/history" data-route="/history"><svg width="16" height="16"><use href="#i-clock"/></svg><span data-i18n="nav.history"></span></a>
58
+ <a class="nav-tab" href="#/tools" data-route="/tools"><svg width="16" height="16"><use href="#i-stack"/></svg><span data-i18n="nav.tools"></span></a>
59
+ </nav>
60
+
61
+ <div class="topbar-actions">
62
+ <div class="dropdown" id="lang">
63
+ <button class="icon-btn" id="lang-btn" aria-haspopup="menu" aria-expanded="false" data-i18n-title="lang.menu">
64
+ <svg width="18" height="18"><use href="#i-globe"/></svg>
65
+ <span class="lang-code" id="lang-code">DE</span>
66
+ </button>
67
+ <div class="menu" id="lang-menu" role="menu" hidden>
68
+ <button role="menuitem" data-lang="de">Deutsch</button>
69
+ <button role="menuitem" data-lang="en">English</button>
70
+ <button role="menuitem" data-lang="zh">中文</button>
71
+ <button role="menuitem" data-lang="hi">हिन्दी</button>
72
+ <button role="menuitem" data-lang="es">Español</button>
73
+ <button role="menuitem" data-lang="fr">Français</button>
74
+ </div>
75
+ </div>
76
+ <button class="icon-btn" id="theme-btn" data-i18n-title="theme.toLight">
77
+ <svg width="18" height="18" id="theme-icon"><use href="#i-sun"/></svg>
78
+ </button>
79
+ </div>
80
+ </div>
81
+ </header>
82
+
83
+ <main class="view" id="view" aria-live="polite"></main>
84
+
85
+ <footer class="footer">
86
+ <span><strong>LocalFoundry</strong> · <span data-i18n="footer.text"></span></span>
87
+ <span class="footer-meta"><code id="configpath"></code></span>
88
+ </footer>
89
+
90
+ <div class="toasts" id="toasts" aria-live="polite"></div>
91
+
92
+ <script src="/i18n.js"></script>
93
+ <script src="/app.js"></script>
94
+ </body>
95
+ </html>