sandstream-kit 1.0.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 (519) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +617 -0
  3. package/dist/adapters/api-key-adapter.d.ts +35 -0
  4. package/dist/adapters/api-key-adapter.js +46 -0
  5. package/dist/adapters/api-key-adapter.js.map +1 -0
  6. package/dist/adapters/clerk-auth.d.ts +6 -0
  7. package/dist/adapters/clerk-auth.js +20 -0
  8. package/dist/adapters/clerk-auth.js.map +1 -0
  9. package/dist/adapters/cloudflare-r2.d.ts +6 -0
  10. package/dist/adapters/cloudflare-r2.js +136 -0
  11. package/dist/adapters/cloudflare-r2.js.map +1 -0
  12. package/dist/adapters/expo-eas.d.ts +6 -0
  13. package/dist/adapters/expo-eas.js +129 -0
  14. package/dist/adapters/expo-eas.js.map +1 -0
  15. package/dist/adapters/flagsmith-flags.d.ts +5 -0
  16. package/dist/adapters/flagsmith-flags.js +20 -0
  17. package/dist/adapters/flagsmith-flags.js.map +1 -0
  18. package/dist/adapters/flyio-hosting.d.ts +2 -0
  19. package/dist/adapters/flyio-hosting.js +143 -0
  20. package/dist/adapters/flyio-hosting.js.map +1 -0
  21. package/dist/adapters/index.d.ts +6 -0
  22. package/dist/adapters/index.js +48 -0
  23. package/dist/adapters/index.js.map +1 -0
  24. package/dist/adapters/inngest-background.d.ts +5 -0
  25. package/dist/adapters/inngest-background.js +19 -0
  26. package/dist/adapters/inngest-background.js.map +1 -0
  27. package/dist/adapters/liveblocks-realtime.d.ts +11 -0
  28. package/dist/adapters/liveblocks-realtime.js +62 -0
  29. package/dist/adapters/liveblocks-realtime.js.map +1 -0
  30. package/dist/adapters/loops-email.d.ts +6 -0
  31. package/dist/adapters/loops-email.js +18 -0
  32. package/dist/adapters/loops-email.js.map +1 -0
  33. package/dist/adapters/neon-db.d.ts +10 -0
  34. package/dist/adapters/neon-db.js +94 -0
  35. package/dist/adapters/neon-db.js.map +1 -0
  36. package/dist/adapters/planetscale-db.d.ts +11 -0
  37. package/dist/adapters/planetscale-db.js +134 -0
  38. package/dist/adapters/planetscale-db.js.map +1 -0
  39. package/dist/adapters/posthog-analytics.d.ts +6 -0
  40. package/dist/adapters/posthog-analytics.js +22 -0
  41. package/dist/adapters/posthog-analytics.js.map +1 -0
  42. package/dist/adapters/railway-hosting.d.ts +2 -0
  43. package/dist/adapters/railway-hosting.js +136 -0
  44. package/dist/adapters/railway-hosting.js.map +1 -0
  45. package/dist/adapters/resend-email.d.ts +35 -0
  46. package/dist/adapters/resend-email.js +109 -0
  47. package/dist/adapters/resend-email.js.map +1 -0
  48. package/dist/adapters/searxng-instance.d.ts +6 -0
  49. package/dist/adapters/searxng-instance.js +240 -0
  50. package/dist/adapters/searxng-instance.js.map +1 -0
  51. package/dist/adapters/sentry-monitoring.d.ts +7 -0
  52. package/dist/adapters/sentry-monitoring.js +27 -0
  53. package/dist/adapters/sentry-monitoring.js.map +1 -0
  54. package/dist/adapters/stripe-payments.d.ts +6 -0
  55. package/dist/adapters/stripe-payments.js +134 -0
  56. package/dist/adapters/stripe-payments.js.map +1 -0
  57. package/dist/adapters/supabase-db.d.ts +6 -0
  58. package/dist/adapters/supabase-db.js +130 -0
  59. package/dist/adapters/supabase-db.js.map +1 -0
  60. package/dist/adapters/tinybird-analytics.d.ts +5 -0
  61. package/dist/adapters/tinybird-analytics.js +20 -0
  62. package/dist/adapters/tinybird-analytics.js.map +1 -0
  63. package/dist/adapters/trigger-background.d.ts +6 -0
  64. package/dist/adapters/trigger-background.js +20 -0
  65. package/dist/adapters/trigger-background.js.map +1 -0
  66. package/dist/adapters/types.d.ts +7 -0
  67. package/dist/adapters/types.js +2 -0
  68. package/dist/adapters/types.js.map +1 -0
  69. package/dist/adapters/upstash-redis.d.ts +6 -0
  70. package/dist/adapters/upstash-redis.js +88 -0
  71. package/dist/adapters/upstash-redis.js.map +1 -0
  72. package/dist/adapters/vercel-hosting.d.ts +6 -0
  73. package/dist/adapters/vercel-hosting.js +112 -0
  74. package/dist/adapters/vercel-hosting.js.map +1 -0
  75. package/dist/agent-adapter-model.d.ts +108 -0
  76. package/dist/agent-adapter-model.js +6 -0
  77. package/dist/agent-adapter-model.js.map +1 -0
  78. package/dist/agent-adapter-service.d.ts +67 -0
  79. package/dist/agent-adapter-service.js +299 -0
  80. package/dist/agent-adapter-service.js.map +1 -0
  81. package/dist/agent-config.d.ts +56 -0
  82. package/dist/agent-config.js +129 -0
  83. package/dist/agent-config.js.map +1 -0
  84. package/dist/agent-governance-model.d.ts +128 -0
  85. package/dist/agent-governance-model.js +6 -0
  86. package/dist/agent-governance-model.js.map +1 -0
  87. package/dist/agent-governance-service.d.ts +101 -0
  88. package/dist/agent-governance-service.js +319 -0
  89. package/dist/agent-governance-service.js.map +1 -0
  90. package/dist/alert-rules-engine.d.ts +102 -0
  91. package/dist/alert-rules-engine.js +210 -0
  92. package/dist/alert-rules-engine.js.map +1 -0
  93. package/dist/analytics-service.d.ts +126 -0
  94. package/dist/analytics-service.js +318 -0
  95. package/dist/analytics-service.js.map +1 -0
  96. package/dist/analyze.d.ts +19 -0
  97. package/dist/analyze.js +311 -0
  98. package/dist/analyze.js.map +1 -0
  99. package/dist/apm-instrumentor.d.ts +119 -0
  100. package/dist/apm-instrumentor.js +225 -0
  101. package/dist/apm-instrumentor.js.map +1 -0
  102. package/dist/approval-model.d.ts +82 -0
  103. package/dist/approval-model.js +6 -0
  104. package/dist/approval-model.js.map +1 -0
  105. package/dist/approval-service.d.ts +39 -0
  106. package/dist/approval-service.js +236 -0
  107. package/dist/approval-service.js.map +1 -0
  108. package/dist/approval.d.ts +22 -0
  109. package/dist/approval.js +148 -0
  110. package/dist/approval.js.map +1 -0
  111. package/dist/audit-logging-model.d.ts +157 -0
  112. package/dist/audit-logging-model.js +6 -0
  113. package/dist/audit-logging-model.js.map +1 -0
  114. package/dist/audit-logging-service.d.ts +89 -0
  115. package/dist/audit-logging-service.js +367 -0
  116. package/dist/audit-logging-service.js.map +1 -0
  117. package/dist/audit-secrets.d.ts +42 -0
  118. package/dist/audit-secrets.js +126 -0
  119. package/dist/audit-secrets.js.map +1 -0
  120. package/dist/audit.d.ts +43 -0
  121. package/dist/audit.js +286 -0
  122. package/dist/audit.js.map +1 -0
  123. package/dist/author-dashboard.d.ts +84 -0
  124. package/dist/author-dashboard.js +204 -0
  125. package/dist/author-dashboard.js.map +1 -0
  126. package/dist/author-notifications.d.ts +130 -0
  127. package/dist/author-notifications.js +261 -0
  128. package/dist/author-notifications.js.map +1 -0
  129. package/dist/author-verification.d.ts +79 -0
  130. package/dist/author-verification.js +257 -0
  131. package/dist/author-verification.js.map +1 -0
  132. package/dist/autonomous-setup-model.d.ts +117 -0
  133. package/dist/autonomous-setup-model.js +6 -0
  134. package/dist/autonomous-setup-model.js.map +1 -0
  135. package/dist/autonomous-setup-service.d.ts +74 -0
  136. package/dist/autonomous-setup-service.js +325 -0
  137. package/dist/autonomous-setup-service.js.map +1 -0
  138. package/dist/badge-system.d.ts +70 -0
  139. package/dist/badge-system.js +210 -0
  140. package/dist/badge-system.js.map +1 -0
  141. package/dist/baseline.d.ts +34 -0
  142. package/dist/baseline.js +78 -0
  143. package/dist/baseline.js.map +1 -0
  144. package/dist/beta-program-service.d.ts +112 -0
  145. package/dist/beta-program-service.js +240 -0
  146. package/dist/beta-program-service.js.map +1 -0
  147. package/dist/budget.d.ts +34 -0
  148. package/dist/budget.js +159 -0
  149. package/dist/budget.js.map +1 -0
  150. package/dist/bumblebee.d.ts +143 -0
  151. package/dist/bumblebee.js +384 -0
  152. package/dist/bumblebee.js.map +1 -0
  153. package/dist/cache-manager.d.ts +97 -0
  154. package/dist/cache-manager.js +244 -0
  155. package/dist/cache-manager.js.map +1 -0
  156. package/dist/cdn-adapter.d.ts +64 -0
  157. package/dist/cdn-adapter.js +263 -0
  158. package/dist/cdn-adapter.js.map +1 -0
  159. package/dist/certification-workflow-model.d.ts +95 -0
  160. package/dist/certification-workflow-model.js +6 -0
  161. package/dist/certification-workflow-model.js.map +1 -0
  162. package/dist/certification-workflow-service.d.ts +72 -0
  163. package/dist/certification-workflow-service.js +305 -0
  164. package/dist/certification-workflow-service.js.map +1 -0
  165. package/dist/check-design.d.ts +38 -0
  166. package/dist/check-design.js +256 -0
  167. package/dist/check-design.js.map +1 -0
  168. package/dist/check-gitignore.d.ts +39 -0
  169. package/dist/check-gitignore.js +156 -0
  170. package/dist/check-gitignore.js.map +1 -0
  171. package/dist/check-hooks.d.ts +15 -0
  172. package/dist/check-hooks.js +72 -0
  173. package/dist/check-hooks.js.map +1 -0
  174. package/dist/check-lock.d.ts +16 -0
  175. package/dist/check-lock.js +94 -0
  176. package/dist/check-lock.js.map +1 -0
  177. package/dist/check-secrets.d.ts +11 -0
  178. package/dist/check-secrets.js +320 -0
  179. package/dist/check-secrets.js.map +1 -0
  180. package/dist/check-security.d.ts +13 -0
  181. package/dist/check-security.js +887 -0
  182. package/dist/check-security.js.map +1 -0
  183. package/dist/check-services.d.ts +10 -0
  184. package/dist/check-services.js +44 -0
  185. package/dist/check-services.js.map +1 -0
  186. package/dist/check-skills.d.ts +8 -0
  187. package/dist/check-skills.js +26 -0
  188. package/dist/check-skills.js.map +1 -0
  189. package/dist/check-tests.d.ts +43 -0
  190. package/dist/check-tests.js +175 -0
  191. package/dist/check-tests.js.map +1 -0
  192. package/dist/check-tools.d.ts +8 -0
  193. package/dist/check-tools.js +42 -0
  194. package/dist/check-tools.js.map +1 -0
  195. package/dist/check-web-search.d.ts +12 -0
  196. package/dist/check-web-search.js +168 -0
  197. package/dist/check-web-search.js.map +1 -0
  198. package/dist/ci-cd-publisher.d.ts +162 -0
  199. package/dist/ci-cd-publisher.js +319 -0
  200. package/dist/ci-cd-publisher.js.map +1 -0
  201. package/dist/cli.d.ts +2 -0
  202. package/dist/cli.js +4074 -0
  203. package/dist/cli.js.map +1 -0
  204. package/dist/clone.d.ts +25 -0
  205. package/dist/clone.js +73 -0
  206. package/dist/clone.js.map +1 -0
  207. package/dist/completions.d.ts +8 -0
  208. package/dist/completions.js +250 -0
  209. package/dist/completions.js.map +1 -0
  210. package/dist/compression-manager.d.ts +107 -0
  211. package/dist/compression-manager.js +250 -0
  212. package/dist/compression-manager.js.map +1 -0
  213. package/dist/config.d.ts +233 -0
  214. package/dist/config.js +255 -0
  215. package/dist/config.js.map +1 -0
  216. package/dist/context.d.ts +38 -0
  217. package/dist/context.js +86 -0
  218. package/dist/context.js.map +1 -0
  219. package/dist/cost-monitor.d.ts +72 -0
  220. package/dist/cost-monitor.js +218 -0
  221. package/dist/cost-monitor.js.map +1 -0
  222. package/dist/create-plugin.d.ts +22 -0
  223. package/dist/create-plugin.js +266 -0
  224. package/dist/create-plugin.js.map +1 -0
  225. package/dist/database.d.ts +123 -0
  226. package/dist/database.js +354 -0
  227. package/dist/database.js.map +1 -0
  228. package/dist/datadog-adapter.d.ts +60 -0
  229. package/dist/datadog-adapter.js +245 -0
  230. package/dist/datadog-adapter.js.map +1 -0
  231. package/dist/doctor.d.ts +15 -0
  232. package/dist/doctor.js +131 -0
  233. package/dist/doctor.js.map +1 -0
  234. package/dist/documentation-generator.d.ts +226 -0
  235. package/dist/documentation-generator.js +348 -0
  236. package/dist/documentation-generator.js.map +1 -0
  237. package/dist/elevation-scopes.d.ts +40 -0
  238. package/dist/elevation-scopes.js +110 -0
  239. package/dist/elevation-scopes.js.map +1 -0
  240. package/dist/elevation.d.ts +102 -0
  241. package/dist/elevation.js +449 -0
  242. package/dist/elevation.js.map +1 -0
  243. package/dist/env-diff.d.ts +27 -0
  244. package/dist/env-diff.js +104 -0
  245. package/dist/env-diff.js.map +1 -0
  246. package/dist/env-inspect.d.ts +28 -0
  247. package/dist/env-inspect.js +81 -0
  248. package/dist/env-inspect.js.map +1 -0
  249. package/dist/env-switch.d.ts +37 -0
  250. package/dist/env-switch.js +102 -0
  251. package/dist/env-switch.js.map +1 -0
  252. package/dist/environment.d.ts +27 -0
  253. package/dist/environment.js +148 -0
  254. package/dist/environment.js.map +1 -0
  255. package/dist/error-tracker.d.ts +92 -0
  256. package/dist/error-tracker.js +206 -0
  257. package/dist/error-tracker.js.map +1 -0
  258. package/dist/escalate.d.ts +11 -0
  259. package/dist/escalate.js +73 -0
  260. package/dist/escalate.js.map +1 -0
  261. package/dist/event-stream.d.ts +81 -0
  262. package/dist/event-stream.js +161 -0
  263. package/dist/event-stream.js.map +1 -0
  264. package/dist/fix.d.ts +42 -0
  265. package/dist/fix.js +419 -0
  266. package/dist/fix.js.map +1 -0
  267. package/dist/governance-middleware.d.ts +22 -0
  268. package/dist/governance-middleware.js +173 -0
  269. package/dist/governance-middleware.js.map +1 -0
  270. package/dist/governance.d.ts +44 -0
  271. package/dist/governance.js +236 -0
  272. package/dist/governance.js.map +1 -0
  273. package/dist/hooks.d.ts +25 -0
  274. package/dist/hooks.js +281 -0
  275. package/dist/hooks.js.map +1 -0
  276. package/dist/id-generator.d.ts +43 -0
  277. package/dist/id-generator.js +47 -0
  278. package/dist/id-generator.js.map +1 -0
  279. package/dist/image-optimizer.d.ts +92 -0
  280. package/dist/image-optimizer.js +202 -0
  281. package/dist/image-optimizer.js.map +1 -0
  282. package/dist/install.d.ts +15 -0
  283. package/dist/install.js +59 -0
  284. package/dist/install.js.map +1 -0
  285. package/dist/lock.d.ts +82 -0
  286. package/dist/lock.js +264 -0
  287. package/dist/lock.js.map +1 -0
  288. package/dist/login.d.ts +23 -0
  289. package/dist/login.js +132 -0
  290. package/dist/login.js.map +1 -0
  291. package/dist/mcp-kit-tools-model.d.ts +195 -0
  292. package/dist/mcp-kit-tools-model.js +6 -0
  293. package/dist/mcp-kit-tools-model.js.map +1 -0
  294. package/dist/mcp-kit-tools-service.d.ts +127 -0
  295. package/dist/mcp-kit-tools-service.js +943 -0
  296. package/dist/mcp-kit-tools-service.js.map +1 -0
  297. package/dist/mcp-orchestrator.d.ts +70 -0
  298. package/dist/mcp-orchestrator.js +175 -0
  299. package/dist/mcp-orchestrator.js.map +1 -0
  300. package/dist/mcp-server.d.ts +3 -0
  301. package/dist/mcp-server.js +722 -0
  302. package/dist/mcp-server.js.map +1 -0
  303. package/dist/middleware/rate-limiter.d.ts +74 -0
  304. package/dist/middleware/rate-limiter.js +342 -0
  305. package/dist/middleware/rate-limiter.js.map +1 -0
  306. package/dist/migration-runner.d.ts +66 -0
  307. package/dist/migration-runner.js +192 -0
  308. package/dist/migration-runner.js.map +1 -0
  309. package/dist/migrations.d.ts +25 -0
  310. package/dist/migrations.js +530 -0
  311. package/dist/migrations.js.map +1 -0
  312. package/dist/moderation-system.d.ts +153 -0
  313. package/dist/moderation-system.js +338 -0
  314. package/dist/moderation-system.js.map +1 -0
  315. package/dist/multi-agent-workflow-model.d.ts +125 -0
  316. package/dist/multi-agent-workflow-model.js +6 -0
  317. package/dist/multi-agent-workflow-model.js.map +1 -0
  318. package/dist/multi-agent-workflow-service.d.ts +102 -0
  319. package/dist/multi-agent-workflow-service.js +452 -0
  320. package/dist/multi-agent-workflow-service.js.map +1 -0
  321. package/dist/onepassword.d.ts +75 -0
  322. package/dist/onepassword.js +140 -0
  323. package/dist/onepassword.js.map +1 -0
  324. package/dist/open.d.ts +30 -0
  325. package/dist/open.js +166 -0
  326. package/dist/open.js.map +1 -0
  327. package/dist/output.d.ts +32 -0
  328. package/dist/output.js +295 -0
  329. package/dist/output.js.map +1 -0
  330. package/dist/partner-service.d.ts +101 -0
  331. package/dist/partner-service.js +191 -0
  332. package/dist/partner-service.js.map +1 -0
  333. package/dist/payout-service.d.ts +136 -0
  334. package/dist/payout-service.js +293 -0
  335. package/dist/payout-service.js.map +1 -0
  336. package/dist/pkg.d.ts +30 -0
  337. package/dist/pkg.js +162 -0
  338. package/dist/pkg.js.map +1 -0
  339. package/dist/plugin-loader.d.ts +16 -0
  340. package/dist/plugin-loader.js +124 -0
  341. package/dist/plugin-loader.js.map +1 -0
  342. package/dist/plugin-registry-model.d.ts +133 -0
  343. package/dist/plugin-registry-model.js +6 -0
  344. package/dist/plugin-registry-model.js.map +1 -0
  345. package/dist/plugin-registry-service.d.ts +109 -0
  346. package/dist/plugin-registry-service.js +361 -0
  347. package/dist/plugin-registry-service.js.map +1 -0
  348. package/dist/plugin-registry.d.ts +58 -0
  349. package/dist/plugin-registry.js +108 -0
  350. package/dist/plugin-registry.js.map +1 -0
  351. package/dist/plugin-updates.d.ts +135 -0
  352. package/dist/plugin-updates.js +326 -0
  353. package/dist/plugin-updates.js.map +1 -0
  354. package/dist/plugins-cli.d.ts +7 -0
  355. package/dist/plugins-cli.js +157 -0
  356. package/dist/plugins-cli.js.map +1 -0
  357. package/dist/plugins.d.ts +88 -0
  358. package/dist/plugins.js +251 -0
  359. package/dist/plugins.js.map +1 -0
  360. package/dist/policy.d.ts +66 -0
  361. package/dist/policy.js +160 -0
  362. package/dist/policy.js.map +1 -0
  363. package/dist/post-pull-audit.d.ts +39 -0
  364. package/dist/post-pull-audit.js +151 -0
  365. package/dist/post-pull-audit.js.map +1 -0
  366. package/dist/provision.d.ts +17 -0
  367. package/dist/provision.js +147 -0
  368. package/dist/provision.js.map +1 -0
  369. package/dist/query-optimizer.d.ts +102 -0
  370. package/dist/query-optimizer.js +199 -0
  371. package/dist/query-optimizer.js.map +1 -0
  372. package/dist/read-only-mode.d.ts +46 -0
  373. package/dist/read-only-mode.js +71 -0
  374. package/dist/read-only-mode.js.map +1 -0
  375. package/dist/redis-adapter.d.ts +71 -0
  376. package/dist/redis-adapter.js +278 -0
  377. package/dist/redis-adapter.js.map +1 -0
  378. package/dist/resilience-tests.d.ts +120 -0
  379. package/dist/resilience-tests.js +293 -0
  380. package/dist/resilience-tests.js.map +1 -0
  381. package/dist/revocation.d.ts +22 -0
  382. package/dist/revocation.js +100 -0
  383. package/dist/revocation.js.map +1 -0
  384. package/dist/run.d.ts +21 -0
  385. package/dist/run.js +80 -0
  386. package/dist/run.js.map +1 -0
  387. package/dist/scan-build.d.ts +18 -0
  388. package/dist/scan-build.js +100 -0
  389. package/dist/scan-build.js.map +1 -0
  390. package/dist/scan-plaintext.d.ts +24 -0
  391. package/dist/scan-plaintext.js +147 -0
  392. package/dist/scan-plaintext.js.map +1 -0
  393. package/dist/scan-staged.d.ts +15 -0
  394. package/dist/scan-staged.js +70 -0
  395. package/dist/scan-staged.js.map +1 -0
  396. package/dist/scan-transcripts.d.ts +23 -0
  397. package/dist/scan-transcripts.js +93 -0
  398. package/dist/scan-transcripts.js.map +1 -0
  399. package/dist/secret-backends.d.ts +50 -0
  400. package/dist/secret-backends.js +510 -0
  401. package/dist/secret-backends.js.map +1 -0
  402. package/dist/secret-expiration.d.ts +46 -0
  403. package/dist/secret-expiration.js +172 -0
  404. package/dist/secret-expiration.js.map +1 -0
  405. package/dist/secrets-migrate.d.ts +75 -0
  406. package/dist/secrets-migrate.js +185 -0
  407. package/dist/secrets-migrate.js.map +1 -0
  408. package/dist/secrets-model.d.ts +77 -0
  409. package/dist/secrets-model.js +6 -0
  410. package/dist/secrets-model.js.map +1 -0
  411. package/dist/secrets-onecli.d.ts +65 -0
  412. package/dist/secrets-onecli.js +113 -0
  413. package/dist/secrets-onecli.js.map +1 -0
  414. package/dist/secrets-propagate.d.ts +48 -0
  415. package/dist/secrets-propagate.js +201 -0
  416. package/dist/secrets-propagate.js.map +1 -0
  417. package/dist/secrets-pull.d.ts +34 -0
  418. package/dist/secrets-pull.js +118 -0
  419. package/dist/secrets-pull.js.map +1 -0
  420. package/dist/secrets-purge-history.d.ts +53 -0
  421. package/dist/secrets-purge-history.js +144 -0
  422. package/dist/secrets-purge-history.js.map +1 -0
  423. package/dist/secrets-rotate-cli.d.ts +54 -0
  424. package/dist/secrets-rotate-cli.js +438 -0
  425. package/dist/secrets-rotate-cli.js.map +1 -0
  426. package/dist/secrets-rotate.d.ts +38 -0
  427. package/dist/secrets-rotate.js +65 -0
  428. package/dist/secrets-rotate.js.map +1 -0
  429. package/dist/secrets-service.d.ts +73 -0
  430. package/dist/secrets-service.js +283 -0
  431. package/dist/secrets-service.js.map +1 -0
  432. package/dist/secrets-set.d.ts +25 -0
  433. package/dist/secrets-set.js +33 -0
  434. package/dist/secrets-set.js.map +1 -0
  435. package/dist/secrets-sync.d.ts +21 -0
  436. package/dist/secrets-sync.js +215 -0
  437. package/dist/secrets-sync.js.map +1 -0
  438. package/dist/secrets-validate.d.ts +41 -0
  439. package/dist/secrets-validate.js +126 -0
  440. package/dist/secrets-validate.js.map +1 -0
  441. package/dist/secrets-vault-migrate.d.ts +71 -0
  442. package/dist/secrets-vault-migrate.js +258 -0
  443. package/dist/secrets-vault-migrate.js.map +1 -0
  444. package/dist/secrets.d.ts +16 -0
  445. package/dist/secrets.js +72 -0
  446. package/dist/secrets.js.map +1 -0
  447. package/dist/security-hardening.d.ts +150 -0
  448. package/dist/security-hardening.js +275 -0
  449. package/dist/security-hardening.js.map +1 -0
  450. package/dist/security-policy.d.ts +89 -0
  451. package/dist/security-policy.js +174 -0
  452. package/dist/security-policy.js.map +1 -0
  453. package/dist/security-prescan.d.ts +117 -0
  454. package/dist/security-prescan.js +566 -0
  455. package/dist/security-prescan.js.map +1 -0
  456. package/dist/sentry-adapter.d.ts +49 -0
  457. package/dist/sentry-adapter.js +227 -0
  458. package/dist/sentry-adapter.js.map +1 -0
  459. package/dist/service-adapter.d.ts +94 -0
  460. package/dist/service-adapter.js +162 -0
  461. package/dist/service-adapter.js.map +1 -0
  462. package/dist/skills.d.ts +13 -0
  463. package/dist/skills.js +17 -0
  464. package/dist/skills.js.map +1 -0
  465. package/dist/sla-monitor.d.ts +107 -0
  466. package/dist/sla-monitor.js +233 -0
  467. package/dist/sla-monitor.js.map +1 -0
  468. package/dist/stack-detector.d.ts +12 -0
  469. package/dist/stack-detector.js +251 -0
  470. package/dist/stack-detector.js.map +1 -0
  471. package/dist/team-model.d.ts +58 -0
  472. package/dist/team-model.js +83 -0
  473. package/dist/team-model.js.map +1 -0
  474. package/dist/team-service.d.ts +54 -0
  475. package/dist/team-service.js +206 -0
  476. package/dist/team-service.js.map +1 -0
  477. package/dist/toml-generator.d.ts +8 -0
  478. package/dist/toml-generator.js +223 -0
  479. package/dist/toml-generator.js.map +1 -0
  480. package/dist/triage-sandbox.d.ts +34 -0
  481. package/dist/triage-sandbox.js +167 -0
  482. package/dist/triage-sandbox.js.map +1 -0
  483. package/dist/triage.d.ts +30 -0
  484. package/dist/triage.js +79 -0
  485. package/dist/triage.js.map +1 -0
  486. package/dist/update-check.d.ts +13 -0
  487. package/dist/update-check.js +91 -0
  488. package/dist/update-check.js.map +1 -0
  489. package/dist/utils/colors.d.ts +14 -0
  490. package/dist/utils/colors.js +15 -0
  491. package/dist/utils/colors.js.map +1 -0
  492. package/dist/utils/didYouMean.d.ts +15 -0
  493. package/dist/utils/didYouMean.js +47 -0
  494. package/dist/utils/didYouMean.js.map +1 -0
  495. package/dist/utils/exec.d.ts +21 -0
  496. package/dist/utils/exec.js +23 -0
  497. package/dist/utils/exec.js.map +1 -0
  498. package/dist/utils/execFileNoThrow.d.ts +14 -0
  499. package/dist/utils/execFileNoThrow.js +29 -0
  500. package/dist/utils/execFileNoThrow.js.map +1 -0
  501. package/dist/utils/flags.d.ts +19 -0
  502. package/dist/utils/flags.js +36 -0
  503. package/dist/utils/flags.js.map +1 -0
  504. package/dist/utils/parseCommand.d.ts +16 -0
  505. package/dist/utils/parseCommand.js +13 -0
  506. package/dist/utils/parseCommand.js.map +1 -0
  507. package/dist/utils/prompt.d.ts +13 -0
  508. package/dist/utils/prompt.js +35 -0
  509. package/dist/utils/prompt.js.map +1 -0
  510. package/dist/utils/promptSelect.d.ts +19 -0
  511. package/dist/utils/promptSelect.js +89 -0
  512. package/dist/utils/promptSelect.js.map +1 -0
  513. package/dist/utils/redactSecrets.d.ts +24 -0
  514. package/dist/utils/redactSecrets.js +134 -0
  515. package/dist/utils/redactSecrets.js.map +1 -0
  516. package/dist/validation/dynamic-schema.d.ts +29 -0
  517. package/dist/validation/dynamic-schema.js +76 -0
  518. package/dist/validation/dynamic-schema.js.map +1 -0
  519. package/package.json +52 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 kit Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,617 @@
