@far-world-labs/verblets 0.2.0 → 0.3.2

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 (330) hide show
  1. package/README.md +86 -213
  2. package/dist/index.browser.js +74 -0
  3. package/dist/index.js +548 -0
  4. package/dist/shared-C6kPWghF.js +7806 -0
  5. package/package.json +32 -11
  6. package/.cursor/launch.json +0 -30
  7. package/.cursor/settings.json +0 -20
  8. package/.github/workflows/branch-protection.yml +0 -22
  9. package/.github/workflows/ci.yml +0 -165
  10. package/.husky/pre-commit +0 -4
  11. package/.prettierrc +0 -6
  12. package/.release-it.json +0 -12
  13. package/.vitest.config.examples.js +0 -12
  14. package/.vitest.config.js +0 -8
  15. package/.vscode/launch.json +0 -31
  16. package/AGENTS.md +0 -220
  17. package/DEVELOPING.md +0 -105
  18. package/docker-compose.yml +0 -7
  19. package/eslint.config.js +0 -80
  20. package/scripts/clear-redis.js +0 -74
  21. package/scripts/generate-chain/index.js +0 -111
  22. package/scripts/generate-lib/index.js +0 -68
  23. package/scripts/generate-test/index.js +0 -137
  24. package/scripts/generate-verblet/README.md +0 -17
  25. package/scripts/generate-verblet/index.js +0 -110
  26. package/scripts/run.sh +0 -15
  27. package/scripts/runner/index.js +0 -56
  28. package/scripts/simple-editor/README.md +0 -34
  29. package/scripts/simple-editor/index.js +0 -79
  30. package/scripts/summarize-files/index.js +0 -70
  31. package/src/chains/README.md +0 -30
  32. package/src/chains/anonymize/README.md +0 -21
  33. package/src/chains/anonymize/index.examples.js +0 -75
  34. package/src/chains/anonymize/index.js +0 -121
  35. package/src/chains/anonymize/index.spec.js +0 -78
  36. package/src/chains/bulk-central-tendency/index.examples.js +0 -138
  37. package/src/chains/bulk-central-tendency/index.js +0 -91
  38. package/src/chains/bulk-filter/README.md +0 -21
  39. package/src/chains/bulk-filter/index.examples.js +0 -22
  40. package/src/chains/bulk-filter/index.js +0 -58
  41. package/src/chains/bulk-filter/index.spec.js +0 -38
  42. package/src/chains/bulk-find/README.md +0 -16
  43. package/src/chains/bulk-find/index.examples.js +0 -20
  44. package/src/chains/bulk-find/index.js +0 -30
  45. package/src/chains/bulk-find/index.spec.js +0 -26
  46. package/src/chains/bulk-group/README.md +0 -23
  47. package/src/chains/bulk-group/index.examples.js +0 -18
  48. package/src/chains/bulk-group/index.js +0 -34
  49. package/src/chains/bulk-group/index.spec.js +0 -41
  50. package/src/chains/bulk-map/README.md +0 -43
  51. package/src/chains/bulk-map/index.examples.js +0 -17
  52. package/src/chains/bulk-map/index.js +0 -86
  53. package/src/chains/bulk-map/index.spec.js +0 -44
  54. package/src/chains/bulk-reduce/README.md +0 -12
  55. package/src/chains/bulk-reduce/index.examples.js +0 -15
  56. package/src/chains/bulk-reduce/index.js +0 -13
  57. package/src/chains/bulk-reduce/index.spec.js +0 -25
  58. package/src/chains/bulk-score/README.md +0 -16
  59. package/src/chains/bulk-score/bulk-score-result.json +0 -18
  60. package/src/chains/bulk-score/index.examples.js +0 -22
  61. package/src/chains/bulk-score/index.js +0 -133
  62. package/src/chains/bulk-score/index.spec.js +0 -30
  63. package/src/chains/category-samples/README.md +0 -61
  64. package/src/chains/category-samples/index.examples.js +0 -103
  65. package/src/chains/category-samples/index.js +0 -134
  66. package/src/chains/collect-terms/README.md +0 -12
  67. package/src/chains/collect-terms/index.examples.js +0 -16
  68. package/src/chains/collect-terms/index.js +0 -44
  69. package/src/chains/collect-terms/index.spec.js +0 -25
  70. package/src/chains/conversation/README.md +0 -26
  71. package/src/chains/conversation/index.examples.js +0 -398
  72. package/src/chains/conversation/index.js +0 -126
  73. package/src/chains/conversation/index.spec.js +0 -148
  74. package/src/chains/conversation/turn-policies.js +0 -93
  75. package/src/chains/conversation/turn-policies.md +0 -123
  76. package/src/chains/conversation/turn-policies.spec.js +0 -135
  77. package/src/chains/date/README.md +0 -12
  78. package/src/chains/date/index.examples.js +0 -47
  79. package/src/chains/date/index.js +0 -74
  80. package/src/chains/date/index.spec.js +0 -62
  81. package/src/chains/disambiguate/README.md +0 -22
  82. package/src/chains/disambiguate/disambiguate-meanings-result.json +0 -16
  83. package/src/chains/disambiguate/index.examples.js +0 -18
  84. package/src/chains/disambiguate/index.js +0 -92
  85. package/src/chains/disambiguate/index.spec.js +0 -25
  86. package/src/chains/dismantle/README.md +0 -67
  87. package/src/chains/dismantle/dismantle.examples.js +0 -27
  88. package/src/chains/dismantle/index.examples.js +0 -30
  89. package/src/chains/dismantle/index.js +0 -303
  90. package/src/chains/dismantle/index.spec.js +0 -32
  91. package/src/chains/expect/README.md +0 -171
  92. package/src/chains/expect/index.examples.js +0 -146
  93. package/src/chains/expect/index.js +0 -207
  94. package/src/chains/expect/index.spec.js +0 -324
  95. package/src/chains/filter-ambiguous/README.md +0 -11
  96. package/src/chains/filter-ambiguous/index.examples.js +0 -20
  97. package/src/chains/filter-ambiguous/index.js +0 -49
  98. package/src/chains/filter-ambiguous/index.spec.js +0 -31
  99. package/src/chains/glossary/README.md +0 -19
  100. package/src/chains/glossary/index.examples.js +0 -386
  101. package/src/chains/glossary/index.js +0 -75
  102. package/src/chains/glossary/index.spec.js +0 -19
  103. package/src/chains/intersections/README.md +0 -166
  104. package/src/chains/intersections/index.examples.js +0 -280
  105. package/src/chains/intersections/index.js +0 -218
  106. package/src/chains/intersections/intersection-result.json +0 -38
  107. package/src/chains/list/index.examples.js +0 -68
  108. package/src/chains/list/index.js +0 -214
  109. package/src/chains/list/index.spec.js +0 -67
  110. package/src/chains/list/list-result.json +0 -16
  111. package/src/chains/list/schema.json +0 -24
  112. package/src/chains/llm-logger/README.md +0 -366
  113. package/src/chains/llm-logger/index.js +0 -591
  114. package/src/chains/llm-logger/index.spec.js +0 -391
  115. package/src/chains/llm-logger/schema.json +0 -105
  116. package/src/chains/questions/index.examples.js +0 -69
  117. package/src/chains/questions/index.js +0 -135
  118. package/src/chains/questions/index.spec.js +0 -29
  119. package/src/chains/scan-js/index.js +0 -116
  120. package/src/chains/set-interval/README.md +0 -81
  121. package/src/chains/set-interval/index.examples.js +0 -64
  122. package/src/chains/set-interval/index.js +0 -152
  123. package/src/chains/set-interval/index.spec.js +0 -70
  124. package/src/chains/socratic/README.md +0 -17
  125. package/src/chains/socratic/index.js +0 -64
  126. package/src/chains/socratic/index.spec.js +0 -24
  127. package/src/chains/sort/index.examples.js +0 -36
  128. package/src/chains/sort/index.js +0 -163
  129. package/src/chains/sort/index.spec.js +0 -112
  130. package/src/chains/sort/sort-result.json +0 -16
  131. package/src/chains/summary-map/README.md +0 -41
  132. package/src/chains/summary-map/index.examples.js +0 -64
  133. package/src/chains/summary-map/index.js +0 -226
  134. package/src/chains/summary-map/index.spec.js +0 -153
  135. package/src/chains/test/index.js +0 -114
  136. package/src/chains/test-advice/index.js +0 -35
  137. package/src/chains/themes/README.md +0 -20
  138. package/src/chains/themes/index.examples.js +0 -17
  139. package/src/chains/themes/index.js +0 -28
  140. package/src/chains/themes/index.spec.js +0 -19
  141. package/src/chains/veiled-variants/index.examples.js +0 -18
  142. package/src/chains/veiled-variants/index.js +0 -107
  143. package/src/chains/veiled-variants/index.spec.js +0 -40
  144. package/src/constants/common.js +0 -13
  145. package/src/constants/messages.js +0 -3
  146. package/src/constants/models.js +0 -184
  147. package/src/index.js +0 -203
  148. package/src/json-schemas/README.md +0 -13
  149. package/src/json-schemas/cars-test.json +0 -11
  150. package/src/json-schemas/index.js +0 -12
  151. package/src/json-schemas/intent.json +0 -38
  152. package/src/json-schemas/schema-dot-org-photograph.json +0 -133
  153. package/src/json-schemas/schema-dot-org-place.json +0 -129
  154. package/src/lib/README.md +0 -26
  155. package/src/lib/any-signal/index.js +0 -28
  156. package/src/lib/assert/README.md +0 -84
  157. package/src/lib/assert/index.js +0 -50
  158. package/src/lib/bulk-filter/README.md +0 -22
  159. package/src/lib/bulk-filter/index.examples.js +0 -27
  160. package/src/lib/bulk-filter/index.js +0 -63
  161. package/src/lib/bulk-filter/index.spec.js +0 -38
  162. package/src/lib/bulk-find/README.md +0 -18
  163. package/src/lib/bulk-find/index.examples.js +0 -19
  164. package/src/lib/bulk-find/index.js +0 -30
  165. package/src/lib/bulk-find/index.spec.js +0 -41
  166. package/src/lib/chatgpt/index.js +0 -163
  167. package/src/lib/combinations/index.js +0 -30
  168. package/src/lib/combinations/index.spec.js +0 -23
  169. package/src/lib/editor/index.js +0 -31
  170. package/src/lib/functional/index.js +0 -28
  171. package/src/lib/logger-service/index.js +0 -32
  172. package/src/lib/parse-js-parts/index.js +0 -321
  173. package/src/lib/parse-js-parts/index.spec.js +0 -156
  174. package/src/lib/parse-llm-list/README.md +0 -39
  175. package/src/lib/parse-llm-list/index.js +0 -54
  176. package/src/lib/parse-llm-list/index.spec.js +0 -59
  177. package/src/lib/path-aliases/index.js +0 -37
  178. package/src/lib/path-aliases/index.spec.js +0 -64
  179. package/src/lib/pave/index.js +0 -34
  180. package/src/lib/pave/index.spec.js +0 -76
  181. package/src/lib/prompt-cache/index.js +0 -50
  182. package/src/lib/retry/index.js +0 -66
  183. package/src/lib/retry/index.spec.js +0 -86
  184. package/src/lib/ring-buffer/README.md +0 -82
  185. package/src/lib/ring-buffer/index.js +0 -235
  186. package/src/lib/ring-buffer/index.spec.js +0 -388
  187. package/src/lib/search-best-first/city-walk.spec.js +0 -37
  188. package/src/lib/search-best-first/index.js +0 -97
  189. package/src/lib/search-best-first/index.spec.js +0 -35
  190. package/src/lib/search-js-files/code-features-property-definitions.json +0 -123
  191. package/src/lib/search-js-files/index.examples.js +0 -22
  192. package/src/lib/search-js-files/index.js +0 -155
  193. package/src/lib/search-js-files/index.spec.js +0 -34
  194. package/src/lib/search-js-files/scan-file.js +0 -242
  195. package/src/lib/shorten-text/index.js +0 -25
  196. package/src/lib/shorten-text/index.spec.js +0 -68
  197. package/src/lib/strip-numeric/index.js +0 -5
  198. package/src/lib/strip-response/index.js +0 -30
  199. package/src/lib/template-replace/index.js +0 -23
  200. package/src/lib/template-replace/index.spec.js +0 -60
  201. package/src/lib/timed-abort-controller/index.js +0 -41
  202. package/src/lib/to-bool/index.js +0 -8
  203. package/src/lib/to-date/index.js +0 -11
  204. package/src/lib/to-enum/index.js +0 -14
  205. package/src/lib/to-number/index.js +0 -12
  206. package/src/lib/to-number-with-units/index.js +0 -51
  207. package/src/lib/transcribe/index.js +0 -78
  208. package/src/prompts/README.md +0 -17
  209. package/src/prompts/as-enum.js +0 -5
  210. package/src/prompts/as-json-schema.js +0 -9
  211. package/src/prompts/as-object-with-schema.js +0 -26
  212. package/src/prompts/as-schema-org-text.js +0 -25
  213. package/src/prompts/as-schema-org-type.js +0 -1
  214. package/src/prompts/blog-post.js +0 -7
  215. package/src/prompts/code-features.js +0 -24
  216. package/src/prompts/constants.js +0 -101
  217. package/src/prompts/features-json-schema.js +0 -27
  218. package/src/prompts/generate-collection.js +0 -26
  219. package/src/prompts/generate-list.js +0 -48
  220. package/src/prompts/generate-questions.js +0 -19
  221. package/src/prompts/index.js +0 -20
  222. package/src/prompts/intent.js +0 -60
  223. package/src/prompts/output-succinct-names.js +0 -3
  224. package/src/prompts/select-from-threshold.js +0 -17
  225. package/src/prompts/sort.js +0 -31
  226. package/src/prompts/style.js +0 -38
  227. package/src/prompts/summarize.js +0 -13
  228. package/src/prompts/token-budget.js +0 -3
  229. package/src/prompts/wrap-list.js +0 -11
  230. package/src/prompts/wrap-variable.js +0 -36
  231. package/src/services/llm-model/global-overrides.spec.js +0 -432
  232. package/src/services/llm-model/index.js +0 -308
  233. package/src/services/llm-model/model.js +0 -21
  234. package/src/services/llm-model/negotiate.spec.js +0 -447
  235. package/src/services/redis/index.js +0 -147
  236. package/src/test/setup.js +0 -20
  237. package/src/verblets/README.md +0 -26
  238. package/src/verblets/auto/index.examples.js +0 -31
  239. package/src/verblets/auto/index.js +0 -28
  240. package/src/verblets/auto/index.spec.js +0 -32
  241. package/src/verblets/bool/README.md +0 -36
  242. package/src/verblets/bool/index.examples.js +0 -80
  243. package/src/verblets/bool/index.js +0 -25
  244. package/src/verblets/bool/index.schema.json +0 -14
  245. package/src/verblets/bool/index.spec.js +0 -33
  246. package/src/verblets/central-tendency/README.md +0 -166
  247. package/src/verblets/central-tendency/central-tendency-result.json +0 -24
  248. package/src/verblets/central-tendency/index.examples.js +0 -196
  249. package/src/verblets/central-tendency/index.js +0 -171
  250. package/src/verblets/central-tendency/index.spec.js +0 -148
  251. package/src/verblets/conversation-turn/README.md +0 -33
  252. package/src/verblets/conversation-turn/index.examples.js +0 -218
  253. package/src/verblets/conversation-turn/index.js +0 -68
  254. package/src/verblets/conversation-turn/index.spec.js +0 -77
  255. package/src/verblets/conversation-turn-multi/README.md +0 -31
  256. package/src/verblets/conversation-turn-multi/index.examples.js +0 -160
  257. package/src/verblets/conversation-turn-multi/index.js +0 -104
  258. package/src/verblets/conversation-turn-multi/index.spec.js +0 -63
  259. package/src/verblets/enum/index.examples.js +0 -30
  260. package/src/verblets/enum/index.js +0 -18
  261. package/src/verblets/enum/index.spec.js +0 -35
  262. package/src/verblets/expect/README.md +0 -64
  263. package/src/verblets/expect/index.examples.js +0 -109
  264. package/src/verblets/expect/index.js +0 -75
  265. package/src/verblets/expect/index.spec.js +0 -127
  266. package/src/verblets/intent/index.examples.js +0 -139
  267. package/src/verblets/intent/index.js +0 -60
  268. package/src/verblets/intent/index.spec.js +0 -31
  269. package/src/verblets/intersection/README.md +0 -16
  270. package/src/verblets/intersection/index.examples.js +0 -89
  271. package/src/verblets/intersection/index.js +0 -125
  272. package/src/verblets/intersection/index.spec.js +0 -60
  273. package/src/verblets/intersection/intersection-result.json +0 -16
  274. package/src/verblets/list-expand/README.md +0 -10
  275. package/src/verblets/list-expand/index.examples.js +0 -14
  276. package/src/verblets/list-expand/index.js +0 -104
  277. package/src/verblets/list-expand/index.spec.js +0 -18
  278. package/src/verblets/list-expand/list-expand-result.json +0 -16
  279. package/src/verblets/list-filter/README.md +0 -22
  280. package/src/verblets/list-filter/index.examples.js +0 -26
  281. package/src/verblets/list-filter/index.js +0 -18
  282. package/src/verblets/list-filter/index.spec.js +0 -19
  283. package/src/verblets/list-find/README.md +0 -11
  284. package/src/verblets/list-find/index.examples.js +0 -15
  285. package/src/verblets/list-find/index.js +0 -17
  286. package/src/verblets/list-find/index.spec.js +0 -19
  287. package/src/verblets/list-group/README.md +0 -16
  288. package/src/verblets/list-group/index.examples.js +0 -16
  289. package/src/verblets/list-group/index.js +0 -112
  290. package/src/verblets/list-group/index.spec.js +0 -35
  291. package/src/verblets/list-group/list-group-result.json +0 -16
  292. package/src/verblets/list-map/README.md +0 -11
  293. package/src/verblets/list-map/index.examples.js +0 -15
  294. package/src/verblets/list-map/index.js +0 -26
  295. package/src/verblets/list-map/index.spec.js +0 -17
  296. package/src/verblets/list-reduce/README.md +0 -10
  297. package/src/verblets/list-reduce/index.examples.js +0 -14
  298. package/src/verblets/list-reduce/index.js +0 -21
  299. package/src/verblets/list-reduce/index.spec.js +0 -27
  300. package/src/verblets/list-reduce/index.spec.jsx +0 -27
  301. package/src/verblets/name/README.md +0 -15
  302. package/src/verblets/name/index.examples.js +0 -28
  303. package/src/verblets/name/index.js +0 -19
  304. package/src/verblets/name/index.spec.js +0 -33
  305. package/src/verblets/name-similar-to/README.md +0 -26
  306. package/src/verblets/name-similar-to/index.examples.js +0 -18
  307. package/src/verblets/name-similar-to/index.js +0 -20
  308. package/src/verblets/name-similar-to/index.spec.js +0 -13
  309. package/src/verblets/number/index.examples.js +0 -199
  310. package/src/verblets/number/index.js +0 -25
  311. package/src/verblets/number/index.spec.js +0 -33
  312. package/src/verblets/number-with-units/index.examples.js +0 -38
  313. package/src/verblets/number-with-units/index.js +0 -84
  314. package/src/verblets/number-with-units/index.spec.js +0 -46
  315. package/src/verblets/number-with-units/number-with-units-result.json +0 -23
  316. package/src/verblets/people-list/README.md +0 -28
  317. package/src/verblets/people-list/index.examples.js +0 -184
  318. package/src/verblets/people-list/index.js +0 -44
  319. package/src/verblets/people-list/index.spec.js +0 -49
  320. package/src/verblets/schema-org/index.examples.js +0 -51
  321. package/src/verblets/schema-org/index.js +0 -37
  322. package/src/verblets/schema-org/index.spec.js +0 -39
  323. package/src/verblets/sentiment/README.md +0 -10
  324. package/src/verblets/sentiment/index.examples.js +0 -20
  325. package/src/verblets/sentiment/index.js +0 -9
  326. package/src/verblets/sentiment/index.spec.js +0 -20
  327. package/src/verblets/to-object/README.md +0 -38
  328. package/src/verblets/to-object/index.examples.js +0 -29
  329. package/src/verblets/to-object/index.js +0 -131
  330. package/src/verblets/to-object/index.spec.js +0 -71
