@integrity-labs/agt-cli 0.28.854 → 0.28.856

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 (26) hide show
  1. package/dist/bin/agt.js +5 -5
  2. package/dist/{chunk-2E2NKILK.js → chunk-6CLS6G7Y.js} +2 -2
  3. package/dist/{chunk-FHOLG6VL.js → chunk-6I5IMMWR.js} +356 -194
  4. package/dist/chunk-6I5IMMWR.js.map +1 -0
  5. package/dist/{chunk-4Z4GFQAD.js → chunk-M6E42Z4Z.js} +111 -1
  6. package/dist/chunk-M6E42Z4Z.js.map +1 -0
  7. package/dist/{claude-pair-runtime-63TA3LT5.js → claude-pair-runtime-QQSSCLXU.js} +2 -2
  8. package/dist/lib/manager-worker.js +37 -21
  9. package/dist/lib/manager-worker.js.map +1 -1
  10. package/dist/mcp/computer-use-proxy.js +98 -1
  11. package/dist/mcp/direct-chat-channel.js +110 -0
  12. package/dist/mcp/index.js +110 -0
  13. package/dist/mcp/origami.js +110 -0
  14. package/dist/mcp/slack-channel.js +110 -0
  15. package/dist/mcp/telegram-channel.js +110 -0
  16. package/dist/{persistent-session-N4DJ4VXZ.js → persistent-session-GZLPDUMN.js} +3 -3
  17. package/dist/{responsiveness-probe-GYE5MIVB.js → responsiveness-probe-GSCW4NBC.js} +3 -3
  18. package/dist/{session-auth-dead-K6B6D3WR.js → session-auth-dead-NWLDIYTW.js} +2 -2
  19. package/package.json +1 -1
  20. package/dist/chunk-4Z4GFQAD.js.map +0 -1
  21. package/dist/chunk-FHOLG6VL.js.map +0 -1
  22. /package/dist/{chunk-2E2NKILK.js.map → chunk-6CLS6G7Y.js.map} +0 -0
  23. /package/dist/{claude-pair-runtime-63TA3LT5.js.map → claude-pair-runtime-QQSSCLXU.js.map} +0 -0
  24. /package/dist/{persistent-session-N4DJ4VXZ.js.map → persistent-session-GZLPDUMN.js.map} +0 -0
  25. /package/dist/{responsiveness-probe-GYE5MIVB.js.map → responsiveness-probe-GSCW4NBC.js.map} +0 -0
  26. /package/dist/{session-auth-dead-K6B6D3WR.js.map → session-auth-dead-NWLDIYTW.js.map} +0 -0
@@ -2631,6 +2631,71 @@ var INTEGRATION_REGISTRY = [
2631
2631
  }
2632
2632
  }
2633
2633
  },
