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 @@
1
+ {"version":3,"file":"redis-adapter.js","sourceRoot":"","sources":["../src/redis-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Resilience Testing Suite
3
+ *
4
+ * Validates system resilience metrics:
5
+ * - RTO (Recovery Time Objective): <5 minutes
6
+ * - RPO (Recovery Point Objective): <24 hours
7
+ * - Failover: Automatic with no data loss
8
+ * - Retry: Exponential backoff with jitter
9
+ */
10
+ export interface ResilienceMetrics {
11
+ rtoSeconds: number;
12
+ rpoHours: number;
13
+ failoverAutomatic: boolean;
14
+ dataLossItems: number;
15
+ alertDelaySeconds: number;
16
+ recoveryAttempts: number;
17
+ }
18
+ export interface TestResult {
19
+ passed: boolean;
20
+ metric: string;
21
+ expected: string;
22
+ actual: string;
23
+ failureReason?: string;
24
+ }
25
+ export declare class ResilienceTestSuite {
26
+ private metrics;
27
+ private results;
28
+ /**
29
+ * Test RTO (Recovery Time Objective)
30
+ * Target: <5 minutes (300 seconds)
31
+ */
32
+ testRTO(): TestResult;
33
+ /**
34
+ * Test RPO (Recovery Point Objective)
35
+ * Target: <24 hours
36
+ */
37
+ testRPO(): TestResult;
38
+ /**
39
+ * Test Automatic Failover
40
+ * Validates failover happens without manual intervention
41
+ */
42
+ testAutomaticFailover(): TestResult;
43
+ /**
44
+ * Test Data Loss
45
+ * Target: Zero data loss
46
+ */
47
+ testDataLoss(): TestResult;
48
+ /**
49
+ * Test Alert Response Time
50
+ * Target: Detection within 90 seconds
51
+ */
52
+ testAlertResponse(): TestResult;
53
+ /**
54
+ * Test Recovery Attempts
55
+ * Valid: 1-3 attempts (not too quick, not too slow)
56
+ */
57
+ testRecoveryAttempts(): TestResult;
58
+ /**
59
+ * Run all resilience tests
60
+ */
61
+ runAll(): boolean;
62
+ /**
63
+ * Generate test report
64
+ */
65
+ generateReport(): string;
66
+ /**
67
+ * Update metrics from test results
68
+ */
69
+ updateMetrics(metrics: Partial<ResilienceMetrics>): void;
70
+ /**
71
+ * Get current metrics
72
+ */
73
+ getMetrics(): ResilienceMetrics;
74
+ /**
75
+ * Get test results
76
+ */
77
+ getResults(): TestResult[];
78
+ }
79
+ /**
80
+ * Exponential Backoff Strategy Validator
81
+ * Ensures retry logic follows best practices
82
+ */
83
+ export declare class BackoffValidator {
84
+ /**
85
+ * Validate exponential backoff sequence
86
+ * - First attempt: 1s
87
+ * - Second attempt: 2s (±jitter)
88
+ * - Third attempt: 4s (±jitter)
89
+ * - Max: 32s
90
+ */
91
+ static validateBackoff(delays: number[]): boolean;
92
+ /**
93
+ * Calculate recommended backoff delay
94
+ */
95
+ static calculateBackoff(attempt: number): number;
96
+ }
97
+ /**
98
+ * Circuit Breaker Pattern Validator
99
+ * Ensures circuit breaker is configured correctly
100
+ */
101
+ export declare class CircuitBreakerValidator {
102
+ private state;
103
+ private failureCount;
104
+ private failureThreshold;
105
+ private successThreshold;
106
+ private successCount;
107
+ /**
108
+ * Record request result
109
+ */
110
+ recordResult(success: boolean): void;
111
+ /**
112
+ * Check if requests should be allowed
113
+ */
114
+ isAllowed(): boolean;
115
+ /**
116
+ * Get current state
117
+ */
118
+ getState(): string;
119
+ }
120
+ export default ResilienceTestSuite;
@@ -0,0 +1,293 @@
1
+ /**
2
+ * Resilience Testing Suite
3
+ *
4
+ * Validates system resilience metrics:
5
+ * - RTO (Recovery Time Objective): <5 minutes
6
+ * - RPO (Recovery Point Objective): <24 hours
7
+ * - Failover: Automatic with no data loss
8
+ * - Retry: Exponential backoff with jitter
9
+ */
10
+ export class ResilienceTestSuite {
11
+ metrics = {
12
+ rtoSeconds: 0,
13
+ rpoHours: 0,
14
+ failoverAutomatic: false,
15
+ dataLossItems: 0,
16
+ alertDelaySeconds: 0,
17
+ recoveryAttempts: 0,
18
+ };
19
+ results = [];
20
+ /**
21
+ * Test RTO (Recovery Time Objective)
22
+ * Target: <5 minutes (300 seconds)
23
+ */
24
+ testRTO() {
25
+ const RTOTarget = 300;
26
+ const passed = this.metrics.rtoSeconds <= RTOTarget;
27
+ const result = {
28
+ passed,
29
+ metric: 'RTO',
30
+ expected: `<${RTOTarget}s`,
31
+ actual: `${this.metrics.rtoSeconds}s`,
32
+ failureReason: passed ? undefined : `RTO exceeded target by ${this.metrics.rtoSeconds - RTOTarget}s`,
33
+ };
34
+ this.results.push(result);
35
+ return result;
36
+ }
37
+ /**
38
+ * Test RPO (Recovery Point Objective)
39
+ * Target: <24 hours
40
+ */
41
+ testRPO() {
42
+ const RPOTarget = 24;
43
+ const passed = this.metrics.rpoHours <= RPOTarget;
44
+ const result = {
45
+ passed,
46
+ metric: 'RPO',
47
+ expected: `<${RPOTarget}h`,
48
+ actual: `${this.metrics.rpoHours}h`,
49
+ failureReason: passed ? undefined : `RPO exceeded target by ${this.metrics.rpoHours - RPOTarget}h`,
50
+ };
51
+ this.results.push(result);
52
+ return result;
53
+ }
54
+ /**
55
+ * Test Automatic Failover
56
+ * Validates failover happens without manual intervention
57
+ */
58
+ testAutomaticFailover() {
59
+ const passed = this.metrics.failoverAutomatic;
60
+ const result = {
61
+ passed,
62
+ metric: 'Automatic Failover',
63
+ expected: 'true',
64
+ actual: this.metrics.failoverAutomatic.toString(),
65
+ failureReason: passed ? undefined : 'Failover requires manual intervention',
66
+ };
67
+ this.results.push(result);
68
+ return result;
69
+ }
70
+ /**
71
+ * Test Data Loss
72
+ * Target: Zero data loss
73
+ */
74
+ testDataLoss() {
75
+ const passed = this.metrics.dataLossItems === 0;
76
+ const result = {
77
+ passed,
78
+ metric: 'Data Loss',
79
+ expected: '0 items',
80
+ actual: `${this.metrics.dataLossItems} items`,
81
+ failureReason: passed ? undefined : `Data loss detected: ${this.metrics.dataLossItems} items`,
82
+ };
83
+ this.results.push(result);
84
+ return result;
85
+ }
86
+ /**
87
+ * Test Alert Response Time
88
+ * Target: Detection within 90 seconds
89
+ */
90
+ testAlertResponse() {
91
+ const AlertTarget = 90;
92
+ const passed = this.metrics.alertDelaySeconds <= AlertTarget;
93
+ const result = {
94
+ passed,
95
+ metric: 'Alert Detection',
96
+ expected: `<${AlertTarget}s`,
97
+ actual: `${this.metrics.alertDelaySeconds}s`,
98
+ failureReason: passed ? undefined : `Alert delayed by ${this.metrics.alertDelaySeconds - AlertTarget}s`,
99
+ };
100
+ this.results.push(result);
101
+ return result;
102
+ }
103
+ /**
104
+ * Test Recovery Attempts
105
+ * Valid: 1-3 attempts (not too quick, not too slow)
106
+ */
107
+ testRecoveryAttempts() {
108
+ const minAttempts = 1;
109
+ const maxAttempts = 3;
110
+ const passed = this.metrics.recoveryAttempts >= minAttempts && this.metrics.recoveryAttempts <= maxAttempts;
111
+ const result = {
112
+ passed,
113
+ metric: 'Recovery Attempts',
114
+ expected: `${minAttempts}-${maxAttempts}`,
115
+ actual: `${this.metrics.recoveryAttempts}`,
116
+ failureReason: passed ? undefined : `Recovery attempts out of range`,
117
+ };
118
+ this.results.push(result);
119
+ return result;
120
+ }
121
+ /**
122
+ * Run all resilience tests
123
+ */
124
+ runAll() {
125
+ this.testRTO();
126
+ this.testRPO();
127
+ this.testAutomaticFailover();
128
+ this.testDataLoss();
129
+ this.testAlertResponse();
130
+ this.testRecoveryAttempts();
131
+ return this.results.every((r) => r.passed);
132
+ }
133
+ /**
134
+ * Generate test report
135
+ */
136
+ generateReport() {
137
+ const passed = this.results.filter((r) => r.passed).length;
138
+ const total = this.results.length;
139
+ const passRate = ((passed / total) * 100).toFixed(1);
140
+ let report = `
141
+ === Resilience Test Report ===
142
+ Date: ${new Date().toISOString()}
143
+ Results: ${passed}/${total} passed (${passRate}%)
144
+
145
+ `;
146
+ for (const result of this.results) {
147
+ const status = result.passed ? '✅' : '❌';
148
+ report += `${status} ${result.metric}: ${result.actual} (expected: ${result.expected})`;
149
+ if (result.failureReason) {
150
+ report += `\n Reason: ${result.failureReason}`;
151
+ }
152
+ report += '\n';
153
+ }
154
+ report += `
155
+ Metrics Summary:
156
+ - RTO: ${this.metrics.rtoSeconds}s (target: <300s)
157
+ - RPO: ${this.metrics.rpoHours}h (target: <24h)
158
+ - Failover: ${this.metrics.failoverAutomatic ? 'Automatic' : 'Manual'}
159
+ - Data Loss: ${this.metrics.dataLossItems} items (target: 0)
160
+ - Alert Delay: ${this.metrics.alertDelaySeconds}s (target: <90s)
161
+ - Recovery Attempts: ${this.metrics.recoveryAttempts} (target: 1-3)
162
+
163
+ Overall: ${passed === total ? 'PASS' : 'FAIL'}
164
+ `;
165
+ return report;
166
+ }
167
+ /**
168
+ * Update metrics from test results
169
+ */
170
+ updateMetrics(metrics) {
171
+ this.metrics = { ...this.metrics, ...metrics };
172
+ }
173
+ /**
174
+ * Get current metrics
175
+ */
176
+ getMetrics() {
177
+ return this.metrics;
178
+ }
179
+ /**
180
+ * Get test results
181
+ */
182
+ getResults() {
183
+ return this.results;
184
+ }
185
+ }
186
+ /**
187
+ * Exponential Backoff Strategy Validator
188
+ * Ensures retry logic follows best practices
189
+ */
190
+ export class BackoffValidator {
191
+ /**
192
+ * Validate exponential backoff sequence
193
+ * - First attempt: 1s
194
+ * - Second attempt: 2s (±jitter)
195
+ * - Third attempt: 4s (±jitter)
196
+ * - Max: 32s
197
+ */
198
+ static validateBackoff(delays) {
199
+ const minBackoffs = [1000, 2000, 4000];
200
+ const maxBackoffs = [1100, 2200, 4400];
201
+ const maxDelay = 32000;
202
+ if (delays.length === 0) {
203
+ return false;
204
+ }
205
+ for (let i = 0; i < Math.min(delays.length, 3); i++) {
206
+ const delay = delays[i];
207
+ if (i < 3) {
208
+ // Check exponential sequence with jitter tolerance (10%)
209
+ if (delay < minBackoffs[i] || delay > maxBackoffs[i]) {
210
+ console.error(`Delay ${i}: ${delay}ms not in range [${minBackoffs[i]}, ${maxBackoffs[i]}]`);
211
+ return false;
212
+ }
213
+ }
214
+ if (delay > maxDelay) {
215
+ console.error(`Delay exceeds max: ${delay}ms > ${maxDelay}ms`);
216
+ return false;
217
+ }
218
+ }
219
+ return true;
220
+ }
221
+ /**
222
+ * Calculate recommended backoff delay
223
+ */
224
+ static calculateBackoff(attempt) {
225
+ const minBackoff = 1000;
226
+ const maxBackoff = 32000;
227
+ const exponential = Math.min(maxBackoff, minBackoff * Math.pow(2, attempt));
228
+ const jitter = exponential * 0.1 * (Math.random() - 0.5) * 2;
229
+ return Math.round(exponential + jitter);
230
+ }
231
+ }
232
+ /**
233
+ * Circuit Breaker Pattern Validator
234
+ * Ensures circuit breaker is configured correctly
235
+ */
236
+ export class CircuitBreakerValidator {
237
+ state = 'closed';
238
+ failureCount = 0;
239
+ failureThreshold = 5;
240
+ successThreshold = 2;
241
+ successCount = 0;
242
+ /**
243
+ * Record request result
244
+ */
245
+ recordResult(success) {
246
+ if (this.state === 'closed') {
247
+ if (success) {
248
+ this.failureCount = 0;
249
+ }
250
+ else {
251
+ this.failureCount++;
252
+ if (this.failureCount >= this.failureThreshold) {
253
+ this.state = 'open';
254
+ console.log('Circuit breaker opened');
255
+ }
256
+ }
257
+ }
258
+ else if (this.state === 'open') {
259
+ // After timeout, move to half-open
260
+ this.state = 'half-open';
261
+ this.successCount = 0;
262
+ console.log('Circuit breaker half-open');
263
+ }
264
+ else if (this.state === 'half-open') {
265
+ if (success) {
266
+ this.successCount++;
267
+ if (this.successCount >= this.successThreshold) {
268
+ this.state = 'closed';
269
+ this.failureCount = 0;
270
+ console.log('Circuit breaker closed');
271
+ }
272
+ }
273
+ else {
274
+ this.state = 'open';
275
+ console.log('Circuit breaker reopened');
276
+ }
277
+ }
278
+ }
279
+ /**
280
+ * Check if requests should be allowed
281
+ */
282
+ isAllowed() {
283
+ return this.state !== 'open';
284
+ }
285
+ /**
286
+ * Get current state
287
+ */
288
+ getState() {
289
+ return this.state;
290
+ }
291
+ }
292
+ export default ResilienceTestSuite;
293
+ //# sourceMappingURL=resilience-tests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resilience-tests.js","sourceRoot":"","sources":["../src/resilience-tests.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { GovernanceConfig } from "./config.js";
2
+ export interface RevocationStatus {
3
+ revoked: boolean;
4
+ reason?: string;
5
+ timestamp?: string;
6
+ }
7
+ /**
8
+ * Check if agent access has been revoked
9
+ */
10
+ export declare function checkRevocationStatus(config: GovernanceConfig | undefined): Promise<boolean>;
11
+ /**
12
+ * Force a fresh revocation check (ignore cache)
13
+ */
14
+ export declare function forceRevocationCheck(config: GovernanceConfig | undefined): Promise<RevocationStatus>;
15
+ /**
16
+ * Clear local secrets and caches (called when revocation detected)
17
+ */
18
+ export declare function handleRevocation(config: GovernanceConfig | undefined): Promise<void>;
19
+ /**
20
+ * Get formatted revocation status for display
21
+ */
22
+ export declare function formatRevocationStatus(status: RevocationStatus): string;
@@ -0,0 +1,100 @@
1
+ import { mergeGovernanceConfig } from "./governance.js";
2
+ let lastRevocationCheck = 0;
3
+ let cachedRevocationStatus = null;
4
+ /**
5
+ * Check if agent access has been revoked
6
+ */
7
+ export async function checkRevocationStatus(config) {
8
+ const fullConfig = mergeGovernanceConfig(config);
9
+ if (!fullConfig.revocation.enabled) {
10
+ return false;
11
+ }
12
+ // Use cached status if recent enough
13
+ const now = Date.now();
14
+ const checkInterval = (fullConfig.revocation.check_interval || 300) * 1000;
15
+ if (cachedRevocationStatus &&
16
+ now - lastRevocationCheck < checkInterval) {
17
+ return cachedRevocationStatus.revoked;
18
+ }
19
+ // Check revocation endpoint
20
+ const status = await fetchRevocationStatus(fullConfig);
21
+ cachedRevocationStatus = status;
22
+ lastRevocationCheck = now;
23
+ return status.revoked;
24
+ }
25
+ /**
26
+ * Fetch revocation status from endpoint
27
+ */
28
+ async function fetchRevocationStatus(config) {
29
+ if (!config.revocation.revocation_endpoint || !config.agent.id) {
30
+ return { revoked: false };
31
+ }
32
+ try {
33
+ const endpoint = config.revocation.revocation_endpoint.replace("{agent_id}", config.agent.id);
34
+ const response = await fetch(endpoint, {
35
+ method: "GET",
36
+ headers: {
37
+ "Content-Type": "application/json",
38
+ },
39
+ });
40
+ if (!response.ok) {
41
+ // If endpoint is unreachable, assume not revoked
42
+ console.warn(`Revocation check failed: ${response.statusText}`);
43
+ return { revoked: false };
44
+ }
45
+ const data = (await response.json());
46
+ return data;
47
+ }
48
+ catch (error) {
49
+ // If endpoint is unreachable, assume not revoked
50
+ console.warn(`Revocation check failed: ${error}`);
51
+ return { revoked: false };
52
+ }
53
+ }
54
+ /**
55
+ * Force a fresh revocation check (ignore cache)
56
+ */
57
+ export async function forceRevocationCheck(config) {
58
+ const fullConfig = mergeGovernanceConfig(config);
59
+ if (!fullConfig.revocation.enabled) {
60
+ return { revoked: false };
61
+ }
62
+ const status = await fetchRevocationStatus(fullConfig);
63
+ cachedRevocationStatus = status;
64
+ lastRevocationCheck = Date.now();
65
+ return status;
66
+ }
67
+ /**
68
+ * Clear local secrets and caches (called when revocation detected)
69
+ */
70
+ export async function handleRevocation(config) {
71
+ console.error("\n" + "=".repeat(80));
72
+ console.error("ACCESS REVOKED");
73
+ console.error("=".repeat(80));
74
+ console.error("Your agent access has been revoked.");
75
+ console.error("All operations are blocked.");
76
+ console.error("Please contact the system administrator.");
77
+ console.error("=".repeat(80) + "\n");
78
+ // Clear local cache
79
+ cachedRevocationStatus = null;
80
+ lastRevocationCheck = 0;
81
+ // Exit process
82
+ process.exit(1);
83
+ }
84
+ /**
85
+ * Get formatted revocation status for display
86
+ */
87
+ export function formatRevocationStatus(status) {
88
+ if (!status.revoked) {
89
+ return "✓ Access active";
90
+ }
91
+ let message = "✗ Access revoked";
92
+ if (status.reason) {
93
+ message += ` - ${status.reason}`;
94
+ }
95
+ if (status.timestamp) {
96
+ message += ` (${new Date(status.timestamp).toLocaleString()})`;
97
+ }
98
+ return message;
99
+ }
100
+ //# sourceMappingURL=revocation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revocation.js","sourceRoot":"","sources":["../src/revocation.ts"],"names":[],"mappings":"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"}
package/dist/run.d.ts ADDED
@@ -0,0 +1,21 @@
1
+ export interface RunOptions {
2
+ /** Command and arguments to execute */
3
+ commandArgs: string[];
4
+ /** Project directory (defaults to cwd) */
5
+ cwd?: string;
6
+ /** Environment variable overrides (e.g., from .kit.toml) */
7
+ envOverrides?: Record<string, string>;
8
+ /** Inherit parent process environment */
9
+ inheritEnv?: boolean;
10
+ }
11
+ export interface RunResult {
12
+ exitCode: number;
13
+ stdout: string;
14
+ stderr: string;
15
+ }
16
+ /**
17
+ * Execute a command with project environment variables loaded.
18
+ * Loads .env.local and merges with optional env overrides.
19
+ * The subprocess inherits parent process env + .env.local + overrides.
20
+ */
21
+ export declare function executeCommand(opts: RunOptions): Promise<RunResult>;
package/dist/run.js ADDED
@@ -0,0 +1,80 @@
1
+ import { spawn } from "node:child_process";
2
+ import { readFile } from "node:fs/promises";
3
+ import { resolve } from "node:path";
4
+ /**
5
+ * Execute a command with project environment variables loaded.
6
+ * Loads .env.local and merges with optional env overrides.
7
+ * The subprocess inherits parent process env + .env.local + overrides.
8
+ */
9
+ export async function executeCommand(opts) {
10
+ const { commandArgs, cwd = process.cwd(), envOverrides = {}, inheritEnv = true } = opts;
11
+ if (commandArgs.length === 0) {
12
+ throw new Error("No command provided");
13
+ }
14
+ // Build environment
15
+ let env = inheritEnv ? { ...process.env } : {};
16
+ // Load .env.local if it exists
17
+ const envPath = resolve(cwd, ".env.local");
18
+ try {
19
+ const envContent = await readFile(envPath, "utf-8");
20
+ const lines = envContent.split("\n");
21
+ for (const line of lines) {
22
+ const trimmed = line.trim();
23
+ if (!trimmed || trimmed.startsWith("#"))
24
+ continue;
25
+ const eqIndex = trimmed.indexOf("=");
26
+ if (eqIndex === -1)
27
+ continue;
28
+ const key = trimmed.substring(0, eqIndex);
29
+ const value = trimmed.substring(eqIndex + 1);
30
+ env[key] = value;
31
+ }
32
+ }
33
+ catch {
34
+ // .env.local not found or unreadable — continue with existing env
35
+ }
36
+ // Apply overrides
37
+ for (const [key, value] of Object.entries(envOverrides)) {
38
+ env[key] = value;
39
+ }
40
+ // Execute the command
41
+ return new Promise((resolve) => {
42
+ const [command, ...args] = commandArgs;
43
+ const child = spawn(command, args, {
44
+ cwd,
45
+ env,
46
+ stdio: ["inherit", "pipe", "pipe"],
47
+ });
48
+ let stdout = "";
49
+ let stderr = "";
50
+ if (child.stdout) {
51
+ child.stdout.on("data", (chunk) => {
52
+ stdout += chunk.toString();
53
+ process.stdout.write(chunk);
54
+ });
55
+ }
56
+ if (child.stderr) {
57
+ child.stderr.on("data", (chunk) => {
58
+ stderr += chunk.toString();
59
+ process.stderr.write(chunk);
60
+ });
61
+ }
62
+ child.on("close", (exitCode) => {
63
+ resolve({
64
+ exitCode: exitCode ?? 1,
65
+ stdout,
66
+ stderr,
67
+ });
68
+ });
69
+ child.on("error", (err) => {
70
+ // Command not found or spawn error
71
+ console.error(`Failed to execute command: ${err.message}`);
72
+ resolve({
73
+ exitCode: 127,
74
+ stdout: "",
75
+ stderr: err.message,
76
+ });
77
+ });
78
+ });
79
+ }
80
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAgB;IACnD,MAAM,EAAE,WAAW,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,GAAG,EAAE,EAAE,UAAU,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;IAExF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzC,CAAC;IAED,oBAAoB;IACpB,IAAI,GAAG,GAA2B,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,GAA6B,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAEjG,+BAA+B;IAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YAElD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,OAAO,KAAK,CAAC,CAAC;gBAAE,SAAS;YAE7B,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;YAC7C,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACnB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,kEAAkE;IACpE,CAAC;IAED,kBAAkB;IAClB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACnB,CAAC;IAED,sBAAsB;IACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,WAAW,CAAC;QACvC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;YACjC,GAAG;YACH,GAAG;YACH,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC;SACnC,CAAC,CAAC;QAEH,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBAChC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBAChC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE;YAC7B,OAAO,CAAC;gBACN,QAAQ,EAAE,QAAQ,IAAI,CAAC;gBACvB,MAAM;gBACN,MAAM;aACP,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,mCAAmC;YACnC,OAAO,CAAC,KAAK,CAAC,8BAA8B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC;gBACN,QAAQ,EAAE,GAAG;gBACb,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,GAAG,CAAC,OAAO;aACpB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}