lark-remote 0.1.6 → 0.1.8

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 (216) hide show
  1. package/CHANGELOG.md +51 -1
  2. package/README.en.md +9 -1
  3. package/README.md +14 -2
  4. package/dist/bridge/approval-coordinator.d.ts +71 -34
  5. package/dist/bridge/approval-coordinator.js +225 -41
  6. package/dist/bridge/inbound-media.d.ts +62 -0
  7. package/dist/bridge/inbound-media.js +282 -0
  8. package/dist/bridge/index.d.ts +97 -13
  9. package/dist/bridge/index.js +227 -87
  10. package/dist/bridge/queue-manager.d.ts +2 -1
  11. package/dist/bridge/queue-manager.js +1 -0
  12. package/dist/card/approval-render.js +294 -36
  13. package/dist/card/bash-card-session.d.ts +2 -24
  14. package/dist/card/bash-card-session.js +6 -73
  15. package/dist/card/bash-renderer.js +2 -3
  16. package/dist/card/card-budget.js +29 -75
  17. package/dist/card/card-session.d.ts +48 -0
  18. package/dist/card/card-session.js +86 -0
  19. package/dist/card/card-shared.d.ts +7 -16
  20. package/dist/card/card-shared.js +7 -30
  21. package/dist/card/run-card-session.d.ts +2 -55
  22. package/dist/card/run-card-session.js +6 -104
  23. package/dist/card/run-renderer.d.ts +7 -0
  24. package/dist/card/run-renderer.js +116 -238
  25. package/dist/card/run-state.d.ts +13 -0
  26. package/dist/card/run-state.js +25 -16
  27. package/dist/card/text-truncate.d.ts +13 -12
  28. package/dist/card/text-truncate.js +13 -63
  29. package/dist/common/fs.d.ts +8 -0
  30. package/dist/common/fs.js +17 -0
  31. package/dist/common/guards.d.ts +0 -20
  32. package/dist/common/guards.js +0 -43
  33. package/dist/common/sleep.d.ts +2 -0
  34. package/dist/common/sleep.js +5 -0
  35. package/dist/common/truncate.d.ts +39 -0
  36. package/dist/common/truncate.js +92 -0
  37. package/dist/config/codex-config.d.ts +1 -1
  38. package/dist/config/codex-config.js +1 -1
  39. package/dist/config/index.d.ts +112 -24
  40. package/dist/config/index.js +139 -37
  41. package/dist/connector/index.d.ts +69 -2
  42. package/dist/connector/index.js +107 -1
  43. package/dist/index.js +150 -118
  44. package/dist/instance-lock.js +4 -12
  45. package/dist/order/alias-resolve.d.ts +13 -0
  46. package/dist/order/alias-resolve.js +22 -0
  47. package/dist/order/alias-store.d.ts +38 -0
  48. package/dist/order/alias-store.js +106 -0
  49. package/dist/persistence/atomic-write.d.ts +8 -2
  50. package/dist/persistence/atomic-write.js +23 -7
  51. package/dist/restart.js +2 -1
  52. package/dist/router/card-action-payload.d.ts +30 -0
  53. package/dist/router/card-action-payload.js +39 -0
  54. package/dist/router/card-helpers.d.ts +63 -0
  55. package/dist/router/card-helpers.js +146 -0
  56. package/dist/router/config/claude.js +30 -1
  57. package/dist/router/config/codex.js +29 -50
  58. package/dist/router/config/common/model-patch.d.ts +22 -0
  59. package/dist/router/config/common/model-patch.js +26 -0
  60. package/dist/router/config/common/render.js +5 -4
  61. package/dist/router/config/dsh.d.ts +51 -0
  62. package/dist/router/config/dsh.js +179 -0
  63. package/dist/router/config/index.d.ts +12 -0
  64. package/dist/router/config/index.js +28 -1
  65. package/dist/router/config/kimi.d.ts +4 -1
  66. package/dist/router/config/kimi.js +27 -0
  67. package/dist/router/config/opencode.js +18 -5
  68. package/dist/router/config/pi.js +4 -5
  69. package/dist/router/config/types.d.ts +17 -2
  70. package/dist/router/index.d.ts +76 -22
  71. package/dist/router/index.js +479 -548
  72. package/dist/router/utils.d.ts +2 -0
  73. package/dist/router/utils.js +16 -2
  74. package/dist/runner/agent-choices-common.d.ts +16 -0
  75. package/dist/runner/agent-choices-common.js +34 -0
  76. package/dist/runner/claude/runner.d.ts +47 -10
  77. package/dist/runner/claude/runner.js +117 -46
  78. package/dist/runner/claude/session.d.ts +166 -0
  79. package/dist/runner/claude/session.js +768 -0
  80. package/dist/runner/codex/app-server/protocol-types.d.ts +66 -39
  81. package/dist/runner/codex/app-server/protocol-types.js +2 -13
  82. package/dist/runner/codex/app-server/runner.d.ts +52 -59
  83. package/dist/runner/codex/app-server/runner.js +216 -338
  84. package/dist/runner/codex/app-server/translator.d.ts +8 -21
  85. package/dist/runner/codex/app-server/translator.js +45 -18
  86. package/dist/runner/codex/index.d.ts +0 -2
  87. package/dist/runner/codex/index.js +0 -2
  88. package/dist/runner/common/acp/protocol-helpers.d.ts +14 -0
  89. package/dist/runner/common/acp/protocol-helpers.js +21 -0
  90. package/dist/runner/common/acp/protocol-types.d.ts +271 -0
  91. package/dist/runner/common/acp/protocol-types.js +77 -0
  92. package/dist/runner/common/connection-based-runner.d.ts +111 -0
  93. package/dist/runner/common/connection-based-runner.js +261 -0
  94. package/dist/runner/{codex/app-server → common/jsonrpc}/client.d.ts +14 -7
  95. package/dist/runner/{codex/app-server → common/jsonrpc}/client.js +27 -18
  96. package/dist/runner/common/jsonrpc/connection-manager.d.ts +125 -0
  97. package/dist/runner/{codex/app-server → common/jsonrpc}/connection-manager.js +63 -28
  98. package/dist/runner/{codex/app-server → common/jsonrpc}/transport.d.ts +5 -4
  99. package/dist/runner/{codex/app-server → common/jsonrpc}/transport.js +18 -19
  100. package/dist/runner/common/jsonrpc/types.d.ts +32 -0
  101. package/dist/runner/common/jsonrpc/types.js +9 -0
  102. package/dist/runner/common/process-stopper.d.ts +2 -1
  103. package/dist/runner/common/process-stopper.js +1 -0
  104. package/dist/runner/common/runner-utils.d.ts +6 -13
  105. package/dist/runner/common/runner-utils.js +6 -47
  106. package/dist/runner/common/spawning-runner.d.ts +24 -70
  107. package/dist/runner/common/spawning-runner.js +98 -152
  108. package/dist/runner/dsh/client.d.ts +95 -0
  109. package/dist/runner/dsh/client.js +418 -0
  110. package/dist/runner/dsh/fake-dsh-server.d.ts +60 -0
  111. package/dist/runner/dsh/fake-dsh-server.js +156 -0
  112. package/dist/runner/dsh/index.d.ts +3 -0
  113. package/dist/runner/dsh/index.js +4 -0
  114. package/dist/runner/dsh/runner.d.ts +57 -0
  115. package/dist/runner/dsh/runner.js +191 -0
  116. package/dist/runner/dsh/translator.d.ts +28 -0
  117. package/dist/runner/dsh/translator.js +98 -0
  118. package/dist/runner/dsh/types.d.ts +155 -0
  119. package/dist/runner/dsh/types.js +14 -0
  120. package/dist/runner/index.d.ts +5 -4
  121. package/dist/runner/index.js +5 -4
  122. package/dist/runner/kimi/acp/runner.d.ts +106 -0
  123. package/dist/runner/kimi/acp/runner.js +516 -0
  124. package/dist/runner/kimi/acp/translator.d.ts +138 -0
  125. package/dist/runner/kimi/acp/translator.js +441 -0
  126. package/dist/runner/kimi/index.d.ts +1 -1
  127. package/dist/runner/kimi/index.js +1 -1
  128. package/dist/runner/opencode/acp/index.d.ts +1 -0
  129. package/dist/runner/opencode/acp/index.js +2 -0
  130. package/dist/runner/opencode/acp/runner.d.ts +121 -0
  131. package/dist/runner/opencode/acp/runner.js +429 -0
  132. package/dist/runner/opencode/acp/translator.d.ts +119 -0
  133. package/dist/runner/opencode/acp/translator.js +345 -0
  134. package/dist/runner/opencode/index.d.ts +1 -1
  135. package/dist/runner/opencode/index.js +1 -1
  136. package/dist/runner/pi/index.d.ts +1 -1
  137. package/dist/runner/pi/index.js +1 -1
  138. package/dist/runner/pi/rpc/client.d.ts +52 -0
  139. package/dist/runner/pi/rpc/client.js +114 -0
  140. package/dist/runner/pi/rpc/index.d.ts +4 -0
  141. package/dist/runner/pi/rpc/index.js +4 -0
  142. package/dist/runner/pi/rpc/protocol-types.d.ts +127 -0
  143. package/dist/runner/pi/rpc/protocol-types.js +21 -0
  144. package/dist/runner/pi/rpc/runner.d.ts +74 -0
  145. package/dist/runner/pi/rpc/runner.js +190 -0
  146. package/dist/runner/pi/rpc/translator.d.ts +55 -0
  147. package/dist/runner/pi/rpc/translator.js +258 -0
  148. package/dist/runner/probe.js +6 -1
  149. package/dist/runner/question-common.d.ts +26 -0
  150. package/dist/runner/question-common.js +42 -0
  151. package/dist/runner/registry.d.ts +7 -8
  152. package/dist/runner/registry.js +3 -4
  153. package/dist/runner/resolve-agent-choices.js +18 -59
  154. package/dist/runner/sync-agent-choices.js +16 -67
  155. package/dist/runner/types.d.ts +97 -14
  156. package/dist/session/claude/session-index.js +2 -3
  157. package/dist/session/claude/session-reader.js +3 -6
  158. package/dist/session/claude/sessions.js +43 -28
  159. package/dist/session/codex/rollout-reader.d.ts +2 -2
  160. package/dist/session/codex/rollout-reader.js +14 -17
  161. package/dist/session/codex/sessions.d.ts +1 -1
  162. package/dist/session/codex/sessions.js +2 -2
  163. package/dist/session/common/content-blocks.d.ts +7 -0
  164. package/dist/session/common/content-blocks.js +13 -9
  165. package/dist/session/common/jsonl.d.ts +8 -25
  166. package/dist/session/common/jsonl.js +126 -261
  167. package/dist/session/common/pagination.d.ts +28 -0
  168. package/dist/session/common/pagination.js +33 -0
  169. package/dist/session/dsh/index.d.ts +1 -0
  170. package/dist/session/dsh/index.js +2 -0
  171. package/dist/session/dsh/sessions.d.ts +39 -0
  172. package/dist/session/dsh/sessions.js +237 -0
  173. package/dist/session/index.d.ts +1 -0
  174. package/dist/session/index.js +1 -0
  175. package/dist/session/kimi/sessions.d.ts +34 -1
  176. package/dist/session/kimi/sessions.js +208 -98
  177. package/dist/session/opencode/sessions.d.ts +17 -3
  178. package/dist/session/opencode/sessions.js +29 -29
  179. package/dist/session/pi/sessions.d.ts +5 -1
  180. package/dist/session/pi/sessions.js +12 -16
  181. package/dist/session/session-store.d.ts +11 -1
  182. package/dist/session/session-store.js +75 -178
  183. package/dist/update/index.d.ts +2 -2
  184. package/dist/update/index.js +2 -2
  185. package/dist/update/install.d.ts +20 -2
  186. package/dist/update/install.js +51 -7
  187. package/dist/workspace/index.d.ts +4 -0
  188. package/dist/workspace/index.js +8 -1
  189. package/package.json +2 -1
  190. package/dist/runner/codex/app-server/connection-manager.d.ts +0 -56
  191. package/dist/runner/codex/argv.d.ts +0 -33
  192. package/dist/runner/codex/argv.js +0 -40
  193. package/dist/runner/codex/factory.d.ts +0 -29
  194. package/dist/runner/codex/factory.js +0 -39
  195. package/dist/runner/codex/jsonl.d.ts +0 -37
  196. package/dist/runner/codex/jsonl.js +0 -221
  197. package/dist/runner/codex/runner.d.ts +0 -66
  198. package/dist/runner/codex/runner.js +0 -129
  199. package/dist/runner/common/exec-translator.d.ts +0 -73
  200. package/dist/runner/common/exec-translator.js +0 -105
  201. package/dist/runner/kimi/jsonl.d.ts +0 -28
  202. package/dist/runner/kimi/jsonl.js +0 -143
  203. package/dist/runner/kimi/runner.d.ts +0 -49
  204. package/dist/runner/kimi/runner.js +0 -105
  205. package/dist/runner/opencode/argv.d.ts +0 -32
  206. package/dist/runner/opencode/argv.js +0 -35
  207. package/dist/runner/opencode/jsonl.d.ts +0 -68
  208. package/dist/runner/opencode/jsonl.js +0 -295
  209. package/dist/runner/opencode/runner.d.ts +0 -61
  210. package/dist/runner/opencode/runner.js +0 -93
  211. package/dist/runner/pi/jsonl.d.ts +0 -128
  212. package/dist/runner/pi/jsonl.js +0 -249
  213. package/dist/runner/pi/runner.d.ts +0 -36
  214. package/dist/runner/pi/runner.js +0 -76
  215. package/dist/session/common/catch-up.d.ts +0 -12
  216. package/dist/session/common/catch-up.js +0 -31
