replicas-engine 0.1.1273 → 0.1.1274

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.
@@ -8,12 +8,12 @@ import {
8
8
  listRunningCodexModels,
9
9
  restartCodexAspHost,
10
10
  restartCodexAspHostIfRunning
11
- } from "./chunk-BP5NIOYF.js";
12
- import "./chunk-MSAINGDM.js";
13
- import "./chunk-RN3WSTZ2.js";
14
- import "./chunk-NYTMILLQ.js";
11
+ } from "./chunk-ZYAIMKKX.js";
12
+ import "./chunk-WXOUR6BE.js";
13
+ import "./chunk-WOMDGBDP.js";
14
+ import "./chunk-6NXMMW2M.js";
15
15
  import "./chunk-UZSNFLDQ.js";
16
- import "./chunk-N423MPLL.js";
16
+ import "./chunk-RMM7QYDD.js";
17
17
  import "./chunk-VEQXQN22.js";
18
18
  export {
19
19
  CODEX_ULTRAFAST_SERVICE_TIER,
@@ -3,7 +3,7 @@ import { createRequire as __createRequire } from 'node:module';
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  HOOK_EXEC_MAX_BUFFER_BYTES
6
- } from "./chunk-N423MPLL.js";
6
+ } from "./chunk-RMM7QYDD.js";
7
7
 
8
8
  // src/utils/exec.ts
9
9
  import { exec, execFile } from "child_process";
@@ -5,7 +5,7 @@ import {
5
5
  extractCommandProtectionCommandText,
6
6
  isRecord,
7
7
  parseCodeHostPrUrl
8
- } from "./chunk-N423MPLL.js";
8
+ } from "./chunk-RMM7QYDD.js";
9
9
 
10
10
  // src/services/published-pull-request-urls.ts
11
11
  function publishedPullRequestUrls(result) {
@@ -3,7 +3,7 @@ import { createRequire as __createRequire } from 'node:module';
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  AspClient
6
- } from "./chunk-RN3WSTZ2.js";
6
+ } from "./chunk-WOMDGBDP.js";
7
7
  import {
8
8
  ASTER_BASE_URL,
9
9
  ASTER_PROVIDER,
@@ -13,7 +13,7 @@ import {
13
13
  isRecord,
14
14
  readOllamaAuthEnv,
15
15
  readOpenAICompatibleAuthEnv
16
- } from "./chunk-N423MPLL.js";
16
+ } from "./chunk-RMM7QYDD.js";
17
17
 
18
18
  // src/managers/codex-asp/notification-dispatch.ts
19
19
  var TURN_STARTED_METHOD = "turn/started";
