@redplanethq/corebrain 2.8.18 → 2.8.21

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 (177) hide show
  1. package/dist/commands/browser/close-session.d.ts.map +1 -1
  2. package/dist/commands/browser/close-session.js +3 -0
  3. package/dist/commands/browser/close-session.js.map +1 -1
  4. package/dist/commands/browser/close.d.ts.map +1 -1
  5. package/dist/commands/browser/close.js +3 -0
  6. package/dist/commands/browser/close.js.map +1 -1
  7. package/dist/commands/browser/command.d.ts.map +1 -1
  8. package/dist/commands/browser/command.js +3 -0
  9. package/dist/commands/browser/command.js.map +1 -1
  10. package/dist/commands/browser/create-profile.d.ts.map +1 -1
  11. package/dist/commands/browser/create-profile.js +3 -0
  12. package/dist/commands/browser/create-profile.js.map +1 -1
  13. package/dist/commands/browser/create-session.d.ts.map +1 -1
  14. package/dist/commands/browser/create-session.js +3 -0
  15. package/dist/commands/browser/create-session.js.map +1 -1
  16. package/dist/commands/browser/delete-profile.d.ts.map +1 -1
  17. package/dist/commands/browser/delete-profile.js +3 -0
  18. package/dist/commands/browser/delete-profile.js.map +1 -1
  19. package/dist/commands/browser/delete-session.d.ts.map +1 -1
  20. package/dist/commands/browser/delete-session.js +3 -0
  21. package/dist/commands/browser/delete-session.js.map +1 -1
  22. package/dist/commands/browser/install.d.ts.map +1 -1
  23. package/dist/commands/browser/install.js +3 -0
  24. package/dist/commands/browser/install.js.map +1 -1
  25. package/dist/commands/browser/list-sessions.d.ts.map +1 -1
  26. package/dist/commands/browser/list-sessions.js +3 -0
  27. package/dist/commands/browser/list-sessions.js.map +1 -1
  28. package/dist/commands/browser/open-head.d.ts.map +1 -1
  29. package/dist/commands/browser/open-head.js +3 -0
  30. package/dist/commands/browser/open-head.js.map +1 -1
  31. package/dist/commands/browser/open.d.ts.map +1 -1
  32. package/dist/commands/browser/open.js +3 -0
  33. package/dist/commands/browser/open.js.map +1 -1
  34. package/dist/commands/browser/set-browser.d.ts.map +1 -1
  35. package/dist/commands/browser/set-browser.js +3 -0
  36. package/dist/commands/browser/set-browser.js.map +1 -1
  37. package/dist/commands/browser/status.d.ts.map +1 -1
  38. package/dist/commands/browser/status.js +3 -0
  39. package/dist/commands/browser/status.js.map +1 -1
  40. package/dist/commands/coding/agents.d.ts.map +1 -1
  41. package/dist/commands/coding/agents.js +3 -0
  42. package/dist/commands/coding/agents.js.map +1 -1
  43. package/dist/commands/coding/config.d.ts.map +1 -1
  44. package/dist/commands/coding/config.js +3 -0
  45. package/dist/commands/coding/config.js.map +1 -1
  46. package/dist/commands/coding/list.d.ts.map +1 -1
  47. package/dist/commands/coding/list.js +3 -0
  48. package/dist/commands/coding/list.js.map +1 -1
  49. package/dist/commands/coding/read.d.ts.map +1 -1
  50. package/dist/commands/coding/read.js +3 -0
  51. package/dist/commands/coding/read.js.map +1 -1
  52. package/dist/commands/coding/remove.d.ts.map +1 -1
  53. package/dist/commands/coding/remove.js +3 -0
  54. package/dist/commands/coding/remove.js.map +1 -1
  55. package/dist/commands/coding/setup.d.ts.map +1 -1
  56. package/dist/commands/coding/setup.js +3 -0
  57. package/dist/commands/coding/setup.js.map +1 -1
  58. package/dist/commands/exec/config.d.ts.map +1 -1
  59. package/dist/commands/exec/config.js +3 -0
  60. package/dist/commands/exec/config.js.map +1 -1
  61. package/dist/commands/folder/add.d.ts.map +1 -1
  62. package/dist/commands/folder/add.js +3 -0
  63. package/dist/commands/folder/add.js.map +1 -1
  64. package/dist/commands/folder/list.d.ts.map +1 -1
  65. package/dist/commands/folder/list.js +3 -0
  66. package/dist/commands/folder/list.js.map +1 -1
  67. package/dist/commands/folder/remove.d.ts.map +1 -1
  68. package/dist/commands/folder/remove.js +3 -0
  69. package/dist/commands/folder/remove.js.map +1 -1
  70. package/dist/commands/folder/scope.d.ts.map +1 -1
  71. package/dist/commands/folder/scope.js +3 -0
  72. package/dist/commands/folder/scope.js.map +1 -1
  73. package/dist/commands/gateway/config.d.ts +16 -0
  74. package/dist/commands/gateway/config.d.ts.map +1 -1
  75. package/dist/commands/gateway/config.js +21 -2
  76. package/dist/commands/gateway/config.js.map +1 -1
  77. package/dist/commands/gateway/index.d.ts +1 -1
  78. package/dist/commands/gateway/index.d.ts.map +1 -1
  79. package/dist/commands/gateway/index.js +9 -1
  80. package/dist/commands/gateway/index.js.map +1 -1
  81. package/dist/commands/gateway/list.d.ts +9 -0
  82. package/dist/commands/gateway/list.d.ts.map +1 -0
  83. package/dist/commands/gateway/list.js +63 -0
  84. package/dist/commands/gateway/list.js.map +1 -0
  85. package/dist/commands/gateway/setup.d.ts +15 -0
  86. package/dist/commands/gateway/setup.d.ts.map +1 -0
  87. package/dist/commands/gateway/setup.js +82 -0
  88. package/dist/commands/gateway/setup.js.map +1 -0
  89. package/dist/commands/gateway/status.d.ts +4 -1
  90. package/dist/commands/gateway/status.d.ts.map +1 -1
  91. package/dist/commands/gateway/status.js +97 -17
  92. package/dist/commands/gateway/status.js.map +1 -1
  93. package/dist/commands/setup.d.ts +9 -0
  94. package/dist/commands/setup.d.ts.map +1 -0
  95. package/dist/commands/setup.js +28 -0
  96. package/dist/commands/setup.js.map +1 -0
  97. package/dist/config/folders.d.ts.map +1 -1
  98. package/dist/config/folders.js +9 -1
  99. package/dist/config/folders.js.map +1 -1
  100. package/dist/server/api/gateways.d.ts +50 -0
  101. package/dist/server/api/gateways.d.ts.map +1 -0
  102. package/dist/server/api/gateways.js +63 -0
  103. package/dist/server/api/gateways.js.map +1 -0
  104. package/dist/server/pty/manager.d.ts +7 -0
  105. package/dist/server/pty/manager.d.ts.map +1 -1
  106. package/dist/server/pty/manager.js +37 -0
  107. package/dist/server/pty/manager.js.map +1 -1
  108. package/dist/server/tools/coding-tools.d.ts.map +1 -1
  109. package/dist/server/tools/coding-tools.js +34 -1
  110. package/dist/server/tools/coding-tools.js.map +1 -1
  111. package/dist/templates/env-overrides.d.ts +15 -0
  112. package/dist/templates/env-overrides.d.ts.map +1 -0
  113. package/dist/templates/env-overrides.js +40 -0
  114. package/dist/templates/env-overrides.js.map +1 -0
  115. package/dist/templates/gateway-compose.d.ts +14 -0
  116. package/dist/templates/gateway-compose.d.ts.map +1 -0
  117. package/dist/templates/gateway-compose.js +34 -0
  118. package/dist/templates/gateway-compose.js.map +1 -0
  119. package/dist/templates/webapp-compose.d.ts +11 -0
  120. package/dist/templates/webapp-compose.d.ts.map +1 -0
  121. package/dist/templates/webapp-compose.js +31 -0
  122. package/dist/templates/webapp-compose.js.map +1 -0
  123. package/dist/tui/chat.d.ts.map +1 -1
  124. package/dist/tui/chat.js +305 -54
  125. package/dist/tui/chat.js.map +1 -1
  126. package/dist/tui/components/approval-panel.d.ts +21 -2
  127. package/dist/tui/components/approval-panel.d.ts.map +1 -1
  128. package/dist/tui/components/approval-panel.js +87 -16
  129. package/dist/tui/components/approval-panel.js.map +1 -1
  130. package/dist/tui/components/status-line.d.ts +3 -0
  131. package/dist/tui/components/status-line.d.ts.map +1 -1
  132. package/dist/tui/components/status-line.js +9 -0
  133. package/dist/tui/components/status-line.js.map +1 -1
  134. package/dist/tui/components/task-detail.d.ts +21 -0
  135. package/dist/tui/components/task-detail.d.ts.map +1 -0
  136. package/dist/tui/components/task-detail.js +105 -0
  137. package/dist/tui/components/task-detail.js.map +1 -0
  138. package/dist/tui/components/task-list.d.ts +34 -0
  139. package/dist/tui/components/task-list.d.ts.map +1 -0
  140. package/dist/tui/components/task-list.js +245 -0
  141. package/dist/tui/components/task-list.js.map +1 -0
  142. package/dist/tui/components/tool-call-item.d.ts +6 -0
  143. package/dist/tui/components/tool-call-item.d.ts.map +1 -1
  144. package/dist/tui/components/tool-call-item.js +78 -12
  145. package/dist/tui/components/tool-call-item.js.map +1 -1
  146. package/dist/tui/hooks/use-conversation.d.ts.map +1 -1
  147. package/dist/tui/hooks/use-conversation.js +116 -35
  148. package/dist/tui/hooks/use-conversation.js.map +1 -1
  149. package/dist/tui/utils/avatar.d.ts +7 -23
  150. package/dist/tui/utils/avatar.d.ts.map +1 -1
  151. package/dist/tui/utils/avatar.js +102 -84
  152. package/dist/tui/utils/avatar.js.map +1 -1
  153. package/dist/tui/utils/html-to-md.d.ts +2 -0
  154. package/dist/tui/utils/html-to-md.d.ts.map +1 -0
  155. package/dist/tui/utils/html-to-md.js +17 -0
  156. package/dist/tui/utils/html-to-md.js.map +1 -0
  157. package/dist/tui/utils/stream.d.ts +59 -5
  158. package/dist/tui/utils/stream.d.ts.map +1 -1
  159. package/dist/tui/utils/stream.js +69 -0
  160. package/dist/tui/utils/stream.js.map +1 -1
  161. package/dist/utils/require-native-gateway.d.ts +11 -0
  162. package/dist/utils/require-native-gateway.d.ts.map +1 -0
  163. package/dist/utils/require-native-gateway.js +22 -0
  164. package/dist/utils/require-native-gateway.js.map +1 -0
  165. package/dist/utils/setup/docker.d.ts +10 -0
  166. package/dist/utils/setup/docker.d.ts.map +1 -0
  167. package/dist/utils/setup/docker.js +253 -0
  168. package/dist/utils/setup/docker.js.map +1 -0
  169. package/dist/utils/setup/local.d.ts +9 -0
  170. package/dist/utils/setup/local.d.ts.map +1 -0
  171. package/dist/utils/setup/local.js +226 -0
  172. package/dist/utils/setup/local.js.map +1 -0
  173. package/dist/utils/setup/railway.d.ts +9 -0
  174. package/dist/utils/setup/railway.d.ts.map +1 -0
  175. package/dist/utils/setup/railway.js +244 -0
  176. package/dist/utils/setup/railway.js.map +1 -0
  177. package/package.json +5 -3
