Files
market/skills/s3-storage-operations/SKILL.md
xyx a582f0f4f9 fix: 为 #16 路径替换涉及的技能补 per-skill version (#22)
## 背景 / Background

#16 (4f7037a) 将 16 个 SKILL.md 的 `~/.desirecore` 路径批量替换为
`${DESIRECORE_ROOT}`,但只升了 `manifest.json`,**未升任何 per-skill version**。

客户端按 SKILL.md frontmatter 的 per-skill `version` 做 semver 同步:version
不变即判定「无更新」而永久跳过,导致已升级用户的全局技能正文停留在替换前的旧内容(与线上不同步)。

#16 (4f7037a) bulk-replaced `~/.desirecore` with `${DESIRECORE_ROOT}` in
16 SKILL.md files but only bumped `manifest.json`, leaving every
per-skill `version` untouched. Clients sync by per-skill semver, so an
unchanged version is treated as "no update" and skipped forever —
upgraded users' global skills stay frozen on pre-replacement content.

## 改动 / Changes

- 对 #16 触及且至今仍未升号的 **14 个在册技能** 各 patch +1
- `manifest.json` 1.2.2 → 1.2.3(沿用 #16「内容改动同步升 manifest」的约定)
- 退役技能 `minimax-image-gen` / `minimax-tts`(不在 builtin-skills.json,不下发)跳过
- diff 为纯 version 行,未触动正文

Bumps the 14 in-manifest skills changed by #16 that were never
version-bumped; manifest 1.2.2 → 1.2.3; retired skills skipped.
Version-line-only diff.
2026-06-03 17:46:13 +08:00

7.2 KiB

name, description, version, type, risk_level, status, disable-model-invocation, tags, metadata, market
name description version type risk_level status disable-model-invocation tags metadata market
s3-storage-operations 操作 S3 兼容对象存储(上传、下载、列举、删除),通过 DesireCore HTTP API 调用。Use when 用户要求上传/下载/分享文件、需要生成下载链接、或工作流产出文件需要持久化存储与分发。 2.0.3 procedural medium enabled true
storage
s3
upload
download
sharing
author version updated_at i18n
desirecore 2.0.1 2026-03-13
default_locale source_locale locales zh-CN en-US
en-US zh-CN
zh-CN
en-US
name short_desc description body source_hash translated_by
对象存储操作 通过 DesireCore HTTP API 操作 S3 兼容对象存储,支持上传、下载、列举、删除与分享链接 操作 S3 兼容对象存储(上传、下载、列举、删除),通过 DesireCore HTTP API 调用。Use when 用户要求上传/下载/分享文件、需要生成下载链接、或工作流产出文件需要持久化存储与分发。 ./SKILL.zh-CN.md sha256:6ea8e1375f12de72 human
name short_desc description body source_hash translated_by translated_at
Object Storage Operations Operate S3-compatible object storage via DesireCore HTTP API — upload, download, list, delete, and share links Operate S3-compatible object storage (upload, download, list, delete) via the DesireCore HTTP API. Use when the user requests file upload/download/sharing, needs a download link, or when workflow outputs need persistent storage and distribution. ./SKILL.md sha256:6ea8e1375f12de72 human 2026-05-03
icon category maintainer compatible_agents channel
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><defs><linearGradient id="s3so-a" x1="4" y1="3" x2="20" y2="21" gradientUnits="userSpaceOnUse"><stop stop-color="#5AC8FA"/><stop offset="1" stop-color="#AF52DE"/></linearGradient></defs><ellipse cx="11" cy="5" rx="7" ry="2.75" fill="url(#s3so-a)" fill-opacity="0.14" stroke="url(#s3so-a)" stroke-width="1.5"/><path d="M4 5v5.5c0 1.52 3.13 2.75 7 2.75s7-1.23 7-2.75V5" fill="url(#s3so-a)" fill-opacity="0.08" stroke="url(#s3so-a)" stroke-width="1.5"/><path d="M4 10.5V16c0 1.52 3.13 2.75 7 2.75s7-1.23 7-2.75v-5.5" fill="url(#s3so-a)" fill-opacity="0.08" stroke="url(#s3so-a)" stroke-width="1.5"/><rect x="15.5" y="8.5" width="5" height="5" rx="1.4" fill="#34C759" fill-opacity="0.15" stroke="#34C759" stroke-width="1.4"/><path d="M18 7v10" stroke="#34C759" stroke-width="1.8" stroke-linecap="round"/><path d="M16.5 8.5 18 7l1.5 1.5" stroke="#34C759" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/><path d="M16.5 15.5 18 17l1.5-1.5" stroke="#34C759" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg> data
name verified
DesireCore Official true
latest

s3-storage-operations Skill

L0: One-line Summary

Lets the Agent operate S3-compatible object storage through the DesireCore HTTP API — uploading, downloading, listing, and deleting files, and generating shareable download links.

L1: Overview and Use Cases

Capability Description

s3-storage-operations is a Tool-Skill that interacts with the user's pre-configured S3-compatible object storage (AWS S3, Qiniu Kodo, MinIO, etc.) via the DesireCore Agent Service HTTP API.

Architecture change (v2.0): S3 operations have been migrated from a built-in tool to HTTP REST API endpoints, callable via curl from any environment. Claude Code's Global Skill (desirecore-s3-storage) contains the full curl invocation guide.

Core principle: the user's S3 connection is pre-configured under Resources → Object Storage. The API resolves the connection automatically — the Agent does not need to worry about connection details and can focus on the operation itself.

Use Cases

  • The user asks to "upload a file", "put it in storage", or "save to S3"
  • The user asks for "a download link", "share this file", or "download from S3"
  • The user asks to "see what's in storage" or "list files in the bucket"
  • The user asks to "delete from S3" or "clean up temp files"
  • A workflow produces files (reports, exports, images) that need to be shared via URL
  • The Agent needs to read data stored in S3 for further processing

L2: Detailed Specification

Port Discovery

PORT=$(cat ${DESIRECORE_ROOT}/agent-service.port)

API Endpoints

Endpoint Method Description
/api/s3/connections GET List available connection summaries
/api/s3/upload POST Upload a file (multipart/form-data)
/api/s3/download GET Generate a download link or download a file
/api/s3/list GET List objects
/api/s3/objects DELETE Delete an object

Quick Reference

PORT=$(cat ${DESIRECORE_ROOT}/agent-service.port)

# 列出连接
curl -k "https://127.0.0.1:${PORT}/api/s3/connections"

# 上传
curl -k -X POST "https://127.0.0.1:${PORT}/api/s3/upload" \
  -F "file=@local-file.pdf" -F "key=remote/path.pdf"

# 获取下载链接
curl -k "https://127.0.0.1:${PORT}/api/s3/download?key=remote/path.pdf"

# 列出对象
curl -k "https://127.0.0.1:${PORT}/api/s3/list?prefix=remote/"

# 删除
curl -k -X DELETE "https://127.0.0.1:${PORT}/api/s3/objects" \
  -H "Content-Type: application/json" -d '{"key":"remote/path.pdf"}'

Connection Resolution

All API endpoints accept an optional connection_id parameter. When unspecified, the system resolves it automatically with the following priority:

Specified ID  →  isDefault=true  →  first status="connected"  →  first connection

Error Handling

All errors return a unified format:

{ "success": false, "error": "描述信息", "code": "ERROR_CODE" }

Error codes: NO_CONNECTION | NOT_FOUND | UPLOAD_FAILED | DOWNLOAD_FAILED | DELETE_FAILED | LIST_FAILED | INVALID_REQUEST

Security Red Lines

Rule Description
No uploading sensitive files Never upload .env, credential files, private keys, etc.
Confirm before deletion Always confirm intent with the user before calling the delete API
Do not assume a connection exists When the API returns NO_CONNECTION, guide the user to add a connection in the UI

Integration Points

  • S3 Routeslib/agent-service/routes/s3-routes.ts: HTTP API implementation
  • S3 Clientlib/agent-service/s3-client.ts: AWS V4 signing, CRUD operations
  • Connection Resolverlib/agent-service/s3-connection-resolver.ts: automatic connection selection
  • Global Skill Synclib/agent-service/global-skill-sync.ts: writes the Global Skill on startup
  • Port Discovery${DESIRECORE_ROOT}/agent-service.port: port discovery file