@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,43 @@
1
+ /** Build MetricPatterns from a list of names (assumes key=value format) */
2
+ export function patternsFromNames(names) {
3
+ const patterns = {};
4
+ for (const name of names) {
5
+ // Match name=value or name: value
6
+ patterns[name] = new RegExp(`(?:^|\\s|,)${escapeRegex(name)}\\s*[=:]\\s*([+-]?\\d+\\.?\\d*(?:e[+-]?\\d+)?)`, "i");
7
+ }
8
+ return { patterns };
9
+ }
10
+ /** Build MetricPatterns from a map of name → regex string */
11
+ export function patternsFromRegexes(regexMap) {
12
+ const patterns = {};
13
+ for (const [name, re] of Object.entries(regexMap)) {
14
+ patterns[name] = new RegExp(re, "i");
15
+ }
16
+ return { patterns };
17
+ }
18
+ /** Parse log output using the given patterns */
19
+ export function parseWithPatterns(output, mp) {
20
+ const points = [];
21
+ const now = Date.now();
22
+ const lines = output.split("\n");
23
+ for (const line of lines) {
24
+ for (const [name, re] of Object.entries(mp.patterns)) {
25
+ const match = re.exec(line);
26
+ if (match && match[1]) {
27
+ const value = parseFloat(match[1]);
28
+ if (isFinite(value)) {
29
+ points.push({
30
+ metricName: name,
31
+ value,
32
+ timestamp: now,
33
+ });
34
+ }
35
+ }
36
+ }
37
+ }
38
+ return points;
39
+ }
40
+ function escapeRegex(s) {
41
+ return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
42
+ }
43
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/metrics/parser.ts"],"names":[],"mappings":"AAiBA,2EAA2E;AAC3E,MAAM,UAAU,iBAAiB,CAAC,KAAe;IAC/C,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,kCAAkC;QAClC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,MAAM,CACzB,cAAc,WAAW,CAAC,IAAI,CAAC,gDAAgD,EAC/E,GAAG,CACJ,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,CAAC;AACtB,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,mBAAmB,CACjC,QAAgC;IAEhC,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClD,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,CAAC;AACtB,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,iBAAiB,CAC/B,MAAc,EACd,EAAkB;IAElB,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrD,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBACpB,MAAM,CAAC,IAAI,CAAC;wBACV,UAAU,EAAE,IAAI;wBAChB,KAAK;wBACL,SAAS,EAAE,GAAG;qBACf,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,CAAS;IAC5B,OAAO,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { MetricPoint } from "../store.js";
2
+ /**
3
+ * Parse CSV training logs.
4
+ * Expects header row with column names, values in subsequent rows.
5
+ * Returns metrics from the last row.
6
+ */
7
+ export declare function parseCsv(content: string): MetricPoint[];
8
+ //# sourceMappingURL=csv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csv.d.ts","sourceRoot":"","sources":["../../../src/metrics/parsers/csv.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,EAAE,CAwBvD"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Parse CSV training logs.
3
+ * Expects header row with column names, values in subsequent rows.
4
+ * Returns metrics from the last row.
5
+ */
6
+ export function parseCsv(content) {
7
+ const lines = content.trim().split("\n");
8
+ if (lines.length < 2)
9
+ return [];
10
+ const headers = lines[0].split(",").map((h) => h.trim());
11
+ const lastLine = lines[lines.length - 1];
12
+ const values = lastLine.split(",").map((v) => v.trim());
13
+ const now = Date.now();
14
+ const points = [];
15
+ for (let i = 0; i < headers.length; i++) {
16
+ const value = parseFloat(values[i]);
17
+ if (!isNaN(value)) {
18
+ points.push({
19
+ metricName: headers[i],
20
+ value,
21
+ timestamp: now,
22
+ step: extractStep(headers, values),
23
+ });
24
+ }
25
+ }
26
+ return points;
27
+ }
28
+ function extractStep(headers, values) {
29
+ const stepIdx = headers.findIndex((h) => h.toLowerCase() === "step" ||
30
+ h.toLowerCase() === "epoch" ||
31
+ h.toLowerCase() === "iteration");
32
+ if (stepIdx === -1)
33
+ return undefined;
34
+ const step = parseInt(values[stepIdx], 10);
35
+ return isNaN(step) ? undefined : step;
36
+ }
37
+ //# sourceMappingURL=csv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csv.js","sourceRoot":"","sources":["../../../src/metrics/parsers/csv.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAe;IACtC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAEhC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,MAAM,MAAM,GAAkB,EAAE,CAAC;IAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC;gBACV,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;gBACtB,KAAK;gBACL,SAAS,EAAE,GAAG;gBACd,IAAI,EAAE,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC;aACnC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAClB,OAAiB,EACjB,MAAgB;IAEhB,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAC/B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM;QAC1B,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO;QAC3B,CAAC,CAAC,WAAW,EAAE,KAAK,WAAW,CAClC,CAAC;IACF,IAAI,OAAO,KAAK,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3C,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AACxC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { MetricPoint } from "../store.js";
2
+ /**
3
+ * Parse JSON metrics files.
4
+ * Supports flat objects: { "loss": 0.234, "acc": 0.95 }
5
+ * And arrays of objects (takes last entry): [{ "loss": 0.234 }, ...]
6
+ */
7
+ export declare function parseJson(content: string, fields?: string[]): MetricPoint[];
8
+ //# sourceMappingURL=json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../../src/metrics/parsers/json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,EAAE,GAChB,WAAW,EAAE,CA4Bf"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Parse JSON metrics files.
3
+ * Supports flat objects: { "loss": 0.234, "acc": 0.95 }
4
+ * And arrays of objects (takes last entry): [{ "loss": 0.234 }, ...]
5
+ */
6
+ export function parseJson(content, fields) {
7
+ try {
8
+ const data = JSON.parse(content);
9
+ const now = Date.now();
10
+ // Handle array: take last element
11
+ const obj = Array.isArray(data) ? data[data.length - 1] : data;
12
+ if (typeof obj !== "object" || obj === null)
13
+ return [];
14
+ const points = [];
15
+ const keys = fields ?? Object.keys(obj);
16
+ for (const key of keys) {
17
+ const value = extractNestedValue(obj, key);
18
+ if (typeof value === "number" && isFinite(value)) {
19
+ points.push({
20
+ metricName: key,
21
+ value,
22
+ timestamp: now,
23
+ });
24
+ }
25
+ }
26
+ return points;
27
+ }
28
+ catch {
29
+ return [];
30
+ }
31
+ }
32
+ function extractNestedValue(obj, path) {
33
+ const parts = path.split(".");
34
+ let current = obj;
35
+ for (const part of parts) {
36
+ if (current == null || typeof current !== "object")
37
+ return undefined;
38
+ current = current[part];
39
+ }
40
+ return current;
41
+ }
42
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../../src/metrics/parsers/json.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,SAAS,CACvB,OAAe,EACf,MAAiB;IAEjB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,kCAAkC;QAClC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAE/D,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QAEvD,MAAM,MAAM,GAAkB,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAExC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjD,MAAM,CAAC,IAAI,CAAC;oBACV,UAAU,EAAE,GAAG;oBACf,KAAK;oBACL,SAAS,EAAE,GAAG;iBACf,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAY,EAAE,IAAY;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,OAAO,GAAY,GAAG,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QACrE,OAAO,GAAI,OAAmC,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { MetricPoint } from "../store.js";
2
+ export declare function parseStdout(output: string, customPattern?: string): MetricPoint[];
3
+ //# sourceMappingURL=stdout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdout.d.ts","sourceRoot":"","sources":["../../../src/metrics/parsers/stdout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAgB/C,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,EACd,aAAa,CAAC,EAAE,MAAM,GACrB,WAAW,EAAE,CA+Bf"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Parse training metrics from stdout/log output.
3
+ * Supports common patterns like:
4
+ * step=1000 loss=0.234 lr=1e-4
5
+ * [epoch 5] train_loss: 0.123, val_loss: 0.456
6
+ * Step 100 | Loss: 0.234 | Acc: 0.95
7
+ */
8
+ const DEFAULT_PATTERNS = [
9
+ // key=value pairs: loss=0.234
10
+ /(\w+)\s*=\s*([+-]?\d+\.?\d*(?:e[+-]?\d+)?)/gi,
11
+ // key: value pairs: loss: 0.234
12
+ /(\w+)\s*:\s*([+-]?\d+\.?\d*(?:e[+-]?\d+)?)/gi,
13
+ ];
14
+ export function parseStdout(output, customPattern) {
15
+ const points = [];
16
+ const now = Date.now();
17
+ const lines = output.split("\n").filter((l) => l.trim());
18
+ const patterns = customPattern
19
+ ? [new RegExp(customPattern, "gi")]
20
+ : DEFAULT_PATTERNS;
21
+ // Only parse the last few lines for latest values
22
+ const recentLines = lines.slice(-5);
23
+ for (const line of recentLines) {
24
+ for (const pattern of patterns) {
25
+ pattern.lastIndex = 0;
26
+ let match;
27
+ while ((match = pattern.exec(line)) !== null) {
28
+ const name = match[1].toLowerCase();
29
+ const value = parseFloat(match[2]);
30
+ if (!isNaN(value) && isMetricName(name)) {
31
+ points.push({
32
+ metricName: name,
33
+ value,
34
+ timestamp: now,
35
+ });
36
+ }
37
+ }
38
+ }
39
+ }
40
+ return dedup(points);
41
+ }
42
+ /** Filter likely metric names from noise */
43
+ function isMetricName(name) {
44
+ const metricKeywords = [
45
+ "loss",
46
+ "acc",
47
+ "accuracy",
48
+ "lr",
49
+ "learning_rate",
50
+ "reward",
51
+ "return",
52
+ "step",
53
+ "epoch",
54
+ "grad",
55
+ "norm",
56
+ "perplexity",
57
+ "ppl",
58
+ "bleu",
59
+ "f1",
60
+ "precision",
61
+ "recall",
62
+ "auc",
63
+ "mse",
64
+ "mae",
65
+ "rmse",
66
+ "kl",
67
+ "entropy",
68
+ ];
69
+ return metricKeywords.some((kw) => name.includes(kw) || kw.includes(name));
70
+ }
71
+ /** Deduplicate by metric name, keeping last occurrence */
72
+ function dedup(points) {
73
+ const seen = new Map();
74
+ for (const p of points) {
75
+ seen.set(p.metricName, p);
76
+ }
77
+ return Array.from(seen.values());
78
+ }
79
+ //# sourceMappingURL=stdout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdout.js","sourceRoot":"","sources":["../../../src/metrics/parsers/stdout.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,gBAAgB,GAAG;IACvB,8BAA8B;IAC9B,8CAA8C;IAC9C,gCAAgC;IAChC,8CAA8C;CAC/C,CAAC;AAEF,MAAM,UAAU,WAAW,CACzB,MAAc,EACd,aAAsB;IAEtB,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAEzD,MAAM,QAAQ,GAAG,aAAa;QAC5B,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QACnC,CAAC,CAAC,gBAAgB,CAAC;IAErB,kDAAkD;IAClD,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;YACtB,IAAI,KAAK,CAAC;YACV,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;gBACpC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;oBACxC,MAAM,CAAC,IAAI,CAAC;wBACV,UAAU,EAAE,IAAI;wBAChB,KAAK;wBACL,SAAS,EAAE,GAAG;qBACf,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC;AACvB,CAAC;AAED,4CAA4C;AAC5C,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,cAAc,GAAG;QACrB,MAAM;QACN,KAAK;QACL,UAAU;QACV,IAAI;QACJ,eAAe;QACf,QAAQ;QACR,QAAQ;QACR,MAAM;QACN,OAAO;QACP,MAAM;QACN,MAAM;QACN,YAAY;QACZ,KAAK;QACL,MAAM;QACN,IAAI;QACJ,WAAW;QACX,QAAQ;QACR,KAAK;QACL,KAAK;QACL,KAAK;QACL,MAAM;QACN,IAAI;QACJ,SAAS;KACV,CAAC;IACF,OAAO,cAAc,CAAC,IAAI,CACxB,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC/C,CAAC;AACJ,CAAC;AAED,0DAA0D;AAC1D,SAAS,KAAK,CAAC,MAAqB;IAClC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { MetricPoint } from "../store.js";
2
+ /**
3
+ * TensorBoard event file parser.
4
+ *
5
+ * TensorBoard events are stored as serialized protobuf records in .tfevents files.
6
+ * This parser handles the basic scalar summary format.
7
+ *
8
+ * TODO: Implement protobuf parsing with protobufjs
9
+ * The event format is:
10
+ * - 8 bytes: data length (uint64 LE)
11
+ * - 4 bytes: CRC32 of length
12
+ * - N bytes: data (serialized Event protobuf)
13
+ * - 4 bytes: CRC32 of data
14
+ */
15
+ export declare function parseTensorboardEvents(_buffer: Buffer): MetricPoint[];
16
+ //# sourceMappingURL=tensorboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tensorboard.d.ts","sourceRoot":"","sources":["../../../src/metrics/parsers/tensorboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,GACd,WAAW,EAAE,CAOf"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * TensorBoard event file parser.
3
+ *
4
+ * TensorBoard events are stored as serialized protobuf records in .tfevents files.
5
+ * This parser handles the basic scalar summary format.
6
+ *
7
+ * TODO: Implement protobuf parsing with protobufjs
8
+ * The event format is:
9
+ * - 8 bytes: data length (uint64 LE)
10
+ * - 4 bytes: CRC32 of length
11
+ * - N bytes: data (serialized Event protobuf)
12
+ * - 4 bytes: CRC32 of data
13
+ */
14
+ export function parseTensorboardEvents(_buffer) {
15
+ // TODO: Implement with protobufjs
16
+ // 1. Define Event, Summary, Value proto schemas
17
+ // 2. Read tfrecord framing (length + crc + data + crc)
18
+ // 3. Decode Event protobuf
19
+ // 4. Extract scalar summaries
20
+ return [];
21
+ }
22
+ //# sourceMappingURL=tensorboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tensorboard.js","sourceRoot":"","sources":["../../../src/metrics/parsers/tensorboard.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAAe;IAEf,kCAAkC;IAClC,gDAAgD;IAChD,uDAAuD;IACvD,2BAA2B;IAC3B,8BAA8B;IAC9B,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,33 @@
1
+ export interface MetricPoint {
2
+ metricName: string;
3
+ value: number;
4
+ step?: number;
5
+ timestamp: number;
6
+ }
7
+ export declare class MetricStore {
8
+ insert(taskId: string, machineId: string, point: MetricPoint): void;
9
+ insertBatch(taskId: string, machineId: string, points: MetricPoint[]): void;
10
+ getLatest(taskId: string, metricName: string): MetricPoint | null;
11
+ getSeries(taskId: string, metricName: string, limit?: number): MetricPoint[];
12
+ getMetricNames(taskId: string): string[];
13
+ /** Get all distinct task IDs that have metrics */
14
+ getTaskIds(): string[];
15
+ /** Get all metric names across all tasks */
16
+ getAllMetricNames(): string[];
17
+ /** Get series for a metric name across all tasks, merged by timestamp */
18
+ getSeriesAcrossTasks(metricName: string, limit?: number): MetricPoint[];
19
+ /** Get a summary of final metrics for a task (latest value of each metric) */
20
+ getTaskSummary(taskId: string): Record<string, {
21
+ latest: number;
22
+ min: number;
23
+ max: number;
24
+ count: number;
25
+ }>;
26
+ /** Delete all metrics for a specific task */
27
+ clearTask(taskId: string): number;
28
+ /** Delete all metrics */
29
+ clear(): number;
30
+ /** Clean up metrics older than retentionDays */
31
+ cleanup(retentionDays: number): number;
32
+ }
33
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/metrics/store.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,WAAW;IACtB,MAAM,CACJ,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,WAAW,GACjB,IAAI;IAeP,WAAW,CACT,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,WAAW,EAAE,GACpB,IAAI;IAuBP,SAAS,CACP,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,WAAW,GAAG,IAAI;IAoBrB,SAAS,CACP,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,KAAK,SAAM,GACV,WAAW,EAAE;IAqBhB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAUxC,kDAAkD;IAClD,UAAU,IAAI,MAAM,EAAE;IAQtB,4CAA4C;IAC5C,iBAAiB,IAAI,MAAM,EAAE;IAQ7B,yEAAyE;IACzE,oBAAoB,CAClB,UAAU,EAAE,MAAM,EAClB,KAAK,SAAM,GACV,WAAW,EAAE;IAqBhB,8EAA8E;IAC9E,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IA2B3G,6CAA6C;IAC7C,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAQjC,yBAAyB;IACzB,KAAK,IAAI,MAAM;IAMf,gDAAgD;IAChD,OAAO,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM;CAQvC"}
@@ -0,0 +1,141 @@
1
+ import { getDb } from "../store/database.js";
2
+ export class MetricStore {
3
+ insert(taskId, machineId, point) {
4
+ const db = getDb();
5
+ db.prepare(`INSERT INTO metrics (task_id, machine_id, metric_name, value, step, timestamp)
6
+ VALUES (?, ?, ?, ?, ?, ?)`).run(taskId, machineId, point.metricName, point.value, point.step ?? null, point.timestamp);
7
+ }
8
+ insertBatch(taskId, machineId, points) {
9
+ const db = getDb();
10
+ const stmt = db.prepare(`INSERT INTO metrics (task_id, machine_id, metric_name, value, step, timestamp)
11
+ VALUES (?, ?, ?, ?, ?, ?)`);
12
+ const insertMany = db.transaction((pts) => {
13
+ for (const p of pts) {
14
+ stmt.run(taskId, machineId, p.metricName, p.value, p.step ?? null, p.timestamp);
15
+ }
16
+ });
17
+ insertMany(points);
18
+ }
19
+ getLatest(taskId, metricName) {
20
+ const db = getDb();
21
+ const row = db
22
+ .prepare(`SELECT * FROM metrics
23
+ WHERE task_id = ? AND metric_name = ?
24
+ ORDER BY timestamp DESC LIMIT 1`)
25
+ .get(taskId, metricName);
26
+ if (!row)
27
+ return null;
28
+ return {
29
+ metricName: row.metric_name,
30
+ value: row.value,
31
+ step: row.step,
32
+ timestamp: row.timestamp,
33
+ };
34
+ }
35
+ getSeries(taskId, metricName, limit = 200) {
36
+ const db = getDb();
37
+ const rows = db
38
+ .prepare(`SELECT * FROM (
39
+ SELECT * FROM metrics
40
+ WHERE task_id = ? AND metric_name = ?
41
+ ORDER BY timestamp DESC
42
+ LIMIT ?
43
+ ) ORDER BY timestamp ASC`)
44
+ .all(taskId, metricName, limit);
45
+ return rows.map((row) => ({
46
+ metricName: row.metric_name,
47
+ value: row.value,
48
+ step: row.step,
49
+ timestamp: row.timestamp,
50
+ }));
51
+ }
52
+ getMetricNames(taskId) {
53
+ const db = getDb();
54
+ const rows = db
55
+ .prepare(`SELECT DISTINCT metric_name FROM metrics WHERE task_id = ?`)
56
+ .all(taskId);
57
+ return rows.map((r) => r.metric_name);
58
+ }
59
+ /** Get all distinct task IDs that have metrics */
60
+ getTaskIds() {
61
+ const db = getDb();
62
+ const rows = db
63
+ .prepare("SELECT DISTINCT task_id FROM metrics")
64
+ .all();
65
+ return rows.map((r) => r.task_id);
66
+ }
67
+ /** Get all metric names across all tasks */
68
+ getAllMetricNames() {
69
+ const db = getDb();
70
+ const rows = db
71
+ .prepare("SELECT DISTINCT metric_name FROM metrics")
72
+ .all();
73
+ return rows.map((r) => r.metric_name);
74
+ }
75
+ /** Get series for a metric name across all tasks, merged by timestamp */
76
+ getSeriesAcrossTasks(metricName, limit = 200) {
77
+ const db = getDb();
78
+ const rows = db
79
+ .prepare(`SELECT * FROM (
80
+ SELECT * FROM metrics
81
+ WHERE metric_name = ?
82
+ ORDER BY timestamp DESC
83
+ LIMIT ?
84
+ ) ORDER BY timestamp ASC`)
85
+ .all(metricName, limit);
86
+ return rows.map((row) => ({
87
+ metricName: row.metric_name,
88
+ value: row.value,
89
+ step: row.step,
90
+ timestamp: row.timestamp,
91
+ }));
92
+ }
93
+ /** Get a summary of final metrics for a task (latest value of each metric) */
94
+ getTaskSummary(taskId) {
95
+ const db = getDb();
96
+ const rows = db
97
+ .prepare(`SELECT metric_name,
98
+ (SELECT value FROM metrics m2 WHERE m2.task_id = m1.task_id AND m2.metric_name = m1.metric_name ORDER BY timestamp DESC LIMIT 1) as latest,
99
+ MIN(value) as min_val,
100
+ MAX(value) as max_val,
101
+ COUNT(*) as cnt
102
+ FROM metrics m1
103
+ WHERE task_id = ?
104
+ GROUP BY metric_name`)
105
+ .all(taskId);
106
+ const summary = {};
107
+ for (const row of rows) {
108
+ summary[row.metric_name] = {
109
+ latest: row.latest,
110
+ min: row.min_val,
111
+ max: row.max_val,
112
+ count: row.cnt,
113
+ };
114
+ }
115
+ return summary;
116
+ }
117
+ /** Delete all metrics for a specific task */
118
+ clearTask(taskId) {
119
+ const db = getDb();
120
+ const result = db
121
+ .prepare("DELETE FROM metrics WHERE task_id = ?")
122
+ .run(taskId);
123
+ return result.changes;
124
+ }
125
+ /** Delete all metrics */
126
+ clear() {
127
+ const db = getDb();
128
+ const result = db.prepare("DELETE FROM metrics").run();
129
+ return result.changes;
130
+ }
131
+ /** Clean up metrics older than retentionDays */
132
+ cleanup(retentionDays) {
133
+ const db = getDb();
134
+ const cutoff = Date.now() - retentionDays * 24 * 60 * 60 * 1000;
135
+ const result = db
136
+ .prepare("DELETE FROM metrics WHERE timestamp < ?")
137
+ .run(cutoff);
138
+ return result.changes;
139
+ }
140
+ }
141
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/metrics/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { TokenStore } from "./token-store.js";
2
+ import type { AuthCredentials } from "../types.js";
3
+ export declare class AuthManager {
4
+ readonly tokenStore: TokenStore;
5
+ private refreshHandlers;
6
+ constructor();
7
+ /**
8
+ * Register a refresh handler for a provider.
9
+ * Called automatically when tokens need refreshing.
10
+ */
11
+ registerRefreshHandler(provider: "claude" | "openai", handler: (refreshToken: string) => Promise<{
12
+ accessToken: string;
13
+ refreshToken: string;
14
+ expiresAt: number;
15
+ }>): void;
16
+ getCredentials(provider: "claude" | "openai"): Promise<AuthCredentials | null>;
17
+ setApiKey(provider: "claude" | "openai", apiKey: string): Promise<void>;
18
+ setOAuthTokens(provider: "claude" | "openai", accessToken: string, refreshToken: string, expiresAt: number): Promise<void>;
19
+ isAuthenticated(provider: "claude" | "openai"): boolean;
20
+ private refresh;
21
+ }
22
+ //# sourceMappingURL=auth-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-manager.d.ts","sourceRoot":"","sources":["../../../src/providers/auth/auth-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAc,MAAM,aAAa,CAAC;AAE/D,qBAAa,WAAW;IACtB,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,OAAO,CAAC,eAAe,CAOnB;;IAMJ;;;OAGG;IACH,sBAAsB,CACpB,QAAQ,EAAE,QAAQ,GAAG,QAAQ,EAC7B,OAAO,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC;QACzC,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,GACD,IAAI;IAID,cAAc,CAClB,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAC5B,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAgB5B,SAAS,CACb,QAAQ,EAAE,QAAQ,GAAG,QAAQ,EAC7B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC;IAQV,cAAc,CAClB,QAAQ,EAAE,QAAQ,GAAG,QAAQ,EAC7B,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;IAUhB,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO;YASzC,OAAO;CA0BtB"}
@@ -0,0 +1,77 @@
1
+ import { TokenStore } from "./token-store.js";
2
+ export class AuthManager {
3
+ tokenStore;
4
+ refreshHandlers = new Map();
5
+ constructor() {
6
+ this.tokenStore = new TokenStore();
7
+ }
8
+ /**
9
+ * Register a refresh handler for a provider.
10
+ * Called automatically when tokens need refreshing.
11
+ */
12
+ registerRefreshHandler(provider, handler) {
13
+ this.refreshHandlers.set(provider, handler);
14
+ }
15
+ async getCredentials(provider) {
16
+ const creds = this.tokenStore.get(provider);
17
+ if (!creds)
18
+ return null;
19
+ // Auto-refresh OAuth tokens when needed
20
+ if (creds.method === "oauth" &&
21
+ this.tokenStore.needsRefresh(provider) &&
22
+ creds.refreshToken) {
23
+ return this.refresh(provider, creds);
24
+ }
25
+ return creds;
26
+ }
27
+ async setApiKey(provider, apiKey) {
28
+ this.tokenStore.set(provider, {
29
+ method: "api_key",
30
+ provider,
31
+ apiKey,
32
+ });
33
+ }
34
+ async setOAuthTokens(provider, accessToken, refreshToken, expiresAt) {
35
+ this.tokenStore.set(provider, {
36
+ method: "oauth",
37
+ provider,
38
+ accessToken,
39
+ refreshToken,
40
+ expiresAt,
41
+ });
42
+ }
43
+ isAuthenticated(provider) {
44
+ const creds = this.tokenStore.get(provider);
45
+ if (!creds)
46
+ return false;
47
+ if (creds.method === "api_key")
48
+ return !!creds.apiKey;
49
+ // For OAuth, consider authenticated if we have tokens
50
+ // (even if expired, we can try to refresh)
51
+ return !!(creds.accessToken || creds.refreshToken);
52
+ }
53
+ async refresh(provider, creds) {
54
+ const handler = this.refreshHandlers.get(provider);
55
+ if (!handler || !creds.refreshToken) {
56
+ // Can't refresh — return stale creds and let the API call fail
57
+ return creds;
58
+ }
59
+ try {
60
+ const tokens = await handler(creds.refreshToken);
61
+ const updated = {
62
+ method: "oauth",
63
+ provider,
64
+ accessToken: tokens.accessToken,
65
+ refreshToken: tokens.refreshToken,
66
+ expiresAt: tokens.expiresAt,
67
+ };
68
+ this.tokenStore.set(provider, updated);
69
+ return updated;
70
+ }
71
+ catch {
72
+ // Refresh failed — return stale creds
73
+ return creds;
74
+ }
75
+ }
76
+ }
77
+ //# sourceMappingURL=auth-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-manager.js","sourceRoot":"","sources":["../../../src/providers/auth/auth-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,MAAM,OAAO,WAAW;IACb,UAAU,CAAa;IACxB,eAAe,GAAG,IAAI,GAAG,EAO9B,CAAC;IAEJ;QACE,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;IACrC,CAAC;IAED;;;OAGG;IACH,sBAAsB,CACpB,QAA6B,EAC7B,OAIE;QAEF,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,QAA6B;QAE7B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,wCAAwC;QACxC,IACE,KAAK,CAAC,MAAM,KAAK,OAAO;YACxB,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC;YACtC,KAAK,CAAC,YAAY,EAClB,CAAC;YACD,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,SAAS,CACb,QAA6B,EAC7B,MAAc;QAEd,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE;YAC5B,MAAM,EAAE,SAAS;YACjB,QAAQ;YACR,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,QAA6B,EAC7B,WAAmB,EACnB,YAAoB,EACpB,SAAiB;QAEjB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE;YAC5B,MAAM,EAAE,OAAO;YACf,QAAQ;YACR,WAAW;YACX,YAAY;YACZ,SAAS;SACV,CAAC,CAAC;IACL,CAAC;IAED,eAAe,CAAC,QAA6B;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;QACtD,sDAAsD;QACtD,2CAA2C;QAC3C,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;IACrD,CAAC;IAEO,KAAK,CAAC,OAAO,CACnB,QAA6B,EAC7B,KAAsB;QAEtB,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;YACpC,+DAA+D;YAC/D,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACjD,MAAM,OAAO,GAAoB;gBAC/B,MAAM,EAAE,OAAO;gBACf,QAAQ;gBACR,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,SAAS,EAAE,MAAM,CAAC,SAAS;aAC5B,CAAC;YACF,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACvC,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC;YACP,sCAAsC;YACtC,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ import type { AuthCredentials } from "../types.js";
2
+ export declare class TokenStore {
3
+ private filePath;
4
+ private data;
5
+ constructor();
6
+ private load;
7
+ private save;
8
+ get(provider: "claude" | "openai"): AuthCredentials | null;
9
+ set(provider: "claude" | "openai", creds: AuthCredentials): void;
10
+ clear(provider: "claude" | "openai"): void;
11
+ isExpired(provider: "claude" | "openai"): boolean;
12
+ needsRefresh(provider: "claude" | "openai"): boolean;
13
+ }
14
+ //# sourceMappingURL=token-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-store.d.ts","sourceRoot":"","sources":["../../../src/providers/auth/token-store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AASnD,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,IAAI,CAAa;;IASzB,OAAO,CAAC,IAAI;IASZ,OAAO,CAAC,IAAI;IAIZ,GAAG,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,eAAe,GAAG,IAAI;IAI1D,GAAG,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI;IAKhE,KAAK,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI;IAK1C,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO;IAMjD,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO;CAQrD"}