@x-otto/tui 0.0.1-alpha.2 → 0.0.1-alpha.21

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.
@@ -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` 可导出全量);仅已废弃的 `OTTO_SESSION_BLOB=1`
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: "↕"; /** 已编辑文件标记 ✎(RFC-309 SummaryStrip) */
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,收敛为本单一常量(语义分层由 focus-registry band 承载,边框层
486
- * 不再重复编码)。将来若需按层级再分化边框,以新 RFC 重新设计,不保留投机性 API。
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/perf-store.d.ts
626
+ //#region src/stores/status-store.d.ts
614
627
  /** 内存快照——字段对齐 `@x-otto/coding` 的 `MemorySample`(不直接 import 跨包类型,
615
- * tui 包不依赖 coding 包,由 cli 层组装时结构对齐即可,见 RFC-116 D2)。 */
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`(M2 里程碑填充,M1 阶段为 undefined)。 */
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):原 RFC-116 D2 的手动镜像定义已收口——类型本体上移
634
- * `@x-otto/interchange`(coding 生产侧同源),此处别名保持 tui 内既有消费方命名兼容。
646
+ * RFC-118 小修(S10):类型本体上移 `@x-otto/interchange`,此处别名保持兼容。
635
647
  */
636
648
  type PluginMetricResult = _$_x_otto_interchange0.PluginPerfMetricResult;
