@oddessentials/odd-ai-reviewers 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 (370) hide show
  1. package/README.md +190 -0
  2. package/dist/__tests__/hermetic-setup.d.ts +55 -0
  3. package/dist/__tests__/hermetic-setup.d.ts.map +1 -0
  4. package/dist/__tests__/hermetic-setup.js +62 -0
  5. package/dist/__tests__/hermetic-setup.js.map +1 -0
  6. package/dist/__tests__/test-utils/hermetic.d.ts +84 -0
  7. package/dist/__tests__/test-utils/hermetic.d.ts.map +1 -0
  8. package/dist/__tests__/test-utils/hermetic.js +147 -0
  9. package/dist/__tests__/test-utils/hermetic.js.map +1 -0
  10. package/dist/agents/ai_semantic_review.d.ts +12 -0
  11. package/dist/agents/ai_semantic_review.d.ts.map +1 -0
  12. package/dist/agents/ai_semantic_review.js +317 -0
  13. package/dist/agents/ai_semantic_review.js.map +1 -0
  14. package/dist/agents/control_flow/budget.d.ts +162 -0
  15. package/dist/agents/control_flow/budget.d.ts.map +1 -0
  16. package/dist/agents/control_flow/budget.js +331 -0
  17. package/dist/agents/control_flow/budget.js.map +1 -0
  18. package/dist/agents/control_flow/cfg-builder.d.ts +26 -0
  19. package/dist/agents/control_flow/cfg-builder.d.ts.map +1 -0
  20. package/dist/agents/control_flow/cfg-builder.js +776 -0
  21. package/dist/agents/control_flow/cfg-builder.js.map +1 -0
  22. package/dist/agents/control_flow/cfg-types.d.ts +186 -0
  23. package/dist/agents/control_flow/cfg-types.d.ts.map +1 -0
  24. package/dist/agents/control_flow/cfg-types.js +114 -0
  25. package/dist/agents/control_flow/cfg-types.js.map +1 -0
  26. package/dist/agents/control_flow/finding-generator.d.ts +118 -0
  27. package/dist/agents/control_flow/finding-generator.d.ts.map +1 -0
  28. package/dist/agents/control_flow/finding-generator.js +354 -0
  29. package/dist/agents/control_flow/finding-generator.js.map +1 -0
  30. package/dist/agents/control_flow/index.d.ts +39 -0
  31. package/dist/agents/control_flow/index.d.ts.map +1 -0
  32. package/dist/agents/control_flow/index.js +270 -0
  33. package/dist/agents/control_flow/index.js.map +1 -0
  34. package/dist/agents/control_flow/logger.d.ts +333 -0
  35. package/dist/agents/control_flow/logger.d.ts.map +1 -0
  36. package/dist/agents/control_flow/logger.js +607 -0
  37. package/dist/agents/control_flow/logger.js.map +1 -0
  38. package/dist/agents/control_flow/mitigation-detector.d.ts +207 -0
  39. package/dist/agents/control_flow/mitigation-detector.d.ts.map +1 -0
  40. package/dist/agents/control_flow/mitigation-detector.js +625 -0
  41. package/dist/agents/control_flow/mitigation-detector.js.map +1 -0
  42. package/dist/agents/control_flow/mitigation-patterns.d.ts +53 -0
  43. package/dist/agents/control_flow/mitigation-patterns.d.ts.map +1 -0
  44. package/dist/agents/control_flow/mitigation-patterns.js +620 -0
  45. package/dist/agents/control_flow/mitigation-patterns.js.map +1 -0
  46. package/dist/agents/control_flow/path-analyzer.d.ts +287 -0
  47. package/dist/agents/control_flow/path-analyzer.d.ts.map +1 -0
  48. package/dist/agents/control_flow/path-analyzer.js +695 -0
  49. package/dist/agents/control_flow/path-analyzer.js.map +1 -0
  50. package/dist/agents/control_flow/pattern-validator.d.ts +132 -0
  51. package/dist/agents/control_flow/pattern-validator.d.ts.map +1 -0
  52. package/dist/agents/control_flow/pattern-validator.js +420 -0
  53. package/dist/agents/control_flow/pattern-validator.js.map +1 -0
  54. package/dist/agents/control_flow/timeout-regex.d.ts +144 -0
  55. package/dist/agents/control_flow/timeout-regex.d.ts.map +1 -0
  56. package/dist/agents/control_flow/timeout-regex.js +339 -0
  57. package/dist/agents/control_flow/timeout-regex.js.map +1 -0
  58. package/dist/agents/control_flow/types.d.ts +782 -0
  59. package/dist/agents/control_flow/types.d.ts.map +1 -0
  60. package/dist/agents/control_flow/types.js +428 -0
  61. package/dist/agents/control_flow/types.js.map +1 -0
  62. package/dist/agents/control_flow/vulnerability-detector.d.ts +85 -0
  63. package/dist/agents/control_flow/vulnerability-detector.d.ts.map +1 -0
  64. package/dist/agents/control_flow/vulnerability-detector.js +493 -0
  65. package/dist/agents/control_flow/vulnerability-detector.js.map +1 -0
  66. package/dist/agents/date-utils.d.ts +19 -0
  67. package/dist/agents/date-utils.d.ts.map +1 -0
  68. package/dist/agents/date-utils.js +29 -0
  69. package/dist/agents/date-utils.js.map +1 -0
  70. package/dist/agents/index.d.ts +25 -0
  71. package/dist/agents/index.d.ts.map +1 -0
  72. package/dist/agents/index.js +50 -0
  73. package/dist/agents/index.js.map +1 -0
  74. package/dist/agents/json-utils.d.ts +34 -0
  75. package/dist/agents/json-utils.d.ts.map +1 -0
  76. package/dist/agents/json-utils.js +62 -0
  77. package/dist/agents/json-utils.js.map +1 -0
  78. package/dist/agents/local_llm.d.ts +24 -0
  79. package/dist/agents/local_llm.d.ts.map +1 -0
  80. package/dist/agents/local_llm.js +566 -0
  81. package/dist/agents/local_llm.js.map +1 -0
  82. package/dist/agents/metadata.d.ts +57 -0
  83. package/dist/agents/metadata.d.ts.map +1 -0
  84. package/dist/agents/metadata.js +45 -0
  85. package/dist/agents/metadata.js.map +1 -0
  86. package/dist/agents/opencode.d.ts +18 -0
  87. package/dist/agents/opencode.d.ts.map +1 -0
  88. package/dist/agents/opencode.js +364 -0
  89. package/dist/agents/opencode.js.map +1 -0
  90. package/dist/agents/path-filter.d.ts +25 -0
  91. package/dist/agents/path-filter.d.ts.map +1 -0
  92. package/dist/agents/path-filter.js +43 -0
  93. package/dist/agents/path-filter.js.map +1 -0
  94. package/dist/agents/pr_agent.d.ts +3 -0
  95. package/dist/agents/pr_agent.d.ts.map +1 -0
  96. package/dist/agents/pr_agent.js +312 -0
  97. package/dist/agents/pr_agent.js.map +1 -0
  98. package/dist/agents/retry.d.ts +12 -0
  99. package/dist/agents/retry.d.ts.map +1 -0
  100. package/dist/agents/retry.js +65 -0
  101. package/dist/agents/retry.js.map +1 -0
  102. package/dist/agents/reviewdog.d.ts +24 -0
  103. package/dist/agents/reviewdog.d.ts.map +1 -0
  104. package/dist/agents/reviewdog.js +259 -0
  105. package/dist/agents/reviewdog.js.map +1 -0
  106. package/dist/agents/security.d.ts +49 -0
  107. package/dist/agents/security.d.ts.map +1 -0
  108. package/dist/agents/security.js +302 -0
  109. package/dist/agents/security.js.map +1 -0
  110. package/dist/agents/semgrep.d.ts +8 -0
  111. package/dist/agents/semgrep.d.ts.map +1 -0
  112. package/dist/agents/semgrep.js +157 -0
  113. package/dist/agents/semgrep.js.map +1 -0
  114. package/dist/agents/types.d.ts +450 -0
  115. package/dist/agents/types.d.ts.map +1 -0
  116. package/dist/agents/types.js +127 -0
  117. package/dist/agents/types.js.map +1 -0
  118. package/dist/budget.d.ts +59 -0
  119. package/dist/budget.d.ts.map +1 -0
  120. package/dist/budget.js +82 -0
  121. package/dist/budget.js.map +1 -0
  122. package/dist/cache/key.d.ts +49 -0
  123. package/dist/cache/key.d.ts.map +1 -0
  124. package/dist/cache/key.js +71 -0
  125. package/dist/cache/key.js.map +1 -0
  126. package/dist/cache/store.d.ts +47 -0
  127. package/dist/cache/store.d.ts.map +1 -0
  128. package/dist/cache/store.js +328 -0
  129. package/dist/cache/store.js.map +1 -0
  130. package/dist/cli/commands/check.d.ts +60 -0
  131. package/dist/cli/commands/check.d.ts.map +1 -0
  132. package/dist/cli/commands/check.js +163 -0
  133. package/dist/cli/commands/check.js.map +1 -0
  134. package/dist/cli/commands/index.d.ts +12 -0
  135. package/dist/cli/commands/index.d.ts.map +1 -0
  136. package/dist/cli/commands/index.js +12 -0
  137. package/dist/cli/commands/index.js.map +1 -0
  138. package/dist/cli/commands/local-review.d.ts +149 -0
  139. package/dist/cli/commands/local-review.d.ts.map +1 -0
  140. package/dist/cli/commands/local-review.js +755 -0
  141. package/dist/cli/commands/local-review.js.map +1 -0
  142. package/dist/cli/config-wizard.d.ts +87 -0
  143. package/dist/cli/config-wizard.d.ts.map +1 -0
  144. package/dist/cli/config-wizard.js +240 -0
  145. package/dist/cli/config-wizard.js.map +1 -0
  146. package/dist/cli/dependencies/catalog.d.ts +44 -0
  147. package/dist/cli/dependencies/catalog.d.ts.map +1 -0
  148. package/dist/cli/dependencies/catalog.js +89 -0
  149. package/dist/cli/dependencies/catalog.js.map +1 -0
  150. package/dist/cli/dependencies/checker.d.ts +42 -0
  151. package/dist/cli/dependencies/checker.d.ts.map +1 -0
  152. package/dist/cli/dependencies/checker.js +240 -0
  153. package/dist/cli/dependencies/checker.js.map +1 -0
  154. package/dist/cli/dependencies/index.d.ts +16 -0
  155. package/dist/cli/dependencies/index.d.ts.map +1 -0
  156. package/dist/cli/dependencies/index.js +16 -0
  157. package/dist/cli/dependencies/index.js.map +1 -0
  158. package/dist/cli/dependencies/messages.d.ts +58 -0
  159. package/dist/cli/dependencies/messages.d.ts.map +1 -0
  160. package/dist/cli/dependencies/messages.js +183 -0
  161. package/dist/cli/dependencies/messages.js.map +1 -0
  162. package/dist/cli/dependencies/platform.d.ts +25 -0
  163. package/dist/cli/dependencies/platform.d.ts.map +1 -0
  164. package/dist/cli/dependencies/platform.js +42 -0
  165. package/dist/cli/dependencies/platform.js.map +1 -0
  166. package/dist/cli/dependencies/schemas.d.ts +65 -0
  167. package/dist/cli/dependencies/schemas.d.ts.map +1 -0
  168. package/dist/cli/dependencies/schemas.js +42 -0
  169. package/dist/cli/dependencies/schemas.js.map +1 -0
  170. package/dist/cli/dependencies/types.d.ts +112 -0
  171. package/dist/cli/dependencies/types.d.ts.map +1 -0
  172. package/dist/cli/dependencies/types.js +6 -0
  173. package/dist/cli/dependencies/types.js.map +1 -0
  174. package/dist/cli/dependencies/version.d.ts +67 -0
  175. package/dist/cli/dependencies/version.d.ts.map +1 -0
  176. package/dist/cli/dependencies/version.js +125 -0
  177. package/dist/cli/dependencies/version.js.map +1 -0
  178. package/dist/cli/git-context.d.ts +105 -0
  179. package/dist/cli/git-context.d.ts.map +1 -0
  180. package/dist/cli/git-context.js +313 -0
  181. package/dist/cli/git-context.js.map +1 -0
  182. package/dist/cli/interactive-prompts.d.ts +126 -0
  183. package/dist/cli/interactive-prompts.d.ts.map +1 -0
  184. package/dist/cli/interactive-prompts.js +128 -0
  185. package/dist/cli/interactive-prompts.js.map +1 -0
  186. package/dist/cli/options/index.d.ts +7 -0
  187. package/dist/cli/options/index.d.ts.map +1 -0
  188. package/dist/cli/options/index.js +11 -0
  189. package/dist/cli/options/index.js.map +1 -0
  190. package/dist/cli/options/local-review-options.d.ts +221 -0
  191. package/dist/cli/options/local-review-options.d.ts.map +1 -0
  192. package/dist/cli/options/local-review-options.js +332 -0
  193. package/dist/cli/options/local-review-options.js.map +1 -0
  194. package/dist/cli/output/colors.d.ts +154 -0
  195. package/dist/cli/output/colors.d.ts.map +1 -0
  196. package/dist/cli/output/colors.js +255 -0
  197. package/dist/cli/output/colors.js.map +1 -0
  198. package/dist/cli/output/errors.d.ts +157 -0
  199. package/dist/cli/output/errors.d.ts.map +1 -0
  200. package/dist/cli/output/errors.js +266 -0
  201. package/dist/cli/output/errors.js.map +1 -0
  202. package/dist/cli/output/index.d.ts +12 -0
  203. package/dist/cli/output/index.d.ts.map +1 -0
  204. package/dist/cli/output/index.js +15 -0
  205. package/dist/cli/output/index.js.map +1 -0
  206. package/dist/cli/output/progress.d.ts +237 -0
  207. package/dist/cli/output/progress.d.ts.map +1 -0
  208. package/dist/cli/output/progress.js +405 -0
  209. package/dist/cli/output/progress.js.map +1 -0
  210. package/dist/cli/signals.d.ts +145 -0
  211. package/dist/cli/signals.d.ts.map +1 -0
  212. package/dist/cli/signals.js +223 -0
  213. package/dist/cli/signals.js.map +1 -0
  214. package/dist/cli/validation-report.d.ts +106 -0
  215. package/dist/cli/validation-report.d.ts.map +1 -0
  216. package/dist/cli/validation-report.js +108 -0
  217. package/dist/cli/validation-report.js.map +1 -0
  218. package/dist/config/index.d.ts +9 -0
  219. package/dist/config/index.d.ts.map +1 -0
  220. package/dist/config/index.js +12 -0
  221. package/dist/config/index.js.map +1 -0
  222. package/dist/config/mitigation-config.d.ts +94 -0
  223. package/dist/config/mitigation-config.d.ts.map +1 -0
  224. package/dist/config/mitigation-config.js +430 -0
  225. package/dist/config/mitigation-config.js.map +1 -0
  226. package/dist/config/providers.d.ts +118 -0
  227. package/dist/config/providers.d.ts.map +1 -0
  228. package/dist/config/providers.js +229 -0
  229. package/dist/config/providers.js.map +1 -0
  230. package/dist/config/schemas.d.ts +278 -0
  231. package/dist/config/schemas.d.ts.map +1 -0
  232. package/dist/config/schemas.js +111 -0
  233. package/dist/config/schemas.js.map +1 -0
  234. package/dist/config/zero-config.d.ts +126 -0
  235. package/dist/config/zero-config.d.ts.map +1 -0
  236. package/dist/config/zero-config.js +243 -0
  237. package/dist/config/zero-config.js.map +1 -0
  238. package/dist/config.d.ts +110 -0
  239. package/dist/config.d.ts.map +1 -0
  240. package/dist/config.js +302 -0
  241. package/dist/config.js.map +1 -0
  242. package/dist/diff.d.ts +224 -0
  243. package/dist/diff.d.ts.map +1 -0
  244. package/dist/diff.js +832 -0
  245. package/dist/diff.js.map +1 -0
  246. package/dist/git-validators.d.ts +106 -0
  247. package/dist/git-validators.d.ts.map +1 -0
  248. package/dist/git-validators.js +224 -0
  249. package/dist/git-validators.js.map +1 -0
  250. package/dist/main.d.ts +61 -0
  251. package/dist/main.d.ts.map +1 -0
  252. package/dist/main.js +704 -0
  253. package/dist/main.js.map +1 -0
  254. package/dist/phases/execute.d.ts +60 -0
  255. package/dist/phases/execute.d.ts.map +1 -0
  256. package/dist/phases/execute.js +168 -0
  257. package/dist/phases/execute.js.map +1 -0
  258. package/dist/phases/index.d.ts +9 -0
  259. package/dist/phases/index.d.ts.map +1 -0
  260. package/dist/phases/index.js +9 -0
  261. package/dist/phases/index.js.map +1 -0
  262. package/dist/phases/preflight.d.ts +40 -0
  263. package/dist/phases/preflight.d.ts.map +1 -0
  264. package/dist/phases/preflight.js +122 -0
  265. package/dist/phases/preflight.js.map +1 -0
  266. package/dist/phases/report.d.ts +51 -0
  267. package/dist/phases/report.d.ts.map +1 -0
  268. package/dist/phases/report.js +152 -0
  269. package/dist/phases/report.js.map +1 -0
  270. package/dist/policy.d.ts +33 -0
  271. package/dist/policy.d.ts.map +1 -0
  272. package/dist/policy.js +34 -0
  273. package/dist/policy.js.map +1 -0
  274. package/dist/preflight.d.ts +181 -0
  275. package/dist/preflight.d.ts.map +1 -0
  276. package/dist/preflight.js +627 -0
  277. package/dist/preflight.js.map +1 -0
  278. package/dist/report/ado.d.ts +53 -0
  279. package/dist/report/ado.d.ts.map +1 -0
  280. package/dist/report/ado.js +411 -0
  281. package/dist/report/ado.js.map +1 -0
  282. package/dist/report/agent-icons.d.ts +36 -0
  283. package/dist/report/agent-icons.d.ts.map +1 -0
  284. package/dist/report/agent-icons.js +46 -0
  285. package/dist/report/agent-icons.js.map +1 -0
  286. package/dist/report/base.d.ts +30 -0
  287. package/dist/report/base.d.ts.map +1 -0
  288. package/dist/report/base.js +64 -0
  289. package/dist/report/base.js.map +1 -0
  290. package/dist/report/formats.d.ts +206 -0
  291. package/dist/report/formats.d.ts.map +1 -0
  292. package/dist/report/formats.js +481 -0
  293. package/dist/report/formats.js.map +1 -0
  294. package/dist/report/github.d.ts +44 -0
  295. package/dist/report/github.d.ts.map +1 -0
  296. package/dist/report/github.js +409 -0
  297. package/dist/report/github.js.map +1 -0
  298. package/dist/report/line-resolver.d.ts +208 -0
  299. package/dist/report/line-resolver.d.ts.map +1 -0
  300. package/dist/report/line-resolver.js +578 -0
  301. package/dist/report/line-resolver.js.map +1 -0
  302. package/dist/report/resolution.d.ts +158 -0
  303. package/dist/report/resolution.d.ts.map +1 -0
  304. package/dist/report/resolution.js +272 -0
  305. package/dist/report/resolution.js.map +1 -0
  306. package/dist/report/sanitize.d.ts +32 -0
  307. package/dist/report/sanitize.d.ts.map +1 -0
  308. package/dist/report/sanitize.js +84 -0
  309. package/dist/report/sanitize.js.map +1 -0
  310. package/dist/report/terminal.d.ts +440 -0
  311. package/dist/report/terminal.d.ts.map +1 -0
  312. package/dist/report/terminal.js +840 -0
  313. package/dist/report/terminal.js.map +1 -0
  314. package/dist/reviewignore.d.ts +125 -0
  315. package/dist/reviewignore.d.ts.map +1 -0
  316. package/dist/reviewignore.js +335 -0
  317. package/dist/reviewignore.js.map +1 -0
  318. package/dist/security-logger.d.ts +178 -0
  319. package/dist/security-logger.d.ts.map +1 -0
  320. package/dist/security-logger.js +256 -0
  321. package/dist/security-logger.js.map +1 -0
  322. package/dist/telemetry/backends/console.d.ts +24 -0
  323. package/dist/telemetry/backends/console.d.ts.map +1 -0
  324. package/dist/telemetry/backends/console.js +54 -0
  325. package/dist/telemetry/backends/console.js.map +1 -0
  326. package/dist/telemetry/backends/jsonl.d.ts +31 -0
  327. package/dist/telemetry/backends/jsonl.d.ts.map +1 -0
  328. package/dist/telemetry/backends/jsonl.js +121 -0
  329. package/dist/telemetry/backends/jsonl.js.map +1 -0
  330. package/dist/telemetry/emitter.d.ts +43 -0
  331. package/dist/telemetry/emitter.d.ts.map +1 -0
  332. package/dist/telemetry/emitter.js +83 -0
  333. package/dist/telemetry/emitter.js.map +1 -0
  334. package/dist/telemetry/hook.d.ts +53 -0
  335. package/dist/telemetry/hook.d.ts.map +1 -0
  336. package/dist/telemetry/hook.js +118 -0
  337. package/dist/telemetry/hook.js.map +1 -0
  338. package/dist/telemetry/index.d.ts +58 -0
  339. package/dist/telemetry/index.d.ts.map +1 -0
  340. package/dist/telemetry/index.js +143 -0
  341. package/dist/telemetry/index.js.map +1 -0
  342. package/dist/telemetry/types.d.ts +139 -0
  343. package/dist/telemetry/types.d.ts.map +1 -0
  344. package/dist/telemetry/types.js +133 -0
  345. package/dist/telemetry/types.js.map +1 -0
  346. package/dist/trust.d.ts +65 -0
  347. package/dist/trust.d.ts.map +1 -0
  348. package/dist/trust.js +78 -0
  349. package/dist/trust.js.map +1 -0
  350. package/dist/types/assert-never.d.ts +30 -0
  351. package/dist/types/assert-never.d.ts.map +1 -0
  352. package/dist/types/assert-never.js +32 -0
  353. package/dist/types/assert-never.js.map +1 -0
  354. package/dist/types/branded.d.ts +172 -0
  355. package/dist/types/branded.d.ts.map +1 -0
  356. package/dist/types/branded.js +262 -0
  357. package/dist/types/branded.js.map +1 -0
  358. package/dist/types/errors.d.ts +320 -0
  359. package/dist/types/errors.d.ts.map +1 -0
  360. package/dist/types/errors.js +551 -0
  361. package/dist/types/errors.js.map +1 -0
  362. package/dist/types/index.d.ts +37 -0
  363. package/dist/types/index.d.ts.map +1 -0
  364. package/dist/types/index.js +77 -0
  365. package/dist/types/index.js.map +1 -0
  366. package/dist/types/result.d.ts +323 -0
  367. package/dist/types/result.d.ts.map +1 -0
  368. package/dist/types/result.js +423 -0
  369. package/dist/types/result.js.map +1 -0
  370. package/package.json +63 -0
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Timeout Telemetry Type Definitions
3
+ *
4
+ * Feature: 007-pnpm-timeout-telemetry
5
+ * Implements: FR-009, FR-012
6
+ */
7
+ import { z } from 'zod';
8
+ /**
9
+ * Severity level of a timeout event.
10
+ * - warning: Timeout exceeded but operation completed (informational)
11
+ * - error: Timeout caused operation failure
12
+ * - critical: Timeout in critical path affecting overall result
13
+ */
14
+ export declare const TimeoutSeverity: z.ZodEnum<{
15
+ error: "error";
16
+ warning: "warning";
17
+ critical: "critical";
18
+ }>;
19
+ export type TimeoutSeverity = z.infer<typeof TimeoutSeverity>;
20
+ /**
21
+ * Available telemetry backend types.
22
+ * - console: Writes structured log lines to stdout
23
+ * - jsonl: Appends JSON objects to file
24
+ */
25
+ export declare const TelemetryBackendType: z.ZodEnum<{
26
+ console: "console";
27
+ jsonl: "jsonl";
28
+ }>;
29
+ export type TelemetryBackendType = z.infer<typeof TelemetryBackendType>;
30
+ /**
31
+ * Verbosity levels for telemetry output.
32
+ * - minimal: operation_id, duration_ms, severity only
33
+ * - standard: All required fields
34
+ * - verbose: All fields including allowed_context
35
+ */
36
+ export declare const TelemetryVerbosity: z.ZodEnum<{
37
+ minimal: "minimal";
38
+ standard: "standard";
39
+ verbose: "verbose";
40
+ }>;
41
+ export type TelemetryVerbosity = z.infer<typeof TelemetryVerbosity>;
42
+ /**
43
+ * Operation ID pattern: {type}_{identifier}
44
+ * Examples: local_llm_req_abc123, pattern_eval_a1b2c3d4, subprocess_semgrep
45
+ */
46
+ export declare const OperationId: z.ZodString;
47
+ export type OperationId = z.infer<typeof OperationId>;
48
+ /**
49
+ * Allow-listed context fields for TimeoutEvent.
50
+ * Only these fields may appear in event context to prevent data leakage.
51
+ */
52
+ export declare const AllowedContextSchema: z.ZodObject<{
53
+ agent_id: z.ZodOptional<z.ZodString>;
54
+ file_path: z.ZodOptional<z.ZodString>;
55
+ pattern_hash: z.ZodOptional<z.ZodString>;
56
+ retry_count: z.ZodOptional<z.ZodNumber>;
57
+ model_name: z.ZodOptional<z.ZodString>;
58
+ }, z.core.$strict>;
59
+ export type AllowedContext = z.infer<typeof AllowedContextSchema>;
60
+ /**
61
+ * Core timeout event schema.
62
+ * Immutable record of a single timeout occurrence.
63
+ */
64
+ export declare const TimeoutEventSchema: z.ZodObject<{
65
+ operation_id: z.ZodString;
66
+ duration_ms: z.ZodNumber;
67
+ threshold_ms: z.ZodNumber;
68
+ timestamp: z.ZodString;
69
+ severity: z.ZodEnum<{
70
+ error: "error";
71
+ warning: "warning";
72
+ critical: "critical";
73
+ }>;
74
+ allowed_context: z.ZodOptional<z.ZodObject<{
75
+ agent_id: z.ZodOptional<z.ZodString>;
76
+ file_path: z.ZodOptional<z.ZodString>;
77
+ pattern_hash: z.ZodOptional<z.ZodString>;
78
+ retry_count: z.ZodOptional<z.ZodNumber>;
79
+ model_name: z.ZodOptional<z.ZodString>;
80
+ }, z.core.$strict>>;
81
+ }, z.core.$strip>;
82
+ export type TimeoutEvent = z.infer<typeof TimeoutEventSchema>;
83
+ /**
84
+ * Configuration controlling telemetry behavior.
85
+ */
86
+ export declare const TelemetryConfigSchema: z.ZodObject<{
87
+ enabled: z.ZodBoolean;
88
+ backends: z.ZodArray<z.ZodEnum<{
89
+ console: "console";
90
+ jsonl: "jsonl";
91
+ }>>;
92
+ jsonl_path: z.ZodOptional<z.ZodNullable<z.ZodString>>;
93
+ verbosity: z.ZodDefault<z.ZodEnum<{
94
+ minimal: "minimal";
95
+ standard: "standard";
96
+ verbose: "verbose";
97
+ }>>;
98
+ buffer_size: z.ZodDefault<z.ZodNumber>;
99
+ flush_interval_ms: z.ZodDefault<z.ZodNumber>;
100
+ }, z.core.$strip>;
101
+ export type TelemetryConfig = z.infer<typeof TelemetryConfigSchema>;
102
+ /**
103
+ * Contract for telemetry sink implementations.
104
+ *
105
+ * Error Handling Contract:
106
+ * - emit() MUST NOT throw; failures logged internally
107
+ * - emit() MUST NOT block calling thread
108
+ * - flush() MAY throw if write fails
109
+ * - Backend failure MUST NOT affect control flow (FR-014)
110
+ */
111
+ export interface TelemetryBackend {
112
+ /** Write a single event (non-blocking, non-throwing) */
113
+ emit(event: TimeoutEvent): Promise<void>;
114
+ /** Force write of buffered events */
115
+ flush(): Promise<void>;
116
+ /** Release resources */
117
+ close(): Promise<void>;
118
+ }
119
+ /**
120
+ * Input type for emitting timeout events.
121
+ * Omits timestamp as it will be auto-generated.
122
+ */
123
+ export type TimeoutEventInput = Omit<TimeoutEvent, 'timestamp'>;
124
+ /**
125
+ * Partial config for updating telemetry settings.
126
+ */
127
+ export type TelemetryConfigUpdate = Partial<Omit<TelemetryConfig, 'backends'>> & {
128
+ backends?: TelemetryBackendType[];
129
+ };
130
+ /**
131
+ * Default telemetry configuration.
132
+ * Telemetry is disabled by default.
133
+ */
134
+ export declare const DEFAULT_TELEMETRY_CONFIG: TelemetryConfig;
135
+ /**
136
+ * Creates a TimeoutEvent with auto-generated timestamp.
137
+ */
138
+ export declare function createTimeoutEvent(input: TimeoutEventInput): TimeoutEvent;
139
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/telemetry/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB;;;;;GAKG;AACH,eAAO,MAAM,eAAe;;;;EAA2C,CAAC;AACxE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9D;;;;GAIG;AACH,eAAO,MAAM,oBAAoB;;;EAA+B,CAAC;AACjE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAExE;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB;;;;EAA6C,CAAC;AAC7E,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAMpE;;;GAGG;AACH,eAAO,MAAM,WAAW,aAGmE,CAAC;AAC5F,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;;;kBAgBtB,CAAC;AACZ,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;iBAa7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;iBA2B/B,CAAC;AACJ,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAMpE;;;;;;;;GAQG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,qCAAqC;IACrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,wBAAwB;IACxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAMD;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AAEhE;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC,GAAG;IAC/E,QAAQ,CAAC,EAAE,oBAAoB,EAAE,CAAC;CACnC,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,eAOtC,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY,CAKzE"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Timeout Telemetry Type Definitions
3
+ *
4
+ * Feature: 007-pnpm-timeout-telemetry
5
+ * Implements: FR-009, FR-012
6
+ */
7
+ import { z } from 'zod';
8
+ // =============================================================================
9
+ // Enums
10
+ // =============================================================================
11
+ /**
12
+ * Severity level of a timeout event.
13
+ * - warning: Timeout exceeded but operation completed (informational)
14
+ * - error: Timeout caused operation failure
15
+ * - critical: Timeout in critical path affecting overall result
16
+ */
17
+ export const TimeoutSeverity = z.enum(['warning', 'error', 'critical']);
18
+ /**
19
+ * Available telemetry backend types.
20
+ * - console: Writes structured log lines to stdout
21
+ * - jsonl: Appends JSON objects to file
22
+ */
23
+ export const TelemetryBackendType = z.enum(['console', 'jsonl']);
24
+ /**
25
+ * Verbosity levels for telemetry output.
26
+ * - minimal: operation_id, duration_ms, severity only
27
+ * - standard: All required fields
28
+ * - verbose: All fields including allowed_context
29
+ */
30
+ export const TelemetryVerbosity = z.enum(['minimal', 'standard', 'verbose']);
31
+ // =============================================================================
32
+ // Core Schemas
33
+ // =============================================================================
34
+ /**
35
+ * Operation ID pattern: {type}_{identifier}
36
+ * Examples: local_llm_req_abc123, pattern_eval_a1b2c3d4, subprocess_semgrep
37
+ */
38
+ export const OperationId = z
39
+ .string()
40
+ .min(1)
41
+ .regex(/^[a-z_]+_[a-zA-Z0-9_-]+$/, 'Operation ID must match pattern {type}_{identifier}');
42
+ /**
43
+ * Allow-listed context fields for TimeoutEvent.
44
+ * Only these fields may appear in event context to prevent data leakage.
45
+ */
46
+ export const AllowedContextSchema = z
47
+ .object({
48
+ /** Agent that triggered the timeout */
49
+ agent_id: z.string().min(1).optional(),
50
+ /** File being processed (if applicable) */
51
+ file_path: z.string().min(1).optional(),
52
+ /** SHA-256 hash of pattern (first 16 chars, no raw patterns) */
53
+ pattern_hash: z
54
+ .string()
55
+ .regex(/^[a-f0-9]{16}$/)
56
+ .optional(),
57
+ /** Number of retries attempted before timeout */
58
+ retry_count: z.number().int().min(0).optional(),
59
+ /** LLM model identifier (if applicable) */
60
+ model_name: z.string().min(1).optional(),
61
+ })
62
+ .strict(); // Reject unknown fields
63
+ /**
64
+ * Core timeout event schema.
65
+ * Immutable record of a single timeout occurrence.
66
+ */
67
+ export const TimeoutEventSchema = z.object({
68
+ /** Unique identifier for the operation (pattern: {type}_{identifier}) */
69
+ operation_id: OperationId,
70
+ /** Actual elapsed time in milliseconds */
71
+ duration_ms: z.number().min(0),
72
+ /** Configured timeout threshold in milliseconds */
73
+ threshold_ms: z.number().positive(),
74
+ /** ISO-8601 datetime when timeout was detected */
75
+ timestamp: z.string().datetime(),
76
+ /** Severity classification */
77
+ severity: TimeoutSeverity,
78
+ /** Optional allow-listed metadata */
79
+ allowed_context: AllowedContextSchema.optional(),
80
+ });
81
+ /**
82
+ * Configuration controlling telemetry behavior.
83
+ */
84
+ export const TelemetryConfigSchema = z
85
+ .object({
86
+ /** Master switch for telemetry emission */
87
+ enabled: z.boolean(),
88
+ /** List of active backends */
89
+ backends: z.array(TelemetryBackendType).min(1),
90
+ /** File path for JSONL backend output (required if jsonl backend used) */
91
+ jsonl_path: z.string().min(1).nullable().optional(),
92
+ /** Verbosity level for output */
93
+ verbosity: TelemetryVerbosity.default('standard'),
94
+ /** Max events to buffer before flush (JSONL only) */
95
+ buffer_size: z.number().int().min(1).max(10000).default(100),
96
+ /** Periodic flush interval in ms (JSONL only) */
97
+ flush_interval_ms: z.number().int().min(100).max(60000).default(5000),
98
+ })
99
+ .refine((config) => {
100
+ // If jsonl backend is enabled, jsonl_path must be provided
101
+ if (config.backends.includes('jsonl')) {
102
+ return config.jsonl_path != null && config.jsonl_path.length > 0;
103
+ }
104
+ return true;
105
+ }, {
106
+ message: 'jsonl_path is required when jsonl backend is enabled',
107
+ path: ['jsonl_path'],
108
+ });
109
+ // =============================================================================
110
+ // Default Configuration
111
+ // =============================================================================
112
+ /**
113
+ * Default telemetry configuration.
114
+ * Telemetry is disabled by default.
115
+ */
116
+ export const DEFAULT_TELEMETRY_CONFIG = {
117
+ enabled: false,
118
+ backends: ['console'],
119
+ jsonl_path: null,
120
+ verbosity: 'standard',
121
+ buffer_size: 100,
122
+ flush_interval_ms: 5000,
123
+ };
124
+ /**
125
+ * Creates a TimeoutEvent with auto-generated timestamp.
126
+ */
127
+ export function createTimeoutEvent(input) {
128
+ return TimeoutEventSchema.parse({
129
+ ...input,
130
+ timestamp: new Date().toISOString(),
131
+ });
132
+ }
133
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/telemetry/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Trust Module
3
+ * Validates whether a PR should be reviewed based on trust rules
4
+ */
5
+ import type { Config } from './config.js';
6
+ export interface PullRequestContext {
7
+ /** PR number */
8
+ number: number;
9
+ /** Source repository full name (owner/repo) */
10
+ headRepo: string;
11
+ /** Target repository full name (owner/repo) */
12
+ baseRepo: string;
13
+ /** Author's username */
14
+ author: string;
15
+ /** Whether the PR is from a fork */
16
+ isFork: boolean;
17
+ /** Whether the PR is marked as draft */
18
+ isDraft: boolean;
19
+ }
20
+ export interface TrustResult {
21
+ trusted: boolean;
22
+ reason?: string;
23
+ }
24
+ /**
25
+ * Check if a PR is trusted and should be reviewed
26
+ */
27
+ export declare function checkTrust(context: PullRequestContext, config: Config): TrustResult;
28
+ /**
29
+ * Build PR context from GitHub event payload
30
+ */
31
+ export declare function buildPRContext(payload: GitHubPullRequestPayload): PullRequestContext;
32
+ export interface GitHubPullRequestPayload {
33
+ pull_request: {
34
+ number: number;
35
+ draft?: boolean;
36
+ user: {
37
+ login: string;
38
+ };
39
+ head: {
40
+ sha: string;
41
+ ref: string;
42
+ repo?: {
43
+ full_name: string;
44
+ };
45
+ };
46
+ base: {
47
+ sha: string;
48
+ ref: string;
49
+ repo: {
50
+ full_name: string;
51
+ };
52
+ };
53
+ };
54
+ }
55
+ /**
56
+ * Build PR context from Azure DevOps environment variables
57
+ * Returns null if not running in an ADO PR context
58
+ */
59
+ export declare function buildADOPRContext(env: Record<string, string | undefined>): PullRequestContext | null;
60
+ /**
61
+ * Check if a PR is in draft status via ADO API
62
+ * ADO doesn't expose draft status in environment variables
63
+ */
64
+ export declare function isPRDraft(organization: string, project: string, repositoryId: string, pullRequestId: number, token: string): Promise<boolean>;
65
+ //# sourceMappingURL=trust.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust.d.ts","sourceRoot":"","sources":["../src/trust.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,WAAW,kBAAkB;IACjC,gBAAgB;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,wBAAwB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,wCAAwC;IACxC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,CAmBnF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,wBAAwB,GAAG,kBAAkB,CAWpF;AAGD,MAAM,WAAW,wBAAwB;IACvC,YAAY,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,IAAI,EAAE;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;QACxB,IAAI,EAAE;YACJ,GAAG,EAAE,MAAM,CAAC;YACZ,GAAG,EAAE,MAAM,CAAC;YACZ,IAAI,CAAC,EAAE;gBAAE,SAAS,EAAE,MAAM,CAAA;aAAE,CAAC;SAC9B,CAAC;QACF,IAAI,EAAE;YACJ,GAAG,EAAE,MAAM,CAAC;YACZ,GAAG,EAAE,MAAM,CAAC;YACZ,IAAI,EAAE;gBAAE,SAAS,EAAE,MAAM,CAAA;aAAE,CAAC;SAC7B,CAAC;KACH,CAAC;CACH;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACtC,kBAAkB,GAAG,IAAI,CAe3B;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,CAAC,CAkBlB"}
package/dist/trust.js ADDED
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Trust Module
3
+ * Validates whether a PR should be reviewed based on trust rules
4
+ */
5
+ /**
6
+ * Check if a PR is trusted and should be reviewed
7
+ */
8
+ export function checkTrust(context, config) {
9
+ // Skip draft PRs
10
+ if (context.isDraft) {
11
+ return {
12
+ trusted: false,
13
+ reason: 'Skipping draft PR',
14
+ };
15
+ }
16
+ // If trusted_only is enabled, block fork PRs
17
+ if (config.trusted_only && context.isFork) {
18
+ return {
19
+ trusted: false,
20
+ reason: `Fork PRs are not trusted (${context.headRepo} → ${context.baseRepo})`,
21
+ };
22
+ }
23
+ // All checks passed
24
+ return { trusted: true };
25
+ }
26
+ /**
27
+ * Build PR context from GitHub event payload
28
+ */
29
+ export function buildPRContext(payload) {
30
+ const pr = payload.pull_request;
31
+ return {
32
+ number: pr.number,
33
+ headRepo: pr.head.repo?.full_name ?? '',
34
+ baseRepo: pr.base.repo.full_name,
35
+ author: pr.user.login,
36
+ isFork: pr.head.repo?.full_name !== pr.base.repo.full_name,
37
+ isDraft: pr.draft ?? false,
38
+ };
39
+ }
40
+ /**
41
+ * Build PR context from Azure DevOps environment variables
42
+ * Returns null if not running in an ADO PR context
43
+ */
44
+ export function buildADOPRContext(env) {
45
+ const prId = env['SYSTEM_PULLREQUEST_PULLREQUESTID'];
46
+ if (!prId)
47
+ return null; // Not a PR build
48
+ const sourceRepoUri = env['SYSTEM_PULLREQUEST_SOURCEREPOSITORYURI'] ?? '';
49
+ const targetRepoUri = env['BUILD_REPOSITORY_URI'] ?? '';
50
+ return {
51
+ number: parseInt(prId, 10),
52
+ headRepo: sourceRepoUri,
53
+ baseRepo: targetRepoUri,
54
+ author: env['BUILD_REQUESTEDFOR'] ?? 'unknown',
55
+ isFork: sourceRepoUri !== '' && sourceRepoUri !== targetRepoUri,
56
+ isDraft: false, // Default - requires API call to enrich
57
+ };
58
+ }
59
+ /**
60
+ * Check if a PR is in draft status via ADO API
61
+ * ADO doesn't expose draft status in environment variables
62
+ */
63
+ export async function isPRDraft(organization, project, repositoryId, pullRequestId, token) {
64
+ try {
65
+ const response = await fetch(`https://dev.azure.com/${organization}/${project}/_apis/git/repositories/${repositoryId}/pullRequests/${pullRequestId}?api-version=7.1`, { headers: { Authorization: `Bearer ${token}` } });
66
+ if (!response.ok) {
67
+ console.warn(`[trust] Failed to fetch PR details: ${response.status}`);
68
+ return false; // Fail open - assume not draft
69
+ }
70
+ const pr = (await response.json());
71
+ return pr.isDraft === true;
72
+ }
73
+ catch (error) {
74
+ console.warn(`[trust] Error checking draft status: ${error}`);
75
+ return false; // Fail open - assume not draft
76
+ }
77
+ }
78
+ //# sourceMappingURL=trust.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust.js","sourceRoot":"","sources":["../src/trust.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Exhaustive switch utility for discriminated unions
3
+ *
4
+ * Use in the default branch of switch statements to ensure all cases are handled.
5
+ * TypeScript will produce a compile error if any case is missing.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * type Status = 'success' | 'failure' | 'skipped';
10
+ *
11
+ * function handle(status: Status): string {
12
+ * switch (status) {
13
+ * case 'success':
14
+ * return 'ok';
15
+ * case 'failure':
16
+ * return 'failed';
17
+ * case 'skipped':
18
+ * return 'skip';
19
+ * default:
20
+ * return assertNever(status); // Compile error if case missing
21
+ * }
22
+ * }
23
+ * ```
24
+ *
25
+ * @param x - The value that should be of type `never` if all cases are handled
26
+ * @param message - Optional custom error message
27
+ * @throws Error if called at runtime (indicates missing switch case)
28
+ */
29
+ export declare function assertNever(x: never, message?: string): never;
30
+ //# sourceMappingURL=assert-never.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assert-never.d.ts","sourceRoot":"","sources":["../../src/types/assert-never.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAE7D"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Exhaustive switch utility for discriminated unions
3
+ *
4
+ * Use in the default branch of switch statements to ensure all cases are handled.
5
+ * TypeScript will produce a compile error if any case is missing.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * type Status = 'success' | 'failure' | 'skipped';
10
+ *
11
+ * function handle(status: Status): string {
12
+ * switch (status) {
13
+ * case 'success':
14
+ * return 'ok';
15
+ * case 'failure':
16
+ * return 'failed';
17
+ * case 'skipped':
18
+ * return 'skip';
19
+ * default:
20
+ * return assertNever(status); // Compile error if case missing
21
+ * }
22
+ * }
23
+ * ```
24
+ *
25
+ * @param x - The value that should be of type `never` if all cases are handled
26
+ * @param message - Optional custom error message
27
+ * @throws Error if called at runtime (indicates missing switch case)
28
+ */
29
+ export function assertNever(x, message) {
30
+ throw new Error(message ?? `Unexpected value: ${JSON.stringify(x)}`);
31
+ }
32
+ //# sourceMappingURL=assert-never.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assert-never.js","sourceRoot":"","sources":["../../src/types/assert-never.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,WAAW,CAAC,CAAQ,EAAE,OAAgB;IACpD,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,qBAAqB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACvE,CAAC"}