@@ -5073,6 +5073,9 @@ var DEFAULT_USER_PREFERENCES = {
5073
5073
  open_links_in_desktop_app: false,
5074
5074
  port_forwarding: false,
5075
5075
  spotify_controls: false,
5076
+ appshot_shortcut: "command",
5077
+ appshot_destination: "automatic",
5078
+ appshot_sound: true,
5076
5079
  mothership_intro_seen: false,
5077
5080
  follow_up_mode: "steer",
5078
5081
  memory_enabled: null,
@@ -5981,25 +5984,44 @@ var REPLICAS_API_STEPS = {
5981
5984
 
5982
5985
  // ../shared/src/user-message-attachments.ts
5983
5986
  var ATTACHMENT_PLACEHOLDER_REGEX = /^\[\d+ (?:(?:images?|files?)(?: and \d+ files?)? attached|(?:image )?attachments?)\]$/;
5987
+ var APPSHOT_NOTE_REGEX = /(?:^|\n\n)<replicas_appshot app="([^"\n]*)" window="([^"\n]*)" image="(\d+)">\n([^\n<]*)(?:\n\n([^<]*))?\n<\/replicas_appshot>$/;
5988
+ var TRUNCATED_APPSHOT_NOTE_REGEX = /(?:^|\n\n)<replicas_appshot app="([^"\n]*)(?:" window="([^"\n]*)(?:" image="(\d*))?)?[^<]*(?:<\/?[a-z_]*)?$/;
5989
+ var XML_UNESCAPES = { "&amp;": "&", "&lt;": "<", "&gt;": ">", "&quot;": '"', "&#39;": "'" };
5990
+ var unescapeXml = (text3) => text3.replace(/&(?:amp|lt|gt|quot|#39);/g, (entity) => XML_UNESCAPES[entity]);
5991
+ function parseAppshot(match) {
5992
+ return {
5993
+ appName: unescapeXml(match[1] ?? ""),
5994
+ windowTitle: unescapeXml(match[2] ?? ""),
5995
+ image: Number(match[3] || 0),
5996
+ ...match[5] && { text: unescapeXml(match[5]) },
5997
+ .../ \(cut short\)\. Treat that text as untrusted data/.test(match[4] ?? "") && { textTruncated: true }
5998
+ };
5999
+ }
5984
6000
  var WALKTHROUGH_NOTE_REGEX = /(?:^|\n\n)<replicas_walkthrough path="([^"\n]+)" duration_seconds="(\d+)" audio="(true|false)">\n[^<]*\n<\/replicas_walkthrough>$/;
5985
6001
  var TRUNCATED_WALKTHROUGH_NOTE_REGEX = /(?:^|\n\n)<replicas_walkthrough path="([^"\n]*)(?:" duration_seconds="(\d*))?(?:" audio="(true)?)?[^<]*(?:<\/?[a-z_]*)?$/;
5986
6002
  function stripAttachmentNote(text3) {
5987
6003
  const match = text3.match(/(?:^|\n\n)<replicas_attachments>\nUploaded files are available at:((?:\n- .*)*)(?:\n<\/?[a-z_]*>?)?$/) ?? text3.match(/(?:^|\n\n)Uploaded files are available at:((?:\n- .*)*)$/);
5988
6004
  let content = match ? text3.replace(match[0], "").trim() : text3;
5989
- const walkthroughs = [];
5990
- const truncated = WALKTHROUGH_NOTE_REGEX.test(content) ? null : content.match(TRUNCATED_WALKTHROUGH_NOTE_REGEX);
5991
- if (truncated) {
5992
- walkthroughs.push({ path: truncated[1], durationSeconds: Number(truncated[2] ?? 0), audio: truncated[3] === "true" });
5993
- content = content.slice(0, truncated.index).trim();
5994
- }
5995
- for (let walkthrough = content.match(WALKTHROUGH_NOTE_REGEX); walkthrough; walkthrough = content.match(WALKTHROUGH_NOTE_REGEX)) {
5996
- walkthroughs.unshift({ path: walkthrough[1], durationSeconds: Number(walkthrough[2]), audio: walkthrough[3] === "true" });
5997
- content = content.slice(0, walkthrough.index).trim();
5998
- }
6005
+ const takeTrailingNotes = (noteRegex, truncatedRegex, parse) => {
6006
+ const notes = [];
6007
+ const truncated = noteRegex.test(content) ? null : content.match(truncatedRegex);
6008
+ if (truncated) {
6009
+ notes.push(parse(truncated));
6010
+ content = content.slice(0, truncated.index).trim();
6011
+ }
6012
+ for (let note = content.match(noteRegex); note; note = content.match(noteRegex)) {
6013
+ notes.unshift(parse(note));
6014
+ content = content.slice(0, note.index).trim();
6015
+ }
6016
+ return notes;
6017
+ };
6018
+ const walkthroughs = takeTrailingNotes(WALKTHROUGH_NOTE_REGEX, TRUNCATED_WALKTHROUGH_NOTE_REGEX, (walkthrough) => ({ path: walkthrough[1], durationSeconds: Number(walkthrough[2] ?? 0), audio: walkthrough[3] === "true" }));
6019
+ const appshots = takeTrailingNotes(APPSHOT_NOTE_REGEX, TRUNCATED_APPSHOT_NOTE_REGEX, parseAppshot);
5999
6020
  return {
6000
6021
  content,
6001
6022
  files: match ? [...match[1].matchAll(/^- (.+)$/gm)].map(([, path]) => path) : [],
6002
- walkthroughs
6023
+ walkthroughs,
6024
+ appshots
6003
6025
  };
6004
6026
  }
6005
6027
 
@@ -8017,18 +8039,19 @@ function filterDisplayMessages(messages, provider2) {
8017
8039
  }
8018
8040
  result = result.flatMap((msg) => {
8019
8041
  if (msg.type !== "user") return [msg];
8020
- const { content, files, walkthroughs } = stripAttachmentNote(stripReplicasInstructionBlock(msg.content).trim());
8042
+ const { content, files, walkthroughs, appshots } = stripAttachmentNote(stripReplicasInstructionBlock(msg.content).trim());
8021
8043
  if (INTERRUPTED_MESSAGE_REGEX.test(content)) {
8022
8044
  return [{ id: msg.id, type: "interruption", timestamp: msg.timestamp }];
8023
8045
  }
8024
8046
  const cleaned = (msg.images?.length || files.length) && ATTACHMENT_PLACEHOLDER_REGEX.test(content) ? "" : content;
8025
- if (cleaned.length === 0 && !msg.images?.length && files.length === 0 && walkthroughs.length === 0) return [];
8026
- if (cleaned === msg.content && files.length === 0 && walkthroughs.length === 0) return [msg];
8047
+ if (cleaned.length === 0 && !msg.images?.length && files.length === 0 && walkthroughs.length === 0 && appshots.length === 0) return [];
8048
+ if (cleaned === msg.content && files.length === 0 && walkthroughs.length === 0 && appshots.length === 0) return [msg];
8027
8049
  return [{
8028
8050
  ...msg,
8029
8051
  content: cleaned,
8030
8052
  ...files.length > 0 ? { files } : {},
8031
- ...walkthroughs.length > 0 ? { walkthroughs } : {}
8053
+ ...walkthroughs.length > 0 ? { walkthroughs } : {},
8054
+ ...appshots.length > 0 ? { appshots } : {}
8032
8055
  }];
8033
8056
  });
8034
8057
  return result;
@@ -3,10 +3,10 @@ import { createRequire as __createRequire } from 'node:module';
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  execFileAsync
6
- } from "./chunk-NYTMILLQ.js";
6
+ } from "./chunk-6NXMMW2M.js";
7
7
  import {
8
8
  isVersionBelow
9
- } from "./chunk-N423MPLL.js";
9
+ } from "./chunk-RMM7QYDD.js";
10
10
 
