@snoglobe/helios 0.1.0 → 0.2.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 (247) hide show
  1. package/dist/acp/entry.d.ts +7 -0
  2. package/dist/acp/entry.d.ts.map +1 -0
  3. package/dist/acp/entry.js +46 -0
  4. package/dist/acp/entry.js.map +1 -0
  5. package/dist/acp/server.d.ts +57 -0
  6. package/dist/acp/server.d.ts.map +1 -0
  7. package/dist/acp/server.js +434 -0
  8. package/dist/acp/server.js.map +1 -0
  9. package/dist/acp/transport.d.ts +31 -0
  10. package/dist/acp/transport.d.ts.map +1 -0
  11. package/dist/acp/transport.js +116 -0
  12. package/dist/acp/transport.js.map +1 -0
  13. package/dist/acp/types.d.ts +213 -0
  14. package/dist/acp/types.d.ts.map +1 -0
  15. package/dist/acp/types.js +3 -0
  16. package/dist/acp/types.js.map +1 -0
  17. package/dist/app.d.ts +8 -1
  18. package/dist/app.d.ts.map +1 -1
  19. package/dist/app.js +51 -281
  20. package/dist/app.js.map +1 -1
  21. package/dist/bootstrap.d.ts +3 -0
  22. package/dist/bootstrap.d.ts.map +1 -0
  23. package/dist/bootstrap.js +26 -0
  24. package/dist/bootstrap.js.map +1 -0
  25. package/dist/cli/auth.d.ts +20 -0
  26. package/dist/cli/auth.d.ts.map +1 -0
  27. package/dist/cli/auth.js +62 -0
  28. package/dist/cli/auth.js.map +1 -0
  29. package/dist/cli/doctor.d.ts +9 -0
  30. package/dist/cli/doctor.d.ts.map +1 -0
  31. package/dist/cli/doctor.js +368 -0
  32. package/dist/cli/doctor.js.map +1 -0
  33. package/dist/cli/env.d.ts +13 -0
  34. package/dist/cli/env.d.ts.map +1 -0
  35. package/dist/cli/env.js +16 -0
  36. package/dist/cli/env.js.map +1 -0
  37. package/dist/cli/export.d.ts +11 -0
  38. package/dist/cli/export.d.ts.map +1 -0
  39. package/dist/cli/export.js +103 -0
  40. package/dist/cli/export.js.map +1 -0
  41. package/dist/cli/index.d.ts +22 -0
  42. package/dist/cli/index.d.ts.map +1 -0
  43. package/dist/cli/index.js +71 -0
  44. package/dist/cli/index.js.map +1 -0
  45. package/dist/cli/init-cmd.d.ts +11 -0
  46. package/dist/cli/init-cmd.d.ts.map +1 -0
  47. package/dist/cli/init-cmd.js +37 -0
  48. package/dist/cli/init-cmd.js.map +1 -0
  49. package/dist/cli/kill.d.ts +8 -0
  50. package/dist/cli/kill.d.ts.map +1 -0
  51. package/dist/cli/kill.js +46 -0
  52. package/dist/cli/kill.js.map +1 -0
  53. package/dist/cli/options.d.ts +18 -0
  54. package/dist/cli/options.d.ts.map +1 -0
  55. package/dist/cli/options.js +24 -0
  56. package/dist/cli/options.js.map +1 -0
  57. package/dist/cli/replay.d.ts +9 -0
  58. package/dist/cli/replay.d.ts.map +1 -0
  59. package/dist/cli/replay.js +65 -0
  60. package/dist/cli/replay.js.map +1 -0
  61. package/dist/cli/report.d.ts +11 -0
  62. package/dist/cli/report.d.ts.map +1 -0
  63. package/dist/cli/report.js +70 -0
  64. package/dist/cli/report.js.map +1 -0
  65. package/dist/cli/run.d.ts +17 -0
  66. package/dist/cli/run.d.ts.map +1 -0
  67. package/dist/cli/run.js +120 -0
  68. package/dist/cli/run.js.map +1 -0
  69. package/dist/cli/search.d.ts +9 -0
  70. package/dist/cli/search.d.ts.map +1 -0
  71. package/dist/cli/search.js +52 -0
  72. package/dist/cli/search.js.map +1 -0
  73. package/dist/cli/sessions.d.ts +8 -0
  74. package/dist/cli/sessions.d.ts.map +1 -0
  75. package/dist/cli/sessions.js +38 -0
  76. package/dist/cli/sessions.js.map +1 -0
  77. package/dist/cli/watch.d.ts +8 -0
  78. package/dist/cli/watch.d.ts.map +1 -0
  79. package/dist/cli/watch.js +81 -0
  80. package/dist/cli/watch.js.map +1 -0
  81. package/dist/config/project.d.ts +63 -0
  82. package/dist/config/project.d.ts.map +1 -0
  83. package/dist/config/project.js +112 -0
  84. package/dist/config/project.js.map +1 -0
  85. package/dist/core/orchestrator.d.ts +4 -2
  86. package/dist/core/orchestrator.d.ts.map +1 -1
  87. package/dist/core/orchestrator.js +8 -3
  88. package/dist/core/orchestrator.js.map +1 -1
  89. package/dist/core/task-poller.d.ts +43 -0
  90. package/dist/core/task-poller.d.ts.map +1 -0
  91. package/dist/core/task-poller.js +98 -0
  92. package/dist/core/task-poller.js.map +1 -0
  93. package/dist/experiments/branching.d.ts +38 -0
  94. package/dist/experiments/branching.d.ts.map +1 -0
  95. package/dist/experiments/branching.js +80 -0
  96. package/dist/experiments/branching.js.map +1 -0
  97. package/dist/hub/client.d.ts +70 -0
  98. package/dist/hub/client.d.ts.map +1 -0
  99. package/dist/hub/client.js +140 -0
  100. package/dist/hub/client.js.map +1 -0
  101. package/dist/hub/config.d.ts +9 -0
  102. package/dist/hub/config.d.ts.map +1 -0
  103. package/dist/hub/config.js +38 -0
  104. package/dist/hub/config.js.map +1 -0
  105. package/dist/index.d.ts +0 -1
  106. package/dist/index.js +25 -3
  107. package/dist/index.js.map +1 -1
  108. package/dist/init.d.ts +44 -0
  109. package/dist/init.d.ts.map +1 -0
  110. package/dist/init.js +384 -0
  111. package/dist/init.js.map +1 -0
  112. package/dist/memory/context-gate.d.ts.map +1 -1
  113. package/dist/memory/context-gate.js +1 -1
  114. package/dist/memory/context-gate.js.map +1 -1
  115. package/dist/memory/experiment-tracker.d.ts.map +1 -1
  116. package/dist/memory/experiment-tracker.js +2 -6
  117. package/dist/memory/experiment-tracker.js.map +1 -1
  118. package/dist/memory/memory-store.d.ts.map +1 -1
  119. package/dist/memory/memory-store.js +16 -20
  120. package/dist/memory/memory-store.js.map +1 -1
  121. package/dist/metrics/collector.d.ts.map +1 -1
  122. package/dist/metrics/collector.js +7 -7
  123. package/dist/metrics/collector.js.map +1 -1
  124. package/dist/metrics/resources.d.ts +44 -0
  125. package/dist/metrics/resources.d.ts.map +1 -0
  126. package/dist/metrics/resources.js +382 -0
  127. package/dist/metrics/resources.js.map +1 -0
  128. package/dist/metrics/store.d.ts +10 -2
  129. package/dist/metrics/store.d.ts.map +1 -1
  130. package/dist/metrics/store.js +91 -27
  131. package/dist/metrics/store.js.map +1 -1
  132. package/dist/notifications/index.d.ts +2 -0
  133. package/dist/notifications/index.d.ts.map +1 -0
  134. package/dist/notifications/index.js +2 -0
  135. package/dist/notifications/index.js.map +1 -0
  136. package/dist/notifications/notifier.d.ts +36 -0
  137. package/dist/notifications/notifier.d.ts.map +1 -0
  138. package/dist/notifications/notifier.js +102 -0
  139. package/dist/notifications/notifier.js.map +1 -0
  140. package/dist/paths.d.ts +3 -0
  141. package/dist/paths.d.ts.map +1 -0
  142. package/dist/paths.js +5 -0
  143. package/dist/paths.js.map +1 -0
  144. package/dist/providers/claude/provider.d.ts +7 -3
  145. package/dist/providers/claude/provider.d.ts.map +1 -1
  146. package/dist/providers/claude/provider.js +48 -8
  147. package/dist/providers/claude/provider.js.map +1 -1
  148. package/dist/providers/openai/callback-server.d.ts +6 -1
  149. package/dist/providers/openai/callback-server.d.ts.map +1 -1
  150. package/dist/providers/openai/callback-server.js +44 -20
  151. package/dist/providers/openai/callback-server.js.map +1 -1
  152. package/dist/providers/openai/oauth.d.ts +4 -0
  153. package/dist/providers/openai/oauth.d.ts.map +1 -1
  154. package/dist/providers/openai/oauth.js +34 -14
  155. package/dist/providers/openai/oauth.js.map +1 -1
  156. package/dist/providers/openai/provider.d.ts +6 -3
  157. package/dist/providers/openai/provider.d.ts.map +1 -1
  158. package/dist/providers/openai/provider.js +35 -9
  159. package/dist/providers/openai/provider.js.map +1 -1
  160. package/dist/providers/types.d.ts +9 -1
  161. package/dist/providers/types.d.ts.map +1 -1
  162. package/dist/providers/types.js.map +1 -1
  163. package/dist/remote/config.d.ts.map +1 -1
  164. package/dist/remote/config.js +4 -8
  165. package/dist/remote/config.js.map +1 -1
  166. package/dist/remote/connection-pool.d.ts.map +1 -1
  167. package/dist/remote/connection-pool.js +9 -5
  168. package/dist/remote/connection-pool.js.map +1 -1
  169. package/dist/store/database.d.ts.map +1 -1
  170. package/dist/store/database.js +2 -2
  171. package/dist/store/database.js.map +1 -1
  172. package/dist/store/migrations.d.ts.map +1 -1
  173. package/dist/store/migrations.js +27 -0
  174. package/dist/store/migrations.js.map +1 -1
  175. package/dist/store/preferences.js +2 -2
  176. package/dist/store/preferences.js.map +1 -1
  177. package/dist/store/session-store.d.ts +6 -0
  178. package/dist/store/session-store.d.ts.map +1 -1
  179. package/dist/store/session-store.js +20 -5
  180. package/dist/store/session-store.js.map +1 -1
  181. package/dist/tools/env-snapshot.d.ts +5 -0
  182. package/dist/tools/env-snapshot.d.ts.map +1 -0
  183. package/dist/tools/env-snapshot.js +174 -0
  184. package/dist/tools/env-snapshot.js.map +1 -0
  185. package/dist/tools/experiment-branch.d.ts +7 -0
  186. package/dist/tools/experiment-branch.d.ts.map +1 -0
  187. package/dist/tools/experiment-branch.js +167 -0
  188. package/dist/tools/experiment-branch.js.map +1 -0
  189. package/dist/tools/file-ops.d.ts.map +1 -1
  190. package/dist/tools/file-ops.js +1 -3
  191. package/dist/tools/file-ops.js.map +1 -1
  192. package/dist/tools/hub.d.ts +5 -0
  193. package/dist/tools/hub.d.ts.map +1 -0
  194. package/dist/tools/hub.js +298 -0
  195. package/dist/tools/hub.js.map +1 -0
  196. package/dist/tools/sweep.d.ts +6 -0
  197. package/dist/tools/sweep.d.ts.map +1 -0
  198. package/dist/tools/sweep.js +153 -0
  199. package/dist/tools/sweep.js.map +1 -0
  200. package/dist/tools/web-fetch.d.ts.map +1 -1
  201. package/dist/tools/web-fetch.js +2 -1
  202. package/dist/tools/web-fetch.js.map +1 -1
  203. package/dist/tools/writeup.d.ts +11 -0
  204. package/dist/tools/writeup.d.ts.map +1 -0
  205. package/dist/tools/writeup.js +102 -0
  206. package/dist/tools/writeup.js.map +1 -0
  207. package/dist/ui/commands.d.ts +36 -0
  208. package/dist/ui/commands.d.ts.map +1 -1
  209. package/dist/ui/commands.js +495 -1
  210. package/dist/ui/commands.js.map +1 -1
  211. package/dist/ui/components/input-bar.js.map +1 -1
  212. package/dist/ui/components/overlay-header.d.ts.map +1 -1
  213. package/dist/ui/components/overlay-header.js.map +1 -1
  214. package/dist/ui/components/status-bar.js +1 -1
  215. package/dist/ui/components/status-bar.js.map +1 -1
  216. package/dist/ui/format.d.ts +4 -0
  217. package/dist/ui/format.d.ts.map +1 -1
  218. package/dist/ui/format.js +16 -0
  219. package/dist/ui/format.js.map +1 -1
  220. package/dist/ui/layout.d.ts +7 -42
  221. package/dist/ui/layout.d.ts.map +1 -1
  222. package/dist/ui/layout.js +71 -543
  223. package/dist/ui/layout.js.map +1 -1
  224. package/dist/ui/overlays/metrics-overlay.js.map +1 -1
  225. package/dist/ui/overlays/task-overlay.d.ts +1 -1
  226. package/dist/ui/overlays/task-overlay.d.ts.map +1 -1
  227. package/dist/ui/overlays/task-overlay.js.map +1 -1
  228. package/dist/ui/panels/conversation.d.ts +1 -1
  229. package/dist/ui/panels/conversation.d.ts.map +1 -1
  230. package/dist/ui/panels/conversation.js +1 -2
  231. package/dist/ui/panels/conversation.js.map +1 -1
  232. package/dist/ui/panels/metrics-dashboard.d.ts.map +1 -1
  233. package/dist/ui/panels/metrics-dashboard.js.map +1 -1
  234. package/dist/ui/panels/sleep-panel.js.map +1 -1
  235. package/dist/ui/panels/sticky-notes.d.ts.map +1 -1
  236. package/dist/ui/panels/sticky-notes.js.map +1 -1
  237. package/dist/ui/panels/task-list.d.ts +4 -2
  238. package/dist/ui/panels/task-list.d.ts.map +1 -1
  239. package/dist/ui/panels/task-list.js +41 -9
  240. package/dist/ui/panels/task-list.js.map +1 -1
  241. package/dist/ui/theme.d.ts.map +1 -1
  242. package/dist/ui/theme.js.map +1 -1
  243. package/dist/ui/types.d.ts +22 -0
  244. package/dist/ui/types.d.ts.map +1 -0
  245. package/dist/ui/types.js +2 -0
  246. package/dist/ui/types.js.map +1 -0
  247. package/package.json +19 -6