@@ -64,14 +64,16 @@ export interface CardActionPayload {
64
64
  requestId?: number | string;
65
65
  /** Decision for approval.respond (e.g. 'accept', 'decline', 'cancel'). */
66
66
  decision?: string;
67
- /** Scope for acceptForSession: 'turn' | 'session'. */
68
- scope?: 'turn' | 'session';
69
67
  /** Unique nonce to prevent duplicate processing. */
70
68
  nonce?: string;
71
69
  /** Permission item ID for approval.toggle. */
72
70
  permId?: string;
73
71
  /** Desired selection state for approval.toggle (card renders !current). */
74
72
  selected?: boolean;
73
+ /** Claude AskUserQuestion 问题索引(approval.answer / approval.answerSubmit)。 */
74
+ questionIndex?: number;
75
+ /** 多选组件(multi_select_static 等)回传的选中值数组(预留公共层能力)。 */
76
+ options?: string[];
75
77
  }
76
78
  /**
77
79
  * Response a cardAction handler may return to give the clicking user native
@@ -89,13 +91,17 @@ interface CardActionResponse {
89
91
  }
90
92
  export declare class CommandRouter {
91
93
  /** Valid agent kinds — single source of truth for resume.use / resume.page / cmdResume. */
92
- static readonly VALID_AGENTS: readonly ["claude", "codex", "opencode", "pi", "kimi"];
94
+ static readonly VALID_AGENTS: readonly ["claude", "codex", "opencode", "pi", "kimi", "dsh"];
93
95
  private sessionStore;
