@hivehub/rulebook 5.5.2 → 5.7.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.
Files changed (325) hide show
  1. package/.claude/commands/rulebook-learn-capture.md +41 -48
  2. package/.claude/commands/rulebook-learn-list.md +13 -13
  3. package/README.md +332 -394
  4. package/dist/cli/commands/context-intelligence.d.ts +0 -1
  5. package/dist/cli/commands/context-intelligence.d.ts.map +1 -1
  6. package/dist/cli/commands/context-intelligence.js +12 -33
  7. package/dist/cli/commands/context-intelligence.js.map +1 -1
  8. package/dist/cli/commands/index.d.ts +4 -7
  9. package/dist/cli/commands/index.d.ts.map +1 -1
  10. package/dist/cli/commands/index.js +4 -7
  11. package/dist/cli/commands/index.js.map +1 -1
  12. package/dist/cli/commands/init.d.ts.map +1 -1
  13. package/dist/cli/commands/init.js +40 -81
  14. package/dist/cli/commands/init.js.map +1 -1
  15. package/dist/cli/commands/mcp.d.ts +0 -1
  16. package/dist/cli/commands/mcp.d.ts.map +1 -1
  17. package/dist/cli/commands/mcp.js +1 -7
  18. package/dist/cli/commands/mcp.js.map +1 -1
  19. package/dist/cli/commands/memory.d.ts +7 -1
  20. package/dist/cli/commands/memory.d.ts.map +1 -1
  21. package/dist/cli/commands/memory.js +51 -57
  22. package/dist/cli/commands/memory.js.map +1 -1
  23. package/dist/cli/commands/misc.d.ts +1 -15
  24. package/dist/cli/commands/misc.d.ts.map +1 -1
  25. package/dist/cli/commands/misc.js +36 -215
  26. package/dist/cli/commands/misc.js.map +1 -1
  27. package/dist/cli/commands/plans.d.ts +0 -6
  28. package/dist/cli/commands/plans.d.ts.map +1 -1
  29. package/dist/cli/commands/plans.js +9 -77
  30. package/dist/cli/commands/plans.js.map +1 -1
  31. package/dist/cli/commands/skills.js +6 -6
  32. package/dist/cli/commands/skills.js.map +1 -1
  33. package/dist/cli/commands/task.js +4 -4
  34. package/dist/cli/commands/task.js.map +1 -1
  35. package/dist/cli/commands/update.d.ts.map +1 -1
  36. package/dist/cli/commands/update.js +122 -52
  37. package/dist/cli/commands/update.js.map +1 -1
  38. package/dist/cli/prompts.d.ts.map +1 -1
  39. package/dist/cli/prompts.js +1 -78
  40. package/dist/cli/prompts.js.map +1 -1
  41. package/dist/core/claude/claude-mcp.d.ts +59 -0
  42. package/dist/core/claude/claude-mcp.d.ts.map +1 -0
  43. package/dist/core/claude/claude-mcp.js +220 -0
  44. package/dist/core/claude/claude-mcp.js.map +1 -0
  45. package/dist/core/claude/claude-md-generator.d.ts +52 -0
  46. package/dist/core/claude/claude-md-generator.d.ts.map +1 -0
  47. package/dist/core/claude/claude-md-generator.js +104 -0
  48. package/dist/core/claude/claude-md-generator.js.map +1 -0
  49. package/dist/core/claude/claude-settings-manager.d.ts +44 -0
  50. package/dist/core/claude/claude-settings-manager.d.ts.map +1 -0
  51. package/dist/core/claude/claude-settings-manager.js +194 -0
  52. package/dist/core/claude/claude-settings-manager.js.map +1 -0
  53. package/dist/core/console/cli-bridge.d.ts +113 -0
  54. package/dist/core/console/cli-bridge.d.ts.map +1 -0
  55. package/dist/core/console/cli-bridge.js +1094 -0
  56. package/dist/core/console/cli-bridge.js.map +1 -0
  57. package/dist/core/detect/detector.d.ts +35 -0
  58. package/dist/core/detect/detector.d.ts.map +1 -0
  59. package/dist/core/detect/detector.js +541 -0
  60. package/dist/core/detect/detector.js.map +1 -0
  61. package/dist/core/docs/docs-generator.d.ts +9 -0
  62. package/dist/core/docs/docs-generator.d.ts.map +1 -0
  63. package/dist/core/docs/docs-generator.js +531 -0
  64. package/dist/core/docs/docs-generator.js.map +1 -0
  65. package/dist/core/docs/mcp-reference-generator.d.ts +13 -0
  66. package/dist/core/docs/mcp-reference-generator.d.ts.map +1 -0
  67. package/dist/core/docs/mcp-reference-generator.js +66 -0
  68. package/dist/core/docs/mcp-reference-generator.js.map +1 -0
  69. package/dist/core/generators/generator.d.ts +54 -0
  70. package/dist/core/generators/generator.d.ts.map +1 -0
  71. package/dist/core/generators/generator.js +1041 -0
  72. package/dist/core/generators/generator.js.map +1 -0
  73. package/dist/core/generators/gitignore-generator.d.ts +13 -0
  74. package/dist/core/generators/gitignore-generator.d.ts.map +1 -0
  75. package/dist/core/generators/gitignore-generator.js +307 -0
  76. package/dist/core/generators/gitignore-generator.js.map +1 -0
  77. package/dist/core/generators/minimal-scaffolder.d.ts +8 -0
  78. package/dist/core/generators/minimal-scaffolder.d.ts.map +1 -0
  79. package/dist/core/generators/minimal-scaffolder.js +51 -0
  80. package/dist/core/generators/minimal-scaffolder.js.map +1 -0
  81. package/dist/core/generators/rules-generator.d.ts +73 -0
  82. package/dist/core/generators/rules-generator.d.ts.map +1 -0
  83. package/dist/core/generators/rules-generator.js +202 -0
  84. package/dist/core/generators/rules-generator.js.map +1 -0
  85. package/dist/core/generators/workflow-generator.d.ts +15 -0
  86. package/dist/core/generators/workflow-generator.d.ts.map +1 -0
  87. package/dist/core/generators/workflow-generator.js +390 -0
  88. package/dist/core/generators/workflow-generator.js.map +1 -0
  89. package/dist/core/ide/multi-tool-generator.d.ts +59 -0
  90. package/dist/core/ide/multi-tool-generator.d.ts.map +1 -0
  91. package/dist/core/ide/multi-tool-generator.js +157 -0
  92. package/dist/core/ide/multi-tool-generator.js.map +1 -0
  93. package/dist/core/ide/opencode-generator.d.ts +72 -0
  94. package/dist/core/ide/opencode-generator.d.ts.map +1 -0
  95. package/dist/core/ide/opencode-generator.js +450 -0
  96. package/dist/core/ide/opencode-generator.js.map +1 -0
  97. package/dist/core/merger.d.ts +1 -1
  98. package/dist/core/merger.d.ts.map +1 -1
  99. package/dist/core/merger.js +5 -5
  100. package/dist/core/merger.js.map +1 -1
  101. package/dist/core/migrator.d.ts +0 -1
  102. package/dist/core/migrator.d.ts.map +1 -1
  103. package/dist/core/migrator.js +4 -29
  104. package/dist/core/migrator.js.map +1 -1
  105. package/dist/core/quality/coverage-checker.d.ts +14 -0
  106. package/dist/core/quality/coverage-checker.d.ts.map +1 -0
  107. package/dist/core/quality/coverage-checker.js +176 -0
  108. package/dist/core/quality/coverage-checker.js.map +1 -0
  109. package/dist/core/quality/dependency-checker.d.ts +21 -0
  110. package/dist/core/quality/dependency-checker.d.ts.map +1 -0
  111. package/dist/core/quality/dependency-checker.js +247 -0
  112. package/dist/core/quality/dependency-checker.js.map +1 -0
  113. package/dist/core/quality/doctor.d.ts +19 -0
  114. package/dist/core/quality/doctor.d.ts.map +1 -0
  115. package/dist/core/quality/doctor.js +163 -0
  116. package/dist/core/quality/doctor.js.map +1 -0
  117. package/dist/core/quality/validator.d.ts +21 -0
  118. package/dist/core/quality/validator.d.ts.map +1 -0
  119. package/dist/core/quality/validator.js +177 -0
  120. package/dist/core/quality/validator.js.map +1 -0
  121. package/dist/core/skills/skills-manager.d.ts +126 -0
  122. package/dist/core/skills/skills-manager.d.ts.map +1 -0
  123. package/dist/core/skills/skills-manager.js +630 -0
  124. package/dist/core/skills/skills-manager.js.map +1 -0
  125. package/dist/core/state/config-manager.d.ts +86 -0
  126. package/dist/core/state/config-manager.d.ts.map +1 -0
  127. package/dist/core/state/config-manager.js +562 -0
  128. package/dist/core/state/config-manager.js.map +1 -0
  129. package/dist/core/state/override-manager.d.ts +23 -0
  130. package/dist/core/state/override-manager.d.ts.map +1 -0
  131. package/dist/core/state/override-manager.js +82 -0
  132. package/dist/core/state/override-manager.js.map +1 -0
  133. package/dist/core/state/state-writer.d.ts +34 -0
  134. package/dist/core/state/state-writer.d.ts.map +1 -0
  135. package/dist/core/state/state-writer.js +78 -0
  136. package/dist/core/state/state-writer.js.map +1 -0
  137. package/dist/core/state/version-bumper.d.ts +19 -0
  138. package/dist/core/state/version-bumper.d.ts.map +1 -0
  139. package/dist/core/state/version-bumper.js +180 -0
  140. package/dist/core/state/version-bumper.js.map +1 -0
  141. package/dist/core/tasks/decision-manager.d.ts +25 -0
  142. package/dist/core/tasks/decision-manager.d.ts.map +1 -0
  143. package/dist/core/tasks/decision-manager.js +183 -0
  144. package/dist/core/tasks/decision-manager.js.map +1 -0
  145. package/dist/core/tasks/knowledge-manager.d.ts +24 -0
  146. package/dist/core/tasks/knowledge-manager.d.ts.map +1 -0
  147. package/dist/core/tasks/knowledge-manager.js +173 -0
  148. package/dist/core/tasks/knowledge-manager.js.map +1 -0
  149. package/dist/core/tasks/learn-manager.d.ts +27 -0
  150. package/dist/core/tasks/learn-manager.d.ts.map +1 -0
  151. package/dist/core/tasks/learn-manager.js +121 -0
  152. package/dist/core/tasks/learn-manager.js.map +1 -0
  153. package/dist/core/tasks/plans-manager.d.ts +46 -0
  154. package/dist/core/tasks/plans-manager.d.ts.map +1 -0
  155. package/dist/core/tasks/plans-manager.js +158 -0
  156. package/dist/core/tasks/plans-manager.js.map +1 -0
  157. package/dist/core/tasks/task-manager.d.ts +127 -0
  158. package/dist/core/tasks/task-manager.d.ts.map +1 -0
  159. package/dist/core/tasks/task-manager.js +607 -0
  160. package/dist/core/tasks/task-manager.js.map +1 -0
  161. package/dist/core/workspace/project-worker.d.ts +6 -6
  162. package/dist/core/workspace/project-worker.d.ts.map +1 -1
  163. package/dist/core/workspace/project-worker.js +6 -6
  164. package/dist/core/workspace/project-worker.js.map +1 -1
  165. package/dist/index.d.ts +1 -1
  166. package/dist/index.d.ts.map +1 -1
  167. package/dist/index.js +19 -176
  168. package/dist/index.js.map +1 -1
  169. package/dist/mcp/rulebook-server.d.ts.map +1 -1
  170. package/dist/mcp/rulebook-server.js +16 -960
  171. package/dist/mcp/rulebook-server.js.map +1 -1
  172. package/dist/memory/file-search.d.ts +43 -0
  173. package/dist/memory/file-search.d.ts.map +1 -0
  174. package/dist/memory/file-search.js +228 -0
  175. package/dist/memory/file-search.js.map +1 -0
  176. package/dist/memory/file-store.d.ts +99 -0
  177. package/dist/memory/file-store.d.ts.map +1 -0
  178. package/dist/memory/file-store.js +615 -0
  179. package/dist/memory/file-store.js.map +1 -0
  180. package/dist/memory/legacy-migrator.d.ts +27 -0
  181. package/dist/memory/legacy-migrator.d.ts.map +1 -0
  182. package/dist/memory/legacy-migrator.js +185 -0
  183. package/dist/memory/legacy-migrator.js.map +1 -0
  184. package/dist/memory/memory-manager.d.ts +25 -24
  185. package/dist/memory/memory-manager.d.ts.map +1 -1
  186. package/dist/memory/memory-manager.js +97 -140
  187. package/dist/memory/memory-manager.js.map +1 -1
  188. package/dist/memory/memory-types.d.ts +1 -1
  189. package/dist/memory/memory-types.d.ts.map +1 -1
  190. package/dist/types.d.ts +8 -119
  191. package/dist/types.d.ts.map +1 -1
  192. package/package.json +1 -6
  193. package/templates/agents/context-intelligence.md +50 -52
  194. package/templates/cli/OPENCODE.md +85 -18
  195. package/templates/commands/rulebook-learn-capture.md +41 -48
  196. package/templates/commands/rulebook-learn-list.md +13 -13
  197. package/templates/core/AGENTS_LEAN.md +0 -14
  198. package/templates/hooks/check-context-and-handoff.sh +8 -10
  199. package/templates/hooks/enforce-pre-tool.sh +70 -0
  200. package/templates/hooks/terse-mode-tracker.sh +146 -143
  201. package/templates/ides/OPENCODE.md +63 -0
  202. package/templates/skills/cli/opencode/SKILL.md +82 -28
  203. package/.claude/commands/ralph-config.md +0 -112
  204. package/.claude/commands/ralph-history.md +0 -110
  205. package/.claude/commands/ralph-init.md +0 -72
  206. package/.claude/commands/ralph-pause-resume.md +0 -105
  207. package/.claude/commands/ralph-run.md +0 -101
  208. package/.claude/commands/ralph-status.md +0 -76
  209. package/templates/core/RALPH.md +0 -471
  210. package/templates/frameworks/ANGULAR.md +0 -36
  211. package/templates/frameworks/DJANGO.md +0 -83
  212. package/templates/frameworks/ELECTRON.md +0 -147
  213. package/templates/frameworks/FLASK.md +0 -38
  214. package/templates/frameworks/FLUTTER.md +0 -55
  215. package/templates/frameworks/JQUERY.md +0 -32
  216. package/templates/frameworks/LARAVEL.md +0 -38
  217. package/templates/frameworks/NESTJS.md +0 -43
  218. package/templates/frameworks/NEXTJS.md +0 -127
  219. package/templates/frameworks/NUXT.md +0 -40
  220. package/templates/frameworks/RAILS.md +0 -66
  221. package/templates/frameworks/REACT.md +0 -38
  222. package/templates/frameworks/REACT_NATIVE.md +0 -47
  223. package/templates/frameworks/SPRING.md +0 -39
  224. package/templates/frameworks/SYMFONY.md +0 -36
  225. package/templates/frameworks/VUE.md +0 -36
  226. package/templates/frameworks/ZEND.md +0 -35
  227. package/templates/hooks/enforce-mcp-for-tasks.sh +0 -31
  228. package/templates/hooks/enforce-no-deferred.sh +0 -21
  229. package/templates/hooks/enforce-no-shortcuts.sh +0 -31
  230. package/templates/ides/COPILOT.md +0 -37
  231. package/templates/ides/CURSOR.md +0 -43
  232. package/templates/ides/JETBRAINS_AI.md +0 -35
  233. package/templates/ides/REPLIT.md +0 -36
  234. package/templates/ides/TABNINE.md +0 -29
  235. package/templates/ides/VSCODE.md +0 -40
  236. package/templates/ides/WINDSURF.md +0 -36
  237. package/templates/ides/ZED.md +0 -32
  238. package/templates/ides/cursor-mdc/go.mdc +0 -24
  239. package/templates/ides/cursor-mdc/python.mdc +0 -24
  240. package/templates/ides/cursor-mdc/quality.mdc +0 -25
  241. package/templates/ides/cursor-mdc/ralph.mdc +0 -39
  242. package/templates/ides/cursor-mdc/rulebook.mdc +0 -38
  243. package/templates/ides/cursor-mdc/rust.mdc +0 -24
  244. package/templates/ides/cursor-mdc/typescript.mdc +0 -25
  245. package/templates/ralph/ralph-history.bat +0 -4
  246. package/templates/ralph/ralph-history.sh +0 -5
  247. package/templates/ralph/ralph-init.bat +0 -5
  248. package/templates/ralph/ralph-init.sh +0 -5
  249. package/templates/ralph/ralph-pause.bat +0 -5
  250. package/templates/ralph/ralph-pause.sh +0 -5
  251. package/templates/ralph/ralph-run.bat +0 -5
  252. package/templates/ralph/ralph-run.sh +0 -5
  253. package/templates/ralph/ralph-status.bat +0 -4
  254. package/templates/ralph/ralph-status.sh +0 -5
  255. package/templates/services/AZURE_BLOB.md +0 -184
  256. package/templates/services/CASSANDRA.md +0 -239
  257. package/templates/services/DATADOG.md +0 -26
  258. package/templates/services/DOCKER.md +0 -124
  259. package/templates/services/DOCKER_COMPOSE.md +0 -168
  260. package/templates/services/DYNAMODB.md +0 -308
  261. package/templates/services/ELASTICSEARCH.md +0 -347
  262. package/templates/services/GCS.md +0 -178
  263. package/templates/services/HELM.md +0 -194
  264. package/templates/services/INFLUXDB.md +0 -265
  265. package/templates/services/KAFKA.md +0 -341
  266. package/templates/services/KUBERNETES.md +0 -208
  267. package/templates/services/MARIADB.md +0 -183
  268. package/templates/services/MEMCACHED.md +0 -242
  269. package/templates/services/MINIO.md +0 -201
  270. package/templates/services/MONGODB.md +0 -268
  271. package/templates/services/MYSQL.md +0 -358
  272. package/templates/services/NEO4J.md +0 -247
  273. package/templates/services/OPENTELEMETRY.md +0 -25
  274. package/templates/services/ORACLE.md +0 -290
  275. package/templates/services/PINO.md +0 -24
  276. package/templates/services/POSTGRESQL.md +0 -326
  277. package/templates/services/PROMETHEUS.md +0 -33
  278. package/templates/services/RABBITMQ.md +0 -286
  279. package/templates/services/REDIS.md +0 -292
  280. package/templates/services/S3.md +0 -298
  281. package/templates/services/SENTRY.md +0 -23
  282. package/templates/services/SQLITE.md +0 -294
  283. package/templates/services/SQLSERVER.md +0 -294
  284. package/templates/services/WINSTON.md +0 -30
  285. package/templates/skills/frameworks/angular/SKILL.md +0 -46
  286. package/templates/skills/frameworks/django/SKILL.md +0 -93
  287. package/templates/skills/frameworks/electron/SKILL.md +0 -157
  288. package/templates/skills/frameworks/flask/SKILL.md +0 -48
  289. package/templates/skills/frameworks/flutter/SKILL.md +0 -65
  290. package/templates/skills/frameworks/jquery/SKILL.md +0 -42
  291. package/templates/skills/frameworks/laravel/SKILL.md +0 -48
  292. package/templates/skills/frameworks/nestjs/SKILL.md +0 -53
  293. package/templates/skills/frameworks/nextjs/SKILL.md +0 -137
  294. package/templates/skills/frameworks/nuxt/SKILL.md +0 -50
  295. package/templates/skills/frameworks/rails/SKILL.md +0 -76
  296. package/templates/skills/frameworks/react/SKILL.md +0 -48
  297. package/templates/skills/frameworks/react-native/SKILL.md +0 -57
  298. package/templates/skills/frameworks/spring/SKILL.md +0 -49
  299. package/templates/skills/frameworks/symfony/SKILL.md +0 -46
  300. package/templates/skills/frameworks/vue/SKILL.md +0 -46
  301. package/templates/skills/frameworks/zend/SKILL.md +0 -45
  302. package/templates/skills/services/azure-blob/SKILL.md +0 -194
  303. package/templates/skills/services/cassandra/SKILL.md +0 -249
  304. package/templates/skills/services/dynamodb/SKILL.md +0 -318
  305. package/templates/skills/services/elasticsearch/SKILL.md +0 -357
  306. package/templates/skills/services/gcs/SKILL.md +0 -188
  307. package/templates/skills/services/influxdb/SKILL.md +0 -275
  308. package/templates/skills/services/kafka/SKILL.md +0 -351
  309. package/templates/skills/services/mariadb/SKILL.md +0 -193
  310. package/templates/skills/services/memcached/SKILL.md +0 -252
  311. package/templates/skills/services/minio/SKILL.md +0 -211
  312. package/templates/skills/services/mongodb/SKILL.md +0 -278
  313. package/templates/skills/services/mysql/SKILL.md +0 -368
  314. package/templates/skills/services/neo4j/SKILL.md +0 -257
  315. package/templates/skills/services/oracle/SKILL.md +0 -300
  316. package/templates/skills/services/postgresql/SKILL.md +0 -336
  317. package/templates/skills/services/rabbitmq/SKILL.md +0 -296
  318. package/templates/skills/services/redis/SKILL.md +0 -302
  319. package/templates/skills/services/s3/SKILL.md +0 -308
  320. package/templates/skills/services/sqlite/SKILL.md +0 -304
  321. package/templates/skills/services/sqlserver/SKILL.md +0 -304
  322. package/templates/skills/workflows/ralph/SETUP.md +0 -228
  323. package/templates/skills/workflows/ralph/SKILL.md +0 -309
  324. package/templates/skills/workflows/ralph/install.sh +0 -87
  325. package/templates/skills/workflows/ralph/manifest.json +0 -158
