replicas-engine 0.1.1306 → 0.1.1308

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-YJ7NCHM6.js";
12
- import "./chunk-TKAWFIXX.js";
13
- import "./chunk-OSPDTEXF.js";
14
- import "./chunk-IHC4JY3Q.js";
11
+ } from "./chunk-XBKJROPE.js";
12
+ import "./chunk-CDRCJUTU.js";
13
+ import "./chunk-QCV7O27G.js";
14
+ import "./chunk-FDLME7OO.js";
15
15
  import "./chunk-UZSNFLDQ.js";
16
- import "./chunk-QBNBBWCE.js";
16
+ import "./chunk-JEP6EFK4.js";
17
17
  import "./chunk-VEQXQN22.js";
18
18
  export {
19
19
  CODEX_ULTRAFAST_SERVICE_TIER,
@@ -4,7 +4,7 @@ const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  SUBPROCESS_MAX_BUFFER,
6
6
  execFileAsync
7
- } from "./chunk-IHC4JY3Q.js";
7
+ } from "./chunk-FDLME7OO.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-QBNBBWCE.js";
25
+ } from "./chunk-JEP6EFK4.js";
26
26
 
27
27
  // src/runtime-env-loader.ts
28
28
  import { readFileSync } from "fs";
@@ -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-QBNBBWCE.js";
6
+ } from "./chunk-JEP6EFK4.js";
7
7
 
8
8
  // src/utils/exec.ts
9
9
  import { exec, execFile } from "child_process";
@@ -2148,6 +2148,19 @@ if [ "$1" = "get" ]; then
2148
2148
  fi
2149
2149
  fi
2150
2150
  fi
