音乐与疯狂同步桥
该项目实施了您计划的第一阶段:
- FoundryVTT->观念故事圣经期刊镜像
- 手动运行同步命令
- 用于Codex/LLM编排的MCP工具界面
- 将完整媒体拷贝到持久的本地存储
- 手动解决冲突跟踪
- 无损写入
Music and Madness Story Bible与顶级Journalswiki树
项目布局
/Users/nicholasmcdowell/Documents/Codex Projects/Music and Madness/music-madness-sync-bridge/src
- 网桥服务、CLI、MCP服务器、Foundry/Notion适配器。
/Users/nicholasmcdowell/Documents/Codex Projects/Music and Madness/music-madness-sync-bridge/foundry-module/music-madness-bridge
- Foundry模块脚手架暴露经过身份验证的日志读取事件。
/Users/nicholasmcdowell/Documents/Codex Projects/Music and Madness/music-madness-sync-bridge/data
- 运行时状态(state/bridge.sqlite),媒体拷贝(media/),日志(logs/audit.log).
定义
- 主控程序:模型上下文协议。让Codex调用桥接工具,如
sync.foundry_to_notion.apply. - 镜子挡块:生成的部分
## Foundry Mirror在Notion页面中。 - 期刊维基树:名为的顶级故事圣经子页面
Journals,子页面与Foundry文件夹匹配。 - 冲突:自上次同步以来,源和目标已更改,需要手动决定。
设置
- 复制env模板。
cd '/Users/nicholasmcdowell/Documents/Codex Projects/Music and Madness/music-madness-sync-bridge'
cp .env.example .env- 填充
.env值:
- Foundry URL/令牌
- 概念键
- 故事圣经根页面ID(
NOTION_STORY_BIBLE_PAGE_ID)
- 打字检查。
npm run typecheck操作员命令
预览更改(无写入):
npm run sync:previewsync:preview 在以下情况下自动启动本地代理 FOUNDRY_BASE_URL 是本地的(127.0.0.1 / localhost / ::1)以及 FOUNDRY_AUTO_PROXY=1. 预览/写入目标是维基页面 Journals,而不是Notion数据库。
应用镜像更新:
npm run sync:applysync:apply 具有相同的自动代理行为,并且仅当此命令启动后才停止代理。 创建页面时,它会在以下位置镜像Foundry文件夹结构 Journals 维基树。 媒体下载/链接默认启用;禁用 --no-include-media.
列出冲突:
npm run sync:conflicts解决一个冲突:
npm run sync:resolve -- --conflict-id --resolution manual_merge --notes "Reviewed and merged"健康检查:
tsx src/cli.ts healthMCP服务器
运行stdio MCP服务器:
npm run mcp:start外露工具:
foundry.health_checkfoundry.list_journalsfoundry.get_journalfoundry.export_journal_mediasync.foundry_to_notion.previewsync.foundry_to_notion.applysync.diffsync.conflicts.listsync.conflicts.resolve
加强护栏
- 仅写入Notion页面
NOTION_ALLOWED_DATABASE_IDS. - 通过附加/更新生成的镜像块来保留现有散文。
- 遗产
Music and Madness默认情况下,该部分保持不变,因为数据库作用域是显式的。
此初始实现中的已知限制
- Foundry HTTP路由预计在
/health,/journals,/journals/:id等等。 - 这里包含的Foundry模块是一个经过身份验证的套接字/事件脚手架。如果您需要来自Foundry本身的直接HTTP路由,请运行一个小型本地代理(或使用API模块),将这些路由映射到模块事件。
- 媒体被复制到本地持久文件。要在云Notion中可靠地直接渲染媒体,请设置
MEDIA_PUBLIC_BASE_URL连接到可访问的静态主机。
本地测试桥API(可选)
如果您的Foundry模块路由尚未激活,请运行mock API,该API实现:
GET /healthGET /journalsGET /journals/:idGET /journals/:id/mediaGET /assets/:assetIdGET /changes?since=
命令:
npm run foundry:mock-api夹具数据文件:
/Users/nicholasmcdowell/Documents/Codex Projects/Music and Madness/music-madness-sync-bridge/fixtures/foundry-fixture.json
Real Foundry代理(Socket.IO->HTTP路由)
当您的Foundry世界和 music-madness-bridge 模块正在运行。
为什么存在
您的同步客户端需要HTTP路由(/journals, /health等等)。 Foundry模块通过世界上的套接字事件进行通信。 此代理将HTTP调用转换为套接字事件调用。
启动顺序
- 启动Foundry并打开目标世界。
- 确保模块
music-madness-bridge已启用。 - 在Foundry世界设置中,设置
Bridge Token值与.envFOUNDRY_BRIDGE_TOKEN. - 填充在
.env:
- FOUNDRY_SITE_URL - FOUNDRY_WORLD - FOUNDRY_SESSION_COOKIE - FOUNDRY_BRIDGE_TOKEN
- 启动代理:
npm run foundry:proxy- 在另一个终端中,运行网桥操作:
npm run sync:preview
npm run sync:apply会话cookie注释
FOUNDRY_SESSION_COOKIE 是的值 session 来自已登录到Foundry世界的浏览器的cookie。 把它当作秘密令牌。
当前限制
GET /assets/:assetId 回报 501 在套接字代理模式下,除非您的模块添加了二进制资产流。 媒体仍与链接的期刊同步 sourceUrl 可访问的值。
远程Foundry主机(局域网)
如果Foundry在网络上的另一台计算机上运行,请设置:
FOUNDRY_SITE_URL=http://192.168.1.105:30000/保持同步客户端指向您的 本地代理:
FOUNDRY_BASE_URL=http://127.0.0.1:8788所以流程是:
- 此笔记本电脑同步客户端->本地代理(
127.0.0.1:8788) - 本地代理->远程Foundry(
192.168.1.105:30000)
您仍然需要:
FOUNDRY_WORLD对于那个遥远的Foundry世界FOUNDRY_SESSION_COOKIE从登录到该远程Foundry的浏览器- 匹配
FOUNDRY_BRIDGE_TOKEN在Foundry模块世界设置中
远程诊断命令
在同步之前运行此程序以验证远程Foundry+代理的运行状况。 此命令执行 不 自动启动代理;首先明确地开始它 npm run foundry:proxy.
npm run health:remote它检查什么:
FOUNDRY_SITE_URLHTTP可达性- 本地代理
/health响应和套接字连接状态 - 本地代理
/journals路线响应
如果任何检查失败,退出代码为非零。
带有补救提示的详细诊断:
npm run health:remote -- --verbose医生命令
验证您的 .env 在运行代理或同步之前:
npm run doctor它验证了什么:
- 存在必需的环境变量
- URL格式(
FOUNDRY_BASE_URL,FOUNDRY_SITE_URL) - 数据库范围一致性概念(
NOTION_DEFAULT_TARGET_DB_ID在...里NOTION_ALLOWED_DATABASE_IDS) - 代理端口健全性
- 世界蛞蝓和会话cookie的基本形状检查
当所需检查失败时,退出代码为非零。
远程模块安装(清单URL)
通过URL单击Foundry安装/更新,请使用发布工作流程指南:
/Users/nicholasmcdowell/Documents/Codex Projects/Music and Madness/music-madness-sync-bridge/docs/foundry_remote_install.md
快速命令(示例):
MODULE_VERSION=0.1.0 MODULE_URL=https://github.com// MODULE_MANIFEST_URL=https://raw.githubusercontent.com///main/foundry-module/music-madness-bridge/module.json MODULE_DOWNLOAD_URL=https://github.com///releases/download/v0.1.0/music-madness-bridge-v0.1.0.zip node scripts/release/prepare-foundry-module.mjs