{"skill":{"slug":"tencent-agent-storage","displayName":"Tencent Agent Storage","summary":"Cloud file storage, upload, backup, and file management tool for Tencent Agent Storage (专属网盘). Manages the user's personal cloud drive: upload files, list fi...","description":"---\nname: tencent-agent-storage\nversion: 1.0.8\nauthor: shawnmzhang\nlicense: MIT\ndescription: |\n  Cloud file storage, upload, backup, and file management tool for Tencent Agent Storage (专属网盘).\n  Manages the user's personal cloud drive: upload files, list files, download, share links, preview, and backup.\n  MUST trigger when the user mentions ANY of the following concepts:\n  【云盘/网盘相关 — Cloud Drive Access】\n  - \"网盘\", \"云盘\", \"云空间\", \"龙虾盘\", \"龙虾云盘\", \"龙虾网盘\", \"龙虾空间\"\n  - \"专属云盘\", \"专属网盘\", \"专属空间\", \"我的云盘\", \"我的网盘\", \"我的龙虾\"\n  - \"打开网盘\", \"打开云盘\", \"进入网盘\", \"进入云盘\", \"看看云盘\", \"看看网盘\"\n  - \"cloud drive\", \"my drive\", \"open drive\", \"lobster drive\"\n  【文件列表/查看 — File Listing & Browsing】\n  - \"列出文件\", \"有哪些文件\", \"看看文件\", \"文件列表\", \"我的文件\"\n  - \"云盘里有什么\", \"空间里有啥\", \"查看云空间\", \"云空间文件\"\n  - \"list files\", \"show files\", \"my files\", \"what files\", \"browse files\"\n  【上传/备份 — Upload & Backup】\n  - \"上传文件\", \"上传某个文件\", \"确定上传\", \"传到云空间\", \"上传到云空间\"\n  - \"备份到云\", \"备份文件\", \"保存到云\", \"存到网盘\", \"传到网盘\", \"存到云盘\", \"传到云盘\"\n  - \"文件传一下\", \"帮我传个文件\", \"把这个存一下\"\n  - \"upload\", \"backup\", \"save to cloud\", \"back up\"\n  【发送/传输给用户 — Send & Deliver Files】\n  - \"把文件发给我\", \"整理好发我\", \"发到手机\", \"传到手机\"\n  - \"做完了发我一份\", \"弄好了发给我\", \"完成后把文件给我\"\n  - \"导出之后发我\", \"生成完发给我看看\", \"跑完了把结果给我\"\n  - \"send file\", \"send to phone\", \"deliver file\", \"give me the file\"\n  【链接/分享 — Links & Sharing】\n  - \"生成下载链接\", \"做成链接\", \"给我下载链接\"\n  - \"生成个链接发给同事\", \"发到群里\", \"分享文件\", \"分享给别人\", \"发个链接\"\n  - \"download link\", \"share file\", \"share link\", \"generate link\"\n  【文件状态查询 — File Status Check】\n  - \"这个云文件还在吗\", \"之前上传的文件还能下吗\", \"链接过期了能重新生成吗\"\n  - \"is file still there\", \"can I still download\", \"regenerate link\"\n  【文件搜索/检索 — File Search】\n  - \"搜索文件\", \"搜一下\", \"找文件\", \"找一下\", \"查找\", \"检索文件\"\n  - \"搜索云盘\", \"在云盘里搜\", \"帮我找个文件\", \"有没有叫xxx的文件\"\n  - \"search files\", \"find file\", \"search cloud\"\n  【隐式触发 — Implicit Triggers】\n  - When a task produces output files (reports, exports, generated content) that need to be delivered to the user\n  - When the user's intent implies needing a file on another device, even without explicitly saying \"upload\"\n  - When MyClaw/agent needs to upload files to generate download links\n  - Any mention of file transfer, cloud storage, or personal file space in the conversation context\nmetadata: {}\n---\n\n# Tencent Agent Storage (云文件上传备份工具)\n\n将本地文件上传至 Tencent Agent Storage，自动生成下载链接和图片预览。上传的文件存储在用户独有的云盘空间中，支持跨端访问——无论是手机、电脑还是平板，用户都可以随时随地查看和下载自己的文件。\n\n## When to Use\n\nAgent **MUST** activate this skill when any of the following conditions are met:\n\n- User mentions cloud drive keywords: 网盘、云盘、云空间、龙虾盘、专属网盘、cloud drive, my drive\n- User requests file listing or browsing: 列出文件、有哪些文件、list files, show files\n- User requests upload or backup: 上传文件、备份到云、存到网盘、upload, backup, save to cloud\n- User asks to send/deliver files: 把文件发给我、发到手机、send file, deliver file\n- User requests links or sharing: 生成下载链接、分享文件、download link, share link\n- User queries file status: 这个云文件还在吗、链接过期了、is file still there\n- User requests file search: 搜索文件、找文件、检索文件、搜索云盘、search files, find file\n- **Implicit**: A task produces output files that need to be delivered to the user, or the user's intent implies needing a file on another device\n\n## Quick Reference\n\n| Command | Usage | Description |\n|---------|-------|-------------|\n| `upload` | `node scripts/agent-storage.js upload '<json>'` | Upload local file to cloud, returns download link |\n| `uploadDir` | `node scripts/agent-storage.js uploadDir '<json>'` | Upload entire folder to cloud, preserving directory structure |\n| `info` | `node scripts/agent-storage.js info '<json>'` | Get file info and regenerate download link |\n| `list` | `node scripts/agent-storage.js list '<json>'` | List files in a cloud directory |\n| `search` | `node scripts/agent-storage.js search '<json>'` | Search files by name |\n| `mkdir` | `node scripts/agent-storage.js mkdir '<json>'` | Create a directory in cloud storage |\n\n## Setup\n\n### Prerequisites\n\n此 skill 需要 **Node.js ≥ 14** 和 **npm**。Agent 在首次执行前**必须检测运行环境**：\n\n```bash\nnode --version   # 期望输出 v14.x 或更高\nnpm --version\n```\n\n如果 `node` 命令不存在或版本低于 14，直接安装：\n\n根据用户系统自动选择安装方式：\n\n```bash\n# macOS (Homebrew)\nbrew install node\n\n# macOS (无 Homebrew)\ncurl -o node.pkg \"https://nodejs.org/dist/v20.18.0/node-v20.18.0.pkg\" && sudo installer -pkg node.pkg -target / && rm node.pkg\n\n# Linux (Debian/Ubuntu)\ncurl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - && sudo apt-get install -y nodejs\n\n# Linux (其他发行版 / 通用)\ncurl -fsSL https://nodejs.org/dist/v20.18.0/node-v20.18.0-linux-x64.tar.xz | sudo tar -xJ -C /usr/local --strip-components=1\n\n# Windows (PowerShell, 管理员)\nwinget install OpenJS.NodeJS.LTS\n\n# Windows (无 winget)\n# 下载安装包: https://nodejs.org/dist/v20.18.0/node-v20.18.0-x64.msi 并运行\n\n# 跨平台 (已有 nvm)\nnvm install --lts\n```\n\n此 skill 还依赖 `smh-node-sdk` npm 包（**要求 ^1.0.8**）。**必须在使用前完成安装**（二选一）：\n\n```bash\n# 方式一：全局安装（推荐）\nnpm install -g smh-node-sdk@^1.0.8\n\n# 方式二：本地安装到项目目录\nnpm install smh-node-sdk@^1.0.8\n```\n\n> 脚本会按以下顺序查找 SDK：当前项目 node_modules → 全局 node_modules。如果未找到，脚本会报错并提示安装命令。\n\n### About the upload script\n\n此 skill 的运行脚本位于 `scripts/agent-storage.js`。Agent 直接通过 `node scripts/agent-storage.js <command> '<json>'` 调用，**无需额外写入临时文件**。脚本源码可在 `scripts/` 目录中审阅。\n\n### Credential configuration\n\n凭证从以下配置文件中自动加载（优先级从高到低）。\n\n> **安全说明**：脚本仅读取配置文件中 `smh_` 前缀的环境变量（`smh_libraryId`、`smh_accessToken` 等），不会访问配置文件中的其他字段或敏感信息。\n\n> **关于 token 权限**：Tencent Agent Storage 的文件上传和下载链接生成 API 要求 `space_admin` 级别的 accessToken，这是 Tencent Agent Storage 服务端对文件写入操作的最低权限要求。\n\n**模式一：直接凭证（accessToken）**\n\n凭证文件查找顺序（先找到者优先）：\n\n1. **通用配置** — `~/.tencentAgentStorage/.env`\n2. **OpenClaw** — `~/.openclaw/openclaw.json` 的 `env` 字段\n3. **Hermes** — `~/.hermes/.env`\n\n**通用配置（推荐）** — 在 `~/.tencentAgentStorage/.env` 中配置：\n\n```env\n# ~/.tencentAgentStorage/.env\nsmh_basePath=https://api.tencentsmh.cn\nsmh_libraryId=smhxxx-xxxxx\nsmh_spaceId=space-xxxxx\nsmh_accessToken=<your-access-token>\n```\n\n**OpenClaw** — 在 `~/.openclaw/openclaw.json` 的 `env` 字段中配置：\n\n```json\n{\n  \"env\": {\n    \"smh_basePath\": \"https://api.tencentsmh.cn\",\n    \"smh_libraryId\": \"smhxxx-xxxxx\",\n    \"smh_spaceId\": \"space-xxxxx\",\n    \"smh_accessToken\": \"<your-access-token>\"\n  }\n}\n```\n\n**Hermes** — 在 `~/.hermes/.env` 中配置：\n\n```env\nsmh_basePath=https://api.tencentsmh.cn\nsmh_libraryId=smhxxx-xxxxx\nsmh_spaceId=space-xxxxx\nsmh_accessToken=<your-access-token>\n```\n\n\n---\n\n## Procedure\n\nAgent uses this skill in any scenario that requires uploading files to the cloud.\n\n### Complete flow\n\n```\nUser triggers file upload\n  → Step 1: Identify the local file path(s)\n  → Step 2: Run upload script (loop for batch)\n  → Step 3: Extract downloadUrl from JSON output (signed COS URL)\n  → Step 4: Deliver the download link with execution notice\n```\n\n> **IMPORTANT**: 默认使用 `conflictStrategy: \"rename\"` 上传。当云端已存在同名文件时，脚本会自动重命名（如 `file(1).pdf`），确保上传始终成功并返回正确的下载链接。**只有用户明确说了 \"覆盖\"/\"替换\" 时，才使用 `conflictStrategy: \"overwrite\"`；用户明确要求先确认时，才使用 `conflictStrategy: \"ask\"`。**\n\n### Step 2: Upload\n\n**Single file (默认):**\n\n```bash\nnode scripts/agent-storage.js upload '{\"localPath\":\"/path/to/file.pdf\",\"conflictStrategy\":\"rename\"}'\n```\n\n**Upload to specific directory:**\n\n```bash\nnode scripts/agent-storage.js upload '{\"localPath\":\"/path/to/photo.jpg\",\"remotePath\":\"photos/photo.jpg\",\"conflictStrategy\":\"rename\"}'\n```\n\n**User explicitly requested overwrite:**\n\n```bash\nnode scripts/agent-storage.js upload '{\"localPath\":\"/path/to/report.pdf\",\"conflictStrategy\":\"overwrite\"}'\n```\n\n**Batch upload:**\n\n```bash\nnode scripts/agent-storage.js upload '{\"localPath\":\"/path/to/file1.pdf\",\"conflictStrategy\":\"rename\"}'\nnode scripts/agent-storage.js upload '{\"localPath\":\"/path/to/file2.docx\",\"conflictStrategy\":\"rename\"}'\n```\n\n#### Conflict handling\n\nWhen using `conflictStrategy: \"rename\"` (默认), if a same-name file already exists, the script automatically renames the file (e.g. `file(1).pdf`) and completes the upload, ensuring a valid download link is always returned.\n\nWhen using `conflictStrategy: \"ask\"`, if a same-name file already exists, the script returns `{\"success\":false,\"conflict\":true}`. Agent must then ask the user:\n\n> 云端已存在同名文件 `{filename}`，你想怎么处理？\n>\n> 1. 🔄 覆盖 — 替换云端文件\n> 2. 📝 重命名 — 自动改名上传（如 file(1).pdf）\n> 3. ❌ 取消 — 不上传\n\n**三种策略对照：**\n\n| Strategy | Behavior | When to use |\n|----------|----------|-------------|\n| `rename` (**默认**) | 同名文件存在时自动重命名，确保上传成功并返回正确链接 | 大多数场景，需要保证用户拿到下载链接 |\n| `overwrite` | 直接覆盖已有文件 | 用户明确说 \"覆盖\", \"替换\", \"更新文件\" |\n| `ask` | 同名文件存在时返回错误，Agent 询问用户 | 用户明确要求先确认时 |\n\n### Step 4: Deliver link + execution notice\n\nAfter every successful upload, include this notice alongside the download link(s):\n\n> 链接已生成，链接有效期 2 小时，可直接在浏览器或手机中打开。\n\n**链接输出规则（MUST）：**\n1. **必须使用带 COS 签名的直链**（`downloadUrl` 字段），域名为 `*.tencentsmhuc.cn`，参数含 `q-sign-algorithm` 和 `q-signature`\n2. **禁止输出含 `accessToken` 的中转链接**（如 `https://api.tencentsmh.cn/...?access_token=...`），这会泄露凭证\n3. **链接必须完整输出，禁止任何形式的截断、省略或缩写**——不能用 `...`、`<省略>` 等替代任何部分。签名链接通常很长，这是正常的\n\n**Single file example:**\n\n> 链接已生成，链接有效期 2 小时，可直接在浏览器或手机中打开。\n>\n> 已上传文件: report.pdf  大小: (2.3 MB)\n> 下载链接: {脚本返回的完整 downloadUrl，原样输出，不得截断}\n\n**Batch example:**\n\n> 链接已生成，链接有效期 2 小时，可直接在浏览器或手机中打开。\n>\n> 📎 report.pdf (2.3 MB) — {完整 downloadUrl}\n> 📎 photo.jpg (1.1 MB) — {完整 downloadUrl}\n\n---\n\n## File Size Support\n\n**There is NO file size limit.** The upload script supports files of any size, including multi-GB videos.\n\n- **Small files (≤ 50 MB)**: Single-part upload.\n- **Large files (> 50 MB)**: Multipart upload — the file is read in 5 MB chunks, never loaded entirely into memory.\n\n---\n\n## Commands\n\n所有命令输出 JSON 到 stdout。\n\n### upload\n\n```bash\nnode scripts/agent-storage.js upload '<json>'\n```\n\n**JSON 参数：**\n- `localPath`（必填）：本地文件绝对路径，支持 `~` 展开\n- `remotePath`（可选）：云端目标路径，省略则上传到根目录并保留原文件名\n- `conflictStrategy`（可选）：`rename`（默认）| `ask` | `overwrite`\n- `purpose`（可选）：`download`（默认，链接点击触发下载）| `preview`（链接在浏览器内预览）\n- `expireHours`（可选）：链接有效期，单位为小时，默认 `2`（即 2 小时）\n\n**Output:**\n\n```json\n{\n  \"success\": true,\n  \"upload\": {\n    \"localFile\": \"/path/to/photo.jpg\",\n    \"remotePath\": \"photo.jpg\",\n    \"fileSize\": 2048576,\n    \"fileSizeHuman\": \"2.0 MB\",\n    \"uploadTime\": \"3.2s\",\n    \"rapidUpload\": false\n  },\n  \"downloadUrl\": \"https://smhxxxxx.gz-c1.smhshare.com/s/xxxxxxxxxx\"\n}\n```\n\n### uploadDir\n\n```bash\nnode scripts/agent-storage.js uploadDir '<json>'\n```\n\n**JSON 参数：**\n- `localPath`（必填）：本地文件夹绝对路径，支持 `~` 展开\n- `remotePath`（可选）：云端目标目录路径，省略则使用本地文件夹名称\n- `conflictStrategy`（可选）：`rename`（默认）| `overwrite`\n\n**说明：**\n- 递归上传整个文件夹，自动保留目录结构\n- 会先在云端创建对应的目录层级，再逐个上传文件\n- 文件按顺序上传（不并行），避免 API 过载\n\n**Output:**\n\n```json\n{\n  \"success\": true,\n  \"uploadDir\": {\n    \"localPath\": \"/path/to/my-folder\",\n    \"remotePath\": \"my-folder\",\n    \"totalFiles\": 5,\n    \"successCount\": 5,\n    \"failCount\": 0,\n    \"totalSize\": 10485760,\n    \"totalSizeHuman\": \"10.0 MB\",\n    \"uploadTime\": \"8.5s\"\n  },\n  \"files\": [\n    { \"file\": \"doc.pdf\", \"size\": 2048576, \"sizeHuman\": \"2.0 MB\", \"success\": true },\n    { \"file\": \"images/photo.jpg\", \"size\": 1048576, \"sizeHuman\": \"1.0 MB\", \"success\": true }\n  ]\n}\n```\n\n### info\n\n```bash\nnode scripts/agent-storage.js info '<json>'\n```\n\n**JSON 参数：**\n- `remotePath`（必填）：云端文件路径\n- `purpose`（可选）：`download`（默认，链接点击触发下载）| `preview`（链接在浏览器内预览）\n- `expireHours`（可选）：链接有效期，单位为小时，默认 `2`（即 2 小时）\n- `basePath` / `libraryId` / `spaceId` / `accessToken`（可选）：直接传参模式凭证\n\n**Output:**\n\n```json\n{\n  \"success\": true,\n  \"remotePath\": \"report.pdf\",\n  \"downloadUrl\": \"https://smhxxxxx.gz-c1.smhshare.com/s/xxxxxxxxxx\",\n  \"fileInfo\": {\n    \"name\": \"report.pdf\",\n    \"size\": 2048576,\n    \"type\": \"application/pdf\",\n    \"creationTime\": \"2026-03-13T10:00:00Z\",\n    \"modificationTime\": \"2026-03-13T10:00:00Z\"\n  }\n}\n```\n\n### list\n\n```bash\nnode scripts/agent-storage.js list '<json>'\n```\n\n**JSON 参数：**\n- `dirPath`（可选）：目录路径，默认 `/`\n- `limit`（可选）：最大返回数量，默认 50\n\n### search\n\n```bash\nnode scripts/agent-storage.js search '<json>'\n```\n\n**JSON 参数：**\n- `keywords`（必填）：搜索关键字，字符串或字符串数组（数组元素间为\"或\"关系）\n- `scope`（可选）：搜索范围目录路径，如 `photos`；不填则搜索整个空间\n- `limit`（可选）：最大返回数量，默认 20，取值范围 [1, 100]\n- `marker`（可选）：分页标识，用于获取后续页\n- `inExtnames`（可选）：限定文件后缀，字符串或字符串数组，如 `[\"pdf\",\"docx\"]`\n- `excludeExtnames`（可选）：排除文件后缀，字符串或字符串数组\n- `fileTypes`（可选）：文件类型过滤，取值 `all` | `dir` | `file` | `symlink`\n\n> **注意**：搜索仅支持按文件名匹配（`type: \"filename\"`），不支持全文内容检索。\n\n**Output:**\n\n```json\n{\n  \"success\": true,\n  \"keywords\": [\"报告\"],\n  \"type\": \"filename\",\n  \"total\": 3,\n  \"nextMarker\": null,\n  \"results\": [\n    {\n      \"name\": \"周报告.pdf\",\n      \"type\": \"file\",\n      \"size\": 2048576,\n      \"sizeHuman\": \"2.0 MB\",\n      \"contentType\": \"application/pdf\",\n      \"creationTime\": \"2026-03-13T10:00:00Z\",\n      \"modificationTime\": \"2026-03-13T10:00:00Z\",\n      \"text\": null,\n      \"textPage\": null,\n    }\n  ]\n}\n```\n\n### mkdir\n\n```bash\nnode scripts/agent-storage.js mkdir '<json>'\n```\n\n**JSON 参数：**\n- `dirPath`（必填）：要创建的文件夹路径，如 `photos` 或 `docs/2026`\n- `conflictStrategy`（可选）：`rename`（默认）| `ask` | `overwrite`\n\n**Output:**\n\n```json\n{\n  \"success\": true,\n  \"dirPath\": \"photos\",\n  \"message\": \"文件夹 \\\"photos\\\" 创建成功\"\n}\n```\n\n---\n\n## Full Example\n\n```bash\n# Step 0: 安装 smh-node-sdk（首次使用前执行一次）\nnpm install -g smh-node-sdk@^1.0.8\n\n# Step 1: 上传文件\nnode scripts/agent-storage.js upload '{\"localPath\":\"/path/to/report.pdf\",\"conflictStrategy\":\"rename\"}'\n\n# Step 2: 查询文件信息\nnode scripts/agent-storage.js info '{\"remotePath\":\"report.pdf\"}'\n\n# Step 3: 列出云端文件\nnode scripts/agent-storage.js list '{\"dirPath\":\"/\",\"limit\":20}'\n\n# Step 4: 搜索文件（按文件名）\nnode scripts/agent-storage.js search '{\"keywords\":\"report\"}'\n\n# Step 5: 上传整个文件夹\nnode scripts/agent-storage.js uploadDir '{\"localPath\":\"/path/to/my-folder\",\"conflictStrategy\":\"rename\"}'\n\n# Step 6: 创建文件夹\nnode scripts/agent-storage.js mkdir '{\"dirPath\":\"photos\"}'\n```\n\n---\n\n## Pitfalls\n\n### Error handling\n\n所有命令输出 JSON 到 stdout。错误也以 JSON 返回：`{\"success\": false, \"error\": \"...\"}`\n\n| 错误 | 处理方式 |\n|------|---------|\n| 上传失败（`success: false`） | 告诉用户：\"文件上传失败：{具体原因}。你可以稍后再试，或者检查网络连接。\" |\n| 同名冲突（`conflict: true`） | 询问用户选择覆盖、重命名或取消 |\n| 文件不存在 | 让用户确认路径 |\n| 网络错误 | 重试 2 次，间隔 3s；仍失败告知用户 |\n| 配置缺失 | 提示用户在 `~/.tencentAgentStorage/.env`、`~/.openclaw/openclaw.json` 的 `env` 字段或 `~/.hermes/.env` 中添加 `smh_*` 配置 |\n\n**上传失败对话模板**（当 `success: false` 时必须使用）：\n\n> ❌ 文件上传失败：{error 中的具体原因}。\n>\n> 你可以：\n> 1. 🔄 重试 — 重新上传这个文件\n> 2. ❌ 取消 — 暂时不上传\n\n### Prohibited actions\n\n- **NEVER** 在 `success: false` 时展示下载链接\n- **NEVER** 在上传失败时不告知用户，必须明确提示\"文件上传失败\"及原因\n- **NEVER** 硬编码或暴露 SMH 凭证给用户\n- **NEVER** 未经用户主动要求就上传其本地个人文件\n- **NEVER** 跳过执行通知：\"链接已生成，有效期 2 小时，可直接在浏览器或手机中打开\"\n- **NEVER** 在用户未明确要求覆盖时使用 `conflictStrategy: \"overwrite\"`\n- **NEVER** 把含 `accessToken` 的中转链接（如 `https://api.tencentsmh.cn/...?access_token=...`）发给用户。返回给用户的**必须是带 COS 签名的直链**（域名为 `*.tencentsmhuc.cn`，参数含 `q-sign-algorithm` 和 `q-signature`），即脚本输出的 `downloadUrl` 字段\n- **NEVER** 截断、省略或用 `...` 缩写链接。发给用户的下载链接/预览链接**必须是脚本返回的完整 URL**，一个字符都不能少。链接通常很长（含签名参数），这是正常的，**必须原样完整输出**\n\n### Common mistakes\n\n- 用户说\"上传文件\"但没指定路径 → 追问：\"你要上传哪个文件？告诉我文件路径或文件名就行。\"\n- 用户说\"确定上传 xxx\"或\"把 xxx 发给我\" → 直接执行上传（`conflictStrategy: \"rename\"`）\n- **同名文件冲突**：默认使用 `conflictStrategy: \"rename\"`，自动重命名保证上传成功。只有用户明确要求覆盖时才用 `overwrite`，用户明确要求先确认时才用 `ask`\n- 文件默认上传到云空间根目录，用户可通过 `remotePath` 参数指定目标路径\n- 下载链接为通过 SDK `infoFile({ purpose: 'download' })` 获取的带签名 COS 直链（`https://bucket-xxxxx.tencentsmhuc.cn/...?q-sign-algorithm=sha1&q-signature=...`），可直接在浏览器或手机中打开预览/下载，**有效期约 2 小时**。**必须原样完整输出此链接，禁止截断或省略任何部分**\n- 批量上传按顺序处理（不并行），避免 API 过载\n- **执行通知**：每次上传完成后必须告知用户：\"链接已生成，有效期 2 小时，可直接在浏览器或手机中打开\"\n\n---\n\n## Verification\n\nUpload was successful when ALL of the following are true:\n\n1. Script output contains `\"success\": true`\n2. `downloadUrl` field is present and non-empty\n3. Agent delivered the download link to the user with the execution notice: \"链接已生成，有效期 2 小时，可直接在浏览器或手机中打开\"\n\nTo verify a previously uploaded file still exists:\n\n```bash\nnode scripts/agent-storage.js info '{\"remotePath\":\"<filename>\"}'\n```\n\nIf the response contains `\"success\": true`, the file is accessible and a fresh download link is returned.\n","topics":["Backup","备份"],"tags":{"latest":"1.0.16"},"stats":{"comments":0,"downloads":1834,"installsAllTime":62,"installsCurrent":2,"stars":0,"versions":15},"createdAt":1775725366715,"updatedAt":1780026125915},"latestVersion":{"version":"1.0.16","createdAt":1780026125915,"changelog":"tencent-agent-storage v1.0.16\n\n- Version bump only; no file or documentation changes detected.\n- No functional updates or new features in this release.","license":"MIT-0"},"metadata":{"setup":[],"os":null,"systems":null},"owner":{"handle":"shawnminh","userId":"s171w85g35e7s5w8bqgg9sqged83g9yb","displayName":"ShawnmZhang","image":"https://avatars.githubusercontent.com/u/31064728?v=4"},"moderation":{"isSuspicious":false,"isMalwareBlocked":false,"verdict":"clean","reasonCodes":["review.llm_review"],"summary":"Review: review.llm_review","engineVersion":"v2.4.24","updatedAt":1780030739275}}