@integrity-labs/agt-cli 0.28.1190 → 0.28.1192

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.
Files changed (31) hide show
  1. package/dist/bin/agt.js +6 -6
  2. package/dist/{chunk-KV6ZNGTG.js → chunk-DXLSLT5G.js} +2 -2
  3. package/dist/{chunk-EFTLDAKN.js → chunk-NJ2AUTIO.js} +3 -3
  4. package/dist/{chunk-NVLV6XHL.js → chunk-TCPX64GU.js} +7 -5
  5. package/dist/chunk-TCPX64GU.js.map +1 -0
  6. package/dist/{chunk-55M26Q4M.js → chunk-UQYIFOWE.js} +2 -2
  7. package/dist/{chunk-7GZKHF45.js → chunk-UUO7QTLC.js} +98 -16
  8. package/dist/chunk-UUO7QTLC.js.map +1 -0
  9. package/dist/{claude-code-updater-IU23JJZI.js → claude-code-updater-EOJQHUZ2.js} +3 -3
  10. package/dist/{claude-pair-runtime-GMXVV5AJ.js → claude-pair-runtime-WKTA3HNF.js} +3 -3
  11. package/dist/lib/manager-worker.js +71 -23
  12. package/dist/lib/manager-worker.js.map +1 -1
  13. package/dist/mcp/direct-chat-channel.js +3 -0
  14. package/dist/mcp/index.js +54 -1
  15. package/dist/mcp/origami.js +3 -0
  16. package/dist/mcp/slack-channel.js +3 -0
  17. package/dist/mcp/telegram-channel.js +3 -0
  18. package/dist/{persistent-session-7PBVDLFI.js → persistent-session-5MGJGJIB.js} +4 -4
  19. package/dist/{responsiveness-probe-RSH4EMQP.js → responsiveness-probe-J4CBYZS3.js} +4 -4
  20. package/dist/{session-auth-dead-M2YABEQU.js → session-auth-dead-7CSZHNBK.js} +3 -3
  21. package/package.json +1 -1
  22. package/dist/chunk-7GZKHF45.js.map +0 -1
  23. package/dist/chunk-NVLV6XHL.js.map +0 -1
  24. /package/dist/{chunk-KV6ZNGTG.js.map → chunk-DXLSLT5G.js.map} +0 -0
  25. /package/dist/{chunk-EFTLDAKN.js.map → chunk-NJ2AUTIO.js.map} +0 -0
  26. /package/dist/{chunk-55M26Q4M.js.map → chunk-UQYIFOWE.js.map} +0 -0
  27. /package/dist/{claude-code-updater-IU23JJZI.js.map → claude-code-updater-EOJQHUZ2.js.map} +0 -0
  28. /package/dist/{claude-pair-runtime-GMXVV5AJ.js.map → claude-pair-runtime-WKTA3HNF.js.map} +0 -0
  29. /package/dist/{persistent-session-7PBVDLFI.js.map → persistent-session-5MGJGJIB.js.map} +0 -0
  30. /package/dist/{responsiveness-probe-RSH4EMQP.js.map → responsiveness-probe-J4CBYZS3.js.map} +0 -0
  31. /package/dist/{session-auth-dead-M2YABEQU.js.map → session-auth-dead-7CSZHNBK.js.map} +0 -0
@@ -13,9 +13,9 @@ import {
13
13
  probeClaudeInstalls,
14
14
  readsAsNativeInstall,
15
15
  shouldRunClaudeCodeUpdater
16
- } from "./chunk-55M26Q4M.js";
16
+ } from "./chunk-UQYIFOWE.js";
17
17
  import "./chunk-XWVM4KPK.js";
18
- import "./chunk-7GZKHF45.js";
18
+ import "./chunk-UUO7QTLC.js";
19
19
  import "./chunk-AIUIMEUS.js";
20
20
  import "./chunk-DGUM43GV.js";
