@integrity-labs/agt-cli 0.28.572 → 0.28.573

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.
@@ -46,7 +46,7 @@ import {
46
46
  resolveConnectivityProbe,
47
47
  worseConnectivityOutcome,
48
48
  wrapScheduledTaskPrompt
49
- } from "./chunk-72K46XUZ.js";
49
+ } from "./chunk-5Z6RJ3RX.js";
50
50
  import {
51
51
  parsePsRows
52
52
  } from "./chunk-XWVM4KPK.js";
@@ -5646,7 +5646,7 @@ function exchangeFailureKind(err) {
5646
5646
  }
5647
5647
 
5648
5648
  // src/lib/api-client.ts
5649
- var agtCliVersion = true ? "0.28.572" : "dev";
5649
+ var agtCliVersion = true ? "0.28.573" : "dev";
5650
5650
  var lastConfigHash = null;
5651
5651
  function setConfigHash(hash) {
5652
5652
  lastConfigHash = hash && hash.length > 0 ? hash : null;
@@ -9011,4 +9011,4 @@ export {
9011
9011
  managerInstallSystemUnitCommand,
9012
9012
  managerUninstallSystemUnitCommand
9013
9013
  };
9014
- //# sourceMappingURL=chunk-NG2MFOSH.js.map
9014
+ //# sourceMappingURL=chunk-GW2JI7NO.js.map
@@ -100,7 +100,7 @@ async function spawnPairSession(session) {
100
100
  return { ok: true };
101
101
  } catch {
102
102
  }
103
- const { resolveClaudeBinary } = await import("./persistent-session-74MH2XTM.js");
103
+ const { resolveClaudeBinary } = await import("./persistent-session-6UGFGI6J.js");
104
104
  const claudeBin = resolveClaudeBinary();
105
105
  const pairEnv = {
106
106
  ...process.env,
@@ -373,4 +373,4 @@ export {
373
373
  startClaudePair,
374
374
  submitClaudePairCode
375
375
  };
376
- //# sourceMappingURL=claude-pair-runtime-XTRJNDP2.js.map
376
+ //# sourceMappingURL=claude-pair-runtime-T4ZR7AJU.js.map
@@ -53,7 +53,7 @@ import {
53
53
  safeWriteJsonAtomic,
54
54
  setConfigHash,
55
55
  tripClass
56
- } from "../chunk-NG2MFOSH.js";
56
+ } from "../chunk-GW2JI7NO.js";
57
57
  import {
58
58
  getProjectDir as getProjectDir2,
59
59
  getReadyTasks,
@@ -182,7 +182,7 @@ import {
182
182
  toOpencodeModel,
183
183
  transcriptActivityAgeSeconds,
184
184
  writeEgressAllowlist
185
- } from "../chunk-72K46XUZ.js";
185
+ } from "../chunk-5Z6RJ3RX.js";
186
186
  import {
187
187
  reapOrphanChannelMcps
188
188
  } from "../chunk-XWVM4KPK.js";
@@ -11588,7 +11588,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
11588
11588
  var lastVersionCheckAt = 0;
11589
11589
  var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
11590
11590
  var lastResponsivenessProbeAt = 0;
11591
- var agtCliVersion = true ? "0.28.572" : "dev";
11591
+ var agtCliVersion = true ? "0.28.573" : "dev";
11592
11592
  function resolveBrewPath(execFileSync2) {
11593
11593
  try {
11594
11594
  const out = execFileSync2("which", ["brew"], { timeout: 5e3 }).toString().trim();
@@ -12895,7 +12895,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
12895
12895
  if (codeNames.length === 0) return;
12896
12896
  void (async () => {
12897
12897
  try {
12898
- const { collectDiagnostics } = await import("../persistent-session-74MH2XTM.js");
12898
+ const { collectDiagnostics } = await import("../persistent-session-6UGFGI6J.js");
12899
12899
  await api.post("/host/heartbeat", {
12900
12900
  host_id: hostId,
12901
12901
  agent_diagnostics: collectDiagnostics(codeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics)
@@ -13003,7 +13003,7 @@ async function pollCycle() {
13003
13003
  }
13004
13004
  try {
13005
13005
  const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
13006
- const { collectDiagnostics } = await import("../persistent-session-74MH2XTM.js");
13006
+ const { collectDiagnostics } = await import("../persistent-session-6UGFGI6J.js");
13007
13007
  const diagCodeNames = [...agentState.persistentSessionAgents];
13008
13008
  const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics) : void 0;
13009
13009
  let tailscaleHostname;
@@ -13126,7 +13126,7 @@ async function pollCycle() {
13126
13126
  collectPanelessActivityProbes,
13127
13127
  getResponsivenessIntervalMs,
13128
13128
  occupancyQualificationClassifications
13129
- } = await import("../responsiveness-probe-5VNQQZNJ.js");
13129
+ } = await import("../responsiveness-probe-O7AVC73R.js");
13130
13130
  const probeIntervalMs = getResponsivenessIntervalMs();
13131
13131
  if (now - lastResponsivenessProbeAt > probeIntervalMs) {
13132
13132
  const probeCodeNames = [...agentState.persistentSessionAgents];
@@ -13217,7 +13217,7 @@ async function pollCycle() {
13217
13217
  collectResponsivenessProbes,
13218
13218
  livePendingInboundOldestAgeSeconds,
13219
13219
  parkPendingInbound
13220
- } = await import("../responsiveness-probe-5VNQQZNJ.js");
13220
+ } = await import("../responsiveness-probe-O7AVC73R.js");
13221
13221
  const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-NDP36U7O.js");
13222
13222
  const wedgeNow = /* @__PURE__ */ new Date();
13223
13223
  const liveAgents = agentState.persistentSessionAgents;
@@ -16787,7 +16787,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
16787
16787
  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}`));
16788
16788
  void (async () => {
16789
16789
  try {
16790
- const { collectDiagnostics } = await import("../persistent-session-74MH2XTM.js");
16790
+ const { collectDiagnostics } = await import("../persistent-session-6UGFGI6J.js");
16791
16791
  await api.post("/host/heartbeat", {
16792
16792
  host_id: hostId,
16793
16793
  agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics)
@@ -16838,7 +16838,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
16838
16838
  }
16839
16839
  try {
16840
16840
  const hostId = await getHostId();
16841
- const { collectDiagnostics } = await import("../persistent-session-74MH2XTM.js");
16841
+ const { collectDiagnostics } = await import("../persistent-session-6UGFGI6J.js");
16842
16842
  await api.post("/host/heartbeat", {
16843
16843
  host_id: hostId,
16844
16844
  agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics)
@@ -17416,7 +17416,7 @@ async function processClaudePairSessions(agents) {
17416
17416
  killPairSession,
17417
17417
  pairTmuxSession,
17418
17418
  finalizeClaudePairOnboarding
17419
- } = await import("../claude-pair-runtime-XTRJNDP2.js");
17419
+ } = await import("../claude-pair-runtime-T4ZR7AJU.js");
17420
17420
  for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
17421
17421
  log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
17422
17422
  const killed = await killPairSession(pairTmuxSession(pairId));
@@ -35213,7 +35213,7 @@ var FLAG_REGISTRY = [
35213
35213
  },
35214
35214
  {
35215
35215
  key: "direct-chat-per-user",
35216
- description: "Scope a STANDARD agent's Direct Chat to the user who had the conversation (ENG-8712). Today two teammates who open the same agent land in the same thread and read each other's messages: the /recent and per-session reads carry no user predicate unless the agent is the per-org system_support concierge. When on, both reads return only sessions the requester authored in PLUS sessions no user has authored in \u2014 the second arm is load-bearing, since every server-originated row (kanban and scheduled-task nudges, integration failures, HITL approvals, degradation alerts) is written as role=user with no user_id and would otherwise vanish from every console (ENG-8431). Does NOT make the thread private in the live direction: assistant replies still fan out on the per-TEAM realtime topic direct-chat-agent:{agentId}, so a teammate holding the drawer open still receives them. Narrowing that topic is follow-up work.",
35216
+ description: "Scope a STANDARD agent's Direct Chat to the user who had the conversation (ENG-8712). Today two teammates who open the same agent land in the same thread and read each other's messages: the /recent and per-session reads carry no user predicate unless the agent is the per-org system_support concierge. When on, both reads return only sessions the requester authored in PLUS sessions no user has authored in \u2014 the second arm is load-bearing, since every server-originated row (kanban and scheduled-task nudges, integration failures, HITL approvals, degradation alerts) is written as role=user with no user_id and would otherwise vanish from every console (ENG-8431). Does NOT by itself make the thread private in the live direction: assistant replies fan out on the per-TEAM realtime topic direct-chat-agent:{agentId}, so a teammate holding the drawer open still receives them. That half is direct-chat-live-per-user (ENG-8760), which is a SEPARATE flag on purpose \u2014 turn both on for a private thread.",
35217
35217
  flagType: "boolean",
35218
35218
  // Declared safe value is `false` — today's team-wide thread. Server-side only
35219
35219
  // (the two reads in routes/agents.ts); the browser needs no knowledge of it,
@@ -35226,6 +35226,27 @@ var FLAG_REGISTRY = [
35226
35226
  // backfill in migration 20260812000006 is not reversed by the flag.
35227
35227
  defaultValue: false
35228
35228
  },
35229
+ {
35230
+ key: "direct-chat-live-per-user",
35231
+ description: "The LIVE half of per-user Direct Chat (ENG-8760). direct-chat-per-user scoped the two REST reads; assistant replies kept fanning out on the per-TEAM realtime topic direct-chat-agent:{agentId}, whose RLS (20260804000003) has no session and no user predicate \u2014 so a teammate holding the drawer open still received another member's replies live, and only a reload hid them. When on, a reply in a session a human has authored in is broadcast to direct-chat-user:{agentId}:{userId} instead, whose policy (20260812000009) pins the third segment to auth.uid(). Sessions NO human has authored in \u2014 the agent's inbound work queue: kanban and scheduled-task nudges, integration failures, HITL approvals, degradation alerts \u2014 keep going to the per-TEAM topic, matching arm 2 of the REST read, or this would repeat ENG-8431 in the live lane. Also admits the system_support concierge to the per-user topic, which the per-TEAM topic denies outright (its live delivery is additive here, never narrowed).",
35232
+ flagType: "boolean",
35233
+ // Declared safe value is `false` — today's per-TEAM fan-out, byte for byte,
35234
+ // for every agent kind including the concierge. Server-side only: the browser
35235
+ // subscribes to BOTH topics unconditionally and needs no knowledge of the
35236
+ // flag, so NOT public — which is also what keeps client and server from
35237
+ // disagreeing about it. No envVar: an org/team-scoped rollout gate with no
35238
+ // host-side consumer, and a declared envVar pinned in sst.config.ts would
35239
+ // make every admin-UI override unreachable (ENG-8303).
35240
+ //
35241
+ // DELIBERATELY INDEPENDENT of direct-chat-per-user. The two are separable in
35242
+ // both directions and neither ordering is unsafe: this one alone narrows live
35243
+ // delivery below what the REST read still serves (a teammate can load the
35244
+ // thread but stops receiving it live), and that one alone is the state
35245
+ // ENG-8712 shipped. Coupling them into one switch would have removed the
35246
+ // ability to soak the live change on an org that is already comfortable with
35247
+ // the read change.
35248
+ defaultValue: false
35249
+ },
35229
35250
  {
35230
35251
  key: "onboarding-auto-deploy",
35231
35252
  description: `Auto-deploy the first agent during onboarding (ENG-7378): the agent edit page's Deploy & Test tab fires the existing deploy (draft -> active) automatically once the agent's host is fully deployed (active + manager heartbeating, not provisioning) AND Claude-authenticated (claude_auth_status=valid), replacing the manual "Deploy Agent" click in the recruit funnel. Only draft, non-system_support agents; a failed or timed-out attempt falls back to the manual button (no auto-retry loop).`,
@@ -41104,7 +41104,7 @@ var FLAG_REGISTRY = [
41104
41104
  },
41105
41105
  {
41106
41106
  key: "direct-chat-per-user",
41107
- description: "Scope a STANDARD agent's Direct Chat to the user who had the conversation (ENG-8712). Today two teammates who open the same agent land in the same thread and read each other's messages: the /recent and per-session reads carry no user predicate unless the agent is the per-org system_support concierge. When on, both reads return only sessions the requester authored in PLUS sessions no user has authored in \u2014 the second arm is load-bearing, since every server-originated row (kanban and scheduled-task nudges, integration failures, HITL approvals, degradation alerts) is written as role=user with no user_id and would otherwise vanish from every console (ENG-8431). Does NOT make the thread private in the live direction: assistant replies still fan out on the per-TEAM realtime topic direct-chat-agent:{agentId}, so a teammate holding the drawer open still receives them. Narrowing that topic is follow-up work.",
41107
+ description: "Scope a STANDARD agent's Direct Chat to the user who had the conversation (ENG-8712). Today two teammates who open the same agent land in the same thread and read each other's messages: the /recent and per-session reads carry no user predicate unless the agent is the per-org system_support concierge. When on, both reads return only sessions the requester authored in PLUS sessions no user has authored in \u2014 the second arm is load-bearing, since every server-originated row (kanban and scheduled-task nudges, integration failures, HITL approvals, degradation alerts) is written as role=user with no user_id and would otherwise vanish from every console (ENG-8431). Does NOT by itself make the thread private in the live direction: assistant replies fan out on the per-TEAM realtime topic direct-chat-agent:{agentId}, so a teammate holding the drawer open still receives them. That half is direct-chat-live-per-user (ENG-8760), which is a SEPARATE flag on purpose \u2014 turn both on for a private thread.",
41108
41108
  flagType: "boolean",
41109
41109
  // Declared safe value is `false` — today's team-wide thread. Server-side only
41110
41110
  // (the two reads in routes/agents.ts); the browser needs no knowledge of it,
@@ -41117,6 +41117,27 @@ var FLAG_REGISTRY = [
41117
41117
  // backfill in migration 20260812000006 is not reversed by the flag.
41118
41118
  defaultValue: false
41119
41119
  },
41120
+ {
41121
+ key: "direct-chat-live-per-user",
41122
+ description: "The LIVE half of per-user Direct Chat (ENG-8760). direct-chat-per-user scoped the two REST reads; assistant replies kept fanning out on the per-TEAM realtime topic direct-chat-agent:{agentId}, whose RLS (20260804000003) has no session and no user predicate \u2014 so a teammate holding the drawer open still received another member's replies live, and only a reload hid them. When on, a reply in a session a human has authored in is broadcast to direct-chat-user:{agentId}:{userId} instead, whose policy (20260812000009) pins the third segment to auth.uid(). Sessions NO human has authored in \u2014 the agent's inbound work queue: kanban and scheduled-task nudges, integration failures, HITL approvals, degradation alerts \u2014 keep going to the per-TEAM topic, matching arm 2 of the REST read, or this would repeat ENG-8431 in the live lane. Also admits the system_support concierge to the per-user topic, which the per-TEAM topic denies outright (its live delivery is additive here, never narrowed).",
41123
+ flagType: "boolean",
41124
+ // Declared safe value is `false` — today's per-TEAM fan-out, byte for byte,
41125
+ // for every agent kind including the concierge. Server-side only: the browser
41126
+ // subscribes to BOTH topics unconditionally and needs no knowledge of the
41127
+ // flag, so NOT public — which is also what keeps client and server from
41128
+ // disagreeing about it. No envVar: an org/team-scoped rollout gate with no
41129
+ // host-side consumer, and a declared envVar pinned in sst.config.ts would
41130
+ // make every admin-UI override unreachable (ENG-8303).
41131
+ //
41132
+ // DELIBERATELY INDEPENDENT of direct-chat-per-user. The two are separable in
41133
+ // both directions and neither ordering is unsafe: this one alone narrows live
41134
+ // delivery below what the REST read still serves (a teammate can load the
41135
+ // thread but stops receiving it live), and that one alone is the state
41136
+ // ENG-8712 shipped. Coupling them into one switch would have removed the
41137
+ // ability to soak the live change on an org that is already comfortable with
41138
+ // the read change.
41139
+ defaultValue: false
41140
+ },
41120
41141
  {
41121
41142
  key: "onboarding-auto-deploy",
41122
41143
  description: `Auto-deploy the first agent during onboarding (ENG-7378): the agent edit page's Deploy & Test tab fires the existing deploy (draft -> active) automatically once the agent's host is fully deployed (active + manager heartbeating, not provisioning) AND Claude-authenticated (claude_auth_status=valid), replacing the manual "Deploy Agent" click in the recruit funnel. Only draft, non-system_support agents; a failed or timed-out attempt falls back to the manual button (no auto-retry loop).`,
@@ -35549,7 +35549,7 @@ var FLAG_REGISTRY = [
35549
35549
  },
35550
35550
  {
35551
35551
  key: "direct-chat-per-user",
35552
- description: "Scope a STANDARD agent's Direct Chat to the user who had the conversation (ENG-8712). Today two teammates who open the same agent land in the same thread and read each other's messages: the /recent and per-session reads carry no user predicate unless the agent is the per-org system_support concierge. When on, both reads return only sessions the requester authored in PLUS sessions no user has authored in \u2014 the second arm is load-bearing, since every server-originated row (kanban and scheduled-task nudges, integration failures, HITL approvals, degradation alerts) is written as role=user with no user_id and would otherwise vanish from every console (ENG-8431). Does NOT make the thread private in the live direction: assistant replies still fan out on the per-TEAM realtime topic direct-chat-agent:{agentId}, so a teammate holding the drawer open still receives them. Narrowing that topic is follow-up work.",
35552
+ description: "Scope a STANDARD agent's Direct Chat to the user who had the conversation (ENG-8712). Today two teammates who open the same agent land in the same thread and read each other's messages: the /recent and per-session reads carry no user predicate unless the agent is the per-org system_support concierge. When on, both reads return only sessions the requester authored in PLUS sessions no user has authored in \u2014 the second arm is load-bearing, since every server-originated row (kanban and scheduled-task nudges, integration failures, HITL approvals, degradation alerts) is written as role=user with no user_id and would otherwise vanish from every console (ENG-8431). Does NOT by itself make the thread private in the live direction: assistant replies fan out on the per-TEAM realtime topic direct-chat-agent:{agentId}, so a teammate holding the drawer open still receives them. That half is direct-chat-live-per-user (ENG-8760), which is a SEPARATE flag on purpose \u2014 turn both on for a private thread.",
35553
35553
  flagType: "boolean",
35554
35554
  // Declared safe value is `false` — today's team-wide thread. Server-side only
35555
35555
  // (the two reads in routes/agents.ts); the browser needs no knowledge of it,
@@ -35562,6 +35562,27 @@ var FLAG_REGISTRY = [
35562
35562
  // backfill in migration 20260812000006 is not reversed by the flag.
35563
35563
  defaultValue: false
35564
35564
  },
35565
+ {
35566
+ key: "direct-chat-live-per-user",
35567
+ description: "The LIVE half of per-user Direct Chat (ENG-8760). direct-chat-per-user scoped the two REST reads; assistant replies kept fanning out on the per-TEAM realtime topic direct-chat-agent:{agentId}, whose RLS (20260804000003) has no session and no user predicate \u2014 so a teammate holding the drawer open still received another member's replies live, and only a reload hid them. When on, a reply in a session a human has authored in is broadcast to direct-chat-user:{agentId}:{userId} instead, whose policy (20260812000009) pins the third segment to auth.uid(). Sessions NO human has authored in \u2014 the agent's inbound work queue: kanban and scheduled-task nudges, integration failures, HITL approvals, degradation alerts \u2014 keep going to the per-TEAM topic, matching arm 2 of the REST read, or this would repeat ENG-8431 in the live lane. Also admits the system_support concierge to the per-user topic, which the per-TEAM topic denies outright (its live delivery is additive here, never narrowed).",
35568
+ flagType: "boolean",
35569
+ // Declared safe value is `false` — today's per-TEAM fan-out, byte for byte,
35570
+ // for every agent kind including the concierge. Server-side only: the browser
35571
+ // subscribes to BOTH topics unconditionally and needs no knowledge of the
35572
+ // flag, so NOT public — which is also what keeps client and server from
35573
+ // disagreeing about it. No envVar: an org/team-scoped rollout gate with no
35574
+ // host-side consumer, and a declared envVar pinned in sst.config.ts would
35575
+ // make every admin-UI override unreachable (ENG-8303).
35576
+ //
35577
+ // DELIBERATELY INDEPENDENT of direct-chat-per-user. The two are separable in
35578
+ // both directions and neither ordering is unsafe: this one alone narrows live
35579
+ // delivery below what the REST read still serves (a teammate can load the
35580
+ // thread but stops receiving it live), and that one alone is the state
35581
+ // ENG-8712 shipped. Coupling them into one switch would have removed the
35582
+ // ability to soak the live change on an org that is already comfortable with
35583
+ // the read change.
35584
+ defaultValue: false
35585
+ },
35565
35586
  {
35566
35587
  key: "onboarding-auto-deploy",
35567
35588
  description: `Auto-deploy the first agent during onboarding (ENG-7378): the agent edit page's Deploy & Test tab fires the existing deploy (draft -> active) automatically once the agent's host is fully deployed (active + manager heartbeating, not provisioning) AND Claude-authenticated (claude_auth_status=valid), replacing the manual "Deploy Agent" click in the recruit funnel. Only draft, non-system_support agents; a failed or timed-out attempt falls back to the manual button (no auto-retry loop).`,
@@ -35708,7 +35708,7 @@ var FLAG_REGISTRY = [
35708
35708
  },
35709
35709
  {
35710
35710
  key: "direct-chat-per-user",
35711
- description: "Scope a STANDARD agent's Direct Chat to the user who had the conversation (ENG-8712). Today two teammates who open the same agent land in the same thread and read each other's messages: the /recent and per-session reads carry no user predicate unless the agent is the per-org system_support concierge. When on, both reads return only sessions the requester authored in PLUS sessions no user has authored in \u2014 the second arm is load-bearing, since every server-originated row (kanban and scheduled-task nudges, integration failures, HITL approvals, degradation alerts) is written as role=user with no user_id and would otherwise vanish from every console (ENG-8431). Does NOT make the thread private in the live direction: assistant replies still fan out on the per-TEAM realtime topic direct-chat-agent:{agentId}, so a teammate holding the drawer open still receives them. Narrowing that topic is follow-up work.",
35711
+ description: "Scope a STANDARD agent's Direct Chat to the user who had the conversation (ENG-8712). Today two teammates who open the same agent land in the same thread and read each other's messages: the /recent and per-session reads carry no user predicate unless the agent is the per-org system_support concierge. When on, both reads return only sessions the requester authored in PLUS sessions no user has authored in \u2014 the second arm is load-bearing, since every server-originated row (kanban and scheduled-task nudges, integration failures, HITL approvals, degradation alerts) is written as role=user with no user_id and would otherwise vanish from every console (ENG-8431). Does NOT by itself make the thread private in the live direction: assistant replies fan out on the per-TEAM realtime topic direct-chat-agent:{agentId}, so a teammate holding the drawer open still receives them. That half is direct-chat-live-per-user (ENG-8760), which is a SEPARATE flag on purpose \u2014 turn both on for a private thread.",
35712
35712
  flagType: "boolean",
35713
35713
  // Declared safe value is `false` — today's team-wide thread. Server-side only
35714
35714
  // (the two reads in routes/agents.ts); the browser needs no knowledge of it,
@@ -35721,6 +35721,27 @@ var FLAG_REGISTRY = [
35721
35721
  // backfill in migration 20260812000006 is not reversed by the flag.
35722
35722
  defaultValue: false
35723
35723
  },
35724
+ {
35725
+ key: "direct-chat-live-per-user",
35726
+ description: "The LIVE half of per-user Direct Chat (ENG-8760). direct-chat-per-user scoped the two REST reads; assistant replies kept fanning out on the per-TEAM realtime topic direct-chat-agent:{agentId}, whose RLS (20260804000003) has no session and no user predicate \u2014 so a teammate holding the drawer open still received another member's replies live, and only a reload hid them. When on, a reply in a session a human has authored in is broadcast to direct-chat-user:{agentId}:{userId} instead, whose policy (20260812000009) pins the third segment to auth.uid(). Sessions NO human has authored in \u2014 the agent's inbound work queue: kanban and scheduled-task nudges, integration failures, HITL approvals, degradation alerts \u2014 keep going to the per-TEAM topic, matching arm 2 of the REST read, or this would repeat ENG-8431 in the live lane. Also admits the system_support concierge to the per-user topic, which the per-TEAM topic denies outright (its live delivery is additive here, never narrowed).",
35727
+ flagType: "boolean",
35728
+ // Declared safe value is `false` — today's per-TEAM fan-out, byte for byte,
35729
+ // for every agent kind including the concierge. Server-side only: the browser
35730
+ // subscribes to BOTH topics unconditionally and needs no knowledge of the
35731
+ // flag, so NOT public — which is also what keeps client and server from
35732
+ // disagreeing about it. No envVar: an org/team-scoped rollout gate with no
35733
+ // host-side consumer, and a declared envVar pinned in sst.config.ts would
35734
+ // make every admin-UI override unreachable (ENG-8303).
35735
+ //
35736
+ // DELIBERATELY INDEPENDENT of direct-chat-per-user. The two are separable in
35737
+ // both directions and neither ordering is unsafe: this one alone narrows live
35738
+ // delivery below what the REST read still serves (a teammate can load the
35739
+ // thread but stops receiving it live), and that one alone is the state
35740
+ // ENG-8712 shipped. Coupling them into one switch would have removed the
35741
+ // ability to soak the live change on an org that is already comfortable with
35742
+ // the read change.
35743
+ defaultValue: false
35744
+ },
35724
35745
  {
35725
35746
  key: "onboarding-auto-deploy",
35726
35747
  description: `Auto-deploy the first agent during onboarding (ENG-7378): the agent edit page's Deploy & Test tab fires the existing deploy (draft -> active) automatically once the agent's host is fully deployed (active + manager heartbeating, not provisioning) AND Claude-authenticated (claude_auth_status=valid), replacing the manual "Deploy Agent" click in the recruit funnel. Only draft, non-system_support agents; a failed or timed-out attempt falls back to the manual button (no auto-retry loop).`,
@@ -41,7 +41,7 @@ import {
41
41
  writeDirectChatSessionState,
42
42
  writeEgressAllowlist,
43
43
  writePersistentClaudeWrapper
44
- } from "./chunk-72K46XUZ.js";
44
+ } from "./chunk-5Z6RJ3RX.js";
45
45
  import "./chunk-XWVM4KPK.js";
46
46
  export {
47
47
  EGRESS_BASELINE_DOMAINS,
@@ -87,4 +87,4 @@ export {
87
87
  writeEgressAllowlist,
88
88
  writePersistentClaudeWrapper
89
89
  };
90
- //# sourceMappingURL=persistent-session-74MH2XTM.js.map
90
+ //# sourceMappingURL=persistent-session-6UGFGI6J.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  paneLogPath
3
- } from "./chunk-72K46XUZ.js";
3
+ } from "./chunk-5Z6RJ3RX.js";
4
4
  import "./chunk-XWVM4KPK.js";
5
5
 
6
6
  // src/lib/responsiveness-probe.ts
@@ -689,4 +689,4 @@ export {
689
689
  readAndResetSlackReplyBindingClassifications,
690
690
  readAndResetSlackReplyTargetClassifications
691
691
  };
692
- //# sourceMappingURL=responsiveness-probe-5VNQQZNJ.js.map
692
+ //# sourceMappingURL=responsiveness-probe-O7AVC73R.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@integrity-labs/agt-cli",
3
- "version": "0.28.572",
3
+ "version": "0.28.573",
4
4
  "description": "Augmented Team CLI — agent provisioning and management",
5
5
  "type": "module",
6
6
  "engines": {