@@ -0,0 +1,38 @@
1
+ /**
2
+ * `helios sessions` — list recent sessions.
3
+ */
4
+ import { Effect } from "effect";
5
+ import { Command, Options } from "@effect/cli";
6
+ const limit = Options.integer("limit").pipe(Options.withAlias("n"), Options.withDescription("Number of sessions to show"), Options.withDefault(20));
7
+ export const sessions = Command.make("sessions", { limit }, ({ limit }) => Effect.promise(async () => {
8
+ const { SessionStore } = await import("../store/session-store.js");
9
+ const store = new SessionStore(process.env.AGENTHUB_AGENT ?? "");
10
+ const summaries = store.listSessionSummaries(limit);
11
+ if (summaries.length === 0) {
12
+ console.log("No sessions found.");
13
+ return;
14
+ }
15
+ const pad = (s, n) => s.padEnd(n);
16
+ const formatDate = (ts) => new Date(ts).toLocaleString();
17
+ const formatCost = (c) => c > 0 ? `$${c.toFixed(4)}` : "—";
18
+ console.log(pad("ID", 24) +
19
+ pad("Provider", 10) +
20
+ pad("Msgs", 6) +
21
+ pad("Cost", 10) +
22
+ pad("Last Active", 24) +
23
+ "First Message");
24
+ console.log("─".repeat(110));
25
+ for (const s of summaries) {
26
+ console.log(pad(s.id, 24) +
27
+ pad(s.provider, 10) +
28
+ pad(String(s.messageCount), 6) +
29
+ pad(formatCost(s.costUsd), 10) +
30
+ pad(formatDate(s.lastActiveAt), 24) +
31
+ (s.firstUserMessage ?? "(no messages)").split("\n")[0].slice(0, 60));
32
+ }
33
+ const totalCost = summaries.reduce((sum, s) => sum + s.costUsd, 0);
34
+ if (totalCost > 0) {
35
+ console.log(`\nTotal cost across ${summaries.length} sessions: $${totalCost.toFixed(4)}`);
36
+ }
37
+ }));
38
+ //# sourceMappingURL=sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/cli/sessions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * `helios watch <machine:pid>` — stream a running task's output + metrics.
3
+ */
4
+ import { Command } from "@effect/cli";
5
+ export declare const watch: Command.Command<"watch", never, never, {
6
+ readonly target: string;
7
+ }>;
8
+ //# sourceMappingURL=watch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/cli/watch.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,OAAO,EAAQ,MAAM,aAAa,CAAC;AAM5C,eAAO,MAAM,KAAK;;EA6FjB,CAAC"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * `helios watch <machine:pid>` — stream a running task's output + metrics.
3
+ */
4
+ import { Effect } from "effect";
5
+ import { Command, Args } from "@effect/cli";
6
+ const target = Args.text({ name: "machine:pid" }).pipe(Args.withDescription("Task to watch, e.g. 'local:12345'"));
7
+ export const watch = Command.make("watch", { target }, ({ target }) => Effect.promise(async () => {
8
+ const [machineId, pidStr] = target.split(":");
9
+ const pid = parseInt(pidStr, 10);
10
+ if (!machineId || isNaN(pid)) {
11
+ console.error("Usage: helios watch <machine_id:pid>");
12
+ process.exit(1);
13
+ }
14
+ const { createRuntime } = await import("../init.js");
15
+ const runtime = await createRuntime();
16
+ const { connectionPool, metricStore, executor } = runtime;
17
+ // Find the background process to get its log path
18
+ const proc = executor.getBackgroundProcess(machineId, pid);
19
+ // Check if process is running
20
+ const running = await connectionPool.isProcessRunning(machineId, pid);
21
+ if (!running && !proc) {
22
+ console.error(`Process ${machineId}:${pid} is not running and has no log.`);
23
+ runtime.cleanup();
24
+ process.exit(1);
25
+ }
26
+ const taskKey = `${machineId}:${pid}`;
27
+ console.log(`Watching ${taskKey}${running ? " (running)" : " (finished)"}...\n`);
28
+ // Track how many lines we've already printed using wc -l
29
+ let printedLines = 0;
30
+ const pollInterval = 2000;
31
+ const tick = async () => {
32
+ try {
33
+ // Get new lines since last poll using tail -n +offset
34
+ if (proc?.logPath) {
35
+ const result = await connectionPool.exec(machineId, `tail -n +${printedLines + 1} ${proc.logPath} 2>/dev/null`);
36
+ const output = result.stdout;
37
+ if (output) {
38
+ const lines = output.split("\n");
39
+ // tail output ends with trailing newline → last element is empty
40
+ const newLines = lines.filter((l, i) => l || i < lines.length - 1);
41
+ for (const line of newLines) {
42
+ process.stdout.write(line + "\n");
43
+ }
44
+ printedLines += newLines.length;
45
+ }
46
+ }
47
+ // Show latest metrics
48
+ const latest = metricStore.getLatestAll(taskKey);
49
+ const metricEntries = Object.entries(latest);
50
+ if (metricEntries.length > 0) {
51
+ const metricLine = metricEntries
52
+ .map(([name, value]) => `${name}=${typeof value === "number" ? value.toPrecision(4) : value}`)
53
+ .join(" ");
54
+ process.stdout.write(`\x1b[36m[metrics] ${metricLine}\x1b[0m\n`);
55
+ }
56
+ // Check if still running
57
+ const stillRunning = await connectionPool.isProcessRunning(machineId, pid);
58
+ if (!stillRunning) {
59
+ console.log("\nProcess exited.");
60
+ runtime.cleanup();
61
+ process.exit(0);
62
+ }
63
+ }
64
+ catch {
65
+ // Resilient — keep watching even if one poll fails
66
+ }
67
+ };
68
+ // Initial tick
69
+ await tick();
70
+ // Set up polling
71
+ const timer = setInterval(tick, pollInterval);
72
+ // Clean exit on Ctrl+C
73
+ process.on("SIGINT", () => {
74
+ clearInterval(timer);
75
+ runtime.cleanup();
76
+ process.exit(0);
77
+ });
78
+ // Keep alive
79
+ await new Promise(() => { });
80
+ }));
81
+ //# sourceMappingURL=watch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/cli/watch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ export interface ProjectConfig {
2
+ /** Default provider for this project */
3
+ provider?: "claude" | "openai";
4
+ /** Default model */
5
+ model?: string;
6
+ /** Default machine to run experiments on */
7
+ defaultMachine?: string;
8
+ /** Metric names the agent should always track */
9
+ metricNames?: string[];
10
+ /** Metric regex patterns: name -> regex with one capture group */
11
+ metricPatterns?: Record<string, string>;
12
+ /** Project-specific system prompt addendum -- appended to the base prompt */
13
+ instructions?: string;
14
+ /** Notification config */
15
+ notifications?: {
16
+ channels: Array<{
17
+ type: "desktop";
18
+ } | {
19
+ type: "webhook";
20
+ url: string;
21
+ method?: "GET" | "POST";
22
+ headers?: Record<string, string>;
23
+ } | {
24
+ type: "command";
25
+ command: string;
26
+ }>;
27
+ events?: string[];
28
+ };
29
+ /** Working directory for experiments (relative to project root) */
30
+ experimentDir?: string;
31
+ }
32
+ /**
33
+ * Walk up from `process.cwd()` looking for `helios.json`.
34
+ * Returns the full path to the config file, or null if not found.
35
+ */
36
+ export declare function findProjectConfigPath(): string | null;
37
+ /**
38
+ * Walk up from `process.cwd()` looking for `helios.json`.
39
+ * If found, parse and return it. If not found or parse fails, return null.
40
+ */
41
+ export declare function findProjectConfig(): ProjectConfig | null;
42
+ /**
43
+ * Same walk-up logic as `findProjectConfig` but returns the directory
44
+ * containing `helios.json`, or null.
45
+ */
46
+ export declare function findProjectRoot(): string | null;
47
+ /**
48
+ * Write `helios.json` to the given directory with pretty-printed JSON.
49
+ */
50
+ export declare function writeProjectConfig(dir: string, config: ProjectConfig): void;
51
+ /**
52
+ * Merge project-level config with global user preferences.
53
+ * Project config takes precedence over global prefs.
54
+ */
55
+ export declare function mergeWithGlobalPrefs(projectConfig: ProjectConfig | null, globalPrefs: {
56
+ lastProvider?: string;
57
+ claudeAuthMode?: string;
58
+ }): {
59
+ provider?: "claude" | "openai";
60
+ claudeMode?: "cli" | "api";
61
+ model?: string;
62
+ };
63
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/config/project.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,aAAa;IAC5B,wCAAwC;IACxC,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC/B,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,kEAAkE;IAClE,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,aAAa,CAAC,EAAE;QACd,QAAQ,EAAE,KAAK,CACX;YAAE,IAAI,EAAE,SAAS,CAAA;SAAE,GACnB;YAAE,IAAI,EAAE,SAAS,CAAC;YAAC,GAAG,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;SAAE,GAC3F;YAAE,IAAI,EAAE,SAAS,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CACvC,CAAC;QACF,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IACF,mEAAmE;IACnE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AA2CD;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,IAAI,CAMrD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,aAAa,GAAG,IAAI,CAWxD;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAQ/C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAG3E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,aAAa,GAAG,IAAI,EACnC,WAAW,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9D;IAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAAC,UAAU,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAqBhF"}
@@ -0,0 +1,112 @@
1
+ import { readFileSync, writeFileSync } from "node:fs";
2
+ import { existsSync } from "node:fs";
3
+ import { dirname, join, resolve } from "node:path";
4
+ import { homedir } from "node:os";
5
+ // ---------------------------------------------------------------------------
6
+ // Constants
7
+ // ---------------------------------------------------------------------------
8
+ const CONFIG_FILENAME = "helios.json";
9
+ // ---------------------------------------------------------------------------
10
+ // Internal helpers
11
+ // ---------------------------------------------------------------------------
12
+ /**
13
+ * Walk up from `startDir` looking for `helios.json`.
14
+ * Returns the full path to the config file, or null if not found.
15
+ * Stops at the filesystem root or the user's home directory.
16
+ */
17
+ function walkUp(startDir) {
18
+ const home = homedir();
19
+ let dir = resolve(startDir);
20
+ while (true) {
21
+ const candidate = join(dir, CONFIG_FILENAME);
22
+ if (existsSync(candidate)) {
23
+ return candidate;
24
+ }
25
+ // Stop if we've reached home or filesystem root
26
+ if (dir === home)
27
+ break;
28
+ const parent = dirname(dir);
29
+ if (parent === dir)
30
+ break; // filesystem root — dirname('/') === '/'
31
+ dir = parent;
32
+ }
33
+ return null;
34
+ }
35
+ // ---------------------------------------------------------------------------
36
+ // Public API
37
+ // ---------------------------------------------------------------------------
38
+ /**
39
+ * Walk up from `process.cwd()` looking for `helios.json`.
40
+ * Returns the full path to the config file, or null if not found.
41
+ */
42
+ export function findProjectConfigPath() {
43
+ try {
44
+ return walkUp(process.cwd());
45
+ }
46
+ catch {
47
+ return null;
48
+ }
49
+ }
50
+ /**
51
+ * Walk up from `process.cwd()` looking for `helios.json`.
52
+ * If found, parse and return it. If not found or parse fails, return null.
53
+ */
54
+ export function findProjectConfig() {
55
+ try {
56
+ const configPath = walkUp(process.cwd());
57
+ if (!configPath)
58
+ return null;
59
+ const raw = readFileSync(configPath, "utf-8");
60
+ const parsed = JSON.parse(raw);
61
+ return parsed;
62
+ }
63
+ catch {
64
+ return null;
65
+ }
66
+ }
67
+ /**
68
+ * Same walk-up logic as `findProjectConfig` but returns the directory
69
+ * containing `helios.json`, or null.
70
+ */
71
+ export function findProjectRoot() {
72
+ try {
73
+ const configPath = walkUp(process.cwd());
74
+ if (!configPath)
75
+ return null;
76
+ return dirname(configPath);
77
+ }
78
+ catch {
79
+ return null;
80
+ }
81
+ }
82
+ /**
83
+ * Write `helios.json` to the given directory with pretty-printed JSON.
84
+ */
85
+ export function writeProjectConfig(dir, config) {
86
+ const target = join(resolve(dir), CONFIG_FILENAME);
87
+ writeFileSync(target, JSON.stringify(config, null, 2) + "\n", "utf-8");
88
+ }
89
+ /**
90
+ * Merge project-level config with global user preferences.
91
+ * Project config takes precedence over global prefs.
92
+ */
93
+ export function mergeWithGlobalPrefs(projectConfig, globalPrefs) {
94
+ const result = {};
95
+ // Provider — project config wins, then global prefs
96
+ if (projectConfig?.provider) {
97
+ result.provider = projectConfig.provider;
98
+ }
99
+ else if (globalPrefs.lastProvider === "claude" || globalPrefs.lastProvider === "openai") {
100
+ result.provider = globalPrefs.lastProvider;
101
+ }
102
+ // Claude auth mode — derive from global prefs (project config doesn't specify this)
103
+ if (globalPrefs.claudeAuthMode === "cli" || globalPrefs.claudeAuthMode === "api") {
104
+ result.claudeMode = globalPrefs.claudeAuthMode;
105
+ }
106
+ // Model — only project config carries this
107
+ if (projectConfig?.model) {
108
+ result.model = projectConfig.model;
109
+ }
110
+ return result;
111
+ }
112
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/config/project.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { ModelProvider, ModelInfo, ToolDefinition, Session, SessionConfig, AgentEvent, ReasoningEffort } from "../providers/types.js";
1
+ import type { ModelProvider, ModelInfo, ToolDefinition, Session, SessionConfig, AgentEvent, ReasoningEffort, Attachment } from "../providers/types.js";
2
2
  import { AgentStateMachine } from "./state-machine.js";
