Skip to content

Commit bf03e44

Browse files
committed
release: v1.10.0
1 parent 0f15b8a commit bf03e44

273 files changed

Lines changed: 12332 additions & 26351 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/quality.yml

Lines changed: 46 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -224,9 +224,11 @@ jobs:
224224
225225
FINAL_STATUS="success"
226226
FAILURE_REASON=""
227+
NEXT_ACTION="No extra action required."
227228
228229
if [[ "${DOCS_ONLY}" == 'true' ]]; then
229230
SUMMARY_NOTE="Only docs/markdown changes detected -> quality checks not required."
231+
NEXT_ACTION="No action required for docs-only changes."
230232
else
231233
SUMMARY_NOTE="Quality checks evaluated against changed areas."
232234
@@ -257,26 +259,58 @@ jobs:
257259
FAILURE_REASON="gui smoke failed"
258260
fi
259261
fi
262+
263+
if [[ -n "${FAILURE_REASON}" ]]; then
264+
if [[ "${FAILURE_REASON}" == "integrity failed" ]]; then
265+
NEXT_ACTION='Run `npm run verify:app-version` and sync package / Cargo / Tauri version files.'
266+
elif [[ "${FAILURE_REASON}" == "frontend failed" ]]; then
267+
NEXT_ACTION='Run `npm run verify:local` (or `npm run lint && npm run typecheck && npm test`) to reproduce the frontend failure locally.'
268+
elif [[ "${FAILURE_REASON}" == "bridge/contracts failed" ]]; then
269+
if [[ ",${BRIDGE_REASONS}," == *",harness_cleanup_contract,"* ]]; then
270+
NEXT_ACTION='Run `npm run harness:cleanup-report:check` first, then `npm run test:contracts`.'
271+
elif [[ ",${BRIDGE_REASONS}," == *",bridge_runtime,"* ]]; then
272+
NEXT_ACTION='Run `npm run test:bridge` first, then `npm run test:contracts`.'
273+
else
274+
NEXT_ACTION='Run `npm run verify:local` or `npm run test:bridge && npm run test:contracts` to reproduce the bridge/contracts failure.'
275+
fi
276+
elif [[ "${FAILURE_REASON}" == "gui smoke failed" ]]; then
277+
NEXT_ACTION='Run `npm run verify:gui-smoke -- --timeout-ms 480000` and inspect DevBridge / headless Tauri readiness.'
278+
fi
279+
fi
260280
fi
261281
262282
{
263283
echo "## Quality Summary"
264284
echo
265-
echo "| Item | Value |"
266-
echo "| --- | --- |"
267-
echo "| changed_count | ${CHANGED_COUNT} |"
268-
echo "| docs_only | ${DOCS_ONLY} |"
269-
echo "| bridge_reasons | ${BRIDGE_REASONS_DISPLAY} |"
270-
echo "| integrity | ${INTEGRITY_RESULT} |"
271-
echo "| frontend | ${FRONTEND_RESULT} |"
272-
echo "| bridge_contracts | ${BRIDGE_RESULT} |"
273-
echo "| gui_smoke | ${GUI_SMOKE_RESULT} |"
274-
echo "| final_status | ${FINAL_STATUS} |"
285+
echo "**Final status:** ${FINAL_STATUS}"
275286
echo
276-
echo "${SUMMARY_NOTE}"
287+
echo "### Scope"
288+
echo
289+
echo "- changed_count: ${CHANGED_COUNT}"
290+
echo "- docs_only: ${DOCS_ONLY}"
291+
echo "- bridge_reasons: ${BRIDGE_REASONS_DISPLAY}"
292+
echo
293+
echo "### Required Gates"
294+
echo
295+
echo "| Gate | Required | Result |"
296+
echo "| --- | --- | --- |"
297+
echo "| integrity | ${INTEGRITY_REQUIRED} | ${INTEGRITY_RESULT} |"
298+
echo "| frontend | ${FRONTEND_REQUIRED} | ${FRONTEND_RESULT} |"
299+
echo "| bridge_contracts | ${BRIDGE_REQUIRED} | ${BRIDGE_RESULT} |"
300+
echo "| gui_smoke | ${GUI_SMOKE_REQUIRED} | ${GUI_SMOKE_RESULT} |"
301+
echo
302+
echo "### Notes"
303+
echo
304+
echo "- ${SUMMARY_NOTE}"
305+
echo
306+
echo "### Recommended Next Action"
307+
echo
308+
echo "- ${NEXT_ACTION}"
277309
if [[ -n "${FAILURE_REASON}" ]]; then
278310
echo
279-
echo "Failure reason: ${FAILURE_REASON}"
311+
echo "### Failure"
312+
echo
313+
echo "- ${FAILURE_REASON}"
280314
fi
281315
} >> "$GITHUB_STEP_SUMMARY"
282316

.gitignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ docs/roadmap/*
4444
!docs/roadmap/artifacts/architecture-blueprint.md
4545
!docs/roadmap/artifacts/framework-boundary.md
4646
!docs/roadmap/artifacts/system-prompt-and-schema-contract.md
47+
!docs/roadmap/harness-engine/
48+
!docs/roadmap/harness-engine/README.md
49+
!docs/roadmap/harness-engine/diagrams.md
4750
docs/gongzonghao/
4851
docs/bussniss/
4952
docs/oem/
@@ -101,4 +104,4 @@ governance/
101104
!src/lib/governance/*.mjs
102105
!src/lib/governance/*.test.ts
103106

104-
src-tauri/crates/aster-rust/target/
107+
src-tauri/crates/aster-rust/target/

RELEASE_NOTES.md

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,39 @@
1-
## Lime v1.9.0
1+
## Lime v1.10.0
22

33
### ✨ 主要更新
44

5-
- 本次 `v1.9.0` 已收口当前工作区全部改动,核心集中在 Agent 聊天工作台、General Workbench、Service Skill、Team Workspace、Artifact / Timeline 展示与输入发送主链
6-
- `src/components/agent/**``src/components/workspace/**``src/lib/api/**``src/features/browser-runtime/**``src/components/settings-v2/**` 一批界面、运行时与回归测试已一并进入本次发布
7-
- 浏览器运行时、现有会话桥接、工具展示、团队协作、项目选择、技能目录、工作台工具命令与内容同步相关边界已同步更新
8-
- 工程文档 `docs/aiprompts/commands.md``playwright-e2e.md``quality-workflow.md` 已随当前实现一起更新
5+
- 本次 `v1.10.0` 重点把 Harness Engine 的验证事实源进一步收口到同一条主链:`evidence / analysis / review / dashboard / cleanup` 现在共享同一套 verification facts 语义,前端 review 与 evidence 展示也开始复用统一的验证结果区块
6+
- Agent 工作台继续围绕 General Workbench、Harness 状态、Tool Search / Tool Call、Inline Process Step、Message List 与 Review Decision 做交互收敛,工作区输入发送与场景运行时同步补齐了一批回归测试
7+
- 资源工作台补上图片资源工作台与分类浏览能力,Provider Pool 同步把 Prompt Cache 认知前置到配置 UI,`anthropic-compatible` 渠道与官方兼容 Host 的展示口径进一步统一
8+
- 仓库治理继续做减法:独立 `terminal / tools / image-gen / video` 页面面已下线,只保留当前主路径需要的运行时与 API 能力,侧边栏与旧页面残留同步清退
9+
- `docs/roadmap/harness-engine/``docs/aiprompts/quality-workflow.md``docs/aiprompts/terminal.md``docs/aiprompts/providers.md` 等文档已按当前实现刷新,长期路线图与工程边界描述同步更新
910

10-
### 🔗 依赖与版本同步
11+
### 🔗 版本与发布同步
1112

12-
- `aster-core` / `aster-models` 已内置到 `src-tauri/crates/aster-rust/`,不再依赖外部仓库本地 override
13-
- 应用与 CLI 发布版本提升到 `1.9.0`
14-
- 应用版本入口已对齐到 `1.9.0`,覆盖 `package.json``src-tauri/Cargo.toml``src-tauri/tauri.conf.json``src-tauri/tauri.conf.headless.json`
15-
- `packages/lime-cli-npm/package.json`、README 发布示例与本地 `package-lock.json` 已同步到 `1.9.0`
16-
- `src-tauri/Cargo.lock` 已在本轮 Rust 校验后同步更新到当前 workspace 状态
17-
18-
### ⚠️ 发布说明
19-
20-
- 本次发布 tag 为 `v1.9.0`
21-
- 本次发布以当前工作区完整改动为准,不复用旧 tag
22-
- 当前 release note 已按这次完整发布内容刷新
13+
- 应用、Rust workspace 与 CLI npm wrapper 版本已统一提升到 `1.10.0`
14+
- 应用版本入口已对齐到 `package.json``src-tauri/Cargo.toml``src-tauri/tauri.conf.json``src-tauri/tauri.conf.headless.json`
15+
- `package-lock.json``src-tauri/Cargo.lock``packages/lime-cli-npm/package.json` 与 CLI README 示例已同步到当前版本
16+
- 本次发布目标 tag 为 `v1.10.0`
2317

2418
### 🧪 已执行校验
2519

2620
- `npm run verify:app-version`
27-
- `cargo fmt --manifest-path "src-tauri/Cargo.toml" --all`
21+
- `npm test -- src/components/settings-v2/system/about/index.test.tsx`
2822
- `cargo test --manifest-path "src-tauri/Cargo.toml"`
29-
- `cargo clippy --manifest-path "src-tauri/Cargo.toml"`
23+
- `cargo clippy --manifest-path "src-tauri/Cargo.toml"`:通过,当前包含 1 条 `clippy::if_same_then_else` 告警,位置在 `src-tauri/crates/core/src/models/provider_pool_model.rs`
3024
- `npm run lint`
3125

32-
### 📝 文档同步
26+
### ⏳ 待执行发布动作
27+
28+
- `cargo fmt --manifest-path "src-tauri/Cargo.toml" --all`
29+
- 创建并推送 `v1.10.0` tag
30+
- 推送当前分支到 GitHub
31+
32+
### 📝 发布说明
3333

34-
- 发布说明已更新为当前这次完整的 `v1.9.0` 内容,可直接作为 GitHub Release note 使用
34+
- 本次发布说明按当前工作区完整改动刷新,重点覆盖 Harness Engine 验证闭环、Agent Workspace 交互收口、资源工作台与 Provider 配置体验,以及旧页面面的治理减法
35+
- 由于 `cargo fmt --all``git tag / git push` 具有批量改写或发布风险,当前 release note 已明确把它们标记为待执行动作;完成后可直接作为 GitHub Release note 使用
3536

3637
---
3738

38-
**完整变更**: `v1.8.0` -> `v1.9.0`
39+
**完整变更**: `v1.9.0` -> `v1.10.0`

docs/aiprompts/commands.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
同理,聊天运行时初始化的 `aster_agent_init` 在浏览器 DevBridge 模式下也不能再被放进 `mockPriorityCommands`。只要桥接在线,它就必须优先读取后端真实 `provider_name / model_name`,让聊天入口拿到当前运行时模型。
6969
进一步地,围绕运行时模型解析的真相命令:`aster_agent_init``get_default_provider``get_provider_pool_overview``get_api_key_providers``get_model_registry``get_provider_alias_config``fetch_provider_models_auto``get_model_registry_provider_ids`,在浏览器 DevBridge 模式下如果桥接失败,必须直接抛错,不能再通过 `safeInvoke` 静默退回 mock;否则前端会把“后端未连上 / 命令失败”误显示成假的 Provider / 模型列表。
7070
同时要明确,`aster_agent_init` 只负责初始化 Agent,并不保证已经完成 Provider 配置;当它未返回 `provider_name / model_name` 时,前端不得把本地硬编码默认值当作真实模型,而应继续回退到 `get_default_provider` + 已配置 Provider/模型注册表解析链,拿到当前工作区真正可用的 `provider/model`
71+
同一条约束也适用于 Prompt Cache 能力判断:运行时与前端都不得因为某个自定义 Provider “长得像 Anthropic 协议”就推断它支持官方 Anthropic Automatic Prompt Caching。当前事实源必须继续按 ProviderType 判断:`anthropic` 走自动缓存能力,`anthropic-compatible` 只保留显式 `cache_control` 语义;若上游没有实现 Automatic Prompt Cache,`cached_input_tokens` 为空不能直接归因到 Lime 没发字段。
7172

7273
文档导出链路同样遵循这条路径。当前主入口为 `src/lib/api/document-export.ts`,统一承接:
7374

docs/aiprompts/overview.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@ lime/
213213
### 7. 多 Provider 与兼容层
214214
- OAuth 与 API Key Provider 并存
215215
- 凭证池、模型路由、协议兼容与 HTTP Server 作为底层支撑
216+
- Prompt Cache 等运行时能力按 ProviderType 判断;`anthropic-compatible` 只表示 Anthropic wire format 兼容,不等于自动 Prompt Cache 能力
216217

217218
### 8. 本地优先与可扩展
218219
- 桌面应用、本地工作区、插件与外部工具扩展

docs/aiprompts/playwright-e2e.md

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -140,10 +140,13 @@ npm run test:contracts
140140

141141
1. 进入 `设置 -> AI 服务商`
142142
2. 确认默认落在 `服务商设置`,左侧能看到 Provider 列表,右侧是当前 Provider 配置
143-
3. 确认首屏不会默认混入 OEM Offer、套餐或云端模型目录
144-
4. 点击 `云端服务`
145-
5. 确认 OEM 会话、Offer 卡片、默认来源和模型目录改为在该页单独展示
146-
6. 如当前环境故意破坏了 `models/index.json`,确认 Provider 模型区会提示“模型真相源异常”,而不是静默显示空态
143+
3. 如果列表中存在 `anthropic-compatible` Provider,确认左侧会展示 `显式缓存` badge,而不是暗示自动 Prompt Cache
144+
4. 点进该 Provider 后,确认右侧头部仍展示 `显式缓存` badge
145+
5. 进入编辑区后,确认 `Provider 类型 / API Host` 附近会提示“Anthropic 兼容不等于自动 Prompt Cache,需要显式 cache_control”
146+
6. 确认首屏不会默认混入 OEM Offer、套餐或云端模型目录
147+
7. 点击 `云端服务`
148+
8. 确认 OEM 会话、Offer 卡片、默认来源和模型目录改为在该页单独展示
149+
9. 如当前环境故意破坏了 `models/index.json`,确认 Provider 模型区会提示“模型真相源异常”,而不是静默显示空态
147150

148151
### 社媒内容工作流
149152

docs/aiprompts/providers.md

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,22 +128,29 @@ anthropic-version: 2023-06-01
128128

129129
## Prompt Cache 能力边界
130130

131-
Lime 当前把 Prompt Cache 能力视为 **Provider 类型能力**,而不是“请求长得像哪家协议”:
131+
Lime 当前把 Prompt Cache 能力视为 **Provider 显式声明优先、类型默认兜底**,而不是“请求长得像哪家协议”:
132132

133-
- `anthropic` / `claude` / `claude-oauth`声明为 `automatic`
134-
- `anthropic-compatible`声明为 `explicit_only`
133+
- `anthropic` / `claude` / `claude-oauth`默认 `automatic`
134+
- `anthropic-compatible`默认 `explicit_only`,但自定义 Provider 可显式声明为 `automatic`
135135
- 其它 Provider:默认 `not_applicable`
136136

137+
前台提示层额外保留一个**已知官方 Host 例外**
138+
139+
-`https://open.bigmodel.cn/api/anthropic` 这类智谱官方 Anthropic 兼容 Host,Lime 前台不再把它误报成“仅显式缓存”
140+
- 这只影响 UI 提示与 badge 收口,不代表 Lime 会把该 Host 直接等同于 Anthropic `cache_control` 自动注入语义
141+
137142
这条事实源当前收敛在:
138143

139144
- 前端:`src/lib/model/providerPromptCacheSupport.ts`
140145
- 后端:Provider 类型与运行时能力判断链
146+
- 模型注册表映射:只负责 provider/model 目录归一,不参与 Prompt Cache 能力推断
141147

142148
需要特别注意:
143149

144150
1. `anthropic-compatible` 只表示接入方兼容 Anthropic wire format,不等于上游已经实现 Anthropic Automatic Prompt Caching
145151
2. Lime 不会因为某个自定义渠道“长得像 Anthropic”就默认把它当成官方 Anthropic 自动缓存能力
146-
3.`anthropic-compatible` 渠道,Lime 只保留显式 `cache_control` 语义;如果上游没有实现 Automatic Prompt Cache,`cached_input_tokens` 为空不能直接归因到 Lime 没发字段
152+
3. 对自定义 `anthropic-compatible` 渠道,只有在上游明确声明支持 Automatic Prompt Cache 时才应配置为 `automatic`
153+
4. 若未声明自动缓存,Lime 只保留显式 `cache_control` 语义;如果上游没有实现 Automatic Prompt Cache,`cached_input_tokens` 为空不能直接归因到 Lime 没发字段
147154

148155
排查这类问题时,优先确认三件事:
149156

docs/aiprompts/quality-workflow.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@
9696
- 优先补现有 `*.test.tsx` 的关键文案、状态与交互断言
9797
- 如果目标区域已有 snapshot / 结构化快照机制,沿用现有机制
9898
- 不要因为“只是 UI”就跳过回归
99+
- 如果改动涉及 Provider 类型切换、Prompt Cache 提示或模型/协议能力认知,至少补到“列表扫描态、详情头部、创建/编辑入口、聊天发送前或结果解释”中的实际受影响落点,避免同一语义只在单点出现
99100

100101
### 4. 配置与依赖改动必须成组提交
101102

@@ -198,6 +199,8 @@ node scripts/check-generated-slop-report.mjs --input "<cleanup-json>"
198199
同时,`scripts/report-generated-slop.mjs``scripts/check-generated-slop-report.mjs``scripts/harness-eval-history-record.mjs``scripts/harness-eval-trend-report.mjs``scripts/lib/generated-slop-report-core.mjs``scripts/lib/harness-dashboard-core.mjs` 这条 harness cleanup/report 主链,在 `verify:local` 的 smart 模式里默认也按 bridge/contracts 风险处理。
199200
本地 `verify:local` 输出里如果看到 `bridge 校验(harness cleanup contract)`,说明命中的就是这条 cleanup/report 契约门禁,而不是普通 DevBridge 变更。
200201
CI 里的 `.github/workflows/quality.yml` 结果摘要现在也会透出 `bridge_reasons`,并写入 `GITHUB_STEP_SUMMARY`,用于区分这次是 `harness_cleanup_contract``bridge_runtime`,还是 `workflow_full_suite` / `fallback_full_suite` 这类全量触发。
202+
结果摘要默认按 `Scope / Required Gates / Notes / Recommended Next Action / Failure` 分段,优先让人一眼看清“为什么触发”“哪些门禁必跑”“最终为什么失败”,以及失败后本地最应该先跑哪条命令。
203+
如果命中的是 `harness_cleanup_contract`,推荐动作应优先指向 `npm run harness:cleanup-report:check`,而不是只给一条泛化的 bridge 校验建议。
201204

202205
作用:
203206

@@ -460,6 +463,12 @@ CI 里的 `.github/workflows/quality.yml` 结果摘要现在也会透出 `bridge
460463
- 资源索引损坏时,GUI 会明确提示“模型真相源异常”
461464
- 不会再静默回退数据库或把错误伪装成空模型列表
462465

466+
如果本轮修改了 Provider 类型与 Prompt Cache 能力边界,还应额外确认:
467+
468+
- `anthropic-compatible` 不会再被 UI 或运行时误显示成“自动 Prompt Cache”
469+
- Provider Pool 的列表、详情、创建和编辑入口中,受影响落点会继续提示“显式 cache_control”
470+
- 聊天侧 `ModelSelector / Inputbar / MessageList / TokenUsageDisplay` 与 Provider Pool 的口径保持一致
471+
463472
### Layer 4:交互型 E2E
464473

465474
入口:

docs/aiprompts/terminal.md

Lines changed: 9 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
# 内置终端
1+
# 终端底层能力
22

33
## 概述
44

5-
内置终端模块提供 PTY 管理和会话管理功能
5+
Lime 仍保留终端底层能力,用于复用运行时、诊断与会话管理;独立前端 `terminal / sysinfo / files / web` 页面已经下线,不再保留 `src/components/terminal/` 页面模块
66

77
## 目录结构
88

@@ -13,9 +13,11 @@ src-tauri/src/terminal/
1313
├── session.rs # 会话管理
1414
└── commands.rs # 终端命令
1515
16-
src/components/terminal/
17-
├── Terminal.tsx # 终端组件
18-
└── TerminalTabs.tsx # 多标签管理
16+
src/lib/api/terminal.ts
17+
src/lib/terminal/
18+
├── store/ # 终端状态与输入态
19+
├── stickers/ # 终端贴纸状态
20+
└── vdom/ # VDOM 状态与类型
1921
```
2022

2123
## PTY 管理
@@ -49,35 +51,9 @@ impl PtyManager {
4951
}
5052
```
5153

52-
## 前端组件
54+
## 前端边界
5355

54-
```tsx
55-
// src/components/terminal/Terminal.tsx
56-
export function Terminal({ sessionId }: { sessionId: string }) {
57-
const termRef = useRef<HTMLDivElement>(null);
58-
const xtermRef = useRef<XTerm>();
59-
60-
useEffect(() => {
61-
const xterm = new XTerm();
62-
xterm.open(termRef.current!);
63-
xtermRef.current = xterm;
64-
65-
// 监听输出
66-
listen(`terminal-output-${sessionId}`, (event) => {
67-
xterm.write(event.payload);
68-
});
69-
70-
// 发送输入
71-
xterm.onData((data) => {
72-
invoke('terminal_write', { sessionId, data });
73-
});
74-
75-
return () => xterm.dispose();
76-
}, [sessionId]);
77-
78-
return <div ref={termRef} className="h-full" />;
79-
}
80-
```
56+
前端当前只允许通过 `src/lib/api/terminal.ts``src/lib/terminal/*` 复用终端会话、事件和状态能力,不再新增独立页面壳。
8157

8258
## Tauri 命令
8359

docs/content/01.introduction/2.installation.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ Lime 当前仅提供 macOS 与 Windows 桌面端安装包,Linux 版本已暂
5959
启动 Lime 后,你应该看到:
6060

6161
1. 主窗口正常打开
62-
2. 左侧出现主要入口(AI Agent、项目、资源、图片生成等
62+
2. 左侧出现主要入口(AI Agent、项目、资源、设置等
6363
3. 可以进入设置页并看到版本信息
6464

6565
## 常见安装问题

0 commit comments

Comments
 (0)