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,140 @@
1
+ import { exec } from "./utils/exec.js";
2
+ /**
3
+ * Check if 1Password CLI (op) is installed and authenticated
4
+ */
5
+ export async function check1PasswordStatus() {
6
+ try {
7
+ // Test if op CLI is available
8
+ const { stdout: versionOutput } = await exec("op", ["--version"], {
9
+ timeout: 5000,
10
+ });
11
+ if (!versionOutput) {
12
+ return {
13
+ installed: false,
14
+ authenticated: false,
15
+ error: "op CLI returned no version information",
16
+ };
17
+ }
18
+ // Test if user is authenticated
19
+ try {
20
+ await exec("op", ["whoami"], { timeout: 5000 });
21
+ return {
22
+ installed: true,
23
+ authenticated: true,
24
+ };
25
+ }
26
+ catch {
27
+ return {
28
+ installed: true,
29
+ authenticated: false,
30
+ error: "op CLI is installed but you are not signed in. Run 'op signin' to authenticate.",
31
+ };
32
+ }
33
+ }
34
+ catch {
35
+ return {
36
+ installed: false,
37
+ authenticated: false,
38
+ error: "op CLI not found. Install 1Password CLI: https://developer.1password.com/docs/cli/get-started/",
39
+ };
40
+ }
41
+ }
42
+ /**
43
+ * Lists configured 1Password accounts (`op account list`). Returns [] if op
44
+ * is missing, no account has been added yet, or the call fails. Used to
45
+ * distinguish "user has no account configured" from "user signed out" —
46
+ * the two need different remediation paths.
47
+ */
48
+ export async function list1PasswordAccounts() {
49
+ try {
50
+ const { stdout } = await exec("op", ["account", "list", "--format=json"], {
51
+ timeout: 5000,
52
+ });
53
+ if (!stdout.trim())
54
+ return [];
55
+ return JSON.parse(stdout);
56
+ }
57
+ catch {
58
+ return [];
59
+ }
60
+ }
61
+ export async function detect1PasswordMode() {
62
+ if (process.env.OP_SERVICE_ACCOUNT_TOKEN) {
63
+ return {
64
+ mode: "service-account",
65
+ hint: "OP_SERVICE_ACCOUNT_TOKEN is set — using headless mode.",
66
+ };
67
+ }
68
+ const status = await check1PasswordStatus();
69
+ if (!status.installed) {
70
+ return {
71
+ mode: "not-installed",
72
+ hint: "Install: https://developer.1password.com/docs/cli/get-started/",
73
+ };
74
+ }
75
+ const accounts = await list1PasswordAccounts();
76
+ if (accounts.length === 0) {
77
+ return {
78
+ mode: "no-account",
79
+ hint: "Run 'op account add' first (one-time), then re-run kit.",
80
+ };
81
+ }
82
+ if (status.authenticated) {
83
+ return {
84
+ mode: "desktop-integration",
85
+ hint: "Authenticated via desktop app or active OP_SESSION.",
86
+ };
87
+ }
88
+ return {
89
+ mode: "eval-signin",
90
+ hint: "Either enable 1Password 8 → Developer → 'Connect with CLI' for biometric, " +
91
+ "or run `eval $(op signin)` in your shell before re-running kit.",
92
+ };
93
+ }
94
+ /**
95
+ * List available 1Password vaults
96
+ */
97
+ export async function list1PasswordVaults() {
98
+ try {
99
+ const { stdout } = await exec("op", ["vault", "list", "--format=json"], {
100
+ timeout: 10000,
101
+ });
102
+ const vaults = JSON.parse(stdout);
103
+ return vaults;
104
+ }
105
+ catch {
106
+ return [];
107
+ }
108
+ }
109
+ /**
110
+ * List items in a specific vault
111
+ */
112
+ export async function list1PasswordItems(vaultId) {
113
+ try {
114
+ const { stdout } = await exec("op", ["item", "list", "--vault", vaultId, "--format=json"], { timeout: 10000 });
115
+ const items = JSON.parse(stdout);
116
+ return items;
117
+ }
118
+ catch {
119
+ return [];
120
+ }
121
+ }
122
+ /**
123
+ * Generate a reference string for a 1Password item
124
+ * Helps users construct proper ref strings for config
125
+ */
126
+ export function generate1PasswordRef(vault, item, field) {
127
+ if (field) {
128
+ return `op://${vault}/${item}/${field}`;
129
+ }
130
+ return `op://${vault}/${item}`;
131
+ }
132
+ /**
133
+ * Validate a 1Password reference string format
134
+ */
135
+ export function validate1PasswordRef(ref) {
136
+ // ref should be op://vault/item or op://vault/item/field
137
+ const pattern = /^op:\/\/[^\/]+\/[^\/]+(\/.+)?$/;
138
+ return pattern.test(ref);
139
+ }
140
+ //# sourceMappingURL=onepassword.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onepassword.js","sourceRoot":"","sources":["../src/onepassword.ts"],"names":[],"mappings":"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"}
package/dist/open.d.ts ADDED
@@ -0,0 +1,30 @@
1
+ export interface ServiceDashboard {
2
+ name: string;
3
+ label: string;
4
+ docUrl: string;
5
+ dashboardUrl: (env: Record<string, string>) => string | null;
6
+ }
7
+ export declare function listServices(): ServiceDashboard[];
8
+ export declare function findService(name: string): ServiceDashboard | undefined;
9
+ /**
10
+ * Get the dashboard URL for a service.
11
+ * Returns null if no URL is available.
12
+ */
13
+ export declare function getServiceUrl(name: string, env: Record<string, string>): string | null;
14
+ /**
15
+ * Open a URL in the default browser.
16
+ * Falls back to printing the URL if opening fails.
17
+ */
18
+ export declare function openInBrowser(url: string): Promise<{
19
+ success: boolean;
20
+ message: string;
21
+ }>;
22
+ /**
23
+ * Open a service dashboard or documentation.
24
+ * If url is "docs", opens documentation instead of dashboard.
25
+ */
26
+ export declare function openService(serviceName: string, env: Record<string, string>, preferDocs?: boolean): Promise<{
27
+ success: boolean;
28
+ message: string;
29
+ url: string;
30
+ }>;
package/dist/open.js ADDED
@@ -0,0 +1,166 @@
1
+ import { spawn } from "node:child_process";
2
+ import { platform } from "node:os";
3
+ /** Known service dashboard mappings */
4
+ const SERVICES = [
5
+ {
6
+ name: "stripe",
7
+ label: "Stripe Dashboard",
8
+ docUrl: "https://stripe.com/docs",
9
+ dashboardUrl: () => "https://dashboard.stripe.com",
10
+ },
11
+ {
12
+ name: "supabase",
13
+ label: "Supabase Studio",
14
+ docUrl: "https://supabase.com/docs",
15
+ dashboardUrl: (env) => {
16
+ const ref = env.SUPABASE_PROJECT_REF;
17
+ return ref ? `https://supabase.com/dashboard/project/${ref}` : "https://supabase.com/dashboard";
18
+ },
19
+ },
20
+ {
21
+ name: "vercel",
22
+ label: "Vercel Dashboard",
23
+ docUrl: "https://vercel.com/docs",
24
+ dashboardUrl: () => "https://vercel.com/dashboard",
25
+ },
26
+ {
27
+ name: "railway",
28
+ label: "Railway Dashboard",
29
+ docUrl: "https://docs.railway.app",
30
+ dashboardUrl: () => "https://railway.app/dashboard",
31
+ },
32
+ {
33
+ name: "sentry",
34
+ label: "Sentry Dashboard",
35
+ docUrl: "https://docs.sentry.io",
36
+ dashboardUrl: () => "https://sentry.io",
37
+ },
38
+ {
39
+ name: "posthog",
40
+ label: "PostHog Dashboard",
41
+ docUrl: "https://posthog.com/docs",
42
+ dashboardUrl: () => "https://app.posthog.com",
43
+ },
44
+ {
45
+ name: "neon",
46
+ label: "Neon Postgres Console",
47
+ docUrl: "https://neon.tech/docs",
48
+ dashboardUrl: () => "https://console.neon.tech",
49
+ },
50
+ {
51
+ name: "github",
52
+ label: "GitHub",
53
+ docUrl: "https://docs.github.com",
54
+ dashboardUrl: () => "https://github.com",
55
+ },
56
+ {
57
+ name: "aws",
58
+ label: "AWS Console",
59
+ docUrl: "https://docs.aws.amazon.com",
60
+ dashboardUrl: () => "https://console.aws.amazon.com",
61
+ },
62
+ {
63
+ name: "gcp",
64
+ label: "Google Cloud Console",
65
+ docUrl: "https://cloud.google.com/docs",
66
+ dashboardUrl: () => "https://console.cloud.google.com",
67
+ },
68
+ {
69
+ name: "azure",
70
+ label: "Azure Portal",
71
+ docUrl: "https://docs.microsoft.com/azure",
72
+ dashboardUrl: () => "https://portal.azure.com",
73
+ },
74
+ {
75
+ name: "docs",
76
+ label: "kit Documentation",
77
+ docUrl: "https://github.com/sandstream/kit",
78
+ dashboardUrl: () => "https://github.com/sandstream/kit",
79
+ },
80
+ ];
81
+ export function listServices() {
82
+ return SERVICES;
83
+ }
84
+ export function findService(name) {
85
+ return SERVICES.find((s) => s.name.toLowerCase() === name.toLowerCase());
86
+ }
87
+ /**
88
+ * Get the dashboard URL for a service.
89
+ * Returns null if no URL is available.
90
+ */
91
+ export function getServiceUrl(name, env) {
92
+ const service = findService(name);
93
+ if (!service)
94
+ return null;
95
+ return service.dashboardUrl(env);
96
+ }
97
+ /**
98
+ * Open a URL in the default browser.
99
+ * Falls back to printing the URL if opening fails.
100
+ */
101
+ export async function openInBrowser(url) {
102
+ // Determine the open command based on platform
103
+ const cmd = platform() === "darwin" ? "open" : platform() === "win32" ? "start" : "xdg-open";
104
+ return new Promise((resolve) => {
105
+ const child = spawn(cmd, [url], { stdio: "pipe" });
106
+ let timeout;
107
+ // Set a timeout to consider it successful if no error within 100ms
108
+ timeout = setTimeout(() => {
109
+ resolve({
110
+ success: true,
111
+ message: `Opened in browser: ${url}`,
112
+ });
113
+ }, 100);
114
+ child.on("error", () => {
115
+ clearTimeout(timeout);
116
+ resolve({
117
+ success: false,
118
+ message: `Could not open in browser. Visit: ${url}`,
119
+ });
120
+ });
121
+ child.on("close", (code) => {
122
+ clearTimeout(timeout);
123
+ if (code === 0) {
124
+ resolve({
125
+ success: true,
126
+ message: `Opened in browser: ${url}`,
127
+ });
128
+ }
129
+ else {
130
+ resolve({
131
+ success: false,
132
+ message: `Could not open in browser. Visit: ${url}`,
133
+ });
134
+ }
135
+ });
136
+ });
137
+ }
138
+ /**
139
+ * Open a service dashboard or documentation.
140
+ * If url is "docs", opens documentation instead of dashboard.
141
+ */
142
+ export async function openService(serviceName, env, preferDocs = false) {
143
+ const service = findService(serviceName);
144
+ if (!service) {
145
+ return {
146
+ success: false,
147
+ message: `Unknown service: ${serviceName}`,
148
+ url: "",
149
+ };
150
+ }
151
+ const urlToOpen = preferDocs ? service.docUrl : getServiceUrl(serviceName, env);
152
+ if (!urlToOpen) {
153
+ return {
154
+ success: false,
155
+ message: `No URL available for ${service.label}`,
156
+ url: "",
157
+ };
158
+ }
159
+ const result = await openInBrowser(urlToOpen);
160
+ return {
161
+ success: result.success,
162
+ message: result.message,
163
+ url: urlToOpen,
164
+ };
165
+ }
166
+ //# sourceMappingURL=open.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open.js","sourceRoot":"","sources":["../src/open.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { ToolStatus } from "./check-tools.js";
2
+ import type { ServiceStatus } from "./check-services.js";
3
+ import type { SecretStatus } from "./check-secrets.js";
4
+ import type { SkillCheckResult } from "./check-skills.js";
5
+ import type { SecurityCheckResult } from "./check-security.js";
6
+ import type { LockCheckResult } from "./check-lock.js";
7
+ import type { WebSearchStatus } from "./check-web-search.js";
8
+ /** Section header for a group of live steps (e.g. "Checks"). */
9
+ export declare function stepHeader(title: string): void;
10
+ /** Human-readable duration: sub-second in ms, otherwise one-decimal seconds. */
11
+ export declare function fmtDuration(ms: number): string;
12
+ /**
13
+ * Run a labeled async step with live terminal feedback + timing.
14
+ *
15
+ * On a TTY: prints a "running" line, then rewrites it in place to ✓/✗ with the
16
+ * elapsed time. On a pipe/CI (non-TTY): prints a start line and a separate end
17
+ * line (no cursor rewrite, so logs stay readable). Returns the fn's result; on
18
+ * throw, marks the step ✗ and re-throws so callers keep their control flow.
19
+ *
20
+ * Shares its visual language (▶ / ✓ / ✗ + step duration) with the shell
21
+ * pre-commit hook generated in hooks.ts.
22
+ */
23
+ export declare function runStep<T>(label: string, fn: () => Promise<T> | T): Promise<T>;
24
+ export declare function printToolsTable(tools: ToolStatus[]): void;
25
+ export declare function printServicesTable(services: ServiceStatus[]): void;
26
+ export declare function printSecretsTable(templateExists: boolean | null, secrets: SecretStatus[]): void;
27
+ export declare function printSkillsTable(skills: SkillCheckResult[]): void;
28
+ export declare function printWebSearchStatus(status: WebSearchStatus | null): void;
29
+ export declare function printSecurityTable(results: SecurityCheckResult[]): void;
30
+ export declare function printLockTable(results: LockCheckResult[]): void;
31
+ export declare function printAuditTable(events: import("./audit.js").AuditEvent[]): void;
32
+ export declare function printSummary(tools: ToolStatus[], services: ServiceStatus[], secrets: SecretStatus[], security?: SecurityCheckResult[]): void;
package/dist/output.js ADDED
@@ -0,0 +1,295 @@
1
+ // ANSI color codes
2
+ const c = {
3
+ reset: "\x1b[0m",
4
+ bold: "\x1b[1m",
5
+ dim: "\x1b[2m",
6
+ green: "\x1b[32m",
7
+ red: "\x1b[31m",
8
+ yellow: "\x1b[33m",
9
+ cyan: "\x1b[36m",
10
+ gray: "\x1b[90m",
11
+ };
12
+ const CHECK = `${c.green}✓${c.reset}`;
13
+ const CROSS = `${c.red}✗${c.reset}`;
14
+ const WARN = `${c.yellow}!${c.reset}`;
15
+ function pad(s, len) {
16
+ // Strip ANSI for length calculation
17
+ const stripped = s.replace(/\x1b\[[0-9;]*m/g, "");
18
+ return s + " ".repeat(Math.max(0, len - stripped.length));
19
+ }
20
+ function header(title) {
21
+ console.log();
22
+ console.log(`${c.bold}${c.cyan}${title}${c.reset}`);
23
+ console.log(`${c.dim}${"─".repeat(50)}${c.reset}`);
24
+ }
25
+ /** Section header for a group of live steps (e.g. "Checks"). */
26
+ export function stepHeader(title) {
27
+ header(title);
28
+ }
29
+ /** Human-readable duration: sub-second in ms, otherwise one-decimal seconds. */
30
+ export function fmtDuration(ms) {
31
+ return ms < 1000 ? `${Math.round(ms)}ms` : `${(ms / 1000).toFixed(1)}s`;
32
+ }
33
+ /**
34
+ * Run a labeled async step with live terminal feedback + timing.
35
+ *
36
+ * On a TTY: prints a "running" line, then rewrites it in place to ✓/✗ with the
37
+ * elapsed time. On a pipe/CI (non-TTY): prints a start line and a separate end
38
+ * line (no cursor rewrite, so logs stay readable). Returns the fn's result; on
39
+ * throw, marks the step ✗ and re-throws so callers keep their control flow.
40
+ *
41
+ * Shares its visual language (▶ / ✓ / ✗ + step duration) with the shell
42
+ * pre-commit hook generated in hooks.ts.
43
+ */
44
+ export async function runStep(label, fn) {
45
+ const start = Date.now();
46
+ const tty = process.stdout.isTTY === true;
47
+ if (tty) {
48
+ process.stdout.write(` ${c.cyan}▶${c.reset} ${label}${c.dim}…${c.reset}`);
49
+ }
50
+ else {
51
+ console.log(` ${c.cyan}▶${c.reset} ${label}`);
52
+ }
53
+ try {
54
+ const result = await fn();
55
+ const dur = `${c.dim}${fmtDuration(Date.now() - start)}${c.reset}`;
56
+ if (tty) {
57
+ process.stdout.write(`\r\x1b[K ${CHECK} ${label} ${dur}\n`);
58
+ }
59
+ else {
60
+ console.log(` ${CHECK} ${label} ${dur}`);
61
+ }
62
+ return result;
63
+ }
64
+ catch (err) {
65
+ const dur = `${c.dim}${fmtDuration(Date.now() - start)}${c.reset}`;
66
+ if (tty) {
67
+ process.stdout.write(`\r\x1b[K ${CROSS} ${label} ${dur}\n`);
68
+ }
69
+ else {
70
+ console.log(` ${CROSS} ${label} ${dur}`);
71
+ }
72
+ throw err;
73
+ }
74
+ }
75
+ export function printToolsTable(tools) {
76
+ if (tools.length === 0)
77
+ return;
78
+ header("Tools");
79
+ const nameWidth = Math.max(12, ...tools.map((t) => t.name.length)) + 2;
80
+ for (const tool of tools) {
81
+ const icon = tool.ok ? CHECK : CROSS;
82
+ const name = pad(tool.name, nameWidth);
83
+ const version = tool.installed
84
+ ? `${c.dim}${tool.installed}${c.reset}`
85
+ : `${c.red}not installed${c.reset}`;
86
+ const required = `${c.gray}(need ${tool.required})${c.reset}`;
87
+ console.log(` ${icon} ${name} ${version} ${required}`);
88
+ }
89
+ }
90
+ export function printServicesTable(services) {
91
+ if (services.length === 0)
92
+ return;
93
+ header("Services");
94
+ const nameWidth = Math.max(12, ...services.map((s) => s.name.length)) + 2;
95
+ for (const svc of services) {
96
+ const icon = svc.authenticated ? CHECK : CROSS;
97
+ const name = pad(svc.name, nameWidth);
98
+ const status = svc.authenticated
99
+ ? `${c.green}authenticated${c.reset}`
100
+ : `${c.red}not authenticated${c.reset}`;
101
+ const detail = svc.output ? ` ${c.gray}${svc.output.substring(0, 60)}${c.reset}` : "";
102
+ console.log(` ${icon} ${name} ${status}${detail}`);
103
+ }
104
+ }
105
+ export function printSecretsTable(templateExists, secrets) {
106
+ if (secrets.length === 0 && templateExists === null)
107
+ return;
108
+ header("Secrets");
109
+ if (templateExists !== null) {
110
+ const icon = templateExists ? CHECK : CROSS;
111
+ const status = templateExists
112
+ ? `${c.green}found${c.reset}`
113
+ : `${c.red}missing${c.reset}`;
114
+ console.log(` ${icon} ${pad("template", 14)} ${status}`);
115
+ }
116
+ // When every 1Password-backed secret fails with the same auth error,
117
+ // collapse them into one banner line instead of spamming N identical rows.
118
+ const opSecrets = secrets.filter((s) => s.source === "1password");
119
+ const opUnauth = opSecrets.filter((s) => s.detail.startsWith("1Password not authenticated"));
120
+ const aggregate1pUnauth = opSecrets.length > 0 && opUnauth.length === opSecrets.length;
121
+ if (aggregate1pUnauth) {
122
+ console.log(` ${CROSS} ${c.red}1Password not authenticated${c.reset} ${c.gray}(${opUnauth.length} secret(s) blocked)${c.reset}`);
123
+ console.log(` ${c.yellow}→ run 'op signin' to authenticate${c.reset}`);
124
+ }
125
+ const renderable = aggregate1pUnauth
126
+ ? secrets.filter((s) => s.source !== "1password")
127
+ : secrets;
128
+ if (renderable.length === 0)
129
+ return;
130
+ const nameWidth = Math.max(14, ...renderable.map((s) => s.name.length)) + 2;
131
+ for (const secret of renderable) {
132
+ const icon = secret.available ? CHECK : CROSS;
133
+ const name = pad(secret.name, nameWidth);
134
+ const source = `${c.gray}[${secret.source}]${c.reset}`;
135
+ const detail = secret.available
136
+ ? `${c.green}available${c.reset}`
137
+ : `${c.red}${secret.detail}${c.reset}`;
138
+ console.log(` ${icon} ${name} ${source} ${detail}`);
139
+ }
140
+ }
141
+ export function printSkillsTable(skills) {
142
+ if (skills.length === 0)
143
+ return;
144
+ header("Skills");
145
+ const nameWidth = Math.max(12, ...skills.map((s) => s.name.length)) + 2;
146
+ for (const skill of skills) {
147
+ const icon = skill.installed ? CHECK : skill.required ? CROSS : WARN;
148
+ const name = pad(skill.name, nameWidth);
149
+ const tag = skill.required
150
+ ? `${c.gray}[required]${c.reset}`
151
+ : `${c.gray}[optional]${c.reset}`;
152
+ const status = skill.installed
153
+ ? `${c.green}installed${c.reset}`
154
+ : skill.required
155
+ ? `${c.red}missing${c.reset}`
156
+ : `${c.yellow}not installed${c.reset}`;
157
+ const version = `${c.dim}${skill.versionSpec}${c.reset}`;
158
+ console.log(` ${icon} ${name} ${tag} ${status} ${version}`);
159
+ }
160
+ }
161
+ export function printWebSearchStatus(status) {
162
+ if (!status)
163
+ return;
164
+ header("Web Search");
165
+ const icon = status.healthy ? CHECK : CROSS;
166
+ const name = pad(status.provider, 14);
167
+ const configured = status.configured ? `${c.green}configured${c.reset}` : `${c.yellow}not configured${c.reset}`;
168
+ const health = status.healthy ? `${c.green}healthy${c.reset}` : `${c.red}unhealthy${c.reset}`;
169
+ const detail = status.error ? `${c.gray}${status.error}${c.reset}` : status.url ? `${c.gray}${status.url}${c.reset}` : "";
170
+ console.log(` ${icon} ${name} ${configured} ${health}`);
171
+ if (detail) {
172
+ console.log(` ${detail}`);
173
+ }
174
+ }
175
+ export function printSecurityTable(results) {
176
+ if (results.length === 0)
177
+ return;
178
+ header("Security");
179
+ // Group by category
180
+ const byCategory = {};
181
+ for (const result of results) {
182
+ if (!byCategory[result.category]) {
183
+ byCategory[result.category] = [];
184
+ }
185
+ byCategory[result.category].push(result);
186
+ }
187
+ const categories = ["dependency", "exposure", "supply-chain", "secrets"];
188
+ for (const category of categories) {
189
+ const items = byCategory[category];
190
+ if (!items || items.length === 0)
191
+ continue;
192
+ const nameWidth = Math.max(20, ...items.map((r) => r.name.length)) + 2;
193
+ for (const result of items) {
194
+ const icon = result.status === "pass"
195
+ ? CHECK
196
+ : result.status === "fail"
197
+ ? CROSS
198
+ : result.status === "warn"
199
+ ? WARN
200
+ : `${c.dim}−${c.reset}`;
201
+ const name = pad(result.name, nameWidth);
202
+ const statusColor = result.status === "pass"
203
+ ? c.green
204
+ : result.status === "fail"
205
+ ? c.red
206
+ : result.status === "warn"
207
+ ? c.yellow
208
+ : c.dim;
209
+ const detail = `${c.gray}${result.detail}${c.reset}`;
210
+ const severity = result.severity
211
+ ? `${c.dim}[${result.severity}]${c.reset}`
212
+ : "";
213
+ console.log(` ${icon} ${name} ${statusColor}${result.status}${c.reset} ${detail} ${severity}`);
214
+ // Show affected files if available (limit to first 5)
215
+ if (result.files && result.files.length > 0) {
216
+ const filesToShow = result.files.slice(0, 5);
217
+ for (const file of filesToShow) {
218
+ console.log(` ${c.dim}• ${file}${c.reset}`);
219
+ }
220
+ if (result.files.length > 5) {
221
+ console.log(` ${c.dim}... and ${result.files.length - 5} more file(s)${c.reset}`);
222
+ }
223
+ }
224
+ // Show suggestion/remediation if available
225
+ if (result.suggestion) {
226
+ console.log(` ${c.yellow}${result.suggestion}${c.reset}`);
227
+ }
228
+ }
229
+ }
230
+ }
231
+ export function printLockTable(results) {
232
+ if (results.length === 0)
233
+ return;
234
+ header("Lock Files");
235
+ for (const result of results) {
236
+ const icon = result.inSync ? CHECK : result.exists ? WARN : CROSS;
237
+ const name = result.category === "skills-lock" ? "skills-lock.json" : "cli-lock.json";
238
+ const status = result.inSync
239
+ ? `${c.green}in sync${c.reset}`
240
+ : result.exists
241
+ ? `${c.yellow}out of sync${c.reset}`
242
+ : `${c.red}missing${c.reset}`;
243
+ const detail = `${c.gray}${result.detail}${c.reset}`;
244
+ console.log(` ${icon} ${pad(name, 20)} ${status} ${detail}`);
245
+ if (result.missing.length > 0 && result.missing.length <= 5) {
246
+ const missingList = result.missing.join(", ");
247
+ console.log(` ${c.dim}Missing: ${missingList}${c.reset}`);
248
+ }
249
+ }
250
+ }
251
+ export function printAuditTable(events) {
252
+ if (events.length === 0) {
253
+ console.log(`${c.dim}No audit log entries found.${c.reset}`);
254
+ return;
255
+ }
256
+ header("Audit Log");
257
+ const opWidth = Math.max(14, ...events.map((e) => e.operation.length)) + 2;
258
+ const envWidth = Math.max(6, ...events.map((e) => e.environment.length)) + 2;
259
+ const actorWidth = Math.max(8, ...events.map((e) => (e.agent_name ?? e.agent_id ?? "unknown").length)) + 2;
260
+ for (const event of events) {
261
+ const icon = event.success ? CHECK : CROSS;
262
+ const ts = new Date(event.timestamp).toLocaleString();
263
+ const op = pad(event.operation, opWidth);
264
+ const env = pad(`[${event.environment}]`, envWidth + 2);
265
+ const actor = pad(event.agent_name ?? event.agent_id ?? "unknown", actorWidth);
266
+ const duration = event.duration_ms != null ? `${c.dim}${event.duration_ms}ms${c.reset}` : "";
267
+ console.log(` ${icon} ${c.dim}${ts}${c.reset} ${op} ${c.gray}${env}${c.reset} ${actor} ${duration}`);
268
+ if (event.error) {
269
+ console.log(` ${c.red}Error: ${event.error}${c.reset}`);
270
+ }
271
+ }
272
+ }
273
+ export function printSummary(tools, services, secrets, security) {
274
+ console.log();
275
+ const toolsOk = tools.filter((t) => t.ok).length;
276
+ const servicesOk = services.filter((s) => s.authenticated).length;
277
+ const secretsOk = secrets.filter((s) => s.available).length;
278
+ const securityOk = security
279
+ ? security.filter((s) => s.status === "pass" || s.status === "skip").length
280
+ : 0;
281
+ const total = tools.length + services.length + secrets.length + (security?.length || 0);
282
+ const ok = toolsOk + servicesOk + secretsOk + securityOk;
283
+ const allGood = ok === total;
284
+ if (allGood) {
285
+ console.log(`${c.bold}${c.green}All ${total} checks passed ✓${c.reset}`);
286
+ }
287
+ else {
288
+ console.log(`${c.bold}${ok}/${total} checks passed${c.reset}` +
289
+ ` ${c.red}(${total - ok} issues)${c.reset}`);
290
+ console.log();
291
+ console.log(`${c.dim}Run ${c.reset}${c.bold}kit install${c.reset}${c.dim} to fix tools, ${c.reset}${c.bold}kit login${c.reset}${c.dim} to fix auth${c.reset}`);
292
+ }
293
+ console.log();
294
+ }
295
+ //# sourceMappingURL=output.js.map