@sand.ai/vibable-cli 0.1.0 → 0.3.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.
@@ -0,0 +1,486 @@
1
+ import { execFile } from "node:child_process";
2
+ import { createHash, randomBytes } from "node:crypto";
3
+ import { mkdtemp, mkdir, readFile, rm, writeFile } from "node:fs/promises";
4
+ import { homedir, tmpdir } from "node:os";
5
+ import path from "node:path";
6
+ import { promisify } from "node:util";
7
+ import { extractServerSentEvents } from "./server-sent-events.js";
8
+ import { isSyncDaemonRunning, startSyncDaemon } from "./sync.js";
9
+ const execFileAsync = promisify(execFile);
10
+ export async function loginCli(input) {
11
+ const secret = randomBytes(32).toString("base64url");
12
+ const secretHash = createHash("sha256").update(secret).digest("hex");
13
+ const authorization = await postJson({
14
+ apiBaseUrl: input.apiBaseUrl,
15
+ path: "/api/auth/cli/requests",
16
+ body: { secretHash },
17
+ });
18
+ process.stdout.write(`Authorize Vibable CLI in your browser:\n${authorization.authorizeUrl}\n`);
19
+ await openBrowser(authorization.authorizeUrl);
20
+ const response = await waitForCliAuthorization({
21
+ apiBaseUrl: input.apiBaseUrl,
22
+ requestId: authorization.requestId,
23
+ secret,
24
+ expiresAt: authorization.expiresAt,
25
+ });
26
+ const config = { apiBaseUrl: trimSlash(input.apiBaseUrl), ...response };
27
+ const filename = authConfigPath();
28
+ await mkdir(path.dirname(filename), { recursive: true });
29
+ await writeFile(filename, `${JSON.stringify(config, null, 2)}\n`, { mode: 0o600 });
30
+ process.stdout.write("Authenticated with Vibable.\n");
31
+ }
32
+ async function waitForCliAuthorization(input) {
33
+ const deadline = Date.parse(input.expiresAt);
34
+ while (Date.now() < deadline) {
35
+ const response = await postJson({
36
+ apiBaseUrl: input.apiBaseUrl,
37
+ path: `/api/auth/cli/requests/${encodeURIComponent(input.requestId)}/token`,
38
+ body: { secret: input.secret },
39
+ });
40
+ if (response.status === "approved")
41
+ return response;
42
+ await new Promise((resolve) => setTimeout(resolve, 1_000));
43
+ }
44
+ throw new Error("Vibable CLI authorization expired. Run vibable auth login again.");
45
+ }
46
+ async function openBrowser(url) {
47
+ const command = process.platform === "darwin"
48
+ ? { file: "open", args: [url] }
49
+ : process.platform === "win32"
50
+ ? { file: "cmd", args: ["/c", "start", "", url] }
51
+ : { file: "xdg-open", args: [url] };
52
+ await execFileAsync(command.file, command.args).catch(() => undefined);
53
+ }
54
+ export async function initializeHosting(input) {
55
+ const root = path.resolve(input.directory);
56
+ const configFile = path.resolve(root, input.configPath);
57
+ const relativeConfigPath = path.relative(root, configFile);
58
+ if (relativeConfigPath.startsWith("..") || path.isAbsolute(relativeConfigPath)) {
59
+ throw new Error("The Vibable config must be inside the hosted project directory.");
60
+ }
61
+ const configSource = await readFile(configFile, "utf8");
62
+ const auth = await readAuthConfig();
63
+ const apiBaseUrl = trimSlash(input.apiBaseUrl ?? auth.apiBaseUrl);
64
+ const hosting = await postJson({
65
+ apiBaseUrl,
66
+ token: auth.token,
67
+ path: "/api/cli/hostings",
68
+ body: { configSource },
69
+ });
70
+ await writeHostingBinding(root, {
71
+ apiBaseUrl,
72
+ projectSlug: hosting.projectSlug,
73
+ featureSlug: hosting.featureSlug,
74
+ featureId: hosting.featureId,
75
+ });
76
+ if (hosting.action === "upload") {
77
+ if (!hosting.gitRemote) {
78
+ throw new Error("Vibable did not return a Git upload grant.");
79
+ }
80
+ const commitSha = await pushInitialSnapshot({
81
+ root,
82
+ hosting: {
83
+ ...hosting,
84
+ gitRemote: {
85
+ ...hosting.gitRemote,
86
+ remoteUrl: `${apiBaseUrl}/api/cli/git/${encodeURIComponent(hosting.featureId)}`,
87
+ },
88
+ },
89
+ configPath: relativeConfigPath,
90
+ });
91
+ await postJson({
92
+ apiBaseUrl,
93
+ token: auth.token,
94
+ path: `/api/cli/hostings/${encodeURIComponent(hosting.featureId)}/launch`,
95
+ body: { commitSha },
96
+ });
97
+ process.stdout.write(`Uploaded ${hosting.projectSlug}/${hosting.featureSlug} at ${commitSha.slice(0, 12)}.\n`);
98
+ }
99
+ else {
100
+ process.stdout.write(`Resuming ${hosting.projectSlug}/${hosting.featureSlug}.\n`);
101
+ }
102
+ if (hosting.action !== "connect") {
103
+ process.stdout.write("Vibable is creating the Feature Pod.\n");
104
+ }
105
+ const feature = await waitForFeatureReady({
106
+ apiBaseUrl,
107
+ token: auth.token,
108
+ featureId: hosting.featureId,
109
+ });
110
+ await enterRemoteDev({
111
+ apiBaseUrl,
112
+ authToken: auth.token,
113
+ featureSlug: hosting.featureSlug,
114
+ root,
115
+ });
116
+ process.stdout.write(`Service URL: ${feature.previewUrl ?? hosting.featureSlug}\n`);
117
+ await startSyncDaemon(root);
118
+ }
119
+ export async function startHostingSync(cwd = process.cwd()) {
120
+ if (await isSyncDaemonRunning(cwd)) {
121
+ await startSyncDaemon(cwd);
122
+ return;
123
+ }
124
+ const binding = await readHostingBinding(cwd);
125
+ const auth = await readAuthConfig();
126
+ if (trimSlash(auth.apiBaseUrl) !== trimSlash(binding.apiBaseUrl)) {
127
+ throw new Error(`Run vibable auth login --api ${binding.apiBaseUrl} first.`);
128
+ }
129
+ await enterRemoteDev({
130
+ apiBaseUrl: binding.apiBaseUrl,
131
+ authToken: auth.token,
132
+ featureSlug: binding.featureSlug,
133
+ root: binding.root,
134
+ });
135
+ await startSyncDaemon(binding.root);
136
+ }
137
+ export async function showAgentGuide(input) {
138
+ const baseUrl = trimSlash(input.apiBaseUrl);
139
+ if (!input.skill) {
140
+ const response = await fetch(`${baseUrl}/api/agent-skills`, {
141
+ headers: { accept: "application/json" },
142
+ });
143
+ if (!response.ok) {
144
+ throw new Error(await readResponseError(response));
145
+ }
146
+ const catalog = (await response.json());
147
+ process.stdout.write("# Vibable Agent Skills\n\n");
148
+ for (const skill of catalog.skills) {
149
+ process.stdout.write(`- ${skill.name}: ${baseUrl}${skill.url}\n`);
150
+ }
151
+ return;
152
+ }
153
+ const response = await fetch(`${baseUrl}/api/agent-skills/${encodeURIComponent(input.skill)}/SKILL.md`, {
154
+ headers: { accept: "text/markdown,text/plain" },
155
+ });
156
+ if (!response.ok) {
157
+ throw new Error(await readResponseError(response));
158
+ }
159
+ process.stdout.write(await response.text());
160
+ process.stdout.write("\n");
161
+ }
162
+ async function enterRemoteDev(input) {
163
+ const remoteDev = await postJson({
164
+ apiBaseUrl: input.apiBaseUrl,
165
+ token: input.authToken,
166
+ path: `/api/workspace/features/${encodeURIComponent(input.featureSlug)}/remote-dev/enter`,
167
+ body: {},
168
+ });
169
+ const localConfigDirectory = path.join(input.root, ".vibable");
170
+ await mkdir(localConfigDirectory, { recursive: true });
171
+ await writeFile(path.join(localConfigDirectory, "config.json"), `${JSON.stringify({
172
+ apiBaseUrl: input.apiBaseUrl,
173
+ sessionId: remoteDev.session.id,
174
+ token: remoteDev.token,
175
+ }, null, 2)}\n`, { mode: 0o600 });
176
+ }
177
+ export async function applyHostingConfig(input) {
178
+ const binding = await readHostingBinding(input.cwd ?? process.cwd());
179
+ const auth = await readAuthConfig();
180
+ if (trimSlash(auth.apiBaseUrl) !== trimSlash(binding.apiBaseUrl)) {
181
+ throw new Error(`Run vibable auth login --api ${binding.apiBaseUrl} first.`);
182
+ }
183
+ const configSource = await readFile(path.resolve(binding.root, input.configPath), "utf8");
184
+ await postJson({
185
+ apiBaseUrl: binding.apiBaseUrl,
186
+ token: auth.token,
187
+ path: `/api/cli/hostings/${encodeURIComponent(binding.featureId)}/config`,
188
+ body: { configSource },
189
+ });
190
+ await postJson({
191
+ apiBaseUrl: binding.apiBaseUrl,
192
+ token: auth.token,
193
+ path: `/api/workspace/features/${encodeURIComponent(binding.featureSlug)}/runtime/rebuild`,
194
+ body: {},
195
+ });
196
+ process.stdout.write("Runtime configuration applied. Vibable is rebuilding the Feature Pod.\n");
197
+ const feature = await waitForFeatureReady({
198
+ apiBaseUrl: binding.apiBaseUrl,
199
+ token: auth.token,
200
+ featureId: binding.featureId,
201
+ });
202
+ process.stdout.write(`Service URL: ${feature.previewUrl ?? binding.featureSlug}\n`);
203
+ }
204
+ export async function showHostingStatus(cwd = process.cwd()) {
205
+ const binding = await readHostingBinding(cwd);
206
+ const auth = await readAuthConfig();
207
+ if (trimSlash(auth.apiBaseUrl) !== trimSlash(binding.apiBaseUrl)) {
208
+ throw new Error(`Run vibable auth login --api ${binding.apiBaseUrl} first.`);
209
+ }
210
+ const response = await getJson({
211
+ apiBaseUrl: binding.apiBaseUrl,
212
+ token: auth.token,
213
+ path: "/api/workspace/features",
214
+ });
215
+ const feature = response.features.find((candidate) => candidate.id === binding.featureId);
216
+ if (!feature)
217
+ throw new Error("Hosted feature no longer exists.");
218
+ process.stdout.write(`${JSON.stringify({
219
+ project: binding.projectSlug,
220
+ feature: binding.featureSlug,
221
+ status: feature.status,
222
+ runtimePhase: feature.runtimePhase,
223
+ previewUrl: feature.previewUrl,
224
+ }, null, 2)}\n`);
225
+ }
226
+ export async function showHostingLogs(input) {
227
+ const binding = await readHostingBinding(input.cwd ?? process.cwd());
228
+ const auth = await readAuthConfig();
229
+ if (trimSlash(auth.apiBaseUrl) !== trimSlash(binding.apiBaseUrl)) {
230
+ throw new Error(`Run vibable auth login --api ${binding.apiBaseUrl} first.`);
231
+ }
232
+ const controller = new AbortController();
233
+ const stop = () => controller.abort();
234
+ process.once("SIGINT", stop);
235
+ process.once("SIGTERM", stop);
236
+ try {
237
+ const response = await fetch(`${trimSlash(binding.apiBaseUrl)}/api/workspace/features/${encodeURIComponent(binding.featureSlug)}/events`, {
238
+ headers: {
239
+ accept: "text/event-stream",
240
+ authorization: `Bearer ${auth.token}`,
241
+ },
242
+ signal: controller.signal,
243
+ });
244
+ if (!response.ok) {
245
+ throw new Error(await readResponseError(response));
246
+ }
247
+ if (!response.body) {
248
+ throw new Error("Vibable did not return a log stream.");
249
+ }
250
+ const reader = response.body.getReader();
251
+ const decoder = new TextDecoder();
252
+ let remainder = "";
253
+ while (true) {
254
+ const chunk = await reader.read();
255
+ if (chunk.done) {
256
+ if (input.follow && !controller.signal.aborted) {
257
+ throw new Error("Vibable log stream ended unexpectedly.");
258
+ }
259
+ return;
260
+ }
261
+ const parsed = extractServerSentEvents(remainder + decoder.decode(chunk.value, { stream: true }));
262
+ remainder = parsed.remainder;
263
+ for (const event of parsed.events) {
264
+ if (event.event === "status") {
265
+ const status = parseFeatureEventStatus(event.data);
266
+ process.stdout.write(`[status] ${status.status} / ${status.runtimePhase}\n`);
267
+ }
268
+ else if (event.event === "logs") {
269
+ for (const log of parseFeatureLogs(event.data)) {
270
+ process.stdout.write(formatFeatureLog(log));
271
+ }
272
+ }
273
+ else if (event.event === "event-error") {
274
+ throw new Error(parseEventError(event.data));
275
+ }
276
+ else if (event.event === "snapshot-complete" && !input.follow) {
277
+ await reader.cancel();
278
+ return;
279
+ }
280
+ }
281
+ }
282
+ }
283
+ catch (error) {
284
+ if (controller.signal.aborted && isAbortError(error))
285
+ return;
286
+ throw error;
287
+ }
288
+ finally {
289
+ process.off("SIGINT", stop);
290
+ process.off("SIGTERM", stop);
291
+ }
292
+ }
293
+ function parseFeatureEventStatus(data) {
294
+ const value = JSON.parse(data);
295
+ if (!value.status || !value.runtimePhase) {
296
+ throw new Error("Vibable returned an invalid feature status event.");
297
+ }
298
+ return { status: value.status, runtimePhase: value.runtimePhase };
299
+ }
300
+ function parseFeatureLogs(data) {
301
+ const value = JSON.parse(data);
302
+ if (!Array.isArray(value.logs)) {
303
+ throw new Error("Vibable returned an invalid log event.");
304
+ }
305
+ return value.logs.filter(isFeatureLogEntry);
306
+ }
307
+ function isFeatureLogEntry(value) {
308
+ return Boolean(value &&
309
+ typeof value === "object" &&
310
+ "level" in value &&
311
+ (value.level === "info" || value.level === "warn" || value.level === "error") &&
312
+ "message" in value &&
313
+ typeof value.message === "string" &&
314
+ "createdAt" in value &&
315
+ typeof value.createdAt === "string" &&
316
+ (!("source" in value) ||
317
+ value.source === undefined ||
318
+ value.source === "service" ||
319
+ value.source === "agent" ||
320
+ value.source === "runtime"));
321
+ }
322
+ function formatFeatureLog(log) {
323
+ const level = log.level.toUpperCase().padEnd(5);
324
+ return `${log.createdAt} ${level} ${log.source ?? "service"} ${log.message}\n`;
325
+ }
326
+ function parseEventError(data) {
327
+ const value = JSON.parse(data);
328
+ return typeof value.message === "string" ? value.message : "Vibable log stream failed.";
329
+ }
330
+ async function readResponseError(response) {
331
+ const value = await response.json().catch(() => null);
332
+ return typeof value?.message === "string"
333
+ ? value.message
334
+ : `Vibable request failed (${response.status}).`;
335
+ }
336
+ function isAbortError(error) {
337
+ return error instanceof Error && error.name === "AbortError";
338
+ }
339
+ async function readHostingBinding(cwd) {
340
+ let directory = path.resolve(cwd);
341
+ while (true) {
342
+ try {
343
+ const parsed = JSON.parse(await readFile(path.join(directory, ".vibable", "hosting.json"), "utf8"));
344
+ if (parsed.apiBaseUrl &&
345
+ parsed.projectSlug &&
346
+ parsed.featureSlug &&
347
+ parsed.featureId) {
348
+ return { ...parsed, root: directory };
349
+ }
350
+ throw new Error("Invalid .vibable/hosting.json");
351
+ }
352
+ catch (error) {
353
+ if (!isMissingFileError(error))
354
+ throw error;
355
+ }
356
+ const parent = path.dirname(directory);
357
+ if (parent === directory) {
358
+ throw new Error("No .vibable/hosting.json found from current directory or parents.");
359
+ }
360
+ directory = parent;
361
+ }
362
+ }
363
+ function isMissingFileError(error) {
364
+ return Boolean(error &&
365
+ typeof error === "object" &&
366
+ "code" in error &&
367
+ error.code === "ENOENT");
368
+ }
369
+ async function writeHostingBinding(root, binding) {
370
+ const directory = path.join(root, ".vibable");
371
+ await mkdir(directory, { recursive: true });
372
+ await writeFile(path.join(directory, "hosting.json"), `${JSON.stringify(binding, null, 2)}\n`, { mode: 0o600 });
373
+ }
374
+ async function waitForFeatureReady(input) {
375
+ const deadline = Date.now() + 10 * 60 * 1000;
376
+ let lastPhase = "";
377
+ while (Date.now() < deadline) {
378
+ const response = await getJson({
379
+ apiBaseUrl: input.apiBaseUrl,
380
+ token: input.token,
381
+ path: "/api/workspace/features",
382
+ });
383
+ const feature = response.features.find((candidate) => candidate.id === input.featureId);
384
+ if (!feature)
385
+ throw new Error("Hosted feature disappeared while starting.");
386
+ if (feature.runtimePhase !== lastPhase) {
387
+ lastPhase = feature.runtimePhase;
388
+ process.stdout.write(`Runtime: ${lastPhase}\n`);
389
+ }
390
+ if (feature.status === "running" || feature.status === "conflicted") {
391
+ return feature;
392
+ }
393
+ if (feature.status === "failed")
394
+ throw new Error(`Feature Pod failed during ${feature.runtimePhase}.`);
395
+ await new Promise((resolve) => setTimeout(resolve, 2_000));
396
+ }
397
+ throw new Error("Timed out waiting for the Feature Pod to become ready.");
398
+ }
399
+ async function pushInitialSnapshot(input) {
400
+ const temporaryRoot = await mkdtemp(path.join(tmpdir(), "vibable-hosting-"));
401
+ const gitDirectory = path.join(temporaryRoot, ".git");
402
+ const askPassPath = path.join(temporaryRoot, "git-askpass.sh");
403
+ const gitConfigPath = path.join(temporaryRoot, "git-config");
404
+ try {
405
+ await runGit(["init", "--initial-branch=main", temporaryRoot]);
406
+ await writeFile(path.join(gitDirectory, "info", "exclude"), [
407
+ ".git/",
408
+ "node_modules/",
409
+ ".env",
410
+ ".env.*",
411
+ "!.env.example",
412
+ "!.env.sample",
413
+ "dist/",
414
+ "build/",
415
+ ".next/",
416
+ ".turbo/",
417
+ "coverage/",
418
+ ".vibable/",
419
+ "",
420
+ ].join("\n"));
421
+ const workTreeArgs = [`--git-dir=${gitDirectory}`, `--work-tree=${input.root}`];
422
+ await runGit([...workTreeArgs, "add", "-A"]);
423
+ await runGit([...workTreeArgs, "add", "-f", input.configPath]);
424
+ await runGit([...workTreeArgs, "-c", "user.name=Vibable CLI", "-c", "user.email=cli@vibable.dev", "commit", "-m", "Import local project"]);
425
+ const { stdout } = await runGit([...workTreeArgs, "rev-parse", "HEAD"]);
426
+ await writeFile(askPassPath, "#!/bin/sh\ncase \"$1\" in *Username*) printf '%s' \"$VIBABLE_GIT_USERNAME\" ;; *) printf '%s' \"$VIBABLE_GIT_PASSWORD\" ;; esac\n", { mode: 0o700 });
427
+ const authorization = Buffer.from(`${input.hosting.gitRemote.grant.username}:${input.hosting.gitRemote.grant.password}`).toString("base64");
428
+ await writeFile(gitConfigPath, `[http]\n\textraHeader = Authorization: Basic ${authorization}\n`, { mode: 0o600 });
429
+ await runGit([...workTreeArgs, "push", "--force", input.hosting.gitRemote.remoteUrl, `HEAD:refs/vibable/features/${input.hosting.featureId}/head`], {
430
+ GIT_ASKPASS: askPassPath,
431
+ GIT_CONFIG_GLOBAL: gitConfigPath,
432
+ GIT_CONFIG_NOSYSTEM: "1",
433
+ GIT_TERMINAL_PROMPT: "0",
434
+ VIBABLE_GIT_USERNAME: input.hosting.gitRemote.grant.username,
435
+ VIBABLE_GIT_PASSWORD: input.hosting.gitRemote.grant.password,
436
+ });
437
+ return stdout.trim();
438
+ }
439
+ finally {
440
+ await rm(temporaryRoot, { recursive: true, force: true });
441
+ }
442
+ }
443
+ async function runGit(args, extraEnv = {}) {
444
+ return execFileAsync("git", args, {
445
+ env: { ...process.env, ...extraEnv },
446
+ maxBuffer: 10 * 1024 * 1024,
447
+ });
448
+ }
449
+ async function readAuthConfig() {
450
+ const parsed = JSON.parse(await readFile(authConfigPath(), "utf8"));
451
+ if (!parsed.apiBaseUrl || !parsed.token || !parsed.expiresAt)
452
+ throw new Error("Invalid Vibable auth config.");
453
+ if (Date.parse(parsed.expiresAt) <= Date.now())
454
+ throw new Error("Vibable login expired. Run vibable auth login again.");
455
+ return parsed;
456
+ }
457
+ function authConfigPath() {
458
+ return process.env.VIBABLE_AUTH_FILE ?? path.join(homedir(), ".config", "vibable", "auth.json");
459
+ }
460
+ async function postJson(input) {
461
+ const response = await fetch(`${trimSlash(input.apiBaseUrl)}${input.path}`, {
462
+ method: "POST",
463
+ headers: {
464
+ "content-type": "application/json",
465
+ ...(input.token ? { authorization: `Bearer ${input.token}` } : {}),
466
+ },
467
+ body: JSON.stringify(input.body),
468
+ });
469
+ if (!response.ok) {
470
+ const error = await response.json().catch(() => null);
471
+ throw new Error(error?.message ?? `Vibable request failed (${response.status}).`);
472
+ }
473
+ return await response.json();
474
+ }
475
+ async function getJson(input) {
476
+ const response = await fetch(`${trimSlash(input.apiBaseUrl)}${input.path}`, {
477
+ headers: { authorization: `Bearer ${input.token}` },
478
+ });
479
+ if (!response.ok)
480
+ throw new Error(`Vibable request failed (${response.status}).`);
481
+ return await response.json();
482
+ }
483
+ function trimSlash(value) {
484
+ return value.replace(/\/+$/u, "");
485
+ }
486
+ //# sourceMappingURL=hosting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosting.js","sourceRoot":"","sources":["../src/hosting.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,8 +1,81 @@
1
1
  #!/usr/bin/env node
