replicas-cli 0.3.26 → 0.3.28

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 +102 -52
  2. package/package.json +1 -1
package/dist/index.cjs CHANGED
@@ -22927,6 +22927,7 @@ function toSnakeCaseKeys(value) {
22927
22927
  }
22928
22928
 
22929
22929
  // ../shared/src/engine/v1.ts
22930
+ var MERGED_MESSAGE_SEPARATOR = "\n\n<!-- replicas:merged -->\n\n";
22930
22931
  var updateChatDisplayNameRequestSchema = external_exports.object({
22931
22932
  displayName: external_exports.string().trim().min(1).max(100)
22932
22933
  });
@@ -23675,27 +23676,6 @@ var SUBAGENT_MCP_TOOLS = {
23675
23676
  };
23676
23677
  var SUBAGENT_MCP_TOOL_NAMES = Object.values(SUBAGENT_MCP_TOOLS);
23677
23678
 
23678
- // ../shared/src/frontmatter.ts
23679
- var import_yaml = __toESM(require_dist());
23680
-
23681
- // ../shared/src/learned-skills.ts
23682
- var LEARNED_SKILLS_ROOT = `${SANDBOX_PATHS.REPLICAS_DIR}/learned-skills`;
23683
- var LEARNED_SKILLS_MANIFEST_PATH = `${LEARNED_SKILLS_ROOT}/manifest.json`;
23684
- var learnedSkillsManifestSchema = external_exports.object({
23685
- skills: external_exports.array(external_exports.object({ name: external_exports.string(), sha256: external_exports.string() }))
23686
- });
23687
- var dreamVerdictChecksSchema = external_exports.object({
23688
- repeatable: external_exports.boolean(),
23689
- realInstruction: external_exports.boolean(),
23690
- noContradiction: external_exports.boolean(),
23691
- formatExact: external_exports.boolean(),
23692
- humanOnly: external_exports.boolean(),
23693
- actionable: external_exports.boolean(),
23694
- durable: external_exports.boolean()
23695
- });
23696
- var DREAM_VERDICT_CHECKS = dreamVerdictChecksSchema.keyof().options;
23697
- var dreamVerdictSchema = dreamVerdictChecksSchema.extend({ approve: external_exports.boolean(), reason: external_exports.string() });
23698
-
23699
23679
  // ../shared/src/uuid.ts
23700
23680
  var UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
23701
23681
 
@@ -26041,7 +26021,8 @@ var REPLICAS_MCP_TOOLS = {
26041
26021
  messageSubagent: "message_subagent",
26042
26022
  listSubagents: "list_subagents",
26043
26023
  readSubagent: "read_subagent",
26044
- archiveSubagent: "archive_subagent"
26024
+ archiveSubagent: "archive_subagent",
26025
+ waitForSubagents: "wait_for_subagents"
26045
26026
  };