21
21
  export {
@@ -34,4 +34,4 @@ export {
34
34
  readsAsNativeInstall,
35
35
  shouldRunClaudeCodeUpdater
36
36
  };
37
- //# sourceMappingURL=claude-code-updater-IU23JJZI.js.map
37
+ //# sourceMappingURL=claude-code-updater-EOJQHUZ2.js.map
@@ -8,7 +8,7 @@ import {
8
8
  import {
9
9
  redactPaneFrame,
10
10
  sanitizeTerminalFrame
11
- } from "./chunk-7GZKHF45.js";
11
+ } from "./chunk-UUO7QTLC.js";
12
12
  import {
13
13
  CLAUDE_CONFIG_DIR_ENV,
14
14
  claudeConfigDirFor,
@@ -321,7 +321,7 @@ async function spawnPairSession(session) {
321
321
  return { ok: true };
322
322
  } catch {
323
323
  }
324
- const { resolveClaudeBinary } = await import("./persistent-session-7PBVDLFI.js");
324
+ const { resolveClaudeBinary } = await import("./persistent-session-5MGJGJIB.js");
325
325
  const claudeBin = resolveClaudeBinary();
326
326
  const pairEnv = {
327
327
  ...process.env,
@@ -836,4 +836,4 @@ export {
836
836
  startClaudePair,
837
837
  submitClaudePairCode
838
838
  };
839
- //# sourceMappingURL=claude-pair-runtime-GMXVV5AJ.js.map
839
+ //# sourceMappingURL=claude-pair-runtime-WKTA3HNF.js.map
@@ -83,7 +83,7 @@ import {
83
83
  tripClass,
84
84
  writeEtcEnvironment,
85
85
  writeProfileDScript
86
- } from "../chunk-NVLV6XHL.js";
86
+ } from "../chunk-TCPX64GU.js";
87
87
  import {
88
88
  CLAUDE_CODE_SECURITY_FLOOR,
89
89
  SELF_UPDATE_TIMEOUTS,
@@ -97,7 +97,7 @@ import {
97
97
  runSafeCleanup,
98
98
  tightestDiskStat,
99
99
  withPackageCacheLock
100
- } from "../chunk-55M26Q4M.js";
100
+ } from "../chunk-UQYIFOWE.js";
101
101
  import {
102
102
  rewriteSupervisorApiKey,
103
103
  supervisorChannelsRefusing
@@ -190,7 +190,7 @@ import {
190
190
  webFetchBaselineValue,
191
191
  webFetchRestartNeeded,
192
192
  writeEgressAllowlist
193
- } from "../chunk-EFTLDAKN.js";
193
+ } from "../chunk-NJ2AUTIO.js";
194
194
  import {
195
195
  isAgentIdle,
196
196
  isStaleForToday,
@@ -200,7 +200,7 @@ import {
200
200
  sessionTranscriptDir,
201
201
  subagentActivityAgeSeconds,
202
202
  transcriptActivityAgeSeconds
203
- } from "../chunk-KV6ZNGTG.js";
203
+ } from "../chunk-DXLSLT5G.js";
204
204
  import {
205
205
  classifyUnanswerablePane,
206
206
  focusedConfirmDialogBlock,
@@ -318,6 +318,7 @@ import {
318
318
  resolveChannels,
319
319
  resolveCrossTeamPeerIntraOrg,
320
320
  resolveDmTarget,
321
+ resolveInheritedForDelivery,
321
322
  resolveSessionActivityState,
322
323
  scrubPreservingIdentifiers,
323
324
  senderPolicyIsEnforcedOn,
@@ -326,7 +327,7 @@ import {
326
327
  stabiliseResetInstant,
327
328
  sumTranscriptUsageInWindow,
328
329
  summarizeTranscriptActivity
329
- } from "../chunk-7GZKHF45.js";
330
+ } from "../chunk-UUO7QTLC.js";
330
331
  import {
331
332
  CLAUDE_CONFIG_DIR_ENV,
332
333
  claudeConfigDirFor,
@@ -8777,6 +8778,16 @@ var agentState = {
8777
8778
  * above and is persisted through the same sidecar (`agentRules` concern).
8778
8779
  */
8779
8780
  knownAgentRulesHashes: /* @__PURE__ */ new Map(),
8781
+ /**
8782
+ * ENG-11472 (CodeRabbit on #7341): the inherited org/team rules last DELIVERED
8783
+ * to each agent, so a cycle on which the API could not read one scope (sent as
8784
+ * null) renders and hashes what the agent already has instead of an empty set.
8785
+ * Keyed with the team the rules came from, so a moved agent never re-uses its
8786
+ * old team's rules for its new team.
8787
+ * In memory only: after a manager restart a failed scope is `unknown` and the
8788
+ * rules restart is skipped for that cycle rather than guessed.
8789
+ */
8790
+ knownInheritedAgentRules: /* @__PURE__ */ new Map(),
8780
8791
  /**
8781
8792
  * ENG-6024: hash of the Teams behaviour subset (thread_auto_follow,
8782
8793
  * channel_response_mode, adaptive_cards_enabled/_ask_user_enabled) from the
@@ -8867,6 +8878,7 @@ function clearAgentState(agentId, codeName) {
8867
8878
  agentState.knownSenderPolicyHashes.delete(agentId);
8868
8879
  agentState.knownTelegramPolicyHashes.delete(agentId);
8869
8880
  agentState.knownAgentRulesHashes.delete(agentId);
8881
+ agentState.knownInheritedAgentRules.delete(agentId);
8870
8882
  agentState.knownMsTeamsBehaviourHashes.delete(agentId);
8871
8883
  agentState.knownSlackBehaviourHashes.delete(agentId);
8872
8884
  agentState.knownGlobalSkillIds.delete(agentId);
@@ -15488,7 +15500,7 @@ var pendingDayRolloverReset = /* @__PURE__ */ new Set();
15488
15500
  var dayRolloverInboundHold = /* @__PURE__ */ new Map();
15489
15501
  var INBOUND_HOLD_EPISODE_GAP_MS = 12e4;
15490
15502
  async function channelInboundActivityAgeSecondsFor(codeName) {
15491
- const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-RSH4EMQP.js");
15503
+ const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-J4CBYZS3.js");
15492
15504
  const newest = newestPendingInboundActivityMtimeMs(dirname11(paneLogPath(codeName)));
15493
15505
  if (newest === null) return null;
15494
15506
  return Math.max(0, Math.floor((Date.now() - newest) / 1e3));
@@ -16285,7 +16297,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
16285
16297
  var lastVersionCheckAt = 0;
16286
16298
  var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
16287
16299
  var lastResponsivenessProbeAt = 0;
16288
- var agtCliVersion = true ? "0.28.1190" : "dev";
16300
+ var agtCliVersion = true ? "0.28.1192" : "dev";
16289
16301
  function resolveBrewPath(execFileSync3) {
16290
16302
  try {
16291
16303
  const out = execFileSync3("which", ["brew"], { timeout: 5e3 }).toString().trim();
@@ -18189,7 +18201,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
18189
18201
  if (codeNames.length === 0) return;
18190
18202
  void (async () => {
18191
18203
  try {
18192
- const { collectDiagnostics } = await import("../persistent-session-7PBVDLFI.js");
18204
+ const { collectDiagnostics } = await import("../persistent-session-5MGJGJIB.js");
18193
18205
  await api.post("/host/heartbeat", {
18194
18206
  host_id: hostId,
18195
18207
  agent_diagnostics: collectDiagnostics(codeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor, runtimeVersionFor, sessionActivityFor)
@@ -18332,7 +18344,7 @@ async function pollCycleInner() {
18332
18344
  }
18333
18345
  try {
18334
18346
  const { detectHostSecurity } = await import("../host-security-KQYYZZVW.js");
18335
- const { collectDiagnostics } = await import("../persistent-session-7PBVDLFI.js");
18347
+ const { collectDiagnostics } = await import("../persistent-session-5MGJGJIB.js");
18336
18348
  const diagCodeNames = [...agentState.persistentSessionAgents];
18337
18349
  const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor, runtimeVersionFor, sessionActivityFor) : void 0;
18338
18350
  let tailscaleHostname;
@@ -18587,7 +18599,7 @@ async function pollCycleInner() {
18587
18599
  }
18588
18600
  try {
18589
18601
  const desiredClaudeCodeVersion = hbResp?.desired_claude_code_version?.trim();
18590
- const { maybeUpdateClaudeCode, shouldRunClaudeCodeUpdater } = await import("../claude-code-updater-IU23JJZI.js");
18602
+ const { maybeUpdateClaudeCode, shouldRunClaudeCodeUpdater } = await import("../claude-code-updater-EOJQHUZ2.js");
18591
18603
  const securityFloor = currentSecurityFloor();
18592
18604
  claudeUpdaterInFlight = true;
18593
18605
  if (desiredClaudeCodeVersion && (claudePairLoop.busy || claudePairingInProgress())) {
@@ -18622,7 +18634,7 @@ async function pollCycleInner() {
18622
18634
  collectPanelessActivityProbes,
18623
18635
  getResponsivenessIntervalMs,
18624
18636
  occupancyQualificationClassifications
18625
- } = await import("../responsiveness-probe-RSH4EMQP.js");
18637
+ } = await import("../responsiveness-probe-J4CBYZS3.js");
18626
18638
  const probeIntervalMs = getResponsivenessIntervalMs();
18627
18639
  if (now - lastResponsivenessProbeAt > probeIntervalMs) {
18628
18640
  const probeCodeNames = [...agentState.persistentSessionAgents];
@@ -18739,7 +18751,7 @@ async function pollCycleInner() {
18739
18751
  collectResponsivenessProbes,
18740
18752
  livePendingInboundOldestAgeSeconds,
18741
18753
  parkPendingInbound
18742
- } = await import("../responsiveness-probe-RSH4EMQP.js");
18754
+ } = await import("../responsiveness-probe-J4CBYZS3.js");
18743
18755
  const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-M6AFZWNU.js");
18744
18756
  const wedgeNow = /* @__PURE__ */ new Date();
18745
18757
  const liveAgents = agentState.persistentSessionAgents;
@@ -19025,7 +19037,7 @@ async function pollCycleInner() {
19025
19037
  }
19026
19038
  }
19027
19039
  );
19028
- const { parkPendingInbound } = await import("../responsiveness-probe-RSH4EMQP.js");
19040
+ const { parkPendingInbound } = await import("../responsiveness-probe-J4CBYZS3.js");
19029
19041
  const { parked, deadLettered } = parkPendingInbound(codeName, new Date(fatalNowMs));
19030
19042
  paneFatalStreak.delete(codeName);
19031
19043
  paneFatalRestarts.set(codeName, [...history, fatalNowMs]);
@@ -19056,7 +19068,7 @@ async function pollCycleInner() {
19056
19068
  TRANSCRIPT_MOUNT_ESCALATION_REFRESH_MS,
19057
19069
  bindSourceEscalations
19058
19070
  } = await import("../transcript-mount-health-OHE6IVJV.js");
19059
- const { transcriptBindSourcesFor, ensureTranscriptBindSources } = await import("../persistent-session-7PBVDLFI.js");
19071
+ const { transcriptBindSourcesFor, ensureTranscriptBindSources } = await import("../persistent-session-5MGJGJIB.js");
19060
19072
  const mountConfig = resolveTranscriptMountConfig();
19061
19073
  const liveAgents = agentState.persistentSessionAgents;
19062
19074
  for (const tracked of [
@@ -19221,7 +19233,7 @@ async function pollCycleInner() {
19221
19233
  }
19222
19234
  try {
19223
19235
  const { scrapeMcpFailedBannerCount } = await import("../pane-mcp-banner-scraper-VR5QGP3J.js");
19224
- const { probeSessionAuth } = await import("../session-auth-dead-M2YABEQU.js");
19236
+ const { probeSessionAuth } = await import("../session-auth-dead-7CSZHNBK.js");
19225
19237
  const observations = [];
19226
19238
  const pendingCacheCommits = [];
19227
19239
  const modelApiErrorReportingOn = hostFlagStore().getBoolean("model-api-error-reporting");
@@ -20434,8 +20446,27 @@ async function processAgent(agent, agentStates, managedToolkits) {
20434
20446
  }
20435
20447
  }
20436
20448
  }
20449
+ let provisionSucceeded = false;
20450
+ const currentTeamId = refreshData.agent.team_id ?? null;
20451
+ const inheritedResolution = resolveInheritedForDelivery(
20452
+ refreshData.inherited_agent_rules,
20453
+ agentState.knownInheritedAgentRules.get(agent.agent_id),
20454
+ currentTeamId
20455
+ );
20456
+ if (inheritedResolution.reusedLastKnown.length > 0 || inheritedResolution.unknown.length > 0) {
20457
+ log(
20458
+ `[hot-reload] inherited rules for '${agent.code_name}': API could not read ${[...inheritedResolution.reusedLastKnown, ...inheritedResolution.unknown].join(" + ")} - ` + (inheritedResolution.unknown.length > 0 ? "no last-known copy, so the standing-rules restart is skipped this cycle" : "rendering the last-delivered rules for that scope")
20459
+ );
20460
+ }
20461
+ const provisionRefreshData = { ...refreshData, inherited_agent_rules: inheritedResolution.rules };
20462
+ const inheritedRulesKnown = inheritedResolution.unknown.length === 0;
20437
20463
  try {
20438
- const artifacts = generateArtifacts(agent, refreshData, frameworkAdapter, renderIntegrationsSection);
20464
+ if (!inheritedRulesKnown) {
20465
+ throw new Error(
20466
+ `inherited ${inheritedResolution.unknown.join(" + ")} rules could not be read and there is no last-delivered copy; not writing CLAUDE.md this cycle`
20467
+ );
20468
+ }
20469
+ const artifacts = generateArtifacts(agent, provisionRefreshData, frameworkAdapter, renderIntegrationsSection);
20439
20470
  const changedFiles = [];
20440
20471
  mkdirSync16(agentDir, { recursive: true });
20441
20472
  for (const artifact of artifacts) {
@@ -20577,9 +20608,13 @@ async function processAgent(agent, agentStates, managedToolkits) {
20577
20608
  if (frameworkAdapter.deployArtifactsToProject) {
20578
20609
  frameworkAdapter.deployArtifactsToProject(agent.code_name, agentDir);
20579
20610
  }
20611
+ provisionSucceeded = true;
20580
20612
  } catch (err) {
20581
20613
  log(`Provision failed for '${agent.code_name}': ${err.message}`);
20582
20614
  }
20615
+ if (provisionSucceeded && inheritedRulesKnown && inheritedResolution.rules) {
20616
+ agentState.knownInheritedAgentRules.set(agent.agent_id, { rules: inheritedResolution.rules, teamId: currentTeamId });
20617
+ }
20583
20618
  const resolvedForModel = resolveModelChain(refreshData);
20584
20619
  const primaryModel = resolvedForModel.primary ?? refreshData.agent.primary_model;
20585
20620
  const holdModelChange = shouldHoldModelChange({
@@ -21204,11 +21239,16 @@ async function processAgent(agent, agentStates, managedToolkits) {
21204
21239
  agentState.knownTelegramPolicyHashes.delete(agent.agent_id);
21205
21240
  removeDeliveryBaselineEntry("telegramPolicy", agent.agent_id);
21206
21241
  }
21207
- {
21242
+ if (!provisionSucceeded || !inheritedRulesKnown) {
21243
+ log(
21244
+ `[hot-reload] skipping the standing-rules check for '${agent.code_name}' - ` + (provisionSucceeded ? "an inherited scope could not be read and there is no last-known copy" : "provisioning failed this cycle, so the rendered rules are not on disk") + "; baseline left unchanged"
21245
+ );
21246
+ } else {
21208
21247
  const agentRules = refreshData.agent_rules ?? [];
21209
- const agentRulesHash = createHash20("sha256").update(agentRulesRestartBasis(agentRules)).digest("hex");
21248
+ const inheritedRules = inheritedResolution.rules;
21249
+ const agentRulesHash = createHash20("sha256").update(agentRulesRestartBasis(agentRules, inheritedRules)).digest("hex");
21210
21250
  const prevAgentRulesHash = agentState.knownAgentRulesHashes.get(agent.agent_id);
21211
- const rulesPresent = agentHasRules(agentRules);
21251
+ const rulesPresent = agentHasRules(agentRules, inheritedRules);
21212
21252
  const agentRulesDecision = decideSenderPolicyRestart({
21213
21253
  previousHash: prevAgentRulesHash,
21214
21254
  currentPolicyRestrictive: rulesPresent,
@@ -23923,7 +23963,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
23923
23963
  try {
23924
23964
  const freshId = rotateSessionForWedge(codeName);
23925
23965
  consecutiveWedgeCycles.delete(codeName);
23926
- const { parkPendingInbound: parkForRestart } = await import("../responsiveness-probe-RSH4EMQP.js");
23966
+ const { parkPendingInbound: parkForRestart } = await import("../responsiveness-probe-J4CBYZS3.js");
23927
23967
  const { parked, deadLettered } = parkForRestart(codeName, /* @__PURE__ */ new Date());
23928
23968
  const parkNote = parked > 0 ? `, ${parked} inbound parked` : "";
23929
23969
  const deadNote = deadLettered > 0 ? `, ${deadLettered} undeliverable dead-lettered` : "";
@@ -23966,7 +24006,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
23966
24006
  void api.post("/host/restart-ack", { host_id: hostId, agent_id: agentId, restart_requested_at: requestedAt }).catch((err) => log(`[restart-lane] ack failed for '${codeName}': ${err.message}`));
23967
24007
  void (async () => {
23968
24008
  try {
23969
- const { collectDiagnostics } = await import("../persistent-session-7PBVDLFI.js");
24009
+ const { collectDiagnostics } = await import("../persistent-session-5MGJGJIB.js");
23970
24010
  await api.post("/host/heartbeat", {
23971
24011
  host_id: hostId,
23972
24012
  agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor, runtimeVersionFor, sessionActivityFor)
@@ -24017,7 +24057,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
24017
24057
  }
24018
24058
  try {
24019
24059
  const hostId = await getHostId();
24020
- const { collectDiagnostics } = await import("../persistent-session-7PBVDLFI.js");
24060
+ const { collectDiagnostics } = await import("../persistent-session-5MGJGJIB.js");
24021
24061
  await api.post("/host/heartbeat", {
24022
24062
  host_id: hostId,
24023
24063
  agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor, runtimeVersionFor, sessionActivityFor)
@@ -24719,7 +24759,7 @@ async function processClaudePairSessions(agents) {
24719
24759
  snapshotPairConfig,
24720
24760
  // ENG-11659: result -> report body + the manager.log line that records it.
24721
24761
  planPairStartReport
24722
- } = await import("../claude-pair-runtime-GMXVV5AJ.js");
24762
+ } = await import("../claude-pair-runtime-WKTA3HNF.js");
24723
24763
  const { resetClaudeSignin, describeSigninResetForLog, describeSigninResetFailure } = await import("../claude-signin-reset-6IJMMVYG.js");
24724
24764
  for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
24725
24765
  log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
@@ -24992,6 +25032,14 @@ function generateArtifacts(agent, refreshData, adapter, renderIntegrationsSectio
24992
25032
  // the claude-code adapter can render them into CLAUDE.md. Absent on an
24993
25033
  // older API renders nothing, which is the documented fail-direction.
24994
25034
  agentRules: refreshData.agent_rules,
25035
+ // ENG-11472: inherited org and team rules; absent on an older API renders
25036
+ // exactly as before.
25037
+ // Settled to concrete lists in processAgent before this runs; a stray null
25038
+ // scope still renders as none rather than failing the type.
25039
+ inheritedAgentRules: refreshData.inherited_agent_rules ? {
25040
+ organization: refreshData.inherited_agent_rules.organization ?? [],
25041
+ team: refreshData.inherited_agent_rules.team ?? []
25042
+ } : void 0,
24995
25043
  // ADR-0012 / ENG-6352: down-synced dynamic workflows (flag-gated, resolved
24996
25044
  // server-side). The claude-code adapter renders each as
24997
25045
  // `.claude/workflows/<name>.js`; undefined/empty no-ops.