lsd-pi 1.3.6 → 1.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +82 -0
- package/dist/cli.js +2 -1
- package/dist/lsd-settings-manager.d.ts +2 -0
- package/dist/lsd-settings-manager.js +5 -0
- package/dist/resource-loader.js +33 -3
- package/dist/resources/extensions/cache-timer/index.js +3 -2
- package/dist/resources/extensions/mcp-client/index.js +72 -4
- package/dist/resources/extensions/slash-commands/plan.js +5 -5
- package/dist/resources/extensions/usage/index.js +34 -2
- package/dist/resources/extensions/voice/index.js +1 -0
- package/dist/resources/extensions/voice/push-to-talk.js +2 -0
- package/dist/welcome-screen.js +2 -2
- package/package.json +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.context-usage.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/agent-session.context-usage.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/agent-session.context-usage.test.js +72 -0
- package/packages/pi-coding-agent/dist/core/agent-session.context-usage.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts +4 -0
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +29 -2
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.js +1 -0
- package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.collapse-tool-calls.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.collapse-tool-calls.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.collapse-tool-calls.test.js +35 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.collapse-tool-calls.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +6 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.js +12 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tool-priority.js +1 -1
- package/packages/pi-coding-agent/dist/core/tool-priority.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/edit-diff.d.ts +5 -0
- package/packages/pi-coding-agent/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/edit-diff.js +21 -0
- package/packages/pi-coding-agent/dist/core/tools/edit-diff.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/edit-diff.test.js +16 -1
- package/packages/pi-coding-agent/dist/core/tools/edit-diff.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/main.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/main.js +1 -0
- package/packages/pi-coding-agent/dist/main.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-summary-line.test.js +12 -4
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-summary-line.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/diff.d.ts +7 -5
- package/packages/pi-coding-agent/dist/modes/interactive/components/diff.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/diff.js +86 -28
- package/packages/pi-coding-agent/dist/modes/interactive/components/diff.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +16 -10
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +4 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +26 -4
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +16 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +128 -13
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-summary-line.d.ts +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-summary-line.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-summary-line.js +48 -4
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-summary-line.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/__tests__/chat-controller.collapsed-tool-summary.test.js +137 -6
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/__tests__/chat-controller.collapsed-tool-summary.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +64 -15
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/extension-ui-controller.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/extension-ui-controller.js +2 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/extension-ui-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +5 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +73 -27
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +4 -4
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js +3 -0
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/src/core/agent-session.context-usage.test.ts +87 -0
- package/packages/pi-coding-agent/src/core/agent-session.ts +40 -2
- package/packages/pi-coding-agent/src/core/extensions/runner.ts +1 -0
- package/packages/pi-coding-agent/src/core/extensions/types.ts +3 -0
- package/packages/pi-coding-agent/src/core/settings-manager.collapse-tool-calls.test.ts +46 -0
- package/packages/pi-coding-agent/src/core/settings-manager.ts +18 -0
- package/packages/pi-coding-agent/src/core/tool-priority.ts +1 -1
- package/packages/pi-coding-agent/src/core/tools/edit-diff.test.ts +20 -0
- package/packages/pi-coding-agent/src/core/tools/edit-diff.ts +26 -0
- package/packages/pi-coding-agent/src/main.ts +1 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-summary-line.test.ts +14 -4
- package/packages/pi-coding-agent/src/modes/interactive/components/diff.ts +105 -28
- package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +13 -6
- package/packages/pi-coding-agent/src/modes/interactive/components/settings-selector.ts +31 -4
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +137 -14
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-summary-line.ts +60 -4
- package/packages/pi-coding-agent/src/modes/interactive/controllers/__tests__/chat-controller.collapsed-tool-summary.test.ts +174 -6
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +73 -15
- package/packages/pi-coding-agent/src/modes/interactive/controllers/extension-ui-controller.ts +2 -1
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-state.ts +1 -0
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +76 -27
- package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +4 -4
- package/packages/pi-coding-agent/src/modes/rpc/rpc-mode.ts +4 -0
- package/packages/pi-tui/dist/components/editor.js +3 -3
- package/packages/pi-tui/dist/components/editor.js.map +1 -1
- package/packages/pi-tui/src/components/editor.ts +3 -3
- package/pkg/dist/modes/interactive/theme/themes.js +4 -4
- package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
- package/pkg/package.json +1 -1
- package/src/resources/extensions/cache-timer/index.ts +3 -2
- package/src/resources/extensions/mcp-client/index.ts +83 -4
- package/src/resources/extensions/mcp-client/tests/server-name-spaces.test.ts +16 -0
- package/src/resources/extensions/slash-commands/plan.ts +6 -6
- package/src/resources/extensions/usage/index.ts +40 -2
- package/src/resources/extensions/voice/index.ts +1 -0
- package/src/resources/extensions/voice/push-to-talk.ts +3 -0
- package/src/resources/extensions/voice/tests/push-to-talk.test.ts +6 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-selector.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-selector.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ThinkingLevel } from \"@gsd/pi-agent-core\";\nimport type { Transport } from \"@gsd/pi-ai\";\nimport {\n\ttype Component,\n\tContainer,\n\tgetCapabilities,\n\ttype SelectItem,\n\tSelectList,\n\ttype SettingItem,\n\tSettingsList,\n\tSpacer,\n\tText,\n} from \"@gsd/pi-tui\";\nimport { getSelectListTheme, getSettingsListTheme, getThemeAccentInfo, getThemeAccentLabel, theme } from \"../theme/theme.js\";\nimport { DynamicBorder } from \"./dynamic-border.js\";\n\nexport const THINKING_DESCRIPTIONS: Record<ThinkingLevel, string> = {\n\toff: \"No reasoning\",\n\tadaptive: \"Automatically adapt per turn (client or provider resolved)\",\n\tlow: \"Light reasoning (~2k tokens)\",\n\tmedium: \"Moderate reasoning (~8k tokens)\",\n\thigh: \"Deep reasoning (~16k tokens)\",\n\txhigh: \"Maximum reasoning (~32k tokens)\",\n};\n\nexport interface SettingsConfig {\n\tautoCompact: boolean;\n\tautoCompactThresholdPercent: number;\n\tdefaultModel: string;\n\tclassifierModel: string;\n\tadaptiveClassifierModel: string;\n\tbudgetSubagentModel: string;\n\tplanModeReasoningModel: string;\n\tplanModeReviewModel: string;\n\tplanModeCodingModel: string;\n\tautoSuggestPlanMode: boolean;\n\tautoSwitchPlanModel: boolean;\n\tshowImages: boolean;\n\tautoResizeImages: boolean;\n\tblockImages: boolean;\n\tenableSkillCommands: boolean;\n\ttoolProfile: \"balanced\" | \"standard\" | \"full\";\n\tcodexRotate: boolean;\n\tfastMode: boolean;\n\tcacheTimer: boolean;\n\tpinLastPrompt: boolean;\n\tsteeringMode: \"all\" | \"one-at-a-time\";\n\tfollowUpMode: \"all\" | \"one-at-a-time\";\n\ttransport: Transport;\n\tthinkingLevel: ThinkingLevel;\n\tanthropicAdaptiveByDefault: boolean;\n\tclientAdaptiveByDefault: boolean;\n\tavailableThinkingLevels: ThinkingLevel[];\n\tcurrentTheme: string;\n\tavailableThemes: string[];\n\tcurrentThemeAccent: string;\n\tavailableThemeAccents: string[];\n\thideThinkingBlock: boolean;\n\tcollapseChangelog: boolean;\n\tdoubleEscapeAction: \"fork\" | \"tree\" | \"none\";\n\ttreeFilterMode: \"default\" | \"no-tools\" | \"user-only\" | \"labeled-only\" | \"all\";\n\tshowHardwareCursor: boolean;\n\teditorPaddingX: number;\n\tautocompleteMaxVisible: number;\n\trespectGitignoreInPicker: boolean;\n\tquietStartup: boolean;\n\tclearOnShrink: boolean;\n\ttimestampFormat: \"date-time-iso\" | \"date-time-us\";\n\ttoolOutputMode: \"minimal\" | \"normal\";\n\trtk: boolean;\n\teditorScheme: \"auto\" | \"vscode\" | \"cursor\" | \"zed\" | \"jetbrains\" | \"sublime\" | \"file\";\n\tautoDream: boolean;\n\tautoMemory: boolean;\n\tnotificationSound: boolean;\n\ttelegramLiveRelayAutoConnect: boolean;\n\tsandboxEnabled?: boolean;\n\tsandboxNetworkMode?: \"allow\" | \"ask\" | \"deny\";\n\tdefaultModelSubmenu?: (currentValue: string, done: (selectedValue?: string) => void) => Component;\n\tclassifierModelSubmenu?: (currentValue: string, done: (selectedValue?: string) => void) => Component;\n\tadaptiveClassifierModelSubmenu?: (currentValue: string, done: (selectedValue?: string) => void) => Component;\n\tbudgetSubagentModelSubmenu?: (currentValue: string, done: (selectedValue?: string) => void) => Component;\n\tplanModeReasoningModelSubmenu?: (currentValue: string, done: (selectedValue?: string) => void) => Component;\n\tplanModeReviewModelSubmenu?: (currentValue: string, done: (selectedValue?: string) => void) => Component;\n\tplanModeCodingModelSubmenu?: (currentValue: string, done: (selectedValue?: string) => void) => Component;\n}\n\nexport interface SettingsCallbacks {\n\tonAutoCompactChange: (enabled: boolean) => void;\n\tonAutoCompactThresholdPercentChange: (percent: number) => void;\n\tonDefaultModelChange: (modelRef: string) => void;\n\tonClassifierModelChange: (modelRef: string) => void;\n\tonAdaptiveClassifierModelChange: (modelRef: string) => void;\n\tonBudgetSubagentModelChange: (modelRef: string) => void;\n\tonPlanModeReasoningModelChange: (modelRef: string) => void;\n\tonPlanModeReviewModelChange: (modelRef: string) => void;\n\tonPlanModeCodingModelChange: (modelRef: string) => void;\n\tonAutoSuggestPlanModeChange: (enabled: boolean) => void;\n\tonAutoSwitchPlanModelChange: (enabled: boolean) => void;\n\tonAutoDreamChange: (enabled: boolean) => void;\n\tonAutoMemoryChange: (enabled: boolean) => void;\n\tonNotificationSoundChange: (enabled: boolean) => void;\n\tonTelegramLiveRelayAutoConnectChange: (enabled: boolean) => void;\n\tonSandboxEnabledChange?: (enabled: boolean) => void;\n\tonSandboxNetworkModeChange?: (mode: \"allow\" | \"ask\" | \"deny\") => void;\n\tonShowImagesChange: (enabled: boolean) => void;\n\tonAutoResizeImagesChange: (enabled: boolean) => void;\n\tonBlockImagesChange: (blocked: boolean) => void;\n\tonEnableSkillCommandsChange: (enabled: boolean) => void;\n\tonToolProfileChange: (profile: \"balanced\" | \"standard\" | \"full\") => void;\n\tonCodexRotateChange: (enabled: boolean) => void;\n\tonFastModeChange: (enabled: boolean) => void;\n\tonCacheTimerChange: (enabled: boolean) => void;\n\tonPinLastPromptChange: (enabled: boolean) => void;\n\tonSteeringModeChange: (mode: \"all\" | \"one-at-a-time\") => void;\n\tonFollowUpModeChange: (mode: \"all\" | \"one-at-a-time\") => void;\n\tonTransportChange: (transport: Transport) => void;\n\tonThinkingLevelChange: (level: ThinkingLevel) => void;\n\tonAnthropicAdaptiveByDefaultChange: (enabled: boolean) => void;\n\tonClientAdaptiveByDefaultChange: (enabled: boolean) => void;\n\tonThemeChange: (theme: string) => void;\n\tonThemePreview?: (theme: string) => void;\n\tonThemeAccentChange: (accent: string) => void;\n\tonHideThinkingBlockChange: (hidden: boolean) => void;\n\tonCollapseChangelogChange: (collapsed: boolean) => void;\n\tonDoubleEscapeActionChange: (action: \"fork\" | \"tree\" | \"none\") => void;\n\tonTreeFilterModeChange: (mode: \"default\" | \"no-tools\" | \"user-only\" | \"labeled-only\" | \"all\") => void;\n\tonShowHardwareCursorChange: (enabled: boolean) => void;\n\tonEditorPaddingXChange: (padding: number) => void;\n\tonAutocompleteMaxVisibleChange: (maxVisible: number) => void;\n\tonRespectGitignoreInPickerChange: (enabled: boolean) => void;\n\tonQuietStartupChange: (enabled: boolean) => void;\n\tonClearOnShrinkChange: (enabled: boolean) => void;\n\tonTimestampFormatChange: (format: \"date-time-iso\" | \"date-time-us\") => void;\n\tonToolOutputModeChange: (mode: \"minimal\" | \"normal\") => void;\n\tonRtkChange: (enabled: boolean) => void;\n\tonEditorSchemeChange: (scheme: \"auto\" | \"vscode\" | \"cursor\" | \"zed\" | \"jetbrains\" | \"sublime\" | \"file\") => void;\n\tonCancel: () => void;\n}\n\n/**\n * A submenu component for selecting from a list of options.\n */\nexport class SelectSubmenu extends Container {\n\tprivate selectList: SelectList;\n\n\tconstructor(\n\t\ttitle: string,\n\t\tdescription: string,\n\t\toptions: SelectItem[],\n\t\tcurrentValue: string,\n\t\tonSelect: (value: string) => void,\n\t\tonCancel: () => void,\n\t\tonSelectionChange?: (value: string) => void,\n\t) {\n\t\tsuper();\n\n\t\t// Title\n\t\tthis.addChild(new Text(theme.bold(theme.fg(\"accent\", title)), 0, 0));\n\n\t\t// Description\n\t\tif (description) {\n\t\t\tthis.addChild(new Spacer(1));\n\t\t\tthis.addChild(new Text(theme.fg(\"muted\", description), 0, 0));\n\t\t}\n\n\t\t// Spacer\n\t\tthis.addChild(new Spacer(1));\n\n\t\t// Select list\n\t\tthis.selectList = new SelectList(options, Math.min(options.length, 10), getSelectListTheme());\n\n\t\t// Pre-select current value\n\t\tconst currentIndex = options.findIndex((o) => o.value === currentValue);\n\t\tif (currentIndex !== -1) {\n\t\t\tthis.selectList.setSelectedIndex(currentIndex);\n\t\t}\n\n\t\tthis.selectList.onSelect = (item) => {\n\t\t\tonSelect(item.value);\n\t\t};\n\n\t\tthis.selectList.onCancel = onCancel;\n\n\t\tif (onSelectionChange) {\n\t\t\tthis.selectList.onSelectionChange = (item) => {\n\t\t\t\tonSelectionChange(item.value);\n\t\t\t};\n\t\t}\n\n\t\tthis.addChild(this.selectList);\n\n\t\t// Hint\n\t\tthis.addChild(new Spacer(1));\n\t\tthis.addChild(new Text(theme.fg(\"dim\", \" Enter to select · Esc to go back\"), 0, 0));\n\t}\n\n\thandleInput(data: string): void {\n\t\tthis.selectList.handleInput(data);\n\t}\n}\n\n/**\n * Main settings selector component.\n */\nexport class SettingsSelectorComponent extends Container {\n\tprivate settingsList: SettingsList;\n\n\tconstructor(config: SettingsConfig, callbacks: SettingsCallbacks) {\n\t\tsuper();\n\n\t\tconst supportsImages = getCapabilities().images;\n\n\t\tconst items: SettingItem[] = [\n\t\t\t{\n\t\t\t\tid: \"autocompact\",\n\t\t\t\tlabel: \"Auto-compact\",\n\t\t\t\tdescription: \"Automatically compact context when it gets too large\",\n\t\t\t\tcurrentValue: config.autoCompact ? \"true\" : \"false\",\n\t\t\t\tvalues: [\"true\", \"false\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"autocompact-threshold\",\n\t\t\t\tlabel: \"Auto-compact threshold\",\n\t\t\t\tdescription: \"Trigger auto-compaction when context usage reaches this percentage\",\n\t\t\t\tcurrentValue: String(config.autoCompactThresholdPercent),\n\t\t\t\tvalues: [\"70\", \"75\", \"80\", \"85\", \"90\", \"95\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"default-model\",\n\t\t\t\tlabel: \"Default model\",\n\t\t\t\tdescription: \"Model LSD should use by default when opening a new session\",\n\t\t\t\tcurrentValue: config.defaultModel,\n\t\t\t\tsubmenu: config.defaultModelSubmenu,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"classifier-model\",\n\t\t\t\tlabel: \"Classifier model\",\n\t\t\t\tdescription: \"Model used for Auto permission mode approvals\",\n\t\t\t\tcurrentValue: config.classifierModel,\n\t\t\t\tsubmenu: config.classifierModelSubmenu,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"adaptive-classifier-model\",\n\t\t\t\tlabel: \"Adaptive classifier model\",\n\t\t\t\tdescription: \"LLM used to pick reasoning level when adaptive mode is on (required for non-Anthropic models)\",\n\t\t\t\tcurrentValue: config.adaptiveClassifierModel,\n\t\t\t\tsubmenu: config.adaptiveClassifierModelSubmenu,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"budget-subagent-model\",\n\t\t\t\tlabel: \"Budget subagent model\",\n\t\t\t\tdescription: \"Cheap model alias for subagents like scout\",\n\t\t\t\tcurrentValue: config.budgetSubagentModel,\n\t\t\t\tsubmenu: config.budgetSubagentModelSubmenu,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"plan-mode-reasoning-model\",\n\t\t\t\tlabel: \"Plan reasoning model\",\n\t\t\t\tdescription: \"Optional provider/id model to switch to after plan approval\",\n\t\t\t\tcurrentValue: config.planModeReasoningModel,\n\t\t\t\tsubmenu: config.planModeReasoningModelSubmenu,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"plan-mode-review-model\",\n\t\t\t\tlabel: \"Plan review model\",\n\t\t\t\tdescription: \"Optional provider/id model for the other-agent plan review step\",\n\t\t\t\tcurrentValue: config.planModeReviewModel,\n\t\t\t\tsubmenu: config.planModeReviewModelSubmenu,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"plan-mode-coding-model\",\n\t\t\t\tlabel: \"Plan coding model\",\n\t\t\t\tdescription: \"Optional provider/id model for subagent plan execution\",\n\t\t\t\tcurrentValue: config.planModeCodingModel,\n\t\t\t\tsubmenu: config.planModeCodingModelSubmenu,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"auto-suggest-plan-mode\",\n\t\t\t\tlabel: \"Auto-suggest plan mode\",\n\t\t\t\tdescription: \"Ask the LLM to suggest plan mode for large/complex tasks\",\n\t\t\t\tcurrentValue: config.autoSuggestPlanMode ? \"true\" : \"false\",\n\t\t\t\tvalues: [\"true\", \"false\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"auto-switch-plan-model\",\n\t\t\t\tlabel: \"OpusPlan mode\",\n\t\t\t\tdescription: \"On plan entry: auto-switch to Plan reasoning model (must be set). On approval: offer new session with Plan coding model + worker agent\",\n\t\t\t\tcurrentValue: config.autoSwitchPlanModel ? \"true\" : \"false\",\n\t\t\t\tvalues: [\"true\", \"false\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"steering-mode\",\n\t\t\t\tlabel: \"Steering mode\",\n\t\t\t\tdescription:\n\t\t\t\t\t\"Enter while streaming queues steering messages. 'one-at-a-time': deliver one, wait for response. 'all': deliver all at once.\",\n\t\t\t\tcurrentValue: config.steeringMode,\n\t\t\t\tvalues: [\"one-at-a-time\", \"all\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"follow-up-mode\",\n\t\t\t\tlabel: \"Follow-up mode\",\n\t\t\t\tdescription:\n\t\t\t\t\t`${process.platform === \"darwin\" ? \"⌥Enter\" : \"Alt+Enter\"} queues follow-up messages until agent stops. 'one-at-a-time': deliver one, wait for response. 'all': deliver all at once.`,\n\t\t\t\tcurrentValue: config.followUpMode,\n\t\t\t\tvalues: [\"one-at-a-time\", \"all\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"transport\",\n\t\t\t\tlabel: \"Transport\",\n\t\t\t\tdescription: \"Preferred transport for providers that support multiple transports\",\n\t\t\t\tcurrentValue: config.transport,\n\t\t\t\tvalues: [\"sse\", \"websocket\", \"auto\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"hide-thinking\",\n\t\t\t\tlabel: \"Hide thinking\",\n\t\t\t\tdescription: \"Hide thinking blocks in assistant responses\",\n\t\t\t\tcurrentValue: config.hideThinkingBlock ? \"true\" : \"false\",\n\t\t\t\tvalues: [\"true\", \"false\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"tool-output-mode\",\n\t\t\t\tlabel: \"Tool output mode\",\n\t\t\t\tdescription: \"Minimal hides collapsed previews until Ctrl+O. Normal shows collapsed previews.\",\n\t\t\t\tcurrentValue: config.toolOutputMode,\n\t\t\t\tvalues: [\"minimal\", \"normal\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"sandbox-enabled\",\n\t\t\t\tlabel: \"Sandbox\",\n\t\t\t\tdescription: \"Enable OS-level sandboxing for bash execution on supported platforms\",\n\t\t\t\tcurrentValue: (config.sandboxEnabled ?? true) ? \"true\" : \"false\",\n\t\t\t\tvalues: [\"true\", \"false\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"sandbox-network\",\n\t\t\t\tlabel: \"Sandbox network\",\n\t\t\t\tdescription: \"Allow, ask, or deny network access for sandboxed bash commands\",\n\t\t\t\tcurrentValue: config.sandboxNetworkMode ?? \"ask\",\n\t\t\t\tvalues: [\"ask\", \"allow\", \"deny\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"collapse-changelog\",\n\t\t\t\tlabel: \"Collapse changelog\",\n\t\t\t\tdescription: \"Show condensed changelog after updates\",\n\t\t\t\tcurrentValue: config.collapseChangelog ? \"true\" : \"false\",\n\t\t\t\tvalues: [\"true\", \"false\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"quiet-startup\",\n\t\t\t\tlabel: \"Quiet startup\",\n\t\t\t\tdescription: \"Disable verbose printing at startup\",\n\t\t\t\tcurrentValue: config.quietStartup ? \"true\" : \"false\",\n\t\t\t\tvalues: [\"true\", \"false\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"double-escape-action\",\n\t\t\t\tlabel: \"Double-escape action\",\n\t\t\t\tdescription: \"Action when pressing Escape twice with empty editor\",\n\t\t\t\tcurrentValue: config.doubleEscapeAction,\n\t\t\t\tvalues: [\"tree\", \"fork\", \"none\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"tree-filter-mode\",\n\t\t\t\tlabel: \"Tree filter mode\",\n\t\t\t\tdescription: \"Default filter when opening /tree\",\n\t\t\t\tcurrentValue: config.treeFilterMode,\n\t\t\t\tvalues: [\"default\", \"no-tools\", \"user-only\", \"labeled-only\", \"all\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"thinking\",\n\t\t\t\tlabel: \"Thinking level\",\n\t\t\t\tdescription: \"Reasoning depth for thinking-capable models\",\n\t\t\t\tcurrentValue: config.thinkingLevel,\n\t\t\t\tsubmenu: (currentValue, done) =>\n\t\t\t\t\tnew SelectSubmenu(\n\t\t\t\t\t\t\"Thinking Level\",\n\t\t\t\t\t\t\"Select reasoning depth for thinking-capable models\",\n\t\t\t\t\t\tconfig.availableThinkingLevels.map((level) => ({\n\t\t\t\t\t\t\tvalue: level,\n\t\t\t\t\t\t\tlabel: level,\n\t\t\t\t\t\t\tdescription: THINKING_DESCRIPTIONS[level],\n\t\t\t\t\t\t})),\n\t\t\t\t\t\tcurrentValue,\n\t\t\t\t\t\t(value) => {\n\t\t\t\t\t\t\tcallbacks.onThinkingLevelChange(value as ThinkingLevel);\n\t\t\t\t\t\t\tdone(value);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t() => done(),\n\t\t\t\t\t),\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"anthropic-adaptive-default\",\n\t\t\t\tlabel: \"Anthropic adaptive\",\n\t\t\t\tdescription: \"Default to adaptive thinking for supported Anthropic models\",\n\t\t\t\tcurrentValue: config.anthropicAdaptiveByDefault ? \"true\" : \"false\",\n\t\t\t\tvalues: [\"true\", \"false\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"client-adaptive-default\",\n\t\t\t\tlabel: \"Adaptive by default\",\n\t\t\t\tdescription: \"Default to adaptive thinking for all reasoning-capable models\",\n\t\t\t\tcurrentValue: config.clientAdaptiveByDefault ? \"true\" : \"false\",\n\t\t\t\tvalues: [\"true\", \"false\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"theme\",\n\t\t\t\tlabel: \"Theme\",\n\t\t\t\tdescription: \"Color theme for the interface\",\n\t\t\t\tcurrentValue: config.currentTheme,\n\t\t\t\tsubmenu: (currentValue, done) =>\n\t\t\t\t\tnew SelectSubmenu(\n\t\t\t\t\t\t\"Theme\",\n\t\t\t\t\t\t\"Select color theme\",\n\t\t\t\t\t\tconfig.availableThemes.map((t) => ({\n\t\t\t\t\t\t\tvalue: t,\n\t\t\t\t\t\t\tlabel: t,\n\t\t\t\t\t\t})),\n\t\t\t\t\t\tcurrentValue,\n\t\t\t\t\t\t(value) => {\n\t\t\t\t\t\t\tcallbacks.onThemeChange(value);\n\t\t\t\t\t\t\tdone(value);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t// Restore original theme on cancel\n\t\t\t\t\t\t\tcallbacks.onThemePreview?.(currentValue);\n\t\t\t\t\t\t\tdone();\n\t\t\t\t\t\t},\n\t\t\t\t\t\t(value) => {\n\t\t\t\t\t\t\t// Preview theme on selection change\n\t\t\t\t\t\t\tcallbacks.onThemePreview?.(value);\n\t\t\t\t\t\t},\n\t\t\t\t\t),\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"theme-accent\",\n\t\t\t\tlabel: \"Main accent\",\n\t\t\t\tdescription: \"Primary accent color used by the interface\",\n\t\t\t\tcurrentValue: config.currentThemeAccent,\n\t\t\t\tsubmenu: (currentValue, done) =>\n\t\t\t\t\tnew SelectSubmenu(\n\t\t\t\t\t\t\"Main Accent\",\n\t\t\t\t\t\t\"Select the primary accent color\",\n\t\t\t\t\t\tconfig.availableThemeAccents.map((accent) => ({\n\t\t\t\t\t\t\tvalue: accent,\n\t\t\t\t\t\t\tlabel: getThemeAccentLabel(accent as Parameters<typeof getThemeAccentInfo>[0]),\n\t\t\t\t\t\t\tdescription: getThemeAccentInfo(accent as Parameters<typeof getThemeAccentInfo>[0]).description,\n\t\t\t\t\t\t})),\n\t\t\t\t\t\tcurrentValue,\n\t\t\t\t\t\t(value) => {\n\t\t\t\t\t\t\tcallbacks.onThemeAccentChange(value);\n\t\t\t\t\t\t\tdone(value);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t() => done(),\n\t\t\t\t\t),\n\t\t\t},\n\t\t];\n\n\t\t// Only show image toggle if terminal supports it\n\t\tif (supportsImages) {\n\t\t\t// Insert after autocompact threshold\n\t\t\titems.splice(2, 0, {\n\t\t\t\tid: \"show-images\",\n\t\t\t\tlabel: \"Show images\",\n\t\t\t\tdescription: \"Render images inline in terminal\",\n\t\t\t\tcurrentValue: config.showImages ? \"true\" : \"false\",\n\t\t\t\tvalues: [\"true\", \"false\"],\n\t\t\t});\n\t\t}\n\n\t\t// Image auto-resize toggle (always available, affects both attached and read images)\n\t\titems.splice(supportsImages ? 3 : 2, 0, {\n\t\t\tid: \"auto-resize-images\",\n\t\t\tlabel: \"Auto-resize images\",\n\t\t\tdescription: \"Resize large images to 2000x2000 max for better model compatibility\",\n\t\t\tcurrentValue: config.autoResizeImages ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t});\n\n\t\t// Block images toggle (always available, insert after auto-resize-images)\n\t\tconst autoResizeIndex = items.findIndex((item) => item.id === \"auto-resize-images\");\n\t\titems.splice(autoResizeIndex + 1, 0, {\n\t\t\tid: \"block-images\",\n\t\t\tlabel: \"Block images\",\n\t\t\tdescription: \"Prevent images from being sent to LLM providers\",\n\t\t\tcurrentValue: config.blockImages ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t});\n\n\t\t// Skill commands toggle (insert after block-images)\n\t\tconst blockImagesIndex = items.findIndex((item) => item.id === \"block-images\");\n\t\titems.splice(blockImagesIndex + 1, 0, {\n\t\t\tid: \"skill-commands\",\n\t\t\tlabel: \"Skill commands\",\n\t\t\tdescription: \"Register skills as /skill:name commands\",\n\t\t\tcurrentValue: config.enableSkillCommands ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t});\n\n\t\t// Tool profile selector (insert after skill-commands)\n\t\tconst skillCommandsIndex = items.findIndex((item) => item.id === \"skill-commands\");\n\t\titems.splice(skillCommandsIndex + 1, 0, {\n\t\t\tid: \"tool-profile\",\n\t\t\tlabel: \"Tool profile\",\n\t\t\tdescription: \"Choose the default active tool set: balanced for day-to-day coding, standard for broader coverage, full to enable all available tools\",\n\t\t\tcurrentValue: config.toolProfile,\n\t\t\tvalues: [\"balanced\", \"standard\", \"full\"],\n\t\t});\n\n\t\t// Codex rotate toggle (insert after tool-profile)\n\t\tconst toolProfileIndex = items.findIndex((item) => item.id === \"tool-profile\");\n\t\titems.splice(toolProfileIndex + 1, 0, {\n\t\t\tid: \"codex-rotate\",\n\t\t\tlabel: \"Codex rotate\",\n\t\t\tdescription: \"Enable automatic Codex account rotation extension\",\n\t\t\tcurrentValue: config.codexRotate ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t});\n\n\t\t// Fast mode toggle (insert after codex-rotate)\n\t\tconst codexRotateIndex = items.findIndex((item) => item.id === \"codex-rotate\");\n\t\titems.splice(codexRotateIndex + 1, 0, {\n\t\t\tid: \"fast-mode\",\n\t\t\tlabel: \"Fast mode\",\n\t\t\tdescription: \"OpenAI/Codex supported models use priority service tier\",\n\t\t\tcurrentValue: config.fastMode ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t});\n\n\t\t// Cache timer toggle (insert after fast-mode)\n\t\tconst fastModeIndex = items.findIndex((item) => item.id === \"fast-mode\");\n\t\titems.splice(fastModeIndex + 1, 0, {\n\t\t\tid: \"cache-timer\",\n\t\t\tlabel: \"Cache timer\",\n\t\t\tdescription: \"Show elapsed time since last response in the footer (tracks 5-min cache window)\",\n\t\t\tcurrentValue: config.cacheTimer ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t});\n\n\t\t// Pin last prompt toggle (insert after cache-timer)\n\t\tconst cacheTimerIdx = items.findIndex((item) => item.id === \"cache-timer\");\n\t\titems.splice(cacheTimerIdx + 1, 0, {\n\t\t\tid: \"pin-last-prompt\",\n\t\t\tlabel: \"Pin last prompt\",\n\t\t\tdescription: \"Show your last sent message above the editor so you remember the topic\",\n\t\t\tcurrentValue: config.pinLastPrompt ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t});\n\n\t\t// Auto-dream toggle (insert after pin-last-prompt)\n\t\tconst pinLastPromptIdx = items.findIndex((item) => item.id === \"pin-last-prompt\");\n\t\titems.splice(pinLastPromptIdx + 1, 0, {\n\t\t\tid: \"auto-dream\",\n\t\t\tlabel: \"Auto dream\",\n\t\t\tdescription: \"Automatically consolidate and refine memory after sessions\",\n\t\t\tcurrentValue: config.autoDream ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t});\n\n\t\t// Auto-memory toggle (insert after auto-dream)\n\t\tconst autoDreamIdx = items.findIndex((item) => item.id === \"auto-dream\");\n\t\titems.splice(autoDreamIdx + 1, 0, {\n\t\t\tid: \"auto-memory\",\n\t\t\tlabel: \"Auto memory\",\n\t\t\tdescription: \"Automatically extract and save memories from session transcripts\",\n\t\t\tcurrentValue: config.autoMemory ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t});\n\n\t\t// Notification sound toggle (insert after auto-memory)\n\t\tconst autoMemoryIdx = items.findIndex((item) => item.id === \"auto-memory\");\n\t\titems.splice(autoMemoryIdx + 1, 0, {\n\t\t\tid: \"notification-sound\",\n\t\t\tlabel: \"Notification sound\",\n\t\t\tdescription: \"Play a terminal bell when the agent finishes responding\",\n\t\t\tcurrentValue: config.notificationSound ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t});\n\n\t\t// Telegram relay auto-connect toggle (insert after notification-sound)\n\t\tconst notificationSoundIdx = items.findIndex((item) => item.id === \"notification-sound\");\n\t\titems.splice(notificationSoundIdx + 1, 0, {\n\t\t\tid: \"telegram-live-relay-autoconnect\",\n\t\t\tlabel: \"Telegram autoconnect\",\n\t\t\tdescription: \"Auto-run /lsd telegram connect on startup\",\n\t\t\tcurrentValue: config.telegramLiveRelayAutoConnect ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t});\n\n\t\t// RTK toggle (insert after cache-timer)\n\t\tconst cacheTimerIndex = items.findIndex((item) => item.id === \"cache-timer\");\n\t\titems.splice(cacheTimerIndex + 1, 0, {\n\t\t\tid: \"rtk\",\n\t\t\tlabel: \"RTK\",\n\t\t\tdescription: \"Enable RTK shell-command compression (requires restart)\",\n\t\t\tcurrentValue: config.rtk ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t});\n\n\t\t// Hardware cursor toggle (insert after rtk)\n\t\tconst rtkIndex = items.findIndex((item) => item.id === \"rtk\");\n\t\titems.splice(rtkIndex + 1, 0, {\n\t\t\tid: \"show-hardware-cursor\",\n\t\t\tlabel: \"Show hardware cursor\",\n\t\t\tdescription: \"Show the terminal cursor while still positioning it for IME support\",\n\t\t\tcurrentValue: config.showHardwareCursor ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t});\n\n\t\t// Editor padding toggle (insert after show-hardware-cursor)\n\t\tconst hardwareCursorIndex = items.findIndex((item) => item.id === \"show-hardware-cursor\");\n\t\titems.splice(hardwareCursorIndex + 1, 0, {\n\t\t\tid: \"editor-padding\",\n\t\t\tlabel: \"Editor padding\",\n\t\t\tdescription: \"Horizontal padding for input editor (0-3)\",\n\t\t\tcurrentValue: String(config.editorPaddingX),\n\t\t\tvalues: [\"0\", \"1\", \"2\", \"3\"],\n\t\t});\n\n\t\t// Autocomplete max visible toggle (insert after editor-padding)\n\t\tconst editorPaddingIndex = items.findIndex((item) => item.id === \"editor-padding\");\n\t\titems.splice(editorPaddingIndex + 1, 0, {\n\t\t\tid: \"autocomplete-max-visible\",\n\t\t\tlabel: \"Autocomplete max items\",\n\t\t\tdescription: \"Max visible items in autocomplete dropdown (3-20)\",\n\t\t\tcurrentValue: String(config.autocompleteMaxVisible),\n\t\t\tvalues: [\"3\", \"5\", \"7\", \"10\", \"15\", \"20\"],\n\t\t});\n\n\t\t// Clear on shrink toggle (insert after autocomplete-max-visible)\n\t\tconst autocompleteIndex = items.findIndex((item) => item.id === \"autocomplete-max-visible\");\n\t\titems.splice(autocompleteIndex + 1, 0, {\n\t\t\tid: \"clear-on-shrink\",\n\t\t\tlabel: \"Clear on shrink\",\n\t\t\tdescription: \"Clear empty rows when content shrinks (may cause flicker)\",\n\t\t\tcurrentValue: config.clearOnShrink ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t});\n\n\t\t// Respect .gitignore in file picker toggle (insert after clear-on-shrink)\n\t\tconst clearOnShrinkIndex = items.findIndex((item) => item.id === \"clear-on-shrink\");\n\t\titems.splice(clearOnShrinkIndex + 1, 0, {\n\t\t\tid: \"respect-gitignore-in-picker\",\n\t\t\tlabel: \"Respect .gitignore in file picker\",\n\t\t\tdescription: \"When false, @ file picker shows gitignored files too\",\n\t\t\tcurrentValue: config.respectGitignoreInPicker ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t});\n\n\t\t// Timestamp format (insert after respect-gitignore-in-picker)\n\t\tconst gitignoreIndex = items.findIndex((item) => item.id === \"respect-gitignore-in-picker\");\n\t\titems.splice(gitignoreIndex + 1, 0, {\n\t\t\tid: \"timestamp-format\",\n\t\t\tlabel: \"Timestamp format\",\n\t\t\tdescription: \"Time format for message timestamps\",\n\t\t\tcurrentValue: config.timestampFormat,\n\t\t\tvalues: [\"date-time-iso\", \"date-time-us\"],\n\t\t});\n\n\t\t// Editor link scheme (insert after timestamp-format)\n\t\tconst timestampIndex = items.findIndex((item) => item.id === \"timestamp-format\");\n\t\titems.splice(timestampIndex + 1, 0, {\n\t\t\tid: \"editor-scheme\",\n\t\t\tlabel: \"Editor link scheme\",\n\t\t\tdescription: \"URI scheme for Cmd+click file path links (auto detects from $VISUAL/$EDITOR)\",\n\t\t\tcurrentValue: config.editorScheme,\n\t\t\tvalues: [\"auto\", \"vscode\", \"cursor\", \"zed\", \"jetbrains\", \"sublime\", \"file\"],\n\t\t});\n\n\t\t// Add borders\n\t\tthis.addChild(new DynamicBorder());\n\n\t\tthis.settingsList = new SettingsList(\n\t\t\titems,\n\t\t\t10,\n\t\t\tgetSettingsListTheme(),\n\t\t\t(id, newValue) => {\n\t\t\t\tswitch (id) {\n\t\t\t\t\tcase \"autocompact\":\n\t\t\t\t\t\tcallbacks.onAutoCompactChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"autocompact-threshold\":\n\t\t\t\t\t\tcallbacks.onAutoCompactThresholdPercentChange(parseInt(newValue, 10));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"default-model\":\n\t\t\t\t\t\tcallbacks.onDefaultModelChange(newValue);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"classifier-model\":\n\t\t\t\t\t\tcallbacks.onClassifierModelChange(newValue);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"adaptive-classifier-model\":\n\t\t\t\t\t\tcallbacks.onAdaptiveClassifierModelChange(newValue);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"budget-subagent-model\":\n\t\t\t\t\t\tcallbacks.onBudgetSubagentModelChange(newValue);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"plan-mode-reasoning-model\":\n\t\t\t\t\t\tcallbacks.onPlanModeReasoningModelChange(newValue);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"plan-mode-review-model\":\n\t\t\t\t\t\tcallbacks.onPlanModeReviewModelChange(newValue);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"plan-mode-coding-model\":\n\t\t\t\t\t\tcallbacks.onPlanModeCodingModelChange(newValue);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"auto-suggest-plan-mode\":\n\t\t\t\t\t\tcallbacks.onAutoSuggestPlanModeChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"auto-switch-plan-model\":\n\t\t\t\t\t\tcallbacks.onAutoSwitchPlanModelChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"show-images\":\n\t\t\t\t\t\tcallbacks.onShowImagesChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"auto-resize-images\":\n\t\t\t\t\t\tcallbacks.onAutoResizeImagesChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"block-images\":\n\t\t\t\t\t\tcallbacks.onBlockImagesChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"skill-commands\":\n\t\t\t\t\t\tcallbacks.onEnableSkillCommandsChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tool-profile\":\n\t\t\t\t\t\tcallbacks.onToolProfileChange(newValue as \"balanced\" | \"standard\" | \"full\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"codex-rotate\":\n\t\t\t\t\t\tcallbacks.onCodexRotateChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"fast-mode\":\n\t\t\t\t\t\tcallbacks.onFastModeChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"cache-timer\":\n\t\t\t\t\t\tcallbacks.onCacheTimerChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"pin-last-prompt\":\n\t\t\t\t\t\tcallbacks.onPinLastPromptChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"auto-dream\":\n\t\t\t\t\t\tcallbacks.onAutoDreamChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"auto-memory\":\n\t\t\t\t\t\tcallbacks.onAutoMemoryChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"notification-sound\":\n\t\t\t\t\t\tcallbacks.onNotificationSoundChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"telegram-live-relay-autoconnect\":\n\t\t\t\t\t\tcallbacks.onTelegramLiveRelayAutoConnectChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"rtk\":\n\t\t\t\t\t\tcallbacks.onRtkChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"steering-mode\":\n\t\t\t\t\t\tcallbacks.onSteeringModeChange(newValue as \"all\" | \"one-at-a-time\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"follow-up-mode\":\n\t\t\t\t\t\tcallbacks.onFollowUpModeChange(newValue as \"all\" | \"one-at-a-time\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"transport\":\n\t\t\t\t\t\tcallbacks.onTransportChange(newValue as Transport);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"anthropic-adaptive-default\":\n\t\t\t\t\t\tcallbacks.onAnthropicAdaptiveByDefaultChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"client-adaptive-default\":\n\t\t\t\t\t\tcallbacks.onClientAdaptiveByDefaultChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"hide-thinking\":\n\t\t\t\t\t\tcallbacks.onHideThinkingBlockChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tool-output-mode\":\n\t\t\t\t\t\tcallbacks.onToolOutputModeChange(newValue as \"minimal\" | \"normal\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"sandbox-enabled\":\n\t\t\t\t\t\tcallbacks.onSandboxEnabledChange?.(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"sandbox-network\":\n\t\t\t\t\t\tcallbacks.onSandboxNetworkModeChange?.(newValue as \"allow\" | \"ask\" | \"deny\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"collapse-changelog\":\n\t\t\t\t\t\tcallbacks.onCollapseChangelogChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"quiet-startup\":\n\t\t\t\t\t\tcallbacks.onQuietStartupChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"double-escape-action\":\n\t\t\t\t\t\tcallbacks.onDoubleEscapeActionChange(newValue as \"fork\" | \"tree\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tree-filter-mode\":\n\t\t\t\t\t\tcallbacks.onTreeFilterModeChange(\n\t\t\t\t\t\t\tnewValue as \"default\" | \"no-tools\" | \"user-only\" | \"labeled-only\" | \"all\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"show-hardware-cursor\":\n\t\t\t\t\t\tcallbacks.onShowHardwareCursorChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"editor-padding\":\n\t\t\t\t\t\tcallbacks.onEditorPaddingXChange(parseInt(newValue, 10));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"autocomplete-max-visible\":\n\t\t\t\t\t\tcallbacks.onAutocompleteMaxVisibleChange(parseInt(newValue, 10));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"clear-on-shrink\":\n\t\t\t\t\t\tcallbacks.onClearOnShrinkChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"respect-gitignore-in-picker\":\n\t\t\t\t\t\tcallbacks.onRespectGitignoreInPickerChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"timestamp-format\":\n\t\t\t\t\t\tcallbacks.onTimestampFormatChange(newValue as \"date-time-iso\" | \"date-time-us\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"editor-scheme\":\n\t\t\t\t\t\tcallbacks.onEditorSchemeChange(\n\t\t\t\t\t\t\tnewValue as \"auto\" | \"vscode\" | \"cursor\" | \"zed\" | \"jetbrains\" | \"sublime\" | \"file\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallbacks.onCancel,\n\t\t\t{ enableSearch: true },\n\t\t);\n\n\t\tthis.addChild(this.settingsList);\n\t\tthis.addChild(new DynamicBorder());\n\t}\n\n\tgetSettingsList(): SettingsList {\n\t\treturn this.settingsList;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"settings-selector.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-selector.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ThinkingLevel } from \"@gsd/pi-agent-core\";\nimport type { Transport } from \"@gsd/pi-ai\";\nimport {\n\ttype Component,\n\tContainer,\n\tgetCapabilities,\n\ttype SelectItem,\n\tSelectList,\n\ttype SettingItem,\n\tSettingsList,\n\tSpacer,\n\tText,\n} from \"@gsd/pi-tui\";\nimport { getSelectListTheme, getSettingsListTheme, getThemeAccentInfo, getThemeAccentLabel, theme } from \"../theme/theme.js\";\nimport { DynamicBorder } from \"./dynamic-border.js\";\n\nexport const THINKING_DESCRIPTIONS: Record<ThinkingLevel, string> = {\n\toff: \"No reasoning\",\n\tadaptive: \"Automatically adapt per turn (client or provider resolved)\",\n\tlow: \"Light reasoning (~2k tokens)\",\n\tmedium: \"Moderate reasoning (~8k tokens)\",\n\thigh: \"Deep reasoning (~16k tokens)\",\n\txhigh: \"Maximum reasoning (~32k tokens)\",\n};\n\nexport interface SettingsConfig {\n\tautoCompact: boolean;\n\tautoCompactThresholdPercent: number;\n\tdefaultModel: string;\n\tclassifierModel: string;\n\tadaptiveClassifierModel: string;\n\tbudgetSubagentModel: string;\n\tplanModeReasoningModel: string;\n\tplanModeReviewModel: string;\n\tplanModeCodingModel: string;\n\tautoSuggestPlanMode: boolean;\n\tautoSwitchPlanModel: boolean;\n\tshowImages: boolean;\n\tautoResizeImages: boolean;\n\tblockImages: boolean;\n\tenableSkillCommands: boolean;\n\ttoolProfile: \"balanced\" | \"standard\" | \"full\";\n\tcodexRotate: boolean;\n\tfastMode: boolean;\n\tcacheTimer: boolean;\n\tverboseFooter: boolean;\n\tpinLastPrompt: boolean;\n\tsteeringMode: \"all\" | \"one-at-a-time\";\n\tfollowUpMode: \"all\" | \"one-at-a-time\";\n\ttransport: Transport;\n\tthinkingLevel: ThinkingLevel;\n\tanthropicAdaptiveByDefault: boolean;\n\tclientAdaptiveByDefault: boolean;\n\tavailableThinkingLevels: ThinkingLevel[];\n\tcurrentTheme: string;\n\tavailableThemes: string[];\n\tcurrentThemeAccent: string;\n\tavailableThemeAccents: string[];\n\thideThinkingBlock: boolean;\n\tcollapseChangelog: boolean;\n\tdoubleEscapeAction: \"fork\" | \"tree\" | \"none\";\n\ttreeFilterMode: \"default\" | \"no-tools\" | \"user-only\" | \"labeled-only\" | \"all\";\n\tshowHardwareCursor: boolean;\n\teditorPaddingX: number;\n\tautocompleteMaxVisible: number;\n\trespectGitignoreInPicker: boolean;\n\tquietStartup: boolean;\n\tclearOnShrink: boolean;\n\ttimestampFormat: \"date-time-iso\" | \"date-time-us\";\n\ttoolOutputMode: \"minimal\" | \"normal\";\n\tcollapseToolCalls: boolean;\n\trtk: boolean;\n\teditorScheme: \"auto\" | \"vscode\" | \"cursor\" | \"zed\" | \"jetbrains\" | \"sublime\" | \"file\";\n\tautoDream: boolean;\n\tautoMemory: boolean;\n\tnotificationSound: boolean;\n\ttelegramLiveRelayAutoConnect: boolean;\n\tsandboxEnabled?: boolean;\n\tsandboxNetworkMode?: \"allow\" | \"ask\" | \"deny\";\n\tdefaultModelSubmenu?: (currentValue: string, done: (selectedValue?: string) => void) => Component;\n\tclassifierModelSubmenu?: (currentValue: string, done: (selectedValue?: string) => void) => Component;\n\tadaptiveClassifierModelSubmenu?: (currentValue: string, done: (selectedValue?: string) => void) => Component;\n\tbudgetSubagentModelSubmenu?: (currentValue: string, done: (selectedValue?: string) => void) => Component;\n\tplanModeReasoningModelSubmenu?: (currentValue: string, done: (selectedValue?: string) => void) => Component;\n\tplanModeReviewModelSubmenu?: (currentValue: string, done: (selectedValue?: string) => void) => Component;\n\tplanModeCodingModelSubmenu?: (currentValue: string, done: (selectedValue?: string) => void) => Component;\n}\n\nexport interface SettingsCallbacks {\n\tonAutoCompactChange: (enabled: boolean) => void;\n\tonAutoCompactThresholdPercentChange: (percent: number) => void;\n\tonDefaultModelChange: (modelRef: string) => void;\n\tonClassifierModelChange: (modelRef: string) => void;\n\tonAdaptiveClassifierModelChange: (modelRef: string) => void;\n\tonBudgetSubagentModelChange: (modelRef: string) => void;\n\tonPlanModeReasoningModelChange: (modelRef: string) => void;\n\tonPlanModeReviewModelChange: (modelRef: string) => void;\n\tonPlanModeCodingModelChange: (modelRef: string) => void;\n\tonAutoSuggestPlanModeChange: (enabled: boolean) => void;\n\tonAutoSwitchPlanModelChange: (enabled: boolean) => void;\n\tonAutoDreamChange: (enabled: boolean) => void;\n\tonAutoMemoryChange: (enabled: boolean) => void;\n\tonNotificationSoundChange: (enabled: boolean) => void;\n\tonTelegramLiveRelayAutoConnectChange: (enabled: boolean) => void;\n\tonSandboxEnabledChange?: (enabled: boolean) => void;\n\tonSandboxNetworkModeChange?: (mode: \"allow\" | \"ask\" | \"deny\") => void;\n\tonShowImagesChange: (enabled: boolean) => void;\n\tonAutoResizeImagesChange: (enabled: boolean) => void;\n\tonBlockImagesChange: (blocked: boolean) => void;\n\tonEnableSkillCommandsChange: (enabled: boolean) => void;\n\tonToolProfileChange: (profile: \"balanced\" | \"standard\" | \"full\") => void;\n\tonCodexRotateChange: (enabled: boolean) => void;\n\tonFastModeChange: (enabled: boolean) => void;\n\tonCacheTimerChange: (enabled: boolean) => void;\n\tonVerboseFooterChange: (enabled: boolean) => void;\n\tonPinLastPromptChange: (enabled: boolean) => void;\n\tonSteeringModeChange: (mode: \"all\" | \"one-at-a-time\") => void;\n\tonFollowUpModeChange: (mode: \"all\" | \"one-at-a-time\") => void;\n\tonTransportChange: (transport: Transport) => void;\n\tonThinkingLevelChange: (level: ThinkingLevel) => void;\n\tonAnthropicAdaptiveByDefaultChange: (enabled: boolean) => void;\n\tonClientAdaptiveByDefaultChange: (enabled: boolean) => void;\n\tonThemeChange: (theme: string) => void;\n\tonThemePreview?: (theme: string) => void;\n\tonThemeAccentChange: (accent: string) => void;\n\tonHideThinkingBlockChange: (hidden: boolean) => void;\n\tonCollapseChangelogChange: (collapsed: boolean) => void;\n\tonDoubleEscapeActionChange: (action: \"fork\" | \"tree\" | \"none\") => void;\n\tonTreeFilterModeChange: (mode: \"default\" | \"no-tools\" | \"user-only\" | \"labeled-only\" | \"all\") => void;\n\tonShowHardwareCursorChange: (enabled: boolean) => void;\n\tonEditorPaddingXChange: (padding: number) => void;\n\tonAutocompleteMaxVisibleChange: (maxVisible: number) => void;\n\tonRespectGitignoreInPickerChange: (enabled: boolean) => void;\n\tonQuietStartupChange: (enabled: boolean) => void;\n\tonClearOnShrinkChange: (enabled: boolean) => void;\n\tonTimestampFormatChange: (format: \"date-time-iso\" | \"date-time-us\") => void;\n\tonToolOutputModeChange: (mode: \"minimal\" | \"normal\") => void;\n\tonCollapseToolCallsChange: (enabled: boolean) => void;\n\tonRtkChange: (enabled: boolean) => void;\n\tonEditorSchemeChange: (scheme: \"auto\" | \"vscode\" | \"cursor\" | \"zed\" | \"jetbrains\" | \"sublime\" | \"file\") => void;\n\tonCancel: () => void;\n}\n\n/**\n * A submenu component for selecting from a list of options.\n */\nexport class SelectSubmenu extends Container {\n\tprivate selectList: SelectList;\n\n\tconstructor(\n\t\ttitle: string,\n\t\tdescription: string,\n\t\toptions: SelectItem[],\n\t\tcurrentValue: string,\n\t\tonSelect: (value: string) => void,\n\t\tonCancel: () => void,\n\t\tonSelectionChange?: (value: string) => void,\n\t) {\n\t\tsuper();\n\n\t\t// Title\n\t\tthis.addChild(new Text(theme.bold(theme.fg(\"accent\", title)), 0, 0));\n\n\t\t// Description\n\t\tif (description) {\n\t\t\tthis.addChild(new Spacer(1));\n\t\t\tthis.addChild(new Text(theme.fg(\"muted\", description), 0, 0));\n\t\t}\n\n\t\t// Spacer\n\t\tthis.addChild(new Spacer(1));\n\n\t\t// Select list\n\t\tthis.selectList = new SelectList(options, Math.min(options.length, 10), getSelectListTheme());\n\n\t\t// Pre-select current value\n\t\tconst currentIndex = options.findIndex((o) => o.value === currentValue);\n\t\tif (currentIndex !== -1) {\n\t\t\tthis.selectList.setSelectedIndex(currentIndex);\n\t\t}\n\n\t\tthis.selectList.onSelect = (item) => {\n\t\t\tonSelect(item.value);\n\t\t};\n\n\t\tthis.selectList.onCancel = onCancel;\n\n\t\tif (onSelectionChange) {\n\t\t\tthis.selectList.onSelectionChange = (item) => {\n\t\t\t\tonSelectionChange(item.value);\n\t\t\t};\n\t\t}\n\n\t\tthis.addChild(this.selectList);\n\n\t\t// Hint\n\t\tthis.addChild(new Spacer(1));\n\t\tthis.addChild(new Text(theme.fg(\"dim\", \" Enter to select · Esc to go back\"), 0, 0));\n\t}\n\n\thandleInput(data: string): void {\n\t\tthis.selectList.handleInput(data);\n\t}\n}\n\n/**\n * Main settings selector component.\n */\nexport class SettingsSelectorComponent extends Container {\n\tprivate settingsList: SettingsList;\n\n\tconstructor(config: SettingsConfig, callbacks: SettingsCallbacks) {\n\t\tsuper();\n\n\t\tconst supportsImages = getCapabilities().images;\n\n\t\tconst items: SettingItem[] = [\n\t\t\t{\n\t\t\t\tid: \"autocompact\",\n\t\t\t\tlabel: \"Auto-compact\",\n\t\t\t\tdescription: \"Automatically compact context when it gets too large\",\n\t\t\t\tcurrentValue: config.autoCompact ? \"true\" : \"false\",\n\t\t\t\tvalues: [\"true\", \"false\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"autocompact-threshold\",\n\t\t\t\tlabel: \"Auto-compact threshold\",\n\t\t\t\tdescription: \"Trigger auto-compaction when context usage reaches this percentage\",\n\t\t\t\tcurrentValue: String(config.autoCompactThresholdPercent),\n\t\t\t\tvalues: [\"70\", \"75\", \"80\", \"85\", \"90\", \"95\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"default-model\",\n\t\t\t\tlabel: \"Default model\",\n\t\t\t\tdescription: \"Model LSD should use by default when opening a new session\",\n\t\t\t\tcurrentValue: config.defaultModel,\n\t\t\t\tsubmenu: config.defaultModelSubmenu,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"classifier-model\",\n\t\t\t\tlabel: \"Classifier model\",\n\t\t\t\tdescription: \"Model used for Auto permission mode approvals\",\n\t\t\t\tcurrentValue: config.classifierModel,\n\t\t\t\tsubmenu: config.classifierModelSubmenu,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"adaptive-classifier-model\",\n\t\t\t\tlabel: \"Adaptive classifier model\",\n\t\t\t\tdescription: \"LLM used to pick reasoning level when adaptive mode is on (required for non-Anthropic models)\",\n\t\t\t\tcurrentValue: config.adaptiveClassifierModel,\n\t\t\t\tsubmenu: config.adaptiveClassifierModelSubmenu,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"budget-subagent-model\",\n\t\t\t\tlabel: \"Budget subagent model\",\n\t\t\t\tdescription: \"Cheap model alias for subagents like scout\",\n\t\t\t\tcurrentValue: config.budgetSubagentModel,\n\t\t\t\tsubmenu: config.budgetSubagentModelSubmenu,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"plan-mode-reasoning-model\",\n\t\t\t\tlabel: \"Plan reasoning model\",\n\t\t\t\tdescription: \"Optional provider/id model to switch to after plan approval\",\n\t\t\t\tcurrentValue: config.planModeReasoningModel,\n\t\t\t\tsubmenu: config.planModeReasoningModelSubmenu,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"plan-mode-review-model\",\n\t\t\t\tlabel: \"Plan review model\",\n\t\t\t\tdescription: \"Optional provider/id model for the other-agent plan review step\",\n\t\t\t\tcurrentValue: config.planModeReviewModel,\n\t\t\t\tsubmenu: config.planModeReviewModelSubmenu,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"plan-mode-coding-model\",\n\t\t\t\tlabel: \"Plan coding model\",\n\t\t\t\tdescription: \"Optional provider/id model for subagent plan execution\",\n\t\t\t\tcurrentValue: config.planModeCodingModel,\n\t\t\t\tsubmenu: config.planModeCodingModelSubmenu,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"auto-suggest-plan-mode\",\n\t\t\t\tlabel: \"Auto-suggest plan mode\",\n\t\t\t\tdescription: \"Ask the LLM to suggest plan mode for large/complex tasks\",\n\t\t\t\tcurrentValue: config.autoSuggestPlanMode ? \"true\" : \"false\",\n\t\t\t\tvalues: [\"true\", \"false\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"auto-switch-plan-model\",\n\t\t\t\tlabel: \"OpusPlan mode\",\n\t\t\t\tdescription: \"On plan entry: auto-switch to Plan reasoning model (must be set). On approval: offer new session with Plan coding model + worker agent\",\n\t\t\t\tcurrentValue: config.autoSwitchPlanModel ? \"true\" : \"false\",\n\t\t\t\tvalues: [\"true\", \"false\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"steering-mode\",\n\t\t\t\tlabel: \"Steering mode\",\n\t\t\t\tdescription:\n\t\t\t\t\t\"Enter while streaming queues steering messages. 'one-at-a-time': deliver one, wait for response. 'all': deliver all at once.\",\n\t\t\t\tcurrentValue: config.steeringMode,\n\t\t\t\tvalues: [\"one-at-a-time\", \"all\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"follow-up-mode\",\n\t\t\t\tlabel: \"Follow-up mode\",\n\t\t\t\tdescription:\n\t\t\t\t\t`${process.platform === \"darwin\" ? \"⌥Enter\" : \"Alt+Enter\"} queues follow-up messages until agent stops. 'one-at-a-time': deliver one, wait for response. 'all': deliver all at once.`,\n\t\t\t\tcurrentValue: config.followUpMode,\n\t\t\t\tvalues: [\"one-at-a-time\", \"all\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"transport\",\n\t\t\t\tlabel: \"Transport\",\n\t\t\t\tdescription: \"Preferred transport for providers that support multiple transports\",\n\t\t\t\tcurrentValue: config.transport,\n\t\t\t\tvalues: [\"sse\", \"websocket\", \"auto\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"hide-thinking\",\n\t\t\t\tlabel: \"Hide thinking\",\n\t\t\t\tdescription: \"Hide thinking blocks in assistant responses\",\n\t\t\t\tcurrentValue: config.hideThinkingBlock ? \"true\" : \"false\",\n\t\t\t\tvalues: [\"true\", \"false\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"collapse-tool-calls\",\n\t\t\t\tlabel: \"Collapse tool calls\",\n\t\t\t\tdescription: \"Group low-priority tool calls into collapsed summary lines\",\n\t\t\t\tcurrentValue: config.collapseToolCalls ? \"true\" : \"false\",\n\t\t\t\tvalues: [\"true\", \"false\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"tool-output-mode\",\n\t\t\t\tlabel: \"Tool output mode\",\n\t\t\t\tdescription: \"Minimal hides collapsed previews until Ctrl+O. Normal shows collapsed previews.\",\n\t\t\t\tcurrentValue: config.toolOutputMode,\n\t\t\t\tvalues: [\"minimal\", \"normal\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"sandbox-enabled\",\n\t\t\t\tlabel: \"Sandbox\",\n\t\t\t\tdescription: \"Enable OS-level sandboxing for bash execution on supported platforms\",\n\t\t\t\tcurrentValue: (config.sandboxEnabled ?? true) ? \"true\" : \"false\",\n\t\t\t\tvalues: [\"true\", \"false\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"sandbox-network\",\n\t\t\t\tlabel: \"Sandbox network\",\n\t\t\t\tdescription: \"Allow, ask, or deny network access for sandboxed bash commands\",\n\t\t\t\tcurrentValue: config.sandboxNetworkMode ?? \"ask\",\n\t\t\t\tvalues: [\"ask\", \"allow\", \"deny\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"collapse-changelog\",\n\t\t\t\tlabel: \"Collapse changelog\",\n\t\t\t\tdescription: \"Show condensed changelog after updates\",\n\t\t\t\tcurrentValue: config.collapseChangelog ? \"true\" : \"false\",\n\t\t\t\tvalues: [\"true\", \"false\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"quiet-startup\",\n\t\t\t\tlabel: \"Quiet startup\",\n\t\t\t\tdescription: \"Disable verbose printing at startup\",\n\t\t\t\tcurrentValue: config.quietStartup ? \"true\" : \"false\",\n\t\t\t\tvalues: [\"true\", \"false\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"double-escape-action\",\n\t\t\t\tlabel: \"Double-escape action\",\n\t\t\t\tdescription: \"Action when pressing Escape twice with empty editor\",\n\t\t\t\tcurrentValue: config.doubleEscapeAction,\n\t\t\t\tvalues: [\"tree\", \"fork\", \"none\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"tree-filter-mode\",\n\t\t\t\tlabel: \"Tree filter mode\",\n\t\t\t\tdescription: \"Default filter when opening /tree\",\n\t\t\t\tcurrentValue: config.treeFilterMode,\n\t\t\t\tvalues: [\"default\", \"no-tools\", \"user-only\", \"labeled-only\", \"all\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"thinking\",\n\t\t\t\tlabel: \"Thinking level\",\n\t\t\t\tdescription: \"Reasoning depth for thinking-capable models\",\n\t\t\t\tcurrentValue: config.thinkingLevel,\n\t\t\t\tsubmenu: (currentValue, done) =>\n\t\t\t\t\tnew SelectSubmenu(\n\t\t\t\t\t\t\"Thinking Level\",\n\t\t\t\t\t\t\"Select reasoning depth for thinking-capable models\",\n\t\t\t\t\t\tconfig.availableThinkingLevels.map((level) => ({\n\t\t\t\t\t\t\tvalue: level,\n\t\t\t\t\t\t\tlabel: level,\n\t\t\t\t\t\t\tdescription: THINKING_DESCRIPTIONS[level],\n\t\t\t\t\t\t})),\n\t\t\t\t\t\tcurrentValue,\n\t\t\t\t\t\t(value) => {\n\t\t\t\t\t\t\tcallbacks.onThinkingLevelChange(value as ThinkingLevel);\n\t\t\t\t\t\t\tdone(value);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t() => done(),\n\t\t\t\t\t),\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"anthropic-adaptive-default\",\n\t\t\t\tlabel: \"Anthropic adaptive\",\n\t\t\t\tdescription: \"Default to adaptive thinking for supported Anthropic models\",\n\t\t\t\tcurrentValue: config.anthropicAdaptiveByDefault ? \"true\" : \"false\",\n\t\t\t\tvalues: [\"true\", \"false\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"client-adaptive-default\",\n\t\t\t\tlabel: \"Adaptive by default\",\n\t\t\t\tdescription: \"Default to adaptive thinking for all reasoning-capable models\",\n\t\t\t\tcurrentValue: config.clientAdaptiveByDefault ? \"true\" : \"false\",\n\t\t\t\tvalues: [\"true\", \"false\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"theme\",\n\t\t\t\tlabel: \"Theme\",\n\t\t\t\tdescription: \"Color theme for the interface\",\n\t\t\t\tcurrentValue: config.currentTheme,\n\t\t\t\tsubmenu: (currentValue, done) =>\n\t\t\t\t\tnew SelectSubmenu(\n\t\t\t\t\t\t\"Theme\",\n\t\t\t\t\t\t\"Select color theme\",\n\t\t\t\t\t\tconfig.availableThemes.map((t) => ({\n\t\t\t\t\t\t\tvalue: t,\n\t\t\t\t\t\t\tlabel: t,\n\t\t\t\t\t\t})),\n\t\t\t\t\t\tcurrentValue,\n\t\t\t\t\t\t(value) => {\n\t\t\t\t\t\t\tcallbacks.onThemeChange(value);\n\t\t\t\t\t\t\tdone(value);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t// Restore original theme on cancel\n\t\t\t\t\t\t\tcallbacks.onThemePreview?.(currentValue);\n\t\t\t\t\t\t\tdone();\n\t\t\t\t\t\t},\n\t\t\t\t\t\t(value) => {\n\t\t\t\t\t\t\t// Preview theme on selection change\n\t\t\t\t\t\t\tcallbacks.onThemePreview?.(value);\n\t\t\t\t\t\t},\n\t\t\t\t\t),\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"theme-accent\",\n\t\t\t\tlabel: \"Main accent\",\n\t\t\t\tdescription: \"Primary accent color used by the interface\",\n\t\t\t\tcurrentValue: config.currentThemeAccent,\n\t\t\t\tsubmenu: (currentValue, done) =>\n\t\t\t\t\tnew SelectSubmenu(\n\t\t\t\t\t\t\"Main Accent\",\n\t\t\t\t\t\t\"Select the primary accent color\",\n\t\t\t\t\t\tconfig.availableThemeAccents.map((accent) => ({\n\t\t\t\t\t\t\tvalue: accent,\n\t\t\t\t\t\t\tlabel: getThemeAccentLabel(accent as Parameters<typeof getThemeAccentInfo>[0]),\n\t\t\t\t\t\t\tdescription: getThemeAccentInfo(accent as Parameters<typeof getThemeAccentInfo>[0]).description,\n\t\t\t\t\t\t})),\n\t\t\t\t\t\tcurrentValue,\n\t\t\t\t\t\t(value) => {\n\t\t\t\t\t\t\tcallbacks.onThemeAccentChange(value);\n\t\t\t\t\t\t\tdone(value);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t() => done(),\n\t\t\t\t\t),\n\t\t\t},\n\t\t];\n\n\t\t// Only show image toggle if terminal supports it\n\t\tif (supportsImages) {\n\t\t\t// Insert after autocompact threshold\n\t\t\titems.splice(2, 0, {\n\t\t\t\tid: \"show-images\",\n\t\t\t\tlabel: \"Show images\",\n\t\t\t\tdescription: \"Render images inline in terminal\",\n\t\t\t\tcurrentValue: config.showImages ? \"true\" : \"false\",\n\t\t\t\tvalues: [\"true\", \"false\"],\n\t\t\t});\n\t\t}\n\n\t\t// Image auto-resize toggle (always available, affects both attached and read images)\n\t\titems.splice(supportsImages ? 3 : 2, 0, {\n\t\t\tid: \"auto-resize-images\",\n\t\t\tlabel: \"Auto-resize images\",\n\t\t\tdescription: \"Resize large images to 2000x2000 max for better model compatibility\",\n\t\t\tcurrentValue: config.autoResizeImages ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t});\n\n\t\t// Block images toggle (always available, insert after auto-resize-images)\n\t\tconst autoResizeIndex = items.findIndex((item) => item.id === \"auto-resize-images\");\n\t\titems.splice(autoResizeIndex + 1, 0, {\n\t\t\tid: \"block-images\",\n\t\t\tlabel: \"Block images\",\n\t\t\tdescription: \"Prevent images from being sent to LLM providers\",\n\t\t\tcurrentValue: config.blockImages ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t});\n\n\t\t// Skill commands toggle (insert after block-images)\n\t\tconst blockImagesIndex = items.findIndex((item) => item.id === \"block-images\");\n\t\titems.splice(blockImagesIndex + 1, 0, {\n\t\t\tid: \"skill-commands\",\n\t\t\tlabel: \"Skill commands\",\n\t\t\tdescription: \"Register skills as /skill:name commands\",\n\t\t\tcurrentValue: config.enableSkillCommands ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t});\n\n\t\t// Tool profile selector (insert after skill-commands)\n\t\tconst skillCommandsIndex = items.findIndex((item) => item.id === \"skill-commands\");\n\t\titems.splice(skillCommandsIndex + 1, 0, {\n\t\t\tid: \"tool-profile\",\n\t\t\tlabel: \"Tool profile\",\n\t\t\tdescription: \"Choose the default active tool set: balanced for day-to-day coding, standard for broader coverage, full to enable all available tools\",\n\t\t\tcurrentValue: config.toolProfile,\n\t\t\tvalues: [\"balanced\", \"standard\", \"full\"],\n\t\t});\n\n\t\t// Codex rotate toggle (insert after tool-profile)\n\t\tconst toolProfileIndex = items.findIndex((item) => item.id === \"tool-profile\");\n\t\titems.splice(toolProfileIndex + 1, 0, {\n\t\t\tid: \"codex-rotate\",\n\t\t\tlabel: \"Codex rotate\",\n\t\t\tdescription: \"Enable automatic Codex account rotation extension\",\n\t\t\tcurrentValue: config.codexRotate ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t});\n\n\t\t// Fast mode toggle (insert after codex-rotate)\n\t\tconst codexRotateIndex = items.findIndex((item) => item.id === \"codex-rotate\");\n\t\titems.splice(codexRotateIndex + 1, 0, {\n\t\t\tid: \"fast-mode\",\n\t\t\tlabel: \"Fast mode\",\n\t\t\tdescription: \"OpenAI/Codex supported models use priority service tier\",\n\t\t\tcurrentValue: config.fastMode ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t});\n\n\t\t// Cache timer toggle (insert after fast-mode)\n\t\tconst fastModeIndex = items.findIndex((item) => item.id === \"fast-mode\");\n\t\titems.splice(fastModeIndex + 1, 0, {\n\t\t\tid: \"cache-timer\",\n\t\t\tlabel: \"Cache timer\",\n\t\t\tdescription: \"Show elapsed time since last response in the footer (tracks 5-min cache window)\",\n\t\t\tcurrentValue: config.cacheTimer ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t});\n\n\t\t// Verbose footer toggle (insert after cache-timer)\n\t\tconst cacheTimerIdx = items.findIndex((item) => item.id === \"cache-timer\");\n\t\titems.splice(cacheTimerIdx + 1, 0, {\n\t\t\tid: \"verbose-footer\",\n\t\t\tlabel: \"Verbose footer\",\n\t\t\tdescription: \"Show extra footer stats like input, output, and cache tokens\",\n\t\t\tcurrentValue: config.verboseFooter ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t});\n\n\t\t// Pin last prompt toggle (insert after verbose-footer)\n\t\tconst verboseFooterIdx = items.findIndex((item) => item.id === \"verbose-footer\");\n\t\titems.splice(verboseFooterIdx + 1, 0, {\n\t\t\tid: \"pin-last-prompt\",\n\t\t\tlabel: \"Pin last prompt\",\n\t\t\tdescription: \"Show your last sent message above the editor so you remember the topic\",\n\t\t\tcurrentValue: config.pinLastPrompt ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t});\n\n\t\t// Auto-dream toggle (insert after pin-last-prompt)\n\t\tconst pinLastPromptIdx = items.findIndex((item) => item.id === \"pin-last-prompt\");\n\t\titems.splice(pinLastPromptIdx + 1, 0, {\n\t\t\tid: \"auto-dream\",\n\t\t\tlabel: \"Auto dream\",\n\t\t\tdescription: \"Automatically consolidate and refine memory after sessions\",\n\t\t\tcurrentValue: config.autoDream ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t});\n\n\t\t// Auto-memory toggle (insert after auto-dream)\n\t\tconst autoDreamIdx = items.findIndex((item) => item.id === \"auto-dream\");\n\t\titems.splice(autoDreamIdx + 1, 0, {\n\t\t\tid: \"auto-memory\",\n\t\t\tlabel: \"Auto memory\",\n\t\t\tdescription: \"Automatically extract and save memories from session transcripts\",\n\t\t\tcurrentValue: config.autoMemory ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t});\n\n\t\t// Notification sound toggle (insert after auto-memory)\n\t\tconst autoMemoryIdx = items.findIndex((item) => item.id === \"auto-memory\");\n\t\titems.splice(autoMemoryIdx + 1, 0, {\n\t\t\tid: \"notification-sound\",\n\t\t\tlabel: \"Notification sound\",\n\t\t\tdescription: \"Play a terminal bell when the agent finishes responding\",\n\t\t\tcurrentValue: config.notificationSound ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t});\n\n\t\t// Telegram relay auto-connect toggle (insert after notification-sound)\n\t\tconst notificationSoundIdx = items.findIndex((item) => item.id === \"notification-sound\");\n\t\titems.splice(notificationSoundIdx + 1, 0, {\n\t\t\tid: \"telegram-live-relay-autoconnect\",\n\t\t\tlabel: \"Telegram autoconnect\",\n\t\t\tdescription: \"Auto-run /lsd telegram connect on startup\",\n\t\t\tcurrentValue: config.telegramLiveRelayAutoConnect ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t});\n\n\t\t// RTK toggle (insert after verbose-footer)\n\t\tconst verboseFooterIndex = items.findIndex((item) => item.id === \"verbose-footer\");\n\t\titems.splice(verboseFooterIndex + 1, 0, {\n\t\t\tid: \"rtk\",\n\t\t\tlabel: \"RTK\",\n\t\t\tdescription: \"Enable RTK shell-command compression (requires restart)\",\n\t\t\tcurrentValue: config.rtk ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t});\n\n\t\t// Hardware cursor toggle (insert after rtk)\n\t\tconst rtkIndex = items.findIndex((item) => item.id === \"rtk\");\n\t\titems.splice(rtkIndex + 1, 0, {\n\t\t\tid: \"show-hardware-cursor\",\n\t\t\tlabel: \"Show hardware cursor\",\n\t\t\tdescription: \"Show the terminal cursor while still positioning it for IME support\",\n\t\t\tcurrentValue: config.showHardwareCursor ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t});\n\n\t\t// Editor padding toggle (insert after show-hardware-cursor)\n\t\tconst hardwareCursorIndex = items.findIndex((item) => item.id === \"show-hardware-cursor\");\n\t\titems.splice(hardwareCursorIndex + 1, 0, {\n\t\t\tid: \"editor-padding\",\n\t\t\tlabel: \"Editor padding\",\n\t\t\tdescription: \"Horizontal padding for input editor (0-3)\",\n\t\t\tcurrentValue: String(config.editorPaddingX),\n\t\t\tvalues: [\"0\", \"1\", \"2\", \"3\"],\n\t\t});\n\n\t\t// Autocomplete max visible toggle (insert after editor-padding)\n\t\tconst editorPaddingIndex = items.findIndex((item) => item.id === \"editor-padding\");\n\t\titems.splice(editorPaddingIndex + 1, 0, {\n\t\t\tid: \"autocomplete-max-visible\",\n\t\t\tlabel: \"Autocomplete max items\",\n\t\t\tdescription: \"Max visible items in autocomplete dropdown (3-20)\",\n\t\t\tcurrentValue: String(config.autocompleteMaxVisible),\n\t\t\tvalues: [\"3\", \"5\", \"7\", \"10\", \"15\", \"20\"],\n\t\t});\n\n\t\t// Clear on shrink toggle (insert after autocomplete-max-visible)\n\t\tconst autocompleteIndex = items.findIndex((item) => item.id === \"autocomplete-max-visible\");\n\t\titems.splice(autocompleteIndex + 1, 0, {\n\t\t\tid: \"clear-on-shrink\",\n\t\t\tlabel: \"Clear on shrink\",\n\t\t\tdescription: \"Clear empty rows when content shrinks (may cause flicker)\",\n\t\t\tcurrentValue: config.clearOnShrink ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t});\n\n\t\t// Respect .gitignore in file picker toggle (insert after clear-on-shrink)\n\t\tconst clearOnShrinkIndex = items.findIndex((item) => item.id === \"clear-on-shrink\");\n\t\titems.splice(clearOnShrinkIndex + 1, 0, {\n\t\t\tid: \"respect-gitignore-in-picker\",\n\t\t\tlabel: \"Respect .gitignore in file picker\",\n\t\t\tdescription: \"When false, @ file picker shows gitignored files too\",\n\t\t\tcurrentValue: config.respectGitignoreInPicker ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t});\n\n\t\t// Timestamp format (insert after respect-gitignore-in-picker)\n\t\tconst gitignoreIndex = items.findIndex((item) => item.id === \"respect-gitignore-in-picker\");\n\t\titems.splice(gitignoreIndex + 1, 0, {\n\t\t\tid: \"timestamp-format\",\n\t\t\tlabel: \"Timestamp format\",\n\t\t\tdescription: \"Time format for message timestamps\",\n\t\t\tcurrentValue: config.timestampFormat,\n\t\t\tvalues: [\"date-time-iso\", \"date-time-us\"],\n\t\t});\n\n\t\t// Editor link scheme (insert after timestamp-format)\n\t\tconst timestampIndex = items.findIndex((item) => item.id === \"timestamp-format\");\n\t\titems.splice(timestampIndex + 1, 0, {\n\t\t\tid: \"editor-scheme\",\n\t\t\tlabel: \"Editor link scheme\",\n\t\t\tdescription: \"URI scheme for Cmd+click file path links (auto detects from $VISUAL/$EDITOR)\",\n\t\t\tcurrentValue: config.editorScheme,\n\t\t\tvalues: [\"auto\", \"vscode\", \"cursor\", \"zed\", \"jetbrains\", \"sublime\", \"file\"],\n\t\t});\n\n\t\t// Add borders\n\t\tthis.addChild(new DynamicBorder());\n\n\t\tthis.settingsList = new SettingsList(\n\t\t\titems,\n\t\t\t10,\n\t\t\tgetSettingsListTheme(),\n\t\t\t(id, newValue) => {\n\t\t\t\tswitch (id) {\n\t\t\t\t\tcase \"autocompact\":\n\t\t\t\t\t\tcallbacks.onAutoCompactChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"autocompact-threshold\":\n\t\t\t\t\t\tcallbacks.onAutoCompactThresholdPercentChange(parseInt(newValue, 10));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"default-model\":\n\t\t\t\t\t\tcallbacks.onDefaultModelChange(newValue);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"classifier-model\":\n\t\t\t\t\t\tcallbacks.onClassifierModelChange(newValue);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"adaptive-classifier-model\":\n\t\t\t\t\t\tcallbacks.onAdaptiveClassifierModelChange(newValue);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"budget-subagent-model\":\n\t\t\t\t\t\tcallbacks.onBudgetSubagentModelChange(newValue);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"plan-mode-reasoning-model\":\n\t\t\t\t\t\tcallbacks.onPlanModeReasoningModelChange(newValue);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"plan-mode-review-model\":\n\t\t\t\t\t\tcallbacks.onPlanModeReviewModelChange(newValue);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"plan-mode-coding-model\":\n\t\t\t\t\t\tcallbacks.onPlanModeCodingModelChange(newValue);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"auto-suggest-plan-mode\":\n\t\t\t\t\t\tcallbacks.onAutoSuggestPlanModeChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"auto-switch-plan-model\":\n\t\t\t\t\t\tcallbacks.onAutoSwitchPlanModelChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"show-images\":\n\t\t\t\t\t\tcallbacks.onShowImagesChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"auto-resize-images\":\n\t\t\t\t\t\tcallbacks.onAutoResizeImagesChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"block-images\":\n\t\t\t\t\t\tcallbacks.onBlockImagesChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"skill-commands\":\n\t\t\t\t\t\tcallbacks.onEnableSkillCommandsChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tool-profile\":\n\t\t\t\t\t\tcallbacks.onToolProfileChange(newValue as \"balanced\" | \"standard\" | \"full\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"codex-rotate\":\n\t\t\t\t\t\tcallbacks.onCodexRotateChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"fast-mode\":\n\t\t\t\t\t\tcallbacks.onFastModeChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"cache-timer\":\n\t\t\t\t\t\tcallbacks.onCacheTimerChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"verbose-footer\":\n\t\t\t\t\t\tcallbacks.onVerboseFooterChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"pin-last-prompt\":\n\t\t\t\t\t\tcallbacks.onPinLastPromptChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"auto-dream\":\n\t\t\t\t\t\tcallbacks.onAutoDreamChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"auto-memory\":\n\t\t\t\t\t\tcallbacks.onAutoMemoryChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"notification-sound\":\n\t\t\t\t\t\tcallbacks.onNotificationSoundChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"telegram-live-relay-autoconnect\":\n\t\t\t\t\t\tcallbacks.onTelegramLiveRelayAutoConnectChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"rtk\":\n\t\t\t\t\t\tcallbacks.onRtkChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"steering-mode\":\n\t\t\t\t\t\tcallbacks.onSteeringModeChange(newValue as \"all\" | \"one-at-a-time\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"follow-up-mode\":\n\t\t\t\t\t\tcallbacks.onFollowUpModeChange(newValue as \"all\" | \"one-at-a-time\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"transport\":\n\t\t\t\t\t\tcallbacks.onTransportChange(newValue as Transport);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"anthropic-adaptive-default\":\n\t\t\t\t\t\tcallbacks.onAnthropicAdaptiveByDefaultChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"client-adaptive-default\":\n\t\t\t\t\t\tcallbacks.onClientAdaptiveByDefaultChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"hide-thinking\":\n\t\t\t\t\t\tcallbacks.onHideThinkingBlockChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"collapse-tool-calls\":\n\t\t\t\t\t\tcallbacks.onCollapseToolCallsChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tool-output-mode\":\n\t\t\t\t\t\tcallbacks.onToolOutputModeChange(newValue as \"minimal\" | \"normal\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"sandbox-enabled\":\n\t\t\t\t\t\tcallbacks.onSandboxEnabledChange?.(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"sandbox-network\":\n\t\t\t\t\t\tcallbacks.onSandboxNetworkModeChange?.(newValue as \"allow\" | \"ask\" | \"deny\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"collapse-changelog\":\n\t\t\t\t\t\tcallbacks.onCollapseChangelogChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"quiet-startup\":\n\t\t\t\t\t\tcallbacks.onQuietStartupChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"double-escape-action\":\n\t\t\t\t\t\tcallbacks.onDoubleEscapeActionChange(newValue as \"fork\" | \"tree\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tree-filter-mode\":\n\t\t\t\t\t\tcallbacks.onTreeFilterModeChange(\n\t\t\t\t\t\t\tnewValue as \"default\" | \"no-tools\" | \"user-only\" | \"labeled-only\" | \"all\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"show-hardware-cursor\":\n\t\t\t\t\t\tcallbacks.onShowHardwareCursorChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"editor-padding\":\n\t\t\t\t\t\tcallbacks.onEditorPaddingXChange(parseInt(newValue, 10));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"autocomplete-max-visible\":\n\t\t\t\t\t\tcallbacks.onAutocompleteMaxVisibleChange(parseInt(newValue, 10));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"clear-on-shrink\":\n\t\t\t\t\t\tcallbacks.onClearOnShrinkChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"respect-gitignore-in-picker\":\n\t\t\t\t\t\tcallbacks.onRespectGitignoreInPickerChange(newValue === \"true\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"timestamp-format\":\n\t\t\t\t\t\tcallbacks.onTimestampFormatChange(newValue as \"date-time-iso\" | \"date-time-us\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"editor-scheme\":\n\t\t\t\t\t\tcallbacks.onEditorSchemeChange(\n\t\t\t\t\t\t\tnewValue as \"auto\" | \"vscode\" | \"cursor\" | \"zed\" | \"jetbrains\" | \"sublime\" | \"file\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallbacks.onCancel,\n\t\t\t{ enableSearch: true },\n\t\t);\n\n\t\tthis.addChild(this.settingsList);\n\t\tthis.addChild(new DynamicBorder());\n\t}\n\n\tgetSettingsList(): SettingsList {\n\t\treturn this.settingsList;\n\t}\n}\n"]}
|
|
@@ -27,10 +27,13 @@ export declare class ToolExecutionComponent extends Container {
|
|
|
27
27
|
private result?;
|
|
28
28
|
private editDiffPreview?;
|
|
29
29
|
private editDiffArgsKey?;
|
|
30
|
+
private writeDiffPreview?;
|
|
31
|
+
private writeDiffArgsKey?;
|
|
30
32
|
private convertedImages;
|
|
31
33
|
private writeHighlightCache?;
|
|
32
34
|
private hideComponent;
|
|
33
35
|
private manuallyHidden;
|
|
36
|
+
private indented;
|
|
34
37
|
private startTime;
|
|
35
38
|
private spinnerTimer;
|
|
36
39
|
private spinnerFrame;
|
|
@@ -41,6 +44,8 @@ export declare class ToolExecutionComponent extends Container {
|
|
|
41
44
|
* or the toolDefinition doesn't provide custom renderers.
|
|
42
45
|
*/
|
|
43
46
|
private shouldUseBuiltInRenderer;
|
|
47
|
+
private setPrimaryContent;
|
|
48
|
+
private getDiffTextToRender;
|
|
44
49
|
updateArgs(args: any): void;
|
|
45
50
|
private highlightSingleLine;
|
|
46
51
|
private refreshWriteHighlightPrefix;
|
|
@@ -51,6 +56,11 @@ export declare class ToolExecutionComponent extends Container {
|
|
|
51
56
|
* This triggers diff computation for edit tool.
|
|
52
57
|
*/
|
|
53
58
|
setArgsComplete(): void;
|
|
59
|
+
/**
|
|
60
|
+
* Compute write diff preview when we have complete args.
|
|
61
|
+
* This runs async and updates display when done.
|
|
62
|
+
*/
|
|
63
|
+
private maybeComputeWriteDiff;
|
|
54
64
|
/**
|
|
55
65
|
* Compute edit diff preview when we have complete args.
|
|
56
66
|
* This runs async and updates display when done.
|
|
@@ -73,9 +83,10 @@ export declare class ToolExecutionComponent extends Container {
|
|
|
73
83
|
private maybeConvertImagesForKitty;
|
|
74
84
|
setExpanded(expanded: boolean): void;
|
|
75
85
|
setHidden(hidden: boolean): void;
|
|
86
|
+
setIndented(indented: boolean): void;
|
|
76
87
|
isHidden(): boolean;
|
|
77
88
|
getElapsed(): number;
|
|
78
|
-
shouldHideWhenCollapsed(): boolean;
|
|
89
|
+
shouldHideWhenCollapsed(collapseToolCalls?: boolean): boolean;
|
|
79
90
|
setRenderMode(mode: "minimal" | "normal"): void;
|
|
80
91
|
setEditorScheme(scheme: EditorScheme): void;
|
|
81
92
|
setShowImages(show: boolean): void;
|
|
@@ -83,6 +94,10 @@ export declare class ToolExecutionComponent extends Container {
|
|
|
83
94
|
invalidate(): void;
|
|
84
95
|
render(width: number): string[];
|
|
85
96
|
private updateDisplay;
|
|
97
|
+
/**
|
|
98
|
+
* Render built-in edit/write diff blocks with width-aware full-line backgrounds.
|
|
99
|
+
*/
|
|
100
|
+
private renderBuiltInDiffContent;
|
|
86
101
|
/**
|
|
87
102
|
* Render bash content using visual line truncation (like bash-execution.ts)
|
|
88
103
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-execution.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/tool-execution.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,SAAS,EAMT,KAAK,GAAG,EAEX,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-execution.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/tool-execution.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Box, Container, getCapabilities, Image, imageFallback, Spacer, Text, truncateToWidth, } from "@gsd/pi-tui";
|
|
2
2
|
import stripAnsi from "strip-ansi";
|
|
3
|
-
import { computeEditDiff } from "../../../core/tools/edit-diff.js";
|
|
3
|
+
import { computeEditDiff, computeWriteDiff, } from "../../../core/tools/edit-diff.js";
|
|
4
4
|
import { allTools } from "../../../core/tools/index.js";
|
|
5
5
|
import { shouldCollapse } from "../../../core/tool-priority.js";
|
|
6
6
|
import { DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, formatSize } from "../../../core/tools/truncate.js";
|
|
@@ -10,7 +10,7 @@ import { renderTerminalText } from "../../../utils/terminal-serializer.js";
|
|
|
10
10
|
import { getLanguageFromPath, highlightCode, theme } from "../theme/theme.js";
|
|
11
11
|
import { editorLink } from "../utils/editor-link.js";
|
|
12
12
|
import { shortenPath } from "../utils/shorten-path.js";
|
|
13
|
-
import { renderDiff } from "./diff.js";
|
|
13
|
+
import { renderDiff, renderDiffLines } from "./diff.js";
|
|
14
14
|
import { truncateToVisualLines } from "./visual-truncate.js";
|
|
15
15
|
// Preview line limit for bash when not expanded
|
|
16
16
|
const BASH_PREVIEW_LINES = 5;
|
|
@@ -82,6 +82,7 @@ export class ToolExecutionComponent extends Container {
|
|
|
82
82
|
// When true, this component intentionally renders no lines
|
|
83
83
|
this.hideComponent = false;
|
|
84
84
|
this.manuallyHidden = false;
|
|
85
|
+
this.indented = false;
|
|
85
86
|
this.startTime = Date.now();
|
|
86
87
|
// Tool status spinner state
|
|
87
88
|
this.spinnerTimer = null;
|
|
@@ -117,6 +118,40 @@ export class ToolExecutionComponent extends Container {
|
|
|
117
118
|
const hasCustomRenderers = this.toolDefinition?.renderCall || this.toolDefinition?.renderResult;
|
|
118
119
|
return isBuiltInName && !hasCustomRenderers;
|
|
119
120
|
}
|
|
121
|
+
setPrimaryContent(useBox) {
|
|
122
|
+
const hasBox = this.children.includes(this.contentBox);
|
|
123
|
+
const hasText = this.children.includes(this.contentText);
|
|
124
|
+
if (useBox) {
|
|
125
|
+
if (hasText)
|
|
126
|
+
this.removeChild(this.contentText);
|
|
127
|
+
if (!hasBox)
|
|
128
|
+
this.addChild(this.contentBox);
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
if (hasBox)
|
|
132
|
+
this.removeChild(this.contentBox);
|
|
133
|
+
if (!hasText)
|
|
134
|
+
this.addChild(this.contentText);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
getDiffTextToRender() {
|
|
138
|
+
if (this.toolName === "write") {
|
|
139
|
+
if (!this.isPartial && this.writeDiffPreview && !("error" in this.writeDiffPreview) && this.writeDiffPreview.diff) {
|
|
140
|
+
return this.writeDiffPreview.diff;
|
|
141
|
+
}
|
|
142
|
+
return undefined;
|
|
143
|
+
}
|
|
144
|
+
if (this.toolName !== "edit" || this.result?.isError) {
|
|
145
|
+
return undefined;
|
|
146
|
+
}
|
|
147
|
+
if (this.result?.details?.diff) {
|
|
148
|
+
return this.result.details.diff;
|
|
149
|
+
}
|
|
150
|
+
if (this.editDiffPreview && !("error" in this.editDiffPreview) && this.editDiffPreview.diff) {
|
|
151
|
+
return this.editDiffPreview.diff;
|
|
152
|
+
}
|
|
153
|
+
return undefined;
|
|
154
|
+
}
|
|
120
155
|
updateArgs(args) {
|
|
121
156
|
this.args = args;
|
|
122
157
|
if (this.toolName === "write" && this.isPartial) {
|
|
@@ -212,9 +247,33 @@ export class ToolExecutionComponent extends Container {
|
|
|
212
247
|
if (rawPath !== null && fileContent !== null) {
|
|
213
248
|
this.rebuildWriteHighlightCacheFull(rawPath, fileContent);
|
|
214
249
|
}
|
|
250
|
+
this.maybeComputeWriteDiff();
|
|
215
251
|
}
|
|
216
252
|
this.maybeComputeEditDiff();
|
|
217
253
|
}
|
|
254
|
+
/**
|
|
255
|
+
* Compute write diff preview when we have complete args.
|
|
256
|
+
* This runs async and updates display when done.
|
|
257
|
+
*/
|
|
258
|
+
maybeComputeWriteDiff() {
|
|
259
|
+
if (this.toolName !== "write")
|
|
260
|
+
return;
|
|
261
|
+
const path = this.args?.path ?? this.args?.file_path;
|
|
262
|
+
const content = this.args?.content;
|
|
263
|
+
if (!path || content === undefined)
|
|
264
|
+
return;
|
|
265
|
+
const argsKey = JSON.stringify({ path, content });
|
|
266
|
+
if (this.writeDiffArgsKey === argsKey)
|
|
267
|
+
return;
|
|
268
|
+
this.writeDiffArgsKey = argsKey;
|
|
269
|
+
computeWriteDiff(path, content, this.cwd).then((result) => {
|
|
270
|
+
if (this.writeDiffArgsKey === argsKey) {
|
|
271
|
+
this.writeDiffPreview = result;
|
|
272
|
+
this.updateDisplay();
|
|
273
|
+
this.ui.requestRender();
|
|
274
|
+
}
|
|
275
|
+
});
|
|
276
|
+
}
|
|
218
277
|
/**
|
|
219
278
|
* Compute edit diff preview when we have complete args.
|
|
220
279
|
* This runs async and updates display when done.
|
|
@@ -298,14 +357,18 @@ export class ToolExecutionComponent extends Container {
|
|
|
298
357
|
this.manuallyHidden = hidden;
|
|
299
358
|
this.updateDisplay();
|
|
300
359
|
}
|
|
360
|
+
setIndented(indented) {
|
|
361
|
+
this.indented = indented;
|
|
362
|
+
this.updateDisplay();
|
|
363
|
+
}
|
|
301
364
|
isHidden() {
|
|
302
365
|
return this.hideComponent;
|
|
303
366
|
}
|
|
304
367
|
getElapsed() {
|
|
305
368
|
return Date.now() - this.startTime;
|
|
306
369
|
}
|
|
307
|
-
shouldHideWhenCollapsed() {
|
|
308
|
-
return !this.isPartial && shouldCollapse(this.toolName, this.result?.isError ?? false);
|
|
370
|
+
shouldHideWhenCollapsed(collapseToolCalls = true) {
|
|
371
|
+
return collapseToolCalls && !this.isPartial && shouldCollapse(this.toolName, this.result?.isError ?? false);
|
|
309
372
|
}
|
|
310
373
|
setRenderMode(mode) {
|
|
311
374
|
if (this.renderMode !== mode) {
|
|
@@ -335,7 +398,18 @@ export class ToolExecutionComponent extends Container {
|
|
|
335
398
|
if (this.hideComponent) {
|
|
336
399
|
return [];
|
|
337
400
|
}
|
|
338
|
-
|
|
401
|
+
const lines = super.render(width);
|
|
402
|
+
if (this.indented) {
|
|
403
|
+
const gutter = theme.fg("dim", "│");
|
|
404
|
+
return lines.map((line, i) => {
|
|
405
|
+
if (i === lines.length - 1 && line === "") {
|
|
406
|
+
// Trailing empty spacer line → gutter only
|
|
407
|
+
return gutter;
|
|
408
|
+
}
|
|
409
|
+
return gutter + " " + theme.fg("dim", line);
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
return [...lines, ""];
|
|
339
413
|
}
|
|
340
414
|
updateDisplay() {
|
|
341
415
|
// Status indicator with circle
|
|
@@ -370,15 +444,23 @@ export class ToolExecutionComponent extends Container {
|
|
|
370
444
|
}
|
|
371
445
|
}
|
|
372
446
|
const useBuiltInRenderer = this.shouldUseBuiltInRenderer();
|
|
447
|
+
const diffTextToRender = this.getDiffTextToRender();
|
|
373
448
|
let customRendererHasContent = false;
|
|
374
449
|
// Use built-in rendering for built-in tools (or overrides without custom renderers)
|
|
375
450
|
if (useBuiltInRenderer) {
|
|
451
|
+
const useDiffBox = !!diffTextToRender && !this.shouldHideCollapsedPreview();
|
|
452
|
+
this.setPrimaryContent(this.toolName === "bash" || useDiffBox);
|
|
376
453
|
if (this.toolName === "bash") {
|
|
377
454
|
// Bash uses Box with visual line truncation - no background
|
|
378
455
|
this.contentBox.setBgFn((text) => text);
|
|
379
456
|
this.contentBox.clear();
|
|
380
457
|
this.renderBashContent(statusIndicator);
|
|
381
458
|
}
|
|
459
|
+
else if (useDiffBox && diffTextToRender) {
|
|
460
|
+
this.contentBox.setBgFn((text) => text);
|
|
461
|
+
this.contentBox.clear();
|
|
462
|
+
this.renderBuiltInDiffContent(statusIndicator, diffTextToRender);
|
|
463
|
+
}
|
|
382
464
|
else {
|
|
383
465
|
// Other built-in tools: use Text directly with caching - no background
|
|
384
466
|
this.contentText.setCustomBgFn((text) => text);
|
|
@@ -507,6 +589,20 @@ export class ToolExecutionComponent extends Container {
|
|
|
507
589
|
const computedHidden = !useBuiltInRenderer && this.toolDefinition ? !customRendererHasContent && this.imageComponents.length === 0 : false;
|
|
508
590
|
this.hideComponent = this.manuallyHidden || computedHidden;
|
|
509
591
|
}
|
|
592
|
+
/**
|
|
593
|
+
* Render built-in edit/write diff blocks with width-aware full-line backgrounds.
|
|
594
|
+
*/
|
|
595
|
+
renderBuiltInDiffContent(statusIndicator, diffText) {
|
|
596
|
+
const header = this.formatToolExecution(statusIndicator).split("\n\n", 1)[0] ?? "";
|
|
597
|
+
this.contentBox.addChild(new Text(header, 0, 0));
|
|
598
|
+
this.contentBox.addChild({
|
|
599
|
+
render: (width) => {
|
|
600
|
+
const contentWidth = Math.max(1, width - 2);
|
|
601
|
+
return ["", ...renderDiffLines(diffText, contentWidth).map((line) => ` ${line} `)];
|
|
602
|
+
},
|
|
603
|
+
invalidate: () => { },
|
|
604
|
+
});
|
|
605
|
+
}
|
|
510
606
|
/**
|
|
511
607
|
* Render bash content using visual line truncation (like bash-execution.ts)
|
|
512
608
|
*/
|
|
@@ -726,14 +822,40 @@ export class ToolExecutionComponent extends Container {
|
|
|
726
822
|
const rawPath = str(this.args?.file_path ?? this.args?.path);
|
|
727
823
|
const fileContent = str(this.args?.content);
|
|
728
824
|
const path = rawPath !== null ? shortenPath(rawPath) : null;
|
|
825
|
+
const firstChangedLine = this.writeDiffPreview && "firstChangedLine" in this.writeDiffPreview
|
|
826
|
+
? this.writeDiffPreview.firstChangedLine
|
|
827
|
+
: undefined;
|
|
729
828
|
let writePathDisplay = path === null ? invalidArg : path ? theme.fg("accent", path) : theme.fg("toolOutput", "...");
|
|
730
829
|
if (rawPath && path) {
|
|
731
|
-
writePathDisplay = editorLink(rawPath, writePathDisplay, {
|
|
830
|
+
writePathDisplay = editorLink(rawPath, writePathDisplay, {
|
|
831
|
+
cwd: this.cwd,
|
|
832
|
+
line: firstChangedLine ?? undefined,
|
|
833
|
+
scheme: this.editorScheme,
|
|
834
|
+
});
|
|
835
|
+
}
|
|
836
|
+
if (firstChangedLine) {
|
|
837
|
+
writePathDisplay += theme.fg("warning", `:${firstChangedLine}`);
|
|
732
838
|
}
|
|
733
839
|
text = `${statusIndicator} ${theme.fg("toolTitle", theme.bold("write"))} ${writePathDisplay}`;
|
|
734
840
|
if (fileContent === null) {
|
|
735
841
|
text += `\n\n${theme.fg("error", "[invalid content arg - expected string]")}`;
|
|
736
842
|
}
|
|
843
|
+
else if (this.result?.isError) {
|
|
844
|
+
const errorText = this.getTextOutput();
|
|
845
|
+
if (errorText) {
|
|
846
|
+
text += `\n\n${theme.fg("error", errorText)}`;
|
|
847
|
+
}
|
|
848
|
+
}
|
|
849
|
+
else if (!this.isPartial && this.writeDiffPreview) {
|
|
850
|
+
if ("error" in this.writeDiffPreview) {
|
|
851
|
+
text += `\n\n${theme.fg("error", this.writeDiffPreview.error)}`;
|
|
852
|
+
}
|
|
853
|
+
else if (this.writeDiffPreview.diff) {
|
|
854
|
+
text += hideCollapsedPreview
|
|
855
|
+
? this.collapsedHintWithPrefix()
|
|
856
|
+
: `\n\n${renderDiff(this.writeDiffPreview.diff, { filePath: rawPath ?? undefined })}`;
|
|
857
|
+
}
|
|
858
|
+
}
|
|
737
859
|
else if (fileContent) {
|
|
738
860
|
const lang = rawPath ? getLanguageFromPath(rawPath) : undefined;
|
|
739
861
|
let lines;
|
|
@@ -775,13 +897,6 @@ export class ToolExecutionComponent extends Container {
|
|
|
775
897
|
}
|
|
776
898
|
}
|
|
777
899
|
}
|
|
778
|
-
// Show error if tool execution failed
|
|
779
|
-
if (this.result?.isError) {
|
|
780
|
-
const errorText = this.getTextOutput();
|
|
781
|
-
if (errorText) {
|
|
782
|
-
text += `\n\n${theme.fg("error", errorText)}`;
|
|
783
|
-
}
|
|
784
|
-
}
|
|
785
900
|
}
|
|
786
901
|
else if (this.toolName === "edit") {
|
|
787
902
|
const rawPath = str(this.args?.file_path ?? this.args?.path);
|