{"version":3,"file":"panel.mjs","names":[],"sources":["../../src/command/panel.ts"],"sourcesContent":["import { DynamicBorder, type Theme } from '@earendil-works/pi-coding-agent';\nimport {\n\tContainer,\n\ttype SelectItem,\n\tSelectList,\n\ttype SettingItem,\n\tText,\n} from '@earendil-works/pi-tui';\nimport { ON_OFF_VALUES } from '@live-compaction/command/completions';\nimport type { PromptKind, PromptResolution } from '@live-compaction/config';\nimport { CURRENT_PRESET_SENTINEL, PANEL_SCOPE_VALUES } from '@live-compaction/config';\nimport type { LiveCompactionState } from '@live-compaction/controller';\nimport {\n\tbuildPresetChoices,\n\tformatThinkingLevel,\n\tgetPresetNames,\n} from '@live-compaction/controller';\n\nexport const SETTING_IDS = {\n\tscope: 'scope',\n\tdefaultScope: 'default-scope',\n\tinheritSessionModel: 'inherit-session-model',\n\tcompactionFiles: 'compaction-files',\n\tbranchFiles: 'branch-files',\n\tdefaultPreset: 'default-preset',\n\tpresets: 'presets',\n\tcompactionPrompt: 'compaction-prompt',\n\tbranchPrompt: 'branch-prompt',\n} as const;\n\nexport type PanelExternalAction =\n\t| { kind: 'preset'; action: 'add' | 'edit' | 'delete' }\n\t| { kind: 'prompt'; promptKind: PromptKind; action: 'edit' | 'reset' };\n\n// ---------------------------------------------------------------------------\n// Describe helpers\n// ---------------------------------------------------------------------------\n\nfunction describeDefaultPanelScope(state: LiveCompactionState): string {\n\tswitch (state.config.defaultPanelScope) {\n\t\tcase 'global':\n\t\t\treturn 'Settings panel opens to the global scope by default.';\n\t\tcase 'project':\n\t\t\treturn 'Settings panel opens to the project scope when one is available, otherwise global.';\n\t}\n}\n\nfunction describeInheritSessionModel(enabled: boolean): string {\n\treturn enabled\n\t\t? \"Automatic /compact runs use the current session model + thinking level instead of the configured default preset. Explicit '/compact --preset NAME' and a template 'preset:' frontmatter still win.\"\n\t\t: 'Automatic /compact runs use the configured default preset. Toggle on to inherit the current session model instead.';\n}\n\nexport function describeScope(state: LiveCompactionState): string {\n\tif (!state.projectScopeAvailable) {\n\t\treturn 'Editing global defaults. Project scope is unavailable outside a project session.';\n\t}\n\tif (state.scope === 'project') {\n\t\treturn 'Editing project-local overrides. These take precedence over global defaults for this repo.';\n\t}\n\tif (state.projectScopeHasOverrides) {\n\t\treturn 'Editing global defaults. Project overrides also exist and win inside this repo.';\n\t}\n\treturn 'Editing global defaults. Switch to project scope to create repo-local overrides.';\n}\n\nfunction describeFilesTouchedSummary(enabled: boolean, kind: 'compaction' | 'branch'): string {\n\tif (kind === 'compaction') {\n\t\treturn enabled\n\t\t\t? 'Include the deterministic files-touched manifest in compaction summaries.'\n\t\t\t: 'Do not append the files-touched manifest to compaction summaries.';\n\t}\n\treturn enabled\n\t\t? 'Inject the files-touched manifest into /tree branch-summary instructions.'\n\t\t: 'Leave /tree branch summaries ungrounded by the files-touched manifest.';\n}\n\nfunction describeDefaultPreset(state: LiveCompactionState): string {\n\tif (state.config.defaultPreset === CURRENT_PRESET_SENTINEL) {\n\t\treturn 'Use the current session model and thinking level for /compact unless --preset overrides it.';\n\t}\n\tconst preset = state.config.presets[state.config.defaultPreset];\n\tif (!preset) return 'Selected default preset is missing. Use Enter to choose a valid preset.';\n\treturn `Use ${preset.model} (${formatThinkingLevel(preset.thinkingLevel)}) for /compact unless --preset overrides it.`;\n}\n\nfunction describePresetCollection(state: LiveCompactionState): string {\n\tconst names = getPresetNames(state.config);\n\tif (names.length === 0)\n\t\treturn 'No presets configured for this scope. Enter opens add, edit, and delete actions.';\n\treturn `Configured presets: ${names.join(', ')}. Enter opens add, edit, and delete actions.`;\n}\n\nfunction describePromptResolution(kind: PromptKind, prompt: PromptResolution): string {\n\tif (kind === 'compaction') {\n\t\tif (prompt.source === 'default')\n\t\t\treturn 'Using the built-in compaction prompt contract. Enter opens edit and reset actions.';\n\t\tif (prompt.isBlankOverride)\n\t\t\treturn `A blank ${prompt.source} override is present, so compaction falls back to the built-in default contract.`;\n\t\treturn `Using the ${prompt.source} compaction prompt override. Enter opens edit and reset actions.`;\n\t}\n\tif (prompt.source === 'default')\n\t\treturn \"Using Pi's stock branch-summary instructions. Enter opens edit and reset actions.\";\n\tif (prompt.isBlankOverride)\n\t\treturn `A blank ${prompt.source} override is present, so Pi's stock branch-summary instructions stay active.`;\n\treturn `Using the ${prompt.source} branch-summary prompt override. Enter opens edit and reset actions.`;\n}\n\nexport function toOnOff(value: boolean): string {\n\treturn value ? 'on' : 'off';\n}\n\nexport function promptLabel(kind: PromptKind): string {\n\treturn kind === 'compaction' ? 'Compaction prompt' : 'Branch summary prompt';\n}\n\nexport function promptValue(prompt: PromptResolution): string {\n\tif (prompt.source === 'default') return 'default';\n\tif (prompt.isBlankOverride) return `${prompt.source}: blank`;\n\treturn `${prompt.source}: custom`;\n}\n\n// ---------------------------------------------------------------------------\n// Selection submenu builder\n// ---------------------------------------------------------------------------\n\nexport function createSelectionSubmenu(\n\ttitle: string,\n\tdescription: string,\n\titems: SelectItem[],\n\ttheme: Theme,\n\trequestRender: () => void,\n\tdone: (selectedValue?: string) => void,\n) {\n\tconst container = new Container();\n\tcontainer.addChild(new DynamicBorder((value: string) => theme.fg('accent', value)));\n\tcontainer.addChild(new Text(theme.fg('accent', theme.bold(title)), 0, 0));\n\tcontainer.addChild(new Text(theme.fg('dim', description), 0, 0));\n\tconst selectList = new SelectList(items, 10, {\n\t\tselectedPrefix: (text) => theme.fg('accent', text),\n\t\tselectedText: (text) => text,\n\t\tdescription: (text) => theme.fg('muted', text),\n\t\tscrollInfo: (text) => theme.fg('dim', text),\n\t\tnoMatch: (text) => theme.fg('warning', text),\n\t});\n\tselectList.onSelect = (item) => done(item.value);\n\tselectList.onCancel = () => done(undefined);\n\tcontainer.addChild(selectList);\n\tcontainer.addChild(new Text(theme.fg('dim', 'Enter: select | Esc: back'), 0, 0));\n\treturn {\n\t\trender(width: number): string[] {\n\t\t\treturn container.render(width);\n\t\t},\n\t\tinvalidate(): void {\n\t\t\tcontainer.invalidate();\n\t\t},\n\t\thandleInput(data: string): void {\n\t\t\tselectList.handleInput(data);\n\t\t\trequestRender();\n\t\t},\n\t};\n}\n\n// ---------------------------------------------------------------------------\n// Panel items factory + sync\n// ---------------------------------------------------------------------------\n\nexport function createPanelItems(\n\tstateGetter: () => LiveCompactionState,\n\ttheme: Theme,\n\trequestRender: () => void,\n\tdone: (action?: PanelExternalAction) => void,\n): SettingItem[] {\n\treturn [\n\t\t{ id: SETTING_IDS.scope, label: 'Scope', description: '', currentValue: 'global' },\n\t\t{\n\t\t\tid: SETTING_IDS.defaultScope,\n\t\t\tlabel: 'Default scope',\n\t\t\tdescription: '',\n\t\t\tcurrentValue: 'global',\n\t\t\tvalues: [...PANEL_SCOPE_VALUES],\n\t\t},\n\t\t{\n\t\t\tid: SETTING_IDS.inheritSessionModel,\n\t\t\tlabel: 'Inherit current session model',\n\t\t\tdescription: '',\n\t\t\tcurrentValue: 'off',\n\t\t\tvalues: ON_OFF_VALUES,\n\t\t},\n\t\t{\n\t\t\tid: SETTING_IDS.compactionFiles,\n\t\t\tlabel: 'Files touched in compaction',\n\t\t\tdescription: '',\n\t\t\tcurrentValue: 'on',\n\t\t\tvalues: ON_OFF_VALUES,\n\t\t},\n\t\t{\n\t\t\tid: SETTING_IDS.branchFiles,\n\t\t\tlabel: 'Files touched in branch summary',\n\t\t\tdescription: '',\n\t\t\tcurrentValue: 'on',\n\t\t\tvalues: ON_OFF_VALUES,\n\t\t},\n\t\t{\n\t\t\tid: SETTING_IDS.defaultPreset,\n\t\t\tlabel: 'Default preset',\n\t\t\tdescription: '',\n\t\t\tcurrentValue: CURRENT_PRESET_SENTINEL,\n\t\t\tsubmenu: (_cv, submenuDone) => {\n\t\t\t\tconst state = stateGetter();\n\t\t\t\tconst items = buildPresetChoices(state.config).map((choice) => {\n\t\t\t\t\tif (choice === CURRENT_PRESET_SENTINEL) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tvalue: choice,\n\t\t\t\t\t\t\tlabel: choice,\n\t\t\t\t\t\t\tdescription: 'Use the current session model and thinking level for /compact.',\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tconst preset = state.config.presets[choice];\n\t\t\t\t\tconst thinking = preset ? formatThinkingLevel(preset.thinkingLevel) : 'unset';\n\t\t\t\t\treturn {\n\t\t\t\t\t\tvalue: choice,\n\t\t\t\t\t\tlabel: choice,\n\t\t\t\t\t\tdescription: preset ? `${preset.model} (${thinking})` : 'Preset definition is missing.',\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\treturn createSelectionSubmenu(\n\t\t\t\t\t'Default preset',\n\t\t\t\t\t'Choose which preset runs /compact by default.',\n\t\t\t\t\titems,\n\t\t\t\t\ttheme,\n\t\t\t\t\trequestRender,\n\t\t\t\t\tsubmenuDone,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tid: SETTING_IDS.presets,\n\t\t\tlabel: 'Preset definitions',\n\t\t\tdescription: '',\n\t\t\tcurrentValue: '0 presets',\n\t\t\tsubmenu: () =>\n\t\t\t\tcreateSelectionSubmenu(\n\t\t\t\t\t'Preset definitions',\n\t\t\t\t\t'Manage named summarizer presets for this scope.',\n\t\t\t\t\t[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvalue: 'add',\n\t\t\t\t\t\t\tlabel: 'Add preset',\n\t\t\t\t\t\t\tdescription: 'Create a new named summarizer preset.',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvalue: 'edit',\n\t\t\t\t\t\t\tlabel: 'Edit preset',\n\t\t\t\t\t\t\tdescription: 'Update an existing preset in this scope.',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvalue: 'delete',\n\t\t\t\t\t\t\tlabel: 'Delete preset',\n\t\t\t\t\t\t\tdescription: 'Remove a preset from this scope.',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\ttheme,\n\t\t\t\t\trequestRender,\n\t\t\t\t\t(v) => {\n\t\t\t\t\t\tif (v === 'add' || v === 'edit' || v === 'delete') {\n\t\t\t\t\t\t\tdone({ kind: 'preset', action: v });\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdone(undefined);\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t},\n\t\t{\n\t\t\tid: SETTING_IDS.compactionPrompt,\n\t\t\tlabel: 'Compaction prompt',\n\t\t\tdescription: '',\n\t\t\tcurrentValue: 'default',\n\t\t\tsubmenu: () =>\n\t\t\t\tcreateSelectionSubmenu(\n\t\t\t\t\t'Compaction prompt',\n\t\t\t\t\t'Edit or reset the scoped compaction prompt override.',\n\t\t\t\t\t[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvalue: 'edit',\n\t\t\t\t\t\t\tlabel: 'Edit prompt',\n\t\t\t\t\t\t\tdescription: 'Open the current compaction prompt in the editor.',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvalue: 'reset',\n\t\t\t\t\t\t\tlabel: 'Reset prompt',\n\t\t\t\t\t\t\tdescription: 'Delete the scoped compaction prompt override.',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\ttheme,\n\t\t\t\t\trequestRender,\n\t\t\t\t\t(v) => {\n\t\t\t\t\t\tif (v === 'edit' || v === 'reset') {\n\t\t\t\t\t\t\tdone({ kind: 'prompt', promptKind: 'compaction', action: v });\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdone(undefined);\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t},\n\t\t{\n\t\t\tid: SETTING_IDS.branchPrompt,\n\t\t\tlabel: 'Branch summary prompt',\n\t\t\tdescription: '',\n\t\t\tcurrentValue: 'default',\n\t\t\tsubmenu: () =>\n\t\t\t\tcreateSelectionSubmenu(\n\t\t\t\t\t'Branch summary prompt',\n\t\t\t\t\t'Edit or reset the scoped branch-summary prompt override.',\n\t\t\t\t\t[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvalue: 'edit',\n\t\t\t\t\t\t\tlabel: 'Edit prompt',\n\t\t\t\t\t\t\tdescription: 'Open the current branch-summary prompt in the editor.',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvalue: 'reset',\n\t\t\t\t\t\t\tlabel: 'Reset prompt',\n\t\t\t\t\t\t\tdescription: 'Delete the scoped branch-summary prompt override.',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\ttheme,\n\t\t\t\t\trequestRender,\n\t\t\t\t\t(v) => {\n\t\t\t\t\t\tif (v === 'edit' || v === 'reset') {\n\t\t\t\t\t\t\tdone({ kind: 'prompt', promptKind: 'branch-summary', action: v });\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdone(undefined);\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t},\n\t];\n}\n\nexport function syncPanelItems(items: SettingItem[], state: LiveCompactionState): void {\n\tfor (const item of items) {\n\t\tswitch (item.id) {\n\t\t\tcase SETTING_IDS.scope:\n\t\t\t\titem.currentValue = state.scope;\n\t\t\t\titem.description = describeScope(state);\n\t\t\t\titem.values = state.projectScopeAvailable ? ['global', 'project'] : undefined;\n\t\t\t\tbreak;\n\t\t\tcase SETTING_IDS.defaultScope:\n\t\t\t\titem.currentValue = state.config.defaultPanelScope;\n\t\t\t\titem.description = describeDefaultPanelScope(state);\n\t\t\t\titem.values = [...PANEL_SCOPE_VALUES];\n\t\t\t\tbreak;\n\t\t\tcase SETTING_IDS.inheritSessionModel:\n\t\t\t\titem.currentValue = toOnOff(state.config.inheritSessionModel);\n\t\t\t\titem.description = describeInheritSessionModel(state.config.inheritSessionModel);\n\t\t\t\titem.values = ON_OFF_VALUES;\n\t\t\t\tbreak;\n\t\t\tcase SETTING_IDS.compactionFiles:\n\t\t\t\titem.currentValue = toOnOff(state.config.includeFilesTouched.inCompactionSummary);\n\t\t\t\titem.description = describeFilesTouchedSummary(\n\t\t\t\t\tstate.config.includeFilesTouched.inCompactionSummary,\n\t\t\t\t\t'compaction',\n\t\t\t\t);\n\t\t\t\titem.values = ON_OFF_VALUES;\n\t\t\t\tbreak;\n\t\t\tcase SETTING_IDS.branchFiles:\n\t\t\t\titem.currentValue = toOnOff(state.config.includeFilesTouched.inBranchSummary);\n\t\t\t\titem.description = describeFilesTouchedSummary(\n\t\t\t\t\tstate.config.includeFilesTouched.inBranchSummary,\n\t\t\t\t\t'branch',\n\t\t\t\t);\n\t\t\t\titem.values = ON_OFF_VALUES;\n\t\t\t\tbreak;\n\t\t\tcase SETTING_IDS.defaultPreset:\n\t\t\t\titem.currentValue = state.config.defaultPreset;\n\t\t\t\titem.description = describeDefaultPreset(state);\n\t\t\t\tbreak;\n\t\t\tcase SETTING_IDS.presets: {\n\t\t\t\tconst presetCount = getPresetNames(state.config).length;\n\t\t\t\titem.currentValue = presetCount === 1 ? '1 preset' : `${String(presetCount)} presets`;\n\t\t\t\titem.description = describePresetCollection(state);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SETTING_IDS.compactionPrompt:\n\t\t\t\titem.currentValue = promptValue(state.compactionPrompt);\n\t\t\t\titem.description = describePromptResolution('compaction', state.compactionPrompt);\n\t\t\t\tbreak;\n\t\t\tcase SETTING_IDS.branchPrompt:\n\t\t\t\titem.currentValue = promptValue(state.branchSummaryPrompt);\n\t\t\t\titem.description = describePromptResolution('branch-summary', state.branchSummaryPrompt);\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n"],"mappings":"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"}