@vibecodr/cli 1.0.10 → 1.0.13

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 CHANGED
@@ -2,6 +2,29 @@
2
2
 
3
3
  Pre-1.0.0 history for the `@vibecodr/cli@0.2.x` and `0.1.x` lines lives at [`docs/legacy/CHANGELOG-mcp-cli.md`](docs/legacy/CHANGELOG-mcp-cli.md). The `@vibecodr/vc-tools@0.1.x` line was the other half of the May 2026 merge; its source history is preserved in the archived [`BradenHartsell/vc-tools`](https://github.com/BradenHartsell/vc-tools) repository.
4
4
 
5
+ ## 1.0.13
6
+
7
+ Makes `browser snapshot` a plain capture command instead of a confusing ask-style lane.
8
+
9
+ - `vibecodr browser snapshot <url>` no longer advertises or accepts `--instructions`; the help text now says plainly that snapshot captures page state and does not prompt an agent or model.
10
+ - `vibecodr browser ask` is kept as an advanced compatibility alias, but its visible flag is now `--note`, and the help text says it saves that note with the snapshot rather than answering like chat.
11
+ - The hosted MCP `browser.snapshot` tool schema no longer exposes `instructions` or `actions`; raw `browser.agent_task` remains the lower-level compatibility capability for advanced callers.
12
+
13
+ ## 1.0.12
14
+
15
+ Makes hosted Agent Computer outputs visible and easy to save from the first command result.
16
+
17
+ - `vibecodr browser ...`, `vibecodr computer ...`, and `vibecodr work follow` now accept `--local`, which waits for the hosted job and saves the completed artifact into `./vibecodr-proof`.
18
+ - Completed output now includes the artifact handle plus ready-to-run `vibecodr proof show` and `vibecodr proof save` commands instead of returning only `{ "status": "completed" }`.
19
+ - Root help, command help, docs, fixtures, and tests now advertise and lock the `--local` path for the simplest user flow.
20
+
21
+ ## 1.0.11
22
+
23
+ Supersedes 1.0.10 with the same CLI auth guidance plus a release-packaging guard.
24
+
25
+ - `prepack`, `publish:release`, and `verify:artifact` now remove and forbid `dist/dryrun/` so Wrangler dry-run output can never be swept into the npm package.
26
+ - Published after the `vc-tools-api` worker read back `1.0.10`; the runtime behavior remains the first-run guidance from 1.0.10.
27
+
5
28
  ## 1.0.10
6
29
 
7
30
  Aligns the CLI first-run guidance with the Vibecodr CLI product pages without renaming Agent Computer, MCP Gateway, or the underlying credential lanes.
package/README.md CHANGED
@@ -58,7 +58,7 @@ vibecodr install codex
58
58
 
59
59
  # 3. Set up the hosted Agent Computer when you want browser/computer work.
60
60
  vibecodr start
61
- vibecodr browser screenshot https://example.com --out ./proof
61
+ vibecodr browser screenshot https://example.com --local
62
62
  ```
63
63
 
64
64
  Power users and automation should prefer the explicit surfaces and stable JSON:
package/dist/app/help.js CHANGED
@@ -44,7 +44,7 @@ export function rootHelpText() {
44
44
  "",
45
45
  "Do useful things:",
46
46
  " vibecodr browser read https://example.com",
47
- " vibecodr browser screenshot https://example.com --out ./proof",
47
+ " vibecodr browser screenshot https://example.com --local",
48
48
  " vibecodr upload --zip ./project.zip",
49
49
  " vibecodr pulse list",
50
50
  " vibecodr feedback \"This part was confusing\"",
@@ -1 +1 @@
1
- {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/app/help.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/app/help.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,7 @@ const VERSION = VC_TOOLS_VERSION;
16
16
  const MAX_CREDENTIAL_BYTES = 64 * 1024;
17
17
  const DEFAULT_AUTH_API_URL = "https://api.vibecodr.space";
18
18
  const GRANT_REFRESH_SKEW_SECONDS = 60;
19
- const ARTIFACT_OUTPUT_WORKSPACE_MESSAGE = "Artifact output is workspace-bounded so downloaded bytes can only be written to files you intentionally target inside this workspace. Use --out ./artifacts, --out ./artifacts/report.pdf, or cd to the intended workspace and use --out .";
19
+ const ARTIFACT_OUTPUT_WORKSPACE_MESSAGE = "Artifact output is workspace-bounded so downloaded bytes can only be written to files you intentionally target inside this workspace. Use --local for ./vibecodr-proof, --out ./artifacts, --out ./artifacts/report.pdf, or cd to the intended workspace and use --out .";
20
20
  const ARTIFACT_INPUT_WORKSPACE_MESSAGE = "Artifact upload sources are workspace-bounded so the CLI only reads files you intentionally target inside this workspace. Move the file into this workspace, or cd to the workspace that contains it.";
21
21
  export async function runCli(argv, options = {}) {
22
22
  const stdout = options.stdout ?? process.stdout;
@@ -646,13 +646,16 @@ async function commandBrowser(context, subcommand, rest) {
646
646
  return submitHostedCapability(context, "browser.pdf", parsed, "Asked the hosted Browser to create a PDF.", { autoFollow: true });
647
647
  case "crawl":
648
648
  return submitHostedCapability(context, "browser.crawl", parsed, "Asked the hosted Browser to crawl the public site.", { autoFollow: true });
649
- case "snapshot":
649
+ case "snapshot": {
650
+ const normalized = normalizeBrowserSnapshotOptions(parsed);
651
+ return submitHostedCapability(context, "browser.snapshot", normalized, "Captured a hosted Browser snapshot.", { autoFollow: true });
652
+ }
650
653
  case "ask": {
651
654
  const normalized = normalizeBrowserAskOptions(parsed);
652
- return submitHostedCapability(context, "browser.ask", normalized, "Asked the hosted Browser to capture an inspection snapshot for your agent.", { autoFollow: true });
655
+ return submitHostedCapability(context, "browser.ask", normalized, "Captured a hosted Browser snapshot with your note attached.", { autoFollow: true });
653
656
  }
654
657
  default:
655
- 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>.");
658
+ 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> --local.");
656
659
  }
657
660
  }
658
661
  async function commandComputer(context, subcommand, rest) {
@@ -725,8 +728,12 @@ async function commandToolsTest(context, parsed) {
725
728
  }
726
729
  return submitHostedCapability(context, capabilityInput, { positionals: target === undefined ? [] : [target], flags: parsed.flags });
727
730
  }
731
+ const DEFAULT_LOCAL_PROOF_DIR = "vibecodr-proof";
728
732
  async function submitHostedCapability(context, capabilityInput, parsed, successMessage, options = {}) {
729
733
  const capability = normalizeCapabilityName(capabilityInput);
734
+ if (getBooleanFlag(parsed.flags, "local") && shouldSkipWait(parsed)) {
735
+ throw new CliError("input.local_requires_wait", "--local saves the completed output, so it cannot be combined with --no-wait.", 2);
736
+ }
730
737
  const payload = buildToolTestPayload(capability, parsed.positionals[0], parsed, context.globals.timeoutMs === 30_000 ? undefined : context.globals.timeoutMs);
731
738
  const { profile } = await context.store.getProfile(context.globals.profile);
732
739
  const client = createClient(context, profile, await resolveToken(context, true));
@@ -757,8 +764,8 @@ async function followSubmittedWork(context, client, capability, submitted, parse
757
764
  ? submitted
758
765
  : await pollWorkUntilTerminal(client, jobId, parsed);
759
766
  const artifactId = artifactIdFromWork(terminal);
760
- const proof = artifactId && getStringFlag(parsed.flags, "out") !== undefined
761
- ? await saveArtifact(context, client, artifactId, parsed)
767
+ const proof = artifactId && shouldSaveArtifact(parsed)
768
+ ? await saveArtifact(context, client, artifactId, parsedWithLocalOutput(parsed))
762
769
  : undefined;
763
770
  return {
764
771
  message: formatCompletedWorkMessage(capability, terminal, proof),
@@ -772,8 +779,8 @@ async function commandWorkFollow(context, parsed) {
772
779
  const client = createClient(context, profile, await resolveToken(context, true));
773
780
  const job = await pollWorkUntilTerminal(client, jobId, parsed);
774
781
  const artifactId = artifactIdFromWork(job);
775
- const proof = artifactId && getStringFlag(parsed.flags, "out") !== undefined
776
- ? await saveArtifact(context, client, artifactId, parsed)
782
+ const proof = artifactId && shouldSaveArtifact(parsed)
783
+ ? await saveArtifact(context, client, artifactId, parsedWithLocalOutput(parsed))
777
784
  : undefined;
778
785
  return {
779
786
  message: formatCompletedWorkMessage(undefined, job, proof),
@@ -828,11 +835,69 @@ function artifactIdFromWork(value) {
828
835
  }
829
836
  return undefined;
830
837
  }
838
+ function workArtifactSummary(value) {
839
+ if (!isRecord(value)) {
840
+ return undefined;
841
+ }
842
+ const source = isRecord(value.result) && typeof value.result.artifactId === "string"
843
+ ? value.result
844
+ : typeof value.artifactId === "string"
845
+ ? value
846
+ : undefined;
847
+ if (source) {
848
+ return {
849
+ id: String(source.artifactId),
850
+ ...(typeof source.kind === "string" ? { kind: source.kind } : {}),
851
+ ...(typeof source.contentType === "string" ? { contentType: source.contentType } : {}),
852
+ ...(typeof source.bytes === "number" ? { bytes: source.bytes } : {})
853
+ };
854
+ }
855
+ if (Array.isArray(value.artifacts)) {
856
+ const first = value.artifacts.find((item) => isRecord(item) && typeof item.id === "string");
857
+ if (isRecord(first) && typeof first.id === "string") {
858
+ return {
859
+ id: first.id,
860
+ ...(typeof first.kind === "string" ? { kind: first.kind } : {}),
861
+ ...(typeof first.contentType === "string" ? { contentType: first.contentType } : {}),
862
+ ...(typeof first.bytes === "number" ? { bytes: first.bytes } : {})
863
+ };
864
+ }
865
+ }
866
+ return undefined;
867
+ }
868
+ function shouldSaveArtifact(parsed) {
869
+ return getStringFlag(parsed.flags, "out") !== undefined || getBooleanFlag(parsed.flags, "local");
870
+ }
871
+ function parsedWithLocalOutput(parsed) {
872
+ if (getStringFlag(parsed.flags, "out") !== undefined || !getBooleanFlag(parsed.flags, "local")) {
873
+ return parsed;
874
+ }
875
+ return {
876
+ ...parsed,
877
+ flags: {
878
+ ...parsed.flags,
879
+ out: DEFAULT_LOCAL_PROOF_DIR
880
+ }
881
+ };
882
+ }
831
883
  function formatCompletedWorkMessage(capability, work, proof) {
832
884
  const status = workStatus(work) ?? "completed";
833
885
  if (status === "completed") {
834
- const saved = proof ? `\nProof saved: ${proof.path}` : "";
835
- return `${completedCapabilityMessage(capability)}${saved}`;
886
+ if (proof) {
887
+ return `${completedCapabilityMessage(capability)}\nSaved output: ${proof.path}`;
888
+ }
889
+ const artifact = workArtifactSummary(work);
890
+ if (artifact) {
891
+ const details = [artifact.kind, formatByteCount(artifact.bytes)].filter(Boolean).join(", ");
892
+ return [
893
+ completedCapabilityMessage(capability),
894
+ `Output ready${details ? `: ${details}` : "."}`,
895
+ `View it: vibecodr proof show ${artifact.id}`,
896
+ `Save it: vibecodr proof save ${artifact.id} --out ./${DEFAULT_LOCAL_PROOF_DIR}`,
897
+ `Next time: add --local to save it automatically.`
898
+ ].join("\n");
899
+ }
900
+ return completedCapabilityMessage(capability);
836
901
  }
837
902
  if (status === "queued" || status === "running") {
838
903
  const id = jobIdFromWork(work);
@@ -866,16 +931,42 @@ function completedCapabilityMessage(capability) {
866
931
  return "Hosted work completed.";
867
932
  }
868
933
  }
934
+ function formatByteCount(bytes) {
935
+ if (bytes === undefined || !Number.isFinite(bytes)) {
936
+ return undefined;
937
+ }
938
+ if (bytes < 1024) {
939
+ return `${bytes} B`;
940
+ }
941
+ const kib = bytes / 1024;
942
+ if (kib < 1024) {
943
+ return `${Math.round(kib * 10) / 10} KB`;
944
+ }
945
+ const mib = kib / 1024;
946
+ return `${Math.round(mib * 10) / 10} MB`;
947
+ }
869
948
  function publicWorkResult(capability, work, parsed, proof) {
870
949
  const details = getBooleanFlag(parsed.flags, "details");
950
+ const artifact = workArtifactSummary(work);
871
951
  const result = {
872
952
  status: workStatus(work) ?? "completed"
873
953
  };
874
954
  if (capability) {
875
955
  result.tool = userToolName(capability);
876
956
  }
957
+ if (artifact) {
958
+ result.artifact = {
959
+ id: artifact.id,
960
+ ...(artifact.kind ? { kind: artifact.kind } : {}),
961
+ ...(artifact.contentType ? { contentType: artifact.contentType } : {}),
962
+ ...(artifact.bytes !== undefined ? { bytes: artifact.bytes } : {}),
963
+ showCommand: `vibecodr proof show ${artifact.id}`,
964
+ saveCommand: `vibecodr proof save ${artifact.id} --out ./${DEFAULT_LOCAL_PROOF_DIR}`
965
+ };
966
+ }
877
967
  if (proof) {
878
968
  result.proof = {
969
+ artifactId: proof.artifactId,
879
970
  path: proof.path,
880
971
  bytes: proof.bytes,
881
972
  contentType: proof.contentType
@@ -905,12 +996,31 @@ function userToolName(capability) {
905
996
  return "computer.test";
906
997
  return capability;
907
998
  }
999
+ function normalizeBrowserSnapshotOptions(parsed) {
1000
+ const [url, ...extraParts] = parsed.positionals;
1001
+ if (extraParts.length > 0 || parsed.flags.instructions !== undefined || parsed.flags.note !== undefined) {
1002
+ throw new CliError("input.snapshot_is_not_prompted", "browser snapshot captures the page state; it does not prompt an agent or model. Remove the note/instructions, or use `vibecodr browser ask <url> --note \"...\"` for the advanced compatibility lane.", 2);
1003
+ }
1004
+ return {
1005
+ positionals: url === undefined ? [] : [url],
1006
+ flags: parsed.flags
1007
+ };
1008
+ }
908
1009
  function normalizeBrowserAskOptions(parsed) {
909
1010
  const [url, ...instructionParts] = parsed.positionals;
910
1011
  const flags = { ...parsed.flags };
1012
+ const note = getStringFlag(flags, "note");
1013
+ const instructions = getStringFlag(flags, "instructions");
1014
+ if (instructions === undefined && note !== undefined) {
1015
+ flags.instructions = note;
1016
+ }
1017
+ delete flags.note;
911
1018
  if (getStringFlag(flags, "instructions") === undefined && instructionParts.length > 0) {
912
1019
  flags.instructions = instructionParts.join(" ");
913
1020
  }
1021
+ if (getStringFlag(flags, "instructions") === undefined) {
1022
+ throw new CliError("input.ask_note_required", "browser ask is an advanced compatibility alias and needs a note. For a normal capture, use `vibecodr browser snapshot <url> --local`.", 2);
1023
+ }
914
1024
  return {
915
1025
  positionals: url === undefined ? [] : [url],
916
1026
  flags
@@ -2586,9 +2696,9 @@ Examples:
2586
2696
  vibecodr try
2587
2697
  vibecodr agent connect --client codex
2588
2698
  vibecodr computer status
2589
- vibecodr browser screenshot https://example.com --format png --out ./proof
2699
+ vibecodr browser screenshot https://example.com --format png --local
2590
2700
  vibecodr browser read https://example.com
2591
- vibecodr computer run "npm test" --out ./proof
2701
+ vibecodr computer run "npm test" --local
2592
2702
  vibecodr work follow job_123
2593
2703
  vibecodr proof save art_123 --out ./artifacts
2594
2704
 
@@ -2602,7 +2712,7 @@ Commands:
2602
2712
  try Run a small browser, computer, proof, and usage check.
2603
2713
  agent Connect an agent to the hosted computer or check readiness.
2604
2714
  computer Start/status/run commands on the hosted Agent Computer.
2605
- browser Ask the hosted Browser to render, read, screenshot, crawl, or inspect public HTTPS pages.
2715
+ browser Capture, read, render, crawl, or inspect public HTTPS pages with the hosted Browser.
2606
2716
  work List, follow, show, or cancel hosted work.
2607
2717
  proof List, show, save, or delete saved outputs and artifacts.
2608
2718
  usage Show account-scoped Agent Computer capacity and quota progress.
@@ -2684,8 +2794,8 @@ Public HTTP(S) package/docs access is available by default; private, local, and
2684
2794
  Usage:
2685
2795
  vibecodr computer start
2686
2796
  vibecodr computer status
2687
- vibecodr computer run "<command>" [--timeout-ms <ms>] [--network public|off] [--out ./proof] [--no-wait] [--details]
2688
- vibecodr computer test "<command>" [--timeout-ms <ms>] [--network public|off] [--out ./proof] [--no-wait] [--details]
2797
+ vibecodr computer run "<command>" [--timeout-ms <ms>] [--network public|off] [--local|--out ./proof] [--no-wait] [--details]
2798
+ vibecodr computer test "<command>" [--timeout-ms <ms>] [--network public|off] [--local|--out ./proof] [--no-wait] [--details]
2689
2799
  `;
2690
2800
  case "browser":
2691
2801
  return `vibecodr browser
@@ -2693,16 +2803,20 @@ Usage:
2693
2803
  Use the hosted Browser against public HTTPS pages. Localhost, private networks, URL credentials, and internal hosts are blocked before hosted work is submitted.
2694
2804
 
2695
2805
  Usage:
2696
- vibecodr browser screenshot <https-url> [--format png] [--out ./proof] [--no-wait] [--details]
2697
- vibecodr browser read <https-url> [--out ./proof] [--no-wait] [--details]
2698
- vibecodr browser render <https-url> [--out ./proof] [--no-wait] [--details]
2699
- vibecodr browser pdf <https-url> [--out ./proof] [--no-wait] [--details]
2700
- vibecodr browser crawl <https-url> [--max-pages n] [--max-depth n]
2701
- vibecodr browser snapshot <https-url> [--instructions <text>]
2702
- vibecodr browser ask <https-url> --instructions <text>
2806
+ vibecodr browser screenshot <https-url> [--format png] [--local|--out ./proof] [--no-wait] [--details]
2807
+ vibecodr browser read <https-url> [--local|--out ./proof] [--no-wait] [--details]
2808
+ vibecodr browser render <https-url> [--local|--out ./proof] [--no-wait] [--details]
2809
+ vibecodr browser pdf <https-url> [--local|--out ./proof] [--no-wait] [--details]
2810
+ vibecodr browser crawl <https-url> [--max-pages n] [--max-depth n] [--local|--out ./proof]
2811
+ vibecodr browser snapshot <https-url> [--local|--out ./proof]
2812
+
2813
+ Advanced compatibility:
2814
+ vibecodr browser ask <https-url> --note <text> [--local|--out ./proof]
2703
2815
 
2704
2816
  Notes:
2705
- 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.
2817
+ Add --local to save completed output into ./vibecodr-proof automatically.
2818
+ browser snapshot captures page state; it does not prompt an agent or model.
2819
+ browser ask saves your note with the snapshot; it is not a chat answerer.
2706
2820
  `;
2707
2821
  case "work":
2708
2822
  return `vibecodr work
@@ -2712,7 +2826,7 @@ Inspect hosted work the agent has submitted.
2712
2826
  Usage:
2713
2827
  vibecodr work list [--limit 20]
2714
2828
  vibecodr work show <jobId>
2715
- vibecodr work follow <jobId> [--out ./proof] [--details]
2829
+ vibecodr work follow <jobId> [--local|--out ./proof] [--details]
2716
2830
  vibecodr work cancel <jobId> --yes
2717
2831
  `;
2718
2832
  case "proof":