alaska-ai 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -0
- package/dist/adapters/slack.d.ts +130 -0
- package/dist/adapters/slack.js +1484 -0
- package/dist/adapters/slack.js.map +1 -0
- package/dist/backends/claude.d.ts +78 -0
- package/dist/backends/claude.js +452 -0
- package/dist/backends/claude.js.map +1 -0
- package/dist/backends/codex.d.ts +53 -0
- package/dist/backends/codex.js +324 -0
- package/dist/backends/codex.js.map +1 -0
- package/dist/cli/init.d.ts +50 -0
- package/dist/cli/init.js +386 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/prompt.d.ts +31 -0
- package/dist/cli/prompt.js +145 -0
- package/dist/cli/prompt.js.map +1 -0
- package/dist/cli/start.d.ts +28 -0
- package/dist/cli/start.js +522 -0
- package/dist/cli/start.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +65 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/callbacks.d.ts +32 -0
- package/dist/mcp/callbacks.js +181 -0
- package/dist/mcp/callbacks.js.map +1 -0
- package/dist/mcp/config.d.ts +15 -0
- package/dist/mcp/config.js +22 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/entry.d.ts +13 -0
- package/dist/mcp/entry.js +119 -0
- package/dist/mcp/entry.js.map +1 -0
- package/dist/mcp/file-browser.d.ts +15 -0
- package/dist/mcp/file-browser.js +135 -0
- package/dist/mcp/file-browser.js.map +1 -0
- package/dist/mcp/ipc-server.d.ts +64 -0
- package/dist/mcp/ipc-server.js +380 -0
- package/dist/mcp/ipc-server.js.map +1 -0
- package/dist/mcp/preview-server.d.ts +33 -0
- package/dist/mcp/preview-server.js +254 -0
- package/dist/mcp/preview-server.js.map +1 -0
- package/dist/mcp/server.d.ts +51 -0
- package/dist/mcp/server.js +257 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tunnel.d.ts +17 -0
- package/dist/mcp/tunnel.js +154 -0
- package/dist/mcp/tunnel.js.map +1 -0
- package/dist/router.d.ts +113 -0
- package/dist/router.js +511 -0
- package/dist/router.js.map +1 -0
- package/dist/sandbox-policy.d.ts +6 -0
- package/dist/sandbox-policy.js +46 -0
- package/dist/sandbox-policy.js.map +1 -0
- package/dist/scheduler.d.ts +42 -0
- package/dist/scheduler.js +169 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/store.d.ts +95 -0
- package/dist/store.js +353 -0
- package/dist/store.js.map +1 -0
- package/dist/types/adapter.d.ts +50 -0
- package/dist/types/adapter.js +9 -0
- package/dist/types/adapter.js.map +1 -0
- package/dist/types/backend.d.ts +73 -0
- package/dist/types/backend.js +8 -0
- package/dist/types/backend.js.map +1 -0
- package/dist/types/events.d.ts +47 -0
- package/dist/types/events.js +9 -0
- package/dist/types/events.js.map +1 -0
- package/dist/utils.d.ts +59 -0
- package/dist/utils.js +272 -0
- package/dist/utils.js.map +1 -0
- package/package.json +50 -0
package/dist/cli/init.js
ADDED
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* alaska init 鈥?Interactive setup wizard.
|
|
3
|
+
*
|
|
4
|
+
* Guides the user through platform selection, token input (with inline
|
|
5
|
+
* setup instructions and verification), and backend detection. Writes
|
|
6
|
+
* config to .alaska/ and .env.local.
|
|
7
|
+
*/
|
|
8
|
+
import * as fs from 'node:fs';
|
|
9
|
+
import * as path from 'node:path';
|
|
10
|
+
import { execSync } from 'node:child_process';
|
|
11
|
+
import { createStore } from '../store.js';
|
|
12
|
+
import * as clack from '@clack/prompts';
|
|
13
|
+
import pc from 'picocolors';
|
|
14
|
+
import { createPromptIO, promptSelect, promptText, promptConfirm } from './prompt.js';
|
|
15
|
+
import { getConfigDir, getEnvPath } from '../utils.js';
|
|
16
|
+
import { validateSandboxRoot } from '../sandbox-policy.js';
|
|
17
|
+
/** Validate a Slack bot token format. */
|
|
18
|
+
export function validateSlackBotToken(token) {
|
|
19
|
+
if (!token.startsWith('xoxb-')) {
|
|
20
|
+
return 'Slack bot token must start with "xoxb-"';
|
|
21
|
+
}
|
|
22
|
+
if (token.length < 20) {
|
|
23
|
+
return 'Token seems too short 鈥?check that you copied the full token.';
|
|
24
|
+
}
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
/** Validate a Slack app token format. */
|
|
28
|
+
export function validateSlackAppToken(token) {
|
|
29
|
+
if (!token.startsWith('xapp-')) {
|
|
30
|
+
return 'Slack app token must start with "xapp-"';
|
|
31
|
+
}
|
|
32
|
+
if (token.length < 20) {
|
|
33
|
+
return 'Token seems too short 鈥?check that you copied the full token.';
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
/** Verify a Slack bot token by calling auth.test. Returns bot name on success, null on failure. */
|
|
38
|
+
export async function verifySlackToken(botToken) {
|
|
39
|
+
try {
|
|
40
|
+
const res = await fetch('https://slack.com/api/auth.test', {
|
|
41
|
+
method: 'POST',
|
|
42
|
+
headers: {
|
|
43
|
+
'Authorization': `Bearer ${botToken}`,
|
|
44
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
const data = await res.json();
|
|
48
|
+
if (data.ok) {
|
|
49
|
+
return data.user ?? data.bot_id ?? 'bot';
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/** Check if a CLI tool is available on PATH. */
|
|
58
|
+
export function detectCli(name) {
|
|
59
|
+
try {
|
|
60
|
+
const lookup = process.platform === 'win32' ? 'where' : 'which';
|
|
61
|
+
execSync(`${lookup} ${name}`, { stdio: 'pipe' });
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/** Step 1: Platform selection (P6.2) */
|
|
69
|
+
export async function selectPlatforms(io) {
|
|
70
|
+
if (!io) {
|
|
71
|
+
clack.log.info('Slack is the supported messaging platform.');
|
|
72
|
+
}
|
|
73
|
+
return ['slack'];
|
|
74
|
+
}
|
|
75
|
+
/** Step 2: Token input with inline setup instructions and verification (P6.3) */
|
|
76
|
+
export async function inputTokens(io, platforms) {
|
|
77
|
+
const result = {};
|
|
78
|
+
const isInteractive = !io;
|
|
79
|
+
if (platforms.includes('slack')) {
|
|
80
|
+
if (isInteractive) {
|
|
81
|
+
// Step-by-step guided flow
|
|
82
|
+
clack.note(pc.cyan('Go to api.slack.com/apps 鈫?Create New App 鈫?From an app manifest'), 'Slack Setup 鈥?Step 1 of 4');
|
|
83
|
+
await promptConfirm(io, 'Have you created the app?', true);
|
|
84
|
+
clack.note([
|
|
85
|
+
pc.cyan('2a. Pick your workspace, switch to the JSON tab'),
|
|
86
|
+
pc.cyan('2b. Paste the manifest from:'),
|
|
87
|
+
pc.cyan(' https://github.com/shekit/alaska/blob/main/slack-manifest.json'),
|
|
88
|
+
pc.cyan('2c. Click Create'),
|
|
89
|
+
].join('\n'), 'Slack Setup 鈥?Step 2 of 4');
|
|
90
|
+
await promptConfirm(io, 'Have you pasted the manifest and clicked Create?', true);
|
|
91
|
+
clack.note(pc.cyan('Install to Workspace 鈫?copy the Bot Token (starts with xoxb-)'), 'Slack Setup 鈥?Step 3 of 4');
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
console.log('\n[init] --- Slack Setup ---');
|
|
95
|
+
console.log('1. Go to api.slack.com/apps 鈫?Create New App 鈫?From an app manifest');
|
|
96
|
+
console.log('2. Paste manifest from: https://github.com/shekit/alaska/blob/main/slack-manifest.json');
|
|
97
|
+
console.log('3. Install to Workspace 鈫?copy the Bot Token (xoxb-)');
|
|
98
|
+
console.log('4. App-Level Tokens 鈫?Generate Token with connections:write scope (xapp-)');
|
|
99
|
+
}
|
|
100
|
+
// Token entry + verification (retries on failure in interactive mode)
|
|
101
|
+
while (true) {
|
|
102
|
+
result.slackBotToken = await promptText(io, 'Slack Bot Token (xoxb-...)', validateSlackBotToken);
|
|
103
|
+
if (isInteractive) {
|
|
104
|
+
clack.note([
|
|
105
|
+
pc.cyan('4a. Basic Information 鈫?App-Level Tokens 鈫?Generate Token'),
|
|
106
|
+
pc.cyan('4b. Give it the connections:write scope 鈫?copy the token (starts with xapp-)'),
|
|
107
|
+
].join('\n'), 'Slack Setup 鈥?Step 4 of 4');
|
|
108
|
+
}
|
|
109
|
+
result.slackAppToken = await promptText(io, 'Slack App Token (xapp-...)', validateSlackAppToken);
|
|
110
|
+
if (isInteractive) {
|
|
111
|
+
const s = clack.spinner();
|
|
112
|
+
s.start('Verifying Slack tokens...');
|
|
113
|
+
const botName = await verifySlackToken(result.slackBotToken);
|
|
114
|
+
if (botName) {
|
|
115
|
+
s.stop(`Slack token verified 鈥?connected as "${botName}"`);
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
s.stop('Could not verify Slack token 鈥?the token may be invalid or the network is down.');
|
|
119
|
+
const retry = await promptConfirm(io, 'Re-enter Slack tokens?', true);
|
|
120
|
+
if (!retry)
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
console.log('[init] verifying Slack token...');
|
|
125
|
+
const botName = await verifySlackToken(result.slackBotToken);
|
|
126
|
+
if (botName) {
|
|
127
|
+
console.log(`[init] Slack token verified 鈥?connected as "${botName}"`);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
console.log('[init] could not verify token 鈥?continuing');
|
|
131
|
+
}
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// Invite the bot
|
|
136
|
+
if (isInteractive) {
|
|
137
|
+
clack.note([
|
|
138
|
+
pc.cyan('Go to your Slack workspace and invite the bot to a channel:'),
|
|
139
|
+
'',
|
|
140
|
+
pc.cyan(' /invite @Alaska'),
|
|
141
|
+
'',
|
|
142
|
+
pc.cyan('The bot will appear online once the bridge is running.'),
|
|
143
|
+
].join('\n'), 'Invite the bot');
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
console.log('\n[init] --- Invite the bot ---');
|
|
147
|
+
console.log('Invite the bot: /invite @Alaska');
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return result;
|
|
151
|
+
}
|
|
152
|
+
/** Step 3: Backend auto-detection (P6.4) */
|
|
153
|
+
export async function detectBackend(io) {
|
|
154
|
+
const hasClaude = detectCli('claude');
|
|
155
|
+
const hasCodex = detectCli('codex');
|
|
156
|
+
if (!hasClaude && !hasCodex) {
|
|
157
|
+
if (!io) {
|
|
158
|
+
clack.log.warn('No coding backends found on PATH.');
|
|
159
|
+
clack.log.info('Install one before sending messages:');
|
|
160
|
+
clack.log.info(' Claude Code: npm i -g @anthropic-ai/claude-code');
|
|
161
|
+
clack.log.info(' Codex CLI: npm i -g @openai/codex');
|
|
162
|
+
clack.log.info('Defaulting to "claude" 鈥?you can change this later with /project backend.');
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
console.log('[init] no coding backends found 鈥?defaulting to "claude".');
|
|
166
|
+
}
|
|
167
|
+
return 'claude';
|
|
168
|
+
}
|
|
169
|
+
const available = [];
|
|
170
|
+
if (hasClaude)
|
|
171
|
+
available.push({ label: 'Claude Code', value: 'claude' });
|
|
172
|
+
if (hasCodex)
|
|
173
|
+
available.push({ label: 'Codex CLI', value: 'codex' });
|
|
174
|
+
if (available.length === 1) {
|
|
175
|
+
if (!io) {
|
|
176
|
+
clack.log.success(`Found ${available[0].label} 鈥?using it as default backend.`);
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
console.log(`[init] using ${available[0].label} as default backend.`);
|
|
180
|
+
}
|
|
181
|
+
return available[0].value;
|
|
182
|
+
}
|
|
183
|
+
const selected = await promptSelect(io, 'Select default backend:', available);
|
|
184
|
+
return selected[0];
|
|
185
|
+
}
|
|
186
|
+
/** Write tokens to .env.local (P6.6) */
|
|
187
|
+
export function writeEnvFile(envPath, tokens) {
|
|
188
|
+
const lines = [
|
|
189
|
+
'# Alaska Environment Variables',
|
|
190
|
+
'# Auto-generated by alaska setup wizard',
|
|
191
|
+
'',
|
|
192
|
+
];
|
|
193
|
+
if (tokens.slackBotToken) {
|
|
194
|
+
lines.push(`SLACK_BOT_TOKEN=${tokens.slackBotToken}`);
|
|
195
|
+
}
|
|
196
|
+
if (tokens.slackAppToken) {
|
|
197
|
+
lines.push(`SLACK_APP_TOKEN=${tokens.slackAppToken}`);
|
|
198
|
+
}
|
|
199
|
+
lines.push('');
|
|
200
|
+
fs.writeFileSync(envPath, lines.join('\n'));
|
|
201
|
+
}
|
|
202
|
+
/** Read existing .env.local, merge new tokens, and write back. */
|
|
203
|
+
export function mergeEnvFile(envPath, newTokens) {
|
|
204
|
+
const existing = {};
|
|
205
|
+
if (fs.existsSync(envPath)) {
|
|
206
|
+
const content = fs.readFileSync(envPath, 'utf-8');
|
|
207
|
+
for (const line of content.split('\n')) {
|
|
208
|
+
const trimmed = line.trim();
|
|
209
|
+
if (!trimmed || trimmed.startsWith('#'))
|
|
210
|
+
continue;
|
|
211
|
+
const eqIndex = trimmed.indexOf('=');
|
|
212
|
+
if (eqIndex === -1)
|
|
213
|
+
continue;
|
|
214
|
+
existing[trimmed.substring(0, eqIndex).trim()] = trimmed.substring(eqIndex + 1).trim();
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (newTokens.slackBotToken)
|
|
218
|
+
existing.SLACK_BOT_TOKEN = newTokens.slackBotToken;
|
|
219
|
+
if (newTokens.slackAppToken)
|
|
220
|
+
existing.SLACK_APP_TOKEN = newTokens.slackAppToken;
|
|
221
|
+
const lines = ['# Alaska Environment Variables', '# Auto-generated by alaska setup wizard', ''];
|
|
222
|
+
for (const [key, value] of Object.entries(existing)) {
|
|
223
|
+
lines.push(`${key}=${value}`);
|
|
224
|
+
}
|
|
225
|
+
lines.push('');
|
|
226
|
+
fs.writeFileSync(envPath, lines.join('\n'));
|
|
227
|
+
}
|
|
228
|
+
/** Save platform and backend config to the store (P6.6) */
|
|
229
|
+
export async function saveConfig(store, platforms, defaultBackend) {
|
|
230
|
+
await store.setSetting('platforms', JSON.stringify(platforms));
|
|
231
|
+
await store.setSetting('default_backend', defaultBackend);
|
|
232
|
+
}
|
|
233
|
+
/** Detect available tunnel tools on PATH. */
|
|
234
|
+
export function detectTunnelTools() {
|
|
235
|
+
return {
|
|
236
|
+
hasCloudflared: detectCli('cloudflared'),
|
|
237
|
+
hasNgrok: detectCli('ngrok'),
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
/** Step: File previews setup (tunnel tool detection) */
|
|
241
|
+
export async function setupFilePreviews(io) {
|
|
242
|
+
const wantPreviews = await promptConfirm(io, 'Set up file previews? (lets the AI share live previews of web apps it builds)', true);
|
|
243
|
+
if (!wantPreviews) {
|
|
244
|
+
if (!io) {
|
|
245
|
+
clack.log.info('You can set this up anytime by running `alaska-ai start`.');
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
console.log('[init] skipped file previews 鈥?set up later via `alaska-ai start`.');
|
|
249
|
+
}
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
const { hasCloudflared, hasNgrok } = detectTunnelTools();
|
|
253
|
+
if (hasCloudflared && hasNgrok) {
|
|
254
|
+
const msg = 'cloudflared and ngrok detected 鈥?previews will work automatically. Will prefer cloudflared.';
|
|
255
|
+
if (!io) {
|
|
256
|
+
clack.log.success(msg);
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
console.log(`[init] ${msg}`);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
else if (hasCloudflared) {
|
|
263
|
+
const msg = 'cloudflared detected 鈥?previews will work automatically.';
|
|
264
|
+
if (!io) {
|
|
265
|
+
clack.log.success(msg);
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
console.log(`[init] ${msg}`);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
else if (hasNgrok) {
|
|
272
|
+
const msg = 'ngrok detected 鈥?previews will work automatically.';
|
|
273
|
+
if (!io) {
|
|
274
|
+
clack.log.success(msg);
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
console.log(`[init] ${msg}`);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
const installSteps = [
|
|
282
|
+
pc.cyan('No tunnel tool found. Install one to enable previews:'),
|
|
283
|
+
'',
|
|
284
|
+
pc.cyan(' cloudflared (recommended 鈥?free, no account needed):'),
|
|
285
|
+
pc.cyan(' brew install cloudflared'),
|
|
286
|
+
'',
|
|
287
|
+
pc.cyan(' ngrok:'),
|
|
288
|
+
pc.cyan(' brew install ngrok'),
|
|
289
|
+
].join('\n');
|
|
290
|
+
if (!io) {
|
|
291
|
+
clack.note(installSteps, 'Install a tunnel tool');
|
|
292
|
+
clack.log.info('Install one of these before starting the bridge, and previews will work automatically.');
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
console.log(`[init] ${installSteps}`);
|
|
296
|
+
console.log('[init] install one before starting the bridge.');
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
/** Step: Set sandbox root directory (required). */
|
|
301
|
+
export async function setProjectsRoot(io, store) {
|
|
302
|
+
const rootDir = await promptText(io, 'Sandbox root directory (absolute path)', (input) => {
|
|
303
|
+
if (!input) {
|
|
304
|
+
return 'Path is required';
|
|
305
|
+
}
|
|
306
|
+
try {
|
|
307
|
+
validateSandboxRoot(input);
|
|
308
|
+
return null;
|
|
309
|
+
}
|
|
310
|
+
catch (err) {
|
|
311
|
+
return err.message;
|
|
312
|
+
}
|
|
313
|
+
});
|
|
314
|
+
const resolvedRoot = validateSandboxRoot(rootDir);
|
|
315
|
+
await store.setSetting('projects_root', resolvedRoot);
|
|
316
|
+
if (!io) {
|
|
317
|
+
clack.log.success(`Sandbox root set to ${resolvedRoot}`);
|
|
318
|
+
}
|
|
319
|
+
else {
|
|
320
|
+
console.log(`[init] sandbox root set to ${resolvedRoot}`);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Run the full init wizard.
|
|
325
|
+
* Accepts optional PromptIO for testing (defaults to interactive @clack/prompts).
|
|
326
|
+
*/
|
|
327
|
+
export async function runInit(io) {
|
|
328
|
+
// When no IO is injected, use null to signal @clack/prompts mode
|
|
329
|
+
const prompt = io ?? null;
|
|
330
|
+
const legacyPrompt = io ?? createPromptIO();
|
|
331
|
+
try {
|
|
332
|
+
if (!io) {
|
|
333
|
+
clack.intro('Alaska');
|
|
334
|
+
clack.log.info('Chat with your projects from Slack 鈥?from your phone, anywhere.');
|
|
335
|
+
}
|
|
336
|
+
else {
|
|
337
|
+
console.log('\n[init] Alaska\n');
|
|
338
|
+
}
|
|
339
|
+
// Step 1: Platform selection
|
|
340
|
+
const platforms = await selectPlatforms(prompt);
|
|
341
|
+
if (!io) {
|
|
342
|
+
clack.log.info('Channels are projects. Threads are conversations.');
|
|
343
|
+
}
|
|
344
|
+
// Step 2: Token input with inline setup instructions + verification
|
|
345
|
+
const tokens = await inputTokens(io ? legacyPrompt : prompt, platforms);
|
|
346
|
+
// Step 3: Backend detection
|
|
347
|
+
const defaultBackend = await detectBackend(prompt);
|
|
348
|
+
if (!io) {
|
|
349
|
+
const backendLabel = defaultBackend === 'claude' ? 'Claude Code' : 'Codex';
|
|
350
|
+
clack.log.info(`Uses your existing ${backendLabel} subscription 鈥?no extra API fees.`);
|
|
351
|
+
}
|
|
352
|
+
// Step 3b: File previews setup
|
|
353
|
+
await setupFilePreviews(prompt);
|
|
354
|
+
// Step 4: Initialize store
|
|
355
|
+
const dbDir = getConfigDir();
|
|
356
|
+
if (!fs.existsSync(dbDir)) {
|
|
357
|
+
fs.mkdirSync(dbDir, { recursive: true });
|
|
358
|
+
}
|
|
359
|
+
const store = createStore();
|
|
360
|
+
// Save settings
|
|
361
|
+
await saveConfig(store, platforms, defaultBackend);
|
|
362
|
+
// Step 5: Required sandbox root
|
|
363
|
+
await setProjectsRoot(prompt, store);
|
|
364
|
+
// Step 6: Write .env.local
|
|
365
|
+
const envPath = getEnvPath();
|
|
366
|
+
writeEnvFile(envPath, tokens);
|
|
367
|
+
store.close();
|
|
368
|
+
const configDir = getConfigDir();
|
|
369
|
+
if (!io) {
|
|
370
|
+
clack.log.info(`Config saved to ${configDir}/`);
|
|
371
|
+
clack.log.info(' Store: Supabase (remote)');
|
|
372
|
+
clack.log.info(` Tokens: ${envPath}`);
|
|
373
|
+
clack.outro('Setup complete! The bridge will now start.');
|
|
374
|
+
}
|
|
375
|
+
else {
|
|
376
|
+
console.log(`\n[init] config saved to ${configDir}/`);
|
|
377
|
+
console.log('[init] setup complete!');
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
finally {
|
|
381
|
+
if (!io) {
|
|
382
|
+
legacyPrompt.close();
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAc,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAiB,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACrG,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAW3D,yCAAyC;AACzC,MAAM,UAAU,qBAAqB,CAAC,KAAa;IACjD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,OAAO,yCAAyC,CAAC;IACnD,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACtB,OAAO,+DAA+D,CAAC;IACzE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,qBAAqB,CAAC,KAAa;IACjD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,OAAO,yCAAyC,CAAC;IACnD,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACtB,OAAO,+DAA+D,CAAC;IACzE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,mGAAmG;AACnG,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,QAAgB;IACrD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,iCAAiC,EAAE;YACzD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,eAAe,EAAE,UAAU,QAAQ,EAAE;gBACrC,cAAc,EAAE,mCAAmC;aACpD;SACF,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAS,CAAC;QACrC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;QAC3C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QAChE,QAAQ,CAAC,GAAG,MAAM,IAAI,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,wCAAwC;AACxC,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EAAmB;IACvD,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,CAAC,OAAO,CAAC,CAAC;AACnB,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,EAAmB,EACnB,SAAqB;IAErB,MAAM,MAAM,GAAwD,EAAE,CAAC;IACvE,MAAM,aAAa,GAAG,CAAC,EAAE,CAAC;IAE1B,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,IAAI,aAAa,EAAE,CAAC;YAClB,2BAA2B;YAC3B,KAAK,CAAC,IAAI,CACR,EAAE,CAAC,IAAI,CAAC,kEAAkE,CAAC,EAC3E,2BAA2B,CAC5B,CAAC;YACF,MAAM,aAAa,CAAC,EAAE,EAAE,2BAA2B,EAAE,IAAI,CAAC,CAAC;YAE3D,KAAK,CAAC,IAAI,CACR;gBACE,EAAE,CAAC,IAAI,CAAC,iDAAiD,CAAC;gBAC1D,EAAE,CAAC,IAAI,CAAC,8BAA8B,CAAC;gBACvC,EAAE,CAAC,IAAI,CAAC,oEAAoE,CAAC;gBAC7E,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC;aAC5B,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,2BAA2B,CAC5B,CAAC;YACF,MAAM,aAAa,CAAC,EAAE,EAAE,kDAAkD,EAAE,IAAI,CAAC,CAAC;YAElF,KAAK,CAAC,IAAI,CACR,EAAE,CAAC,IAAI,CAAC,+DAA+D,CAAC,EACxE,2BAA2B,CAC5B,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;YACnF,OAAO,CAAC,GAAG,CAAC,wFAAwF,CAAC,CAAC;YACtG,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;YACpE,OAAO,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAC;QAC3F,CAAC;QAED,sEAAsE;QACtE,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,CAAC,aAAa,GAAG,MAAM,UAAU,CAAC,EAAE,EAAE,4BAA4B,EAAE,qBAAqB,CAAC,CAAC;YAEjG,IAAI,aAAa,EAAE,CAAC;gBAClB,KAAK,CAAC,IAAI,CACR;oBACE,EAAE,CAAC,IAAI,CAAC,2DAA2D,CAAC;oBACpE,EAAE,CAAC,IAAI,CAAC,8EAA8E,CAAC;iBACxF,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,2BAA2B,CAC5B,CAAC;YACJ,CAAC;YAED,MAAM,CAAC,aAAa,GAAG,MAAM,UAAU,CAAC,EAAE,EAAE,4BAA4B,EAAE,qBAAqB,CAAC,CAAC;YAEjG,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;gBAC1B,CAAC,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;gBACrC,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,aAAc,CAAC,CAAC;gBAC9D,IAAI,OAAO,EAAE,CAAC;oBACZ,CAAC,CAAC,IAAI,CAAC,wCAAwC,OAAO,GAAG,CAAC,CAAC;oBAC3D,MAAM;gBACR,CAAC;gBACD,CAAC,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAC;gBAC1F,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,EAAE,EAAE,wBAAwB,EAAE,IAAI,CAAC,CAAC;gBACtE,IAAI,CAAC,KAAK;oBAAE,MAAM;YACpB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;gBAC/C,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,aAAc,CAAC,CAAC;gBAC9D,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,GAAG,CAAC,+CAA+C,OAAO,GAAG,CAAC,CAAC;gBACzE,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;gBAC5D,CAAC;gBACD,MAAM;YACR,CAAC;QACH,CAAC;QAED,iBAAiB;QACjB,IAAI,aAAa,EAAE,CAAC;YAClB,KAAK,CAAC,IAAI,CACR;gBACE,EAAE,CAAC,IAAI,CAAC,6DAA6D,CAAC;gBACtE,EAAE;gBACF,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC;gBAC5B,EAAE;gBACF,EAAE,CAAC,IAAI,CAAC,wDAAwD,CAAC;aAClE,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,gBAAgB,CACjB,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,4CAA4C;AAC5C,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAAmB;IACrD,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAEpC,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;YACpD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACvD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;YACpE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;YACxD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;QAC9F,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAuC,EAAE,CAAC;IACzD,IAAI,SAAS;QAAE,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzE,IAAI,QAAQ;QAAE,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAErE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,iCAAiC,CAAC,CAAC;QAClF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,gBAAgB,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,sBAAsB,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5B,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,EAAE,EAAE,yBAAyB,EAAE,SAAS,CAAC,CAAC;IAC9E,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;AACrB,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,YAAY,CAC1B,OAAe,EACf,MAA2D;IAE3D,MAAM,KAAK,GAAa;QACtB,gCAAgC;QAChC,yCAAyC;QACzC,EAAE;KACH,CAAC;IAEF,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,YAAY,CAC1B,OAAe,EACf,SAA8D;IAE9D,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YAClD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,OAAO,KAAK,CAAC,CAAC;gBAAE,SAAS;YAC7B,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACzF,CAAC;IACH,CAAC;IAED,IAAI,SAAS,CAAC,aAAa;QAAE,QAAQ,CAAC,eAAe,GAAG,SAAS,CAAC,aAAa,CAAC;IAChF,IAAI,SAAS,CAAC,aAAa;QAAE,QAAQ,CAAC,eAAe,GAAG,SAAS,CAAC,aAAa,CAAC;IAEhF,MAAM,KAAK,GAAG,CAAC,gCAAgC,EAAE,yCAAyC,EAAE,EAAE,CAAC,CAAC;IAChG,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC;IAChC,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,2DAA2D;AAC3D,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,KAAY,EACZ,SAAqB,EACrB,cAAsB;IAEtB,MAAM,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IAC/D,MAAM,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC;AAC5D,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,iBAAiB;IAC/B,OAAO;QACL,cAAc,EAAE,SAAS,CAAC,aAAa,CAAC;QACxC,QAAQ,EAAE,SAAS,CAAC,OAAO,CAAC;KAC7B,CAAC;AACJ,CAAC;AAED,wDAAwD;AACxD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EAAmB;IACzD,MAAM,YAAY,GAAG,MAAM,aAAa,CACtC,EAAE,EACF,+EAA+E,EAC/E,IAAI,CACL,CAAC;IAEF,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QAC9E,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;QACpF,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,iBAAiB,EAAE,CAAC;IAEzD,IAAI,cAAc,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,6FAA6F,CAAC;QAC1G,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;SAAM,IAAI,cAAc,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,0DAA0D,CAAC;QACvE,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;SAAM,IAAI,QAAQ,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,oDAAoD,CAAC;QACjE,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,YAAY,GAAG;YACnB,EAAE,CAAC,IAAI,CAAC,uDAAuD,CAAC;YAChE,EAAE;YACF,EAAE,CAAC,IAAI,CAAC,wDAAwD,CAAC;YACjE,EAAE,CAAC,IAAI,CAAC,8BAA8B,CAAC;YACvC,EAAE;YACF,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC;YACnB,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC;SAClC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,uBAAuB,CAAC,CAAC;YAClD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,wFAAwF,CAAC,CAAC;QAC3G,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,UAAU,YAAY,EAAE,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;AACH,CAAC;AAED,mDAAmD;AACnD,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,EAAmB,EACnB,KAAY;IAEZ,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,EAAE,EAAE,wCAAwC,EAAE,CAAC,KAAK,EAAE,EAAE;QACvF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,kBAAkB,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC;YACH,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,GAAG,CAAC,OAAO,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,KAAK,CAAC,UAAU,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;IACtD,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,uBAAuB,YAAY,EAAE,CAAC,CAAC;IAC3D,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,8BAA8B,YAAY,EAAE,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,EAAa;IACzC,iEAAiE;IACjE,MAAM,MAAM,GAAoB,EAAE,IAAI,IAAI,CAAC;IAC3C,MAAM,YAAY,GAAG,EAAE,IAAI,cAAc,EAAE,CAAC;IAE5C,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACtB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;QACpF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACnC,CAAC;QAED,6BAA6B;QAC7B,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;QAEhD,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QACtE,CAAC;QAED,oEAAoE;QACpE,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAa,EAAE,SAAS,CAAC,CAAC;QAE/E,4BAA4B;QAC5B,MAAM,cAAc,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;QAEnD,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,YAAY,GAAG,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC;YAC3E,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,sBAAsB,YAAY,oCAAoC,CAAC,CAAC;QACzF,CAAC;QAED,+BAA+B;QAC/B,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAEhC,2BAA2B;QAC3B,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;QAC7B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;QACD,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;QAE5B,gBAAgB;QAChB,MAAM,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;QAEnD,gCAAgC;QAChC,MAAM,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAErC,2BAA2B;QAC3B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAE9B,KAAK,CAAC,KAAK,EAAE,CAAC;QAEd,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;QACjC,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,SAAS,GAAG,CAAC,CAAC;YAChD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAChD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,OAAO,EAAE,CAAC,CAAC;YACzC,KAAK,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,4BAA4B,SAAS,GAAG,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,YAAY,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive prompt utilities for the CLI wizard.
|
|
3
|
+
*
|
|
4
|
+
* Uses @clack/prompts for beautiful interactive prompts when running in a real terminal.
|
|
5
|
+
* Falls back to the PromptIO interface for testing (mock injection).
|
|
6
|
+
*/
|
|
7
|
+
export interface PromptIO {
|
|
8
|
+
question(query: string): Promise<string>;
|
|
9
|
+
close(): void;
|
|
10
|
+
}
|
|
11
|
+
/** Create a readline-based prompt IO (used when tests inject a custom IO). */
|
|
12
|
+
export declare function createPromptIO(input?: NodeJS.ReadableStream, output?: NodeJS.WritableStream): PromptIO;
|
|
13
|
+
/**
|
|
14
|
+
* Ask user to select one or more options from a numbered list.
|
|
15
|
+
* When io is null, uses @clack/prompts for interactive selection.
|
|
16
|
+
* Returns the selected option values.
|
|
17
|
+
*/
|
|
18
|
+
export declare function promptSelect(io: PromptIO | null, message: string, options: {
|
|
19
|
+
label: string;
|
|
20
|
+
value: string;
|
|
21
|
+
}[], multi?: boolean): Promise<string[]>;
|
|
22
|
+
/**
|
|
23
|
+
* Ask user for a text input with optional validation.
|
|
24
|
+
* When io is null, uses @clack/prompts.
|
|
25
|
+
*/
|
|
26
|
+
export declare function promptText(io: PromptIO | null, message: string, validate?: (input: string) => string | null): Promise<string>;
|
|
27
|
+
/**
|
|
28
|
+
* Ask a yes/no question. Returns true for yes.
|
|
29
|
+
* When io is null, uses @clack/prompts.
|
|
30
|
+
*/
|
|
31
|
+
export declare function promptConfirm(io: PromptIO | null, message: string, defaultYes?: boolean): Promise<boolean>;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive prompt utilities for the CLI wizard.
|
|
3
|
+
*
|
|
4
|
+
* Uses @clack/prompts for beautiful interactive prompts when running in a real terminal.
|
|
5
|
+
* Falls back to the PromptIO interface for testing (mock injection).
|
|
6
|
+
*/
|
|
7
|
+
import * as readline from 'node:readline';
|
|
8
|
+
import * as clack from '@clack/prompts';
|
|
9
|
+
/** Create a readline-based prompt IO (used when tests inject a custom IO). */
|
|
10
|
+
export function createPromptIO(input = process.stdin, output = process.stdout) {
|
|
11
|
+
const rl = readline.createInterface({ input, output });
|
|
12
|
+
return {
|
|
13
|
+
question(query) {
|
|
14
|
+
return new Promise((resolve) => {
|
|
15
|
+
rl.question(query, (answer) => resolve(answer.trim()));
|
|
16
|
+
});
|
|
17
|
+
},
|
|
18
|
+
close() {
|
|
19
|
+
rl.close();
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Ask user to select one or more options from a numbered list.
|
|
25
|
+
* When io is null, uses @clack/prompts for interactive selection.
|
|
26
|
+
* Returns the selected option values.
|
|
27
|
+
*/
|
|
28
|
+
export async function promptSelect(io, message, options, multi = false) {
|
|
29
|
+
// Use @clack/prompts for real terminal interaction
|
|
30
|
+
if (!io) {
|
|
31
|
+
if (multi) {
|
|
32
|
+
const result = await clack.multiselect({
|
|
33
|
+
message,
|
|
34
|
+
options: options.map((opt) => ({ label: opt.label, value: opt.value })),
|
|
35
|
+
});
|
|
36
|
+
if (clack.isCancel(result)) {
|
|
37
|
+
clack.cancel('Setup cancelled.');
|
|
38
|
+
process.exit(0);
|
|
39
|
+
}
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
const result = await clack.select({
|
|
43
|
+
message,
|
|
44
|
+
options: options.map((opt) => ({ label: opt.label, value: opt.value })),
|
|
45
|
+
});
|
|
46
|
+
if (clack.isCancel(result)) {
|
|
47
|
+
clack.cancel('Setup cancelled.');
|
|
48
|
+
process.exit(0);
|
|
49
|
+
}
|
|
50
|
+
return [result];
|
|
51
|
+
}
|
|
52
|
+
// Fallback: numbered list (for testing with mock IO)
|
|
53
|
+
console.log(`\n${message}`);
|
|
54
|
+
options.forEach((opt, i) => {
|
|
55
|
+
console.log(` ${i + 1}) ${opt.label}`);
|
|
56
|
+
});
|
|
57
|
+
const hint = multi
|
|
58
|
+
? 'Enter numbers separated by commas (e.g., 1,2): '
|
|
59
|
+
: 'Enter number: ';
|
|
60
|
+
while (true) {
|
|
61
|
+
const answer = await io.question(hint);
|
|
62
|
+
const parts = answer.split(',').map((s) => s.trim()).filter(Boolean);
|
|
63
|
+
const indices = parts.map((p) => parseInt(p, 10) - 1);
|
|
64
|
+
if (indices.length === 0) {
|
|
65
|
+
console.log('Please select at least one option.');
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (indices.some((i) => isNaN(i) || i < 0 || i >= options.length)) {
|
|
69
|
+
console.log(`Please enter a number between 1 and ${options.length}.`);
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
if (!multi && indices.length > 1) {
|
|
73
|
+
console.log('Please select only one option.');
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
return indices.map((i) => options[i].value);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Ask user for a text input with optional validation.
|
|
81
|
+
* When io is null, uses @clack/prompts.
|
|
82
|
+
*/
|
|
83
|
+
export async function promptText(io, message, validate) {
|
|
84
|
+
// Use @clack/prompts for real terminal interaction
|
|
85
|
+
if (!io) {
|
|
86
|
+
const result = await clack.text({
|
|
87
|
+
message,
|
|
88
|
+
validate: (value) => {
|
|
89
|
+
const trimmed = (value ?? '').trim();
|
|
90
|
+
if (!trimmed)
|
|
91
|
+
return 'Input cannot be empty.';
|
|
92
|
+
if (validate) {
|
|
93
|
+
const error = validate(trimmed);
|
|
94
|
+
if (error)
|
|
95
|
+
return error;
|
|
96
|
+
}
|
|
97
|
+
return undefined;
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
if (clack.isCancel(result)) {
|
|
101
|
+
clack.cancel('Setup cancelled.');
|
|
102
|
+
process.exit(0);
|
|
103
|
+
}
|
|
104
|
+
return result.trim();
|
|
105
|
+
}
|
|
106
|
+
// Fallback for testing
|
|
107
|
+
while (true) {
|
|
108
|
+
const answer = await io.question(`${message}: `);
|
|
109
|
+
if (!answer) {
|
|
110
|
+
console.log('Input cannot be empty.');
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
if (validate) {
|
|
114
|
+
const error = validate(answer);
|
|
115
|
+
if (error) {
|
|
116
|
+
console.log(error);
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return answer;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Ask a yes/no question. Returns true for yes.
|
|
125
|
+
* When io is null, uses @clack/prompts.
|
|
126
|
+
*/
|
|
127
|
+
export async function promptConfirm(io, message, defaultYes = true) {
|
|
128
|
+
if (!io) {
|
|
129
|
+
const result = await clack.confirm({
|
|
130
|
+
message,
|
|
131
|
+
initialValue: defaultYes,
|
|
132
|
+
});
|
|
133
|
+
if (clack.isCancel(result)) {
|
|
134
|
+
clack.cancel('Setup cancelled.');
|
|
135
|
+
process.exit(0);
|
|
136
|
+
}
|
|
137
|
+
return result;
|
|
138
|
+
}
|
|
139
|
+
const hint = defaultYes ? '[Y/n]' : '[y/N]';
|
|
140
|
+
const answer = await io.question(`${message} ${hint}: `);
|
|
141
|
+
if (!answer)
|
|
142
|
+
return defaultYes;
|
|
143
|
+
return answer.toLowerCase().startsWith('y');
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/cli/prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* start 鈥?Launch the bridge process.
|
|
3
|
+
*
|
|
4
|
+
* Reads config from ./, loads tokens from environment,
|
|
5
|
+
* creates the router and messaging adapters, and starts listening.
|
|
6
|
+
* On subsequent interactive runs, shows a settings menu before starting.
|
|
7
|
+
*/
|
|
8
|
+
import { type BackendFactory } from '../router.js';
|
|
9
|
+
export interface StartDeps {
|
|
10
|
+
/** Override the database path (for testing). */
|
|
11
|
+
dbPath?: string;
|
|
12
|
+
/** Override the env file path (for testing). */
|
|
13
|
+
envPath?: string;
|
|
14
|
+
/** Skip actually starting adapters (for testing). */
|
|
15
|
+
dryRun?: boolean;
|
|
16
|
+
}
|
|
17
|
+
/** Load .env.local file into process.env (simple key=value parser). */
|
|
18
|
+
export declare function loadEnvFile(envPath: string): Record<string, string>;
|
|
19
|
+
/** Create a backend factory that produces the right backend based on name. */
|
|
20
|
+
export declare function createBackendFactory(): BackendFactory;
|
|
21
|
+
/**
|
|
22
|
+
* Launch the bridge process.
|
|
23
|
+
*/
|
|
24
|
+
export declare function runStart(deps?: StartDeps): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* alaska-ai configure 鈥?Show the settings menu.
|
|
27
|
+
*/
|
|
28
|
+
export declare function runConfigure(): Promise<void>;
|