@@ -0,0 +1,9 @@
1
+ interface LocalSetupResult {
2
+ installDir: string;
3
+ appOrigin: string;
4
+ }
5
+ export declare function setupLocalWebapp(): Promise<LocalSetupResult | {
6
+ cancelled: true;
7
+ }>;
8
+ export {};
9
+ //# sourceMappingURL=local.d.ts.map
@@ -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,9 @@
1
+ interface RailwaySetupResult {
2
+ gatewayId: string;
3
+ baseUrl: string;
4
+ }
5
+ export declare function setupRailwayGateway(): Promise<RailwaySetupResult | {
6
+ cancelled: true;
7
+ }>;
8
+ export {};
9
+ //# sourceMappingURL=railway.d.ts.map
@@ -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"}
@@ -0,0 +1,244 @@
1
+ import * as p from '@clack/prompts';
2
+ import chalk from 'chalk';
3
+ import { spawn, exec as execCb } from 'node:child_process';
4
+ import { promisify } from 'node:util';
5
+ import { hostname } from 'node:os';
6
+ import { generateSecurityKey } from '../../server/api/auth.js';
7
+ import { registerGatewayWithApi, waitForManifest, } from '../../server/api/gateways.js';
8
+ import { RAILWAY_TEMPLATE_CODE } from '../../templates/gateway-compose.js';
9
+ import { getConfig } from '../../config/index.js';
10
+ const exec = promisify(execCb);
11
+ async function commandExists(cmd) {
12
+ try {
13
+ await exec(`command -v ${cmd}`);
14
+ return true;
15
+ }
16
+ catch {
17
+ return false;
18
+ }
19
+ }
20
+ async function railwayInstalled() {
21
+ return commandExists('railway');
22
+ }
23
+ async function offerRailwayInstall() {
24
+ p.log.info(`${chalk.bold('Railway CLI not found.')} See https://docs.railway.com/cli for install options.`);
25
+ const useBrew = process.platform === 'darwin' && (await commandExists('brew'));
26
+ const installer = useBrew
27
+ ? { label: 'brew install railway', cmd: 'brew', args: ['install', 'railway'] }
28
+ : { label: 'npm install -g @railway/cli', cmd: 'npm', args: ['install', '-g', '@railway/cli'] };
29
+ const proceed = await p.confirm({
30
+ message: `Install with \`${installer.label}\`?`,
31
+ initialValue: true,
32
+ });
33
+ if (p.isCancel(proceed) || !proceed)
34
+ return false;
35
+ return new Promise(resolve => {
36
+ const child = spawn(installer.cmd, installer.args, { stdio: 'inherit' });
37
+ child.on('exit', code => resolve(code === 0));
38
+ child.on('error', () => resolve(false));
39
+ });
40
+ }
41
+ async function railwayWhoami() {
42
+ try {
43
+ const { stdout } = await exec('railway whoami');
44
+ const trimmed = stdout.trim();
45
+ if (!trimmed)
46
+ return { loggedIn: false };
47
+ return { loggedIn: true, user: trimmed };
48
+ }
49
+ catch {
50
+ return { loggedIn: false };
51
+ }
52
+ }
53
+ async function railwayLogin(browserless) {
54
+ return new Promise(resolve => {
55
+ const args = browserless ? ['login', '--browserless'] : ['login'];
56
+ const child = spawn('railway', args, { stdio: 'inherit' });
57
+ child.on('exit', code => resolve(code === 0));
58
+ child.on('error', () => resolve(false));
59
+ });
60
+ }
61
+ async function railwayInit(opts) {
62
+ return new Promise(resolve => {
63
+ const child = spawn('railway', ['init', '--name', opts.projectName], { stdio: 'inherit' });
64
+ child.on('exit', code => resolve(code === 0));
65
+ child.on('error', () => resolve(false));
66
+ });
67
+ }
68
+ async function railwayDeployTemplate(args) {
69
+ const flags = ['deploy', '-t', args.templateCode];
70
+ for (const [k, v] of Object.entries(args.variables)) {
71
+ if (v !== undefined && v !== '')
72
+ flags.push('-v', `${k}=${v}`);
73
+ }
74
+ return new Promise(resolve => {
75
+ const child = spawn('railway', flags, { stdio: 'inherit' });
76
+ child.on('exit', code => resolve(code === 0));
77
+ child.on('error', () => resolve(false));
78
+ });
79
+ }
80
+ async function railwayProvisionDomain() {
81
+ try {
82
+ const { stdout } = await exec('railway domain');
83
+ const match = stdout.match(/https?:\/\/[^\s]+/);
84
+ return match ? match[0].replace(/[).,\]]+$/, '') : null;
85
+ }
86
+ catch {
87
+ return null;
88
+ }
89
+ }
90
+ export async function setupRailwayGateway() {
91
+ const config = getConfig();
92
+ if (!config.auth?.apiKey || !config.auth?.url) {
93
+ throw new Error('Not authenticated. Run `corebrain login` first.');
94
+ }
95
+ p.log.info(chalk.dim('Railway is paid — this will spin up a service Railway bills you for.'));
96
+ if (!(await railwayInstalled())) {
97
+ const installed = await offerRailwayInstall();
98
+ if (!installed) {
99
+ p.log.error('Railway CLI is required. Install it and re-run setup.');
100
+ return { cancelled: true };
101
+ }
102
+ if (!(await railwayInstalled())) {
103
+ p.log.error('Railway CLI still not on PATH after install. Re-open your shell and try again.');
104
+ return { cancelled: true };
105
+ }
106
+ }
107
+ const auth = await railwayWhoami();
108
+ if (!auth.loggedIn) {
109
+ const isTty = Boolean(process.stdout.isTTY);
110
+ const browserless = !isTty;
111
+ p.log.step(browserless
112
+ ? 'Logging in to Railway (browserless — copy the code into your browser).'
113
+ : 'Logging in to Railway (will open your browser).');
114
+ const ok = await railwayLogin(browserless);
115
+ if (!ok) {
116
+ p.log.error('Railway login failed.');
117
+ return { cancelled: true };
118
+ }
119
+ }
120
+ else {
121
+ p.log.info(`Railway logged in as ${chalk.cyan(auth.user ?? 'unknown')}.`);
122
+ }
123
+ const name = await p.text({
124
+ message: 'Gateway name (also used as the Railway project name)',
125
+ placeholder: `${hostname()}-railway`,
126
+ initialValue: `${hostname()}-railway`,
127
+ validate: v => (v?.trim() ? undefined : 'Name is required'),
128
+ });
129
+ if (p.isCancel(name))
130
+ return { cancelled: true };
131
+ const description = await p.text({
132
+ message: 'Description (optional)',
133
+ placeholder: 'Cloud-hosted CoreBrain gateway',
134
+ defaultValue: '',
135
+ });
136
+ if (p.isCancel(description))
137
+ return { cancelled: true };
138
+ const claudeToken = await p.text({
139
+ message: chalk.dim('CLAUDE_CODE_OAUTH_TOKEN (optional)'),
140
+ placeholder: 'Leave blank to skip',
141
+ defaultValue: '',
142
+ });
143
+ if (p.isCancel(claudeToken))
144
+ return { cancelled: true };
145
+ const openaiKey = await p.text({
146
+ message: chalk.dim('OPENAI_API_KEY (optional)'),
147
+ placeholder: 'Leave blank to skip',
148
+ defaultValue: '',
149
+ });
150
+ if (p.isCancel(openaiKey))
151
+ return { cancelled: true };
152
+ const githubToken = await p.text({
153
+ message: chalk.dim('GITHUB_TOKEN (optional)'),
154
+ placeholder: 'Leave blank to skip',
155
+ defaultValue: '',
156
+ });
157
+ if (p.isCancel(githubToken))
158
+ return { cancelled: true };
159
+ const initSpinner = p.spinner();
160
+ initSpinner.stop();
161
+ p.log.step(`Creating Railway project ${chalk.cyan(name)}...`);
162
+ const initOk = await railwayInit({ projectName: name });
163
+ if (!initOk) {
164
+ p.log.error('`railway init` failed.');
165
+ return { cancelled: true };
166
+ }
167
+ const securityKey = generateSecurityKey();
168
+ const variables = {
169
+ COREBRAIN_API_URL: config.auth.url,
170
+ COREBRAIN_API_KEY: config.auth.apiKey,
171
+ COREBRAIN_GATEWAY_NAME: name,
172
+ COREBRAIN_GATEWAY_DESCRIPTION: description || 'Cloud-hosted CoreBrain gateway',
173
+ COREBRAIN_GATEWAY_SECURITY_KEY: securityKey,
174
+ CLAUDE_CODE_OAUTH_TOKEN: claudeToken || '',
175
+ OPENAI_API_KEY: openaiKey || '',
176
+ GITHUB_TOKEN: githubToken || '',
177
+ };
178
+ p.log.step(`Deploying template ${chalk.cyan(RAILWAY_TEMPLATE_CODE)} to Railway...`);
179
+ const deployOk = await railwayDeployTemplate({
180
+ templateCode: RAILWAY_TEMPLATE_CODE,
181
+ variables,
182
+ });
183
+ if (!deployOk) {
184
+ p.log.error('`railway deploy` failed.');
185
+ return { cancelled: true };
186
+ }
187
+ const domainSpinner = p.spinner();
188
+ domainSpinner.start('Provisioning Railway domain...');
189
+ const baseUrl = await railwayProvisionDomain();
190
+ if (!baseUrl) {
191
+ domainSpinner.stop(chalk.red('Could not parse domain from `railway domain`'));
192
+ p.log.info('Run `railway domain` manually in the project dir, then re-run `corebrain gateway setup` to register.');
193
+ return { cancelled: true };
194
+ }
195
+ domainSpinner.stop(chalk.green(`Domain: ${baseUrl}`));
196
+ const waitSpinner = p.spinner();
197
+ waitSpinner.start(`Waiting for ${baseUrl}/manifest...`);
198
+ const reachable = await waitForManifest(baseUrl, securityKey, 180_000, 3_000);
199
+ if (!reachable) {
200
+ waitSpinner.stop(chalk.red('Gateway did not respond within 3 minutes'));
201
+ p.log.info('Check Railway logs and try registering manually with `corebrain gateway register`.');
202
+ return { cancelled: true };
203
+ }
204
+ waitSpinner.stop(chalk.green('Gateway is reachable'));
205
+ const addToCore = await p.confirm({
206
+ message: `Add this gateway to CORE (${baseUrl})?`,
207
+ initialValue: true,
208
+ });
209
+ if (p.isCancel(addToCore) || !addToCore) {
210
+ p.note([
211
+ `Railway service running at ${baseUrl}.`,
212
+ `Security key: ${chalk.yellow(securityKey)}`,
213
+ '',
214
+ 'Register later via Settings → Gateways → Register.',
215
+ ].join('\n'), 'Not registered');
216
+ return { cancelled: true };
217
+ }
218
+ const regSpinner = p.spinner();
219
+ regSpinner.start('Registering with CORE...');
220
+ let gatewayId;
221
+ try {
222
+ const result = await registerGatewayWithApi({
223
+ baseUrl,
224
+ securityKey,
225
+ name: name,
226
+ description: description || undefined,
227
+ });
228
+ gatewayId = result.gatewayId;
229
+ regSpinner.stop(chalk.green('Registered'));
230
+ }
231
+ catch (err) {
232
+ regSpinner.stop(chalk.red('Registration failed'));
233
+ throw err;
234
+ }
235
+ p.note([
236
+ `${chalk.bold('Gateway:')} ${name}`,
237
+ `${chalk.bold('URL:')} ${baseUrl}`,
238
+ `${chalk.bold('Gateway ID:')} ${gatewayId}`,
239
+ '',
240
+ chalk.dim('Manage the deploy via the Railway dashboard or `railway` CLI in the project dir.'),
241
+ ].join('\n'), 'Railway gateway ready');
242
+ return { gatewayId, baseUrl };
243
+ }
244
+ //# sourceMappingURL=railway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"railway.js","sourceRoot":"","sources":["../../../src/utils/setup/railway.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redplanethq/corebrain",
3
- "version": "2.8.18",
3
+ "version": "2.8.21",
4
4
  "type": "module",
