fix: clarify todo-note route misses

This commit is contained in:
AgentRun Artificer
2026-06-11 16:42:53 +08:00
parent 6d80bfec94
commit 08a46a22c7
4 changed files with 247 additions and 8 deletions
+3 -3
View File
@@ -170,7 +170,7 @@ bun scripts/cli.ts microservice proxy todo-note /api/instances/<id>/redo --metho
看到 `404 {"error":"Todo Note is running in backend-only mode"}` 时**第一反应**是路径错(用了不存在的 REST 端点被 catch-all 兜底),不是 mode 锁了写;详见 `docs/reference/microservices.md` 的 Todo Note 段。
**Todo Note 错路径结构化诊断(issue #198CLI 侧 interim 修**:上游 `gitee.com/Lyon1998/todo_note` 的 catch-all handler 当前把任何未注册路径都回 `404 {"ok":false,"error":"Todo Note is running in backend-only mode"}`,与 `TODO_NOTE_BACKEND_ONLY=1` 的真实语义(只关 Vite 前端)混淆。`microservice proxy todo-note` 看到这个特征时会把响应 body 改写成结构化诊断:
**Todo Note 错路径结构化诊断(issue #198)**:上游 `gitee.com/Lyon1998/todo_note` 的 catch-all handler 当前把任何未注册路径都回 `404 {"ok":false,"error":"Todo Note is running in backend-only mode"}`,与 `TODO_NOTE_BACKEND_ONLY=1` 的真实语义(只关 Vite 前端)混淆。backend-core 的 `/api/microservices/todo-note/proxy/...` 同源代理看到这个特征时会把响应 body 改写成结构化诊断;CLI 侧保留相同改写作为本地/旧 runtime 兜底
```json
{
@@ -192,7 +192,7 @@ bun scripts/cli.ts microservice proxy todo-note /api/instances/<id>/redo --metho
}
```
改写后的响应同时带 `bodyRewritten: true``rewriteReason` 和原始 `upstreamBody``{"ok":false,"error":"Todo Note is running in backend-only mode"}`),所以审计 / 排障仍能拿到上游真相;上游 PR 落地后这个改写会自动退化为 no-opCLI 不再覆盖
改写后的响应同时带 `bodyRewritten: true``rewriteReason` 和原始 `upstreamBody``{"ok":false,"error":"Todo Note is running in backend-only mode"}`),所以审计 / 排障仍能拿到上游真相;上游 PR 落地后这个特征 body 不再出现,backend-core proxy 和 CLI 兜底改写会自动退化为 no-op。
**`--check-path` 预检(同样针对 todo-note)**:在真正发请求前先校验 path/method 是否命中 CLI 侧 endpoint catalog,命中返回 `ok: true, matched: true, endpoint: {...}`,未命中返回与 rewrite 同源的结构化诊断且**不调用上游**。这能在 1 步内识别 typo、错端口、错 host 等引起的 catch-all 404。命令样例:
@@ -210,7 +210,7 @@ bun scripts/cli.ts microservice proxy todo-note /api/todos --method POST --check
bun scripts/cli.ts microservice proxy code-queue /api/foo --method GET --check-path
```
`--check-path` 与默认 proxy 行为是正交的:默认 proxy 仍然打 upstream 对误导 404 做 rewrite`--check-path` 完全跳过 upstream 调用,只走 CLI 侧 catalog。详见 `scripts/src/microservices.ts``TODO_NOTE_WRITABLE_ENDPOINTS` / `matchTodoNoteEndpoint` / `rewriteTodoNoteMisleadingRouteNotFound` / `runTodoNoteCheckPath`,以及 `scripts/src/e2e.ts``microservice:todo-note-route-diagnostic` 门禁。
`--check-path` 与默认 proxy 行为是正交的:默认 proxy 仍然打 upstream,并由 backend-core proxy 对误导 404 做 rewrite`--check-path` 完全跳过 upstream 调用,只走 CLI 侧 catalog。详见 `src/components/backend-core/src/microservice_proxy.rs` 的 Todo Note route diagnostic、`scripts/src/microservices.ts``TODO_NOTE_WRITABLE_ENDPOINTS` / `matchTodoNoteEndpoint` / `rewriteTodoNoteMisleadingRouteNotFound` / `runTodoNoteCheckPath`,以及 `scripts/src/e2e.ts``microservice:todo-note-route-diagnostic` 门禁。
**复杂 JSON body 优先 `--body-file <path>` 而非 `--body-json '<inline>'`**2026-06-01 摩擦改进验证)。`--body-json` 在 shell 里要把双引号 escape 成 `\"`,遇到 action 对象里有嵌套字段或中英文混排标题几乎必坏;`--body-file` 走文件直读,反引号、反斜杠、中文、嵌套 JSON 都安全,且支持 stdin(`--body-file -`)。推荐做法:先 `cat > /tmp/x.json <<'EOF' ... EOF`heredoc quoted 防 shell 展开),再 `bun scripts/cli.ts microservice proxy todo-note .../actions --method POST --body-file /tmp/x.json`。已交互验证 200 OK 全套 write actionsaddTodo / toggleTodoCompleted / deleteTodo),probe 写入 + 删除完整 lifecycle 通。