@linxiraos/pi-tui 1.1.27 → 1.2.0
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/CHANGELOG.md +47 -463
- package/README.md +7 -5
- package/dist/types/app-keybindings.d.ts +1 -1
- package/dist/types/apps/cleanse-board.d.ts +1 -1
- package/dist/types/apps/debug/log-viewer.d.ts +4 -0
- package/dist/types/apps/debug/raw-sse-buffer.d.ts +2 -0
- package/dist/types/apps/git/git-tui.d.ts +2 -2
- package/dist/types/apps/git/help.d.ts +3 -1
- package/dist/types/apps/if-bench-board.d.ts +2 -2
- package/dist/types/apps/setup-model-picker.d.ts +1 -1
- package/dist/types/autocomplete.d.ts +5 -2
- package/dist/types/charts/chart-plan.d.ts +674 -0
- package/dist/types/charts/chart-svg.d.ts +59 -0
- package/dist/types/charts/table-data.d.ts +175 -0
- package/dist/types/chat/assistant-message.d.ts +5 -0
- package/dist/types/chat/chat-transcript-builder.d.ts +2 -0
- package/dist/types/chat/compaction-summary-message.d.ts +1 -0
- package/dist/types/chat/execution-shared.d.ts +6 -5
- package/dist/types/chat/fence-figure.d.ts +42 -0
- package/dist/types/chat/figure-markdown.d.ts +42 -0
- package/dist/types/chat/messages.d.ts +1 -1
- package/dist/types/chat/svg-figure.d.ts +33 -0
- package/dist/types/chat/svg-source.d.ts +49 -0
- package/dist/types/chat/table-chart.d.ts +89 -0
- package/dist/types/chat/tool-execution.d.ts +2 -0
- package/dist/types/chat/user-message.d.ts +15 -2
- package/dist/types/chrome/shared.d.ts +9 -0
- package/dist/types/chrome/transcript-container.d.ts +6 -0
- package/dist/types/components/box.d.ts +1 -0
- package/dist/types/components/disclosure.d.ts +1 -0
- package/dist/types/components/editor.d.ts +15 -4
- package/dist/types/components/form.d.ts +1 -0
- package/dist/types/components/image.d.ts +12 -44
- package/dist/types/components/key-value-list.d.ts +1 -0
- package/dist/types/components/layout/row.d.ts +1 -0
- package/dist/types/components/layout/stack.d.ts +1 -0
- package/dist/types/components/markdown.d.ts +36 -3
- package/dist/types/components/scroll-view.d.ts +1 -0
- package/dist/types/components/section.d.ts +1 -0
- package/dist/types/components/table.d.ts +1 -0
- package/dist/types/components/text.d.ts +1 -0
- package/dist/types/components/tree-view.d.ts +7 -0
- package/dist/types/components/truncated-text.d.ts +1 -0
- package/dist/types/fuzzy.d.ts +29 -1
- package/dist/types/key-hint-format.d.ts +1 -1
- package/dist/types/keybinding-matchers.d.ts +3 -0
- package/dist/types/keybindings.d.ts +1 -1
- package/dist/types/kitty-graphics.d.ts +2 -2
- package/dist/types/loop-watchdog.d.ts +8 -7
- package/dist/types/multiplexers/cmux.d.ts +16 -0
- package/dist/types/multiplexers/herdr.d.ts +26 -0
- package/dist/types/multiplexers/notify.d.ts +13 -0
- package/dist/types/multiplexers/orca.d.ts +12 -0
- package/dist/types/multiplexers/screen.d.ts +9 -0
- package/dist/types/multiplexers/tmux.d.ts +29 -0
- package/dist/types/multiplexers/types.d.ts +100 -0
- package/dist/types/multiplexers/wmux.d.ts +12 -0
- package/dist/types/multiplexers/zellij.d.ts +12 -0
- package/dist/types/native/backend.d.ts +3 -2
- package/dist/types/native/blobs.d.ts +7 -3
- package/dist/types/native/encode.d.ts +3 -4
- package/dist/types/native/overlay.d.ts +5 -0
- package/dist/types/overlays/agent-hub-projection.d.ts +6 -5
- package/dist/types/overlays/agent-hub-types.d.ts +9 -0
- package/dist/types/overlays/agent-hub.d.ts +2 -0
- package/dist/types/overlays/agent-transcript-viewer.d.ts +11 -2
- package/dist/types/overlays/agents-hub.d.ts +9 -0
- package/dist/types/overlays/annotation-overlay.d.ts +19 -2
- package/dist/types/overlays/annotation-types.d.ts +2 -0
- package/dist/types/overlays/ask-dialog.d.ts +5 -2
- package/dist/types/overlays/history-search.d.ts +10 -0
- package/dist/types/overlays/hook-selector.d.ts +9 -4
- package/dist/types/overlays/jobs-panel.d.ts +1 -7
- package/dist/types/overlays/model-browser.d.ts +54 -7
- package/dist/types/overlays/model-hub.d.ts +23 -0
- package/dist/types/overlays/oauth-selector.d.ts +0 -1
- package/dist/types/overlays/plan-review-overlay.d.ts +3 -2
- package/dist/types/overlays/session-observer-registry.d.ts +2 -0
- package/dist/types/overlays/session-selector.d.ts +6 -2
- package/dist/types/overlays/settings-defs.d.ts +1 -0
- package/dist/types/overlays/usage-dashboard.d.ts +8 -4
- package/dist/types/overlays/usage-display.d.ts +3 -1
- package/dist/types/prompt/composer.d.ts +1 -1
- package/dist/types/prompt/custom-editor.d.ts +11 -8
- package/dist/types/prompt/image-source.d.ts +2 -1
- package/dist/types/prompt/interactive-context-helpers.d.ts +4 -1
- package/dist/types/prompt/model-mention-autocomplete.d.ts +1 -1
- package/dist/types/prompt/welcome.d.ts +6 -1
- package/dist/types/render/composite.d.ts +2 -0
- package/dist/types/render/output-pane.d.ts +1 -0
- package/dist/types/render/render-utils.d.ts +1 -0
- package/dist/types/render/tool-card.d.ts +6 -0
- package/dist/types/render/width-aware-text.d.ts +2 -0
- package/dist/types/setup/scenes/types.d.ts +1 -0
- package/dist/types/status-line/component.d.ts +3 -0
- package/dist/types/status-line/host.d.ts +4 -1
- package/dist/types/status-line/segments.d.ts +2 -0
- package/dist/types/status-line/types.d.ts +14 -3
- package/dist/types/terminal-capabilities.d.ts +27 -35
- package/dist/types/terminal-multiplexer.d.ts +127 -14
- package/dist/types/terminal.d.ts +22 -6
- package/dist/types/theme/active-symbols.d.ts +1 -1
- package/dist/types/theme/schema.d.ts +11 -2
- package/dist/types/theme/symbols.d.ts +1 -1
- package/dist/types/theme/theme-class.d.ts +7 -0
- package/dist/types/theme/theme.d.ts +1 -1
- package/dist/types/theme/tui-adapters.d.ts +3 -0
- package/dist/types/tmux.d.ts +11 -4
- package/dist/types/tools/daemon.d.ts +1 -1
- package/dist/types/tools/eval.d.ts +22 -3
- package/dist/types/tools/glob.d.ts +4 -0
- package/dist/types/tools/native-view.d.ts +47 -0
- package/dist/types/tools/output-meta.d.ts +11 -1
- package/dist/types/tools/renderer.d.ts +37 -2
- package/dist/types/tools/streaming-output.d.ts +20 -1
- package/dist/types/tools/task.d.ts +0 -4
- package/dist/types/tools/write.d.ts +9 -2
- package/dist/types/tools/yield.d.ts +22 -0
- package/dist/types/tui.d.ts +31 -0
- package/dist/types/utils.d.ts +6 -0
- package/dist/types/vim.d.ts +19 -5
- package/package.json +13 -9
- package/src/app-keybindings.d.ts +1 -1
- package/src/app-keybindings.ts +1 -1
- package/src/apps/autoresearch-dashboard.ts +7 -3
- package/src/apps/cleanse-board.ts +2 -2
- package/src/apps/cleanse-picker.ts +1 -1
- package/src/apps/debug/log-viewer.ts +188 -72
- package/src/apps/debug/raw-sse-buffer.ts +8 -0
- package/src/apps/debug/raw-sse.ts +39 -5
- package/src/apps/git/diff-pane.ts +26 -5
- package/src/apps/git/git-tui.ts +2 -2
- package/src/apps/git/help.ts +29 -20
- package/src/apps/if-bench-board.ts +2 -2
- package/src/apps/ps-top.ts +2 -2
- package/src/apps/setup-model-picker.ts +1 -1
- package/src/autocomplete.d.ts +5 -2
- package/src/autocomplete.ts +67 -43
- package/src/charts/chart-plan.d.ts +674 -0
- package/src/charts/chart-plan.ts +5081 -0
- package/src/charts/chart-svg.d.ts +59 -0
- package/src/charts/chart-svg.ts +4657 -0
- package/src/charts/table-data.d.ts +175 -0
- package/src/charts/table-data.ts +1478 -0
- package/src/chat/advisor-message.ts +11 -0
- package/src/chat/assistant-message.d.ts +5 -0
- package/src/chat/assistant-message.ts +219 -50
- package/src/chat/chat-transcript-builder.d.ts +2 -0
- package/src/chat/chat-transcript-builder.ts +5 -3
- package/src/chat/compaction-summary-message.d.ts +1 -0
- package/src/chat/compaction-summary-message.ts +8 -0
- package/src/chat/execution-shared.d.ts +6 -5
- package/src/chat/execution-shared.ts +42 -25
- package/src/chat/fence-figure.d.ts +42 -0
- package/src/chat/fence-figure.ts +80 -0
- package/src/chat/figure-markdown.d.ts +42 -0
- package/src/chat/figure-markdown.ts +174 -0
- package/src/chat/messages.d.ts +1 -1
- package/src/chat/messages.ts +1 -1
- package/src/chat/read-tool-group.ts +6 -4
- package/src/chat/skill-message.ts +6 -0
- package/src/chat/svg-figure.d.ts +33 -0
- package/src/chat/svg-figure.ts +399 -0
- package/src/chat/svg-source.d.ts +49 -0
- package/src/chat/svg-source.ts +188 -0
- package/src/chat/table-chart.d.ts +89 -0
- package/src/chat/table-chart.ts +294 -0
- package/src/chat/tool-execution.d.ts +2 -0
- package/src/chat/tool-execution.ts +80 -6
- package/src/chat/user-message.d.ts +15 -2
- package/src/chat/user-message.ts +55 -3
- package/src/chrome/shared.ts +53 -0
- package/src/chrome/transcript-container.d.ts +6 -0
- package/src/chrome/transcript-container.ts +93 -13
- package/src/components/box.d.ts +1 -0
- package/src/components/box.ts +5 -0
- package/src/components/disclosure.d.ts +1 -0
- package/src/components/disclosure.ts +8 -0
- package/src/components/editor.d.ts +15 -4
- package/src/components/editor.ts +294 -46
- package/src/components/form.d.ts +1 -0
- package/src/components/form.ts +8 -0
- package/src/components/image.d.ts +12 -44
- package/src/components/image.ts +47 -151
- package/src/components/key-value-list.d.ts +1 -0
- package/src/components/key-value-list.ts +4 -0
- package/src/components/layout/row.d.ts +1 -0
- package/src/components/layout/row.ts +7 -0
- package/src/components/layout/stack.d.ts +1 -0
- package/src/components/layout/stack.ts +7 -0
- package/src/components/markdown.d.ts +36 -3
- package/src/components/markdown.ts +433 -318
- package/src/components/scroll-view.d.ts +1 -0
- package/src/components/scroll-view.ts +5 -0
- package/src/components/section.d.ts +1 -0
- package/src/components/section.ts +5 -0
- package/src/components/settings-list.ts +2 -0
- package/src/components/table.d.ts +1 -0
- package/src/components/table.ts +4 -0
- package/src/components/text.d.ts +1 -0
- package/src/components/text.ts +7 -0
- package/src/components/tree-view.d.ts +7 -0
- package/src/components/tree-view.ts +38 -8
- package/src/components/truncated-text.d.ts +1 -0
- package/src/components/truncated-text.ts +5 -0
- package/src/desktop-notify.ts +1 -1
- package/src/fuzzy.d.ts +29 -1
- package/src/fuzzy.ts +115 -30
- package/src/key-hint-format.d.ts +1 -1
- package/src/key-hint-format.ts +1 -1
- package/src/keybinding-matchers.d.ts +3 -0
- package/src/keybinding-matchers.ts +6 -2
- package/src/keybindings.d.ts +1 -1
- package/src/keybindings.ts +1 -1
- package/src/kitty-graphics.d.ts +2 -2
- package/src/kitty-graphics.ts +4 -4
- package/src/loop-watchdog.d.ts +8 -7
- package/src/loop-watchdog.ts +18 -13
- package/src/multiplexers/cmux.d.ts +16 -0
- package/src/multiplexers/cmux.ts +29 -0
- package/src/multiplexers/herdr.d.ts +26 -0
- package/src/multiplexers/herdr.ts +64 -0
- package/src/multiplexers/notify.d.ts +13 -0
- package/src/multiplexers/notify.ts +24 -0
- package/src/multiplexers/orca.d.ts +12 -0
- package/src/multiplexers/orca.ts +16 -0
- package/src/multiplexers/screen.d.ts +9 -0
- package/src/multiplexers/screen.ts +15 -0
- package/src/multiplexers/tmux.d.ts +29 -0
- package/src/multiplexers/tmux.ts +40 -0
- package/src/multiplexers/types.d.ts +100 -0
- package/src/multiplexers/types.ts +110 -0
- package/src/multiplexers/wmux.d.ts +12 -0
- package/src/multiplexers/wmux.ts +16 -0
- package/src/multiplexers/zellij.d.ts +12 -0
- package/src/multiplexers/zellij.ts +24 -0
- package/src/native/backend.d.ts +3 -2
- package/src/native/backend.ts +174 -18
- package/src/native/blobs.d.ts +7 -3
- package/src/native/blobs.ts +47 -12
- package/src/native/encode.d.ts +3 -4
- package/src/native/encode.ts +58 -31
- package/src/native/overlay.d.ts +5 -0
- package/src/native/overlay.ts +13 -0
- package/src/native/reconcile.ts +4 -0
- package/src/overlays/agent-hub-projection.d.ts +6 -5
- package/src/overlays/agent-hub-projection.ts +124 -13
- package/src/overlays/agent-hub-types.d.ts +9 -0
- package/src/overlays/agent-hub-types.ts +6 -0
- package/src/overlays/agent-hub.ts +44 -29
- package/src/overlays/agent-transcript-viewer.ts +91 -23
- package/src/overlays/agents-hub.ts +28 -8
- package/src/overlays/annotation-overlay.ts +293 -90
- package/src/overlays/annotation-types.ts +2 -0
- package/src/overlays/ask-dialog.ts +7 -10
- package/src/overlays/btw-history-panel.ts +12 -1
- package/src/overlays/copy-selector.ts +30 -8
- package/src/overlays/extensions/state-manager.ts +52 -12
- package/src/overlays/history-search.ts +100 -7
- package/src/overlays/hook-selector.ts +12 -5
- package/src/overlays/jobs-panel.ts +28 -46
- package/src/overlays/model-browser.ts +341 -110
- package/src/overlays/model-hub.ts +300 -49
- package/src/overlays/move-overlay.ts +28 -14
- package/src/overlays/oauth-selector.ts +54 -70
- package/src/overlays/plan-review-overlay.ts +194 -70
- package/src/overlays/plugin-settings.ts +3 -3
- package/src/overlays/report-panel.ts +2 -2
- package/src/overlays/rewind-selector.ts +86 -17
- package/src/overlays/session-observer-registry.d.ts +2 -0
- package/src/overlays/session-observer-registry.ts +10 -2
- package/src/overlays/session-selector.ts +64 -26
- package/src/overlays/settings-defs.ts +4 -3
- package/src/overlays/settings-selector.ts +33 -8
- package/src/overlays/snapcompact-shape-preview.ts +2 -3
- package/src/overlays/stats-notice.ts +1 -1
- package/src/overlays/tree-selector.ts +41 -20
- package/src/overlays/usage-dashboard.ts +100 -50
- package/src/overlays/usage-display.ts +10 -4
- package/src/prompt/attachment-chips.ts +15 -11
- package/src/prompt/composer-attachments.ts +6 -4
- package/src/prompt/composer.ts +4 -15
- package/src/prompt/custom-editor.ts +54 -26
- package/src/prompt/image-source.ts +2 -1
- package/src/prompt/interactive-context-helpers.ts +30 -18
- package/src/prompt/macos-spelling.ts +7 -0
- package/src/prompt/magic-keywords.ts +11 -2
- package/src/prompt/model-mention-autocomplete.ts +14 -14
- package/src/prompt/tips.txt +6 -5
- package/src/prompt/welcome.ts +55 -12
- package/src/prompt/word-completion.ts +38 -5
- package/src/render/composite.d.ts +2 -0
- package/src/render/composite.ts +64 -0
- package/src/render/output-pane.d.ts +1 -0
- package/src/render/output-pane.ts +6 -0
- package/src/render/render-utils.d.ts +1 -0
- package/src/render/render-utils.ts +11 -0
- package/src/render/tool-card.d.ts +6 -0
- package/src/render/tool-card.ts +15 -0
- package/src/render/width-aware-text.d.ts +2 -0
- package/src/render/width-aware-text.ts +5 -0
- package/src/setup/scenes/model.ts +2 -1
- package/src/setup/scenes/types.ts +1 -0
- package/src/status-line/component.ts +292 -78
- package/src/status-line/host.ts +4 -1
- package/src/status-line/segments.ts +40 -22
- package/src/status-line/types.ts +15 -3
- package/src/terminal-capabilities.d.ts +27 -35
- package/src/terminal-capabilities.ts +75 -189
- package/src/terminal-multiplexer.d.ts +127 -14
- package/src/terminal-multiplexer.ts +112 -33
- package/src/terminal.d.ts +22 -6
- package/src/terminal.ts +139 -37
- package/src/theme/active-symbols.d.ts +1 -1
- package/src/theme/active-symbols.ts +1 -1
- package/src/theme/schema-validation.ts +1 -0
- package/src/theme/schema.d.ts +11 -2
- package/src/theme/schema.ts +14 -1
- package/src/theme/session-color.ts +1 -7
- package/src/theme/symbols.d.ts +1 -1
- package/src/theme/symbols.ts +6 -1
- package/src/theme/theme-class.d.ts +7 -0
- package/src/theme/theme-class.ts +26 -1
- package/src/theme/theme-schema.json +5 -1
- package/src/theme/theme.d.ts +1 -1
- package/src/theme/theme.ts +8 -4
- package/src/theme/tui-adapters.d.ts +3 -0
- package/src/theme/tui-adapters.ts +68 -0
- package/src/tmux.d.ts +11 -4
- package/src/tmux.ts +47 -11
- package/src/tools/ast-edit.ts +59 -35
- package/src/tools/ast-grep.ts +35 -16
- package/src/tools/bash.ts +92 -42
- package/src/tools/daemon.d.ts +1 -1
- package/src/tools/daemon.ts +1 -1
- package/src/tools/default-renderer.ts +35 -19
- package/src/tools/edit.ts +142 -120
- package/src/tools/eval-format/index.ts +28 -2
- package/src/tools/eval-format/javascript.ts +7 -5
- package/src/tools/eval.d.ts +22 -3
- package/src/tools/eval.ts +364 -208
- package/src/tools/fetch.ts +5 -6
- package/src/tools/glob.d.ts +4 -0
- package/src/tools/glob.ts +33 -65
- package/src/tools/grep.ts +81 -48
- package/src/tools/index.ts +2 -0
- package/src/tools/lsp.ts +81 -59
- package/src/tools/mcp.ts +111 -68
- package/src/tools/native-view.d.ts +47 -0
- package/src/tools/native-view.ts +102 -1
- package/src/tools/output-meta.d.ts +11 -1
- package/src/tools/output-meta.ts +23 -3
- package/src/tools/read.ts +7 -5
- package/src/tools/renderer.d.ts +37 -2
- package/src/tools/renderer.ts +42 -2
- package/src/tools/streaming-output.d.ts +20 -1
- package/src/tools/streaming-output.ts +149 -50
- package/src/tools/task.d.ts +0 -4
- package/src/tools/task.ts +112 -59
- package/src/tools/todo.ts +119 -30
- package/src/tools/wait.ts +34 -24
- package/src/tools/web-search.ts +1 -1
- package/src/tools/write.d.ts +9 -2
- package/src/tools/write.ts +147 -95
- package/src/tools/yield.d.ts +22 -0
- package/src/tools/yield.ts +225 -0
- package/src/tui.d.ts +31 -0
- package/src/tui.ts +309 -160
- package/src/utils.d.ts +6 -0
- package/src/utils.ts +19 -0
- package/src/vim.d.ts +19 -5
- package/src/vim.ts +333 -18
- package/src/windows-input-mode.ts +8 -0
|
@@ -71,7 +71,7 @@ declare class SessionList<T extends SessionSelectorEntry> implements Component {
|
|
|
71
71
|
onExit: () => void;
|
|
72
72
|
onToggleScope?: () => void;
|
|
73
73
|
onDeleteRequest?: (session: T) => void;
|
|
74
|
-
/** Re-render hook for async list updates (fuzzy scan
|
|
74
|
+
/** Re-render hook for async list updates (fuzzy scan completion, history merge). */
|
|
75
75
|
onRequestRender?: () => void;
|
|
76
76
|
constructor(sessions: T[], showCwd?: boolean, historyMatcher?: SessionHistoryMatcher, getTerminalRows?: () => number, pinnedIds?: ReadonlySet<string>, currentSessionPath?: string | (() => string | undefined));
|
|
77
77
|
/** Replace the visible dataset, e.g. when toggling folder/all-projects scope. */
|
|
@@ -129,7 +129,11 @@ export interface SessionSelectorOptions<T extends SessionSelectorEntry = Session
|
|
|
129
129
|
title?: string;
|
|
130
130
|
/** Fixed scope label, or false to omit the scope suffix. */
|
|
131
131
|
scopeLabel?: string | false;
|
|
132
|
-
/**
|
|
132
|
+
/**
|
|
133
|
+
* Show each session's working directory in the list. Defaults to on when
|
|
134
|
+
* the session files live in more than one directory (e.g. the folder scope
|
|
135
|
+
* merging a repository's worktrees).
|
|
136
|
+
*/
|
|
133
137
|
showCwd?: boolean;
|
|
134
138
|
/**
|
|
135
139
|
* Reads the live terminal height so the visible window fits the viewport.
|
|
@@ -43,6 +43,7 @@ export type AnyUiMetadata = UiBase & {
|
|
|
43
43
|
options?: ReadonlyArray<SubmenuOption> | "runtime";
|
|
44
44
|
secret?: boolean;
|
|
45
45
|
ordered?: boolean;
|
|
46
|
+
editor?: "json";
|
|
46
47
|
};
|
|
47
48
|
/** Structural schema entries supplied by the application host. */
|
|
48
49
|
export interface SettingsDisplayEntry {
|
|
@@ -33,10 +33,12 @@ export interface ProviderCard {
|
|
|
33
33
|
/** Number of represented accounts, including unavailable usage lookups. */
|
|
34
34
|
accounts: number;
|
|
35
35
|
unavailableAccounts: string[];
|
|
36
|
-
/** Window rows
|
|
36
|
+
/** Window rows in provider-declared order (e.g. 5h → weekly → monthly); the fullest CARD_MAX_WINDOWS lead. */
|
|
37
37
|
windows: CardWindowRow[];
|
|
38
|
-
/** True when every account reports no limits (e.g. enterprise plans). */
|
|
38
|
+
/** True when every account reports no limits (e.g. enterprise plans, providers without a quota API). */
|
|
39
39
|
unlimited: boolean;
|
|
40
|
+
/** Distinct report notes across accounts (e.g. why a provider exposes no quota windows). */
|
|
41
|
+
notes: string[];
|
|
40
42
|
/** True when nothing is used anywhere (or there are no limits): collapses to a tick. */
|
|
41
43
|
idle: boolean;
|
|
42
44
|
resetCredits?: {
|
|
@@ -52,8 +54,10 @@ export interface ProviderCard {
|
|
|
52
54
|
* Collapse usage reports into one compact card per provider: limits grouped by
|
|
53
55
|
* quota bucket (label + window), each bucket showing the mean used fraction
|
|
54
56
|
* across accounts (matching the classic report's aggregate "% free") with the
|
|
55
|
-
* most-used account's reset countdown.
|
|
56
|
-
*
|
|
57
|
+
* most-used account's reset countdown. Rows keep the provider's declared window
|
|
58
|
+
* order so 5h → week → month reads the same every time; cards sort by their
|
|
59
|
+
* fullest window so what's burning is on top-left; fully idle providers
|
|
60
|
+
* collapse into a tick.
|
|
57
61
|
*/
|
|
58
62
|
export declare function buildProviderCards(reports: UsageReport[], nowMs: number, unavailableAccounts?: readonly UnavailableUsageAccount[]): ProviderCard[];
|
|
59
63
|
/** GitHub-style week-per-column heatmap grid derived from daily activity. */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { UsageLimit, UsageReport, UsageResetCredits } from "@linxiraos/pi-ai";
|
|
1
|
+
import type { UsageLimit, UsageReport, UsageResetCreditDetail, UsageResetCredits } from "@linxiraos/pi-ai";
|
|
2
2
|
/** Include the usage tier in a limit title unless its label already names it. */
|
|
3
3
|
export declare function formatLimitTitle(limit: UsageLimit): string;
|
|
4
4
|
/** Human-readable quota scope for a normalized saved-reset window ID. */
|
|
@@ -10,6 +10,8 @@ export interface UsageResetSummary {
|
|
|
10
10
|
soonestExpiry?: string;
|
|
11
11
|
unavailableReason?: string;
|
|
12
12
|
}
|
|
13
|
+
/** Expiry (epoch ms) of a credit that still banks a reset, whether or not it can be spent now. */
|
|
14
|
+
export declare function bankedResetCreditExpiryMs(credit: UsageResetCreditDetail): number | undefined;
|
|
13
15
|
/**
|
|
14
16
|
* Normalize old count-only and current provider reset metadata for display.
|
|
15
17
|
* `availableCount` is banked inventory; `redeemableCount` is the subset that
|
|
@@ -47,7 +47,7 @@ export interface ComposerStatusCache {
|
|
|
47
47
|
/** Optional dependencies and initial state for a standalone composer. */
|
|
48
48
|
export interface ComposerOptions {
|
|
49
49
|
readonly terminal?: Terminal;
|
|
50
|
-
/** Extra TUI construction options (render scheduler injection for tests and `
|
|
50
|
+
/** Extra TUI construction options (render scheduler injection for tests and `zetacode render`). */
|
|
51
51
|
readonly tuiOptions?: TUIOptions;
|
|
52
52
|
readonly preferences?: Partial<ComposerPreferences>;
|
|
53
53
|
readonly welcome?: ComposerWelcomeUpdate;
|
|
@@ -7,7 +7,7 @@ import type { AppKeybinding } from "../app-keybindings.js";
|
|
|
7
7
|
import type { DescribeContext, NativeNode, NativeUiEvent } from "../native/node.js";
|
|
8
8
|
import type { ComposerFactsSource } from "../status-line/types.js";
|
|
9
9
|
import { type MacOSSpellingFeatures } from "./macos-spelling.js";
|
|
10
|
-
import type { TspEditorDecoration } from "@linxiraos/pi-wire";
|
|
10
|
+
import type { TspEditorDecoration, TspText } from "@linxiraos/pi-wire";
|
|
11
11
|
import { type WordCompletionMethod } from "./word-completion.js";
|
|
12
12
|
/** Live composer state the TSP layout shows; the interactive host wires {@link CustomEditor.composerState}. */
|
|
13
13
|
export interface ComposerNativeState {
|
|
@@ -26,6 +26,8 @@ export interface ComposerNativeState {
|
|
|
26
26
|
readonly running: boolean;
|
|
27
27
|
/** The viewed subagent's lineage, outermost first and the viewed agent last; undefined on the main session. */
|
|
28
28
|
readonly viewing?: readonly string[];
|
|
29
|
+
/** The session's title, quoted in italics as the TSP placeholder; undefined until it has one. */
|
|
30
|
+
readonly title?: string;
|
|
29
31
|
}
|
|
30
32
|
/** Independently switchable prose-assistance features of the composer. */
|
|
31
33
|
export interface SpellingFeatures extends MacOSSpellingFeatures {
|
|
@@ -116,19 +118,19 @@ export declare class CustomEditor extends Editor {
|
|
|
116
118
|
* Numbered by a per-draft monotonic counter so a deleted chip never recycles its number
|
|
117
119
|
* (labels key the atom table). */
|
|
118
120
|
pendingTexts: TextAttachment[];
|
|
119
|
-
/** Host-wired producer of per-image
|
|
120
|
-
* chip tokens for restored drafts (esc-esc, `/tree`, branch). */
|
|
121
|
+
/** Host-wired producer of per-image chip targets (a file on disk, or a session blob copy);
|
|
122
|
+
* drives clickable chip tokens for restored drafts (esc-esc, `/tree`, branch). */
|
|
121
123
|
draftImageLinkMaterializer?: (images: readonly ImageContent[]) => Promise<(string | undefined)[] | undefined>;
|
|
122
124
|
/**
|
|
123
125
|
* The host {@link TUI}, captured when a plugin constructs this editor through
|
|
124
|
-
* the upstream-pi `(tui, theme, keybindings)` convention. Undefined for
|
|
126
|
+
* the upstream-pi `(tui, theme, keybindings)` convention. Undefined for omp's
|
|
125
127
|
* own `new CustomEditor(theme)` callers (they drive repaints through the
|
|
126
128
|
* interactive-mode wiring instead). Plugins that call `this.tui.requestRender()`
|
|
127
129
|
* in their overrides read it here (issue #4766).
|
|
128
130
|
*/
|
|
129
131
|
tui?: TUI;
|
|
130
132
|
/**
|
|
131
|
-
* Accept both the
|
|
133
|
+
* Accept both the omp constructor convention — `new CustomEditor(theme)` —
|
|
132
134
|
* and the upstream-pi `Editor` convention — `new Editor(tui, theme, keybindings)`
|
|
133
135
|
* — that {@link ExtensionUIContext.setEditorComponent}'s factory contract
|
|
134
136
|
* advertises `(tui, theme, keybindings)`. Plugins written against upstream pi
|
|
@@ -191,7 +193,8 @@ export declare class CustomEditor extends Editor {
|
|
|
191
193
|
static readonly SHIMMER_PERIOD_MS = 1800;
|
|
192
194
|
/** Decorate magic keywords, attachments, and the queue-composer header/list markers.
|
|
193
195
|
* Queue shorthand reserves its first logical line as a dim `Queueing` label; sequential
|
|
194
|
-
* item markers use the accent color so separate follow-ups remain visible while composing.
|
|
196
|
+
* item markers use the accent color so separate follow-ups remain visible while composing.
|
|
197
|
+
* Called once per layout segment, so whole-buffer inputs are computed once per text revision. */
|
|
195
198
|
decorateText: (text: string, context: EditorTextDecorationContext) => string;
|
|
196
199
|
/**
|
|
197
200
|
* TSP decorations: magic keywords shimmer (terminal-clocked) in the accent
|
|
@@ -219,8 +222,8 @@ export declare class CustomEditor extends Editor {
|
|
|
219
222
|
setShimmerRepaintHandler(handler: (() => void) | undefined): void;
|
|
220
223
|
/** Editing is available during bootstrap; atomic sends wait until submission is wired and enabled. */
|
|
221
224
|
protected get nativeSendable(): boolean;
|
|
222
|
-
/** Viewing a subagent, the draft goes to it: the placeholder names it. */
|
|
223
|
-
describePlaceholder: () =>
|
|
225
|
+
/** Viewing a subagent, the draft goes to it: the placeholder names it; else the session's title, quoted in italics. */
|
|
226
|
+
describePlaceholder: () => TspText;
|
|
224
227
|
/** A shell-mode draft highlights as its language. */
|
|
225
228
|
describeLanguage: () => string | undefined;
|
|
226
229
|
/** Host-owned live state for the TSP composer (shell mode, effort chip, send/stop). */
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* to the session's `local://` root, and generated video contact-sheet previews.
|
|
5
5
|
* Symbol metadata stays out of serialized/model-bound image data while traveling
|
|
6
6
|
* with the draft object, until AgentSession creates the hidden companion message
|
|
7
|
-
* that tells the model the path
|
|
7
|
+
* that tells the model the path. The model keeps `local://` references across
|
|
8
|
+
* `/move`; chips for internal URLs instead use a stable blob copy.
|
|
8
9
|
*/
|
|
9
10
|
import type { ImageContent } from "@linxiraos/pi-ai";
|
|
10
11
|
/** How an image attachment's backing file entered the session. */
|
|
@@ -17,13 +17,16 @@ export interface AssistantMessageHost {
|
|
|
17
17
|
readonly proseOnlyThinking: boolean;
|
|
18
18
|
readonly expandThinkingBlocks: boolean;
|
|
19
19
|
readonly assistantImagesVisible: boolean;
|
|
20
|
+
/** Whether the viewed session's tables get charts: the main session's do, a focused subagent's do not. */
|
|
21
|
+
readonly tableChartsVisible: boolean;
|
|
20
22
|
readonly hideToolActivity: boolean;
|
|
21
23
|
readonly toolOutputExpanded: boolean;
|
|
22
24
|
readonly ui: {
|
|
23
25
|
requestRender(): void;
|
|
24
26
|
readonly imageBudget: ImageBudget;
|
|
25
27
|
};
|
|
26
|
-
|
|
28
|
+
/** Resolve already-extracted Markdown link destinations to local targets. */
|
|
29
|
+
resolveAssistantMessageLinkHrefs(hrefs: readonly string[]): Promise<ReadonlyMap<string, string>>;
|
|
27
30
|
}
|
|
28
31
|
/**
|
|
29
32
|
* Resolve and cache the current session's model-authored prose links. Existing
|
|
@@ -19,7 +19,7 @@ export declare function applyModelMentionCompletion(lines: string[], cursorLine:
|
|
|
19
19
|
};
|
|
20
20
|
/**
|
|
21
21
|
* Create a session-scoped model candidate lookup using picker ordering. The
|
|
22
|
-
* scope and
|
|
22
|
+
* scope and its prepared ranker are reused across queries until their inputs change.
|
|
23
23
|
*/
|
|
24
24
|
export declare function createModelMentionSource(host: {
|
|
25
25
|
source: ModelBrowserSource;
|
|
@@ -14,7 +14,12 @@ export declare const WELCOME_LSP_SLOTS = 4;
|
|
|
14
14
|
* `r` is a uniform sample in [0, 1). Returns "" when `tips` is empty.
|
|
15
15
|
* Exported for tests. */
|
|
16
16
|
export declare function pickWeightedTip(tips: readonly string[], r: number): string;
|
|
17
|
-
|
|
17
|
+
/**
|
|
18
|
+
* The welcome tip as lines of at most `width` columns: `Tip:` and the body
|
|
19
|
+
* wrapped together, with no indent, so the banner can center each line.
|
|
20
|
+
* `[]` when `width` leaves no room for a useful line.
|
|
21
|
+
*/
|
|
22
|
+
export declare function renderWelcomeTip(tip: string, width: number, phase?: number): string[];
|
|
18
23
|
export interface RecentSession {
|
|
19
24
|
name: string;
|
|
20
25
|
timeAgo: string;
|
|
@@ -92,6 +92,7 @@ export declare class OutputPane implements Component {
|
|
|
92
92
|
describe(_cx: DescribeContext): NativeNode;
|
|
93
93
|
render(width: number): readonly string[];
|
|
94
94
|
invalidate(): void;
|
|
95
|
+
releaseRenderCaches(): void;
|
|
95
96
|
}
|
|
96
97
|
/** Default styling for plain tool output while preserving existing ANSI. */
|
|
97
98
|
export declare function styleToolOutputLine(line: string, theme: Theme): string;
|
|
@@ -298,6 +298,7 @@ export interface RenderedStringCache {
|
|
|
298
298
|
export declare function createRenderedStringCache(): RenderedStringCache;
|
|
299
299
|
/** Drop the memo so the next lookup re-renders (e.g. the render function identity changed). */
|
|
300
300
|
export declare function invalidateRenderedStringCache(cache: RenderedStringCache): void;
|
|
301
|
+
export declare function releaseRenderedStringCache(cache: RenderedStringCache): void;
|
|
301
302
|
/** Reuse a rendered string while its theme, expansion, content, and salt match. */
|
|
302
303
|
export declare function cachedRenderedString(cache: RenderedStringCache | undefined, theme: Theme, expanded: boolean, salt: string, content: string, render: () => string): string;
|
|
303
304
|
/**
|
|
@@ -46,6 +46,11 @@ export interface ToolCardOptions {
|
|
|
46
46
|
paddingY?: number;
|
|
47
47
|
ignoreTight?: boolean;
|
|
48
48
|
onInvalidate?: () => void;
|
|
49
|
+
/**
|
|
50
|
+
* Drop builder-owned memos the next build recomputes. Called by
|
|
51
|
+
* {@link ToolCard.releaseRenderCaches}, which never calls `onInvalidate`.
|
|
52
|
+
*/
|
|
53
|
+
onReleaseRenderCaches?: () => void;
|
|
49
54
|
onDispose?: () => void;
|
|
50
55
|
}
|
|
51
56
|
/** Map transcript lifecycle terminology onto the output frame's visual states. */
|
|
@@ -71,6 +76,7 @@ export declare class ToolCard implements Component {
|
|
|
71
76
|
handleInput(data: string): void;
|
|
72
77
|
setIgnoreTight(ignore: boolean): void;
|
|
73
78
|
invalidate(): void;
|
|
79
|
+
releaseRenderCaches(): void;
|
|
74
80
|
dispose(): void;
|
|
75
81
|
}
|
|
76
82
|
/** Construct a lazy framed tool card. */
|
|
@@ -20,6 +20,8 @@ export declare class WidthAwareText implements Component {
|
|
|
20
20
|
setCustomBgFn(customBgFn?: (text: string) => string): void;
|
|
21
21
|
setIgnoreTight(ignore: boolean): this;
|
|
22
22
|
invalidate(): void;
|
|
23
|
+
/** The formatted text stays: the inner `Text` renders from it, so dropping it would free nothing. */
|
|
24
|
+
releaseRenderCaches(): void;
|
|
23
25
|
/**
|
|
24
26
|
* Re-run the formatter on the next render because its inputs changed.
|
|
25
27
|
* Unlike {@link invalidate}, the inner `Text` keeps its wrap cache, so a
|
|
@@ -28,6 +28,7 @@ export interface SetupHost extends SetupUiHost {
|
|
|
28
28
|
readonly disabledProviders: readonly string[];
|
|
29
29
|
readonly authStorage: AuthStorage;
|
|
30
30
|
readonly modelSource: ModelBrowserSource;
|
|
31
|
+
/** Available and catalog models of every kind; role chips resolve over all of them, rows list chat models. */
|
|
31
32
|
getModels(): {
|
|
32
33
|
available: Model[];
|
|
33
34
|
all: Model[];
|
|
@@ -86,6 +86,7 @@ export declare class StatusLineComponent<TSession extends StatusLineSession = St
|
|
|
86
86
|
setPlanModeStatus(status: {
|
|
87
87
|
enabled: boolean;
|
|
88
88
|
paused: boolean;
|
|
89
|
+
workflow?: "parallel" | "iterative" | "ultra";
|
|
89
90
|
} | undefined): void;
|
|
90
91
|
setLoopModeStatus(status: NonNullable<SegmentContext["loopMode"]> | undefined): void;
|
|
91
92
|
setGoalModeStatus(status: {
|
|
@@ -113,6 +114,8 @@ export declare class StatusLineComponent<TSession extends StatusLineSession = St
|
|
|
113
114
|
setRecording(recording: boolean): void;
|
|
114
115
|
/** Set the callback that presents detected Codex reset celebrations, or clear it with `undefined`. */
|
|
115
116
|
setCodexResetFireworksHandler(handler: ((event: CodexResetFireworksEvent) => void) | undefined): void;
|
|
117
|
+
/** Set the callback that presents the first pool-wide saved-reset expiry warning, or clear it with `undefined`. */
|
|
118
|
+
setResetExpiryNoticeHandler(handler: ((notice: string) => void) | undefined): void;
|
|
116
119
|
setHookStatus(key: string, text: string | undefined): void;
|
|
117
120
|
watchBranch(onBranchChange: () => void): void;
|
|
118
121
|
dispose(): void;
|
|
@@ -2,7 +2,7 @@ import type { AgentMessage, ThinkingLevel } from "@linxiraos/pi-agent-core";
|
|
|
2
2
|
import type { Tool, UsageLimit, UsageReport } from "@linxiraos/pi-ai";
|
|
3
3
|
import type { Model } from "@linxiraos/pi-catalog/types";
|
|
4
4
|
import type { CompactionBoundaries } from "./context-usage.js";
|
|
5
|
-
import type { StatusLineSettings } from "./types.js";
|
|
5
|
+
import type { StatusLineSettings, StatusResetExpiry } from "./types.js";
|
|
6
6
|
export interface StatusAccountIdentity {
|
|
7
7
|
accountId?: string;
|
|
8
8
|
email?: string;
|
|
@@ -126,6 +126,9 @@ export interface StatusLineHost<TSession extends StatusLineSession = StatusLineS
|
|
|
126
126
|
}>;
|
|
127
127
|
calculateTokensPerSecond(messages: readonly AgentMessage[], isStreaming: boolean): number | null;
|
|
128
128
|
limitMatchesActiveAccount(report: UsageReport, limit: UsageLimit, identity: StatusAccountIdentity): boolean;
|
|
129
|
+
classifyResetExpiry?(report: UsageReport, nowMs: number): StatusResetExpiry | undefined;
|
|
130
|
+
/** One-line warning for saved resets anywhere in the pool that expire within 24 hours. */
|
|
131
|
+
resetExpiryNotice?(reports: readonly UsageReport[], nowMs: number): string | undefined;
|
|
129
132
|
computeCompactionBoundaries(session: TSession, contextWindow: number, model?: Model): CompactionBoundaries | null;
|
|
130
133
|
}
|
|
131
134
|
export interface FooterHost {
|
|
@@ -7,6 +7,8 @@ export type { SegmentContext } from "./types.js";
|
|
|
7
7
|
* model segment and the composer's effort chip.
|
|
8
8
|
*/
|
|
9
9
|
export declare function thinkingLevelWord(session: Pick<StatusLineSession, "state" | "isAutoThinking" | "autoResolvedThinkingLevel">): string | undefined;
|
|
10
|
+
/** Zeta-only: the ultra plan workflow gets its own status-line label (lost in the v18.8.8 merge once already). */
|
|
11
|
+
export declare const PLAN_ULTRA_LABEL = "Plan-Ultra";
|
|
10
12
|
export declare const SEGMENTS: Record<StatusLineSegmentId, StatusLineSegment>;
|
|
11
13
|
export declare function renderSegment(id: StatusLineSegmentId, ctx: SegmentContext): RenderedSegment;
|
|
12
14
|
/** Native description of one segment; null when it is hidden or unknown. */
|
|
@@ -93,6 +93,8 @@ export interface SegmentContext {
|
|
|
93
93
|
planMode: {
|
|
94
94
|
enabled: boolean;
|
|
95
95
|
paused: boolean;
|
|
96
|
+
/** Plan workflow variant; `ultra` renders as `Plan-Ultra` in the mode segment. */
|
|
97
|
+
workflow?: "parallel" | "iterative" | "ultra";
|
|
96
98
|
} | null;
|
|
97
99
|
prewalk: {
|
|
98
100
|
enabled: boolean;
|
|
@@ -112,7 +114,7 @@ export interface SegmentContext {
|
|
|
112
114
|
} | null;
|
|
113
115
|
/** Modal editing state, or null when `tui.vimMode` is off. */
|
|
114
116
|
vim: {
|
|
115
|
-
mode: "insert" | "normal" | "visual" | "visual-line";
|
|
117
|
+
mode: "insert" | "normal" | "visual" | "visual-line" | "replace";
|
|
116
118
|
/** Half-typed operator/count (`"2d"`), empty when nothing is pending. */
|
|
117
119
|
pending: string;
|
|
118
120
|
/** Lines spanned by the active Visual selection; 0 outside Visual modes. */
|
|
@@ -223,9 +225,18 @@ export interface SegmentContext {
|
|
|
223
225
|
expiryHours?: number;
|
|
224
226
|
expired?: boolean;
|
|
225
227
|
unavailableReason?: string;
|
|
228
|
+
expiring?: StatusResetExpiry;
|
|
226
229
|
};
|
|
227
230
|
} | null;
|
|
228
231
|
}
|
|
232
|
+
/** How close an account's saved resets are to expiring, when it is worth a warning. */
|
|
233
|
+
export interface StatusResetExpiry {
|
|
234
|
+
/** `soon`: within 7 days; `imminent`: within 24 hours. */
|
|
235
|
+
tier: "soon" | "imminent";
|
|
236
|
+
count: number;
|
|
237
|
+
/** Expiry of the reset the warning is about (epoch ms); it can be later than the soonest banked one. */
|
|
238
|
+
expiresAtMs: number;
|
|
239
|
+
}
|
|
229
240
|
export interface RenderedSegment {
|
|
230
241
|
content: string;
|
|
231
242
|
visible: boolean;
|
|
@@ -245,8 +256,8 @@ export interface SegmentView {
|
|
|
245
256
|
}
|
|
246
257
|
/**
|
|
247
258
|
* The status line's facts for the native composer. A TSP terminal shows no
|
|
248
|
-
* status strip: the tab title carries the session, the pane header the path
|
|
249
|
-
* and
|
|
259
|
+
* status strip: the tab title carries the session, the pane header the path,
|
|
260
|
+
* and the composer the rest (the git branch among its facts).
|
|
250
261
|
*/
|
|
251
262
|
export interface ComposerFacts {
|
|
252
263
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { HangulCompatibilityJamoWidth } from "./utils.js";
|
|
2
2
|
export * from "./terminal-multiplexer.js";
|
|
3
|
-
export {
|
|
3
|
+
export { wrapTmuxPassthrough } from "./tmux.js";
|
|
4
4
|
export declare enum ImageProtocol {
|
|
5
5
|
Kitty = "\u001B_G",
|
|
6
6
|
Iterm2 = "\u001B]1337;File=",
|
|
@@ -55,12 +55,6 @@ export declare class TerminalInfo {
|
|
|
55
55
|
formatNotification(message: string | TerminalNotification): string;
|
|
56
56
|
sendNotification(message: string | TerminalNotification): void;
|
|
57
57
|
}
|
|
58
|
-
/**
|
|
59
|
-
* Whether the agent process is running inside a Zellij session. Read fresh on
|
|
60
|
-
* each call (like {@link isInsideTmux}) so a session attached/detached mid-run
|
|
61
|
-
* is observed and tests can toggle `Bun.env.ZELLIJ` per case.
|
|
62
|
-
*/
|
|
63
|
-
export declare function isInsideZellij(env?: NodeJS.ProcessEnv): boolean;
|
|
64
58
|
/**
|
|
65
59
|
* Whether the agent process runs in an SSH session, so the terminal emulator
|
|
66
60
|
* is remote and host-local input/keyboard modes cannot be assumed.
|
|
@@ -96,12 +90,12 @@ export declare function synchronizedOutputUserOverride(env?: NodeJS.ProcessEnv):
|
|
|
96
90
|
* 2. Positive `TERM_FEATURES` advertisement (`Sy`) — survives SSH/mux wrapping.
|
|
97
91
|
* 3. Windows Terminal (1.24+) via `WT_SESSION`, on native win32 and the
|
|
98
92
|
* WSL/SSH-fronted host alike.
|
|
99
|
-
* 4.
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
* composite as dirty-row patches — the live viewport tears, with
|
|
104
|
-
* frozen while only the bottom refreshes.
|
|
93
|
+
* 4. A multiplexer session whose pane VTE honors DEC 2026 regardless of its
|
|
94
|
+
* DECRQM reply (Herdr's libghostty pane). Such a multiplexer still owns
|
|
95
|
+
* the grid, so leaked kitty/ghostty identities cannot enable placeholder
|
|
96
|
+
* graphics, but leaving sync off lets CUP-diff paints and split write(2)
|
|
97
|
+
* chunks composite as dirty-row patches — the live viewport tears, with
|
|
98
|
+
* the top frozen while only the bottom refreshes.
|
|
105
99
|
* 5. Known direct terminals with confirmed support. SSH does *not* disable —
|
|
106
100
|
* DEC 2026 passes through SSH when the outer terminal honors it.
|
|
107
101
|
* 6. Everything else starts off, including risky multiplexers; the runtime
|
|
@@ -167,31 +161,29 @@ export declare function hyperlinksUserOverride(env?: NodeJS.ProcessEnv): boolean
|
|
|
167
161
|
* Policy (highest precedence first):
|
|
168
162
|
* 1. Explicit user override (`PI_NO_HYPERLINKS=1` off, `PI_FORCE_HYPERLINKS=1`
|
|
169
163
|
* on). Opt-out wins ties.
|
|
170
|
-
* 2.
|
|
171
|
-
*
|
|
172
|
-
*
|
|
173
|
-
*
|
|
164
|
+
* 2. Every multiplexer session with a hyperlink policy renders OSC 8 itself
|
|
165
|
+
* (`render`, e.g. Herdr): on. Herdr hides the outer terminal
|
|
166
|
+
* (`TERM=xterm-256color`, no `TERM_PROGRAM`), so the outer terminal's
|
|
167
|
+
* support does not matter.
|
|
174
168
|
* 2b. Zeta workbench pane with no nested screen/tmux: on, for the same
|
|
175
169
|
* reason — the workbench's terminal simulator renders OSC 8 itself and
|
|
176
170
|
* opens links on Ctrl+click (`ZETA_WORKBENCH=1` is injected into every
|
|
177
171
|
* pane PTY; the outer terminal is invisible from inside).
|
|
178
172
|
* 3. Static terminal capability — terminals whose {@link TerminalInfo} marks
|
|
179
173
|
* `hyperlinks: false` (e.g. `base`) stay off unless the user forced on.
|
|
180
|
-
* 4.
|
|
181
|
-
*
|
|
182
|
-
* 5.
|
|
183
|
-
*
|
|
184
|
-
*
|
|
185
|
-
*
|
|
186
|
-
*
|
|
187
|
-
*
|
|
188
|
-
*
|
|
189
|
-
*
|
|
190
|
-
*
|
|
191
|
-
*
|
|
192
|
-
* 7.
|
|
193
|
-
* no version available, so off.
|
|
194
|
-
* 8. Otherwise honor the static terminal capability.
|
|
174
|
+
* 4. A session that never forwards OSC 8 (`drop`, e.g. GNU screen's `STY`)
|
|
175
|
+
* always off, even when a forwarding multiplexer is also present.
|
|
176
|
+
* 5. Forwarding sessions (`forward`, e.g. `TMUX`): enabled when every one
|
|
177
|
+
* self-reports at least its forwarding version via `TERM_PROGRAM` /
|
|
178
|
+
* `TERM_PROGRAM_VERSION` (tmux 3.4). Older or unknown versions stay off;
|
|
179
|
+
* on outer terminals without the feature configured, tmux silently drops
|
|
180
|
+
* the sequence. Checked before the TERM heuristic because tmux's
|
|
181
|
+
* historical `default-terminal` is `screen-256color`, so `TERM=screen*`
|
|
182
|
+
* inside a tmux session must NOT short-circuit to off.
|
|
183
|
+
* 6. TERM naming a multiplexer whose session markers were stripped: off,
|
|
184
|
+
* since no session proves the multiplexer forwards OSC 8 (screen never
|
|
185
|
+
* does; tmux has no version to check).
|
|
186
|
+
* 7. Otherwise honor the static terminal capability.
|
|
195
187
|
*/
|
|
196
188
|
export declare function shouldEnableHyperlinksByDefault(env?: NodeJS.ProcessEnv, terminalId?: TerminalId): boolean;
|
|
197
189
|
/**
|
|
@@ -343,7 +335,7 @@ export interface ParsedKittyPlacementLine {
|
|
|
343
335
|
/**
|
|
344
336
|
* Parse a frame line that consists solely of a Kitty direct placement (the
|
|
345
337
|
* last line of an {@link Image} block). Returns null for anything else —
|
|
346
|
-
* placeholder grids,
|
|
338
|
+
* placeholder grids, sixel/iTerm2 payloads — so
|
|
347
339
|
* callers fall back to writing the line verbatim.
|
|
348
340
|
*/
|
|
349
341
|
export declare function parseKittyDirectPlacementLine(line: string): ParsedKittyPlacementLine | null;
|
|
@@ -383,8 +375,8 @@ export declare function encodeKittyDeleteAllImages(): string;
|
|
|
383
375
|
/**
|
|
384
376
|
* Delete a single placement of an image (`d=i`, lowercase): removes its cells
|
|
385
377
|
* and registry entry but keeps the transmitted data, so a later `a=p` under a
|
|
386
|
-
* fresh placement id needs no retransmit.
|
|
387
|
-
*
|
|
378
|
+
* fresh placement id needs no retransmit. The frame writer uses this before
|
|
379
|
+
* replacing a live image without deleting its archived copies.
|
|
388
380
|
*/
|
|
389
381
|
export declare function encodeKittyDeletePlacement(imageId: number, placementId: number): string;
|
|
390
382
|
export declare function encodeITerm2(base64Data: string, options?: {
|
|
@@ -1,20 +1,133 @@
|
|
|
1
|
-
|
|
2
|
-
export declare function isInsideHerdr(env?: NodeJS.ProcessEnv): boolean;
|
|
3
|
-
/** Terminal multiplexers zeta recognizes as owning the screen grid. */
|
|
4
|
-
export type TerminalMultiplexer = "herdr" | "tmux" | "screen" | "zellij" | "cmux" | "wmux";
|
|
1
|
+
import type { TerminalMultiplexerModule, TerminalMultiplexerNotificationRequest } from "./multiplexers/types.js";
|
|
5
2
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
3
|
+
* Every multiplexer omp recognizes, in classification order within each
|
|
4
|
+
* precedence tier. Adding a multiplexer means adding its module here.
|
|
5
|
+
*/
|
|
6
|
+
declare const registry: readonly [{
|
|
7
|
+
readonly id: "herdr";
|
|
8
|
+
readonly precedence: "session";
|
|
9
|
+
readonly sessionEnvKeys: readonly ["HERDR_ENV", "HERDR_PANE_ID", "HERDR_TAB_ID", "HERDR_WORKSPACE_ID"];
|
|
10
|
+
readonly ownsScreenGrid: true;
|
|
11
|
+
readonly isInside: (env?: NodeJS.ProcessEnv) => boolean;
|
|
12
|
+
readonly notifier: {
|
|
13
|
+
readonly tier: "pane";
|
|
14
|
+
readonly send: ({ message, env }: TerminalMultiplexerNotificationRequest) => boolean;
|
|
15
|
+
};
|
|
16
|
+
readonly hyperlinks: "render";
|
|
17
|
+
readonly honorsSynchronizedOutput: true;
|
|
18
|
+
readonly imagesRequireOverride: true;
|
|
19
|
+
}, {
|
|
20
|
+
readonly id: "tmux";
|
|
21
|
+
readonly precedence: "session";
|
|
22
|
+
readonly sessionEnvKeys: readonly ["TMUX"];
|
|
23
|
+
readonly termPrefix: "tmux";
|
|
24
|
+
readonly ownsScreenGrid: true;
|
|
25
|
+
readonly isInside: (env?: NodeJS.ProcessEnv) => boolean;
|
|
26
|
+
readonly notifier: {
|
|
27
|
+
readonly tier: "inBand";
|
|
28
|
+
readonly send: ({ sequence, write }: TerminalMultiplexerNotificationRequest) => boolean;
|
|
29
|
+
};
|
|
30
|
+
readonly hyperlinks: {
|
|
31
|
+
readonly forward: {
|
|
32
|
+
readonly termProgram: "tmux";
|
|
33
|
+
readonly major: 3;
|
|
34
|
+
readonly minor: 4;
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
readonly backgroundColorCache: {
|
|
38
|
+
readonly passthrough: typeof import("./tmux.js").wrapTmuxPassthrough;
|
|
39
|
+
readonly settleMs: 100;
|
|
40
|
+
};
|
|
41
|
+
readonly expandsRepPadding: true;
|
|
42
|
+
readonly expiresSynchronizedOutput: true;
|
|
43
|
+
readonly altRestoreEndsSynchronizedOutput: true;
|
|
44
|
+
readonly growsBeforeSigwinch: true;
|
|
45
|
+
}, {
|
|
46
|
+
readonly id: "screen";
|
|
47
|
+
readonly precedence: "session";
|
|
48
|
+
readonly sessionEnvKeys: readonly ["STY"];
|
|
49
|
+
readonly termPrefix: "screen";
|
|
50
|
+
readonly ownsScreenGrid: true;
|
|
51
|
+
readonly isInside: (env?: NodeJS.ProcessEnv) => boolean;
|
|
52
|
+
readonly hyperlinks: "drop";
|
|
53
|
+
}, {
|
|
54
|
+
readonly id: "zellij";
|
|
55
|
+
readonly precedence: "session";
|
|
56
|
+
readonly sessionEnvKeys: readonly ["ZELLIJ"];
|
|
57
|
+
readonly ownsScreenGrid: true;
|
|
58
|
+
readonly isInside: (env?: NodeJS.ProcessEnv) => boolean;
|
|
59
|
+
readonly notifier: {
|
|
60
|
+
readonly tier: "inBand";
|
|
61
|
+
readonly send: ({ sequence, write }: TerminalMultiplexerNotificationRequest) => boolean;
|
|
62
|
+
};
|
|
63
|
+
readonly backgroundQueryBrokenOn: readonly ["darwin"];
|
|
64
|
+
}, {
|
|
65
|
+
readonly id: "cmux";
|
|
66
|
+
readonly precedence: "session";
|
|
67
|
+
readonly sessionEnvKeys: readonly ["CMUX_WORKSPACE_ID", "CMUX_SURFACE_ID", "CMUX_REMOTE_TRANSPORT"];
|
|
68
|
+
readonly ownsScreenGrid: true;
|
|
69
|
+
readonly isInside: (env?: NodeJS.ProcessEnv) => boolean;
|
|
70
|
+
readonly notifier: {
|
|
71
|
+
readonly tier: "surface";
|
|
72
|
+
readonly send: ({ message, env }: TerminalMultiplexerNotificationRequest) => boolean;
|
|
73
|
+
};
|
|
74
|
+
}, {
|
|
75
|
+
readonly id: "wmux";
|
|
76
|
+
readonly precedence: "session";
|
|
77
|
+
readonly sessionEnvKeys: readonly ["WMUX", "WMUX_SURFACE_ID"];
|
|
78
|
+
readonly ownsScreenGrid: true;
|
|
79
|
+
readonly isInside: (env?: NodeJS.ProcessEnv) => boolean;
|
|
80
|
+
}, {
|
|
81
|
+
readonly id: "orca";
|
|
82
|
+
readonly precedence: "outerApp";
|
|
83
|
+
readonly sessionEnvKeys: readonly ["ORCA_PANE_KEY", "ORCA_WORKTREE_ID"];
|
|
84
|
+
readonly ownsScreenGrid: false;
|
|
85
|
+
readonly isInside: (env?: NodeJS.ProcessEnv) => boolean;
|
|
86
|
+
}];
|
|
87
|
+
/** Terminal multiplexers omp recognizes. */
|
|
88
|
+
export type TerminalMultiplexer = (typeof registry)[number]["id"];
|
|
89
|
+
/** Every environment variable multiplexer classification reads, including the TERM fallback. */
|
|
90
|
+
export declare const TERMINAL_MULTIPLEXER_ENV_KEYS: readonly string[];
|
|
91
|
+
/**
|
|
92
|
+
* Whether an explicit session marker identifies the current provider.
|
|
93
|
+
*
|
|
94
|
+
* TERM is intentionally excluded: it is a classification fallback, not proof
|
|
95
|
+
* that a particular multiplexer session owns the current grid.
|
|
96
|
+
*/
|
|
97
|
+
export declare function hasTerminalMultiplexerSession(multiplexer: TerminalMultiplexer, env?: NodeJS.ProcessEnv): boolean;
|
|
98
|
+
/**
|
|
99
|
+
* Every multiplexer whose explicit session markers are present, in registry
|
|
100
|
+
* order. Nested sessions all appear; TERM is not consulted.
|
|
101
|
+
*/
|
|
102
|
+
export declare function terminalMultiplexerSessions(env?: NodeJS.ProcessEnv): TerminalMultiplexerModule<TerminalMultiplexer>[];
|
|
103
|
+
/**
|
|
104
|
+
* The multiplexer TERM names, whether or not its session markers survived.
|
|
105
|
+
* This is classification's TERM fallback; session markers are not consulted.
|
|
106
|
+
*/
|
|
107
|
+
export declare function terminalMultiplexerForTerm(env?: NodeJS.ProcessEnv): TerminalMultiplexerModule<TerminalMultiplexer> | undefined;
|
|
108
|
+
/**
|
|
109
|
+
* Registry entry for the multiplexer hosting the current process, or
|
|
110
|
+
* `undefined` for a direct terminal. Same precedence as
|
|
111
|
+
* {@link classifyTerminalMultiplexer}.
|
|
112
|
+
*/
|
|
113
|
+
export declare function classifyTerminalMultiplexerModule(env?: NodeJS.ProcessEnv): TerminalMultiplexerModule<TerminalMultiplexer> | undefined;
|
|
114
|
+
/**
|
|
115
|
+
* Classify which terminal multiplexer hosts the current process, or `null` for
|
|
116
|
+
* a direct terminal. Single source of truth for both the render-path gate
|
|
8
117
|
* (`isInsideTerminalMultiplexer`) and the debug snapshot label.
|
|
9
118
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* overrides and can be set outside a CMUX/WMUX terminal. wmux is a Windows
|
|
15
|
-
* multiplexer (Electron + xterm.js) modeled on cmux/herdr that repaints its
|
|
16
|
-
* pane in place and exports WMUX=1 plus a native WMUX_SURFACE_ID.
|
|
119
|
+
* Session markers are authoritative. TERM can also survive when those markers
|
|
120
|
+
* are stripped (`sudo` without -E, `su`, env-sanitizing launchers/ssh), so a
|
|
121
|
+
* `tmux`/`screen` TERM prefix comes next. Outer applications such as Orca rank
|
|
122
|
+
* last so a multiplexer running inside them wins.
|
|
17
123
|
*/
|
|
18
124
|
export declare function classifyTerminalMultiplexer(env?: NodeJS.ProcessEnv): TerminalMultiplexer | null;
|
|
19
|
-
/** True when
|
|
125
|
+
/** True when the classified multiplexer owns the current screen grid. */
|
|
20
126
|
export declare function isInsideTerminalMultiplexer(env?: NodeJS.ProcessEnv): boolean;
|
|
127
|
+
/**
|
|
128
|
+
* Offer a notification to every active session's notifier, innermost tier
|
|
129
|
+
* first. Returns whether one delivered it; otherwise the terminal fallback
|
|
130
|
+
* applies unchanged.
|
|
131
|
+
*/
|
|
132
|
+
export declare function routeTerminalMultiplexerNotification(request: TerminalMultiplexerNotificationRequest): boolean;
|
|
133
|
+
export {};
|