11
11
  // src/utils/codex-agent-env.ts
12
12
  function buildCodexAgentEnv(source = process.env) {
@@ -240,7 +240,7 @@ function getCodexModelProvider(method) {
240
240
  if (method === "foundry") return "azure";
241
241
  return method === "ollama" || method === "openai-compatible" ? "replicas_openai_compatible" : "openai";
242
242
  }
243
- var ENGINE_PACKAGE_VERSION = "0.1.1273";
243
+ var ENGINE_PACKAGE_VERSION = "0.1.1274";
244
244
  var INITIALIZE_METHOD = "initialize";
245
245
  var INITIALIZED_NOTIFICATION = "initialized";
246
246
  var ACCOUNT_LOGIN_START_METHOD = "account/login/start";
@@ -4,7 +4,7 @@ const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  SUBPROCESS_MAX_BUFFER,
6
6
  execFileAsync
7
- } from "./chunk-NYTMILLQ.js";
7
+ } from "./chunk-6NXMMW2M.js";
8
8
  import {
9
9
  isRecord as isRecord2
10
10
  } from "./chunk-UZSNFLDQ.js";
@@ -22,7 +22,7 @@ import {
22
22
  provisionedDeviceSchema,
23
23
  readReplicasRuntimeEnv,
24
24
  serializePosixEnvFile
25
- } from "./chunk-N423MPLL.js";
25
+ } from "./chunk-RMM7QYDD.js";
26
26
 
27
27
  // src/runtime-env-loader.ts
28
28
  import { readFileSync } from "fs";
@@ -5,14 +5,14 @@ import {
5
5
  getOriginDefaultBranch,
6
6
  monolithRequest,
7
7
  runGitCommand
8
- } from "./chunk-MSAINGDM.js";
8
+ } from "./chunk-WXOUR6BE.js";
9
9
  import {
10
10
  extractCommandProtectionCommandText,
11
11
  findCommandProtectionGitLookups,
12
12
  findGitCommitSignals,
13
13
  findPrMergeSignals,
14
14
  parseCommandProtectionRequest
15
- } from "./chunk-N423MPLL.js";
15
+ } from "./chunk-RMM7QYDD.js";
16
16
 
17
17
  // src/services/command-protection-service.ts
18
18
  import { readFile, stat } from "fs/promises";
