aws-runtime-bridge 1.9.151 → 1.9.162
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 +560 -0
- package/dist/adapter/AcodeSdkAdapter.d.ts +51 -1
- package/dist/adapter/AcodeSdkAdapter.js +6 -5
- package/dist/adapter/prompts.d.ts +1 -1
- package/dist/adapter/prompts.js +1 -1
- package/dist/desktop/built-in-desktop-tools.js +1 -1
- package/dist/routes/acode-todos.js +1 -1
- package/dist/routes/ltr.js +1 -1
- package/dist/routes/sessions.d.ts +31 -0
- package/dist/routes/sessions.js +1 -1
- package/dist/routes/terminal.d.ts +8 -0
- package/dist/routes/terminal.js +25 -25
- package/dist/services/instance-features.d.ts +25 -1
- package/dist/services/instance-features.js +1 -1
- package/dist/services/workspace-files.js +1 -1
- package/dist/services/workspace-watch.js +1 -1
- package/dist/utils/file-utils.d.ts +2 -0
- package/dist/utils/file-utils.js +2 -2
- package/package/acode/dist/ask-user-question-tool.js +1 -1
- package/package/acode/dist/await-complete-tool.js +1 -1
- package/package/acode/dist/background-command-manager.js +1 -1
- package/package/acode/dist/background-command-tools.js +1 -1
- package/package/acode/dist/built-in-file-tools.d.ts +18 -2
- package/package/acode/dist/built-in-file-tools.js +2 -2
- package/package/acode/dist/built-in-symbols-tool.js +1 -1
- package/package/acode/dist/context-overflow.d.ts +19 -0
- package/package/acode/dist/context-overflow.js +2 -0
- package/package/acode/dist/grammars/grammars/tree-sitter-lua.wasm +0 -0
- package/package/acode/dist/index.d.ts +3 -1
- package/package/acode/dist/index.js +1 -1
- package/package/acode/dist/parsers/ast-cache.d.ts +12 -1
- package/package/acode/dist/parsers/ast-cache.js +1 -1
- package/package/acode/dist/parsers/language-queries.js +1 -1
- package/package/acode/dist/parsers/symbol-extractor.js +2 -2
- package/package/acode/dist/parsers/tree-sitter-loader.d.ts +1 -1
- package/package/acode/dist/parsers/tree-sitter-loader.js +1 -1
- package/package/acode/dist/plugin-types.d.ts +5 -0
- package/package/acode/dist/plugin-types.js +1 -0
- package/package/acode/dist/read-file-state.d.ts +48 -0
- package/package/acode/dist/read-file-state.js +2 -0
- package/package/acode/dist/runtime.d.ts +63 -3
- package/package/acode/dist/runtime.js +30 -26
- package/package/acode/dist/skill-tool.js +3 -3
- package/package/acode/dist/sub-agent-manager.js +1 -1
- package/package/acode/dist/sub-agent-tools.js +5 -5
- package/package/acode/dist/todo-tool.js +3 -3
- package/package/acode/dist/tool-concurrency/index.d.ts +5 -0
- package/package/acode/dist/tool-concurrency/index.js +2 -0
- package/package/acode/dist/tool-concurrency/observability.d.ts +46 -0
- package/package/acode/dist/tool-concurrency/observability.js +3 -0
- package/package/acode/dist/tool-concurrency/resource-lock.d.ts +25 -0
- package/package/acode/dist/tool-concurrency/resource-lock.js +2 -0
- package/package/acode/dist/tool-concurrency/scheduler.d.ts +30 -0
- package/package/acode/dist/tool-concurrency/scheduler.js +2 -0
- package/package/acode/dist/tool-concurrency/types.d.ts +80 -0
- package/package/acode/dist/tool-concurrency/types.js +2 -0
- package/package/acode/dist/tool-group-manager.d.ts +116 -0
- package/package/acode/dist/tool-group-manager.js +14 -0
- package/package/acode/dist/types.d.ts +14 -1
- package/package/acode/package.json +2 -2
- package/package/aws-client-agent-mcp/dist/agent-client.d.ts +4 -4
- package/package/aws-client-agent-mcp/dist/agent-client.js +1 -1
- package/package/aws-client-agent-mcp/dist/http-client.d.ts +1 -1
- package/package/aws-client-agent-mcp/dist/http-client.js +1 -1
- package/package/aws-client-agent-mcp/dist/mcp-server.d.ts +62 -17
- package/package/aws-client-agent-mcp/dist/mcp-server.js +29 -29
- package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts +46 -0
- package/package/aws-client-agent-mcp/dist/mcp-tools.js +149 -7
- package/package/aws-client-agent-mcp/dist/office/office-equation.d.ts +5 -0
- package/package/aws-client-agent-mcp/dist/office/office-equation.js +2 -0
- package/package/aws-client-agent-mcp/dist/office/office-image.d.ts +12 -0
- package/package/aws-client-agent-mcp/dist/office/office-image.js +2 -0
- package/package/aws-client-agent-mcp/dist/office/office-workspace.d.ts +25 -0
- package/package/aws-client-agent-mcp/dist/office/office-workspace.js +2 -0
- package/package/aws-client-agent-mcp/dist/tool-groups.d.ts +57 -0
- package/package/aws-client-agent-mcp/dist/tool-groups.js +3 -0
- package/package/aws-client-agent-mcp/dist/types.d.ts +27 -0
- package/package/aws-client-agent-mcp/package.json +2 -1
- package/package.json +1 -1
- package/package/acode/dist/plugin-tools.d.ts +0 -14
- package/package/acode/dist/plugin-tools.js +0 -9
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,566 @@ files 白名单),供调度中心「查看本次更新内容」弹窗按 `##
|
|
|
5
5
|
展示。发布新版本时须在仓库中先写好 `## v<version>` 段(prepack-guard 校验缺段
|
|
6
6
|
即阻断发布);Bridge 自更新成功后的运行时追加仅作为包内缺段时的兜底。
|
|
7
7
|
|
|
8
|
+
## v1.9.162
|
|
9
|
+
|
|
10
|
+
_发布日期:2026-09-24_
|
|
11
|
+
|
|
12
|
+
### 工具懒加载:browser / desktop 收纳态展开链路打通(关键修复)
|
|
13
|
+
|
|
14
|
+
v1.9.153 起 browser / desktop 改为**收纳态不注入会话工具列表**(缓存稳定化的
|
|
15
|
+
前提:LLM 请求的 tools 前缀字节级不变,provider 前缀缓存全程命中),工具定义改由
|
|
16
|
+
`expand_tools` 结果下发、执行经 `call_tool` 回传。但回传链路在重构中被删除且未补回,
|
|
17
|
+
导致收纳态(默认档)下:
|
|
18
|
+
|
|
19
|
+
- `expand_tools({group:"browser"})` 从本地 `exposedTools` 取 manifests → 收纳态下
|
|
20
|
+
必然为空(工具按设计就没注入),agent 拿到 0 个工具定义;
|
|
21
|
+
- `call_tool({name:"browser_navigate"})` 找不到工具名 → 直接报「未知工具」;
|
|
22
|
+
- bridge 侧 `POST /sessions/:agentId/capability-tools[/call]` 端点恢复后**没有任何调用方**
|
|
23
|
+
(原 MCP Server 中继 `setBridgeCapabilityTools` / `handleExpandTools` 已随重构移除)。
|
|
24
|
+
|
|
25
|
+
本次以**同进程中继**补齐(不改 tools/list 载荷,缓存稳定性不回退):
|
|
26
|
+
|
|
27
|
+
- ACode 新增 `CapabilityToolRelay` 契约(`tool-group-manager.ts`)+ 运行时配置
|
|
28
|
+
`capabilityToolRelay`(`types.ts`),`expand_tools` / `call_tool` 的桥接组分支经其
|
|
29
|
+
回传;本地组(pencil / draw / office / launch / hire / task / meeting / debug /
|
|
30
|
+
fileHistory)路径完全不变。
|
|
31
|
+
- 展开:先中继(`setBuiltInCapabilityTools(expand)` 刷新定义缓存并授予调度授权、
|
|
32
|
+
返回 manifests),成功后才置本地展开态 —— 中继失败可重试,不留半展开态;
|
|
33
|
+
- `group="all"`:桥接组经中继拉 manifests,`disabled` 静默跳过、单组失败不阻断其余组
|
|
34
|
+
(该组 `call_tool` 会被拒并提示重新 expand,自愈);收起时桥接授权全部回收;
|
|
35
|
+
- 调度:`findTool` 落空且工具名归 bridge 托管时,按 `call_tool` 三道闸同口径的
|
|
36
|
+
本地预检(`disabled` 拒绝 / 未展开引导 expand)后执行 `callBuiltInCapabilityTool`。
|
|
37
|
+
- `AcodeSdkAdapter` 会话启动时注入中继(同进程直连,无 HTTP、无 token 依赖;
|
|
38
|
+
HTTP 端点 `capability-tools[/call]` 保留供外部/兼容调用)。无 `agentId` 时不注入,
|
|
39
|
+
退化为本地查找(与启动注入的缺省兜底一致)。
|
|
40
|
+
|
|
41
|
+
配套测试:acode `tool-group-manager.test.ts` 新增「capabilityToolRelay」12 项(展开
|
|
42
|
+
manifests 来自中继、幂等、失败不留状态且可重试、disabled 不触中继、group=all 混合
|
|
43
|
+
本地+桥接+disabled、收起回收、调度透传参数/未展开拒绝/disabled 拒绝/错误透传/
|
|
44
|
+
非桥接未知工具不触中继);bridge `AcodeSdkAdapter.test.ts` 新增端到端用例
|
|
45
|
+
(启动注入中继 → `expand` 下发 manifests 且不注入 exposedTools → `call` 执行 →
|
|
46
|
+
`collapse` 后调度被拒)。bridge 套件 1473 通过 + 4 跳过、acode 743 通过。
|
|
47
|
+
|
|
48
|
+
### 工具组:ACode 短 key ↔ 能力 featureKey 错位修复
|
|
49
|
+
|
|
50
|
+
`collaboration.*`(流程任务 / 会议 / 调试日志 / 文件变更历史)与 `agentSys.launchItem` /
|
|
51
|
+
`agentSys.hire` 的工具组短 key(`task` / `meeting` / `debug` / `fileHistory` / `launch` /
|
|
52
|
+
`hire`)与完整 featureKey 不一致,ACode 侧把「收纳」误判为「禁用」(实测确认):
|
|
53
|
+
系统提示词把已授权能力显示为未开启、`expand_tools` 直接拒绝。本次新增
|
|
54
|
+
`GROUP_KEY_TO_FEATURE` 映射与 `resolveGroupFeatureKey()`(`instance-features.ts`),
|
|
55
|
+
`capabilityState` 回调先归一再取三态;同时补齐父门禁级联
|
|
56
|
+
(`collaboration` / `agentSys` 主开关 `disabled` 时其子能力一律 `disabled`),
|
|
57
|
+
与前端清除子键、Java 门禁传播同口径。
|
|
58
|
+
|
|
59
|
+
工具组归属推断同时加固(`tool-group-manager.ts`):不再只认 `key_` 前缀,注册的
|
|
60
|
+
精确 `toolNames` 先于前缀命中,`listToolManifests` 忽略 MCP 的 `serverName__` 命名空间
|
|
61
|
+
取裸名匹配 —— `my_task` / `create_meeting` / `query_debug_logs` /
|
|
62
|
+
`query_file_changes_history` 等非前缀命名的 MCP 工具组据此正确归组与下发定义。
|
|
63
|
+
|
|
64
|
+
### 协作能力分组:默认收纳 + 父门禁级联
|
|
65
|
+
|
|
66
|
+
`instance-features.ts` 新增 `collaboration` 主开关与 `collaboration.task` /
|
|
67
|
+
`collaboration.meeting` / `collaboration.debug` / `collaboration.fileHistory` 四个子能力
|
|
68
|
+
(默认收纳),ACode 侧注册同名工具组;四个分组在收纳态下不进 LLM 工具列表,经
|
|
69
|
+
`expand_tools` 展开后由 `call_tool` 调度。
|
|
70
|
+
|
|
71
|
+
### 工具并发执行(资源驱动调度)
|
|
72
|
+
|
|
73
|
+
新增 `tool-concurrency/` 子系统(`types` / `resource-lock` / `scheduler` /
|
|
74
|
+
`observability`),ACode 一条 LLM 响应返回多个 `tool_calls` 时按**资源冲突关系**
|
|
75
|
+
并发而非按工具类型分组,并新增运行时配置 `toolConcurrency`
|
|
76
|
+
(`enabled` 默认 true、`maxReadOnly` 默认 8、`maxBash` 默认 0=不限):
|
|
77
|
+
|
|
78
|
+
- 资源键层级(`file:` / 目录前缀 / `bash:` 等)与祖先-后代判定;区间重叠即冲突;
|
|
79
|
+
- 同资源读写按读写锁串行,写-写互斥;未声明并发策略的工具(如 bridge 注入的
|
|
80
|
+
`browser_` / `desktop_`)默认独占串行 —— 关闭 `enabled` 即退化为旧的串行行为;
|
|
81
|
+
- `ToolTraceRecorder` 记录每个工具的 waiting_resource / running / completed 时序并聚合
|
|
82
|
+
批次度量(墙钟、并行度、等锁总时长、竞争次数、加速比),`ConcurrencyLimiter` 提供
|
|
83
|
+
只读 / Bash 并发上限;
|
|
84
|
+
- 文件工具声明资源键(`buildFileResourceKey` / `fileResourceClaim`),读 `read`、
|
|
85
|
+
写 `write`。
|
|
86
|
+
|
|
87
|
+
### 文件写入 stale guard(陈旧写入拒绝)
|
|
88
|
+
|
|
89
|
+
新增 `read-file-state.ts`:`read_file` 记录 mtime / size / 内容快照,`edit_file` /
|
|
90
|
+
`write_file` 落盘前比对,文件在上次读取后被外部修改(且内容与快照不匹配)时拒绝写入
|
|
91
|
+
并提示模型重读,避免并发会话/外部编辑器改动被静默覆盖。运行时开关
|
|
92
|
+
`enableStaleFileGuard`(缺省启用,`false` 关闭比对;状态仅存内存,`stop()` 清空)。
|
|
93
|
+
|
|
94
|
+
### 工具权限:新增 `fileModificationOutside` 档位
|
|
95
|
+
|
|
96
|
+
「限制操作」新增工作区外文件修改权限(`fileModificationOutside`),
|
|
97
|
+
`resolveAgentToolPermissions` 全 allow 兜底值同步补齐,热推路径显式下发默认值以
|
|
98
|
+
清除历史限制。
|
|
99
|
+
|
|
100
|
+
### 会话启动令牌吊销与运行时钟强化
|
|
101
|
+
|
|
102
|
+
- `RuntimeGlobalSettingsService` 启动时吊销历史运行令牌,避免重启后旧令牌继续可用。
|
|
103
|
+
- `terminal.ts` 抽出 `isIdleStatusChangeRetryable()`:`waiting_input` 纯状态切换
|
|
104
|
+
(`turn_complete` 仅带 usage、不带 `actionType`)也纳入 idle 串行重试队列,
|
|
105
|
+
修复该类状态切换漏到零重试路径的问题;原 `!params.actionInfo` 空判改为
|
|
106
|
+
`!params.actionInfo?.actionType`。
|
|
107
|
+
|
|
108
|
+
### LTR 临时文件读取端点
|
|
109
|
+
|
|
110
|
+
`POST /api/ltr/read`:按绝对路径返回 LTR 临时文本内容,安全校验拒绝 `LTR_ROOT`
|
|
111
|
+
目录树之外的路径(防路径穿越),文件不存在 404、非文件 400、上限 512KB。
|
|
112
|
+
|
|
113
|
+
### Agent Todo 重置与 acode-todos 路由
|
|
114
|
+
|
|
115
|
+
`AgentTodoService` / `routes/acode-todos.ts` 支持重置(清空)会话待办列表,
|
|
116
|
+
配套 `acode-todos.test.ts` 覆盖重置语义。
|
|
117
|
+
|
|
118
|
+
### 空闲监听指令(poll_message)措辞收敛
|
|
119
|
+
|
|
120
|
+
`MESSAGE_POLLING_IDLE_PROMPT` 改为显式前置条件:「此指令仅在当前没有未完成任务时生效;
|
|
121
|
+
若仍在处理任务请忽略本指令并继续执行」,仅在确认无进行中/未完成任务时才调用
|
|
122
|
+
`poll_message`,降低任务中途被空闲轮询打断的概率(三个 adapter 的单测改为从
|
|
123
|
+
`prompts.ts` 导入常量,避免文案与断言再次脱节)。
|
|
124
|
+
|
|
125
|
+
### 依赖与其它
|
|
126
|
+
|
|
127
|
+
- `aws-client-agent-mcp` 新增 `temml`(Office 公式渲染)依赖,新增
|
|
128
|
+
`office_format` / `office_apply_profile` / `office_generate_from_template` 三个
|
|
129
|
+
Office 工具及 `office-equation.ts` 公式模块(含测试)。
|
|
130
|
+
- `AcodeSdkAdapter` 恢复 `POST /sessions/:agentId/capability-tools[/call]` 路由,
|
|
131
|
+
`resolveAdapter(providerId)` 按会话 providerId 解析适配器;sessions 测试 29 项通过。
|
|
132
|
+
- 版本号 1.9.157 – 1.9.162 为连续未发布开发周期(npm 上仍为 1.9.153),
|
|
133
|
+
本次一并发布。
|
|
134
|
+
|
|
135
|
+
## v1.9.161
|
|
136
|
+
|
|
137
|
+
_发布日期:2026-09-18_
|
|
138
|
+
|
|
139
|
+
### Office 题注位置与回执提示修复(依据 v4 回归报告 N7/N8)
|
|
140
|
+
|
|
141
|
+
**N7:`captioned_table` 题注位置对齐中文论文规范**
|
|
142
|
+
|
|
143
|
+
中文论文(学位论文)规范要求「图题在下、表题在上」,本项目脚本产物同样如此;
|
|
144
|
+
此前 `captioned_table` 一律把题注插在表格**下方**,用工具链重做论文逐页比对时会显现差异。
|
|
145
|
+
现按元素类型区分默认位置:
|
|
146
|
+
|
|
147
|
+
- `captioned_image`:题注默认在图片**下方**(行为不变)
|
|
148
|
+
- `captioned_table`:题注默认在表格**上方**
|
|
149
|
+
- 新增 `props.captionPosition`(`above`/`below`,兼容 `top`/`before`/`bottom`/`after`)显式覆盖
|
|
150
|
+
|
|
151
|
+
实现:新增 `insertParagraphBeforeElement`(表题在上的插入路径);章内序号统计按位置
|
|
152
|
+
(章标题之后、插入点之前)计算,因此「表题在上」不改变编号连续性。
|
|
153
|
+
|
|
154
|
+
**N8:`office_edit` 回执未透传服务端 warnings**
|
|
155
|
+
|
|
156
|
+
服务端(Java)已在 `chapterHeadingStyle=false` 等场景返回 `warnings`,但 bridge 层
|
|
157
|
+
`officeEdit` 组装回执时丢弃了该字段,使用者无法感知「F9 后编号不会按章重启」的风险。
|
|
158
|
+
现原样透传 `warnings`(服务端未返回时不产生空数组噪音)。
|
|
159
|
+
|
|
160
|
+
配套回归测试:`OfficeDocxPrecisionTest` 新增 4 个用例(表题默认在上、图题默认在下、
|
|
161
|
+
captionPosition 显式覆盖、表题在上时序号连续);bridge `mcp-server.test.ts` 新增 2 个
|
|
162
|
+
用例(warnings 透传、无 warnings 时不含该键)。office 测试总数 179 全通过;
|
|
163
|
+
Word COM F9 实测题注编号稳定(表1-1/表1-2/表2-1、图1-1/图1-2/图2-1)。
|
|
164
|
+
|
|
165
|
+
### ACode 模型请求失败重试不再重置上下文
|
|
166
|
+
|
|
167
|
+
模型请求超时/网关 5xx/看门狗中止后的重试此前会重新走主动压缩预检:一旦累计或估算
|
|
168
|
+
用量越过阈值,与上下文大小无关的失败重试也会裁剪+摘要化历史,表现为「重试后上下文
|
|
169
|
+
被重置」。本次修复:
|
|
170
|
+
|
|
171
|
+
- **恢复式重试(resume,与失败请求逐字节一致)**:非溢出的普通失败(5xx/超时/看门狗)
|
|
172
|
+
后,适配器以 `resume: true` 恢复同一轮——不重发 prompt 钩子、不重复 push 用户消息、
|
|
173
|
+
**不回滚轮内进展**(工具结果/部分输出原地保留),基于与失败请求同一份 conversation
|
|
174
|
+
重建请求:重试请求与上次失败的请求逐字节一致,重试之前的状态不丢失。原先的失败轮
|
|
175
|
+
锚点回滚(`rollbackFailedTurn`)会把会话截回 turn 开始前、丢弃轮内已成功的迭代,已移除。
|
|
176
|
+
- **轮级跳过压缩**:重试 submit 携带 `skipProactiveCompaction`(resume 隐含),覆盖整轮
|
|
177
|
+
全部 LLM 迭代,并同时约束 800KB 请求体字节上限截断(`truncateConversationIfNeeded`),
|
|
178
|
+
旧版 `markSkipNextCompaction()` 单次标记兼容保留;仅 provider 显式溢出信号(错误字段/
|
|
179
|
+
`finish_reason`)触发响应式压缩重建,413 溢出仍正常兜底——上下文改写只属于溢出响应。
|
|
180
|
+
- **结构化溢出判定**:新增 `context-overflow.ts`(cause 链下钻 + 字段级标记 + 精选消息
|
|
181
|
+
片段),`length`/`max_tokens` 被输出长度标记独占短路,绝不因输出上限触发压缩。
|
|
182
|
+
- **4xx 确定性错误短路重试**:invalid_request 类错误直接 `retry_aborted`(「请求无效」),
|
|
183
|
+
5xx/超时仍按指数退避+抖动重投。
|
|
184
|
+
|
|
185
|
+
配套回归测试:acode `runtime.test.ts` 新增/强化 5 个用例(resume 重试请求体逐字节一致
|
|
186
|
+
且不重复 push、中途失败保留轮内工具结果后 resume 与失败迭代逐字节一致、整轮跳过主动
|
|
187
|
+
压缩、legacy 单次标记、重试轮跳过 800KB 字节截断而普通轮照常截断);bridge
|
|
188
|
+
`AcodeSdkAdapter.test.ts` 断言重试提交携带 `resume + skipProactiveCompaction`,并含
|
|
189
|
+
4xx 短路与重试计数语义用例(套件 82/82 通过)。
|
|
190
|
+
|
|
191
|
+
## v1.9.160
|
|
192
|
+
|
|
193
|
+
_发布日期:2026-09-18_
|
|
194
|
+
|
|
195
|
+
### Office 题注编号与格式检查修复(依据 v3 回归报告 N1-N6)
|
|
196
|
+
|
|
197
|
+
**N1(高):SEQ 域 `\s` 值写成了章号,F9 后含小节的章出现重复编号**
|
|
198
|
+
|
|
199
|
+
`\s N` 的 N 是**标题级别**(1-9),不是章号。原实现写 `SEQ figure \s <章号>`,导致:
|
|
200
|
+
含 H2 小节的章在每次小节标题处错误重启(实测 Word F9 后 图2-1 重复出现),
|
|
201
|
+
第十章还会写出超范围值 `\s 10`。现固定为 `SEQ figure \s 1`(按 1 级标题重启),
|
|
202
|
+
章号只体现于静态前缀;章内序号改为按「本章范围内、插入点之前」的实际域数量统计
|
|
203
|
+
(`countSeqFieldsBefore`),与 `\s` 值彻底解耦。
|
|
204
|
+
|
|
205
|
+
**N2(中):题注按章重启依赖章标题具备「标题 1」样式,此前不校验也不提示**
|
|
206
|
+
|
|
207
|
+
Word 的 `\s 1` 按**样式名为内置「标题 1」**的段落重启(COM 实测:仅补直接格式
|
|
208
|
+
`outlineLvl` 或自定义名样式均无效)。而论文类模板常把章标题写成直排格式(无样式),
|
|
209
|
+
此时 F9 后编号会跨章累计。修复:
|
|
210
|
+
|
|
211
|
+
- `captioned_*` 在 `chapterTracker=auto` 时自动为识别出的章标题补「标题 1」样式
|
|
212
|
+
(新增 `DocxStyleOps`:找样式 → 套用并逐项还原差异 → 若仍不等价则回退到工具自建的
|
|
213
|
+
**最少格式「标题 1」样式**,保证可见外观零变化)
|
|
214
|
+
- 新增 `props.chapterHeadingStyle=false` 可关闭自动补样式(回执带 `warnings` 说明风险)
|
|
215
|
+
- `office_edit` 回执新增 `warnings` 字段
|
|
216
|
+
|
|
217
|
+
**N3(低):`props.heading` 传数字不生效(静默)**
|
|
218
|
+
|
|
219
|
+
数字 `1`、字符串 `"1"`、`"Heading1"`、`"标题 1"` 现均可用;非法值(`"abc"`、越界 `4`)
|
|
220
|
+
改为**显式报错**,不再静默不加样式。
|
|
221
|
+
|
|
222
|
+
**N5:check 空段落噪音**
|
|
223
|
+
|
|
224
|
+
`office_format` 默认跳过无文本段落(空段落/纯图片段落)的正文类检查与修正,
|
|
225
|
+
summary 增加 `skippedBlankParagraphs`;`rules.blankParagraphPolicy="report"` 可恢复旧行为。
|
|
226
|
+
实测重生成论文违规数 421 → 199(其中 222 条为纯空段落噪音)。
|
|
227
|
+
|
|
228
|
+
**N6:preset 与模板实测口径统一**
|
|
229
|
+
|
|
230
|
+
- profile 聚合修正「非空众数」偏差:此前 114 段中仅 1 段 `bold=true` 也会输出 `bold=true`
|
|
231
|
+
(回灌 apply_profile 会把全文错误加粗);现按全量多数票取值,未显式设置的属性不输出
|
|
232
|
+
- 新增 `OfficeFormatPresets.merge(base, overrides)` 与 `office_format` 的 `mergePreset=true`:
|
|
233
|
+
以 preset 为基线、实测 profile 逐键覆盖(page/rules[role].props/roles),
|
|
234
|
+
解决「preset 期望黑体 vs 模板实测宋体」的系统性差异导致的验收比对失真
|
|
235
|
+
- 合并时归一「首行缩进/悬挂缩进」互斥(OOXML 中两者共存只有悬挂生效,会造成
|
|
236
|
+
check 期望与实际永不收敛);写入端同步加固
|
|
237
|
+
|
|
238
|
+
**实测验收**:模板实测 profile + preset 合并后,对重生成论文 check→fix→check
|
|
239
|
+
收敛 219 → 0;对既有论文 179 → 0(此前因缩进互斥存在 12 条不可收敛残留)。
|
|
240
|
+
|
|
241
|
+
配套回归测试:`OfficeDocxPrecisionTest` 新增 11 个用例(SEQ 恒定值、同章序号解耦、
|
|
242
|
+
章标题样式自动补/外观保持/可关闭、heading 数字与非法值、空段落跳过与 report 策略、
|
|
243
|
+
preset 合并与缩进互斥收敛、profile null 噪声);office 测试总数 175 全通过。
|
|
244
|
+
|
|
245
|
+
### office 卡片:指定文件强校验 + 预览链接服务端权威化
|
|
246
|
+
|
|
247
|
+
**背景**:office 卡片的 `card.previewUrl` 此前由 agent 自报、bridge 与 Java 两端均无校验
|
|
248
|
+
(纯透传),前端直接塞进无 sandbox 的 iframe——agent 可拼造任意地址(含站外页面)。
|
|
249
|
+
同时卡片引用的文件是否真实存在没有任何服务端校验。
|
|
250
|
+
|
|
251
|
+
**新契约**:office 卡片只能用 `filePath`(工作区路径)或 `docId`(云文档 id)之一指定
|
|
252
|
+
文件,二者必居其一、不可同时传;`previewUrl` 从入参契约中移除,由服务端生成。
|
|
253
|
+
|
|
254
|
+
- **bridge(发送前校验,失败即工具调用失败、消息不发送)**:`buildOfficeCardPayload`
|
|
255
|
+
重写——filePath 经 `packOfficeFile` 统一校验(存在/普通文件/docx-xlsx-pptx/≤16MB)后
|
|
256
|
+
上传,载荷换成 `{type,name,kind,fileUrl,sizeKb,title,filePath,workspacePath}`;
|
|
257
|
+
docId 路径本机零上传,载荷只带 `{type,docId,title?,description?}`;
|
|
258
|
+
两者同传 / 都缺 / 只传 fileUrl 均抛错。入参即使携带 `previewUrl` 也被丢弃。
|
|
259
|
+
- **服务端(落库前权威校验)**:`McpToolHandler.toCardJson` 的 office 分支改为委托
|
|
260
|
+
`OfficeToolHandlers.normalizeOfficeCard`——校验 filePath/docId 二选一;filePath 路径
|
|
261
|
+
按 `fileUrl` 反解存储名并 `loadFile` 确认文件真实存在;docId 路径经
|
|
262
|
+
`OfficeCloudDocService.findDoc` 校验云文档有效(不存在则工具调用失败、消息不落库)
|
|
263
|
+
并回填 name/kind/fileUrl/sizeKb。
|
|
264
|
+
- **预览由服务端生成**:取权威文件字节 → `OfficeDocService.buildPreviewHtml` →
|
|
265
|
+
`FileStorageService.storeFile("...-preview.html", ...)` → 服务端 `previewUrl` 写入卡片。
|
|
266
|
+
文件字节无法解析(损坏/伪装扩展名)时发送失败,杜绝「卡片指向不存在的文件」。
|
|
267
|
+
- **工具描述**:`send_group`/`send_private` 的 `card` schema 删除 `previewUrl` 属性,
|
|
268
|
+
`docId`/`filePath` 描述改写为「二选一」口径;`office_preview` 描述改为「返回地址供自检/
|
|
269
|
+
留档,卡片预览由服务端生成」。
|
|
270
|
+
- **dashboard**:新增 `utils/officeCardUrl.ts` 信任边界(`fileUrl` 只放行本站
|
|
271
|
+
`/api/files/` 地址,`previewUrl` 额外要求 `.html`;伪协议/携带凭据/站外链接一律拦截),
|
|
272
|
+
`ChatPanel.vue` 的预览按钮、点击、下载统一走该校验;预览 iframe 加
|
|
273
|
+
`sandbox="allow-same-origin"` 与 `referrerpolicy="no-referrer"`;卡片带 `docId` 时
|
|
274
|
+
「面板打开」直接按 docId 打开 Office 面板(跳过工作区路径匹配)。
|
|
275
|
+
|
|
276
|
+
配套回归测试:bridge `mcp-server.test.ts` 新增 office 卡片 9 个用例(上传路径/预览地址
|
|
277
|
+
丢弃/文件不存在/非 Office 扩展名/docId 零上传/二选一冲突/两者都缺/只传 fileUrl/DM 路径),
|
|
278
|
+
`mcp-tools.test.ts` 新增 schema 契约 2 个用例;dashboard `officeCardUrl.test.ts` 7 个用例。
|
|
279
|
+
|
|
280
|
+
## v1.9.159
|
|
281
|
+
|
|
282
|
+
_发布日期:2026-09-17_
|
|
283
|
+
|
|
284
|
+
### Office 回归修复(依据 v1/v2 回归报告)
|
|
285
|
+
|
|
286
|
+
**严重:lineSpacing 提取值错误(会导致排版全毁)**
|
|
287
|
+
|
|
288
|
+
`office_view(mode=profile)` 提取的 `body_text.lineSpacing` 为 `0.075` 而实际应为 `1.5`——
|
|
289
|
+
`DocxStyleResolver` 已把 twips 转为磅值,profile 聚合时又按 twips 除以 240(等效多除 20)。
|
|
290
|
+
现改为 `pt / 12` 得到倍数,与规则引擎 `normalizeLineSpacing` 对齐;提取值回灌
|
|
291
|
+
`office_apply_profile` 后行距正确(360 twips = 1.5 倍)。
|
|
292
|
+
|
|
293
|
+
**chapterTracker 跨章失效**
|
|
294
|
+
|
|
295
|
+
`captioned_image` / `captioned_table` 在第二章后仍生成「图1-1」。修复:
|
|
296
|
+
|
|
297
|
+
- 按 `before`/`after`/`index` 解析真实插入落点(而非扫描全篇)
|
|
298
|
+
- 章号判定同时支持 Heading1 样式、大纲级别 0、「第X章」中文数字(`chineseNumeralToInt`)
|
|
299
|
+
- 章内序号按 `SEQ ... \s N` 分组计数,跨章正确重启
|
|
300
|
+
|
|
301
|
+
**SEQ 域缓存值与静态前缀叠加(显示「图1-1 前台首页1」)**
|
|
302
|
+
|
|
303
|
+
题注以 `{seq}` 为界拆分为「静态前缀 run + SEQ 域 + 静态后缀 run」,域缓存值即章内序号,
|
|
304
|
+
Word/WPS 打开即为正确编号,F9 刷新后保持一致。
|
|
305
|
+
|
|
306
|
+
**heading1 角色漏识别**
|
|
307
|
+
|
|
308
|
+
`OfficeRoleDetector` 新增大纲级别判据与中文样式名支持(`headingLevelOfStyle`:`Heading 1` /
|
|
309
|
+
`标题 1`),章标题正则放宽空格并补充裸数字章标题兜底。
|
|
310
|
+
|
|
311
|
+
配套新增 10 个回归测试;office 测试总数 161 全通过。
|
|
312
|
+
|
|
313
|
+
## v1.9.158
|
|
314
|
+
|
|
315
|
+
_发布日期:2026-09-17_
|
|
316
|
+
|
|
317
|
+
### Office 模板对齐类文档生成增强(F1-F6)
|
|
318
|
+
|
|
319
|
+
将「参考模板 → 逐项对齐样式 → 一键出稿」的论文类任务能力沉淀为 office 工具链通用能力,
|
|
320
|
+
仍基于 Apache POI 纯格式层(无 COM、无外部进程)。新增 2 个工具 + 2 个 office_view 模式,
|
|
321
|
+
扩展 office_edit 两种带题注元素与表格列声明。
|
|
322
|
+
|
|
323
|
+
**新工具**
|
|
324
|
+
|
|
325
|
+
- `office_apply_profile`:按样式 Profile 对匹配角色段落规整字体/字号/行距/缩进/对齐 +
|
|
326
|
+
页面设置 + 标题编号;值稳定(重复应用不回退、不翻倍)。
|
|
327
|
+
- `office_generate_from_template`:`{{var}}` 全文跨 run 替换 + 内容清单注入
|
|
328
|
+
(heading/paragraph/image/table/pageBreak)+ 可选 profile 应用;`outputFile` 指定时保留模板。
|
|
329
|
+
|
|
330
|
+
**office_view 新 mode**
|
|
331
|
+
|
|
332
|
+
- `profile`:从模板 docx 提取按角色聚合的样式 Profile(page/roles/rules/numbering),
|
|
333
|
+
作为 apply_profile 的输入;role 附 `matchSource`/`sampleText`/`paragraphCount` 审计元数据。
|
|
334
|
+
- `selfcheck`:按分页符拆页,逐页 `textDigest` + 标题层级跳跃/图片溢出/宽表 warning,
|
|
335
|
+
并复用规则引擎补充格式违规检查。
|
|
336
|
+
|
|
337
|
+
**office_edit 扩展**
|
|
338
|
+
|
|
339
|
+
- `add type=captioned_image / captioned_table`:一条命令插入图片/表格 + 居中题注段
|
|
340
|
+
(SEQ 域,Word F9 可刷新);`caption`/`captionText` 双字段兼容;`chapterTracker=auto` 自动判章。
|
|
341
|
+
- `add type=table` 新增 `columns: [{widthPt, align}]` 列宽(pt→dxa)与列对齐声明。
|
|
342
|
+
|
|
343
|
+
**回归修复**
|
|
344
|
+
|
|
345
|
+
- 修复 `office_create` 漏传 `template` 参数(bridge 侧)。
|
|
346
|
+
- 修复 `captioned_*` 题注未写入(参数名不一致 + 题注段与内容段共用锚点)。
|
|
347
|
+
- 修复 `office_generate_from_template` 的 `outputFile` 不生效(模板被就地污染)。
|
|
348
|
+
- profile 角色识别增强:TOC/附录等辅助样式不再污染正文/标题统计。
|
|
349
|
+
|
|
350
|
+
详见 `docs/Office文件操作能力实施方案.md` §12。
|
|
351
|
+
|
|
352
|
+
## v1.9.157
|
|
353
|
+
|
|
354
|
+
_发布日期:2026-09-16_
|
|
355
|
+
|
|
356
|
+
### Office 精准操作能力大版本:Word 内核 / Excel / PPT / 公式 / 规则引擎
|
|
357
|
+
|
|
358
|
+
对标参考开源实现(WordFormat、学术 skills 等)完成 Office 三件套从「能创建」到
|
|
359
|
+
「精准操作」的升级:run 级定位、批注修订、公式目录页码、版式占位符、格式规则
|
|
360
|
+
检查与一键修正。全部基于 Apache POI 5.2.5 纯格式层实现,无 COM/无外部进程。
|
|
361
|
+
|
|
362
|
+
**Word 精准编辑内核(docx)**
|
|
363
|
+
|
|
364
|
+
- 路径寻址扩展:`/body/p[N]/run[M]`(run 级)、`/body/table[T]/row[R]/cell[C]`(单元格)、
|
|
365
|
+
`/body/sectPr`(页面)、`/body/header|footer`(页眉页脚)
|
|
366
|
+
- 新增 `DocxStyleResolver`:docDefaults → basedOn 链 → 直接格式的**有效格式解析**
|
|
367
|
+
(含主题字体兑现),支撑 `view styles` 与规则引擎「改得准、查不误报」
|
|
368
|
+
- 新能力:`op=replace`(跨 run 保格式查找替换)、批注(写/读/删,五件套部件)、
|
|
369
|
+
修订(tracked 编辑 + accept/reject)、目录 TOC 域 + updateFields、PAGE/NUMPAGES/SEQ 域、
|
|
370
|
+
页码页脚、书签 + 外链/内链超链接、**引用上标 [n] + 锚点内链**、OMML 公式(行内/块级/编号公式三列表)、
|
|
371
|
+
**自定义标题编号**(第%1章模板 + 清除手动编号)、三线表(threeLine 预设)、
|
|
372
|
+
段落字符单位缩进(firstLineChars)、中英文字体三槽(fontEa/fontAscii/fontHAnsi)
|
|
373
|
+
- `office_create` 支持 `template: cn-thesis`(A4+2.5cm、宋体/黑体样式体系、标题编号、页码)
|
|
374
|
+
- `office_view` 新 mode:`styles`(有效格式)、`comments`、`revisions`、`search`(query 定位)
|
|
375
|
+
- `office_validate` 增加 OOXML 结构检查:批注范围配对、w:del/w:ins 规范、xml:space
|
|
376
|
+
|
|
377
|
+
**Excel 增强(xlsx)**
|
|
378
|
+
|
|
379
|
+
- `add chart`(bar/column/line/pie/doughnut/area,XDDF 原生图表)、单元格批注、
|
|
380
|
+
数据验证(list/whole/decimal/date/textLength/custom)、条件格式(cellIs/containsText/colorScale)、
|
|
381
|
+
带位移插入/删除行(不覆盖相邻数据)、按范围拆分合并、富文本单元格(runs 数组)、
|
|
382
|
+
定义名称、页面设置(方向/缩放/打印区域)、自动筛选、行列隐藏
|
|
383
|
+
|
|
384
|
+
**PowerPoint 增强(pptx)**
|
|
385
|
+
|
|
386
|
+
- 演讲者备注(`set /slide[N]/notes`,view notes 读取)、**版式感知创建**(add slide + layout/layoutIndex,
|
|
387
|
+
view layouts 清单)、占位符直接赋值(`/slide[N]/placeholder[type|idx]`,保留模板样式)、
|
|
388
|
+
全 deck 查找替换(可限定单页)、表格单元格写入(`/shape[M]/cell[R][C]`)、
|
|
389
|
+
形状旋转/z-order(up/down/top/bottom)/超链接、**幻灯片克隆**(op=clone:复制文本/图片/备注/版式,
|
|
390
|
+
源页隔离,插入位置可控)
|
|
391
|
+
|
|
392
|
+
**公式链路(bridge)**
|
|
393
|
+
|
|
394
|
+
- 新建 `src/office/office-equation.ts`:`props.latex` → temml(MIT)LaTeX→MathML →
|
|
395
|
+
自研 MathML→OMML 转换(覆盖分数/根式/上下标/极限/求和积分/矩阵/括号分组),
|
|
396
|
+
失败时给出可读错误;`office_edit` 自动预处理 latex → omml 上行 Java 注入
|
|
397
|
+
|
|
398
|
+
**格式规则引擎(差异化能力)**
|
|
399
|
+
|
|
400
|
+
- 新工具 `office_format`:`{file, action: check|fix, preset|rulesFile|rules, annotate?, outputFile?}`
|
|
401
|
+
- 角色识别(三层):Word 样式 → 正则启发式(第X章/图题/摘要/参考文献等)→ 显式匹配器
|
|
402
|
+
- 检查:逐角色比对期望格式 → 违规清单(path/role/property/actual/expected/fixable/severity)+ 摘要;
|
|
403
|
+
`annotate:true` 把违规写成 Word 批注生成标注版(不覆盖原件)
|
|
404
|
+
- 修正:确定性项自动改(字体三槽/字号/加粗/对齐/行距/缩进/编号/手动编号清除),判断类只报告
|
|
405
|
+
- 预置:`cn-thesis`(学位论文)、`cn-report`(公文);rulesFile 支持工作区 YAML/JSON
|
|
406
|
+
- 收敛性验证:fix 后复查零违规(加权优先级 + 半磅字号 + 悬挂缩进语义)
|
|
407
|
+
|
|
408
|
+
**预览增强(docx HTML 预览)**
|
|
409
|
+
|
|
410
|
+
- 批注标记(含正文悬浮)、修订 ins/del 着色、公式文本化、TOC 占位、
|
|
411
|
+
域友好占位(〔页码〕)、超链接渲染为可点击 a[href]、上下标
|
|
412
|
+
|
|
413
|
+
**测试**
|
|
414
|
+
|
|
415
|
+
- Java:新增 `OfficeDocxPrecisionTest`(25 用例)、`OfficePptxAdvancedTest`(11 用例)、
|
|
416
|
+
`OfficeFormatEngineTest`(9 用例)等,全量 1442 用例通过
|
|
417
|
+
- bridge:新增 `office-equation.test.ts`(17 用例)+ mcp-tools 描述契约测试;
|
|
418
|
+
`tsc` 与本套件通过
|
|
419
|
+
- 前端:`officeTimeline` 支持 office_format 事件刷新,测试补齐
|
|
420
|
+
|
|
421
|
+
## v1.9.156
|
|
422
|
+
|
|
423
|
+
_发布日期:2026-09-13_
|
|
424
|
+
|
|
425
|
+
### Office 三件套能力升级:图片、排版、形状
|
|
426
|
+
|
|
427
|
+
按照 genoffice 对标,大幅增强 Office 文件引擎和工具描述,agent 现在可以生成含图片、列表、格式化表格的工作级文档。
|
|
428
|
+
|
|
429
|
+
**Java POI 引擎**(OfficeDocService.java)
|
|
430
|
+
|
|
431
|
+
- **图片基础设施**:严格 Base64 校验 + 魔数嗅探(PNG/JPEG/GIF/BMP/TIFF,WebP 等明确拒绝)+ ImageIO 像素尺寸读取 + 等比缩放辅助
|
|
432
|
+
- **docx 新增**:`add image`(source 支持工作区路径 / http URL / data URL → bridge 侧解析,Java 无状态接收 imageBase64)、`add pageBreak`、列表(`list: "bullet"|"number"` + `level: 0-2` 惰性初始化 XWPFNumbering)、`set /body header/footer`、段落 `pageBreakBefore`
|
|
433
|
+
- **xlsx 新增**:单元格 `numberFormat`(`0.00%`、`¥#,##0`、`yyyy-mm-dd` 等)、`border`+`borderColor`(thin/medium/thick/dashed/dotted/double)、`wrapText`、`valign`(top/center/bottom)、工作表 `colWidth`(px)、`rowHeight`(pt)、`freeze`(行/列)、`add merge`(range 字符串)、`add image`(anchorCell + 图片字节 → XSSFDrawing)
|
|
434
|
+
- **pptx 新增**:`add image`(fit=contain/cover/stretch,cover 写 srcRect 裁剪)、`add shape`(rect/roundRect/ellipse/triangle/diamond/chevron 等 + fillColor/lineColor/lineWidth + 垂直居中文字)、`add table`(均分列宽行高 + header 加粗)、`set /slide[N] background`(十六进制背景色)、`remove /slide[N]/shape[M]`(含图片/形状)、列表(`list: "bullet"|"number"` + bullet 三级字符差异)
|
|
435
|
+
- **view 升级**:stats 增加 `images` 计数、图片段落/形状标注 `(图片)`
|
|
436
|
+
- **preview 预览**:三格式含图片标注
|
|
437
|
+
|
|
438
|
+
**bridge 侧**(aws-client-agent-mcp)
|
|
439
|
+
|
|
440
|
+
- 新建 `src/office/office-image.ts`:`officeResolveImageSource(source)` 支持三种图片来源(data:image URL / http(s) URL / 工作区路径),含魔数校验和严格格式约束;`prepareOfficeImageCommands(commands)` 预处理 office_edit 命令中的 props.source → imageBase64
|
|
441
|
+
- `mcp-server.ts`:`officeEdit` 新增调用 `prepareOfficeImageCommands`,使图片 URL/路径自动解析为 base64 上行 Java 引擎
|
|
442
|
+
- `mcp-tools.ts`:`OFFICE_EDIT_TOOL` 描述重写为三格式完整能力清单 + 图片通用规则 + 使用要点;props schema 补充所有新增字段
|
|
443
|
+
- 测试 `office-image.test.ts`:11 测试全通过
|
|
444
|
+
|
|
445
|
+
## v1.9.155
|
|
446
|
+
|
|
447
|
+
_发布日期:2026-09-13_
|
|
448
|
+
|
|
449
|
+
- Office 文件能力面板化(与 pencil / draw 画布面板同款体验):Agent 可在 Dashboard
|
|
450
|
+
面板中实时查看自己创建/编辑的 Word / Excel / PowerPoint 文档。
|
|
451
|
+
- aws-client-agent-mcp:office 工具组新增 3 个面板工具——`office_open_document`
|
|
452
|
+
(校验工作区文件存在并返回 file/kind/sizeKb/workspacePath,驱动前端打开面板)、
|
|
453
|
+
`office_close_document`(收起面板)、`office_list_open`(列出本会话已打开的文件);
|
|
454
|
+
`office_create` / `office_edit` 返回值补充 `kind` 字段,供前端时间线提取器维护
|
|
455
|
+
文件列表(Agent 行徽标计数);工具描述同步引导「打开面板即可实时看到编辑效果,无需截图」。
|
|
456
|
+
- aws-mcp-server:`OfficeToolHandlers` 注册同款 3 个 handler(open 校验扩展名并归一
|
|
457
|
+
kind;close/list 为轻量信封),`TOOL_NAMES` 扩为 8 个——office 能力门禁
|
|
458
|
+
(`checkAbilityGate`)自动覆盖新工具;新增 `OfficeToolHandlersTest`(8 用例)。
|
|
459
|
+
- aws-dashboard:新增 `OfficePanel.vue`(docx 用 docx-preview、xlsx 用
|
|
460
|
+
@vue-office/excel、pptx 用 pptx-preview 本地渲染,注册 workspace watch 后经
|
|
461
|
+
FILE_CHANGED 事件自动刷新,头部按类型显示 Word/Excel/PPT 彩色徽标);
|
|
462
|
+
`useAgentTimeline` 新增 `extractOfficeDocInfo`(解析逻辑抽为可单测的
|
|
463
|
+
`officeTimeline.ts`,覆盖 call_tool 懒加载包裹形态);index.vue 完成桌面/移动端
|
|
464
|
+
面板挂载、可拖拽宽度注册(office: 720/480/1200)与 Agent 行 Office 徽标按钮;
|
|
465
|
+
ChatPanel office 卡片新增「面板打开」入口(卡片载荷携带 filePath/workspacePath,
|
|
466
|
+
同工作区时可直接在面板中打开原文件)。
|
|
467
|
+
- 修复 `writeOfficeFileAtomic` 对非法 Base64 静默解码的存量问题(Node
|
|
468
|
+
`Buffer.from(x,"base64")` 宽容语义),改为严格字符集 + 长度校验后再解码。
|
|
469
|
+
|
|
470
|
+
## v1.9.153
|
|
471
|
+
|
|
472
|
+
_发布日期:2026-09-12_
|
|
473
|
+
|
|
474
|
+
- 工具集懒加载(Lazy Tool Expansion)全链路接入:受管控的大工具集(pencil / draw 各 15 个、
|
|
475
|
+
启动项 9 个、招聘、浏览器 / 桌面桥接等)由「开启即全量暴露」升级为三态能力开关——
|
|
476
|
+
disabled(禁用)/ collapsed(收纳:工具不出现在工具列表,需先 expand_tools 展开)/ expanded(展开:工具全量直接可见),
|
|
477
|
+
降低初始上下文占用。
|
|
478
|
+
- aws-mcp-server:`t_agent_ability_switch` 新增 `ability_state` 列(update.sql v1.30.0 迁移,存量行按
|
|
479
|
+
`enabled` 归一:1→expanded / 0→disabled,既有 agent 行为不变),`AgentAbilitySwitch` 实体 / Mapper /
|
|
480
|
+
Service 三态读写,`enabled` 布尔列写入时同步回填保持旧读取兼容。缺省口径(DB 无行):
|
|
481
|
+
browser / desktop / agentSys.launchItem / agentSys.hire 默认 collapsed(已授权但收纳),其余默认 disabled(显式授权)。
|
|
482
|
+
- aws-client-agent-mcp:新增常驻元工具 `expand_tools` / `call_tool`(不属于任何受控组,收纳组始终有展开与调度入口)。
|
|
483
|
+
ListTools 按三态过滤;展开不再把工具注入 runtime exposedTools、不再推送 tools/list_changed(ListTools
|
|
484
|
+
载荷字节级稳定,LLM provider 前缀缓存全程命中),改为授予 call_tool 调度授权并把工具定义
|
|
485
|
+
(name/description/inputSchema)随 expand 结果下发,agent 当轮即可 call_tool 调用;执行期纵深防御:
|
|
486
|
+
disabled 拒绝、collapsed 未展开拒绝(同时兜住原生工具名直调的旁路)。配置为 expanded 的组不可在会话中
|
|
487
|
+
收起(由用户决定)、重复展开按幂等 already-expanded 返回。browser / desktop 桥接能力经 HTTP 回传
|
|
488
|
+
bridge 新端点 `/runtime/sessions/:agentId/capability-tools[/call]`(X-Runtime-Token 鉴权),call 超时
|
|
489
|
+
55s < runtime mcpToolTimeoutMs 60s。
|
|
490
|
+
- acode runtime:系统提示词注入能力清单(新增 capability-prompt.ts)——agent 知道哪些能力已展开 /
|
|
491
|
+
已收纳 / 未开启,「我没有绘图工具」类请求会主动提示用户去能力配置开启;启动期 env 兜底改为携带三态值
|
|
492
|
+
(AWS_LAUNCH_CONFIG_TOOLS / AWS_HIRE_TOOLS / AWS_DRAW_TOOLS 等),消除首次 listTools 早于 token 就绪时
|
|
493
|
+
env 兜底把收纳组全量暴露的窗口。
|
|
494
|
+
- aws-dashboard:能力配置弹窗新增三态选择器(新组件 FeatureStatePicker.vue),capability-features.ts
|
|
495
|
+
升级为三态模型(agentSys 主开关禁用时子能力级联禁用,跨层与 Java / bridge 口径一致)。
|
|
496
|
+
- Provider 请求失败不再默认无限重试:requestRetryCount 缺省由无限改为 0(持续 4xx 等不可恢复错误不再空转),
|
|
497
|
+
错误信息从响应载荷提取 code + message 直接抛出,不再被静默重试吞掉;需恢复内部重试时在 config 显式配置
|
|
498
|
+
requestRetryCount(有限值或 -1 无限)。
|
|
499
|
+
- 消息中心「完整请求体」JSON 树视图:新增 JsonTreeNode.vue(层级树形展示、逐层懒展开)与 jsonRepair.ts
|
|
500
|
+
(截断 JSON 修复兜底,修复后可解析即以树形呈现),60KB 截断请求体支持全文搜索——输入防抖 200ms、
|
|
501
|
+
命中计数、回车逐个定位、自动展开命中祖先链并高亮,未解析为 JSON 时回退原始文本。
|
|
502
|
+
- 图片预览缩放:新增 useImageZoom.ts(滚轮 / 双指缩放、拖拽平移、双击还原、缩放工具栏),接入 ChatPanel
|
|
503
|
+
全屏图片预览与 MessageInput 附件预览。
|
|
504
|
+
- draw 卡片预览自愈:新增 drawCardPreview.ts 幽灵渲染管线——服务端从未渲染的 draw 消息卡片以发送者
|
|
505
|
+
(owner)身份补渲染生成预览,渲染成功事件即时补拉;pencil / draw 卡片渲染图 30s 定时补拉自愈
|
|
506
|
+
(消息离开列表即停止),有图即终态。
|
|
507
|
+
- 杂项:.gitignore 补充审查 / 调试期临时产物(tsc / TAP 输出、一次性统计脚本、本地 AI 助手工作区);
|
|
508
|
+
修复 draw.ts 头注释在编辑中被截断损坏的问题。
|
|
509
|
+
|
|
510
|
+
## v1.9.152
|
|
511
|
+
|
|
512
|
+
_发布日期:2026-09-10_
|
|
513
|
+
|
|
514
|
+
- 绘图(draw.io)能力全链路接入:新增「绘图 (draw)」能力开关(默认关闭,显式授权语义,同 desktop/hire/pencil),
|
|
515
|
+
Agent 可创建 / 编辑 / 导出 / 分享 draw.io 绘图文档,Dashboard 以独立面板内嵌官方 draw.io 编辑器。
|
|
516
|
+
- aws-mcp-server:新增 `t_draw_doc`(doc_id 唯一,`doc_xml` 为完整 `<mxfile>` 权威内容)、
|
|
517
|
+
`t_draw_doc_member`(协作权限 read|write)、`t_draw_doc_change`(事务型 Outbox 变更日志,与内容写入同事务
|
|
518
|
+
落行,每 doc 保留最近 200 版;变更通知只作唤醒信号,丢失/离线时经 `draw_get_changes(sinceVersion)` 追赶);
|
|
519
|
+
`DrawDocController` 暴露 `/api/draw/*`(docs / doc / doc ops / doc render / counts / doc members);
|
|
520
|
+
`DrawDocMapper` 以 `doc_id + version` 乐观锁 CAS 写回,消除 check-then-act 竞态窗口。
|
|
521
|
+
- aws-runtime-bridge:新增 `DRAW_FEATURE_KEY` 能力标识与 `AWS_DRAW_TOOLS` 启动期 env 兜底;
|
|
522
|
+
`aws-client-agent-mcp` 注册 `draw_*` 工具组(create/list/open/close/get_diagram/get_changes/create_cells/
|
|
523
|
+
update_cells/delete_cells/delete_document/rename_document/share_document/revoke_share/export_document),
|
|
524
|
+
ListTools 按开关注实时过滤,服务端 `/mcp/call` 另有权威校验;`draw_export_document` 只回传
|
|
525
|
+
savedTo/sizeKb 等元信息,docXml 不回流 agent 上下文。
|
|
526
|
+
- aws-dashboard:新增 `DrawPanel.vue`(iframe 加载自托管 draw.io,经 embed postMessage 协议 load/autosave/export);
|
|
527
|
+
会话列表新增绘图徽标(仅 Agent 有绘图文档时显示,附数量角标);文档列表改为工具事件驱动刷新
|
|
528
|
+
(`drawRevision` 信号 + 防抖),取代每 2.5s 高频轮询 `/api/draw/docs`,仅在 WS 断线/未覆盖时低频兜底;
|
|
529
|
+
面板宽度与收缩优先级纳入 `draw`;移动端新增绘图覆盖层。
|
|
530
|
+
- 自托管编辑器资源置于 `aws-dashboard/public/draw/`(官方 draw.war 解包,v31.4.4,含 README 说明升级与授权注意),
|
|
531
|
+
并加入 Service Worker `globIgnores` 排除预缓存(app.min.js 9MB+、integrate.min.js 22MB+ 体积超预缓存上限,
|
|
532
|
+
仅打开绘图面板时按需加载)。
|
|
533
|
+
- 消息卡片:`send_group` / `send_private` 支持附带 `card`(`{type:pencil|draw,docId,title?,description?}`)
|
|
534
|
+
文档引用卡片,`send_group`/`send_private` 工具描述同步说明。读取模型为「凭 docId 可读」——任何 Agent 拿到 docId
|
|
535
|
+
即可用 `pencil_get_tree` / `draw_get_diagram` 读取,无需被邀请;写操作仍按 owner / 协作成员权限校验。
|
|
536
|
+
为此 `PencilDocService` 的读取路径(readDoc / getTree / getRender / getChanges)去掉「非 owner/成员即拒绝」
|
|
537
|
+
的拦截,`resolvePermission` 返回 null 时读取归一为 read;新增 `validateCardDoc` 供卡片发送前确认文档存在。
|
|
538
|
+
卡片只读引用不写入 `*_doc_member`,因此不改变协作者列表、shared 标记与文档列表徽标。
|
|
539
|
+
`t_direct_message` / `t_group_message` 新增 `card` 列(LONGTEXT,防富内容截断),
|
|
540
|
+
`GroupMessageService` / `DirectMessageService` 增加带卡片的 8 参重载(原 7 参签名保留并委托,向后兼容),
|
|
541
|
+
卡片 JSON 落库前校验合法性(非法 JSON / 非对象直接拒绝,解析失败按无卡片降级渲染历史消息)。
|
|
542
|
+
Dashboard 侧 `ChatPanel.vue` 新增消息卡片渲染(仿小程序卡片:有渲染图显示预览、否则占位封面,
|
|
543
|
+
带类型徽标与标题,点击直接打开对应绘图 / 画布面板)。
|
|
544
|
+
- 消息内容扩容 + 载荷剥离:`t_direct_message` / `t_group_message` / `t_meeting_message` 的 `content`
|
|
545
|
+
由 TEXT(64KB) 扩为 LONGTEXT——富格式内嵌图片 base64(压缩后数百 KB ~ 数 MB)在 MySQL 非严格模式下会被
|
|
546
|
+
静默截断到 64KB,Agent 经 `poll_message` 只拿到残缺 JSON、`JSON.parse` 失败,表现为 agent 看不到图
|
|
547
|
+
(`[image omitted]`)。配套在 acode runtime 的 poll 结果中剥离 directMessages/groupMessages 内嵌的
|
|
548
|
+
图片与附件 base64,仅保留可读文本摘要,避免 base64 以纯文本污染后续上下文。
|
|
549
|
+
Dashboard 发送侧新增 `buildRichAttachmentContent`——图片附件以内嵌 base64 随消息下发(Agent 直接以
|
|
550
|
+
多模态 data URL 读取,无需 fetch 图片 URL / 落盘再读),非图片附件仍为 URL 描述(语义等价 `[文件: ...]`),
|
|
551
|
+
这正是 content 必须扩容到 LONGTEXT 的直接原因。
|
|
552
|
+
新增 `ACODE_IMAGE_DIAG=1` 开启的图片注入诊断日志(默认关闭,异步追加且吞掉 I/O 异常)。
|
|
553
|
+
- 发布前修复:群消息仅卡片(无正文)时 Java 侧校验误拒绝,已与 mcp-server 侧「content/attachments/card
|
|
554
|
+
至少其一非空」对齐;`draw_export_document` 工具 schema 与实现统一(仅 xml/drawio,svg/png 等渲染
|
|
555
|
+
待阶段 2 管线,描述不再误导);`DrawPanel` 的 postMessage 接收仅接受同源自托管编辑器消息。
|
|
556
|
+
- 原子写健壮性:`atomicWriteFile` 改用 `renameFileWithRetry`——Windows 下 `fs.rename` 可能因目标被瞬时占用
|
|
557
|
+
(杀毒扫描 / 并发句柄)抛 EPERM/EBUSY/EACCES,按 40ms 递增退避重试 3 次,降低实际运行与测试并发下的假失败。
|
|
558
|
+
- 面板最大化(脱离为弹框):新增 `PanelDetachButton.vue`,终端 / 时间线 / 工作区 / 上下文 / 待办 / 后台任务 /
|
|
559
|
+
子 Agent / 浏览器 / 画布等侧窗面板可一键脱离为弹框最大化,再点恢复回侧窗;脱离态保留强调色提示,
|
|
560
|
+
标签栏场景支持右对齐 sticky 固定,移动端隐藏(已是全屏覆盖层)。
|
|
561
|
+
- 桌面工具 origin 判定明确化:`injectRememberedOrigin` 以 `originSet()`(非 null 且非 undefined)替代
|
|
562
|
+
`!= null` 判断,语义等价并消除隐式类型收窄告警。
|
|
563
|
+
- 轮询降频:在线成员列表的断连兜底轮询由 5s 放宽到 30s(`ONLINE_CHANGE` WS 事件已支持增量更新,
|
|
564
|
+
断连时仅需兜底同步,无需高频拉取);绘图文档列表同样由固定间隔轮询改为工具事件驱动。
|
|
565
|
+
- 测试:vitest 单测超时由 30s 放宽到 90s——本机并行跑完整套件(103 个文件、真实 git/子进程)时 CPU 争用
|
|
566
|
+
可把单个用例拖慢数倍,避免负载型假失败掩盖真实回归;补齐 `draw_*` 工具、git 路由与 acode runtime 用例。
|
|
567
|
+
|
|
8
568
|
## v1.9.151
|
|
9
569
|
|
|
10
570
|
_发布日期:2026-09-07_
|