@warlock.js/core 4.8.0 → 4.8.1

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 (769) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/esm/connectors/ai-connector.mjs +1 -1
  3. package/package.json +12 -9
  4. package/esm/ai/src/agent/agent-input-builder.mjs +0 -133
  5. package/esm/ai/src/agent/agent-input-builder.mjs.map +0 -1
  6. package/esm/ai/src/agent/agent-log-event.mjs +0 -101
  7. package/esm/ai/src/agent/agent-log-event.mjs.map +0 -1
  8. package/esm/ai/src/agent/agent-stream.mjs +0 -82
  9. package/esm/ai/src/agent/agent-stream.mjs.map +0 -1
  10. package/esm/ai/src/agent/agent-to-stream-event.mjs +0 -86
  11. package/esm/ai/src/agent/agent-to-stream-event.mjs.map +0 -1
  12. package/esm/ai/src/agent/agent.mjs +0 -1276
  13. package/esm/ai/src/agent/agent.mjs.map +0 -1
  14. package/esm/ai/src/agent/index.mjs +0 -5
  15. package/esm/ai/src/agent/json-stream-guard.mjs +0 -400
  16. package/esm/ai/src/agent/json-stream-guard.mjs.map +0 -1
  17. package/esm/ai/src/agent/signature.mjs +0 -57
  18. package/esm/ai/src/agent/signature.mjs.map +0 -1
  19. package/esm/ai/src/agent/snapshot.mjs +0 -101
  20. package/esm/ai/src/agent/snapshot.mjs.map +0 -1
  21. package/esm/ai/src/agent/spawn-sub-agent.mjs +0 -68
  22. package/esm/ai/src/agent/spawn-sub-agent.mjs.map +0 -1
  23. package/esm/ai/src/ai.mjs +0 -191
  24. package/esm/ai/src/ai.mjs.map +0 -1
  25. package/esm/ai/src/batch/batch.mjs +0 -198
  26. package/esm/ai/src/batch/batch.mjs.map +0 -1
  27. package/esm/ai/src/batch/index.mjs +0 -3
  28. package/esm/ai/src/batch/run-batch-item.mjs +0 -100
  29. package/esm/ai/src/batch/run-batch-item.mjs.map +0 -1
  30. package/esm/ai/src/batch/run-with-concurrency.mjs +0 -39
  31. package/esm/ai/src/batch/run-with-concurrency.mjs.map +0 -1
  32. package/esm/ai/src/checkpoint/memory.mjs +0 -0
  33. package/esm/ai/src/checkpoint/memory.mjs.map +0 -1
  34. package/esm/ai/src/checkpoint/pg.mjs +0 -265
  35. package/esm/ai/src/checkpoint/pg.mjs.map +0 -1
  36. package/esm/ai/src/checkpoint/redis.mjs +0 -200
  37. package/esm/ai/src/checkpoint/redis.mjs.map +0 -1
  38. package/esm/ai/src/config.mjs +0 -59
  39. package/esm/ai/src/config.mjs.map +0 -1
  40. package/esm/ai/src/contracts/end.type.mjs +0 -47
  41. package/esm/ai/src/contracts/end.type.mjs.map +0 -1
  42. package/esm/ai/src/errors/agent-cancelled-error.mjs +0 -43
  43. package/esm/ai/src/errors/agent-cancelled-error.mjs.map +0 -1
  44. package/esm/ai/src/errors/agent-drift-error.mjs +0 -31
  45. package/esm/ai/src/errors/agent-drift-error.mjs.map +0 -1
  46. package/esm/ai/src/errors/agent-execution-error.mjs +0 -35
  47. package/esm/ai/src/errors/agent-execution-error.mjs.map +0 -1
  48. package/esm/ai/src/errors/agent-max-trips-error.mjs +0 -41
  49. package/esm/ai/src/errors/agent-max-trips-error.mjs.map +0 -1
  50. package/esm/ai/src/errors/ai-error.mjs +0 -68
  51. package/esm/ai/src/errors/ai-error.mjs.map +0 -1
  52. package/esm/ai/src/errors/budget-exceeded-error.mjs +0 -31
  53. package/esm/ai/src/errors/budget-exceeded-error.mjs.map +0 -1
  54. package/esm/ai/src/errors/content-filter-error.mjs +0 -28
  55. package/esm/ai/src/errors/content-filter-error.mjs.map +0 -1
  56. package/esm/ai/src/errors/context-length-exceeded-error.mjs +0 -31
  57. package/esm/ai/src/errors/context-length-exceeded-error.mjs.map +0 -1
  58. package/esm/ai/src/errors/guardrail-violation-error.mjs +0 -41
  59. package/esm/ai/src/errors/guardrail-violation-error.mjs.map +0 -1
  60. package/esm/ai/src/errors/index.mjs +0 -40
  61. package/esm/ai/src/errors/invalid-request-error.mjs +0 -31
  62. package/esm/ai/src/errors/invalid-request-error.mjs.map +0 -1
  63. package/esm/ai/src/errors/max-iterations-error.mjs +0 -32
  64. package/esm/ai/src/errors/max-iterations-error.mjs.map +0 -1
  65. package/esm/ai/src/errors/max-steps-exceeded-error.mjs +0 -21
  66. package/esm/ai/src/errors/max-steps-exceeded-error.mjs.map +0 -1
  67. package/esm/ai/src/errors/orchestrator-cancelled-error.mjs +0 -31
  68. package/esm/ai/src/errors/orchestrator-cancelled-error.mjs.map +0 -1
  69. package/esm/ai/src/errors/orchestrator-config-error.mjs +0 -30
  70. package/esm/ai/src/errors/orchestrator-config-error.mjs.map +0 -1
  71. package/esm/ai/src/errors/orchestrator-drift-error.mjs +0 -37
  72. package/esm/ai/src/errors/orchestrator-drift-error.mjs.map +0 -1
  73. package/esm/ai/src/errors/orchestrator-failed-error.mjs +0 -36
  74. package/esm/ai/src/errors/orchestrator-failed-error.mjs.map +0 -1
  75. package/esm/ai/src/errors/outbound-policy-error.mjs +0 -32
  76. package/esm/ai/src/errors/outbound-policy-error.mjs.map +0 -1
  77. package/esm/ai/src/errors/planner-cancelled-error.mjs +0 -29
  78. package/esm/ai/src/errors/planner-cancelled-error.mjs.map +0 -1
  79. package/esm/ai/src/errors/planner-drift-error.mjs +0 -33
  80. package/esm/ai/src/errors/planner-drift-error.mjs.map +0 -1
  81. package/esm/ai/src/errors/planner-failed-error.mjs +0 -37
  82. package/esm/ai/src/errors/planner-failed-error.mjs.map +0 -1
  83. package/esm/ai/src/errors/planner-plan-invalid-error.mjs +0 -25
  84. package/esm/ai/src/errors/planner-plan-invalid-error.mjs.map +0 -1
  85. package/esm/ai/src/errors/prompt-refinement-error.mjs +0 -27
  86. package/esm/ai/src/errors/prompt-refinement-error.mjs.map +0 -1
  87. package/esm/ai/src/errors/provider-auth-error.mjs +0 -26
  88. package/esm/ai/src/errors/provider-auth-error.mjs.map +0 -1
  89. package/esm/ai/src/errors/provider-error.mjs +0 -42
  90. package/esm/ai/src/errors/provider-error.mjs.map +0 -1
  91. package/esm/ai/src/errors/provider-rate-limit-error.mjs +0 -31
  92. package/esm/ai/src/errors/provider-rate-limit-error.mjs.map +0 -1
  93. package/esm/ai/src/errors/provider-timeout-error.mjs +0 -26
  94. package/esm/ai/src/errors/provider-timeout-error.mjs.map +0 -1
  95. package/esm/ai/src/errors/quota-exceeded-error.mjs +0 -40
  96. package/esm/ai/src/errors/quota-exceeded-error.mjs.map +0 -1
  97. package/esm/ai/src/errors/routing-error.mjs +0 -23
  98. package/esm/ai/src/errors/routing-error.mjs.map +0 -1
  99. package/esm/ai/src/errors/schema-validation-error.mjs +0 -37
  100. package/esm/ai/src/errors/schema-validation-error.mjs.map +0 -1
  101. package/esm/ai/src/errors/step-failed-error.mjs +0 -19
  102. package/esm/ai/src/errors/step-failed-error.mjs.map +0 -1
  103. package/esm/ai/src/errors/supervisor-cancelled-error.mjs +0 -29
  104. package/esm/ai/src/errors/supervisor-cancelled-error.mjs.map +0 -1
  105. package/esm/ai/src/errors/supervisor-drift-error.mjs +0 -30
  106. package/esm/ai/src/errors/supervisor-drift-error.mjs.map +0 -1
  107. package/esm/ai/src/errors/supervisor-failed-error.mjs +0 -43
  108. package/esm/ai/src/errors/supervisor-failed-error.mjs.map +0 -1
  109. package/esm/ai/src/errors/supervisor-routing-error.mjs +0 -39
  110. package/esm/ai/src/errors/supervisor-routing-error.mjs.map +0 -1
  111. package/esm/ai/src/errors/tool-execution-error.mjs +0 -32
  112. package/esm/ai/src/errors/tool-execution-error.mjs.map +0 -1
  113. package/esm/ai/src/errors/workflow-cancelled-error.mjs +0 -23
  114. package/esm/ai/src/errors/workflow-cancelled-error.mjs.map +0 -1
  115. package/esm/ai/src/errors/workflow-drift-error.mjs +0 -24
  116. package/esm/ai/src/errors/workflow-drift-error.mjs.map +0 -1
  117. package/esm/ai/src/errors/workflow-error.mjs +0 -18
  118. package/esm/ai/src/errors/workflow-error.mjs.map +0 -1
  119. package/esm/ai/src/eval/dataset.mjs +0 -112
  120. package/esm/ai/src/eval/dataset.mjs.map +0 -1
  121. package/esm/ai/src/eval/eval-runner.mjs +0 -135
  122. package/esm/ai/src/eval/eval-runner.mjs.map +0 -1
  123. package/esm/ai/src/eval/index.mjs +0 -48
  124. package/esm/ai/src/eval/index.mjs.map +0 -1
  125. package/esm/ai/src/eval/judge-scorer.mjs +0 -87
  126. package/esm/ai/src/eval/judge-scorer.mjs.map +0 -1
  127. package/esm/ai/src/eval/regression.mjs +0 -51
  128. package/esm/ai/src/eval/regression.mjs.map +0 -1
  129. package/esm/ai/src/eval/report-json.mjs +0 -33
  130. package/esm/ai/src/eval/report-json.mjs.map +0 -1
  131. package/esm/ai/src/eval/report-junit.mjs +0 -60
  132. package/esm/ai/src/eval/report-junit.mjs.map +0 -1
  133. package/esm/ai/src/eval/scorers.mjs +0 -101
  134. package/esm/ai/src/eval/scorers.mjs.map +0 -1
  135. package/esm/ai/src/guard/detectors/index.mjs +0 -6
  136. package/esm/ai/src/guard/detectors/injection.mjs +0 -254
  137. package/esm/ai/src/guard/detectors/injection.mjs.map +0 -1
  138. package/esm/ai/src/guard/detectors/moderation.mjs +0 -134
  139. package/esm/ai/src/guard/detectors/moderation.mjs.map +0 -1
  140. package/esm/ai/src/guard/detectors/pii.mjs +0 -199
  141. package/esm/ai/src/guard/detectors/pii.mjs.map +0 -1
  142. package/esm/ai/src/guard/detectors/topic.mjs +0 -99
  143. package/esm/ai/src/guard/detectors/topic.mjs.map +0 -1
  144. package/esm/ai/src/guard/errors.mjs +0 -18
  145. package/esm/ai/src/guard/errors.mjs.map +0 -1
  146. package/esm/ai/src/guard/guard.mjs +0 -209
  147. package/esm/ai/src/guard/guard.mjs.map +0 -1
  148. package/esm/ai/src/guard/guardrail.mjs +0 -22
  149. package/esm/ai/src/guard/guardrail.mjs.map +0 -1
  150. package/esm/ai/src/human/errors.mjs +0 -60
  151. package/esm/ai/src/human/errors.mjs.map +0 -1
  152. package/esm/ai/src/human/human-approval.mjs +0 -170
  153. package/esm/ai/src/human/human-approval.mjs.map +0 -1
  154. package/esm/ai/src/human/policy.mjs +0 -67
  155. package/esm/ai/src/human/policy.mjs.map +0 -1
  156. package/esm/ai/src/human/register.mjs +0 -37
  157. package/esm/ai/src/human/register.mjs.map +0 -1
  158. package/esm/ai/src/human/resume-seed.mjs +0 -53
  159. package/esm/ai/src/human/resume-seed.mjs.map +0 -1
  160. package/esm/ai/src/human/resume.mjs +0 -121
  161. package/esm/ai/src/human/resume.mjs.map +0 -1
  162. package/esm/ai/src/human/stores/index.mjs +0 -5
  163. package/esm/ai/src/human/stores/memory.mjs +0 -91
  164. package/esm/ai/src/human/stores/memory.mjs.map +0 -1
  165. package/esm/ai/src/human/stores/pg.mjs +0 -220
  166. package/esm/ai/src/human/stores/pg.mjs.map +0 -1
  167. package/esm/ai/src/human/stores/redis.mjs +0 -201
  168. package/esm/ai/src/human/stores/redis.mjs.map +0 -1
  169. package/esm/ai/src/image/image-cost.mjs +0 -55
  170. package/esm/ai/src/image/image-cost.mjs.map +0 -1
  171. package/esm/ai/src/image/image.mjs +0 -112
  172. package/esm/ai/src/image/image.mjs.map +0 -1
  173. package/esm/ai/src/image/index.mjs +0 -4
  174. package/esm/ai/src/index.mjs +0 -196
  175. package/esm/ai/src/memory/derive-id.mjs +0 -24
  176. package/esm/ai/src/memory/derive-id.mjs.map +0 -1
  177. package/esm/ai/src/memory/episodic-memory.mjs +0 -106
  178. package/esm/ai/src/memory/episodic-memory.mjs.map +0 -1
  179. package/esm/ai/src/memory/memory.mjs +0 -166
  180. package/esm/ai/src/memory/memory.mjs.map +0 -1
  181. package/esm/ai/src/memory/procedural-memory.mjs +0 -103
  182. package/esm/ai/src/memory/procedural-memory.mjs.map +0 -1
  183. package/esm/ai/src/memory/semantic-memory.mjs +0 -80
  184. package/esm/ai/src/memory/semantic-memory.mjs.map +0 -1
  185. package/esm/ai/src/memory/working-memory.mjs +0 -62
  186. package/esm/ai/src/memory/working-memory.mjs.map +0 -1
  187. package/esm/ai/src/middleware/builtins/budget.mjs +0 -219
  188. package/esm/ai/src/middleware/builtins/budget.mjs.map +0 -1
  189. package/esm/ai/src/middleware/builtins/guardrail.mjs +0 -76
  190. package/esm/ai/src/middleware/builtins/guardrail.mjs.map +0 -1
  191. package/esm/ai/src/middleware/builtins/semantic-cache.mjs +0 -149
  192. package/esm/ai/src/middleware/builtins/semantic-cache.mjs.map +0 -1
  193. package/esm/ai/src/middleware/helpers/compose.mjs +0 -52
  194. package/esm/ai/src/middleware/helpers/compose.mjs.map +0 -1
  195. package/esm/ai/src/middleware/helpers/for-tool.mjs +0 -80
  196. package/esm/ai/src/middleware/helpers/for-tool.mjs.map +0 -1
  197. package/esm/ai/src/middleware/index.mjs +0 -10
  198. package/esm/ai/src/middleware/pipeline.mjs +0 -100
  199. package/esm/ai/src/middleware/pipeline.mjs.map +0 -1
  200. package/esm/ai/src/middleware/utils/extract-user-text.mjs +0 -47
  201. package/esm/ai/src/middleware/utils/extract-user-text.mjs.map +0 -1
  202. package/esm/ai/src/middleware/utils/namespaced-state.mjs +0 -60
  203. package/esm/ai/src/middleware/utils/namespaced-state.mjs.map +0 -1
  204. package/esm/ai/src/mock/index.mjs +0 -4
  205. package/esm/ai/src/mock/mock-agent.mjs +0 -3
  206. package/esm/ai/src/mock/mock-router.mjs +0 -58
  207. package/esm/ai/src/mock/mock-router.mjs.map +0 -1
  208. package/esm/ai/src/model/fallback-model.mjs +0 -218
  209. package/esm/ai/src/model/fallback-model.mjs.map +0 -1
  210. package/esm/ai/src/model/index.mjs +0 -3
  211. package/esm/ai/src/object-stream/index.mjs +0 -4
  212. package/esm/ai/src/object-stream/parse-partial-json.mjs +0 -78
  213. package/esm/ai/src/object-stream/parse-partial-json.mjs.map +0 -1
  214. package/esm/ai/src/object-stream/stream-object.mjs +0 -97
  215. package/esm/ai/src/object-stream/stream-object.mjs.map +0 -1
  216. package/esm/ai/src/observe/index.mjs +0 -4
  217. package/esm/ai/src/observe/observer-registry.mjs +0 -35
  218. package/esm/ai/src/observe/observer-registry.mjs.map +0 -1
  219. package/esm/ai/src/observe/resolve-observers.mjs +0 -73
  220. package/esm/ai/src/observe/resolve-observers.mjs.map +0 -1
  221. package/esm/ai/src/orchestrator/as-tool.mjs +0 -98
  222. package/esm/ai/src/orchestrator/as-tool.mjs.map +0 -1
  223. package/esm/ai/src/orchestrator/checkpoint.mjs +0 -75
  224. package/esm/ai/src/orchestrator/checkpoint.mjs.map +0 -1
  225. package/esm/ai/src/orchestrator/commands.mjs +0 -34
  226. package/esm/ai/src/orchestrator/commands.mjs.map +0 -1
  227. package/esm/ai/src/orchestrator/compaction.mjs +0 -206
  228. package/esm/ai/src/orchestrator/compaction.mjs.map +0 -1
  229. package/esm/ai/src/orchestrator/dispatch.mjs +0 -171
  230. package/esm/ai/src/orchestrator/dispatch.mjs.map +0 -1
  231. package/esm/ai/src/orchestrator/emitter.mjs +0 -85
  232. package/esm/ai/src/orchestrator/emitter.mjs.map +0 -1
  233. package/esm/ai/src/orchestrator/execution.mjs +0 -395
  234. package/esm/ai/src/orchestrator/execution.mjs.map +0 -1
  235. package/esm/ai/src/orchestrator/index.mjs +0 -11
  236. package/esm/ai/src/orchestrator/load.mjs +0 -49
  237. package/esm/ai/src/orchestrator/load.mjs.map +0 -1
  238. package/esm/ai/src/orchestrator/lock.mjs +0 -75
  239. package/esm/ai/src/orchestrator/lock.mjs.map +0 -1
  240. package/esm/ai/src/orchestrator/memory.mjs +0 -141
  241. package/esm/ai/src/orchestrator/memory.mjs.map +0 -1
  242. package/esm/ai/src/orchestrator/orchestrator-stream.mjs +0 -98
  243. package/esm/ai/src/orchestrator/orchestrator-stream.mjs.map +0 -1
  244. package/esm/ai/src/orchestrator/orchestrator.mjs +0 -206
  245. package/esm/ai/src/orchestrator/orchestrator.mjs.map +0 -1
  246. package/esm/ai/src/orchestrator/resume.mjs +0 -74
  247. package/esm/ai/src/orchestrator/resume.mjs.map +0 -1
  248. package/esm/ai/src/orchestrator/session-lock.mjs +0 -83
  249. package/esm/ai/src/orchestrator/session-lock.mjs.map +0 -1
  250. package/esm/ai/src/orchestrator/signature.mjs +0 -120
  251. package/esm/ai/src/orchestrator/signature.mjs.map +0 -1
  252. package/esm/ai/src/orchestrator/window.mjs +0 -56
  253. package/esm/ai/src/orchestrator/window.mjs.map +0 -1
  254. package/esm/ai/src/planner/dag-scheduler.mjs +0 -97
  255. package/esm/ai/src/planner/dag-scheduler.mjs.map +0 -1
  256. package/esm/ai/src/planner/index.mjs +0 -6
  257. package/esm/ai/src/planner/plan-prompt.mjs +0 -31
  258. package/esm/ai/src/planner/plan-prompt.mjs.map +0 -1
  259. package/esm/ai/src/planner/plan-schema.mjs +0 -120
  260. package/esm/ai/src/planner/plan-schema.mjs.map +0 -1
  261. package/esm/ai/src/planner/planner-run.mjs +0 -769
  262. package/esm/ai/src/planner/planner-run.mjs.map +0 -1
  263. package/esm/ai/src/planner/planner.mjs +0 -144
  264. package/esm/ai/src/planner/planner.mjs.map +0 -1
  265. package/esm/ai/src/planner/signature.mjs +0 -27
  266. package/esm/ai/src/planner/signature.mjs.map +0 -1
  267. package/esm/ai/src/planner/snapshot.mjs +0 -95
  268. package/esm/ai/src/planner/snapshot.mjs.map +0 -1
  269. package/esm/ai/src/prompt/errors.mjs +0 -73
  270. package/esm/ai/src/prompt/errors.mjs.map +0 -1
  271. package/esm/ai/src/prompt/index.mjs +0 -4
  272. package/esm/ai/src/prompt/prompt-langfuse-sync.mjs +0 -104
  273. package/esm/ai/src/prompt/prompt-langfuse-sync.mjs.map +0 -1
  274. package/esm/ai/src/prompt/prompt-validate.mjs +0 -170
  275. package/esm/ai/src/prompt/prompt-validate.mjs.map +0 -1
  276. package/esm/ai/src/prompt/prompt.mjs +0 -218
  277. package/esm/ai/src/prompt/prompt.mjs.map +0 -1
  278. package/esm/ai/src/prompts/index.mjs +0 -3
  279. package/esm/ai/src/prompts/prompts-manager.mjs +0 -410
  280. package/esm/ai/src/prompts/prompts-manager.mjs.map +0 -1
  281. package/esm/ai/src/prompts/prompts-validate.mjs +0 -0
  282. package/esm/ai/src/prompts/prompts-validate.mjs.map +0 -1
  283. package/esm/ai/src/rag/as-tool.mjs +0 -48
  284. package/esm/ai/src/rag/as-tool.mjs.map +0 -1
  285. package/esm/ai/src/rag/chunk/chunk.mjs +0 -44
  286. package/esm/ai/src/rag/chunk/chunk.mjs.map +0 -1
  287. package/esm/ai/src/rag/chunk/fixed.mjs +0 -32
  288. package/esm/ai/src/rag/chunk/fixed.mjs.map +0 -1
  289. package/esm/ai/src/rag/chunk/markdown.mjs +0 -75
  290. package/esm/ai/src/rag/chunk/markdown.mjs.map +0 -1
  291. package/esm/ai/src/rag/chunk/recursive.mjs +0 -132
  292. package/esm/ai/src/rag/chunk/recursive.mjs.map +0 -1
  293. package/esm/ai/src/rag/chunk/sentence.mjs +0 -73
  294. package/esm/ai/src/rag/chunk/sentence.mjs.map +0 -1
  295. package/esm/ai/src/rag/hybrid/bm25.mjs +0 -51
  296. package/esm/ai/src/rag/hybrid/bm25.mjs.map +0 -1
  297. package/esm/ai/src/rag/hybrid/hybrid-rank.mjs +0 -29
  298. package/esm/ai/src/rag/hybrid/hybrid-rank.mjs.map +0 -1
  299. package/esm/ai/src/rag/hybrid/rrf.mjs +0 -30
  300. package/esm/ai/src/rag/hybrid/rrf.mjs.map +0 -1
  301. package/esm/ai/src/rag/index.mjs +0 -18
  302. package/esm/ai/src/rag/loaders/errors.mjs +0 -25
  303. package/esm/ai/src/rag/loaders/errors.mjs.map +0 -1
  304. package/esm/ai/src/rag/loaders/index.mjs +0 -7
  305. package/esm/ai/src/rag/loaders/load-html.mjs +0 -138
  306. package/esm/ai/src/rag/loaders/load-html.mjs.map +0 -1
  307. package/esm/ai/src/rag/loaders/load-pdf.mjs +0 -150
  308. package/esm/ai/src/rag/loaders/load-pdf.mjs.map +0 -1
  309. package/esm/ai/src/rag/loaders/load-text.mjs +0 -60
  310. package/esm/ai/src/rag/loaders/load-text.mjs.map +0 -1
  311. package/esm/ai/src/rag/loaders/load-web.mjs +0 -89
  312. package/esm/ai/src/rag/loaders/load-web.mjs.map +0 -1
  313. package/esm/ai/src/rag/rag.mjs +0 -126
  314. package/esm/ai/src/rag/rag.mjs.map +0 -1
  315. package/esm/ai/src/rag/rerank/keyword-reranker.mjs +0 -58
  316. package/esm/ai/src/rag/rerank/keyword-reranker.mjs.map +0 -1
  317. package/esm/ai/src/rag/rerank/llm-reranker.mjs +0 -85
  318. package/esm/ai/src/rag/rerank/llm-reranker.mjs.map +0 -1
  319. package/esm/ai/src/rag/retrieve.mjs +0 -68
  320. package/esm/ai/src/rag/retrieve.mjs.map +0 -1
  321. package/esm/ai/src/rag/store/cache-vector-store.mjs +0 -48
  322. package/esm/ai/src/rag/store/cache-vector-store.mjs.map +0 -1
  323. package/esm/ai/src/rag/store/pg-vector-store.mjs +0 -328
  324. package/esm/ai/src/rag/store/pg-vector-store.mjs.map +0 -1
  325. package/esm/ai/src/rag/transforms/multi-query.mjs +0 -41
  326. package/esm/ai/src/rag/transforms/multi-query.mjs.map +0 -1
  327. package/esm/ai/src/security/index.mjs +0 -5
  328. package/esm/ai/src/security/outbound-policy.mjs +0 -187
  329. package/esm/ai/src/security/outbound-policy.mjs.map +0 -1
  330. package/esm/ai/src/security/private-ip.mjs +0 -48
  331. package/esm/ai/src/security/private-ip.mjs.map +0 -1
  332. package/esm/ai/src/security/redact.mjs +0 -60
  333. package/esm/ai/src/security/redact.mjs.map +0 -1
  334. package/esm/ai/src/serve/serve.mjs +0 -90
  335. package/esm/ai/src/serve/serve.mjs.map +0 -1
  336. package/esm/ai/src/serve/sse.mjs +0 -25
  337. package/esm/ai/src/serve/sse.mjs.map +0 -1
  338. package/esm/ai/src/serve/stream-to-sse.mjs +0 -37
  339. package/esm/ai/src/serve/stream-to-sse.mjs.map +0 -1
  340. package/esm/ai/src/skills/catalog.mjs +0 -140
  341. package/esm/ai/src/skills/catalog.mjs.map +0 -1
  342. package/esm/ai/src/skills/index.mjs +0 -11
  343. package/esm/ai/src/skills/load-skill-tool.mjs +0 -65
  344. package/esm/ai/src/skills/load-skill-tool.mjs.map +0 -1
  345. package/esm/ai/src/skills/save-skill-tool.mjs +0 -65
  346. package/esm/ai/src/skills/save-skill-tool.mjs.map +0 -1
  347. package/esm/ai/src/skills/skills.mjs +0 -109
  348. package/esm/ai/src/skills/skills.mjs.map +0 -1
  349. package/esm/ai/src/skills/sources/directory-source.mjs +0 -108
  350. package/esm/ai/src/skills/sources/directory-source.mjs.map +0 -1
  351. package/esm/ai/src/skills/sources/index.mjs +0 -27
  352. package/esm/ai/src/skills/sources/index.mjs.map +0 -1
  353. package/esm/ai/src/skills/sources/parse-frontmatter.mjs +0 -46
  354. package/esm/ai/src/skills/sources/parse-frontmatter.mjs.map +0 -1
  355. package/esm/ai/src/skills/sources/store-source.mjs +0 -15
  356. package/esm/ai/src/skills/sources/store-source.mjs.map +0 -1
  357. package/esm/ai/src/skills/sources/url-source.mjs +0 -117
  358. package/esm/ai/src/skills/sources/url-source.mjs.map +0 -1
  359. package/esm/ai/src/snapshot/memory.mjs +0 -81
  360. package/esm/ai/src/snapshot/memory.mjs.map +0 -1
  361. package/esm/ai/src/snapshot/pg.mjs +0 -146
  362. package/esm/ai/src/snapshot/pg.mjs.map +0 -1
  363. package/esm/ai/src/snapshot/redis.mjs +0 -101
  364. package/esm/ai/src/snapshot/redis.mjs.map +0 -1
  365. package/esm/ai/src/speech/index.mjs +0 -3
  366. package/esm/ai/src/speech/speech.mjs +0 -122
  367. package/esm/ai/src/speech/speech.mjs.map +0 -1
  368. package/esm/ai/src/supervisor/as-tool.mjs +0 -74
  369. package/esm/ai/src/supervisor/as-tool.mjs.map +0 -1
  370. package/esm/ai/src/supervisor/cancellation.mjs +0 -22
  371. package/esm/ai/src/supervisor/cancellation.mjs.map +0 -1
  372. package/esm/ai/src/supervisor/decide.mjs +0 -272
  373. package/esm/ai/src/supervisor/decide.mjs.map +0 -1
  374. package/esm/ai/src/supervisor/emitter.mjs +0 -47
  375. package/esm/ai/src/supervisor/emitter.mjs.map +0 -1
  376. package/esm/ai/src/supervisor/entries.mjs +0 -206
  377. package/esm/ai/src/supervisor/entries.mjs.map +0 -1
  378. package/esm/ai/src/supervisor/execution.mjs +0 -1921
  379. package/esm/ai/src/supervisor/execution.mjs.map +0 -1
  380. package/esm/ai/src/supervisor/fan-out.mjs +0 -65
  381. package/esm/ai/src/supervisor/fan-out.mjs.map +0 -1
  382. package/esm/ai/src/supervisor/index.mjs +0 -14
  383. package/esm/ai/src/supervisor/router-factory.mjs +0 -141
  384. package/esm/ai/src/supervisor/router-factory.mjs.map +0 -1
  385. package/esm/ai/src/supervisor/router-prompt.mjs +0 -52
  386. package/esm/ai/src/supervisor/router-prompt.mjs.map +0 -1
  387. package/esm/ai/src/supervisor/signature.mjs +0 -89
  388. package/esm/ai/src/supervisor/signature.mjs.map +0 -1
  389. package/esm/ai/src/supervisor/snapshot.mjs +0 -69
  390. package/esm/ai/src/supervisor/snapshot.mjs.map +0 -1
  391. package/esm/ai/src/supervisor/supervisor-stream.mjs +0 -89
  392. package/esm/ai/src/supervisor/supervisor-stream.mjs.map +0 -1
  393. package/esm/ai/src/supervisor/supervisor.mjs +0 -144
  394. package/esm/ai/src/supervisor/supervisor.mjs.map +0 -1
  395. package/esm/ai/src/system-prompt/index.mjs +0 -7
  396. package/esm/ai/src/system-prompt/instruction.mjs +0 -57
  397. package/esm/ai/src/system-prompt/instruction.mjs.map +0 -1
  398. package/esm/ai/src/system-prompt/persona.mjs +0 -57
  399. package/esm/ai/src/system-prompt/persona.mjs.map +0 -1
  400. package/esm/ai/src/system-prompt/refined-system-prompt.mjs +0 -461
  401. package/esm/ai/src/system-prompt/refined-system-prompt.mjs.map +0 -1
  402. package/esm/ai/src/system-prompt/render-placeholders.mjs +0 -58
  403. package/esm/ai/src/system-prompt/render-placeholders.mjs.map +0 -1
  404. package/esm/ai/src/system-prompt/system-prompt.mjs +0 -286
  405. package/esm/ai/src/system-prompt/system-prompt.mjs.map +0 -1
  406. package/esm/ai/src/team/gates.mjs +0 -48
  407. package/esm/ai/src/team/gates.mjs.map +0 -1
  408. package/esm/ai/src/team/index.mjs +0 -3
  409. package/esm/ai/src/team/team.mjs +0 -94
  410. package/esm/ai/src/team/team.mjs.map +0 -1
  411. package/esm/ai/src/tool/executable-as-tool.mjs +0 -81
  412. package/esm/ai/src/tool/executable-as-tool.mjs.map +0 -1
  413. package/esm/ai/src/tool/index.mjs +0 -4
  414. package/esm/ai/src/tool/tool.mjs +0 -185
  415. package/esm/ai/src/tool/tool.mjs.map +0 -1
  416. package/esm/ai/src/transcribe/audio-input.mjs +0 -84
  417. package/esm/ai/src/transcribe/audio-input.mjs.map +0 -1
  418. package/esm/ai/src/transcribe/index.mjs +0 -4
  419. package/esm/ai/src/transcribe/transcribe.mjs +0 -127
  420. package/esm/ai/src/transcribe/transcribe.mjs.map +0 -1
  421. package/esm/ai/src/utils/compute-cost.mjs +0 -112
  422. package/esm/ai/src/utils/compute-cost.mjs.map +0 -1
  423. package/esm/ai/src/utils/extract-json-lenient.mjs +0 -97
  424. package/esm/ai/src/utils/extract-json-lenient.mjs.map +0 -1
  425. package/esm/ai/src/utils/extract-json-payload.mjs +0 -39
  426. package/esm/ai/src/utils/extract-json-payload.mjs.map +0 -1
  427. package/esm/ai/src/utils/generate-run-id.mjs +0 -23
  428. package/esm/ai/src/utils/generate-run-id.mjs.map +0 -1
  429. package/esm/ai/src/utils/index.mjs +0 -12
  430. package/esm/ai/src/utils/json-schema.mjs +0 -89
  431. package/esm/ai/src/utils/json-schema.mjs.map +0 -1
  432. package/esm/ai/src/utils/prepare-attachment-part.mjs +0 -232
  433. package/esm/ai/src/utils/prepare-attachment-part.mjs.map +0 -1
  434. package/esm/ai/src/utils/resolve-attachment.mjs +0 -74
  435. package/esm/ai/src/utils/resolve-attachment.mjs.map +0 -1
  436. package/esm/ai/src/utils/run-context.mjs +0 -89
  437. package/esm/ai/src/utils/run-context.mjs.map +0 -1
  438. package/esm/ai/src/utils/safe-json-parse.mjs +0 -22
  439. package/esm/ai/src/utils/safe-json-parse.mjs.map +0 -1
  440. package/esm/ai/src/utils/stamp-report-lineage.mjs +0 -45
  441. package/esm/ai/src/utils/stamp-report-lineage.mjs.map +0 -1
  442. package/esm/ai/src/vcr/cassette-io.mjs +0 -57
  443. package/esm/ai/src/vcr/cassette-io.mjs.map +0 -1
  444. package/esm/ai/src/vcr/errors.mjs +0 -37
  445. package/esm/ai/src/vcr/errors.mjs.map +0 -1
  446. package/esm/ai/src/vcr/hash-request.mjs +0 -118
  447. package/esm/ai/src/vcr/hash-request.mjs.map +0 -1
  448. package/esm/ai/src/vcr/index.mjs +0 -5
  449. package/esm/ai/src/vcr/vcr.mjs +0 -248
  450. package/esm/ai/src/vcr/vcr.mjs.map +0 -1
  451. package/esm/ai/src/workflow/as-tool.mjs +0 -49
  452. package/esm/ai/src/workflow/as-tool.mjs.map +0 -1
  453. package/esm/ai/src/workflow/cancellation.mjs +0 -44
  454. package/esm/ai/src/workflow/cancellation.mjs.map +0 -1
  455. package/esm/ai/src/workflow/emitter.mjs +0 -40
  456. package/esm/ai/src/workflow/emitter.mjs.map +0 -1
  457. package/esm/ai/src/workflow/engine.mjs +0 -363
  458. package/esm/ai/src/workflow/engine.mjs.map +0 -1
  459. package/esm/ai/src/workflow/index.mjs +0 -5
  460. package/esm/ai/src/workflow/retry.mjs +0 -32
  461. package/esm/ai/src/workflow/retry.mjs.map +0 -1
  462. package/esm/ai/src/workflow/router.mjs +0 -56
  463. package/esm/ai/src/workflow/router.mjs.map +0 -1
  464. package/esm/ai/src/workflow/run-scoped-emitter.mjs +0 -32
  465. package/esm/ai/src/workflow/run-scoped-emitter.mjs.map +0 -1
  466. package/esm/ai/src/workflow/signature.mjs +0 -34
  467. package/esm/ai/src/workflow/signature.mjs.map +0 -1
  468. package/esm/ai/src/workflow/snapshot.mjs +0 -77
  469. package/esm/ai/src/workflow/snapshot.mjs.map +0 -1
  470. package/esm/ai/src/workflow/state.mjs +0 -37
  471. package/esm/ai/src/workflow/state.mjs.map +0 -1
  472. package/esm/ai/src/workflow/step-runner.mjs +0 -370
  473. package/esm/ai/src/workflow/step-runner.mjs.map +0 -1
  474. package/esm/ai/src/workflow/step.mjs +0 -37
  475. package/esm/ai/src/workflow/step.mjs.map +0 -1
  476. package/esm/ai/src/workflow/workflow.mjs +0 -122
  477. package/esm/ai/src/workflow/workflow.mjs.map +0 -1
  478. package/esm/ai-openai/src/embedder.mjs +0 -4
  479. package/esm/ai-openai/src/image.mjs +0 -5
  480. package/esm/ai-openai/src/index.mjs +0 -7
  481. package/esm/ai-openai/src/model.mjs +0 -5
  482. package/esm/ai-openai/src/sdk.mjs +0 -9
  483. package/esm/ai-openai/src/speech.mjs +0 -5
  484. package/esm/ai-openai/src/transcription.mjs +0 -6
  485. package/esm/ai-openai/src/utils/index.mjs +0 -5
  486. package/esm/ai-openai/src/utils/to-openai-messages.mjs +0 -3
  487. package/esm/ai-openai/src/utils/to-openai-tools.mjs +0 -3
  488. package/esm/ai-openai/src/utils/wrap-openai-error.mjs +0 -4
  489. package/esm/node_modules/langfuse/lib/index.mjs +0 -1827
  490. package/esm/node_modules/langfuse/lib/index.mjs.map +0 -1
  491. package/esm/node_modules/langfuse-core/lib/index.mjs +0 -1770
  492. package/esm/node_modules/langfuse-core/lib/index.mjs.map +0 -1
  493. package/esm/node_modules/mustache/mustache.mjs +0 -587
  494. package/esm/node_modules/mustache/mustache.mjs.map +0 -1
  495. package/esm/node_modules/openai/_vendor/partial-json-parser/parser.mjs +0 -180
  496. package/esm/node_modules/openai/_vendor/partial-json-parser/parser.mjs.map +0 -1
  497. package/esm/node_modules/openai/auth/workload-identity-auth.mjs +0 -80
  498. package/esm/node_modules/openai/auth/workload-identity-auth.mjs.map +0 -1
  499. package/esm/node_modules/openai/azure.mjs +0 -82
  500. package/esm/node_modules/openai/azure.mjs.map +0 -1
  501. package/esm/node_modules/openai/client.mjs +0 -638
  502. package/esm/node_modules/openai/client.mjs.map +0 -1
  503. package/esm/node_modules/openai/core/api-promise.mjs +0 -75
  504. package/esm/node_modules/openai/core/api-promise.mjs.map +0 -1
  505. package/esm/node_modules/openai/core/error.mjs +0 -110
  506. package/esm/node_modules/openai/core/error.mjs.map +0 -1
  507. package/esm/node_modules/openai/core/pagination.mjs +0 -160
  508. package/esm/node_modules/openai/core/pagination.mjs.map +0 -1
  509. package/esm/node_modules/openai/core/resource.mjs +0 -10
  510. package/esm/node_modules/openai/core/resource.mjs.map +0 -1
  511. package/esm/node_modules/openai/core/streaming.mjs +0 -238
  512. package/esm/node_modules/openai/core/streaming.mjs.map +0 -1
  513. package/esm/node_modules/openai/index.mjs +0 -8
  514. package/esm/node_modules/openai/internal/decoders/line.mjs +0 -91
  515. package/esm/node_modules/openai/internal/decoders/line.mjs.map +0 -1
  516. package/esm/node_modules/openai/internal/detect-platform.mjs +0 -123
  517. package/esm/node_modules/openai/internal/detect-platform.mjs.map +0 -1
  518. package/esm/node_modules/openai/internal/errors.mjs +0 -26
  519. package/esm/node_modules/openai/internal/errors.mjs.map +0 -1
  520. package/esm/node_modules/openai/internal/headers.mjs +0 -65
  521. package/esm/node_modules/openai/internal/headers.mjs.map +0 -1
  522. package/esm/node_modules/openai/internal/parse.mjs +0 -41
  523. package/esm/node_modules/openai/internal/parse.mjs.map +0 -1
  524. package/esm/node_modules/openai/internal/qs/formats.mjs +0 -12
  525. package/esm/node_modules/openai/internal/qs/formats.mjs.map +0 -1
  526. package/esm/node_modules/openai/internal/qs/stringify.mjs +0 -179
  527. package/esm/node_modules/openai/internal/qs/stringify.mjs.map +0 -1
  528. package/esm/node_modules/openai/internal/qs/utils.mjs +0 -65
  529. package/esm/node_modules/openai/internal/qs/utils.mjs.map +0 -1
  530. package/esm/node_modules/openai/internal/request-options.mjs +0 -11
  531. package/esm/node_modules/openai/internal/request-options.mjs.map +0 -1
  532. package/esm/node_modules/openai/internal/shims.mjs +0 -77
  533. package/esm/node_modules/openai/internal/shims.mjs.map +0 -1
  534. package/esm/node_modules/openai/internal/to-file.mjs +0 -63
  535. package/esm/node_modules/openai/internal/to-file.mjs.map +0 -1
  536. package/esm/node_modules/openai/internal/tslib.mjs +0 -16
  537. package/esm/node_modules/openai/internal/tslib.mjs.map +0 -1
  538. package/esm/node_modules/openai/internal/uploads.mjs +0 -94
  539. package/esm/node_modules/openai/internal/uploads.mjs.map +0 -1
  540. package/esm/node_modules/openai/internal/utils/base64.mjs +0 -22
  541. package/esm/node_modules/openai/internal/utils/base64.mjs.map +0 -1
  542. package/esm/node_modules/openai/internal/utils/bytes.mjs +0 -26
  543. package/esm/node_modules/openai/internal/utils/bytes.mjs.map +0 -1
  544. package/esm/node_modules/openai/internal/utils/env.mjs +0 -16
  545. package/esm/node_modules/openai/internal/utils/env.mjs.map +0 -1
  546. package/esm/node_modules/openai/internal/utils/log.mjs +0 -58
  547. package/esm/node_modules/openai/internal/utils/log.mjs.map +0 -1
  548. package/esm/node_modules/openai/internal/utils/path.mjs +0 -62
  549. package/esm/node_modules/openai/internal/utils/path.mjs.map +0 -1
  550. package/esm/node_modules/openai/internal/utils/query.mjs +0 -10
  551. package/esm/node_modules/openai/internal/utils/query.mjs.map +0 -1
  552. package/esm/node_modules/openai/internal/utils/sleep.mjs +0 -6
  553. package/esm/node_modules/openai/internal/utils/sleep.mjs.map +0 -1
  554. package/esm/node_modules/openai/internal/utils/uuid.mjs +0 -18
  555. package/esm/node_modules/openai/internal/utils/uuid.mjs.map +0 -1
  556. package/esm/node_modules/openai/internal/utils/values.mjs +0 -41
  557. package/esm/node_modules/openai/internal/utils/values.mjs.map +0 -1
  558. package/esm/node_modules/openai/lib/AbstractChatCompletionRunner.mjs +0 -247
  559. package/esm/node_modules/openai/lib/AbstractChatCompletionRunner.mjs.map +0 -1
  560. package/esm/node_modules/openai/lib/AssistantStream.mjs +0 -472
  561. package/esm/node_modules/openai/lib/AssistantStream.mjs.map +0 -1
  562. package/esm/node_modules/openai/lib/ChatCompletionRunner.mjs +0 -26
  563. package/esm/node_modules/openai/lib/ChatCompletionRunner.mjs.map +0 -1
  564. package/esm/node_modules/openai/lib/ChatCompletionStream.mjs +0 -423
  565. package/esm/node_modules/openai/lib/ChatCompletionStream.mjs.map +0 -1
  566. package/esm/node_modules/openai/lib/ChatCompletionStreamingRunner.mjs +0 -26
  567. package/esm/node_modules/openai/lib/ChatCompletionStreamingRunner.mjs.map +0 -1
  568. package/esm/node_modules/openai/lib/EventStream.mjs +0 -163
  569. package/esm/node_modules/openai/lib/EventStream.mjs.map +0 -1
  570. package/esm/node_modules/openai/lib/ResponsesParser.mjs +0 -94
  571. package/esm/node_modules/openai/lib/ResponsesParser.mjs.map +0 -1
  572. package/esm/node_modules/openai/lib/RunnableFunction.mjs +0 -8
  573. package/esm/node_modules/openai/lib/RunnableFunction.mjs.map +0 -1
  574. package/esm/node_modules/openai/lib/Util.mjs +0 -19
  575. package/esm/node_modules/openai/lib/Util.mjs.map +0 -1
  576. package/esm/node_modules/openai/lib/chatCompletionUtils.mjs +0 -11
  577. package/esm/node_modules/openai/lib/chatCompletionUtils.mjs.map +0 -1
  578. package/esm/node_modules/openai/lib/parser.mjs +0 -88
  579. package/esm/node_modules/openai/lib/parser.mjs.map +0 -1
  580. package/esm/node_modules/openai/lib/responses/ResponseStream.mjs +0 -231
  581. package/esm/node_modules/openai/lib/responses/ResponseStream.mjs.map +0 -1
  582. package/esm/node_modules/openai/resources/admin/admin.mjs +0 -15
  583. package/esm/node_modules/openai/resources/admin/admin.mjs.map +0 -1
  584. package/esm/node_modules/openai/resources/admin/organization/admin-api-keys.mjs +0 -81
  585. package/esm/node_modules/openai/resources/admin/organization/admin-api-keys.mjs.map +0 -1
  586. package/esm/node_modules/openai/resources/admin/organization/audit-logs.mjs +0 -31
  587. package/esm/node_modules/openai/resources/admin/organization/audit-logs.mjs.map +0 -1
  588. package/esm/node_modules/openai/resources/admin/organization/certificates.mjs +0 -153
  589. package/esm/node_modules/openai/resources/admin/organization/certificates.mjs.map +0 -1
  590. package/esm/node_modules/openai/resources/admin/organization/data-retention.mjs +0 -42
  591. package/esm/node_modules/openai/resources/admin/organization/data-retention.mjs.map +0 -1
  592. package/esm/node_modules/openai/resources/admin/organization/groups/groups.mjs +0 -106
  593. package/esm/node_modules/openai/resources/admin/organization/groups/groups.mjs.map +0 -1
  594. package/esm/node_modules/openai/resources/admin/organization/groups/roles.mjs +0 -88
  595. package/esm/node_modules/openai/resources/admin/organization/groups/roles.mjs.map +0 -1
  596. package/esm/node_modules/openai/resources/admin/organization/groups/users.mjs +0 -88
  597. package/esm/node_modules/openai/resources/admin/organization/groups/users.mjs.map +0 -1
  598. package/esm/node_modules/openai/resources/admin/organization/invites.mjs +0 -83
  599. package/esm/node_modules/openai/resources/admin/organization/invites.mjs.map +0 -1
  600. package/esm/node_modules/openai/resources/admin/organization/organization.mjs +0 -45
  601. package/esm/node_modules/openai/resources/admin/organization/organization.mjs.map +0 -1
  602. package/esm/node_modules/openai/resources/admin/organization/projects/api-keys.mjs +0 -72
  603. package/esm/node_modules/openai/resources/admin/organization/projects/api-keys.mjs.map +0 -1
  604. package/esm/node_modules/openai/resources/admin/organization/projects/certificates.mjs +0 -78
  605. package/esm/node_modules/openai/resources/admin/organization/projects/certificates.mjs.map +0 -1
  606. package/esm/node_modules/openai/resources/admin/organization/projects/data-retention.mjs +0 -46
  607. package/esm/node_modules/openai/resources/admin/organization/projects/data-retention.mjs.map +0 -1
  608. package/esm/node_modules/openai/resources/admin/organization/projects/groups/groups.mjs +0 -95
  609. package/esm/node_modules/openai/resources/admin/organization/projects/groups/groups.mjs.map +0 -1
  610. package/esm/node_modules/openai/resources/admin/organization/projects/groups/roles.mjs +0 -91
  611. package/esm/node_modules/openai/resources/admin/organization/projects/groups/roles.mjs.map +0 -1
  612. package/esm/node_modules/openai/resources/admin/organization/projects/hosted-tool-permissions.mjs +0 -45
  613. package/esm/node_modules/openai/resources/admin/organization/projects/hosted-tool-permissions.mjs.map +0 -1
  614. package/esm/node_modules/openai/resources/admin/organization/projects/model-permissions.mjs +0 -63
  615. package/esm/node_modules/openai/resources/admin/organization/projects/model-permissions.mjs.map +0 -1
  616. package/esm/node_modules/openai/resources/admin/organization/projects/projects.mjs +0 -137
  617. package/esm/node_modules/openai/resources/admin/organization/projects/projects.mjs.map +0 -1
  618. package/esm/node_modules/openai/resources/admin/organization/projects/rate-limits.mjs +0 -51
  619. package/esm/node_modules/openai/resources/admin/organization/projects/rate-limits.mjs.map +0 -1
  620. package/esm/node_modules/openai/resources/admin/organization/projects/roles.mjs +0 -108
  621. package/esm/node_modules/openai/resources/admin/organization/projects/roles.mjs.map +0 -1
  622. package/esm/node_modules/openai/resources/admin/organization/projects/service-accounts.mjs +0 -112
  623. package/esm/node_modules/openai/resources/admin/organization/projects/service-accounts.mjs.map +0 -1
  624. package/esm/node_modules/openai/resources/admin/organization/projects/spend-alerts.mjs +0 -106
  625. package/esm/node_modules/openai/resources/admin/organization/projects/spend-alerts.mjs.map +0 -1
  626. package/esm/node_modules/openai/resources/admin/organization/projects/users/roles.mjs +0 -91
  627. package/esm/node_modules/openai/resources/admin/organization/projects/users/roles.mjs.map +0 -1
  628. package/esm/node_modules/openai/resources/admin/organization/projects/users/users.mjs +0 -118
  629. package/esm/node_modules/openai/resources/admin/organization/projects/users/users.mjs.map +0 -1
  630. package/esm/node_modules/openai/resources/admin/organization/roles.mjs +0 -96
  631. package/esm/node_modules/openai/resources/admin/organization/roles.mjs.map +0 -1
  632. package/esm/node_modules/openai/resources/admin/organization/spend-alerts.mjs +0 -97
  633. package/esm/node_modules/openai/resources/admin/organization/spend-alerts.mjs.map +0 -1
  634. package/esm/node_modules/openai/resources/admin/organization/usage.mjs +0 -207
  635. package/esm/node_modules/openai/resources/admin/organization/usage.mjs.map +0 -1
  636. package/esm/node_modules/openai/resources/admin/organization/users/roles.mjs +0 -88
  637. package/esm/node_modules/openai/resources/admin/organization/users/roles.mjs.map +0 -1
  638. package/esm/node_modules/openai/resources/admin/organization/users/users.mjs +0 -82
  639. package/esm/node_modules/openai/resources/admin/organization/users/users.mjs.map +0 -1
  640. package/esm/node_modules/openai/resources/audio/audio.mjs +0 -21
  641. package/esm/node_modules/openai/resources/audio/audio.mjs.map +0 -1
  642. package/esm/node_modules/openai/resources/audio/speech.mjs +0 -39
  643. package/esm/node_modules/openai/resources/audio/speech.mjs.map +0 -1
  644. package/esm/node_modules/openai/resources/audio/transcriptions.mjs +0 -22
  645. package/esm/node_modules/openai/resources/audio/transcriptions.mjs.map +0 -1
  646. package/esm/node_modules/openai/resources/audio/translations.mjs +0 -21
  647. package/esm/node_modules/openai/resources/audio/translations.mjs.map +0 -1
  648. package/esm/node_modules/openai/resources/batches.mjs +0 -54
  649. package/esm/node_modules/openai/resources/batches.mjs.map +0 -1
  650. package/esm/node_modules/openai/resources/beta/assistants.mjs +0 -78
  651. package/esm/node_modules/openai/resources/beta/assistants.mjs.map +0 -1
  652. package/esm/node_modules/openai/resources/beta/beta.mjs +0 -24
  653. package/esm/node_modules/openai/resources/beta/beta.mjs.map +0 -1
  654. package/esm/node_modules/openai/resources/beta/chatkit/chatkit.mjs +0 -18
  655. package/esm/node_modules/openai/resources/beta/chatkit/chatkit.mjs.map +0 -1
  656. package/esm/node_modules/openai/resources/beta/chatkit/sessions.mjs +0 -49
  657. package/esm/node_modules/openai/resources/beta/chatkit/sessions.mjs.map +0 -1
  658. package/esm/node_modules/openai/resources/beta/chatkit/threads.mjs +0 -85
  659. package/esm/node_modules/openai/resources/beta/chatkit/threads.mjs.map +0 -1
  660. package/esm/node_modules/openai/resources/beta/realtime/realtime.mjs +0 -21
  661. package/esm/node_modules/openai/resources/beta/realtime/realtime.mjs.map +0 -1
  662. package/esm/node_modules/openai/resources/beta/realtime/sessions.mjs +0 -33
  663. package/esm/node_modules/openai/resources/beta/realtime/sessions.mjs.map +0 -1
  664. package/esm/node_modules/openai/resources/beta/realtime/transcription-sessions.mjs +0 -33
  665. package/esm/node_modules/openai/resources/beta/realtime/transcription-sessions.mjs.map +0 -1
  666. package/esm/node_modules/openai/resources/beta/threads/messages.mjs +0 -83
  667. package/esm/node_modules/openai/resources/beta/threads/messages.mjs.map +0 -1
  668. package/esm/node_modules/openai/resources/beta/threads/runs/runs.mjs +0 -183
  669. package/esm/node_modules/openai/resources/beta/threads/runs/runs.mjs.map +0 -1
  670. package/esm/node_modules/openai/resources/beta/threads/runs/steps.mjs +0 -45
  671. package/esm/node_modules/openai/resources/beta/threads/runs/steps.mjs.map +0 -1
  672. package/esm/node_modules/openai/resources/beta/threads/threads.mjs +0 -101
  673. package/esm/node_modules/openai/resources/beta/threads/threads.mjs.map +0 -1
  674. package/esm/node_modules/openai/resources/chat/chat.mjs +0 -15
  675. package/esm/node_modules/openai/resources/chat/chat.mjs.map +0 -1
  676. package/esm/node_modules/openai/resources/chat/completions/completions.mjs +0 -123
  677. package/esm/node_modules/openai/resources/chat/completions/completions.mjs.map +0 -1
  678. package/esm/node_modules/openai/resources/chat/completions/index.mjs +0 -7
  679. package/esm/node_modules/openai/resources/chat/completions/messages.mjs +0 -35
  680. package/esm/node_modules/openai/resources/chat/completions/messages.mjs.map +0 -1
  681. package/esm/node_modules/openai/resources/chat/index.mjs +0 -5
  682. package/esm/node_modules/openai/resources/completions.mjs +0 -20
  683. package/esm/node_modules/openai/resources/completions.mjs.map +0 -1
  684. package/esm/node_modules/openai/resources/containers/containers.mjs +0 -57
  685. package/esm/node_modules/openai/resources/containers/containers.mjs.map +0 -1
  686. package/esm/node_modules/openai/resources/containers/files/content.mjs +0 -23
  687. package/esm/node_modules/openai/resources/containers/files/content.mjs.map +0 -1
  688. package/esm/node_modules/openai/resources/containers/files/files.mjs +0 -63
  689. package/esm/node_modules/openai/resources/containers/files/files.mjs.map +0 -1
  690. package/esm/node_modules/openai/resources/conversations/conversations.mjs +0 -57
  691. package/esm/node_modules/openai/resources/conversations/conversations.mjs.map +0 -1
  692. package/esm/node_modules/openai/resources/conversations/items.mjs +0 -57
  693. package/esm/node_modules/openai/resources/conversations/items.mjs.map +0 -1
  694. package/esm/node_modules/openai/resources/embeddings.mjs +0 -48
  695. package/esm/node_modules/openai/resources/embeddings.mjs.map +0 -1
  696. package/esm/node_modules/openai/resources/evals/evals.mjs +0 -73
  697. package/esm/node_modules/openai/resources/evals/evals.mjs.map +0 -1
  698. package/esm/node_modules/openai/resources/evals/runs/output-items.mjs +0 -35
  699. package/esm/node_modules/openai/resources/evals/runs/output-items.mjs.map +0 -1
  700. package/esm/node_modules/openai/resources/evals/runs/runs.mjs +0 -72
  701. package/esm/node_modules/openai/resources/evals/runs/runs.mjs.map +0 -1
  702. package/esm/node_modules/openai/resources/files.mjs +0 -111
  703. package/esm/node_modules/openai/resources/files.mjs.map +0 -1
  704. package/esm/node_modules/openai/resources/fine-tuning/alpha/alpha.mjs +0 -15
  705. package/esm/node_modules/openai/resources/fine-tuning/alpha/alpha.mjs.map +0 -1
  706. package/esm/node_modules/openai/resources/fine-tuning/alpha/graders.mjs +0 -60
  707. package/esm/node_modules/openai/resources/fine-tuning/alpha/graders.mjs.map +0 -1
  708. package/esm/node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.mjs +0 -15
  709. package/esm/node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.mjs.map +0 -1
  710. package/esm/node_modules/openai/resources/fine-tuning/checkpoints/permissions.mjs +0 -102
  711. package/esm/node_modules/openai/resources/fine-tuning/checkpoints/permissions.mjs.map +0 -1
  712. package/esm/node_modules/openai/resources/fine-tuning/fine-tuning.mjs +0 -24
  713. package/esm/node_modules/openai/resources/fine-tuning/fine-tuning.mjs.map +0 -1
  714. package/esm/node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs +0 -34
  715. package/esm/node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs.map +0 -1
  716. package/esm/node_modules/openai/resources/fine-tuning/jobs/jobs.mjs +0 -148
  717. package/esm/node_modules/openai/resources/fine-tuning/jobs/jobs.mjs.map +0 -1
  718. package/esm/node_modules/openai/resources/fine-tuning/methods.mjs +0 -8
  719. package/esm/node_modules/openai/resources/fine-tuning/methods.mjs.map +0 -1
  720. package/esm/node_modules/openai/resources/graders/grader-models.mjs +0 -8
  721. package/esm/node_modules/openai/resources/graders/grader-models.mjs.map +0 -1
  722. package/esm/node_modules/openai/resources/graders/graders.mjs +0 -15
  723. package/esm/node_modules/openai/resources/graders/graders.mjs.map +0 -1
  724. package/esm/node_modules/openai/resources/images.mjs +0 -46
  725. package/esm/node_modules/openai/resources/images.mjs.map +0 -1
  726. package/esm/node_modules/openai/resources/index.mjs +0 -27
  727. package/esm/node_modules/openai/resources/models.mjs +0 -44
  728. package/esm/node_modules/openai/resources/models.mjs.map +0 -1
  729. package/esm/node_modules/openai/resources/moderations.mjs +0 -23
  730. package/esm/node_modules/openai/resources/moderations.mjs.map +0 -1
  731. package/esm/node_modules/openai/resources/realtime/calls.mjs +0 -79
  732. package/esm/node_modules/openai/resources/realtime/calls.mjs.map +0 -1
  733. package/esm/node_modules/openai/resources/realtime/client-secrets.mjs +0 -39
  734. package/esm/node_modules/openai/resources/realtime/client-secrets.mjs.map +0 -1
  735. package/esm/node_modules/openai/resources/realtime/realtime.mjs +0 -18
  736. package/esm/node_modules/openai/resources/realtime/realtime.mjs.map +0 -1
  737. package/esm/node_modules/openai/resources/responses/input-items.mjs +0 -31
  738. package/esm/node_modules/openai/resources/responses/input-items.mjs.map +0 -1
  739. package/esm/node_modules/openai/resources/responses/input-tokens.mjs +0 -27
  740. package/esm/node_modules/openai/resources/responses/input-tokens.mjs.map +0 -1
  741. package/esm/node_modules/openai/resources/responses/responses.mjs +0 -110
  742. package/esm/node_modules/openai/resources/responses/responses.mjs.map +0 -1
  743. package/esm/node_modules/openai/resources/skills/content.mjs +0 -22
  744. package/esm/node_modules/openai/resources/skills/content.mjs.map +0 -1
  745. package/esm/node_modules/openai/resources/skills/skills.mjs +0 -69
  746. package/esm/node_modules/openai/resources/skills/skills.mjs.map +0 -1
  747. package/esm/node_modules/openai/resources/skills/versions/content.mjs +0 -23
  748. package/esm/node_modules/openai/resources/skills/versions/content.mjs.map +0 -1
  749. package/esm/node_modules/openai/resources/skills/versions/versions.mjs +0 -58
  750. package/esm/node_modules/openai/resources/skills/versions/versions.mjs.map +0 -1
  751. package/esm/node_modules/openai/resources/uploads/parts.mjs +0 -34
  752. package/esm/node_modules/openai/resources/uploads/parts.mjs.map +0 -1
  753. package/esm/node_modules/openai/resources/uploads/uploads.mjs +0 -84
  754. package/esm/node_modules/openai/resources/uploads/uploads.mjs.map +0 -1
  755. package/esm/node_modules/openai/resources/vector-stores/file-batches.mjs +0 -126
  756. package/esm/node_modules/openai/resources/vector-stores/file-batches.mjs.map +0 -1
  757. package/esm/node_modules/openai/resources/vector-stores/files.mjs +0 -147
  758. package/esm/node_modules/openai/resources/vector-stores/files.mjs.map +0 -1
  759. package/esm/node_modules/openai/resources/vector-stores/vector-stores.mjs +0 -87
  760. package/esm/node_modules/openai/resources/vector-stores/vector-stores.mjs.map +0 -1
  761. package/esm/node_modules/openai/resources/videos.mjs +0 -115
  762. package/esm/node_modules/openai/resources/videos.mjs.map +0 -1
  763. package/esm/node_modules/openai/resources/webhooks/index.mjs +0 -3
  764. package/esm/node_modules/openai/resources/webhooks/webhooks.mjs +0 -69
  765. package/esm/node_modules/openai/resources/webhooks/webhooks.mjs.map +0 -1
  766. package/esm/node_modules/openai/resources/webhooks.mjs +0 -4
  767. package/esm/node_modules/openai/streaming.mjs +0 -3
  768. package/esm/node_modules/openai/version.mjs +0 -6
  769. package/esm/node_modules/openai/version.mjs.map +0 -1
