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,293 @@
1
+ /**
2
+ * kit Payout Service
3
+ *
4
+ * Handles author payouts, revenue tracking, grant applications,
5
+ * and Stripe Connect integration for marketplace monetization.
6
+ */
7
+ import { IdGenerators } from "./id-generator.js";
8
+ /**
9
+ * Payout service for managing author earnings and payments
10
+ */
11
+ export class PayoutService {
12
+ db; // Database connection
13
+ constructor(db) {
14
+ this.db = db;
15
+ }
16
+ /**
17
+ * Record a plugin download and update revenue
18
+ */
19
+ async recordPluginDownload(pluginId, downloadRate = 10) {
20
+ const revenue = await this.db.query(`SELECT * FROM plugin_revenue WHERE plugin_id = $1`, [pluginId]);
21
+ const existing = revenue.rows[0];
22
+ const newGross = (existing?.gross_revenue || 0) + downloadRate;
23
+ const commission = Math.round(newGross * 0.2); // 20% to kit
24
+ const earnings = Math.round(newGross * 0.8); // 80% to author
25
+ const result = await this.db.query(`
26
+ INSERT INTO plugin_revenue (id, plugin_id, author_id, gross_revenue, kit_commission, author_earnings, updated_at)
27
+ SELECT $1, $2, author, $3, $4, $5, now()
28
+ FROM plugins WHERE id = $2
29
+ ON CONFLICT (plugin_id) DO UPDATE SET
30
+ gross_revenue = gross_revenue + $3,
31
+ kit_commission = EXCLUDED.gross_revenue * 0.2,
32
+ author_earnings = EXCLUDED.gross_revenue * 0.8,
33
+ updated_at = now()
34
+ RETURNING *
35
+ `, [IdGenerators.payout(), pluginId, downloadRate, commission, earnings]);
36
+ return this.mapRevenue(result.rows[0]);
37
+ }
38
+ /**
39
+ * Calculate monthly earnings for author
40
+ */
41
+ async calculateMonthlyEarnings(authorId, year, month) {
42
+ const result = await this.db.query(`
43
+ SELECT COALESCE(SUM(author_earnings), 0) as total
44
+ FROM plugin_revenue
45
+ WHERE author_id = $1
46
+ AND EXTRACT(YEAR FROM updated_at) = $2
47
+ AND EXTRACT(MONTH FROM updated_at) = $3
48
+ `, [authorId, year, month]);
49
+ return result.rows[0]?.total || 0;
50
+ }
51
+ /**
52
+ * Create monthly payout transaction
53
+ */
54
+ async createPayoutTransaction(authorId, amount, periodStart, periodEnd) {
55
+ const id = IdGenerators.payout();
56
+ const result = await this.db.query(`
57
+ INSERT INTO payment_transactions
58
+ (id, author_id, amount, status, period_start, period_end, created_at, updated_at)
59
+ VALUES ($1, $2, $3, $4, $5, $6, now(), now())
60
+ RETURNING *
61
+ `, [id, authorId, amount, "pending", periodStart, periodEnd]);
62
+ return this.mapTransaction(result.rows[0]);
63
+ }
64
+ /**
65
+ * Trigger monthly payouts (cron job, runs 1st of month)
66
+ */
67
+ async triggerMonthlyPayouts() {
68
+ const lastMonth = new Date();
69
+ lastMonth.setMonth(lastMonth.getMonth() - 1);
70
+ const year = lastMonth.getFullYear();
71
+ const month = lastMonth.getMonth() + 1;
72
+ const authors = await this.db.query(`
73
+ SELECT DISTINCT author_id FROM plugin_revenue
74
+ WHERE author_earnings > 0
75
+ `);
76
+ const payouts = [];
77
+ for (const { author_id } of authors.rows) {
78
+ const earnings = await this.calculateMonthlyEarnings(author_id, year, month);
79
+ if (earnings > 100) { // Minimum $1.00 payout threshold
80
+ const periodStart = `${year}-${String(month).padStart(2, "0")}-01`;
81
+ const periodEnd = new Date(year, month, 0)
82
+ .toISOString()
83
+ .split("T")[0];
84
+ const tx = await this.createPayoutTransaction(author_id, earnings, periodStart, periodEnd);
85
+ payouts.push(tx);
86
+ }
87
+ }
88
+ return payouts;
89
+ }
90
+ /**
91
+ * Process pending payouts (transfers to author Stripe accounts)
92
+ */
93
+ async processPayouts(batchSize = 10) {
94
+ const pending = await this.db.query(`
95
+ SELECT pt.* FROM payment_transactions pt
96
+ WHERE pt.status = 'pending'
97
+ AND pt.created_at < now() - interval '2 days'
98
+ LIMIT $1
99
+ `, [batchSize]);
100
+ const processed = [];
101
+ for (const tx of pending.rows) {
102
+ // Get author's Stripe account
103
+ const account = await this.db.query(`SELECT stripe_account_id FROM author_payout_accounts WHERE author_id = $1`, [tx.author_id]);
104
+ if (!account.rows[0]?.stripe_account_id) {
105
+ // Skip if no Stripe account connected
106
+ continue;
107
+ }
108
+ try {
109
+ // In real implementation, call Stripe API here
110
+ // const transfer = await stripe.transfers.create({
111
+ // destination: account.rows[0].stripe_account_id,
112
+ // amount: tx.amount,
113
+ // currency: 'usd',
114
+ // });
115
+ // For now, simulate successful transfer
116
+ const result = await this.db.query(`
117
+ UPDATE payment_transactions
118
+ SET status = $1, attempted_at = now(), updated_at = now()
119
+ WHERE id = $2
120
+ RETURNING *
121
+ `, ["processing", tx.id]);
122
+ processed.push(this.mapTransaction(result.rows[0]));
123
+ }
124
+ catch (error) {
125
+ // Log error and mark as failed
126
+ console.error(`Failed to process payout ${tx.id}:`, error);
127
+ await this.db.query(`
128
+ UPDATE payment_transactions
129
+ SET status = $1, updated_at = now()
130
+ WHERE id = $2
131
+ `, ["failed", tx.id]);
132
+ }
133
+ }
134
+ return processed;
135
+ }
136
+ /**
137
+ * Submit grant application
138
+ */
139
+ async submitGrant(authorId, pluginId, amountRequested, useCase) {
140
+ const id = IdGenerators.grant();
141
+ const result = await this.db.query(`
142
+ INSERT INTO grant_applications
143
+ (id, author_id, plugin_id, amount_requested, status, use_case, created_at, updated_at)
144
+ VALUES ($1, $2, $3, $4, $5, $6, now(), now())
145
+ RETURNING *
146
+ `, [id, authorId, pluginId, amountRequested, "pending", useCase]);
147
+ return this.mapGrant(result.rows[0]);
148
+ }
149
+ /**
150
+ * Approve grant (admin only)
151
+ */
152
+ async approveGrant(grantId, approvedBy) {
153
+ const result = await this.db.query(`
154
+ UPDATE grant_applications
155
+ SET status = $1, approved_by = $2, approval_date = now(), updated_at = now()
156
+ WHERE id = $3
157
+ RETURNING *
158
+ `, ["approved", approvedBy, grantId]);
159
+ const grant = this.mapGrant(result.rows[0]);
160
+ // Immediately create payout transaction for grant amount
161
+ await this.createPayoutTransaction(grant.authorId, grant.amountRequested, new Date().toISOString().split("T")[0], new Date().toISOString().split("T")[0]);
162
+ return grant;
163
+ }
164
+ /**
165
+ * Reject grant (admin only)
166
+ */
167
+ async rejectGrant(grantId) {
168
+ const result = await this.db.query(`
169
+ UPDATE grant_applications
170
+ SET status = $1, updated_at = now()
171
+ WHERE id = $2
172
+ RETURNING *
173
+ `, ["rejected", grantId]);
174
+ return this.mapGrant(result.rows[0]);
175
+ }
176
+ /**
177
+ * Get pending grants (admin dashboard)
178
+ */
179
+ async getPendingGrants(limit = 20) {
180
+ const result = await this.db.query(`
181
+ SELECT * FROM grant_applications
182
+ WHERE status = 'pending'
183
+ ORDER BY created_at DESC
184
+ LIMIT $1
185
+ `, [limit]);
186
+ return result.rows.map((row) => this.mapGrant(row));
187
+ }
188
+ /**
189
+ * Get author payout status
190
+ */
191
+ async getPayoutStatus(authorId) {
192
+ const result = await this.db.query(`SELECT * FROM author_payout_accounts WHERE author_id = $1`, [authorId]);
193
+ return result.rows[0] ? this.mapPayoutAccount(result.rows[0]) : null;
194
+ }
195
+ /**
196
+ * Setup payout account (initiate Stripe Connect)
197
+ */
198
+ async setupPayoutAccount(authorId, email) {
199
+ // Check if account exists
200
+ const existing = await this.getPayoutStatus(authorId);
201
+ if (existing) {
202
+ return existing;
203
+ }
204
+ const id = IdGenerators.payout();
205
+ const result = await this.db.query(`
206
+ INSERT INTO author_payout_accounts
207
+ (id, author_id, status, kyc_status, created_at, updated_at)
208
+ VALUES ($1, $2, $3, $4, now(), now())
209
+ RETURNING *
210
+ `, [id, authorId, "pending", "pending"]);
211
+ return this.mapPayoutAccount(result.rows[0]);
212
+ }
213
+ /**
214
+ * Mark payout transaction as completed (webhook handler)
215
+ */
216
+ async completePayoutTransaction(stripeTransferId) {
217
+ const result = await this.db.query(`
218
+ UPDATE payment_transactions
219
+ SET status = $1, completed_at = now(), updated_at = now()
220
+ WHERE stripe_transfer_id = $2
221
+ RETURNING *
222
+ `, ["completed", stripeTransferId]);
223
+ return this.mapTransaction(result.rows[0]);
224
+ }
225
+ /**
226
+ * Map database row to PayoutAccount
227
+ */
228
+ mapPayoutAccount(row) {
229
+ return {
230
+ id: row.id,
231
+ authorId: row.author_id,
232
+ stripeAccountId: row.stripe_account_id,
233
+ status: row.status,
234
+ kycStatus: row.kyc_status,
235
+ taxId: row.tax_id,
236
+ bankAccountId: row.bank_account_id,
237
+ createdAt: row.created_at,
238
+ updatedAt: row.updated_at,
239
+ };
240
+ }
241
+ /**
242
+ * Map database row to PluginRevenue
243
+ */
244
+ mapRevenue(row) {
245
+ return {
246
+ id: row.id,
247
+ pluginId: row.plugin_id,
248
+ authorId: row.author_id,
249
+ grossRevenue: row.gross_revenue,
250
+ kitCommission: row.kit_commission,
251
+ authorEarnings: row.author_earnings,
252
+ currency: row.currency || "USD",
253
+ updatedAt: row.updated_at,
254
+ };
255
+ }
256
+ /**
257
+ * Map database row to PaymentTransaction
258
+ */
259
+ mapTransaction(row) {
260
+ return {
261
+ id: row.id,
262
+ authorId: row.author_id,
263
+ stripeTransferId: row.stripe_transfer_id,
264
+ amount: row.amount,
265
+ status: row.status,
266
+ periodStart: row.period_start,
267
+ periodEnd: row.period_end,
268
+ attemptedAt: row.attempted_at,
269
+ completedAt: row.completed_at,
270
+ createdAt: row.created_at,
271
+ updatedAt: row.updated_at,
272
+ };
273
+ }
274
+ /**
275
+ * Map database row to GrantApplication
276
+ */
277
+ mapGrant(row) {
278
+ return {
279
+ id: row.id,
280
+ authorId: row.author_id,
281
+ pluginId: row.plugin_id,
282
+ amountRequested: row.amount_requested,
283
+ status: row.status,
284
+ useCase: row.use_case,
285
+ approvedBy: row.approved_by,
286
+ approvalDate: row.approval_date,
287
+ paidAt: row.paid_at,
288
+ createdAt: row.created_at,
289
+ updatedAt: row.updated_at,
290
+ };
291
+ }
292
+ }
293
+ //# sourceMappingURL=payout-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payout-service.js","sourceRoot":"","sources":["../src/payout-service.ts"],"names":[],"mappings":"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"}
package/dist/pkg.d.ts ADDED
@@ -0,0 +1,30 @@
1
+ /**
2
+ * kit pkg — Install packages from any ecosystem with mandatory triage.
3
+ *
4
+ * Usage:
5
+ * kit pkg npm:express
6
+ * kit pkg pip:requests
7
+ * kit pkg brew:trivy
8
+ * kit pkg docker:stalwartlabs/stalwart
9
+ * kit pkg go:github.com/sigstore/cosign/v2/cmd/cosign@latest
10
+ * kit pkg cargo:ripgrep
11
+ */
12
+ export interface PkgSpec {
13
+ ecosystem: string;
14
+ name: string;
15
+ version?: string;
16
+ }
17
+ export interface PkgResult {
18
+ spec: PkgSpec;
19
+ triagePassed: boolean;
20
+ installed: boolean;
21
+ output: string;
22
+ }
23
+ /**
24
+ * Parse "npm:express@4.18.0" → { ecosystem: "npm", name: "express", version: "4.18.0" }
25
+ */
26
+ export declare function parsePkgSpec(input: string): PkgSpec | null;
27
+ /**
28
+ * Install a package with mandatory triage
29
+ */
30
+ export declare function installPkg(spec: PkgSpec): Promise<PkgResult>;
package/dist/pkg.js ADDED
@@ -0,0 +1,162 @@
1
+ /**
2
+ * kit pkg — Install packages from any ecosystem with mandatory triage.
3
+ *
4
+ * Usage:
5
+ * kit pkg npm:express
6
+ * kit pkg pip:requests
7
+ * kit pkg brew:trivy
8
+ * kit pkg docker:stalwartlabs/stalwart
9
+ * kit pkg go:github.com/sigstore/cosign/v2/cmd/cosign@latest
10
+ * kit pkg cargo:ripgrep
11
+ */
12
+ import { exec as execCb } from "node:child_process";
13
+ import { promisify } from "node:util";
14
+ import { runTriage } from "./triage.js";
15
+ const execAsync = promisify(execCb);
16
+ const ECOSYSTEM_MAP = {
17
+ npm: {
18
+ triageType: "npm",
19
+ installCmd: (name, ver) => ver ? `npm install ${name}@${ver}` : `npm install ${name}`,
20
+ },
21
+ "npm-g": {
22
+ triageType: "npm",
23
+ installCmd: (name, ver) => ver ? `npm install -g ${name}@${ver}` : `npm install -g ${name}`,
24
+ },
25
+ pnpm: {
26
+ triageType: "npm",
27
+ installCmd: (name, ver) => ver ? `pnpm add ${name}@${ver}` : `pnpm add ${name}`,
28
+ },
29
+ pip: {
30
+ triageType: "pip",
31
+ installCmd: (name, ver) => ver ? `pip install ${name}==${ver}` : `pip install ${name}`,
32
+ },
33
+ brew: {
34
+ triageType: "repo",
35
+ installCmd: (name) => `brew install ${name}`,
36
+ },
37
+ docker: {
38
+ triageType: "docker",
39
+ installCmd: (name, ver) => ver ? `docker pull ${name}:${ver}` : `docker pull ${name}:latest`,
40
+ },
41
+ go: {
42
+ triageType: "repo",
43
+ installCmd: (name) => `go install ${name}`,
44
+ },
45
+ cargo: {
46
+ triageType: "repo",
47
+ installCmd: (name) => `cargo install ${name}`,
48
+ },
49
+ };
50
+ /**
51
+ * Parse "npm:express@4.18.0" → { ecosystem: "npm", name: "express", version: "4.18.0" }
52
+ */
53
+ export function parsePkgSpec(input) {
54
+ const colonIdx = input.indexOf(":");
55
+ if (colonIdx === -1)
56
+ return null;
57
+ const ecosystem = input.slice(0, colonIdx);
58
+ const rest = input.slice(colonIdx + 1);
59
+ // Handle @scoped packages like @socketsecurity/cli@1.0.0
60
+ let name;
61
+ let version;
62
+ if (rest.startsWith("@")) {
63
+ // Scoped: @scope/pkg@version
64
+ const lastAt = rest.lastIndexOf("@");
65
+ if (lastAt > 0 && lastAt !== rest.indexOf("@")) {
66
+ name = rest.slice(0, lastAt);
67
+ version = rest.slice(lastAt + 1);
68
+ }
69
+ else {
70
+ name = rest;
71
+ }
72
+ }
73
+ else {
74
+ const atIdx = rest.indexOf("@");
75
+ if (atIdx > 0) {
76
+ name = rest.slice(0, atIdx);
77
+ version = rest.slice(atIdx + 1);
78
+ }
79
+ else {
80
+ name = rest;
81
+ }
82
+ }
83
+ return { ecosystem, name, version };
84
+ }
85
+ /**
86
+ * Get GitHub repo URL for brew formulas
87
+ */
88
+ async function getBrewRepoUrl(name) {
89
+ try {
90
+ const { stdout } = await execAsync(`brew info --json=v2 ${name} 2>/dev/null`);
91
+ const data = JSON.parse(stdout);
92
+ const formula = data.formulae?.[0] || data.casks?.[0];
93
+ const homepage = formula?.homepage || "";
94
+ if (homepage.includes("github.com"))
95
+ return homepage;
96
+ return null;
97
+ }
98
+ catch {
99
+ // brew not available or formula not found — try GitHub search
100
+ return `https://github.com/search?q=${name}`;
101
+ }
102
+ }
103
+ /**
104
+ * Install a package with mandatory triage
105
+ */
106
+ export async function installPkg(spec) {
107
+ const eco = ECOSYSTEM_MAP[spec.ecosystem];
108
+ if (!eco) {
109
+ return {
110
+ spec,
111
+ triagePassed: false,
112
+ installed: false,
113
+ output: `Unknown ecosystem: ${spec.ecosystem}\nSupported: ${Object.keys(ECOSYSTEM_MAP).join(", ")}`,
114
+ };
115
+ }
116
+ // Step 1: Triage
117
+ let triageTarget = spec.name;
118
+ if (spec.ecosystem === "brew") {
119
+ const repoUrl = await getBrewRepoUrl(spec.name);
120
+ if (repoUrl && repoUrl.includes("github.com")) {
121
+ triageTarget = repoUrl;
122
+ }
123
+ }
124
+ else if (spec.ecosystem === "docker" && !spec.name.includes("/")) {
125
+ // Official Docker images — skip repo triage, do image triage
126
+ triageTarget = spec.name;
127
+ }
128
+ else if (spec.ecosystem === "go") {
129
+ const ghParts = spec.name.replace("@latest", "").split("/").slice(0, 3);
130
+ triageTarget = `https://${ghParts.join("/")}`;
131
+ }
132
+ const triageResult = await runTriage(eco.triageType, triageTarget);
133
+ if (!triageResult.passed) {
134
+ return {
135
+ spec,
136
+ triagePassed: false,
137
+ installed: false,
138
+ output: `${triageResult.output}\n\n❌ Triage failed. Package not installed.\nReview warnings above. Use --force to override (not recommended).`,
139
+ };
140
+ }
141
+ // Step 2: Install
142
+ const cmd = eco.installCmd(spec.name, spec.version);
143
+ try {
144
+ const { stdout, stderr } = await execAsync(cmd, { timeout: 300_000 });
145
+ return {
146
+ spec,
147
+ triagePassed: true,
148
+ installed: true,
149
+ output: `✅ Triage passed\n✅ Installed: ${cmd}\n${stdout}${stderr ? "\n" + stderr : ""}`,
150
+ };
151
+ }
152
+ catch (error) {
153
+ const err = error;
154
+ return {
155
+ spec,
156
+ triagePassed: true,
157
+ installed: false,
158
+ output: `✅ Triage passed\n❌ Install failed: ${cmd}\n${err.stderr || err.message || ""}`,
159
+ };
160
+ }
161
+ }
162
+ //# sourceMappingURL=pkg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pkg.js","sourceRoot":"","sources":["../src/pkg.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { AdapterRegistry } from "./adapters/types.js";
2
+ /**
3
+ * Load plugin adapters from kitPlugins listed in the project's package.json.
4
+ *
5
+ * Plugin registration protocol:
6
+ * 1. Read `kitPlugins` array from `<projectPath>/package.json`
7
+ * 2. For each entry, attempt to import `<plugin>/kit-adapter` then `<plugin>`
8
+ * 3. Expect the module to export `{ adapter: ServiceAdapter }` or `{ adapters: ServiceAdapter[] }`
9
+ * 4. Invalid/missing plugins are skipped with a warning (never throw)
10
+ *
11
+ * @example package.json
12
+ * ```json
13
+ * { "kitPlugins": ["@acme/kit-railway", "sandstream-kit-plugin-aws-s3"] }
14
+ * ```
15
+ */
16
+ export declare function loadPluginAdapters(projectPath: string): Promise<AdapterRegistry>;
@@ -0,0 +1,124 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { resolve, join } from "node:path";
3
+ /**
4
+ * Load plugin adapters from kitPlugins listed in the project's package.json.
5
+ *
6
+ * Plugin registration protocol:
7
+ * 1. Read `kitPlugins` array from `<projectPath>/package.json`
8
+ * 2. For each entry, attempt to import `<plugin>/kit-adapter` then `<plugin>`
9
+ * 3. Expect the module to export `{ adapter: ServiceAdapter }` or `{ adapters: ServiceAdapter[] }`
10
+ * 4. Invalid/missing plugins are skipped with a warning (never throw)
11
+ *
12
+ * @example package.json
13
+ * ```json
14
+ * { "kitPlugins": ["@acme/kit-railway", "sandstream-kit-plugin-aws-s3"] }
15
+ * ```
16
+ */
17
+ export async function loadPluginAdapters(projectPath) {
18
+ const registry = {};
19
+ const pluginNames = await readkitPlugins(projectPath);
20
+ if (pluginNames.length === 0)
21
+ return registry;
22
+ for (const pluginName of pluginNames) {
23
+ try {
24
+ const adapters = await loadSinglePlugin(pluginName, projectPath);
25
+ for (const adapter of adapters) {
26
+ registry[adapter.name] = adapter;
27
+ }
28
+ }
29
+ catch (err) {
30
+ const msg = err instanceof Error ? err.message : String(err);
31
+ console.warn(`[kit] plugin "${pluginName}" failed to load: ${msg}`);
32
+ }
33
+ }
34
+ return registry;
35
+ }
36
+ /**
37
+ * Read the kitPlugins array from package.json, returning [] if absent or unreadable.
38
+ */
39
+ async function readkitPlugins(projectPath) {
40
+ try {
41
+ const pkgPath = resolve(projectPath, "package.json");
42
+ const raw = await readFile(pkgPath, "utf-8");
43
+ const pkg = JSON.parse(raw);
44
+ const plugins = pkg["kitPlugins"];
45
+ if (!Array.isArray(plugins))
46
+ return [];
47
+ return plugins.filter((p) => typeof p === "string");
48
+ }
49
+ catch {
50
+ return [];
51
+ }
52
+ }
53
+ /**
54
+ * Attempt to load a plugin by name, trying `<plugin>/kit-adapter` first, then `<plugin>`.
55
+ * Returns an array of ServiceAdapters or throws if both entry points fail.
56
+ */
57
+ async function loadSinglePlugin(pluginName, projectPath) {
58
+ // Resolve the plugin from the project's node_modules (not kit's own node_modules)
59
+ const candidates = [
60
+ join(projectPath, "node_modules", pluginName, "kit-adapter.js"),
61
+ join(projectPath, "node_modules", pluginName, "kit-adapter.cjs"),
62
+ join(projectPath, "node_modules", pluginName, "index.js"),
63
+ join(projectPath, "node_modules", pluginName),
64
+ ];
65
+ let mod;
66
+ let lastError;
67
+ for (const candidate of candidates) {
68
+ try {
69
+ mod = await import(candidate);
70
+ break;
71
+ }
72
+ catch (err) {
73
+ lastError = err;
74
+ }
75
+ }
76
+ if (mod === undefined) {
77
+ const msg = lastError instanceof Error ? lastError.message : String(lastError);
78
+ throw new Error(`Could not import "${pluginName}": ${msg}`);
79
+ }
80
+ return extractAdapters(mod, pluginName);
81
+ }
82
+ /**
83
+ * Extract ServiceAdapter(s) from a loaded module, handling both single and array forms.
84
+ */
85
+ function extractAdapters(mod, pluginName) {
86
+ if (!mod || typeof mod !== "object") {
87
+ throw new Error(`Plugin "${pluginName}" does not export an object`);
88
+ }
89
+ const exports = mod;
90
+ // { adapters: ServiceAdapter[] }
91
+ if (Array.isArray(exports["adapters"])) {
92
+ const adapters = exports["adapters"].filter(isServiceAdapter);
93
+ if (adapters.length > 0)
94
+ return adapters;
95
+ }
96
+ // { adapter: ServiceAdapter }
97
+ if (isServiceAdapter(exports["adapter"])) {
98
+ return [exports["adapter"]];
99
+ }
100
+ // { default: { adapters } } or { default: ServiceAdapter }
101
+ const def = exports["default"];
102
+ if (def && typeof def === "object") {
103
+ const d = def;
104
+ if (Array.isArray(d["adapters"])) {
105
+ const adapters = d["adapters"].filter(isServiceAdapter);
106
+ if (adapters.length > 0)
107
+ return adapters;
108
+ }
109
+ if (isServiceAdapter(def))
110
+ return [def];
111
+ }
112
+ throw new Error(`Plugin "${pluginName}" must export { adapter } or { adapters } — got keys: ${Object.keys(exports).join(", ")}`);
113
+ }
114
+ function isServiceAdapter(value) {
115
+ if (!value || typeof value !== "object")
116
+ return false;
117
+ const v = value;
118
+ return (typeof v["name"] === "string" &&
119
+ typeof v["description"] === "string" &&
120
+ typeof v["check"] === "function" &&
121
+ typeof v["provision"] === "function" &&
122
+ typeof v["getRequiredTools"] === "function");
123
+ }
124
+ //# sourceMappingURL=plugin-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-loader.js","sourceRoot":"","sources":["../src/plugin-loader.ts"],"names":[],"mappings":"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"}