Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions RELEASELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,35 @@
# Release Log

## v0.8.5

飞书流式消息与审批路由全面升级;Coding Tools 集成(Claude Code / Codex / Cursor);交付物页面 UX 大改版;Prompt 工程全面重构;代码块语法高亮与 Mermaid/PlantUML 图表渲染;GPT-5.6 模型目录;多项调度与流式稳定性修复。

### New Features

- **飞书流式卡片与审批路由** — 飞书适配器支持流式文本卡片、消息合并处理、审批路由分发、完整预设配置;MCP 启动优化与凭据自动注入
- **Coding Tools 集成** — 新增 Claude Code / Codex / Cursor 外部 AI 工具连接,Settings UI 简化,权限模式与检测可靠性修复
- **交付物页面 UX 大改版** — 过滤器、分组折叠、移动端适配全面优化
- **代码块增强** — 语法高亮、Mermaid/PlantUML 图表渲染、代码块折叠/展开、编辑 textarea 自动伸缩
- **Markdown 前端优化** — i18n 模式切换、排版改进、HTML 选区支持
- **GPT-5.6 系列模型** — OpenAI Provider 目录新增 GPT-5.6 系列模型
- **Prompt 工程全面重构** — 子任务契约强制执行、提示策略优化
- **package_install 支持 team_id** — 安装包时可指定目标团队

### Bug Fixes

- **修复飞书 MCP 凭据传递** — 使用 reuseGlobal 传递真实凭据,存在飞书凭据时自动注入 feishu-lark server
- **修复流式状态丢失** — 解决流式输出跨会话活动污染与状态丢失问题
- **修复定时任务调度停滞** — 任务完成时重新计算 nextRunAt,修复 cron 调度停滞
- **修复幽灵重试循环** — 指数退避、tasksSubmittedForReview 清理、blocked 状态守卫
- **修复任务取消后调度未暂停** — 取消任务时正确暂停调度,修复 FSM 违规与 stagger 竞态
- **修复 MCP 连接竞态** — MCP 连接竞态条件、记忆上限、逐项取消按钮、权限错误提示

### Stats

- 62 files changed, +8,500 / −2,100 lines

---

## v0.8.4

