Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add lh17708357536-gif/flutter-cn-overseas-app-skills --skill object-storagegit clone --depth 1 https://github.com/lh17708357536-gif/flutter-cn-overseas-app-skillsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/lh17708357536-gif/flutter-cn-overseas-app-skills/object-storage)<a href="https://agentmods.dev/skills/lh17708357536-gif/flutter-cn-overseas-app-skills/object-storage"><img src="https://agentmods.dev/badge/skills/lh17708357536-gif/flutter-cn-overseas-app-skills/object-storage/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/lh17708357536-gif/flutter-cn-overseas-app-skills/object-storage"><img src="https://agentmods.dev/badge/skills/lh17708357536-gif/flutter-cn-overseas-app-skills/object-storage.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00107 | $0.02644 |
| Opus 5 | $0.00053 | $0.01322 |
| Sonnet 5 | $0.00021 | $0.00529 |
| Haiku 4.5 | $0.00011 | $0.00264 |
Grade A, and why
object-storage scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 12d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 203 lines — stays where its author put it; the contents beside it link to each section on GitHub.
对象存储多供应商 Skill(OSS / COS / S3)
让"存哪家"变成一行 env。所有
<PLACEHOLDER>替换为项目实际值。核心是UploadService抽象——业务代码只调uploadFile()/getFileUrl(),不关心底层是本地磁盘还是哪家云。
1. 供应商选型矩阵
| 供应商 | 适合 | 备注 |
|---|---|---|
| local(本地磁盘) | 开发起步 / 单机小量 | 过渡方案,多机会 404(§7) |
| 阿里云 OSS | 国内主力 | 与阿里云生态(Green 审核)配套 |
| 腾讯云 COS | 国内备选 / 已用腾讯云 | API 近似 S3 |
| AWS S3 | 海外 | Google Play/海外用户就近 |
| 兼容 S3 的(MinIO/R2/COS-S3) | 自托管/多云 | 都可走 S3 SDK |
跨区域策略:国内数据 → OSS/COS(国内节点快、合规);海外数据 → S3(就近)。可按数据 country 路由(类比 maps-location),或简单起见全站一家 + CDN。
2. ★ UploadService 抽象(唯一入口)
// common/services/upload.service.ts
export interface UploadResult { filePath: string; url: string; size: number; }
@Injectable()
export class UploadService {
private readonly driver = process.env.UPLOAD_STORAGE || 'local'; // local | oss | cos | s3
async uploadFile(file: Express.Multer.File, opts: { module: string; tenantId: string }): Promise<UploadResult> {
const key = this.buildKey(file, opts); // ★ 路径统一由此生成,禁止业务层拼
switch (this.driver) {
case 'oss': return this.putOSS(key, file);
case 'cos': return this.putCOS(key, file);
case 's3': return this.putS3(key, file);
default: return this.putLocal(key, file);
}
}
getFileUrl(filePath: string): string {
if (process.env.CDN_DOMAIN) return `${process.env.CDN_DOMAIN}/${filePath}`; // 有 CDN 优先
switch (this.driver) {
case 'oss': return `https://${process.env.OSS_BUCKET}.${process.env.OSS_REGION}.aliyuncs.com/${filePath}`;
case 'cos': return `https://${process.env.COS_BUCKET}.cos.${process.env.COS_REGION}.myqcloud.com/${filePath}`;
case 's3': return `https://${process.env.S3_BUCKET}.s3.${process.env.S3_REGION}.amazonaws.com/${filePath}`;
default: return `/uploads/${filePath}`;
}
}
private buildKey(file, opts) {
// module/tenantId/yyyymm/uuid.ext —— 统一路径规则
return `${opts.module}/${opts.tenantId}/${yyyymm()}/${uuid()}${extname(file.originalname)}`;
}
}
铁律(对应 nestjs-backend-conventions §14):
- ★ 新增上传必须走
UploadService,禁止writeFileSync直接写盘 - ★ 禁止在业务 Service 拼上传路径,统一
buildKey - ★ 切换供应商只改 env,业务代码零改动
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 12d ago First seen · 203 lines · 107 tokens per session scan A 07ec110bfb7d
object-storage is a skill published in the GitHub repository lh17708357536-gif/flutter-cn-overseas-app-skills (20 stars, last pushed 2mo ago), licensed MIT. It adds 107 tokens to every session and 2,644 once invoked, about $0.0005 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
domestic-integration
A reference for integrating Chinese services, including WeChat Pay, Alipay, Alibaba Cloud, Tencent Cloud, Huawei Cloud, messaging platforms, and SMS providers.
firebase-cloud-functions
Use for Firebase Cloud Functions callable functions, HTTP functions, triggers, server-side validation, security, deployment and local testing.
stripe-projects
Provision SaaS services + sync creds via Stripe Projects.
azure-eventhub-dotnet
Azure Event Hubs SDK for .NET. Use for high-throughput event streaming: sending events (EventHubProducerClient, EventHubBufferedProducerClient), receiving events (EventProcessorClient with checkpointing), partition management, and real-time data ingestion. Triggers: "Event Hubs", "event streaming"…
azure-mgmt-botservice-dotnet
Azure Resource Manager SDK for Bot Service in .NET. Management plane operations for creating and managing Azure Bot resources, channels (Teams, DirectLine, Slack), and connection settings. Triggers: "Bot Service", "BotResource", "Azure Bot", "DirectLine channel", "Teams channel", "bot management .NET", "create bot".
wikipedia
Search and read Wikipedia via x wkp — MediaWiki API, no API key, zero install; query, extract, suggest, and DDG route in one module. Load for wiki, wikipedia, encyclopedia lookup, article summary.