replicas-cli 0.3.111 → 0.3.114

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.
Files changed (2) hide show
  1. package/dist/index.cjs +23 -30
  2. package/package.json +1 -1
package/dist/index.cjs CHANGED
@@ -24490,7 +24490,7 @@ Use this workflow to make a repository fully usable by Replicas background agent
24490
24490
 
24491
24491
  ## Mental model
24492
24492
 
24493
- Every Replicas workspace is a remote Linux VM. Repositories are cloned under \`~/workspaces/<repo-name>\`. An **environment** is the org-scoped template a workspace is built from. It binds one repository (or a repository set for monorepos and multi-repo stacks) and carries:
24493
+ Every Replicas workspace is a remote Linux VM. Repositories are cloned under \`~/workspaces/<repo-name>\`. An **environment** is the org-scoped template a workspace is built from. It lists the repositories to clone, in checkout order (one, several for multi-repo stacks, or none), and carries:
24494
24494
 
24495
24495
  | Piece | When it runs | Put here |
24496
24496
  | --- | --- | --- |
@@ -24597,7 +24597,7 @@ Design from what you verified, not from what the README promises.
24597
24597
 
24598
24598
  **Variables** \u2014 every key the application or hooks need, with a one-line description and whether it is required to run locally. Keys only, never values.
24599
24599
 
24600
- **Automations** \u2014 the set that should exist for this repository after saving, usually two to four. Each entry has a \`key\` and an \`action\`. \`create\` (the default) adds a new automation and needs a name, one-sentence description, a complete prompt an agent can execute unattended, and triggers. For an automation that already exists, pass its \`automation_id\` and a one-sentence \`note\` the reviewer sees next to it, then choose: \`update\` rewrites it with the full new content (also how you replace it with something better, under a new name if needed), \`keep\` leaves it untouched, \`disable\` turns it off. Every automation already attached to the environment must appear with one of those three; ones you leave out are not shown to the reviewer. Good candidates for new ones: pull request review focused on this codebase's conventions (\`pull_request.opened\` + \`pull_request.synchronize\`), nightly or weekly health checks (cron), documentation sync when code changes, dependency or security review, flaky-test triage. Only propose what the repository evidence supports.
24600
+ **Automations** \u2014 the set that should exist for this repository after saving. Propose only what the repository shows the team would use, like a chore people repeat or a check reviewers keep asking for. Each run uses a workspace, so zero new ones is a fine answer. Each entry has a \`key\` and an \`action\`. \`create\` (the default) adds a new automation and needs a name, one-sentence description, a complete prompt an agent can execute unattended, and triggers. For an automation that already exists, pass its \`automation_id\` and a one-sentence \`note\` the reviewer sees next to it, then choose: \`update\` rewrites it with the full new content (also how you replace it with something better, under a new name if needed), \`keep\` leaves it untouched, \`disable\` turns it off. Every automation already attached to the environment must appear with one of those three; ones you leave out are not shown to the reviewer. Ideas, if the evidence supports them: pull request review focused on this codebase's conventions (\`pull_request.opened\` + \`pull_request.synchronize\`), nightly or weekly health checks (cron), documentation sync when code changes, dependency or security review, flaky-test triage.
24601
24601
 
24602
24602
  Trigger shapes:
24603
24603
 
@@ -24849,7 +24849,7 @@ gh pr review 123 --request-changes --body "Changes needed"
24849
24849
 
24850
24850
  ## Media in GitHub workflows
24851
24851
 
24852
- Media delivery is owned by \`references/MEDIA.md\`. Read it before adding screenshots, GIFs, recordings, diagrams, or HTML reports to a pull request, issue, review comment, or commit; it covers when to use a GIF instead of screenshots, the public links every image upload prints, recording previews, organization-only HTML links, and the required **View in Replicas** link.
24852
+ Media delivery is owned by \`references/MEDIA.md\`. Read it before adding screenshots, GIFs, recordings, diagrams, or HTML reports to a pull request, issue, review comment, or commit; it covers when to use a GIF instead of screenshots, the public links every image upload prints, recording previews, and organization-only HTML links.
24853
24853
  `;
