@redplanethq/corebrain 2.8.18 → 2.8.20
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/assets/assets/AppIcon.icns +0 -0
- package/dist/cli-bun-registry.generated.d.ts +13 -0
- package/dist/cli-bun-registry.generated.d.ts.map +1 -0
- package/dist/cli-bun-registry.generated.js +233 -0
- package/dist/cli-bun-registry.generated.js.map +1 -0
- package/dist/cli-bun.d.ts +17 -0
- package/dist/cli-bun.d.ts.map +1 -0
- package/dist/cli-bun.js +55 -0
- package/dist/cli-bun.js.map +1 -0
- package/dist/commands/browser/close-session.d.ts.map +1 -1
- package/dist/commands/browser/close-session.js +3 -0
- package/dist/commands/browser/close-session.js.map +1 -1
- package/dist/commands/browser/close.d.ts.map +1 -1
- package/dist/commands/browser/close.js +3 -0
- package/dist/commands/browser/close.js.map +1 -1
- package/dist/commands/browser/command.d.ts.map +1 -1
- package/dist/commands/browser/command.js +3 -0
- package/dist/commands/browser/command.js.map +1 -1
- package/dist/commands/browser/create-profile.d.ts.map +1 -1
- package/dist/commands/browser/create-profile.js +3 -0
- package/dist/commands/browser/create-profile.js.map +1 -1
- package/dist/commands/browser/create-session.d.ts.map +1 -1
- package/dist/commands/browser/create-session.js +3 -0
- package/dist/commands/browser/create-session.js.map +1 -1
- package/dist/commands/browser/delete-profile.d.ts.map +1 -1
- package/dist/commands/browser/delete-profile.js +3 -0
- package/dist/commands/browser/delete-profile.js.map +1 -1
- package/dist/commands/browser/delete-session.d.ts.map +1 -1
- package/dist/commands/browser/delete-session.js +3 -0
- package/dist/commands/browser/delete-session.js.map +1 -1
- package/dist/commands/browser/install.d.ts.map +1 -1
- package/dist/commands/browser/install.js +3 -0
- package/dist/commands/browser/install.js.map +1 -1
- package/dist/commands/browser/list-sessions.d.ts.map +1 -1
- package/dist/commands/browser/list-sessions.js +3 -0
- package/dist/commands/browser/list-sessions.js.map +1 -1
- package/dist/commands/browser/open-head.d.ts.map +1 -1
- package/dist/commands/browser/open-head.js +3 -0
- package/dist/commands/browser/open-head.js.map +1 -1
- package/dist/commands/browser/open.d.ts.map +1 -1
- package/dist/commands/browser/open.js +3 -0
- package/dist/commands/browser/open.js.map +1 -1
- package/dist/commands/browser/set-browser.d.ts.map +1 -1
- package/dist/commands/browser/set-browser.js +3 -0
- package/dist/commands/browser/set-browser.js.map +1 -1
- package/dist/commands/browser/status.d.ts.map +1 -1
- package/dist/commands/browser/status.js +3 -0
- package/dist/commands/browser/status.js.map +1 -1
- package/dist/commands/coding/agents.d.ts.map +1 -1
- package/dist/commands/coding/agents.js +3 -0
- package/dist/commands/coding/agents.js.map +1 -1
- package/dist/commands/coding/config.d.ts.map +1 -1
- package/dist/commands/coding/config.js +3 -0
- package/dist/commands/coding/config.js.map +1 -1
- package/dist/commands/coding/list.d.ts.map +1 -1
- package/dist/commands/coding/list.js +3 -0
- package/dist/commands/coding/list.js.map +1 -1
- package/dist/commands/coding/read.d.ts.map +1 -1
- package/dist/commands/coding/read.js +3 -0
- package/dist/commands/coding/read.js.map +1 -1
- package/dist/commands/coding/remove.d.ts.map +1 -1
- package/dist/commands/coding/remove.js +3 -0
- package/dist/commands/coding/remove.js.map +1 -1
- package/dist/commands/coding/setup.d.ts.map +1 -1
- package/dist/commands/coding/setup.js +3 -0
- package/dist/commands/coding/setup.js.map +1 -1
- package/dist/commands/exec/config.d.ts.map +1 -1
- package/dist/commands/exec/config.js +3 -0
- package/dist/commands/exec/config.js.map +1 -1
- package/dist/commands/folder/add.d.ts.map +1 -1
- package/dist/commands/folder/add.js +3 -0
- package/dist/commands/folder/add.js.map +1 -1
- package/dist/commands/folder/list.d.ts.map +1 -1
- package/dist/commands/folder/list.js +3 -0
- package/dist/commands/folder/list.js.map +1 -1
- package/dist/commands/folder/remove.d.ts.map +1 -1
- package/dist/commands/folder/remove.js +3 -0
- package/dist/commands/folder/remove.js.map +1 -1
- package/dist/commands/folder/scope.d.ts.map +1 -1
- package/dist/commands/folder/scope.js +3 -0
- package/dist/commands/folder/scope.js.map +1 -1
- package/dist/commands/gateway/config.d.ts +16 -0
- package/dist/commands/gateway/config.d.ts.map +1 -1
- package/dist/commands/gateway/config.js +21 -2
- package/dist/commands/gateway/config.js.map +1 -1
- package/dist/commands/gateway/index.d.ts +1 -1
- package/dist/commands/gateway/index.d.ts.map +1 -1
- package/dist/commands/gateway/index.js +9 -1
- package/dist/commands/gateway/index.js.map +1 -1
- package/dist/commands/gateway/list.d.ts +9 -0
- package/dist/commands/gateway/list.d.ts.map +1 -0
- package/dist/commands/gateway/list.js +63 -0
- package/dist/commands/gateway/list.js.map +1 -0
- package/dist/commands/gateway/setup.d.ts +15 -0
- package/dist/commands/gateway/setup.d.ts.map +1 -0
- package/dist/commands/gateway/setup.js +82 -0
- package/dist/commands/gateway/setup.js.map +1 -0
- package/dist/commands/gateway/status.d.ts +4 -1
- package/dist/commands/gateway/status.d.ts.map +1 -1
- package/dist/commands/gateway/status.js +97 -17
- package/dist/commands/gateway/status.js.map +1 -1
- package/dist/commands/setup.d.ts +9 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +28 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/server/api/gateways.d.ts +50 -0
- package/dist/server/api/gateways.d.ts.map +1 -0
- package/dist/server/api/gateways.js +63 -0
- package/dist/server/api/gateways.js.map +1 -0
- package/dist/templates/env-overrides.d.ts +15 -0
- package/dist/templates/env-overrides.d.ts.map +1 -0
- package/dist/templates/env-overrides.js +40 -0
- package/dist/templates/env-overrides.js.map +1 -0
- package/dist/templates/gateway-compose.d.ts +14 -0
- package/dist/templates/gateway-compose.d.ts.map +1 -0
- package/dist/templates/gateway-compose.js +34 -0
- package/dist/templates/gateway-compose.js.map +1 -0
- package/dist/templates/webapp-compose.d.ts +11 -0
- package/dist/templates/webapp-compose.d.ts.map +1 -0
- package/dist/templates/webapp-compose.js +31 -0
- package/dist/templates/webapp-compose.js.map +1 -0
- package/dist/tui/chat.d.ts.map +1 -1
- package/dist/tui/chat.js +250 -47
- package/dist/tui/chat.js.map +1 -1
- package/dist/tui/components/approval-panel.d.ts +21 -2
- package/dist/tui/components/approval-panel.d.ts.map +1 -1
- package/dist/tui/components/approval-panel.js +87 -16
- package/dist/tui/components/approval-panel.js.map +1 -1
- package/dist/tui/components/status-line.d.ts +3 -0
- package/dist/tui/components/status-line.d.ts.map +1 -1
- package/dist/tui/components/status-line.js +9 -0
- package/dist/tui/components/status-line.js.map +1 -1
- package/dist/tui/components/task-detail.d.ts +26 -0
- package/dist/tui/components/task-detail.d.ts.map +1 -0
- package/dist/tui/components/task-detail.js +159 -0
- package/dist/tui/components/task-detail.js.map +1 -0
- package/dist/tui/components/task-list.d.ts +34 -0
- package/dist/tui/components/task-list.d.ts.map +1 -0
- package/dist/tui/components/task-list.js +245 -0
- package/dist/tui/components/task-list.js.map +1 -0
- package/dist/tui/components/tool-call-item.d.ts +6 -0
- package/dist/tui/components/tool-call-item.d.ts.map +1 -1
- package/dist/tui/components/tool-call-item.js +78 -12
- package/dist/tui/components/tool-call-item.js.map +1 -1
- package/dist/tui/hooks/use-conversation.d.ts.map +1 -1
- package/dist/tui/hooks/use-conversation.js +116 -35
- package/dist/tui/hooks/use-conversation.js.map +1 -1
- package/dist/tui/utils/html-to-md.d.ts +2 -0
- package/dist/tui/utils/html-to-md.d.ts.map +1 -0
- package/dist/tui/utils/html-to-md.js +17 -0
- package/dist/tui/utils/html-to-md.js.map +1 -0
- package/dist/tui/utils/stream.d.ts +58 -5
- package/dist/tui/utils/stream.d.ts.map +1 -1
- package/dist/tui/utils/stream.js +69 -0
- package/dist/tui/utils/stream.js.map +1 -1
- package/dist/utils/require-native-gateway.d.ts +11 -0
- package/dist/utils/require-native-gateway.d.ts.map +1 -0
- package/dist/utils/require-native-gateway.js +22 -0
- package/dist/utils/require-native-gateway.js.map +1 -0
- package/dist/utils/setup/docker.d.ts +10 -0
- package/dist/utils/setup/docker.d.ts.map +1 -0
- package/dist/utils/setup/docker.js +253 -0
- package/dist/utils/setup/docker.js.map +1 -0
- package/dist/utils/setup/local.d.ts +9 -0
- package/dist/utils/setup/local.d.ts.map +1 -0
- package/dist/utils/setup/local.js +226 -0
- package/dist/utils/setup/local.js.map +1 -0
- package/dist/utils/setup/railway.d.ts +9 -0
- package/dist/utils/setup/railway.d.ts.map +1 -0
- package/dist/utils/setup/railway.js +244 -0
- package/dist/utils/setup/railway.js.map +1 -0
- package/package.json +5 -3
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as p from '@clack/prompts';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { getPreferences } from '../config/preferences.js';
|
|
4
|
+
/**
|
|
5
|
+
* Bail out of a command that only makes sense when this machine runs a native
|
|
6
|
+
* gateway (folder / browser / coding / exec). Returns true when the caller
|
|
7
|
+
* should continue, false (after printing an error + setting exitCode=1) when
|
|
8
|
+
* the caller should return immediately.
|
|
9
|
+
*
|
|
10
|
+
* Single source for the redirect message — change here, every gated command
|
|
11
|
+
* stays consistent.
|
|
12
|
+
*/
|
|
13
|
+
export function requireNativeGateway() {
|
|
14
|
+
const prefs = getPreferences();
|
|
15
|
+
if (prefs.gateway?.id)
|
|
16
|
+
return true;
|
|
17
|
+
p.log.error('No native gateway on this machine.');
|
|
18
|
+
p.log.info(`Run ${chalk.cyan('corebrain gateway setup --kind native')} first, or manage a remote gateway via the CORE webapp.`);
|
|
19
|
+
process.exitCode = 1;
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=require-native-gateway.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"require-native-gateway.js","sourceRoot":"","sources":["../../src/utils/require-native-gateway.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,cAAc,EAAC,MAAM,sBAAsB,CAAC;AAEpD;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB;IACnC,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;IAC/B,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE;QAAE,OAAO,IAAI,CAAC;IAEnC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAClD,CAAC,CAAC,GAAG,CAAC,IAAI,CACT,OAAO,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,yDAAyD,CACnH,CAAC;IACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACrB,OAAO,KAAK,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../../src/utils/setup/docker.ts"],"names":[],"mappings":"AAiDA,UAAU,iBAAiB;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,iBAAiB,GAAG;IAAC,SAAS,EAAE,IAAI,CAAA;CAAC,CAAC,CAyOzF"}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
import * as p from '@clack/prompts';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
4
|
+
import { homedir, hostname } from 'node:os';
|
|
5
|
+
import { join } from 'node:path';
|
|
6
|
+
import { exec as execCb, spawn } from 'node:child_process';
|
|
7
|
+
import { promisify } from 'node:util';
|
|
8
|
+
import { generateSecurityKey } from '../../server/api/auth.js';
|
|
9
|
+
import { registerGatewayWithApi, waitForManifest, } from '../../server/api/gateways.js';
|
|
10
|
+
import { startTailscaleFunnel } from '../../server/api/tunnels/tailscale.js';
|
|
11
|
+
import { fetchGatewayComposeYaml, fetchGatewayEnvExample, } from '../../templates/gateway-compose.js';
|
|
12
|
+
import { applyEnvOverrides } from '../../templates/env-overrides.js';
|
|
13
|
+
import { getConfig } from '../../config/index.js';
|
|
14
|
+
const exec = promisify(execCb);
|
|
15
|
+
function safeDirName(name) {
|
|
16
|
+
return name.replace(/[^a-zA-Z0-9_-]+/g, '-').replace(/^-+|-+$/g, '') || 'gateway';
|
|
17
|
+
}
|
|
18
|
+
async function commandExists(cmd) {
|
|
19
|
+
try {
|
|
20
|
+
await exec(`command -v ${cmd}`);
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
async function dockerComposeUp(dir) {
|
|
28
|
+
return new Promise((resolve, reject) => {
|
|
29
|
+
const child = spawn('docker', ['compose', 'up', '-d'], {
|
|
30
|
+
cwd: dir,
|
|
31
|
+
stdio: 'inherit',
|
|
32
|
+
});
|
|
33
|
+
child.on('exit', code => {
|
|
34
|
+
if (code === 0)
|
|
35
|
+
resolve();
|
|
36
|
+
else
|
|
37
|
+
reject(new Error(`docker compose up exited with code ${code}`));
|
|
38
|
+
});
|
|
39
|
+
child.on('error', reject);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
export async function setupDockerGateway() {
|
|
43
|
+
const config = getConfig();
|
|
44
|
+
if (!config.auth?.apiKey || !config.auth?.url) {
|
|
45
|
+
throw new Error('Not authenticated. Run `corebrain login` first.');
|
|
46
|
+
}
|
|
47
|
+
if (!(await commandExists('docker'))) {
|
|
48
|
+
throw new Error('`docker` not found on PATH. Install Docker Desktop (or the docker engine) and retry.');
|
|
49
|
+
}
|
|
50
|
+
const name = await p.text({
|
|
51
|
+
message: 'Gateway name',
|
|
52
|
+
placeholder: `${hostname()}-docker`,
|
|
53
|
+
initialValue: `${hostname()}-docker`,
|
|
54
|
+
validate: v => (v?.trim() ? undefined : 'Name is required'),
|
|
55
|
+
});
|
|
56
|
+
if (p.isCancel(name))
|
|
57
|
+
return { cancelled: true };
|
|
58
|
+
const description = await p.text({
|
|
59
|
+
message: 'Description (optional)',
|
|
60
|
+
placeholder: 'Cloud-hosted CoreBrain gateway',
|
|
61
|
+
defaultValue: '',
|
|
62
|
+
});
|
|
63
|
+
if (p.isCancel(description))
|
|
64
|
+
return { cancelled: true };
|
|
65
|
+
const port = 7787;
|
|
66
|
+
const claudeToken = await p.text({
|
|
67
|
+
message: chalk.dim('CLAUDE_CODE_OAUTH_TOKEN (optional — from `claude setup-token`)'),
|
|
68
|
+
placeholder: 'Leave blank to skip',
|
|
69
|
+
defaultValue: '',
|
|
70
|
+
});
|
|
71
|
+
if (p.isCancel(claudeToken))
|
|
72
|
+
return { cancelled: true };
|
|
73
|
+
const openaiKey = await p.text({
|
|
74
|
+
message: chalk.dim('OPENAI_API_KEY (optional — for codex-cli)'),
|
|
75
|
+
placeholder: 'Leave blank to skip',
|
|
76
|
+
defaultValue: '',
|
|
77
|
+
});
|
|
78
|
+
if (p.isCancel(openaiKey))
|
|
79
|
+
return { cancelled: true };
|
|
80
|
+
const githubToken = await p.text({
|
|
81
|
+
message: chalk.dim('GITHUB_TOKEN (optional — for git clone of private repos)'),
|
|
82
|
+
placeholder: 'Leave blank to skip',
|
|
83
|
+
defaultValue: '',
|
|
84
|
+
});
|
|
85
|
+
if (p.isCancel(githubToken))
|
|
86
|
+
return { cancelled: true };
|
|
87
|
+
const dirName = safeDirName(name);
|
|
88
|
+
const composeDir = join(homedir(), '.corebrain', 'gateways', dirName);
|
|
89
|
+
if (existsSync(composeDir)) {
|
|
90
|
+
const overwrite = await p.confirm({
|
|
91
|
+
message: `${composeDir} already exists. Overwrite docker-compose.yaml + .env?`,
|
|
92
|
+
initialValue: false,
|
|
93
|
+
});
|
|
94
|
+
if (p.isCancel(overwrite) || !overwrite)
|
|
95
|
+
return { cancelled: true };
|
|
96
|
+
}
|
|
97
|
+
mkdirSync(composeDir, { recursive: true });
|
|
98
|
+
const securityKey = generateSecurityKey();
|
|
99
|
+
const fetchSpinner = p.spinner();
|
|
100
|
+
fetchSpinner.start('Fetching docker-compose.yaml + .env.example from GitHub...');
|
|
101
|
+
let composeYaml;
|
|
102
|
+
let envExample;
|
|
103
|
+
try {
|
|
104
|
+
[composeYaml, envExample] = await Promise.all([
|
|
105
|
+
fetchGatewayComposeYaml(),
|
|
106
|
+
fetchGatewayEnvExample(),
|
|
107
|
+
]);
|
|
108
|
+
fetchSpinner.stop(chalk.green('Fetched templates'));
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
fetchSpinner.stop(chalk.red('Could not fetch templates'));
|
|
112
|
+
throw err;
|
|
113
|
+
}
|
|
114
|
+
const overrides = {
|
|
115
|
+
COREBRAIN_API_URL: config.auth.url,
|
|
116
|
+
COREBRAIN_API_KEY: config.auth.apiKey,
|
|
117
|
+
COREBRAIN_GATEWAY_NAME: name,
|
|
118
|
+
COREBRAIN_GATEWAY_SECURITY_KEY: securityKey,
|
|
119
|
+
COREBRAIN_GATEWAY_HTTP_PORT: String(port),
|
|
120
|
+
};
|
|
121
|
+
if (description?.trim()) {
|
|
122
|
+
overrides.COREBRAIN_GATEWAY_DESCRIPTION = description.trim();
|
|
123
|
+
}
|
|
124
|
+
if (claudeToken?.trim()) {
|
|
125
|
+
overrides.CLAUDE_CODE_OAUTH_TOKEN = claudeToken.trim();
|
|
126
|
+
}
|
|
127
|
+
if (openaiKey?.trim()) {
|
|
128
|
+
overrides.OPENAI_API_KEY = openaiKey.trim();
|
|
129
|
+
}
|
|
130
|
+
if (githubToken?.trim()) {
|
|
131
|
+
overrides.GITHUB_TOKEN = githubToken.trim();
|
|
132
|
+
}
|
|
133
|
+
const envFile = applyEnvOverrides(envExample, overrides);
|
|
134
|
+
writeFileSync(join(composeDir, 'docker-compose.yaml'), composeYaml, 'utf-8');
|
|
135
|
+
writeFileSync(join(composeDir, '.env'), envFile, 'utf-8');
|
|
136
|
+
p.log.success(`Wrote ${composeDir}/{docker-compose.yaml,.env}`);
|
|
137
|
+
const startNow = await p.confirm({
|
|
138
|
+
message: 'Start the gateway container now (`docker compose up -d`)?',
|
|
139
|
+
initialValue: true,
|
|
140
|
+
});
|
|
141
|
+
if (p.isCancel(startNow) || !startNow) {
|
|
142
|
+
p.note([
|
|
143
|
+
'Files are ready. To bring it up later:',
|
|
144
|
+
` cd ${composeDir} && docker compose up -d`,
|
|
145
|
+
'',
|
|
146
|
+
`Then re-run ${chalk.cyan('corebrain gateway setup')} to register it,`,
|
|
147
|
+
`or register manually with the security key in ${composeDir}/.env`,
|
|
148
|
+
].join('\n'), 'Skipped');
|
|
149
|
+
return { cancelled: true };
|
|
150
|
+
}
|
|
151
|
+
const upSpinner = p.spinner();
|
|
152
|
+
upSpinner.start('Starting container (this may pull the image)...');
|
|
153
|
+
try {
|
|
154
|
+
await dockerComposeUp(composeDir);
|
|
155
|
+
upSpinner.stop(chalk.green('Container is up'));
|
|
156
|
+
}
|
|
157
|
+
catch (err) {
|
|
158
|
+
upSpinner.stop(chalk.red('docker compose up failed'));
|
|
159
|
+
throw err;
|
|
160
|
+
}
|
|
161
|
+
const localUrl = `http://localhost:${port}`;
|
|
162
|
+
const waitSpinner = p.spinner();
|
|
163
|
+
waitSpinner.start(`Waiting for gateway manifest at ${localUrl}/manifest...`);
|
|
164
|
+
const reachable = await waitForManifest(localUrl, securityKey, 90_000);
|
|
165
|
+
if (!reachable) {
|
|
166
|
+
waitSpinner.stop(chalk.red('Gateway did not respond within 90s'));
|
|
167
|
+
throw new Error(`Container is up but /manifest never returned 200. Check logs: cd ${composeDir} && docker compose logs -f`);
|
|
168
|
+
}
|
|
169
|
+
waitSpinner.stop(chalk.green('Gateway is reachable on localhost'));
|
|
170
|
+
let publicBaseUrl = localUrl;
|
|
171
|
+
const tailscaleAvailable = await commandExists('tailscale');
|
|
172
|
+
const wantTunnel = await p.select({
|
|
173
|
+
message: 'How should CORE reach this gateway?',
|
|
174
|
+
options: [
|
|
175
|
+
{
|
|
176
|
+
value: 'tailscale',
|
|
177
|
+
label: 'Tailscale funnel',
|
|
178
|
+
hint: tailscaleAvailable
|
|
179
|
+
? 'public HTTPS via your tailnet'
|
|
180
|
+
: chalk.yellow('tailscale not on PATH — install first'),
|
|
181
|
+
},
|
|
182
|
+
{ value: 'manual', label: 'I have my own public URL', hint: 'reverse proxy / Cloudflare tunnel / etc' },
|
|
183
|
+
{ value: 'localhost', label: 'localhost only', hint: 'CORE Cloud cannot reach this' },
|
|
184
|
+
],
|
|
185
|
+
initialValue: tailscaleAvailable ? 'tailscale' : 'manual',
|
|
186
|
+
});
|
|
187
|
+
if (p.isCancel(wantTunnel))
|
|
188
|
+
return { cancelled: true };
|
|
189
|
+
if (wantTunnel === 'tailscale') {
|
|
190
|
+
const tunnelSpinner = p.spinner();
|
|
191
|
+
tunnelSpinner.start('Starting tailscale funnel...');
|
|
192
|
+
try {
|
|
193
|
+
const result = await startTailscaleFunnel(port);
|
|
194
|
+
publicBaseUrl = result.url;
|
|
195
|
+
tunnelSpinner.stop(chalk.green(`Tunnel up at ${publicBaseUrl}`));
|
|
196
|
+
}
|
|
197
|
+
catch (err) {
|
|
198
|
+
tunnelSpinner.stop(chalk.red('Tailscale funnel failed'));
|
|
199
|
+
throw err;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
else if (wantTunnel === 'manual') {
|
|
203
|
+
const manual = await p.text({
|
|
204
|
+
message: 'Public URL CORE should use to reach this gateway',
|
|
205
|
+
placeholder: 'https://gateway.example.com',
|
|
206
|
+
validate: v => v && /^https?:\/\//.test(v.trim()) ? undefined : 'URL must start with http:// or https://',
|
|
207
|
+
});
|
|
208
|
+
if (p.isCancel(manual))
|
|
209
|
+
return { cancelled: true };
|
|
210
|
+
publicBaseUrl = manual.trim().replace(/\/$/, '');
|
|
211
|
+
}
|
|
212
|
+
const addToCore = await p.confirm({
|
|
213
|
+
message: `Add this gateway to CORE (${publicBaseUrl})?`,
|
|
214
|
+
initialValue: true,
|
|
215
|
+
});
|
|
216
|
+
if (p.isCancel(addToCore) || !addToCore) {
|
|
217
|
+
p.note([
|
|
218
|
+
`Container running at ${localUrl} (public: ${publicBaseUrl}).`,
|
|
219
|
+
'Register later via Settings → Gateways in the webapp,',
|
|
220
|
+
`or with the security key in ${composeDir}/.env:`,
|
|
221
|
+
` ${chalk.yellow(securityKey)}`,
|
|
222
|
+
].join('\n'), 'Not registered');
|
|
223
|
+
return { cancelled: true };
|
|
224
|
+
}
|
|
225
|
+
const regSpinner = p.spinner();
|
|
226
|
+
regSpinner.start('Registering with CORE...');
|
|
227
|
+
let gatewayId;
|
|
228
|
+
try {
|
|
229
|
+
const result = await registerGatewayWithApi({
|
|
230
|
+
baseUrl: publicBaseUrl,
|
|
231
|
+
securityKey,
|
|
232
|
+
name: name,
|
|
233
|
+
});
|
|
234
|
+
gatewayId = result.gatewayId;
|
|
235
|
+
regSpinner.stop(chalk.green('Registered'));
|
|
236
|
+
}
|
|
237
|
+
catch (err) {
|
|
238
|
+
regSpinner.stop(chalk.red('Registration failed'));
|
|
239
|
+
throw err;
|
|
240
|
+
}
|
|
241
|
+
p.note([
|
|
242
|
+
`${chalk.bold('Gateway:')} ${name}`,
|
|
243
|
+
`${chalk.bold('Local URL:')} ${localUrl}`,
|
|
244
|
+
`${chalk.bold('Public URL:')} ${publicBaseUrl}`,
|
|
245
|
+
`${chalk.bold('Gateway ID:')} ${gatewayId}`,
|
|
246
|
+
`${chalk.bold('Compose dir:')} ${composeDir}`,
|
|
247
|
+
'',
|
|
248
|
+
`${chalk.dim('Logs:')} cd ${composeDir} && docker compose logs -f`,
|
|
249
|
+
`${chalk.dim('Stop:')} cd ${composeDir} && docker compose down`,
|
|
250
|
+
].join('\n'), 'Docker gateway ready');
|
|
251
|
+
return { gatewayId, baseUrl: publicBaseUrl, composeDir };
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=docker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../../src/utils/setup/docker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../src/utils/setup/local.ts"],"names":[],"mappings":"AA4CA,UAAU,gBAAgB;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CAClB;AAqGD,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,GAAG;IAAC,SAAS,EAAE,IAAI,CAAA;CAAC,CAAC,CAiHtF"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import * as p from '@clack/prompts';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
4
|
+
import { homedir } from 'node:os';
|
|
5
|
+
import { join } from 'node:path';
|
|
6
|
+
import { randomBytes } from 'node:crypto';
|
|
7
|
+
import { exec as execCb, spawn } from 'node:child_process';
|
|
8
|
+
import { promisify } from 'node:util';
|
|
9
|
+
import { PROVIDER_SPECS, } from '@redplanethq/sdk';
|
|
10
|
+
import { applyEnvOverrides } from '../../templates/env-overrides.js';
|
|
11
|
+
import { fetchWebappComposeYaml, fetchWebappEnvExample, } from '../../templates/webapp-compose.js';
|
|
12
|
+
const exec = promisify(execCb);
|
|
13
|
+
async function commandExists(cmd) {
|
|
14
|
+
try {
|
|
15
|
+
await exec(`command -v ${cmd}`);
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
async function dockerComposeUp(dir) {
|
|
23
|
+
return new Promise((resolve, reject) => {
|
|
24
|
+
const child = spawn('docker', ['compose', 'up', '-d'], {
|
|
25
|
+
cwd: dir,
|
|
26
|
+
stdio: 'inherit',
|
|
27
|
+
});
|
|
28
|
+
child.on('exit', code => {
|
|
29
|
+
if (code === 0)
|
|
30
|
+
resolve();
|
|
31
|
+
else
|
|
32
|
+
reject(new Error(`docker compose up exited with code ${code}`));
|
|
33
|
+
});
|
|
34
|
+
child.on('error', reject);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
async function promptProvider() {
|
|
38
|
+
const provider = await p.select({
|
|
39
|
+
message: 'Which AI provider?',
|
|
40
|
+
options: Object.values(PROVIDER_SPECS)
|
|
41
|
+
.filter(s => s.serverDefault)
|
|
42
|
+
.map(s => ({
|
|
43
|
+
value: s.id,
|
|
44
|
+
label: s.label,
|
|
45
|
+
})),
|
|
46
|
+
initialValue: 'openai',
|
|
47
|
+
});
|
|
48
|
+
if (p.isCancel(provider))
|
|
49
|
+
return { cancelled: true };
|
|
50
|
+
const spec = PROVIDER_SPECS[provider];
|
|
51
|
+
let apiKey;
|
|
52
|
+
if (spec.apiKeyVar) {
|
|
53
|
+
const k = await p.text({
|
|
54
|
+
message: `${spec.label} API key`,
|
|
55
|
+
placeholder: 'Paste your API key',
|
|
56
|
+
validate: v => (v?.trim() ? undefined : 'API key is required'),
|
|
57
|
+
});
|
|
58
|
+
if (p.isCancel(k))
|
|
59
|
+
return { cancelled: true };
|
|
60
|
+
apiKey = k.trim();
|
|
61
|
+
}
|
|
62
|
+
let baseUrl;
|
|
63
|
+
if (spec.baseUrl) {
|
|
64
|
+
const required = spec.baseUrl.required;
|
|
65
|
+
// Show the hint BEFORE the prompt so users know what they're being asked.
|
|
66
|
+
if (spec.baseUrl.hint)
|
|
67
|
+
p.log.info(chalk.dim(spec.baseUrl.hint));
|
|
68
|
+
const message = required
|
|
69
|
+
? `${spec.baseUrl.var} (required)`
|
|
70
|
+
: `${spec.baseUrl.var} (optional — leave blank for default)`;
|
|
71
|
+
const u = await p.text({
|
|
72
|
+
message,
|
|
73
|
+
placeholder: spec.baseUrl.placeholder,
|
|
74
|
+
defaultValue: '',
|
|
75
|
+
validate: v => {
|
|
76
|
+
const trimmed = (v ?? '').trim();
|
|
77
|
+
if (!trimmed)
|
|
78
|
+
return required ? 'URL is required' : undefined;
|
|
79
|
+
return /^https?:\/\//.test(trimmed) ? undefined : 'URL must start with http:// or https://';
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
if (p.isCancel(u))
|
|
83
|
+
return { cancelled: true };
|
|
84
|
+
const trimmed = u.trim();
|
|
85
|
+
if (trimmed)
|
|
86
|
+
baseUrl = trimmed;
|
|
87
|
+
}
|
|
88
|
+
// OpenAI proxy: when OPENAI_BASE_URL is set, the provider is almost always
|
|
89
|
+
// an OpenAI-compatible proxy (Together, Groq via /v1, vLLM, LiteLLM, etc.)
|
|
90
|
+
// and many of those don't speak the new responses API. Ask which mode.
|
|
91
|
+
let openaiApiMode;
|
|
92
|
+
if (provider === 'openai' && baseUrl) {
|
|
93
|
+
const mode = await p.select({
|
|
94
|
+
message: 'OpenAI API mode',
|
|
95
|
+
options: [
|
|
96
|
+
{
|
|
97
|
+
value: 'chat_completions',
|
|
98
|
+
label: 'chat_completions',
|
|
99
|
+
hint: 'most OpenAI-compatible proxies',
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
value: 'responses',
|
|
103
|
+
label: 'responses',
|
|
104
|
+
hint: 'OpenAI direct, or proxies that explicitly support /v1/responses',
|
|
105
|
+
},
|
|
106
|
+
],
|
|
107
|
+
initialValue: 'chat_completions',
|
|
108
|
+
});
|
|
109
|
+
if (p.isCancel(mode))
|
|
110
|
+
return { cancelled: true };
|
|
111
|
+
openaiApiMode = mode;
|
|
112
|
+
}
|
|
113
|
+
const chatModel = await p.text({
|
|
114
|
+
message: 'Chat model',
|
|
115
|
+
placeholder: spec.defaultChatModel,
|
|
116
|
+
initialValue: spec.defaultChatModel,
|
|
117
|
+
validate: v => (v?.trim() ? undefined : 'Model is required'),
|
|
118
|
+
});
|
|
119
|
+
if (p.isCancel(chatModel))
|
|
120
|
+
return { cancelled: true };
|
|
121
|
+
return {
|
|
122
|
+
provider: provider,
|
|
123
|
+
chatModel: chatModel.trim(),
|
|
124
|
+
apiKey,
|
|
125
|
+
baseUrl,
|
|
126
|
+
openaiApiMode,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
export async function setupLocalWebapp() {
|
|
130
|
+
if (!(await commandExists('docker'))) {
|
|
131
|
+
throw new Error('`docker` not found on PATH. Install Docker Desktop (or the docker engine) and retry.');
|
|
132
|
+
}
|
|
133
|
+
const installDirRaw = await p.text({
|
|
134
|
+
message: 'Install directory',
|
|
135
|
+
placeholder: join(homedir(), '.corebrain', 'self-host'),
|
|
136
|
+
initialValue: join(homedir(), '.corebrain', 'self-host'),
|
|
137
|
+
});
|
|
138
|
+
if (p.isCancel(installDirRaw))
|
|
139
|
+
return { cancelled: true };
|
|
140
|
+
const installDir = installDirRaw.trim();
|
|
141
|
+
const answers = await promptProvider();
|
|
142
|
+
if ('cancelled' in answers)
|
|
143
|
+
return { cancelled: true };
|
|
144
|
+
if (existsSync(installDir)) {
|
|
145
|
+
const overwrite = await p.confirm({
|
|
146
|
+
message: `${installDir} already exists. Overwrite docker-compose.yaml + .env?`,
|
|
147
|
+
initialValue: false,
|
|
148
|
+
});
|
|
149
|
+
if (p.isCancel(overwrite) || !overwrite)
|
|
150
|
+
return { cancelled: true };
|
|
151
|
+
}
|
|
152
|
+
mkdirSync(installDir, { recursive: true });
|
|
153
|
+
const fetchSpinner = p.spinner();
|
|
154
|
+
fetchSpinner.start('Fetching docker-compose.yaml + .env.example from GitHub...');
|
|
155
|
+
let composeYaml;
|
|
156
|
+
let envExample;
|
|
157
|
+
try {
|
|
158
|
+
[composeYaml, envExample] = await Promise.all([
|
|
159
|
+
fetchWebappComposeYaml(),
|
|
160
|
+
fetchWebappEnvExample(),
|
|
161
|
+
]);
|
|
162
|
+
fetchSpinner.stop(chalk.green('Fetched templates'));
|
|
163
|
+
}
|
|
164
|
+
catch (err) {
|
|
165
|
+
fetchSpinner.stop(chalk.red('Could not fetch templates'));
|
|
166
|
+
throw err;
|
|
167
|
+
}
|
|
168
|
+
const sessionSecret = randomBytes(16).toString('hex');
|
|
169
|
+
const encryptionKey = randomBytes(16).toString('hex');
|
|
170
|
+
const magicLinkSecret = randomBytes(16).toString('hex');
|
|
171
|
+
const neo4jPassword = randomBytes(12).toString('hex');
|
|
172
|
+
const spec = PROVIDER_SPECS[answers.provider];
|
|
173
|
+
const overrides = {
|
|
174
|
+
SESSION_SECRET: sessionSecret,
|
|
175
|
+
ENCRYPTION_KEY: encryptionKey,
|
|
176
|
+
MAGIC_LINK_SECRET: magicLinkSecret,
|
|
177
|
+
NEO4J_PASSWORD: neo4jPassword,
|
|
178
|
+
NEO4J_AUTH: `neo4j/${neo4jPassword}`,
|
|
179
|
+
CHAT_PROVIDER: answers.provider,
|
|
180
|
+
MODEL: answers.chatModel,
|
|
181
|
+
};
|
|
182
|
+
if (spec.apiKeyVar && answers.apiKey)
|
|
183
|
+
overrides[spec.apiKeyVar] = answers.apiKey;
|
|
184
|
+
if (spec.baseUrl && answers.baseUrl)
|
|
185
|
+
overrides[spec.baseUrl.var] = answers.baseUrl;
|
|
186
|
+
if (answers.openaiApiMode)
|
|
187
|
+
overrides.OPENAI_API_MODE = answers.openaiApiMode;
|
|
188
|
+
const envFile = applyEnvOverrides(envExample, overrides);
|
|
189
|
+
writeFileSync(join(installDir, 'docker-compose.yaml'), composeYaml, 'utf-8');
|
|
190
|
+
writeFileSync(join(installDir, '.env'), envFile, 'utf-8');
|
|
191
|
+
p.log.success(`Wrote ${installDir}/{docker-compose.yaml,.env}`);
|
|
192
|
+
p.log.info(chalk.dim(`Edit ${installDir}/.env for advanced settings (Google OAuth, email transport, embedding model, etc.).`));
|
|
193
|
+
const startNow = await p.confirm({
|
|
194
|
+
message: 'Start CORE now (`docker compose up -d`)?',
|
|
195
|
+
initialValue: true,
|
|
196
|
+
});
|
|
197
|
+
if (p.isCancel(startNow) || !startNow) {
|
|
198
|
+
p.note([
|
|
199
|
+
'Files are ready. To bring it up later:',
|
|
200
|
+
` cd ${installDir} && docker compose up -d`,
|
|
201
|
+
].join('\n'), 'Skipped');
|
|
202
|
+
return { cancelled: true };
|
|
203
|
+
}
|
|
204
|
+
const upSpinner = p.spinner();
|
|
205
|
+
upSpinner.start('Starting CORE (this may pull several images)...');
|
|
206
|
+
try {
|
|
207
|
+
await dockerComposeUp(installDir);
|
|
208
|
+
upSpinner.stop(chalk.green('Containers are up'));
|
|
209
|
+
}
|
|
210
|
+
catch (err) {
|
|
211
|
+
upSpinner.stop(chalk.red('docker compose up failed'));
|
|
212
|
+
throw err;
|
|
213
|
+
}
|
|
214
|
+
const appOrigin = 'http://localhost:3033';
|
|
215
|
+
p.note([
|
|
216
|
+
`${chalk.bold('CORE is running at:')} ${appOrigin}`,
|
|
217
|
+
'',
|
|
218
|
+
`${chalk.dim('Logs:')} cd ${installDir} && docker compose logs -f core`,
|
|
219
|
+
`${chalk.dim('Stop:')} cd ${installDir} && docker compose down`,
|
|
220
|
+
'',
|
|
221
|
+
`Point this CLI at your local instance:`,
|
|
222
|
+
` corebrain login ${chalk.dim(`# enter ${appOrigin} as the instance URL`)}`,
|
|
223
|
+
].join('\n'), 'Local CORE ready');
|
|
224
|
+
return { installDir, appOrigin };
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=local.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.js","sourceRoot":"","sources":["../../../src/utils/setup/local.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"railway.d.ts","sourceRoot":"","sources":["../../../src/utils/setup/railway.ts"],"names":[],"mappings":"AA4GA,UAAU,kBAAkB;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,kBAAkB,GAAG;IAAC,SAAS,EAAE,IAAI,CAAA;CAAC,CAAC,CAgL3F"}
|