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
package/dist/audit.js ADDED
@@ -0,0 +1,286 @@
1
+ import { appendFile, readFile, writeFile, rename } from "node:fs/promises";
2
+ import { resolve } from "node:path";
3
+ const PENDING_QUEUE_FILE = ".kit-audit.pending";
4
+ const MAX_PENDING_ENTRIES = 500;
5
+ const RETRY_BACKOFF_MS = [250, 1_000, 4_000];
6
+ /**
7
+ * Append an audit event directly to .kit-audit.jsonl without requiring a
8
+ * governance config to be loaded. Used by code paths that *must* log without
9
+ * the possibility of being short-circuited by missing config — primarily the
10
+ * elevation gate, the prod-key bypass, and the rate-limiter fail-open hatch.
11
+ *
12
+ * Returns true on success, false if the append failed. Callers that gate
13
+ * destructive ops on auditability should treat `false` as "do not proceed".
14
+ *
15
+ * `cwd` lets tests/hooks point at a sandbox; production callers pass nothing.
16
+ */
17
+ export async function appendAuditEventDirect(event, opts = {}) {
18
+ const auditEvent = {
19
+ timestamp: new Date().toISOString(),
20
+ ...event,
21
+ };
22
+ const logFile = opts.logFile ?? ".kit-audit.jsonl";
23
+ const logPath = resolve(opts.cwd ?? process.cwd(), logFile);
24
+ try {
25
+ await appendFile(logPath, JSON.stringify(auditEvent) + "\n", "utf-8");
26
+ return true;
27
+ }
28
+ catch (error) {
29
+ console.error(`[kit] audit-log append failed: ${error}`);
30
+ return false;
31
+ }
32
+ }
33
+ /**
34
+ * POST a single audit event to Remote with bounded exponential-backoff
35
+ * retries. Returns true on success, false if all attempts fail. The caller
36
+ * uses the boolean to decide whether to park the event in the pending queue.
37
+ */
38
+ async function postToRemoteOnce(event, companyId) {
39
+ const apiUrl = process.env.KIT_REMOTE_URL || "http://localhost:3199";
40
+ const url = `${apiUrl}/api/companies/${companyId}/audit-logs`;
41
+ for (let attempt = 0; attempt <= RETRY_BACKOFF_MS.length; attempt++) {
42
+ try {
43
+ const response = await fetch(url, {
44
+ method: "POST",
45
+ headers: { "Content-Type": "application/json" },
46
+ body: JSON.stringify(event),
47
+ signal: AbortSignal.timeout(5_000),
48
+ });
49
+ if (response.ok)
50
+ return true;
51
+ // 4xx is a permanent failure — no point retrying a malformed event.
52
+ if (response.status >= 400 && response.status < 500) {
53
+ console.error(`Remote audit-log rejected (${response.status}); not retrying.`);
54
+ return false;
55
+ }
56
+ }
57
+ catch (error) {
58
+ // Transient — fall through to backoff/retry.
59
+ if (attempt === RETRY_BACKOFF_MS.length) {
60
+ console.error(`Remote audit-log final-attempt failed: ${error instanceof Error ? error.message : error}`);
61
+ return false;
62
+ }
63
+ }
64
+ const delay = RETRY_BACKOFF_MS[attempt];
65
+ if (delay !== undefined) {
66
+ await new Promise((res) => setTimeout(res, delay));
67
+ }
68
+ }
69
+ return false;
70
+ }
71
+ /**
72
+ * Append a failed-to-send event to .kit-audit.pending so the next audit
73
+ * call can drain it. Bounded to MAX_PENDING_ENTRIES so a long outage
74
+ * doesn't grow the file without limit.
75
+ */
76
+ async function parkPendingEntry(event, companyId) {
77
+ const entry = {
78
+ event,
79
+ companyId,
80
+ parkedAt: new Date().toISOString(),
81
+ };
82
+ const queuePath = resolve(process.cwd(), PENDING_QUEUE_FILE);
83
+ try {
84
+ let existing = "";
85
+ try {
86
+ existing = await readFile(queuePath, "utf-8");
87
+ }
88
+ catch {
89
+ /* no queue yet */
90
+ }
91
+ const lines = existing.split("\n").filter((l) => l.trim().length > 0);
92
+ lines.push(JSON.stringify(entry));
93
+ // Drop oldest entries when over cap.
94
+ const trimmed = lines.slice(-MAX_PENDING_ENTRIES);
95
+ await writeFile(queuePath, trimmed.join("\n") + "\n", "utf-8");
96
+ }
97
+ catch (error) {
98
+ console.error(`Failed to park pending audit event: ${error}`);
99
+ }
100
+ }
101
+ /**
102
+ * Attempt to flush any parked events. Best-effort: events that fail again
103
+ * stay in the queue (rewritten atomically via tmp + rename so a crash
104
+ * mid-drain doesn't lose entries). Called opportunistically from
105
+ * logAuditEvent so the queue drains whenever the API is reachable.
106
+ */
107
+ async function drainPendingQueue() {
108
+ const queuePath = resolve(process.cwd(), PENDING_QUEUE_FILE);
109
+ let content = "";
110
+ try {
111
+ content = await readFile(queuePath, "utf-8");
112
+ }
113
+ catch {
114
+ return; // no queue
115
+ }
116
+ const lines = content.split("\n").filter((l) => l.trim().length > 0);
117
+ if (lines.length === 0)
118
+ return;
119
+ const remaining = [];
120
+ for (const line of lines) {
121
+ let entry;
122
+ try {
123
+ entry = JSON.parse(line);
124
+ }
125
+ catch {
126
+ // Drop malformed line.
127
+ continue;
128
+ }
129
+ const sent = await postToRemoteOnce(entry.event, entry.companyId);
130
+ if (!sent)
131
+ remaining.push(line);
132
+ }
133
+ if (remaining.length === lines.length)
134
+ return; // nothing drained, leave file as-is
135
+ const tmpPath = `${queuePath}.tmp`;
136
+ try {
137
+ await writeFile(tmpPath, remaining.length ? remaining.join("\n") + "\n" : "", "utf-8");
138
+ await rename(tmpPath, queuePath);
139
+ }
140
+ catch (error) {
141
+ console.error(`Failed to rewrite pending queue: ${error}`);
142
+ }
143
+ }
144
+ /**
145
+ * Send audit event to Remote API with retry queue. Caller is non-blocking
146
+ * — they don't await the network round-trip; the queue catches up next call.
147
+ */
148
+ async function sendToRemoteAPI(event, companyId) {
149
+ // Opportunistically drain prior failures first — if the API is up, we
150
+ // clear the backlog before adding this event.
151
+ await drainPendingQueue();
152
+ const ok = await postToRemoteOnce(event, companyId);
153
+ if (!ok) {
154
+ await parkPendingEntry(event, companyId);
155
+ }
156
+ }
157
+ /**
158
+ * Log an audit event to the configured audit log file and Remote API
159
+ */
160
+ export async function logAuditEvent(config, event, companyId) {
161
+ if (!config.audit.enabled) {
162
+ return;
163
+ }
164
+ const auditEvent = {
165
+ timestamp: new Date().toISOString(),
166
+ agent_id: config.agent.id,
167
+ agent_name: config.agent.name,
168
+ ...event,
169
+ };
170
+ // Remove secrets from metadata if include_secrets is false
171
+ if (!config.audit.include_secrets && auditEvent.metadata) {
172
+ auditEvent.metadata = sanitizeMetadata(auditEvent.metadata);
173
+ }
174
+ // Write to local JSONL file
175
+ const logLine = JSON.stringify(auditEvent) + "\n";
176
+ const logFile = config.audit.log_file || ".kit-audit.jsonl";
177
+ const logPath = resolve(process.cwd(), logFile);
178
+ try {
179
+ await appendFile(logPath, logLine, "utf-8");
180
+ }
181
+ catch (error) {
182
+ console.error(`Failed to write audit log: ${error}`);
183
+ }
184
+ // Send to Remote API only when audit.remote is explicitly enabled in
185
+ // the governance config. Default off — audit-log stays local-first per
186
+ // docs/THREAT_MODEL.md. Operators opt in by setting
187
+ // `[governance.audit].remote = true` in .kit.toml.
188
+ if (companyId && config.audit.remote === true) {
189
+ warnFirstRemotePush(companyId);
190
+ await sendToRemoteAPI(auditEvent, companyId);
191
+ }
192
+ }
193
+ /**
194
+ * Emits a one-time stderr notice when audit-log starts shipping events to a
195
+ * remote endpoint. The notice is surfacing the data-residency choice the
196
+ * operator made — silent shipping would violate the threat-model contract.
197
+ */
198
+ let warnedRemotePush = false;
199
+ function warnFirstRemotePush(companyId) {
200
+ if (warnedRemotePush)
201
+ return;
202
+ warnedRemotePush = true;
203
+ const apiUrl = process.env.KIT_REMOTE_URL || "http://localhost:3199";
204
+ console.error(`[kit] NOTICE: [governance.audit].remote=true — shipping audit events to ${apiUrl} (company ${companyId}). ` +
205
+ `Disable in .kit.toml to keep audit-log local-only.`);
206
+ }
207
+ /**
208
+ * Test-only: reset the module-scoped warning flag.
209
+ */
210
+ export function _resetRemotePushWarningForTests() {
211
+ warnedRemotePush = false;
212
+ }
213
+ /**
214
+ * Sanitize metadata to remove potential secrets
215
+ */
216
+ function sanitizeMetadata(metadata) {
217
+ const sanitized = {};
218
+ const secretKeys = [
219
+ "password",
220
+ "secret",
221
+ "token",
222
+ "key",
223
+ "api_key",
224
+ "apikey",
225
+ "auth",
226
+ "credential",
227
+ ];
228
+ for (const [key, value] of Object.entries(metadata)) {
229
+ const lowerKey = key.toLowerCase();
230
+ const isSecret = secretKeys.some((secretKey) => lowerKey.includes(secretKey));
231
+ if (isSecret) {
232
+ sanitized[key] = "[REDACTED]";
233
+ }
234
+ else if (value && typeof value === "object") {
235
+ sanitized[key] = sanitizeMetadata(value);
236
+ }
237
+ else {
238
+ sanitized[key] = value;
239
+ }
240
+ }
241
+ return sanitized;
242
+ }
243
+ /**
244
+ * Read recent audit log entries
245
+ */
246
+ export async function readAuditLog(logFile, limit = 100) {
247
+ const { readFile } = await import("node:fs/promises");
248
+ const logPath = resolve(process.cwd(), logFile);
249
+ try {
250
+ const content = await readFile(logPath, "utf-8");
251
+ const lines = content.trim().split("\n").filter((line) => line.length > 0);
252
+ // Get last N lines
253
+ const recentLines = lines.slice(-limit);
254
+ return recentLines.map((line) => JSON.parse(line));
255
+ }
256
+ catch (error) {
257
+ if (error.code === "ENOENT") {
258
+ return []; // No log file yet
259
+ }
260
+ throw error;
261
+ }
262
+ }
263
+ /**
264
+ * Format audit log for display
265
+ */
266
+ export function formatAuditLog(events) {
267
+ if (events.length === 0) {
268
+ return "No audit log entries found.";
269
+ }
270
+ const lines = [];
271
+ for (const event of events) {
272
+ const timestamp = new Date(event.timestamp).toLocaleString();
273
+ const status = event.success ? "✓" : "✗";
274
+ const duration = event.duration_ms ? ` (${event.duration_ms}ms)` : "";
275
+ const agent = event.agent_name || event.agent_id || "unknown";
276
+ lines.push(`${timestamp} ${status} ${event.operation}${duration} [${event.environment}] by ${agent}`);
277
+ if (event.error) {
278
+ lines.push(` Error: ${event.error}`);
279
+ }
280
+ if (event.metadata && Object.keys(event.metadata).length > 0) {
281
+ lines.push(` Metadata: ${JSON.stringify(event.metadata)}`);
282
+ }
283
+ }
284
+ return lines.join("\n");
285
+ }
286
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ export interface AuthorProfile {
2
+ id: string;
3
+ github_id?: string;
4
+ email: string;
5
+ name: string;
6
+ bio?: string;
7
+ website?: string;
8
+ verified_at?: string;
9
+ verified_publisher_at?: string;
10
+ profile_picture_url?: string;
11
+ created_at: string;
12
+ updated_at: string;
13
+ }
14
+ export interface PluginAnalytics {
15
+ plugin_id: string;
16
+ date: string;
17
+ downloads: number;
18
+ ratings_count: number;
19
+ avg_rating: number;
20
+ install_success_rate: number;
21
+ update_adoption_rate: number;
22
+ }
23
+ export interface ValidationCheck {
24
+ name: string;
25
+ status: "pending" | "pass" | "fail";
26
+ message?: string;
27
+ }
28
+ export interface PublishingWorkflow {
29
+ id: string;
30
+ plugin_id: string;
31
+ version: string;
32
+ status: "draft" | "validation" | "review" | "published";
33
+ validation_checks: ValidationCheck[];
34
+ created_at: string;
35
+ }
36
+ export interface Notification {
37
+ id: string;
38
+ author_id: string;
39
+ type: string;
40
+ data: Record<string, unknown>;
41
+ read_at?: string;
42
+ created_at: string;
43
+ }
44
+ export interface AnalyticsSummary {
45
+ total_downloads: number;
46
+ total_plugins: number;
47
+ avg_rating: number;
48
+ verified: boolean;
49
+ lifetime_downloads: number;
50
+ }
51
+ export interface ValidationResult {
52
+ passed: boolean;
53
+ checks: ValidationCheck[];
54
+ errors: string[];
55
+ }
56
+ export declare class AuthorDashboardManager {
57
+ private authorsCache;
58
+ private analyticsCache;
59
+ private workflowsCache;
60
+ private notificationsCache;
61
+ createAuthor(email: string, name: string, data?: Partial<AuthorProfile>): Promise<AuthorProfile>;
62
+ getAuthorProfile(authorId: string): Promise<AuthorProfile | null>;
63
+ updateAuthorProfile(authorId: string, data: Partial<AuthorProfile>): Promise<AuthorProfile | null>;
64
+ verifyAuthor(authorId: string, github_id: string): Promise<boolean>;
65
+ markPublisherVerified(authorId: string): Promise<boolean>;
66
+ recordPluginAnalytics(pluginId: string, analytics: Omit<PluginAnalytics, "plugin_id">): Promise<void>;
67
+ getPluginAnalytics(pluginId: string, from: Date, to: Date): Promise<PluginAnalytics[]>;
68
+ getAuthorAnalytics(authorId: string, from: Date, to: Date): Promise<AnalyticsSummary>;
69
+ getTotalDownloads(authorId: string): Promise<number>;
70
+ getAverageRating(authorId: string): Promise<number>;
71
+ startPublishing(authorId: string, pluginId: string, version: string): Promise<PublishingWorkflow | null>;
72
+ getPublishingWorkflow(workflowId: string): Promise<PublishingWorkflow | null>;
73
+ runValidationChecks(workflow: PublishingWorkflow): Promise<ValidationResult>;
74
+ publishVersion(workflow: PublishingWorkflow): Promise<boolean>;
75
+ addNotification(authorId: string, type: string, data: Record<string, unknown>): Promise<Notification>;
76
+ getNotifications(authorId: string): Promise<Notification[]>;
77
+ markNotificationRead(notificationId: string): Promise<boolean>;
78
+ getUnreadCount(authorId: string): Promise<number>;
79
+ setAuthorsCache(authors: AuthorProfile[]): void;
80
+ setAnalyticsCache(analytics: PluginAnalytics[]): void;
81
+ setWorkflowsCache(workflows: PublishingWorkflow[]): void;
82
+ setNotificationsCache(notifications: Notification[]): void;
83
+ getAuthorsCache(): AuthorProfile[];
84
+ }
@@ -0,0 +1,204 @@
1
+ import { randomUUID } from "crypto";
2
+ export class AuthorDashboardManager {
3
+ authorsCache = [];
4
+ analyticsCache = [];
5
+ workflowsCache = [];
6
+ notificationsCache = [];
7
+ // Author management
8
+ async createAuthor(email, name, data) {
9
+ const now = new Date().toISOString();
10
+ const author = {
11
+ id: randomUUID(),
12
+ email,
13
+ name,
14
+ created_at: now,
15
+ updated_at: now,
16
+ ...data,
17
+ };
18
+ this.authorsCache.push(author);
19
+ return author;
20
+ }
21
+ async getAuthorProfile(authorId) {
22
+ const author = this.authorsCache.find((a) => a.id === authorId);
23
+ return author || null;
24
+ }
25
+ async updateAuthorProfile(authorId, data) {
26
+ const author = this.authorsCache.find((a) => a.id === authorId);
27
+ if (!author)
28
+ return null;
29
+ const updated = {
30
+ ...author,
31
+ ...data,
32
+ updated_at: new Date().toISOString(),
33
+ id: author.id, // Preserve ID
34
+ email: author.email, // Preserve email
35
+ name: author.name, // Preserve name
36
+ created_at: author.created_at, // Preserve creation date
37
+ };
38
+ const idx = this.authorsCache.indexOf(author);
39
+ this.authorsCache[idx] = updated;
40
+ return updated;
41
+ }
42
+ async verifyAuthor(authorId, github_id) {
43
+ const author = await this.getAuthorProfile(authorId);
44
+ if (!author)
45
+ return false;
46
+ await this.updateAuthorProfile(authorId, {
47
+ github_id,
48
+ verified_at: new Date().toISOString(),
49
+ });
50
+ return true;
51
+ }
52
+ async markPublisherVerified(authorId) {
53
+ const author = await this.getAuthorProfile(authorId);
54
+ if (!author || !author.verified_at)
55
+ return false;
56
+ await this.updateAuthorProfile(authorId, {
57
+ verified_publisher_at: new Date().toISOString(),
58
+ });
59
+ return true;
60
+ }
61
+ // Analytics
62
+ async recordPluginAnalytics(pluginId, analytics) {
63
+ this.analyticsCache.push({
64
+ plugin_id: pluginId,
65
+ ...analytics,
66
+ });
67
+ }
68
+ async getPluginAnalytics(pluginId, from, to) {
69
+ const fromStr = from.toISOString().split("T")[0];
70
+ const toStr = to.toISOString().split("T")[0];
71
+ return this.analyticsCache.filter((a) => a.plugin_id === pluginId && a.date >= fromStr && a.date <= toStr);
72
+ }
73
+ async getAuthorAnalytics(authorId, from, to) {
74
+ const author = await this.getAuthorProfile(authorId);
75
+ if (!author) {
76
+ return {
77
+ total_downloads: 0,
78
+ total_plugins: 0,
79
+ avg_rating: 0,
80
+ verified: false,
81
+ lifetime_downloads: 0,
82
+ };
83
+ }
84
+ const fromStr = from.toISOString().split("T")[0];
85
+ const toStr = to.toISOString().split("T")[0];
86
+ const relevantAnalytics = this.analyticsCache.filter((a) => a.date >= fromStr && a.date <= toStr);
87
+ const totalDownloads = relevantAnalytics.reduce((sum, a) => sum + a.downloads, 0);
88
+ const avgRating = relevantAnalytics.length > 0
89
+ ? relevantAnalytics.reduce((sum, a) => sum + a.avg_rating, 0) /
90
+ relevantAnalytics.length
91
+ : 0;
92
+ return {
93
+ total_downloads: totalDownloads,
94
+ total_plugins: new Set(relevantAnalytics.map((a) => a.plugin_id)).size,
95
+ avg_rating: Math.round(avgRating * 100) / 100,
96
+ verified: !!author.verified_publisher_at,
97
+ lifetime_downloads: this.analyticsCache.reduce((sum, a) => sum + a.downloads, 0),
98
+ };
99
+ }
100
+ async getTotalDownloads(authorId) {
101
+ return this.analyticsCache.reduce((sum) => sum + 1, 0);
102
+ }
103
+ async getAverageRating(authorId) {
104
+ if (this.analyticsCache.length === 0)
105
+ return 0;
106
+ const avg = this.analyticsCache.reduce((sum, a) => sum + a.avg_rating, 0) /
107
+ this.analyticsCache.length;
108
+ return Math.round(avg * 100) / 100;
109
+ }
110
+ // Publishing workflow
111
+ async startPublishing(authorId, pluginId, version) {
112
+ const author = await this.getAuthorProfile(authorId);
113
+ if (!author)
114
+ return null;
115
+ const workflow = {
116
+ id: randomUUID(),
117
+ plugin_id: pluginId,
118
+ version,
119
+ status: "draft",
120
+ validation_checks: [],
121
+ created_at: new Date().toISOString(),
122
+ };
123
+ this.workflowsCache.push(workflow);
124
+ return workflow;
125
+ }
126
+ async getPublishingWorkflow(workflowId) {
127
+ return this.workflowsCache.find((w) => w.id === workflowId) || null;
128
+ }
129
+ async runValidationChecks(workflow) {
130
+ const checks = [
131
+ { name: "syntax-check", status: "pass" },
132
+ { name: "tests-pass", status: "pass" },
133
+ { name: "version-valid", status: "pass" },
134
+ { name: "manifest-valid", status: "pass" },
135
+ ];
136
+ const updatedWorkflow = {
137
+ ...workflow,
138
+ status: "validation",
139
+ validation_checks: checks,
140
+ };
141
+ const idx = this.workflowsCache.indexOf(workflow);
142
+ if (idx >= 0) {
143
+ this.workflowsCache[idx] = updatedWorkflow;
144
+ }
145
+ return {
146
+ passed: checks.every((c) => c.status === "pass"),
147
+ checks,
148
+ errors: [],
149
+ };
150
+ }
151
+ async publishVersion(workflow) {
152
+ const idx = this.workflowsCache.findIndex((w) => w.id === workflow.id);
153
+ if (idx >= 0) {
154
+ this.workflowsCache[idx] = {
155
+ ...this.workflowsCache[idx],
156
+ status: "published",
157
+ };
158
+ return true;
159
+ }
160
+ return false;
161
+ }
162
+ // Notifications
163
+ async addNotification(authorId, type, data) {
164
+ const notification = {
165
+ id: randomUUID(),
166
+ author_id: authorId,
167
+ type,
168
+ data,
169
+ created_at: new Date().toISOString(),
170
+ };
171
+ this.notificationsCache.push(notification);
172
+ return notification;
173
+ }
174
+ async getNotifications(authorId) {
175
+ return this.notificationsCache.filter((n) => n.author_id === authorId);
176
+ }
177
+ async markNotificationRead(notificationId) {
178
+ const notification = this.notificationsCache.find((n) => n.id === notificationId);
179
+ if (!notification)
180
+ return false;
181
+ notification.read_at = new Date().toISOString();
182
+ return true;
183
+ }
184
+ async getUnreadCount(authorId) {
185
+ return this.notificationsCache.filter((n) => n.author_id === authorId && !n.read_at).length;
186
+ }
187
+ // Cache methods for testing
188
+ setAuthorsCache(authors) {
189
+ this.authorsCache = authors;
190
+ }
191
+ setAnalyticsCache(analytics) {
192
+ this.analyticsCache = analytics;
193
+ }
194
+ setWorkflowsCache(workflows) {
195
+ this.workflowsCache = workflows;
196
+ }
197
+ setNotificationsCache(notifications) {
198
+ this.notificationsCache = notifications;
199
+ }
200
+ getAuthorsCache() {
201
+ return this.authorsCache;
202
+ }
203
+ }
204
+ //# sourceMappingURL=author-dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"author-dashboard.js","sourceRoot":"","sources":["../src/author-dashboard.ts"],"names":[],"mappings":"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"}