@xandout/libra-harness 0.1.8

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 (289) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +486 -0
  3. package/dist/agent.d.ts +174 -0
  4. package/dist/agent.d.ts.map +1 -0
  5. package/dist/agent.js +575 -0
  6. package/dist/agent.js.map +1 -0
  7. package/dist/ai-sdk-model.d.ts +26 -0
  8. package/dist/ai-sdk-model.d.ts.map +1 -0
  9. package/dist/ai-sdk-model.js +260 -0
  10. package/dist/ai-sdk-model.js.map +1 -0
  11. package/dist/context.d.ts +75 -0
  12. package/dist/context.d.ts.map +1 -0
  13. package/dist/context.js +2 -0
  14. package/dist/context.js.map +1 -0
  15. package/dist/errors.d.ts +33 -0
  16. package/dist/errors.d.ts.map +1 -0
  17. package/dist/errors.js +59 -0
  18. package/dist/errors.js.map +1 -0
  19. package/dist/extension.d.ts +63 -0
  20. package/dist/extension.d.ts.map +1 -0
  21. package/dist/extension.js +2 -0
  22. package/dist/extension.js.map +1 -0
  23. package/dist/extras/extension-loader.d.ts +205 -0
  24. package/dist/extras/extension-loader.d.ts.map +1 -0
  25. package/dist/extras/extension-loader.js +315 -0
  26. package/dist/extras/extension-loader.js.map +1 -0
  27. package/dist/extras/extensions/auto-steer/extension.d.ts +46 -0
  28. package/dist/extras/extensions/auto-steer/extension.d.ts.map +1 -0
  29. package/dist/extras/extensions/auto-steer/extension.js +52 -0
  30. package/dist/extras/extensions/auto-steer/extension.js.map +1 -0
  31. package/dist/extras/extensions/auto-steer/extension.json +7 -0
  32. package/dist/extras/extensions/auto-steer/index.d.ts +3 -0
  33. package/dist/extras/extensions/auto-steer/index.d.ts.map +1 -0
  34. package/dist/extras/extensions/auto-steer/index.js +2 -0
  35. package/dist/extras/extensions/auto-steer/index.js.map +1 -0
  36. package/dist/extras/extensions/disk-session/extension.d.ts +167 -0
  37. package/dist/extras/extensions/disk-session/extension.d.ts.map +1 -0
  38. package/dist/extras/extensions/disk-session/extension.js +492 -0
  39. package/dist/extras/extensions/disk-session/extension.js.map +1 -0
  40. package/dist/extras/extensions/disk-session/extension.json +6 -0
  41. package/dist/extras/extensions/disk-session/extension.test.d.ts +2 -0
  42. package/dist/extras/extensions/disk-session/extension.test.d.ts.map +1 -0
  43. package/dist/extras/extensions/disk-session/extension.test.js +672 -0
  44. package/dist/extras/extensions/disk-session/extension.test.js.map +1 -0
  45. package/dist/extras/extensions/disk-session/index.d.ts +3 -0
  46. package/dist/extras/extensions/disk-session/index.d.ts.map +1 -0
  47. package/dist/extras/extensions/disk-session/index.js +2 -0
  48. package/dist/extras/extensions/disk-session/index.js.map +1 -0
  49. package/dist/extras/extensions/emoji/extension.d.ts +20 -0
  50. package/dist/extras/extensions/emoji/extension.d.ts.map +1 -0
  51. package/dist/extras/extensions/emoji/extension.js +22 -0
  52. package/dist/extras/extensions/emoji/extension.js.map +1 -0
  53. package/dist/extras/extensions/emoji/extension.json +7 -0
  54. package/dist/extras/extensions/emoji/index.d.ts +3 -0
  55. package/dist/extras/extensions/emoji/index.d.ts.map +1 -0
  56. package/dist/extras/extensions/emoji/index.js +2 -0
  57. package/dist/extras/extensions/emoji/index.js.map +1 -0
  58. package/dist/extras/extensions/filesystem/extension.d.ts +53 -0
  59. package/dist/extras/extensions/filesystem/extension.d.ts.map +1 -0
  60. package/dist/extras/extensions/filesystem/extension.js +350 -0
  61. package/dist/extras/extensions/filesystem/extension.js.map +1 -0
  62. package/dist/extras/extensions/filesystem/extension.json +6 -0
  63. package/dist/extras/extensions/filesystem/extension.test.d.ts +2 -0
  64. package/dist/extras/extensions/filesystem/extension.test.d.ts.map +1 -0
  65. package/dist/extras/extensions/filesystem/extension.test.js +387 -0
  66. package/dist/extras/extensions/filesystem/extension.test.js.map +1 -0
  67. package/dist/extras/extensions/filesystem/index.d.ts +2 -0
  68. package/dist/extras/extensions/filesystem/index.d.ts.map +1 -0
  69. package/dist/extras/extensions/filesystem/index.js +2 -0
  70. package/dist/extras/extensions/filesystem/index.js.map +1 -0
  71. package/dist/extras/extensions/keyword-extractor/extension.d.ts +53 -0
  72. package/dist/extras/extensions/keyword-extractor/extension.d.ts.map +1 -0
  73. package/dist/extras/extensions/keyword-extractor/extension.js +61 -0
  74. package/dist/extras/extensions/keyword-extractor/extension.js.map +1 -0
  75. package/dist/extras/extensions/keyword-extractor/extension.json +6 -0
  76. package/dist/extras/extensions/keyword-extractor/extension.test.d.ts +2 -0
  77. package/dist/extras/extensions/keyword-extractor/extension.test.d.ts.map +1 -0
  78. package/dist/extras/extensions/keyword-extractor/extension.test.js +105 -0
  79. package/dist/extras/extensions/keyword-extractor/extension.test.js.map +1 -0
  80. package/dist/extras/extensions/keyword-extractor/index.d.ts +5 -0
  81. package/dist/extras/extensions/keyword-extractor/index.d.ts.map +1 -0
  82. package/dist/extras/extensions/keyword-extractor/index.js +3 -0
  83. package/dist/extras/extensions/keyword-extractor/index.js.map +1 -0
  84. package/dist/extras/extensions/keyword-extractor/nlp.d.ts +68 -0
  85. package/dist/extras/extensions/keyword-extractor/nlp.d.ts.map +1 -0
  86. package/dist/extras/extensions/keyword-extractor/nlp.js +156 -0
  87. package/dist/extras/extensions/keyword-extractor/nlp.js.map +1 -0
  88. package/dist/extras/extensions/keyword-extractor/nlp.test.d.ts +2 -0
  89. package/dist/extras/extensions/keyword-extractor/nlp.test.d.ts.map +1 -0
  90. package/dist/extras/extensions/keyword-extractor/nlp.test.js +176 -0
  91. package/dist/extras/extensions/keyword-extractor/nlp.test.js.map +1 -0
  92. package/dist/extras/extensions/logger/extension.d.ts +52 -0
  93. package/dist/extras/extensions/logger/extension.d.ts.map +1 -0
  94. package/dist/extras/extensions/logger/extension.js +68 -0
  95. package/dist/extras/extensions/logger/extension.js.map +1 -0
  96. package/dist/extras/extensions/logger/extension.json +7 -0
  97. package/dist/extras/extensions/logger/index.d.ts +3 -0
  98. package/dist/extras/extensions/logger/index.d.ts.map +1 -0
  99. package/dist/extras/extensions/logger/index.js +2 -0
  100. package/dist/extras/extensions/logger/index.js.map +1 -0
  101. package/dist/extras/extensions/mcp/extension.d.ts +63 -0
  102. package/dist/extras/extensions/mcp/extension.d.ts.map +1 -0
  103. package/dist/extras/extensions/mcp/extension.js +437 -0
  104. package/dist/extras/extensions/mcp/extension.js.map +1 -0
  105. package/dist/extras/extensions/mcp/extension.json +7 -0
  106. package/dist/extras/extensions/mcp/extension.test.d.ts +2 -0
  107. package/dist/extras/extensions/mcp/extension.test.d.ts.map +1 -0
  108. package/dist/extras/extensions/mcp/extension.test.js +286 -0
  109. package/dist/extras/extensions/mcp/extension.test.js.map +1 -0
  110. package/dist/extras/extensions/mcp/index.d.ts +3 -0
  111. package/dist/extras/extensions/mcp/index.d.ts.map +1 -0
  112. package/dist/extras/extensions/mcp/index.js +2 -0
  113. package/dist/extras/extensions/mcp/index.js.map +1 -0
  114. package/dist/extras/extensions/mem-session/extension.d.ts +24 -0
  115. package/dist/extras/extensions/mem-session/extension.d.ts.map +1 -0
  116. package/dist/extras/extensions/mem-session/extension.js +49 -0
  117. package/dist/extras/extensions/mem-session/extension.js.map +1 -0
  118. package/dist/extras/extensions/mem-session/extension.json +6 -0
  119. package/dist/extras/extensions/mem-session/index.d.ts +2 -0
  120. package/dist/extras/extensions/mem-session/index.d.ts.map +1 -0
  121. package/dist/extras/extensions/mem-session/index.js +2 -0
  122. package/dist/extras/extensions/mem-session/index.js.map +1 -0
  123. package/dist/extras/extensions/memory/extension.d.ts +54 -0
  124. package/dist/extras/extensions/memory/extension.d.ts.map +1 -0
  125. package/dist/extras/extensions/memory/extension.js +143 -0
  126. package/dist/extras/extensions/memory/extension.js.map +1 -0
  127. package/dist/extras/extensions/memory/extension.json +7 -0
  128. package/dist/extras/extensions/memory/index.d.ts +5 -0
  129. package/dist/extras/extensions/memory/index.d.ts.map +1 -0
  130. package/dist/extras/extensions/memory/index.js +3 -0
  131. package/dist/extras/extensions/memory/index.js.map +1 -0
  132. package/dist/extras/extensions/memory/llm-extractor.d.ts +42 -0
  133. package/dist/extras/extensions/memory/llm-extractor.d.ts.map +1 -0
  134. package/dist/extras/extensions/memory/llm-extractor.js +89 -0
  135. package/dist/extras/extensions/memory/llm-extractor.js.map +1 -0
  136. package/dist/extras/extensions/memory/types.d.ts +142 -0
  137. package/dist/extras/extensions/memory/types.d.ts.map +1 -0
  138. package/dist/extras/extensions/memory/types.js +2 -0
  139. package/dist/extras/extensions/memory/types.js.map +1 -0
  140. package/dist/extras/extensions/otel/extension.d.ts +57 -0
  141. package/dist/extras/extensions/otel/extension.d.ts.map +1 -0
  142. package/dist/extras/extensions/otel/extension.js +253 -0
  143. package/dist/extras/extensions/otel/extension.js.map +1 -0
  144. package/dist/extras/extensions/otel/extension.json +7 -0
  145. package/dist/extras/extensions/otel/extension.test.d.ts +2 -0
  146. package/dist/extras/extensions/otel/extension.test.d.ts.map +1 -0
  147. package/dist/extras/extensions/otel/extension.test.js +399 -0
  148. package/dist/extras/extensions/otel/extension.test.js.map +1 -0
  149. package/dist/extras/extensions/otel/index.d.ts +4 -0
  150. package/dist/extras/extensions/otel/index.d.ts.map +1 -0
  151. package/dist/extras/extensions/otel/index.js +3 -0
  152. package/dist/extras/extensions/otel/index.js.map +1 -0
  153. package/dist/extras/extensions/otel/jsonl-span-exporter.d.ts +60 -0
  154. package/dist/extras/extensions/otel/jsonl-span-exporter.d.ts.map +1 -0
  155. package/dist/extras/extensions/otel/jsonl-span-exporter.js +134 -0
  156. package/dist/extras/extensions/otel/jsonl-span-exporter.js.map +1 -0
  157. package/dist/extras/extensions/scripts/extension.d.ts +180 -0
  158. package/dist/extras/extensions/scripts/extension.d.ts.map +1 -0
  159. package/dist/extras/extensions/scripts/extension.js +618 -0
  160. package/dist/extras/extensions/scripts/extension.js.map +1 -0
  161. package/dist/extras/extensions/scripts/extension.json +7 -0
  162. package/dist/extras/extensions/scripts/extension.test.d.ts +2 -0
  163. package/dist/extras/extensions/scripts/extension.test.d.ts.map +1 -0
  164. package/dist/extras/extensions/scripts/extension.test.js +552 -0
  165. package/dist/extras/extensions/scripts/extension.test.js.map +1 -0
  166. package/dist/extras/extensions/scripts/index.d.ts +3 -0
  167. package/dist/extras/extensions/scripts/index.d.ts.map +1 -0
  168. package/dist/extras/extensions/scripts/index.js +2 -0
  169. package/dist/extras/extensions/scripts/index.js.map +1 -0
  170. package/dist/extras/extensions/skills/extension.d.ts +105 -0
  171. package/dist/extras/extensions/skills/extension.d.ts.map +1 -0
  172. package/dist/extras/extensions/skills/extension.js +419 -0
  173. package/dist/extras/extensions/skills/extension.js.map +1 -0
  174. package/dist/extras/extensions/skills/extension.json +7 -0
  175. package/dist/extras/extensions/skills/extension.test.d.ts +2 -0
  176. package/dist/extras/extensions/skills/extension.test.d.ts.map +1 -0
  177. package/dist/extras/extensions/skills/extension.test.js +184 -0
  178. package/dist/extras/extensions/skills/extension.test.js.map +1 -0
  179. package/dist/extras/extensions/skills/index.d.ts +4 -0
  180. package/dist/extras/extensions/skills/index.d.ts.map +1 -0
  181. package/dist/extras/extensions/skills/index.js +3 -0
  182. package/dist/extras/extensions/skills/index.js.map +1 -0
  183. package/dist/extras/extensions/streaming/extension.d.ts +15 -0
  184. package/dist/extras/extensions/streaming/extension.d.ts.map +1 -0
  185. package/dist/extras/extensions/streaming/extension.js +41 -0
  186. package/dist/extras/extensions/streaming/extension.js.map +1 -0
  187. package/dist/extras/extensions/streaming/extension.json +6 -0
  188. package/dist/extras/extensions/streaming/index.d.ts +2 -0
  189. package/dist/extras/extensions/streaming/index.d.ts.map +1 -0
  190. package/dist/extras/extensions/streaming/index.js +2 -0
  191. package/dist/extras/extensions/streaming/index.js.map +1 -0
  192. package/dist/extras/extensions/structured-output/extension.d.ts +11 -0
  193. package/dist/extras/extensions/structured-output/extension.d.ts.map +1 -0
  194. package/dist/extras/extensions/structured-output/extension.js +102 -0
  195. package/dist/extras/extensions/structured-output/extension.js.map +1 -0
  196. package/dist/extras/extensions/structured-output/extension.json +7 -0
  197. package/dist/extras/extensions/structured-output/index.d.ts +3 -0
  198. package/dist/extras/extensions/structured-output/index.d.ts.map +1 -0
  199. package/dist/extras/extensions/structured-output/index.js +2 -0
  200. package/dist/extras/extensions/structured-output/index.js.map +1 -0
  201. package/dist/extras/extensions/timestamp/extension.d.ts +11 -0
  202. package/dist/extras/extensions/timestamp/extension.d.ts.map +1 -0
  203. package/dist/extras/extensions/timestamp/extension.js +21 -0
  204. package/dist/extras/extensions/timestamp/extension.js.map +1 -0
  205. package/dist/extras/extensions/timestamp/extension.json +6 -0
  206. package/dist/extras/extensions/timestamp/index.d.ts +2 -0
  207. package/dist/extras/extensions/timestamp/index.d.ts.map +1 -0
  208. package/dist/extras/extensions/timestamp/index.js +2 -0
  209. package/dist/extras/extensions/timestamp/index.js.map +1 -0
  210. package/dist/extras/extensions/token-stats/extension.d.ts +50 -0
  211. package/dist/extras/extensions/token-stats/extension.d.ts.map +1 -0
  212. package/dist/extras/extensions/token-stats/extension.js +99 -0
  213. package/dist/extras/extensions/token-stats/extension.js.map +1 -0
  214. package/dist/extras/extensions/token-stats/extension.json +7 -0
  215. package/dist/extras/extensions/token-stats/extension.test.d.ts +2 -0
  216. package/dist/extras/extensions/token-stats/extension.test.d.ts.map +1 -0
  217. package/dist/extras/extensions/token-stats/extension.test.js +197 -0
  218. package/dist/extras/extensions/token-stats/extension.test.js.map +1 -0
  219. package/dist/extras/extensions/token-stats/index.d.ts +3 -0
  220. package/dist/extras/extensions/token-stats/index.d.ts.map +1 -0
  221. package/dist/extras/extensions/token-stats/index.js +2 -0
  222. package/dist/extras/extensions/token-stats/index.js.map +1 -0
  223. package/dist/extras/extensions/tool-buffer/extension.d.ts +89 -0
  224. package/dist/extras/extensions/tool-buffer/extension.d.ts.map +1 -0
  225. package/dist/extras/extensions/tool-buffer/extension.js +182 -0
  226. package/dist/extras/extensions/tool-buffer/extension.js.map +1 -0
  227. package/dist/extras/extensions/tool-buffer/extension.json +7 -0
  228. package/dist/extras/extensions/tool-buffer/extension.test.d.ts +2 -0
  229. package/dist/extras/extensions/tool-buffer/extension.test.d.ts.map +1 -0
  230. package/dist/extras/extensions/tool-buffer/extension.test.js +549 -0
  231. package/dist/extras/extensions/tool-buffer/extension.test.js.map +1 -0
  232. package/dist/extras/extensions/tool-buffer/index.d.ts +3 -0
  233. package/dist/extras/extensions/tool-buffer/index.d.ts.map +1 -0
  234. package/dist/extras/extensions/tool-buffer/index.js +2 -0
  235. package/dist/extras/extensions/tool-buffer/index.js.map +1 -0
  236. package/dist/extras/extensions/weather-tool/extension.d.ts +22 -0
  237. package/dist/extras/extensions/weather-tool/extension.d.ts.map +1 -0
  238. package/dist/extras/extensions/weather-tool/extension.js +33 -0
  239. package/dist/extras/extensions/weather-tool/extension.js.map +1 -0
  240. package/dist/extras/extensions/weather-tool/extension.json +7 -0
  241. package/dist/extras/extensions/weather-tool/index.d.ts +3 -0
  242. package/dist/extras/extensions/weather-tool/index.d.ts.map +1 -0
  243. package/dist/extras/extensions/weather-tool/index.js +2 -0
  244. package/dist/extras/extensions/weather-tool/index.js.map +1 -0
  245. package/dist/extras/models/ai-sdk-resolver.d.ts +15 -0
  246. package/dist/extras/models/ai-sdk-resolver.d.ts.map +1 -0
  247. package/dist/extras/models/ai-sdk-resolver.js +57 -0
  248. package/dist/extras/models/ai-sdk-resolver.js.map +1 -0
  249. package/dist/extras/models/index.d.ts +5 -0
  250. package/dist/extras/models/index.d.ts.map +1 -0
  251. package/dist/extras/models/index.js +3 -0
  252. package/dist/extras/models/index.js.map +1 -0
  253. package/dist/extras/models/routing-model.d.ts +18 -0
  254. package/dist/extras/models/routing-model.d.ts.map +1 -0
  255. package/dist/extras/models/routing-model.js +24 -0
  256. package/dist/extras/models/routing-model.js.map +1 -0
  257. package/dist/extras/openai-provider/index.d.ts +3 -0
  258. package/dist/extras/openai-provider/index.d.ts.map +1 -0
  259. package/dist/extras/openai-provider/index.js +2 -0
  260. package/dist/extras/openai-provider/index.js.map +1 -0
  261. package/dist/extras/openai-provider/server.d.ts +34 -0
  262. package/dist/extras/openai-provider/server.d.ts.map +1 -0
  263. package/dist/extras/openai-provider/server.js +335 -0
  264. package/dist/extras/openai-provider/server.js.map +1 -0
  265. package/dist/handle.d.ts +56 -0
  266. package/dist/handle.d.ts.map +1 -0
  267. package/dist/handle.js +2 -0
  268. package/dist/handle.js.map +1 -0
  269. package/dist/hooks.d.ts +98 -0
  270. package/dist/hooks.d.ts.map +1 -0
  271. package/dist/hooks.js +53 -0
  272. package/dist/hooks.js.map +1 -0
  273. package/dist/index.d.ts +16 -0
  274. package/dist/index.d.ts.map +1 -0
  275. package/dist/index.js +9 -0
  276. package/dist/index.js.map +1 -0
  277. package/dist/model.d.ts +75 -0
  278. package/dist/model.d.ts.map +1 -0
  279. package/dist/model.js +2 -0
  280. package/dist/model.js.map +1 -0
  281. package/dist/tool.d.ts +78 -0
  282. package/dist/tool.d.ts.map +1 -0
  283. package/dist/tool.js +78 -0
  284. package/dist/tool.js.map +1 -0
  285. package/dist/types.d.ts +83 -0
  286. package/dist/types.d.ts.map +1 -0
  287. package/dist/types.js +21 -0
  288. package/dist/types.js.map +1 -0
  289. package/package.json +178 -0