24854
24854
  var GITHUB_ABILITY = {
24855
24855
  label: "GitHub",
@@ -24911,7 +24911,7 @@ await replicas.gitlab.request('/projects/group%2Frepo/pipelines', {
24911
24911
 
24912
24912
  ## Descriptions and media
24913
24913
 
24914
- API updates replace the entire merge request description, so always preserve the required Replicas footer and co-author trailers. Media delivery is owned by \`references/MEDIA.md\`; read its GitLab section before adding media so the original bytes are uploaded to Replicas and GitLab and the dashboard link remains secondary.
24914
+ API updates replace the entire merge request description, so always preserve the required Replicas footer and co-author trailers. Media delivery is owned by \`references/MEDIA.md\`; read its GitLab section before adding media so the original bytes are uploaded to Replicas and GitLab.
24915
24915
  `;
24916
24916
  var GITLAB_ABILITY = {
24917
24917
  label: "GitLab",
@@ -24971,7 +24971,7 @@ var REFERENCE6 = `# GPU sandboxes
24971
24971
  ## One-shot runs
24972
24972
 
24973
24973
  \`\`\`bash
24974
- replicas gpu run --gpu H100 --pull outputs -- python train.py
24974
+ replicas gpu run --pull outputs -- python train.py
24975
24975
  \`\`\`
24976
24976
 
24977
24977
  This starts a sandbox, copies the current directory to \`${COMPUTE_SANDBOX_WORKDIR}\` (git repositories honor \`.gitignore\`), streams the command's output, copies \`${COMPUTE_SANDBOX_WORKDIR}/outputs\` back to \`./outputs\`, stops the sandbox, and exits with the command's exit code. Add \`--keep\` to leave it running.
@@ -24979,7 +24979,7 @@ This starts a sandbox, copies the current directory to \`${COMPUTE_SANDBOX_WORKD
24979
24979
  ## Interactive sessions
24980
24980
 
24981
24981
  \`\`\`bash
24982
- replicas gpu create --gpu A100-80GB --timeout 3h # waits until running
24982
+ replicas gpu create # waits until running
24983
24983
  replicas gpu push # . -> ${COMPUTE_SANDBOX_WORKDIR}
24984
24984
  replicas gpu exec -- nvidia-smi
24985
24985
  replicas gpu exec -- pip install -r requirements.txt
@@ -24997,7 +24997,7 @@ replicas gpu delete
24997
24997
 
24998
24998
  ## Choosing hardware and images
24999
24999
 
25000
- - GPUs: ${GPU_TYPES.join(", ")} (default ${DEFAULT_GPU_TYPE}). Add a count for multi-GPU, e.g. \`H100:4\` (max ${COMPUTE_SANDBOX_LIMITS.maxGpuCount}). Pick the smallest GPU that fits: T4/L4 for small models and smoke tests, A100/H100 for real training.
25000
+ - GPUs, picked with \`--gpu\`: ${GPU_TYPES.join(", ")} (default ${DEFAULT_GPU_TYPE}). Add a count for multi-GPU, e.g. \`H100:4\` (max ${COMPUTE_SANDBOX_LIMITS.maxGpuCount}). Pick the smallest GPU that fits: T4/L4 for small models and smoke tests, A100/H100 for real training.
25001
25001
  - Default image: \`${DEFAULT_GPU_IMAGE}\`. Pass any public registry image with \`--image\`; the first start of a new image takes a few minutes to pull.
25002
25002
  - The sandbox has internet access. Download datasets and weights inside it rather than pushing them; pushes and pulls are capped at ${COMPUTE_SANDBOX_LIMITS.maxTransferBytes / 1024 ** 3} GiB.
25003
25003
 
@@ -25190,22 +25190,13 @@ ffmpeg is baked into the workspace image. If it's missing, install it with \`sud
25190
25190
 
25191
25191
  ### Before and after
25192
25192
 
25193
- Record both with the same steps, window size, and crop. Say in one line what to watch for, then put the GIFs side by side in a table, or in labeled sections when they are wide:
25194
-
25195
- \`\`\`markdown
25196
- The menu should open on its trigger. Before, it jumps about 95px up in half the openings.
25197
-
25198
- | Before | After |
25199
- | --- | --- |
25200
- | ![Language menu before fix](<before-gif-url>) | ![Language menu after fix](<after-gif-url>) |
25201
- | [View in Replicas](<before-dashboard-url>) | [View in Replicas](<after-dashboard-url>) |
25202
- \`\`\`
25193
+ Make comparisons easy to see at a glance, whether it's before and after or options to pick from. Capture each version the same way, so only the change differs, and say in one line what to look for. Crop to the part that changed, keep every version big enough to read, and make it clear which is which. Avoid tall full-page screenshots; at PR width the change is too small to see. A new feature usually only needs the after. For screenshots, a small HTML page with the crops, screenshotted at 2x, works well. For GIFs, a two-column Markdown table works well.
25203
25194
 
25204
25195
  ## When to upload
25205
25196
 
25206
25197
  Upload to Replicas in these cases \u2014 and **only** these cases:
25207
25198
 
25208
- 1. **Media you produce.** Any screenshot, screen recording, generated diagram, audio clip, or HTML page you create that the user might want to see. Upload before doing anything else with the file (analyzing, deleting, sending elsewhere). This applies even when you're also sending the file to Slack, Linear, GitHub, or GitLab.
25199
+ 1. **Media you show the user.** A screenshot, screen recording, generated diagram, audio clip, or HTML page, once you decide to show it to the user or share it. Screenshots you take only to check your own work stay local. Upload before you delete the file or send it anywhere else. This applies even when you're also sending the file to Slack, Linear, GitHub, or GitLab.
25209
25200
  2. **Files the user explicitly asks you to upload.** If the user sends or points at a file (image, video, audio, HTML) and asks you to upload it, run \`replicas media upload\`. Otherwise leave it alone \u2014 files in the workspace the user did not ask about should not be auto-uploaded as media.
25210
25201
  3. **Anything you plan to share externally (Slack, Linear, GitHub, GitLab, etc.).** Upload to Replicas first, then follow the destination's delivery path below.
25211
25202
 
@@ -25218,7 +25209,7 @@ If none of these apply, don't upload.
25218
25209
  1. First, run \`replicas media upload\` with the original file. Do not begin any destination upload until the command succeeds. This creates the canonical dashboard copy and prints an embed plus a per-file dashboard link. Every image gets a public link, so its printed embed works in chat and on GitHub.
25219
25210
  2. Include the printed embed line in the Replicas chat reply. HTML uses its printed page link instead of an image embed.
25220
25211
  3. Identify every destination in the task and use its inline representation from the table below. Slack, Linear, and GitLab require an upload of the same original bytes; GitHub uses the image's printed public embed.
25221
- 4. Put the **View in Replicas** dashboard link next to the destination embed as a secondary link.
25212
+ 4. On Slack and Linear, put the **View in Replicas** dashboard link next to the destination embed as a secondary link. GitHub and GitLab need only the embed.
25222
25213
  5. Check each destination response. If its upload or public link fails, say so explicitly and keep the dashboard link; never claim that a dashboard link is an inline embed.
25223
25214
 
25224
25215
  | Destination | Required file delivery | Inline result |
@@ -25321,9 +25312,9 @@ Never reply with only dashboard links (for example a "Links:" list of \`?mode=me
25321
25312
  After \`replicas media upload\` succeeds, external delivery has two required follow-up steps for every file:
25322
25313
 
25323
25314
  1. **Use the destination's inline representation:** upload the raw bytes to Slack, Linear, or GitLab; embed the image's printed public link on GitHub.
25324
- 2. **Link the Replicas dashboard deep link** (\`?mode=media&media=<id>\` form) so the user can jump straight to the file in the workspace.
25315
+ 2. **On Slack and Linear, link the Replicas dashboard deep link** (\`?mode=media&media=<id>\` form) so the user can jump straight to the file in the workspace. On GitHub and GitLab, the embed is enough.
25325
25316
 
25326
- A dashboard link alone is not enough. An embed without the dashboard link is not enough. Do both.
25317
+ A dashboard link alone is never enough.
25327
25318
 
25328
25319
  Slack, Linear, and GitLab receive the original bytes through their native upload APIs. GitHub uses the printed public link for screenshots and recording previews.
25329
25320
 
@@ -25438,7 +25429,7 @@ Replicas authenticates GitHub with GitHub App tokens, which GitHub's attachment
25438
25429
  replicas media upload /tmp/screenshot.png --name "PR screenshot"
25439
25430
  \`\`\`
25440
25431
 
25441
- 2. Copy the printed \`![filename](<public-url>)\` line verbatim into the body file, followed by the matching **View in Replicas** link. Never use a local file path, a \`/v1/media/<id>\` URL, a Linear \`assetUrl\`, or an expiring storage URL.
25432
+ 2. Copy the printed \`![filename](<public-url>)\` line verbatim into the body file. Never use a local file path, a \`/v1/media/<id>\` URL, a Linear \`assetUrl\`, or an expiring storage URL.
25442
25433
  3. Create or update the PR using the body file:
25443
25434
 
25444
25435
  \`\`\`bash
@@ -25461,7 +25452,7 @@ Do **not** commit screenshots to the repo, use placeholder URLs, expose the auth
25461
25452
 
25462
25453
  ### GitLab: native inline screenshots and videos
25463
25454
 
25464
- GitLab supports native project Markdown uploads. For a GitLab destination, always upload the media to Replicas first, then POST the same original file to the repository's \`/projects/:id/uploads\` API using the workspace GitLab credential. Insert the returned \`markdown\` value into the merge request body or comment and include the Replicas dashboard link. Image uploads render inline; MP4, MOV, and WebM uploads render as inline video players.
25455
+ GitLab supports native project Markdown uploads. For a GitLab destination, always upload the media to Replicas first, then POST the same original file to the repository's \`/projects/:id/uploads\` API using the workspace GitLab credential. Insert the returned \`markdown\` value into the merge request body or comment. Image uploads render inline; MP4, MOV, and WebM uploads render as inline video players.
25465
25456
 
25466
25457
  Do not use a Replicas public link for GitLab when the native project upload succeeds; native uploads preserve project access controls. \`replicas.gitlab.request\` only sends JSON and cannot POST multipart file bytes, so without another supported upload path use the GitHub flow above instead: the image's printed public embed, and a poster linked to the recording's **View in Replicas** URL.
25467
25458
 
@@ -25644,7 +25635,7 @@ Use this when:
25644
25635
  - The user asks to analyze text with Pangram`;
25645
25636
  var REFERENCE10 = `# Plugins
25646
25637
 
25647
- Plugins are TypeScript libraries, not MCP servers. Import \`@replicas/sdk\`; Replicas authenticates the workspace and selects the most specific environment the workspace inherits from, then Global. Provider credentials, sessions, and project keys are never exposed.
25638
+ Plugins are TypeScript libraries, not MCP servers. Import \`@replicas/sdk\`; Replicas authenticates the workspace and uses the connection from the most specific environment in the workspace's fork chain. Provider credentials, sessions, and project keys are never exposed.
25648
25639
 
25649
25640
  Plugin tools may read or write provider data according to the connected account's permissions. Only execute write or destructive tools when they match the user's request.
25650
25641
 
@@ -25657,7 +25648,7 @@ const plugins = await replicas.plugins.list();
25657
25648
  const installed = plugins.filter((plugin) => plugin.connected);
25658
25649
  \`\`\`
25659
25650
 
25660
- If listing returns a 5xx or \`Internal server error\`, skip it and use the known plugin's search, describe, or direct SDK API. Listing failure does not mean the plugin is disconnected. Only ask the user to connect it when the direct gateway reports missing credentials or an unrecoverable authentication failure. A connection on Global reaches every workspace unless a more specific environment overrides it.
25651
+ If listing returns a 5xx or \`Internal server error\`, skip it and use the known plugin's search, describe, or direct SDK API. Listing failure does not mean the plugin is disconnected. Only ask the user to connect it when the direct gateway reports missing credentials or an unrecoverable authentication failure. A connection on an environment reaches its forks unless a fork connects its own.
25661
25652
 
25662
25653
  ## Search, inspect, execute
25663
25654
 
@@ -25933,7 +25924,7 @@ In agent mode the CLI hides commands that don't make sense for in-workspace agen
25933
25924
 
25934
25925
  ## Environments
25935
25926
 
25936
- Environments are the org-scoped *primitives* workspaces are built from. Each environment can bind to one repository (or repository set), carry environment variables, project files, enabled skills, and MCP servers. The \`Global\` environment is special \u2014 its vars/files/skills/MCPs apply to *every* workspace in the org, but it has no repo binding and can't back a workspace on its own.
25927
+ Environments are the org-scoped *primitives* workspaces are built from. Each environment lists the repositories to clone (none is fine) and carries environment variables, project files, enabled skills, and MCP servers. A fork inherits everything from its parent environment and stores only its own overrides. The org's default environment is used for Scout. Slack or Linear requests that don't name one use the requester's own default environment, falling back to the org default.
25937
25928
 
25938
25929
  ### List / get / create / edit / delete
25939
25930
 
@@ -25942,17 +25933,18 @@ replicas environment list
25942
25933
  replicas environment get <id-or-name>
25943
25934
  replicas environment create [name] \\
25944
25935
  --description "..." \\
25945
- --repository <repo-name-or-id> \\
25936
+ --repository <repo-names-or-ids> \\
25946
25937
  --system-prompt "..."
25947
25938
  replicas environment edit <id-or-name> \\
25948
25939
  --name "..." --description "..." \\
25949
- --repository <repo-name-or-id> # pass empty string to unbind
25940
+ --repository <repo-names-or-ids>
25950
25941
  replicas environment delete <id-or-name> [--force]
25951
25942
  \`\`\`
25952
25943
 
25953
25944
  Notes:
25954
25945
  - Environments resolve by **name or UUID**. A fork inherits its parent's setup and can override or hide any of it.
25955
- - An env needs a repo to back a workspace with code. If you \`create\` without \`--repository\`, the CLI prompts; in non-interactive contexts pass \`-r\`.
25946
+ - \`--repository\` takes a comma-separated list; pass an empty string to \`edit\` to remove all repositories.
25947
+ - Without \`--repository\`, \`create\` prompts in a terminal and otherwise creates an environment with no repositories, which backs repo-less workspaces.
25956
25948
 
25957
25949
  ### Environment variables
25958
25950
 
@@ -26379,6 +26371,7 @@ var DEFAULT_USER_PREFERENCES = {
26379
26371
  auto_draft_prs: false,
26380
26372
  open_prs_in_graphite: false,
26381
26373
  open_links_in_desktop_app: false,
26374
+ port_forwarding: false,
26382
26375
  memory_enabled: null,
26383
26376
  subagent_mcp_enabled: null,
26384
26377
  default_fast_mode: false,
@@ -28730,7 +28723,7 @@ var headlessAgentRequestSchema = external_exports.object({
28730
28723
  });
28731
28724
 
28732
28725
  // ../shared/src/cli-version.ts
28733
- var CLI_VERSION = "0.3.111";
28726
+ var CLI_VERSION = "0.3.114";
28734
28727
 
28735
28728
  // ../shared/src/version.ts
28736
28729
  function compareVersions(v1, v2) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "replicas-cli",
3
- "version": "0.3.111",
3
+ "version": "0.3.114",
4
4
  "description": "CLI for managing Replicas workspaces - SSH into cloud dev environments with automatic port forwarding",
5
5
  "main": "dist/index.cjs",
6
6
  "bin": {