diff --git a/PLAN.md b/PLAN.md index fc7587a..6868c96 100644 --- a/PLAN.md +++ b/PLAN.md @@ -2,7 +2,7 @@ 本计划把已核对的 DesireCore 接口整理成公开站点中的“集成与 API”区域。用户应能根据文档取得正确的服务地址和授权凭据,完成一次调用,理解响应与运行结果,并处理实际错误。实施采用主 Agent 协调、多个 subAgent 按接口能力并行核查、编写和验证的方式;先交付一个完整可用的接入流程,再按各项能力的实际进度发布扩展参考和 OpenAPI 下载。 -状态:P0—P5 完整选定范围已实施并通过本地验收;8 组双语页面、示例客户端、24 个端点及三个服务的规范就绪。上游 #4793 与源码 #4798 已全绿合并;公开文档 PR #72 正在刷新最终来源与发布。P6 自动部署与生产验收进行中。更新日期:2026-10-15。 +状态:P0—P5 完整选定范围已实施并通过本地验收;8 组双语页面、示例客户端、24 个端点及三个服务的规范就绪。上游 #4793、源码 #4798 与公开文档 #72 已合并,自动部署成功;16个API页面和8个下载正式线上验收通过。全站验收发现应用场景入口的旧canonical冲突,正在补修。更新日期:2026-10-15。 ## 1. 实施目标与完成标准 @@ -302,8 +302,8 @@ pnpm exec docusaurus serve --host 127.0.0.1 --port 3000 - [x] **T6.1** 审阅最终 diff、支持矩阵、脱敏验证记录和中英文页面。 - [x] **T6.2** 按批次创建 `codex/` 分支与 PR;涉及其它仓库的前置修正分别发布并记录依赖。 -- [ ] **T6.3** 进入发布流程后,将已验证改动合并/推送到公开仓库 `main`,等待自动部署结果。按仓库规范无需手动执行 Vercel 部署命令。 -- [ ] **T6.4** 核对线上 `/api`、`/en/api`、已公开叶子页面、语言切换及 OpenAPI 下载(若本批包含)。 +- [x] **T6.3** 进入发布流程后,将已验证改动合并/推送到公开仓库 `main`,等待自动部署结果。按仓库规范无需手动执行 Vercel 部署命令。 +- [x] **T6.4** 核对线上 `/api`、`/en/api`、已公开叶子页面、语言切换及 OpenAPI 下载(若本批包含)。 - [ ] **T6.5** 部署成功后执行 `pnpm sitemap:check`,验证生产 URL、canonical、robots、跳转和软 404。 - [ ] **T6.6** 检查新增内容的搜索可发现性;区分搜索爬取延迟与页面部署失败。 - [ ] **T6.7** 回写本计划状态、公开端点清单与内部台账,记录最终代码/文档/发行基线。 @@ -469,3 +469,11 @@ P0—P5 表示工作范围,不能作为全局串行阶段。主 Agent 先完 来源清单与三个规范固定到最终源码,内部 docs 指针为远程可达的 `9cc47fc9216db4a3803a982f00649f7af667c933`。33个端点来源/Schema文件仅认证 gate 导入方式调整,调用顺序和24端点合同不变。外围用量消息增加可选模型字段、回执按实际响应归集模型身份;现有指南与客户端兼容,不追加新字段保证或客户端版本约束。原定向运行结果仍按各自固定基线记录。 公开分支已衔接最新 main,保留三个发行版的并行更新日志。部署前生产/API路径及规范下载返回404、sitemap尚无API条目,作为上线前快照;上线验收须等公开PR合并与自动部署成功后执行。 + +## 14. 生产部署与验收(2026-10-15) + +公开PR #72 在最终HEAD `8f808384d3cc8668998c2f097145cbeb0dc12f15` 全部7项检查通过后合并。主分支提交 `93fcbd26c64465e147b8c6532f48c1558a3c989a` 的Production deployment `7088235715` 于北京时间16:54:38成功;未手动执行Vercel部署。 + +严格生产验收16页、8下载全部200,canonical、语言/同页alternate、可索引性、两语言sitemap条目、robots及下载字节/规范来源全部通过,逐项报告见 `api/production-verification.json`。浏览器从中文对话指南切换英文,保持同页,英文正文和API导航渲染正常、无整页水平溢出。 + +全站718URL均200,但 `/use-cases` 与 `/en/use-cases` 的canonical被目录README隐式索引覆盖为尾斜杠地址。作者资产说明已重命名为默认排除的 `_README.md`,不改正常入口slug、不放宽验收器。待该修正自动部署后重跑全站检查,再完成T6.5。 diff --git a/api/production-verification.json b/api/production-verification.json new file mode 100644 index 0000000..6e2a6bf --- /dev/null +++ b/api/production-verification.json @@ -0,0 +1,491 @@ +{ + "checkedAt": "2026-10-15T08:55:45.929Z", + "mode": "strict", + "result": "passed", + "origin": "https://docs.desirecore.com", + "expectedPages": 16, + "expectedDownloads": 8, + "pages": 16, + "downloads": 8, + "infrastructure": [ + { + "pathname": "/sitemap.xml", + "status": 200, + "finalUrl": "https://docs.desirecore.com/sitemap.xml", + "contentType": "application/xml", + "cacheStatus": "MISS", + "problems": [], + "kind": "sitemap", + "entries": 359 + }, + { + "pathname": "/en/sitemap.xml", + "status": 200, + "finalUrl": "https://docs.desirecore.com/en/sitemap.xml", + "contentType": "application/xml", + "cacheStatus": "MISS", + "problems": [], + "kind": "sitemap", + "entries": 359 + }, + { + "pathname": "/robots.txt", + "status": 200, + "finalUrl": "https://docs.desirecore.com/robots.txt", + "contentType": "text/plain; charset=utf-8", + "cacheStatus": "MISS", + "problems": [], + "kind": "robots", + "matchesExpectedBytes": true, + "sitemaps": [ + "https://docs.desirecore.com/sitemap.xml", + "https://docs.desirecore.com/en/sitemap.xml" + ] + } + ], + "results": [ + { + "pathname": "/api", + "status": 200, + "finalUrl": "https://docs.desirecore.com/api", + "contentType": "text/html; charset=utf-8", + "cacheStatus": "MISS", + "problems": [], + "kind": "page", + "title": "集成与 API | DesireCore Docs", + "canonical": "https://docs.desirecore.com/api", + "alternates": { + "zh-Hans": [ + "https://docs.desirecore.com/api" + ], + "en": [ + "https://docs.desirecore.com/en/api" + ] + }, + "htmlLanguage": "zh-Hans" + }, + { + "pathname": "/api/connection-and-auth", + "status": 200, + "finalUrl": "https://docs.desirecore.com/api/connection-and-auth", + "contentType": "text/html; charset=utf-8", + "cacheStatus": "MISS", + "problems": [], + "kind": "page", + "title": "连接实例与认证 | DesireCore Docs", + "canonical": "https://docs.desirecore.com/api/connection-and-auth", + "alternates": { + "zh-Hans": [ + "https://docs.desirecore.com/api/connection-and-auth" + ], + "en": [ + "https://docs.desirecore.com/en/api/connection-and-auth" + ] + }, + "htmlLanguage": "zh-Hans" + }, + { + "pathname": "/api/agent-webhook", + "status": 200, + "finalUrl": "https://docs.desirecore.com/api/agent-webhook", + "contentType": "text/html; charset=utf-8", + "cacheStatus": "MISS", + "problems": [], + "kind": "page", + "title": "智能体 Webhook | DesireCore Docs", + "canonical": "https://docs.desirecore.com/api/agent-webhook", + "alternates": { + "zh-Hans": [ + "https://docs.desirecore.com/api/agent-webhook" + ], + "en": [ + "https://docs.desirecore.com/en/api/agent-webhook" + ] + }, + "htmlLanguage": "zh-Hans" + }, + { + "pathname": "/api/errors-and-troubleshooting", + "status": 200, + "finalUrl": "https://docs.desirecore.com/api/errors-and-troubleshooting", + "contentType": "text/html; charset=utf-8", + "cacheStatus": "MISS", + "problems": [], + "kind": "page", + "title": "错误与排查 | DesireCore Docs", + "canonical": "https://docs.desirecore.com/api/errors-and-troubleshooting", + "alternates": { + "zh-Hans": [ + "https://docs.desirecore.com/api/errors-and-troubleshooting" + ], + "en": [ + "https://docs.desirecore.com/en/api/errors-and-troubleshooting" + ] + }, + "htmlLanguage": "zh-Hans" + }, + { + "pathname": "/api/conversations-and-runs", + "status": 200, + "finalUrl": "https://docs.desirecore.com/api/conversations-and-runs", + "contentType": "text/html; charset=utf-8", + "cacheStatus": "MISS", + "problems": [], + "kind": "page", + "title": "对话与运行记录 | DesireCore Docs", + "canonical": "https://docs.desirecore.com/api/conversations-and-runs", + "alternates": { + "zh-Hans": [ + "https://docs.desirecore.com/api/conversations-and-runs" + ], + "en": [ + "https://docs.desirecore.com/en/api/conversations-and-runs" + ] + }, + "htmlLanguage": "zh-Hans" + }, + { + "pathname": "/api/model-proxy", + "status": 200, + "finalUrl": "https://docs.desirecore.com/api/model-proxy", + "contentType": "text/html; charset=utf-8", + "cacheStatus": "MISS", + "problems": [], + "kind": "page", + "title": "模型协议代理 | DesireCore Docs", + "canonical": "https://docs.desirecore.com/api/model-proxy", + "alternates": { + "zh-Hans": [ + "https://docs.desirecore.com/api/model-proxy" + ], + "en": [ + "https://docs.desirecore.com/en/api/model-proxy" + ] + }, + "htmlLanguage": "zh-Hans" + }, + { + "pathname": "/api/workflow-integration", + "status": 200, + "finalUrl": "https://docs.desirecore.com/api/workflow-integration", + "contentType": "text/html; charset=utf-8", + "cacheStatus": "MISS", + "problems": [], + "kind": "page", + "title": "工作流集成 | DesireCore Docs", + "canonical": "https://docs.desirecore.com/api/workflow-integration", + "alternates": { + "zh-Hans": [ + "https://docs.desirecore.com/api/workflow-integration" + ], + "en": [ + "https://docs.desirecore.com/en/api/workflow-integration" + ] + }, + "htmlLanguage": "zh-Hans" + }, + { + "pathname": "/api/openapi", + "status": 200, + "finalUrl": "https://docs.desirecore.com/api/openapi", + "contentType": "text/html; charset=utf-8", + "cacheStatus": "MISS", + "problems": [], + "kind": "page", + "title": "OpenAPI 下载 | DesireCore Docs", + "canonical": "https://docs.desirecore.com/api/openapi", + "alternates": { + "zh-Hans": [ + "https://docs.desirecore.com/api/openapi" + ], + "en": [ + "https://docs.desirecore.com/en/api/openapi" + ] + }, + "htmlLanguage": "zh-Hans" + }, + { + "pathname": "/openapi/agent-service.json", + "status": 200, + "finalUrl": "https://docs.desirecore.com/openapi/agent-service.json", + "contentType": "application/json; charset=utf-8", + "cacheStatus": "MISS", + "problems": [], + "kind": "download", + "matchesExpectedBytes": true, + "bytes": 233920, + "sha256": "8c79f8b81971e9bc28b9194fd6de4639d5e28844ccc3541b268d0bcadf8873d8", + "expectedSha256": "8c79f8b81971e9bc28b9194fd6de4639d5e28844ccc3541b268d0bcadf8873d8", + "openapi": "3.1.0", + "service": "agent-service", + "sourceRevision": "e45f22902af2dc45b109cfa8f454795538aea2ed" + }, + { + "pathname": "/openapi/compat-proxy.json", + "status": 200, + "finalUrl": "https://docs.desirecore.com/openapi/compat-proxy.json", + "contentType": "application/json; charset=utf-8", + "cacheStatus": "MISS", + "problems": [], + "kind": "download", + "matchesExpectedBytes": true, + "bytes": 27811, + "sha256": "a8c145b0bfef5375d802362821cba3a26b6a3c58b71faaa82c0ac4978528817a", + "expectedSha256": "a8c145b0bfef5375d802362821cba3a26b6a3c58b71faaa82c0ac4978528817a", + "openapi": "3.1.0", + "service": "compat-proxy", + "sourceRevision": "e45f22902af2dc45b109cfa8f454795538aea2ed" + }, + { + "pathname": "/openapi/workflow-service.json", + "status": 200, + "finalUrl": "https://docs.desirecore.com/openapi/workflow-service.json", + "contentType": "application/json; charset=utf-8", + "cacheStatus": "MISS", + "problems": [], + "kind": "download", + "matchesExpectedBytes": true, + "bytes": 29839, + "sha256": "7db1982e527c2ff7f7c09b6d7b69981a19cd02e35bc26aab210408afb91451a2", + "expectedSha256": "7db1982e527c2ff7f7c09b6d7b69981a19cd02e35bc26aab210408afb91451a2", + "openapi": "3.1.0", + "service": "workflow-service", + "sourceRevision": "e45f22902af2dc45b109cfa8f454795538aea2ed" + }, + { + "pathname": "/api-examples/agent-client.mjs", + "status": 200, + "finalUrl": "https://docs.desirecore.com/api-examples/agent-client.mjs", + "contentType": "application/javascript; charset=utf-8", + "cacheStatus": "MISS", + "problems": [], + "kind": "download", + "matchesExpectedBytes": true, + "bytes": 20273, + "sha256": "b1524eec87782f9bd3eb2719d6df47e7d5ccb9fa40d9fd507c8670913b20a2db", + "expectedSha256": "b1524eec87782f9bd3eb2719d6df47e7d5ccb9fa40d9fd507c8670913b20a2db" + }, + { + "pathname": "/en/api", + "status": 200, + "finalUrl": "https://docs.desirecore.com/en/api", + "contentType": "text/html; charset=utf-8", + "cacheStatus": "MISS", + "problems": [], + "kind": "page", + "title": "Integration & API | DesireCore Docs", + "canonical": "https://docs.desirecore.com/en/api", + "alternates": { + "zh-Hans": [ + "https://docs.desirecore.com/api" + ], + "en": [ + "https://docs.desirecore.com/en/api" + ] + }, + "htmlLanguage": "en" + }, + { + "pathname": "/en/api/connection-and-auth", + "status": 200, + "finalUrl": "https://docs.desirecore.com/en/api/connection-and-auth", + "contentType": "text/html; charset=utf-8", + "cacheStatus": "MISS", + "problems": [], + "kind": "page", + "title": "Connect to an Instance and Authenticate | DesireCore Docs", + "canonical": "https://docs.desirecore.com/en/api/connection-and-auth", + "alternates": { + "zh-Hans": [ + "https://docs.desirecore.com/api/connection-and-auth" + ], + "en": [ + "https://docs.desirecore.com/en/api/connection-and-auth" + ] + }, + "htmlLanguage": "en" + }, + { + "pathname": "/en/api/agent-webhook", + "status": 200, + "finalUrl": "https://docs.desirecore.com/en/api/agent-webhook", + "contentType": "text/html; charset=utf-8", + "cacheStatus": "MISS", + "problems": [], + "kind": "page", + "title": "Agent Webhook | DesireCore Docs", + "canonical": "https://docs.desirecore.com/en/api/agent-webhook", + "alternates": { + "zh-Hans": [ + "https://docs.desirecore.com/api/agent-webhook" + ], + "en": [ + "https://docs.desirecore.com/en/api/agent-webhook" + ] + }, + "htmlLanguage": "en" + }, + { + "pathname": "/en/api/errors-and-troubleshooting", + "status": 200, + "finalUrl": "https://docs.desirecore.com/en/api/errors-and-troubleshooting", + "contentType": "text/html; charset=utf-8", + "cacheStatus": "MISS", + "problems": [], + "kind": "page", + "title": "Errors and Troubleshooting | DesireCore Docs", + "canonical": "https://docs.desirecore.com/en/api/errors-and-troubleshooting", + "alternates": { + "zh-Hans": [ + "https://docs.desirecore.com/api/errors-and-troubleshooting" + ], + "en": [ + "https://docs.desirecore.com/en/api/errors-and-troubleshooting" + ] + }, + "htmlLanguage": "en" + }, + { + "pathname": "/en/api/conversations-and-runs", + "status": 200, + "finalUrl": "https://docs.desirecore.com/en/api/conversations-and-runs", + "contentType": "text/html; charset=utf-8", + "cacheStatus": "MISS", + "problems": [], + "kind": "page", + "title": "Conversations and Runs | DesireCore Docs", + "canonical": "https://docs.desirecore.com/en/api/conversations-and-runs", + "alternates": { + "zh-Hans": [ + "https://docs.desirecore.com/api/conversations-and-runs" + ], + "en": [ + "https://docs.desirecore.com/en/api/conversations-and-runs" + ] + }, + "htmlLanguage": "en" + }, + { + "pathname": "/en/api/model-proxy", + "status": 200, + "finalUrl": "https://docs.desirecore.com/en/api/model-proxy", + "contentType": "text/html; charset=utf-8", + "cacheStatus": "MISS", + "problems": [], + "kind": "page", + "title": "Model Protocol Proxy | DesireCore Docs", + "canonical": "https://docs.desirecore.com/en/api/model-proxy", + "alternates": { + "zh-Hans": [ + "https://docs.desirecore.com/api/model-proxy" + ], + "en": [ + "https://docs.desirecore.com/en/api/model-proxy" + ] + }, + "htmlLanguage": "en" + }, + { + "pathname": "/en/api/workflow-integration", + "status": 200, + "finalUrl": "https://docs.desirecore.com/en/api/workflow-integration", + "contentType": "text/html; charset=utf-8", + "cacheStatus": "MISS", + "problems": [], + "kind": "page", + "title": "Workflow Integration | DesireCore Docs", + "canonical": "https://docs.desirecore.com/en/api/workflow-integration", + "alternates": { + "zh-Hans": [ + "https://docs.desirecore.com/api/workflow-integration" + ], + "en": [ + "https://docs.desirecore.com/en/api/workflow-integration" + ] + }, + "htmlLanguage": "en" + }, + { + "pathname": "/en/api/openapi", + "status": 200, + "finalUrl": "https://docs.desirecore.com/en/api/openapi", + "contentType": "text/html; charset=utf-8", + "cacheStatus": "MISS", + "problems": [], + "kind": "page", + "title": "OpenAPI download | DesireCore Docs", + "canonical": "https://docs.desirecore.com/en/api/openapi", + "alternates": { + "zh-Hans": [ + "https://docs.desirecore.com/api/openapi" + ], + "en": [ + "https://docs.desirecore.com/en/api/openapi" + ] + }, + "htmlLanguage": "en" + }, + { + "pathname": "/en/openapi/agent-service.json", + "status": 200, + "finalUrl": "https://docs.desirecore.com/en/openapi/agent-service.json", + "contentType": "application/json; charset=utf-8", + "cacheStatus": "MISS", + "problems": [], + "kind": "download", + "matchesExpectedBytes": true, + "bytes": 233920, + "sha256": "8c79f8b81971e9bc28b9194fd6de4639d5e28844ccc3541b268d0bcadf8873d8", + "expectedSha256": "8c79f8b81971e9bc28b9194fd6de4639d5e28844ccc3541b268d0bcadf8873d8", + "openapi": "3.1.0", + "service": "agent-service", + "sourceRevision": "e45f22902af2dc45b109cfa8f454795538aea2ed" + }, + { + "pathname": "/en/openapi/compat-proxy.json", + "status": 200, + "finalUrl": "https://docs.desirecore.com/en/openapi/compat-proxy.json", + "contentType": "application/json; charset=utf-8", + "cacheStatus": "MISS", + "problems": [], + "kind": "download", + "matchesExpectedBytes": true, + "bytes": 27811, + "sha256": "a8c145b0bfef5375d802362821cba3a26b6a3c58b71faaa82c0ac4978528817a", + "expectedSha256": "a8c145b0bfef5375d802362821cba3a26b6a3c58b71faaa82c0ac4978528817a", + "openapi": "3.1.0", + "service": "compat-proxy", + "sourceRevision": "e45f22902af2dc45b109cfa8f454795538aea2ed" + }, + { + "pathname": "/en/openapi/workflow-service.json", + "status": 200, + "finalUrl": "https://docs.desirecore.com/en/openapi/workflow-service.json", + "contentType": "application/json; charset=utf-8", + "cacheStatus": "MISS", + "problems": [], + "kind": "download", + "matchesExpectedBytes": true, + "bytes": 29839, + "sha256": "7db1982e527c2ff7f7c09b6d7b69981a19cd02e35bc26aab210408afb91451a2", + "expectedSha256": "7db1982e527c2ff7f7c09b6d7b69981a19cd02e35bc26aab210408afb91451a2", + "openapi": "3.1.0", + "service": "workflow-service", + "sourceRevision": "e45f22902af2dc45b109cfa8f454795538aea2ed" + }, + { + "pathname": "/en/api-examples/agent-client.mjs", + "status": 200, + "finalUrl": "https://docs.desirecore.com/en/api-examples/agent-client.mjs", + "contentType": "application/javascript; charset=utf-8", + "cacheStatus": "MISS", + "problems": [], + "kind": "download", + "matchesExpectedBytes": true, + "bytes": 20273, + "sha256": "b1524eec87782f9bd3eb2719d6df47e7d5ccb9fa40d9fd507c8670913b20a2db", + "expectedSha256": "b1524eec87782f9bd3eb2719d6df47e7d5ccb9fa40d9fd507c8670913b20a2db" + } + ], + "failureCount": 0 +} diff --git a/api/verification.md b/api/verification.md index 4051341..1fa1a9a 100644 --- a/api/verification.md +++ b/api/verification.md @@ -161,3 +161,9 @@ node_modules/.bin/vitest run --project integration --maxWorkers=1 --no-file-para 相对两个原测试基线,24端点汇总的33个来源/Schema文件中仅 `instance-auth.ts` 静态导入改异步导入,仍先执行同一application authority gate,再处理豁免与owner fallback。请求、响应、路由和认证分支未变。外围用量消息新可选model和混合模型回执省略身份的行为与现有指南/客户端兼容;本次只读差异核对不作为新增运行测试。公开清单及三个spec已同步固定来源,未改变API合同。 部署前快照:生产首页200,API中英文入口与规范下载404,两语言sitemap不含API路径。生产验收结果将在自动部署后单独回写;这些404不作为部署后结果。 + +## 生产验收(2026-10-15) + +公开PR #72 已合并为 `93fcbd26c64465e147b8c6532f48c1558a3c989a`,Production deployment `7088235715` 于北京时间16:54:38成功。16个API页面与8个下载的严格验收全部通过,报告为 [production-verification.json](./production-verification.json):包含逐页canonical/语言/alternate/索引条件、sitemap/robots及下载长度和SHA-256;三个规范指向最终源码 `e45f229`。中文对话指南在浏览器切换英文后保持同页,正文和导航正常。 + +全站sitemap初次检查718项均200,但两个应用场景入口存在README/index输出覆盖导致的canonical冲突。修复只重命名作者资产说明为 `_README.md`,继续保留严格验收规则;修复后的生产验收单独记录。 diff --git a/docs/03-use-cases/README.md b/docs/03-use-cases/_README.md similarity index 100% rename from docs/03-use-cases/README.md rename to docs/03-use-cases/_README.md