@x-otto/tui 0.0.1-alpha.9 → 0.1.0-alpha.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -38
- package/dist/{Tabable-BIsfZJSG.d.ts → Tabable-BRz398OB.d.ts} +163 -63
- package/dist/Tabable-BRz398OB.d.ts.map +1 -0
- package/dist/WizardDialog-y3yLsmoV.js +14 -0
- package/dist/WizardDialog-y3yLsmoV.js.map +1 -0
- package/dist/compat.js +1 -1
- package/dist/i18n-CpUZSqYB.js +76 -0
- package/dist/i18n-CpUZSqYB.js.map +1 -0
- package/dist/index.d.ts +202 -25
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +88 -85
- package/dist/index.js.map +1 -1
- package/dist/standalone.d.ts +1 -1
- package/dist/standalone.d.ts.map +1 -1
- package/dist/standalone.js +1 -1
- package/package.json +7 -6
- package/dist/Tabable-BIsfZJSG.d.ts.map +0 -1
- package/dist/WizardDialog-BBG0tWpB.js +0 -10
- package/dist/WizardDialog-BBG0tWpB.js.map +0 -1
- package/dist/i18n-KiLOGLXu.js +0 -76
- package/dist/i18n-KiLOGLXu.js.map +0 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Module Purpose
|
|
4
4
|
|
|
5
|
-
The terminal UI application layer: a React + Ink component tree that provides streaming Markdown rendering, permission dialogs, input stack, message flow, and the full terminal interaction experience. Built on the npm `ink` v7 rendering engine and
|
|
5
|
+
The terminal UI application layer: a React + Ink component tree that provides streaming Markdown rendering, permission dialogs, input stack, message flow, and the full terminal interaction experience. Built on the npm `ink` v7 rendering engine, with keybinding, theme, and fuzzy-search systems living in-package (`src/keybindings`, `src/theme`, `src/search`).
|
|
6
6
|
|
|
7
7
|
## Installation
|
|
8
8
|
|
|
@@ -18,23 +18,23 @@ import { startTui } from '@x-otto/tui'
|
|
|
18
18
|
const tui = await startTui({
|
|
19
19
|
stdin: process.stdin,
|
|
20
20
|
stdout: process.stdout,
|
|
21
|
-
|
|
21
|
+
onSubmit: (text) => { /* send to agent */ },
|
|
22
22
|
})
|
|
23
23
|
|
|
24
|
-
tui.pushMessage({ role: 'assistant', content: 'Hello! I am otto.' })
|
|
25
|
-
tui.showToast('Task completed')
|
|
24
|
+
tui.messages.pushMessage({ role: 'assistant', content: 'Hello! I am otto.' })
|
|
25
|
+
tui.info.showToast('Task completed', 'Done')
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
tui.lifecycle.stop()
|
|
28
28
|
```
|
|
29
29
|
|
|
30
30
|
## Core Features
|
|
31
31
|
|
|
32
32
|
| Module | Function |
|
|
33
33
|
| --------------- | ------------------------------------------------------- |
|
|
34
|
-
| Store | Application state management (zustand-driven, useAppState /
|
|
34
|
+
| Store | Application state management (zustand-driven, useAppState / makeStore) |
|
|
35
35
|
| Input | Input stack: Cursor model + InputBuffer + History + Typeahead |
|
|
36
|
-
| Messages | Message flow:
|
|
37
|
-
| Dialogs | Dialog arbitration: permission
|
|
36
|
+
| Messages | Message flow: stream commit/coalesce + QueryGuard + Collapse + Diff |
|
|
37
|
+
| Dialogs | Dialog arbitration: routed permission dialogs + Select state machine + dialog components |
|
|
38
38
|
| Components | Common components: App / Welcome / StatusBar / Spinner / Button / DataList |
|
|
39
39
|
| Term | Terminal primitives: BracketedPaste / OSC 8/52 / SyncFrame |
|
|
40
40
|
| Theme | Color palette + icon glyphs + spinner frames + theme preset registry |
|
|
@@ -46,10 +46,8 @@ await tui.dispose()
|
|
|
46
46
|
|
|
47
47
|
| Component | Function |
|
|
48
48
|
| ------------------ | ----------------------------- |
|
|
49
|
-
|
|
|
49
|
+
| TextInput | Text input (cursor/edit/paste) |
|
|
50
50
|
| PromptInput | Main prompt input box |
|
|
51
|
-
| PromptInputFooter | Input box status footer |
|
|
52
|
-
| HistorySearchInput | History search input |
|
|
53
51
|
| QueuedCommands | Queued command display |
|
|
54
52
|
|
|
55
53
|
## Message Rendering
|
|
@@ -57,37 +55,44 @@ await tui.dispose()
|
|
|
57
55
|
| Component | Function |
|
|
58
56
|
| ------------------ | ----------------------------- |
|
|
59
57
|
| Message | Message container (role/collapse/branch) |
|
|
60
|
-
| Markdown | Static Markdown rendering |
|
|
61
|
-
| StreamingMarkdown | Streaming Markdown rendering (flicker-free) |
|
|
62
|
-
| StructuredDiff | Structured diff rendering |
|
|
63
|
-
| HighlightedCode | Syntax-highlighted code blocks |
|
|
64
|
-
| ToolUseLoader | Tool call loading animation |
|
|
65
58
|
| REPLRegion | REPL message region container |
|
|
59
|
+
| renderMessageLines | Line-based message rendering (streaming-aware) |
|
|
60
|
+
| renderMarkdownToLines | Markdown → ANSI line rendering |
|
|
61
|
+
| preloadHighlighter / highlightBlock | Syntax-highlighted code blocks |
|
|
66
62
|
|
|
67
63
|
## Directory Overview
|
|
68
64
|
|
|
69
65
|
```
|
|
70
66
|
src/
|
|
71
|
-
types.ts
|
|
72
|
-
theme.ts
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
67
|
+
types.ts # TUI-local type stubs (no dependency on @x-otto/ai)
|
|
68
|
+
theme.ts # THEME / PALETTE / FIGURES / SPINNER_FRAMES
|
|
69
|
+
main.ts # production entry point (startTui)
|
|
70
|
+
compat.ts # backward-compatibility (legacy API shim)
|
|
71
|
+
index.ts # barrel export
|
|
72
|
+
stores/ # application state (zustand: message/stream/task/context/...)
|
|
73
|
+
term/ # terminal primitives (paste/keys/OSC/sync/scrollback)
|
|
74
|
+
input/ # input stack (Cursor/Buffer/History/Typeahead)
|
|
75
|
+
messages/ # message flow (commit/QueryGuard/Collapse/Diff)
|
|
76
|
+
dialogs/ # dialogs (Permission/Select/Confirm/Alert/...)
|
|
77
|
+
components/ # common components (App/Welcome/StatusBar/Spinner)
|
|
78
|
+
panes/ # side panes (Context/Task/Subagents/Sigil/Schedule/...)
|
|
79
|
+
router/ + routes/ # router-driven views & modal routes (FocusBus/Router/Tabable)
|
|
80
|
+
overlays/ # overlay components
|
|
81
|
+
status-bar/ # status bar widgets (provider usage badge, background tasks)
|
|
82
|
+
keybindings/ # keybinding parsing & overrides
|
|
83
|
+
history/ # shell history parsing (zsh/bash/fish)
|
|
84
|
+
search/ # fuzzy search
|
|
85
|
+
sigil/ # #/@ sigil input completion
|
|
86
|
+
bootstrap/ # TuiHandle/TuiOptions types + session data-source bridges
|
|
87
|
+
app/ # App shell assembly (input/dialog/panel/status regions)
|
|
88
|
+
tests/ # 385 test files
|
|
84
89
|
```
|
|
85
90
|
|
|
86
91
|
## Public Exports
|
|
87
92
|
|
|
88
93
|
```ts
|
|
89
94
|
// State management
|
|
90
|
-
export {
|
|
95
|
+
export { useAppState, makeStore }
|
|
91
96
|
export type { Store }
|
|
92
97
|
|
|
93
98
|
// Terminal primitives
|
|
@@ -99,17 +104,18 @@ export { insertHistory, preWrapLine, displayWidth, guardScrollbackStdout }
|
|
|
99
104
|
export { Cursor, MeasuredText, stringWidth }
|
|
100
105
|
export { createInputBuffer, createInputHistory, createPasteStore }
|
|
101
106
|
export { createCommandRegistry, getCommandSuggestions, applySlashCompletion }
|
|
102
|
-
export { TextInput, PromptInput, QueuedCommands
|
|
107
|
+
export { TextInput, PromptInput, QueuedCommands }
|
|
103
108
|
export type { InputBuffer, BufferEntry }
|
|
104
109
|
|
|
105
110
|
// Message flow
|
|
106
|
-
export {
|
|
111
|
+
export { safeCommitBoundary, initStreamCommit, streamCommitStep, makeCoalescer }
|
|
107
112
|
export { createQueryGuard, collapseMessages, toggleCollapse, expandCollapsed }
|
|
108
|
-
export {
|
|
113
|
+
export { Message, REPLRegion }
|
|
114
|
+
export { renderMessageLines, renderMarkdownToLines, preloadHighlighter, highlightBlock }
|
|
109
115
|
export { registerPluginRenderers, clearPluginRenderers }
|
|
110
116
|
|
|
111
117
|
// Dialogs
|
|
112
|
-
export {
|
|
118
|
+
export { createSelectState }
|
|
113
119
|
export { Select, PermissionDialogDialog, BashPermissionDialog, ConfirmDialog, AlertDialog, PromptDialog, MemoryDialog }
|
|
114
120
|
|
|
115
121
|
// Components
|
|
@@ -124,9 +130,6 @@ export type { ThemePreset, ThemePresetInput, ThemePresetSelection, ThemeAppearan
|
|
|
124
130
|
// Search
|
|
125
131
|
export { rankCandidates, rankNamedItems, rankLabeledItems, createIncrementalSearcher }
|
|
126
132
|
|
|
127
|
-
// Inspect
|
|
128
|
-
export { createInspectorStore, InspectorPane, buildEventTree, buildToolList }
|
|
129
|
-
|
|
130
133
|
// i18n
|
|
131
134
|
export { detectLanguage, t, i18next, initI18n }
|
|
132
135
|
export type { Lang, LangMode }
|
|
@@ -147,4 +150,4 @@ pnpm --filter @x-otto/tui clean
|
|
|
147
150
|
|
|
148
151
|
## Related Packages
|
|
149
152
|
|
|
150
|
-
`@x-otto/
|
|
153
|
+
`@x-otto/interchange`, `@x-otto/session-contract`, `@x-otto/shared`, `@x-otto/env`
|
|
@@ -91,6 +91,8 @@ interface SummaryMessage {
|
|
|
91
91
|
tasksTotal?: number;
|
|
92
92
|
/** 回合完成时刻(epoch ms,cli 侧 reducer 生成)。摘要行末尾灰色渲染 "YYYY-MM-DD HH:MM:SS"。 */
|
|
93
93
|
completedAt?: number;
|
|
94
|
+
/** 错误终止时的错误消息(status='error' 时),摘要行下方红色渲染错误详情。 */
|
|
95
|
+
errorMessage?: string;
|
|
94
96
|
id?: string;
|
|
95
97
|
}
|
|
96
98
|
/**
|
|
@@ -148,8 +150,7 @@ interface PruneBoundaryMessage {
|
|
|
148
150
|
* 死历史(R12 压缩前置保证),但压缩连续失败后的兜底裁剪(`lossy`)会真实削减模型上下文,
|
|
149
151
|
* 此时该表述不成立,必须按 lossy 分型提示。**RFC-159 起持久层为
|
|
150
152
|
* append-forever**:默认 SQLite 后端从不因此裁剪删除已持久化的 DB 行,被移出内存视图的
|
|
151
|
-
* 消息仍完整保留在存储中(`/session export`
|
|
152
|
-
* 逃生口后端会整份快照覆写、导致真实数据丢失。携带具体条数(`removedCount`)供用户感知
|
|
153
|
+
* 消息仍完整保留在存储中(`/session export` 可导出全量)。携带具体条数(`removedCount`)供用户感知
|
|
153
154
|
* 内存视图收窄的范围。
|
|
154
155
|
*/
|
|
155
156
|
interface HistoryCappedMessage {
|
|
@@ -296,6 +297,17 @@ interface AppNotification {
|
|
|
296
297
|
/** 可选操作(如 "/delegates"、"/extension",enter 时触发)。 */
|
|
297
298
|
action?: string;
|
|
298
299
|
}
|
|
300
|
+
/** 待决权限请求 */
|
|
301
|
+
interface PendingPermission {
|
|
302
|
+
id: string;
|
|
303
|
+
tool: string;
|
|
304
|
+
input: string;
|
|
305
|
+
risk?: 'low' | 'medium' | 'high';
|
|
306
|
+
/** 模型生成的命令解释文本 */
|
|
307
|
+
description?: string;
|
|
308
|
+
/** bash「始终允许」拟持久化的命令前缀(如 `git status`),弹窗显式呈现给用户。 */
|
|
309
|
+
alwaysAllowLabel?: string;
|
|
310
|
+
}
|
|
299
311
|
/**
|
|
300
312
|
* RFC-186 D3:暂停浮层数据项。notificationStore.pauseDialog 非 null 时 App.tsx 渲染
|
|
301
313
|
* PauseDialog 组件。两个阶段:requested(等待 turn 边界)+ active(已暂停)。
|
|
@@ -449,7 +461,8 @@ declare const DEFAULT_FIGURES: {
|
|
|
449
461
|
readonly gaugeFilled: "━"; /** LineGauge 未完成段 ╌ */
|
|
450
462
|
readonly gaugeRest: "╌"; /** Scrollbar thumb 右半块 ▐ */
|
|
451
463
|
readonly scrollThumb: "▐"; /** 委托任务识别到的服务前缀 ↕ */
|
|
452
|
-
readonly service: "↕"; /**
|
|
464
|
+
readonly service: "↕"; /** SignalBar services 信号前缀 ⇢(RFC-377 D4,与 delegates 的 ↕ 不同形) */
|
|
465
|
+
readonly serviceSignal: "⇢"; /** 已编辑文件标记 ✎(RFC-309 SummaryStrip) */
|
|
453
466
|
readonly edited: "✎"; /** 定时/计划任务标记 ◷(RFC-309 SummaryStrip) */
|
|
454
467
|
readonly scheduled: "◷"; /** 剪贴板信号 ✓(复制成功提示) */
|
|
455
468
|
readonly clipboard: "✓"; /** LLM 调用阶段箭头:requesting ↑,responding ↓ */
|
|
@@ -482,8 +495,8 @@ declare const PANEL_BORDER: {
|
|
|
482
495
|
* **单一真源**:所有经 DialogFrame 呈现的弹层写此常量。历史上曾有 `BORDER_VARIANTS`
|
|
483
496
|
* 三档(hard/nav/overlay)按界面层级分不同形态(RFC-183 D1),但 2026-07-22 commit
|
|
484
497
|
* 9466cb7c9「统一所有弹层为四边圆角」有意将三档收敛为同一形态;RFC-266 D1 据此删除
|
|
485
|
-
* 无差异的 variant API
|
|
486
|
-
*
|
|
498
|
+
* 无差异的 variant API,收敛为本单一常量(界面层级语义分层已由路由层焦点归属单一判定
|
|
499
|
+
* 承载,边框层不再重复编码)。将来若需按层级再分化边框,以新 RFC 重新设计,不保留投机性 API。
|
|
487
500
|
*/
|
|
488
501
|
declare const DIALOG_BORDER: {
|
|
489
502
|
readonly borderStyle: "round";
|
|
@@ -610,16 +623,16 @@ interface Store<T> {
|
|
|
610
623
|
}
|
|
611
624
|
declare function useAppState<T, R>(store: Store<T>, selector: (state: T) => R): R;
|
|
612
625
|
//#endregion
|
|
613
|
-
//#region src/stores/
|
|
626
|
+
//#region src/stores/status-store.d.ts
|
|
614
627
|
/** 内存快照——字段对齐 `@x-otto/coding` 的 `MemorySample`(不直接 import 跨包类型,
|
|
615
|
-
* tui 包不依赖 coding 包,由 cli
|
|
628
|
+
* tui 包不依赖 coding 包,由 cli 层组装时结构对齐即可)。 */
|
|
616
629
|
interface PerfMemorySnapshot {
|
|
617
630
|
level: 'healthy' | 'warning' | 'critical';
|
|
618
631
|
heapUsed: number;
|
|
619
632
|
heapSizeLimit: number;
|
|
620
633
|
usedPct: number;
|
|
621
634
|
}
|
|
622
|
-
/** 渲染健康度快照——字段对齐 `NotifyStats
|
|
635
|
+
/** 渲染健康度快照——字段对齐 `NotifyStats`。 */
|
|
623
636
|
interface PerfNotifySnapshot {
|
|
624
637
|
coalescedCalls: number;
|
|
625
638
|
coalescedFires: number;
|
|
@@ -630,43 +643,50 @@ interface PerfNotifySnapshot {
|
|
|
630
643
|
}
|
|
631
644
|
/**
|
|
632
645
|
* 单个插件采集器的结果。
|
|
633
|
-
* RFC-118 小修(S10
|
|
634
|
-
* `@x-otto/interchange`(coding 生产侧同源),此处别名保持 tui 内既有消费方命名兼容。
|
|
646
|
+
* RFC-118 小修(S10):类型本体上移 `@x-otto/interchange`,此处别名保持兼容。
|
|
635
647
|
*/
|
|
636
648
|
type PluginMetricResult = _$_x_otto_interchange0.PluginPerfMetricResult;
|
|
637
|
-
|
|
649
|
+
/** Session 概览快照——由 CLI 层 handleStatus 从 AgentSession 实时采集。 */
|
|
650
|
+
interface StatusSessionSnapshot {
|
|
651
|
+
title: string;
|
|
652
|
+
sessionId: string;
|
|
653
|
+
modelId: string;
|
|
654
|
+
messageCount: number;
|
|
655
|
+
occupancy: number;
|
|
656
|
+
contextWindow: number | undefined;
|
|
657
|
+
occupancyPct: number | undefined;
|
|
658
|
+
cumOutput: number;
|
|
659
|
+
writeLeaseReadOnly: boolean;
|
|
660
|
+
isPaused: boolean;
|
|
661
|
+
}
|
|
662
|
+
interface StatusPaneState {
|
|
663
|
+
/** Session 概览——面板打开/刷新时采集。undefined = 尚未采集。 */
|
|
664
|
+
session: StatusSessionSnapshot | undefined;
|
|
638
665
|
memory: PerfMemorySnapshot | undefined;
|
|
639
|
-
/** 内存采样历史(
|
|
666
|
+
/** 内存采样历史(sparkline 趋势,环形窗口 ≤32 点,heapUsed 字节)。 */
|
|
640
667
|
memoryHistory: number[];
|
|
641
|
-
/** M1 阶段恒为 undefined(渲染区占位);M2 起由 CLI 层喂入真实值。 */
|
|
642
668
|
notify: PerfNotifySnapshot | undefined;
|
|
643
669
|
/**
|
|
644
|
-
*
|
|
645
|
-
*
|
|
646
|
-
* `/perf` 面板),由 `MemoryGovernor.onLevelChange` 回调驱动(每次分级变化都推送,
|
|
647
|
-
* 含恢复到 healthy 的方向)。初始为 'healthy'(保守假设,避免启动瞬间误报)。
|
|
670
|
+
* footer 常驻指示器的实时分级——与面板数据解耦,
|
|
671
|
+
* 由 `MemoryGovernor.onLevelChange` 回调驱动。初始为 'healthy'。
|
|
648
672
|
*/
|
|
649
673
|
indicatorLevel: 'healthy' | 'warning' | 'critical';
|
|
650
|
-
/**
|
|
651
|
-
* RFC-116 M5:插件贡献的性能采集器结果——手动刷新时喂入(对齐 D7 手动刷新决策,
|
|
652
|
-
* 不做自动轮询)。空数组 = 无插件贡献采集器或本次刷新尚未获取,两者在渲染层
|
|
653
|
-
* 不做区分(均不显示该区块),因为区分"无贡献"与"未刷新"对用户价值不大。
|
|
654
|
-
*/
|
|
674
|
+
/** 插件贡献的性能采集器结果——手动刷新时喂入(不做自动轮询)。 */
|
|
655
675
|
pluginMetrics: PluginMetricResult[];
|
|
656
676
|
}
|
|
657
|
-
interface
|
|
658
|
-
store: Store<
|
|
659
|
-
/** /clear
|
|
660
|
-
* RFC-256 收尾:面板可见性已改由 Router 栈单一真源派生(isInStack('/pane/perf')),
|
|
661
|
-
* store 不再持 `open` 布尔——原 toggle() 已删除。 */
|
|
677
|
+
interface StatusStore {
|
|
678
|
+
store: Store<StatusPaneState>;
|
|
679
|
+
/** /clear 会话重置——全字段回初始值。 */
|
|
662
680
|
reset(): void;
|
|
663
|
-
/** CLI
|
|
681
|
+
/** CLI 喂入 session 概览快照(面板打开/刷新时)。 */
|
|
682
|
+
setSession(snapshot: StatusSessionSnapshot): void;
|
|
683
|
+
/** CLI 喂入最新内存快照。 */
|
|
664
684
|
setMemory(snapshot: PerfMemorySnapshot): void;
|
|
665
|
-
/** CLI
|
|
685
|
+
/** CLI 喂入最新渲染健康度快照。 */
|
|
666
686
|
setNotify(snapshot: PerfNotifySnapshot): void;
|
|
667
|
-
/** CLI 喂入 footer
|
|
687
|
+
/** CLI 喂入 footer 常驻指示器的最新分级。 */
|
|
668
688
|
setIndicatorLevel(level: 'healthy' | 'warning' | 'critical'): void;
|
|
669
|
-
/** CLI
|
|
689
|
+
/** CLI 喂入最新插件采集器结果。 */
|
|
670
690
|
setPluginMetrics(results: PluginMetricResult[]): void;
|
|
671
691
|
}
|
|
672
692
|
//#endregion
|
|
@@ -1233,7 +1253,7 @@ interface PasteStore {
|
|
|
1233
1253
|
/** 当前 store 占用字节数(LRU 容量判据的另一维度)。 */
|
|
1234
1254
|
readonly bytesUsed: number;
|
|
1235
1255
|
/** 累计驱逐次数(LRU 超限淘汰 + 内存紧张分级用完即释放,两者都计数)。纯计数器,不驱动
|
|
1236
|
-
|
|
1256
|
+
* 任何行为,供未来 `/status` 面板或调试场景观测。 */
|
|
1237
1257
|
readonly evictionCount: number;
|
|
1238
1258
|
/**
|
|
1239
1259
|
* 清空全部映射。
|
|
@@ -1370,7 +1390,8 @@ interface SigilSearchRegistry {
|
|
|
1370
1390
|
type SubmitMode = 'send' | 'bash' | 'bash_async' | 'memory';
|
|
1371
1391
|
interface PromptInputProps {
|
|
1372
1392
|
columns?: number;
|
|
1373
|
-
/** RFC-306
|
|
1393
|
+
/** RFC-306 遗留 prop:终端总行数。RFC-311 起光标锚定改由 useMeasuredCursorOrigin
|
|
1394
|
+
* 布局实测(见 computeCursorInline),本 prop 已不再被读取。 */
|
|
1374
1395
|
rows?: number;
|
|
1375
1396
|
placeholder?: string;
|
|
1376
1397
|
/** RFC-294 D7:真禁用(强制升级/确认框占据交互)→ 塌缩为单行提示。 */
|
|
@@ -1378,15 +1399,19 @@ interface PromptInputProps {
|
|
|
1378
1399
|
/** RFC-300 优化:回看态(滚动回看中)——保留完整外观(不塌缩),仅不注册键盘
|
|
1379
1400
|
* (滚动独占)且不渲染光标。区别于 disabled:disabled 塌缩,reviewing 不塌缩。 */
|
|
1380
1401
|
reviewing?: boolean;
|
|
1381
|
-
/**
|
|
1382
|
-
*
|
|
1402
|
+
/** 空闲提示卡片是否可见(卡片在输入框上方占 3+ 行且有 480ms 动画)。
|
|
1403
|
+
* 注意:本 prop **不参与**物理光标 gate——早期曾用于"出现时隐藏光标(残影防护)",
|
|
1404
|
+
* 后确认是 bug(setCursorPosition(undefined) 会把 IME 候选框甩到状态栏下),
|
|
1405
|
+
* 见 cursorActive 处注释;prop 保留仅为外部调用方兼容。 */
|
|
1383
1406
|
idleTipVisible?: boolean;
|
|
1384
1407
|
/** 斜杠命令表(typeahead 数据源) */
|
|
1385
1408
|
commands?: CommandEntry[];
|
|
1386
|
-
/** force=true 表示修饰键+Enter(Alt/Ctrl/Cmd)——上层据此映射为 followUp/排队;plain Enter→steer/send。 */
|
|
1387
1409
|
/**
|
|
1388
1410
|
* 提交回调。
|
|
1389
1411
|
*
|
|
1412
|
+
* `force=true` 表示修饰键+Enter(Alt/Ctrl/Cmd)——上层据此映射为 followUp/排队;
|
|
1413
|
+
* plain Enter → steer/send。
|
|
1414
|
+
*
|
|
1390
1415
|
* 返回 `'rejected'` 表示宿主**拒绝了本次提交**(如 FTUE 未就绪、无可用模型),
|
|
1391
1416
|
* 此时输入框**保留原文**,用户修完配置可直接重发(RFC-326 §6.7:
|
|
1392
1417
|
* "未发出的 prompt 保留在输入框")。返回 void/其它值一律按已受理处理并清空。
|
|
@@ -1447,6 +1472,20 @@ interface PromptInputProps {
|
|
|
1447
1472
|
current: {
|
|
1448
1473
|
fill: (text: string) => void;
|
|
1449
1474
|
append?: (text: string) => void;
|
|
1475
|
+
/**
|
|
1476
|
+
* 当前草稿是否为空(trim 后)。供 App 级数字键分支做前置门——Home 建议 chips /
|
|
1477
|
+
* 能力推荐卡的 `[1]`-`[3]` 是**空输入框专属**快捷键:这些 handler 挂在
|
|
1478
|
+
* `PRIORITY_APP_FALLBACK`(低于 prompt-input 的 FALLBACK 层),而 PromptInput 的
|
|
1479
|
+
* 字符插入路径**不消费**按键(返回 void),于是数字键会一路冒泡下来。若不看草稿
|
|
1480
|
+
* 状态,用户打字到一半按 `1` 会先插入 `1`、再被 `fill()` 整段覆盖成建议文案。
|
|
1481
|
+
*/
|
|
1482
|
+
isEmpty?: () => boolean;
|
|
1483
|
+
/**
|
|
1484
|
+
* 在光标处插入换行(2026-08 键位重设计:Shift+Enter 换行)。供 enter-family
|
|
1485
|
+
* 旁路(onShiftEnter → main.ts ref → 本方法)调用——裸 `\n` 字节在 Ink 键层
|
|
1486
|
+
* 不可识别(与 F1-F12 同为「空 input 无修饰」),必须走命令式桥。
|
|
1487
|
+
*/
|
|
1488
|
+
insertNewline?: () => void;
|
|
1450
1489
|
} | null;
|
|
1451
1490
|
};
|
|
1452
1491
|
/**
|
|
@@ -1705,6 +1744,11 @@ interface TaskState {
|
|
|
1705
1744
|
clipboardText: string;
|
|
1706
1745
|
/** 复制写入两路通道均失败(SignalBar 显示失败兜底信号,非 Toast)。TTL 后归零。 */
|
|
1707
1746
|
clipboardFailed: boolean;
|
|
1747
|
+
/** 失败信号的分诊原因(RFC-486 D3):'tool-missing' = Linux 无剪贴板工具且
|
|
1748
|
+
* OSC52 在此终端无效(SignalBar 给安装指引);'native-hint' = 其他失败
|
|
1749
|
+
* (给终端原生选择修饰键指引);undefined = 无失败态。与 clipboardFailed
|
|
1750
|
+
* 同生命周期(同时置/同时清)。 */
|
|
1751
|
+
clipboardFailedReason: 'tool-missing' | 'native-hint' | undefined;
|
|
1708
1752
|
/** 刚复制成功的短时脉冲态(~1.5s,独立于 clipboardChars 12s TTL)——SignalBar
|
|
1709
1753
|
* 剪贴板信号在此窗口内渲染绿底 + ✓,随后回落为常态 ✓ 已复制 N(同一 12s 窗口内)。
|
|
1710
1754
|
* 纯 React 状态驱动的 Typography backgroundColor,不涉及选区层直写 stdout。 */
|
|
@@ -1769,6 +1813,20 @@ interface TaskState {
|
|
|
1769
1813
|
* 拒绝过某个扩展)。
|
|
1770
1814
|
*/
|
|
1771
1815
|
capabilityDismissed: boolean;
|
|
1816
|
+
/**
|
|
1817
|
+
* 版本更新提示(cli 侧 `checkForUpdate()` 启动异步检查的产出,经
|
|
1818
|
+
* `setUpdateAvailable` 单向下推)。与 Home 首屏 `welcome.updateAvailable`
|
|
1819
|
+
* 同构——后者是启动期静态快照(cli 侧一直传 undefined,从未接线),本字段是
|
|
1820
|
+
* 运行时真源:检测到新版后 Home 版本行右侧渲染常驻横幅
|
|
1821
|
+
* (`update.availableBanner`/`update.forcedBanner`)。`undefined` = 已是最新/
|
|
1822
|
+
* 尚未检出(不渲染横幅)。
|
|
1823
|
+
*/
|
|
1824
|
+
updateAvailable: {
|
|
1825
|
+
latest: string;
|
|
1826
|
+
current: string;
|
|
1827
|
+
newer: boolean;
|
|
1828
|
+
forced: boolean;
|
|
1829
|
+
} | undefined;
|
|
1772
1830
|
}
|
|
1773
1831
|
interface TaskStore {
|
|
1774
1832
|
store: Store<TaskState>;
|
|
@@ -1782,7 +1840,7 @@ interface TaskStore {
|
|
|
1782
1840
|
/**
|
|
1783
1841
|
* 注入副作用钩子(RFC-335 T335-07 前置 P0a)。原 TuiHandle 残留 setter 是"字段 setter
|
|
1784
1842
|
* + 副作用"混合体(如 setForcedUpgrade = setState + syncOverlayRoute + notify)——
|
|
1785
|
-
* 直接变纯 action 会丢副作用。setEffects
|
|
1843
|
+
* 直接变纯 action 会丢副作用。setEffects 把副作用接入口注入(仿 setNotify 的
|
|
1786
1844
|
* post-creation 注入范式),store 层不 import 树外 ref(routerRef/plugin registry),
|
|
1787
1845
|
* 由 main.ts 接线处把闭包函数传进来。未注入时副作用为 no-op(对齐 notify 防过早调用)。
|
|
1788
1846
|
*/
|
|
@@ -1795,7 +1853,7 @@ interface TaskStore {
|
|
|
1795
1853
|
actions: TaskActions;
|
|
1796
1854
|
}
|
|
1797
1855
|
/**
|
|
1798
|
-
* taskStore
|
|
1856
|
+
* taskStore 副作用接入口。注入方(main.ts)把闭包函数绑进来——这些闭包内部可
|
|
1799
1857
|
* `getRouterRef()` 取真 router / `registerPlugin` 调中央 registry,故接口不把 router/
|
|
1800
1858
|
* registry 作为参数传递(保持 store 层不引用任何树外类型)。这是"store 不依赖树外
|
|
1801
1859
|
* 全局"的类型层体现(P0c 先导)。
|
|
@@ -1833,6 +1891,12 @@ interface TaskActions {
|
|
|
1833
1891
|
setCapabilityRecommendations(items: TaskState['capabilityRecommendations']): void;
|
|
1834
1892
|
/** RFC-326 §6.6 / M5-02:用户按 "Not now" 关闭能力推荐卡(本会话瞬态,不持久化)。 */
|
|
1835
1893
|
dismissCapabilityRecommendations(): void;
|
|
1894
|
+
/**
|
|
1895
|
+
* 版本更新提示单向下推(cli 侧 `applyUpdateCheckResult` 调用)。传 null/undefined
|
|
1896
|
+
* 清除(理论上是已升级至最新后的复位路径,当前无调用方——Home 横幅只在值非空时
|
|
1897
|
+
* 渲染,清除可留空)。
|
|
1898
|
+
*/
|
|
1899
|
+
setUpdateAvailable(info: TaskState['updateAvailable']): void;
|
|
1836
1900
|
setPermissionMode(mode: string): void;
|
|
1837
1901
|
/** 强制升级提示(RFC-335 P0a 自 TuiHandle.setForcedUpgrade 下沉):字段 + overlay 路由 + notify。 */
|
|
1838
1902
|
setForcedUpgrade(msg: string | null): void;
|
|
@@ -1863,9 +1927,9 @@ interface BudgetView {
|
|
|
1863
1927
|
totalUsed: number;
|
|
1864
1928
|
/** 可用 token = contextWindow − overhead − messages(三段恒闭合;正常态 = window − totalUsed)。 */
|
|
1865
1929
|
free: number;
|
|
1866
|
-
/** prune 触发线 token
|
|
1930
|
+
/** prune 触发线 token 数(派生自 memory 的 DEFAULT_PRUNE_CONFIG,200K 窗口≈60%)。 */
|
|
1867
1931
|
pruneLine: number;
|
|
1868
|
-
/** compact 触发线 token
|
|
1932
|
+
/** compact 触发线 token 数(派生自 memory 的 DEFAULT_COMPACTION_CONFIG,200K 窗口≈80%)。 */
|
|
1869
1933
|
compactLine: number;
|
|
1870
1934
|
/** 最近一轮 input(非 cache 部分,API 返回)。 */
|
|
1871
1935
|
lastInput: number;
|
|
@@ -2075,8 +2139,8 @@ interface NotificationStore {
|
|
|
2075
2139
|
setPulseSurvey(item: NotificationState['pulseSurvey']): void;
|
|
2076
2140
|
}
|
|
2077
2141
|
/**
|
|
2078
|
-
* notificationStore
|
|
2079
|
-
*
|
|
2142
|
+
* notificationStore 副作用接入口。注入方(main.ts)闭包内取真 router / drainQueue,
|
|
2143
|
+
* 接口不暴露树外类型,与 taskStore 同款。
|
|
2080
2144
|
*/
|
|
2081
2145
|
interface NotificationStoreEffects {
|
|
2082
2146
|
/** paused 由 true→false 时尝试出队(原 inline 的 drainQueue())。 */
|
|
@@ -2282,6 +2346,25 @@ interface ExtensionDetailRequest {
|
|
|
2282
2346
|
/** 执行某控制按钮(value)。 */
|
|
2283
2347
|
onAction: (value: string) => void;
|
|
2284
2348
|
onClose: () => void;
|
|
2349
|
+
/**
|
|
2350
|
+
* RFC-401 M3:插件配置表单数据。提供时在 DataList 之后渲染配置字段展示,
|
|
2351
|
+
* 并在 actions 末尾追加"编辑配置"按钮(触发 onEditConfig 回调)。
|
|
2352
|
+
* 编辑 UI 由宿主侧独立实现(经 updatePluginConfig 写入 PluginConfigStore)。
|
|
2353
|
+
*/
|
|
2354
|
+
configForm?: {
|
|
2355
|
+
/** manifest 声明的 config schema 片段(JSON Schema 子集,含 properties/type/description)。 */schema: {
|
|
2356
|
+
type?: string;
|
|
2357
|
+
description?: string;
|
|
2358
|
+
properties?: Record<string, {
|
|
2359
|
+
type?: string;
|
|
2360
|
+
description?: string;
|
|
2361
|
+
default?: unknown;
|
|
2362
|
+
enum?: unknown[];
|
|
2363
|
+
}>;
|
|
2364
|
+
}; /** 当前配置值(合并 manifest 默认值 + PluginConfigStore 持久化值后)。 */
|
|
2365
|
+
values: Record<string, unknown>; /** 点击"编辑配置"按钮时调用(宿主侧打开编辑 UI 或直接写入)。 */
|
|
2366
|
+
onEditConfig?: () => void;
|
|
2367
|
+
};
|
|
2285
2368
|
}
|
|
2286
2369
|
//#endregion
|
|
2287
2370
|
//#region src/dialogs/FileViewerDialog.d.ts
|
|
@@ -2760,6 +2843,12 @@ type TuiStreamEvent = {
|
|
|
2760
2843
|
notify?: PerfNotifySnapshot;
|
|
2761
2844
|
indicatorLevel?: 'healthy' | 'warning' | 'critical';
|
|
2762
2845
|
pluginMetrics?: PluginMetricResult[];
|
|
2846
|
+
} | {
|
|
2847
|
+
kind: 'status';
|
|
2848
|
+
session?: StatusSessionSnapshot;
|
|
2849
|
+
memory?: PerfMemorySnapshot;
|
|
2850
|
+
notify?: PerfNotifySnapshot;
|
|
2851
|
+
pluginMetrics?: PluginMetricResult[];
|
|
2763
2852
|
} | ({
|
|
2764
2853
|
kind: 'compactionLog';
|
|
2765
2854
|
entryKind: 'compact';
|
|
@@ -2780,10 +2869,13 @@ type TuiStreamEvent = {
|
|
|
2780
2869
|
* 提交意图(前端无关语义层):cli 据此决定如何处理一次提交。
|
|
2781
2870
|
* - 'send' : 起新回合(空闲时的普通提交,或斜杠命令分发)。
|
|
2782
2871
|
* - 'steer' : agent 运行中时注入当前回合(session.steer)。
|
|
2872
|
+
* - 'action': 纯 action chip([@model:...]/[@effort:...] 单独提交)——切换模型/档位的
|
|
2873
|
+
* 命令语义,不走 busy 分流、不注入对话流(终局设计 2026-08-14,见
|
|
2874
|
+
* submit-routing.ts isPureActionChip)。
|
|
2783
2875
|
* followUp/排队 由 TUI 自身的 state.queued 承载(空闲即出队),不经此枚举。
|
|
2784
2876
|
* 后续移植 GUI:同一 intent 层,GUI 直接绑 Enter→steer / Cmd+Enter→followUp,语义零改。
|
|
2785
2877
|
*/
|
|
2786
|
-
type SubmitIntent = 'send' | 'steer';
|
|
2878
|
+
type SubmitIntent = 'send' | 'steer' | 'action';
|
|
2787
2879
|
/**
|
|
2788
2880
|
* RFC-148 M3:模态对话框判别联合——收敛原 TuiHandle 9 个独立 open* 方法
|
|
2789
2881
|
* (openInfo/openPermissions/openContext/openMemory/openSelect/openExtensionDetail/
|
|
@@ -2872,13 +2964,6 @@ interface ProgressDialogProps {
|
|
|
2872
2964
|
/** 四个阶段标签 */
|
|
2873
2965
|
phases: string[];
|
|
2874
2966
|
}
|
|
2875
|
-
/** Setup 向导弹窗请求(openModal({kind:'wizard',...}) 入参)。 */
|
|
2876
|
-
/**
|
|
2877
|
-
* OAuth 流程句柄——向导内嵌授权,不跳转独立面板。
|
|
2878
|
-
* RFC-274 M2:补 `code`/`instructions`(对齐真实 `OAuthInfo` 字段),供等待态渲染
|
|
2879
|
-
* device-flow 场景(有 code 展示设备码 UI,无 code 展示纯浏览器 UI)——不在选项列表层
|
|
2880
|
-
* 区分 pkce/device-flow,只在这个等待态句柄层区分。
|
|
2881
|
-
*/
|
|
2882
2967
|
/**
|
|
2883
2968
|
* OAuth 轮询失败分类(RFC-326 §6.3)——决定 UI 给出哪个主 CTA。
|
|
2884
2969
|
* - `network`:连不上授权服务(含代理不通)→ 主 CTA 为「打开代理设置」
|
|
@@ -2893,6 +2978,12 @@ type OAuthPollResult = 'pending' | 'done' | 'error' | {
|
|
|
2893
2978
|
status: 'error';
|
|
2894
2979
|
reason: OAuthFailureReason;
|
|
2895
2980
|
};
|
|
2981
|
+
/**
|
|
2982
|
+
* OAuth 流程句柄——向导内嵌授权,不跳转独立面板。
|
|
2983
|
+
* RFC-274 M2:补 `code`/`instructions`(对齐真实 `OAuthInfo` 字段),供等待态渲染
|
|
2984
|
+
* device-flow 场景(有 code 展示设备码 UI,无 code 展示纯浏览器 UI)——不在选项列表层
|
|
2985
|
+
* 区分 pkce/device-flow,只在这个等待态句柄层区分。
|
|
2986
|
+
*/
|
|
2896
2987
|
interface OAuthHandle {
|
|
2897
2988
|
authorizationUrl: string;
|
|
2898
2989
|
/** 设备码流程的 user code(`OAuthInfo.code`);pkce 浏览器流程通常为空。 */
|
|
@@ -2920,6 +3011,7 @@ interface OAuthHandle {
|
|
|
2920
3011
|
*/
|
|
2921
3012
|
openAgain?: () => void;
|
|
2922
3013
|
}
|
|
3014
|
+
/** Setup 向导弹窗请求(openModal({kind:'wizard',...}) 入参)。 */
|
|
2923
3015
|
interface WizardRequest {
|
|
2924
3016
|
kind: 'wizard';
|
|
2925
3017
|
title: string;
|
|
@@ -2975,7 +3067,7 @@ interface WizardRequest {
|
|
|
2975
3067
|
value: string;
|
|
2976
3068
|
detail?: string;
|
|
2977
3069
|
recommended?: boolean;
|
|
2978
|
-
unusableReason?: 'unauthenticated' | 'oauth-429-risk';
|
|
3070
|
+
unusableReason?: 'unauthenticated' | 'oauth-429-risk' | 'intranet-unreachable';
|
|
2979
3071
|
}>;
|
|
2980
3072
|
/**
|
|
2981
3073
|
* 重新计算 Step 2 模型选项(RFC-341 修复)。登录成功(API key 提交成功 / OAuth
|
|
@@ -2987,7 +3079,7 @@ interface WizardRequest {
|
|
|
2987
3079
|
value: string;
|
|
2988
3080
|
detail?: string;
|
|
2989
3081
|
recommended?: boolean;
|
|
2990
|
-
unusableReason?: 'unauthenticated' | 'oauth-429-risk';
|
|
3082
|
+
unusableReason?: 'unauthenticated' | 'oauth-429-risk' | 'intranet-unreachable';
|
|
2991
3083
|
}>>;
|
|
2992
3084
|
examplePrompts: readonly string[];
|
|
2993
3085
|
/** 信任步骤(Step 1)中显示的工作区路径。 */
|
|
@@ -3108,7 +3200,7 @@ type QuestionsAnswer = {
|
|
|
3108
3200
|
*
|
|
3109
3201
|
* 不收编 toggleEditedFiles(全仓 grep 零调用点,见 findings-backlog.md 死代码候选)。
|
|
3110
3202
|
*/
|
|
3111
|
-
type PaneName = 'history' | 'backgroundTasks' | 'draftPane' | 'queuePane' | 'notifications' | 'schedulePane' | '
|
|
3203
|
+
type PaneName = 'history' | 'backgroundTasks' | 'draftPane' | 'queuePane' | 'notifications' | 'schedulePane' | 'status' | 'cacheStats' | 'compactionLog' | 'gallery' | 'proxy' | 'prompts';
|
|
3112
3204
|
interface TuiOptions {
|
|
3113
3205
|
stdin: NodeJS.ReadStream;
|
|
3114
3206
|
stdout: NodeJS.WriteStream;
|
|
@@ -3220,7 +3312,6 @@ interface TuiOptions {
|
|
|
3220
3312
|
/** RFC-089 M8 spike:Ink ConcurrentRoot(键击 DiscreteEventPriority 插队 + 可中断 reconcile)。
|
|
3221
3313
|
* 缺省读 OTTO_TUI_CONCURRENT=1;A/B 稳定后再定默认。 */
|
|
3222
3314
|
concurrent?: boolean;
|
|
3223
|
-
/** intent='steer' 时 cli 应注入当前运行回合(session.steer)而非起新回合;缺省/'send' 走原路径。 */
|
|
3224
3315
|
/**
|
|
3225
3316
|
* 提交回调(fire-and-forget)。
|
|
3226
3317
|
*
|
|
@@ -3285,11 +3376,11 @@ interface TuiOptions {
|
|
|
3285
3376
|
*/
|
|
3286
3377
|
onA2uiAction?: (componentId: string, action: string, payload?: Record<string, unknown>) => void;
|
|
3287
3378
|
/**
|
|
3288
|
-
*
|
|
3379
|
+
* Status 面板内手动刷新键(r)触发——CLI 侧重新执行 `handleStatus` 的核心
|
|
3289
3380
|
* 采集逻辑(内存/渲染/插件三类数据源),回填后面板自动重渲(数据经 setPerf* 系列
|
|
3290
3381
|
* TuiHandle 方法喂回,不由本回调直接返回值)。手动触发,不做自动轮询(对齐 D7)。
|
|
3291
3382
|
*/
|
|
3292
|
-
|
|
3383
|
+
onStatusRefresh?: () => void;
|
|
3293
3384
|
/** /tasks 面板:k 杀选中后台进程。 */
|
|
3294
3385
|
onBackgroundKill?: (id: string) => void;
|
|
3295
3386
|
/** /tasks 面板:o 看选中后台进程输出(cli 据此启动 logPath tail 轮询)。 */
|
|
@@ -3449,8 +3540,10 @@ interface TuiPendingHandle {
|
|
|
3449
3540
|
setPendingEcho(text: string, mode: string): void;
|
|
3450
3541
|
/** 模型已接起首字节,关闭 ESC 撤回窗口(pending 转正)。 */
|
|
3451
3542
|
clearPendingEcho(): void;
|
|
3452
|
-
/** ESC 撤回 pending 消息——从对话流移除最后一条 user echo +
|
|
3453
|
-
|
|
3543
|
+
/** ESC 撤回 pending 消息——从对话流移除最后一条 user echo + 清 pendingEcho。
|
|
3544
|
+
* 返回是否真的撤回了(false = pendingEcho 已空/已转正,调用方不应回填输入框——否则
|
|
3545
|
+
* 消息已留在对话流却把文本再塞回输入框,制造"撤回失败但输入框有内容"的重复)。 */
|
|
3546
|
+
withdrawPendingEcho(): boolean;
|
|
3454
3547
|
/** RFC-337 D3:注入一条运行中追加(steer)的待定 echo(延迟 commit,live 区渲染)。 */
|
|
3455
3548
|
setPendingSteer(text: string, id: string): void;
|
|
3456
3549
|
/** RFC-337 D3:steer 被模型消费 → 转正 commit 到 scrollback(此后不再可撤回)。 */
|
|
@@ -3565,7 +3658,8 @@ interface TuiEngineHandle {
|
|
|
3565
3658
|
mode: SubmitMode;
|
|
3566
3659
|
} | undefined;
|
|
3567
3660
|
/**
|
|
3568
|
-
* 把一条提交塞进"回合之后"队列(state.queued,与
|
|
3661
|
+
* 把一条提交塞进"回合之后"队列(state.queued,与 Option/Ctrl+Enter 排队同一队列),
|
|
3662
|
+
* 引擎空闲时自动出队起新回合。
|
|
3569
3663
|
* 供 cli 兜底:若消息因镜像态去同步漏到"引擎仍忙却走起新回合"的路,按此回落到回合后队列,
|
|
3570
3664
|
* 而非撞裸 prompt() 抛错。出队由 drainQueue 以引擎真·忙判定为闸,不会在忙时立即回拉打转。
|
|
3571
3665
|
*/
|
|
@@ -3618,8 +3712,14 @@ interface TuiMessagesHandle {
|
|
|
3618
3712
|
getEditedFiles(): EditedFileEntry[];
|
|
3619
3713
|
}
|
|
3620
3714
|
interface TuiLifecycleHandle {
|
|
3621
|
-
/**
|
|
3622
|
-
|
|
3715
|
+
/**
|
|
3716
|
+
* 停止 TUI(卸载 Ink 渲染树 + 清理平台副作用)。
|
|
3717
|
+
*
|
|
3718
|
+
* 2026-08-14 退出乱码 P0:改为 **async**——内含 OSC 11 吸收窗(200ms),在恢复
|
|
3719
|
+
* 终端回显前消费在途回复。调用方**应当 await**(否则吸收窗可能未完成即被
|
|
3720
|
+
* 后续 process.exit 截断);不 await 时由 3s 兜底/进程 exit 兜底覆盖(best-effort)。
|
|
3721
|
+
*/
|
|
3722
|
+
stop(): Promise<void>;
|
|
3623
3723
|
/** 清屏并重置会话界面状态(/clear):
|
|
3624
3724
|
* - 清终端(ANSI \x1B[2J\x1B[H)和 scrollback 状态
|
|
3625
3725
|
* - 清除任务面板、委托面板、动态区状态
|
|
@@ -4025,5 +4125,5 @@ declare function Tabable({
|
|
|
4025
4125
|
children
|
|
4026
4126
|
}: TabableProps): React.ReactElement;
|
|
4027
4127
|
//#endregion
|
|
4028
|
-
export { ExtensionMenuContribution as $,
|
|
4029
|
-
//# sourceMappingURL=Tabable-
|
|
4128
|
+
export { ExtensionMenuContribution as $, ToolCompletionMessage as $n, subagentEntryStatus as $t, RemoteSessionSnapshot as A, ThemeRegistry as An, SigilPrefix as At, createSelectState as B, THEME as Bn, navigateSuggestions as Bt, TuiHandle as C, Risk as Cn, formatProviderUsageLimitTypeFull as Ct, WizardRequest as D, ThemePresetInput as Dn, SubmitMode as Dt, TuiStreamEvent as E, ThemePreset as En, PromptInput as Et, MessageStore as F, PANEL_BORDER as Fn, TypeaheadState as Ft, MemoryDialog as G, MessageContent as Gn, PasteStoreResidencySource as Gt, NotifyScheduler as H, A2uiContent as Hn, PasteSnapshot as Ht, Question as I, FIGURES as In, applySlashCompletion as It, MemoryEntrySource as J, StopReason as Jn, ObservationLike as Jt, MemoryDialogProps as K, PendingPermission as Kn, createPasteStore as Kt, SelectOption as L, FiguresMap as Ln, createCommandRegistry as Lt, SessionDataTarget as M, LAYOUT as Mn, CommandEntry as Mt, SessionTransport as N, SPACING as Nn, CommandRegistry as Nt, AttachDataSourceDeps as O, ThemePresetSelection as On, SigilEntry as Ot, createAttachSessionDataSource as P, DIALOG_BORDER as Pn, SlashNavigateAction as Pt, ExtensionListEntry as Q, ToolCall as Qn, observationRow as Qt, SelectOptions as R, PALETTE as Rn, extractSlashPrefix as Rt, SubagentContext as S, LangMode as Sn, ProviderUsageBadgeItem as St, TuiPanelRegistration as T, ThemeAppearance as Tn, QueuedCommands as Tt, NotifyStats as U, AssistantMessage as Un, PasteSnapshotEntry as Ut, A2uiButtonInfo as V, ThemeColors as Vn, CreatePasteStoreOptions as Vt, makeNotifyScheduler as W, ChatMessage as Wn, PasteStore as Wt, InfoDialogAction as X, TextContent as Xn, formatTurnTimeline as Xt, InfoDialog as Y, StreamEvent as Yn, formatAgentDiagnosticsText as Yt, InfoDialogProps as Z, ThinkingContent as Zn, observationLiveFields as Zt, ModalRequestInput as _, detectLanguage as _n, createBudgetStore as _t, TabableContextValue as a, RateLimitType as an, ButtonProps as at, PluginRegistration as b, t as bn, HomeProps as bt, TabableRegistry as c, KeyBindingPredicate as cn, RegisteredRenderer as ct, useTabableContext as d, DataListProps as dn, NotificationStore as dt, subagentRestoreFields as en, ToolMessage as er, ExtensionsListRequest as et, ConfirmDialog as f, DataListRow as fn, ProxyStore as ft, DraftItemView as g, useAppState as gn, BudgetView as gt, ConfirmRequest as h, Store as hn, BudgetStore as ht, Tabable as i, ErrorRetryItem as in, ButtonColor as it, SessionDataSource as j, createBuiltinThemeRegistry as jn, SigilSearchRegistry as jt, RemoteSessionEvent as k, ThemePresetSource as kn, SigilKind as kt, UseTabableOptions as l, DataList as ln, clearPluginRenderers as lt, AlertRequest as m, StatusStore as mn, BudgetState as mt, RouteContext as n, ErrorRetryAction as nn, ExtensionDetailRequest as nt, TabableEntry as o, ContextStore as on, ButtonVariant as ot, ConfirmDialogProps as p, DataListTone as pn, CacheStore as pt, MemoryEntry as q, PulseSurveyItem as qn, Completer as qt, RouteContextValue as r, ErrorRetryActionKind as rn, Button as rt, TabableProps as s, OnboardingResult as sn, PluginMessageRenderer as st, FocusStyle as t, EditedFileEntry as tn, UserMessage as tr, ExtensionDetailAction as tt, useTabable as u, DataListEntry as un, registerPluginRenderers as ut, ModalRequestVoid as v, i18next as vn, TaskStore as vt, TuiOptions as w, MarkdownThemeOverrides as wn, isUsingOverage as wt, PromptRequest as x, Lang as xn, SessionListItem as xt, PermissionDecision as y, initI18n as yn, Home as yt, SelectState as z, STATUS as zn, getCommandSuggestions as zt };
|
|
4129
|
+
//# sourceMappingURL=Tabable-BRz398OB.d.ts.map
|