26046
26027
  var automationToolInputSchema = external_exports.object({
26047
26028
  name: external_exports.string().describe("Short automation name."),
@@ -26081,31 +26062,6 @@ var updateEnvironmentMcpToolInputSchema = external_exports.object({
26081
26062
  ...updateEnvironmentMcpRequestSchema.shape
26082
26063
  });
26083
26064
 
26084
- // ../shared/src/user-message-matching.ts
26085
- function parseTimestampMs(timestamp) {
26086
- const value = typeof timestamp === "number" ? timestamp : Date.parse(timestamp);
26087
- return Number.isFinite(value) ? value : 0;
26088
- }
26089
- function areUserMessagesWithinMatchWindow(a, b) {
26090
- return a.content === b.content && Math.abs(parseTimestampMs(a.timestamp) - parseTimestampMs(b.timestamp)) <= USER_MESSAGE_MATCH_GRACE_PERIOD_MS;
26091
- }
26092
-
26093
- // ../shared/src/display-message/steps.ts
26094
- var SUBAGENT_STEPS = {
26095
- [SUBAGENT_MCP_TOOLS.messageAgent]: { icon: "message", live: "Messaging", done: "Messaged" },
26096
- [SUBAGENT_MCP_TOOLS.waitAgent]: { icon: "clock", live: "Waiting for", done: "Waited for" },
26097
- [SUBAGENT_MCP_TOOLS.getAgent]: { icon: "search", live: "Checking", done: "Checked" },
26098
- [SUBAGENT_MCP_TOOLS.deleteAgent]: { icon: "trash", live: "Deleting", done: "Deleted" },
26099
- [SUBAGENT_MCP_TOOLS.getProviders]: { icon: "list", live: "Listing available providers", done: "Listed available providers" }
26100
- };
26101
- var MULTITASK_TOOL_ACTIONS = {
26102
- [REPLICAS_MCP_TOOLS.spawnSubagent]: "spawn",
26103
- [REPLICAS_MCP_TOOLS.messageSubagent]: "send",
26104
- [REPLICAS_MCP_TOOLS.listSubagents]: "list",
26105
- [REPLICAS_MCP_TOOLS.readSubagent]: "read",
26106
- [REPLICAS_MCP_TOOLS.archiveSubagent]: "archive"
26107
- };
26108
-
26109
26065
  // ../shared/src/routes/preferences.ts
26110
26066
  var EMPTY_AGENT_DEFAULT_SETTINGS = {
26111
26067
  agent_provider: null,
@@ -26172,6 +26128,95 @@ function removeReplicasInstructions(text2) {
26172
26128
  }
26173
26129
  var MULTITASK_INSTRUCTIONS_BLOCK = new RegExp(`\\s*<${MULTITASK_INSTRUCTIONS_TAG}>\\n([\\s\\S]*?)\\n</${MULTITASK_INSTRUCTIONS_TAG}>`);
26174
26130
 
26131
+ // ../shared/src/multitask-events.ts
26132
+ var MULTITASK_EVENT_KINDS = ["finished", "ready", "needs_attention", "merged", "closed", "archived"];
26133
+ var MULTITASK_EVENT_TYPE = "multitask-event";
26134
+ var multitaskEventSchema = external_exports.object({
26135
+ id: external_exports.string(),
26136
+ at: external_exports.string(),
26137
+ kind: external_exports.enum(MULTITASK_EVENT_KINDS),
26138
+ agentId: external_exports.string(),
26139
+ agentName: external_exports.string(),
26140
+ summary: external_exports.string(),
26141
+ detail: external_exports.string().optional(),
26142
+ // Already shown as a row when it happened, so the delivered message does not show it again.
26143
+ noticed: external_exports.boolean().optional()
26144
+ });
26145
+ var TAG = "multitask_event";
26146
+ var BLOCK = new RegExp(`<${TAG}((?:\\s+\\w+="[^"]*")*)>\\n?([\\s\\S]*?)\\n?</${TAG}>`, "g");
26147
+ var ATTRIBUTE = /(\w+)="([^"]*)"/g;
26148
+ var unescapeAttribute = (value) => value.replace(/&lt;/g, "<").replace(/&quot;/g, '"').replace(/&amp;/g, "&");
26149
+ function extractMultitaskEvents(text2) {
26150
+ return [...text2.matchAll(BLOCK)].flatMap((match) => {
26151
+ const attributes = Object.fromEntries([...match[1].matchAll(ATTRIBUTE)].map(([, key, value]) => [key, unescapeAttribute(value)]));
26152
+ const kind = MULTITASK_EVENT_KINDS.find((candidate) => candidate === attributes.kind);
26153
+ if (!kind || !attributes.id || !attributes.agent_id) return [];
26154
+ const [summary, ...rest] = match[2].replaceAll(`<\\/${TAG}`, `</${TAG}`).split("\n\n");
26155
+ const detail = rest.join("\n\n").trim();
26156
+ return [{
26157
+ id: attributes.id,
26158
+ at: attributes.at ?? "",
26159
+ kind,
26160
+ agentId: attributes.agent_id,
26161
+ agentName: attributes.agent ?? "subagent",
26162
+ summary: summary.trim(),
26163
+ ...detail ? { detail } : {},
26164
+ ...attributes.noticed === "true" ? { noticed: true } : {}
26165
+ }];
26166
+ });
26167
+ }
26168
+ function parseMultitaskEvents(text2) {
26169
+ const events = extractMultitaskEvents(text2);
26170
+ return events.length > 0 && text2.replace(BLOCK, "").replaceAll(MERGED_MESSAGE_SEPARATOR.trim(), "").trim() === "" ? events : null;
26171
+ }
26172
+
26173
+ // ../shared/src/frontmatter.ts
26174
+ var import_yaml = __toESM(require_dist());
26175
+
26176
+ // ../shared/src/learned-skills.ts
26177
+ var LEARNED_SKILLS_ROOT = `${SANDBOX_PATHS.REPLICAS_DIR}/learned-skills`;
26178
+ var LEARNED_SKILLS_MANIFEST_PATH = `${LEARNED_SKILLS_ROOT}/manifest.json`;
26179
+ var learnedSkillsManifestSchema = external_exports.object({
26180
+ skills: external_exports.array(external_exports.object({ name: external_exports.string(), sha256: external_exports.string() }))
26181
+ });
26182
+ var dreamVerdictChecksSchema = external_exports.object({
26183
+ repeatable: external_exports.boolean(),
26184
+ realInstruction: external_exports.boolean(),
26185
+ noContradiction: external_exports.boolean(),
26186
+ formatExact: external_exports.boolean(),
26187
+ humanOnly: external_exports.boolean(),
26188
+ actionable: external_exports.boolean(),
26189
+ durable: external_exports.boolean()
26190
+ });
26191
+ var DREAM_VERDICT_CHECKS = dreamVerdictChecksSchema.keyof().options;
26192
+ var dreamVerdictSchema = dreamVerdictChecksSchema.extend({ approve: external_exports.boolean(), reason: external_exports.string() });
26193
+
26194
+ // ../shared/src/user-message-matching.ts
26195
+ function parseTimestampMs(timestamp) {
26196
+ const value = typeof timestamp === "number" ? timestamp : Date.parse(timestamp);
26197
+ return Number.isFinite(value) ? value : 0;
26198
+ }
26199
+ function areUserMessagesWithinMatchWindow(a, b) {
26200
+ return a.content === b.content && Math.abs(parseTimestampMs(a.timestamp) - parseTimestampMs(b.timestamp)) <= USER_MESSAGE_MATCH_GRACE_PERIOD_MS;
26201
+ }
26202
+
26203
+ // ../shared/src/display-message/steps.ts
26204
+ var SUBAGENT_STEPS = {
26205
+ [SUBAGENT_MCP_TOOLS.messageAgent]: { icon: "message", live: "Messaging", done: "Messaged" },
26206
+ [SUBAGENT_MCP_TOOLS.waitAgent]: { icon: "clock", live: "Waiting for", done: "Waited for" },
26207
+ [SUBAGENT_MCP_TOOLS.getAgent]: { icon: "search", live: "Checking", done: "Checked" },
26208
+ [SUBAGENT_MCP_TOOLS.deleteAgent]: { icon: "trash", live: "Deleting", done: "Deleted" },
26209
+ [SUBAGENT_MCP_TOOLS.getProviders]: { icon: "list", live: "Listing available providers", done: "Listed available providers" }
26210
+ };
26211
+ var MULTITASK_TOOL_ACTIONS = {
26212
+ [REPLICAS_MCP_TOOLS.spawnSubagent]: "spawn",
26213
+ [REPLICAS_MCP_TOOLS.messageSubagent]: "send",
26214
+ [REPLICAS_MCP_TOOLS.listSubagents]: "list",
26215
+ [REPLICAS_MCP_TOOLS.readSubagent]: "read",
26216
+ [REPLICAS_MCP_TOOLS.archiveSubagent]: "archive",
26217
+ [REPLICAS_MCP_TOOLS.waitForSubagents]: "wait"
26218
+ };
26219
+
26175
26220
  // ../shared/src/user-message-attachments.ts
26176
26221
  var ATTACHMENT_PLACEHOLDER_REGEX = /^\[\d+ (?:(?:images?|files?)(?: and \d+ files?)? attached|(?:image )?attachments?)\]$/;
26177
26222
  var WALKTHROUGH_NOTE_REGEX = /(?:^|\n\n)<replicas_walkthrough path="([^"\n]+)" duration_seconds="(\d+)" audio="(true|false)">\n[^<]*\n<\/replicas_walkthrough>$/;
