Releases: Thatgfsj/Flowntier
Release list
Flowntier v0.4.35 — Modern Obsidian & Glass UI Overhaul + Multi-Agent Engine
Flowntier v0.4.35 — Modern Obsidian & Glass UI Overhaul + Multi-Agent Engine
🎨 视觉系统与前端现代化重构 (Modern Obsidian & Glass)
- 全新三栏弹性工作区:左花名册 (LeftRoster) 自动/手动折叠 + 中央主理与推理思考视窗 (CenterPanel) + 右侧任务监控与文件树 (RightPanel)。
- 黑曜石玻璃拟态主题:深色背景搭配 12px 高斯模糊 (
backdrop-blur-md) 与微光磨砂边框 (border-white/10),消除陈旧质感。 - 全动态 Phase 时间轴:从 Phase 1 到 Phase 8 的状态连线具备平滑过渡动画与实时呼吸发光状态灯。
- 智能防遮挡设计:修复 Tooltip z-index 遮挡中央推理视窗;消除底部监控控制台压扁输入框与中央工作区的问题。
- 设置中心模块化重整:解耦历史 2100+ 行单文件,清晰分类模型提供商密钥、工作流配置及诊断日志,消除弹窗遮罩嵌套冲突。
⚡ 多智能体编排器与 DAG 调度引擎
- 真实 DAG 拓扑分批推进:实现多 Worker 任务基于依赖关系的拓扑排序分批与批内安全并发执行。
- Phase 4 派发更新闭环:评审意见生成后实时同步更新计划文档,消除计划空转与无效重试。
- Phase 6 终审与 Phase 7 修复防御:终审全面注入上游变更上下文与修改文件列表,设置最大重试保护机制避免死循环。
- 交付物状态落盘持久化:解决 Phase 8 交付结果因缺失
.await导致落盘丢失的问题。
🛠️ 底层工具链与跨平台兼容
- Windows UNC 路径标准化:消除
\\?\与盘符大小写差异导致的工作区判定拒绝 (outside workspace) 问题。 - Shell 工具执行鲁棒化:Windows 优先调度 PowerShell/Git Bash 并提供 GBK/UTF-8 编码容错与循环报错自动熔断。
- 大模型 API 协议鲁棒化:OpenAI 协议工具调用消息文本为空时严格输出
content: null(兼容 DeepSeek / Ollama / vLLM);原生适配 Anthropic/v1/messages。 - Watchdog 闭包防过期:引入
stateRef彻底根除 React 闭包过期陷阱,确保 30 分钟轮询看门狗状态实时精准。
📦 安装包下载与校验
- Windows 桌面安装包 (64位): Flowntier_0.4.35_x64-setup.exe — 8.89 MB (9,321,706 字节)
- SHA-256 校验码:
7575cf14905f267c96236412407e81874e6085059cb6b41974ba5e2eb5190419
Flowntier v0.4.22 — workdir swap + run_task timeout + file-tree UI + error badge
Flowntier v0.4.22 — chairman's bug fixes (event 000066)
Bug fixes (all 4 closed-loop verified)
A. WORKDIR ↔ WORKSPACE BRIDGE
state.workspace: Arc<RwLock<Workspace>>(was: locked at runtime launch-time cwd)- New routes:
GET /api/workspace,POST /api/workspace/set,GET /api/workspace/tree - Tauri
set_workdir_with_nwtnow firesPOST /api/workspace/setafter writing workdir.json - Was: workdir.json said
O:\trybut runtime wrote toO:\Flowntier\workspace\
B. RUN_TASK TIMEOUT
agent.run()wrapped intokio::time::timeout(default 300s, configurable 10..=1800s)- On timeout synthesise
Done { status: 'TIMEOUT (Ns)' }so subscribers + UI exit sending=true - Was: hang forever when upstream provider throttled
C. FILE TREE UI
- New
apps/desktop/src/components/FileTree.tsxpolls every 5s LeftRosteradds '文件' tab to show the live tree- Chairman can SEE chief writes appear without manual refresh
D. ERROR AGGREGATOR
- pipe-server holds in-memory ring buffer (cap 200) of
ErrorRecord - New route
GET /api/errors/recent?limit=N components/ErrorBadge.tsxmounted in TopBar: red dot + click-to-expand dropdown- Pushed to from: run_task timeout, workspace swap reject, quota recording failure, non-DONE outcome
Verified end-to-end
POST /api/workspace/set 'C:/Users/thatg/workdir-test'→ 200, previous_root =O:\FlowntierGET /api/workspace/tree?depth=2→ 7 entries (chief's earlierO:\Flowntier\workspace\tarot\index.htmlvisible)POST /api/run_task {task:'说一句话证明你活着', timeout_secs:60}→ DONE, taskt_01KWHG0R21NQ30ZVN5WYR0FK7FGET /api/errors/recent→ records the earlier workspace_swap warn automatically
Installer
Flowntier_0.4.22_x64-setup.exe— 8,574,597 bytes- sidecar MD5
2e1dde3cdfe1e2bb65b689c60bbf50c4 - Includes the 000066 fix and the prior 000064 dashboard fix
NSIS patches embedded
- (a) sidecar
CheckIfAppIsRunningforflowntier_runtime.exe - (b) belt-and-braces taskkill in
.onInit(handles zombie runtime that's stuck holding the file) - (c) Node.js runtime check — abort install with zh-CN error if Node missing
Flowntier v0.4.21 — Dashboard 任务列表 wired up + NSIS patches fixed
Flowntier v0.4.21 — Dashboard 任务列表 wired up + NSIS patches fixed
修复
- 事件 000064 — Dashboard "任务列表 0/0 完成" 修好
tasks表新增Taskstruct +create_task/list_tasks_for/count_tasks方法run_taskhandler 每次写入一条 task 行(role / model / result 都齐)ensure_workflow_row解决 FK 阻塞:tasks.wf_id有 FK 到workflows.id且 storage crate 默认foreign_keys=true,chat 派生的wf_chat_*没有对应 workflow 行 →INSERT INTO tasks被静默 rollback。修了之后,task 行能正常落地。/api/tasks?wf_id=...端点 + dispatcher?querystrip:路径不再被 query string 阻隔,query 参数注入 body,handler 直接读body.get("wf_id")
- patch-nsis.cjs taskkill belt-and-braces 插入位置 bug
- NSIS
Function不需要显式{,原脚本content.indexOf('{', idx)命中文件头部宏定义里的{,把 taskkill block 插到文件最顶上 → makensis 报Invalid command: ${ - 改为在
Function .onInit\n之后直接插入
- NSIS
校验
GET /api/tasks?wf_id=wf_chat_xxx返回{done, total, rows},21/21 pipe-server 测试通过- 新打 NSIS 包内的
flowntier_runtime.exeMD5ad389cf5de756240300d6abd2825d8a4,含v0.4.21 (event 000064)标记 - NSIS 三个 patch 全在:
CheckIfAppIsRunningsidecar / taskkill belt-and-braces / Node.js 检查
安装包
Flowntier_0.4.21_x64-setup.exe— 8.14 MB- 自动 taskkill 老进程(免文件锁冲突)
- 没装 Node.js 会弹中文错误框
- 装好后跑任何 chief 任务,看仪表盘"任务列表"应该有真实数字,不再是 0/0
v0.4.11 — get_diagnostics + locale-close-modals
Flowntier v0.4.11
What changed
NEW: get_diagnostics Tauri command
Chairman can invoke this from the dev console (or flowntier://diagnostics intent in v0.5) to dump full system state:
{
"data_dir": "C:\\Users\\thatg\\AppData\\Roaming\\flowntier",
"log_dir": "C:\\Users\\thatg\\AppData\\Local\\flowntier\\logs",
"tauri_version": "2.x.y",
"env_vars": {
"MINIMAX_API_KEY": "set" | "unset",
"OPENAI_API_KEY": "set" | "unset",
"ANTHROPIC_API_KEY": "set" | "unset",
"GOOGLE_API_KEY": "set" | "unset",
"DEEPSEEK_API_KEY": "set" | "unset",
"MOONSHOT_API_KEY": "set" | "unset",
"OPEN_BIGMODEL_API_KEY": "set" | "unset"
},
"workdir_json_exists": true|false,
"nwt_root_json_exists": true|false,
"secrets_count": 0,
"sidecar_path": "C:\\Users\\thatg\\AppData\\Local\\flowntier\\sidecar\\flowntier_runtime.exe",
"log_tail": "<last 50 lines>",
"timestamp": "2026-06-29T12:53:00Z"
}Fix: language toggle now closes modals first
Clicking 🌐 中文 while the Settings modal was open used to fail because the modal backdrop intercepted pointer events. Now TopBar dispatches flowntier:close-modals and App closes any open modal BEFORE the locale toggle fires.
scripts/diagnose.cmd
For chairman's hands-on testing. Captures: tasklist, install dir state, AppData state, env vars, NSIS log presence.
What this release does NOT do
- Does NOT verify v0.4.11 works on your real machine (only the local server-side E2E mock does)
- Does NOT auto-detect sidecar crashes (planned v0.5 — pipe-server reads nwt_root.json)
- Does NOT persist locale preference (planned v0.5)
What to do next
- Uninstall v0.4.10 (Control Panel → Programs)
- Run
C:\Users\thatg\Desktop\diagnose.cmd→ save the output - Install
C:\Users\thatg\Desktop\Flowntier_0.4.11_x64-setup.exe - Run
diagnose.cmdagain → save the output - Open Flowntier, test the four flows (workdir, settings, 🌐 toggle, plugins)
- Send both diagnose outputs + any logs/errors
Files
- Installer:
Flowntier_0.4.11_x64-setup.exe(16,080,216 bytes) - Local E2E log:
C:\Users\thatg\v0411-local.log - Screenshots:
C:\Users\thatg\v0411-shots\(6 PNGs) - Comparison guide:
C:\Users\thatg\v0411-diagnostics-comparison.md
Commit
536c44f on main, tag v0.4.11.
Flowntier v0.4.10 — NSIS sidecar check + env-var API key seeding
What changed in v0.4.10
BUG-FRONTEND-RT-15 — NSIS installer now also checks the sidecar
The chairman correctly pointed out that v0.4.9 still failed with 'Cannot open file: O:\Flowntier\flowntier_runtime.exe' and that asking users to run a helper script every time is bad UX.
Root cause: Tauri 2.x's generated installer.nsi inserts !insertmacro CheckIfAppIsRunning "${MAINBINARYNAME}.exe" "${PRODUCTNAME}" at line 634, but this only checks the main binary. The sidecar flowntier_runtime.exe keeps a separate file handle on the binary that the install still fails to overwrite.
Fix: scripts/patch-nsis.cjs post-build script injects a second CheckIfAppIsRunning "flowntier_runtime.exe" "Flowntier sidecar" call. Tauri 2.x doesn't expose an installerHooks config key (the one I tried in v0.4.5 doesn't exist), so we patch the generated NSI file after the build. The script is idempotent (marks the file as 'already patched' on second run).
The chairman no longer needs to run kill_flowntier.cmd before every install.
Workflow to build the sidecar-checked installer locally:
cd apps/desktop
pnpm tauri:build # 1. Build
pnpm tauri:patch # 2. Patch the NSI to also check the sidecarBUG-FRONTEND-RT-17 — env-var API keys seeded on startup
The chairman reported '供应商 (0)' (0 providers) even though OPENAI_API_KEY was in the env. Root cause: the seed_secrets Rust command was never called at app startup — only when Settings was opened. Added a new useEffect in App.tsx that calls invoke('seed_secrets') once on mount. Now the sidecar reads the env vars (OPENAI_API_KEY, ANTHROPIC_API_KEY, GOOGLE_API_KEY, DEEPSEEK_API_KEY, MOONSHOT_API_KEY, OPEN_BIGMODEL_API_KEY) and stores them in the keychain on app startup, so Settings shows the configured providers.
Security reminder
An API key was pasted into the chat during testing. The key was not stored, logged, or transmitted anywhere by this agent, but the key should be rotated via the provider's console ASAP and stored only in environment variables or .env files (which should be in .gitignore). Plaintext API keys in chat logs are a real risk.
Flowntier v0.4.9 — list_plugins in-process (no sidecar, no kill script)
What changed in v0.4.9
The chairman was right — v0.4.8's error hint told users to run scripts\kill_flowntier.cmd every time they opened Settings. That was bad UX.
Root cause: list_plugins and invoke_plugin in lib.rs were proxying through the sidecar binary via pipe_request('GET', '/api/plugins', None). The sidecar doesn't have a /api/plugins handler (the plugin system is a skeleton with no real plugins). The sidecar returns 404 'no handler registered for path /api/plugins', which the frontend displayed as 'Failed to fetch plugins' with the kill-script hint.
Fix (BUG-FRONTEND-RT-13):
list_pluginsnow returnsOk(serde_json::json!([]))directly from the Rust shell — no sidecar roundtrip needed.invoke_pluginreturns a graceful 'Plugin not registered' error (the plugin system is a v0.5 feature).- The error hint no longer mentions kill_flowntier.cmd. zh-CN: '提示: 这通常意味着后端没有 /api/plugins 接口。在 v0.4.9+ 插件系统由 Rust 进程直接处理,不再需要 sidecar。如果 v0.4.9+ 仍出现此错误,请上报 bug。' en-US mirrors the same message.
The plugin panel in v0.4.9 will now show 'No plugins available' (empty list) instead of the error message — correct UX since the plugin system is a v0.5 feature.
The user is no longer asked to run a helper script.
Flowntier v0.4.8 — phase timeline dots animate
What changed in v0.4.8
The chairman was right — v0.4.7 was incomplete. After a full end-to-end test (Playwright + Vite dev + mocked Tauri, 17 screenshots, 0 console errors), I found BUG-FRONTEND-RT-14: the 8-phase timeline dots never updated. Root cause: the applyEvent handler in App.tsx only updated phaseStates for transition events. But the agent emits milestone events (per NWT 000011), not transition events. So the workflow progress was always stuck.
Fix: added a milestone-event branch to applyEvent in App.tsx:
status='completed'→ state='done'status='started'or'in_progress'→ state='active'- otherwise → state='pending'
Also sets activePhase to the new active index so the '主理 — 交付 N / 8' text updates correctly.
Screenshot evidence at C:/Users/thatg/v048-shots/ shows phase 3 (计划审核) with an active dashed border, all other phases in pending state. Before this fix all 8 dots looked identical (empty).
v0.4.7 still useful
v0.4.7's BUG-FRONTEND-RT-13 fix (better error message for Failed to fetch plugins) is still in effect. If you upgrade from v0.4.7 to v0.4.8, the only visible change is the phase timeline now actually animates during workflows.
Workaround for v0.4.7
If you can't immediately upgrade, v0.4.7 is still usable but the workflow progress bar won't update visually. The workflow itself completes correctly — it's just a display bug.
Flowntier v0.4.6 — kill_flowntier.cmd helper (NSIS hook fix didn't work)
Honest changelog
My v0.4.5 fix for the NSIS install conflict did not work. I added an installer.nsi with a customOnInit hook — it was included in the generated NSIS source (line 28: !include ...) but the contents were never inlined into the compiled binary. Tauri 2.x's NSIS preprocessor silently drops the include. I verified with grep -c 'FindProcess|customOnInit' target/release/nsis/x64/installer.nsi which returns 0.
v0.4.6 is the honest fix:
- Removed the dead
installer.nsifile and theinstallerHooksconfig key (which doesn't exist in Tauri 2.x — I made it up based on stale docs). - Added
scripts/kill_flowntier.cmd— a small Windows CMD script that usestasklist/taskkillto terminate any running Flowntier instance. Run this before re-installing. - Bumped version to 0.4.6 so the NSIS installer filename reads
Flowntier_0.4.6_x64-setup.exe.
Workaround for the install conflict
Before running the v0.4.6 installer (or any v0.4.x):
:: Right-click the script and 'Run as administrator' if needed
scripts\kill_flowntier.cmd
:: Then run Flowntier_0.4.6_x64-setup.exeThe script:
- Checks if
flowntier.exeis running viatasklist - If yes, calls
taskkill /F /IM flowntier.exe - Waits 1 second for the OS to release file handles
- Prints confirmation and pauses
Real fix deferred to v0.5
The proper long-term fix is either:
- Tauri's NSIS template to expose a real installer-hook API (file a Tauri issue if not already), OR
- Switch to a WiX bundle (WiX has richer pre-install hooks but requires the WiX toolchain)
Both are tracked for v0.5. Until then, the helper script is the honest workaround.
Flowntier v0.4.5 — NSIS install conflict + MiniMax form
What changed in v0.4.5
Two real fixes from chairman's hands-on testing:
-
BUG-FRONTEND-RT-11 — NSIS installer error: 'Cannot open file: O:\Flowntier\flowntier_runtime.exe'. The previous v0.4.x install put files at O:\Flowntier\ and a running instance was locking the sidecar binary. Fix: added apps/desktop/src-tauri/nsis/installer.nsi with a
customOnInithook (Tauri's documented extension point) that uses Win32 Toolhelp32 (built into Windows since XP, no extra plugin dep) to detect a runningflowntier.exeand shows a topmost MessageBox asking the user to close it before continuing the install. -
BUG-FRONTEND-RT-12 — MiniMax provider form overhaul: the chairman asked 'let the user fill in the model name + context length (free text), and pick thinking strength from a list'. Replaced the single ModelRow
{id, display_name}with{id, display_name, context_length: number|null, thinking_strength: 'low'|'medium'|'high'}. New 'Models' form has 4 inline fields per row (id / name / context / thinking) + 1-line hint. context_length validated as a positive int ≤10M. thinking_strength is a<select>with low/medium/high options. Updated ProviderModel type in apps/desktop/src/lib/api.ts and 9 new i18n keys in each locale.
SECURITY reminder (not a code change)
An API key was pasted into the chat during testing. The key was not stored, logged, or transmitted anywhere by this agent, but the key should be rotated via the provider's console ASAP and stored only in environment variables or .env files (which should be in .gitignore). Plaintext API keys in chat logs are a real risk.
Flowntier v0.4.4 — Fix skip loop + React hooks crash
What changed in v0.4.4
This patch fixes two critical bugs in v0.4.3:
- BUG-FRONTEND-RT-10: a 'Rendered more hooks than during the previous render' crash on first launch. The new workdirSkipped useState/useEffect was placed AFTER the
if (!workdirReady) return <div/>early-return in App.tsx, violating React's Rules of Hooks. Fixed by moving the new hooks BEFORE the early return. v0.4.3 was broken in production — anyone installing it would see the '出错了' crash screen on first launch. - BUG-FRONTEND-RT-9: 稍后设置 button caused an infinite re-render loop. The old onSkip set workdir=null which triggered WorkdirSetup to re-render. Fix: persist a workdir_skipped flag in kv, and the render condition now checks
if (workdir === null && !workdirSkipped). After skip, the user goes to Welcome or the dashboard and the dialog stays gone. - BUG-FRONTEND-RT-8: when set_workdir_with_nwt fails, the catch block only console.error'd. Now also alert the user with a localized error message.
v0.4.4 is the recommended upgrade from any earlier v0.4.x
v0.4.3 was broken — anyone installing v0.4.3 would see the '出错了 v0.4.2' crash screen on first launch. v0.4.4 fixes that. If you have v0.4.0/v0.4.1/v0.4.2 installed, upgrade to v0.4.4 directly.