berry-agent-sdk 0.1.0-alpha.2

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.
Files changed (263) hide show
  1. package/README.md +78 -0
  2. package/dist/packages/berry-agent-sdk/src/client.d.ts +6 -0
  3. package/dist/packages/berry-agent-sdk/src/client.js +59 -0
  4. package/dist/packages/berry-agent-sdk/src/client.js.map +1 -0
  5. package/dist/packages/berry-agent-sdk/src/http.d.ts +24 -0
  6. package/dist/packages/berry-agent-sdk/src/http.js +232 -0
  7. package/dist/packages/berry-agent-sdk/src/http.js.map +1 -0
  8. package/dist/packages/berry-agent-sdk/src/index.d.ts +25 -0
  9. package/dist/packages/berry-agent-sdk/src/index.js +22 -0
  10. package/dist/packages/berry-agent-sdk/src/index.js.map +1 -0
  11. package/dist/packages/berry-agent-sdk/src/stdio.d.ts +23 -0
  12. package/dist/packages/berry-agent-sdk/src/stdio.js +238 -0
  13. package/dist/packages/berry-agent-sdk/src/stdio.js.map +1 -0
  14. package/dist/packages/berry-agent-sdk/src/types.d.ts +117 -0
  15. package/dist/packages/berry-agent-sdk/src/types.js +19 -0
  16. package/dist/packages/berry-agent-sdk/src/types.js.map +1 -0
  17. package/dist/src/agent/events.d.ts +11 -0
  18. package/dist/src/agent/events.js +2 -0
  19. package/dist/src/agent/events.js.map +1 -0
  20. package/dist/src/agent/index.d.ts +13 -0
  21. package/dist/src/agent/index.js +3 -0
  22. package/dist/src/agent/index.js.map +1 -0
  23. package/dist/src/agent/loop.d.ts +19 -0
  24. package/dist/src/agent/loop.js +140 -0
  25. package/dist/src/agent/loop.js.map +1 -0
  26. package/dist/src/agent/queue.d.ts +105 -0
  27. package/dist/src/agent/queue.js +120 -0
  28. package/dist/src/agent/queue.js.map +1 -0
  29. package/dist/src/agent/stream.d.ts +21 -0
  30. package/dist/src/agent/stream.js +80 -0
  31. package/dist/src/agent/stream.js.map +1 -0
  32. package/dist/src/agent/tools-batch.d.ts +49 -0
  33. package/dist/src/agent/tools-batch.js +222 -0
  34. package/dist/src/agent/tools-batch.js.map +1 -0
  35. package/dist/src/agent/types.d.ts +104 -0
  36. package/dist/src/agent/types.js +9 -0
  37. package/dist/src/agent/types.js.map +1 -0
  38. package/dist/src/channels/ask-queue.d.ts +44 -0
  39. package/dist/src/channels/ask-queue.js +83 -0
  40. package/dist/src/channels/ask-queue.js.map +1 -0
  41. package/dist/src/channels/commands.d.ts +56 -0
  42. package/dist/src/channels/commands.js +130 -0
  43. package/dist/src/channels/commands.js.map +1 -0
  44. package/dist/src/channels/engine/cell.d.ts +55 -0
  45. package/dist/src/channels/engine/cell.js +144 -0
  46. package/dist/src/channels/engine/cell.js.map +1 -0
  47. package/dist/src/channels/engine/diff.d.ts +3 -0
  48. package/dist/src/channels/engine/diff.js +144 -0
  49. package/dist/src/channels/engine/diff.js.map +1 -0
  50. package/dist/src/channels/engine/engine.d.ts +151 -0
  51. package/dist/src/channels/engine/engine.js +417 -0
  52. package/dist/src/channels/engine/engine.js.map +1 -0
  53. package/dist/src/channels/engine/index.d.ts +22 -0
  54. package/dist/src/channels/engine/index.js +9 -0
  55. package/dist/src/channels/engine/index.js.map +1 -0
  56. package/dist/src/channels/engine/input-keys.d.ts +39 -0
  57. package/dist/src/channels/engine/input-keys.js +87 -0
  58. package/dist/src/channels/engine/input-keys.js.map +1 -0
  59. package/dist/src/channels/engine/input.d.ts +174 -0
  60. package/dist/src/channels/engine/input.js +597 -0
  61. package/dist/src/channels/engine/input.js.map +1 -0
  62. package/dist/src/channels/engine/memory-io.d.ts +46 -0
  63. package/dist/src/channels/engine/memory-io.js +72 -0
  64. package/dist/src/channels/engine/memory-io.js.map +1 -0
  65. package/dist/src/channels/engine/process-io.d.ts +23 -0
  66. package/dist/src/channels/engine/process-io.js +39 -0
  67. package/dist/src/channels/engine/process-io.js.map +1 -0
  68. package/dist/src/channels/engine/types.d.ts +202 -0
  69. package/dist/src/channels/engine/types.js +18 -0
  70. package/dist/src/channels/engine/types.js.map +1 -0
  71. package/dist/src/channels/engine/width.d.ts +23 -0
  72. package/dist/src/channels/engine/width.js +123 -0
  73. package/dist/src/channels/engine/width.js.map +1 -0
  74. package/dist/src/channels/index.d.ts +25 -0
  75. package/dist/src/channels/index.js +16 -0
  76. package/dist/src/channels/index.js.map +1 -0
  77. package/dist/src/channels/registry.d.ts +33 -0
  78. package/dist/src/channels/registry.js +57 -0
  79. package/dist/src/channels/registry.js.map +1 -0
  80. package/dist/src/channels/sdk/admit.d.ts +32 -0
  81. package/dist/src/channels/sdk/admit.js +30 -0
  82. package/dist/src/channels/sdk/admit.js.map +1 -0
  83. package/dist/src/channels/sdk/backend.d.ts +19 -0
  84. package/dist/src/channels/sdk/backend.js +103 -0
  85. package/dist/src/channels/sdk/backend.js.map +1 -0
  86. package/dist/src/channels/sdk/cursor.d.ts +51 -0
  87. package/dist/src/channels/sdk/cursor.js +57 -0
  88. package/dist/src/channels/sdk/cursor.js.map +1 -0
  89. package/dist/src/channels/sdk/index.d.ts +20 -0
  90. package/dist/src/channels/sdk/index.js +21 -0
  91. package/dist/src/channels/sdk/index.js.map +1 -0
  92. package/dist/src/channels/sdk/jsonl.d.ts +47 -0
  93. package/dist/src/channels/sdk/jsonl.js +201 -0
  94. package/dist/src/channels/sdk/jsonl.js.map +1 -0
  95. package/dist/src/channels/sdk/protocol.d.ts +297 -0
  96. package/dist/src/channels/sdk/protocol.js +25 -0
  97. package/dist/src/channels/sdk/protocol.js.map +1 -0
  98. package/dist/src/channels/sdk/schema.d.ts +12 -0
  99. package/dist/src/channels/sdk/schema.js +92 -0
  100. package/dist/src/channels/sdk/schema.js.map +1 -0
  101. package/dist/src/channels/sdk/wire-core.d.ts +199 -0
  102. package/dist/src/channels/sdk/wire-core.js +447 -0
  103. package/dist/src/channels/sdk/wire-core.js.map +1 -0
  104. package/dist/src/channels/service.d.ts +66 -0
  105. package/dist/src/channels/service.js +170 -0
  106. package/dist/src/channels/service.js.map +1 -0
  107. package/dist/src/channels/tui/autocomplete/autocomplete.d.ts +32 -0
  108. package/dist/src/channels/tui/autocomplete/autocomplete.js +43 -0
  109. package/dist/src/channels/tui/autocomplete/autocomplete.js.map +1 -0
  110. package/dist/src/channels/tui/autocomplete/file-mentions.d.ts +18 -0
  111. package/dist/src/channels/tui/autocomplete/file-mentions.js +107 -0
  112. package/dist/src/channels/tui/autocomplete/file-mentions.js.map +1 -0
  113. package/dist/src/channels/tui/autocomplete/popup.d.ts +47 -0
  114. package/dist/src/channels/tui/autocomplete/popup.js +149 -0
  115. package/dist/src/channels/tui/autocomplete/popup.js.map +1 -0
  116. package/dist/src/channels/tui/autocomplete/provider.d.ts +38 -0
  117. package/dist/src/channels/tui/autocomplete/provider.js +8 -0
  118. package/dist/src/channels/tui/autocomplete/provider.js.map +1 -0
  119. package/dist/src/channels/tui/autocomplete/token.d.ts +22 -0
  120. package/dist/src/channels/tui/autocomplete/token.js +69 -0
  121. package/dist/src/channels/tui/autocomplete/token.js.map +1 -0
  122. package/dist/src/channels/tui/backend/ansi-rows.d.ts +86 -0
  123. package/dist/src/channels/tui/backend/ansi-rows.js +209 -0
  124. package/dist/src/channels/tui/backend/ansi-rows.js.map +1 -0
  125. package/dist/src/channels/tui/backend/main-screen.d.ts +90 -0
  126. package/dist/src/channels/tui/backend/main-screen.js +208 -0
  127. package/dist/src/channels/tui/backend/main-screen.js.map +1 -0
  128. package/dist/src/channels/tui/backend/osc.d.ts +79 -0
  129. package/dist/src/channels/tui/backend/osc.js +92 -0
  130. package/dist/src/channels/tui/backend/osc.js.map +1 -0
  131. package/dist/src/channels/tui/backend/transcript.d.ts +98 -0
  132. package/dist/src/channels/tui/backend/transcript.js +231 -0
  133. package/dist/src/channels/tui/backend/transcript.js.map +1 -0
  134. package/dist/src/channels/tui/backend/tui-backend.d.ts +324 -0
  135. package/dist/src/channels/tui/backend/tui-backend.js +916 -0
  136. package/dist/src/channels/tui/backend/tui-backend.js.map +1 -0
  137. package/dist/src/channels/tui/editor/editor-model.d.ts +141 -0
  138. package/dist/src/channels/tui/editor/editor-model.js +544 -0
  139. package/dist/src/channels/tui/editor/editor-model.js.map +1 -0
  140. package/dist/src/channels/tui/editor/editor-view.d.ts +36 -0
  141. package/dist/src/channels/tui/editor/editor-view.js +141 -0
  142. package/dist/src/channels/tui/editor/editor-view.js.map +1 -0
  143. package/dist/src/channels/tui/editor/editor.d.ts +50 -0
  144. package/dist/src/channels/tui/editor/editor.js +276 -0
  145. package/dist/src/channels/tui/editor/editor.js.map +1 -0
  146. package/dist/src/channels/tui/editor/undo-stack.d.ts +22 -0
  147. package/dist/src/channels/tui/editor/undo-stack.js +36 -0
  148. package/dist/src/channels/tui/editor/undo-stack.js.map +1 -0
  149. package/dist/src/channels/tui/editor/visual-lines.d.ts +39 -0
  150. package/dist/src/channels/tui/editor/visual-lines.js +127 -0
  151. package/dist/src/channels/tui/editor/visual-lines.js.map +1 -0
  152. package/dist/src/channels/tui/editor/word-nav.d.ts +10 -0
  153. package/dist/src/channels/tui/editor/word-nav.js +107 -0
  154. package/dist/src/channels/tui/editor/word-nav.js.map +1 -0
  155. package/dist/src/channels/tui/history/history-viewer.d.ts +133 -0
  156. package/dist/src/channels/tui/history/history-viewer.js +404 -0
  157. package/dist/src/channels/tui/history/history-viewer.js.map +1 -0
  158. package/dist/src/channels/tui/index.d.ts +16 -0
  159. package/dist/src/channels/tui/index.js +4 -0
  160. package/dist/src/channels/tui/index.js.map +1 -0
  161. package/dist/src/channels/tui/markdown/blocks.d.ts +42 -0
  162. package/dist/src/channels/tui/markdown/blocks.js +112 -0
  163. package/dist/src/channels/tui/markdown/blocks.js.map +1 -0
  164. package/dist/src/channels/tui/markdown/inline.d.ts +24 -0
  165. package/dist/src/channels/tui/markdown/inline.js +76 -0
  166. package/dist/src/channels/tui/markdown/inline.js.map +1 -0
  167. package/dist/src/channels/tui/markdown/markdown.d.ts +34 -0
  168. package/dist/src/channels/tui/markdown/markdown.js +183 -0
  169. package/dist/src/channels/tui/markdown/markdown.js.map +1 -0
  170. package/dist/src/channels/tui/memory/memory-viewer.d.ts +235 -0
  171. package/dist/src/channels/tui/memory/memory-viewer.js +541 -0
  172. package/dist/src/channels/tui/memory/memory-viewer.js.map +1 -0
  173. package/dist/src/channels/tui/overlay/alt-screen.d.ts +79 -0
  174. package/dist/src/channels/tui/overlay/alt-screen.js +106 -0
  175. package/dist/src/channels/tui/overlay/alt-screen.js.map +1 -0
  176. package/dist/src/channels/tui/overlay/overlay.d.ts +53 -0
  177. package/dist/src/channels/tui/overlay/overlay.js +58 -0
  178. package/dist/src/channels/tui/overlay/overlay.js.map +1 -0
  179. package/dist/src/channels/tui/overlay/select-confirm.d.ts +73 -0
  180. package/dist/src/channels/tui/overlay/select-confirm.js +157 -0
  181. package/dist/src/channels/tui/overlay/select-confirm.js.map +1 -0
  182. package/dist/src/channels/tui/panels/todo-panel.d.ts +24 -0
  183. package/dist/src/channels/tui/panels/todo-panel.js +55 -0
  184. package/dist/src/channels/tui/panels/todo-panel.js.map +1 -0
  185. package/dist/src/channels/tui/panels/tool-progress-panel.d.ts +37 -0
  186. package/dist/src/channels/tui/panels/tool-progress-panel.js +94 -0
  187. package/dist/src/channels/tui/panels/tool-progress-panel.js.map +1 -0
  188. package/dist/src/channels/tui/scroll/scroll-view.d.ts +96 -0
  189. package/dist/src/channels/tui/scroll/scroll-view.js +255 -0
  190. package/dist/src/channels/tui/scroll/scroll-view.js.map +1 -0
  191. package/dist/src/channels/tui/status/status-line.d.ts +46 -0
  192. package/dist/src/channels/tui/status/status-line.js +77 -0
  193. package/dist/src/channels/tui/status/status-line.js.map +1 -0
  194. package/dist/src/channels/tui/theme.d.ts +27 -0
  195. package/dist/src/channels/tui/theme.js +42 -0
  196. package/dist/src/channels/tui/theme.js.map +1 -0
  197. package/dist/src/channels/types.d.ts +84 -0
  198. package/dist/src/channels/types.js +12 -0
  199. package/dist/src/channels/types.js.map +1 -0
  200. package/dist/src/channels/ui-core.d.ts +80 -0
  201. package/dist/src/channels/ui-core.js +210 -0
  202. package/dist/src/channels/ui-core.js.map +1 -0
  203. package/dist/src/context/codes.d.ts +1 -0
  204. package/dist/src/context/codes.js +41 -0
  205. package/dist/src/context/codes.js.map +1 -0
  206. package/dist/src/context/events.d.ts +62 -0
  207. package/dist/src/context/events.js +161 -0
  208. package/dist/src/context/events.js.map +1 -0
  209. package/dist/src/context/index.d.ts +16 -0
  210. package/dist/src/context/index.js +14 -0
  211. package/dist/src/context/index.js.map +1 -0
  212. package/dist/src/context/logger.d.ts +67 -0
  213. package/dist/src/context/logger.js +137 -0
  214. package/dist/src/context/logger.js.map +1 -0
  215. package/dist/src/context/scope.d.ts +78 -0
  216. package/dist/src/context/scope.js +183 -0
  217. package/dist/src/context/scope.js.map +1 -0
  218. package/dist/src/context/workspace.d.ts +8 -0
  219. package/dist/src/context/workspace.js +105 -0
  220. package/dist/src/context/workspace.js.map +1 -0
  221. package/dist/src/contracts/agent-events.d.ts +73 -0
  222. package/dist/src/contracts/agent-events.js +17 -0
  223. package/dist/src/contracts/agent-events.js.map +1 -0
  224. package/dist/src/contracts/api.d.ts +249 -0
  225. package/dist/src/contracts/api.js +334 -0
  226. package/dist/src/contracts/api.js.map +1 -0
  227. package/dist/src/contracts/approval.d.ts +37 -0
  228. package/dist/src/contracts/approval.js +10 -0
  229. package/dist/src/contracts/approval.js.map +1 -0
  230. package/dist/src/contracts/env-ref.d.ts +41 -0
  231. package/dist/src/contracts/env-ref.js +33 -0
  232. package/dist/src/contracts/env-ref.js.map +1 -0
  233. package/dist/src/contracts/errors.d.ts +56 -0
  234. package/dist/src/contracts/errors.js +267 -0
  235. package/dist/src/contracts/errors.js.map +1 -0
  236. package/dist/src/contracts/events.d.ts +70 -0
  237. package/dist/src/contracts/events.js +330 -0
  238. package/dist/src/contracts/events.js.map +1 -0
  239. package/dist/src/contracts/index.d.ts +32 -0
  240. package/dist/src/contracts/index.js +27 -0
  241. package/dist/src/contracts/index.js.map +1 -0
  242. package/dist/src/contracts/llm.d.ts +278 -0
  243. package/dist/src/contracts/llm.js +13 -0
  244. package/dist/src/contracts/llm.js.map +1 -0
  245. package/dist/src/contracts/messages.d.ts +63 -0
  246. package/dist/src/contracts/messages.js +66 -0
  247. package/dist/src/contracts/messages.js.map +1 -0
  248. package/dist/src/contracts/redact.d.ts +46 -0
  249. package/dist/src/contracts/redact.js +224 -0
  250. package/dist/src/contracts/redact.js.map +1 -0
  251. package/dist/src/contracts/tools.d.ts +198 -0
  252. package/dist/src/contracts/tools.js +35 -0
  253. package/dist/src/contracts/tools.js.map +1 -0
  254. package/dist/src/contracts/types.d.ts +304 -0
  255. package/dist/src/contracts/types.js +51 -0
  256. package/dist/src/contracts/types.js.map +1 -0
  257. package/dist/src/contracts/ui.d.ts +122 -0
  258. package/dist/src/contracts/ui.js +16 -0
  259. package/dist/src/contracts/ui.js.map +1 -0
  260. package/dist/src/sdk/types.d.ts +144 -0
  261. package/dist/src/sdk/types.js +33 -0
  262. package/dist/src/sdk/types.js.map +1 -0
  263. package/package.json +29 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire-core.js","sourceRoot":"","sources":["../../../../../../src/channels/sdk/wire-core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * channels 件聚合工厂(L4 宿主固定件——02 篇席 10;批 10a 通道核)。
