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
@@ -0,0 +1,19 @@
1
+ import { apiKeyAdapter } from "./api-key-adapter.js";
2
+ /**
3
+ * Inngest — event-driven background jobs and scheduled functions.
4
+ * API-based; requires both the event key and signing key.
5
+ */
6
+ export const inngestBackgroundAdapter = apiKeyAdapter({
7
+ name: "inngest/background",
8
+ description: "Inngest event-driven background jobs and scheduled functions",
9
+ required: ["INNGEST_EVENT_KEY", "INNGEST_SIGNING_KEY"],
10
+ steps: [
11
+ "Set the following before running kit add inngest/background:",
12
+ " 1. Go to https://app.inngest.com and create an app",
13
+ " 2. Navigate to Settings → API keys",
14
+ " 3. Copy the Event Key → INNGEST_EVENT_KEY",
15
+ " 4. Copy the Signing Key → INNGEST_SIGNING_KEY",
16
+ " 5. Re-run: kit add inngest/background",
17
+ ],
18
+ });
19
+ //# sourceMappingURL=inngest-background.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inngest-background.js","sourceRoot":"","sources":["../../src/adapters/inngest-background.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,aAAa,CAAC;IACpD,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,8DAA8D;IAC3E,QAAQ,EAAE,CAAC,mBAAmB,EAAE,qBAAqB,CAAC;IACtD,KAAK,EAAE;QACL,8DAA8D;QAC9D,sDAAsD;QACtD,sCAAsC;QACtC,6CAA6C;QAC7C,iDAAiD;QACjD,yCAAyC;KAC1C;CACF,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { ServiceAdapter } from "./types.js";
2
+ /**
3
+ * Liveblocks Realtime Adapter
4
+ *
5
+ * Liveblocks provides presence, collaborative cursors, and realtime data for web apps.
6
+ * Keys come from the Liveblocks dashboard — no programmatic key creation.
7
+ *
8
+ * Dashboard: https://liveblocks.io/dashboard
9
+ * API reference: https://liveblocks.io/docs/api-reference/rest-api-endpoints
10
+ */
11
+ export declare const liveblocksRealtimeAdapter: ServiceAdapter;
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Liveblocks Realtime Adapter
3
+ *
4
+ * Liveblocks provides presence, collaborative cursors, and realtime data for web apps.
5
+ * Keys come from the Liveblocks dashboard — no programmatic key creation.
6
+ *
7
+ * Dashboard: https://liveblocks.io/dashboard
8
+ * API reference: https://liveblocks.io/docs/api-reference/rest-api-endpoints
9
+ */
10
+ export const liveblocksRealtimeAdapter = {
11
+ name: "liveblocks/realtime",
12
+ description: "Liveblocks collaborative realtime (presence, cursors, multiplayer)",
13
+ getRequiredTools() {
14
+ return []; // API-based, no CLI needed
15
+ },
16
+ async check(context) {
17
+ const secret = context.existingEnv.LIVEBLOCKS_SECRET_KEY;
18
+ return !!(secret && secret.startsWith("sk_"));
19
+ },
20
+ async provision(context) {
21
+ const secretKey = context.existingEnv.LIVEBLOCKS_SECRET_KEY;
22
+ const publicKey = context.existingEnv.NEXT_PUBLIC_LIVEBLOCKS_PUBLIC_KEY;
23
+ // Already configured with both keys
24
+ if (secretKey?.startsWith("sk_") && publicKey?.startsWith("pk_")) {
25
+ return {
26
+ success: true,
27
+ message: "Liveblocks already configured — keys present in environment",
28
+ secrets: {
29
+ LIVEBLOCKS_SECRET_KEY: secretKey,
30
+ NEXT_PUBLIC_LIVEBLOCKS_PUBLIC_KEY: publicKey,
31
+ },
32
+ config: { service: "liveblocks/realtime", existing: true },
33
+ };
34
+ }
35
+ // Secret key present, public key absent — derive from secret key prefix convention
36
+ if (secretKey?.startsWith("sk_")) {
37
+ const derivedPublicKey = secretKey.replace(/^sk_/, "pk_");
38
+ return {
39
+ success: true,
40
+ message: "Liveblocks secret key found — set NEXT_PUBLIC_LIVEBLOCKS_PUBLIC_KEY manually if needed",
41
+ secrets: {
42
+ LIVEBLOCKS_SECRET_KEY: secretKey,
43
+ NEXT_PUBLIC_LIVEBLOCKS_PUBLIC_KEY: publicKey ?? derivedPublicKey,
44
+ },
45
+ config: { service: "liveblocks/realtime", existing: true },
46
+ };
47
+ }
48
+ // No keys — return manual setup instructions
49
+ return {
50
+ success: false,
51
+ error: "Missing LIVEBLOCKS_SECRET_KEY",
52
+ message: [
53
+ "Set the following before running kit add liveblocks/realtime:",
54
+ " 1. Go to https://liveblocks.io/dashboard and create a project",
55
+ " 2. Copy the secret key → LIVEBLOCKS_SECRET_KEY",
56
+ " 3. Copy the public key → NEXT_PUBLIC_LIVEBLOCKS_PUBLIC_KEY",
57
+ " 4. Export and re-run: kit add liveblocks/realtime",
58
+ ].join("\n"),
59
+ };
60
+ },
61
+ };
62
+ //# sourceMappingURL=liveblocks-realtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"liveblocks-realtime.js","sourceRoot":"","sources":["../../src/adapters/liveblocks-realtime.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAmB;IACvD,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE,oEAAoE;IAEjF,gBAAgB;QACd,OAAO,EAAE,CAAC,CAAC,2BAA2B;IACxC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAAuB;QACjC,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,qBAAqB,CAAC;QACzD,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAuB;QACrC,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,qBAAqB,CAAC;QAC5D,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,iCAAiC,CAAC;QAExE,oCAAoC;QACpC,IAAI,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACjE,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,6DAA6D;gBACtE,OAAO,EAAE;oBACP,qBAAqB,EAAE,SAAS;oBAChC,iCAAiC,EAAE,SAAS;iBAC7C;gBACD,MAAM,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,IAAI,EAAE;aAC3D,CAAC;QACJ,CAAC;QAED,mFAAmF;QACnF,IAAI,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,gBAAgB,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC1D,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,wFAAwF;gBACjG,OAAO,EAAE;oBACP,qBAAqB,EAAE,SAAS;oBAChC,iCAAiC,EAAE,SAAS,IAAI,gBAAgB;iBACjE;gBACD,MAAM,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,IAAI,EAAE;aAC3D,CAAC;QACJ,CAAC;QAED,6CAA6C;QAC7C,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,+BAA+B;YACtC,OAAO,EAAE;gBACP,+DAA+D;gBAC/D,iEAAiE;gBACjE,kDAAkD;gBAClD,8DAA8D;gBAC9D,qDAAqD;aACtD,CAAC,IAAI,CAAC,IAAI,CAAC;SACb,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Loops — modern email marketing for SaaS (onboarding, newsletters, transactional).
3
+ * No programmatic account creation; provisioning reuses an existing LOOPS_API_KEY.
4
+ * API reference: https://loops.so/docs/api-reference
5
+ */
6
+ export declare const loopsEmailAdapter: import("sandstream-kit-adapter-sdk").ServiceAdapter;
@@ -0,0 +1,18 @@
1
+ import { apiKeyAdapter } from "./api-key-adapter.js";
2
+ /**
3
+ * Loops — modern email marketing for SaaS (onboarding, newsletters, transactional).
4
+ * No programmatic account creation; provisioning reuses an existing LOOPS_API_KEY.
5
+ * API reference: https://loops.so/docs/api-reference
6
+ */
7
+ export const loopsEmailAdapter = apiKeyAdapter({
8
+ name: "loops/email",
9
+ description: "Loops marketing and transactional email for SaaS",
10
+ required: ["LOOPS_API_KEY"],
11
+ steps: [
12
+ "Set LOOPS_API_KEY before running kit add loops/email:",
13
+ " 1. Go to https://app.loops.so/settings?page=api and create an API key",
14
+ " 2. Export it: export LOOPS_API_KEY=<your-key>",
15
+ " 3. Re-run: kit add loops/email",
16
+ ],
17
+ });
18
+ //# sourceMappingURL=loops-email.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loops-email.js","sourceRoot":"","sources":["../../src/adapters/loops-email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,aAAa,CAAC;IAC7C,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,kDAAkD;IAC/D,QAAQ,EAAE,CAAC,eAAe,CAAC;IAC3B,KAAK,EAAE;QACL,uDAAuD;QACvD,yEAAyE;QACzE,iDAAiD;QACjD,kCAAkC;KACnC;CACF,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { ServiceAdapter } from "./types.js";
2
+ /**
3
+ * Neon Serverless Postgres Adapter
4
+ *
5
+ * Provisions a Neon serverless Postgres project via the Neon REST API.
6
+ * Requires NEON_API_KEY in the environment.
7
+ *
8
+ * API reference: https://api.neon.tech/v2
9
+ */
10
+ export declare const neonDbAdapter: ServiceAdapter;
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Neon Serverless Postgres Adapter
3
+ *
4
+ * Provisions a Neon serverless Postgres project via the Neon REST API.
5
+ * Requires NEON_API_KEY in the environment.
6
+ *
7
+ * API reference: https://api.neon.tech/v2
8
+ */
9
+ export const neonDbAdapter = {
10
+ name: "neon/db",
11
+ description: "Neon serverless Postgres database",
12
+ getRequiredTools() {
13
+ return []; // API-based, no CLI needed
14
+ },
15
+ async check(context) {
16
+ const url = context.existingEnv.DATABASE_URL;
17
+ return !!(url && (url.startsWith("postgres://") || url.startsWith("postgresql://")));
18
+ },
19
+ async provision(context) {
20
+ const databaseUrl = context.existingEnv.DATABASE_URL;
21
+ // Already configured — re-use
22
+ if (databaseUrl && (databaseUrl.startsWith("postgres://") || databaseUrl.startsWith("postgresql://"))) {
23
+ return {
24
+ success: true,
25
+ message: "Neon (or Postgres) already configured — DATABASE_URL present in environment",
26
+ secrets: {
27
+ DATABASE_URL: databaseUrl,
28
+ NEON_DATABASE_URL: databaseUrl,
29
+ },
30
+ config: { service: "neon/db", existing: true },
31
+ };
32
+ }
33
+ const apiKey = context.existingEnv.NEON_API_KEY;
34
+ if (!apiKey) {
35
+ return {
36
+ success: false,
37
+ error: "Missing NEON_API_KEY",
38
+ message: [
39
+ "Set NEON_API_KEY before running kit add neon/db:",
40
+ " 1. Go to https://console.neon.tech/app/settings/api-keys and create an API key",
41
+ " 2. Export it: export NEON_API_KEY=<your-key>",
42
+ " 3. Re-run: kit add neon/db",
43
+ ].join("\n"),
44
+ };
45
+ }
46
+ const projectName = context.projectName ?? context.projectPath.split("/").pop() ?? "kit-db";
47
+ let project;
48
+ try {
49
+ const resp = await fetch("https://api.neon.tech/v2/projects", {
50
+ method: "POST",
51
+ headers: {
52
+ Authorization: `Bearer ${apiKey}`,
53
+ "Content-Type": "application/json",
54
+ Accept: "application/json",
55
+ },
56
+ body: JSON.stringify({ project: { name: projectName } }),
57
+ });
58
+ if (!resp.ok) {
59
+ const body = await resp.text();
60
+ return {
61
+ success: false,
62
+ error: `Neon API error ${resp.status}: ${body}`,
63
+ message: "Failed to create Neon project",
64
+ };
65
+ }
66
+ project = (await resp.json());
67
+ }
68
+ catch (error) {
69
+ return {
70
+ success: false,
71
+ error: error instanceof Error ? error.message : "Network error",
72
+ message: "Failed to reach Neon API",
73
+ };
74
+ }
75
+ const connectionUri = project.connection_uris?.[0]?.connection_uri;
76
+ if (!connectionUri) {
77
+ return {
78
+ success: false,
79
+ error: "Neon project created but no connection URI returned",
80
+ message: `Project '${projectName}' created (id: ${project.project.id}) but connection URI was empty`,
81
+ };
82
+ }
83
+ return {
84
+ success: true,
85
+ message: `Neon project '${projectName}' created`,
86
+ secrets: {
87
+ DATABASE_URL: connectionUri,
88
+ NEON_DATABASE_URL: connectionUri,
89
+ },
90
+ config: { service: "neon/db", projectId: project.project.id, name: projectName },
91
+ };
92
+ },
93
+ };
94
+ //# sourceMappingURL=neon-db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"neon-db.js","sourceRoot":"","sources":["../../src/adapters/neon-db.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { ServiceAdapter } from "./types.js";
2
+ /**
3
+ * PlanetScale MySQL Adapter
4
+ *
5
+ * Provisions a PlanetScale serverless MySQL database via the PlanetScale API.
6
+ * Requires PLANETSCALE_SERVICE_TOKEN_ID + PLANETSCALE_SERVICE_TOKEN +
7
+ * PLANETSCALE_ORG in the environment.
8
+ *
9
+ * API reference: https://api.planetscale.com/v1
10
+ */
11
+ export declare const planetscaleDbAdapter: ServiceAdapter;
@@ -0,0 +1,134 @@
1
+ /**
2
+ * PlanetScale MySQL Adapter
3
+ *
4
+ * Provisions a PlanetScale serverless MySQL database via the PlanetScale API.
5
+ * Requires PLANETSCALE_SERVICE_TOKEN_ID + PLANETSCALE_SERVICE_TOKEN +
6
+ * PLANETSCALE_ORG in the environment.
7
+ *
8
+ * API reference: https://api.planetscale.com/v1
9
+ */
10
+ export const planetscaleDbAdapter = {
11
+ name: "planetscale/db",
12
+ description: "PlanetScale serverless MySQL database",
13
+ getRequiredTools() {
14
+ return []; // API-based, no CLI needed
15
+ },
16
+ async check(context) {
17
+ const url = context.existingEnv.DATABASE_URL;
18
+ return !!(url && url.startsWith("mysql://"));
19
+ },
20
+ async provision(context) {
21
+ const tokenId = context.existingEnv.PLANETSCALE_SERVICE_TOKEN_ID;
22
+ const token = context.existingEnv.PLANETSCALE_SERVICE_TOKEN;
23
+ const org = context.existingEnv.PLANETSCALE_ORG;
24
+ // Already configured — re-use
25
+ if (context.existingEnv.DATABASE_URL?.startsWith("mysql://")) {
26
+ return {
27
+ success: true,
28
+ message: "PlanetScale already configured — DATABASE_URL present in environment",
29
+ secrets: buildSecrets(context.existingEnv),
30
+ config: { service: "planetscale/db", existing: true },
31
+ };
32
+ }
33
+ // Missing credentials
34
+ if (!tokenId || !token || !org) {
35
+ const missing = [
36
+ !tokenId && "PLANETSCALE_SERVICE_TOKEN_ID",
37
+ !token && "PLANETSCALE_SERVICE_TOKEN",
38
+ !org && "PLANETSCALE_ORG",
39
+ ].filter(Boolean);
40
+ return {
41
+ success: false,
42
+ error: `Missing PlanetScale credentials: ${missing.join(", ")}`,
43
+ message: [
44
+ "Set the following before running kit add planetscale/db:",
45
+ " PLANETSCALE_ORG — your PlanetScale organization name",
46
+ " PLANETSCALE_SERVICE_TOKEN_ID — service token ID",
47
+ " PLANETSCALE_SERVICE_TOKEN — service token secret",
48
+ " Create a service token at: https://app.planetscale.com/<org>/settings/service-tokens",
49
+ ].join("\n"),
50
+ };
51
+ }
52
+ const dbName = context.projectName ?? context.projectPath.split("/").pop() ?? "kit-db";
53
+ const headers = {
54
+ Authorization: `${tokenId}:${token}`,
55
+ "Content-Type": "application/json",
56
+ Accept: "application/json",
57
+ };
58
+ // Create database
59
+ let db;
60
+ try {
61
+ const resp = await fetch(`https://api.planetscale.com/v1/organizations/${org}/databases`, {
62
+ method: "POST",
63
+ headers,
64
+ body: JSON.stringify({ name: dbName }),
65
+ });
66
+ if (!resp.ok) {
67
+ const body = await resp.text();
68
+ return {
69
+ success: false,
70
+ error: `PlanetScale API error ${resp.status}: ${body}`,
71
+ message: "Failed to create PlanetScale database",
72
+ };
73
+ }
74
+ db = (await resp.json());
75
+ }
76
+ catch (error) {
77
+ return {
78
+ success: false,
79
+ error: error instanceof Error ? error.message : "Network error",
80
+ message: "Failed to reach PlanetScale API",
81
+ };
82
+ }
83
+ // Create a connection password for the main branch
84
+ let password;
85
+ try {
86
+ const resp = await fetch(`https://api.planetscale.com/v1/organizations/${org}/databases/${db.name}/branches/main/passwords`, {
87
+ method: "POST",
88
+ headers,
89
+ body: JSON.stringify({ name: `${dbName}-kit`, role: "readwriter" }),
90
+ });
91
+ if (!resp.ok) {
92
+ const body = await resp.text();
93
+ return {
94
+ success: false,
95
+ error: `PlanetScale password API error ${resp.status}: ${body}`,
96
+ message: "Database created but failed to generate connection password",
97
+ };
98
+ }
99
+ password = (await resp.json());
100
+ }
101
+ catch (error) {
102
+ return {
103
+ success: false,
104
+ error: error instanceof Error ? error.message : "Network error",
105
+ message: "Failed to create database connection password",
106
+ };
107
+ }
108
+ const databaseUrl = `mysql://${password.username}:${password.plain_text}@${password.access_host_url}/${db.name}?ssl={"rejectUnauthorized":true}`;
109
+ return {
110
+ success: true,
111
+ message: `PlanetScale database '${db.name}' created`,
112
+ secrets: {
113
+ DATABASE_URL: databaseUrl,
114
+ PLANETSCALE_HOST: password.access_host_url,
115
+ PLANETSCALE_USERNAME: password.username,
116
+ PLANETSCALE_PASSWORD: password.plain_text,
117
+ },
118
+ config: { service: "planetscale/db", database: db.name, org },
119
+ };
120
+ },
121
+ };
122
+ function buildSecrets(env) {
123
+ const secrets = {};
124
+ if (env.DATABASE_URL)
125
+ secrets.DATABASE_URL = env.DATABASE_URL;
126
+ if (env.PLANETSCALE_HOST)
127
+ secrets.PLANETSCALE_HOST = env.PLANETSCALE_HOST;
128
+ if (env.PLANETSCALE_USERNAME)
129
+ secrets.PLANETSCALE_USERNAME = env.PLANETSCALE_USERNAME;
130
+ if (env.PLANETSCALE_PASSWORD)
131
+ secrets.PLANETSCALE_PASSWORD = env.PLANETSCALE_PASSWORD;
132
+ return secrets;
133
+ }
134
+ //# sourceMappingURL=planetscale-db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planetscale-db.js","sourceRoot":"","sources":["../../src/adapters/planetscale-db.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * PostHog — product analytics, session recording, feature flags.
3
+ * API-based; reuses NEXT_PUBLIC_POSTHOG_KEY and carries an optional host
4
+ * (defaults to US cloud; override for EU cloud / self-hosted).
5
+ */
6
+ export declare const posthogAnalyticsAdapter: import("sandstream-kit-adapter-sdk").ServiceAdapter;
@@ -0,0 +1,22 @@
1
+ import { apiKeyAdapter } from "./api-key-adapter.js";
2
+ /**
3
+ * PostHog — product analytics, session recording, feature flags.
4
+ * API-based; reuses NEXT_PUBLIC_POSTHOG_KEY and carries an optional host
5
+ * (defaults to US cloud; override for EU cloud / self-hosted).
6
+ */
7
+ export const posthogAnalyticsAdapter = apiKeyAdapter({
8
+ name: "posthog/analytics",
9
+ description: "PostHog product analytics, session recording, and feature flags",
10
+ required: ["NEXT_PUBLIC_POSTHOG_KEY"],
11
+ optional: [{ env: "NEXT_PUBLIC_POSTHOG_HOST", default: "https://us.i.posthog.com" }],
12
+ steps: [
13
+ "Set NEXT_PUBLIC_POSTHOG_KEY before running kit add posthog/analytics:",
14
+ " 1. Go to https://app.posthog.com and create a project",
15
+ " 2. Navigate to Settings → Project API key",
16
+ " 3. Export: export NEXT_PUBLIC_POSTHOG_KEY=phc_...",
17
+ " 4. Re-run: kit add posthog/analytics",
18
+ " (Self-hosted: also set NEXT_PUBLIC_POSTHOG_HOST=https://your-posthog-host.com)",
19
+ " (EU cloud: set NEXT_PUBLIC_POSTHOG_HOST=https://eu.i.posthog.com)",
20
+ ],
21
+ });
22
+ //# sourceMappingURL=posthog-analytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"posthog-analytics.js","sourceRoot":"","sources":["../../src/adapters/posthog-analytics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,aAAa,CAAC;IACnD,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,iEAAiE;IAC9E,QAAQ,EAAE,CAAC,yBAAyB,CAAC;IACrC,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,0BAA0B,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC;IACpF,KAAK,EAAE;QACL,uEAAuE;QACvE,yDAAyD;QACzD,6CAA6C;QAC7C,qDAAqD;QACrD,wCAAwC;QACxC,kFAAkF;QAClF,qEAAqE;KACtE;CACF,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ServiceAdapter } from "sandstream-kit-adapter-sdk";
2
+ export declare const railwayHostingAdapter: ServiceAdapter;
@@ -0,0 +1,136 @@
1
+ import { exec } from "../utils/exec.js";
2
+ async function runRailway(args, cwd, env) {
3
+ try {
4
+ const { stdout, stderr } = await exec("railway", args, {
5
+ cwd,
6
+ timeout: 120_000,
7
+ env: { ...process.env, ...env },
8
+ });
9
+ return { ok: true, stdout: stdout.trim(), stderr: stderr.trim() };
10
+ }
11
+ catch (err) {
12
+ const e = err;
13
+ return {
14
+ ok: false,
15
+ stdout: e.stdout?.trim() ?? "",
16
+ stderr: (e.stderr ?? e.message ?? String(err)).trim(),
17
+ };
18
+ }
19
+ }
20
+ export const railwayHostingAdapter = {
21
+ name: "railway/hosting",
22
+ description: "Railway — Heroku-style deployment platform (hosting provisioning)",
23
+ getRequiredTools() {
24
+ return ["railway"];
25
+ },
26
+ async check(context) {
27
+ const token = context.existingEnv["RAILWAY_TOKEN"];
28
+ const projectId = context.existingEnv["RAILWAY_PROJECT_ID"];
29
+ // If token exists, consider it configured
30
+ if (token)
31
+ return true;
32
+ // Otherwise check if railway CLI is authenticated
33
+ if (!projectId)
34
+ return false;
35
+ const { ok } = await runRailway(["status"], context.projectPath);
36
+ return ok;
37
+ },
38
+ async provision(context) {
39
+ // Key-reuse: if we already have a project ID, return it
40
+ const existingToken = context.existingEnv["RAILWAY_TOKEN"];
41
+ const existingProjectId = context.existingEnv["RAILWAY_PROJECT_ID"];
42
+ const existingEnvId = context.existingEnv["RAILWAY_ENVIRONMENT_ID"];
43
+ if (existingToken && existingProjectId && existingEnvId) {
44
+ return {
45
+ success: true,
46
+ message: "Railway project already configured",
47
+ secrets: {
48
+ RAILWAY_TOKEN: existingToken,
49
+ RAILWAY_PROJECT_ID: existingProjectId,
50
+ RAILWAY_ENVIRONMENT_ID: existingEnvId,
51
+ },
52
+ };
53
+ }
54
+ // Step 1: Check if railway CLI is installed and available
55
+ const installCheckResult = await runRailway(["--version"], context.projectPath);
56
+ if (!installCheckResult.ok) {
57
+ return {
58
+ success: false,
59
+ message: "Railway CLI not found. Install with: npm install -g @railway/cli",
60
+ error: "railway CLI not installed",
61
+ };
62
+ }
63
+ // Step 2: Ensure user is logged in (browserless is not interactive)
64
+ // In non-interactive mode, token should be set via RAILWAY_TOKEN env var
65
+ const loginCheckResult = await runRailway(["whoami"], context.projectPath);
66
+ if (!loginCheckResult.ok && !existingToken) {
67
+ return {
68
+ success: false,
69
+ message: "Not authenticated with Railway. Login with: railway login",
70
+ error: "not authenticated",
71
+ };
72
+ }
73
+ // Step 3: Initialize Railway project if needed
74
+ let initResult = await runRailway(["link"], context.projectPath);
75
+ if (!initResult.ok) {
76
+ // If link fails, try init
77
+ initResult = await runRailway(["init", "--empty"], context.projectPath);
78
+ if (!initResult.ok) {
79
+ return {
80
+ success: false,
81
+ message: `Failed to initialize Railway project: ${initResult.stderr}`,
82
+ error: "failed to init",
83
+ };
84
+ }
85
+ }
86
+ // Step 4: Extract project information
87
+ const statusResult = await runRailway(["status"], context.projectPath);
88
+ if (!statusResult.ok) {
89
+ return {
90
+ success: false,
91
+ message: `Failed to get Railway project status: ${statusResult.stderr}`,
92
+ error: "status failed",
93
+ };
94
+ }
95
+ // Parse project ID from status output
96
+ // Expected format includes: Project: <project-id>
97
+ const projectMatch = statusResult.stdout.match(/Project:\s+(\w+)/);
98
+ const projectId = projectMatch?.[1];
99
+ if (!projectId) {
100
+ return {
101
+ success: false,
102
+ message: "Could not extract Railway project ID from status",
103
+ error: "project id not found",
104
+ };
105
+ }
106
+ // Step 5: Get environment ID (default to 'production')
107
+ const envMatch = statusResult.stdout.match(/Environment:\s+(\w+)/);
108
+ const environmentId = envMatch?.[1] || "production";
109
+ // Step 6: Ensure we have a token
110
+ let token = existingToken;
111
+ if (!token) {
112
+ // Try to get token from railway
113
+ const tokenResult = await runRailway(["token"], context.projectPath);
114
+ if (tokenResult.ok) {
115
+ token = tokenResult.stdout;
116
+ }
117
+ else {
118
+ return {
119
+ success: false,
120
+ message: "Could not obtain Railway API token",
121
+ error: "token not found",
122
+ };
123
+ }
124
+ }
125
+ return {
126
+ success: true,
127
+ message: `Railway project configured: ${projectId}`,
128
+ secrets: {
129
+ RAILWAY_TOKEN: token,
130
+ RAILWAY_PROJECT_ID: projectId,
131
+ RAILWAY_ENVIRONMENT_ID: environmentId,
132
+ },
133
+ };
134
+ },
135
+ };
136
+ //# sourceMappingURL=railway-hosting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"railway-hosting.js","sourceRoot":"","sources":["../../src/adapters/railway-hosting.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { ServiceAdapter } from "./types.js";
2
+ interface ResendApiKey {
3
+ id: string;
4
+ token: string;
5
+ }
6
+ /**
7
+ * Resend Email Adapter
8
+ *
9
+ * Provisions a project-scoped Resend API key for transactional email.
10
+ * Requires a master RESEND_API_KEY in the environment (from the Resend dashboard).
11
+ *
12
+ * API reference: https://resend.com/docs/api-reference/api-keys/create-api-key
13
+ */
14
+ export declare const resendEmailAdapter: ServiceAdapter;
15
+ /**
16
+ * Resend Email Provisioner — creates a scoped API key via the Resend API.
17
+ *
18
+ * Called by resendEmailAdapter.provision() when a master key is available
19
+ * and we want to create a project-scoped key instead of reusing the master.
20
+ *
21
+ * Exported separately so it can be tested without stubbing the adapter.
22
+ */
23
+ export declare function provisionResendApiKey(masterKey: string, keyName: string): Promise<{
24
+ success: true;
25
+ key: ResendApiKey;
26
+ } | {
27
+ success: false;
28
+ error: string;
29
+ }>;
30
+ /**
31
+ * Fetch the first verified sending domain for the account.
32
+ * Returns null if none exist (use onboarding@resend.dev as fallback).
33
+ */
34
+ export declare function fetchFirstVerifiedDomain(apiKey: string): Promise<string | null>;
35
+ export {};