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,81 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ /**
4
+ * Parse a .env file into a key-value record.
5
+ * Handles blank lines, comments (#), and quoted values.
6
+ */
7
+ export function parseEnvFile(content) {
8
+ const result = {};
9
+ for (const line of content.split("\n")) {
10
+ const trimmed = line.trim();
11
+ if (!trimmed || trimmed.startsWith("#"))
12
+ continue;
13
+ const eqIdx = trimmed.indexOf("=");
14
+ if (eqIdx === -1)
15
+ continue;
16
+ const key = trimmed.slice(0, eqIdx).trim();
17
+ let value = trimmed.slice(eqIdx + 1);
18
+ if ((value.startsWith('"') && value.endsWith('"')) ||
19
+ (value.startsWith("'") && value.endsWith("'"))) {
20
+ value = value.slice(1, -1);
21
+ }
22
+ result[key] = value;
23
+ }
24
+ return result;
25
+ }
26
+ /**
27
+ * Redact a secret value: show first 4 chars + ****
28
+ */
29
+ export function redactValue(value) {
30
+ if (value.length <= 4)
31
+ return "****";
32
+ return value.slice(0, 4) + "****";
33
+ }
34
+ export async function inspectEnv(config, options = {}) {
35
+ const cwd = options.cwd ?? process.cwd();
36
+ const envPath = join(cwd, ".env.local");
37
+ let envVars = {};
38
+ let envLocalExists = false;
39
+ try {
40
+ const content = await readFile(envPath, "utf-8");
41
+ envVars = parseEnvFile(content);
42
+ envLocalExists = true;
43
+ }
44
+ catch {
45
+ // .env.local doesn't exist or is unreadable
46
+ }
47
+ // Collect key names from config and from .env.local
48
+ const keyNames = new Set();
49
+ const keySource = {};
50
+ if (config.secrets?.keys) {
51
+ for (const [name, cfg] of Object.entries(config.secrets.keys)) {
52
+ keyNames.add(name);
53
+ keySource[name] = cfg.source;
54
+ }
55
+ }
56
+ for (const name of Object.keys(envVars)) {
57
+ if (!keyNames.has(name)) {
58
+ keyNames.add(name);
59
+ keySource[name] = ".env.local";
60
+ }
61
+ }
62
+ const allKeys = [...keyNames].sort();
63
+ const keys = allKeys.map((name) => {
64
+ const rawValue = envVars[name];
65
+ const set = rawValue !== undefined;
66
+ const entry = { name, set, source: keySource[name] ?? ".env.local" };
67
+ if (set) {
68
+ if (options.showValues) {
69
+ entry.value = rawValue;
70
+ }
71
+ else {
72
+ entry.redacted = redactValue(rawValue);
73
+ }
74
+ }
75
+ return entry;
76
+ });
77
+ const filteredKeys = options.missingOnly ? keys.filter((k) => !k.set) : keys;
78
+ const ok = keys.every((k) => k.set);
79
+ return { ok, keys: filteredKeys, envLocalExists };
80
+ }
81
+ //# sourceMappingURL=env-inspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-inspect.js","sourceRoot":"","sources":["../src/env-inspect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Tracks the active environment ("dev" / "staging" / "prod") on disk so the
3
+ * rest of kit can refuse to materialize prod-scoped credentials when the
4
+ * developer is sitting in `dev`. The marker lives under `.kit/` because
5
+ * `.kit.toml` is meant to be project config (checkable into git), while
6
+ * the active env is per-developer state (gitignored).
7
+ */
8
+ export type kitEnv = "dev" | "staging" | "prod";
9
+ export declare const KNOWN_ENVS: kitEnv[];
10
+ export declare const ACTIVE_ENV_FILE = ".kit/active-env.json";
11
+ export interface ActiveEnvState {
12
+ env: kitEnv;
13
+ switchedAt: string;
14
+ switchedBy: string;
15
+ }
16
+ export declare function readActiveEnv(cwd?: string): Promise<ActiveEnvState | null>;
17
+ export declare function writeActiveEnv(env: kitEnv, cwd?: string, switchedBy?: string): Promise<ActiveEnvState>;
18
+ /**
19
+ * Returns the active env if set; defaults to "dev" so a project that hasn't
20
+ * opted into env-switching yet behaves safely (no accidental prod-key reads).
21
+ */
22
+ export declare function getActiveEnv(cwd?: string): Promise<kitEnv>;
23
+ export declare function prodReadAllowed(activeEnv: kitEnv, opts?: {
24
+ explicitOk?: boolean;
25
+ cwd?: string;
26
+ }): boolean;
27
+ /**
28
+ * Test-only: reset the module-scoped "warned-once" flag so tests can
29
+ * exercise the warning path deterministically.
30
+ */
31
+ export declare function _resetProdOkWarningForTests(): void;
32
+ /**
33
+ * A key counts as prod-scoped when its `ref` / `name` / `vault_path` mentions
34
+ * a typical prod marker. Conservative — false positives just nudge the user
35
+ * to confirm; false negatives would defeat the gate.
36
+ */
37
+ export declare function looksLikeProdKey(refOrName: string | undefined): boolean;
@@ -0,0 +1,102 @@
1
+ import { readFile, writeFile, mkdir, access } from "node:fs/promises";
2
+ import { resolve, dirname } from "node:path";
3
+ import { appendAuditEventDirect } from "./audit.js";
4
+ export const KNOWN_ENVS = ["dev", "staging", "prod"];
5
+ export const ACTIVE_ENV_FILE = ".kit/active-env.json";
6
+ export async function readActiveEnv(cwd = process.cwd()) {
7
+ const path = resolve(cwd, ACTIVE_ENV_FILE);
8
+ try {
9
+ await access(path);
10
+ const text = await readFile(path, "utf-8");
11
+ const parsed = JSON.parse(text);
12
+ if (!parsed.env || !KNOWN_ENVS.includes(parsed.env)) {
13
+ return null;
14
+ }
15
+ return {
16
+ env: parsed.env,
17
+ switchedAt: parsed.switchedAt ?? new Date().toISOString(),
18
+ switchedBy: parsed.switchedBy ?? "unknown",
19
+ };
20
+ }
21
+ catch {
22
+ return null;
23
+ }
24
+ }
25
+ export async function writeActiveEnv(env, cwd = process.cwd(), switchedBy = process.env.USER || "unknown") {
26
+ const state = {
27
+ env,
28
+ switchedAt: new Date().toISOString(),
29
+ switchedBy,
30
+ };
31
+ const path = resolve(cwd, ACTIVE_ENV_FILE);
32
+ await mkdir(dirname(path), { recursive: true });
33
+ await writeFile(path, JSON.stringify(state, null, 2) + "\n", "utf-8");
34
+ return state;
35
+ }
36
+ /**
37
+ * Returns the active env if set; defaults to "dev" so a project that hasn't
38
+ * opted into env-switching yet behaves safely (no accidental prod-key reads).
39
+ */
40
+ export async function getActiveEnv(cwd = process.cwd()) {
41
+ const state = await readActiveEnv(cwd);
42
+ return state?.env ?? "dev";
43
+ }
44
+ /**
45
+ * Returns true if the caller is allowed to read prod-scoped secrets in the
46
+ * current shell. Two gates: the active env must be "prod" AND either an
47
+ * interactive confirmation has happened OR `KIT_PROD_OK=1` was set
48
+ * explicitly (suitable for CI deploy jobs).
49
+ *
50
+ * When `KIT_PROD_OK=1` authorizes the read, a one-time stderr warning is
51
+ * emitted at the call site (not at the eventual secrets-resolve step) and an
52
+ * audit event is appended. This closes the previous gap where the warning
53
+ * only printed AFTER the prod credential had already been materialized.
54
+ */
55
+ let warnedAboutProdOk = false;
56
+ function warnProdOkOnce(cwd) {
57
+ if (warnedAboutProdOk)
58
+ return;
59
+ warnedAboutProdOk = true;
60
+ console.error("[kit] WARNING: KIT_PROD_OK=1 active — prod credentials authorized for read in this process.");
61
+ void appendAuditEventDirect({
62
+ operation: "prod-key-bypass",
63
+ environment: "prod",
64
+ success: true,
65
+ metadata: {
66
+ method: "KIT_PROD_OK=1",
67
+ granter: process.env.USER ?? "unknown",
68
+ },
69
+ }, { cwd });
70
+ }
71
+ export function prodReadAllowed(activeEnv, opts = {}) {
72
+ if (activeEnv !== "prod")
73
+ return false;
74
+ if (opts.explicitOk)
75
+ return true;
76
+ if (process.env.KIT_PROD_OK === "1") {
77
+ warnProdOkOnce(opts.cwd ?? process.cwd());
78
+ return true;
79
+ }
80
+ return false;
81
+ }
82
+ /**
83
+ * Test-only: reset the module-scoped "warned-once" flag so tests can
84
+ * exercise the warning path deterministically.
85
+ */
86
+ export function _resetProdOkWarningForTests() {
87
+ warnedAboutProdOk = false;
88
+ }
89
+ /**
90
+ * A key counts as prod-scoped when its `ref` / `name` / `vault_path` mentions
91
+ * a typical prod marker. Conservative — false positives just nudge the user
92
+ * to confirm; false negatives would defeat the gate.
93
+ */
94
+ export function looksLikeProdKey(refOrName) {
95
+ if (!refOrName)
96
+ return false;
97
+ // Letter-boundary check: `\b` treats `_` as a word char (e.g. `PRD_DB`
98
+ // wouldn't match `\bPRD\b`). Use explicit letter-not-letter boundaries
99
+ // so `PRD_DB`, `stripe-live-key`, and `op://Prod/…` all trigger.
100
+ return /(?<![A-Za-z])(prod|production|live|prd)(?![A-Za-z])/i.test(refOrName);
101
+ }
102
+ //# sourceMappingURL=env-switch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-switch.js","sourceRoot":"","sources":["../src/env-switch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { GovernanceConfig, EnvironmentAccess } from "./config.js";
2
+ export type Environment = "dev" | "staging" | "prod";
3
+ export interface EnvironmentInfo {
4
+ environment: Environment;
5
+ source: "env" | "git" | "default";
6
+ access?: EnvironmentAccess;
7
+ }
8
+ /**
9
+ * Detect current environment based on:
10
+ * 1. NODE_ENV environment variable
11
+ * 2. Git branch name (main→prod, staging→staging, feature/*→dev)
12
+ * 3. Default to 'dev'
13
+ */
14
+ export declare function detectEnvironment(governance?: GovernanceConfig): EnvironmentInfo;
15
+ /**
16
+ * Check if an operation is allowed in the current environment
17
+ */
18
+ export declare function isOperationAllowed(operation: "read" | "write" | "delete", envInfo: EnvironmentInfo): boolean;
19
+ export declare function isNonInteractive(): boolean;
20
+ /**
21
+ * Test-only: reset the module-scoped warning flag.
22
+ */
23
+ export declare function _resetNonInteractiveWarningForTests(): void;
24
+ /**
25
+ * Get a human-readable description of the environment
26
+ */
27
+ export declare function formatEnvironment(envInfo: EnvironmentInfo): string;
@@ -0,0 +1,148 @@
1
+ import { execSync } from "node:child_process";
2
+ import { appendAuditEventDirect } from "./audit.js";
3
+ /**
4
+ * Detect current environment based on:
5
+ * 1. NODE_ENV environment variable
6
+ * 2. Git branch name (main→prod, staging→staging, feature/*→dev)
7
+ * 3. Default to 'dev'
8
+ */
9
+ export function detectEnvironment(governance) {
10
+ // 1. Check NODE_ENV
11
+ const nodeEnv = process.env.NODE_ENV?.toLowerCase();
12
+ if (nodeEnv === "production") {
13
+ return {
14
+ environment: "prod",
15
+ source: "env",
16
+ access: governance?.access?.prod,
17
+ };
18
+ }
19
+ if (nodeEnv === "staging") {
20
+ return {
21
+ environment: "staging",
22
+ source: "env",
23
+ access: governance?.access?.staging,
24
+ };
25
+ }
26
+ if (nodeEnv === "development" || nodeEnv === "dev") {
27
+ return {
28
+ environment: "dev",
29
+ source: "env",
30
+ access: governance?.access?.dev,
31
+ };
32
+ }
33
+ // 2. Fall back to git branch
34
+ try {
35
+ const branch = execSync("git rev-parse --abbrev-ref HEAD", {
36
+ encoding: "utf-8",
37
+ stdio: ["ignore", "pipe", "ignore"],
38
+ }).trim();
39
+ if (branch === "main" || branch === "master") {
40
+ return {
41
+ environment: "prod",
42
+ source: "git",
43
+ access: governance?.access?.prod,
44
+ };
45
+ }
46
+ if (branch === "staging") {
47
+ return {
48
+ environment: "staging",
49
+ source: "git",
50
+ access: governance?.access?.staging,
51
+ };
52
+ }
53
+ // Any other branch (feature/*, dev, etc.) → dev
54
+ return {
55
+ environment: "dev",
56
+ source: "git",
57
+ access: governance?.access?.dev,
58
+ };
59
+ }
60
+ catch {
61
+ // If git is not available or not in a git repo, default to dev
62
+ }
63
+ // 3. Default to dev
64
+ return {
65
+ environment: "dev",
66
+ source: "default",
67
+ access: governance?.access?.dev,
68
+ };
69
+ }
70
+ /**
71
+ * Check if an operation is allowed in the current environment
72
+ */
73
+ export function isOperationAllowed(operation, envInfo) {
74
+ if (!envInfo.access) {
75
+ // No access config means allow everything (for backwards compatibility)
76
+ return true;
77
+ }
78
+ switch (operation) {
79
+ case "read":
80
+ return envInfo.access.read ?? false;
81
+ case "write":
82
+ return envInfo.access.write ?? false;
83
+ case "delete":
84
+ return envInfo.access.delete ?? false;
85
+ default:
86
+ return false;
87
+ }
88
+ }
89
+ /**
90
+ * Returns true when running in a non-interactive context.
91
+ * Checks (in order):
92
+ * 1. --non-interactive flag in process.argv
93
+ * 2. KIT_NON_INTERACTIVE=1 (or =true)
94
+ * 3. CI=true (set by GitHub Actions, CircleCI, and most CI systems)
95
+ *
96
+ * When the env-var path (#2) triggers in a context where a TTY is
97
+ * available, emit a one-time stderr warning + audit event. Combined with
98
+ * `KIT_ELEVATED=1`, non-interactive mode lets destructive ops run with
99
+ * zero acknowledgement; surfacing the choice makes the bypass non-silent.
100
+ * CI=true (#3) is not warned about because that's the normal mode there.
101
+ */
102
+ let warnedAboutNonInteractive = false;
103
+ function warnNonInteractiveOnce(source) {
104
+ if (warnedAboutNonInteractive)
105
+ return;
106
+ warnedAboutNonInteractive = true;
107
+ console.error(`[kit] WARNING: non-interactive mode active (via ${source}) — all confirmation prompts will be skipped.`);
108
+ void appendAuditEventDirect({
109
+ operation: "non-interactive-mode",
110
+ environment: process.env.NODE_ENV ?? "unknown",
111
+ success: true,
112
+ metadata: { source, granter: process.env.USER ?? "unknown" },
113
+ });
114
+ }
115
+ export function isNonInteractive() {
116
+ if (process.argv.includes("--non-interactive")) {
117
+ if (process.stdout.isTTY)
118
+ warnNonInteractiveOnce("flag");
119
+ return true;
120
+ }
121
+ const flag = process.env.KIT_NON_INTERACTIVE?.toLowerCase();
122
+ if (flag === "1" || flag === "true") {
123
+ if (process.stdout.isTTY)
124
+ warnNonInteractiveOnce("env-var");
125
+ return true;
126
+ }
127
+ if (process.env.CI === "true")
128
+ return true;
129
+ return false;
130
+ }
131
+ /**
132
+ * Test-only: reset the module-scoped warning flag.
133
+ */
134
+ export function _resetNonInteractiveWarningForTests() {
135
+ warnedAboutNonInteractive = false;
136
+ }
137
+ /**
138
+ * Get a human-readable description of the environment
139
+ */
140
+ export function formatEnvironment(envInfo) {
141
+ const sourceLabel = {
142
+ env: "NODE_ENV",
143
+ git: "git branch",
144
+ default: "default",
145
+ }[envInfo.source];
146
+ return `${envInfo.environment} (from ${sourceLabel})`;
147
+ }
148
+ //# sourceMappingURL=environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.js","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ export interface ErrorLog {
2
+ id: string;
3
+ message: string;
4
+ stack: string;
5
+ severity: "critical" | "high" | "medium" | "low";
6
+ context: Record<string, unknown>;
7
+ timestamp: string;
8
+ userId?: string;
9
+ sessionId?: string;
10
+ resolved: boolean;
11
+ resolvedAt?: string;
12
+ }
13
+ export interface ErrorMetrics {
14
+ totalErrors: number;
15
+ errorsBySeverity: Record<string, number>;
16
+ errorsByType: Record<string, number>;
17
+ errorTrend: Array<{
18
+ date: string;
19
+ count: number;
20
+ }>;
21
+ topErrors: Array<{
22
+ message: string;
23
+ count: number;
24
+ }>;
25
+ }
26
+ export interface ErrorGroup {
27
+ id: string;
28
+ message: string;
29
+ firstSeen: string;
30
+ lastSeen: string;
31
+ occurrences: number;
32
+ severity: "critical" | "high" | "medium" | "low";
33
+ resolved: boolean;
34
+ }
35
+ export declare class ErrorTracker {
36
+ private errors;
37
+ private errorGroups;
38
+ private errorIndex;
39
+ /**
40
+ * Log an error.
41
+ */
42
+ logError(message: string, stack: string, severity?: "critical" | "high" | "medium" | "low", context?: Record<string, unknown>, userId?: string, sessionId?: string): ErrorLog;
43
+ /**
44
+ * Get error by ID.
45
+ */
46
+ getError(errorId: string): ErrorLog | null;
47
+ /**
48
+ * Resolve an error.
49
+ */
50
+ resolveError(errorId: string): ErrorLog | null;
51
+ /**
52
+ * Get all unresolved errors.
53
+ */
54
+ getUnresolvedErrors(): ErrorLog[];
55
+ /**
56
+ * Get errors by severity.
57
+ */
58
+ getErrorsBySeverity(severity: string): ErrorLog[];
59
+ private indexError;
60
+ private groupError;
61
+ private findGroupForError;
62
+ /**
63
+ * Get all error groups.
64
+ */
65
+ getAllErrorGroups(): ErrorGroup[];
66
+ /**
67
+ * Get errors in a group.
68
+ */
69
+ getErrorsByGroup(groupId: string): ErrorLog[];
70
+ /**
71
+ * Get error metrics.
72
+ */
73
+ getMetrics(): ErrorMetrics;
74
+ /**
75
+ * Get error rate (errors per minute).
76
+ */
77
+ getErrorRate(): number;
78
+ /**
79
+ * Get most recent errors.
80
+ */
81
+ getRecentErrors(limit?: number): ErrorLog[];
82
+ /**
83
+ * Clear old errors (older than days).
84
+ */
85
+ clearOldErrors(days: number): number;
86
+ /**
87
+ * Clear resolved errors.
88
+ */
89
+ clearResolvedErrors(): number;
90
+ getErrorCache(): Map<string, ErrorLog>;
91
+ getErrorGroupCache(): Map<string, ErrorGroup>;
92
+ }