@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,423 @@
1
+ /**
2
+ * Result Type for Type-Safe Error Handling
3
+ *
4
+ * This module provides:
5
+ * - Result<T, E>: Discriminated union for success/failure
6
+ * - Ok/Err constructors
7
+ * - Type guards (isOk, isErr)
8
+ * - Utility functions (map, flatMap, match, collect, partition)
9
+ * - wrapThrowing/wrapThrowingAsync for backward compatibility
10
+ *
11
+ * Use Result for internal operations to enforce compile-time error handling.
12
+ * Use wrapThrowing for public APIs that need to maintain backward compatibility.
13
+ */
14
+ import { z } from 'zod';
15
+ // =============================================================================
16
+ // Result Constructors
17
+ // =============================================================================
18
+ /**
19
+ * Create a success result
20
+ *
21
+ * Uses `const` type parameter (TypeScript 5.0+) to preserve literal types.
22
+ *
23
+ * @param value - The success value
24
+ * @returns A Result with ok: true and the value
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * const result = Ok(42);
29
+ * // result: Result<42, never> (literal type preserved)
30
+ * ```
31
+ */
32
+ export function Ok(value) {
33
+ return { ok: true, value };
34
+ }
35
+ /**
36
+ * Create a failure result
37
+ *
38
+ * Uses `const` type parameter (TypeScript 5.0+) to preserve literal types.
39
+ *
40
+ * @param error - The error value
41
+ * @returns A Result with ok: false and the error
42
+ *
43
+ * @example
44
+ * ```typescript
45
+ * const result = Err(new ValidationError('invalid', ...));
46
+ * // result: Result<never, ValidationError>
47
+ * ```
48
+ */
49
+ export function Err(error) {
50
+ return { ok: false, error };
51
+ }
52
+ // =============================================================================
53
+ // Type Guards
54
+ // =============================================================================
55
+ /**
56
+ * Type guard for success results
57
+ *
58
+ * @example
59
+ * ```typescript
60
+ * const result = loadConfig(path);
61
+ * if (isOk(result)) {
62
+ * // TypeScript knows result.value exists here
63
+ * console.log(result.value);
64
+ * }
65
+ * ```
66
+ */
67
+ export function isOk(result) {
68
+ return result.ok === true;
69
+ }
70
+ /**
71
+ * Type guard for failure results
72
+ *
73
+ * @example
74
+ * ```typescript
75
+ * const result = loadConfig(path);
76
+ * if (isErr(result)) {
77
+ * // TypeScript knows result.error exists here
78
+ * console.error(result.error);
79
+ * }
80
+ * ```
81
+ */
82
+ export function isErr(result) {
83
+ return result.ok === false;
84
+ }
85
+ // =============================================================================
86
+ // Result Utilities
87
+ // =============================================================================
88
+ /**
89
+ * Unwrap a result, throwing if it's an error
90
+ *
91
+ * @param result - The result to unwrap
92
+ * @returns The success value
93
+ * @throws The error value if result is Err
94
+ *
95
+ * @example
96
+ * ```typescript
97
+ * const config = unwrap(loadConfig(path)); // throws if Err
98
+ * ```
99
+ */
100
+ export function unwrap(result) {
101
+ if (isOk(result)) {
102
+ return result.value;
103
+ }
104
+ throw result.error;
105
+ }
106
+ /**
107
+ * Unwrap a result with a default value for errors
108
+ *
109
+ * @param result - The result to unwrap
110
+ * @param defaultValue - Value to return if result is Err
111
+ * @returns The success value or default value
112
+ */
113
+ export function unwrapOr(result, defaultValue) {
114
+ return isOk(result) ? result.value : defaultValue;
115
+ }
116
+ /**
117
+ * Unwrap a result with a lazy default for errors
118
+ *
119
+ * @param result - The result to unwrap
120
+ * @param defaultFn - Function to compute default value from error
121
+ * @returns The success value or computed default
122
+ */
123
+ export function unwrapOrElse(result, defaultFn) {
124
+ return isOk(result) ? result.value : defaultFn(result.error);
125
+ }
126
+ /**
127
+ * Map the success value
128
+ *
129
+ * @param result - The result to map
130
+ * @param fn - Function to apply to success value
131
+ * @returns New Result with mapped value
132
+ *
133
+ * @example
134
+ * ```typescript
135
+ * const result = map(Ok(5), x => x * 2); // Ok(10)
136
+ * ```
137
+ */
138
+ export function map(result, fn) {
139
+ return isOk(result) ? Ok(fn(result.value)) : result;
140
+ }
141
+ /**
142
+ * Map the error value
143
+ *
144
+ * @param result - The result to map
145
+ * @param fn - Function to apply to error value
146
+ * @returns New Result with mapped error
147
+ */
148
+ export function mapErr(result, fn) {
149
+ return isErr(result) ? Err(fn(result.error)) : result;
150
+ }
151
+ /**
152
+ * FlatMap (chain) the success value
153
+ *
154
+ * @param result - The result to flatMap
155
+ * @param fn - Function that returns a new Result
156
+ * @returns The new Result from fn, or the original error
157
+ *
158
+ * @example
159
+ * ```typescript
160
+ * const result = flatMap(loadConfig(path), config =>
161
+ * validateConfig(config)
162
+ * );
163
+ * ```
164
+ */
165
+ export function flatMap(result, fn) {
166
+ return isOk(result) ? fn(result.value) : result;
167
+ }
168
+ /**
169
+ * Pattern match on result variants
170
+ *
171
+ * @param result - The result to match
172
+ * @param handlers - Object with ok and err handler functions
173
+ * @returns The result of the matching handler
174
+ *
175
+ * @example
176
+ * ```typescript
177
+ * const message = match(result, {
178
+ * ok: value => `Success: ${value}`,
179
+ * err: error => `Error: ${error.message}`,
180
+ * });
181
+ * ```
182
+ */
183
+ export function match(result, handlers) {
184
+ return isOk(result) ? handlers.ok(result.value) : handlers.err(result.error);
185
+ }
186
+ // =============================================================================
187
+ // Async Result Utilities
188
+ // =============================================================================
189
+ /**
190
+ * Wrap a promise that may throw into a Result
191
+ *
192
+ * @param promise - The promise to wrap
193
+ * @param mapError - Optional function to map caught errors
194
+ * @returns Promise of Result
195
+ *
196
+ * @example
197
+ * ```typescript
198
+ * const result = await fromPromise(
199
+ * fetch('/api/data'),
200
+ * err => new NetworkError('fetch failed', NetworkErrorCode.CONNECTION_FAILED, {}, { cause: err })
201
+ * );
202
+ * ```
203
+ */
204
+ export async function fromPromise(promise, mapError) {
205
+ try {
206
+ const value = await promise;
207
+ return Ok(value);
208
+ }
209
+ catch (error) {
210
+ return Err(mapError ? mapError(error) : error);
211
+ }
212
+ }
213
+ /**
214
+ * Convert a Result to a Promise
215
+ *
216
+ * @param result - The result to convert
217
+ * @returns Promise that resolves with value or rejects with error
218
+ */
219
+ export function toPromise(result) {
220
+ return isOk(result) ? Promise.resolve(result.value) : Promise.reject(result.error);
221
+ }
222
+ /**
223
+ * Async version of map
224
+ */
225
+ export async function mapAsync(result, fn) {
226
+ if (isOk(result)) {
227
+ try {
228
+ const value = await fn(result.value);
229
+ return Ok(value);
230
+ }
231
+ catch {
232
+ // If fn throws, we can't convert to E, so we return the original result
233
+ // This should be used with fromPromise instead for proper error handling
234
+ throw new Error('mapAsync fn threw - use fromPromise for proper error handling');
235
+ }
236
+ }
237
+ return result;
238
+ }
239
+ /**
240
+ * Async version of flatMap
241
+ */
242
+ export async function flatMapAsync(result, fn) {
243
+ return isOk(result) ? fn(result.value) : result;
244
+ }
245
+ // =============================================================================
246
+ // Collection Utilities
247
+ // =============================================================================
248
+ /**
249
+ * Collect an array of Results into a Result of array
250
+ *
251
+ * Returns Err with first error if any result is Err.
252
+ * Use partition() if you want to collect all successes and failures.
253
+ *
254
+ * @param results - Array of Results to collect
255
+ * @returns Result containing all values or first error
256
+ *
257
+ * @example
258
+ * ```typescript
259
+ * const results = files.map(f => validateFile(f));
260
+ * const allOrNone = collect(results);
261
+ * if (isOk(allOrNone)) {
262
+ * // allOrNone.value is all validated files
263
+ * }
264
+ * ```
265
+ */
266
+ export function collect(results) {
267
+ const values = [];
268
+ for (const result of results) {
269
+ if (isErr(result)) {
270
+ return result;
271
+ }
272
+ values.push(result.value);
273
+ }
274
+ return Ok(values);
275
+ }
276
+ /**
277
+ * Partition an array of Results into successes and failures
278
+ *
279
+ * Unlike collect(), this continues processing all results.
280
+ *
281
+ * @param results - Array of Results to partition
282
+ * @returns Object with ok array (values) and err array (errors)
283
+ *
284
+ * @example
285
+ * ```typescript
286
+ * const { ok: successes, err: failures } = partition(results);
287
+ * console.log(`${successes.length} succeeded, ${failures.length} failed`);
288
+ * ```
289
+ */
290
+ export function partition(results) {
291
+ const ok = [];
292
+ const err = [];
293
+ for (const result of results) {
294
+ if (isOk(result)) {
295
+ ok.push(result.value);
296
+ }
297
+ else {
298
+ err.push(result.error);
299
+ }
300
+ }
301
+ return { ok, err };
302
+ }
303
+ // =============================================================================
304
+ // Zod Schema Factory
305
+ // =============================================================================
306
+ /**
307
+ * Create a Zod schema for Result<T, E>
308
+ *
309
+ * @param successSchema - Zod schema for success value
310
+ * @param errorSchema - Zod schema for error value
311
+ * @returns Zod schema for Result type
312
+ */
313
+ export function ResultSchema(successSchema, errorSchema) {
314
+ return z.discriminatedUnion('ok', [
315
+ z.object({
316
+ ok: z.literal(true),
317
+ value: successSchema,
318
+ }),
319
+ z.object({
320
+ ok: z.literal(false),
321
+ error: errorSchema,
322
+ }),
323
+ ]);
324
+ }
325
+ // =============================================================================
326
+ // Backward Compatibility Wrapper Factory
327
+ // =============================================================================
328
+ /**
329
+ * Create a throwing wrapper for a function that returns Result
330
+ *
331
+ * Use this to maintain backward compatibility for public APIs that
332
+ * previously threw errors but now use Result internally.
333
+ *
334
+ * @param fn - Function that returns Result
335
+ * @returns Function that throws on error, returns value on success
336
+ *
337
+ * @example
338
+ * ```typescript
339
+ * // Internal function uses Result
340
+ * function loadConfigInternal(path: string): Result<Config, ConfigError> {
341
+ * // ... returns Ok(config) or Err(error)
342
+ * }
343
+ *
344
+ * // Public API throws (backward compatible)
345
+ * export const loadConfig = wrapThrowing(loadConfigInternal);
346
+ * // loadConfig throws ConfigError on failure
347
+ * ```
348
+ */
349
+ export function wrapThrowing(fn) {
350
+ return (...args) => {
351
+ const result = fn(...args);
352
+ if (isOk(result)) {
353
+ return result.value;
354
+ }
355
+ throw result.error;
356
+ };
357
+ }
358
+ /**
359
+ * Async version of wrapThrowing
360
+ *
361
+ * @param fn - Async function that returns Promise<Result>
362
+ * @returns Async function that throws on error, returns value on success
363
+ *
364
+ * @example
365
+ * ```typescript
366
+ * // Internal function uses Result
367
+ * async function fetchDataInternal(url: string): Promise<Result<Data, NetworkError>> {
368
+ * // ... returns Ok(data) or Err(error)
369
+ * }
370
+ *
371
+ * // Public API throws (backward compatible)
372
+ * export const fetchData = wrapThrowingAsync(fetchDataInternal);
373
+ * ```
374
+ */
375
+ export function wrapThrowingAsync(fn) {
376
+ return async (...args) => {
377
+ const result = await fn(...args);
378
+ if (isOk(result)) {
379
+ return result.value;
380
+ }
381
+ throw result.error;
382
+ };
383
+ }
384
+ /**
385
+ * Convert a throwing function to one that returns Result
386
+ *
387
+ * @param fn - Function that may throw
388
+ * @param mapError - Function to convert caught errors
389
+ * @returns Function that returns Result
390
+ *
391
+ * @example
392
+ * ```typescript
393
+ * const safeParseJSON = tryCatch(
394
+ * JSON.parse,
395
+ * err => new ValidationError('Invalid JSON', ...)
396
+ * );
397
+ * const result = safeParseJSON(input); // Result<unknown, ValidationError>
398
+ * ```
399
+ */
400
+ export function tryCatch(fn, mapError) {
401
+ return (...args) => {
402
+ try {
403
+ return Ok(fn(...args));
404
+ }
405
+ catch (error) {
406
+ return Err(mapError(error));
407
+ }
408
+ };
409
+ }
410
+ /**
411
+ * Async version of tryCatch
412
+ */
413
+ export function tryCatchAsync(fn, mapError) {
414
+ return async (...args) => {
415
+ try {
416
+ return Ok(await fn(...args));
417
+ }
418
+ catch (error) {
419
+ return Err(mapError(error));
420
+ }
421
+ };
422
+ }
423
+ //# sourceMappingURL=result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/types/result.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@oddessentials/odd-ai-reviewers",
3
+ "version": "1.0.0",
4
+ "description": "AI-powered code review CLI - run locally or in CI/CD pipelines",
5
+ "type": "module",
6
+ "main": "dist/main.js",
7
+ "bin": {
8
+ "ai-review": "dist/main.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "README.md"
13
+ ],
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "git+https://github.com/oddessentials/odd-ai-reviewers.git"
17
+ },
18
+ "keywords": [
19
+ "ai",
20
+ "code-review",
21
+ "cli",
22
+ "llm",
23
+ "openai",
24
+ "anthropic",
25
+ "developer-tools"
26
+ ],
27
+ "author": "ODD Essentials",
28
+ "license": "MIT",
29
+ "bugs": {
30
+ "url": "https://github.com/oddessentials/odd-ai-reviewers/issues"
31
+ },
32
+ "homepage": "https://github.com/oddessentials/odd-ai-reviewers#readme",
33
+ "scripts": {
34
+ "build": "tsc",
35
+ "dev": "tsc --watch",
36
+ "start": "node dist/main.js",
37
+ "test": "vitest run",
38
+ "test:watch": "vitest",
39
+ "test:coverage": "vitest run --coverage",
40
+ "test:ci": "vitest run --reporter=json --outputFile=test-results.json",
41
+ "test:ci:coverage": "vitest run --coverage --reporter=json --reporter=dot --outputFile=test-results.json",
42
+ "typecheck": "tsc --noEmit"
43
+ },
44
+ "dependencies": {
45
+ "@actions/cache": "5.0.5",
46
+ "@anthropic-ai/sdk": "0.71.2",
47
+ "@octokit/rest": "^22.0.1",
48
+ "commander": "^14.0.2",
49
+ "minimatch": "^10.1.1",
50
+ "openai": "^6.17.0",
51
+ "typescript": "5.9.3",
52
+ "yaml": "^2.8.2",
53
+ "zod": "^4.3.6"
54
+ },
55
+ "devDependencies": {
56
+ "@types/node": "25.1.0",
57
+ "@vitest/coverage-v8": "4.0.18",
58
+ "vitest": "^4.0.18"
59
+ },
60
+ "engines": {
61
+ "node": ">=22.0.0"
62
+ }
63
+ }