@@ -1,188 +0,0 @@
1
- ---
2
- name: "Google Cloud Storage"
3
- description: "Use Google Cloud Storage for object storage, file uploads, static assets, and backup storage in GCP."
4
- version: "1.0.0"
5
- category: "services"
6
- author: "Rulebook"
7
- tags: ["services", "storage"]
8
- dependencies: []
9
- conflicts: []
10
- ---
11
- <!-- GCS:START -->
12
- # Google Cloud Storage Instructions
13
-
14
- **CRITICAL**: Use Google Cloud Storage for object storage, file uploads, static assets, and backup storage in GCP.
15
-
16
- ## Core Features
17
-
18
- ### Connection
19
- ```typescript
20
- // Using @google-cloud/storage
21
- import { Storage } from '@google-cloud/storage'
22
-
23
- const storage = new Storage({
24
- projectId: process.env.GCP_PROJECT_ID,
25
- keyFilename: process.env.GCP_KEY_FILE, // Path to service account key
26
- // Or use credentials object
27
- credentials: {
28
- client_email: process.env.GCP_CLIENT_EMAIL,
29
- private_key: process.env.GCP_PRIVATE_KEY?.replace(/\\n/g, '\n'),
30
- },
31
- })
32
-
33
- const bucket = storage.bucket(process.env.GCS_BUCKET_NAME || 'my-bucket')
34
- ```
35
-
36
- ### Basic Operations
37
- ```typescript
38
- // Upload file
39
- const file = bucket.file('path/to/file.jpg')
40
- await file.save(fileBuffer, {
41
- metadata: {
42
- contentType: 'image/jpeg',
43
- metadata: {
44
- userId: '123',
45
- originalName: 'photo.jpg',
46
- },
47
- },
48
- })
49
-
50
- // Download file
51
- const [fileContent] = await file.download()
52
-
53
- // Delete file
54
- await file.delete()
55
-
56
- // List files
57
- const [files] = await bucket.getFiles({
58
- prefix: 'uploads/',
59
- maxResults: 100,
60
- })
61
- ```
62
-
63
- ### Advanced Features
64
- ```typescript
65
- // Generate signed URL
66
- const [url] = await file.getSignedUrl({
67
- action: 'read',
68
- expires: Date.now() + 3600 * 1000, // 1 hour
69
- })
70
-
71
- // Generate signed URL for upload
72
- const [uploadUrl] = await file.getSignedUrl({
73
- action: 'write',
74
- expires: Date.now() + 3600 * 1000,
75
- contentType: 'image/jpeg',
76
- })
77
-
78
- // Copy file
79
- const sourceFile = bucket.file('source/file.jpg')
80
- const destFile = bucket.file('dest/file.jpg')
81
- await sourceFile.copy(destFile)
82
-
83
- // Set metadata
84
- await file.setMetadata({
85
- metadata: {
86
- category: 'profile',
87
- uploadedBy: 'user-123',
88
- },
89
- })
90
-
91
- // Get metadata
92
- const [metadata] = await file.getMetadata()
93
- console.log(metadata.contentType, metadata.size, metadata.metadata)
94
- ```
95
-
96
- ## Common Patterns
97
-
98
- ### File Upload Handler
99
- ```typescript
100
- async function uploadFile(file: Buffer, filename: string, userId: string) {
101
- const filePath = `users/${userId}/${Date.now()}-${filename}`
102
- const file = bucket.file(filePath)
103
-
104
- await file.save(file, {
105
- metadata: {
106
- contentType: getContentType(filename),
107
- metadata: {
108
- userId,
109
- originalName: filename,
110
- uploadedAt: new Date().toISOString(),
111
- },
112
- },
113
- })
114
-
115
- await file.makePublic() // Or use signed URLs
116
-
117
- return {
118
- filePath,
119
- publicUrl: file.publicUrl(),
120
- }
121
- }
122
- ```
123
-
124
- ### Temporary Access URL
125
- ```typescript
126
- async function generateTemporaryUrl(filePath: string, expiresInMinutes: number = 60) {
127
- const file = bucket.file(filePath)
128
- const [url] = await file.getSignedUrl({
129
- action: 'read',
130
- expires: Date.now() + expiresInMinutes * 60 * 1000,
131
- })
132
- return url
133
- }
134
- ```
135
-
136
- ## Best Practices
137
-
138
- ✅ **DO:**
139
- - Use appropriate storage classes (Standard, Nearline, Coldline, Archive)
140
- - Set blob metadata for organization
141
- - Use signed URLs for temporary access
142
- - Implement proper error handling
143
- - Use appropriate content types
144
- - Enable versioning for important data
145
- - Monitor storage usage and costs
146
- - Use lifecycle management policies
147
- - Implement retry logic
148
- - Use service account credentials
149
-
150
- ❌ **DON'T:**
151
- - Store sensitive data without encryption
152
- - Make files public unnecessarily
153
- - Hardcode credentials
154
- - Ignore error handling
155
- - Skip content-type validation
156
- - Ignore lifecycle policies
157
- - Skip access logging
158
- - Use default permissions
159
- - Ignore cost optimization
160
- - Store large files without chunking
161
-
162
- ## Configuration
163
-
164
- ### Environment Variables
165
- ```bash
166
- GCP_PROJECT_ID=my-project
167
- GCP_KEY_FILE=/path/to/service-account-key.json
168
- GCP_CLIENT_EMAIL=service-account@project.iam.gserviceaccount.com
169
- GCP_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n..."
170
- GCS_BUCKET_NAME=my-bucket
171
- ```
172
-
173
- ### Service Account Key
174
- ```json
175
- {
176
- "type": "service_account",
177
- "project_id": "my-project",
178
- "private_key_id": "...",
179
- "private_key": "-----BEGIN PRIVATE KEY-----\n...",
180
- "client_email": "service-account@project.iam.gserviceaccount.com",
181
- "client_id": "...",
182
- "auth_uri": "https://accounts.google.com/o/oauth2/auth",
183
- "token_uri": "https://oauth2.googleapis.com/token"
184
- }
185
- ```
186
-
187
- <!-- GCS:END -->
188
-
@@ -1,275 +0,0 @@
1
- ---
2
- name: "InfluxDB"
3
- description: "Use InfluxDB for time-series data, metrics, IoT data, and real-time analytics with high write throughput."
4
- version: "1.0.0"
5
- category: "services"
6
- author: "Rulebook"
7
- tags: ["services", "database"]
8
- dependencies: []
9
- conflicts: []
10
- ---
11
- <!-- INFLUXDB:START -->
12
- # InfluxDB Time-Series Database Instructions
13
-
14
- **CRITICAL**: Use InfluxDB for time-series data, metrics, IoT data, and real-time analytics with high write throughput.
15
-
16
- ## Core Features
17
-
18
- ### Connection
19
- ```typescript
20
- // Using @influxdata/influxdb-client
21
- import { InfluxDB, Point } from '@influxdata/influxdb-client'
22
-
23
- const token = process.env.INFLUXDB_TOKEN || ''
24
- const org = process.env.INFLUXDB_ORG || 'myorg'
25
- const bucket = process.env.INFLUXDB_BUCKET || 'mybucket'
26
-
27
- const client = new InfluxDB({
28
- url: process.env.INFLUXDB_URL || 'http://localhost:8086',
29
- token,
30
- })
31
-
32
- const writeApi = client.getWriteApi(org, bucket, 'ns')
33
- const queryApi = client.getQueryApi(org)
34
- ```
35
-
36
- ### Writing Data
37
- ```typescript
38
- // Create point
39
- const point = new Point('temperature')
40
- .tag('location', 'room1')
41
- .tag('sensor', 'sensor1')
42
- .floatField('value', 23.5)
43
- .timestamp(new Date())
44
-
45
- writeApi.writePoint(point)
46
-
47
- // Multiple points
48
- const points = [
49
- new Point('temperature').tag('location', 'room1').floatField('value', 23.5),
50
- new Point('humidity').tag('location', 'room1').floatField('value', 65.2),
51
- new Point('pressure').tag('location', 'room1').floatField('value', 1013.25),
52
- ]
53
-
54
- writeApi.writePoints(points)
55
- await writeApi.close()
56
-
57
- // Using line protocol
58
- writeApi.writeRecord('temperature,location=room1 value=23.5')
59
- ```
60
-
61
- ### Querying Data
62
- ```typescript
63
- // Flux query
64
- const query = `
65
- from(bucket: "${bucket}")
66
- |> range(start: -1h)
67
- |> filter(fn: (r) => r._measurement == "temperature")
68
- |> filter(fn: (r) => r.location == "room1")
69
- |> aggregateWindow(every: 5m, fn: mean, createEmpty: false)
70
- |> yield(name: "mean")
71
- `
72
-
73
- queryApi.queryRows(query, {
74
- next(row, tableMeta) {
75
- const record = tableMeta.toObject(row)
76
- console.log(record)
77
- },
78
- error(error) {
79
- console.error(error)
80
- },
81
- complete() {
82
- console.log('Query completed')
83
- },
84
- })
85
-
86
- // InfluxQL query (legacy)
87
- const query = `
88
- SELECT mean("value")
89
- FROM "temperature"
90
- WHERE "location" = 'room1'
91
- AND time >= now() - 1h
92
- GROUP BY time(5m)
93
- `
94
- ```
95
-
96
- ## Common Patterns
97
-
98
- ### Metrics Collection
99
- ```typescript
100
- async function recordMetric(measurement: string, tags: Record<string, string>, fields: Record<string, number>) {
101
- const point = new Point(measurement)
102
-
103
- for (const [key, value] of Object.entries(tags)) {
104
- point.tag(key, value)
105
- }
106
-
107
- for (const [key, value] of Object.entries(fields)) {
108
- point.floatField(key, value)
109
- }
110
-
111
- point.timestamp(new Date())
112
- writeApi.writePoint(point)
113
- }
114
-
115
- // Usage
116
- await recordMetric('api_request', {
117
- endpoint: '/users',
118
- method: 'GET',
119
- status: '200',
120
- }, {
121
- duration: 125.5,
122
- bytes: 2048,
123
- })
124
- ```
125
-
126
- ### Aggregations
127
- ```typescript
128
- async function getAverageTemperature(location: string, duration: string) {
129
- const query = `
130
- from(bucket: "${bucket}")
131
- |> range(start: ${duration})
132
- |> filter(fn: (r) => r._measurement == "temperature")
133
- |> filter(fn: (r) => r.location == "${location}")
134
- |> mean()
135
- `
136
-
137
- return new Promise((resolve, reject) => {
138
- const results: number[] = []
139
- queryApi.queryRows(query, {
140
- next(row, tableMeta) {
141
- const record = tableMeta.toObject(row)
142
- results.push(record._value)
143
- },
144
- error: reject,
145
- complete() {
146
- resolve(results[0] || 0)
147
- },
148
- })
149
- })
150
- }
151
- ```
152
-
153
- ### Batch Writing
154
- ```typescript
155
- class MetricsBuffer {
156
- private points: Point[] = []
157
- private maxSize = 1000
158
- private flushInterval = 5000 // 5 seconds
159
-
160
- constructor() {
161
- setInterval(() => this.flush(), this.flushInterval)
162
- }
163
-
164
- add(point: Point) {
165
- this.points.push(point)
166
- if (this.points.length >= this.maxSize) {
167
- this.flush()
168
- }
169
- }
170
-
171
- async flush() {
172
- if (this.points.length === 0) return
173
-
174
- const points = [...this.points]
175
- this.points = []
176
-
177
- for (const point of points) {
178
- writeApi.writePoint(point)
179
- }
180
-
181
- await writeApi.flush()
182
- }
183
- }
184
- ```
185
-
186
- ## Best Practices
187
-
188
- ✅ **DO:**
189
- - Use tags for frequently filtered fields
190
- - Use fields for numeric values
191
- - Batch writes for better performance
192
- - Use appropriate retention policies
193
- - Monitor disk usage
194
- - Use downsampling for old data
195
- - Create continuous queries for aggregations
196
- - Use appropriate precision (ns, us, ms, s)
197
- - Tag data with metadata (location, device, etc.)
198
- - Monitor write performance
199
-
200
- ❌ **DON'T:**
201
- - Store high-cardinality data in tags
202
- - Store non-numeric data in fields
203
- - Write points one at a time
204
- - Ignore retention policies
205
- - Store sensitive data without encryption
206
- - Hardcode connection strings
207
- - Skip error handling
208
- - Ignore disk space
209
- - Use too many tags (affects performance)
210
- - Store large text in fields
211
-
212
- ## Configuration
213
-
214
- ### Environment Variables
215
- ```bash
216
- INFLUXDB_URL=http://localhost:8086
217
- INFLUXDB_TOKEN=your-token
218
- INFLUXDB_ORG=myorg
219
- INFLUXDB_BUCKET=mybucket
220
- ```
221
-
222
- ### Docker Compose
223
- ```yaml
224
- services:
225
- influxdb:
226
- image: influxdb:2.7
227
- ports:
228
- - "8086:8086"
229
- environment:
230
- DOCKER_INFLUXDB_INIT_MODE: setup
231
- DOCKER_INFLUXDB_INIT_USERNAME: admin
232
- DOCKER_INFLUXDB_INIT_PASSWORD: securepassword
233
- DOCKER_INFLUXDB_INIT_ORG: myorg
234
- DOCKER_INFLUXDB_INIT_BUCKET: mybucket
235
- DOCKER_INFLUXDB_INIT_ADMIN_TOKEN: your-token
236
- volumes:
237
- - influxdb_data:/var/lib/influxdb2
238
- healthcheck:
239
- test: ["CMD", "influx", "ping"]
240
- interval: 10s
241
- timeout: 5s
242
- retries: 5
243
-
244
- volumes:
245
- influxdb_data:
246
- ```
247
-
248
- ## Integration with Development
249
-
250
- ### Testing
251
- ```typescript
252
- // Use test bucket
253
- const testBucket = 'test_bucket'
254
- const testWriteApi = client.getWriteApi(org, testBucket, 'ns')
255
-
256
- // Clean up after tests
257
- afterEach(async () => {
258
- // Delete test data or use separate test bucket
259
- })
260
- ```
261
-
262
- ### Health Checks
263
- ```typescript
264
- async function checkInfluxDBHealth(): Promise<boolean> {
265
- try {
266
- const health = await fetch(`${process.env.INFLUXDB_URL}/health`)
267
- return health.ok
268
- } catch {
269
- return false
270
- }
271
- }
272
- ```
273
-
274
- <!-- INFLUXDB:END -->
275
-