5
5
  "engines": {
6
6
  "node": ">=16"
@@ -21,12 +21,12 @@
21
21
  "@mariozechner/pi-tui": "^0.57.1",
22
22
  "@mishieck/ink-titled-box": "^0.4.2",
23
23
  "@redplanethq/ui": "2.1.3",
24
- "fastify": "^5.0.0",
25
24
  "chalk": "^5.2.0",
26
25
  "diff": "^5.2.0",
27
26
  "dotenv": "^17.2.3",
28
27
  "fast-glob": "^3.3.2",
29
28
  "fast-png": "^8.0.0",
29
+ "fastify": "^5.0.0",
30
30
  "ink": "^6.6.0",
31
31
  "ink-select-input": "^6.2.0",
32
32
  "ink-spinner": "5.0.0",
@@ -36,16 +36,18 @@
36
36
  "pastel": "^4.0.0",
37
37
  "playwright": "^1.44.0",
38
38
  "react": "^19.2.4",
39
+ "turndown": "^7.2.4",
39
40
  "ws": "^8.18.0",
40
41
  "zod": "^4.3.6",
41
42
  "@redplanethq/gateway-protocol": "0.1.1",
42
- "@redplanethq/sdk": "0.1.19"
43
+ "@redplanethq/sdk": "0.1.21"
43
44
  },
44
45
  "devDependencies": {
45
46
  "@sindresorhus/tsconfig": "^8.1.0",
46
47
  "@types/diff": "^5.2.0",
47
48
  "@types/node": "18",
48
49
  "@types/react": "^19.2.13",
50
+ "@types/turndown": "^5.0.6",
49
51
  "@types/ws": "^8.5.13",
50
52
  "@vdemedes/prettier-config": "^2.0.1",
51
53
  "ava": "^6.4.1",