actoviq-agent-sdk 0.1.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/LICENSE +21 -0
- package/README-zh.md +422 -0
- package/README.md +415 -0
- package/dist/src/config/loadActoviqSettings.d.ts +8 -0
- package/dist/src/config/loadActoviqSettings.d.ts.map +1 -0
- package/dist/src/config/loadActoviqSettings.js +11 -0
- package/dist/src/config/loadActoviqSettings.js.map +1 -0
- package/dist/src/config/loadDefaultActoviqSettings.d.ts +7 -0
- package/dist/src/config/loadDefaultActoviqSettings.d.ts.map +1 -0
- package/dist/src/config/loadDefaultActoviqSettings.js +27 -0
- package/dist/src/config/loadDefaultActoviqSettings.js.map +1 -0
- package/dist/src/config/loadJsonConfigFile.d.ts +8 -0
- package/dist/src/config/loadJsonConfigFile.d.ts.map +1 -0
- package/dist/src/config/loadJsonConfigFile.js +48 -0
- package/dist/src/config/loadJsonConfigFile.js.map +1 -0
- package/dist/src/config/resolveRuntimeConfig.d.ts +3 -0
- package/dist/src/config/resolveRuntimeConfig.d.ts.map +1 -0
- package/dist/src/config/resolveRuntimeConfig.js +64 -0
- package/dist/src/config/resolveRuntimeConfig.js.map +1 -0
- package/dist/src/errors.d.ts +35 -0
- package/dist/src/errors.d.ts.map +1 -0
- package/dist/src/errors.js +40 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/index.d.ts +20 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +25 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/mcp/connectionManager.d.ts +14 -0
- package/dist/src/mcp/connectionManager.d.ts.map +1 -0
- package/dist/src/mcp/connectionManager.js +172 -0
- package/dist/src/mcp/connectionManager.js.map +1 -0
- package/dist/src/parity/actoviqBridgeSdk.d.ts +64 -0
- package/dist/src/parity/actoviqBridgeSdk.d.ts.map +1 -0
- package/dist/src/parity/actoviqBridgeSdk.js +841 -0
- package/dist/src/parity/actoviqBridgeSdk.js.map +1 -0
- package/dist/src/parity/actoviqFileTools.d.ts +9 -0
- package/dist/src/parity/actoviqFileTools.d.ts.map +1 -0
- package/dist/src/parity/actoviqFileTools.js +426 -0
- package/dist/src/parity/actoviqFileTools.js.map +1 -0
- package/dist/src/parity/actoviqTranscripts.d.ts +40 -0
- package/dist/src/parity/actoviqTranscripts.d.ts.map +1 -0
- package/dist/src/parity/actoviqTranscripts.js +155 -0
- package/dist/src/parity/actoviqTranscripts.js.map +1 -0
- package/dist/src/parity/portableSessions.d.ts +35 -0
- package/dist/src/parity/portableSessions.d.ts.map +1 -0
- package/dist/src/parity/portableSessions.js +233 -0
- package/dist/src/parity/portableSessions.js.map +1 -0
- package/dist/src/provider/client.d.ts +54 -0
- package/dist/src/provider/client.d.ts.map +1 -0
- package/dist/src/provider/client.js +397 -0
- package/dist/src/provider/client.js.map +1 -0
- package/dist/src/provider/types.d.ts +137 -0
- package/dist/src/provider/types.d.ts.map +1 -0
- package/dist/src/provider/types.js +2 -0
- package/dist/src/provider/types.js.map +1 -0
- package/dist/src/runtime/actoviqModelApi.d.ts +10 -0
- package/dist/src/runtime/actoviqModelApi.d.ts.map +1 -0
- package/dist/src/runtime/actoviqModelApi.js +26 -0
- package/dist/src/runtime/actoviqModelApi.js.map +1 -0
- package/dist/src/runtime/agentClient.d.ts +37 -0
- package/dist/src/runtime/agentClient.d.ts.map +1 -0
- package/dist/src/runtime/agentClient.js +212 -0
- package/dist/src/runtime/agentClient.js.map +1 -0
- package/dist/src/runtime/agentSession.d.ts +32 -0
- package/dist/src/runtime/agentSession.d.ts.map +1 -0
- package/dist/src/runtime/agentSession.js +68 -0
- package/dist/src/runtime/agentSession.js.map +1 -0
- package/dist/src/runtime/asyncQueue.d.ts +23 -0
- package/dist/src/runtime/asyncQueue.d.ts.map +1 -0
- package/dist/src/runtime/asyncQueue.js +87 -0
- package/dist/src/runtime/asyncQueue.js.map +1 -0
- package/dist/src/runtime/conversationEngine.d.ts +26 -0
- package/dist/src/runtime/conversationEngine.d.ts.map +1 -0
- package/dist/src/runtime/conversationEngine.js +234 -0
- package/dist/src/runtime/conversationEngine.js.map +1 -0
- package/dist/src/runtime/helpers.d.ts +10 -0
- package/dist/src/runtime/helpers.d.ts.map +1 -0
- package/dist/src/runtime/helpers.js +44 -0
- package/dist/src/runtime/helpers.js.map +1 -0
- package/dist/src/runtime/messageUtils.d.ts +8 -0
- package/dist/src/runtime/messageUtils.d.ts.map +1 -0
- package/dist/src/runtime/messageUtils.js +79 -0
- package/dist/src/runtime/messageUtils.js.map +1 -0
- package/dist/src/runtime/tools.d.ts +10 -0
- package/dist/src/runtime/tools.d.ts.map +1 -0
- package/dist/src/runtime/tools.js +120 -0
- package/dist/src/runtime/tools.js.map +1 -0
- package/dist/src/storage/sessionStore.d.ts +16 -0
- package/dist/src/storage/sessionStore.d.ts.map +1 -0
- package/dist/src/storage/sessionStore.js +120 -0
- package/dist/src/storage/sessionStore.js.map +1 -0
- package/dist/src/types.d.ts +434 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/package.json +68 -0
- package/vendor/actoviq-runtime/cli.js +37 -0
- package/vendor/actoviq-runtime/runtime.bundle.br +0 -0
package/README.md
ADDED
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
# Actoviq Agent SDK
|
|
2
|
+
|
|
3
|
+
[English](./README.md) | [中文](./README-zh.md)
|
|
4
|
+
|
|
5
|
+
Actoviq Agent SDK is an independent, experimental agent SDK for practical multi-tool, multi-session, and bridge-assisted agent workflows.
|
|
6
|
+
|
|
7
|
+
This repository is currently a testing preview under active development. APIs, runtime behavior, naming, packaging, and parity coverage may still change as the project evolves. Issues and PRs are very welcome.
|
|
8
|
+
|
|
9
|
+
This project is independently developed as a public preview and is still under active iteration.
|
|
10
|
+
|
|
11
|
+
Licensed under the [MIT License](./LICENSE).
|
|
12
|
+
|
|
13
|
+
## Highlights
|
|
14
|
+
|
|
15
|
+
- Node.js / TypeScript agent SDK with `run()`, `stream()`, sessions, tools, and MCP support
|
|
16
|
+
- Actoviq Runtime bridge with built-in tools, skills, subagents, and native session/context behavior
|
|
17
|
+
- Clean public SDK surface on top of a vendored non-TUI runtime
|
|
18
|
+
- Interactive streaming demo for local development and agent debugging
|
|
19
|
+
- Ongoing parity work for workspace management, deeper subagent APIs, and private dependency replacement
|
|
20
|
+
|
|
21
|
+
## Get Started
|
|
22
|
+
|
|
23
|
+
### 1. Install dependencies
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm install
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### 2. Prepare `~/.actoviq/settings.json`
|
|
30
|
+
|
|
31
|
+
Local examples expect this file:
|
|
32
|
+
|
|
33
|
+
```text
|
|
34
|
+
~/.actoviq/settings.json
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Create the directory and place your JSON settings file there if it does not exist yet:
|
|
38
|
+
|
|
39
|
+
```powershell
|
|
40
|
+
New-Item -ItemType Directory -Force $HOME\.actoviq | Out-Null
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### 3. Run the basic example
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
npm run example:quickstart
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### 4. Start the interactive agent demo
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
npm run example:actoviq-interactive-agent
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
This launches a streaming REPL with tool access and an infinite session loop until you exit.
|
|
56
|
+
|
|
57
|
+
## At a Glance
|
|
58
|
+
|
|
59
|
+
This repository gives you two main paths:
|
|
60
|
+
|
|
61
|
+
1. A clean SDK layer for app integration
|
|
62
|
+
2. A runtime bridge layer for Actoviq-native non-TUI agent behavior
|
|
63
|
+
|
|
64
|
+
What you can use today:
|
|
65
|
+
|
|
66
|
+
- local tools with Zod schemas
|
|
67
|
+
- MCP servers over local, stdio, or streamable HTTP
|
|
68
|
+
- persistent sessions
|
|
69
|
+
- bridge runtime introspection
|
|
70
|
+
- vendored runtime file tools: `Read`, `Write`, `Edit`, `Glob`, `Grep`
|
|
71
|
+
- built-in bridge runtime tools, skills, and subagents
|
|
72
|
+
|
|
73
|
+
## Install As a Library
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
npm install actoviq-agent-sdk zod
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Basic SDK Example
|
|
80
|
+
|
|
81
|
+
```ts
|
|
82
|
+
import { z } from 'zod';
|
|
83
|
+
import { createAgentSdk, loadDefaultActoviqSettings, tool } from 'actoviq-agent-sdk';
|
|
84
|
+
|
|
85
|
+
await loadDefaultActoviqSettings();
|
|
86
|
+
const sdk = await createAgentSdk();
|
|
87
|
+
|
|
88
|
+
const addNumbers = tool(
|
|
89
|
+
{
|
|
90
|
+
name: 'add_numbers',
|
|
91
|
+
description: 'Add two numbers together.',
|
|
92
|
+
inputSchema: z.object({
|
|
93
|
+
a: z.number(),
|
|
94
|
+
b: z.number(),
|
|
95
|
+
}),
|
|
96
|
+
},
|
|
97
|
+
async ({ a, b }) => ({ sum: a + b }),
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
const result = await sdk.run('Please use the add_numbers tool to calculate 19 + 23.', {
|
|
101
|
+
tools: [addNumbers],
|
|
102
|
+
systemPrompt: 'Use the provided tools whenever they are relevant.',
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
console.log(result.text);
|
|
106
|
+
await sdk.close();
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Core Examples
|
|
110
|
+
|
|
111
|
+
### Session Example
|
|
112
|
+
|
|
113
|
+
```ts
|
|
114
|
+
import { createAgentSdk, loadDefaultActoviqSettings } from 'actoviq-agent-sdk';
|
|
115
|
+
|
|
116
|
+
await loadDefaultActoviqSettings();
|
|
117
|
+
const sdk = await createAgentSdk();
|
|
118
|
+
const session = await sdk.createSession({ title: 'Demo Session' });
|
|
119
|
+
|
|
120
|
+
await session.send('Remember that my project codename is Sparrow.');
|
|
121
|
+
const reply = await session.send('What is my project codename?');
|
|
122
|
+
|
|
123
|
+
console.log(reply.text);
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Stream Loop Example
|
|
127
|
+
|
|
128
|
+
```ts
|
|
129
|
+
import { createAgentSdk, loadDefaultActoviqSettings } from 'actoviq-agent-sdk';
|
|
130
|
+
|
|
131
|
+
await loadDefaultActoviqSettings();
|
|
132
|
+
const sdk = await createAgentSdk();
|
|
133
|
+
|
|
134
|
+
const prompts = [
|
|
135
|
+
'Introduce yourself in one concise sentence.',
|
|
136
|
+
'Now summarize the key idea of your previous sentence in one sentence.',
|
|
137
|
+
'Finally, give two short suggestions that would help a developer call this SDK more reliably.',
|
|
138
|
+
];
|
|
139
|
+
|
|
140
|
+
const session = await sdk.createSession({ title: 'Stream Loop Example' });
|
|
141
|
+
|
|
142
|
+
for (const prompt of prompts) {
|
|
143
|
+
const stream = session.stream(prompt);
|
|
144
|
+
|
|
145
|
+
for await (const event of stream) {
|
|
146
|
+
if (event.type === 'response.text.delta') {
|
|
147
|
+
process.stdout.write(event.delta);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const result = await stream.result;
|
|
152
|
+
console.log('\nfinal:', result.text);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
await sdk.close();
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## Interactive Agent Demo
|
|
159
|
+
|
|
160
|
+
The repository includes a bridge-based interactive example with:
|
|
161
|
+
|
|
162
|
+
- streaming answers
|
|
163
|
+
- built-in tool access
|
|
164
|
+
- skills and subagents through the vendored runtime
|
|
165
|
+
- a configurable workspace path in code
|
|
166
|
+
- an explicit JSON config path in code
|
|
167
|
+
- an infinite REPL loop until the user exits
|
|
168
|
+
|
|
169
|
+
Run it with:
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
npm run example:actoviq-interactive-agent
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
The main knobs are defined at the top of
|
|
176
|
+
[`examples/actoviq-interactive-agent.ts`](./examples/actoviq-interactive-agent.ts):
|
|
177
|
+
|
|
178
|
+
```ts
|
|
179
|
+
const WORKSPACE_PATH = process.cwd();
|
|
180
|
+
const JSON_CONFIG_PATH = path.resolve(
|
|
181
|
+
process.cwd(),
|
|
182
|
+
'examples',
|
|
183
|
+
'interactive-agent.settings.local.json',
|
|
184
|
+
);
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
The repository includes:
|
|
188
|
+
|
|
189
|
+
- [`examples/interactive-agent.settings.example.json`](./examples/interactive-agent.settings.example.json): safe template
|
|
190
|
+
- `examples/interactive-agent.settings.local.json`: local debug file for your machine only
|
|
191
|
+
|
|
192
|
+
The local debug file is ignored by git.
|
|
193
|
+
|
|
194
|
+
## Runtime Bridge
|
|
195
|
+
|
|
196
|
+
You can also run the vendored non-TUI Actoviq Runtime directly from this SDK.
|
|
197
|
+
This bridge reuses the upstream headless CLI, so it brings along the built-in
|
|
198
|
+
tool pool, skills, subagents, and native session/context behavior.
|
|
199
|
+
|
|
200
|
+
```ts
|
|
201
|
+
import { createActoviqBridgeSdk, loadDefaultActoviqSettings } from 'actoviq-agent-sdk';
|
|
202
|
+
|
|
203
|
+
await loadDefaultActoviqSettings();
|
|
204
|
+
|
|
205
|
+
const sdk = await createActoviqBridgeSdk({
|
|
206
|
+
workDir: process.cwd(),
|
|
207
|
+
maxTurns: 4,
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
const result = await sdk.run(
|
|
211
|
+
'Use Actoviq Runtime tools to inspect the examples directory, then summarize examples/quickstart.ts.',
|
|
212
|
+
);
|
|
213
|
+
|
|
214
|
+
console.log(result.initEvent?.agents);
|
|
215
|
+
console.log(result.initEvent?.skills);
|
|
216
|
+
console.log(result.sessionId);
|
|
217
|
+
console.log(result.text);
|
|
218
|
+
console.log(result.events.length);
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
Bridge notes:
|
|
222
|
+
|
|
223
|
+
- It uses Bun to execute the vendored Actoviq Runtime CLI bundle.
|
|
224
|
+
- It automatically injects env values loaded by `loadJsonConfigFile(...)` or `loadDefaultActoviqSettings()`.
|
|
225
|
+
- When a system `rg` is available, the bridge prefers it automatically so `Glob` and `Grep` work even if the upstream checkout does not contain the bundled ripgrep binary.
|
|
226
|
+
|
|
227
|
+
## Runtime Introspection
|
|
228
|
+
|
|
229
|
+
Use the runtime introspection example when you want to inspect the currently loaded bridge runtime instead of chatting with it.
|
|
230
|
+
|
|
231
|
+
Run it with:
|
|
232
|
+
|
|
233
|
+
```bash
|
|
234
|
+
npm run example:actoviq-introspection
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
It prints:
|
|
238
|
+
|
|
239
|
+
- runtime model
|
|
240
|
+
- built-in tools
|
|
241
|
+
- loaded skills
|
|
242
|
+
- slash commands
|
|
243
|
+
- available agents
|
|
244
|
+
- current context usage
|
|
245
|
+
|
|
246
|
+
## File Tools
|
|
247
|
+
|
|
248
|
+
You can attach the first-stage Actoviq Runtime parity file tools directly to the SDK:
|
|
249
|
+
|
|
250
|
+
```ts
|
|
251
|
+
import {
|
|
252
|
+
createAgentSdk,
|
|
253
|
+
createActoviqFileTools,
|
|
254
|
+
loadDefaultActoviqSettings,
|
|
255
|
+
} from 'actoviq-agent-sdk';
|
|
256
|
+
|
|
257
|
+
await loadDefaultActoviqSettings();
|
|
258
|
+
|
|
259
|
+
const sdk = await createAgentSdk({
|
|
260
|
+
tools: createActoviqFileTools({
|
|
261
|
+
cwd: process.cwd(),
|
|
262
|
+
}),
|
|
263
|
+
});
|
|
264
|
+
|
|
265
|
+
const result = await sdk.run(
|
|
266
|
+
'Use Glob to inspect the examples directory, then use Read on examples/quickstart.ts.',
|
|
267
|
+
);
|
|
268
|
+
|
|
269
|
+
console.log(result.text);
|
|
270
|
+
console.log(result.toolCalls);
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
Current parity file tools:
|
|
274
|
+
|
|
275
|
+
- `Read`
|
|
276
|
+
- `Write`
|
|
277
|
+
- `Edit`
|
|
278
|
+
- `Glob`
|
|
279
|
+
- `Grep`
|
|
280
|
+
|
|
281
|
+
## Native Runtime Sessions
|
|
282
|
+
|
|
283
|
+
You can inspect Actoviq Runtime's native `.actoviq/projects` session store using the vendored portable session discovery logic.
|
|
284
|
+
|
|
285
|
+
```ts
|
|
286
|
+
import { listActoviqBridgeSessions } from 'actoviq-agent-sdk';
|
|
287
|
+
|
|
288
|
+
const sessions = await listActoviqBridgeSessions({ limit: 10 });
|
|
289
|
+
console.log(sessions);
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
To inspect the latest reconstructed conversation chain for a session:
|
|
293
|
+
|
|
294
|
+
```ts
|
|
295
|
+
import {
|
|
296
|
+
getActoviqBridgeSessionInfo,
|
|
297
|
+
getActoviqBridgeSessionMessages,
|
|
298
|
+
} from 'actoviq-agent-sdk';
|
|
299
|
+
|
|
300
|
+
const sessionId = 'your-session-id';
|
|
301
|
+
|
|
302
|
+
const info = await getActoviqBridgeSessionInfo(sessionId);
|
|
303
|
+
const messages = await getActoviqBridgeSessionMessages(sessionId);
|
|
304
|
+
|
|
305
|
+
console.log(info);
|
|
306
|
+
console.log(messages);
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
## Configuration
|
|
310
|
+
|
|
311
|
+
The SDK resolves credentials in this order:
|
|
312
|
+
|
|
313
|
+
1. Explicit options passed to `createAgentSdk()`
|
|
314
|
+
2. Process environment variables
|
|
315
|
+
3. A JSON file preloaded with `loadJsonConfigFile(...)`
|
|
316
|
+
|
|
317
|
+
Example:
|
|
318
|
+
|
|
319
|
+
```ts
|
|
320
|
+
import { loadJsonConfigFile } from 'actoviq-agent-sdk';
|
|
321
|
+
|
|
322
|
+
await loadJsonConfigFile('E:/configs/my-llm-config.json');
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
The JSON file can use either of these shapes:
|
|
326
|
+
|
|
327
|
+
```json
|
|
328
|
+
{
|
|
329
|
+
"env": {
|
|
330
|
+
"ACTOVIQ_AUTH_TOKEN": "token",
|
|
331
|
+
"ACTOVIQ_BASE_URL": "https://api.example.com/actoviq",
|
|
332
|
+
"ACTOVIQ_DEFAULT_SONNET_MODEL": "my-model"
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
or:
|
|
338
|
+
|
|
339
|
+
```json
|
|
340
|
+
{
|
|
341
|
+
"ACTOVIQ_AUTH_TOKEN": "token",
|
|
342
|
+
"ACTOVIQ_BASE_URL": "https://api.example.com/actoviq",
|
|
343
|
+
"ACTOVIQ_DEFAULT_SONNET_MODEL": "my-model"
|
|
344
|
+
}
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
Supported values include:
|
|
348
|
+
|
|
349
|
+
- `ACTOVIQ_API_KEY`
|
|
350
|
+
- `ACTOVIQ_AUTH_TOKEN`
|
|
351
|
+
- `ACTOVIQ_BASE_URL`
|
|
352
|
+
- `ACTOVIQ_MODEL`
|
|
353
|
+
- `ACTOVIQ_DEFAULT_SONNET_MODEL`
|
|
354
|
+
- `ACTOVIQ_DEFAULT_OPUS_MODEL`
|
|
355
|
+
- `ACTOVIQ_DEFAULT_HAIKU_MODEL`
|
|
356
|
+
|
|
357
|
+
For local examples and smoke tests, you can also use:
|
|
358
|
+
|
|
359
|
+
```ts
|
|
360
|
+
import { loadDefaultActoviqSettings } from 'actoviq-agent-sdk';
|
|
361
|
+
|
|
362
|
+
await loadDefaultActoviqSettings();
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
This helper reads:
|
|
366
|
+
|
|
367
|
+
1. `~/.actoviq/settings.json`
|
|
368
|
+
|
|
369
|
+
## MCP Helpers
|
|
370
|
+
|
|
371
|
+
```ts
|
|
372
|
+
import { createAgentSdk, loadDefaultActoviqSettings, stdioMcpServer } from 'actoviq-agent-sdk';
|
|
373
|
+
|
|
374
|
+
await loadDefaultActoviqSettings();
|
|
375
|
+
|
|
376
|
+
const sdk = await createAgentSdk({
|
|
377
|
+
mcpServers: [
|
|
378
|
+
stdioMcpServer({
|
|
379
|
+
name: 'filesystem',
|
|
380
|
+
command: 'npx',
|
|
381
|
+
args: ['-y', '@modelcontextprotocol/server-filesystem', '.'],
|
|
382
|
+
}),
|
|
383
|
+
],
|
|
384
|
+
});
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
## Status and Roadmap
|
|
388
|
+
|
|
389
|
+
This project is still moving quickly. For the current GitHub-facing parity and follow-up worklist, see:
|
|
390
|
+
|
|
391
|
+
- [ACTOVIQ_AGENT_WORKLIST.md](./ACTOVIQ_AGENT_WORKLIST.md)
|
|
392
|
+
|
|
393
|
+
## Local Development
|
|
394
|
+
|
|
395
|
+
```bash
|
|
396
|
+
npm run typecheck
|
|
397
|
+
npm test
|
|
398
|
+
npm run build
|
|
399
|
+
npm run smoke
|
|
400
|
+
npm run example:quickstart
|
|
401
|
+
npm run example:session
|
|
402
|
+
npm run example:stream-loop
|
|
403
|
+
npm run example:actoviq-bridge-sdk
|
|
404
|
+
npm run example:actoviq-interactive-agent
|
|
405
|
+
npm run example:actoviq-introspection
|
|
406
|
+
npm run example:actoviq-file-tools
|
|
407
|
+
npm run example:actoviq-sessions
|
|
408
|
+
npm run example:actoviq-session-messages
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
`npm run smoke` loads `~/.actoviq/settings.json` and validates a live request.
|
|
412
|
+
|
|
413
|
+
## Contributing
|
|
414
|
+
|
|
415
|
+
This is still a fast-moving preview project. If you hit problems, see missing parity, or want to propose a cleaner API, please open an issue or submit a PR.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ActoviqSettingsData } from '../types.js';
|
|
2
|
+
import { clearLoadedJsonConfig, getLoadedJsonConfig } from './loadJsonConfigFile.js';
|
|
3
|
+
export interface LoadActoviqSettingsOptions {
|
|
4
|
+
settingsFile?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function loadActoviqSettings(options: string | LoadActoviqSettingsOptions): Promise<ActoviqSettingsData>;
|
|
7
|
+
export { clearLoadedJsonConfig, getLoadedJsonConfig };
|
|
8
|
+
//# sourceMappingURL=loadActoviqSettings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadActoviqSettings.d.ts","sourceRoot":"","sources":["../../../src/config/loadActoviqSettings.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EAEpB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,0BAA0B;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,GAAG,0BAA0B,GAC3C,OAAO,CAAC,mBAAmB,CAAC,CAW9B;AAED,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ConfigurationError } from '../errors.js';
|
|
2
|
+
import { clearLoadedJsonConfig, getLoadedJsonConfig, loadJsonConfigFile, } from './loadJsonConfigFile.js';
|
|
3
|
+
export async function loadActoviqSettings(options) {
|
|
4
|
+
const settingsFile = typeof options === 'string' ? options : options.settingsFile;
|
|
5
|
+
if (!settingsFile) {
|
|
6
|
+
throw new ConfigurationError('loadActoviqSettings now requires an explicit settingsFile path.');
|
|
7
|
+
}
|
|
8
|
+
return loadJsonConfigFile(settingsFile);
|
|
9
|
+
}
|
|
10
|
+
export { clearLoadedJsonConfig, getLoadedJsonConfig };
|
|
11
|
+
//# sourceMappingURL=loadActoviqSettings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadActoviqSettings.js","sourceRoot":"","sources":["../../../src/config/loadActoviqSettings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AAMjC,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAA4C;IAE5C,MAAM,YAAY,GAChB,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;IAE/D,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,kBAAkB,CAC1B,iEAAiE,CAClE,CAAC;IACJ,CAAC;IAED,OAAO,kBAAkB,CAAC,YAAY,CAAC,CAAC;AAC1C,CAAC;AAED,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { LoadedJsonConfigData } from '../types.js';
|
|
2
|
+
export interface LoadDefaultActoviqSettingsOptions {
|
|
3
|
+
homeDir?: string;
|
|
4
|
+
candidates?: string[];
|
|
5
|
+
}
|
|
6
|
+
export declare function loadDefaultActoviqSettings(options?: LoadDefaultActoviqSettingsOptions): Promise<LoadedJsonConfigData>;
|
|
7
|
+
//# sourceMappingURL=loadDefaultActoviqSettings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadDefaultActoviqSettings.d.ts","sourceRoot":"","sources":["../../../src/config/loadDefaultActoviqSettings.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGxD,MAAM,WAAW,iCAAiC;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAWD,wBAAsB,0BAA0B,CAC9C,OAAO,GAAE,iCAAsC,GAC9C,OAAO,CAAC,oBAAoB,CAAC,CAe/B"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { constants as fsConstants } from 'node:fs';
|
|
2
|
+
import { access } from 'node:fs/promises';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { ConfigurationError } from '../errors.js';
|
|
6
|
+
import { loadJsonConfigFile } from './loadJsonConfigFile.js';
|
|
7
|
+
async function pathExists(filePath) {
|
|
8
|
+
try {
|
|
9
|
+
await access(filePath, fsConstants.F_OK);
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export async function loadDefaultActoviqSettings(options = {}) {
|
|
17
|
+
const homeDir = options.homeDir ?? os.homedir();
|
|
18
|
+
const candidates = options.candidates ??
|
|
19
|
+
[path.join(homeDir, '.actoviq', 'settings.json')];
|
|
20
|
+
for (const candidate of candidates) {
|
|
21
|
+
if (await pathExists(candidate)) {
|
|
22
|
+
return loadJsonConfigFile(candidate);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
throw new ConfigurationError(`No default settings file was found. Checked: ${candidates.map((candidate) => `"${candidate}"`).join(', ')}`);
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=loadDefaultActoviqSettings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadDefaultActoviqSettings.js","sourceRoot":"","sources":["../../../src/config/loadDefaultActoviqSettings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,IAAI,WAAW,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAO7D,KAAK,UAAU,UAAU,CAAC,QAAgB;IACxC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,UAA6C,EAAE;IAE/C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IAChD,MAAM,UAAU,GACd,OAAO,CAAC,UAAU;QAClB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC;IAEpD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,MAAM,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAChC,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,MAAM,IAAI,kBAAkB,CAC1B,gDAAgD,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC7G,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { LoadedJsonConfigData } from '../types.js';
|
|
2
|
+
export interface LoadJsonConfigFileOptions {
|
|
3
|
+
filePath: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function loadJsonConfigFile(filePathOrOptions: string | LoadJsonConfigFileOptions): Promise<LoadedJsonConfigData>;
|
|
6
|
+
export declare function getLoadedJsonConfig(): LoadedJsonConfigData | null;
|
|
7
|
+
export declare function clearLoadedJsonConfig(): void;
|
|
8
|
+
//# sourceMappingURL=loadJsonConfigFile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadJsonConfigFile.d.ts","sourceRoot":"","sources":["../../../src/config/loadJsonConfigFile.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGxD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAID,wBAAsB,kBAAkB,CACtC,iBAAiB,EAAE,MAAM,GAAG,yBAAyB,GACpD,OAAO,CAAC,oBAAoB,CAAC,CAkC/B;AAED,wBAAgB,mBAAmB,IAAI,oBAAoB,GAAG,IAAI,CAEjE;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { ConfigurationError } from '../errors.js';
|
|
3
|
+
import { isRecord } from '../runtime/helpers.js';
|
|
4
|
+
let loadedJsonConfig = null;
|
|
5
|
+
export async function loadJsonConfigFile(filePathOrOptions) {
|
|
6
|
+
const filePath = typeof filePathOrOptions === 'string'
|
|
7
|
+
? filePathOrOptions
|
|
8
|
+
: filePathOrOptions.filePath;
|
|
9
|
+
if (!filePath) {
|
|
10
|
+
throw new ConfigurationError('A JSON config file path is required.');
|
|
11
|
+
}
|
|
12
|
+
try {
|
|
13
|
+
const rawText = await readFile(filePath, 'utf8');
|
|
14
|
+
const parsed = rawText.trim().length > 0 ? JSON.parse(rawText) : {};
|
|
15
|
+
if (!isRecord(parsed)) {
|
|
16
|
+
throw new ConfigurationError(`JSON config at "${filePath}" must contain a JSON object.`);
|
|
17
|
+
}
|
|
18
|
+
loadedJsonConfig = {
|
|
19
|
+
path: filePath,
|
|
20
|
+
exists: true,
|
|
21
|
+
env: extractEnv(parsed),
|
|
22
|
+
permissions: isRecord(parsed.permissions) ? parsed.permissions : undefined,
|
|
23
|
+
raw: parsed,
|
|
24
|
+
};
|
|
25
|
+
return structuredClone(loadedJsonConfig);
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
if (error instanceof SyntaxError) {
|
|
29
|
+
throw new ConfigurationError(`Failed to parse JSON config at "${filePath}".`, {
|
|
30
|
+
cause: error,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
throw error;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export function getLoadedJsonConfig() {
|
|
37
|
+
return loadedJsonConfig ? structuredClone(loadedJsonConfig) : null;
|
|
38
|
+
}
|
|
39
|
+
export function clearLoadedJsonConfig() {
|
|
40
|
+
loadedJsonConfig = null;
|
|
41
|
+
}
|
|
42
|
+
function extractEnv(parsed) {
|
|
43
|
+
if (isRecord(parsed.env)) {
|
|
44
|
+
return Object.fromEntries(Object.entries(parsed.env).filter((entry) => typeof entry[1] === 'string'));
|
|
45
|
+
}
|
|
46
|
+
return Object.fromEntries(Object.entries(parsed).filter((entry) => /^[A-Z0-9_]+$/.test(entry[0]) && typeof entry[1] === 'string'));
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=loadJsonConfigFile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadJsonConfigFile.js","sourceRoot":"","sources":["../../../src/config/loadJsonConfigFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAMjD,IAAI,gBAAgB,GAAgC,IAAI,CAAC;AAEzD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,iBAAqD;IAErD,MAAM,QAAQ,GACZ,OAAO,iBAAiB,KAAK,QAAQ;QACnC,CAAC,CAAC,iBAAiB;QACnB,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC;IAEjC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,kBAAkB,CAAC,sCAAsC,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,kBAAkB,CAAC,mBAAmB,QAAQ,+BAA+B,CAAC,CAAC;QAC3F,CAAC;QAED,gBAAgB,GAAG;YACjB,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,IAAI;YACZ,GAAG,EAAE,UAAU,CAAC,MAAM,CAAC;YACvB,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;YAC1E,GAAG,EAAE,MAAM;SACZ,CAAC;QAEF,OAAO,eAAe,CAAC,gBAAgB,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACjC,MAAM,IAAI,kBAAkB,CAAC,mCAAmC,QAAQ,IAAI,EAAE;gBAC5E,KAAK,EAAE,KAAK;aACb,CAAC,CAAC;QACL,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,gBAAgB,CAAC,CAAC,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,gBAAgB,GAAG,IAAI,CAAC;AAC1B,CAAC;AAED,SAAS,UAAU,CAAC,MAA+B;IACjD,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAC/B,CAAC,KAAK,EAA6B,EAAE,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,CACnE,CACF,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAC3B,CAAC,KAAK,EAA6B,EAAE,CACnC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,CAChE,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveRuntimeConfig.d.ts","sourceRoot":"","sources":["../../../src/config/resolveRuntimeConfig.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAuBhF,wBAAsB,oBAAoB,CACxC,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,qBAAqB,CAAC,CAqEhC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import os from 'node:os';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { ConfigurationError } from '../errors.js';
|
|
4
|
+
import { getLoadedJsonConfig } from './loadJsonConfigFile.js';
|
|
5
|
+
const LEGACY_ENV_KEYS = {
|
|
6
|
+
apiKey: ['ANTH', 'ROPIC_API_KEY'].join(''),
|
|
7
|
+
authToken: ['ANTH', 'ROPIC_AUTH_TOKEN'].join(''),
|
|
8
|
+
model: ['ANTH', 'ROPIC_MODEL'].join(''),
|
|
9
|
+
baseUrl: ['ANTH', 'ROPIC_BASE_URL'].join(''),
|
|
10
|
+
defaultSonnetModel: ['ANTH', 'ROPIC_DEFAULT_SONNET_MODEL'].join(''),
|
|
11
|
+
defaultOpusModel: ['ANTH', 'ROPIC_DEFAULT_OPUS_MODEL'].join(''),
|
|
12
|
+
defaultHaikuModel: ['ANTH', 'ROPIC_DEFAULT_HAIKU_MODEL'].join(''),
|
|
13
|
+
};
|
|
14
|
+
const FALLBACK_MODEL = ['cl', 'aude-sonnet-4-5-20250929'].join('');
|
|
15
|
+
function getConfigValue(source, primaryKey, legacyKey) {
|
|
16
|
+
return source[primaryKey] ?? (legacyKey ? source[legacyKey] : undefined);
|
|
17
|
+
}
|
|
18
|
+
export async function resolveRuntimeConfig(options = {}) {
|
|
19
|
+
const homeDir = options.homeDir ?? os.homedir();
|
|
20
|
+
const loadedConfig = getLoadedJsonConfig();
|
|
21
|
+
const envFromLoadedConfig = loadedConfig?.env ?? {};
|
|
22
|
+
const envFromProcess = process.env;
|
|
23
|
+
const apiKey = options.apiKey ??
|
|
24
|
+
getConfigValue(envFromProcess, 'ACTOVIQ_API_KEY', LEGACY_ENV_KEYS.apiKey) ??
|
|
25
|
+
getConfigValue(envFromLoadedConfig, 'ACTOVIQ_API_KEY', LEGACY_ENV_KEYS.apiKey);
|
|
26
|
+
const authToken = options.authToken ??
|
|
27
|
+
getConfigValue(envFromProcess, 'ACTOVIQ_AUTH_TOKEN', LEGACY_ENV_KEYS.authToken) ??
|
|
28
|
+
getConfigValue(envFromLoadedConfig, 'ACTOVIQ_AUTH_TOKEN', LEGACY_ENV_KEYS.authToken);
|
|
29
|
+
if (!options.modelApi && !apiKey && !authToken) {
|
|
30
|
+
throw new ConfigurationError(loadedConfig
|
|
31
|
+
? `No Actoviq credential was found. Checked process.env and "${loadedConfig.path}".`
|
|
32
|
+
: 'No Actoviq credential was found. Checked process.env and the preloaded JSON config. Call loadJsonConfigFile(...) before createAgentSdk() if you want to use a JSON file.');
|
|
33
|
+
}
|
|
34
|
+
const model = options.model ??
|
|
35
|
+
getConfigValue(envFromProcess, 'ACTOVIQ_MODEL', LEGACY_ENV_KEYS.model) ??
|
|
36
|
+
getConfigValue(envFromLoadedConfig, 'ACTOVIQ_MODEL', LEGACY_ENV_KEYS.model) ??
|
|
37
|
+
getConfigValue(envFromLoadedConfig, 'ACTOVIQ_DEFAULT_SONNET_MODEL', LEGACY_ENV_KEYS.defaultSonnetModel) ??
|
|
38
|
+
getConfigValue(envFromLoadedConfig, 'ACTOVIQ_DEFAULT_OPUS_MODEL', LEGACY_ENV_KEYS.defaultOpusModel) ??
|
|
39
|
+
getConfigValue(envFromLoadedConfig, 'ACTOVIQ_DEFAULT_HAIKU_MODEL', LEGACY_ENV_KEYS.defaultHaikuModel) ??
|
|
40
|
+
FALLBACK_MODEL;
|
|
41
|
+
return {
|
|
42
|
+
homeDir,
|
|
43
|
+
loadedConfigPath: loadedConfig?.path,
|
|
44
|
+
apiKey,
|
|
45
|
+
authToken,
|
|
46
|
+
baseURL: options.baseURL ??
|
|
47
|
+
getConfigValue(envFromProcess, 'ACTOVIQ_BASE_URL', LEGACY_ENV_KEYS.baseUrl) ??
|
|
48
|
+
getConfigValue(envFromLoadedConfig, 'ACTOVIQ_BASE_URL', LEGACY_ENV_KEYS.baseUrl),
|
|
49
|
+
model,
|
|
50
|
+
maxTokens: options.maxTokens ?? 2048,
|
|
51
|
+
temperature: options.temperature,
|
|
52
|
+
timeoutMs: options.timeoutMs ?? 120000,
|
|
53
|
+
maxRetries: options.maxRetries ?? 2,
|
|
54
|
+
workDir: options.workDir ?? process.cwd(),
|
|
55
|
+
sessionDirectory: options.sessionDirectory ?? path.join(homeDir, '.actoviq', 'actoviq-agent-sdk'),
|
|
56
|
+
clientName: options.clientName ?? 'actoviq-agent-sdk',
|
|
57
|
+
clientVersion: options.clientVersion ?? '0.1.0',
|
|
58
|
+
systemPrompt: options.systemPrompt,
|
|
59
|
+
maxToolIterations: options.maxToolIterations ?? 12,
|
|
60
|
+
userId: options.userId,
|
|
61
|
+
metadata: { ...(options.metadata ?? {}) },
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=resolveRuntimeConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveRuntimeConfig.js","sourceRoot":"","sources":["../../../src/config/resolveRuntimeConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export declare class ActoviqSdkError extends Error {
|
|
2
|
+
readonly code: string;
|
|
3
|
+
constructor(message: string, code?: string, options?: {
|
|
4
|
+
cause?: unknown;
|
|
5
|
+
});
|
|
6
|
+
}
|
|
7
|
+
export declare class ConfigurationError extends ActoviqSdkError {
|
|
8
|
+
constructor(message: string, options?: {
|
|
9
|
+
cause?: unknown;
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
export declare class SessionNotFoundError extends ActoviqSdkError {
|
|
13
|
+
constructor(sessionId: string);
|
|
14
|
+
}
|
|
15
|
+
export declare class ToolExecutionError extends ActoviqSdkError {
|
|
16
|
+
readonly toolName: string;
|
|
17
|
+
constructor(toolName: string, message: string, options?: {
|
|
18
|
+
cause?: unknown;
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
export declare class RunAbortedError extends ActoviqSdkError {
|
|
22
|
+
constructor(message?: string, options?: {
|
|
23
|
+
cause?: unknown;
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
export declare class ActoviqBridgeProcessError extends ActoviqSdkError {
|
|
27
|
+
readonly stderr?: string;
|
|
28
|
+
readonly exitCode?: number | null;
|
|
29
|
+
constructor(message: string, options?: {
|
|
30
|
+
cause?: unknown;
|
|
31
|
+
stderr?: string;
|
|
32
|
+
exitCode?: number | null;
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,OAAO,EAAE,MAAM,EAAE,IAAI,SAAsB,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAKvF;AAED,qBAAa,kBAAmB,SAAQ,eAAe;gBACzC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAG3D;AAED,qBAAa,oBAAqB,SAAQ,eAAe;gBAC3C,SAAS,EAAE,MAAM;CAG9B;AAED,qBAAa,kBAAmB,SAAQ,eAAe;IACrD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEd,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAI7E;AAED,qBAAa,eAAgB,SAAQ,eAAe;gBACtC,OAAO,SAAyB,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAG5E;AAED,qBAAa,yBAA0B,SAAQ,eAAe;IAC5D,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;gBAGhC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;CAM3E"}
|