@snoglobe/helios 0.1.0

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 (327) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +222 -0
  3. package/dist/app.d.ts +9 -0
  4. package/dist/app.d.ts.map +1 -0
  5. package/dist/app.js +289 -0
  6. package/dist/app.js.map +1 -0
  7. package/dist/core/agent-loop.d.ts +16 -0
  8. package/dist/core/agent-loop.d.ts.map +1 -0
  9. package/dist/core/agent-loop.js +64 -0
  10. package/dist/core/agent-loop.js.map +1 -0
  11. package/dist/core/monitor.d.ts +15 -0
  12. package/dist/core/monitor.d.ts.map +1 -0
  13. package/dist/core/monitor.js +40 -0
  14. package/dist/core/monitor.js.map +1 -0
  15. package/dist/core/orchestrator.d.ts +51 -0
  16. package/dist/core/orchestrator.d.ts.map +1 -0
  17. package/dist/core/orchestrator.js +235 -0
  18. package/dist/core/orchestrator.js.map +1 -0
  19. package/dist/core/state-machine.d.ts +19 -0
  20. package/dist/core/state-machine.d.ts.map +1 -0
  21. package/dist/core/state-machine.js +42 -0
  22. package/dist/core/state-machine.js.map +1 -0
  23. package/dist/core/stickies.d.ts +20 -0
  24. package/dist/core/stickies.d.ts.map +1 -0
  25. package/dist/core/stickies.js +41 -0
  26. package/dist/core/stickies.js.map +1 -0
  27. package/dist/index.d.ts +3 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +68 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/memory/context-gate.d.ts +49 -0
  32. package/dist/memory/context-gate.d.ts.map +1 -0
  33. package/dist/memory/context-gate.js +109 -0
  34. package/dist/memory/context-gate.js.map +1 -0
  35. package/dist/memory/experiment-tracker.d.ts +21 -0
  36. package/dist/memory/experiment-tracker.d.ts.map +1 -0
  37. package/dist/memory/experiment-tracker.js +117 -0
  38. package/dist/memory/experiment-tracker.js.map +1 -0
  39. package/dist/memory/memory-store.d.ts +37 -0
  40. package/dist/memory/memory-store.d.ts.map +1 -0
  41. package/dist/memory/memory-store.js +150 -0
  42. package/dist/memory/memory-store.js.map +1 -0
  43. package/dist/memory/token-estimator.d.ts +7 -0
  44. package/dist/memory/token-estimator.d.ts.map +1 -0
  45. package/dist/memory/token-estimator.js +30 -0
  46. package/dist/memory/token-estimator.js.map +1 -0
  47. package/dist/metrics/analyzer.d.ts +15 -0
  48. package/dist/metrics/analyzer.d.ts.map +1 -0
  49. package/dist/metrics/analyzer.js +67 -0
  50. package/dist/metrics/analyzer.js.map +1 -0
  51. package/dist/metrics/collector.d.ts +23 -0
  52. package/dist/metrics/collector.d.ts.map +1 -0
  53. package/dist/metrics/collector.js +60 -0
  54. package/dist/metrics/collector.js.map +1 -0
  55. package/dist/metrics/parser.d.ts +21 -0
  56. package/dist/metrics/parser.d.ts.map +1 -0
  57. package/dist/metrics/parser.js +43 -0
  58. package/dist/metrics/parser.js.map +1 -0
  59. package/dist/metrics/parsers/csv.d.ts +8 -0
  60. package/dist/metrics/parsers/csv.d.ts.map +1 -0
  61. package/dist/metrics/parsers/csv.js +37 -0
  62. package/dist/metrics/parsers/csv.js.map +1 -0
  63. package/dist/metrics/parsers/json.d.ts +8 -0
  64. package/dist/metrics/parsers/json.d.ts.map +1 -0
  65. package/dist/metrics/parsers/json.js +42 -0
  66. package/dist/metrics/parsers/json.js.map +1 -0
  67. package/dist/metrics/parsers/stdout.d.ts +3 -0
  68. package/dist/metrics/parsers/stdout.d.ts.map +1 -0
  69. package/dist/metrics/parsers/stdout.js +79 -0
  70. package/dist/metrics/parsers/stdout.js.map +1 -0
  71. package/dist/metrics/parsers/tensorboard.d.ts +16 -0
  72. package/dist/metrics/parsers/tensorboard.d.ts.map +1 -0
  73. package/dist/metrics/parsers/tensorboard.js +22 -0
  74. package/dist/metrics/parsers/tensorboard.js.map +1 -0
  75. package/dist/metrics/store.d.ts +33 -0
  76. package/dist/metrics/store.d.ts.map +1 -0
  77. package/dist/metrics/store.js +141 -0
  78. package/dist/metrics/store.js.map +1 -0
  79. package/dist/providers/auth/auth-manager.d.ts +22 -0
  80. package/dist/providers/auth/auth-manager.d.ts.map +1 -0
  81. package/dist/providers/auth/auth-manager.js +77 -0
  82. package/dist/providers/auth/auth-manager.js.map +1 -0
  83. package/dist/providers/auth/token-store.d.ts +14 -0
  84. package/dist/providers/auth/token-store.d.ts.map +1 -0
  85. package/dist/providers/auth/token-store.js +55 -0
  86. package/dist/providers/auth/token-store.js.map +1 -0
  87. package/dist/providers/claude/provider.d.ts +46 -0
  88. package/dist/providers/claude/provider.d.ts.map +1 -0
  89. package/dist/providers/claude/provider.js +606 -0
  90. package/dist/providers/claude/provider.js.map +1 -0
  91. package/dist/providers/openai/callback-server.d.ts +11 -0
  92. package/dist/providers/openai/callback-server.d.ts.map +1 -0
  93. package/dist/providers/openai/callback-server.js +58 -0
  94. package/dist/providers/openai/callback-server.js.map +1 -0
  95. package/dist/providers/openai/oauth.d.ts +16 -0
  96. package/dist/providers/openai/oauth.d.ts.map +1 -0
  97. package/dist/providers/openai/oauth.js +110 -0
  98. package/dist/providers/openai/oauth.js.map +1 -0
  99. package/dist/providers/openai/provider.d.ts +29 -0
  100. package/dist/providers/openai/provider.d.ts.map +1 -0
  101. package/dist/providers/openai/provider.js +363 -0
  102. package/dist/providers/openai/provider.js.map +1 -0
  103. package/dist/providers/retry.d.ts +6 -0
  104. package/dist/providers/retry.d.ts.map +1 -0
  105. package/dist/providers/retry.js +13 -0
  106. package/dist/providers/retry.js.map +1 -0
  107. package/dist/providers/sse.d.ts +6 -0
  108. package/dist/providers/sse.d.ts.map +1 -0
  109. package/dist/providers/sse.js +35 -0
  110. package/dist/providers/sse.js.map +1 -0
  111. package/dist/providers/types.d.ts +102 -0
  112. package/dist/providers/types.d.ts.map +1 -0
  113. package/dist/providers/types.js +11 -0
  114. package/dist/providers/types.js.map +1 -0
  115. package/dist/remote/config.d.ts +14 -0
  116. package/dist/remote/config.d.ts.map +1 -0
  117. package/dist/remote/config.js +81 -0
  118. package/dist/remote/config.js.map +1 -0
  119. package/dist/remote/connection-pool.d.ts +26 -0
  120. package/dist/remote/connection-pool.d.ts.map +1 -0
  121. package/dist/remote/connection-pool.js +268 -0
  122. package/dist/remote/connection-pool.js.map +1 -0
  123. package/dist/remote/executor.d.ts +23 -0
  124. package/dist/remote/executor.d.ts.map +1 -0
  125. package/dist/remote/executor.js +53 -0
  126. package/dist/remote/executor.js.map +1 -0
  127. package/dist/remote/file-sync.d.ts +19 -0
  128. package/dist/remote/file-sync.d.ts.map +1 -0
  129. package/dist/remote/file-sync.js +44 -0
  130. package/dist/remote/file-sync.js.map +1 -0
  131. package/dist/remote/types.d.ts +33 -0
  132. package/dist/remote/types.d.ts.map +1 -0
  133. package/dist/remote/types.js +2 -0
  134. package/dist/remote/types.js.map +1 -0
  135. package/dist/scheduler/sleep-manager.d.ts +33 -0
  136. package/dist/scheduler/sleep-manager.d.ts.map +1 -0
  137. package/dist/scheduler/sleep-manager.js +132 -0
  138. package/dist/scheduler/sleep-manager.js.map +1 -0
  139. package/dist/scheduler/ssh-batcher.d.ts +23 -0
  140. package/dist/scheduler/ssh-batcher.d.ts.map +1 -0
  141. package/dist/scheduler/ssh-batcher.js +98 -0
  142. package/dist/scheduler/ssh-batcher.js.map +1 -0
  143. package/dist/scheduler/state-store.d.ts +8 -0
  144. package/dist/scheduler/state-store.d.ts.map +1 -0
  145. package/dist/scheduler/state-store.js +48 -0
  146. package/dist/scheduler/state-store.js.map +1 -0
  147. package/dist/scheduler/trigger-scheduler.d.ts +24 -0
  148. package/dist/scheduler/trigger-scheduler.d.ts.map +1 -0
  149. package/dist/scheduler/trigger-scheduler.js +142 -0
  150. package/dist/scheduler/trigger-scheduler.js.map +1 -0
  151. package/dist/scheduler/triggers/file.d.ts +4 -0
  152. package/dist/scheduler/triggers/file.d.ts.map +1 -0
  153. package/dist/scheduler/triggers/file.js +39 -0
  154. package/dist/scheduler/triggers/file.js.map +1 -0
  155. package/dist/scheduler/triggers/metric.d.ts +4 -0
  156. package/dist/scheduler/triggers/metric.d.ts.map +1 -0
  157. package/dist/scheduler/triggers/metric.js +74 -0
  158. package/dist/scheduler/triggers/metric.js.map +1 -0
  159. package/dist/scheduler/triggers/process-exit.d.ts +4 -0
  160. package/dist/scheduler/triggers/process-exit.d.ts.map +1 -0
  161. package/dist/scheduler/triggers/process-exit.js +13 -0
  162. package/dist/scheduler/triggers/process-exit.js.map +1 -0
  163. package/dist/scheduler/triggers/resource.d.ts +4 -0
  164. package/dist/scheduler/triggers/resource.d.ts.map +1 -0
  165. package/dist/scheduler/triggers/resource.js +54 -0
  166. package/dist/scheduler/triggers/resource.js.map +1 -0
  167. package/dist/scheduler/triggers/timer.d.ts +3 -0
  168. package/dist/scheduler/triggers/timer.d.ts.map +1 -0
  169. package/dist/scheduler/triggers/timer.js +4 -0
  170. package/dist/scheduler/triggers/timer.js.map +1 -0
  171. package/dist/scheduler/triggers/types.d.ts +95 -0
  172. package/dist/scheduler/triggers/types.d.ts.map +1 -0
  173. package/dist/scheduler/triggers/types.js +11 -0
  174. package/dist/scheduler/triggers/types.js.map +1 -0
  175. package/dist/store/database.d.ts +5 -0
  176. package/dist/store/database.d.ts.map +1 -0
  177. package/dist/store/database.js +29 -0
  178. package/dist/store/database.js.map +1 -0
  179. package/dist/store/migrations.d.ts +3 -0
  180. package/dist/store/migrations.d.ts.map +1 -0
  181. package/dist/store/migrations.js +124 -0
  182. package/dist/store/migrations.js.map +1 -0
  183. package/dist/store/preferences.d.ts +7 -0
  184. package/dist/store/preferences.d.ts.map +1 -0
  185. package/dist/store/preferences.js +26 -0
  186. package/dist/store/preferences.js.map +1 -0
  187. package/dist/store/session-store.d.ts +29 -0
  188. package/dist/store/session-store.d.ts.map +1 -0
  189. package/dist/store/session-store.js +103 -0
  190. package/dist/store/session-store.js.map +1 -0
  191. package/dist/tools/clear-metrics.d.ts +5 -0
  192. package/dist/tools/clear-metrics.d.ts.map +1 -0
  193. package/dist/tools/clear-metrics.js +27 -0
  194. package/dist/tools/clear-metrics.js.map +1 -0
  195. package/dist/tools/compare-runs.d.ts +4 -0
  196. package/dist/tools/compare-runs.d.ts.map +1 -0
  197. package/dist/tools/compare-runs.js +77 -0
  198. package/dist/tools/compare-runs.js.map +1 -0
  199. package/dist/tools/consult.d.ts +3 -0
  200. package/dist/tools/consult.d.ts.map +1 -0
  201. package/dist/tools/consult.js +62 -0
  202. package/dist/tools/consult.js.map +1 -0
  203. package/dist/tools/file-ops.d.ts +6 -0
  204. package/dist/tools/file-ops.d.ts.map +1 -0
  205. package/dist/tools/file-ops.js +158 -0
  206. package/dist/tools/file-ops.js.map +1 -0
  207. package/dist/tools/kill-task.d.ts +6 -0
  208. package/dist/tools/kill-task.d.ts.map +1 -0
  209. package/dist/tools/kill-task.js +55 -0
  210. package/dist/tools/kill-task.js.map +1 -0
  211. package/dist/tools/list-machines.d.ts +4 -0
  212. package/dist/tools/list-machines.d.ts.map +1 -0
  213. package/dist/tools/list-machines.js +24 -0
  214. package/dist/tools/list-machines.js.map +1 -0
  215. package/dist/tools/memory-tools.d.ts +8 -0
  216. package/dist/tools/memory-tools.d.ts.map +1 -0
  217. package/dist/tools/memory-tools.js +122 -0
  218. package/dist/tools/memory-tools.js.map +1 -0
  219. package/dist/tools/metrics-query.d.ts +4 -0
  220. package/dist/tools/metrics-query.d.ts.map +1 -0
  221. package/dist/tools/metrics-query.js +69 -0
  222. package/dist/tools/metrics-query.js.map +1 -0
  223. package/dist/tools/monitor.d.ts +5 -0
  224. package/dist/tools/monitor.d.ts.map +1 -0
  225. package/dist/tools/monitor.js +64 -0
  226. package/dist/tools/monitor.js.map +1 -0
  227. package/dist/tools/remote-exec.d.ts +6 -0
  228. package/dist/tools/remote-exec.d.ts.map +1 -0
  229. package/dist/tools/remote-exec.js +98 -0
  230. package/dist/tools/remote-exec.js.map +1 -0
  231. package/dist/tools/remote-sync.d.ts +5 -0
  232. package/dist/tools/remote-sync.d.ts.map +1 -0
  233. package/dist/tools/remote-sync.js +57 -0
  234. package/dist/tools/remote-sync.js.map +1 -0
  235. package/dist/tools/show-metrics.d.ts +4 -0
  236. package/dist/tools/show-metrics.d.ts.map +1 -0
  237. package/dist/tools/show-metrics.js +69 -0
  238. package/dist/tools/show-metrics.js.map +1 -0
  239. package/dist/tools/sleep.d.ts +4 -0
  240. package/dist/tools/sleep.d.ts.map +1 -0
  241. package/dist/tools/sleep.js +116 -0
  242. package/dist/tools/sleep.js.map +1 -0
  243. package/dist/tools/task-output.d.ts +5 -0
  244. package/dist/tools/task-output.d.ts.map +1 -0
  245. package/dist/tools/task-output.js +51 -0
  246. package/dist/tools/task-output.js.map +1 -0
  247. package/dist/tools/web-fetch.d.ts +3 -0
  248. package/dist/tools/web-fetch.d.ts.map +1 -0
  249. package/dist/tools/web-fetch.js +112 -0
  250. package/dist/tools/web-fetch.js.map +1 -0
  251. package/dist/ui/commands.d.ts +7 -0
  252. package/dist/ui/commands.d.ts.map +1 -0
  253. package/dist/ui/commands.js +21 -0
  254. package/dist/ui/commands.js.map +1 -0
  255. package/dist/ui/components/gradient-edge.d.ts +7 -0
  256. package/dist/ui/components/gradient-edge.d.ts.map +1 -0
  257. package/dist/ui/components/gradient-edge.js +33 -0
  258. package/dist/ui/components/gradient-edge.js.map +1 -0
  259. package/dist/ui/components/input-bar.d.ts +8 -0
  260. package/dist/ui/components/input-bar.d.ts.map +1 -0
  261. package/dist/ui/components/input-bar.js +139 -0
  262. package/dist/ui/components/input-bar.js.map +1 -0
  263. package/dist/ui/components/key-hint-rule.d.ts +2 -0
  264. package/dist/ui/components/key-hint-rule.d.ts.map +1 -0
  265. package/dist/ui/components/key-hint-rule.js +19 -0
  266. package/dist/ui/components/key-hint-rule.js.map +1 -0
  267. package/dist/ui/components/overlay-header.d.ts +6 -0
  268. package/dist/ui/components/overlay-header.d.ts.map +1 -0
  269. package/dist/ui/components/overlay-header.js +10 -0
  270. package/dist/ui/components/overlay-header.js.map +1 -0
  271. package/dist/ui/components/status-bar.d.ts +11 -0
  272. package/dist/ui/components/status-bar.d.ts.map +1 -0
  273. package/dist/ui/components/status-bar.js +55 -0
  274. package/dist/ui/components/status-bar.js.map +1 -0
  275. package/dist/ui/format.d.ts +12 -0
  276. package/dist/ui/format.d.ts.map +1 -0
  277. package/dist/ui/format.js +36 -0
  278. package/dist/ui/format.js.map +1 -0
  279. package/dist/ui/layout.d.ts +48 -0
  280. package/dist/ui/layout.d.ts.map +1 -0
  281. package/dist/ui/layout.js +857 -0
  282. package/dist/ui/layout.js.map +1 -0
  283. package/dist/ui/markdown.d.ts +7 -0
  284. package/dist/ui/markdown.d.ts.map +1 -0
  285. package/dist/ui/markdown.js +67 -0
  286. package/dist/ui/markdown.js.map +1 -0
  287. package/dist/ui/mouse-filter.d.ts +21 -0
  288. package/dist/ui/mouse-filter.d.ts.map +1 -0
  289. package/dist/ui/mouse-filter.js +66 -0
  290. package/dist/ui/mouse-filter.js.map +1 -0
  291. package/dist/ui/overlays/metrics-overlay.d.ts +11 -0
  292. package/dist/ui/overlays/metrics-overlay.d.ts.map +1 -0
  293. package/dist/ui/overlays/metrics-overlay.js +86 -0
  294. package/dist/ui/overlays/metrics-overlay.js.map +1 -0
  295. package/dist/ui/overlays/task-overlay.d.ts +12 -0
  296. package/dist/ui/overlays/task-overlay.d.ts.map +1 -0
  297. package/dist/ui/overlays/task-overlay.js +77 -0
  298. package/dist/ui/overlays/task-overlay.js.map +1 -0
  299. package/dist/ui/panels/conversation.d.ts +8 -0
  300. package/dist/ui/panels/conversation.d.ts.map +1 -0
  301. package/dist/ui/panels/conversation.js +216 -0
  302. package/dist/ui/panels/conversation.js.map +1 -0
  303. package/dist/ui/panels/metrics-dashboard.d.ts +8 -0
  304. package/dist/ui/panels/metrics-dashboard.d.ts.map +1 -0
  305. package/dist/ui/panels/metrics-dashboard.js +56 -0
  306. package/dist/ui/panels/metrics-dashboard.js.map +1 -0
  307. package/dist/ui/panels/sleep-panel.d.ts +7 -0
  308. package/dist/ui/panels/sleep-panel.d.ts.map +1 -0
  309. package/dist/ui/panels/sleep-panel.js +48 -0
  310. package/dist/ui/panels/sleep-panel.js.map +1 -0
  311. package/dist/ui/panels/sticky-notes.d.ts +8 -0
  312. package/dist/ui/panels/sticky-notes.d.ts.map +1 -0
  313. package/dist/ui/panels/sticky-notes.js +49 -0
  314. package/dist/ui/panels/sticky-notes.js.map +1 -0
  315. package/dist/ui/panels/task-list.d.ts +8 -0
  316. package/dist/ui/panels/task-list.d.ts.map +1 -0
  317. package/dist/ui/panels/task-list.js +39 -0
  318. package/dist/ui/panels/task-list.js.map +1 -0
  319. package/dist/ui/theme.d.ts +25 -0
  320. package/dist/ui/theme.d.ts.map +1 -0
  321. package/dist/ui/theme.js +50 -0
  322. package/dist/ui/theme.js.map +1 -0
  323. package/dist/version.d.ts +9 -0
  324. package/dist/version.d.ts.map +1 -0
  325. package/dist/version.js +62 -0
  326. package/dist/version.js.map +1 -0
  327. package/package.json +59 -0
