@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
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import { messageContentToText, } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Adapter that wraps a Vercel AI SDK `LanguageModelV4` as a libra `Model`.
|
|
4
|
+
*
|
|
5
|
+
* This lets you use any current AI SDK provider (`@ai-sdk/openai`,
|
|
6
|
+
* `@ai-sdk/google`, `@ai-sdk/anthropic`, etc.) with libra's hook system
|
|
7
|
+
* and tool-call loop. Provider-specific wire formats are handled by the
|
|
8
|
+
* AI SDK while libra retains ownership of tool execution and continuation.
|
|
9
|
+
*
|
|
10
|
+
* When `ModelRequest.onDelta` is set, the adapter uses `doStream` and
|
|
11
|
+
* emits text, reasoning, and tool-input deltas via the callback. The
|
|
12
|
+
* final assembled `ModelResponse` is still returned. When `onDelta` is
|
|
13
|
+
* not set, it uses `doGenerate` (no streaming overhead).
|
|
14
|
+
*/
|
|
15
|
+
export class AISdkModel {
|
|
16
|
+
model;
|
|
17
|
+
constructor(model) {
|
|
18
|
+
this.model = model;
|
|
19
|
+
}
|
|
20
|
+
async generate(request) {
|
|
21
|
+
if (request.onDelta)
|
|
22
|
+
return this.generateStream(request);
|
|
23
|
+
return this.generateBatch(request);
|
|
24
|
+
}
|
|
25
|
+
async generateBatch(request) {
|
|
26
|
+
const result = await this.model.doGenerate(this.toCallOptions(request));
|
|
27
|
+
return this.fromAISdkResult(result);
|
|
28
|
+
}
|
|
29
|
+
async generateStream(request) {
|
|
30
|
+
const onDelta = request.onDelta;
|
|
31
|
+
const { stream } = await this.model.doStream(this.toCallOptions(request));
|
|
32
|
+
const content = [];
|
|
33
|
+
const textById = new Map();
|
|
34
|
+
const textOrder = [];
|
|
35
|
+
const toolCalls = [];
|
|
36
|
+
let finishReason = 'stop';
|
|
37
|
+
let usage;
|
|
38
|
+
const toolInputBuffers = new Map();
|
|
39
|
+
const reader = stream.getReader();
|
|
40
|
+
try {
|
|
41
|
+
while (true) {
|
|
42
|
+
const { done, value: part } = await reader.read();
|
|
43
|
+
if (done)
|
|
44
|
+
break;
|
|
45
|
+
switch (part.type) {
|
|
46
|
+
case 'text-start':
|
|
47
|
+
if (!textById.has(part.id)) {
|
|
48
|
+
textById.set(part.id, '');
|
|
49
|
+
textOrder.push(part.id);
|
|
50
|
+
}
|
|
51
|
+
break;
|
|
52
|
+
case 'text-delta':
|
|
53
|
+
if (!textById.has(part.id))
|
|
54
|
+
textOrder.push(part.id);
|
|
55
|
+
textById.set(part.id, (textById.get(part.id) ?? '') + part.delta);
|
|
56
|
+
onDelta({ type: 'text', content: part.delta });
|
|
57
|
+
break;
|
|
58
|
+
case 'reasoning-delta':
|
|
59
|
+
onDelta({ type: 'reasoning', content: part.delta });
|
|
60
|
+
break;
|
|
61
|
+
case 'tool-input-start':
|
|
62
|
+
toolInputBuffers.set(part.id, {
|
|
63
|
+
name: part.toolName,
|
|
64
|
+
input: '',
|
|
65
|
+
providerExecuted: part.providerExecuted === true,
|
|
66
|
+
});
|
|
67
|
+
break;
|
|
68
|
+
case 'tool-input-delta': {
|
|
69
|
+
const buffer = toolInputBuffers.get(part.id);
|
|
70
|
+
if (buffer) {
|
|
71
|
+
buffer.input += part.delta;
|
|
72
|
+
if (!buffer.providerExecuted) {
|
|
73
|
+
onDelta({ type: 'tool-input', content: part.delta, toolCallId: part.id, toolName: buffer.name });
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
case 'tool-input-end': {
|
|
79
|
+
const buffer = toolInputBuffers.get(part.id);
|
|
80
|
+
if (buffer && !buffer.providerExecuted) {
|
|
81
|
+
toolCalls.push({ id: part.id, name: buffer.name, arguments: buffer.input || '{}' });
|
|
82
|
+
}
|
|
83
|
+
toolInputBuffers.delete(part.id);
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
case 'tool-call':
|
|
87
|
+
if (!part.providerExecuted && !toolCalls.some((toolCall) => toolCall.id === part.toolCallId)) {
|
|
88
|
+
toolCalls.push({ id: part.toolCallId, name: part.toolName, arguments: typeof part.input === 'string' ? part.input : JSON.stringify(part.input ?? {}) });
|
|
89
|
+
}
|
|
90
|
+
break;
|
|
91
|
+
case 'file':
|
|
92
|
+
content.push(fromAISdkFile(part));
|
|
93
|
+
break;
|
|
94
|
+
case 'finish':
|
|
95
|
+
finishReason = mapFinishReason(part.finishReason.unified);
|
|
96
|
+
usage = extractUsage(part.usage);
|
|
97
|
+
break;
|
|
98
|
+
case 'error':
|
|
99
|
+
throw part.error;
|
|
100
|
+
default:
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
finally {
|
|
106
|
+
reader.releaseLock();
|
|
107
|
+
}
|
|
108
|
+
const text = textOrder.map((id) => textById.get(id) ?? '').join('');
|
|
109
|
+
if (text)
|
|
110
|
+
content.unshift({ type: 'text', text });
|
|
111
|
+
return {
|
|
112
|
+
message: {
|
|
113
|
+
role: 'assistant',
|
|
114
|
+
content: content.length > 1 || content.some((part) => part.type === 'file') ? content : text,
|
|
115
|
+
...(toolCalls.length > 0 && { toolCalls }),
|
|
116
|
+
},
|
|
117
|
+
finishReason,
|
|
118
|
+
...(usage && { usage }),
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
toCallOptions(request) {
|
|
122
|
+
const prompt = this.toAISdkPrompt(request.messages);
|
|
123
|
+
if (request.systemPrompt)
|
|
124
|
+
prompt.unshift({ role: 'system', content: request.systemPrompt });
|
|
125
|
+
return {
|
|
126
|
+
prompt,
|
|
127
|
+
tools: request.tools?.map(toAISdkTool),
|
|
128
|
+
...(request.temperature !== undefined && { temperature: request.temperature }),
|
|
129
|
+
...(request.maxTokens !== undefined && { maxOutputTokens: request.maxTokens }),
|
|
130
|
+
...(request.signal && { abortSignal: request.signal }),
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
toAISdkPrompt(messages) {
|
|
134
|
+
return messages.map((message) => {
|
|
135
|
+
if (message.role === 'system') {
|
|
136
|
+
return { role: 'system', content: messageContentToText(message.content) };
|
|
137
|
+
}
|
|
138
|
+
if (message.role === 'user') {
|
|
139
|
+
return { role: 'user', content: toAISdkContent(message.content) };
|
|
140
|
+
}
|
|
141
|
+
if (message.role === 'assistant') {
|
|
142
|
+
const content = [
|
|
143
|
+
...toAISdkContent(message.content),
|
|
144
|
+
];
|
|
145
|
+
for (const toolCall of message.toolCalls ?? []) {
|
|
146
|
+
content.push({
|
|
147
|
+
type: 'tool-call',
|
|
148
|
+
toolCallId: toolCall.id,
|
|
149
|
+
toolName: toolCall.name,
|
|
150
|
+
input: toolCall.arguments ? JSON.parse(toolCall.arguments) : {},
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
return { role: 'assistant', content };
|
|
154
|
+
}
|
|
155
|
+
return {
|
|
156
|
+
role: 'tool',
|
|
157
|
+
content: [{
|
|
158
|
+
type: 'tool-result',
|
|
159
|
+
toolCallId: message.toolCallId ?? '',
|
|
160
|
+
toolName: message.name ?? '',
|
|
161
|
+
output: { type: 'text', value: messageContentToText(message.content) },
|
|
162
|
+
}],
|
|
163
|
+
};
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
fromAISdkResult(result) {
|
|
167
|
+
const messageContent = [];
|
|
168
|
+
const toolCalls = [];
|
|
169
|
+
for (const part of result.content) {
|
|
170
|
+
if (part.type === 'text') {
|
|
171
|
+
messageContent.push({ type: 'text', text: part.text });
|
|
172
|
+
}
|
|
173
|
+
else if (part.type === 'file') {
|
|
174
|
+
messageContent.push(fromAISdkFile(part));
|
|
175
|
+
}
|
|
176
|
+
else if (part.type === 'tool-call' && !part.providerExecuted) {
|
|
177
|
+
toolCalls.push({
|
|
178
|
+
id: part.toolCallId,
|
|
179
|
+
name: part.toolName,
|
|
180
|
+
arguments: typeof part.input === 'string' ? part.input : JSON.stringify(part.input ?? {}),
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
const text = messageContent
|
|
185
|
+
.filter((part) => part.type === 'text')
|
|
186
|
+
.map((part) => part.text)
|
|
187
|
+
.join('');
|
|
188
|
+
return {
|
|
189
|
+
message: {
|
|
190
|
+
role: 'assistant',
|
|
191
|
+
content: messageContent.some((part) => part.type === 'file') ? messageContent : text,
|
|
192
|
+
...(toolCalls.length > 0 && { toolCalls }),
|
|
193
|
+
},
|
|
194
|
+
finishReason: mapFinishReason(result.finishReason.unified),
|
|
195
|
+
usage: extractUsage(result.usage),
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
function toAISdkContent(content) {
|
|
200
|
+
if (typeof content === 'string')
|
|
201
|
+
return content ? [{ type: 'text', text: content }] : [];
|
|
202
|
+
return content.map((part) => {
|
|
203
|
+
if (part.type === 'text')
|
|
204
|
+
return part;
|
|
205
|
+
return {
|
|
206
|
+
type: 'file',
|
|
207
|
+
...(part.filename && { filename: part.filename }),
|
|
208
|
+
mediaType: part.mediaType,
|
|
209
|
+
data: toAISdkFileData(part.data),
|
|
210
|
+
};
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
function toAISdkFileData(data) {
|
|
214
|
+
if (data.type === 'url')
|
|
215
|
+
return { type: 'url', url: new URL(data.url) };
|
|
216
|
+
return data;
|
|
217
|
+
}
|
|
218
|
+
function fromAISdkFile(file) {
|
|
219
|
+
return {
|
|
220
|
+
type: 'file',
|
|
221
|
+
mediaType: file.mediaType,
|
|
222
|
+
data: file.data.type === 'url'
|
|
223
|
+
? { type: 'url', url: file.data.url.toString() }
|
|
224
|
+
: file.data,
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
function extractUsage(usage) {
|
|
228
|
+
const result = {
|
|
229
|
+
promptTokens: usage.inputTokens.total ?? 0,
|
|
230
|
+
completionTokens: usage.outputTokens.total ?? 0,
|
|
231
|
+
};
|
|
232
|
+
if (usage.inputTokens.cacheRead)
|
|
233
|
+
result.cachedPromptTokens = usage.inputTokens.cacheRead;
|
|
234
|
+
if (usage.inputTokens.cacheWrite)
|
|
235
|
+
result.cacheWriteTokens = usage.inputTokens.cacheWrite;
|
|
236
|
+
if (usage.outputTokens.reasoning)
|
|
237
|
+
result.reasoningTokens = usage.outputTokens.reasoning;
|
|
238
|
+
return result;
|
|
239
|
+
}
|
|
240
|
+
function toAISdkTool(definition) {
|
|
241
|
+
return {
|
|
242
|
+
type: 'function',
|
|
243
|
+
name: definition.function.name,
|
|
244
|
+
...(definition.function.description && { description: definition.function.description }),
|
|
245
|
+
inputSchema: definition.function.parameters,
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
function mapFinishReason(reason) {
|
|
249
|
+
switch (reason) {
|
|
250
|
+
case 'tool-calls':
|
|
251
|
+
return 'tool_calls';
|
|
252
|
+
case 'length':
|
|
253
|
+
return 'length';
|
|
254
|
+
case 'content-filter':
|
|
255
|
+
return 'content_filter';
|
|
256
|
+
default:
|
|
257
|
+
return 'stop';
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=ai-sdk-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-sdk-model.js","sourceRoot":"","sources":["../src/ai-sdk-model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { Message, MessageContent, ToolCall } from './types.js';
|
|
2
|
+
import type { Tool } from './tool.js';
|
|
3
|
+
/**
|
|
4
|
+
* The request that initiates an agent turn.
|
|
5
|
+
*/
|
|
6
|
+
export interface AgentRequest {
|
|
7
|
+
/** The user's text or multimodal message. */
|
|
8
|
+
message: MessageContent;
|
|
9
|
+
/** Override the agent's system prompt for this turn. */
|
|
10
|
+
systemPrompt?: string;
|
|
11
|
+
/** Additional tools for this turn (merged with agent-level tools). */
|
|
12
|
+
tools?: Tool[];
|
|
13
|
+
/** Extra metadata available to hooks/extensions throughout the turn. */
|
|
14
|
+
metadata?: Record<string, unknown>;
|
|
15
|
+
/** Abort the turn by aborting this signal. */
|
|
16
|
+
signal?: AbortSignal;
|
|
17
|
+
/** Max LLM iterations before the turn is stopped. Default: 25. */
|
|
18
|
+
maxIterations?: number;
|
|
19
|
+
}
|
|
20
|
+
/** Why a turn ended. */
|
|
21
|
+
export type TurnFinishReason = 'stop' | 'tool_calls' | 'halted' | 'max_iterations' | 'error';
|
|
22
|
+
/**
|
|
23
|
+
* The result of an agent turn.
|
|
24
|
+
*/
|
|
25
|
+
export interface AgentResponse {
|
|
26
|
+
role: 'assistant';
|
|
27
|
+
/** Final text response from the model (may be empty if halted). */
|
|
28
|
+
message: string;
|
|
29
|
+
/** Tool calls made during the turn (for observation/logging). */
|
|
30
|
+
toolCalls?: ToolCall[];
|
|
31
|
+
/**
|
|
32
|
+
* When `finishReason` is `'tool_calls'`, these are the external tool calls
|
|
33
|
+
* the caller must execute and send back as `tool` messages in a follow-up
|
|
34
|
+
* request. Internal tool calls (already executed) are in `toolCalls`.
|
|
35
|
+
*/
|
|
36
|
+
pendingToolCalls?: ToolCall[];
|
|
37
|
+
/** Why the turn ended. */
|
|
38
|
+
finishReason: TurnFinishReason;
|
|
39
|
+
/** Number of LLM iterations executed. */
|
|
40
|
+
iterations: number;
|
|
41
|
+
/** Shared metadata bag. */
|
|
42
|
+
metadata: Record<string, unknown>;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Mutable execution state for a single turn.
|
|
46
|
+
*
|
|
47
|
+
* Extensions receive this through hooks and may mutate it to influence
|
|
48
|
+
* the turn. This represents **execution state**, not the whole application.
|
|
49
|
+
* Do not use it as a service locator.
|
|
50
|
+
*/
|
|
51
|
+
export interface TurnContext {
|
|
52
|
+
request: AgentRequest;
|
|
53
|
+
/** The conversation messages for this turn (mutable). */
|
|
54
|
+
messages: Message[];
|
|
55
|
+
/** Tools available this turn (mutable). */
|
|
56
|
+
tools: Tool[];
|
|
57
|
+
/**
|
|
58
|
+
* The resolved system prompt for this turn (per-turn override ?? agent config).
|
|
59
|
+
* Available from beforeTurn onward — extensions can read it to audit
|
|
60
|
+
* what instructions the model will operate under without waiting for
|
|
61
|
+
* beforeLLM. May be undefined if no system prompt is configured.
|
|
62
|
+
*/
|
|
63
|
+
systemPrompt?: string;
|
|
64
|
+
/** The final response once the turn completes. */
|
|
65
|
+
response?: AgentResponse;
|
|
66
|
+
/** Shared metadata bag for extensions. */
|
|
67
|
+
metadata: Record<string, unknown>;
|
|
68
|
+
/** AbortSignal for this turn. */
|
|
69
|
+
signal: AbortSignal;
|
|
70
|
+
/** Inject a steering message into this turn before the next LLM iteration. */
|
|
71
|
+
steer(message: string): void;
|
|
72
|
+
/** Halt this turn. Resolves with finishReason 'halted'. */
|
|
73
|
+
halt(reason?: string): void;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,6CAA6C;IAC7C,OAAO,EAAE,cAAc,CAAC;IACxB,wDAAwD;IACxD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sEAAsE;IACtE,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IACf,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,8CAA8C;IAC9C,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,kEAAkE;IAClE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAwB;AACxB,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,YAAY,GACZ,QAAQ,GACR,gBAAgB,GAChB,OAAO,CAAC;AAEZ;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,WAAW,CAAC;IAClB,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC9B,0BAA0B;IAC1B,YAAY,EAAE,gBAAgB,CAAC;IAC/B,yCAAyC;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,YAAY,CAAC;IACtB,yDAAyD;IACzD,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,2CAA2C;IAC3C,KAAK,EAAE,IAAI,EAAE,CAAC;IACd;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,iCAAiC;IACjC,MAAM,EAAE,WAAW,CAAC;IACpB,8EAA8E;IAC9E,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,2DAA2D;IAC3D,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B"}
|
package/dist/context.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":""}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/** Base error class for all libra errors. */
|
|
2
|
+
export declare class LibraError extends Error {
|
|
3
|
+
constructor(message: string);
|
|
4
|
+
}
|
|
5
|
+
/** The model call failed. */
|
|
6
|
+
export declare class ModelError extends LibraError {
|
|
7
|
+
readonly status?: number | undefined;
|
|
8
|
+
readonly body?: unknown;
|
|
9
|
+
constructor(message: string, status?: number | undefined, body?: unknown);
|
|
10
|
+
}
|
|
11
|
+
/** A tool execution failed. */
|
|
12
|
+
export declare class ToolError extends LibraError {
|
|
13
|
+
readonly toolName: string;
|
|
14
|
+
constructor(message: string, toolName: string);
|
|
15
|
+
}
|
|
16
|
+
/** A hook threw and the failure policy aborted the turn. */
|
|
17
|
+
export declare class HookError extends LibraError {
|
|
18
|
+
readonly hookName: string;
|
|
19
|
+
readonly extensionName: string;
|
|
20
|
+
readonly cause?: unknown;
|
|
21
|
+
constructor(message: string, hookName: string, extensionName: string, cause?: unknown);
|
|
22
|
+
}
|
|
23
|
+
/** The turn was halted (via AbortSignal or agent.halt()). */
|
|
24
|
+
export declare class HaltedError extends LibraError {
|
|
25
|
+
readonly reason: string;
|
|
26
|
+
constructor(message: string, reason: string);
|
|
27
|
+
}
|
|
28
|
+
/** The turn exceeded the maximum number of LLM iterations. */
|
|
29
|
+
export declare class MaxIterationsError extends LibraError {
|
|
30
|
+
readonly iterations: number;
|
|
31
|
+
constructor(message: string, iterations: number);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qBAAa,UAAW,SAAQ,KAAK;IACnC,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAED,6BAA6B;AAC7B,qBAAa,UAAW,SAAQ,UAAU;aAGtB,MAAM,CAAC,EAAE,MAAM;aACf,IAAI,CAAC,EAAE,OAAO;IAHhC,YACE,OAAO,EAAE,MAAM,EACC,MAAM,CAAC,EAAE,MAAM,YAAA,EACf,IAAI,CAAC,EAAE,OAAO,EAI/B;CACF;AAED,+BAA+B;AAC/B,qBAAa,SAAU,SAAQ,UAAU;aAGrB,QAAQ,EAAE,MAAM;IAFlC,YACE,OAAO,EAAE,MAAM,EACC,QAAQ,EAAE,MAAM,EAIjC;CACF;AAED,4DAA4D;AAC5D,qBAAa,SAAU,SAAQ,UAAU;aAGrB,QAAQ,EAAE,MAAM;aAChB,aAAa,EAAE,MAAM;aACZ,KAAK,CAAC,EAAE,OAAO;IAJ1C,YACE,OAAO,EAAE,MAAM,EACC,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,OAAO,EAIzC;CACF;AAED,6DAA6D;AAC7D,qBAAa,WAAY,SAAQ,UAAU;aAGvB,MAAM,EAAE,MAAM;IAFhC,YACE,OAAO,EAAE,MAAM,EACC,MAAM,EAAE,MAAM,EAI/B;CACF;AAED,8DAA8D;AAC9D,qBAAa,kBAAmB,SAAQ,UAAU;aAG9B,UAAU,EAAE,MAAM;IAFpC,YACE,OAAO,EAAE,MAAM,EACC,UAAU,EAAE,MAAM,EAInC;CACF"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/** Base error class for all libra errors. */
|
|
2
|
+
export class LibraError extends Error {
|
|
3
|
+
constructor(message) {
|
|
4
|
+
super(message);
|
|
5
|
+
this.name = 'LibraError';
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
/** The model call failed. */
|
|
9
|
+
export class ModelError extends LibraError {
|
|
10
|
+
status;
|
|
11
|
+
body;
|
|
12
|
+
constructor(message, status, body) {
|
|
13
|
+
super(message);
|
|
14
|
+
this.status = status;
|
|
15
|
+
this.body = body;
|
|
16
|
+
this.name = 'ModelError';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/** A tool execution failed. */
|
|
20
|
+
export class ToolError extends LibraError {
|
|
21
|
+
toolName;
|
|
22
|
+
constructor(message, toolName) {
|
|
23
|
+
super(message);
|
|
24
|
+
this.toolName = toolName;
|
|
25
|
+
this.name = 'ToolError';
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/** A hook threw and the failure policy aborted the turn. */
|
|
29
|
+
export class HookError extends LibraError {
|
|
30
|
+
hookName;
|
|
31
|
+
extensionName;
|
|
32
|
+
cause;
|
|
33
|
+
constructor(message, hookName, extensionName, cause) {
|
|
34
|
+
super(message);
|
|
35
|
+
this.hookName = hookName;
|
|
36
|
+
this.extensionName = extensionName;
|
|
37
|
+
this.cause = cause;
|
|
38
|
+
this.name = 'HookError';
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/** The turn was halted (via AbortSignal or agent.halt()). */
|
|
42
|
+
export class HaltedError extends LibraError {
|
|
43
|
+
reason;
|
|
44
|
+
constructor(message, reason) {
|
|
45
|
+
super(message);
|
|
46
|
+
this.reason = reason;
|
|
47
|
+
this.name = 'HaltedError';
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/** The turn exceeded the maximum number of LLM iterations. */
|
|
51
|
+
export class MaxIterationsError extends LibraError {
|
|
52
|
+
iterations;
|
|
53
|
+
constructor(message, iterations) {
|
|
54
|
+
super(message);
|
|
55
|
+
this.iterations = iterations;
|
|
56
|
+
this.name = 'MaxIterationsError';
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAED,6BAA6B;AAC7B,MAAM,OAAO,UAAW,SAAQ,UAAU;IAGtB,MAAM;IACN,IAAI;IAHtB,YACE,OAAe,EACC,MAAe,EACf,IAAc;QAE9B,KAAK,CAAC,OAAO,CAAC,CAAC;sBAHC,MAAM;oBACN,IAAI;QAGpB,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAED,+BAA+B;AAC/B,MAAM,OAAO,SAAU,SAAQ,UAAU;IAGrB,QAAQ;IAF1B,YACE,OAAe,EACC,QAAgB;QAEhC,KAAK,CAAC,OAAO,CAAC,CAAC;wBAFC,QAAQ;QAGxB,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF;AAED,4DAA4D;AAC5D,MAAM,OAAO,SAAU,SAAQ,UAAU;IAGrB,QAAQ;IACR,aAAa;IACJ,KAAK;IAJhC,YACE,OAAe,EACC,QAAgB,EAChB,aAAqB,EACZ,KAAe;QAExC,KAAK,CAAC,OAAO,CAAC,CAAC;wBAJC,QAAQ;6BACR,aAAa;qBACJ,KAAK;QAG9B,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF;AAED,6DAA6D;AAC7D,MAAM,OAAO,WAAY,SAAQ,UAAU;IAGvB,MAAM;IAFxB,YACE,OAAe,EACC,MAAc;QAE9B,KAAK,CAAC,OAAO,CAAC,CAAC;sBAFC,MAAM;QAGtB,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AAED,8DAA8D;AAC9D,MAAM,OAAO,kBAAmB,SAAQ,UAAU;IAG9B,UAAU;IAF5B,YACE,OAAe,EACC,UAAkB;QAElC,KAAK,CAAC,OAAO,CAAC,CAAC;0BAFC,UAAU;QAG1B,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { Agent } from './agent.js';
|
|
2
|
+
/**
|
|
3
|
+
* An extension adds behavior to an agent without requiring the core
|
|
4
|
+
* to understand that behavior.
|
|
5
|
+
*
|
|
6
|
+
* `install` is called when the extension is added via `agent.use()`.
|
|
7
|
+
* The extension typically registers hooks on the agent inside `install`.
|
|
8
|
+
*
|
|
9
|
+
* Example:
|
|
10
|
+
* ```typescript
|
|
11
|
+
* const loggingExtension: Extension = {
|
|
12
|
+
* name: 'logging',
|
|
13
|
+
* install(agent) {
|
|
14
|
+
* agent.hook('beforeLLM', 'logging', async (ctx) => {
|
|
15
|
+
* console.log('LLM call with', ctx.turn.messages.length, 'messages')
|
|
16
|
+
* })
|
|
17
|
+
* },
|
|
18
|
+
* }
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export interface Extension {
|
|
22
|
+
/** Unique name for this extension (used in error reporting and ordering). */
|
|
23
|
+
name: string;
|
|
24
|
+
/** Called when the extension is installed via `agent.use()`. */
|
|
25
|
+
install(agent: Agent): void;
|
|
26
|
+
/**
|
|
27
|
+
* Optional priority that controls hook execution order. Higher =
|
|
28
|
+
* hooks run first within each lifecycle stage. Extensions with the
|
|
29
|
+
* same priority retain registration order (stable sort). Default: 0.
|
|
30
|
+
*
|
|
31
|
+
* This applies to **all** registration paths:
|
|
32
|
+
* - `agent.use(extension)` — hooks registered inside `install()`
|
|
33
|
+
* inherit the extension's priority.
|
|
34
|
+
* - The extension loader (`loadExtensions` / `installExtensions`) —
|
|
35
|
+
* sorts extensions by priority before calling `use()`, and the
|
|
36
|
+
* priority is also passed through to each hook.
|
|
37
|
+
* - Direct `agent.hook()` calls outside `use()` — look up the
|
|
38
|
+
* priority of an installed extension with a matching name, or
|
|
39
|
+
* default to 0.
|
|
40
|
+
*
|
|
41
|
+
* For directory-loaded extensions, the `priority` in
|
|
42
|
+
* `extension.json` takes precedence over this field.
|
|
43
|
+
*
|
|
44
|
+
* Use this to ensure enrichment extensions (e.g. keyword extraction)
|
|
45
|
+
* run before persistence extensions (e.g. session) without relying on
|
|
46
|
+
* `use()` call order:
|
|
47
|
+
*
|
|
48
|
+
* ```typescript
|
|
49
|
+
* const keywordLogger = { name: 'keyword-logger', priority: 10, install(a) { ... } };
|
|
50
|
+
* const session = { name: 'session', priority: -100, install(a) { ... } };
|
|
51
|
+
* // Hooks run keyword-logger first regardless of use() order.
|
|
52
|
+
* agent.use(session).use(keywordLogger);
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
priority?: number;
|
|
56
|
+
/**
|
|
57
|
+
* Optional cleanup method called when the extension is unloaded or
|
|
58
|
+
* the agent shuts down. Use this to close connections, stop
|
|
59
|
+
* processes, release resources, etc.
|
|
60
|
+
*/
|
|
61
|
+
close?(): Promise<void>;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=extension.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,SAAS;IACxB,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAC5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":""}
|