@integrity-labs/agt-cli 0.28.502 → 0.28.504

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.
@@ -4977,7 +4977,36 @@ var OAUTH_PROVIDERS = {
4977
4977
  // products/commerce/analytics per CS-1427). Best-effort + idempotent: an
4978
4978
  // unknown/unscoped name is logged and skipped by the proxy, and the
4979
4979
  // toolAllowlist above still caps what is actually callable.
4980
- preEnableToolsets: ["courses", "products", "commerce", "analytics", "pages", "themes"]
4980
+ //
4981
+ // ENG-8392: `contacts` + `emails` were missing, so thirteen allowlisted
4982
+ // tools were unreachable by construction — list_tags, create_tag,
4983
+ // tag_contact, untag_contact, list_segments, create_segment,
4984
+ // update_segment (contacts) and list_broadcasts, get_broadcast,
4985
+ // create_broadcast, list_sequences, get_sequence, create_sequence
4986
+ // (emails). A customer agent was blocked on exactly those.
4987
+ //
4988
+ // These two ids are Kajabi's OWN spelling, not ours: the server names the
4989
+ // toolset in its rejection, e.g. `list_tags` returns
4990
+ // "The 'contacts' toolset is not active. Call enable_toolset with
4991
+ // name: 'contacts' to activate it first."
4992
+ // and `list_sequences` returns the same with 'emails'. Sourced that way
4993
+ // deliberately — a wrong id here is logged and SKIPPED by the proxy, so a
4994
+ // guess would look applied and change nothing.
4995
+ //
4996
+ // Why this went unnoticed for four rounds: `get_contacts_analytics` lives
4997
+ // in the `analytics` group, which we already pre-enable. So the contacts
4998
+ // family read as partly alive (you could see a site's contact count and
4999
+ // growth curve) while every tag and segment call failed.
5000
+ preEnableToolsets: [
5001
+ "courses",
5002
+ "products",
5003
+ "commerce",
5004
+ "analytics",
5005
+ "pages",
5006
+ "themes",
5007
+ "contacts",
5008
+ "emails"
5009
+ ]
4981
5010
  },
