@h-rig/cli 0.0.6-alpha.89 → 0.0.6-alpha.90
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/dist/bin/build-rig-binaries.js +8 -40
- package/dist/bin/rig.js +12519 -26675
- package/dist/src/app/board.js +74 -693
- package/dist/src/app/drone-ui.js +1 -1
- package/dist/src/app/theme.js +0 -1
- package/dist/src/commands/_async-ui.js +1 -1
- package/dist/src/commands/_authority-runs.d.ts +1 -1
- package/dist/src/commands/_authority-runs.js +12 -2
- package/dist/src/commands/_cli-format.d.ts +1 -10
- package/dist/src/commands/_cli-format.js +2 -5
- package/dist/src/commands/_connection-state.d.ts +1 -11
- package/dist/src/commands/_connection-state.js +5 -50
- package/dist/src/commands/_doctor-checks.js +40 -501
- package/dist/src/commands/_help-catalog.js +17 -99
- package/dist/src/commands/_json-output.js +0 -4
- package/dist/src/commands/_operator-view.js +54 -575
- package/dist/src/commands/_pi-frontend.d.ts +0 -27
- package/dist/src/commands/_pi-frontend.js +52 -576
- package/dist/src/commands/_preflight.js +66 -553
- package/dist/src/commands/_server-client.d.ts +0 -33
- package/dist/src/commands/_server-client.js +46 -541
- package/dist/src/commands/_snapshot-upload.js +42 -503
- package/dist/src/commands/_spinner.js +1 -1
- package/dist/src/commands/agent.js +12 -2
- package/dist/src/commands/browser.js +1 -1
- package/dist/src/commands/connect.js +15 -626
- package/dist/src/commands/doctor.js +41 -502
- package/dist/src/commands/github.js +51 -584
- package/dist/src/commands/inbox.js +41 -502
- package/dist/src/commands/init.js +74 -561
- package/dist/src/commands/inspect.js +41 -502
- package/dist/src/commands/run.js +54 -578
- package/dist/src/commands/server.js +163 -692
- package/dist/src/commands/setup.js +46 -507
- package/dist/src/commands/stats.js +58 -601
- package/dist/src/commands/task-run-driver.js +58 -509
- package/dist/src/commands/task.js +110 -729
- package/dist/src/commands.js +237 -1112
- package/dist/src/index.js +244 -1123
- package/dist/src/launcher.js +0 -4
- package/package.json +9 -13
- package/dist/src/app-opentui/adapters/command.d.ts +0 -2
- package/dist/src/app-opentui/adapters/command.js +0 -329
- package/dist/src/app-opentui/adapters/common.d.ts +0 -56
- package/dist/src/app-opentui/adapters/common.js +0 -153
- package/dist/src/app-opentui/adapters/doctor.d.ts +0 -9
- package/dist/src/app-opentui/adapters/doctor.js +0 -1217
- package/dist/src/app-opentui/adapters/family.d.ts +0 -62
- package/dist/src/app-opentui/adapters/family.js +0 -14855
- package/dist/src/app-opentui/adapters/fleet.d.ts +0 -14
- package/dist/src/app-opentui/adapters/fleet.js +0 -1335
- package/dist/src/app-opentui/adapters/inbox.d.ts +0 -43
- package/dist/src/app-opentui/adapters/inbox.js +0 -1944
- package/dist/src/app-opentui/adapters/init.d.ts +0 -11
- package/dist/src/app-opentui/adapters/init.js +0 -2818
- package/dist/src/app-opentui/adapters/inspect.d.ts +0 -52
- package/dist/src/app-opentui/adapters/inspect.js +0 -1455
- package/dist/src/app-opentui/adapters/pi-attach.d.ts +0 -32
- package/dist/src/app-opentui/adapters/pi-attach.js +0 -2101
- package/dist/src/app-opentui/adapters/pi.d.ts +0 -23
- package/dist/src/app-opentui/adapters/pi.js +0 -363
- package/dist/src/app-opentui/adapters/plugin.d.ts +0 -84
- package/dist/src/app-opentui/adapters/plugin.js +0 -544
- package/dist/src/app-opentui/adapters/repo.d.ts +0 -37
- package/dist/src/app-opentui/adapters/repo.js +0 -186
- package/dist/src/app-opentui/adapters/run-detail.d.ts +0 -27
- package/dist/src/app-opentui/adapters/run-detail.js +0 -1441
- package/dist/src/app-opentui/adapters/server.d.ts +0 -48
- package/dist/src/app-opentui/adapters/server.js +0 -1561
- package/dist/src/app-opentui/adapters/tasks.d.ts +0 -64
- package/dist/src/app-opentui/adapters/tasks.js +0 -4524
- package/dist/src/app-opentui/adapters/workspace.d.ts +0 -49
- package/dist/src/app-opentui/adapters/workspace.js +0 -333
- package/dist/src/app-opentui/autocomplete.d.ts +0 -20
- package/dist/src/app-opentui/autocomplete.js +0 -578
- package/dist/src/app-opentui/bootstrap.d.ts +0 -11
- package/dist/src/app-opentui/bootstrap.js +0 -27833
- package/dist/src/app-opentui/command-palette.d.ts +0 -3
- package/dist/src/app-opentui/command-palette.js +0 -1038
- package/dist/src/app-opentui/command-pty-host.d.ts +0 -62
- package/dist/src/app-opentui/command-pty-host.js +0 -248
- package/dist/src/app-opentui/drone.d.ts +0 -12
- package/dist/src/app-opentui/drone.js +0 -230
- package/dist/src/app-opentui/events.d.ts +0 -7
- package/dist/src/app-opentui/events.js +0 -28
- package/dist/src/app-opentui/fleet-stats.d.ts +0 -32
- package/dist/src/app-opentui/fleet-stats.js +0 -114
- package/dist/src/app-opentui/focus-manager.d.ts +0 -14
- package/dist/src/app-opentui/focus-manager.js +0 -24
- package/dist/src/app-opentui/index.d.ts +0 -8
- package/dist/src/app-opentui/index.js +0 -5260
- package/dist/src/app-opentui/intent.d.ts +0 -3
- package/dist/src/app-opentui/intent.js +0 -365
- package/dist/src/app-opentui/keymap.d.ts +0 -21
- package/dist/src/app-opentui/keymap.js +0 -1377
- package/dist/src/app-opentui/launch-routing.d.ts +0 -16
- package/dist/src/app-opentui/launch-routing.js +0 -55
- package/dist/src/app-opentui/layout.d.ts +0 -22
- package/dist/src/app-opentui/layout.js +0 -51
- package/dist/src/app-opentui/list-search.d.ts +0 -36
- package/dist/src/app-opentui/list-search.js +0 -130
- package/dist/src/app-opentui/pi-host-child.d.ts +0 -2
- package/dist/src/app-opentui/pi-host-child.js +0 -1299
- package/dist/src/app-opentui/pi-pty-host.d.ts +0 -28
- package/dist/src/app-opentui/pi-pty-host.js +0 -10
- package/dist/src/app-opentui/react/App.d.ts +0 -9
- package/dist/src/app-opentui/react/App.js +0 -3866
- package/dist/src/app-opentui/react/Backdrop.d.ts +0 -5
- package/dist/src/app-opentui/react/Backdrop.js +0 -823
- package/dist/src/app-opentui/react/ChromeHost.d.ts +0 -5
- package/dist/src/app-opentui/react/ChromeHost.js +0 -1539
- package/dist/src/app-opentui/react/SceneFrameView.d.ts +0 -7
- package/dist/src/app-opentui/react/SceneFrameView.js +0 -579
- package/dist/src/app-opentui/react/context.d.ts +0 -17
- package/dist/src/app-opentui/react/context.js +0 -37
- package/dist/src/app-opentui/react/launch.d.ts +0 -2
- package/dist/src/app-opentui/react/launch.js +0 -4897
- package/dist/src/app-opentui/react/nav.d.ts +0 -18
- package/dist/src/app-opentui/react/nav.js +0 -54
- package/dist/src/app-opentui/react/scroll.d.ts +0 -12
- package/dist/src/app-opentui/react/scroll.js +0 -21
- package/dist/src/app-opentui/react/syntax.d.ts +0 -2
- package/dist/src/app-opentui/react/syntax.js +0 -65
- package/dist/src/app-opentui/registry.d.ts +0 -4
- package/dist/src/app-opentui/registry.js +0 -22876
- package/dist/src/app-opentui/remote-link.d.ts +0 -10
- package/dist/src/app-opentui/remote-link.js +0 -47
- package/dist/src/app-opentui/render/ascii-fleet.d.ts +0 -15
- package/dist/src/app-opentui/render/ascii-fleet.js +0 -82
- package/dist/src/app-opentui/render/constants.d.ts +0 -30
- package/dist/src/app-opentui/render/constants.js +0 -64
- package/dist/src/app-opentui/render/graphics.d.ts +0 -40
- package/dist/src/app-opentui/render/graphics.js +0 -713
- package/dist/src/app-opentui/render/hover.d.ts +0 -11
- package/dist/src/app-opentui/render/hover.js +0 -34
- package/dist/src/app-opentui/render/native-host.d.ts +0 -37
- package/dist/src/app-opentui/render/native-host.js +0 -180
- package/dist/src/app-opentui/render/panel-layout.d.ts +0 -38
- package/dist/src/app-opentui/render/panel-layout.js +0 -48
- package/dist/src/app-opentui/render/panels.d.ts +0 -12
- package/dist/src/app-opentui/render/panels.js +0 -288
- package/dist/src/app-opentui/render/preloader.d.ts +0 -10
- package/dist/src/app-opentui/render/preloader.js +0 -166
- package/dist/src/app-opentui/render/scene.d.ts +0 -68
- package/dist/src/app-opentui/render/scene.js +0 -300
- package/dist/src/app-opentui/render/terminal-handoff.d.ts +0 -16
- package/dist/src/app-opentui/render/terminal-handoff.js +0 -14
- package/dist/src/app-opentui/render/text.d.ts +0 -29
- package/dist/src/app-opentui/render/text.js +0 -177
- package/dist/src/app-opentui/render/type-bar.d.ts +0 -15
- package/dist/src/app-opentui/render/type-bar.js +0 -212
- package/dist/src/app-opentui/runtime-resources.d.ts +0 -16
- package/dist/src/app-opentui/runtime-resources.js +0 -62
- package/dist/src/app-opentui/runtime.d.ts +0 -45
- package/dist/src/app-opentui/runtime.js +0 -5232
- package/dist/src/app-opentui/scenes/command.d.ts +0 -3
- package/dist/src/app-opentui/scenes/command.js +0 -118
- package/dist/src/app-opentui/scenes/doctor.d.ts +0 -3
- package/dist/src/app-opentui/scenes/doctor.js +0 -296
- package/dist/src/app-opentui/scenes/error.d.ts +0 -2
- package/dist/src/app-opentui/scenes/error.js +0 -277
- package/dist/src/app-opentui/scenes/family-domains/agent.d.ts +0 -2
- package/dist/src/app-opentui/scenes/family-domains/agent.js +0 -349
- package/dist/src/app-opentui/scenes/family-domains/browser.d.ts +0 -2
- package/dist/src/app-opentui/scenes/family-domains/browser.js +0 -196
- package/dist/src/app-opentui/scenes/family-domains/dist.d.ts +0 -2
- package/dist/src/app-opentui/scenes/family-domains/dist.js +0 -244
- package/dist/src/app-opentui/scenes/family-domains/git.d.ts +0 -2
- package/dist/src/app-opentui/scenes/family-domains/git.js +0 -196
- package/dist/src/app-opentui/scenes/family-domains/github.d.ts +0 -2
- package/dist/src/app-opentui/scenes/family-domains/github.js +0 -275
- package/dist/src/app-opentui/scenes/family-domains/harness.d.ts +0 -2
- package/dist/src/app-opentui/scenes/family-domains/harness.js +0 -153
- package/dist/src/app-opentui/scenes/family-domains/index.d.ts +0 -4
- package/dist/src/app-opentui/scenes/family-domains/index.js +0 -1680
- package/dist/src/app-opentui/scenes/family-domains/kit.d.ts +0 -76
- package/dist/src/app-opentui/scenes/family-domains/kit.js +0 -306
- package/dist/src/app-opentui/scenes/family-domains/profile.d.ts +0 -2
- package/dist/src/app-opentui/scenes/family-domains/profile.js +0 -213
- package/dist/src/app-opentui/scenes/family-domains/queue.d.ts +0 -2
- package/dist/src/app-opentui/scenes/family-domains/queue.js +0 -147
- package/dist/src/app-opentui/scenes/family-domains/remote.d.ts +0 -2
- package/dist/src/app-opentui/scenes/family-domains/remote.js +0 -519
- package/dist/src/app-opentui/scenes/family-domains/review.d.ts +0 -2
- package/dist/src/app-opentui/scenes/family-domains/review.js +0 -281
- package/dist/src/app-opentui/scenes/family-domains/setup.d.ts +0 -2
- package/dist/src/app-opentui/scenes/family-domains/setup.js +0 -268
- package/dist/src/app-opentui/scenes/family-domains/stats.d.ts +0 -2
- package/dist/src/app-opentui/scenes/family-domains/stats.js +0 -371
- package/dist/src/app-opentui/scenes/family.d.ts +0 -3
- package/dist/src/app-opentui/scenes/family.js +0 -2199
- package/dist/src/app-opentui/scenes/fleet.d.ts +0 -3
- package/dist/src/app-opentui/scenes/fleet.js +0 -766
- package/dist/src/app-opentui/scenes/handoff.d.ts +0 -2
- package/dist/src/app-opentui/scenes/handoff.js +0 -455
- package/dist/src/app-opentui/scenes/help.d.ts +0 -3
- package/dist/src/app-opentui/scenes/help.js +0 -725
- package/dist/src/app-opentui/scenes/inbox.d.ts +0 -3
- package/dist/src/app-opentui/scenes/inbox.js +0 -427
- package/dist/src/app-opentui/scenes/init.d.ts +0 -3
- package/dist/src/app-opentui/scenes/init.js +0 -181
- package/dist/src/app-opentui/scenes/inspect.d.ts +0 -3
- package/dist/src/app-opentui/scenes/inspect.js +0 -794
- package/dist/src/app-opentui/scenes/main.d.ts +0 -3
- package/dist/src/app-opentui/scenes/main.js +0 -332
- package/dist/src/app-opentui/scenes/pi.d.ts +0 -3
- package/dist/src/app-opentui/scenes/pi.js +0 -509
- package/dist/src/app-opentui/scenes/plugin.d.ts +0 -3
- package/dist/src/app-opentui/scenes/plugin.js +0 -487
- package/dist/src/app-opentui/scenes/repo.d.ts +0 -3
- package/dist/src/app-opentui/scenes/repo.js +0 -425
- package/dist/src/app-opentui/scenes/run-detail.d.ts +0 -3
- package/dist/src/app-opentui/scenes/run-detail.js +0 -467
- package/dist/src/app-opentui/scenes/server.d.ts +0 -3
- package/dist/src/app-opentui/scenes/server.js +0 -378
- package/dist/src/app-opentui/scenes/tasks.d.ts +0 -3
- package/dist/src/app-opentui/scenes/tasks.js +0 -768
- package/dist/src/app-opentui/scenes/workspace.d.ts +0 -3
- package/dist/src/app-opentui/scenes/workspace.js +0 -427
- package/dist/src/app-opentui/selectable.d.ts +0 -19
- package/dist/src/app-opentui/selectable.js +0 -80
- package/dist/src/app-opentui/state.d.ts +0 -4
- package/dist/src/app-opentui/state.js +0 -399
- package/dist/src/app-opentui/surface-catalog.d.ts +0 -20
- package/dist/src/app-opentui/surface-catalog.js +0 -542
- package/dist/src/app-opentui/theme.d.ts +0 -59
- package/dist/src/app-opentui/theme.js +0 -142
- package/dist/src/app-opentui/types.d.ts +0 -313
- package/dist/src/app-opentui/types.js +0 -1
- package/dist/src/commands/_server-events.d.ts +0 -26
- package/dist/src/commands/_server-events.js +0 -715
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
// packages/cli/src/app-opentui/render/text.ts
|
|
3
|
-
import { RGBA, TextAttributes as TextAttributes2, TextRenderable } from "@opentui/core";
|
|
4
|
-
|
|
5
|
-
// packages/cli/src/app-opentui/theme.ts
|
|
6
|
-
import {
|
|
7
|
-
bold as otuiBold,
|
|
8
|
-
dim as otuiDim,
|
|
9
|
-
fg as otuiFg,
|
|
10
|
-
t,
|
|
11
|
-
TextAttributes
|
|
12
|
-
} from "@opentui/core";
|
|
13
|
-
var RIG_UI = {
|
|
14
|
-
bg: "#070809",
|
|
15
|
-
bg2: "#0b0c0e",
|
|
16
|
-
panel: "#101115",
|
|
17
|
-
panel2: "#14161b",
|
|
18
|
-
hover: "#181b24",
|
|
19
|
-
glass: "#1e2230",
|
|
20
|
-
border: "#2a2e3a",
|
|
21
|
-
ink: "#f4f5f8",
|
|
22
|
-
ink2: "#c7c9d3",
|
|
23
|
-
ink3: "#9aa0ae",
|
|
24
|
-
ink4: "#787b86",
|
|
25
|
-
lime: "#ccff4d",
|
|
26
|
-
limeDim: "#a9d63f",
|
|
27
|
-
cyan: "#56d8ff",
|
|
28
|
-
cyanDim: "#3f9fbd",
|
|
29
|
-
red: "#ff5d5d",
|
|
30
|
-
yellow: "#ffd24d",
|
|
31
|
-
magenta: "#ff79b0"
|
|
32
|
-
};
|
|
33
|
-
var styles = {
|
|
34
|
-
ink: otuiFg(RIG_UI.ink),
|
|
35
|
-
ink2: otuiFg(RIG_UI.ink2),
|
|
36
|
-
ink3: otuiFg(RIG_UI.ink3),
|
|
37
|
-
ink4: otuiFg(RIG_UI.ink4),
|
|
38
|
-
lime: otuiFg(RIG_UI.lime),
|
|
39
|
-
limeDim: otuiFg(RIG_UI.limeDim),
|
|
40
|
-
cyan: otuiFg(RIG_UI.cyan),
|
|
41
|
-
red: otuiFg(RIG_UI.red),
|
|
42
|
-
yellow: otuiFg(RIG_UI.yellow),
|
|
43
|
-
magenta: otuiFg(RIG_UI.magenta)
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
// packages/cli/src/app-opentui/render/hover.ts
|
|
47
|
-
var hoveredId;
|
|
48
|
-
var listeners = new Set;
|
|
49
|
-
function isHovered(id) {
|
|
50
|
-
return id !== undefined && id === hoveredId;
|
|
51
|
-
}
|
|
52
|
-
function setHoveredSelectableId(id) {
|
|
53
|
-
if (hoveredId === id)
|
|
54
|
-
return;
|
|
55
|
-
hoveredId = id;
|
|
56
|
-
for (const listener of listeners)
|
|
57
|
-
listener();
|
|
58
|
-
}
|
|
59
|
-
function clearHoveredSelectableId(id) {
|
|
60
|
-
if (id !== undefined && hoveredId === id)
|
|
61
|
-
setHoveredSelectableId(undefined);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
// packages/cli/src/app-opentui/render/text.ts
|
|
65
|
-
var TRANSPARENT = RGBA.fromInts(0, 0, 0, 0);
|
|
66
|
-
var HOVER_BG = RGBA.fromHex(RIG_UI.hover);
|
|
67
|
-
function lineIsClickable(line) {
|
|
68
|
-
return line?.selectable !== undefined || line?.selectableIndex !== undefined;
|
|
69
|
-
}
|
|
70
|
-
function lineSelectableId(line) {
|
|
71
|
-
return line?.selectable?.id ?? line?.selectableId;
|
|
72
|
-
}
|
|
73
|
-
function lineBackground(line) {
|
|
74
|
-
if (line?.bg)
|
|
75
|
-
return RGBA.fromHex(line.bg);
|
|
76
|
-
const id = lineSelectableId(line);
|
|
77
|
-
if (id !== undefined && isHovered(id))
|
|
78
|
-
return HOVER_BG;
|
|
79
|
-
return TRANSPARENT;
|
|
80
|
-
}
|
|
81
|
-
function selectableMouseHandler(currentLineRef, onLineMouseDown) {
|
|
82
|
-
return (event) => {
|
|
83
|
-
const currentLine = currentLineRef();
|
|
84
|
-
if (!lineIsClickable(currentLine))
|
|
85
|
-
return;
|
|
86
|
-
onLineMouseDown?.(currentLine, event);
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
function hoverHandlers(currentLineRef) {
|
|
90
|
-
return {
|
|
91
|
-
onMouseOver: () => {
|
|
92
|
-
const id = lineSelectableId(currentLineRef());
|
|
93
|
-
if (id !== undefined)
|
|
94
|
-
setHoveredSelectableId(id);
|
|
95
|
-
},
|
|
96
|
-
onMouseOut: () => clearHoveredSelectableId(lineSelectableId(currentLineRef()))
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
function createTextLine(renderer, id, top, onLineMouseDown) {
|
|
100
|
-
let currentLine;
|
|
101
|
-
const renderable = new TextRenderable(renderer, {
|
|
102
|
-
id,
|
|
103
|
-
content: "",
|
|
104
|
-
position: "absolute",
|
|
105
|
-
left: 0,
|
|
106
|
-
top,
|
|
107
|
-
width: 1,
|
|
108
|
-
fg: RIG_UI.ink2,
|
|
109
|
-
selectable: true,
|
|
110
|
-
onMouseDown: selectableMouseHandler(() => currentLine, onLineMouseDown),
|
|
111
|
-
...hoverHandlers(() => currentLine)
|
|
112
|
-
});
|
|
113
|
-
renderable.setRigSceneLine = (line) => {
|
|
114
|
-
currentLine = line;
|
|
115
|
-
};
|
|
116
|
-
return renderable;
|
|
117
|
-
}
|
|
118
|
-
function createFlowTextLine(renderer, id, onLineMouseDown) {
|
|
119
|
-
let currentLine;
|
|
120
|
-
const renderable = new TextRenderable(renderer, {
|
|
121
|
-
id,
|
|
122
|
-
content: "",
|
|
123
|
-
width: "100%",
|
|
124
|
-
height: 1,
|
|
125
|
-
flexShrink: 0,
|
|
126
|
-
fg: RIG_UI.ink2,
|
|
127
|
-
selectable: true,
|
|
128
|
-
onMouseDown: selectableMouseHandler(() => currentLine, onLineMouseDown),
|
|
129
|
-
...hoverHandlers(() => currentLine)
|
|
130
|
-
});
|
|
131
|
-
renderable.setRigSceneLine = (line) => {
|
|
132
|
-
currentLine = line;
|
|
133
|
-
};
|
|
134
|
-
return renderable;
|
|
135
|
-
}
|
|
136
|
-
function applyTextLine(renderable, line, top, left, width) {
|
|
137
|
-
renderable.setRigSceneLine?.(line);
|
|
138
|
-
renderable.top = top;
|
|
139
|
-
renderable.left = left;
|
|
140
|
-
renderable.width = width;
|
|
141
|
-
renderable.content = line?.styledText ?? line?.text ?? "";
|
|
142
|
-
renderable.fg = line?.fg ?? RIG_UI.ink2;
|
|
143
|
-
renderable.bg = lineBackground(line);
|
|
144
|
-
renderable.attributes = line?.bold ? TextAttributes2.BOLD : line?.dim ? TextAttributes2.DIM : 0;
|
|
145
|
-
}
|
|
146
|
-
function applyFlowTextLine(renderable, line, width) {
|
|
147
|
-
renderable.setRigSceneLine?.(line);
|
|
148
|
-
renderable.visible = Boolean(line);
|
|
149
|
-
renderable.height = line ? 1 : 0;
|
|
150
|
-
renderable.width = Math.max(1, width);
|
|
151
|
-
renderable.content = line?.styledText ?? line?.text ?? "";
|
|
152
|
-
renderable.fg = line?.fg ?? RIG_UI.ink2;
|
|
153
|
-
renderable.bg = lineBackground(line);
|
|
154
|
-
renderable.attributes = line?.bold ? TextAttributes2.BOLD : line?.dim ? TextAttributes2.DIM : 0;
|
|
155
|
-
}
|
|
156
|
-
function clearTextLines(renderables, from = 0) {
|
|
157
|
-
for (let index = from;index < renderables.length; index += 1) {
|
|
158
|
-
const renderable = renderables[index];
|
|
159
|
-
renderable.setRigSceneLine?.(undefined);
|
|
160
|
-
renderable.content = "";
|
|
161
|
-
renderable.top = -1;
|
|
162
|
-
renderable.left = 0;
|
|
163
|
-
renderable.width = 1;
|
|
164
|
-
renderable.bg = TRANSPARENT;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
export {
|
|
168
|
-
lineSelectableId,
|
|
169
|
-
lineIsClickable,
|
|
170
|
-
lineBackground,
|
|
171
|
-
createTextLine,
|
|
172
|
-
createFlowTextLine,
|
|
173
|
-
clearTextLines,
|
|
174
|
-
applyTextLine,
|
|
175
|
-
applyFlowTextLine,
|
|
176
|
-
TRANSPARENT
|
|
177
|
-
};
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { BoxRenderable, InputRenderable, TextRenderable, type CliRenderer } from "@opentui/core";
|
|
2
|
-
import type { AppFooterState, AppTypeBarState } from "../types";
|
|
3
|
-
export type TypeBarRenderables = {
|
|
4
|
-
readonly background: BoxRenderable;
|
|
5
|
-
readonly input: InputRenderable;
|
|
6
|
-
readonly prefix: TextRenderable;
|
|
7
|
-
readonly footer: TextRenderable;
|
|
8
|
-
};
|
|
9
|
-
export declare function createTypeBar(renderer: CliRenderer): TypeBarRenderables;
|
|
10
|
-
export declare function positionTypeBar(renderables: TypeBarRenderables, input: AppTypeBarState, footer: AppFooterState, width: number, typeBarTop: number, footerTop: number): void;
|
|
11
|
-
export declare function hideTypeBar(renderables: TypeBarRenderables, height: number): void;
|
|
12
|
-
export declare function bindTypeBar(renderables: TypeBarRenderables, handlers: {
|
|
13
|
-
onInput(value: string): void;
|
|
14
|
-
onEnter(value: string): void;
|
|
15
|
-
}): void;
|
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
// packages/cli/src/app-opentui/render/type-bar.ts
|
|
3
|
-
import { BoxRenderable, InputRenderable, InputRenderableEvents, RGBA, StyledText, TextRenderable } from "@opentui/core";
|
|
4
|
-
|
|
5
|
-
// packages/cli/src/app-opentui/theme.ts
|
|
6
|
-
import {
|
|
7
|
-
bold as otuiBold,
|
|
8
|
-
dim as otuiDim,
|
|
9
|
-
fg as otuiFg,
|
|
10
|
-
t,
|
|
11
|
-
TextAttributes
|
|
12
|
-
} from "@opentui/core";
|
|
13
|
-
var RIG_UI = {
|
|
14
|
-
bg: "#070809",
|
|
15
|
-
bg2: "#0b0c0e",
|
|
16
|
-
panel: "#101115",
|
|
17
|
-
panel2: "#14161b",
|
|
18
|
-
hover: "#181b24",
|
|
19
|
-
glass: "#1e2230",
|
|
20
|
-
border: "#2a2e3a",
|
|
21
|
-
ink: "#f4f5f8",
|
|
22
|
-
ink2: "#c7c9d3",
|
|
23
|
-
ink3: "#9aa0ae",
|
|
24
|
-
ink4: "#787b86",
|
|
25
|
-
lime: "#ccff4d",
|
|
26
|
-
limeDim: "#a9d63f",
|
|
27
|
-
cyan: "#56d8ff",
|
|
28
|
-
cyanDim: "#3f9fbd",
|
|
29
|
-
red: "#ff5d5d",
|
|
30
|
-
yellow: "#ffd24d",
|
|
31
|
-
magenta: "#ff79b0"
|
|
32
|
-
};
|
|
33
|
-
var styles = {
|
|
34
|
-
ink: otuiFg(RIG_UI.ink),
|
|
35
|
-
ink2: otuiFg(RIG_UI.ink2),
|
|
36
|
-
ink3: otuiFg(RIG_UI.ink3),
|
|
37
|
-
ink4: otuiFg(RIG_UI.ink4),
|
|
38
|
-
lime: otuiFg(RIG_UI.lime),
|
|
39
|
-
limeDim: otuiFg(RIG_UI.limeDim),
|
|
40
|
-
cyan: otuiFg(RIG_UI.cyan),
|
|
41
|
-
red: otuiFg(RIG_UI.red),
|
|
42
|
-
yellow: otuiFg(RIG_UI.yellow),
|
|
43
|
-
magenta: otuiFg(RIG_UI.magenta)
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
// packages/cli/src/app-opentui/layout.ts
|
|
47
|
-
function visibleWidth(text) {
|
|
48
|
-
return [...text].length;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// packages/cli/src/app-opentui/render/type-bar.ts
|
|
52
|
-
var TYPEBAR_BG = RGBA.fromInts(20, 25, 14, 224);
|
|
53
|
-
var TYPEBAR_BORDER = RGBA.fromInts(204, 255, 77, 92);
|
|
54
|
-
function createTypeBar(renderer) {
|
|
55
|
-
const background = new BoxRenderable(renderer, {
|
|
56
|
-
id: "typebar-card",
|
|
57
|
-
position: "absolute",
|
|
58
|
-
left: 0,
|
|
59
|
-
top: 0,
|
|
60
|
-
width: 1,
|
|
61
|
-
height: 1,
|
|
62
|
-
backgroundColor: TYPEBAR_BG,
|
|
63
|
-
border: true,
|
|
64
|
-
borderColor: TYPEBAR_BORDER,
|
|
65
|
-
zIndex: 4
|
|
66
|
-
});
|
|
67
|
-
const prefix = new TextRenderable(renderer, {
|
|
68
|
-
id: "typebar-prefix",
|
|
69
|
-
content: " \u203A",
|
|
70
|
-
position: "absolute",
|
|
71
|
-
left: 1,
|
|
72
|
-
top: 0,
|
|
73
|
-
fg: RIG_UI.lime,
|
|
74
|
-
zIndex: 7,
|
|
75
|
-
selectable: true
|
|
76
|
-
});
|
|
77
|
-
const input = new InputRenderable(renderer, {
|
|
78
|
-
id: "typebar-input",
|
|
79
|
-
position: "absolute",
|
|
80
|
-
left: 4,
|
|
81
|
-
top: 0,
|
|
82
|
-
width: 40,
|
|
83
|
-
placeholder: "runs \xB7 tasks \xB7 run next \xB7 help",
|
|
84
|
-
textColor: RIG_UI.ink,
|
|
85
|
-
cursorColor: RIG_UI.lime,
|
|
86
|
-
cursorStyle: { style: "block", blinking: false },
|
|
87
|
-
showCursor: true,
|
|
88
|
-
zIndex: 7,
|
|
89
|
-
selectable: true
|
|
90
|
-
});
|
|
91
|
-
const footer = new TextRenderable(renderer, {
|
|
92
|
-
id: "footer",
|
|
93
|
-
content: "",
|
|
94
|
-
position: "absolute",
|
|
95
|
-
left: 0,
|
|
96
|
-
top: 1,
|
|
97
|
-
width: "100%",
|
|
98
|
-
fg: RIG_UI.ink3,
|
|
99
|
-
zIndex: 7,
|
|
100
|
-
selectable: true
|
|
101
|
-
});
|
|
102
|
-
return { background, input, prefix, footer };
|
|
103
|
-
}
|
|
104
|
-
function modePrefix(mode) {
|
|
105
|
-
switch (mode) {
|
|
106
|
-
case "search":
|
|
107
|
-
return { glyph: " /", color: RIG_UI.cyan };
|
|
108
|
-
case "command":
|
|
109
|
-
return { glyph: " /", color: RIG_UI.lime };
|
|
110
|
-
case "prompt":
|
|
111
|
-
return { glyph: " ?", color: RIG_UI.yellow };
|
|
112
|
-
default:
|
|
113
|
-
return { glyph: " \u203A", color: RIG_UI.ink3 };
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
function positionTypeBar(renderables, input, footer, width, typeBarTop, footerTop) {
|
|
117
|
-
const mode = input.mode ?? "nav";
|
|
118
|
-
const editing = mode !== "nav";
|
|
119
|
-
const { glyph, color } = modePrefix(mode);
|
|
120
|
-
renderables.background.visible = true;
|
|
121
|
-
const cardTop = Math.max(0, typeBarTop - 1);
|
|
122
|
-
renderables.background.left = 0;
|
|
123
|
-
renderables.background.top = cardTop;
|
|
124
|
-
renderables.background.width = width;
|
|
125
|
-
renderables.background.height = Math.max(3, footerTop - cardTop + 1);
|
|
126
|
-
renderables.prefix.content = glyph;
|
|
127
|
-
renderables.prefix.fg = color;
|
|
128
|
-
renderables.prefix.left = 2;
|
|
129
|
-
renderables.prefix.top = typeBarTop;
|
|
130
|
-
renderables.input.top = typeBarTop;
|
|
131
|
-
renderables.input.left = 5;
|
|
132
|
-
renderables.input.width = Math.max(10, width - 8);
|
|
133
|
-
renderables.input.value = editing ? input.value : "";
|
|
134
|
-
renderables.input.placeholder = editing ? mode === "prompt" ? input.prompt?.label ?? "type a value" : mode === "command" ? "rig \u2026" : "filter\u2026" : input.placeholder;
|
|
135
|
-
renderables.input.showCursor = editing;
|
|
136
|
-
if (renderables.input.focused)
|
|
137
|
-
renderables.input.blur();
|
|
138
|
-
renderables.footer.top = footerTop;
|
|
139
|
-
renderables.footer.width = "100%";
|
|
140
|
-
renderables.footer.content = formatFooter(footer, width);
|
|
141
|
-
}
|
|
142
|
-
function hideTypeBar(renderables, height) {
|
|
143
|
-
renderables.background.visible = false;
|
|
144
|
-
renderables.background.top = height + 1;
|
|
145
|
-
renderables.prefix.content = "";
|
|
146
|
-
renderables.prefix.top = height + 1;
|
|
147
|
-
renderables.input.value = "";
|
|
148
|
-
renderables.input.placeholder = "";
|
|
149
|
-
renderables.input.top = height + 1;
|
|
150
|
-
renderables.input.left = 0;
|
|
151
|
-
renderables.input.width = 1;
|
|
152
|
-
renderables.input.blur();
|
|
153
|
-
renderables.footer.content = "";
|
|
154
|
-
renderables.footer.top = height + 1;
|
|
155
|
-
}
|
|
156
|
-
function bindTypeBar(renderables, handlers) {
|
|
157
|
-
renderables.input.on(InputRenderableEvents.INPUT, (value) => handlers.onInput(value));
|
|
158
|
-
renderables.input.on(InputRenderableEvents.ENTER, (value) => handlers.onEnter(value));
|
|
159
|
-
}
|
|
160
|
-
function safeFooterMessage(message) {
|
|
161
|
-
const trimmed = message?.trim();
|
|
162
|
-
if (!trimmed)
|
|
163
|
-
return null;
|
|
164
|
-
if (/https?:|\b[a-z0-9-]+\.[a-z]{2,}\b|\brig\b/i.test(trimmed))
|
|
165
|
-
return null;
|
|
166
|
-
return trimmed;
|
|
167
|
-
}
|
|
168
|
-
function liveCell(live) {
|
|
169
|
-
const connected = live.trimStart().startsWith("\u25CF");
|
|
170
|
-
return { text: live, style: connected ? styles.cyan : styles.ink3 };
|
|
171
|
-
}
|
|
172
|
-
function footerCells(footer) {
|
|
173
|
-
const safeMessage = safeFooterMessage(footer.message);
|
|
174
|
-
const cells = [
|
|
175
|
-
footer.section ? { text: `\u25B8 ${footer.section}`, style: (s) => otuiBold(styles.ink2(s)) } : null,
|
|
176
|
-
footer.live ? liveCell(footer.live) : null,
|
|
177
|
-
footer.project ? { text: "workspace", style: styles.ink3 } : null,
|
|
178
|
-
footer.server ? { text: "server selected", style: styles.ink3 } : null,
|
|
179
|
-
footer.auth ? { text: "auth ready", style: styles.ink3 } : null,
|
|
180
|
-
footer.run ? { text: `run ${footer.run}`, style: styles.ink3 } : null,
|
|
181
|
-
safeMessage ? { text: safeMessage, style: styles.ink2 } : null,
|
|
182
|
-
footer.updated ? { text: footer.updated, style: styles.ink3 } : null
|
|
183
|
-
];
|
|
184
|
-
return cells.filter((cell) => cell !== null);
|
|
185
|
-
}
|
|
186
|
-
var FOOTER_SEPARATOR = " \xB7 ";
|
|
187
|
-
function formatFooter(footer, width) {
|
|
188
|
-
const budget = Math.max(8, width - 2);
|
|
189
|
-
const chunks = [styles.ink3(" ")];
|
|
190
|
-
let used = 1;
|
|
191
|
-
footerCells(footer).forEach((cell, index) => {
|
|
192
|
-
const sep = index === 0 ? "" : FOOTER_SEPARATOR;
|
|
193
|
-
const remaining = budget - used - visibleWidth(sep);
|
|
194
|
-
if (remaining <= 0)
|
|
195
|
-
return;
|
|
196
|
-
if (sep) {
|
|
197
|
-
chunks.push(styles.ink4(sep));
|
|
198
|
-
used += visibleWidth(sep);
|
|
199
|
-
}
|
|
200
|
-
const fits = visibleWidth(cell.text) <= remaining;
|
|
201
|
-
const text = fits ? cell.text : remaining <= 1 ? "\u2026" : `${[...cell.text].slice(0, Math.max(0, remaining - 1)).join("")}\u2026`;
|
|
202
|
-
chunks.push(cell.style(text));
|
|
203
|
-
used += visibleWidth(text);
|
|
204
|
-
});
|
|
205
|
-
return new StyledText(chunks);
|
|
206
|
-
}
|
|
207
|
-
export {
|
|
208
|
-
positionTypeBar,
|
|
209
|
-
hideTypeBar,
|
|
210
|
-
createTypeBar,
|
|
211
|
-
bindTypeBar
|
|
212
|
-
};
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
export type Disposer = () => void;
|
|
2
|
-
export declare class RuntimeResources {
|
|
3
|
-
private readonly disposers;
|
|
4
|
-
private disposed;
|
|
5
|
-
add(disposer: Disposer): Disposer;
|
|
6
|
-
setTimeout(callback: () => void, delayMs: number): ReturnType<typeof setTimeout>;
|
|
7
|
-
setInterval(callback: () => void, delayMs: number): ReturnType<typeof setInterval>;
|
|
8
|
-
clearTimeout(timer: ReturnType<typeof setTimeout> | null | undefined): void;
|
|
9
|
-
on<TEmitter extends {
|
|
10
|
-
on(event: string, listener: (...args: never[]) => void): unknown;
|
|
11
|
-
off?(event: string, listener: (...args: never[]) => void): unknown;
|
|
12
|
-
removeListener?(event: string, listener: (...args: never[]) => void): unknown;
|
|
13
|
-
}>(emitter: TEmitter, event: string, listener: (...args: never[]) => void): void;
|
|
14
|
-
disposeAll(): void;
|
|
15
|
-
private remove;
|
|
16
|
-
}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
// packages/cli/src/app-opentui/runtime-resources.ts
|
|
3
|
-
class RuntimeResources {
|
|
4
|
-
disposers = [];
|
|
5
|
-
disposed = false;
|
|
6
|
-
add(disposer) {
|
|
7
|
-
if (this.disposed) {
|
|
8
|
-
disposer();
|
|
9
|
-
return () => {
|
|
10
|
-
return;
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
this.disposers.push(disposer);
|
|
14
|
-
return disposer;
|
|
15
|
-
}
|
|
16
|
-
setTimeout(callback, delayMs) {
|
|
17
|
-
const timer = setTimeout(() => {
|
|
18
|
-
this.remove(dispose);
|
|
19
|
-
callback();
|
|
20
|
-
}, delayMs);
|
|
21
|
-
const dispose = () => clearTimeout(timer);
|
|
22
|
-
this.add(dispose);
|
|
23
|
-
return timer;
|
|
24
|
-
}
|
|
25
|
-
setInterval(callback, delayMs) {
|
|
26
|
-
const timer = setInterval(callback, delayMs);
|
|
27
|
-
this.add(() => clearInterval(timer));
|
|
28
|
-
return timer;
|
|
29
|
-
}
|
|
30
|
-
clearTimeout(timer) {
|
|
31
|
-
if (timer)
|
|
32
|
-
clearTimeout(timer);
|
|
33
|
-
}
|
|
34
|
-
on(emitter, event, listener) {
|
|
35
|
-
emitter.on(event, listener);
|
|
36
|
-
this.add(() => {
|
|
37
|
-
if (typeof emitter.off === "function")
|
|
38
|
-
emitter.off(event, listener);
|
|
39
|
-
else
|
|
40
|
-
emitter.removeListener?.(event, listener);
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
disposeAll() {
|
|
44
|
-
if (this.disposed)
|
|
45
|
-
return;
|
|
46
|
-
this.disposed = true;
|
|
47
|
-
for (let index = this.disposers.length - 1;index >= 0; index -= 1) {
|
|
48
|
-
try {
|
|
49
|
-
this.disposers[index]?.();
|
|
50
|
-
} catch {}
|
|
51
|
-
}
|
|
52
|
-
this.disposers.length = 0;
|
|
53
|
-
}
|
|
54
|
-
remove(disposer) {
|
|
55
|
-
const index = this.disposers.indexOf(disposer);
|
|
56
|
-
if (index >= 0)
|
|
57
|
-
this.disposers.splice(index, 1);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
export {
|
|
61
|
-
RuntimeResources
|
|
62
|
-
};
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { StyledText, type CliRenderer } from "@opentui/core";
|
|
2
|
-
import { createAppStore } from "./state";
|
|
3
|
-
import type { AppIntent, AppLaunchOptions, AppRuntime, AppSceneId, AppSelectableItem, AppState } from "./types";
|
|
4
|
-
import { type NativeHost } from "./render/native-host";
|
|
5
|
-
/** Total per-scene entry intent for back-navigation (#13). Every AppSceneId
|
|
6
|
-
* resolves to an intent that re-enters THAT scene with its real data refresh —
|
|
7
|
-
* so popping the back-stack restores the exact prior scene, never dumping home
|
|
8
|
-
* from an unrelated origin. Transient PTY scenes (command/handoff) can't be
|
|
9
|
-
* "restored" from a closed terminal, so they re-enter their owning section. */
|
|
10
|
-
export declare function entryIntentForScene(scene: AppSceneId): AppIntent;
|
|
11
|
-
/** Readable section name for the persistent footer breadcrumb. */
|
|
12
|
-
export declare function sceneSectionLabel(scene: AppSceneId): string;
|
|
13
|
-
/** Footer freshness indicator (#6): push-connected vs polling fallback, so the
|
|
14
|
-
* UI never silently lies about whether it is live. */
|
|
15
|
-
export declare function liveLinkLabel(status: "connecting" | "connected" | "disconnected"): string;
|
|
16
|
-
/** Build the persistent top-nav strip as styled text: every section label with
|
|
17
|
-
* the ACTIVE one highlighted (lime + bold), Inbox carrying a live pending-count
|
|
18
|
-
* badge. Rendered on every scene so the operator always sees the sections and
|
|
19
|
-
* where they are (#2). Returns a StyledText for a single absolute TextRenderable. */
|
|
20
|
-
export declare function buildNavStrip(state: AppState): StyledText;
|
|
21
|
-
/** Test-only: the id of the nav section that should light up for a scene (#2). */
|
|
22
|
-
export declare function __activeNavSectionIdForTest(scene: AppSceneId): string;
|
|
23
|
-
/** Test-only: the intent esc/back resolves to given a back-stack — proving back
|
|
24
|
-
* restores the ACTUAL prior scene, never dumping home from an unrelated origin
|
|
25
|
-
* (#13). Mirrors runtime.goBack's resolution (pop → entryIntentForScene). */
|
|
26
|
-
export declare function __backTargetIntentForTest(history: readonly AppSceneId[]): AppIntent;
|
|
27
|
-
/** Test-only: whether a scene resolves to a REAL renderer (false ⇒ it would hit
|
|
28
|
-
* the redirect stub). Asserts the stub is unreachable for every real scene (#3). */
|
|
29
|
-
export declare function __sceneHasRendererForTest(scene: AppSceneId, sceneRenderers?: AppLaunchOptions["sceneRenderers"]): boolean;
|
|
30
|
-
export declare function selectIndex(store: ReturnType<typeof createAppStore>, index: number, renderedItems?: readonly AppSelectableItem[]): boolean;
|
|
31
|
-
export declare function moveSelection(store: ReturnType<typeof createAppStore>, delta: number, renderedItems?: readonly AppSelectableItem[]): boolean;
|
|
32
|
-
/** Select the item with this stable id (#12). Clicks resolve by id so a render
|
|
33
|
-
* between mouse-down and the click callback can't misfire on a shifted row. */
|
|
34
|
-
export declare function selectById(store: ReturnType<typeof createAppStore>, id: string, renderedItems?: readonly AppSelectableItem[]): boolean;
|
|
35
|
-
export declare function activateSelection(runtime: AppRuntime, renderedItems?: readonly AppSelectableItem[]): Promise<boolean>;
|
|
36
|
-
/** Test-only: render a single scene's state to a renderer headlessly so the
|
|
37
|
-
* FULL scene render path (scene renderer → panels + lines + native mounts) can
|
|
38
|
-
* be snapshot-verified via @opentui/core's createTestRenderer + captureCharFrame,
|
|
39
|
-
* without launching the live app. Mirrors the renderable pool the live app
|
|
40
|
-
* builds, then calls the real `renderNow`. Returns the derived selectable list. */
|
|
41
|
-
export declare function __renderSceneForTest(renderer: CliRenderer, state: AppState, sceneRenderers?: AppLaunchOptions["sceneRenderers"]): {
|
|
42
|
-
readonly selectables: readonly AppSelectableItem[];
|
|
43
|
-
readonly nativeHost: NativeHost | null;
|
|
44
|
-
};
|
|
45
|
-
export declare function launchRigOpenTuiApp(options: AppLaunchOptions): Promise<void>;
|