@jussmor/sdk-ai 0.2.0
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/dist/conversation-kIkMQdYK.d.cts +105 -0
- package/dist/conversation-kIkMQdYK.d.ts +105 -0
- package/dist/conversation-store-CAyPuBjk.d.ts +10 -0
- package/dist/conversation-store-Cl42jpsA.d.cts +10 -0
- package/dist/index.cjs +1630 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +251 -0
- package/dist/index.d.ts +251 -0
- package/dist/index.js +1536 -0
- package/dist/index.js.map +1 -0
- package/dist/memory-uBLqrQRY.d.cts +28 -0
- package/dist/memory-uBLqrQRY.d.ts +28 -0
- package/dist/providers/llm/anthropic.cjs +275 -0
- package/dist/providers/llm/anthropic.cjs.map +1 -0
- package/dist/providers/llm/anthropic.d.cts +22 -0
- package/dist/providers/llm/anthropic.d.ts +22 -0
- package/dist/providers/llm/anthropic.js +240 -0
- package/dist/providers/llm/anthropic.js.map +1 -0
- package/dist/providers/llm/ollama.cjs +195 -0
- package/dist/providers/llm/ollama.cjs.map +1 -0
- package/dist/providers/llm/ollama.d.cts +23 -0
- package/dist/providers/llm/ollama.d.ts +23 -0
- package/dist/providers/llm/ollama.js +170 -0
- package/dist/providers/llm/ollama.js.map +1 -0
- package/dist/providers/llm/openai.cjs +213 -0
- package/dist/providers/llm/openai.cjs.map +1 -0
- package/dist/providers/llm/openai.d.cts +22 -0
- package/dist/providers/llm/openai.d.ts +22 -0
- package/dist/providers/llm/openai.js +178 -0
- package/dist/providers/llm/openai.js.map +1 -0
- package/dist/providers/memory/filesystem.cjs +112 -0
- package/dist/providers/memory/filesystem.cjs.map +1 -0
- package/dist/providers/memory/filesystem.d.cts +17 -0
- package/dist/providers/memory/filesystem.d.ts +17 -0
- package/dist/providers/memory/filesystem.js +87 -0
- package/dist/providers/memory/filesystem.js.map +1 -0
- package/dist/providers/store/filesystem.cjs +87 -0
- package/dist/providers/store/filesystem.cjs.map +1 -0
- package/dist/providers/store/filesystem.d.cts +14 -0
- package/dist/providers/store/filesystem.d.ts +14 -0
- package/dist/providers/store/filesystem.js +62 -0
- package/dist/providers/store/filesystem.js.map +1 -0
- package/dist/providers/thread/memory.cjs +81 -0
- package/dist/providers/thread/memory.cjs.map +1 -0
- package/dist/providers/thread/memory.d.cts +14 -0
- package/dist/providers/thread/memory.d.ts +14 -0
- package/dist/providers/thread/memory.js +56 -0
- package/dist/providers/thread/memory.js.map +1 -0
- package/dist/providers/thread/sqlite.cjs +917 -0
- package/dist/providers/thread/sqlite.cjs.map +1 -0
- package/dist/providers/thread/sqlite.d.cts +17 -0
- package/dist/providers/thread/sqlite.d.ts +17 -0
- package/dist/providers/thread/sqlite.js +911 -0
- package/dist/providers/thread/sqlite.js.map +1 -0
- package/dist/providers/tokenizers/auto.cjs +136 -0
- package/dist/providers/tokenizers/auto.cjs.map +1 -0
- package/dist/providers/tokenizers/auto.d.cts +24 -0
- package/dist/providers/tokenizers/auto.d.ts +24 -0
- package/dist/providers/tokenizers/auto.js +107 -0
- package/dist/providers/tokenizers/auto.js.map +1 -0
- package/dist/streaming-B-P6Fw_k.d.cts +372 -0
- package/dist/streaming-BtD23BE0.d.ts +372 -0
- package/dist/thread-C2b9xRMJ.d.cts +30 -0
- package/dist/thread-C2b9xRMJ.d.ts +30 -0
- package/dist/tokenizer-BhG_RGUk.d.cts +13 -0
- package/dist/tokenizer-BhG_RGUk.d.ts +13 -0
- package/package.json +84 -0
- package/src/agent-loop.ts +311 -0
- package/src/agent-source.ts +12 -0
- package/src/artifact.ts +31 -0
- package/src/compaction.ts +75 -0
- package/src/context-budget.ts +65 -0
- package/src/conversation-store.ts +8 -0
- package/src/conversation.ts +42 -0
- package/src/dispatch.ts +207 -0
- package/src/engine.ts +53 -0
- package/src/execution-context.ts +31 -0
- package/src/index.ts +37 -0
- package/src/interrupt-store.ts +25 -0
- package/src/interrupt.ts +55 -0
- package/src/llm-router.ts +34 -0
- package/src/llm.ts +100 -0
- package/src/memory-selector.ts +38 -0
- package/src/memory.ts +34 -0
- package/src/mode.ts +81 -0
- package/src/permissions.ts +104 -0
- package/src/protocol.ts +1 -0
- package/src/providers/llm/anthropic.ts +298 -0
- package/src/providers/llm/ollama.ts +219 -0
- package/src/providers/llm/openai.ts +215 -0
- package/src/providers/memory/filesystem.ts +99 -0
- package/src/providers/store/filesystem.ts +64 -0
- package/src/providers/thread/memory.ts +67 -0
- package/src/providers/thread/sqlite.ts +147 -0
- package/src/providers/tokenizers/auto.ts +26 -0
- package/src/providers/tokenizers/byte.ts +27 -0
- package/src/providers/tokenizers/tiktoken.ts +91 -0
- package/src/reasoning.ts +7 -0
- package/src/rule-matcher.ts +32 -0
- package/src/runtime.ts +416 -0
- package/src/safety.ts +56 -0
- package/src/sandbox.ts +23 -0
- package/src/session-context.ts +33 -0
- package/src/skill-source.ts +21 -0
- package/src/streaming.ts +124 -0
- package/src/system-prompt.ts +71 -0
- package/src/system-reminder.ts +9 -0
- package/src/thread.ts +33 -0
- package/src/tokenizer.ts +31 -0
- package/src/tool.ts +175 -0
- package/src/tracing.ts +63 -0
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
import { g as ToolFuncParams, f as ToolDef, a as Conversation, L as LLMProvider, c as ChatResponse, C as ChatMessage, b as ChatRequest, T as ToolCallEntry } from './conversation-kIkMQdYK.js';
|
|
2
|
+
import { b as MemoryProvider } from './memory-uBLqrQRY.js';
|
|
3
|
+
import { b as ThreadProvider } from './thread-C2b9xRMJ.js';
|
|
4
|
+
import { T as Tokenizer } from './tokenizer-BhG_RGUk.js';
|
|
5
|
+
|
|
6
|
+
type ToolCategory = "workspace" | "compute" | "data" | "web" | "planning" | "communication" | "integrations" | "memory" | "custom";
|
|
7
|
+
type ToolExecuteFunc = (ctx: AbortSignal | undefined, sandboxId: string, args: Record<string, unknown>) => Promise<string>;
|
|
8
|
+
type ToolPredicate = (args: Record<string, unknown>) => boolean;
|
|
9
|
+
type ToolValidator = (ctx: AbortSignal | undefined, args: Record<string, unknown>) => Promise<void>;
|
|
10
|
+
type PermissionDecision = "allow" | "deny" | "ask_user";
|
|
11
|
+
interface PermissionResult {
|
|
12
|
+
decision: PermissionDecision;
|
|
13
|
+
reason?: string;
|
|
14
|
+
updatedArgs?: Record<string, unknown>;
|
|
15
|
+
}
|
|
16
|
+
type ToolPermissionFn = (ctx: AbortSignal | undefined, args: Record<string, unknown>) => Promise<PermissionResult>;
|
|
17
|
+
type ToolReminderFn = (ctx: AbortSignal | undefined) => Promise<string>;
|
|
18
|
+
interface Tool {
|
|
19
|
+
name: string;
|
|
20
|
+
description: string;
|
|
21
|
+
category: ToolCategory;
|
|
22
|
+
parameters: ToolFuncParams;
|
|
23
|
+
execute: ToolExecuteFunc;
|
|
24
|
+
aliases?: string[];
|
|
25
|
+
searchHint?: string;
|
|
26
|
+
isReadOnly?: ToolPredicate;
|
|
27
|
+
isConcurrencySafe?: ToolPredicate;
|
|
28
|
+
isDestructive?: ToolPredicate;
|
|
29
|
+
validate?: ToolValidator;
|
|
30
|
+
checkPermissions?: ToolPermissionFn;
|
|
31
|
+
dynamicReminder?: ToolReminderFn;
|
|
32
|
+
hidden?: boolean;
|
|
33
|
+
deferred?: boolean;
|
|
34
|
+
alwaysLoad?: boolean;
|
|
35
|
+
maxResultSizeChars?: number;
|
|
36
|
+
}
|
|
37
|
+
interface ToolMatch {
|
|
38
|
+
tool: Tool;
|
|
39
|
+
score: number;
|
|
40
|
+
}
|
|
41
|
+
declare function toToolDef(t: Tool): ToolDef;
|
|
42
|
+
declare class ToolRegistry {
|
|
43
|
+
private tools;
|
|
44
|
+
private aliases;
|
|
45
|
+
register(tool: Tool): void;
|
|
46
|
+
get(name: string): Tool | undefined;
|
|
47
|
+
list(): Tool[];
|
|
48
|
+
byCategory(category: ToolCategory): Tool[];
|
|
49
|
+
names(): string[];
|
|
50
|
+
describeAvailable(): string;
|
|
51
|
+
toolDefs(): ToolDef[];
|
|
52
|
+
collectDynamicReminders(signal?: AbortSignal): Promise<string[]>;
|
|
53
|
+
search(query: string): ToolMatch[];
|
|
54
|
+
reveal(name: string): void;
|
|
55
|
+
hide(name: string): void;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
interface SandboxExecResult {
|
|
59
|
+
stdout: string;
|
|
60
|
+
stderr: string;
|
|
61
|
+
exitCode: number;
|
|
62
|
+
}
|
|
63
|
+
interface SandboxDriver {
|
|
64
|
+
exec(sandboxId: string, command: string, args?: string[], signal?: AbortSignal): Promise<SandboxExecResult>;
|
|
65
|
+
readFile(sandboxId: string, path: string, signal?: AbortSignal): Promise<string>;
|
|
66
|
+
writeFile(sandboxId: string, path: string, content: string, signal?: AbortSignal): Promise<void>;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
type InterruptKind = "approval" | "question" | "form_input";
|
|
70
|
+
interface FormField {
|
|
71
|
+
name: string;
|
|
72
|
+
label: string;
|
|
73
|
+
type: "text" | "textarea" | "select" | "checkbox";
|
|
74
|
+
options?: string[];
|
|
75
|
+
required?: boolean;
|
|
76
|
+
defaultValue?: string;
|
|
77
|
+
}
|
|
78
|
+
interface InterruptRequest {
|
|
79
|
+
id: string;
|
|
80
|
+
kind: InterruptKind;
|
|
81
|
+
title: string;
|
|
82
|
+
description?: string;
|
|
83
|
+
toolName?: string;
|
|
84
|
+
toolArgs?: Record<string, unknown>;
|
|
85
|
+
fields?: FormField[];
|
|
86
|
+
createdAt: Date;
|
|
87
|
+
}
|
|
88
|
+
interface InterruptResponse {
|
|
89
|
+
id: string;
|
|
90
|
+
approved?: boolean;
|
|
91
|
+
answer?: unknown;
|
|
92
|
+
modifiedArgs?: string;
|
|
93
|
+
}
|
|
94
|
+
type InterruptRequester = (req: InterruptRequest, signal?: AbortSignal) => Promise<InterruptResponse>;
|
|
95
|
+
declare class InterruptGate {
|
|
96
|
+
private requester;
|
|
97
|
+
private pending;
|
|
98
|
+
constructor(requester: InterruptRequester);
|
|
99
|
+
wait(req: InterruptRequest, signal?: AbortSignal): Promise<InterruptResponse>;
|
|
100
|
+
pendingRequests(): InterruptRequest[];
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
type PermissionBehavior = "allow" | "deny" | "ask";
|
|
104
|
+
interface PermissionRule {
|
|
105
|
+
toolName?: string;
|
|
106
|
+
pathPrefix?: string;
|
|
107
|
+
behavior: PermissionBehavior;
|
|
108
|
+
reason?: string;
|
|
109
|
+
}
|
|
110
|
+
interface PermissionDecisionResult {
|
|
111
|
+
behavior: PermissionBehavior;
|
|
112
|
+
reason?: string;
|
|
113
|
+
updatedInput?: Record<string, unknown>;
|
|
114
|
+
}
|
|
115
|
+
interface PermissionApprover {
|
|
116
|
+
ask(tool: Tool, args: Record<string, unknown>, signal?: AbortSignal): Promise<PermissionDecisionResult>;
|
|
117
|
+
}
|
|
118
|
+
declare class InterruptApprover implements PermissionApprover {
|
|
119
|
+
private requester;
|
|
120
|
+
constructor(requester: InterruptRequester);
|
|
121
|
+
ask(tool: Tool, args: Record<string, unknown>, signal?: AbortSignal): Promise<PermissionDecisionResult>;
|
|
122
|
+
}
|
|
123
|
+
declare class PermissionEngine {
|
|
124
|
+
private rules;
|
|
125
|
+
private approver?;
|
|
126
|
+
withRules(rules: PermissionRule[]): this;
|
|
127
|
+
withApprover(approver: PermissionApprover): this;
|
|
128
|
+
decide(tool: Tool, args: Record<string, unknown>, signal?: AbortSignal): Promise<PermissionDecisionResult>;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
type BaseMode = "balanced" | "analyst" | "deep_work";
|
|
132
|
+
type ToolsMode = "allowlist" | "denylist";
|
|
133
|
+
interface ModeMeta {
|
|
134
|
+
id: string;
|
|
135
|
+
name: string;
|
|
136
|
+
baseMode?: string;
|
|
137
|
+
toolsMode?: ToolsMode;
|
|
138
|
+
tools?: string[];
|
|
139
|
+
model?: string;
|
|
140
|
+
reasoningEffort?: string;
|
|
141
|
+
temperature?: string;
|
|
142
|
+
author?: string;
|
|
143
|
+
created?: string;
|
|
144
|
+
}
|
|
145
|
+
interface ModelSettings {
|
|
146
|
+
model?: string;
|
|
147
|
+
reasoningEffort?: string;
|
|
148
|
+
temperature?: number;
|
|
149
|
+
}
|
|
150
|
+
interface Mode {
|
|
151
|
+
meta: ModeMeta;
|
|
152
|
+
id: string;
|
|
153
|
+
name: string;
|
|
154
|
+
baseModeId?: BaseMode;
|
|
155
|
+
promptContent?: string;
|
|
156
|
+
modelSettings?: ModelSettings;
|
|
157
|
+
toolsMode?: ToolsMode;
|
|
158
|
+
toolsList?: string[];
|
|
159
|
+
}
|
|
160
|
+
declare function isToolAllowed(mode: Mode, toolName: string): boolean;
|
|
161
|
+
interface ModeProvider {
|
|
162
|
+
get(modeId: string, signal?: AbortSignal): Promise<Mode>;
|
|
163
|
+
list(signal?: AbortSignal): Promise<Mode[]>;
|
|
164
|
+
create(mode: Mode, signal?: AbortSignal): Promise<Mode>;
|
|
165
|
+
builtinModes(): Mode[];
|
|
166
|
+
}
|
|
167
|
+
declare class StaticModeProvider implements ModeProvider {
|
|
168
|
+
private modes;
|
|
169
|
+
private modeList;
|
|
170
|
+
constructor(modes: Mode[]);
|
|
171
|
+
get(modeId: string): Promise<Mode>;
|
|
172
|
+
list(): Promise<Mode[]>;
|
|
173
|
+
create(): Promise<Mode>;
|
|
174
|
+
builtinModes(): Mode[];
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
interface ContextBudget {
|
|
178
|
+
windowSize: number;
|
|
179
|
+
skillsReserve: number;
|
|
180
|
+
memoryReserve: number;
|
|
181
|
+
historyReserve: number;
|
|
182
|
+
reserveBuffer: number;
|
|
183
|
+
}
|
|
184
|
+
interface EnforcementResult {
|
|
185
|
+
overflowTokens: number;
|
|
186
|
+
truncatedHistory: boolean;
|
|
187
|
+
historyDropped: number;
|
|
188
|
+
stillOverflow: boolean;
|
|
189
|
+
}
|
|
190
|
+
declare function defaultContextBudget(windowSize: number): ContextBudget;
|
|
191
|
+
declare function enforceContextBudget(budget: ContextBudget, conv: Conversation, memoryTokens: number, tok: Tokenizer): EnforcementResult;
|
|
192
|
+
|
|
193
|
+
type SystemPromptLayer = "core" | "behavior" | "memory" | "session" | "mode";
|
|
194
|
+
declare class SystemPromptBuilder {
|
|
195
|
+
private layers;
|
|
196
|
+
private maxLayerTokens;
|
|
197
|
+
setMaxLayerTokens(layer: SystemPromptLayer, maxTokens: number): void;
|
|
198
|
+
build(): string;
|
|
199
|
+
buildWithBudget(tok?: Tokenizer): string;
|
|
200
|
+
get(layer: SystemPromptLayer): string;
|
|
201
|
+
has(layer: SystemPromptLayer): boolean;
|
|
202
|
+
set(layer: SystemPromptLayer, content: string): void;
|
|
203
|
+
append(layer: SystemPromptLayer, content: string): void;
|
|
204
|
+
clear(layer: SystemPromptLayer): void;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
interface Engine {
|
|
208
|
+
memory?: MemoryProvider;
|
|
209
|
+
sandbox?: SandboxDriver;
|
|
210
|
+
tools?: ToolRegistry;
|
|
211
|
+
threads?: ThreadProvider;
|
|
212
|
+
modes?: ModeProvider;
|
|
213
|
+
llm?: LLMProvider;
|
|
214
|
+
prompt?: SystemPromptBuilder;
|
|
215
|
+
budget?: ContextBudget;
|
|
216
|
+
}
|
|
217
|
+
declare function newEngine(...opts: Array<(e: Engine) => void>): Engine;
|
|
218
|
+
declare function newEngineWithDefaults(windowSize: number): Engine;
|
|
219
|
+
declare const hasMemory: (e: Engine) => boolean;
|
|
220
|
+
declare const hasSandbox: (e: Engine) => boolean;
|
|
221
|
+
declare const hasTools: (e: Engine) => boolean;
|
|
222
|
+
declare const hasThreads: (e: Engine) => boolean;
|
|
223
|
+
declare const hasModes: (e: Engine) => boolean;
|
|
224
|
+
declare const hasLLM: (e: Engine) => boolean;
|
|
225
|
+
declare const hasPrompt: (e: Engine) => boolean;
|
|
226
|
+
declare const hasBudget: (e: Engine) => boolean;
|
|
227
|
+
declare const withMemory: (p: MemoryProvider) => (e: Engine) => void;
|
|
228
|
+
declare const withSandbox: (p: SandboxDriver) => (e: Engine) => void;
|
|
229
|
+
declare const withTools: (r: ToolRegistry) => (e: Engine) => void;
|
|
230
|
+
declare const withThreads: (p: ThreadProvider) => (e: Engine) => void;
|
|
231
|
+
declare const withModes: (p: ModeProvider) => (e: Engine) => void;
|
|
232
|
+
declare const withLLM: (p: LLMProvider) => (e: Engine) => void;
|
|
233
|
+
declare const withPrompt: (b: SystemPromptBuilder) => (e: Engine) => void;
|
|
234
|
+
declare const withBudget: (b: ContextBudget) => (e: Engine) => void;
|
|
235
|
+
|
|
236
|
+
interface ReasoningStep {
|
|
237
|
+
id: string;
|
|
238
|
+
type: "thinking" | "action" | "result";
|
|
239
|
+
title: string;
|
|
240
|
+
content?: string;
|
|
241
|
+
details?: string[];
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
interface AgentLoopConfig {
|
|
245
|
+
provider?: LLMProvider;
|
|
246
|
+
systemPrompt?: string;
|
|
247
|
+
model?: string;
|
|
248
|
+
tools?: ToolRegistry;
|
|
249
|
+
sandbox?: SandboxDriver;
|
|
250
|
+
sandboxId?: string;
|
|
251
|
+
permissions?: PermissionEngine;
|
|
252
|
+
maxTurns?: number;
|
|
253
|
+
maxRetries?: number;
|
|
254
|
+
onTurn?: (turn: number, resp: ChatResponse) => boolean;
|
|
255
|
+
onToolCall?: (call: {
|
|
256
|
+
id: string;
|
|
257
|
+
name: string;
|
|
258
|
+
arguments: string;
|
|
259
|
+
}) => boolean;
|
|
260
|
+
onToolResult?: (call: {
|
|
261
|
+
id: string;
|
|
262
|
+
name: string;
|
|
263
|
+
arguments: string;
|
|
264
|
+
}, result: {
|
|
265
|
+
toolCallId: string;
|
|
266
|
+
name: string;
|
|
267
|
+
content: string;
|
|
268
|
+
error?: Error;
|
|
269
|
+
}) => {
|
|
270
|
+
toolCallId: string;
|
|
271
|
+
name: string;
|
|
272
|
+
content: string;
|
|
273
|
+
error?: Error;
|
|
274
|
+
};
|
|
275
|
+
shouldStop?: (turn: number, resp: ChatResponse) => boolean;
|
|
276
|
+
onError?: (err: Error, attempt: number) => boolean;
|
|
277
|
+
buildRequest?: (systemPrompt: string, messages: ChatMessage[], tools?: ToolRegistry) => ChatRequest;
|
|
278
|
+
}
|
|
279
|
+
interface AgentLoopResult {
|
|
280
|
+
finalContent: string;
|
|
281
|
+
providerReasoning: string;
|
|
282
|
+
totalTurns: number;
|
|
283
|
+
totalUsage: {
|
|
284
|
+
promptTokens: number;
|
|
285
|
+
completionTokens: number;
|
|
286
|
+
totalTokens: number;
|
|
287
|
+
};
|
|
288
|
+
messages: ChatMessage[];
|
|
289
|
+
reasoningTrace: ReasoningStep[];
|
|
290
|
+
stopReason: "complete" | "max_turns" | "aborted" | "stopped" | "error";
|
|
291
|
+
}
|
|
292
|
+
declare function runAgentLoop(cfg: AgentLoopConfig, messages: ChatMessage[], signal?: AbortSignal): Promise<AgentLoopResult>;
|
|
293
|
+
declare function runAgentLoopWithEngine(engine: Engine, modeId: string, cfg: AgentLoopConfig, messages: ChatMessage[], signal?: AbortSignal): Promise<AgentLoopResult>;
|
|
294
|
+
|
|
295
|
+
type ArtifactType = "file" | "component" | "data";
|
|
296
|
+
interface Artifact {
|
|
297
|
+
id: string;
|
|
298
|
+
type: ArtifactType;
|
|
299
|
+
title?: string;
|
|
300
|
+
content: string;
|
|
301
|
+
mediaType?: string;
|
|
302
|
+
props?: Record<string, unknown>;
|
|
303
|
+
createdAt?: Date;
|
|
304
|
+
updatedAt?: Date;
|
|
305
|
+
}
|
|
306
|
+
type ArtifactEmitter = (artifact: Artifact) => void;
|
|
307
|
+
declare const ARTIFACT_EMITTER_KEY: unique symbol;
|
|
308
|
+
interface ArtifactContext {
|
|
309
|
+
[ARTIFACT_EMITTER_KEY]?: ArtifactEmitter;
|
|
310
|
+
}
|
|
311
|
+
declare function withArtifactEmitter<T extends ArtifactContext>(ctx: T, emitter: ArtifactEmitter): T & ArtifactContext;
|
|
312
|
+
declare function emitArtifact(ctx: ArtifactContext, artifact: Artifact): void;
|
|
313
|
+
|
|
314
|
+
interface ToolResult {
|
|
315
|
+
toolCallId: string;
|
|
316
|
+
name: string;
|
|
317
|
+
content: string;
|
|
318
|
+
error?: Error;
|
|
319
|
+
}
|
|
320
|
+
declare class ToolDispatcher {
|
|
321
|
+
private tools;
|
|
322
|
+
private sandbox?;
|
|
323
|
+
private permissions?;
|
|
324
|
+
constructor(tools: ToolRegistry, sandbox?: SandboxDriver | undefined);
|
|
325
|
+
withPermissions(engine: PermissionEngine): this;
|
|
326
|
+
dispatch(call: ToolCallEntry, sandboxId: string, signal?: AbortSignal): Promise<ToolResult>;
|
|
327
|
+
dispatchAll(calls: ToolCallEntry[], sandboxId: string, signal?: AbortSignal): Promise<ToolResult[]>;
|
|
328
|
+
dispatchParallel(calls: ToolCallEntry[], sandboxId: string, signal?: AbortSignal): Promise<ToolResult[]>;
|
|
329
|
+
}
|
|
330
|
+
declare function toolResultsToMessages(assistantToolCalls: ToolCallEntry[], results: ToolResult[]): ChatMessage[];
|
|
331
|
+
declare function areIndependent(calls: ToolCallEntry[]): boolean;
|
|
332
|
+
|
|
333
|
+
type StreamEventType = "delta" | "thinking" | "tool_call" | "tool_result" | "turn_complete" | "agent_result" | "interrupt_required" | "interrupt_resolved" | "artifact_created" | "artifact_updated" | "compaction" | "plan_mode_changed" | "done" | "error";
|
|
334
|
+
interface CompactionEvent {
|
|
335
|
+
messagesDropped: number;
|
|
336
|
+
overflowTokens: number;
|
|
337
|
+
summary?: string;
|
|
338
|
+
}
|
|
339
|
+
interface PlanModeEvent {
|
|
340
|
+
state: "entered" | "exited";
|
|
341
|
+
plan?: string;
|
|
342
|
+
reason?: string;
|
|
343
|
+
}
|
|
344
|
+
interface AgentResult {
|
|
345
|
+
agentId: string;
|
|
346
|
+
result: AgentLoopResult;
|
|
347
|
+
}
|
|
348
|
+
interface StreamEvent {
|
|
349
|
+
type: StreamEventType;
|
|
350
|
+
delta?: string;
|
|
351
|
+
thinking?: string;
|
|
352
|
+
toolCall?: ToolCallEntry;
|
|
353
|
+
toolResult?: ToolResult;
|
|
354
|
+
agentResult?: AgentResult;
|
|
355
|
+
interrupt?: InterruptRequest;
|
|
356
|
+
artifact?: Artifact;
|
|
357
|
+
final?: AgentLoopResult;
|
|
358
|
+
compaction?: CompactionEvent;
|
|
359
|
+
planMode?: PlanModeEvent;
|
|
360
|
+
error?: Error;
|
|
361
|
+
}
|
|
362
|
+
interface StreamingLLMProvider extends LLMProvider {
|
|
363
|
+
chatStream(req: ChatRequest, signal?: AbortSignal): AsyncGenerator<StreamEvent>;
|
|
364
|
+
}
|
|
365
|
+
declare function collectStream(events: AsyncGenerator<StreamEvent>): Promise<{
|
|
366
|
+
text: string;
|
|
367
|
+
final: AgentLoopResult | undefined;
|
|
368
|
+
error: Error | undefined;
|
|
369
|
+
}>;
|
|
370
|
+
declare function fanOutStream(source: AsyncGenerator<StreamEvent>, consumers: number): AsyncGenerator<StreamEvent>[];
|
|
371
|
+
|
|
372
|
+
export { collectStream as $, type AgentLoopConfig as A, type BaseMode as B, type ContextBudget as C, type StreamEventType as D, type EnforcementResult as E, type FormField as F, type StreamingLLMProvider as G, SystemPromptBuilder as H, type InterruptRequest as I, type SystemPromptLayer as J, type ToolCategory as K, ToolDispatcher as L, type Mode as M, type ToolExecuteFunc as N, type ToolMatch as O, PermissionEngine as P, type ToolPermissionFn as Q, type ReasoningStep as R, type StreamEvent as S, type Tool as T, type ToolPredicate as U, ToolRegistry as V, type ToolReminderFn as W, type ToolResult as X, type ToolValidator as Y, type ToolsMode as Z, areIndependent as _, type Engine as a, defaultContextBudget as a0, emitArtifact as a1, enforceContextBudget as a2, fanOutStream as a3, hasBudget as a4, hasLLM as a5, hasMemory as a6, hasModes as a7, hasPrompt as a8, hasSandbox as a9, hasThreads as aa, hasTools as ab, isToolAllowed as ac, newEngine as ad, newEngineWithDefaults as ae, runAgentLoop as af, runAgentLoopWithEngine as ag, toToolDef as ah, toolResultsToMessages as ai, withArtifactEmitter as aj, withBudget as ak, withLLM as al, withMemory as am, withModes as an, withPrompt as ao, withSandbox as ap, withThreads as aq, withTools as ar, InterruptGate as b, type AgentLoopResult as c, type AgentResult as d, type Artifact as e, type ArtifactContext as f, type ArtifactEmitter as g, type ArtifactType as h, type CompactionEvent as i, InterruptApprover as j, type InterruptKind as k, type InterruptRequester as l, type InterruptResponse as m, type ModeMeta as n, type ModeProvider as o, type ModelSettings as p, type PermissionApprover as q, type PermissionBehavior as r, type PermissionDecision as s, type PermissionDecisionResult as t, type PermissionResult as u, type PermissionRule as v, type PlanModeEvent as w, type SandboxDriver as x, type SandboxExecResult as y, StaticModeProvider as z };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
type ThreadStatus = "active" | "completed" | "failed" | "archived";
|
|
2
|
+
interface Thread {
|
|
3
|
+
id: string;
|
|
4
|
+
userId?: string;
|
|
5
|
+
projectId?: string;
|
|
6
|
+
modeId?: string;
|
|
7
|
+
status: ThreadStatus;
|
|
8
|
+
parentId?: string;
|
|
9
|
+
}
|
|
10
|
+
interface Message {
|
|
11
|
+
id?: string;
|
|
12
|
+
fromThreadId: string;
|
|
13
|
+
toThreadId: string;
|
|
14
|
+
content: string;
|
|
15
|
+
sentAt?: Date;
|
|
16
|
+
}
|
|
17
|
+
interface ThreadProvider {
|
|
18
|
+
create(projectId: string, modeId: string, signal?: AbortSignal): Promise<Thread>;
|
|
19
|
+
get(threadId: string, signal?: AbortSignal): Promise<Thread>;
|
|
20
|
+
archive(threadId: string, signal?: AbortSignal): Promise<void>;
|
|
21
|
+
sendMessage(msg: Message, signal?: AbortSignal): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
interface MultiUserThreadProvider extends ThreadProvider {
|
|
24
|
+
createForUser(userId: string, projectId: string, modeId: string, signal?: AbortSignal): Promise<Thread>;
|
|
25
|
+
getForUser(userId: string, threadId: string, signal?: AbortSignal): Promise<Thread>;
|
|
26
|
+
listByUser(userId: string, status: ThreadStatus, signal?: AbortSignal): Promise<Thread[]>;
|
|
27
|
+
}
|
|
28
|
+
declare const ErrThreadAccessDenied: Error;
|
|
29
|
+
|
|
30
|
+
export { ErrThreadAccessDenied as E, type Message as M, type Thread as T, type MultiUserThreadProvider as a, type ThreadProvider as b, type ThreadStatus as c };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
type ThreadStatus = "active" | "completed" | "failed" | "archived";
|
|
2
|
+
interface Thread {
|
|
3
|
+
id: string;
|
|
4
|
+
userId?: string;
|
|
5
|
+
projectId?: string;
|
|
6
|
+
modeId?: string;
|
|
7
|
+
status: ThreadStatus;
|
|
8
|
+
parentId?: string;
|
|
9
|
+
}
|
|
10
|
+
interface Message {
|
|
11
|
+
id?: string;
|
|
12
|
+
fromThreadId: string;
|
|
13
|
+
toThreadId: string;
|
|
14
|
+
content: string;
|
|
15
|
+
sentAt?: Date;
|
|
16
|
+
}
|
|
17
|
+
interface ThreadProvider {
|
|
18
|
+
create(projectId: string, modeId: string, signal?: AbortSignal): Promise<Thread>;
|
|
19
|
+
get(threadId: string, signal?: AbortSignal): Promise<Thread>;
|
|
20
|
+
archive(threadId: string, signal?: AbortSignal): Promise<void>;
|
|
21
|
+
sendMessage(msg: Message, signal?: AbortSignal): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
interface MultiUserThreadProvider extends ThreadProvider {
|
|
24
|
+
createForUser(userId: string, projectId: string, modeId: string, signal?: AbortSignal): Promise<Thread>;
|
|
25
|
+
getForUser(userId: string, threadId: string, signal?: AbortSignal): Promise<Thread>;
|
|
26
|
+
listByUser(userId: string, status: ThreadStatus, signal?: AbortSignal): Promise<Thread[]>;
|
|
27
|
+
}
|
|
28
|
+
declare const ErrThreadAccessDenied: Error;
|
|
29
|
+
|
|
30
|
+
export { ErrThreadAccessDenied as E, type Message as M, type Thread as T, type MultiUserThreadProvider as a, type ThreadProvider as b, type ThreadStatus as c };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
interface Tokenizer {
|
|
2
|
+
count(text: string): number;
|
|
3
|
+
encode(text: string): number[];
|
|
4
|
+
decode(tokens: number[]): string;
|
|
5
|
+
}
|
|
6
|
+
declare class HeuristicTokenizer implements Tokenizer {
|
|
7
|
+
count(text: string): number;
|
|
8
|
+
encode(_text: string): number[];
|
|
9
|
+
decode(_tokens: number[]): string;
|
|
10
|
+
}
|
|
11
|
+
declare function truncateToTokens(text: string, maxTokens: number, tok: Tokenizer): string;
|
|
12
|
+
|
|
13
|
+
export { HeuristicTokenizer as H, type Tokenizer as T, truncateToTokens as t };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
interface Tokenizer {
|
|
2
|
+
count(text: string): number;
|
|
3
|
+
encode(text: string): number[];
|
|
4
|
+
decode(tokens: number[]): string;
|
|
5
|
+
}
|
|
6
|
+
declare class HeuristicTokenizer implements Tokenizer {
|
|
7
|
+
count(text: string): number;
|
|
8
|
+
encode(_text: string): number[];
|
|
9
|
+
decode(_tokens: number[]): string;
|
|
10
|
+
}
|
|
11
|
+
declare function truncateToTokens(text: string, maxTokens: number, tok: Tokenizer): string;
|
|
12
|
+
|
|
13
|
+
export { HeuristicTokenizer as H, type Tokenizer as T, truncateToTokens as t };
|
package/package.json
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@jussmor/sdk-ai",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "TypeScript server-side agent SDK — port of the Go harness-sdk.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./dist/index.cjs",
|
|
8
|
+
"module": "./dist/index.js",
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"import": "./dist/index.js",
|
|
14
|
+
"require": "./dist/index.cjs"
|
|
15
|
+
},
|
|
16
|
+
"./providers/llm/anthropic": {
|
|
17
|
+
"types": "./dist/providers/llm/anthropic.d.ts",
|
|
18
|
+
"import": "./dist/providers/llm/anthropic.js",
|
|
19
|
+
"require": "./dist/providers/llm/anthropic.cjs"
|
|
20
|
+
},
|
|
21
|
+
"./providers/llm/openai": {
|
|
22
|
+
"types": "./dist/providers/llm/openai.d.ts",
|
|
23
|
+
"import": "./dist/providers/llm/openai.js",
|
|
24
|
+
"require": "./dist/providers/llm/openai.cjs"
|
|
25
|
+
},
|
|
26
|
+
"./providers/llm/ollama": {
|
|
27
|
+
"types": "./dist/providers/llm/ollama.d.ts",
|
|
28
|
+
"import": "./dist/providers/llm/ollama.js",
|
|
29
|
+
"require": "./dist/providers/llm/ollama.cjs"
|
|
30
|
+
},
|
|
31
|
+
"./providers/thread/memory": {
|
|
32
|
+
"types": "./dist/providers/thread/memory.d.ts",
|
|
33
|
+
"import": "./dist/providers/thread/memory.js",
|
|
34
|
+
"require": "./dist/providers/thread/memory.cjs"
|
|
35
|
+
},
|
|
36
|
+
"./providers/thread/sqlite": {
|
|
37
|
+
"types": "./dist/providers/thread/sqlite.d.ts",
|
|
38
|
+
"import": "./dist/providers/thread/sqlite.js",
|
|
39
|
+
"require": "./dist/providers/thread/sqlite.cjs"
|
|
40
|
+
},
|
|
41
|
+
"./providers/memory/filesystem": {
|
|
42
|
+
"types": "./dist/providers/memory/filesystem.d.ts",
|
|
43
|
+
"import": "./dist/providers/memory/filesystem.js",
|
|
44
|
+
"require": "./dist/providers/memory/filesystem.cjs"
|
|
45
|
+
},
|
|
46
|
+
"./providers/store/filesystem": {
|
|
47
|
+
"types": "./dist/providers/store/filesystem.d.ts",
|
|
48
|
+
"import": "./dist/providers/store/filesystem.js",
|
|
49
|
+
"require": "./dist/providers/store/filesystem.cjs"
|
|
50
|
+
},
|
|
51
|
+
"./providers/tokenizers": {
|
|
52
|
+
"types": "./dist/providers/tokenizers/auto.d.ts",
|
|
53
|
+
"import": "./dist/providers/tokenizers/auto.js",
|
|
54
|
+
"require": "./dist/providers/tokenizers/auto.cjs"
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
"files": ["dist", "src"],
|
|
58
|
+
"scripts": {
|
|
59
|
+
"build": "tsup",
|
|
60
|
+
"dev": "tsup --watch",
|
|
61
|
+
"typecheck": "tsc --noEmit",
|
|
62
|
+
"test": "vitest run",
|
|
63
|
+
"sync-check": "node --experimental-strip-types ../../scripts/check-ts-contract.ts"
|
|
64
|
+
},
|
|
65
|
+
"dependencies": {
|
|
66
|
+
"@anthropic-ai/sdk": "^0.37.0",
|
|
67
|
+
"openai": "^4.77.0"
|
|
68
|
+
},
|
|
69
|
+
"optionalDependencies": {
|
|
70
|
+
"better-sqlite3": "^11.0.0",
|
|
71
|
+
"pg": "^8.13.0"
|
|
72
|
+
},
|
|
73
|
+
"devDependencies": {
|
|
74
|
+
"@types/better-sqlite3": "^7.6.12",
|
|
75
|
+
"@types/node": "^22.0.0",
|
|
76
|
+
"@types/pg": "^8.11.0",
|
|
77
|
+
"tsup": "^8.3.0",
|
|
78
|
+
"typescript": "^5.6.0",
|
|
79
|
+
"vitest": "^2.1.0"
|
|
80
|
+
},
|
|
81
|
+
"engines": {
|
|
82
|
+
"node": ">=18.0.0"
|
|
83
|
+
}
|
|
84
|
+
}
|