@runcore-sh/runcore 0.5.6 → 0.5.8

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 (191) hide show
  1. package/dictionary.json +2 -2
  2. package/dist/.extensions/ext-byok.json +1 -0
  3. package/dist/.extensions/ext-hosted.json +1 -0
  4. package/dist/.extensions/ext-spawn.json +1 -0
  5. package/dist/agents/autonomous.d.ts.map +1 -1
  6. package/dist/agents/runtime/bus.d.ts +1 -0
  7. package/dist/agents/runtime/bus.d.ts.map +1 -1
  8. package/dist/agents/spawn.d.ts.map +1 -1
  9. package/dist/auth/middleware.d.ts.map +1 -1
  10. package/dist/auth/middleware.js +3 -2
  11. package/dist/auth/middleware.js.map +1 -1
  12. package/dist/calendar/routes.d.ts.map +1 -1
  13. package/dist/calendar/routes.js +8 -7
  14. package/dist/calendar/routes.js.map +1 -1
  15. package/dist/files/registry.d.ts +4 -5
  16. package/dist/files/registry.d.ts.map +1 -1
  17. package/dist/files/registry.js +4 -5
  18. package/dist/files/registry.js.map +1 -1
  19. package/dist/files/store.d.ts +2 -0
  20. package/dist/files/store.d.ts.map +1 -1
  21. package/dist/files/store.js +5 -1
  22. package/dist/files/store.js.map +1 -1
  23. package/dist/instance.d.ts +2 -0
  24. package/dist/instance.d.ts.map +1 -1
  25. package/dist/instance.js +2 -0
  26. package/dist/instance.js.map +1 -1
  27. package/dist/lib/paths.d.ts.map +1 -1
  28. package/dist/lib/paths.js +15 -1
  29. package/dist/lib/paths.js.map +1 -1
  30. package/dist/library/brain-shadow.d.ts.map +1 -1
  31. package/dist/library/brain-shadow.js +5 -4
  32. package/dist/library/brain-shadow.js.map +1 -1
  33. package/dist/library/routes.d.ts.map +1 -1
  34. package/dist/library/routes.js +10 -9
  35. package/dist/library/routes.js.map +1 -1
  36. package/dist/llm/cache.d.ts.map +1 -1
  37. package/dist/llm/cache.js +7 -5
  38. package/dist/llm/cache.js.map +1 -1
  39. package/dist/llm/complete.js +2 -0
  40. package/dist/llm/complete.js.map +1 -1
  41. package/dist/llm/providers/ollama.d.ts.map +1 -1
  42. package/dist/llm/providers/ollama.js +32 -7
  43. package/dist/llm/providers/ollama.js.map +1 -1
  44. package/dist/llm/providers/openrouter.d.ts.map +1 -1
  45. package/dist/llm/providers/openrouter.js +105 -12
  46. package/dist/llm/providers/openrouter.js.map +1 -1
  47. package/dist/llm/providers/types.d.ts +18 -0
  48. package/dist/llm/providers/types.d.ts.map +1 -1
  49. package/dist/llm/retry.d.ts.map +1 -1
  50. package/dist/llm/retry.js +6 -0
  51. package/dist/llm/retry.js.map +1 -1
  52. package/dist/llm/tools/handlers.d.ts +27 -0
  53. package/dist/llm/tools/handlers.d.ts.map +1 -0
  54. package/dist/llm/tools/handlers.js +842 -0
  55. package/dist/llm/tools/handlers.js.map +1 -0
  56. package/dist/llm/tools/index.d.ts +12 -0
  57. package/dist/llm/tools/index.d.ts.map +1 -0
  58. package/dist/llm/tools/index.js +10 -0
  59. package/dist/llm/tools/index.js.map +1 -0
  60. package/dist/llm/tools/loop.d.ts +47 -0
  61. package/dist/llm/tools/loop.d.ts.map +1 -0
  62. package/dist/llm/tools/loop.js +126 -0
  63. package/dist/llm/tools/loop.js.map +1 -0
  64. package/dist/llm/tools/registry.d.ts +27 -0
  65. package/dist/llm/tools/registry.d.ts.map +1 -0
  66. package/dist/llm/tools/registry.js +60 -0
  67. package/dist/llm/tools/registry.js.map +1 -0
  68. package/dist/llm/tools/schemas.d.ts +92 -0
  69. package/dist/llm/tools/schemas.d.ts.map +1 -0
  70. package/dist/llm/tools/schemas.js +154 -0
  71. package/dist/llm/tools/schemas.js.map +1 -0
  72. package/dist/llm/tools/types.d.ts +44 -0
  73. package/dist/llm/tools/types.d.ts.map +1 -0
  74. package/dist/llm/tools/types.js +9 -0
  75. package/dist/llm/tools/types.js.map +1 -0
  76. package/dist/mcp-server.d.ts +1 -1
  77. package/dist/mcp-server.js +249 -5
  78. package/dist/mcp-server.js.map +1 -1
  79. package/dist/memory/visual.d.ts.map +1 -1
  80. package/dist/memory/visual.js +3 -6
  81. package/dist/memory/visual.js.map +1 -1
  82. package/dist/openloop/foldback.js +1 -1
  83. package/dist/openloop/foldback.js.map +1 -1
  84. package/dist/openloop/resolution-scanner.d.ts.map +1 -1
  85. package/dist/openloop/resolution-scanner.js +76 -63
  86. package/dist/openloop/resolution-scanner.js.map +1 -1
  87. package/dist/plugins/github/index.d.ts +49 -0
  88. package/dist/plugins/github/index.d.ts.map +1 -0
  89. package/dist/plugins/github/index.js +153 -0
  90. package/dist/plugins/github/index.js.map +1 -0
  91. package/dist/plugins/index.d.ts +1 -2
  92. package/dist/plugins/index.d.ts.map +1 -1
  93. package/dist/plugins/index.js +79 -2
  94. package/dist/plugins/index.js.map +1 -1
  95. package/dist/plugins/slack/index.d.ts +43 -0
  96. package/dist/plugins/slack/index.d.ts.map +1 -0
  97. package/dist/plugins/slack/index.js +158 -0
  98. package/dist/plugins/slack/index.js.map +1 -0
  99. package/dist/plugins/twilio/index.d.ts +41 -0
  100. package/dist/plugins/twilio/index.d.ts.map +1 -0
  101. package/dist/plugins/twilio/index.js +102 -0
  102. package/dist/plugins/twilio/index.js.map +1 -0
  103. package/dist/pulse/tier.d.ts +1 -1
  104. package/dist/pulse/tier.js +2 -2
  105. package/dist/pulse/tier.js.map +1 -1
  106. package/dist/search/gemini.d.ts +27 -0
  107. package/dist/search/gemini.d.ts.map +1 -0
  108. package/dist/search/gemini.js +103 -0
  109. package/dist/search/gemini.js.map +1 -0
  110. package/dist/server.d.ts.map +1 -1
  111. package/dist/server.js +850 -536
  112. package/dist/server.js.map +1 -1
  113. package/dist/services/routine-patterns.d.ts.map +1 -1
  114. package/dist/services/routine-patterns.js +6 -0
  115. package/dist/services/routine-patterns.js.map +1 -1
  116. package/dist/services/traceInsights.d.ts +5 -0
  117. package/dist/services/traceInsights.d.ts.map +1 -1
  118. package/dist/services/traceInsights.js +18 -1
  119. package/dist/services/traceInsights.js.map +1 -1
  120. package/dist/settings.d.ts +1 -1
  121. package/dist/settings.d.ts.map +1 -1
  122. package/dist/types.d.ts +26 -2
  123. package/dist/types.d.ts.map +1 -1
  124. package/dist/vault/store.d.ts +1 -1
  125. package/dist/vault/store.d.ts.map +1 -1
  126. package/dist/webhooks/mount.d.ts.map +1 -1
  127. package/dist/whiteboard/store.d.ts +40 -0
  128. package/dist/whiteboard/store.d.ts.map +1 -0
  129. package/dist/whiteboard/store.js +280 -0
  130. package/dist/whiteboard/store.js.map +1 -0
  131. package/dist/whiteboard/types.d.ts +55 -0
  132. package/dist/whiteboard/types.d.ts.map +1 -0
  133. package/dist/whiteboard/types.js +9 -0
  134. package/dist/whiteboard/types.js.map +1 -0
  135. package/dist/whiteboard/weight.d.ts +23 -0
  136. package/dist/whiteboard/weight.d.ts.map +1 -0
  137. package/dist/whiteboard/weight.js +126 -0
  138. package/dist/whiteboard/weight.js.map +1 -0
  139. package/package.json +3 -2
  140. package/public/index.html +225 -51
  141. package/public/search-flyout.js +324 -0
  142. package/public/whiteboard.html +915 -0
  143. package/public/avatar/Hey-Dash_en_windows_v4_0_0.zip +0 -0
  144. package/public/avatar/README.md +0 -43
  145. package/public/avatar/cache/06fa55aececcc478.mp4 +0 -0
  146. package/public/avatar/cache/07a65738ba170827.mp4 +0 -0
  147. package/public/avatar/cache/08b6f4880f59a385.mp4 +0 -0
  148. package/public/avatar/cache/0ef9e0e78d715af4.mp4 +0 -0
  149. package/public/avatar/cache/0fa85e9e8f444a8b.mp4 +0 -0
  150. package/public/avatar/cache/1184385ec5522b57.mp4 +0 -0
  151. package/public/avatar/cache/1185fd491f413406.mp4 +0 -0
  152. package/public/avatar/cache/1b374d5390258fea.mp4 +0 -0
  153. package/public/avatar/cache/1e2367029b92f8aa.mp4 +0 -0
  154. package/public/avatar/cache/1f15f6a1ebd7e439.mp4 +0 -0
  155. package/public/avatar/cache/272c004a41087de5.mp4 +0 -0
  156. package/public/avatar/cache/2a0f3ff34d92521a.mp4 +0 -0
  157. package/public/avatar/cache/2c7e47ff0bdeb8d1.mp4 +0 -0
  158. package/public/avatar/cache/307a6f70859aeab8.mp4 +0 -0
  159. package/public/avatar/cache/332384e088ca214b.mp4 +0 -0
  160. package/public/avatar/cache/39fc4e81574d14ed.mp4 +0 -0
  161. package/public/avatar/cache/4a5c6051c1ef6a71.mp4 +0 -0
  162. package/public/avatar/cache/51f4aa76398c8c29.mp4 +0 -0
  163. package/public/avatar/cache/5d9a960bbf71732c.mp4 +0 -0
  164. package/public/avatar/cache/5e0954401e15af89.mp4 +0 -0
  165. package/public/avatar/cache/5f308566f7abb8f2.mp4 +0 -0
  166. package/public/avatar/cache/62f9cfba848d724e.mp4 +0 -0
  167. package/public/avatar/cache/6d64e657e6bf2aab.mp4 +0 -0
  168. package/public/avatar/cache/763ad0349e0b6f26.mp4 +0 -0
  169. package/public/avatar/cache/81a516cfd461b2b9.mp4 +0 -0
  170. package/public/avatar/cache/884ae6717fcacdd5.mp4 +0 -0
  171. package/public/avatar/cache/8ea0b7220d139615.mp4 +0 -0
  172. package/public/avatar/cache/9366de15fd6910ca.mp4 +0 -0
  173. package/public/avatar/cache/9b9c4f7b8508eecc.mp4 +0 -0
  174. package/public/avatar/cache/9be1030ec2aa2b01.mp4 +0 -0
  175. package/public/avatar/cache/ade41a846b283895.mp4 +0 -0
  176. package/public/avatar/cache/b35f7a3d558f22cb.mp4 +0 -0
  177. package/public/avatar/cache/b6066e5c65383eec.mp4 +0 -0
  178. package/public/avatar/cache/be89f49970672374.mp4 +0 -0
  179. package/public/avatar/cache/c11fdc99479492b6.mp4 +0 -0
  180. package/public/avatar/cache/c900811e3382ac6d.mp4 +0 -0
  181. package/public/avatar/cache/d42a73667acf5716.mp4 +0 -0
  182. package/public/avatar/cache/e539f247a8908603.mp4 +0 -0
  183. package/public/avatar/cache/e78fceae2373b7c1.mp4 +0 -0
  184. package/public/avatar/cache/ec95af57d33b3f07.mp4 +0 -0
  185. package/public/avatar/cache/edadb75d37891fc7.mp4 +0 -0
  186. package/public/avatar/cache/eeb8d775f40dbe2c.mp4 +0 -0
  187. package/public/avatar/cache/f0ae159640621dd9.mp4 +0 -0
  188. package/public/avatar/cache/fc2e5419adf29d96.mp4 +0 -0
  189. package/public/avatar/dash_headhshot_v1.png +0 -0
  190. package/public/avatar/idle.mp4 +0 -0
  191. package/public/avatar/photo.png +0 -0
