Repository navigation
v0.4.3
SLATE v0.4.3
The largest release so far. Two themes run through it: many projects at once (a project registry, cross-project parallel runs, per-project overlays for Actions / knowledge / MCP) and long-running work you can see and stop (background terminal tasks and subagents, three-tier wake-up, a rebuilt autonomous loop with an explicit "done" channel and one-click resume). On top of that, three approval levels moved into the input bar, the right rail was consolidated into a single column, and silent endings became loud.
✨ New
- Project registry and switcher — register several projects and switch the active one from the sidebar; each conversation belongs to a project. Per-project config overlays merge three effective values (global / project / workspace) at a single injection point, so Actions, the knowledge base and MCP servers can differ per project.
- Cross-project parallel runs — a registry of runs keyed by conversation: two projects can generate at the same time, each with its own usage accounting and background badge. Switching the visible conversation mid-run rebinds cleanly instead of disturbing the other run.
- Background terminal tasks (
bg_task) — for long commands (experiment servers, compiles, training). Actionsstart / status / log / stop / list, a ring buffer plusdata/bg_tasks/<id>.log, and the whole process tree is collected (killpgon POSIX,taskkill /F /Ton Windows). States arerunning | exited | stopped | failed. High-risk commands still pass the same double check asterminal. Crucially, the model is not asked to poll: it is woken by events — at an idle round boundary, at the round cap viaextend, and by an idle slow-probe auto-resume (global switch on by default, 3 auto-resumes per conversation). - Background subagents —
subagent_runacceptsbackground=trueand shares the same wake-up, badges and right-rail panel asbg_task; local batch lists and backend task lists merge into one view. - Background task panel — a right-rail panel listing every live task with its state, tail output and stop control.
- Three approval levels, per conversation — Manual (commands and network access both ask) / Auto (only high-risk rules ask) / Full Access (nothing asks; catastrophic commands are still hard-blocked by the backend, and the icon and label are both red). The level lives in the input bar, is stored per conversation, and the Settings page is demoted to "the default level for new conversations". Mobile gets the same control; the decision point is consolidated into
riskguardalone, and parallel calls now queue their dialogs instead of racing. - Per-item AI feature switches — Settings → AI helpers lists every token-spending feature with its own on/off switch and model picker.
- Workspace project type — a project that stores config in the host directory while its members can be arbitrary folders, with exactly one current root at any time; file / Git / terminal keep single-root semantics, and you add or remove members from the sidebar chip.
- Per-project constitution — opening a project no longer overwrites the global constitution; an effective version is computed and injected at one point, and Settings says which copy you are editing.
- Context budget per model + capability-aware thinking effort — a per-model context slider (Auto / 100K / 200K / 400K / 600K / 800K / 1M) whose value is simultaneously the auto-compaction threshold and the usage-bar denominator. Thinking effort is split into 9 endpoint capability classes covering Kimi / Qwen / GLM / Doubao / MiniMax / ERNIE / Ollama and custom endpoints: models that force reasoning get no "off", on/off models are labelled "low/medium/high are all treated as on", unsupported ones are greyed out with an explanatory toast, and a 400 naming the field causes one retry with it stripped — worst case the level is ignored, not the model unusable.
- Autonomous loop made visible and stoppable — AutoPilot no longer treats "no tool call this round" as finished: when the model claims completion it runs a bounded wrap-up check and feeds the gap back.
exit_target_modeandexit_autopilotlet the model stop after its final report rather than being aborted. When a run stops, the reason is stated and a "Continue to completion" bar appears in the message list — one click resumes from the current context. Round caps were raised (Autopilot 18/28 → 24/40, target mode 50 → 80), and narrow storedmaxRoundsare lifted on load. - Board view: Workflow (5th tab) — a wall of Slate Actions cards you can run directly, plus a live progress layer that pulls snapshots and patches only changed leaves to survive per-round redraw storms. Team conversations persist with real ledger edges (
parentCallId), so the star map draws actual edges rather than guesses. - Sidebar task list: sorting + four states — a zero-dependency pure function classifies each conversation as in-progress / needs-attention / errored / done-unread, with five sort orders (recent / by project / by status / created / by usage). Both the classic Tasks tab and the Codex history rail host a control over the same preference. "In progress" only ever comes from live generation rights and is never persisted (no zombie spinners after restart).
- Right-rail TODOLIST can be collapsed at will — a top-bar switch (mirrored into the Codex quick row above the input) returns the whole column's width to the message area, shows
{done}/{total}while collapsed, and greys out with a reason when this conversation has no list. The preference is local-only. - Collapsible history summary — the auto-compaction summary is still sent to the model in the same format but renders as a collapsed strip on both desktop and mobile, parsing Markdown only when expanded.
- Terminal: one-shot shells on Windows — one PowerShell process per command, the command body fed over stdin, exit code reported by the script tail. This kills the whole class of "my command got eaten": multi-line blocks hang in continuation mode, a dirty pipe pins later commands, and PowerShell 5.1 does not understand
&&yet returns 0. - MCP brand icons — 22 vendor SVGs from LobeHub's static set are inlined as SVG marks (with
fill-rulepreserved, otherwise hollow logos fill in as solid blocks) and matched by server name or URL, in one colour path across light and dark themes. - Docs site v2 — aurora backdrop, glass cards, cursor-follow highlight and a facts marquee.
🐛 Fixed
- A new conversation no longer sends empty history —
state.messages(the reference to the visible thread) andthreads(one array per conversation) could diverge: creating a conversation changedcurrentConversationIdwithout rebinding, so the user's message advanced the previous thread's array whilebuildMessagesread an empty bucket for the new id — upstream received only['system']even though the bubble was visible. Now the new conversation rebinds immediately, andaddMessagedecides three ways, including adopting the caller's array when it has no owner, because the kernel's render-suppression marker (_pendingToolMsgs) is released by object identity — swapping that array would leak the marker forever. - An interrupted output is no longer silent — when the stream ends naturally after producing content but with neither
[DONE]norfinish_reason, the round is now flagged and reported in every mode, with the cause distinguished (thinking consumed the whole output budget, or upstream cut the stream early). A run that produced text but stopped early is marked possibly incomplete, and the existing "Continue" entry is reused. Previously both the notice and the resume path hung off Autopilot/target mode, so with them off you got zero signal and just watched it stop. - The right rail can no longer split into two columns — TODOLIST, task centre and the ink panel were direct children of the horizontal chat row, so two open panels became two side-by-side columns squeezing the message area. They are now stacked inside one
.rail-col; the column collapses on its own when all are hidden. - Thinking-effort slider popup stuck open on desktop —
#effort-pophad no.effort-pop.hidden { display:none }, and desktopstyle.csshas no global.hiddenutility class (that one is mobile-only), so JS toggled a class while the pixels never moved. - The build script did not run — Chinese comments in
build_desktop.batmadecmd.exeswallow line breaks and execute the following line as garbage; comments are now ASCII-only. - Model icons follow the model on any path, and the GLM logo no longer inverts wrongly in dark mode.
buildPersistentDatadroppedreasoningEffort— the downstream normalizer turnedundefinedintoauto, and the merge-style write overwrote the user's choice, so the level never reacheddesktop_state.json. Aconsumed ⊆ producedinvariant now pins the whole persistence chain.renderFileTreeempty-check fooled by built-in array methods —!data.entrieslet an array with its own.entriesthrough, throwing "not iterable" when a project was closed.- Background panel state enum was missing the backend's
failed, so a non-zero exit displayed as a vague "ended abnormally".
🔧 Chores
- Version bumped to 0.4.3 (
APP_VERSIONand installerMyAppVersionin sync); frontend cache string refreshed to20260925-011; 35 self-check scripts in tree, all green, plus browser walks and mutation probes for every new contract. - 79 groups of colloquial and verbose UI strings removed, with i18n keys, English values and literals rewritten together (9 guards re-pinned to the new anchors).
- The five built-in
SKILL.mdskills and two expert-pack seeds ship with the package (installed only if absent). - README / GUIDE / docs site counts and the setup guide synced.
📥 Downloads
| Platform | File |
|---|---|
| Windows 10/11 x64 | SLATE-Setup-0.4.3.exe (checksum: SLATE-Setup-0.4.3.exe.sha256) |
| macOS | SLATE-Setup-0.4.3.dmg (checksum: SLATE-Setup-0.4.3.dmg.sha256) |
Install over the previous version — chat history, projects, approval levels and API key settings are preserved. If you are coming from 0.4.2 or earlier, note that approval now defaults to Manual, so commands and network access will ask the first time.
⚠️ Known limitations
- Parallel runs are cross-project. Two runs inside the same project still serialize; worktree-isolated same-project parallelism with a merge review is designed but not landed.
- Background task and subagent lifetime equals the backend process. Refresh or close the window and the task list is gone (logs stay in
data/bg_tasks/); nothing is restored across a restart. - Auto-resume has a budget. Three auto-resumes per conversation by default, then it stops and asks.
- Approval levels are a per-machine preference — intentionally not synced across devices.
- The macOS
.dmgis produced by the CI release workflow, not locally.
SLATE 砚 v0.4.3
目前幅度最大的一次发布。两条主线贯穿其中:同时管多个项目(项目注册表、跨项目并行、Actions/知识库/MCP 的分项目覆盖)与长跑任务看得见、停得住(后台终端任务与后台子代理、三层唤醒、重做的自主循环带显式收口与一键续跑)。此外,三档审批搬进输入框、右栏合并成一根竖栏、静默收尾全部改成明说。
✨ 新功能
- 项目注册表与切换器:可注册多个项目并在侧栏切换当前项目,会话归属到项目。分项目配置覆盖把三份生效值(全局 / 项目 / 工作区)在单一注入点合并,于是 Actions、知识库与 MCP 都能按项目各有一份。
- 跨项目并行运行:以会话为键的 runs 登记表,两个项目可以同时生成,各自记自己的用量与后台徽标。生成途中切换视野会话会干净重绑,不再打扰另一场的运行。
- 后台终端任务(
bg_task):面向实验服务器、编译、训练这类长跑命令。支持start / status / log / stop / list,环形缓冲 +data/bg_tasks/<id>.log,整棵进程树一起收(POSIX 走killpg,Windows 走taskkill /F /T);状态为running | exited | stopped | failed。高危命令仍与terminal同一套双层拦截。要点是不要求模型轮询:靠事件叫醒——轮次末空转时注入、轮数用尽时extend追加、空闲慢探时自动续跑(全局开关默认开,单会话上限 3 次)。 - 后台子代理:
subagent_run支持background=true,与终端bg_task共用同一套唤醒、徽标与右栏「后台任务」面板;本地批次清单与后端任务清单合并成一份视图。 - 后台任务面板:右栏列出所有在跑任务的实时状态、末尾输出与停止入口。
- 审批三档、每场一份:手动审批(执行命令、访问网络都先问)/ 自动审批(只拦高危,其余放行)/ 完全访问(都不问,灾难级命令仍由后端硬拦;图标与文字同标红)。档位落在输入框上,按对话各存一份,设置页降级为「新对话的默认档」。手机端给同一套控件;判定口收敛到
riskguard一处,并行调用改为排队弹窗,不再撞车就替用户说不。 - AI 辅助功能逐项开关:设置页列出每一处耗 Token 的功能,各自的开关与选模型。
- 工作区项目类型:一种配置存在宿主目录、成员可以是任意文件夹的项目,任何时刻只有一个当前根;文件 / Git / 终端沿用单根语义,加减成员在侧栏 chip 上完成。
- 项目宪法分项目生效:打开项目不再把项目宪法覆写进全局,改为计算「生效版本」并收敛到一处注入,设置页标明正在改的是哪一份。
- 每模型上下文预算 + 按端点能力的思考强度:设置页每个模型一行上下文滑杆(自动 / 100K / 200K / 400K / 600K / 800K / 1M),同一个值同时作为自动压缩阈值与用量条分母。思考强度拆成 9 类端点能力词表,覆盖 Kimi / 通义 / GLM / 豆包 / MiniMax / 文心 / Ollama 与自定义端点(按
base_url前缀回落):强制思考的不给「关」档,只分开关的标注「低/中/高都按开」,不支持的置灰并弹回声提示,上游 400 点名该字段时剥掉重发一次——最坏是档位不生效,而非模型不可用。 - 自主循环可见可控:AutoPilot 不再把「这一轮没再调工具」当收工,模型声称完成时先做有界收尾校验,对不上就把缺口回灌;
exit_target_mode/exit_autopilot让「停」发生在最终汇报之后,而不是被 abort。停止时说明原因,并在消息区挂「继续跑完」条,点一下从当前上下文续跑。轮数上限放宽(Autopilot 18/28 → 24/40,目标模式 50 → 80),旧配置里偏窄的maxRounds在装载时抬高。 - 黑板第 5 档「工作流」视图:Slate Actions 卡片墙可直接运行,实时进度层用快照拉取 + 只补丁变化的叶子,抗住每轮重绘风暴。团队会话落库并把派生边记进同一份账(
parentCallId),星图才画得出真边。 - 侧栏任务列表可排序 + 四态标志:零依赖纯函数统一判定 进行中 / 需要操作 / 出错 / 已完成未查看,支持最近更新 / 按项目 / 按状态 / 创建时间 / 按用量 五种排序;经典「任务」页签与 Codex 历史栏各挂一份控件、共用同一份偏好。「进行中」只来自实时生成权、绝不落库(重启不留僵尸转圈)。
- 右栏 TODOLIST 随时折叠:顶栏开关(Codex 布局镜像到输入框上方快捷行)整栏收起把宽度还给消息区,折叠中显示
{done}/{total},这场没有清单时置灰并说明原因;偏好只存本机。 - 历史摘要折叠条:自动压缩的摘要仍按原格式发往模型,只在渲染层折起来,桌面端与移动端各一套,展开时才解析 markdown。
- 终端一次性 shell(Windows):一条命令一个 PowerShell 进程、命令主体走 stdin、退出码由脚本尾部回报。一次性收掉「命令被吞」的一整类根因:多行块停在续行模式、脏管道钉死后续命令、5.1 不认
&&却回 0。 - MCP 品牌图标:vendor LobeHub 静态 SVG 22 张原件、生成内联 mark(保留
fill-rule,否则空心 logo 糊成实心块),按 server 名或 URL 认品牌,面板与工具芯片在明暗主题下同一色路径。 - 官网 v2:极光底纹、玻璃卡片、光标追光、事实跑马灯。
🐛 修复
- 新对话不再发空历史:
state.messages(可见那一份的引用)与threads(每场一份数组)会分叉——新建会话只改了currentConversationId没重绑,用户消息推进了上一场那只数组,而buildMessages取历史走新 id 的空桶,上游只收到['system'],气泡上却看得见。现在新建会话当场重绑;addMessage改三分支判定,其中包括「手上这只数组没有主则收下它」——因为 kernel 的渲染抑制标记(_pendingToolMsgs)按对象引用释放,换成别的数组等于标记永远释放不掉。 - 输出中断不再静默:流收到内容后自然结束、且既无
[DONE]也无finish_reason时,本轮会被标记并在所有模式下如实报出,且分开说原因(思考占满输出上限 / 上游提前中断);正文有内容但流提前断的提示可能不完整,并复用现成的「继续」入口。此前通知与续跑入口都挂在 Autopilot/目标模式上,关掉就是零信号,用户只看到「它自己停了」。 - 右栏不再开出两根:TODOLIST、任务中心、墨迹三块原是横向聊天行的直系子元素,两块同时开着就成了两根并列右栏、挤压消息区。现在统一叠进一根
.rail-col,全隐藏时整栏自然塌成 0。 - 思考强度滑杆弹窗在桌面端一直摊着:
#effort-pop缺.effort-pop.hidden { display:none },而桌面style.css没有全局.hidden工具类(那是mobile.css的),JS 在切类名而像素不动。 - 构建脚本跑不起来:
build_desktop.bat里的中文注释让cmd.exe吞掉换行、把下一行当垃圾执行,注释改为纯 ASCII。 - 模型图标跟随任何路径的模型切换,GLM logo 深色模式不再反白错。
buildPersistentData漏产出reasoningEffort:下游归一化把undefined变成auto,合并式写入覆盖掉用户选择,档位一直存不进desktop_state.json。现以consumed ⊆ produced不变量钉住整条落盘链。renderFileTree判空被数组内置方法骗过:!data.entries放过了自带.entries的数组,关项目时抛 not iterable。- 后台面板状态枚举漏了后端的
failed,非 0 退出被显示成笼统的「异常结束」。
🔧 工程
- 版本号升至 0.4.3(
APP_VERSION与安装包MyAppVersion同步);前端缓存串刷新为20260925-011;仓库内 35 个自检脚本全绿,每条新契约另有真浏览器走查与变异取证。 - 清掉口语化、啰嗦表述共 79 组,i18n 键、英文值与各处字面量同步改写(9 个守卫的文案锚点跟着重钉)。
- 内置 5 个
SKILL.md技能与 2 个专家包种子随包分发(安装端 onlyifdoesntexist)。 - README / GUIDE / 官网计数与安装向导同步。
📥 下载
| 平台 | 文件 |
|---|---|
| Windows 10/11 x64 | SLATE-Setup-0.4.3.exe(校验:SLATE-Setup-0.4.3.exe.sha256) |
| macOS | SLATE-Setup-0.4.3.dmg(校验:SLATE-Setup-0.4.3.dmg.sha256) |
覆盖安装即可,会话历史、项目、审批档位与 API Key 配置全部保留。从 0.4.2 及更早版本升级请注意:审批默认档为「手动审批」,命令与联网首次会先征求同意。
⚠️ 已知限制
- 并行限于跨项目。同一项目内的两个 run 仍然串行;worktree 隔离的同项目并行与合并审查已设计未落地。
- 后台任务与子代理的寿命等于后端进程。刷新或关窗后任务清单即止(日志仍在
data/bg_tasks/),重启不恢复。 - 自动续跑有配额:单会话默认 3 次,用尽即停下询问。
- 审批档位是本机偏好,刻意不跨设备同步。
- macOS 的
.dmg由 CI 的 release workflow 构建,非本地产出。