replicas-engine 0.1.1262 → 0.1.1263

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-IWENYTHI.js";
12
- import "./chunk-ARSZGGKG.js";
13
- import "./chunk-VAPDZVIY.js";
14
- import "./chunk-DEE2MIUW.js";
11
+ } from "./chunk-E3U4EX4U.js";
12
+ import "./chunk-SJIWGPT3.js";
13
+ import "./chunk-RDJ73FDQ.js";
14
+ import "./chunk-AHPBQSXT.js";
15
15
  import "./chunk-UZSNFLDQ.js";
16
- import "./chunk-WINIX7II.js";
16
+ import "./chunk-FNPPBKJI.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-WINIX7II.js";
6
+ } from "./chunk-FNPPBKJI.js";
7
7
 
8
8
  // src/utils/exec.ts
9
9
  import { exec, execFile } from "child_process";
@@ -5,14 +5,14 @@ import {
5
5
  getOriginDefaultBranch,
6
6
  monolithRequest,
7
7
  runGitCommand
8
- } from "./chunk-ARSZGGKG.js";
8
+ } from "./chunk-SJIWGPT3.js";
9
9
  import {
10
10
  extractCommandProtectionCommandText,
11
11
  findCommandProtectionGitLookups,
12
12
  findGitCommitSignals,
13
13
  findPrMergeSignals,
14
14
  parseCommandProtectionRequest
15
- } from "./chunk-WINIX7II.js";
15
+ } from "./chunk-FNPPBKJI.js";
16
16
 
17
17
  // src/services/command-protection-service.ts
18
18
  import { readFile, stat } from "fs/promises";
@@ -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-VAPDZVIY.js";
6
+ } from "./chunk-RDJ73FDQ.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-WINIX7II.js";
16
+ } from "./chunk-FNPPBKJI.js";
17
17
 
18
18
  // src/managers/codex-asp/notification-dispatch.ts
19
19
  var TURN_STARTED_METHOD = "turn/started";
@@ -10,15 +10,15 @@ import {
10
10
  resolveDiffBase,
11
11
  runGitCommand,
12
12
  setAgentCredentialSnapshot
13
- } from "./chunk-ARSZGGKG.js";
13
+ } from "./chunk-SJIWGPT3.js";
14
14
  import {
15
15
  AppServerProcess,
16
16
  buildCodexAgentEnv
17
- } from "./chunk-VAPDZVIY.js";
17
+ } from "./chunk-RDJ73FDQ.js";
18
18
  import {
19
19
  SUBPROCESS_MAX_BUFFER,
20
20
  execFileAsync
21
- } from "./chunk-DEE2MIUW.js";
21
+ } from "./chunk-AHPBQSXT.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-WINIX7II.js";
58
+ } from "./chunk-FNPPBKJI.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-Y3F2DEYR.js");
294
+ const { restartCodexAspHostIfRunning: restartCodexAspHostIfRunning2 } = await import("./asp-host-J32FRYRC.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-Y3F2DEYR.js");
316
+ const { restartCodexAspHostIfRunning: restartCodexAspHostIfRunning2 } = await import("./asp-host-J32FRYRC.js");
317
317
  await restartCodexAspHostIfRunning2();
318
318
  }
319
319
  setAgentCredentialSnapshot("codex", data);
@@ -2008,6 +2008,8 @@ function parsePosixEnvFile(content) {
2008
2008
  // ../shared/src/engine/environment.ts
2009
2009
  var ENGINE_PORT = 3737;
2010
2010
  var DESKTOP_STREAM_PORT = 6080;
2011
+ var DEVICES_DIR = ".ssh/replicas-devices";
2012
+ var DEVICE_SCREEN_FILE_SUFFIX = ".screen.json";
2011
2013
 
2012
2014
  // ../shared/src/git.ts
2013
2015
  var GIT_CREDENTIAL_HELPER_FILENAME = ".git-credential-replicas";
@@ -2387,19 +2389,24 @@ var createEnvironmentMcpRequestSchema = z14.object({
2387
2389
  ]).describe("stdio: `{ command, args, env }`. http/sse: `{ url, headers }`.")
2388
2390
  });
2389
2391
  var updateEnvironmentMcpRequestSchema = createEnvironmentMcpRequestSchema.partial();
