// @generated by scripts/build-runtime.mjs; do not edit. // @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader. import { terminalText } from "./chunk-K6TRB5OJ.ts"; // src/settings-menu.ts var settingsChangeQueues = /* @__PURE__ */ new WeakMap(); function enqueueSettingsChange(runtime, operation) { const queued = settingsChangeQueues.get(runtime) ?? Promise.resolve(); const result = queued.then(operation, operation); settingsChangeQueues.set( runtime, result.then( () => void 0, () => void 0 ) ); return result; } async function updateEnabled(runtime, ctx, enabled, signal, onSettingsChanged) { return enqueueSettingsChange(runtime, async () => { const previous = runtime.get().settings.enabled; try { await runtime.update({ enabled }, signal); } catch (error) { if (signal.aborted) return { kind: "rejected" }; ctx.ui.notify( `Could not save pi-context-management.json: ${terminalText(error instanceof Error ? error.message : String(error))}`, "error" ); return { kind: "rejected" }; } try { await onSettingsChanged(); } catch (error) { let rollbackError; try { await runtime.update({ enabled: previous }); await onSettingsChanged(); } catch (recoveryError) { rollbackError = recoveryError; } if (signal.aborted) return { kind: "rejected" }; const failure = terminalText(error instanceof Error ? error.message : String(error)); const recovery = rollbackError ? ` The previous setting could not be fully restored: ${terminalText(rollbackError instanceof Error ? rollbackError.message : String(rollbackError))}` : " The previous setting was restored."; ctx.ui.notify(`Could not apply experimental context management: ${failure}.${recovery}`, "error"); return { kind: "rejected" }; } if (signal.aborted) return { kind: "rejected" }; ctx.ui.notify("Context management settings saved.", "info"); return { kind: "stay" }; }); } function createContextManagementMenu(runtime, options = {}) { return { start: "main", screens: { main: ({ state }) => ({ kind: "actions", title: "Experimental Context Management", lines: [ `Configured: ${state.settings.enabled ? "On" : "Off"}`, `Runtime: ${options.isActive?.() ? "Active" : state.settings.enabled ? "Unavailable" : "Inactive"}` ], items: [ state.kind === "invalid" ? { id: "settings", label: "Settings", description: "Read-only until the invalid settings file is repaired.", to: "invalid" } : { id: "settings", label: "Settings", to: "settings" }, { id: "status", label: "Status", to: "status" }, { id: "help", label: "Help", to: "help" }, { id: "close", label: "Close", close: true } ], hint: "close" }), settings: ({ state }) => ({ kind: "settings", title: "Context Management Settings", lines: [`User settings \xB7 ${terminalText(state.path)}`], items: [ { id: "enabled", label: "Experimental context management", description: "Use summary-free local rollover and four branch-local context tools.", currentValue: state.settings.enabled ? "On" : "Off", values: ["On", "Off"], action: "set-enabled" } ] }), status: ({ state }) => ({ kind: "detail", title: "Context Management Status", lines: [ `Configured: ${state.settings.enabled ? "On" : "Off"}`, `Runtime: ${options.isActive?.() ? "Active" : state.settings.enabled ? "Unavailable" : "Inactive"}`, `Settings: ${terminalText(state.path)}` ], hint: "back" }), help: () => ({ kind: "detail", title: "Context Management Help", lines: [ "This experimental extension starts summary-free context windows and exposes bounded history and note tools.", "Save important information in notes before starting a new context.", "Disabling the extension restores Pi-native compaction after the active run settles." ], hint: "back" }), invalid: ({ state }) => ({ kind: "detail", title: "Context Management Settings \xB7 Read only", lines: [ `Invalid settings file: ${terminalText(state.path)}`, `Issue: ${terminalText(state.issue ?? "unknown validation error")}`, "Built-in defaults are active. Repair the file and run /reload; it will not be overwritten." ], hint: "back" }) }, actions: { "set-enabled": ({ ctx, value, signal }) => updateEnabled(runtime, ctx, value === "On", signal, options.onSettingsChanged ?? (() => void 0)) } }; } async function showContextManagementMenu(runtime, ctx, owner) { if (ctx.mode === "rpc" && ctx.hasUI) { ctx.ui.notify(`Edit experimental context management settings at ${terminalText(runtime.get().path)}.`, "info"); return; } if (ctx.mode !== "tui") { throw new Error("/context-management requires TUI or RPC UI support"); } const { runMenu } = await import("@narumitw/pi-tui-kit"); if (owner.signal.aborted || !owner.isCurrent()) return; await runMenu( ctx, createContextManagementMenu(runtime, { isActive: owner.isActive, onSettingsChanged: owner.onSettingsChanged }), { getState: () => runtime.get(), signal: owner.signal, isCurrent: owner.isCurrent } ); } export { createContextManagementMenu, showContextManagementMenu }; //# sourceMappingURL=settings-menu-WBYIMN23.ts.map