@@ -28025,6 +28070,11 @@ function applyInterruptions(messages, events) {
28025
28070
  function applyEngineNotices(messages, events) {
28026
28071
  const notices = [];
28027
28072
  events.forEach((event, index) => {
28073
+ if (event.type === MULTITASK_EVENT_TYPE) {
28074
+ const parsed = typeof event.payload.text === "string" ? parseMultitaskEvents(event.payload.text) : null;
28075
+ if (parsed) notices.push({ id: `multitask-event-${event.timestamp}-${index}`, type: "multitask_event", events: parsed, timestamp: event.timestamp });
28076
+ return;
28077
+ }
28028
28078
  if (event.type === CHAT_MESSAGE_REJECTED_EVENT_TYPE) {
28029
28079
  notices.push({
28030
28080
  id: `message-rejected-${event.timestamp}-${index}`,
@@ -28380,7 +28430,7 @@ var headlessAgentRequestSchema = external_exports.object({
28380
28430
  });
28381
28431
 
28382
28432
  // ../shared/src/cli-version.ts
28383
- var CLI_VERSION = "0.3.26";
28433
+ var CLI_VERSION = "0.3.28";
28384
28434
 
28385
28435
  // ../shared/src/version.ts
28386
28436
  function compareVersions(v1, v2) {
@@ -29209,7 +29259,7 @@ async function authenticatedFetch(url2, options) {
29209
29259
 
29210
29260
  // src/lib/output.ts
29211
29261
  var import_chalk = __toESM(require("chalk"));
29212
- var import_prompts4 = __toESM(require("prompts"));
29262
+ var import_prompts5 = __toESM(require("prompts"));
29213
29263
  var jsonMode = false;
29214
29264
  function enableJsonMode() {
29215
29265
  jsonMode = true;
@@ -29238,7 +29288,7 @@ async function ask(question) {
29238
29288
  if (!isInteractive()) {
29239
29289
  throw new Error(`Missing input (${String(question.message).trim()}) and no interactive terminal to ask for it. Pass it as an option; see --help.`);
29240
29290
  }
29241
- return (0, import_prompts4.default)(question);
29291
+ return (0, import_prompts5.default)(question);
29242
29292
  }
29243
29293
 
29244
29294
  // src/lib/organization.ts
@@ -29931,7 +29981,7 @@ var import_chalk9 = __toESM(require("chalk"));
29931
29981
 
29932
29982
  // src/lib/command-utils.ts
29933
29983
  var import_chalk7 = __toESM(require("chalk"));
29934
- var import_prompts5 = __toESM(require("prompts"));
29984
+ var import_prompts6 = __toESM(require("prompts"));
29935
29985
  function formatDate(dateString) {
29936
29986
  return new Date(dateString).toLocaleString();
29937
29987
  }
@@ -29952,7 +30002,7 @@ function parseKeyValuePairs(pairs) {
29952
30002
  }
29953
30003
  async function confirmAction(message2) {
29954
30004
  if (!isInteractive()) throw new Error(`${message2} Pass -f to confirm without a terminal.`);
29955
- const { confirm } = await (0, import_prompts5.default)({ type: "confirm", name: "confirm", message: message2, initial: false });
30005
+ const { confirm } = await (0, import_prompts6.default)({ type: "confirm", name: "confirm", message: message2, initial: false });
29956
30006
  if (!confirm) console.log(import_chalk7.default.yellow("\nCancelled."));
29957
30007
  return Boolean(confirm);
29958
30008
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "replicas-cli",
3
- "version": "0.3.26",
3
+ "version": "0.3.28",
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": {