2634
+ {
2635
+ // ENG-10133 (epic ENG-10127). Drives a HUMAN'S macOS desktop — clicks,
2636
+ // keystrokes, window state — through `open-computer-use` running on that
2637
+ // Mac, reached over an SSH reverse tunnel the Mac itself opens.
2638
+ //
2639
+ // READ THIS BEFORE CHANGING ANY FIELD BELOW. Three properties are what make
2640
+ // this safe to ship at all, and each is easy to undo by accident:
2641
+ //
2642
+ // 1. Every forwarded call is gated per-action against a human-granted
2643
+ // approval (ENG-10132, packages/mcp/src/computer-use-gate.ts). The gate
2644
+ // lives INSIDE the proxy binary rather than beside it, so there is no
2645
+ // build in which the tools exist and the gate does not.
2646
+ // 2. The `open-computer-use` FLAG_REGISTRY flag decides whether the row is
2647
+ // forwarded to the host at all, and it is `sensitive` — arming it costs
2648
+ // a confirmation. The flag governs whether the PATH EXISTS; the gate
2649
+ // governs whether a call may travel it. Neither substitutes for the other.
2650
+ // 3. `beta` keeps it off every customer's picker until the operator runbook
2651
+ // (ENG-10135) exists. Setting up the Mac side — launchd tunnel, the
2652
+ // `from="127.0.0.1,::1"` pin on authorized_keys, Accessibility
2653
+ // permissions — is not something a connect dialog can do, and offering
2654
+ // it without those steps produces an integration that installs cleanly
2655
+ // and does nothing.
2656
+ //
2657
+ // NOT a `nativeMcp` spec: the entry needs a host-absolute proxy path and
2658
+ // per-install ssh config (user, port, remote command), neither of which the
2659
+ // ENG-5815 templating vocabulary can express. Rendered by
2660
+ // provisioning/computer-use-mcp.ts instead — see its header.
2661
+ id: "open-computer-use",
2662
+ name: "Computer Use (macOS)",
2663
+ category: "infrastructure",
2664
+ description: "Drive a macOS desktop by accessibility tree \u2014 read window state, click, type and press keys in any app. Every action requires a human approval granted per session and bound to one application.",
2665
+ // The credential is an OpenSSH private key, supplied by the operator who
2666
+ // set up the Mac. `api_key` is this codebase's "customer pastes a secret"
2667
+ // flow; there is no ssh-specific auth type and inventing one would buy
2668
+ // nothing the credential pipeline does not already do.
2669
+ supported_auth_types: ["api_key"],
2670
+ beta: true,
2671
+ // DELIBERATELY NOT `installable`, i.e. never in the Add Integration picker.
2672
+ // It joins augmented-admin / augmented-support / augmented-help-kb as a
2673
+ // GRANTED integration, and for a stronger version of their reason. A picker
2674
+ // entry promises self-service, and there is none to offer: the Mac side
2675
+ // needs a launchd tunnel, an authorized_keys entry pinned to loopback, an
2676
+ // SSH keypair and macOS Accessibility permission, none of which a connect
2677
+ // dialog can do. A customer who "installed" it from a picker would get a
2678
+ // dialog, paste something, and own a broken integration.
2679
+ //
2680
+ // It would also contradict the flag. `open-computer-use` is `sensitive`, so
2681
+ // arming it costs a deliberate confirmation — offering one-click install of
2682
+ // the thing behind it is incoherent.
2683
+ capabilities: [
2684
+ {
2685
+ id: "open-computer-use:read-screen",
2686
+ name: "Read Screen State",
2687
+ description: "List running applications and read a window's accessibility tree (element indices, labels, values). Screenshots are stripped by default and returned only on explicit request.",
2688
+ access: "read"
2689
+ },
2690
+ {
2691
+ id: "open-computer-use:control",
2692
+ name: "Control the Desktop",
2693
+ description: "Open apps, click, scroll, type text, press keys and set field values. Every call is refused unless a human has granted an approval for the target application.",
2694
+ access: "write"
2695
+ }
2696
+ ],
2697
+ docs_url: "https://github.com/anthropics/open-computer-use"
2698
+ },
2634
2699
  {
2635
2700
  // ENG-6195: admin-only debugging surface for Integrity Labs STAFF agents.
2636
2701
  // Provisions the @integrity-labs/augmented-admin-mcp stdio broker, which
@@ -5578,6 +5643,35 @@ var FLAG_REGISTRY = [
5578
5643
  defaultValue: false,
5579
5644
  envVar: "AGT_MODEL_API_ERROR_REPORTING_ENABLED"
5580
5645
  },
5646
+ {
5647
+ key: "model-policy-failover-trigger",
5648
+ description: "Automatic model-policy failover (ENG-10156, ADR-0074). off = the trigger does not run. shadow = it evaluates every ingested model-API error against the policy's failover_trigger config and LOGS the decision with its inputs, acting on nothing. Enum gate; ships OFF.",
5649
+ flagType: "enum",
5650
+ // `armed` is DELIBERATELY not an allowed value yet.
5651
+ //
5652
+ // Nothing writes model_policy_failover_state with source='auto' — that is
5653
+ // the actuation half, and it is gated behind a recorded shadow soak
5654
+ // (ENG-10156 AC8). Offering `armed` now would be a setting an operator can
5655
+ // select, that reports success, and that does nothing: the failure mode is
5656
+ // worse than the missing feature, because it looks like a fleet running
5657
+ // with automatic failover enabled. Add it in the same change that makes it
5658
+ // act, not before.
5659
+ allowedValues: ["off", "shadow"],
5660
+ // OFF, not `shadow`, and the contrast with `channel-quarantine-mode` is the
5661
+ // reason: that flag defaults to `shadow` because shadow WAS the live
5662
+ // manager's compiled behaviour, so anything else would have changed the
5663
+ // fleet. Here there is no incumbent behaviour to preserve — nothing has ever
5664
+ // evaluated this — so `off` is the honest default and turning shadow on is a
5665
+ // deliberate act with a soak attached to it.
5666
+ defaultValue: "off",
5667
+ envVar: "AGT_MODEL_POLICY_FAILOVER_TRIGGER_MODE",
5668
+ // Marked sensitive ahead of `armed` existing: the value this flag will
5669
+ // eventually carry moves a host onto a secondary binding whose credential
5670
+ // may be ours (credential_owner: 'platform'), i.e. it spends money with no
5671
+ // human in the loop. Declaring that now costs nothing and means the audited
5672
+ // -flip behaviour is already in place on the day the value is added.
5673
+ sensitive: true
5674
+ },
5581
5675
  {
5582
5676
  key: "claude-md-skills-index",
5583
5677
  description: `Manager injects the "## Available Skills" bullet list (one line per installed skill, name + frontmatter description) into the agent's project CLAUDE.md. Claude Code already surfaces installed skills to the model natively from .claude/skills/*/SKILL.md, so on current models the list is duplicated context - and an expensive one: it measured 12,045 chars across 29 skills on a prod agent, pushing project/CLAUDE.md to 51k against Claude Code's 40,000-char ceiling, past which the tail of the agent's own system prompt is silently truncated. OFF suppresses ONLY the skill bullets; the "Updating Integrations" guidance in the same managed block is real instruction and is always kept. Defaults ON (today's behaviour) - flip OFF per org to reclaim the headroom.`,
@@ -6882,6 +6976,22 @@ var FLAG_REGISTRY = [
6882
6976
  // No `since` for the same reason: there is no host-side reader and no fleet
6883
6977
  // to converge, so `classifyHostReach` returning `honors` for every host is
6884
6978
  // the literal truth here rather than the trap it is one flag above.
6979
+ },
6980
+ {
6981
+ key: "open-computer-use",
6982
+ description: "ENG-10133 (epic ENG-10127) - gates whether an agent gets the `open-computer-use` stdio MCP server, i.e. whether it can drive a human's macOS desktop at all. OFF (default) = the `.mcp.json` entry is not written, so the tools do not exist for the agent and `--allowedTools` never carries the wildcard (the allowlist is DERIVED from the server keys - see apps/cli/src/lib/claude-tools.ts, which is why there is no second lever to flip). ON = the entry is materialized for any agent that also holds the integration row; the flag is necessary, never sufficient. THE FLAG IS NOT THE SAFETY CONTROL AND MUST NOT BE READ AS ONE. Every forwarded call is gated per-action against a human-granted approval by packages/mcp/src/computer-use-gate.ts (ENG-10132); this flag decides whether the PATH EXISTS, the gate decides whether a call may travel it. Turning this on for an agent whose host runs a proxy build predating that gate hands it an ungated route to someone's desktop - which is why the gate ships in the same proxy binary rather than beside it, so there is no build in which the path exists and the gate does not. Org/agent-scoped rather than global: a desktop belongs to one person, and the blast radius of a wrong answer is that person's open windows, mail client and password manager. Deliberately NO envVar - a host-level env override would let a compromised or misconfigured host arm itself, and this is precisely the gate that must be armed centrally (ENG-8303 pin, ENG-7972 4KB cap).",
6983
+ flagType: "boolean",
6984
+ // Dark. There is no "today's behaviour" to preserve - nothing on the fleet
6985
+ // has this integration - so the safe direction is unambiguous.
6986
+ defaultValue: false,
6987
+ // Enforcement gate (ADR-0022 section 4). Arming it is "relaxing a security
6988
+ // control" in the most literal sense available in this codebase: it is the
6989
+ // difference between an agent that can and cannot move a human's mouse.
6990
+ // One confirmation is a cheap price for that.
6991
+ sensitive: true
6992
+ // Deliberately NOT public. The browser has no decision to make here; the
6993
+ // consumers are the host payload that builds `input.integrations` and the
6994
+ // grant route that refuses to install the row while the flag is off.
6885
6995
  }
6886
6996
  ];
6887
6997
  var REGISTRY_BY_KEY = new Map(FLAG_REGISTRY.map((definition) => [definition.key, definition]));
@@ -14112,4 +14222,4 @@ export {
14112
14222
  peekCurrentSession,
14113
14223
  readDailySessionPin
14114
14224
  };
14115
- //# sourceMappingURL=chunk-4Z4GFQAD.js.map
14225
+ //# sourceMappingURL=chunk-M6E42Z4Z.js.map