@aiwayds/dsh-tui-pi 0.1.1 → 0.4.0

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.
Files changed (62) hide show
  1. package/README.md +175 -41
  2. package/lib/agent-manager.d.ts +125 -0
  3. package/lib/agent-manager.js +298 -0
  4. package/lib/agent-manager.js.map +1 -0
  5. package/lib/agents.d.ts +30 -0
  6. package/lib/agents.js +489 -0
  7. package/lib/agents.js.map +1 -0
  8. package/lib/append-system.d.ts +2 -0
  9. package/lib/append-system.js +1 -1
  10. package/lib/append-system.js.map +1 -1
  11. package/lib/dsh-events.d.ts +12 -0
  12. package/lib/editor.d.ts +58 -0
  13. package/lib/editor.js +92 -0
  14. package/lib/editor.js.map +1 -1
  15. package/lib/footer.d.ts +46 -0
  16. package/lib/footer.js +65 -0
  17. package/lib/footer.js.map +1 -1
  18. package/lib/hotkeys.d.ts +93 -0
  19. package/lib/hotkeys.js +305 -0
  20. package/lib/hotkeys.js.map +1 -0
  21. package/lib/index.js +342 -61
  22. package/lib/index.js.map +1 -1
  23. package/lib/keymap.d.ts +243 -0
  24. package/lib/keymap.js +245 -0
  25. package/lib/keymap.js.map +1 -0
  26. package/lib/live-widgets.d.ts +59 -49
  27. package/lib/live-widgets.js +174 -117
  28. package/lib/live-widgets.js.map +1 -1
  29. package/lib/panels.d.ts +177 -0
  30. package/lib/panels.js +331 -0
  31. package/lib/panels.js.map +1 -0
  32. package/lib/selectors.d.ts +12 -1
  33. package/lib/selectors.js +1 -1
  34. package/lib/selectors.js.map +1 -1
  35. package/lib/session.d.ts +25 -0
  36. package/lib/session.js +173 -12
  37. package/lib/session.js.map +1 -1
  38. package/lib/settings.d.ts +1 -2
  39. package/lib/subagent-policy.d.ts +88 -0
  40. package/lib/subagent-policy.js +189 -0
  41. package/lib/subagent-policy.js.map +1 -0
  42. package/lib/subagent-viewer.d.ts +49 -0
  43. package/lib/subagent-viewer.js +523 -0
  44. package/lib/subagent-viewer.js.map +1 -0
  45. package/lib/theme/index.js +4 -0
  46. package/lib/theme/index.js.map +1 -1
  47. package/lib/theme/palette.d.ts +21 -3
  48. package/lib/theme/palette.js +27 -6
  49. package/lib/theme/palette.js.map +1 -1
  50. package/lib/theme-settings.d.ts +71 -9
  51. package/lib/theme-settings.js +145 -21
  52. package/lib/theme-settings.js.map +1 -1
  53. package/lib/tui.d.ts +23 -9
  54. package/lib/tui.js +110 -7
  55. package/lib/tui.js.map +1 -1
  56. package/package.json +3 -4
  57. package/patches/@earendil-works__pi-tui.patch +206 -2
  58. package/scripts/dev-install.mjs +87 -0
  59. package/scripts/link-dsh-closure.mjs +85 -0
  60. package/templates/agents/ArtyDuck.md +11 -0
  61. package/templates/agents/oldfox.md +33 -0
  62. package/templates/agents/workhorse.md +34 -0
@@ -10,16 +10,20 @@
10
10
  * fills are solid approximations of alpha tints blended over `canvas`
