@redplanethq/corebrain 2.8.17 → 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/config/folders.d.ts.map +1 -1
- package/dist/config/folders.js +31 -10
- package/dist/config/folders.js.map +1 -1
- 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/server/api/manifest-builder.d.ts.map +1 -1
- package/dist/server/api/manifest-builder.js +4 -2
- package/dist/server/api/manifest-builder.js.map +1 -1
- package/dist/server/api/shell/index.d.ts +0 -14
- package/dist/server/api/shell/index.d.ts.map +1 -1
- package/dist/server/api/shell/index.js +29 -6
- package/dist/server/api/shell/index.js.map +1 -1
- package/dist/server/gateway-entry.js +36 -3
- package/dist/server/gateway-entry.js.map +1 -1
- package/dist/server/tools/coding-tools.d.ts.map +1 -1
- package/dist/server/tools/coding-tools.js +28 -5
- package/dist/server/tools/coding-tools.js.map +1 -1
- 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/browser-manager.d.ts +11 -0
- package/dist/utils/browser-manager.d.ts.map +1 -1
- package/dist/utils/browser-manager.js +86 -0
- package/dist/utils/browser-manager.js.map +1 -1
- package/dist/utils/env-bootstrap.d.ts.map +1 -1
- package/dist/utils/env-bootstrap.js +13 -8
- package/dist/utils/env-bootstrap.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
|
@@ -5,7 +5,12 @@ import chalk from 'chalk';
|
|
|
5
5
|
import zod from 'zod';
|
|
6
6
|
import { getPreferences } from '../../config/preferences.js';
|
|
7
7
|
import { getServiceType, getServiceName, isServiceInstalled, getServiceStatus, getServicePid, } from '../../utils/service-manager/index.js';
|
|
8
|
+
import { getGatewayById, listGateways } from '../../server/api/gateways.js';
|
|
9
|
+
export const description = 'Show gateway status. Without an id, shows the native gateway on this machine. With an id, fetches the row from CORE.';
|
|
8
10
|
export const options = zod.object({});
|
|
11
|
+
export const args = zod.tuple([
|
|
12
|
+
zod.string().describe('Gateway id from `corebrain gateway list` (optional)').optional(),
|
|
13
|
+
]);
|
|
9
14
|
function formatUptime(startedAt) {
|
|
10
15
|
const uptimeMs = Date.now() - startedAt;
|
|
11
16
|
const seconds = Math.floor(uptimeMs / 1000);
|
|
@@ -27,32 +32,90 @@ function getServiceTypeLabel(type) {
|
|
|
27
32
|
return 'systemd (Linux)';
|
|
28
33
|
return 'unknown';
|
|
29
34
|
}
|
|
30
|
-
|
|
35
|
+
function statusBadge(status) {
|
|
36
|
+
if (status === 'CONNECTED')
|
|
37
|
+
return chalk.green('● connected');
|
|
38
|
+
if (status === 'DISCONNECTED')
|
|
39
|
+
return chalk.red('○ disconnected');
|
|
40
|
+
return chalk.dim(status);
|
|
41
|
+
}
|
|
42
|
+
async function runRemoteStatus(id) {
|
|
31
43
|
const spinner = p.spinner();
|
|
32
|
-
spinner.start(
|
|
44
|
+
spinner.start(`Loading gateway ${id}...`);
|
|
45
|
+
let row;
|
|
46
|
+
try {
|
|
47
|
+
row = await getGatewayById(id);
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
spinner.stop(chalk.red('Failed to load gateways from CORE'));
|
|
51
|
+
p.log.error(err instanceof Error ? err.message : String(err));
|
|
52
|
+
process.exitCode = 1;
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (!row) {
|
|
56
|
+
spinner.stop(chalk.yellow('Not found'));
|
|
57
|
+
p.log.warn(`No gateway with id ${id} in this workspace.`);
|
|
58
|
+
p.log.info('Run `corebrain gateway list` to see available gateways.');
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
spinner.stop(chalk.green('Found'));
|
|
62
|
+
const prefs = getPreferences();
|
|
63
|
+
const isLocal = (prefs.gateway?.name && prefs.gateway.name === row.name) ||
|
|
64
|
+
(prefs.gateway?.httpBaseUrl && prefs.gateway.httpBaseUrl === row.baseUrl);
|
|
65
|
+
const lines = [
|
|
66
|
+
`${chalk.bold('Name:')} ${row.name}${isLocal ? chalk.cyan(' (this machine)') : ''}`,
|
|
67
|
+
`${chalk.bold('Id:')} ${row.id}`,
|
|
68
|
+
`${chalk.bold('Base URL:')} ${row.baseUrl}`,
|
|
69
|
+
`${chalk.bold('Status:')} ${statusBadge(row.status)}`,
|
|
70
|
+
row.hostname ? `${chalk.bold('Host:')} ${row.hostname}` : null,
|
|
71
|
+
row.platform ? `${chalk.bold('Platform:')} ${row.platform}` : null,
|
|
72
|
+
].filter(Boolean);
|
|
73
|
+
if (isLocal) {
|
|
74
|
+
const serviceType = getServiceType();
|
|
75
|
+
if (serviceType !== 'none') {
|
|
76
|
+
const serviceName = getServiceName();
|
|
77
|
+
const installed = await isServiceInstalled(serviceName);
|
|
78
|
+
if (installed) {
|
|
79
|
+
const svcStatus = await getServiceStatus(serviceName);
|
|
80
|
+
const pid = getServicePid(serviceName);
|
|
81
|
+
lines.push('');
|
|
82
|
+
lines.push(`${chalk.bold('Service:')} ${getServiceTypeLabel(serviceType)}`);
|
|
83
|
+
lines.push(`${chalk.bold('Service status:')} ${svcStatus === 'running' ? chalk.green('running') : chalk.yellow(svcStatus)}`);
|
|
84
|
+
lines.push(`${chalk.bold('PID:')} ${pid ?? 'unknown'}`);
|
|
85
|
+
if (prefs.gateway?.startedAt) {
|
|
86
|
+
lines.push(`${chalk.bold('Uptime:')} ${formatUptime(prefs.gateway.startedAt)}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
p.note(lines.join('\n'), 'Gateway Status');
|
|
92
|
+
}
|
|
93
|
+
async function runLocalStatus() {
|
|
94
|
+
const spinner = p.spinner();
|
|
95
|
+
spinner.start('Checking native gateway status...');
|
|
33
96
|
const serviceType = getServiceType();
|
|
34
97
|
if (serviceType === 'none') {
|
|
35
98
|
spinner.stop(chalk.red('Not supported'));
|
|
36
99
|
p.log.error('Service management not supported on this platform.');
|
|
100
|
+
p.log.info('Pass a gateway id to inspect a remote gateway: `corebrain gateway status <id>`');
|
|
37
101
|
return;
|
|
38
102
|
}
|
|
39
103
|
const serviceName = getServiceName();
|
|
40
104
|
const installed = await isServiceInstalled(serviceName);
|
|
41
105
|
if (!installed) {
|
|
42
106
|
spinner.stop(chalk.yellow('Not installed'));
|
|
43
|
-
p.log.
|
|
44
|
-
p.log.info(
|
|
107
|
+
p.log.warn('No native gateway on this machine.');
|
|
108
|
+
p.log.info('Run `corebrain gateway setup` to create one, or `corebrain gateway list` to see registered gateways.');
|
|
45
109
|
return;
|
|
46
110
|
}
|
|
47
111
|
const status = await getServiceStatus(serviceName);
|
|
48
112
|
const running = status === 'running';
|
|
49
113
|
if (!running) {
|
|
50
114
|
spinner.stop(chalk.yellow('Stopped'));
|
|
51
|
-
p.log.
|
|
115
|
+
p.log.warn('Gateway installed but stopped.');
|
|
52
116
|
p.log.info("Start with: corebrain gateway start");
|
|
53
117
|
return;
|
|
54
118
|
}
|
|
55
|
-
// Get PID from service manager, fallback to preferences
|
|
56
119
|
const prefs = getPreferences();
|
|
57
120
|
let pid = getServicePid(serviceName);
|
|
58
121
|
if (!pid && prefs.gateway?.pid) {
|
|
@@ -64,30 +127,47 @@ async function runGatewayStatus() {
|
|
|
64
127
|
const tunnelLine = gw.tunnelKind && gw.tunnelKind !== 'none'
|
|
65
128
|
? `${chalk.bold('Tunnel:')} ${gw.tunnelKind}${gw.tunnelPid ? chalk.dim(` (pid ${gw.tunnelPid})`) : ''}`
|
|
66
129
|
: `${chalk.bold('Tunnel:')} ${chalk.dim('none')}`;
|
|
130
|
+
// Best-effort: try to find this gateway in the CORE workspace list to surface
|
|
131
|
+
// a CONNECTED / DISCONNECTED badge alongside the local launchd state.
|
|
132
|
+
let remoteBadge = '';
|
|
133
|
+
try {
|
|
134
|
+
const remotes = await listGateways();
|
|
135
|
+
const match = remotes.find(r => (gw.name && r.name === gw.name) || (gw.httpBaseUrl && r.baseUrl === gw.httpBaseUrl));
|
|
136
|
+
if (match) {
|
|
137
|
+
remoteBadge = `${chalk.bold('CORE:')} ${statusBadge(match.status)} ${chalk.dim(`(id: ${match.id})`)}`;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
// Silent — remote lookup is best-effort.
|
|
142
|
+
}
|
|
67
143
|
p.note([
|
|
68
|
-
`${chalk.bold('Status:')}
|
|
144
|
+
`${chalk.bold('Status:')} ${chalk.green('Running')}`,
|
|
69
145
|
`${chalk.bold('Service:')} ${getServiceTypeLabel(serviceType)}`,
|
|
70
|
-
`${chalk.bold('PID:')}
|
|
71
|
-
`${chalk.bold('Uptime:')}
|
|
146
|
+
`${chalk.bold('PID:')} ${pid || 'unknown'}`,
|
|
147
|
+
`${chalk.bold('Uptime:')} ${gw.startedAt ? formatUptime(gw.startedAt) : 'unknown'}`,
|
|
72
148
|
`${chalk.bold('HTTP port:')} ${gw.httpPort ?? chalk.dim('(default 7787)')}`,
|
|
73
149
|
`${chalk.bold('Base URL:')} ${gw.httpBaseUrl || chalk.dim('(not registered)')}`,
|
|
74
150
|
`${chalk.bold('Registered:')} ${registered ? chalk.green('yes') : chalk.yellow('no — run `corebrain gateway register`')}`,
|
|
75
151
|
tunnelLine,
|
|
152
|
+
remoteBadge || null,
|
|
76
153
|
'',
|
|
77
154
|
`${chalk.dim('Logs: ~/.corebrain/logs/gateway.log')}`,
|
|
78
|
-
]
|
|
155
|
+
]
|
|
156
|
+
.filter(Boolean)
|
|
157
|
+
.join('\n'), 'Gateway Status');
|
|
79
158
|
}
|
|
80
|
-
export default function GatewayStatus(
|
|
159
|
+
export default function GatewayStatus({ args: positional }) {
|
|
81
160
|
const { exit } = useApp();
|
|
161
|
+
const id = positional?.[0];
|
|
82
162
|
useEffect(() => {
|
|
83
|
-
|
|
84
|
-
|
|
163
|
+
const run = id ? runRemoteStatus(id) : runLocalStatus();
|
|
164
|
+
run
|
|
165
|
+
.catch(err => {
|
|
85
166
|
p.log.error(err instanceof Error ? err.message : 'Unknown error');
|
|
167
|
+
process.exitCode = 1;
|
|
86
168
|
})
|
|
87
|
-
.finally(() =>
|
|
88
|
-
|
|
89
|
-
});
|
|
90
|
-
}, [exit]);
|
|
169
|
+
.finally(() => setTimeout(() => exit(), 100));
|
|
170
|
+
}, [exit, id]);
|
|
91
171
|
return null;
|
|
92
172
|
}
|
|
93
173
|
//# sourceMappingURL=status.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/gateway/status.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/gateway/status.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import zod from 'zod';
|
|
2
|
+
export declare const description = "Self-host CORE locally with Docker. Drops a docker-compose.yaml + .env into a directory you choose, then brings it up.";
|
|
3
|
+
export declare const options: zod.ZodObject<{}, zod.core.$strip>;
|
|
4
|
+
type Props = {
|
|
5
|
+
options: zod.infer<typeof options>;
|
|
6
|
+
};
|
|
7
|
+
export default function SetupCommand(_props: Props): null;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.tsx"],"names":[],"mappings":"AAIA,OAAO,GAAG,MAAM,KAAK,CAAC;AAGtB,eAAO,MAAM,WAAW,2HACiG,CAAC;AAE1H,eAAO,MAAM,OAAO,oCAAiB,CAAC;AAEtC,KAAK,KAAK,GAAG;IACZ,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;CACnC,CAAC;AAUF,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,MAAM,EAAE,KAAK,QAWjD"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
|
+
import { useApp } from 'ink';
|
|
3
|
+
import * as p from '@clack/prompts';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import zod from 'zod';
|
|
6
|
+
import { setupLocalWebapp } from '../utils/setup/local.js';
|
|
7
|
+
export const description = 'Self-host CORE locally with Docker. Drops a docker-compose.yaml + .env into a directory you choose, then brings it up.';
|
|
8
|
+
export const options = zod.object({});
|
|
9
|
+
async function runSetup() {
|
|
10
|
+
p.intro(chalk.bgCyan(chalk.black(' CORE — Local Self-Host ')));
|
|
11
|
+
const result = await setupLocalWebapp();
|
|
12
|
+
if ('cancelled' in result) {
|
|
13
|
+
p.cancel('Setup cancelled');
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export default function SetupCommand(_props) {
|
|
17
|
+
const { exit } = useApp();
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
runSetup()
|
|
20
|
+
.catch(err => {
|
|
21
|
+
p.log.error(err instanceof Error ? err.message : String(err));
|
|
22
|
+
process.exitCode = 1;
|
|
23
|
+
})
|
|
24
|
+
.finally(() => setTimeout(() => exit(), 100));
|
|
25
|
+
}, [exit]);
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAChC,OAAO,EAAC,MAAM,EAAC,MAAM,KAAK,CAAC;AAC3B,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAC,gBAAgB,EAAC,MAAM,qBAAqB,CAAC;AAErD,MAAM,CAAC,MAAM,WAAW,GACvB,wHAAwH,CAAC;AAE1H,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAMtC,KAAK,UAAU,QAAQ;IACtB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACxC,IAAI,WAAW,IAAI,MAAM,EAAE,CAAC;QAC3B,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC7B,CAAC;AACF,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,MAAa;IACjD,MAAM,EAAC,IAAI,EAAC,GAAG,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,GAAG,EAAE;QACd,QAAQ,EAAE;aACR,KAAK,CAAC,GAAG,CAAC,EAAE;YACZ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACtB,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAChD,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACX,OAAO,IAAI,CAAC;AACb,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"folders.d.ts","sourceRoot":"","sources":["../../src/config/folders.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAEjD,KAAK,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"folders.d.ts","sourceRoot":"","sources":["../../src/config/folders.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAEjD,KAAK,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AA+B5C,wBAAgB,WAAW,IAAI,YAAY,EAAE,CAE5C;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,KAAK,EAAE,CAAC;CAChB,GAAG,YAAY,CAqCf;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAenD;AAED,wBAAgB,YAAY,CAC3B,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE;IAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAA;CAAC,GACnC,YAAY,CAuBd;AAED,wBAAgB,oBAAoB,CACnC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,GACV;IAAC,MAAM,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,GAAG,IAAI,CAqChD;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAElE"}
|
package/dist/config/folders.js
CHANGED
|
@@ -18,19 +18,31 @@ const COREBRAIN_HOME_FOLDER = {
|
|
|
18
18
|
function isUnderCorebrainHome(abs) {
|
|
19
19
|
return abs === COREBRAIN_HOME || abs.startsWith(COREBRAIN_HOME + '/');
|
|
20
20
|
}
|
|
21
|
+
// Best-effort realpath. Used only for security in `resolveFolderForPath` —
|
|
22
|
+
// the stored folder path stays in the user-supplied form so symlinked
|
|
23
|
+
// workspaces (e.g. Railway's `/app → /mnt/volume/workspace`) show as `/app`
|
|
24
|
+
// in the UI and match the terminal's `pwd`.
|
|
25
|
+
function realpathSafe(p) {
|
|
26
|
+
try {
|
|
27
|
+
return realpathSync(p);
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return p;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
21
33
|
export function listFolders() {
|
|
22
34
|
return getPreferences().gateway?.folders ?? [];
|
|
23
35
|
}
|
|
24
36
|
export function addFolder(input) {
|
|
25
|
-
const
|
|
26
|
-
if (!existsSync(
|
|
27
|
-
throw new Error(`Not a directory: ${
|
|
37
|
+
const inputPath = resolve(input.path);
|
|
38
|
+
if (!existsSync(inputPath) || !statSync(inputPath).isDirectory()) {
|
|
39
|
+
throw new Error(`Not a directory: ${inputPath}`);
|
|
28
40
|
}
|
|
29
41
|
const folders = listFolders();
|
|
30
|
-
if (folders.some(f => f.path ===
|
|
31
|
-
throw new Error(`Folder already registered: ${
|
|
42
|
+
if (folders.some(f => f.path === inputPath)) {
|
|
43
|
+
throw new Error(`Folder already registered: ${inputPath}`);
|
|
32
44
|
}
|
|
33
|
-
const name = input.name ??
|
|
45
|
+
const name = input.name ?? inputPath.split('/').filter(Boolean).pop() ?? 'folder';
|
|
34
46
|
if (folders.some(f => f.name === name)) {
|
|
35
47
|
throw new Error(`Folder name in use: ${name}`);
|
|
36
48
|
}
|
|
@@ -40,9 +52,9 @@ export function addFolder(input) {
|
|
|
40
52
|
const folder = {
|
|
41
53
|
id: `fld_${randomUUID()}`,
|
|
42
54
|
name,
|
|
43
|
-
path:
|
|
55
|
+
path: inputPath,
|
|
44
56
|
scopes: Array.from(new Set(input.scopes)),
|
|
45
|
-
gitRepo: existsSync(`${
|
|
57
|
+
gitRepo: existsSync(`${inputPath}/.git`),
|
|
46
58
|
};
|
|
47
59
|
const prefs = getPreferences();
|
|
48
60
|
updatePreferences({
|
|
@@ -123,8 +135,17 @@ export function resolveFolderForPath(target, scope) {
|
|
|
123
135
|
if (isUnderCorebrainHome(abs)) {
|
|
124
136
|
return { folder: COREBRAIN_HOME_FOLDER, absPath: abs };
|
|
125
137
|
}
|
|
126
|
-
|
|
127
|
-
|
|
138
|
+
// Compare against realpath of `f.path` too — `f.path` may be a symlink
|
|
139
|
+
// (e.g. Railway's `/app → /mnt/volume/workspace`) while `abs` is already
|
|
140
|
+
// the physical path.
|
|
141
|
+
const folder = listFolders().find(f => {
|
|
142
|
+
if (!f.scopes.includes(scope))
|
|
143
|
+
return false;
|
|
144
|
+
if (abs === f.path || abs.startsWith(f.path + '/'))
|
|
145
|
+
return true;
|
|
146
|
+
const real = realpathSafe(f.path);
|
|
147
|
+
return abs === real || abs.startsWith(real + '/');
|
|
148
|
+
});
|
|
128
149
|
return folder ? { folder, absPath: abs } : null;
|
|
129
150
|
}
|
|
130
151
|
export function getFolderById(id) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"folders.js","sourceRoot":"","sources":["../../src/config/folders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAC,MAAM,SAAS,CAAC;AAC3D,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,EAAC,OAAO,EAAC,MAAM,SAAS,CAAC;AAChC,OAAO,EAAC,UAAU,EAAC,MAAM,aAAa,CAAC;AACvC,OAAO,EAAC,cAAc,EAAE,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAKhE,yEAAyE;AACzE,2EAA2E;AAC3E,0EAA0E;AAC1E,oDAAoD;AACpD,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AACxD,MAAM,qBAAqB,GAAiB;IAC3C,EAAE,EAAE,oBAAoB;IACxB,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,cAAc;IACpB,MAAM,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC;IACnC,OAAO,EAAE,KAAK;CACd,CAAC;AAEF,SAAS,oBAAoB,CAAC,GAAW;IACxC,OAAO,GAAG,KAAK,cAAc,IAAI,GAAG,CAAC,UAAU,CAAC,cAAc,GAAG,GAAG,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,WAAW;IAC1B,OAAO,cAAc,EAAE,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAIzB;IACA,MAAM,
|
|
1
|
+
{"version":3,"file":"folders.js","sourceRoot":"","sources":["../../src/config/folders.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local mirror of the SDK's GatewayAgentInfo. We don't import the SDK's
|
|
3
|
+
* `z.infer<...>` types directly because the SDK ships zod@3 schemas while the
|
|
4
|
+
* CLI builds against zod@4 — the inferred types resolve as all-optional on
|
|
5
|
+
* the CLI side. Mirror keeps the contract loud and explicit here.
|
|
6
|
+
*/
|
|
7
|
+
export interface GatewayInfo {
|
|
8
|
+
id: string;
|
|
9
|
+
name: string;
|
|
10
|
+
description: string;
|
|
11
|
+
baseUrl: string;
|
|
12
|
+
tools: string[];
|
|
13
|
+
platform: string | null;
|
|
14
|
+
hostname: string | null;
|
|
15
|
+
status: 'CONNECTED' | 'DISCONNECTED';
|
|
16
|
+
}
|
|
17
|
+
interface ManifestResponse {
|
|
18
|
+
gateway?: {
|
|
19
|
+
name?: string;
|
|
20
|
+
hostname?: string;
|
|
21
|
+
platform?: string;
|
|
22
|
+
deployMode?: string;
|
|
23
|
+
};
|
|
24
|
+
tools?: unknown[];
|
|
25
|
+
agents?: unknown[];
|
|
26
|
+
}
|
|
27
|
+
export declare function listGateways(): Promise<GatewayInfo[]>;
|
|
28
|
+
export declare function getGatewayById(id: string): Promise<GatewayInfo | null>;
|
|
29
|
+
export interface RegisterArgs {
|
|
30
|
+
baseUrl: string;
|
|
31
|
+
securityKey: string;
|
|
32
|
+
name?: string;
|
|
33
|
+
description?: string;
|
|
34
|
+
}
|
|
35
|
+
export declare function registerGatewayWithApi(args: RegisterArgs): Promise<{
|
|
36
|
+
gatewayId: string;
|
|
37
|
+
}>;
|
|
38
|
+
/**
|
|
39
|
+
* Live-fetch a gateway's manifest using its raw security key. Returns null
|
|
40
|
+
* on any failure (not reachable, key mismatch, malformed response).
|
|
41
|
+
*/
|
|
42
|
+
export declare function fetchManifest(baseUrl: string, securityKey: string): Promise<ManifestResponse | null>;
|
|
43
|
+
/**
|
|
44
|
+
* Poll the manifest endpoint until it returns a 200 or we time out.
|
|
45
|
+
* Used after `docker compose up -d` / `railway deploy` to confirm the
|
|
46
|
+
* gateway has booted before we register it.
|
|
47
|
+
*/
|
|
48
|
+
export declare function waitForManifest(baseUrl: string, securityKey: string, timeoutMs?: number, intervalMs?: number): Promise<boolean>;
|
|
49
|
+
export {};
|
|
50
|
+
//# sourceMappingURL=gateways.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateways.d.ts","sourceRoot":"","sources":["../../../src/server/api/gateways.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,WAAW,GAAG,cAAc,CAAC;CACrC;AAED,UAAU,gBAAgB;IACzB,OAAO,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;CACnB;AAcD,wBAAsB,YAAY,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAG3D;AAED,wBAAsB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAG5E;AAED,MAAM,WAAW,YAAY;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,sBAAsB,CAC3C,IAAI,EAAE,YAAY,GAChB,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAC,CAAC,CAM9B;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAClC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAWlC;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACpC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,SAAS,SAAS,EAClB,UAAU,SAAQ,GAChB,OAAO,CAAC,OAAO,CAAC,CAQlB"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { CoreClient } from '@redplanethq/sdk';
|
|
2
|
+
import { getConfig } from '../../config/index.js';
|
|
3
|
+
const DEFAULT_BASE_URL = 'https://app.getcore.me';
|
|
4
|
+
function getClient() {
|
|
5
|
+
const config = getConfig();
|
|
6
|
+
const apiKey = config.auth?.apiKey;
|
|
7
|
+
if (!apiKey) {
|
|
8
|
+
throw new Error('Not authenticated. Run `corebrain login` first.');
|
|
9
|
+
}
|
|
10
|
+
return new CoreClient({
|
|
11
|
+
baseUrl: config.auth?.url || DEFAULT_BASE_URL,
|
|
12
|
+
token: apiKey,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
export async function listGateways() {
|
|
16
|
+
const res = await getClient().getGateways();
|
|
17
|
+
return (res.gateways ?? []);
|
|
18
|
+
}
|
|
19
|
+
export async function getGatewayById(id) {
|
|
20
|
+
const gateways = await listGateways();
|
|
21
|
+
return gateways.find(g => g.id === id) ?? null;
|
|
22
|
+
}
|
|
23
|
+
export async function registerGatewayWithApi(args) {
|
|
24
|
+
const res = await getClient().registerGateway(args);
|
|
25
|
+
if (!res.gatewayId) {
|
|
26
|
+
throw new Error('Webapp returned no gatewayId. Check the gateway is reachable.');
|
|
27
|
+
}
|
|
28
|
+
return { gatewayId: res.gatewayId };
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Live-fetch a gateway's manifest using its raw security key. Returns null
|
|
32
|
+
* on any failure (not reachable, key mismatch, malformed response).
|
|
33
|
+
*/
|
|
34
|
+
export async function fetchManifest(baseUrl, securityKey) {
|
|
35
|
+
try {
|
|
36
|
+
const res = await fetch(`${baseUrl.replace(/\/$/, '')}/manifest`, {
|
|
37
|
+
headers: { authorization: `Bearer ${securityKey}` },
|
|
38
|
+
signal: AbortSignal.timeout(10_000),
|
|
39
|
+
});
|
|
40
|
+
if (!res.ok)
|
|
41
|
+
return null;
|
|
42
|
+
return (await res.json());
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Poll the manifest endpoint until it returns a 200 or we time out.
|
|
50
|
+
* Used after `docker compose up -d` / `railway deploy` to confirm the
|
|
51
|
+
* gateway has booted before we register it.
|
|
52
|
+
*/
|
|
53
|
+
export async function waitForManifest(baseUrl, securityKey, timeoutMs = 90_000, intervalMs = 2_000) {
|
|
54
|
+
const deadline = Date.now() + timeoutMs;
|
|
55
|
+
while (Date.now() < deadline) {
|
|
56
|
+
const m = await fetchManifest(baseUrl, securityKey);
|
|
57
|
+
if (m)
|
|
58
|
+
return true;
|
|
59
|
+
await new Promise(r => setTimeout(r, intervalMs));
|
|
60
|
+
}
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=gateways.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateways.js","sourceRoot":"","sources":["../../../src/server/api/gateways.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAEzC,MAAM,gBAAgB,GAAG,wBAAwB,CAAC;AA8BlD,SAAS,SAAS;IACjB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;IACnC,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,IAAI,UAAU,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,gBAAgB;QAC7C,KAAK,EAAE,MAAM;KACb,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IACjC,MAAM,GAAG,GAAG,MAAM,SAAS,EAAE,CAAC,WAAW,EAAE,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAkB,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EAAU;IAC9C,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;IACtC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC;AAChD,CAAC;AASD,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC3C,IAAkB;IAElB,MAAM,GAAG,GAAG,MAAM,SAAS,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACpD,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,EAAC,SAAS,EAAE,GAAG,CAAC,SAAS,EAAC,CAAC;AACnC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAClC,OAAe,EACf,WAAmB;IAEnB,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,EAAE;YACjE,OAAO,EAAE,EAAC,aAAa,EAAE,UAAU,WAAW,EAAE,EAAC;YACjD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;SACnC,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACzB,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAqB,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACpC,OAAe,EACf,WAAmB,EACnB,SAAS,GAAG,MAAM,EAClB,UAAU,GAAG,KAAK;IAElB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACpD,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACnB,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest-builder.d.ts","sourceRoot":"","sources":["../../../src/server/api/manifest-builder.ts"],"names":[],"mappings":"AAIA,OAAO,EAEN,KAAK,QAAQ,EAGb,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAgB,YAAY,EAAC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"manifest-builder.d.ts","sourceRoot":"","sources":["../../../src/server/api/manifest-builder.ts"],"names":[],"mappings":"AAIA,OAAO,EAEN,KAAK,QAAQ,EAGb,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAgB,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAqHhE;;;;;GAKG;AACH,wBAAgB,aAAa,CAC5B,KAAK,EAAE,YAAY,GAAG,SAAS,EAC/B,IAAI,EAAE,MAAM,YAAY,GACtB,OAAO,CAOT;AAED,wBAAgB,aAAa,IAAI;IAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAC,CA0DlE"}
|
|
@@ -82,9 +82,10 @@ function detectAvailableAgents(configuredAgents, coding) {
|
|
|
82
82
|
return result;
|
|
83
83
|
}
|
|
84
84
|
function detectDeployMode() {
|
|
85
|
-
// Explicit env wins (Dockerfile sets COREBRAIN_DEPLOY_MODE=docker
|
|
85
|
+
// Explicit env wins (Dockerfile sets COREBRAIN_DEPLOY_MODE=docker; Railway
|
|
86
|
+
// deploys override to `railway`).
|
|
86
87
|
const envMode = process.env.COREBRAIN_DEPLOY_MODE;
|
|
87
|
-
if (envMode === 'docker' || envMode === 'native')
|
|
88
|
+
if (envMode === 'docker' || envMode === 'native' || envMode === 'railway')
|
|
88
89
|
return envMode;
|
|
89
90
|
// Fallback heuristic — `/.dockerenv` is created by Docker on container init.
|
|
90
91
|
if (existsSync('/.dockerenv'))
|
|
@@ -156,6 +157,7 @@ export function buildManifest() {
|
|
|
156
157
|
gateway: {
|
|
157
158
|
id: gw.id ?? 'pending',
|
|
158
159
|
name: gw.name ?? `${hostname()}-gateway`,
|
|
160
|
+
...(gw.description ? { description: gw.description } : {}),
|
|
159
161
|
version: cliVersion,
|
|
160
162
|
platform: platform(),
|
|
161
163
|
hostname: hostname(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest-builder.js","sourceRoot":"","sources":["../../../src/server/api/manifest-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,QAAQ,EAAC,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAC,UAAU,EAAC,MAAM,aAAa,CAAC;AACvC,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAC,UAAU,EAAC,MAAM,SAAS,CAAC;AACnC,OAAO,EACN,gBAAgB,GAIhB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAC,cAAc,EAAC,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAC,YAAY,EAAC,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAC,WAAW,EAAC,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAC,SAAS,EAAC,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAC,UAAU,EAAC,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAC,UAAU,EAAC,MAAM,4BAA4B,CAAC;AAEtD,IAAI,UAAU,GAAG,OAAO,CAAC;AACzB,IAAI,CAAC;IACJ,8DAA8D;IAC9D,UAAU,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC,OAAO,IAAI,UAAU,CAAC;AACrE,CAAC;AAAC,MAAM,CAAC;IACR,4DAA4D;AAC7D,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,CAIpB;IACA,OAAO;QACN,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,WAAW,EAAE,CAAC,CAAC,WAAkD;KACjE,CAAC;AACH,CAAC;AAED,2EAA2E;AAC3E,6EAA6E;AAC7E,4DAA4D;AAC5D,MAAM,YAAY,GAA2C;IAC5D,EAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAC;IACxC,EAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAC;CACrC,CAAC;AAEF;;;;;;;;GAQG;AACH,SAAS,aAAa,CAAC,GAAW;IACjC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3D,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,cAAc,GAAG,EAAE,CAAC,EAAE;YAChE,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,KAAK;SACd,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACxB,OAAO,IAAI,IAAI,IAAI,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED,SAAS,qBAAqB,CAC7B,gBAA6B,EAC7B,MAAsD;IAEtD,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QAClC,qEAAqE;QACrE,uEAAuE;QACvE,qEAAqE;QACrE,6DAA6D;QAC7D,MAAM,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;QACtD,MAAM,IAAI,GACT,CAAC,iBAAiB,CAAC,CAAC,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC7D,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI;YACJ,UAAU,EAAE,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;SAC5C,CAAC,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB;IACxB,
|
|
1
|
+
{"version":3,"file":"manifest-builder.js","sourceRoot":"","sources":["../../../src/server/api/manifest-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,3 @@
|
|
|
1
1
|
import type { FastifyPluginAsync } from 'fastify';
|
|
2
|
-
/**
|
|
3
|
-
* General-purpose shell PTY for the webapp's per-gateway Terminal tab.
|
|
4
|
-
*
|
|
5
|
-
* POST /api/shell/spawn
|
|
6
|
-
* body: { cwd?: string }
|
|
7
|
-
* → 200 { ok: true, sessionId, pid }
|
|
8
|
-
*
|
|
9
|
-
* Spawns the user's `$SHELL` (falling back to `/bin/bash` → `/bin/sh`) inside
|
|
10
|
-
* a PTY managed by `ptyManager`. The browser attaches via the existing xterm
|
|
11
|
-
* WS endpoint — no CodingSession involved.
|
|
12
|
-
*
|
|
13
|
-
* Auth is handled by the global gateway auth hook (security key), so anyone
|
|
14
|
-
* able to hit this can already exec arbitrary tools — no extra guardrails.
|
|
15
|
-
*/
|
|
16
2
|
export declare const shellRoutes: FastifyPluginAsync;
|
|
17
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/server/api/shell/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/server/api/shell/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,SAAS,CAAC;AAyBhD,eAAO,MAAM,WAAW,EAAE,kBAyEzB,CAAC"}
|
|
@@ -7,19 +7,41 @@ import { gatewayLog } from '../../../server/gateway-log.js';
|
|
|
7
7
|
* General-purpose shell PTY for the webapp's per-gateway Terminal tab.
|
|
8
8
|
*
|
|
9
9
|
* POST /api/shell/spawn
|
|
10
|
-
* body: { cwd?: string }
|
|
11
|
-
* → 200 { ok: true, sessionId, pid }
|
|
10
|
+
* body: { cwd?: string, fresh?: boolean }
|
|
11
|
+
* → 200 { ok: true, sessionId, pid, resumed }
|
|
12
12
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
13
|
+
* Singleton model: the gateway tracks one active shell session at a time.
|
|
14
|
+
* Without `fresh`, calls return the existing session if it's still alive
|
|
15
|
+
* (the browser then replays scrollback over the xterm WS — see
|
|
16
|
+
* `ptyManager.attach`). With `fresh: true`, the previous session is killed
|
|
17
|
+
* and a new one spawned. `resumed` distinguishes the two outcomes for the UI.
|
|
16
18
|
*
|
|
17
19
|
* Auth is handled by the global gateway auth hook (security key), so anyone
|
|
18
20
|
* able to hit this can already exec arbitrary tools — no extra guardrails.
|
|
19
21
|
*/
|
|
22
|
+
let currentShellSessionId = null;
|
|
20
23
|
export const shellRoutes = async (app) => {
|
|
21
24
|
app.post('/spawn', async (req, reply) => {
|
|
22
25
|
const body = (req.body ?? {});
|
|
26
|
+
// Resume path: an existing session is still running and the caller
|
|
27
|
+
// didn't ask for a fresh one. Skip the spawn.
|
|
28
|
+
if (!body.fresh &&
|
|
29
|
+
currentShellSessionId &&
|
|
30
|
+
ptyManager.isRunning(currentShellSessionId)) {
|
|
31
|
+
const pid = ptyManager.getPid(currentShellSessionId) ?? 0;
|
|
32
|
+
return {
|
|
33
|
+
ok: true,
|
|
34
|
+
sessionId: currentShellSessionId,
|
|
35
|
+
pid,
|
|
36
|
+
resumed: true,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
// Either no session yet, the previous one exited, or `fresh` was set.
|
|
40
|
+
// Kill any lingering session first so we don't leak PTYs.
|
|
41
|
+
if (currentShellSessionId) {
|
|
42
|
+
ptyManager.kill(currentShellSessionId);
|
|
43
|
+
currentShellSessionId = null;
|
|
44
|
+
}
|
|
23
45
|
// Resolve a usable shell. SHELL → /bin/zsh → /bin/bash → /bin/sh.
|
|
24
46
|
const candidates = [
|
|
25
47
|
process.env.SHELL,
|
|
@@ -48,7 +70,8 @@ export const shellRoutes = async (app) => {
|
|
|
48
70
|
cwd,
|
|
49
71
|
agent: 'shell',
|
|
50
72
|
});
|
|
51
|
-
|
|
73
|
+
currentShellSessionId = sessionId;
|
|
74
|
+
return { ok: true, sessionId, pid, resumed: false };
|
|
52
75
|
}
|
|
53
76
|
catch (err) {
|
|
54
77
|
const msg = err instanceof Error ? err.message : 'spawn failed';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/server/api/shell/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,UAAU,EAAC,MAAM,aAAa,CAAC;AACvC,OAAO,EAAC,OAAO,EAAC,MAAM,SAAS,CAAC;AAChC,OAAO,EAAC,UAAU,EAAC,MAAM,SAAS,CAAC;AACnC,OAAO,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAC;AAEhD
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/server/api/shell/index.ts"],"names":[],"mappings":"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"}
|