@wrongstack/tui 1.0.19 → 1.0.26

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 (159) hide show
  1. package/dist/app-action-type.d.ts +85 -1
  2. package/dist/app-key-handler.d.ts +1 -1
  3. package/dist/app-panel-state.d.ts +561 -0
  4. package/dist/app-props.d.ts +21 -1
  5. package/dist/app-reducer.d.ts +1 -1
  6. package/dist/app-state-core-types.d.ts +13 -0
  7. package/dist/app-state.d.ts +8 -534
  8. package/dist/app-status-region.d.ts +2 -1
  9. package/dist/app-ui-state.d.ts +2 -0
  10. package/dist/app-view-contract.d.ts +1 -1
  11. package/dist/app-view-pickers.d.ts +2 -1
  12. package/dist/app-view-state.d.ts +2 -0
  13. package/dist/app.d.ts +2 -2
  14. package/dist/auth-panel-model.d.ts +1 -0
  15. package/dist/background-strip-model.d.ts +65 -0
  16. package/dist/brain-panel-model.d.ts +7 -7
  17. package/dist/chat-search-slash.d.ts +15 -0
  18. package/dist/clipboard.d.ts +14 -1
  19. package/dist/components/agent-monitor-presentation.d.ts +61 -0
  20. package/dist/components/agents-monitor.d.ts +3 -49
  21. package/dist/components/audit-panel.d.ts +2 -1
  22. package/dist/components/auth-panel.d.ts +3 -1
  23. package/dist/components/background-strip.d.ts +20 -0
  24. package/dist/components/brain-panel.d.ts +3 -1
  25. package/dist/components/chat-search-bar.d.ts +19 -0
  26. package/dist/components/checkpoint-timeline.d.ts +7 -3
  27. package/dist/components/confirm-prompt.d.ts +6 -7
  28. package/dist/components/connections-panel.d.ts +2 -1
  29. package/dist/components/context-panel-sections.d.ts +53 -0
  30. package/dist/components/context-panel-types.d.ts +66 -0
  31. package/dist/components/context-panel.d.ts +2 -66
  32. package/dist/components/exit-confirm-panel.d.ts +2 -0
  33. package/dist/components/file-picker.d.ts +2 -1
  34. package/dist/components/help-panel.d.ts +5 -3
  35. package/dist/components/history/code-block.d.ts +2 -136
  36. package/dist/components/history/diff-model.d.ts +143 -0
  37. package/dist/components/history/scroll-controller-types.d.ts +11 -0
  38. package/dist/components/history/scrollbar-rail.d.ts +14 -2
  39. package/dist/components/history/use-history-controller.d.ts +5 -0
  40. package/dist/components/history/utils.d.ts +3 -9
  41. package/dist/components/history/visual-tool-output.d.ts +8 -0
  42. package/dist/components/input.d.ts +1 -1
  43. package/dist/components/kanban-panel-presentation.d.ts +114 -0
  44. package/dist/components/kanban-panel.d.ts +2 -47
  45. package/dist/components/mailbox-panel.d.ts +2 -1
  46. package/dist/components/mcp-picker.d.ts +3 -1
  47. package/dist/components/mode-picker.d.ts +3 -1
  48. package/dist/components/model-picker.d.ts +1 -1
  49. package/dist/components/monitor-shell.d.ts +19 -4
  50. package/dist/components/phase-monitor.d.ts +3 -1
  51. package/dist/components/plugin-picker.d.ts +3 -1
  52. package/dist/components/powerline-rail.d.ts +6 -3
  53. package/dist/components/prompt-picker-model.d.ts +16 -0
  54. package/dist/components/prompt-picker.d.ts +2 -16
  55. package/dist/components/provider-colors.d.ts +2 -12
  56. package/dist/components/refine-countdown-panel.d.ts +4 -3
  57. package/dist/components/resource-menu-model.d.ts +3 -0
  58. package/dist/components/resource-menu.d.ts +3 -3
  59. package/dist/components/scrollable-history.d.ts +1 -1
  60. package/dist/components/send-mode-model.d.ts +44 -0
  61. package/dist/components/send-mode-picker.d.ts +2 -43
  62. package/dist/components/settings-picker-row-list.d.ts +2 -1
  63. package/dist/components/settings-picker.d.ts +3 -1
  64. package/dist/components/shadow-panel.d.ts +2 -1
  65. package/dist/components/sidebar-content.d.ts +1 -47
  66. package/dist/components/sidebar-ipc-icons.d.ts +9 -0
  67. package/dist/components/sidebar-panel-agents.d.ts +10 -0
  68. package/dist/components/sidebar-panel-connections.d.ts +11 -0
  69. package/dist/components/sidebar-panel-coordinator.d.ts +11 -0
  70. package/dist/components/sidebar-panel-fleet.d.ts +16 -0
  71. package/dist/components/sidebar-panel-project.d.ts +12 -0
  72. package/dist/components/sidebar-panel-worktree.d.ts +10 -0
  73. package/dist/components/sidebar-panel-wrong-proxy.d.ts +25 -0
  74. package/dist/components/sidebar-panels-workspace.d.ts +10 -79
  75. package/dist/components/sidebar-presentation.d.ts +98 -0
  76. package/dist/components/sidebar.d.ts +3 -1
  77. package/dist/components/skill-picker.d.ts +2 -1
  78. package/dist/components/slash-confirm-panel.d.ts +2 -0
  79. package/dist/components/slash-menu.d.ts +2 -1
  80. package/dist/components/slash-modal-frame.d.ts +9 -0
  81. package/dist/components/status-bar-rails-async.d.ts +2 -2
  82. package/dist/components/status-bar-types.d.ts +6 -0
  83. package/dist/components/status-bar.d.ts +1 -1
  84. package/dist/components/statusline-picker-model.d.ts +45 -0
  85. package/dist/components/statusline-picker.d.ts +2 -41
  86. package/dist/components/tools-picker.d.ts +3 -1
  87. package/dist/components/user-input-prompt.d.ts +4 -2
  88. package/dist/connection-actions.d.ts +20 -0
  89. package/dist/connections-health.d.ts +8 -1
  90. package/dist/esc-close-panels.d.ts +0 -1
  91. package/dist/f-key-panels.d.ts +4 -0
  92. package/dist/hooks/fork-at-checkpoint.d.ts +25 -0
  93. package/dist/hooks/use-active-theme.d.ts +2 -1
  94. package/dist/hooks/use-app-execution-pipeline.d.ts +1 -1
  95. package/dist/hooks/use-app-panels-state.d.ts +1 -1
  96. package/dist/hooks/use-app-picker-keys.d.ts +5 -2
  97. package/dist/hooks/use-chip-staleness-guard.d.ts +6 -0
  98. package/dist/hooks/use-core-tui-commands.d.ts +7 -2
  99. package/dist/hooks/use-file-search.d.ts +10 -0
  100. package/dist/hooks/use-fleet-generation-gate.d.ts +4 -3
  101. package/dist/hooks/use-panel-controllers.d.ts +1 -1
  102. package/dist/hooks/use-picker-keys-brain-statusline.d.ts +4 -0
  103. package/dist/hooks/use-picker-keys-types.d.ts +1 -0
  104. package/dist/hooks/use-provider-warmup.d.ts +9 -0
  105. package/dist/hooks/use-queue-manager.d.ts +11 -1
  106. package/dist/hooks/use-session-rewind.d.ts +8 -1
  107. package/dist/hooks/use-shadow-panel.d.ts +1 -1
  108. package/dist/hooks/use-sidebar-panel-data.d.ts +7 -5
  109. package/dist/hooks/use-skill-mention-picker.d.ts +6 -0
  110. package/dist/hooks/use-slash-picker.d.ts +1 -1
  111. package/dist/hooks/use-stable-key-handler.d.ts +8 -1
  112. package/dist/hooks/use-status-sync-interval.d.ts +3 -2
  113. package/dist/hooks/use-statusbar-view-model.d.ts +2 -2
  114. package/dist/hooks/use-tui-environment-state.d.ts +3 -0
  115. package/dist/hooks/use-tui-event-bridge.d.ts +12 -0
  116. package/dist/hooks/use-windowed-picker.d.ts +3 -4
  117. package/dist/index.js +29522 -25452
  118. package/dist/ink.d.ts +5 -5
  119. package/dist/input-graphemes.d.ts +4 -0
  120. package/dist/input-key-router.d.ts +2 -0
  121. package/dist/input-tokens.d.ts +10 -0
  122. package/dist/input-validation/action-types.d.ts +1 -1
  123. package/dist/input-validation/limits.d.ts +2 -0
  124. package/dist/input-validation-coordination.d.ts +9 -0
  125. package/dist/input-validation-display.d.ts +9 -0
  126. package/dist/input-validation.d.ts +0 -52
  127. package/dist/kanban-arguments.d.ts +48 -0
  128. package/dist/kanban-command-types.d.ts +53 -0
  129. package/dist/kanban-reports.d.ts +42 -0
  130. package/dist/kanban-slash.d.ts +4 -125
  131. package/dist/key-routes/key-route-background-strip.d.ts +14 -0
  132. package/dist/key-routes/key-route-chat-search.d.ts +24 -0
  133. package/dist/key-routes/key-route-overlay.d.ts +2 -2
  134. package/dist/layout-store.d.ts +2 -2
  135. package/dist/memory-slash-render.d.ts +1 -1
  136. package/dist/message-checkpoint.d.ts +19 -0
  137. package/dist/motion.d.ts +16 -0
  138. package/dist/on-panel-open.d.ts +1 -1
  139. package/dist/picker-text-input.d.ts +4 -0
  140. package/dist/reducers/chat-search.d.ts +11 -0
  141. package/dist/reducers/composer-action-types.d.ts +6 -0
  142. package/dist/reducers/composer-pickers.d.ts +4 -0
  143. package/dist/reducers/composer.d.ts +1 -5
  144. package/dist/reducers/message-jump.d.ts +16 -0
  145. package/dist/reducers/panel-pickers.d.ts +1 -1
  146. package/dist/reducers/workspace-panels.d.ts +1 -1
  147. package/dist/resume-session-tree.d.ts +8 -0
  148. package/dist/rewind-prompt.d.ts +24 -0
  149. package/dist/run-tui-options.d.ts +24 -5
  150. package/dist/scroll-anchor.d.ts +6 -0
  151. package/dist/statusline-palette.d.ts +4 -0
  152. package/dist/submit-controller.d.ts +1 -1
  153. package/dist/submit-slash-command.d.ts +67 -0
  154. package/dist/theme-utils.d.ts +1 -1
  155. package/dist/transcript-search.d.ts +38 -0
  156. package/dist/ui-contracts.d.ts +2 -1
  157. package/dist/use-app-controller.d.ts +157 -0
  158. package/dist/use-controller-key-pipeline.d.ts +217 -0
  159. package/package.json +7 -7
