@snoglobe/helios 0.1.0 → 0.2.1

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 (250) hide show
  1. package/README.md +1 -1
  2. package/dist/acp/entry.d.ts +7 -0
  3. package/dist/acp/entry.d.ts.map +1 -0
  4. package/dist/acp/entry.js +46 -0
  5. package/dist/acp/entry.js.map +1 -0
  6. package/dist/acp/server.d.ts +57 -0
  7. package/dist/acp/server.d.ts.map +1 -0
  8. package/dist/acp/server.js +434 -0
  9. package/dist/acp/server.js.map +1 -0
  10. package/dist/acp/transport.d.ts +31 -0
  11. package/dist/acp/transport.d.ts.map +1 -0
  12. package/dist/acp/transport.js +116 -0
  13. package/dist/acp/transport.js.map +1 -0
  14. package/dist/acp/types.d.ts +213 -0
  15. package/dist/acp/types.d.ts.map +1 -0
  16. package/dist/acp/types.js +3 -0
  17. package/dist/acp/types.js.map +1 -0
  18. package/dist/app.d.ts +8 -1
  19. package/dist/app.d.ts.map +1 -1
  20. package/dist/app.js +51 -281
  21. package/dist/app.js.map +1 -1
  22. package/dist/bootstrap.d.ts +3 -0
  23. package/dist/bootstrap.d.ts.map +1 -0
  24. package/dist/bootstrap.js +26 -0
  25. package/dist/bootstrap.js.map +1 -0
  26. package/dist/cli/auth.d.ts +20 -0
  27. package/dist/cli/auth.d.ts.map +1 -0
  28. package/dist/cli/auth.js +62 -0
  29. package/dist/cli/auth.js.map +1 -0
  30. package/dist/cli/doctor.d.ts +9 -0
  31. package/dist/cli/doctor.d.ts.map +1 -0
  32. package/dist/cli/doctor.js +368 -0
  33. package/dist/cli/doctor.js.map +1 -0
  34. package/dist/cli/env.d.ts +13 -0
  35. package/dist/cli/env.d.ts.map +1 -0
  36. package/dist/cli/env.js +16 -0
  37. package/dist/cli/env.js.map +1 -0
  38. package/dist/cli/export.d.ts +11 -0
  39. package/dist/cli/export.d.ts.map +1 -0
  40. package/dist/cli/export.js +103 -0
  41. package/dist/cli/export.js.map +1 -0
  42. package/dist/cli/index.d.ts +22 -0
  43. package/dist/cli/index.d.ts.map +1 -0
  44. package/dist/cli/index.js +71 -0
  45. package/dist/cli/index.js.map +1 -0
  46. package/dist/cli/init-cmd.d.ts +11 -0
  47. package/dist/cli/init-cmd.d.ts.map +1 -0
  48. package/dist/cli/init-cmd.js +37 -0
  49. package/dist/cli/init-cmd.js.map +1 -0
  50. package/dist/cli/kill.d.ts +8 -0
  51. package/dist/cli/kill.d.ts.map +1 -0
  52. package/dist/cli/kill.js +46 -0
  53. package/dist/cli/kill.js.map +1 -0
  54. package/dist/cli/options.d.ts +18 -0
  55. package/dist/cli/options.d.ts.map +1 -0
  56. package/dist/cli/options.js +24 -0
  57. package/dist/cli/options.js.map +1 -0
  58. package/dist/cli/replay.d.ts +9 -0
  59. package/dist/cli/replay.d.ts.map +1 -0
  60. package/dist/cli/replay.js +65 -0
  61. package/dist/cli/replay.js.map +1 -0
  62. package/dist/cli/report.d.ts +11 -0
  63. package/dist/cli/report.d.ts.map +1 -0
  64. package/dist/cli/report.js +70 -0
  65. package/dist/cli/report.js.map +1 -0
  66. package/dist/cli/run.d.ts +17 -0
  67. package/dist/cli/run.d.ts.map +1 -0
  68. package/dist/cli/run.js +120 -0
  69. package/dist/cli/run.js.map +1 -0
  70. package/dist/cli/search.d.ts +9 -0
  71. package/dist/cli/search.d.ts.map +1 -0
  72. package/dist/cli/search.js +52 -0
  73. package/dist/cli/search.js.map +1 -0
  74. package/dist/cli/sessions.d.ts +8 -0
  75. package/dist/cli/sessions.d.ts.map +1 -0
  76. package/dist/cli/sessions.js +38 -0
  77. package/dist/cli/sessions.js.map +1 -0
  78. package/dist/cli/watch.d.ts +8 -0
  79. package/dist/cli/watch.d.ts.map +1 -0
  80. package/dist/cli/watch.js +81 -0
  81. package/dist/cli/watch.js.map +1 -0
  82. package/dist/config/project.d.ts +63 -0
  83. package/dist/config/project.d.ts.map +1 -0
  84. package/dist/config/project.js +112 -0
  85. package/dist/config/project.js.map +1 -0
  86. package/dist/core/orchestrator.d.ts +4 -2
  87. package/dist/core/orchestrator.d.ts.map +1 -1
  88. package/dist/core/orchestrator.js +8 -3
  89. package/dist/core/orchestrator.js.map +1 -1
  90. package/dist/core/task-poller.d.ts +43 -0
  91. package/dist/core/task-poller.d.ts.map +1 -0
  92. package/dist/core/task-poller.js +98 -0
  93. package/dist/core/task-poller.js.map +1 -0
  94. package/dist/experiments/branching.d.ts +38 -0
  95. package/dist/experiments/branching.d.ts.map +1 -0
  96. package/dist/experiments/branching.js +80 -0
  97. package/dist/experiments/branching.js.map +1 -0
  98. package/dist/hub/client.d.ts +70 -0
  99. package/dist/hub/client.d.ts.map +1 -0
  100. package/dist/hub/client.js +140 -0
  101. package/dist/hub/client.js.map +1 -0
  102. package/dist/hub/config.d.ts +9 -0
  103. package/dist/hub/config.d.ts.map +1 -0
  104. package/dist/hub/config.js +38 -0
  105. package/dist/hub/config.js.map +1 -0
  106. package/dist/index.d.ts +0 -1
  107. package/dist/index.js +25 -3
  108. package/dist/index.js.map +1 -1
  109. package/dist/init.d.ts +44 -0
  110. package/dist/init.d.ts.map +1 -0
  111. package/dist/init.js +387 -0
  112. package/dist/init.js.map +1 -0
  113. package/dist/memory/context-gate.d.ts.map +1 -1
  114. package/dist/memory/context-gate.js +1 -1
  115. package/dist/memory/context-gate.js.map +1 -1
  116. package/dist/memory/experiment-tracker.d.ts.map +1 -1
  117. package/dist/memory/experiment-tracker.js +2 -6
  118. package/dist/memory/experiment-tracker.js.map +1 -1
  119. package/dist/memory/memory-store.d.ts.map +1 -1
  120. package/dist/memory/memory-store.js +16 -20
  121. package/dist/memory/memory-store.js.map +1 -1
  122. package/dist/metrics/collector.d.ts.map +1 -1
  123. package/dist/metrics/collector.js +7 -7
  124. package/dist/metrics/collector.js.map +1 -1
  125. package/dist/metrics/resources.d.ts +44 -0
  126. package/dist/metrics/resources.d.ts.map +1 -0
  127. package/dist/metrics/resources.js +382 -0
  128. package/dist/metrics/resources.js.map +1 -0
  129. package/dist/metrics/store.d.ts +10 -2
  130. package/dist/metrics/store.d.ts.map +1 -1
  131. package/dist/metrics/store.js +91 -27
  132. package/dist/metrics/store.js.map +1 -1
  133. package/dist/notifications/index.d.ts +2 -0
  134. package/dist/notifications/index.d.ts.map +1 -0
  135. package/dist/notifications/index.js +2 -0
  136. package/dist/notifications/index.js.map +1 -0
  137. package/dist/notifications/notifier.d.ts +36 -0
  138. package/dist/notifications/notifier.d.ts.map +1 -0
  139. package/dist/notifications/notifier.js +102 -0
  140. package/dist/notifications/notifier.js.map +1 -0
  141. package/dist/paths.d.ts +3 -0
  142. package/dist/paths.d.ts.map +1 -0
  143. package/dist/paths.js +5 -0
  144. package/dist/paths.js.map +1 -0
  145. package/dist/providers/claude/provider.d.ts +7 -3
  146. package/dist/providers/claude/provider.d.ts.map +1 -1
  147. package/dist/providers/claude/provider.js +48 -8
  148. package/dist/providers/claude/provider.js.map +1 -1
  149. package/dist/providers/openai/callback-server.d.ts +5 -1
  150. package/dist/providers/openai/callback-server.d.ts.map +1 -1
  151. package/dist/providers/openai/callback-server.js +42 -20
  152. package/dist/providers/openai/callback-server.js.map +1 -1
  153. package/dist/providers/openai/oauth.d.ts +4 -0
  154. package/dist/providers/openai/oauth.d.ts.map +1 -1
  155. package/dist/providers/openai/oauth.js +35 -14
  156. package/dist/providers/openai/oauth.js.map +1 -1
  157. package/dist/providers/openai/provider.d.ts +6 -3
  158. package/dist/providers/openai/provider.d.ts.map +1 -1
  159. package/dist/providers/openai/provider.js +35 -9
  160. package/dist/providers/openai/provider.js.map +1 -1
  161. package/dist/providers/types.d.ts +9 -1
  162. package/dist/providers/types.d.ts.map +1 -1
  163. package/dist/providers/types.js.map +1 -1
  164. package/dist/remote/config.d.ts.map +1 -1
  165. package/dist/remote/config.js +4 -8
  166. package/dist/remote/config.js.map +1 -1
  167. package/dist/remote/connection-pool.d.ts.map +1 -1
  168. package/dist/remote/connection-pool.js +9 -5
  169. package/dist/remote/connection-pool.js.map +1 -1
  170. package/dist/store/database.d.ts.map +1 -1
  171. package/dist/store/database.js +2 -2
  172. package/dist/store/database.js.map +1 -1
  173. package/dist/store/migrations.d.ts.map +1 -1
  174. package/dist/store/migrations.js +27 -0
  175. package/dist/store/migrations.js.map +1 -1
  176. package/dist/store/preferences.d.ts +2 -0
  177. package/dist/store/preferences.d.ts.map +1 -1
  178. package/dist/store/preferences.js +2 -2
  179. package/dist/store/preferences.js.map +1 -1
  180. package/dist/store/session-store.d.ts +6 -0
  181. package/dist/store/session-store.d.ts.map +1 -1
  182. package/dist/store/session-store.js +20 -5
  183. package/dist/store/session-store.js.map +1 -1
  184. package/dist/tools/env-snapshot.d.ts +5 -0
  185. package/dist/tools/env-snapshot.d.ts.map +1 -0
  186. package/dist/tools/env-snapshot.js +174 -0
  187. package/dist/tools/env-snapshot.js.map +1 -0
  188. package/dist/tools/experiment-branch.d.ts +7 -0
  189. package/dist/tools/experiment-branch.d.ts.map +1 -0
  190. package/dist/tools/experiment-branch.js +167 -0
  191. package/dist/tools/experiment-branch.js.map +1 -0
  192. package/dist/tools/file-ops.d.ts.map +1 -1
  193. package/dist/tools/file-ops.js +1 -3
  194. package/dist/tools/file-ops.js.map +1 -1
  195. package/dist/tools/hub.d.ts +5 -0
  196. package/dist/tools/hub.d.ts.map +1 -0
  197. package/dist/tools/hub.js +298 -0
  198. package/dist/tools/hub.js.map +1 -0
  199. package/dist/tools/sweep.d.ts +6 -0
  200. package/dist/tools/sweep.d.ts.map +1 -0
  201. package/dist/tools/sweep.js +153 -0
  202. package/dist/tools/sweep.js.map +1 -0
  203. package/dist/tools/web-fetch.d.ts.map +1 -1
  204. package/dist/tools/web-fetch.js +2 -1
  205. package/dist/tools/web-fetch.js.map +1 -1
  206. package/dist/tools/writeup.d.ts +11 -0
  207. package/dist/tools/writeup.d.ts.map +1 -0
  208. package/dist/tools/writeup.js +102 -0
  209. package/dist/tools/writeup.js.map +1 -0
  210. package/dist/ui/commands.d.ts +36 -0
  211. package/dist/ui/commands.d.ts.map +1 -1
  212. package/dist/ui/commands.js +501 -1
  213. package/dist/ui/commands.js.map +1 -1
  214. package/dist/ui/components/input-bar.js.map +1 -1
  215. package/dist/ui/components/overlay-header.d.ts.map +1 -1
  216. package/dist/ui/components/overlay-header.js.map +1 -1
  217. package/dist/ui/components/status-bar.js +1 -1
  218. package/dist/ui/components/status-bar.js.map +1 -1
  219. package/dist/ui/format.d.ts +4 -0
  220. package/dist/ui/format.d.ts.map +1 -1
  221. package/dist/ui/format.js +16 -0
  222. package/dist/ui/format.js.map +1 -1
  223. package/dist/ui/layout.d.ts +7 -42
  224. package/dist/ui/layout.d.ts.map +1 -1
  225. package/dist/ui/layout.js +71 -543
  226. package/dist/ui/layout.js.map +1 -1
  227. package/dist/ui/overlays/metrics-overlay.js.map +1 -1
  228. package/dist/ui/overlays/task-overlay.d.ts +1 -1
  229. package/dist/ui/overlays/task-overlay.d.ts.map +1 -1
  230. package/dist/ui/overlays/task-overlay.js.map +1 -1
  231. package/dist/ui/panels/conversation.d.ts +1 -1
  232. package/dist/ui/panels/conversation.d.ts.map +1 -1
  233. package/dist/ui/panels/conversation.js +1 -2
  234. package/dist/ui/panels/conversation.js.map +1 -1
  235. package/dist/ui/panels/metrics-dashboard.d.ts.map +1 -1
  236. package/dist/ui/panels/metrics-dashboard.js.map +1 -1
  237. package/dist/ui/panels/sleep-panel.js.map +1 -1
  238. package/dist/ui/panels/sticky-notes.d.ts.map +1 -1
  239. package/dist/ui/panels/sticky-notes.js.map +1 -1
  240. package/dist/ui/panels/task-list.d.ts +4 -2
  241. package/dist/ui/panels/task-list.d.ts.map +1 -1
  242. package/dist/ui/panels/task-list.js +41 -9
  243. package/dist/ui/panels/task-list.js.map +1 -1
  244. package/dist/ui/theme.d.ts.map +1 -1
  245. package/dist/ui/theme.js.map +1 -1
  246. package/dist/ui/types.d.ts +22 -0
  247. package/dist/ui/types.d.ts.map +1 -0
  248. package/dist/ui/types.js +2 -0
  249. package/dist/ui/types.js.map +1 -0
  250. package/package.json +19 -6