637
- interface PerfPaneState {
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
- /** 内存采样历史(RFC-183 M4:PerfPane sparkline 趋势,环形窗口 ≤32 点,heapUsed 字节)。 */
666
+ /** 内存采样历史(sparkline 趋势,环形窗口 ≤32 点,heapUsed 字节)。 */
640
667
  memoryHistory: number[];
641
- /** M1 阶段恒为 undefined(渲染区占位);M2 起由 CLI 层喂入真实值。 */
642
668
  notify: PerfNotifySnapshot | undefined;
643
669
  /**
644
- * RFC-116 M3:footer 常驻指示器的实时分级——与 `memory`(面板手动刷新快照)解耦,
645
- * 因为 footer 需要"异常时才浮现、健康时零宽度"的常驻感知(不依赖用户是否打开过
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 PerfStore {
658
- store: Store<PerfPaneState>;
659
- /** /clear 会话重置——全字段回初始值(indicatorLevel 回 'healthy' 保守假设)。
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 喂入最新渲染健康度快照(M2 起使用;M1 阶段调用方不传,保持 undefined)。 */
685
+ /** CLI 喂入最新渲染健康度快照。 */
666
686
  setNotify(snapshot: PerfNotifySnapshot): void;
667
- /** CLI 喂入 footer 常驻指示器的最新分级(`MemoryGovernor.onLevelChange` 驱动)。 */
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
@@ -828,6 +848,34 @@ interface ErrorRetryItem {
828
848
  intervalSeconds?: number;
829
849
  }
830
850
  //#endregion
851
+ //#region src/views/recovery-card.d.ts
852
+ /**
853
+ * recovery-card.ts — RFC-326 §6.7:Home 常驻恢复卡的纯呈现逻辑。
854
+ *
855
+ * 问题:用户 Esc 退出向导后,Home 上**没有任何**"还差什么"的线索——配置状态只
856
+ * 活在一个转瞬即逝的 toast 里,之后就只能靠用户记住 `/setup`。§6.7 要求把它变成
857
+ * 常驻可见的事实:每个未就绪阶段给一个明确的主行动。
858
+ *
859
+ * 本模块只做「阶段 → 文案键 + 单一 CTA」的映射与窄屏降级,不碰渲染:
860
+ * - 纯函数,便于穷举每个阶段的产物;
861
+ * - 文案返回 **i18n key** 而非成品字符串,避免纯逻辑层耦合语言资源。
862
+ *
863
+ * 设计约束(§6.7 明文):
864
+ * - **单一 CTA**:每张卡只给一个推荐动作,不并列 `/login` `/model` `/plugin`
865
+ * 让新用户猜(§4 原则 4)。
866
+ * - **常态 ≤4 行**、窄屏(<80 列)降为两行标题+CTA。
867
+ * - 卡片走文档流,不得占用 ChatInputArea / StatusBar 的稳定行位——这条由渲染层
868
+ * 保证(放在 Home 主区域内),本模块只负责把行数压在预算内。
869
+ */
870
+ /** 与 `FtueStage` 同构;此处独立声明避免 tui 反向依赖 cli 的 ftue 模块。 */
871
+ type RecoveryStage = 'provider' | 'authentication' | 'model' | 'ready' | 'first-prompt';
872
+ /** 单条能力推荐的展示视图(纯数据,与 cli 侧 `CapabilityRecommendation` 同构)。 */
873
+ interface CapabilityCardItem {
874
+ extensionId: string;
875
+ /** 推荐理由文案 key(如 "Detected a web app")。 */
876
+ reasonKey: string;
877
+ }
878
+ //#endregion
831
879
  //#region src/panes/EditedFilesPane.d.ts
832
880
  interface EditedFileEntry {
833
881
  /** 文件路径(相对项目根或绝对) */
@@ -1205,7 +1253,7 @@ interface PasteStore {
1205
1253
  /** 当前 store 占用字节数(LRU 容量判据的另一维度)。 */
1206
1254
  readonly bytesUsed: number;
1207
1255
  /** 累计驱逐次数(LRU 超限淘汰 + 内存紧张分级用完即释放,两者都计数)。纯计数器,不驱动
1208
- * 任何行为,供未来 `/perf` 面板或调试场景观测。 */
1256
+ * 任何行为,供未来 `/status` 面板或调试场景观测。 */
1209
1257
  readonly evictionCount: number;
1210
1258
  /**
1211
1259
  * 清空全部映射。
@@ -1248,6 +1296,14 @@ interface CommandEntry {
1248
1296
  * 切换导致列表位置跳动。
1249
1297
  */
1250
1298
  sortKey?: string;
1299
+ /**
1300
+ * 已弃用命令(RFC-369):该命令名已收敛为某父命令的子命令,仅作过渡期别名保留。
1301
+ * 斜杠面板据此弱化展示(描述前缀标注),使用户在选中时就能看到迁移目标。
1302
+ *
1303
+ * 同 `aliases` 的前车之鉴:CLI 侧目录(`SLASH_COMMANDS`)标了 `deprecated`,本接口
1304
+ * 若无对应字段,值会在 CLI→TUI 注册映射时被静默丢弃,标记形同虚设。
1305
+ */
1306
+ deprecated?: boolean;
1251
1307
  }
1252
1308
  type SlashNavigateAction = 'prev' | 'next' | 'accept' | 'dismiss';
1253
1309
  interface TypeaheadState {
@@ -1307,7 +1363,7 @@ declare function applySlashCompletion(input: string, cursorOffset: number, comma
1307
1363
  * 若 coding 侧契约变更,需同步此镜像(两处保持一致是 R3 解耦的成本)。
1308
1364
  */
1309
1365
  type SigilPrefix = '#' | '@';
1310
- type SigilKind = 'hashtag' | 'file' | 'person' | 'agent' | 'skill' | 'mcp' | 'plugin' | 'model' | 'resource' | 'shortcut';
1366
+ type SigilKind = 'hashtag' | 'file' | 'person' | 'agent' | 'skill' | 'mcp' | 'plugin' | 'model' | 'resource' | 'shortcut' | 'effort';
1311
1367
  /** 面板条目:label 展示 / value 替换,严格分离(R2)。 */
1312
1368
  interface SigilEntry {
1313
1369
  label: string;
@@ -1334,7 +1390,8 @@ interface SigilSearchRegistry {
1334
1390
  type SubmitMode = 'send' | 'bash' | 'bash_async' | 'memory';
1335
1391
  interface PromptInputProps {
1336
1392
  columns?: number;
1337
- /** RFC-306 后修复(光标锚定):终端总行数——用于把光标锚定到输入行(Ink 输出原点相对坐标)。 */
1393
+ /** RFC-306 遗留 prop:终端总行数。RFC-311 起光标锚定改由 useMeasuredCursorOrigin
1394
+ * 布局实测(见 computeCursorInline),本 prop 已不再被读取。 */
1338
1395
  rows?: number;
1339
1396
  placeholder?: string;
1340
1397
  /** RFC-294 D7:真禁用(强制升级/确认框占据交互)→ 塌缩为单行提示。 */
@@ -1342,15 +1399,19 @@ interface PromptInputProps {
1342
1399
  /** RFC-300 优化:回看态(滚动回看中)——保留完整外观(不塌缩),仅不注册键盘
1343
1400
  * (滚动独占)且不渲染光标。区别于 disabled:disabled 塌缩,reviewing 不塌缩。 */
1344
1401
  reviewing?: boolean;
1345
- /** 空闲提示卡片是否可见——卡片在输入框上方占 3+ 行且有 480ms 动画,
1346
- * 出现时物理光标隐藏(光标残影防护)。 */
1402
+ /** 空闲提示卡片是否可见(卡片在输入框上方占 3+ 行且有 480ms 动画)。
1403
+ * 注意:本 prop **不参与**物理光标 gate——早期曾用于"出现时隐藏光标(残影防护)",
1404
+ * 后确认是 bug(setCursorPosition(undefined) 会把 IME 候选框甩到状态栏下),
1405
+ * 见 cursorActive 处注释;prop 保留仅为外部调用方兼容。 */
1347
1406
  idleTipVisible?: boolean;
1348
1407
  /** 斜杠命令表(typeahead 数据源) */
1349
1408
  commands?: CommandEntry[];
1350
- /** force=true 表示修饰键+Enter(Alt/Ctrl/Cmd)——上层据此映射为 followUp/排队;plain Enter→steer/send。 */
1351
1409
  /**
1352
1410
  * 提交回调。
1353
1411
  *
1412
+ * `force=true` 表示修饰键+Enter(Alt/Ctrl/Cmd)——上层据此映射为 followUp/排队;
1413
+ * plain Enter → steer/send。
1414
+ *
1354
1415
  * 返回 `'rejected'` 表示宿主**拒绝了本次提交**(如 FTUE 未就绪、无可用模型),
1355
1416
  * 此时输入框**保留原文**,用户修完配置可直接重发(RFC-326 §6.7:
1356
1417
  * "未发出的 prompt 保留在输入框")。返回 void/其它值一律按已受理处理并清空。
@@ -1411,6 +1472,20 @@ interface PromptInputProps {
1411
1472
  current: {
1412
1473
  fill: (text: string) => void;
1413
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;
1414
1489
  } | null;
1415
1490
  };
1416
1491
  /**
@@ -1562,28 +1637,6 @@ interface RegisteredStatusWidget {
1562
1637
  order?: number;
1563
1638
  }
1564
1639
  //#endregion
1565
- //#region src/views/recovery-card.d.ts
1566
- /**
1567
- * recovery-card.ts — RFC-326 §6.7:Home 常驻恢复卡的纯呈现逻辑。
1568
- *
1569
- * 问题:用户 Esc 退出向导后,Home 上**没有任何**"还差什么"的线索——配置状态只
1570
- * 活在一个转瞬即逝的 toast 里,之后就只能靠用户记住 `/setup`。§6.7 要求把它变成
1571
- * 常驻可见的事实:每个未就绪阶段给一个明确的主行动。
1572
- *
1573
- * 本模块只做「阶段 → 文案键 + 单一 CTA」的映射与窄屏降级,不碰渲染:
1574
- * - 纯函数,便于穷举每个阶段的产物;
1575
- * - 文案返回 **i18n key** 而非成品字符串,避免纯逻辑层耦合语言资源。
1576
- *
1577
- * 设计约束(§6.7 明文):
1578
- * - **单一 CTA**:每张卡只给一个推荐动作,不并列 `/login` `/model` `/plugin`
1579
- * 让新用户猜(§4 原则 4)。
1580
- * - **常态 ≤4 行**、窄屏(<80 列)降为两行标题+CTA。
1581
- * - 卡片走文档流,不得占用 ChatInputArea / StatusBar 的稳定行位——这条由渲染层
1582
- * 保证(放在 Home 主区域内),本模块只负责把行数压在预算内。
1583
- */
1584
- /** 与 `FtueStage` 同构;此处独立声明避免 tui 反向依赖 cli 的 ftue 模块。 */
1585
- type RecoveryStage = 'provider' | 'authentication' | 'model' | 'ready' | 'first-prompt';
1586
- //#endregion
1587
1640
  //#region src/views/Home.d.ts
1588
1641
  interface SessionListItem {
1589
1642
  id: string;
@@ -1621,6 +1674,22 @@ interface HomeProps {
1621
1674
  * 省略/ready 时不渲染,老用户零干扰。
1622
1675
  */
1623
1676
  ftueStage?: RecoveryStage;
1677
+ /**
1678
+ * RFC-326 §6.5 / M4-02:项目感知首 prompt 建议(已本地化成品文案)。只在
1679
+ * `ftueStage` 为 `undefined`(已就绪)或 `'ready'` 时渲染——`'first-prompt'`
1680
+ * 阶段(已发过第一条)与 provider/authentication/model 三个未就绪阶段都不显示:
1681
+ * 前者是"不该再打扰",后者是"该显示恢复卡而非建议"(二者本就互斥于
1682
+ * `deriveRecoveryCard` 的判定,此处只需再排除 `'first-prompt'`)。
1683
+ */
1684
+ promptSuggestions?: readonly string[];
1685
+ /**
1686
+ * RFC-326 §6.6 / M5-02:项目能力推荐(已本地化成品文案由渲染层用 reasonKey 取
1687
+ * i18next.t,本组件不直接接触文案原文)。只在 `ftueStage === 'first-prompt'`
1688
+ * 且未被本会话 dismiss 时显示,见 `deriveCapabilityCard`。
1689
+ */
1690
+ capabilityRecommendations?: readonly CapabilityCardItem[];
1691
+ /** RFC-326 §6.6 / M5-02:本会话是否已关闭能力推荐卡("Not now")。 */
1692
+ capabilityDismissed?: boolean;
1624
1693
  /** RFC-234 P2-b:多会话列表。未提供时不渲染。 */
1625
1694
  sessionList?: readonly SessionListItem[];
1626
1695
  /** RFC-234 P2-b:选择会话回调。 */
@@ -1643,6 +1712,9 @@ declare function Home({
1643
1712
  updateAvailable,
1644
1713
  weather: _weather,
1645
1714
  ftueStage,
1715
+ promptSuggestions,
1716
+ capabilityRecommendations,
1717
+ capabilityDismissed,
1646
1718
  shadow
1647
1719
  }: HomeProps): React.ReactElement;
1648
1720
  //#endregion
@@ -1672,6 +1744,10 @@ interface TaskState {
1672
1744
  clipboardText: string;
1673
1745
  /** 复制写入两路通道均失败(SignalBar 显示失败兜底信号,非 Toast)。TTL 后归零。 */
1674
1746
  clipboardFailed: boolean;
1747
+ /** 刚复制成功的短时脉冲态(~1.5s,独立于 clipboardChars 12s TTL)——SignalBar
1748
+ * 剪贴板信号在此窗口内渲染绿底 + ✓,随后回落为常态 ✓ 已复制 N(同一 12s 窗口内)。
1749
+ * 纯 React 状态驱动的 Typography backgroundColor,不涉及选区层直写 stdout。 */
1750
+ clipboardJustCopied: boolean;
1675
1751
  queued: QueuedItem[];
1676
1752
  pendingPermission: unknown | null;
1677
1753
  backgroundOutput: DelegateOutputView | null;
@@ -1709,6 +1785,43 @@ interface TaskState {
1709
1785
  sessionList: readonly SessionListItem[];
1710
1786
  /** 当前会话标题(对话中 SessionHeader 展示)——cli 侧 resolveSessionTitle 单一真源下推。 */
1711
1787
  sessionTitle: string;
1788
+ /**
1789
+ * RFC-326 M3-01:FTUE 精确阶段(provider/authentication/model/ready/first-prompt),
1790
+ * 由 cli 侧 `FtueController.refresh()` 的 `FtueSnapshot.stage` 单向下推。
1791
+ * `undefined` = 尚未收到过快照(如启动早期、非交互模式)——Home 的恢复卡回退到
1792
+ * `needsSetup` 布尔判断「要不要出卡」,但不虚构具体阶段(避免 provider 步误显示成
1793
+ * model 步文案)。与 `RecoveryStage` 同构(tui 侧独立声明,见 views/recovery-card.ts
1794
+ * 头注释,避免 tui 反向依赖 cli 的 ftue 模块)。
1795
+ */
1796
+ ftueStage: RecoveryStage | undefined;
1797
+ /**
1798
+ * RFC-326 §6.6 / M5-02:项目能力推荐列表(cli 侧 `matchCapabilities()` 的产出,
1799
+ * 已下推)。空数组 = 尚未计算/无匹配,与 `deriveCapabilityCard` 的"空则不显示"
1800
+ * 语义天然一致,无需额外 undefined 状态。
1801
+ */
1802
+ capabilityRecommendations: readonly CapabilityCardItem[];
1803
+ /**
1804
+ * 用户是否已在本会话内关闭过能力推荐卡(按过 "Not now")。**瞬态、不持久化**——
1805
+ * 与 `wizard_dont_show_again` 不同语义:那是"不再自动弹向导"的跨会话意图,这里
1806
+ * 只是"这次会话别再提",下次启动仍会按新的项目特征重新评估是否推荐(§6.6 未要求
1807
+ * 持久化 dismiss,且能力推荐本身就该"每次打开项目独立判断",而非记住用户永久
1808
+ * 拒绝过某个扩展)。
1809
+ */
1810
+ capabilityDismissed: boolean;
1811
+ /**
1812
+ * 版本更新提示(cli 侧 `checkForUpdate()` 启动异步检查的产出,经
1813
+ * `setUpdateAvailable` 单向下推)。与 Home 首屏 `welcome.updateAvailable`
1814
+ * 同构——后者是启动期静态快照(cli 侧一直传 undefined,从未接线),本字段是
1815
+ * 运行时真源:检测到新版后 Home 版本行右侧渲染常驻横幅
1816
+ * (`update.availableBanner`/`update.forcedBanner`)。`undefined` = 已是最新/
1817
+ * 尚未检出(不渲染横幅)。
1818
+ */
1819
+ updateAvailable: {
1820
+ latest: string;
1821
+ current: string;
1822
+ newer: boolean;
1823
+ forced: boolean;
1824
+ } | undefined;
1712
1825
  }
1713
1826
  interface TaskStore {
1714
1827
  store: Store<TaskState>;
@@ -1722,7 +1835,7 @@ interface TaskStore {
1722
1835
  /**
1723
1836
  * 注入副作用钩子(RFC-335 T335-07 前置 P0a)。原 TuiHandle 残留 setter 是"字段 setter
1724
1837
  * + 副作用"混合体(如 setForcedUpgrade = setState + syncOverlayRoute + notify)——
1725
- * 直接变纯 action 会丢副作用。setEffects 把副作用接入口子化注入(仿 setNotify 的
1838
+ * 直接变纯 action 会丢副作用。setEffects 把副作用接入口注入(仿 setNotify 的
1726
1839
  * post-creation 注入范式),store 层不 import 树外 ref(routerRef/plugin registry),
1727
1840
  * 由 main.ts 接线处把闭包函数传进来。未注入时副作用为 no-op(对齐 notify 防过早调用)。
1728
1841
  */
@@ -1735,7 +1848,7 @@ interface TaskStore {
1735
1848
  actions: TaskActions;
1736
1849
  }
1737
1850
  /**
1738
- * taskStore 副作用接入口子。注入方(main.ts)把闭包函数绑进来——这些闭包内部可
1851
+ * taskStore 副作用接入口。注入方(main.ts)把闭包函数绑进来——这些闭包内部可
1739
1852
  * `getRouterRef()` 取真 router / `registerPlugin` 调中央 registry,故接口不把 router/
1740
1853
  * registry 作为参数传递(保持 store 层不引用任何树外类型)。这是"store 不依赖树外
1741
1854
  * 全局"的类型层体现(P0c 先导)。
@@ -1767,6 +1880,18 @@ interface TaskActions {
1767
1880
  setSessionList(list: TaskState['sessionList']): void;
1768
1881
  setSessionTitle(title: string): void;
1769
1882
  setNeedsSetup(value: boolean): void;
1883
+ /** RFC-326 M3-01:cli 侧 FtueController.refresh() 后单向下推精确阶段。 */
1884
+ setFtueStage(stage: TaskState['ftueStage']): void;
1885
+ /** RFC-326 §6.6 / M5-02:cli 侧 matchCapabilities() 结果单向下推。 */
1886
+ setCapabilityRecommendations(items: TaskState['capabilityRecommendations']): void;
1887
+ /** RFC-326 §6.6 / M5-02:用户按 "Not now" 关闭能力推荐卡(本会话瞬态,不持久化)。 */
1888
+ dismissCapabilityRecommendations(): void;
1889
+ /**
1890
+ * 版本更新提示单向下推(cli 侧 `applyUpdateCheckResult` 调用)。传 null/undefined
1891
+ * 清除(理论上是已升级至最新后的复位路径,当前无调用方——Home 横幅只在值非空时
1892
+ * 渲染,清除可留空)。
1893
+ */
1894
+ setUpdateAvailable(info: TaskState['updateAvailable']): void;
1770
1895
  setPermissionMode(mode: string): void;
1771
1896
  /** 强制升级提示(RFC-335 P0a 自 TuiHandle.setForcedUpgrade 下沉):字段 + overlay 路由 + notify。 */
1772
1897
  setForcedUpgrade(msg: string | null): void;
@@ -1797,9 +1922,9 @@ interface BudgetView {
1797
1922
  totalUsed: number;
1798
1923
  /** 可用 token = contextWindow − overhead − messages(三段恒闭合;正常态 = window − totalUsed)。 */
1799
1924
  free: number;
1800
- /** prune 触发线 token 数(70% contextWindow)。 */
1925
+ /** prune 触发线 token 数(派生自 memory 的 DEFAULT_PRUNE_CONFIG,200K 窗口≈60%)。 */
1801
1926
  pruneLine: number;
1802
- /** compact 触发线 token 数(85% contextWindow)。 */
1927
+ /** compact 触发线 token 数(派生自 memory 的 DEFAULT_COMPACTION_CONFIG,200K 窗口≈80%)。 */
1803
1928
  compactLine: number;
1804
1929
  /** 最近一轮 input(非 cache 部分,API 返回)。 */
1805
1930
  lastInput: number;
@@ -2009,8 +2134,8 @@ interface NotificationStore {
2009
2134
  setPulseSurvey(item: NotificationState['pulseSurvey']): void;
2010
2135
  }
2011
2136
  /**
2012
- * notificationStore 副作用接入口子。注入方(main.ts)闭包内取真 router / drainQueue
2013
- * —接口不暴露树外类型,与 taskStore 同款。
2137
+ * notificationStore 副作用接入口。注入方(main.ts)闭包内取真 router / drainQueue
2138
+ * 接口不暴露树外类型,与 taskStore 同款。
2014
2139
  */
2015
2140
  interface NotificationStoreEffects {
2016
2141
  /** paused 由 true→false 时尝试出队(原 inline 的 drainQueue())。 */
@@ -2216,6 +2341,25 @@ interface ExtensionDetailRequest {
2216
2341
  /** 执行某控制按钮(value)。 */
2217
2342
  onAction: (value: string) => void;
2218
2343
  onClose: () => void;
2344
+ /**
2345
+ * RFC-401 M3:插件配置表单数据。提供时在 DataList 之后渲染配置字段展示,
2346
+ * 并在 actions 末尾追加"编辑配置"按钮(触发 onEditConfig 回调)。
2347
+ * 编辑 UI 由宿主侧独立实现(经 updatePluginConfig 写入 PluginConfigStore)。
2348
+ */
2349
+ configForm?: {
2350
+ /** manifest 声明的 config schema 片段(JSON Schema 子集,含 properties/type/description)。 */schema: {
2351
+ type?: string;
2352
+ description?: string;
2353
+ properties?: Record<string, {
2354
+ type?: string;
2355
+ description?: string;
2356
+ default?: unknown;
2357
+ enum?: unknown[];
2358
+ }>;
2359
+ }; /** 当前配置值(合并 manifest 默认值 + PluginConfigStore 持久化值后)。 */
2360
+ values: Record<string, unknown>; /** 点击"编辑配置"按钮时调用(宿主侧打开编辑 UI 或直接写入)。 */
2361
+ onEditConfig?: () => void;
2362
+ };
2219
2363
  }
2220
2364
  //#endregion
2221
2365
  //#region src/dialogs/FileViewerDialog.d.ts
@@ -2694,6 +2838,12 @@ type TuiStreamEvent = {
2694
2838
  notify?: PerfNotifySnapshot;
2695
2839
  indicatorLevel?: 'healthy' | 'warning' | 'critical';
2696
2840
  pluginMetrics?: PluginMetricResult[];
2841
+ } | {
2842
+ kind: 'status';
2843
+ session?: StatusSessionSnapshot;
2844
+ memory?: PerfMemorySnapshot;
2845
+ notify?: PerfNotifySnapshot;
2846
+ pluginMetrics?: PluginMetricResult[];
2697
2847
  } | ({
2698
2848
  kind: 'compactionLog';
2699
2849
  entryKind: 'compact';
@@ -2714,10 +2864,13 @@ type TuiStreamEvent = {
2714
2864
  * 提交意图(前端无关语义层):cli 据此决定如何处理一次提交。
2715
2865
  * - 'send' : 起新回合(空闲时的普通提交,或斜杠命令分发)。
2716
2866
  * - 'steer' : agent 运行中时注入当前回合(session.steer)。
2867
+ * - 'action': 纯 action chip([@model:...]/[@effort:...] 单独提交)——切换模型/档位的
2868
+ * 命令语义,不走 busy 分流、不注入对话流(终局设计 2026-08-14,见
2869
+ * submit-routing.ts isPureActionChip)。
2717
2870
  * followUp/排队 由 TUI 自身的 state.queued 承载(空闲即出队),不经此枚举。
2718
2871
  * 后续移植 GUI:同一 intent 层,GUI 直接绑 Enter→steer / Cmd+Enter→followUp,语义零改。
2719
2872
  */
2720
- type SubmitIntent = 'send' | 'steer';
2873
+ type SubmitIntent = 'send' | 'steer' | 'action';
2721
2874
  /**
2722
2875
  * RFC-148 M3:模态对话框判别联合——收敛原 TuiHandle 9 个独立 open* 方法
2723
2876
  * (openInfo/openPermissions/openContext/openMemory/openSelect/openExtensionDetail/
@@ -2806,13 +2959,6 @@ interface ProgressDialogProps {
2806
2959
  /** 四个阶段标签 */
2807
2960
  phases: string[];
2808
2961
  }
2809
- /** Setup 向导弹窗请求(openModal({kind:'wizard',...}) 入参)。 */
2810
- /**
2811
- * OAuth 流程句柄——向导内嵌授权,不跳转独立面板。
2812
- * RFC-274 M2:补 `code`/`instructions`(对齐真实 `OAuthInfo` 字段),供等待态渲染
2813
- * device-flow 场景(有 code 展示设备码 UI,无 code 展示纯浏览器 UI)——不在选项列表层
2814
- * 区分 pkce/device-flow,只在这个等待态句柄层区分。
2815
- */
2816
2962
  /**
2817
2963
  * OAuth 轮询失败分类(RFC-326 §6.3)——决定 UI 给出哪个主 CTA。
2818
2964
  * - `network`:连不上授权服务(含代理不通)→ 主 CTA 为「打开代理设置」
@@ -2827,6 +2973,12 @@ type OAuthPollResult = 'pending' | 'done' | 'error' | {
2827
2973
  status: 'error';
2828
2974
  reason: OAuthFailureReason;
2829
2975
  };
2976
+ /**
2977
+ * OAuth 流程句柄——向导内嵌授权,不跳转独立面板。
2978
+ * RFC-274 M2:补 `code`/`instructions`(对齐真实 `OAuthInfo` 字段),供等待态渲染
2979
+ * device-flow 场景(有 code 展示设备码 UI,无 code 展示纯浏览器 UI)——不在选项列表层
2980
+ * 区分 pkce/device-flow,只在这个等待态句柄层区分。
2981
+ */
2830
2982
  interface OAuthHandle {
2831
2983
  authorizationUrl: string;
2832
2984
  /** 设备码流程的 user code(`OAuthInfo.code`);pkce 浏览器流程通常为空。 */
@@ -2854,6 +3006,7 @@ interface OAuthHandle {
2854
3006
  */
2855
3007
  openAgain?: () => void;
2856
3008
  }
3009
+ /** Setup 向导弹窗请求(openModal({kind:'wizard',...}) 入参)。 */
2857
3010
  interface WizardRequest {
2858
3011
  kind: 'wizard';
2859
3012
  title: string;
@@ -2891,19 +3044,38 @@ interface WizardRequest {
2891
3044
  /** Provider Auth 面板中显示的 provider 名称(如 "Anthropic")。 */
2892
3045
  authProviderName?: string;
2893
3046
  /**
2894
- * Step 2 模型选项。
3047
+ * Step 2 模型选项(向导打开时刻的初始快照)。
2895
3048
  *
2896
3049
  * RFC-326 §6.4:不能是"无排序的技术清单"——`recommended` 标出首选(至多一个),
2897
3050
  * `unusableReason` 说明为何不可用(缺凭据 / 订阅 429 风险)。两个字段均可选:
2898
3051
  * 省略时退化为原来的平列表渲染,旧调用方无需改动。
3052
+ *
3053
+ * RFC-341 修复:本字段只是**打开向导那一刻**的一次性快照——用户在向导内走完
3054
+ * Provider 安装→Login 认证两步后,本字段不会自动刷新。此前 Step 2(Model)
3055
+ * 因此永远展示打开向导时刻的模型状况(大概率为空,因为那时用户还没配置任何
3056
+ * provider),导致 Model 列表看起来"永久空白"——即便凭据已经成功落盘、
3057
+ * `refreshModelsNow()` 也已在宿主侧跑完。真正的刷新必须走下面的
3058
+ * `onRefreshModelOptions` 回调(登录成功后调用),本字段仅作首屏兜底。
2899
3059
  */
2900
3060
  modelOptions: Array<{
2901
3061
  label: string;
2902
3062
  value: string;
2903
3063
  detail?: string;
2904
3064
  recommended?: boolean;
2905
- unusableReason?: 'unauthenticated' | 'oauth-429-risk';
3065
+ unusableReason?: 'unauthenticated' | 'oauth-429-risk' | 'intranet-unreachable';
2906
3066
  }>;
3067
+ /**
3068
+ * 重新计算 Step 2 模型选项(RFC-341 修复)。登录成功(API key 提交成功 / OAuth
3069
+ * 完成)后调用,宿主据最新 `authStore`/`modelRegistry` 状态重算一份 `modelOptions`
3070
+ * 同构的数组返回。省略时退化为旧行为(`modelOptions` 恒为打开时刻快照,不刷新)。
3071
+ */
3072
+ onRefreshModelOptions?: () => Promise<Array<{
3073
+ label: string;
3074
+ value: string;
3075
+ detail?: string;
3076
+ recommended?: boolean;
3077
+ unusableReason?: 'unauthenticated' | 'oauth-429-risk' | 'intranet-unreachable';
3078
+ }>>;
2907
3079
  examplePrompts: readonly string[];
2908
3080
  /** 信任步骤(Step 1)中显示的工作区路径。 */
2909
3081
  workspacePath?: string;
@@ -3023,7 +3195,7 @@ type QuestionsAnswer = {
3023
3195
  *
3024
3196
  * 不收编 toggleEditedFiles(全仓 grep 零调用点,见 findings-backlog.md 死代码候选)。
3025
3197
  */
3026
- type PaneName = 'history' | 'backgroundTasks' | 'draftPane' | 'queuePane' | 'notifications' | 'schedulePane' | 'perf' | 'cacheStats' | 'compactionLog' | 'gallery' | 'proxy' | 'prompts';
3198
+ type PaneName = 'history' | 'backgroundTasks' | 'draftPane' | 'queuePane' | 'notifications' | 'schedulePane' | 'status' | 'cacheStats' | 'compactionLog' | 'gallery' | 'proxy' | 'prompts';
3027
3199
  interface TuiOptions {
3028
3200
  stdin: NodeJS.ReadStream;
3029
3201
  stdout: NodeJS.WriteStream;
@@ -3038,6 +3210,8 @@ interface TuiOptions {
3038
3210
  modelName?: string;
3039
3211
  /** 初始「无可用模型」态(未登录/无凭证)→ 输入框显 promptSetup 引导。 */
3040
3212
  needsSetup?: boolean;
3213
+ /** RFC-326 §6.5 / M4-02:Home 首 prompt 建议 chips(已本地化文案,cli 侧产出)。 */
3214
+ promptSuggestions?: readonly string[];
3041
3215
  /** 斜杠命令表(typeahead) */
3042
3216
  commands?: CommandEntry[];
3043
3217
  /** #/@ sigil 条目数据源(coding 层 PluginInputRegistry,结构同构)。
@@ -3068,6 +3242,10 @@ interface TuiOptions {
3068
3242
  };
3069
3243
  /** RFC-234 P2-b:选择会话回调。 */
3070
3244
  onSessionSelect?: (id: string) => void;
3245
+ /** RFC-326 §6.6 / M5-02:Home 能力推荐卡数字键选中安装(复用既有 extension install 链路)。 */
3246
+ onInstallCapability?: (extensionId: string) => void;
3247
+ /** RFC-326 §6.6 / M5-02:Home 能力推荐卡 "Not now" 关闭(本会话瞬态)。 */
3248
+ onDismissCapabilityRecommendations?: () => void;
3071
3249
  /** RFC-198 §4.4:PasteStore 的内存压力分级来源只读视图(cli 层传入 App._residencyGovernor
3072
3250
  * 的结构化子集,零 @x-otto/runtime 编译期依赖)。省略时 PasteStore 固定 healthy 上限。 */
3073
3251
  residencyGovernor?: PasteStoreResidencySource;
@@ -3129,7 +3307,6 @@ interface TuiOptions {
3129
3307
  /** RFC-089 M8 spike:Ink ConcurrentRoot(键击 DiscreteEventPriority 插队 + 可中断 reconcile)。
3130
3308
  * 缺省读 OTTO_TUI_CONCURRENT=1;A/B 稳定后再定默认。 */
3131
3309
  concurrent?: boolean;
3132
- /** intent='steer' 时 cli 应注入当前运行回合(session.steer)而非起新回合;缺省/'send' 走原路径。 */
3133
3310
  /**
3134
3311
  * 提交回调(fire-and-forget)。
3135
3312
  *
@@ -3194,11 +3371,11 @@ interface TuiOptions {
3194
3371
  */
3195
3372
  onA2uiAction?: (componentId: string, action: string, payload?: Record<string, unknown>) => void;
3196
3373
  /**
3197
- * RFC-116 M5:`/perf` 面板内手动刷新键(r)触发——CLI 侧重新执行 `handlePerf` 的核心
3374
+ * Status 面板内手动刷新键(r)触发——CLI 侧重新执行 `handleStatus` 的核心
3198
3375
  * 采集逻辑(内存/渲染/插件三类数据源),回填后面板自动重渲(数据经 setPerf* 系列
3199
3376
  * TuiHandle 方法喂回,不由本回调直接返回值)。手动触发,不做自动轮询(对齐 D7)。
3200
3377
  */
3201
- onPerfRefresh?: () => void;
3378
+ onStatusRefresh?: () => void;
3202
3379
  /** /tasks 面板:k 杀选中后台进程。 */
3203
3380
  onBackgroundKill?: (id: string) => void;
3204
3381
  /** /tasks 面板:o 看选中后台进程输出(cli 据此启动 logPath tail 轮询)。 */
@@ -3358,8 +3535,10 @@ interface TuiPendingHandle {
3358
3535
  setPendingEcho(text: string, mode: string): void;
3359
3536
  /** 模型已接起首字节,关闭 ESC 撤回窗口(pending 转正)。 */
3360
3537
  clearPendingEcho(): void;
3361
- /** ESC 撤回 pending 消息——从对话流移除最后一条 user echo + 回填输入框 + 清 pendingEcho。 */
3362
- withdrawPendingEcho(): void;
3538
+ /** ESC 撤回 pending 消息——从对话流移除最后一条 user echo + 清 pendingEcho。
3539
+ * 返回是否真的撤回了(false = pendingEcho 已空/已转正,调用方不应回填输入框——否则
3540
+ * 消息已留在对话流却把文本再塞回输入框,制造"撤回失败但输入框有内容"的重复)。 */
3541
+ withdrawPendingEcho(): boolean;
3363
3542
  /** RFC-337 D3:注入一条运行中追加(steer)的待定 echo(延迟 commit,live 区渲染)。 */
3364
3543
  setPendingSteer(text: string, id: string): void;
3365
3544
  /** RFC-337 D3:steer 被模型消费 → 转正 commit 到 scrollback(此后不再可撤回)。 */
@@ -3474,7 +3653,8 @@ interface TuiEngineHandle {
3474
3653
  mode: SubmitMode;
3475
3654
  } | undefined;
3476
3655
  /**
3477
- * 把一条提交塞进"回合之后"队列(state.queued,与 Shift+Enter 同一队列),引擎空闲时自动出队起新回合。
3656
+ * 把一条提交塞进"回合之后"队列(state.queued,与 Option/Ctrl+Enter 排队同一队列),
3657
+ * 引擎空闲时自动出队起新回合。
3478
3658
  * 供 cli 兜底:若消息因镜像态去同步漏到"引擎仍忙却走起新回合"的路,按此回落到回合后队列,
3479
3659
  * 而非撞裸 prompt() 抛错。出队由 drainQueue 以引擎真·忙判定为闸,不会在忙时立即回拉打转。
3480
3660
  */
@@ -3527,8 +3707,14 @@ interface TuiMessagesHandle {
3527
3707
  getEditedFiles(): EditedFileEntry[];
3528
3708
  }
3529
3709
  interface TuiLifecycleHandle {
3530
- /** 停止 TUI(卸载 Ink 渲染树 + 清理平台副作用)。 */
3531
- stop(): void;
3710
+ /**
3711
+ * 停止 TUI(卸载 Ink 渲染树 + 清理平台副作用)。
3712
+ *
3713
+ * 2026-08-14 退出乱码 P0:改为 **async**——内含 OSC 11 吸收窗(200ms),在恢复
3714
+ * 终端回显前消费在途回复。调用方**应当 await**(否则吸收窗可能未完成即被
3715
+ * 后续 process.exit 截断);不 await 时由 3s 兜底/进程 exit 兜底覆盖(best-effort)。
3716
+ */
3717
+ stop(): Promise<void>;
3532
3718
  /** 清屏并重置会话界面状态(/clear):
3533
3719
  * - 清终端(ANSI \x1B[2J\x1B[H)和 scrollback 状态
3534
3720
  * - 清除任务面板、委托面板、动态区状态
@@ -3934,5 +4120,5 @@ declare function Tabable({
3934
4120
  children
3935
4121
  }: TabableProps): React.ReactElement;
3936
4122
  //#endregion
3937
- export { ExtensionMenuContribution as $, ToolMessage 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, StreamEvent as Jn, ObservationLike as Jt, MemoryDialogProps as K, PulseSurveyItem 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, ToolCompletionMessage 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, ThinkingContent as Xn, formatTurnTimeline as Xt, InfoDialog as Y, TextContent as Yn, formatAgentDiagnosticsText as Yt, InfoDialogProps as Z, ToolCall 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, UserMessage 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, PerfStore 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, StopReason 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, 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 };
3938
- //# sourceMappingURL=Tabable-DDNOHe29.d.ts.map
4123
+ 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 };
4124
+ //# sourceMappingURL=Tabable-20oY6m1Y.d.ts.map