3
+ *
4
+ * 组合四件:SessionChannels(多会话注册/焦点/重画)+ CommandRegistry(命令面)
5
+ * + UiCore(七原语分发核)+ AskQueue(提问队列)。后端(UiBackend)经
6
+ * addBackend 注入——TUI 实装批接线 pi-tui、webui 件同面接入;核零 pi-tui
7
+ * import(件分两面定形——07 §4.1 channels 纵切批注记)。
8
+ *
9
+ * host 装配序(批 12):createChannels → addBackend(tui) → registerSession/
10
+ * focus(TUI 启动会话策略——07 §5)→ conversation 侧 per-run sink 汇入 emit。
11
+ */
12
+ import type { ApprovalAskAnswer, ApprovalAskRequest, AskKind, ChannelsOptions, CommandHandler, CommandSpec, NotifyLevel, SessionEnvelope, UiAskOptions, UiBackend, UiInputOptions, UiSelectChoice } from './types.js';
13
+ import { CommandRegistry } from './commands.js';
14
+ import type { Disposer } from '../context/index.js';
15
+ /** channels 通道核服务面(核级 API 一律显式 sessionId——ctx 级包装归 host 批) */
16
+ export interface ChannelsService<TProjection> {
17
+ /** 命令面(注册/查询/解析/分发——后写胜出) */
18
+ readonly commands: CommandRegistry;
19
+ /** 后端管理(多后端扇出:notify 恒扇出、阻塞原语竞速、信封路由——宿主域装配独占) */
20
+ addBackend(backend: UiBackend<TProjection>): void;
21
+ removeBackend(id: string): void;
22
+ /**
23
+ * 插件域后端注册(03 §2.7 后端 id 分域律——U3 批 U3-3):同 id 后写胜出
24
+ * (upsert 原位顶替,扇出序稳定);撞宿主域 id 拒 `CHANNEL_BACKEND_RESERVED`
25
+ * (宿主后端结构性不可顶替——07 §4 兜底通道恒在场条款的执法承载)。
26
+ * 返回 disposer 三律②——仅当仍是本后端时摘除(同 id 后写顶替后旧
27
+ * disposer 调用为无操作)。与 addBackend 分域分立:插件面无 removeBackend,
28
+ * 摘除只经 disposer。
29
+ */
30
+ registerPluginBackend(backend: UiBackend<never>): Disposer;
31
+ /** 插件域在册后端 id 清单(所有权读面——观测/测试;宿主域 id 装配侧自明) */
32
+ listPluginBackendIds(): readonly string[];
33
+ /** 会话管理(unregisterSession 联动提问队列收口 + widget 槽清空) */
34
+ registerSession(sessionId: string): void;
35
+ unregisterSession(sessionId: string): void;
36
+ /**
37
+ * 在册判定(ix-2——ctx.ui 锚时效真源):未 registerSession 或已
38
+ * unregisterSession = false。阻塞原语受理时检查——陈年锚晚到不悬死。
39
+ */
40
+ hasSession(sessionId: string): boolean;
41
+ /** 焦点切换(清屏重画——拉投影经装配注入回调) */
42
+ focus(sessionId: string): Promise<void>;
43
+ isFocused(sessionId: string): boolean;
44
+ /** 当前聚焦会话(null = 焦点空悬) */
45
+ readonly focusedId: string | null;
46
+ /** 活体信封分流入口(conversation 驱动侧 per-run sink 汇入处——按聚焦位路由扇出) */
47
+ emit(env: SessionEnvelope): void;
48
+ notify(sessionId: string, message: string, opts?: {
49
+ level?: NotifyLevel;
50
+ }): void;
51
+ confirm(sessionId: string, message: string, opts?: UiAskOptions): Promise<boolean>;
52
+ select(sessionId: string, message: string, choices: readonly UiSelectChoice[], opts?: UiAskOptions): Promise<string>;
53
+ input(sessionId: string, message: string, opts?: UiInputOptions): Promise<string>;
54
+ /** 审批 ask(07 §4.3 提问队列条款——与阻塞三件同队;safety 侧经装配桥接) */
55
+ askApproval(sessionId: string, request: ApprovalAskRequest, opts?: UiAskOptions): Promise<ApprovalAskAnswer>;
56
+ setStatus(sessionId: string, status: string): void;
57
+ setWidget(sessionId: string, node: unknown | null): void;
58
+ hasAudience(): boolean;
59
+ /** 提问队列观察面(诊断/测试) */
60
+ pendingAsks(sessionId: string): readonly AskKind[];
61
+ registerCommand(name: string, handler: CommandHandler, description?: string): Disposer;
62
+ dispatchCommand(input: string, sessionId?: string): Promise<boolean>;
63
+ listCommands(): readonly CommandSpec[];
64
+ }
65
+ /** 通道核工厂(投影类型 TProjection 由装配侧钉——不 import session 的边表执法) */
66
+ export declare function createChannels<TProjection>(opts?: ChannelsOptions<TProjection>): ChannelsService<TProjection>;
@@ -0,0 +1,170 @@
1
+ /**
2
+ * channels 件聚合工厂(L4 宿主固定件——02 篇席 10;批 10a 通道核)。
3
+ *
4
+ * 组合四件:SessionChannels(多会话注册/焦点/重画)+ CommandRegistry(命令面)
5
+ * + UiCore(七原语分发核)+ AskQueue(提问队列)。后端(UiBackend)经
6
+ * addBackend 注入——TUI 实装批接线 pi-tui、webui 件同面接入;核零 pi-tui
7
+ * import(件分两面定形——07 §4.1 channels 纵切批注记)。
8
+ *
9
+ * host 装配序(批 12):createChannels → addBackend(tui) → registerSession/
10
+ * focus(TUI 启动会话策略——07 §5)→ conversation 侧 per-run sink 汇入 emit。
11
+ */
12
+ import { BaseError } from '../contracts/index.js';
13
+ import { CommandRegistry } from './commands.js';
14
+ import { AskQueue } from './ask-queue.js';
15
+ import { UiCore } from './ui-core.js';
16
+ import { SessionChannels } from './registry.js';
17
+ /** 通道核工厂(投影类型 TProjection 由装配侧钉——不 import session 的边表执法) */
18
+ export function createChannels(opts = {}) {
19
+ const backends = [];
20
+ // 插件域后端集合(03 §2.7 分域律——U3 批 U3-3):upsert/撞名/disposer 全只
21
+ // 在本域内匹配,宿主域结构性不可及。插件实装形 = UiBackend<never>——投影
22
+ // 泛型宿主装配钉入,插件后端走信封驱动呈现、不参与投影重画(03 §2.2
23
+ // registerUiBackend 定形注记;SDK/webui 后端同形先例)
24
+ const pluginBackends = [];
25
+ // 全量扇出视图(宿主域在前、插件域在后——注册序内稳定):插件域 never 形
26
+ // 经方法双变结构兼容并入 TProjection 序列(onRepaint 等均方法语法声明);
27
+ // UiCore 持 never 形以保自身非泛型——边界处 as(单域时代同洞)
28
+ const allBackends = () => [...backends, ...pluginBackends];
29
+ const backendsForCore = () => allBackends();
30
+ const askQueue = new AskQueue();
31
+ const uiCore = new UiCore(backendsForCore, askQueue, opts.onApprovalAlways);
32
+ const commands = new CommandRegistry();
33
+ const registry = new SessionChannels(opts.fetchProjection, (sessionId, projection) => {
34
+ // repaint 扇出:带上该会话当前 widget 槽值(07 §4.3 单槽重放)——双域合流
35
+ const widget = uiCore.widgetOf(sessionId);
36
+ for (const b of allBackends())
37
+ b.onRepaint?.(sessionId, projection, widget);
38
+ });
39
+ // 件 8 /history 注册面(07 §4.1 条款:history() 注入在场即注册、缺席不注册
40
+ // 不虚报——真源 = 聚焦会话 → 拉全量 durable 正文投影 → 扇出后端 openHistory;
41
+ // 生产数据源接线归批 12 host 装配)
42
+ if (opts.history !== undefined) {
43
+ const fetchHistory = opts.history;
44
+ commands.register('history', async () => {
45
+ const sessionId = registry.focusedId;
46
+ if (sessionId === null)
47
+ return; // 焦点空悬——无回看对象(静默返回不虚报)
48
+ const messages = await fetchHistory(sessionId);
49
+ for (const b of allBackends())
50
+ b.openHistory?.(sessionId, messages);
51
+ }, '全屏回看会话历史');
52
+ }
53
+ // /memory 注册面(06 §7 形态定形注①——memory 注入在场即注册、缺席不注册
54
+ // 不虚报;同 /history 注册面律):管理面是全局面无会话归属,扇出后端
55
+ // openMemory(零参——材料后端自持);全体 falsy(后端不支持或件缺席)时
56
+ // notify 降级提示(warn 档——不静默假装已开);无观众后端时静默返回
57
+ // (notify 扇出无人接帧——与焦点空悬同族的不虚报位)
58
+ if (opts.memory !== undefined) {
59
+ commands.register('memory', async () => {
60
+ let opened = false;
61
+ for (const b of allBackends()) {
62
+ if (b.openMemory?.() === true)
63
+ opened = true; // 任一后端已开即成功(先开胜出)
64
+ }
65
+ if (!opened) {
66
+ // notify 非阻塞不分会话呈现位(service.notify 同律——uiCore 直扇出)
67
+ uiCore.notify('当前通道不支持记忆管理面(或 memory 件未装载)', { level: 'warn' });
68
+ }
69
+ }, '记忆管理面(冻结/忘掉/恢复/导出)');
70
+ }
71
+ return {
72
+ commands,
73
+ addBackend(backend) {
74
+ backends.push(backend);
75
+ },
76
+ removeBackend(id) {
77
+ const index = backends.findIndex((b) => b.id === id);
78
+ if (index !== -1)
79
+ backends.splice(index, 1);
80
+ },
81
+ registerPluginBackend(backend) {
82
+ // 分域律执法(03 §2.7):撞宿主域 id 顶替拒——比保留 id 名单更根治
83
+ // (名单漏一项即穿,分域无此面;07 §4 宿主后端恒在场条款承载)
84
+ if (backends.some((b) => b.id === backend.id)) {
85
+ throw new BaseError('CHANNEL_BACKEND_RESERVED', `后端 id「${backend.id}」是宿主域后端——插件结构性不可顶替(03 §2.7 分域律;07 §4 宿主后端恒在场),请换 id 注册`);
86
+ }
87
+ // 插件域内按 id 后写胜出(upsert 原位顶替——扇出序稳定不移尾;同
88
+ // registerCommand 换装哲学:同 id 顶替 = 显式换装后端正道)
89
+ const index = pluginBackends.findIndex((b) => b.id === backend.id);
90
+ if (index === -1)
91
+ pluginBackends.push(backend);
92
+ else
93
+ pluginBackends[index] = backend;
94
+ // disposer 三律②:仅当仍是本后端时摘除(indexOf 身份闸——同 id 后写
95
+ // 顶替后旧 disposer 调用为无操作)
96
+ return () => {
97
+ const at = pluginBackends.indexOf(backend);
98
+ if (at !== -1)
99
+ pluginBackends.splice(at, 1);
100
+ };
101
+ },
102
+ listPluginBackendIds() {
103
+ return pluginBackends.map((b) => b.id);
104
+ },
105
+ registerSession(sessionId) {
106
+ registry.registerSession(sessionId);
107
+ },
108
+ unregisterSession(sessionId) {
109
+ registry.unregisterSession(sessionId);
110
+ uiCore.closeSession(sessionId);
111
+ },
112
+ hasSession(sessionId) {
113
+ return registry.has(sessionId);
114
+ },
115
+ focus(sessionId) {
116
+ return registry.focus(sessionId);
117
+ },
118
+ isFocused(sessionId) {
119
+ return registry.isFocused(sessionId);
120
+ },
121
+ get focusedId() {
122
+ return registry.focusedId;
123
+ },
124
+ emit(env) {
125
+ const focused = registry.isFocused(env.sessionId);
126
+ // 信封路由双域合流扇出(聚焦全渲染/非聚焦摘要行——形态归后端)
127
+ for (const b of allBackends())
128
+ b.onEnvelope?.(env, focused);
129
+ },
130
+ notify(sessionId, message, notifyOpts) {
131
+ // notify 非阻塞不分会话呈现位——sessionId 位保留给呈现侧路由(后端自决)
132
+ void sessionId;
133
+ uiCore.notify(message, notifyOpts);
134
+ },
135
+ confirm(sessionId, message, askOpts) {
136
+ return uiCore.confirm(sessionId, message, askOpts);
137
+ },
138
+ select(sessionId, message, choices, askOpts) {
139
+ return uiCore.select(sessionId, message, choices, askOpts);
140
+ },
141
+ input(sessionId, message, askOpts) {
142
+ return uiCore.input(sessionId, message, askOpts);
143
+ },
144
+ askApproval(sessionId, request, askOpts) {
145
+ return uiCore.askApproval(sessionId, request, askOpts);
146
+ },
147
+ setStatus(sessionId, status) {
148
+ uiCore.setStatus(sessionId, status);
149
+ },
150
+ setWidget(sessionId, node) {
151
+ uiCore.setWidget(sessionId, node);
152
+ },
153
+ hasAudience() {
154
+ return uiCore.hasAudience();
155
+ },
156
+ pendingAsks(sessionId) {
157
+ return uiCore.pending(sessionId);
158
+ },
159
+ registerCommand(name, handler, description) {
160
+ return commands.register(name, handler, description);
161
+ },
162
+ dispatchCommand(input, sessionId) {
163
+ return commands.dispatch(input, sessionId);
164
+ },
165
+ listCommands() {
166
+ return commands.list();
167
+ },
168
+ };
169
+ }
170
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../../../src/channels/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * 三源合一补全器(07 §4.1 引擎节件 6(组件与呈现装配件)):token 判据单源 + 前缀路由。
3
+ *
4
+ * 路由序(@ 优先 → 命令名 → 参数段):
5
+ * - @ 前缀 token → mention 源(任意位置——命令参数段内也可 mention 文件);
6
+ * - 首逻辑行行首 / 前缀 token(光标在首 token 内)→ 命令名源;
7
+ * - 首行 /xxx 命令名已终结后的 token → 命令参数源(带命令名上下文);
8
+ * - 其余 null(普通对话文本不补——弹层不显)。
9
+ *
10
+ * 源注入面(缺省无源——装配按需接):命令名源注入查询函数(装配接
11
+ * CommandRegistry.list())、命令参数源注入条目(不发明注册面——03 §2.2
12
+ * registerCommand 签名三参数无 schema)、@ 文件段源实机行走归装配批。
13
+ */
14
+ import type { AutocompleteContext, AutocompleteItem, AutocompleteResult } from './provider.js';
15
+ /** 三源注入面 */
16
+ export interface AutocompleteSources {
17
+ /** 命令名源(query = 去斜杠前缀;返回已过滤条目) */
18
+ readonly commands?: (query: string) => readonly AutocompleteItem[];
19
+ /** 命令参数源(带命令名上下文;query = 当前参数 token 原文) */
20
+ readonly commandArguments?: (command: string, query: string) => readonly AutocompleteItem[];
21
+ /** @-mention 源(query = 去 @ 前缀;文件段实机行走归装配批) */
22
+ readonly mentions?: (query: string) => readonly AutocompleteItem[];
23
+ }
24
+ /** 三源合一补全器 */
25
+ export declare class CombinedAutocompleteProvider {
26
+ private readonly sources;
27
+ constructor(sources?: AutocompleteSources);
28
+ /** 取补全(无 token / 无对应源 / 源空 → null——弹层不显) */
29
+ getCompletions(context: AutocompleteContext): AutocompleteResult | null;
30
+ /** 源结果收口(空源 / 空条目统一 null) */
31
+ private collect;
32
+ }
@@ -0,0 +1,43 @@
1
+ import { firstTokenRange, tokenAtCursor } from './token.js';
2
+ /** 三源合一补全器 */
3
+ export class CombinedAutocompleteProvider {
4
+ sources;
5
+ constructor(sources = {}) {
6
+ this.sources = sources;
7
+ }
8
+ /** 取补全(无 token / 无对应源 / 源空 → null——弹层不显) */
9
+ getCompletions(context) {
10
+ const line = context.lines[context.cursorLine] ?? '';
11
+ const token = tokenAtCursor(line, context.cursorCol);
12
+ if (token === null || token.text === '')
13
+ return null; // 无 token 段——不补
14
+ // 路由一:@ 前缀(任意位置——命令参数段内也可 mention 文件)
15
+ if (token.text.startsWith('@')) {
16
+ return this.collect(this.sources.mentions?.(token.text.slice(1)), token.start, token.end);
17
+ }
18
+ // 命令段判据只在首逻辑行(多行输入的斜杠命令 = 首行起手式)
19
+ if (context.cursorLine !== 0)
20
+ return null;
21
+ const first = firstTokenRange(line);
22
+ if (first === null)
23
+ return null; // 行首无 token(光标 token 不在行首矛盾——防御位)
24
+ if (token.start === first.start) {
25
+ // 路由二:光标就在首 token 内且 / 前缀——命令名段
26
+ if (!token.text.startsWith('/'))
27
+ return null; // 首 token 非命令——普通文本不补
28
+ return this.collect(this.sources.commands?.(token.text.slice(1)), token.start, token.end);
29
+ }
30
+ // 路由三:首 token 是已终结命令(/xxx)——光标 token 属参数段
31
+ const firstText = line.slice(first.start, first.end);
32
+ if (!firstText.startsWith('/'))
33
+ return null; // 行首非命令——后续 token 也不补
34
+ return this.collect(this.sources.commandArguments?.(firstText.slice(1), token.text), token.start, token.end);
35
+ }
36
+ /** 源结果收口(空源 / 空条目统一 null) */
37
+ collect(items, replaceStart, replaceEnd) {
38
+ if (items === undefined || items.length === 0)
39
+ return null;
40
+ return { items, replaceStart, replaceEnd };
41
+ }
42
+ }
43
+ //# sourceMappingURL=autocomplete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autocomplete.js","sourceRoot":"","sources":["../../../../../../../src/channels/tui/autocomplete/autocomplete.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAY5D,cAAc;AACd,MAAM,OAAO,4BAA4B;IACtB,OAAO,CAAsB;IAE9C,YAAY,UAA+B,EAAE;QAC3C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,4CAA4C;IAC5C,cAAc,CAAC,OAA4B;QACzC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACrD,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC,CAAC,gBAAgB;QAEtE,sCAAsC;QACtC,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5F,CAAC;QAED,iCAAiC;QACjC,IAAI,OAAO,CAAC,UAAU,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1C,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC,CAAC,kCAAkC;QACnE,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;YAChC,gCAAgC;YAChC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC,CAAC,sBAAsB;YACpE,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5F,CAAC;QACD,0CAA0C;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QACrD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC,CAAC,sBAAsB;QACnE,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/G,CAAC;IAED,6BAA6B;IACrB,OAAO,CACb,KAA8C,EAC9C,YAAoB,EACpB,UAAkB;QAElB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC3D,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC;IAC7C,CAAC;CACF"}
@@ -0,0 +1,18 @@
1
+ import type { AutocompleteItem } from './provider.js';
2
+ /** 源构造选项 */
3
+ export interface FileMentionSourceOptions {
4
+ /** 相对段的锚定根(装配注入 cwd) */
5
+ readonly basePath: string;
6
+ /** 条目帽(缺省 50) */
7
+ readonly maxItems?: number;
8
+ }
9
+ /** @ 文件段补全源:`mentions` 源协议面的实机适配(注入 autocomplete.mentions) */
10
+ export declare class FileMentionSource {
11
+ private readonly basePath;
12
+ private readonly maxItems;
13
+ constructor(options: FileMentionSourceOptions);
14
+ /** 源适配面(query = 去 @ 前缀的 token 内文——可能带引号头) */
15
+ readonly get: (query: string) => readonly AutocompleteItem[];
16
+ /** 列举目录解析(相对段对 basePath;~/ 家目录;/ 起绝对位) */
17
+ private resolveSearchDir;
18
+ }
@@ -0,0 +1,107 @@
1
+ /**
2
+ * @ 文件段补全源(07 §4.1 补全三合一第三源——mentions 源的实机行走件)。
3
+ *
4
+ * 语义承 berry 蓝本 getFileSuggestions 的 v1 子集:
5
+ * - **目录列举 + 前缀过滤**(非模糊行走——fuzzy 全库发现随 fd 批挂账,
6
+ * `BERRY_AGENT_FD_PATH` 环境变量是其消费点、本批不触);
7
+ * - 路径段解析:`src/ap` → 列 `src` 滤 `ap`;尾 `/` = 列该目录;相对段
8
+ * 对 basePath(装配注入 cwd)、`~/` 展开家目录、`/` 起绝对位列举;
9
+ * - `.git` 跳过(版本库内脏);符号链指目录归类为目录(label 尾 `/`
10
+ * 续深——断链/不可及跳过);
11
+ * - 排序:目录优先、再 label 字典序;条目帽防大目录全量;
12
+ * - **引号形**(provider 协议条款):路径含空白或前缀已引号 → replacement
13
+ * 以 `@"…"` 包裹防尾空格击穿(tokenAtCursor 引号感知整 token 的续补位)。
14
+ *
15
+ * 件内零缓存(同一目录反复列举随实机批定 cache 策略);同步 IO——
16
+ * mentions 源协议面是同步(单目录列举毫秒级,弹层窗口 10 行消费帽内)。
17
+ */
18
+ import { readdirSync, statSync } from 'node:fs';
19
+ import { homedir } from 'node:os';
20
+ import * as path from 'node:path';
21
+ /** 条目帽缺省(源侧规模锁——弹层自身另有窗口滚动帽) */
22
+ const DEFAULT_MAX_ITEMS = 50;
23
+ /** 引号前缀解析(`"my f` / `"my file.txt"` → 内文;`~/` 形原样) */
24
+ function parseQuotedPrefix(query) {
25
+ const head = query[0];
26
+ if (head === '"' || head === "'") {
27
+ let inner = query.slice(1);
28
+ if (inner.endsWith(head))
29
+ inner = inner.slice(0, -1); // 已敲闭引号——内文为准
30
+ return { rawPrefix: inner, isQuoted: true };
31
+ }
32
+ return { rawPrefix: query, isQuoted: false };
33
+ }
34
+ /** @ 文件段补全源:`mentions` 源协议面的实机适配(注入 autocomplete.mentions) */
35
+ export class FileMentionSource {
36
+ basePath;
37
+ maxItems;
38
+ constructor(options) {
39
+ this.basePath = options.basePath;
40
+ this.maxItems = options.maxItems ?? DEFAULT_MAX_ITEMS;
41
+ }
42
+ /** 源适配面(query = 去 @ 前缀的 token 内文——可能带引号头) */
43
+ get = (query) => {
44
+ const { rawPrefix, isQuoted } = parseQuotedPrefix(query);
45
+ // '~' 裸形与 '~/' 同为家目录根列举(filePart 空)
46
+ const isHomeRoot = rawPrefix === '~' || rawPrefix === '~/';
47
+ const slash = rawPrefix.lastIndexOf('/');
48
+ const dirPart = isHomeRoot ? '~/' : slash >= 0 ? rawPrefix.slice(0, slash + 1) : '';
49
+ const filePart = isHomeRoot ? '' : slash >= 0 ? rawPrefix.slice(slash + 1) : rawPrefix;
50
+ const searchDir = this.resolveSearchDir(dirPart);
51
+ if (searchDir === null)
52
+ return []; // 不可解析形态
53
+ let entries;
54
+ try {
55
+ entries = readdirSync(searchDir, { withFileTypes: true });
56
+ }
57
+ catch {
58
+ return []; // 缺目录 / 不可及——空集(补全静默退场)
59
+ }
60
+ const lowerPrefix = filePart.toLowerCase();
61
+ const items = [];
62
+ for (const entry of entries) {
63
+ if (entry.name === '.git')
64
+ continue; // 版本库内脏
65
+ if (!entry.name.toLowerCase().startsWith(lowerPrefix))
66
+ continue;
67
+ // 目录归类:符号链补一次 stat(断链/竞态不可及——跳过)
68
+ let isDirectory = entry.isDirectory();
69
+ if (!isDirectory && entry.isSymbolicLink()) {
70
+ try {
71
+ isDirectory = statSync(path.join(searchDir, entry.name)).isDirectory();
72
+ }
73
+ catch {
74
+ continue;
75
+ }
76
+ }
77
+ // replacement 保用户敲的 dirPart 形(~/ 与绝对形原样续接)
78
+ const pathValue = `${dirPart}${entry.name}${isDirectory ? '/' : ''}`;
79
+ items.push({
80
+ label: `${entry.name}${isDirectory ? '/' : ''}`,
81
+ replacement: `@${isQuoted || /\s/.test(pathValue) ? `"${pathValue}"` : pathValue}`,
82
+ });
83
+ }
84
+ // 目录优先、再 label 字典序(承 berry 排序语义)
85
+ items.sort((a, b) => {
86
+ const aDir = a.label.endsWith('/');
87
+ const bDir = b.label.endsWith('/');
88
+ if (aDir !== bDir)
89
+ return aDir ? -1 : 1;
90
+ return a.label.localeCompare(b.label);
91
+ });
92
+ return items.slice(0, this.maxItems);
93
+ };
94
+ /** 列举目录解析(相对段对 basePath;~/ 家目录;/ 起绝对位) */
95
+ resolveSearchDir(dirPart) {
96
+ if (dirPart === '' || dirPart === './')
97
+ return path.resolve(this.basePath, dirPart);
98
+ if (dirPart === '~/')
99
+ return homedir();
100
+ if (dirPart.startsWith('~/'))
101
+ return path.resolve(homedir(), dirPart.slice(2));
102
+ if (dirPart.startsWith('/'))
103
+ return path.resolve(dirPart);
104
+ return path.resolve(this.basePath, dirPart);
105
+ }
106
+ }
107
+ //# sourceMappingURL=file-mentions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-mentions.js","sourceRoot":"","sources":["../../../../../../../src/channels/tui/autocomplete/file-mentions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * 补全弹层件(07 §4.1 引擎节件 6(组件与呈现装配件)):候选列表浮层——输入框上方按多行输入件
3
+ * 坐标定位(定位 anchor 由 TuiBackend 锚定注册表承载——批 10e-2 已落;
4
+ * 本件是纯内容——只画列表)。
5
+ *
6
+ * - refresh 驱动:装配层在每次输入变更后调(provider 取补全——无补全弹层
7
+ * 不显);候选窗口 10 行帽 + 高亮跟随滚动;
8
+ * - 键面:↑/↓ 循环换高亮、enter/tab 应用、escape 关本轮(后续输入再 refresh
9
+ * 重开);其余键不消费(穿透回 Editor 继续输入——弹层随下次 refresh 重算);
10
+ * enter 的全量输入穿透律——token 已是高亮项全文时 enter 不消费(穿透提交,
11
+ * 归编辑器——2026-09-13 真模型五轮实测定罪补)、tab 恒应用;
12
+ * - 应用 = 整 token 代换(模型 replaceToken 原语——replacement 含触发前缀
13
+ * 与引号形)。
14
+ */
15
+ import type { CellBuffer, InputEvent, Region, Renderable } from '../../engine/index.js';
16
+ import type { EditorModel } from '../editor/editor-model.js';
17
+ import type { AutocompleteProvider } from './provider.js';
18
+ /** 弹层件:provider 只读消费 + 模型代换原语调用 */
19
+ export declare class AutocompletePopup implements Renderable {
20
+ private result;
21
+ private activeIndex;
22
+ private windowStart;
23
+ private readonly provider;
24
+ private readonly model;
25
+ constructor(provider: AutocompleteProvider, model: EditorModel);
26
+ /** 弹层在场态(无补全不显) */
27
+ get visible(): boolean;
28
+ /** 高亮下标(测试观测面) */
29
+ get activeItemIndex(): number;
30
+ /** 重取补全(每次输入变更后装配调——无补全自然隐藏) */
31
+ refresh(): void;
32
+ /** 量高:可见条目数(不可见 = 0——浮层不占布局) */
33
+ measure(width: number): number;
34
+ /** 落位:铺底空格 → 可见窗条目行(高亮反色 + 说明右对齐) */
35
+ render(buffer: CellBuffer, region: Region): void;
36
+ /** 事件分发(弹层可见才有意义):↑/↓ / enter / tab / escape,其余穿透 */
37
+ handleEvent(event: InputEvent): boolean;
38
+ /** 高亮循环移动 + 窗口跟随(10 行帽外的条目滚动入窗) */
39
+ private moveActive;
40
+ /** 应用选中项:整 token 代换(模型原语——光标落代换尾) */
41
+ private applySelection;
42
+ /**
43
+ * 全量输入判定:光标 token 现文本 === 高亮项 replacement 全文(弹层可见期
44
+ * 间输入变更必经 refresh 重开——本判定取值恒新鲜,无陈旧区间风险)。
45
+ */
46
+ private selectionAlreadyTyped;
47
+ }