@xandout/libra-harness 0.1.118 → 0.1.120

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 (207) hide show
  1. package/dist/agent.d.ts.map +1 -1
  2. package/dist/agent.js +15 -8
  3. package/dist/agent.js.map +1 -1
  4. package/dist/ai-sdk-model.d.ts.map +1 -1
  5. package/dist/ai-sdk-model.js +41 -24
  6. package/dist/ai-sdk-model.js.map +1 -1
  7. package/dist/extensions/disk-session/extension.d.ts.map +1 -1
  8. package/dist/extensions/disk-session/extension.js +18 -3
  9. package/dist/extensions/disk-session/extension.js.map +1 -1
  10. package/dist/extensions/loader.d.ts +10 -10
  11. package/dist/extensions/loader.js +10 -10
  12. package/dist/extensions/streaming/extension.d.ts +6 -0
  13. package/dist/extensions/streaming/extension.d.ts.map +1 -1
  14. package/dist/extensions/streaming/extension.js +6 -0
  15. package/dist/extensions/streaming/extension.js.map +1 -1
  16. package/dist/models/ai-sdk-resolver.d.ts +8 -0
  17. package/dist/models/ai-sdk-resolver.d.ts.map +1 -1
  18. package/dist/models/ai-sdk-resolver.js +25 -6
  19. package/dist/models/ai-sdk-resolver.js.map +1 -1
  20. package/dist/types.d.ts +12 -1
  21. package/dist/types.d.ts.map +1 -1
  22. package/dist/types.js +2 -0
  23. package/dist/types.js.map +1 -1
  24. package/package.json +2 -65
  25. package/dist/extensions/auto-steer/extension.d.ts +0 -46
  26. package/dist/extensions/auto-steer/extension.d.ts.map +0 -1
  27. package/dist/extensions/auto-steer/extension.js +0 -52
  28. package/dist/extensions/auto-steer/extension.js.map +0 -1
  29. package/dist/extensions/auto-steer/extension.json +0 -7
  30. package/dist/extensions/auto-steer/index.d.ts +0 -3
  31. package/dist/extensions/auto-steer/index.d.ts.map +0 -1
  32. package/dist/extensions/auto-steer/index.js +0 -2
  33. package/dist/extensions/auto-steer/index.js.map +0 -1
  34. package/dist/extensions/emoji/extension.d.ts +0 -20
  35. package/dist/extensions/emoji/extension.d.ts.map +0 -1
  36. package/dist/extensions/emoji/extension.js +0 -22
  37. package/dist/extensions/emoji/extension.js.map +0 -1
  38. package/dist/extensions/emoji/extension.json +0 -7
  39. package/dist/extensions/emoji/index.d.ts +0 -3
  40. package/dist/extensions/emoji/index.d.ts.map +0 -1
  41. package/dist/extensions/emoji/index.js +0 -2
  42. package/dist/extensions/emoji/index.js.map +0 -1
  43. package/dist/extensions/filesystem/extension.d.ts +0 -53
  44. package/dist/extensions/filesystem/extension.d.ts.map +0 -1
  45. package/dist/extensions/filesystem/extension.js +0 -350
  46. package/dist/extensions/filesystem/extension.js.map +0 -1
  47. package/dist/extensions/filesystem/extension.json +0 -6
  48. package/dist/extensions/filesystem/extension.test.d.ts +0 -2
  49. package/dist/extensions/filesystem/extension.test.d.ts.map +0 -1
  50. package/dist/extensions/filesystem/extension.test.js +0 -387
  51. package/dist/extensions/filesystem/extension.test.js.map +0 -1
  52. package/dist/extensions/filesystem/index.d.ts +0 -2
  53. package/dist/extensions/filesystem/index.d.ts.map +0 -1
  54. package/dist/extensions/filesystem/index.js +0 -2
  55. package/dist/extensions/filesystem/index.js.map +0 -1
  56. package/dist/extensions/keyword-extractor/extension.d.ts +0 -53
  57. package/dist/extensions/keyword-extractor/extension.d.ts.map +0 -1
  58. package/dist/extensions/keyword-extractor/extension.js +0 -61
  59. package/dist/extensions/keyword-extractor/extension.js.map +0 -1
  60. package/dist/extensions/keyword-extractor/extension.json +0 -6
  61. package/dist/extensions/keyword-extractor/extension.test.d.ts +0 -2
  62. package/dist/extensions/keyword-extractor/extension.test.d.ts.map +0 -1
  63. package/dist/extensions/keyword-extractor/extension.test.js +0 -105
  64. package/dist/extensions/keyword-extractor/extension.test.js.map +0 -1
  65. package/dist/extensions/keyword-extractor/index.d.ts +0 -5
  66. package/dist/extensions/keyword-extractor/index.d.ts.map +0 -1
  67. package/dist/extensions/keyword-extractor/index.js +0 -3
  68. package/dist/extensions/keyword-extractor/index.js.map +0 -1
  69. package/dist/extensions/keyword-extractor/nlp.d.ts +0 -68
  70. package/dist/extensions/keyword-extractor/nlp.d.ts.map +0 -1
  71. package/dist/extensions/keyword-extractor/nlp.js +0 -156
  72. package/dist/extensions/keyword-extractor/nlp.js.map +0 -1
  73. package/dist/extensions/keyword-extractor/nlp.test.d.ts +0 -2
  74. package/dist/extensions/keyword-extractor/nlp.test.d.ts.map +0 -1
  75. package/dist/extensions/keyword-extractor/nlp.test.js +0 -176
  76. package/dist/extensions/keyword-extractor/nlp.test.js.map +0 -1
  77. package/dist/extensions/logger/extension.d.ts +0 -52
  78. package/dist/extensions/logger/extension.d.ts.map +0 -1
  79. package/dist/extensions/logger/extension.js +0 -68
  80. package/dist/extensions/logger/extension.js.map +0 -1
  81. package/dist/extensions/logger/extension.json +0 -7
  82. package/dist/extensions/logger/index.d.ts +0 -3
  83. package/dist/extensions/logger/index.d.ts.map +0 -1
  84. package/dist/extensions/logger/index.js +0 -2
  85. package/dist/extensions/logger/index.js.map +0 -1
  86. package/dist/extensions/mcp/extension.d.ts +0 -63
  87. package/dist/extensions/mcp/extension.d.ts.map +0 -1
  88. package/dist/extensions/mcp/extension.js +0 -437
  89. package/dist/extensions/mcp/extension.js.map +0 -1
  90. package/dist/extensions/mcp/extension.json +0 -7
  91. package/dist/extensions/mcp/extension.test.d.ts +0 -2
  92. package/dist/extensions/mcp/extension.test.d.ts.map +0 -1
  93. package/dist/extensions/mcp/extension.test.js +0 -286
  94. package/dist/extensions/mcp/extension.test.js.map +0 -1
  95. package/dist/extensions/mcp/index.d.ts +0 -3
  96. package/dist/extensions/mcp/index.d.ts.map +0 -1
  97. package/dist/extensions/mcp/index.js +0 -2
  98. package/dist/extensions/mcp/index.js.map +0 -1
  99. package/dist/extensions/mem-session/extension.d.ts +0 -24
  100. package/dist/extensions/mem-session/extension.d.ts.map +0 -1
  101. package/dist/extensions/mem-session/extension.js +0 -49
  102. package/dist/extensions/mem-session/extension.js.map +0 -1
  103. package/dist/extensions/mem-session/extension.json +0 -6
  104. package/dist/extensions/mem-session/index.d.ts +0 -2
  105. package/dist/extensions/mem-session/index.d.ts.map +0 -1
  106. package/dist/extensions/mem-session/index.js +0 -2
  107. package/dist/extensions/mem-session/index.js.map +0 -1
  108. package/dist/extensions/memory/extension.d.ts +0 -54
  109. package/dist/extensions/memory/extension.d.ts.map +0 -1
  110. package/dist/extensions/memory/extension.js +0 -143
  111. package/dist/extensions/memory/extension.js.map +0 -1
  112. package/dist/extensions/memory/extension.json +0 -7
  113. package/dist/extensions/memory/index.d.ts +0 -4
  114. package/dist/extensions/memory/index.d.ts.map +0 -1
  115. package/dist/extensions/memory/index.js +0 -3
  116. package/dist/extensions/memory/index.js.map +0 -1
  117. package/dist/extensions/memory/llm-extractor.d.ts +0 -42
  118. package/dist/extensions/memory/llm-extractor.d.ts.map +0 -1
  119. package/dist/extensions/memory/llm-extractor.js +0 -89
  120. package/dist/extensions/memory/llm-extractor.js.map +0 -1
  121. package/dist/extensions/memory/types.d.ts +0 -142
  122. package/dist/extensions/memory/types.d.ts.map +0 -1
  123. package/dist/extensions/memory/types.js +0 -2
  124. package/dist/extensions/memory/types.js.map +0 -1
  125. package/dist/extensions/otel/extension.d.ts +0 -57
  126. package/dist/extensions/otel/extension.d.ts.map +0 -1
  127. package/dist/extensions/otel/extension.js +0 -253
  128. package/dist/extensions/otel/extension.js.map +0 -1
  129. package/dist/extensions/otel/extension.json +0 -7
  130. package/dist/extensions/otel/extension.test.d.ts +0 -2
  131. package/dist/extensions/otel/extension.test.d.ts.map +0 -1
  132. package/dist/extensions/otel/extension.test.js +0 -399
  133. package/dist/extensions/otel/extension.test.js.map +0 -1
  134. package/dist/extensions/otel/index.d.ts +0 -4
  135. package/dist/extensions/otel/index.d.ts.map +0 -1
  136. package/dist/extensions/otel/index.js +0 -3
  137. package/dist/extensions/otel/index.js.map +0 -1
  138. package/dist/extensions/otel/jsonl-span-exporter.d.ts +0 -60
  139. package/dist/extensions/otel/jsonl-span-exporter.d.ts.map +0 -1
  140. package/dist/extensions/otel/jsonl-span-exporter.js +0 -134
  141. package/dist/extensions/otel/jsonl-span-exporter.js.map +0 -1
  142. package/dist/extensions/scripts/extension.d.ts +0 -180
  143. package/dist/extensions/scripts/extension.d.ts.map +0 -1
  144. package/dist/extensions/scripts/extension.js +0 -618
  145. package/dist/extensions/scripts/extension.js.map +0 -1
  146. package/dist/extensions/scripts/extension.json +0 -7
  147. package/dist/extensions/scripts/extension.test.d.ts +0 -2
  148. package/dist/extensions/scripts/extension.test.d.ts.map +0 -1
  149. package/dist/extensions/scripts/extension.test.js +0 -552
  150. package/dist/extensions/scripts/extension.test.js.map +0 -1
  151. package/dist/extensions/scripts/index.d.ts +0 -3
  152. package/dist/extensions/scripts/index.d.ts.map +0 -1
  153. package/dist/extensions/scripts/index.js +0 -2
  154. package/dist/extensions/scripts/index.js.map +0 -1
  155. package/dist/extensions/structured-output/extension.d.ts +0 -11
  156. package/dist/extensions/structured-output/extension.d.ts.map +0 -1
  157. package/dist/extensions/structured-output/extension.js +0 -102
  158. package/dist/extensions/structured-output/extension.js.map +0 -1
  159. package/dist/extensions/structured-output/extension.json +0 -7
  160. package/dist/extensions/structured-output/index.d.ts +0 -3
  161. package/dist/extensions/structured-output/index.d.ts.map +0 -1
  162. package/dist/extensions/structured-output/index.js +0 -2
  163. package/dist/extensions/structured-output/index.js.map +0 -1
  164. package/dist/extensions/timestamp/extension.d.ts +0 -11
  165. package/dist/extensions/timestamp/extension.d.ts.map +0 -1
  166. package/dist/extensions/timestamp/extension.js +0 -21
  167. package/dist/extensions/timestamp/extension.js.map +0 -1
  168. package/dist/extensions/timestamp/extension.json +0 -6
  169. package/dist/extensions/timestamp/index.d.ts +0 -2
  170. package/dist/extensions/timestamp/index.d.ts.map +0 -1
  171. package/dist/extensions/timestamp/index.js +0 -2
  172. package/dist/extensions/timestamp/index.js.map +0 -1
  173. package/dist/extensions/token-stats/extension.d.ts +0 -50
  174. package/dist/extensions/token-stats/extension.d.ts.map +0 -1
  175. package/dist/extensions/token-stats/extension.js +0 -99
  176. package/dist/extensions/token-stats/extension.js.map +0 -1
  177. package/dist/extensions/token-stats/extension.json +0 -7
  178. package/dist/extensions/token-stats/extension.test.d.ts +0 -2
  179. package/dist/extensions/token-stats/extension.test.d.ts.map +0 -1
  180. package/dist/extensions/token-stats/extension.test.js +0 -197
  181. package/dist/extensions/token-stats/extension.test.js.map +0 -1
  182. package/dist/extensions/token-stats/index.d.ts +0 -3
  183. package/dist/extensions/token-stats/index.d.ts.map +0 -1
  184. package/dist/extensions/token-stats/index.js +0 -2
  185. package/dist/extensions/token-stats/index.js.map +0 -1
  186. package/dist/extensions/tool-buffer/extension.d.ts +0 -89
  187. package/dist/extensions/tool-buffer/extension.d.ts.map +0 -1
  188. package/dist/extensions/tool-buffer/extension.js +0 -182
  189. package/dist/extensions/tool-buffer/extension.js.map +0 -1
  190. package/dist/extensions/tool-buffer/extension.json +0 -7
  191. package/dist/extensions/tool-buffer/extension.test.d.ts +0 -2
  192. package/dist/extensions/tool-buffer/extension.test.d.ts.map +0 -1
  193. package/dist/extensions/tool-buffer/extension.test.js +0 -549
  194. package/dist/extensions/tool-buffer/extension.test.js.map +0 -1
  195. package/dist/extensions/tool-buffer/index.d.ts +0 -3
  196. package/dist/extensions/tool-buffer/index.d.ts.map +0 -1
  197. package/dist/extensions/tool-buffer/index.js +0 -2
  198. package/dist/extensions/tool-buffer/index.js.map +0 -1
  199. package/dist/extensions/weather-tool/extension.d.ts +0 -22
  200. package/dist/extensions/weather-tool/extension.d.ts.map +0 -1
  201. package/dist/extensions/weather-tool/extension.js +0 -33
  202. package/dist/extensions/weather-tool/extension.js.map +0 -1
  203. package/dist/extensions/weather-tool/extension.json +0 -7
  204. package/dist/extensions/weather-tool/index.d.ts +0 -3
  205. package/dist/extensions/weather-tool/index.d.ts.map +0 -1
  206. package/dist/extensions/weather-tool/index.js +0 -2
  207. package/dist/extensions/weather-tool/index.js.map +0 -1