2151
+ if ! printf '%s
2152
+ ' "$credential" | grep -q '^password='; then
2153
+ host=$(printf '%s
2154
+ ' "$request" | sed -n 's/^host=//p')
2155
+ repository=$(printf '%s
2156
+ ' "$request" | sed -n 's/^path=//p' | sed 's/\\.git$//')
2157
+ # The engine drops every github.com line when GitHub refuses a refresh, so other lines for the host mean this repository was never granted.
2158
+ if grep -q "@$host" ${shellQuotePosix(credentialsPath)} 2>/dev/null; then
2159
+ echo "Replicas: this workspace has no credentials for \${repository:-this repository}. Only the repositories in its environment get them, so the fix is a workspace on an environment that includes it." >&2
2160
+ else
2161
+ echo "Replicas: this workspace has no credentials for $host. Either its environment includes no repository there, or Replicas could not refresh its access; the engine log says which." >&2
2162
+ fi
2163
+ fi
2151
2164
  printf '%s
2152
2165
  ' "$credential"
2153
2166
  elif [ "$1" = "erase" ]; then
@@ -3301,7 +3314,8 @@ Use this when:
3301
3314
  - You're opening pull requests that build on each other (a stack)
3302
3315
  - You need to interact with GitHub issues or actions
3303
3316
  - You need to use the GitHub API for advanced operations
3304
- - You need to include images in PR descriptions`;
3317
+ - You need to include images in PR descriptions
3318
+ - Pushing or opening a pull request failed`;
3305
3319
  var REFERENCE4 = `# GitHub Integration
3306
3320
 
3307
3321
  This guide covers how to interact with GitHub from within your Replicas workspace. Prefer \`@replicas/sdk\` for API calls so batching and data processing stay in one TypeScript program. The \`gh\` CLI remains useful for ergonomic pull request and git-adjacent workflows.
@@ -3341,6 +3355,14 @@ gh pr checks 123
3341
3355
  gh pr merge 123
3342
3356
  \`\`\`
3343
3357
 
3358
+ ### When pushing or opening a pull request fails
3359
+
3360
+ Tell the person the real cause and the real fix, not a guess. Check \`git remote -v\`, \`git config --show-origin --get-all credential.helper\`, and \`gh auth status\` first.
3361
+
3362
+ - **The Replicas credential helper says this workspace has no credentials for the repository:** the repository isn't in the workspace's environment, so this workspace can't push to it even if you cloned it yourself. Say so, and that a workspace on an environment that includes the repository can make the change. When it says it has no credentials for the whole host, check \`~/.replicas/logs\` for a failed GitHub token refresh before choosing a cause.
3363
+ - **\`Resource not accessible by integration\`, or a 403 or 404 that isn't a rate limit:** the token in use can't write to that repository. When it isn't the workspace's own (Replicas configures \`gh\` and the \`~/${GIT_CREDENTIAL_HELPER_FILENAME}\` credential helper), it came from the environment, such as a start hook or variable: say that token lacks access and retry with the workspace's own credentials. Otherwise the Replicas GitHub App can't reach the repository: an organization admin has to install it there or grant it access. A rate limit (\`API rate limit exceeded\`, \`x-ratelimit-remaining: 0\`) only needs a wait and a retry.
3364
+ - Say to reconnect GitHub only when the error itself says so, which happens when PR user attribution is on and the person's GitHub account is missing or expired.
3365
+
3344
3366
  ### Stacked Pull Requests
3345
3367
 
3346
3368
  When a change spans pull requests that build on each other, open each one with \`--base\` set to the branch below it, then link them into a GitHub stack. GitHub then shows the whole stack on every pull request in it. The \`gh stack\` extension is pre-installed.
@@ -6045,9 +6067,17 @@ var dreamVerdictSchema = dreamVerdictChecksSchema.extend({ approve: z21.boolean(
6045
6067
  var learnedSkillFormatInstruction = (speaker) => `Write a SKILL.md whose frontmatter has a kebab-case \`name\` and a short \`description\` that starts with "Use when" and names the situations it applies to; the body records only what ${speaker} actually said, restated as a direct instruction, usually one to three lines. Every line of a learning is loaded into future sessions, so leave out anything an agent could infer on its own: no headings, explanations, rules, or examples unless ${speaker} stated those specifics themselves. For "from now on, use Conventional Commits", the body is just "Use Conventional Commits for every commit message and PR title."`;
6046
6068
 
6047
6069
  // ../shared/src/user-message-matching.ts
6070
+ var parsedTimestamps = /* @__PURE__ */ new Map();
6048
6071
  function parseTimestampMs(timestamp) {
6049
- const value = typeof timestamp === "number" ? timestamp : Date.parse(timestamp);
6050
- return Number.isFinite(value) ? value : 0;
6072
+ if (typeof timestamp === "number") return Number.isFinite(timestamp) ? timestamp : 0;
6073
+ let value = parsedTimestamps.get(timestamp);
6074
+ if (value === void 0) {
6075
+ const parsed = Date.parse(timestamp);
6076
+ value = Number.isFinite(parsed) ? parsed : 0;
6077
+ if (parsedTimestamps.size >= 5e4) parsedTimestamps.clear();
6078
+ parsedTimestamps.set(timestamp, value);
6079
+ }
6080
+ return value;
6051
6081
  }
6052
6082
  function areUserMessagesWithinMatchWindow(a, b) {
6053
6083
  return a.content === b.content && Math.abs(parseTimestampMs(a.timestamp) - parseTimestampMs(b.timestamp)) <= USER_MESSAGE_MATCH_GRACE_PERIOD_MS;
@@ -8232,6 +8262,7 @@ function isAgentBackendEvent(value) {
8232
8262
  const candidate = value;
8233
8263
  return typeof candidate.timestamp === "string" && typeof candidate.type === "string" && typeof candidate.payload === "object" && candidate.payload !== null;
8234
8264
  }
8265
+ var strippedUserContents = /* @__PURE__ */ new Map();
8235
8266
  function filterDisplayMessages(messages, provider2) {
8236
8267
  let result = messages;
8237
8268
  if (provider2 === "codex") {
@@ -8242,7 +8273,13 @@ function filterDisplayMessages(messages, provider2) {
8242
8273
  }
8243
8274
  result = result.flatMap((msg) => {
8244
8275
  if (msg.type !== "user") return [msg];
8245
- const { content, files, walkthroughs, appshots, annotations } = stripAttachmentNote(stripReplicasInstructionBlock(msg.content).trim());
8276
+ let stripped = strippedUserContents.get(msg.content);
8277
+ if (!stripped) {
8278
+ stripped = stripAttachmentNote(stripReplicasInstructionBlock(msg.content).trim());
8279
+ if (strippedUserContents.size >= 5e3) strippedUserContents.clear();
8280
+ strippedUserContents.set(msg.content, stripped);
8281
+ }
8282
+ const { content, files, walkthroughs, appshots, annotations } = stripped;
8246
8283
  if (INTERRUPTED_MESSAGE_REGEX.test(content)) {
8247
8284
  return [{ id: msg.id, type: "interruption", timestamp: msg.timestamp }];
8248
8285
  }
@@ -10808,6 +10845,24 @@ export {
10808
10845
  SUBAGENT_SERVICE_TIERS,
10809
10846
  serviceTierRequestFields,
10810
10847
  TERMINAL_RTC_ICE_SERVER,
10848
+ REPLICAS_RUNTIME_ENV_ALIASES,
10849
+ readReplicasRuntimeEnv,
10850
+ shellQuotePosix,
10851
+ serializePosixEnvFile,
10852
+ parsePosixEnvUnsetKeys,
10853
+ parsePosixEnvFile,
10854
+ ENGINE_PORT,
10855
+ DESKTOP_STREAM_PORT,
10856
+ DEVICES_DIR,
10857
+ DEVICE_SCREEN_FILE_SUFFIX,
10858
+ GIT_CREDENTIAL_HELPER_FILENAME,
10859
+ GITHUB_CREDENTIAL_REFRESH_PATH,
10860
+ GITLAB_CREDENTIAL_REFRESH_PATH,
10861
+ getGitHubAccessToken,
10862
+ githubCredentialLines,
10863
+ buildGitCredentialHelperScript,
10864
+ parseGitRemote,
10865
+ gitIdentityConfigCommands,
10811
10866
  HISTORY_ROOT,
10812
10867
  HISTORY_INDEX_FILENAME,
10813
10868
  REPLICAS_INSTRUCTIONS_TAG,
@@ -10864,24 +10919,6 @@ export {
10864
10919
  clampTokensToWindow,
10865
10920
  buildCodexTokenUsageContextUsagePayload,
10866
10921
  extractLatestContextUsage,
10867
- REPLICAS_RUNTIME_ENV_ALIASES,
10868
- readReplicasRuntimeEnv,
10869
- shellQuotePosix,
10870
- serializePosixEnvFile,
10871
- parsePosixEnvUnsetKeys,
10872
- parsePosixEnvFile,
10873
- ENGINE_PORT,
10874
- DESKTOP_STREAM_PORT,
10875
- DEVICES_DIR,
10876
- DEVICE_SCREEN_FILE_SUFFIX,
10877
- GIT_CREDENTIAL_HELPER_FILENAME,
10878
- GITHUB_CREDENTIAL_REFRESH_PATH,
10879
- GITLAB_CREDENTIAL_REFRESH_PATH,
10880
- getGitHubAccessToken,
10881
- githubCredentialLines,
10882
- buildGitCredentialHelperScript,
10883
- parseGitRemote,
10884
- gitIdentityConfigCommands,
10885
10922
  InFlightMap,
10886
10923
  createProviderSlashCommand,
10887
10924
  mergeSlashCommands,
@@ -6,7 +6,7 @@ import {
6
6
  getOriginDefaultBranch,
7
7
  monolithRequest,
8
8
  runGitCommand
9
- } from "./chunk-TKAWFIXX.js";
9
+ } from "./chunk-CDRCJUTU.js";
10
10
  import {
11
11
  extractCommandProtectionCommandText,
12
12
  findCommandProtectionGitLookups,
@@ -14,7 +14,7 @@ import {
14
14
  findPrMergeSignals,
15
15
  findScoutRepoWriteSignals,
16
16
  parseCommandProtectionRequest
17
- } from "./chunk-QBNBBWCE.js";
17
+ } from "./chunk-JEP6EFK4.js";
18
18
 
19
19
  // src/services/command-protection-service.ts
20
20
  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-OSPDTEXF.js";
6
+ } from "./chunk-QCV7O27G.js";
7
7
  import {
8
8
  ASTER_BASE_URL,
9
9
  ASTER_PROVIDER,
@@ -15,7 +15,7 @@ import {
15
15
  isRecord,
16
16
  readOllamaAuthEnv,
17
17
  readOpenAICompatibleAuthEnv
18
- } from "./chunk-QBNBBWCE.js";
18
+ } from "./chunk-JEP6EFK4.js";
19
19
 
20
20
  // src/managers/codex-asp/notification-dispatch.ts
21
21
  var TURN_STARTED_METHOD = "turn/started";
@@ -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-IHC4JY3Q.js";
6
+ } from "./chunk-FDLME7OO.js";
7
7
  import {
8
8
  isVersionBelow
9
- } from "./chunk-QBNBBWCE.js";
9
+ } from "./chunk-JEP6EFK4.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.1306";
243
+ var ENGINE_PACKAGE_VERSION = "0.1.1308";
244
244
  var INITIALIZE_METHOD = "initialize";
245
245
  var INITIALIZED_NOTIFICATION = "initialized";
246
246
  var ACCOUNT_LOGIN_START_METHOD = "account/login/start";
@@ -10,15 +10,15 @@ import {
10
10
  resolveDiffBase,
11
11
  runGitCommand,
12
12
  setAgentCredentialSnapshot
13
- } from "./chunk-TKAWFIXX.js";
13
+ } from "./chunk-CDRCJUTU.js";
14
14
  import {
15
15
  AppServerProcess,
16
16
  buildCodexAgentEnv
17
- } from "./chunk-OSPDTEXF.js";
17
+ } from "./chunk-QCV7O27G.js";
18
18
  import {
19
19
  SUBPROCESS_MAX_BUFFER,
20
20
  execFileAsync
21
- } from "./chunk-IHC4JY3Q.js";
21
+ } from "./chunk-FDLME7OO.js";
22
22
  import {
23
23
  isRecord
24
24
  } from "./chunk-UZSNFLDQ.js";
@@ -56,7 +56,7 @@ import {
56
56
  resolveOpenAICompatibleModelsUrl,
57
57
  splitMothershipInstructions,
58
58
  withTimeout
59
- } from "./chunk-QBNBBWCE.js";
59
+ } from "./chunk-JEP6EFK4.js";
60
60
 
61
61
  // src/managers/codex-token-manager.ts
62
62
  import { promises as fs } from "fs";
@@ -306,7 +306,7 @@ var CodexTokenManager = class extends BaseRefreshManager {
306
306
  await this.applyCredentialUpdate(++this.credentialGeneration, async () => {
307
307
  await this.applyCredentialsResponse(data);
308
308
  setAgentCredentialSnapshot("codex", data);
309
- const { restartCodexAspHostIfRunning: restartCodexAspHostIfRunning2 } = await import("./asp-host-AQZFJO5T.js");
309
+ const { restartCodexAspHostIfRunning: restartCodexAspHostIfRunning2 } = await import("./asp-host-UZTWCJFQ.js");
310
310
  await restartCodexAspHostIfRunning2();
311
311
  });
312
312
  await this.start(true);
@@ -328,7 +328,7 @@ var CodexTokenManager = class extends BaseRefreshManager {
328
328
  const accountChanged = ENGINE_ENV.REPLICAS_AGENT_CREDENTIALS.codex?.credentialId !== data.credentialId;
329
329
  await this.applyCredentialsResponse(data);
330
330
  if (restartOnChange && (accountChanged || CODEX_AUTH_ENV_KEYS.some((key, index) => process.env[key] !== previousEnv[index]))) {
331
- const { restartCodexAspHostIfRunning: restartCodexAspHostIfRunning2 } = await import("./asp-host-AQZFJO5T.js");
331
+ const { restartCodexAspHostIfRunning: restartCodexAspHostIfRunning2 } = await import("./asp-host-UZTWCJFQ.js");
332
332
  await restartCodexAspHostIfRunning2();
333
333
  }
334
334
  setAgentCredentialSnapshot("codex", data);
@@ -5,7 +5,7 @@ import {
5
5
  extractCommandProtectionCommandText,
6
6
  isRecord,
7
7
  parseCodeHostPrUrl
8
- } from "./chunk-QBNBBWCE.js";
8
+ } from "./chunk-JEP6EFK4.js";
9
9
 
10
10
  // src/services/published-pull-request-urls.ts
11
11
  function publishedPullRequestUrls(result) {
@@ -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-VZXRPXJI.js";
7
- import "./chunk-TKAWFIXX.js";
8
- import "./chunk-IHC4JY3Q.js";
6
+ } from "./chunk-KZV23QDU.js";
7
+ import "./chunk-CDRCJUTU.js";
8
+ import "./chunk-FDLME7OO.js";
9
9
  import {
10
10
  isRecord
11
11
  } from "./chunk-UZSNFLDQ.js";
12
- import "./chunk-QBNBBWCE.js";
12
+ import "./chunk-JEP6EFK4.js";
13
13
  import "./chunk-VEQXQN22.js";
14
14
 
15
15
  // src/command-protection-hook.ts
@@ -14,12 +14,12 @@ import {
14
14
  recoverCompletedTurn,
15
15
  spawnMuseMsp,
16
16
  startMuseSession
17
- } from "./chunk-4AY3GCWL.js";
17
+ } from "./chunk-MAMNSZ53.js";
18
18
  import {
19
19
  AppServerProcess,
20
20
  buildCodexAgentEnv
21
- } from "./chunk-OSPDTEXF.js";
22
- import "./chunk-IHC4JY3Q.js";
21
+ } from "./chunk-QCV7O27G.js";
22
+ import "./chunk-FDLME7OO.js";
23
23
  import {
24
24
  AGENT,
25
25
  OPENCODE_GO_PROVIDER,
@@ -29,7 +29,7 @@ import {
29
29
  headlessAgentUsagePath,
30
30
  isRecord,
31
31
  withTimeout
32
- } from "./chunk-QBNBBWCE.js";
32
+ } from "./chunk-JEP6EFK4.js";
33
33
  import "./chunk-VEQXQN22.js";
