@elaraai/e3-ui-cli 1.0.71 → 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.
- package/README.md +46 -21
- package/dist/app/assets/{engine-BKZbmXkC-hslJZfFw.js → engine-Bm-cIDd_-DwUdGcTZ.js} +1 -1
- package/dist/app/assets/{index-8USNHP31.js → index-mj-YVVN1.js} +92 -92
- package/dist/app/index.html +1 -1
- package/dist/cli.js +36 -5
- package/dist/cli.js.map +1 -1
- package/dist/commands/tui.d.ts +84 -0
- package/dist/commands/tui.d.ts.map +1 -0
- package/dist/commands/tui.js +86 -0
- package/dist/commands/tui.js.map +1 -0
- package/dist/tui/api.d.ts +108 -0
- package/dist/tui/api.d.ts.map +1 -0
- package/dist/tui/api.js +130 -0
- package/dist/tui/api.js.map +1 -0
- package/dist/tui/app.d.ts +23 -0
- package/dist/tui/app.d.ts.map +1 -0
- package/dist/tui/app.js +241 -0
- package/dist/tui/app.js.map +1 -0
- package/dist/tui/controller.d.ts +116 -0
- package/dist/tui/controller.d.ts.map +1 -0
- package/dist/tui/controller.js +620 -0
- package/dist/tui/controller.js.map +1 -0
- package/dist/tui/data/dataflow.d.ts +68 -0
- package/dist/tui/data/dataflow.d.ts.map +1 -0
- package/dist/tui/data/dataflow.js +137 -0
- package/dist/tui/data/dataflow.js.map +1 -0
- package/dist/tui/data/dataset.d.ts +80 -0
- package/dist/tui/data/dataset.d.ts.map +1 -0
- package/dist/tui/data/dataset.js +297 -0
- package/dist/tui/data/dataset.js.map +1 -0
- package/dist/tui/data/edit-buffer.d.ts +74 -0
- package/dist/tui/data/edit-buffer.d.ts.map +1 -0
- package/dist/tui/data/edit-buffer.js +120 -0
- package/dist/tui/data/edit-buffer.js.map +1 -0
- package/dist/tui/data/feeds.d.ts +45 -0
- package/dist/tui/data/feeds.d.ts.map +1 -0
- package/dist/tui/data/feeds.js +318 -0
- package/dist/tui/data/feeds.js.map +1 -0
- package/dist/tui/data/logs.d.ts +68 -0
- package/dist/tui/data/logs.d.ts.map +1 -0
- package/dist/tui/data/logs.js +134 -0
- package/dist/tui/data/logs.js.map +1 -0
- package/dist/tui/input/commands.d.ts +159 -0
- package/dist/tui/input/commands.d.ts.map +1 -0
- package/dist/tui/input/commands.js +259 -0
- package/dist/tui/input/commands.js.map +1 -0
- package/dist/tui/input/completion.d.ts +63 -0
- package/dist/tui/input/completion.d.ts.map +1 -0
- package/dist/tui/input/completion.js +128 -0
- package/dist/tui/input/completion.js.map +1 -0
- package/dist/tui/input/keymap.d.ts +153 -0
- package/dist/tui/input/keymap.d.ts.map +1 -0
- package/dist/tui/input/keymap.js +206 -0
- package/dist/tui/input/keymap.js.map +1 -0
- package/dist/tui/input/mouse.d.ts +52 -0
- package/dist/tui/input/mouse.d.ts.map +1 -0
- package/dist/tui/input/mouse.js +55 -0
- package/dist/tui/input/mouse.js.map +1 -0
- package/dist/tui/lifecycle.d.ts +61 -0
- package/dist/tui/lifecycle.d.ts.map +1 -0
- package/dist/tui/lifecycle.js +99 -0
- package/dist/tui/lifecycle.js.map +1 -0
- package/dist/tui/model/catalogue.d.ts +28 -0
- package/dist/tui/model/catalogue.d.ts.map +1 -0
- package/dist/tui/model/catalogue.js +94 -0
- package/dist/tui/model/catalogue.js.map +1 -0
- package/dist/tui/model/help.d.ts +37 -0
- package/dist/tui/model/help.d.ts.map +1 -0
- package/dist/tui/model/help.js +210 -0
- package/dist/tui/model/help.js.map +1 -0
- package/dist/tui/model/index.d.ts +42 -0
- package/dist/tui/model/index.d.ts.map +1 -0
- package/dist/tui/model/index.js +50 -0
- package/dist/tui/model/index.js.map +1 -0
- package/dist/tui/model/status.d.ts +88 -0
- package/dist/tui/model/status.d.ts.map +1 -0
- package/dist/tui/model/status.js +137 -0
- package/dist/tui/model/status.js.map +1 -0
- package/dist/tui/model/tree.d.ts +112 -0
- package/dist/tui/model/tree.d.ts.map +1 -0
- package/dist/tui/model/tree.js +178 -0
- package/dist/tui/model/tree.js.map +1 -0
- package/dist/tui/model/types.d.ts +21 -0
- package/dist/tui/model/types.d.ts.map +1 -0
- package/dist/tui/model/types.js +46 -0
- package/dist/tui/model/types.js.map +1 -0
- package/dist/tui/render/glyphs.d.ts +122 -0
- package/dist/tui/render/glyphs.d.ts.map +1 -0
- package/dist/tui/render/glyphs.js +122 -0
- package/dist/tui/render/glyphs.js.map +1 -0
- package/dist/tui/render/layout.d.ts +145 -0
- package/dist/tui/render/layout.d.ts.map +1 -0
- package/dist/tui/render/layout.js +209 -0
- package/dist/tui/render/layout.js.map +1 -0
- package/dist/tui/render/text.d.ts +149 -0
- package/dist/tui/render/text.d.ts.map +1 -0
- package/dist/tui/render/text.js +288 -0
- package/dist/tui/render/text.js.map +1 -0
- package/dist/tui/render/theme.d.ts +88 -0
- package/dist/tui/render/theme.d.ts.map +1 -0
- package/dist/tui/render/theme.js +145 -0
- package/dist/tui/render/theme.js.map +1 -0
- package/dist/tui/session.d.ts +78 -0
- package/dist/tui/session.d.ts.map +1 -0
- package/dist/tui/session.js +237 -0
- package/dist/tui/session.js.map +1 -0
- package/dist/tui/state/actions.d.ts +584 -0
- package/dist/tui/state/actions.d.ts.map +1 -0
- package/dist/tui/state/actions.js +62 -0
- package/dist/tui/state/actions.js.map +1 -0
- package/dist/tui/state/persist.d.ts +114 -0
- package/dist/tui/state/persist.d.ts.map +1 -0
- package/dist/tui/state/persist.js +187 -0
- package/dist/tui/state/persist.js.map +1 -0
- package/dist/tui/state/poll.d.ts +99 -0
- package/dist/tui/state/poll.d.ts.map +1 -0
- package/dist/tui/state/poll.js +160 -0
- package/dist/tui/state/poll.js.map +1 -0
- package/dist/tui/state/reducer.d.ts +16 -0
- package/dist/tui/state/reducer.d.ts.map +1 -0
- package/dist/tui/state/reducer.js +363 -0
- package/dist/tui/state/reducer.js.map +1 -0
- package/dist/tui/state/store.d.ts +37 -0
- package/dist/tui/state/store.d.ts.map +1 -0
- package/dist/tui/state/store.js +84 -0
- package/dist/tui/state/store.js.map +1 -0
- package/dist/tui/suspend.d.ts +17 -0
- package/dist/tui/suspend.d.ts.map +1 -0
- package/dist/tui/suspend.js +33 -0
- package/dist/tui/suspend.js.map +1 -0
- package/dist/tui/ui/App.d.ts +41 -0
- package/dist/tui/ui/App.d.ts.map +1 -0
- package/dist/tui/ui/App.js +92 -0
- package/dist/tui/ui/App.js.map +1 -0
- package/dist/tui/ui/frame.d.ts +86 -0
- package/dist/tui/ui/frame.d.ts.map +1 -0
- package/dist/tui/ui/frame.js +42 -0
- package/dist/tui/ui/frame.js.map +1 -0
- package/dist/tui/ui/lines.d.ts +92 -0
- package/dist/tui/ui/lines.d.ts.map +1 -0
- package/dist/tui/ui/lines.js +94 -0
- package/dist/tui/ui/lines.js.map +1 -0
- package/dist/tui/ui/shell/chrome.d.ts +61 -0
- package/dist/tui/ui/shell/chrome.d.ts.map +1 -0
- package/dist/tui/ui/shell/chrome.js +272 -0
- package/dist/tui/ui/shell/chrome.js.map +1 -0
- package/dist/tui/ui/shell/widgets.d.ts +75 -0
- package/dist/tui/ui/shell/widgets.d.ts.map +1 -0
- package/dist/tui/ui/shell/widgets.js +160 -0
- package/dist/tui/ui/shell/widgets.js.map +1 -0
- package/dist/tui/ui/views/about.d.ts +20 -0
- package/dist/tui/ui/views/about.d.ts.map +1 -0
- package/dist/tui/ui/views/about.js +40 -0
- package/dist/tui/ui/views/about.js.map +1 -0
- package/dist/tui/ui/views/all.d.ts +17 -0
- package/dist/tui/ui/views/all.d.ts.map +1 -0
- package/dist/tui/ui/views/all.js +17 -0
- package/dist/tui/ui/views/all.js.map +1 -0
- package/dist/tui/ui/views/dashboard.d.ts +156 -0
- package/dist/tui/ui/views/dashboard.d.ts.map +1 -0
- package/dist/tui/ui/views/dashboard.js +599 -0
- package/dist/tui/ui/views/dashboard.js.map +1 -0
- package/dist/tui/ui/views/help.d.ts +17 -0
- package/dist/tui/ui/views/help.d.ts.map +1 -0
- package/dist/tui/ui/views/help.js +65 -0
- package/dist/tui/ui/views/help.js.map +1 -0
- package/dist/tui/ui/views/index.d.ts +42 -0
- package/dist/tui/ui/views/index.d.ts.map +1 -0
- package/dist/tui/ui/views/index.js +42 -0
- package/dist/tui/ui/views/index.js.map +1 -0
- package/dist/tui/ui/views/input.d.ts +6 -0
- package/dist/tui/ui/views/input.d.ts.map +1 -0
- package/dist/tui/ui/views/input.js +494 -0
- package/dist/tui/ui/views/input.js.map +1 -0
- package/dist/tui/ui/views/launch.d.ts +16 -0
- package/dist/tui/ui/views/launch.d.ts.map +1 -0
- package/dist/tui/ui/views/launch.js +43 -0
- package/dist/tui/ui/views/launch.js.map +1 -0
- package/dist/tui/ui/views/refusal.d.ts +20 -0
- package/dist/tui/ui/views/refusal.d.ts.map +1 -0
- package/dist/tui/ui/views/refusal.js +47 -0
- package/dist/tui/ui/views/refusal.js.map +1 -0
- package/dist/tui/ui/views/repos.d.ts +10 -0
- package/dist/tui/ui/views/repos.d.ts.map +1 -0
- package/dist/tui/ui/views/repos.js +93 -0
- package/dist/tui/ui/views/repos.js.map +1 -0
- package/dist/tui/ui/views/task.d.ts +17 -0
- package/dist/tui/ui/views/task.d.ts.map +1 -0
- package/dist/tui/ui/views/task.js +309 -0
- package/dist/tui/ui/views/task.js.map +1 -0
- package/dist/tui/ui/views/wordmark.d.ts +15 -0
- package/dist/tui/ui/views/wordmark.d.ts.map +1 -0
- package/dist/tui/ui/views/wordmark.js +50 -0
- package/dist/tui/ui/views/wordmark.js.map +1 -0
- package/dist/tui/ui/views/workspaces.d.ts +17 -0
- package/dist/tui/ui/views/workspaces.d.ts.map +1 -0
- package/dist/tui/ui/views/workspaces.js +127 -0
- package/dist/tui/ui/views/workspaces.js.map +1 -0
- package/dist/tui/ui/widgets/leaf-editor.d.ts +58 -0
- package/dist/tui/ui/widgets/leaf-editor.d.ts.map +1 -0
- package/dist/tui/ui/widgets/leaf-editor.js +119 -0
- package/dist/tui/ui/widgets/leaf-editor.js.map +1 -0
- package/dist/tui/ui/widgets/logs.d.ts +99 -0
- package/dist/tui/ui/widgets/logs.d.ts.map +1 -0
- package/dist/tui/ui/widgets/logs.js +291 -0
- package/dist/tui/ui/widgets/logs.js.map +1 -0
- package/dist/tui/ui/widgets/reads.d.ts +62 -0
- package/dist/tui/ui/widgets/reads.d.ts.map +1 -0
- package/dist/tui/ui/widgets/reads.js +122 -0
- package/dist/tui/ui/widgets/reads.js.map +1 -0
- package/dist/tui/ui/widgets/runs.d.ts +51 -0
- package/dist/tui/ui/widgets/runs.d.ts.map +1 -0
- package/dist/tui/ui/widgets/runs.js +86 -0
- package/dist/tui/ui/widgets/runs.js.map +1 -0
- package/dist/tui/ui/widgets/tree.d.ts +149 -0
- package/dist/tui/ui/widgets/tree.d.ts.map +1 -0
- package/dist/tui/ui/widgets/tree.js +584 -0
- package/dist/tui/ui/widgets/tree.js.map +1 -0
- package/package.json +22 -12
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../../src/tui/data/logs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;GAQG;AAEH,OAAO,EAA4B,KAAK,GAAG,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C,iCAAiC;AACjC,eAAO,MAAM,SAAS,QAAY,CAAC;AACnC,qCAAqC;AACrC,eAAO,MAAM,OAAO,QAAmB,CAAC;AAIxC,qBAAqB;AACrB,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE5C,8BAA8B;AAC9B,wBAAgB,SAAS,IAAI,QAAQ,CAEpC;AAED,6BAA6B;AAC7B,MAAM,WAAW,cAAc;IAC3B,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,MAAM,GAAG,GAAG,IAAI,CAAC;IACtB,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CAC9C;AAED,uBAAuB;AACvB,MAAM,WAAW,UAAU;IACvB,mFAAmF;IACnF,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,uCAAuC;IACvC,KAAK,IAAI,IAAI,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,GAAG,UAAU,CAiDjE;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAK/C;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK/C;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAM9E"}
|
|
@@ -0,0 +1,134 @@
|
|
|
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
|
+
* Task logs — `taskLogs` in 64 KB chunks (`offset += size`) up to a 10 MB
|
|
7
|
+
* cap, polled every second for the stream on screen (and every five for
|
|
8
|
+
* stderr on every task tab, for the Stderr tab's line count). A stream that has
|
|
9
|
+
* no run yet reads as empty with `execution_not_found` noted; a chunk
|
|
10
|
+
* failure keeps what was fetched and notes the error.
|
|
11
|
+
*
|
|
12
|
+
* @packageDocumentation
|
|
13
|
+
*/
|
|
14
|
+
import { describeError, isApiCode } from '../api.js';
|
|
15
|
+
/** Bytes fetched per request. */
|
|
16
|
+
export const LOG_CHUNK = 64 * 1024;
|
|
17
|
+
/** Bytes kept per stream at most. */
|
|
18
|
+
export const LOG_CAP = 10 * 1024 * 1024;
|
|
19
|
+
/** Chunks fetched per tick at most (a 5 MB backlog arrives over a few ticks, never in one). */
|
|
20
|
+
const CHUNKS_PER_TICK = 16;
|
|
21
|
+
/** An empty stream record. */
|
|
22
|
+
export function emptyLogs() {
|
|
23
|
+
return { text: '', offset: 0, totalSize: 0, complete: false, capped: false, error: null };
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Creates the loader.
|
|
27
|
+
*
|
|
28
|
+
* @param deps - The store, the API accessor, the log
|
|
29
|
+
* @returns The loader
|
|
30
|
+
*/
|
|
31
|
+
export function createLogsLoader(deps) {
|
|
32
|
+
const { store } = deps;
|
|
33
|
+
const inflight = new Set();
|
|
34
|
+
const current = (ws, task, stream) => store.getState().data.logs[ws]?.[task]?.[stream] ?? emptyLogs();
|
|
35
|
+
return {
|
|
36
|
+
async tick(ws, task, stream) {
|
|
37
|
+
const api = deps.api();
|
|
38
|
+
if (api === null)
|
|
39
|
+
return;
|
|
40
|
+
const key = `${ws}\n${task}\n${stream}`;
|
|
41
|
+
if (inflight.has(key))
|
|
42
|
+
return;
|
|
43
|
+
inflight.add(key);
|
|
44
|
+
try {
|
|
45
|
+
for (let i = 0; i < CHUNKS_PER_TICK; i++) {
|
|
46
|
+
const before = current(ws, task, stream);
|
|
47
|
+
if (before.capped)
|
|
48
|
+
return;
|
|
49
|
+
let chunk;
|
|
50
|
+
try {
|
|
51
|
+
chunk = await api.taskLogs(ws, task, { stream, offset: before.offset, limit: LOG_CHUNK });
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
if (isApiCode(err, 'execution_not_found')) {
|
|
55
|
+
if (before.error !== 'no run yet' || before.totalSize !== 0)
|
|
56
|
+
store.dispatch({ type: 'data/logs', ws, task, stream, logs: { ...before, complete: true, error: 'no run yet' } });
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
deps.log?.(`logs ${ws}/${task}/${stream} failed: ${describeError(err)}`);
|
|
60
|
+
store.dispatch({ type: 'data/logs', ws, task, stream, logs: { ...before, error: describeError(err) } });
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const size = Number(chunk.size);
|
|
64
|
+
const totalSize = Number(chunk.totalSize);
|
|
65
|
+
const offset = Number(chunk.offset) + size;
|
|
66
|
+
// A shorter total than what we hold means the log was truncated (a new run): start over from zero.
|
|
67
|
+
if (totalSize < before.offset) {
|
|
68
|
+
store.dispatch({ type: 'data/logs', ws, task, stream, logs: { ...emptyLogs(), totalSize } });
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
const capped = offset >= LOG_CAP;
|
|
72
|
+
const next = { text: before.text + chunk.data, offset, totalSize, complete: chunk.complete, capped, error: null };
|
|
73
|
+
const unchanged = size === 0 && before.totalSize === totalSize && before.complete === chunk.complete && before.error === null;
|
|
74
|
+
if (!unchanged)
|
|
75
|
+
store.dispatch({ type: 'data/logs', ws, task, stream, logs: next });
|
|
76
|
+
if (chunk.complete || size === 0 || capped)
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
finally {
|
|
81
|
+
inflight.delete(key);
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
reset() {
|
|
85
|
+
inflight.clear();
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* The lines of a stream's text (a trailing newline does not add an empty line).
|
|
91
|
+
*
|
|
92
|
+
* @param text - The text
|
|
93
|
+
* @returns The lines
|
|
94
|
+
*/
|
|
95
|
+
export function logLines(text) {
|
|
96
|
+
if (text === '')
|
|
97
|
+
return [];
|
|
98
|
+
const lines = text.split('\n');
|
|
99
|
+
if (lines[lines.length - 1] === '')
|
|
100
|
+
lines.pop();
|
|
101
|
+
return lines;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* The number of lines in a stream's text, as {@link logLines} counts them,
|
|
105
|
+
* without splitting it (the Stderr tab's badge, every frame).
|
|
106
|
+
*
|
|
107
|
+
* @param text - The text
|
|
108
|
+
* @returns The line count
|
|
109
|
+
*/
|
|
110
|
+
export function countLines(text) {
|
|
111
|
+
if (text === '')
|
|
112
|
+
return 0;
|
|
113
|
+
let n = 0;
|
|
114
|
+
for (let i = text.indexOf('\n'); i !== -1; i = text.indexOf('\n', i + 1))
|
|
115
|
+
n++;
|
|
116
|
+
return text.endsWith('\n') ? n : n + 1;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* The line indices containing `needle` (case-insensitive).
|
|
120
|
+
*
|
|
121
|
+
* @param lines - The lines
|
|
122
|
+
* @param needle - The search text
|
|
123
|
+
* @returns The matching line indices
|
|
124
|
+
*/
|
|
125
|
+
export function findInLines(lines, needle) {
|
|
126
|
+
const q = needle.toLowerCase();
|
|
127
|
+
if (q === '')
|
|
128
|
+
return [];
|
|
129
|
+
const out = [];
|
|
130
|
+
lines.forEach((line, i) => { if (line.toLowerCase().includes(q))
|
|
131
|
+
out.push(i); });
|
|
132
|
+
return out;
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/tui/data/logs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,159 @@
|
|
|
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 command grammar — `parseCommand(text)` for everything the command
|
|
7
|
+
* box accepts, `describe(cmd, ctx)` for the consequence line the box shows
|
|
8
|
+
* before Enter, and `hotkeyToCommand` for the keys that prefill a command.
|
|
9
|
+
*
|
|
10
|
+
* @packageDocumentation
|
|
11
|
+
*/
|
|
12
|
+
/** A parsed command. */
|
|
13
|
+
export type ParsedCommand = {
|
|
14
|
+
name: 'task';
|
|
15
|
+
target: string;
|
|
16
|
+
} | {
|
|
17
|
+
name: 'input';
|
|
18
|
+
target: string;
|
|
19
|
+
} | {
|
|
20
|
+
name: 'dataset';
|
|
21
|
+
target: string;
|
|
22
|
+
} | {
|
|
23
|
+
name: 'workspace';
|
|
24
|
+
target: string;
|
|
25
|
+
} | {
|
|
26
|
+
name: 'workspaces';
|
|
27
|
+
} | {
|
|
28
|
+
name: 'repos';
|
|
29
|
+
} | {
|
|
30
|
+
name: 'repo';
|
|
31
|
+
target: string;
|
|
32
|
+
} | {
|
|
33
|
+
name: 'login';
|
|
34
|
+
url: string;
|
|
35
|
+
} | {
|
|
36
|
+
name: 'run';
|
|
37
|
+
force: boolean;
|
|
38
|
+
filter: string | undefined;
|
|
39
|
+
concurrency: number | undefined;
|
|
40
|
+
} | {
|
|
41
|
+
name: 'stop';
|
|
42
|
+
} | {
|
|
43
|
+
name: 'logs';
|
|
44
|
+
task: string;
|
|
45
|
+
stream: 'stdout' | 'stderr' | undefined;
|
|
46
|
+
} | {
|
|
47
|
+
name: 'runs';
|
|
48
|
+
task: string;
|
|
49
|
+
} | {
|
|
50
|
+
name: 'find';
|
|
51
|
+
query: string;
|
|
52
|
+
} | {
|
|
53
|
+
name: 'goto';
|
|
54
|
+
target: {
|
|
55
|
+
kind: 'row';
|
|
56
|
+
row: number;
|
|
57
|
+
} | {
|
|
58
|
+
kind: 'percent';
|
|
59
|
+
percent: number;
|
|
60
|
+
};
|
|
61
|
+
} | {
|
|
62
|
+
name: 'save';
|
|
63
|
+
file: string | undefined;
|
|
64
|
+
force: boolean;
|
|
65
|
+
} | {
|
|
66
|
+
name: 'refresh';
|
|
67
|
+
} | {
|
|
68
|
+
name: 'help';
|
|
69
|
+
} | {
|
|
70
|
+
name: 'about';
|
|
71
|
+
} | {
|
|
72
|
+
name: 'quit';
|
|
73
|
+
force: boolean;
|
|
74
|
+
} | {
|
|
75
|
+
name: 'tag';
|
|
76
|
+
tag: string;
|
|
77
|
+
} | {
|
|
78
|
+
name: 'add';
|
|
79
|
+
key: string | undefined;
|
|
80
|
+
} | {
|
|
81
|
+
name: 'remove';
|
|
82
|
+
force: boolean;
|
|
83
|
+
} | {
|
|
84
|
+
name: 'apply';
|
|
85
|
+
} | {
|
|
86
|
+
name: 'discard';
|
|
87
|
+
then: string | undefined;
|
|
88
|
+
} | {
|
|
89
|
+
name: 'reload';
|
|
90
|
+
};
|
|
91
|
+
export type CommandName = ParsedCommand['name'];
|
|
92
|
+
/** A parse failure. */
|
|
93
|
+
export interface ParseError {
|
|
94
|
+
error: string;
|
|
95
|
+
}
|
|
96
|
+
/** The result of {@link parseCommand}. */
|
|
97
|
+
export type ParseResult = {
|
|
98
|
+
ok: true;
|
|
99
|
+
command: ParsedCommand;
|
|
100
|
+
} | {
|
|
101
|
+
ok: false;
|
|
102
|
+
error: string;
|
|
103
|
+
};
|
|
104
|
+
/** Every command name, with its argument summary and one-line effect (the help view and completion). */
|
|
105
|
+
export declare const COMMANDS: readonly {
|
|
106
|
+
name: CommandName;
|
|
107
|
+
usage: string;
|
|
108
|
+
effect: string;
|
|
109
|
+
}[];
|
|
110
|
+
/** Splits a command line into words, honouring double quotes. */
|
|
111
|
+
export declare function splitWords(text: string): string[];
|
|
112
|
+
/** Whether a word is one of the command names. */
|
|
113
|
+
export declare function isCommandName(word: string): word is CommandName;
|
|
114
|
+
/**
|
|
115
|
+
* Parses a command line (with or without the leading `/`).
|
|
116
|
+
*
|
|
117
|
+
* @param text - The text in the command box
|
|
118
|
+
* @returns The parsed command, or the error to show
|
|
119
|
+
*/
|
|
120
|
+
export declare function parseCommand(text: string): ParseResult;
|
|
121
|
+
/** What {@link describe} needs to spell a consequence. */
|
|
122
|
+
export interface DescribeContext {
|
|
123
|
+
/** The open workspace. */
|
|
124
|
+
workspace: string | null;
|
|
125
|
+
/** Tasks in the workspace. */
|
|
126
|
+
taskCount: number;
|
|
127
|
+
/** Whether a run is in progress. */
|
|
128
|
+
running: boolean;
|
|
129
|
+
/** The default concurrency. */
|
|
130
|
+
concurrency: number;
|
|
131
|
+
/** Pending edits. */
|
|
132
|
+
dirty: number;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* The consequence line the command box shows for a parsed command
|
|
136
|
+
* (`run 6 tasks in main, ignoring the cache · concurrency 4`).
|
|
137
|
+
*
|
|
138
|
+
* @param command - The parsed command
|
|
139
|
+
* @param ctx - The context
|
|
140
|
+
* @returns The line, and the key hint (`⏎ run · esc`)
|
|
141
|
+
*/
|
|
142
|
+
export declare function describe(command: ParsedCommand, ctx: DescribeContext): {
|
|
143
|
+
text: string;
|
|
144
|
+
keys: string;
|
|
145
|
+
};
|
|
146
|
+
/**
|
|
147
|
+
* The command a single-key hotkey prefills (`r` → `/run `, `x` → `/stop`,
|
|
148
|
+
* `w` → `/workspaces`, `s` → `/save`, `t` → `/tag `).
|
|
149
|
+
*
|
|
150
|
+
* @param key - The key
|
|
151
|
+
* @returns The command text, or undefined
|
|
152
|
+
*/
|
|
153
|
+
export declare function hotkeyToCommand(key: string): string | undefined;
|
|
154
|
+
/** The flags `/run` accepts and their one-line hints, for the hint bar. */
|
|
155
|
+
export declare const RUN_FLAGS: readonly {
|
|
156
|
+
flag: string;
|
|
157
|
+
hint: string;
|
|
158
|
+
}[];
|
|
159
|
+
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../src/tui/input/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,259 @@
|
|
|
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
|
+
/** Every command name, with its argument summary and one-line effect (the help view and completion). */
|
|
6
|
+
export const COMMANDS = [
|
|
7
|
+
{ name: 'task', usage: '/task <name>', effect: 'open a task' },
|
|
8
|
+
{ name: 'input', usage: '/input <name>', effect: 'open an input' },
|
|
9
|
+
{ name: 'dataset', usage: '/dataset <path>', effect: 'open a dataset by path' },
|
|
10
|
+
{ name: 'workspace', usage: '/workspace <name>', effect: 'switch workspace' },
|
|
11
|
+
{ name: 'workspaces', usage: '/workspaces', effect: 'list the workspaces' },
|
|
12
|
+
{ name: 'repos', usage: '/repos', effect: 'list the repositories' },
|
|
13
|
+
{ name: 'repo', usage: '/repo <path|url>', effect: 'open another repo' },
|
|
14
|
+
{ name: 'login', usage: '/login <url>', effect: 'device-flow login' },
|
|
15
|
+
{ name: 'run', usage: '/run [--force] [--filter g]', effect: 'run the dataflow' },
|
|
16
|
+
{ name: 'stop', usage: '/stop', effect: 'cancel the dataflow' },
|
|
17
|
+
{ name: 'logs', usage: '/logs <task> [stderr]', effect: 'open a task\'s stdout / stderr' },
|
|
18
|
+
{ name: 'runs', usage: '/runs <task>', effect: 'open a task\'s runs' },
|
|
19
|
+
{ name: 'find', usage: '/find <key|prefix|f1|f2>', effect: 'jump to key' },
|
|
20
|
+
{ name: 'goto', usage: '/goto <row|N%>', effect: 'jump to row' },
|
|
21
|
+
{ name: 'save', usage: '/save [file]', effect: 'write .beast2 / .log' },
|
|
22
|
+
{ name: 'tag', usage: '/tag <name>', effect: 'switch a variant tag' },
|
|
23
|
+
{ name: 'add', usage: '/add [key]', effect: 'add an item / entry' },
|
|
24
|
+
{ name: 'remove', usage: '/remove', effect: 'remove the item' },
|
|
25
|
+
{ name: 'apply', usage: '/apply', effect: 'apply pending edits' },
|
|
26
|
+
{ name: 'discard', usage: '/discard', effect: 'discard pending edits' },
|
|
27
|
+
{ name: 'refresh', usage: '/refresh', effect: 'poll everything now' },
|
|
28
|
+
{ name: 'help', usage: '/help', effect: 'this help' },
|
|
29
|
+
{ name: 'about', usage: '/about', effect: 'version · server · logo' },
|
|
30
|
+
{ name: 'quit', usage: '/quit', effect: 'exit' },
|
|
31
|
+
];
|
|
32
|
+
/** Splits a command line into words, honouring double quotes. */
|
|
33
|
+
export function splitWords(text) {
|
|
34
|
+
const words = [];
|
|
35
|
+
let current = '';
|
|
36
|
+
let quoted = false;
|
|
37
|
+
let had = false;
|
|
38
|
+
for (let i = 0; i < text.length; i++) {
|
|
39
|
+
const ch = text[i];
|
|
40
|
+
if (ch === '"') {
|
|
41
|
+
quoted = !quoted;
|
|
42
|
+
had = true;
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
if (!quoted && /\s/.test(ch)) {
|
|
46
|
+
if (current !== '' || had)
|
|
47
|
+
words.push(current);
|
|
48
|
+
current = '';
|
|
49
|
+
had = false;
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
current += ch;
|
|
53
|
+
}
|
|
54
|
+
if (current !== '' || had)
|
|
55
|
+
words.push(current);
|
|
56
|
+
return words;
|
|
57
|
+
}
|
|
58
|
+
/** Whether a word is one of the command names. */
|
|
59
|
+
export function isCommandName(word) {
|
|
60
|
+
return COMMANDS.some(c => c.name === word);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Parses a command line (with or without the leading `/`).
|
|
64
|
+
*
|
|
65
|
+
* @param text - The text in the command box
|
|
66
|
+
* @returns The parsed command, or the error to show
|
|
67
|
+
*/
|
|
68
|
+
export function parseCommand(text) {
|
|
69
|
+
const trimmed = text.trim();
|
|
70
|
+
const body = trimmed.startsWith('/') ? trimmed.slice(1) : trimmed;
|
|
71
|
+
const words = splitWords(body);
|
|
72
|
+
const name = words[0] ?? '';
|
|
73
|
+
const args = words.slice(1);
|
|
74
|
+
const fail = (error) => ({ ok: false, error });
|
|
75
|
+
const need = (what) => fail(`${what} required — ${COMMANDS.find(c => c.name === name)?.usage ?? `/${name}`}`);
|
|
76
|
+
switch (name) {
|
|
77
|
+
case '':
|
|
78
|
+
return fail('type a command after /');
|
|
79
|
+
case 'task':
|
|
80
|
+
case 'input':
|
|
81
|
+
case 'dataset':
|
|
82
|
+
case 'workspace':
|
|
83
|
+
case 'repo': {
|
|
84
|
+
const target = args[0];
|
|
85
|
+
if (target === undefined)
|
|
86
|
+
return need(name === 'dataset' ? 'a path' : name === 'repo' ? 'a path or url' : 'a name');
|
|
87
|
+
return { ok: true, command: { name, target } };
|
|
88
|
+
}
|
|
89
|
+
case 'workspaces':
|
|
90
|
+
case 'repos':
|
|
91
|
+
case 'stop':
|
|
92
|
+
case 'refresh':
|
|
93
|
+
case 'help':
|
|
94
|
+
case 'about':
|
|
95
|
+
case 'apply':
|
|
96
|
+
case 'reload':
|
|
97
|
+
return { ok: true, command: { name } };
|
|
98
|
+
case 'discard':
|
|
99
|
+
return { ok: true, command: { name, then: args[0] === '--then' ? args.slice(1).join(' ') : undefined } };
|
|
100
|
+
case 'quit':
|
|
101
|
+
return { ok: true, command: { name, force: args.includes('--force') } };
|
|
102
|
+
case 'login': {
|
|
103
|
+
const url = args[0];
|
|
104
|
+
if (url === undefined)
|
|
105
|
+
return need('a server url');
|
|
106
|
+
if (!/^https?:\/\//.test(url))
|
|
107
|
+
return fail(`/login needs an http(s) url, got ${url}`);
|
|
108
|
+
return { ok: true, command: { name, url } };
|
|
109
|
+
}
|
|
110
|
+
case 'run': {
|
|
111
|
+
let force = false;
|
|
112
|
+
let filter;
|
|
113
|
+
let concurrency;
|
|
114
|
+
for (let i = 0; i < args.length; i++) {
|
|
115
|
+
const a = args[i];
|
|
116
|
+
if (a === '--force')
|
|
117
|
+
force = true;
|
|
118
|
+
else if (a === '--filter') {
|
|
119
|
+
filter = args[++i];
|
|
120
|
+
if (filter === undefined)
|
|
121
|
+
return fail('--filter needs a glob');
|
|
122
|
+
}
|
|
123
|
+
else if (a.startsWith('--filter='))
|
|
124
|
+
filter = a.slice('--filter='.length);
|
|
125
|
+
else if (a === '--concurrency' || a.startsWith('--concurrency=')) {
|
|
126
|
+
const raw = a === '--concurrency' ? args[++i] : a.slice('--concurrency='.length);
|
|
127
|
+
const n = Number(raw);
|
|
128
|
+
if (raw === undefined || !Number.isInteger(n) || n < 1)
|
|
129
|
+
return fail(`--concurrency must be a positive integer, got ${raw ?? '(nothing)'}`);
|
|
130
|
+
concurrency = n;
|
|
131
|
+
}
|
|
132
|
+
else
|
|
133
|
+
return fail(`unknown /run flag ${a} — /run [--force] [--filter <glob>] [--concurrency <n>]`);
|
|
134
|
+
}
|
|
135
|
+
return { ok: true, command: { name, force, filter, concurrency } };
|
|
136
|
+
}
|
|
137
|
+
case 'logs': {
|
|
138
|
+
const task = args[0];
|
|
139
|
+
if (task === undefined)
|
|
140
|
+
return need('a task');
|
|
141
|
+
const stream = args[1];
|
|
142
|
+
if (stream !== undefined && stream !== 'stdout' && stream !== 'stderr')
|
|
143
|
+
return fail(`stream must be stdout or stderr, got ${stream}`);
|
|
144
|
+
return { ok: true, command: { name, task, stream } };
|
|
145
|
+
}
|
|
146
|
+
case 'runs': {
|
|
147
|
+
const task = args[0];
|
|
148
|
+
if (task === undefined)
|
|
149
|
+
return need('a task');
|
|
150
|
+
return { ok: true, command: { name, task } };
|
|
151
|
+
}
|
|
152
|
+
case 'find': {
|
|
153
|
+
const query = body.slice(body.indexOf('find') + 4).trim();
|
|
154
|
+
if (query === '')
|
|
155
|
+
return need('a key, prefix or f1|f2 fields');
|
|
156
|
+
return { ok: true, command: { name, query } };
|
|
157
|
+
}
|
|
158
|
+
case 'goto': {
|
|
159
|
+
const target = args[0];
|
|
160
|
+
if (target === undefined)
|
|
161
|
+
return need('a row or N%');
|
|
162
|
+
if (target.endsWith('%')) {
|
|
163
|
+
const percent = Number(target.slice(0, -1));
|
|
164
|
+
if (!Number.isFinite(percent) || percent < 0 || percent > 100)
|
|
165
|
+
return fail(`/goto percent must be 0–100, got ${target}`);
|
|
166
|
+
return { ok: true, command: { name, target: { kind: 'percent', percent } } };
|
|
167
|
+
}
|
|
168
|
+
const row = Number(target.replace(/[,_]/g, ''));
|
|
169
|
+
if (!Number.isInteger(row) || row < 1)
|
|
170
|
+
return fail(`/goto needs a row number (1-based) or N%, got ${target}`);
|
|
171
|
+
return { ok: true, command: { name, target: { kind: 'row', row } } };
|
|
172
|
+
}
|
|
173
|
+
case 'save': {
|
|
174
|
+
const force = args.includes('--force');
|
|
175
|
+
const file = args.find(a => a !== '--force');
|
|
176
|
+
return { ok: true, command: { name, file, force } };
|
|
177
|
+
}
|
|
178
|
+
case 'tag': {
|
|
179
|
+
const tag = args[0];
|
|
180
|
+
if (tag === undefined)
|
|
181
|
+
return need('a tag');
|
|
182
|
+
return { ok: true, command: { name, tag } };
|
|
183
|
+
}
|
|
184
|
+
case 'add':
|
|
185
|
+
return { ok: true, command: { name, key: args[0] } };
|
|
186
|
+
case 'remove':
|
|
187
|
+
return { ok: true, command: { name, force: args.includes('--force') } };
|
|
188
|
+
default:
|
|
189
|
+
return fail(`unknown command /${name} — ? for help`);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* The consequence line the command box shows for a parsed command
|
|
194
|
+
* (`run 6 tasks in main, ignoring the cache · concurrency 4`).
|
|
195
|
+
*
|
|
196
|
+
* @param command - The parsed command
|
|
197
|
+
* @param ctx - The context
|
|
198
|
+
* @returns The line, and the key hint (`⏎ run · esc`)
|
|
199
|
+
*/
|
|
200
|
+
export function describe(command, ctx) {
|
|
201
|
+
const ws = ctx.workspace ?? '?';
|
|
202
|
+
switch (command.name) {
|
|
203
|
+
case 'run': {
|
|
204
|
+
const scope = command.filter !== undefined ? `tasks matching ${command.filter}` : `${ctx.taskCount} task${ctx.taskCount === 1 ? '' : 's'}`;
|
|
205
|
+
const cache = command.force ? ', ignoring the cache' : '';
|
|
206
|
+
const conc = command.concurrency ?? ctx.concurrency;
|
|
207
|
+
return { text: ctx.running ? 'a run is already in progress' : `run ${scope} in ${ws}${cache} · concurrency ${conc}`, keys: ctx.running ? 'esc' : '⏎ run · esc' };
|
|
208
|
+
}
|
|
209
|
+
case 'stop':
|
|
210
|
+
return { text: ctx.running ? `cancel the run in ${ws}` : 'no run in progress', keys: ctx.running ? '⏎ stop · esc' : 'esc' };
|
|
211
|
+
case 'task': return { text: `open task ${command.target}`, keys: '⏎ open · esc' };
|
|
212
|
+
case 'input': return { text: `open input ${command.target}`, keys: '⏎ open · esc' };
|
|
213
|
+
case 'dataset': return { text: `open dataset ${command.target}`, keys: '⏎ open · esc' };
|
|
214
|
+
case 'workspace': return { text: `switch to workspace ${command.target}`, keys: '⏎ switch · esc' };
|
|
215
|
+
case 'workspaces': return { text: 'list the workspaces', keys: '⏎ · esc' };
|
|
216
|
+
case 'repos': return { text: 'list the repositories', keys: '⏎ · esc' };
|
|
217
|
+
case 'repo': return { text: `open ${command.target}${ctx.dirty > 0 ? ` · ${ctx.dirty} unsaved edits are discarded` : ''}`, keys: '⏎ open · esc' };
|
|
218
|
+
case 'login': return { text: 'run the device-flow login', keys: '⏎ login · esc' };
|
|
219
|
+
case 'logs': return { text: `open ${command.task} ${command.stream ?? 'stdout'}`, keys: '⏎ open · esc' };
|
|
220
|
+
case 'runs': return { text: `open ${command.task} runs`, keys: '⏎ open · esc' };
|
|
221
|
+
case 'find': return { text: `find ${command.query}`, keys: '⏎ jump · esc' };
|
|
222
|
+
case 'goto': return { text: command.target.kind === 'row' ? `go to row ${command.target.row.toLocaleString()}` : `go to ${command.target.percent}%`, keys: '⏎ jump · esc' };
|
|
223
|
+
case 'save': return { text: `save${command.file !== undefined ? ` to ${command.file}` : ''}${command.force ? ' (overwrite)' : ''}`, keys: '⏎ save · esc' };
|
|
224
|
+
case 'refresh': return { text: 'poll every feed now', keys: '⏎ · esc' };
|
|
225
|
+
case 'help': return { text: 'open help', keys: '⏎ · esc' };
|
|
226
|
+
case 'about': return { text: 'about e3-ui', keys: '⏎ · esc' };
|
|
227
|
+
case 'quit': return { text: ctx.dirty > 0 && !command.force ? `quit with ${ctx.dirty} unsaved edit${ctx.dirty === 1 ? '' : 's'}` : 'quit', keys: '⏎ quit · esc' };
|
|
228
|
+
case 'tag': return { text: `switch to ${command.tag}`, keys: '⏎ · esc' };
|
|
229
|
+
case 'add': return { text: command.key !== undefined ? `add entry ${command.key}` : 'add an item', keys: '⏎ add · esc' };
|
|
230
|
+
case 'remove': return { text: 'remove the selected item', keys: '⏎ remove · esc' };
|
|
231
|
+
case 'apply': return { text: `apply ${ctx.dirty} pending edit${ctx.dirty === 1 ? '' : 's'}`, keys: '⏎ apply · esc' };
|
|
232
|
+
case 'discard': return { text: `discard ${ctx.dirty} pending edit${ctx.dirty === 1 ? '' : 's'}${command.then !== undefined ? ` then ${command.then}` : ''}`, keys: '⏎ discard · esc' };
|
|
233
|
+
case 'reload': return { text: 'reload the value and re-apply your edits', keys: '⏎ reload · esc' };
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* The command a single-key hotkey prefills (`r` → `/run `, `x` → `/stop`,
|
|
238
|
+
* `w` → `/workspaces`, `s` → `/save`, `t` → `/tag `).
|
|
239
|
+
*
|
|
240
|
+
* @param key - The key
|
|
241
|
+
* @returns The command text, or undefined
|
|
242
|
+
*/
|
|
243
|
+
export function hotkeyToCommand(key) {
|
|
244
|
+
switch (key) {
|
|
245
|
+
case 'r': return '/run ';
|
|
246
|
+
case 'x': return '/stop';
|
|
247
|
+
case 'w': return '/workspaces';
|
|
248
|
+
case 's': return '/save';
|
|
249
|
+
case 't': return '/tag ';
|
|
250
|
+
default: return undefined;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
/** The flags `/run` accepts and their one-line hints, for the hint bar. */
|
|
254
|
+
export const RUN_FLAGS = [
|
|
255
|
+
{ flag: '--force', hint: 're-run everything' },
|
|
256
|
+
{ flag: '--filter <glob>', hint: 'only matching tasks' },
|
|
257
|
+
{ flag: '--concurrency <n>', hint: '' },
|
|
258
|
+
];
|
|
259
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../src/tui/input/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
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
|
+
* Completion — `complete(text, catalogue)` turns what is typed in the
|
|
7
|
+
* command box into at most eight fuzzy-ranked candidates, each carrying its
|
|
8
|
+
* status, type and size so the list doubles as a status line. A leading `/`
|
|
9
|
+
* completes command names, then that command's arguments; anything else is
|
|
10
|
+
* a fuzzy jump across every workspace, task, input and dataset of the open
|
|
11
|
+
* repository.
|
|
12
|
+
*
|
|
13
|
+
* @packageDocumentation
|
|
14
|
+
*/
|
|
15
|
+
import type { Candidate } from '../state/actions.js';
|
|
16
|
+
/** Candidates shown at most. */
|
|
17
|
+
export declare const MAX_CANDIDATES = 8;
|
|
18
|
+
/** One thing that can be jumped to or named in a command. */
|
|
19
|
+
export interface CatalogueItem {
|
|
20
|
+
kind: 'task' | 'input' | 'dataset' | 'workspace' | 'repo';
|
|
21
|
+
name: string;
|
|
22
|
+
/** The workspace the item belongs to (tasks, inputs, datasets). */
|
|
23
|
+
workspace: string | null;
|
|
24
|
+
/** The status column (`● up-to-date`). */
|
|
25
|
+
status: string;
|
|
26
|
+
/** The type column (`Dict<String, Struct>`). */
|
|
27
|
+
type: string;
|
|
28
|
+
/** The detail column (`84.2 MB · 38.4s`). */
|
|
29
|
+
detail: string;
|
|
30
|
+
}
|
|
31
|
+
/** What completion draws from. */
|
|
32
|
+
export interface Catalogue {
|
|
33
|
+
items: CatalogueItem[];
|
|
34
|
+
/** Variant tags offered by `/tag` on the selected row, if any. */
|
|
35
|
+
tags?: string[] | undefined;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Fuzzy match score — higher is better, `null` when `pattern` is not a
|
|
39
|
+
* subsequence of `text`. Prefix and word-start matches rank first, then
|
|
40
|
+
* contiguous runs; shorter texts win ties.
|
|
41
|
+
*
|
|
42
|
+
* @param pattern - What was typed (case-insensitive)
|
|
43
|
+
* @param text - The candidate
|
|
44
|
+
* @returns The score, or null
|
|
45
|
+
*/
|
|
46
|
+
export declare function fuzzyScore(pattern: string, text: string): number | null;
|
|
47
|
+
/**
|
|
48
|
+
* Completes the command box.
|
|
49
|
+
*
|
|
50
|
+
* @param text - The text in the box
|
|
51
|
+
* @param catalogue - The workspace catalogue
|
|
52
|
+
* @returns At most {@link MAX_CANDIDATES} candidates, best first (empty when nothing applies)
|
|
53
|
+
*/
|
|
54
|
+
export declare function complete(text: string, catalogue: Catalogue): Candidate[];
|
|
55
|
+
/**
|
|
56
|
+
* The fuzzy jump across everything in the catalogue.
|
|
57
|
+
*
|
|
58
|
+
* @param text - What was typed (no leading `/`)
|
|
59
|
+
* @param catalogue - The workspace catalogue
|
|
60
|
+
* @returns At most {@link MAX_CANDIDATES} candidates
|
|
61
|
+
*/
|
|
62
|
+
export declare function jump(text: string, catalogue: Catalogue): Candidate[];
|
|
63
|
+
//# sourceMappingURL=completion.d.ts.map
|