@@ -0,0 +1,153 @@
1
+ import { patternsFromNames, patternsFromRegexes, } from "../metrics/parser.js";
2
+ import { formatError, shellQuote } from "../ui/format.js";
3
+ /**
4
+ * Compute the cartesian product of a parameter grid.
5
+ * e.g. {lr: [0.001, 0.0001], bs: [32, 64]} → [{lr:0.001,bs:32}, {lr:0.001,bs:64}, ...]
6
+ */
7
+ function cartesianProduct(params) {
8
+ const keys = Object.keys(params);
9
+ if (keys.length === 0)
10
+ return [{}];
11
+ const [first, ...rest] = keys;
12
+ const restProduct = cartesianProduct(Object.fromEntries(rest.map((k) => [k, params[k]])));
13
+ return params[first].flatMap((val) => restProduct.map((combo) => ({ [first]: val, ...combo })));
14
+ }
15
+ /**
16
+ * Replace {param_name} placeholders in a command template with concrete values.
17
+ */
18
+ function buildCommand(template, params) {
19
+ let cmd = template;
20
+ for (const [key, value] of Object.entries(params)) {
21
+ const strVal = String(value);
22
+ // Numeric values are safe to inline; quote anything else
23
+ const safe = /^-?[\d.e+-]+$/.test(strVal) ? strVal : shellQuote(strVal);
24
+ cmd = cmd.replaceAll(`{${key}}`, safe);
25
+ }
26
+ return cmd;
27
+ }
28
+ export function createSweepTool(executor, pool, metricCollector) {
29
+ return {
30
+ name: "sweep",
31
+ description: "Launch a hyperparameter sweep. Defines a parameter grid and runs experiments in parallel across available machines. Each combination gets its own background process with metric tracking.",
32
+ parameters: {
33
+ type: "object",
34
+ properties: {
35
+ command_template: {
36
+ type: "string",
37
+ description: 'Command template with {param_name} placeholders. Example: "python train.py --lr {lr} --batch-size {bs}"',
38
+ },
39
+ params: {
40
+ type: "object",
41
+ additionalProperties: {
42
+ type: "array",
43
+ items: {},
44
+ },
45
+ description: 'Parameter grid. Keys are param names, values are arrays of values. Example: {"lr": [0.001, 0.0001], "bs": [32, 64]}',
46
+ },
47
+ machines: {
48
+ type: "array",
49
+ items: { type: "string" },
50
+ description: "Machine IDs to distribute across. Default: all connected machines.",
51
+ },
52
+ metric_names: {
53
+ type: "array",
54
+ items: { type: "string" },
55
+ description: 'Metrics to track for each run in key=value format. Example: ["loss", "acc"]',
56
+ },
57
+ metric_patterns: {
58
+ type: "object",
59
+ additionalProperties: { type: "string" },
60
+ description: 'Custom regex patterns for metric parsing. Example: {"loss": "Loss:\\\\s*([\\\\d.e+-]+)"}',
61
+ },
62
+ max_parallel: {
63
+ type: "number",
64
+ description: "Max concurrent runs. Default: number of available machines.",
65
+ },
66
+ },
67
+ required: ["command_template", "params"],
68
+ },
69
+ execute: async (args) => {
70
+ const commandTemplate = args.command_template;
71
+ const paramGrid = args.params;
72
+ const requestedMachines = args.machines;
73
+ const metricNames = args.metric_names;
74
+ const metricPatterns = args.metric_patterns;
75
+ const maxParallelArg = args.max_parallel;
76
+ // 1. Generate all parameter combinations
77
+ const combinations = cartesianProduct(paramGrid);
78
+ if (combinations.length === 0) {
79
+ return JSON.stringify({ error: "No parameter combinations generated. Check your params grid." });
80
+ }
81
+ // 2. Determine available machines
82
+ let machineIds;
83
+ if (requestedMachines && requestedMachines.length > 0) {
84
+ machineIds = requestedMachines;
85
+ }
86
+ else {
87
+ machineIds = pool
88
+ .getMachineIds()
89
+ .filter((id) => pool.getStatus(id).connected);
90
+ }
91
+ if (machineIds.length === 0) {
92
+ return JSON.stringify({ error: "No connected machines available for sweep." });
93
+ }
94
+ const maxParallel = maxParallelArg ?? machineIds.length;
95
+ const toLaunch = combinations.slice(0, maxParallel);
96
+ const skipped = combinations.length - toLaunch.length;
97
+ // Build metric patterns once (shared across all runs)
98
+ let patterns;
99
+ if (metricPatterns) {
100
+ patterns = patternsFromRegexes(metricPatterns);
101
+ }
102
+ else if (metricNames && metricNames.length > 0) {
103
+ patterns = patternsFromNames(metricNames);
104
+ }
105
+ // 3. Launch runs, distributing across machines round-robin
106
+ const launched = [];
107
+ const errors = [];
108
+ await Promise.all(toLaunch.map(async (combo, i) => {
109
+ const machineId = machineIds[i % machineIds.length];
110
+ const command = buildCommand(commandTemplate, combo);
111
+ try {
112
+ const proc = await executor.execBackground(machineId, command, undefined, { metricNames, metricPatterns });
113
+ // Register with metric collector if patterns are available
114
+ if (patterns && proc.logPath) {
115
+ try {
116
+ metricCollector.addSource({
117
+ taskId: `${machineId}:${proc.pid}`,
118
+ machineId,
119
+ logPath: proc.logPath,
120
+ patterns,
121
+ });
122
+ }
123
+ catch {
124
+ // Metric registration failure is non-fatal
125
+ }
126
+ }
127
+ launched.push({
128
+ machineId,
129
+ pid: proc.pid,
130
+ params: combo,
131
+ command,
132
+ log_path: proc.logPath,
133
+ });
134
+ }
135
+ catch (err) {
136
+ errors.push({
137
+ params: combo,
138
+ error: formatError(err),
139
+ });
140
+ }
141
+ }));
142
+ return JSON.stringify({
143
+ launched,
144
+ skipped,
145
+ skipped_note: skipped > 0 ? `${skipped} combinations were not launched due to max_parallel=${maxParallel}. Call sweep again with the remaining params to run them.` : undefined,
146
+ total_combinations: combinations.length,
147
+ machines_used: machineIds,
148
+ ...(errors.length > 0 ? { errors } : {}),
149
+ });
150
+ },
151
+ };
152
+ }
153
+ //# sourceMappingURL=sweep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sweep.js","sourceRoot":"","sources":["../../src/tools/sweep.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"web-fetch.d.ts","sourceRoot":"","sources":["../../src/tools/web-fetch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,wBAAgB,kBAAkB,IAAI,cAAc,CAyEnD"}
1
+ {"version":3,"file":"web-fetch.d.ts","sourceRoot":"","sources":["../../src/tools/web-fetch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,wBAAgB,kBAAkB,IAAI,cAAc,CAyEnD"}
@@ -1,5 +1,6 @@
1
1
  import { Readability } from "@mozilla/readability";
2
2
  import { parseHTML } from "linkedom";
3
+ import { formatError } from "../ui/format.js";
3
4
  export function createWebFetchTool() {
4
5
  return {
5
6
  name: "web_fetch",
@@ -64,7 +65,7 @@ export function createWebFetchTool() {
64
65
  }
65
66
  catch (err) {
66
67
  return JSON.stringify({
67
- error: err instanceof Error ? err.message : String(err),
68
+ error: formatError(err),
68
69
  });
69
70
  }
70
71
  },
@@ -1 +1 @@
1
- {"version":3,"file":"web-fetch.js","sourceRoot":"","sources":["../../src/tools/web-fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGrC,MAAM,UAAU,kBAAkB;IAChC,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,WAAW,EACT,+MAA+M;QACjN,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,EAAE;oBACH,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,cAAc;iBAC5B;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,2CAA2C;iBACzD;aACF;YACD,QAAQ,EAAE,CAAC,KAAK,CAAC;SAClB;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAa,CAAC;YAC/B,MAAM,SAAS,GAAI,IAAI,CAAC,UAAqB,IAAI,KAAK,CAAC;YAEvD,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;oBAC5B,OAAO,EAAE;wBACP,YAAY,EAAE,qBAAqB;wBACnC,MAAM,EAAE,6EAA6E;qBACtF;oBACD,QAAQ,EAAE,QAAQ;oBAClB,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;iBACpC,CAAC,CAAC;gBAEH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;oBACb,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;gBAC9E,CAAC;gBAED,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;gBAC3D,IAAI,KAAyB,CAAC;gBAC9B,IAAI,IAAY,CAAC;gBAEjB,IAAI,WAAW,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBACpE,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;oBACxD,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;oBAC9C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;oBACzC,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;gBAC3E,CAAC;qBAAM,IAAI,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC9E,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC/B,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;oBACzC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;oBACrB,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;gBACrB,CAAC;qBAAM,CAAC;oBACN,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC3B,CAAC;gBAED,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;gBAC1C,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAE5D,OAAO,IAAI,CAAC,SAAS,CAAC;oBACpB,GAAG;oBACH,KAAK;oBACL,YAAY,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACvC,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,SAAS;oBACT,OAAO;iBACR,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,IAAI,CAAC,SAAS,CAAC;oBACpB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBACxD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,IAAY,EAAE,GAAW;IAC/C,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,QAAe,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;IAE/B,IAAI,OAAO,EAAE,WAAW,EAAE,CAAC;QACzB,8DAA8D;QAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW;aAC7B,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAClC,IAAI,CAAC,IAAI,CAAC;aACV,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;aAC1B,IAAI,EAAE,CAAC;QAEV,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,SAAS,EAAE,IAAI,EAAE,CAAC;IACrD,CAAC;IAED,6DAA6D;IAC7D,OAAO,EAAE,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY;IACtC,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,6BAA6B,EAAE,EAAE,CAAC,CAAC;IACvD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;IACrD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC;IACnD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;IAC5C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,2DAA2D,EAAE,IAAI,CAAC,CAAC;IACvF,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IAC1C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACpC,IAAI,GAAG,IAAI;SACR,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAC3B,IAAI,GAAG,IAAI;SACR,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;SAClD,IAAI,CAAC,IAAI,CAAC;SACV,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC9B,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"web-fetch.js","sourceRoot":"","sources":["../../src/tools/web-fetch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { ToolDefinition, ModelProvider } from "../providers/types.js";
2
+ /**
3
+ * Build the writeup system prompt.
4
+ * @param transcript - true when the input is a full session transcript (slash command),
5
+ * false when the input is user-provided notes (tool call).
6
+ */
7
+ export declare function buildWriteupSystemPrompt(options?: {
8
+ transcript?: boolean;
9
+ }): string;
10
+ export declare function createWriteupTool(getProvider: () => ModelProvider | null): ToolDefinition;
11
+ //# sourceMappingURL=writeup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writeup.d.ts","sourceRoot":"","sources":["../../src/tools/writeup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG3E;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAsDvF;AAED,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,aAAa,GAAG,IAAI,GACtC,cAAc,CA6ChB"}
@@ -0,0 +1,102 @@
1
+ import { formatError } from "../ui/format.js";
2
+ /**
3
+ * Build the writeup system prompt.
4
+ * @param transcript - true when the input is a full session transcript (slash command),
5
+ * false when the input is user-provided notes (tool call).
6
+ */
7
+ export function buildWriteupSystemPrompt(options = {}) {
8
+ const inputDesc = options.transcript
9
+ ? "the full transcript of an ML experiment session — including the researcher's goals, the agent's actions, tool calls, metric results, and conclusions"
10
+ : "experiment notes from an ML research agent — including goals, configurations, metric results, and observations";
11
+ const taskPrefix = options.transcript ? "Your task: produce" : "Produce";
12
+ const extraCitation = options.transcript
13
+ ? "\n- Look for hub_fetch, hub_read, and hub_log tool calls in the transcript to identify sources"
14
+ : "";
15
+ const dataSource = options.transcript ? " from the transcript" : "";
16
+ return `You are a scientific writing assistant. You will receive ${inputDesc}.
17
+
18
+ ${taskPrefix} a clean, structured experiment writeup. Write it as a practitioner's report, not an academic paper. Be concise but thorough.
19
+
20
+ ## Format
21
+
22
+ # [Title — infer from the goal]
23
+
24
+ ## Objective
25
+ What was the researcher trying to achieve?
26
+
27
+ ## Setup
28
+ - Model architecture, dataset, hardware
29
+ - Key hyperparameters and configuration
30
+
31
+ ## Experiments
32
+ For each distinct experiment/run:
33
+ - What was tried and why
34
+ - Key metrics (include actual numbers)
35
+ - Whether it improved over the previous best
36
+
37
+ ## Results
38
+ - Best configuration found
39
+ - Final metric values
40
+ - Comparison to baseline / starting point
41
+
42
+ ## Observations
43
+ - What worked, what didn't
44
+ - Surprising findings
45
+ - Hypotheses about why certain changes helped/hurt
46
+
47
+ ## Next Steps (if applicable)
48
+ - Promising directions not yet explored
49
+ - Known limitations
50
+
51
+ ## Citations
52
+ - If the work builds on another agent's commit, cite it: "Based on [agent_id/hash_prefix]"
53
+ - If referencing an AgentHub post, cite by post ID: "As noted in post #42"
54
+ - If reproducing or extending results from another agent, credit them explicitly${extraCitation}
55
+
56
+ Keep the writing direct and data-driven. Use actual metric values${dataSource}. Do not invent data.`;
57
+ }
58
+ export function createWriteupTool(getProvider) {
59
+ return {
60
+ name: "writeup",
61
+ description: "Generate a structured experiment writeup from your notes. Pass your experiment observations, metrics, and findings as input. Returns a formatted writeup suitable for posting to AgentHub.",
62
+ parameters: {
63
+ type: "object",
64
+ properties: {
65
+ notes: {
66
+ type: "string",
67
+ description: "Your experiment notes: goal, what you tried, metric values, observations, conclusions. Be thorough — the writeup is only as good as the input.",
68
+ },
69
+ },
70
+ required: ["notes"],
71
+ },
72
+ execute: async (args) => {
73
+ const notes = args.notes;
74
+ if (!notes?.trim()) {
75
+ return JSON.stringify({ error: "notes is required" });
76
+ }
77
+ const provider = getProvider();
78
+ if (!provider) {
79
+ return JSON.stringify({ error: "No active provider" });
80
+ }
81
+ const session = await provider.createSession({
82
+ systemPrompt: buildWriteupSystemPrompt(),
83
+ });
84
+ try {
85
+ let writeup = "";
86
+ for await (const event of provider.send(session, notes, [])) {
87
+ if (event.type === "text" && event.delta) {
88
+ writeup += event.delta;
89
+ }
90
+ }
91
+ return JSON.stringify({ writeup: writeup || "(empty response)" });
92
+ }
93
+ catch (err) {
94
+ return JSON.stringify({ error: `Writeup failed: ${formatError(err)}` });
95
+ }
96
+ finally {
97
+ await provider.closeSession(session).catch(() => { });
98
+ }
99
+ },
100
+ };
101
+ }
102
+ //# sourceMappingURL=writeup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writeup.js","sourceRoot":"","sources":["../../src/tools/writeup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,UAAoC,EAAE;IAC7E,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU;QAClC,CAAC,CAAC,sJAAsJ;QACxJ,CAAC,CAAC,gHAAgH,CAAC;IAErH,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,SAAS,CAAC;IAEzE,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU;QACtC,CAAC,CAAC,gGAAgG;QAClG,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;IAEpE,OAAO,4DAA4D,SAAS;;EAE5E,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kFAoCsE,aAAa;;mEAE5B,UAAU,uBAAuB,CAAC;AACrG,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,WAAuC;IAEvC,OAAO;QACL,IAAI,EAAE,SAAS;QACf,WAAW,EACT,4LAA4L;QAC9L,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,gJAAgJ;iBAC9J;aACF;YACD,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAe,CAAC;YACnC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;gBACnB,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;YACxD,CAAC;YAED,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC;YACzD,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC;gBAC3C,YAAY,EAAE,wBAAwB,EAAE;aACzC,CAAC,CAAC;YAEH,IAAI,CAAC;gBACH,IAAI,OAAO,GAAG,EAAE,CAAC;gBACjB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;oBAC5D,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;wBACzC,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC;oBACzB,CAAC;gBACH,CAAC;gBACD,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,CAAC,CAAC;YACpE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,mBAAmB,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;YAC1E,CAAC;oBAAS,CAAC;gBACT,MAAM,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,7 +1,43 @@
1
+ import type React from "react";
2
+ import type { Orchestrator } from "../core/orchestrator.js";
3
+ import type { ConnectionPool } from "../remote/connection-pool.js";
4
+ import type { RemoteExecutor } from "../remote/executor.js";
5
+ import type { MetricStore } from "../metrics/store.js";
6
+ import type { MetricCollector } from "../metrics/collector.js";
7
+ import type { MemoryStore } from "../memory/memory-store.js";
8
+ import type { StickyManager, StickyNote } from "../core/stickies.js";
9
+ import type { Message } from "./types.js";
1
10
  export interface SlashCommand {
2
11
  name: string;
3
12
  args?: string;
4
13
  description: string;
5
14
  }
15
+ export interface CommandContext {
16
+ orchestrator: Orchestrator;
17
+ addMessage: (role: Message["role"], content: string) => number;
18
+ updateMessage: (id: number, updates: Partial<Message>) => void;
19
+ setMessages: React.Dispatch<React.SetStateAction<Message[]>>;
20
+ messages: Message[];
21
+ setIsStreaming: (v: boolean) => void;
22
+ connectionPool?: ConnectionPool;
23
+ metricStore?: MetricStore;
24
+ metricCollector?: MetricCollector;
25
+ memoryStore?: MemoryStore;
26
+ stickyManager?: StickyManager;
27
+ setStickyNotes?: React.Dispatch<React.SetStateAction<StickyNote[]>>;
28
+ executor?: RemoteExecutor;
29
+ /** Build Message[] from stored messages (needs access to the id counter). */
30
+ restoreMessages: (messages: Array<{
31
+ role: string;
32
+ content: string;
33
+ }>) => Message[];
34
+ }
35
+ /**
36
+ * Single source of truth for all slash commands.
37
+ * Autocomplete (input-bar), /help text, and dispatch all derive from this.
38
+ */
6
39
  export declare const COMMANDS: SlashCommand[];
40
+ /** Format COMMANDS into the /help text block. */
41
+ export declare function formatHelpText(): string;
42
+ export declare function handleSlashCommand(input: string, ctx: CommandContext): Promise<void>;
7
43
  //# sourceMappingURL=commands.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/ui/commands.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,QAAQ,EAAE,YAAY,EAmBlC,CAAC"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/ui/commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,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,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAsB1C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,YAAY,CAAC;IAC3B,UAAU,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/D,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAC/D,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC7D,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,cAAc,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,cAAc,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACpE,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,6EAA6E;IAC7E,eAAe,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,KAAK,OAAO,EAAE,CAAC;CACpF;AAID;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,YAAY,EAoBlC,CAAC;AAEF,iDAAiD;AACjD,wBAAgB,cAAc,IAAI,MAAM,CA2BvC;AAID,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC,IAAI,CAAC,CA+Df"}