@substrate-ai/factory 0.19.54 → 0.20.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 (491) hide show
  1. package/README.md +39 -0
  2. package/dist/config.d.ts +4 -4
  3. package/package.json +12 -3
  4. package/dist/__tests__/config.test.d.ts +0 -11
  5. package/dist/__tests__/config.test.d.ts.map +0 -1
  6. package/dist/__tests__/config.test.js +0 -215
  7. package/dist/__tests__/config.test.js.map +0 -1
  8. package/dist/__tests__/factory-run-command.test.d.ts +0 -12
  9. package/dist/__tests__/factory-run-command.test.d.ts.map +0 -1
  10. package/dist/__tests__/factory-run-command.test.js +0 -454
  11. package/dist/__tests__/factory-run-command.test.js.map +0 -1
  12. package/dist/__tests__/factory-validate-command.test.d.ts +0 -15
  13. package/dist/__tests__/factory-validate-command.test.d.ts.map +0 -1
  14. package/dist/__tests__/factory-validate-command.test.js +0 -339
  15. package/dist/__tests__/factory-validate-command.test.js.map +0 -1
  16. package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.d.ts +0 -72
  17. package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.d.ts.map +0 -1
  18. package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.js +0 -121
  19. package/dist/__tests__/fixtures/advanced-cross-project-validation.dot.js.map +0 -1
  20. package/dist/__tests__/fixtures/llm-edge-routing.dot.d.ts +0 -28
  21. package/dist/__tests__/fixtures/llm-edge-routing.dot.d.ts.map +0 -1
  22. package/dist/__tests__/fixtures/llm-edge-routing.dot.js +0 -55
  23. package/dist/__tests__/fixtures/llm-edge-routing.dot.js.map +0 -1
  24. package/dist/__tests__/fixtures/manager-loop.dot.d.ts +0 -34
  25. package/dist/__tests__/fixtures/manager-loop.dot.d.ts.map +0 -1
  26. package/dist/__tests__/fixtures/manager-loop.dot.js +0 -61
  27. package/dist/__tests__/fixtures/manager-loop.dot.js.map +0 -1
  28. package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.d.ts +0 -42
  29. package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.d.ts.map +0 -1
  30. package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.js +0 -118
  31. package/dist/__tests__/fixtures/parallel-fan-out-fan-in.dot.js.map +0 -1
  32. package/dist/__tests__/fixtures/subgraph-parent.dot.d.ts +0 -35
  33. package/dist/__tests__/fixtures/subgraph-parent.dot.d.ts.map +0 -1
  34. package/dist/__tests__/fixtures/subgraph-parent.dot.js +0 -69
  35. package/dist/__tests__/fixtures/subgraph-parent.dot.js.map +0 -1
  36. package/dist/__tests__/integration/advanced-graph-events.test.d.ts +0 -19
  37. package/dist/__tests__/integration/advanced-graph-events.test.d.ts.map +0 -1
  38. package/dist/__tests__/integration/advanced-graph-events.test.js +0 -288
  39. package/dist/__tests__/integration/advanced-graph-events.test.js.map +0 -1
  40. package/dist/__tests__/integration/checkpoint-resume.test.d.ts +0 -10
  41. package/dist/__tests__/integration/checkpoint-resume.test.d.ts.map +0 -1
  42. package/dist/__tests__/integration/checkpoint-resume.test.js +0 -125
  43. package/dist/__tests__/integration/checkpoint-resume.test.js.map +0 -1
  44. package/dist/__tests__/integration/conditional-pipeline.test.d.ts +0 -10
  45. package/dist/__tests__/integration/conditional-pipeline.test.d.ts.map +0 -1
  46. package/dist/__tests__/integration/conditional-pipeline.test.js +0 -106
  47. package/dist/__tests__/integration/conditional-pipeline.test.js.map +0 -1
  48. package/dist/__tests__/integration/convergence-validation.test.d.ts +0 -14
  49. package/dist/__tests__/integration/convergence-validation.test.d.ts.map +0 -1
  50. package/dist/__tests__/integration/convergence-validation.test.js +0 -449
  51. package/dist/__tests__/integration/convergence-validation.test.js.map +0 -1
  52. package/dist/__tests__/integration/epic44-coverage-gate.test.d.ts +0 -12
  53. package/dist/__tests__/integration/epic44-coverage-gate.test.d.ts.map +0 -1
  54. package/dist/__tests__/integration/epic44-coverage-gate.test.js +0 -58
  55. package/dist/__tests__/integration/epic44-coverage-gate.test.js.map +0 -1
  56. package/dist/__tests__/integration/epic45-coverage-gate.test.d.ts +0 -11
  57. package/dist/__tests__/integration/epic45-coverage-gate.test.d.ts.map +0 -1
  58. package/dist/__tests__/integration/epic45-coverage-gate.test.js +0 -64
  59. package/dist/__tests__/integration/epic45-coverage-gate.test.js.map +0 -1
  60. package/dist/__tests__/integration/epic46-scenario-primary-executor.test.d.ts +0 -2
  61. package/dist/__tests__/integration/epic46-scenario-primary-executor.test.d.ts.map +0 -1
  62. package/dist/__tests__/integration/epic46-scenario-primary-executor.test.js +0 -285
  63. package/dist/__tests__/integration/epic46-scenario-primary-executor.test.js.map +0 -1
  64. package/dist/__tests__/integration/events.test.d.ts +0 -8
  65. package/dist/__tests__/integration/events.test.d.ts.map +0 -1
  66. package/dist/__tests__/integration/events.test.js +0 -194
  67. package/dist/__tests__/integration/events.test.js.map +0 -1
  68. package/dist/__tests__/integration/graphs.d.ts +0 -59
  69. package/dist/__tests__/integration/graphs.d.ts.map +0 -1
  70. package/dist/__tests__/integration/graphs.js +0 -164
  71. package/dist/__tests__/integration/graphs.js.map +0 -1
  72. package/dist/__tests__/integration/helpers.d.ts +0 -127
  73. package/dist/__tests__/integration/helpers.d.ts.map +0 -1
  74. package/dist/__tests__/integration/helpers.js +0 -167
  75. package/dist/__tests__/integration/helpers.js.map +0 -1
  76. package/dist/__tests__/integration/integrity.test.d.ts +0 -8
  77. package/dist/__tests__/integration/integrity.test.d.ts.map +0 -1
  78. package/dist/__tests__/integration/integrity.test.js +0 -198
  79. package/dist/__tests__/integration/integrity.test.js.map +0 -1
  80. package/dist/__tests__/integration/llm-edge-routing.test.d.ts +0 -21
  81. package/dist/__tests__/integration/llm-edge-routing.test.d.ts.map +0 -1
  82. package/dist/__tests__/integration/llm-edge-routing.test.js +0 -341
  83. package/dist/__tests__/integration/llm-edge-routing.test.js.map +0 -1
  84. package/dist/__tests__/integration/manager-loop.test.d.ts +0 -24
  85. package/dist/__tests__/integration/manager-loop.test.d.ts.map +0 -1
  86. package/dist/__tests__/integration/manager-loop.test.js +0 -276
  87. package/dist/__tests__/integration/manager-loop.test.js.map +0 -1
  88. package/dist/__tests__/integration/multi-type-graph.test.d.ts +0 -10
  89. package/dist/__tests__/integration/multi-type-graph.test.d.ts.map +0 -1
  90. package/dist/__tests__/integration/multi-type-graph.test.js +0 -100
  91. package/dist/__tests__/integration/multi-type-graph.test.js.map +0 -1
  92. package/dist/__tests__/integration/parallel-fan-out-fan-in.test.d.ts +0 -22
  93. package/dist/__tests__/integration/parallel-fan-out-fan-in.test.d.ts.map +0 -1
  94. package/dist/__tests__/integration/parallel-fan-out-fan-in.test.js +0 -515
  95. package/dist/__tests__/integration/parallel-fan-out-fan-in.test.js.map +0 -1
  96. package/dist/__tests__/integration/persistence.test.d.ts +0 -8
  97. package/dist/__tests__/integration/persistence.test.d.ts.map +0 -1
  98. package/dist/__tests__/integration/persistence.test.js +0 -129
  99. package/dist/__tests__/integration/persistence.test.js.map +0 -1
  100. package/dist/__tests__/integration/pipeline-templates-integration.test.d.ts +0 -16
  101. package/dist/__tests__/integration/pipeline-templates-integration.test.d.ts.map +0 -1
  102. package/dist/__tests__/integration/pipeline-templates-integration.test.js +0 -171
  103. package/dist/__tests__/integration/pipeline-templates-integration.test.js.map +0 -1
  104. package/dist/__tests__/integration/scenario-pipeline.test.d.ts +0 -11
  105. package/dist/__tests__/integration/scenario-pipeline.test.d.ts.map +0 -1
  106. package/dist/__tests__/integration/scenario-pipeline.test.js +0 -243
  107. package/dist/__tests__/integration/scenario-pipeline.test.js.map +0 -1
  108. package/dist/__tests__/integration/stylesheet-application.test.d.ts +0 -12
  109. package/dist/__tests__/integration/stylesheet-application.test.d.ts.map +0 -1
  110. package/dist/__tests__/integration/stylesheet-application.test.js +0 -119
  111. package/dist/__tests__/integration/stylesheet-application.test.js.map +0 -1
  112. package/dist/__tests__/integration/subgraph-execution.test.d.ts +0 -24
  113. package/dist/__tests__/integration/subgraph-execution.test.d.ts.map +0 -1
  114. package/dist/__tests__/integration/subgraph-execution.test.js +0 -291
  115. package/dist/__tests__/integration/subgraph-execution.test.js.map +0 -1
  116. package/dist/__tests__/integration/validation-errors.test.d.ts +0 -8
  117. package/dist/__tests__/integration/validation-errors.test.d.ts.map +0 -1
  118. package/dist/__tests__/integration/validation-errors.test.js +0 -150
  119. package/dist/__tests__/integration/validation-errors.test.js.map +0 -1
  120. package/dist/agent/__tests__/loop-detection.test.d.ts +0 -2
  121. package/dist/agent/__tests__/loop-detection.test.d.ts.map +0 -1
  122. package/dist/agent/__tests__/loop-detection.test.js +0 -236
  123. package/dist/agent/__tests__/loop-detection.test.js.map +0 -1
  124. package/dist/agent/__tests__/loop.test.d.ts +0 -2
  125. package/dist/agent/__tests__/loop.test.d.ts.map +0 -1
  126. package/dist/agent/__tests__/loop.test.js +0 -868
  127. package/dist/agent/__tests__/loop.test.js.map +0 -1
  128. package/dist/agent/__tests__/truncation.test.d.ts +0 -2
  129. package/dist/agent/__tests__/truncation.test.d.ts.map +0 -1
  130. package/dist/agent/__tests__/truncation.test.js +0 -276
  131. package/dist/agent/__tests__/truncation.test.js.map +0 -1
  132. package/dist/agent/tools/__tests__/anthropic-tools.test.d.ts +0 -6
  133. package/dist/agent/tools/__tests__/anthropic-tools.test.d.ts.map +0 -1
  134. package/dist/agent/tools/__tests__/anthropic-tools.test.js +0 -49
  135. package/dist/agent/tools/__tests__/anthropic-tools.test.js.map +0 -1
  136. package/dist/agent/tools/__tests__/environment.test.d.ts +0 -6
  137. package/dist/agent/tools/__tests__/environment.test.d.ts.map +0 -1
  138. package/dist/agent/tools/__tests__/environment.test.js +0 -33
  139. package/dist/agent/tools/__tests__/environment.test.js.map +0 -1
  140. package/dist/agent/tools/__tests__/gemini-tools.test.d.ts +0 -6
  141. package/dist/agent/tools/__tests__/gemini-tools.test.d.ts.map +0 -1
  142. package/dist/agent/tools/__tests__/gemini-tools.test.js +0 -98
  143. package/dist/agent/tools/__tests__/gemini-tools.test.js.map +0 -1
  144. package/dist/agent/tools/__tests__/openai-tools.test.d.ts +0 -6
  145. package/dist/agent/tools/__tests__/openai-tools.test.d.ts.map +0 -1
  146. package/dist/agent/tools/__tests__/openai-tools.test.js +0 -53
  147. package/dist/agent/tools/__tests__/openai-tools.test.js.map +0 -1
  148. package/dist/agent/tools/__tests__/patch.test.d.ts +0 -6
  149. package/dist/agent/tools/__tests__/patch.test.d.ts.map +0 -1
  150. package/dist/agent/tools/__tests__/patch.test.js +0 -116
  151. package/dist/agent/tools/__tests__/patch.test.js.map +0 -1
  152. package/dist/agent/tools/__tests__/profiles.test.d.ts +0 -6
  153. package/dist/agent/tools/__tests__/profiles.test.d.ts.map +0 -1
  154. package/dist/agent/tools/__tests__/profiles.test.js +0 -125
  155. package/dist/agent/tools/__tests__/profiles.test.js.map +0 -1
  156. package/dist/agent/tools/__tests__/registry.test.d.ts +0 -6
  157. package/dist/agent/tools/__tests__/registry.test.d.ts.map +0 -1
  158. package/dist/agent/tools/__tests__/registry.test.js +0 -94
  159. package/dist/agent/tools/__tests__/registry.test.js.map +0 -1
  160. package/dist/agent/tools/__tests__/shared.test.d.ts +0 -6
  161. package/dist/agent/tools/__tests__/shared.test.d.ts.map +0 -1
  162. package/dist/agent/tools/__tests__/shared.test.js +0 -131
  163. package/dist/agent/tools/__tests__/shared.test.js.map +0 -1
  164. package/dist/backend/__tests__/direct-backend.test.d.ts +0 -14
  165. package/dist/backend/__tests__/direct-backend.test.d.ts.map +0 -1
  166. package/dist/backend/__tests__/direct-backend.test.js +0 -393
  167. package/dist/backend/__tests__/direct-backend.test.js.map +0 -1
  168. package/dist/backend/__tests__/direct-bootstrap.test.d.ts +0 -7
  169. package/dist/backend/__tests__/direct-bootstrap.test.d.ts.map +0 -1
  170. package/dist/backend/__tests__/direct-bootstrap.test.js +0 -177
  171. package/dist/backend/__tests__/direct-bootstrap.test.js.map +0 -1
  172. package/dist/backend/__tests__/mock-backend.test.d.ts +0 -7
  173. package/dist/backend/__tests__/mock-backend.test.d.ts.map +0 -1
  174. package/dist/backend/__tests__/mock-backend.test.js +0 -273
  175. package/dist/backend/__tests__/mock-backend.test.js.map +0 -1
  176. package/dist/backend/__tests__/parity.test.d.ts +0 -17
  177. package/dist/backend/__tests__/parity.test.d.ts.map +0 -1
  178. package/dist/backend/__tests__/parity.test.js +0 -411
  179. package/dist/backend/__tests__/parity.test.js.map +0 -1
  180. package/dist/context/__tests__/auto-summarizer.test.d.ts +0 -14
  181. package/dist/context/__tests__/auto-summarizer.test.d.ts.map +0 -1
  182. package/dist/context/__tests__/auto-summarizer.test.js +0 -189
  183. package/dist/context/__tests__/auto-summarizer.test.js.map +0 -1
  184. package/dist/context/__tests__/context-cli-command.test.d.ts +0 -7
  185. package/dist/context/__tests__/context-cli-command.test.d.ts.map +0 -1
  186. package/dist/context/__tests__/context-cli-command.test.js +0 -331
  187. package/dist/context/__tests__/context-cli-command.test.js.map +0 -1
  188. package/dist/context/__tests__/pyramid-summary-integration.test.d.ts +0 -2
  189. package/dist/context/__tests__/pyramid-summary-integration.test.d.ts.map +0 -1
  190. package/dist/context/__tests__/pyramid-summary-integration.test.js +0 -533
  191. package/dist/context/__tests__/pyramid-summary-integration.test.js.map +0 -1
  192. package/dist/context/__tests__/summarizer.test.d.ts +0 -2
  193. package/dist/context/__tests__/summarizer.test.d.ts.map +0 -1
  194. package/dist/context/__tests__/summarizer.test.js +0 -189
  195. package/dist/context/__tests__/summarizer.test.js.map +0 -1
  196. package/dist/context/__tests__/summary-cache.test.d.ts +0 -2
  197. package/dist/context/__tests__/summary-cache.test.d.ts.map +0 -1
  198. package/dist/context/__tests__/summary-cache.test.js +0 -214
  199. package/dist/context/__tests__/summary-cache.test.js.map +0 -1
  200. package/dist/context/__tests__/summary-metrics.test.d.ts +0 -2
  201. package/dist/context/__tests__/summary-metrics.test.d.ts.map +0 -1
  202. package/dist/context/__tests__/summary-metrics.test.js +0 -172
  203. package/dist/context/__tests__/summary-metrics.test.js.map +0 -1
  204. package/dist/context/__tests__/summary-types.test.d.ts +0 -2
  205. package/dist/context/__tests__/summary-types.test.d.ts.map +0 -1
  206. package/dist/context/__tests__/summary-types.test.js +0 -130
  207. package/dist/context/__tests__/summary-types.test.js.map +0 -1
  208. package/dist/convergence/__tests__/budget.test.d.ts +0 -6
  209. package/dist/convergence/__tests__/budget.test.d.ts.map +0 -1
  210. package/dist/convergence/__tests__/budget.test.js +0 -187
  211. package/dist/convergence/__tests__/budget.test.js.map +0 -1
  212. package/dist/convergence/__tests__/controller.test.d.ts +0 -9
  213. package/dist/convergence/__tests__/controller.test.d.ts.map +0 -1
  214. package/dist/convergence/__tests__/controller.test.js +0 -585
  215. package/dist/convergence/__tests__/controller.test.js.map +0 -1
  216. package/dist/convergence/__tests__/dual-signal.test.d.ts +0 -14
  217. package/dist/convergence/__tests__/dual-signal.test.d.ts.map +0 -1
  218. package/dist/convergence/__tests__/dual-signal.test.js +0 -123
  219. package/dist/convergence/__tests__/dual-signal.test.js.map +0 -1
  220. package/dist/convergence/__tests__/epic46-integration.test.d.ts +0 -15
  221. package/dist/convergence/__tests__/epic46-integration.test.d.ts.map +0 -1
  222. package/dist/convergence/__tests__/epic46-integration.test.js +0 -522
  223. package/dist/convergence/__tests__/epic46-integration.test.js.map +0 -1
  224. package/dist/convergence/__tests__/plateau.test.d.ts +0 -6
  225. package/dist/convergence/__tests__/plateau.test.d.ts.map +0 -1
  226. package/dist/convergence/__tests__/plateau.test.js +0 -163
  227. package/dist/convergence/__tests__/plateau.test.js.map +0 -1
  228. package/dist/convergence/__tests__/remediation.test.d.ts +0 -11
  229. package/dist/convergence/__tests__/remediation.test.d.ts.map +0 -1
  230. package/dist/convergence/__tests__/remediation.test.js +0 -209
  231. package/dist/convergence/__tests__/remediation.test.js.map +0 -1
  232. package/dist/convergence/__tests__/scenario-primary.test.d.ts +0 -13
  233. package/dist/convergence/__tests__/scenario-primary.test.d.ts.map +0 -1
  234. package/dist/convergence/__tests__/scenario-primary.test.js +0 -183
  235. package/dist/convergence/__tests__/scenario-primary.test.js.map +0 -1
  236. package/dist/factory-command.test.d.ts +0 -8
  237. package/dist/factory-command.test.d.ts.map +0 -1
  238. package/dist/factory-command.test.js +0 -304
  239. package/dist/factory-command.test.js.map +0 -1
  240. package/dist/graph/__tests__/attractor-compliance.test.d.ts +0 -10
  241. package/dist/graph/__tests__/attractor-compliance.test.d.ts.map +0 -1
  242. package/dist/graph/__tests__/attractor-compliance.test.js +0 -766
  243. package/dist/graph/__tests__/attractor-compliance.test.js.map +0 -1
  244. package/dist/graph/__tests__/checkpoint.test.d.ts +0 -8
  245. package/dist/graph/__tests__/checkpoint.test.d.ts.map +0 -1
  246. package/dist/graph/__tests__/checkpoint.test.js +0 -329
  247. package/dist/graph/__tests__/checkpoint.test.js.map +0 -1
  248. package/dist/graph/__tests__/condition-parser.test.d.ts +0 -14
  249. package/dist/graph/__tests__/condition-parser.test.d.ts.map +0 -1
  250. package/dist/graph/__tests__/condition-parser.test.js +0 -406
  251. package/dist/graph/__tests__/condition-parser.test.js.map +0 -1
  252. package/dist/graph/__tests__/context.test.d.ts +0 -14
  253. package/dist/graph/__tests__/context.test.d.ts.map +0 -1
  254. package/dist/graph/__tests__/context.test.js +0 -276
  255. package/dist/graph/__tests__/context.test.js.map +0 -1
  256. package/dist/graph/__tests__/edge-selector-events.test.d.ts +0 -11
  257. package/dist/graph/__tests__/edge-selector-events.test.d.ts.map +0 -1
  258. package/dist/graph/__tests__/edge-selector-events.test.js +0 -184
  259. package/dist/graph/__tests__/edge-selector-events.test.js.map +0 -1
  260. package/dist/graph/__tests__/edge-selector.test.d.ts +0 -6
  261. package/dist/graph/__tests__/edge-selector.test.d.ts.map +0 -1
  262. package/dist/graph/__tests__/edge-selector.test.js +0 -452
  263. package/dist/graph/__tests__/edge-selector.test.js.map +0 -1
  264. package/dist/graph/__tests__/executor-convergence.test.d.ts +0 -12
  265. package/dist/graph/__tests__/executor-convergence.test.d.ts.map +0 -1
  266. package/dist/graph/__tests__/executor-convergence.test.js +0 -432
  267. package/dist/graph/__tests__/executor-convergence.test.js.map +0 -1
  268. package/dist/graph/__tests__/executor-fidelity.test.d.ts +0 -13
  269. package/dist/graph/__tests__/executor-fidelity.test.d.ts.map +0 -1
  270. package/dist/graph/__tests__/executor-fidelity.test.js +0 -335
  271. package/dist/graph/__tests__/executor-fidelity.test.js.map +0 -1
  272. package/dist/graph/__tests__/executor.test.d.ts +0 -14
  273. package/dist/graph/__tests__/executor.test.d.ts.map +0 -1
  274. package/dist/graph/__tests__/executor.test.js +0 -901
  275. package/dist/graph/__tests__/executor.test.js.map +0 -1
  276. package/dist/graph/__tests__/fidelity.test.d.ts +0 -8
  277. package/dist/graph/__tests__/fidelity.test.d.ts.map +0 -1
  278. package/dist/graph/__tests__/fidelity.test.js +0 -135
  279. package/dist/graph/__tests__/fidelity.test.js.map +0 -1
  280. package/dist/graph/__tests__/llm-evaluator.test.d.ts +0 -7
  281. package/dist/graph/__tests__/llm-evaluator.test.d.ts.map +0 -1
  282. package/dist/graph/__tests__/llm-evaluator.test.js +0 -106
  283. package/dist/graph/__tests__/llm-evaluator.test.js.map +0 -1
  284. package/dist/graph/__tests__/parser-chaining.test.d.ts +0 -13
  285. package/dist/graph/__tests__/parser-chaining.test.d.ts.map +0 -1
  286. package/dist/graph/__tests__/parser-chaining.test.js +0 -215
  287. package/dist/graph/__tests__/parser-chaining.test.js.map +0 -1
  288. package/dist/graph/__tests__/parser.test.d.ts +0 -22
  289. package/dist/graph/__tests__/parser.test.d.ts.map +0 -1
  290. package/dist/graph/__tests__/parser.test.js +0 -452
  291. package/dist/graph/__tests__/parser.test.js.map +0 -1
  292. package/dist/graph/__tests__/run-state.test.d.ts +0 -13
  293. package/dist/graph/__tests__/run-state.test.d.ts.map +0 -1
  294. package/dist/graph/__tests__/run-state.test.js +0 -189
  295. package/dist/graph/__tests__/run-state.test.js.map +0 -1
  296. package/dist/graph/__tests__/transformer.test.d.ts +0 -16
  297. package/dist/graph/__tests__/transformer.test.d.ts.map +0 -1
  298. package/dist/graph/__tests__/transformer.test.js +0 -350
  299. package/dist/graph/__tests__/transformer.test.js.map +0 -1
  300. package/dist/graph/__tests__/validator-errors.test.d.ts +0 -15
  301. package/dist/graph/__tests__/validator-errors.test.d.ts.map +0 -1
  302. package/dist/graph/__tests__/validator-errors.test.js +0 -572
  303. package/dist/graph/__tests__/validator-errors.test.js.map +0 -1
  304. package/dist/graph/__tests__/validator-warnings.test.d.ts +0 -15
  305. package/dist/graph/__tests__/validator-warnings.test.d.ts.map +0 -1
  306. package/dist/graph/__tests__/validator-warnings.test.js +0 -363
  307. package/dist/graph/__tests__/validator-warnings.test.js.map +0 -1
  308. package/dist/handlers/__tests__/codergen-handler.test.d.ts +0 -14
  309. package/dist/handlers/__tests__/codergen-handler.test.d.ts.map +0 -1
  310. package/dist/handlers/__tests__/codergen-handler.test.js +0 -442
  311. package/dist/handlers/__tests__/codergen-handler.test.js.map +0 -1
  312. package/dist/handlers/__tests__/fan-in.test.d.ts +0 -14
  313. package/dist/handlers/__tests__/fan-in.test.d.ts.map +0 -1
  314. package/dist/handlers/__tests__/fan-in.test.js +0 -399
  315. package/dist/handlers/__tests__/fan-in.test.js.map +0 -1
  316. package/dist/handlers/__tests__/join-policy.test.d.ts +0 -9
  317. package/dist/handlers/__tests__/join-policy.test.d.ts.map +0 -1
  318. package/dist/handlers/__tests__/join-policy.test.js +0 -201
  319. package/dist/handlers/__tests__/join-policy.test.js.map +0 -1
  320. package/dist/handlers/__tests__/manager-loop.test.d.ts +0 -14
  321. package/dist/handlers/__tests__/manager-loop.test.d.ts.map +0 -1
  322. package/dist/handlers/__tests__/manager-loop.test.js +0 -322
  323. package/dist/handlers/__tests__/manager-loop.test.js.map +0 -1
  324. package/dist/handlers/__tests__/parallel-events.test.d.ts +0 -12
  325. package/dist/handlers/__tests__/parallel-events.test.d.ts.map +0 -1
  326. package/dist/handlers/__tests__/parallel-events.test.js +0 -252
  327. package/dist/handlers/__tests__/parallel-events.test.js.map +0 -1
  328. package/dist/handlers/__tests__/parallel-handler.test.d.ts +0 -14
  329. package/dist/handlers/__tests__/parallel-handler.test.d.ts.map +0 -1
  330. package/dist/handlers/__tests__/parallel-handler.test.js +0 -337
  331. package/dist/handlers/__tests__/parallel-handler.test.js.map +0 -1
  332. package/dist/handlers/__tests__/parallel-join.test.d.ts +0 -9
  333. package/dist/handlers/__tests__/parallel-join.test.d.ts.map +0 -1
  334. package/dist/handlers/__tests__/parallel-join.test.js +0 -267
  335. package/dist/handlers/__tests__/parallel-join.test.js.map +0 -1
  336. package/dist/handlers/__tests__/registry.test.d.ts +0 -14
  337. package/dist/handlers/__tests__/registry.test.d.ts.map +0 -1
  338. package/dist/handlers/__tests__/registry.test.js +0 -315
  339. package/dist/handlers/__tests__/registry.test.js.map +0 -1
  340. package/dist/handlers/__tests__/subgraph-events.test.d.ts +0 -10
  341. package/dist/handlers/__tests__/subgraph-events.test.d.ts.map +0 -1
  342. package/dist/handlers/__tests__/subgraph-events.test.js +0 -189
  343. package/dist/handlers/__tests__/subgraph-events.test.js.map +0 -1
  344. package/dist/handlers/__tests__/subgraph-inheritance.test.d.ts +0 -14
  345. package/dist/handlers/__tests__/subgraph-inheritance.test.d.ts.map +0 -1
  346. package/dist/handlers/__tests__/subgraph-inheritance.test.js +0 -267
  347. package/dist/handlers/__tests__/subgraph-inheritance.test.js.map +0 -1
  348. package/dist/handlers/__tests__/subgraph.test.d.ts +0 -14
  349. package/dist/handlers/__tests__/subgraph.test.d.ts.map +0 -1
  350. package/dist/handlers/__tests__/subgraph.test.js +0 -369
  351. package/dist/handlers/__tests__/subgraph.test.js.map +0 -1
  352. package/dist/handlers/__tests__/tool-handler.test.d.ts +0 -11
  353. package/dist/handlers/__tests__/tool-handler.test.d.ts.map +0 -1
  354. package/dist/handlers/__tests__/tool-handler.test.js +0 -184
  355. package/dist/handlers/__tests__/tool-handler.test.js.map +0 -1
  356. package/dist/handlers/__tests__/tool-scenario.test.d.ts +0 -12
  357. package/dist/handlers/__tests__/tool-scenario.test.d.ts.map +0 -1
  358. package/dist/handlers/__tests__/tool-scenario.test.js +0 -222
  359. package/dist/handlers/__tests__/tool-scenario.test.js.map +0 -1
  360. package/dist/handlers/__tests__/wait-human-handler.test.d.ts +0 -11
  361. package/dist/handlers/__tests__/wait-human-handler.test.d.ts.map +0 -1
  362. package/dist/handlers/__tests__/wait-human-handler.test.js +0 -251
  363. package/dist/handlers/__tests__/wait-human-handler.test.js.map +0 -1
  364. package/dist/llm/__tests__/client.test.d.ts +0 -2
  365. package/dist/llm/__tests__/client.test.d.ts.map +0 -1
  366. package/dist/llm/__tests__/client.test.js +0 -198
  367. package/dist/llm/__tests__/client.test.js.map +0 -1
  368. package/dist/llm/__tests__/types.test.d.ts +0 -2
  369. package/dist/llm/__tests__/types.test.d.ts.map +0 -1
  370. package/dist/llm/__tests__/types.test.js +0 -289
  371. package/dist/llm/__tests__/types.test.js.map +0 -1
  372. package/dist/llm/middleware/__tests__/cost-tracking.test.d.ts +0 -2
  373. package/dist/llm/middleware/__tests__/cost-tracking.test.d.ts.map +0 -1
  374. package/dist/llm/middleware/__tests__/cost-tracking.test.js +0 -73
  375. package/dist/llm/middleware/__tests__/cost-tracking.test.js.map +0 -1
  376. package/dist/llm/middleware/__tests__/logging.test.d.ts +0 -2
  377. package/dist/llm/middleware/__tests__/logging.test.d.ts.map +0 -1
  378. package/dist/llm/middleware/__tests__/logging.test.js +0 -127
  379. package/dist/llm/middleware/__tests__/logging.test.js.map +0 -1
  380. package/dist/llm/middleware/__tests__/retry.test.d.ts +0 -2
  381. package/dist/llm/middleware/__tests__/retry.test.d.ts.map +0 -1
  382. package/dist/llm/middleware/__tests__/retry.test.js +0 -126
  383. package/dist/llm/middleware/__tests__/retry.test.js.map +0 -1
  384. package/dist/llm/providers/__tests__/anthropic.test.d.ts +0 -2
  385. package/dist/llm/providers/__tests__/anthropic.test.d.ts.map +0 -1
  386. package/dist/llm/providers/__tests__/anthropic.test.js +0 -412
  387. package/dist/llm/providers/__tests__/anthropic.test.js.map +0 -1
  388. package/dist/llm/providers/__tests__/gemini.test.d.ts +0 -2
  389. package/dist/llm/providers/__tests__/gemini.test.d.ts.map +0 -1
  390. package/dist/llm/providers/__tests__/gemini.test.js +0 -591
  391. package/dist/llm/providers/__tests__/gemini.test.js.map +0 -1
  392. package/dist/llm/providers/__tests__/openai.test.d.ts +0 -2
  393. package/dist/llm/providers/__tests__/openai.test.d.ts.map +0 -1
  394. package/dist/llm/providers/__tests__/openai.test.js +0 -546
  395. package/dist/llm/providers/__tests__/openai.test.js.map +0 -1
  396. package/dist/persistence/__tests__/factory-queries.test.d.ts +0 -9
  397. package/dist/persistence/__tests__/factory-queries.test.d.ts.map +0 -1
  398. package/dist/persistence/__tests__/factory-queries.test.js +0 -372
  399. package/dist/persistence/__tests__/factory-queries.test.js.map +0 -1
  400. package/dist/persistence/__tests__/factory-schema.test.d.ts +0 -6
  401. package/dist/persistence/__tests__/factory-schema.test.d.ts.map +0 -1
  402. package/dist/persistence/__tests__/factory-schema.test.js +0 -105
  403. package/dist/persistence/__tests__/factory-schema.test.js.map +0 -1
  404. package/dist/scenarios/__tests__/cli-command-list.test.d.ts +0 -7
  405. package/dist/scenarios/__tests__/cli-command-list.test.d.ts.map +0 -1
  406. package/dist/scenarios/__tests__/cli-command-list.test.js +0 -237
  407. package/dist/scenarios/__tests__/cli-command-list.test.js.map +0 -1
  408. package/dist/scenarios/__tests__/cli-command.test.d.ts +0 -11
  409. package/dist/scenarios/__tests__/cli-command.test.d.ts.map +0 -1
  410. package/dist/scenarios/__tests__/cli-command.test.js +0 -275
  411. package/dist/scenarios/__tests__/cli-command.test.js.map +0 -1
  412. package/dist/scenarios/__tests__/integrity-pipeline.test.d.ts +0 -15
  413. package/dist/scenarios/__tests__/integrity-pipeline.test.d.ts.map +0 -1
  414. package/dist/scenarios/__tests__/integrity-pipeline.test.js +0 -318
  415. package/dist/scenarios/__tests__/integrity-pipeline.test.js.map +0 -1
  416. package/dist/scenarios/__tests__/runner-twins.test.d.ts +0 -13
  417. package/dist/scenarios/__tests__/runner-twins.test.d.ts.map +0 -1
  418. package/dist/scenarios/__tests__/runner-twins.test.js +0 -205
  419. package/dist/scenarios/__tests__/runner-twins.test.js.map +0 -1
  420. package/dist/scenarios/__tests__/scorer.test.d.ts +0 -11
  421. package/dist/scenarios/__tests__/scorer.test.d.ts.map +0 -1
  422. package/dist/scenarios/__tests__/scorer.test.js +0 -225
  423. package/dist/scenarios/__tests__/scorer.test.js.map +0 -1
  424. package/dist/scenarios/__tests__/scoring-integration.test.d.ts +0 -8
  425. package/dist/scenarios/__tests__/scoring-integration.test.d.ts.map +0 -1
  426. package/dist/scenarios/__tests__/scoring-integration.test.js +0 -178
  427. package/dist/scenarios/__tests__/scoring-integration.test.js.map +0 -1
  428. package/dist/scenarios/__tests__/store.test.d.ts +0 -5
  429. package/dist/scenarios/__tests__/store.test.d.ts.map +0 -1
  430. package/dist/scenarios/__tests__/store.test.js +0 -169
  431. package/dist/scenarios/__tests__/store.test.js.map +0 -1
  432. package/dist/stylesheet/__tests__/stylesheet.test.d.ts +0 -17
  433. package/dist/stylesheet/__tests__/stylesheet.test.d.ts.map +0 -1
  434. package/dist/stylesheet/__tests__/stylesheet.test.js +0 -368
  435. package/dist/stylesheet/__tests__/stylesheet.test.js.map +0 -1
  436. package/dist/templates/__tests__/templates.test.d.ts +0 -7
  437. package/dist/templates/__tests__/templates.test.d.ts.map +0 -1
  438. package/dist/templates/__tests__/templates.test.js +0 -92
  439. package/dist/templates/__tests__/templates.test.js.map +0 -1
  440. package/dist/twins/__tests__/docker-compose.test.d.ts +0 -13
  441. package/dist/twins/__tests__/docker-compose.test.d.ts.map +0 -1
  442. package/dist/twins/__tests__/docker-compose.test.js +0 -247
  443. package/dist/twins/__tests__/docker-compose.test.js.map +0 -1
  444. package/dist/twins/__tests__/health-monitor.test.d.ts +0 -19
  445. package/dist/twins/__tests__/health-monitor.test.d.ts.map +0 -1
  446. package/dist/twins/__tests__/health-monitor.test.js +0 -301
  447. package/dist/twins/__tests__/health-monitor.test.js.map +0 -1
  448. package/dist/twins/__tests__/integration/e2e.test.d.ts +0 -18
  449. package/dist/twins/__tests__/integration/e2e.test.d.ts.map +0 -1
  450. package/dist/twins/__tests__/integration/e2e.test.js +0 -146
  451. package/dist/twins/__tests__/integration/e2e.test.js.map +0 -1
  452. package/dist/twins/__tests__/integration/health-monitor-integration.test.d.ts +0 -16
  453. package/dist/twins/__tests__/integration/health-monitor-integration.test.d.ts.map +0 -1
  454. package/dist/twins/__tests__/integration/health-monitor-integration.test.js +0 -183
  455. package/dist/twins/__tests__/integration/health-monitor-integration.test.js.map +0 -1
  456. package/dist/twins/__tests__/integration/helpers.d.ts +0 -32
  457. package/dist/twins/__tests__/integration/helpers.d.ts.map +0 -1
  458. package/dist/twins/__tests__/integration/helpers.js +0 -67
  459. package/dist/twins/__tests__/integration/helpers.js.map +0 -1
  460. package/dist/twins/__tests__/integration/lifecycle.test.d.ts +0 -14
  461. package/dist/twins/__tests__/integration/lifecycle.test.d.ts.map +0 -1
  462. package/dist/twins/__tests__/integration/lifecycle.test.js +0 -127
  463. package/dist/twins/__tests__/integration/lifecycle.test.js.map +0 -1
  464. package/dist/twins/__tests__/integration/persistence-integration.test.d.ts +0 -14
  465. package/dist/twins/__tests__/integration/persistence-integration.test.d.ts.map +0 -1
  466. package/dist/twins/__tests__/integration/persistence-integration.test.js +0 -132
  467. package/dist/twins/__tests__/integration/persistence-integration.test.js.map +0 -1
  468. package/dist/twins/__tests__/persistence.test.d.ts +0 -10
  469. package/dist/twins/__tests__/persistence.test.d.ts.map +0 -1
  470. package/dist/twins/__tests__/persistence.test.js +0 -300
  471. package/dist/twins/__tests__/persistence.test.js.map +0 -1
  472. package/dist/twins/__tests__/registry.test.d.ts +0 -7
  473. package/dist/twins/__tests__/registry.test.d.ts.map +0 -1
  474. package/dist/twins/__tests__/registry.test.js +0 -282
  475. package/dist/twins/__tests__/registry.test.js.map +0 -1
  476. package/dist/twins/__tests__/run-state.test.d.ts +0 -9
  477. package/dist/twins/__tests__/run-state.test.d.ts.map +0 -1
  478. package/dist/twins/__tests__/run-state.test.js +0 -112
  479. package/dist/twins/__tests__/run-state.test.js.map +0 -1
  480. package/dist/twins/__tests__/templates-cli.test.d.ts +0 -10
  481. package/dist/twins/__tests__/templates-cli.test.d.ts.map +0 -1
  482. package/dist/twins/__tests__/templates-cli.test.js +0 -187
  483. package/dist/twins/__tests__/templates-cli.test.js.map +0 -1
  484. package/dist/twins/__tests__/templates.test.d.ts +0 -7
  485. package/dist/twins/__tests__/templates.test.d.ts.map +0 -1
  486. package/dist/twins/__tests__/templates.test.js +0 -87
  487. package/dist/twins/__tests__/templates.test.js.map +0 -1
  488. package/dist/twins/__tests__/twins-cli.test.d.ts +0 -11
  489. package/dist/twins/__tests__/twins-cli.test.d.ts.map +0 -1
  490. package/dist/twins/__tests__/twins-cli.test.js +0 -365
  491. package/dist/twins/__tests__/twins-cli.test.js.map +0 -1
