@integrity-labs/agt-cli 0.28.420 → 0.28.422

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.
@@ -8049,6 +8049,34 @@ var FLAG_REGISTRY = [
8049
8049
  // change (ADR-0022 sensitive-flag confirm).
8050
8050
  sensitive: true
8051
8051
  },
8052
+ {
8053
+ key: "slack-scheduled-channel-guard",
8054
+ description: 'Guard on slack.reply that refuses to let an active scheduled-task destination silently move a reply to a DIFFERENT channel than the agent named (ENG-8137). CS-1505 gave an explicit inbound_id priority over the task destination but left the no-inbound_id case treating "no inbound reference" as "no destination specified" - and `channel` is a REQUIRED argument, so every call names one. The symptom: a question asked in one channel answered in another, and a reply meant as a DM landing in a public channel. Fires only when the marker carries an EXPLICIT target, the named channel differs from it, and neither an inbound_id, an enforce binding, nor an ENG-7542 channel correction is available to arbitrate. off = never runs (today behaviour: silent retarget). shadow = count + log the would-block but STILL route as today, so the false-positive rate is measurable before anyone refuses a send. enforce = block the reply and tell the agent to retry. Read live from the heartbeat flags-cache (or the env override). NOTE: enforce is currently CLAMPED to shadow host-side and setting it here will not take effect - it stays blocked until ENG-8142 teaches the Stop hook to tell a refused reply from a delivered one, because until then a blocked send fails silently (no recovery, no re-prompt, nothing in the channel). Lifting the clamp is a code change, not a flag flip.',
8055
+ flagType: "enum",
8056
+ allowedValues: ["off", "shadow", "enforce"],
8057
+ // Ships in SHADOW, not off: the counter is the whole point - the fleet metric
8058
+ // is currently blind to this misroute, which is why it went unnoticed. shadow
8059
+ // is a free local log line + counter (no model spend, no behaviour change), so
8060
+ // it measures the fire rate immediately. enforce turns a misroute into a
8061
+ // REFUSED send, which trades a confidentiality risk for an availability one -
8062
+ // that is the audited per-org flip, taken after reading the shadow numbers and
8063
+ // after ENG-8143 shrinks the stale-marker window that dominates the false
8064
+ // positives.
8065
+ defaultValue: "shadow",
8066
+ // Enum override AGT_SLACK_SCHEDULED_CHANNEL_GUARD_MODE (off|shadow|enforce),
8067
+ // resolved by resolveSlackScheduledChannelGuardMode in the channel-server bundle.
8068
+ envVar: "AGT_SLACK_SCHEDULED_CHANNEL_GUARD_MODE",
8069
+ // enforce REFUSES a send the agent asked to make - a visible availability
8070
+ // change, so flipping toward it is deliberate (ADR-0022 sensitive-flag confirm).
8071
+ sensitive: true,
8072
+ // ENG-8149: the agt-cli that first carries resolveSlackScheduledChannelGuardMode
8073
+ // (published from the ENG-8137 merge c6ff71cd). Without this the flip-reach modal
8074
+ // reports FULL reach, because an undefined `since` means "every host can honour
8075
+ // it" - true for flags that predate the reach work, wrong for a NEW host-read
8076
+ // flag whose reader older hosts simply do not have. Excluded from
8077
+ // projectDefinition, so setting it does not roll FLAGS_SCHEMA_VERSION.
8078
+ since: "0.28.421"
8079
+ },
8052
8080
  {
8053
8081
  key: "slack-hot-thread-guard",
8054
8082
  description: "Server-side hot-thread guard on the slack.reply surface (ENG-7462). Prevents an agent posting a NEW top-level Slack message when it meant to reply inside the thread it is already working in - a prompt/memory rule proved insufficient (the agent had the rule and still slipped). When a reply would otherwise post to channel ROOT (no thread_ts / message_ts / inbound_id, no active kanban card) and the agent has a recent active thread in that channel (its last bot-posted thread, from the persisted trackedThreads cache, within a freshness window), the reply is redirected into that thread. proactive:true no longer implies channel root; posting at root becomes a deliberate action (the to_channel_root flag, or the thread_ts:null sentinel). off = guard never runs, replies with no coords root exactly as today (ships dark). shadow = compute + log the would-redirect but STILL post to root (measure the fire rate before acting). enforce = apply the redirect (a soft-block: redirect + inform, never a hard rejection). Read live from the heartbeat flags-cache (or the env override); enforce is a deliberate per-org flip after a shadow soak.",
@@ -8659,6 +8687,17 @@ var FLAG_REGISTRY = [
8659
8687
  // direction - a flag-DB read error must not resurrect the mis-threading/noise the kill
8660
8688
  // fixes. Net-new gate, registry-only (ADR-0022); API-evaluated, no env materialization.
8661
8689
  defaultValue: false
8690
+ },
8691
+ {
8692
+ key: "onboarding-msteams-channel",
8693
+ description: `Offer Microsoft Teams as a selectable channel on onboarding step 3 ("which channels should your org use?", ENG-8146). OFF (default) hides the Teams option entirely: it is not rendered, not selectable, and not named in the plan-upgrade note. Turn it ON per org to restore the option for a customer who genuinely runs on Teams. Resolved SERVER-SIDE in the step-3 server component for the URL's orgId (webapp lib/feature-flags-org-server.ts), NOT via the browser public map \u2014 the client flag path evaluates at the active-org cookie, which onboarding deliberately does not pin to the org being onboarded, so a client read would resolve the wrong org for a multi-org user. Hiding the option never revokes a channel: an org that already saved msteams keeps it (step 3 carries hidden-but-saved channels through the write). Ships dark.`,
8694
+ flagType: "boolean",
8695
+ // Declared safe value is `false`: Teams hidden. `false` is also the fail-closed
8696
+ // direction - a flag-DB read error must show the narrower channel set, never
8697
+ // surface an option the operator has not deliberately turned on. Net-new gate,
8698
+ // registry-only (ADR-0022). NOT `public`: it is resolved server-side only, so it
8699
+ // must never be serialized into the browser map.
8700
+ defaultValue: false
8662
8701
  }
8663
8702
  ];
8664
8703
  var REGISTRY_BY_KEY = new Map(FLAG_REGISTRY.map((definition) => [definition.key, definition]));
@@ -12706,4 +12745,4 @@ export {
12706
12745
  stopAllSessionsAndWait,
12707
12746
  getProjectDir
12708
12747
  };
12709
- //# sourceMappingURL=chunk-LLIMZG67.js.map
12748
+ //# sourceMappingURL=chunk-XFC7YVGS.js.map