@@ -7,21 +7,21 @@ import { pathToFileURL, fileURLToPath } from 'node:url';
7
7
  * Computed at runtime from `import.meta.url`, so it always resolves to
8
8
  * the correct location regardless of where libra is installed.
9
9
  *
10
- * Use with {@link loadExtensions} to load built-in extensions (logging,
11
- * session, timestamp, emoji, weather-tool, streaming, structured-output,
12
- * mcp, skills) alongside your own local extensions in a single call:
10
+ * Use with {@link loadExtensions} to load built-in extensions (disk-session,
11
+ * code-tools, streaming, skills) alongside your own local extensions in a
12
+ * single call:
13
13
  *
14
14
  * ```typescript
15
- * import { loadExtensions, sharedExtensionsDir } from '@xandout/libra-harness/extras';
15
+ * import { loadExtensions, sharedExtensionsDir } from '@xandout/libra-harness/extensions';
16
16
  *
17
17
  * const loaded = await loadExtensions(
18
18
  * [sharedExtensionsDir, './extensions'],
19
- * { skillsDirs: './skills', mcpConfigPaths: './mcpServers.json' },
19
+ * { skillsDirs: './skills' },
20
20
  * );
21
21
  * ```
22
22
  *
23
23
  * For simpler cases, you can also import individual extensions directly:
