@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,145 @@
|
|
|
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
|
+
* Detects the colour level of `stream` under `env`.
|
|
7
|
+
*
|
|
8
|
+
* @param env - The environment (`NO_COLOR`, `FORCE_COLOR`, `TERM`, `COLORTERM`)
|
|
9
|
+
* @param stream - The output stream
|
|
10
|
+
* @returns The level — `NO_COLOR` (non-empty) wins, then `FORCE_COLOR`
|
|
11
|
+
* (`0`–`3`, or any other value meaning 16 colours), then the stream's
|
|
12
|
+
* `getColorDepth()` (1 → 0, 4 → 1, 8 → 2, 24 → 3), then `COLORTERM` /
|
|
13
|
+
* `TERM` hints, else monochrome
|
|
14
|
+
*/
|
|
15
|
+
export function detectColorLevel(env, stream) {
|
|
16
|
+
const noColor = env['NO_COLOR'];
|
|
17
|
+
if (noColor !== undefined && noColor !== '')
|
|
18
|
+
return 0;
|
|
19
|
+
const force = env['FORCE_COLOR'];
|
|
20
|
+
if (force !== undefined) {
|
|
21
|
+
if (force === '' || force === 'true')
|
|
22
|
+
return 1;
|
|
23
|
+
if (force === 'false')
|
|
24
|
+
return 0;
|
|
25
|
+
const n = Number(force);
|
|
26
|
+
if (n === 0)
|
|
27
|
+
return 0;
|
|
28
|
+
if (n === 1)
|
|
29
|
+
return 1;
|
|
30
|
+
if (n === 2)
|
|
31
|
+
return 2;
|
|
32
|
+
if (n >= 3)
|
|
33
|
+
return 3;
|
|
34
|
+
return 1;
|
|
35
|
+
}
|
|
36
|
+
if (typeof stream.getColorDepth === 'function') {
|
|
37
|
+
const depth = stream.getColorDepth(env);
|
|
38
|
+
if (depth >= 24)
|
|
39
|
+
return 3;
|
|
40
|
+
if (depth >= 8)
|
|
41
|
+
return 2;
|
|
42
|
+
if (depth >= 4)
|
|
43
|
+
return 1;
|
|
44
|
+
return 0;
|
|
45
|
+
}
|
|
46
|
+
if (env['COLORTERM'] === 'truecolor' || env['COLORTERM'] === '24bit')
|
|
47
|
+
return 3;
|
|
48
|
+
const term = env['TERM'] ?? '';
|
|
49
|
+
if (term.includes('256color'))
|
|
50
|
+
return 2;
|
|
51
|
+
if (term !== '' && term !== 'dumb')
|
|
52
|
+
return 1;
|
|
53
|
+
return 0;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Builds the theme for a colour level.
|
|
57
|
+
*
|
|
58
|
+
* @param level - The colour level
|
|
59
|
+
* @returns The theme — truecolor hex at 3, `ansi256(n)` at 2, the sixteen
|
|
60
|
+
* colour names at 1, and every token `undefined` at 0 (bold / dim /
|
|
61
|
+
* inverse carry the meaning)
|
|
62
|
+
*/
|
|
63
|
+
export function createTheme(level) {
|
|
64
|
+
switch (level) {
|
|
65
|
+
case 3:
|
|
66
|
+
return {
|
|
67
|
+
level,
|
|
68
|
+
ink: undefined,
|
|
69
|
+
ink2: '#9aa5a7',
|
|
70
|
+
ink3: '#7d8a8c',
|
|
71
|
+
ink4: undefined,
|
|
72
|
+
brand: '#488e97',
|
|
73
|
+
brandTint: '#2f5c62',
|
|
74
|
+
pos: '#2f7a5b',
|
|
75
|
+
neg: '#b85a4a',
|
|
76
|
+
warn: '#b8862d',
|
|
77
|
+
info: '#3a7780',
|
|
78
|
+
rule: '#5f6b6d',
|
|
79
|
+
};
|
|
80
|
+
case 2:
|
|
81
|
+
return {
|
|
82
|
+
level,
|
|
83
|
+
ink: undefined,
|
|
84
|
+
ink2: 'ansi256(247)',
|
|
85
|
+
ink3: 'ansi256(244)',
|
|
86
|
+
ink4: undefined,
|
|
87
|
+
brand: 'ansi256(73)',
|
|
88
|
+
brandTint: 'ansi256(23)',
|
|
89
|
+
pos: 'ansi256(29)',
|
|
90
|
+
neg: 'ansi256(131)',
|
|
91
|
+
warn: 'ansi256(136)',
|
|
92
|
+
info: 'ansi256(30)',
|
|
93
|
+
rule: 'ansi256(240)',
|
|
94
|
+
};
|
|
95
|
+
case 1:
|
|
96
|
+
return {
|
|
97
|
+
level,
|
|
98
|
+
ink: undefined,
|
|
99
|
+
ink2: undefined,
|
|
100
|
+
ink3: undefined,
|
|
101
|
+
ink4: undefined,
|
|
102
|
+
brand: 'cyan',
|
|
103
|
+
brandTint: 'cyan',
|
|
104
|
+
pos: 'green',
|
|
105
|
+
neg: 'red',
|
|
106
|
+
warn: 'yellow',
|
|
107
|
+
info: 'blue',
|
|
108
|
+
rule: undefined,
|
|
109
|
+
};
|
|
110
|
+
default:
|
|
111
|
+
return {
|
|
112
|
+
level: 0,
|
|
113
|
+
ink: undefined,
|
|
114
|
+
ink2: undefined,
|
|
115
|
+
ink3: undefined,
|
|
116
|
+
ink4: undefined,
|
|
117
|
+
brand: undefined,
|
|
118
|
+
brandTint: undefined,
|
|
119
|
+
pos: undefined,
|
|
120
|
+
neg: undefined,
|
|
121
|
+
warn: undefined,
|
|
122
|
+
info: undefined,
|
|
123
|
+
rule: undefined,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* The theme colour of a tone (`undefined` = the terminal default).
|
|
129
|
+
*
|
|
130
|
+
* @param theme - The theme
|
|
131
|
+
* @param tone - The tone
|
|
132
|
+
* @returns The Ink colour string, if any
|
|
133
|
+
*/
|
|
134
|
+
export function toneColor(theme, tone) {
|
|
135
|
+
switch (tone) {
|
|
136
|
+
case 'pos': return theme.pos;
|
|
137
|
+
case 'neg': return theme.neg;
|
|
138
|
+
case 'warn': return theme.warn;
|
|
139
|
+
case 'info': return theme.info;
|
|
140
|
+
case 'brand': return theme.brand;
|
|
141
|
+
case 'muted': return theme.ink4;
|
|
142
|
+
default: return undefined;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../../src/tui/render/theme.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
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 RepositoryStatus } from '@elaraai/e3-api-client';
|
|
6
|
+
import { type RepoServerHandle } from '../e3-server.js';
|
|
7
|
+
import { type Api } from './api.js';
|
|
8
|
+
import type { Refusal, SessionInfo } from './state/actions.js';
|
|
9
|
+
/** An open session. */
|
|
10
|
+
export interface Session {
|
|
11
|
+
info: SessionInfo;
|
|
12
|
+
api: Api;
|
|
13
|
+
/** The repository status fetched while opening (local / remote). */
|
|
14
|
+
status: RepositoryStatus | null;
|
|
15
|
+
/** Releases the session (stops the embedded server). */
|
|
16
|
+
stop(): Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
/** Thrown by {@link openSession} when the target cannot be opened; carries the refusal screen. */
|
|
19
|
+
export declare class SessionRefusal extends Error {
|
|
20
|
+
readonly refusal: Refusal;
|
|
21
|
+
constructor(refusal: Refusal);
|
|
22
|
+
}
|
|
23
|
+
/** A one-line message for a refusal (logs, non-TTY). */
|
|
24
|
+
export declare function refusalMessage(refusal: Refusal): string;
|
|
25
|
+
/** How a target parses. */
|
|
26
|
+
export type Target = {
|
|
27
|
+
kind: 'local';
|
|
28
|
+
path: string;
|
|
29
|
+
} | {
|
|
30
|
+
kind: 'remote';
|
|
31
|
+
origin: string;
|
|
32
|
+
repo: string;
|
|
33
|
+
} | {
|
|
34
|
+
kind: 'origin';
|
|
35
|
+
origin: string;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Classifies a repository argument without touching the network: e3-cli's
|
|
39
|
+
* grammar for local paths and `https://host/repos/<repo>`, plus a bare
|
|
40
|
+
* `https://host` as an origin.
|
|
41
|
+
*
|
|
42
|
+
* @param target - The argument
|
|
43
|
+
* @returns The classification
|
|
44
|
+
* @throws {SessionRefusal} `not-repo` when a local path is not a repository
|
|
45
|
+
*/
|
|
46
|
+
export declare function parseTarget(target: string): Target;
|
|
47
|
+
/** The label a target shows in the breadcrumb. */
|
|
48
|
+
export declare function targetLabel(target: Target): string;
|
|
49
|
+
/** The signed-in identity of a saved credential (its JWT's email or subject). */
|
|
50
|
+
export declare function identityOf(origin: string): string | null;
|
|
51
|
+
/** Options for {@link openSession}. */
|
|
52
|
+
export interface OpenSessionOptions {
|
|
53
|
+
/** Progress steps for the launch screen. */
|
|
54
|
+
onStep?: ((step: string) => void) | undefined;
|
|
55
|
+
/** Starts the embedded server (injectable for tests). */
|
|
56
|
+
startServer?: ((repoPath: string) => Promise<RepoServerHandle>) | undefined;
|
|
57
|
+
/** Resolves a remote token (injectable for tests). */
|
|
58
|
+
token?: ((origin: string) => Promise<string>) | undefined;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Opens a session.
|
|
62
|
+
*
|
|
63
|
+
* @param target - The repository argument
|
|
64
|
+
* @param options - Progress callback and injectable seams
|
|
65
|
+
* @returns The session
|
|
66
|
+
* @throws {SessionRefusal} With the refusal screen to show
|
|
67
|
+
*/
|
|
68
|
+
export declare function openSession(target: string, options?: OpenSessionOptions): Promise<Session>;
|
|
69
|
+
/**
|
|
70
|
+
* Binds a repository on an origin session (`/repo <name>` in the repos view).
|
|
71
|
+
*
|
|
72
|
+
* @param session - The origin session
|
|
73
|
+
* @param repo - The repository name
|
|
74
|
+
* @returns A remote session over that repository
|
|
75
|
+
* @throws {SessionRefusal} When the repository does not exist
|
|
76
|
+
*/
|
|
77
|
+
export declare function bindRepo(session: Session, repo: string, options?: OpenSessionOptions): Promise<Session>;
|
|
78
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/tui/session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAwBH,OAAO,EAAc,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAmB,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAA2C,KAAK,GAAG,EAAE,MAAM,UAAU,CAAC;AAC7E,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE/D,uBAAuB;AACvB,MAAM,WAAW,OAAO;IACpB,IAAI,EAAE,WAAW,CAAC;IAClB,GAAG,EAAE,GAAG,CAAC;IACT,oEAAoE;IACpE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAChC,wDAAwD;IACxD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED,kGAAkG;AAClG,qBAAa,cAAe,SAAQ,KAAK;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO;gBAAhB,OAAO,EAAE,OAAO;CAIxC;AAED,wDAAwD;AACxD,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAOvD;AAED,2BAA2B;AAC3B,MAAM,MAAM,MAAM,GACZ;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzC;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAgBlD;AAED,kDAAkD;AAClD,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED,iFAAiF;AACjF,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWxD;AAED,uCAAuC;AACvC,MAAM,WAAW,kBAAkB;IAC/B,4CAA4C;IAC5C,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC9C,yDAAyD;IACzD,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC,GAAG,SAAS,CAAC;IAC5E,sDAAsD;IACtD,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;CAC7D;AAUD;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC,CAqGpG;AAED;;;;;;;GAOG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC,CAGjH"}
|
|
@@ -0,0 +1,237 @@
|
|
|
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
|
+
* Sessions — `openSession(target)` resolves a repository argument exactly
|
|
7
|
+
* as `e3` does (`parseRepoLocationSync` from `@elaraai/e3-cli/internal`),
|
|
8
|
+
* then binds an {@link Api}:
|
|
9
|
+
*
|
|
10
|
+
* - **local** — an embedded `@elaraai/e3-api-server` over the repository
|
|
11
|
+
* (`startRepoServer`, the same bootstrap `e3-ui shot --from-task` and the
|
|
12
|
+
* VS Code extension use); `repo = 'default'`; `stop()` on exit.
|
|
13
|
+
* - **remote** `https://host/repos/<repo>` — `getValidToken(origin)` now and
|
|
14
|
+
* **per request**, so a long session survives token expiry.
|
|
15
|
+
* - **bare origin** `https://host` — the repositories view; `/repo <name>`
|
|
16
|
+
* binds one.
|
|
17
|
+
*
|
|
18
|
+
* Refusals map to the three screens: not a repository (`repoGet` /
|
|
19
|
+
* `repoStatus` fail), not logged in (`getValidToken` throws — the box
|
|
20
|
+
* prefills `/login <origin>`), unreachable (the probe exhausts its retries).
|
|
21
|
+
*
|
|
22
|
+
* @packageDocumentation
|
|
23
|
+
*/
|
|
24
|
+
import * as path from 'node:path';
|
|
25
|
+
import { parseRepoLocationSync, getValidToken, getCredential, decodeJwtPayload } from '@elaraai/e3-cli/internal';
|
|
26
|
+
import { repoStatus } from '@elaraai/e3-api-client';
|
|
27
|
+
import { startRepoServer } from '../e3-server.js';
|
|
28
|
+
import { createHttpApi, describeError, isApiCode } from './api.js';
|
|
29
|
+
/** Thrown by {@link openSession} when the target cannot be opened; carries the refusal screen. */
|
|
30
|
+
export class SessionRefusal extends Error {
|
|
31
|
+
refusal;
|
|
32
|
+
constructor(refusal) {
|
|
33
|
+
super(refusalMessage(refusal));
|
|
34
|
+
this.refusal = refusal;
|
|
35
|
+
this.name = 'SessionRefusal';
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/** A one-line message for a refusal (logs, non-TTY). */
|
|
39
|
+
export function refusalMessage(refusal) {
|
|
40
|
+
switch (refusal.kind) {
|
|
41
|
+
case 'not-repo': return `${refusal.target} is not an e3 repository`;
|
|
42
|
+
case 'not-logged-in': return `not logged in to ${refusal.origin}`;
|
|
43
|
+
case 'unreachable': return `${refusal.url} is unreachable: ${refusal.error}`;
|
|
44
|
+
case 'error': return refusal.message;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Classifies a repository argument without touching the network: e3-cli's
|
|
49
|
+
* grammar for local paths and `https://host/repos/<repo>`, plus a bare
|
|
50
|
+
* `https://host` as an origin.
|
|
51
|
+
*
|
|
52
|
+
* @param target - The argument
|
|
53
|
+
* @returns The classification
|
|
54
|
+
* @throws {SessionRefusal} `not-repo` when a local path is not a repository
|
|
55
|
+
*/
|
|
56
|
+
export function parseTarget(target) {
|
|
57
|
+
if (/^https?:\/\//.test(target)) {
|
|
58
|
+
const url = new URL(target);
|
|
59
|
+
if (/^\/repos\/[^/]+/.test(url.pathname)) {
|
|
60
|
+
const location = parseRepoLocationSync(target);
|
|
61
|
+
if (location.type === 'remote')
|
|
62
|
+
return { kind: 'remote', origin: location.baseUrl, repo: location.repo };
|
|
63
|
+
}
|
|
64
|
+
return { kind: 'origin', origin: url.origin };
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
const location = parseRepoLocationSync(target);
|
|
68
|
+
if (location.type === 'local')
|
|
69
|
+
return { kind: 'local', path: location.path };
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
throw new SessionRefusal({ kind: 'not-repo', target: target === '.' ? path.resolve('.') : target });
|
|
73
|
+
}
|
|
74
|
+
throw new SessionRefusal({ kind: 'not-repo', target });
|
|
75
|
+
}
|
|
76
|
+
/** The label a target shows in the breadcrumb. */
|
|
77
|
+
export function targetLabel(target) {
|
|
78
|
+
switch (target.kind) {
|
|
79
|
+
case 'local': return path.basename(target.path) || target.path;
|
|
80
|
+
case 'remote': return target.repo;
|
|
81
|
+
case 'origin': return new URL(target.origin).host;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/** The signed-in identity of a saved credential (its JWT's email or subject). */
|
|
85
|
+
export function identityOf(origin) {
|
|
86
|
+
const credential = getCredential(origin);
|
|
87
|
+
if (credential === null)
|
|
88
|
+
return null;
|
|
89
|
+
try {
|
|
90
|
+
const payload = decodeJwtPayload(credential.accessToken);
|
|
91
|
+
const email = payload['email'];
|
|
92
|
+
const sub = payload['sub'];
|
|
93
|
+
return typeof email === 'string' ? email : typeof sub === 'string' ? sub : null;
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/** The error text of a connection failure (`ECONNREFUSED`, `fetch failed`, …). */
|
|
100
|
+
function connectionError(err) {
|
|
101
|
+
const cause = err.cause;
|
|
102
|
+
if (cause?.code !== undefined)
|
|
103
|
+
return cause.code;
|
|
104
|
+
if (cause?.message !== undefined)
|
|
105
|
+
return cause.message;
|
|
106
|
+
return describeError(err);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Opens a session.
|
|
110
|
+
*
|
|
111
|
+
* @param target - The repository argument
|
|
112
|
+
* @param options - Progress callback and injectable seams
|
|
113
|
+
* @returns The session
|
|
114
|
+
* @throws {SessionRefusal} With the refusal screen to show
|
|
115
|
+
*/
|
|
116
|
+
export async function openSession(target, options = {}) {
|
|
117
|
+
const parsed = parseTarget(target);
|
|
118
|
+
const step = options.onStep ?? (() => undefined);
|
|
119
|
+
if (parsed.kind === 'local') {
|
|
120
|
+
step('starting embedded e3 api server');
|
|
121
|
+
const start = options.startServer ?? startRepoServer;
|
|
122
|
+
let server;
|
|
123
|
+
try {
|
|
124
|
+
server = await start(parsed.path);
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
throw new SessionRefusal({ kind: 'error', message: `could not start the embedded server: ${describeError(err)}` });
|
|
128
|
+
}
|
|
129
|
+
step(`embedded e3 api server · ${server.apiUrl.replace(/^https?:\/\//, '')}`);
|
|
130
|
+
const api = createHttpApi({ apiUrl: server.apiUrl, repo: server.repo, token: async () => null });
|
|
131
|
+
let status = null;
|
|
132
|
+
try {
|
|
133
|
+
status = await repoStatus(server.apiUrl, server.repo, { token: null });
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
await server.stop();
|
|
137
|
+
throw new SessionRefusal({ kind: 'not-repo', target: parsed.path });
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
info: {
|
|
141
|
+
kind: 'local',
|
|
142
|
+
label: targetLabel(parsed),
|
|
143
|
+
repo: server.repo,
|
|
144
|
+
apiUrl: server.apiUrl,
|
|
145
|
+
path: parsed.path,
|
|
146
|
+
origin: null,
|
|
147
|
+
identity: null,
|
|
148
|
+
stateKey: parsed.path,
|
|
149
|
+
target,
|
|
150
|
+
},
|
|
151
|
+
api,
|
|
152
|
+
status,
|
|
153
|
+
stop: () => server.stop(),
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
const origin = parsed.origin;
|
|
157
|
+
const tokenOf = options.token ?? getValidToken;
|
|
158
|
+
step(`resolving the saved credential for ${origin}`);
|
|
159
|
+
let token;
|
|
160
|
+
try {
|
|
161
|
+
token = await tokenOf(origin);
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
throw new SessionRefusal({ kind: 'not-logged-in', origin, repo: parsed.kind === 'remote' ? parsed.repo : null });
|
|
165
|
+
}
|
|
166
|
+
const api = createHttpApi({ apiUrl: origin, repo: parsed.kind === 'remote' ? parsed.repo : null, token: () => tokenOf(origin) });
|
|
167
|
+
if (parsed.kind === 'remote') {
|
|
168
|
+
step(`reading ${origin}/repos/${parsed.repo}`);
|
|
169
|
+
let status;
|
|
170
|
+
try {
|
|
171
|
+
status = await repoStatus(origin, parsed.repo, { token });
|
|
172
|
+
}
|
|
173
|
+
catch (err) {
|
|
174
|
+
if (isApiCode(err, 'repository_not_found'))
|
|
175
|
+
throw new SessionRefusal({ kind: 'not-repo', target });
|
|
176
|
+
if (isApiCode(err, 'unauthorized') || err.name === 'AuthError') {
|
|
177
|
+
throw new SessionRefusal({ kind: 'not-logged-in', origin, repo: parsed.repo });
|
|
178
|
+
}
|
|
179
|
+
throw new SessionRefusal({ kind: 'unreachable', url: `${origin}/api/repos/${parsed.repo}/status`, error: connectionError(err), attempts: 4 });
|
|
180
|
+
}
|
|
181
|
+
return {
|
|
182
|
+
info: {
|
|
183
|
+
kind: 'remote',
|
|
184
|
+
label: targetLabel(parsed),
|
|
185
|
+
repo: parsed.repo,
|
|
186
|
+
apiUrl: origin,
|
|
187
|
+
path: null,
|
|
188
|
+
origin,
|
|
189
|
+
identity: identityOf(origin),
|
|
190
|
+
stateKey: `${origin}/repos/${parsed.repo}`,
|
|
191
|
+
target,
|
|
192
|
+
},
|
|
193
|
+
api,
|
|
194
|
+
status,
|
|
195
|
+
stop: async () => undefined,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
step(`reading the repositories on ${origin}`);
|
|
199
|
+
try {
|
|
200
|
+
await api.repoList();
|
|
201
|
+
}
|
|
202
|
+
catch (err) {
|
|
203
|
+
if (err.name === 'AuthError')
|
|
204
|
+
throw new SessionRefusal({ kind: 'not-logged-in', origin, repo: null });
|
|
205
|
+
throw new SessionRefusal({ kind: 'unreachable', url: `${origin}/api/repos`, error: connectionError(err), attempts: 4 });
|
|
206
|
+
}
|
|
207
|
+
return {
|
|
208
|
+
info: {
|
|
209
|
+
kind: 'origin',
|
|
210
|
+
label: targetLabel(parsed),
|
|
211
|
+
repo: null,
|
|
212
|
+
apiUrl: origin,
|
|
213
|
+
path: null,
|
|
214
|
+
origin,
|
|
215
|
+
identity: identityOf(origin),
|
|
216
|
+
stateKey: origin,
|
|
217
|
+
target,
|
|
218
|
+
},
|
|
219
|
+
api,
|
|
220
|
+
status: null,
|
|
221
|
+
stop: async () => undefined,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Binds a repository on an origin session (`/repo <name>` in the repos view).
|
|
226
|
+
*
|
|
227
|
+
* @param session - The origin session
|
|
228
|
+
* @param repo - The repository name
|
|
229
|
+
* @returns A remote session over that repository
|
|
230
|
+
* @throws {SessionRefusal} When the repository does not exist
|
|
231
|
+
*/
|
|
232
|
+
export async function bindRepo(session, repo, options = {}) {
|
|
233
|
+
if (session.info.origin === null)
|
|
234
|
+
throw new SessionRefusal({ kind: 'error', message: 'not an origin session' });
|
|
235
|
+
return openSession(`${session.info.origin}/repos/${repo}`, options);
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/tui/session.ts"],"names":[],"mappings":"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"}
|