replicas-engine 0.1.1359 → 0.1.1361

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-LO7VRVDR.js";
12
- import "./chunk-5MGEDUHN.js";
13
- import "./chunk-7L7HH3N5.js";
14
- import "./chunk-2FY2VKXN.js";
11
+ } from "./chunk-ZDKOXODA.js";
12
+ import "./chunk-YQI4XGIX.js";
13
+ import "./chunk-JP54MG3X.js";
14
+ import "./chunk-QCX45VR3.js";
15
15
  import "./chunk-UZSNFLDQ.js";
16
- import "./chunk-7UHY3XGQ.js";
16
+ import "./chunk-TQ6XAXNA.js";
17
17
  import "./chunk-VEQXQN22.js";
18
18
  export {
19
19
  CODEX_ULTRAFAST_SERVICE_TIER,
@@ -6,7 +6,7 @@ import {
6
6
  getOriginDefaultBranch,
7
7
  monolithRequest,
8
8
  runGitCommand
9
- } from "./chunk-5MGEDUHN.js";
9
+ } from "./chunk-YQI4XGIX.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-7UHY3XGQ.js";
17
+ } from "./chunk-TQ6XAXNA.js";
18
18
 
19
19
  // src/services/command-protection-service.ts
20
20
  import { readFile, stat } from "fs/promises";
@@ -5,7 +5,7 @@ import {
5
5
  extractCommandProtectionCommandText,
6
6
  isRecord,
7
7
  parseCodeHostPrUrl
8
- } from "./chunk-7UHY3XGQ.js";
8
+ } from "./chunk-TQ6XAXNA.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-2FY2VKXN.js";
6
+ } from "./chunk-QCX45VR3.js";
7
7
  import {
8
8
  isVersionBelow
9
- } from "./chunk-7UHY3XGQ.js";
9
+ } from "./chunk-TQ6XAXNA.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.1357";
243
+ var ENGINE_PACKAGE_VERSION = "0.1.1361";
244
244
  var INITIALIZE_METHOD = "initialize";
245
245
  var INITIALIZED_NOTIFICATION = "initialized";
246
246
  var ACCOUNT_LOGIN_START_METHOD = "account/login/start";
@@ -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-7L7HH3N5.js";
6
+ } from "./chunk-JP54MG3X.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-7UHY3XGQ.js";
18
+ } from "./chunk-TQ6XAXNA.js";
19
19
 
20
20
  // src/managers/codex-asp/notification-dispatch.ts
21
21
  var TURN_STARTED_METHOD = "turn/started";
@@ -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-7UHY3XGQ.js";
6
+ } from "./chunk-TQ6XAXNA.js";
7
7
 
8
8
  // src/utils/exec.ts
9
9
  import { exec, execFile } from "child_process";
@@ -11168,14 +11168,20 @@ var mergePullRequestRequestSchema = z6.object({
11168
11168
  });
11169
11169
 
11170
11170
  // ../shared/src/routes/mothership.ts