24
- * `import { createLoggerExtension } from '@xandout/libra-harness/extras/logger'`.
24
+ * `import { createDiskSessionExtension } from '@xandout/libra-harness/extensions/disk-session'`.
25
25
  */
26
26
  export const sharedExtensionsDir = fileURLToPath(new URL('.', import.meta.url));
27
27
  /** Entry-point filenames tried in order. */
@@ -170,12 +170,12 @@ export async function loadExtension(discovered, config) {
170
170
  *
171
171
  * @example
172
172
  * // Mix built-in factories with local directory discovery.
173
- * import { createLoggerExtension } from '@xandout/libra-harness/extras/logger';
174
- * import { createMcpExtension } from '@xandout/libra-harness/extras/mcp';
173
+ * import { createDiskSessionExtension } from '@xandout/libra-harness/extensions/disk-session';
174
+ * import { createStreamingExtension } from '@xandout/libra-harness/extensions/streaming';
175
175
  *
176
176
  * const loaded = await loadExtensions(
177
- * [createLoggerExtension, createMcpExtension, './extensions'],
178
- * { mcpConfigPaths: './mcpServers.json' },
177
+ * [createDiskSessionExtension, createStreamingExtension, './extensions'],
178
+ * { skillsDirs: './skills' },
179
179
  * );
180
180
  *
181
181
  * @example
@@ -10,6 +10,12 @@ import type { Extension } from '../../extension.js';
10
10
  *
11
11
  * When no `streamCallbacks` are in metadata, the extension is a no-op
12
12
  * and the model uses `doGenerate` (no streaming overhead).
13
+ *
14
+ * The core model adapter forwards raw provider deltas directly — this is
15
+ * stable and matches Vercel's default streaming behavior. Word-by-word
16
+ * smoothing (Vercel's `smoothStream`) is an optional display concern that
17
+ * could be layered here via a buffering transform if pacing is ever
18
+ * needed; it is intentionally not in the core adapter.
13
19
  */
14
20
  export default function createStreamingExtension(): Extension;
15
21
  //# sourceMappingURL=extension.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../../src/extensions/streaming/extension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGpD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,OAAO,UAAU,wBAAwB,IAAI,SAAS,CAgC5D"}
1
+ {"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../../src/extensions/streaming/extension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGpD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,OAAO,UAAU,wBAAwB,IAAI,SAAS,CAgC5D"}
@@ -9,6 +9,12 @@
9
9
  *
10
10
  * When no `streamCallbacks` are in metadata, the extension is a no-op
11
11
  * and the model uses `doGenerate` (no streaming overhead).
12
+ *
13
+ * The core model adapter forwards raw provider deltas directly — this is
14
+ * stable and matches Vercel's default streaming behavior. Word-by-word
15
+ * smoothing (Vercel's `smoothStream`) is an optional display concern that
16
+ * could be layered here via a buffering transform if pacing is ever
17
+ * needed; it is intentionally not in the core adapter.
12
18
  */
13
19
  export default function createStreamingExtension() {
14
20
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"extension.js","sourceRoot":"","sources":["../../../src/extensions/streaming/extension.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,OAAO,UAAU,wBAAwB;IAC9C,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,GAAG;QACb,OAAO,CAAC,KAAK;YACX,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBACjD,IAAI,CAAC,GAAG,CAAC,YAAY;oBAAE,OAAO;gBAE9B,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,eAIvB,CAAC;gBAEd,IAAI,CAAC,SAAS;oBAAE,OAAO;gBAEvB,GAAG,CAAC,YAAY,CAAC,OAAO,GAAG,CAAC,KAAiB,EAAE,EAAE;oBAC/C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;wBACnB,KAAK,MAAM;4BACT,SAAS,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;4BAClC,MAAM;wBACR,KAAK,WAAW;4BACd,SAAS,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;4BACvC,MAAM;wBACR,KAAK,YAAY;4BACf,SAAS,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;4BAC7D,MAAM;oBACV,CAAC;gBACH,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"extension.js","sourceRoot":"","sources":["../../../src/extensions/streaming/extension.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,OAAO,UAAU,wBAAwB;IAC9C,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,GAAG;QACb,OAAO,CAAC,KAAK;YACX,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBACjD,IAAI,CAAC,GAAG,CAAC,YAAY;oBAAE,OAAO;gBAE9B,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,eAIvB,CAAC;gBAEd,IAAI,CAAC,SAAS;oBAAE,OAAO;gBAEvB,GAAG,CAAC,YAAY,CAAC,OAAO,GAAG,CAAC,KAAiB,EAAE,EAAE;oBAC/C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;wBACnB,KAAK,MAAM;4BACT,SAAS,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;4BAClC,MAAM;wBACR,KAAK,WAAW;4BACd,SAAS,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;4BACvC,MAAM;wBACR,KAAK,YAAY;4BACf,SAAS,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;4BAC7D,MAAM;oBACV,CAAC;gBACH,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -10,6 +10,14 @@ export interface ResolveModelOptions {
10
10
  providers?: Readonly<Record<string, AISdkProviderDefinition>>;
11
11
  }
12
12
  export declare const nativeAISdkProviders: Readonly<Record<string, AISdkProviderDefinition>>;
13
+ /**
14
+ * Resolve a libra `Model` from a `provider/model` string using Vercel AI SDK's
15
+ * `createProviderRegistry`. Providers are lazy-loaded on first use.
16
+ *
17
+ * Model IDs use the existing `provider/model` format (e.g. `openai/gpt-4o`,
18
+ * `google/gemini-2.5-pro`) — the registry is configured with `separator: '/'`
19
+ * so no changes to existing IDs are required.
20
+ */
13
21
  export declare function resolveModel(modelId: string, options?: ResolveModelOptions): Promise<Model>;
14
22
  export declare function configuredProviders(env?: Readonly<Record<string, string | undefined>>, providers?: Readonly<Record<string, AISdkProviderDefinition>>): string[];
15
23
  //# sourceMappingURL=ai-sdk-resolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-sdk-resolver.d.ts","sourceRoot":"","sources":["../../src/models/ai-sdk-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,eAAe,CAAC;AAExE,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IACnD,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC,CAAC;CAC/D;AAED,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CA6BlF,CAAC;AAEF,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,KAAK,CAAC,CAqBrG;AAED,wBAAgB,mBAAmB,CACjC,GAAG,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAe,EAC/D,SAAS,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAwB,GAClF,MAAM,EAAE,CAKV"}
1
+ {"version":3,"file":"ai-sdk-resolver.d.ts","sourceRoot":"","sources":["../../src/models/ai-sdk-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGxD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,eAAe,CAAC;AAExE,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IACnD,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC,CAAC;CAC/D;AAED,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CA6BlF,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,KAAK,CAAC,CAmCrG;AAED,wBAAgB,mBAAmB,CACjC,GAAG,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAe,EAC/D,SAAS,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAwB,GAClF,MAAM,EAAE,CAKV"}
@@ -1,3 +1,4 @@
1
+ import { createProviderRegistry } from 'ai';
1
2
  import { AISdkModel } from '../ai-sdk-model.js';
2
3
  export const nativeAISdkProviders = {
3
4
  openai: {
@@ -29,24 +30,42 @@ export const nativeAISdkProviders = {
29
30
  },
30
31
  },
31
32
  };
33
+ /**
34
+ * Resolve a libra `Model` from a `provider/model` string using Vercel AI SDK's
35
+ * `createProviderRegistry`. Providers are lazy-loaded on first use.
36
+ *
37
+ * Model IDs use the existing `provider/model` format (e.g. `openai/gpt-4o`,
38
+ * `google/gemini-2.5-pro`) — the registry is configured with `separator: '/'`
39
+ * so no changes to existing IDs are required.
40
+ */
32
41
  export async function resolveModel(modelId, options = {}) {
33
42
  const separator = modelId.indexOf('/');
34
43
  if (separator <= 0 || separator === modelId.length - 1) {
35
44
  throw new Error(`Invalid model ID "${modelId}". Expected "provider/model".`);
36
45
  }
37
46
  const providerId = modelId.slice(0, separator);
38
- const providerModelId = modelId.slice(separator + 1);
39
- const providers = options.providers ?? nativeAISdkProviders;
40
- const definition = providers[providerId];
47
+ const definitions = options.providers ?? nativeAISdkProviders;
48
+ const definition = definitions[providerId];
41
49
  if (!definition) {
42
- throw new Error(`Unsupported provider "${providerId}". Supported providers: ${Object.keys(providers).sort().join(', ')}.`);
50
+ throw new Error(`Unsupported provider "${providerId}". Supported providers: ${Object.keys(definitions).sort().join(', ')}.`);
43
51
  }
44
52
  const env = options.env ?? process.env;
45
53
  if (!env[definition.envVar]?.trim()) {
46
54
  throw new Error(`Cannot resolve "${modelId}": ${definition.envVar} is not configured.`);
47
55
  }
48
- const provider = await definition.load();
49
- return new AISdkModel(provider(providerModelId));
56
+ // Lazy-load the provider and wrap it in a single-entry registry so we get
57
+ // Vercel's provider resolution logic (middleware support, error messages, etc.)
58
+ // The wrapper declares `specificationVersion: 'v4'` so `asProviderV4` returns
59
+ // it as-is — without this, the registry wraps models in a v2-compat adapter
60
+ // that double-transforms usage (inputTokens.total becomes { total: <n> }).
61
+ const providerFactory = await definition.load();
62
+ const registry = createProviderRegistry({
63
+ [providerId]: {
64
+ specificationVersion: 'v4',
65
+ languageModel: (id) => providerFactory(id),
66
+ },
67
+ }, { separator: '/' });
68
+ return new AISdkModel(registry.languageModel(modelId));
50
69
  }
51
70
  export function configuredProviders(env = process.env, providers = nativeAISdkProviders) {
52
71
  return Object.entries(providers)
@@ -1 +1 @@
1
- {"version":3,"file":"ai-sdk-resolver.js","sourceRoot":"","sources":["../../src/models/ai-sdk-resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai-sdk-resolver.js","sourceRoot":"","sources":["../../src/models/ai-sdk-resolver.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -29,6 +29,17 @@ export interface TextContentPart {
29
29
  type: 'text';
30
30
  text: string;
31
31
  }
32
+ /**
33
+ * Reasoning/thinking content produced by a model during generation.
34
+ *
35
+ * Stored verbatim so the full record of what the model thought is preserved.
36
+ * Stripped from LLM context by the session extension (via `pruneMessages`)
37
+ * before being re-sent — the model doesn't need its own old thinking tokens.
38
+ */
39
+ export interface ReasoningContentPart {
40
+ type: 'reasoning';
41
+ text: string;
42
+ }
32
43
  /** Provider-independent file data. */
33
44
  export type FileContentData = {
34
45
  type: 'data';
@@ -48,7 +59,7 @@ export interface FileContentPart {
48
59
  data: FileContentData;
49
60
  }
50
61
  /** Message content. Strings remain supported as the text-only shorthand. */
51
- export type MessageContent = string | Array<TextContentPart | FileContentPart>;
62
+ export type MessageContent = string | Array<TextContentPart | FileContentPart | ReasoningContentPart>;
52
63
  /** Convert message content to a text representation for logs and text-only extensions. */
53
64
  export declare function messageContentToText(content: MessageContent): string;
54
65
  /** Whether message content contains at least one file attachment. */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,iDAAiD;AACjD,MAAM,WAAW,QAAQ;IACvB,uEAAuE;IACvE,EAAE,EAAE,MAAM,CAAC;IACX,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,2CAA2C;AAC3C,MAAM,WAAW,UAAU;IACzB,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,qCAAqC;AACrC,MAAM,MAAM,IAAI,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;AAE5D,gDAAgD;AAChD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,sCAAsC;AACtC,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC5B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnC,wEAAwE;AACxE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,eAAe,CAAC;CACvB;AAED,4EAA4E;AAC5E,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,CAAC,eAAe,GAAG,eAAe,CAAC,CAAC;AAE/E,0FAA0F;AAC1F,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAMpE;AAED,qEAAqE;AACrE,wBAAgB,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAIzF;AAED;;;;;;GAMG;AACH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,IAAI,CAAC;IACX,+EAA+E;IAC/E,OAAO,EAAE,cAAc,CAAC;IACxB,iEAAiE;IACjE,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,2EAA2E;AAC3E,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACrC,CAAC;CACH"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,iDAAiD;AACjD,MAAM,WAAW,QAAQ;IACvB,uEAAuE;IACvE,EAAE,EAAE,MAAM,CAAC;IACX,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,2CAA2C;AAC3C,MAAM,WAAW,UAAU;IACzB,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,qCAAqC;AACrC,MAAM,MAAM,IAAI,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;AAE5D,gDAAgD;AAChD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,sCAAsC;AACtC,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC5B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnC,wEAAwE;AACxE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,eAAe,CAAC;CACvB;AAED,4EAA4E;AAC5E,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,CAAC,eAAe,GAAG,eAAe,GAAG,oBAAoB,CAAC,CAAC;AAEtG,0FAA0F;AAC1F,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAOpE;AAED,qEAAqE;AACrE,wBAAgB,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAIzF;AAED;;;;;;GAMG;AACH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,IAAI,CAAC;IACX,+EAA+E;IAC/E,OAAO,EAAE,cAAc,CAAC;IACxB,iEAAiE;IACjE,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,2EAA2E;AAC3E,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACrC,CAAC;CACH"}
package/dist/types.js CHANGED
@@ -11,6 +11,8 @@ export function messageContentToText(content) {
11
11
  return content.map((part) => {
12
12
  if (part.type === 'text')
13
13
  return part.text;
14
+ if (part.type === 'reasoning')
15
+ return `<thinking>\n${part.text}\n</thinking>`;
14
16
  return part.filename ? `[File: ${part.filename} (${part.mediaType})]` : `[File: ${part.mediaType}]`;
15
17
  }).join('\n');
16
18
  }
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgDH,0FAA0F;AAC1F,MAAM,UAAU,oBAAoB,CAAC,OAAuB;IAC1D,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC;QAC3C,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,SAAS,GAAG,CAAC;IACtG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,cAAc,CAAC,OAAuB,EAAE,eAAwB;IAC9E,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CACrD,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,eAAe,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CACzF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA4DH,0FAA0F;AAC1F,MAAM,UAAU,oBAAoB,CAAC,OAAuB;IAC1D,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC;QAC3C,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW;YAAE,OAAO,eAAe,IAAI,CAAC,IAAI,eAAe,CAAC;QAC9E,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,SAAS,GAAG,CAAC;IACtG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,cAAc,CAAC,OAAuB,EAAE,eAAwB;IAC9E,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CACrD,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,eAAe,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CACzF,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xandout/libra-harness",
3
- "version": "0.1.118",
3
+ "version": "0.1.120",
4
4
  "description": "A small, composable, hookable agent harness. Library-first.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -38,30 +38,10 @@
38
38
  "types": "./dist/openai-provider/index.d.ts",
39
39
  "import": "./dist/openai-provider/index.js"
40
40
  },
41
- "./extensions/logger": {
42
- "types": "./dist/extensions/logger/index.d.ts",
43
- "import": "./dist/extensions/logger/index.js"
44
- },
45
41
  "./extensions/disk-session": {
46
42
  "types": "./dist/extensions/disk-session/index.d.ts",
47
43
  "import": "./dist/extensions/disk-session/index.js"
48
44
  },
49
- "./extensions/mem-session": {
50
- "types": "./dist/extensions/mem-session/index.d.ts",
51
- "import": "./dist/extensions/mem-session/index.js"
52
- },
53
- "./extensions/timestamp": {
54
- "types": "./dist/extensions/timestamp/index.d.ts",
55
- "import": "./dist/extensions/timestamp/index.js"
56
- },
57
- "./extensions/emoji": {
58
- "types": "./dist/extensions/emoji/index.d.ts",
59
- "import": "./dist/extensions/emoji/index.js"
60
- },
61
- "./extensions/weather-tool": {
62
- "types": "./dist/extensions/weather-tool/index.d.ts",
63
- "import": "./dist/extensions/weather-tool/index.js"
64
- },
65
45
  "./extensions/code-tools": {
66
46
  "types": "./dist/extensions/code-tools/index.d.ts",
67
47
  "import": "./dist/extensions/code-tools/index.js"
@@ -70,46 +50,10 @@
70
50
  "types": "./dist/extensions/streaming/index.d.ts",
71
51
  "import": "./dist/extensions/streaming/index.js"
72
52
  },
73
- "./extensions/structured-output": {
74
- "types": "./dist/extensions/structured-output/index.d.ts",
75
- "import": "./dist/extensions/structured-output/index.js"
76
- },
77
- "./extensions/mcp": {
78
- "types": "./dist/extensions/mcp/index.d.ts",
79
- "import": "./dist/extensions/mcp/index.js"
80
- },
81
53
  "./extensions/skills": {
82
54
  "types": "./dist/extensions/skills/index.d.ts",
83
55
  "import": "./dist/extensions/skills/index.js"
84
56
  },
85
- "./extensions/auto-steer": {
86
- "types": "./dist/extensions/auto-steer/index.d.ts",
87
- "import": "./dist/extensions/auto-steer/index.js"
88
- },
89
- "./extensions/filesystem": {
90
- "types": "./dist/extensions/filesystem/index.d.ts",
91
- "import": "./dist/extensions/filesystem/index.js"
92
- },
93
- "./extensions/keyword-extractor": {
94
- "types": "./dist/extensions/keyword-extractor/index.d.ts",
95
- "import": "./dist/extensions/keyword-extractor/index.js"
96
- },
97
- "./extensions/otel": {
98
- "types": "./dist/extensions/otel/index.d.ts",
99
- "import": "./dist/extensions/otel/index.js"
100
- },
101
- "./extensions/tool-buffer": {
102
- "types": "./dist/extensions/tool-buffer/index.d.ts",
103
- "import": "./dist/extensions/tool-buffer/index.js"
104
- },
105
- "./extensions/token-stats": {
106
- "types": "./dist/extensions/token-stats/index.d.ts",
107
- "import": "./dist/extensions/token-stats/index.js"
108
- },
109
- "./extensions/scripts": {
110
- "types": "./dist/extensions/scripts/index.d.ts",
111
- "import": "./dist/extensions/scripts/index.js"
112
- },
113
57
  "./skills": {
114
58
  "types": "./dist/extensions/skills/index.d.ts",
115
59
  "import": "./dist/extensions/skills/index.js"
@@ -125,14 +69,6 @@
125
69
  "./streaming": {
126
70
  "types": "./dist/extensions/streaming/index.d.ts",
127
71
  "import": "./dist/extensions/streaming/index.js"
128
- },
129
- "./mcp": {
130
- "types": "./dist/extensions/mcp/index.d.ts",
131
- "import": "./dist/extensions/mcp/index.js"
132
- },
133
- "./logger": {
134
- "types": "./dist/extensions/logger/index.d.ts",
135
- "import": "./dist/extensions/logger/index.js"
136
72
  }
137
73
  },
138
74
  "files": [
@@ -192,6 +128,7 @@
192
128
  "@ai-sdk/google": "^4.0.39",
193
129
  "@ai-sdk/openai": "^4.0.36",
194
130
  "@ai-sdk/provider": "^4.0.7",
131
+ "ai": "^7.0.84",
195
132
  "wink-eng-lite-web-model": "^1.8.1",
196
133
  "wink-nlp": "^2.4.0"
197
134
  },
@@ -1,46 +0,0 @@
1
- import type { Extension } from '../../extension.js';
2
- /**
3
- * Config for the auto-steer extension.
4
- */
5
- export interface AutoSteerConfig {
6
- /**
7
- * The max iterations the agent is configured for. The extension steers
8
- * at `threshold` iterations before this limit. Default: 25 (matching
9
- * the agent's default).
10
- */
11
- maxIterations?: number;
12
- /**
13
- * How many iterations before the limit to steer. Default: 3.
14
- * With maxIterations=25 and threshold=3, the steer fires at iteration 22.
15
- */
16
- threshold?: number;
17
- /**
18
- * The steering message to inject. Default: a prompt to wrap up.
19
- */
20
- steerMessage?: string;
21
- }
22
- /**
23
- * Create an auto-steer extension.
24
- *
25
- * Watches iteration count and steers the agent to wrap up when it's
26
- * approaching the max iterations limit. This prevents the agent from
27
- * hitting the limit with no response — instead of silently running out
28
- * of turns, the agent gets a nudge like "You're running low on turns,
29
- * summarize and respond now."
30
- *
31
- * Tracks iterations by counting `afterLLM` hook calls per turn. The
32
- * count resets on each `beforeTurn`.
33
- *
34
- * @example
35
- * ```typescript
36
- * import { createAutoSteerExtension } from '@xandout/libra-harness/extras/auto-steer';
37
- *
38
- * const autoSteer = createAutoSteerExtension({
39
- * maxIterations: 15,
40
- * threshold: 3,
41
- * });
42
- * agent.use(autoSteer);
43
- * ```
44
- */
45
- export default function createAutoSteerExtension(config?: AutoSteerConfig): Extension;
46
- //# sourceMappingURL=extension.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../../src/extensions/auto-steer/extension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAC9C,MAAM,CAAC,EAAE,eAAe,GACvB,SAAS,CA+BX"}
@@ -1,52 +0,0 @@
1
- /**
2
- * Create an auto-steer extension.
3
- *
4
- * Watches iteration count and steers the agent to wrap up when it's
5
- * approaching the max iterations limit. This prevents the agent from
6
- * hitting the limit with no response — instead of silently running out
7
- * of turns, the agent gets a nudge like "You're running low on turns,
8
- * summarize and respond now."
9
- *
10
- * Tracks iterations by counting `afterLLM` hook calls per turn. The
11
- * count resets on each `beforeTurn`.
12
- *
13
- * @example
14
- * ```typescript
15
- * import { createAutoSteerExtension } from '@xandout/libra-harness/extras/auto-steer';
16
- *
17
- * const autoSteer = createAutoSteerExtension({
18
- * maxIterations: 15,
19
- * threshold: 3,
20
- * });
21
- * agent.use(autoSteer);
22
- * ```
23
- */
24
- export default function createAutoSteerExtension(config) {
25
- const maxIter = config?.maxIterations ?? 25;
26
- const threshold = config?.threshold ?? 3;
27
- const steerAt = maxIter - threshold;
28
- const message = config?.steerMessage ??
29
- "You're running low on turns. Stop calling tools and respond to the user now with what you have so far. Be concise.";
30
- let iterationCount = 0;
31
- let steered = false;
32
- return {
33
- name: 'auto-steer',
34
- priority: 90,
35
- install(agent) {
36
- // Reset counter at the start of each turn.
37
- agent.hook('beforeTurn', 'auto-steer', async () => {
38
- iterationCount = 0;
39
- steered = false;
40
- });
41
- // Count LLM calls and steer when approaching the limit.
42
- agent.hook('afterLLM', 'auto-steer', async (ctx) => {
43
- iterationCount++;
44
- if (!steered && iterationCount >= steerAt) {
45
- steered = true;
46
- ctx.turn.steer(message);
47
- }
48
- });
49
- },
50
- };
51
- }
52
- //# sourceMappingURL=extension.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extension.js","sourceRoot":"","sources":["../../../src/extensions/auto-steer/extension.ts"],"names":[],"mappings":"AAuBA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAC9C,MAAwB;IAExB,MAAM,OAAO,GAAG,MAAM,EAAE,aAAa,IAAI,EAAE,CAAC;IAC5C,MAAM,SAAS,GAAG,MAAM,EAAE,SAAS,IAAI,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;IACpC,MAAM,OAAO,GAAG,MAAM,EAAE,YAAY;QAClC,oHAAoH,CAAC;IAEvH,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,QAAQ,EAAE,EAAE;QACZ,OAAO,CAAC,KAAK;YACX,2CAA2C;YAC3C,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,EAAE,KAAK,IAAI,EAAE;gBAChD,cAAc,GAAG,CAAC,CAAC;gBACnB,OAAO,GAAG,KAAK,CAAC;YAClB,CAAC,CAAC,CAAC;YAEH,wDAAwD;YACxD,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBACjD,cAAc,EAAE,CAAC;gBAEjB,IAAI,CAAC,OAAO,IAAI,cAAc,IAAI,OAAO,EAAE,CAAC;oBAC1C,OAAO,GAAG,IAAI,CAAC;oBACf,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,7 +0,0 @@
1
- {
2
- "name": "auto-steer",
3
- "description": "Steers the agent to wrap up when approaching max iterations, preventing empty max_iterations responses.",
4
- "enabled": true,
5
- "priority": 90,
6
- "configKeys": ["maxIterations", "threshold", "steerMessage"]
7
- }
@@ -1,3 +0,0 @@
1
- export { default as createAutoSteerExtension } from './extension.js';
2
- export type { AutoSteerConfig } from './extension.js';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/extensions/auto-steer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AACrE,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1,2 +0,0 @@
1
- export { default as createAutoSteerExtension } from './extension.js';
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extensions/auto-steer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1,20 +0,0 @@
1
- import type { Extension } from '../../extension.js';
2
- /**
3
- * Config for the emoji extension.
4
- *
5
- * Passed by the extension loader from the host's config object.
6
- * The key `emojiPrefix` should be declared in extension.json's `configKeys`.
7
- */
8
- export interface EmojiExtensionConfig {
9
- /** Prefix to prepend to each response. Default: "✨ ". */
10
- emojiPrefix?: string;
11
- }
12
- /**
13
- * emoji extension — decorates the final response with a leading emoji.
14
- *
15
- * Demonstrates the simplest possible factory extension: a single
16
- * `beforeResponse` hook that mutates the outgoing message. Accepts an
17
- * optional `emojiPrefix` via config (default: `"✨ "`).
18
- */
19
- export default function createEmojiExtension(config?: EmojiExtensionConfig): Extension;
20
- //# sourceMappingURL=extension.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../../src/extensions/emoji/extension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAC1C,MAAM,CAAC,EAAE,oBAAoB,GAC5B,SAAS,CAaX"}
@@ -1,22 +0,0 @@
1
- /**
2
- * emoji extension — decorates the final response with a leading emoji.
3
- *
4
- * Demonstrates the simplest possible factory extension: a single
5
- * `beforeResponse` hook that mutates the outgoing message. Accepts an
6
- * optional `emojiPrefix` via config (default: `"✨ "`).
7
- */
8
- export default function createEmojiExtension(config) {
9
- const prefix = config?.emojiPrefix ?? '\u2728 ';
10
- return {
11
- name: 'emoji',
12
- priority: 0,
13
- install(agent) {
14
- agent.hook('beforeResponse', 'emoji', async (ctx) => {
15
- if (ctx.turn.response?.message) {
16
- ctx.turn.response.message = `${prefix}${ctx.turn.response.message}`;
17
- }
18
- });
19
- },
20
- };
21
- }
22
- //# sourceMappingURL=extension.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extension.js","sourceRoot":"","sources":["../../../src/extensions/emoji/extension.ts"],"names":[],"mappings":"AAaA;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAC1C,MAA6B;IAE7B,MAAM,MAAM,GAAG,MAAM,EAAE,WAAW,IAAI,SAAS,CAAC;IAChD,OAAO;QACL,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,CAAC;QACX,OAAO,CAAC,KAAK;YACX,KAAK,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBAClD,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;oBAC/B,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,GAAG,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACtE,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,7 +0,0 @@
1
- {
2
- "name": "emoji",
3
- "description": "Decorates the final response with a leading emoji. Low priority so it sees the final response after other extensions modify it.",
4
- "enabled": true,
5
- "priority": 0,
6
- "configKeys": ["emojiPrefix"]
7
- }
@@ -1,3 +0,0 @@
1
- export { default as createEmojiExtension } from './extension.js';
2
- export type { EmojiExtensionConfig } from './extension.js';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/extensions/emoji/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACjE,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1,2 +0,0 @@
1
- export { default as createEmojiExtension } from './extension.js';
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extensions/emoji/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1,53 +0,0 @@
1
- import type { Extension } from '@xandout/libra-harness';
2
- /** A named sandboxed directory. */
3
- export interface SandboxDir {
4
- /** Display name the agent sees in paths (e.g. "downloads", "workspace"). */
5
- name: string;
6
- /** Absolute or relative path to the directory on disk. */
7
- path: string;
8
- }
9
- export interface FilesystemConfig {
10
- /**
11
- * Named sandboxed directories. Each is presented to the agent by its
12
- * display name. Paths from the agent are prefixed with the name
13
- * (e.g. "downloads/report.txt").
14
- */
15
- directories: SandboxDir[];
16
- /**
17
- * Max file size for read operations (bytes). Default: 1MB.
18
- * Files larger than this return a metadata-only response.
19
- */
20
- maxReadSize?: number;
21
- /**
22
- * Tool name prefix. Default: 'fs'.
23
- */
24
- toolPrefix?: string;
25
- }
26
- /**
27
- * Create a filesystem extension that exposes controlled read/write
28
- * access to one or more sandboxed directories. All paths are resolved
29
- * relative to a sandbox directory — path traversal (../) is blocked.
30
- *
31
- * When multiple directories are configured, paths are prefixed with
32
- * the directory's display name (e.g. "downloads/report.txt"). The
33
- * agent sees the available directory names in the tool descriptions
34
- * and in `fs_list` output.
35
- *
36
- * Tools provided:
37
- * - `fs_read` — read a file's content (text or base64 for binary)
38
- * - `fs_write` — write text content to a file
39
- * - `fs_list` — list files in a directory (or list sandboxes if no path)
40
- * - `fs_delete` — delete a file or empty directory
41
- * - `fs_info` — get file metadata (size, type, modified time)
42
- *
43
- * The `fs_save_bytes` internal helper is exposed on the extension
44
- * object so other extensions can save binary content to the sandbox
45
- * without going through the LLM.
46
- */
47
- export default function createFilesystemExtension(config: FilesystemConfig): Extension & {
48
- /** Save raw bytes to a sandbox. Used by other extensions. */
49
- saveBytes(path: string, data: Buffer, mimetype?: string): string;
50
- /** Resolve a sandbox-relative path to an absolute path. */
51
- resolvePath(path: string): string;
52
- };
53
- //# sourceMappingURL=extension.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../../src/extensions/filesystem/extension.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,mCAAmC;AACnC,MAAM,WAAW,UAAU;IACzB,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAOD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAC/C,MAAM,EAAE,gBAAgB,GACvB,SAAS,GAAG;IACb,6DAA6D;IAC7D,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACjE,2DAA2D;IAC3D,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CACnC,CA2WA"}