package/dist/ink.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Box as InkBox, type DOMElement, Text as InkText } from 'ink';
1
+ import { type DOMElement, Box as InkBox, Text as InkText } from 'ink';
2
2
  import { type ComponentProps, type ForwardRefExoticComponent, type ReactElement, type RefAttributes } from 'react';
3
3
  type TextOwnProps = Omit<ComponentProps<typeof InkText>, 'color' | 'backgroundColor'> & {
4
4
  color?: string | undefined;
@@ -8,12 +8,12 @@ type BoxOwnProps = Omit<ComponentProps<typeof InkBox>, 'ref' | 'borderColor' | '
8
8
  borderColor?: string | undefined;
9
9
  backgroundColor?: string | undefined;
10
10
  };
11
- export { Static, measureElement, useAnimation, useApp, useInput, useStdin, useStdout, } from 'ink';
12
11
  export type { DOMElement, Key } from 'ink';
13
- /** Ink `Text` with `color`/`backgroundColor` remapped to the pastel palette. */
14
- export declare function Text({ color, backgroundColor, ...rest }: TextOwnProps): ReactElement;
12
+ export { measureElement, Static, useAnimation, useApp, useInput, useStdin, useStdout, } from 'ink';
13
+ /** Ink `Text` with named colors resolved against the active theme. */
14
+ export declare function Text({ color, backgroundColor, children, ...rest }: TextOwnProps): ReactElement;
15
15
  /**
16
- * Ink `Box` with `borderColor`/`backgroundColor` remapped to pastels. Forwards
16
+ * Ink `Box` with named border/background colors resolved against the theme. Forwards
17
17
  * `ref` so `measureElement` (used by the scrollable history) keeps working.
18
18
  */
