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,107 @@
1
+ export interface SLAObjective {
2
+ id: string;
3
+ name: string;
4
+ metric: "availability" | "latency" | "error_rate" | "throughput";
5
+ target: number;
6
+ threshold: number;
7
+ unit: string;
8
+ window: "daily" | "weekly" | "monthly";
9
+ }
10
+ export interface SLABreach {
11
+ id: string;
12
+ slaId: string;
13
+ breachTime: string;
14
+ severity: "warning" | "critical";
15
+ details: Record<string, unknown>;
16
+ resolved: boolean;
17
+ resolvedAt?: string;
18
+ }
19
+ export interface SLAStatus {
20
+ slaId: string;
21
+ name: string;
22
+ currentValue: number;
23
+ target: number;
24
+ percentageOfTarget: number;
25
+ isMet: boolean;
26
+ breachCount: number;
27
+ lastBreachTime?: string;
28
+ }
29
+ export declare class SLAMonitor {
30
+ private slas;
31
+ private breaches;
32
+ private measurements;
33
+ /**
34
+ * Create an SLA objective.
35
+ */
36
+ createSLA(name: string, metric: "availability" | "latency" | "error_rate" | "throughput", target: number, threshold: number, unit: string, window: "daily" | "weekly" | "monthly"): SLAObjective;
37
+ /**
38
+ * Get SLA by ID.
39
+ */
40
+ getSLA(slaId: string): SLAObjective | null;
41
+ /**
42
+ * Get all SLAs.
43
+ */
44
+ getAllSLAs(): SLAObjective[];
45
+ /**
46
+ * Update SLA target.
47
+ */
48
+ updateSLATarget(slaId: string, newTarget: number): SLAObjective | null;
49
+ /**
50
+ * Delete SLA.
51
+ */
52
+ deleteSLA(slaId: string): boolean;
53
+ /**
54
+ * Record measurement for SLA.
55
+ */
56
+ recordMeasurement(slaId: string, value: number): void;
57
+ /**
58
+ * Get recent measurements for SLA.
59
+ */
60
+ getMeasurements(slaId: string, limit?: number): Array<{
61
+ slaId: string;
62
+ value: number;
63
+ timestamp: string;
64
+ }>;
65
+ private checkBreach;
66
+ private recordBreach;
67
+ /**
68
+ * Get breaches for SLA.
69
+ */
70
+ getBreaches(slaId: string, unresolved?: boolean): SLABreach[];
71
+ /**
72
+ * Resolve a breach.
73
+ */
74
+ resolveBreach(breachId: string): SLABreach | null;
75
+ /**
76
+ * Get all unresolved breaches.
77
+ */
78
+ getUnresolvedBreaches(): SLABreach[];
79
+ /**
80
+ * Get current status of SLA.
81
+ */
82
+ getSLAStatus(slaId: string): SLAStatus | null;
83
+ /**
84
+ * Get status for all SLAs.
85
+ */
86
+ getAllSLAStatus(): SLAStatus[];
87
+ /**
88
+ * Calculate SLI (Service Level Indicator).
89
+ */
90
+ calculateSLI(slaId: string): number;
91
+ /**
92
+ * Generate SLA report.
93
+ */
94
+ generateReport(): {
95
+ totalSLAs: number;
96
+ metSLAs: number;
97
+ breachedSLAs: number;
98
+ sliAverage: number;
99
+ };
100
+ getSLACache(): Map<string, SLAObjective>;
101
+ getBreachCache(): Map<string, SLABreach>;
102
+ getMeasurementsCache(): Array<{
103
+ slaId: string;
104
+ value: number;
105
+ timestamp: string;
106
+ }>;
107
+ }
@@ -0,0 +1,233 @@
1
+ import { IdGenerators } from "./id-generator.js";
2
+ // ─── SLAMonitor ───────────────────────────────────────────────────────────────
3
+ export class SLAMonitor {
4
+ slas = new Map();
5
+ breaches = new Map();
6
+ measurements = [];
7
+ // ─── SLA Management ───────────────────────────────────────────────────────
8
+ /**
9
+ * Create an SLA objective.
10
+ */
11
+ createSLA(name, metric, target, threshold, unit, window) {
12
+ const id = IdGenerators.sla();
13
+ const sla = {
14
+ id,
15
+ name,
16
+ metric,
17
+ target,
18
+ threshold,
19
+ unit,
20
+ window,
21
+ };
22
+ this.slas.set(id, sla);
23
+ return sla;
24
+ }
25
+ /**
26
+ * Get SLA by ID.
27
+ */
28
+ getSLA(slaId) {
29
+ return this.slas.get(slaId) || null;
30
+ }
31
+ /**
32
+ * Get all SLAs.
33
+ */
34
+ getAllSLAs() {
35
+ return [...this.slas.values()];
36
+ }
37
+ /**
38
+ * Update SLA target.
39
+ */
40
+ updateSLATarget(slaId, newTarget) {
41
+ const sla = this.slas.get(slaId);
42
+ if (!sla)
43
+ return null;
44
+ sla.target = newTarget;
45
+ return sla;
46
+ }
47
+ /**
48
+ * Delete SLA.
49
+ */
50
+ deleteSLA(slaId) {
51
+ return this.slas.delete(slaId);
52
+ }
53
+ // ─── Measurements ────────────────────────────────────────────────────────
54
+ /**
55
+ * Record measurement for SLA.
56
+ */
57
+ recordMeasurement(slaId, value) {
58
+ const sla = this.slas.get(slaId);
59
+ if (!sla)
60
+ return;
61
+ this.measurements.push({
62
+ slaId,
63
+ value,
64
+ timestamp: new Date().toISOString(),
65
+ });
66
+ // Check if breach
67
+ this.checkBreach(sla, value);
68
+ }
69
+ /**
70
+ * Get recent measurements for SLA.
71
+ */
72
+ getMeasurements(slaId, limit = 100) {
73
+ return this.measurements
74
+ .filter((m) => m.slaId === slaId)
75
+ .slice(-limit);
76
+ }
77
+ // ─── Breach Detection ───────────────────────────────────────────────────
78
+ checkBreach(sla, value) {
79
+ let isBreached = false;
80
+ switch (sla.metric) {
81
+ case "availability":
82
+ case "throughput":
83
+ // These should be high - breach if below threshold
84
+ isBreached = value < sla.threshold;
85
+ break;
86
+ case "latency":
87
+ case "error_rate":
88
+ // These should be low - breach if above threshold
89
+ isBreached = value > sla.threshold;
90
+ break;
91
+ }
92
+ if (isBreached) {
93
+ this.recordBreach(sla, value);
94
+ }
95
+ }
96
+ recordBreach(sla, value) {
97
+ const id = IdGenerators.breach();
98
+ const severity = Math.abs(value - sla.threshold) > sla.threshold * 0.2 ? "critical" : "warning";
99
+ const breach = {
100
+ id,
101
+ slaId: sla.id,
102
+ breachTime: new Date().toISOString(),
103
+ severity,
104
+ details: {
105
+ metric: sla.metric,
106
+ value,
107
+ threshold: sla.threshold,
108
+ deviation: Math.abs(value - sla.threshold),
109
+ },
110
+ resolved: false,
111
+ };
112
+ this.breaches.set(id, breach);
113
+ }
114
+ /**
115
+ * Get breaches for SLA.
116
+ */
117
+ getBreaches(slaId, unresolved = true) {
118
+ return [...this.breaches.values()].filter((b) => b.slaId === slaId && (!unresolved || !b.resolved));
119
+ }
120
+ /**
121
+ * Resolve a breach.
122
+ */
123
+ resolveBreach(breachId) {
124
+ const breach = this.breaches.get(breachId);
125
+ if (!breach)
126
+ return null;
127
+ breach.resolved = true;
128
+ breach.resolvedAt = new Date().toISOString();
129
+ return breach;
130
+ }
131
+ /**
132
+ * Get all unresolved breaches.
133
+ */
134
+ getUnresolvedBreaches() {
135
+ return [...this.breaches.values()].filter((b) => !b.resolved);
136
+ }
137
+ // ─── Status & Reporting ───────────────────────────────────────────────────
138
+ /**
139
+ * Get current status of SLA.
140
+ */
141
+ getSLAStatus(slaId) {
142
+ const sla = this.slas.get(slaId);
143
+ if (!sla)
144
+ return null;
145
+ const measurements = this.getMeasurements(slaId, 100);
146
+ if (measurements.length === 0) {
147
+ return {
148
+ slaId,
149
+ name: sla.name,
150
+ currentValue: 0,
151
+ target: sla.target,
152
+ percentageOfTarget: 0,
153
+ isMet: false,
154
+ breachCount: this.getBreaches(slaId, false).length,
155
+ };
156
+ }
157
+ const currentValue = measurements[measurements.length - 1].value;
158
+ const isMet = sla.metric === "availability" || sla.metric === "throughput"
159
+ ? currentValue >= sla.threshold
160
+ : currentValue <= sla.threshold;
161
+ const percentageOfTarget = sla.target > 0 ? Math.round((currentValue / sla.target) * 100) : 0;
162
+ const breachCount = this.getBreaches(slaId, false).length;
163
+ const lastBreach = this.getBreaches(slaId, false)[0];
164
+ return {
165
+ slaId,
166
+ name: sla.name,
167
+ currentValue,
168
+ target: sla.target,
169
+ percentageOfTarget,
170
+ isMet,
171
+ breachCount,
172
+ lastBreachTime: lastBreach?.breachTime,
173
+ };
174
+ }
175
+ /**
176
+ * Get status for all SLAs.
177
+ */
178
+ getAllSLAStatus() {
179
+ return [...this.slas.keys()].reduce((statuses, slaId) => {
180
+ const status = this.getSLAStatus(slaId);
181
+ if (status)
182
+ statuses.push(status);
183
+ return statuses;
184
+ }, []);
185
+ }
186
+ /**
187
+ * Calculate SLI (Service Level Indicator).
188
+ */
189
+ calculateSLI(slaId) {
190
+ const sla = this.slas.get(slaId);
191
+ if (!sla)
192
+ return 0;
193
+ const measurements = this.getMeasurements(slaId, 100);
194
+ if (measurements.length === 0)
195
+ return 0;
196
+ const metCount = measurements.filter((m) => {
197
+ if (sla.metric === "availability" || sla.metric === "throughput") {
198
+ return m.value >= sla.threshold;
199
+ }
200
+ else {
201
+ return m.value <= sla.threshold;
202
+ }
203
+ }).length;
204
+ return Math.round((metCount / measurements.length) * 100);
205
+ }
206
+ /**
207
+ * Generate SLA report.
208
+ */
209
+ generateReport() {
210
+ const statuses = this.getAllSLAStatus();
211
+ const metSLAs = statuses.filter((s) => s.isMet).length;
212
+ const breachedSLAs = statuses.filter((s) => s.breachCount > 0).length;
213
+ const slis = statuses.map((s) => this.calculateSLI(s.slaId));
214
+ const sliAverage = slis.length > 0 ? Math.round(slis.reduce((a, b) => a + b) / slis.length) : 0;
215
+ return {
216
+ totalSLAs: this.slas.size,
217
+ metSLAs,
218
+ breachedSLAs,
219
+ sliAverage,
220
+ };
221
+ }
222
+ // ─── Cache helpers ────────────────────────────────────────────────────────
223
+ getSLACache() {
224
+ return this.slas;
225
+ }
226
+ getBreachCache() {
227
+ return this.breaches;
228
+ }
229
+ getMeasurementsCache() {
230
+ return this.measurements;
231
+ }
232
+ }
233
+ //# sourceMappingURL=sla-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sla-monitor.js","sourceRoot":"","sources":["../src/sla-monitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export interface DetectedStack {
2
+ language: string;
3
+ framework?: string;
4
+ services: string[];
5
+ tools: Record<string, string>;
6
+ confidence: number;
7
+ }
8
+ /**
9
+ * Detect the project stack from files in the given directory.
10
+ * Returns null only if no recognizable project files are found.
11
+ */
12
+ export declare function detectStack(cwd: string): Promise<DetectedStack>;
@@ -0,0 +1,251 @@
1
+ import { readFile, access } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ async function fileExists(path) {
4
+ try {
5
+ await access(path);
6
+ return true;
7
+ }
8
+ catch {
9
+ return false;
10
+ }
11
+ }
12
+ async function readJson(path) {
13
+ try {
14
+ const text = await readFile(path, "utf-8");
15
+ return JSON.parse(text);
16
+ }
17
+ catch {
18
+ return null;
19
+ }
20
+ }
21
+ function hasDep(pkg, name) {
22
+ return !!(pkg.dependencies?.[name] || pkg.devDependencies?.[name]);
23
+ }
24
+ function nodeVersion(pkg) {
25
+ const engines = pkg.engines?.node;
26
+ if (engines) {
27
+ const match = engines.match(/(\d+)/);
28
+ if (match)
29
+ return match[1];
30
+ }
31
+ return "22";
32
+ }
33
+ function detectPackageManager(pkg, cwd) {
34
+ if (pkg.packageManager?.startsWith("pnpm"))
35
+ return Promise.resolve("pnpm");
36
+ if (pkg.packageManager?.startsWith("yarn"))
37
+ return Promise.resolve("yarn");
38
+ if (pkg.packageManager?.startsWith("bun"))
39
+ return Promise.resolve("bun");
40
+ // Check for lockfiles
41
+ return (async () => {
42
+ if (await fileExists(join(cwd, "pnpm-lock.yaml")))
43
+ return "pnpm";
44
+ if (await fileExists(join(cwd, "yarn.lock")))
45
+ return "yarn";
46
+ if (await fileExists(join(cwd, "bun.lockb")))
47
+ return "bun";
48
+ return "npm";
49
+ })();
50
+ }
51
+ async function detectFromPackageJson(cwd) {
52
+ const pkg = await readJson(join(cwd, "package.json"));
53
+ if (!pkg)
54
+ return null;
55
+ const node = nodeVersion(pkg);
56
+ const pm = await detectPackageManager(pkg, cwd);
57
+ const tools = { node };
58
+ if (pm !== "npm")
59
+ tools[pm] = "latest";
60
+ const services = [];
61
+ // Detect services by dependencies
62
+ if (hasDep(pkg, "stripe"))
63
+ services.push("stripe");
64
+ if (hasDep(pkg, "@supabase/supabase-js") || (await fileExists(join(cwd, "supabase")))) {
65
+ services.push("supabase");
66
+ }
67
+ if (hasDep(pkg, "prisma") || hasDep(pkg, "@prisma/client")) {
68
+ services.push("prisma");
69
+ }
70
+ if (hasDep(pkg, "resend"))
71
+ services.push("resend");
72
+ if (hasDep(pkg, "@clerk/nextjs") || hasDep(pkg, "@clerk/clerk-react")) {
73
+ services.push("clerk");
74
+ }
75
+ if (hasDep(pkg, "drizzle-orm"))
76
+ services.push("drizzle");
77
+ if (hasDep(pkg, "liveblocks") || hasDep(pkg, "@liveblocks/client")) {
78
+ services.push("liveblocks");
79
+ }
80
+ if (hasDep(pkg, "@trigger.dev/sdk") || hasDep(pkg, "trigger.dev")) {
81
+ services.push("trigger");
82
+ }
83
+ if (hasDep(pkg, "inngest"))
84
+ services.push("inngest");
85
+ if (hasDep(pkg, "@vercel/analytics") ||
86
+ hasDep(pkg, "vercel") ||
87
+ (await fileExists(join(cwd, "vercel.json")))) {
88
+ services.push("vercel");
89
+ }
90
+ if (await fileExists(join(cwd, ".expo")))
91
+ services.push("expo");
92
+ // Sentry — any @sentry/* package
93
+ if (hasDep(pkg, "@sentry/nextjs") ||
94
+ hasDep(pkg, "@sentry/node") ||
95
+ hasDep(pkg, "@sentry/react") ||
96
+ hasDep(pkg, "@sentry/svelte") ||
97
+ hasDep(pkg, "@sentry/astro") ||
98
+ hasDep(pkg, "@sentry/remix")) {
99
+ services.push("sentry");
100
+ }
101
+ // NestJS specific: TypeORM, Mongoose
102
+ if (hasDep(pkg, "typeorm") || hasDep(pkg, "@nestjs/typeorm")) {
103
+ services.push("typeorm");
104
+ }
105
+ if (hasDep(pkg, "mongoose") || hasDep(pkg, "@nestjs/mongoose")) {
106
+ services.push("mongoose");
107
+ }
108
+ // Netlify / Cloudflare Pages via config files
109
+ if (await fileExists(join(cwd, "netlify.toml")))
110
+ services.push("netlify");
111
+ if (await fileExists(join(cwd, "wrangler.toml")))
112
+ services.push("cloudflare-pages");
113
+ // Detect framework
114
+ let framework;
115
+ if (hasDep(pkg, "next")) {
116
+ framework = "nextjs";
117
+ }
118
+ else if (hasDep(pkg, "@remix-run/node") || hasDep(pkg, "@remix-run/react")) {
119
+ framework = "remix";
120
+ }
121
+ else if (hasDep(pkg, "astro")) {
122
+ framework = "astro";
123
+ }
124
+ else if (hasDep(pkg, "@sveltejs/kit")) {
125
+ framework = "sveltekit";
126
+ }
127
+ else if (hasDep(pkg, "@nestjs/core")) {
128
+ framework = "nestjs";
129
+ }
130
+ else if (hasDep(pkg, "express")) {
131
+ framework = "express";
132
+ }
133
+ else if (hasDep(pkg, "react")) {
134
+ framework = "react";
135
+ }
136
+ else if (hasDep(pkg, "vue")) {
137
+ framework = "vue";
138
+ }
139
+ const confidence = framework ? 0.9 : 0.6;
140
+ return {
141
+ language: "typescript",
142
+ framework,
143
+ services,
144
+ tools,
145
+ confidence,
146
+ };
147
+ }
148
+ async function detectFromPython(cwd) {
149
+ const hasRequirements = await fileExists(join(cwd, "requirements.txt"));
150
+ const hasPyproject = await fileExists(join(cwd, "pyproject.toml"));
151
+ if (!hasRequirements && !hasPyproject)
152
+ return null;
153
+ let framework;
154
+ let contents = "";
155
+ if (hasRequirements) {
156
+ contents = await readFile(join(cwd, "requirements.txt"), "utf-8").catch(() => "");
157
+ }
158
+ if (hasPyproject) {
159
+ contents += await readFile(join(cwd, "pyproject.toml"), "utf-8").catch(() => "");
160
+ }
161
+ if (/fastapi/i.test(contents))
162
+ framework = "fastapi";
163
+ else if (/django/i.test(contents))
164
+ framework = "django";
165
+ else if (/flask/i.test(contents))
166
+ framework = "flask";
167
+ return {
168
+ language: "python",
169
+ framework,
170
+ services: [],
171
+ tools: { python: "3.12", uv: "latest" },
172
+ confidence: framework ? 0.85 : 0.5,
173
+ };
174
+ }
175
+ async function detectFromGo(cwd) {
176
+ const goMod = await readFile(join(cwd, "go.mod"), "utf-8").catch(() => null);
177
+ if (!goMod)
178
+ return null;
179
+ let framework;
180
+ if (/github\.com\/gin-gonic\/gin/.test(goMod))
181
+ framework = "gin";
182
+ else if (/github\.com\/labstack\/echo/.test(goMod))
183
+ framework = "echo";
184
+ else if (/github\.com\/gofiber\/fiber/.test(goMod))
185
+ framework = "fiber";
186
+ return {
187
+ language: "go",
188
+ framework,
189
+ services: [],
190
+ tools: { go: "1.22" },
191
+ confidence: framework ? 0.85 : 0.7,
192
+ };
193
+ }
194
+ async function detectFromRust(cwd) {
195
+ const cargoToml = await readFile(join(cwd, "Cargo.toml"), "utf-8").catch(() => null);
196
+ if (!cargoToml)
197
+ return null;
198
+ let framework;
199
+ if (/axum/.test(cargoToml))
200
+ framework = "axum";
201
+ else if (/actix/.test(cargoToml))
202
+ framework = "actix";
203
+ else if (/rocket/.test(cargoToml))
204
+ framework = "rocket";
205
+ return {
206
+ language: "rust",
207
+ framework,
208
+ services: [],
209
+ tools: { rust: "latest" },
210
+ confidence: framework ? 0.85 : 0.7,
211
+ };
212
+ }
213
+ async function detectFromPhp(cwd) {
214
+ const composer = await readJson(join(cwd, "composer.json"));
215
+ if (!composer)
216
+ return null;
217
+ let framework;
218
+ if (composer.require?.["laravel/framework"])
219
+ framework = "laravel";
220
+ else if (composer.require?.["symfony/framework-bundle"])
221
+ framework = "symfony";
222
+ return {
223
+ language: "php",
224
+ framework,
225
+ services: [],
226
+ tools: { php: "8.3", composer: "latest" },
227
+ confidence: framework ? 0.85 : 0.6,
228
+ };
229
+ }
230
+ /**
231
+ * Detect the project stack from files in the given directory.
232
+ * Returns null only if no recognizable project files are found.
233
+ */
234
+ export async function detectStack(cwd) {
235
+ // Try detection in priority order — first match wins
236
+ const result = (await detectFromPackageJson(cwd)) ??
237
+ (await detectFromPython(cwd)) ??
238
+ (await detectFromGo(cwd)) ??
239
+ (await detectFromRust(cwd)) ??
240
+ (await detectFromPhp(cwd));
241
+ if (result)
242
+ return result;
243
+ // Unknown project — return minimal fallback
244
+ return {
245
+ language: "unknown",
246
+ services: [],
247
+ tools: {},
248
+ confidence: 0.0,
249
+ };
250
+ }
251
+ //# sourceMappingURL=stack-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-detector.js","sourceRoot":"","sources":["../src/stack-detector.ts"],"names":[],"mappings":"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"}