11171
- var mothershipLinearRuleSchema = z7.object({
11171
+ var linearRuleFields = z7.object({
11172
11172
  team_id: z7.string().min(1),
11173
11173
  current_cycle: z7.boolean().optional(),
11174
- label_id: z7.string().min(1).optional(),
11174
+ label_ids: z7.array(z7.string().min(1)).min(1).optional(),
11175
11175
  project_id: z7.string().min(1).optional(),
11176
11176
  assignee_id: z7.string().min(1).optional()
11177
11177
  }).strict();
11178
- var storedMothershipLinearRuleSchema = mothershipLinearRuleSchema.extend({ linked_at: z7.string() });
11178
+ var withLabelIds = (value) => {
11179
+ if (!isRecord(value) || typeof value.label_id !== "string") return value;
11180
+ const { label_id, ...rest } = value;
11181
+ return { ...rest, label_ids: [label_id] };
11182
+ };
11183
+ var mothershipLinearRuleSchema = z7.preprocess(withLabelIds, linearRuleFields);
11184
+ var storedMothershipLinearRuleSchema = z7.preprocess(withLabelIds, linearRuleFields.extend({ linked_at: z7.string() }));
11179
11185
  var SUBAGENT_SERVICE_TIERS = ["default", "fast", "ultrafast"];
11180
11186
  function serviceTierRequestFields(tier) {
11181
11187
  return { fastMode: tier !== "default", ...tier === "ultrafast" ? { ultrafastMode: true } : {} };
@@ -11772,6 +11778,9 @@ var REPLICAS_MCP_TOOLS = {
11772
11778
  readSubagent: "read_subagent",
11773
11779
  archiveSubagent: "archive_subagent",
11774
11780
  waitForSubagents: "wait_for_subagents",
11781
+ getLinearRouting: "get_linear_routing",
11782
+ setLinearRouting: "set_linear_routing",
11783
+ clearLinearRouting: "clear_linear_routing",
11775
11784
  createReplica: "create_replica",
11776
11785
  listReplicas: "list_replicas",
11777
11786
  getReplica: "get_replica",
@@ -15760,7 +15769,10 @@ var REPLICAS_API_STEPS = {
15760
15769
  [REPLICAS_MCP_TOOLS.deleteChat]: { icon: "trash", live: "Deleting chat", done: "Deleted chat" },
15761
15770
  [REPLICAS_MCP_TOOLS.listRepositories]: { icon: "folder", live: "Listing repositories", done: "Listed repositories" },
15762
15771
  [REPLICAS_MCP_TOOLS.listEnvironments]: { icon: "list", live: "Listing environments", done: "Listed environments" },
15763
- [REPLICAS_MCP_TOOLS.createAutomation]: { icon: "clock", live: "Creating automation", done: "Created automation" }
15772
+ [REPLICAS_MCP_TOOLS.createAutomation]: { icon: "clock", live: "Creating automation", done: "Created automation" },
15773
+ [REPLICAS_MCP_TOOLS.getLinearRouting]: { icon: "search", live: "Checking Linear routing", done: "Checked Linear routing" },
15774
+ [REPLICAS_MCP_TOOLS.setLinearRouting]: { icon: "wrench", live: "Setting Linear routing", done: "Set Linear routing" },
15775
+ [REPLICAS_MCP_TOOLS.clearLinearRouting]: { icon: "trash", live: "Clearing Linear routing", done: "Cleared Linear routing" }
15764
15776
  };
15765
15777
  var INTERNAL_TOOLS = /* @__PURE__ */ new Set(["ToolSearch", "ListAgents", "ListMcpResourcesTool", "ReadMcpResourceTool", "TaskOutput", "BashOutput"]);
15766
15778
  function describeToolCall(message2, base) {
@@ -4,7 +4,7 @@ const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  SUBPROCESS_MAX_BUFFER,
6
6
  execFileAsync
7
- } from "./chunk-2FY2VKXN.js";
7
+ } from "./chunk-QCX45VR3.js";
8
8
  import {
9
9
  isRecord as isRecord2
10
10
  } from "./chunk-UZSNFLDQ.js";
@@ -21,7 +21,7 @@ import {
21
21
  provisionedDeviceSchema,
22
22
  readReplicasRuntimeEnv,
23
23
  serializePosixEnvFile
24
- } from "./chunk-7UHY3XGQ.js";
24
+ } from "./chunk-TQ6XAXNA.js";
25
25
 
26
26
  // src/runtime-env-loader.ts
27
27
  import { readFileSync } from "fs";
@@ -10,15 +10,15 @@ import {
10
10
  resolveDiffBase,
11
11
  runGitCommand,
12
12
  setAgentCredentialSnapshot
13
- } from "./chunk-5MGEDUHN.js";
13
+ } from "./chunk-YQI4XGIX.js";
14
14
  import {
15
15
  AppServerProcess,
16
16
  buildCodexAgentEnv
17
- } from "./chunk-7L7HH3N5.js";
17
+ } from "./chunk-JP54MG3X.js";
18
18
  import {
19
19
  SUBPROCESS_MAX_BUFFER,
20
20
  execFileAsync
21
- } from "./chunk-2FY2VKXN.js";
21
+ } from "./chunk-QCX45VR3.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-7UHY3XGQ.js";
59
+ } from "./chunk-TQ6XAXNA.js";
60
60
 
61
61
  // src/managers/codex-token-manager.ts
62
62
  import { promises as fs } from "fs";
