Jelajahi Sumber

release: v1.4.0 — 工作区对话模式 + 两条执行车道

版本号四处对齐(agentpaas/lambdagent pyproject + app.py 3 处)1.3.1→1.4.0。
新功能:工作区对话(选文件夹直接对话)、原生 claude-code 执行车道、按 provider 分流、
磁盘进度纪律(PROGRESS.md)防乱跳、默认 qwen-plus。可靠性:工作夹强制绑定+硬沙箱、
目录一致性、claude-code 卡死治理(轮换/熔断/工具在飞不误杀)、MCP 隔离、401 人话、
qwen context_window 修正、瞬时网络断连重试。

回归:lambdagent 594 + agentpaas 343(+1 skip)全绿。详见 RELEASE_NOTES_v1.4.0.md。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
kenny67nju 2 bulan lalu
induk
melakukan
6300b50348

+ 48 - 0
RELEASE_NOTES_v1.4.0.md

@@ -0,0 +1,48 @@
+# lambdagentpaas v1.4.0
+
+发布日期:2026-06-16
+
+## 主题:工作区对话模式(Claude Code 式)+ 两条执行车道
+
+本版本新增「选文件夹直接对话」的工作区助手,并围绕它做了大量真实运行暴露出的可靠性加固。
+核心是**两条执行车道**:claude-code 走原生 agentic 模式、其他模型走 react 模式,各取所长。
+
+## ✨ 新功能
+
+- **工作区对话模式**:工作台除「选专项智能体」外,新增「选文件夹直接对话」——像 Claude Code
+  一样在指定文件夹里读写文件、改代码、跑命令、出文档,多轮连续协作。第 12 个内置包
+  `workspace.assistant`。
+- **原生 claude-code 执行车道**:工作区助手用 claude-code(sonnet)时,直接让 claude-code
+  当 agent 本身(`claude -p --output-format stream-json`,native 工具开、结构化 tool_use、
+  自管上下文),而非套进 react-over-text 封装。解析事件流映射到现有 SSE,前端零改。
+- **按 provider 自动分流**:claude-code → 原生车道;qwen/ollama/openai 等 → react 车道
+  (对非 agentic-CLI 模型这本就是对的模式)。
+- **磁盘进度纪律(PROGRESS.md)**:react 车道的工作区助手对多步任务自动维护
+  `PROGRESS.md` 待办清单(建/读/逐项打勾、不重做、不做完不收尾)——把 claude-code 的
+  TodoWrite 用磁盘文件复刻,绕开"上下文截断导致失忆乱跳"。默认基座升 qwen-plus(大上下文)。
+
+## 🛡️ 可靠性加固(均来自真实运行复盘)
+
+- **工作文件夹强制绑定**:无目录不运行(后端 400 + 前端强制选目录 + agent "找不到就停"铁律),
+  杜绝"静默回退空目录、凭记忆编造、假装成功"。
+- **工作文件夹硬沙箱**:WriteFile/EditFile 越界写直接拒绝。
+- **目录一致性**:文件工具相对路径按会话 CWD 解析(不再落到服务进程目录);模型操作目录与
+  日志目录解耦。
+- **claude-code 卡死治理**:大会话 resume 卡死 → 会话轮换 + 连卡熔断 + 保留兜抖动 + 重试;
+  长实验/编译期间不按 idle 误杀(工具在飞看门狗)。
+- **MCP 隔离**:`--strict-mcp-config` 防 claude-code 只看到用户 Gmail/Calendar 而误判"无工具"。
+- **401 人话提示**:claude-code 订阅令牌过期翻译成"请重新登录",并堵住静默失败。
+- **qwen 上下文修正**:按真实模型设 context_window(qwen-max=30720 等),治
+  "Range of input length [1, 30720]" 400。
+- **瞬时网络断连重试**:dashscope "Remote end closed connection" 等判 retryable,不再一次
+  抖动杀掉整条长 run。
+
+## ✅ 质量
+
+- 回归全绿:lambdagent **594** + agentpaas **343**(+1 skip)。
+- live 验证:原生车道真起 claude-code 在文件夹写文件;qwen-plus 工作区助手 29 步产出中英文 PDF。
+
+## 升级说明
+
+- 工作区助手实例随版本默认 qwen-plus;用 claude-code(sonnet)可走更稳的原生车道。
+- 无破坏性变更;orchestrator/科研评审/pipeline 等既有 agent 行为不变。

+ 1 - 1
agentpaas/pyproject.toml

@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
 
 [project]
 name = "agentpaas"
-version = "1.3.1"
+version = "1.4.0"
 description = "Agent Platform as a Service — powered by lambdagent"
 readme = "README.md"
 license = "BUSL-1.1"

+ 3 - 3
agentpaas/src/agentpaas/api/app.py

@@ -29,7 +29,7 @@ async def _lifespan(_app: FastAPI):
 app = FastAPI(
     title="AgentPaaS",
     description="Agent Platform as a Service — powered by lambdagent",
-    version="1.3.1",
+    version="1.4.0",
     docs_url="/docs",
     redoc_url="/redoc",
     lifespan=_lifespan,
@@ -309,7 +309,7 @@ async def _on_startup():
 
 @app.get("/health")
 async def health():
-    return {"status": "ok", "version": "1.3.1"}
+    return {"status": "ok", "version": "1.4.0"}
 
 # Serve built Web UI static files when webui-dist/ exists.
 #
@@ -375,7 +375,7 @@ else:
     async def root():
         return {
             "service": "AgentPaaS",
-            "version": "1.3.1",
+            "version": "1.4.0",
             "docs": "/docs",
             "ui": "Run `cd webui && npm install && npm run build` to enable the Web UI.",
             "description": "Agent Platform as a Service — Every agent is a Lambda term.",

+ 1 - 1
lambdagent/pyproject.toml

@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
 
 [project]
 name = "lambdagent"
-version = "1.3.1"
+version = "1.4.0"
 description = "A Lambda Calculus Agent DSL — every agent is a function, every composition is function composition, every loop is a Y combinator."
 readme = "README.md"
 license = "BUSL-1.1"