@hivehub/rulebook 5.1.3 → 5.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/commands/continue.md +33 -33
- package/.claude/commands/ralph-config.md +112 -112
- package/.claude/commands/ralph-history.md +110 -110
- package/.claude/commands/ralph-init.md +72 -72
- package/.claude/commands/ralph-pause-resume.md +105 -105
- package/.claude/commands/ralph-run.md +101 -101
- package/.claude/commands/ralph-status.md +76 -76
- package/.claude/commands/rulebook-decision-create.md +55 -55
- package/.claude/commands/rulebook-decision-list.md +15 -15
- package/.claude/commands/rulebook-knowledge-add.md +41 -41
- package/.claude/commands/rulebook-knowledge-list.md +15 -15
- package/.claude/commands/rulebook-learn-capture.md +48 -48
- package/.claude/commands/rulebook-learn-list.md +13 -13
- package/.claude/commands/rulebook-memory-save.md +48 -48
- package/.claude/commands/rulebook-memory-search.md +47 -47
- package/.claude/commands/rulebook-task-apply.md +85 -67
- package/.claude/commands/rulebook-task-archive.md +103 -94
- package/.claude/commands/rulebook-task-create.md +93 -93
- package/.claude/commands/rulebook-task-list.md +42 -42
- package/.claude/commands/rulebook-task-show.md +52 -52
- package/.claude/commands/rulebook-task-validate.md +53 -53
- package/.claude-plugin/marketplace.json +28 -28
- package/.claude-plugin/plugin.json +8 -8
- package/README.md +25 -43
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +11 -0
- package/dist/cli/commands.js.map +1 -1
- package/dist/core/agent-template-engine.js +28 -28
- package/dist/core/generator.js +28 -28
- package/dist/core/task-manager.d.ts +23 -0
- package/dist/core/task-manager.d.ts.map +1 -1
- package/dist/core/task-manager.js +161 -27
- package/dist/core/task-manager.js.map +1 -1
- package/dist/index.js +0 -0
- package/dist/mcp/rulebook-server.js +3 -3
- package/dist/mcp/rulebook-server.js.map +1 -1
- package/dist/memory/memory-store.js +91 -91
- package/package.json +21 -22
- package/templates/agents/accessibility-reviewer.md +43 -43
- package/templates/agents/api-designer.md +42 -42
- package/templates/agents/architect.md +51 -51
- package/templates/agents/build-engineer.md +36 -36
- package/templates/agents/code-reviewer.md +47 -47
- package/templates/agents/compiler/codegen-debugger.md +34 -34
- package/templates/agents/compiler/stdlib-engineer.md +28 -28
- package/templates/agents/compiler/test-coverage-guardian.md +31 -31
- package/templates/agents/context-intelligence.md +52 -52
- package/templates/agents/database-architect.md +41 -41
- package/templates/agents/devops-engineer.md +42 -42
- package/templates/agents/docs-writer.md +38 -38
- package/templates/agents/game-engine/cpp-core-expert.md +35 -35
- package/templates/agents/game-engine/render-engineer.md +22 -22
- package/templates/agents/game-engine/shader-engineer.md +38 -38
- package/templates/agents/game-engine/systems-integration.md +43 -43
- package/templates/agents/generic/code-reviewer.md +41 -41
- package/templates/agents/generic/docs-writer.md +25 -25
- package/templates/agents/generic/project-manager.md +36 -36
- package/templates/agents/generic/researcher.md +34 -34
- package/templates/agents/generic/test-engineer.md +41 -41
- package/templates/agents/i18n-engineer.md +42 -42
- package/templates/agents/implementer.md +42 -42
- package/templates/agents/migration-engineer.md +42 -42
- package/templates/agents/mobile/platform-specialist.md +22 -22
- package/templates/agents/mobile/ui-engineer.md +22 -22
- package/templates/agents/performance-engineer.md +49 -49
- package/templates/agents/refactoring-agent.md +41 -41
- package/templates/agents/researcher.md +38 -38
- package/templates/agents/security-reviewer.md +40 -40
- package/templates/agents/team-lead.md +37 -37
- package/templates/agents/tester.md +48 -48
- package/templates/agents/ux-reviewer.md +43 -43
- package/templates/agents/web-app/api-designer.md +22 -22
- package/templates/agents/web-app/backend-engineer.md +30 -30
- package/templates/agents/web-app/database-engineer.md +22 -22
- package/templates/agents/web-app/frontend-engineer.md +29 -29
- package/templates/agents/web-app/security-reviewer.md +32 -32
- package/templates/ci/rulebook-review.yml +26 -26
- package/templates/cli/AIDER.md +49 -49
- package/templates/cli/AMAZON_Q.md +25 -25
- package/templates/cli/AUGGIE.md +32 -32
- package/templates/cli/CLAUDE.md +117 -117
- package/templates/cli/CLINE.md +99 -99
- package/templates/cli/CODEBUDDY.md +20 -20
- package/templates/cli/CODEIUM.md +20 -20
- package/templates/cli/CODEX.md +21 -21
- package/templates/cli/CONTINUE.md +34 -34
- package/templates/cli/CURSOR_CLI.md +62 -62
- package/templates/cli/FACTORY.md +18 -18
- package/templates/cli/GEMINI.md +35 -35
- package/templates/cli/KILOCODE.md +18 -18
- package/templates/cli/OPENCODE.md +18 -18
- package/templates/cli/_GENERIC_TEMPLATE.md +29 -29
- package/templates/commands/rulebook-decision-create.md +55 -55
- package/templates/commands/rulebook-decision-list.md +15 -15
- package/templates/commands/rulebook-knowledge-add.md +41 -41
- package/templates/commands/rulebook-knowledge-list.md +15 -15
- package/templates/commands/rulebook-learn-capture.md +48 -48
- package/templates/commands/rulebook-learn-list.md +13 -13
- package/templates/commands/rulebook-memory-save.md +48 -48
- package/templates/commands/rulebook-memory-search.md +47 -47
- package/templates/commands/rulebook-task-apply.md +67 -67
- package/templates/commands/rulebook-task-archive.md +94 -94
- package/templates/commands/rulebook-task-create.md +93 -93
- package/templates/commands/rulebook-task-list.md +42 -42
- package/templates/commands/rulebook-task-show.md +52 -52
- package/templates/commands/rulebook-task-validate.md +53 -53
- package/templates/core/AGENTS_LEAN.md +25 -25
- package/templates/core/AGENTS_OVERRIDE.md +16 -16
- package/templates/core/AGENT_AUTOMATION.md +296 -296
- package/templates/core/DAG.md +304 -304
- package/templates/core/DECISIONS.md +38 -38
- package/templates/core/DOCUMENTATION_RULES.md +36 -36
- package/templates/core/KNOWLEDGE.md +49 -49
- package/templates/core/MULTI_AGENT.md +74 -74
- package/templates/core/PLANS.md +28 -28
- package/templates/core/QUALITY_ENFORCEMENT.md +68 -68
- package/templates/core/RALPH.md +471 -471
- package/templates/core/RULEBOOK.md +1947 -1947
- package/templates/core/TIER1_PROHIBITIONS.md +154 -154
- package/templates/core/TOKEN_OPTIMIZATION.md +49 -49
- package/templates/frameworks/ANGULAR.md +36 -36
- package/templates/frameworks/DJANGO.md +83 -83
- package/templates/frameworks/ELECTRON.md +147 -147
- package/templates/frameworks/FLASK.md +38 -38
- package/templates/frameworks/FLUTTER.md +55 -55
- package/templates/frameworks/JQUERY.md +32 -32
- package/templates/frameworks/LARAVEL.md +38 -38
- package/templates/frameworks/NESTJS.md +43 -43
- package/templates/frameworks/NEXTJS.md +127 -127
- package/templates/frameworks/NUXT.md +40 -40
- package/templates/frameworks/RAILS.md +66 -66
- package/templates/frameworks/REACT.md +38 -38
- package/templates/frameworks/REACT_NATIVE.md +47 -47
- package/templates/frameworks/SPRING.md +39 -39
- package/templates/frameworks/SYMFONY.md +36 -36
- package/templates/frameworks/VUE.md +36 -36
- package/templates/frameworks/ZEND.md +35 -35
- package/templates/git/CI_CD_PATTERNS.md +661 -661
- package/templates/git/GITHUB_ACTIONS.md +728 -728
- package/templates/git/GITLAB_CI.md +730 -730
- package/templates/git/GIT_WORKFLOW.md +1192 -1192
- package/templates/git/SECRETS_MANAGEMENT.md +585 -585
- package/templates/hooks/COMMIT_MSG.md +530 -530
- package/templates/hooks/POST_CHECKOUT.md +546 -546
- package/templates/hooks/PREPARE_COMMIT_MSG.md +619 -619
- package/templates/hooks/PRE_COMMIT.md +414 -414
- package/templates/hooks/PRE_PUSH.md +601 -601
- package/templates/ides/CONTINUE_RULES.md +16 -16
- package/templates/ides/COPILOT.md +37 -37
- package/templates/ides/COPILOT_INSTRUCTIONS.md +23 -23
- package/templates/ides/CURSOR.md +43 -43
- package/templates/ides/GEMINI_RULES.md +17 -17
- package/templates/ides/JETBRAINS_AI.md +35 -35
- package/templates/ides/REPLIT.md +36 -36
- package/templates/ides/TABNINE.md +29 -29
- package/templates/ides/VSCODE.md +40 -40
- package/templates/ides/WINDSURF.md +36 -36
- package/templates/ides/WINDSURF_RULES.md +14 -14
- package/templates/ides/ZED.md +32 -32
- package/templates/ides/cursor-mdc/go.mdc +24 -24
- package/templates/ides/cursor-mdc/python.mdc +24 -24
- package/templates/ides/cursor-mdc/quality.mdc +25 -25
- package/templates/ides/cursor-mdc/ralph.mdc +39 -39
- package/templates/ides/cursor-mdc/rulebook.mdc +38 -38
- package/templates/ides/cursor-mdc/rust.mdc +24 -24
- package/templates/ides/cursor-mdc/typescript.mdc +25 -25
- package/templates/languages/C.md +333 -333
- package/templates/languages/CPP.md +743 -743
- package/templates/languages/CSHARP.md +417 -417
- package/templates/languages/ELIXIR.md +454 -454
- package/templates/languages/ERLANG.md +361 -361
- package/templates/languages/GO.md +645 -645
- package/templates/languages/HASKELL.md +177 -177
- package/templates/languages/JAVA.md +607 -607
- package/templates/languages/JAVASCRIPT.md +631 -631
- package/templates/languages/JULIA.md +97 -97
- package/templates/languages/KOTLIN.md +511 -511
- package/templates/languages/LISP.md +100 -100
- package/templates/languages/LUA.md +74 -74
- package/templates/languages/OBJECTIVEC.md +90 -90
- package/templates/languages/PHP.md +416 -416
- package/templates/languages/PYTHON.md +682 -682
- package/templates/languages/RUBY.md +421 -421
- package/templates/languages/RUST.md +477 -477
- package/templates/languages/SAS.md +73 -73
- package/templates/languages/SCALA.md +348 -348
- package/templates/languages/SOLIDITY.md +580 -580
- package/templates/languages/SQL.md +137 -137
- package/templates/languages/SWIFT.md +466 -466
- package/templates/languages/TYPESCRIPT.md +591 -591
- package/templates/languages/ZIG.md +265 -265
- package/templates/modules/ATLASSIAN.md +255 -255
- package/templates/modules/CONTEXT7.md +54 -54
- package/templates/modules/FIGMA.md +267 -267
- package/templates/modules/GITHUB_MCP.md +64 -64
- package/templates/modules/GRAFANA.md +328 -328
- package/templates/modules/MEMORY.md +126 -126
- package/templates/modules/NOTION.md +247 -247
- package/templates/modules/PLAYWRIGHT.md +90 -90
- package/templates/modules/RULEBOOK_MCP.md +156 -156
- package/templates/modules/SERENA.md +337 -337
- package/templates/modules/SUPABASE.md +223 -223
- package/templates/modules/SYNAP.md +69 -69
- package/templates/modules/VECTORIZER.md +63 -63
- package/templates/modules/sequential-thinking.md +42 -42
- package/templates/ralph/ralph-history.bat +4 -4
- package/templates/ralph/ralph-history.sh +5 -5
- package/templates/ralph/ralph-init.bat +5 -5
- package/templates/ralph/ralph-init.sh +5 -5
- package/templates/ralph/ralph-pause.bat +5 -5
- package/templates/ralph/ralph-pause.sh +5 -5
- package/templates/ralph/ralph-run.bat +5 -5
- package/templates/ralph/ralph-run.sh +5 -5
- package/templates/ralph/ralph-status.bat +4 -4
- package/templates/ralph/ralph-status.sh +5 -5
- package/templates/rules/follow-task-sequence.md +36 -36
- package/templates/rules/git-safety.md +29 -29
- package/templates/rules/incremental-tests.md +29 -29
- package/templates/rules/knowledge-base-usage.md +41 -0
- package/templates/rules/no-deferred.md +31 -31
- package/templates/rules/no-shortcuts.md +30 -30
- package/templates/rules/research-first.md +30 -30
- package/templates/rules/sequential-editing.md +21 -21
- package/templates/rules/session-workflow.md +24 -24
- package/templates/rules/task-decomposition.md +32 -32
- package/templates/services/AZURE_BLOB.md +184 -184
- package/templates/services/CASSANDRA.md +239 -239
- package/templates/services/DATADOG.md +26 -26
- package/templates/services/DOCKER.md +124 -124
- package/templates/services/DOCKER_COMPOSE.md +168 -168
- package/templates/services/DYNAMODB.md +308 -308
- package/templates/services/ELASTICSEARCH.md +347 -347
- package/templates/services/GCS.md +178 -178
- package/templates/services/HELM.md +194 -194
- package/templates/services/INFLUXDB.md +265 -265
- package/templates/services/KAFKA.md +341 -341
- package/templates/services/KUBERNETES.md +208 -208
- package/templates/services/MARIADB.md +183 -183
- package/templates/services/MEMCACHED.md +242 -242
- package/templates/services/MINIO.md +201 -201
- package/templates/services/MONGODB.md +268 -268
- package/templates/services/MYSQL.md +358 -358
- package/templates/services/NEO4J.md +247 -247
- package/templates/services/OPENTELEMETRY.md +25 -25
- package/templates/services/ORACLE.md +290 -290
- package/templates/services/PINO.md +24 -24
- package/templates/services/POSTGRESQL.md +326 -326
- package/templates/services/PROMETHEUS.md +33 -33
- package/templates/services/RABBITMQ.md +286 -286
- package/templates/services/REDIS.md +292 -292
- package/templates/services/S3.md +298 -298
- package/templates/services/SENTRY.md +23 -23
- package/templates/services/SQLITE.md +294 -294
- package/templates/services/SQLSERVER.md +294 -294
- package/templates/services/WINSTON.md +30 -30
- package/templates/skills/cli/aider/SKILL.md +59 -59
- package/templates/skills/cli/amazon-q/SKILL.md +35 -35
- package/templates/skills/cli/auggie/SKILL.md +42 -42
- package/templates/skills/cli/claude/SKILL.md +42 -42
- package/templates/skills/cli/cline/SKILL.md +42 -42
- package/templates/skills/cli/codebuddy/SKILL.md +30 -30
- package/templates/skills/cli/codeium/SKILL.md +30 -30
- package/templates/skills/cli/codex/SKILL.md +31 -31
- package/templates/skills/cli/continue/SKILL.md +44 -44
- package/templates/skills/cli/cursor-cli/SKILL.md +38 -38
- package/templates/skills/cli/factory/SKILL.md +28 -28
- package/templates/skills/cli/gemini/SKILL.md +45 -45
- package/templates/skills/cli/kilocode/SKILL.md +28 -28
- package/templates/skills/cli/opencode/SKILL.md +28 -28
- package/templates/skills/core/agent-automation/SKILL.md +194 -194
- package/templates/skills/core/dag/SKILL.md +314 -314
- package/templates/skills/core/documentation-rules/SKILL.md +46 -46
- package/templates/skills/core/quality-enforcement/SKILL.md +78 -78
- package/templates/skills/core/rulebook/SKILL.md +176 -176
- package/templates/skills/dev/accessibility/SKILL.md +17 -17
- package/templates/skills/dev/api-design/SKILL.md +15 -15
- package/templates/skills/dev/architect/SKILL.md +17 -17
- package/templates/skills/dev/build-fix/SKILL.md +17 -17
- package/templates/skills/dev/db-design/SKILL.md +15 -15
- package/templates/skills/dev/debug/SKILL.md +16 -16
- package/templates/skills/dev/deploy/SKILL.md +17 -17
- package/templates/skills/dev/docs/SKILL.md +17 -17
- package/templates/skills/dev/migrate/SKILL.md +15 -15
- package/templates/skills/dev/perf/SKILL.md +17 -17
- package/templates/skills/dev/refactor/SKILL.md +17 -17
- package/templates/skills/dev/research/SKILL.md +14 -14
- package/templates/skills/dev/review/SKILL.md +18 -18
- package/templates/skills/dev/security-audit/SKILL.md +17 -17
- package/templates/skills/frameworks/angular/SKILL.md +46 -46
- package/templates/skills/frameworks/django/SKILL.md +93 -93
- package/templates/skills/frameworks/electron/SKILL.md +157 -157
- package/templates/skills/frameworks/flask/SKILL.md +48 -48
- package/templates/skills/frameworks/flutter/SKILL.md +65 -65
- package/templates/skills/frameworks/jquery/SKILL.md +42 -42
- package/templates/skills/frameworks/laravel/SKILL.md +48 -48
- package/templates/skills/frameworks/nestjs/SKILL.md +53 -53
- package/templates/skills/frameworks/nextjs/SKILL.md +137 -137
- package/templates/skills/frameworks/nuxt/SKILL.md +50 -50
- package/templates/skills/frameworks/rails/SKILL.md +76 -76
- package/templates/skills/frameworks/react/SKILL.md +48 -48
- package/templates/skills/frameworks/react-native/SKILL.md +57 -57
- package/templates/skills/frameworks/spring/SKILL.md +49 -49
- package/templates/skills/frameworks/symfony/SKILL.md +46 -46
- package/templates/skills/frameworks/vue/SKILL.md +46 -46
- package/templates/skills/frameworks/zend/SKILL.md +45 -45
- package/templates/skills/ides/copilot/SKILL.md +47 -47
- package/templates/skills/ides/cursor/SKILL.md +53 -53
- package/templates/skills/ides/jetbrains-ai/SKILL.md +45 -45
- package/templates/skills/ides/replit/SKILL.md +46 -46
- package/templates/skills/ides/tabnine/SKILL.md +39 -39
- package/templates/skills/ides/vscode/SKILL.md +50 -50
- package/templates/skills/ides/windsurf/SKILL.md +46 -46
- package/templates/skills/ides/zed/SKILL.md +42 -42
- package/templates/skills/languages/c/SKILL.md +343 -343
- package/templates/skills/languages/cpp/SKILL.md +753 -753
- package/templates/skills/languages/csharp/SKILL.md +427 -427
- package/templates/skills/languages/elixir/SKILL.md +464 -464
- package/templates/skills/languages/erlang/SKILL.md +371 -371
- package/templates/skills/languages/go/SKILL.md +655 -655
- package/templates/skills/languages/haskell/SKILL.md +187 -187
- package/templates/skills/languages/java/SKILL.md +617 -617
- package/templates/skills/languages/javascript/SKILL.md +641 -641
- package/templates/skills/languages/julia/SKILL.md +107 -107
- package/templates/skills/languages/kotlin/SKILL.md +521 -521
- package/templates/skills/languages/lisp/SKILL.md +110 -110
- package/templates/skills/languages/lua/SKILL.md +84 -84
- package/templates/skills/languages/objectivec/SKILL.md +100 -100
- package/templates/skills/languages/php/SKILL.md +426 -426
- package/templates/skills/languages/python/SKILL.md +692 -692
- package/templates/skills/languages/ruby/SKILL.md +431 -431
- package/templates/skills/languages/rust/SKILL.md +487 -487
- package/templates/skills/languages/sas/SKILL.md +83 -83
- package/templates/skills/languages/scala/SKILL.md +358 -358
- package/templates/skills/languages/solidity/SKILL.md +590 -590
- package/templates/skills/languages/sql/SKILL.md +147 -147
- package/templates/skills/languages/swift/SKILL.md +476 -476
- package/templates/skills/languages/typescript/SKILL.md +302 -302
- package/templates/skills/languages/zig/SKILL.md +275 -275
- package/templates/skills/modules/atlassian/SKILL.md +265 -265
- package/templates/skills/modules/context7/SKILL.md +64 -64
- package/templates/skills/modules/figma/SKILL.md +277 -277
- package/templates/skills/modules/github-mcp/SKILL.md +74 -74
- package/templates/skills/modules/grafana/SKILL.md +338 -338
- package/templates/skills/modules/memory/SKILL.md +73 -73
- package/templates/skills/modules/notion/SKILL.md +257 -257
- package/templates/skills/modules/playwright/SKILL.md +100 -100
- package/templates/skills/modules/rulebook-mcp/SKILL.md +166 -166
- package/templates/skills/modules/serena/SKILL.md +347 -347
- package/templates/skills/modules/supabase/SKILL.md +233 -233
- package/templates/skills/modules/synap/SKILL.md +79 -79
- package/templates/skills/modules/vectorizer/SKILL.md +73 -73
- package/templates/skills/services/azure-blob/SKILL.md +194 -194
- package/templates/skills/services/cassandra/SKILL.md +249 -249
- package/templates/skills/services/dynamodb/SKILL.md +318 -318
- package/templates/skills/services/elasticsearch/SKILL.md +357 -357
- package/templates/skills/services/gcs/SKILL.md +188 -188
- package/templates/skills/services/influxdb/SKILL.md +275 -275
- package/templates/skills/services/kafka/SKILL.md +351 -351
- package/templates/skills/services/mariadb/SKILL.md +193 -193
- package/templates/skills/services/memcached/SKILL.md +252 -252
- package/templates/skills/services/minio/SKILL.md +211 -211
- package/templates/skills/services/mongodb/SKILL.md +278 -278
- package/templates/skills/services/mysql/SKILL.md +368 -368
- package/templates/skills/services/neo4j/SKILL.md +257 -257
- package/templates/skills/services/oracle/SKILL.md +300 -300
- package/templates/skills/services/postgresql/SKILL.md +336 -336
- package/templates/skills/services/rabbitmq/SKILL.md +296 -296
- package/templates/skills/services/redis/SKILL.md +302 -302
- package/templates/skills/services/s3/SKILL.md +308 -308
- package/templates/skills/services/sqlite/SKILL.md +304 -304
- package/templates/skills/services/sqlserver/SKILL.md +304 -304
- package/templates/skills/workflows/ralph/SKILL.md +309 -309
- package/templates/skills/workflows/ralph/install.sh +87 -87
- package/templates/skills/workflows/ralph/manifest.json +158 -158
|
@@ -1,201 +1,201 @@
|
|
|
1
|
-
<!-- MINIO:START -->
|
|
2
|
-
# MinIO S3-Compatible Storage Instructions
|
|
3
|
-
|
|
4
|
-
**CRITICAL**: Use MinIO for S3-compatible object storage, self-hosted file storage, and development/testing with S3 APIs.
|
|
5
|
-
|
|
6
|
-
## Core Features
|
|
7
|
-
|
|
8
|
-
### Connection
|
|
9
|
-
```typescript
|
|
10
|
-
// Using @aws-sdk/client-s3 (S3-compatible)
|
|
11
|
-
import { S3Client, PutObjectCommand, GetObjectCommand } from '@aws-sdk/client-s3'
|
|
12
|
-
|
|
13
|
-
const s3Client = new S3Client({
|
|
14
|
-
endpoint: process.env.MINIO_ENDPOINT || 'http://localhost:9000',
|
|
15
|
-
region: process.env.MINIO_REGION || 'us-east-1',
|
|
16
|
-
credentials: {
|
|
17
|
-
accessKeyId: process.env.MINIO_ACCESS_KEY || 'minioadmin',
|
|
18
|
-
secretAccessKey: process.env.MINIO_SECRET_KEY || 'minioadmin',
|
|
19
|
-
},
|
|
20
|
-
forcePathStyle: true, // Required for MinIO
|
|
21
|
-
})
|
|
22
|
-
|
|
23
|
-
// Using minio-js
|
|
24
|
-
import * as MinIO from 'minio'
|
|
25
|
-
|
|
26
|
-
const minioClient = new MinIO.Client({
|
|
27
|
-
endPoint: process.env.MINIO_ENDPOINT?.replace('http://', '').replace('https://', '') || 'localhost',
|
|
28
|
-
port: parseInt(process.env.MINIO_PORT || '9000'),
|
|
29
|
-
useSSL: process.env.MINIO_USE_SSL === 'true',
|
|
30
|
-
accessKey: process.env.MINIO_ACCESS_KEY || 'minioadmin',
|
|
31
|
-
secretKey: process.env.MINIO_SECRET_KEY || 'minioadmin',
|
|
32
|
-
})
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
### Basic Operations
|
|
36
|
-
```typescript
|
|
37
|
-
// Using S3 SDK
|
|
38
|
-
// Create bucket
|
|
39
|
-
await s3Client.send(new CreateBucketCommand({
|
|
40
|
-
Bucket: 'my-bucket',
|
|
41
|
-
}))
|
|
42
|
-
|
|
43
|
-
// Upload file
|
|
44
|
-
await s3Client.send(new PutObjectCommand({
|
|
45
|
-
Bucket: 'my-bucket',
|
|
46
|
-
Key: 'path/to/file.jpg',
|
|
47
|
-
Body: fileBuffer,
|
|
48
|
-
ContentType: 'image/jpeg',
|
|
49
|
-
}))
|
|
50
|
-
|
|
51
|
-
// Download file
|
|
52
|
-
const response = await s3Client.send(new GetObjectCommand({
|
|
53
|
-
Bucket: 'my-bucket',
|
|
54
|
-
Key: 'path/to/file.jpg',
|
|
55
|
-
}))
|
|
56
|
-
const fileContent = await response.Body?.transformToByteArray()
|
|
57
|
-
|
|
58
|
-
// Using MinIO SDK
|
|
59
|
-
// Upload file
|
|
60
|
-
await minioClient.putObject('my-bucket', 'path/to/file.jpg', fileBuffer, fileBuffer.length, {
|
|
61
|
-
'Content-Type': 'image/jpeg',
|
|
62
|
-
})
|
|
63
|
-
|
|
64
|
-
// Download file
|
|
65
|
-
const dataStream = await minioClient.getObject('my-bucket', 'path/to/file.jpg')
|
|
66
|
-
const chunks: Buffer[] = []
|
|
67
|
-
for await (const chunk of dataStream) {
|
|
68
|
-
chunks.push(chunk)
|
|
69
|
-
}
|
|
70
|
-
const fileContent = Buffer.concat(chunks)
|
|
71
|
-
|
|
72
|
-
// List objects
|
|
73
|
-
const objectsStream = minioClient.listObjects('my-bucket', 'prefix/', true)
|
|
74
|
-
for await (const obj of objectsStream) {
|
|
75
|
-
console.log(obj.name, obj.size)
|
|
76
|
-
}
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
### Advanced Features
|
|
80
|
-
```typescript
|
|
81
|
-
// Presigned URL (S3 SDK)
|
|
82
|
-
import { getSignedUrl } from '@aws-sdk/s3-request-presigner'
|
|
83
|
-
|
|
84
|
-
const command = new PutObjectCommand({
|
|
85
|
-
Bucket: 'my-bucket',
|
|
86
|
-
Key: 'uploads/file.jpg',
|
|
87
|
-
ContentType: 'image/jpeg',
|
|
88
|
-
})
|
|
89
|
-
|
|
90
|
-
const presignedUrl = await getSignedUrl(s3Client, command, { expiresIn: 3600 })
|
|
91
|
-
|
|
92
|
-
// Presigned URL (MinIO SDK)
|
|
93
|
-
const url = await minioClient.presignedPutObject('my-bucket', 'uploads/file.jpg', 3600)
|
|
94
|
-
|
|
95
|
-
// Bucket policies
|
|
96
|
-
const policy = {
|
|
97
|
-
Version: '2012-10-17',
|
|
98
|
-
Statement: [
|
|
99
|
-
{
|
|
100
|
-
Effect: 'Allow',
|
|
101
|
-
Principal: { AWS: ['*'] },
|
|
102
|
-
Action: ['s3:GetObject'],
|
|
103
|
-
Resource: ['arn:aws:s3:::my-bucket/*'],
|
|
104
|
-
},
|
|
105
|
-
],
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
await minioClient.setBucketPolicy('my-bucket', JSON.stringify(policy))
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
## Common Patterns
|
|
112
|
-
|
|
113
|
-
### File Upload Handler
|
|
114
|
-
```typescript
|
|
115
|
-
async function uploadFile(file: Buffer, filename: string, userId: string) {
|
|
116
|
-
const key = `users/${userId}/${Date.now()}-${filename}`
|
|
117
|
-
|
|
118
|
-
await s3Client.send(new PutObjectCommand({
|
|
119
|
-
Bucket: process.env.MINIO_BUCKET,
|
|
120
|
-
Key: key,
|
|
121
|
-
Body: file,
|
|
122
|
-
ContentType: getContentType(filename),
|
|
123
|
-
Metadata: {
|
|
124
|
-
userId,
|
|
125
|
-
originalName: filename,
|
|
126
|
-
},
|
|
127
|
-
}))
|
|
128
|
-
|
|
129
|
-
return {
|
|
130
|
-
key,
|
|
131
|
-
url: `${process.env.MINIO_ENDPOINT}/${process.env.MINIO_BUCKET}/${key}`,
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
## Best Practices
|
|
137
|
-
|
|
138
|
-
✅ **DO:**
|
|
139
|
-
- Use S3-compatible APIs for portability
|
|
140
|
-
- Set appropriate content types
|
|
141
|
-
- Use presigned URLs for client uploads
|
|
142
|
-
- Implement proper error handling
|
|
143
|
-
- Use bucket policies for access control
|
|
144
|
-
- Enable versioning for important data
|
|
145
|
-
- Monitor storage usage
|
|
146
|
-
- Use lifecycle policies
|
|
147
|
-
- Implement retry logic
|
|
148
|
-
- Use TLS in production
|
|
149
|
-
|
|
150
|
-
❌ **DON'T:**
|
|
151
|
-
- Store sensitive data without encryption
|
|
152
|
-
- Use default credentials in production
|
|
153
|
-
- Hardcode endpoint URLs
|
|
154
|
-
- Ignore error handling
|
|
155
|
-
- Skip content-type validation
|
|
156
|
-
- Ignore access policies
|
|
157
|
-
- Skip monitoring
|
|
158
|
-
- Use HTTP in production
|
|
159
|
-
- Ignore storage limits
|
|
160
|
-
- Store large files without chunking
|
|
161
|
-
|
|
162
|
-
## Configuration
|
|
163
|
-
|
|
164
|
-
### Environment Variables
|
|
165
|
-
```bash
|
|
166
|
-
MINIO_ENDPOINT=http://localhost:9000
|
|
167
|
-
MINIO_ENDPOINT=https://minio.example.com
|
|
168
|
-
MINIO_PORT=9000
|
|
169
|
-
MINIO_USE_SSL=false
|
|
170
|
-
MINIO_ACCESS_KEY=minioadmin
|
|
171
|
-
MINIO_SECRET_KEY=minioadmin
|
|
172
|
-
MINIO_BUCKET=my-bucket
|
|
173
|
-
MINIO_REGION=us-east-1
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
### Docker Compose
|
|
177
|
-
```yaml
|
|
178
|
-
services:
|
|
179
|
-
minio:
|
|
180
|
-
image: minio/minio:latest
|
|
181
|
-
ports:
|
|
182
|
-
- "9000:9000" # API
|
|
183
|
-
- "9001:9001" # Console
|
|
184
|
-
environment:
|
|
185
|
-
MINIO_ROOT_USER: minioadmin
|
|
186
|
-
MINIO_ROOT_PASSWORD: securepassword
|
|
187
|
-
command: server /data --console-address ":9001"
|
|
188
|
-
volumes:
|
|
189
|
-
- minio_data:/data
|
|
190
|
-
healthcheck:
|
|
191
|
-
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
|
|
192
|
-
interval: 30s
|
|
193
|
-
timeout: 20s
|
|
194
|
-
retries: 3
|
|
195
|
-
|
|
196
|
-
volumes:
|
|
197
|
-
minio_data:
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
<!-- MINIO:END -->
|
|
201
|
-
|
|
1
|
+
<!-- MINIO:START -->
|
|
2
|
+
# MinIO S3-Compatible Storage Instructions
|
|
3
|
+
|
|
4
|
+
**CRITICAL**: Use MinIO for S3-compatible object storage, self-hosted file storage, and development/testing with S3 APIs.
|
|
5
|
+
|
|
6
|
+
## Core Features
|
|
7
|
+
|
|
8
|
+
### Connection
|
|
9
|
+
```typescript
|
|
10
|
+
// Using @aws-sdk/client-s3 (S3-compatible)
|
|
11
|
+
import { S3Client, PutObjectCommand, GetObjectCommand } from '@aws-sdk/client-s3'
|
|
12
|
+
|
|
13
|
+
const s3Client = new S3Client({
|
|
14
|
+
endpoint: process.env.MINIO_ENDPOINT || 'http://localhost:9000',
|
|
15
|
+
region: process.env.MINIO_REGION || 'us-east-1',
|
|
16
|
+
credentials: {
|
|
17
|
+
accessKeyId: process.env.MINIO_ACCESS_KEY || 'minioadmin',
|
|
18
|
+
secretAccessKey: process.env.MINIO_SECRET_KEY || 'minioadmin',
|
|
19
|
+
},
|
|
20
|
+
forcePathStyle: true, // Required for MinIO
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
// Using minio-js
|
|
24
|
+
import * as MinIO from 'minio'
|
|
25
|
+
|
|
26
|
+
const minioClient = new MinIO.Client({
|
|
27
|
+
endPoint: process.env.MINIO_ENDPOINT?.replace('http://', '').replace('https://', '') || 'localhost',
|
|
28
|
+
port: parseInt(process.env.MINIO_PORT || '9000'),
|
|
29
|
+
useSSL: process.env.MINIO_USE_SSL === 'true',
|
|
30
|
+
accessKey: process.env.MINIO_ACCESS_KEY || 'minioadmin',
|
|
31
|
+
secretKey: process.env.MINIO_SECRET_KEY || 'minioadmin',
|
|
32
|
+
})
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Basic Operations
|
|
36
|
+
```typescript
|
|
37
|
+
// Using S3 SDK
|
|
38
|
+
// Create bucket
|
|
39
|
+
await s3Client.send(new CreateBucketCommand({
|
|
40
|
+
Bucket: 'my-bucket',
|
|
41
|
+
}))
|
|
42
|
+
|
|
43
|
+
// Upload file
|
|
44
|
+
await s3Client.send(new PutObjectCommand({
|
|
45
|
+
Bucket: 'my-bucket',
|
|
46
|
+
Key: 'path/to/file.jpg',
|
|
47
|
+
Body: fileBuffer,
|
|
48
|
+
ContentType: 'image/jpeg',
|
|
49
|
+
}))
|
|
50
|
+
|
|
51
|
+
// Download file
|
|
52
|
+
const response = await s3Client.send(new GetObjectCommand({
|
|
53
|
+
Bucket: 'my-bucket',
|
|
54
|
+
Key: 'path/to/file.jpg',
|
|
55
|
+
}))
|
|
56
|
+
const fileContent = await response.Body?.transformToByteArray()
|
|
57
|
+
|
|
58
|
+
// Using MinIO SDK
|
|
59
|
+
// Upload file
|
|
60
|
+
await minioClient.putObject('my-bucket', 'path/to/file.jpg', fileBuffer, fileBuffer.length, {
|
|
61
|
+
'Content-Type': 'image/jpeg',
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
// Download file
|
|
65
|
+
const dataStream = await minioClient.getObject('my-bucket', 'path/to/file.jpg')
|
|
66
|
+
const chunks: Buffer[] = []
|
|
67
|
+
for await (const chunk of dataStream) {
|
|
68
|
+
chunks.push(chunk)
|
|
69
|
+
}
|
|
70
|
+
const fileContent = Buffer.concat(chunks)
|
|
71
|
+
|
|
72
|
+
// List objects
|
|
73
|
+
const objectsStream = minioClient.listObjects('my-bucket', 'prefix/', true)
|
|
74
|
+
for await (const obj of objectsStream) {
|
|
75
|
+
console.log(obj.name, obj.size)
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Advanced Features
|
|
80
|
+
```typescript
|
|
81
|
+
// Presigned URL (S3 SDK)
|
|
82
|
+
import { getSignedUrl } from '@aws-sdk/s3-request-presigner'
|
|
83
|
+
|
|
84
|
+
const command = new PutObjectCommand({
|
|
85
|
+
Bucket: 'my-bucket',
|
|
86
|
+
Key: 'uploads/file.jpg',
|
|
87
|
+
ContentType: 'image/jpeg',
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
const presignedUrl = await getSignedUrl(s3Client, command, { expiresIn: 3600 })
|
|
91
|
+
|
|
92
|
+
// Presigned URL (MinIO SDK)
|
|
93
|
+
const url = await minioClient.presignedPutObject('my-bucket', 'uploads/file.jpg', 3600)
|
|
94
|
+
|
|
95
|
+
// Bucket policies
|
|
96
|
+
const policy = {
|
|
97
|
+
Version: '2012-10-17',
|
|
98
|
+
Statement: [
|
|
99
|
+
{
|
|
100
|
+
Effect: 'Allow',
|
|
101
|
+
Principal: { AWS: ['*'] },
|
|
102
|
+
Action: ['s3:GetObject'],
|
|
103
|
+
Resource: ['arn:aws:s3:::my-bucket/*'],
|
|
104
|
+
},
|
|
105
|
+
],
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
await minioClient.setBucketPolicy('my-bucket', JSON.stringify(policy))
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Common Patterns
|
|
112
|
+
|
|
113
|
+
### File Upload Handler
|
|
114
|
+
```typescript
|
|
115
|
+
async function uploadFile(file: Buffer, filename: string, userId: string) {
|
|
116
|
+
const key = `users/${userId}/${Date.now()}-${filename}`
|
|
117
|
+
|
|
118
|
+
await s3Client.send(new PutObjectCommand({
|
|
119
|
+
Bucket: process.env.MINIO_BUCKET,
|
|
120
|
+
Key: key,
|
|
121
|
+
Body: file,
|
|
122
|
+
ContentType: getContentType(filename),
|
|
123
|
+
Metadata: {
|
|
124
|
+
userId,
|
|
125
|
+
originalName: filename,
|
|
126
|
+
},
|
|
127
|
+
}))
|
|
128
|
+
|
|
129
|
+
return {
|
|
130
|
+
key,
|
|
131
|
+
url: `${process.env.MINIO_ENDPOINT}/${process.env.MINIO_BUCKET}/${key}`,
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Best Practices
|
|
137
|
+
|
|
138
|
+
✅ **DO:**
|
|
139
|
+
- Use S3-compatible APIs for portability
|
|
140
|
+
- Set appropriate content types
|
|
141
|
+
- Use presigned URLs for client uploads
|
|
142
|
+
- Implement proper error handling
|
|
143
|
+
- Use bucket policies for access control
|
|
144
|
+
- Enable versioning for important data
|
|
145
|
+
- Monitor storage usage
|
|
146
|
+
- Use lifecycle policies
|
|
147
|
+
- Implement retry logic
|
|
148
|
+
- Use TLS in production
|
|
149
|
+
|
|
150
|
+
❌ **DON'T:**
|
|
151
|
+
- Store sensitive data without encryption
|
|
152
|
+
- Use default credentials in production
|
|
153
|
+
- Hardcode endpoint URLs
|
|
154
|
+
- Ignore error handling
|
|
155
|
+
- Skip content-type validation
|
|
156
|
+
- Ignore access policies
|
|
157
|
+
- Skip monitoring
|
|
158
|
+
- Use HTTP in production
|
|
159
|
+
- Ignore storage limits
|
|
160
|
+
- Store large files without chunking
|
|
161
|
+
|
|
162
|
+
## Configuration
|
|
163
|
+
|
|
164
|
+
### Environment Variables
|
|
165
|
+
```bash
|
|
166
|
+
MINIO_ENDPOINT=http://localhost:9000
|
|
167
|
+
MINIO_ENDPOINT=https://minio.example.com
|
|
168
|
+
MINIO_PORT=9000
|
|
169
|
+
MINIO_USE_SSL=false
|
|
170
|
+
MINIO_ACCESS_KEY=minioadmin
|
|
171
|
+
MINIO_SECRET_KEY=minioadmin
|
|
172
|
+
MINIO_BUCKET=my-bucket
|
|
173
|
+
MINIO_REGION=us-east-1
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Docker Compose
|
|
177
|
+
```yaml
|
|
178
|
+
services:
|
|
179
|
+
minio:
|
|
180
|
+
image: minio/minio:latest
|
|
181
|
+
ports:
|
|
182
|
+
- "9000:9000" # API
|
|
183
|
+
- "9001:9001" # Console
|
|
184
|
+
environment:
|
|
185
|
+
MINIO_ROOT_USER: minioadmin
|
|
186
|
+
MINIO_ROOT_PASSWORD: securepassword
|
|
187
|
+
command: server /data --console-address ":9001"
|
|
188
|
+
volumes:
|
|
189
|
+
- minio_data:/data
|
|
190
|
+
healthcheck:
|
|
191
|
+
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
|
|
192
|
+
interval: 30s
|
|
193
|
+
timeout: 20s
|
|
194
|
+
retries: 3
|
|
195
|
+
|
|
196
|
+
volumes:
|
|
197
|
+
minio_data:
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
<!-- MINIO:END -->
|
|
201
|
+
|