94
- private bridge;
95
- private config;
96
- private configPath;
96
+ /** 飞书桥接实例(public:测试直接访问断言,替代 as unknown as)。 */
97
+ bridge: Bridge;
98
+ /** 当前配置(public:测试直接读取断言,替代 as unknown as)。 */
99
+ config: AppConfig;
100
+ /** 配置文件的绝对路径(public:/config 保存链路与测试共用)。 */
101
+ configPath: string;
97
102
  private workspaceStore;
98
103
  private orderStore;
104
+ private aliasStore;
99
105
  private exitHandler;
100
106
  private pendingExit;
101
107
  /**
@@ -110,7 +116,8 @@ export declare class CommandRouter {
110
116
  private updateCachePath?;
111
117
  /** Injected update functions (for testability; defaults to real implementation). */
112
118
  private updateFns;
113
- private pendingConfig;
119
+ /** /config 卡片编辑暂存区(public:测试直接读取断言,替代 as unknown as)。 */
120
+ pendingConfig: AppConfig | null;
114
121
  /**
115
122
  * Monotonic counter minting unique internal keys for order.exec enqueue
116
123
  * actions. One order card can be clicked many times, so the Feishu card
@@ -131,7 +138,8 @@ export declare class CommandRouter {
131
138
  * it uses `listRegisteredAgents()` from `router/config/index.ts` (the
132
139
  * config-builder registry), which mirrors the agents with a config card.
133
140
  */