@@ -1,198 +0,0 @@
1
- // packages/factory/src/llm/__tests__/client.test.ts
2
- import { describe, it, expect, vi, beforeEach } from 'vitest';
3
- import { LLMClient } from '../client.js';
4
- function makeMockAdapter(name) {
5
- return {
6
- name,
7
- complete: vi.fn().mockResolvedValue({
8
- content: 'ok',
9
- toolCalls: [],
10
- usage: { inputTokens: 1, outputTokens: 1, totalTokens: 2 },
11
- model: name,
12
- stopReason: 'stop',
13
- providerMetadata: {},
14
- }),
15
- stream: vi.fn().mockReturnValue((async function* () {
16
- yield { type: 'text_delta', delta: 'hello' };
17
- })()),
18
- };
19
- }
20
- const BASE_REQUEST = {
21
- model: '',
22
- messages: [{ role: 'user', content: [{ kind: 'text', text: 'hi' }] }],
23
- };
24
- describe('LLMClient', () => {
25
- describe('constructor with pre-populated adapters', () => {
26
- it('registers all provided adapters and routes correctly', async () => {
27
- const anthropicMock = makeMockAdapter('anthropic');
28
- const client = new LLMClient({ anthropic: anthropicMock });
29
- const req = { ...BASE_REQUEST, model: 'claude-sonnet-4-5' };
30
- await client.complete(req);
31
- expect(anthropicMock.complete).toHaveBeenCalledWith(req);
32
- });
33
- });
34
- describe('AC1: routing to Anthropic adapter', () => {
35
- it('routes claude-* models to the anthropic adapter', async () => {
36
- const anthropicMock = makeMockAdapter('anthropic');
37
- const client = new LLMClient({ anthropic: anthropicMock });
38
- const req = { ...BASE_REQUEST, model: 'claude-sonnet-4-5' };
39
- const result = await client.complete(req);
40
- expect(anthropicMock.complete).toHaveBeenCalledWith(req);
41
- expect(result.content).toBe('ok');
42
- });
43
- });
44
- describe('AC2: routing to OpenAI and Gemini adapters', () => {
45
- let openaiMock;
46
- let geminiMock;
47
- let client;
48
- beforeEach(() => {
49
- openaiMock = makeMockAdapter('openai');
50
- geminiMock = makeMockAdapter('gemini');
51
- client = new LLMClient({ openai: openaiMock, gemini: geminiMock });
52
- });
53
- it('routes gpt-* models to the openai adapter', async () => {
54
- const req = { ...BASE_REQUEST, model: 'gpt-4o' };
55
- await client.complete(req);
56
- expect(openaiMock.complete).toHaveBeenCalledWith(req);
57
- });
58
- it('routes gemini-* models to the gemini adapter', async () => {
59
- const req = { ...BASE_REQUEST, model: 'gemini-2.0-flash' };
60
- await client.complete(req);
61
- expect(geminiMock.complete).toHaveBeenCalledWith(req);
62
- });
63
- it('routes o-series (o3-mini) to the openai adapter', async () => {
64
- const req = { ...BASE_REQUEST, model: 'o3-mini' };
65
- await client.complete(req);
66
- expect(openaiMock.complete).toHaveBeenCalledWith(req);
67
- });
68
- });
69
- describe('AC3: unknown model throws descriptive error', () => {
70
- it('throws with model name and registered providers in message', async () => {
71
- const client = new LLMClient({
72
- anthropic: makeMockAdapter('anthropic'),
73
- openai: makeMockAdapter('openai'),
74
- });
75
- const req = { ...BASE_REQUEST, model: 'unknown-model-xyz' };
76
- await expect(client.complete(req)).rejects.toThrow('unknown-model-xyz');
77
- });
78
- it('lists registered provider names in the error', async () => {
79
- const client = new LLMClient({
80
- anthropic: makeMockAdapter('anthropic'),
81
- openai: makeMockAdapter('openai'),
82
- });
83
- const req = { ...BASE_REQUEST, model: 'unknown-model-xyz' };
84
- await expect(client.complete(req)).rejects.toThrow(/anthropic|openai/);
85
- });
86
- it('throws when provider pattern matches but adapter not registered', async () => {
87
- // Register a pattern pointing to 'gemini' but do NOT register a gemini adapter
88
- const client = new LLMClient({ anthropic: makeMockAdapter('anthropic') });
89
- client.registerModelPattern('gemini-*', 'gemini');
90
- const req = { ...BASE_REQUEST, model: 'gemini-2.0-flash' };
91
- await expect(client.complete(req)).rejects.toThrow(/gemini/);
92
- });
93
- });
94
- describe('AC4: registerProvider on empty client', () => {
95
- it('routing works after registerProvider call', async () => {
96
- const client = new LLMClient();
97
- const anthropicMock = makeMockAdapter('anthropic');
98
- client.registerProvider('anthropic', anthropicMock);
99
- const req = { ...BASE_REQUEST, model: 'claude-haiku-3-5' };
100
- await client.complete(req);
101
- expect(anthropicMock.complete).toHaveBeenCalledWith(req);
102
- });
103
- it('non-matching model still throws after single registerProvider', async () => {
104
- const client = new LLMClient();
105
- client.registerProvider('anthropic', makeMockAdapter('anthropic'));
106
- const req = { ...BASE_REQUEST, model: 'gpt-4o' };
107
- // gpt-4o matches openai pattern by default but openai adapter is not registered
108
- await expect(client.complete(req)).rejects.toThrow(/gpt-4o|openai/);
109
- });
110
- });
111
- describe('AC5: registerModelPattern custom overrides', () => {
112
- it('routes custom pattern to the registered adapter', async () => {
113
- const customMock = makeMockAdapter('custom');
114
- const client = new LLMClient({ custom: customMock });
115
- client.registerModelPattern('my-model-*', 'custom');
116
- const req = { ...BASE_REQUEST, model: 'my-model-v1' };
117
- await client.complete(req);
118
- expect(customMock.complete).toHaveBeenCalledWith(req);
119
- });
120
- it('custom pattern takes precedence over default patterns', async () => {
121
- const customMock = makeMockAdapter('custom');
122
- const anthropicMock = makeMockAdapter('anthropic');
123
- const client = new LLMClient({ custom: customMock, anthropic: anthropicMock });
124
- // Override 'claude-*' to go to 'custom'
125
- client.registerModelPattern('claude-*', 'custom');
126
- const req = { ...BASE_REQUEST, model: 'claude-sonnet-4-5' };
127
- await client.complete(req);
128
- expect(customMock.complete).toHaveBeenCalledWith(req);
129
- expect(anthropicMock.complete).not.toHaveBeenCalled();
130
- });
131
- it('custom pattern matching is case-insensitive', async () => {
132
- const customMock = makeMockAdapter('custom');
133
- const client = new LLMClient({ custom: customMock });
134
- client.registerModelPattern('my-model-*', 'custom');
135
- const req = { ...BASE_REQUEST, model: 'MY-MODEL-V1' };
136
- await client.complete(req);
137
- expect(customMock.complete).toHaveBeenCalledWith(req);
138
- });
139
- });
140
- describe('AC6: stream() delegates to correct adapter', () => {
141
- it('stream routes claude-haiku-3-5 to anthropic adapter', async () => {
142
- const anthropicMock = makeMockAdapter('anthropic');
143
- const client = new LLMClient({ anthropic: anthropicMock });
144
- const req = { ...BASE_REQUEST, model: 'claude-haiku-3-5' };
145
- const events = [];
146
- for await (const event of client.stream(req)) {
147
- events.push(event);
148
- }
149
- expect(anthropicMock.stream).toHaveBeenCalledWith(req);
150
- expect(events.length).toBeGreaterThan(0);
151
- });
152
- });
153
- describe('48-5b AC7: use() registers middleware applied to complete()', () => {
154
- it('middleware receives request and can observe response', async () => {
155
- const anthropicMock = makeMockAdapter('anthropic');
156
- const client = new LLMClient({ anthropic: anthropicMock });
157
- const req = { ...BASE_REQUEST, model: 'claude-sonnet-4-5' };
158
- const observedModels = [];
159
- const mw = vi.fn(async (request, next) => {
160
- observedModels.push(request.model);
161
- return next(request);
162
- });
163
- client.use(mw);
164
- const result = await client.complete(req);
165
- expect(mw).toHaveBeenCalledTimes(1);
166
- expect(observedModels).toContain('claude-sonnet-4-5');
167
- expect(result.content).toBe('ok');
168
- });
169
- it('use() returns this for chaining', () => {
170
- const client = new LLMClient();
171
- const mw = vi.fn(async (_req, next) => next(_req));
172
- const returned = client.use(mw);
173
- expect(returned).toBe(client);
174
- });
175
- it('multiple middlewares execute in correct onion order (first registered = outermost)', async () => {
176
- const anthropicMock = makeMockAdapter('anthropic');
177
- const client = new LLMClient({ anthropic: anthropicMock });
178
- const req = { ...BASE_REQUEST, model: 'claude-sonnet-4-5' };
179
- const order = [];
180
- const outerMw = vi.fn(async (request, next) => {
181
- order.push('outer-before');
182
- const res = await next(request);
183
- order.push('outer-after');
184
- return res;
185
- });
186
- const innerMw = vi.fn(async (request, next) => {
187
- order.push('inner-before');
188
- const res = await next(request);
189
- order.push('inner-after');
190
- return res;
191
- });
192
- client.use(outerMw).use(innerMw);
193
- await client.complete(req);
194
- expect(order).toEqual(['outer-before', 'inner-before', 'inner-after', 'outer-after']);
195
- });
196
- });
197
- });
198
- //# sourceMappingURL=client.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.test.js","sourceRoot":"","sources":["../../../src/llm/__tests__/client.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.test.d.ts","sourceRoot":"","sources":["../../../src/llm/__tests__/types.test.ts"],"names":[],"mappings":""}
@@ -1,289 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- // ---------------------------------------------------------------------------
3
- // MockAdapter — implements ProviderAdapter; TypeScript compile-time verification
4
- // ---------------------------------------------------------------------------
5
- class MockAdapter {
6
- name = 'mock';
7
- async complete(request) {
8
- return {
9
- content: 'hello',
10
- toolCalls: [],
11
- usage: { inputTokens: 10, outputTokens: 5, totalTokens: 15 },
12
- model: request.model,
13
- stopReason: 'stop',
14
- providerMetadata: {},
15
- };
16
- }
17
- async *stream(_request) {
18
- yield { type: 'text_delta', delta: 'hello' };
19
- yield { type: 'message_stop', finishReason: { reason: 'stop' } };
20
- }
21
- }
22
- // ---------------------------------------------------------------------------
23
- // AC1: ProviderAdapter interface
24
- // ---------------------------------------------------------------------------
25
- describe('ProviderAdapter interface (AC1)', () => {
26
- it('MockAdapter has a string name property', () => {
27
- const adapter = new MockAdapter();
28
- expect(typeof adapter.name).toBe('string');
29
- expect(adapter.name).toBe('mock');
30
- });
31
- it('complete() returns a value satisfying LLMResponse shape', async () => {
32
- const adapter = new MockAdapter();
33
- const response = await adapter.complete({
34
- model: 'test-model',
35
- messages: [{ role: 'user', content: [{ kind: 'text', text: 'hi' }] }],
36
- });
37
- expect(response.content).toBe('hello');
38
- expect(response.toolCalls).toEqual([]);
39
- expect(response.stopReason).toBe('stop');
40
- expect(response.model).toBe('test-model');
41
- expect(response.providerMetadata).toEqual({});
42
- });
43
- it('stream() yields StreamEvent objects', async () => {
44
- const adapter = new MockAdapter();
45
- const events = [];
46
- for await (const event of adapter.stream({
47
- model: 'test-model',
48
- messages: [{ role: 'user', content: [{ kind: 'text', text: 'hi' }] }],
49
- })) {
50
- events.push(event);
51
- }
52
- expect(events).toHaveLength(2);
53
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
54
- expect(events[0].type).toBe('text_delta');
55
- expect(events[0].delta).toBe('hello');
56
- expect(events[1].type).toBe('message_stop');
57
- });
58
- it('optional methods (close, initialize, supportsToolChoice) are not required', () => {
59
- // MockAdapter does not implement optional methods — TypeScript compile-time check
60
- const adapter = new MockAdapter();
61
- expect(adapter.close).toBeUndefined();
62
- expect(adapter.initialize).toBeUndefined();
63
- expect(adapter.supportsToolChoice).toBeUndefined();
64
- });
65
- });
66
- // ---------------------------------------------------------------------------
67
- // AC2: LLMRequest — required and optional fields
68
- // ---------------------------------------------------------------------------
69
- describe('LLMRequest type (AC2)', () => {
70
- it('minimal request requires only model and messages', () => {
71
- const req = {
72
- model: 'claude-opus-4-5',
73
- messages: [{ role: 'user', content: [{ kind: 'text', text: 'Hello' }] }],
74
- };
75
- expect(req.model).toBe('claude-opus-4-5');
76
- expect(req.messages).toHaveLength(1);
77
- });
78
- it('maximal request accepts all optional fields', () => {
79
- const tool = {
80
- name: 'search',
81
- description: 'Search the web',
82
- parameters: { type: 'object', properties: {} },
83
- };
84
- const req = {
85
- model: 'gpt-4o',
86
- messages: [{ role: 'user', content: [{ kind: 'text', text: 'Hi' }] }],
87
- systemPrompt: 'You are helpful',
88
- tools: [tool],
89
- toolChoice: 'auto',
90
- maxTokens: 1024,
91
- temperature: 0.7,
92
- reasoningEffort: 'high',
93
- metadata: { sessionId: 'abc123' },
94
- extra: { anthropicVersion: '2023-06-01' },
95
- };
96
- expect(req).toMatchObject({
97
- model: 'gpt-4o',
98
- systemPrompt: 'You are helpful',
99
- toolChoice: 'auto',
100
- maxTokens: 1024,
101
- temperature: 0.7,
102
- reasoningEffort: 'high',
103
- });
104
- expect(req.extra?.anthropicVersion).toBe('2023-06-01');
105
- });
106
- it('toolChoice can be an object with type:function', () => {
107
- const req = {
108
- model: 'test',
109
- messages: [],
110
- toolChoice: { type: 'function', name: 'my_tool' },
111
- };
112
- expect(req.toolChoice).toEqual({ type: 'function', name: 'my_tool' });
113
- });
114
- });
115
- // ---------------------------------------------------------------------------
116
- // AC3: LLMResponse — all required fields
117
- // ---------------------------------------------------------------------------
118
- describe('LLMResponse type (AC3)', () => {
119
- it('response satisfies all six required fields', () => {
120
- const response = {
121
- content: 'The answer is 42',
122
- toolCalls: [],
123
- usage: { inputTokens: 20, outputTokens: 10, totalTokens: 30 },
124
- model: 'claude-opus-4-5',
125
- stopReason: 'stop',
126
- providerMetadata: { requestId: 'req_123' },
127
- };
128
- expect(response.content).toBeDefined();
129
- expect(Array.isArray(response.toolCalls)).toBe(true);
130
- expect(response.usage).toBeDefined();
131
- expect(response.model).toBeDefined();
132
- expect(response.stopReason).toBeDefined();
133
- expect(response.providerMetadata).toBeDefined();
134
- });
135
- it('response accepts optional fields without error', () => {
136
- const response = {
137
- content: 'ok',
138
- toolCalls: [],
139
- usage: { inputTokens: 5, outputTokens: 5, totalTokens: 10 },
140
- model: 'test',
141
- stopReason: 'length',
142
- providerMetadata: {},
143
- id: 'msg_abc',
144
- finishReason: { reason: 'length', raw: 'max_tokens' },
145
- warnings: [{ message: 'Temperature capped', code: 'TEMP_CAP' }],
146
- };
147
- expect(response.id).toBe('msg_abc');
148
- expect(response.finishReason?.reason).toBe('length');
149
- expect(response.warnings?.[0]?.message).toBe('Temperature capped');
150
- });
151
- });
152
- // ---------------------------------------------------------------------------
153
- // AC4: LLMToolCall — parsed arguments
154
- // ---------------------------------------------------------------------------
155
- describe('LLMToolCall type (AC4)', () => {
156
- it('toolCall contains id, name, and parsed arguments', () => {
157
- const tc = {
158
- id: 'call_001',
159
- name: 'get_weather',
160
- arguments: { location: 'Paris', unit: 'celsius' },
161
- };
162
- expect(tc.id).toBe('call_001');
163
- expect(tc.name).toBe('get_weather');
164
- expect(tc.arguments.location).toBe('Paris');
165
- });
166
- it('rawArguments is optional — omitting it does not cause an error', () => {
167
- const tc = {
168
- id: 'call_002',
169
- name: 'search',
170
- arguments: { query: 'hello' },
171
- };
172
- expect(tc.rawArguments).toBeUndefined();
173
- });
174
- it('LLMToolCallData embeds the same shape for content parts', () => {
175
- const data = {
176
- id: 'tc_1',
177
- name: 'run_query',
178
- arguments: { sql: 'SELECT 1' },
179
- rawArguments: '{"sql":"SELECT 1"}',
180
- };
181
- expect(data.rawArguments).toBe('{"sql":"SELECT 1"}');
182
- });
183
- });
184
- // ---------------------------------------------------------------------------
185
- // AC5: LLMMessage and LLMRole
186
- // ---------------------------------------------------------------------------
187
- describe('LLMMessage and LLMRole types (AC5)', () => {
188
- it('constructs a user message with text content part', () => {
189
- const msg = {
190
- role: 'user',
191
- content: [{ kind: 'text', text: 'Hello!' }],
192
- };
193
- expect(msg.role).toBe('user');
194
- expect(Array.isArray(msg.content)).toBe(true);
195
- expect(msg.content[0]?.kind).toBe('text');
196
- expect(msg.content[0]?.text).toBe('Hello!');
197
- });
198
- it('constructs an assistant message', () => {
199
- const msg = {
200
- role: 'assistant',
201
- content: [{ kind: 'text', text: 'How can I help?' }],
202
- };
203
- expect(msg.role).toBe('assistant');
204
- });
205
- it('constructs a tool role message with toolCallId', () => {
206
- const msg = {
207
- role: 'tool',
208
- content: [{ kind: 'tool_result', toolResult: { toolCallId: 'c1', content: 'done', isError: false } }],
209
- toolCallId: 'c1',
210
- };
211
- expect(msg.role).toBe('tool');
212
- expect(msg.toolCallId).toBe('c1');
213
- });
214
- it('LLMContentPart accepts tool_call kind with toolCall field', () => {
215
- const part = {
216
- kind: 'tool_call',
217
- toolCall: { id: 'tc_1', name: 'my_tool', arguments: {} },
218
- };
219
- expect(part.kind).toBe('tool_call');
220
- expect(part.toolCall?.name).toBe('my_tool');
221
- });
222
- it('constructs a system message', () => {
223
- const msg = {
224
- role: 'system',
225
- content: [{ kind: 'text', text: 'You are a helpful assistant.' }],
226
- };
227
- expect(msg.role).toBe('system');
228
- });
229
- });
230
- // ---------------------------------------------------------------------------
231
- // AC6: LLMUsage token tracking
232
- // ---------------------------------------------------------------------------
233
- describe('LLMUsage type (AC6)', () => {
234
- it('minimal usage with only required fields', () => {
235
- const usage = {
236
- inputTokens: 100,
237
- outputTokens: 50,
238
- totalTokens: 150,
239
- };
240
- expect(usage.inputTokens).toBe(100);
241
- expect(usage.outputTokens).toBe(50);
242
- expect(usage.totalTokens).toBe(150);
243
- expect(usage.reasoningTokens).toBeUndefined();
244
- expect(usage.cacheReadTokens).toBeUndefined();
245
- expect(usage.cacheWriteTokens).toBeUndefined();
246
- });
247
- it('full usage with all optional fields', () => {
248
- const usage = {
249
- inputTokens: 200,
250
- outputTokens: 80,
251
- totalTokens: 280,
252
- reasoningTokens: 40,
253
- cacheReadTokens: 120,
254
- cacheWriteTokens: 80,
255
- };
256
- expect(usage).toMatchObject({
257
- inputTokens: 200,
258
- outputTokens: 80,
259
- totalTokens: 280,
260
- reasoningTokens: 40,
261
- cacheReadTokens: 120,
262
- cacheWriteTokens: 80,
263
- });
264
- });
265
- });
266
- // ---------------------------------------------------------------------------
267
- // Additional: LLMToolResult and LLMToolDefinition shape checks
268
- // ---------------------------------------------------------------------------
269
- describe('LLMToolResult and LLMToolDefinition types', () => {
270
- it('LLMToolResult accepts string content', () => {
271
- const result = {
272
- toolCallId: 'c1',
273
- content: 'Paris, 18°C',
274
- isError: false,
275
- };
276
- expect(result.content).toBe('Paris, 18°C');
277
- expect(result.isError).toBe(false);
278
- });
279
- it('LLMToolDefinition has name, description, and parameters', () => {
280
- const def = {
281
- name: 'calculator',
282
- description: 'Performs arithmetic',
283
- parameters: { type: 'object', properties: { expr: { type: 'string' } } },
284
- };
285
- expect(def.name).toBe('calculator');
286
- expect(def.parameters.type).toBe('object');
287
- });
288
- });
289
- //# sourceMappingURL=types.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.test.js","sourceRoot":"","sources":["../../../src/llm/__tests__/types.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=cost-tracking.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cost-tracking.test.d.ts","sourceRoot":"","sources":["../../../../src/llm/middleware/__tests__/cost-tracking.test.ts"],"names":[],"mappings":""}
@@ -1,73 +0,0 @@
1
- // packages/factory/src/llm/middleware/__tests__/cost-tracking.test.ts
2
- import { describe, it, expect, vi } from 'vitest';
3
- import { createCostTrackingMiddleware } from '../cost-tracking.js';
4
- // ---------------------------------------------------------------------------
5
- // Test helpers
6
- // ---------------------------------------------------------------------------
7
- function makeRequest(model = 'claude-opus-4-6') {
8
- return {
9
- model,
10
- messages: [{ role: 'user', content: [{ kind: 'text', text: 'hello' }] }],
11
- };
12
- }
13
- function makeResponse(inputTokens = 100, outputTokens = 50, model = 'claude-opus-4-6') {
14
- return {
15
- content: 'test response',
16
- toolCalls: [],
17
- usage: { inputTokens, outputTokens, totalTokens: inputTokens + outputTokens },
18
- model,
19
- stopReason: 'stop',
20
- providerMetadata: {},
21
- };
22
- }
23
- // ---------------------------------------------------------------------------
24
- // Tests
25
- // ---------------------------------------------------------------------------
26
- describe('createCostTrackingMiddleware', () => {
27
- it('AC3: onCost is called with correct model, provider, tokens, costUsd', async () => {
28
- const records = [];
29
- const mw = createCostTrackingMiddleware({
30
- onCost: (r) => { records.push(r); },
31
- });
32
- await mw(makeRequest('claude-opus-4-6'), async () => makeResponse(100, 50));
33
- expect(records).toHaveLength(1);
34
- const rec = records[0];
35
- expect(rec.model).toBe('claude-opus-4-6');
36
- expect(rec.provider).toBe('anthropic');
37
- expect(rec.inputTokens).toBe(100);
38
- expect(rec.outputTokens).toBe(50);
39
- expect(typeof rec.costUsd).toBe('number');
40
- expect(typeof rec.timestamp).toBe('number');
41
- });
42
- it('AC3: costUsd is positive for known model and 0 for unknown model', async () => {
43
- const knownRecords = [];
44
- const unknownRecords = [];
45
- const knownMw = createCostTrackingMiddleware({ onCost: (r) => { knownRecords.push(r); } });
46
- const unknownMw = createCostTrackingMiddleware({ onCost: (r) => { unknownRecords.push(r); } });
47
- await knownMw(makeRequest('claude-opus-4-6'), async () => makeResponse(100, 50, 'claude-opus-4-6'));
48
- await unknownMw(makeRequest('unknown-llm-xyz'), async () => makeResponse(100, 50, 'unknown-llm-xyz'));
49
- expect(knownRecords[0].costUsd).toBeGreaterThan(0);
50
- expect(unknownRecords[0].costUsd).toBe(0);
51
- });
52
- it('AC3: error in onCost does NOT propagate', async () => {
53
- const mw = createCostTrackingMiddleware({
54
- onCost: () => { throw new Error('cost callback failed'); },
55
- });
56
- // Should not throw despite onCost throwing
57
- const response = await mw(makeRequest(), async () => makeResponse());
58
- expect(response.content).toBe('test response');
59
- });
60
- it('AC3: response is returned unchanged after onCost', async () => {
61
- const mw = createCostTrackingMiddleware({ onCost: vi.fn() });
62
- const expectedResponse = makeResponse(200, 100);
63
- const result = await mw(makeRequest(), async () => expectedResponse);
64
- expect(result).toBe(expectedResponse);
65
- });
66
- it('AC3: middleware is a no-op (no crash) when onCost is undefined', async () => {
67
- const mw = createCostTrackingMiddleware();
68
- const response = makeResponse();
69
- const result = await mw(makeRequest(), async () => response);
70
- expect(result).toBe(response);
71
- });
72
- });
73
- //# sourceMappingURL=cost-tracking.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cost-tracking.test.js","sourceRoot":"","sources":["../../../../src/llm/middleware/__tests__/cost-tracking.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=logging.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logging.test.d.ts","sourceRoot":"","sources":["../../../../src/llm/middleware/__tests__/logging.test.ts"],"names":[],"mappings":""}