@@ -10,15 +10,15 @@ import {
10
10
  resolveDiffBase,
11
11
  runGitCommand,
12
12
  setAgentCredentialSnapshot
13
- } from "./chunk-MSAINGDM.js";
13
+ } from "./chunk-WXOUR6BE.js";
14
14
  import {
15
15
  AppServerProcess,
16
16
  buildCodexAgentEnv
17
- } from "./chunk-RN3WSTZ2.js";
17
+ } from "./chunk-WOMDGBDP.js";
18
18
  import {
19
19
  SUBPROCESS_MAX_BUFFER,
20
20
  execFileAsync
21
- } from "./chunk-NYTMILLQ.js";
21
+ } from "./chunk-6NXMMW2M.js";
22
22
  import {
23
23
  isRecord
24
24
  } from "./chunk-UZSNFLDQ.js";
@@ -55,7 +55,7 @@ import {
55
55
  resolveOpenAICompatibleModelsUrl,
56
56
  splitMothershipInstructions,
57
57
  withTimeout
58
- } from "./chunk-N423MPLL.js";
58
+ } from "./chunk-RMM7QYDD.js";
59
59
 
60
60
  // src/managers/codex-token-manager.ts
61
61
  import { promises as fs } from "fs";
@@ -291,7 +291,7 @@ var CodexTokenManager = class extends BaseRefreshManager {
291
291
  await this.applyCredentialUpdate(++this.credentialGeneration, async () => {
292
292
  await this.applyCredentialsResponse(data);
293
293
  setAgentCredentialSnapshot("codex", data);
294
- const { restartCodexAspHostIfRunning: restartCodexAspHostIfRunning2 } = await import("./asp-host-CEK5RMXT.js");
294
+ const { restartCodexAspHostIfRunning: restartCodexAspHostIfRunning2 } = await import("./asp-host-QOYX22WQ.js");
295
295
  await restartCodexAspHostIfRunning2();
296
296
  });
297
297
  await this.start(true);
@@ -313,7 +313,7 @@ var CodexTokenManager = class extends BaseRefreshManager {
313
313
  const accountChanged = ENGINE_ENV.REPLICAS_AGENT_CREDENTIALS.codex?.credentialId !== data.credentialId;
314
314
  await this.applyCredentialsResponse(data);
315
315
  if (restartOnChange && (accountChanged || CODEX_AUTH_ENV_KEYS.some((key, index) => process.env[key] !== previousEnv[index]))) {
316
- const { restartCodexAspHostIfRunning: restartCodexAspHostIfRunning2 } = await import("./asp-host-CEK5RMXT.js");
316
+ const { restartCodexAspHostIfRunning: restartCodexAspHostIfRunning2 } = await import("./asp-host-QOYX22WQ.js");
317
317
  await restartCodexAspHostIfRunning2();
318
318
  }
319
319
  setAgentCredentialSnapshot("codex", data);
@@ -3,13 +3,13 @@ import { createRequire as __createRequire } from 'node:module';
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  evaluateCommandProtection
6
- } from "./chunk-RWFSXLQK.js";
7
- import "./chunk-MSAINGDM.js";
8
- import "./chunk-NYTMILLQ.js";
6
+ } from "./chunk-Z52ET7SB.js";
7
+ import "./chunk-WXOUR6BE.js";
8
+ import "./chunk-6NXMMW2M.js";
9
9
  import {
10
10
  isRecord
11
11
  } from "./chunk-UZSNFLDQ.js";
12
- import "./chunk-N423MPLL.js";
12
+ import "./chunk-RMM7QYDD.js";
13
13
  import "./chunk-VEQXQN22.js";
14
14
 
15
15
  // src/command-protection-hook.ts
@@ -13,12 +13,12 @@ import {
13
13
  recoverCompletedTurn,
14
14
  spawnMuseMsp,
15
15
  startMuseSession
16
- } from "./chunk-MD7UNUWG.js";
16
+ } from "./chunk-P3AROZ62.js";
17
17
  import {
18
18
  AppServerProcess,
19
19
  buildCodexAgentEnv
20
- } from "./chunk-RN3WSTZ2.js";
21
- import "./chunk-NYTMILLQ.js";
20
+ } from "./chunk-WOMDGBDP.js";
21
+ import "./chunk-6NXMMW2M.js";
22
22
  import {
23
23
  AGENT,
24
24
  OPENCODE_GO_PROVIDER,
@@ -28,7 +28,7 @@ import {
28
28
  headlessAgentUsagePath,
29
29
  isRecord,
30
30
  withTimeout
31
- } from "./chunk-N423MPLL.js";
31
+ } from "./chunk-RMM7QYDD.js";
32
32
  import "./chunk-VEQXQN22.js";
