@cereworker/cli 0.6.0 → 2026.313.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.
Files changed (40) hide show
  1. package/dist/app.d.ts.map +1 -1
  2. package/dist/app.js +33 -181
  3. package/dist/app.js.map +1 -1
  4. package/dist/auth.d.ts +2 -0
  5. package/dist/auth.d.ts.map +1 -0
  6. package/dist/auth.js +58 -0
  7. package/dist/auth.js.map +1 -0
  8. package/dist/components/StatusBar.d.ts +3 -1
  9. package/dist/components/StatusBar.d.ts.map +1 -1
  10. package/dist/components/StatusBar.js +2 -2
  11. package/dist/components/StatusBar.js.map +1 -1
  12. package/dist/hooks/useCerebellum.d.ts +7 -0
  13. package/dist/hooks/useCerebellum.d.ts.map +1 -1
  14. package/dist/hooks/useCerebellum.js +19 -1
  15. package/dist/hooks/useCerebellum.js.map +1 -1
  16. package/dist/index.js +31 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/onboard/config-builder.d.ts.map +1 -1
  19. package/dist/onboard/config-builder.js +12 -0
  20. package/dist/onboard/config-builder.js.map +1 -1
  21. package/dist/onboard/steps/cerebellum.d.ts.map +1 -1
  22. package/dist/onboard/steps/cerebellum.js +29 -1
  23. package/dist/onboard/steps/cerebellum.js.map +1 -1
  24. package/dist/onboard/steps/cerebrum.d.ts +3 -0
  25. package/dist/onboard/steps/cerebrum.d.ts.map +1 -1
  26. package/dist/onboard/steps/cerebrum.js +59 -26
  27. package/dist/onboard/steps/cerebrum.js.map +1 -1
  28. package/dist/onboard/wizard.d.ts.map +1 -1
  29. package/dist/onboard/wizard.js +6 -1
  30. package/dist/onboard/wizard.js.map +1 -1
  31. package/dist/serve.d.ts +3 -0
  32. package/dist/serve.d.ts.map +1 -0
  33. package/dist/serve.js +83 -0
  34. package/dist/serve.js.map +1 -0
  35. package/dist/service.d.ts +25 -0
  36. package/dist/service.d.ts.map +1 -0
  37. package/dist/service.js +232 -0
  38. package/dist/service.js.map +1 -0
  39. package/package.json +12 -11
  40. package/scripts/setup.sh +212 -0