@@ -0,0 +1,7 @@
1
+ interface GradientEdgeProps {
2
+ height: number;
3
+ side?: "left" | "right";
4
+ }
5
+ export declare function GradientEdge({ height }: GradientEdgeProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=gradient-edge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gradient-edge.d.ts","sourceRoot":"","sources":["../../../src/ui/components/gradient-edge.tsx"],"names":[],"mappings":"AAiBA,UAAU,iBAAiB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB;AAED,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,iBAAiB,2CA2BzD"}
@@ -0,0 +1,33 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useState, useEffect } from "react";
3
+ import { Box, Text } from "ink";
4
+ // Shade blocks matching the ▓▒░ style from the header logo,
5
+ // cycling through density to create a flowing gradient effect.
6
+ // All rendered in the theme's yellow color.
7
+ const SHADES = [
8
+ "░", // light
9
+ "▒", // medium
10
+ "▓", // dense
11
+ "█", // full
12
+ "▓", // dense
13
+ "▒", // medium
14
+ ];
15
+ const TILE_SIZE = 10;
16
+ export function GradientEdge({ height }) {
17
+ const [offset, setOffset] = useState(0);
18
+ useEffect(() => {
19
+ const timer = setInterval(() => {
20
+ setOffset((prev) => (prev + 1) % SHADES.length);
21
+ }, 200);
22
+ return () => clearInterval(timer);
23
+ }, []);
24
+ const lines = [];
25
+ for (let i = 0; i < height; i++) {
26
+ const tilePos = (i % TILE_SIZE) / TILE_SIZE;
27
+ const shadeIdx = Math.floor(tilePos * SHADES.length);
28
+ const idx = (shadeIdx + offset) % SHADES.length;
29
+ lines.push(_jsx(Text, { color: "yellow", children: SHADES[idx] }, i));
30
+ }
31
+ return (_jsx(Box, { flexDirection: "column", flexShrink: 0, width: 1, children: lines }));
32
+ }
33
+ //# sourceMappingURL=gradient-edge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gradient-edge.js","sourceRoot":"","sources":["../../../src/ui/components/gradient-edge.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAEhC,4DAA4D;AAC5D,+DAA+D;AAC/D,4CAA4C;AAC5C,MAAM,MAAM,GAAG;IACb,GAAG,EAAI,QAAQ;IACf,GAAG,EAAI,SAAS;IAChB,GAAG,EAAI,QAAQ;IACf,GAAG,EAAI,OAAO;IACd,GAAG,EAAI,QAAQ;IACf,GAAG,EAAI,SAAS;CACjB,CAAC;AAEF,MAAM,SAAS,GAAG,EAAE,CAAC;AAOrB,MAAM,UAAU,YAAY,CAAC,EAAE,MAAM,EAAqB;IACxD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAExC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC7B,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAClD,CAAC,EAAE,GAAG,CAAC,CAAC;QACR,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,KAAK,GAAsB,EAAE,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QAChD,KAAK,CAAC,IAAI,CACR,KAAC,IAAI,IAAS,KAAK,EAAC,QAAQ,YACzB,MAAM,CAAC,GAAG,CAAC,IADH,CAAC,CAEL,CACR,CAAC;IACJ,CAAC;IAED,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,YAChD,KAAK,GACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ interface InputBarProps {
2
+ onSubmit: (value: string) => void;
3
+ disabled?: boolean;
4
+ placeholder?: string;
5
+ }
6
+ export declare function InputBar({ onSubmit, disabled, placeholder, }: InputBarProps): import("react/jsx-runtime").JSX.Element;
7
+ export {};
8
+ //# sourceMappingURL=input-bar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-bar.d.ts","sourceRoot":"","sources":["../../../src/ui/components/input-bar.tsx"],"names":[],"mappings":"AAKA,UAAU,aAAa;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,QAAQ,CAAC,EACvB,QAAQ,EACR,QAAgB,EAChB,WAAiC,GAClC,EAAE,aAAa,2CAyKf"}
@@ -0,0 +1,139 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useMemo } from "react";
3
+ import { Box, Text, useInput } from "ink";
4
+ import { C, G } from "../theme.js";
5
+ import { COMMANDS } from "../commands.js";
6
+ export function InputBar({ onSubmit, disabled = false, placeholder = "send a message...", }) {
7
+ const [value, setValue] = useState("");
8
+ const [cursorPos, setCursorPos] = useState(0);
9
+ const [history, setHistory] = useState([]);
10
+ const [historyIdx, setHistoryIdx] = useState(-1);
11
+ const [selectedIdx, setSelectedIdx] = useState(0);
12
+ const isCommandMode = value.startsWith("/");
13
+ const commandQuery = isCommandMode ? value.slice(1).split(" ")[0] : "";
14
+ const hasArgs = isCommandMode && value.includes(" ");
15
+ const filteredCommands = useMemo(() => {
16
+ if (!isCommandMode || hasArgs)
17
+ return [];
18
+ if (commandQuery === "")
19
+ return COMMANDS;
20
+ return COMMANDS.filter((cmd) => cmd.name.startsWith(commandQuery));
21
+ }, [isCommandMode, commandQuery, hasArgs]);
22
+ const showMenu = isCommandMode && !hasArgs && filteredCommands.length > 0;
23
+ useInput((input, key) => {
24
+ if (disabled)
25
+ return;
26
+ if (key.return) {
27
+ if (value.trim()) {
28
+ onSubmit(value.trim());
29
+ setHistory((prev) => [value.trim(), ...prev]);
30
+ setValue("");
31
+ setCursorPos(0);
32
+ setHistoryIdx(-1);
33
+ setSelectedIdx(0);
34
+ }
35
+ return;
36
+ }
37
+ if (key.tab && showMenu) {
38
+ const cmd = filteredCommands[selectedIdx];
39
+ if (cmd) {
40
+ const completed = `/${cmd.name}${cmd.args ? " " : ""}`;
41
+ setValue(completed);
42
+ setCursorPos(completed.length);
43
+ }
44
+ return;
45
+ }
46
+ if (key.backspace || key.delete) {
47
+ if (cursorPos > 0) {
48
+ setValue((prev) => prev.slice(0, cursorPos - 1) + prev.slice(cursorPos));
49
+ setCursorPos((prev) => prev - 1);
50
+ }
51
+ setSelectedIdx(0);
52
+ return;
53
+ }
54
+ // Left arrow
55
+ if (key.leftArrow) {
56
+ setCursorPos((prev) => Math.max(0, prev - 1));
57
+ return;
58
+ }
59
+ // Right arrow
60
+ if (key.rightArrow) {
61
+ setCursorPos((prev) => Math.min(value.length, prev + 1));
62
+ return;
63
+ }
64
+ if (key.upArrow) {
65
+ if (showMenu) {
66
+ setSelectedIdx((prev) => prev > 0 ? prev - 1 : filteredCommands.length - 1);
67
+ }
68
+ else if (history.length > 0) {
69
+ const newIdx = Math.min(historyIdx + 1, history.length - 1);
70
+ setHistoryIdx(newIdx);
71
+ setValue(history[newIdx]);
72
+ setCursorPos(history[newIdx].length);
73
+ }
74
+ return;
75
+ }
76
+ if (key.downArrow) {
77
+ if (showMenu) {
78
+ setSelectedIdx((prev) => prev < filteredCommands.length - 1 ? prev + 1 : 0);
79
+ }
80
+ else {
81
+ if (historyIdx <= 0) {
82
+ setHistoryIdx(-1);
83
+ setValue("");
84
+ setCursorPos(0);
85
+ }
86
+ else {
87
+ const newIdx = historyIdx - 1;
88
+ setHistoryIdx(newIdx);
89
+ setValue(history[newIdx]);
90
+ setCursorPos(history[newIdx].length);
91
+ }
92
+ }
93
+ return;
94
+ }
95
+ // Home / Ctrl+A
96
+ if (key.ctrl && input === "a") {
97
+ setCursorPos(0);
98
+ return;
99
+ }
100
+ // End / Ctrl+E
101
+ if (key.ctrl && input === "e") {
102
+ setCursorPos(value.length);
103
+ return;
104
+ }
105
+ // Ctrl+U — clear line
106
+ if (key.ctrl && input === "u") {
107
+ setValue("");
108
+ setCursorPos(0);
109
+ return;
110
+ }
111
+ // Ctrl+W — delete word backward
112
+ if (key.ctrl && input === "w") {
113
+ const before = value.slice(0, cursorPos);
114
+ const after = value.slice(cursorPos);
115
+ const trimmed = before.replace(/\S+\s*$/, "");
116
+ setValue(trimmed + after);
117
+ setCursorPos(trimmed.length);
118
+ return;
119
+ }
120
+ if (input && !key.ctrl && !key.meta) {
121
+ setValue((prev) => prev.slice(0, cursorPos) + input + prev.slice(cursorPos));
122
+ setCursorPos((prev) => prev + input.length);
123
+ setHistoryIdx(-1);
124
+ setSelectedIdx(0);
125
+ }
126
+ });
127
+ return (_jsxs(Box, { flexDirection: "column", children: [showMenu && (_jsxs(Box, { flexDirection: "column", paddingX: 1, paddingY: 0, children: [filteredCommands.map((cmd, i) => (_jsx(CommandItem, { command: cmd, selected: i === selectedIdx }, cmd.name))), _jsxs(Text, { color: C.dim, dimColor: true, children: [" ", "\u2191\u2193 navigate", " ", "tab complete", " ", "enter run"] })] })), _jsxs(Box, { paddingX: 1, children: [_jsxs(Text, { color: C.primary, bold: true, children: [G.active, " "] }), value ? (_jsx(CursorText, { text: value, cursorPos: cursorPos })) : (_jsx(Text, { color: C.dim, dimColor: true, children: disabled ? "waiting..." : placeholder }))] })] }));
128
+ }
129
+ function CursorText({ text, cursorPos }) {
130
+ const before = text.slice(0, cursorPos);
131
+ const cursor = text[cursorPos] ?? " ";
132
+ const after = text.slice(cursorPos + 1);
133
+ return (_jsxs(Text, { children: [_jsx(Text, { color: C.text, children: before }), _jsx(Text, { color: "black", backgroundColor: C.primary, children: cursor }), _jsx(Text, { color: C.text, children: after })] }));
134
+ }
135
+ function CommandItem({ command, selected, }) {
136
+ const argStr = command.args ? ` ${command.args}` : "";
137
+ return (_jsxs(Box, { children: [_jsxs(Text, { color: selected ? C.primary : C.dim, bold: selected, children: [selected ? `${G.active} ` : " ", "/", command.name] }), command.args && (_jsx(Text, { color: C.dim, children: argStr })), _jsxs(Text, { color: C.dim, dimColor: true, children: [" ", command.description] })] }));
138
+ }
139
+ //# sourceMappingURL=input-bar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-bar.js","sourceRoot":"","sources":["../../../src/ui/components/input-bar.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function KeyHintRule(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=key-hint-rule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-hint-rule.d.ts","sourceRoot":"","sources":["../../../src/ui/components/key-hint-rule.tsx"],"names":[],"mappings":"AAUA,wBAAgB,WAAW,4CAyB1B"}
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from "react";
3
+ import { Box, Text } from "ink";
4
+ import { C, G } from "../theme.js";
5
+ const HINTS = [
6
+ { key: "esc", label: "interrupt" },
7
+ { key: "^t", label: "tasks" },
8
+ { key: "^g", label: "metrics" },
9
+ ];
10
+ export function KeyHintRule() {
11
+ const w = process.stdout.columns || 80;
12
+ let hintsWidth = 0;
13
+ for (const h of HINTS) {
14
+ hintsWidth += 2 + h.key.length + 1 + h.label.length + 1;
15
+ }
16
+ const fill = Math.max(0, w - hintsWidth);
17
+ return (_jsxs(Box, { children: [_jsx(Text, { color: C.primary, children: G.rule.repeat(fill) }), HINTS.map((h, i) => (_jsxs(React.Fragment, { children: [i === 0 ? (_jsx(Text, { color: C.dim, children: " " })) : (_jsxs(Text, { color: C.dim, children: [G.rule, " "] })), _jsx(Text, { color: C.dim, children: h.key }), _jsxs(Text, { color: C.dim, children: [" ", h.label, " "] })] }, i)))] }));
18
+ }
19
+ //# sourceMappingURL=key-hint-rule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-hint-rule.js","sourceRoot":"","sources":["../../../src/ui/components/key-hint-rule.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,aAAa,CAAC;AAEnC,MAAM,KAAK,GAAG;IACZ,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE;IAClC,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE;IAC7B,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE;CAChC,CAAC;AAEF,MAAM,UAAU,WAAW;IACzB,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IAEvC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,UAAU,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1D,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC;IAEzC,OAAO,CACL,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,OAAO,YAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAQ,EACnD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACnB,MAAC,KAAK,CAAC,QAAQ,eACZ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CACT,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,GAAG,kBAAU,CAC7B,CAAC,CAAC,CAAC,CACF,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,GAAG,aAAG,CAAC,CAAC,IAAI,SAAS,CACrC,EACD,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,GAAG,YAAG,CAAC,CAAC,GAAG,GAAQ,EAClC,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,GAAG,kBAAI,CAAC,CAAC,KAAK,SAAS,KAPnB,CAAC,CAQL,CAClB,CAAC,IACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare function OverlayHeader({ width, title, hints }: {
2
+ width: number;
3
+ title: string;
4
+ hints: string;
5
+ }): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=overlay-header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay-header.d.ts","sourceRoot":"","sources":["../../../src/ui/components/overlay-header.tsx"],"names":[],"mappings":"AAIA,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,2CAWrG"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from "ink";
3
+ import { C, G } from "../theme.js";
4
+ export function OverlayHeader({ width, title, hints }) {
5
+ const label = ` ${G.brand} ${title} `;
6
+ const hintLabel = ` ${hints} `;
7
+ const fill = Math.max(0, width - label.length - hintLabel.length);
8
+ return (_jsxs(Box, { flexShrink: 0, children: [_jsx(Text, { color: C.primary, bold: true, children: label }), _jsx(Text, { color: C.primary, children: G.rule.repeat(fill) }), _jsx(Text, { color: C.primary, dimColor: true, children: hintLabel })] }));
9
+ }
10
+ //# sourceMappingURL=overlay-header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay-header.js","sourceRoot":"","sources":["../../../src/ui/components/overlay-header.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,aAAa,CAAC;AAEnC,MAAM,UAAU,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAmD;IACpG,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,GAAG,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,KAAK,GAAG,CAAC;IAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAClE,OAAO,CACL,MAAC,GAAG,IAAC,UAAU,EAAE,CAAC,aAChB,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,kBAAE,KAAK,GAAQ,EAC3C,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,OAAO,YAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAQ,EACpD,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,kBAAE,SAAS,GAAQ,IAC/C,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { Orchestrator } from "../../core/orchestrator.js";
2
+ import type { SleepManager } from "../../scheduler/sleep-manager.js";
3
+ import type { MonitorManager } from "../../core/monitor.js";
4
+ interface StatusBarProps {
5
+ orchestrator: Orchestrator;
6
+ sleepManager?: SleepManager;
7
+ monitorManager?: MonitorManager;
8
+ }
9
+ export declare function StatusBar({ orchestrator, sleepManager, monitorManager }: StatusBarProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=status-bar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-bar.d.ts","sourceRoot":"","sources":["../../../src/ui/components/status-bar.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,UAAU,cAAc;IACtB,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAID,wBAAgB,SAAS,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,EAAE,cAAc,2CAmGvF"}
@@ -0,0 +1,55 @@
1
+ import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useState, useEffect } from "react";
3
+ import { Box, Text } from "ink";
4
+ import { C, G } from "../theme.js";
5
+ import { formatDuration, truncate } from "../format.js";
6
+ const SLEEP_FRAMES = ["◇", "◆", "◇", "◇"];
7
+ export function StatusBar({ orchestrator, sleepManager, monitorManager }) {
8
+ const state = orchestrator.currentState;
9
+ const provider = orchestrator.currentProvider;
10
+ const model = orchestrator.currentModel;
11
+ const reasoning = orchestrator.reasoningEffort;
12
+ const cost = orchestrator.totalCostUsd;
13
+ const [frame, setFrame] = useState(0);
14
+ const [elapsed, setElapsed] = useState(0);
15
+ const sleeping = sleepManager?.isSleeping;
16
+ const sleepSession = sleepManager?.currentSleep;
17
+ useEffect(() => {
18
+ if (!sleeping)
19
+ return;
20
+ const timer = setInterval(() => {
21
+ setFrame((f) => (f + 1) % SLEEP_FRAMES.length);
22
+ if (sleepSession) {
23
+ setElapsed(Date.now() - sleepSession.createdAt);
24
+ }
25
+ }, 500);
26
+ return () => clearInterval(timer);
27
+ }, [sleeping, sleepSession]);
28
+ const stateColor = {
29
+ idle: C.dim,
30
+ active: C.primary,
31
+ sleeping: C.primary,
32
+ waiting: C.dim,
33
+ error: C.error,
34
+ }[state];
35
+ return (_jsxs(Box, { paddingX: 1, children: [_jsxs(Text, { color: C.primary, children: [G.dot, " "] }), _jsx(Text, { color: C.text, children: provider?.displayName ?? "—" }), _jsxs(Text, { color: C.dim, children: [" ", G.dash, " "] }), _jsx(Text, { color: C.text, children: model ?? "—" }), _jsxs(Text, { color: C.dim, children: [" ", G.dash, " "] }), _jsx(Text, { color: C.text, children: reasoning ?? "medium" }), _jsxs(Text, { color: C.dim, children: [" ", G.dash, " "] }), _jsx(Text, { color: stateColor, children: state }), sleeping && sleepSession && (() => {
36
+ // Calculate how many chars are left for the sleep reason
37
+ const usedWidth = 2 /* paddingX */
38
+ + 2 /* dot+space */
39
+ + (provider?.displayName ?? "—").length
40
+ + 3 /* dash */
41
+ + (model ?? "—").length
42
+ + 3 /* dash */
43
+ + (reasoning ?? "medium").length
44
+ + 3 /* dash */
45
+ + state.length
46
+ + 3 /* dash */
47
+ + 2 /* frame+space */
48
+ + formatDuration(elapsed).length
49
+ + 1; /* leading space before reason */
50
+ const termWidth = process.stdout.columns ?? 80;
51
+ const maxReason = Math.max(10, termWidth - usedWidth - 12 /* cost/monitor slack */);
52
+ return (_jsxs(_Fragment, { children: [_jsxs(Text, { color: C.dim, children: [" ", G.dash, " "] }), _jsxs(Text, { color: C.primary, children: [SLEEP_FRAMES[frame], " "] }), _jsx(Text, { color: C.dim, children: formatDuration(elapsed) }), _jsxs(Text, { color: C.dim, children: [" ", truncate(sleepSession.trigger.sleepReason, maxReason, true)] })] }));
53
+ })(), monitorManager?.isActive && monitorManager.currentConfig && (_jsxs(_Fragment, { children: [_jsxs(Text, { color: C.dim, children: [" ", G.dash, " "] }), _jsx(Text, { color: C.success, children: "\u27F3 " }), _jsxs(Text, { color: C.dim, children: ["monitoring (", Math.round(monitorManager.currentConfig.intervalMs / 60_000), "m)"] })] })), cost > 0 && (_jsxs(_Fragment, { children: [_jsxs(Text, { color: C.dim, children: [" ", G.dash, " "] }), _jsxs(Text, { color: C.dim, children: ["$", cost.toFixed(4)] })] }))] }));
54
+ }
55
+ //# sourceMappingURL=status-bar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-bar.js","sourceRoot":"","sources":["../../../src/ui/components/status-bar.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAWxD,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAE1C,MAAM,UAAU,SAAS,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAkB;IACtF,MAAM,KAAK,GAAG,YAAY,CAAC,YAAY,CAAC;IACxC,MAAM,QAAQ,GAAG,YAAY,CAAC,eAAe,CAAC;IAC9C,MAAM,KAAK,GAAG,YAAY,CAAC,YAAY,CAAC;IACxC,MAAM,SAAS,GAAG,YAAY,CAAC,eAAe,CAAC;IAC/C,MAAM,IAAI,GAAG,YAAY,CAAC,YAAY,CAAC;IAEvC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE1C,MAAM,QAAQ,GAAG,YAAY,EAAE,UAAU,CAAC;IAC1C,MAAM,YAAY,GAAG,YAAY,EAAE,YAAY,CAAC;IAEhD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC7B,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;YAC/C,IAAI,YAAY,EAAE,CAAC;gBACjB,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;YAClD,CAAC;QACH,CAAC,EAAE,GAAG,CAAC,CAAC;QACR,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;IAE7B,MAAM,UAAU,GAAG;QACjB,IAAI,EAAE,CAAC,CAAC,GAAG;QACX,MAAM,EAAE,CAAC,CAAC,OAAO;QACjB,QAAQ,EAAE,CAAC,CAAC,OAAO;QACnB,OAAO,EAAE,CAAC,CAAC,GAAG;QACd,KAAK,EAAE,CAAC,CAAC,KAAK;KACf,CAAC,KAAK,CAAW,CAAC;IAEnB,OAAO,CACL,MAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,aACd,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,OAAO,aAAG,CAAC,CAAC,GAAG,SAAS,EACvC,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,IAAI,YAChB,QAAQ,EAAE,WAAW,IAAI,GAAG,GACxB,EAEP,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,GAAG,aAAG,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,IAAQ,EAC7C,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,IAAI,YAChB,KAAK,IAAI,GAAG,GACR,EAEP,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,GAAG,aAAG,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,IAAQ,EAC7C,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,IAAI,YAChB,SAAS,IAAI,QAAQ,GACjB,EAEP,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,GAAG,aAAG,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,IAAQ,EAC7C,KAAC,IAAI,IAAC,KAAK,EAAE,UAAU,YACpB,KAAK,GACD,EAEN,QAAQ,IAAI,YAAY,IAAI,CAAC,GAAG,EAAE;gBACjC,yDAAyD;gBACzD,MAAM,SAAS,GAAG,CAAC,CAAC,cAAc;sBAC9B,CAAC,CAAC,eAAe;sBACjB,CAAC,QAAQ,EAAE,WAAW,IAAI,GAAG,CAAC,CAAC,MAAM;sBACrC,CAAC,CAAC,UAAU;sBACZ,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,MAAM;sBACrB,CAAC,CAAC,UAAU;sBACZ,CAAC,SAAS,IAAI,QAAQ,CAAC,CAAC,MAAM;sBAC9B,CAAC,CAAC,UAAU;sBACZ,KAAK,CAAC,MAAM;sBACZ,CAAC,CAAC,UAAU;sBACZ,CAAC,CAAC,iBAAiB;sBACnB,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM;sBAC9B,CAAC,CAAC,CAAC,iCAAiC;gBACxC,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;gBAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,GAAG,SAAS,GAAG,EAAE,CAAC,wBAAwB,CAAC,CAAC;gBACpF,OAAO,CACL,8BACE,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,GAAG,aAAG,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,IAAQ,EAC7C,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,OAAO,aAAG,YAAY,CAAC,KAAK,CAAC,SAAS,EACrD,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,GAAG,YAAG,cAAc,CAAC,OAAO,CAAC,GAAQ,EACpD,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,GAAG,kBAAI,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,IAAQ,IACxF,CACJ,CAAC;YACJ,CAAC,CAAC,EAAE,EAEH,cAAc,EAAE,QAAQ,IAAI,cAAc,CAAC,aAAa,IAAI,CAC3D,8BACE,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,GAAG,aAAG,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,IAAQ,EAC7C,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,OAAO,wBAAW,EACjC,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,GAAG,6BACH,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,UAAU,GAAG,MAAM,CAAC,UACpE,IACN,CACJ,EAEA,IAAI,GAAG,CAAC,IAAI,CACX,8BACE,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,GAAG,aAAG,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,IAAQ,EAC7C,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,GAAG,kBAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAQ,IAC5C,CACJ,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Shared formatting functions used across the UI, tools, and scheduler.
3
+ */
4
+ /** Format a metric value for display (compact, appropriate precision). */
5
+ export declare function formatMetricValue(v: number): string;
6
+ /** Format a duration in ms to a human-readable string (e.g. "2h 15m", "3m 42s", "8s"). */
7
+ export declare function formatDuration(ms: number): string;
8
+ /** Truncate a string with ellipsis. Optionally flattens whitespace for previews. */
9
+ export declare function truncate(s: string, max: number, flatten?: boolean): string;
10
+ /** Format an unknown error value to a string. */
11
+ export declare function formatError(err: unknown): string;
12
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/ui/format.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,0EAA0E;AAC1E,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAKnD;AAED,0FAA0F;AAC1F,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAOjD;AAED,oFAAoF;AACpF,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,MAAM,CAIxE;AAED,iDAAiD;AACjD,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAEhD"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Shared formatting functions used across the UI, tools, and scheduler.
3
+ */
4
+ /** Format a metric value for display (compact, appropriate precision). */
5
+ export function formatMetricValue(v) {
6
+ if (Math.abs(v) >= 1000)
7
+ return v.toFixed(1);
8
+ if (Math.abs(v) >= 1)
9
+ return v.toPrecision(4);
10
+ if (Math.abs(v) >= 0.001)
11
+ return v.toPrecision(3);
12
+ return v.toExponential(2);
13
+ }
14
+ /** Format a duration in ms to a human-readable string (e.g. "2h 15m", "3m 42s", "8s"). */
15
+ export function formatDuration(ms) {
16
+ const s = Math.floor(ms / 1000);
17
+ const m = Math.floor(s / 60);
18
+ const h = Math.floor(m / 60);
19
+ if (h > 0)
20
+ return `${h}h ${m % 60}m`;
21
+ if (m > 0)
22
+ return `${m}m ${s % 60}s`;
23
+ return `${s}s`;
24
+ }
25
+ /** Truncate a string with ellipsis. Optionally flattens whitespace for previews. */
26
+ export function truncate(s, max, flatten = false) {
27
+ const text = flatten ? s.replace(/\s+/g, " ").trim() : s;
28
+ if (text.length <= max)
29
+ return text;
30
+ return text.slice(0, max - 1) + "\u2026";
31
+ }
32
+ /** Format an unknown error value to a string. */
33
+ export function formatError(err) {
34
+ return err instanceof Error ? err.message : String(err);
35
+ }
36
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/ui/format.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,0EAA0E;AAC1E,MAAM,UAAU,iBAAiB,CAAC,CAAS;IACzC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI;QAAE,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7C,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAC9C,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK;QAAE,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,cAAc,CAAC,EAAU;IACvC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAChC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;IACrC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;IACrC,OAAO,GAAG,CAAC,GAAG,CAAC;AACjB,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,QAAQ,CAAC,CAAS,EAAE,GAAW,EAAE,OAAO,GAAG,KAAK;IAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;AAC3C,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,48 @@
1
+ import type { EventEmitter } from "node:events";
2
+ import type { Orchestrator } from "../core/orchestrator.js";
3
+ import type { SleepManager } from "../scheduler/sleep-manager.js";
4
+ import type { ConnectionPool } from "../remote/connection-pool.js";
5
+ import type { RemoteExecutor } from "../remote/executor.js";
6
+ import type { MetricStore } from "../metrics/store.js";
7
+ import type { MetricCollector } from "../metrics/collector.js";
8
+ import type { MonitorManager } from "../core/monitor.js";
9
+ import type { ExperimentTracker } from "../memory/experiment-tracker.js";
10
+ import type { MemoryStore } from "../memory/memory-store.js";
11
+ import type { StickyManager } from "../core/stickies.js";
12
+ export interface ToolData {
13
+ callId: string;
14
+ name: string;
15
+ args: Record<string, unknown>;
16
+ result?: string;
17
+ isError?: boolean;
18
+ }
19
+ export interface Message {
20
+ id: number;
21
+ role: "user" | "assistant" | "tool" | "error" | "system";
22
+ content: string;
23
+ tool?: ToolData;
24
+ }
25
+ export interface TaskInfo {
26
+ id: string;
27
+ name: string;
28
+ status: "running" | "completed" | "failed";
29
+ machineId: string;
30
+ pid?: number;
31
+ startedAt: number;
32
+ }
33
+ interface LayoutProps {
34
+ orchestrator: Orchestrator;
35
+ sleepManager: SleepManager;
36
+ connectionPool?: ConnectionPool;
37
+ executor?: RemoteExecutor;
38
+ metricStore?: MetricStore;
39
+ metricCollector?: MetricCollector;
40
+ monitorManager?: MonitorManager;
41
+ experimentTracker?: ExperimentTracker;
42
+ memoryStore?: MemoryStore;
43
+ stickyManager?: StickyManager;
44
+ mouseEmitter?: EventEmitter;
45
+ }
46
+ export declare function Layout({ orchestrator, sleepManager, connectionPool, executor, metricStore, metricCollector, monitorManager, experimentTracker, memoryStore, stickyManager, mouseEmitter }: LayoutProps): import("react/jsx-runtime").JSX.Element;
47
+ export {};
48
+ //# sourceMappingURL=layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/ui/layout.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAahD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,oBAAoB,CAAC;AAUxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,qBAAqB,CAAC;AAMrE,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,QAAQ,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,WAAW;IACnB,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAID,wBAAgB,MAAM,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,WAAW,2CAoftM"}