package/dist/index.js ADDED
@@ -0,0 +1,548 @@
1
+ import { r as P, a as C, b as x, c as v, d as R } from "./shared-C6kPWghF.js";
2
+ import { E as me, a3 as fe, f as ye, F as ge, l as Se, G as be, H as Ce, e as Ie, I as we, k as $e, g as Ee, m as Pe, o as xe, J as ve, K as Re, L as Fe, p as Ae, i as Te, a4 as _e, a5 as De, q as Oe, M as ke, t as Le, N as Ne, u as je, v as Me, w as Ue, a6 as Be, x as ze, O as Je, y as Ge, z as Ve, a7 as qe, a8 as He, A as Xe, P as We, Q as Ke, n as Ye, h as Ze, R as Qe, a8 as es, S as ss, ab as ts, ae as as, T as ns, U as rs, ac as is, ad as os, j as cs, V as ls, af as us, B as ds, a9 as ps, s as hs, aa as ms, W as fs, C as ys, X as gs, Y as Ss, Z as bs, D as Cs, _ as Is, $ as ws, a0 as $s, a1 as Es, a2 as Ps } from "./shared-C6kPWghF.js";
3
+ import p from "node:fs";
4
+ import "node:path";
5
+ import "glob";
6
+ import F from "node:fs/promises";
7
+ const I = 1, A = 20, T = 5, _ = 0.5, D = 5, S = 8e3, g = 5, f = {
8
+ INDIVIDUAL: "individual",
9
+ BULK: "bulk"
10
+ }, h = {
11
+ PROCESSING: "processing",
12
+ COMPLETED: "completed",
13
+ ERROR: "error"
14
+ };
15
+ function O(e, s) {
16
+ const a = [];
17
+ for (let t = 0; t < e.length; t += s)
18
+ a.push({
19
+ items: e.slice(t, t + s),
20
+ index: Math.floor(t / s) + 1,
21
+ startIndex: t
22
+ });
23
+ return a;
24
+ }
25
+ function b(e, s, a, t, n, r) {
26
+ return {
27
+ chunkIndex: e.index,
28
+ totalChunks: s,
29
+ itemsInChunk: e.items.length,
30
+ totalItems: a,
31
+ status: t,
32
+ bulkSize: n.bulkSize,
33
+ maxConcurrency: n.maxConcurrency,
34
+ processingMode: r,
35
+ parallelMode: !0
36
+ };
37
+ }
38
+ async function k(e, s, a, t, n) {
39
+ try {
40
+ const r = a.map((l) => E(l(e))).filter(Boolean).join(`
41
+
42
+ `), o = [s, r].filter(Boolean).join(`
43
+
44
+ `), i = q(o, e, t, n === "files"), c = await C(i, {
45
+ modelOptions: {
46
+ response_format: {
47
+ type: "json_schema",
48
+ json_schema: {
49
+ name: "arch_result",
50
+ schema: J
51
+ }
52
+ }
53
+ }
54
+ });
55
+ return { item: e, ...c, error: void 0 };
56
+ } catch (r) {
57
+ return { item: e, passed: !1, reason: `Analysis failed: ${r.message}`, error: r };
58
+ }
59
+ }
60
+ function L(e, s, a, t) {
61
+ const n = [], r = [];
62
+ let o = t;
63
+ for (const i of e)
64
+ if (n.push(i), i.passed || (o++, r.push(i.error || new Error(i.reason))), !s && o >= a)
65
+ break;
66
+ return {
67
+ results: n,
68
+ errors: r,
69
+ failures: o,
70
+ shouldStop: !s && o >= a
71
+ };
72
+ }
73
+ function m(e, s, a, t) {
74
+ e && e(s, a, t);
75
+ }
76
+ async function w(e, s, a, t, n) {
77
+ m(t, e, void 0, {
78
+ ...n,
79
+ status: h.PROCESSING
80
+ });
81
+ try {
82
+ const r = H(s, e, a), o = await P(e, r, {
83
+ llm: {
84
+ response_format: {
85
+ type: "json_schema",
86
+ json_schema: {
87
+ name: "arch_bulk_result",
88
+ schema: G
89
+ }
90
+ }
91
+ }
92
+ }), i = o.results || o;
93
+ let c = [];
94
+ Array.isArray(i) ? c = i : c = e.map((y) => ({
95
+ path: y,
96
+ passed: !1,
97
+ reason: "Invalid response format"
98
+ }));
99
+ const l = c.filter((y) => !y.passed).length, u = c.length - l;
100
+ return m(
101
+ t,
102
+ e,
103
+ l > 0 ? new Error(`${l} items failed`) : void 0,
104
+ {
105
+ ...n,
106
+ status: h.COMPLETED,
107
+ passed: u,
108
+ failed: l
109
+ }
110
+ ), c;
111
+ } catch (r) {
112
+ const o = e.map((i) => ({
113
+ path: i,
114
+ passed: !1,
115
+ reason: `Processing error: ${r.message}`
116
+ }));
117
+ return m(t, e, r, {
118
+ ...n,
119
+ status: h.ERROR
120
+ }), o;
121
+ }
122
+ }
123
+ function N(e, s) {
124
+ const a = s.filter((i) => i.passed).length, t = s.length - a, n = t === 0, r = s.length < e.length, o = s.filter((i) => !i.passed);
125
+ return {
126
+ passed: a,
127
+ failed: t,
128
+ allPassed: n,
129
+ stoppedEarly: r,
130
+ failures: o,
131
+ total: e.length,
132
+ processed: s.length
133
+ };
134
+ }
135
+ function j(e, s, a) {
136
+ if (e.allPassed)
137
+ return `All ${e.processed}/${e.total} items satisfy: ${s}`;
138
+ const t = e.failures.slice(0, g).map((r) => ` • ${r.item}: ${r.reason || "Failed"}`).join(`
139
+ `), n = e.failures.length > g ? `
140
+ ... and ${e.failures.length - g} more failures` : "";
141
+ return `${e.failed}/${e.processed} items failed: ${s}${e.stoppedEarly && a !== I ? ` (stopped after ${a} failures)` : ""}
142
+
143
+ Failures:
144
+ ${t}${n}`;
145
+ }
146
+ function M(e, s) {
147
+ return {
148
+ passed: e.allPassed,
149
+ message: s,
150
+ details: {
151
+ total: e.total,
152
+ processed: e.processed,
153
+ passed: e.passed,
154
+ failed: e.failed,
155
+ failures: e.failures
156
+ }
157
+ };
158
+ }
159
+ function U(e, s, a, t) {
160
+ const n = s || a.length > 0 || t <= D;
161
+ return {
162
+ mode: n ? f.INDIVIDUAL : f.BULK,
163
+ batchSize: n ? e.maxConcurrency : e.bulkSize,
164
+ processor: n ? (r, o, i) => $(r, o, i) : (r, o, i) => w(
165
+ r.items,
166
+ o,
167
+ i.description,
168
+ i.onProgress,
169
+ i.metadata
170
+ )
171
+ };
172
+ }
173
+ async function $(e, s, a) {
174
+ const t = e.items.map(
175
+ (n) => k(
176
+ n,
177
+ s,
178
+ a.itemContextFns,
179
+ a.description,
180
+ a.targetType
181
+ )
182
+ );
183
+ return await Promise.all(t);
184
+ }
185
+ function B(e, s, a) {
186
+ if (s === f.INDIVIDUAL) {
187
+ const { results: t, errors: n, failures: r, shouldStop: o } = L(
188
+ e,
189
+ a.isCoverageTest,
190
+ a.maxFailures,
191
+ a.currentFailures || 0
192
+ );
193
+ return {
194
+ results: t,
195
+ errors: n,
196
+ failures: r,
197
+ shouldStop: o,
198
+ progressData: {
199
+ passed: t.filter((i) => i.passed).length,
200
+ failed: n.length
201
+ }
202
+ };
203
+ } else {
204
+ const t = e.map((n) => ({
205
+ item: n.path,
206
+ passed: n.passed,
207
+ reason: n.reason
208
+ }));
209
+ return {
210
+ results: t,
211
+ errors: [],
212
+ failures: a.currentFailures || 0,
213
+ shouldStop: !1,
214
+ progressData: {
215
+ passed: t.filter((n) => n.passed).length,
216
+ failed: t.filter((n) => !n.passed).length
217
+ }
218
+ };
219
+ }
220
+ }
221
+ async function z(e, s, a, t) {
222
+ const n = O(e, a.batchSize), r = [];
223
+ let o = 0;
224
+ for (const i of n) {
225
+ if (!t.isCoverageTest && o >= t.maxFailures)
226
+ break;
227
+ const c = b(
228
+ i,
229
+ n.length,
230
+ e.length,
231
+ h.PROCESSING,
232
+ t,
233
+ a.mode
234
+ );
235
+ m(t.onChunkProcessed, i.items, void 0, c);
236
+ let l;
237
+ a.mode === f.INDIVIDUAL ? l = await $(i, s, {
238
+ itemContextFns: t.itemContextFns,
239
+ description: t.description,
240
+ targetType: t.targetType
241
+ }) : l = await w(
242
+ i.items,
243
+ s,
244
+ t.description,
245
+ t.onChunkProcessed,
246
+ c
247
+ );
248
+ const u = B(l, a.mode, {
249
+ ...t,
250
+ currentFailures: o
251
+ });
252
+ if (r.push(...u.results), o = u.failures, m(
253
+ t.onChunkProcessed,
254
+ i.items,
255
+ u.errors.length > 0 ? u.errors[0] : void 0,
256
+ {
257
+ ...b(
258
+ i,
259
+ n.length,
260
+ e.length,
261
+ h.COMPLETED,
262
+ t,
263
+ a.mode
264
+ ),
265
+ ...u.progressData
266
+ }
267
+ ), u.shouldStop)
268
+ break;
269
+ }
270
+ return r;
271
+ }
272
+ const J = {
273
+ type: "object",
274
+ properties: {
275
+ passed: { type: "boolean" },
276
+ reason: { type: "string" }
277
+ },
278
+ required: ["passed", "reason"]
279
+ }, G = {
280
+ type: "object",
281
+ properties: {
282
+ results: {
283
+ type: "array",
284
+ items: {
285
+ type: "object",
286
+ properties: {
287
+ path: { type: "string" },
288
+ passed: { type: "boolean" },
289
+ reason: { type: "string" }
290
+ },
291
+ required: ["path", "passed", "reason"]
292
+ }
293
+ }
294
+ },
295
+ required: ["results"]
296
+ };
297
+ function E(e) {
298
+ switch (e.type) {
299
+ case "file":
300
+ return p.existsSync(e.filePath) ? `<${e.name}>
301
+ ${p.readFileSync(e.filePath, "utf8")}
302
+ </${e.name}>` : "";
303
+ case "json": {
304
+ if (!p.existsSync(e.filePath)) return "";
305
+ const s = JSON.parse(p.readFileSync(e.filePath, "utf8"));
306
+ return `<${e.name}>
307
+ ${JSON.stringify(s, void 0, 2)}
308
+ </${e.name}>`;
309
+ }
310
+ case "data": {
311
+ const s = typeof e.data == "string" ? e.data : JSON.stringify(e.data, void 0, 2);
312
+ return `<${e.name}>
313
+ ${s}
314
+ </${e.name}>`;
315
+ }
316
+ default:
317
+ return "";
318
+ }
319
+ }
320
+ function V(e) {
321
+ if (!p.existsSync(e)) return "Item does not exist";
322
+ if (p.statSync(e).isDirectory())
323
+ return p.readdirSync(e).join(", ");
324
+ {
325
+ const a = p.readFileSync(e, "utf8");
326
+ return a.length > S ? `${a.substring(0, S)}
327
+ ... (truncated)` : a;
328
+ }
329
+ }
330
+ function q(e, s, a, t) {
331
+ const n = V(s);
332
+ return `${e}
333
+ Analyze this ${t ? "file" : "directory"}: ${s}
334
+
335
+ Content:
336
+ ${n}
337
+
338
+ Does it satisfy: "${a}"?
339
+
340
+ Return JSON with "passed" (boolean) and "reason" (string).`;
341
+ }
342
+ function H(e, s, a) {
343
+ return `${e}
344
+ Analyze each item and determine if it satisfies: "${a}"
345
+ Items: ${s.join(", ")}
346
+
347
+ Return JSON with "results" array containing objects with "path", "passed" (boolean), and "reason" (string).`;
348
+ }
349
+ class X {
350
+ constructor(s, a = {}) {
351
+ this.target = s, this.contexts = [], this.itemContextFns = [], this.maxFailures = a.maxFailures || I, this.bulkSize = a.bulkSize || A, this.maxConcurrency = a.maxConcurrency || T, this.onChunkProcessed = void 0, this.description = void 0, this.threshold = void 0, this.isCoverageTest = !1;
352
+ }
353
+ withContext(s) {
354
+ return this.contexts.push(s), this;
355
+ }
356
+ withItemContext(s) {
357
+ return this.itemContextFns.push(s), this;
358
+ }
359
+ // Set up for a satisfies test
360
+ satisfies(s) {
361
+ return this.description = s, this;
362
+ }
363
+ // Set up for a coverage test
364
+ coverage(s = _) {
365
+ return this.threshold = s, this.isCoverageTest = !0, this;
366
+ }
367
+ // Start processing - this is the fluent terminator
368
+ async start() {
369
+ if (!this.description)
370
+ throw new Error("Must call satisfies() before start()");
371
+ const s = await this.target.resolve(), a = this.contexts.map(E).filter(Boolean).join(`
372
+
373
+ `), t = U(
374
+ this,
375
+ this.onChunkProcessed,
376
+ this.itemContextFns,
377
+ s.length
378
+ ), n = {
379
+ bulkSize: this.bulkSize,
380
+ maxConcurrency: this.maxConcurrency,
381
+ description: this.description,
382
+ onChunkProcessed: this.onChunkProcessed,
383
+ itemContextFns: this.itemContextFns,
384
+ targetType: this.target.type,
385
+ maxFailures: this.maxFailures,
386
+ isCoverageTest: this.isCoverageTest
387
+ }, r = await z(s, a, t, n);
388
+ if (this.isCoverageTest) {
389
+ const o = r.filter((u) => u.passed).length, i = s.length > 0 ? o / s.length : 0, c = i >= this.threshold, l = `Coverage: ${o}/${s.length} (${(i * 100).toFixed(1)}%) - ${c ? "meets" : "below"} ${(this.threshold * 100).toFixed(1)}% threshold`;
390
+ if (!c)
391
+ throw new Error(l);
392
+ return { passed: c, coverage: i, message: l };
393
+ }
394
+ return this.summarize(s, r);
395
+ }
396
+ summarize(s, a) {
397
+ const t = N(s, a), n = j(t, this.description, this.maxFailures);
398
+ if (!t.allPassed)
399
+ throw new Error(n);
400
+ return M(t, n);
401
+ }
402
+ }
403
+ function le(e, s = {}) {
404
+ return new X(e, s);
405
+ }
406
+ function ue() {
407
+ return console.warn("scanJS is not available in browser environment"), Promise.resolve({});
408
+ }
409
+ const W = {
410
+ name: "test_analysis_result",
411
+ schema: {
412
+ type: "object",
413
+ properties: {
414
+ hasIssues: {
415
+ type: "boolean",
416
+ description: "Whether any issues were found in the code analysis"
417
+ },
418
+ issues: {
419
+ type: "array",
420
+ description: "List of identified issues with the code",
421
+ items: {
422
+ type: "string",
423
+ description: "A specific issue with actionable feedback and line references where applicable"
424
+ }
425
+ }
426
+ },
427
+ required: ["hasIssues", "issues"],
428
+ additionalProperties: !1
429
+ }
430
+ };
431
+ async function d(e, s, a = {}) {
432
+ try {
433
+ const t = await F.readFile(e, "utf-8"), n = `Analyze this code and ${s}:
434
+
435
+ ${x(t, { tag: "code-to-analyze" })}
436
+
437
+ Return a JSON object with:
438
+ - "hasIssues": boolean indicating if any issues were found
439
+ - "issues": array of strings, each describing a specific issue with actionable feedback
440
+
441
+ GUIDELINES:
442
+ - Focus only on issues related to the test criteria
443
+ - Provide specific line numbers or code references when possible
444
+ - Suggest concrete fixes for each issue identified
445
+ - Be concise but clear in your feedback
446
+ - If no issues are found, return {"hasIssues": false, "issues": []}
447
+
448
+ ${v}`, r = await C(n, {
449
+ ...a,
450
+ modelOptions: {
451
+ ...a.modelOptions,
452
+ response_format: {
453
+ type: "json_schema",
454
+ json_schema: W
455
+ }
456
+ }
457
+ });
458
+ return r.hasIssues ? r.issues : [];
459
+ } catch (t) {
460
+ return [`Error analyzing ${e}: ${t.message}`];
461
+ }
462
+ }
463
+ const K = "Run the code with 5 boundary value test cases and report any that fail", Y = "Identify 5 passing scenarios and significant boundary conditions in this code. Provide minimal input examples for each scenario to demonstrate correctness.", Z = "Identify 5 failing scenarios and significant boundary conditions in this code. Provide minimal input examples for each scenario to demonstrate the failure. Assume DBC, and don't complain when types are specified in jsDoc.", Q = "Identify 5 defects in this code. Provide minimal input examples to demonstrate each defect.", ee = "Suggest 5 best practices improvements for this code.", se = 'Suggest 5 "clean code" improvements for this code.', te = "Identify 5 specific issues related to code quality, readability, and maintainability.", ae = "Suggest 5 refactors that would most improve the composibility of this code.", de = async (e) => [
464
+ ...await d(e, K),
465
+ ...await d(e, Y),
466
+ ...await d(e, Z),
467
+ ...await d(e, Q),
468
+ ...await d(e, ee),
469
+ ...await d(e, se),
470
+ ...await d(e, te),
471
+ ...await d(e, ae)
472
+ ];
473
+ R.isNode && (await import("dotenv")).config();
474
+ export {
475
+ le as aiArchExpect,
476
+ me as anonymize,
477
+ fe as auto,
478
+ ye as bool,
479
+ ge as categorySamples,
480
+ Se as centralTendency,
481
+ C as chatGPT,
482
+ be as collectTerms,
483
+ Ce as commonalities,
484
+ Ie as constants,
485
+ we as conversation,
486
+ $e as createScale,
487
+ Ee as date,
488
+ C as default,
489
+ Pe as detectPatterns,
490
+ xe as detectThreshold,
491
+ ve as disambiguate,
492
+ Re as dismantle,
493
+ Fe as documentShrink,
494
+ Ae as entities,
495
+ Te as enums,
496
+ _e as expect,
497
+ De as expectChain,
498
+ Oe as extractBlocks,
499
+ ke as fillMissing,
500
+ Le as filter,
501
+ Ne as filterAmbiguous,
502
+ je as find,
503
+ Me as glossary,
504
+ Ue as group,
505
+ Be as intent,
506
+ ze as intersections,
507
+ Je as join,
508
+ Ge as list,
509
+ Ve as listExpand,
510
+ qe as llmLogger,
511
+ He as makePrompt,
512
+ Xe as map,
513
+ We as name,
514
+ Ke as nameSimilarTo,
515
+ Ye as number,
516
+ Ze as numberWithUnits,
517
+ Qe as people,
518
+ es as phailForge,
519
+ ss as popReference,
520
+ ts as promptCache,
521
+ as as prompts,
522
+ ns as questions,
523
+ P as reduce,
524
+ rs as relations,
525
+ is as retry,
526
+ os as ringBuffer,
527
+ cs as scale,
528
+ ue as scanJS,
529
+ ls as schemaOrg,
530
+ us as schemas,
531
+ ds as score,
532
+ ps as sentiment,
533
+ hs as services,
534
+ ms as setInterval,
535
+ fs as socratic,
536
+ ys as sort,
537
+ gs as split,
538
+ Ss as summaryMap,
539
+ bs as tagVocabulary,
540
+ Cs as tags,
541
+ d as test,
542
+ de as testAdvice,
543
+ Is as themes,
544
+ ws as timeline,
545
+ $s as toObject,
546
+ Es as truncate,
547
+ Ps as veiledVariants
548
+ };