import type { ReasoningEffort as CoreReasoningEffort } from '@wrongstack/core/types'; import type { SettingsPickerPatch } from '../settings-contracts.js'; /** Selectable presets for the auto-proceed delay, so the field is fully * keyboard-cyclable (←/→) instead of needing typed numeric input. */ export declare const DELAY_PRESETS_MS: number[]; export declare const SETTINGS_MODES: readonly ['off', 'suggest', 'auto']; export type SettingsMode = (typeof SETTINGS_MODES)[number]; export declare const LOG_LEVELS: readonly ['error', 'warn', 'info', 'debug', 'trace']; export type LogLevel = (typeof LOG_LEVELS)[number]; export declare const AUDIT_LEVELS: readonly ['minimal', 'standard', 'full']; export type AuditLevel = (typeof AUDIT_LEVELS)[number]; export declare const COMPACTOR_STRATEGIES: readonly ['hybrid', 'intelligent', 'selective']; export type CompactorStrategy = (typeof COMPACTOR_STRATEGIES)[number]; /** Context window mode options — cyclable via ←/→. */ export declare const CONTEXT_MODES: readonly ['balanced', 'frugal', 'deep']; export type ContextMode = (typeof CONTEXT_MODES)[number]; export declare const CONTEXT_MODE_DESCS: Record; export declare const STATUSLINE_MODES: readonly ['minimum', 'detailed', 'no-color']; export type StatuslineMode = (typeof STATUSLINE_MODES)[number]; /** * Factory default statusline density. `minimum` is the default so a fresh * session shows a single clean rail (state · provider/model · context meter · * version) with conditional chips only when relevant; `detailed` and * `no-color` are opt-in via /settings. Every app-level default site references * this constant so the default has a single source of truth. (The StatusBar * component's own prop default stays 'detailed' for back-compat with callers * that omit `mode` — the user-facing default is applied at the settings layer.) */ export declare const DEFAULT_STATUSLINE_MODE: StatuslineMode; export declare const REASONING_MODES: readonly ['auto', 'on', 'off']; export type ReasoningMode = (typeof REASONING_MODES)[number]; /** * Effort levels cycled by the /settings picker. Pinned to core's canonical * union via `satisfies` (subset-typed, not equal-typed, so a future core level * shows up here as a compile error reminding us to add it to the cycle) and * the exported type re-exports core's union directly. */ export declare const REASONING_EFFORTS: readonly ["none", "minimal", "low", "medium", "high", "xhigh", "max"]; export type ReasoningEffort = CoreReasoningEffort; export declare const CACHE_TTLS: readonly ['default', '5m', '1h']; export type CacheTtl = (typeof CACHE_TTLS)[number]; export declare const STATUSLINE_MODE_DESCS: Record; /** Presets for max iterations — cyclable via ←/→. 0 = unlimited. */ export declare const MAX_ITERATIONS_PRESETS: number[]; /** Presets for max concurrent subagents. 0 = runtime default. */ export declare const MAX_CONCURRENT_PRESETS: number[]; /** Presets for auto-proceed max iterations. 0 = unlimited, 50 default. */ export declare const AUTO_PROCEED_MAX_PRESETS: number[]; /** Presets for prompt refinement preview countdown. */ export declare const ENHANCE_DELAY_PRESETS: number[]; /** Presets for pre-refine grace countdown (seconds). 0 = skip. */ export declare const PRE_REFINE_SECONDS_PRESETS: number[]; /** Presets for the circuit-breaker auto kill/reset delay. 0 = manual recovery. */ export declare const BREAKER_TIMEOUT_PRESETS: number[]; export declare function formatBreakerTimeout(ms: number): string; /** * Presets for the multi-file diff summary footer cutoff. Each value is the * minimum number of files before the aggregate `N files · +X -Y · …` * line is rendered above the per-file blocks. `0` suppresses the footer * entirely; `5` is the package default; values up to 15 are useful for * very wide terminals where per-file footers are cheap. */ export declare const MULTI_DIFF_SUMMARY_THRESHOLD_PRESETS: number[]; /** Language options for prompt refinement. */ export declare const ENHANCE_LANGUAGES: readonly ['original', 'english']; export type EnhanceLanguage = (typeof ENHANCE_LANGUAGES)[number]; /** Token-saving tier options — cyclable via ←/→ in the settings picker. * `auto` is the default: it keeps the executable catalog, uses the medium * direct surface, and adapts prompt trimming to the model window. */ export declare const TOKEN_SAVING_TIERS: readonly ['auto', 'off', 'minimal', 'light', 'medium', 'aggressive']; export type TokenSavingTierTui = (typeof TOKEN_SAVING_TIERS)[number]; export declare const TOKEN_SAVING_TIER_DESCS: Record; /** * Fleet-chat verbosity options — cyclable via ←/→ in the settings picker. * Values MUST match core's `FleetChatVerbosity` union (config schema). */ export declare const FLEET_CHAT_MODES: readonly ['off', 'full']; export type FleetChatVerbosityTui = (typeof FLEET_CHAT_MODES)[number]; export declare const FLEET_CHAT_MODE_DESCS: Record; export declare function formatSettingsDelay(ms: number): string; export declare function formatMaxIterations(n: number): string; export declare function formatMultiDiffSummaryThreshold(n: number): string; export declare function formatEnhanceDelay(ms: number): string; export declare function formatPreRefineSeconds(s: number): string; /** Animation style choices for the settings picker — all AnimationStyles plus 'cycle'. */ export declare const ANIMATION_STYLE_CHOICES: readonly ["rainbow", "wave", "pulse", "dots", "breathe", "static", "cycle"]; export type AnimationStyleChoice = (typeof ANIMATION_STYLE_CHOICES)[number]; /** Human-readable label for an animation style choice (including cycle). */ export declare function formatAnimationStyle(style: AnimationStyleChoice): string; export declare const MODE_DESC: Record; /** Total number of settings rows (used for wrap-around navigation). * Indices 0–45 are the legacy auto-rebuilt Settings surface; 46..45+PANEL_IDS.length * are the per-panel position rows (one per PanelId in PANEL_IDS order) * added when the showAgentSwarmPanel tri-state was generalized into the * per-panel PanelPositionMap. Derived from PANEL_IDS.length so adding * a new panel id automatically extends the surface. */ export declare const SETTINGS_FIELD_COUNT: number; /** * Field index of the "Thinking word" row. The reducer's per-field switch and * the app.tsx key handler both branch on this, so it lives next to the row * definitions to keep the three in sync. If the row order changes, update this. */ export declare const THINKING_WORD_FIELD = 22; /** * Field index of the "WrongProxy URL" row. Same rationale as * {@link THINKING_WORD_FIELD}: the keyboard handler in `use-app-picker-keys.ts` * dispatches `settingsWrongProxyUrlEditStart` when the user presses Enter * on this row, so the constant lives next to the row definition to keep * the three in sync. */ export declare const WRONGPROXY_URL_FIELD = 60; /** * Field index of the "Multi-diff summary" row. Same rationale as * {@link THINKING_WORD_FIELD}: the keyboard handler in app.tsx dispatches * `settingsFieldSet` to this index when the user presses Ctrl+M inside the * picker, so any reorder of the Tools section must update this constant. */ export declare const MULTI_DIFF_SUMMARY_THRESHOLD_FIELD = 21; /** * Map of modifier+ chords to settings-picker rows. While the picker * is open, pressing a chord jumps the cursor straight to the target row so * the user can immediately cycle its value with ←/→ (or, for the thinking * word, Enter to open the free-text editor). * * Ctrl chords must NOT collide with global bindings: * Ctrl+S = close picker · Ctrl+G = F3 agents monitor · Ctrl+F = F2 fleet * monitor · Ctrl+P = PhaseMonitor · Ctrl+T = F4 worktree · Ctrl+A = F5 plan * panel · Ctrl+K = F9 goal panel. * * Alt chords must NOT collide with: * Alt+V = paste image from clipboard (chat input). * * Alt+Shift chords (mod+Alt in the user's framing) reuse the same letter as * plain Alt or Ctrl when the plain variants are already taken — the * composition distinguishes them at the keyboard level. For example, the * Ctrl and Alt+Shift sets both use 'L' for the Logging rows, but Alt+L and * Alt+Shift+L land on different fields. * * Each entry's `field` must match the actual row index at render time — the * `settingsFieldSet` action clamps out-of-range values to 0, so a drift * between this map and the picker row order would silently land the user on * row 0 instead of jumping them to the intended target. */ /** * Curated words the "Thinking word" field cycles through with ←/→. The user's * own custom word (set via Enter free-text edit or config) is folded into this * list at runtime so cycling never drops it. All entries must satisfy * `normalizeTuiThinkingWord` (single short word, ≤16 chars). * * `'thinking'` (the default) and `'random'` both surface a fresh fun word from * the pool on each working spell — see `isRandomTuiThinkingWord`. */ export declare const THINKING_WORD_PRESETS: readonly ['thinking', 'random', 'working', 'cooking', 'vibing', 'pondering', 'brewing', 'crunching', 'computing', 'grinding', 'noodling', 'churning', 'hacking']; export declare const CONFIG_SCOPES: readonly ['global', 'project']; export type ConfigScope = (typeof CONFIG_SCOPES)[number]; /** * Re-export of the canonical `SettingsPickerPatch` from `settings-contracts.ts`. * That module is the single source of truth so that `Action['patch']` (in * app-action-type.ts) and the helpers below stay in lock-step. Adding a new * key here requires adding it there too — keep them in sync. */ export type { SettingsPickerPatch }; /** * Human-readable labels for all settings fields (0–SETTINGS_FIELD_COUNT-1), * in picker row order. Used by `resolveSettingsFieldValue` for confirmation * and error messages, and by the `/settings` help text. */ export declare const SETTINGS_FIELD_LABELS: readonly string[]; /** * Resolve a free-text value for a given settings field into a typed * state patch. Used by the `/settings ` slash command. * * Value parsing rules: * - **Boolean fields**: "on"/"off", "true"/"false", "yes"/"no", * "1"/"0" (case-insensitive). * - **Enum fields**: case-insensitive match against the allowed values. * - **Preset fields**: either the raw number (e.g. "500") or the * display name (e.g. "unlimited" for 0, "off" for 0, "1m" for 60000). * - **Text fields** (thinking word): accepted as-is, validated by * `normalizeTuiThinkingWord`. * * Returns `{ ok: true, patch, label, displayValue }` on success, or * `{ ok: false, error }` with a helpful message listing valid options. */ export declare function resolveSettingsFieldValue(field: number, input: string): { ok: true; patch: SettingsPickerPatch; label: string; displayValue: string; } | { ok: false; error: string; }; /** * Read-only counterpart to {@link resolveSettingsFieldValue}. Given the * current settings-picker values and a field index, returns the value * formatted for display (e.g. `30s`, `unlimited`, `off`, `high`). * * Used by the `/settings-get ` slash command so the user can * query a setting without opening the picker. * * The input type is `SettingsPickerValues` — all keys of * {@link SettingsPickerPatch} made required — which matches the * settingsPicker state slice from app-state.ts (minus non-configurable * keys like `open`, `field`, `filter`). */ export type SettingsPickerValues = { [K in keyof SettingsPickerPatch]-?: SettingsPickerPatch[K]; }; export declare function getSettingsFieldValue(values: SettingsPickerValues, field: number): { ok: true; label: string; displayValue: string; } | { ok: false; error: string; }; /** * Produce a compact, section-grouped text summary of ALL settings values. * Used by the `/settings-get` command when called with no arguments, so * the user can see their full configuration at a glance without opening * the picker overlay. * * Format (one line per field): * ``` * ── Autonomy ── * Default autonomy mode auto * Auto-proceed delay 30s * ── UX ── * YOLO mode off * ... * ``` */ export declare function formatAllSettingsSummary(values: SettingsPickerValues): string; /** Presets for the SAGE memory injection threshold. Values 0.72–0.95. */ export declare const SAGE_THRESHOLD_PRESETS: number[]; /** Format the threshold value. All valid values are in {@link SAGE_THRESHOLD_PRESETS}. */ export declare function formatSageThreshold(t: number): string; /** * Default values for all configurable settings fields, in the same * shape as {@link SettingsPickerValues}. Extracted from the reducer's * initial state so there is a single source of truth for "factory * defaults". Used by {@link resetSettingsFieldValue}. */ export declare const SETTINGS_DEFAULTS: Readonly; /** * Reset a single settings field to its factory default. Returns the * same shape as {@link resolveSettingsFieldValue} so the command * handler can use the same dispatch + persist logic. * * Used by the `/settings reset ` slash command. */ export declare function resetSettingsFieldValue(field: number): { ok: true; patch: SettingsPickerPatch; label: string; displayValue: string; } | { ok: false; error: string; }; //# sourceMappingURL=settings-picker-model.d.ts.map