2392
+ var screenPasswordSchema = z14.string().min(1, "Enter the screen password").max(256).describe('Screen Sharing password, for `replicas computer screen`. On a Mac, the "VNC viewers may control screen with password" password. Never returned.');
2390
2393
  var createEnvironmentDeviceRequestSchema = z14.object({
2391
2394
  name: z14.string().regex(/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/, "Use lowercase letters, numbers and dashes").describe("SSH alias in workspaces, e.g. `mac-mini` for `ssh mac-mini`."),
2392
2395
  host: z14.string().max(253).regex(/^(?:[A-Za-z0-9](?:[A-Za-z0-9.-]*[A-Za-z0-9])?|[0-9A-Fa-f:]+)$/, "Enter a hostname or IP address").describe("Hostname or IP, such as a Tailscale MagicDNS name (`mac-mini`) or a public address."),
2393
2396
  port: z14.number().int().min(1).max(65535).optional().describe("SSH port. Defaults to 22."),
2394
- username: z14.string().regex(/^[A-Za-z0-9_][A-Za-z0-9._-]{0,63}$/, "Enter the account name on the device").describe("Account the agent signs in as.")
2397
+ username: z14.string().regex(/^[A-Za-z0-9_][A-Za-z0-9._-]{0,63}$/, "Enter the account name on the device").describe("Account the agent signs in as."),
2398
+ screen_password: screenPasswordSchema.optional()
2399
+ });
2400
+ var updateEnvironmentDeviceRequestSchema = createEnvironmentDeviceRequestSchema.partial().extend({
2401
+ screen_password: z14.union([screenPasswordSchema, z14.literal("")]).optional().describe("New Screen Sharing password, or an empty string to remove it.")
2395
2402
  });
2396
- var updateEnvironmentDeviceRequestSchema = createEnvironmentDeviceRequestSchema.partial();
2397
2403
  var provisionedDeviceSchema = z14.object({
2398
2404
  name: z14.string(),
2399
2405
  host: z14.string(),
2400
2406
  port: z14.number(),
2401
2407
  username: z14.string(),
2402
- private_key: z14.string()
2408
+ private_key: z14.string(),
2409
+ screen_password: z14.string().optional()
2403
2410
  });
2404
2411
 
2405
2412
  // ../shared/src/routes/workspaces.ts
@@ -10541,6 +10548,8 @@ export {
10541
10548
  parsePosixEnvFile,
10542
10549
  ENGINE_PORT,
10543
10550
  DESKTOP_STREAM_PORT,
10551
+ DEVICES_DIR,
10552
+ DEVICE_SCREEN_FILE_SUFFIX,
10544
10553
  GIT_CREDENTIAL_HELPER_FILENAME,
10545
10554
  GITHUB_CREDENTIAL_REFRESH_PATH,
10546
10555
  GITLAB_CREDENTIAL_REFRESH_PATH,
@@ -5,7 +5,7 @@ import {
5
5
  extractCommandProtectionCommandText,
6
6
  isRecord,
7
7
  parseCodeHostPrUrl
8
- } from "./chunk-WINIX7II.js";
8
+ } from "./chunk-FNPPBKJI.js";
9
9
 
10
10
  // src/services/published-pull-request-urls.ts
11
11
  function publishedPullRequestUrls(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-DEE2MIUW.js";
6
+ } from "./chunk-AHPBQSXT.js";
7
7
  import {
8
8
  isVersionBelow
9
- } from "./chunk-WINIX7II.js";
9
+ } from "./chunk-FNPPBKJI.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.1262";
243
+ var ENGINE_PACKAGE_VERSION = "0.1.1263";
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-DEE2MIUW.js";
7
+ } from "./chunk-AHPBQSXT.js";
8
8
  import {
9
9
  isRecord as isRecord2
10
10
  } from "./chunk-UZSNFLDQ.js";
@@ -20,7 +20,7 @@ import {
20
20
  parsePosixEnvFile,
21
21
  provisionedDeviceSchema,
22
22
  readReplicasRuntimeEnv
23
- } from "./chunk-WINIX7II.js";
23
+ } from "./chunk-FNPPBKJI.js";
24
24
 
25
25
  // src/runtime-env-loader.ts
26
26
  import { readFileSync } from "fs";
