@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 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
- | `Esc` | Close any picker / dialog |
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, cost, lastEventAt: Date.now() } }
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
- dispatch({ type: "toggleAgentsMonitor" });
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 && input === "M") {
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
- clearPlaceholdersOnly();
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,