134
- private sessionReaderRegistry;
141
+ /** Session reader 注册中心(public:测试注入/读取,替代 as unknown as)。 */
142
+ sessionReaderRegistry: SessionReaderRegistry;
135
143
  /**
136
144
  * 串行化 config.* 卡片回调(2026-07-04)。
137
145
  * CardKit 2.0 input/button 回调经 `enqueueImmediate` 分发,**不进串行队列**,
@@ -148,6 +156,8 @@ export declare class CommandRouter {
148
156
  configPath: string;
149
157
  workspacePath?: string;
150
158
  ordersPath?: string;
159
+ /** 别名存储路径(<configDir>/aliases.json)。 */
160
+ aliasesPath?: string;
151
161
  exitHandler?: () => void;
152
162
  /** Spawn the detached replacement bridge process and return its pid (throws on failure). */
153
163
  restartSpawner?: () => number;
@@ -180,6 +190,11 @@ export declare class CommandRouter {
180
190
  cwdOverride?: string;
181
191
  binding?: AgentBinding;
182
192
  }): Promise<CommandResult | null>;
193
+ /**
194
+ * 一次别名展开:bridge 收到用户消息后、命令分发前调用。
195
+ * 仅 `$name` 开头的消息可能被展开;未知别名 / 非 `$` 消息原样返回。
196
+ */
197
+ expandAliasMessage(message: string): string;
183
198
  /**
184
199
  * Handle a CardKit card button click (§6.2).
185
200
  * Validates payload and dispatches to the corresponding command.
@@ -190,6 +205,9 @@ export declare class CommandRouter {
190
205
  * Routes to the appropriate bridge method based on value.cmd.
191
206
  * Returns a toast response for immediate user feedback.
192
207
  */