@@ -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-CNWOP7LH.js";
7
- import "./chunk-ARSZGGKG.js";
8
- import "./chunk-DEE2MIUW.js";
6
+ } from "./chunk-BN2QDNKJ.js";
7
+ import "./chunk-SJIWGPT3.js";
8
+ import "./chunk-AHPBQSXT.js";
9
9
  import {
10
10
  isRecord
11
11
  } from "./chunk-UZSNFLDQ.js";
12
- import "./chunk-WINIX7II.js";
12
+ import "./chunk-FNPPBKJI.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-R76SPM26.js";
16
+ } from "./chunk-DTERKPBR.js";
17
17
  import {
18
18
  AppServerProcess,
19
19
  buildCodexAgentEnv
20
- } from "./chunk-VAPDZVIY.js";
21
- import "./chunk-DEE2MIUW.js";
20
+ } from "./chunk-RDJ73FDQ.js";
21
+ import "./chunk-AHPBQSXT.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-WINIX7II.js";
31
+ } from "./chunk-FNPPBKJI.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-CNWOP7LH.js";
30
+ } from "./chunk-BN2QDNKJ.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-R76SPM26.js";
67
+ } from "./chunk-DTERKPBR.js";
68
68
  import {
69
69
  publishedPullRequestUrls
70
- } from "./chunk-XDF5QDJU.js";
70
+ } from "./chunk-KGZ2ER7G.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-IWENYTHI.js";
143
+ } from "./chunk-E3U4EX4U.js";
144
144
  import {
145
145
  ENGINE_ENV,
146
146
  monolithRequest,
@@ -149,15 +149,15 @@ import {
149
149
  reloadEngineEnv,
150
150
  resolveDiffBase,
151
151
  setAgentCredentialSnapshot
152
- } from "./chunk-ARSZGGKG.js";
152
+ } from "./chunk-SJIWGPT3.js";
153
153
  import {
154
154
  getCodexModelProvider
155
- } from "./chunk-VAPDZVIY.js";
155
+ } from "./chunk-RDJ73FDQ.js";
156
156
  import {
157
157
  SUBPROCESS_MAX_BUFFER,
158
158
  execAsync,
159
159
  execFileAsync
160
- } from "./chunk-DEE2MIUW.js";
160
+ } from "./chunk-AHPBQSXT.js";
161
161
  import {
162
162
  isRecord as isRecord2
163
163
  } from "./chunk-UZSNFLDQ.js";