1
+ # kit
2
+
3
+ > One command from `git clone` to fully working dev environment.
4
+
5
+ For AI agents and humans. Manages tools, auth, secrets, and project setup. Zero LLM calls, local-first, multi-vault.
6
+
7
+ 🌐 [sandstre.am/kit](https://sandstre.am/kit)
8
+
9
+ ```bash
10
+ npx sandstream-kit setup
11
+ ```
12
+
13
+ ## Problem
14
+
15
+ Every time you (or an agent) starts on a new project:
16
+ - Missing CLI tools (supabase, vercel, eas, gcloud...)
17
+ - Not logged in to services
18
+ - Missing API keys and secrets
19
+ - Wrong versions
20
+ - No idea what's needed
21
+
22
+ ## Why kit exists
23
+
24
+ The same wall kept showing up — for a human at a new laptop and for an AI agent in a
25
+ fresh checkout: API keys scattered across `.env` files, shell history and password
26
+ managers (some live, some expired, none in one place); the same setup prompts burning
27
+ tokens to rediscover what the last session already knew; and an agent one `npm install`
28
+ away from pulling a package nobody vetted.
29
+
30
+ kit makes "get this project running, safely" declarative and repeatable: one config
31
+ materializes tools, logins and secrets the same way every time, keeps credentials in a
32
+ vault instead of on the loose, and puts a pre-install **triage** step in front of new
33
+ dependencies so an unknown package gets looked at before it lands. Zero LLM calls,
34
+ local-first, no telemetry — the intelligence stays where you put it.
35
+
36
+ ## Solution
37
+
38
+ `.kit.toml` per project:
39
+
40
+ ```toml
41
+ [tools]
42
+ node = "22"
43
+ pnpm = "latest"
44
+ supabase = "2.78"
45
+
46
+ [services.supabase]
47
+ login = "supabase login"
48
+ check = "supabase projects list"
49
+ link = "supabase link --project-ref {project_ref}"
50
+ project_ref = "your-project-ref"
51
+
52
+ [services.vercel]
53
+ login = "vercel login"
54
+ check = "vercel whoami"
55
+
56
+ [services.stripe]
57
+ login = "stripe login"
58
+ check = "stripe config --list"
59
+
60
+ [secrets]
61
+ store = "1password" # or env, dotenvx, vault, aws-sm, gcp-sm, azure-kv, infisical, doppler, bitwarden, eas
62
+ template = ".env.template"
63
+
64
+ [secrets.keys]
65
+ SUPABASE_URL = { source = "config", value = "https://{supabase.project_ref}.supabase.co" }
66
+ STRIPE_SECRET_KEY = { source = "1password", ref = "op://Development/Stripe/secret-key" }
67
+ REVENUECAT_KEY = { source = "eas", name = "REVENUECAT_APPLE_API_KEY" }
68
+
69
+ [setup]
70
+ install = "pnpm install"
71
+ migrate = "supabase db push"
72
+ seed = "pnpm seed"
73
+ verify = "pnpm dev & sleep 5 && curl localhost:3000"
74
+ ```
75
+
76
+ ## Commands
77
+
78
+ Complete reference: [`docs/COMMANDS.md`](./docs/COMMANDS.md). The shortlist:
79
+
80
+ - `kit init` — Auto-detect project stack → generate `.kit.toml`
81
+ - `kit setup` — Full pipeline: install → hooks → login → secrets → check
82
+ - `kit check` — Status of tools, services, secrets, hooks, security, tests
83
+ - `kit fix` — Auto-remediate gaps (tools, gitignore, hooks, .env.template)
84
+ - `kit secrets {migrate,vault-migrate,rotate,pull,set-value,validate}` — Secret lifecycle
85
+ - `kit auth {elevate,setup-totp,status,revoke}` — Elevation gate + TOTP
86
+ - `kit mcp {list,auth,set-token,clear}` — MCP-server orchestrator
87
+ - `kit env {list,switch,current,diff}` — Environment routing + drift detection
88
+ - `kit triage {npm,pip,docker,repo,skill}` — Pre-install security check
89
+ - `kit security {scan-build,scan-staged,verify-pull,costs,policy}` — Security ops
90
+ - `kit hooks {install,add,sync}` — Git hooks + bypass detector
91
+ - `kit governance` / `kit audit` — Policy + audit-log inspection
92
+ - `kit --read-only <subcommand>` — Session-wide refusal of all writes
93
+
94
+ ### What you'll see
95
+
96
+ `kit init` — detects the stack, previews `.kit.toml`, then runs setup:
97
+
98
+ ```text
99
+ kit init
100
+ ──────────────────────────────────────────────────
101
+ ✓ Detected: TypeScript / Next.js (confidence: 92%)
102
+
103
+ Preview — .kit.toml
104
+ + [tools]
105
+ + node = "22"
106
+ ...
107
+ ✓ Generated .kit.toml
108
+ ```
109
+
110
+ `kit setup` — six-stage pipeline, each stage gated on the last:
111
+
112
+ ```text
113
+ kit setup
114
+ ──────────────────────────────────────────────────
115
+ [1/6] Install
116
+ ✓ node installed v22.22.2
117
+ [2/6] Git Hooks ✓ pre-commit installed
118
+ [3/6] Login ✓ supabase authenticated
119
+ [4/6] Secrets ✓ Wrote .env.local (from keys)
120
+ [5/6] Agent config ✓ Claude Code → CLAUDE.md (created)
121
+ [6/6] Verify
122
+ Setup complete — you're ready to go! ✓
123
+ ```
124
+
125
+ Step 5 teaches the agent in the repo (Claude Code, Codex, Cursor, Cline) to
126
+ *use* kit — it writes a small managed "run kit check / triage before install /
127
+ vault your secrets" block into the agent's rules file (`CLAUDE.md`, `AGENTS.md`,
128
+ `.cursorrules`, `.clinerules`). Run it standalone any time with `kit agent-config`.
129
+ The block is regenerated in place on re-run; edit outside its markers freely.
130
+
131
+ `kit check` — grouped status tables with a pass/fail summary:
132
+
133
+ ```text
134
+ Tools
135
+ ✓ node 22.22.2 (need 22)
136
+ ✗ supabase not installed (need 2.78)
137
+ Services
138
+ ✓ vercel authenticated
139
+ Security
140
+ ✓ .env gitignored pass all .env patterns in .gitignore
141
+ ✓ pinned versions pass all dependencies pinned
142
+
143
+ 7/8 checks passed (1 issues)
144
+ Run kit install to fix tools, kit login to fix auth
145
+ ```
146
+
147
+ `kit fix` — six remediation steps, then a fixed/manual summary:
148
+
149
+ ```text
150
+ kit fix
151
+ ──────────────────────────────────────────────────
152
+ [1/6] Tools ✓ supabase installed v2.78.0
153
+ [2/6] Lock Files ✓ Generated cli-lock.json
154
+ [5/6] .gitignore ✓ Added 2 pattern(s) to .gitignore
155
+ [6/6] Git Hooks ✓ Installed 1 hook(s): pre-commit
156
+
157
+ Summary
158
+ ✓ Fixed 4 issue(s) automatically
159
+ ! 1 issue(s) require manual intervention:
160
+ • Login to stripe: run 'kit login' or 'stripe login'
161
+ ```
162
+
163
+ `kit secrets` — resolves each key from the vault and writes `.env.local`:
164
+
165
+ ```text
166
+ Generating secrets... (env=dev)
167
+
168
+ ✓ SUPABASE_URL resolved Derived from config
169
+ ✓ STRIPE_SECRET_KEY resolved op://Development/Stripe/secret-key
170
+ ✗ REVENUECAT_KEY missing not found in eas
171
+
172
+ ✓ Wrote .env.local (from keys)
173
+ ```
174
+
175
+ `kit triage <type> <target>` — security verdict before you install:
176
+
177
+ ```text
178
+ Running triage on npm: left-pad
179
+
180
+ Health score: 7/10
181
+ Critical issues: 0
182
+ Warnings: 1
183
+ TRIAGE PASSED
184
+ ```
185
+
186
+ Trust model documented in [`docs/THREAT_MODEL.md`](./docs/THREAT_MODEL.md);
187
+ data flow per command in [`docs/DATA_FLOW.md`](./docs/DATA_FLOW.md);
188
+ release-verification in [`docs/VERIFY.md`](./docs/VERIFY.md).
189
+ - `kit doctor` — Deep diagnostics: Node.js version, mise, .env.local, tools in PATH, git hooks
190
+ - `kit env` — Inspect environment variables from .env.local (`--show-values`, `--missing`, `--json`)
191
+ - `kit mcp` — Run the MCP server over stdio for AI assistants (auto-detected: no sub-command + non-TTY). Interactively, `kit mcp list|auth|set-token|clear` manages declared servers
192
+ - `kit analyze` — Detect stack + emit draft `CLAUDE.md` / `RULES.md` from git history + framework markers
193
+
194
+ ### Secrets management
195
+
196
+ End-to-end secret lifecycle — from `.env*` plaintext discovery, through vault
197
+ migration, to deploy-platform propagation, to destructive history cleanup.
198
+
199
+ - `kit secrets` — Materialize `.env.local` from the configured vault store
200
+ - `kit secrets migrate` — Move plaintext credentials from `.env*` into the vault
201
+ - `kit secrets rotate <KEY>` — Mint a new value (`--random` opaque token / `--value <new>` explicit)
202
+ - `kit secrets rotate <KEY> --from-cli` — Provider-native playbooks (Stripe / AWS-IAM / GCP-IAM / GitHub PAT / OpenAI)
203
+ - `kit secrets rotate <KEY> --via supabase-mgmt-api --project <ref>` — Full automation via Supabase Mgmt API. Auto-detects scoped-key-mint vs jwt-secret-roll.
204
+ - `kit secrets propagate <KEY> --to vercel,github,...` — Push value to deploy targets (stdin-safe via `--stdin`)
205
+ - `kit secrets revoke-old --via supabase-mgmt-api --key-id <id>` — Revoke a previously-minted scoped key
206
+ - `kit secrets onecli register <KEY> --host <pattern>` — Register with the OneCLI gateway so the agent process never sees the real value
207
+ - `kit secrets purge-history <pattern> --force-history` — Destructive: rewrite git history to scrub a leaked value (wraps `git filter-repo` / `bfg`). Requires elevation + explicit flag.
208
+
209
+ ### Security scanners
210
+
211
+ - `kit security scan-staged` — Pre-commit: scan staged blobs for known credential patterns
212
+ - `kit security scan-build` — Walk `.next/`, `dist/`, `build/` for credentials inlined into artifacts (`NEXT_PUBLIC_` typos)
213
+ - `kit security scan-transcripts` — Walk `.claude/`, `~/.claude/projects/`, `.opencode/` for replayed-secret leaks
214
+ - `kit security check-gitignore [--fix]` — Verify `.env*`, `*.pem`, `id_rsa`, `.kit/elevation.json` are ignored
215
+ - `kit security verify-pull [--base <ref>]` — After `git pull`: audit new deps, gitignore drops, introduced secrets, policy changes
216
+ - `kit security policy [init|add <pkg>|check]` — Dependency allowlist enforcement + per-key spend caps/TTL/scope
217
+ - `kit security costs` — Snapshot per-key spend vs policy cap (Stripe live; OpenAI/Anthropic/Resend/Vercel stubbed)
218
+ - `kit security clear-cache` — Reset the cached supply-chain scanner binary (use after an intentional rebuild)
219
+
220
+ ### Built-in git hooks
221
+
222
+ `kit hooks add <name>` installs a managed hook that calls back into kit. No `.kit.toml` config required.
223
+
224
+ - `secret-scan` (pre-commit) — Block commits that introduce known credential patterns
225
+ - `post-pull-audit` (post-merge) — Run `verify-pull` after every `git pull` / merge
226
+
227
+ ### Environments + elevation
228
+
229
+ Production credentials are gated behind explicit env-switching and short-lived elevation.
230
+
231
+ - `kit env switch <dev|staging|prod>` — Toggle the active environment marker
232
+ - `kit env current` — Show active env (color-coded), `kit env list` for available
233
+ - `kit auth elevate [--scope <op>] [--ttl-minutes N]` — Mint a TTL'd elevation marker (TOTP or yes-prompt). Required before any destructive secret op.
234
+ - `kit auth setup-totp` — One-time TOTP enrollment (writes `~/.kit/totp-secret` 0600)
235
+ - `kit auth status` — Show active elevation
236
+ - `kit auth revoke` — Drop the elevation marker early
237
+ - `kit audit secrets [--since-days N] [--key <name>]` — Forensics: who touched which key, when
238
+
239
+ ### Quality gates (baseline-aware)
240
+
241
+ - `kit check --enforce-tests` — Fail when net-new source files lack a sibling `.test.ts`
242
+ - `kit design` — Static a11y scan (img-alt, button-empty, anchor-no-href, input-no-label) + design-token consistency (raw `#hex` / `px` bypass). `--enforce` to gate, `--json` for machine output
243
+ - `kit review` — Meta-runner: `check` + `design` in one command. Use as a single PR-gate entry point for AI agents
244
+ - `kit baseline freeze` — Snapshot current findings (untested files, a11y, tokens) into `.kit-baseline.json` so pre-existing warnings stay warnings and only net-new findings can fail
245
+ - `kit baseline show` — Print current baseline
246
+
247
+ ### Supply chain
248
+
249
+ - **Bumblebee** — Built-in supply-chain scanner. Verifies every dependency against pinned SHA-256 checksums in `bumblebee.lock.json`. Re-verifies the cache before reuse so a tampered local file is caught (kind `integrity`). Runs in CI on every PR
250
+ - `kit triage npm|pip|docker|repo|skill <target>` — Pre-install security evaluation via triage skill
251
+ - `kit triage npm <pkg> --sandbox` — Offline behavioral inspection: `npm pack` → extract → scan for install scripts, eval/base64/network patterns, unexpected scripts, oversized files. No code executes
252
+ - Supply-chain findings auto-append to `.kit-audit.jsonl` (one JSON line per finding) for SIEM ingest
253
+ - Releases ship with SLSA provenance (`npm publish --provenance`), CycloneDX + SPDX SBOMs on every GitHub release, cosign-signed Docker images, and weekly OpenSSF Scorecard
254
+
255
+ ## Lock Files
256
+
257
+ kit uses lock files in `.kit/` to track exact versions of skills and tools:
258
+
259
+ - `.kit/kit.json` — Identifies which kit this project uses (e.g., "sandstream/standard@1.2.0")
260
+ - `.kit/skills-lock.json` — Agent skills with versions and metadata
261
+ - `.kit/cli-lock.json` — CLI tools with versions and installation sources
262
+
263
+ This allows teams to codify and version their development methodology, similar to `package-lock.json` for dependencies.
264
+
265
+ ```bash
266
+ kit init # Generate lock files and setup project
267
+ kit upgrade # Update lock files from .kit.toml
268
+ kit check # Verify lock files are in sync
269
+ ```
270
+
271
+ ## Service Provisioning
272
+
273
+ kit can automatically provision and configure services for your project — designed for agent-native workflows (no browser required):
274
+
275
+ ```bash
276
+ kit add stripe/payments # Set up Stripe with API keys
277
+ kit add supabase/db # Initialize Supabase project
278
+ kit add vercel/hosting # Link repository to Vercel
279
+ ```
280
+
281
+ ### How it works
282
+
283
+ 1. Checks if the service CLI is installed and authenticated
284
+ 2. Provisions resources via CLI/API (no browser needed)
285
+ 3. Extracts credentials and configuration
286
+ 4. Writes secrets to `.env.local`
287
+ 5. Records provisioning metadata in `skills-lock.json`
288
+
289
+ ### Available Services
290
+
291
+ - **stripe/payments** — Payment processing with Stripe
292
+ - Requires: `stripe` CLI ([install](https://stripe.com/docs/stripe-cli))
293
+ - Provisions: API keys, creates test mode configuration
294
+ - Secrets: `STRIPE_SECRET_KEY`, `STRIPE_PUBLISHABLE_KEY`
295
+ - Example:
296
+ ```bash
297
+ brew install stripe/stripe-cli/stripe
298
+ stripe login
299
+ kit add stripe/payments
300
+ ```
301
+
302
+ - **supabase/db** — Database and authentication with Supabase
303
+ - Requires: `supabase` CLI ([install](https://supabase.com/docs/guides/cli))
304
+ - Provisions: Local dev instance or links existing project
305
+ - Secrets: `SUPABASE_URL`, `SUPABASE_ANON_KEY`, `SUPABASE_SERVICE_ROLE_KEY`
306
+ - Example:
307
+ ```bash
308
+ brew install supabase/tap/supabase
309
+ supabase login
310
+ kit add supabase/db
311
+ ```
312
+
313
+ - **vercel/hosting** — Hosting and deployment with Vercel
314
+ - Requires: `vercel` CLI ([install](https://vercel.com/docs/cli))
315
+ - Provisions: Links repository, sets up deployment
316
+ - Secrets: `VERCEL_PROJECT_ID`, `VERCEL_ORG_ID`
317
+ - Example:
318
+ ```bash
319
+ npm i -g vercel
320
+ vercel login
321
+ kit add vercel/hosting
322
+ ```
323
+
324
+ - **expo/eas** — Mobile app builds with Expo EAS
325
+ - Requires: `eas` CLI ([install](https://docs.expo.dev/eas/))
326
+ - Provisions: EAS project, build configuration
327
+ - Secrets: `EXPO_TOKEN`, EAS credentials
328
+ - Example:
329
+ ```bash
330
+ npm i -g eas-cli
331
+ eas login
332
+ kit add expo/eas
333
+ ```
334
+
335
+ - **searxng/instance** — Privacy-respecting search engine
336
+ - Requires: `docker` and `docker-compose`
337
+ - Provisions: Local SearXNG instance
338
+ - Secrets: `SEARXNG_URL`, `SEARXNG_SECRET`
339
+ - Example:
340
+ ```bash
341
+ kit add searxng/instance
342
+ ```
343
+
344
+ The full adapter set (each provisions/reuses the relevant keys; run `kit add <id>`):
345
+
346
+ | Service | Purpose |
347
+ |---|---|
348
+ | `stripe/payments` | Stripe payment processing (products + price IDs) |
349
+ | `supabase/db` | Supabase database + authentication |
350
+ | `vercel/hosting` | Vercel hosting + deployment |
351
+ | `flyio/hosting` | Fly.io container deployment |
352
+ | `railway/hosting` | Railway (Heroku-style) deployment |
353
+ | `neon/db` | Neon serverless Postgres |
354
+ | `planetscale/db` | PlanetScale serverless MySQL |
355
+ | `upstash/redis` | Upstash serverless Redis |
356
+ | `cloudflare/r2` | Cloudflare R2 object storage (S3-compatible) |
357
+ | `clerk/auth` | Clerk authentication + user management |
358
+ | `resend/email` | Resend transactional email |
359
+ | `loops/email` | Loops marketing + transactional email |
360
+ | `sentry/monitoring` | Sentry error tracking + performance monitoring |
361
+ | `posthog/analytics` | PostHog product analytics + session recording |
362
+ | `tinybird/analytics` | Tinybird real-time analytics on ClickHouse |
363
+ | `liveblocks/realtime` | Liveblocks collaborative realtime (presence, cursors) |
364
+ | `trigger/background` | Trigger.dev background jobs |
365
+ | `inngest/background` | Inngest event-driven background jobs |
366
+ | `flagsmith/flags` | Flagsmith feature flags + remote config |
367
+ | `expo/eas` | Expo Application Services (mobile builds) |
368
+ | `searxng/instance` | Self-hosted SearXNG search engine |
369
+
370
+ Add your own with `kit create-plugin <name>` (see [docs/PLUGIN_DEVELOPMENT.md](./docs/PLUGIN_DEVELOPMENT.md)).
371
+
372
+ ### Example Workflows
373
+
374
+ **New project setup:**
375
+ ```bash
376
+ # Clone project
377
+ git clone https://github.com/user/my-app
378
+ cd my-app
379
+
380
+ # Check what's needed
381
+ kit check
382
+
383
+ # Provision all services at once
384
+ kit add stripe/payments
385
+ kit add supabase/db
386
+ kit add vercel/hosting
387
+
388
+ # Verify everything is configured
389
+ kit check
390
+ ```
391
+
392
+ **Agent-driven provisioning:**
393
+ ```bash
394
+ # Agent provisions services automatically
395
+ kit add stripe/payments
396
+ # → Checks if stripe CLI installed
397
+ # → Verifies authentication
398
+ # → Creates API keys
399
+ # → Writes to .env.local
400
+ # → Updates skills-lock.json
401
+
402
+ # Check what was provisioned
403
+ cat .env.local | grep STRIPE
404
+ cat skills-lock.json | jq '.provisioned["stripe/payments"]'
405
+ ```
406
+
407
+ **Creating custom adapters:**
408
+
409
+ See [docs/CUSTOM_ADAPTERS.md](./docs/CUSTOM_ADAPTERS.md) for a complete guide on creating custom service adapters.
410
+
411
+ **Troubleshooting:**
412
+
413
+ Common issues and solutions:
414
+ - **"Required tool not installed"** — Install the service's CLI tool (see examples above)
415
+ - **"Not authenticated"** — Run the service's login command (e.g., `stripe login`)
416
+ - **"Provisioning failed"** — Check CLI is in your PATH: `which stripe`
417
+ - For more help, see [docs/CUSTOM_ADAPTERS.md](./docs/CUSTOM_ADAPTERS.md#troubleshooting)
418
+
419
+ ## Agent Integration
420
+
421
+ Agents run `kit check` at start. If anything fails:
422
+ 1. Auto-fix what's possible (`kit fix`)
423
+ 2. Escalate to human what requires browser auth (`kit escalate`)
424
+ 3. Continue working on what's available
425
+
426
+ ## Governance & Access Control
427
+
428
+ kit includes governance features for managing agent access to production systems:
429
+
430
+ ```toml
431
+ [governance]
432
+ enabled = true
433
+ environment = "dev" # dev, staging, prod
434
+
435
+ [governance.access]
436
+ dev = { read = true, write = true, delete = true }
437
+ staging = { read = true, write = true, delete = false }
438
+ prod = { read = true, write = false, delete = false }
439
+
440
+ [governance.agent]
441
+ id = "agent-123"
442
+ name = "Founding Engineer"
443
+ max_tokens_per_day = 1000000
444
+ max_operations_per_hour = 100
445
+
446
+ [governance.audit]
447
+ enabled = true
448
+ log_file = ".kit-audit.jsonl"
449
+
450
+ [governance.approval]
451
+ destructive_operations = ["delete", "drop", "truncate"]
452
+ production_writes = true
453
+
454
+ [governance.revocation]
455
+ enabled = true
456
+ revocation_endpoint = "https://audit.example.com/agents/{agent_id}/status"
457
+ ```
458
+
459
+ ### Features
460
+
461
+ - **Environment-based access control** — Different permissions per environment
462
+ - **Audit logging** — All operations logged with automatic secret redaction
463
+ - **Budget limits** — Token (daily) and operation (hourly) tracking
464
+ - **Approval gates** — Interactive prompts for destructive operations
465
+ - **Revocation** — Remote status checking via API
466
+ - **Secret expiration** — Monitoring with warnings for expiring secrets
467
+
468
+ ### Environment Detection
469
+
470
+ kit automatically detects the current environment using:
471
+ 1. **NODE_ENV** environment variable (highest priority)
472
+ 2. **Git branch** name (fallback: main/master→prod, staging→staging, others→dev)
473
+ 3. **Default** to dev if neither is available
474
+
475
+ Set NODE_ENV in your `.env.local`:
476
+ ```bash
477
+ # Options: development, staging, production
478
+ NODE_ENV=development
479
+ ```
480
+
481
+ This affects governance access control, security policies, and audit logging.
482
+
483
+ See [GOVERNANCE.md](./GOVERNANCE.md) for detailed documentation.
484
+
485
+ ## AI Assistant Setup
486
+
487
+ kit exposes its capabilities as an MCP server, making it usable directly by Claude Code, Cursor, Windsurf, Cline, and any other MCP-compatible AI assistant. Once registered, assistants can call `kit_check`, `kit_fix`, `kit_add`, and other tools without leaving their context.
488
+
489
+ ### Claude Code
490
+
491
+ A template config is included at `claude-mcp.json`. Copy it to activate:
492
+
493
+ ```bash
494
+ cp claude-mcp.json .claude/mcp.json
495
+ ```
496
+
497
+ Or add manually to `.claude/mcp.json` (or `~/.claude/mcp.json` for all projects):
498
+
499
+ ```json
500
+ {
501
+ "mcpServers": {
502
+ "kit": {
503
+ "command": "npx",
504
+ "args": ["sandstream-kit", "mcp"]
505
+ }
506
+ }
507
+ }
508
+ ```
509
+
510
+ Or if installed globally (`npm install -g sandstream-kit`):
511
+
512
+ ```json
513
+ {
514
+ "mcpServers": {
515
+ "kit": {
516
+ "command": "kit",
517
+ "args": ["mcp"]
518
+ }
519
+ }
520
+ }
521
+ ```
522
+
523
+ ### Cursor
524
+
525
+ `.cursor/mcp.json` is already included in this repo. For other projects, add to `.cursor/mcp.json` in your project root:
526
+
527
+ ```json
528
+ {
529
+ "mcpServers": {
530
+ "kit": {
531
+ "command": "npx",
532
+ "args": ["sandstream-kit", "mcp"]
533
+ }
534
+ }
535
+ }
536
+ ```
537
+
538
+ ### Windsurf / Cline
539
+
540
+ In Windsurf, open **Settings → MCP Servers** and add:
541
+
542
+ ```json
543
+ {
544
+ "kit": {
545
+ "command": "npx",
546
+ "args": ["sandstream-kit", "mcp"],
547
+ "transport": "stdio"
548
+ }
549
+ }
550
+ ```
551
+
552
+ For Cline, add the same config to your `cline_mcp_settings.json`.
553
+
554
+ ### Available MCP Tools
555
+
556
+ | Tool | Description |
557
+ |------|-------------|
558
+ | `kit_check` | Run all checks, return structured status JSON |
559
+ | `kit_install` | Install missing tools via mise |
560
+ | `kit_login` | Attempt service logins (non-interactive) |
561
+ | `kit_secrets` | Generate `.env.local` from configured sources |
562
+ | `kit_fix` | Auto-fix issues (install tools, generate lock files) |
563
+ | `kit_add` | Provision a service integration (stripe, supabase, etc.) |
564
+ | `kit_env` | Inspect `.env.local` — list keys with set/missing status and redacted values |
565
+
566
+ ### Example: kit_check response
567
+
568
+ ```json
569
+ {
570
+ "ok": true,
571
+ "tools": [
572
+ { "name": "node", "required": "latest", "installed": "22.22.2", "ok": true }
573
+ ],
574
+ "secrets": [
575
+ { "name": "APP_NAME", "source": "config", "available": true, "detail": "Derived from config" }
576
+ ],
577
+ "security": [
578
+ { "category": "secrets", "name": ".env gitignored", "status": "pass", "detail": "all .env patterns in .gitignore" },
579
+ { "category": "supply-chain", "name": "pinned versions", "status": "pass", "detail": "all dependencies pinned" }
580
+ ],
581
+ "locks": [
582
+ { "category": "cli-lock", "exists": true, "inSync": true, "missing": [], "detail": "all tools locked" }
583
+ ]
584
+ }
585
+ ```
586
+
587
+ ## OpenRouter API Key Setup
588
+
589
+ kit uses OpenRouter for AI model access via the OpenCode CLI. To set up:
590
+
591
+ 1. Get your API key from [OpenRouter](https://openrouter.ai/keys)
592
+ 2. Add it to your `.env.local` file:
593
+ ```bash
594
+ OPENROUTER_API_KEY=<your-openrouter-key>
595
+ ```
596
+ 3. The key is automatically loaded by `opencode.json`
597
+
598
+ **Security Note:** Never commit your API key to git. It's configured as an environment variable in `opencode.json` and should only exist in `.env.local`.
599
+
600
+ ## Community & Support
601
+
602
+ ### Getting Help
603
+
604
+ - 📚 **Plugin Development** — [docs/PLUGIN_DEVELOPMENT.md](docs/PLUGIN_DEVELOPMENT.md), [docs/ADAPTER_GUIDE.md](docs/ADAPTER_GUIDE.md), [docs/MCP_TOOLS_GUIDE.md](docs/MCP_TOOLS_GUIDE.md)
605
+ - 💬 **Discussions** — [github.com/sandstream/kit/discussions](https://github.com/sandstream/kit/discussions)
606
+ - 🐛 **Issues** — [github.com/sandstream/kit/issues](https://github.com/sandstream/kit/issues)
607
+ - 🤝 **Contributing** — [CONTRIBUTING.md](CONTRIBUTING.md), [COMMUNITY.md](COMMUNITY.md)
608
+
609
+ ### Code of Conduct
610
+
611
+ See [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md).
612
+
613
+ ## Stack
614
+
615
+ - [mise-en-place](https://mise.jdx.dev) — tool version management
616
+ - [1Password CLI](https://developer.1password.com/docs/cli/) — secret management
617
+ - Node.js CLI (TypeScript)
@@ -0,0 +1,35 @@
1
+ import type { ServiceAdapter } from "./types.js";
2
+ /**
3
+ * Factory for the common "API-key only" service adapter.
4
+ *
5
+ * Many services have no programmatic account/key creation — provisioning is
6
+ * just "do the required keys exist in the environment?". Those adapters were
7
+ * ~50 lines of identical check/provision boilerplate differing only in key
8
+ * names, an optional value-with-default, an optional key-prefix sanity check,
9
+ * and the dashboard steps. This collapses each to a small spec. Adapters with
10
+ * genuinely bespoke logic (CLI provisioning, key derivation) stay hand-written.
11
+ */
12
+ interface RequiredKey {
13
+ env: string;
14
+ /** Optional sanity prefix — the key must start with this to count as present. */
15
+ prefix?: string;
16
+ }
17
+ interface OptionalKey {
18
+ env: string;
19
+ /** If set, this value is written when the key is absent. If omitted, the key
20
+ * is pass-through: included in secrets only when already present. */
21
+ default?: string;
22
+ }
23
+ export interface ApiKeyAdapterSpec {
24
+ name: string;
25
+ description: string;
26
+ /** Keys that must all be present for the service to count as configured. */
27
+ required: (string | RequiredKey)[];
28
+ /** Extra keys carried into the generated secrets (defaults / pass-through). */
29
+ optional?: OptionalKey[];
30
+ /** "How to get the key(s)" lines shown when required keys are missing. Must
31
+ * mention the dashboard URL and key names — that's the actionable part. */
32
+ steps: string[];
33
+ }
34
+ export declare function apiKeyAdapter(spec: ApiKeyAdapterSpec): ServiceAdapter;
35
+ export {};