@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 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * `helios init` — initialize a project with a helios.json config file.
3
+ */
4
+ import { Option } from "effect";
5
+ import { Command } from "@effect/cli";
6
+ export declare const initCmd: Command.Command<"init", never, never, {
7
+ readonly provider: Option.Option<"claude" | "openai">;
8
+ readonly model: Option.Option<string>;
9
+ readonly machine: Option.Option<string>;
10
+ }>;
11
+ //# sourceMappingURL=init-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-cmd.d.ts","sourceRoot":"","sources":["../../src/cli/init-cmd.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,OAAO,EAAW,MAAM,aAAa,CAAC;AAoB/C,eAAO,MAAM,OAAO;;;;EAkCnB,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * `helios init` — initialize a project with a helios.json config file.
3
+ */
4
+ import { Effect, Option } from "effect";
5
+ import { Command, Options } from "@effect/cli";
6
+ const providerOpt = Options.choice("provider", ["claude", "openai"]).pipe(Options.withAlias("P"), Options.withDescription("Default provider for this project"), Options.optional);
7
+ const modelOpt = Options.text("model").pipe(Options.withAlias("m"), Options.withDescription("Default model for this project"), Options.optional);
8
+ const machineOpt = Options.text("machine").pipe(Options.withDescription("Default machine for experiments"), Options.optional);
9
+ export const initCmd = Command.make("init", { provider: providerOpt, model: modelOpt, machine: machineOpt }, ({ provider, model, machine }) => Effect.promise(async () => {
10
+ const { existsSync } = await import("node:fs");
11
+ const { join } = await import("node:path");
12
+ const { writeProjectConfig } = await import("../config/project.js");
13
+ const dir = process.cwd();
14
+ const configPath = join(dir, "helios.json");
15
+ if (existsSync(configPath)) {
16
+ console.log(`helios.json already exists in ${dir}`);
17
+ console.log("Edit it directly or delete it and re-run 'helios init'.");
18
+ return;
19
+ }
20
+ const config = {};
21
+ if (Option.isSome(provider))
22
+ config.provider = provider.value;
23
+ if (Option.isSome(model))
24
+ config.model = model.value;
25
+ if (Option.isSome(machine))
26
+ config.defaultMachine = machine.value;
27
+ // Sensible defaults
28
+ config.metricNames = ["loss", "acc", "lr"];
29
+ writeProjectConfig(dir, config);
30
+ console.log(`Created helios.json in ${dir}`);
31
+ console.log("\nEdit it to configure:");
32
+ console.log(" - provider/model defaults");
33
+ console.log(" - metric names and patterns to track");
34
+ console.log(" - notification channels (desktop, webhook, command)");
35
+ console.log(" - project-specific agent instructions");
36
+ }));
37
+ //# sourceMappingURL=init-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-cmd.js","sourceRoot":"","sources":["../../src/cli/init-cmd.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAG/C,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CACvE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,eAAe,CAAC,mCAAmC,CAAC,EAC5D,OAAO,CAAC,QAAQ,CACjB,CAAC;AAEF,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CACzC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,eAAe,CAAC,gCAAgC,CAAC,EACzD,OAAO,CAAC,QAAQ,CACjB,CAAC;AAEF,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAC7C,OAAO,CAAC,eAAe,CAAC,iCAAiC,CAAC,EAC1D,OAAO,CAAC,QAAQ,CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CACjC,MAAM,EACN,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,EAC/D,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAC/B,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;IACxB,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IAC/C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAEpE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAE5C,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;QACvE,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;QAAE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,KAA4B,CAAC;IACrF,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IACrD,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;QAAE,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC;IAElE,oBAAoB;IACpB,MAAM,CAAC,WAAW,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAE3C,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;AACzD,CAAC,CAAC,CACL,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * `helios kill <machine:pid>` — kill a running task from the CLI.
3
+ */
4
+ import { Command } from "@effect/cli";
5
+ export declare const kill: Command.Command<"kill", never, never, {
6
+ readonly target: string;
7
+ }>;
8
+ //# sourceMappingURL=kill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kill.d.ts","sourceRoot":"","sources":["../../src/cli/kill.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,OAAO,EAAQ,MAAM,aAAa,CAAC;AAM5C,eAAO,MAAM,IAAI;;EAgDhB,CAAC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * `helios kill <machine:pid>` — kill a running task from the CLI.
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 kill, e.g. 'local:12345'"));
7
+ export const kill = Command.make("kill", { 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 kill <machine_id:pid>");
12
+ process.exit(1);
13
+ }
14
+ const { createRuntime } = await import("../init.js");
15
+ const runtime = await createRuntime();
16
+ const { connectionPool, executor } = runtime;
17
+ // Check if running
18
+ const running = await connectionPool.isProcessRunning(machineId, pid);
19
+ if (!running) {
20
+ console.log(`Process ${machineId}:${pid} is not running.`);
21
+ runtime.cleanup();
22
+ return;
23
+ }
24
+ // Kill it
25
+ const result = await connectionPool.exec(machineId, `kill ${pid} 2>/dev/null && echo killed || echo failed`);
26
+ const outcome = result.stdout.trim();
27
+ if (outcome === "killed") {
28
+ console.log(`Killed ${machineId}:${pid}`);
29
+ // Clean up from executor tracking
30
+ const key = `${machineId}:${pid}`;
31
+ executor.removeBackgroundProcess(key);
32
+ }
33
+ else {
34
+ // Try SIGKILL
35
+ const force = await connectionPool.exec(machineId, `kill -9 ${pid} 2>/dev/null && echo killed || echo failed`);
36
+ if (force.stdout.trim() === "killed") {
37
+ console.log(`Force-killed ${machineId}:${pid} (SIGKILL)`);
38
+ executor.removeBackgroundProcess(`${machineId}:${pid}`);
39
+ }
40
+ else {
41
+ console.error(`Failed to kill ${machineId}:${pid}. Check permissions.`);
42
+ }
43
+ }
44
+ runtime.cleanup();
45
+ }));
46
+ //# sourceMappingURL=kill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kill.js","sourceRoot":"","sources":["../../src/cli/kill.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,IAAI,CACpD,IAAI,CAAC,eAAe,CAAC,kCAAkC,CAAC,CACzD,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAC9B,MAAM,EACN,EAAE,MAAM,EAAE,EACV,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CACb,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;IACxB,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACjC,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,MAAM,aAAa,EAAE,CAAC;IAEtC,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAE7C,mBAAmB;IACnB,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACtE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,WAAW,SAAS,IAAI,GAAG,kBAAkB,CAAC,CAAC;QAC3D,OAAO,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IAED,UAAU;IACV,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,4CAA4C,CAAC,CAAC;IAC7G,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAErC,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,UAAU,SAAS,IAAI,GAAG,EAAE,CAAC,CAAC;QAE1C,kCAAkC;QAClC,MAAM,GAAG,GAAG,GAAG,SAAS,IAAI,GAAG,EAAE,CAAC;QAClC,QAAQ,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC;IACxC,CAAC;SAAM,CAAC;QACN,cAAc;QACd,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,GAAG,4CAA4C,CAAC,CAAC;QAC/G,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,QAAQ,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,gBAAgB,SAAS,IAAI,GAAG,YAAY,CAAC,CAAC;YAC1D,QAAQ,CAAC,uBAAuB,CAAC,GAAG,SAAS,IAAI,GAAG,EAAE,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,kBAAkB,SAAS,IAAI,GAAG,sBAAsB,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED,OAAO,CAAC,OAAO,EAAE,CAAC;AACpB,CAAC,CAAC,CACL,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Shared CLI options used across commands.
3
+ */
4
+ import { Options, Args } from "@effect/cli";
5
+ export declare const provider: Options.Options<import("effect/Option").Option<"claude" | "openai">>;
6
+ export declare const claudeMode: Options.Options<import("effect/Option").Option<"cli" | "api">>;
7
+ export declare const model: Options.Options<import("effect/Option").Option<string>>;
8
+ export declare const continueSession: Options.Options<boolean>;
9
+ export declare const resumeSession: Options.Options<import("effect/Option").Option<string>>;
10
+ export declare const print: Options.Options<boolean>;
11
+ export declare const headless: Options.Options<boolean>;
12
+ export declare const home: Options.Options<import("effect/Option").Option<string>>;
13
+ export declare const hubUrl: Options.Options<import("effect/Option").Option<string>>;
14
+ export declare const hubKey: Options.Options<import("effect/Option").Option<string>>;
15
+ export declare const agent: Options.Options<import("effect/Option").Option<string>>;
16
+ export declare const files: Options.Options<string[]>;
17
+ export declare const prompt: Args.Args<import("effect/Option").Option<string>>;
18
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/cli/options.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAI5C,eAAO,MAAM,QAAQ,sEAIpB,CAAC;AAEF,eAAO,MAAM,UAAU,gEAGtB,CAAC;AAEF,eAAO,MAAM,KAAK,yDAIjB,CAAC;AAIF,eAAO,MAAM,eAAe,0BAI3B,CAAC;AAEF,eAAO,MAAM,aAAa,yDAIzB,CAAC;AAIF,eAAO,MAAM,KAAK,0BAIjB,CAAC;AAEF,eAAO,MAAM,QAAQ,0BAGpB,CAAC;AAIF,eAAO,MAAM,IAAI,yDAGhB,CAAC;AAEF,eAAO,MAAM,MAAM,yDAGlB,CAAC;AAEF,eAAO,MAAM,MAAM,yDAGlB,CAAC;AAEF,eAAO,MAAM,KAAK,yDAGjB,CAAC;AAIF,eAAO,MAAM,KAAK,2BAIjB,CAAC;AAIF,eAAO,MAAM,MAAM,mDAGlB,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Shared CLI options used across commands.
3
+ */
4
+ import { Options, Args } from "@effect/cli";
5
+ // ── Provider & model ─────────────────────────────────────
6
+ export const provider = Options.choice("provider", ["claude", "openai"]).pipe(Options.withAlias("P"), Options.withDescription("Model provider"), Options.optional);
7
+ export const claudeMode = Options.choice("claude-mode", ["cli", "api"]).pipe(Options.withDescription("Force Claude auth mode (cli or api)"), Options.optional);
8
+ export const model = Options.text("model").pipe(Options.withAlias("m"), Options.withDescription("Model to use"), Options.optional);
9
+ // ── Session ──────────────────────────────────────────────
10
+ export const continueSession = Options.boolean("continue").pipe(Options.withAlias("c"), Options.withDescription("Continue most recent conversation"), Options.withDefault(false));
11
+ export const resumeSession = Options.text("resume").pipe(Options.withAlias("r"), Options.withDescription("Resume a conversation by session ID"), Options.optional);
12
+ // ── Modes ────────────────────────────────────────────────
13
+ export const print = Options.boolean("print").pipe(Options.withAlias("p"), Options.withDescription("Print response and exit (non-interactive)"), Options.withDefault(false));
14
+ export const headless = Options.boolean("headless").pipe(Options.withDescription("Compact UI — no input field"), Options.withDefault(false));
15
+ // ── Paths & hub ──────────────────────────────────────────
16
+ export const home = Options.directory("home").pipe(Options.withDescription("Data directory (default: ~/.helios)"), Options.optional);
17
+ export const hubUrl = Options.text("hub-url").pipe(Options.withDescription("AgentHub server URL"), Options.optional);
18
+ export const hubKey = Options.text("hub-key").pipe(Options.withDescription("AgentHub API key"), Options.optional);
19
+ export const agent = Options.text("agent").pipe(Options.withDescription("Agent identity on AgentHub"), Options.optional);
20
+ // ── Attachments ─────────────────────────────────────────
21
+ export const files = Options.text("file").pipe(Options.withAlias("f"), Options.withDescription("Attach a file (PDF, image). Can be repeated."), Options.repeated);
22
+ // ── Positional ───────────────────────────────────────────
23
+ export const prompt = Args.text({ name: "prompt" }).pipe(Args.withDescription("Initial prompt to send"), Args.optional);
24
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/cli/options.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * `helios replay <session-id>` — read-only playback of a session's conversation.
3
+ */
4
+ import { Command } from "@effect/cli";
5
+ export declare const replay: Command.Command<"replay", never, never, {
6
+ readonly sessionId: string;
7
+ readonly raw: boolean;
8
+ }>;
9
+ //# sourceMappingURL=replay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../src/cli/replay.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,OAAO,EAAiB,MAAM,aAAa,CAAC;AAWrD,eAAO,MAAM,MAAM;;;EAmElB,CAAC"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * `helios replay <session-id>` — read-only playback of a session's conversation.
3
+ */
4
+ import { Effect } from "effect";
5
+ import { Command, Args, Options } from "@effect/cli";
6
+ const sessionId = Args.text({ name: "session-id" }).pipe(Args.withDescription("Session ID to replay (use 'helios sessions' to find IDs)"));
7
+ const raw = Options.boolean("raw").pipe(Options.withDescription("Output raw text without formatting"), Options.withDefault(false));
8
+ export const replay = Command.make("replay", { sessionId, raw }, ({ sessionId, raw }) => Effect.promise(async () => {
9
+ const { SessionStore } = await import("../store/session-store.js");
10
+ const store = new SessionStore(process.env.AGENTHUB_AGENT ?? "");
11
+ const session = store.getSession(sessionId);
12
+ if (!session) {
13
+ console.error(`Session "${sessionId}" not found. Use 'helios sessions' to list sessions.`);
14
+ process.exit(1);
15
+ }
16
+ const messages = store.getMessages(sessionId, 10000);
17
+ if (messages.length === 0) {
18
+ console.log("Session has no messages.");
19
+ return;
20
+ }
21
+ const date = new Date(session.createdAt).toLocaleString();
22
+ const provider = session.providerId;
23
+ if (!raw) {
24
+ console.log(`\x1b[1m── Session ${sessionId} ──\x1b[0m`);
25
+ console.log(`Provider: ${provider} | Started: ${date} | Messages: ${messages.length}\n`);
26
+ }
27
+ for (const msg of messages) {
28
+ if (raw) {
29
+ console.log(`[${msg.role}] ${msg.content}`);
30
+ continue;
31
+ }
32
+ const time = new Date(msg.timestamp).toLocaleTimeString();
33
+ switch (msg.role) {
34
+ case "user":
35
+ console.log(`\x1b[33m┌─ User \x1b[2m${time}\x1b[0m`);
36
+ console.log(`\x1b[33m│\x1b[0m ${msg.content.split("\n").join("\n\x1b[33m│\x1b[0m ")}`);
37
+ console.log(`\x1b[33m└\x1b[0m`);
38
+ break;
39
+ case "assistant":
40
+ console.log(`\x1b[36m┌─ Helios \x1b[2m${time}\x1b[0m`);
41
+ // Truncate very long assistant messages for readability
42
+ const content = msg.content.length > 2000
43
+ ? msg.content.slice(0, 2000) + `\n... (${msg.content.length - 2000} chars truncated)`
44
+ : msg.content;
45
+ console.log(`\x1b[36m│\x1b[0m ${content.split("\n").join("\n\x1b[36m│\x1b[0m ")}`);
46
+ console.log(`\x1b[36m└\x1b[0m`);
47
+ break;
48
+ case "tool":
49
+ console.log(`\x1b[2m ⚙ tool ${time}\x1b[0m`);
50
+ const preview = msg.content.length > 200
51
+ ? msg.content.slice(0, 200) + "..."
52
+ : msg.content;
53
+ console.log(`\x1b[2m ${preview.split("\n").join("\n ")}\x1b[0m`);
54
+ break;
55
+ case "system":
56
+ console.log(`\x1b[35m ◈ system: ${msg.content}\x1b[0m`);
57
+ break;
58
+ default:
59
+ console.log(`\x1b[31m ✗ ${msg.role}: ${msg.content}\x1b[0m`);
60
+ break;
61
+ }
62
+ console.log();
63
+ }
64
+ }));
65
+ //# sourceMappingURL=replay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/cli/replay.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * `helios report [session-id]` — generate an experiment writeup from session data.
3
+ * Outputs markdown to stdout (pipeable: `helios report > results.md`)
4
+ */
5
+ import { Option } from "effect";
6
+ import { Command } from "@effect/cli";
7
+ export declare const report: Command.Command<"report", never, never, {
8
+ readonly sessionId: Option.Option<string>;
9
+ readonly provider: Option.Option<"claude" | "openai">;
10
+ }>;
11
+ //# sourceMappingURL=report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/cli/report.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,OAAO,EAAiB,MAAM,aAAa,CAAC;AAarD,eAAO,MAAM,MAAM;;;EAyElB,CAAC"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * `helios report [session-id]` — generate an experiment writeup from session data.
3
+ * Outputs markdown to stdout (pipeable: `helios report > results.md`)
4
+ */
5
+ import { Effect, Option } from "effect";
6
+ import { Command, Args, Options } from "@effect/cli";
7
+ const sessionId = Args.text({ name: "session-id" }).pipe(Args.withDescription("Session ID to report on (default: most recent)"), Args.optional);
8
+ const provider = Options.choice("provider", ["claude", "openai"]).pipe(Options.withAlias("P"), Options.withDescription("Provider to use for generating the writeup"), Options.optional);
9
+ export const report = Command.make("report", { sessionId, provider }, ({ sessionId: sessionIdOpt, provider: providerOpt }) => Effect.promise(async () => {
10
+ const { SessionStore } = await import("../store/session-store.js");
11
+ const { createRuntime } = await import("../init.js");
12
+ const { buildWriteupSystemPrompt } = await import("../tools/writeup.js");
13
+ const agentId = process.env.AGENTHUB_AGENT ?? "";
14
+ const store = new SessionStore(agentId);
15
+ // Resolve session
16
+ const targetId = Option.getOrUndefined(sessionIdOpt);
17
+ let resolvedId;
18
+ if (targetId) {
19
+ const session = store.getSession(targetId);
20
+ if (!session) {
21
+ process.stderr.write(`Session "${targetId}" not found.\n`);
22
+ process.exit(1);
23
+ }
24
+ resolvedId = targetId;
25
+ }
26
+ else {
27
+ const sessions = store.listSessions(1);
28
+ if (sessions.length === 0) {
29
+ process.stderr.write("No sessions found.\n");
30
+ process.exit(1);
31
+ }
32
+ resolvedId = sessions[0].id;
33
+ process.stderr.write(`Using most recent session: ${resolvedId}\n`);
34
+ }
35
+ // Gather session transcript
36
+ const messages = store.getMessages(resolvedId, 10000);
37
+ if (messages.length === 0) {
38
+ process.stderr.write("Session has no messages.\n");
39
+ process.exit(1);
40
+ }
41
+ const transcript = messages
42
+ .map((m) => `[${m.role}] ${m.content}`)
43
+ .join("\n\n");
44
+ // Create a runtime to get a provider for the writeup
45
+ const providerName = Option.getOrUndefined(providerOpt);
46
+ const runtime = await createRuntime({ provider: providerName });
47
+ const activeProvider = runtime.orchestrator.currentProvider;
48
+ if (!activeProvider) {
49
+ process.stderr.write("No active provider. Authenticate first with 'helios auth login'.\n");
50
+ runtime.cleanup();
51
+ process.exit(1);
52
+ }
53
+ process.stderr.write("Generating report...\n");
54
+ const session = await activeProvider.createSession({
55
+ systemPrompt: buildWriteupSystemPrompt({ transcript: true }),
56
+ });
57
+ try {
58
+ for await (const event of activeProvider.send(session, transcript, [])) {
59
+ if (event.type === "text" && event.delta) {
60
+ process.stdout.write(event.delta);
61
+ }
62
+ }
63
+ process.stdout.write("\n");
64
+ }
65
+ finally {
66
+ await activeProvider.closeSession(session).catch(() => { });
67
+ runtime.cleanup();
68
+ }
69
+ }));
70
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/cli/report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Default command — launches the interactive TUI or runs in print mode.
3
+ */
4
+ import { Effect, Option } from "effect";
5
+ export interface RunOptions {
6
+ provider: Option.Option<string>;
7
+ claudeMode: Option.Option<string>;
8
+ model: Option.Option<string>;
9
+ continueSession: boolean;
10
+ resumeSession: Option.Option<string>;
11
+ print: boolean;
12
+ headless: boolean;
13
+ files: string[];
14
+ prompt: Option.Option<string>;
15
+ }
16
+ export declare function run(opts: RunOptions): Effect.Effect<void>;
17
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGxC,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7B,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;CAC/B;AAED,wBAAgB,GAAG,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAuBzD"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Default command — launches the interactive TUI or runs in print mode.
3
+ */
4
+ import { Effect, Option } from "effect";
5
+ export function run(opts) {
6
+ return Effect.gen(function* () {
7
+ const providerArg = Option.getOrUndefined(opts.provider);
8
+ const claudeModeArg = Option.getOrUndefined(opts.claudeMode);
9
+ const modelArg = Option.getOrUndefined(opts.model);
10
+ const resumeId = Option.getOrUndefined(opts.resumeSession);
11
+ const promptText = Option.getOrUndefined(opts.prompt);
12
+ if (opts.print) {
13
+ yield* printMode({ provider: providerArg, claudeMode: claudeModeArg, model: modelArg, prompt: promptText, files: opts.files });
14
+ }
15
+ else {
16
+ yield* tuiMode({
17
+ provider: providerArg,
18
+ claudeMode: claudeModeArg,
19
+ model: modelArg,
20
+ headless: opts.headless,
21
+ continueSession: opts.continueSession,
22
+ resumeSessionId: resumeId,
23
+ prompt: promptText,
24
+ files: opts.files,
25
+ });
26
+ }
27
+ });
28
+ }
29
+ // ── File loading ────────────────────────────────────────
30
+ const MIME_TYPES = {
31
+ ".pdf": "application/pdf",
32
+ ".png": "image/png",
33
+ ".jpg": "image/jpeg",
34
+ ".jpeg": "image/jpeg",
35
+ ".gif": "image/gif",
36
+ ".webp": "image/webp",
37
+ };
38
+ const MAX_FILE_SIZE = 20 * 1024 * 1024; // 20MB
39
+ async function loadAttachments(paths) {
40
+ if (paths.length === 0)
41
+ return [];
42
+ const { readFile, stat } = await import("node:fs/promises");
43
+ const { extname, basename } = await import("node:path");
44
+ return Promise.all(paths.map(async (filePath) => {
45
+ const ext = extname(filePath).toLowerCase();
46
+ const mediaType = MIME_TYPES[ext];
47
+ if (!mediaType) {
48
+ throw new Error(`Unsupported file type: ${ext} (supported: ${Object.keys(MIME_TYPES).join(", ")})`);
49
+ }
50
+ const info = await stat(filePath);
51
+ if (info.size > MAX_FILE_SIZE) {
52
+ throw new Error(`File too large: ${basename(filePath)} (${(info.size / 1024 / 1024).toFixed(0)}MB, max ${MAX_FILE_SIZE / 1024 / 1024}MB)`);
53
+ }
54
+ const data = await readFile(filePath);
55
+ return {
56
+ filename: basename(filePath),
57
+ mediaType,
58
+ data: data.toString("base64"),
59
+ };
60
+ }));
61
+ }
62
+ function printMode(opts) {
63
+ return Effect.promise(async () => {
64
+ if (!opts.prompt) {
65
+ // Read from stdin if no prompt argument
66
+ const chunks = [];
67
+ for await (const chunk of process.stdin) {
68
+ chunks.push(chunk);
69
+ }
70
+ opts.prompt = Buffer.concat(chunks).toString("utf-8").trim();
71
+ }
72
+ if (!opts.prompt) {
73
+ process.stderr.write("Error: no prompt provided. Pass a prompt as an argument or pipe via stdin.\n");
74
+ process.exit(1);
75
+ }
76
+ const attachments = await loadAttachments(opts.files);
77
+ const { createRuntime } = await import("../init.js");
78
+ const runtime = await createRuntime({ provider: opts.provider, claudeMode: opts.claudeMode });
79
+ if (opts.model) {
80
+ await runtime.orchestrator.setModel(opts.model);
81
+ }
82
+ try {
83
+ for await (const event of runtime.orchestrator.send(opts.prompt, attachments.length > 0 ? attachments : undefined)) {
84
+ if (event.type === "text" && event.delta) {
85
+ process.stdout.write(event.delta);
86
+ }
87
+ }
88
+ process.stdout.write("\n");
89
+ }
90
+ finally {
91
+ runtime.cleanup();
92
+ }
93
+ });
94
+ }
95
+ function tuiMode(opts) {
96
+ return Effect.promise(async () => {
97
+ const initialPrompt = opts.prompt;
98
+ const attachments = await loadAttachments(opts.files);
99
+ // Dynamic imports to avoid pulling React into print mode
100
+ const { withFullScreen } = await import("fullscreen-ink");
101
+ const { App } = await import("../app.js");
102
+ const { createMouseFilter } = await import("../ui/mouse-filter.js");
103
+ const { createElement } = await import("react");
104
+ const { filteredStdin, mouseEmitter } = createMouseFilter(process.stdin);
105
+ const { start, waitUntilExit } = withFullScreen(createElement(App, {
106
+ defaultProvider: opts.provider,
107
+ claudeMode: opts.claudeMode,
108
+ mouseEmitter: opts.headless ? undefined : mouseEmitter,
109
+ headless: opts.headless,
110
+ initialPrompt,
111
+ initialAttachments: attachments.length > 0 ? attachments : undefined,
112
+ resumeSessionId: opts.resumeSessionId,
113
+ continueSession: opts.continueSession,
114
+ model: opts.model,
115
+ }), { exitOnCtrlC: false, stdin: filteredStdin });
116
+ await start();
117
+ await waitUntilExit();
118
+ });
119
+ }
120
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * `helios search "query"` — full-text search across all session histories.
3
+ */
4
+ import { Command } from "@effect/cli";
5
+ export declare const search: Command.Command<"search", never, never, {
6
+ readonly query: string;
7
+ readonly limit: number;
8
+ }>;
9
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/cli/search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,OAAO,EAAiB,MAAM,aAAa,CAAC;AAYrD,eAAO,MAAM,MAAM;;;EA8DlB,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * `helios search "query"` — full-text search across all session histories.
3
+ */
4
+ import { Effect } from "effect";
5
+ import { Command, Args, Options } from "@effect/cli";
6
+ const query = Args.text({ name: "query" }).pipe(Args.withDescription("Text to search for across all sessions"));
7
+ const limit = Options.integer("limit").pipe(Options.withAlias("n"), Options.withDescription("Max results to show"), Options.withDefault(20));
8
+ export const search = Command.make("search", { query, limit }, ({ query, limit }) => Effect.promise(async () => {
9
+ const { getDb } = await import("../store/database.js");
10
+ const { truncate } = await import("../ui/format.js");
11
+ const db = getDb();
12
+ const agentId = process.env.AGENTHUB_AGENT ?? "";
13
+ // Search messages with LIKE (SQLite doesn't have full-text by default)
14
+ const rows = db.prepare(`SELECT m.session_id, m.role, m.content, m.timestamp, s.provider
15
+ FROM messages m
16
+ JOIN sessions s ON s.id = m.session_id
17
+ WHERE s.agent_id = ? AND m.content LIKE ? ESCAPE '\'
18
+ ORDER BY m.timestamp DESC
19
+ LIMIT ?`).all(agentId, `%${query.replace(/[%_]/g, "\\$&")}%`, limit);
20
+ if (rows.length === 0) {
21
+ console.log(`No results for "${query}".`);
22
+ return;
23
+ }
24
+ console.log(`Found ${rows.length} result${rows.length > 1 ? "s" : ""} for "${query}":\n`);
25
+ for (const row of rows) {
26
+ const time = new Date(row.timestamp).toLocaleString();
27
+ const roleColor = row.role === "user" ? "\x1b[33m" : row.role === "assistant" ? "\x1b[36m" : "\x1b[2m";
28
+ // Find the query match in context
29
+ const idx = row.content.toLowerCase().indexOf(query.toLowerCase());
30
+ const start = Math.max(0, idx - 60);
31
+ const end = Math.min(row.content.length, idx + query.length + 60);
32
+ let snippet = row.content.slice(start, end).replace(/\n/g, " ");
33
+ if (start > 0)
34
+ snippet = "..." + snippet;
35
+ if (end < row.content.length)
36
+ snippet = snippet + "...";
37
+ // Highlight the match
38
+ const matchIdx = snippet.toLowerCase().indexOf(query.toLowerCase());
39
+ if (matchIdx >= 0) {
40
+ snippet =
41
+ snippet.slice(0, matchIdx) +
42
+ "\x1b[43m\x1b[30m" +
43
+ snippet.slice(matchIdx, matchIdx + query.length) +
44
+ "\x1b[0m" +
45
+ snippet.slice(matchIdx + query.length);
46
+ }
47
+ console.log(`${roleColor}${row.role}\x1b[0m \x1b[2m${time} session:${row.session_id.slice(0, 8)}\x1b[0m`);
48
+ console.log(` ${snippet}`);
49
+ console.log();
50
+ }
51
+ }));
52
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/cli/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * `helios sessions` — list recent sessions.
3
+ */
4
+ import { Command } from "@effect/cli";
5
+ export declare const sessions: Command.Command<"sessions", never, never, {
6
+ readonly limit: number;
7
+ }>;
8
+ //# sourceMappingURL=sessions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/cli/sessions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,OAAO,EAAW,MAAM,aAAa,CAAC;AAQ/C,eAAO,MAAM,QAAQ;;EA4CpB,CAAC"}