[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6K28GVT8EYKR9S28YEC282F":3,"skill-same:01M6K28GVT8EYKR9S28YEC282F":97},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":36,"linkOnly":37,"markdownContent":38,"markdownBody":39,"frontMatter":40,"refName":42,"commitSha":43,"skillDirectory":44,"forksCount":45,"repositoryHtmlUrl":46,"repositoryHomepageUrl":6,"ownerHtmlUrl":47,"ownerBlogUrl":48,"ownerDescription":49,"updatedAt":50,"install":51,"resources":64},"01M6K28GVT8EYKR9S28YEC282F","minipower-backend-blobstoring-dotnet",null,"Thiết lập Jarvis.BlobStoring — upload\u002Fdownload file qua IBlobStoringService với FileSystem hoặc MinIO keyed DI. Dùng khi tích hợp blob storage .NET, section FileSystem\u002FMinIO, hoặc inject IBlobStoringService.","hoangnh2412\u002Fminipower","hoangnh2412","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F9604921?v=4","01M6K2685NFX1C55B4TR54NT7S","Hoàng Nguyễn","01M6K268AEV8J57BMZJEKCJNZE",7,"MIT","https:\u002F\u002Fgithub.com\u002Fhoangnh2412\u002Fminipower\u002Fblob\u002Fmain\u002Fsrc\u002Fbackend\u002Fskills\u002Fminipower-backend-blobstoring-dotnet\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35],"dotnet","backend","minipower backend blobstoring dotnet","github","storage","file","download","filesystem","jarvis","upload","minio","khi","2026-11-10 10:12:30",false,"---\nname: minipower-backend-blobstoring-dotnet\ndescription: Thiết lập Jarvis.BlobStoring — upload\u002Fdownload file qua IBlobStoringService với FileSystem hoặc MinIO keyed DI. Dùng khi tích hợp blob storage .NET, section FileSystem\u002FMinIO, hoặc inject IBlobStoringService.\nmetadata:\n  workflow: github\n---\n\n# Jarvis.BlobStoring — Orchestrator\n\nSkill điều phối `Jarvis.BlobStoring`, `Jarvis.BlobStoring.FileSystem`, `Jarvis.BlobStoring.MinIO` trên ASP.NET Core.\n\nHướng dẫn người dùng: [README.md](README.md). API interface: [reference\u002Fiblob-api.md](reference\u002Fiblob-api.md).\n\n## Khi nào dùng workflow nào\n\n| Tình huống | Workflow |\n|---|---|\n| Project chưa có blob storing Jarvis | [workflows\u002Finit.md](workflows\u002Finit.md) |\n| Đã có một provider, thêm provider thứ hai | [workflows\u002Fadd.md](workflows\u002Fadd.md) |\n\n## Quy tắc cốt lõi\n\n- Đăng ký **keyed** `IBlobStoringService` — key `\"FileSystem\"` \u002F `\"MinIO\"` (khớp `[FromKeyedServices(\"...\")]`).\n- `Configure\u003CFileSystemOption>` \u002F `Configure\u003CMinIOOption>` từ section `FileSystem`, `MinIO` trong appsettings.\n- **Singleton** cho service (stateless client; `MinioService` tạo client trong ctor).\n- Layer thường gặp: **Infrastructure** hoặc **Host** (composition root).\n- Không commit `SecretKey` — dùng User Secrets \u002F env.\n- `Jarvis.BlobStoring.AwsS3` — **stub**, chưa dùng trong skill này.\n\n## Packages\n\n| PackageId | Version* | Khi nào |\n|---|---|---|\n| `Jarvis.BlobStoring` | 1.0.0 | Abstractions |\n| `Jarvis.BlobStoring.FileSystem` | 1.0.0 | Lưu file local |\n| `Jarvis.BlobStoring.MinIO` | 1.0.0 | S3-compatible object storage |\n\n\\*Xem csproj repo Jarvis.\n\n## Providers (atomic)\n\n| Provider | Path |\n|---|---|\n| FileSystem | [providers\u002Ffilesystem\u002FSKILL.md](providers\u002Ffilesystem\u002FSKILL.md) |\n| MinIO | [providers\u002Fminio\u002FSKILL.md](providers\u002Fminio\u002FSKILL.md) |\n\n## Templates\n\n- [templates\u002Fprogram-setup.cs](templates\u002Fprogram-setup.cs) — extension đăng ký DI\n- [templates\u002Fappsettings-blob.json](templates\u002Fappsettings-blob.json)\n- [templates\u002Fblob-service-usage.cs](templates\u002Fblob-service-usage.cs) — inject keyed service\n\n## Output bắt buộc\n\n- PackageReference trên Host\u002FInfrastructure\n- `*BlobStoringExtension.cs` hoặc block trong `HostLayerExtension`\n- `appsettings` sections `FileSystem` \u002F `MinIO`\n- Service\u002Fhost inject `[FromKeyedServices(\"MinIO\")]` hoặc `\"FileSystem\"` resolve được\n- `dotnet build` thành công\n- Code C# theo [minipower-backend-convention-dotnet](..\u002Fminipower-backend-convention-dotnet\u002FSKILL.md) — `dotnet format --verify-no-changes` sạch trên file đã chạm\n- File đặt đúng layer + hướng phụ thuộc theo [minipower-backend-architecture-dotnet](..\u002Fminipower-backend-architecture-dotnet\u002FSKILL.md) — `dotnet test -c Debug` xanh, kể cả `{Product}.ArchitectureTests`\n","# Jarvis.BlobStoring — Orchestrator\n\nSkill điều phối `Jarvis.BlobStoring`, `Jarvis.BlobStoring.FileSystem`, `Jarvis.BlobStoring.MinIO` trên ASP.NET Core.\n\nHướng dẫn người dùng: [README.md](README.md). API interface: [reference\u002Fiblob-api.md](reference\u002Fiblob-api.md).\n\n## Khi nào dùng workflow nào\n\n| Tình huống | Workflow |\n|---|---|\n| Project chưa có blob storing Jarvis | [workflows\u002Finit.md](workflows\u002Finit.md) |\n| Đã có một provider, thêm provider thứ hai | [workflows\u002Fadd.md](workflows\u002Fadd.md) |\n\n## Quy tắc cốt lõi\n\n- Đăng ký **keyed** `IBlobStoringService` — key `\"FileSystem\"` \u002F `\"MinIO\"` (khớp `[FromKeyedServices(\"...\")]`).\n- `Configure\u003CFileSystemOption>` \u002F `Configure\u003CMinIOOption>` từ section `FileSystem`, `MinIO` trong appsettings.\n- **Singleton** cho service (stateless client; `MinioService` tạo client trong ctor).\n- Layer thường gặp: **Infrastructure** hoặc **Host** (composition root).\n- Không commit `SecretKey` — dùng User Secrets \u002F env.\n- `Jarvis.BlobStoring.AwsS3` — **stub**, chưa dùng trong skill này.\n\n## Packages\n\n| PackageId | Version* | Khi nào |\n|---|---|---|\n| `Jarvis.BlobStoring` | 1.0.0 | Abstractions |\n| `Jarvis.BlobStoring.FileSystem` | 1.0.0 | Lưu file local |\n| `Jarvis.BlobStoring.MinIO` | 1.0.0 | S3-compatible object storage |\n\n\\*Xem csproj repo Jarvis.\n\n## Providers (atomic)\n\n| Provider | Path |\n|---|---|\n| FileSystem | [providers\u002Ffilesystem\u002FSKILL.md](providers\u002Ffilesystem\u002FSKILL.md) |\n| MinIO | [providers\u002Fminio\u002FSKILL.md](providers\u002Fminio\u002FSKILL.md) |\n\n## Templates\n\n- [templates\u002Fprogram-setup.cs](templates\u002Fprogram-setup.cs) — extension đăng ký DI\n- [templates\u002Fappsettings-blob.json](templates\u002Fappsettings-blob.json)\n- [templates\u002Fblob-service-usage.cs](templates\u002Fblob-service-usage.cs) — inject keyed service\n\n## Output bắt buộc\n\n- PackageReference trên Host\u002FInfrastructure\n- `*BlobStoringExtension.cs` hoặc block trong `HostLayerExtension`\n- `appsettings` sections `FileSystem` \u002F `MinIO`\n- Service\u002Fhost inject `[FromKeyedServices(\"MinIO\")]` hoặc `\"FileSystem\"` resolve được\n- `dotnet build` thành công\n- Code C# theo [minipower-backend-convention-dotnet](..\u002Fminipower-backend-convention-dotnet\u002FSKILL.md) — `dotnet format --verify-no-changes` sạch trên file đã chạm\n- File đặt đúng layer + hướng phụ thuộc theo [minipower-backend-architecture-dotnet](..\u002Fminipower-backend-architecture-dotnet\u002FSKILL.md) — `dotnet test -c Debug` xanh, kể cả `{Product}.ArchitectureTests`\n",{"name":5,"metadata":41,"description":7},{"workflow":27},"main","6a33a408b13c0b55ce2c7c5558e6f239e9c091b2","src\u002Fbackend\u002Fskills\u002Fminipower-backend-blobstoring-dotnet",0,"https:\u002F\u002Fgithub.com\u002Fhoangnh2412\u002Fminipower","https:\u002F\u002Fgithub.com\u002Fhoangnh2412","http:\u002F\u002Fhoangnh.com","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fhoangnh91\u002F","2026-11-09 04:22:29",{"source":8,"skillName":5,"commands":52,"prompt":62,"zipAvailable":63},[53,56,59],{"tool":54,"command":55},"npx","npx skills add hoangnh2412\u002Fminipower --skill minipower-backend-blobstoring-dotnet",{"tool":57,"command":58},"bunx","bunx skills add hoangnh2412\u002Fminipower --skill minipower-backend-blobstoring-dotnet",{"tool":60,"command":61},"pnpm","pnpm dlx skills add hoangnh2412\u002Fminipower --skill minipower-backend-blobstoring-dotnet","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fhoangnh2412\u002Fminipower\u002Fblob\u002Fmain\u002Fsrc\u002Fbackend\u002Fskills\u002Fminipower-backend-blobstoring-dotnet\u002FSKILL.md",true,[65,71,75,79,85,89,93],{"path":66,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":69,"sourceHtmlUrl":70},"README.md","REFERENCE","参考文档",1776,"https:\u002F\u002Fgithub.com\u002Fhoangnh2412\u002Fminipower\u002Fblob\u002Fmain\u002Fsrc\u002Fbackend\u002Fskills\u002Fminipower-backend-blobstoring-dotnet\u002FREADME.md",{"path":72,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":73,"sourceHtmlUrl":74},"reference\u002Fiblob-api.md",793,"https:\u002F\u002Fgithub.com\u002Fhoangnh2412\u002Fminipower\u002Fblob\u002Fmain\u002Fsrc\u002Fbackend\u002Fskills\u002Fminipower-backend-blobstoring-dotnet\u002Freference\u002Fiblob-api.md",{"path":76,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":77,"sourceHtmlUrl":78},"templates\u002Fappsettings-blob.json",349,"https:\u002F\u002Fgithub.com\u002Fhoangnh2412\u002Fminipower\u002Fblob\u002Fmain\u002Fsrc\u002Fbackend\u002Fskills\u002Fminipower-backend-blobstoring-dotnet\u002Ftemplates\u002Fappsettings-blob.json",{"path":80,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":83,"sourceHtmlUrl":84},"templates\u002Fblob-service-usage.cs","OTHER","其他",598,"https:\u002F\u002Fgithub.com\u002Fhoangnh2412\u002Fminipower\u002Fblob\u002Fmain\u002Fsrc\u002Fbackend\u002Fskills\u002Fminipower-backend-blobstoring-dotnet\u002Ftemplates\u002Fblob-service-usage.cs",{"path":86,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":87,"sourceHtmlUrl":88},"templates\u002Fprogram-setup.cs",842,"https:\u002F\u002Fgithub.com\u002Fhoangnh2412\u002Fminipower\u002Fblob\u002Fmain\u002Fsrc\u002Fbackend\u002Fskills\u002Fminipower-backend-blobstoring-dotnet\u002Ftemplates\u002Fprogram-setup.cs",{"path":90,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":91,"sourceHtmlUrl":92},"workflows\u002Fadd.md",1058,"https:\u002F\u002Fgithub.com\u002Fhoangnh2412\u002Fminipower\u002Fblob\u002Fmain\u002Fsrc\u002Fbackend\u002Fskills\u002Fminipower-backend-blobstoring-dotnet\u002Fworkflows\u002Fadd.md",{"path":94,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":95,"sourceHtmlUrl":96},"workflows\u002Finit.md",2049,"https:\u002F\u002Fgithub.com\u002Fhoangnh2412\u002Fminipower\u002Fblob\u002Fmain\u002Fsrc\u002Fbackend\u002Fskills\u002Fminipower-backend-blobstoring-dotnet\u002Fworkflows\u002Finit.md",[98,121,139,152,167,175],{"skillNo":99,"name":100,"nameZh":6,"description":101,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":107,"publishedAt":36},"01M6K2MXJSPKZ79031YX0HB546","minipower-vcs-gitlab","Tra GitLab (search, issue, pipeline, MR), soạn MR\u002Fcomment, tạo MR và commit\u002Fpush sau L2. Dùng khi merge request, GitLab MCP, code_provider gitlab — không scaffold .NET, không force-push.","https:\u002F\u002Fgithub.com\u002Fhoangnh2412\u002Fminipower\u002Fblob\u002Fmain\u002Fsrc\u002Fvcs\u002Fskills\u002Fminipower-vcs-gitlab\u002FSKILL.md",[104],{"categoryNo":105,"categoryName":106,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[108,109,110,27,111,112,113,114,115,116,117,118,119,120,35],"gitlab","minipower vcs gitlab","MCP","commit","merge","scaffold","code","push","search","pipeline","issue","provider","l2",{"skillNo":122,"name":123,"nameZh":6,"description":124,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":125,"categories":126,"keywords":128,"publishedAt":36},"01M6K2MQXWTZWXG7PKARYT0RNY","minipower-toolbox-skill-author","Viết và soát skill lá-rời Minipower (minipower-{module}-{capability}) — chọn module bằng 3 câu hỏi ADR-022, dựng cây SKILL.md\u002FREADME.md\u002Fworkflows\u002Fproviders, đặt description kích hoạt được, cập nhật hub và test canh. Hỏi người xác nhận trước mọi quyết định, không tự chốt. Dùng khi tạo skill mới, thêm provider\u002Fpattern\u002Fworkflow, mở module mới, hoặc soát skill có sẵn lệch chuẩn.","https:\u002F\u002Fgithub.com\u002Fhoangnh2412\u002Fminipower\u002Fblob\u002Fmain\u002Fsrc\u002Ftoolbox\u002Fskills\u002Fminipower-toolbox-skill-author\u002FSKILL.md",[127],{"categoryNo":105,"categoryName":106,"taxonomyType":21,"taxonomyTypeDesc":22},[129,130,119,131,132,133,134,35,135,136,27,137,138],"minipower toolbox skill author","Providers","pattern","hub","README","module","adr","workflows","workflow","test",{"skillNo":140,"name":141,"nameZh":6,"description":142,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":143,"categories":144,"keywords":145,"publishedAt":36},"01M6K2MJD0DJNJA538148044K6","minipower-tasks-lark","Đọc, lọc, tìm, soạn nháp và ghi task Lark (tasklist \u002F task) theo L1–L3. Dùng khi việc trên Lark, sprint, tasklist, \"tìm task\", \"tạo task\", tasks_provider lark — không dùng cho tin nhắn nhóm hay wiki.","https:\u002F\u002Fgithub.com\u002Fhoangnh2412\u002Fminipower\u002Fblob\u002Fmain\u002Fsrc\u002Ftasks\u002Fskills\u002Fminipower-tasks-lark\u002FSKILL.md",[],[146,147,148,35,27,149,119,150,151],"tasks","lark","minipower tasks lark","wiki","task","sprint",{"skillNo":153,"name":154,"nameZh":6,"description":155,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":156,"categories":157,"keywords":158,"publishedAt":36},"01M6K2ME2K0QBN64PQKSB2W3VX","minipower-support-registry","Rà registry DOC theo project_mode, nhắc owner thiếu ID hoặc chỗ lưu sai. Dùng khi doc-registry, thiếu DOC, rà soát tiêu chuẩn — không tự sửa FR, không init.","https:\u002F\u002Fgithub.com\u002Fhoangnh2412\u002Fminipower\u002Fblob\u002Fmain\u002Fsrc\u002Fsupport\u002Fskills\u002Fminipower-support-registry\u002FSKILL.md",[],[159,160,161,162,27,163,164,165,35,166],"minipower support registry","registry","support","id","init","doc","project","mode",{"skillNo":168,"name":169,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":170,"categories":171,"keywords":172,"publishedAt":36},"01M6K2MB1B4C4AP9VCSRBAT83D","minipower-support-publish","https:\u002F\u002Fgithub.com\u002Fhoangnh2412\u002Fminipower\u002Fblob\u002Fmain\u002Fsrc\u002Fsupport\u002Fskills\u002Fminipower-support-publish\u002FSKILL.md",[],[173,174,161],"publish","minipower support publish",{"skillNo":176,"name":177,"nameZh":6,"description":178,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":179,"categories":180,"keywords":182,"publishedAt":36},"01M6K2M4Q4N1QHA0VGD58WFJNF","minipower-router","Phân loại intent Minipower rồi gợi ý đúng một pack nghề hoặc kênh. Dùng khi làm gì tiếp, chọn skill, dispatcher, không biết mở pack nào — không tự gọi MCP L3, không spawn agent.","https:\u002F\u002Fgithub.com\u002Fhoangnh2412\u002Fminipower\u002Fblob\u002Fmain\u002Fsrc\u002Frouter\u002Fskills\u002Fminipower-router\u002FSKILL.md",[181],{"categoryNo":105,"categoryName":106,"taxonomyType":21,"taxonomyTypeDesc":22},[183,184,27,185,186,187,188,35,189,110],"minipower router","router","dispatcher","spawn","intent","spawn agent","pack"]