4982
5011
  "notion-cli": {
4983
5012
  // Notion's public OAuth app. Tokens are workspace-scoped and long-lived —
@@ -7248,6 +7277,7 @@ var AGENT_DIRECTED_NOTICE_KINDS = ["scheduled_task_nudge", "kanban_check"];
7248
7277
  var AGENT_DIRECTED_KIND_SET = new Set(AGENT_DIRECTED_NOTICE_KINDS);
7249
7278
 
7250
7279
  // ../../packages/core/dist/direct-chat/cursor-advance.js
7280
+ var CURSOR_ADVANCE_NON_SHORTFALL_KEYS = ["advanced", "advanced_unreported", "failed"];
7251
7281
  var CURSOR_SHORTFALL_REASONS = [
7252
7282
  "not_found",
7253
7283
  // ENG-8348: `/consume` only. The row belongs to this agent+session but was
@@ -7262,9 +7292,16 @@ var CURSOR_SHORTFALL_REASONS = [
7262
7292
  "unknown",
7263
7293
  "unreported",
7264
7294
  "malformed_count",
7265
- "other"
7295
+ "other",
7296
+ // ENG-8393: the non-shortfall outcomes — two benign, plus `failed`. Written
7297
+ // on the paths that previously wrote nothing, so a zero on the shortfall
7298
+ // reasons above becomes readable — see CURSOR_ADVANCE_NON_SHORTFALL_KEYS.
7299
+ "advanced",
7300
+ "advanced_unreported",
7301
+ "failed"
7266
7302
  ];
7267
- var KNOWN_REASONS = new Set(CURSOR_SHORTFALL_REASONS);
7303
+ var NON_SHORTFALL_KEYS = new Set(CURSOR_ADVANCE_NON_SHORTFALL_KEYS);
7304
+ var KNOWN_REASONS = new Set(CURSOR_SHORTFALL_REASONS.filter((k) => !NON_SHORTFALL_KEYS.has(k)));
7268
7305
  function normalizeCursorShortfallReason(raw) {
7269
7306
  if (raw == null || raw === "")
7270
7307
  return "unreported";
@@ -7274,7 +7311,7 @@ function classifyCursorAdvance(input) {
7274
7311
  const body = input.body ?? void 0;
7275
7312
  if (!input.httpOk || body?.error != null) {
7276
7313
  const error = body?.error ?? input.statusText ?? (input.httpStatus !== void 0 ? `HTTP ${input.httpStatus}` : "request failed");
7277
- return { outcome: "failed", error };
7314
+ return { outcome: "failed", error, expected: new Set(input.messageIds).size };
7278
7315
  }
7279
7316
  const expected = new Set(input.messageIds).size;
7280
7317
  const raw = body?.consumed;
@@ -7306,6 +7343,17 @@ function classifyCursorAdvance(input) {
7306
7343
  function cursorShortfallKey(route, reason, partial) {
7307
7344
  return `${route}|${reason}|${partial ? "true" : "false"}`;
7308
7345
  }
7346
+ function cursorAdvanceCounterKey(route, verdict) {
7347
+ if (verdict.expected === 0)
7348
+ return null;
7349
+ if (verdict.outcome === "shortfall") {
7350
+ return cursorShortfallKey(route, verdict.reason, verdict.partial);
7351
+ }
7352
+ if (verdict.outcome === "failed") {
7353
+ return cursorShortfallKey(route, "failed", false);
7354
+ }
7355
+ return cursorShortfallKey(route, verdict.reported ? "advanced" : "advanced_unreported", false);
7356
+ }
7309
7357
  function formatCursorAdvanceShortfall(verdict, ctx) {
7310
7358
  const cleared = ctx.cleared.length > 0 ? ctx.cleared.join(",") : "none";
7311
7359
  return `[direct-chat] cursor advance shortfall route=/${ctx.route} site=${ctx.site} session=${ctx.sessionId} expected=${verdict.expected} consumed=${verdict.consumed} reason=${verdict.reason} partial=${verdict.partial} cleared_anyway=${cleared}`;
@@ -9942,6 +9990,23 @@ var FLAG_REGISTRY = [
9942
9990
  // safety control, so mutations require explicit confirmation.
9943
9991
  sensitive: true
9944
9992
  },
9993
+ {
9994
+ key: "docker-hygiene",
9995
+ description: "Manager-side docker hygiene on Docker-isolated hosts (ENG-8401): off = no-op, reap-superseded = after a successful agt-runtime retag, remove the prior untagged agt-runtime images that retag orphaned (Layer 1), full = reap-superseded plus a daily dangling-only image+builder prune (Layer 2). agt-runtime:latest and the just-pulled image are never removed and -a/--volumes are never used. Read host-side via hostFlagStore (getString); ships dark.",
9996
+ flagType: "enum",
9997
+ allowedValues: ["off", "reap-superseded", "full"],
9998
+ // Declared safe value is `off`: this flag introduces NEW janitorial behaviour
9999
+ // (the pre-flag compiled behaviour is "never reap"), so off preserves fleet
10000
+ // behaviour on rollout. Not `sensitive` — weakening it (full → off) only stops
10001
+ // cleanup; it relaxes no safety/enforcement control. No envVar by design: this
10002
+ // gate is flag-managed only, with no operator env override.
10003
+ defaultValue: "off",
10004
+ // New host-side reader (ENG-8401): its consumer lands in the agt-cli build
10005
+ // this PR publishes (auto-publish patch-bumps from npm's current 0.28.503 →
10006
+ // 0.28.504), so a flip only takes effect on hosts running >= that version.
10007
+ // Best-effort reach estimate only; not part of the schema fingerprint.
10008
+ since: "0.28.504"
10009
+ },
9945
10010
  {
9946
10011
  key: "composio-hitl-mode",
9947
10012
  description: "Composio managed-toolkits HITL gate (ENG-6027): off = kill switch, shadow = resolve + audit the tier decision but never block, enforce = block write_high_risk+ calls and route them to Human Approval (an Approve/Deny card). Since ENG-7828 enforce ALWAYS routes to a Human Approval card by default; set hitl-approval-routing=off to make enforce a hard block with no approval instead. Per-org rollout from the admin Feature Flags page; ENG-7672 migrated this off the fleet-wide COMPOSIO_HITL_MODE env var.",
@@ -14645,7 +14710,7 @@ export {
14645
14710
  readRemoteMcpAuthConfig,
14646
14711
  buildForwardHeaders,
14647
14712
  classifyCursorAdvance,
14648
- cursorShortfallKey,
14713
+ cursorAdvanceCounterKey,
14649
14714
  formatCursorAdvanceShortfall,
14650
14715
  AnchorSessionClient,
14651
14716
  isOnboardingArea,
@@ -14759,4 +14824,4 @@ export {
14759
14824
  stopAllSessionsAndWait,
14760
14825
  getProjectDir
14761
14826
  };
14762
- //# sourceMappingURL=chunk-HMBECQIY.js.map
14827
+ //# sourceMappingURL=chunk-HEUDF73X.js.map