@elaraai/e3-ui-cli 1.0.72 → 1.0.73

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 (219) hide show
  1. package/README.md +46 -21
  2. package/dist/app/assets/{engine-BKZbmXkC-DmcCFcnb.js → engine-Bm-cIDd_-DwUdGcTZ.js} +1 -1
  3. package/dist/app/assets/{index-BJNWHnRv.js → index-mj-YVVN1.js} +91 -91
  4. package/dist/app/index.html +1 -1
  5. package/dist/cli.js +36 -5
  6. package/dist/cli.js.map +1 -1
  7. package/dist/commands/tui.d.ts +84 -0
  8. package/dist/commands/tui.d.ts.map +1 -0
  9. package/dist/commands/tui.js +86 -0
  10. package/dist/commands/tui.js.map +1 -0
  11. package/dist/tui/api.d.ts +108 -0
  12. package/dist/tui/api.d.ts.map +1 -0
  13. package/dist/tui/api.js +130 -0
  14. package/dist/tui/api.js.map +1 -0
  15. package/dist/tui/app.d.ts +23 -0
  16. package/dist/tui/app.d.ts.map +1 -0
  17. package/dist/tui/app.js +241 -0
  18. package/dist/tui/app.js.map +1 -0
  19. package/dist/tui/controller.d.ts +116 -0
  20. package/dist/tui/controller.d.ts.map +1 -0
  21. package/dist/tui/controller.js +620 -0
  22. package/dist/tui/controller.js.map +1 -0
  23. package/dist/tui/data/dataflow.d.ts +68 -0
  24. package/dist/tui/data/dataflow.d.ts.map +1 -0
  25. package/dist/tui/data/dataflow.js +137 -0
  26. package/dist/tui/data/dataflow.js.map +1 -0
  27. package/dist/tui/data/dataset.d.ts +80 -0
  28. package/dist/tui/data/dataset.d.ts.map +1 -0
  29. package/dist/tui/data/dataset.js +297 -0
  30. package/dist/tui/data/dataset.js.map +1 -0
  31. package/dist/tui/data/edit-buffer.d.ts +74 -0
  32. package/dist/tui/data/edit-buffer.d.ts.map +1 -0
  33. package/dist/tui/data/edit-buffer.js +120 -0
  34. package/dist/tui/data/edit-buffer.js.map +1 -0
  35. package/dist/tui/data/feeds.d.ts +45 -0
  36. package/dist/tui/data/feeds.d.ts.map +1 -0
  37. package/dist/tui/data/feeds.js +318 -0
  38. package/dist/tui/data/feeds.js.map +1 -0
  39. package/dist/tui/data/logs.d.ts +68 -0
  40. package/dist/tui/data/logs.d.ts.map +1 -0
  41. package/dist/tui/data/logs.js +134 -0
  42. package/dist/tui/data/logs.js.map +1 -0
  43. package/dist/tui/input/commands.d.ts +159 -0
  44. package/dist/tui/input/commands.d.ts.map +1 -0
  45. package/dist/tui/input/commands.js +259 -0
  46. package/dist/tui/input/commands.js.map +1 -0
  47. package/dist/tui/input/completion.d.ts +63 -0
  48. package/dist/tui/input/completion.d.ts.map +1 -0
  49. package/dist/tui/input/completion.js +128 -0
  50. package/dist/tui/input/completion.js.map +1 -0
  51. package/dist/tui/input/keymap.d.ts +153 -0
  52. package/dist/tui/input/keymap.d.ts.map +1 -0
  53. package/dist/tui/input/keymap.js +206 -0
  54. package/dist/tui/input/keymap.js.map +1 -0
  55. package/dist/tui/input/mouse.d.ts +52 -0
  56. package/dist/tui/input/mouse.d.ts.map +1 -0
  57. package/dist/tui/input/mouse.js +55 -0
  58. package/dist/tui/input/mouse.js.map +1 -0
  59. package/dist/tui/lifecycle.d.ts +61 -0
  60. package/dist/tui/lifecycle.d.ts.map +1 -0
  61. package/dist/tui/lifecycle.js +99 -0
  62. package/dist/tui/lifecycle.js.map +1 -0
  63. package/dist/tui/model/catalogue.d.ts +28 -0
  64. package/dist/tui/model/catalogue.d.ts.map +1 -0
  65. package/dist/tui/model/catalogue.js +94 -0
  66. package/dist/tui/model/catalogue.js.map +1 -0
  67. package/dist/tui/model/help.d.ts +37 -0
  68. package/dist/tui/model/help.d.ts.map +1 -0
  69. package/dist/tui/model/help.js +210 -0
  70. package/dist/tui/model/help.js.map +1 -0
  71. package/dist/tui/model/index.d.ts +42 -0
  72. package/dist/tui/model/index.d.ts.map +1 -0
  73. package/dist/tui/model/index.js +50 -0
  74. package/dist/tui/model/index.js.map +1 -0
  75. package/dist/tui/model/status.d.ts +88 -0
  76. package/dist/tui/model/status.d.ts.map +1 -0
  77. package/dist/tui/model/status.js +137 -0
  78. package/dist/tui/model/status.js.map +1 -0
  79. package/dist/tui/model/tree.d.ts +112 -0
  80. package/dist/tui/model/tree.d.ts.map +1 -0
  81. package/dist/tui/model/tree.js +178 -0
  82. package/dist/tui/model/tree.js.map +1 -0
  83. package/dist/tui/model/types.d.ts +21 -0
  84. package/dist/tui/model/types.d.ts.map +1 -0
  85. package/dist/tui/model/types.js +46 -0
  86. package/dist/tui/model/types.js.map +1 -0
  87. package/dist/tui/render/glyphs.d.ts +122 -0
  88. package/dist/tui/render/glyphs.d.ts.map +1 -0
  89. package/dist/tui/render/glyphs.js +122 -0
  90. package/dist/tui/render/glyphs.js.map +1 -0
  91. package/dist/tui/render/layout.d.ts +145 -0
  92. package/dist/tui/render/layout.d.ts.map +1 -0
  93. package/dist/tui/render/layout.js +209 -0
  94. package/dist/tui/render/layout.js.map +1 -0
  95. package/dist/tui/render/text.d.ts +149 -0
  96. package/dist/tui/render/text.d.ts.map +1 -0
  97. package/dist/tui/render/text.js +288 -0
  98. package/dist/tui/render/text.js.map +1 -0
  99. package/dist/tui/render/theme.d.ts +88 -0
  100. package/dist/tui/render/theme.d.ts.map +1 -0
  101. package/dist/tui/render/theme.js +145 -0
  102. package/dist/tui/render/theme.js.map +1 -0
  103. package/dist/tui/session.d.ts +78 -0
  104. package/dist/tui/session.d.ts.map +1 -0
  105. package/dist/tui/session.js +237 -0
  106. package/dist/tui/session.js.map +1 -0
  107. package/dist/tui/state/actions.d.ts +584 -0
  108. package/dist/tui/state/actions.d.ts.map +1 -0
  109. package/dist/tui/state/actions.js +62 -0
  110. package/dist/tui/state/actions.js.map +1 -0
  111. package/dist/tui/state/persist.d.ts +114 -0
  112. package/dist/tui/state/persist.d.ts.map +1 -0
  113. package/dist/tui/state/persist.js +187 -0
  114. package/dist/tui/state/persist.js.map +1 -0
  115. package/dist/tui/state/poll.d.ts +99 -0
  116. package/dist/tui/state/poll.d.ts.map +1 -0
  117. package/dist/tui/state/poll.js +160 -0
  118. package/dist/tui/state/poll.js.map +1 -0
  119. package/dist/tui/state/reducer.d.ts +16 -0
  120. package/dist/tui/state/reducer.d.ts.map +1 -0
  121. package/dist/tui/state/reducer.js +363 -0
  122. package/dist/tui/state/reducer.js.map +1 -0
  123. package/dist/tui/state/store.d.ts +37 -0
  124. package/dist/tui/state/store.d.ts.map +1 -0
  125. package/dist/tui/state/store.js +84 -0
  126. package/dist/tui/state/store.js.map +1 -0
  127. package/dist/tui/suspend.d.ts +17 -0
  128. package/dist/tui/suspend.d.ts.map +1 -0
  129. package/dist/tui/suspend.js +33 -0
  130. package/dist/tui/suspend.js.map +1 -0
  131. package/dist/tui/ui/App.d.ts +41 -0
  132. package/dist/tui/ui/App.d.ts.map +1 -0
  133. package/dist/tui/ui/App.js +92 -0
  134. package/dist/tui/ui/App.js.map +1 -0
  135. package/dist/tui/ui/frame.d.ts +86 -0
  136. package/dist/tui/ui/frame.d.ts.map +1 -0
  137. package/dist/tui/ui/frame.js +42 -0
  138. package/dist/tui/ui/frame.js.map +1 -0
  139. package/dist/tui/ui/lines.d.ts +92 -0
  140. package/dist/tui/ui/lines.d.ts.map +1 -0
  141. package/dist/tui/ui/lines.js +94 -0
  142. package/dist/tui/ui/lines.js.map +1 -0
  143. package/dist/tui/ui/shell/chrome.d.ts +61 -0
  144. package/dist/tui/ui/shell/chrome.d.ts.map +1 -0
  145. package/dist/tui/ui/shell/chrome.js +272 -0
  146. package/dist/tui/ui/shell/chrome.js.map +1 -0
  147. package/dist/tui/ui/shell/widgets.d.ts +75 -0
  148. package/dist/tui/ui/shell/widgets.d.ts.map +1 -0
  149. package/dist/tui/ui/shell/widgets.js +160 -0
  150. package/dist/tui/ui/shell/widgets.js.map +1 -0
  151. package/dist/tui/ui/views/about.d.ts +20 -0
  152. package/dist/tui/ui/views/about.d.ts.map +1 -0
  153. package/dist/tui/ui/views/about.js +40 -0
  154. package/dist/tui/ui/views/about.js.map +1 -0
  155. package/dist/tui/ui/views/all.d.ts +17 -0
  156. package/dist/tui/ui/views/all.d.ts.map +1 -0
  157. package/dist/tui/ui/views/all.js +17 -0
  158. package/dist/tui/ui/views/all.js.map +1 -0
  159. package/dist/tui/ui/views/dashboard.d.ts +156 -0
  160. package/dist/tui/ui/views/dashboard.d.ts.map +1 -0
  161. package/dist/tui/ui/views/dashboard.js +599 -0
  162. package/dist/tui/ui/views/dashboard.js.map +1 -0
  163. package/dist/tui/ui/views/help.d.ts +17 -0
  164. package/dist/tui/ui/views/help.d.ts.map +1 -0
  165. package/dist/tui/ui/views/help.js +65 -0
  166. package/dist/tui/ui/views/help.js.map +1 -0
  167. package/dist/tui/ui/views/index.d.ts +42 -0
  168. package/dist/tui/ui/views/index.d.ts.map +1 -0
  169. package/dist/tui/ui/views/index.js +42 -0
  170. package/dist/tui/ui/views/index.js.map +1 -0
  171. package/dist/tui/ui/views/input.d.ts +6 -0
  172. package/dist/tui/ui/views/input.d.ts.map +1 -0
  173. package/dist/tui/ui/views/input.js +494 -0
  174. package/dist/tui/ui/views/input.js.map +1 -0
  175. package/dist/tui/ui/views/launch.d.ts +16 -0
  176. package/dist/tui/ui/views/launch.d.ts.map +1 -0
  177. package/dist/tui/ui/views/launch.js +43 -0
  178. package/dist/tui/ui/views/launch.js.map +1 -0
  179. package/dist/tui/ui/views/refusal.d.ts +20 -0
  180. package/dist/tui/ui/views/refusal.d.ts.map +1 -0
  181. package/dist/tui/ui/views/refusal.js +47 -0
  182. package/dist/tui/ui/views/refusal.js.map +1 -0
  183. package/dist/tui/ui/views/repos.d.ts +10 -0
  184. package/dist/tui/ui/views/repos.d.ts.map +1 -0
  185. package/dist/tui/ui/views/repos.js +93 -0
  186. package/dist/tui/ui/views/repos.js.map +1 -0
  187. package/dist/tui/ui/views/task.d.ts +17 -0
  188. package/dist/tui/ui/views/task.d.ts.map +1 -0
  189. package/dist/tui/ui/views/task.js +309 -0
  190. package/dist/tui/ui/views/task.js.map +1 -0
  191. package/dist/tui/ui/views/wordmark.d.ts +15 -0
  192. package/dist/tui/ui/views/wordmark.d.ts.map +1 -0
  193. package/dist/tui/ui/views/wordmark.js +50 -0
  194. package/dist/tui/ui/views/wordmark.js.map +1 -0
  195. package/dist/tui/ui/views/workspaces.d.ts +17 -0
  196. package/dist/tui/ui/views/workspaces.d.ts.map +1 -0
  197. package/dist/tui/ui/views/workspaces.js +127 -0
  198. package/dist/tui/ui/views/workspaces.js.map +1 -0
  199. package/dist/tui/ui/widgets/leaf-editor.d.ts +58 -0
  200. package/dist/tui/ui/widgets/leaf-editor.d.ts.map +1 -0
  201. package/dist/tui/ui/widgets/leaf-editor.js +119 -0
  202. package/dist/tui/ui/widgets/leaf-editor.js.map +1 -0
  203. package/dist/tui/ui/widgets/logs.d.ts +99 -0
  204. package/dist/tui/ui/widgets/logs.d.ts.map +1 -0
  205. package/dist/tui/ui/widgets/logs.js +291 -0
  206. package/dist/tui/ui/widgets/logs.js.map +1 -0
  207. package/dist/tui/ui/widgets/reads.d.ts +62 -0
  208. package/dist/tui/ui/widgets/reads.d.ts.map +1 -0
  209. package/dist/tui/ui/widgets/reads.js +122 -0
  210. package/dist/tui/ui/widgets/reads.js.map +1 -0
  211. package/dist/tui/ui/widgets/runs.d.ts +51 -0
  212. package/dist/tui/ui/widgets/runs.d.ts.map +1 -0
  213. package/dist/tui/ui/widgets/runs.js +86 -0
  214. package/dist/tui/ui/widgets/runs.js.map +1 -0
  215. package/dist/tui/ui/widgets/tree.d.ts +149 -0
  216. package/dist/tui/ui/widgets/tree.d.ts.map +1 -0
  217. package/dist/tui/ui/widgets/tree.js +584 -0
  218. package/dist/tui/ui/widgets/tree.js.map +1 -0
  219. package/package.json +22 -12
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
+ */
5
+ /** The exit code for an unexpected failure (EX_SOFTWARE). */
6
+ export declare const EXIT_SOFTWARE = 70;
7
+ /** A line logger. */
8
+ export type Logger = (line: string) => void;
9
+ /**
10
+ * The debug logger: appends to `$XDG_STATE_HOME/e3-ui/debug.log` (beside
11
+ * the state file) when `E3_UI_DEBUG=1`, else a no-op.
12
+ *
13
+ * @param env - The environment
14
+ * @returns The logger and the log path (null when disabled)
15
+ */
16
+ export declare function createDebugLogger(env: NodeJS.ProcessEnv): {
17
+ log: Logger;
18
+ file: string | null;
19
+ };
20
+ /** What the handlers call. */
21
+ export interface LifecycleHooks {
22
+ /** A termination signal arrived: unmount and stop. */
23
+ onSignal: (signal: NodeJS.Signals) => void;
24
+ /** An unexpected error: the terminal is restored by the caller, then this reports it. */
25
+ onFatal: (error: unknown) => void;
26
+ }
27
+ /**
28
+ * Installs the process handlers.
29
+ *
30
+ * @param hooks - The callbacks
31
+ * @returns A function that removes them
32
+ */
33
+ export declare function installLifecycle(hooks: LifecycleHooks): () => void;
34
+ /**
35
+ * The stack (or message) of an unexpected error, for stderr after the
36
+ * terminal is restored.
37
+ *
38
+ * @param error - The error
39
+ * @returns The text
40
+ */
41
+ export declare function fatalText(error: unknown): string;
42
+ /**
43
+ * A one-line terminal description for the about view
44
+ * (`kitty 0.36 · 120×36 · truecolor · mouse ● · kitty keyboard ○`).
45
+ *
46
+ * @param env - The environment
47
+ * @param size - The terminal size
48
+ * @param colorLevel - The colour level
49
+ * @param mouse - Whether mouse reporting is on
50
+ * @param glyphs - The glyphs for the dots
51
+ * @returns The description
52
+ */
53
+ export declare function describeTerminal(env: NodeJS.ProcessEnv, size: {
54
+ columns: number;
55
+ rows: number;
56
+ }, colorLevel: number, mouse: boolean, glyphs: {
57
+ dot: string;
58
+ empty: string;
59
+ sep: string;
60
+ }): string;
61
+ //# sourceMappingURL=lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/tui/lifecycle.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkBH,6DAA6D;AAC7D,eAAO,MAAM,aAAa,KAAK,CAAC;AAEhC,qBAAqB;AACrB,MAAM,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAE5C;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAgB9F;AAED,8BAA8B;AAC9B,MAAM,WAAW,cAAc;IAC3B,sDAAsD;IACtD,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC;IAC3C,yFAAyF;IACzF,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACrC;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,IAAI,CAalE;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAGhD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC5B,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EACvC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,OAAO,EACd,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACpD,MAAM,CAMR"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
+ */
5
+ /**
6
+ * Lifecycle — the process-level handlers the terminal UI installs:
7
+ * SIGINT / SIGTERM / SIGHUP unmount cleanly (Ctrl-C is a key while the
8
+ * UI runs, so SIGINT only arrives from outside), `uncaughtException` /
9
+ * `unhandledRejection` restore the terminal first, then print the stack
10
+ * and exit 70; and the `E3_UI_DEBUG=1` file logger, which never writes to
11
+ * stdout or stderr while the UI owns the screen.
12
+ *
13
+ * @packageDocumentation
14
+ */
15
+ import * as fs from 'node:fs';
16
+ import * as path from 'node:path';
17
+ import * as os from 'node:os';
18
+ import { statePath } from './state/persist.js';
19
+ /** The exit code for an unexpected failure (EX_SOFTWARE). */
20
+ export const EXIT_SOFTWARE = 70;
21
+ /**
22
+ * The debug logger: appends to `$XDG_STATE_HOME/e3-ui/debug.log` (beside
23
+ * the state file) when `E3_UI_DEBUG=1`, else a no-op.
24
+ *
25
+ * @param env - The environment
26
+ * @returns The logger and the log path (null when disabled)
27
+ */
28
+ export function createDebugLogger(env) {
29
+ if (env['E3_UI_DEBUG'] !== '1')
30
+ return { log: () => undefined, file: null };
31
+ const file = path.join(path.dirname(statePath(env, process.platform, os.homedir())), 'debug.log');
32
+ let ready = false;
33
+ const log = (line) => {
34
+ try {
35
+ if (!ready) {
36
+ fs.mkdirSync(path.dirname(file), { recursive: true, mode: 0o700 });
37
+ ready = true;
38
+ }
39
+ fs.appendFileSync(file, `${new Date().toISOString()} ${line}\n`, { mode: 0o600 });
40
+ }
41
+ catch {
42
+ // The log must never take the UI down.
43
+ }
44
+ };
45
+ return { log, file };
46
+ }
47
+ /**
48
+ * Installs the process handlers.
49
+ *
50
+ * @param hooks - The callbacks
51
+ * @returns A function that removes them
52
+ */
53
+ export function installLifecycle(hooks) {
54
+ const signals = ['SIGINT', 'SIGTERM', 'SIGHUP'];
55
+ const onSignal = (signal) => hooks.onSignal(signal);
56
+ const onException = (error) => hooks.onFatal(error);
57
+ const onRejection = (reason) => hooks.onFatal(reason);
58
+ for (const signal of signals)
59
+ process.on(signal, onSignal);
60
+ process.on('uncaughtException', onException);
61
+ process.on('unhandledRejection', onRejection);
62
+ return () => {
63
+ for (const signal of signals)
64
+ process.off(signal, onSignal);
65
+ process.off('uncaughtException', onException);
66
+ process.off('unhandledRejection', onRejection);
67
+ };
68
+ }
69
+ /**
70
+ * The stack (or message) of an unexpected error, for stderr after the
71
+ * terminal is restored.
72
+ *
73
+ * @param error - The error
74
+ * @returns The text
75
+ */
76
+ export function fatalText(error) {
77
+ if (error instanceof Error)
78
+ return error.stack ?? `${error.name}: ${error.message}`;
79
+ return String(error);
80
+ }
81
+ /**
82
+ * A one-line terminal description for the about view
83
+ * (`kitty 0.36 · 120×36 · truecolor · mouse ● · kitty keyboard ○`).
84
+ *
85
+ * @param env - The environment
86
+ * @param size - The terminal size
87
+ * @param colorLevel - The colour level
88
+ * @param mouse - Whether mouse reporting is on
89
+ * @param glyphs - The glyphs for the dots
90
+ * @returns The description
91
+ */
92
+ export function describeTerminal(env, size, colorLevel, mouse, glyphs) {
93
+ const program = env['TERM_PROGRAM'] ?? env['TERMINAL_EMULATOR'] ?? (env['TERM'] === 'xterm-kitty' ? 'kitty' : env['TERM'] ?? 'terminal');
94
+ const version = env['TERM_PROGRAM_VERSION'] !== undefined ? ` ${env['TERM_PROGRAM_VERSION']}` : '';
95
+ const colour = colorLevel >= 3 ? 'truecolor' : colorLevel === 2 ? '256 colours' : colorLevel === 1 ? '16 colours' : 'no colour';
96
+ const on = (flag) => (flag ? glyphs.dot : glyphs.empty);
97
+ return `${program}${version} ${glyphs.sep} ${size.columns}×${size.rows} ${glyphs.sep} ${colour} ${glyphs.sep} mouse ${on(mouse)}`;
98
+ }
99
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/tui/lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
+ */
5
+ import type { Catalogue } from '../input/completion.js';
6
+ import type { Glyphs } from '../render/glyphs.js';
7
+ import type { TuiState } from '../state/actions.js';
8
+ /**
9
+ * The entry of a dataset in the workspace's dataset list (type / size), by
10
+ * dotted path. The recursive listing shows a task's subtree as one leaf at
11
+ * `.tasks.<name>` carrying the output's type / hash / size, while the status
12
+ * names the output `.tasks.<name>.output` — both spellings resolve.
13
+ */
14
+ export declare function datasetEntries(state: TuiState, ws: string): Map<string, {
15
+ type: string;
16
+ size: number | null;
17
+ hash: string | null;
18
+ }>;
19
+ /**
20
+ * Builds the catalogue.
21
+ *
22
+ * @param state - The store state
23
+ * @param g - The glyph set
24
+ * @param tags - Variant tags offered by `/tag` on the selected row
25
+ * @returns The catalogue
26
+ */
27
+ export declare function buildCatalogue(state: TuiState, g: Glyphs, tags?: string[]): Catalogue;
28
+ //# sourceMappingURL=catalogue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalogue.d.ts","sourceRoot":"","sources":["../../../src/tui/model/catalogue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,KAAK,EAAE,SAAS,EAAiB,MAAM,wBAAwB,CAAC;AACvE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAIpD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAmBnI;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CA+CrF"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
+ */
5
+ import { formatSize } from '../render/text.js';
6
+ import { compactType } from './types.js';
7
+ import { datasetStatusCell, statusText, taskStatusCell } from './status.js';
8
+ /**
9
+ * The entry of a dataset in the workspace's dataset list (type / size), by
10
+ * dotted path. The recursive listing shows a task's subtree as one leaf at
11
+ * `.tasks.<name>` carrying the output's type / hash / size, while the status
12
+ * names the output `.tasks.<name>.output` — both spellings resolve.
13
+ */
14
+ export function datasetEntries(state, ws) {
15
+ const raw = new Map();
16
+ for (const entry of state.data.datasets[ws] ?? []) {
17
+ if (entry.type !== 'dataset')
18
+ continue;
19
+ raw.set(`.${entry.value.path.replace(/^\./, '')}`, {
20
+ type: entry.value.type,
21
+ size: entry.value.size.type === 'some' ? Number(entry.value.size.value) : null,
22
+ hash: entry.value.hash.type === 'some' ? entry.value.hash.value : null,
23
+ });
24
+ }
25
+ for (const task of state.data.status[ws]?.result.tasks ?? []) {
26
+ if (raw.has(task.output))
27
+ continue;
28
+ const leaf = raw.get(task.output.replace(/\.output$/, ''));
29
+ if (leaf !== undefined)
30
+ raw.set(task.output, leaf);
31
+ }
32
+ const uiTasks = new Set((state.data.taskList[ws] ?? []).filter(t => t.kind.type === 'some' && t.kind.value === 'ui').map(t => `.tasks.${t.name}.output`));
33
+ const out = new Map();
34
+ for (const [path, entry] of raw)
35
+ out.set(path, { type: compactType(entry.type, uiTasks.has(path)), size: entry.size, hash: entry.hash });
36
+ return out;
37
+ }
38
+ /**
39
+ * Builds the catalogue.
40
+ *
41
+ * @param state - The store state
42
+ * @param g - The glyph set
43
+ * @param tags - Variant tags offered by `/tag` on the selected row
44
+ * @returns The catalogue
45
+ */
46
+ export function buildCatalogue(state, g, tags) {
47
+ const items = [];
48
+ for (const w of state.data.workspaces ?? []) {
49
+ const pkg = w.packageName.type === 'some' ? `${w.packageName.value}${w.packageVersion.type === 'some' ? `@${w.packageVersion.value}` : ''}` : '';
50
+ items.push({ kind: 'workspace', name: w.name, workspace: null, status: w.deployed ? `${g.dot} DEPLOYED` : `${g.empty} EMPTY`, type: pkg, detail: '' });
51
+ }
52
+ for (const [ws, { result }] of Object.entries(state.data.status)) {
53
+ const entries = datasetEntries(state, ws);
54
+ for (const task of result.tasks) {
55
+ const entry = entries.get(task.output);
56
+ items.push({
57
+ kind: 'task',
58
+ name: task.name,
59
+ workspace: ws,
60
+ status: statusText(taskStatusCell(task.status, g)),
61
+ type: entry?.type ?? '',
62
+ detail: entry?.size != null ? formatSize(entry.size) : '—',
63
+ });
64
+ }
65
+ for (const dataset of result.datasets) {
66
+ const entry = entries.get(dataset.path);
67
+ const status = statusText(datasetStatusCell(dataset.status.type, g));
68
+ if (!dataset.isTaskOutput && dataset.path.startsWith('.inputs.')) {
69
+ items.push({
70
+ kind: 'input',
71
+ name: dataset.path.slice('.inputs.'.length),
72
+ workspace: ws,
73
+ status,
74
+ type: entry?.type ?? '',
75
+ detail: entry?.size != null ? formatSize(entry.size) : '—',
76
+ });
77
+ }
78
+ items.push({
79
+ kind: 'dataset',
80
+ name: dataset.path,
81
+ workspace: ws,
82
+ status,
83
+ type: '',
84
+ detail: entry?.size != null ? formatSize(entry.size) : '—',
85
+ });
86
+ }
87
+ }
88
+ for (const name of state.data.repos?.names ?? []) {
89
+ const status = state.data.repos?.status[name];
90
+ items.push({ kind: 'repo', name, workspace: null, status: status !== undefined ? `${status.workspaceCount} workspaces` : '', type: '', detail: '' });
91
+ }
92
+ return { items, tags };
93
+ }
94
+ //# sourceMappingURL=catalogue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalogue.js","sourceRoot":"","sources":["../../../src/tui/model/catalogue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
+ */
5
+ /**
6
+ * The help view's content — one tab per page (plus what works everywhere),
7
+ * so the commands and keys listed are exactly the ones that work where you
8
+ * are. `?` opens the tab of the page it was pressed on.
9
+ *
10
+ * @packageDocumentation
11
+ */
12
+ import type { HelpTab, ViewKind } from '../state/actions.js';
13
+ /** A help column: a heading and `[key, effect]` rows. */
14
+ export interface HelpColumn {
15
+ title: string;
16
+ rows: [string, string][];
17
+ }
18
+ /** The tabs in order, with their labels. */
19
+ export declare const HELP_TABS: readonly {
20
+ tab: HelpTab;
21
+ label: string;
22
+ }[];
23
+ /**
24
+ * The help tab a page opens on.
25
+ *
26
+ * @param from - The page `?` was pressed on
27
+ * @returns Its tab (`everywhere` for the launch / refusal / help / about screens)
28
+ */
29
+ export declare function helpTabFor(from: ViewKind): HelpTab;
30
+ /**
31
+ * The columns of a help tab.
32
+ *
33
+ * @param tab - The tab
34
+ * @returns Three columns (some may be empty)
35
+ */
36
+ export declare function helpColumns(tab: HelpTab): HelpColumn[];
37
+ //# sourceMappingURL=help.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../../src/tui/model/help.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE7D,yDAAyD;AACzD,MAAM,WAAW,UAAU;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;CAC5B;AAED,4CAA4C;AAC5C,eAAO,MAAM,SAAS,EAAE,SAAS;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAO/D,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CASlD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,EAAE,CA6KtD"}
@@ -0,0 +1,210 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
+ */
5
+ /** The tabs in order, with their labels. */
6
+ export const HELP_TABS = [
7
+ { tab: 'everywhere', label: 'Everywhere' },
8
+ { tab: 'repos', label: 'Repos' },
9
+ { tab: 'workspaces', label: 'Workspaces' },
10
+ { tab: 'dashboard', label: 'Dashboard' },
11
+ { tab: 'task', label: 'Task' },
12
+ { tab: 'input', label: 'Input' },
13
+ ];
14
+ /**
15
+ * The help tab a page opens on.
16
+ *
17
+ * @param from - The page `?` was pressed on
18
+ * @returns Its tab (`everywhere` for the launch / refusal / help / about screens)
19
+ */
20
+ export function helpTabFor(from) {
21
+ switch (from) {
22
+ case 'repos': return 'repos';
23
+ case 'workspaces': return 'workspaces';
24
+ case 'dashboard': return 'dashboard';
25
+ case 'task': return 'task';
26
+ case 'input': return 'input';
27
+ default: return 'everywhere';
28
+ }
29
+ }
30
+ /**
31
+ * The columns of a help tab.
32
+ *
33
+ * @param tab - The tab
34
+ * @returns Three columns (some may be empty)
35
+ */
36
+ export function helpColumns(tab) {
37
+ switch (tab) {
38
+ case 'everywhere':
39
+ return [
40
+ {
41
+ title: 'COMMANDS',
42
+ rows: [
43
+ ['/task <name>', 'open a task'],
44
+ ['/input <name>', 'open an input'],
45
+ ['/dataset <path>', 'open a dataset'],
46
+ ['/workspace <name>', 'switch workspace'],
47
+ ['/workspaces /repos', 'the lists'],
48
+ ['/repo <path|url>', 'open another repo'],
49
+ ['/login <url>', 'device-flow login'],
50
+ ['/refresh', 'poll everything now'],
51
+ ['/help /about /quit', ''],
52
+ ['', ''],
53
+ ['typing without /', 'fuzzy-jumps anywhere'],
54
+ ],
55
+ },
56
+ {
57
+ title: 'KEYS',
58
+ rows: [
59
+ ['?', 'help for this page'],
60
+ ['q ^c', 'quit'],
61
+ ['esc ⌫', 'back'],
62
+ ['tab ⇧tab', 'next / prev tab'],
63
+ ['1 2 3 …', 'tabs'],
64
+ ['R', 'refresh now'],
65
+ ['/', 'a command'],
66
+ ['↑↓ j k', 'move'],
67
+ ['pgup pgdn ^u ^d', 'page'],
68
+ ['gg G', 'top / bottom'],
69
+ ],
70
+ },
71
+ {
72
+ title: 'MOUSE',
73
+ rows: [
74
+ ['wheel', 'scroll'],
75
+ ['click', 'select'],
76
+ ['click ▸', 'toggle'],
77
+ ['drag ▮', 'scrollbar'],
78
+ ['click tab / crumb', 'act'],
79
+ ['', ''],
80
+ ['--no-mouse', 'keyboard only'],
81
+ ],
82
+ },
83
+ ];
84
+ case 'repos':
85
+ return [
86
+ { title: 'COMMANDS', rows: [['/repo <name>', 'open a repository'], ['/login <url>', 'device-flow login'], ['/refresh', 'poll now']] },
87
+ { title: 'KEYS', rows: [['↑↓ j k', 'move'], ['⏎ →', 'open the repository'], ['q', 'quit']] },
88
+ { title: '', rows: [] },
89
+ ];
90
+ case 'workspaces':
91
+ return [
92
+ { title: 'COMMANDS', rows: [['/workspace <name>', 'open a workspace'], ['/repos', 'back to the repositories'], ['/refresh', 'poll now']] },
93
+ { title: 'KEYS', rows: [['↑↓ j k', 'move'], ['⏎ →', 'open the workspace'], ['q', 'quit']] },
94
+ { title: '', rows: [] },
95
+ ];
96
+ case 'dashboard':
97
+ return [
98
+ {
99
+ title: 'COMMANDS',
100
+ rows: [
101
+ ['/run [--force]', 'run the dataflow'],
102
+ ['/run --filter <glob>', 'only matching tasks'],
103
+ ['/run --concurrency <n>', ''],
104
+ ['/stop', 'cancel the dataflow'],
105
+ ['/task /input', 'open a row'],
106
+ ['/logs <task> [stderr]', 'a task\'s logs'],
107
+ ['/runs <task>', 'a task\'s runs'],
108
+ ['/workspace <name>', 'switch workspace'],
109
+ ],
110
+ },
111
+ {
112
+ title: 'KEYS',
113
+ rows: [
114
+ ['↑↓ j k', 'move'],
115
+ ['⏎ →', 'open the task / input'],
116
+ ['r', 'prefill /run'],
117
+ ['x', 'prefill /stop'],
118
+ ['w', 'workspaces'],
119
+ ['R', 'refresh now'],
120
+ ],
121
+ },
122
+ { title: 'ROWS', rows: [['tasks', '● up-to-date ◐ waiting ◔ running'], ['', '○ ready ✗ failed'], ['inputs', '● up-to-date ◐ stale ○ unset'], ['execution', '⏎ on a failed row → logs']] },
123
+ ];
124
+ case 'task':
125
+ return [
126
+ {
127
+ title: 'COMMANDS',
128
+ rows: [
129
+ ['/find <"key">', 'exact key'],
130
+ ['/find <prefix>', 'key prefix'],
131
+ ['/find f1|f2', 'struct-key fields'],
132
+ ['/goto <row> /goto N%', 'jump'],
133
+ ['/save [file]', 'write .beast2 / .log'],
134
+ ['/logs [stderr] /runs', 'switch tab'],
135
+ ],
136
+ },
137
+ {
138
+ title: 'KEYS · VALUE TREE',
139
+ rows: [
140
+ ['↑↓ j k', 'move'],
141
+ ['→ l', 'expand'],
142
+ ['← h', 'collapse'],
143
+ ['⏎ space', 'toggle'],
144
+ ['⇧←', 'collapse subtree'],
145
+ ['pgup pgdn ^u ^d', 'page'],
146
+ ['gg G', 'top / bottom'],
147
+ ['n N', 'next / prev match'],
148
+ ['s', 'save .beast2'],
149
+ ['1 2 3 4 5', 'Output Stdout Stderr Runs Reads'],
150
+ ['tab ⇧tab', 'next / prev tab'],
151
+ ],
152
+ },
153
+ {
154
+ title: 'KEYS · STDOUT / STDERR',
155
+ rows: [
156
+ ['↑↓ pgup pgdn', 'scroll'],
157
+ ['G', 'end'],
158
+ ['F', 'follow the tail'],
159
+ ['← → tab', 'the other tabs'],
160
+ ['n N', 'next / prev match'],
161
+ ['s', 'save .log'],
162
+ ['c', 'copy'],
163
+ ['', ''],
164
+ ['KEYS · RUNS', ''],
165
+ ['⏎', 'expand the inputs'],
166
+ ],
167
+ },
168
+ ];
169
+ case 'input':
170
+ return [
171
+ {
172
+ title: 'COMMANDS',
173
+ rows: [
174
+ ['/tag <name>', 'switch a variant tag'],
175
+ ['/tag some /tag none', 'set / clear an option'],
176
+ ['/add [key]', 'add an item / entry'],
177
+ ['/remove', 'remove the item'],
178
+ ['/apply /discard', 'the pending edits'],
179
+ ['/find /goto', 'as in a task'],
180
+ ],
181
+ },
182
+ {
183
+ title: 'KEYS',
184
+ rows: [
185
+ ['e', 'edit the leaf'],
186
+ ['a', 'add'],
187
+ ['x', 'remove'],
188
+ ['t', 'tag / set / clear'],
189
+ ['⏎', 'apply all'],
190
+ ['esc', 'discard'],
191
+ ['↑↓ → ←', 'move / expand / collapse'],
192
+ ],
193
+ },
194
+ {
195
+ title: 'EDITING',
196
+ rows: [
197
+ ['⏎', 'commit the leaf'],
198
+ ['esc', 'cancel the leaf'],
199
+ ['space', 'toggle a boolean'],
200
+ ['', ''],
201
+ ['◆ N DIRTY', 'the header pill'],
202
+ ['┆', 'a changed row'],
203
+ ['conflict', 'the server changed:'],
204
+ ['', '⏎ reload · esc keep'],
205
+ ],
206
+ },
207
+ ];
208
+ }
209
+ }
210
+ //# sourceMappingURL=help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../../src/tui/model/help.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
+ */
5
+ /**
6
+ * View models — the pure selectors every view renders from and the
7
+ * controller navigates with. A view model is `{ rows, visible }` at
8
+ * minimum: the rows the primary list has and how many fit, so `list/move`
9
+ * is driven from one place.
10
+ *
11
+ * @packageDocumentation
12
+ */
13
+ import { type ShellLayout } from '../render/layout.js';
14
+ import type { TuiState } from '../state/actions.js';
15
+ /** The rows of the current view's primary list and how many are visible. */
16
+ export interface ListModel {
17
+ count: number;
18
+ visible: number;
19
+ }
20
+ /**
21
+ * The shell layout for the state (the commit bar shows while editing, the
22
+ * completion list while it has items).
23
+ *
24
+ * @param state - The store state
25
+ * @returns The layout
26
+ */
27
+ export declare function layoutOf(state: TuiState): ShellLayout;
28
+ /**
29
+ * Registers a view's list model (called by each view model module on load).
30
+ *
31
+ * @param kind - The view kind
32
+ * @param model - The selector
33
+ */
34
+ export declare function registerListModel(kind: string, model: (state: TuiState, layout: ShellLayout) => ListModel): void;
35
+ /**
36
+ * The current view's primary list model.
37
+ *
38
+ * @param state - The store state
39
+ * @returns The rows and visible count (0 / 0 for views without a list)
40
+ */
41
+ export declare function listModel(state: TuiState): ListModel;
42
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tui/model/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;GAOG;AAEH,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,4EAA4E;AAC5E,MAAM,WAAW,SAAS;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,WAAW,CAKrD;AAKD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,KAAK,SAAS,GAAG,IAAI,CAEhH;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,CAIpD"}