@vibecodr/cli 1.0.5 → 1.0.7
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/CHANGELOG.md +46 -0
- package/dist/bin/vibecodr-mcp.js +32 -23
- package/dist/bin/vibecodr-mcp.js.map +1 -1
- package/dist/commands/tools.d.ts.map +1 -1
- package/dist/commands/tools.js +45 -1
- package/dist/commands/tools.js.map +1 -1
- package/dist/commands/update.d.ts +2 -0
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +64 -10
- package/dist/commands/update.js.map +1 -1
- package/dist/legacy/cli/install.js +4 -4
- package/dist/legacy/cli/run.js +353 -353
- package/dist/legacy/cli/run.js.map +1 -1
- package/dist/legacy/config/store.js +7 -7
- package/dist/legacy/core/api-client.js +3 -3
- package/dist/legacy/core/api-client.js.map +1 -1
- package/dist/legacy/core/validators.js +4 -4
- package/dist/legacy/core/version.d.ts +2 -2
- package/dist/legacy/core/version.js +1 -1
- package/docs/API-CONTRACT.md +605 -606
- package/docs/RELEASE-CHECKLIST.md +262 -260
- package/docs/SECURITY.md +157 -157
- package/docs/VALIDATION-MATRIX.md +45 -45
- package/docs/commands.md +254 -256
- package/package.json +1 -1
package/dist/legacy/cli/run.js
CHANGED
|
@@ -33,7 +33,7 @@ export async function runCli(argv, options = {}) {
|
|
|
33
33
|
const { globals, commandArgs } = parsed;
|
|
34
34
|
try {
|
|
35
35
|
if (globals.version) {
|
|
36
|
-
writeResult({ message: `
|
|
36
|
+
writeResult({ message: `vibecodr ${VERSION}`, data: { version: VERSION }, humanData: "hide" }, { json: globals.json, quiet: globals.quiet, stdout, stderr });
|
|
37
37
|
return 0;
|
|
38
38
|
}
|
|
39
39
|
if (globals.help || commandArgs.length === 0) {
|
|
@@ -125,8 +125,8 @@ function commandInspect() {
|
|
|
125
125
|
const summary = goalCoverageSummary();
|
|
126
126
|
return {
|
|
127
127
|
message: summary.hostedRequired === 0
|
|
128
|
-
? `
|
|
129
|
-
: `
|
|
128
|
+
? `vibecodr goal coverage: ${summary.localVerified}/${summary.total} inspections verified.`
|
|
129
|
+
: `vibecodr goal coverage: ${summary.localVerified}/${summary.total} locally verified, ${summary.hostedRequired} hosted-service check pending.`,
|
|
130
130
|
data: {
|
|
131
131
|
summary,
|
|
132
132
|
inspections: GOAL_INSPECTIONS
|
|
@@ -140,7 +140,7 @@ async function commandStart(context, parsed) {
|
|
|
140
140
|
let login;
|
|
141
141
|
if (!token) {
|
|
142
142
|
if (context.globals.noInput) {
|
|
143
|
-
throw new CliError("auth.approval_required", "This Agent Computer is not connected yet. Run
|
|
143
|
+
throw new CliError("auth.approval_required", "This Agent Computer is not connected yet. Run vibecodr start without --no-input to open Vibecodr approval, or use an advanced file/stdin credential source for automation.", 3);
|
|
144
144
|
}
|
|
145
145
|
login = await commandLogin(context, parseCommandOptions([]));
|
|
146
146
|
token = await resolveToken(context, true);
|
|
@@ -189,7 +189,7 @@ async function commandTry(context, parsed) {
|
|
|
189
189
|
await commandStart(context, parsed);
|
|
190
190
|
const { profile } = await context.store.getProfile(context.globals.profile);
|
|
191
191
|
const client = createClient(context, profile, await resolveToken(context, true));
|
|
192
|
-
const proofDir = getStringFlag(parsed.flags, "out") ?? "
|
|
192
|
+
const proofDir = getStringFlag(parsed.flags, "out") ?? "vibecodr-proof";
|
|
193
193
|
const browserParsed = {
|
|
194
194
|
positionals: ["https://example.com"],
|
|
195
195
|
flags: {
|
|
@@ -203,7 +203,7 @@ async function commandTry(context, parsed) {
|
|
|
203
203
|
positionals: [],
|
|
204
204
|
flags: {
|
|
205
205
|
...parsed.flags,
|
|
206
|
-
command: "node -e \"console.log('
|
|
206
|
+
command: "node -e \"console.log('vibecodr computer ok')\"",
|
|
207
207
|
out: proofDir,
|
|
208
208
|
filename: "computer-run.json",
|
|
209
209
|
pollIntervalMs: getStringFlag(parsed.flags, "pollIntervalMs") ?? "250"
|
|
@@ -287,8 +287,8 @@ async function commandDashboard(context, parsed) {
|
|
|
287
287
|
}
|
|
288
288
|
return {
|
|
289
289
|
message: opened
|
|
290
|
-
? `Opened the Vibecodr
|
|
291
|
-
: `Vibecodr
|
|
290
|
+
? `Opened the Vibecodr dashboard: ${urlString}`
|
|
291
|
+
: `Vibecodr dashboard: ${urlString}\nUse vibecodr dashboard --no-open to suppress opening, or --json for machine-readable metadata.`,
|
|
292
292
|
data: {
|
|
293
293
|
url: urlString,
|
|
294
294
|
section,
|
|
@@ -306,7 +306,7 @@ async function commandLogin(context, parsed) {
|
|
|
306
306
|
let browserLogin;
|
|
307
307
|
if (credential === undefined) {
|
|
308
308
|
if (context.globals.noInput) {
|
|
309
|
-
throw new CliError("auth.token_required", "Browser login needs interactive approval. Run
|
|
309
|
+
throw new CliError("auth.token_required", "Browser login needs interactive approval. Run vibecodr login without --no-input, or use an automation-safe credential source such as Get-Clipboard | vibecodr login --credential-stdin or vibecodr login --credential-file <path>.", 3);
|
|
310
310
|
}
|
|
311
311
|
const browserExchange = await completeBrowserDeviceLogin(context, parsed);
|
|
312
312
|
exchange = browserExchange.exchange;
|
|
@@ -441,8 +441,8 @@ async function commandStatus(context) {
|
|
|
441
441
|
}
|
|
442
442
|
return {
|
|
443
443
|
message: auth.token
|
|
444
|
-
? `This Vibecodr Agent Computer has a credential available from ${auth.credential.winning?.label ?? "stored credentials"}. Run
|
|
445
|
-
: "This Vibecodr Agent Computer is not connected yet. Run
|
|
444
|
+
? `This Vibecodr Agent Computer has a credential available from ${auth.credential.winning?.label ?? "stored credentials"}. Run vibecodr agent status for account and connection details.`
|
|
445
|
+
: "This Vibecodr Agent Computer is not connected yet. Run vibecodr start to connect it.",
|
|
446
446
|
warnings,
|
|
447
447
|
data: {
|
|
448
448
|
apiUrl: profile.apiUrl,
|
|
@@ -517,7 +517,7 @@ async function commandAgent(context, subcommand, rest) {
|
|
|
517
517
|
case "status":
|
|
518
518
|
return commandStart(context, parseCommandOptions(rest));
|
|
519
519
|
default:
|
|
520
|
-
throw unknownSubcommandError("agent", subcommand, ["connect", "instructions", "status"], "Use
|
|
520
|
+
throw unknownSubcommandError("agent", subcommand, ["connect", "instructions", "status"], "Use vibecodr agent connect [--client codex] or vibecodr agent status.");
|
|
521
521
|
}
|
|
522
522
|
}
|
|
523
523
|
async function commandAuth(context, subcommand, rest) {
|
|
@@ -529,7 +529,7 @@ async function commandAuth(context, subcommand, rest) {
|
|
|
529
529
|
case "export-agent-env":
|
|
530
530
|
return commandAuthExportAgentEnv(context, parseCommandOptions(rest));
|
|
531
531
|
default:
|
|
532
|
-
throw unknownSubcommandError("auth", subcommand, ["diagnose", "status", "export-agent-env"], "Use
|
|
532
|
+
throw unknownSubcommandError("auth", subcommand, ["diagnose", "status", "export-agent-env"], "Use vibecodr auth diagnose or vibecodr auth export-agent-env --out <file> --yes.");
|
|
533
533
|
}
|
|
534
534
|
}
|
|
535
535
|
async function commandAuthDiagnose(context) {
|
|
@@ -562,7 +562,7 @@ async function commandAuthDiagnose(context) {
|
|
|
562
562
|
}
|
|
563
563
|
const message = auth.token
|
|
564
564
|
? `Auth diagnose: credential source is ${auth.credential.winning?.label ?? "stored credentials"}.`
|
|
565
|
-
: "Auth diagnose: no usable credential source found. Run
|
|
565
|
+
: "Auth diagnose: no usable credential source found. Run vibecodr start.";
|
|
566
566
|
return {
|
|
567
567
|
message,
|
|
568
568
|
warnings,
|
|
@@ -576,8 +576,8 @@ async function commandAuthDiagnose(context) {
|
|
|
576
576
|
authSources: auth.credential,
|
|
577
577
|
verification,
|
|
578
578
|
next: auth.token
|
|
579
|
-
? ["Use
|
|
580
|
-
: ["Run
|
|
579
|
+
? ["Use vibecodr agent status to verify the full Agent Computer connection."]
|
|
580
|
+
: ["Run vibecodr start to connect this Agent Computer.", "If this is an isolated agent, check VC_TOOLS_CONFIG_DIR and VC_TOOLS_CREDENTIAL_FILE."]
|
|
581
581
|
}
|
|
582
582
|
};
|
|
583
583
|
}
|
|
@@ -595,7 +595,7 @@ async function commandAuthExportAgentEnv(context, parsed) {
|
|
|
595
595
|
? authState.credential
|
|
596
596
|
: undefined;
|
|
597
597
|
if (!auth.token) {
|
|
598
|
-
throw new CliError("auth.missing", "No
|
|
598
|
+
throw new CliError("auth.missing", "No Vibecodr approval is available to export. Run vibecodr start first.", 3);
|
|
599
599
|
}
|
|
600
600
|
const target = path.resolve(context.cwd, out);
|
|
601
601
|
await ensureOutputPathAllowed(context.cwd, target);
|
|
@@ -612,7 +612,7 @@ async function commandAuthExportAgentEnv(context, parsed) {
|
|
|
612
612
|
// Windows may not honor POSIX modes, but Node still requests the narrowest practical mode.
|
|
613
613
|
}
|
|
614
614
|
const envName = durableCredential ? "VC_TOOLS_CREDENTIAL_FILE" : "VC_TOOLS_TOKEN_FILE";
|
|
615
|
-
const exportedKind = durableCredential ? formatCredentialMode(durableCredential.mode) : "short-lived
|
|
615
|
+
const exportedKind = durableCredential ? formatCredentialMode(durableCredential.mode) : "short-lived Vibecodr grant";
|
|
616
616
|
return {
|
|
617
617
|
message: `Wrote an agent credential file (${exportedKind}). Set ${envName}=${target} for the agent process.`,
|
|
618
618
|
data: {
|
|
@@ -648,7 +648,7 @@ async function commandBrowser(context, subcommand, rest) {
|
|
|
648
648
|
return submitHostedCapability(context, "browser.ask", normalized, "Asked the hosted Browser to capture an inspection snapshot for your agent.", { autoFollow: true });
|
|
649
649
|
}
|
|
650
650
|
default:
|
|
651
|
-
throw unknownSubcommandError("browser", subcommand, ["render", "screenshot", "read", "markdown", "pdf", "crawl", "snapshot", "ask"], "Use
|
|
651
|
+
throw unknownSubcommandError("browser", subcommand, ["render", "screenshot", "read", "markdown", "pdf", "crawl", "snapshot", "ask"], "Use vibecodr browser screenshot <https-url>, browser read <https-url>, or browser snapshot <https-url> --instructions <text>.");
|
|
652
652
|
}
|
|
653
653
|
}
|
|
654
654
|
async function commandComputer(context, subcommand, rest) {
|
|
@@ -657,16 +657,16 @@ async function commandComputer(context, subcommand, rest) {
|
|
|
657
657
|
case "status":
|
|
658
658
|
return commandStart(context, parseCommandOptions(rest));
|
|
659
659
|
case "run": {
|
|
660
|
-
const parsed = normalizeComputerCommandOptions(parseCommandOptions(rest), "computer run requires a command, for example:
|
|
660
|
+
const parsed = normalizeComputerCommandOptions(parseCommandOptions(rest), "computer run requires a command, for example: vibecodr computer run \"npm test\".");
|
|
661
661
|
return submitHostedCapability(context, "computer.run", parsed, "Submitted work to the hosted Agent Computer.", { autoFollow: true });
|
|
662
662
|
}
|
|
663
663
|
case "test":
|
|
664
664
|
case "tests": {
|
|
665
|
-
const parsed = normalizeComputerCommandOptions(parseCommandOptions(rest), "computer test requires a command, for example:
|
|
665
|
+
const parsed = normalizeComputerCommandOptions(parseCommandOptions(rest), "computer test requires a command, for example: vibecodr computer test \"npm test\".");
|
|
666
666
|
return submitHostedCapability(context, "computer.test", parsed, "Submitted tests to the hosted Agent Computer.", { autoFollow: true });
|
|
667
667
|
}
|
|
668
668
|
default:
|
|
669
|
-
throw unknownSubcommandError("computer", subcommand, ["start", "status", "run", "test"], "Use
|
|
669
|
+
throw unknownSubcommandError("computer", subcommand, ["start", "status", "run", "test"], "Use vibecodr computer start, computer status, computer run \"<command>\", or computer test \"<command>\".");
|
|
670
670
|
}
|
|
671
671
|
}
|
|
672
672
|
async function commandWork(context, subcommand, rest) {
|
|
@@ -681,7 +681,7 @@ async function commandWork(context, subcommand, rest) {
|
|
|
681
681
|
case "cancel":
|
|
682
682
|
return commandJobs(context, "cancel", rest);
|
|
683
683
|
default:
|
|
684
|
-
throw unknownSubcommandError("work", subcommand, ["list", "show", "status", "follow", "cancel"], "Use
|
|
684
|
+
throw unknownSubcommandError("work", subcommand, ["list", "show", "status", "follow", "cancel"], "Use vibecodr work list, work show <jobId>, work follow <jobId>, or work cancel <jobId> --yes.");
|
|
685
685
|
}
|
|
686
686
|
}
|
|
687
687
|
async function commandProof(context, subcommand, rest) {
|
|
@@ -697,7 +697,7 @@ async function commandProof(context, subcommand, rest) {
|
|
|
697
697
|
case "delete":
|
|
698
698
|
return commandArtifacts(context, "delete", rest);
|
|
699
699
|
default:
|
|
700
|
-
throw unknownSubcommandError("proof", subcommand, ["list", "show", "save", "delete"], "Use
|
|
700
|
+
throw unknownSubcommandError("proof", subcommand, ["list", "show", "save", "delete"], "Use vibecodr proof list, proof show <artifactId>, proof save <artifactId> --out ./artifacts, or proof delete <artifactId> --yes.");
|
|
701
701
|
}
|
|
702
702
|
}
|
|
703
703
|
async function commandTools(context, subcommand, rest) {
|
|
@@ -706,12 +706,12 @@ async function commandTools(context, subcommand, rest) {
|
|
|
706
706
|
const { profile } = await context.store.getProfile(context.globals.profile);
|
|
707
707
|
const client = createClient(context, profile, await resolveToken(context, true));
|
|
708
708
|
const tools = await client.request("GET", "tools");
|
|
709
|
-
return { message: "Fetched granted
|
|
709
|
+
return { message: "Fetched granted Vibecodr capabilities.", data: tools };
|
|
710
710
|
}
|
|
711
711
|
case "test":
|
|
712
712
|
return commandToolsTest(context, parseCommandOptions(rest));
|
|
713
713
|
default:
|
|
714
|
-
throw unknownSubcommandError("tools", subcommand, ["list", "test"], "Use
|
|
714
|
+
throw unknownSubcommandError("tools", subcommand, ["list", "test"], "Use vibecodr tools list or vibecodr tools test <capability>.");
|
|
715
715
|
}
|
|
716
716
|
}
|
|
717
717
|
async function commandToolsTest(context, parsed) {
|
|
@@ -733,7 +733,7 @@ async function submitHostedCapability(context, capabilityInput, parsed, successM
|
|
|
733
733
|
return followSubmittedWork(context, client, capability, response, parsed);
|
|
734
734
|
}
|
|
735
735
|
return {
|
|
736
|
-
message: successMessage ?? (capability === "usage.read" ? "Read usage and limits from hosted
|
|
736
|
+
message: successMessage ?? (capability === "usage.read" ? "Read usage and limits from hosted Vibecodr." : `Submitted ${capability} test to hosted Vibecodr.`),
|
|
737
737
|
data: response
|
|
738
738
|
};
|
|
739
739
|
}
|
|
@@ -832,7 +832,7 @@ function formatCompletedWorkMessage(capability, work, proof) {
|
|
|
832
832
|
}
|
|
833
833
|
if (status === "queued" || status === "running") {
|
|
834
834
|
const id = jobIdFromWork(work);
|
|
835
|
-
const follow = id ? `\nFollow it:
|
|
835
|
+
const follow = id ? `\nFollow it: vibecodr work follow ${id}` : "";
|
|
836
836
|
return `Work accepted and still ${status}.${follow}`;
|
|
837
837
|
}
|
|
838
838
|
const error = isRecord(work) && isRecord(work.error) && typeof work.error.message === "string"
|
|
@@ -951,7 +951,7 @@ async function commandJobs(context, subcommand, rest) {
|
|
|
951
951
|
return { message: `Canceled job ${jobId}.`, data: job };
|
|
952
952
|
}
|
|
953
953
|
default:
|
|
954
|
-
throw unknownSubcommandError("jobs", subcommand, ["list", "status", "cancel"], "Use
|
|
954
|
+
throw unknownSubcommandError("jobs", subcommand, ["list", "status", "cancel"], "Use vibecodr jobs list, jobs status <jobId>, or jobs cancel <jobId> --yes.");
|
|
955
955
|
}
|
|
956
956
|
}
|
|
957
957
|
async function commandArtifacts(context, subcommand, rest) {
|
|
@@ -984,7 +984,7 @@ async function commandArtifacts(context, subcommand, rest) {
|
|
|
984
984
|
return { message: `Deleted artifact ${artifactId}.`, data: artifact };
|
|
985
985
|
}
|
|
986
986
|
default:
|
|
987
|
-
throw unknownSubcommandError("artifacts", subcommand, ["list", "get", "pull", "create", "delete"], "Use
|
|
987
|
+
throw unknownSubcommandError("artifacts", subcommand, ["list", "get", "pull", "create", "delete"], "Use vibecodr artifacts list, get, pull, create, or delete.");
|
|
988
988
|
}
|
|
989
989
|
}
|
|
990
990
|
async function commandArtifactsPull(context, client, parsed) {
|
|
@@ -1085,7 +1085,7 @@ async function commandUsage(context, parsed) {
|
|
|
1085
1085
|
async function commandGrants(context, subcommand, rest) {
|
|
1086
1086
|
const selectedSubcommand = subcommand ?? "list";
|
|
1087
1087
|
if (selectedSubcommand !== "list") {
|
|
1088
|
-
throw unknownSubcommandError("grants", subcommand, ["list"], "
|
|
1088
|
+
throw unknownSubcommandError("grants", subcommand, ["list"], "vibecodr grants lists effective grants by default. Use vibecodr grants list [--project <id>] [--user <id>] for explicit filters.");
|
|
1089
1089
|
}
|
|
1090
1090
|
const parsed = parseCommandOptions(rest);
|
|
1091
1091
|
const { profile } = await context.store.getProfile(context.globals.profile);
|
|
@@ -1126,7 +1126,7 @@ async function commandRetention(context, subcommand, rest) {
|
|
|
1126
1126
|
return { message: "Updated retention policy.", data: retention };
|
|
1127
1127
|
}
|
|
1128
1128
|
default:
|
|
1129
|
-
throw unknownSubcommandError("retention", subcommand, ["show", "set"], "Use
|
|
1129
|
+
throw unknownSubcommandError("retention", subcommand, ["show", "set"], "Use vibecodr retention show or retention set.");
|
|
1130
1130
|
}
|
|
1131
1131
|
}
|
|
1132
1132
|
async function commandScheduledQa(context, subcommand, rest) {
|
|
@@ -1167,7 +1167,7 @@ async function commandScheduledQa(context, subcommand, rest) {
|
|
|
1167
1167
|
return { message: `Deleted scheduled QA check ${id}.`, data: deleted };
|
|
1168
1168
|
}
|
|
1169
1169
|
default:
|
|
1170
|
-
throw unknownSubcommandError("scheduled-qa", subcommand, ["list", "create", "pause", "resume", "delete"], "Use
|
|
1170
|
+
throw unknownSubcommandError("scheduled-qa", subcommand, ["list", "create", "pause", "resume", "delete"], "Use vibecodr scheduled-qa list, create <url>, pause <id>, resume <id>, or delete <id>.");
|
|
1171
1171
|
}
|
|
1172
1172
|
}
|
|
1173
1173
|
async function commandPlans(context, parsed) {
|
|
@@ -1212,7 +1212,7 @@ async function commandDoctor(context, parsed) {
|
|
|
1212
1212
|
const checks = [
|
|
1213
1213
|
{ name: "node", ok: nodeMajor() >= 22 && nodeMajor() < 26, detail: process.version },
|
|
1214
1214
|
{ name: "config", ok: true, detail: local.dir },
|
|
1215
|
-
{ name: "approval", ok: Boolean(token), detail: token ? "saved for this OS user or provided by automation" : "missing; run
|
|
1215
|
+
{ name: "approval", ok: Boolean(token), detail: token ? "saved for this OS user or provided by automation" : "missing; run vibecodr start" },
|
|
1216
1216
|
{
|
|
1217
1217
|
name: "apiUrl",
|
|
1218
1218
|
ok: profile.apiUrl.startsWith("https://") || (profile.apiUrl.startsWith("http://localhost") && allowInsecureLocalApi(context)),
|
|
@@ -1230,13 +1230,13 @@ async function commandDoctor(context, parsed) {
|
|
|
1230
1230
|
return {
|
|
1231
1231
|
message: checks.every((check) => check.ok)
|
|
1232
1232
|
? "Agent Computer checks passed. Your agent can use the hosted Vibecodr computer."
|
|
1233
|
-
: "Agent Computer needs attention. Run
|
|
1233
|
+
: "Agent Computer needs attention. Run vibecodr start to approve access, then retry the agent.",
|
|
1234
1234
|
data: {
|
|
1235
1235
|
checks,
|
|
1236
1236
|
...(surface.details || surface.operator ? { config: { dir: local.dir, credentialStore: local.credentialStore } } : {}),
|
|
1237
1237
|
nextActions: checks.every((check) => check.ok)
|
|
1238
|
-
? ["Connect the agent with
|
|
1239
|
-
: ["Run
|
|
1238
|
+
? ["Connect the agent with vibecodr agent connect.", "Use --json when an agent needs stable machine-readable output."]
|
|
1239
|
+
: ["Run vibecodr start.", "If this is CI or an isolated agent, use an advanced file/stdin credential source."]
|
|
1240
1240
|
},
|
|
1241
1241
|
humanData: surface.details || surface.operator ? "show" : "hide"
|
|
1242
1242
|
};
|
|
@@ -1266,8 +1266,8 @@ function publicStartPayload(me, health, connection, usage, loginStarted) {
|
|
|
1266
1266
|
health: publicHealthPayload(health),
|
|
1267
1267
|
usage: publicUsagePayload(usage),
|
|
1268
1268
|
nextActions: [
|
|
1269
|
-
"Connect your agent with
|
|
1270
|
-
"Run
|
|
1269
|
+
"Connect your agent with vibecodr agent connect --client codex.",
|
|
1270
|
+
"Run vibecodr try to prove browser, computer, and proof are working."
|
|
1271
1271
|
]
|
|
1272
1272
|
};
|
|
1273
1273
|
}
|
|
@@ -1323,7 +1323,7 @@ function publicPlansPayload(plans) {
|
|
|
1323
1323
|
const rows = Array.isArray(data.plans) ? data.plans.filter(isRecord) : [];
|
|
1324
1324
|
return {
|
|
1325
1325
|
plans: rows.map(publicPlanPayload),
|
|
1326
|
-
note: "Plan packaging is public product information. Use
|
|
1326
|
+
note: "Plan packaging is public product information. Use vibecodr usage for your actual account capacity."
|
|
1327
1327
|
};
|
|
1328
1328
|
}
|
|
1329
1329
|
function publicPlanPayload(plan) {
|
|
@@ -1393,7 +1393,7 @@ function formatUsageSummary(usage) {
|
|
|
1393
1393
|
if (hardCap !== undefined) {
|
|
1394
1394
|
lines.push("", `Spend cap: ${hardCap ? "hard" : "soft"}`);
|
|
1395
1395
|
}
|
|
1396
|
-
lines.push("Alias:
|
|
1396
|
+
lines.push("Alias: vibecodr limits");
|
|
1397
1397
|
return lines.join("\n");
|
|
1398
1398
|
}
|
|
1399
1399
|
function formatWhoamiSummary(me) {
|
|
@@ -1414,10 +1414,10 @@ function formatGrantsSummary(grants) {
|
|
|
1414
1414
|
const granted = rows.filter((row) => row.granted === true).length;
|
|
1415
1415
|
const providerMode = typeof data.providerMode === "string" ? ` (${data.providerMode})` : "";
|
|
1416
1416
|
if (rows.length === 0) {
|
|
1417
|
-
return `
|
|
1417
|
+
return `vibecodr grants${providerMode}\nNo tool grants were returned. The full hosted response follows.`;
|
|
1418
1418
|
}
|
|
1419
1419
|
return [
|
|
1420
|
-
`
|
|
1420
|
+
`vibecodr grants${providerMode}`,
|
|
1421
1421
|
`${granted}/${rows.length} tool grants are enabled for the active account/plan.`,
|
|
1422
1422
|
"The full hosted grant payload follows."
|
|
1423
1423
|
].join("\n");
|
|
@@ -1429,7 +1429,7 @@ function formatPlansSummary(plans) {
|
|
|
1429
1429
|
return [
|
|
1430
1430
|
"Vibecodr Agent Computer plans",
|
|
1431
1431
|
"No plan packaging was returned.",
|
|
1432
|
-
"Run
|
|
1432
|
+
"Run vibecodr usage for your actual account capacity."
|
|
1433
1433
|
].join("\n");
|
|
1434
1434
|
}
|
|
1435
1435
|
const lines = ["Vibecodr Agent Computer plans", ""];
|
|
@@ -1437,8 +1437,8 @@ function formatPlansSummary(plans) {
|
|
|
1437
1437
|
lines.push(...formatPlanBullets(row));
|
|
1438
1438
|
lines.push("");
|
|
1439
1439
|
}
|
|
1440
|
-
lines.push("Run
|
|
1441
|
-
lines.push("Run
|
|
1440
|
+
lines.push("Run vibecodr usage for your actual account capacity.");
|
|
1441
|
+
lines.push("Run vibecodr plans --details for the full entitlement schema.");
|
|
1442
1442
|
return lines.join("\n").replace(/\n+$/, "");
|
|
1443
1443
|
}
|
|
1444
1444
|
function formatPlanBullets(plan) {
|
|
@@ -1817,7 +1817,7 @@ function buildToolTestPayload(capability, target, parsed, globalToolTimeoutMs) {
|
|
|
1817
1817
|
};
|
|
1818
1818
|
}
|
|
1819
1819
|
if (capability === "artifact.create") {
|
|
1820
|
-
throw new CliError("input.use_artifacts_create", "Use
|
|
1820
|
+
throw new CliError("input.use_artifacts_create", "Use vibecodr artifacts create --file <path> --yes to create artifacts.", 2);
|
|
1821
1821
|
}
|
|
1822
1822
|
if (capability === "job.status" || capability === "job.cancel") {
|
|
1823
1823
|
return {
|
|
@@ -1908,7 +1908,7 @@ async function inspectAuthState(context) {
|
|
|
1908
1908
|
config.defaultDir = defaultLocal.dir;
|
|
1909
1909
|
config.defaultConfigExists = defaultLocal.configExists;
|
|
1910
1910
|
config.defaultCredentialsExist = defaultLocal.credentialsExist;
|
|
1911
|
-
warnings.push(`${configDirSource} is set, so this session is isolated from the normal
|
|
1911
|
+
warnings.push(`${configDirSource} is set, so this session is isolated from the normal Vibecodr config directory.`);
|
|
1912
1912
|
}
|
|
1913
1913
|
let storedAuth = { version: 2 };
|
|
1914
1914
|
let storedStatus = "missing";
|
|
@@ -1958,7 +1958,7 @@ async function inspectAuthState(context) {
|
|
|
1958
1958
|
source: local.credentialStore === "native" ? "native" : "stored",
|
|
1959
1959
|
label: storedAuth.credential
|
|
1960
1960
|
? `stored ${formatCredentialMode(storedAuth.credential.mode)}`
|
|
1961
|
-
: "cached
|
|
1961
|
+
: "cached Vibecodr grant",
|
|
1962
1962
|
kind: "stored"
|
|
1963
1963
|
};
|
|
1964
1964
|
}
|
|
@@ -2040,7 +2040,7 @@ async function resolveToken(context, required, options = {}) {
|
|
|
2040
2040
|
}
|
|
2041
2041
|
}
|
|
2042
2042
|
if (required) {
|
|
2043
|
-
throw new CliError("auth.missing", "Run
|
|
2043
|
+
throw new CliError("auth.missing", "Run vibecodr start, pass a credential with --credential-file or --credential-stdin, or set VC_TOOLS_CREDENTIAL_FILE for an isolated agent.", 3);
|
|
2044
2044
|
}
|
|
2045
2045
|
return undefined;
|
|
2046
2046
|
}
|
|
@@ -2077,11 +2077,11 @@ function isRecoverableStoredAuthError(error) {
|
|
|
2077
2077
|
async function clearRecoverableStoredAuthState(context, warnings) {
|
|
2078
2078
|
try {
|
|
2079
2079
|
await context.store.clearToken(context.globals.profile);
|
|
2080
|
-
warnings?.push("Removed an unreadable stored
|
|
2080
|
+
warnings?.push("Removed an unreadable stored Vibecodr approval. Run vibecodr start to connect this Agent Computer.");
|
|
2081
2081
|
}
|
|
2082
2082
|
catch (error) {
|
|
2083
2083
|
const cliError = toCliError(error);
|
|
2084
|
-
warnings?.push(`Could not remove an unreadable stored
|
|
2084
|
+
warnings?.push(`Could not remove an unreadable stored Vibecodr approval: ${cliError.message}`);
|
|
2085
2085
|
}
|
|
2086
2086
|
}
|
|
2087
2087
|
function isGrantFresh(grant, nowSeconds = Math.floor(Date.now() / 1000)) {
|
|
@@ -2094,7 +2094,7 @@ function formatCredentialMode(mode) {
|
|
|
2094
2094
|
if (mode === "oauth") {
|
|
2095
2095
|
return "OAuth token";
|
|
2096
2096
|
}
|
|
2097
|
-
return "
|
|
2097
|
+
return "Vibecodr grant";
|
|
2098
2098
|
}
|
|
2099
2099
|
function storedCredentialSourceToCredentialSource(source) {
|
|
2100
2100
|
return source === "env" || source === "stdin" || source === "file" || source === "flag" ? source : "file";
|
|
@@ -2153,7 +2153,7 @@ async function completeBrowserDeviceLogin(context, parsed) {
|
|
|
2153
2153
|
const openedBrowser = await maybeOpenBrowser(context, parsed, verificationUri);
|
|
2154
2154
|
if (!context.globals.json && !context.globals.quiet) {
|
|
2155
2155
|
context.stderr.write([
|
|
2156
|
-
`Open this URL to approve
|
|
2156
|
+
`Open this URL to approve Vibecodr login: ${verificationUri}`,
|
|
2157
2157
|
`Code: ${start.user_code}`,
|
|
2158
2158
|
"Only approve the browser page if the code shown there matches this terminal.",
|
|
2159
2159
|
openedBrowser ? "A browser window was opened for you." : "The browser was not opened automatically; paste the URL above.",
|
|
@@ -2190,7 +2190,7 @@ async function startBrowserDeviceLogin(authClient) {
|
|
|
2190
2190
|
}
|
|
2191
2191
|
});
|
|
2192
2192
|
if (!isDeviceStartResponse(response)) {
|
|
2193
|
-
throw new CliError("auth.invalid_device_response", "Vibecodr Auth API returned an invalid
|
|
2193
|
+
throw new CliError("auth.invalid_device_response", "Vibecodr Auth API returned an invalid browser-login response.", 6);
|
|
2194
2194
|
}
|
|
2195
2195
|
return response;
|
|
2196
2196
|
}
|
|
@@ -2211,7 +2211,7 @@ async function pollBrowserDeviceLogin(context, authClient, start) {
|
|
|
2211
2211
|
intervalMs = clampPollIntervalMs(parsed.interval ?? intervalMs / 1000);
|
|
2212
2212
|
await sleep(Math.min(intervalMs, Math.max(0, deadlineMs - Date.now())));
|
|
2213
2213
|
}
|
|
2214
|
-
throw new CliError("auth.device_login_expired", "
|
|
2214
|
+
throw new CliError("auth.device_login_expired", "Vibecodr browser login expired before approval. Run vibecodr login again.", 3);
|
|
2215
2215
|
}
|
|
2216
2216
|
function parseDevicePollResponse(value) {
|
|
2217
2217
|
if (isCliGrantExchangeResponse(value)) {
|
|
@@ -2225,7 +2225,7 @@ function parseDevicePollResponse(value) {
|
|
|
2225
2225
|
message: typeof value.message === "string" ? value.message : undefined
|
|
2226
2226
|
};
|
|
2227
2227
|
}
|
|
2228
|
-
throw new CliError("auth.invalid_device_response", "Vibecodr Auth API returned an invalid
|
|
2228
|
+
throw new CliError("auth.invalid_device_response", "Vibecodr Auth API returned an invalid browser-login polling response.", 6);
|
|
2229
2229
|
}
|
|
2230
2230
|
function clampPollIntervalMs(intervalSeconds) {
|
|
2231
2231
|
if (!Number.isFinite(intervalSeconds)) {
|
|
@@ -2345,7 +2345,7 @@ async function resolveLoginCredential(context, parsed, includeCommandFlags) {
|
|
|
2345
2345
|
rejectCredentialTypeFlags(parsed);
|
|
2346
2346
|
const descriptors = credentialDescriptors(context, parsed, includeCommandFlags);
|
|
2347
2347
|
if (descriptors.length > 1) {
|
|
2348
|
-
throw new CliError("auth.ambiguous_credentials", `Provide only one
|
|
2348
|
+
throw new CliError("auth.ambiguous_credentials", `Provide only one Vibecodr credential source. Received: ${descriptors.map((descriptor) => descriptor.label).join(", ")}.`, 3);
|
|
2349
2349
|
}
|
|
2350
2350
|
const descriptor = descriptors[0];
|
|
2351
2351
|
if (descriptor === undefined) {
|
|
@@ -2368,7 +2368,7 @@ function rejectCredentialTypeFlags(parsed) {
|
|
|
2368
2368
|
"oauthTokenStdin"
|
|
2369
2369
|
].filter((flag) => Object.prototype.hasOwnProperty.call(parsed.flags, flag));
|
|
2370
2370
|
if (removedFlags.length > 0) {
|
|
2371
|
-
throw new CliError("input.unsupported_credential_flag", "Use --credential, --credential-file, or --credential-stdin.
|
|
2371
|
+
throw new CliError("input.unsupported_credential_flag", "Use --credential, --credential-file, or --credential-stdin. vibecodr now infers whether the credential is a grant, Clerk API key, or Clerk OAuth token.", 2);
|
|
2372
2372
|
}
|
|
2373
2373
|
}
|
|
2374
2374
|
function credentialDescriptors(context, parsed, includeCommandFlags) {
|
|
@@ -2419,7 +2419,7 @@ function inferCredentialMode(value) {
|
|
|
2419
2419
|
if (value.startsWith("oat_") || value.startsWith("oauth_")) {
|
|
2420
2420
|
return "oauth";
|
|
2421
2421
|
}
|
|
2422
|
-
throw new CliError("auth.credential_type_unknown", "Could not identify the credential type. Use a
|
|
2422
|
+
throw new CliError("auth.credential_type_unknown", "Could not identify the credential type. Use a Vibecodr grant token, a Clerk API key starting with ak_, or a Clerk OAuth token starting with oat_.", 2);
|
|
2423
2423
|
}
|
|
2424
2424
|
async function readCredentialDescriptor(context, descriptor) {
|
|
2425
2425
|
if (descriptor.value !== undefined) {
|
|
@@ -2542,64 +2542,64 @@ function helpResult(args = []) {
|
|
|
2542
2542
|
};
|
|
2543
2543
|
}
|
|
2544
2544
|
function helpText() {
|
|
2545
|
-
return `
|
|
2546
|
-
|
|
2547
|
-
The hosted Vibecodr
|
|
2548
|
-
|
|
2549
|
-
Examples:
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
|
|
2553
|
-
|
|
2554
|
-
|
|
2555
|
-
|
|
2556
|
-
|
|
2557
|
-
|
|
2558
|
-
|
|
2559
|
-
|
|
2560
|
-
Usage:
|
|
2561
|
-
|
|
2562
|
-
|
|
2563
|
-
|
|
2564
|
-
Commands:
|
|
2565
|
-
start Connect and verify the Agent Computer, then return agent connection details.
|
|
2566
|
-
setup Alias for start.
|
|
2567
|
-
try Run a small browser, computer, proof, and usage check.
|
|
2568
|
-
agent Connect an agent to the hosted computer or check readiness.
|
|
2569
|
-
computer Start/status/run commands on the hosted Agent Computer.
|
|
2570
|
-
browser Ask the hosted Browser to render, read, screenshot, crawl, or inspect public HTTPS pages.
|
|
2571
|
-
work List, follow, show, or cancel hosted work.
|
|
2572
|
-
proof List, show, save, or delete saved outputs and artifacts.
|
|
2573
|
-
usage Show account-scoped Agent Computer capacity and quota progress.
|
|
2574
|
-
limits Alias for usage.
|
|
2575
|
-
dashboard Print the hosted supervision dashboard URL.
|
|
2576
|
-
doctor Explain whether the Agent Computer is ready and what to do next.
|
|
2577
|
-
|
|
2578
|
-
Advanced/debug commands:
|
|
2579
|
-
auth, login, logout, status, whoami, connect, tools, jobs, artifacts, grants, retention, scheduled-qa, plans, inspect
|
|
2580
|
-
|
|
2581
|
-
Global flags:
|
|
2582
|
-
--json Stable machine-readable output.
|
|
2583
|
-
-q, --quiet Suppress non-essential human success output.
|
|
2584
|
-
-h, --help Show help. Works after subcommands too.
|
|
2585
|
-
--version Show version.
|
|
2586
|
-
--api-url <url> Hosted
|
|
2587
|
-
--allow-insecure-local-api Allow http://localhost API URLs for local development.
|
|
2588
|
-
--timeout-ms <ms> Network timeout from 1000 to 300000.
|
|
2589
|
-
--no-input Disable browser/device login for automation.
|
|
2590
|
-
--no-color Accepted for CLI convention compatibility.
|
|
2591
|
-
|
|
2592
|
-
Advanced credential/config flags:
|
|
2593
|
-
--credential-file <path> Read a
|
|
2594
|
-
--credential-stdin Read a
|
|
2595
|
-
--config-dir <dir> Isolated config directory override for tests/automation.
|
|
2596
|
-
|
|
2597
|
-
Docs:
|
|
2598
|
-
https://vibecodr.space/docs/vc-tools
|
|
2599
|
-
Overview:
|
|
2600
|
-
https://vibecodr.space/vc-tools
|
|
2601
|
-
Support:
|
|
2602
|
-
https://vibecodr.space/support
|
|
2545
|
+
return `vibecodr ${VERSION}
|
|
2546
|
+
|
|
2547
|
+
The hosted Vibecodr Agent Computer for agents.
|
|
2548
|
+
|
|
2549
|
+
Examples:
|
|
2550
|
+
vibecodr start
|
|
2551
|
+
vibecodr try
|
|
2552
|
+
vibecodr agent connect --client codex
|
|
2553
|
+
vibecodr computer status
|
|
2554
|
+
vibecodr browser screenshot https://example.com --format png --out ./proof
|
|
2555
|
+
vibecodr browser read https://example.com
|
|
2556
|
+
vibecodr computer run "npm test" --out ./proof
|
|
2557
|
+
vibecodr work follow job_123
|
|
2558
|
+
vibecodr proof save art_123 --out ./artifacts
|
|
2559
|
+
|
|
2560
|
+
Usage:
|
|
2561
|
+
vibecodr <command> [options]
|
|
2562
|
+
vibecodr help <command>
|
|
2563
|
+
|
|
2564
|
+
Commands:
|
|
2565
|
+
start Connect and verify the Agent Computer, then return agent connection details.
|
|
2566
|
+
setup Alias for start.
|
|
2567
|
+
try Run a small browser, computer, proof, and usage check.
|
|
2568
|
+
agent Connect an agent to the hosted computer or check readiness.
|
|
2569
|
+
computer Start/status/run commands on the hosted Agent Computer.
|
|
2570
|
+
browser Ask the hosted Browser to render, read, screenshot, crawl, or inspect public HTTPS pages.
|
|
2571
|
+
work List, follow, show, or cancel hosted work.
|
|
2572
|
+
proof List, show, save, or delete saved outputs and artifacts.
|
|
2573
|
+
usage Show account-scoped Agent Computer capacity and quota progress.
|
|
2574
|
+
limits Alias for usage.
|
|
2575
|
+
dashboard Print the hosted supervision dashboard URL.
|
|
2576
|
+
doctor Explain whether the Agent Computer is ready and what to do next.
|
|
2577
|
+
|
|
2578
|
+
Advanced/debug commands:
|
|
2579
|
+
auth, login, logout, status, whoami, connect, tools, jobs, artifacts, grants, retention, scheduled-qa, plans, inspect
|
|
2580
|
+
|
|
2581
|
+
Global flags:
|
|
2582
|
+
--json Stable machine-readable output.
|
|
2583
|
+
-q, --quiet Suppress non-essential human success output.
|
|
2584
|
+
-h, --help Show help. Works after subcommands too.
|
|
2585
|
+
--version Show version.
|
|
2586
|
+
--api-url <url> Hosted Vibecodr API URL. HTTPS unless local dev is explicitly allowed.
|
|
2587
|
+
--allow-insecure-local-api Allow http://localhost API URLs for local development.
|
|
2588
|
+
--timeout-ms <ms> Network timeout from 1000 to 300000.
|
|
2589
|
+
--no-input Disable browser/device login for automation.
|
|
2590
|
+
--no-color Accepted for CLI convention compatibility. vibecodr emits no color by default.
|
|
2591
|
+
|
|
2592
|
+
Advanced credential/config flags:
|
|
2593
|
+
--credential-file <path> Read a Vibecodr grant, Clerk API key, or Clerk OAuth token from a file.
|
|
2594
|
+
--credential-stdin Read a Vibecodr grant, Clerk API key, or Clerk OAuth token from stdin.
|
|
2595
|
+
--config-dir <dir> Isolated config directory override for tests/automation.
|
|
2596
|
+
|
|
2597
|
+
Docs:
|
|
2598
|
+
https://vibecodr.space/docs/vc-tools
|
|
2599
|
+
Overview:
|
|
2600
|
+
https://vibecodr.space/vc-tools
|
|
2601
|
+
Support:
|
|
2602
|
+
https://vibecodr.space/support
|
|
2603
2603
|
`;
|
|
2604
2604
|
}
|
|
2605
2605
|
function commandHelpText(args) {
|
|
@@ -2610,287 +2610,287 @@ function commandHelpText(args) {
|
|
|
2610
2610
|
switch (command) {
|
|
2611
2611
|
case "start":
|
|
2612
2612
|
case "setup":
|
|
2613
|
-
return `
|
|
2614
|
-
|
|
2615
|
-
Connect and verify the hosted Vibecodr Agent Computer, then return the connection details an agent needs.
|
|
2616
|
-
|
|
2617
|
-
Examples:
|
|
2618
|
-
|
|
2619
|
-
|
|
2620
|
-
|
|
2621
|
-
Usage:
|
|
2622
|
-
|
|
2623
|
-
|
|
2613
|
+
return `vibecodr start
|
|
2614
|
+
|
|
2615
|
+
Connect and verify the hosted Vibecodr Agent Computer, then return the connection details an agent needs.
|
|
2616
|
+
|
|
2617
|
+
Examples:
|
|
2618
|
+
vibecodr start
|
|
2619
|
+
vibecodr start --client codex
|
|
2620
|
+
|
|
2621
|
+
Usage:
|
|
2622
|
+
vibecodr start [--client generic]
|
|
2623
|
+
vibecodr setup [--client generic]
|
|
2624
2624
|
`;
|
|
2625
2625
|
case "agent":
|
|
2626
|
-
return `
|
|
2627
|
-
|
|
2628
|
-
Connect an agent to the hosted Vibecodr
|
|
2629
|
-
|
|
2630
|
-
Usage:
|
|
2631
|
-
|
|
2632
|
-
|
|
2633
|
-
|
|
2626
|
+
return `vibecodr agent
|
|
2627
|
+
|
|
2628
|
+
Connect an agent to the hosted Vibecodr Agent Computer or check whether the computer is ready.
|
|
2629
|
+
|
|
2630
|
+
Usage:
|
|
2631
|
+
vibecodr agent connect [--client generic]
|
|
2632
|
+
vibecodr agent instructions [--client generic]
|
|
2633
|
+
vibecodr agent status
|
|
2634
2634
|
`;
|
|
2635
2635
|
case "try":
|
|
2636
|
-
return `
|
|
2637
|
-
|
|
2638
|
-
Run a small end-to-end Agent Computer check: auth, hosted API, public Browser read, hosted computer run, proof saving, and usage.
|
|
2639
|
-
|
|
2640
|
-
Usage:
|
|
2641
|
-
|
|
2636
|
+
return `vibecodr try
|
|
2637
|
+
|
|
2638
|
+
Run a small end-to-end Agent Computer check: auth, hosted API, public Browser read, hosted computer run, proof saving, and usage.
|
|
2639
|
+
|
|
2640
|
+
Usage:
|
|
2641
|
+
vibecodr try [--out ./vibecodr-proof] [--details]
|
|
2642
2642
|
`;
|
|
2643
2643
|
case "computer":
|
|
2644
|
-
return `
|
|
2645
|
-
|
|
2646
|
-
Use the hosted Agent Computer. Commands are submitted to Vibecodr
|
|
2647
|
-
Public HTTP(S) package/docs access is available by default; private, local, and internal destinations are blocked by hosted policy.
|
|
2648
|
-
|
|
2649
|
-
Usage:
|
|
2650
|
-
|
|
2651
|
-
|
|
2652
|
-
|
|
2653
|
-
|
|
2644
|
+
return `vibecodr computer
|
|
2645
|
+
|
|
2646
|
+
Use the hosted Vibecodr Agent Computer. Commands are submitted to Vibecodr; nothing is executed locally.
|
|
2647
|
+
Public HTTP(S) package/docs access is available by default; private, local, and internal destinations are blocked by hosted policy.
|
|
2648
|
+
|
|
2649
|
+
Usage:
|
|
2650
|
+
vibecodr computer start
|
|
2651
|
+
vibecodr computer status
|
|
2652
|
+
vibecodr computer run "<command>" [--timeout-ms <ms>] [--network public|off] [--out ./proof] [--no-wait] [--details]
|
|
2653
|
+
vibecodr computer test "<command>" [--timeout-ms <ms>] [--network public|off] [--out ./proof] [--no-wait] [--details]
|
|
2654
2654
|
`;
|
|
2655
2655
|
case "browser":
|
|
2656
|
-
return `
|
|
2657
|
-
|
|
2658
|
-
Use the hosted Browser against public HTTPS pages. Localhost, private networks, URL credentials, and internal hosts are blocked before hosted work is submitted.
|
|
2659
|
-
|
|
2660
|
-
Usage:
|
|
2661
|
-
|
|
2662
|
-
|
|
2663
|
-
|
|
2664
|
-
|
|
2665
|
-
|
|
2666
|
-
|
|
2667
|
-
|
|
2668
|
-
|
|
2669
|
-
Notes:
|
|
2670
|
-
browser snapshot captures a bounded inspection snapshot for your agent to analyze. browser ask is a compatibility alias; it is not a separate chat answerer.
|
|
2656
|
+
return `vibecodr browser
|
|
2657
|
+
|
|
2658
|
+
Use the hosted Browser against public HTTPS pages. Localhost, private networks, URL credentials, and internal hosts are blocked before hosted work is submitted.
|
|
2659
|
+
|
|
2660
|
+
Usage:
|
|
2661
|
+
vibecodr browser screenshot <https-url> [--format png] [--out ./proof] [--no-wait] [--details]
|
|
2662
|
+
vibecodr browser read <https-url> [--out ./proof] [--no-wait] [--details]
|
|
2663
|
+
vibecodr browser render <https-url> [--out ./proof] [--no-wait] [--details]
|
|
2664
|
+
vibecodr browser pdf <https-url> [--out ./proof] [--no-wait] [--details]
|
|
2665
|
+
vibecodr browser crawl <https-url> [--max-pages n] [--max-depth n]
|
|
2666
|
+
vibecodr browser snapshot <https-url> [--instructions <text>]
|
|
2667
|
+
vibecodr browser ask <https-url> --instructions <text>
|
|
2668
|
+
|
|
2669
|
+
Notes:
|
|
2670
|
+
browser snapshot captures a bounded inspection snapshot for your agent to analyze. browser ask is a compatibility alias; it is not a separate chat answerer.
|
|
2671
2671
|
`;
|
|
2672
2672
|
case "work":
|
|
2673
|
-
return `
|
|
2674
|
-
|
|
2675
|
-
Inspect hosted work the agent has submitted.
|
|
2676
|
-
|
|
2677
|
-
Usage:
|
|
2678
|
-
|
|
2679
|
-
|
|
2680
|
-
|
|
2681
|
-
|
|
2673
|
+
return `vibecodr work
|
|
2674
|
+
|
|
2675
|
+
Inspect hosted work the agent has submitted.
|
|
2676
|
+
|
|
2677
|
+
Usage:
|
|
2678
|
+
vibecodr work list [--limit 20]
|
|
2679
|
+
vibecodr work show <jobId>
|
|
2680
|
+
vibecodr work follow <jobId> [--out ./proof] [--details]
|
|
2681
|
+
vibecodr work cancel <jobId> --yes
|
|
2682
2682
|
`;
|
|
2683
2683
|
case "proof":
|
|
2684
|
-
return `
|
|
2685
|
-
|
|
2686
|
-
List, inspect, save, or delete outputs saved by hosted work.
|
|
2687
|
-
|
|
2688
|
-
Usage:
|
|
2689
|
-
|
|
2690
|
-
|
|
2691
|
-
|
|
2692
|
-
|
|
2684
|
+
return `vibecodr proof
|
|
2685
|
+
|
|
2686
|
+
List, inspect, save, or delete outputs saved by hosted work.
|
|
2687
|
+
|
|
2688
|
+
Usage:
|
|
2689
|
+
vibecodr proof list [--limit 20]
|
|
2690
|
+
vibecodr proof show <artifactId>
|
|
2691
|
+
vibecodr proof save <artifactId> [--out <dir|file>] [--filename <name>] [--overwrite]
|
|
2692
|
+
vibecodr proof delete <artifactId> --yes
|
|
2693
2693
|
`;
|
|
2694
2694
|
case "login":
|
|
2695
|
-
return `
|
|
2696
|
-
|
|
2697
|
-
Approve this machine to use Vibecodr
|
|
2698
|
-
|
|
2699
|
-
Examples:
|
|
2700
|
-
|
|
2701
|
-
|
|
2702
|
-
|
|
2703
|
-
|
|
2704
|
-
Usage:
|
|
2705
|
-
|
|
2706
|
-
|
|
2707
|
-
|
|
2708
|
-
Options:
|
|
2709
|
-
--no-browser Print the approval URL and code without opening a browser.
|
|
2710
|
-
--skip-verify Save without calling /v1/me.
|
|
2711
|
-
--auth-api-url <url> Override the Vibecodr Auth API exchange URL.
|
|
2712
|
-
--api-url <url> Hosted
|
|
2695
|
+
return `vibecodr login
|
|
2696
|
+
|
|
2697
|
+
Approve this machine to use Vibecodr. Plain login opens the browser/device approval flow.
|
|
2698
|
+
|
|
2699
|
+
Examples:
|
|
2700
|
+
vibecodr login
|
|
2701
|
+
vibecodr login --credential-file ./vibecodr-credential.txt
|
|
2702
|
+
vibecodr login --credential-stdin
|
|
2703
|
+
|
|
2704
|
+
Usage:
|
|
2705
|
+
vibecodr login [--no-browser]
|
|
2706
|
+
vibecodr login (--credential-file <path> | --credential-stdin)
|
|
2707
|
+
|
|
2708
|
+
Options:
|
|
2709
|
+
--no-browser Print the approval URL and code without opening a browser.
|
|
2710
|
+
--skip-verify Save without calling /v1/me.
|
|
2711
|
+
--auth-api-url <url> Override the Vibecodr Auth API exchange URL.
|
|
2712
|
+
--api-url <url> Hosted Vibecodr API URL saved for this approval.
|
|
2713
2713
|
`;
|
|
2714
2714
|
case "auth":
|
|
2715
|
-
return `
|
|
2716
|
-
|
|
2717
|
-
Diagnose or export the current Agent Computer approval without printing secrets.
|
|
2718
|
-
|
|
2719
|
-
Usage:
|
|
2720
|
-
|
|
2721
|
-
|
|
2722
|
-
|
|
2723
|
-
|
|
2724
|
-
Notes:
|
|
2725
|
-
diagnose shows which credential source is winning, whether VC_TOOLS_CONFIG_DIR isolates this session, and whether the stored credential store is readable.
|
|
2726
|
-
export-agent-env writes the durable local credential when available, otherwise a bearer grant, and returns the matching file env var. The secret value is never printed.
|
|
2715
|
+
return `vibecodr auth
|
|
2716
|
+
|
|
2717
|
+
Diagnose or export the current Agent Computer approval without printing secrets.
|
|
2718
|
+
|
|
2719
|
+
Usage:
|
|
2720
|
+
vibecodr auth diagnose [--json]
|
|
2721
|
+
vibecodr auth status [--json]
|
|
2722
|
+
vibecodr auth export-agent-env --out <file> --yes [--overwrite]
|
|
2723
|
+
|
|
2724
|
+
Notes:
|
|
2725
|
+
diagnose shows which credential source is winning, whether VC_TOOLS_CONFIG_DIR isolates this session, and whether the stored credential store is readable.
|
|
2726
|
+
export-agent-env writes the durable local credential when available, otherwise a bearer grant, and returns the matching file env var. The secret value is never printed.
|
|
2727
2727
|
`;
|
|
2728
2728
|
case "logout":
|
|
2729
|
-
return `
|
|
2730
|
-
|
|
2731
|
-
Remove the saved Agent Computer approval.
|
|
2732
|
-
|
|
2733
|
-
Usage:
|
|
2734
|
-
|
|
2729
|
+
return `vibecodr logout
|
|
2730
|
+
|
|
2731
|
+
Remove the saved Agent Computer approval.
|
|
2732
|
+
|
|
2733
|
+
Usage:
|
|
2734
|
+
vibecodr logout --yes
|
|
2735
2735
|
`;
|
|
2736
2736
|
case "status":
|
|
2737
|
-
return `
|
|
2738
|
-
|
|
2739
|
-
Show whether this shell/agent has an Agent Computer approval saved, without requiring auth.
|
|
2740
|
-
|
|
2741
|
-
Usage:
|
|
2742
|
-
|
|
2737
|
+
return `vibecodr status
|
|
2738
|
+
|
|
2739
|
+
Show whether this shell/agent has an Agent Computer approval saved, without requiring auth.
|
|
2740
|
+
|
|
2741
|
+
Usage:
|
|
2742
|
+
vibecodr status [--json]
|
|
2743
2743
|
`;
|
|
2744
2744
|
case "whoami":
|
|
2745
|
-
return `
|
|
2746
|
-
|
|
2747
|
-
Show the Vibecodr account and plan for the approved Agent Computer.
|
|
2748
|
-
|
|
2749
|
-
Usage:
|
|
2750
|
-
|
|
2745
|
+
return `vibecodr whoami
|
|
2746
|
+
|
|
2747
|
+
Show the Vibecodr account and plan for the approved Agent Computer.
|
|
2748
|
+
|
|
2749
|
+
Usage:
|
|
2750
|
+
vibecodr whoami [--json]
|
|
2751
2751
|
`;
|
|
2752
2752
|
case "connect":
|
|
2753
|
-
return `
|
|
2754
|
-
|
|
2755
|
-
Fetch hosted MCP connection metadata for an agent client. Most users should use
|
|
2756
|
-
|
|
2757
|
-
Usage:
|
|
2758
|
-
|
|
2753
|
+
return `vibecodr connect
|
|
2754
|
+
|
|
2755
|
+
Fetch hosted MCP connection metadata for an agent client. Most users should use vibecodr agent connect.
|
|
2756
|
+
|
|
2757
|
+
Usage:
|
|
2758
|
+
vibecodr connect [--client generic]
|
|
2759
2759
|
`;
|
|
2760
2760
|
case "tools":
|
|
2761
2761
|
if (subcommand === "test") {
|
|
2762
|
-
return `
|
|
2763
|
-
|
|
2764
|
-
Submit a no-local-execution hosted tool test after validating local inputs.
|
|
2765
|
-
|
|
2766
|
-
Examples:
|
|
2767
|
-
|
|
2768
|
-
|
|
2769
|
-
|
|
2770
|
-
|
|
2771
|
-
|
|
2772
|
-
|
|
2773
|
-
Usage:
|
|
2774
|
-
|
|
2775
|
-
|
|
2776
|
-
Notes:
|
|
2777
|
-
Browser Quick Actions accept up to 180000 ms. Browser agent tasks accept up to 3600000 ms and are plan-capped by the hosted service. Sandbox tasks accept up to 1800000 ms and are plan-capped by the hosted service.
|
|
2762
|
+
return `vibecodr tools test
|
|
2763
|
+
|
|
2764
|
+
Submit a no-local-execution hosted tool test after validating local inputs.
|
|
2765
|
+
|
|
2766
|
+
Examples:
|
|
2767
|
+
vibecodr tools test browser.render https://example.com
|
|
2768
|
+
vibecodr tools test browser.agent https://example.com --timeout-ms 1200000 --idle-timeout-ms 600000
|
|
2769
|
+
vibecodr tools test browser.crawl https://example.com/docs --max-pages 10 --max-depth 1
|
|
2770
|
+
vibecodr tools test sandbox.run --command "npm test"
|
|
2771
|
+
vibecodr tools test usage
|
|
2772
|
+
|
|
2773
|
+
Usage:
|
|
2774
|
+
vibecodr tools test <capability> [target] [--command <cmd>] [--timeout-ms <ms>] [--max-pages n] [--max-depth n] [--no-render]
|
|
2775
|
+
|
|
2776
|
+
Notes:
|
|
2777
|
+
Browser Quick Actions accept up to 180000 ms. Browser agent tasks accept up to 3600000 ms and are plan-capped by the hosted service. Sandbox tasks accept up to 1800000 ms and are plan-capped by the hosted service.
|
|
2778
2778
|
`;
|
|
2779
2779
|
}
|
|
2780
|
-
return `
|
|
2781
|
-
|
|
2782
|
-
Advanced: list granted low-level capabilities or submit a hosted capability test.
|
|
2783
|
-
|
|
2784
|
-
Usage:
|
|
2785
|
-
|
|
2786
|
-
|
|
2780
|
+
return `vibecodr tools
|
|
2781
|
+
|
|
2782
|
+
Advanced: list granted low-level capabilities or submit a hosted capability test.
|
|
2783
|
+
|
|
2784
|
+
Usage:
|
|
2785
|
+
vibecodr tools list
|
|
2786
|
+
vibecodr tools test <capability> [target] [--command <cmd>]
|
|
2787
2787
|
`;
|
|
2788
2788
|
case "jobs":
|
|
2789
|
-
return `
|
|
2790
|
-
|
|
2791
|
-
Advanced alias for
|
|
2792
|
-
|
|
2793
|
-
Usage:
|
|
2794
|
-
|
|
2795
|
-
|
|
2796
|
-
|
|
2789
|
+
return `vibecodr jobs
|
|
2790
|
+
|
|
2791
|
+
Advanced alias for vibecodr work.
|
|
2792
|
+
|
|
2793
|
+
Usage:
|
|
2794
|
+
vibecodr jobs list [--limit 20]
|
|
2795
|
+
vibecodr jobs status <jobId>
|
|
2796
|
+
vibecodr jobs cancel <jobId> --yes
|
|
2797
2797
|
`;
|
|
2798
2798
|
case "artifacts":
|
|
2799
|
-
return `
|
|
2800
|
-
|
|
2801
|
-
Advanced alias for
|
|
2802
|
-
|
|
2803
|
-
Usage:
|
|
2804
|
-
|
|
2805
|
-
|
|
2806
|
-
|
|
2807
|
-
|
|
2808
|
-
|
|
2809
|
-
|
|
2810
|
-
Notes:
|
|
2811
|
-
Delete removes the hosted shelf row and R2 bytes for the authenticated actor.
|
|
2812
|
-
Pull output must stay inside the current workspace. Use --out ./artifacts for a directory, --out ./artifacts/report.pdf for an explicit file target, or --filename <name> to choose a file name inside a directory output.
|
|
2799
|
+
return `vibecodr artifacts
|
|
2800
|
+
|
|
2801
|
+
Advanced alias for vibecodr proof. Pulls and uploads are bounded to the current workspace.
|
|
2802
|
+
|
|
2803
|
+
Usage:
|
|
2804
|
+
vibecodr artifacts list [--limit 20]
|
|
2805
|
+
vibecodr artifacts get <artifactId>
|
|
2806
|
+
vibecodr artifacts pull <artifactId> [--out <dir|file>] [--filename <name>] [--overwrite]
|
|
2807
|
+
vibecodr artifacts create --file <path> [--kind <kind>] --yes
|
|
2808
|
+
vibecodr artifacts delete <artifactId> --yes
|
|
2809
|
+
|
|
2810
|
+
Notes:
|
|
2811
|
+
Delete removes the hosted shelf row and R2 bytes for the authenticated actor.
|
|
2812
|
+
Pull output must stay inside the current workspace. Use --out ./artifacts for a directory, --out ./artifacts/report.pdf for an explicit file target, or --filename <name> to choose a file name inside a directory output.
|
|
2813
2813
|
`;
|
|
2814
2814
|
case "usage":
|
|
2815
|
-
return `
|
|
2816
|
-
|
|
2817
|
-
Show account-scoped Agent Computer capacity and quota progress.
|
|
2818
|
-
|
|
2819
|
-
Usage:
|
|
2820
|
-
|
|
2821
|
-
|
|
2822
|
-
Alias:
|
|
2823
|
-
|
|
2815
|
+
return `vibecodr usage
|
|
2816
|
+
|
|
2817
|
+
Show account-scoped Agent Computer capacity and quota progress.
|
|
2818
|
+
|
|
2819
|
+
Usage:
|
|
2820
|
+
vibecodr usage [--json]
|
|
2821
|
+
|
|
2822
|
+
Alias:
|
|
2823
|
+
vibecodr limits
|
|
2824
2824
|
`;
|
|
2825
2825
|
case "limits":
|
|
2826
|
-
return `
|
|
2827
|
-
|
|
2828
|
-
Alias for
|
|
2829
|
-
|
|
2830
|
-
Usage:
|
|
2831
|
-
|
|
2826
|
+
return `vibecodr limits
|
|
2827
|
+
|
|
2828
|
+
Alias for vibecodr usage. Shows account-scoped Agent Computer capacity and quota progress.
|
|
2829
|
+
|
|
2830
|
+
Usage:
|
|
2831
|
+
vibecodr limits [--json]
|
|
2832
2832
|
`;
|
|
2833
2833
|
case "grants":
|
|
2834
|
-
return `
|
|
2835
|
-
|
|
2836
|
-
Show effective tool grants. With no subcommand, this defaults to list.
|
|
2837
|
-
|
|
2838
|
-
Usage:
|
|
2839
|
-
|
|
2840
|
-
|
|
2834
|
+
return `vibecodr grants
|
|
2835
|
+
|
|
2836
|
+
Show effective tool grants. With no subcommand, this defaults to list.
|
|
2837
|
+
|
|
2838
|
+
Usage:
|
|
2839
|
+
vibecodr grants
|
|
2840
|
+
vibecodr grants list [--project <id>] [--user <id>]
|
|
2841
2841
|
`;
|
|
2842
2842
|
case "retention":
|
|
2843
|
-
return `
|
|
2844
|
-
|
|
2845
|
-
Show or update retention policy. Updates mutate hosted policy and require --yes.
|
|
2846
|
-
|
|
2847
|
-
Usage:
|
|
2848
|
-
|
|
2849
|
-
|
|
2843
|
+
return `vibecodr retention
|
|
2844
|
+
|
|
2845
|
+
Show or update retention policy. Updates mutate hosted policy and require --yes.
|
|
2846
|
+
|
|
2847
|
+
Usage:
|
|
2848
|
+
vibecodr retention show
|
|
2849
|
+
vibecodr retention set [--logs-days n] [--artifacts-days n] [--recordings off|opt-in|admin] --yes
|
|
2850
2850
|
`;
|
|
2851
2851
|
case "scheduled-qa":
|
|
2852
|
-
return `
|
|
2853
|
-
|
|
2854
|
-
Create and manage plan-capped scheduled Browser Quick Action checks. Scheduled QA only accepts public HTTPS browser render, screenshot, markdown, and PDF checks.
|
|
2855
|
-
|
|
2856
|
-
Usage:
|
|
2857
|
-
|
|
2858
|
-
|
|
2859
|
-
|
|
2860
|
-
|
|
2861
|
-
|
|
2852
|
+
return `vibecodr scheduled-qa
|
|
2853
|
+
|
|
2854
|
+
Create and manage plan-capped scheduled Browser Quick Action checks. Scheduled QA only accepts public HTTPS browser render, screenshot, markdown, and PDF checks.
|
|
2855
|
+
|
|
2856
|
+
Usage:
|
|
2857
|
+
vibecodr scheduled-qa list
|
|
2858
|
+
vibecodr scheduled-qa create <https-url> [--capability browser.render|browser.screenshot|browser.markdown|browser.pdf] [--interval-minutes n] [--label text] [--run-now] --yes
|
|
2859
|
+
vibecodr scheduled-qa pause <id> --yes
|
|
2860
|
+
vibecodr scheduled-qa resume <id> [--run-now] --yes
|
|
2861
|
+
vibecodr scheduled-qa delete <id> --yes
|
|
2862
2862
|
`;
|
|
2863
2863
|
case "plans":
|
|
2864
|
-
return `
|
|
2865
|
-
|
|
2866
|
-
Show public Free, Creator, and Pro packaging. Works offline with local fallback data.
|
|
2867
|
-
|
|
2868
|
-
Usage:
|
|
2869
|
-
|
|
2864
|
+
return `vibecodr plans
|
|
2865
|
+
|
|
2866
|
+
Show public Free, Creator, and Pro packaging. Works offline with local fallback data.
|
|
2867
|
+
|
|
2868
|
+
Usage:
|
|
2869
|
+
vibecodr plans [--json]
|
|
2870
2870
|
`;
|
|
2871
2871
|
case "dashboard":
|
|
2872
|
-
return `
|
|
2873
|
-
|
|
2874
|
-
Print a hosted supervision dashboard URL. Sections: ${DASHBOARD_SECTIONS.map((item) => item.id).join(", ")}.
|
|
2875
|
-
|
|
2876
|
-
Usage:
|
|
2877
|
-
|
|
2872
|
+
return `vibecodr dashboard
|
|
2873
|
+
|
|
2874
|
+
Print a hosted supervision dashboard URL. Sections: ${DASHBOARD_SECTIONS.map((item) => item.id).join(", ")}.
|
|
2875
|
+
|
|
2876
|
+
Usage:
|
|
2877
|
+
vibecodr dashboard [section]
|
|
2878
2878
|
`;
|
|
2879
2879
|
case "inspect":
|
|
2880
|
-
return `
|
|
2881
|
-
|
|
2882
|
-
Show goal-coverage inspections for local release readiness.
|
|
2883
|
-
|
|
2884
|
-
Usage:
|
|
2885
|
-
|
|
2880
|
+
return `vibecodr inspect
|
|
2881
|
+
|
|
2882
|
+
Show goal-coverage inspections for local release readiness.
|
|
2883
|
+
|
|
2884
|
+
Usage:
|
|
2885
|
+
vibecodr inspect [--json]
|
|
2886
2886
|
`;
|
|
2887
2887
|
case "doctor":
|
|
2888
|
-
return `
|
|
2889
|
-
|
|
2890
|
-
Explain whether the Agent Computer is ready and what to do next.
|
|
2891
|
-
|
|
2892
|
-
Usage:
|
|
2893
|
-
|
|
2888
|
+
return `vibecodr doctor
|
|
2889
|
+
|
|
2890
|
+
Explain whether the Agent Computer is ready and what to do next.
|
|
2891
|
+
|
|
2892
|
+
Usage:
|
|
2893
|
+
vibecodr doctor [--json]
|
|
2894
2894
|
`;
|
|
2895
2895
|
default:
|
|
2896
2896
|
throw unknownCommandError(command);
|
|
@@ -2899,8 +2899,8 @@ Usage:
|
|
|
2899
2899
|
function helpData(topic) {
|
|
2900
2900
|
return {
|
|
2901
2901
|
version: VERSION,
|
|
2902
|
-
binary: "
|
|
2903
|
-
package: "@vibecodr/
|
|
2902
|
+
binary: "vibecodr",
|
|
2903
|
+
package: "@vibecodr/cli",
|
|
2904
2904
|
topic,
|
|
2905
2905
|
capabilities: CAPABILITIES,
|
|
2906
2906
|
grants: LAUNCH_TOOL_GRANTS,
|
|
@@ -2913,12 +2913,12 @@ function helpData(topic) {
|
|
|
2913
2913
|
}
|
|
2914
2914
|
function unknownCommandError(command) {
|
|
2915
2915
|
const suggestion = command === undefined ? undefined : suggest(command, TOP_LEVEL_COMMANDS);
|
|
2916
|
-
const suggestionText = suggestion ? ` Did you mean "
|
|
2917
|
-
return new CliError("input.unknown_command", `Unknown command "${command ?? ""}".${suggestionText} Run
|
|
2916
|
+
const suggestionText = suggestion ? ` Did you mean "vibecodr ${suggestion}"?` : "";
|
|
2917
|
+
return new CliError("input.unknown_command", `Unknown command "${command ?? ""}".${suggestionText} Run vibecodr --help.`, 2);
|
|
2918
2918
|
}
|
|
2919
2919
|
function unknownSubcommandError(command, subcommand, allowed, usage) {
|
|
2920
2920
|
const suggestion = subcommand === undefined ? undefined : suggest(subcommand, allowed);
|
|
2921
|
-
const suggestionText = suggestion ? ` Did you mean "
|
|
2921
|
+
const suggestionText = suggestion ? ` Did you mean "vibecodr ${command} ${suggestion}"?` : "";
|
|
2922
2922
|
return new CliError("input.unknown_subcommand", `Unknown ${command} subcommand "${subcommand ?? ""}".${suggestionText} ${usage}`, 2);
|
|
2923
2923
|
}
|
|
2924
2924
|
function suggest(input, candidates) {
|