@@ -1,1276 +0,0 @@
1
- import { AIError } from "../errors/ai-error.mjs";
2
- import { AgentExecutionError } from "../errors/agent-execution-error.mjs";
3
- import { AgentCancelledError } from "../errors/agent-cancelled-error.mjs";
4
- import { AgentMaxTripsError } from "../errors/agent-max-trips-error.mjs";
5
- import { SchemaValidationError } from "../errors/schema-validation-error.mjs";
6
- import "../errors/index.mjs";
7
- import { computeCost, mergeUsage } from "../utils/compute-cost.mjs";
8
- import { extractJsonPayload } from "../utils/extract-json-payload.mjs";
9
- import { extractJsonLenient } from "../utils/extract-json-lenient.mjs";
10
- import { generateRunId } from "../utils/generate-run-id.mjs";
11
- import { captureChildReport } from "../utils/run-context.mjs";
12
- import { safeJsonParse } from "../utils/safe-json-parse.mjs";
13
- import { stampReportLineage } from "../utils/stamp-report-lineage.mjs";
14
- import "../utils/index.mjs";
15
- import { runEval } from "../eval/eval-runner.mjs";
16
- import { runPipeline } from "../middleware/pipeline.mjs";
17
- import "../middleware/index.mjs";
18
- import { notifyObservers } from "../observe/resolve-observers.mjs";
19
- import { skills } from "../skills/skills.mjs";
20
- import "../skills/index.mjs";
21
- import { normalizeAgentTools } from "../tool/executable-as-tool.mjs";
22
- import { buildAgentInputMessages } from "./agent-input-builder.mjs";
23
- import { logAgentEvent } from "./agent-log-event.mjs";
24
- import { createAgentStream } from "./agent-stream.mjs";
25
- import { agentEventToStreamEvent } from "./agent-to-stream-event.mjs";
26
- import { JsonStreamGuard } from "./json-stream-guard.mjs";
27
- import { computeAgentSignature } from "./signature.mjs";
28
- import { deleteAgentSnapshot, loadAgentSnapshotForResume, persistAgentSnapshot } from "./snapshot.mjs";
29
- import { log } from "@warlock.js/logger";
30
-
31
- //#region ../@warlock.js/ai/src/agent/agent.ts
32
- const LOG_MODULE = "ai.agent";
33
- /**
34
- * Duck-type a value as a {@link SkillsContract} (vs a raw `SkillsConfig`).
35
- * A contract exposes the agent-facing methods; a config is a plain spec.
36
- * Checking `catalogPrompt` is sufficient to discriminate the two shapes.
37
- */
38
- function isSkillsContract(value) {
39
- return typeof value === "object" && value !== null && typeof value.catalogPrompt === "function";
40
- }
41
- /**
42
- * Detect abort-flavored errors surfaced by SDK HTTP layers — the
43
- * DOM `AbortError`, axios `ERR_CANCELED`, node-fetch's own
44
- * `AbortError`. Used to classify them as cancellation rather than
45
- * generic agent-execution failures.
46
- */
47
- function isAbortLike(err) {
48
- if (!err || typeof err !== "object") return false;
49
- const e = err;
50
- return e.name === "AbortError" || e.code === "ERR_CANCELED" || e.code === "ABORT_ERR";
51
- }
52
- /**
53
- * Readable synthetic name for agents constructed without an explicit
54
- * `name`. Format: `anon_<provider>_<model>[_<tool1>+<tool2>+...]` —
55
- * deterministic (same config → same name across restarts) and
56
- * human-readable in logs / workflow snapshots.
57
- *
58
- * Keeps drift detection honest for the `ai.agent({ model })`
59
- * one-liner without punishing it with a hashed id nobody can read.
60
- */
61
- function synthesizeAgentName(config) {
62
- const provider = config.model?.provider ?? "unknown";
63
- const model = config.model?.name ?? "unknown";
64
- const tools = (config.tools ?? []).map((tool) => tool.name).sort().join("+");
65
- const base = `anon_${sanitize(provider)}_${sanitize(model)}`;
66
- return tools ? `${base}_${sanitize(tools, { keepPlus: true })}` : base;
67
- }
68
- function sanitize(value, opts = {}) {
69
- const allowed = opts.keepPlus ? /[^a-zA-Z0-9._+-]/g : /[^a-zA-Z0-9._-]/g;
70
- return value.replace(allowed, "-");
71
- }
72
- /**
73
- * Authoring-time check on the middleware array. Throws an
74
- * `AgentExecutionError` with `context: { authoring: true }` the
75
- * moment an invalid entry is found — the agent factory surface is
76
- * where config bugs should surface, not ten trips into a run.
77
- *
78
- * Validates:
79
- * - Every entry is a non-null object with a non-empty string `name`.
80
- * - No two entries share the same `name` (would silently collide on
81
- * `ctx.state` keys and produce impossible-to-debug behavior).
82
- *
83
- * Does NOT validate that hook maps contain callable functions —
84
- * that would catch late-binding bugs but also reject legitimate
85
- * patterns like `before` being conditionally `undefined`. Runtime
86
- * dispatch handles missing hooks safely.
87
- */
88
- function validateMiddleware(middleware) {
89
- if (!middleware || middleware.length === 0) return;
90
- const seen = /* @__PURE__ */ new Set();
91
- for (let index = 0; index < middleware.length; index++) {
92
- const entry = middleware[index];
93
- if (!entry || typeof entry !== "object") throw new AgentExecutionError(`middleware[${index}] must be an object; received ${entry === null ? "null" : typeof entry}`, { context: {
94
- authoring: true,
95
- index
96
- } });
97
- const name = entry.name;
98
- if (typeof name !== "string" || name.length === 0) throw new AgentExecutionError(`middleware[${index}] must have a non-empty string "name"`, { context: {
99
- authoring: true,
100
- index
101
- } });
102
- if (seen.has(name)) throw new AgentExecutionError(`duplicate middleware name "${name}" — each middleware needs a unique name so ctx.state keys do not collide`, { context: {
103
- authoring: true,
104
- index,
105
- name
106
- } });
107
- seen.add(name);
108
- }
109
- }
110
- /**
111
- * Normalize the public `judge` flag (`boolean | JudgeConfig | undefined`)
112
- * into a resolved {@link JudgeConfig} or `undefined` when the preset is
113
- * off. `true` ⇒ all defaults (`{}`); a partial config fills missing fields
114
- * from the defaults; `false` / absent ⇒ `undefined` (judge mode off).
115
- */
116
- function resolveJudgeConfig(judge) {
117
- if (!judge) return;
118
- return { repairAttempts: (judge === true ? {} : judge).repairAttempts ?? 2 };
119
- }
120
- /**
121
- * Creates an executable AI agent from the given configuration.
122
- *
123
- * The agent runs a bounded trip loop: each trip calls the model, dispatches
124
- * any requested tool calls, then loops until the model stops or `maxTrips`
125
- * is reached. Each `execute()` / `stream()` call spawns a fresh internal
126
- * `Execution` instance — the factory itself holds no state across calls.
127
- *
128
- * `execute()` never throws — any error is attached to the returned result
129
- * under `result.error`. `stream()` surfaces errors both on the terminal
130
- * `error` stream event and via the `stream.result` promise.
131
- *
132
- * @example
133
- * const myAgent = agent({
134
- * model: openai.model({ name: "gpt-4o" }),
135
- * systemPrompt: "You are a helpful assistant.",
136
- * tools: [searchTool],
137
- * });
138
- *
139
- * const result = await myAgent.execute("What is the capital of Egypt?");
140
- *
141
- * @example
142
- * const stream = myAgent.stream("Write a haiku about Cairo.");
143
- *
144
- * for await (const event of stream) {
145
- * if (event.type === "streaming") process.stdout.write(event.delta);
146
- * }
147
- *
148
- * const result = await stream.result;
149
- */
150
- function agent(config) {
151
- validateMiddleware(config.middleware);
152
- const isAnonymous = !config.name || typeof config.name !== "string";
153
- const tools = normalizeAgentTools(config.tools);
154
- const name = isAnonymous ? synthesizeAgentName({
155
- ...config,
156
- tools
157
- }) : config.name;
158
- const skillsLib = config.skills ? isSkillsContract(config.skills) ? config.skills : skills(config.skills) : void 0;
159
- const signature = computeAgentSignature({
160
- name: isAnonymous ? void 0 : name,
161
- version: config.version,
162
- model: {
163
- name: config.model?.name,
164
- provider: config.model?.provider
165
- },
166
- tools,
167
- maxTrips: config.maxTrips,
168
- output: config.output
169
- });
170
- const resolvedConfig = {
171
- ...config,
172
- name,
173
- tools,
174
- skillsLib,
175
- signature
176
- };
177
- const instanceHandlers = /* @__PURE__ */ new Map();
178
- function on(event, handler) {
179
- const existing = instanceHandlers.get(event);
180
- const bucket = existing ?? /* @__PURE__ */ new Set();
181
- if (!existing) instanceHandlers.set(event, bucket);
182
- bucket.add(handler);
183
- return () => off(event, handler);
184
- }
185
- function off(event, handler) {
186
- const bucket = instanceHandlers.get(event);
187
- if (!bucket) return;
188
- bucket.delete(handler);
189
- if (bucket.size === 0) instanceHandlers.delete(event);
190
- }
191
- const agentContract = {
192
- name,
193
- isAnonymous,
194
- description: config.description,
195
- signature,
196
- async execute(input, options) {
197
- return new Execution(resolvedConfig, input, options, void 0, instanceHandlers).run();
198
- },
199
- stream(input, options) {
200
- const { controller, stream } = createAgentStream();
201
- new Execution(resolvedConfig, input, options, controller, instanceHandlers).run();
202
- return stream;
203
- },
204
- async resume(runId, options) {
205
- const snapshot = await loadAgentSnapshotForResume({
206
- durable: resolvedConfig.durable,
207
- agentName: name,
208
- signature,
209
- runId,
210
- options
211
- });
212
- return new Execution(resolvedConfig, snapshot.input, {
213
- ...options,
214
- runId
215
- }, void 0, instanceHandlers, snapshot).run();
216
- },
217
- on,
218
- off,
219
- eval(options) {
220
- return runEval(agentContract, options);
221
- }
222
- };
223
- return agentContract;
224
- }
225
- /**
226
- * Build a judge-safe agent — sugar for `agent({ ...config, judge })`.
227
- *
228
- * Use this for LLM-as-judge graders and verdict classifiers running on
229
- * models that may emit corrupted structured output (e.g. the Amazon Nova
230
- * family). The returned agent parses verdicts leniently (tolerates fenced
231
- * ` ```json ` blocks + surrounding prose), auto-enables a couple of repair
232
- * re-asks, and never throws on a parse miss — surfacing `result.error` with
233
- * `result.data` left undefined so a flaky judge degrades gracefully.
234
- *
235
- * See {@link AgentConfig.judge} for the full behavior + the resilience-over-
236
- * strictness trade-off.
237
- *
238
- * @param config - Any agent config (model, system prompt, output schema, …).
239
- * @param judge - Optional fine-tuning ({@link JudgeConfig}); defaults to `true`.
240
- *
241
- * @example
242
- * const grader = ai.agent.judge({
243
- * model: nova.model({ name: "amazon.nova-pro-v1:0" }),
244
- * systemPrompt: "Grade the answer. Respond with JSON only.",
245
- * output: verdictSchema,
246
- * });
247
- *
248
- * const result = await grader.execute(prompt);
249
- * if (result.error) {
250
- * // graceful default — the judge couldn't produce a clean verdict
251
- * }
252
- */
253
- function judgeAgent(config, judge = true) {
254
- return agent({
255
- ...config,
256
- judge
257
- });
258
- }
259
- agent.judge = judgeAgent;
260
- /**
261
- * Per-call driver that owns the full lifecycle of a single
262
- * `agent.execute()` or `agent.stream()` invocation.
263
- *
264
- * **Role.** An `Execution` is the short-lived state container and phase
265
- * orchestrator for one agent run. The public `agent()` factory stays purely
266
- * functional — all mutable bookkeeping (trips, tool calls, usage totals,
267
- * message history, terminal error, parsed output) lives here so each call
268
- * gets a fresh, isolated instance.
269
- *
270
- * **Responsibility.**
271
- * - Owns: building the initial message list, driving the bounded trip loop,
272
- * dispatching tool calls safely, parsing the final output against the
273
- * caller's schema, emitting lifecycle events (to both the user handler
274
- * and, in stream mode, the `StreamController`), and producing the
275
- * `AgentResult`.
276
- * - Does NOT own: how the model produces responses (delegated to
277
- * `ModelContract.complete` / `ModelContract.stream`), how tools execute
278
- * (delegated to `ToolContract.invoke`), the async-queue plumbing for
279
- * streaming (delegated to `createAgentStream`), or any cross-call state
280
- * (factory-level concerns live in `agent()`).
281
- *
282
- * Streaming mode is opt-in via the fourth constructor argument: pass a
283
- * `StreamController` and every event is mirrored into it while model calls
284
- * are driven via `model.stream()` instead of `model.complete()`. The public
285
- * contract of `execute()` says it never throws — `Execution` enforces that
286
- * by funneling every unexpected error into `this.error` and returning a
287
- * well-formed result regardless of what went wrong.
288
- *
289
- * Not exported — consumers interact only with the `agent()` factory (see
290
- * §4.2 of code-style.md — "per-call execution state across phases").
291
- *
292
- * @example
293
- * // Non-streaming — inside agent.execute():
294
- * const result = await new Execution(config, input, options).run();
295
- *
296
- * @example
297
- * // Streaming — inside agent.stream():
298
- * const { controller, stream } = createAgentStream();
299
- * void new Execution(config, input, options, controller).run();
300
- * return stream;
301
- */
302
- var Execution = class {
303
- constructor(config, input, options, streamController, instanceHandlers, resumeFrom) {
304
- this.config = config;
305
- this.input = input;
306
- this.options = options;
307
- this.streamController = streamController;
308
- this.instanceHandlers = instanceHandlers;
309
- this.resumeFrom = resumeFrom;
310
- this.trips = [];
311
- this.toolCalls = [];
312
- this.usage = {
313
- input: 0,
314
- output: 0,
315
- total: 0
316
- };
317
- this.messages = [];
318
- this.start = performance.now();
319
- this.logger = log;
320
- this.warnedHandlerEvents = /* @__PURE__ */ new Set();
321
- this.middlewareState = /* @__PURE__ */ new Map();
322
- this.maxTrips = config.maxTrips ?? 10;
323
- this.middleware = config.middleware ?? [];
324
- this.judgeConfig = resolveJudgeConfig(config.judge);
325
- this.runId = resumeFrom?.runId ?? options?.runId ?? generateRunId("agent");
326
- this.startedAt = resumeFrom ? new Date(resumeFrom.startedAt) : /* @__PURE__ */ new Date();
327
- if (resumeFrom) {
328
- this.messages.push(...resumeFrom.messages);
329
- this.trips.push(...resumeFrom.trips);
330
- this.toolCalls.push(...resumeFrom.toolCalls);
331
- mergeUsage(this.usage, resumeFrom.usage);
332
- this.systemPrompt = resumeFrom.systemPrompt;
333
- this.responseSchema = resumeFrom.responseSchema;
334
- this.promptName = resumeFrom.promptName;
335
- this.promptVersion = resumeFrom.promptVersion;
336
- }
337
- const skillTools = config.skillsLib ? normalizeAgentTools(config.skillsLib.tools(this.runId)) ?? [] : [];
338
- this.effectiveTools = [...config.tools ?? [], ...skillTools];
339
- }
340
- /**
341
- * Base middleware context shared by every level. `state` is the
342
- * single mutable bag threaded through `execute`, `trip`, and `tool`
343
- * hooks for the lifetime of this execution — fresh per `execute()`
344
- * call, never reused across runs.
345
- */
346
- buildExecuteContext() {
347
- return {
348
- agent: {
349
- name: this.config.name ?? this.config.model.name,
350
- isAnonymous: !this.config.name
351
- },
352
- model: {
353
- name: this.config.model.name,
354
- provider: this.config.model.provider
355
- },
356
- input: this.input,
357
- options: this.options,
358
- state: this.middlewareState,
359
- signal: this.options?.signal
360
- };
361
- }
362
- /**
363
- * Entry point for a single agent execution. Wraps the real work
364
- * (`runCore`) in the `execute`-level middleware pipeline, then
365
- * emits the terminal `agent.completed` / `agent.error` events and
366
- * closes the stream (if any) with the post-pipeline result — so
367
- * middleware that short-circuits or transforms the final result
368
- * still produces a well-formed public outcome.
369
- *
370
- * Must never throw: any error that escapes the pipeline is
371
- * converted into an `AgentResult` with `error` populated before
372
- * returning, preserving the `agent.execute()` public contract.
373
- */
374
- async run() {
375
- const context = this.buildExecuteContext();
376
- let result;
377
- try {
378
- result = await runPipeline(this.middleware, "execute", context, () => this.runCore(), this.logger);
379
- } catch (thrown) {
380
- this.error = this.toAIError(thrown);
381
- result = this.buildResult();
382
- }
383
- if (result.error) this.emit("agent.error", { error: result.error });
384
- this.emit("agent.completed", { result });
385
- await this.fireCompleteHook(result);
386
- await notifyObservers(this.config.observe, result.report);
387
- captureChildReport(result.report);
388
- this.streamController?.end(result);
389
- return result;
390
- }
391
- /**
392
- * Inner body wrapped by the `execute`-level pipeline. Drives the
393
- * full lifecycle — build messages → emit starting → run trip loop
394
- * → parse output → build result. Catches any unexpected throw and
395
- * funnels it into `this.error` so the returned result is always
396
- * well-formed; `execute`-level `after` hooks receive the result,
397
- * with `error` populated when things went wrong.
398
- */
399
- async runCore() {
400
- if (this.resumeFrom && this.resumeFrom.status === "completed") return this.rebuildResumedResult(this.resumeFrom);
401
- try {
402
- if (!this.resumeFrom) {
403
- await this.buildInitialMessages();
404
- this.emit("agent.starting", { input: this.input });
405
- }
406
- await this.runTripLoop();
407
- if (await this.parseOutput() === "failed" && this.resolveRepairAttempts() > 0) await this.runRepairLoop();
408
- } catch (thrown) {
409
- this.error = this.toAIError(thrown);
410
- }
411
- await this.checkpoint(this.resolveSnapshotStatus());
412
- if (!this.error && this.config.durable?.deleteOnComplete) {
413
- const outcome = await deleteAgentSnapshot({
414
- durable: this.config.durable,
415
- runId: this.runId
416
- });
417
- if (!outcome.ok) this.logger.warn(LOG_MODULE, "snapshot.delete.failed", "durable snapshot delete failed", {
418
- runId: this.runId,
419
- error: outcome.error instanceof Error ? outcome.error.message : String(outcome.error)
420
- });
421
- }
422
- return this.buildResult();
423
- }
424
- /**
425
- * Resolve the system prompt (string or `SystemPromptContract`), merge
426
- * placeholders from config + execute options, inject a structured-output
427
- * instruction when the caller wants typed output but the model can't
428
- * enforce it natively, prepend any conversation history, and append the
429
- * user input. Produces the initial `messages` array the first trip sends
430
- * to the model. Runs exactly once per execution.
431
- */
432
- async buildInitialMessages() {
433
- const { messages, responseSchema, systemPrompt, promptName, promptVersion } = await buildAgentInputMessages({
434
- config: this.config,
435
- input: this.input,
436
- options: this.options
437
- });
438
- this.messages.push(...messages);
439
- this.responseSchema = responseSchema;
440
- this.systemPrompt = systemPrompt;
441
- this.promptName = promptName;
442
- this.promptVersion = promptVersion;
443
- await this.injectSkills();
444
- }
445
- /**
446
- * Prepend the skills library's contribution to the system prompt — the
447
- * always-injected metadata catalog first, then (only under `inject`) the
448
- * preloaded skill bodies, then the developer's resolved system prompt.
449
- * Never replaces the developer prompt.
450
- *
451
- * No-op when no skills library is attached. `catalogPrompt` returns `""`
452
- * when nothing is in scope and `preload` returns `[]` when `inject` is
453
- * omitted (the default), so the prepend is a no-op in those cases too.
454
- *
455
- * Awaited inside `buildInitialMessages`, which runs inside `runCore`'s
456
- * try/catch — a source/embedder failure funnels into `this.error` like
457
- * any other build failure, no new error handling needed.
458
- */
459
- async injectSkills() {
460
- const lib = this.config.skillsLib;
461
- if (!lib) return;
462
- const catalogBlock = await lib.catalogPrompt(this.input);
463
- const preloaded = await lib.preload(this.input);
464
- const blocks = [];
465
- if (catalogBlock) blocks.push(catalogBlock);
466
- for (const record of preloaded) if (record.body) blocks.push(record.body);
467
- if (blocks.length === 0) return;
468
- const prefix = blocks.join("\n\n");
469
- const merged = this.systemPrompt ? `${prefix}\n\n${this.systemPrompt}` : prefix;
470
- this.systemPrompt = merged;
471
- const firstMessage = this.messages[0];
472
- if (firstMessage?.role === "system") firstMessage.content = merged;
473
- else this.messages.unshift({
474
- role: "system",
475
- content: merged
476
- });
477
- }
478
- /**
479
- * Drive sequential trips up to `maxTrips`. Each trip may stop the loop
480
- * naturally (model returned a non-tool-call finish), abort it (model
481
- * threw), or continue it (model requested tools). When the loop exits
482
- * after the cap without a natural stop, records a "Max trips exceeded"
483
- * error so the caller can distinguish runaway tool loops from a real result.
484
- */
485
- async runTripLoop() {
486
- for (let tripIndex = this.trips.length; tripIndex < this.maxTrips; tripIndex++) {
487
- if (this.options?.signal?.aborted) {
488
- this.error = this.makeCancelledError();
489
- return;
490
- }
491
- const tripInput = tripIndex === 0 ? this.input : "[tool results]";
492
- const outcome = await this.runTrip(tripIndex, tripInput);
493
- if (outcome === "error" || outcome === "stop") return;
494
- }
495
- if (this.trips[this.trips.length - 1]?.finishReason === "tool_calls") this.error = new AgentMaxTripsError("Max trips exceeded", { maxTrips: this.maxTrips });
496
- }
497
- /**
498
- * Execute one round-trip to the model. Aggregates usage into the running
499
- * total, dispatches any requested tool calls, appends the assistant +
500
- * tool-result messages for the next trip, and records an `LLMTrip`.
501
- * Returns an outcome that tells `runTripLoop` whether to continue, stop,
502
- * or abort.
503
- */
504
- async runTrip(tripIndex, tripInput) {
505
- this.emit("agent.trip.started", {
506
- tripIndex,
507
- input: tripInput
508
- });
509
- const tripStartedAt = /* @__PURE__ */ new Date();
510
- const tripStart = performance.now();
511
- let response;
512
- try {
513
- response = await this.runTripThroughPipeline(tripIndex);
514
- } catch (thrown) {
515
- this.error = this.toAIError(thrown);
516
- const failedTrip = {
517
- index: tripIndex,
518
- input: tripInput,
519
- output: "",
520
- finishReason: "error",
521
- startedAt: tripStartedAt.toISOString(),
522
- endedAt: (/* @__PURE__ */ new Date()).toISOString(),
523
- duration: performance.now() - tripStart,
524
- usage: {
525
- input: 0,
526
- output: 0,
527
- total: 0
528
- },
529
- error: this.error
530
- };
531
- this.trips.push(failedTrip);
532
- this.emit("agent.trip.completed", { trip: failedTrip });
533
- this.emit("agent.error", { error: this.error });
534
- await this.checkpoint("failed");
535
- return "error";
536
- }
537
- if (response.usage.cost === void 0) response.usage.cost = computeCost(response.usage, this.config.model.pricing);
538
- mergeUsage(this.usage, response.usage);
539
- await this.fireUsageHook(tripIndex, response.usage);
540
- const isToolCallTrip = response.finishReason === "tool_calls" && response.toolCalls !== void 0 && response.toolCalls.length > 0;
541
- const tripToolCalls = [];
542
- if (isToolCallTrip) {
543
- this.messages.push({
544
- role: "assistant",
545
- content: response.content,
546
- toolCalls: response.toolCalls
547
- });
548
- for (const toolCallRequest of response.toolCalls) {
549
- const record = await this.dispatchToolCall(toolCallRequest, tripIndex);
550
- tripToolCalls.push(record);
551
- }
552
- }
553
- const trip = {
554
- index: tripIndex,
555
- input: tripInput,
556
- output: response.content,
557
- finishReason: response.finishReason,
558
- startedAt: tripStartedAt.toISOString(),
559
- endedAt: (/* @__PURE__ */ new Date()).toISOString(),
560
- duration: performance.now() - tripStart,
561
- usage: response.usage,
562
- toolCalls: tripToolCalls.length > 0 ? tripToolCalls : void 0
563
- };
564
- this.trips.push(trip);
565
- this.emit("agent.trip.completed", { trip });
566
- await this.checkpoint("running");
567
- if (!isToolCallTrip) return "stop";
568
- return response.toolCalls.every((request) => {
569
- return this.effectiveTools.find((tool) => tool.name === request.name)?.mode === "silent";
570
- }) ? "stop" : "continue";
571
- }
572
- /**
573
- * Route `getModelResponse` through the `trip`-level middleware
574
- * pipeline. `trip.before` hooks can short-circuit the trip by
575
- * returning a synthetic `ModelResponse` (semantic cache hit).
576
- * `trip.after` hooks can transform the response before the trip
577
- * record is built or any tool calls are dispatched. `trip.onError`
578
- * hooks can recover from provider failures (fallback chain).
579
- */
580
- async runTripThroughPipeline(tripIndex) {
581
- const context = {
582
- ...this.buildExecuteContext(),
583
- tripIndex,
584
- messages: this.messages
585
- };
586
- return await runPipeline(this.middleware, "trip", context, () => this.getModelResponse(tripIndex), this.logger);
587
- }
588
- /**
589
- * Produce the `ModelResponse` for the current trip. In non-streaming
590
- * mode, delegates straight to `model.complete()`. In streaming mode,
591
- * drains `model.stream()` while emitting `streaming` events per delta
592
- * and accumulates the chunks into the same `ModelResponse` shape, so the
593
- * rest of the trip pipeline (tool dispatch, trip record, usage
594
- * aggregation) stays identical between the two modes.
595
- */
596
- async getModelResponse(tripIndex) {
597
- const callOptions = {
598
- ...this.config.modelOptions,
599
- tools: this.effectiveTools,
600
- ...this.responseSchema ? { responseSchema: this.responseSchema } : {},
601
- ...this.options?.signal ? { signal: this.options.signal } : {}
602
- };
603
- if (!this.streamController) return this.config.model.complete(this.messages, callOptions);
604
- let content = "";
605
- let finishReason = "stop";
606
- let usage = {
607
- input: 0,
608
- output: 0,
609
- total: 0
610
- };
611
- const toolCalls = [];
612
- const recoveredCalls = [];
613
- const guardConfig = this.resolveStreamingToolGuard();
614
- const guard = guardConfig ? new JsonStreamGuard({
615
- tools: this.effectiveTools,
616
- maxBufferBytes: guardConfig.maxBufferBytes,
617
- onSafeDelta: (delta) => {
618
- content += delta;
619
- this.emit("agent.trip.streaming", {
620
- delta,
621
- tripIndex
622
- });
623
- },
624
- onRecoveredCall: (request) => {
625
- recoveredCalls.push(request);
626
- }
627
- }) : void 0;
628
- for await (const chunk of this.config.model.stream(this.messages, callOptions)) {
629
- if (this.options?.signal?.aborted) throw this.makeCancelledError();
630
- if (chunk.type === "delta") {
631
- if (guard) await guard.feed(chunk.content);
632
- else {
633
- content += chunk.content;
634
- this.emit("agent.trip.streaming", {
635
- delta: chunk.content,
636
- tripIndex
637
- });
638
- }
639
- continue;
640
- }
641
- if (chunk.type === "tool-call") {
642
- toolCalls.push({
643
- id: chunk.id,
644
- name: chunk.name,
645
- input: chunk.input,
646
- ...chunk.providerMetadata ? { providerMetadata: chunk.providerMetadata } : {}
647
- });
648
- continue;
649
- }
650
- finishReason = chunk.finishReason;
651
- usage = chunk.usage;
652
- }
653
- if (guard) await guard.finalize();
654
- const dedupedRecovered = recoveredCalls.filter((recovered) => !isDuplicateToolCall(recovered, toolCalls));
655
- const mergedToolCalls = [...toolCalls, ...dedupedRecovered];
656
- const resolvedFinishReason = dedupedRecovered.length > 0 && finishReason === "stop" ? "tool_calls" : finishReason;
657
- return {
658
- content,
659
- finishReason: resolvedFinishReason,
660
- usage,
661
- toolCalls: mergedToolCalls.length > 0 ? mergedToolCalls : void 0
662
- };
663
- }
664
- /**
665
- * Resolve the effective `streamingToolGuard` for this trip.
666
- * Per-call options win over the agent-level config when the key is
667
- * explicitly present on options (including the explicit `undefined`
668
- * "disable for this call" form). Returns `undefined` when no guard
669
- * should run.
670
- */
671
- resolveStreamingToolGuard() {
672
- if (this.options !== void 0 && Object.prototype.hasOwnProperty.call(this.options, "streamingToolGuard")) return this.options.streamingToolGuard;
673
- return this.config.streamingToolGuard;
674
- }
675
- /**
676
- * Dispatch a single tool call requested by the model. Looks up the tool
677
- * by name, invokes it via the safe `ToolContract.invoke` entry, pushes a
678
- * matching tool-result message into `this.messages` so the next trip can
679
- * see it, and emits the right lifecycle event (`tool-called` on success,
680
- * `tool-calling-failed` when the tool is unregistered or invoke returned
681
- * an error). Never throws — always returns a `ToolCall` record.
682
- */
683
- async dispatchToolCall(toolCallRequest, tripIndex) {
684
- const registeredTool = this.effectiveTools.find((tool) => tool.name === toolCallRequest.name);
685
- if (!registeredTool) {
686
- const error = new AgentExecutionError(`Tool not registered: ${toolCallRequest.name}`, { context: {
687
- toolName: toolCallRequest.name,
688
- tripIndex
689
- } });
690
- const nowIso = (/* @__PURE__ */ new Date()).toISOString();
691
- const record = {
692
- runId: generateRunId("tool"),
693
- rootRunId: this.runId,
694
- name: toolCallRequest.name,
695
- type: "tool",
696
- status: "failed",
697
- startedAt: nowIso,
698
- endedAt: nowIso,
699
- duration: 0,
700
- usage: {
701
- input: 0,
702
- output: 0,
703
- total: 0
704
- },
705
- children: [],
706
- tripIndex,
707
- input: toolCallRequest.input,
708
- error,
709
- ...toolCallRequest.recoveredFrom ? { recoveredFrom: toolCallRequest.recoveredFrom } : {}
710
- };
711
- this.toolCalls.push(record);
712
- this.messages.push({
713
- role: "tool",
714
- toolCallId: toolCallRequest.id,
715
- content: JSON.stringify({ error: error.message })
716
- });
717
- this.emit("agent.tool.failed", {
718
- tool: {
719
- name: toolCallRequest.name,
720
- description: "(unregistered tool — no description available)"
721
- },
722
- input: toolCallRequest.input,
723
- error,
724
- tripIndex
725
- });
726
- return record;
727
- }
728
- const toolMeta = {
729
- name: registeredTool.name,
730
- description: registeredTool.description,
731
- action: resolveToolAction(registeredTool, toolCallRequest.input)
732
- };
733
- this.emit("agent.tool.calling", {
734
- tool: toolMeta,
735
- input: toolCallRequest.input,
736
- tripIndex
737
- });
738
- const toolContext = {
739
- ...this.buildExecuteContext(),
740
- tripIndex,
741
- messages: this.messages,
742
- tool: {
743
- name: registeredTool.name,
744
- description: registeredTool.description,
745
- mode: registeredTool.mode
746
- },
747
- request: toolCallRequest
748
- };
749
- const runSignal = this.options?.signal;
750
- const dispatchToolCtx = runSignal ? {
751
- artifacts: this.options?.toolCtx?.artifacts ?? {},
752
- ...this.options?.toolCtx,
753
- signal: runSignal
754
- } : this.options?.toolCtx;
755
- let invokeResult;
756
- try {
757
- invokeResult = await runPipeline(this.middleware, "tool", toolContext, () => registeredTool.invoke(toolCallRequest.input, dispatchToolCtx), this.logger);
758
- } catch (thrown) {
759
- const error = this.toAIError(thrown);
760
- const nowIso = (/* @__PURE__ */ new Date()).toISOString();
761
- const emptyUsage = {
762
- input: 0,
763
- output: 0,
764
- total: 0
765
- };
766
- const failedRunId = generateRunId("tool");
767
- invokeResult = {
768
- error,
769
- usage: emptyUsage,
770
- report: {
771
- runId: failedRunId,
772
- rootRunId: failedRunId,
773
- name: registeredTool.name,
774
- version: registeredTool.version,
775
- type: "tool",
776
- status: "failed",
777
- startedAt: nowIso,
778
- endedAt: nowIso,
779
- duration: 0,
780
- usage: emptyUsage,
781
- children: []
782
- }
783
- };
784
- }
785
- const innerReport = invokeResult.report;
786
- const isComposite = innerReport.type !== "tool";
787
- const record = {
788
- runId: innerReport.runId,
789
- rootRunId: this.runId,
790
- name: toolCallRequest.name,
791
- version: registeredTool.version,
792
- type: "tool",
793
- status: innerReport.status,
794
- startedAt: innerReport.startedAt,
795
- endedAt: innerReport.endedAt,
796
- duration: innerReport.duration,
797
- usage: invokeResult.usage,
798
- children: isComposite ? [innerReport] : innerReport.children,
799
- tripIndex,
800
- input: toolCallRequest.input,
801
- output: invokeResult.data,
802
- error: invokeResult.error,
803
- ...toolCallRequest.recoveredFrom ? { recoveredFrom: toolCallRequest.recoveredFrom } : {}
804
- };
805
- this.toolCalls.push(record);
806
- mergeUsage(this.usage, invokeResult.usage);
807
- this.messages.push({
808
- role: "tool",
809
- toolCallId: toolCallRequest.id,
810
- content: invokeResult.error ? JSON.stringify({ error: invokeResult.error.message }) : JSON.stringify(invokeResult.data ?? null)
811
- });
812
- if (invokeResult.error) this.emit("agent.tool.failed", {
813
- tool: toolMeta,
814
- input: toolCallRequest.input,
815
- error: invokeResult.error,
816
- tripIndex
817
- });
818
- else this.emit("agent.tool.called", {
819
- ...record,
820
- tool: toolMeta
821
- });
822
- return record;
823
- }
824
- /**
825
- * Parse the final trip output against the user-supplied schema (if any).
826
- * Failures populate `this.error` but never throw. Returns an outcome the
827
- * caller uses to decide whether self-repair is worth attempting:
828
- *
829
- * - `"skipped"` — no schema, or a prior trip-level error already set
830
- * `this.error` (model crash, max trips). Not repairable; the failure
831
- * isn't a parse problem the model can fix by re-asking.
832
- * - `"failed"` — schema present, output text either failed JSON.parse
833
- * or failed `~standard.validate`. Repairable via `runRepairLoop`.
834
- * - `"success"` — parsed and validated; `this.data` populated.
835
- *
836
- * Under the judge-safe preset (`judge: true`) the JSON extraction is
837
- * lenient — it tolerates fenced ` ```json ` blocks plus leading /
838
- * trailing prose by slicing the first balanced object / array out of the
839
- * response. Never throws regardless of preset: a parse / validation miss
840
- * sets `this.error` and returns `"failed"`, leaving `this.data`
841
- * undefined for the graceful-default path.
842
- */
843
- async parseOutput() {
844
- const schema = this.options?.output ?? this.config.output;
845
- if (!schema || this.error) return "skipped";
846
- const text = this.trips[this.trips.length - 1]?.output ?? "";
847
- if (!text) return "skipped";
848
- const payload = this.judgeConfig ? extractJsonLenient(text) : extractJsonPayload(text);
849
- const sentinel = Symbol("parse-failed");
850
- const parsed = safeJsonParse(payload, sentinel);
851
- if (parsed === sentinel) {
852
- this.error = new SchemaValidationError("Failed to parse model output as JSON", { context: { text } });
853
- return "failed";
854
- }
855
- const validation = await schema["~standard"].validate(parsed);
856
- if (validation.issues) {
857
- const summary = validation.issues.map((issue) => issue.message).join("; ");
858
- this.error = new SchemaValidationError(summary, { issues: validation.issues });
859
- return "failed";
860
- }
861
- this.data = validation.value;
862
- return "success";
863
- }
864
- /**
865
- * Resolve how many repair re-asks this run should perform after a parse
866
- * failure. Per-call `options.repair` wins when explicitly set (preserving
867
- * the existing surface). Otherwise the judge-safe preset supplies its
868
- * default attempt count — so `judge: true` enables repair without the
869
- * caller also having to pass `repair`. Returns `0` when neither applies,
870
- * which leaves the historical "no repair unless asked" behavior intact.
871
- */
872
- resolveRepairAttempts() {
873
- if (this.options?.repair) return this.options.repair.maxAttempts ?? 1;
874
- if (this.judgeConfig) return this.judgeConfig.repairAttempts ?? 2;
875
- return 0;
876
- }
877
- /**
878
- * Opt-in self-repair loop for `output` schema failures. Triggered only
879
- * when repair attempts remain (`resolveRepairAttempts() > 0`) and
880
- * `parseOutput()` returned `"failed"`.
881
- *
882
- * Each attempt:
883
- * 1. Pushes the bad assistant response into `this.messages` (so the
884
- * model can see what it just produced).
885
- * 2. Pushes a corrective user message naming the validation/parse error.
886
- * 3. Runs another trip — counted against the same `maxTrips` cap as
887
- * normal trips so a stuck model can't loop forever.
888
- * 4. Re-parses. Stops on success, on a trip-level error, or when
889
- * either `maxAttempts` or `maxTrips` is exhausted.
890
- *
891
- * Resets `this.error` and `this.data` before each attempt so the final
892
- * outcome (success or last failure) is what surfaces to the caller.
893
- */
894
- async runRepairLoop() {
895
- const maxAttempts = this.resolveRepairAttempts();
896
- for (let attempt = 0; attempt < maxAttempts; attempt++) {
897
- if (this.trips.length >= this.maxTrips) return;
898
- const badResponse = this.trips[this.trips.length - 1]?.output ?? "";
899
- const failureReason = this.error?.message ?? "unknown validation failure";
900
- this.error = void 0;
901
- this.data = void 0;
902
- this.messages.push({
903
- role: "assistant",
904
- content: badResponse
905
- });
906
- this.messages.push({
907
- role: "user",
908
- content: [`Your previous response failed validation: ${failureReason}.`, "Respond again with valid JSON only — no prose, no markdown fences, no commentary."].join(" ")
909
- });
910
- const tripIndex = this.trips.length;
911
- this.logger.warn(LOG_MODULE, "repair.attempting", "retrying after validation failure", {
912
- attempt: attempt + 1,
913
- maxAttempts,
914
- reason: failureReason
915
- });
916
- if (await this.runTrip(tripIndex, "[repair attempt]") === "error") return;
917
- if (await this.parseOutput() === "success") return;
918
- }
919
- }
920
- /**
921
- * Build the final `AgentResult` snapshot from accumulated state
922
- * (trips, tool calls, data/error, usage, timing).
923
- *
924
- * Pure — no side effects. `run()` owns terminal event emission and
925
- * stream closure so the post-pipeline result (possibly transformed
926
- * or short-circuited by an `execute`-level middleware) is what
927
- * flows out to consumers and listeners.
928
- *
929
- * Trips, tool calls, status, and timing live under `report` so the
930
- * root stays focused on the four things callers reach for most:
931
- * `data`, `text`, `usage`, `error`.
932
- */
933
- buildResult() {
934
- const finalTrip = this.trips[this.trips.length - 1];
935
- const endedAt = /* @__PURE__ */ new Date();
936
- const agentName = this.config.name ?? this.config.model.name;
937
- const status = this.error ? this.error instanceof AgentCancelledError ? "cancelled" : "failed" : "completed";
938
- const report = {
939
- runId: this.runId,
940
- rootRunId: this.runId,
941
- name: agentName,
942
- version: this.config.version,
943
- type: "agent",
944
- status,
945
- ...this.error ? { error: this.error } : {},
946
- startedAt: this.startedAt.toISOString(),
947
- endedAt: endedAt.toISOString(),
948
- duration: performance.now() - this.start,
949
- usage: this.usage,
950
- children: this.toolCalls,
951
- model: {
952
- name: this.config.model.name,
953
- provider: this.config.model.provider
954
- },
955
- trips: this.trips,
956
- systemPrompt: this.systemPrompt,
957
- ...this.promptName ? {
958
- promptName: this.promptName,
959
- promptVersion: this.promptVersion
960
- } : {},
961
- ...this.config.captureMessages ? { messages: this.captureMessages() } : {}
962
- };
963
- stampReportLineage(report, {
964
- rootRunId: this.runId,
965
- sessionId: this.options?.sessionId
966
- });
967
- return {
968
- type: "agent",
969
- data: this.data,
970
- text: finalTrip?.output,
971
- report,
972
- usage: this.usage,
973
- error: this.error
974
- };
975
- }
976
- /**
977
- * Map the run's terminal outcome to the persisted snapshot status.
978
- * A cancelled error reads as `"cancelled"`, any other error as
979
- * `"failed"`, otherwise `"completed"`. Mirrors the report-status
980
- * mapping in {@link buildResult}.
981
- */
982
- resolveSnapshotStatus() {
983
- if (!this.error) return "completed";
984
- return this.error instanceof AgentCancelledError ? "cancelled" : "failed";
985
- }
986
- /**
987
- * Build and persist an {@link AgentSnapshot} from the current
988
- * accumulators. The per-trip and terminal checkpoints both route
989
- * through here. Reuses {@link captureMessages} to normalize the live
990
- * `Message[]` into JSON-safe form so the snapshot round-trips through
991
- * any store backend.
992
- *
993
- * No-op (returns immediately) when `durable` is absent — the common
994
- * non-durable path stays free. A failed persist is logged and
995
- * swallowed (never aborts the run), matching the supervisor / workflow
996
- * checkpoint policy.
997
- */
998
- async checkpoint(status) {
999
- if (!this.config.durable) return;
1000
- const outcome = await persistAgentSnapshot({
1001
- durable: this.config.durable,
1002
- runId: this.runId,
1003
- agentName: this.config.name ?? this.config.model.name,
1004
- signature: this.config.signature,
1005
- version: this.config.version,
1006
- input: this.input,
1007
- systemPrompt: this.systemPrompt,
1008
- responseSchema: this.responseSchema,
1009
- promptName: this.promptName,
1010
- promptVersion: this.promptVersion,
1011
- messages: this.captureMessages(),
1012
- trips: this.trips,
1013
- toolCalls: this.toolCalls,
1014
- usage: this.usage,
1015
- status,
1016
- startedAt: this.startedAt.toISOString()
1017
- });
1018
- if (!outcome.ok) this.logger.warn(LOG_MODULE, "snapshot.persist.failed", "durable snapshot persist failed", {
1019
- runId: this.runId,
1020
- status,
1021
- error: outcome.error instanceof Error ? outcome.error.message : String(outcome.error)
1022
- });
1023
- }
1024
- /**
1025
- * Rebuild the final {@link AgentResult} from a COMPLETED snapshot
1026
- * WITHOUT re-running anything. Used by the completed-run resume
1027
- * short-circuit: the persisted trips / tool calls / usage are the
1028
- * authoritative outcome, so a resume of a settled run re-returns that
1029
- * outcome idempotently. Re-derives `this.data` from the final trip
1030
- * output against the schema (cheap, no model call) so the rebuilt
1031
- * result carries the same structured payload the original produced.
1032
- *
1033
- * Only reached for a `completed` snapshot — `failed` / `cancelled`
1034
- * snapshots re-enter the trip loop to retry the remaining work instead.
1035
- */
1036
- async rebuildResumedResult(_snapshot) {
1037
- await this.parseOutput();
1038
- return this.buildResult();
1039
- }
1040
- /**
1041
- * Normalize the accumulated runtime `Message[]` into the JSON-safe
1042
- * {@link CapturedMessage}[] persisted on `AgentReport.messages` (F2).
1043
- * Flattens `ContentPart[]` content to a string, and forwards
1044
- * `toolCalls` (assistant turns) / `toolCallId` (tool-result turns)
1045
- * only when present so the captured shape stays lean. Called only when
1046
- * `captureMessages` is enabled.
1047
- */
1048
- captureMessages() {
1049
- return this.messages.map((message) => {
1050
- const captured = {
1051
- role: message.role,
1052
- content: typeof message.content === "string" ? message.content : JSON.stringify(message.content)
1053
- };
1054
- if (message.toolCalls !== void 0) captured.toolCalls = message.toolCalls;
1055
- if (message.toolCallId !== void 0) captured.toolCallId = message.toolCallId;
1056
- return captured;
1057
- });
1058
- }
1059
- /**
1060
- * Normalize any thrown value into an `AIError`. `AIError` instances
1061
- * pass through untouched; provider-adapter SDK errors are caught by
1062
- * the adapter and already arrive typed, so this branch mainly
1063
- * handles runtime crashes (TypeError, ReferenceError) inside
1064
- * model.complete / model.stream and non-Error values (`throw "bad"`).
1065
- */
1066
- toAIError(thrown) {
1067
- if (thrown instanceof AIError) return thrown;
1068
- if (isAbortLike(thrown)) return this.makeCancelledError();
1069
- return new AgentExecutionError(thrown instanceof Error ? thrown.message : String(thrown), { cause: thrown });
1070
- }
1071
- /**
1072
- * Build the typed cancelled error that both the trip-loop guard
1073
- * and the mid-stream guard emit. Captures the abort reason when
1074
- * one was supplied to `controller.abort(reason)` so logs and
1075
- * telemetry can see what cancelled the run.
1076
- */
1077
- makeCancelledError() {
1078
- const reason = this.options?.signal?.reason;
1079
- const reasonText = reason === void 0 ? "" : String(reason);
1080
- return new AgentCancelledError("agent execution cancelled", {
1081
- cause: reason,
1082
- cancelledAt: (/* @__PURE__ */ new Date()).toISOString(),
1083
- reason: reasonText
1084
- });
1085
- }
1086
- /**
1087
- * Fire a single event through all three subscription tiers in order
1088
- * — factory → instance → per-call — and mirror it into the
1089
- * `StreamController` when streaming is active. A throwing user
1090
- * handler must never crash the agent, so every dispatch is wrapped
1091
- * in `safeCall`. Stream events are converted from the internal
1092
- * `AgentEventMap` payload to the public `StreamEvent` shape because
1093
- * some of them differ (e.g. the tool-called payload vs stream
1094
- * event).
1095
- */
1096
- emit(event, payload) {
1097
- const fullPayload = {
1098
- ...payload,
1099
- runId: this.runId,
1100
- rootRunId: this.runId
1101
- };
1102
- this.logEvent(event, fullPayload);
1103
- const onError = (error) => this.surfaceHandlerError(event, error);
1104
- const factoryHandler = this.config.on?.[event];
1105
- if (factoryHandler) safeCall(factoryHandler, fullPayload, onError);
1106
- const bucket = this.instanceHandlers?.get(event);
1107
- if (bucket) for (const handler of bucket) safeCall(handler, fullPayload, onError);
1108
- const perCallHandler = this.options?.on?.[event];
1109
- if (perCallHandler) safeCall(perCallHandler, fullPayload, onError);
1110
- if (this.streamController) {
1111
- const body = this.toStreamEvent(event, fullPayload);
1112
- if (body) this.streamController.push({
1113
- runId: this.runId,
1114
- rootRunId: this.runId,
1115
- ...body
1116
- });
1117
- }
1118
- }
1119
- /**
1120
- * Surface an isolated event-handler failure (C5). A throwing user
1121
- * handler never crashes the agent — that isolation is preserved — but
1122
- * total silence is the wrong default: a broken `on` handler would
1123
- * otherwise disappear from production with no signal. Routed to the
1124
- * structured logger (matching the `onUsage` / `onComplete` policy) and
1125
- * warned at most once per event type so a hot event can't spam the log.
1126
- */
1127
- surfaceHandlerError(event, error) {
1128
- if (this.warnedHandlerEvents.has(event)) return;
1129
- this.warnedHandlerEvents.add(event);
1130
- this.logger.warn(LOG_MODULE, "event.handler.error", "an event handler threw and was isolated", {
1131
- runId: this.runId,
1132
- event,
1133
- error: error instanceof Error ? error.message : String(error)
1134
- });
1135
- }
1136
- /**
1137
- * Emit a structured log line for a lifecycle event. The action
1138
- * string mirrors the event name with the `agent.` prefix stripped
1139
- * (`agent.trip.started` → `trip.started`) so log grep filters and
1140
- * event handlers read the same vocabulary. Level mapping follows
1141
- * the convention documented on `@warlock.js/logger`'s `Logger`.
1142
- */
1143
- logEvent(event, payload) {
1144
- const agentName = this.config.name || this.config.model.name;
1145
- logAgentEvent(this.logger, {
1146
- module: `${LOG_MODULE}.${agentName}`,
1147
- maxTrips: this.maxTrips,
1148
- modelName: this.config.model.name,
1149
- totalUsage: this.usage,
1150
- totalDurationMs: performance.now() - this.start,
1151
- trips: this.trips,
1152
- toolCalls: this.toolCalls
1153
- }, event, payload);
1154
- }
1155
- toStreamEvent(event, payload) {
1156
- return agentEventToStreamEvent(event, payload);
1157
- }
1158
- /**
1159
- * Invoke the `onUsage` hook (when configured) with a flat payload
1160
- * carrying stable identity. Awaits the handler so async ledger
1161
- * writes complete before the next trip starts; swallows any throw
1162
- * so consumer bugs cannot crash the agent. Sync handlers wrapped
1163
- * via `Promise.resolve()` so the await is safe in either case.
1164
- */
1165
- async fireUsageHook(tripIndex, tripUsage) {
1166
- const handler = this.config.onUsage;
1167
- if (!handler) return;
1168
- const event = {
1169
- runId: this.runId,
1170
- tripIndex,
1171
- model: {
1172
- name: this.config.model.name,
1173
- provider: this.config.model.provider
1174
- },
1175
- usage: { ...tripUsage },
1176
- timestamp: (/* @__PURE__ */ new Date()).toISOString()
1177
- };
1178
- try {
1179
- await Promise.resolve(handler(event));
1180
- } catch (err) {
1181
- this.logger.warn(LOG_MODULE, "onUsage.hook.error", "onUsage handler threw", {
1182
- runId: this.runId,
1183
- tripIndex,
1184
- error: err instanceof Error ? err.message : String(err)
1185
- });
1186
- }
1187
- }
1188
- /**
1189
- * Invoke the `onComplete` hook (when configured) once at the end
1190
- * of every run. Receives the full `AgentResult` plus pre-extracted
1191
- * `runId` and `durationMs`. Same swallow-and-log error policy as
1192
- * `fireUsageHook`.
1193
- */
1194
- async fireCompleteHook(result) {
1195
- const handler = this.config.onComplete;
1196
- if (!handler) return;
1197
- const event = {
1198
- result,
1199
- runId: this.runId,
1200
- durationMs: performance.now() - this.start
1201
- };
1202
- try {
1203
- await Promise.resolve(handler(event));
1204
- } catch (err) {
1205
- this.logger.warn(LOG_MODULE, "onComplete.hook.error", "onComplete handler threw", {
1206
- runId: this.runId,
1207
- error: err instanceof Error ? err.message : String(err)
1208
- });
1209
- }
1210
- }
1211
- };
1212
- /**
1213
- * Decide whether a guard-synthesized tool call duplicates a real one
1214
- * the provider already streamed structurally. Match key is
1215
- * `name + key-sorted JSON of input` so identical calls (regardless of
1216
- * argument key order) collapse, but two legitimate calls to the same
1217
- * tool with different inputs still both dispatch.
1218
- */
1219
- function isDuplicateToolCall(recovered, realCalls) {
1220
- const recoveredKey = `${recovered.name}|${stableStringify(recovered.input)}`;
1221
- for (const real of realCalls) if (`${real.name}|${stableStringify(real.input)}` === recoveredKey) return true;
1222
- return false;
1223
- }
1224
- /**
1225
- * `JSON.stringify` variant that sorts object keys at every nesting
1226
- * level so structurally-equal inputs serialize to identical strings.
1227
- * Used only for dedupe-key comparison; never surfaces to consumers.
1228
- */
1229
- function stableStringify(value) {
1230
- return JSON.stringify(value, (_key, val) => {
1231
- if (val !== null && typeof val === "object" && !Array.isArray(val)) {
1232
- const source = val;
1233
- const sorted = {};
1234
- for (const key of Object.keys(source).sort()) sorted[key] = source[key];
1235
- return sorted;
1236
- }
1237
- return val;
1238
- });
1239
- }
1240
- /**
1241
- * Invoke a user-supplied event handler without letting exceptions
1242
- * escape the agent. A throw is isolated (it never crashes the agent)
1243
- * but no longer silent: the optional `onError` surfaces it — the agent
1244
- * routes it to its structured logger, matching the swallow-and-log
1245
- * policy of the `onUsage` / `onComplete` hooks (C5).
1246
- */
1247
- function safeCall(handler, payload, onError) {
1248
- try {
1249
- handler(payload);
1250
- } catch (error) {
1251
- onError?.(error);
1252
- }
1253
- }
1254
- /**
1255
- * Resolve a tool's `action` declaration into a plain string for
1256
- * inclusion in `ToolEventMeta`. Static strings pass through;
1257
- * function-shaped actions are invoked with the model's raw,
1258
- * pre-validation input (before `execute`'s schema validation runs).
1259
- *
1260
- * Defensive: if the user's callback throws, swallow and return
1261
- * `undefined` rather than crashing the agent — UI strings are not
1262
- * worth aborting an LLM dispatch over.
1263
- */
1264
- function resolveToolAction(tool, input) {
1265
- if (tool.action === void 0) return void 0;
1266
- if (typeof tool.action === "string") return tool.action;
1267
- try {
1268
- return tool.action(input);
1269
- } catch {
1270
- return;
1271
- }
1272
- }
1273
-
1274
- //#endregion
1275
- export { agent };
1276
- //# sourceMappingURL=agent.mjs.map