11
11
  * (the terminal can't carry alpha) — same values as `blend()` below.
12
12
  *
13
- * The TUI never paints the main canvas (the terminal background shows
14
- * through), so `canvas` is the semantic base used by the dark muted blends
15
- * and by contrast design; `canvasSubtle` is the visible raised surface.
13
+ * The TUI paints every rendered row with `canvas` (patched pi-tui
14
+ * `setCanvasBackground`, see src/tui.ts) — the app owns its background, so
15
+ * a theme switch recolors the whole screen and the terminal/multiplexer
16
+ * background never shows through. `canvasSubtle` stays the visible raised
17
+ * surface on top of it. DSH_TUI_TRANSPARENT=1 reverts to the old
18
+ * see-through canvas, where `canvas` is only the semantic base for the dark
19
+ * muted blends and contrast design.
16
20
  */
17
21
  export const githubLight = {
18
22
  name: 'github-light',
23
+ dark: false,
19
24
  // Main canvas: near-white with a faint cool-green cast (not the harsh
20
- // pure #fff); paper feel. The TUI never paints it — the terminal
21
- // background (#f6f8fa) shows through; kept as the semantic base for the
22
- // dark muted blends and contrast design.
25
+ // pure #fff); paper feel. Painted on every rendered row (see the module
26
+ // header) — the whole screen carries it.
23
27
  canvas: '#fcfdfc',
24
28
  // Raised surface (message bubbles, think/tool panels, overlays, code
25
29
  // blocks): one step darker than the canvas, clear gray-green.
@@ -83,6 +87,7 @@ function blend(base, over, alpha) {
83
87
  }
84
88
  export const githubDark = {
85
89
  name: 'github-dark',
90
+ dark: true,
86
91
  // Main canvas: deep gray-blue (the GitHub dark family).
87
92
  canvas: '#0d1117',
88
93
  // Raised surface (bubbles, panels, overlays): one step lighter gray-blue.
@@ -151,4 +156,20 @@ export function detectDarkPalette(env = process.env) {
151
156
  // Default to dark — GitHub's terminal default and the safer contrast choice.
152
157
  return true;
153
158
  }
159
+ /** WCAG relative luminance of an RGB triple (0 = black, 1 = white). */
160
+ function rgbLuminance({ r, g, b }) {
161
+ const toLinear = (channel) => {
162
+ const value = channel / 255;
163
+ return value <= 0.03928 ? value / 12.92 : ((value + 0.055) / 1.055) ** 2.4;
164
+ };
165
+ return 0.2126 * toLinear(r) + 0.7152 * toLinear(g) + 0.0722 * toLinear(b);
166
+ }
167
+ /**
168
+ * True when an OSC 11 background color reads as a light terminal (the same
169
+ * 0.5 luminance threshold pi uses for its terminal detection). Structural
170
+ * match for pi-tui's `RgbColor`, so the query result passes through as-is.
171
+ */
172
+ export function rgbIsLight(rgb) {
173
+ return rgbLuminance(rgb) >= 0.5;
174
+ }
154
175
  //# sourceMappingURL=palette.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"palette.js","sourceRoot":"","sources":["../../src/theme/palette.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"palette.js","sourceRoot":"","sources":["../../src/theme/palette.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,44 @@
1
1
  /**
2
- * Theme settings: persists the user's theme preference and the think/tool
3
- * panel height under the `dsh-tui` settings namespace, surfaced by the
4
- * /settings browser and the /theme command. The preferences are read once at
5
- * TUI startup (`readThemePreference` / `readPanelHeightPreference`), and the
2
+ * Theme settings: persists the user's theme preference, the think/tool panel
3
+ * height, and the subagent concurrency/rounds limits under the `dsh-tui`
4
+ * settings namespace, surfaced by the /settings browser and the /theme
5
+ * command. The theme and panel-height preferences are read once at TUI
6
+ * startup (`readThemePreference` / `readPanelHeightPreference`); the subagent
7
+ * limits are read live at every policy decision (`readSubagentLimits`). The
6
8
  * namespace is marked `applies: 'live'`: a committed change (the /theme
7
9
  * picker, the /settings browser, an external edit) is pushed through the
8
10
  * watch hook, so the running TUI repaints without a restart.
9
11
  */
10
12
  import type { Context } from '@deepseek-ai/cordis';
11
13
  import { type SettingsNamespace } from '@deepseek-ai/dsh-settings';
14
+ import { type FooterHints } from './footer.ts';
12
15
  import { type PanelHeight } from './messages.ts';
13
16
  import type { ThemePreference } from './theme/index.ts';
14
17
  /** Settings namespace carrying the persisted dsh-tui preferences. */
15
18
  export declare const THEME_SETTINGS_NAMESPACE: SettingsNamespace;
19
+ /** Subagent concurrency/rounds/tool knobs read by the subagent policy. */
20
+ export interface SubagentLimits {
21
+ /** Concurrent live children allowed; 0 lifts the cap (the guard stays off). */
22
+ maxAgents: number;
23
+ /** Completed turns per child before a summary request is injected; 0 disables. */
24
+ maxRounds: number;
25
+ /**
26
+ * Disable the native `subagent` tool for every agent in the process, so
27
+ * plain ad-hoc delegation goes through a registered agent definition
28
+ * (`~/.dsh/agents/*.md` via `use_agent`) instead. Deliberately narrow:
29
+ * `subagent_fork`, `workflow` and `ralph` stay available (they are not the
30
+ * plain one-shot spawn the TUI's user wants fenced off).
31
+ */
32
+ disableSubagent: boolean;
33
+ }
34
+ /**
35
+ * Default subagent limits, applied whenever the settings service, namespace,
36
+ * or a field cannot be read. 4 concurrent children and 50 rounds per child are
37
+ * the documented out-of-the-box behavior; the native `subagent` tool is
38
+ * disabled by default — the TUI's user delegates through registered agents
39
+ * (toggle it in /agents → l limits when the plain tool is needed again).
40
+ */
41
+ export declare const DEFAULT_SUBAGENT_LIMITS: SubagentLimits;
16
42
  /**
17
43
  * Register the `dsh-tui` settings namespace with the settings provider.
18
44
  *
@@ -28,12 +54,12 @@ export declare const THEME_SETTINGS_NAMESPACE: SettingsNamespace;
28
54
  * startup.
29
55
  *
30
56
  * @param ctx - plugin context; does nothing while no settings service is mounted.
31
- * @param onPreferenceChange - hot-reload sink for committed `dsh-tui` theme
32
- * and panel-height changes; `undefined` when the namespace is already
33
- * registered (a reloaded plugin instance, a second mount of this bundle) or
34
- * registration fails.
57
+ * @param onPreferenceChange - hot-reload sink for committed `dsh-tui` theme,
58
+ * panel-height and footer-hints changes; `undefined` when the namespace is
59
+ * already registered (a reloaded plugin instance, a second mount of this
60
+ * bundle) or registration fails.
35
61
  */
36
- export declare function registerThemeSettings(ctx: Context, onPreferenceChange?: (pref: ThemePreference, panelHeight: PanelHeight) => void): void;
62
+ export declare function registerThemeSettings(ctx: Context, onPreferenceChange?: (pref: ThemePreference, panelHeight: PanelHeight, footerHints: FooterHints) => void): void;
37
63
  /**
38
64
  * Read the persisted theme preference (the startup snapshot).
39
65
  *
@@ -50,6 +76,22 @@ export declare function readThemePreference(ctx: Context): Promise<ThemePreferen
50
76
  * when the settings service is absent or the namespace/value cannot be read.
51
77
  */
52
78
  export declare function readPanelHeightPreference(ctx: Context): Promise<PanelHeight>;
79
+ /**
80
+ * Read the persisted footer-hint selection (the startup snapshot).
81
+ *
82
+ * @param ctx - plugin context.
83
+ * @returns the resolved `dsh-tui` footerHints object, or DEFAULT_FOOTER_HINTS
84
+ * when the settings service is absent or the namespace/value cannot be read.
85
+ */
86
+ export declare function readFooterHintsPreference(ctx: Context): Promise<FooterHints>;
87
+ /**
88
+ * Read the currently persisted footer-hint selection, synchronously.
89
+ * Unlike `readFooterHintsPreference` (the startup snapshot), this does not
90
+ * wait for the namespace registration - it describes whatever the settings
91
+ * service exposes right now, so a caller can honor a live change immediately.
92
+ * @returns DEFAULT_FOOTER_HINTS when the service, namespace, or value is absent.
93
+ */
94
+ export declare function currentFooterHints(ctx: Context): FooterHints;
53
95
  /**
54
96
  * Read the currently persisted theme preference, synchronously.
55
97
  * Unlike `readThemePreference` (the startup snapshot), this does not wait for
@@ -66,3 +108,23 @@ export declare function currentThemePreference(ctx: Context): ThemePreference;
66
108
  * @returns undefined on success, the failure message otherwise.
67
109
  */
68
110
  export declare function writeThemePreference(ctx: Context, pref: ThemePreference): Promise<string | undefined>;
111
+ /**
112
+ * Read the currently resolved subagent limits, synchronously. Unlike the
113
+ * startup-snapshot readers, this does not wait for the namespace registration
114
+ * — it describes whatever the settings service exposes right now, so every
115
+ * policy decision (the guard at each spawn, `onTurnCount` at each child turn)
116
+ * reflects the latest committed value without a watcher. Missing settings
117
+ * service or namespace, or a non-integer/negative field, degrades to the
118
+ * defaults — a settings-less deployment keeps the documented caps.
119
+ */
120
+ export declare function readSubagentLimits(ctx: Context): SubagentLimits;
121
+ /**
122
+ * Persist one subagent policy knob (maxAgents, maxRounds, or disableSubagent)
123
+ * to the `dsh-tui` settings namespace. The namespace is `applies: 'live'`, so
124
+ * the commit hot-applies without a restart — the policy reads
125
+ * `readSubagentLimits` at the next decision point. Never throws: a deployment
126
+ * without the settings provider, or an unregistered namespace, surfaces a
127
+ * failure message for the caller.
128
+ * @returns undefined on success, the failure message otherwise.
129
+ */
130
+ export declare function writeSubagentLimit(ctx: Context, key: 'maxAgents' | 'maxRounds' | 'disableSubagent', value: number | boolean): Promise<string | undefined>;
@@ -1,17 +1,32 @@
1
1
  /**
2
- * Theme settings: persists the user's theme preference and the think/tool
3
- * panel height under the `dsh-tui` settings namespace, surfaced by the
4
- * /settings browser and the /theme command. The preferences are read once at
5
- * TUI startup (`readThemePreference` / `readPanelHeightPreference`), and the
2
+ * Theme settings: persists the user's theme preference, the think/tool panel
3
+ * height, and the subagent concurrency/rounds limits under the `dsh-tui`
4
+ * settings namespace, surfaced by the /settings browser and the /theme
5
+ * command. The theme and panel-height preferences are read once at TUI
6
+ * startup (`readThemePreference` / `readPanelHeightPreference`); the subagent
7
+ * limits are read live at every policy decision (`readSubagentLimits`). The
6
8
  * namespace is marked `applies: 'live'`: a committed change (the /theme
7
9
  * picker, the /settings browser, an external edit) is pushed through the
8
10
  * watch hook, so the running TUI repaints without a restart.
9
11
  */
10
12
  import { SettingsConflictError, settingsNamespace, } from '@deepseek-ai/dsh-settings';
11
13
  import z from '@deepseek-ai/schemastery';
14
+ import { DEFAULT_FOOTER_HINTS } from "./footer.js";
12
15
  import { DEFAULT_PANEL_HEIGHT } from "./messages.js";
13
16
  /** Settings namespace carrying the persisted dsh-tui preferences. */
14
17
  export const THEME_SETTINGS_NAMESPACE = settingsNamespace('dsh-tui');
18
+ /**
19
+ * Default subagent limits, applied whenever the settings service, namespace,
20
+ * or a field cannot be read. 4 concurrent children and 50 rounds per child are
21
+ * the documented out-of-the-box behavior; the native `subagent` tool is
22
+ * disabled by default — the TUI's user delegates through registered agents
23
+ * (toggle it in /agents → l limits when the plain tool is needed again).
24
+ */
25
+ export const DEFAULT_SUBAGENT_LIMITS = Object.freeze({
26
+ maxAgents: 4,
27
+ maxRounds: 50,
28
+ disableSubagent: true,
29
+ });
15
30
  /** Schema of the `dsh-tui` settings section. */
16
31
  const THEME_SETTINGS_SCHEMA = z.object({
17
32
  theme: z
@@ -24,11 +39,42 @@ const THEME_SETTINGS_SCHEMA = z.object({
24
39
  .description("Think/tool panel height in displayed rows ('5'/'7'/'10' — header + content lines; "
25
40
  + "box borders add 2 more) or 'all' to print the full content — a streaming "
26
41
  + 'reasoning panel shows a 200-line live tail and tool results cap at 2000 lines'),
42
+ // `z.natural()` is schemastery's constraint for a non-negative integer
43
+ // (the `z.number().int().min(0)` intent — no `.int()` chain exists here).
44
+ maxAgents: z
45
+ .natural()
46
+ .default(DEFAULT_SUBAGENT_LIMITS.maxAgents)
47
+ .description('Max concurrently running subagents (0 = unlimited)'),
48
+ maxRounds: z
49
+ .natural()
50
+ .default(DEFAULT_SUBAGENT_LIMITS.maxRounds)
51
+ .description('Max rounds per subagent before the TUI sends a summary request (0 = unlimited)'),
52
+ disableSubagent: z
53
+ .boolean()
54
+ .default(DEFAULT_SUBAGENT_LIMITS.disableSubagent)
55
+ .description('Disable the native subagent tool (delegation goes through registered '
56
+ + 'agents, ~/.dsh/agents/*.md via use_agent); subagent_fork/workflow/'
57
+ + 'ralph stay available'),
58
+ footerHints: z
59
+ .object({
60
+ send: z.boolean().default(true).description('Show "Enter: send" in the footer hint bar'),
61
+ stop: z.boolean().default(true).description('Show "Esc ×2: stop" in the footer hint bar'),
62
+ quit: z.boolean().default(true).description('Show "Ctrl+C ×2: quit" in the footer hint bar'),
63
+ quitEmpty: z.boolean().default(true).description('Show "Ctrl+D: quit (empty)" in the footer hint bar'),
64
+ subagents: z.boolean().default(true).description('Show "Ctrl+G: subagents" in the footer hint bar'),
65
+ history: z.boolean().default(true).description('Show "↑↓: history" in the footer hint bar'),
66
+ })
67
+ .default({ ...DEFAULT_FOOTER_HINTS })
68
+ .description('Footer shortcut hints to display (toggle each one on/off)'),
27
69
  });
28
70
  /** Composition entry below the user layer: fall back to the defaults. */
29
71
  const THEME_SETTINGS_ENTRY = {
30
72
  theme: 'auto',
31
73
  panelHeight: DEFAULT_PANEL_HEIGHT,
74
+ maxAgents: DEFAULT_SUBAGENT_LIMITS.maxAgents,
75
+ maxRounds: DEFAULT_SUBAGENT_LIMITS.maxRounds,
76
+ disableSubagent: DEFAULT_SUBAGENT_LIMITS.disableSubagent,
77
+ footerHints: { ...DEFAULT_FOOTER_HINTS },
32
78
  };
33
79
  /**
34
80
  * In-flight namespace registration. The registration rides the settings
@@ -52,10 +98,10 @@ let registrationPromise;
52
98
  * startup.
53
99
  *
54
100
  * @param ctx - plugin context; does nothing while no settings service is mounted.
55
- * @param onPreferenceChange - hot-reload sink for committed `dsh-tui` theme
56
- * and panel-height changes; `undefined` when the namespace is already
57
- * registered (a reloaded plugin instance, a second mount of this bundle) or
58
- * registration fails.
101
+ * @param onPreferenceChange - hot-reload sink for committed `dsh-tui` theme,
102
+ * panel-height and footer-hints changes; `undefined` when the namespace is
103
+ * already registered (a reloaded plugin instance, a second mount of this
104
+ * bundle) or registration fails.
59
105
  */
60
106
  export function registerThemeSettings(ctx, onPreferenceChange) {
61
107
  registrationPromise = new Promise(resolve => {
@@ -78,12 +124,12 @@ export function registerThemeSettings(ctx, onPreferenceChange) {
78
124
  });
79
125
  if (onPreferenceChange !== undefined) {
80
126
  scope.watch((next) => {
81
- // The resolved section is `{ theme: ..., panelHeight: ... }` —
82
- // narrow the unknown to the two observed fields.
127
+ // The resolved section is `{ theme: ..., panelHeight: ...,
128
+ // footerHints: {...} }` — narrow the unknown to the observed fields.
83
129
  const section = next;
84
130
  const theme = section.theme;
85
131
  const panelHeight = section.panelHeight;
86
- onPreferenceChange(theme === 'light' || theme === 'dark' ? theme : 'auto', panelHeight === '7' || panelHeight === '10' || panelHeight === 'all' ? panelHeight : DEFAULT_PANEL_HEIGHT);
132
+ onPreferenceChange(theme === 'light' || theme === 'dark' ? theme : 'auto', panelHeight === '7' || panelHeight === '10' || panelHeight === 'all' ? panelHeight : DEFAULT_PANEL_HEIGHT, narrowFooterHints(section.footerHints));
87
133
  });
88
134
  }
89
135
  }
@@ -97,6 +143,18 @@ export function registerThemeSettings(ctx, onPreferenceChange) {
97
143
  });
98
144
  });
99
145
  }
146
+ /** Validate an unknown `footerHints` value into the typed shape (defaults win). */
147
+ function narrowFooterHints(value) {
148
+ if (value === null || typeof value !== 'object')
149
+ return { ...DEFAULT_FOOTER_HINTS };
150
+ const section = value;
151
+ const hints = { ...DEFAULT_FOOTER_HINTS };
152
+ for (const key of Object.keys(DEFAULT_FOOTER_HINTS)) {
153
+ if (typeof section[key] === 'boolean')
154
+ hints[key] = section[key];
155
+ }
156
+ return hints;
157
+ }
100
158
  /**
101
159
  * The resolved `dsh-tui` section as read from the settings provider, after
102
160
  * waiting for the in-flight registration.
@@ -126,8 +184,8 @@ async function readResolvedSection(ctx) {
126
184
  if (settings === undefined)
127
185
  return undefined;
128
186
  // The descriptor's `value` is the whole resolved section
129
- // (`{ theme: ..., panelHeight: ... }`), not the field itself — narrow the
130
- // unknown to the two observed fields.
187
+ // (`{ theme: ..., panelHeight: ..., footerHints: {...} }`), not the field
188
+ // itself — narrow the unknown to the three observed fields.
131
189
  return settings
132
190
  .describe()
133
191
  .find((descriptor) => descriptor.ns === THEME_SETTINGS_NAMESPACE)?.value;
@@ -158,6 +216,32 @@ export async function readPanelHeightPreference(ctx) {
158
216
  return height;
159
217
  return DEFAULT_PANEL_HEIGHT;
160
218
  }
219
+ /**
220
+ * Read the persisted footer-hint selection (the startup snapshot).
221
+ *
222
+ * @param ctx - plugin context.
223
+ * @returns the resolved `dsh-tui` footerHints object, or DEFAULT_FOOTER_HINTS
224
+ * when the settings service is absent or the namespace/value cannot be read.
225
+ */
226
+ export async function readFooterHintsPreference(ctx) {
227
+ return narrowFooterHints((await readResolvedSection(ctx))?.footerHints);
228
+ }
229
+ /**
230
+ * Read the currently persisted footer-hint selection, synchronously.
231
+ * Unlike `readFooterHintsPreference` (the startup snapshot), this does not
232
+ * wait for the namespace registration - it describes whatever the settings
233
+ * service exposes right now, so a caller can honor a live change immediately.
234
+ * @returns DEFAULT_FOOTER_HINTS when the service, namespace, or value is absent.
235
+ */
236
+ export function currentFooterHints(ctx) {
237
+ const settings = ctx.get('settings');
238
+ if (settings === undefined)
239
+ return { ...DEFAULT_FOOTER_HINTS };
240
+ const hints = settings
241
+ .describe()
242
+ .find((descriptor) => descriptor.ns === THEME_SETTINGS_NAMESPACE)?.value?.footerHints;
243
+ return narrowFooterHints(hints);
244
+ }
161
245
  /**
162
246
  * Read the currently persisted theme preference, synchronously.
163
247
  * Unlike `readThemePreference` (the startup snapshot), this does not wait for
@@ -178,14 +262,14 @@ export function currentThemePreference(ctx) {
178
262
  return 'auto';
179
263
  }
180
264
  /**
181
- * Persist one `dsh-tui` preference (theme or panelHeight) to the settings
182
- * namespace. The namespace is `applies: 'live'`, so the commit (observed
183
- * through the registration's watch hook) hot-applies the change to the
184
- * running TUI. Best-effort: a deployment without a settings provider reports
185
- * the failure; a failed write returns its error message for the caller to
186
- * surface. A concurrent writer moving the namespace rejects with
187
- * `SettingsConflictError` — retried once against a fresh revision; a second
188
- * conflict surfaces a friendly message instead of the raw error.
265
+ * Persist one `dsh-tui` preference (theme, panelHeight, or a subagent limit)
266
+ * to the settings namespace. The namespace is `applies: 'live'`, so the
267
+ * commit (observed through the registration's watch hook) hot-applies the
268
+ * change to the running TUI. Best-effort: a deployment without a settings
269
+ * provider reports the failure; a failed write returns its error message for
270
+ * the caller to surface. A concurrent writer moving the namespace rejects
271
+ * with `SettingsConflictError` — retried once against a fresh revision; a
272
+ * second conflict surfaces a friendly message instead of the raw error.
189
273
  * @returns undefined on success, the failure message otherwise.
190
274
  */
191
275
  async function writeDshTuiPreference(ctx, key, value) {
@@ -220,4 +304,44 @@ async function writeDshTuiPreference(ctx, key, value) {
220
304
  export async function writeThemePreference(ctx, pref) {
221
305
  return writeDshTuiPreference(ctx, 'theme', pref);
222
306
  }
307
+ /**
308
+ * Read the currently resolved subagent limits, synchronously. Unlike the
309
+ * startup-snapshot readers, this does not wait for the namespace registration
310
+ * — it describes whatever the settings service exposes right now, so every
311
+ * policy decision (the guard at each spawn, `onTurnCount` at each child turn)
312
+ * reflects the latest committed value without a watcher. Missing settings
313
+ * service or namespace, or a non-integer/negative field, degrades to the
314
+ * defaults — a settings-less deployment keeps the documented caps.
315
+ */
316
+ export function readSubagentLimits(ctx) {
317
+ const settings = ctx.get('settings');
318
+ if (settings === undefined)
319
+ return { ...DEFAULT_SUBAGENT_LIMITS };
320
+ // The descriptor's `value` is the whole resolved section
321
+ // (`{ theme: ..., panelHeight: ..., maxAgents: ..., maxRounds: ...,
322
+ // disableSubagent: ... }`) — narrow the unknown to the observed fields.
323
+ const section = settings
324
+ .describe()
325
+ .find((descriptor) => descriptor.ns === THEME_SETTINGS_NAMESPACE)?.value;
326
+ const natural = (value, fallback) => typeof value === 'number' && Number.isInteger(value) && value >= 0 ? value : fallback;
327
+ return {
328
+ maxAgents: natural(section?.maxAgents, DEFAULT_SUBAGENT_LIMITS.maxAgents),
329
+ maxRounds: natural(section?.maxRounds, DEFAULT_SUBAGENT_LIMITS.maxRounds),
330
+ disableSubagent: typeof section?.disableSubagent === 'boolean'
331
+ ? section.disableSubagent
332
+ : DEFAULT_SUBAGENT_LIMITS.disableSubagent,
333
+ };
334
+ }
335
+ /**
336
+ * Persist one subagent policy knob (maxAgents, maxRounds, or disableSubagent)
337
+ * to the `dsh-tui` settings namespace. The namespace is `applies: 'live'`, so
338
+ * the commit hot-applies without a restart — the policy reads
339
+ * `readSubagentLimits` at the next decision point. Never throws: a deployment
340
+ * without the settings provider, or an unregistered namespace, surfaces a
341
+ * failure message for the caller.
342
+ * @returns undefined on success, the failure message otherwise.
343
+ */
344
+ export async function writeSubagentLimit(ctx, key, value) {
345
+ return writeDshTuiPreference(ctx, key, value);
346
+ }
223
347
  //# sourceMappingURL=theme-settings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme-settings.js","sourceRoot":"","sources":["../src/theme-settings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"theme-settings.js","sourceRoot":"","sources":["../src/theme-settings.ts"],"names":[],"mappings":"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"}
package/lib/tui.d.ts CHANGED
@@ -20,12 +20,24 @@
20
20
  */
21
21
  import { Container, type AutocompleteProvider, type TUI } from '@earendil-works/pi-tui';
22
22
  import { CwdBorderEditor } from './editor.ts';
23
+ import { type KeyAction, type KeyBindings } from './keymap.ts';
23
24
  import { type ThemePreference, type TuiTheme } from './theme/index.ts';
24
25
  export interface StartTuiOptions {
25
26
  /** Submit handler for the editor. Defaults to a local echo (smoke-test mode). */
26
27
  onSubmit?: (text: string) => void;
27
- /** Ctrl+C handler. Defaults to a plain exit (smoke-test mode). */
28
- onInterrupt?: () => void;
28
+ /**
29
+ * Executes an app-level key action (see keymap.ts for the pi-aligned
30
+ * interrupt chain: double-Esc stop, windowed Ctrl+C, empty-editor Ctrl+D
31
+ * quit). Absent (smoke-test mode): Ctrl+C family and Ctrl+D quit fall back
32
+ * to a plain exit(130); interrupt-arm/arm-stop/double are no-ops.
33
+ */
34
+ onKeyAction?: (action: KeyAction) => void;
35
+ /** Whether the agent is mid-turn; feeds the Esc/Ctrl+C decision. Defaults to false. */
36
+ isRunning?: () => boolean;
37
+ /** Live running-subagent count; feeds the Ctrl+G viewer decision. Defaults to 0. */
38
+ getRunningAgents?: () => number;
39
+ /** User keybindings overrides (`~/.dsh/keybindings.json`); partial merge. */
40
+ keyBindings?: Partial<KeyBindings>;
29
41
  /** Persisted theme preference; 'auto' falls back to terminal detection. */
30
42
  themePreference?: ThemePreference;
31
43
  }
@@ -57,13 +69,13 @@ export interface TuiHandle {
57
69
  */
58
70
  readonly theme: TuiTheme;
59
71
  /**
60
- * Hot-swap the theme bundle: repaints the editor border and the placeholder,
61
- * and updates every subsequent `theme` read. Transcript repainting is the
62
- * TranscriptRenderer's job (`setTheme`), and the last-request / running-agent
63
- * lines are the LiveWidgets' job (`setTheme`) — both owned by the caller;
64
- * call them before `applyTheme` so the one throttled render frame paints
65
- * everything at once. No-op when the bundle is unchanged (themes are module
66
- * singletons).
72
+ * Hot-swap the theme bundle: repaints the canvas background, the editor
73
+ * border and the placeholder, and updates every subsequent `theme` read.
74
+ * Transcript repainting is the TranscriptRenderer's job (`setTheme`), and
75
+ * the last-request / running-agent lines are the LiveWidgets' job
76
+ * (`setTheme`) — both owned by the caller; call them before `applyTheme`
77
+ * so the one throttled render frame paints everything at once. No-op when
78
+ * the bundle is unchanged (themes are module singletons).
67
79
  */
68
80
  applyTheme(theme: TuiTheme): void;
69
81
  /** Autocomplete provider for the editor; re-applied across editor rebuilds. */
@@ -72,5 +84,7 @@ export interface TuiHandle {
72
84
  setEditorBranchProvider(provider: () => string | undefined): void;
73
85
  /** Live permission-preset display-name source for the editor; re-applied across editor rebuilds. */
74
86
  setEditorPermissionProvider(provider: () => string | undefined): void;
87
+ /** Swap the user keybindings live (`/hotkeys` writes → apply immediately). */
88
+ setKeyBindings(bindings: Partial<KeyBindings>): void;
75
89
  }
76
90
  export declare function startTui(options?: StartTuiOptions): TuiHandle;