@@ -1 +1 @@
1
- {"version":3,"file":"cerebellum.d.ts","sourceRoot":"","sources":["../../../src/onboard/steps/cerebellum.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC;QAChC,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AA0CD,wBAAsB,cAAc,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAqIhE"}
1
+ {"version":3,"file":"cerebellum.d.ts","sourceRoot":"","sources":["../../../src/onboard/steps/cerebellum.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC;QAChC,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AA0CD,wBAAsB,cAAc,IAAI,OAAO,CAAC,gBAAgB,CAAC,CA8JhE"}
@@ -1,6 +1,9 @@
1
1
  import { execSync } from 'node:child_process';
2
2
  import { totalmem } from 'node:os';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { dirname, resolve } from 'node:path';
3
5
  import { clack, guardCancel } from '../prompter.js';
6
+ const __dirname = dirname(fileURLToPath(import.meta.url));
4
7
  function detectHardware() {
5
8
  const totalRamGB = Math.round(totalmem() / (1024 * 1024 * 1024));
6
9
  let hasDocker = false;
@@ -125,7 +128,32 @@ export async function cerebellumStep() {
125
128
  }
126
129
  // Docker
127
130
  if (!hw.hasDocker) {
128
- clack.log.warn('Docker not found. Install Docker to use the Cerebellum container.');
131
+ const installDocker = guardCancel(await clack.confirm({
132
+ message: 'Docker not found. Install Docker now?',
133
+ initialValue: true,
134
+ }));
135
+ if (installDocker) {
136
+ const setupScript = resolve(__dirname, '..', '..', '..', 'scripts', 'setup.sh');
137
+ clack.log.info('Installing Docker...');
138
+ try {
139
+ execSync(`bash "${setupScript}" --docker`, { stdio: 'inherit' });
140
+ // Re-check after install
141
+ try {
142
+ execSync('which docker', { stdio: 'pipe' });
143
+ hw.hasDocker = true;
144
+ clack.log.success('Docker installed successfully.');
145
+ }
146
+ catch {
147
+ clack.log.warn('Docker was installed but may require a re-login to work.');
148
+ }
149
+ }
150
+ catch {
151
+ clack.log.warn('Docker installation failed. Install it manually to use the Cerebellum container.');
152
+ }
153
+ }
154
+ else {
155
+ clack.log.warn('Skipped. Install Docker manually to use the Cerebellum container.');
156
+ }
129
157
  }
130
158
  const dockerAutoStart = guardCancel(await clack.confirm({
131
159
  message: 'Auto-start Cerebellum Docker container?',
@@ -1 +1 @@
1
- {"version":3,"file":"cerebellum.js","sourceRoot":"","sources":["../../../src/onboard/steps/cerebellum.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cerebellum.js","sourceRoot":"","sources":["../../../src/onboard/steps/cerebellum.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,9 @@ export interface CerebrumResult {
7
7
  plaintext: string;
8
8
  };
9
9
  localBaseUrl?: string;
10
+ auth?: 'apikey' | 'oauth';
11
+ oauthClientId?: string;
12
+ oauthClientSecret?: string;
10
13
  }
11
14
  export declare function cerebrumStep(): Promise<CerebrumResult>;
12
15
  //# sourceMappingURL=cerebrum.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cerebrum.d.ts","sourceRoot":"","sources":["../../../src/onboard/steps/cerebrum.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAyBD,wBAAsB,YAAY,IAAI,OAAO,CAAC,cAAc,CAAC,CA2G5D"}
1
+ {"version":3,"file":"cerebrum.d.ts","sourceRoot":"","sources":["../../../src/onboard/steps/cerebrum.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AA4BD,wBAAsB,YAAY,IAAI,OAAO,CAAC,cAAc,CAAC,CAkJ5D"}
@@ -20,6 +20,8 @@ const ENV_VAR_MAP = {
20
20
  openai: 'OPENAI_API_KEY',
21
21
  google: 'GOOGLE_API_KEY',
22
22
  };
23
+ // Providers that support OAuth login
24
+ const OAUTH_PROVIDERS = new Set(['openai', 'google']);
23
25
  export async function cerebrumStep() {
24
26
  const provider = guardCancel(await clack.select({
25
27
  message: 'LLM Provider',
@@ -32,6 +34,9 @@ export async function cerebrumStep() {
32
34
  }));
33
35
  let apiKey;
34
36
  let localBaseUrl;
37
+ let auth;
38
+ let oauthClientId;
39
+ let oauthClientSecret;
35
40
  if (provider === 'local') {
36
41
  localBaseUrl = guardCancel(await clack.text({
37
42
  message: 'Local LLM base URL',
@@ -40,37 +45,65 @@ export async function cerebrumStep() {
40
45
  }));
41
46
  }
42
47
  else {
43
- const envVar = ENV_VAR_MAP[provider];
44
- const envValue = process.env[envVar];
45
- if (envValue) {
46
- const useEnv = guardCancel(await clack.confirm({
47
- message: `Found ${envVar} in environment. Use it?`,
48
- initialValue: true,
49
- }));
50
- if (useEnv) {
51
- apiKey = { envRef: envVar };
52
- }
53
- }
54
- if (!apiKey) {
55
- const keyMode = guardCancel(await clack.select({
56
- message: 'How to store the API key?',
48
+ // Ask auth method for providers that support OAuth
49
+ let authMethod = 'apikey';
50
+ if (OAUTH_PROVIDERS.has(provider)) {
51
+ authMethod = guardCancel(await clack.select({
52
+ message: 'Authentication method',
57
53
  options: [
58
- { value: 'env', label: `Reference env var (\${${envVar}})`, hint: 'recommended' },
59
- { value: 'plain', label: 'Store directly in config', hint: 'less secure' },
54
+ { value: 'apikey', label: 'API Key', hint: 'traditional sk-... key' },
55
+ { value: 'oauth', label: 'OAuth (Browser Login)', hint: 'sign in with your account' },
60
56
  ],
61
57
  }));
62
- if (keyMode === 'env') {
63
- if (!envValue) {
64
- clack.log.warn(`Set ${envVar} in your shell profile before running CereWorker.`);
58
+ }
59
+ if (authMethod === 'oauth') {
60
+ auth = 'oauth';
61
+ oauthClientId = guardCancel(await clack.text({
62
+ message: `OAuth Client ID (register at ${provider}'s developer portal)`,
63
+ validate: (v) => (v.length > 0 ? undefined : 'Client ID is required'),
64
+ }));
65
+ if (provider === 'google') {
66
+ oauthClientSecret = guardCancel(await clack.text({
67
+ message: 'OAuth Client Secret (from Google Cloud Console)',
68
+ validate: (v) => (v.length > 0 ? undefined : 'Client Secret is required for Google'),
69
+ }));
70
+ }
71
+ clack.log.info(`After setup, run: cereworker auth ${provider}`);
72
+ }
73
+ else {
74
+ auth = 'apikey';
75
+ const envVar = ENV_VAR_MAP[provider];
76
+ const envValue = process.env[envVar];
77
+ if (envValue) {
78
+ const useEnv = guardCancel(await clack.confirm({
79
+ message: `Found ${envVar} in environment. Use it?`,
80
+ initialValue: true,
81
+ }));
82
+ if (useEnv) {
83
+ apiKey = { envRef: envVar };
65
84
  }
66
- apiKey = { envRef: envVar };
67
85
  }
68
- else {
69
- const key = guardCancel(await clack.text({
70
- message: `Enter your ${provider} API key`,
71
- validate: (v) => (v.length > 0 ? undefined : 'API key is required'),
86
+ if (!apiKey) {
87
+ const keyMode = guardCancel(await clack.select({
88
+ message: 'How to store the API key?',
89
+ options: [
90
+ { value: 'env', label: `Reference env var (\${${envVar}})`, hint: 'recommended' },
91
+ { value: 'plain', label: 'Store directly in config', hint: 'less secure' },
92
+ ],
72
93
  }));
73
- apiKey = { plaintext: key };
94
+ if (keyMode === 'env') {
95
+ if (!envValue) {
96
+ clack.log.warn(`Set ${envVar} in your shell profile before running CereWorker.`);
97
+ }
98
+ apiKey = { envRef: envVar };
99
+ }
100
+ else {
101
+ const key = guardCancel(await clack.text({
102
+ message: `Enter your ${provider} API key`,
103
+ validate: (v) => (v.length > 0 ? undefined : 'API key is required'),
104
+ }));
105
+ apiKey = { plaintext: key };
106
+ }
74
107
  }
75
108
  }
76
109
  }
@@ -103,6 +136,6 @@ export async function cerebrumStep() {
103
136
  model = selected;
104
137
  }
105
138
  }
106
- return { provider, model, apiKey, localBaseUrl };
139
+ return { provider, model, apiKey, localBaseUrl, auth, oauthClientId, oauthClientSecret };
107
140
  }
108
141
  //# sourceMappingURL=cerebrum.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cerebrum.js","sourceRoot":"","sources":["../../../src/onboard/steps/cerebrum.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cerebrum.js","sourceRoot":"","sources":["../../../src/onboard/steps/cerebrum.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../../src/onboard/wizard.ts"],"names":[],"mappings":"AAMA,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAWzD"}
1
+ {"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../../src/onboard/wizard.ts"],"names":[],"mappings":"AAOA,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAmBzD"}
@@ -3,11 +3,16 @@ import { cerebrumStep } from './steps/cerebrum.js';
3
3
  import { cerebellumStep } from './steps/cerebellum.js';
4
4
  import { channelsStep } from './steps/channels.js';
5
5
  import { summaryStep } from './steps/summary.js';
6
+ import { clack, guardCancel } from './prompter.js';
6
7
  export async function runOnboardingWizard() {
7
8
  const welcome = await welcomeStep();
8
9
  const cerebrum = await cerebrumStep();
9
10
  const cerebellum = await cerebellumStep();
10
- const channels = await channelsStep();
11
+ const configureChannels = guardCancel(await clack.confirm({
12
+ message: 'Configure messaging channels (Slack, Discord, Telegram, etc.)?',
13
+ initialValue: false,
14
+ }));
15
+ const channels = configureChannels ? await channelsStep() : [];
11
16
  await summaryStep({
12
17
  cerebrum,
13
18
  cerebellum,
@@ -1 +1 @@
1
- {"version":3,"file":"wizard.js","sourceRoot":"","sources":["../../src/onboard/wizard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,OAAO,GAAG,MAAM,WAAW,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;IACtC,MAAM,UAAU,GAAG,MAAM,cAAc,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;IACtC,MAAM,WAAW,CAAC;QAChB,QAAQ;QACR,UAAU;QACV,QAAQ;QACR,cAAc,EAAE,OAAO,CAAC,WAAW;KACpC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"wizard.js","sourceRoot":"","sources":["../../src/onboard/wizard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,OAAO,GAAG,MAAM,WAAW,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;IACtC,MAAM,UAAU,GAAG,MAAM,cAAc,EAAE,CAAC;IAE1C,MAAM,iBAAiB,GAAG,WAAW,CACnC,MAAM,KAAK,CAAC,OAAO,CAAC;QAClB,OAAO,EAAE,gEAAgE;QACzE,YAAY,EAAE,KAAK;KACpB,CAAC,CACH,CAAC;IACF,MAAM,QAAQ,GAAG,iBAAiB,CAAC,CAAC,CAAC,MAAM,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE/D,MAAM,WAAW,CAAC;QAChB,QAAQ;QACR,UAAU;QACV,QAAQ;QACR,cAAc,EAAE,OAAO,CAAC,WAAW;KACpC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CereWorkerConfig } from '@cereworker/config';
2
+ export declare function runHeadlessService(config: CereWorkerConfig): Promise<void>;
3
+ //# sourceMappingURL=serve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAM3D,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8DhF"}
package/dist/serve.js ADDED
@@ -0,0 +1,83 @@
1
+ import { createServer } from 'node:http';
2
+ import { homedir } from 'node:os';
3
+ import { configureLogger, createLogger } from '@cereworker/core';
4
+ import { createService } from './service.js';
5
+ const log = createLogger('serve');
6
+ export async function runHeadlessService(config) {
7
+ const startTime = Date.now();
8
+ // In headless mode, log all levels to stderr (captured by journalctl/systemd)
9
+ const logFile = config.logging.file || `${homedir()}/.cereworker/cereworker.log`;
10
+ configureLogger({
11
+ level: config.logging.level,
12
+ file: logFile,
13
+ stderr: true,
14
+ });
15
+ const service = createService(config);
16
+ // Start channels
17
+ const channelCount = await service.startChannels();
18
+ // Start gateway/node
19
+ const handles = await service.startGateway();
20
+ // Start health HTTP server
21
+ const mode = config.gateway.mode;
22
+ // Gateway mode: WS server on gateway.port, health on gateway.port + 1
23
+ // Node/standalone: health on gateway.port (no WS server using that port)
24
+ const healthPort = mode === 'gateway' ? config.gateway.port + 1 : config.gateway.port;
25
+ const healthServer = createHealthServer(config, handles, startTime);
26
+ await new Promise((resolve, reject) => {
27
+ healthServer.on('error', reject);
28
+ healthServer.listen(healthPort, () => {
29
+ log.info('Health server listening', { port: healthPort });
30
+ resolve();
31
+ });
32
+ });
33
+ // Graceful shutdown
34
+ let shuttingDown = false;
35
+ async function gracefulShutdown(signal) {
36
+ if (shuttingDown)
37
+ return;
38
+ shuttingDown = true;
39
+ log.info('Shutting down', { signal });
40
+ await new Promise((resolve) => {
41
+ healthServer.close(() => resolve());
42
+ });
43
+ await service.shutdown();
44
+ log.info('Shutdown complete');
45
+ process.exit(0);
46
+ }
47
+ process.on('SIGTERM', () => gracefulShutdown('SIGTERM'));
48
+ process.on('SIGINT', () => gracefulShutdown('SIGINT'));
49
+ process.on('unhandledRejection', (reason) => {
50
+ log.error('Unhandled rejection', { error: String(reason) });
51
+ });
52
+ log.info('CereWorker service ready', {
53
+ mode,
54
+ healthPort,
55
+ channels: channelCount,
56
+ nodeId: config.gateway.nodeId,
57
+ });
58
+ }
59
+ function createHealthServer(config, handles, startTime) {
60
+ return createServer((req, res) => {
61
+ if (req.method === 'GET' && req.url === '/healthz') {
62
+ const mode = config.gateway.mode;
63
+ const body = {
64
+ healthy: true,
65
+ mode,
66
+ uptime: Math.round((Date.now() - startTime) / 1000),
67
+ };
68
+ if (mode === 'gateway' && handles.server) {
69
+ body.nodeCount = handles.server.listNodes().length;
70
+ }
71
+ if (mode === 'node') {
72
+ body.nodeId = config.gateway.nodeId;
73
+ body.connected = handles.client?.isConnected() ?? false;
74
+ }
75
+ res.writeHead(200, { 'Content-Type': 'application/json' });
76
+ res.end(JSON.stringify(body));
77
+ return;
78
+ }
79
+ res.writeHead(404);
80
+ res.end('Not Found');
81
+ });
82
+ }
83
+ //# sourceMappingURL=serve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { Orchestrator } from '@cereworker/core';
2
+ import { CerebrumProvider } from '@cereworker/cerebrum';
3
+ import type { CereWorkerConfig } from '@cereworker/config';
4
+ import { type ChannelManager } from '@cereworker/channels';
5
+ import { SkillRegistry } from '@cereworker/skills';
6
+ import { GatewayServer, GatewayNodeClient } from '@cereworker/gateway';
7
+ export interface GatewayCallbacks {
8
+ onNodeConnected?: (nodeId: string, nodeCount: number) => void;
9
+ onNodeDisconnected?: (nodeId: string, nodeCount: number) => void;
10
+ }
11
+ export interface GatewayHandles {
12
+ server: GatewayServer | null;
13
+ client: GatewayNodeClient | null;
14
+ }
15
+ export interface ServiceInstance {
16
+ orchestrator: Orchestrator;
17
+ channelManager: ChannelManager;
18
+ cerebrum: CerebrumProvider;
19
+ skillRegistry: SkillRegistry;
20
+ startChannels(): Promise<number>;
21
+ startGateway(callbacks?: GatewayCallbacks): Promise<GatewayHandles>;
22
+ shutdown(): Promise<void>;
23
+ }
24
+ export declare function createService(config: CereWorkerConfig): ServiceInstance;
25
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAmC,MAAM,kBAAkB,CAAC;AAEjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEjF,OAAO,EAAoC,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAMrF,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAoB,MAAM,qBAAqB,CAAC;AAIzF,MAAM,WAAW,gBAAgB;IAC/B,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9D,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAClE;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;IAC7B,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACjC,YAAY,CAAC,SAAS,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACpE,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,eAAe,CAiQvE"}
@@ -0,0 +1,232 @@
1
+ import { homedir } from 'node:os';
2
+ import { join } from 'node:path';
3
+ import { Orchestrator, ConversationStore, createLogger } from '@cereworker/core';
4
+ import { CerebrumProvider } from '@cereworker/cerebrum';
5
+ import { createChannelManager } from '@cereworker/channels';
6
+ import { browserToolDefinitions } from '@cereworker/browser';
7
+ import { loadSkills, filterEligibleSkills, SkillRegistry } from '@cereworker/skills';
8
+ import { HippocampusStore, HippocampusCurator, createMemoryTools, } from '@cereworker/hippocampus';
9
+ import { GatewayServer, GatewayNodeClient, createProxyTools } from '@cereworker/gateway';
10
+ const log = createLogger('service');
11
+ export function createService(config) {
12
+ // Create persistent conversation store
13
+ const conversationStore = new ConversationStore();
14
+ const orchestrator = new Orchestrator({
15
+ conversationStore,
16
+ compaction: {
17
+ enabled: config.cerebrum.compaction.enabled,
18
+ threshold: config.cerebrum.compaction.threshold,
19
+ keepRecentMessages: config.cerebrum.compaction.keepRecentMessages,
20
+ contextWindow: config.cerebrum.contextWindow,
21
+ },
22
+ });
23
+ const cerebrumConfig = {
24
+ defaultProvider: config.cerebrum.defaultProvider,
25
+ defaultModel: config.cerebrum.defaultModel,
26
+ providers: config.cerebrum.providers,
27
+ maxSteps: config.cerebrum.maxSteps,
28
+ temperature: config.cerebrum.temperature,
29
+ };
30
+ const cerebrum = new CerebrumProvider(cerebrumConfig, {
31
+ denyList: config.tools.shell.denyList,
32
+ timeout: config.tools.shell.timeout,
33
+ maxOutputSize: config.tools.shell.maxOutputSize,
34
+ autoMode: config.tools.shell.autoMode,
35
+ });
36
+ // Set initial auto mode on orchestrator
37
+ orchestrator.setAutoMode(config.tools.shell.autoMode);
38
+ // Bridge CerebrumProvider to Orchestrator's CerebrumAdapter interface
39
+ orchestrator.setCerebrum({
40
+ stream: async (messages, _tools, callbacks) => {
41
+ await cerebrum.stream(messages, callbacks);
42
+ },
43
+ summarize: async (messages) => {
44
+ return cerebrum.summarize(messages);
45
+ },
46
+ });
47
+ // Load and inject skills
48
+ const skillRegistry = new SkillRegistry();
49
+ const skillDirs = [
50
+ ...config.skills.directories,
51
+ join(homedir(), '.cereworker', 'skills'),
52
+ join(process.cwd(), 'skills'),
53
+ ];
54
+ const allSkills = loadSkills(skillDirs);
55
+ const eligible = filterEligibleSkills(allSkills);
56
+ skillRegistry.registerAll(eligible);
57
+ const skillPrompt = skillRegistry.buildPrompt();
58
+ if (skillPrompt) {
59
+ orchestrator.setSystemContext(skillPrompt);
60
+ log.info('Skills loaded', { count: eligible.length, total: allSkills.length });
61
+ }
62
+ // Register hippocampus (memory) tools
63
+ let hippocampusStore = null;
64
+ if (config.hippocampus.enabled) {
65
+ hippocampusStore = new HippocampusStore(config.hippocampus.directory);
66
+ const memoryTools = createMemoryTools(hippocampusStore);
67
+ orchestrator.registerTool('memory_read', {
68
+ description: 'Read a memory file (MEMORY.md or a daily log like 2026-03-08.md)',
69
+ parameters: {},
70
+ execute: async (args) => memoryTools.executeMemoryRead(args),
71
+ });
72
+ orchestrator.registerTool('memory_write', {
73
+ description: 'Write/update the main MEMORY.md file with curated long-term notes',
74
+ parameters: {},
75
+ execute: async (args) => memoryTools.executeMemoryWrite(args),
76
+ });
77
+ orchestrator.registerTool('memory_log', {
78
+ description: "Append a note to today's daily log",
79
+ parameters: {},
80
+ execute: async (args) => memoryTools.executeMemoryLog(args),
81
+ });
82
+ orchestrator.registerTool('memory_search', {
83
+ description: 'Search across all memory files for a text pattern',
84
+ parameters: {},
85
+ execute: async (args) => memoryTools.executeMemorySearch(args),
86
+ });
87
+ }
88
+ // Setup fine-tune data provider (Instinct pillar)
89
+ if (config.hippocampus.enabled && config.cerebellum.finetune?.enabled) {
90
+ const curator = new HippocampusCurator(hippocampusStore, { generate: (prompt) => cerebrum.generate(prompt) });
91
+ const scheduleMap = {
92
+ auto: 'when idle',
93
+ hourly: 'every hour',
94
+ daily: 'every day',
95
+ weekly: 'every week',
96
+ };
97
+ const scheduleHint = scheduleMap[config.cerebellum.finetune.schedule] ?? 'when idle';
98
+ orchestrator.setFineTuneDataProvider(async () => {
99
+ await curator.curate();
100
+ const pairs = curator.getPendingPairs();
101
+ if (pairs.length > 0) {
102
+ curator.markConsumed();
103
+ }
104
+ return pairs;
105
+ }, config.cerebellum.finetune.method);
106
+ log.info('Fine-tune data provider configured', { schedule: scheduleHint });
107
+ }
108
+ // Setup sub-agents
109
+ if (config.subAgents.enabled) {
110
+ orchestrator.setupSubAgents({
111
+ maxConcurrent: config.subAgents.maxConcurrent,
112
+ monitorIntervalMs: config.subAgents.monitorIntervalSeconds * 1000,
113
+ });
114
+ }
115
+ // Register browser tools with orchestrator
116
+ for (const [name, toolDef] of Object.entries(browserToolDefinitions)) {
117
+ orchestrator.registerTool(name, {
118
+ description: toolDef.description,
119
+ parameters: {},
120
+ execute: async (args) => toolDef.execute(args),
121
+ });
122
+ }
123
+ // Create channel manager
124
+ const channelManager = createChannelManager(config);
125
+ // Wire channels to orchestrator
126
+ channelManager.setHandler(async (msg) => {
127
+ await orchestrator.sendMessage(msg.text);
128
+ const messages = orchestrator.getMessages();
129
+ const lastMsg = messages[messages.length - 1];
130
+ return lastMsg?.role === 'cerebrum' ? lastMsg.content : undefined;
131
+ });
132
+ orchestrator.start();
133
+ // Track gateway handles for cleanup
134
+ let gatewayServer = null;
135
+ let gatewayClient = null;
136
+ async function startChannels() {
137
+ const channels = channelManager.list();
138
+ if (channels.length > 0) {
139
+ await channelManager.startAll();
140
+ return channelManager.listConnected().length;
141
+ }
142
+ return 0;
143
+ }
144
+ async function startGateway(callbacks) {
145
+ const mode = config.gateway.mode;
146
+ if (mode === 'gateway') {
147
+ const server = new GatewayServer({
148
+ port: config.gateway.port,
149
+ token: config.gateway.token,
150
+ invokeTimeoutMs: config.gateway.invokeTimeoutMs,
151
+ pingIntervalMs: config.gateway.pingIntervalMs,
152
+ });
153
+ server.setNodeConnectedHandler((nodeId, capabilities) => {
154
+ const proxyTools = createProxyTools(server, nodeId, capabilities);
155
+ orchestrator.registerTools(proxyTools);
156
+ orchestrator.emit({ type: 'node:connected', nodeId, capabilities });
157
+ const nodeCount = server.listNodes().length;
158
+ orchestrator.setGatewayMode('gateway', { connectedNodes: nodeCount });
159
+ callbacks?.onNodeConnected?.(nodeId, nodeCount);
160
+ });
161
+ server.setNodeDisconnectedHandler((nodeId, reason, capabilities) => {
162
+ for (const cap of capabilities) {
163
+ orchestrator.unregisterTool(`${cap}@${nodeId}`);
164
+ }
165
+ orchestrator.emit({ type: 'node:disconnected', nodeId, reason });
166
+ const remainingNodes = server.listNodes().length;
167
+ orchestrator.setGatewayMode('gateway', { connectedNodes: remainingNodes });
168
+ callbacks?.onNodeDisconnected?.(nodeId, remainingNodes);
169
+ });
170
+ orchestrator.setGatewayMode('gateway', { connectedNodes: 0 });
171
+ await server.start();
172
+ gatewayServer = server;
173
+ log.info('Gateway server started', { port: config.gateway.port });
174
+ return { server, client: null };
175
+ }
176
+ if (mode === 'node') {
177
+ if (!config.gateway.gatewayUrl || !config.gateway.nodeId) {
178
+ log.error('Node mode requires gatewayUrl and nodeId in config');
179
+ return { server: null, client: null };
180
+ }
181
+ const client = new GatewayNodeClient({
182
+ gatewayUrl: config.gateway.gatewayUrl,
183
+ nodeId: config.gateway.nodeId,
184
+ token: config.gateway.token ?? '',
185
+ capabilities: config.gateway.capabilities,
186
+ }, async (tool, args) => {
187
+ const toolDef = orchestrator.tools.get(tool);
188
+ if (!toolDef)
189
+ throw new Error(`Unknown tool: ${tool}`);
190
+ return toolDef.execute(args);
191
+ });
192
+ client.setEmergencyStopHandler(() => {
193
+ orchestrator.emergencyStop();
194
+ });
195
+ orchestrator.setGatewayMode('node', { gatewayUrl: config.gateway.gatewayUrl });
196
+ try {
197
+ await client.connect();
198
+ gatewayClient = client;
199
+ log.info('Connected to gateway', { url: config.gateway.gatewayUrl });
200
+ }
201
+ catch (err) {
202
+ log.error('Failed to connect to gateway', { error: err.message });
203
+ }
204
+ return { server: null, client };
205
+ }
206
+ // standalone
207
+ return { server: null, client: null };
208
+ }
209
+ async function shutdown() {
210
+ if (gatewayServer) {
211
+ await gatewayServer.stop();
212
+ gatewayServer = null;
213
+ }
214
+ if (gatewayClient) {
215
+ gatewayClient.disconnect();
216
+ gatewayClient = null;
217
+ }
218
+ channelManager.stopAll();
219
+ orchestrator.stop();
220
+ log.info('Service shut down');
221
+ }
222
+ return {
223
+ orchestrator,
224
+ channelManager,
225
+ cerebrum,
226
+ skillRegistry,
227
+ startChannels,
228
+ startGateway,
229
+ shutdown,
230
+ };
231
+ }
232
+ //# sourceMappingURL=service.js.map