@wrongstack/tui 0.7.3 → 0.7.5
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 +2 -1
- package/dist/index.d.ts +9 -0
- package/dist/index.js +28 -27
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -71,7 +71,8 @@ process.exit(exitCode);
|
|
|
71
71
|
| `↑` / `↓` | History navigation when buffer empty |
|
|
72
72
|
| `@` | File picker |
|
|
73
73
|
| `/` (at start) | Slash command picker |
|
|
74
|
-
| `
|
|
74
|
+
| `Ctrl+Shift+M` | Toggle agents monitor overlay |
|
|
75
|
+
| `Esc` | Close any picker / dialog / agents monitor |
|
|
75
76
|
| `Ctrl+L` | Clear screen (TUI keeps state — equivalent to scrolling) |
|
|
76
77
|
|
|
77
78
|
## Options worth knowing
|
package/dist/index.d.ts
CHANGED
|
@@ -163,6 +163,15 @@ interface RunTuiOptions {
|
|
|
163
163
|
*/
|
|
164
164
|
statuslineHiddenItems: Array<'todos' | 'plan' | 'fleet' | 'git' | 'elapsed' | 'context' | 'cost'>;
|
|
165
165
|
setStatuslineHiddenItems: (items: Array<'todos' | 'plan' | 'fleet' | 'git' | 'elapsed' | 'context' | 'cost'>) => void;
|
|
166
|
+
/**
|
|
167
|
+
* Controller for the agents monitor overlay. App installs a dispatch-backed
|
|
168
|
+
* setter on mount so the `/agents on|off` slash command can toggle the
|
|
169
|
+
* overlay without a round-trip.
|
|
170
|
+
*/
|
|
171
|
+
agentsMonitorController?: {
|
|
172
|
+
visible: boolean;
|
|
173
|
+
setVisible: (visible: boolean) => void;
|
|
174
|
+
};
|
|
166
175
|
/**
|
|
167
176
|
* If set, the App boots straight into goal mode — the text is wrapped
|
|
168
177
|
* in the GOAL preamble and submitted as the first turn. Lets users
|
package/dist/index.js
CHANGED
|
@@ -3037,10 +3037,9 @@ function reducer(state, action) {
|
|
|
3037
3037
|
case "fleetUsage": {
|
|
3038
3038
|
const cur = state.fleet[action.id];
|
|
3039
3039
|
if (!cur) return state;
|
|
3040
|
-
const cost = cur.cost;
|
|
3041
3040
|
return {
|
|
3042
3041
|
...state,
|
|
3043
|
-
fleet: { ...state.fleet, [action.id]: { ...cur,
|
|
3042
|
+
fleet: { ...state.fleet, [action.id]: { ...cur, lastEventAt: Date.now() } }
|
|
3044
3043
|
};
|
|
3045
3044
|
}
|
|
3046
3045
|
case "fleetDone": {
|
|
@@ -3218,6 +3217,7 @@ function App({
|
|
|
3218
3217
|
fleetStreamController,
|
|
3219
3218
|
statuslineHiddenItems,
|
|
3220
3219
|
setStatuslineHiddenItems,
|
|
3220
|
+
agentsMonitorController,
|
|
3221
3221
|
initialGoal,
|
|
3222
3222
|
initialAsk,
|
|
3223
3223
|
sessionsDir
|
|
@@ -3345,10 +3345,6 @@ function App({
|
|
|
3345
3345
|
draftRef.current = { buffer: "", cursor: 0 };
|
|
3346
3346
|
dispatch({ type: "clearInput" });
|
|
3347
3347
|
};
|
|
3348
|
-
const clearPlaceholdersOnly = () => {
|
|
3349
|
-
draftRef.current = { buffer: "", cursor: 0 };
|
|
3350
|
-
dispatch({ type: "clearPlaceholdersOnly" });
|
|
3351
|
-
};
|
|
3352
3348
|
const startedAtRef = useRef(Date.now());
|
|
3353
3349
|
const [nowTick, setNowTick] = React2.useState(Date.now());
|
|
3354
3350
|
useEffect(() => {
|
|
@@ -3791,8 +3787,12 @@ function App({
|
|
|
3791
3787
|
const cmd = {
|
|
3792
3788
|
name: "agents",
|
|
3793
3789
|
description: "Toggle the agents monitor overlay.",
|
|
3794
|
-
async run() {
|
|
3795
|
-
|
|
3790
|
+
async run(args) {
|
|
3791
|
+
const arg = args.trim().toLowerCase();
|
|
3792
|
+
if (!arg || arg === "monitor") {
|
|
3793
|
+
dispatch({ type: "toggleAgentsMonitor" });
|
|
3794
|
+
return { message: void 0 };
|
|
3795
|
+
}
|
|
3796
3796
|
return { message: void 0 };
|
|
3797
3797
|
}
|
|
3798
3798
|
};
|
|
@@ -3818,23 +3818,6 @@ function App({
|
|
|
3818
3818
|
slashRegistry.unregister("model");
|
|
3819
3819
|
};
|
|
3820
3820
|
}, [slashRegistry, getPickableProviders, switchProviderAndModel]);
|
|
3821
|
-
useEffect(() => {
|
|
3822
|
-
const cmd = {
|
|
3823
|
-
name: "agents",
|
|
3824
|
-
description: "Open or close the agents monitor overlay.",
|
|
3825
|
-
async run(args) {
|
|
3826
|
-
if (args.trim().toLowerCase() === "monitor") {
|
|
3827
|
-
dispatch({ type: "toggleAgentsMonitor" });
|
|
3828
|
-
return { message: "Agents monitor toggled." };
|
|
3829
|
-
}
|
|
3830
|
-
return { message: "Usage: /agents monitor" };
|
|
3831
|
-
}
|
|
3832
|
-
};
|
|
3833
|
-
slashRegistry.register(cmd);
|
|
3834
|
-
return () => {
|
|
3835
|
-
slashRegistry.unregister("agents");
|
|
3836
|
-
};
|
|
3837
|
-
}, [slashRegistry]);
|
|
3838
3821
|
useEffect(() => {
|
|
3839
3822
|
if (!switchAutonomy) return;
|
|
3840
3823
|
const cmd = {
|
|
@@ -4170,6 +4153,23 @@ function App({
|
|
|
4170
4153
|
useEffect(() => {
|
|
4171
4154
|
if (fleetStreamController) fleetStreamController.enabled = state.streamFleet;
|
|
4172
4155
|
}, [state.streamFleet, fleetStreamController]);
|
|
4156
|
+
useEffect(() => {
|
|
4157
|
+
if (!agentsMonitorController) return;
|
|
4158
|
+
agentsMonitorController.visible = state.agentsMonitorOpen;
|
|
4159
|
+
agentsMonitorController.setVisible = (visible) => {
|
|
4160
|
+
if (visible !== state.agentsMonitorOpen) {
|
|
4161
|
+
dispatch({ type: "toggleAgentsMonitor" });
|
|
4162
|
+
}
|
|
4163
|
+
};
|
|
4164
|
+
return () => {
|
|
4165
|
+
agentsMonitorController.setVisible = (visible) => {
|
|
4166
|
+
agentsMonitorController.visible = visible;
|
|
4167
|
+
};
|
|
4168
|
+
};
|
|
4169
|
+
}, [agentsMonitorController, state.agentsMonitorOpen]);
|
|
4170
|
+
useEffect(() => {
|
|
4171
|
+
if (agentsMonitorController) agentsMonitorController.visible = state.agentsMonitorOpen;
|
|
4172
|
+
}, [state.agentsMonitorOpen, agentsMonitorController]);
|
|
4173
4173
|
const lastEscAtRef = useRef(0);
|
|
4174
4174
|
const ESC_DOUBLE_PRESS_MS = 1e3;
|
|
4175
4175
|
useEffect(() => {
|
|
@@ -4730,7 +4730,7 @@ function App({
|
|
|
4730
4730
|
dispatch({ type: "toggleMonitor" });
|
|
4731
4731
|
return;
|
|
4732
4732
|
}
|
|
4733
|
-
if (key.ctrl && key.shift
|
|
4733
|
+
if (key.ctrl && input.toLowerCase() === "m" && (key.shift || input === "m")) {
|
|
4734
4734
|
dispatch({ type: "toggleAgentsMonitor" });
|
|
4735
4735
|
return;
|
|
4736
4736
|
}
|
|
@@ -5142,7 +5142,7 @@ User message:
|
|
|
5142
5142
|
}
|
|
5143
5143
|
const pasteContent = pasteParts.length > 0 ? pasteParts.join("\n") : void 0;
|
|
5144
5144
|
pushSubmittedHistory();
|
|
5145
|
-
|
|
5145
|
+
clearDraft();
|
|
5146
5146
|
const blocks = await builder.submit();
|
|
5147
5147
|
if (state.status !== "idle") {
|
|
5148
5148
|
dispatch({
|
|
@@ -5462,6 +5462,7 @@ async function runTui(opts) {
|
|
|
5462
5462
|
fleetStreamController: opts.fleetStreamController,
|
|
5463
5463
|
statuslineHiddenItems: opts.statuslineHiddenItems,
|
|
5464
5464
|
setStatuslineHiddenItems: opts.setStatuslineHiddenItems,
|
|
5465
|
+
agentsMonitorController: opts.agentsMonitorController,
|
|
5465
5466
|
initialGoal: opts.initialGoal,
|
|
5466
5467
|
initialAsk: opts.initialAsk,
|
|
5467
5468
|
getSDDContext: opts.getSDDContext,
|