lark-remote 0.5.7 → 0.5.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +35 -0
- package/dist/bridge/index.d.ts +47 -7
- package/dist/bridge/index.js +300 -129
- package/dist/bridge/queue-manager.d.ts +6 -0
- package/dist/bridge/queue-manager.js +61 -63
- package/dist/card/approval-render.js +2 -1
- package/dist/card/bash-card-session.d.ts +0 -1
- package/dist/card/bash-card-session.js +0 -8
- package/dist/card/bash-renderer.js +2 -1
- package/dist/card/card-budget.js +15 -19
- package/dist/card/card-session.d.ts +3 -13
- package/dist/card/card-session.js +4 -18
- package/dist/card/card-shared.d.ts +11 -0
- package/dist/card/card-shared.js +23 -13
- package/dist/card/run-card-session.d.ts +0 -1
- package/dist/card/run-card-session.js +0 -6
- package/dist/card/run-renderer.d.ts +11 -10
- package/dist/card/run-renderer.js +198 -35
- package/dist/card/run-state.d.ts +29 -2
- package/dist/card/run-state.js +23 -4
- package/dist/card/text-truncate.d.ts +3 -5
- package/dist/card/text-truncate.js +3 -5
- package/dist/card/tool-render.js +7 -21
- package/dist/common/tool-summary.d.ts +8 -0
- package/dist/common/tool-summary.js +38 -20
- package/dist/common/turn-failure.d.ts +13 -0
- package/dist/common/turn-failure.js +18 -0
- package/dist/index.js +13 -14
- package/dist/order/index.d.ts +2 -0
- package/dist/order/index.js +2 -0
- package/dist/router/card-helpers.js +23 -42
- package/dist/router/config/codex.js +2 -3
- package/dist/router/config/common/model-patch.d.ts +8 -0
- package/dist/router/config/common/model-patch.js +13 -0
- package/dist/router/config/common/render.js +30 -77
- package/dist/router/config/dsh.js +2 -1
- package/dist/router/config/kimi.js +3 -3
- package/dist/router/index.d.ts +0 -11
- package/dist/router/index.js +119 -360
- package/dist/router/order-exec-dispatch.js +2 -1
- package/dist/router/usage-format.d.ts +5 -0
- package/dist/router/usage-format.js +1 -1
- package/dist/runner/common/defaults.d.ts +2 -0
- package/dist/runner/common/defaults.js +3 -0
- package/dist/runner/common/jsonrpc/connection-manager.js +1 -1
- package/dist/runner/dsh/client.d.ts +15 -0
- package/dist/runner/dsh/client.js +28 -2
- package/dist/runner/dsh/goal-view.d.ts +36 -0
- package/dist/runner/dsh/goal-view.js +106 -0
- package/dist/runner/dsh/runner.js +51 -2
- package/dist/runner/index.d.ts +1 -1
- package/dist/runner/types.d.ts +59 -1
- package/dist/runner/types.js +9 -0
- package/dist/session/claude/session-index.d.ts +0 -4
- package/dist/session/claude/session-index.js +0 -8
- package/dist/session/dsh/sessions.js +58 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,41 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.5.9] - 2026-10-22
|
|
9
|
+
|
|
10
|
+
### 新增
|
|
11
|
+
|
|
12
|
+
- **运行卡片看得出长期目标跑到哪了**:DSH 会话可以带一个跨回合自动续跑的目标(objective / phase / 轮次)。此前卡片只看单个回合,目标还在续跑时你从卡上看不出来。现在状态行下方直接显示 `🎯 目标进行中 · 第 r/N 轮` 与目标摘要,长目标收进折叠面板并保留全文,回合开始就能看见而不是等收尾;摘要与轮次来自宿主投影,卡片不自行推断
|
|
13
|
+
- **`goal_continuing` 终态**:本轮结束但目标仍 active 时,卡片标题写「本轮结束(目标继续)」,摘要首行同调,并附一句「宿主会自动开始第 r+1 轮」。它与「已完成」是两件事:任务还在跑
|
|
14
|
+
|
|
15
|
+
### 修复
|
|
16
|
+
|
|
17
|
+
- **本轮结束不再被当成任务完成**:目标仍 active 时宿主会立刻起下一轮,会话永远不空闲。旧实现按回合收尾,卡片写着「已完成」而任务还在跑,你随后点压缩会被服务端拒。现在终态与按钮都以目标为准,这类卡片不给压缩按钮
|
|
18
|
+
- **中断后的卡片上压缩按钮不再是死按钮**:可压缩记录改在运行收尾的 `finally` 里写,且在「这个工作区的槽位还归不归本轮」守卫之外。停止(`/stop`、卡片上的停止按钮、抢占式立即执行)都会先摘掉槽位,等收尾走到守卫时已经不成立——记录跟着守卫走就永远不落,中断后的终态卡点压缩一律回「该任务已结束或不属于当前会话」。渲染侧共用同一判据:本轮没有会话、开跑前也没有会话时不渲染按钮,不给一个注定失败的点击
|
|
19
|
+
- **`/stop` 在多个工作区并行时不再假报已停止**:槽位按工作区为键,旧实现停在第一条命中就返回,只停一个却回「已停止」,另一个无声继续。现在遍历所有命中的运行与后台任务,并把实际停止数量回报出来(多条时提示已停止 N 个);按 runId 停某一条仍然只停那一条
|
|
20
|
+
- **停止不会把配置变更多拖一轮**:中断时不再立即回收常驻的 runner 实例——队列链可能在等待窗口里推进下一条消息并拿走同一实例,立即回收会让那条回合并无人托管长驻连接,进程残留到空闲超时且占着写锁。改为只标记待替换,由下一次即将开跑、且该工作区确实空闲时换新实例;只看一眼的调用(探压缩能力、杀后台任务)不会被顺手换实例
|
|
21
|
+
- **排队卡不再停在旧状态**:移除排队条目与「已撤销」卡更新收口到同一处,调用方不再需要手工配对(漏一处就永久停在「等待中」,而映射已被消费、之后再无修正机会);卡片的更新请求失败会重试一次,一次网络抖动不再让卡停在旧视图
|
|
22
|
+
|
|
23
|
+
### 变更
|
|
24
|
+
|
|
25
|
+
- **英文架构文档补齐本轮叙述**:停止范围与中断交接、可压缩记录与槽位所有权解耦、按钮可见性判据、队列移除与撤销卡收口,以及目标终态与目标视图,中英两侧一致,不再一边落后
|
|
26
|
+
|
|
27
|
+
## [0.5.8] - 2026-10-21
|
|
28
|
+
|
|
29
|
+
### 修复
|
|
30
|
+
|
|
31
|
+
- **DSH 的 `/resume` 列表卡看得出会话内容**:此前 DSH 会话的列表卡只有 session id 和时间,必须逐条点进详情才知道哪一条是要找的会话。DSH 0.2.x 的列表响应里已带着会话标题与每轮的输入/输出,现在把它们映射成「标题 / 最近输入 / 最后输出」直接渲染,行上有预览就不再逐条去拉分页详情(那一次会按上限把整段历史拉回来);字段缺失或标题只是占位符时回退原有行为。详情卡头部同样优先用服务端的末轮输入作「最近输入」,并在它与会话标题不同时分成两段展示,不再把用户自己说的话挂在「AI 标题」下面
|
|
32
|
+
- **后台任务卡里的命令不再被截断**:活过本轮的后台任务(终端里起的后台进程)原先按固定字数截断,用户没法核对卡上那条命令到底是要停哪个。现在短命令内联展示、中等长度用代码块整段展示、只有确实很长的脚本或链式命令才收进折叠面板,且面板里保留完整原文——命令正是你要核对、要复制的对象,任何情况下不再 truncate
|
|
33
|
+
- **停止按钮不再被挤成「🟥…」**:命令与停止按钮原先并排同一行(命令列 `grow`、按钮列 `auto`),长命令的最小内容宽度会把按钮压成一个色块。现在命令独占一行,停止按钮在下一行独占一列
|
|
34
|
+
- **运行卡片收尾后保留状态行**:终态原先会把「⏱ 耗时 · 🧰 步数 · 📊 上下文」整行去掉,回看卡片时看不出这一跑花了多久、做了多少步。现在保留:耗时定格,步数与上下文显示该回合最后一次投影的快照
|
|
35
|
+
|
|
36
|
+
### 变更
|
|
37
|
+
|
|
38
|
+
- **模型输出被服务方内容审核截断时不再算「运行出错」,并会自动续跑一次**:上游把 `finish_reason: content_filter` 归一成普通错误,它既不在默认的重试判据里(空响应/限流/服务错误/超时/传输),也不会触发换模型,于是一次多为误报的判定就把整个回合判死——跑了很久的回合在最后一步被截断,已写入磁盘的改动都还在,卡片上却只有一句英文内部报文。现在错误卡说明三件事:谁拦的、改动还在、下一步可做什么(重试仍被拦截时换模型或稍后再试);桥接层同时在同一会话补一条「从上次中断的位置继续,不要重复已完成的步骤」,只补一次,且若运行期间会话指针已被 `/new`、`/resume` 移动过就跳过,避免把旧会话接回来
|
|
39
|
+
- **DSH 在卡片上的显示名统一为 `DSH`**:各 agent 的显示名收敛到同一张表,启动注册与没有注册表时的回退路径共用同一份数据,不再出现同一 agent 在不同位置叫法不同
|
|
40
|
+
- **重复实现单源化,无行为变化**:档位取中位、工具摘要、卡片头部/按钮/字段行、队列管理与配置卡渲染等此前写了两遍的实现合并为单一来源;测试专用生产钩子移除;同主题测试套件合并、共享夹具抽出(用例覆盖不减)
|
|
41
|
+
- **文档里的测试锚点改指存活文件**:套件合并删掉了若干测试文件,贡献指南与架构设计文档按路径点名的锚点因此指向不存在的路径,已改指承接其覆盖的文件。无行为变化
|
|
42
|
+
|
|
8
43
|
## [0.5.7] - 2026-10-20
|
|
9
44
|
|
|
10
45
|
### 新增
|
package/dist/bridge/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type { AgentRegistry } from '../runner/registry.js';
|
|
|
3
3
|
import type { SessionReaderRegistry, SessionStore } from '../session/index.js';
|
|
4
4
|
import type { AppConfig } from '../config/index.js';
|
|
5
5
|
import { type RunCardChannel } from '../card/run-card-session.js';
|
|
6
|
-
import type
|
|
6
|
+
import { type RunTerminal } from '../card/run-state.js';
|
|
7
7
|
import { type AgentKind, type StopOutcome } from '../runner/types.js';
|
|
8
8
|
import { QueueManager, type QueuedTask, type EnqueueOptions, type AgentBinding, type ExecutingInfo } from './queue-manager.js';
|
|
9
9
|
import type { InboundMediaPayload } from '../connector/index.js';
|
|
@@ -49,6 +49,8 @@ export interface CommandResult {
|
|
|
49
49
|
/** Detailed result of one interrupt, for callers that must not over-promise. */
|
|
50
50
|
export interface InterruptOutcome {
|
|
51
51
|
stopped: boolean;
|
|
52
|
+
/** 本次实际停掉的 run 数(activeRuns + bash)。多个 workspace 并行时可能 >1。 */
|
|
53
|
+
stoppedCount?: number;
|
|
52
54
|
agentKind?: AgentKind;
|
|
53
55
|
/** Present for DSH: what the remote stop actually achieved. */
|
|
54
56
|
stop?: StopOutcome;
|
|
@@ -159,12 +161,11 @@ export declare class Bridge {
|
|
|
159
161
|
*/
|
|
160
162
|
private compactableRuns;
|
|
161
163
|
/**
|
|
162
|
-
* 终态卡片的渲染快照(runId → state + options
|
|
163
|
-
*
|
|
164
|
-
*
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
* 受 MAX_BLOCKS 约束(几十 KB 以内),用户只会点刚收到的卡。
|
|
164
|
+
* 终态卡片的渲染快照(runId → state + options):run 结束后 activeRuns 已
|
|
165
|
+
* 清空,而卡片上的「⏹ 停止」后台任务按钮(job.kill)还活着,需要按 runId
|
|
166
|
+
* 反查该 run 的 sessionId/cwd 才能停对任务。只保留最近若干条:单条快照受
|
|
167
|
+
* MAX_BLOCKS 约束(几十 KB 以内),用户只会点刚收到的卡;超出窗口的旧卡
|
|
168
|
+
* 会得到明确的「记录已回收」提示,不假装任务仍在。
|
|
168
169
|
*/
|
|
169
170
|
private runCardSnapshots;
|
|
170
171
|
private static readonly RUN_CARD_SNAPSHOT_MAX;
|
|
@@ -349,6 +350,14 @@ export declare class Bridge {
|
|
|
349
350
|
runId?: string;
|
|
350
351
|
cwd?: string;
|
|
351
352
|
}): Promise<InterruptOutcome>;
|
|
353
|
+
/**
|
|
354
|
+
* 停掉一条已注册的 active run:置终态、停 runner、摘槽位、标 stale、
|
|
355
|
+
* 归零该 cwd 的队列执行计数。返回 runner 的停止结果(DSH 才有)。
|
|
356
|
+
*
|
|
357
|
+
* 只做「这一条 run」的事——跨多个 workspace 的遍历在调用方,避免再次
|
|
358
|
+
* 出现「停第一条就 return」的漏停。
|
|
359
|
+
*/
|
|
360
|
+
private interruptActiveRun;
|
|
352
361
|
/** Send a result message to the user (§7). Returns true on success, false on failure. */
|
|
353
362
|
sendResult(result: CommandResult, ctx: CommandContext): Promise<boolean>;
|
|
354
363
|
/**
|
|
@@ -416,7 +425,22 @@ export declare class Bridge {
|
|
|
416
425
|
forwardToClaude(message: string, ctx: CommandContext, opts?: {
|
|
417
426
|
cwdOverride?: string;
|
|
418
427
|
binding?: AgentBinding;
|
|
428
|
+
autoRetry?: boolean;
|
|
419
429
|
}): Promise<void>;
|
|
430
|
+
/**
|
|
431
|
+
* 内容审核截断后的单次自动续跑。
|
|
432
|
+
*
|
|
433
|
+
* DSH 把上游 `finish_reason: content_filter` 归一成 PI_AI_ERROR:既不在默认
|
|
434
|
+
* 重试码里(EMPTY_RESPONSE/RATE_LIMIT/SERVER/TIMEOUT/TRANSPORT),也不会换模型,
|
|
435
|
+
* 于是一次(多数是误报的)判定就把整个 turn 判死。2026-10-21 现场:60 步、
|
|
436
|
+
* 10 分钟的 turn 在最后一步被截断,已写入的文件还在,用户只看到「运行出错」
|
|
437
|
+
* 加一句英文报文。
|
|
438
|
+
*
|
|
439
|
+
* 桥侧不改 dsh 的重试策略,改用「同一 session 补一条继续提示」:审核是概率
|
|
440
|
+
* 判定,重采样通常能过;模型从历史里接着做,不必重跑已完成的工作。
|
|
441
|
+
* 只续一次——续跑仍被截断就停在错误卡,不进入无限重试。
|
|
442
|
+
*/
|
|
443
|
+
private retryAfterContentFilter;
|
|
420
444
|
/**
|
|
421
445
|
* Step 1 of forwardToClaude: Create run session components.
|
|
422
446
|
* Returns runId, cardSession, and activeRun object for tracking.
|
|
@@ -541,6 +565,22 @@ export declare class Bridge {
|
|
|
541
565
|
* 先 delete 再 set 以刷新位置)。
|
|
542
566
|
*/
|
|
543
567
|
private recordCompactableRun;
|
|
568
|
+
/**
|
|
569
|
+
* 终态 Compact 记账:把本次 run 实际使用的 sessionId 记进
|
|
570
|
+
* {@link compactableRuns},供终态卡上的 Compact 按钮按 runId 反查。
|
|
571
|
+
*
|
|
572
|
+
* 调用点固定在 `finalizeRun` 的 `finally` 里、**槽位所有权守卫之外**。
|
|
573
|
+
* 所有权守卫只回答「cwd 槽位还归不归本 run」(决定能否删槽位 / evict
|
|
574
|
+
* runner);记账回答「本次 run 结束了吗、用的哪个 sessionId」。两者在不同
|
|
575
|
+
* 维度上:外部中断(`/stop`、停止卡按钮、`queue.immediate`)会先摘槽位,
|
|
576
|
+
* 记账若跟着守卫走就永远不会落,中断卡片的按钮必然反查不到(中断
|
|
577
|
+
* 后点 Compact 一律回「该任务已结束或不属于当前会话」)。
|
|
578
|
+
*
|
|
579
|
+
* 覆盖所有终态入口(正常结束、error、interrupted、idle_timeout、
|
|
580
|
+
* goal_continuing)——这些卡片都渲染 Compact 按钮(`goal` 仍 active 时
|
|
581
|
+
* 除外)。记账失败不能影响清理,故内部兜错。
|
|
582
|
+
*/
|
|
583
|
+
private recordCompactableRunForTerminal;
|
|
544
584
|
/**
|
|
545
585
|
* 按 runId 反查可压缩 run 记录(跨 cwd 扫描)。
|
|
546
586
|
*
|