lark-remote 0.5.12 → 0.5.14
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 +28 -2
- package/README.en.md +1 -14
- package/README.md +1 -14
- package/dist/agent-kinds.d.ts +27 -0
- package/dist/agent-kinds.js +38 -0
- package/dist/bridge/approval-actions.d.ts +95 -0
- package/dist/bridge/approval-actions.js +104 -0
- package/dist/bridge/approval-coordinator.d.ts +1 -0
- package/dist/bridge/approval-coordinator.js +12 -24
- package/dist/bridge/final-usage.d.ts +8 -17
- package/dist/bridge/final-usage.js +1 -18
- package/dist/bridge/index.d.ts +52 -38
- package/dist/bridge/index.js +255 -433
- package/dist/bridge/queue-manager.d.ts +25 -1
- package/dist/bridge/queue-manager.js +179 -160
- package/dist/bridge/run-approval.d.ts +16 -0
- package/dist/bridge/run-approval.js +41 -0
- package/dist/bridge/run-usage.d.ts +32 -0
- package/dist/bridge/run-usage.js +87 -0
- package/dist/bridge/session-writeback.d.ts +19 -0
- package/dist/bridge/session-writeback.js +36 -0
- package/dist/card/approval-render.d.ts +3 -2
- package/dist/card/approval-render.js +3 -2
- package/dist/card/bash-card-session.js +2 -5
- package/dist/{router → card}/card-helpers.d.ts +7 -7
- package/dist/{router → card}/card-helpers.js +8 -8
- package/dist/card/card-session.d.ts +6 -2
- package/dist/card/card-session.js +28 -28
- package/dist/card/card-shared.d.ts +4 -4
- package/dist/card/card-shared.js +4 -10
- package/dist/card/collapsible.js +3 -2
- package/dist/card/final-answer-overflow.d.ts +1 -0
- package/dist/card/final-answer-overflow.js +46 -0
- package/dist/card/run-card-session.d.ts +2 -2
- package/dist/card/run-card-session.js +4 -9
- package/dist/card/run-renderer.d.ts +14 -0
- package/dist/card/run-renderer.js +126 -23
- package/dist/card/run-state.d.ts +40 -51
- package/dist/card/run-state.js +96 -34
- package/dist/card/usage-format.d.ts +30 -0
- package/dist/{router → card}/usage-format.js +3 -10
- package/dist/clone.js +6 -1
- package/dist/config/codex-config.js +4 -4
- package/dist/config/index.d.ts +18 -20
- package/dist/config/index.js +6 -20
- package/dist/config/pi-config.js +6 -4
- package/dist/connector/index.d.ts +2 -4
- package/dist/connector/index.js +7 -11
- package/dist/{runner/dsh → dsh}/auth.js +3 -4
- package/dist/dsh/home.d.ts +2 -0
- package/dist/dsh/home.js +8 -0
- package/dist/dsh/protocol.d.ts +9 -0
- package/dist/dsh/protocol.js +61 -0
- package/dist/inbound/turn-assembler.js +6 -0
- package/dist/index.js +25 -414
- package/dist/message-handlers.d.ts +26 -0
- package/dist/message-handlers.js +275 -0
- package/dist/model-catalog.d.ts +14 -0
- package/dist/model-catalog.js +25 -0
- package/dist/platform/path.d.ts +9 -0
- package/dist/platform/path.js +18 -0
- package/dist/router/active-run-usage.d.ts +4 -0
- package/dist/router/active-run-usage.js +12 -0
- package/dist/router/card-action-payload.d.ts +1 -1
- package/dist/router/card-action-payload.js +1 -1
- package/dist/router/commands/ls.d.ts +9 -0
- package/dist/router/commands/ls.js +243 -0
- package/dist/router/commands/order.d.ts +12 -0
- package/dist/router/commands/order.js +178 -0
- package/dist/router/commands/resume.d.ts +48 -0
- package/dist/router/commands/resume.js +246 -0
- package/dist/router/commands/ws.d.ts +15 -0
- package/dist/router/commands/ws.js +189 -0
- package/dist/router/config/claude.js +5 -4
- package/dist/router/config/codex.js +2 -6
- package/dist/router/config/common/render.d.ts +5 -1
- package/dist/router/config/common/render.js +6 -13
- package/dist/router/config/common/turn-idle.d.ts +2 -0
- package/dist/router/config/common/turn-idle.js +9 -0
- package/dist/router/config/dsh.d.ts +1 -1
- package/dist/router/config/index.d.ts +1 -1
- package/dist/router/config/kimi.js +2 -6
- package/dist/router/config/opencode.js +2 -6
- package/dist/router/config/types.d.ts +11 -3
- package/dist/router/index.d.ts +55 -33
- package/dist/router/index.js +233 -1376
- package/dist/router/paging.d.ts +13 -0
- package/dist/router/paging.js +20 -0
- package/dist/router/path-validation.d.ts +27 -0
- package/dist/router/path-validation.js +45 -0
- package/dist/runner/agent-choices-common.d.ts +1 -1
- package/dist/runner/claude/runner.d.ts +23 -6
- package/dist/runner/claude/runner.js +6 -20
- package/dist/runner/claude/session.js +1 -1
- package/dist/runner/codex/app-server/runner.d.ts +3 -1
- package/dist/runner/codex/app-server/translator.d.ts +13 -0
- package/dist/runner/codex/app-server/translator.js +114 -151
- package/dist/runner/common/acp/base-acp-runner.d.ts +3 -1
- package/dist/runner/common/acp/base-translator.d.ts +3 -8
- package/dist/runner/common/acp/base-translator.js +16 -7
- package/dist/runner/common/connection-based-runner.d.ts +3 -1
- package/dist/runner/common/jsonrpc/transport.js +17 -7
- package/dist/runner/common/spawning-runner.js +10 -4
- package/dist/runner/common/turn-started.d.ts +2 -0
- package/dist/runner/common/turn-started.js +10 -0
- package/dist/runner/dsh/client.d.ts +2 -10
- package/dist/runner/dsh/client.js +13 -220
- package/dist/runner/dsh/daemon.d.ts +0 -2
- package/dist/runner/dsh/daemon.js +9 -7
- package/dist/runner/dsh/errors.d.ts +5 -0
- package/dist/runner/dsh/errors.js +11 -0
- package/dist/runner/dsh/exit-cancel.d.ts +0 -2
- package/dist/runner/dsh/exit-cancel.js +2 -2
- package/dist/runner/dsh/inflight.d.ts +0 -2
- package/dist/runner/dsh/inflight.js +1 -1
- package/dist/runner/dsh/mux-stream.d.ts +26 -0
- package/dist/runner/dsh/mux-stream.js +176 -0
- package/dist/runner/dsh/runner.d.ts +21 -1
- package/dist/runner/dsh/runner.js +76 -73
- package/dist/runner/dsh/translator.d.ts +1 -11
- package/dist/runner/dsh/translator.js +1 -1
- package/dist/runner/index.d.ts +1 -1
- package/dist/runner/kimi/acp/runner.d.ts +22 -1
- package/dist/runner/kimi/acp/runner.js +83 -60
- package/dist/runner/kimi/acp/translator.js +1 -12
- package/dist/runner/opencode/acp/error-monitor.d.ts +11 -0
- package/dist/runner/opencode/acp/error-monitor.js +31 -2
- package/dist/runner/opencode/acp/runner.d.ts +3 -1
- package/dist/runner/opencode/acp/translator.js +1 -12
- package/dist/runner/pi/rpc/runner.d.ts +2 -1
- package/dist/runner/pi/rpc/translator.d.ts +2 -8
- package/dist/runner/pi/rpc/translator.js +2 -7
- package/dist/runner/probe.d.ts +1 -1
- package/dist/runner/probe.js +10 -9
- package/dist/runner/registry.d.ts +2 -20
- package/dist/runner/registry.js +0 -32
- package/dist/runner/types.d.ts +37 -155
- package/dist/runner/types.js +4 -24
- package/dist/session/claude/session-index.d.ts +11 -4
- package/dist/session/claude/session-index.js +34 -10
- package/dist/session/claude/session-reader.d.ts +1 -1
- package/dist/session/claude/sessions.d.ts +2 -2
- package/dist/session/claude/sessions.js +41 -26
- package/dist/session/codex/rollout-reader.d.ts +1 -1
- package/dist/session/codex/rollout-reader.js +14 -13
- package/dist/session/codex/sessions.d.ts +1 -1
- package/dist/session/codex/sessions.js +4 -2
- package/dist/session/common/jsonl.js +7 -1
- package/dist/session/common/pagination.d.ts +2 -0
- package/dist/session/common/pagination.js +1 -1
- package/dist/session/common/recency.d.ts +6 -0
- package/dist/session/common/recency.js +7 -5
- package/dist/session/common/two-pass.d.ts +1 -1
- package/dist/session/common/usage-accumulator.d.ts +1 -1
- package/dist/session/dsh/sessions.d.ts +1 -1
- package/dist/session/dsh/sessions.js +37 -12
- package/dist/session/kimi/sessions.d.ts +1 -1
- package/dist/session/kimi/sessions.js +37 -10
- package/dist/session/opencode/sessions.d.ts +1 -1
- package/dist/session/opencode/sessions.js +53 -48
- package/dist/session/pi/sessions.d.ts +1 -1
- package/dist/session/pi/sessions.js +23 -9
- package/dist/session/registry.d.ts +2 -1
- package/dist/session/session-store.d.ts +1 -2
- package/dist/session/session-store.js +14 -7
- package/dist/session-contract.d.ts +178 -0
- package/dist/session-contract.js +9 -0
- package/package.json +1 -1
- package/dist/router/usage-format.d.ts +0 -60
- /package/dist/{runner/dsh → dsh}/auth.d.ts +0 -0
- /package/dist/{runner/dsh → dsh}/types.d.ts +0 -0
- /package/dist/{runner/dsh → dsh}/types.js +0 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare function pageInfo(totalCount: number, offset: number, pageSize: number): {
|
|
2
|
+
totalPages: number;
|
|
3
|
+
safeOffset: number;
|
|
4
|
+
currentPage: number;
|
|
5
|
+
};
|
|
6
|
+
export declare function pageSlice<T>(items: readonly T[], offset: number, pageSize: number): {
|
|
7
|
+
totalCount: number;
|
|
8
|
+
totalPages: number;
|
|
9
|
+
safeOffset: number;
|
|
10
|
+
currentPage: number;
|
|
11
|
+
pageItems: T[];
|
|
12
|
+
hasPagination: boolean;
|
|
13
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { clampInt } from '../common/clamp.js';
|
|
2
|
+
export function pageInfo(totalCount, offset, pageSize) {
|
|
3
|
+
const totalPages = Math.max(1, Math.ceil(totalCount / pageSize));
|
|
4
|
+
const maxOffset = Math.max(0, (totalPages - 1) * pageSize);
|
|
5
|
+
const safeOffset = clampInt(offset, 0, maxOffset);
|
|
6
|
+
const currentPage = Math.floor(safeOffset / pageSize) + 1;
|
|
7
|
+
return { totalPages, safeOffset, currentPage };
|
|
8
|
+
}
|
|
9
|
+
export function pageSlice(items, offset, pageSize) {
|
|
10
|
+
const { totalPages, safeOffset, currentPage } = pageInfo(items.length, offset, pageSize);
|
|
11
|
+
return {
|
|
12
|
+
totalCount: items.length,
|
|
13
|
+
totalPages,
|
|
14
|
+
safeOffset,
|
|
15
|
+
currentPage,
|
|
16
|
+
pageItems: items.slice(safeOffset, safeOffset + pageSize),
|
|
17
|
+
hasPagination: items.length > pageSize,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=paging.js.map
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
export type PathKind = 'directory' | 'file' | 'missing' | 'unreadable';
|
|
3
|
+
export type StatResolution = {
|
|
4
|
+
ok: true;
|
|
5
|
+
stat: fs.Stats;
|
|
6
|
+
} | {
|
|
7
|
+
ok: false;
|
|
8
|
+
reason: 'missing' | 'unreadable';
|
|
9
|
+
};
|
|
10
|
+
export type DirectoryResolution = {
|
|
11
|
+
ok: true;
|
|
12
|
+
canonical: string;
|
|
13
|
+
} | {
|
|
14
|
+
ok: false;
|
|
15
|
+
reason: 'missing' | 'not_directory' | 'unreadable';
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Inspect a path without a preceding existsSync call.
|
|
19
|
+
*
|
|
20
|
+
* stat already distinguishes missing paths from files/directories and closes
|
|
21
|
+
* the exists→stat race. Permission and other IO failures stay distinguishable
|
|
22
|
+
* from a normal missing path so callers can keep their user-facing messages.
|
|
23
|
+
*/
|
|
24
|
+
export declare function statPath(target: string): StatResolution;
|
|
25
|
+
export declare function inspectPath(target: string): PathKind;
|
|
26
|
+
export declare function resolveDirectory(target: string): DirectoryResolution;
|
|
27
|
+
export declare function isDirectorySafe(target: string): boolean;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
/**
|
|
3
|
+
* Inspect a path without a preceding existsSync call.
|
|
4
|
+
*
|
|
5
|
+
* stat already distinguishes missing paths from files/directories and closes
|
|
6
|
+
* the exists→stat race. Permission and other IO failures stay distinguishable
|
|
7
|
+
* from a normal missing path so callers can keep their user-facing messages.
|
|
8
|
+
*/
|
|
9
|
+
export function statPath(target) {
|
|
10
|
+
try {
|
|
11
|
+
return { ok: true, stat: fs.statSync(target) };
|
|
12
|
+
}
|
|
13
|
+
catch (err) {
|
|
14
|
+
const code = err.code;
|
|
15
|
+
return {
|
|
16
|
+
ok: false,
|
|
17
|
+
reason: code === 'ENOENT' || code === 'ENOTDIR' ? 'missing' : 'unreadable',
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export function inspectPath(target) {
|
|
22
|
+
const resolution = statPath(target);
|
|
23
|
+
if (!resolution.ok)
|
|
24
|
+
return resolution.reason;
|
|
25
|
+
return resolution.stat.isDirectory() ? 'directory' : 'file';
|
|
26
|
+
}
|
|
27
|
+
export function resolveDirectory(target) {
|
|
28
|
+
const kind = inspectPath(target);
|
|
29
|
+
if (kind === 'missing')
|
|
30
|
+
return { ok: false, reason: 'missing' };
|
|
31
|
+
if (kind === 'unreadable')
|
|
32
|
+
return { ok: false, reason: 'unreadable' };
|
|
33
|
+
if (kind === 'file')
|
|
34
|
+
return { ok: false, reason: 'not_directory' };
|
|
35
|
+
try {
|
|
36
|
+
return { ok: true, canonical: fs.realpathSync(target) };
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return { ok: false, reason: 'unreadable' };
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export function isDirectorySafe(target) {
|
|
43
|
+
return inspectPath(target) === 'directory';
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=path-validation.js.map
|
|
@@ -1,12 +1,24 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Claude Runner 实现
|
|
3
|
+
*
|
|
4
|
+
* ClaudeRunner 从「一次一跑」(claude -p <msg> --permission-mode
|
|
5
|
+
* bypassPermissions)升级为长驻交互会话(--input-format stream-json 双向
|
|
6
|
+
* 通道),同时复用本项目已有的 ApprovalCoordinator + run 卡审批区。
|
|
7
|
+
*
|
|
8
|
+
* 架构:ClaudeRunner 是 workspace-lifetime 的薄包装,进程与协议细节在
|
|
9
|
+
* ClaudeSession(src/runner/claude/session.ts,extends SpawningRunner 复用
|
|
10
|
+
* pid 文件/killOrphan/Terminator/心跳/退出分发器机制)。每次 run() 委托
|
|
11
|
+
* session:确保进程(可 --resume)→ 写 user 消息 → 消费事件直到本 turn result。
|
|
12
|
+
*/
|
|
13
|
+
import type { AgentSessionReader } from '../../session-contract.js';
|
|
14
|
+
import { type AgentEvent, type SpawnOptions, type AgentRunner, type AgentStatusInfo } from '../types.js';
|
|
2
15
|
/**
|
|
3
16
|
* Claude Agent Runner(长驻交互模式)。
|
|
4
17
|
*
|
|
5
18
|
* 权限模式(permissionMode)在 spawn 时经 --permission-mode 生效:
|
|
6
|
-
* - 默认
|
|
7
|
-
*
|
|
8
|
-
* -
|
|
9
|
-
* 上抛 → bridge ApprovalCoordinator → run 卡审批区。
|
|
19
|
+
* - 默认 auto:低风险操作自动放行,高风险操作的 control_request 上抛 →
|
|
20
|
+
* bridge ApprovalCoordinator → run 卡审批区;
|
|
21
|
+
* - bypassPermissions:claude 内部全部放行,无 control_request(无审批卡)。
|
|
10
22
|
*/
|
|
11
23
|
export declare class ClaudeRunner implements AgentRunner {
|
|
12
24
|
readonly kind: "claude";
|
|
@@ -24,7 +36,12 @@ export declare class ClaudeRunner implements AgentRunner {
|
|
|
24
36
|
pidDir?: string;
|
|
25
37
|
cwd: string;
|
|
26
38
|
spawnHeartbeatMs?: number;
|
|
27
|
-
|
|
39
|
+
/**
|
|
40
|
+
* 由组合根(`src/index.ts`)注入,与 sessionReaderRegistry 里的**同一个**实例。
|
|
41
|
+
* claude 不在此处自己 new:那会让 runner 反向依赖 session 层(runner ↔ session
|
|
42
|
+
* 循环的一半);其余 agent 从一开始就是注入的。
|
|
43
|
+
*/
|
|
44
|
+
sessionReader: AgentSessionReader;
|
|
28
45
|
/** Claude 权限模式(官方 --permission-mode 枚举;'default'=省略参数)。 */
|
|
29
46
|
permissionMode?: string;
|
|
30
47
|
/** 会话级空闲回收 TTL(ms);0=禁用。 */
|
|
@@ -1,18 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Claude Runner 实现
|
|
3
|
-
*
|
|
4
|
-
* ClaudeRunner 从「一次一跑」(claude -p <msg> --permission-mode
|
|
5
|
-
* bypassPermissions)升级为长驻交互会话(--input-format stream-json 双向
|
|
6
|
-
* 通道),同时复用本项目已有的 ApprovalCoordinator + run 卡审批区。
|
|
7
|
-
*
|
|
8
|
-
* 架构:ClaudeRunner 是 workspace-lifetime 的薄包装,进程与协议细节在
|
|
9
|
-
* ClaudeSession(src/runner/claude/session.ts,extends SpawningRunner 复用
|
|
10
|
-
* pid 文件/killOrphan/Terminator/心跳/退出分发器机制)。每次 run() 委托
|
|
11
|
-
* session:确保进程(可 --resume)→ 写 user 消息 → 消费事件直到本 turn result。
|
|
12
|
-
*/
|
|
13
|
-
import { ClaudeSessionReader } from '../../session/claude/index.js';
|
|
14
1
|
import { ClaudeSession } from './session.js';
|
|
15
|
-
import { MODEL_ID_TO_ALIAS } from '../../
|
|
2
|
+
import { MODEL_ID_TO_ALIAS } from '../../model-catalog.js';
|
|
16
3
|
/**
|
|
17
4
|
* Claude 内建压缩命令。stream-json 输入模式下该文本会被 CLI 本地拦截为
|
|
18
5
|
* slash 命令(不会作为模型提示词转发),压缩 turn 以普通 result 收尾
|
|
@@ -24,10 +11,9 @@ const COMPACT_COMMAND = '/compact';
|
|
|
24
11
|
* Claude Agent Runner(长驻交互模式)。
|
|
25
12
|
*
|
|
26
13
|
* 权限模式(permissionMode)在 spawn 时经 --permission-mode 生效:
|
|
27
|
-
* - 默认
|
|
28
|
-
*
|
|
29
|
-
* -
|
|
30
|
-
* 上抛 → bridge ApprovalCoordinator → run 卡审批区。
|
|
14
|
+
* - 默认 auto:低风险操作自动放行,高风险操作的 control_request 上抛 →
|
|
15
|
+
* bridge ApprovalCoordinator → run 卡审批区;
|
|
16
|
+
* - bypassPermissions:claude 内部全部放行,无 control_request(无审批卡)。
|
|
31
17
|
*/
|
|
32
18
|
export class ClaudeRunner {
|
|
33
19
|
kind = 'claude';
|
|
@@ -40,8 +26,8 @@ export class ClaudeRunner {
|
|
|
40
26
|
constructor(opts) {
|
|
41
27
|
this.defaultModel = opts.model ?? 'claude-opus-4-8';
|
|
42
28
|
this.defaultEffort = opts.effort ?? 'medium';
|
|
43
|
-
this.permissionMode = opts.permissionMode ?? '
|
|
44
|
-
this.sessionReader = opts.sessionReader
|
|
29
|
+
this.permissionMode = opts.permissionMode ?? 'auto';
|
|
30
|
+
this.sessionReader = opts.sessionReader;
|
|
45
31
|
this.session = new ClaudeSession({
|
|
46
32
|
pidDir: opts.pidDir,
|
|
47
33
|
cwd: opts.cwd,
|
|
@@ -100,7 +100,7 @@ export class ClaudeSession extends SpawningRunner {
|
|
|
100
100
|
agent: 'claude',
|
|
101
101
|
});
|
|
102
102
|
this.binary = 'claude';
|
|
103
|
-
this.permissionMode = opts.permissionMode ?? '
|
|
103
|
+
this.permissionMode = opts.permissionMode ?? 'auto';
|
|
104
104
|
this.settings = opts.settings;
|
|
105
105
|
this.defaultEffort = opts.effort;
|
|
106
106
|
this.idleTtlMs = opts.idleTtlMs ?? DEFAULT_IDLE_TTL_MS;
|
|
@@ -10,7 +10,9 @@
|
|
|
10
10
|
* queue + waitResolve pump, forceFinish/stopRequested semantics, turn idle
|
|
11
11
|
* watchdog, and ConnectionLostError respawn-and-retry-once.
|
|
12
12
|
*/
|
|
13
|
-
import type { AgentKind
|
|
13
|
+
import type { AgentKind } from '../../../agent-kinds.js';
|
|
14
|
+
import type { AgentSessionReader } from '../../../session-contract.js';
|
|
15
|
+
import type { AgentEvent, AgentStatusInfo, SpawnOptions } from '../../types.js';
|
|
14
16
|
import { JsonRpcClient } from '../../common/jsonrpc/client.js';
|
|
15
17
|
import { type TranslatorEvent } from './translator.js';
|
|
16
18
|
import { type AskForApproval, type SandboxMode, type InitializeResult } from './protocol-types.js';
|
|
@@ -17,6 +17,8 @@ export declare class CodexAppServerTranslator {
|
|
|
17
17
|
private turnStatus;
|
|
18
18
|
/** Full agentMessage text per item id (item-scoped snapshot). */
|
|
19
19
|
private textByItem;
|
|
20
|
+
/** agentMessage item ids whose protocol phase is `final_answer`. */
|
|
21
|
+
private finalTextItems;
|
|
20
22
|
/**
|
|
21
23
|
* Reasoning content per item id: paragraphs keyed by `contentIndex`
|
|
22
24
|
* (textDelta) plus the summary stream (summaryTextDelta). Each reasoning
|
|
@@ -103,6 +105,17 @@ export declare class CodexAppServerTranslator {
|
|
|
103
105
|
private handleCommandApproval;
|
|
104
106
|
private handleFileApproval;
|
|
105
107
|
private handleItemStarted;
|
|
108
|
+
/**
|
|
109
|
+
* turn_diff 的统一信封:`type` + threadId/turnId/timestamp 三个公共字段在此
|
|
110
|
+
* 一次装配(十余个构造点原本各抄一遍,还得挂 `as TurnDiffEvent`)。
|
|
111
|
+
*/
|
|
112
|
+
private turnDiffEvent;
|
|
113
|
+
/**
|
|
114
|
+
* 工具型 item 的 started 处理(commandExecution / webSearch / mcpToolCall /
|
|
115
|
+
* dynamicToolCall 四个分支同形):登记「已开始」锚点 + 记录工具身份 meta,
|
|
116
|
+
* 再发一帧空的 turn_diff 把工具块按真实时序插进卡片。
|
|
117
|
+
*/
|
|
118
|
+
private beginToolItem;
|
|
106
119
|
private handlePermissionsApproval;
|
|
107
120
|
private buildPermissionItems;
|
|
108
121
|
/** Get (or lazily create) the reasoning accumulator for one item. */
|