2
- import { parseConnectArgs, parseExecArgs } from "./args.js";
3
- import { connectAndWatch, readLocalConfig, runRemoteCommand } from "./sync.js";
2
+ import { parseAuthLoginArgs, parseConfigApplyArgs, parseConnectArgs, parseDataMigrateArgs, parseExecArgs, parseGuideArgs, parseLogsArgs, parseSyncInitArgs, } from "./args.js";
3
+ import { applyHostingConfig, initializeHosting, loginCli, showAgentGuide, showHostingLogs, showHostingStatus, startHostingSync, } from "./hosting.js";
4
+ import { resolveCliHelp } from "./help.js";
5
+ import { connectAndWatch, enableRemoteDevAppAuth, readLocalConfig, runRemoteDataMigration, runRemoteCommand, runSyncDaemon, showSyncDaemonStatus, stopSyncDaemon, } from "./sync.js";
4
6
  async function main() {
5
- const [command, ...args] = process.argv.slice(2);
7
+ const cliArgs = process.argv.slice(2);
8
+ const help = resolveCliHelp(cliArgs);
9
+ if (help) {
10
+ process.stdout.write(help);
11
+ return;
12
+ }
13
+ const [command, ...args] = cliArgs;
14
+ if (command === "auth" && args[0] === "login") {
15
+ await loginCli(parseAuthLoginArgs(args.slice(1)));
16
+ return;
17
+ }
18
+ if (command === "guide") {
19
+ await showAgentGuide(parseGuideArgs(args));
20
+ return;
21
+ }
22
+ if (command === "dev" && args[0] === "init") {
23
+ await initializeHosting(parseSyncInitArgs(args.slice(1)));
24
+ return;
25
+ }
26
+ if (command === "dev" && args[0] === "connect") {
27
+ await connectAndWatch(parseConnectArgs(args.slice(1)));
28
+ return;
29
+ }
30
+ if (command === "dev" && args[0] === "start" && args.length === 1) {
31
+ await startHostingSync();
32
+ return;
33
+ }
34
+ if (command === "dev" && args[0] === "status" && args.length === 1) {
35
+ await showSyncDaemonStatus();
36
+ return;
37
+ }
38
+ if (command === "dev" && args[0] === "stop" && args.length === 1) {
39
+ await stopSyncDaemon();
40
+ return;
41
+ }
42
+ if (command === "sync" && args[0] === "init") {
43
+ await initializeHosting(parseSyncInitArgs(args.slice(1)));
44
+ return;
45
+ }
46
+ if (command === "sync" && args[0] === "watch") {
47
+ const config = await readLocalConfig();
48
+ await connectAndWatch({ ...config, directory: process.cwd() });
49
+ return;
50
+ }
51
+ if (command === "sync" && args[0] === "start" && args.length === 1) {
52
+ await startHostingSync();
53
+ return;
54
+ }
55
+ if (command === "sync" && args[0] === "status" && args.length === 1) {
56
+ await showSyncDaemonStatus();
57
+ return;
58
+ }
59
+ if (command === "sync" && args[0] === "stop" && args.length === 1) {
60
+ await stopSyncDaemon();
61
+ return;
62
+ }
63
+ if (command === "sync" && args[0] === "daemon" && args[1] && args.length === 2) {
64
+ await runSyncDaemon(args[1]);
65
+ return;
66
+ }
67
+ if (command === "config" && args[0] === "apply") {
68
+ await applyHostingConfig(parseConfigApplyArgs(args.slice(1)));
69
+ return;
70
+ }
71
+ if (command === "status" && args.length === 0) {
72
+ await showHostingStatus();
73
+ return;
74
+ }
75
+ if (command === "logs") {
76
+ await showHostingLogs(parseLogsArgs(args));
77
+ return;
78
+ }
6
79
  if (command === "connect") {
7
80
  await connectAndWatch(parseConnectArgs(args));
8
81
  return;
@@ -23,12 +96,20 @@ async function main() {
23
96
  });
24
97
  return;
25
98
  }
