@integrity-labs/agt-cli 0.27.33 → 0.27.34

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
@@ -27,7 +27,7 @@ import {
27
27
  success,
28
28
  table,
29
29
  warn
30
- } from "../chunk-IQP6CNDB.js";
30
+ } from "../chunk-YC4QZFI4.js";
31
31
  import {
32
32
  CHANNEL_REGISTRY,
33
33
  DEPLOYMENT_TEMPLATES,
@@ -4658,7 +4658,7 @@ import { execFileSync, execSync } from "child_process";
4658
4658
  import { existsSync as existsSync10, realpathSync as realpathSync2 } from "fs";
4659
4659
  import chalk18 from "chalk";
4660
4660
  import ora16 from "ora";
4661
- var cliVersion = true ? "0.27.33" : "dev";
4661
+ var cliVersion = true ? "0.27.34" : "dev";
4662
4662
  async function fetchLatestVersion() {
4663
4663
  const host2 = getHost();
4664
4664
  if (!host2) return null;
@@ -5190,7 +5190,7 @@ function handleError(err) {
5190
5190
  }
5191
5191
 
5192
5192
  // src/bin/agt.ts
5193
- var cliVersion2 = true ? "0.27.33" : "dev";
5193
+ var cliVersion2 = true ? "0.27.34" : "dev";
5194
5194
  var program = new Command();
5195
5195
  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");
5196
5196
  program.hook("preAction", (thisCommand) => {
@@ -136,6 +136,40 @@ var INTEGRATION_REGISTRY = [
136
136
  docs_url: "https://docs.granola.ai/docs/api/mcp",
137
137
  beta: true
138
138
  },
139
+ {
140
+ id: "anchor-browser",
141
+ name: "Anchor Browser",
142
+ category: "workspace-productivity",
143
+ description: "Cloud browser for agents \u2014 drive any website that lacks an API (LinkedIn, Sales Navigator, supplier portals) via a hosted, stealth Chromium with persistent-login profiles. Wired as Anchor's HOSTED streamable-HTTP MCP at https://api.anchorbrowser.io/mcp.",
144
+ // ENG-5855: api-key header auth (NOT OAuth, NOT a local stdio package).
145
+ // The manager writes ANCHOR_BROWSER_API_KEY to .env.integrations from the
146
+ // stored api_key credential; the hosted MCP authenticates on the
147
+ // `anchor-api-key` header. The `anchor-session-id` header binds an
148
+ // authenticated profile session — its value is minted per-session by the
149
+ // manager (ENG-5857); until then `envDefaults` seeds it empty so
150
+ // stateless browsing works and no literal `${...}` placeholder ships.
151
+ // Tool surface (25 `anchor_*` tools) is the hosted MCP's, validated in
152
+ // the ENG-5854 spike (docs/spikes/eng-5854-anchor-browser-persistent-login.md).
153
+ supported_auth_types: ["api_key"],
154
+ capabilities: [
155
+ { id: "anchor-browser:browse", name: "Browse & Read", description: "Navigate and read pages \u2014 snapshot, screenshot, page HTML, tabs, console, network requests, wait (anchor_navigate, anchor_snapshot, anchor_take_screenshot, anchor_get_body_html, anchor_tab_list, anchor_console_messages, anchor_network_requests, anchor_wait_for, anchor_navigate_back/forward)", access: "read" },
156
+ { id: "anchor-browser:interact", name: "Interact", description: "Act on pages \u2014 click, type, hover, drag, select options, press keys, handle dialogs, upload files, resize, manage tabs (anchor_click, anchor_type, anchor_hover, anchor_drag, anchor_select_option, anchor_press_key, anchor_handle_dialog, anchor_file_upload, anchor_resize, anchor_tab_new/select/close, anchor_close)", access: "write" },
157
+ { id: "anchor-browser:export", name: "Export & Codegen", description: "Save the current page as PDF and generate Playwright code for a scenario (anchor_pdf_save, anchor_generate_playwright_code)", access: "write" }
158
+ ],
159
+ docs_url: "https://docs.anchorbrowser.io/introduction",
160
+ beta: true,
161
+ remoteMcp: {
162
+ type: "http",
163
+ url: "https://api.anchorbrowser.io/mcp",
164
+ headers: {
165
+ "anchor-api-key": "${ANCHOR_BROWSER_API_KEY}",
166
+ "anchor-session-id": "${ANCHOR_BROWSER_SESSION_ID}"
167
+ },
168
+ // ENG-5857 mints the real session id; default empty so the header
169
+ // resolves cleanly (no profile bound → ephemeral session) until then.
170
+ envDefaults: { ANCHOR_BROWSER_SESSION_ID: "" }
171
+ }
172
+ },
139
173
  {
140
174
  id: "postiz",
141
175
  name: "Postiz",
@@ -3539,6 +3573,15 @@ function envVarForToken(definitionId) {
3539
3573
  return `${definitionId.replace(/-/g, "_").toUpperCase()}_ACCESS_TOKEN`;
3540
3574
  }
3541
3575
  function buildRemoteMcpEntry(definitionId) {
3576
+ const def = INTEGRATION_REGISTRY.find((d) => d.id === definitionId);
3577
+ if (def?.remoteMcp) {
3578
+ const spec = def.remoteMcp;
3579
+ return {
3580
+ type: spec.type ?? "http",
3581
+ url: spec.url,
3582
+ ...spec.headers ? { headers: { ...spec.headers } } : {}
3583
+ };
3584
+ }
3542
3585
  const provider = OAUTH_PROVIDERS[definitionId];
3543
3586
  if (!provider?.mcpUrl)
3544
3587
  return null;
@@ -4626,7 +4669,7 @@ function mapScheduledTasks(tasks) {
4626
4669
  };
4627
4670
  });
4628
4671
  }
4629
- function buildUrlMcpServerEntry(url, headers) {
4672
+ function buildUrlMcpServerEntry(url, headers, type = "http") {
4630
4673
  const hasHeaders = !!headers && Object.keys(headers).length > 0;
4631
4674
  if (url.includes("composio.dev") && hasHeaders) {
4632
4675
  return { type: "http", url, headers };
@@ -4649,7 +4692,7 @@ function buildUrlMcpServerEntry(url, headers) {
4649
4692
  };
4650
4693
  }
4651
4694
  if (hasHeaders) {
4652
- return { type: "http", url, headers };
4695
+ return { type, url, headers };
4653
4696
  }
4654
4697
  return { command: "npx", args: ["-y", "mcp-remote", url, "--allow-http"] };
4655
4698
  }
@@ -5367,6 +5410,17 @@ ${sections}`
5367
5410
  }
5368
5411
  }
5369
5412
  }
5413
+ for (const integration of decryptedIntegrations) {
5414
+ const def = INTEGRATION_REGISTRY.find((d) => d.id === integration.definition_id);
5415
+ const defaults = def?.remoteMcp?.envDefaults;
5416
+ if (!defaults)
5417
+ continue;
5418
+ for (const [key, value] of Object.entries(defaults)) {
5419
+ if (envLines.some((line) => line.startsWith(`${key}=`)))
5420
+ continue;
5421
+ envLines.push(`${key}=${shellQuote(value)}`);
5422
+ }
5423
+ }
5370
5424
  if (envLines.length > 1) {
5371
5425
  const envPath = join4(agentDir, ".env.integrations");
5372
5426
  writeFileSync5(envPath, envLines.join("\n") + "\n");
@@ -5515,7 +5569,7 @@ ${sections}`
5515
5569
  const mcpServers = mcpConfig["mcpServers"];
5516
5570
  let serverEntry;
5517
5571
  if ("url" in config) {
5518
- serverEntry = buildUrlMcpServerEntry(config.url, config.headers);
5572
+ serverEntry = buildUrlMcpServerEntry(config.url, config.headers, config.type);
5519
5573
  } else {
5520
5574
  serverEntry = { command: config.command };
5521
5575
  if (config.args?.length)
@@ -6977,4 +7031,4 @@ export {
6977
7031
  managerInstallSystemUnitCommand,
6978
7032
  managerUninstallSystemUnitCommand
6979
7033
  };
6980
- //# sourceMappingURL=chunk-IQP6CNDB.js.map
7034
+ //# sourceMappingURL=chunk-YC4QZFI4.js.map