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,172 @@
1
+ import { mergeGovernanceConfig } from "./governance.js";
2
+ import { exec } from "./utils/exec.js";
3
+ /**
4
+ * Check if secrets are expiring or expired.
5
+ * Queries expiration metadata from secret stores and config-based hints.
6
+ */
7
+ export async function checkSecretExpiration(config, secretKeys, secretsConfig) {
8
+ const fullConfig = mergeGovernanceConfig(config);
9
+ if (!fullConfig.secrets?.check_expiration) {
10
+ return [];
11
+ }
12
+ const expirations = [];
13
+ const warnDays = fullConfig.secrets.warn_days_before_expiry || 30;
14
+ for (const key of secretKeys) {
15
+ const keyConfig = secretsConfig?.keys?.[key];
16
+ const expiration = await getSecretExpiration(key, keyConfig, secretsConfig);
17
+ if (expiration) {
18
+ const daysUntilExpiry = calculateDaysUntilExpiry(expiration);
19
+ const expired = daysUntilExpiry !== null && daysUntilExpiry < 0;
20
+ const warning = daysUntilExpiry !== null &&
21
+ daysUntilExpiry >= 0 &&
22
+ daysUntilExpiry <= warnDays;
23
+ expirations.push({
24
+ key,
25
+ expiry_date: expiration,
26
+ days_until_expiry: daysUntilExpiry ?? undefined,
27
+ expired,
28
+ warning,
29
+ });
30
+ }
31
+ }
32
+ return expirations;
33
+ }
34
+ /**
35
+ * Dispatch to the appropriate store adapter to fetch expiration metadata.
36
+ * Falls back to config-based env var hints for stores that don't support
37
+ * native expiration (Infisical, Doppler, Bitwarden, env).
38
+ */
39
+ async function getSecretExpiration(key, keyConfig, secretsConfig) {
40
+ const source = keyConfig?.source ?? secretsConfig?.store ?? "env";
41
+ switch (source) {
42
+ case "1password": {
43
+ const ref = keyConfig?.ref;
44
+ if (ref) {
45
+ const expires = await get1PasswordExpiration(ref);
46
+ if (expires !== null)
47
+ return expires;
48
+ }
49
+ // Fall back to env hint if op returns no expiry data
50
+ return getEnvExpirationHint(key);
51
+ }
52
+ case "infisical":
53
+ // Infisical does not expose native per-secret expiration via CLI.
54
+ // Rely on the operator setting the env var hint.
55
+ return getEnvExpirationHint(key);
56
+ case "doppler":
57
+ // Doppler secrets do not have per-secret expiration dates.
58
+ // Rely on the operator setting the env var hint.
59
+ return getEnvExpirationHint(key);
60
+ case "bitwarden":
61
+ // Bitwarden item expiration is not exposed via CLI secret reads.
62
+ // Rely on the operator setting the env var hint.
63
+ return getEnvExpirationHint(key);
64
+ default:
65
+ // For env, config, eas, and any unknown source use env hint only.
66
+ return getEnvExpirationHint(key);
67
+ }
68
+ }
69
+ /**
70
+ * Read a config-based expiration hint from environment variable.
71
+ *
72
+ * Convention: set `<KEY>_EXPIRES_AT=<ISO-date>` to declare expiration
73
+ * for any secret, regardless of which store it lives in. This is the
74
+ * universal fallback for stores that do not expose expiration metadata.
75
+ *
76
+ * Example: API_KEY_EXPIRES_AT=2026-12-31T00:00:00Z
77
+ */
78
+ export function getEnvExpirationHint(key) {
79
+ const envVarName = `${key.toUpperCase()}_EXPIRES_AT`;
80
+ const value = process.env[envVarName];
81
+ if (!value)
82
+ return null;
83
+ const date = new Date(value);
84
+ if (isNaN(date.getTime())) {
85
+ console.warn(`[kit] Invalid expiration date for ${key}: ${value}`);
86
+ return null;
87
+ }
88
+ return date.toISOString();
89
+ }
90
+ /**
91
+ * Fetch expiration date from a 1Password item.
92
+ *
93
+ * Parses refs in the format `op://vault/item/field` or `vault/item`.
94
+ * Calls `op item get <item> --vault <vault> --format json` and returns
95
+ * the `expires` field if present.
96
+ *
97
+ * Returns null if the item has no expiry, if op is unavailable, or if
98
+ * the ref cannot be parsed.
99
+ */
100
+ export async function get1PasswordExpiration(ref) {
101
+ try {
102
+ // Parse "op://vault/item/field" or "vault/item" or "op://vault/item"
103
+ const cleaned = ref.startsWith("op://") ? ref.slice(5) : ref;
104
+ const parts = cleaned.split("/");
105
+ if (parts.length < 2)
106
+ return null;
107
+ const [vault, item] = parts;
108
+ if (!vault || !item)
109
+ return null;
110
+ const { stdout } = await exec("op", ["item", "get", item, "--vault", vault, "--format", "json"], { timeout: 10_000 });
111
+ const data = JSON.parse(stdout);
112
+ return data.expires ?? null;
113
+ }
114
+ catch {
115
+ // op CLI not available, not signed in, or item has no expiry field
116
+ return null;
117
+ }
118
+ }
119
+ /**
120
+ * Calculate days until expiration (negative = already expired)
121
+ */
122
+ function calculateDaysUntilExpiry(expiryDate) {
123
+ try {
124
+ const expiry = new Date(expiryDate);
125
+ const now = new Date();
126
+ const diffMs = expiry.getTime() - now.getTime();
127
+ const diffDays = Math.ceil(diffMs / (1000 * 60 * 60 * 24));
128
+ return diffDays;
129
+ }
130
+ catch {
131
+ return null;
132
+ }
133
+ }
134
+ /**
135
+ * Format secret expiration warnings for display
136
+ */
137
+ export function formatSecretExpirationWarnings(expirations) {
138
+ const expired = expirations.filter((e) => e.expired);
139
+ const warning = expirations.filter((e) => e.warning);
140
+ if (expired.length === 0 && warning.length === 0) {
141
+ return "All secrets are current (no expiration warnings).";
142
+ }
143
+ const lines = [];
144
+ if (expired.length > 0) {
145
+ lines.push("⚠️ EXPIRED SECRETS:");
146
+ for (const e of expired) {
147
+ lines.push(` ✗ ${e.key} expired ${Math.abs(e.days_until_expiry || 0)} days ago`);
148
+ }
149
+ lines.push("");
150
+ }
151
+ if (warning.length > 0) {
152
+ lines.push("⚠️ EXPIRING SOON:");
153
+ for (const w of warning) {
154
+ lines.push(` ! ${w.key} expires in ${w.days_until_expiry} days`);
155
+ }
156
+ lines.push("");
157
+ }
158
+ return lines.join("\n");
159
+ }
160
+ /**
161
+ * Check if any secrets are expired (blocking check)
162
+ */
163
+ export function hasExpiredSecrets(expirations) {
164
+ return expirations.some((e) => e.expired);
165
+ }
166
+ /**
167
+ * Check if any secrets have warnings
168
+ */
169
+ export function hasSecretWarnings(expirations) {
170
+ return expirations.some((e) => e.warning);
171
+ }
172
+ //# sourceMappingURL=secret-expiration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret-expiration.js","sourceRoot":"","sources":["../src/secret-expiration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ import type { SecretsConfig } from "./config.js";
2
+ import { type PlaintextHit } from "./scan-plaintext.js";
3
+ import { type WriteResult } from "./secret-backends.js";
4
+ /**
5
+ * Conservative env-var-style identifier check.
6
+ *
7
+ * Keys from `.env*` flow straight into CLI argv (e.g. `aws secretsmanager
8
+ * create-secret --name <KEY>`). Without this guard a malicious or just
9
+ * malformed file could smuggle in `--ignore-checks` or `-i` and have the
10
+ * sink CLI reinterpret it as a flag. The shape we accept is exactly what
11
+ * env-var parsers require: leading [A-Za-z_], rest [A-Za-z0-9_].
12
+ */
13
+ export declare function isValidKeyName(key: string): boolean;
14
+ /** Escapes a string for safe embedding in a `new RegExp(...)` pattern. */
15
+ export declare function escapeRegex(literal: string): string;
16
+ export interface MigrationRecord {
17
+ key: string;
18
+ source: string;
19
+ vault: string;
20
+ written: boolean;
21
+ cleaned: boolean;
22
+ detail: string;
23
+ }
24
+ export interface MigrationPlan {
25
+ hits: PlaintextHit[];
26
+ /** Map of derived KEY-name → value as read from source file. */
27
+ keyValues: Map<string, {
28
+ value: string;
29
+ source: string;
30
+ }>;
31
+ }
32
+ export interface PlanMigrationOptions {
33
+ /** Only include keys whose VALUE matches a credential pattern. Off by default. */
34
+ secretsOnly?: boolean;
35
+ }
36
+ /**
37
+ * Builds a migration plan by re-scanning for plaintext, then extracting
38
+ * the actual VAR=VALUE pairs from .env-style files. Only KEY=VALUE lines
39
+ * are migratable; embedded credentials inside scripts or JSON need manual
40
+ * cleanup and are listed in the returned plan as `hits` only (no entry in
41
+ * keyValues).
42
+ */
43
+ export declare function planMigration(cwd?: string, opts?: PlanMigrationOptions): Promise<MigrationPlan>;
44
+ /**
45
+ * Writes a single key/value to the configured backend. Returns whether the
46
+ * write succeeded. Per-backend create-or-update semantics live in the
47
+ * {@link writeViaBackend} registry — this wrapper owns the cross-cutting
48
+ * guards: read-only refusal, key-name validation, and error redaction.
49
+ */
50
+ export declare function writeSecretToBackend(store: SecretsConfig["store"], key: string, value: string, opts?: {
51
+ vault?: string;
52
+ project?: string;
53
+ region?: string;
54
+ vaultPath?: string;
55
+ }): Promise<WriteResult>;
56
+ /**
57
+ * Post-migration treatment for a key's line in an .env-style file.
58
+ *
59
+ * "blank" — replace `KEY=value` with `KEY=` so the var name is still
60
+ * visible (devs see what's required) but the plaintext is
61
+ * gone. Default. Closes the silent-leak hole where a
62
+ * commented `# KEY=value` line still ships the secret to
63
+ * backups / agent transcripts / code review tools.
64
+ *
65
+ * "comment" — `# migrated by kit → vault: KEY=value`. Preserves the
66
+ * original value for easy rollback. Use ONLY when you
67
+ * actively need to revert; pass `mode: "comment"` explicitly.
68
+ *
69
+ * "delete" — drop the line entirely. Cleanest, but devs lose the
70
+ * required-var hint.
71
+ */
72
+ export type PostMigrateMode = "blank" | "comment" | "delete";
73
+ export declare function commentOutInFile(filePath: string, keys: string[], mode?: PostMigrateMode): Promise<{
74
+ changed: number;
75
+ }>;
@@ -0,0 +1,185 @@
1
+ import { readFile, writeFile } from "node:fs/promises";
2
+ import { resolve } from "node:path";
3
+ import { scanPlaintextSecrets } from "./scan-plaintext.js";
4
+ import { redactSecrets } from "./utils/redactSecrets.js";
5
+ import { writeViaBackend } from "./secret-backends.js";
6
+ /**
7
+ * Conservative env-var-style identifier check.
8
+ *
9
+ * Keys from `.env*` flow straight into CLI argv (e.g. `aws secretsmanager
10
+ * create-secret --name <KEY>`). Without this guard a malicious or just
11
+ * malformed file could smuggle in `--ignore-checks` or `-i` and have the
12
+ * sink CLI reinterpret it as a flag. The shape we accept is exactly what
13
+ * env-var parsers require: leading [A-Za-z_], rest [A-Za-z0-9_].
14
+ */
15
+ export function isValidKeyName(key) {
16
+ return /^[A-Za-z_][A-Za-z0-9_]*$/.test(key) && key.length <= 128;
17
+ }
18
+ /** Escapes a string for safe embedding in a `new RegExp(...)` pattern. */
19
+ export function escapeRegex(literal) {
20
+ return literal.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
21
+ }
22
+ /**
23
+ * Sanitizes the `err.message` we get from a child_process failure before
24
+ * surfacing it to the user. execFile errors include the full argv on the
25
+ * `cmd` property AND interpolate it into `err.message`, so a failed write
26
+ * leaks the secret unless we redact. We keep the first line for diagnostic
27
+ * value but strip anything matching a known secret pattern.
28
+ */
29
+ function safeErrorMessage(err, knownSecrets = []) {
30
+ let raw = err instanceof Error ? err.message.split("\n")[0] : String(err);
31
+ // Exact-substring redaction for values we hold — deterministic and
32
+ // shape-independent. Pattern redaction alone fails open for lowercase-keyed
33
+ // values, bare `--value <secret>` argv tokens, and URL-shaped secrets.
34
+ for (const s of knownSecrets) {
35
+ if (s)
36
+ raw = raw.split(s).join("[REDACTED]");
37
+ }
38
+ // Pattern redaction as defense-in-depth for secret shapes we don't hold.
39
+ return redactSecrets(raw);
40
+ }
41
+ /**
42
+ * Default .env files to scan. Mirrors the file list scan-plaintext.ts
43
+ * targets but we walk them directly here so the plan includes EVERY
44
+ * env-var-shaped KEY=VALUE pair, not only the ones whose value happens
45
+ * to match a SECRET_PATTERN. Project-level configs like
46
+ * `NEXT_PUBLIC_SUPABASE_URL`, `RESEND_FROM_EMAIL`, region/IDs etc. are
47
+ * needed by the app even though they aren't credentials; the previous
48
+ * secret-only filter dropped them and left the app non-functional after
49
+ * migration.
50
+ */
51
+ const ENV_FILES_TO_SCAN = [
52
+ ".env",
53
+ ".env.local",
54
+ ".env.development",
55
+ ".env.production",
56
+ ".env.staging",
57
+ ".env.test",
58
+ ".env.preview",
59
+ ];
60
+ /**
61
+ * Builds a migration plan by re-scanning for plaintext, then extracting
62
+ * the actual VAR=VALUE pairs from .env-style files. Only KEY=VALUE lines
63
+ * are migratable; embedded credentials inside scripts or JSON need manual
64
+ * cleanup and are listed in the returned plan as `hits` only (no entry in
65
+ * keyValues).
66
+ */
67
+ export async function planMigration(cwd = process.cwd(), opts = {}) {
68
+ const hits = await scanPlaintextSecrets(cwd);
69
+ const keyValues = new Map();
70
+ for (const file of ENV_FILES_TO_SCAN) {
71
+ let text;
72
+ try {
73
+ text = await readFile(resolve(cwd, file), "utf-8");
74
+ }
75
+ catch {
76
+ continue;
77
+ }
78
+ for (const rawLine of text.split("\n")) {
79
+ const line = rawLine.trim();
80
+ if (!line || line.startsWith("#"))
81
+ continue;
82
+ const eq = line.indexOf("=");
83
+ if (eq <= 0)
84
+ continue;
85
+ const key = line.slice(0, eq).trim();
86
+ let value = line.slice(eq + 1).trim();
87
+ // Strip simple quotes
88
+ if ((value.startsWith('"') && value.endsWith('"')) ||
89
+ (value.startsWith("'") && value.endsWith("'"))) {
90
+ value = value.slice(1, -1);
91
+ }
92
+ if (!value)
93
+ continue;
94
+ // Reject anything that isn't an env-var-shaped name — keeps `-x` /
95
+ // `--something` style identifiers out of the migration plan before
96
+ // they reach the sink CLI.
97
+ if (!isValidKeyName(key))
98
+ continue;
99
+ // Optional secrets-only filter — restores the historical behavior
100
+ // for callers that explicitly want it. Default migrates everything
101
+ // so vault becomes the single source of truth.
102
+ if (opts.secretsOnly && redactSecrets(value) === value)
103
+ continue;
104
+ keyValues.set(key, { value, source: file });
105
+ }
106
+ }
107
+ return { hits, keyValues };
108
+ }
109
+ /**
110
+ * Writes a single key/value to the configured backend. Returns whether the
111
+ * write succeeded. Per-backend create-or-update semantics live in the
112
+ * {@link writeViaBackend} registry — this wrapper owns the cross-cutting
113
+ * guards: read-only refusal, key-name validation, and error redaction.
114
+ */
115
+ export async function writeSecretToBackend(store, key, value, opts = {}) {
116
+ // Read-only mode: refuse + audit-log before any backend touches the secret.
117
+ const { isReadOnlyMode, refuseWrite } = await import("./read-only-mode.js");
118
+ if (isReadOnlyMode()) {
119
+ const refusal = await refuseWrite("write-secret-to-backend", {
120
+ store,
121
+ key,
122
+ });
123
+ return { ok: false, detail: refusal.reason };
124
+ }
125
+ // Reject anything that doesn't look like a normal env-var name BEFORE it
126
+ // becomes argv. See isValidKeyName comment for rationale.
127
+ if (!isValidKeyName(key)) {
128
+ return {
129
+ ok: false,
130
+ detail: `invalid key name "${key}" — must match ^[A-Za-z_][A-Za-z0-9_]*$`,
131
+ };
132
+ }
133
+ try {
134
+ return await writeViaBackend(String(store), key, value, opts);
135
+ }
136
+ catch (err) {
137
+ // Pass the plaintext value so a failed backend write can't leak it verbatim,
138
+ // regardless of key casing or the flag shape the CLI used.
139
+ return { ok: false, detail: `write failed: ${safeErrorMessage(err, [value])}` };
140
+ }
141
+ }
142
+ export async function commentOutInFile(filePath, keys, mode = "blank") {
143
+ let text;
144
+ try {
145
+ text = await readFile(filePath, "utf-8");
146
+ }
147
+ catch {
148
+ return { changed: 0 };
149
+ }
150
+ let changed = 0;
151
+ // Only act on env-var-shaped keys; same validation we use for writeSecretToBackend.
152
+ const validKeys = keys.filter(isValidKeyName);
153
+ const out = [];
154
+ for (const line of text.split("\n")) {
155
+ let matched = false;
156
+ for (const key of validKeys) {
157
+ // Key is regex-safe after isValidKeyName, but escape defensively in
158
+ // case the validator is ever relaxed.
159
+ const re = new RegExp(`^(\\s*)${escapeRegex(key)}\\s*=`);
160
+ if (re.test(line)) {
161
+ matched = true;
162
+ changed++;
163
+ if (mode === "delete") {
164
+ // Skip the line entirely.
165
+ }
166
+ else if (mode === "comment") {
167
+ out.push(`# migrated by kit → vault: ${line.replace(/^\s+/, "")}`);
168
+ }
169
+ else {
170
+ // "blank" — keep KEY=, drop value. Preserve leading whitespace.
171
+ const prefix = line.match(/^\s*/)?.[0] ?? "";
172
+ out.push(`${prefix}${key}= # value migrated to vault`);
173
+ }
174
+ break;
175
+ }
176
+ }
177
+ if (!matched)
178
+ out.push(line);
179
+ }
180
+ if (changed > 0) {
181
+ await writeFile(filePath, out.join("\n"), "utf-8");
182
+ }
183
+ return { changed };
184
+ }
185
+ //# sourceMappingURL=secrets-migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets-migrate.js","sourceRoot":"","sources":["../src/secrets-migrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Secrets Management System — data models
3
+ * Encrypted storage, key rotation, secret sharing, audit trails
4
+ */
5
+ export type SecretType = "api_key" | "password" | "oauth_token" | "database_url" | "ssh_key" | "certificate" | "custom";
6
+ export type RotationPolicy = "never" | "30d" | "60d" | "90d" | "manual";
7
+ export type AccessLevel = "owner" | "admin" | "team" | "shared";
8
+ export interface Secret {
9
+ id: string;
10
+ team_id: string;
11
+ name: string;
12
+ description?: string;
13
+ type: SecretType;
14
+ encrypted_value: string;
15
+ encryption_key_id: string;
16
+ access_level: AccessLevel;
17
+ created_by: string;
18
+ created_at: string;
19
+ updated_at: string;
20
+ expires_at?: string;
21
+ rotation_policy: RotationPolicy;
22
+ last_rotated_at?: string;
23
+ next_rotation_at?: string;
24
+ tags?: string[];
25
+ }
26
+ export interface EncryptionKey {
27
+ id: string;
28
+ team_id: string;
29
+ key_version: number;
30
+ algorithm: "aes-256-gcm" | "aes-256-cbc";
31
+ created_at: string;
32
+ rotated_at?: string;
33
+ retired_at?: string;
34
+ status: "active" | "retired";
35
+ }
36
+ export interface SecretShare {
37
+ id: string;
38
+ secret_id: string;
39
+ team_id: string;
40
+ shared_by: string;
41
+ shared_with_user_id?: string;
42
+ shared_with_team_id?: string;
43
+ access_expires_at?: string;
44
+ one_time: boolean;
45
+ accessed_at?: string;
46
+ created_at: string;
47
+ }
48
+ export interface SecretAccessLog {
49
+ id: string;
50
+ secret_id: string;
51
+ team_id: string;
52
+ user_id: string;
53
+ action: "read" | "created" | "rotated" | "shared" | "revoked" | "deleted";
54
+ ip_address?: string;
55
+ user_agent?: string;
56
+ status: "success" | "denied";
57
+ reason?: string;
58
+ timestamp: string;
59
+ }
60
+ export interface RotationHistory {
61
+ id: string;
62
+ secret_id: string;
63
+ team_id: string;
64
+ rotated_by: string;
65
+ old_key_id: string;
66
+ new_key_id: string;
67
+ rotated_at: string;
68
+ reason: "scheduled" | "manual" | "compromised";
69
+ }
70
+ export interface VaultMetrics {
71
+ total_secrets: number;
72
+ secrets_by_type: Record<SecretType, number>;
73
+ expiring_soon: number;
74
+ pending_rotation: number;
75
+ total_shares: number;
76
+ active_keys: number;
77
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Secrets Management System — data models
3
+ * Encrypted storage, key rotation, secret sharing, audit trails
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=secrets-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets-model.js","sourceRoot":"","sources":["../src/secrets-model.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * OneCLI integration (https://github.com/onecli/onecli).
3
+ *
4
+ * OneCLI is a local HTTP gateway that intercepts outbound agent requests and
5
+ * injects credentials. Agents see a placeholder; the gateway swaps it for the
6
+ * real value at egress. This module lets `kit secrets` register entries
7
+ * with OneCLI directly, so the real credential lives in OneCLI's encrypted
8
+ * store and never reaches the agent process.
9
+ *
10
+ * Auth: API key in `ONECLI_API_KEY` (Bearer oc_*) — generate from the web UI
11
+ * at http://localhost:10254/settings/api-keys before first use.
12
+ */
13
+ export interface OneCliConfig {
14
+ apiUrl: string;
15
+ gatewayUrl: string;
16
+ apiKey?: string;
17
+ }
18
+ export declare function resolveOneCliConfig(): OneCliConfig;
19
+ export interface OneCliStatus {
20
+ reachable: boolean;
21
+ authenticated: boolean;
22
+ apiUrl: string;
23
+ gatewayUrl: string;
24
+ version?: string;
25
+ error?: string;
26
+ }
27
+ export declare function checkOneCliStatus(cfg?: OneCliConfig): Promise<OneCliStatus>;
28
+ export interface RegisterSecretInput {
29
+ /** Display name in OneCLI (typically the env-var name, e.g. STRIPE_SECRET_KEY) */
30
+ name: string;
31
+ /** The real credential value to store encrypted */
32
+ value: string;
33
+ /** Hostname pattern (no scheme, no path) — e.g. "api.stripe.com" */
34
+ hostPattern: string;
35
+ /** Optional path pattern (e.g. "/v1/*") */
36
+ pathPattern?: string;
37
+ /**
38
+ * Where to inject the value. Default mirrors most APIs:
39
+ * `{ headerName: "Authorization", valueFormat: "Bearer {value}" }`.
40
+ * Pass null to use OneCLI's automatic detection.
41
+ */
42
+ injectionConfig?: {
43
+ headerName: string;
44
+ valueFormat?: string;
45
+ } | null;
46
+ }
47
+ export interface RegisterSecretResult {
48
+ id: string;
49
+ name: string;
50
+ }
51
+ /**
52
+ * Registers a secret with OneCLI. Returns the created secret's id.
53
+ *
54
+ * Caller is responsible for writing a placeholder to `.env.local` separately —
55
+ * OneCLI doesn't generate or return one, since the gateway matches by host
56
+ * pattern, not by placeholder value.
57
+ */
58
+ export declare function registerSecretInOneCli(input: RegisterSecretInput, cfg?: OneCliConfig): Promise<RegisterSecretResult>;
59
+ /**
60
+ * Generates a placeholder value to write into `.env.local`. The actual value
61
+ * is irrelevant to OneCLI — the gateway matches by host pattern — but a
62
+ * recognizable prefix (`PCLI_`) helps grep/audit tooling identify which
63
+ * env vars are gateway-routed.
64
+ */
65
+ export declare function generatePlaceholder(): string;