{
  "schemaVersion": "1.0",
  "item": {
    "slug": "aliyun-oss-2",
    "name": "Pywayne Aliyun Oss",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/wangyendt/aliyun-oss-2",
    "canonicalUrl": "https://clawhub.ai/wangyendt/aliyun-oss-2",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/aliyun-oss-2",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=aliyun-oss-2",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/aliyun-oss-2"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/aliyun-oss-2",
    "agentPageUrl": "https://openagent3.xyz/skills/aliyun-oss-2/agent",
    "manifestUrl": "https://openagent3.xyz/skills/aliyun-oss-2/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/aliyun-oss-2/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Pywayne Aliyun OSS",
        "body": "pywayne.aliyun_oss.OssManager provides a comprehensive toolkit for managing Aliyun OSS (Object Storage Service) buckets."
      },
      {
        "title": "Quick Start",
        "body": "from pywayne.aliyun_oss import OssManager\n\n# Initialize with write permissions\noss = OssManager(\n    endpoint=\"https://oss-cn-xxx.aliyuncs.com\",\n    bucket_name=\"my-bucket\",\n    api_key=\"your_api_key\",\n    api_secret=\"your_api_secret\"\n)\n\n# Initialize with read-only (anonymous) access\noss = OssManager(\n    endpoint=\"https://oss-cn-xxx.aliyuncs.com\",\n    bucket_name=\"my-bucket\",\n    verbose=False  # Disable verbose output\n)"
      },
      {
        "title": "Upload a local file",
        "body": "oss.upload_file(key=\"data/sample.txt\", file_path=\"./sample.txt\")"
      },
      {
        "title": "Upload text content",
        "body": "oss.upload_text(key=\"config/settings.json\", text='{\"key\": \"value\"}')"
      },
      {
        "title": "Upload an image (numpy array)",
        "body": "import cv2\nimage = cv2.imread(\"photo.jpg\")\noss.upload_image(key=\"photos/photo.jpg\", image=image)"
      },
      {
        "title": "Upload entire directory",
        "body": "oss.upload_directory(local_path=\"./local_folder\", prefix=\"remote_folder/\")"
      },
      {
        "title": "Download a single file",
        "body": "# Preserve directory structure: downloads/data/sample.txt\noss.download_file(key=\"data/sample.txt\", root_dir=\"./downloads\")\n\n# Use only basename: downloads/sample.txt\noss.download_file(key=\"data/sample.txt\", root_dir=\"./downloads\", use_basename=True)"
      },
      {
        "title": "Download files with prefix",
        "body": "oss.download_files_with_prefix(prefix=\"photos/\", root_dir=\"./downloads\")"
      },
      {
        "title": "Download entire directory",
        "body": "oss.download_directory(prefix=\"photos/\", local_path=\"./downloads\")"
      },
      {
        "title": "List all keys in bucket",
        "body": "keys = oss.list_all_keys()  # Returns sorted list"
      },
      {
        "title": "List keys with prefix",
        "body": "keys = oss.list_keys_with_prefix(prefix=\"data/\")"
      },
      {
        "title": "List directory contents (first level only)",
        "body": "contents = oss.list_directory_contents(prefix=\"data/\")\n# Returns: [(\"file1.txt\", False), (\"subdir\", True), ...]"
      },
      {
        "title": "Read file content as string",
        "body": "content = oss.read_file_content(key=\"config/settings.json\")"
      },
      {
        "title": "Check if file exists",
        "body": "if oss.key_exists(\"data/sample.txt\"):\n    print(\"File exists\")"
      },
      {
        "title": "Get file metadata",
        "body": "metadata = oss.get_file_metadata(\"data/sample.txt\")\n# Returns: {'content_length': 1234, 'last_modified': ..., 'etag': ..., 'content_type': ...}"
      },
      {
        "title": "Delete a single file",
        "body": "oss.delete_file(key=\"data/sample.txt\")"
      },
      {
        "title": "Delete files with prefix",
        "body": "oss.delete_files_with_prefix(prefix=\"temp/\")"
      },
      {
        "title": "Copy object within bucket",
        "body": "oss.copy_object(source_key=\"data/original.txt\", target_key=\"backup/original.txt\")"
      },
      {
        "title": "Move object within bucket",
        "body": "oss.move_object(source_key=\"data/temp.txt\", target_key=\"archive/temp.txt\")"
      },
      {
        "title": "Important Notes",
        "body": "Write permissions: Upload, delete, copy, and move operations require api_key and api_secret\nAnonymous access: Omit api_key and api_secret for read-only access\nDirectory handling: OSS doesn't have real directories - use prefixes (keys ending with /)\nNatural sorting: list_all_keys() and list_keys_with_prefix() use natural sorting by default\nVerbose output: All methods print status messages when verbose=True (default)"
      }
    ],
    "body": "Pywayne Aliyun OSS\n\npywayne.aliyun_oss.OssManager provides a comprehensive toolkit for managing Aliyun OSS (Object Storage Service) buckets.\n\nQuick Start\nfrom pywayne.aliyun_oss import OssManager\n\n# Initialize with write permissions\noss = OssManager(\n    endpoint=\"https://oss-cn-xxx.aliyuncs.com\",\n    bucket_name=\"my-bucket\",\n    api_key=\"your_api_key\",\n    api_secret=\"your_api_secret\"\n)\n\n# Initialize with read-only (anonymous) access\noss = OssManager(\n    endpoint=\"https://oss-cn-xxx.aliyuncs.com\",\n    bucket_name=\"my-bucket\",\n    verbose=False  # Disable verbose output\n)\n\nUpload Operations\nUpload a local file\noss.upload_file(key=\"data/sample.txt\", file_path=\"./sample.txt\")\n\nUpload text content\noss.upload_text(key=\"config/settings.json\", text='{\"key\": \"value\"}')\n\nUpload an image (numpy array)\nimport cv2\nimage = cv2.imread(\"photo.jpg\")\noss.upload_image(key=\"photos/photo.jpg\", image=image)\n\nUpload entire directory\noss.upload_directory(local_path=\"./local_folder\", prefix=\"remote_folder/\")\n\nDownload Operations\nDownload a single file\n# Preserve directory structure: downloads/data/sample.txt\noss.download_file(key=\"data/sample.txt\", root_dir=\"./downloads\")\n\n# Use only basename: downloads/sample.txt\noss.download_file(key=\"data/sample.txt\", root_dir=\"./downloads\", use_basename=True)\n\nDownload files with prefix\noss.download_files_with_prefix(prefix=\"photos/\", root_dir=\"./downloads\")\n\nDownload entire directory\noss.download_directory(prefix=\"photos/\", local_path=\"./downloads\")\n\nList Operations\nList all keys in bucket\nkeys = oss.list_all_keys()  # Returns sorted list\n\nList keys with prefix\nkeys = oss.list_keys_with_prefix(prefix=\"data/\")\n\nList directory contents (first level only)\ncontents = oss.list_directory_contents(prefix=\"data/\")\n# Returns: [(\"file1.txt\", False), (\"subdir\", True), ...]\n\nRead Operations\nRead file content as string\ncontent = oss.read_file_content(key=\"config/settings.json\")\n\nCheck if file exists\nif oss.key_exists(\"data/sample.txt\"):\n    print(\"File exists\")\n\nGet file metadata\nmetadata = oss.get_file_metadata(\"data/sample.txt\")\n# Returns: {'content_length': 1234, 'last_modified': ..., 'etag': ..., 'content_type': ...}\n\nDelete Operations\nDelete a single file\noss.delete_file(key=\"data/sample.txt\")\n\nDelete files with prefix\noss.delete_files_with_prefix(prefix=\"temp/\")\n\nCopy and Move Operations\nCopy object within bucket\noss.copy_object(source_key=\"data/original.txt\", target_key=\"backup/original.txt\")\n\nMove object within bucket\noss.move_object(source_key=\"data/temp.txt\", target_key=\"archive/temp.txt\")\n\nImportant Notes\nWrite permissions: Upload, delete, copy, and move operations require api_key and api_secret\nAnonymous access: Omit api_key and api_secret for read-only access\nDirectory handling: OSS doesn't have real directories - use prefixes (keys ending with /)\nNatural sorting: list_all_keys() and list_keys_with_prefix() use natural sorting by default\nVerbose output: All methods print status messages when verbose=True (default)"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/wangyendt/aliyun-oss-2",
    "publisherUrl": "https://clawhub.ai/wangyendt/aliyun-oss-2",
    "owner": "wangyendt",
    "version": "0.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/aliyun-oss-2",
    "downloadUrl": "https://openagent3.xyz/downloads/aliyun-oss-2",
    "agentUrl": "https://openagent3.xyz/skills/aliyun-oss-2/agent",
    "manifestUrl": "https://openagent3.xyz/skills/aliyun-oss-2/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/aliyun-oss-2/agent.md"
  }
}