@@ -319,7 +319,7 @@ var CodexTokenManager = class extends BaseRefreshManager {
319
319
  await this.applyCredentialUpdate(++this.credentialGeneration, async () => {
320
320
  await this.applyCredentialsResponse(data);
321
321
  setAgentCredentialSnapshot("codex", data);
322
- const { restartCodexAspHostIfRunning: restartCodexAspHostIfRunning2 } = await import("./asp-host-WNFNHLT6.js");
322
+ const { restartCodexAspHostIfRunning: restartCodexAspHostIfRunning2 } = await import("./asp-host-OBF4WP6L.js");
323
323
  await restartCodexAspHostIfRunning2();
324
324
  });
325
325
  await this.start(true);
@@ -341,7 +341,7 @@ var CodexTokenManager = class extends BaseRefreshManager {
341
341
  const accountChanged = ENGINE_ENV.REPLICAS_AGENT_CREDENTIALS.codex?.credentialId !== data.credentialId;
342
342
  await this.applyCredentialsResponse(data);
343
343
  if (restartOnChange && (accountChanged || CODEX_AUTH_ENV_KEYS.some((key, index) => process.env[key] !== previousEnv[index]))) {
344
- const { restartCodexAspHostIfRunning: restartCodexAspHostIfRunning2 } = await import("./asp-host-WNFNHLT6.js");
344
+ const { restartCodexAspHostIfRunning: restartCodexAspHostIfRunning2 } = await import("./asp-host-OBF4WP6L.js");
345
345
  await restartCodexAspHostIfRunning2();
346
346
  }
347
347
  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-SKAH2W4B.js";
7
- import "./chunk-5MGEDUHN.js";
8
- import "./chunk-2FY2VKXN.js";
6
+ } from "./chunk-4B4JJPAB.js";
7
+ import "./chunk-YQI4XGIX.js";
8
+ import "./chunk-QCX45VR3.js";
9
9
  import {
10
10
  isRecord
11
11
  } from "./chunk-UZSNFLDQ.js";
12
- import "./chunk-7UHY3XGQ.js";
12
+ import "./chunk-TQ6XAXNA.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-5RTWRMTP.js";
17
+ } from "./chunk-NQSMRY4V.js";
18
18
  import {
19
19
  AppServerProcess,
20
20
  buildCodexAgentEnv
21
- } from "./chunk-7L7HH3N5.js";
22
- import "./chunk-2FY2VKXN.js";
21
+ } from "./chunk-JP54MG3X.js";
22
+ import "./chunk-QCX45VR3.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-7UHY3XGQ.js";
32
+ } from "./chunk-TQ6XAXNA.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-SKAH2W4B.js";
30
+ } from "./chunk-4B4JJPAB.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-5RTWRMTP.js";
68
+ } from "./chunk-NQSMRY4V.js";
69
69
  import {
70
70
  publishedPullRequestUrls
71
- } from "./chunk-VXFJJOIJ.js";
71
+ } from "./chunk-6FLA4WPX.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-LO7VRVDR.js";
146
+ } from "./chunk-ZDKOXODA.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-5MGEDUHN.js";
156
+ } from "./chunk-YQI4XGIX.js";
157
157
  import {
158
158
  getCodexModelProvider
159
- } from "./chunk-7L7HH3N5.js";
159
+ } from "./chunk-JP54MG3X.js";
160
160
  import {
161
161
  SUBPROCESS_MAX_BUFFER,
162
162
  execAsync,
163
163
  execFileAsync
164
- } from "./chunk-2FY2VKXN.js";
164
+ } from "./chunk-QCX45VR3.js";
165
165
  import {
166
166
  isRecord as isRecord2
167
167
  } from "./chunk-UZSNFLDQ.js";