34
34
 
35
35
  // 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-VZXRPXJI.js";
30
+ } from "./chunk-KZV23QDU.js";
31
31
  import {
32
32
  ACCOUNT_RATE_LIMITS_UPDATED_METHOD,
33
33
  AGENT_MESSAGE_DELTA_METHOD,
@@ -65,10 +65,10 @@ import {
65
65
  spawnMuseMsp,
66
66
  startMuseSession,
67
67
  uuidV7
68
- } from "./chunk-4AY3GCWL.js";
68
+ } from "./chunk-MAMNSZ53.js";
69
69
  import {
70
70
  publishedPullRequestUrls
71
- } from "./chunk-DDUTPOJ3.js";
71
+ } from "./chunk-Z5IQAQDK.js";
72
72
  import {
73
73
  ACCOUNT_RATE_LIMITS_READ_METHOD,
74
74
  AsyncLock,
@@ -143,7 +143,7 @@ import {
143
143
  timestampFromSeconds,
144
144
  upsertCredentialFileLines,
145
145
  writeSecureCredentialFile
146
- } from "./chunk-YJ7NCHM6.js";
146
+ } from "./chunk-XBKJROPE.js";
147
147
  import {
148
148
  ENGINE_ENV,
149
149
  monolithRequest,
@@ -153,15 +153,15 @@ import {
153
153
  resolveDiffBase,
154
154
  setAgentCredentialSnapshot,
155
155
  setLinearSessionId
156
- } from "./chunk-TKAWFIXX.js";
156
+ } from "./chunk-CDRCJUTU.js";
157
157
  import {
158
158
  getCodexModelProvider
159
- } from "./chunk-OSPDTEXF.js";
159
+ } from "./chunk-QCV7O27G.js";
160
160
  import {
161
161
  SUBPROCESS_MAX_BUFFER,
162
162
  execAsync,
163
163
  execFileAsync
164
- } from "./chunk-IHC4JY3Q.js";
164
+ } from "./chunk-FDLME7OO.js";
165
165
  import {
166
166
  isRecord as isRecord2
167
167
  } from "./chunk-UZSNFLDQ.js";
@@ -415,7 +415,7 @@ import {
415
415
  workspaceTokenRequestSchema,
416
416
  workspaceTokenResponseSchema,
417
417
  wrapInTag
418
- } from "./chunk-QBNBBWCE.js";
418
+ } from "./chunk-JEP6EFK4.js";
419
419
  import {
420
420
  cloneMcpConfig,
421
421
  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-DDUTPOJ3.js";
6
+ } from "./chunk-Z5IQAQDK.js";
7
7
  import {
8
8
  isRecord
9
9
  } from "./chunk-UZSNFLDQ.js";
10
10
  import {
11
11
  shouldRefreshPullRequests
12
- } from "./chunk-QBNBBWCE.js";
12
+ } from "./chunk-JEP6EFK4.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-QBNBBWCE.js";
14
+ } from "./chunk-JEP6EFK4.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.1306",
3
+ "version": "0.1.1308",
4
4
  "description": "Lightweight API server for Replicas workspaces",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",