208
+ /** 答案类操作的统一失败反馈:重复投递(同一 nonce 第二次点击)是已生效的
209
+ * 中性事件,报 error 会误导(首次点击实际已成功)。 */
210
+ private answerFailureToast;
193
211
  private handleApprovalAction;
194
212
  /**
195
213
  * Handle queue.cancel: remove this message from the queue.
@@ -310,7 +328,7 @@ export declare class CommandRouter {
310
328
  */
311
329
  private cardLsFile;
312
330
  /** 确保 pendingConfig 已初始化(从当前 config 克隆) */
313
- private ensurePendingConfig;
331
+ ensurePendingConfig(): void;
314
332
  /**
315
333
  * 串行化 config.* 卡片回调(2026-07-04 修复 toggle 卡死 bug)。
316
334
  *
@@ -324,11 +342,14 @@ export declare class CommandRouter {
324
342
  */
325
343
  private enqueueConfigAction;
326
344
  /** 实际的 config.* 分发逻辑(在串行队列内执行) */
327
- private dispatchConfigAction;
345
+ /** config.* 卡片动作分发(public:测试直接调用,替代 as unknown as)。 */
346
+ dispatchConfigAction(value: CardActionPayload, ctx: CommandContext): Promise<CardActionResponse | void>;
328
347
  /** 设置嵌套属性值(仅修改内存对象,不写盘) */
329
- private setNestedValue;
348
+ /** 在 pendingConfig 上按 dot-separated key 设置嵌套值(config 卡片编辑用)。 */
349
+ setNestedValue(target: AppConfig, key: string, value: unknown): void;
330
350
  /** 对比原始 config 与 pendingConfig,返回变化的 key→string 映射 */
331
- private diffConfig;
351
+ /** config diff(public:测试直接调用,替代 as unknown as)。 */
352
+ diffConfig(original: AppConfig, pending: AppConfig): Record<string, string | undefined>;
332
353
  /** 递归收集差异 */
333
354
  private collectDiff;
334
355
  /**
@@ -350,7 +371,8 @@ export declare class CommandRouter {
350
371
  private propagateConfigSave;
351
372
  private executeCommand;
352
373
  cmdHelp(): CommandResult;
353
- private cmdStatus;
374
+ /** /status 实现(public:测试直接调用,替代 as any)。 */
375
+ cmdStatus(ctx: CommandContext): CommandResult;
354
376
  private cmdPs;
355
377
  private cmdStop;
