@cereworker/cerebrum 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/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/provider.d.ts +22 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +121 -0
- package/dist/provider.js.map +1 -0
- package/dist/tools/file-ops.d.ts +55 -0
- package/dist/tools/file-ops.d.ts.map +1 -0
- package/dist/tools/file-ops.js +83 -0
- package/dist/tools/file-ops.js.map +1 -0
- package/dist/tools/index.d.ts +66 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +29 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/shell.d.ts +23 -0
- package/dist/tools/shell.d.ts.map +1 -0
- package/dist/tools/shell.js +55 -0
- package/dist/tools/shell.js.map +1 -0
- package/dist/types.d.ts +28 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +36 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { CerebrumProvider } from './provider.js';
|
|
2
|
+
export type { CerebrumConfig, ProviderConfig, CerebrumRequest, StreamCallbacks } from './types.js';
|
|
3
|
+
export { createBuiltinTools, type BuiltinTools, type BuiltinToolName } from './tools/index.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,EAAE,kBAAkB,EAA2C,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Message } from '@cereworker/core';
|
|
2
|
+
import type { CerebrumConfig, StreamCallbacks } from './types.js';
|
|
3
|
+
export declare class CerebrumProvider {
|
|
4
|
+
private config;
|
|
5
|
+
private builtinTools;
|
|
6
|
+
constructor(config: CerebrumConfig, shellConfig?: {
|
|
7
|
+
denyList?: string[];
|
|
8
|
+
timeout?: number;
|
|
9
|
+
maxOutputSize?: number;
|
|
10
|
+
});
|
|
11
|
+
private getModel;
|
|
12
|
+
private convertMessages;
|
|
13
|
+
stream(messages: Message[], callbacks: StreamCallbacks, options?: {
|
|
14
|
+
provider?: string;
|
|
15
|
+
model?: string;
|
|
16
|
+
systemPrompt?: string;
|
|
17
|
+
maxSteps?: number;
|
|
18
|
+
}): Promise<void>;
|
|
19
|
+
getDefaultProvider(): string;
|
|
20
|
+
getDefaultModel(): string;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAkB,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlF,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,YAAY,CAAe;gBAEvB,MAAM,EAAE,cAAc,EAAE,WAAW,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE;IAKnH,OAAO,CAAC,QAAQ;IAwChB,OAAO,CAAC,eAAe;IA2BjB,MAAM,CACV,QAAQ,EAAE,OAAO,EAAE,EACnB,SAAS,EAAE,eAAe,EAC1B,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GACxF,OAAO,CAAC,IAAI,CAAC;IA2ChB,kBAAkB,IAAI,MAAM;IAI5B,eAAe,IAAI,MAAM;CAG1B"}
|
package/dist/provider.js
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { streamText } from 'ai';
|
|
2
|
+
import { createAnthropic } from '@ai-sdk/anthropic';
|
|
3
|
+
import { createOpenAI } from '@ai-sdk/openai';
|
|
4
|
+
import { createGoogleGenerativeAI } from '@ai-sdk/google';
|
|
5
|
+
import { createBuiltinTools } from './tools/index.js';
|
|
6
|
+
export class CerebrumProvider {
|
|
7
|
+
config;
|
|
8
|
+
builtinTools;
|
|
9
|
+
constructor(config, shellConfig) {
|
|
10
|
+
this.config = config;
|
|
11
|
+
this.builtinTools = createBuiltinTools(shellConfig);
|
|
12
|
+
}
|
|
13
|
+
getModel(provider, model) {
|
|
14
|
+
const providerName = provider ?? this.config.defaultProvider;
|
|
15
|
+
const modelName = model ?? this.config.defaultModel;
|
|
16
|
+
const providerConfig = this.config.providers[providerName];
|
|
17
|
+
switch (providerName) {
|
|
18
|
+
case 'anthropic': {
|
|
19
|
+
const anthropic = createAnthropic({
|
|
20
|
+
apiKey: providerConfig?.apiKey,
|
|
21
|
+
...(providerConfig?.baseUrl ? { baseURL: providerConfig.baseUrl } : {}),
|
|
22
|
+
});
|
|
23
|
+
return anthropic(modelName);
|
|
24
|
+
}
|
|
25
|
+
case 'openai': {
|
|
26
|
+
const openai = createOpenAI({
|
|
27
|
+
apiKey: providerConfig?.apiKey,
|
|
28
|
+
...(providerConfig?.baseUrl ? { baseURL: providerConfig.baseUrl } : {}),
|
|
29
|
+
});
|
|
30
|
+
return openai(modelName);
|
|
31
|
+
}
|
|
32
|
+
case 'google': {
|
|
33
|
+
const google = createGoogleGenerativeAI({
|
|
34
|
+
apiKey: providerConfig?.apiKey,
|
|
35
|
+
...(providerConfig?.baseUrl ? { baseURL: providerConfig.baseUrl } : {}),
|
|
36
|
+
});
|
|
37
|
+
return google(modelName);
|
|
38
|
+
}
|
|
39
|
+
case 'local': {
|
|
40
|
+
// Local models via OpenAI-compatible API (e.g., Ollama, vLLM)
|
|
41
|
+
const local = createOpenAI({
|
|
42
|
+
apiKey: providerConfig?.apiKey ?? 'not-needed',
|
|
43
|
+
baseURL: providerConfig?.baseUrl ?? 'http://localhost:11434/v1',
|
|
44
|
+
});
|
|
45
|
+
return local(providerConfig?.model ?? modelName);
|
|
46
|
+
}
|
|
47
|
+
default:
|
|
48
|
+
throw new Error(`Unknown provider: ${providerName}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
convertMessages(messages) {
|
|
52
|
+
return messages
|
|
53
|
+
.filter((m) => m.role !== 'system' && m.role !== 'cerebellum')
|
|
54
|
+
.map((m) => {
|
|
55
|
+
switch (m.role) {
|
|
56
|
+
case 'user':
|
|
57
|
+
return { role: 'user', content: m.content };
|
|
58
|
+
case 'cerebrum':
|
|
59
|
+
return { role: 'assistant', content: m.content };
|
|
60
|
+
case 'tool':
|
|
61
|
+
return {
|
|
62
|
+
role: 'tool',
|
|
63
|
+
content: [
|
|
64
|
+
{
|
|
65
|
+
type: 'tool-result',
|
|
66
|
+
toolCallId: m.toolResult?.callId ?? '',
|
|
67
|
+
toolName: m.metadata?.toolName ?? 'unknown',
|
|
68
|
+
result: m.content,
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
};
|
|
72
|
+
default:
|
|
73
|
+
return { role: 'user', content: m.content };
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
async stream(messages, callbacks, options) {
|
|
78
|
+
const model = this.getModel(options?.provider, options?.model);
|
|
79
|
+
const coreMessages = this.convertMessages(messages);
|
|
80
|
+
try {
|
|
81
|
+
const result = streamText({
|
|
82
|
+
model,
|
|
83
|
+
messages: coreMessages,
|
|
84
|
+
tools: this.builtinTools,
|
|
85
|
+
maxSteps: options?.maxSteps ?? this.config.maxSteps,
|
|
86
|
+
temperature: this.config.temperature,
|
|
87
|
+
...(options?.systemPrompt ? { system: options.systemPrompt } : {}),
|
|
88
|
+
});
|
|
89
|
+
let fullContent = '';
|
|
90
|
+
for await (const part of result.fullStream) {
|
|
91
|
+
switch (part.type) {
|
|
92
|
+
case 'text-delta':
|
|
93
|
+
fullContent += part.textDelta;
|
|
94
|
+
callbacks.onChunk(part.textDelta);
|
|
95
|
+
break;
|
|
96
|
+
case 'tool-call':
|
|
97
|
+
await callbacks.onToolCall({
|
|
98
|
+
id: part.toolCallId,
|
|
99
|
+
name: part.toolName,
|
|
100
|
+
args: part.args,
|
|
101
|
+
});
|
|
102
|
+
break;
|
|
103
|
+
case 'error':
|
|
104
|
+
callbacks.onError(part.error instanceof Error ? part.error : new Error(String(part.error)));
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
callbacks.onFinish(fullContent);
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
callbacks.onError(error instanceof Error ? error : new Error(String(error)));
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
getDefaultProvider() {
|
|
115
|
+
return this.config.defaultProvider;
|
|
116
|
+
}
|
|
117
|
+
getDefaultModel() {
|
|
118
|
+
return this.config.defaultModel;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const readFileParameters: z.ZodObject<{
|
|
3
|
+
path: z.ZodString;
|
|
4
|
+
maxLines: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
5
|
+
}, "strip", z.ZodTypeAny, {
|
|
6
|
+
path: string;
|
|
7
|
+
maxLines: number;
|
|
8
|
+
}, {
|
|
9
|
+
path: string;
|
|
10
|
+
maxLines?: number | undefined;
|
|
11
|
+
}>;
|
|
12
|
+
export declare const writeFileParameters: z.ZodObject<{
|
|
13
|
+
path: z.ZodString;
|
|
14
|
+
content: z.ZodString;
|
|
15
|
+
}, "strip", z.ZodTypeAny, {
|
|
16
|
+
path: string;
|
|
17
|
+
content: string;
|
|
18
|
+
}, {
|
|
19
|
+
path: string;
|
|
20
|
+
content: string;
|
|
21
|
+
}>;
|
|
22
|
+
export declare const listDirectoryParameters: z.ZodObject<{
|
|
23
|
+
path: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
24
|
+
}, "strip", z.ZodTypeAny, {
|
|
25
|
+
path: string;
|
|
26
|
+
}, {
|
|
27
|
+
path?: string | undefined;
|
|
28
|
+
}>;
|
|
29
|
+
export declare const globParameters: z.ZodObject<{
|
|
30
|
+
pattern: z.ZodString;
|
|
31
|
+
cwd: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
32
|
+
}, "strip", z.ZodTypeAny, {
|
|
33
|
+
cwd: string;
|
|
34
|
+
pattern: string;
|
|
35
|
+
}, {
|
|
36
|
+
pattern: string;
|
|
37
|
+
cwd?: string | undefined;
|
|
38
|
+
}>;
|
|
39
|
+
export declare const grepParameters: z.ZodObject<{
|
|
40
|
+
pattern: z.ZodString;
|
|
41
|
+
path: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
42
|
+
maxResults: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
43
|
+
}, "strip", z.ZodTypeAny, {
|
|
44
|
+
path: string;
|
|
45
|
+
pattern: string;
|
|
46
|
+
maxResults: number;
|
|
47
|
+
}, {
|
|
48
|
+
pattern: string;
|
|
49
|
+
path?: string | undefined;
|
|
50
|
+
maxResults?: number | undefined;
|
|
51
|
+
}>;
|
|
52
|
+
export declare function executeReadFile(args: z.infer<typeof readFileParameters>): Promise<string>;
|
|
53
|
+
export declare function executeWriteFile(args: z.infer<typeof writeFileParameters>): Promise<string>;
|
|
54
|
+
export declare function executeListDirectory(args: z.infer<typeof listDirectoryParameters>): Promise<string>;
|
|
55
|
+
//# sourceMappingURL=file-ops.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-ops.d.ts","sourceRoot":"","sources":["../../src/tools/file-ops.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,kBAAkB;;;;;;;;;EAG7B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;EAG9B,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;EAElC,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;EAGzB,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;EAIzB,CAAC;AAEH,wBAAsB,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAe/F;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAQjG;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAsBzG"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, readdirSync, existsSync, statSync } from 'node:fs';
|
|
2
|
+
import { join, resolve } from 'node:path';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
export const readFileParameters = z.object({
|
|
5
|
+
path: z.string().describe('Absolute or relative path to the file to read'),
|
|
6
|
+
maxLines: z.number().optional().default(2000).describe('Maximum number of lines to read'),
|
|
7
|
+
});
|
|
8
|
+
export const writeFileParameters = z.object({
|
|
9
|
+
path: z.string().describe('Absolute or relative path to the file to write'),
|
|
10
|
+
content: z.string().describe('Content to write to the file'),
|
|
11
|
+
});
|
|
12
|
+
export const listDirectoryParameters = z.object({
|
|
13
|
+
path: z.string().optional().default('.').describe('Directory path to list'),
|
|
14
|
+
});
|
|
15
|
+
export const globParameters = z.object({
|
|
16
|
+
pattern: z.string().describe('Glob pattern to match files'),
|
|
17
|
+
cwd: z.string().optional().default('.').describe('Base directory for the search'),
|
|
18
|
+
});
|
|
19
|
+
export const grepParameters = z.object({
|
|
20
|
+
pattern: z.string().describe('Text or regex pattern to search for'),
|
|
21
|
+
path: z.string().optional().default('.').describe('File or directory to search in'),
|
|
22
|
+
maxResults: z.number().optional().default(50).describe('Maximum number of results'),
|
|
23
|
+
});
|
|
24
|
+
export async function executeReadFile(args) {
|
|
25
|
+
const filePath = resolve(args.path);
|
|
26
|
+
if (!existsSync(filePath)) {
|
|
27
|
+
return `File not found: ${filePath}`;
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
31
|
+
const lines = content.split('\n');
|
|
32
|
+
if (lines.length > args.maxLines) {
|
|
33
|
+
return lines.slice(0, args.maxLines).join('\n') + `\n... (${lines.length - args.maxLines} more lines)`;
|
|
34
|
+
}
|
|
35
|
+
return content;
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
return `Error reading file: ${err instanceof Error ? err.message : String(err)}`;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export async function executeWriteFile(args) {
|
|
42
|
+
const filePath = resolve(args.path);
|
|
43
|
+
try {
|
|
44
|
+
writeFileSync(filePath, args.content, 'utf-8');
|
|
45
|
+
return `File written: ${filePath}`;
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
return `Error writing file: ${err instanceof Error ? err.message : String(err)}`;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export async function executeListDirectory(args) {
|
|
52
|
+
const dirPath = resolve(args.path);
|
|
53
|
+
if (!existsSync(dirPath)) {
|
|
54
|
+
return `Directory not found: ${dirPath}`;
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
const entries = readdirSync(dirPath, { withFileTypes: true });
|
|
58
|
+
return entries
|
|
59
|
+
.map((e) => {
|
|
60
|
+
const suffix = e.isDirectory() ? '/' : '';
|
|
61
|
+
try {
|
|
62
|
+
const stat = statSync(join(dirPath, e.name));
|
|
63
|
+
const size = e.isDirectory() ? '' : ` (${formatSize(stat.size)})`;
|
|
64
|
+
return `${e.name}${suffix}${size}`;
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return `${e.name}${suffix}`;
|
|
68
|
+
}
|
|
69
|
+
})
|
|
70
|
+
.join('\n');
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
return `Error listing directory: ${err instanceof Error ? err.message : String(err)}`;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function formatSize(bytes) {
|
|
77
|
+
if (bytes < 1024)
|
|
78
|
+
return `${bytes}B`;
|
|
79
|
+
if (bytes < 1024 * 1024)
|
|
80
|
+
return `${(bytes / 1024).toFixed(1)}KB`;
|
|
81
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=file-ops.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-ops.js","sourceRoot":"","sources":["../../src/tools/file-ops.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { type ShellToolConfig } from './shell.js';
|
|
2
|
+
export declare function createBuiltinTools(shellConfig?: Partial<ShellToolConfig>): {
|
|
3
|
+
shell: import("ai").Tool<import("zod").ZodObject<{
|
|
4
|
+
command: import("zod").ZodString;
|
|
5
|
+
cwd: import("zod").ZodOptional<import("zod").ZodString>;
|
|
6
|
+
timeout: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodNumber>>;
|
|
7
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
8
|
+
command: string;
|
|
9
|
+
timeout: number;
|
|
10
|
+
cwd?: string | undefined;
|
|
11
|
+
}, {
|
|
12
|
+
command: string;
|
|
13
|
+
cwd?: string | undefined;
|
|
14
|
+
timeout?: number | undefined;
|
|
15
|
+
}>, string> & {
|
|
16
|
+
execute: (args: {
|
|
17
|
+
command: string;
|
|
18
|
+
timeout: number;
|
|
19
|
+
cwd?: string | undefined;
|
|
20
|
+
}, options: import("ai").ToolExecutionOptions) => PromiseLike<string>;
|
|
21
|
+
};
|
|
22
|
+
readFile: import("ai").Tool<import("zod").ZodObject<{
|
|
23
|
+
path: import("zod").ZodString;
|
|
24
|
+
maxLines: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodNumber>>;
|
|
25
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
26
|
+
path: string;
|
|
27
|
+
maxLines: number;
|
|
28
|
+
}, {
|
|
29
|
+
path: string;
|
|
30
|
+
maxLines?: number | undefined;
|
|
31
|
+
}>, string> & {
|
|
32
|
+
execute: (args: {
|
|
33
|
+
path: string;
|
|
34
|
+
maxLines: number;
|
|
35
|
+
}, options: import("ai").ToolExecutionOptions) => PromiseLike<string>;
|
|
36
|
+
};
|
|
37
|
+
writeFile: import("ai").Tool<import("zod").ZodObject<{
|
|
38
|
+
path: import("zod").ZodString;
|
|
39
|
+
content: import("zod").ZodString;
|
|
40
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
41
|
+
path: string;
|
|
42
|
+
content: string;
|
|
43
|
+
}, {
|
|
44
|
+
path: string;
|
|
45
|
+
content: string;
|
|
46
|
+
}>, string> & {
|
|
47
|
+
execute: (args: {
|
|
48
|
+
path: string;
|
|
49
|
+
content: string;
|
|
50
|
+
}, options: import("ai").ToolExecutionOptions) => PromiseLike<string>;
|
|
51
|
+
};
|
|
52
|
+
listDirectory: import("ai").Tool<import("zod").ZodObject<{
|
|
53
|
+
path: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodString>>;
|
|
54
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
55
|
+
path: string;
|
|
56
|
+
}, {
|
|
57
|
+
path?: string | undefined;
|
|
58
|
+
}>, string> & {
|
|
59
|
+
execute: (args: {
|
|
60
|
+
path: string;
|
|
61
|
+
}, options: import("ai").ToolExecutionOptions) => PromiseLike<string>;
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
export type BuiltinTools = ReturnType<typeof createBuiltinTools>;
|
|
65
|
+
export type BuiltinToolName = keyof BuiltinTools;
|
|
66
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,YAAY,CAAC;AAUpB,wBAAgB,kBAAkB,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyBxE;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;AACjE,MAAM,MAAM,eAAe,GAAG,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { tool } from 'ai';
|
|
2
|
+
import { shellToolParameters, createShellExecutor, } from './shell.js';
|
|
3
|
+
import { readFileParameters, writeFileParameters, listDirectoryParameters, executeReadFile, executeWriteFile, executeListDirectory, } from './file-ops.js';
|
|
4
|
+
export function createBuiltinTools(shellConfig) {
|
|
5
|
+
const executeShell = createShellExecutor(shellConfig);
|
|
6
|
+
return {
|
|
7
|
+
shell: tool({
|
|
8
|
+
description: 'Execute a shell command and return its output',
|
|
9
|
+
parameters: shellToolParameters,
|
|
10
|
+
execute: async (args) => executeShell(args),
|
|
11
|
+
}),
|
|
12
|
+
readFile: tool({
|
|
13
|
+
description: 'Read the contents of a file',
|
|
14
|
+
parameters: readFileParameters,
|
|
15
|
+
execute: async (args) => executeReadFile(args),
|
|
16
|
+
}),
|
|
17
|
+
writeFile: tool({
|
|
18
|
+
description: 'Write content to a file',
|
|
19
|
+
parameters: writeFileParameters,
|
|
20
|
+
execute: async (args) => executeWriteFile(args),
|
|
21
|
+
}),
|
|
22
|
+
listDirectory: tool({
|
|
23
|
+
description: 'List files and directories in a given path',
|
|
24
|
+
parameters: listDirectoryParameters,
|
|
25
|
+
execute: async (args) => executeListDirectory(args),
|
|
26
|
+
}),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EACL,mBAAmB,EACnB,mBAAmB,GAEpB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AAEvB,MAAM,UAAU,kBAAkB,CAAC,WAAsC;IACvE,MAAM,YAAY,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAEtD,OAAO;QACL,KAAK,EAAE,IAAI,CAAC;YACV,WAAW,EAAE,+CAA+C;YAC5D,UAAU,EAAE,mBAAmB;YAC/B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC;SAC5C,CAAC;QACF,QAAQ,EAAE,IAAI,CAAC;YACb,WAAW,EAAE,6BAA6B;YAC1C,UAAU,EAAE,kBAAkB;YAC9B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;SAC/C,CAAC;QACF,SAAS,EAAE,IAAI,CAAC;YACd,WAAW,EAAE,yBAAyB;YACtC,UAAU,EAAE,mBAAmB;YAC/B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC;SAChD,CAAC;QACF,aAAa,EAAE,IAAI,CAAC;YAClB,WAAW,EAAE,4CAA4C;YACzD,UAAU,EAAE,uBAAuB;YACnC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC;SACpD,CAAC;KACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const shellToolParameters: z.ZodObject<{
|
|
3
|
+
command: z.ZodString;
|
|
4
|
+
cwd: z.ZodOptional<z.ZodString>;
|
|
5
|
+
timeout: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
6
|
+
}, "strip", z.ZodTypeAny, {
|
|
7
|
+
command: string;
|
|
8
|
+
timeout: number;
|
|
9
|
+
cwd?: string | undefined;
|
|
10
|
+
}, {
|
|
11
|
+
command: string;
|
|
12
|
+
cwd?: string | undefined;
|
|
13
|
+
timeout?: number | undefined;
|
|
14
|
+
}>;
|
|
15
|
+
export type ShellToolArgs = z.infer<typeof shellToolParameters>;
|
|
16
|
+
export interface ShellToolConfig {
|
|
17
|
+
enabled: boolean;
|
|
18
|
+
denyList: string[];
|
|
19
|
+
timeout: number;
|
|
20
|
+
maxOutputSize: number;
|
|
21
|
+
}
|
|
22
|
+
export declare function createShellExecutor(config?: Partial<ShellToolConfig>): (args: ShellToolArgs) => Promise<string>;
|
|
23
|
+
//# sourceMappingURL=shell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/tools/shell.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,mBAAmB;;;;;;;;;;;;EAI9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB;AASD,wBAAgB,mBAAmB,CAAC,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,IAGpC,MAAM,aAAa,KAAG,OAAO,CAAC,MAAM,CAAC,CAuCzE"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export const shellToolParameters = z.object({
|
|
4
|
+
command: z.string().describe('The shell command to execute'),
|
|
5
|
+
cwd: z.string().optional().describe('Working directory for the command'),
|
|
6
|
+
timeout: z.number().optional().default(30000).describe('Timeout in milliseconds'),
|
|
7
|
+
});
|
|
8
|
+
const DEFAULT_CONFIG = {
|
|
9
|
+
enabled: true,
|
|
10
|
+
denyList: ['rm -rf /'],
|
|
11
|
+
timeout: 30000,
|
|
12
|
+
maxOutputSize: 102400,
|
|
13
|
+
};
|
|
14
|
+
export function createShellExecutor(config = {}) {
|
|
15
|
+
const cfg = { ...DEFAULT_CONFIG, ...config };
|
|
16
|
+
return async function executeShell(args) {
|
|
17
|
+
if (!cfg.enabled) {
|
|
18
|
+
return 'Shell execution is disabled';
|
|
19
|
+
}
|
|
20
|
+
const { command, cwd, timeout } = args;
|
|
21
|
+
for (const denied of cfg.denyList) {
|
|
22
|
+
if (command.includes(denied)) {
|
|
23
|
+
return `Command denied: matches deny list entry "${denied}"`;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return new Promise((resolve) => {
|
|
27
|
+
execFile('bash', ['-c', command], {
|
|
28
|
+
cwd: cwd ?? process.cwd(),
|
|
29
|
+
timeout: timeout ?? cfg.timeout,
|
|
30
|
+
maxBuffer: cfg.maxOutputSize,
|
|
31
|
+
env: { ...process.env },
|
|
32
|
+
}, (error, stdout, stderr) => {
|
|
33
|
+
if (error) {
|
|
34
|
+
if (error.killed) {
|
|
35
|
+
resolve(`Command timed out after ${timeout ?? cfg.timeout}ms`);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
const output = [stdout, stderr, error.message].filter(Boolean).join('\n');
|
|
39
|
+
resolve(truncate(output, cfg.maxOutputSize));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
const output = [stdout, stderr].filter(Boolean).join('\n');
|
|
44
|
+
resolve(truncate(output, cfg.maxOutputSize) || '(no output)');
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function truncate(text, maxSize) {
|
|
51
|
+
if (text.length <= maxSize)
|
|
52
|
+
return text;
|
|
53
|
+
return text.slice(0, maxSize) + '\n... (output truncated)';
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=shell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/tools/shell.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Message, ToolCall, ToolResult } from '@cereworker/core';
|
|
2
|
+
export interface CerebrumConfig {
|
|
3
|
+
defaultProvider: string;
|
|
4
|
+
defaultModel: string;
|
|
5
|
+
providers: Record<string, ProviderConfig>;
|
|
6
|
+
maxSteps: number;
|
|
7
|
+
temperature: number;
|
|
8
|
+
}
|
|
9
|
+
export interface ProviderConfig {
|
|
10
|
+
apiKey?: string;
|
|
11
|
+
baseUrl?: string;
|
|
12
|
+
models?: string[];
|
|
13
|
+
model?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface CerebrumRequest {
|
|
16
|
+
messages: Message[];
|
|
17
|
+
systemPrompt?: string;
|
|
18
|
+
model?: string;
|
|
19
|
+
provider?: string;
|
|
20
|
+
maxSteps?: number;
|
|
21
|
+
}
|
|
22
|
+
export interface StreamCallbacks {
|
|
23
|
+
onChunk: (chunk: string) => void;
|
|
24
|
+
onToolCall: (toolCall: ToolCall) => Promise<ToolResult>;
|
|
25
|
+
onFinish: (content: string) => void;
|
|
26
|
+
onError: (error: Error) => void;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEtE,MAAM,WAAW,cAAc;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,UAAU,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IACxD,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@cereworker/cerebrum",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist"
|
|
9
|
+
],
|
|
10
|
+
"publishConfig": {
|
|
11
|
+
"access": "public"
|
|
12
|
+
},
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "https://github.com/Producible/CereWorker.git",
|
|
16
|
+
"directory": "packages/cerebrum"
|
|
17
|
+
},
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"ai": "^4.1.0",
|
|
20
|
+
"@ai-sdk/anthropic": "^1.2.0",
|
|
21
|
+
"@ai-sdk/openai": "^1.2.0",
|
|
22
|
+
"@ai-sdk/google": "^1.2.0",
|
|
23
|
+
"zod": "^3.24.0",
|
|
24
|
+
"@cereworker/core": "0.1.0",
|
|
25
|
+
"@cereworker/config": "0.1.0"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"typescript": "^5.7.3"
|
|
29
|
+
},
|
|
30
|
+
"scripts": {
|
|
31
|
+
"build": "tsc",
|
|
32
|
+
"typecheck": "tsc --noEmit",
|
|
33
|
+
"lint": "eslint src/",
|
|
34
|
+
"clean": "rm -rf dist"
|
|
35
|
+
}
|
|
36
|
+
}
|