replicas-engine 0.1.1358 → 0.1.1359

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-BXWOJUWF.js";
12
- import "./chunk-M3PZ5ATD.js";
13
- import "./chunk-BEI2XG3R.js";
14
- import "./chunk-6ZELYSQZ.js";
11
+ } from "./chunk-LO7VRVDR.js";
12
+ import "./chunk-5MGEDUHN.js";
13
+ import "./chunk-7L7HH3N5.js";
14
+ import "./chunk-2FY2VKXN.js";
15
15
  import "./chunk-UZSNFLDQ.js";
16
- import "./chunk-IVVDBI66.js";
16
+ import "./chunk-7UHY3XGQ.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-IVVDBI66.js";
6
+ } from "./chunk-7UHY3XGQ.js";
7
7
 
8
8
  // src/utils/exec.ts
9
9
  import { exec, execFile } from "child_process";
@@ -4,7 +4,7 @@ const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  SUBPROCESS_MAX_BUFFER,
6
6
  execFileAsync
7
- } from "./chunk-6ZELYSQZ.js";
7
+ } from "./chunk-2FY2VKXN.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-IVVDBI66.js";
24
+ } from "./chunk-7UHY3XGQ.js";
25
25
 
26
26
  // src/runtime-env-loader.ts
27
27
  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
  AspClient
6
- } from "./chunk-BEI2XG3R.js";
6
+ } from "./chunk-7L7HH3N5.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-IVVDBI66.js";
18
+ } from "./chunk-7UHY3XGQ.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-6ZELYSQZ.js";
6
+ } from "./chunk-2FY2VKXN.js";
7
7
  import {
8
8
  isVersionBelow
9
- } from "./chunk-IVVDBI66.js";
9
+ } from "./chunk-7UHY3XGQ.js";
10
10
 
11
11
  // src/utils/codex-agent-env.ts
