@integrity-labs/agt-cli 0.28.419 → 0.28.421

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.
package/dist/bin/agt.js CHANGED
@@ -40,7 +40,7 @@ import {
40
40
  success,
41
41
  table,
42
42
  warn
43
- } from "../chunk-W63FDJBY.js";
43
+ } from "../chunk-HVVEMQWZ.js";
44
44
  import {
45
45
  AnchorSessionClient,
46
46
  CHANNEL_REGISTRY,
@@ -70,7 +70,7 @@ import {
70
70
  renderTemplate,
71
71
  resolveChannels,
72
72
  serializeManifestForSlackCli
73
- } from "../chunk-IKQHNN7I.js";
73
+ } from "../chunk-B4NX2T2H.js";
74
74
  import "../chunk-XWVM4KPK.js";
75
75
 
76
76
  // src/bin/agt.ts
@@ -4829,7 +4829,7 @@ import { execFileSync, execSync } from "child_process";
4829
4829
  import { existsSync as existsSync10, realpathSync as realpathSync2 } from "fs";
4830
4830
  import chalk18 from "chalk";
4831
4831
  import ora16 from "ora";
4832
- var cliVersion = true ? "0.28.419" : "dev";
4832
+ var cliVersion = true ? "0.28.421" : "dev";
4833
4833
  async function fetchLatestVersion() {
4834
4834
  const host2 = getHost();
4835
4835
  if (!host2) return null;
@@ -6001,7 +6001,7 @@ function handleError(err) {
6001
6001
  }
6002
6002
 
6003
6003
  // src/bin/agt.ts
6004
- var cliVersion2 = true ? "0.28.419" : "dev";
6004
+ var cliVersion2 = true ? "0.28.421" : "dev";
6005
6005
  var program = new Command();
6006
6006
  program.name("agt").description("Augmented CLI \u2014 agent provisioning and management").version(cliVersion2).option("--json", "Emit machine-readable JSON output (suppress spinners and colors)").option("--skip-update-check", "Skip the automatic update check on startup");
6007
6007
  program.hook("preAction", async (thisCommand, actionCommand) => {
@@ -2968,19 +2968,27 @@ function resolveAvatarEnvUrl(raw) {
2968
2968
 
2969
2969
  // ../../packages/core/dist/provisioning/ec2-capacity.js
2970
2970
  var CAPACITY_TABLE = {
2971
- // t3 family — burst-credit instances. Lookup is per-vCPU plus
2972
- // headroom for the manager process itself.
2971
+ // t3 family — burstable (CPU credits). Fine for these mostly-I/O-bound
2972
+ // agents; the monitor + resize path cover the rare sustained-load case.
2973
2973
  "t3.micro": 1,
2974
- // 1 vCPU / 1 GB — barely fits one agent
2975
- "t3.small": 1,
2976
- // 2 vCPU / 2 GB — still tight
2977
- "t3.medium": 2,
2978
- // 2 vCPU / 4 GB — the sweet spot for a 2-agent host
2979
- "t3.large": 4,
2980
- // 2 vCPU / 8 GB — bursts cover the headroom
2981
- "t3.xlarge": 8,
2974
+ // 2 vCPU / 1 GB — floor
2975
+ "t3.small": 2,
2976
+ // 2 vCPU / 2 GB
2977
+ "t3.medium": 4,
2978
+ // 2 vCPU / 4 GB
2979
+ "t3.large": 8,
2980
+ // 2 vCPU / 8 GB
2981
+ "t3.xlarge": 16,
2982
2982
  // 4 vCPU / 16 GB
2983
- "t3.2xlarge": 16
2983
+ "t3.2xlarge": 32,
2984
+ // 8 vCPU / 32 GB
2985
+ // m6i family — fixed performance (no burst-credit cliff), the preferred
2986
+ // family for dense / sustained multi-agent hosts (e.g. Enterprise default).
2987
+ "m6i.large": 8,
2988
+ // 2 vCPU / 8 GB
2989
+ "m6i.xlarge": 16,
2990
+ // 4 vCPU / 16 GB
2991
+ "m6i.2xlarge": 32
2984
2992
  // 8 vCPU / 32 GB
2985
2993
  };
2986
2994
  var KNOWN_INSTANCE_TYPES = Object.keys(CAPACITY_TABLE);
@@ -4126,6 +4134,13 @@ var BROKER_TOOLKIT_PROVIDERS = {
4126
4134
  function isBrokerToolkit(definitionId) {
4127
4135
  return definitionId in BROKER_TOOLKIT_PROVIDERS;
4128
4136
  }
4137
+ var APPROVAL_BROKER_TOOLKITS = /* @__PURE__ */ new Set(["xero-broker"]);
4138
+ function isApprovalBrokerToolkit(definitionId) {
4139
+ return APPROVAL_BROKER_TOOLKITS.has(definitionId);
4140
+ }
4141
+ function isHostUnprobeableBroker(definitionId) {
4142
+ return isBrokerToolkit(definitionId) || isApprovalBrokerToolkit(definitionId);
4143
+ }
4129
4144
  var HTTP_PROBE_PROVIDERS = /* @__PURE__ */ new Set([
4130
4145
  "linear",
4131
4146
  "google-workspace",
@@ -4176,12 +4191,12 @@ function mcpOverrideFrom(ct) {
4176
4191
  }
4177
4192
  function resolveConnectivityProbe(input) {
4178
4193
  const { definitionId, sourceType, authType } = input;
4179
- if (isBrokerToolkit(definitionId) && (authType === "managed" || sourceType === "managed")) {
4194
+ if (isHostUnprobeableBroker(definitionId) && (authType === "managed" || sourceType === "managed")) {
4180
4195
  return {
4181
4196
  kind: "unsupported",
4182
4197
  sourceType: "managed",
4183
4198
  readOnly: true,
4184
- label: `${definitionId}: broker-managed \u2014 credentials minted per task; no host probe (central enrolment check only)`,
4199
+ label: isApprovalBrokerToolkit(definitionId) ? `${definitionId}: approval broker \u2014 no stored credential; writes authenticate server-side (no host probe)` : `${definitionId}: broker-managed \u2014 credentials minted per task; no host probe (central enrolment check only)`,
4185
4200
  centralReachable: false
4186
4201
  };
4187
4202
  }
@@ -8034,6 +8049,27 @@ var FLAG_REGISTRY = [
8034
8049
  // change (ADR-0022 sensitive-flag confirm).
8035
8050
  sensitive: true
8036
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
+ },
8037
8073
  {
8038
8074
  key: "slack-hot-thread-guard",
8039
8075
  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.",
@@ -12691,4 +12727,4 @@ export {
12691
12727
  stopAllSessionsAndWait,
12692
12728
  getProjectDir
12693
12729
  };
12694
- //# sourceMappingURL=chunk-IKQHNN7I.js.map
12730
+ //# sourceMappingURL=chunk-B4NX2T2H.js.map