@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.
@@ -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,3 @@
1
+ export { CerebrumProvider } from './provider.js';
2
+ export { createBuiltinTools } from './tools/index.js';
3
+ //# sourceMappingURL=index.js.map
@@ -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"}
@@ -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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"}
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -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
+ }