12
12
  function buildCodexAgentEnv(source = process.env) {
@@ -11763,6 +11763,8 @@ var REPLICAS_MCP_TOOLS = {
11763
11763
  deleteChannelPreset: "delete_channel_preset",
11764
11764
  updateChannelSettings: "update_channel_settings",
11765
11765
  setOrganizationProactivity: "set_organization_proactivity",
11766
+ setSlackAgentDefaults: "set_slack_agent_defaults",
11767
+ claimSettingsOffer: "claim_settings_offer",
11766
11768
  setThreadMuted: "set_thread_muted",
11767
11769
  spawnSubagent: "spawn_subagent",
11768
11770
  messageSubagent: "message_subagent",
@@ -11834,6 +11836,7 @@ var createEnvironmentDeviceToolInputSchema = z17.object({ ...environmentMcpPath,
11834
11836
  var SCOUT_SOURCE_TYPES = ["slack", "linear"];
11835
11837
  var SCOUT_PROACTIVITY_LEVELS = ["tagged", "conservative", "balanced", "proactive"];
11836
11838
  var SCOUT_PRESET_NAME_MAX_LENGTH = 50;
11839
+ var SCOUT_SETTINGS_OFFERS = ["proactivity", "instructions", "organization_proactivity"];
11837
11840
  var SCOUT_PRESET_ICONS = [
11838
11841
  "users",
11839
11842
  "user",
@@ -14494,6 +14497,13 @@ function splitMothershipInstructions(customInstructions) {
14494
14497
  mothershipInstructions: match?.[1]
14495
14498
  };
14496
14499
  }
14500
+ var SCOUT_ADAPTIVE_SETTINGS_PROMPT = `### Adapting to each channel
14501
+ There is no settings page: people change how you behave by telling you, and you suggest a change when it would clearly help. The envelope carries the channel's \`proactivity\` and \`offers\`, the offers you may still make in this channel (\`proactivity\`, \`instructions\`); \`offers=none\` means make none. Offer only what \`offers\` lists, at most one per message. Claim an offer with \`${REPLICAS_MCP_TOOLS.claimSettingsOffer}\` right before posting it, and post it only when the claim succeeds. When someone declines ("no", "it's fine", "leave it"), record it with \`declined: true\` and drop it; never repeat an ignored offer. When they accept, apply it with the settings tools using the accepting message as confirmation, then confirm what changed in one short line.
14502
+ - **Frustration.** When someone is clearly annoyed that you replied or acted unasked ("wtf why did replicas respond", "stop", "not you", "nobody asked", or \`event=reaction:\u2026\`, a thumbs-down or similar on a reply you posted unasked), claim \`proactivity\` and post one short apology that offers to lower this channel exactly one step. From Balanced or High, offer Low: "Sorry for jumping in. Want me to only reply here when someone mentions me by name?" From Low, offer Mentions only: "Sorry for jumping in. Want me to only reply here when someone @mentions me?" On a yes, set the level you offered, nothing lower. Do nothing else in that thread. When the claim answers \`offer: organization\`, people were frustrated in several channels, so offer the same for every channel instead; when \`requester_is_admin\` is false, say an organization admin can change it for every channel and offer this channel. A thumbs-down on a reply someone asked for is about the answer, not about speaking up, so leave it. An explicit "stop replying in this thread" is still a thread mute.
14503
+ - **Channel instructions.** On \`event=joined\` (you were just added to the channel; reply in that envelope's thread), or when you act in a channel for the first time, and the channel's name or purpose points to a clear role (#triage, #bugs, #incidents, #support, #customer-*, a customer's shared channel), claim \`instructions\` and offer one concrete behavior in one line, such as "This looks like an incident channel. Want me to triage new reports here, check for duplicates, and post findings in the thread?" On \`event=joined\` without a clear role, do nothing at all. Make the same kind of offer when you notice you keep handling messages here the same way, or that the channel clearly belongs to a Mothership (offer to send its actionable messages to that Mothership by name). On a yes, save it as the channel's instructions, or as its preset when one fits exactly.
14504
+ - **Tip.** When the envelope has \`tip=true\`, this is the first time someone pinged you in this channel, so end the reply you post with one more line: "_Tip: tell me how you want me to act in this channel._" It is shown once per channel, so never add it otherwise.
14505
+ - **Slack agent defaults.** To change the agent, model, thinking level, goal mode or fast mode used for tasks started from Slack ("use Codex for Slack tasks"), call \`${REPLICAS_MCP_TOOLS.setSlackAgentDefaults}\`; only an organization admin can.
14506
+ - **What can I change?** Read the current settings, then answer with a short list of what applies: how much you speak up here or in every channel (Mentions only, Low, Balanced, High; raising a channel above Mentions only and the every-channel default need an admin), instructions or a preset for this channel, sending this channel's requests to a Mothership, which Linear teams you triage (an admin starts one), and the agent defaults for Slack tasks (admin). Say each one's current value.`;
14497
14507
 
14498
14508
  // ../shared/src/mothership-events.ts
14499
14509
  var MOTHERSHIP_EVENT_KINDS = ["finished", "ready", "needs_attention", "merged", "closed", "archived"];
@@ -19739,6 +19749,21 @@ var scoutSetOrganizationProactivityToolInputSchema = scoutSlackConfirmationSchem
19739
19749
  var scoutDeleteChannelPresetToolInputSchema = scoutSlackConfirmationSchema.extend({
19740
19750
  preset_id: z25.string().describe(`Id of the preset to delete, from \`${REPLICAS_MCP_TOOLS.listChannelSettings}\`.`)
19741
19751
  });
19752
+ var RESET_TO_DEFAULT = "default";
19753
+ var resettable = (schema, description) => z25.union([schema, z25.literal(RESET_TO_DEFAULT)]).optional().describe(`${description} \`${RESET_TO_DEFAULT}\` falls back to the organization default. Omit to keep it.`);
19754
+ var scoutSetSlackAgentDefaultsToolInputSchema = scoutSlackConfirmationSchema.extend({
19755
+ agent_provider: resettable(z25.enum(AGENT), "Agent for Slack-triggered workspaces. Changing it without `model` resets the model to that agent's default."),
19756
+ model: resettable(z25.string(), "Model id for that agent; the default is the agent's own."),
19757
+ thinking_level: resettable(z25.enum(VALID_THINKING_LEVELS), "Thinking level."),
19758
+ goal_mode: resettable(z25.boolean(), "Goal mode."),
19759
+ fast_mode: resettable(z25.boolean(), "Fast mode.")
19760
+ });
19761
+ var scoutClaimSettingsOfferToolInputSchema = z25.object({
19762
+ channel_id: slackChannelIdSchema,
19763
+ kind: z25.enum(SCOUT_SETTINGS_OFFERS).describe("`proactivity`: offering a lower level after frustration. `instructions`: offering channel instructions or a preset. `organization_proactivity`: offering to lower the workspace default; only decline it, the server claims it for you."),
19764
+ user_id: z25.string().optional().describe("The envelope's `user_id`. Required for `proactivity`, so the server can say whether they are an organization admin."),
19765
+ declined: z25.boolean().optional().describe("true when the person declined an offer you already made, so it is not made again.")
19766
+ });
19742
19767
 
19743
19768
  // ../shared/src/routes/plugin-catalog.ts
19744
19769
  var EXPLICIT_PLUGIN_CATALOG = [
@@ -10,15 +10,15 @@ import {
10
10
  resolveDiffBase,
11
11
  runGitCommand,
12
12
  setAgentCredentialSnapshot
13
- } from "./chunk-M3PZ5ATD.js";
13
+ } from "./chunk-5MGEDUHN.js";
14
14
  import {
15
15
  AppServerProcess,
16
16
  buildCodexAgentEnv
17
- } from "./chunk-BEI2XG3R.js";
17
+ } from "./chunk-7L7HH3N5.js";
18
18
  import {
19
19
  SUBPROCESS_MAX_BUFFER,
20
20
  execFileAsync
21
- } from "./chunk-6ZELYSQZ.js";
21
+ } from "./chunk-2FY2VKXN.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-IVVDBI66.js";
59
+ } from "./chunk-7UHY3XGQ.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-HVY2NSMR.js");
322
+ const { restartCodexAspHostIfRunning: restartCodexAspHostIfRunning2 } = await import("./asp-host-WNFNHLT6.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-HVY2NSMR.js");
344
+ const { restartCodexAspHostIfRunning: restartCodexAspHostIfRunning2 } = await import("./asp-host-WNFNHLT6.js");
345
345
  await restartCodexAspHostIfRunning2();
