> ## Documentation Index
> Fetch the complete documentation index at: https://docs.myrmagent.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# 工件分享与对外交付

> 将 Agent 的任意产出变成只读分享链接——对方零注册即开即看，可选密码保护、TTL 有效期、不可变版本快照与一键撤销。

# 工件分享与对外交付

当 Agent 完成一个网页、报告、PDF 或多文件站点时，Myrm 可以把它变成**只读分享链接**，任何人在浏览器中即可打开——无需账号、无需安装、无需登录。这是「说 → 做 → 看 → 发」交付闭环的最后一环。

## 一键分享链接

从工件卡片点击**分享**，即刻生成公开链接：

* **对方零注册**——链接直接在任意浏览器打开
* **只读设计**——接收方可查看不可编辑；编辑在 Myrm 内部进行
* **可选密码门**——为敏感内容（周报、合同草稿）设置密码保护
* **TTL 自动过期**——链接有效期 1–30 天（可配置），到期自动失效

## 不可变版本快照

分享链接始终锁定到工件的**某个不可变版本**：

* 内容永不漂移——后续编辑工件不会污染已发出的链接
* 每个快照用 SHA-256 指纹，分享内容的字节可被证实
* 物化 bundle 被删除后，下次访问时自动从不可变快照重新物化

## 多文件 Bundle

Myrm 自动把一个页面需要的所有资源收集到单个分享 bundle：

* **HTML + CSS + JavaScript + 图片**按真实引用链发现——不只是入口文件
* **嵌套目录**被保留，子资源可正确解析
* **含单引号 URL 的内联样式**被正确处理
* **lockfile 与构建产物**（`package-lock.json`、`node_modules`）从 bundle 中排除
* **文档与 PDF**即使 vault 对象无文件后缀也能正确输出媒体类型——中文命名文档按 Markdown 渲染，PDF 按 PDF 打开

## 分享生命周期——撤销、状态与审计

工件与对话分享链接**支持随时主动撤销与全生命周期管理**：

* **一键撤销**——撤销后链接**立即**返回 404「Link Revoked」，无宽限期、缓存不可绕过
* **已撤销密码链接**——生命周期校验前置干密码门，已撤销密码链接对新访客直接显示失效页，绝不弹出密码框
* **撤销后的 token 永不复活**——持久化 `share_token_fingerprint` 与 `share_revoked_fingerprints` 集合，撤销过的链接即使重新分享也永久 404
* **防搜索引擎收录**——所有公开分享响应统一携带 `X-Robots-Tag: noindex, nofollow` + `Cache-Control: no-store` + `Referrer-Policy: no-referrer`，已撤销链接无法通过缓存/索引副本访问
* **UI 实时状态**——分享对话框每次打开都展示当前状态（`unshared` / `revoked` / `active` / `password_protected`）、链接地址与剩余有效期；撤销后对话框保持打开显示「已撤回」
* **撤销审计日志**——每次撤销操作均被记录，随时可追溯
* **删除会话级联失效**——删除源会话立即令其分享失效（404「Content Unavailable」）

## 安全设计

| 维度            | 实现                                                                |
| ------------- | ----------------------------------------------------------------- |
| 防篡改           | 无状态 HMAC-SHA256 签名——任何字节改动即失效（404）                                |
| 防遍历           | 物化路径用 `Path.is_relative_to` 强约束；`../` 与 `%2e%2e` 编码全部拦截           |
| 凭证隔离          | 密码解锁 cookie 按 token 指纹命名（SHA-256），并发多密码分享互不串台                     |
| HTTPS 防护      | 解锁 cookie 在 HTTPS 下自动加 `Secure`，外加 `HttpOnly` + `SameSite=Strict` |
| 子资源授权         | 解锁后签发短时签名 cookie，CSS/JS/图片子请求免重复输入密码                              |
| 内容安全          | HTML 响应注入 CSP + `X-Content-Type-Options`；非 HTML 输出精确媒体类型          |
| 过期回收          | 过期链接失败关闭；解锁凭证过期自动回落密码门                                            |
| 畸形负载          | 签名有效但字段类型异常的 token 被防御性拒绝，不崩溃                                     |
| 撤销后 token 防复活 | 持久化 `share_revoked_fingerprints` 集合——撤销过的链接即使重新分享也永久 404          |
| 防收录           | 所有公开分享响应统一 `noindex, nofollow` + `Cache-Control: no-store`        |

## 部署模式

工件分享在三种部署模式下行为一致——分享物从**你自己的沙箱**提供，数据不离开实例：

* **本地 WebUI**——自托管，链接由本机提供
* **Tauri 桌面端**——由桌面实例提供
* **云托管**——由控制平面调度的专属沙箱提供

## 诚实边界

* **只读分享**是有意选择：外部接收方只能查看，协作编辑超出单用户沙箱架构范围
* **撤销是终极手段，非实时协作**——`noindex`/`no-store` 在源头阻止收录，但已被接收方下载保存的副本无法追回
* **密码门是单因子**——用于防止意外泄露，而非企业级访问控制
* **密码链接重新分享需重设密码**——密码不落库（HMAC 派生），撤销后重新分享需设置新密码；这是有意设计，旧密码无法重建旧链接
