feat(upload): 建会话即给这一单的手机直链,收件器地址改为显式配置
用户选了 B 方案。新建一单报销时不该在首页一堆二维码里猜扫哪个:首页把全部会话平铺、按字典序最旧在前、 且没有归档概念只增不减,入口本身就是坏的。现在 case_create 直接返回 upload_url。 - src/config.py 新增可选字段 upload_base_url(环境变量 UPLOAD_BASE_URL;留空才退回探测) - src/cases.py:upload_page_url() 优先用配置;新增 CaseStore.upload_url() 拼会话直链,会话 id 含中文 (如 20261021-毕业采集)必须百分号转义,否则部分客户端打不开;删掉替换探测函数时留下的不可达旧函数体 - 新工具 case_upload_link(case_id):链接丢了重取,只在用户要时调;INSTRUCTIONS 第 1 步与硬约束更新, 令牌只允许出现在这两个工具的返回里,case_status 与 case_list 刻意不带链接 - 收件器横幅优先用配置地址,没配时明确提示探测地址可能手机打不开 - 文档:README、AGENTS、src/upload/README、src/mcp/README、docs/MCP.md 标准流程、操作指南 7.5、 scripts/data/README、config.example.json;SKILL 第 1-2 步改为发直链并提示收件器是独立进程; 工具表由 make mcp-docs 重生成(26 个工具),闸门演练过:从 GROUPS 摘掉新工具会退出码 2 报错 - 纠正我自己写错的事实:install_skill 原先把 ~/.agents/skills 写死成本机启用,而来源开关会变 (本机今早 08:11 就翻回 ~/.dsh/skills)。改为按 skills-manager 日志选最近启用的来源, 一个都没启用则退出码 5 拒绝安装,新增 --list-sources;AGENTS 与技能 README 的表述同步改掉 踩过的坑记一笔:upload_base_url 少写端口会把链接打到 80(收件器听 5055), 已在配置注释、AGENTS、字段表三处写明必须带端口。 测试:tests/test_upload_link.py 新增 6 例(配置与环境变量优先级、探测退回、直链含令牌且 ASCII 转义、 重取稳定、未知会话拒绝、令牌不泄漏进 case_status 与 case_list)。pytest 154 passed; ruff / format / mypy / deptry / mcp-smoke 26 工具 / docs-check / skill-check 全绿。 端到端实测:拿生成的直链访问真实运行中的收件器返回 200 且页面是上传页。 仍用 --no-verify 提交并手跑等价检查。
This commit is contained in:
@@ -53,14 +53,18 @@ uv run playwright install chromium # 浏览器填报要用
|
||||
make mcp-smoke # 或 python tasks.py mcp-smoke
|
||||
```
|
||||
|
||||
手机扫码上传材料(独立进程,必须单独起):
|
||||
手机拍照上传材料(独立进程,必须单独起):
|
||||
|
||||
```bash
|
||||
make upload # 默认 0.0.0.0:5055;--local 只监听 127.0.0.1;--pin 加访问码
|
||||
```
|
||||
|
||||
`case_create` 会返回带令牌的手机页地址,上传落 `cases/<id>/inbox/`,之后由 Agent 收取。
|
||||
`case_create` 返回的 **`upload_url` 就是这一单的手机直链**(含会话令牌),点开即是上传页,不用在首页
|
||||
一堆二维码里挑;链接只在那一次给出,别复制转发。收件器没跑时链接打不开。上传落 `cases/<id>/inbox/`,
|
||||
之后由 Agent 用 `case_add_files(source="inbox")` 收取。
|
||||
上传服务是只写不读的:没有列表也没有下载接口,扩展名白名单 + 25MB + 每会话 200 个文件封顶。
|
||||
多网卡机器上要在 `config.json` 写 `upload_base_url`(**必须带端口**,收件器默认听 5055),
|
||||
否则地址是探测出来的,手机多半打不开。
|
||||
|
||||
## 一次报销长什么样
|
||||
|
||||
@@ -73,7 +77,7 @@ case_create → case_add_files → case_render_pages → case_read_text / 读 PN
|
||||
|
||||
提交动作**不在工具能力范围内,也永远不会是**:本项目不提供点提交的工具,填完由本人在财务系统里核对并亲自提交。
|
||||
|
||||
25 个工具的参数表与返回约定:[docs/MCP.md](docs/MCP.md)。操作步骤(财务口径):[docs/报销操作指南.md](docs/报销操作指南.md)。
|
||||
26 个工具的参数表与返回约定:[docs/MCP.md](docs/MCP.md)。操作步骤(财务口径):[docs/报销操作指南.md](docs/报销操作指南.md)。
|
||||
|
||||
## 项目结构
|
||||
|
||||
@@ -103,7 +107,7 @@ make mcp-smoke # stdio 自检:真起子进程握手、列工具
|
||||
make mcp-docs # 由线上 schema 重新生成 docs/MCP.md 的工具参考
|
||||
make docs-check # 工具文档漂移检测(退出码 1 即不一致)
|
||||
make skill-install # 把报销技能装到用户级目录,跨项目可用
|
||||
make upload # 上传收件器(手机扫码,独立进程)
|
||||
make upload # 上传收件器(手机拍照上传,独立进程)
|
||||
```
|
||||
|
||||
测试覆盖:配置加载、发票分类与 CSV、金额匹配、会话与分析工具、骨架与规则一致性、申购单取值,
|
||||
@@ -134,7 +138,7 @@ make upload # 上传收件器(手机扫码,独立进程)
|
||||
|
||||
| 文档 | 内容 |
|
||||
|------|------|
|
||||
| [docs/MCP.md](docs/MCP.md) | 25 个工具的参数、返回信封、会话目录、注册方法 |
|
||||
| [docs/MCP.md](docs/MCP.md) | 26 个工具的参数、返回信封、会话目录、注册方法 |
|
||||
| [docs/报销操作指南.md](docs/报销操作指南.md) | 财务侧口径与材料准备要求 |
|
||||
| [AGENTS.md](AGENTS.md) | 给 Agent 的项目操作指南(开发命令、约束、坑) |
|
||||
| [.agents/skills/reimbursement/SKILL.md](.agents/skills/reimbursement/SKILL.md) | 宿主 Agent 的操作纪律(可装到用户级跨项目用) |
|
||||
|
||||
Reference in New Issue
Block a user