26
- process.stderr.write([
27
- "Usage:",
28
- " vibable connect --api <url> --session <id> --token <token> <directory>",
29
- " vibable exec [--api <url> --session <id> --token <token>] -- <command>",
30
- "",
31
- ].join("\n"));
99
+ if (command === "app-auth" && args[0] === "enable") {
100
+ await enableRemoteDevAppAuth(await readLocalConfig());
101
+ return;
102
+ }
103
+ if (command === "data" && args[0] === "migrate") {
104
+ const parsed = parseDataMigrateArgs(args.slice(1));
105
+ await runRemoteDataMigration({
106
+ config: await readLocalConfig(),
107
+ inputPath: parsed.inputPath,
108
+ wait: parsed.wait,
109
+ });
110
+ return;
111
+ }
112
+ process.stderr.write(resolveCliHelp(["--help"]) ?? "");
32
113
  process.exitCode = 1;
33
114
  }
34
115
  main().catch((error) => {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE/E,KAAK,UAAU,IAAI;IACjB,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,MAAM,GACV,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,KAAK;YACnD,CAAC,CAAC;gBACE,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB;YACH,CAAC,CAAC,MAAM,eAAe,EAAE,CAAC;QAC9B,MAAM,gBAAgB,CAAC;YACrB,GAAG,MAAM;YACT,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB;QACE,QAAQ;QACR,0EAA0E;QAC1E,0EAA0E;QAC1E,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,14 @@ export type RemoteDevSessionSummary = {
14
14
  expiresAt: string;
15
15
  createdAt: string;
16
16
  };
17
+ export type RemoteDevFlushRequest = {
18
+ id: string;
19
+ requestedAt: string;
20
+ };
21
+ export type RemoteDevHeartbeatResponse = {
22
+ session: RemoteDevSessionSummary;
23
+ flushRequest: RemoteDevFlushRequest | null;
24
+ };
17
25
  export type RemoteDevSyncEvent = {
18
26
  type: "upsert";
19
27
  path: string;