346
346
  }
347
347
  setAgentCredentialSnapshot("codex", data);
@@ -6,7 +6,7 @@ import {
6
6
  getOriginDefaultBranch,
7
7
  monolithRequest,
8
8
  runGitCommand
9
- } from "./chunk-M3PZ5ATD.js";
9
+ } from "./chunk-5MGEDUHN.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-IVVDBI66.js";
17
+ } from "./chunk-7UHY3XGQ.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-IVVDBI66.js";
8
+ } from "./chunk-7UHY3XGQ.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-CLLPQ2MA.js";
7
- import "./chunk-M3PZ5ATD.js";
8
- import "./chunk-6ZELYSQZ.js";
6
+ } from "./chunk-SKAH2W4B.js";
7
+ import "./chunk-5MGEDUHN.js";
8
+ import "./chunk-2FY2VKXN.js";
9
9
  import {
10
10
  isRecord
11
11
  } from "./chunk-UZSNFLDQ.js";
12
- import "./chunk-IVVDBI66.js";
12
+ import "./chunk-7UHY3XGQ.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-33UVQTRU.js";
17
+ } from "./chunk-5RTWRMTP.js";
18
18
  import {
19
19
  AppServerProcess,
20
20
  buildCodexAgentEnv
21
- } from "./chunk-BEI2XG3R.js";
22
- import "./chunk-6ZELYSQZ.js";
21
+ } from "./chunk-7L7HH3N5.js";
22
+ import "./chunk-2FY2VKXN.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-IVVDBI66.js";
32
+ } from "./chunk-7UHY3XGQ.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-CLLPQ2MA.js";
30
+ } from "./chunk-SKAH2W4B.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-33UVQTRU.js";
68
+ } from "./chunk-5RTWRMTP.js";
69
69
  import {
70
70
  publishedPullRequestUrls
71
- } from "./chunk-EICIABTM.js";
71
+ } from "./chunk-VXFJJOIJ.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-BXWOJUWF.js";
146
+ } from "./chunk-LO7VRVDR.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-M3PZ5ATD.js";
156
+ } from "./chunk-5MGEDUHN.js";
157
157
  import {
158
158
  getCodexModelProvider
159
- } from "./chunk-BEI2XG3R.js";
159
+ } from "./chunk-7L7HH3N5.js";
160
160
  import {
161
161
  SUBPROCESS_MAX_BUFFER,
162
162
  execAsync,
163
163
  execFileAsync
164
- } from "./chunk-6ZELYSQZ.js";
164
+ } from "./chunk-2FY2VKXN.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-IVVDBI66.js";
425
+ } from "./chunk-7UHY3XGQ.js";
426
426
  import {
427
427
  cloneMcpConfig,
428
428
  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-EICIABTM.js";
6
+ } from "./chunk-VXFJJOIJ.js";
7
7
  import {
8
8
  isRecord
9
9
  } from "./chunk-UZSNFLDQ.js";
10
10
  import {
11
11
  shouldRefreshPullRequests
12
- } from "./chunk-IVVDBI66.js";
12
+ } from "./chunk-7UHY3XGQ.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-IVVDBI66.js";
14
+ } from "./chunk-7UHY3XGQ.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.1358",
3
+ "version": "0.1.1359",
4
4
  "description": "Lightweight API server for Replicas workspaces",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",