19
19
  export declare const Box: ForwardRefExoticComponent<BoxOwnProps & RefAttributes<DOMElement>>;
@@ -0,0 +1,4 @@
1
+ export declare function inputGraphemes(value: string): Intl.Segments;
2
+ export declare function previousGraphemeIndex(value: string, cursor: number): number;
3
+ export declare function nextGraphemeIndex(value: string, cursor: number): number;
4
+ //# sourceMappingURL=input-graphemes.d.ts.map
@@ -11,6 +11,8 @@ export interface InputKeyRouterHost {
11
11
  readonly prompt: string;
12
12
  readonly terminalColumns: number;
13
13
  readonly terminalRows: number;
14
+ /** Stable across renders; scopes the preferred vertical column to one input. */
15
+ readonly navigationOwner?: object | undefined;
14
16
  readonly nextSteps: {
15
17
  readonly timer: MutableCell<ReturnType<typeof setInterval> | undefined>;
16
18
  readonly suggestion: MutableCell<string | null>;
@@ -1,3 +1,13 @@
1
+ /**
2
+ * Inline chip token grammar, shared by the editable input for chip rendering
3
+ * and whole-token cursor deletion. Attachment shapes stay in sync with the
4
+ * AttachmentStore placeholder regex in @wrongstack/core:
5
+ * - seq-keyed `[pasted|image|file #N …]` (a cosmetic suffix after the seq,
6
+ * e.g. `, 123 lines`, is tolerated; legacy `[file #N]` is included)
7
+ * - path-keyed `[file:<path>]`
8
+ * `[VIBE]` is a protocol chip: it renders and deletes as a token, but it is
9
+ * not an attachment and must stay in the prompt sent to the refiner/agent.
10
+ */
1
11
  /** Attachment placeholders only. Protocol tags must not be stripped as chips. */
2
12
  export declare const ATTACHMENT_TOKEN_SRC = "\\[(?:pasted|image|file) #\\d+[^\\]]*\\]|\\[file:[^\\]]+\\]";
3
13
  /** Protocol trigger rendered as a chip but kept in the prompt text. */
@@ -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", "authFormCancel", "authFormChange", "authFormStart", "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", "sidebarScrollSet", "sidebarScrollReset", "toggleSidebarFocus", "skillPickerClose", "skillPickerHint", "skillPickerMove", "skillPickerOpen", "resourceMenuClose", "resourceMenuConfirm", "resourceMenuFilter", "resourceMenuHint", "resourceMenuMove", "resourceMenuOpen", "collabPlanEmitted", "collabSessionDone", "collabSubagentSpawned", "compactHistory", "confirmClearAll", "confirmClose", "confirmResolved", "confirmOpen", "continueConfirmClose", "continueConfirmOpen", "bugHuntContinueClose", "bugHuntContinueOpen", "bugHuntRunningClose", "bugHuntRunningOpen", "copiedNotice", "coordinatorEvent", "countdownEnded", "countdownTick", "debugStreamStats", "debugStreamStatsClear", "dequeueFirst", "designPickerClose", "designPickerMove", "designPickerOpen", "designPickerStack", "enhanceBusy", "enhanceClose", "enhanceOpen", "enhanceSet", "enqueue", "escConfirmClose", "escConfirmOpen", "fallbackOverlayClose", "fallbackOverlayMove", "fallbackOverlayOpen", "inspectOverlayClose", "inspectOverlayOpen", "inspectOverlayScroll", "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", "modelPickerEffort", "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", "autoProceedRelease", "bashModeEnter", "bashModeExit", "resumeLoadStart", "resumeLoadTick", "resumeStreamChunk", "resumeLoadAbort", "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", "settingsWrongProxyUrlEditCancel", "settingsWrongProxyUrlEditChange", "settingsWrongProxyUrlEditCommit", "settingsWrongProxyUrlEditStart", "settingsValueChange", "settingsValueSet", "shadowClose", "shadowHint", "shadowOpen", "shadowUpdate", "shellCommandWarningClose", "shellCommandWarningOpen", "slashConfirmClose", "slashConfirmOpen", "slashPickerClose", "slashPickerMove", "slashPickerOpen", "status", "statuslineChipExpire", "statuslineChipShow", "statuslineClose", "statuslineFieldMove", "statuslineFieldSet", "statuslineFilter", "statuslineHint", "statuslineMoveLine", "statuslineMoveOrder", "statuslineOpen", "statuslineResetLayout", "statuslineSetDensity", "statuslineSetLine", "statuslineToggle", "statuslineToggleLine", "statuslineVisibleChipsSync", "subagentModelsClose", "subagentModelsHint", "subagentModelsMove", "subagentModelsOpen", "subagentModelsUpdate", "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", "toolResultViewSet", "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", "authFormCancel", "authFormChange", "authFormStart", "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", "sidebarScrollSet", "sidebarScrollReset", "toggleSidebarFocus", "skillMentionResults", "skillPickerClose", "skillPickerHint", "skillPickerMove", "skillPickerOpen", "resourceMenuClose", "resourceMenuConfirm", "resourceMenuFilter", "resourceMenuHint", "resourceMenuMove", "resourceMenuOpen", "collabPlanEmitted", "collabSessionDone", "collabSubagentSpawned", "compactHistory", "confirmClearAll", "confirmClose", "confirmResolved", "confirmOpen", "continueConfirmClose", "continueConfirmOpen", "bugHuntContinueClose", "bugHuntContinueOpen", "bugHuntRunningClose", "bugHuntRunningOpen", "copiedNotice", "coordinatorEvent", "countdownEnded", "countdownTick", "debugStreamStats", "debugStreamStatsClear", "dequeueFirst", "designPickerClose", "designPickerMove", "designPickerOpen", "designPickerStack", "enhanceBusy", "enhanceClose", "enhanceOpen", "enhanceSet", "enqueue", "escConfirmClose", "escConfirmOpen", "fallbackOverlayClose", "fallbackOverlayMove", "fallbackOverlayOpen", "chatSearchClose", "chatSearchOpen", "chatSearchSetQuery", "chatSearchStep", "messageJump", "messageJumpClear", "inspectOverlayClose", "inspectOverlayOpen", "inspectOverlayScroll", "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", "goalRunTaskAgent", "goalRunTaskCompleted", "goalSummary", "helpClose", "helpFilter", "helpHint", "helpMove", "helpOpen", "helpScrollDetail", "hint", "historyDown", "historyPush", "historyUp", "interrupt", "leaderCtxPct", "leaderIterEnd", "leaderIterStart", "leaderToolEnd", "leaderToolStart", "mcpPickerBusy", "mcpPickerClose", "mcpPickerHint", "mcpPickerMove", "mcpPickerOpen", "mcpPickerSetItems", "modePickerClose", "modePickerHint", "modePickerMove", "modePickerOpen", "modelPickerBack", "modelPickerClose", "modelPickerEffort", "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", "autoProceedRelease", "bashModeEnter", "bashModeExit", "resumeLoadStart", "resumeLoadTick", "resumeStreamChunk", "resumeLoadAbort", "resetContextChip", "resetInterrupts", "resumePickerBusy", "resumePickerClose", "resumePickerError", "resumePickerHint", "resumePickerMove", "resumePickerOpen", "rewindOverlayClose", "rewindOverlayMove", "rewindOverlayOpen", "checkpointFork", "forkRequestDone", "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", "settingsWrongProxyUrlEditCancel", "settingsWrongProxyUrlEditChange", "settingsWrongProxyUrlEditCommit", "settingsWrongProxyUrlEditStart", "settingsValueChange", "settingsValueSet", "shadowClose", "shadowHint", "shadowOpen", "shadowUpdate", "shellCommandWarningClose", "shellCommandWarningOpen", "slashConfirmClose", "slashConfirmOpen", "slashPickerClose", "slashPickerMove", "slashPickerOpen", "status", "statuslineChipExpire", "statuslineChipShow", "statuslineClose", "statuslineFieldMove", "statuslineFieldSet", "statuslineFilter", "statuslineHint", "statuslineMoveLine", "statuslineMoveOrder", "statuslineOpen", "statuslineResetLayout", "statuslineSetDensity", "statuslineSetLine", "statuslineToggle", "statuslineToggleLine", "statuslineVisibleChipsSync", "subagentModelsClose", "subagentModelsHint", "subagentModelsMove", "subagentModelsOpen", "subagentModelsUpdate", "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", "toolResultViewSet", "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
@@ -24,4 +24,6 @@ export declare const MAX_PASTE_FRAGMENT_CHARS = 100000;
24
24
  export declare const MAX_HOST_STRING_FIELD = 500;
25
25
  /** Maximum entries in a picker matches list. */
26
26
  export declare const MAX_PICKER_MATCHES = 500;
27
+ /** Transcript search query cap (Alt+F / `/chat-search`). */
28
+ export declare const MAX_CHAT_SEARCH_QUERY_CHARS = 1000;
27
29
  //# sourceMappingURL=limits.d.ts.map
@@ -0,0 +1,9 @@
1
+ import type { ValidationResult } from './input-validation/result.js';
2
+ export declare function validateCoordinationAction(action: {
3
+ type: string;
4
+ [key: string]: unknown;
5
+ }, payload: {
6
+ type: string;
7
+ [key: string]: unknown;
8
+ }): ValidationResult<Record<string, unknown>>;
9
+ //# sourceMappingURL=input-validation-coordination.d.ts.map
@@ -0,0 +1,9 @@
1
+ import type { ValidationResult } from './input-validation/result.js';
2
+ export declare function validateDisplayAction(action: {
3
+ type: string;
4
+ [key: string]: unknown;
5
+ }, type: string, normalized: string, payload: {
6
+ type: string;
7
+ [key: string]: unknown;
8
+ }): ValidationResult<Record<string, unknown>>;
9
+ //# sourceMappingURL=input-validation-display.d.ts.map
@@ -1,55 +1,3 @@
1
- /**
2
- * Central input validation for the TUI.
3
- *
4
- * EVERY external data source that crosses a trust boundary passes through
5
- * this module. Uses an **allow-list** approach: define the exact allowed
6
- * shape, types, ranges, and formats for each input; reject everything else.
7
- *
8
- * ── Trust boundaries ─────────────────────────────────────────────────
9
- *
10
- * Boundary | Source | Validator
11
- * ------------------|---------------------|--------------------------
12
- * stdin | terminal emulator | validateStdinFragment()
13
- * paste | bracketed-paste | validatePasteContent()
14
- * AppProps | CLI host | validateAppProps()
15
- * Reducer Action | handleKey dispatch | validateAction()
16
- * Host callbacks | CLI/plugin return | validateCallbackReturn()
17
- * Mouse events | SGR protocol | validateMouseEvent()
18
- * Fleet telemetry | Director/FleetBus | validateFleetEntry()
19
- * Restore data | session JSONL | validateRestoreEntry()
20
- *
21
- * ── Rejection over coercion ──────────────────────────────────────────
22
- *
23
- * This module **rejects** invalid input rather than coercing it, for
24
- * three reasons:
25
- *
26
- * 1. **Coercion masks injection.** Trimming whitespace from a string
27
- * that contains an ANSI escape sequence leaves the sequence intact.
28
- * 2. **Semantic gap.** Coercing a value (e.g. clamping a PID to a valid
29
- * range) creates a gap between what was validated and what the
30
- * application actually uses — a future code path may use the raw
31
- * value, not the clamped one.
32
- * 3. **Predictable failure.** Silent data transformation makes security
33
- * debugging harder — rejection produces a clear error at the point
34
- * of violation; coercion produces subtly wrong behavior downstream.
35
- *
36
- * The single exception is **normalization before comparison**: trimming
37
- * whitespace from an enum label before comparing it to the allow-list
38
- * prevents trivial bypasses (e.g. `" off "` vs `"off"`). This is
39
- * NOT the same as coercing the input — the normalized comparison only
40
- * determines allow/deny; the caller receives the original value.
41
- *
42
- * ── Conventions ──────────────────────────────────────────────────────
43
- *
44
- * - Every `validate*` function returns `ValidationResult<T>`:
45
- * `{ valid: true; value: T }` — the validated, ready-to-use value
46
- * `{ valid: false; error: string }` — a specific, actionable message
47
- * - Every error message follows the pattern:
48
- * `"{path}": {what went wrong} ({detail}).`
49
- * - Size limits are defined as module-level constants with doc comments.
50
- * - Enum/union allow-lists are defined as `const` arrays and kept in
51
- * ONE place so the allowed set is auditable.
52
- */
53
1
  import type { ValidationResult } from './input-validation/result.js';
54
2
  export { ALLOWED_ACTION_TYPES } from './input-validation/action-types.js';
55
3
  export { ALLOWED_ENTRY_KINDS, ALLOWED_FLEET_STATUSES, ALLOWED_KEY_EVENT_FIELDS, ALLOWED_MOUSE_BUTTONS, ALLOWED_MOUSE_KINDS, TEXT_BEARING_ENTRY_KINDS, } from './input-validation/allow-lists.js';
@@ -0,0 +1,48 @@
1
+ import type { KanbanBoundaryAccess, KanbanBoundaryPolicy, KanbanBoundarySelectorKind } from '@wrongstack/kanban';
2
+ export type ParsedKanbanArgs = {
3
+ kind: 'open';
4
+ } | {
5
+ kind: 'help';
6
+ } | {
7
+ kind: 'boards';
8
+ } | {
9
+ kind: 'create';
10
+ title: string;
11
+ } | {
12
+ kind: 'add';
13
+ title: string;
14
+ column: string | null;
15
+ description?: string | undefined;
16
+ } | {
17
+ kind: 'use';
18
+ query: string;
19
+ } | {
20
+ kind: 'health';
21
+ } | {
22
+ kind: 'audit';
23
+ boardQuery: string;
24
+ } | {
25
+ kind: 'boundary';
26
+ boardQuery: string;
27
+ action: 'show' | 'allow' | 'deny' | 'clear';
28
+ taskQuery?: string | undefined;
29
+ selectorKind?: KanbanBoundarySelectorKind | undefined;
30
+ access?: KanbanBoundaryAccess | undefined;
31
+ path?: string | undefined;
32
+ enforcement?: KanbanBoundaryPolicy['enforcement'] | undefined;
33
+ shellAccess?: KanbanBoundaryPolicy['shellAccess'] | undefined;
34
+ };
35
+ /**
36
+ * Parse the raw `args` string (everything after `/kanban`) into a tagged
37
+ * union. Exported so tests can exercise the grammar in isolation.
38
+ *
39
+ * Grammar (whitespace-separated; quoted titles supported for the `create`
40
+ * subcommand):
41
+ *
42
+ * args ::= ε | "help" | "boards" | "create" title
43
+ * | "add" title ("--" "column" columnId)?
44
+ * title ::= token+
45
+ * columnId ::= token
46
+ */
47
+ export declare function parseKanbanArgs(raw: string): ParsedKanbanArgs;
48
+ //# sourceMappingURL=kanban-arguments.d.ts.map
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Result of resolving the board that an `add` operation should target.
3
+ *
4
+ * `KanbanPanel` resolves the active board from the session tag
5
+ * (`session:<sessionId>`) and falls back to the most-recently-updated board.
6
+ * We mirror that exact precedence so a `/kanban add` issued while the panel
7
+ * is open lands on the same board the user is looking at.
8
+ */
9
+ export interface KanbanAddTarget {
10
+ boardId: string;
11
+ boardTitle: string;
12
+ /** Column that the task will be placed in. Defaults to the first column. */
13
+ columnId: string;
14
+ /**
15
+ * Whether the board enforces the managed Kanban Agent lifecycle. Managed
16
+ * boards require new cards to be created in the Backlog column and with a
17
+ * description, so callers route the user accordingly.
18
+ */
19
+ managed: boolean;
20
+ }
21
+ export interface KanbanSlashDeps {
22
+ /**
23
+ * Absolute project root used by the kanban file store. Must match the
24
+ * value `KanbanPanel` reads from `agent.ctx.projectRoot` — using
25
+ * `agent.ctx.cwd` would diverge when the user launches the TUI from a
26
+ * subdirectory of the project.
27
+ */
28
+ projectRoot: string;
29
+ /**
30
+ * Session running the TUI. Used to prefer a `session:<id>`-tagged board, and
31
+ * to attribute every board event `/kanban` writes.
32
+ */
33
+ sessionId: string;
34
+ /**
35
+ * Panel-open bridge installed by `App`. Calling `onPanelOpen.current(...)`
36
+ * with `'toggleKanbanPanel'` opens the kanban panel — same mechanism the
37
+ * other slash commands use. When absent, slash command returns text-only.
38
+ */
39
+ onPanelOpen?: {
40
+ current: ((action: string) => boolean) | null;
41
+ } | undefined;
42
+ /**
43
+ * Optional hook that selects a specific board in the kanban panel. Used
44
+ * by `/kanban use <boardId|title|tag>` and the Goal → Kanban bridge.
45
+ * The callback receives a board id and returns true on success.
46
+ */
47
+ onBoardFocus?: {
48
+ current: ((boardId: string) => boolean) | null;
49
+ } | undefined;
50
+ /** Terminal width (cols) for help / boards table rendering. */
51
+ terminalWidth?: number | undefined;
52
+ }
53
+ //# sourceMappingURL=kanban-command-types.d.ts.map
@@ -0,0 +1,42 @@
1
+ import type { KanbanBoardSummary, KanbanQueueHealth } from '@wrongstack/kanban';
2
+ import { type KanbanAuditSummary } from './kanban-audit.js';
3
+ import type { KanbanSlashDeps } from './kanban-command-types.js';
4
+ /**
5
+ * Render the kanban queue health report as a compact markdown block.
6
+ * Surfaces the same Sprint-2 fields the WebUI's `KanbanView` shows
7
+ * (dependencyBlocked, staleAssignments, failedRetryable, heartbeatDue)
8
+ * plus per-status counts and the last dispatch / last recovery stamps.
9
+ */
10
+ export declare function renderHealthReport(health: KanbanQueueHealth): string;
11
+ /**
12
+ * Render the Kanban Cleaner audit across the project. Mirrors the WebUI
13
+ * `KanbanCleanerAlert` vocabulary so a user running either surface gets
14
+ * the same findings.
15
+ *
16
+ * Two modes:
17
+ * - `boardQuery` empty → audit every board (per-board table).
18
+ * - `boardQuery` present → audit the single matching board, or report
19
+ * a clear "not found" error.
20
+ *
21
+ * Each board's row shows the issue counts (error · warning) and the
22
+ * top-3 issues, biasing toward error severity first.
23
+ */
24
+ export declare function renderProjectAudit(deps: Pick<KanbanSlashDeps, 'projectRoot'>, boardQuery: string): Promise<string>;
25
+ /**
26
+ * Render a board-row table from a list of audited boards. The output
27
+ * is a compact markdown block suitable for the slash composer.
28
+ *
29
+ * When `multi` is true (audit-all mode) each row is prefixed with the
30
+ * board title; in single-board mode the title appears once as a header.
31
+ */
32
+ export declare function renderAuditReport(rows: ReadonlyArray<{
33
+ title: string;
34
+ summary: KanbanAuditSummary;
35
+ error?: string;
36
+ }>, multi: boolean): string;
37
+ /**
38
+ * Render a compact boards table. Width-aware so a 60-col terminal still gets
39
+ * useful output (column titles truncated, counts abbreviated).
40
+ */
41
+ export declare function renderBoardsList(boards: readonly KanbanBoardSummary[], width?: number): string;
42
+ //# sourceMappingURL=kanban-reports.d.ts.map
@@ -19,107 +19,8 @@
19
19
  * is the text-first equivalent for when the panel is closed.
20
20
  */
21
21
  import type { SlashCommand } from '@wrongstack/core/types';
22
- import type { KanbanBoardSummary, KanbanBoundaryAccess, KanbanBoundaryPolicy, KanbanBoundarySelectorKind, KanbanQueueHealth } from '@wrongstack/kanban';
23
- import { type KanbanAuditSummary } from './kanban-audit.js';
24
- /**
25
- * Result of resolving the board that an `add` operation should target.
26
- *
27
- * `KanbanPanel` resolves the active board from the session tag
28
- * (`session:<sessionId>`) and falls back to the most-recently-updated board.
29
- * We mirror that exact precedence so a `/kanban add` issued while the panel
30
- * is open lands on the same board the user is looking at.
31
- */
32
- interface KanbanAddTarget {
33
- boardId: string;
34
- boardTitle: string;
35
- /** Column that the task will be placed in. Defaults to the first column. */
36
- columnId: string;
37
- /**
38
- * Whether the board enforces the managed Kanban Agent lifecycle. Managed
39
- * boards require new cards to be created in the Backlog column and with a
40
- * description, so callers route the user accordingly.
41
- */
42
- managed: boolean;
43
- }
44
- export interface KanbanSlashDeps {
45
- /**
46
- * Absolute project root used by the kanban file store. Must match the
47
- * value `KanbanPanel` reads from `agent.ctx.projectRoot` — using
48
- * `agent.ctx.cwd` would diverge when the user launches the TUI from a
49
- * subdirectory of the project.
50
- */
51
- projectRoot: string;
52
- /**
53
- * Session running the TUI. Used to prefer a `session:<id>`-tagged board, and
54
- * to attribute every board event `/kanban` writes.
55
- */
56
- sessionId: string;
57
- /**
58
- * Panel-open bridge installed by `App`. Calling `onPanelOpen.current(...)`
59
- * with `'toggleKanbanPanel'` opens the kanban panel — same mechanism the
60
- * other slash commands use. When absent, slash command returns text-only.
61
- */
62
- onPanelOpen?: {
63
- current: ((action: string) => boolean) | null;
64
- } | undefined;
65
- /**
66
- * Optional hook that selects a specific board in the kanban panel. Used
67
- * by `/kanban use <boardId|title|tag>` and the Goal → Kanban bridge.
68
- * The callback receives a board id and returns true on success.
69
- */
70
- onBoardFocus?: {
71
- current: ((boardId: string) => boolean) | null;
72
- } | undefined;
73
- /** Terminal width (cols) for help / boards table rendering. */
74
- terminalWidth?: number | undefined;
75
- }
22
+ import type { KanbanAddTarget, KanbanSlashDeps } from './kanban-command-types.js';
76
23
  export declare function createKanbanSlashCommand(deps: KanbanSlashDeps): SlashCommand;
77
- type ParsedKanbanArgs = {
78
- kind: 'open';
79
- } | {
80
- kind: 'help';
81
- } | {
82
- kind: 'boards';
83
- } | {
84
- kind: 'create';
85
- title: string;
86
- } | {
87
- kind: 'add';
88
- title: string;
89
- column: string | null;
90
- description?: string | undefined;
91
- } | {
92
- kind: 'use';
93
- query: string;
94
- } | {
95
- kind: 'health';
96
- } | {
97
- kind: 'audit';
98
- boardQuery: string;
99
- } | {
100
- kind: 'boundary';
101
- boardQuery: string;
102
- action: 'show' | 'allow' | 'deny' | 'clear';
103
- taskQuery?: string | undefined;
104
- selectorKind?: KanbanBoundarySelectorKind | undefined;
105
- access?: KanbanBoundaryAccess | undefined;
106
- path?: string | undefined;
107
- enforcement?: KanbanBoundaryPolicy['enforcement'] | undefined;
108
- shellAccess?: KanbanBoundaryPolicy['shellAccess'] | undefined;
109
- };
110
- /**
111
- * Parse the raw `args` string (everything after `/kanban`) into a tagged
112
- * union. Exported so tests can exercise the grammar in isolation.
113
- *
114
- * Grammar (whitespace-separated; quoted titles supported for the `create`
115
- * subcommand):
116
- *
117
- * args ::= ε | "help" | "boards" | "create" title
118
- * | "add" title ("--" "column" columnId)?
119
- * title ::= token+
120
- * columnId ::= token
121
- */
122
- export declare function parseKanbanArgs(raw: string): ParsedKanbanArgs;
123
24
  /**
124
25
  * Resolve the board that an `/kanban add` should target, matching the
125
26
  * precedence used by `KanbanPanel`:
@@ -133,29 +34,7 @@ export declare function parseKanbanArgs(raw: string): ParsedKanbanArgs;
133
34
  * Exported so tests can validate the precedence rules against fixture boards.
134
35
  */
135
36
  export declare function resolveAddTarget(deps: Pick<KanbanSlashDeps, 'projectRoot' | 'sessionId'>, column: string | null): Promise<KanbanAddTarget | null>;
136
- /**
137
- * Render the kanban queue health report as a compact markdown block.
138
- * Surfaces the same Sprint-2 fields the WebUI's `KanbanView` shows
139
- * (dependencyBlocked, staleAssignments, failedRetryable, heartbeatDue)
140
- * plus per-status counts and the last dispatch / last recovery stamps.
141
- */
142
- export declare function renderHealthReport(health: KanbanQueueHealth): string;
143
- /**
144
- * Render a board-row table from a list of audited boards. The output
145
- * is a compact markdown block suitable for the slash composer.
146
- *
147
- * When `multi` is true (audit-all mode) each row is prefixed with the
148
- * board title; in single-board mode the title appears once as a header.
149
- */
150
- export declare function renderAuditReport(rows: ReadonlyArray<{
151
- title: string;
152
- summary: KanbanAuditSummary;
153
- error?: string;
154
- }>, multi: boolean): string;
155
- /**
156
- * Render a compact boards table. Width-aware so a 60-col terminal still gets
157
- * useful output (column titles truncated, counts abbreviated).
158
- */
159
- export declare function renderBoardsList(boards: readonly KanbanBoardSummary[], width?: number): string;
160
- export {};
37
+ export { parseKanbanArgs } from './kanban-arguments.js';
38
+ export type { KanbanSlashDeps } from './kanban-command-types.js';
39
+ export { renderAuditReport, renderBoardsList, renderHealthReport } from './kanban-reports.js';
161
40
  //# sourceMappingURL=kanban-slash.d.ts.map
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Background strip keys (Alt+B). While the strip is focused, ←/→ pick a chip,
3
+ * Enter shows or hides its output, `x` asks to stop a background shell and
4
+ * `y` (or Enter) confirms, Esc or Alt+B leaves. Typing text leaves the strip
5
+ * and goes to the composer, as the sidebar focus does. Scrolling, function
6
+ * keys and Ctrl+C keep their normal routes.
7
+ */
8
+ import type { KeyEvent } from '../components/input.js';
9
+ /**
10
+ * Returns true when the key was consumed. `stop` ends a background shell by
11
+ * PID; it is the process registry's kill in the TUI.
12
+ */
13
+ export declare function routeBackgroundStrip(input: string, key: KeyEvent, stop: (pid: number) => void): boolean;
14
+ //# sourceMappingURL=key-route-background-strip.d.ts.map
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Transcript search bar keys (Alt+F / `/chat-search`).
3
+ *
4
+ * While the bar is open it owns text entry: typing edits the query and never
5
+ * reaches the composer draft. Scrolling (wheel, mouse, PgUp/PgDn), function
6
+ * keys and Ctrl+C keep their normal routes, so the user can still page
7
+ * around the transcript or open a panel with the bar visible.
8
+ */
9
+ import type { KeyEvent } from '../components/input.js';
10
+ import type { KeyRouteContext } from '../key-handler-context.js';
11
+ /** Thinking cards are only searchable while they are shown. */
12
+ export declare function chatSearchIncludesReasoning(ctx: Pick<KeyRouteContext, 'getSettings'>): boolean;
13
+ /** Returns true when the key was consumed by the search bar (or opened it). */
14
+ export declare function routeChatSearch(ctx: KeyRouteContext, input: string, key: KeyEvent): boolean;
15
+ /**
16
+ * Alt+↑ / Alt+↓: jump to the previous / next message the user sent.
17
+ *
18
+ * The marked message then takes one key: Enter on an empty composer opens
19
+ * the rewind timeline at that message's checkpoint (Enter rewinds, `f`
20
+ * forks), Esc lets go of it. Any other key lets go of it too and does its
21
+ * usual job, so a mark left behind never captures a later Enter.
22
+ */
23
+ export declare function routeMessageJump(ctx: KeyRouteContext, _input: string, key: KeyEvent): boolean;
24
+ //# sourceMappingURL=key-route-chat-search.d.ts.map
@@ -7,8 +7,8 @@ import type { KeyRouteContext } from '../key-handler-context.js';
7
7
  * ride with this route as the panel family (no dedicated slice among the
8
8
  * approved route names).
9
9
  *
10
- * Orchestrator call order (pinned): routeModalOverlay → routeDoubleEsc →
11
- * routeEscClosePanels → routeChordPanels → routeFKeyPanels → routeSddBoard →
10
+ * Orchestrator call order (pinned): routeModalOverlay → picker routing →
11
+ * routeEscClosePanels → routeDoubleEsc → routeChordPanels → routeFKeyPanels → routeSddBoard →
12
12
  * routeSettingsOverlay → routePanelEscapeRouter.
13
13
  */
14
14
  /** Modal overlays with their own dedicated UI (confirmQueue, enhance,
@@ -72,8 +72,8 @@ export declare class LayoutStore {
72
72
  * Remove entries no longer in the active set (after history retention).
73
73
  */
74
74
  retain(entryIds: Set<number>): void;
75
- /** Reset all in-memory state (on /clear). */
76
- clear(): void;
75
+ /** Reset all in-memory state (on /clear) and persist the empty snapshot. */
76
+ clear(): Promise<void>;
77
77
  /**
78
78
  * Load layout data from disk. Returns the number of entries restored, or 0
79
79
  * when no data exists or the version has changed (caller should regenerate).
@@ -1,4 +1,4 @@
1
- import type { MemoryEntry, MemoryScope, MemoryType, MemoryPriority } from '@wrongstack/core/types';
1
+ import type { MemoryEntry, MemoryPriority, MemoryScope, MemoryType } from '@wrongstack/core/types';
2
2
  export interface SageLike {
3
3
  id: string;
4
4
  kind: string;
@@ -0,0 +1,19 @@
1
+ import type { HistoryEntry } from './history-entry.js';
2
+ interface CheckpointLike {
3
+ promptIndex: number;
4
+ promptPreview: string;
5
+ }
6
+ /**
7
+ * The position in `checkpoints` of the checkpoint the user message
8
+ * `entryId` was sent under, or `undefined` when none can be told.
9
+ *
10
+ * Checkpoints carry only an 80-character preview of the prompt the agent
11
+ * received, so messages and checkpoints are paired in order by the start of
12
+ * their text. A message whose screen text differs from what was sent (a
13
+ * pasted block shows as a placeholder) matches nothing; then, when every
14
+ * message has a checkpoint, the n-th message is paired with the n-th.
15
+ * Steering notes (`↯ …`) are folded into a running turn and have none.
16
+ */
17
+ export declare function checkpointForMessage(entries: readonly HistoryEntry[], checkpoints: readonly CheckpointLike[], entryId: number): number | undefined;
18
+ export {};
19
+ //# sourceMappingURL=message-checkpoint.d.ts.map
@@ -0,0 +1,16 @@
1
+ export declare function reducedMotionFromEnv(env?: NodeJS.ProcessEnv): boolean;
2
+ /** The style actually rendered: the environment override wins over settings. */
3
+ export declare function effectiveAnimationStyle<S extends string>(style: S): S | 'static';
4
+ /** Whether the animated terminal title may run. */
5
+ export declare function titleAnimationAllowed(setting: boolean | undefined): boolean;
6
+ /** Styles whose label colors move and therefore need the fast color clock. */
7
+ export declare function animatesColor(style: string): boolean;
8
+ /**
9
+ * Publish the effective style so leaves without a style prop (tool stream
10
+ * spinner, composer activity icon) follow it.
11
+ */
12
+ export declare function setMotionStatic(value: boolean): void;
13
+ export declare function isMotionStatic(): boolean;
14
+ /** True while decorative motion is off. */
15
+ export declare function useMotionStatic(): boolean;
16
+ //# sourceMappingURL=motion.d.ts.map
@@ -39,7 +39,7 @@ export interface PanelOpenDeps {
39
39
  * Async opener for the Shadow Agent panel (`/shadow`). Fetches shadow state
40
40
  * from the host, then dispatches shadowOpen.
41
41
  */
42
- openShadowPanel?: (() => void | Promise<unknown>) | undefined;
42
+ openShadowPanel?: (() => void | boolean) | undefined;
43
43
  /**
44
44
  * Opener for the Help panel (`/help`). Builds entries from the slash
45
45
  * command registry and dispatches helpOpen with the populated list.
@@ -0,0 +1,4 @@
1
+ /** Single-line picker fields accept pasted Unicode but never terminal controls. */
2
+ export declare function pickerInputText(input: string): string;
3
+ export declare function pickerBackspace(value: string): string;
4
+ //# sourceMappingURL=picker-text-input.d.ts.map
@@ -0,0 +1,11 @@
1
+ import type { Action } from '../app-action-type.js';
2
+ import type { State } from '../app-state.js';
3
+ declare const chatSearchActionTypes: readonly ["chatSearchOpen", "chatSearchSetQuery", "chatSearchStep", "chatSearchClose"];
4
+ type ChatSearchAction = Extract<Action, {
5
+ type: (typeof chatSearchActionTypes)[number];
6
+ }>;
7
+ export declare function isChatSearchAction(action: Action): action is ChatSearchAction;
8
+ /** Transcript search bar (Alt+F / `/chat-search`). */
9
+ export declare function reduceChatSearch(state: State, action: ChatSearchAction): State;
10
+ export {};
11
+ //# sourceMappingURL=chat-search.d.ts.map
@@ -0,0 +1,6 @@
1
+ import type { Action } from '../app-action-type.js';
2
+ export declare const composerActionTypes: readonly ["brainPromptSet", "brainPromptClear", "pickerOpen", "pickerClose", "pickerSetMatches", "pickerMove", "toolStarted", "toolEnded", "toolStreamAppend", "toolStreamClear", "enqueue", "dequeueFirst", "queueClear", "queueDelete", "queueToggleRefine", "bashModeEnter", "bashModeExit", "slashPickerOpen", "slashPickerClose", "slashPickerMove", "historyPush", "historyUp", "historyDown", "setInputHistory", "clearInputHistory", "modelPickerOpen", "modelPickerClose", "modelPickerMove", "modelPickerPickProvider", "modelPickerBack", "modelPickerSearch", "modelPickerEffort", "modelPickerHint", "autonomyPickerOpen", "autonomyPickerClose", "autonomyPickerMove", "autonomyPickerHint", "themePickerOpen", "themePickerClose", "themePickerMove", "themePickerHint", "modePickerOpen", "modePickerClose", "modePickerMove", "modePickerHint", "skillPickerOpen", "skillMentionResults", "skillPickerClose", "skillPickerMove", "skillPickerHint", "resourceMenuOpen", "resourceMenuClose", "resourceMenuMove", "resourceMenuHint", "resourceMenuFilter", "resourceMenuConfirm", "designPickerOpen", "designPickerClose", "designPickerMove", "designPickerStack", "promptPickerOpen", "promptPickerClose", "promptPickerMove", "promptPickerCategory", "resumePickerOpen", "resumePickerClose", "resumePickerMove", "resumePickerBusy", "resumePickerHint", "resumePickerError", "replaceHistory", "resumeLoadStart", "resumeLoadTick", "resumeStreamChunk", "resumeLoadAbort"];
3
+ export type ComposerAction = Extract<Action, {
4
+ type: (typeof composerActionTypes)[number];
5
+ }>;
6
+ //# sourceMappingURL=composer-action-types.d.ts.map
@@ -0,0 +1,4 @@
1
+ import type { State } from '../app-state.js';
2
+ export declare function reduceComposerPickers(state: State, action: ComposerAction): State;
3
+ import type { ComposerAction } from './composer-action-types.js';
4
+ //# sourceMappingURL=composer-pickers.d.ts.map