state root:OpenRelix 应用根目录
重点这里保存 OpenRelix 的本地应用数据:工作窗口记录、复盘、登记册、生成的面板文件、缓存和日志。它属于私有运行态,不进 git,也不进 npm。测试时用 AI_ASSET_STATE_DIR 指到临时目录。
state root 最容易混:它是 OpenRelix 的应用根目录,不是源码仓库。
这里保存 OpenRelix 的本地应用数据:工作窗口记录、复盘、登记册、生成的面板文件、缓存和日志。它属于私有运行态,不进 git,也不进 npm。测试时用 AI_ASSET_STATE_DIR 指到临时目录。
源码仓库只放可复用的工程逻辑:安装代码、脚本、模板、公开技能、测试和开发文档。
这些目录归 Codex / Claude 自己管,里面有配置、历史记录、会话文件和原生上下文。OpenRelix 会谨慎读取,只在启用时写受控摘要块。
OpenRelix 会把 AI 工具里的活动整理成工作窗口。后续摘要要靠它判断哪段时间做了什么、在哪个项目、来自哪个工具。
本地面板只读这份生成 JSON。不要让面板直接翻 AI 工具原始文件,也别让它到处读私有运行态文件。
技术词只在能对应到真实文件、字段或命令时保留;第一次出现时,会顺手解释清楚。
这张图把 host(运行 AI 的工具)放在最下面,因为它是来源层;repo(源码仓库)保存可复用逻辑,state root(OpenRelix 应用根目录)保存私有运行数据,面板和 host summary(写给 AI 看的摘要)都是生成结果。
把一次工作沉淀成下次能复用的经验、模板和技能。
.agents/skills/memory-review/SKILL.md
state root/registry/*.jsonl
templates/
仓库外的私有运行数据,默认不进 git,也不进 npm。
state root/raw/windows/
state root/reviews/
reports/overview-data.json
读取不同 AI 工具的记录,统一成一种工作窗口格式。
scripts/collect_codex_activity.py
解析本地路径
统一找到数据目录、AI 工具目录和运行配置。
scripts/asset_runtime.py
ai_host / cwd / session id
Codex / Claude 及其本地记录在最底层,只作为读取来源。
codex app-server --listen stdio://
CODEX_HOME/history.jsonl
CLAUDE_HOME/projects/**/*.jsonl
仓库只保存可复用逻辑:安装器、脚本、模板、技能、测试和本地开发文档。个人运行数据留在仓库外。
下面每个概念都能落到真实文件、命令或输出路径。绕不开的术语,会在旁边解释清楚。
刚上手通常先卡在三件事:哪些文件可以提交、面板数据从哪来、为什么只有少量摘要会写回 Codex / Claude。
加文件前先判断归属:工程文件可以提交,个人运行文件不能提交。
repo: install/ scripts/ templates/ .agents/skills/
state root: raw/ registry/ reports/ runtime/
scripts/sync_host_memory_summary.py
面板展示不对时,就按这条链路从 AI 工具记录一路查到最终 HTML。
Codex app-server / history.jsonl / sessions/*.jsonl
scripts/collect_codex_activity.py
生成面板要读的数据文件
把工作窗口、复盘、登记册和摘要合成一份稳定 JSON。
reports/overview-data.json
reports/panel.html
本地可以保留很多记录,但只把短而有用的摘要写回 Codex / Claude。
registry/memory_entries.jsonl
scripts/openrelix_overview/memory_context.py
生成给 AI 看的短摘要
入选内容会被压缩成一小段摘要,方便下次 AI 工具读取。
scripts/build_codex_memory_summary.py
state root/reviews/ raw/windows/
采集脚本只读 AI 工具的本地文件或接口,统一整理后只写入 state root(OpenRelix 应用根目录)。
activity-source=auto,先试 codex app-server --listen stdio://(Codex 本地线程接口),失败再回退到本地文件。CODEX_HOME/history.jsonl(历史索引)和 CODEX_HOME/sessions/**/*.jsonl(会话事件),再按 session id(会话标识)拼成窗口。CLAUDE_HOME/projects/**/*.jsonl(项目会话记录)和 CLAUDE_HOME/history.jsonl(历史记录)。raw/daily/<date>.json(当天汇总)和 raw/windows/<date>/*.json(单窗口文件),保留 ai_host(来源工具)、cwd(项目路径)和 session/thread id(会话或线程标识)。OpenRelix 本地能存更多,但写给 AI 的上下文要少而准,因为上下文空间有限,噪声会影响后续工作。
registry/memory_entries.jsonl 是当前记忆登记册;旧的 memory_items.jsonl 只做兼容 fallback(旧数据兜底)。injection_policy(是否写给 AI 的策略)只有 global_context(通用上下文)和 project_context(项目上下文)会进入候选。面板是本地静态页面,应该读稳定的生成数据,不应该自己到处翻原始私有文件。
scripts/build_overview.py 读取 registry(登记册)、reviews(复盘)、raw(原始窗口)、consolidated(整理结果)等来源。reports/overview-data.json 是面板数据契约;展示层只消费它,避免 UI 和底层文件格式强耦合。reports/panel.html 是最终本地面板;如果页面看起来旧,先确认打开的是哪个 state root(OpenRelix 应用根目录)下的产物。runtime/openrelix-index.sqlite3 是可重建 SQLite index(本地搜索索引),删除它不能影响 raw、registry 或 consolidated 源数据。OpenRelix 的模块边界比较清楚。多数改动应该收在下面一两行里,别一口气横扫安装器、面板、记忆策略和发布配置。
安装、卸载、定时、shell 命令、LaunchAgent(macOS 后台任务配置)行为变化时看这里。
新脚本只要需要路径,就优先走 runtime module(运行路径模块),不要自己重新拼。
读取 app-server(Codex 本地线程接口)、history(历史记录)、session(会话文件)或 Claude transcript(会话记录)的逻辑在这里。
看 scope(作用范围)、injection policy(是否写给 AI 的策略)、priority(优先级)、heat(复用热度)和预算,不要退回旧的 durable/session 说法。
`overview-data.json` 是 renderer(渲染器)的 contract(数据契约);不要让面板直接读 raw(原始数据)/ runtime(运行态)文件。
文档和截图必须通用、脱敏,并和当前版本及 changelog 口径对齐。
小文案或 HTML 改动,重点看隐私、空白、本地预览和包内容。只有碰到脚本、安装器或共享数据契约时,再扩大验证范围。
先知道工作区里已经有什么,避免顺手清掉别人的无关改动。
git status --short --branch
这两条先挡住最容易出事的点:私有数据进仓库、patch 空白污染。
python3 scripts/check_personal_info.py
git diff --check
改脚本、安装器辅助逻辑、runtime config(运行配置)或 shell 入口时跑这一组。
python3 -m py_compile scripts/*.py install/*.py
python3 -m unittest discover -s tests
zsh -n install/install.sh scripts/*.sh
只有改报告数据、面板渲染、记忆展示或标签时才跑。它不会碰真实 OpenRelix 应用根目录。
STATE_DIR="$(mktemp -d /tmp/openrelix-validation.XXXXXX)"
AI_ASSET_STATE_DIR="$STATE_DIR" python3 scripts/build_overview.py
python3 -m json.tool "$STATE_DIR/reports/overview-data.json" >/dev/null
改 docs/site、包白名单、发布或可见 HTML 时用这一组。本地预览优先走 HTTP。
npm pack --dry-run --json
python3 -m http.server 8766
OpenRelix 的价值来自公开 repo(源码仓库)和 private state(私有状态)分开。这个边界不是事后清理,而是产品能力的一部分。
用合成路径、小 fixture(测试样例)、通用项目名和短脱敏片段。样例只需要说明契约,不需要证明真实工作流。
python3 scripts/check_personal_info.py
代码改动看着正确,不代表生成面板、包内容或公开页面已经对。先验用户真正会看到的页面和文件。
| 现象 | 常见原因 | 先查什么 |
|---|---|---|
| 面板还是旧文案 | source(源码)改了,但 `reports/panel.html` 没重建,或打开了另一个 state root(OpenRelix 应用根目录) | AI_ASSET_STATE_DIR="$STATE_DIR" python3 scripts/build_overview.py |
| 记忆摘要没有更新 | host context(AI 可读上下文)关闭、`CODEX_HOME` 不对,或 sync(同步)只保留了 host-owned(AI 工具拥有)内容 | python3 scripts/sync_host_memory_summary.py --print-json |
| npm 包里出现奇怪文件 | `package.json` files 白名单过宽,或生成文件放进了 repo | npm pack --dry-run --json |
| 采集结果为空 | app-server(Codex 本地线程接口)不可用、host home(AI 工具目录)串了,或所选日期确实没有活动 | openrelix doctor --app-server-check |
| 浏览器打不开 file URL | 本地 file 安全策略挡住页面或资源 | python3 -m http.server 8766 |