@timurproko/a1 0.1.8-dev.528 → 0.1.8-dev.536
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/dist/app/session-shell/session-shell-root.d.ts +1 -0
- package/dist/app/session-shell/session-shell-root.js +3 -1
- package/dist/app/session-shell/session-shell.d.ts +1 -1
- package/dist/app/session-shell/session-shell.js +10 -4
- package/dist/composition/owned-ui.js +4 -3
- package/dist/composition/settings-route-host.d.ts +5 -9
- package/dist/composition/settings-route-host.js +2 -2
- package/dist/contracts/owned-ui/model.d.ts +4 -0
- package/dist/contracts/owned-ui/validation.js +25 -0
- package/dist/features/owned-ui/index.d.ts +1 -1
- package/dist/features/owned-ui/reference-screen-app.d.ts +9 -3
- package/dist/features/owned-ui/reference-screen-app.js +68 -20
- package/dist/features/owned-ui/settings-app.js +69 -24
- package/dist/foundation/startup/startup-descriptor.js +2 -2
- package/dist/integrations/pi/components/index.d.ts +3 -1
- package/dist/integrations/pi/components/index.js +2 -1
- package/dist/integrations/pi/components/shell-editor-autocomplete.d.ts +9 -1
- package/dist/integrations/pi/components/shell-editor-autocomplete.js +10 -9
- package/dist/integrations/pi/components/shell-footer-status.d.ts +1 -1
- package/dist/integrations/pi/components/shell-footer-status.js +2 -2
- package/dist/integrations/pi/components/shell-hotkey-sections.d.ts +7 -0
- package/dist/integrations/pi/components/shell-hotkey-sections.js +29 -0
- package/dist/integrations/pi/components/shell-presenters-info.d.ts +1 -0
- package/dist/integrations/pi/components/shell-presenters-info.js +1 -1
- package/dist/integrations/pi/components/shell-selectors-dialogs.d.ts +0 -1
- package/dist/integrations/pi/components/shell-selectors-dialogs.js +1 -7
- package/dist/integrations/pi/components/thinking-selector-dialog.d.ts +8 -0
- package/dist/integrations/pi/components/thinking-selector-dialog.js +22 -0
- package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.js +1 -1
- package/dist/integrations/pi/components/upstream/assets/earendil-image.json +2 -2
- package/dist/integrations/pi/components/upstream/components/countdown-timer.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/components/daxnuts.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/components/daxnuts.js +1 -1
- package/dist/integrations/pi/components/upstream/components/earendil-announcement.js +1 -1
- package/dist/integrations/pi/components/upstream/components/extension-editor.d.ts +2 -1
- package/dist/integrations/pi/components/upstream/components/extension-editor.js +7 -2
- package/dist/integrations/pi/components/upstream/components/mermaid.js +1 -1
- package/dist/integrations/pi/components/upstream/components/owned-editor.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/components/owned-editor.js +1 -1
- package/dist/integrations/pi/components/upstream/components/scoped-models-selector.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/components/session-footer.d.ts +2 -1
- package/dist/integrations/pi/components/upstream/components/session-footer.js +22 -11
- package/dist/integrations/pi/components/upstream/components/session-selector-search.js +1 -1
- package/dist/integrations/pi/components/upstream/components/session-selector.js +1 -1
- package/dist/integrations/pi/components/upstream/components/skill-invocation-message.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/components/skill-invocation-message.js +1 -1
- package/dist/integrations/pi/components/upstream/components/status-indicator.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/components/status-indicator.js +1 -1
- package/dist/integrations/pi/components/upstream/components/thinking-selector.d.ts +33 -0
- package/dist/integrations/pi/components/upstream/components/thinking-selector.js +140 -0
- package/dist/integrations/pi/components/upstream/components/tool-execution.js +1 -1
- package/dist/integrations/pi/components/upstream/components/tree-selector.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/components/tree-selector.js +8 -1
- package/dist/integrations/pi/components/upstream/components/trust-selector.js +1 -1
- package/dist/integrations/pi/components/upstream/external-editor.js +1 -1
- package/dist/integrations/pi/components/upstream/history/editor-core.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/history/editor-core.js +1 -1
- package/dist/integrations/pi/components/upstream/history/kill-ring.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/history/kill-ring.js +1 -1
- package/dist/integrations/pi/components/upstream/history/printable-key.js +1 -1
- package/dist/integrations/pi/components/upstream/history/text-helpers.js +1 -1
- package/dist/integrations/pi/components/upstream/history/undo-stack.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/history/undo-stack.js +1 -1
- package/dist/integrations/pi/components/upstream/history/word-navigation.js +1 -1
- package/dist/integrations/pi/components/upstream/model-search.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/theme/theme-controller.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/theme/theme.js +1 -1
- package/dist/integrations/pi/engine/adapter.js +1 -0
- package/dist/integrations/pi/engine/repository-pr.d.ts +8 -0
- package/dist/integrations/pi/engine/repository-pr.js +62 -0
- package/dist/integrations/pi/engine/resources/changelog.json +4 -4
- package/dist/integrations/pi/engine/session-runtime.d.ts +5 -0
- package/dist/integrations/pi/engine/session-runtime.js +60 -1
- package/dist/integrations/pi/engine/workflow-support.js +3 -1
- package/dist/integrations/pi/engine/workflows.d.ts +1 -1
- package/dist/integrations/pi/engine/workflows.js +4 -2
- package/dist/integrations/pi/startup-public.js +63 -56
- package/dist/integrations/pi/startup-public.manifest.json +200 -169
- package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +1 -1
- package/dist/integrations/pi/tui-runtime/damage-aware-terminal.js +1 -1
- package/dist/native/darwin-arm64/manifest.json +1 -1
- package/dist/native/linux-x64/manifest.json +1 -1
- package/dist/native/win32-x64/manifest.json +2 -2
- package/dist/native/win32-x64/process-guardian.exe +0 -0
- package/dist/product-identity.d.ts +1 -1
- package/dist/product-identity.js +1 -1
- package/dist/product-identity.json +1 -0
- package/dist/runtime-payload-inventory.json +2948 -2646
- package/dist/ui/components/index.d.ts +1 -1
- package/dist/ui/components/list-block.d.ts +10 -6
- package/dist/ui/components/list-block.js +28 -15
- package/dist/ui/components/list-view.d.ts +1 -1
- package/dist/ui/components/list-view.js +4 -2
- package/dist/ui/components/mouse.js +4 -2
- package/dist/ui/components/theme.d.ts +1 -5
- package/dist/ui/components/theme.js +0 -4
- package/dist/ui/components/value-menu.d.ts +3 -1
- package/dist/ui/components/value-menu.js +13 -5
- package/docs/local-worktree-cleanup.md +1 -1
- package/package.json +3 -3
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export { adaptPiAssistantMessage, adaptPiToolExecution, adaptPiUserMessage } from "./components.js";
|
|
2
2
|
export { loadHistoryEditor } from "./history-editor-loader.js";
|
|
3
3
|
export { PiComponentConformanceError, runPiComponentConformance } from "./conformance.js";
|
|
4
|
-
export { OWNED_BUILTIN_SLASH_COMMANDS, PINNED_PI_BUILTIN_SLASH_COMMANDS, componentFromPort, componentPort, createPiExtensionUiBridge, createPiQueuedInputStatus, createPiShellArmin, createPiShellAuthProviderSelector, createPiShellChangelog, createPiShellCollapsedChangelog, createPiShellDaxnuts, createPiShellDialog, createPiShellEarendilAnnouncement, createPiShellEditor, createPiShellExtensionSelector, createPiShellFooter, createPiShellHeader, createPiShellHotkeys, createPiShellLoadedResources, createPiShellLoginDialog, createPiShellModelSelector, createPiShellModelsDialog, createPiShellOperationLoader, createPiShellReloadBox, createPiShellScopedModelsSelector, createPiShellSelector, createPiShellSessionInfo, createPiShellSessionSelector, createPiShellSettingsSelector, createPiShellShowImagesSelector, createPiShellSkillsSelector, createPiShellStatus, createPiShellThemeSelector,
|
|
4
|
+
export { OWNED_BUILTIN_SLASH_COMMANDS, PINNED_PI_BUILTIN_SLASH_COMMANDS, componentFromPort, componentPort, createPiExtensionUiBridge, createPiQueuedInputStatus, createPiShellArmin, createPiShellAuthProviderSelector, createPiShellChangelog, createPiShellCollapsedChangelog, createPiShellDaxnuts, createPiShellDialog, createPiShellEarendilAnnouncement, createPiShellEditor, createPiShellExtensionSelector, createPiShellFooter, createPiShellHeader, createPiShellHotkeys, createPiShellLoadedResources, createPiShellLoginDialog, createPiShellModelSelector, createPiShellModelsDialog, createPiShellOperationLoader, createPiShellReloadBox, createPiShellScopedModelsSelector, createPiShellSelector, createPiShellSessionInfo, createPiShellSessionSelector, createPiShellSettingsSelector, createPiShellShowImagesSelector, createPiShellSkillsSelector, createPiShellStatus, createPiShellThemeSelector, createPiShellTranscriptComponent, createPiShellTreeSelector, createPiShellTrustSelector, createPiShellUserMessageSelector, createTuiFacade, ensureTheme, formatSessionTokens, isAutocompleteProvider, isPiPromptStyleCompaction, isRecord, paintPiSubmittedPromptTimestamp, piShellHyperlink, piShellTruncateToWidth, piShellVisibleWidth, renderPiShellChangelogLines, renderPiShellCommandMessage, renderPiShellHotkeysLines, renderPiShellPackageUpdateNotice, renderPiShellStartupDiagnostic, renderPiShellStatusText, renderPiShellTranscriptBlock, validatedAssistantMessage, } from "./shell-components.js";
|
|
5
|
+
export { renderPiShellHotkeySections } from "./shell-hotkey-sections.js";
|
|
5
6
|
export { PINNED_PI_LAYOUT, applyConfiguredPiTheme, applyPiTheme, applyPiThemeInstance, currentPiThemeName, detectPiTerminalBackgroundFromEnv, detectPiTerminalBackgroundTheme, detectPiTerminalThemeForAuto, ensurePiTheme, getAvailablePiThemes, loadPiTheme, onPiThemeChange, parsePiAutoThemeSetting, piTheme, resolvePiThemeSetting, stopPiThemeWatcher, } from "./theme.js";
|
|
6
7
|
export { OwnedPiThemeController } from "./upstream/theme/theme-controller.js";
|
|
7
8
|
export { ModelsDialogComponent } from "./models-dialog.js";
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { type PiShellEditorPort, type PiShellEditorOptions } from "./shell-shared-facade.js";
|
|
2
2
|
export declare const PINNED_PI_BUILTIN_SLASH_COMMANDS: ({
|
|
3
|
+
readonly name: "thinking";
|
|
4
|
+
readonly description: "Set thinking level";
|
|
5
|
+
readonly argumentHint: "<level>";
|
|
6
|
+
} | {
|
|
3
7
|
name: string;
|
|
4
8
|
description: string;
|
|
5
9
|
argumentHint?: never;
|
|
@@ -8,8 +12,12 @@ export declare const PINNED_PI_BUILTIN_SLASH_COMMANDS: ({
|
|
|
8
12
|
description: string;
|
|
9
13
|
argumentHint: string;
|
|
10
14
|
})[];
|
|
11
|
-
/** Bare A1's built-in catalog:
|
|
15
|
+
/** Bare A1's built-in catalog: `models` replaces the pinned pair and is followed by `thinking`. */
|
|
12
16
|
export declare const OWNED_BUILTIN_SLASH_COMMANDS: ({
|
|
17
|
+
readonly name: "thinking";
|
|
18
|
+
readonly description: "Set thinking level";
|
|
19
|
+
readonly argumentHint: "<level>";
|
|
20
|
+
} | {
|
|
13
21
|
name: string;
|
|
14
22
|
description: string;
|
|
15
23
|
argumentHint?: never;
|
|
@@ -7,13 +7,14 @@ import { OwnedEditorUxInterception, createPromptSelectionInterceptor, editorVisu
|
|
|
7
7
|
import { PINNED_PI_LAYOUT, piTheme, } from "./theme.js";
|
|
8
8
|
import { createTuiFacade, ensureTheme, isAutocompleteProvider, } from "./shell-shared-facade.js";
|
|
9
9
|
import { SKILLS_COMMAND_NAME, collapseSkillCommands, createSkillsTunnelProvider, } from "./skills-command.js";
|
|
10
|
-
/** A selected
|
|
11
|
-
const
|
|
10
|
+
/** A selected autocomplete row: the accent primary column, then the aligned description. */
|
|
11
|
+
const SELECTED_DESCRIBED_ROW = /^(→ .*?\S)(\s{2,}.*)$/u;
|
|
12
|
+
const THINKING_SLASH_COMMAND = { name: "thinking", description: "Set thinking level", argumentHint: "<level>" };
|
|
12
13
|
export const PINNED_PI_BUILTIN_SLASH_COMMANDS = [
|
|
13
14
|
{ name: "settings", description: "Open settings menu" },
|
|
14
15
|
{ name: "model", description: "Select model (opens selector UI)", argumentHint: "<provider/model>" },
|
|
15
16
|
{ name: "tree", description: "Navigate session tree (switch branches)" },
|
|
16
|
-
|
|
17
|
+
THINKING_SLASH_COMMAND,
|
|
17
18
|
{ name: "scoped-models", description: "Enable/disable models for Ctrl+P cycling" },
|
|
18
19
|
{ name: "export", description: "Export session (HTML default, or specify path: .html/.jsonl)" },
|
|
19
20
|
{ name: "import", description: "Import and resume a session from a JSONL file" },
|
|
@@ -34,10 +35,10 @@ export const PINNED_PI_BUILTIN_SLASH_COMMANDS = [
|
|
|
34
35
|
{ name: "reload", description: "Reload keybindings, extensions, skills, prompts, themes, and context files" },
|
|
35
36
|
{ name: "quit", description: "Quit" },
|
|
36
37
|
];
|
|
37
|
-
/** Bare A1's built-in catalog:
|
|
38
|
+
/** Bare A1's built-in catalog: `models` replaces the pinned pair and is followed by `thinking`. */
|
|
38
39
|
export const OWNED_BUILTIN_SLASH_COMMANDS = PINNED_PI_BUILTIN_SLASH_COMMANDS.flatMap(command => command.name === "model"
|
|
39
|
-
? [{ name: "models", description: "Switch models and manage scoped model cycling" }]
|
|
40
|
-
: command.name === "scoped-models" ? [] : [command]);
|
|
40
|
+
? [{ name: "models", description: "Switch models and manage scoped model cycling" }, THINKING_SLASH_COMMAND]
|
|
41
|
+
: command.name === "thinking" || command.name === "scoped-models" ? [] : [command]);
|
|
41
42
|
export function createPiShellEditor(options) {
|
|
42
43
|
ensureTheme();
|
|
43
44
|
const tui = createTuiFacade(options);
|
|
@@ -64,9 +65,9 @@ export function createPiShellEditor(options) {
|
|
|
64
65
|
return selectListTheme.scrollInfo(text);
|
|
65
66
|
},
|
|
66
67
|
selectedText: text => {
|
|
67
|
-
// Rationale:
|
|
68
|
-
//
|
|
69
|
-
const row =
|
|
68
|
+
// Rationale: the pinned list styles a whole selected row at once. Bare A1 keeps the
|
|
69
|
+
// actionable primary column accented while every aligned description remains muted.
|
|
70
|
+
const row = SELECTED_DESCRIBED_ROW.exec(text);
|
|
70
71
|
return row === null ? selectListTheme.selectedText(text) : selectListTheme.selectedText(row[1]) + selectListTheme.description(row[2]);
|
|
71
72
|
},
|
|
72
73
|
},
|
|
@@ -3,5 +3,5 @@ import { type PiShellViewComponentPort, type PiShellStatusPort, type PiShellQueu
|
|
|
3
3
|
export declare function createPiShellHeader(options?: PiShellHeaderOptions): PiShellHeaderPort;
|
|
4
4
|
export declare function createPiShellLoadedResources(resources: readonly PiShellResourceEntry[], initialExpanded?: boolean): PiShellLoadedResourcesPort;
|
|
5
5
|
export declare function createPiShellStatus(view: OwnedUiSessionViewModel, formatProgressStatus: (message: string) => string, runtime?: Pick<PiShellEditorOptions, "getColumns" | "getRows" | "requestRender">): PiShellStatusPort;
|
|
6
|
-
export declare function createPiShellFooter(view: OwnedUiSessionViewModel, cwd: string, profile?: "pi" | "a1"): PiShellViewComponentPort;
|
|
6
|
+
export declare function createPiShellFooter(view: OwnedUiSessionViewModel, cwd: string, profile?: "pi" | "a1", showLevel?: () => boolean): PiShellViewComponentPort;
|
|
7
7
|
export declare function createPiQueuedInputStatus(submissions: readonly string[], presentation?: "pinned" | "custom-viewport"): PiShellQueuedInputPort;
|
|
@@ -128,9 +128,9 @@ export function createPiShellStatus(view, formatProgressStatus, runtime) {
|
|
|
128
128
|
},
|
|
129
129
|
};
|
|
130
130
|
}
|
|
131
|
-
export function createPiShellFooter(view, cwd, profile = "pi") {
|
|
131
|
+
export function createPiShellFooter(view, cwd, profile = "pi", showLevel = () => true) {
|
|
132
132
|
ensureTheme();
|
|
133
|
-
const footer = new SessionFooter(() => view, cwd, profile);
|
|
133
|
+
const footer = new SessionFooter(() => view, cwd, profile, showLevel);
|
|
134
134
|
return {
|
|
135
135
|
render: width => footer.render(width),
|
|
136
136
|
invalidate: () => footer.invalidate(),
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type PiShellHotkeysPresentation } from "./shell-presenters-info.js";
|
|
2
|
+
export interface PiShellHotkeySection {
|
|
3
|
+
readonly title: string;
|
|
4
|
+
readonly rows: readonly string[];
|
|
5
|
+
}
|
|
6
|
+
/** Turns heading-led hotkeys Markdown into reusable grouped-document data before row rendering. */
|
|
7
|
+
export declare function renderPiShellHotkeySections(presentation: PiShellHotkeysPresentation, width: number): readonly PiShellHotkeySection[];
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { getMarkdownTheme } from "../startup-public.js";
|
|
2
|
+
import { Markdown } from "@earendil-works/pi-tui";
|
|
3
|
+
import { ensureTheme } from "./shell-shared-facade.js";
|
|
4
|
+
import { hotkeysMarkdown } from "./shell-presenters-info.js";
|
|
5
|
+
/** Turns heading-led hotkeys Markdown into reusable grouped-document data before row rendering. */
|
|
6
|
+
export function renderPiShellHotkeySections(presentation, width) {
|
|
7
|
+
ensureTheme();
|
|
8
|
+
const shortcuts = presentation.getShortcuts ?? (() => []);
|
|
9
|
+
const markdown = hotkeysMarkdown(presentation.bindings, shortcuts, presentation.profile ?? "pi");
|
|
10
|
+
const sections = [];
|
|
11
|
+
for (const line of markdown.split("\n")) {
|
|
12
|
+
const heading = /^\*\*(.+)\*\*$/.exec(line)?.[1];
|
|
13
|
+
if (heading !== undefined)
|
|
14
|
+
sections.push({ title: heading, lines: [] });
|
|
15
|
+
else
|
|
16
|
+
sections.at(-1)?.lines.push(line);
|
|
17
|
+
}
|
|
18
|
+
for (const section of sections)
|
|
19
|
+
while (section.lines.at(-1) === "")
|
|
20
|
+
section.lines.pop();
|
|
21
|
+
return sections.map(section => {
|
|
22
|
+
const rows = [...new Markdown(section.lines.join("\n"), 1, 1, getMarkdownTheme()).render(width)];
|
|
23
|
+
while (rows[0]?.trim().length === 0)
|
|
24
|
+
rows.shift();
|
|
25
|
+
while (rows.at(-1)?.trim().length === 0)
|
|
26
|
+
rows.pop();
|
|
27
|
+
return { title: section.title, rows };
|
|
28
|
+
});
|
|
29
|
+
}
|
|
@@ -70,3 +70,4 @@ export interface PiShellHotkeysPresentation {
|
|
|
70
70
|
export declare function createPiShellHotkeys(bindings?: KeybindingsConfig, getShortcuts?: NonNullable<PiShellExtensionRendererResolver["getShortcuts"]>, profile?: "pi" | "a1"): PiShellComponentPort;
|
|
71
71
|
/** The keyboard-shortcut document rows the feed presenter shows, without its spacer, borders, and heading. */
|
|
72
72
|
export declare function renderPiShellHotkeysLines(presentation: PiShellHotkeysPresentation, width: number): readonly string[];
|
|
73
|
+
export declare function hotkeysMarkdown(bindings: KeybindingsConfig | undefined, getShortcuts: NonNullable<PiShellExtensionRendererResolver["getShortcuts"]>, profile: "pi" | "a1"): string;
|
|
@@ -166,7 +166,7 @@ export function renderPiShellHotkeysLines(presentation, width) {
|
|
|
166
166
|
function hotkeysMarkdownComponent(markdown) {
|
|
167
167
|
return new Markdown(markdown, 1, 1, getMarkdownTheme());
|
|
168
168
|
}
|
|
169
|
-
function hotkeysMarkdown(bindings, getShortcuts, profile) {
|
|
169
|
+
export function hotkeysMarkdown(bindings, getShortcuts, profile) {
|
|
170
170
|
const keys = profile === "a1" ? KeybindingsManager.fromOwnedBindings(bindings) : new KeybindingsManager(bindings);
|
|
171
171
|
// Compatibility: the owned viewport consumes these physical chords before editor actions.
|
|
172
172
|
const display = (action) => keys.getKeys(action)
|
|
@@ -126,7 +126,6 @@ export interface PiShellAuthProviderOption extends PiShellSelectorOption {
|
|
|
126
126
|
}
|
|
127
127
|
export declare function createPiShellAuthProviderSelector(mode: "login" | "logout", providers: readonly PiShellAuthProviderOption[], onSelect: (id: string) => void, onCancel: () => void, initialSearchInput?: string): PiShellComponentPort;
|
|
128
128
|
export declare function createPiShellExtensionSelector(title: string, options: readonly string[], onSelect: (value: string) => void, onCancel: () => void): PiShellComponentPort;
|
|
129
|
-
export declare function createPiShellThinkingSelector(currentLevel: "off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max", availableLevels: readonly ("off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max")[], onSelect: (level: string) => void, onCancel: () => void, onSelectAsDefault?: (level: string) => void, defaultLevel?: "off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max"): PiShellComponentPort;
|
|
130
129
|
export declare function createPiShellThemeSelector(currentTheme: string, onSelect: (theme: string) => void, onCancel: () => void, onPreview: (theme: string) => void): PiShellComponentPort;
|
|
131
130
|
export declare function createPiShellShowImagesSelector(currentValue: boolean, onSelect: (show: boolean) => void, onCancel: () => void): PiShellComponentPort;
|
|
132
131
|
export declare function createPiShellDialog(dialog: OwnedUiDialog, handlers?: {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ArminComponent, BorderedLoader, DynamicBorder, ExtensionSelectorComponent, getSelectListTheme, LoginDialogComponent, ModelSelectorComponent, OAuthSelectorComponent, SettingsSelectorComponent, ShowImagesSelectorComponent, ThemeSelectorComponent,
|
|
1
|
+
import { ArminComponent, BorderedLoader, DynamicBorder, ExtensionSelectorComponent, getSelectListTheme, LoginDialogComponent, ModelSelectorComponent, OAuthSelectorComponent, SettingsSelectorComponent, ShowImagesSelectorComponent, ThemeSelectorComponent, UserMessageSelectorComponent, } from "../startup-public.js";
|
|
2
2
|
import { DaxnutsComponent, } from "./upstream/components/daxnuts.js";
|
|
3
3
|
import { EarendilAnnouncementComponent, } from "./upstream/components/earendil-announcement.js";
|
|
4
4
|
import { Box, Container, SelectList, Spacer, Text, } from "@earendil-works/pi-tui";
|
|
@@ -200,12 +200,6 @@ export function createPiShellExtensionSelector(title, options, onSelect, onCance
|
|
|
200
200
|
ensureTheme();
|
|
201
201
|
return componentPort(new ExtensionSelectorComponent(title, [...options], onSelect, onCancel));
|
|
202
202
|
}
|
|
203
|
-
export function createPiShellThinkingSelector(currentLevel, availableLevels, onSelect, onCancel, onSelectAsDefault, defaultLevel) {
|
|
204
|
-
ensureTheme();
|
|
205
|
-
const selector = new ThinkingSelectorComponent(currentLevel, [...availableLevels], onSelect, onCancel, onSelectAsDefault, defaultLevel);
|
|
206
|
-
const list = selector.getSelectList();
|
|
207
|
-
return componentPort(selector, data => list.handleInput(data));
|
|
208
|
-
}
|
|
209
203
|
export function createPiShellThemeSelector(currentTheme, onSelect, onCancel, onPreview) {
|
|
210
204
|
ensureTheme();
|
|
211
205
|
const selector = new ThemeSelectorComponent(currentTheme, onSelect, onCancel, onPreview);
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type ThinkingSelectorLevel } from "./upstream/components/thinking-selector.js";
|
|
2
|
+
import { type PiShellComponentPort } from "./shell-shared-facade.js";
|
|
3
|
+
export interface PiShellThinkingSelectorPresentation {
|
|
4
|
+
readonly profile: "bare";
|
|
5
|
+
readonly cycleBinding: string | readonly string[];
|
|
6
|
+
}
|
|
7
|
+
/** Lazily loaded because thinking-selector code does not belong to the startup graph before `/thinking` opens. */
|
|
8
|
+
export declare function createPiShellThinkingSelector(currentLevel: ThinkingSelectorLevel, availableLevels: readonly ThinkingSelectorLevel[], onSelect: (level: string) => void, onCancel: () => void, onSelectAsDefault?: (level: string) => void, defaultLevel?: ThinkingSelectorLevel, presentation?: PiShellThinkingSelectorPresentation): PiShellComponentPort;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ThinkingSelectorComponent } from "../startup-public.js";
|
|
2
|
+
import { OwnedThinkingSelectorComponent } from "./upstream/components/thinking-selector.js";
|
|
3
|
+
import { componentPort, ensureTheme } from "./shell-shared-facade.js";
|
|
4
|
+
function displayKeybinding(binding) {
|
|
5
|
+
const keys = typeof binding === "string" ? [binding] : binding;
|
|
6
|
+
return keys.map(key => key.split("+").map(part => {
|
|
7
|
+
const display = process.platform === "darwin" && part.toLowerCase() === "alt" ? "option" : part;
|
|
8
|
+
return display.charAt(0).toUpperCase() + display.slice(1);
|
|
9
|
+
}).join("+")).join("/");
|
|
10
|
+
}
|
|
11
|
+
/** Lazily loaded because thinking-selector code does not belong to the startup graph before `/thinking` opens. */
|
|
12
|
+
export function createPiShellThinkingSelector(currentLevel, availableLevels, onSelect, onCancel, onSelectAsDefault, defaultLevel, presentation) {
|
|
13
|
+
ensureTheme();
|
|
14
|
+
if (presentation?.profile === "bare") {
|
|
15
|
+
const cycleKey = displayKeybinding(presentation.cycleBinding);
|
|
16
|
+
const selector = new OwnedThinkingSelectorComponent(currentLevel, [...availableLevels], onSelect, onCancel, cycleKey || "Unbound", onSelectAsDefault, defaultLevel);
|
|
17
|
+
return componentPort(selector, data => selector.handleInput(data));
|
|
18
|
+
}
|
|
19
|
+
const selector = new ThinkingSelectorComponent(currentLevel, [...availableLevels], onSelect, onCancel, onSelectAsDefault, defaultLevel);
|
|
20
|
+
const list = selector.getSelectList();
|
|
21
|
+
return componentPort(selector, data => list.handleInput(data));
|
|
22
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Provenance: @earendil-works/pi-coding-agent 0.
|
|
2
|
+
* Provenance: @earendil-works/pi-coding-agent 0.87.0 (MIT), commit 16787ad5b2dc748047f314ca1bfe7708f30f54f3,
|
|
3
3
|
* packages/coding-agent/src/core/keybindings.ts.
|
|
4
4
|
* Modifications: Mechanical source port with Node import prefixes, public package-root agent-directory
|
|
5
5
|
* resolution, and an opt-in bare-A1 input profile including Ctrl+L level cycling and unbound model
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Provenance: @earendil-works/pi-coding-agent 0.
|
|
2
|
+
* Provenance: @earendil-works/pi-coding-agent 0.87.0 (MIT), commit 16787ad5b2dc748047f314ca1bfe7708f30f54f3,
|
|
3
3
|
* packages/coding-agent/src/core/keybindings.ts.
|
|
4
4
|
* Modifications: Mechanical source port with Node import prefixes, public package-root agent-directory
|
|
5
5
|
* resolution, and an opt-in bare-A1 input profile including Ctrl+L level cycling and unbound model
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"sourcePackage": "@earendil-works/pi-coding-agent",
|
|
3
|
-
"sourceVersion": "0.
|
|
3
|
+
"sourceVersion": "0.87.0",
|
|
4
4
|
"upstreamRepository": "https://github.com/earendil-works/pi.git",
|
|
5
|
-
"upstreamCommit": "
|
|
5
|
+
"upstreamCommit": "16787ad5b2dc748047f314ca1bfe7708f30f54f3",
|
|
6
6
|
"sourcePath": "dist/modes/interactive/assets/clankolas.png",
|
|
7
7
|
"sourceSha256": "169acd0dfe6fbb8d8742ed24a3fc654fd0b2e2d4223c733249c5493723f1b72d",
|
|
8
8
|
"license": "MIT",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Provenance: @earendil-works/pi-coding-agent 0.
|
|
2
|
+
* Provenance: @earendil-works/pi-coding-agent 0.87.0 (MIT), commit 16787ad5b2dc748047f314ca1bfe7708f30f54f3,
|
|
3
3
|
* packages/coding-agent/src/modes/interactive/components/countdown-timer.ts.
|
|
4
4
|
* Modifications: Mechanical source port with ECMAScript private fields; imports remain on the public
|
|
5
5
|
* Pi TUI package root.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Provenance: @earendil-works/pi-coding-agent 0.
|
|
2
|
+
* Provenance: @earendil-works/pi-coding-agent 0.87.0 (MIT), commit 16787ad5b2dc748047f314ca1bfe7708f30f54f3,
|
|
3
3
|
* packages/coding-agent/src/modes/interactive/components/daxnuts.ts.
|
|
4
4
|
* Modifications: Mechanical pinned source port with private imports remapped to public package-root
|
|
5
5
|
* types/APIs and A1-owned theme boundaries; behavior remains acceptance-tested.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Provenance: @earendil-works/pi-coding-agent 0.
|
|
2
|
+
* Provenance: @earendil-works/pi-coding-agent 0.87.0 (MIT), commit 16787ad5b2dc748047f314ca1bfe7708f30f54f3,
|
|
3
3
|
* packages/coding-agent/src/modes/interactive/components/daxnuts.ts.
|
|
4
4
|
* Modifications: Mechanical pinned source port with private imports remapped to public package-root
|
|
5
5
|
* types/APIs and A1-owned theme boundaries; behavior remains acceptance-tested.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Provenance: @earendil-works/pi-coding-agent 0.
|
|
2
|
+
* Provenance: @earendil-works/pi-coding-agent 0.87.0 (MIT), commit 16787ad5b2dc748047f314ca1bfe7708f30f54f3,
|
|
3
3
|
* packages/coding-agent/src/modes/interactive/components/earendil-announcement.ts.
|
|
4
4
|
* Modifications: Mechanical pinned source port with private imports remapped to public package-root
|
|
5
5
|
* types/APIs and A1-owned theme boundaries. The unchanged image is loaded lazily from its attributed,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Provenance: @earendil-works/pi-coding-agent 0.
|
|
2
|
+
* Provenance: @earendil-works/pi-coding-agent 0.87.0 (MIT), commit 16787ad5b2dc748047f314ca1bfe7708f30f54f3,
|
|
3
3
|
* packages/coding-agent/src/modes/interactive/components/extension-editor.ts.
|
|
4
4
|
* Modifications: Mechanical port: remap pi-tui to the root public singleton, use owned
|
|
5
5
|
* keybindings/theme and external-editor seams, preserve editor layout, hints, focus, submission,
|
|
@@ -15,6 +15,7 @@ export declare class ExtensionEditorComponent extends Container {
|
|
|
15
15
|
constructor(tui: TUI, keybindings: KeybindingsManager, title: string, prefill: string | undefined, onSubmit: (value: string) => void, onCancel: () => void, options?: {
|
|
16
16
|
readonly paddingX?: number;
|
|
17
17
|
readonly autocompleteMaxVisible?: number;
|
|
18
|
+
readonly description?: string;
|
|
18
19
|
}, externalEditorCommand?: string);
|
|
19
20
|
handleInput(data: string): void;
|
|
20
21
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Provenance: @earendil-works/pi-coding-agent 0.
|
|
2
|
+
* Provenance: @earendil-works/pi-coding-agent 0.87.0 (MIT), commit 16787ad5b2dc748047f314ca1bfe7708f30f54f3,
|
|
3
3
|
* packages/coding-agent/src/modes/interactive/components/extension-editor.ts.
|
|
4
4
|
* Modifications: Mechanical port: remap pi-tui to the root public singleton, use owned
|
|
5
5
|
* keybindings/theme and external-editor seams, preserve editor layout, hints, focus, submission,
|
|
@@ -36,14 +36,19 @@ export class ExtensionEditorComponent extends Container {
|
|
|
36
36
|
|| process.env.VISUAL
|
|
37
37
|
|| process.env.EDITOR
|
|
38
38
|
|| (process.platform === "win32" ? "notepad" : "nano");
|
|
39
|
+
const { description, ...editorOptions } = options ?? {};
|
|
39
40
|
this.addChild(new DynamicBorder());
|
|
40
41
|
this.addChild(new Spacer(1));
|
|
41
42
|
this.addChild(new Text(piTheme().fg("accent", title), 1, 0));
|
|
43
|
+
if (description) {
|
|
44
|
+
this.addChild(new Spacer(1));
|
|
45
|
+
this.addChild(new Text(piTheme().fg("text", description), 1, 0));
|
|
46
|
+
}
|
|
42
47
|
this.addChild(new Spacer(1));
|
|
43
48
|
this.#editor = new Editor(tui, {
|
|
44
49
|
borderColor: text => piTheme().fg("borderMuted", text),
|
|
45
50
|
selectList: getSelectListTheme(),
|
|
46
|
-
},
|
|
51
|
+
}, editorOptions);
|
|
47
52
|
if (prefill)
|
|
48
53
|
this.#editor.setText(prefill);
|
|
49
54
|
this.#editor.onSubmit = onSubmit;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Provenance: @earendil-works/pi-coding-agent 0.
|
|
2
|
+
* Provenance: @earendil-works/pi-coding-agent 0.87.0 (MIT), commit 16787ad5b2dc748047f314ca1bfe7708f30f54f3,
|
|
3
3
|
* packages/coding-agent/src/modes/interactive/components/mermaid.ts.
|
|
4
4
|
* Modifications: Mechanical pinned source port with private imports remapped to public package-root
|
|
5
5
|
* types/APIs and A1-owned theme boundaries; behavior remains acceptance-tested.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Provenance: @earendil-works/pi-coding-agent 0.
|
|
2
|
+
* Provenance: @earendil-works/pi-coding-agent 0.87.0 (MIT), commit 16787ad5b2dc748047f314ca1bfe7708f30f54f3,
|
|
3
3
|
* packages/coding-agent/src/modes/interactive/components/custom-editor.ts.
|
|
4
4
|
* Modifications: A1-owned class name and synchronized A1 keybinding contract replace the nominal
|
|
5
5
|
* private upstream keybinding constructor dependency; bare A1 injects the shared Settings/agent input
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Provenance: @earendil-works/pi-coding-agent 0.
|
|
2
|
+
* Provenance: @earendil-works/pi-coding-agent 0.87.0 (MIT), commit 16787ad5b2dc748047f314ca1bfe7708f30f54f3,
|
|
3
3
|
* packages/coding-agent/src/modes/interactive/components/custom-editor.ts.
|
|
4
4
|
* Modifications: A1-owned class name and synchronized A1 keybinding contract replace the nominal
|
|
5
5
|
* private upstream keybinding constructor dependency; bare A1 injects the shared Settings/agent input
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Provenance: @earendil-works/pi-coding-agent 0.
|
|
2
|
+
* Provenance: @earendil-works/pi-coding-agent 0.87.0 (MIT), commit 16787ad5b2dc748047f314ca1bfe7708f30f54f3,
|
|
3
3
|
* packages/coding-agent/src/modes/interactive/components/scoped-models-selector.ts.
|
|
4
4
|
* Modifications: Source-synchronized scoped-model selector port: preserve session-only toggles,
|
|
5
5
|
* search, bulk/provider/reorder actions, dirty state, Ctrl+S persistence, refresh status,
|
|
@@ -4,7 +4,8 @@ export declare class SessionFooter implements Component {
|
|
|
4
4
|
private readonly getView;
|
|
5
5
|
private readonly cwd;
|
|
6
6
|
private readonly profile;
|
|
7
|
-
|
|
7
|
+
private readonly show;
|
|
8
|
+
constructor(getView: () => OwnedUiSessionViewModel, cwd: string, profile?: "pi" | "a1", show?: () => boolean);
|
|
8
9
|
invalidate(): void;
|
|
9
10
|
dispose(): void;
|
|
10
11
|
render(width: number): string[];
|
|
@@ -1,19 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Provenance: @earendil-works/pi-coding-agent 0.
|
|
2
|
+
* Provenance: @earendil-works/pi-coding-agent 0.87.0 (MIT), commit 16787ad5b2dc748047f314ca1bfe7708f30f54f3,
|
|
3
3
|
* packages/coding-agent/src/modes/interactive/components/footer.ts.
|
|
4
4
|
* Modifications: Consumes neutral owned-UI view data instead of a fabricated concrete AgentSession; an
|
|
5
|
-
* explicit bare-A1 profile colors the thinking-level name
|
|
6
|
-
* and formatting
|
|
7
|
-
*
|
|
5
|
+
* explicit bare-A1 profile colors the thinking-level name and adds its linked pull-request badge while
|
|
6
|
+
* preserving the remaining footer layout and formatting, and replacement surfaces may suppress a
|
|
7
|
+
* thinking level they already present.
|
|
8
|
+
* Deviations: owned-status-level-color, owned-pull-request-badge.
|
|
8
9
|
*/
|
|
9
10
|
import { isAbsolute, relative, resolve, sep } from "node:path";
|
|
10
|
-
import { truncateToWidth, visibleWidth } from "@earendil-works/pi-tui";
|
|
11
|
+
import { hyperlink, truncateToWidth, visibleWidth } from "@earendil-works/pi-tui";
|
|
11
12
|
import { piTheme } from "../../theme.js";
|
|
12
13
|
export class SessionFooter {
|
|
13
14
|
getView;
|
|
14
15
|
cwd;
|
|
15
16
|
profile;
|
|
16
|
-
|
|
17
|
+
show;
|
|
18
|
+
constructor(getView, cwd, profile = "pi", show = () => true) {
|
|
19
|
+
this.getView = getView;
|
|
20
|
+
this.cwd = cwd;
|
|
21
|
+
this.profile = profile;
|
|
22
|
+
this.show = show;
|
|
23
|
+
}
|
|
17
24
|
invalidate() { }
|
|
18
25
|
dispose() { }
|
|
19
26
|
render(width) {
|
|
@@ -34,8 +41,12 @@ export class SessionFooter {
|
|
|
34
41
|
if (branch)
|
|
35
42
|
pwd = `${pwd} (${branch})`;
|
|
36
43
|
const sessionName = view.status.footer?.sessionName;
|
|
37
|
-
|
|
38
|
-
|
|
44
|
+
const pullRequest = this.profile === "a1" ? view.status.footer?.pullRequest : null;
|
|
45
|
+
const pathRow = pullRequest === undefined || pullRequest === null
|
|
46
|
+
? theme.fg("dim", sessionName ? `${pwd} • ${sessionName}` : pwd)
|
|
47
|
+
: theme.fg("dim", `${pwd} PR `)
|
|
48
|
+
+ hyperlink(theme.fg("mdLink", `#${pullRequest.number}`), pullRequest.url)
|
|
49
|
+
+ (sessionName ? theme.fg("dim", ` • ${sessionName}`) : "");
|
|
39
50
|
const parts = [];
|
|
40
51
|
if (input)
|
|
41
52
|
parts.push(`↑${formatTokens(input)}`);
|
|
@@ -62,9 +73,9 @@ export class SessionFooter {
|
|
|
62
73
|
}
|
|
63
74
|
const modelName = view.activeModel?.modelId ?? "no-model";
|
|
64
75
|
const rightWithoutProvider = this.profile === "a1"
|
|
65
|
-
? view.activeModel === null ? theme.fg("dim", modelName)
|
|
76
|
+
? view.activeModel === null || !this.show() ? theme.fg("dim", modelName)
|
|
66
77
|
: theme.fg("dim", `${modelName} • `) + theme.getThinkingBorderColor(view.thinkingLevel)(view.thinkingLevel)
|
|
67
|
-
: view.activeModel === null || view.thinkingLevel === "off" ? modelName : `${modelName} • ${view.thinkingLevel}`;
|
|
78
|
+
: view.activeModel === null || view.thinkingLevel === "off" || !this.show() ? modelName : `${modelName} • ${view.thinkingLevel}`;
|
|
68
79
|
let right = rightWithoutProvider;
|
|
69
80
|
if ((view.status.footer?.availableProviderCount ?? 1) > 1 && view.activeModel) {
|
|
70
81
|
const provider = `(${view.activeModel.providerId}) `;
|
|
@@ -87,7 +98,7 @@ export class SessionFooter {
|
|
|
87
98
|
line = left;
|
|
88
99
|
}
|
|
89
100
|
const lines = [
|
|
90
|
-
truncateToWidth(
|
|
101
|
+
truncateToWidth(pathRow, width, theme.fg("dim", "...")),
|
|
91
102
|
theme.fg("dim", left) + (this.profile === "a1" ? line.slice(left.length) : theme.fg("dim", line.slice(left.length))),
|
|
92
103
|
];
|
|
93
104
|
const statuses = view.status.footer?.extensionStatuses ?? [];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Provenance: @earendil-works/pi-coding-agent 0.
|
|
2
|
+
* Provenance: @earendil-works/pi-coding-agent 0.87.0 (MIT), commit 16787ad5b2dc748047f314ca1bfe7708f30f54f3,
|
|
3
3
|
* packages/coding-agent/src/modes/interactive/components/session-selector-search.ts.
|
|
4
4
|
* Modifications: Source-synchronized session search port with only the public SessionInfo type import
|
|
5
5
|
* remapped.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Provenance: @earendil-works/pi-coding-agent 0.
|
|
2
|
+
* Provenance: @earendil-works/pi-coding-agent 0.87.0 (MIT), commit 16787ad5b2dc748047f314ca1bfe7708f30f54f3,
|
|
3
3
|
* packages/coding-agent/src/modes/interactive/components/session-selector.ts.
|
|
4
4
|
* Modifications: Source-synchronized session selector port: preserve threaded/current/all scope,
|
|
5
5
|
* search, sort, named/path filters, rename, delete confirmation, active-session protection, loading
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Provenance: @earendil-works/pi-coding-agent 0.
|
|
2
|
+
* Provenance: @earendil-works/pi-coding-agent 0.87.0 (MIT), commit 16787ad5b2dc748047f314ca1bfe7708f30f54f3,
|
|
3
3
|
* packages/coding-agent/src/modes/interactive/components/skill-invocation-message.ts.
|
|
4
4
|
* Modifications: Mechanical port uses A1's public pi-tui instance, owned theme boundary, and
|
|
5
5
|
* root-instance keybinding registry because the public coding-agent component closes over a second
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Provenance: @earendil-works/pi-coding-agent 0.
|
|
2
|
+
* Provenance: @earendil-works/pi-coding-agent 0.87.0 (MIT), commit 16787ad5b2dc748047f314ca1bfe7708f30f54f3,
|
|
3
3
|
* packages/coding-agent/src/modes/interactive/components/skill-invocation-message.ts.
|
|
4
4
|
* Modifications: Mechanical port uses A1's public pi-tui instance, owned theme boundary, and
|
|
5
5
|
* root-instance keybinding registry because the public coding-agent component closes over a second
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Provenance: @earendil-works/pi-coding-agent 0.
|
|
2
|
+
* Provenance: @earendil-works/pi-coding-agent 0.87.0 (MIT), commit 16787ad5b2dc748047f314ca1bfe7708f30f54f3,
|
|
3
3
|
* packages/coding-agent/src/modes/interactive/components/status-indicator.ts.
|
|
4
4
|
* Modifications: Mechanical source port with public package-root keybinding, Loader, and owned
|
|
5
5
|
* theme/countdown imports plus ECMAScript private fields.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Provenance: @earendil-works/pi-coding-agent 0.
|
|
2
|
+
* Provenance: @earendil-works/pi-coding-agent 0.87.0 (MIT), commit 16787ad5b2dc748047f314ca1bfe7708f30f54f3,
|
|
3
3
|
* packages/coding-agent/src/modes/interactive/components/status-indicator.ts.
|
|
4
4
|
* Modifications: Mechanical source port with public package-root keybinding, Loader, and owned
|
|
5
5
|
* theme/countdown imports plus ECMAScript private fields.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provenance: @earendil-works/pi-coding-agent 0.87.0 (MIT), commit 16787ad5b2dc748047f314ca1bfe7708f30f54f3,
|
|
3
|
+
* packages/coding-agent/src/modes/interactive/components/thinking-selector.ts.
|
|
4
|
+
* Modifications: Preserve the searchable thinking-level selector, current/default semantics,
|
|
5
|
+
* selection, save, cancellation, and focus while accepting the active bare-A1 cycle-key label from the
|
|
6
|
+
* shell, styling the title with the established bold semantic accent treatment, placing its muted hint
|
|
7
|
+
* directly below it, deduplicating levels, and rendering aligned muted descriptions after an adjacent
|
|
8
|
+
* success-colored active marker. All list and border colors use the owned theme and its explicit color
|
|
9
|
+
* mode. The comparison profile retains the public pinned component.
|
|
10
|
+
* Deviations: owned-level-cycle-shortcut, owned-thinking-selector-heading.
|
|
11
|
+
*/
|
|
12
|
+
import { Container, type Focusable, SelectList } from "@earendil-works/pi-tui";
|
|
13
|
+
export type ThinkingSelectorLevel = "off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max";
|
|
14
|
+
/** Bare-A1 thinking-level selector with profile-resolved shortcut presentation. */
|
|
15
|
+
export declare class OwnedThinkingSelectorComponent extends Container implements Focusable {
|
|
16
|
+
private searchInput;
|
|
17
|
+
private selectList;
|
|
18
|
+
private selectListChildIndex;
|
|
19
|
+
private allItems;
|
|
20
|
+
private onSelect;
|
|
21
|
+
private onCancel;
|
|
22
|
+
private onSelectAsDefault;
|
|
23
|
+
private currentLevel;
|
|
24
|
+
private _focused;
|
|
25
|
+
get focused(): boolean;
|
|
26
|
+
set focused(value: boolean);
|
|
27
|
+
constructor(currentLevel: ThinkingSelectorLevel, availableLevels: ThinkingSelectorLevel[], onSelect: (level: ThinkingSelectorLevel) => void, onCancel: () => void, cycleKeyDisplay: string, onSelectAsDefault?: (level: ThinkingSelectorLevel) => void, defaultThinkingLevel?: ThinkingSelectorLevel);
|
|
28
|
+
private keyDisplayText;
|
|
29
|
+
private buildSelectList;
|
|
30
|
+
private applyFilter;
|
|
31
|
+
handleInput(keyData: string): void;
|
|
32
|
+
getSelectList(): SelectList;
|
|
33
|
+
}
|