@@ -207,6 +207,8 @@ import {
207
207
  DEFAULT_START_HOOK_TIMEOUT_MS,
208
208
  DEFAULT_WEB_APP_URL,
209
209
  DESKTOP_STREAM_PORT,
210
+ DEVICES_DIR,
211
+ DEVICE_SCREEN_FILE_SUFFIX,
210
212
  ENGINE_ACTIVATE_PATH,
211
213
  ENGINE_HEALTH_MAX_WAIT_MS,
212
214
  ENGINE_HEALTH_WAIT_HEADER,
@@ -397,7 +399,7 @@ import {
397
399
  workspaceTokenRequestSchema,
398
400
  workspaceTokenResponseSchema,
399
401
  wrapInTag
400
- } from "./chunk-WINIX7II.js";
402
+ } from "./chunk-FNPPBKJI.js";
401
403
  import {
402
404
  cloneMcpConfig,
403
405
  ensureCompatibilityImports,
@@ -10523,7 +10525,7 @@ async function registerDesktopPreview(signal) {
10523
10525
  // src/services/device-service.ts
10524
10526
  import { mkdir as mkdir7, rm as rm2, writeFile as writeFile4 } from "fs/promises";
10525
10527
  import { join as join8 } from "path";
10526
- var DEVICES_DIR = join8(ENGINE_ENV.HOME_DIR, ".ssh", "replicas-devices");
10528
+ var DEVICES_DIR2 = join8(ENGINE_ENV.HOME_DIR, DEVICES_DIR);
10527
10529
  var TAILSCALED_UNIT = "replicas-tailscaled";
10528
10530
  function sshConfig(devices, tailnet) {
10529
10531
  return devices.map((device) => [
@@ -10531,7 +10533,7 @@ function sshConfig(devices, tailnet) {
10531
10533
  ` HostName ${device.host}`,
10532
10534
  ` Port ${device.port}`,
10533
10535
  ` User ${device.username}`,
10534
- ` IdentityFile ${join8(DEVICES_DIR, device.name)}`,
10536
+ ` IdentityFile ${join8(DEVICES_DIR2, device.name)}`,
10535
10537
  " IdentitiesOnly yes",
10536
10538
  " StrictHostKeyChecking accept-new",
10537
10539
  " ServerAliveInterval 30",
@@ -10565,24 +10567,33 @@ async function joinTailnet(authKey, workspaceId, signal) {
10565
10567
  }
10566
10568
  async function connectDevices(signal) {
10567
10569
  const { REPLICAS_ENV_DEVICES: devices, TS_AUTHKEY: authKey, REPLICAS_WORKSPACE_ID: workspaceId } = ENGINE_ENV;
10568
- await rm2(DEVICES_DIR, { recursive: true, force: true });
10570
+ await rm2(DEVICES_DIR2, { recursive: true, force: true });
10569
10571
  if (devices.length === 0) {
10570
10572
  await execFileAsync("sudo", ["systemctl", "stop", TAILSCALED_UNIT], { signal }).catch(() => void 0);
10571
10573
  return;
10572
10574
  }
10573
- await mkdir7(DEVICES_DIR, { recursive: true, mode: 448 });
10574
- await Promise.all(devices.map((device) => writeFile4(join8(DEVICES_DIR, device.name), device.private_key, { mode: 384 })));
10575
- await writeFile4(join8(DEVICES_DIR, "devices.conf"), sshConfig(devices, authKey !== void 0), { mode: 384 });
10575
+ await mkdir7(DEVICES_DIR2, { recursive: true, mode: 448 });
10576
+ await Promise.all(devices.flatMap((device) => [
10577
+ writeFile4(join8(DEVICES_DIR2, device.name), device.private_key, { mode: 384 }),
10578
+ ...device.screen_password === void 0 ? [] : [writeFile4(
10579
+ join8(DEVICES_DIR2, `${device.name}${DEVICE_SCREEN_FILE_SUFFIX}`),
10580
+ JSON.stringify({ username: device.username, password: device.screen_password }),
10581
+ { mode: 384 }
10582
+ )]
10583
+ ]));
10584
+ await writeFile4(join8(DEVICES_DIR2, "devices.conf"), sshConfig(devices, authKey !== void 0), { mode: 384 });
10576
10585
  if (authKey && workspaceId) await joinTailnet(authKey, workspaceId, signal);
10577
10586
  }
10578
10587
  function devicesInstruction() {
10579
10588
  const devices = ENGINE_ENV.REPLICAS_ENV_DEVICES;
10580
10589
  if (devices.length === 0) return void 0;
10581
10590
  const list = devices.map((device) => `\`${device.name}\` (${device.username}@${device.host})`).join(", ");
10591
+ const screens = devices.filter((device) => device.screen_password !== void 0).map((device) => `\`${device.name}\``);
10582
10592
  return [
10583
10593
  `The user's own computers are reachable over SSH by name: ${list}. Use \`ssh <name>\`, \`scp\` and \`rsync\` as usual, and \`ssh -L\` to reach a service running on one.`,
10584
10594
  "They are personal machines with the user's files and accounts: change only what the task needs, and ask before anything destructive or hard to undo.",
10585
- ...ENGINE_ENV.TS_AUTHKEY ? ["They are reached through the user's tailnet. If a connection fails, `tailscale status` shows whether this workspace joined it."] : []
10595
+ ...ENGINE_ENV.TS_AUTHKEY ? ["They are reached through the user's tailnet. If a connection fails, `tailscale status` shows whether this workspace joined it."] : [],
10596
+ ...screens.length > 0 ? [`To see and control the screen of ${screens.join(", ")}, run \`replicas computer screen <name>\`: it shows on this desktop, where the other \`replicas computer\` commands drive it. Prefer \`ssh\` when a command does the job.`] : []
10586
10597
  ].join(" ");
10587
10598
  }
10588
10599
 
@@ -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-XDF5QDJU.js";
6
+ } from "./chunk-KGZ2ER7G.js";
7
7
  import {
8
8
  isRecord
9
9
  } from "./chunk-UZSNFLDQ.js";
10
10
  import {
11
11
  shouldRefreshPullRequests
12
- } from "./chunk-WINIX7II.js";
12
+ } from "./chunk-FNPPBKJI.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-WINIX7II.js";
14
+ } from "./chunk-FNPPBKJI.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.1262",
3
+ "version": "0.1.1263",
4
4
  "description": "Lightweight API server for Replicas workspaces",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",