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,72 @@
1
+ /**
2
+ * Cost monitoring for the spend-cap policy declared in
3
+ * `.kit-allowlist.json` (see security-policy.ts).
4
+ *
5
+ * v1 scope: provider adapters that have a stable public usage / balance API
6
+ * accessible via the same key already in the env. Anything that requires
7
+ * paid analytics endpoints (Stripe Sigma) or a billing-dashboard scrape is
8
+ * out of scope — we don't want kit to need a separate API.
9
+ *
10
+ * Concretely supported today:
11
+ * - Stripe: `GET /v1/balance` (live + pending balance, all currencies)
12
+ *
13
+ * Stubbed (returns "not implemented" until a public API exists):
14
+ * - OpenAI / Anthropic — usage endpoints require dashboard scraping
15
+ * - Resend — no usage API
16
+ * - Vercel — usage endpoint exists but rate-limited per-account
17
+ */
18
+ export interface CostSample {
19
+ provider: string;
20
+ /** Logical key the policy is attached to (e.g. STRIPE_SECRET_KEY) */
21
+ policyKey: string;
22
+ /** Current usage / balance figure */
23
+ current: number;
24
+ unit: "usd" | "eur" | "sek" | "tokens" | "requests";
25
+ /** Spend cap from policy, if declared */
26
+ capUsd?: number;
27
+ /** Plain-text status string suitable for table display */
28
+ status: "ok" | "warn" | "over-cap" | "no-cap" | "no-api" | "auth-failed" | "skipped";
29
+ detail: string;
30
+ }
31
+ export declare function sampleCosts(opts: {
32
+ /** Per-key spend cap from policy, keyed by env-var name. */
33
+ caps: Record<string, number | undefined>;
34
+ /** Allow injection (used in tests) instead of reading process.env. */
35
+ env?: Record<string, string | undefined>;
36
+ }): Promise<CostSample[]>;
37
+ export interface CostBaseline {
38
+ /** Provider key (e.g. STRIPE_SECRET_KEY). */
39
+ policyKey: string;
40
+ /** Average daily spend over the last N samples. */
41
+ avgDailyUsd: number;
42
+ /** Most recent observation. */
43
+ lastSampleUsd: number;
44
+ /** When last updated (ISO). */
45
+ updatedAt: string;
46
+ /** Number of samples contributing to avgDailyUsd. */
47
+ sampleCount: number;
48
+ }
49
+ export interface AnomalyAlert {
50
+ policyKey: string;
51
+ provider: string;
52
+ currentUsd: number;
53
+ baselineUsd: number;
54
+ multiplier: number;
55
+ severity: "info" | "warn" | "critical";
56
+ detail: string;
57
+ }
58
+ /**
59
+ * Compare new samples against stored baselines. Returns alerts for any
60
+ * provider whose current reading exceeds the baseline by a configurable
61
+ * multiplier. Updates baselines in place so subsequent calls see the new
62
+ * average.
63
+ *
64
+ * warn ≥ 2× baseline
65
+ * critical ≥ 4× baseline OR > 1.5× capUsd if a cap is declared
66
+ */
67
+ export declare function detectCostAnomalies(samples: CostSample[], opts?: {
68
+ cwd?: string;
69
+ warnMultiplier?: number;
70
+ criticalMultiplier?: number;
71
+ persist?: boolean;
72
+ }): Promise<AnomalyAlert[]>;
@@ -0,0 +1,218 @@
1
+ /**
2
+ * Cost monitoring for the spend-cap policy declared in
3
+ * `.kit-allowlist.json` (see security-policy.ts).
4
+ *
5
+ * v1 scope: provider adapters that have a stable public usage / balance API
6
+ * accessible via the same key already in the env. Anything that requires
7
+ * paid analytics endpoints (Stripe Sigma) or a billing-dashboard scrape is
8
+ * out of scope — we don't want kit to need a separate API.
9
+ *
10
+ * Concretely supported today:
11
+ * - Stripe: `GET /v1/balance` (live + pending balance, all currencies)
12
+ *
13
+ * Stubbed (returns "not implemented" until a public API exists):
14
+ * - OpenAI / Anthropic — usage endpoints require dashboard scraping
15
+ * - Resend — no usage API
16
+ * - Vercel — usage endpoint exists but rate-limited per-account
17
+ */
18
+ async function stripeAdapter(key, opts) {
19
+ // `https://api.stripe.com/v1/balance` returns `{ available: [{amount, currency}], pending: [...] }`.
20
+ // Amounts are in the currency's smallest unit (cents). We sum availability
21
+ // across currencies and surface it as the dominant currency for clarity.
22
+ try {
23
+ const res = await fetch("https://api.stripe.com/v1/balance", {
24
+ headers: { Authorization: `Bearer ${key}` },
25
+ signal: AbortSignal.timeout(8000),
26
+ });
27
+ if (res.status === 401) {
28
+ return {
29
+ provider: "stripe",
30
+ policyKey: "STRIPE_SECRET_KEY",
31
+ current: 0,
32
+ unit: "usd",
33
+ capUsd: opts.capUsd,
34
+ status: "auth-failed",
35
+ detail: "Stripe key not authorized (rotate / re-check restricted scopes)",
36
+ };
37
+ }
38
+ if (!res.ok) {
39
+ return {
40
+ provider: "stripe",
41
+ policyKey: "STRIPE_SECRET_KEY",
42
+ current: 0,
43
+ unit: "usd",
44
+ capUsd: opts.capUsd,
45
+ status: "no-api",
46
+ detail: `Stripe /v1/balance returned ${res.status}`,
47
+ };
48
+ }
49
+ const data = (await res.json());
50
+ const sumCents = [...data.available, ...data.pending].reduce((sum, b) => sum + b.amount, 0);
51
+ const usd = sumCents / 100;
52
+ const cap = opts.capUsd;
53
+ const status = cap === undefined
54
+ ? "no-cap"
55
+ : usd > cap
56
+ ? "over-cap"
57
+ : usd > cap * 0.8
58
+ ? "warn"
59
+ : "ok";
60
+ return {
61
+ provider: "stripe",
62
+ policyKey: "STRIPE_SECRET_KEY",
63
+ current: usd,
64
+ unit: "usd",
65
+ capUsd: cap,
66
+ status,
67
+ detail: `available + pending across all currencies, converted at 1:1 (kit doesn't FX)`,
68
+ };
69
+ }
70
+ catch (err) {
71
+ return {
72
+ provider: "stripe",
73
+ policyKey: "STRIPE_SECRET_KEY",
74
+ current: 0,
75
+ unit: "usd",
76
+ capUsd: opts.capUsd,
77
+ status: "no-api",
78
+ detail: err instanceof Error ? err.message : String(err),
79
+ };
80
+ }
81
+ }
82
+ const STUB_PROVIDERS = {
83
+ OPENAI_API_KEY: {
84
+ envKey: "OPENAI_API_KEY",
85
+ reason: "OpenAI usage endpoint requires dashboard auth; no key-bearable API yet",
86
+ },
87
+ ANTHROPIC_API_KEY: {
88
+ envKey: "ANTHROPIC_API_KEY",
89
+ reason: "Anthropic billing API is dashboard-only",
90
+ },
91
+ RESEND_API_KEY: {
92
+ envKey: "RESEND_API_KEY",
93
+ reason: "Resend exposes send-counts in the dashboard, not via key auth",
94
+ },
95
+ VERCEL_API_TOKEN: {
96
+ envKey: "VERCEL_API_TOKEN",
97
+ reason: "Vercel usage endpoint requires team-id + rate-limited",
98
+ },
99
+ };
100
+ const ADAPTERS = {
101
+ STRIPE_SECRET_KEY: stripeAdapter,
102
+ };
103
+ export async function sampleCosts(opts) {
104
+ const env = opts.env ?? process.env;
105
+ const samples = [];
106
+ for (const [keyName, adapter] of Object.entries(ADAPTERS)) {
107
+ const value = env[keyName];
108
+ if (!value)
109
+ continue;
110
+ samples.push(await adapter(value, { capUsd: opts.caps[keyName] }));
111
+ }
112
+ for (const [keyName, info] of Object.entries(STUB_PROVIDERS)) {
113
+ const value = env[info.envKey];
114
+ if (!value)
115
+ continue;
116
+ samples.push({
117
+ provider: keyName.replace("_API_KEY", "").toLowerCase(),
118
+ policyKey: keyName,
119
+ current: 0,
120
+ unit: "usd",
121
+ capUsd: opts.caps[keyName],
122
+ status: "no-api",
123
+ detail: info.reason,
124
+ });
125
+ }
126
+ return samples;
127
+ }
128
+ // ── Anomaly detection (P3.1 leak-detection layer) ──────────────────────────
129
+ //
130
+ // kit's existing cost-monitor surfaces CURRENT balance. For leak detection
131
+ // we need a BASELINE and a sliding window: a key that suddenly burns 3× its
132
+ // usual spend is the signal that matters. Baseline is stored locally
133
+ // (.kit-cost-baseline.json) and refreshed on a rolling window.
134
+ import { readFile, writeFile } from "node:fs/promises";
135
+ import { resolve } from "node:path";
136
+ const BASELINE_FILE = ".kit-cost-baseline.json";
137
+ async function loadBaselines(cwd) {
138
+ try {
139
+ const raw = await readFile(resolve(cwd, BASELINE_FILE), "utf-8");
140
+ return JSON.parse(raw);
141
+ }
142
+ catch {
143
+ return {};
144
+ }
145
+ }
146
+ async function saveBaselines(cwd, baselines) {
147
+ await writeFile(resolve(cwd, BASELINE_FILE), JSON.stringify(baselines, null, 2) + "\n", "utf-8");
148
+ }
149
+ /**
150
+ * Update the rolling baseline for a sample. Simple exponential-moving-average
151
+ * with weight 0.2 on the new sample so a single spike doesn't anchor the
152
+ * baseline; instead, sustained-high readings raise the floor over time.
153
+ */
154
+ function updateBaseline(prev, sample) {
155
+ const weight = 0.2;
156
+ const prevAvg = prev?.avgDailyUsd ?? sample.current;
157
+ const newAvg = prev ? prevAvg * (1 - weight) + sample.current * weight : sample.current;
158
+ return {
159
+ policyKey: sample.policyKey,
160
+ avgDailyUsd: newAvg,
161
+ lastSampleUsd: sample.current,
162
+ updatedAt: new Date().toISOString(),
163
+ sampleCount: (prev?.sampleCount ?? 0) + 1,
164
+ };
165
+ }
166
+ /**
167
+ * Compare new samples against stored baselines. Returns alerts for any
168
+ * provider whose current reading exceeds the baseline by a configurable
169
+ * multiplier. Updates baselines in place so subsequent calls see the new
170
+ * average.
171
+ *
172
+ * warn ≥ 2× baseline
173
+ * critical ≥ 4× baseline OR > 1.5× capUsd if a cap is declared
174
+ */
175
+ export async function detectCostAnomalies(samples, opts = {}) {
176
+ const cwd = opts.cwd ?? process.cwd();
177
+ const warnX = opts.warnMultiplier ?? 2;
178
+ const critX = opts.criticalMultiplier ?? 4;
179
+ const persist = opts.persist ?? true;
180
+ const baselines = await loadBaselines(cwd);
181
+ const alerts = [];
182
+ for (const sample of samples) {
183
+ if (sample.status === "auth-failed" || sample.status === "no-api")
184
+ continue;
185
+ const prev = baselines[sample.policyKey];
186
+ const baseline = prev?.avgDailyUsd ?? sample.current;
187
+ const multiplier = baseline > 0 ? sample.current / baseline : 1;
188
+ let severity = null;
189
+ if (sample.capUsd && sample.current > sample.capUsd * 1.5) {
190
+ severity = "critical";
191
+ }
192
+ else if (multiplier >= critX) {
193
+ severity = "critical";
194
+ }
195
+ else if (multiplier >= warnX) {
196
+ severity = "warn";
197
+ }
198
+ if (severity) {
199
+ alerts.push({
200
+ policyKey: sample.policyKey,
201
+ provider: sample.provider,
202
+ currentUsd: sample.current,
203
+ baselineUsd: baseline,
204
+ multiplier,
205
+ severity,
206
+ detail: sample.capUsd
207
+ ? `current ${sample.current.toFixed(2)} USD vs baseline ${baseline.toFixed(2)} (${multiplier.toFixed(1)}×); cap ${sample.capUsd}`
208
+ : `current ${sample.current.toFixed(2)} USD vs baseline ${baseline.toFixed(2)} (${multiplier.toFixed(1)}×)`,
209
+ });
210
+ }
211
+ baselines[sample.policyKey] = updateBaseline(prev, sample);
212
+ }
213
+ if (persist) {
214
+ await saveBaselines(cwd, baselines);
215
+ }
216
+ return alerts;
217
+ }
218
+ //# sourceMappingURL=cost-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-monitor.js","sourceRoot":"","sources":["../src/cost-monitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export interface CreatePluginOptions {
2
+ /** Plugin short name, e.g. "aws-s3" → package "sandstream-kit-plugin-aws-s3" */
3
+ name: string;
4
+ /** Directory to create the plugin in (defaults to cwd) */
5
+ cwd?: string;
6
+ /** Skip running npm install after scaffolding */
7
+ skipInstall?: boolean;
8
+ }
9
+ export interface CreatePluginResult {
10
+ success: boolean;
11
+ pluginDir: string;
12
+ packageName: string;
13
+ message: string;
14
+ nextSteps: string[];
15
+ }
16
+ /**
17
+ * Scaffold a new kit adapter plugin from the reference template.
18
+ *
19
+ * Creates `./kit-plugin-<name>/` with a working TypeScript adapter
20
+ * that builds and passes tests immediately.
21
+ */
22
+ export declare function createPlugin(opts: CreatePluginOptions): Promise<CreatePluginResult>;
@@ -0,0 +1,266 @@
1
+ import { mkdir, writeFile } from "node:fs/promises";
2
+ import { resolve, join } from "node:path";
3
+ import { exec } from "./utils/exec.js";
4
+ /**
5
+ * Scaffold a new kit adapter plugin from the reference template.
6
+ *
7
+ * Creates `./kit-plugin-<name>/` with a working TypeScript adapter
8
+ * that builds and passes tests immediately.
9
+ */
10
+ export async function createPlugin(opts) {
11
+ const { name } = opts;
12
+ const cwd = opts.cwd ?? process.cwd();
13
+ // Normalise: strip "kit-plugin-" prefix if the user passed the full name.
14
+ // Community plugins use the unscoped `kit-plugin-<name>` convention (cf. eslint-plugin-*);
15
+ // only first-party packages live under the @sandstream scope.
16
+ const shortName = name.replace(/^kit-plugin-/, "");
17
+ const packageName = `kit-plugin-${shortName}`;
18
+ const pluginDir = resolve(cwd, packageName);
19
+ // Capitalise for class/export names: "aws-s3" → "AwsS3", "my-service" → "MyService"
20
+ const titleCase = shortName
21
+ .split(/[-_]/)
22
+ .map((s) => s.charAt(0).toUpperCase() + s.slice(1))
23
+ .join("");
24
+ const adapterName = `${titleCase.charAt(0).toLowerCase()}${titleCase.slice(1)}Adapter`;
25
+ const serviceName = shortName; // e.g. "aws-s3/deploy" — user can change
26
+ await mkdir(pluginDir, { recursive: true });
27
+ await mkdir(join(pluginDir, "src"), { recursive: true });
28
+ const typesDir = join(pluginDir, "src", "types");
29
+ await mkdir(typesDir, { recursive: true });
30
+ await writeFile(join(pluginDir, "package.json"), packageJsonTemplate(packageName), "utf-8");
31
+ await writeFile(join(pluginDir, "tsconfig.json"), tsconfigTemplate(), "utf-8");
32
+ await writeFile(join(pluginDir, "README.md"), readmeTemplate(packageName, shortName), "utf-8");
33
+ await writeFile(join(typesDir, "adapter-sdk.d.ts"), adapterSdkStub(), "utf-8");
34
+ await writeFile(join(pluginDir, "src", `${shortName}.ts`), adapterTemplate(adapterName, serviceName), "utf-8");
35
+ await writeFile(join(pluginDir, "src", `${shortName}.test.ts`), testTemplate(adapterName, serviceName), "utf-8");
36
+ await writeFile(join(pluginDir, "src", "index.ts"), indexTemplate(adapterName, shortName), "utf-8");
37
+ if (!opts.skipInstall) {
38
+ try {
39
+ await exec("npm", ["install"], { cwd: pluginDir, timeout: 60_000 });
40
+ }
41
+ catch {
42
+ // Non-fatal: user can run manually
43
+ }
44
+ }
45
+ return {
46
+ success: true,
47
+ pluginDir,
48
+ packageName,
49
+ message: `Created ${packageName} in ./${packageName}/`,
50
+ nextSteps: [
51
+ `cd ${packageName}`,
52
+ `npm run build`,
53
+ `npm test`,
54
+ `# Edit src/${shortName}.ts to implement your adapter`,
55
+ `# Then publish: npm publish`,
56
+ `# And add to your project: { "kitPlugins": ["${packageName}"] }`,
57
+ ],
58
+ };
59
+ }
60
+ // ─── templates ────────────────────────────────────────────────────────────────
61
+ function adapterSdkStub() {
62
+ return `/**
63
+ * Bundled type stub for sandstream-kit-adapter-sdk.
64
+ * This file lets the plugin build standalone without installing the SDK package.
65
+ *
66
+ * When sandstream-kit-adapter-sdk is published to npm, you can:
67
+ * 1. Run: npm install --save-dev sandstream-kit-adapter-sdk
68
+ * 2. Remove the paths alias from tsconfig.json
69
+ * 3. Delete this file
70
+ */
71
+
72
+ export interface ProvisionResult {
73
+ success: boolean;
74
+ message: string;
75
+ secrets?: Record<string, string>;
76
+ config?: Record<string, unknown>;
77
+ error?: string;
78
+ }
79
+
80
+ export interface AdapterContext {
81
+ projectName?: string;
82
+ projectPath: string;
83
+ existingEnv: Record<string, string>;
84
+ }
85
+
86
+ export interface ServiceAdapter {
87
+ name: string;
88
+ description: string;
89
+ check(context: AdapterContext): Promise<boolean>;
90
+ provision(context: AdapterContext): Promise<ProvisionResult>;
91
+ getRequiredTools(): string[];
92
+ }
93
+
94
+ export interface AdapterRegistry {
95
+ [key: string]: ServiceAdapter;
96
+ }
97
+ `;
98
+ }
99
+ function packageJsonTemplate(packageName) {
100
+ return JSON.stringify({
101
+ name: packageName,
102
+ version: "0.1.0",
103
+ description: `kit adapter plugin for ${packageName}`,
104
+ type: "module",
105
+ exports: {
106
+ ".": {
107
+ types: "./dist/index.d.ts",
108
+ default: "./dist/index.js",
109
+ },
110
+ },
111
+ files: ["dist", "!dist/**/*.test.*", "README.md"],
112
+ scripts: {
113
+ build: "tsc",
114
+ test: "node --test dist/*.test.js",
115
+ },
116
+ // sandstream-kit-adapter-sdk types are bundled in src/types/adapter-sdk.d.ts so this
117
+ // plugin builds without any registry dependencies. Once sandstream-kit-adapter-sdk is
118
+ // published, add it here: peerDependencies: { "sandstream-kit-adapter-sdk": ">=0.1.0" }
119
+ devDependencies: {
120
+ "@types/node": "^22.0.0",
121
+ typescript: "^5.9.3",
122
+ },
123
+ }, null, 2) + "\n";
124
+ }
125
+ function tsconfigTemplate() {
126
+ return JSON.stringify({
127
+ compilerOptions: {
128
+ target: "ES2022",
129
+ module: "Node16",
130
+ moduleResolution: "Node16",
131
+ outDir: "dist",
132
+ rootDir: "src",
133
+ strict: true,
134
+ declaration: true,
135
+ declarationMap: true,
136
+ sourceMap: true,
137
+ // baseUrl + paths: maps sandstream-kit-adapter-sdk to the bundled type stub so the
138
+ // plugin builds without installing the SDK package. Once sandstream-kit-adapter-sdk is
139
+ // published to npm, remove these two entries and install the real package.
140
+ baseUrl: "src",
141
+ paths: {
142
+ "sandstream-kit-adapter-sdk": ["types/adapter-sdk.d.ts"],
143
+ },
144
+ },
145
+ include: ["src"],
146
+ }, null, 2) + "\n";
147
+ }
148
+ function adapterTemplate(adapterName, serviceName) {
149
+ return `import type { ServiceAdapter, AdapterContext, ProvisionResult } from "sandstream-kit-adapter-sdk";
150
+
151
+ export const ${adapterName}: ServiceAdapter = {
152
+ name: "${serviceName}/deploy",
153
+ description: "TODO: describe what this adapter provisions",
154
+
155
+ // Return CLI tool names required for this adapter.
156
+ // Return an empty array for API-based adapters (no CLI needed).
157
+ getRequiredTools(): string[] {
158
+ return [];
159
+ },
160
+
161
+ // Return true if the service is already provisioned.
162
+ async check(context: AdapterContext): Promise<boolean> {
163
+ return !!context.existingEnv["MY_SERVICE_KEY"];
164
+ },
165
+
166
+ // Provision the service. Should be idempotent.
167
+ async provision(context: AdapterContext): Promise<ProvisionResult> {
168
+ const key = context.existingEnv["MY_SERVICE_KEY"];
169
+
170
+ // Key-reuse pattern: return existing key if already set
171
+ if (key) {
172
+ return {
173
+ success: true,
174
+ message: "MY_SERVICE_KEY already configured",
175
+ secrets: { MY_SERVICE_KEY: key },
176
+ };
177
+ }
178
+
179
+ // TODO: implement provisioning logic
180
+ return {
181
+ success: false,
182
+ error: "Missing MY_SERVICE_KEY",
183
+ message: [
184
+ "Set MY_SERVICE_KEY in .env.local:",
185
+ "1. Visit https://example.com/dashboard/api-keys",
186
+ "2. Create a new API key",
187
+ "3. Add to .env.local: MY_SERVICE_KEY=your_key_here",
188
+ ].join("\\n"),
189
+ };
190
+ },
191
+ };
192
+ `;
193
+ }
194
+ function testTemplate(adapterName, serviceName) {
195
+ const importName = adapterName;
196
+ return `import { describe, it } from "node:test";
197
+ import assert from "node:assert/strict";
198
+ import { ${importName} } from "./${serviceName}.js";
199
+
200
+ const ctx = (env: Record<string, string> = {}) => ({
201
+ projectPath: "/tmp/test-project",
202
+ projectName: "test-project",
203
+ existingEnv: env,
204
+ });
205
+
206
+ describe("${importName}", () => {
207
+ it("has correct name", () => {
208
+ assert.equal(${importName}.name, "${serviceName}/deploy");
209
+ });
210
+
211
+ it("check returns false when key is absent", async () => {
212
+ assert.equal(await ${importName}.check(ctx()), false);
213
+ });
214
+
215
+ it("check returns true when key is present", async () => {
216
+ assert.equal(await ${importName}.check(ctx({ MY_SERVICE_KEY: "test" })), true);
217
+ });
218
+
219
+ it("provision returns error when key is missing", async () => {
220
+ const result = await ${importName}.provision(ctx());
221
+ assert.equal(result.success, false);
222
+ assert.ok(result.error);
223
+ });
224
+
225
+ it("provision returns existing key when already set", async () => {
226
+ const result = await ${importName}.provision(ctx({ MY_SERVICE_KEY: "sk_test" }));
227
+ assert.equal(result.success, true);
228
+ assert.equal(result.secrets?.["MY_SERVICE_KEY"], "sk_test");
229
+ });
230
+ });
231
+ `;
232
+ }
233
+ function indexTemplate(adapterName, shortName) {
234
+ return `export { ${adapterName} as adapter } from "./${shortName}.js";\n`;
235
+ }
236
+ function readmeTemplate(packageName, shortName) {
237
+ return `# ${packageName}
238
+
239
+ [kit](https://github.com/sandstream/kit) adapter plugin for ${shortName}.
240
+
241
+ ## Installation
242
+
243
+ \`\`\`bash
244
+ npm install --save-dev ${packageName}
245
+ \`\`\`
246
+
247
+ Then register in your \`package.json\`:
248
+
249
+ \`\`\`json
250
+ {
251
+ "kitPlugins": ["${packageName}"]
252
+ }
253
+ \`\`\`
254
+
255
+ ## Usage
256
+
257
+ \`\`\`bash
258
+ kit add ${shortName}/deploy
259
+ \`\`\`
260
+
261
+ ## Development
262
+
263
+ See [PLUGIN_AUTHORING.md](https://github.com/sandstream/kit/blob/main/PLUGIN_AUTHORING.md) for the full plugin authoring guide.
264
+ `;
265
+ }
266
+ //# sourceMappingURL=create-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-plugin.js","sourceRoot":"","sources":["../src/create-plugin.ts"],"names":[],"mappings":"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"}