-
Notifications
You must be signed in to change notification settings - Fork 154
Expand file tree
/
Copy pathagent-provider-boundary.ts
More file actions
79 lines (67 loc) · 2.34 KB
/
Copy pathagent-provider-boundary.ts
File metadata and controls
79 lines (67 loc) · 2.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
interface TextEvent {
readonly type: 'text' | 'thinking';
readonly text: string;
}
interface ToolCallEvent {
readonly type: 'tool_call';
readonly toolName: string | null | undefined;
readonly toolId: string | null | undefined;
readonly input: unknown;
}
interface ToolResultEvent {
readonly type: 'tool_result';
readonly toolId: string | null | undefined;
readonly content: unknown;
readonly isError: unknown;
}
interface ResultEvent {
readonly type: 'result';
readonly success: boolean;
readonly result?: unknown;
readonly error?: unknown;
readonly cost?: unknown;
readonly duration?: unknown;
readonly inputTokens?: number;
readonly outputTokens?: number;
readonly cacheReadInputTokens?: number;
readonly cacheCreationInputTokens?: number;
readonly modelUsage?: unknown;
readonly requests?: number;
readonly usageSource?: unknown;
readonly usageCompleteness?: unknown;
readonly invocation?: unknown;
readonly ompSdk?: unknown;
}
export type OutputEvent = TextEvent | ToolCallEvent | ToolResultEvent | ResultEvent;
export type ProviderParseResult = OutputEvent | readonly OutputEvent[] | null;
export interface ProviderAdapter {
readonly id: string;
readonly adapterVersion: string;
createParserState(): object;
parseEvent(line: string, state: object): ProviderParseResult;
finishParsing?(state: object): ProviderParseResult;
}
interface AdapterRuntime {
getProviderAdapter(provider: string): ProviderAdapter;
}
interface PrefixRuntime {
stripTimestampPrefix(line: string): string;
}
function isRuntime(value: unknown, method: string): boolean {
return (
value !== null && typeof value === 'object' && typeof Reflect.get(value, method) === 'function'
);
}
function isAdapterRuntime(value: unknown): value is AdapterRuntime {
return isRuntime(value, 'getProviderAdapter');
}
function isPrefixRuntime(value: unknown): value is PrefixRuntime {
return isRuntime(value, 'stripTimestampPrefix');
}
const adapters: unknown = require('../lib/agent-cli-provider/adapters');
const prefixes: unknown = require('../lib/agent-cli-provider/log-prefix');
if (!isAdapterRuntime(adapters) || !isPrefixRuntime(prefixes)) {
throw new Error('Built agent-provider runtime is unavailable');
}
export const getProviderAdapter = adapters.getProviderAdapter;
export const stripTimestampPrefix = prefixes.stripTimestampPrefix;