replicas-cli 0.2.505 → 0.2.507

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.mjs +46 -8
  2. package/package.json +3 -2
package/dist/index.mjs CHANGED
@@ -8015,6 +8015,7 @@ var AGENT_MODELS = {
8015
8015
  "gpt-5-mini",
8016
8016
  "gemini-3.1-pro",
8017
8017
  "gemini-3-flash",
8018
+ "grok-4.6",
8018
8019
  "grok-4.5",
8019
8020
  "grok-4.3",
8020
8021
  CLAUDE_HAIKU_4_5_MODEL,
@@ -8059,6 +8060,7 @@ var MODEL_LABELS = {
8059
8060
  [CLAUDE_HAIKU_4_5_MODEL]: "Haiku 4.5",
8060
8061
  "gemini-3.1-pro": "Gemini 3.1 Pro",
8061
8062
  "gemini-3-flash": "Gemini 3 Flash",
8063
+ "grok-4.6": "Grok 4.6",
8062
8064
  "grok-4.5": "Grok 4.5",
8063
8065
  "grok-4.3": "Grok 4.3",
8064
8066
  "kimi-k2.5": "Kimi K2.5"
@@ -9656,6 +9658,27 @@ const message = await replicas.slack.call<{ channel: string; ts: string }>('chat
9656
9658
  await replicas.slack.attachThread({ channel: message.channel, threadTs: message.ts });
9657
9659
  \`\`\`
9658
9660
 
9661
+ A link in the message text stays plain text, so when the message carries a pull request or merge request link, pass \`blocks\` alongside \`text\` to render a button for it. Keep \`text\` set to the same message \u2014 Slack uses it for notifications and fallback.
9662
+
9663
+ \`\`\`ts
9664
+ await replicas.slack.call('chat.postMessage', {
9665
+ channel: 'C0123ABC',
9666
+ thread_ts: '1234567890.123456',
9667
+ text: summary,
9668
+ blocks: [
9669
+ { type: 'section', text: { type: 'mrkdwn', text: summary } },
9670
+ {
9671
+ type: 'actions',
9672
+ elements: [
9673
+ { type: 'button', text: { type: 'plain_text', text: 'View PR' }, url: prUrl, action_id: 'view_pr' },
9674
+ ],
9675
+ },
9676
+ ],
9677
+ });
9678
+ \`\`\`
9679
+
9680
+ Use "View MR" for GitLab. With several links, give each button a unique \`action_id\` and name its repository in the label ("View PR \xB7 web").
9681
+
9659
9682
  Attach every new top-level conversation so future replies route to this workspace. For a reply in another thread, attach its root \`thread_ts\`, not the reply timestamp. Do not attach the originating thread again.
9660
9683
 
9661
9684
  ## Search and batch
@@ -9722,6 +9745,7 @@ var DEFAULT_USER_PREFERENCES = {
9722
9745
  pr_user_attribution: false,
9723
9746
  auto_draft_prs: false,
9724
9747
  open_prs_in_graphite: false,
9748
+ open_links_in_desktop_app: false,
9725
9749
  default_fast_mode: false,
9726
9750
  agent_defaults: { ...EMPTY_AGENT_DEFAULT_SETTINGS },
9727
9751
  credential_priority: null
@@ -9789,7 +9813,7 @@ function formatTurnElapsed(ms) {
9789
9813
  }
9790
9814
 
9791
9815
  // ../shared/src/cli-version.ts
9792
- var CLI_VERSION = "0.2.505";
9816
+ var CLI_VERSION = "0.2.507";
9793
9817
 
9794
9818
  // ../shared/src/version.ts
9795
9819
  function compareVersions(v1, v2) {
@@ -25616,7 +25640,7 @@ function normalizeContentBlocks(content) {
25616
25640
  if (typeof content === "string") {
25617
25641
  return content ? [{ type: "text", text: content }] : [];
25618
25642
  }
25619
- return content ?? [];
25643
+ return Array.isArray(content) ? content.filter((block) => isRecord(block) && typeof block.type === "string") : [];
25620
25644
  }
25621
25645
  function parseStringField(value) {
25622
25646
  if (typeof value !== "string") return null;
@@ -32454,16 +32478,25 @@ function GitHubPRReviewMessage({ data }) {
32454
32478
  data.commentBody && /* @__PURE__ */ jsx5(MessageBody, { children: data.commentBody })
32455
32479
  ] });
32456
32480
  }
32457
- function GitHubPRGeneralMessage({ data }) {
32481
+ function HostReviewThreadMessage({
32482
+ source,
32483
+ label,
32484
+ identifier,
32485
+ commentUser,
32486
+ commentBody
32487
+ }) {
32458
32488
  return /* @__PURE__ */ jsxs5("box", { flexDirection: "column", gap: 0, children: [
32459
32489
  /* @__PURE__ */ jsxs5("box", { flexDirection: "row", gap: 1, children: [
32460
- /* @__PURE__ */ jsx5(SourceBadge, { source: "github_pr_existing_general" }),
32461
- /* @__PURE__ */ jsx5(MetadataPill, { label: "PR", value: `#${data.prNumber}` }),
32462
- data.commentUser && /* @__PURE__ */ jsx5(MetadataPill, { label: "From", value: `@${data.commentUser}` })
32490
+ /* @__PURE__ */ jsx5(SourceBadge, { source }),
32491
+ /* @__PURE__ */ jsx5(MetadataPill, { label, value: identifier }),
32492
+ commentUser && /* @__PURE__ */ jsx5(MetadataPill, { label: "From", value: `@${commentUser}` })
32463
32493
  ] }),
