@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.
- package/LICENSE +21 -0
- package/README.md +486 -0
- package/dist/agent.d.ts +174 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +575 -0
- package/dist/agent.js.map +1 -0
- package/dist/ai-sdk-model.d.ts +26 -0
- package/dist/ai-sdk-model.d.ts.map +1 -0
- package/dist/ai-sdk-model.js +260 -0
- package/dist/ai-sdk-model.js.map +1 -0
- package/dist/context.d.ts +75 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +2 -0
- package/dist/context.js.map +1 -0
- package/dist/errors.d.ts +33 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +59 -0
- package/dist/errors.js.map +1 -0
- package/dist/extension.d.ts +63 -0
- package/dist/extension.d.ts.map +1 -0
- package/dist/extension.js +2 -0
- package/dist/extension.js.map +1 -0
- package/dist/extras/extension-loader.d.ts +205 -0
- package/dist/extras/extension-loader.d.ts.map +1 -0
- package/dist/extras/extension-loader.js +315 -0
- package/dist/extras/extension-loader.js.map +1 -0
- package/dist/extras/extensions/auto-steer/extension.d.ts +46 -0
- package/dist/extras/extensions/auto-steer/extension.d.ts.map +1 -0
- package/dist/extras/extensions/auto-steer/extension.js +52 -0
- package/dist/extras/extensions/auto-steer/extension.js.map +1 -0
- package/dist/extras/extensions/auto-steer/extension.json +7 -0
- package/dist/extras/extensions/auto-steer/index.d.ts +3 -0
- package/dist/extras/extensions/auto-steer/index.d.ts.map +1 -0
- package/dist/extras/extensions/auto-steer/index.js +2 -0
- package/dist/extras/extensions/auto-steer/index.js.map +1 -0
- package/dist/extras/extensions/disk-session/extension.d.ts +167 -0
- package/dist/extras/extensions/disk-session/extension.d.ts.map +1 -0
- package/dist/extras/extensions/disk-session/extension.js +492 -0
- package/dist/extras/extensions/disk-session/extension.js.map +1 -0
- package/dist/extras/extensions/disk-session/extension.json +6 -0
- package/dist/extras/extensions/disk-session/extension.test.d.ts +2 -0
- package/dist/extras/extensions/disk-session/extension.test.d.ts.map +1 -0
- package/dist/extras/extensions/disk-session/extension.test.js +672 -0
- package/dist/extras/extensions/disk-session/extension.test.js.map +1 -0
- package/dist/extras/extensions/disk-session/index.d.ts +3 -0
- package/dist/extras/extensions/disk-session/index.d.ts.map +1 -0
- package/dist/extras/extensions/disk-session/index.js +2 -0
- package/dist/extras/extensions/disk-session/index.js.map +1 -0
- package/dist/extras/extensions/emoji/extension.d.ts +20 -0
- package/dist/extras/extensions/emoji/extension.d.ts.map +1 -0
- package/dist/extras/extensions/emoji/extension.js +22 -0
- package/dist/extras/extensions/emoji/extension.js.map +1 -0
- package/dist/extras/extensions/emoji/extension.json +7 -0
- package/dist/extras/extensions/emoji/index.d.ts +3 -0
- package/dist/extras/extensions/emoji/index.d.ts.map +1 -0
- package/dist/extras/extensions/emoji/index.js +2 -0
- package/dist/extras/extensions/emoji/index.js.map +1 -0
- package/dist/extras/extensions/filesystem/extension.d.ts +53 -0
- package/dist/extras/extensions/filesystem/extension.d.ts.map +1 -0
- package/dist/extras/extensions/filesystem/extension.js +350 -0
- package/dist/extras/extensions/filesystem/extension.js.map +1 -0
- package/dist/extras/extensions/filesystem/extension.json +6 -0
- package/dist/extras/extensions/filesystem/extension.test.d.ts +2 -0
- package/dist/extras/extensions/filesystem/extension.test.d.ts.map +1 -0
- package/dist/extras/extensions/filesystem/extension.test.js +387 -0
- package/dist/extras/extensions/filesystem/extension.test.js.map +1 -0
- package/dist/extras/extensions/filesystem/index.d.ts +2 -0
- package/dist/extras/extensions/filesystem/index.d.ts.map +1 -0
- package/dist/extras/extensions/filesystem/index.js +2 -0
- package/dist/extras/extensions/filesystem/index.js.map +1 -0
- package/dist/extras/extensions/keyword-extractor/extension.d.ts +53 -0
- package/dist/extras/extensions/keyword-extractor/extension.d.ts.map +1 -0
- package/dist/extras/extensions/keyword-extractor/extension.js +61 -0
- package/dist/extras/extensions/keyword-extractor/extension.js.map +1 -0
- package/dist/extras/extensions/keyword-extractor/extension.json +6 -0
- package/dist/extras/extensions/keyword-extractor/extension.test.d.ts +2 -0
- package/dist/extras/extensions/keyword-extractor/extension.test.d.ts.map +1 -0
- package/dist/extras/extensions/keyword-extractor/extension.test.js +105 -0
- package/dist/extras/extensions/keyword-extractor/extension.test.js.map +1 -0
- package/dist/extras/extensions/keyword-extractor/index.d.ts +5 -0
- package/dist/extras/extensions/keyword-extractor/index.d.ts.map +1 -0
- package/dist/extras/extensions/keyword-extractor/index.js +3 -0
- package/dist/extras/extensions/keyword-extractor/index.js.map +1 -0
- package/dist/extras/extensions/keyword-extractor/nlp.d.ts +68 -0
- package/dist/extras/extensions/keyword-extractor/nlp.d.ts.map +1 -0
- package/dist/extras/extensions/keyword-extractor/nlp.js +156 -0
- package/dist/extras/extensions/keyword-extractor/nlp.js.map +1 -0
- package/dist/extras/extensions/keyword-extractor/nlp.test.d.ts +2 -0
- package/dist/extras/extensions/keyword-extractor/nlp.test.d.ts.map +1 -0
- package/dist/extras/extensions/keyword-extractor/nlp.test.js +176 -0
- package/dist/extras/extensions/keyword-extractor/nlp.test.js.map +1 -0
- package/dist/extras/extensions/logger/extension.d.ts +52 -0
- package/dist/extras/extensions/logger/extension.d.ts.map +1 -0
- package/dist/extras/extensions/logger/extension.js +68 -0
- package/dist/extras/extensions/logger/extension.js.map +1 -0
- package/dist/extras/extensions/logger/extension.json +7 -0
- package/dist/extras/extensions/logger/index.d.ts +3 -0
- package/dist/extras/extensions/logger/index.d.ts.map +1 -0
- package/dist/extras/extensions/logger/index.js +2 -0
- package/dist/extras/extensions/logger/index.js.map +1 -0
- package/dist/extras/extensions/mcp/extension.d.ts +63 -0
- package/dist/extras/extensions/mcp/extension.d.ts.map +1 -0
- package/dist/extras/extensions/mcp/extension.js +437 -0
- package/dist/extras/extensions/mcp/extension.js.map +1 -0
- package/dist/extras/extensions/mcp/extension.json +7 -0
- package/dist/extras/extensions/mcp/extension.test.d.ts +2 -0
- package/dist/extras/extensions/mcp/extension.test.d.ts.map +1 -0
- package/dist/extras/extensions/mcp/extension.test.js +286 -0
- package/dist/extras/extensions/mcp/extension.test.js.map +1 -0
- package/dist/extras/extensions/mcp/index.d.ts +3 -0
- package/dist/extras/extensions/mcp/index.d.ts.map +1 -0
- package/dist/extras/extensions/mcp/index.js +2 -0
- package/dist/extras/extensions/mcp/index.js.map +1 -0
- package/dist/extras/extensions/mem-session/extension.d.ts +24 -0
- package/dist/extras/extensions/mem-session/extension.d.ts.map +1 -0
- package/dist/extras/extensions/mem-session/extension.js +49 -0
- package/dist/extras/extensions/mem-session/extension.js.map +1 -0
- package/dist/extras/extensions/mem-session/extension.json +6 -0
- package/dist/extras/extensions/mem-session/index.d.ts +2 -0
- package/dist/extras/extensions/mem-session/index.d.ts.map +1 -0
- package/dist/extras/extensions/mem-session/index.js +2 -0
- package/dist/extras/extensions/mem-session/index.js.map +1 -0
- package/dist/extras/extensions/memory/extension.d.ts +54 -0
- package/dist/extras/extensions/memory/extension.d.ts.map +1 -0
- package/dist/extras/extensions/memory/extension.js +143 -0
- package/dist/extras/extensions/memory/extension.js.map +1 -0
- package/dist/extras/extensions/memory/extension.json +7 -0
- package/dist/extras/extensions/memory/index.d.ts +5 -0
- package/dist/extras/extensions/memory/index.d.ts.map +1 -0
- package/dist/extras/extensions/memory/index.js +3 -0
- package/dist/extras/extensions/memory/index.js.map +1 -0
- package/dist/extras/extensions/memory/llm-extractor.d.ts +42 -0
- package/dist/extras/extensions/memory/llm-extractor.d.ts.map +1 -0
- package/dist/extras/extensions/memory/llm-extractor.js +89 -0
- package/dist/extras/extensions/memory/llm-extractor.js.map +1 -0
- package/dist/extras/extensions/memory/types.d.ts +142 -0
- package/dist/extras/extensions/memory/types.d.ts.map +1 -0
- package/dist/extras/extensions/memory/types.js +2 -0
- package/dist/extras/extensions/memory/types.js.map +1 -0
- package/dist/extras/extensions/otel/extension.d.ts +57 -0
- package/dist/extras/extensions/otel/extension.d.ts.map +1 -0
- package/dist/extras/extensions/otel/extension.js +253 -0
- package/dist/extras/extensions/otel/extension.js.map +1 -0
- package/dist/extras/extensions/otel/extension.json +7 -0
- package/dist/extras/extensions/otel/extension.test.d.ts +2 -0
- package/dist/extras/extensions/otel/extension.test.d.ts.map +1 -0
- package/dist/extras/extensions/otel/extension.test.js +399 -0
- package/dist/extras/extensions/otel/extension.test.js.map +1 -0
- package/dist/extras/extensions/otel/index.d.ts +4 -0
- package/dist/extras/extensions/otel/index.d.ts.map +1 -0
- package/dist/extras/extensions/otel/index.js +3 -0
- package/dist/extras/extensions/otel/index.js.map +1 -0
- package/dist/extras/extensions/otel/jsonl-span-exporter.d.ts +60 -0
- package/dist/extras/extensions/otel/jsonl-span-exporter.d.ts.map +1 -0
- package/dist/extras/extensions/otel/jsonl-span-exporter.js +134 -0
- package/dist/extras/extensions/otel/jsonl-span-exporter.js.map +1 -0
- package/dist/extras/extensions/scripts/extension.d.ts +180 -0
- package/dist/extras/extensions/scripts/extension.d.ts.map +1 -0
- package/dist/extras/extensions/scripts/extension.js +618 -0
- package/dist/extras/extensions/scripts/extension.js.map +1 -0
- package/dist/extras/extensions/scripts/extension.json +7 -0
- package/dist/extras/extensions/scripts/extension.test.d.ts +2 -0
- package/dist/extras/extensions/scripts/extension.test.d.ts.map +1 -0
- package/dist/extras/extensions/scripts/extension.test.js +552 -0
- package/dist/extras/extensions/scripts/extension.test.js.map +1 -0
- package/dist/extras/extensions/scripts/index.d.ts +3 -0
- package/dist/extras/extensions/scripts/index.d.ts.map +1 -0
- package/dist/extras/extensions/scripts/index.js +2 -0
- package/dist/extras/extensions/scripts/index.js.map +1 -0
- package/dist/extras/extensions/skills/extension.d.ts +105 -0
- package/dist/extras/extensions/skills/extension.d.ts.map +1 -0
- package/dist/extras/extensions/skills/extension.js +419 -0
- package/dist/extras/extensions/skills/extension.js.map +1 -0
- package/dist/extras/extensions/skills/extension.json +7 -0
- package/dist/extras/extensions/skills/extension.test.d.ts +2 -0
- package/dist/extras/extensions/skills/extension.test.d.ts.map +1 -0
- package/dist/extras/extensions/skills/extension.test.js +184 -0
- package/dist/extras/extensions/skills/extension.test.js.map +1 -0
- package/dist/extras/extensions/skills/index.d.ts +4 -0
- package/dist/extras/extensions/skills/index.d.ts.map +1 -0
- package/dist/extras/extensions/skills/index.js +3 -0
- package/dist/extras/extensions/skills/index.js.map +1 -0
- package/dist/extras/extensions/streaming/extension.d.ts +15 -0
- package/dist/extras/extensions/streaming/extension.d.ts.map +1 -0
- package/dist/extras/extensions/streaming/extension.js +41 -0
- package/dist/extras/extensions/streaming/extension.js.map +1 -0
- package/dist/extras/extensions/streaming/extension.json +6 -0
- package/dist/extras/extensions/streaming/index.d.ts +2 -0
- package/dist/extras/extensions/streaming/index.d.ts.map +1 -0
- package/dist/extras/extensions/streaming/index.js +2 -0
- package/dist/extras/extensions/streaming/index.js.map +1 -0
- package/dist/extras/extensions/structured-output/extension.d.ts +11 -0
- package/dist/extras/extensions/structured-output/extension.d.ts.map +1 -0
- package/dist/extras/extensions/structured-output/extension.js +102 -0
- package/dist/extras/extensions/structured-output/extension.js.map +1 -0
- package/dist/extras/extensions/structured-output/extension.json +7 -0
- package/dist/extras/extensions/structured-output/index.d.ts +3 -0
- package/dist/extras/extensions/structured-output/index.d.ts.map +1 -0
- package/dist/extras/extensions/structured-output/index.js +2 -0
- package/dist/extras/extensions/structured-output/index.js.map +1 -0
- package/dist/extras/extensions/timestamp/extension.d.ts +11 -0
- package/dist/extras/extensions/timestamp/extension.d.ts.map +1 -0
- package/dist/extras/extensions/timestamp/extension.js +21 -0
- package/dist/extras/extensions/timestamp/extension.js.map +1 -0
- package/dist/extras/extensions/timestamp/extension.json +6 -0
- package/dist/extras/extensions/timestamp/index.d.ts +2 -0
- package/dist/extras/extensions/timestamp/index.d.ts.map +1 -0
- package/dist/extras/extensions/timestamp/index.js +2 -0
- package/dist/extras/extensions/timestamp/index.js.map +1 -0
- package/dist/extras/extensions/token-stats/extension.d.ts +50 -0
- package/dist/extras/extensions/token-stats/extension.d.ts.map +1 -0
- package/dist/extras/extensions/token-stats/extension.js +99 -0
- package/dist/extras/extensions/token-stats/extension.js.map +1 -0
- package/dist/extras/extensions/token-stats/extension.json +7 -0
- package/dist/extras/extensions/token-stats/extension.test.d.ts +2 -0
- package/dist/extras/extensions/token-stats/extension.test.d.ts.map +1 -0
- package/dist/extras/extensions/token-stats/extension.test.js +197 -0
- package/dist/extras/extensions/token-stats/extension.test.js.map +1 -0
- package/dist/extras/extensions/token-stats/index.d.ts +3 -0
- package/dist/extras/extensions/token-stats/index.d.ts.map +1 -0
- package/dist/extras/extensions/token-stats/index.js +2 -0
- package/dist/extras/extensions/token-stats/index.js.map +1 -0
- package/dist/extras/extensions/tool-buffer/extension.d.ts +89 -0
- package/dist/extras/extensions/tool-buffer/extension.d.ts.map +1 -0
- package/dist/extras/extensions/tool-buffer/extension.js +182 -0
- package/dist/extras/extensions/tool-buffer/extension.js.map +1 -0
- package/dist/extras/extensions/tool-buffer/extension.json +7 -0
- package/dist/extras/extensions/tool-buffer/extension.test.d.ts +2 -0
- package/dist/extras/extensions/tool-buffer/extension.test.d.ts.map +1 -0
- package/dist/extras/extensions/tool-buffer/extension.test.js +549 -0
- package/dist/extras/extensions/tool-buffer/extension.test.js.map +1 -0
- package/dist/extras/extensions/tool-buffer/index.d.ts +3 -0
- package/dist/extras/extensions/tool-buffer/index.d.ts.map +1 -0
- package/dist/extras/extensions/tool-buffer/index.js +2 -0
- package/dist/extras/extensions/tool-buffer/index.js.map +1 -0
- package/dist/extras/extensions/weather-tool/extension.d.ts +22 -0
- package/dist/extras/extensions/weather-tool/extension.d.ts.map +1 -0
- package/dist/extras/extensions/weather-tool/extension.js +33 -0
- package/dist/extras/extensions/weather-tool/extension.js.map +1 -0
- package/dist/extras/extensions/weather-tool/extension.json +7 -0
- package/dist/extras/extensions/weather-tool/index.d.ts +3 -0
- package/dist/extras/extensions/weather-tool/index.d.ts.map +1 -0
- package/dist/extras/extensions/weather-tool/index.js +2 -0
- package/dist/extras/extensions/weather-tool/index.js.map +1 -0
- package/dist/extras/models/ai-sdk-resolver.d.ts +15 -0
- package/dist/extras/models/ai-sdk-resolver.d.ts.map +1 -0
- package/dist/extras/models/ai-sdk-resolver.js +57 -0
- package/dist/extras/models/ai-sdk-resolver.js.map +1 -0
- package/dist/extras/models/index.d.ts +5 -0
- package/dist/extras/models/index.d.ts.map +1 -0
- package/dist/extras/models/index.js +3 -0
- package/dist/extras/models/index.js.map +1 -0
- package/dist/extras/models/routing-model.d.ts +18 -0
- package/dist/extras/models/routing-model.d.ts.map +1 -0
- package/dist/extras/models/routing-model.js +24 -0
- package/dist/extras/models/routing-model.js.map +1 -0
- package/dist/extras/openai-provider/index.d.ts +3 -0
- package/dist/extras/openai-provider/index.d.ts.map +1 -0
- package/dist/extras/openai-provider/index.js +2 -0
- package/dist/extras/openai-provider/index.js.map +1 -0
- package/dist/extras/openai-provider/server.d.ts +34 -0
- package/dist/extras/openai-provider/server.d.ts.map +1 -0
- package/dist/extras/openai-provider/server.js +335 -0
- package/dist/extras/openai-provider/server.js.map +1 -0
- package/dist/handle.d.ts +56 -0
- package/dist/handle.d.ts.map +1 -0
- package/dist/handle.js +2 -0
- package/dist/handle.js.map +1 -0
- package/dist/hooks.d.ts +98 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +53 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/model.d.ts +75 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +2 -0
- package/dist/model.js.map +1 -0
- package/dist/tool.d.ts +78 -0
- package/dist/tool.d.ts.map +1 -0
- package/dist/tool.js +78 -0
- package/dist/tool.js.map +1 -0
- package/dist/types.d.ts +83 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +21 -0
- package/dist/types.js.map +1 -0
- package/package.json +178 -0
package/dist/handle.d.ts
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { AgentResponse } from './context.js';
|
|
2
|
+
/**
|
|
3
|
+
* Controller for a running agent turn.
|
|
4
|
+
*
|
|
5
|
+
* Returned by {@link Agent.run}. The handle is **thenable** — you can
|
|
6
|
+
* `await` it directly to get the final {@link AgentResponse} — but it also
|
|
7
|
+
* exposes discrete controls for steering and halting the turn:
|
|
8
|
+
*
|
|
9
|
+
* ```typescript
|
|
10
|
+
* const handle = agent.run({ message: 'Research this' })
|
|
11
|
+
*
|
|
12
|
+
* // Steer mid-turn (injects a user message before the next LLM iteration)
|
|
13
|
+
* handle.steer('Focus on the financial aspects')
|
|
14
|
+
*
|
|
15
|
+
* // Halt mid-turn (cancels in-flight model calls, stops the loop)
|
|
16
|
+
* handle.halt('user cancelled')
|
|
17
|
+
*
|
|
18
|
+
* // Or just await the result
|
|
19
|
+
* const result = await handle
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* Each call to `agent.run()` returns its own independent handle. This means
|
|
23
|
+
* multiple turns can run concurrently without clobbering each other's
|
|
24
|
+
* steering/halting state.
|
|
25
|
+
*/
|
|
26
|
+
export interface RunHandle extends PromiseLike<AgentResponse> {
|
|
27
|
+
/** The AbortSignal for this turn. Passed to model calls and tools. */
|
|
28
|
+
readonly signal: AbortSignal;
|
|
29
|
+
/** Whether the turn is still running. */
|
|
30
|
+
readonly isRunning: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Inject a steering message into the turn.
|
|
33
|
+
*
|
|
34
|
+
* The message is added as a `user` message before the next LLM iteration,
|
|
35
|
+
* allowing the caller to redirect the agent mid-turn. No-op if the turn
|
|
36
|
+
* has already completed.
|
|
37
|
+
*/
|
|
38
|
+
steer(message: string): void;
|
|
39
|
+
/**
|
|
40
|
+
* Halt the turn.
|
|
41
|
+
*
|
|
42
|
+
* Aborts any in-flight model call and stops the turn loop. The turn
|
|
43
|
+
* resolves with `finishReason: 'halted'`. No-op if the turn has already
|
|
44
|
+
* completed.
|
|
45
|
+
*
|
|
46
|
+
* **Propagation**: Halting cancels in-flight `fetch` calls to the model
|
|
47
|
+
* and races against running tool executions. Tools that receive the
|
|
48
|
+
* AbortSignal via {@link ToolContext.signal} should check it cooperatively
|
|
49
|
+
* to clean up resources. A tool that ignores the signal may continue
|
|
50
|
+
* running in the background, but the harness will not wait for it.
|
|
51
|
+
*/
|
|
52
|
+
halt(reason?: string): void;
|
|
53
|
+
/** The promise that resolves with the final response. */
|
|
54
|
+
readonly done: Promise<AgentResponse>;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=handle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handle.d.ts","sourceRoot":"","sources":["../src/handle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,WAAW,SAAU,SAAQ,WAAW,CAAC,aAAa,CAAC;IAC3D,sEAAsE;IACtE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAE7B,yCAAyC;IACzC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAE5B;;;;;;OAMG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAE7B;;;;;;;;;;;;OAYG;IACH,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5B,yDAAyD;IACzD,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;CACvC"}
|
package/dist/handle.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handle.js","sourceRoot":"","sources":["../src/handle.ts"],"names":[],"mappings":""}
|
package/dist/hooks.d.ts
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import type { TurnContext } from './context.js';
|
|
2
|
+
import type { ModelRequest, ModelResponse } from './model.js';
|
|
3
|
+
import type { ToolCall, ToolResult } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Lifecycle stages where hooks can participate.
|
|
6
|
+
*
|
|
7
|
+
* The exact set may evolve; these map to the turn execution model:
|
|
8
|
+
*
|
|
9
|
+
* ```
|
|
10
|
+
* beforeTurn → beforeContext → [beforeLLM → afterLLM → (beforeTool → afterTool)*]* → beforeResponse → afterTurn
|
|
11
|
+
*
|
|
12
|
+
* onError fires when any error is thrown during the turn (model error, hook
|
|
13
|
+
* error, etc.). An onError hook can recover by returning
|
|
14
|
+
* `{ skip: true, value: AgentResponse }`.
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export type HookName = 'beforeTurn' | 'beforeContext' | 'beforeLLM' | 'afterLLM' | 'beforeTool' | 'afterTool' | 'beforeResponse' | 'afterTurn' | 'onError';
|
|
18
|
+
/**
|
|
19
|
+
* Data passed to a hook handler.
|
|
20
|
+
*
|
|
21
|
+
* `turn` is always present. Other fields are populated depending on the
|
|
22
|
+
* stage so extensions can inspect what they need.
|
|
23
|
+
*/
|
|
24
|
+
export interface HookContext {
|
|
25
|
+
/** The mutable turn state. */
|
|
26
|
+
turn: TurnContext;
|
|
27
|
+
/** Populated on beforeLLM/afterLLM. */
|
|
28
|
+
modelRequest?: ModelRequest;
|
|
29
|
+
/** Populated on afterLLM. */
|
|
30
|
+
modelResponse?: ModelResponse;
|
|
31
|
+
/** Populated on beforeTool/afterTool. */
|
|
32
|
+
toolCall?: ToolCall;
|
|
33
|
+
/** Populated on afterTool (and beforeTool if a prior hook set it). */
|
|
34
|
+
toolResult?: ToolResult;
|
|
35
|
+
/** Populated on onError — the error that was thrown. */
|
|
36
|
+
error?: unknown;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* What a hook can return.
|
|
40
|
+
*
|
|
41
|
+
* - `skip: true` — short-circuit remaining hooks **and** the default
|
|
42
|
+
* action for this stage. The `value` (if provided) is used as the
|
|
43
|
+
* stage result where applicable.
|
|
44
|
+
* - `value` — stage-specific override (e.g. a {@link ModelResponse} for
|
|
45
|
+
* beforeLLM, a {@link ToolResult} for beforeTool).
|
|
46
|
+
*/
|
|
47
|
+
export interface HookResult {
|
|
48
|
+
skip?: boolean;
|
|
49
|
+
value?: unknown;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* A hook handler. May mutate the context and/or return a {@link HookResult}.
|
|
53
|
+
*/
|
|
54
|
+
export type HookHandler = (ctx: HookContext) => Promise<HookResult | void>;
|
|
55
|
+
/**
|
|
56
|
+
* An entry in the hook registry.
|
|
57
|
+
*/
|
|
58
|
+
export interface HookEntry {
|
|
59
|
+
/** Name of the extension that registered this hook (for error reporting). */
|
|
60
|
+
extensionName: string;
|
|
61
|
+
handler: HookHandler;
|
|
62
|
+
/**
|
|
63
|
+
* Priority of the extension that registered this hook. Higher = runs
|
|
64
|
+
* first. Ties are broken by registration order (stable sort).
|
|
65
|
+
* Default: 0.
|
|
66
|
+
*/
|
|
67
|
+
priority: number;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Ordered registry of hooks per lifecycle stage.
|
|
71
|
+
*
|
|
72
|
+
* Hooks execute in priority order within each stage (higher priority
|
|
73
|
+
* first), with registration order as the tiebreaker (stable sort).
|
|
74
|
+
* A hook returning `{ skip: true }` short-circuits remaining hooks
|
|
75
|
+
* in that stage.
|
|
76
|
+
*/
|
|
77
|
+
export declare class HookRegistry {
|
|
78
|
+
private readonly hooks;
|
|
79
|
+
/**
|
|
80
|
+
* Register a hook at a stage.
|
|
81
|
+
*
|
|
82
|
+
* @param priority Higher = runs first. Ties keep registration order.
|
|
83
|
+
* Default: 0.
|
|
84
|
+
*/
|
|
85
|
+
register(stage: HookName, extensionName: string, handler: HookHandler, priority?: number): void;
|
|
86
|
+
/**
|
|
87
|
+
* Get all hooks for a stage, sorted by priority (descending) then
|
|
88
|
+
* registration order (stable). This sort is computed on each call so
|
|
89
|
+
* that hooks registered after an `unregister()` stay correctly
|
|
90
|
+
* ordered.
|
|
91
|
+
*/
|
|
92
|
+
entries(stage: HookName): HookEntry[];
|
|
93
|
+
/** Whether any hooks are registered at a stage. */
|
|
94
|
+
has(stage: HookName): boolean;
|
|
95
|
+
/** Remove all hooks registered by an extension (across all stages). */
|
|
96
|
+
unregister(extensionName: string): void;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEvD;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,QAAQ,GAChB,YAAY,GACZ,eAAe,GACf,WAAW,GACX,UAAU,GACV,YAAY,GACZ,WAAW,GACX,gBAAgB,GAChB,WAAW,GACX,SAAS,CAAC;AAEd;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,8BAA8B;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,uCAAuC;IACvC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,6BAA6B;IAC7B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,yCAAyC;IACzC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,sEAAsE;IACtE,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,wDAAwD;IACxD,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;AAE3E;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,6EAA6E;IAC7E,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,WAAW,CAAC;IACrB;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoC;IAE1D;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,SAAI,GAAG,IAAI,CAIzF;IAED;;;;;OAKG;IACH,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,EAAE,CAMpC;IAED,mDAAmD;IACnD,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAE5B;IAED,uEAAuE;IACvE,UAAU,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAStC;CACF"}
|
package/dist/hooks.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ordered registry of hooks per lifecycle stage.
|
|
3
|
+
*
|
|
4
|
+
* Hooks execute in priority order within each stage (higher priority
|
|
5
|
+
* first), with registration order as the tiebreaker (stable sort).
|
|
6
|
+
* A hook returning `{ skip: true }` short-circuits remaining hooks
|
|
7
|
+
* in that stage.
|
|
8
|
+
*/
|
|
9
|
+
export class HookRegistry {
|
|
10
|
+
hooks = new Map();
|
|
11
|
+
/**
|
|
12
|
+
* Register a hook at a stage.
|
|
13
|
+
*
|
|
14
|
+
* @param priority Higher = runs first. Ties keep registration order.
|
|
15
|
+
* Default: 0.
|
|
16
|
+
*/
|
|
17
|
+
register(stage, extensionName, handler, priority = 0) {
|
|
18
|
+
const entries = this.hooks.get(stage) ?? [];
|
|
19
|
+
entries.push({ extensionName, handler, priority });
|
|
20
|
+
this.hooks.set(stage, entries);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Get all hooks for a stage, sorted by priority (descending) then
|
|
24
|
+
* registration order (stable). This sort is computed on each call so
|
|
25
|
+
* that hooks registered after an `unregister()` stay correctly
|
|
26
|
+
* ordered.
|
|
27
|
+
*/
|
|
28
|
+
entries(stage) {
|
|
29
|
+
const entries = this.hooks.get(stage);
|
|
30
|
+
if (!entries || entries.length <= 1)
|
|
31
|
+
return entries ?? [];
|
|
32
|
+
// Stable sort by priority descending. Array.prototype.sort is
|
|
33
|
+
// stable in V8 (Node 12+) and all modern engines.
|
|
34
|
+
return [...entries].sort((a, b) => b.priority - a.priority);
|
|
35
|
+
}
|
|
36
|
+
/** Whether any hooks are registered at a stage. */
|
|
37
|
+
has(stage) {
|
|
38
|
+
return (this.hooks.get(stage)?.length ?? 0) > 0;
|
|
39
|
+
}
|
|
40
|
+
/** Remove all hooks registered by an extension (across all stages). */
|
|
41
|
+
unregister(extensionName) {
|
|
42
|
+
for (const [stage, entries] of this.hooks) {
|
|
43
|
+
const filtered = entries.filter((e) => e.extensionName !== extensionName);
|
|
44
|
+
if (filtered.length === 0) {
|
|
45
|
+
this.hooks.delete(stage);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
this.hooks.set(stage, filtered);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAmFA;;;;;;;GAOG;AACH,MAAM,OAAO,YAAY;IACN,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC;IAE1D;;;;;OAKG;IACH,QAAQ,CAAC,KAAe,EAAE,aAAqB,EAAE,OAAoB,EAAE,QAAQ,GAAG,CAAC;QACjF,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC;IAED;;;;;OAKG;IACH,OAAO,CAAC,KAAe;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,OAAO,IAAI,EAAE,CAAC;QAC1D,8DAA8D;QAC9D,kDAAkD;QAClD,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAED,mDAAmD;IACnD,GAAG,CAAC,KAAe;QACjB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;IAED,uEAAuE;IACvE,UAAU,CAAC,aAAqB;QAC9B,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,aAAa,CAAC,CAAC;YAC1E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type { Role, Message, MessageContent, TextContentPart, FileContentPart, FileContentData, ToolCall, ToolResult, ToolDefinition, } from './types.js';
|
|
2
|
+
export { messageContentToText, hasFileContent } from './types.js';
|
|
3
|
+
export { LibraError, ModelError, ToolError, HookError, HaltedError, MaxIterationsError, } from './errors.js';
|
|
4
|
+
export type { Model, ModelRequest, ModelResponse, ModelDelta, FinishReason } from './model.js';
|
|
5
|
+
export { AISdkModel } from './ai-sdk-model.js';
|
|
6
|
+
export type { Tool, ToolContext } from './tool.js';
|
|
7
|
+
export { toToolDefinition, createAgentTool } from './tool.js';
|
|
8
|
+
export type { AgentToolOptions } from './tool.js';
|
|
9
|
+
export type { AgentRequest, AgentResponse, TurnContext, TurnFinishReason } from './context.js';
|
|
10
|
+
export type { HookName, HookContext, HookResult, HookHandler, HookEntry } from './hooks.js';
|
|
11
|
+
export { HookRegistry } from './hooks.js';
|
|
12
|
+
export type { Extension } from './extension.js';
|
|
13
|
+
export { Agent } from './agent.js';
|
|
14
|
+
export type { AgentConfig, ErrorPolicy, ErrorPolicyContext } from './agent.js';
|
|
15
|
+
export type { RunHandle } from './handle.js';
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,IAAI,EACJ,OAAO,EACP,cAAc,EACd,eAAe,EACf,eAAe,EACf,eAAe,EACf,QAAQ,EACR,UAAU,EACV,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGlE,OAAO,EACL,UAAU,EACV,UAAU,EACV,SAAS,EACT,SAAS,EACT,WAAW,EACX,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAGrB,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/F,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG/C,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC9D,YAAY,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAGlD,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAG/F,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5F,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG1C,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAG/E,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { messageContentToText, hasFileContent } from './types.js';
|
|
2
|
+
// Errors
|
|
3
|
+
export { LibraError, ModelError, ToolError, HookError, HaltedError, MaxIterationsError, } from './errors.js';
|
|
4
|
+
export { AISdkModel } from './ai-sdk-model.js';
|
|
5
|
+
export { toToolDefinition, createAgentTool } from './tool.js';
|
|
6
|
+
export { HookRegistry } from './hooks.js';
|
|
7
|
+
// Agent
|
|
8
|
+
export { Agent } from './agent.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAElE,SAAS;AACT,OAAO,EACL,UAAU,EACV,UAAU,EACV,SAAS,EACT,SAAS,EACT,WAAW,EACX,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAI/C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAQ9D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAK1C,QAAQ;AACR,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/model.d.ts
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { Message, ToolDefinition } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* A partial output delta from a streaming model call.
|
|
4
|
+
*
|
|
5
|
+
* Emitted via {@link ModelRequest.onDelta} during generation. The core
|
|
6
|
+
* does not interpret these — it simply forwards the callback to the
|
|
7
|
+
* model provider. Extensions can subscribe by setting `onDelta` on
|
|
8
|
+
* `ctx.modelRequest` in a `beforeLLM` hook.
|
|
9
|
+
*/
|
|
10
|
+
export interface ModelDelta {
|
|
11
|
+
/** What kind of delta this is. */
|
|
12
|
+
type: 'text' | 'reasoning' | 'tool-input';
|
|
13
|
+
/** The partial content for this delta. */
|
|
14
|
+
content: string;
|
|
15
|
+
/** Tool call ID (only for `tool-input` deltas). */
|
|
16
|
+
toolCallId?: string;
|
|
17
|
+
/** Tool name (only for `tool-input` deltas). */
|
|
18
|
+
toolName?: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Request to a model provider.
|
|
22
|
+
*
|
|
23
|
+
* The provider translates this into whatever wire format it speaks.
|
|
24
|
+
* If `onDelta` is provided, the provider should stream partial output
|
|
25
|
+
* via that callback in addition to returning the final {@link ModelResponse}.
|
|
26
|
+
*/
|
|
27
|
+
export interface ModelRequest {
|
|
28
|
+
messages: Message[];
|
|
29
|
+
tools?: ToolDefinition[];
|
|
30
|
+
/** System instructions prepended to the conversation. */
|
|
31
|
+
systemPrompt?: string;
|
|
32
|
+
temperature?: number;
|
|
33
|
+
maxTokens?: number;
|
|
34
|
+
signal?: AbortSignal;
|
|
35
|
+
/**
|
|
36
|
+
* Optional callback for streaming deltas.
|
|
37
|
+
*
|
|
38
|
+
* When set, the model provider should use its streaming API and
|
|
39
|
+
* invoke this callback for each text/reasoning/tool-input delta.
|
|
40
|
+
* The final assembled {@link ModelResponse} is still returned.
|
|
41
|
+
*/
|
|
42
|
+
onDelta?: (delta: ModelDelta) => void;
|
|
43
|
+
}
|
|
44
|
+
/** Why the model stopped generating. */
|
|
45
|
+
export type FinishReason = 'stop' | 'tool_calls' | 'length' | 'content_filter';
|
|
46
|
+
/** Response from a model provider. */
|
|
47
|
+
export interface ModelResponse {
|
|
48
|
+
/** The assistant message. May contain `toolCalls` when the model requests tools. */
|
|
49
|
+
message: Message;
|
|
50
|
+
finishReason: FinishReason;
|
|
51
|
+
usage?: {
|
|
52
|
+
promptTokens: number;
|
|
53
|
+
completionTokens: number;
|
|
54
|
+
/** Prompt tokens served from the provider's cache (cache read/hit). */
|
|
55
|
+
cachedPromptTokens?: number;
|
|
56
|
+
/** Prompt tokens written to the provider's cache for future reuse. */
|
|
57
|
+
cacheWriteTokens?: number;
|
|
58
|
+
/** Reasoning/thinking tokens if the provider reports them separately. */
|
|
59
|
+
reasoningTokens?: number;
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Abstract model interface.
|
|
64
|
+
*
|
|
65
|
+
* Implementations are responsible for translating libra's {@link Message}
|
|
66
|
+
* format to/from their wire format and for surfacing tool-call decisions
|
|
67
|
+
* via {@link Message.toolCalls}.
|
|
68
|
+
*
|
|
69
|
+
* The built-in {@link AISdkModel} wraps any Vercel AI SDK provider. You can
|
|
70
|
+
* also implement this interface directly for custom providers.
|
|
71
|
+
*/
|
|
72
|
+
export interface Model {
|
|
73
|
+
generate(request: ModelRequest): Promise<ModelResponse>;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE1D;;;;;;;GAOG;AACH,MAAM,WAAW,UAAU;IACzB,kCAAkC;IAClC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,YAAY,CAAC;IAC1C,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,yDAAyD;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;CACvC;AAED,wCAAwC;AACxC,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,YAAY,GAAG,QAAQ,GAAG,gBAAgB,CAAC;AAE/E,sCAAsC;AACtC,MAAM,WAAW,aAAa;IAC5B,oFAAoF;IACpF,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,YAAY,CAAC;IAC3B,KAAK,CAAC,EAAE;QACN,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,uEAAuE;QACvE,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,sEAAsE;QACtE,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,yEAAyE;QACzE,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CACzD"}
|
package/dist/model.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":""}
|
package/dist/tool.d.ts
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import type { ToolDefinition, ToolResult } from './types.js';
|
|
2
|
+
import type { Agent } from './agent.js';
|
|
3
|
+
/** Context passed to a tool's execute function. */
|
|
4
|
+
export interface ToolContext {
|
|
5
|
+
/** AbortSignal — aborted when the turn is halted. */
|
|
6
|
+
signal: AbortSignal;
|
|
7
|
+
/** Shared turn metadata bag. Extensions may read/write here. */
|
|
8
|
+
metadata: Record<string, unknown>;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* A tool the agent can call.
|
|
12
|
+
*
|
|
13
|
+
* `parameters` is a JSON Schema object (OpenAI function parameters format).
|
|
14
|
+
* `execute` receives parsed arguments and a context.
|
|
15
|
+
*
|
|
16
|
+
* Set `external: true` for tools whose calls should be returned to the caller
|
|
17
|
+
* instead of executed internally. When the model calls an external tool, the
|
|
18
|
+
* agent breaks its continuation loop and returns the tool call in the response
|
|
19
|
+
* with `finishReason: 'tool_calls'`. The caller is responsible for executing
|
|
20
|
+
* the tool and sending the result back in a subsequent request.
|
|
21
|
+
*/
|
|
22
|
+
export interface Tool {
|
|
23
|
+
name: string;
|
|
24
|
+
description?: string;
|
|
25
|
+
parameters: Record<string, unknown>;
|
|
26
|
+
execute(args: Record<string, unknown>, ctx: ToolContext): Promise<ToolResult>;
|
|
27
|
+
/**
|
|
28
|
+
* When true, the agent does not execute this tool. Instead, the tool call
|
|
29
|
+
* is returned to the caller via `AgentResponse.toolCalls` with
|
|
30
|
+
* `finishReason: 'tool_calls'`. The caller executes the tool and sends
|
|
31
|
+
* the result back as a `tool` message in a follow-up request.
|
|
32
|
+
*/
|
|
33
|
+
external?: boolean;
|
|
34
|
+
}
|
|
35
|
+
/** Convert a libra {@link Tool} to an OpenAI-compatible {@link ToolDefinition}. */
|
|
36
|
+
export declare function toToolDefinition(tool: Tool): ToolDefinition;
|
|
37
|
+
/**
|
|
38
|
+
* Options for {@link createAgentTool}.
|
|
39
|
+
*/
|
|
40
|
+
export interface AgentToolOptions {
|
|
41
|
+
/** Tool name as seen by the LLM. */
|
|
42
|
+
name: string;
|
|
43
|
+
/** Tool description as seen by the LLM. */
|
|
44
|
+
description: string;
|
|
45
|
+
/** JSON Schema for the tool's single `message` parameter. */
|
|
46
|
+
parameters?: Record<string, unknown>;
|
|
47
|
+
/** System prompt override for the inner agent's turns. */
|
|
48
|
+
systemPrompt?: string;
|
|
49
|
+
/** Max iterations for the inner agent's turns. */
|
|
50
|
+
maxIterations?: number;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Wrap an {@link Agent} as a {@link Tool} so an outer agent can delegate to it.
|
|
54
|
+
*
|
|
55
|
+
* The inner agent runs fully in-process. The outer agent's `AbortSignal` and
|
|
56
|
+
* `metadata` are forwarded to the inner agent's turn, so:
|
|
57
|
+
*
|
|
58
|
+
* - If the outer turn is **halted**, the inner agent is also halted.
|
|
59
|
+
* - The inner agent **shares metadata** with the outer turn (e.g. session ID,
|
|
60
|
+
* trace IDs, user context).
|
|
61
|
+
* - If the inner agent is **halted** (via its own hooks or signal), the tool
|
|
62
|
+
* returns an error result so the outer agent can react.
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```typescript
|
|
66
|
+
* const researchTool = createAgentTool(researchAgent, {
|
|
67
|
+
* name: 'research',
|
|
68
|
+
* description: 'Delegate a research question to a research agent',
|
|
69
|
+
* })
|
|
70
|
+
*
|
|
71
|
+
* const outerAgent = new Agent({
|
|
72
|
+
* model,
|
|
73
|
+
* tools: [researchTool],
|
|
74
|
+
* })
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
export declare function createAgentTool(agent: Agent, options: AgentToolOptions): Tool;
|
|
78
|
+
//# sourceMappingURL=tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,mDAAmD;AACnD,MAAM,WAAW,WAAW;IAC1B,qDAAqD;IACrD,MAAM,EAAE,WAAW,CAAC;IACpB,gEAAgE;IAChE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9E;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,cAAc,CAS3D;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI,CA0C7E"}
|
package/dist/tool.js
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/** Convert a libra {@link Tool} to an OpenAI-compatible {@link ToolDefinition}. */
|
|
2
|
+
export function toToolDefinition(tool) {
|
|
3
|
+
return {
|
|
4
|
+
type: 'function',
|
|
5
|
+
function: {
|
|
6
|
+
name: tool.name,
|
|
7
|
+
description: tool.description,
|
|
8
|
+
parameters: tool.parameters,
|
|
9
|
+
},
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Wrap an {@link Agent} as a {@link Tool} so an outer agent can delegate to it.
|
|
14
|
+
*
|
|
15
|
+
* The inner agent runs fully in-process. The outer agent's `AbortSignal` and
|
|
16
|
+
* `metadata` are forwarded to the inner agent's turn, so:
|
|
17
|
+
*
|
|
18
|
+
* - If the outer turn is **halted**, the inner agent is also halted.
|
|
19
|
+
* - The inner agent **shares metadata** with the outer turn (e.g. session ID,
|
|
20
|
+
* trace IDs, user context).
|
|
21
|
+
* - If the inner agent is **halted** (via its own hooks or signal), the tool
|
|
22
|
+
* returns an error result so the outer agent can react.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* const researchTool = createAgentTool(researchAgent, {
|
|
27
|
+
* name: 'research',
|
|
28
|
+
* description: 'Delegate a research question to a research agent',
|
|
29
|
+
* })
|
|
30
|
+
*
|
|
31
|
+
* const outerAgent = new Agent({
|
|
32
|
+
* model,
|
|
33
|
+
* tools: [researchTool],
|
|
34
|
+
* })
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export function createAgentTool(agent, options) {
|
|
38
|
+
return {
|
|
39
|
+
name: options.name,
|
|
40
|
+
description: options.description,
|
|
41
|
+
parameters: options.parameters ?? {
|
|
42
|
+
type: 'object',
|
|
43
|
+
properties: {
|
|
44
|
+
message: {
|
|
45
|
+
type: 'string',
|
|
46
|
+
description: 'The message to send to the agent.',
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
required: ['message'],
|
|
50
|
+
},
|
|
51
|
+
async execute(args, ctx) {
|
|
52
|
+
const message = args.message != null
|
|
53
|
+
? String(args.message)
|
|
54
|
+
: args.query != null
|
|
55
|
+
? String(args.query)
|
|
56
|
+
: JSON.stringify(args);
|
|
57
|
+
const result = await agent.run({
|
|
58
|
+
message,
|
|
59
|
+
signal: ctx.signal,
|
|
60
|
+
metadata: ctx.metadata,
|
|
61
|
+
...(options.systemPrompt && { systemPrompt: options.systemPrompt }),
|
|
62
|
+
...(options.maxIterations !== undefined && { maxIterations: options.maxIterations }),
|
|
63
|
+
});
|
|
64
|
+
if (result.finishReason === 'halted') {
|
|
65
|
+
return {
|
|
66
|
+
toolCallId: '',
|
|
67
|
+
content: 'Subagent was halted.',
|
|
68
|
+
isError: true,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
toolCallId: '',
|
|
73
|
+
content: result.message,
|
|
74
|
+
};
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=tool.js.map
|
package/dist/tool.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"AAqCA,mFAAmF;AACnF,MAAM,UAAU,gBAAgB,CAAC,IAAU;IACzC,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE;YACR,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B;KACF,CAAC;AACJ,CAAC;AAkBD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,eAAe,CAAC,KAAY,EAAE,OAAyB;IACrE,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI;YAChC,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,mCAAmC;iBACjD;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACtB;QACD,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG;YACrB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI;gBAClC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;gBACtB,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI;oBAClB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;oBACpB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC;gBAC7B,OAAO;gBACP,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,GAAG,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;gBACnE,GAAG,CAAC,OAAO,CAAC,aAAa,KAAK,SAAS,IAAI,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC;aACrF,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;gBACrC,OAAO;oBACL,UAAU,EAAE,EAAE;oBACd,OAAO,EAAE,sBAAsB;oBAC/B,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,UAAU,EAAE,EAAE;gBACd,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core message and content types.
|
|
3
|
+
*
|
|
4
|
+
* These are libra's own types. The model provider translates to/from
|
|
5
|
+
* the wire format of whatever API it targets (OpenAI-compatible, etc.).
|
|
6
|
+
*/
|
|
7
|
+
/** A single tool call requested by the model. */
|
|
8
|
+
export interface ToolCall {
|
|
9
|
+
/** Unique id assigned by the model, used to correlate tool results. */
|
|
10
|
+
id: string;
|
|
11
|
+
/** The tool/function name to invoke. */
|
|
12
|
+
name: string;
|
|
13
|
+
/** JSON-encoded arguments string (matches OpenAI tool_call.function.arguments). */
|
|
14
|
+
arguments: string;
|
|
15
|
+
}
|
|
16
|
+
/** The result of executing a tool call. */
|
|
17
|
+
export interface ToolResult {
|
|
18
|
+
/** Correlates with {@link ToolCall.id}. */
|
|
19
|
+
toolCallId: string;
|
|
20
|
+
/** Human/machine readable result content. */
|
|
21
|
+
content: string;
|
|
22
|
+
/** When true, the result represents a failure the model should see as an error. */
|
|
23
|
+
isError?: boolean;
|
|
24
|
+
}
|
|
25
|
+
/** Conversation participant role. */
|
|
26
|
+
export type Role = 'system' | 'user' | 'assistant' | 'tool';
|
|
27
|
+
/** Text content within a multimodal message. */
|
|
28
|
+
export interface TextContentPart {
|
|
29
|
+
type: 'text';
|
|
30
|
+
text: string;
|
|
31
|
+
}
|
|
32
|
+
/** Provider-independent file data. */
|
|
33
|
+
export type FileContentData = {
|
|
34
|
+
type: 'data';
|
|
35
|
+
data: string | Uint8Array;
|
|
36
|
+
} | {
|
|
37
|
+
type: 'url';
|
|
38
|
+
url: string;
|
|
39
|
+
} | {
|
|
40
|
+
type: 'text';
|
|
41
|
+
text: string;
|
|
42
|
+
};
|
|
43
|
+
/** A file attachment, including images, documents, audio, and video. */
|
|
44
|
+
export interface FileContentPart {
|
|
45
|
+
type: 'file';
|
|
46
|
+
mediaType: string;
|
|
47
|
+
filename?: string;
|
|
48
|
+
data: FileContentData;
|
|
49
|
+
}
|
|
50
|
+
/** Message content. Strings remain supported as the text-only shorthand. */
|
|
51
|
+
export type MessageContent = string | Array<TextContentPart | FileContentPart>;
|
|
52
|
+
/** Convert message content to a text representation for logs and text-only extensions. */
|
|
53
|
+
export declare function messageContentToText(content: MessageContent): string;
|
|
54
|
+
/** Whether message content contains at least one file attachment. */
|
|
55
|
+
export declare function hasFileContent(content: MessageContent, mediaTypePrefix?: string): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* A single conversation message.
|
|
58
|
+
*
|
|
59
|
+
* - `assistant` messages may carry `toolCalls` when the model requests tools.
|
|
60
|
+
* - `tool` messages carry a single `toolCallId` linking back to the call
|
|
61
|
+
* and `content` holds the tool result.
|
|
62
|
+
*/
|
|
63
|
+
export interface Message {
|
|
64
|
+
role: Role;
|
|
65
|
+
/** Text or multimodal content. For `tool` messages this is the tool result. */
|
|
66
|
+
content: MessageContent;
|
|
67
|
+
/** Present on assistant messages that request tool execution. */
|
|
68
|
+
toolCalls?: ToolCall[];
|
|
69
|
+
/** Present on tool messages — links to the originating tool call id. */
|
|
70
|
+
toolCallId?: string;
|
|
71
|
+
/** Optional tool name for tool messages. */
|
|
72
|
+
name?: string;
|
|
73
|
+
}
|
|
74
|
+
/** JSON Schema describing a tool's parameters (OpenAI function format). */
|
|
75
|
+
export interface ToolDefinition {
|
|
76
|
+
type: 'function';
|
|
77
|
+
function: {
|
|
78
|
+
name: string;
|
|
79
|
+
description?: string;
|
|
80
|
+
parameters: Record<string, unknown>;
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core message and content types.
|
|
3
|
+
*
|
|
4
|
+
* These are libra's own types. The model provider translates to/from
|
|
5
|
+
* the wire format of whatever API it targets (OpenAI-compatible, etc.).
|
|
6
|
+
*/
|
|
7
|
+
/** Convert message content to a text representation for logs and text-only extensions. */
|
|
8
|
+
export function messageContentToText(content) {
|
|
9
|
+
if (typeof content === 'string')
|
|
10
|
+
return content;
|
|
11
|
+
return content.map((part) => {
|
|
12
|
+
if (part.type === 'text')
|
|
13
|
+
return part.text;
|
|
14
|
+
return part.filename ? `[File: ${part.filename} (${part.mediaType})]` : `[File: ${part.mediaType}]`;
|
|
15
|
+
}).join('\n');
|
|
16
|
+
}
|
|
17
|
+
/** Whether message content contains at least one file attachment. */
|
|
18
|
+
export function hasFileContent(content, mediaTypePrefix) {
|
|
19
|
+
return Array.isArray(content) && content.some((part) => part.type === 'file' && (!mediaTypePrefix || part.mediaType.startsWith(mediaTypePrefix)));
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +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"}
|