@wrongstack/tui 0.306.0 → 0.306.3

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 (36) hide show
  1. package/dist/app-action-type.d.ts +31 -2
  2. package/dist/app-props.d.ts +6 -2
  3. package/dist/app-settings-type.d.ts +6 -0
  4. package/dist/app-state.d.ts +19 -2
  5. package/dist/app-view-contract.d.ts +6 -0
  6. package/dist/components/cron-jobs.d.ts +2 -1
  7. package/dist/components/history/assistant.d.ts +9 -1
  8. package/dist/components/history/code-block.d.ts +8 -1
  9. package/dist/components/history/tool-group.d.ts +10 -1
  10. package/dist/components/model-picker.d.ts +17 -1
  11. package/dist/components/prompt-picker.d.ts +3 -1
  12. package/dist/components/resource-menu.d.ts +16 -0
  13. package/dist/components/skill-picker.d.ts +12 -0
  14. package/dist/components/theme-picker.d.ts +25 -1
  15. package/dist/components/theme-preview.d.ts +39 -0
  16. package/dist/hooks/use-app-picker-keys.d.ts +2 -1
  17. package/dist/hooks/use-file-search.d.ts +5 -0
  18. package/dist/hooks/use-history-archive.d.ts +30 -0
  19. package/dist/hooks/use-history-viewport-sync.d.ts +10 -0
  20. package/dist/hooks/use-mouse-tracking.d.ts +3 -0
  21. package/dist/hooks/use-picker-keys-types.d.ts +2 -0
  22. package/dist/hooks/use-prompt-picker.d.ts +2 -1
  23. package/dist/hooks/use-tui-slash-commands.d.ts +4 -1
  24. package/dist/hooks/use-windowed-picker.d.ts +35 -5
  25. package/dist/index.d.ts +2 -0
  26. package/dist/index.js +2916 -1466
  27. package/dist/input-validation/action-types.d.ts +1 -1
  28. package/dist/markdown.d.ts +10 -1
  29. package/dist/mouse.d.ts +37 -0
  30. package/dist/reducers/composer.d.ts +1 -1
  31. package/dist/reducers/helpers.d.ts +1 -1
  32. package/dist/run-tui-options.d.ts +5 -1
  33. package/dist/slash-command-lifecycle.d.ts +17 -0
  34. package/dist/submit-controller.d.ts +3 -0
  35. package/dist/ui-contracts.d.ts +34 -0
  36. package/package.json +7 -7
@@ -1,4 +1,4 @@
1
1
  /** Known reducer action types — exact, compile-time checked allow-list. */