package/dist/agent.js ADDED
@@ -0,0 +1,575 @@
1
+ import { toToolDefinition } from './tool.js';
2
+ import { HookRegistry } from './hooks.js';
3
+ import { messageContentToText } from './types.js';
4
+ import { HookError } from './errors.js';
5
+ /** Default fallback message when `errorPolicy` is `'fallback'`. */
6
+ const DEFAULT_FALLBACK_MESSAGE = 'Sorry, I encountered an error. Please try again.';
7
+ const DEFAULT_MAX_ITERATIONS = 25;
8
+ const DEFAULT_ERROR_POLICY = 'fallback';
9
+ /**
10
+ * The core agent harness.
11
+ *
12
+ * Executes turns with a model, supports tool-call continuation, and is
13
+ * extended via hooks and extensions.
14
+ *
15
+ * Agents are **steerable** and **haltable** — {@link Agent.run} returns a
16
+ * {@link RunHandle} that exposes `steer()` and `halt()` controls tied to
17
+ * that specific turn.
18
+ */
19
+ export class Agent {
20
+ registry = new HookRegistry();
21
+ tools = new Map();
22
+ /** Maps tool name → extension that registered it (for unload). */
23
+ toolOwners = new Map();
24
+ extensions = new Map();
25
+ config;
26
+ /** Name of the extension currently being installed (for tool ownership tracking). */
27
+ installingExtension;
28
+ // All currently-active handles. Used by the convenience steer()/halt()
29
+ // methods so callers without a RunHandle can still control active turns.
30
+ activeHandles = new Set();
31
+ constructor(config) {
32
+ this.config = config;
33
+ for (const tool of config.tools ?? []) {
34
+ this.tools.set(tool.name, tool);
35
+ }
36
+ }
37
+ // ── System Prompt ──────────────────────────────────────────────────
38
+ /**
39
+ * Append content to the system prompt. This is a one-time mutation
40
+ * typically called by extensions at install time (e.g. the skills
41
+ * extension appends preloaded skill content so it's always active).
42
+ */
43
+ appendSystemPrompt(content) {
44
+ const current = this.config.systemPrompt ?? '';
45
+ this.config = {
46
+ ...this.config,
47
+ systemPrompt: current ? current + '\n\n' + content : content,
48
+ };
49
+ }
50
+ // ── Extension & Hook Registration ──────────────────────────────────
51
+ /** Install an extension. The extension's `install()` is called immediately. */
52
+ use(extension) {
53
+ if (this.extensions.has(extension.name)) {
54
+ throw new Error(`Extension "${extension.name}" is already installed`);
55
+ }
56
+ this.extensions.set(extension.name, extension);
57
+ this.installingExtension = extension.name;
58
+ try {
59
+ extension.install(this);
60
+ }
61
+ finally {
62
+ this.installingExtension = undefined;
63
+ }
64
+ return this;
65
+ }
66
+ /**
67
+ * Uninstall an extension by name — removes its hooks, tools, and
68
+ * registration. If the extension has a `close()` method, it is called
69
+ * (awaited) so resources like MCP client connections are cleaned up.
70
+ */
71
+ async unload(name) {
72
+ const extension = this.extensions.get(name);
73
+ if (!extension)
74
+ return this;
75
+ this.registry.unregister(name);
76
+ for (const [toolName, owner] of this.toolOwners) {
77
+ if (owner === name) {
78
+ this.tools.delete(toolName);
79
+ this.toolOwners.delete(toolName);
80
+ }
81
+ }
82
+ this.extensions.delete(name);
83
+ if (typeof extension.close === 'function') {
84
+ await extension.close();
85
+ }
86
+ return this;
87
+ }
88
+ /**
89
+ * Register a hook at a lifecycle stage.
90
+ *
91
+ * The hook's priority is derived from the extension that registers it:
92
+ * - During `install()` (inside `use()`), the installing extension's
93
+ * `priority` field is used.
94
+ * - Outside `install()`, the priority of an installed extension with
95
+ * a matching `extensionName` is used.
96
+ * - Otherwise, priority defaults to 0.
97
+ *
98
+ * Higher priority = runs first. Ties keep registration order.
99
+ */
100
+ hook(stage, extensionName, handler) {
101
+ const priority = this.resolveExtensionPriority(extensionName);
102
+ this.registry.register(stage, extensionName, handler, priority);
103
+ return this;
104
+ }
105
+ /**
106
+ * Resolve the priority for a hook registered by `extensionName`.
107
+ * During install, the installing extension's priority wins. Otherwise
108
+ * look up the extension by name. Default: 0.
109
+ */
110
+ resolveExtensionPriority(extensionName) {
111
+ if (this.installingExtension) {
112
+ const ext = this.extensions.get(this.installingExtension);
113
+ if (ext)
114
+ return ext.priority ?? 0;
115
+ }
116
+ const ext = this.extensions.get(extensionName);
117
+ if (ext)
118
+ return ext.priority ?? 0;
119
+ return 0;
120
+ }
121
+ /** Register a tool. Ownership is tracked for the currently-installing extension. */
122
+ tool(tool) {
123
+ this.tools.set(tool.name, tool);
124
+ if (this.installingExtension) {
125
+ this.toolOwners.set(tool.name, this.installingExtension);
126
+ }
127
+ return this;
128
+ }
129
+ /** List all registered tool names. */
130
+ getTools() {
131
+ return [...this.tools.keys()];
132
+ }
133
+ // ── Convenience Steering & Halting ─────────────────────────────────
134
+ /**
135
+ * Inject a steering message into all active turns.
136
+ *
137
+ * Convenience method — operates on every currently-running turn. If you
138
+ * have the {@link RunHandle} from `run()`, prefer calling
139
+ * `handle.steer()` directly. Hooks should use `ctx.turn.steer()` to
140
+ * target only their own turn.
141
+ */
142
+ steer(message) {
143
+ for (const h of this.activeHandles)
144
+ h.steer(message);
145
+ }
146
+ /**
147
+ * Halt all active turns.
148
+ *
149
+ * Convenience method — halts every currently-running turn. If you have
150
+ * the {@link RunHandle} from `run()`, prefer calling `handle.halt()`
151
+ * directly. Hooks should use `ctx.turn.halt()` to target only their own
152
+ * turn.
153
+ */
154
+ halt(reason = 'halted') {
155
+ for (const h of this.activeHandles)
156
+ h.halt(reason);
157
+ }
158
+ /** Whether any turn is currently active. */
159
+ get isRunning() {
160
+ return this.activeHandles.size > 0;
161
+ }
162
+ // ── Turn Execution ─────────────────────────────────────────────────
163
+ /**
164
+ * Execute an agent turn.
165
+ *
166
+ * Returns a {@link RunHandle} that is thenable (so `await agent.run(req)`
167
+ * still works) and exposes `steer()` and `halt()` controls for this
168
+ * specific turn. Multiple turns can run concurrently — each gets its
169
+ * own independent handle.
170
+ */
171
+ run(request) {
172
+ const abort = new AbortController();
173
+ const steeringQueue = [];
174
+ // Link external signal if provided.
175
+ if (request.signal) {
176
+ if (request.signal.aborted) {
177
+ abort.abort(request.signal.reason);
178
+ }
179
+ else {
180
+ request.signal.addEventListener('abort', () => abort.abort(request.signal.reason), { once: true });
181
+ }
182
+ }
183
+ const maxIter = request.maxIterations ?? this.config.maxIterations ?? DEFAULT_MAX_ITERATIONS;
184
+ const turn = {
185
+ request,
186
+ messages: [{ role: 'user', content: request.message }],
187
+ tools: this.mergeTools(request.tools),
188
+ systemPrompt: request.systemPrompt ?? this.config.systemPrompt,
189
+ metadata: { ...request.metadata },
190
+ signal: abort.signal,
191
+ steer: () => { },
192
+ halt: () => { },
193
+ };
194
+ const handle = new RunHandleImpl(abort, steeringQueue);
195
+ this.activeHandles.add(handle);
196
+ // Wire turn-level steer/halt to this handle.
197
+ turn.steer = (msg) => handle.steer(msg);
198
+ turn.halt = (reason) => handle.halt(reason);
199
+ // Kick off the turn. We store the promise on the handle so `handle.done`
200
+ // and `await handle` both resolve to the same result.
201
+ handle.done = this.executeTurn(turn, maxIter, steeringQueue).finally(() => {
202
+ this.activeHandles.delete(handle);
203
+ });
204
+ return handle;
205
+ }
206
+ mergeTools(extra) {
207
+ const all = new Map(this.tools);
208
+ for (const t of extra ?? [])
209
+ all.set(t.name, t);
210
+ return [...all.values()];
211
+ }
212
+ async executeTurn(turn, maxIter, steeringQueue) {
213
+ let iterations = 0;
214
+ const allToolCalls = [];
215
+ try {
216
+ // beforeTurn — can modify messages, tools, metadata.
217
+ await this.runHooks('beforeTurn', { turn });
218
+ // beforeContext — last chance to modify context before the LLM loop.
219
+ await this.runHooks('beforeContext', { turn });
220
+ for (;;) {
221
+ // ── Check halt ──
222
+ if (turn.signal.aborted) {
223
+ return await this.finishTurn(turn, '', 'halted', iterations, allToolCalls);
224
+ }
225
+ // ── Check max iterations ──
226
+ if (iterations >= maxIter) {
227
+ return await this.finishTurn(turn, '', 'max_iterations', iterations, allToolCalls);
228
+ }
229
+ // ── Drain steering messages ──
230
+ this.drainSteering(turn, steeringQueue);
231
+ // ── beforeLLM ──
232
+ const modelRequest = {
233
+ messages: turn.messages,
234
+ tools: turn.tools.length > 0 ? turn.tools.map(toToolDefinition) : undefined,
235
+ systemPrompt: turn.request.systemPrompt ?? this.config.systemPrompt,
236
+ temperature: this.config.temperature,
237
+ maxTokens: this.config.maxTokens,
238
+ signal: turn.signal,
239
+ };
240
+ const beforeLLMResult = await this.runHooks('beforeLLM', { turn, modelRequest });
241
+ // Halt may have been called during beforeLLM hooks.
242
+ if (turn.signal.aborted) {
243
+ return await this.finishTurn(turn, '', 'halted', iterations, allToolCalls);
244
+ }
245
+ let modelResponse;
246
+ if (beforeLLMResult.skipped && beforeLLMResult.value) {
247
+ modelResponse = beforeLLMResult.value;
248
+ }
249
+ else {
250
+ try {
251
+ modelResponse = await this.config.model.generate(modelRequest);
252
+ }
253
+ catch (err) {
254
+ if (turn.signal.aborted) {
255
+ return await this.finishTurn(turn, '', 'halted', iterations, allToolCalls);
256
+ }
257
+ throw err;
258
+ }
259
+ }
260
+ // ── afterLLM ──
261
+ await this.runHooks('afterLLM', { turn, modelRequest, modelResponse });
262
+ iterations++;
263
+ // Add the assistant message to the conversation.
264
+ turn.messages.push(modelResponse.message);
265
+ // ── Halt may have been called during afterLLM hooks ──
266
+ if (turn.signal.aborted) {
267
+ return await this.finishTurn(turn, messageContentToText(modelResponse.message.content), 'halted', iterations, allToolCalls);
268
+ }
269
+ // ── No tool calls → final response ──
270
+ const toolCalls = modelResponse.message.toolCalls;
271
+ if (!toolCalls || toolCalls.length === 0) {
272
+ return await this.finishTurn(turn, messageContentToText(modelResponse.message.content), 'stop', iterations, allToolCalls);
273
+ }
274
+ // ── Separate external (pass-through) from internal (execute) tool calls ──
275
+ const externalCalls = [];
276
+ const internalCalls = [];
277
+ for (const tc of toolCalls) {
278
+ const tool = turn.tools.find((t) => t.name === tc.name);
279
+ if (tool?.external)
280
+ externalCalls.push(tc);
281
+ else
282
+ internalCalls.push(tc);
283
+ }
284
+ // ── External tool calls → return to caller for execution ──
285
+ if (externalCalls.length > 0) {
286
+ allToolCalls.push(...externalCalls);
287
+ // If there are also internal calls in this batch, execute those first
288
+ // (the model may have mixed both in one response). The external calls
289
+ // are still returned — the caller will see them and the internal results.
290
+ if (internalCalls.length > 0) {
291
+ allToolCalls.push(...internalCalls);
292
+ for (const toolCall of internalCalls) {
293
+ if (turn.signal.aborted) {
294
+ return await this.finishTurn(turn, '', 'halted', iterations, allToolCalls);
295
+ }
296
+ const beforeToolCtx = { turn, toolCall };
297
+ const beforeToolResult = await this.runHooks('beforeTool', beforeToolCtx);
298
+ let toolResult;
299
+ if (beforeToolResult.skipped && beforeToolResult.value) {
300
+ toolResult = beforeToolResult.value;
301
+ }
302
+ else {
303
+ toolResult = await this.executeToolCall(toolCall, turn);
304
+ }
305
+ const afterToolCtx = { turn, toolCall, toolResult };
306
+ const afterToolResult = await this.runHooks('afterTool', afterToolCtx);
307
+ if (afterToolResult.value) {
308
+ toolResult = afterToolResult.value;
309
+ }
310
+ turn.messages.push({
311
+ role: 'tool',
312
+ content: toolResult.content,
313
+ toolCallId: toolCall.id,
314
+ name: toolCall.name,
315
+ });
316
+ }
317
+ }
318
+ // Return external tool calls to the caller. The assistant message
319
+ // (with toolCalls) is already in turn.messages from the push above.
320
+ return await this.finishTurn(turn, messageContentToText(modelResponse.message.content), 'tool_calls', iterations, allToolCalls, externalCalls);
321
+ }
322
+ // ── Execute internal tool calls ──
323
+ allToolCalls.push(...internalCalls);
324
+ for (const toolCall of internalCalls) {
325
+ // Check halt between tool calls in a batch.
326
+ if (turn.signal.aborted) {
327
+ return await this.finishTurn(turn, '', 'halted', iterations, allToolCalls);
328
+ }
329
+ // beforeTool — can short-circuit with a synthetic result.
330
+ const beforeToolCtx = { turn, toolCall };
331
+ const beforeToolResult = await this.runHooks('beforeTool', beforeToolCtx);
332
+ let toolResult;
333
+ if (beforeToolResult.skipped && beforeToolResult.value) {
334
+ toolResult = beforeToolResult.value;
335
+ }
336
+ else {
337
+ toolResult = await this.executeToolCall(toolCall, turn);
338
+ }
339
+ // afterTool — can modify the result.
340
+ const afterToolCtx = { turn, toolCall, toolResult };
341
+ const afterToolResult = await this.runHooks('afterTool', afterToolCtx);
342
+ if (afterToolResult.value) {
343
+ toolResult = afterToolResult.value;
344
+ }
345
+ turn.messages.push({
346
+ role: 'tool',
347
+ content: toolResult.content,
348
+ toolCallId: toolCall.id,
349
+ name: toolCall.name,
350
+ });
351
+ }
352
+ // Loop continues — the model will see the tool results.
353
+ }
354
+ }
355
+ catch (err) {
356
+ if (turn.signal.aborted) {
357
+ return await this.finishTurn(turn, '', 'halted', iterations, allToolCalls);
358
+ }
359
+ // Fire onError hooks — extensions can observe or recover.
360
+ // Hooks take precedence over the error policy.
361
+ const errorResult = await this.runHooks('onError', { turn, error: err });
362
+ if (errorResult.skipped && errorResult.value) {
363
+ const response = errorResult.value;
364
+ turn.response = response;
365
+ await this.runHooks('afterTurn', { turn });
366
+ return response;
367
+ }
368
+ // No hook recovered — apply the configured error policy.
369
+ const policy = this.config.errorPolicy ?? DEFAULT_ERROR_POLICY;
370
+ if (policy === 'throw') {
371
+ throw err;
372
+ }
373
+ if (policy === 'fallback') {
374
+ return await this.finishWithError(turn, err, iterations, allToolCalls);
375
+ }
376
+ // Custom policy function — return a response to recover,
377
+ // return undefined to rethrow.
378
+ const customResponse = await policy({ error: err, turn });
379
+ if (customResponse) {
380
+ turn.response = customResponse;
381
+ await this.runHooks('afterTurn', { turn });
382
+ return customResponse;
383
+ }
384
+ throw err;
385
+ }
386
+ }
387
+ /**
388
+ * Build the response, run beforeResponse + afterTurn hooks, and return.
389
+ * All turn exit paths go through here so extensions (session, memory,
390
+ * observability) always get a chance to persist/observe.
391
+ */
392
+ async finishTurn(turn, message, finishReason, iterations, toolCalls, pendingToolCalls) {
393
+ const response = this.buildResponse(turn, message, finishReason, iterations, toolCalls, pendingToolCalls);
394
+ turn.response = response;
395
+ // beforeResponse — can modify the final response.
396
+ await this.runHooks('beforeResponse', { turn });
397
+ // afterTurn — observe/persist.
398
+ await this.runHooks('afterTurn', { turn });
399
+ return turn.response;
400
+ }
401
+ /**
402
+ * Build a fallback error response, run afterTurn hooks, and return.
403
+ *
404
+ * Used by the default `'fallback'` error policy when no `onError` hook
405
+ * recovered. The error is attached to `response.metadata.error` so
406
+ * observability extensions can inspect it via `afterTurn`.
407
+ */
408
+ async finishWithError(turn, err, iterations, toolCalls) {
409
+ const message = this.config.fallbackMessage ?? DEFAULT_FALLBACK_MESSAGE;
410
+ const response = this.buildResponse(turn, message, 'error', iterations, toolCalls);
411
+ // Attach the error so observability extensions can see what happened.
412
+ response.metadata = { ...turn.metadata, error: err };
413
+ turn.response = response;
414
+ await this.runHooks('afterTurn', { turn });
415
+ return response;
416
+ }
417
+ async executeToolCall(toolCall, turn) {
418
+ const tool = turn.tools.find((t) => t.name === toolCall.name);
419
+ if (!tool) {
420
+ return {
421
+ toolCallId: toolCall.id,
422
+ content: `Error: tool "${toolCall.name}" not found`,
423
+ isError: true,
424
+ };
425
+ }
426
+ let args;
427
+ try {
428
+ args = toolCall.arguments ? JSON.parse(toolCall.arguments) : {};
429
+ }
430
+ catch {
431
+ return {
432
+ toolCallId: toolCall.id,
433
+ content: `Error: invalid JSON arguments: ${toolCall.arguments}`,
434
+ isError: true,
435
+ };
436
+ }
437
+ const toolCtx = {
438
+ signal: turn.signal,
439
+ metadata: turn.metadata,
440
+ };
441
+ try {
442
+ // If already halted, don't invoke the tool at all.
443
+ if (turn.signal.aborted) {
444
+ return {
445
+ toolCallId: toolCall.id,
446
+ content: 'Tool execution halted',
447
+ isError: true,
448
+ };
449
+ }
450
+ // Race the tool execution against the abort signal. If the signal
451
+ // fires, we stop waiting and return a halted result. The tool may
452
+ // still be running in the background — tools that need to clean up
453
+ // should check `ctx.signal` cooperatively.
454
+ const result = await this.raceWithAbort(tool.execute(args, toolCtx), turn.signal);
455
+ if (result) {
456
+ result.toolCallId = toolCall.id;
457
+ return result;
458
+ }
459
+ // Aborted — return a halted tool result.
460
+ return {
461
+ toolCallId: toolCall.id,
462
+ content: 'Tool execution halted',
463
+ isError: true,
464
+ };
465
+ }
466
+ catch (err) {
467
+ if (turn.signal.aborted) {
468
+ return {
469
+ toolCallId: toolCall.id,
470
+ content: 'Tool execution halted',
471
+ isError: true,
472
+ };
473
+ }
474
+ // Tool errors become tool results so the model can react.
475
+ const msg = err instanceof Error ? err.message : String(err);
476
+ return {
477
+ toolCallId: toolCall.id,
478
+ content: `Tool error: ${msg}`,
479
+ isError: true,
480
+ };
481
+ }
482
+ }
483
+ /**
484
+ * Race a promise against an abort signal. Returns `undefined` if the
485
+ * signal fires first (meaning "halted"). The original promise is NOT
486
+ * cancelled — it may continue running in the background.
487
+ */
488
+ async raceWithAbort(promise, signal) {
489
+ if (signal.aborted)
490
+ return undefined;
491
+ return Promise.race([
492
+ promise,
493
+ new Promise((resolve) => {
494
+ signal.addEventListener('abort', () => resolve(undefined), { once: true });
495
+ }),
496
+ ]);
497
+ }
498
+ drainSteering(turn, steeringQueue) {
499
+ while (steeringQueue.length > 0) {
500
+ const msg = steeringQueue.shift();
501
+ turn.messages.push({ role: 'user', content: msg });
502
+ }
503
+ }
504
+ buildResponse(turn, message, finishReason, iterations, toolCalls, pendingToolCalls) {
505
+ return {
506
+ role: 'assistant',
507
+ message,
508
+ toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
509
+ ...(pendingToolCalls && pendingToolCalls.length > 0 && { pendingToolCalls }),
510
+ finishReason,
511
+ iterations,
512
+ metadata: turn.metadata,
513
+ };
514
+ }
515
+ async runHooks(stage, ctx) {
516
+ for (const entry of this.registry.entries(stage)) {
517
+ try {
518
+ const result = await entry.handler(ctx);
519
+ if (result?.skip) {
520
+ return { skipped: true, value: result.value };
521
+ }
522
+ }
523
+ catch (err) {
524
+ if (ctx.turn.signal.aborted)
525
+ return { skipped: false };
526
+ if (stage === 'onError')
527
+ throw err;
528
+ throw new HookError(`Hook "${stage}" from extension "${entry.extensionName}" failed: ${err instanceof Error ? err.message : String(err)}`, stage, entry.extensionName, err);
529
+ }
530
+ }
531
+ return { skipped: false };
532
+ }
533
+ }
534
+ /**
535
+ * Concrete implementation of {@link RunHandle}.
536
+ *
537
+ * Thenable so `await handle` works, but also exposes discrete controls.
538
+ */
539
+ class RunHandleImpl {
540
+ abort;
541
+ steeringQueue;
542
+ _done;
543
+ constructor(abort, steeringQueue) {
544
+ this.abort = abort;
545
+ this.steeringQueue = steeringQueue;
546
+ }
547
+ get signal() {
548
+ return this.abort.signal;
549
+ }
550
+ get isRunning() {
551
+ return !this.abort.signal.aborted && this._done !== undefined;
552
+ }
553
+ get done() {
554
+ if (!this._done) {
555
+ throw new Error('RunHandle: done accessed before run() was called');
556
+ }
557
+ return this._done;
558
+ }
559
+ set done(promise) {
560
+ this._done = promise;
561
+ }
562
+ steer(message) {
563
+ if (!this.abort.signal.aborted) {
564
+ this.steeringQueue.push(message);
565
+ }
566
+ }
567
+ halt(reason = 'halted') {
568
+ this.abort.abort(reason);
569
+ }
570
+ // Thenable — allows `await handle` to work.
571
+ then(onfulfilled, onrejected) {
572
+ return this.done.then(onfulfilled, onrejected);
573
+ }
574
+ }
575
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { LanguageModelV4 } from '@ai-sdk/provider';
2
+ import type { Model, ModelRequest, ModelResponse } from './model.js';
3
+ /**
4
+ * Adapter that wraps a Vercel AI SDK `LanguageModelV4` as a libra `Model`.
5
+ *
6
+ * This lets you use any current AI SDK provider (`@ai-sdk/openai`,
7
+ * `@ai-sdk/google`, `@ai-sdk/anthropic`, etc.) with libra's hook system
8
+ * and tool-call loop. Provider-specific wire formats are handled by the
9
+ * AI SDK while libra retains ownership of tool execution and continuation.
10
+ *
11
+ * When `ModelRequest.onDelta` is set, the adapter uses `doStream` and
12
+ * emits text, reasoning, and tool-input deltas via the callback. The
13
+ * final assembled `ModelResponse` is still returned. When `onDelta` is
14
+ * not set, it uses `doGenerate` (no streaming overhead).
15
+ */
16
+ export declare class AISdkModel implements Model {
17
+ private readonly model;
18
+ constructor(model: LanguageModelV4);
19
+ generate(request: ModelRequest): Promise<ModelResponse>;
20
+ private generateBatch;
21
+ private generateStream;
22
+ private toCallOptions;
23
+ private toAISdkPrompt;
24
+ private fromAISdkResult;
25
+ }
26
+ //# sourceMappingURL=ai-sdk-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-sdk-model.d.ts","sourceRoot":"","sources":["../src/ai-sdk-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAUhB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAgB,MAAM,YAAY,CAAC;AAWnF;;;;;;;;;;;;GAYG;AACH,qBAAa,UAAW,YAAW,KAAK;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAlC,YAA6B,KAAK,EAAE,eAAe,EAAI;IAEjD,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAG5D;YAEa,aAAa;YAKb,cAAc;IA8F5B,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,aAAa;IAqCrB,OAAO,CAAC,eAAe;CAiCxB"}