[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-96701":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":15,"stars7d":15,"stars30d":15,"stars90d":14,"forks30d":14,"starsTrendScore":16,"compositeScore":17,"rankGlobal":9,"rankLanguage":9,"license":18,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":19,"hasPages":19,"topics":21,"createdAt":9,"pushedAt":9,"updatedAt":22,"readmeContent":23,"aiSummary":9,"trendingCount":14,"starSnapshotCount":14,"syncStatus":24,"lastSyncTime":25,"discoverSource":26},96701,"travel-planning","mater1996\u002Ftravel-planning","mater1996","travel planning",null,"Python",203,24,128,0,22,66,77.34,"Other",false,"main",[],"2026-09-25 04:01:33","# Travel Planning Plugin\n\n面向 Codex 的旅行研究与行程交付插件。它会先比较路线并让用户确认，再按需查询地图、交通、住宿、天气和社区体验，最后生成带来源的 `itinerary.json` 与可独立打开的响应式 `itinerary.html`。\n\n## 在线 Demo\n\n[查看兰州一日游示例](https:\u002F\u002Fstarlit-tartufo-3b4ce4.netlify.app\u002F)，可直接体验最终行程页面的路线图、逐日时间轴、关键信息一览和移动端布局。\n\nDemo 用于展示插件的页面交付形态，其中的开放时间、价格、天气和交通状态属于生成时的快照，不能作为当前出行确认依据。\n\n插件不会代订、占座、付款、发送消息或修改订单。价格、余票、库存、开放时间和天气等动态信息只表示查询时点的快照，最终下单前仍需回到官方或供应商页面确认。\n\n当前已验证的安装主路径是 Codex 本地 marketplace。仓库同时保留 Claude Code 与通用宿主所需的清单，方便后续适配，但不把它们表述成已经验收的一键安装流程。\n\n## 能力概览\n\n| 能力 | 数据源与实现 | 是否需要凭证 |\n| --- | --- | --- |\n| 完整行程规划 | `travel-planning` Skill、结构化研究工作区、审查器和响应式页面渲染器 | 否 |\n| 中国境内地点与路线 | 高德地图官方 MCP | `AMAP_API_KEY` |\n| 航班、火车、酒店和旅行产品 | 飞猪 FlyAI 官方 CLI | `FLYAI_API_KEY` |\n| 航班运行、价格、铁路和空铁联运 | 飞常准 Aviation 与 Tripmatch MCP | `VARIFLIGHT_API_KEY` |\n| 近期玩法、美食和避坑 | 固定版本 `xpzouying\u002Fxiaohongshu-mcp`，本机独立浏览器 | 需要用户本人扫码登录 |\n| 境外地点与近期天气 | OpenStreetMap、Open-Meteo | 否 |\n\n插件统一的是安装、能力发现、权限边界和旅行编排。各数据源仍使用最合适的官方 CLI、MCP 或公开 API，并不会为了形式统一而重写成同一种协议。\n\n## 快速接入 Codex\n\n### 1. 准备运行环境\n\n请先准备：\n\n- 支持 `codex plugin` 命令的 Codex CLI\n- Python 3.10 或更高版本\n- Node.js 22.14.0 或更高版本，并确保 `npm`、`npx` 可用\n- 一个不会被临时清理的仓库目录或解压目录\n\nNode.js 22.14.0 覆盖了高德、飞猪和飞常准三个 Node Provider 的运行要求。小红书的预编译工具目前支持 macOS Apple Silicon 和 Linux x86_64；不使用小红书时不影响其他能力。\n\n### 2. 注册 marketplace 并安装插件\n\n拿到本仓库或发布包并进入它的根目录。该目录下应同时存在 `.agents\u002Fplugins\u002Fmarketplace.json` 和 `plugins\u002Ftravel-planning\u002F`。\n\n```bash\ncd \u002Fabsolute\u002Fpath\u002Fto\u002Ftravel-planning\ncodex plugin marketplace add \"$PWD\" --json\ncodex plugin add travel-planning@local --json\n```\n\n检查安装结果：\n\n```bash\ncodex plugin list\n```\n\n列表中应出现 `travel-planning@local`，状态为 `installed, enabled`。安装或升级后请新建一个 Codex 会话，让新 Skill 与 MCP 配置从干净上下文加载。\n\n如果 `local` marketplace 已经注册，无需重复执行 `marketplace add`。拉取新版仓库或替换发布包后，重新执行 `codex plugin add travel-planning@local --json`，然后新建会话即可。\n\n### 3. 配置需要的数据源\n\n数据源按需启用，不必一次配齐。OpenStreetMap 和 Open-Meteo 无需 Key；高德、飞猪和飞常准分别只接收自己的凭证。\n\n推荐把配置放在用户目录，避免凭证进入仓库或分发包：\n\n```bash\nmkdir -p ~\u002F.config\u002Ftravel-planning\ncp plugins\u002Ftravel-planning\u002Fconfig\u002Fsources.example.env \\\n  ~\u002F.config\u002Ftravel-planning\u002Fsources.local.env\nchmod 600 ~\u002F.config\u002Ftravel-planning\u002Fsources.local.env\n```\n\n编辑 `~\u002F.config\u002Ftravel-planning\u002Fsources.local.env`，只填写需要启用的项目：\n\n```dotenv\nAMAP_API_KEY=\nFLYAI_API_KEY=\nVARIFLIGHT_API_KEY=\n```\n\n凭证申请入口：\n\n- 高德 Web 服务 Key：\u003Chttps:\u002F\u002Fconsole.amap.com\u002Fdev\u002Fflow\u002Fdetail?type=0>\n- 飞猪 FlyAI：\u003Chttps:\u002F\u002Fflyai.open.fliggy.com\u002Fconsole>\n- 飞常准：\u003Chttps:\u002F\u002Fai.variflight.com\u002Fkeys>\n\n如需使用其他文件，可在启动 Codex 前设置 `TRAVEL_SOURCES_CONFIG=\u002Fabsolute\u002Fpath\u002Fto\u002Fsources.local.env`。源码开发时也可使用 `plugins\u002Ftravel-planning\u002Fconfig\u002Fsources.local.env`；该文件已被 Git 忽略，且不会进入安装包。\n\n### 4. 可选启用小红书\n\n小红书使用固定版本的本机 HTTP MCP 和独立浏览器，不依赖 Chrome 扩展。首次使用时运行：\n\n```bash\ncd plugins\u002Ftravel-planning\npython3 skills\u002Fxiaohongshu\u002Fscripts\u002Fsetup.py install\npython3 skills\u002Fxiaohongshu\u002Fscripts\u002Fsetup.py login\npython3 skills\u002Fxiaohongshu\u002Fscripts\u002Fsetup.py start\npython3 skills\u002Fxiaohongshu\u002Fscripts\u002Fsetup.py status\n```\n\n`login` 会打开上游登录工具，扫码和账号确认必须由用户本人完成。二进制、Cookie、日志与进程状态保存在 `~\u002F.local\u002Fshare\u002Ftravel-planning\u002Fxiaohongshu-mcp\u002F`，不会写入插件源码。\n\n后续常用命令：\n\n```bash\npython3 skills\u002Fxiaohongshu\u002Fscripts\u002Fsetup.py start\npython3 skills\u002Fxiaohongshu\u002Fscripts\u002Fsetup.py stop\npython3 skills\u002Fxiaohongshu\u002Fscripts\u002Fsetup.py logs\n```\n\n### 5. 运行接入检查\n\n先查看本机具备哪些来源，再执行一次真实协议和上游探测：\n\n```bash\npython3 plugins\u002Ftravel-planning\u002Fskills\u002Ftravel-planning\u002Fscripts\u002Fresearch_sources.py capabilities\npython3 plugins\u002Ftravel-planning\u002Fskills\u002Ftravel-planning\u002Fscripts\u002Fresearch_sources.py preflight \\\n  --city \"上海\"\n```\n\n未配置的可选来源会明确显示为不可用或降级，不会阻止其他来源工作。若某次行程必须依赖特定来源，可重复添加 `--require`；任何必需来源失败时，命令都会以非零状态退出。\n\n```bash\npython3 plugins\u002Ftravel-planning\u002Fskills\u002Ftravel-planning\u002Fscripts\u002Fresearch_sources.py preflight \\\n  --city \"上海\" \\\n  --require amap-maps \\\n  --require xiaohongshu\n```\n\n`capabilities` 只用于了解配置，不能代替 `preflight`。后者会实际执行 MCP `initialize`、`tools\u002Flist` 和只读上游探测。\n\n### 6. 在新会话中使用\n\n完整行程优先调用主 Skill：\n\n```text\n使用 $travel-planning 帮我规划 10 月 1 日到 10 月 6 日从北京出发的成都、重庆行程。\n2 人，预算 12000 元，偏好美食和历史，节奏不要太赶。先给我 2～3 个路线方案，等我确认后再深度调研并生成页面。\n```\n\n也可以直接调用单一数据源：\n\n```text\n使用 $amap-maps 比较成都东站到宽窄巷子的地铁和打车路线。\n使用 $flyai 查询指定日期北京到成都的航班候选，只做只读比较。\n使用 $variflight 核验 3U8882 的运行与舒适度信息。\n使用 $xiaohongshu 搜索近期成都早餐体验，不发布、不点赞、不评论。\n```\n\n主 Skill 默认先确认路线，再进行深度研究。路线确认后，对已配置来源的只读查询无需逐次授权；登录、验证码、付费凭证、预订、付款和任何外部写操作仍由用户掌控。\n\n## 规划与交付流程\n\n```text\n旅行需求\n  → 2～3 个路线方案\n  → 用户确认路线\n  → 数据源 preflight\n  → 分来源研究与证据归档\n  → 合并本次行程的共享实体\n  → itinerary-plan.json\n  → itinerary.json 审查\n  → itinerary.html 渲染\n```\n\n每次行程的数据都保存在当前项目的 `.travel-research\u002F\u003Ctrip-id>\u002F`，不会建立跨行程缓存。最终交付位于：\n\n```text\n.travel-research\u002F\u003Ctrip-id>\u002Fartifacts\u002Fitinerary.json\n.travel-research\u002F\u003Ctrip-id>\u002Fartifacts\u002Faudit.json\n.travel-research\u002F\u003Ctrip-id>\u002Fartifacts\u002Fitinerary.html\n```\n\n页面内联交互脚本和样式，可直接打开或作为单个 HTML 文件分享。JavaScript 被附件预览禁用时，页面仍可通过纯 CSS 完成主要视图切换。\n\n## 仓库结构\n\n```text\n.\n├── .agents\u002Fplugins\u002Fmarketplace.json       # Codex marketplace 入口\n├── .codex\u002Fconfig.toml                     # 当前仓库的开发启用配置\n├── plugins\u002Ftravel-planning\u002F\n│   ├── .codex-plugin\u002Fplugin.json          # Codex 插件清单\n│   ├── .claude-plugin\u002Fplugin.json         # Claude Code 兼容清单\n│   ├── plugin.json                        # 可移植清单\n│   ├── .mcp.json                          # MCP Server 声明\n│   ├── config\u002Fsources.example.env         # 凭证模板\n│   ├── scripts\u002Fproviders\u002F                 # Provider 启动器\n│   ├── skills\u002F                            # 主 Skill 与数据源 Skills\n│   └── web\u002F                               # Vue\u002FVite 页面前端\n├── scripts\u002Fpackage_plugin.py\n└── Makefile\n```\n\n插件按任务域暴露五个 Skill：`travel-planning` 负责跨来源编排，`xiaohongshu`、`flyai`、`amap-maps`、`variflight` 负责对应数据源。插件清单注册高德、飞常准 Aviation、飞常准 Tripmatch 和小红书四个 MCP Server；FlyAI 由主 Skill 通过固定版本 CLI 调用。\n\n## 开发与验证\n\n修改 Vue 页面资源后先构建前端，再校验插件和测试：\n\n```bash\nmake frontend\npython3 \u002Fabsolute\u002Fpath\u002Fto\u002Fplugin-creator\u002Fscripts\u002Fvalidate_plugin.py \\\n  plugins\u002Ftravel-planning\n(cd plugins\u002Ftravel-planning && python3 -m unittest discover -s tests -p 'test_*.py')\n```\n\n`make frontend` 会把兼容转译后的脚本和样式写入 `skills\u002Ftravel-planning\u002Fassets\u002Ffrontend\u002F`，Python 渲染器再将它们内联进最终页面。若本机没有 `plugin-creator`，至少运行测试，并确认三个插件清单、marketplace 路径和 Skill 名称保持一致。\n\n## 打包与分发\n\n```bash\nmake package\n```\n\n默认产物为 `output\u002Ftravel-planning-marketplace.zip`：\n\n```text\ntravel-planning-marketplace\u002F\n├── .agents\u002Fplugins\u002Fmarketplace.json\n├── plugins\u002Ftravel-planning\u002F\n└── README.md\n```\n\n接收方需要先把 ZIP 解压到持久目录，再按照“快速接入 Codex”中的命令注册该目录并安装 `travel-planning@local`。Codex CLI 接收的是 marketplace 目录，不是 ZIP 文件本身。\n\n打包清单由 Git 规则生成。已跟踪文件和未被忽略的新文件会进入 ZIP；`.gitignore`、`.git\u002Finfo\u002Fexclude` 和全局 Git ignore 命中的文件不会进入产物。因此 `sources.local.env`、研究工作区、浏览器截图和本机缓存不会被分发。\n\n如需覆盖默认路径：\n\n```bash\nmake package \\\n  PLUGIN_DIR=plugins\u002Ftravel-planning \\\n  PACKAGE_OUTPUT=output\u002Fcustom-name.zip \\\n  BUNDLE_NAME=custom-marketplace\n```\n\n## 常见问题\n\n`codex plugin list` 中看不到插件\n\n确认执行 `marketplace add` 时传入的是包含 `.agents\u002Fplugins\u002Fmarketplace.json` 的根目录，而不是 `plugins\u002Ftravel-planning\u002F`。然后重新执行 `codex plugin add travel-planning@local --json`。\n\n插件已安装，但当前会话找不到 Skill 或 MCP\n\n安装或升级后新建 Codex 会话。旧会话不会可靠地重新加载插件能力。\n\nProvider 提示缺少 Key\n\n确认文件位于 `~\u002F.config\u002Ftravel-planning\u002Fsources.local.env`、变量名与模板一致，并且等号后没有多余引号或空格。也可以显式设置 `TRAVEL_SOURCES_CONFIG`。\n\n小红书返回 `login_required`\n\n先执行 `setup.py stop`，再执行 `setup.py login` 并由用户完成扫码，最后执行 `setup.py start`。不要在多个进程中同时操作同一个账号的登录态。\n\n预检显示 `degraded`\n\n先看具体来源的原因。未被 `--require` 声明的来源允许降级；行程仍可使用其他实时来源或生成带官方入口、查询条件和复核时间的手动检查项。\n\n## 许可证\n\n本项目原创内容采用 [PolyForm Noncommercial License 1.0.0](LICENSE)，允许个人学习、研究、实验和其他非商业用途，禁止未经授权的商业使用。\n\n项目引用或调用的第三方组件仍适用各自的许可证和版权声明，不因本项目许可证而改变。\n",2,"2026-09-24 02:30:05","CREATED_QUERY"]