Electron 桌面应用全平台发布(macOS ARM/Intel、Windows、Linux);分发策略重构(macOS/Windows 以桌面端为主、npm 为辅,Linux 保留服务器二进制);模型路由 UI 优化;Agent 完成标记修复;CI 流水线精简。
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -52,5 +52,5 @@
"node-datachannel"
]
},
"version": "0.8.4"
"version": "0.8.5"
}
2 changes: 1 addition & 1 deletion packages/a2a/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@
"dependencies": {
"@markus/shared": "workspace:*"
},
"version": "0.8.4"
"version": "0.8.5"
}
2 changes: 1 addition & 1 deletion packages/chrome-extension/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@
"esbuild": "^0.25.0",
"typescript": "^5.6.0"
},
"version": "0.8.4"
"version": "0.8.5"
}
2 changes: 1 addition & 1 deletion packages/cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,5 +41,5 @@
"commander": "^14.0.3",
"esbuild": "^0.27.4"
},
"version": "0.8.4"
"version": "0.8.5"
}
2 changes: 1 addition & 1 deletion packages/comms/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@
"dependencies": {
"@markus/shared": "workspace:*"
},
"version": "0.8.4"
"version": "0.8.5"
}
2 changes: 1 addition & 1 deletion packages/core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,5 @@
"@types/turndown": "^5.0.6",
"@types/ws": "^8.18.1"
},
"version": "0.8.4"
"version": "0.8.5"
}
2 changes: 1 addition & 1 deletion packages/desktop/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,5 +35,5 @@
"esbuild": "^0.27.4",
"typescript": "^5.9.3"
},
"version": "0.8.4"
"version": "0.8.5"
}
2 changes: 1 addition & 1 deletion packages/gui/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,5 @@
"devDependencies": {
"@types/sharp": "^0.32.0"
},
"version": "0.8.4"
"version": "0.8.5"
}
2 changes: 1 addition & 1 deletion packages/org-manager/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,5 @@
"devDependencies": {
"@types/ws": "^8.18.1"
},
"version": "0.8.4"
"version": "0.8.5"
}
2 changes: 1 addition & 1 deletion packages/remote/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,5 @@
"devDependencies": {
"@types/ws": "^8.18.1"
},
"version": "0.8.4"
"version": "0.8.5"
}
2 changes: 1 addition & 1 deletion packages/shared/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,5 @@
"dev": "tsc -b --watch",
"clean": "rm -rf dist *.tsbuildinfo"
},
"version": "0.8.4"
"version": "0.8.5"
}
2 changes: 1 addition & 1 deletion packages/storage/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@
"dependencies": {
"@markus/shared": "workspace:*"
},
"version": "0.8.4"
"version": "0.8.5"
}
2 changes: 1 addition & 1 deletion packages/web-ui/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,5 +45,5 @@
"typescript": "^5.9.3",
"vite": "^7.3.1"
},
"version": "0.8.4"
"version": "0.8.5"
}
34 changes: 19 additions & 15 deletions packages/web-ui/src/components/ExecutionTimeline.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -714,12 +714,13 @@ export function ToolCallRow({ info, showTime, time, isLast }: {
return (
<>
<div
className={`relative flex items-start gap-2 py-0.5 min-w-0 ${!isLast ? 'border-b border-border-default/30 pb-1.5 mb-0.5' : ''} ${clickable ? 'cursor-pointer rounded hover:bg-surface-elevated/30 transition-colors' : ''}`}
className={`relative py-0.5 min-w-0 ${!isLast ? 'border-b border-border-default/30 pb-1.5 mb-0.5' : ''} ${clickable ? 'cursor-pointer rounded hover:bg-surface-elevated/30 transition-colors' : ''}`}
onClick={() => setExpanded(true)}
>
{showTime && time && (
<span className="text-[10px] text-fg-tertiary shrink-0 w-24 text-right tabular-nums mt-0.5 hidden md:inline">{time}</span>
<span className="text-[10px] text-fg-tertiary tabular-nums hidden md:block mb-0.5">{time}</span>
)}
<div className="flex items-start gap-2">
<div className="flex flex-col items-center shrink-0 mt-0.5" style={{ width: 14 }}>
<div className={`w-3 h-3 rounded-full border flex items-center justify-center text-[8px] shrink-0 ${
info.status === 'running' ? 'border-brand-500 bg-brand-500/15 animate-pulse'
Expand Down Expand Up @@ -765,6 +766,7 @@ export function ToolCallRow({ info, showTime, time, isLast }: {
</pre>
)}
</div>
</div>
</div>
{expanded && createPortal(<ToolDetailModal info={info} onClose={() => setExpanded(false)} />, document.body)}
{isDone && (() => {
Expand All @@ -785,11 +787,11 @@ function ThinkingRow({ content, time, showTime }: { content: string; time?: stri
const [expanded, setExpanded] = useState(false);
const preview = content.split('\n')[0] ?? '';
return (
<div className="flex items-start gap-2">
<div>
{showTime && time && (
<span className="text-[10px] text-fg-tertiary shrink-0 w-24 text-right tabular-nums mt-2.5 hidden md:inline">{time}</span>
<span className="text-[10px] text-fg-tertiary tabular-nums hidden md:block mb-0.5">{time}</span>
)}
<div className="flex-1 min-w-0 my-1 overflow-hidden bg-purple-500/[0.06] border border-purple-500/15 rounded-lg px-3 py-2 transition-colors hover:bg-purple-500/[0.1]">
<div className="min-w-0 my-1 overflow-hidden bg-purple-500/[0.06] border border-purple-500/15 rounded-lg px-3 py-2 transition-colors hover:bg-purple-500/[0.1]">
<button
onClick={() => setExpanded(!expanded)}
className="flex items-center gap-1.5 text-xs text-purple-400 w-full"
Expand Down Expand Up @@ -826,11 +828,11 @@ export function ExecEntryRow({ entry, showTime, isLast }: {
}
if (entry.type === 'text') {
return (
<div className={`flex items-start gap-2 ${showTime ? '' : ''}`}>
<div>
{showTime && entry.time && (
<span className="text-[10px] text-fg-tertiary shrink-0 w-24 text-right tabular-nums mt-2.5 hidden md:inline">{entry.time}</span>
<span className="text-[10px] text-fg-tertiary tabular-nums hidden md:block mb-0.5">{entry.time}</span>
)}
<div className="flex-1 min-w-0 bg-surface-elevated/50 rounded-lg px-3 py-2.5 my-1 overflow-hidden">
<div className="min-w-0 bg-surface-elevated/50 rounded-lg px-3 py-2.5 my-1 overflow-hidden">
<MarkdownMessage content={entry.content} className="text-sm text-fg-secondary break-words" />
</div>
</div>
Expand All @@ -843,22 +845,24 @@ export function ExecEntryRow({ entry, showTime, isLast }: {
const color = isCompleted ? 'text-green-600' : isStarted ? 'text-blue-600' : isResumed ? 'text-amber-600' : 'text-fg-tertiary';
const dot = isCompleted ? 'bg-green-400' : isStarted ? 'bg-blue-400' : isResumed ? 'bg-amber-400' : 'bg-gray-500';
return (
<div className="flex items-center gap-2 py-0.5 px-1">
<div className="py-0.5 px-1">
{showTime && entry.time && (
<span className="text-[10px] text-fg-tertiary shrink-0 w-24 text-right tabular-nums hidden md:inline">{entry.time}</span>
<span className="text-[10px] text-fg-tertiary tabular-nums hidden md:block mb-0.5">{entry.time}</span>
)}
<span className={`w-1.5 h-1.5 rounded-full shrink-0 ${dot}`} />
<span className={`text-xs capitalize ${color}`}>{t(`execution.statusKnown.${entry.content}`, { defaultValue: entry.content })}</span>
<div className="flex items-center gap-2">
<span className={`w-1.5 h-1.5 rounded-full shrink-0 ${dot}`} />
<span className={`text-xs capitalize ${color}`}>{t(`execution.statusKnown.${entry.content}`, { defaultValue: entry.content })}</span>
</div>
</div>
);
}
if (entry.type === 'error') {
return (
<div className={`flex items-start gap-2 ${showTime ? '' : ''}`}>
<div>
{showTime && entry.time && (
<span className="text-[10px] text-fg-tertiary shrink-0 w-24 text-right tabular-nums mt-2 hidden md:inline">{entry.time}</span>
<span className="text-[10px] text-fg-tertiary tabular-nums hidden md:block mb-0.5">{entry.time}</span>
)}
<div className="flex-1 min-w-0 text-xs text-red-500 bg-red-500/10 border border-red-500/20 rounded px-2.5 py-2 my-1 leading-relaxed break-words overflow-hidden">
<div className="min-w-0 text-xs text-red-500 bg-red-500/10 border border-red-500/20 rounded px-2.5 py-2 my-1 leading-relaxed break-words overflow-hidden">
<span className="font-medium">{t('execution.errorPrefix')}</span> {entry.content}
</div>
</div>
Expand Down
Loading