@somewhere-tech/cli 0.10.0 → 0.12.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 +3 -0
- package/dist/commands/auth.js +15 -7
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/deploy.js +25 -5
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/dev.js +70 -4
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/exec.js +109 -0
- package/dist/commands/exec.js.map +1 -0
- package/dist/commands/mcp.js +266 -63
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/pull.js +8 -6
- package/dist/commands/pull.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/build-errors.js +147 -0
- package/dist/lib/build-errors.js.map +1 -0
- package/dist/lib/client.js +48 -4
- package/dist/lib/client.js.map +1 -1
- package/dist/lib/config.js +34 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/local/envfile.js +40 -0
- package/dist/local/envfile.js.map +1 -0
- package/dist/local/loader.js +103 -0
- package/dist/local/loader.js.map +1 -0
- package/dist/local/router.js +114 -0
- package/dist/local/router.js.map +1 -0
- package/dist/local/runtime.js +268 -0
- package/dist/local/runtime.js.map +1 -0
- package/dist/local/server.js +169 -0
- package/dist/local/server.js.map +1 -0
- package/package.json +8 -4
- package/runtime/platform-context.mjs +3678 -0
- package/runtime/sw-init.mjs +237 -0
package/dist/commands/mcp.js
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
|
+
import { spawnSync } from 'node:child_process';
|
|
1
2
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
2
3
|
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
|
|
3
4
|
import { UnauthorizedError } from '@modelcontextprotocol/sdk/client/auth.js';
|
|
4
|
-
import { loadConfig } from '../lib/config.js';
|
|
5
|
+
import { CURSOR_MCP_PATH, hasCursorMcpConfig, hasGlobalMcpConfig, loadConfig, saveCursorMcpConfig, saveGlobalMcpConfig, } from '../lib/config.js';
|
|
6
|
+
import { ApiClient } from '../lib/client.js';
|
|
7
|
+
import { dim, error, info, success, teal } from '../lib/output.js';
|
|
5
8
|
const UPSTREAM_URL = 'https://mcp.somewhere.tech/mcp';
|
|
9
|
+
const INSTALL_HOSTS = ['codex', 'claude-code', 'cursor'];
|
|
10
|
+
const RESTART_HINT = 'MCP hosts load tools when a session starts. Open a NEW session (or restart the host), then look for tools named mcp__somewhere__*.';
|
|
6
11
|
// Emit a JSON-RPC error notification on stdout so MCP hosts surface a clear
|
|
7
12
|
// message instead of a generic crash. id=null because it's not a response to
|
|
8
13
|
// any specific request.
|
|
@@ -15,82 +20,280 @@ function emitFatalError(message) {
|
|
|
15
20
|
process.stdout.write(JSON.stringify(payload) + '\n');
|
|
16
21
|
}
|
|
17
22
|
export function registerMcp(program) {
|
|
18
|
-
program
|
|
23
|
+
const mcp = program
|
|
19
24
|
.command('mcp')
|
|
20
25
|
.description('Run somewhere.tech MCP server over stdio (proxies to mcp.somewhere.tech)')
|
|
26
|
+
.action(runStdioBridge);
|
|
27
|
+
// Hidden alias: docs/llms-full.md taught `somewhere mcp stdio` — keep it
|
|
28
|
+
// true rather than breaking copies already cached in agents and scrapes.
|
|
29
|
+
mcp
|
|
30
|
+
.command('stdio', { hidden: true })
|
|
31
|
+
.description('Alias of bare `somewhere mcp`')
|
|
32
|
+
.action(runStdioBridge);
|
|
33
|
+
mcp
|
|
34
|
+
.command('install <host>')
|
|
35
|
+
.description(`Configure an MCP host to use somewhere.tech (${INSTALL_HOSTS.join(', ')})`)
|
|
36
|
+
.action(runInstall);
|
|
37
|
+
mcp
|
|
38
|
+
.command('doctor')
|
|
39
|
+
.description('Check MCP setup: login, token validity, server reachability, host configs')
|
|
21
40
|
.action(async () => {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
41
|
+
await runDoctor(program.version() ?? 'unknown');
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
/* ─── stdio bridge (bare `somewhere mcp`) ─────────────────────────── */
|
|
45
|
+
async function runStdioBridge() {
|
|
46
|
+
const config = loadConfig();
|
|
47
|
+
if (!config?.token) {
|
|
48
|
+
emitFatalError('Not logged in. Run: somewhere login');
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
const httpTransport = new StreamableHTTPClientTransport(new URL(UPSTREAM_URL), {
|
|
52
|
+
requestInit: {
|
|
53
|
+
headers: { Authorization: `Bearer ${config.token}` },
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
const stdioTransport = new StdioServerTransport();
|
|
57
|
+
let shuttingDown = false;
|
|
58
|
+
const shutdown = async (reason) => {
|
|
59
|
+
if (shuttingDown)
|
|
60
|
+
return;
|
|
61
|
+
shuttingDown = true;
|
|
62
|
+
if (reason instanceof UnauthorizedError) {
|
|
63
|
+
emitFatalError('somewhere.tech rejected the API key. Run: somewhere login');
|
|
26
64
|
}
|
|
27
|
-
const httpTransport = new StreamableHTTPClientTransport(new URL(UPSTREAM_URL), {
|
|
28
|
-
requestInit: {
|
|
29
|
-
headers: { Authorization: `Bearer ${config.token}` },
|
|
30
|
-
},
|
|
31
|
-
});
|
|
32
|
-
const stdioTransport = new StdioServerTransport();
|
|
33
|
-
let shuttingDown = false;
|
|
34
|
-
const shutdown = async (reason) => {
|
|
35
|
-
if (shuttingDown)
|
|
36
|
-
return;
|
|
37
|
-
shuttingDown = true;
|
|
38
|
-
if (reason instanceof UnauthorizedError) {
|
|
39
|
-
emitFatalError('somewhere.tech rejected the API key. Run: somewhere login');
|
|
40
|
-
}
|
|
41
|
-
try {
|
|
42
|
-
await stdioTransport.close();
|
|
43
|
-
}
|
|
44
|
-
catch { }
|
|
45
|
-
try {
|
|
46
|
-
await httpTransport.close();
|
|
47
|
-
}
|
|
48
|
-
catch { }
|
|
49
|
-
};
|
|
50
|
-
stdioTransport.onmessage = (msg) => {
|
|
51
|
-
httpTransport.send(msg).catch((err) => {
|
|
52
|
-
if (err instanceof UnauthorizedError) {
|
|
53
|
-
void shutdown(err);
|
|
54
|
-
process.exit(1);
|
|
55
|
-
}
|
|
56
|
-
process.stderr.write(`[somewhere mcp] upstream send failed: ${String(err)}\n`);
|
|
57
|
-
});
|
|
58
|
-
};
|
|
59
|
-
httpTransport.onmessage = (msg) => {
|
|
60
|
-
stdioTransport.send(msg).catch((err) => {
|
|
61
|
-
process.stderr.write(`[somewhere mcp] stdio send failed: ${String(err)}\n`);
|
|
62
|
-
});
|
|
63
|
-
};
|
|
64
|
-
stdioTransport.onclose = () => { void shutdown(); };
|
|
65
|
-
httpTransport.onclose = () => { void shutdown(); };
|
|
66
|
-
stdioTransport.onerror = (err) => {
|
|
67
|
-
process.stderr.write(`[somewhere mcp] stdio error: ${String(err)}\n`);
|
|
68
|
-
};
|
|
69
|
-
httpTransport.onerror = (err) => {
|
|
70
|
-
if (err instanceof UnauthorizedError) {
|
|
71
|
-
void shutdown(err);
|
|
72
|
-
process.exit(1);
|
|
73
|
-
}
|
|
74
|
-
process.stderr.write(`[somewhere mcp] upstream error: ${String(err)}\n`);
|
|
75
|
-
};
|
|
76
65
|
try {
|
|
77
|
-
await
|
|
66
|
+
await stdioTransport.close();
|
|
78
67
|
}
|
|
79
|
-
catch
|
|
68
|
+
catch { }
|
|
69
|
+
try {
|
|
70
|
+
await httpTransport.close();
|
|
71
|
+
}
|
|
72
|
+
catch { }
|
|
73
|
+
};
|
|
74
|
+
stdioTransport.onmessage = (msg) => {
|
|
75
|
+
httpTransport.send(msg).catch((err) => {
|
|
80
76
|
if (err instanceof UnauthorizedError) {
|
|
81
|
-
|
|
77
|
+
void shutdown(err);
|
|
82
78
|
process.exit(1);
|
|
83
79
|
}
|
|
84
|
-
|
|
80
|
+
process.stderr.write(`[somewhere mcp] upstream send failed: ${String(err)}\n`);
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
httpTransport.onmessage = (msg) => {
|
|
84
|
+
stdioTransport.send(msg).catch((err) => {
|
|
85
|
+
process.stderr.write(`[somewhere mcp] stdio send failed: ${String(err)}\n`);
|
|
86
|
+
});
|
|
87
|
+
};
|
|
88
|
+
stdioTransport.onclose = () => { void shutdown(); };
|
|
89
|
+
httpTransport.onclose = () => { void shutdown(); };
|
|
90
|
+
stdioTransport.onerror = (err) => {
|
|
91
|
+
process.stderr.write(`[somewhere mcp] stdio error: ${String(err)}\n`);
|
|
92
|
+
};
|
|
93
|
+
httpTransport.onerror = (err) => {
|
|
94
|
+
if (err instanceof UnauthorizedError) {
|
|
95
|
+
void shutdown(err);
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
98
|
+
process.stderr.write(`[somewhere mcp] upstream error: ${String(err)}\n`);
|
|
99
|
+
};
|
|
100
|
+
try {
|
|
101
|
+
await httpTransport.start();
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
if (err instanceof UnauthorizedError) {
|
|
105
|
+
emitFatalError('somewhere.tech rejected the API key. Run: somewhere login');
|
|
85
106
|
process.exit(1);
|
|
86
107
|
}
|
|
108
|
+
emitFatalError(`Failed to connect to mcp.somewhere.tech: ${String(err)}`);
|
|
109
|
+
process.exit(1);
|
|
110
|
+
}
|
|
111
|
+
try {
|
|
112
|
+
await stdioTransport.start();
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
emitFatalError(`Failed to start stdio transport: ${String(err)}`);
|
|
116
|
+
process.exit(1);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/* ─── somewhere mcp install <host> ────────────────────────────────── */
|
|
120
|
+
function runInstall(host) {
|
|
121
|
+
if (!INSTALL_HOSTS.includes(host)) {
|
|
122
|
+
error(`Unknown host "${host}". Supported: ${INSTALL_HOSTS.join(', ')}`);
|
|
123
|
+
process.exit(1);
|
|
124
|
+
}
|
|
125
|
+
const loggedIn = !!loadConfig()?.token;
|
|
126
|
+
switch (host) {
|
|
127
|
+
case 'codex':
|
|
128
|
+
installCodex(loggedIn);
|
|
129
|
+
break;
|
|
130
|
+
case 'claude-code':
|
|
131
|
+
installClaudeCode();
|
|
132
|
+
break;
|
|
133
|
+
case 'cursor':
|
|
134
|
+
installCursor(loggedIn);
|
|
135
|
+
break;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/** Codex owns its own config format, so we drive its CLI instead of writing
|
|
139
|
+
* the file ourselves. The entry uses the stdio bridge so auth rides the
|
|
140
|
+
* CLI login rather than a token pasted into Codex config. */
|
|
141
|
+
function installCodex(loggedIn) {
|
|
142
|
+
const probe = spawnSync('codex', ['--version'], { stdio: 'ignore' });
|
|
143
|
+
if (probe.error || probe.status !== 0) {
|
|
144
|
+
error('Codex CLI not found on PATH.');
|
|
145
|
+
info('Install Codex first, then either re-run this command or add the entry manually:');
|
|
146
|
+
info(dim(' codex mcp add somewhere -- somewhere mcp'));
|
|
147
|
+
process.exit(1);
|
|
148
|
+
}
|
|
149
|
+
const existing = spawnSync('codex', ['mcp', 'get', 'somewhere'], { stdio: 'ignore' });
|
|
150
|
+
if (existing.status === 0) {
|
|
151
|
+
success('Codex already has a "somewhere" MCP server configured.');
|
|
152
|
+
info(dim('To reconfigure: codex mcp remove somewhere, then re-run this command.'));
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
const add = spawnSync('codex', ['mcp', 'add', 'somewhere', '--', 'somewhere', 'mcp'], { stdio: 'inherit' });
|
|
156
|
+
if (add.status !== 0) {
|
|
157
|
+
error('`codex mcp add` failed (see output above).');
|
|
158
|
+
process.exit(1);
|
|
159
|
+
}
|
|
160
|
+
success(`Codex configured: ${teal('somewhere')} → somewhere mcp (stdio bridge)`);
|
|
161
|
+
}
|
|
162
|
+
if (!loggedIn)
|
|
163
|
+
info(`Not logged in yet — run: ${teal('somewhere login')}`);
|
|
164
|
+
printVerify('codex');
|
|
165
|
+
}
|
|
166
|
+
function installClaudeCode() {
|
|
167
|
+
const config = loadConfig();
|
|
168
|
+
if (!config?.token) {
|
|
169
|
+
error('Not logged in. Run: somewhere login');
|
|
170
|
+
info(dim('`somewhere login` configures Claude Code automatically — no separate install step needed.'));
|
|
171
|
+
process.exit(1);
|
|
172
|
+
}
|
|
173
|
+
saveGlobalMcpConfig(config.token);
|
|
174
|
+
success(`Claude Code configured (~/.claude.json): ${teal('somewhere')} → ${UPSTREAM_URL}`);
|
|
175
|
+
printVerify('claude-code');
|
|
176
|
+
}
|
|
177
|
+
function installCursor(loggedIn) {
|
|
178
|
+
saveCursorMcpConfig();
|
|
179
|
+
success(`Cursor configured (${CURSOR_MCP_PATH}): ${teal('somewhere')} → somewhere mcp (stdio bridge)`);
|
|
180
|
+
if (!loggedIn)
|
|
181
|
+
info(`Not logged in yet — run: ${teal('somewhere login')}`);
|
|
182
|
+
printVerify('cursor');
|
|
183
|
+
}
|
|
184
|
+
function printVerify(host) {
|
|
185
|
+
info('');
|
|
186
|
+
switch (host) {
|
|
187
|
+
case 'codex':
|
|
188
|
+
info(`Verify: ${teal('codex mcp list')} should show "somewhere".`);
|
|
189
|
+
break;
|
|
190
|
+
case 'claude-code':
|
|
191
|
+
info(`Verify: run ${teal('/mcp')} inside Claude Code — "somewhere" should be listed.`);
|
|
192
|
+
break;
|
|
193
|
+
case 'cursor':
|
|
194
|
+
info('Verify: Cursor Settings → MCP should list "somewhere".');
|
|
195
|
+
break;
|
|
196
|
+
}
|
|
197
|
+
info(RESTART_HINT);
|
|
198
|
+
info(dim('Full setup check: somewhere mcp doctor'));
|
|
199
|
+
}
|
|
200
|
+
/* ─── somewhere mcp doctor ────────────────────────────────────────── */
|
|
201
|
+
async function runDoctor(version) {
|
|
202
|
+
let failures = 0;
|
|
203
|
+
const fail = (msg, fix) => {
|
|
204
|
+
failures++;
|
|
205
|
+
error(msg);
|
|
206
|
+
if (fix)
|
|
207
|
+
info(dim(`fix: ${fix}`));
|
|
208
|
+
};
|
|
209
|
+
info(`somewhere CLI ${version}`);
|
|
210
|
+
info('');
|
|
211
|
+
// 1. Login config present
|
|
212
|
+
const config = loadConfig();
|
|
213
|
+
if (config?.token) {
|
|
214
|
+
success(`Logged in as ${teal(config.user.email || '(unknown)')} (~/.somewhere/config.json)`);
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
fail('Not logged in — no token in ~/.somewhere/config.json.', 'somewhere login');
|
|
218
|
+
}
|
|
219
|
+
// 2. Token actually valid against the API. /auth/whoami is the endpoint
|
|
220
|
+
// that accepts smt_ keys (verified 2026-06-09: /auth/platform-me rejects
|
|
221
|
+
// a key that whoami and the MCP server both accept).
|
|
222
|
+
if (config?.token) {
|
|
87
223
|
try {
|
|
88
|
-
await
|
|
224
|
+
const me = await new ApiClient(config.token).call('GET', '/auth/whoami');
|
|
225
|
+
success(`Token valid (${me.user?.email ?? config.user.email ?? 'unknown account'})`);
|
|
89
226
|
}
|
|
90
227
|
catch (err) {
|
|
91
|
-
|
|
92
|
-
process.exit(1);
|
|
228
|
+
fail(`Token rejected by api.somewhere.tech: ${err instanceof Error ? err.message : String(err)}`, 'somewhere login');
|
|
93
229
|
}
|
|
94
|
-
}
|
|
230
|
+
}
|
|
231
|
+
// 3. MCP server reachability — a real initialize round-trip, not a ping.
|
|
232
|
+
try {
|
|
233
|
+
const headers = {
|
|
234
|
+
'Content-Type': 'application/json',
|
|
235
|
+
Accept: 'application/json, text/event-stream',
|
|
236
|
+
};
|
|
237
|
+
if (config?.token)
|
|
238
|
+
headers.Authorization = `Bearer ${config.token}`;
|
|
239
|
+
const res = await fetch(UPSTREAM_URL, {
|
|
240
|
+
method: 'POST',
|
|
241
|
+
headers,
|
|
242
|
+
body: JSON.stringify({
|
|
243
|
+
jsonrpc: '2.0',
|
|
244
|
+
id: 1,
|
|
245
|
+
method: 'initialize',
|
|
246
|
+
params: {
|
|
247
|
+
protocolVersion: '2025-03-26',
|
|
248
|
+
capabilities: {},
|
|
249
|
+
clientInfo: { name: 'somewhere-mcp-doctor', version },
|
|
250
|
+
},
|
|
251
|
+
}),
|
|
252
|
+
signal: AbortSignal.timeout(10_000),
|
|
253
|
+
});
|
|
254
|
+
if (res.ok) {
|
|
255
|
+
success('MCP server reachable — initialize accepted (mcp.somewhere.tech)');
|
|
256
|
+
}
|
|
257
|
+
else if (res.status === 401 && !config?.token) {
|
|
258
|
+
success('MCP server reachable (responded 401 — expected without a login)');
|
|
259
|
+
}
|
|
260
|
+
else if (res.status === 401) {
|
|
261
|
+
fail('MCP server reachable but it rejected the token.', 'somewhere login');
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
fail(`MCP server responded ${res.status} to initialize.`);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
catch (err) {
|
|
268
|
+
fail(`Cannot reach ${UPSTREAM_URL}: ${err instanceof Error ? err.message : String(err)}`);
|
|
269
|
+
}
|
|
270
|
+
// 4. Host configs — informational, not failures: not everyone uses every host.
|
|
271
|
+
info('');
|
|
272
|
+
info('Host configs:');
|
|
273
|
+
if (hasGlobalMcpConfig()) {
|
|
274
|
+
success('Claude Code: "somewhere" entry in ~/.claude.json');
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
info(dim('Claude Code: not configured — somewhere mcp install claude-code (or just somewhere login)'));
|
|
278
|
+
}
|
|
279
|
+
const codexProbe = spawnSync('codex', ['--version'], { stdio: 'ignore' });
|
|
280
|
+
if (codexProbe.error || codexProbe.status !== 0) {
|
|
281
|
+
info(dim('Codex: CLI not found on PATH — skipped'));
|
|
282
|
+
}
|
|
283
|
+
else if (spawnSync('codex', ['mcp', 'get', 'somewhere'], { stdio: 'ignore' }).status === 0) {
|
|
284
|
+
success('Codex: "somewhere" MCP server configured');
|
|
285
|
+
}
|
|
286
|
+
else {
|
|
287
|
+
info(dim('Codex: not configured — somewhere mcp install codex'));
|
|
288
|
+
}
|
|
289
|
+
if (hasCursorMcpConfig()) {
|
|
290
|
+
success(`Cursor: "somewhere" entry in ${CURSOR_MCP_PATH}`);
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
info(dim('Cursor: not configured — somewhere mcp install cursor'));
|
|
294
|
+
}
|
|
295
|
+
info('');
|
|
296
|
+
info(RESTART_HINT);
|
|
297
|
+
process.exit(failures > 0 ? 1 : 0);
|
|
95
298
|
}
|
|
96
299
|
//# sourceMappingURL=mcp.js.map
|
package/dist/commands/mcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAE7E,OAAO,
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/pull.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
2
2
|
import { dirname, join, resolve } from 'node:path';
|
|
3
3
|
import ora from 'ora';
|
|
4
|
-
import { ApiClient } from '../lib/client.js';
|
|
4
|
+
import { ApiClient, CliApiError, LONG_CALL_TIMEOUT_MS } from '../lib/client.js';
|
|
5
5
|
import { getToken, loadProjectConfig } from '../lib/config.js';
|
|
6
6
|
import { dim, error, info, success, teal, warn } from '../lib/output.js';
|
|
7
7
|
export function registerPull(program) {
|
|
@@ -34,14 +34,16 @@ export function registerPull(program) {
|
|
|
34
34
|
const spinner = ora(`Fetching ${envSlot} source...`).start();
|
|
35
35
|
let body;
|
|
36
36
|
try {
|
|
37
|
-
body = await client.call('GET', '/deploy/source', undefined, {
|
|
38
|
-
project_id: projectId,
|
|
39
|
-
env: envSlot,
|
|
40
|
-
});
|
|
37
|
+
body = await client.call('GET', '/deploy/source', undefined, { project_id: projectId, env: envSlot }, { timeoutMs: LONG_CALL_TIMEOUT_MS });
|
|
41
38
|
}
|
|
42
39
|
catch (err) {
|
|
43
40
|
spinner.fail('Pull failed');
|
|
44
|
-
|
|
41
|
+
if (err instanceof CliApiError) {
|
|
42
|
+
error(`${err.message} ${dim(err.statusCode ? `[${err.code}, HTTP ${err.statusCode}]` : `[${err.code}]`)}`);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
error(err instanceof Error ? err.message : String(err));
|
|
46
|
+
}
|
|
45
47
|
process.exit(1);
|
|
46
48
|
}
|
|
47
49
|
spinner.stop();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -14,6 +14,7 @@ import { registerEnv } from './commands/env.js';
|
|
|
14
14
|
import { registerStatus } from './commands/status.js';
|
|
15
15
|
import { registerOpen } from './commands/open.js';
|
|
16
16
|
import { registerDev } from './commands/dev.js';
|
|
17
|
+
import { registerExec } from './commands/exec.js';
|
|
17
18
|
import { registerApi } from './commands/api.js';
|
|
18
19
|
import { registerMcp } from './commands/mcp.js';
|
|
19
20
|
const pkg = JSON.parse(readFileSync(join(dirname(fileURLToPath(import.meta.url)), '..', 'package.json'), 'utf8'));
|
|
@@ -33,6 +34,7 @@ registerEnv(program);
|
|
|
33
34
|
registerStatus(program);
|
|
34
35
|
registerOpen(program);
|
|
35
36
|
registerDev(program);
|
|
37
|
+
registerExec(program);
|
|
36
38
|
registerApi(program);
|
|
37
39
|
registerMcp(program);
|
|
38
40
|
program.parse();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CACnE,CAAC;AAEzB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;KAC1B,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,wBAAwB,CAAC;KACrC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAExB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,UAAU,CAAC,OAAO,CAAC,CAAC;AACpB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,WAAW,CAAC,OAAO,CAAC,CAAC;AAErB,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CACnE,CAAC;AAEzB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;KAC1B,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,wBAAwB,CAAC;KACrC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAExB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,UAAU,CAAC,OAAO,CAAC,CAAC;AACpB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,WAAW,CAAC,OAAO,CAAC,CAAC;AAErB,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rendering for the worker's structured BUILD_ERROR payload (tsk_de47d1d7).
|
|
3
|
+
*
|
|
4
|
+
* The /deploy and /deploy/patch routes answer compile failures with
|
|
5
|
+
* { error: 'BUILD_ERROR', message, data: { file, line, column, error,
|
|
6
|
+
* frame, errors: [...], build_log }, hint? }
|
|
7
|
+
*
|
|
8
|
+
* The CLI has the source files on disk, so the code frame is rebuilt locally
|
|
9
|
+
* (wider context + caret) instead of trusting the server's copy — and falls
|
|
10
|
+
* back to data.frame / the raw message when the local file doesn't match.
|
|
11
|
+
*/
|
|
12
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
13
|
+
import { isAbsolute, join } from 'node:path';
|
|
14
|
+
import { CliApiError } from './client.js';
|
|
15
|
+
import { bold, dim, error, info, red, teal, warn } from './output.js';
|
|
16
|
+
/** Pull file:line:col diagnostics out of esbuild-style bundle_error text. */
|
|
17
|
+
export function parseBundleErrorText(text) {
|
|
18
|
+
const out = [];
|
|
19
|
+
const re = /([^\s:]+(?:\/[^\s:]+)*):(\d+):(\d+): ERROR: ([^\n]+)/g;
|
|
20
|
+
let m;
|
|
21
|
+
while ((m = re.exec(text)) !== null) {
|
|
22
|
+
out.push({ file: m[1], line: Number(m[2]), column: Number(m[3]) + 1, message: m[4].trim() });
|
|
23
|
+
}
|
|
24
|
+
return out;
|
|
25
|
+
}
|
|
26
|
+
const FRAME_CONTEXT = 2;
|
|
27
|
+
/** Build a code frame (line ±2, caret under the column) from local source. */
|
|
28
|
+
export function localCodeFrame(source, line, column) {
|
|
29
|
+
const lines = source.split('\n');
|
|
30
|
+
if (line < 1 || line > lines.length)
|
|
31
|
+
return '';
|
|
32
|
+
const start = Math.max(1, line - FRAME_CONTEXT);
|
|
33
|
+
const end = Math.min(lines.length, line + FRAME_CONTEXT);
|
|
34
|
+
const width = String(end).length;
|
|
35
|
+
const out = [];
|
|
36
|
+
for (let n = start; n <= end; n++) {
|
|
37
|
+
const marker = n === line ? red('>') : ' ';
|
|
38
|
+
const num = String(n).padStart(width);
|
|
39
|
+
out.push(`${marker} ${dim(`${num} |`)} ${lines[n - 1]}`);
|
|
40
|
+
if (n === line && column !== undefined && column >= 1) {
|
|
41
|
+
out.push(` ${dim(`${' '.repeat(width)} |`)} ${' '.repeat(column - 1)}${red('^')}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return out.join('\n');
|
|
45
|
+
}
|
|
46
|
+
function frameFor(detail, baseDir, serverFrame) {
|
|
47
|
+
if (detail.file && detail.line !== undefined) {
|
|
48
|
+
const abs = isAbsolute(detail.file) ? detail.file : join(baseDir, detail.file);
|
|
49
|
+
if (existsSync(abs)) {
|
|
50
|
+
try {
|
|
51
|
+
const frame = localCodeFrame(readFileSync(abs, 'utf-8'), detail.line, detail.column);
|
|
52
|
+
if (frame)
|
|
53
|
+
return frame;
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
// unreadable — fall through to the server's frame
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return serverFrame ?? '';
|
|
61
|
+
}
|
|
62
|
+
function location(detail) {
|
|
63
|
+
if (!detail.file)
|
|
64
|
+
return detail.message ?? 'unknown error';
|
|
65
|
+
const pos = detail.line !== undefined
|
|
66
|
+
? `:${detail.line}${detail.column !== undefined ? `:${detail.column}` : ''}`
|
|
67
|
+
: '';
|
|
68
|
+
return `${detail.file}${pos}${detail.message ? ` — ${detail.message}` : ''}`;
|
|
69
|
+
}
|
|
70
|
+
/** True when the error carries a structured build payload this module renders:
|
|
71
|
+
* BUILD_ERROR's data.{file,line,errors}, or any error (DEPLOY_BLANK_PAGE)
|
|
72
|
+
* whose data.bundle_error names the compile failure. */
|
|
73
|
+
export function isBuildError(err) {
|
|
74
|
+
if (!(err instanceof CliApiError) || !err.data || typeof err.data !== 'object')
|
|
75
|
+
return false;
|
|
76
|
+
if (err.code === 'BUILD_ERROR')
|
|
77
|
+
return true;
|
|
78
|
+
return typeof err.data.bundle_error === 'string';
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Print a structured build failure: file:line heading, local code frame,
|
|
82
|
+
* remaining errors, missing assets, hint. Returns true if it rendered
|
|
83
|
+
* (caller falls back to generic output otherwise).
|
|
84
|
+
*/
|
|
85
|
+
export function renderBuildError(err, baseDir) {
|
|
86
|
+
const data = (err.data ?? {});
|
|
87
|
+
let details = Array.isArray(data.errors) && data.errors.length > 0
|
|
88
|
+
? data.errors
|
|
89
|
+
: data.file !== undefined || data.error !== undefined
|
|
90
|
+
? [{ file: data.file, line: data.line, column: data.column, message: data.error }]
|
|
91
|
+
: [];
|
|
92
|
+
if (details.length === 0 && typeof data.bundle_error === 'string') {
|
|
93
|
+
details = parseBundleErrorText(data.bundle_error);
|
|
94
|
+
}
|
|
95
|
+
if (details.length === 0 && !data.missing_assets?.length)
|
|
96
|
+
return false;
|
|
97
|
+
const first = details[0];
|
|
98
|
+
if (first) {
|
|
99
|
+
error(`${bold('Build failed')} — ${teal(location(first))}`);
|
|
100
|
+
const frame = frameFor(first, baseDir, data.frame);
|
|
101
|
+
if (frame) {
|
|
102
|
+
console.log('');
|
|
103
|
+
console.log(frame);
|
|
104
|
+
console.log('');
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
for (const extra of details.slice(1, 6)) {
|
|
108
|
+
error(location(extra));
|
|
109
|
+
const frame = frameFor(extra, baseDir);
|
|
110
|
+
if (frame) {
|
|
111
|
+
console.log('');
|
|
112
|
+
console.log(frame);
|
|
113
|
+
console.log('');
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if (details.length > 6) {
|
|
117
|
+
info(dim(`…and ${details.length - 6} more build error(s)`));
|
|
118
|
+
}
|
|
119
|
+
if (data.missing_assets?.length) {
|
|
120
|
+
warn(`Missing assets referenced by the build: ${data.missing_assets.slice(0, 10).join(', ')}${data.missing_assets.length > 10 ? ', …' : ''}`);
|
|
121
|
+
}
|
|
122
|
+
if (err.hint)
|
|
123
|
+
info(dim(err.hint));
|
|
124
|
+
if (err.code === 'BUILD_ERROR') {
|
|
125
|
+
info(dim(`Nothing from this deploy is live. Fix the error and redeploy. [BUILD_ERROR, HTTP ${err.statusCode}]`));
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
// Non-BUILD_ERROR codes (DEPLOY_BLANK_PAGE) carry context the frame
|
|
129
|
+
// doesn't repeat — rollback state, false-alarm guidance. Keep it.
|
|
130
|
+
info(dim(`${err.message} [${err.code}, HTTP ${err.statusCode}]`));
|
|
131
|
+
}
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
134
|
+
/** Yellow single-line summary for watch-mode (somewhere dev) reuse. */
|
|
135
|
+
export function buildErrorSummary(err) {
|
|
136
|
+
const data = (err.data ?? {});
|
|
137
|
+
let first = Array.isArray(data.errors) && data.errors.length > 0
|
|
138
|
+
? data.errors[0]
|
|
139
|
+
: data.file !== undefined || data.error !== undefined
|
|
140
|
+
? { file: data.file, line: data.line, column: data.column, message: data.error }
|
|
141
|
+
: undefined;
|
|
142
|
+
if (!first && typeof data.bundle_error === 'string') {
|
|
143
|
+
first = parseBundleErrorText(data.bundle_error)[0];
|
|
144
|
+
}
|
|
145
|
+
return first ? location(first) : err.message;
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=build-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-errors.js","sourceRoot":"","sources":["../../src/lib/build-errors.ts"],"names":[],"mappings":"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"}
|