@@ -0,0 +1,324 @@
1
+ /**
2
+ * Search Flyout — Gemini-powered quick search modal.
3
+ *
4
+ * A small, mobile-search-sized popup for looking something up fast.
5
+ * Opens with Ctrl+K (or Cmd+K on Mac), or via window.openSearchFlyout().
6
+ * Self-contained: injects its own styles and DOM on first use.
7
+ *
8
+ * Usage: <script src="/search-flyout.js"></script>
9
+ */
10
+ (function () {
11
+ "use strict";
12
+
13
+ let overlay = null;
14
+ let input = null;
15
+ let resultsEl = null;
16
+ let statusEl = null;
17
+ let abortController = null;
18
+
19
+ function getSessionId() {
20
+ return window.sessionId || localStorage.getItem("sessionId") || "";
21
+ }
22
+
23
+ function authHeaders() {
24
+ var h = {};
25
+ var t = localStorage.getItem("authToken");
26
+ if (t) h["Authorization"] = "Bearer " + t;
27
+ return h;
28
+ }
29
+
30
+ function injectStyles() {
31
+ if (document.getElementById("search-flyout-styles")) return;
32
+ var style = document.createElement("style");
33
+ style.id = "search-flyout-styles";
34
+ style.textContent = `
35
+ .search-flyout-overlay {
36
+ position: fixed;
37
+ inset: 0;
38
+ z-index: 9500;
39
+ display: none;
40
+ align-items: flex-start;
41
+ justify-content: center;
42
+ padding-top: min(20vh, 120px);
43
+ background: rgba(0,0,0,0.5);
44
+ backdrop-filter: blur(4px);
45
+ -webkit-backdrop-filter: blur(4px);
46
+ }
47
+ .search-flyout-overlay.open {
48
+ display: flex;
49
+ }
50
+ .search-flyout {
51
+ width: 420px;
52
+ max-width: 92vw;
53
+ max-height: 70vh;
54
+ background: #1a1a1f;
55
+ border: 1px solid #2a2a33;
56
+ border-radius: 14px;
57
+ box-shadow: 0 20px 60px rgba(0,0,0,0.5);
58
+ display: flex;
59
+ flex-direction: column;
60
+ overflow: hidden;
61
+ animation: search-flyout-in 0.15s ease-out;
62
+ }
63
+ @keyframes search-flyout-in {
64
+ from { opacity: 0; transform: translateY(-12px) scale(0.97); }
65
+ to { opacity: 1; transform: translateY(0) scale(1); }
66
+ }
67
+ .search-flyout-header {
68
+ display: flex;
69
+ align-items: center;
70
+ gap: 10px;
71
+ padding: 14px 16px 10px;
72
+ border-bottom: 1px solid #2a2a33;
73
+ }
74
+ .search-flyout-icon {
75
+ width: 20px;
76
+ height: 20px;
77
+ opacity: 0.5;
78
+ flex-shrink: 0;
79
+ }
80
+ .search-flyout-input {
81
+ flex: 1;
82
+ background: none;
83
+ border: none;
84
+ outline: none;
85
+ color: #e0e0e0;
86
+ font-size: 15px;
87
+ font-family: inherit;
88
+ line-height: 1.4;
89
+ }
90
+ .search-flyout-input::placeholder {
91
+ color: #555;
92
+ }
93
+ .search-flyout-kbd {
94
+ font-size: 11px;
95
+ color: #555;
96
+ background: #252530;
97
+ padding: 2px 6px;
98
+ border-radius: 4px;
99
+ border: 1px solid #333;
100
+ flex-shrink: 0;
101
+ }
102
+ .search-flyout-body {
103
+ flex: 1;
104
+ overflow-y: auto;
105
+ padding: 0;
106
+ scrollbar-width: thin;
107
+ scrollbar-color: #333 transparent;
108
+ }
109
+ .search-flyout-status {
110
+ padding: 24px 16px;
111
+ text-align: center;
112
+ color: #555;
113
+ font-size: 13px;
114
+ }
115
+ .search-flyout-status.error {
116
+ color: #e57373;
117
+ }
118
+ .search-flyout-answer {
119
+ padding: 14px 16px;
120
+ color: #ccc;
121
+ font-size: 14px;
122
+ line-height: 1.6;
123
+ }
124
+ .search-flyout-answer p {
125
+ margin: 0 0 8px;
126
+ }
127
+ .search-flyout-answer p:last-child {
128
+ margin-bottom: 0;
129
+ }
130
+ .search-flyout-answer strong, .search-flyout-answer b {
131
+ color: #e0e0e0;
132
+ }
133
+ .search-flyout-answer code {
134
+ background: #252530;
135
+ padding: 1px 5px;
136
+ border-radius: 3px;
137
+ font-size: 13px;
138
+ }
139
+ .search-flyout-sources {
140
+ border-top: 1px solid #2a2a33;
141
+ padding: 10px 16px 14px;
142
+ }
143
+ .search-flyout-sources-label {
144
+ font-size: 11px;
145
+ color: #555;
146
+ text-transform: uppercase;
147
+ letter-spacing: 0.5px;
148
+ margin-bottom: 6px;
149
+ }
150
+ .search-flyout-source {
151
+ display: block;
152
+ color: #7c6fef;
153
+ text-decoration: none;
154
+ font-size: 13px;
155
+ padding: 3px 0;
156
+ overflow: hidden;
157
+ text-overflow: ellipsis;
158
+ white-space: nowrap;
159
+ }
160
+ .search-flyout-source:hover {
161
+ color: #9d93f7;
162
+ text-decoration: underline;
163
+ }
164
+ .search-flyout-loading {
165
+ display: inline-block;
166
+ width: 16px;
167
+ height: 16px;
168
+ border: 2px solid #333;
169
+ border-top-color: #7c6fef;
170
+ border-radius: 50%;
171
+ animation: search-spin 0.6s linear infinite;
172
+ margin-right: 8px;
173
+ vertical-align: middle;
174
+ }
175
+ @keyframes search-spin {
176
+ to { transform: rotate(360deg); }
177
+ }
178
+ `;
179
+ document.head.appendChild(style);
180
+ }
181
+
182
+ function injectDOM() {
183
+ if (overlay) return;
184
+ injectStyles();
185
+
186
+ overlay = document.createElement("div");
187
+ overlay.className = "search-flyout-overlay";
188
+ overlay.addEventListener("click", function (e) {
189
+ if (e.target === overlay) closeFlyout();
190
+ });
191
+
192
+ overlay.innerHTML = `
193
+ <div class="search-flyout">
194
+ <div class="search-flyout-header">
195
+ <svg class="search-flyout-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>
196
+ <input class="search-flyout-input" type="text" placeholder="Search with Gemini..." autocomplete="off" spellcheck="false" />
197
+ <span class="search-flyout-kbd">esc</span>
198
+ </div>
199
+ <div class="search-flyout-body">
200
+ <div class="search-flyout-status">Type a question and press Enter</div>
201
+ <div class="search-flyout-results" style="display:none"></div>
202
+ </div>
203
+ </div>
204
+ `;
205
+
206
+ document.body.appendChild(overlay);
207
+
208
+ input = overlay.querySelector(".search-flyout-input");
209
+ resultsEl = overlay.querySelector(".search-flyout-results");
210
+ statusEl = overlay.querySelector(".search-flyout-status");
211
+
212
+ input.addEventListener("keydown", function (e) {
213
+ if (e.key === "Enter" && input.value.trim()) {
214
+ e.preventDefault();
215
+ doSearch(input.value.trim());
216
+ }
217
+ if (e.key === "Escape") {
218
+ closeFlyout();
219
+ }
220
+ });
221
+ }
222
+
223
+ function openFlyout() {
224
+ injectDOM();
225
+ overlay.classList.add("open");
226
+ input.value = "";
227
+ resultsEl.style.display = "none";
228
+ resultsEl.innerHTML = "";
229
+ statusEl.style.display = "";
230
+ statusEl.className = "search-flyout-status";
231
+ statusEl.textContent = "Type a question and press Enter";
232
+ setTimeout(function () { input.focus(); }, 50);
233
+ }
234
+
235
+ function closeFlyout() {
236
+ if (!overlay) return;
237
+ overlay.classList.remove("open");
238
+ if (abortController) {
239
+ abortController.abort();
240
+ abortController = null;
241
+ }
242
+ }
243
+
244
+ async function doSearch(query) {
245
+ if (abortController) abortController.abort();
246
+ abortController = new AbortController();
247
+
248
+ statusEl.style.display = "";
249
+ statusEl.className = "search-flyout-status";
250
+ statusEl.innerHTML = '<span class="search-flyout-loading"></span>Searching...';
251
+ resultsEl.style.display = "none";
252
+ resultsEl.innerHTML = "";
253
+
254
+ try {
255
+ var res = await fetch("/api/search/gemini?sessionId=" + encodeURIComponent(getSessionId()), {
256
+ method: "POST",
257
+ headers: Object.assign({ "Content-Type": "application/json" }, authHeaders()),
258
+ body: JSON.stringify({ query: query }),
259
+ signal: abortController.signal,
260
+ });
261
+
262
+ var data = await res.json();
263
+
264
+ if (!data.ok) {
265
+ statusEl.className = "search-flyout-status error";
266
+ statusEl.textContent = data.message || "Search failed";
267
+ return;
268
+ }
269
+
270
+ statusEl.style.display = "none";
271
+ resultsEl.style.display = "";
272
+
273
+ // Render answer
274
+ var answerHtml = '<div class="search-flyout-answer">';
275
+ // Simple markdown-ish rendering: bold, code, paragraphs
276
+ var text = data.answer || "No answer returned.";
277
+ text = text
278
+ .replace(/&/g, "&amp;")
279
+ .replace(/</g, "&lt;")
280
+ .replace(/>/g, "&gt;")
281
+ .replace(/\*\*(.*?)\*\*/g, "<strong>$1</strong>")
282
+ .replace(/`(.*?)`/g, "<code>$1</code>")
283
+ .replace(/\n\n+/g, "</p><p>")
284
+ .replace(/\n/g, "<br>");
285
+ answerHtml += "<p>" + text + "</p>";
286
+ answerHtml += "</div>";
287
+
288
+ // Render sources
289
+ if (data.sources && data.sources.length > 0) {
290
+ answerHtml += '<div class="search-flyout-sources">';
291
+ answerHtml += '<div class="search-flyout-sources-label">Sources</div>';
292
+ for (var i = 0; i < data.sources.length && i < 5; i++) {
293
+ var s = data.sources[i];
294
+ var title = (s.title || s.url).replace(/&/g, "&amp;").replace(/</g, "&lt;");
295
+ var href = s.url.replace(/"/g, "&quot;");
296
+ answerHtml += '<a class="search-flyout-source" href="' + href + '" target="_blank" rel="noopener">' + title + "</a>";
297
+ }
298
+ answerHtml += "</div>";
299
+ }
300
+
301
+ resultsEl.innerHTML = answerHtml;
302
+ } catch (err) {
303
+ if (err.name === "AbortError") return;
304
+ statusEl.className = "search-flyout-status error";
305
+ statusEl.textContent = err.message || "Search failed";
306
+ }
307
+ }
308
+
309
+ // Keyboard shortcut: Ctrl+K / Cmd+K
310
+ document.addEventListener("keydown", function (e) {
311
+ if ((e.ctrlKey || e.metaKey) && e.key === "k") {
312
+ e.preventDefault();
313
+ if (overlay && overlay.classList.contains("open")) {
314
+ closeFlyout();
315
+ } else {
316
+ openFlyout();
317
+ }
318
+ }
319
+ });
320
+
321
+ // Global API
322
+ window.openSearchFlyout = openFlyout;
323
+ window.closeSearchFlyout = closeFlyout;
324
+ })();