356
378
  private cmdExit;
@@ -384,14 +406,27 @@ export declare class CommandRouter {
384
406
  private buildConfigSwitchCard;
385
407
  /**
386
408
  * Whether a session of the given agent kind can be compacted from a resume
387
- * card. Compact (thread/compact/start) is only implemented by the codex
388
- * app-server runner (`runCompact`), so the button is gated on
389
- * `serviceMode === 'app-server'` — exec mode spawns a fresh CLI per message
390
- * and has no persistent session to compact.
409
+ * card. Design doc §6.2-2: duck-typing — check if the runner has `runCompact`
410
+ * (codex app-server, kimi acp), instead of hardcoding agentKind === 'codex'.
391
411
  */
392
412
  private canCompactSession;
413
+ /**
414
+ * Assemble the action buttons for a resume / session-history card.
415
+ * Shared by buildAutoResumeCard, buildConfigSwitchCard, and cmdResume so the
416
+ * button set (stop / compact / new-session) follows one contract instead of
417
+ * drifting per call site.
418
+ *
419
+ * - stop: only when the session has an in-memory active run (isActive), bound
420
+ * to the real activeRun.runId so bridge.interruptCurrentRun can match.
421
+ * - compact: only when a compact-capable runner applies and the session is
422
+ * not running (a live run would occupy the runner, so compaction would
423
+ * fail). The caller passes `compact` only when canCompactSession holds.
424
+ * - new-session: when requested (always shown on resume cards).
425
+ */
426
+ private buildResumeActionButtons;
393
427
  private static readonly LS_PAGE_SIZE;
394
- private cmdLs;
428
+ /** /ls 实现(public:测试直接调用,替代 as unknown as)。 */
429
+ cmdLs(args: string[], ctx: CommandContext, offset?: number): CommandResult;
395
430
  private cmdWs;
396
431
  /**
397
432
  * L3: degraded card when a session's export is non-empty but unparseable
@@ -400,7 +435,19 @@ export declare class CommandRouter {
400
435
  * misleading "未找到". Reuses the same card-builder helpers (markdownDiv) as
401
436
  * the normal resume card; enforceCardBudget still applies at send time.
402
437
  */
403
- private cmdResume;
438
+ /**
439
+ * /resume 核心实现(public:handleResumePage / handle / resume.use 共用,
440
+ * 也是测试的直接 seam,避免测试用 @ts-expect-error 摸私有方法)。
441
+ */
442
+ /**
443
+ * DSH /resume preset 一致性校验:返回 mismatch 详情,或 undefined(一致/不可判定)。
444
+ *
445
+ * session 的 preset 在创建时固定(§2.1)。通过 listSessions 拿到目标 session 的
446
+ * agentPreset 与当前配置比对:不一致时不静默复用(返回提示),一致或查询失败
447
+ * (无法判定)时不阻断,避免 DSH 离线导致 /resume 完全不可用。
448
+ */
449
+ private dshPresetMismatch;
450
+ cmdResume(args: string[], ctx: CommandContext, offset?: number): CommandResult;
404
451
  private cmdActive;
405
452
  /**
406
453
  * Build CardKit 2.0 /active card from bridge memory (not file system).
@@ -410,8 +457,15 @@ export declare class CommandRouter {
410
457
  private buildActiveCardFromMemory;
411
458
  private cmdReconnect;
412
459
  private cmdConfig;
460
+ /**
461
+ * DSH /config 卡片构建前异步预取模型/预设目录(§4.2 动态清单)。
462
+ * 只在 defaultAgent 为 dsh 时生效;其他 agent 无 prefetch 钩子直接跳过。
463
+ * 预取失败不阻断——DshConfigBuilder 内部已回退固定兜底清单。
464
+ */
465
+ private prefetchConfigCardCatalogs;
413
466
  /** Build an interactive config card with CardKit 2.0 tabs + batch save */
414
- private buildConfigCard;
415
- private cmdOrder;
467
+ buildConfigCard(): CommandResult;
468
+ /** /order 实现(public:测试直接调用,替代 as unknown as)。 */
469
+ cmdOrder(args: string[], _ctx: CommandContext, offset?: number): CommandResult;
416
470
  }
417
- export { formatUsageStats } from './utils.js';
471
+ export {};