diff --git a/README.md b/README.md
index 0c2696e5..813211b5 100644
--- a/README.md
+++ b/README.md
@@ -1,20 +1,12 @@
-
+
-Merak
+
Type Your World
- 面向长篇小说、角色构建与世界观创作的 Windows 桌面端 AI Agent 工作台。
-
-
-
- 快速开始
- · 5 分钟创作上手
- · 运行形态
- · WebUI
- · 项目结构
+ 面向长篇小说创作的多 Agent 协作框架 & Windows 桌面工作台
@@ -27,65 +19,113 @@
---
-## 这是什么?
+## 什么是 Merak?
+
+Merak 是一套给创作者使用的 **AI Agent 运行时与世界观构建工作台**。它把对话式 Agent、工具调用、角色卡、世界观设定、伏笔、秘密、章节结构、生成文件和本地工作区放进同一个连续创作流程里,让 AI 不只是回答问题,而是稳定地陪你从角色、背景、章节到场景,逐步搭建属于你的世界。
-Merak 不是一个普通聊天壳。它是一套给创作者使用的 Windows 桌面端 AI 运行时和工作台(Tauri 2),把对话、工具调用、角色卡、世界规则、伏笔、秘密、章节结构、生成文件和本地工作区放进同一个连续的创作流程里。
+| 定位 | 说明 |
+|---|---|
+| 叙事引擎 | 围绕长篇叙事搭建的 worldbuilding engine,管理世界、角色、章节、场景、伏笔、秘密。 |
+| 创作工作台 | 三栏 WebUI,可展示人物、世界、章节、场景和生成文件。 |
+| 多 Agent 协作 | God Agent 统筹 → 工具调用 / Writer Agent 写作 / 知识图谱检索,SSE 实时推送。 |
+| 本地优先 | 配置、会话、世界数据和输出文件均保存在本机;支持 SQLite + PostgreSQL + Neo4j。 |
+
+## 快速开始
-你可以把它理解为:
+### 创作者:一键安装
-- 一个会写作、会查设定、会调用工具辅助创作的 Agent。
-- 一个围绕长篇叙事搭建的 worldbuilding engine。
-- 一个可以展示人物、世界、章节、场景和生成文件的创作者工作台。
-- 一个本地优先的小说工程系统,配置、输出和世界观数据都尽量落在你的机器上。
+1. 从 [Releases](https://github.com/ULookup/Merak/releases) 下载 Windows 安装包(`.msi` / `.exe`)
+2. 安装后启动 Merak,进入设置页面配置 API Key 和模型
+3. 新建世界,开始创作
+
+### 开发者:从源码构建
+
+**环境** — CMake 3.22+ · Conan 2.x · C++23 编译器 · Node.js
+
+```bash
+# 构建
+conan install . --build=missing -s build_type=Debug
+cmake -B build -DCMAKE_TOOLCHAIN_FILE=build/Debug/generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Debug
+cmake --build build -j
+
+# 初始化 & 启动
+.\build\cli\Debug\merak.exe --init
+.\build\cli\Debug\merak.exe serve
+
+# WebUI(另开终端)
+cd webui && npm install && npm run dev
+```
+
+访问 `http://127.0.0.1:5173`,Vite 会自动代理 `/v1/*` 和 `/api/*` 到 `127.0.0.1:3888`。
+
+### Docker(仅开发数据库)
+
+```bash
+docker compose up -d
+```
-Merak 的核心目标很简单:让 AI 不只是回答问题,而是稳定地陪你从角色、背景、章节、伏笔和场景开始,逐步搭建属于你的世界。
+## 功能全景
-## 平台支持
+### Agent 运行时
-| 平台 | 形态 | 说明 |
-|---|---|---|
-| Windows | Desktop(Tauri 2) | 推荐平台。 |
+| 能力 | 说明 |
+|---|---|
+| Agent Loop | 多轮思考 → 工具调用 → 审批 → SSE 事件推送 |
+| 工具体系 | 40+ 内置工具:文件、搜索、Git、LSP、Web、会话、记忆、Agent 调度 |
+| MCP 支持 | stdio 协议接入外部工具,运行时导入 |
+| 三级权限 | safe / ask / deny,Bash 五层安全检查 |
-## 运行形态
+### 世界观构建
-| 形态 | 入口 | 用途 |
-|---|---|---|
-| Runtime server | `merak serve` | 提供 `/v1/*` 和 `/api/*` HTTP/SSE 接口。 |
-| WebUI | `webui` Vite app | 浏览器中的三栏创作者工作台。 |
-| Desktop | `apps/desktop` Tauri app | Windows 桌面工作台;启动本地 Merak 服务并打包 WebUI。 |
+| 能力 | 说明 |
+|---|---|
+| 世界管理 | 创建、编辑、导入/导出 World,含世界观规则和背景设定 |
+| 角色系统 | Agent 卡片(God / Manager / Character),含外貌、性格、背景、关系 |
+| 叙事对象 | Arc → Chapter → Scene 层级结构,支持大纲和场景摘要 |
+| 伏笔 & 秘密 | 伏笔追踪、揭示条件、秘密分级管理 |
+| 创作 Pipeline | 五阶段流水线:方向选择 → 大纲 → 角色 → 场景写作 → 章节审校 |
+| Voice 分析 | 角色语风一致性分析,防止角色跑偏 |
-## 核心能力
+### 知识图谱
| 能力 | 说明 |
|---|---|
-| Agent loop | 多轮思考、工具调用、审批、状态流转和 SSE 事件输出。 |
-| Runtime API | Session、Run、Approval、workspace files、worldbuilding 等 HTTP 接口。 |
-| WebUI 工作台 | 左侧世界/会话导航,中间 Run 时间线,右侧 Story、Files、Agents、Run inspectors。 |
-| Worldbuilding | World、Agent、Arc、Chapter、Scene、Foreshadowing、Secret、Voice 等叙事对象。 |
-| 本地文件产出 | Agent 可生成 Markdown、JSON、YAML、TXT 等文件,WebUI 可浏览、预览和编辑。 |
-| 本地数据 | 配置、session、run、世界观数据和输出文件优先保存在本机。 |
-| Provider 配置 | 支持 OpenAI-compatible 和 Anthropic-style provider 配置。 |
-| MCP 与内置工具 | 文件、搜索、任务、世界观、会话等工具统一注册与权限控制。 |
+| Neo4j 后端 | 实体(角色/地点/组织/物品/概念)+ 15 种关系类型 |
+| 关系提取 | LLM 自动抽取人物关系、站队、事实摘要 |
+| 路径查询 | 子图浏览、邻居扩展、最短路径查找 |
+
+### WebUI 工作台
+
+| 区域 | 功能 |
+|---|---|
+| Sidebar | 世界/会话导航、模型配置、工具状态 |
+| Run Timeline | 对话流、工具调用、审批、流式输出 |
+| Composer | 场景/角色/世界规则/大纲/改写 快捷创作入口 |
+| Inspector 面板 | Story / Files / Agents / Run 四栏审查 |
+
+### Writer Agent
+
+独立的 LLM 子循环,零工具注册,专注于从结构化材料包产出场景散文。与主 Agent 模型分离,可配置不同模型和写作风格。
## 架构一览
```mermaid
flowchart TB
- subgraph Clients["Desktop(Tauri 2)"]
- WebUI["WebUI
Browser (embedded)"]
+ subgraph Desktop["Desktop(Tauri 2)"]
+ WebUI["WebUI
React 19"]
end
subgraph Server["merak serve"]
HTTP["HTTP API
/v1 + /api"]
SSE["SSE Event Stream"]
Runtime["RuntimeService
Session / Run / Approval"]
- Loop["AgentLoop
Thinking / Acting / Observing / Responding"]
- Tools["ToolRegistry
Builtin tools + MCP tools"]
+ Loop["AgentLoop
Think → Act → Observe → Respond"]
+ Tools["ToolRegistry
40+ 内置工具 + MCP"]
World["WorldbuildingService
World / Agent / Narrative / Secret"]
- KG["Knowledge Graph
Neo4j provider"]
- Writer["Writer Agent
Independent LLM loop"]
+ KG["Knowledge Graph
Neo4j"]
+ Writer["Writer Agent
独立 LLM 子循环"]
Pipeline["PipelineManager
5-stage workflow"]
- Storage["Local Storage
SQLite / PostgreSQL / files"]
+ Storage["Storage
SQLite / PostgreSQL / Files"]
end
WebUI --> HTTP
@@ -102,115 +142,22 @@ flowchart TB
KG --> Storage
```
-## 快速开始
-
-下面是从源码启动 Merak 的最短路径。你需要先安装 CMake、Conan 2、C++23 编译器,以及 WebUI 所需的 Node.js。
-
-### Windows PowerShell
-
-```powershell
-conan profile detect --force
-conan install . --build=missing -s build_type=Debug
-cmake -B build `
- -DCMAKE_TOOLCHAIN_FILE=build/Debug/generators/conan_toolchain.cmake `
- -DCMAKE_BUILD_TYPE=Debug
-cmake --build build --config Debug
-
-.\build\cli\Debug\merak.exe --init
-notepad "$env:USERPROFILE\.merak\settings.local.json"
-.\build\cli\Debug\merak.exe serve
-```
-
-另开一个 PowerShell 启动 WebUI:
-
-```powershell
-cd webui
-copy .env.example .env
-npm install
-npm run dev
-```
-
-然后打开:
-
-```text
-http://127.0.0.1:5173
-```
-
-## 5 分钟创作上手
-
-安装完成后,按以下五步开始你的第一次创作:
-
-### 1. 初始化配置
-
-```powershell
-.\build\cli\Debug\merak.exe --init
-```
-
-这会生成 `~\.merak\` 目录,包含默认配置文件。
-
-### 2. 配置模型
-
-打开 Desktop 程序,进入设置页面填入 API Key 和模型名。或者直接编辑 `~\.merak\settings.local.json`:
-
-```json
-{
- "llm": {
- "provider": "openai",
- "api_key": "sk-your-api-key",
- "api_base_url": "https://api.openai.com/v1",
- "default_model": "gpt-4o"
- }
-}
-```
-
-### 3. 创建世界
-
-在 Desktop 工作台左侧 Sidebar 点击"新建世界",输入世界名称和世界观描述。例如:
-
-> 这是一个架空的东方玄幻世界,名为"苍云大陆"。修行者通过吸纳天地灵气突破境界,共分九境。各大宗门明争暗斗,凡人国度在夹缝中求生存。
-
-### 4. 写第一个场景
-
-1. 在 Agents 面板创建第一个角色(例如"林霜",一位初入宗门的少女剑修)
-2. 创建第一章"雪夜来客"
-3. 在 Composer 输入场景描述,让 AI 开始创作
-
-### 5. 查看产出
-
-- **Story Inspector**:查看世界摘要、章节、场景叙事
-- **Files Inspector**:浏览 AI 生成的文件(Markdown、JSON 等)
-- **Agents Inspector**:查看角色卡和关系图谱
-
-> 💡 想快速体验?可以导入示范项目 `examples/demo_world.json`,内含预置世界观、角色和场景。
-
-## 环境要求
-
-| 依赖 | 版本/说明 |
+| 层级 | 技术 |
|---|---|
-| C++ compiler | MSVC 2022、GCC 13+ 或 Clang 17+。 |
-| CMake | 3.22+。 |
-| Conan | 2.x。 |
-| PostgreSQL | 14+;worldbuilding 和 memory 能力使用。 |
-| Node.js | LTS;仅 WebUI/Desktop 开发需要。 |
-| Rust | Tauri desktop 构建需要。 |
-
-Conan 默认会把 toolchain 放到类似下面的位置:
-
-```text
-build/Debug/generators/conan_toolchain.cmake
-```
-
-如果你的 Conan layout 不同,请在 `build` 目录下搜索 `conan_toolchain.cmake`,再把实际路径传给 CMake。
-
-## 配置 LLM
+| Language | C++23 · TypeScript · Rust |
+| Build | CMake · Conan 2 · Vite · Tauri 2 |
+| UI | React 19 · CSS Modules |
+| HTTP | cpp-httplib · libcurl |
+| JSON | nlohmann/json |
+| Storage | SQLite · PostgreSQL + pgvector · Neo4j |
+| Logging | spdlog |
+| Testing | GTest · Vitest · Testing Library |
-Merak 使用 `~/.merak` 作为用户级配置和数据目录。首次运行:
+## 开发指南
-```powershell
-.\build\cli\Debug\merak.exe --init
-```
+### 配置 LLM
-编辑 `settings.local.json`:
+首次运行 `merak.exe --init` 后,编辑 `~\.merak\settings.local.json`:
```json
{
@@ -220,316 +167,85 @@ Merak 使用 `~/.merak` 作为用户级配置和数据目录。首次运行:
"api_base_url": "https://api.openai.com/v1",
"default_model": "gpt-4o",
"max_output_tokens": 4096
- },
- "agent": {
- "permission_mode": "ask",
- "max_tool_turns": 25
- },
- "memory": {
- "enabled": true,
- "db_connection": "postgresql://merak:@127.0.0.1:5432/merak"
}
}
```
-也可以用环境变量覆盖配置:
-
-| 环境变量 | 作用 |
-|---|---|
-| `MERAK_PROVIDER` | Provider 名称。 |
-| `MERAK_API_KEY` | API Key。 |
-| `MERAK_API_BASE_URL` | API Base URL。 |
-| `MERAK_MODEL` | 默认模型。 |
-| `MERAK_DB_CONNECTION` | PostgreSQL 连接串。 |
-| `MERAK_PERMISSION_MODE` | 工具权限模式,例如 `ask`、`auto`、`deny`。 |
-
-## WebUI 工作台
-
-WebUI 依赖 `merak serve`。先启动服务端:
-
-```powershell
-.\build\cli\Debug\merak.exe serve
-```
-
-再启动前端:
-
-```powershell
-cd webui
-npm install
-npm run dev
-```
-
-默认访问地址:
+环境变量覆盖:`MERAK_PROVIDER` · `MERAK_API_KEY` · `MERAK_MODEL` · `MERAK_DB_CONNECTION`
-```text
-http://127.0.0.1:5173
-```
+### API 与事件
-Vite 默认把 `/v1/*` 和 `/api/*` 代理到:
-
-```text
-http://127.0.0.1:3888
-```
-
-如果服务端地址不同,可以设置:
-
-```powershell
-$env:VITE_PROXY_TARGET="http://127.0.0.1:3888"
-npm run dev
-```
-
-或在 `webui/.env` 中写入:
-
-```dotenv
-VITE_API_BASE=http://127.0.0.1:3888
-```
-
-WebUI 主要区域:
-
-| 区域 | 功能 |
+| 前缀 | 用途 |
|---|---|
-| Sidebar | 世界、会话、模型、工具和上下文状态。 |
-| Run Timeline | 对话、工具调用、审批、流式输出和运行状态。 |
-| Composer | Scene、Character、World Rule、Outline、Rewrite 等快捷创作模式。 |
-| Story Inspector | 世界摘要、章节、场景、伏笔、秘密和角色知识边界。 |
-| Files Inspector | 本地输出文件列表、搜索、筛选、预览、编辑和保存。 |
-| Agents Inspector | God、Manager、Character 分组和角色卡摘要。 |
-| Run Inspector | Run 阶段、token、工具调用、SSE 状态和错误恢复提示。 |
-
-## Desktop 桌面端
-
-Desktop 是一个 Tauri 2 Windows 客户端,用来把 WebUI 放进桌面窗口,并在本地启动 Merak 服务。它会准备本地资料目录、选择可用端口、连接 WebUI,并在失败时提供重新打开和导出报告入口。
-
-从仓库根目录启动开发模式:
-
-```powershell
-npm install
-npm --prefix webui install
-npm --prefix apps/desktop install
-npm run desktop:dev
-```
-
-构建 Windows 安装包:
-
-```powershell
-npm run desktop:check
-npm run desktop:build
-```
+| `/v1/*` | Runtime、Session、Run、Approval、SSE |
+| `/api/*` | WebUI、Workspace Files、Worldbuilding |
-Tauri 配置当前面向 Windows MSI 和 NSIS 安装包。打包前需要 Rust/Cargo、Windows C++ 构建工具,以及已构建的 `merak.exe`;也可以通过 `MERAK_RUNTIME_EXE` 指向已有运行时。
+### 数据目录
-## 数据目录
-
-默认用户目录:
-
-| 平台 | 路径 |
+| 路径 | 说明 |
|---|---|
-| Windows | `%USERPROFILE%\.merak` |
-| Linux | `$HOME/.merak` |
+| `settings.local.json` | 本机私密配置(API Key) |
+| `outputs/` | 默认输出文件 |
+| `worlds/` | 世界观数据 |
-常见内容:
+> 配置优先级:环境变量 > 本地配置 > 用户配置 > 默认值
-| 路径 | 说明 |
-|---|---|
-| `settings.json` | 用户级通用配置。 |
-| `settings.local.json` | 本机私密配置,API Key 建议放这里。 |
-| `outputs/` | 默认输出文件目录。 |
-| `worlds/` | 世界观数据和世界输出。 |
-| runtime/session storage | 会话、Run、事件与审批记录。 |
+### Desktop 桌面端
-配置优先级通常是:内置默认值、用户配置、用户本地配置、项目配置、项目本地配置、环境变量。环境变量优先级最高。
+Tauri 2 Windows 客户端,内嵌 WebUI 并启动本地 Merak 服务。
-## PostgreSQL
+```bash
+npm run desktop:dev # 开发模式
+npm run desktop:build # 构建安装包
+```
-Merak 的 worldbuilding 和 memory 能力依赖 PostgreSQL。你可以使用外部 PostgreSQL,也可以通过 Docker 启动开发数据库。
+### PostgreSQL + Neo4j
-`docker-compose.yml` 已包含一个开发用 PostgreSQL 服务,默认用户为 `merak`,密码通过 `${PG_PASSWORD}` 环境变量设置。也可以直接运行:
+worldbuilding 和 memory 依赖 PostgreSQL,知识图谱依赖 Neo4j。可通过 Docker 一键启动:
```bash
docker compose up -d
```
-连接串示例:
+连接配置:
```json
-{
- "memory": {
- "enabled": true,
- "db_connection": "postgresql://merak:@127.0.0.1:5432/merak"
- }
-}
-```
-
-环境变量示例:
-
-```powershell
-$env:MERAK_DB_CONNECTION="postgresql://merak:@127.0.0.1:5432/merak"
+{ "memory": { "db_connection": "postgresql://merak:password@127.0.0.1:5432/merak" } }
```
-## API 与事件
-
-服务端 API 分为两组:
-
-| 前缀 | 用途 |
-|---|---|
-| `/v1/*` | Runtime、Session、Run、Approval、SSE。 |
-| `/api/*` | WebUI、配置、workspace files、worldbuilding。 |
-
-常用入口:
-
-| 接口 | 说明 |
-|---|---|
-| `GET /v1/runtime` | 获取模型、工具、MCP 和 worldbuilding 状态。 |
-| `POST /v1/sessions` | 创建会话。 |
-| `POST /v1/sessions/{id}/runs` | 启动一次 Run。 |
-| `GET /v1/sessions/{id}/events/stream` | 订阅 SSE 事件流。 |
-| `GET /api/webui/capabilities` | WebUI 后端能力声明。 |
-| `GET /api/workspace/files` | 工作区文件列表。 |
-| `GET /api/worldbuilding/worlds` | 世界列表。 |
-| `GET /api/worldbuilding/{world_id}/overview` | Story 总览。 |
-
-更多接口见:
-
-- [docs/api-reference.md](docs/api-reference.md)
-- [docs/webui-backend-requirements.md](docs/webui-backend-requirements.md)
-
-## 项目结构
+### 项目结构
```text
Merak/
-├── apps/desktop/ Tauri desktop shell
-├── cli/ serve 命令入口
+├── apps/desktop/ Tauri 桌面壳
+├── cli/ serve 命令入口 & 终端 UI
├── config/
-│ ├── pipelines/ 创作 pipeline 配置
-│ ├── prompts/ 核心 prompt、规则和 worldbuilding 角色设定
-│ └── skills/ Merak 内置创作技能
-├── docs/ API、设计和实现文档
+│ ├── pipelines/ 创作流水线配置
+│ ├── prompts/ 核心 prompt 与角色设定
+│ └── skills/ 内置创作技能
+├── docs/ API、架构文档
├── libs/
-│ ├── config/ 配置加载与环境变量覆盖
-│ ├── context/ Token budget 和上下文压缩
-│ ├── context_dsl/ 上下文 DSL
-│ ├── core/ 共享类型和执行接口
-│ ├── http/ REST API + SSE
-│ ├── knowledge_graph/ 知识图谱能力
-│ ├── llm/ OpenAI / Anthropic provider
-│ ├── loop/ Agent 状态机
-│ ├── mcp/ MCP stdio client
-│ ├── memory/ 记忆接口
-│ ├── portable_neo4j/ 随包 Neo4j 生命周期管理
-│ ├── portable_pg/ 随包 PostgreSQL 生命周期管理
-│ ├── prompts/ Prompt compositor
-│ ├── runtime/ Session / Run / EventBus / Approval
-│ ├── skills/ 技能加载与执行
-│ ├── storage/ Session store 与运行时持久化
-│ ├── tools/ 内置工具、权限和工具注册
-│ └── worldbuilding/ World / Agent / Narrative / Secret / Voice
-├── scripts/ 安装与开发辅助脚本
-├── tests/ C++ 测试入口
-└── webui/ React 19 WebUI
-```
-
-## 开发命令
-
-C++:
-
-```bash
-conan install . --build=missing -s build_type=Debug
-cmake -B build -DCMAKE_TOOLCHAIN_FILE=build/Debug/generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Debug
-cmake --build build -j
-```
-
-WebUI:
-
-```bash
-cd webui
-npm install
-npm run dev
-npm run lint
-npm run test
-npm run build
-```
-
-Desktop:
-
-```bash
-npm install
-npm --prefix webui install
-npm --prefix apps/desktop install
-npm run desktop:dev
-npm run desktop:check
-npm run desktop:build
-```
-
-C++ tests:
-
-```bash
-cd build
-ctest --output-on-failure
-```
-
-## 常见问题
-
-### WebUI 显示无法连接服务端
-
-确认 `merak serve` 已启动,并监听:
-
-```text
-http://127.0.0.1:3888
-```
-
-如果服务端端口不同,设置 `VITE_PROXY_TARGET` 或 `VITE_API_BASE`。
-
-### CMake 找不到 Conan toolchain
-
-先确认文件存在:
-
-```powershell
-Get-ChildItem -Recurse build -Filter conan_toolchain.cmake
+│ ├── loop/ Agent 状态机主循环
+│ ├── runtime/ Session / Run / Approval 管理
+│ ├── context/ Token 预算 & 上下文组装
+│ ├── tools/ 40+ 内置工具 & 权限控制
+│ ├── worldbuilding/ 世界观 & 叙事对象
+│ ├── memory/ pgvector 记忆存储
+│ ├── knowledge_graph/ Neo4j 知识图谱
+│ ├── llm/ OpenAI / Anthropic provider
+│ ├── http/ REST API + SSE
+│ ├── mcp/ MCP stdio client
+│ └── ...
+├── tests/ C++ 测试入口
+└── webui/ React 19 WebUI
```
-或:
-
-```bash
-find build -name conan_toolchain.cmake
-```
-
-然后把找到的路径传给:
-
-```bash
-cmake -B build -DCMAKE_TOOLCHAIN_FILE=
-```
-
-### 配置改了但没有生效
-
-检查是否被更高优先级的项目配置或环境变量覆盖。启动时也可以查看终端输出里的 `Config: loaded ...` 日志。
+## 参与贡献
-### Desktop 打开后仍提示后端不可用
+我们欢迎任何形式的贡献——代码、文档、Bug 反馈、功能建议。
-当前 desktop shell 不负责启动 runtime。请先启动:
-
-```powershell
-.\build\cli\Debug\merak.exe serve
-```
-
-再运行:
-
-```powershell
-npm run desktop:dev
-```
-
-## 技术栈
-
-| 层级 | 技术 |
-|---|---|
-| Language | C++23, TypeScript, Rust |
-| Build | CMake, Conan 2, Vite, Tauri 2 |
-| UI | React 19, CSS Modules |
-| HTTP | cpp-httplib, libcurl |
-| JSON | nlohmann/json |
-| Storage | SQLite, PostgreSQL, local files |
-| Logging | spdlog |
-| Testing | GTest, Vitest, Testing Library |
+> 详见 [CONTRIBUTING.md](CONTRIBUTING.md) 和 [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)
## License
-[MIT](LICENSE)
+[MIT](LICENSE) · 版权 © 2025–2026 Merak contributors
diff --git a/assets/merak_logo_pure_vector.svg b/assets/merak_logo_pure_vector.svg
new file mode 100644
index 00000000..c8856049
--- /dev/null
+++ b/assets/merak_logo_pure_vector.svg
@@ -0,0 +1,9 @@
+
+
diff --git a/libs/worldbuilding/src/condition_evaluator.cpp b/libs/worldbuilding/src/condition_evaluator.cpp
index bb82bd7e..52251d27 100644
--- a/libs/worldbuilding/src/condition_evaluator.cpp
+++ b/libs/worldbuilding/src/condition_evaluator.cpp
@@ -106,6 +106,13 @@ void ConditionEvaluator::register_all_builtins() {
registry_["orphaned_foreshadowing"] = eval_orphaned_foreshadowing;
registry_["scene_completeness"] = eval_scene_completeness;
+ // all_checks_passed is a compound type dispatched inside evaluate()
+ // (checks check_registry_ directly). Registered so list_condition_types()
+ // includes it; the function below is never actually called.
+ registry_["all_checks_passed"] = [](const ConditionDef&, const PipelineState&, pqxx::connection&) {
+ return ConditionResult{"all_checks_passed", true, std::nullopt, std::nullopt, {}};
+ };
+
// ─── KG condition types ───
registry_["kg_relation_count"] = [this](const ConditionDef& cond,
const PipelineState& state,
@@ -614,7 +621,7 @@ ConditionResult eval_relation_currency(const ConditionDef& cond,
auto row = txn.exec_params1(R"(
SELECT COUNT(*) FROM agent_relations ar
- JOIN agents a ON (ar.agent_a_id = a.id OR ar.agent_b_id = a.id)
+ JOIN agents a ON (ar.agent_id = a.id OR ar.target_id = a.id)
WHERE a.world_id = $1 AND ar.updated_at < $2
)", state.world_id, chapter_start);
int stale = row[0].as();
diff --git a/webui/src/assets/merak-logo-lockup.svg b/webui/src/assets/merak-logo-lockup.svg
deleted file mode 100644
index fceb67bd..00000000
--- a/webui/src/assets/merak-logo-lockup.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-