{"id":"6a383e0d-daf7-4261-8b8c-a775472698ba","entityType":"agent","slug":"clawhub-langhuachuanshi-aliyun-oss-skill","name":"aliyun-oss","canonicalUrl":"https://www.xpersona.co/agent/clawhub-langhuachuanshi-aliyun-oss-skill","canonicalPath":"/agent/clawhub-langhuachuanshi-aliyun-oss-skill","generatedAt":"2026-10-10T21:55:12.604Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-10T16:46:00.802Z","emptyReason":null},"description":"阿里云 OSS 对象存储技能。支持文件上传、下载、列出、删除、获取 URL 等操作。 两层架构：Node.js SDK（优先）→ ossutil CLI。 Skill: aliyun-oss Owner: langhuachuanshi Summary: 阿里云 OSS 对象存储技能。支持文件上传、下载、列出、删除、获取 URL 等操作。 两层架构：Node.js SDK（优先）→ ossutil CLI。 Tags: aliyun:1.0.2, cloud:1.0.2, latest:1.0.2, oss:1.0.2, storage:1.0.2 Version history: v1.0.2 | 2026-03-06T17:10:56.423Z | auto - No file changes detected in this release. - Documentation (SKILL.md) remains unchanged from the previous version. - No new features, bug fixes, or updates inclu","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.3K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s172yjpf05bfj3wjfrwx88v8sx83hf31:aliyun-oss-skill","sourceUrl":"https://clawhub.ai/langhuachuanshi/aliyun-oss-skill","homepage":"https://clawhub.ai/langhuachuanshi/skills/aliyun-oss-skill","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/langhuachuanshi/aliyun-oss-skill","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/langhuachuanshi/skills/aliyun-oss-skill","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":63,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"阿里云 OSS 对象存储技能。支持文件上传、下载、列出、删除、获取 URL 等操作。 两层架构：Node.js SDK（优先）→ ossutil CLI。 Skill: aliyun-oss Owner: langhuachuanshi Summary: 阿里云 OSS 对象存储技能。支持文件上传、下载、列出、删除、获"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T16:46:00.802Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T16:46:00.802Z","emptyReason":null},"stars":null,"forks":null,"downloads":1333,"packageName":null,"latestVersion":"1.0.2","tractionLabel":"1.3K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T16:46:00.802Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T16:46:00.802Z","lastCrawledAt":"2026-10-10T16:46:00.802Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T16:46:00.802Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.2","createdAt":"2026-03-06T17:10:56.423Z","changelog":"- No file changes detected in this release. - Documentation (SKILL.md) remains unchanged from the previous version. - No new features, bug fixes, or updates included in version 1.0.2.","fileCount":9,"zipByteSize":12847},{"version":"1.0.1","createdAt":"2026-03-06T16:06:15.381Z","changelog":"Version 1.0.1 - Added _meta.json and package.json files for metadata and dependency management. - Major rewrite of documentation: SKILL.md and README.md now focus on a simplified two-layer architecture (Node.js SDK first, ossutil CLI fallback). - Updated usage guides, API commands, and troubleshooting steps for improved clarity and quick onboarding. - Metadata block now clearly lists required binaries/packages and install steps. - Removed redundant or highly detailed steps, focusing on a streamlined setup and usage workflow.","fileCount":8,"zipByteSize":11553},{"version":"1.0.0","createdAt":"2026-03-01T23:51:08.368Z","changelog":"Initial release - Node.js SDK + ossutil two-tier fallback strategy, complete documentation and examples","fileCount":7,"zipByteSize":14213}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s172yjpf05bfj3wjfrwx88v8sx83hf31:aliyun-oss-skill","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-langhuachuanshi-aliyun-oss-skill/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-langhuachuanshi-aliyun-oss-skill/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-langhuachuanshi-aliyun-oss-skill/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-langhuachuanshi-aliyun-oss-skill/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-langhuachuanshi-aliyun-oss-skill/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-langhuachuanshi-aliyun-oss-skill/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T21:55:12.603Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-langhuachuanshi-aliyun-oss-skill/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-langhuachuanshi-aliyun-oss-skill/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-langhuachuanshi-aliyun-oss-skill/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-langhuachuanshi-aliyun-oss-skill/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-10T16:46:00.802Z","emptyReason":null},"readme":"Skill: aliyun-oss\n\nOwner: langhuachuanshi\n\nSummary: 阿里云 OSS 对象存储技能。支持文件上传、下载、列出、删除、获取 URL 等操作。 两层架构：Node.js SDK（优先）→ ossutil CLI。\n\nTags: aliyun:1.0.2, cloud:1.0.2, latest:1.0.2, oss:1.0.2, storage:1.0.2\n\nVersion history:\n\nv1.0.2 | 2026-03-06T17:10:56.423Z | auto\n\n- No file changes detected in this release.\n- Documentation (SKILL.md) remains unchanged from the previous version.\n- No new features, bug fixes, or updates included in version 1.0.2.\n\nv1.0.1 | 2026-03-06T16:06:15.381Z | auto\n\nVersion 1.0.1\n\n- Added _meta.json and package.json files for metadata and dependency management.\n- Major rewrite of documentation: SKILL.md and README.md now focus on a simplified two-layer architecture (Node.js SDK first, ossutil CLI fallback).\n- Updated usage guides, API commands, and troubleshooting steps for improved clarity and quick onboarding.\n- Metadata block now clearly lists required binaries/packages and install steps.\n- Removed redundant or highly detailed steps, focusing on a streamlined setup and usage workflow.\n\nv1.0.0 | 2026-03-01T23:51:08.368Z | user\n\nInitial release - Node.js SDK + ossutil two-tier fallback strategy, complete documentation and examples\n\nArchive index:\n\nArchive v1.0.2: 9 files, 12847 bytes\n\nFiles: _meta.json (135b), config/oss-config.example.json (340b), docs/EXAMPLES.md (5418b), package.json (438b), README.md (1093b), scripts/oss_node.mjs (10917b), scripts/setup.sh (8328b), skill-card.md (2383b), SKILL.md (3365b)\n\nFile v1.0.2:SKILL.md\n\n---\nname: aliyun-oss\ndescription: |\n  阿里云 OSS 对象存储技能。支持文件上传、下载、列出、删除、获取 URL 等操作。\n  两层架构：Node.js SDK（优先）→ ossutil CLI。\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"☁️\",\n        \"requires\": { \"bins\": [\"node\"], \"packages\": [\"ali-oss\"] },\n        \"install\":\n          [\n            { \"id\": \"ali-oss-sdk\", \"kind\": \"node\", \"package\": \"ali-oss\", \"label\": \"Install ali-oss Node.js SDK\" },\n          ],\n      },\n  }\n---\n\n# ☁️ 阿里云 OSS 技能\n\n通过 **Node.js SDK** / **ossutil CLI** 管理阿里云对象存储。\n\n---\n\n## 🎯 执行策略（两层降级）\n\n| 优先级 | 工具 | 使用场景 |\n|--------|------|----------|\n| **1** | Node.js SDK (`ali-oss`) | 优先使用 |\n| **2** | ossutil CLI | 备选 |\n\n---\n\n## 🚀 快速开始\n\n### 1. 安装依赖\n\n```bash\n# 进入技能目录\ncd ~/.openclaw/workspace/skills/aliyun-oss-skill\n\n# 运行自动安装\nbash scripts/setup.sh\n```\n\n### 2. 配置凭证\n\n```bash\nbash scripts/setup.sh \\\n  --access-key-id \"YOUR_ACCESS_KEY_ID\" \\\n  --access-key-secret \"YOUR_ACCESS_KEY_SECRET\" \\\n  --region \"oss-cn-hangzhou\" \\\n  --bucket \"mybucket\"\n```\n\n### 3. 测试连接\n\n```bash\nnode scripts/oss_node.mjs test-connection\n```\n\n---\n\n## 📋 使用示例\n\n### 上传文件\n\n```bash\nnode scripts/oss_node.mjs upload \\\n  --local \"/path/to/file.txt\" \\\n  --key \"uploads/file.txt\"\n```\n\n### 列出文件\n\n```bash\nnode scripts/oss_node.mjs list --prefix \"uploads/\" --limit 100\n```\n\n### 下载文件\n\n```bash\nnode scripts/oss_node.mjs download \\\n  --key \"uploads/file.txt\" \\\n  --local \"/path/to/save.txt\"\n```\n\n### 删除文件\n\n```bash\nnode scripts/oss_node.mjs delete --key \"uploads/file.txt\" --force\n```\n\n### 获取文件 URL\n\n```bash\n# 公开空间\nnode scripts/oss_node.mjs url --key \"uploads/file.txt\"\n\n# 私有空间（1小时有效）\nnode scripts/oss_node.mjs url --key \"uploads/file.txt\" --private --expires 3600\n```\n\n---\n\n## 🔧 Node.js SDK API\n\n| 命令 | 说明 |\n|------|------|\n| `upload --local <path> --key <key>` | 上传文件 |\n| `download --key <key> --local <path>` | 下载文件 |\n| `list [--prefix <p>] [--limit <n>]` | 列出文件 |\n| `delete --key <key> [--force]` | 删除文件 |\n| `url --key <key> [--private] [--expires <s>]` | 获取 URL |\n| `stat --key <key>` | 文件信息 |\n| `move --src-key <a> --dest-key <b>` | 移动文件 |\n| `copy --src-key <a> --dest-key <b>` | 复制文件 |\n| `test-connection` | 测试连接 |\n\n---\n\n## ⚙️ 配置文件\n\n**config/oss-config.json**\n\n```json\n{\n  \"accessKeyId\": \"YOUR_ACCESS_KEY_ID\",\n  \"accessKeySecret\": \"YOUR_ACCESS_KEY_SECRET\",\n  \"bucket\": \"mybucket\",\n  \"region\": \"oss-cn-hangzhou\",\n  \"domain\": \"https://cdn.example.com\"\n}\n```\n\n**常用区域**：\n- `oss-cn-hangzhou` - 华东1（杭州）\n- `oss-cn-shanghai` - 华东2（上海）\n- `oss-cn-beijing` - 华北2（北京）\n- `oss-cn-shenzhen` - 华南1（深圳）\n\n---\n\n## 🐛 故障排查\n\n| 问题 | 解决 |\n|------|------|\n| `Cannot find module 'ali-oss'` | `npm install ali-oss` |\n| `403 Forbidden` | 检查 AccessKey 权限 |\n| `连接超时` | 检查区域代码和网络 |\n\n---\n\n## 📚 相关链接\n\n- [阿里云 OSS Node.js SDK](https://help.aliyun.com/document_detail/32068.html)\n- [ossutil 工具](https://help.aliyun.com/document_detail/120075.html)\n\n---\n\n## 📄 许可证\n\nMIT License\n\nFile v1.0.2:README.md\n\n# ☁️ 阿里云 OSS 技能\n\nOpenClaw 技能，用于管理阿里云对象存储（OSS）。\n\n## ✨ 功能\n\n- 📤 上传文件\n- 📥 下载文件\n- 📋 列出文件\n- 🗑️ 删除文件\n- 🔗 获取文件 URL（支持私有空间签名）\n- 📊 查看文件信息\n- 📁 移动/复制文件\n\n## 🚀 快速开始\n\n```bash\n# 安装依赖\nnpm install\n\n# 配置凭证\nbash scripts/setup.sh --access-key-id \"xxx\" --access-key-secret \"xxx\" --region \"oss-cn-hangzhou\" --bucket \"mybucket\"\n\n# 测试连接\nnode scripts/oss_node.mjs test-connection\n```\n\n## 📖 使用示例\n\n```bash\n# 上传\nnode scripts/oss_node.mjs upload --local file.txt --key uploads/file.txt\n\n# 列出\nnode scripts/oss_node.mjs list --prefix uploads/\n\n# 下载\nnode scripts/oss_node.mjs download --key uploads/file.txt --local file.txt\n\n# 删除\nnode scripts/oss_node.mjs delete --key uploads/file.txt --force\n\n# 获取 URL\nnode scripts/oss_node.mjs url --key uploads/file.txt\n```\n\n## 🔧 架构\n\n两层降级策略：\n1. **Node.js SDK** (`ali-oss`) - 优先使用\n2. **ossutil CLI** - 备选\n\n## 📄 许可证\n\nMIT\n\nFile v1.0.2:_meta.json\n\n{\n  \"ownerId\": \"kn78r3ca13npsxrn5f905res8n821ssm\",\n  \"slug\": \"aliyun-oss-skill\",\n  \"version\": \"1.0.2\",\n  \"publishedAt\": 1772817056423\n}\n\nFile v1.0.2:docs/EXAMPLES.md\n\n# 阿里云 OSS 技能 - 使用示例\n\n本文档包含阿里云 OSS 技能的各种使用示例。\n\n---\n\n## 📤 示例1：上传文件\n\n### 在 OpenClaw 中\n\n**用户说：**\n```\n帮我上传 /backups/daily-20260301.tar.gz 到阿里云 OSS\n```\n\n**AI 执行：**\n```\n使用 Node.js SDK 脚本上传\n```\n\n**返回：**\n```\n✅ 上传成功！\n\n文件：daily-20260301.tar.gz\n大小：15.2 MB\nURL：https://bucket.oss-cn-hangzhou.aliyuncs.com/backups/daily-20260301.tar.gz\n```\n\n### 命令行方式\n\n```bash\nnode scripts/oss_node.mjs upload \\\n  --local /backups/daily-20260301.tar.gz \\\n  --key backups/daily-20260301.tar.gz\n```\n\n---\n\n## 📋 示例2：列出文件\n\n### 在 OpenClaw 中\n\n**用户说：**\n```\n列出阿里云 OSS backups 目录下的所有文件\n```\n\n**返回：**\n```\n📋 共找到 15 个文件：\n\nbackups/backup-20260301.tar.gz  - 15.2 MB  - 2026-03-01 20:00\nbackups/backup-20260228.tar.gz  - 14.8 MB  - 2026-02-28 20:00\nbackups/backup-20260227.tar.gz  - 16.1 MB  - 2026-02-27 20:00\n...\n```\n\n### 命令行方式\n\n```bash\n# 列出所有文件\nnode scripts/oss_node.mjs list\n\n# 列出指定前缀的文件\nnode scripts/oss_node.mjs list --prefix backups/ --limit 50\n\n# JSON 格式输出\nnode scripts/oss_node.mjs list --prefix backups/ --format json\n```\n\n---\n\n## 🔗 示例3：获取文件 URL\n\n### 在 OpenClaw 中\n\n**用户说：**\n```\n给我 images/photo.jpg 的访问链接，1小时有效\n```\n\n**返回：**\n```\n🔗 临时访问链接（1小时有效）：\n\nhttps://bucket.oss-cn-hangzhou.aliyuncs.com/images/photo.jpg?OSSAccessKeyId=...&Expires=...&Signature=...\n```\n\n### 命令行方式\n\n```bash\n# 公开 URL\nnode scripts/oss_node.mjs url --key images/photo.jpg\n\n# 私有 URL（1小时有效）\nnode scripts/oss_node.mjs url --key documents/report.pdf --private --expires 3600\n```\n\n---\n\n## 🗑️ 示例4：删除文件\n\n### 在 OpenClaw 中\n\n**用户说：**\n```\n删除阿里云 OSS 上的 old-backup.tar.gz\n```\n\n**AI 执行：**\n```\n1. 先确认：是否真的要删除？\n2. 用户确认后执行删除\n```\n\n**返回：**\n```\n✅ 删除成功！\n\n文件：old-backup.tar.gz\n```\n\n### 命令行方式\n\n```bash\n# 删除单个文件（需要确认）\nnode scripts/oss_node.mjs delete --key backups/old-backup.tar.gz\n\n# 强制删除（不需要确认）\nnode scripts/oss_node.mjs delete --key backups/old-backup.tar.gz --force\n\n# 批量删除\ncat > delete-list.txt << EOF\nbackups/backup-20260101.tar.gz\nbackups/backup-20260102.tar.gz\nEOF\n\nnode scripts/oss_node.mjs batch-delete --file delete-list.txt\n```\n\n---\n\n## 📊 示例5：获取文件信息\n\n### 在 OpenClaw 中\n\n**用户说：**\n```\n查看 documents/report.pdf 的详细信息\n```\n\n**返回：**\n```\n📊 文件信息：\n\n文件名：documents/report.pdf\n大小：2.5 MB\n类型：application/pdf\nETag：\"abc123...\"\n修改时间：2026-03-01 15:30:00\n```\n\n### 命令行方式\n\n```bash\nnode scripts/oss_node.mjs stat --key documents/report.pdf\n```\n\n---\n\n## 📥 示例6：下载文件\n\n### 在 OpenClaw 中\n\n**用户说：**\n```\n从阿里云 OSS 下载 documents/report.pdf 到本地\n```\n\n**返回：**\n```\n✅ 下载成功！\n\n文件：documents/report.pdf\n大小：2.5 MB\n保存到：/downloads/report.pdf\n```\n\n### 命令行方式\n\n```bash\nnode scripts/oss_node.mjs download \\\n  --key documents/report.pdf \\\n  --local /downloads/report.pdf\n```\n\n---\n\n## 🤖 示例7：自动化备份脚本\n\n### 完整脚本\n\n```bash\n#!/bin/bash\n\n# 每日备份脚本\nBACKUP_DIR=\"/backups\"\nDATE=$(date +%Y%m%d)\nBACKUP_FILE=\"backup-${DATE}.tar.gz\"\n\n# 1. 创建备份\necho \"📦 创建备份...\"\ntar -czf \"${BACKUP_DIR}/${BACKUP_FILE}\" /data\n\n# 2. 上传到阿里云 OSS\necho \"📤 上传到阿里云 OSS...\"\ncd /home/node/.openclaw/workspace/skills/aliyun-oss-skill\nnode scripts/oss_node.mjs upload \\\n  --local \"${BACKUP_DIR}/${BACKUP_FILE}\" \\\n  --key \"backups/${BACKUP_FILE}\"\n\n# 3. 清理本地旧备份（保留7天）\necho \"🗑️  清理旧备份...\"\nfind ${BACKUP_DIR} -name \"backup-*.tar.gz\" -mtime +7 -delete\n\n# 4. 清理云端旧备份（保留30天）\necho \"🗑️  清理云端旧备份...\"\nnode -e \"\nconst { execSync } = require('child_process');\nconst cutoff = Date.now() - (30 * 24 * 60 * 60 * 1000);\n\nconst files = JSON.parse(execSync('node scripts/oss_node.mjs list --prefix \\\"backups/\\\" --format json'));\n\nfor (const file of files) {\n  if (file.mtime * 1000 < cutoff) {\n    execSync(\\`node scripts/oss_node.mjs delete --key \\${file.key} --force\\`);\n    console.log(\\`已删除: \\${file.key}\\`);\n  }\n}\n\"\n\necho \"✅ 备份完成！\"\n```\n\n---\n\n## 📝 示例8：批量操作\n\n### 批量上传图片\n\n```javascript\nconst { execSync } = require('child_process');\nconst fs = require('fs');\nconst path = require('path');\n\nconst imageDir = '/path/to/images';\nlet uploaded = 0;\n\nfs.readdirSync(imageDir).forEach(filename => {\n  if (filename.endsWith('.jpg') || filename.endsWith('.png') || filename.endsWith('.gif')) {\n    const localPath = path.join(imageDir, filename);\n    const key = `images/${filename}`;\n\n    try {\n      execSync(`node scripts/oss_node.mjs upload --local \"${localPath}\" --key \"${key}\"`);\n      console.log(`✅ ${filename} 上传成功`);\n      uploaded++;\n    } catch (error) {\n      console.error(`❌ ${filename} 上传失败:`, error.message);\n    }\n  }\n});\n\nconsole.log(`\\n✅ 共上传 ${uploaded} 个文件`);\n```\n\n---\n\n## 🎯 更多示例\n\n查看 [SKILL.md](../SKILL.md) 获取更多详细信息和 API 文档。\n\nFile v1.0.2:skill-card.md\n\n## Description:\n\naliyun-oss helps agents manage Alibaba Cloud Object Storage (OSS) objects, including upload, download, listing, deletion, metadata inspection, moves, copies, and signed URL generation.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[langhuachuanshi](https://clawhub.ai/user/langhuachuanshi)\n\n### License/Terms of Use:\n\nMIT\n\n## Use Case:\n\nDevelopers and operators use this skill to let an agent manage files in Alibaba Cloud OSS buckets through the ali-oss Node.js SDK, with ossutil described as a fallback path. It supports common storage workflows such as backup upload, object discovery, signed URL creation, and object cleanup.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The setup flow can persist Alibaba Cloud access keys in shell startup files.\n\nMitigation: Use narrowly scoped RAM or STS credentials, avoid entering secrets in reusable shell history, remove generated exports from shell startup files, and rotate any credentials already exposed this way.\n\nRisk: Delete operations may proceed even when the documented interactive confirmation is expected.\n\nMitigation: Review delete commands before execution, avoid relying on the prompt as a safeguard, and require a fixed confirmation implementation before using destructive operations in routine workflows.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/langhuachuanshi/skills/aliyun-oss-skill)\n- [Aliyun OSS Node.js SDK documentation](https://help.aliyun.com/document_detail/32068.html)\n- [Aliyun ossutil documentation](https://help.aliyun.com/document_detail/120075.html)\n\n## Skill Output:\n\n**Output Type(s):** [guidance, shell commands, configuration, code, text]\n\n**Output Format:** [Markdown guidance with shell commands, JSON configuration examples, and command output text]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires Node.js and the ali-oss package; operates on user-provided Alibaba Cloud OSS credentials and bucket configuration.]\n\n## Skill Version(s):\n\n1.0.2 (source: server release metadata, released 2026-03-06)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.0.2:config/oss-config.example.json\n\n{\n  \"accessKeyId\": \"你的AccessKey ID\",\n  \"accessKeySecret\": \"你的AccessKey Secret\",\n  \"bucket\": \"你的存储桶名称\",\n  \"region\": \"oss-cn-hangzhou\",\n  \"domain\": \"https://你的域名.com\",\n  \"options\": {\n    \"secure\": true,\n    \"timeout\": 60000,\n    \"upload_threshold\": 1048576,\n    \"chunk_size\": 1048576,\n    \"retry_times\": 3\n  }\n}\n\nFile v1.0.2:package.json\n\n{\n  \"name\": \"aliyun-oss-skill\",\n  \"version\": \"1.0.0\",\n  \"description\": \"阿里云 OSS 对象存储技能\",\n  \"main\": \"scripts/oss_node.mjs\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"setup\": \"bash scripts/setup.sh\",\n    \"test\": \"node scripts/oss_node.mjs test-connection\"\n  },\n  \"dependencies\": {\n    \"ali-oss\": \"^6.21.0\"\n  },\n  \"keywords\": [\"aliyun\", \"oss\", \"cloud\", \"storage\", \"openclaw\", \"skill\"],\n  \"author\": \"33\",\n  \"license\": \"MIT\"\n}\n\nArchive v1.0.1: 8 files, 11553 bytes\n\nFiles: _meta.json (135b), config/oss-config.example.json (340b), docs/EXAMPLES.md (5418b), package.json (438b), README.md (1093b), scripts/oss_node.mjs (10917b), scripts/setup.sh (8328b), SKILL.md (3365b)\n\nFile v1.0.1:SKILL.md\n\n---\nname: aliyun-oss\ndescription: |\n  阿里云 OSS 对象存储技能。支持文件上传、下载、列出、删除、获取 URL 等操作。\n  两层架构：Node.js SDK（优先）→ ossutil CLI。\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"☁️\",\n        \"requires\": { \"bins\": [\"node\"], \"packages\": [\"ali-oss\"] },\n        \"install\":\n          [\n            { \"id\": \"ali-oss-sdk\", \"kind\": \"node\", \"package\": \"ali-oss\", \"label\": \"Install ali-oss Node.js SDK\" },\n          ],\n      },\n  }\n---\n\n# ☁️ 阿里云 OSS 技能\n\n通过 **Node.js SDK** / **ossutil CLI** 管理阿里云对象存储。\n\n---\n\n## 🎯 执行策略（两层降级）\n\n| 优先级 | 工具 | 使用场景 |\n|--------|------|----------|\n| **1** | Node.js SDK (`ali-oss`) | 优先使用 |\n| **2** | ossutil CLI | 备选 |\n\n---\n\n## 🚀 快速开始\n\n### 1. 安装依赖\n\n```bash\n# 进入技能目录\ncd ~/.openclaw/workspace/skills/aliyun-oss-skill\n\n# 运行自动安装\nbash scripts/setup.sh\n```\n\n### 2. 配置凭证\n\n```bash\nbash scripts/setup.sh \\\n  --access-key-id \"YOUR_ACCESS_KEY_ID\" \\\n  --access-key-secret \"YOUR_ACCESS_KEY_SECRET\" \\\n  --region \"oss-cn-hangzhou\" \\\n  --bucket \"mybucket\"\n```\n\n### 3. 测试连接\n\n```bash\nnode scripts/oss_node.mjs test-connection\n```\n\n---\n\n## 📋 使用示例\n\n### 上传文件\n\n```bash\nnode scripts/oss_node.mjs upload \\\n  --local \"/path/to/file.txt\" \\\n  --key \"uploads/file.txt\"\n```\n\n### 列出文件\n\n```bash\nnode scripts/oss_node.mjs list --prefix \"uploads/\" --limit 100\n```\n\n### 下载文件\n\n```bash\nnode scripts/oss_node.mjs download \\\n  --key \"uploads/file.txt\" \\\n  --local \"/path/to/save.txt\"\n```\n\n### 删除文件\n\n```bash\nnode scripts/oss_node.mjs delete --key \"uploads/file.txt\" --force\n```\n\n### 获取文件 URL\n\n```bash\n# 公开空间\nnode scripts/oss_node.mjs url --key \"uploads/file.txt\"\n\n# 私有空间（1小时有效）\nnode scripts/oss_node.mjs url --key \"uploads/file.txt\" --private --expires 3600\n```\n\n---\n\n## 🔧 Node.js SDK API\n\n| 命令 | 说明 |\n|------|------|\n| `upload --local <path> --key <key>` | 上传文件 |\n| `download --key <key> --local <path>` | 下载文件 |\n| `list [--prefix <p>] [--limit <n>]` | 列出文件 |\n| `delete --key <key> [--force]` | 删除文件 |\n| `url --key <key> [--private] [--expires <s>]` | 获取 URL |\n| `stat --key <key>` | 文件信息 |\n| `move --src-key <a> --dest-key <b>` | 移动文件 |\n| `copy --src-key <a> --dest-key <b>` | 复制文件 |\n| `test-connection` | 测试连接 |\n\n---\n\n## ⚙️ 配置文件\n\n**config/oss-config.json**\n\n```json\n{\n  \"accessKeyId\": \"YOUR_ACCESS_KEY_ID\",\n  \"accessKeySecret\": \"YOUR_ACCESS_KEY_SECRET\",\n  \"bucket\": \"mybucket\",\n  \"region\": \"oss-cn-hangzhou\",\n  \"domain\": \"https://cdn.example.com\"\n}\n```\n\n**常用区域**：\n- `oss-cn-hangzhou` - 华东1（杭州）\n- `oss-cn-shanghai` - 华东2（上海）\n- `oss-cn-beijing` - 华北2（北京）\n- `oss-cn-shenzhen` - 华南1（深圳）\n\n---\n\n## 🐛 故障排查\n\n| 问题 | 解决 |\n|------|------|\n| `Cannot find module 'ali-oss'` | `npm install ali-oss` |\n| `403 Forbidden` | 检查 AccessKey 权限 |\n| `连接超时` | 检查区域代码和网络 |\n\n---\n\n## 📚 相关链接\n\n- [阿里云 OSS Node.js SDK](https://help.aliyun.com/document_detail/32068.html)\n- [ossutil 工具](https://help.aliyun.com/document_detail/120075.html)\n\n---\n\n## 📄 许可证\n\nMIT License\n\nFile v1.0.1:README.md\n\n# ☁️ 阿里云 OSS 技能\n\nOpenClaw 技能，用于管理阿里云对象存储（OSS）。\n\n## ✨ 功能\n\n- 📤 上传文件\n- 📥 下载文件\n- 📋 列出文件\n- 🗑️ 删除文件\n- 🔗 获取文件 URL（支持私有空间签名）\n- 📊 查看文件信息\n- 📁 移动/复制文件\n\n## 🚀 快速开始\n\n```bash\n# 安装依赖\nnpm install\n\n# 配置凭证\nbash scripts/setup.sh --access-key-id \"xxx\" --access-key-secret \"xxx\" --region \"oss-cn-hangzhou\" --bucket \"mybucket\"\n\n# 测试连接\nnode scripts/oss_node.mjs test-connection\n```\n\n## 📖 使用示例\n\n```bash\n# 上传\nnode scripts/oss_node.mjs upload --local file.txt --key uploads/file.txt\n\n# 列出\nnode scripts/oss_node.mjs list --prefix uploads/\n\n# 下载\nnode scripts/oss_node.mjs download --key uploads/file.txt --local file.txt\n\n# 删除\nnode scripts/oss_node.mjs delete --key uploads/file.txt --force\n\n# 获取 URL\nnode scripts/oss_node.mjs url --key uploads/file.txt\n```\n\n## 🔧 架构\n\n两层降级策略：\n1. **Node.js SDK** (`ali-oss`) - 优先使用\n2. **ossutil CLI** - 备选\n\n## 📄 许可证\n\nMIT\n\nFile v1.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn78r3ca13npsxrn5f905res8n821ssm\",\n  \"slug\": \"aliyun-oss-skill\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1772813175381\n}\n\nFile v1.0.1:docs/EXAMPLES.md\n\n# 阿里云 OSS 技能 - 使用示例\n\n本文档包含阿里云 OSS 技能的各种使用示例。\n\n---\n\n## 📤 示例1：上传文件\n\n### 在 OpenClaw 中\n\n**用户说：**\n```\n帮我上传 /backups/daily-20260301.tar.gz 到阿里云 OSS\n```\n\n**AI 执行：**\n```\n使用 Node.js SDK 脚本上传\n```\n\n**返回：**\n```\n✅ 上传成功！\n\n文件：daily-20260301.tar.gz\n大小：15.2 MB\nURL：https://bucket.oss-cn-hangzhou.aliyuncs.com/backups/daily-20260301.tar.gz\n```\n\n### 命令行方式\n\n```bash\nnode scripts/oss_node.mjs upload \\\n  --local /backups/daily-20260301.tar.gz \\\n  --key backups/daily-20260301.tar.gz\n```\n\n---\n\n## 📋 示例2：列出文件\n\n### 在 OpenClaw 中\n\n**用户说：**\n```\n列出阿里云 OSS backups 目录下的所有文件\n```\n\n**返回：**\n```\n📋 共找到 15 个文件：\n\nbackups/backup-20260301.tar.gz  - 15.2 MB  - 2026-03-01 20:00\nbackups/backup-20260228.tar.gz  - 14.8 MB  - 2026-02-28 20:00\nbackups/backup-20260227.tar.gz  - 16.1 MB  - 2026-02-27 20:00\n...\n```\n\n### 命令行方式\n\n```bash\n# 列出所有文件\nnode scripts/oss_node.mjs list\n\n# 列出指定前缀的文件\nnode scripts/oss_node.mjs list --prefix backups/ --limit 50\n\n# JSON 格式输出\nnode scripts/oss_node.mjs list --prefix backups/ --format json\n```\n\n---\n\n## 🔗 示例3：获取文件 URL\n\n### 在 OpenClaw 中\n\n**用户说：**\n```\n给我 images/photo.jpg 的访问链接，1小时有效\n```\n\n**返回：**\n```\n🔗 临时访问链接（1小时有效）：\n\nhttps://bucket.oss-cn-hangzhou.aliyuncs.com/images/photo.jpg?OSSAccessKeyId=...&Expires=...&Signature=...\n```\n\n### 命令行方式\n\n```bash\n# 公开 URL\nnode scripts/oss_node.mjs url --key images/photo.jpg\n\n# 私有 URL（1小时有效）\nnode scripts/oss_node.mjs url --key documents/report.pdf --private --expires 3600\n```\n\n---\n\n## 🗑️ 示例4：删除文件\n\n### 在 OpenClaw 中\n\n**用户说：**\n```\n删除阿里云 OSS 上的 old-backup.tar.gz\n```\n\n**AI 执行：**\n```\n1. 先确认：是否真的要删除？\n2. 用户确认后执行删除\n```\n\n**返回：**\n```\n✅ 删除成功！\n\n文件：old-backup.tar.gz\n```\n\n### 命令行方式\n\n```bash\n# 删除单个文件（需要确认）\nnode scripts/oss_node.mjs delete --key backups/old-backup.tar.gz\n\n# 强制删除（不需要确认）\nnode scripts/oss_node.mjs delete --key backups/old-backup.tar.gz --force\n\n# 批量删除\ncat > delete-list.txt << EOF\nbackups/backup-20260101.tar.gz\nbackups/backup-20260102.tar.gz\nEOF\n\nnode scripts/oss_node.mjs batch-delete --file delete-list.txt\n```\n\n---\n\n## 📊 示例5：获取文件信息\n\n### 在 OpenClaw 中\n\n**用户说：**\n```\n查看 documents/report.pdf 的详细信息\n```\n\n**返回：**\n```\n📊 文件信息：\n\n文件名：documents/report.pdf\n大小：2.5 MB\n类型：application/pdf\nETag：\"abc123...\"\n修改时间：2026-03-01 15:30:00\n```\n\n### 命令行方式\n\n```bash\nnode scripts/oss_node.mjs stat --key documents/report.pdf\n```\n\n---\n\n## 📥 示例6：下载文件\n\n### 在 OpenClaw 中\n\n**用户说：**\n```\n从阿里云 OSS 下载 documents/report.pdf 到本地\n```\n\n**返回：**\n```\n✅ 下载成功！\n\n文件：documents/report.pdf\n大小：2.5 MB\n保存到：/downloads/report.pdf\n```\n\n### 命令行方式\n\n```bash\nnode scripts/oss_node.mjs download \\\n  --key documents/report.pdf \\\n  --local /downloads/report.pdf\n```\n\n---\n\n## 🤖 示例7：自动化备份脚本\n\n### 完整脚本\n\n```bash\n#!/bin/bash\n\n# 每日备份脚本\nBACKUP_DIR=\"/backups\"\nDATE=$(date +%Y%m%d)\nBACKUP_FILE=\"backup-${DATE}.tar.gz\"\n\n# 1. 创建备份\necho \"📦 创建备份...\"\ntar -czf \"${BACKUP_DIR}/${BACKUP_FILE}\" /data\n\n# 2. 上传到阿里云 OSS\necho \"📤 上传到阿里云 OSS...\"\ncd /home/node/.openclaw/workspace/skills/aliyun-oss-skill\nnode scripts/oss_node.mjs upload \\\n  --local \"${BACKUP_DIR}/${BACKUP_FILE}\" \\\n  --key \"backups/${BACKUP_FILE}\"\n\n# 3. 清理本地旧备份（保留7天）\necho \"🗑️  清理旧备份...\"\nfind ${BACKUP_DIR} -name \"backup-*.tar.gz\" -mtime +7 -delete\n\n# 4. 清理云端旧备份（保留30天）\necho \"🗑️  清理云端旧备份...\"\nnode -e \"\nconst { execSync } = require('child_process');\nconst cutoff = Date.now() - (30 * 24 * 60 * 60 * 1000);\n\nconst files = JSON.parse(execSync('node scripts/oss_node.mjs list --prefix \\\"backups/\\\" --format json'));\n\nfor (const file of files) {\n  if (file.mtime * 1000 < cutoff) {\n    execSync(\\`node scripts/oss_node.mjs delete --key \\${file.key} --force\\`);\n    console.log(\\`已删除: \\${file.key}\\`);\n  }\n}\n\"\n\necho \"✅ 备份完成！\"\n```\n\n---\n\n## 📝 示例8：批量操作\n\n### 批量上传图片\n\n```javascript\nconst { execSync } = require('child_process');\nconst fs = require('fs');\nconst path = require('path');\n\nconst imageDir = '/path/to/images';\nlet uploaded = 0;\n\nfs.readdirSync(imageDir).forEach(filename => {\n  if (filename.endsWith('.jpg') || filename.endsWith('.png') || filename.endsWith('.gif')) {\n    const localPath = path.join(imageDir, filename);\n    const key = `images/${filename}`;\n\n    try {\n      execSync(`node scripts/oss_node.mjs upload --local \"${localPath}\" --key \"${key}\"`);\n      console.log(`✅ ${filename} 上传成功`);\n      uploaded++;\n    } catch (error) {\n      console.error(`❌ ${filename} 上传失败:`, error.message);\n    }\n  }\n});\n\nconsole.log(`\\n✅ 共上传 ${uploaded} 个文件`);\n```\n\n---\n\n## 🎯 更多示例\n\n查看 [SKILL.md](../SKILL.md) 获取更多详细信息和 API 文档。\n\nFile v1.0.1:config/oss-config.example.json\n\n{\n  \"accessKeyId\": \"你的AccessKey ID\",\n  \"accessKeySecret\": \"你的AccessKey Secret\",\n  \"bucket\": \"你的存储桶名称\",\n  \"region\": \"oss-cn-hangzhou\",\n  \"domain\": \"https://你的域名.com\",\n  \"options\": {\n    \"secure\": true,\n    \"timeout\": 60000,\n    \"upload_threshold\": 1048576,\n    \"chunk_size\": 1048576,\n    \"retry_times\": 3\n  }\n}\n\nFile v1.0.1:package.json\n\n{\n  \"name\": \"aliyun-oss-skill\",\n  \"version\": \"1.0.0\",\n  \"description\": \"阿里云 OSS 对象存储技能\",\n  \"main\": \"scripts/oss_node.mjs\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"setup\": \"bash scripts/setup.sh\",\n    \"test\": \"node scripts/oss_node.mjs test-connection\"\n  },\n  \"dependencies\": {\n    \"ali-oss\": \"^6.21.0\"\n  },\n  \"keywords\": [\"aliyun\", \"oss\", \"cloud\", \"storage\", \"openclaw\", \"skill\"],\n  \"author\": \"33\",\n  \"license\": \"MIT\"\n}\n\nArchive v1.0.0: 7 files, 14213 bytes\n\nFiles: config/oss-config.example.json (340b), docs/EXAMPLES.md (5418b), README.md (1433b), scripts/oss_node.mjs (11088b), scripts/setup.sh (8328b), SKILL.md (11924b), _meta.json (135b)\n\nFile v1.0.0:SKILL.md\n\n# Aliyun OSS Skill\n\n通过 aliyun-oss MCP 工具 + Node.js SDK 脚本 + ossutil 管理阿里云对象存储和数据处理。\n\n---\n\n## 📖 功能说明\n\n### 核心功能\n- 📤 **上传文件** - 单文件、批量上传、断点续传\n- 📥 **下载文件** - 单文件、批量下载\n- 📋 **列出文件** - 按前缀、分页列出\n- 🗑️ **删除文件** - 单文件、批量删除\n- 🔗 **获取 URL** - 公开/私有空间 URL 生成\n- 📊 **文件信息** - 查看文件详情\n- 📁 **目录操作** - 移动、复制、重命名\n\n### 高级功能（通过 SDK）\n- 🖼️ **图片处理** - 缩放、裁剪、水印、格式转换\n- 🎵 **音视频处理** - 转码、截图\n- 🔍 **智能搜索** - 文件搜索和元数据查询\n- 📝 **文档处理** - 文档预览、格式转换\n\n---\n\n## 🚀 首次使用 — 自动设置\n\n当用户首次要求操作 OSS 时，按以下流程操作：\n\n### 步骤 1：检查当前状态\n\n```bash\n{baseDir}/scripts/setup.sh --check-only\n```\n\n**检查内容：**\n- ✅ Node.js 环境\n- ✅ aliyun-oss MCP 是否已安装\n- ✅ ossutil 是否已安装\n- ✅ 配置文件是否存在\n- ✅ 凭证是否已配置\n\n如果输出显示一切 OK（凭证已配置），跳到「执行策略」。\n\n---\n\n### 步骤 2：如果未配置，引导用户提供凭证\n\n告诉用户：\n\n```\n我需要你的阿里云凭证来连接 OSS 存储服务。请提供：\n\nAccessKey ID — 阿里云 AccessKey ID\nAccessKey Secret — 阿里云 AccessKey Secret\nRegion — 地域节点（如 oss-cn-hangzhou, oss-cn-shanghai, oss-cn-beijing）\nBucket — 存储桶名称\nDomain（可选） — 访问域名（用于生成文件 URL，如 https://bucket.oss-cn-hangzhou.aliyuncs.com）\n\n你可以在阿里云控制台获取：\n- 密钥管理：https://ram.console.aliyun.com/manage/ak\n- 存储桶列表：https://oss.console.aliyun.com/bucket\n- 地域说明：\n  - oss-cn-hangzhou: 华东1（杭州）\n  - oss-cn-shanghai: 华东2（上海）\n  - oss-cn-beijing: 华北2（北京）\n  - oss-cn-shenzhen: 华南1（深圳）\n  - oss-cn-hongkong: 中国香港\n  - oss-us-west-1: 美国西部1（硅谷）\n  - oss-ap-southeast-1: 亚太东南1（新加坡）\n```\n\n---\n\n### 步骤 3：用户提供凭证后，运行自动设置\n\n```bash\n{baseDir}/scripts/setup.sh \\\n  --access-key-id \"<AccessKey ID>\" \\\n  --access-key-secret \"<AccessKey Secret>\" \\\n  --region \"<Region>\" \\\n  --bucket \"<Bucket>\" \\\n  --domain \"<Domain>\"\n```\n\n**脚本会自动：**\n\n1. ✅ 检查并安装 aliyun-oss MCP 工具（如果有）\n2. ✅ 安装 ali-oss Node.js SDK\n3. ✅ 安装 ossutil 命令行工具\n4. ✅ 将凭证写入 shell 配置文件（`~/.zshrc` 或 `~/.bashrc`），重启后仍可用\n5. ✅ 创建配置文件 `{baseDir}/config/oss-config.json`\n6. ✅ 验证阿里云 OSS 连接\n7. ✅ 测试上传下载功能\n\n**设置完成后即可开始使用。**\n\n---\n\n## 🎯 执行策略\n\n三种方式按优先级降级，确保操作始终可完成：\n\n### 方式一：aliyun-oss MCP 工具（优先）\n\n**特点：** 功能最全，支持存储 + 图片处理 + 音视频处理 + 智能搜索\n\n**使用场景：**\n- 需要图片处理（缩放、裁剪、水印）\n- 需要音视频转码\n- 需要智能搜索\n- 需要文档处理\n\n**调用方式：**\n```javascript\n// 通过 MCP 工具调用\nuse_mcp_tool(\"aliyun-oss\", \"upload_file\", {\n  localPath: \"/path/to/file.txt\",\n  key: \"uploads/file.txt\"\n})\n```\n\n---\n\n### 方式二：Node.js SDK 脚本\n\n**特点：** 稳定可靠，支持基础存储操作\n\n**使用场景：**\n- MCP 工具不可用\n- 只需要基础存储操作\n- 需要自定义处理逻辑\n\n**调用方式：**\n```bash\nnode {baseDir}/scripts/oss_node.mjs upload \\\n  --local \"/path/to/file.txt\" \\\n  --key \"uploads/file.txt\"\n\nnode {baseDir}/scripts/oss_node.mjs download \\\n  --key \"uploads/file.txt\" \\\n  --local \"/path/to/file.txt\"\n\nnode {baseDir}/scripts/oss_node.mjs list \\\n  --prefix \"uploads/\" \\\n  --limit 100\n```\n\n---\n\n### 方式三：ossutil 命令行（最后备选）\n\n**特点：** 官方命令行工具，功能全面\n\n**使用场景：**\n- MCP 和 SDK 都不可用\n- 需要批量操作\n- 需要高级功能\n\n**调用方式：**\n```bash\n# 上传文件\nossutil cp /path/to/file.txt oss://bucket/key\n\n# 下载文件\nossutil cp oss://bucket/key /path/to/file.txt\n\n# 列出文件\nossutil ls oss://bucket/prefix/\n\n# 批量上传\nossutil cp -r /local/dir/ oss://bucket/\n```\n\n---\n\n## 📋 使用示例\n\n### 示例1：上传备份文件\n\n**用户说：**\n```\n帮我上传 /backups/daily-20260301.tar.gz 到阿里云 OSS\n```\n\n**AI 执行：**\n```javascript\n// 优先使用 SDK\nresult = node scripts/oss_node.mjs upload \\\n  --local \"/backups/daily-20260301.tar.gz\" \\\n  --key \"backups/daily-20260301.tar.gz\"\n```\n\n**返回：**\n```\n✅ 上传成功！\n\n文件：daily-20260301.tar.gz\n大小：15.2 MB\nURL：https://bucket.oss-cn-hangzhou.aliyuncs.com/backups/daily-20260301.tar.gz\n```\n\n---\n\n### 示例2：列出文件\n\n**用户说：**\n```\n列出阿里云 OSS backups 目录下的所有文件\n```\n\n**AI 执行：**\n```javascript\n// 使用 Node.js SDK\nfiles = node scripts/oss_node.mjs list --prefix \"backups/\"\n```\n\n**返回：**\n```\n📋 共找到 15 个文件：\n\nbackups/backup-20260301.tar.gz  - 15.2 MB  - 2026-03-01 20:00\nbackups/backup-20260228.tar.gz  - 14.8 MB  - 2026-02-28 20:00\nbackups/backup-20260227.tar.gz  - 16.1 MB  - 2026-02-27 20:00\n...\n```\n\n---\n\n### 示例3：获取文件 URL\n\n**用户说：**\n```\n给我 images/photo.jpg 的访问链接，1小时有效\n```\n\n**AI 执行：**\n```javascript\n// 使用 Node.js SDK\nurl = node scripts/oss_node.mjs url \\\n  --key \"images/photo.jpg\" --private --expires 3600\n```\n\n**返回：**\n```\n🔗 临时访问链接（1小时有效）：\n\nhttps://bucket.oss-cn-hangzhou.aliyuncs.com/images/photo.jpg?OSSAccessKeyId=...&Expires=...&Signature=...\n```\n\n---\n\n### 示例4：图片处理\n\n**用户说：**\n```\n把 images/photo.jpg 缩小到 800x600，加水印\n```\n\n**AI 执行：**\n```javascript\n// 使用 Node.js SDK（支持图片处理）\nurl = node scripts/oss_node.mjs process-image \\\n  --key \"images/photo.jpg\" \\\n  --resize \"800x600\" \\\n  --watermark \"OpenClaw\"\n```\n\n**返回：**\n```\n✅ 图片处理完成！\n\n原图：https://bucket.oss-cn-hangzhou.aliyuncs.com/images/photo.jpg\n处理后：https://bucket.oss-cn-hangzhou.aliyuncs.com/images/photo.jpg?x-oss-process=image/resize,w_800,h_600/watermark,...\n```\n\n---\n\n### 示例5：批量删除旧备份\n\n**用户说：**\n```\n删除阿里云 OSS 上 30 天前的备份\n```\n\n**AI 执行：**\n```javascript\n// 使用 Node.js SDK 脚本\nconst cutoffDate = Date.now() - (30 * 24 * 60 * 60 * 1000);\n\n// 列出所有备份\nconst files = JSON.parse(execSync('node scripts/oss_node.mjs list --prefix \"backups/\" --format json'));\n\n// 删除旧备份\nfor (const file of files) {\n  if (file.mtime * 1000 < cutoffDate) {\n    execSync(`node scripts/oss_node.mjs delete --key ${file.key} --force`);\n  }\n}\n```\n\n**返回：**\n```\n🗑️  已删除 12 个旧备份：\n\nbackups/backup-20260115.tar.gz\nbackups/backup-20260114.tar.gz\n...\n```\n\n---\n\n## 🔧 API 文档\n\n### Node.js SDK 脚本 API\n\n#### 上传文件\n```bash\nnode scripts/oss_node.mjs upload \\\n  --local <LocalPath> \\\n  --key <RemoteKey> \\\n  [--bucket <Bucket>] \\\n  [--overwrite]\n```\n\n#### 下载文件\n```bash\nnode scripts/oss_node.mjs download \\\n  --key <RemoteKey> \\\n  --local <LocalPath> \\\n  [--bucket <Bucket>]\n```\n\n#### 列出文件\n```bash\nnode scripts/oss_node.mjs list \\\n  [--prefix <Prefix>] \\\n  [--limit <Limit>] \\\n  [--delimiter <Delimiter>] \\\n  [--format json|table]\n```\n\n#### 删除文件\n```bash\nnode scripts/oss_node.mjs delete \\\n  --key <RemoteKey> \\\n  [--bucket <Bucket>] \\\n  [--force]\n```\n\n#### 批量删除\n```bash\nnode scripts/oss_node.mjs batch-delete \\\n  --file <KeyListFile> \\\n  [--bucket <Bucket>]\n```\n\n#### 获取文件 URL\n```bash\nnode scripts/oss_node.mjs url \\\n  --key <RemoteKey> \\\n  [--private] \\\n  [--expires <Seconds>]\n```\n\n#### 获取文件信息\n```bash\nnode scripts/oss_node.mjs stat \\\n  --key <RemoteKey> \\\n  [--bucket <Bucket>]\n```\n\n#### 移动文件\n```bash\nnode scripts/oss_node.mjs move \\\n  --src-key <SourceKey> \\\n  --dest-key <DestKey> \\\n  [--bucket <Bucket>] \\\n  [--force]\n```\n\n#### 复制文件\n```bash\nnode scripts/oss_node.mjs copy \\\n  --src-key <SourceKey> \\\n  --dest-key <DestKey> \\\n  [--bucket <Bucket>] \\\n  [--force]\n```\n\n---\n\n## ⚙️ 配置文件\n\n### config/oss-config.json\n\n```json\n{\n  \"accessKeyId\": \"你的AccessKey ID\",\n  \"accessKeySecret\": \"你的AccessKey Secret\",\n  \"bucket\": \"你的存储桶名称\",\n  \"region\": \"oss-cn-hangzhou\",\n  \"domain\": \"https://你的域名.com\",\n  \"options\": {\n    \"secure\": true,\n    \"timeout\": 60000,\n    \"upload_threshold\": 1048576,\n    \"chunk_size\": 1048576,\n    \"retry_times\": 3\n  }\n}\n```\n\n### 配置项说明\n\n| 配置项 | 类型 | 必填 | 说明 |\n|--------|------|------|------|\n| accessKeyId | string | ✅ | 阿里云 AccessKey ID |\n| accessKeySecret | string | ✅ | 阿里云 AccessKey Secret |\n| bucket | string | ✅ | 存储桶名称 |\n| region | string | ✅ | 地域节点 |\n| domain | string | ❌ | 访问域名 |\n| secure | boolean | ❌ | 使用 HTTPS |\n| timeout | number | ❌ | 超时时间（毫秒） |\n| upload_threshold | number | ❌ | 分片上传阈值（字节） |\n| chunk_size | number | ❌ | 分片大小（字节） |\n| retry_times | number | ❌ | 重试次数 |\n\n---\n\n## 🐛 故障排查\n\n### 问题1：连接失败\n\n**症状：**\n```\n❌ 连接失败：网络错误\n```\n\n**检查：**\n1. AccessKey ID 和 AccessKey Secret 是否正确\n2. Region 是否正确\n3. 网络连接是否正常\n\n**解决：**\n```bash\n# 检查配置\nnode scripts/oss_node.mjs check-config\n\n# 测试连接\nnode scripts/oss_node.mjs test-connection\n```\n\n---\n\n### 问题2：权限不足\n\n**症状：**\n```\n❌ 权限拒绝：403 Forbidden\n```\n\n**检查：**\n1. AccessKey 是否有对应存储桶的权限\n2. RAM 用户权限配置是否正确\n\n**解决：**\n```bash\n# 重新配置\nbash scripts/setup.sh \\\n  --access-key-id \"新的AccessKey ID\" \\\n  --access-key-secret \"新的AccessKey Secret\" \\\n  --region \"oss-cn-hangzhou\" \\\n  --bucket \"mybucket\"\n```\n\n---\n\n### 问题3：上传失败\n\n**症状：**\n```\n❌ 上传失败：连接超时\n```\n\n**检查：**\n1. 网络连接是否正常\n2. Region 是否正确\n3. 存储桶是否存在\n\n**解决：**\n```bash\n# 检查配置\nnode scripts/oss_node.mjs check-config\n\n# 测试连接\nnode scripts/oss_node.mjs test-connection\n```\n\n---\n\n### 问题4：Node.js SDK 未安装\n\n**症状：**\n```\n❌ Cannot find module 'ali-oss'\n```\n\n**解决：**\n```bash\n# 安装 SDK\ncd /home/node/.openclaw/workspace/skills/aliyun-oss-skill\nnpm install ali-oss\n\n# 或使用自动安装\nbash scripts/setup.sh --install-sdk\n```\n\n---\n\n### 问题5：ossutil 未安装\n\n**症状：**\n```\n❌ ossutil: command not found\n```\n\n**解决：**\n```bash\n# 下载并安装\nwget https://gosspublic.alicdn.com/ossutil/1.7.17/ossutil-v1.7.17-linux-amd64.zip\nunzip ossutil-v1.7.17-linux-amd64.zip\nchmod +x ossutil\nsudo mv ossutil /usr/local/bin/\n\n# 配置账号\nossutil config -e oss-cn-hangzhou.aliyuncs.com -i <AccessKey ID> -k <AccessKey Secret>\n```\n\n---\n\n## 📚 相关文档\n\n- [阿里云 OSS 官方文档](https://help.aliyun.com/product/31815.html)\n- [阿里云 OSS Node.js SDK](https://help.aliyun.com/document_detail/32068.html)\n- [ossutil 命令行工具](https://help.aliyun.com/document_detail/120075.html)\n- [OpenClaw 技能开发指南](https://docs.openclaw.ai/skills)\n\n---\n\n## 🎯 未来计划\n\n- [ ] 支持增量同步\n- [ ] 支持断点续传进度查询\n- [ ] 支持文件加密上传\n- [ ] 支持 Webhook 通知\n- [ ] 支持多存储桶管理\n- [ ] 支持访问统计分析\n\n---\n\n## 👤 作者\n\n- **创建者**：33 (AI 助手)\n- **创建日期**：2026-03-01\n- **版本**：v1.0.0\n- **参考**：qiniu-kodo 技能架构\n\n---\n\n## 📞 支持\n\n如有问题，请在 OpenClaw 中联系 33。\n\n---\n\n## 📄 许可证\n\nMIT License\n\nFile v1.0.0:README.md\n\n# Aliyun OSS Skill\n\n阿里云对象存储技能 - 通过 Node.js SDK + ossutil 管理阿里云存储\n\n## 🚀 快速开始\n\n### 1. 检查环境\n\n```bash\nbash scripts/setup.sh --check-only\n```\n\n### 2. 配置凭证\n\n如果环境检查未通过，运行：\n\n```bash\nbash scripts/setup.sh \\\n  --access-key-id \"<你的AccessKey ID>\" \\\n  --access-key-secret \"<你的AccessKey Secret>\" \\\n  --region \"oss-cn-hangzhou\" \\\n  --bucket \"<你的存储桶名称>\" \\\n  --domain \"https://你的域名.com\"\n```\n\n**获取凭证：**\n- 密钥管理：https://ram.console.aliyun.com/manage/ak\n- 存储桶列表：https://oss.console.aliyun.com/bucket\n\n### 3. 开始使用\n\n**命令行：**\n\n```bash\n# 上传文件\nnode scripts/oss_node.mjs upload --local /path/to/file.txt --key uploads/file.txt\n\n# 下载文件\nnode scripts/oss_node.mjs download --key uploads/file.txt --local /path/to/file.txt\n\n# 列出文件\nnode scripts/oss_node.mjs list --prefix uploads/\n\n# 获取 URL\nnode scripts/oss_node.mjs url --key uploads/file.txt\n```\n\n**在 OpenClaw 中：**\n\n```\n帮我上传 /backups/daily.tar.gz 到阿里云 OSS\n```\n\n## 📚 完整文档\n\n查看 [SKILL.md](./SKILL.md) 获取完整文档。\n\n## 🔗 相关链接\n\n- [阿里云 OSS 官方文档](https://help.aliyun.com/product/31815.html)\n- [阿里云 OSS Node.js SDK](https://help.aliyun.com/document_detail/32068.html)\n- [ossutil 命令行工具](https://help.aliyun.com/document_detail/120075.html)\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn78r3ca13npsxrn5f905res8n821ssm\",\n  \"slug\": \"aliyun-oss-skill\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1772409068368\n}\n\nFile v1.0.0:docs/EXAMPLES.md\n\n# 阿里云 OSS 技能 - 使用示例\n\n本文档包含阿里云 OSS 技能的各种使用示例。\n\n---\n\n## 📤 示例1：上传文件\n\n### 在 OpenClaw 中\n\n**用户说：**\n```\n帮我上传 /backups/daily-20260301.tar.gz 到阿里云 OSS\n```\n\n**AI 执行：**\n```\n使用 Node.js SDK 脚本上传\n```\n\n**返回：**\n```\n✅ 上传成功！\n\n文件：daily-20260301.tar.gz\n大小：15.2 MB\nURL：https://bucket.oss-cn-hangzhou.aliyuncs.com/backups/daily-20260301.tar.gz\n```\n\n### 命令行方式\n\n```bash\nnode scripts/oss_node.mjs upload \\\n  --local /backups/daily-20260301.tar.gz \\\n  --key backups/daily-20260301.tar.gz\n```\n\n---\n\n## 📋 示例2：列出文件\n\n### 在 OpenClaw 中\n\n**用户说：**\n```\n列出阿里云 OSS backups 目录下的所有文件\n```\n\n**返回：**\n```\n📋 共找到 15 个文件：\n\nbackups/backup-20260301.tar.gz  - 15.2 MB  - 2026-03-01 20:00\nbackups/backup-20260228.tar.gz  - 14.8 MB  - 2026-02-28 20:00\nbackups/backup-20260227.tar.gz  - 16.1 MB  - 2026-02-27 20:00\n...\n```\n\n### 命令行方式\n\n```bash\n# 列出所有文件\nnode scripts/oss_node.mjs list\n\n# 列出指定前缀的文件\nnode scripts/oss_node.mjs list --prefix backups/ --limit 50\n\n# JSON 格式输出\nnode scripts/oss_node.mjs list --prefix backups/ --format json\n```\n\n---\n\n## 🔗 示例3：获取文件 URL\n\n### 在 OpenClaw 中\n\n**用户说：**\n```\n给我 images/photo.jpg 的访问链接，1小时有效\n```\n\n**返回：**\n```\n🔗 临时访问链接（1小时有效）：\n\nhttps://bucket.oss-cn-hangzhou.aliyuncs.com/images/photo.jpg?OSSAccessKeyId=...&Expires=...&Signature=...\n```\n\n### 命令行方式\n\n```bash\n# 公开 URL\nnode scripts/oss_node.mjs url --key images/photo.jpg\n\n# 私有 URL（1小时有效）\nnode scripts/oss_node.mjs url --key documents/report.pdf --private --expires 3600\n```\n\n---\n\n## 🗑️ 示例4：删除文件\n\n### 在 OpenClaw 中\n\n**用户说：**\n```\n删除阿里云 OSS 上的 old-backup.tar.gz\n```\n\n**AI 执行：**\n```\n1. 先确认：是否真的要删除？\n2. 用户确认后执行删除\n```\n\n**返回：**\n```\n✅ 删除成功！\n\n文件：old-backup.tar.gz\n```\n\n### 命令行方式\n\n```bash\n# 删除单个文件（需要确认）\nnode scripts/oss_node.mjs delete --key backups/old-backup.tar.gz\n\n# 强制删除（不需要确认）\nnode scripts/oss_node.mjs delete --key backups/old-backup.tar.gz --force\n\n# 批量删除\ncat > delete-list.txt << EOF\nbackups/backup-20260101.tar.gz\nbackups/backup-20260102.tar.gz\nEOF\n\nnode scripts/oss_node.mjs batch-delete --file delete-list.txt\n```\n\n---\n\n## 📊 示例5：获取文件信息\n\n### 在 OpenClaw 中\n\n**用户说：**\n```\n查看 documents/report.pdf 的详细信息\n```\n\n**返回：**\n```\n📊 文件信息：\n\n文件名：documents/report.pdf\n大小：2.5 MB\n类型：application/pdf\nETag：\"abc123...\"\n修改时间：2026-03-01 15:30:00\n```\n\n### 命令行方式\n\n```bash\nnode scripts/oss_node.mjs stat --key documents/report.pdf\n```\n\n---\n\n## 📥 示例6：下载文件\n\n### 在 OpenClaw 中\n\n**用户说：**\n```\n从阿里云 OSS 下载 documents/report.pdf 到本地\n```\n\n**返回：**\n```\n✅ 下载成功！\n\n文件：documents/report.pdf\n大小：2.5 MB\n保存到：/downloads/report.pdf\n```\n\n### 命令行方式\n\n```bash\nnode scripts/oss_node.mjs download \\\n  --key documents/report.pdf \\\n  --local /downloads/report.pdf\n```\n\n---\n\n## 🤖 示例7：自动化备份脚本\n\n### 完整脚本\n\n```bash\n#!/bin/bash\n\n# 每日备份脚本\nBACKUP_DIR=\"/backups\"\nDATE=$(date +%Y%m%d)\nBACKUP_FILE=\"backup-${DATE}.tar.gz\"\n\n# 1. 创建备份\necho \"📦 创建备份...\"\ntar -czf \"${BACKUP_DIR}/${BACKUP_FILE}\" /data\n\n# 2. 上传到阿里云 OSS\necho \"📤 上传到阿里云 OSS...\"\ncd /home/node/.openclaw/workspace/skills/aliyun-oss-skill\nnode scripts/oss_node.mjs upload \\\n  --local \"${BACKUP_DIR}/${BACKUP_FILE}\" \\\n  --key \"backups/${BACKUP_FILE}\"\n\n# 3. 清理本地旧备份（保留7天）\necho \"🗑️  清理旧备份...\"\nfind ${BACKUP_DIR} -name \"backup-*.tar.gz\" -mtime +7 -delete\n\n# 4. 清理云端旧备份（保留30天）\necho \"🗑️  清理云端旧备份...\"\nnode -e \"\nconst { execSync } = require('child_process');\nconst cutoff = Date.now() - (30 * 24 * 60 * 60 * 1000);\n\nconst files = JSON.parse(execSync('node scripts/oss_node.mjs list --prefix \\\"backups/\\\" --format json'));\n\nfor (const file of files) {\n  if (file.mtime * 1000 < cutoff) {\n    execSync(\\`node scripts/oss_node.mjs delete --key \\${file.key} --force\\`);\n    console.log(\\`已删除: \\${file.key}\\`);\n  }\n}\n\"\n\necho \"✅ 备份完成！\"\n```\n\n---\n\n## 📝 示例8：批量操作\n\n### 批量上传图片\n\n```javascript\nconst { execSync } = require('child_process');\nconst fs = require('fs');\nconst path = require('path');\n\nconst imageDir = '/path/to/images';\nlet uploaded = 0;\n\nfs.readdirSync(imageDir).forEach(filename => {\n  if (filename.endsWith('.jpg') || filename.endsWith('.png') || filename.endsWith('.gif')) {\n    const localPath = path.join(imageDir, filename);\n    const key = `images/${filename}`;\n\n    try {\n      execSync(`node scripts/oss_node.mjs upload --local \"${localPath}\" --key \"${key}\"`);\n      console.log(`✅ ${filename} 上传成功`);\n      uploaded++;\n    } catch (error) {\n      console.error(`❌ ${filename} 上传失败:`, error.message);\n    }\n  }\n});\n\nconsole.log(`\\n✅ 共上传 ${uploaded} 个文件`);\n```\n\n---\n\n## 🎯 更多示例\n\n查看 [SKILL.md](../SKILL.md) 获取更多详细信息和 API 文档。\n\nFile v1.0.0:config/oss-config.example.json\n\n{\n  \"accessKeyId\": \"你的AccessKey ID\",\n  \"accessKeySecret\": \"你的AccessKey Secret\",\n  \"bucket\": \"你的存储桶名称\",\n  \"region\": \"oss-cn-hangzhou\",\n  \"domain\": \"https://你的域名.com\",\n  \"options\": {\n    \"secure\": true,\n    \"timeout\": 60000,\n    \"upload_threshold\": 1048576,\n    \"chunk_size\": 1048576,\n    \"retry_times\": 3\n  }\n}","readmeExcerpt":"Skill: aliyun-oss Owner: langhuachuanshi Summary: 阿里云 OSS 对象存储技能。支持文件上传、下载、列出、删除、获取 URL 等操作。 两层架构：Node.js SDK（优先）→ ossutil CLI。 Tags: aliyun:1.0.2, cloud:1.0.2, latest:1.0.2, oss:1.0.2, storage:1.0.2 Version history: v1.0.2 | 2026-03-06T17:10:56.423Z | auto - No file changes detected in this release. - Documentation (SKILL.md) remains unchanged from the previous version. - No new features, bug fixes, or updates inclu","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"# 进入技能目录\ncd ~/.openclaw/workspace/skills/aliyun-oss-skill\n\n# 运行自动安装\nbash scripts/setup.sh"},{"language":"bash","snippet":"bash scripts/setup.sh \\\n  --access-key-id \"YOUR_ACCESS_KEY_ID\" \\\n  --access-key-secret \"YOUR_ACCESS_KEY_SECRET\" \\\n  --region \"oss-cn-hangzhou\" \\\n  --bucket \"mybucket\""},{"language":"bash","snippet":"node scripts/oss_node.mjs test-connection"},{"language":"bash","snippet":"node scripts/oss_node.mjs upload \\\n  --local \"/path/to/file.txt\" \\\n  --key \"uploads/file.txt\""},{"language":"bash","snippet":"node scripts/oss_node.mjs list --prefix \"uploads/\" --limit 100"},{"language":"bash","snippet":"node scripts/oss_node.mjs download \\\n  --key \"uploads/file.txt\" \\\n  --local \"/path/to/save.txt\""}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: aliyun-oss\ndescription: |\n  阿里云 OSS 对象存储技能。支持文件上传、下载、列出、删除、获取 URL 等操作。\n  两层架构：Node.js SDK（优先）→ ossutil CLI。\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"☁️\",\n        \"requires\": { \"bins\": [\"node\"], \"packages\": [\"ali-oss\"] },\n        \"install\":\n          [\n            { \"id\": \"ali-oss-sdk\", \"kind\": \"node\", \"package\": \"ali-oss\", \"label\": \"Install ali-oss Node.js SDK\" },\n          ],\n      },\n  }\n---\n\n# ☁️ 阿里云 OSS 技能\n\n通过 **Node.js SDK** / **ossutil CLI** 管理阿里云对象存储。\n\n---\n\n## 🎯 执行策略（两层降级）\n\n| 优先级 | 工具 | 使用场景 |\n|--------|------|----------|\n| **1** | Node.js SDK (`ali-oss`) | 优先使用 |\n| **2** | ossutil CLI | 备选 |\n\n---\n\n## 🚀 快速开始\n\n### 1. 安装依赖\n\n```bash\n# 进入技能目录\ncd ~/.openclaw/workspace/skills/aliyun-oss-skill\n\n# 运行自动安装\nbash scripts/setup.sh\n```\n\n### 2. 配置凭证\n\n```bash\nbash scripts/setup.sh \\\n  --access-key-id \"YOUR_ACCESS_KEY_ID\" \\\n  --access-key-secret \"YOUR_ACCESS_KEY_SECRET\" \\\n  --region \"oss-cn-hangzhou\" \\\n  --bucket \"mybucket\"\n```\n\n### 3. 测试连接\n\n```bash\nnode scripts/oss_node.mjs test-connection\n```\n\n---\n\n## 📋 使用示例\n\n### 上传文件\n\n```bash\nnode scripts/oss_node.mjs upload \\\n  --local \"/path/to/file.txt\" \\\n  --key \"uploads/file.txt\"\n```\n\n### 列出文件\n\n```bash\nnode scripts/oss_node.mjs list --prefix \"uploads/\" --limit 100\n```\n\n### 下载文件\n\n```bash\nnode scripts/oss_node.mjs download \\\n  --key \"uploads/file.txt\" \\\n  --local \"/path/to/save.txt\"\n```\n\n### 删除文件\n\n```bash\nnode scripts/oss_node.mjs delete --key \"uploads/file.txt\" --force\n```\n\n### 获取文件 URL\n\n```bash\n# 公开空间\nnode scripts/oss_node.mjs url --key \"uploads/file.txt\"\n\n# 私有空间（1小时有效）\nnode scripts/oss_node.mjs url --key \"uploads/file.txt\" --private --expires 3600\n```\n\n---\n\n## 🔧 Node.js SDK API\n\n| 命令 | 说明 |\n|------|------|\n| `upload --local <path> --key <key>` | 上传文件 |\n| `download --key <key> --local <path>` | 下载文件 |\n| `list [--prefix <p>] [--limit <n>]` | 列出文件 |\n| `delete --key <key> [--force]` | 删除文件 |\n| `url --key <key> [--private] [--expires <s>]` | 获取 URL |\n| `stat --key <key>` | 文件信息 |\n| `move --src-key <a> --dest-key <b>` | 移动文件 |\n| `copy --src-key <a> --dest-key <b>` | 复制文件 |\n| `test-connection` | 测试连接 |\n\n---\n\n## ⚙️ 配置文件\n\n**config/oss-config.json**\n\n```json\n{\n  \"accessKeyId\": \"YOUR_ACCESS_KEY_ID\",\n  \"accessKeySecret\": \"YOUR_ACCESS_KEY_SECRET\",\n  \"bucket\": \"mybucket\",\n  \"region\": \"oss-cn-hangzhou\",\n  \"domain\": \"https://cdn.example.com\"\n}\n```\n\n**常用区域**：\n- `oss-cn-hangzhou` - 华东1（杭州）\n- `oss-cn-shanghai` - 华东2（上海）\n- `oss-cn-beijing` - 华北2（北京）\n- `oss-cn-shenzhen` - 华南1（深圳）\n\n---\n\n## 🐛 故障排查\n\n| 问题 | 解决 |\n|------|------|\n| `Cannot find module 'ali-oss'` | `npm install ali-oss` |\n| `403 Forbidden` | 检查 AccessKey 权限 |\n| `连接超时` | 检查区域代码和网络 |\n\n---\n\n## 📚 相关链接\n\n- [阿里云 OSS Node.js SDK](https://help.aliyun.com/document_detail/32068.html)\n- [ossutil 工具](https://help.aliyun.com/document_detail/120075.html)\n\n---\n\n## 📄 许可证\n\nMIT License"},{"path":"README.md","content":"# ☁️ 阿里云 OSS 技能\n\nOpenClaw 技能，用于管理阿里云对象存储（OSS）。\n\n## ✨ 功能\n\n- 📤 上传文件\n- 📥 下载文件\n- 📋 列出文件\n- 🗑️ 删除文件\n- 🔗 获取文件 URL（支持私有空间签名）\n- 📊 查看文件信息\n- 📁 移动/复制文件\n\n## 🚀 快速开始\n\n```bash\n# 安装依赖\nnpm install\n\n# 配置凭证\nbash scripts/setup.sh --access-key-id \"xxx\" --access-key-secret \"xxx\" --region \"oss-cn-hangzhou\" --bucket \"mybucket\"\n\n# 测试连接\nnode scripts/oss_node.mjs test-connection\n```\n\n## 📖 使用示例\n\n```bash\n# 上传\nnode scripts/oss_node.mjs upload --local file.txt --key uploads/file.txt\n\n# 列出\nnode scripts/oss_node.mjs list --prefix uploads/\n\n# 下载\nnode scripts/oss_node.mjs download --key uploads/file.txt --local file.txt\n\n# 删除\nnode scripts/oss_node.mjs delete --key uploads/file.txt --force\n\n# 获取 URL\nnode scripts/oss_node.mjs url --key uploads/file.txt\n```\n\n## 🔧 架构\n\n两层降级策略：\n1. **Node.js SDK** (`ali-oss`) - 优先使用\n2. **ossutil CLI** - 备选\n\n## 📄 许可证\n\nMIT"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn78r3ca13npsxrn5f905res8n821ssm\",\n  \"slug\": \"aliyun-oss-skill\",\n  \"version\": \"1.0.2\",\n  \"publishedAt\": 1772817056423\n}"},{"path":"docs/EXAMPLES.md","content":"# 阿里云 OSS 技能 - 使用示例\n\n本文档包含阿里云 OSS 技能的各种使用示例。\n\n---\n\n## 📤 示例1：上传文件\n\n### 在 OpenClaw 中\n\n**用户说：**\n```\n帮我上传 /backups/daily-20260301.tar.gz 到阿里云 OSS\n```\n\n**AI 执行：**\n```\n使用 Node.js SDK 脚本上传\n```\n\n**返回：**\n```\n✅ 上传成功！\n\n文件：daily-20260301.tar.gz\n大小：15.2 MB\nURL：https://bucket.oss-cn-hangzhou.aliyuncs.com/backups/daily-20260301.tar.gz\n```\n\n### 命令行方式\n\n```bash\nnode scripts/oss_node.mjs upload \\\n  --local /backups/daily-20260301.tar.gz \\\n  --key backups/daily-20260301.tar.gz\n```\n\n---\n\n## 📋 示例2：列出文件\n\n### 在 OpenClaw 中\n\n**用户说：**\n```\n列出阿里云 OSS backups 目录下的所有文件\n```\n\n**返回：**\n```\n📋 共找到 15 个文件：\n\nbackups/backup-20260301.tar.gz  - 15.2 MB  - 2026-03-01 20:00\nbackups/backup-20260228.tar.gz  - 14.8 MB  - 2026-02-28 20:00\nbackups/backup-20260227.tar.gz  - 16.1 MB  - 2026-02-27 20:00\n...\n```\n\n### 命令行方式\n\n```bash\n# 列出所有文件\nnode scripts/oss_node.mjs list\n\n# 列出指定前缀的文件\nnode scripts/oss_node.mjs list --prefix backups/ --limit 50\n\n# JSON 格式输出\nnode scripts/oss_node.mjs list --prefix backups/ --format json\n```\n\n---\n\n## 🔗 示例3：获取文件 URL\n\n### 在 OpenClaw 中\n\n**用户说：**\n```\n给我 images/photo.jpg 的访问链接，1小时有效\n```\n\n**返回：**\n```\n🔗 临时访问链接（1小时有效）：\n\nhttps://bucket.oss-cn-hangzhou.aliyuncs.com/images/photo.jpg?OSSAccessKeyId=...&Expires=...&Signature=...\n```\n\n### 命令行方式\n\n```bash\n# 公开 URL\nnode scripts/oss_node.mjs url --key images/photo.jpg\n\n# 私有 URL（1小时有效）\nnode scripts/oss_node.mjs url --key documents/report.pdf --private --expires 3600\n```\n\n---\n\n## 🗑️ 示例4：删除文件\n\n### 在 OpenClaw 中\n\n**用户说：**\n```\n删除阿里云 OSS 上的 old-backup.tar.gz\n```\n\n**AI 执行：**\n```\n1. 先确认：是否真的要删除？\n2. 用户确认后执行删除\n```\n\n**返回：**\n```\n✅ 删除成功！\n\n文件：old-backup.tar.gz\n```\n\n### 命令行方式\n\n```bash\n# 删除单个文件（需要确认）\nnode scripts/oss_node.mjs delete --key backups/old-backup.tar.gz\n\n# 强制删除（不需要确认）\nnode scripts/oss_node.mjs delete --key backups/old-backup.tar.gz --force\n\n# 批量删除\ncat > delete-list.txt << EOF\nbackups/backup-20260101.tar.gz\nbackups/backup-20260102.tar.gz\nEOF\n\nnode scripts/oss_node.mjs batch-delete --file delete-list.txt\n```\n\n---\n\n## 📊 示例5：获取文件信息\n\n### 在 OpenClaw 中\n\n**用户说：**\n```\n查看 documents/report.pdf 的详细信息\n```\n\n**返回：**\n```\n📊 文件信息：\n\n文件名：documents/report.pdf\n大小：2.5 MB\n类型：application/pdf\nETag：\"abc123...\"\n修改时间：2026-03-01 15:30:00\n```\n\n### 命令行方式\n\n```bash\nnode scripts/oss_node.mjs stat --key documents/report.pdf\n```\n\n---\n\n## 📥 示例6：下载文件\n\n### 在 OpenClaw 中\n\n**用户说：**\n```\n从阿里云 OSS 下载 documents/report.pdf 到本地\n```\n\n**返回：**\n```\n✅ 下载成功！\n\n文件：documents/report.pdf\n大小：2.5 MB\n保存到：/downloads/report.pdf\n```\n\n### 命令行方式\n\n```bash\nnode scripts/oss_node.mjs download \\\n  --key documents/report.pdf \\\n  --local /downloads/report.pdf\n```\n\n---\n\n## 🤖 示例7：自动化备份脚本\n\n### 完整脚本\n\n```bash\n#!/bin/bash\n\n# 每日备份脚本\nBACKUP_DIR=\"/backups\"\nDATE=$(date +%Y%m%d)\nBACKUP_FILE=\"backup-${DATE}.tar.gz\"\n\n# 1. 创建备份\necho \"📦 创建备份...\"\ntar -czf \"${BACKUP_DIR}/${BACKUP_FILE}\" /data\n\n# 2. 上传到阿里云 OSS\necho \"📤 上传到阿里云 OSS...\"\ncd /home/node/.openclaw/workspace/skills/aliyun-oss-skill\nnode scripts/oss_node.mjs upload \\\n  --local \"${BACKUP_DIR}/${BACKUP_FILE}\" \\\n  --key \"backups/${BACKUP_FILE}\"\n\n# 3. 清理本地旧备份（保留7天）\nech"},{"path":"skill-card.md","content":"## Description:\n\naliyun-oss helps agents manage Alibaba Cloud Object Storage (OSS) objects, including upload, download, listing, deletion, metadata inspection, moves, copies, and signed URL generation.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[langhuachuanshi](https://clawhub.ai/user/langhuachuanshi)\n\n### License/Terms of Use:\n\nMIT\n\n## Use Case:\n\nDevelopers and operators use this skill to let an agent manage files in Alibaba Cloud OSS buckets through the ali-oss Node.js SDK, with ossutil described as a fallback path. It supports common storage workflows such as backup upload, object discovery, signed URL creation, and object cleanup.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The setup flow can persist Alibaba Cloud access keys in shell startup files.\n\nMitigation: Use narrowly scoped RAM or STS credentials, avoid entering secrets in reusable shell history, remove generated exports from shell startup files, and rotate any credentials already exposed this way.\n\nRisk: Delete operations may proceed even when the documented interactive confirmation is expected.\n\nMitigation: Review delete commands before execution, avoid relying on the prompt as a safeguard, and require a fixed confirmation implementation before using destructive operations in routine workflows.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/langhuachuanshi/skills/aliyun-oss-skill)\n- [Aliyun OSS Node.js SDK documentation](https://help.aliyun.com/document_detail/32068.html)\n- [Aliyun ossutil documentation](https://help.aliyun.com/document_detail/120075.html)\n\n## Skill Output:\n\n**Output Type(s):** [guidance, shell commands, configuration, code, text]\n\n**Output Format:** [Markdown guidance with shell commands, JSON configuration examples, and command output text]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires Node.js and the ali-oss package; operates on user-provided Alibaba Cloud OSS credentials and bucket configuration.]\n\n## Skill Version(s):\n\n1.0.2 (source: server release metadata, released 2026-03-06)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"阿里云 OSS 对象存储技能。支持文件上传、下载、列出、删除、获取 URL 等操作。 两层架构：Node.js SDK（优先）→ ossutil CLI。 Skill: aliyun-oss Owner: langhuachuanshi Summary: 阿里云 OSS 对象存储技能。支持文件上传、下载、列出、删除、获取 URL 等操作。 两层架构：Node.js SDK（优先）→ ossutil CLI。 Tags: aliyun:1.0.2, cloud:1.0.2, latest:1.0.2, oss:1.0.2, storage:1.0.2 Version history: v1.0.2 | 2026-03-06T17:10:56.423Z | auto - No file changes detected in this release. - Documentation (SKILL.md) remains unchanged from the previous version. - No new features, bug fixes, or updates inclu","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":977,"uniquenessScore":54,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T16:46:00.802Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T16:46:00.802Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T21:55:12.604Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}