3
3
  import { SessionStore } from "../store/session-store.js";
4
4
  import type { ContextGate } from "../memory/context-gate.js";
@@ -6,6 +6,8 @@ import type { StickyManager } from "./stickies.js";
6
6
  export interface OrchestratorConfig {
7
7
  defaultProvider: "claude" | "openai";
8
8
  systemPrompt: string;
9
+ agentId?: string;
10
+ sessionStore?: SessionStore;
9
11
  }
10
12
  export declare class Orchestrator {
11
13
  private providers;
@@ -32,7 +34,7 @@ export declare class Orchestrator {
32
34
  ensureSession(): Promise<Session>;
33
35
  startSession(config?: Partial<SessionConfig>): Promise<Session>;
34
36
  resumeSession(sessionId: string): Promise<Session>;
35
- send(message: string): AsyncGenerator<AgentEvent>;
37
+ send(message: string, attachments?: Attachment[]): AsyncGenerator<AgentEvent>;
36
38
  interrupt(): void;
37
39
  get currentSession(): Session | null;
38
40
  get currentProvider(): ModelProvider | null;
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/core/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,cAAc,EACd,OAAO,EACP,aAAa,EACb,UAAU,EACV,eAAe,EAChB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,WAAW,kBAAkB;IACjC,eAAe,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACrC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,cAAc,CAA8B;IACpD,QAAQ,CAAC,YAAY,oBAA2B;IAChD,QAAQ,CAAC,YAAY,eAAsB;IAC3C,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;gBAExB,MAAM,EAAE,kBAAkB;IAItC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAI/C,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAIxC,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,IAAI;IAI5C,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAIvC,IAAI,WAAW,IAAI,WAAW,GAAG,IAAI,CAEpC;IAED,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAI9C,QAAQ,IAAI,cAAc,EAAE;IAI5B,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAK1C,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBxD,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;IAKjC,YAAY,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IA0B/D,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAqBjD,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC;IAqDxD,SAAS,IAAI,IAAI;IAMjB,IAAI,cAAc,IAAI,OAAO,GAAG,IAAI,CAEnC;IAED,IAAI,eAAe,IAAI,aAAa,GAAG,IAAI,CAE1C;IAED,IAAI,YAAY,4CAEf;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,YAAY,IAAI,MAAM,GAAG,IAAI,CAEhC;IAEK,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYtC,WAAW,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAWzC,IAAI,eAAe,IAAI,eAAe,GAAG,IAAI,CAE5C;IAEK,kBAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAOhE,qFAAqF;IACrF,IAAI,eAAe,IAAI,MAAM,CAE5B;YAEc,eAAe;YAwBhB,sBAAsB;CAiBrC"}
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/core/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,cAAc,EACd,OAAO,EACP,aAAa,EACb,UAAU,EACV,eAAe,EACf,UAAU,EACX,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,WAAW,kBAAkB;IACjC,eAAe,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,cAAc,CAA8B;IACpD,QAAQ,CAAC,YAAY,oBAA2B;IAChD,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;gBAExB,MAAM,EAAE,kBAAkB;IAKtC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAI/C,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAIxC,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,IAAI;IAI5C,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAIvC,IAAI,WAAW,IAAI,WAAW,GAAG,IAAI,CAEpC;IAED,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAI9C,QAAQ,IAAI,cAAc,EAAE;IAI5B,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAK1C,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBxD,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;IAKjC,YAAY,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IA0B/D,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAqBjD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,UAAU,EAAE,GAAG,cAAc,CAAC,UAAU,CAAC;IA+DpF,SAAS,IAAI,IAAI;IAMjB,IAAI,cAAc,IAAI,OAAO,GAAG,IAAI,CAEnC;IAED,IAAI,eAAe,IAAI,aAAa,GAAG,IAAI,CAE1C;IAED,IAAI,YAAY,4CAEf;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,YAAY,IAAI,MAAM,GAAG,IAAI,CAEhC;IAEK,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYtC,WAAW,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAWzC,IAAI,eAAe,IAAI,eAAe,GAAG,IAAI,CAE5C;IAEK,kBAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAOhE,qFAAqF;IACrF,IAAI,eAAe,IAAI,MAAM,CAE5B;YAEc,eAAe;YAwBhB,sBAAsB;CAiBrC"}
@@ -11,10 +11,11 @@ export class Orchestrator {
11
11
  _contextGate = null;
12
12
  _stickyManager = null;
13
13
  stateMachine = new AgentStateMachine();
14
- sessionStore = new SessionStore();
14
+ sessionStore;
15
15
  config;
16
16
  constructor(config) {
17
17
  this.config = config;
18
+ this.sessionStore = config.sessionStore ?? new SessionStore(config.agentId ?? "");
18
19
  }
19
20
  registerProvider(provider) {
20
21
  this.providers.set(provider.name, provider);
@@ -96,7 +97,7 @@ export class Orchestrator {
96
97
  }
97
98
  return session;
98
99
  }
99
- async *send(message) {
100
+ async *send(message, attachments) {
100
101
  if (!this.activeProvider) {
101
102
  await this.switchProvider(this.config.defaultProvider);
102
103
  }
@@ -112,7 +113,7 @@ export class Orchestrator {
112
113
  }
113
114
  }
114
115
  let fullResponse = "";
115
- for await (const event of this.activeProvider.send(session, augmentedMessage, this.tools)) {
116
+ for await (const event of this.activeProvider.send(session, augmentedMessage, this.tools, attachments)) {
116
117
  if (event.type === "text" && event.delta) {
117
118
  fullResponse += event.delta;
118
119
  }
@@ -123,6 +124,10 @@ export class Orchestrator {
123
124
  if (event.usage?.inputTokens) {
124
125
  this._lastInputTokens = event.usage.inputTokens;
125
126
  }
127
+ // Persist cost to session
128
+ if (event.usage && session) {
129
+ this.sessionStore.addCost(session.id, event.usage.costUsd ?? 0, event.usage.inputTokens ?? 0, event.usage.outputTokens ?? 0);
130
+ }
126
131
  }
127
132
  yield event;
128
133
  }
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/core/orchestrator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/core/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Shared task polling loop used by both TUI and ACP modes.
3
+ * Polls background processes, detects completion, collects final metrics,
4
+ * updates experiment tracker, and fires notifications.
5
+ */
6
+ import type { RemoteExecutor } from "../remote/executor.js";
7
+ import type { ConnectionPool } from "../remote/connection-pool.js";
8
+ import type { MetricCollector } from "../metrics/collector.js";
9
+ import type { MetricStore } from "../metrics/store.js";
10
+ import type { ExperimentTracker } from "../memory/experiment-tracker.js";
11
+ import type { Notifier } from "../notifications/notifier.js";
12
+ import type { BackgroundProcess } from "../remote/types.js";
13
+ import type { MonitorConfig } from "./monitor.js";
14
+ export interface TaskStatus {
15
+ proc: BackgroundProcess;
16
+ running: boolean;
17
+ }
18
+ export interface TaskPollResult {
19
+ statuses: TaskStatus[];
20
+ finished: string[];
21
+ }
22
+ export interface TaskPollerDeps {
23
+ executor: RemoteExecutor;
24
+ connectionPool: ConnectionPool;
25
+ metricCollector: MetricCollector;
26
+ metricStore: MetricStore;
27
+ experimentTracker: ExperimentTracker;
28
+ notifier: Notifier | null;
29
+ }
30
+ /**
31
+ * Check all background processes and return their statuses.
32
+ */
33
+ export declare function pollTaskStatuses(executor: RemoteExecutor): Promise<TaskPollResult>;
34
+ /**
35
+ * Handle finished tasks: get exit codes, update experiment tracker,
36
+ * send notifications, and clean up.
37
+ */
38
+ export declare function handleFinishedTasks(finished: string[], deps: TaskPollerDeps): Promise<void>;
39
+ /**
40
+ * Build the monitor tick status message from live task/metric state.
41
+ */
42
+ export declare function buildMonitorMessage(config: MonitorConfig, executor: RemoteExecutor, metricStore: MetricStore): string;
43
+ //# sourceMappingURL=task-poller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-poller.d.ts","sourceRoot":"","sources":["../../src/core/task-poller.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,cAAc,CAAC;IACzB,cAAc,EAAE,cAAc,CAAC;IAC/B,eAAe,EAAE,eAAe,CAAC;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAmBxF;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAAE,EAClB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,IAAI,CAAC,CA+Cf;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,cAAc,EACxB,WAAW,EAAE,WAAW,GACvB,MAAM,CA2BR"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Shared task polling loop used by both TUI and ACP modes.
3
+ * Polls background processes, detects completion, collects final metrics,
4
+ * updates experiment tracker, and fires notifications.
5
+ */
6
+ /**
7
+ * Check all background processes and return their statuses.
8
+ */
9
+ export async function pollTaskStatuses(executor) {
10
+ const procs = executor.getBackgroundProcesses();
11
+ const statuses = await Promise.all(procs.map(async (proc) => {
12
+ try {
13
+ const running = await executor.isRunning(proc.machineId, proc.pid);
14
+ return { proc, running };
15
+ }
16
+ catch {
17
+ return { proc, running: true }; // Transient error — assume still running
18
+ }
19
+ }));
20
+ const finished = [];
21
+ for (const { proc, running } of statuses) {
22
+ if (!running)
23
+ finished.push(`${proc.machineId}:${proc.pid}`);
24
+ }
25
+ return { statuses, finished };
26
+ }
27
+ /**
28
+ * Handle finished tasks: get exit codes, update experiment tracker,
29
+ * send notifications, and clean up.
30
+ */
31
+ export async function handleFinishedTasks(finished, deps) {
32
+ const { executor, connectionPool, metricCollector, metricStore, experimentTracker, notifier } = deps;
33
+ // Collect final metrics before cleanup
34
+ if (finished.length > 0) {
35
+ await metricCollector.collectAll().catch(() => { });
36
+ }
37
+ await Promise.all(finished.map(async (key) => {
38
+ const [machineId, pidStr] = key.split(":");
39
+ const pid = parseInt(pidStr, 10);
40
+ let exitCode = 0;
41
+ try {
42
+ // Read exit code from the .exit file written by the launch wrapper
43
+ const proc = executor.getBackgroundProcesses().find((p) => p.machineId === machineId && p.pid === pid);
44
+ if (proc?.logPath) {
45
+ const result = await connectionPool.exec(machineId, `cat ${proc.logPath}.exit 2>/dev/null`);
46
+ const parsed = parseInt(result.stdout.trim(), 10);
47
+ if (!isNaN(parsed))
48
+ exitCode = parsed;
49
+ }
50
+ }
51
+ catch { /* default to 0 */ }
52
+ const metrics = metricStore.getLatestAll(key);
53
+ experimentTracker.updateExperiment(machineId, pid, exitCode, Object.keys(metrics).length > 0 ? metrics : undefined);
54
+ if (notifier) {
55
+ const event = exitCode === 0 ? "task_complete" : "task_failed";
56
+ notifier.notifyAll({
57
+ event,
58
+ title: exitCode === 0 ? "Task completed" : "Task failed",
59
+ body: `${key} exited with code ${exitCode}`,
60
+ machineId,
61
+ pid,
62
+ metrics: Object.keys(metrics).length > 0 ? metrics : undefined,
63
+ timestamp: Date.now(),
64
+ }).catch(() => { });
65
+ }
66
+ metricCollector.removeSource(key);
67
+ executor.removeBackgroundProcess(key);
68
+ }));
69
+ }
70
+ /**
71
+ * Build the monitor tick status message from live task/metric state.
72
+ */
73
+ export function buildMonitorMessage(config, executor, metricStore) {
74
+ const elapsedMin = Math.round((Date.now() - config.startedAt) / 60_000);
75
+ const intervalMin = Math.round(config.intervalMs / 60_000);
76
+ const parts = [
77
+ `[Monitor check — ${elapsedMin}m elapsed, interval ${intervalMin}m]`,
78
+ `Goal: ${config.goal}`,
79
+ ];
80
+ const procs = executor.getBackgroundProcesses();
81
+ if (procs.length > 0) {
82
+ parts.push("Tasks:");
83
+ for (const p of procs) {
84
+ const short = p.command.length > 50 ? p.command.slice(0, 47) + "..." : p.command;
85
+ parts.push(` ◆ ${p.machineId}:${p.pid} running — ${short}`);
86
+ }
87
+ }
88
+ const latestMetrics = metricStore.getLatestPerMetric();
89
+ const metricNames = Object.keys(latestMetrics);
90
+ if (metricNames.length > 0) {
91
+ parts.push("Metrics:");
92
+ for (const name of metricNames) {
93
+ parts.push(` ${name}: ${latestMetrics[name]}`);
94
+ }
95
+ }
96
+ return parts.join("\n");
97
+ }
98
+ //# sourceMappingURL=task-poller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-poller.js","sourceRoot":"","sources":["../../src/core/task-poller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Experiment branching — auto-create git branches per experiment.
3
+ * Creates a branch when an experiment starts, commits results when it finishes.
4
+ */
5
+ import type { RemoteExecutor } from "../remote/executor.js";
6
+ export interface ExperimentBranch {
7
+ machineId: string;
8
+ repoPath: string;
9
+ branchName: string;
10
+ originalBranch: string;
11
+ }
12
+ export declare class ExperimentBrancher {
13
+ private executor;
14
+ private branches;
15
+ constructor(executor: RemoteExecutor);
16
+ /**
17
+ * Create a new git branch for an experiment.
18
+ * Returns the branch name, or null if not in a git repo.
19
+ */
20
+ createBranch(machineId: string, repoPath: string, experimentName: string): Promise<string | null>;
21
+ /**
22
+ * Commit current changes on an experiment branch with a message.
23
+ */
24
+ commitResults(machineId: string, repoPath: string, branchName: string, message: string): Promise<boolean>;
25
+ /**
26
+ * Switch back to the original branch after an experiment.
27
+ */
28
+ returnToOriginal(machineId: string, branchName: string): Promise<void>;
29
+ /**
30
+ * Get diff between two experiment branches.
31
+ */
32
+ diff(machineId: string, repoPath: string, branchA: string, branchB: string): Promise<string>;
33
+ /**
34
+ * List all helios experiment branches in a repo.
35
+ */
36
+ listBranches(machineId: string, repoPath: string): Promise<string[]>;
37
+ }
38
+ //# sourceMappingURL=branching.d.ts.map