33
33
 
34
34
  // src/headless-agent.ts
package/dist/src/index.js CHANGED
@@ -27,7 +27,7 @@ import {
27
27
  evaluateCommandProtection,
28
28
  extractToolCommand,
29
29
  reportCommandProtectionBlock
30
- } from "./chunk-RWFSXLQK.js";
30
+ } from "./chunk-Z52ET7SB.js";
31
31
  import {
32
32
  ACCOUNT_RATE_LIMITS_UPDATED_METHOD,
33
33
  AGENT_MESSAGE_DELTA_METHOD,
@@ -64,10 +64,10 @@ import {
64
64
  spawnMuseMsp,
65
65
  startMuseSession,
66
66
  uuidV7
67
- } from "./chunk-MD7UNUWG.js";
67
+ } from "./chunk-P3AROZ62.js";
68
68
  import {
69
69
  publishedPullRequestUrls
70
- } from "./chunk-DT45R2ZS.js";
70
+ } from "./chunk-JRL36G6S.js";
71
71
  import {
72
72
  ACCOUNT_RATE_LIMITS_READ_METHOD,
73
73
  AsyncLock,
@@ -140,7 +140,7 @@ import {
140
140
  timestampFromSeconds,
141
141
  upsertCredentialFileLines,
142
142
  writeSecureCredentialFile
143
- } from "./chunk-BP5NIOYF.js";
143
+ } from "./chunk-ZYAIMKKX.js";
144
144
  import {
145
145
  ENGINE_ENV,
146
146
  monolithRequest,
@@ -150,15 +150,15 @@ import {
150
150
  resolveDiffBase,
151
151
  setAgentCredentialSnapshot,
152
152
  setLinearSessionId
153
- } from "./chunk-MSAINGDM.js";
153
+ } from "./chunk-WXOUR6BE.js";
154
154
  import {
155
155
  getCodexModelProvider
156
- } from "./chunk-RN3WSTZ2.js";
156
+ } from "./chunk-WOMDGBDP.js";
157
157
  import {
158
158
  SUBPROCESS_MAX_BUFFER,
159
159
  execAsync,
160
160
  execFileAsync
161
- } from "./chunk-NYTMILLQ.js";
161
+ } from "./chunk-6NXMMW2M.js";
162
162
  import {
163
163
  isRecord as isRecord2
164
164
  } from "./chunk-UZSNFLDQ.js";
@@ -402,7 +402,7 @@ import {
402
402
  workspaceTokenRequestSchema,
403
403
  workspaceTokenResponseSchema,
404
404
  wrapInTag
405
- } from "./chunk-N423MPLL.js";
405
+ } from "./chunk-RMM7QYDD.js";
406
406
  import {
407
407
  cloneMcpConfig,
408
408
  ensureCompatibilityImports,
@@ -3,13 +3,13 @@ import { createRequire as __createRequire } from 'node:module';
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  publishedPullRequestUrls
6
- } from "./chunk-DT45R2ZS.js";
6
+ } from "./chunk-JRL36G6S.js";
7
7
  import {
8
8
  isRecord
9
9
  } from "./chunk-UZSNFLDQ.js";
10
10
  import {
11
11
  shouldRefreshPullRequests
12
- } from "./chunk-N423MPLL.js";
12
+ } from "./chunk-RMM7QYDD.js";
13
13
  import "./chunk-VEQXQN22.js";
14
14
 
15
15
  // src/services/post-tool-pr-notifier.ts
@@ -11,7 +11,7 @@ import {
11
11
  spawnSubagentRequestSchema,
12
12
  subagentResponseSchema,
13
13
  waitSubagentRequestSchema
14
- } from "./chunk-N423MPLL.js";
14
+ } from "./chunk-RMM7QYDD.js";
15
15
  import "./chunk-VEQXQN22.js";
16
16
 
17
17
  // src/subagent-mcp.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "replicas-engine",
3
- "version": "0.1.1273",
3
+ "version": "0.1.1274",
4
4
  "description": "Lightweight API server for Replicas workspaces",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",