@@ -422,7 +422,7 @@ import {
422
422
  workspaceTokenRequestSchema,
423
423
  workspaceTokenResponseSchema,
424
424
  wrapInTag
425
- } from "./chunk-7UHY3XGQ.js";
425
+ } from "./chunk-TQ6XAXNA.js";
426
426
  import {
427
427
  cloneMcpConfig,
428
428
  ensureCompatibilityImports,
@@ -12857,14 +12857,26 @@ function isClaudeSessionActive(activity) {
12857
12857
  // src/managers/claude-background-tasks.ts
12858
12858
  var ClaudeBackgroundTasks = class {
12859
12859
  active = /* @__PURE__ */ new Set();
12860
- foreground = /* @__PURE__ */ new Set();
12860
+ // The main agent's blocking tasks, by tool_use id; a subagent's own commands are its to wait on.
12861
+ foreground = /* @__PURE__ */ new Map();
12862
+ // A task counts as the main agent's only when its tool call is one the main agent made, so a task
12863
+ // whose owner can't be told apart is left running.
12864
+ mainToolUses = /* @__PURE__ */ new Set();
12861
12865
  reset() {
12862
12866
  this.active.clear();
12863
12867
  this.foreground.clear();
12868
+ this.mainToolUses.clear();
12864
12869
  }
12865
12870
  update(message) {
12871
+ if (message.type === "assistant" && message.parent_tool_use_id === null) {
12872
+ for (const block of message.message.content) if (block.type === "tool_use") this.mainToolUses.add(block.id);
12873
+ }
12874
+ if (message.type === "result") this.mainToolUses.clear();
12866
12875
  if (message.type !== "system") return;
12867
- if (message.subtype === "task_started" && message.is_backgrounded === false) this.foreground.add(message.task_id);
12876
+ const ownedBySubagent = "owned_by_subagent" in message && message.owned_by_subagent === true;
12877
+ if (message.subtype === "task_started" && message.is_backgrounded === false && !message.parent_task_id && !ownedBySubagent && message.tool_use_id && this.mainToolUses.delete(message.tool_use_id)) {
12878
+ this.foreground.set(message.task_id, message.tool_use_id);
12879
+ }
12868
12880
  if (message.subtype === "task_notification") this.foreground.delete(message.task_id);
12869
12881
  if (message.subtype === "task_updated" && (message.patch.is_backgrounded || message.patch.status && message.patch.status !== "running")) {
12870
12882
  this.foreground.delete(message.task_id);
@@ -13219,7 +13231,8 @@ var ClaudeManager = class _ClaudeManager extends CodingAgentManager {
13219
13231
  return this.activeQuery !== null && this.backgroundTasks.foreground.size > 0;
13220
13232
  }
13221
13233
  async deliverSteersNow() {
13222
- await this.activeQuery?.backgroundTasks();
13234
+ const query2 = this.activeQuery;
13235
+ if (query2) await Promise.all([...this.backgroundTasks.foreground.values()].map((toolUseId) => query2.backgroundTasks(toolUseId)));
13223
13236
  }
13224
13237
  // Claude Code folds a `next`-priority prompt into the running turn at its next tool boundary.
13225
13238
  async steerRequest(request) {
@@ -13992,6 +14005,14 @@ var ClaudeManager = class _ClaudeManager extends CodingAgentManager {
13992
14005
  return {};
13993
14006
  }],
13994
14007
  timeout: 30
14008
+ }, {
14009
+ // Only Send now backgrounds commands here, so Claude Code's "manually backgrounded by user" isn't true.
14010
+ matcher: "Bash",
14011
+ hooks: [async (input) => {
14012
+ const response2 = input.hook_event_name === "PostToolUse" ? input.tool_response : void 0;
14013
+ return isRecord(response2) && response2.backgroundedByUser === true ? { hookSpecificOutput: { hookEventName: "PostToolUse", updatedToolOutput: { ...response2, backgroundedByUser: false, backgroundedToDeliverMessage: true } } } : {};
14014
+ }],
14015
+ timeout: 30
13995
14016
  }, {
13996
14017
  matcher: "Workflow",
13997
14018
  hooks: [async (input) => {
@@ -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-VXFJJOIJ.js";
6
+ } from "./chunk-6FLA4WPX.js";
7
7
  import {
8
8
  isRecord
9
9
  } from "./chunk-UZSNFLDQ.js";
10
10
  import {
11
11
  shouldRefreshPullRequests
12
- } from "./chunk-7UHY3XGQ.js";
12
+ } from "./chunk-TQ6XAXNA.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-7UHY3XGQ.js";
14
+ } from "./chunk-TQ6XAXNA.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.1359",
3
+ "version": "0.1.1361",
4
4
  "description": "Lightweight API server for Replicas workspaces",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",