[feature] 外部只读 token 可启停 + 接入配置包一键复制 (A-20260902-021 v1.3) #43
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
背景
用户 2026-09-10 反馈外部只读 token(workbuddy 日报/简报拉取)使用体验有三处痛点:
revoke是终态软删(enabled=false),误操作只能重新建 token 并重新分发。缺「重新启用」。影响范围
backend/app/api/v1/external.py(token 管理端点)、backend/app/services/external_service.pyweb/src/views/system/ExternalAccess.vue、web/src/api/externalAccess.jsenabled字段),无 Alembic migration根因判断
非缺陷,是功能缺口:token 生命周期只设计了「生成 → 吊销」两个终态,缺少「暂停/恢复」中间态;且未提供面向调用方的「开箱配置」物料。
处理动作 / 设计要求
POST /api/v1/external/tokens/{id}/enable:把enabled置回 true(幂等),清空revoked_by语义化留痕(保留历史记录,仅恢复状态)GET /api/v1/external/tokens/{id}/setup-package:返回该 token 的接入配置包(Markdown 文本),包含:接口前缀、鉴权头格式、scope 对应端点清单、限频说明、调用示例 curl、提示词模板docs/standards/外部只读数据接入规范.md的结构化摘要(代码常量,不写死在 Vue),按 scope 动态裁剪章节验收标准 / 关闭条件
/api/v1/external/brief(返回 200)enable端点对已启用 token 幂等(重复调用返回 200 且状态不变)Authorization: Bearer <token>+ 至少 1 个 curl 示例 + 提示词模板 + 规范要点,且随 scope 变化enable幂等 /enable对不存在 id 返回 404 / 配置包按 scope 裁剪ruff check app/ tests/与pytest全绿;前端eslint+vitest全绿关联
docs/arch/A-20260902-021-外部工具只读开放平台.md(LOCKED v1.0,本单为其 v1.3 增量)docs/standards/外部只读数据接入规范.md(v1.1)docs/arch/A-20260910-003-外部接入体验与配置包.md实现完成 (2026-09-10)
提交:
fc6bc10(#43 #44 #45 #46 一次性落地)验收证据
审查报告
docs/reports/20260910-接入中心与导航重组-审查报告.md— 0 CRITICAL,建议通过终审。审查中实测发现并修复
node.children→ 菜单整块不渲染(单测全绿但线上白屏)。已补渲染层测试MenuTree.spec.js。db.commit()绕过测试事务回滚 → 二次运行必失败。已改唯一标识 + 自洁。@别名 / jsdom 30 无 localStorage。已补 setup。遗留跟进(建议另开工单)
关闭凭证核验 (2026-09-10)
按
docs/standards/issue-workflow.md§6.2「凭证可追溯」逐条核验本次交付:test_enable_restores_revoked_tokentest_enable_is_idempotenttest_setup_package_scoped_endpoints+ 实跑渲染test_setup_package_has_no_plain_tokentest_ai_model_config_no_api_key_leaktest_ai_prompt_preview_has_no_write_method(405)test_confirm_http_does_not_overwrite_on_failed_verifytest_login_start_returns_501_when_no_displaymenu.spec.jsmenu.spec.js断言菜单 path 均在 routertest_nav_permission_pairing.py10 用例docs/reports/20260910-接入中心与导航重组-审查报告.md提交:
fc6bc10结论: 关闭条件全部满足,关闭本单。