32464
- /* @__PURE__ */ jsx5(MessageBody, { children: data.commentBody })
32494
+ /* @__PURE__ */ jsx5(MessageBody, { children: commentBody })
32465
32495
  ] });
32466
32496
  }
32497
+ function MergedMessage({ data }) {
32498
+ return /* @__PURE__ */ jsx5("box", { flexDirection: "column", gap: 1, children: data.messages.map((message, index) => message.source === "raw" ? /* @__PURE__ */ jsx5(MessageBody, { children: message.content }, index) : /* @__PURE__ */ jsx5(StructuredUserMessage, { parsed: message }, index)) });
32499
+ }
32467
32500
  function SlackTaskMessage({ data }) {
32468
32501
  const hasDistinctContext = data.threadContext && data.threadContext !== `@${data.latestMessageUser}: ${data.latestMessageText}`;
32469
32502
  return /* @__PURE__ */ jsxs5("box", { flexDirection: "column", gap: 0, children: [
@@ -32517,7 +32550,9 @@ function StructuredUserMessage({ parsed }) {
32517
32550
  case "github_pr_existing_pr_review":
32518
32551
  return /* @__PURE__ */ jsx5(GitHubPRReviewMessage, { data: parsed });
32519
32552
  case "github_pr_existing_general":
32520
- return /* @__PURE__ */ jsx5(GitHubPRGeneralMessage, { data: parsed });
32553
+ return /* @__PURE__ */ jsx5(HostReviewThreadMessage, { source: parsed.source, label: "PR", identifier: `#${parsed.prNumber}`, commentUser: parsed.commentUser, commentBody: parsed.commentBody });
32554
+ case "gitlab_mr_existing_general":
32555
+ return /* @__PURE__ */ jsx5(HostReviewThreadMessage, { source: parsed.source, label: "MR", identifier: `!${parsed.mergeRequestIid}`, commentUser: parsed.commentUser, commentBody: parsed.commentBody });
32521
32556
  case "slack_task":
32522
32557
  return /* @__PURE__ */ jsx5(SlackTaskMessage, { data: parsed });
32523
32558
  case "inline_diff_comments":
@@ -32527,6 +32562,8 @@ function StructuredUserMessage({ parsed }) {
32527
32562
  return /* @__PURE__ */ jsx5("text", { fg: "#cccccc", selectable: true, children: parsed.source === "plan_quote" ? parsed.blocks.map((b) => `> ${b.quotedText}
32528
32563
  ${b.replyText}`).join("\n\n") : `Automation: ${parsed.automationName} (${parsed.triggerType})
32529
32564
  ${parsed.userPrompt}` });
32565
+ case "merged":
32566
+ return /* @__PURE__ */ jsx5(MergedMessage, { data: parsed });
32530
32567
  default: {
32531
32568
  const _exhaustive = parsed;
32532
32569
  throw new Error(`Unhandled prompt source: ${_exhaustive.source}`);
@@ -33075,6 +33112,7 @@ var AUTH_METHOD_LABELS = {
33075
33112
  oauth: "OAuth",
33076
33113
  api_key: "API Key",
33077
33114
  bedrock: "Bedrock",
33115
+ foundry: "Foundry",
33078
33116
  none: null
33079
33117
  };
33080
33118
  function StatusDot({ status }) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "replicas-cli",
3
- "version": "0.2.505",
3
+ "version": "0.2.507",
4
4
  "description": "CLI for managing Replicas workspaces - SSH into cloud dev environments with automatic port forwarding",
5
5
  "main": "dist/index.mjs",
6
6
  "bin": {
@@ -10,7 +10,8 @@
10
10
  "dist"
11
11
  ],
12
12
  "scripts": {
13
- "build": "tsup",
13
+ "build": "bun run typecheck && tsup",
14
+ "typecheck": "tsc --noEmit",
14
15
  "dev": "bun run src/index.ts",
15
16
  "dev-pack": "bun run build && node scripts/pack-dev-tarball.mjs",
16
17
  "start": "bun dist/index.mjs",