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,78 @@
1
+ /**
2
+ * Generic baseline file for any kit check category.
3
+ *
4
+ * Pattern (copied from `.checkov.yaml`): freeze the set of currently
5
+ * acceptable warnings so future runs only fail on NET-NEW findings.
6
+ *
7
+ * One file (`.kit-baseline.json`) keyed by check category. Stale
8
+ * entries auto-prune on `kit baseline freeze` so the file shrinks
9
+ * as the codebase improves.
10
+ *
11
+ * {
12
+ * "version": 1,
13
+ * "generated": "2026-05-30T09:50:00Z",
14
+ * "categories": {
15
+ * "tests": { "untested_files": ["src/legacy.ts", ...] },
16
+ * "design": { "a11y_violations": ["btn-name", "color-contrast"] }
17
+ * }
18
+ * }
19
+ */
20
+ import { readFile, writeFile, access } from "node:fs/promises";
21
+ import { resolve } from "node:path";
22
+ export const BASELINE_FILE = ".kit-baseline.json";
23
+ const EMPTY_BASELINE = {
24
+ version: 1,
25
+ generated: new Date(0).toISOString(),
26
+ categories: {},
27
+ };
28
+ async function pathExists(p) {
29
+ try {
30
+ await access(p);
31
+ return true;
32
+ }
33
+ catch {
34
+ return false;
35
+ }
36
+ }
37
+ export async function loadBaseline(cwd = process.cwd()) {
38
+ const path = resolve(cwd, BASELINE_FILE);
39
+ if (!(await pathExists(path)))
40
+ return { ...EMPTY_BASELINE };
41
+ try {
42
+ const raw = await readFile(path, "utf-8");
43
+ const parsed = JSON.parse(raw);
44
+ if (parsed.version !== 1)
45
+ throw new Error(`unsupported baseline version: ${parsed.version}`);
46
+ return parsed;
47
+ }
48
+ catch (err) {
49
+ throw new Error(`failed to read ${BASELINE_FILE}: ${err instanceof Error ? err.message : String(err)}`);
50
+ }
51
+ }
52
+ /** Lookup baseline entries for one category + key. Returns empty array if absent. */
53
+ export function baselineGet(baseline, category, key) {
54
+ return baseline.categories[category]?.[key] ?? [];
55
+ }
56
+ /**
57
+ * Replace the entries for one category+key. Mutates `baseline`.
58
+ * Empty array drops the key. Empty category drops the category.
59
+ */
60
+ export function baselineSet(baseline, category, key, entries) {
61
+ if (entries.length === 0) {
62
+ if (baseline.categories[category]) {
63
+ delete baseline.categories[category][key];
64
+ if (Object.keys(baseline.categories[category]).length === 0) {
65
+ delete baseline.categories[category];
66
+ }
67
+ }
68
+ return;
69
+ }
70
+ baseline.categories[category] ??= {};
71
+ baseline.categories[category][key] = [...entries].sort();
72
+ }
73
+ export async function saveBaseline(baseline, cwd = process.cwd()) {
74
+ baseline.generated = new Date().toISOString();
75
+ const path = resolve(cwd, BASELINE_FILE);
76
+ await writeFile(path, JSON.stringify(baseline, null, 2) + "\n", "utf-8");
77
+ }
78
+ //# sourceMappingURL=baseline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseline.js","sourceRoot":"","sources":["../src/baseline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * kit Beta Program Service
3
+ *
4
+ * Manages community developer beta enrollment, feedback collection, and certification
5
+ * refinement based on real-world plugin usage patterns.
6
+ */
7
+ export interface BetaDeveloper {
8
+ id: string;
9
+ email: string;
10
+ name: string;
11
+ organization?: string;
12
+ enrolledAt: string;
13
+ status: "active" | "inactive" | "churned";
14
+ pluginsTested: string[];
15
+ feedbackCount: number;
16
+ lastActivityAt?: string;
17
+ }
18
+ export interface PluginFeedback {
19
+ id: string;
20
+ pluginId: string;
21
+ developerId: string;
22
+ rating: number;
23
+ category: "usability" | "stability" | "performance" | "documentation" | "feature-request" | "bug";
24
+ title: string;
25
+ description: string;
26
+ severity?: "low" | "medium" | "high" | "critical";
27
+ status: "open" | "acknowledged" | "addressed" | "wontfix";
28
+ createdAt: string;
29
+ updatedAt: string;
30
+ }
31
+ export interface CertificationRefinement {
32
+ id: string;
33
+ category: string;
34
+ description: string;
35
+ feedbackCount: number;
36
+ severity: "informational" | "warning" | "critical";
37
+ status: "proposed" | "under-review" | "approved" | "implemented";
38
+ affectedPlugins: string[];
39
+ createdAt: string;
40
+ implementedAt?: string;
41
+ }
42
+ export interface BetaProgram {
43
+ id: string;
44
+ name: string;
45
+ targetDevelopers: number;
46
+ enrolledDevelopers: number;
47
+ status: "recruiting" | "active" | "closed";
48
+ startDate: string;
49
+ endDate?: string;
50
+ feedbackItems: number;
51
+ refinementsProposed: number;
52
+ }
53
+ /**
54
+ * Beta program management service
55
+ */
56
+ export declare class BetaProgramService {
57
+ private db;
58
+ constructor(db?: any);
59
+ /**
60
+ * Enroll developer in beta program
61
+ */
62
+ enrollDeveloper(email: string, name: string, organization?: string): Promise<BetaDeveloper>;
63
+ /**
64
+ * Submit feedback on plugin
65
+ */
66
+ submitFeedback(pluginId: string, developerId: string, rating: number, category: string, title: string, description: string, severity?: string): Promise<PluginFeedback>;
67
+ /**
68
+ * Get feedback for plugin
69
+ */
70
+ getPluginFeedback(pluginId: string): Promise<PluginFeedback[]>;
71
+ /**
72
+ * Get developer feedback history
73
+ */
74
+ getDeveloperFeedback(developerId: string): Promise<PluginFeedback[]>;
75
+ /**
76
+ * Aggregate feedback to identify certification refinements
77
+ */
78
+ identifyRefinements(): Promise<CertificationRefinement[]>;
79
+ /**
80
+ * Get beta program status
81
+ */
82
+ getBetaProgramStatus(): Promise<BetaProgram>;
83
+ /**
84
+ * Get developer profile with feedback summary
85
+ */
86
+ getDeveloperProfile(developerId: string): Promise<BetaDeveloper | null>;
87
+ /**
88
+ * Get beta developers
89
+ */
90
+ getBetaDevelopers(limit?: number): Promise<BetaDeveloper[]>;
91
+ /**
92
+ * Update feedback status
93
+ */
94
+ updateFeedbackStatus(feedbackId: string, status: string): Promise<void>;
95
+ /**
96
+ * Get feedback analytics
97
+ */
98
+ getFeedbackAnalytics(): Promise<{
99
+ totalFeedback: number;
100
+ byCategory: {
101
+ category: string;
102
+ count: number;
103
+ }[];
104
+ bySeverity: {
105
+ severity: string;
106
+ count: number;
107
+ }[];
108
+ avgRating: number;
109
+ }>;
110
+ private mapBetaDeveloper;
111
+ private mapPluginFeedback;
112
+ }
@@ -0,0 +1,240 @@
1
+ /**
2
+ * kit Beta Program Service
3
+ *
4
+ * Manages community developer beta enrollment, feedback collection, and certification
5
+ * refinement based on real-world plugin usage patterns.
6
+ */
7
+ import { IdGenerators } from "./id-generator.js";
8
+ /**
9
+ * Beta program management service
10
+ */
11
+ export class BetaProgramService {
12
+ db;
13
+ constructor(db) {
14
+ this.db = db;
15
+ }
16
+ /**
17
+ * Enroll developer in beta program
18
+ */
19
+ async enrollDeveloper(email, name, organization) {
20
+ const id = IdGenerators.betaDev();
21
+ const result = await this.db.query(`
22
+ INSERT INTO beta_developers (id, email, name, organization, enrolled_at, status)
23
+ VALUES ($1, $2, $3, $4, now(), $5)
24
+ RETURNING *
25
+ `, [id, email, name, organization || null, "active"]);
26
+ return this.mapBetaDeveloper(result.rows[0]);
27
+ }
28
+ /**
29
+ * Submit feedback on plugin
30
+ */
31
+ async submitFeedback(pluginId, developerId, rating, category, title, description, severity) {
32
+ if (rating < 1 || rating > 5) {
33
+ throw new Error("Rating must be between 1 and 5");
34
+ }
35
+ const id = IdGenerators.feedback();
36
+ const result = await this.db.query(`
37
+ INSERT INTO plugin_feedback
38
+ (id, plugin_id, developer_id, rating, category, title, description, severity, status, created_at, updated_at)
39
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, now(), now())
40
+ RETURNING *
41
+ `, [id, pluginId, developerId, rating, category, title, description, severity || "medium", "open"]);
42
+ // Update developer activity
43
+ await this.db.query(`
44
+ UPDATE beta_developers
45
+ SET last_activity_at = now()
46
+ WHERE id = $1
47
+ `, [developerId]);
48
+ return this.mapPluginFeedback(result.rows[0]);
49
+ }
50
+ /**
51
+ * Get feedback for plugin
52
+ */
53
+ async getPluginFeedback(pluginId) {
54
+ const result = await this.db.query(`
55
+ SELECT * FROM plugin_feedback
56
+ WHERE plugin_id = $1
57
+ ORDER BY created_at DESC
58
+ `, [pluginId]);
59
+ return result.rows.map((row) => this.mapPluginFeedback(row));
60
+ }
61
+ /**
62
+ * Get developer feedback history
63
+ */
64
+ async getDeveloperFeedback(developerId) {
65
+ const result = await this.db.query(`
66
+ SELECT * FROM plugin_feedback
67
+ WHERE developer_id = $1
68
+ ORDER BY created_at DESC
69
+ `, [developerId]);
70
+ return result.rows.map((row) => this.mapPluginFeedback(row));
71
+ }
72
+ /**
73
+ * Aggregate feedback to identify certification refinements
74
+ */
75
+ async identifyRefinements() {
76
+ const result = await this.db.query(`
77
+ SELECT
78
+ category,
79
+ severity,
80
+ COUNT(*) as feedback_count,
81
+ ARRAY_AGG(DISTINCT plugin_id) as affected_plugins
82
+ FROM plugin_feedback
83
+ WHERE status = $1 AND severity IN ($2, $3, $4)
84
+ GROUP BY category, severity
85
+ HAVING COUNT(*) >= 3
86
+ ORDER BY feedback_count DESC
87
+ `, ["open", "medium", "high", "critical"]);
88
+ const refinements = [];
89
+ for (const row of result.rows) {
90
+ refinements.push({
91
+ id: IdGenerators.refine(),
92
+ category: row.category,
93
+ description: `${row.feedback_count} developers reported issues with ${row.category}`,
94
+ feedbackCount: row.feedback_count,
95
+ severity: row.severity,
96
+ status: "proposed",
97
+ affectedPlugins: row.affected_plugins || [],
98
+ createdAt: new Date().toISOString(),
99
+ });
100
+ }
101
+ return refinements;
102
+ }
103
+ /**
104
+ * Get beta program status
105
+ */
106
+ async getBetaProgramStatus() {
107
+ // Active program
108
+ const devResult = await this.db.query(`
109
+ SELECT COUNT(*) as enrolled FROM beta_developers WHERE status = $1
110
+ `, ["active"]);
111
+ const feedbackResult = await this.db.query(`
112
+ SELECT COUNT(*) as total FROM plugin_feedback
113
+ `);
114
+ const refinementResult = await this.db.query(`
115
+ SELECT COUNT(*) as total FROM certification_refinements WHERE status = $1
116
+ `, ["proposed"]);
117
+ return {
118
+ id: "beta-main-2026",
119
+ name: "kit Community Beta Launch",
120
+ targetDevelopers: 20,
121
+ enrolledDevelopers: devResult.rows[0]?.enrolled || 0,
122
+ status: "active",
123
+ startDate: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString(), // 1 week ago
124
+ feedbackItems: feedbackResult.rows[0]?.total || 0,
125
+ refinementsProposed: refinementResult.rows[0]?.total || 0,
126
+ };
127
+ }
128
+ /**
129
+ * Get developer profile with feedback summary
130
+ */
131
+ async getDeveloperProfile(developerId) {
132
+ const result = await this.db.query(`
133
+ SELECT
134
+ bd.*,
135
+ COUNT(DISTINCT pf.id) as feedback_count,
136
+ ARRAY_AGG(DISTINCT pf.plugin_id) as plugins_tested
137
+ FROM beta_developers bd
138
+ LEFT JOIN plugin_feedback pf ON bd.id = pf.developer_id
139
+ WHERE bd.id = $1
140
+ GROUP BY bd.id
141
+ `, [developerId]);
142
+ if (result.rows.length === 0) {
143
+ return null;
144
+ }
145
+ const row = result.rows[0];
146
+ return {
147
+ id: row.id,
148
+ email: row.email,
149
+ name: row.name,
150
+ organization: row.organization,
151
+ enrolledAt: row.enrolled_at,
152
+ status: row.status,
153
+ pluginsTested: row.plugins_tested || [],
154
+ feedbackCount: row.feedback_count || 0,
155
+ lastActivityAt: row.last_activity_at,
156
+ };
157
+ }
158
+ /**
159
+ * Get beta developers
160
+ */
161
+ async getBetaDevelopers(limit = 50) {
162
+ const result = await this.db.query(`
163
+ SELECT * FROM beta_developers
164
+ WHERE status = $1
165
+ ORDER BY last_activity_at DESC
166
+ LIMIT $2
167
+ `, ["active", limit]);
168
+ return result.rows.map((row) => this.mapBetaDeveloper(row));
169
+ }
170
+ /**
171
+ * Update feedback status
172
+ */
173
+ async updateFeedbackStatus(feedbackId, status) {
174
+ await this.db.query(`
175
+ UPDATE plugin_feedback
176
+ SET status = $1, updated_at = now()
177
+ WHERE id = $2
178
+ `, [status, feedbackId]);
179
+ }
180
+ /**
181
+ * Get feedback analytics
182
+ */
183
+ async getFeedbackAnalytics() {
184
+ const totalResult = await this.db.query(`SELECT COUNT(*) as total FROM plugin_feedback`);
185
+ const categoryResult = await this.db.query(`
186
+ SELECT category, COUNT(*) as count
187
+ FROM plugin_feedback
188
+ GROUP BY category
189
+ ORDER BY count DESC
190
+ `);
191
+ const severityResult = await this.db.query(`
192
+ SELECT severity, COUNT(*) as count
193
+ FROM plugin_feedback
194
+ GROUP BY severity
195
+ ORDER BY count DESC
196
+ `);
197
+ const ratingResult = await this.db.query(`SELECT AVG(rating) as avg FROM plugin_feedback`);
198
+ return {
199
+ totalFeedback: totalResult.rows[0]?.total || 0,
200
+ byCategory: categoryResult.rows.map((row) => ({
201
+ category: row.category,
202
+ count: row.count,
203
+ })),
204
+ bySeverity: severityResult.rows.map((row) => ({
205
+ severity: row.severity,
206
+ count: row.count,
207
+ })),
208
+ avgRating: parseFloat(ratingResult.rows[0]?.avg) || 0,
209
+ };
210
+ }
211
+ mapBetaDeveloper(row) {
212
+ return {
213
+ id: row.id,
214
+ email: row.email,
215
+ name: row.name,
216
+ organization: row.organization,
217
+ enrolledAt: row.enrolled_at,
218
+ status: row.status,
219
+ pluginsTested: row.plugins_tested || [],
220
+ feedbackCount: row.feedback_count || 0,
221
+ lastActivityAt: row.last_activity_at,
222
+ };
223
+ }
224
+ mapPluginFeedback(row) {
225
+ return {
226
+ id: row.id,
227
+ pluginId: row.plugin_id,
228
+ developerId: row.developer_id,
229
+ rating: row.rating,
230
+ category: row.category,
231
+ title: row.title,
232
+ description: row.description,
233
+ severity: row.severity,
234
+ status: row.status,
235
+ createdAt: row.created_at,
236
+ updatedAt: row.updated_at,
237
+ };
238
+ }
239
+ }
240
+ //# sourceMappingURL=beta-program-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beta-program-service.js","sourceRoot":"","sources":["../src/beta-program-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { GovernanceConfig } from "./config.js";
2
+ /**
3
+ * Check if operation is within budget limits
4
+ */
5
+ export declare function checkBudgetLimits(config: GovernanceConfig | undefined, estimatedTokens?: number): Promise<{
6
+ allowed: boolean;
7
+ reason?: string;
8
+ }>;
9
+ /**
10
+ * Record token and operation usage
11
+ */
12
+ export declare function recordUsage(config: GovernanceConfig | undefined, tokensUsed: number): Promise<void>;
13
+ /**
14
+ * Get current budget status for display
15
+ */
16
+ export declare function getBudgetStatus(config: GovernanceConfig | undefined): Promise<{
17
+ tokens_used: number;
18
+ tokens_limit: number | undefined;
19
+ operations_used: number;
20
+ operations_limit: number | undefined;
21
+ }>;
22
+ /**
23
+ * Format budget status for display
24
+ */
25
+ export declare function formatBudgetStatus(status: {
26
+ tokens_used: number;
27
+ tokens_limit: number | undefined;
28
+ operations_used: number;
29
+ operations_limit: number | undefined;
30
+ }): string;
31
+ /**
32
+ * Clear budget state (for testing/development)
33
+ */
34
+ export declare function clearBudgetState(): Promise<void>;
package/dist/budget.js ADDED
@@ -0,0 +1,159 @@
1
+ import { readFile, writeFile, mkdir } from "node:fs/promises";
2
+ import { dirname, resolve } from "node:path";
3
+ import { mergeGovernanceConfig } from "./governance.js";
4
+ const BUDGET_STATE_FILE = ".kit-budget.json";
5
+ /**
6
+ * Check if operation is within budget limits
7
+ */
8
+ export async function checkBudgetLimits(config, estimatedTokens = 0) {
9
+ const fullConfig = mergeGovernanceConfig(config);
10
+ if (!fullConfig.enabled) {
11
+ return { allowed: true };
12
+ }
13
+ const state = await loadBudgetState();
14
+ // Reset counters if needed
15
+ const now = new Date();
16
+ const resetState = resetCountersIfNeeded(state, now);
17
+ // Check token limit
18
+ const tokenLimit = fullConfig.agent.max_tokens_per_day;
19
+ if (tokenLimit && resetState.tokens_today + estimatedTokens > tokenLimit) {
20
+ return {
21
+ allowed: false,
22
+ reason: `Token budget exceeded: ${resetState.tokens_today}/${tokenLimit} used today`,
23
+ };
24
+ }
25
+ // Check operation limit
26
+ const operationLimit = fullConfig.agent.max_operations_per_hour;
27
+ if (operationLimit &&
28
+ resetState.operations_this_hour >= operationLimit) {
29
+ return {
30
+ allowed: false,
31
+ reason: `Operation budget exceeded: ${resetState.operations_this_hour}/${operationLimit} operations this hour`,
32
+ };
33
+ }
34
+ return { allowed: true };
35
+ }
36
+ /**
37
+ * Record token and operation usage
38
+ */
39
+ export async function recordUsage(config, tokensUsed) {
40
+ const fullConfig = mergeGovernanceConfig(config);
41
+ if (!fullConfig.enabled) {
42
+ return;
43
+ }
44
+ const state = await loadBudgetState();
45
+ const now = new Date();
46
+ const resetState = resetCountersIfNeeded(state, now);
47
+ // Update usage
48
+ resetState.tokens_today += tokensUsed;
49
+ resetState.operations_this_hour += 1;
50
+ await saveBudgetState(resetState);
51
+ }
52
+ /**
53
+ * Load budget state from file
54
+ */
55
+ async function loadBudgetState() {
56
+ const statePath = resolve(process.cwd(), BUDGET_STATE_FILE);
57
+ try {
58
+ const content = await readFile(statePath, "utf-8");
59
+ return JSON.parse(content);
60
+ }
61
+ catch {
62
+ // No state file exists, return fresh state
63
+ const now = new Date().toISOString();
64
+ return {
65
+ tokens_today: 0,
66
+ operations_this_hour: 0,
67
+ last_token_reset: now,
68
+ last_operation_reset: now,
69
+ };
70
+ }
71
+ }
72
+ /**
73
+ * Save budget state to file
74
+ */
75
+ async function saveBudgetState(state) {
76
+ const statePath = resolve(process.cwd(), BUDGET_STATE_FILE);
77
+ try {
78
+ await mkdir(dirname(statePath), { recursive: true });
79
+ await writeFile(statePath, JSON.stringify(state, null, 2), "utf-8");
80
+ }
81
+ catch (error) {
82
+ console.error("Failed to save budget state:", error);
83
+ }
84
+ }
85
+ /**
86
+ * Reset counters if time periods have elapsed
87
+ */
88
+ function resetCountersIfNeeded(state, now) {
89
+ const newState = { ...state };
90
+ // Reset token counter at midnight
91
+ const lastTokenReset = new Date(state.last_token_reset);
92
+ const isNewDay = now.getDate() !== lastTokenReset.getDate();
93
+ if (isNewDay) {
94
+ newState.tokens_today = 0;
95
+ newState.last_token_reset = now.toISOString();
96
+ }
97
+ // Reset operation counter every hour
98
+ const lastOperationReset = new Date(state.last_operation_reset);
99
+ const elapsedHours = (now.getTime() - lastOperationReset.getTime()) / (1000 * 60 * 60);
100
+ if (elapsedHours >= 1) {
101
+ newState.operations_this_hour = 0;
102
+ newState.last_operation_reset = now.toISOString();
103
+ }
104
+ return newState;
105
+ }
106
+ /**
107
+ * Get current budget status for display
108
+ */
109
+ export async function getBudgetStatus(config) {
110
+ const fullConfig = mergeGovernanceConfig(config);
111
+ const state = await loadBudgetState();
112
+ const now = new Date();
113
+ const resetState = resetCountersIfNeeded(state, now);
114
+ return {
115
+ tokens_used: resetState.tokens_today,
116
+ tokens_limit: fullConfig.agent.max_tokens_per_day,
117
+ operations_used: resetState.operations_this_hour,
118
+ operations_limit: fullConfig.agent.max_operations_per_hour,
119
+ };
120
+ }
121
+ /**
122
+ * Format budget status for display
123
+ */
124
+ export function formatBudgetStatus(status) {
125
+ const lines = [];
126
+ lines.push("Budget Status");
127
+ lines.push("─".repeat(50));
128
+ if (status.tokens_limit) {
129
+ const tokenPercent = ((status.tokens_used / status.tokens_limit) *
130
+ 100).toFixed(1);
131
+ lines.push(`Tokens: ${status.tokens_used.toLocaleString()}/${status.tokens_limit.toLocaleString()} (${tokenPercent}%)`);
132
+ }
133
+ else {
134
+ lines.push(`Tokens: ${status.tokens_used.toLocaleString()} (no limit)`);
135
+ }
136
+ if (status.operations_limit) {
137
+ const opPercent = ((status.operations_used / status.operations_limit) *
138
+ 100).toFixed(1);
139
+ lines.push(`Operations: ${status.operations_used}/${status.operations_limit} (${opPercent}%)`);
140
+ }
141
+ else {
142
+ lines.push(`Operations: ${status.operations_used} (no limit)`);
143
+ }
144
+ return lines.join("\n");
145
+ }
146
+ /**
147
+ * Clear budget state (for testing/development)
148
+ */
149
+ export async function clearBudgetState() {
150
+ const statePath = resolve(process.cwd(), BUDGET_STATE_FILE);
151
+ try {
152
+ const { unlink } = await import("node:fs/promises");
153
+ await unlink(statePath);
154
+ }
155
+ catch {
156
+ // Ignore if file doesn't exist
157
+ }
158
+ }
159
+ //# sourceMappingURL=budget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budget.js","sourceRoot":"","sources":["../src/budget.ts"],"names":[],"mappings":"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"}