2
- export declare const ALLOWED_ACTION_TYPES: readonly ["addEntry", "archiveLoaded", "startArchiveLoad", "authBusy", "authCatalog", "authClose", "authConfirmEnd", "authConfirmStart", "authFilter", "authFlowDone", "authFlowLog", "authFlowStart", "authHint", "authMove", "authOpen", "authPromptChange", "authPromptEnd", "authPromptStart", "authProviders", "authView", "autonomyPickerClose", "autonomyPickerHint", "autonomyPickerMove", "autonomyPickerOpen", "brainBusy", "brainClose", "brainHint", "brainMove", "brainOpen", "brainPromptClear", "brainPromptSet", "brainRiskChange", "brainRowMove", "brainSetLog", "brainSettingsLoaded", "brainStatus", "brainView", "checkpointReceived", "clearConfirmClose", "clearConfirmOpen", "clearConfirmSetValue", "clearHistory", "clearInput", "clearInputHistory", "closeAllPanels", "collabBugFound", "collabEvalComplete", "sidebarScroll", "sidebarScrollReset", "toggleSidebarFocus", "collabPlanEmitted", "collabSessionDone", "collabSubagentSpawned", "compactHistory", "confirmClearAll", "confirmClose", "confirmOpen", "continueConfirmClose", "continueConfirmOpen", "copiedNotice", "coordinatorEvent", "countdownEnded", "countdownTick", "debugStreamStats", "debugStreamStatsClear", "dequeueFirst", "designPickerClose", "designPickerMove", "designPickerOpen", "designPickerStack", "enhanceBusy", "enhanceClose", "enhanceOpen", "enhanceSet", "enqueue", "escConfirmClose", "escConfirmOpen", "fallbackOverlayClose", "fallbackOverlayMove", "fallbackOverlayOpen", "eternalStage", "exitConfirmClose", "exitConfirmOpen", "fKeyPickerClose", "fKeyPickerMove", "fKeyPickerOpen", "fleetBatch", "fleetBudgetExtended", "fleetBudgetWarning", "fleetConcurrency", "fleetCost", "fleetCtxPct", "fleetDelta", "fleetDone", "fleetMessage", "fleetRemove", "fleetSeed", "fleetSpawn", "fleetStart", "fleetTool", "fleetToolEnd", "fleetToolStart", "fleetUsage", "goalRunElapsed", "goalRunInit", "goalRunMonitorToggle", "goalRunPhaseUpdate", "goalRunReset", "goalRunRunningPhases", "goalRunTaskActive", "goalSummary", "helpClose", "helpFilter", "helpHint", "helpMove", "helpOpen", "hint", "historyDown", "historyPush", "historyUp", "interrupt", "leaderCtxPct", "leaderIterEnd", "leaderIterStart", "leaderToolEnd", "leaderToolStart", "mcpPickerBusy", "mcpPickerClose", "mcpPickerHint", "mcpPickerMove", "mcpPickerOpen", "mcpPickerSetItems", "modePickerClose", "modePickerHint", "modePickerMove", "modePickerOpen", "modelPickerBack", "modelPickerClose", "modelPickerHint", "modelPickerMove", "modelPickerOpen", "modelPickerPickProvider", "modelPickerSearch", "pickerClose", "pickerMove", "pickerOpen", "pickerSetMatches", "pluginPickerBusy", "pluginPickerClose", "pluginPickerHint", "pluginPickerMove", "pluginPickerOpen", "pluginPickerSetItems", "projectPickerClose", "projectPickerFilter", "projectPickerHint", "projectPickerMove", "projectPickerOpen", "promptPickerCategory", "promptPickerClose", "promptPickerMove", "promptPickerOpen", "queueClear", "queueDelete", "queueToggleRefine", "refineCountdownClose", "refineCountdownOpen", "refineFailureClose", "refineFailureOpen", "replaceHistory", "resetContextChip", "resetInterrupts", "resumePickerBusy", "resumePickerClose", "resumePickerError", "resumePickerHint", "resumePickerMove", "resumePickerOpen", "rewindOverlayClose", "rewindOverlayMove", "rewindOverlayOpen", "sddBoardSnapshot", "sddBoardFocusNext", "sddBoardFocusPrev", "sendModePickerClose", "sendModePickerMove", "sendModePickerOpen", "sessionResumeConfirmClear", "sessionResumeConfirmSet", "sessionRewound", "sessionsPanelBusy", "sessionsPanelMove", "sessionsPanelSet", "setBuffer", "setFleetChat", "setHistoryScrolled", "setInputHistory", "setViewportRows", "settingsClose", "settingsFieldMove", "settingsFieldSet", "settingsFilterSet", "settingsHint", "settingsOpen", "settingsThinkingEditCancel", "settingsThinkingEditChange", "settingsThinkingEditCommit", "settingsThinkingEditStart", "settingsValueChange", "settingsValueSet", "shadowClose", "shadowHint", "shadowOpen", "shadowUpdate", "shellCommandWarningClose", "shellCommandWarningOpen", "slashConfirmClose", "slashConfirmOpen", "slashPickerClose", "slashPickerMove", "slashPickerOpen", "status", "statuslineChipExpire", "statuslineChipShow", "statuslineClose", "statuslineFieldMove", "statuslineFieldSet", "statuslineHint", "statuslineOpen", "statuslineToggle", "statuslineVisibleChipsSync", "steerConsume", "steerStart", "streamDelta", "streamReset", "themePickerClose", "themePickerHint", "themePickerMove", "themePickerOpen", "toggleAgentsMonitor", "toggleAuditPanel", "toggleContextPanel", "toggleConnectionsPanel", "toggleCoordinatorMonitor", "toggleCronMonitor", "toggleGoalKanbanPanel", "toggleGoalPanel", "toggleHelp", "toggleKanbanPanel", "toggleMonitor", "togglePlanPanel", "toggleProcessList", "toggleQueuePanel", "toggleSddBoardMonitor", "toggleSessionsPanel", "toggleTodosMonitor", "toggleWorktreeMonitor", "toolEnded", "toolStarted", "toolStreamAppend", "toolStreamClear", "topicCheckBusy", "toolsPickerBusy", "toolsPickerClose", "toolsPickerFilter", "toolsPickerHint", "toolsPickerMove", "toolsPickerOpen", "toolsPickerSetItems", "toolsPickerToggle", "worktreeRemove", "worktreeUpsert"];
2
+ export declare const ALLOWED_ACTION_TYPES: readonly ["addEntry", "archiveLoaded", "startArchiveLoad", "authBusy", "authCatalog", "authClose", "authConfirmEnd", "authConfirmStart", "authFilter", "authFlowDone", "authFlowLog", "authFlowStart", "authHint", "authMove", "authOpen", "authPromptChange", "authPromptEnd", "authPromptStart", "authProviders", "authView", "autonomyPickerClose", "autonomyPickerHint", "autonomyPickerMove", "autonomyPickerOpen", "brainBusy", "brainClose", "brainHint", "brainMove", "brainOpen", "brainPromptClear", "brainPromptSet", "brainRiskChange", "brainRowMove", "brainSetLog", "brainSettingsLoaded", "brainStatus", "brainView", "checkpointReceived", "clearConfirmClose", "clearConfirmOpen", "clearConfirmSetValue", "clearHistory", "clearInput", "clearInputHistory", "closeAllPanels", "collabBugFound", "collabEvalComplete", "sidebarScroll", "sidebarScrollReset", "toggleSidebarFocus", "skillPickerClose", "skillPickerHint", "skillPickerMove", "skillPickerOpen", "resourceMenuClose", "resourceMenuConfirm", "resourceMenuFilter", "resourceMenuHint", "resourceMenuMove", "resourceMenuOpen", "collabPlanEmitted", "collabSessionDone", "collabSubagentSpawned", "compactHistory", "confirmClearAll", "confirmClose", "confirmOpen", "continueConfirmClose", "continueConfirmOpen", "copiedNotice", "coordinatorEvent", "countdownEnded", "countdownTick", "debugStreamStats", "debugStreamStatsClear", "dequeueFirst", "designPickerClose", "designPickerMove", "designPickerOpen", "designPickerStack", "enhanceBusy", "enhanceClose", "enhanceOpen", "enhanceSet", "enqueue", "escConfirmClose", "escConfirmOpen", "fallbackOverlayClose", "fallbackOverlayMove", "fallbackOverlayOpen", "eternalStage", "exitConfirmClose", "exitConfirmOpen", "fKeyPickerClose", "fKeyPickerMove", "fKeyPickerOpen", "fleetBatch", "fleetBudgetExtended", "fleetBudgetWarning", "fleetConcurrency", "fleetCost", "fleetCtxPct", "fleetDelta", "fleetDone", "fleetMessage", "fleetRemove", "fleetSeed", "fleetSpawn", "fleetStart", "fleetTool", "fleetToolEnd", "fleetToolStart", "fleetUsage", "goalRunElapsed", "goalRunInit", "goalRunMonitorToggle", "goalRunPhaseUpdate", "goalRunReset", "goalRunRunningPhases", "goalRunTaskActive", "goalSummary", "helpClose", "helpFilter", "helpHint", "helpMove", "helpOpen", "hint", "historyDown", "historyPush", "historyUp", "interrupt", "leaderCtxPct", "leaderIterEnd", "leaderIterStart", "leaderToolEnd", "leaderToolStart", "mcpPickerBusy", "mcpPickerClose", "mcpPickerHint", "mcpPickerMove", "mcpPickerOpen", "mcpPickerSetItems", "modePickerClose", "modePickerHint", "modePickerMove", "modePickerOpen", "modelPickerBack", "modelPickerClose", "modelPickerHint", "modelPickerMove", "modelPickerOpen", "modelPickerPickProvider", "modelPickerSearch", "pickerClose", "pickerMove", "pickerOpen", "pickerSetMatches", "pluginPickerBusy", "pluginPickerClose", "pluginPickerHint", "pluginPickerMove", "pluginPickerOpen", "pluginPickerSetItems", "projectPickerClose", "projectPickerFilter", "projectPickerHint", "projectPickerMove", "projectPickerOpen", "promptPickerCategory", "promptPickerClose", "promptPickerMove", "promptPickerOpen", "queueClear", "queueDelete", "queueToggleRefine", "refineCountdownClose", "refineCountdownOpen", "refineFailureClose", "refineFailureOpen", "replaceHistory", "resetContextChip", "resetInterrupts", "resumePickerBusy", "resumePickerClose", "resumePickerError", "resumePickerHint", "resumePickerMove", "resumePickerOpen", "rewindOverlayClose", "rewindOverlayMove", "rewindOverlayOpen", "sddBoardSnapshot", "sddBoardFocusNext", "sddBoardFocusPrev", "sendModePickerClose", "sendModePickerMove", "sendModePickerOpen", "sessionResumeConfirmClear", "sessionResumeConfirmSet", "sessionRewound", "sessionsPanelBusy", "sessionsPanelMove", "sessionsPanelSet", "setBuffer", "setFleetChat", "setHistoryScrolled", "setInputHistory", "setViewportRows", "settingsClose", "settingsFieldMove", "settingsFieldSet", "settingsFilterSet", "settingsHint", "settingsOpen", "settingsThinkingEditCancel", "settingsThinkingEditChange", "settingsThinkingEditCommit", "settingsThinkingEditStart", "settingsValueChange", "settingsValueSet", "shadowClose", "shadowHint", "shadowOpen", "shadowUpdate", "shellCommandWarningClose", "shellCommandWarningOpen", "slashConfirmClose", "slashConfirmOpen", "slashPickerClose", "slashPickerMove", "slashPickerOpen", "status", "statuslineChipExpire", "statuslineChipShow", "statuslineClose", "statuslineFieldMove", "statuslineFieldSet", "statuslineHint", "statuslineOpen", "statuslineToggle", "statuslineVisibleChipsSync", "steerConsume", "steerStart", "streamDelta", "streamReset", "themePickerClose", "themePickerHint", "themePickerMove", "themePickerOpen", "toggleAgentsMonitor", "toggleAuditPanel", "toggleContextPanel", "toggleConnectionsPanel", "toggleCoordinatorMonitor", "toggleCronMonitor", "toggleGoalKanbanPanel", "toggleGoalPanel", "toggleHelp", "toggleKanbanPanel", "toggleMonitor", "togglePlanPanel", "toggleProcessList", "toggleQueuePanel", "toggleSddBoardMonitor", "toggleSessionsPanel", "toggleTodosMonitor", "toggleWorktreeMonitor", "toolEnded", "toolStarted", "toolStreamAppend", "toolStreamClear", "topicCheckBusy", "toolsPickerBusy", "toolsPickerClose", "toolsPickerFilter", "toolsPickerHint", "toolsPickerMove", "toolsPickerOpen", "toolsPickerSetItems", "toolsPickerToggle", "worktreeRemove", "worktreeUpsert"];
3
3
  export type AllowedActionType = (typeof ALLOWED_ACTION_TYPES)[number];
