@sowonai/crewx-sdk 0.1.0-dev.0 → 0.1.0-dev.1
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/README.md +115 -0
- package/dist/core/parallel/index.d.ts +2 -0
- package/dist/core/parallel/index.js +8 -0
- package/dist/core/parallel/index.js.map +1 -0
- package/dist/core/parallel/parallel-runner.d.ts +16 -0
- package/dist/core/parallel/parallel-runner.js +230 -0
- package/dist/core/parallel/parallel-runner.js.map +1 -0
- package/dist/core/parallel/types.d.ts +41 -0
- package/dist/core/parallel/types.js +3 -0
- package/dist/core/parallel/types.js.map +1 -0
- package/dist/core/providers/base-ai.provider.d.ts +12 -26
- package/dist/core/providers/base-ai.provider.js +37 -30
- package/dist/core/providers/base-ai.provider.js.map +1 -1
- package/dist/core/providers/base-ai.types.d.ts +15 -0
- package/dist/core/providers/base-ai.types.js +3 -0
- package/dist/core/providers/base-ai.types.js.map +1 -0
- package/dist/core/providers/claude.provider.d.ts +4 -3
- package/dist/core/providers/claude.provider.js +16 -33
- package/dist/core/providers/claude.provider.js.map +1 -1
- package/dist/core/providers/codex.provider.d.ts +2 -1
- package/dist/core/providers/codex.provider.js +4 -18
- package/dist/core/providers/codex.provider.js.map +1 -1
- package/dist/core/providers/copilot.provider.d.ts +4 -3
- package/dist/core/providers/copilot.provider.js +10 -28
- package/dist/core/providers/copilot.provider.js.map +1 -1
- package/dist/core/providers/gemini.provider.d.ts +4 -3
- package/dist/core/providers/gemini.provider.js +18 -36
- package/dist/core/providers/gemini.provider.js.map +1 -1
- package/dist/core/providers/index.d.ts +5 -0
- package/dist/core/providers/index.js +14 -0
- package/dist/core/providers/index.js.map +1 -0
- package/dist/core/providers/tool-call.types.d.ts +39 -0
- package/dist/core/providers/tool-call.types.js +3 -0
- package/dist/core/providers/tool-call.types.js.map +1 -0
- package/dist/core/remote/index.d.ts +3 -0
- package/dist/core/remote/index.js +20 -0
- package/dist/core/remote/index.js.map +1 -0
- package/dist/core/remote/remote-agent-manager.d.ts +24 -0
- package/dist/core/remote/remote-agent-manager.js +195 -0
- package/dist/core/remote/remote-agent-manager.js.map +1 -0
- package/dist/core/remote/remote-transport.d.ts +15 -0
- package/dist/core/remote/remote-transport.js +70 -0
- package/dist/core/remote/remote-transport.js.map +1 -0
- package/dist/core/remote/types.d.ts +79 -0
- package/dist/core/remote/types.js +3 -0
- package/dist/core/remote/types.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +19 -1
- package/dist/index.js.map +1 -1
- package/dist/utils/base-message-formatter.d.ts +32 -0
- package/dist/utils/base-message-formatter.js +170 -0
- package/dist/utils/base-message-formatter.js.map +1 -0
- package/package.json +1 -1
- package/dist/core/providers/dynamic-provider.factory.d.ts +0 -55
- package/dist/core/providers/dynamic-provider.factory.js +0 -587
- package/dist/core/providers/dynamic-provider.factory.js.map +0 -1
- package/dist/version.d.ts +0 -1
- package/dist/version.js +0 -17
- package/dist/version.js.map +0 -1
package/README.md
CHANGED
|
@@ -433,6 +433,121 @@ export class DatabaseConversationProvider implements IConversationHistoryProvide
|
|
|
433
433
|
}
|
|
434
434
|
```
|
|
435
435
|
|
|
436
|
+
## Shared SDK/CLI Integration (WBS-9)
|
|
437
|
+
|
|
438
|
+
The SDK provides reusable components that were previously CLI-only. These abstractions enable custom platform integrations while maintaining consistency.
|
|
439
|
+
|
|
440
|
+
### Message Formatting (Phase 1)
|
|
441
|
+
|
|
442
|
+
Create platform-specific message formatters:
|
|
443
|
+
|
|
444
|
+
```typescript
|
|
445
|
+
import {
|
|
446
|
+
BaseMessageFormatter,
|
|
447
|
+
StructuredMessage,
|
|
448
|
+
FormatterOptions
|
|
449
|
+
} from '@sowonai/crewx-sdk';
|
|
450
|
+
|
|
451
|
+
class CustomFormatter extends BaseMessageFormatter {
|
|
452
|
+
formatMessage(msg: StructuredMessage, options: FormatterOptions): string {
|
|
453
|
+
// Implement custom formatting
|
|
454
|
+
return `[${msg.userId}] ${msg.text}`;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
const formatter = new CustomFormatter();
|
|
459
|
+
const history = formatter.formatHistory(messages, {
|
|
460
|
+
includeUserId: true,
|
|
461
|
+
includeTimestamp: true,
|
|
462
|
+
});
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
### AI Providers (Phase 2)
|
|
466
|
+
|
|
467
|
+
Use built-in providers or create custom ones:
|
|
468
|
+
|
|
469
|
+
```typescript
|
|
470
|
+
import {
|
|
471
|
+
BaseAIProvider,
|
|
472
|
+
ClaudeProvider,
|
|
473
|
+
GeminiProvider,
|
|
474
|
+
CopilotProvider,
|
|
475
|
+
CodexProvider,
|
|
476
|
+
type LoggerLike,
|
|
477
|
+
type BaseAIProviderOptions
|
|
478
|
+
} from '@sowonai/crewx-sdk';
|
|
479
|
+
|
|
480
|
+
// Use built-in provider
|
|
481
|
+
const claude = new ClaudeProvider({
|
|
482
|
+
apiKey: process.env.ANTHROPIC_API_KEY,
|
|
483
|
+
logger: console,
|
|
484
|
+
enableToolUse: true,
|
|
485
|
+
model: 'claude-3-5-sonnet-20241022',
|
|
486
|
+
});
|
|
487
|
+
|
|
488
|
+
// Custom provider
|
|
489
|
+
class MyProvider extends BaseAIProvider {
|
|
490
|
+
constructor(options: BaseAIProviderOptions) {
|
|
491
|
+
super(options);
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
async query(prompt: string, options: AIQueryOptions): Promise<AIResponse> {
|
|
495
|
+
// Custom implementation
|
|
496
|
+
return { content: 'Response', metadata: {} };
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
### Remote Agent Management (Phase 3)
|
|
502
|
+
|
|
503
|
+
Manage remote agent communications:
|
|
504
|
+
|
|
505
|
+
```typescript
|
|
506
|
+
import {
|
|
507
|
+
RemoteAgentManager,
|
|
508
|
+
FetchRemoteTransport,
|
|
509
|
+
MockRemoteTransport,
|
|
510
|
+
type RemoteAgentConfig
|
|
511
|
+
} from '@sowonai/crewx-sdk';
|
|
512
|
+
|
|
513
|
+
// Production transport
|
|
514
|
+
const transport = new FetchRemoteTransport({
|
|
515
|
+
timeout: 30000,
|
|
516
|
+
headers: { 'Authorization': `Bearer ${token}` },
|
|
517
|
+
});
|
|
518
|
+
|
|
519
|
+
// Testing transport
|
|
520
|
+
const mockTransport = new MockRemoteTransport({
|
|
521
|
+
'agent-1': { content: 'Mocked response', success: true },
|
|
522
|
+
});
|
|
523
|
+
|
|
524
|
+
const manager = new RemoteAgentManager({
|
|
525
|
+
transport,
|
|
526
|
+
enableLogging: true,
|
|
527
|
+
logger: console,
|
|
528
|
+
});
|
|
529
|
+
|
|
530
|
+
// Load remote agent
|
|
531
|
+
await manager.loadAgent({
|
|
532
|
+
id: 'backend',
|
|
533
|
+
url: 'https://api.example.com/agent',
|
|
534
|
+
apiKey: process.env.REMOTE_API_KEY,
|
|
535
|
+
tools: ['search', 'analyze'],
|
|
536
|
+
});
|
|
537
|
+
|
|
538
|
+
// Query remote agent
|
|
539
|
+
const result = await manager.queryAgent('backend', 'Analyze codebase');
|
|
540
|
+
console.log(result.content);
|
|
541
|
+
```
|
|
542
|
+
|
|
543
|
+
### Migration Guide
|
|
544
|
+
|
|
545
|
+
For detailed migration instructions from CLI to SDK, see:
|
|
546
|
+
- [WBS-9 Phase 1-5 Integration Guide](../../docs/wbs-9-phase1-5-integration.md)
|
|
547
|
+
- [Phase 1: Message Formatter](../../docs/wbs-9-phase1-migration.md)
|
|
548
|
+
- [Phase 2: AI Providers](../../docs/wbs-9-phase2-migration.md)
|
|
549
|
+
- [Phase 3: Remote Agents](../../docs/wbs-9-phase3-migration.md)
|
|
550
|
+
|
|
436
551
|
## Advanced Usage
|
|
437
552
|
|
|
438
553
|
### Using Internal APIs
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createDefaultParallelRunner = exports.ParallelRunnerTimeoutError = exports.ParallelRunner = void 0;
|
|
4
|
+
var parallel_runner_1 = require("./parallel-runner");
|
|
5
|
+
Object.defineProperty(exports, "ParallelRunner", { enumerable: true, get: function () { return parallel_runner_1.ParallelRunner; } });
|
|
6
|
+
Object.defineProperty(exports, "ParallelRunnerTimeoutError", { enumerable: true, get: function () { return parallel_runner_1.ParallelRunnerTimeoutError; } });
|
|
7
|
+
Object.defineProperty(exports, "createDefaultParallelRunner", { enumerable: true, get: function () { return parallel_runner_1.createDefaultParallelRunner; } });
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/parallel/index.ts"],"names":[],"mappings":";;;AAAA,qDAI2B;AAHzB,iHAAA,cAAc,OAAA;AACd,6HAAA,0BAA0B,OAAA;AAC1B,8HAAA,2BAA2B,OAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ParallelRunnerMetrics, ParallelRunnerOptions, Task, TaskResult } from './types';
|
|
2
|
+
export declare class ParallelRunnerTimeoutError extends Error {
|
|
3
|
+
readonly taskId: string;
|
|
4
|
+
readonly timeoutMs: number;
|
|
5
|
+
constructor(taskId: string, timeoutMs: number);
|
|
6
|
+
}
|
|
7
|
+
export declare class ParallelRunner {
|
|
8
|
+
private readonly defaults;
|
|
9
|
+
private metrics;
|
|
10
|
+
constructor(defaults?: ParallelRunnerOptions);
|
|
11
|
+
run<T>(tasks: Task<T>[], options?: ParallelRunnerOptions<T>): Promise<TaskResult<T>[]>;
|
|
12
|
+
getMetrics(): ParallelRunnerMetrics;
|
|
13
|
+
private mergeOptions;
|
|
14
|
+
private mergeCallbacks;
|
|
15
|
+
}
|
|
16
|
+
export declare const createDefaultParallelRunner: () => ParallelRunner;
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createDefaultParallelRunner = exports.ParallelRunner = exports.ParallelRunnerTimeoutError = void 0;
|
|
4
|
+
const node_perf_hooks_1 = require("node:perf_hooks");
|
|
5
|
+
class ParallelRunnerTimeoutError extends Error {
|
|
6
|
+
constructor(taskId, timeoutMs) {
|
|
7
|
+
super(`Task ${taskId} timed out after ${timeoutMs}ms`);
|
|
8
|
+
this.taskId = taskId;
|
|
9
|
+
this.timeoutMs = timeoutMs;
|
|
10
|
+
this.name = 'ParallelRunnerTimeoutError';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.ParallelRunnerTimeoutError = ParallelRunnerTimeoutError;
|
|
14
|
+
class ParallelRunner {
|
|
15
|
+
constructor(defaults = {}) {
|
|
16
|
+
this.defaults = defaults;
|
|
17
|
+
this.metrics = {
|
|
18
|
+
totalTasks: 0,
|
|
19
|
+
startedTasks: 0,
|
|
20
|
+
completedTasks: 0,
|
|
21
|
+
successCount: 0,
|
|
22
|
+
failureCount: 0,
|
|
23
|
+
totalDurationMs: 0,
|
|
24
|
+
averageDurationMs: 0,
|
|
25
|
+
throughput: 0,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
async run(tasks, options = {}) {
|
|
29
|
+
if (!Array.isArray(tasks)) {
|
|
30
|
+
throw new TypeError('ParallelRunner.run expects an array of tasks');
|
|
31
|
+
}
|
|
32
|
+
if (tasks.length === 0) {
|
|
33
|
+
this.metrics = {
|
|
34
|
+
totalTasks: 0,
|
|
35
|
+
startedTasks: 0,
|
|
36
|
+
completedTasks: 0,
|
|
37
|
+
successCount: 0,
|
|
38
|
+
failureCount: 0,
|
|
39
|
+
totalDurationMs: 0,
|
|
40
|
+
averageDurationMs: 0,
|
|
41
|
+
throughput: 0,
|
|
42
|
+
};
|
|
43
|
+
return [];
|
|
44
|
+
}
|
|
45
|
+
const merged = this.mergeOptions(options);
|
|
46
|
+
const maxConcurrency = Math.max(1, merged.maxConcurrency ?? 5);
|
|
47
|
+
const timeoutMs = merged.timeoutMs;
|
|
48
|
+
const failFast = merged.failFast ?? false;
|
|
49
|
+
const callbacks = merged.callbacks;
|
|
50
|
+
const evaluateTaskSuccess = merged.evaluateTaskSuccess ?? (() => true);
|
|
51
|
+
const results = [];
|
|
52
|
+
let successCount = 0;
|
|
53
|
+
let failureCount = 0;
|
|
54
|
+
let startedTasks = 0;
|
|
55
|
+
let aborted = false;
|
|
56
|
+
let cursor = 0;
|
|
57
|
+
const startedAt = node_perf_hooks_1.performance.now();
|
|
58
|
+
const executeTask = async (task) => {
|
|
59
|
+
if (callbacks?.onTaskStart) {
|
|
60
|
+
await callbacks.onTaskStart(task);
|
|
61
|
+
}
|
|
62
|
+
startedTasks += 1;
|
|
63
|
+
const controller = new AbortController();
|
|
64
|
+
const context = { signal: controller.signal };
|
|
65
|
+
let timeoutId;
|
|
66
|
+
let timeoutPromise;
|
|
67
|
+
if (typeof timeoutMs === 'number' && Number.isFinite(timeoutMs) && timeoutMs > 0) {
|
|
68
|
+
timeoutPromise = new Promise((_, reject) => {
|
|
69
|
+
timeoutId = setTimeout(() => {
|
|
70
|
+
const timeoutError = new ParallelRunnerTimeoutError(task.id, timeoutMs);
|
|
71
|
+
controller.abort(timeoutError);
|
|
72
|
+
reject(timeoutError);
|
|
73
|
+
}, timeoutMs);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
const startedAtTask = node_perf_hooks_1.performance.now();
|
|
77
|
+
const runPromise = task.run(context);
|
|
78
|
+
const combinedPromise = timeoutPromise
|
|
79
|
+
? Promise.race([runPromise, timeoutPromise])
|
|
80
|
+
: runPromise;
|
|
81
|
+
try {
|
|
82
|
+
const value = await combinedPromise;
|
|
83
|
+
const finishedAtTask = node_perf_hooks_1.performance.now();
|
|
84
|
+
const durationMs = finishedAtTask - startedAtTask;
|
|
85
|
+
const success = evaluateTaskSuccess(value, task);
|
|
86
|
+
const result = {
|
|
87
|
+
taskId: task.id,
|
|
88
|
+
success,
|
|
89
|
+
value,
|
|
90
|
+
durationMs,
|
|
91
|
+
startedAt: startedAtTask,
|
|
92
|
+
finishedAt: finishedAtTask,
|
|
93
|
+
metadata: task.metadata,
|
|
94
|
+
aborted: false,
|
|
95
|
+
};
|
|
96
|
+
results.push(result);
|
|
97
|
+
success ? (successCount += 1) : (failureCount += 1);
|
|
98
|
+
if (callbacks?.onTaskComplete) {
|
|
99
|
+
await callbacks.onTaskComplete(result);
|
|
100
|
+
}
|
|
101
|
+
if (failFast && !success) {
|
|
102
|
+
aborted = true;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
catch (rawError) {
|
|
106
|
+
const finishedAtTask = node_perf_hooks_1.performance.now();
|
|
107
|
+
const durationMs = finishedAtTask - startedAtTask;
|
|
108
|
+
const error = rawError instanceof Error ? rawError : new Error(String(rawError));
|
|
109
|
+
const result = {
|
|
110
|
+
taskId: task.id,
|
|
111
|
+
success: false,
|
|
112
|
+
error,
|
|
113
|
+
durationMs,
|
|
114
|
+
startedAt: startedAtTask,
|
|
115
|
+
finishedAt: finishedAtTask,
|
|
116
|
+
metadata: task.metadata,
|
|
117
|
+
aborted: controller.signal.aborted,
|
|
118
|
+
};
|
|
119
|
+
results.push(result);
|
|
120
|
+
failureCount += 1;
|
|
121
|
+
if (callbacks?.onError) {
|
|
122
|
+
await callbacks.onError(task, error, durationMs);
|
|
123
|
+
}
|
|
124
|
+
if (failFast) {
|
|
125
|
+
aborted = true;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
finally {
|
|
129
|
+
if (timeoutId) {
|
|
130
|
+
clearTimeout(timeoutId);
|
|
131
|
+
}
|
|
132
|
+
if (timeoutPromise) {
|
|
133
|
+
runPromise.catch(() => undefined);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
const worker = async () => {
|
|
138
|
+
while (true) {
|
|
139
|
+
if (aborted) {
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
const currentIndex = cursor;
|
|
143
|
+
if (currentIndex >= tasks.length) {
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
146
|
+
cursor += 1;
|
|
147
|
+
const task = tasks[currentIndex];
|
|
148
|
+
if (!task) {
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
await executeTask(task);
|
|
152
|
+
if (aborted) {
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
const workers = [];
|
|
158
|
+
const workerCount = Math.min(maxConcurrency, tasks.length);
|
|
159
|
+
for (let i = 0; i < workerCount; i += 1) {
|
|
160
|
+
workers.push(worker());
|
|
161
|
+
}
|
|
162
|
+
await Promise.all(workers);
|
|
163
|
+
const finishedAt = node_perf_hooks_1.performance.now();
|
|
164
|
+
const totalDurationMs = finishedAt - startedAt;
|
|
165
|
+
const averageDurationMs = results.length
|
|
166
|
+
? results.reduce((sum, item) => sum + item.durationMs, 0) / results.length
|
|
167
|
+
: 0;
|
|
168
|
+
const throughput = totalDurationMs > 0
|
|
169
|
+
? (results.length / (totalDurationMs / 1000))
|
|
170
|
+
: results.length;
|
|
171
|
+
this.metrics = {
|
|
172
|
+
totalTasks: tasks.length,
|
|
173
|
+
startedTasks,
|
|
174
|
+
completedTasks: results.length,
|
|
175
|
+
successCount,
|
|
176
|
+
failureCount,
|
|
177
|
+
totalDurationMs,
|
|
178
|
+
averageDurationMs,
|
|
179
|
+
throughput,
|
|
180
|
+
};
|
|
181
|
+
return results;
|
|
182
|
+
}
|
|
183
|
+
getMetrics() {
|
|
184
|
+
return this.metrics;
|
|
185
|
+
}
|
|
186
|
+
mergeOptions(options) {
|
|
187
|
+
return {
|
|
188
|
+
maxConcurrency: options.maxConcurrency ?? this.defaults.maxConcurrency,
|
|
189
|
+
timeoutMs: options.timeoutMs ?? this.defaults.timeoutMs,
|
|
190
|
+
failFast: options.failFast ?? this.defaults.failFast,
|
|
191
|
+
evaluateTaskSuccess: options.evaluateTaskSuccess ?? this.defaults.evaluateTaskSuccess,
|
|
192
|
+
callbacks: this.mergeCallbacks(this.defaults.callbacks, options.callbacks),
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
mergeCallbacks(base, override) {
|
|
196
|
+
if (!base && !override) {
|
|
197
|
+
return undefined;
|
|
198
|
+
}
|
|
199
|
+
return {
|
|
200
|
+
onTaskStart: async (task) => {
|
|
201
|
+
if (base?.onTaskStart) {
|
|
202
|
+
await base.onTaskStart(task);
|
|
203
|
+
}
|
|
204
|
+
if (override?.onTaskStart) {
|
|
205
|
+
await override.onTaskStart(task);
|
|
206
|
+
}
|
|
207
|
+
},
|
|
208
|
+
onTaskComplete: async (result) => {
|
|
209
|
+
if (base?.onTaskComplete) {
|
|
210
|
+
await base.onTaskComplete(result);
|
|
211
|
+
}
|
|
212
|
+
if (override?.onTaskComplete) {
|
|
213
|
+
await override.onTaskComplete(result);
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
onError: async (task, error, durationMs) => {
|
|
217
|
+
if (base?.onError) {
|
|
218
|
+
await base.onError(task, error, durationMs);
|
|
219
|
+
}
|
|
220
|
+
if (override?.onError) {
|
|
221
|
+
await override.onError(task, error, durationMs);
|
|
222
|
+
}
|
|
223
|
+
},
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
exports.ParallelRunner = ParallelRunner;
|
|
228
|
+
const createDefaultParallelRunner = () => new ParallelRunner();
|
|
229
|
+
exports.createDefaultParallelRunner = createDefaultParallelRunner;
|
|
230
|
+
//# sourceMappingURL=parallel-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parallel-runner.js","sourceRoot":"","sources":["../../../src/core/parallel/parallel-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export interface Task<T> {
|
|
2
|
+
id: string;
|
|
3
|
+
metadata?: Record<string, unknown>;
|
|
4
|
+
run: (context: TaskExecutionContext) => Promise<T>;
|
|
5
|
+
}
|
|
6
|
+
export interface TaskExecutionContext {
|
|
7
|
+
signal: AbortSignal;
|
|
8
|
+
}
|
|
9
|
+
export interface TaskResult<T> {
|
|
10
|
+
taskId: string;
|
|
11
|
+
success: boolean;
|
|
12
|
+
value?: T;
|
|
13
|
+
error?: Error;
|
|
14
|
+
durationMs: number;
|
|
15
|
+
startedAt: number;
|
|
16
|
+
finishedAt: number;
|
|
17
|
+
metadata?: Record<string, unknown>;
|
|
18
|
+
aborted?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface TaskCallbacks<T> {
|
|
21
|
+
onTaskStart?: (task: Task<T>) => void | Promise<void>;
|
|
22
|
+
onTaskComplete?: (result: TaskResult<T>) => void | Promise<void>;
|
|
23
|
+
onError?: (task: Task<T>, error: Error, durationMs: number) => void | Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
export interface ParallelRunnerOptions<T = unknown> {
|
|
26
|
+
maxConcurrency?: number;
|
|
27
|
+
timeoutMs?: number;
|
|
28
|
+
failFast?: boolean;
|
|
29
|
+
callbacks?: TaskCallbacks<T>;
|
|
30
|
+
evaluateTaskSuccess?: (value: T, task: Task<T>) => boolean;
|
|
31
|
+
}
|
|
32
|
+
export interface ParallelRunnerMetrics {
|
|
33
|
+
totalTasks: number;
|
|
34
|
+
startedTasks: number;
|
|
35
|
+
completedTasks: number;
|
|
36
|
+
successCount: number;
|
|
37
|
+
failureCount: number;
|
|
38
|
+
totalDurationMs: number;
|
|
39
|
+
averageDurationMs: number;
|
|
40
|
+
throughput: number;
|
|
41
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/parallel/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,31 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { AIProvider, AIQueryOptions, AIResponse } from './ai-provider.interface';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
description: string;
|
|
6
|
-
input_schema: {
|
|
7
|
-
type: 'object';
|
|
8
|
-
properties: Record<string, any>;
|
|
9
|
-
required?: string[];
|
|
10
|
-
};
|
|
11
|
-
output_schema?: {
|
|
12
|
-
type: 'object';
|
|
13
|
-
properties: Record<string, any>;
|
|
14
|
-
required?: string[];
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
export interface ToolCallService {
|
|
18
|
-
list(): Tool[];
|
|
19
|
-
execute(toolName: string, toolInput: any): Promise<any>;
|
|
20
|
-
}
|
|
1
|
+
import { type TimeoutConfig } from '../../config/timeout.config';
|
|
2
|
+
import type { AIProvider, AIQueryOptions, AIResponse } from './ai-provider.interface';
|
|
3
|
+
import type { BaseAIProviderOptions, LoggerLike } from './base-ai.types';
|
|
4
|
+
import type { ToolCallHandler } from './tool-call.types';
|
|
21
5
|
export declare abstract class BaseAIProvider implements AIProvider {
|
|
22
6
|
abstract readonly name: string;
|
|
23
|
-
protected readonly logger:
|
|
24
|
-
protected
|
|
7
|
+
protected readonly logger: LoggerLike;
|
|
8
|
+
protected toolCallHandler?: ToolCallHandler;
|
|
25
9
|
private readonly logsDir;
|
|
10
|
+
private readonly crewxVersion;
|
|
26
11
|
private cachedPath;
|
|
27
|
-
protected readonly timeoutConfig:
|
|
28
|
-
constructor(loggerContext: string);
|
|
12
|
+
protected readonly timeoutConfig: TimeoutConfig;
|
|
13
|
+
constructor(loggerContext: string, options?: BaseAIProviderOptions);
|
|
29
14
|
protected abstract getCliCommand(): string;
|
|
30
15
|
protected abstract getDefaultArgs(): string[];
|
|
31
16
|
protected abstract getExecuteArgs(): string[];
|
|
@@ -36,7 +21,8 @@ export declare abstract class BaseAIProvider implements AIProvider {
|
|
|
36
21
|
protected getDefaultModel(): string | null;
|
|
37
22
|
protected getEnv(): Record<string, string>;
|
|
38
23
|
protected substituteModelPlaceholders(args: string[], model: string): string[];
|
|
39
|
-
protected setToolCallService(
|
|
24
|
+
protected setToolCallService(toolCallHandler: ToolCallHandler): void;
|
|
25
|
+
protected setToolCallHandler(toolCallHandler: ToolCallHandler): void;
|
|
40
26
|
protected parseToolUse(content: string): {
|
|
41
27
|
isToolUse: boolean;
|
|
42
28
|
toolName?: string;
|
|
@@ -57,7 +43,7 @@ export declare abstract class BaseAIProvider implements AIProvider {
|
|
|
57
43
|
protected extractUserQuery(wrappedQuery: string, securityKey: string): string;
|
|
58
44
|
isAvailable(): Promise<boolean>;
|
|
59
45
|
private createTaskLogFile;
|
|
60
|
-
|
|
46
|
+
protected appendTaskLog(taskId: string, level: 'STDOUT' | 'STDERR' | 'INFO' | 'ERROR', message: string): void;
|
|
61
47
|
query(prompt: string, options?: AIQueryOptions): Promise<AIResponse>;
|
|
62
48
|
execute(prompt: string, options?: AIQueryOptions): Promise<AIResponse>;
|
|
63
49
|
protected shouldPipeContext(_options?: AIQueryOptions): boolean;
|
|
@@ -1,27 +1,33 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
exports.BaseAIProvider = void 0;
|
|
13
|
-
const common_1 = require("@nestjs/common");
|
|
14
4
|
const child_process_1 = require("child_process");
|
|
15
5
|
const fs_1 = require("fs");
|
|
16
6
|
const path_1 = require("path");
|
|
17
7
|
const timeout_config_1 = require("../../config/timeout.config");
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
8
|
+
class ConsoleLogger {
|
|
9
|
+
constructor(context) {
|
|
10
|
+
this.context = context;
|
|
11
|
+
}
|
|
12
|
+
log(message, ...optionalParams) {
|
|
13
|
+
console.log(`[${this.context}]`, message, ...optionalParams);
|
|
14
|
+
}
|
|
15
|
+
warn(message, ...optionalParams) {
|
|
16
|
+
console.warn(`[${this.context}]`, message, ...optionalParams);
|
|
17
|
+
}
|
|
18
|
+
error(message, ...optionalParams) {
|
|
19
|
+
const resolved = message instanceof Error ? message.message : message;
|
|
20
|
+
console.error(`[${this.context}]`, resolved, ...optionalParams);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
class BaseAIProvider {
|
|
24
|
+
constructor(loggerContext, options = {}) {
|
|
22
25
|
this.cachedPath = null;
|
|
23
|
-
this.
|
|
24
|
-
this.
|
|
26
|
+
this.logger = options.logger ?? new ConsoleLogger(loggerContext);
|
|
27
|
+
this.toolCallHandler = options.toolCallHandler;
|
|
28
|
+
this.timeoutConfig = options.timeoutConfig ?? (0, timeout_config_1.getTimeoutConfig)();
|
|
29
|
+
this.logsDir = options.logsDir ?? (0, path_1.join)(process.cwd(), '.crewx', 'logs');
|
|
30
|
+
this.crewxVersion = options.crewxVersion ?? 'unknown';
|
|
25
31
|
try {
|
|
26
32
|
(0, fs_1.mkdirSync)(this.logsDir, { recursive: true });
|
|
27
33
|
}
|
|
@@ -32,20 +38,22 @@ let BaseAIProvider = class BaseAIProvider {
|
|
|
32
38
|
return false;
|
|
33
39
|
}
|
|
34
40
|
getDefaultQueryTimeout() {
|
|
35
|
-
|
|
41
|
+
const providerName = this.name.toLowerCase();
|
|
42
|
+
if (providerName.includes('claude'))
|
|
36
43
|
return this.timeoutConfig.claudeQuery;
|
|
37
|
-
if (
|
|
44
|
+
if (providerName.includes('gemini'))
|
|
38
45
|
return this.timeoutConfig.geminiQuery;
|
|
39
|
-
if (
|
|
46
|
+
if (providerName.includes('copilot'))
|
|
40
47
|
return this.timeoutConfig.copilotQuery;
|
|
41
48
|
return 600000;
|
|
42
49
|
}
|
|
43
50
|
getDefaultExecuteTimeout() {
|
|
44
|
-
|
|
51
|
+
const providerName = this.name.toLowerCase();
|
|
52
|
+
if (providerName.includes('claude'))
|
|
45
53
|
return this.timeoutConfig.claudeExecute;
|
|
46
|
-
if (
|
|
54
|
+
if (providerName.includes('gemini'))
|
|
47
55
|
return this.timeoutConfig.geminiExecute;
|
|
48
|
-
if (
|
|
56
|
+
if (providerName.includes('copilot'))
|
|
49
57
|
return this.timeoutConfig.copilotExecute;
|
|
50
58
|
return this.timeoutConfig.parallel;
|
|
51
59
|
}
|
|
@@ -58,8 +66,11 @@ let BaseAIProvider = class BaseAIProvider {
|
|
|
58
66
|
substituteModelPlaceholders(args, model) {
|
|
59
67
|
return args.map(arg => arg.replace(/\{model\}/g, model));
|
|
60
68
|
}
|
|
61
|
-
setToolCallService(
|
|
62
|
-
this.
|
|
69
|
+
setToolCallService(toolCallHandler) {
|
|
70
|
+
this.toolCallHandler = toolCallHandler;
|
|
71
|
+
}
|
|
72
|
+
setToolCallHandler(toolCallHandler) {
|
|
73
|
+
this.toolCallHandler = toolCallHandler;
|
|
63
74
|
}
|
|
64
75
|
parseToolUse(content) {
|
|
65
76
|
const xmlMatch = content.match(/<crew(?:code|x)_tool_call>\s*([\s\S]*?)\s*<\/crew(?:code|x)_tool_call>/);
|
|
@@ -218,7 +229,7 @@ ${userQuery}
|
|
|
218
229
|
const logFile = (0, path_1.join)(this.logsDir, `${taskId}.log`);
|
|
219
230
|
const timestamp = new Date().toLocaleString();
|
|
220
231
|
const header = `=== TASK LOG: ${taskId} ===
|
|
221
|
-
CrewX Version: ${
|
|
232
|
+
CrewX Version: ${this.crewxVersion}
|
|
222
233
|
Provider: ${provider}
|
|
223
234
|
Agent: ${agentId || 'N/A'}
|
|
224
235
|
${model ? `Model: ${model}\n` : ''}Command: ${command}
|
|
@@ -615,10 +626,6 @@ Started: ${timestamp}
|
|
|
615
626
|
};
|
|
616
627
|
return JSON.stringify(payload);
|
|
617
628
|
}
|
|
618
|
-
}
|
|
629
|
+
}
|
|
619
630
|
exports.BaseAIProvider = BaseAIProvider;
|
|
620
|
-
exports.BaseAIProvider = BaseAIProvider = __decorate([
|
|
621
|
-
(0, common_1.Injectable)(),
|
|
622
|
-
__metadata("design:paramtypes", [String])
|
|
623
|
-
], BaseAIProvider);
|
|
624
631
|
//# sourceMappingURL=base-ai.provider.js.map
|