@claushaas/ergon-clients 0.1.2

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 ADDED
@@ -0,0 +1 @@
1
+ MIT
package/README.md ADDED
@@ -0,0 +1,13 @@
1
+ # @claushaas/ergon-clients
2
+
3
+ Provider adapters for Ergon Flow execution clients.
4
+
5
+ Install:
6
+
7
+ ```bash
8
+ pnpm add @claushaas/ergon-clients
9
+ ```
10
+
11
+ Repository:
12
+
13
+ - https://github.com/claushaas/ergon-flow
@@ -0,0 +1,100 @@
1
+ import { type AgentResult, type ClientRequest, type ExecutionClient, type Provider } from '@claushaas/ergon-shared';
2
+ export interface SharedProviderConfig {
3
+ baseUrl?: string;
4
+ }
5
+ export interface RemoteModelProviderConfig extends SharedProviderConfig {
6
+ apiKey: string;
7
+ }
8
+ export interface OllamaProviderConfig extends SharedProviderConfig {
9
+ }
10
+ export interface CliAgentProviderConfig {
11
+ args?: string[];
12
+ command?: string;
13
+ env?: Record<string, string>;
14
+ }
15
+ export type ProviderConfig = CliAgentProviderConfig | OllamaProviderConfig | RemoteModelProviderConfig;
16
+ export type ProviderConfigMap = Partial<Record<Provider, ProviderConfig>>;
17
+ export interface OpenRouterClientOptions extends RemoteModelProviderConfig {
18
+ appName?: string;
19
+ defaultModel?: string;
20
+ fetch?: typeof fetch;
21
+ siteUrl?: string;
22
+ }
23
+ export interface OllamaClientOptions extends OllamaProviderConfig {
24
+ defaultModel?: string;
25
+ fetch?: typeof fetch;
26
+ }
27
+ export interface CliSpawnResult {
28
+ code: number | null;
29
+ signal: NodeJS.Signals | null;
30
+ stderr: string;
31
+ stdout: string;
32
+ }
33
+ export type CliSpawn = (options: {
34
+ args: string[];
35
+ command: string;
36
+ env?: Record<string, string>;
37
+ input: string;
38
+ signal?: AbortSignal;
39
+ }) => Promise<CliSpawnResult>;
40
+ export interface CliClientOptions extends CliAgentProviderConfig {
41
+ spawn?: CliSpawn;
42
+ }
43
+ export declare function validateProviderConfig(provider: Provider, config?: ProviderConfig): void;
44
+ export declare class OpenRouterModelClient implements ExecutionClient {
45
+ readonly provider: "openrouter";
46
+ private readonly apiKey;
47
+ private readonly appName?;
48
+ private readonly baseUrl;
49
+ private readonly defaultModel?;
50
+ private readonly fetchImpl;
51
+ private readonly siteUrl?;
52
+ constructor(options: OpenRouterClientOptions);
53
+ run(request: ClientRequest): Promise<AgentResult>;
54
+ }
55
+ export declare class OllamaModelClient implements ExecutionClient {
56
+ readonly provider: "ollama";
57
+ private readonly baseUrl;
58
+ private readonly defaultModel?;
59
+ private readonly fetchImpl;
60
+ constructor(options?: OllamaClientOptions);
61
+ run(request: ClientRequest): Promise<AgentResult>;
62
+ }
63
+ declare abstract class CliAgentClientBase implements ExecutionClient {
64
+ abstract readonly provider: Provider;
65
+ private readonly args;
66
+ private readonly command;
67
+ private readonly env?;
68
+ private readonly providerId;
69
+ private readonly spawnImpl;
70
+ protected constructor(provider: Provider, defaultCommand: string, defaultArgs: string[], options?: CliClientOptions);
71
+ run(request: ClientRequest): Promise<AgentResult>;
72
+ protected get displayName(): string;
73
+ }
74
+ export declare class CodexAgentClient extends CliAgentClientBase {
75
+ readonly provider: "codex";
76
+ constructor(options?: CliClientOptions);
77
+ }
78
+ export declare class ClaudeCodeAgentClient extends CliAgentClientBase {
79
+ readonly provider: "claude-code";
80
+ constructor(options?: CliClientOptions);
81
+ }
82
+ export declare class OpenClawAgentClient extends CliAgentClientBase {
83
+ readonly provider: "openclaw";
84
+ constructor(options?: CliClientOptions);
85
+ }
86
+ export declare function createDefaultClients(configs?: ProviderConfigMap): ExecutionClient[];
87
+ export declare function createClientRegistry(configs?: ProviderConfigMap): ClientRegistry;
88
+ export declare class ClientRegistry {
89
+ private readonly clients;
90
+ private readonly configs;
91
+ constructor(options?: {
92
+ clients?: ExecutionClient[];
93
+ configs?: ProviderConfigMap;
94
+ });
95
+ get(provider: Provider): ExecutionClient;
96
+ has(provider: Provider): boolean;
97
+ register(client: ExecutionClient): void;
98
+ }
99
+ export {};
100
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,479 @@
1
+ import { spawn as nodeSpawn } from 'node:child_process';
2
+ import { createChildProcessAbortController, } from '@claushaas/ergon-shared';
3
+ const OPENROUTER_ALLOWED_HOSTS = new Set(['openrouter.ai']);
4
+ const OLLAMA_ALLOWED_HOSTS = new Set(['127.0.0.1', '::1', 'localhost']);
5
+ const CLI_ALLOWED_COMMANDS = {
6
+ 'claude-code': ['claude', 'claude-code'],
7
+ codex: ['codex'],
8
+ openclaw: ['openclaw'],
9
+ };
10
+ const CLI_ALLOWED_ENV_PREFIXES = {
11
+ 'claude-code': 'CLAUDE_',
12
+ codex: 'CODEX_',
13
+ openclaw: 'OPENCLAW_',
14
+ };
15
+ function isNonEmptyString(value) {
16
+ return typeof value === 'string' && value.trim().length > 0;
17
+ }
18
+ function assertPlainObject(value, label) {
19
+ if (value === undefined) {
20
+ return undefined;
21
+ }
22
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
23
+ throw new Error(`${label} must be an object`);
24
+ }
25
+ return value;
26
+ }
27
+ function parseBaseUrl(baseUrl, provider) {
28
+ if (baseUrl === undefined) {
29
+ return undefined;
30
+ }
31
+ if (!isNonEmptyString(baseUrl)) {
32
+ throw new Error(`${provider} baseUrl must be a non-empty string`);
33
+ }
34
+ try {
35
+ return new URL(baseUrl);
36
+ }
37
+ catch {
38
+ throw new Error(`${provider} baseUrl must be a valid http(s) URL`);
39
+ }
40
+ }
41
+ function validateBaseUrl(baseUrl, provider) {
42
+ const parsedUrl = parseBaseUrl(baseUrl, provider);
43
+ if (!parsedUrl) {
44
+ return undefined;
45
+ }
46
+ if (parsedUrl.protocol !== 'http:' && parsedUrl.protocol !== 'https:') {
47
+ throw new Error(`${provider} baseUrl must use the http or https protocol`);
48
+ }
49
+ return parsedUrl;
50
+ }
51
+ function validateCliConfig(provider, config) {
52
+ if (!config) {
53
+ return;
54
+ }
55
+ if (config.command !== undefined && !isNonEmptyString(config.command)) {
56
+ throw new Error(`${provider} command must be a non-empty string`);
57
+ }
58
+ if (config.command !== undefined &&
59
+ !CLI_ALLOWED_COMMANDS[provider].includes(config.command)) {
60
+ throw new Error(`${provider} command must be one of: ${CLI_ALLOWED_COMMANDS[provider].join(', ')}`);
61
+ }
62
+ if (config.args !== undefined &&
63
+ (!Array.isArray(config.args) ||
64
+ config.args.some((value) => typeof value !== 'string'))) {
65
+ throw new Error(`${provider} args must be an array of strings`);
66
+ }
67
+ if (config.env !== undefined) {
68
+ const env = assertPlainObject(config.env, `${provider} env`);
69
+ if (env && Object.values(env).some((value) => typeof value !== 'string')) {
70
+ throw new Error(`${provider} env values must be strings`);
71
+ }
72
+ if (env &&
73
+ Object.keys(env).some((key) => !key.startsWith(CLI_ALLOWED_ENV_PREFIXES[provider]))) {
74
+ throw new Error(`${provider} env keys must start with ${CLI_ALLOWED_ENV_PREFIXES[provider]}`);
75
+ }
76
+ }
77
+ }
78
+ function validateOpenRouterBaseUrl(baseUrl) {
79
+ const parsedUrl = validateBaseUrl(baseUrl, 'openrouter');
80
+ if (!parsedUrl) {
81
+ return;
82
+ }
83
+ if (!OPENROUTER_ALLOWED_HOSTS.has(parsedUrl.hostname)) {
84
+ throw new Error('openrouter baseUrl must use an allowed host');
85
+ }
86
+ }
87
+ function validateOllamaBaseUrl(baseUrl) {
88
+ const parsedUrl = validateBaseUrl(baseUrl, 'ollama');
89
+ if (!parsedUrl) {
90
+ return;
91
+ }
92
+ if (!OLLAMA_ALLOWED_HOSTS.has(parsedUrl.hostname)) {
93
+ throw new Error('ollama baseUrl must use a local host');
94
+ }
95
+ }
96
+ function normalizeMessageContent(content) {
97
+ if (typeof content === 'string') {
98
+ return content;
99
+ }
100
+ if (Array.isArray(content)) {
101
+ return content
102
+ .map((part) => {
103
+ if (!part ||
104
+ typeof part !== 'object' ||
105
+ !('text' in part) ||
106
+ typeof part.text !== 'string') {
107
+ return '';
108
+ }
109
+ return part.text;
110
+ })
111
+ .filter((value) => value.length > 0)
112
+ .join('\n');
113
+ }
114
+ return '';
115
+ }
116
+ function resolveMessages(request, providerLabel) {
117
+ if (request.messages && request.messages.length > 0) {
118
+ return request.messages;
119
+ }
120
+ if (isNonEmptyString(request.prompt)) {
121
+ return [{ content: request.prompt, role: 'user' }];
122
+ }
123
+ throw new Error(`${providerLabel} request must include a prompt or messages`);
124
+ }
125
+ function resolveModel(request, defaultModel, providerLabel) {
126
+ const model = request.model ?? defaultModel;
127
+ if (!isNonEmptyString(model)) {
128
+ throw new Error(`${providerLabel} request must include a model`);
129
+ }
130
+ return model;
131
+ }
132
+ function resolveChoiceMessageText(payload, providerLabel) {
133
+ if (!payload || typeof payload !== 'object') {
134
+ throw new Error(`${providerLabel} response must be a JSON object`);
135
+ }
136
+ const choices = payload.choices;
137
+ if (!Array.isArray(choices) || choices.length === 0) {
138
+ throw new Error(`${providerLabel} response did not include any choices`);
139
+ }
140
+ const firstChoice = choices[0];
141
+ if (!firstChoice || typeof firstChoice !== 'object') {
142
+ throw new Error(`${providerLabel} response choice is invalid`);
143
+ }
144
+ const message = firstChoice.message;
145
+ if (!message || typeof message !== 'object') {
146
+ throw new Error(`${providerLabel} response did not include a message`);
147
+ }
148
+ const text = normalizeMessageContent(message.content).trim();
149
+ if (!text) {
150
+ throw new Error(`${providerLabel} response message content is empty`);
151
+ }
152
+ return text;
153
+ }
154
+ function resolveOllamaText(payload, providerLabel) {
155
+ if (!payload || typeof payload !== 'object') {
156
+ throw new Error(`${providerLabel} response must be a JSON object`);
157
+ }
158
+ const message = payload.message;
159
+ if (!message || typeof message !== 'object') {
160
+ throw new Error(`${providerLabel} response did not include a message`);
161
+ }
162
+ const text = normalizeMessageContent(message.content).trim();
163
+ if (!text) {
164
+ throw new Error(`${providerLabel} response message content is empty`);
165
+ }
166
+ return text;
167
+ }
168
+ function resolveCliInput(request, providerLabel) {
169
+ const messages = request.messages;
170
+ if (messages && messages.length > 0) {
171
+ return JSON.stringify(messages.map((message) => ({
172
+ content: message.content,
173
+ role: message.role,
174
+ })), null, 2);
175
+ }
176
+ if (isNonEmptyString(request.prompt)) {
177
+ return request.prompt;
178
+ }
179
+ throw new Error(`${providerLabel} request must include a prompt or messages`);
180
+ }
181
+ async function defaultSpawn(options) {
182
+ return await new Promise((resolve, reject) => {
183
+ const child = nodeSpawn(options.command, options.args, {
184
+ env: options.env ? { ...process.env, ...options.env } : process.env,
185
+ stdio: 'pipe',
186
+ });
187
+ let stdout = '';
188
+ let stderr = '';
189
+ let settled = false;
190
+ const { cleanupAbort, registerAbort } = createChildProcessAbortController({
191
+ abortMessage: 'Client command aborted',
192
+ child,
193
+ isSettled: () => settled,
194
+ onAbort: reject,
195
+ setSettled: () => {
196
+ settled = true;
197
+ },
198
+ signal: options.signal,
199
+ });
200
+ const settle = (handler) => {
201
+ if (settled) {
202
+ cleanupAbort();
203
+ return undefined;
204
+ }
205
+ settled = true;
206
+ cleanupAbort();
207
+ return handler();
208
+ };
209
+ child.stdout.on('data', (chunk) => {
210
+ stdout += chunk.toString();
211
+ });
212
+ child.stderr.on('data', (chunk) => {
213
+ stderr += chunk.toString();
214
+ });
215
+ child.on('error', (error) => {
216
+ settle(() => reject(error));
217
+ });
218
+ child.on('close', (code, signal) => {
219
+ settle(() => resolve({
220
+ code,
221
+ signal,
222
+ stderr,
223
+ stdout,
224
+ }));
225
+ });
226
+ if (registerAbort()) {
227
+ return;
228
+ }
229
+ child.stdin.write(options.input);
230
+ child.stdin.end();
231
+ });
232
+ }
233
+ export function validateProviderConfig(provider, config) {
234
+ const normalizedConfig = assertPlainObject(config, `${provider} config`);
235
+ switch (provider) {
236
+ case 'openrouter':
237
+ if (!isNonEmptyString(normalizedConfig?.apiKey)) {
238
+ throw new Error(`${provider} apiKey is required`);
239
+ }
240
+ validateOpenRouterBaseUrl(normalizedConfig.baseUrl);
241
+ return;
242
+ case 'ollama':
243
+ validateOllamaBaseUrl(normalizedConfig?.baseUrl);
244
+ return;
245
+ case 'claude-code':
246
+ case 'codex':
247
+ case 'openclaw':
248
+ validateCliConfig(provider, normalizedConfig);
249
+ return;
250
+ default: {
251
+ const exhaustive = provider;
252
+ void exhaustive;
253
+ }
254
+ }
255
+ }
256
+ export class OpenRouterModelClient {
257
+ provider = 'openrouter';
258
+ apiKey;
259
+ appName;
260
+ baseUrl;
261
+ defaultModel;
262
+ fetchImpl;
263
+ siteUrl;
264
+ constructor(options) {
265
+ validateProviderConfig('openrouter', options);
266
+ this.apiKey = options.apiKey;
267
+ this.appName = options.appName;
268
+ this.baseUrl = options.baseUrl ?? 'https://openrouter.ai/api/v1';
269
+ this.defaultModel = options.defaultModel;
270
+ this.fetchImpl = options.fetch ?? fetch;
271
+ this.siteUrl = options.siteUrl;
272
+ }
273
+ async run(request) {
274
+ const model = resolveModel(request, this.defaultModel, 'OpenRouter');
275
+ const response = await this.fetchImpl(`${this.baseUrl}/chat/completions`, {
276
+ body: JSON.stringify({
277
+ messages: resolveMessages(request, 'OpenRouter'),
278
+ model,
279
+ ...(request.json_mode
280
+ ? { response_format: { type: 'json_object' } }
281
+ : {}),
282
+ }),
283
+ headers: {
284
+ Authorization: `Bearer ${this.apiKey}`,
285
+ 'Content-Type': 'application/json',
286
+ ...(this.siteUrl ? { 'HTTP-Referer': this.siteUrl } : {}),
287
+ ...(this.appName ? { 'X-Title': this.appName } : {}),
288
+ },
289
+ method: 'POST',
290
+ signal: request.signal,
291
+ });
292
+ if (!response.ok) {
293
+ const detail = (await response.text()).trim();
294
+ throw new Error(detail
295
+ ? `OpenRouter request failed (${response.status}): ${detail}`
296
+ : `OpenRouter request failed (${response.status})`);
297
+ }
298
+ const raw = await response.json();
299
+ return {
300
+ raw,
301
+ text: resolveChoiceMessageText(raw, 'OpenRouter'),
302
+ };
303
+ }
304
+ }
305
+ export class OllamaModelClient {
306
+ provider = 'ollama';
307
+ baseUrl;
308
+ defaultModel;
309
+ fetchImpl;
310
+ constructor(options = {}) {
311
+ validateProviderConfig('ollama', options);
312
+ this.baseUrl = options.baseUrl ?? 'http://127.0.0.1:11434';
313
+ this.defaultModel = options.defaultModel;
314
+ this.fetchImpl = options.fetch ?? fetch;
315
+ }
316
+ async run(request) {
317
+ const model = resolveModel(request, this.defaultModel, 'Ollama');
318
+ const response = await this.fetchImpl(`${this.baseUrl}/api/chat`, {
319
+ body: JSON.stringify({
320
+ format: request.json_mode ? 'json' : undefined,
321
+ messages: resolveMessages(request, 'Ollama'),
322
+ model,
323
+ stream: false,
324
+ }),
325
+ headers: {
326
+ 'Content-Type': 'application/json',
327
+ },
328
+ method: 'POST',
329
+ signal: request.signal,
330
+ });
331
+ if (!response.ok) {
332
+ const detail = (await response.text()).trim();
333
+ throw new Error(detail
334
+ ? `Ollama request failed (${response.status}): ${detail}`
335
+ : `Ollama request failed (${response.status})`);
336
+ }
337
+ const raw = await response.json();
338
+ return {
339
+ raw,
340
+ text: resolveOllamaText(raw, 'Ollama'),
341
+ };
342
+ }
343
+ }
344
+ class CliAgentClientBase {
345
+ args;
346
+ command;
347
+ env;
348
+ providerId;
349
+ spawnImpl;
350
+ constructor(provider, defaultCommand, defaultArgs, options = {}) {
351
+ validateProviderConfig(provider, options);
352
+ this.providerId = provider;
353
+ this.command = options.command ?? defaultCommand;
354
+ this.args = options.args ?? defaultArgs;
355
+ this.env = options.env;
356
+ this.spawnImpl = options.spawn ?? defaultSpawn;
357
+ }
358
+ async run(request) {
359
+ const result = await this.spawnImpl({
360
+ args: this.args,
361
+ command: this.command,
362
+ env: this.env,
363
+ input: resolveCliInput(request, this.displayName),
364
+ signal: request.signal,
365
+ });
366
+ if (result.code !== 0) {
367
+ const detail = result.stderr.trim() || result.stdout.trim();
368
+ throw new Error(detail
369
+ ? `${this.displayName} command failed (${String(result.code)}): ${detail}`
370
+ : `${this.displayName} command failed (${String(result.code)})`);
371
+ }
372
+ const text = result.stdout.trim();
373
+ if (!text) {
374
+ throw new Error(`${this.displayName} command produced empty output`);
375
+ }
376
+ return {
377
+ raw: result,
378
+ text,
379
+ };
380
+ }
381
+ get displayName() {
382
+ switch (this.providerId) {
383
+ case 'claude-code':
384
+ return 'Claude Code';
385
+ case 'codex':
386
+ return 'Codex';
387
+ case 'openclaw':
388
+ return 'OpenClaw';
389
+ default: {
390
+ return this.providerId;
391
+ }
392
+ }
393
+ }
394
+ }
395
+ export class CodexAgentClient extends CliAgentClientBase {
396
+ provider = 'codex';
397
+ constructor(options = {}) {
398
+ super('codex', 'codex', [], options);
399
+ }
400
+ }
401
+ export class ClaudeCodeAgentClient extends CliAgentClientBase {
402
+ provider = 'claude-code';
403
+ constructor(options = {}) {
404
+ super('claude-code', 'claude', [], options);
405
+ }
406
+ }
407
+ export class OpenClawAgentClient extends CliAgentClientBase {
408
+ provider = 'openclaw';
409
+ constructor(options = {}) {
410
+ super('openclaw', 'openclaw', ['agent'], options);
411
+ }
412
+ }
413
+ const CLIENT_FACTORIES = {
414
+ 'claude-code': (config) => new ClaudeCodeAgentClient(config),
415
+ codex: (config) => new CodexAgentClient(config),
416
+ ollama: (config) => new OllamaModelClient(config),
417
+ openclaw: (config) => new OpenClawAgentClient(config),
418
+ openrouter: (config) => new OpenRouterModelClient(config),
419
+ };
420
+ export function createDefaultClients(configs = {}) {
421
+ return Object.entries(configs)
422
+ .map(([provider, config]) => {
423
+ if (!config) {
424
+ return undefined;
425
+ }
426
+ const factory = CLIENT_FACTORIES[provider];
427
+ return factory ? factory(config) : undefined;
428
+ })
429
+ .filter((client) => client !== undefined);
430
+ }
431
+ export function createClientRegistry(configs = {}) {
432
+ return new ClientRegistry({
433
+ clients: createDefaultClients(configs),
434
+ configs,
435
+ });
436
+ }
437
+ export class ClientRegistry {
438
+ clients = new Map();
439
+ configs;
440
+ constructor(options = {}) {
441
+ this.configs = options.configs ?? {};
442
+ for (const [provider, config] of Object.entries(this.configs)) {
443
+ if (config) {
444
+ validateProviderConfig(provider, config);
445
+ }
446
+ }
447
+ for (const client of options.clients ?? []) {
448
+ this.register(client);
449
+ }
450
+ }
451
+ get(provider) {
452
+ const client = this.clients.get(provider);
453
+ if (client) {
454
+ return client;
455
+ }
456
+ const config = this.configs[provider];
457
+ const factory = CLIENT_FACTORIES[provider];
458
+ if (config && factory) {
459
+ const created = factory(config);
460
+ this.clients.set(provider, created);
461
+ return created;
462
+ }
463
+ throw new Error(`No client registered for provider "${provider}"`);
464
+ }
465
+ has(provider) {
466
+ return this.clients.has(provider);
467
+ }
468
+ register(client) {
469
+ if (this.clients.has(client.provider)) {
470
+ throw new Error(`Client already registered for provider "${client.provider}"`);
471
+ }
472
+ const config = this.configs[client.provider];
473
+ if (config) {
474
+ validateProviderConfig(client.provider, config);
475
+ }
476
+ this.clients.set(client.provider, client);
477
+ }
478
+ }
479
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "bugs": {
3
+ "url": "https://github.com/claushaas/ergon-flow/issues"
4
+ },
5
+ "dependencies": {
6
+ "@claushaas/ergon-shared": "0.1.2"
7
+ },
8
+ "description": "Provider adapters for Ergon Flow execution clients",
9
+ "engines": {
10
+ "node": ">=22"
11
+ },
12
+ "files": [
13
+ "dist"
14
+ ],
15
+ "homepage": "https://github.com/claushaas/ergon-flow#readme",
16
+ "keywords": [
17
+ "ergon",
18
+ "workflow",
19
+ "agents",
20
+ "clients",
21
+ "providers"
22
+ ],
23
+ "license": "MIT",
24
+ "main": "dist/index.js",
25
+ "name": "@claushaas/ergon-clients",
26
+ "publishConfig": {
27
+ "access": "public"
28
+ },
29
+ "repository": {
30
+ "directory": "packages/clients",
31
+ "type": "git",
32
+ "url": "git+https://github.com/claushaas/ergon-flow.git"
33
+ },
34
+ "type": "module",
35
+ "types": "dist/index.d.ts",
36
+ "version": "0.1.2",
37
+ "scripts": {
38
+ "build": "tsc --build",
39
+ "test": "vitest run --root ../.. packages/clients/tests"
40
+ }
41
+ }