@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,620 @@
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 { describeError } from './api.js';
6
+ import { cancelRun, startRun } from './data/dataflow.js';
7
+ import { viewWorkspace } from './data/feeds.js';
8
+ import { complete } from './input/completion.js';
9
+ import { describe, parseCommand } from './input/commands.js';
10
+ import { resolve as resolveKey } from './input/keymap.js';
11
+ import { isMouseInput, parseSgr } from './input/mouse.js';
12
+ import { hitAt, lastFrame, paneTopFromRow } from './ui/frame.js';
13
+ import { buildCatalogue } from './model/catalogue.js';
14
+ import { HELP_TABS, helpTabFor } from './model/help.js';
15
+ import { listModel } from './model/index.js';
16
+ import { inputView, isLogTab, taskTabsOf, taskView } from './state/actions.js';
17
+ import { dirtyCount } from './state/reducer.js';
18
+ import { repoEntry } from './state/persist.js';
19
+ import { restoreTree } from './ui/widgets/tree.js';
20
+ const hooks = new Map();
21
+ /**
22
+ * Registers a view's hooks (called by each view module on load).
23
+ *
24
+ * @param kind - The view kind
25
+ * @param viewHooks - The hooks
26
+ */
27
+ export function registerViewHooks(kind, viewHooks) {
28
+ hooks.set(kind, { ...hooks.get(kind), ...viewHooks });
29
+ }
30
+ let toastSeq = 0;
31
+ /**
32
+ * Creates the controller.
33
+ *
34
+ * @param deps - The dependencies
35
+ * @returns The controller
36
+ */
37
+ export function createController(deps) {
38
+ const { store } = deps;
39
+ let stdout = null;
40
+ const state = () => store.getState();
41
+ const dispatch = (action) => store.dispatch(action);
42
+ const workspace = () => {
43
+ const v = state().view;
44
+ if (v.kind === 'dashboard' || v.kind === 'task' || v.kind === 'input')
45
+ return v.ws;
46
+ const persisted = deps.persist?.state;
47
+ const session = state().session;
48
+ if (persisted !== undefined && session !== null)
49
+ return persisted.repos[session.stateKey]?.workspace ?? null;
50
+ return null;
51
+ };
52
+ const remember = (view) => {
53
+ const session = state().session;
54
+ if (deps.persist === null || session === null)
55
+ return;
56
+ deps.persist.update(s => {
57
+ const entry = repoEntry(s, session.stateKey);
58
+ if (view.kind === 'dashboard' || view.kind === 'task' || view.kind === 'input')
59
+ entry.workspace = view.ws;
60
+ entry.view = view.kind === 'task' ? `task:${view.task}` : view.kind === 'input' ? `input:${view.name}` : view.kind;
61
+ });
62
+ };
63
+ const controller = {
64
+ deps,
65
+ dispatch,
66
+ state,
67
+ workspace,
68
+ onKey(input, key) {
69
+ if (isMouseInput(input)) {
70
+ // Mouse reports never reach the keymap (they would read as a paste).
71
+ if (state().mouse)
72
+ for (const event of parseSgr(input))
73
+ onMouse(event);
74
+ return;
75
+ }
76
+ const s = state();
77
+ const v = s.view;
78
+ const viewHooks = hooks.get(v.kind);
79
+ const ctx = {
80
+ commandMode: s.command.mode,
81
+ editingLeaf: v.kind === 'input' && v.editing !== null,
82
+ scope: v.kind === 'repos' || v.kind === 'workspaces' || v.kind === 'dashboard' ? 'list'
83
+ : v.kind === 'task' ? (v.tab === 'output' ? 'tree' : isLogTab(v.tab) ? 'logs' : 'list')
84
+ : v.kind === 'input' ? 'tree'
85
+ : 'none',
86
+ editable: v.kind === 'input',
87
+ tabs: v.kind === 'task' ? taskTabsOf(s, v.ws, v.task).length : v.kind === 'help' ? HELP_TABS.length : 0,
88
+ pendingKey: s.pendingKey,
89
+ };
90
+ const action = resolveKey(input, key, ctx);
91
+ if (s.pendingKey !== null)
92
+ dispatch({ type: 'pendingKey', key: null });
93
+ if (action === null)
94
+ return;
95
+ deps.log(`key ${JSON.stringify(input)} → ${action.kind}`);
96
+ if (viewHooks?.key?.(action, s, controller) === true)
97
+ return;
98
+ handleAction(action, s, viewHooks);
99
+ },
100
+ async execute(text) {
101
+ const trimmed = text.trim();
102
+ if (trimmed === '') {
103
+ dispatch({ type: 'command/clear' });
104
+ return;
105
+ }
106
+ if (!trimmed.startsWith('/')) {
107
+ const candidates = complete(trimmed, buildCatalogue(state(), deps.glyphs));
108
+ const first = candidates[0];
109
+ if (first === undefined) {
110
+ controller.toast(`no match for ${trimmed}`, 'warn');
111
+ return;
112
+ }
113
+ await controller.execute(first.insert);
114
+ return;
115
+ }
116
+ const parsed = parseCommand(trimmed);
117
+ if (!parsed.ok) {
118
+ controller.toast(parsed.error, 'neg');
119
+ return;
120
+ }
121
+ dispatch({ type: 'command/clear' });
122
+ try {
123
+ await runCommand(parsed.command, trimmed);
124
+ }
125
+ catch (err) {
126
+ deps.log(`command ${trimmed} failed: ${describeError(err)}`);
127
+ controller.toast(describeError(err), 'neg');
128
+ }
129
+ },
130
+ toast(text, tone = 'pos', glyph) {
131
+ const id = ++toastSeq;
132
+ dispatch({ type: 'toast', toast: { id, text, tone, ...(glyph !== undefined ? { glyph } : {}), until: deps.now() + 3_000 } });
133
+ const timer = setTimeout(() => dispatch({ type: 'toast/clear', id }), 3_000);
134
+ timer.unref?.();
135
+ },
136
+ navigate(view, push = false) {
137
+ dispatch(push ? { type: 'view/push', view } : { type: 'view/set', view });
138
+ remember(view);
139
+ },
140
+ openTask(ws, task, tab = 'output') {
141
+ const s = state();
142
+ const v = s.view;
143
+ if (v.kind === 'task' && v.ws === ws && v.task === task) {
144
+ dispatch({ type: 'task/tab', tab });
145
+ return;
146
+ }
147
+ controller.navigate(taskView(ws, task, tab), v.kind === 'dashboard' || v.kind === 'task' || v.kind === 'input');
148
+ restoreTree(controller, ws, `.tasks.${task}.output`);
149
+ },
150
+ openInput(ws, name) {
151
+ const v = state().view;
152
+ controller.navigate(inputView(ws, name), v.kind === 'dashboard' || v.kind === 'task' || v.kind === 'input');
153
+ restoreTree(controller, ws, `.inputs.${name}`);
154
+ },
155
+ openWorkspace(ws) {
156
+ dispatch({ type: 'view/root', view: { kind: 'dashboard', ws, list: { sel: 0, top: 0 } } });
157
+ remember({ kind: 'dashboard', ws, list: { sel: 0, top: 0 } });
158
+ },
159
+ back() {
160
+ const s = state();
161
+ if (s.command.mode !== 'idle') {
162
+ dispatch({ type: 'command/clear' });
163
+ return;
164
+ }
165
+ if (s.history.length > 0) {
166
+ dispatch({ type: 'view/pop' });
167
+ remember(state().view);
168
+ return;
169
+ }
170
+ const v = s.view;
171
+ if (v.kind === 'task' || v.kind === 'input')
172
+ controller.openWorkspace(v.ws);
173
+ },
174
+ quit(force) {
175
+ const dirty = dirtyCount(state());
176
+ if (dirty > 0 && !force) {
177
+ dispatch({ type: 'command/confirm', confirm: { question: `quit with ${dirty} unsaved edit${dirty === 1 ? '' : 's'}?`, command: '/quit --force' } });
178
+ return;
179
+ }
180
+ deps.exit(0);
181
+ },
182
+ setSize(size) {
183
+ const current = state().size;
184
+ if (current.columns !== size.columns || current.rows !== size.rows)
185
+ dispatch({ type: 'size', size });
186
+ },
187
+ attachStdout(stream) {
188
+ stdout = stream;
189
+ void stdout;
190
+ },
191
+ updateCompletion() {
192
+ const s = state();
193
+ if (s.command.mode !== 'edit')
194
+ return;
195
+ const tags = hooks.get(s.view.kind)?.tags?.(s);
196
+ dispatch({ type: 'command/completion', items: complete(s.command.text, buildCatalogue(s, deps.glyphs, tags)) });
197
+ },
198
+ };
199
+ const startTyping = (text) => {
200
+ dispatch({ type: 'command/edit', text });
201
+ controller.updateCompletion();
202
+ };
203
+ const handleAction = (action, s, viewHooks) => {
204
+ switch (action.kind) {
205
+ case 'quit':
206
+ controller.quit(false);
207
+ return;
208
+ case 'help':
209
+ controller.navigate({ kind: 'help', tab: helpTabFor(s.view.kind) }, true);
210
+ return;
211
+ case 'back':
212
+ controller.back();
213
+ return;
214
+ case 'refresh':
215
+ deps.feeds.refresh();
216
+ return;
217
+ case 'type':
218
+ startTyping(action.text);
219
+ return;
220
+ case 'prefill':
221
+ startTyping(action.text);
222
+ return;
223
+ case 'pending':
224
+ dispatch({ type: 'pendingKey', key: action.key });
225
+ return;
226
+ case 'paste': {
227
+ if (s.command.mode === 'edit')
228
+ dispatch({ type: 'command/insert', text: action.text });
229
+ else
230
+ dispatch({ type: 'command/edit', text: action.text });
231
+ controller.updateCompletion();
232
+ if (action.submit)
233
+ void controller.execute(state().command.text);
234
+ return;
235
+ }
236
+ case 'tab': {
237
+ if (s.view.kind === 'help') {
238
+ dispatch({ type: 'help/tab', tab: HELP_TABS[action.index]?.tab ?? 'everywhere' });
239
+ }
240
+ else if (s.view.kind === 'task') {
241
+ dispatch({ type: 'task/tab', tab: taskTabsOf(s, s.view.ws, s.view.task)[action.index] ?? 'output' });
242
+ }
243
+ return;
244
+ }
245
+ case 'tab.cycle': {
246
+ const wrap = (i, n) => ((i + action.delta) % n + n) % n;
247
+ if (s.view.kind === 'help') {
248
+ const tab = s.view.tab;
249
+ const i = Math.max(0, HELP_TABS.findIndex(x => x.tab === tab));
250
+ dispatch({ type: 'help/tab', tab: HELP_TABS[wrap(i, HELP_TABS.length)].tab });
251
+ }
252
+ else if (s.view.kind === 'task') {
253
+ const tabs = taskTabsOf(s, s.view.ws, s.view.task);
254
+ dispatch({ type: 'task/tab', tab: tabs[wrap(Math.max(0, tabs.indexOf(s.view.tab)), tabs.length)] });
255
+ }
256
+ return;
257
+ }
258
+ case 'move': {
259
+ if (s.view.kind === 'help') {
260
+ const tabs = ['everywhere', 'repos', 'workspaces', 'dashboard', 'task', 'input'];
261
+ const i = tabs.indexOf(s.view.tab);
262
+ if (action.op === 'up' || action.op === 'down')
263
+ return;
264
+ return void i;
265
+ }
266
+ if (viewHooks?.tree?.(action, s, controller) === true)
267
+ return;
268
+ const model = listModel(s);
269
+ dispatch({ type: 'list/move', op: action.op, count: model.count, visible: model.visible });
270
+ return;
271
+ }
272
+ case 'open':
273
+ viewHooks?.open?.(s, controller);
274
+ return;
275
+ case 'expand':
276
+ case 'collapse':
277
+ case 'toggle':
278
+ case 'collapseDeep':
279
+ case 'next':
280
+ case 'prev':
281
+ case 'save':
282
+ viewHooks?.tree?.(action, s, controller);
283
+ return;
284
+ case 'retry': {
285
+ if (s.view.kind === 'refusal')
286
+ void deps.openTarget(s.session?.target ?? refusalTarget(s));
287
+ return;
288
+ }
289
+ // -- the command box ------------------------------------------
290
+ case 'cmd.char':
291
+ dispatch({ type: 'command/insert', text: action.text });
292
+ controller.updateCompletion();
293
+ return;
294
+ case 'cmd.backspace': {
295
+ if (s.command.text.length <= 1) {
296
+ dispatch({ type: 'command/clear' });
297
+ return;
298
+ }
299
+ dispatch({ type: 'command/backspace' });
300
+ controller.updateCompletion();
301
+ return;
302
+ }
303
+ case 'cmd.delete':
304
+ dispatch({ type: 'command/delete' });
305
+ controller.updateCompletion();
306
+ return;
307
+ case 'cmd.left':
308
+ dispatch({ type: 'command/cursor', to: 'left' });
309
+ return;
310
+ case 'cmd.right':
311
+ dispatch({ type: 'command/cursor', to: 'right' });
312
+ return;
313
+ case 'cmd.home':
314
+ dispatch({ type: 'command/cursor', to: 'home' });
315
+ return;
316
+ case 'cmd.end':
317
+ dispatch({ type: 'command/cursor', to: 'end' });
318
+ return;
319
+ case 'cmd.up':
320
+ dispatch({ type: 'command/completionMove', delta: -1 });
321
+ return;
322
+ case 'cmd.down':
323
+ dispatch({ type: 'command/completionMove', delta: 1 });
324
+ return;
325
+ case 'cmd.cancel':
326
+ dispatch({ type: 'command/clear' });
327
+ return;
328
+ case 'cmd.complete': {
329
+ const completion = s.command.completion;
330
+ const item = completion?.items[completion.index];
331
+ if (item === undefined)
332
+ return;
333
+ dispatch({ type: 'command/edit', text: item.insert });
334
+ controller.updateCompletion();
335
+ return;
336
+ }
337
+ case 'cmd.submit': {
338
+ if (s.command.mode === 'confirm' && s.command.confirm !== null) {
339
+ const command = s.command.confirm.command;
340
+ dispatch({ type: 'command/clear' });
341
+ void controller.execute(command);
342
+ return;
343
+ }
344
+ const completion = s.command.completion;
345
+ const item = completion?.items[completion.index];
346
+ // A picked completion row runs that item; a fully typed command runs as typed.
347
+ if (item !== undefined && (!s.command.text.startsWith('/') || item.kind !== 'command' && item.kind !== 'flag' && !parseCommand(s.command.text).ok)) {
348
+ void controller.execute(item.insert);
349
+ return;
350
+ }
351
+ if (item !== undefined && item.kind !== 'command' && item.kind !== 'flag' && parseCommand(s.command.text).ok) {
352
+ const parsed = parseCommand(s.command.text);
353
+ // `/task fore` with a highlighted row opens the row, not the literal.
354
+ if (parsed.ok && 'target' in parsed.command && item.insert !== s.command.text) {
355
+ void controller.execute(item.insert);
356
+ return;
357
+ }
358
+ }
359
+ void controller.execute(s.command.text);
360
+ return;
361
+ }
362
+ default:
363
+ return;
364
+ }
365
+ };
366
+ // -- the mouse ------------------------------------------------------
367
+ let dragging = false;
368
+ /** The primary list's first visible row (for absolute scrolls). */
369
+ const listTop = (s) => {
370
+ const v = s.view;
371
+ if (v.kind === 'repos' || v.kind === 'workspaces' || v.kind === 'dashboard')
372
+ return v.list.top;
373
+ if (v.kind === 'task')
374
+ return v.tab === 'runs' ? v.runs.top : v.tab === 'reads' ? v.reads.top : v.tree.top;
375
+ if (v.kind === 'input')
376
+ return v.tree.top;
377
+ return 0;
378
+ };
379
+ const scrollBy = (s, to) => {
380
+ if (hooks.get(s.view.kind)?.scroll?.(to, s, controller) === true)
381
+ return;
382
+ const model = listModel(s);
383
+ if (model.count === 0)
384
+ return;
385
+ const delta = 'delta' in to ? to.delta : to.top - listTop(s);
386
+ dispatch({ type: 'list/scroll', delta, count: model.count, visible: model.visible });
387
+ };
388
+ const onMouse = (event) => {
389
+ const frame = lastFrame();
390
+ if (frame === null)
391
+ return;
392
+ const s = state();
393
+ if (event.kind === 'wheelUp') {
394
+ scrollBy(s, { delta: -3 });
395
+ return;
396
+ }
397
+ if (event.kind === 'wheelDown') {
398
+ scrollBy(s, { delta: 3 });
399
+ return;
400
+ }
401
+ if (event.kind === 'release') {
402
+ dragging = false;
403
+ return;
404
+ }
405
+ if (event.kind === 'drag') {
406
+ if (dragging && frame.pane !== null)
407
+ scrollBy(s, { top: paneTopFromRow(frame.pane, event.y) });
408
+ return;
409
+ }
410
+ if (event.kind !== 'press' || event.button !== 'left')
411
+ return;
412
+ const pane = frame.pane;
413
+ if (pane !== null && event.x === frame.layout.columns - 1 && event.y >= pane.top && event.y < pane.top + pane.rows && pane.total > pane.visible) {
414
+ dragging = true;
415
+ scrollBy(s, { top: paneTopFromRow(pane, event.y) });
416
+ return;
417
+ }
418
+ const target = hitAt(frame, event.x, event.y);
419
+ if (target === null)
420
+ return;
421
+ deps.log(`click ${event.x},${event.y} → ${target.kind}`);
422
+ const viewHooks = hooks.get(s.view.kind);
423
+ if (viewHooks?.click?.(target, event, s, controller) === true)
424
+ return;
425
+ switch (target.kind) {
426
+ case 'list': {
427
+ const model = listModel(s);
428
+ dispatch({ type: 'list/select', index: target.index, count: model.count, visible: model.visible });
429
+ return;
430
+ }
431
+ case 'tab':
432
+ handleAction({ kind: 'tab', index: target.index }, s, viewHooks);
433
+ return;
434
+ case 'crumb': {
435
+ if (target.index === 0) {
436
+ if (s.session?.repo === null)
437
+ controller.navigate({ kind: 'repos', list: { sel: 0, top: 0 } }, s.view.kind !== 'repos');
438
+ else
439
+ controller.navigate({ kind: 'workspaces', list: { sel: 0, top: 0 } }, s.view.kind !== 'workspaces');
440
+ }
441
+ else if (target.index === 1) {
442
+ const ws = workspace();
443
+ if (ws !== null && s.view.kind !== 'dashboard')
444
+ controller.openWorkspace(ws);
445
+ }
446
+ return;
447
+ }
448
+ case 'pill': {
449
+ if (target.pill === 'running')
450
+ startTyping('/stop');
451
+ else if (target.pill === 'dirty')
452
+ startTyping('/apply');
453
+ else
454
+ void controller.execute('/refresh');
455
+ return;
456
+ }
457
+ case 'completion': {
458
+ const item = s.command.completion?.items[target.index];
459
+ if (item !== undefined)
460
+ void controller.execute(item.insert);
461
+ return;
462
+ }
463
+ default:
464
+ return;
465
+ }
466
+ };
467
+ const refusalTarget = (s) => {
468
+ if (s.view.kind !== 'refusal')
469
+ return '.';
470
+ const r = s.view.refusal;
471
+ if (r.kind === 'not-repo')
472
+ return r.target;
473
+ if (r.kind === 'not-logged-in')
474
+ return r.repo !== null ? `${r.origin}/repos/${r.repo}` : r.origin;
475
+ if (r.kind === 'unreachable')
476
+ return r.url.replace(/\/api\/repos(\/[^/]+)?.*$/, (_m, repo) => (repo !== undefined ? `/repos${repo}` : ''));
477
+ return '.';
478
+ };
479
+ /** Commands that leave the current view (they ask first while edits are pending). */
480
+ const LEAVES = new Set(['task', 'input', 'dataset', 'workspace', 'workspaces', 'repos', 'repo', 'logs', 'runs']);
481
+ const runCommand = async (command, text) => {
482
+ const s = state();
483
+ const ws = workspace();
484
+ const viewHooks = hooks.get(s.view.kind);
485
+ const dirty = dirtyCount(s);
486
+ if (dirty > 0 && LEAVES.has(command.name) && command.name !== 'repo') {
487
+ dispatch({ type: 'command/confirm', confirm: { question: `discard ${dirty} unsaved edit${dirty === 1 ? '' : 's'} and ${describe(command, { workspace: ws, taskCount: 0, running: false, concurrency: 4, dirty }).text}?`, command: `/discard --then "${text.replace(/"/g, '')}"` } });
488
+ return;
489
+ }
490
+ if (viewHooks?.command !== undefined && await viewHooks.command(command, s, controller))
491
+ return;
492
+ switch (command.name) {
493
+ case 'task': {
494
+ if (ws === null) {
495
+ controller.toast('open a workspace first', 'warn');
496
+ return;
497
+ }
498
+ controller.openTask(ws, command.target);
499
+ return;
500
+ }
501
+ case 'input': {
502
+ if (ws === null) {
503
+ controller.toast('open a workspace first', 'warn');
504
+ return;
505
+ }
506
+ controller.openInput(ws, command.target);
507
+ return;
508
+ }
509
+ case 'dataset': {
510
+ if (ws === null) {
511
+ controller.toast('open a workspace first', 'warn');
512
+ return;
513
+ }
514
+ const path = `.${command.target.replace(/^\./, '')}`;
515
+ const input = /^\.inputs\.([^.]+)$/.exec(path);
516
+ const task = /^\.tasks\.([^.]+)\.output$/.exec(path);
517
+ if (input !== null)
518
+ controller.openInput(ws, input[1]);
519
+ else if (task !== null)
520
+ controller.openTask(ws, task[1]);
521
+ else
522
+ controller.toast(`${path} is not an input or a task output`, 'warn');
523
+ return;
524
+ }
525
+ case 'workspace': {
526
+ const known = s.data.workspaces;
527
+ if (known !== null && !known.some(w => w.name === command.target)) {
528
+ controller.toast(`no workspace ${command.target}`, 'warn');
529
+ return;
530
+ }
531
+ controller.openWorkspace(command.target);
532
+ return;
533
+ }
534
+ case 'workspaces':
535
+ controller.navigate({ kind: 'workspaces', list: { sel: 0, top: 0 } }, s.view.kind !== 'workspaces');
536
+ return;
537
+ case 'repos': {
538
+ if (s.session?.origin === null) {
539
+ controller.toast('a local repository has no repository list', 'warn');
540
+ return;
541
+ }
542
+ controller.navigate({ kind: 'repos', list: { sel: 0, top: 0 } }, s.view.kind !== 'repos');
543
+ return;
544
+ }
545
+ case 'repo': {
546
+ const dirty = dirtyCount(s);
547
+ if (dirty > 0) {
548
+ dispatch({ type: 'command/confirm', confirm: { question: `discard ${dirty} unsaved edit${dirty === 1 ? '' : 's'} and open ${command.target}?`, command: `/discard --then "/repo ${command.target}"` } });
549
+ return;
550
+ }
551
+ await deps.openTarget(command.target);
552
+ return;
553
+ }
554
+ case 'login':
555
+ await deps.login(command.url);
556
+ return;
557
+ case 'run': {
558
+ const here = viewWorkspace(s);
559
+ if (here === null) {
560
+ controller.toast('open a workspace first', 'warn');
561
+ return;
562
+ }
563
+ await startRun(controller, here, { force: command.force, filter: command.filter, concurrency: command.concurrency });
564
+ return;
565
+ }
566
+ case 'stop': {
567
+ const here = viewWorkspace(s);
568
+ if (here === null) {
569
+ controller.toast('open a workspace first', 'warn');
570
+ return;
571
+ }
572
+ await cancelRun(controller, here);
573
+ return;
574
+ }
575
+ case 'logs': {
576
+ if (ws === null) {
577
+ controller.toast('open a workspace first', 'warn');
578
+ return;
579
+ }
580
+ controller.openTask(ws, command.task, command.stream ?? 'stdout');
581
+ return;
582
+ }
583
+ case 'runs': {
584
+ if (ws === null) {
585
+ controller.toast('open a workspace first', 'warn');
586
+ return;
587
+ }
588
+ controller.openTask(ws, command.task, 'runs');
589
+ return;
590
+ }
591
+ case 'refresh':
592
+ deps.feeds.refresh();
593
+ controller.toast('polling every feed now', 'info');
594
+ return;
595
+ case 'help':
596
+ controller.navigate({ kind: 'help', tab: helpTabFor(s.view.kind) }, true);
597
+ return;
598
+ case 'about':
599
+ controller.navigate({ kind: 'about' }, true);
600
+ return;
601
+ case 'quit':
602
+ controller.quit(command.force);
603
+ return;
604
+ case 'discard': {
605
+ if (state().edit !== null) {
606
+ dispatch({ type: 'edit/set', edit: null });
607
+ dispatch({ type: 'input/editing', editing: null });
608
+ }
609
+ if (command.then !== undefined)
610
+ await controller.execute(command.then);
611
+ return;
612
+ }
613
+ default:
614
+ controller.toast(`/${command.name} does nothing here`, 'warn');
615
+ return;
616
+ }
617
+ };
618
+ return controller;
619
+ }
620
+ //# sourceMappingURL=controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/tui/controller.ts"],"names":[],"mappings":"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"}