Skip to content

Releases: Thatgfsj/Flowntier

Flowntier v0.4.35 — Modern Obsidian & Glass UI Overhaul + Multi-Agent Engine

Choose a tag to compare

@Thatgfsj Thatgfsj released this 04 Sep 15:15

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.exe8.89 MB (9,321,706 字节)
  • SHA-256 校验码: 7575cf14905f267c96236412407e81874e6085059cb6b41974ba5e2eb5190419

Flowntier v0.4.22 — workdir swap + run_task timeout + file-tree UI + error badge

Choose a tag to compare

@Thatgfsj Thatgfsj released this 02 Jul 13:54

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_nwt now fires POST /api/workspace/set after writing workdir.json
  • Was: workdir.json said O:\try but runtime wrote to O:\Flowntier\workspace\

B. RUN_TASK TIMEOUT

  • agent.run() wrapped in tokio::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.tsx polls every 5s
  • LeftRoster adds '文件' 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.tsx mounted 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:\Flowntier
  • GET /api/workspace/tree?depth=2 → 7 entries (chief's earlier O:\Flowntier\workspace\tarot\index.html visible)
  • POST /api/run_task {task:'说一句话证明你活着', timeout_secs:60} → DONE, task t_01KWHG0R21NQ30ZVN5WYR0FK7F
  • GET /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 CheckIfAppIsRunning for flowntier_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

Choose a tag to compare

@Thatgfsj Thatgfsj released this 02 Jul 03:06

Flowntier v0.4.21 — Dashboard 任务列表 wired up + NSIS patches fixed

修复

  • 事件 000064 — Dashboard "任务列表 0/0 完成" 修好
    • tasks 表新增 Task struct + create_task / list_tasks_for / count_tasks 方法
    • run_task handler 每次写入一条 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 ?query strip:路径不再被 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 之后直接插入

校验

  • GET /api/tasks?wf_id=wf_chat_xxx 返回 {done, total, rows},21/21 pipe-server 测试通过
  • 新打 NSIS 包内的 flowntier_runtime.exe MD5 ad389cf5de756240300d6abd2825d8a4,含 v0.4.21 (event 000064) 标记
  • NSIS 三个 patch 全在:CheckIfAppIsRunning sidecar / 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

Choose a tag to compare

@Thatgfsj Thatgfsj released this 29 Jun 07:48

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

  1. Uninstall v0.4.10 (Control Panel → Programs)
  2. Run C:\Users\thatg\Desktop\diagnose.cmd → save the output
  3. Install C:\Users\thatg\Desktop\Flowntier_0.4.11_x64-setup.exe
  4. Run diagnose.cmd again → save the output
  5. Open Flowntier, test the four flows (workdir, settings, 🌐 toggle, plugins)
  6. 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

Choose a tag to compare

@Thatgfsj Thatgfsj released this 28 Jun 22:01

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 sidecar

BUG-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)

Choose a tag to compare

@Thatgfsj Thatgfsj released this 28 Jun 16:46

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_plugins now returns Ok(serde_json::json!([])) directly from the Rust shell — no sidecar roundtrip needed.
  • invoke_plugin returns 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

Choose a tag to compare

@Thatgfsj Thatgfsj released this 28 Jun 16:21

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)

Choose a tag to compare

@Thatgfsj Thatgfsj released this 28 Jun 15:47

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.nsi file and the installerHooks config 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 uses tasklist / taskkill to 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.exe

The script:

  1. Checks if flowntier.exe is running via tasklist
  2. If yes, calls taskkill /F /IM flowntier.exe
  3. Waits 1 second for the OS to release file handles
  4. 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

Choose a tag to compare

@Thatgfsj Thatgfsj released this 28 Jun 09:36

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 customOnInit hook (Tauri's documented extension point) that uses Win32 Toolhelp32 (built into Windows since XP, no extra plugin dep) to detect a running flowntier.exe and 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

Choose a tag to compare

@Thatgfsj Thatgfsj released this 28 Jun 09:04

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.