4
4
  //# sourceMappingURL=action-types.d.ts.map
@@ -29,7 +29,7 @@ export declare function parseInline(text: string): InlineToken[];
29
29
  * background so any empty space on the right of a narrow table is filled
30
30
  * with the panel background rather than showing the terminal background.
31
31
  */
32
- export declare function MarkdownView({ text, termWidth, contentWidth, tableWidth, }: {
32
+ declare function MarkdownViewImpl({ text, termWidth, contentWidth, tableWidth, }: {
33
33
  text: string;
34
34
  termWidth: number;
35
35
  /** Real inner width of the surrounding panel. Defaults to `termWidth`. */
@@ -37,4 +37,13 @@ export declare function MarkdownView({ text, termWidth, contentWidth, tableWidth
37
37
  /** Width available for tables. Defaults to `contentWidth ?? termWidth`. */
38
38
  tableWidth?: number | undefined;
39
39
  }): React.ReactElement;
40
+ /**
41
+ * Markdown renderer.
42
+ *
43
+ * Memoized: re-parsing prose on every streamed chunk was the bulk of the
44
+ * per-frame cost for long answers. Only the segment whose text changed is
45
+ * re-parsed now.
46
+ */
47
+ export declare const MarkdownView: React.MemoExoticComponent<typeof MarkdownViewImpl>;
48
+ export {};
40
49
  //# sourceMappingURL=markdown.d.ts.map
package/dist/mouse.d.ts CHANGED
@@ -38,6 +38,20 @@ export interface MouseTrackingPolicy {
38
38
  * scrollback cannot move virtualized content.
39
39
  */
40
40
  managedHistory: boolean;
41
+ /**
42
+ * The user explicitly handed the mouse back to the terminal (`/mouse native`).
43
+ *
44
+ * This is the ONLY input that can defeat `managedHistory`, and it exists
45
+ * because nothing else could: with tracking on, the terminal reports the
46
+ * wheel to us instead of scrolling, which also means it never starts a
47
+ * native selection — so there was no way to select and copy transcript text
48
+ * with the mouse at all. Native mode trades in-app wheel scrolling (PgUp/
49
+ * PgDn and Ctrl+U/D still page) for that selection.
50
+ *
51
+ * It outranks `overlayOpen` too: letting a picker silently re-grab the mouse
52
+ * would cancel an in-progress drag-selection.
53
+ */
54
+ native?: boolean | undefined;
41
55
  /** Startup terminal capability probe. Undefined keeps legacy callers enabled. */
42
56
  protocol?: 'none' | 'x10' | 'urxvt' | 'sgr' | undefined;
43
57
  }
@@ -81,6 +95,29 @@ export declare function parseMouseEvent(data: string): MouseEventInfo | null;
81
95
  * data contains no report.
82
96
  */
83
97
  export declare function parseMouseEvents(data: string): MouseEventInfo[];
98
+ /**
99
+ * Longest tail of `data` that is an SGR report the terminal has only partially
100
+ * delivered, split off so the caller can carry it into the next chunk.
101
+ *
102
+ * A report is `ESC [ < b ; x ; y (M|m)` — up to ~18 bytes, and stdin makes no
103
+ * promise about chunk boundaries. A fast drag or a wheel burst readily splits
104
+ * one across two `data` events, and {@link parseMouseEvents} (which scans a
105
+ * single chunk) then matches NEITHER half: the gesture is silently dropped and
106
+ * the leading half falls through to the key parsers as garbage.
107
+ *
108
+ * Only the unambiguous case is held back: a trailing `ESC [ <` with no `M`/`m`
109
+ * terminator after it. A bare trailing `ESC` or `ESC [` is deliberately NOT
110
+ * buffered — a lone `ESC` is how the Esc KEY arrives, and swallowing it would
111
+ * break the Esc ladder outright.
112
+ *
113
+ * The carry is capped: past {@link MAX_PARTIAL_MOUSE} bytes the tail cannot be
114
+ * a real report any more (a malformed or hostile stream), so it is released as
115
+ * ordinary data rather than accumulating forever.
116
+ */
117
+ export declare function splitTrailingMousePartial(data: string): {
118
+ consumed: string;
119
+ pending: string;
120
+ };
84
121
  /**
85
122
  * True when `input` (Ink's already-ESC-stripped text) is a leaked mouse report.
86
123
  * The input layer drops these so they never land in the buffer as typed text.
@@ -1,6 +1,6 @@
1
1
  import type { Action } from '../app-action-type.js';
2
2
  import type { State } from '../app-state.js';
3
- declare const composerActionTypes: readonly ["brainPromptSet", "brainPromptClear", "pickerOpen", "pickerClose", "pickerSetMatches", "pickerMove", "toolStarted", "toolEnded", "toolStreamAppend", "toolStreamClear", "enqueue", "dequeueFirst", "queueClear", "queueDelete", "queueToggleRefine", "slashPickerOpen", "slashPickerClose", "slashPickerMove", "historyPush", "historyUp", "historyDown", "setInputHistory", "clearInputHistory", "modelPickerOpen", "modelPickerClose", "modelPickerMove", "modelPickerPickProvider", "modelPickerBack", "modelPickerSearch", "modelPickerHint", "autonomyPickerOpen", "autonomyPickerClose", "autonomyPickerMove", "autonomyPickerHint", "themePickerOpen", "themePickerClose", "themePickerMove", "themePickerHint", "modePickerOpen", "modePickerClose", "modePickerMove", "modePickerHint", "designPickerOpen", "designPickerClose", "designPickerMove", "designPickerStack", "promptPickerOpen", "promptPickerClose", "promptPickerMove", "promptPickerCategory", "resumePickerOpen", "resumePickerClose", "resumePickerMove", "resumePickerBusy", "resumePickerHint", "resumePickerError", "replaceHistory"];
3
+ declare const composerActionTypes: readonly ["brainPromptSet", "brainPromptClear", "pickerOpen", "pickerClose", "pickerSetMatches", "pickerMove", "toolStarted", "toolEnded", "toolStreamAppend", "toolStreamClear", "enqueue", "dequeueFirst", "queueClear", "queueDelete", "queueToggleRefine", "slashPickerOpen", "slashPickerClose", "slashPickerMove", "historyPush", "historyUp", "historyDown", "setInputHistory", "clearInputHistory", "modelPickerOpen", "modelPickerClose", "modelPickerMove", "modelPickerPickProvider", "modelPickerBack", "modelPickerSearch", "modelPickerHint", "autonomyPickerOpen", "autonomyPickerClose", "autonomyPickerMove", "autonomyPickerHint", "themePickerOpen", "themePickerClose", "themePickerMove", "themePickerHint", "modePickerOpen", "modePickerClose", "modePickerMove", "modePickerHint", "skillPickerOpen", "skillPickerClose", "skillPickerMove", "skillPickerHint", "resourceMenuOpen", "resourceMenuClose", "resourceMenuMove", "resourceMenuHint", "resourceMenuFilter", "resourceMenuConfirm", "designPickerOpen", "designPickerClose", "designPickerMove", "designPickerStack", "promptPickerOpen", "promptPickerClose", "promptPickerMove", "promptPickerCategory", "resumePickerOpen", "resumePickerClose", "resumePickerMove", "resumePickerBusy", "resumePickerHint", "resumePickerError", "replaceHistory"];
4
4
  type ComposerAction = Extract<Action, {
5
5
  type: (typeof composerActionTypes)[number];
6
6
  }>;
@@ -1,6 +1,6 @@
1
1
  import type { State } from '../app-state.js';
2
2
  import type { ProjectPickerItem } from '../ui-contracts.js';
3
- type PanelResetState = Pick<State, 'monitorOpen' | 'agentsMonitorOpen' | 'helpOpen' | 'todosMonitorOpen' | 'queuePanelOpen' | 'processListOpen' | 'cronMonitorOpen' | 'auditPanelOpen' | 'planPanelOpen' | 'kanbanPanelOpen' | 'goalPanelOpen' | 'goalKanbanPanelOpen' | 'contextPanelOpen' | 'connectionsPanelOpen' | 'sessionsPanelOpen' | 'sidebarFocused' | 'settingsPicker' | 'statuslinePicker' | 'pluginPicker' | 'mcpPicker' | 'toolsPicker' | 'brainPanel' | 'helpPanel' | 'shadowPanel' | 'authPanel' | 'projectPicker' | 'fKeyPicker' | 'goalRun' | 'sddBoard' | 'worktreeMonitorOpen' | 'coordinator' | 'themePicker'>;
3
+ type PanelResetState = Pick<State, 'monitorOpen' | 'agentsMonitorOpen' | 'helpOpen' | 'todosMonitorOpen' | 'queuePanelOpen' | 'processListOpen' | 'cronMonitorOpen' | 'auditPanelOpen' | 'planPanelOpen' | 'kanbanPanelOpen' | 'goalPanelOpen' | 'goalKanbanPanelOpen' | 'contextPanelOpen' | 'connectionsPanelOpen' | 'sessionsPanelOpen' | 'sidebarFocused' | 'settingsPicker' | 'statuslinePicker' | 'pluginPicker' | 'mcpPicker' | 'toolsPicker' | 'brainPanel' | 'helpPanel' | 'shadowPanel' | 'authPanel' | 'projectPicker' | 'fKeyPicker' | 'goalRun' | 'sddBoard' | 'worktreeMonitorOpen' | 'coordinator' | 'themePicker' | 'skillPicker' | 'resourceMenu'>;
4
4
  export declare function closePanels(state: State): PanelResetState;
5
5
  export declare function clampContextLoad(load: number): number;
6
6
  /** Upper bound on the live tool-stream text retained in state. */
@@ -3,7 +3,7 @@ import type { AutonomousCoordinator, CoordinatorEvent, Director } from '@wrongst
3
3
  import type { EventBus } from '@wrongstack/core/kernel';
4
4
  import type { SlashCommandRegistry } from '@wrongstack/core/registry';
5
5
  import type { QueueStore } from '@wrongstack/core/storage';
6
- import type { AttachmentStore, AutonomyStage, ConfigStore, ContextSnapshot, FleetChatVerbosity, Message, ThemePresetId, TokenCounter, TokenSavingTier } from '@wrongstack/core/types';
6
+ import type { AttachmentStore, AutonomyStage, ConfigStore, ContextSnapshot, FleetChatVerbosity, Message, SkillLoader, ThemePresetId, TokenCounter, TokenSavingTier } from '@wrongstack/core/types';
7
7
  import type { VisionAdapters } from '@wrongstack/runtime/vision';
8
8
  import type { SddLifecycleResult, SddRunControl } from '@wrongstack/sdd';
9
9
  import type { AgentTranscriptReader } from './components/agents-monitor.js';
@@ -11,9 +11,13 @@ import type { McpPickerItem } from './components/mcp-picker.js';
11
11
  import type { PluginPickerItem } from './components/plugin-picker.js';
12
12
  import type { StatuslineItem } from './components/statusline-picker.js';
13
13
  import type { ToolPickerItem } from './components/tools-picker.js';
14
+ import type { ResourceMenuId, ResourceMenuSnapshot } from './ui-contracts.js';
14
15
  export interface RunTuiOptions {
15
16
  agent: Agent;
16
17
  slashRegistry: SlashCommandRegistry;
18
+ /** Shared loader used by the interactive `/skill` browser. */
19
+ skillLoader?: SkillLoader | undefined;
20
+ getResourceMenu?: ((id: ResourceMenuId) => Promise<ResourceMenuSnapshot>) | undefined;
17
21
  /** Host-owned mutable bridge for slash commands that need masked input. */
18
22
  secretInputController?: {
19
23
  readSecret(prompt: string): Promise<string>;
@@ -0,0 +1,17 @@
1
+ import type { SlashCommandRegistry } from '@wrongstack/core/registry';
2
+ import type { SlashCommand } from '@wrongstack/core/types';
3
+ export interface SlashCommandRegistrationOptions {
4
+ owner?: string | undefined;
5
+ official?: boolean | undefined;
6
+ }
7
+ /**
8
+ * Register a slash command and return an ownership-safe teardown callback.
9
+ *
10
+ * The shared registry uses last-write-wins for official commands and removes
11
+ * every alias/namespace for the selected command on unregister. React effects
12
+ * therefore cannot safely pair `register()` with a bare `unregister(name)`:
13
+ * registration may have been a no-op, or it may have replaced a canonical
14
+ * host command that must become visible again after the TUI unmounts.
15
+ */
16
+ export declare function registerSlashCommandLifecycle(registry: SlashCommandRegistry, command: SlashCommand, options?: SlashCommandRegistrationOptions): () => void;
17
+ //# sourceMappingURL=slash-command-lifecycle.d.ts.map
@@ -11,6 +11,8 @@ export interface SubmitControllerHost {
11
11
  readonly state: State;
12
12
  readonly live: {
13
13
  readonly mouseMode: boolean;
14
+ /** Mouse tracking released to the terminal (`/mouse native`). */
15
+ readonly nativeMouse: boolean;
14
16
  readonly model: string;
15
17
  readonly provider: string;
16
18
  readonly maxContext: number | undefined;
@@ -18,6 +20,7 @@ export interface SubmitControllerHost {
18
20
  readonly autonomy: 'off' | 'suggest' | 'auto' | 'eternal' | 'eternal-parallel';
19
21
  readonly modeLabel: string | undefined;
20
22
  setMouseMode(value: boolean): void;
23
+ setNativeMouse(value: boolean): void;
21
24
  setModel(value: string): void;
22
25
  setProvider(value: string): void;
23
26
  setMaxContext(value: number): void;
@@ -9,6 +9,12 @@ import type { StatuslineItem as StatuslineItemSource } from './components/status
9
9
  * rendered layout.
10
10
  */
11
11
  export declare const SIDEBAR_MISSION_ROWS = 8;
12
+ /**
13
+ * Maximum outer height of the /settings picker, including its border. Small
14
+ * terminals still use their smaller available-height budget; large terminals
15
+ * stop growing here instead of allowing the picker to fill the screen.
16
+ */
17
+ export declare const SETTINGS_PICKER_MAX_HEIGHT = 24;
12
18
  /**
13
19
  * Field index where the per-panel-position rows begin. The first 46
14
20
  * indices (0–45) are the legacy auto-rebuilt Settings surface; rows 46+
@@ -154,6 +160,34 @@ export interface PromptPickEntry {
154
160
  content: string;
155
161
  favorite: boolean;
156
162
  }
163
+ export type ResourceMenuId = 'fallback' | 'profile' | 'provider-status' | 'memory' | 'worktree' | 'git';
164
+ export interface ResourceMenuDetail {
165
+ label: string;
166
+ value: string;
167
+ }
168
+ export interface ResourceMenuAction {
169
+ key: string;
170
+ label: string;
171
+ command: string;
172
+ /** Destructive or session-changing actions require a second y/n keypress. */
173
+ confirm?: boolean | undefined;
174
+ }
175
+ export interface ResourceMenuItem {
176
+ id: string;
177
+ label: string;
178
+ status?: 'good' | 'warn' | 'bad' | 'muted' | undefined;
179
+ summary?: string | undefined;
180
+ details: ResourceMenuDetail[];
181
+ body?: string | undefined;
182
+ actions?: ResourceMenuAction[] | undefined;
183
+ }
184
+ export interface ResourceMenuSnapshot {
185
+ id: ResourceMenuId;
186
+ title: string;
187
+ subtitle?: string | undefined;
188
+ emptyText?: string | undefined;
189
+ items: ResourceMenuItem[];
190
+ }
157
191
  export type SendMode = 'queue' | 'btw' | 'steer';
158
192
  export type StatuslineItem = StatuslineItemSource;
159
193
  export interface ChipMeta {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wrongstack/tui",
3
- "version": "0.306.0",
3
+ "version": "0.306.3",
4
4
  "license": "MIT",
5
5
  "description": "WrongStack terminal UI: Ink-based interactive renderer with history, pickers, and slash menus.",
6
6
  "repository": {
@@ -29,12 +29,12 @@
29
29
  "ink": "7.1.1",
30
30
  "react": "^19.2.8",
31
31
  "string-width": "8.2.2",
32
- "@wrongstack/runtime": "0.306.0",
33
- "@wrongstack/core": "0.306.0",
34
- "@wrongstack/tools": "0.306.0",
35
- "@wrongstack/sage": "0.306.0",
36
- "@wrongstack/sdd": "0.306.0",
37
- "@wrongstack/kanban": "0.306.0"
32
+ "@wrongstack/core": "0.306.3",
33
+ "@wrongstack/runtime": "0.306.3",
34
+ "@wrongstack/sage": "0.306.3",
35
+ "@wrongstack/kanban": "0.306.3",
36
+ "@wrongstack/sdd": "0.306.3",
37
+ "@wrongstack/tools": "0.306.3"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@testing-library/dom": "^10.4.1",