@integrity-labs/agt-cli 0.28.651 → 0.28.653

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,10 +40,10 @@ import {
40
40
  success,
41
41
  table,
42
42
  warn
43
- } from "../chunk-EXMRWMXQ.js";
43
+ } from "../chunk-CXZEIJRN.js";
44
44
  import {
45
45
  readDirectChatSessionState
46
- } from "../chunk-EUXCRRZU.js";
46
+ } from "../chunk-E26EKDFP.js";
47
47
  import {
48
48
  AnchorSessionClient,
49
49
  CHANNEL_REGISTRY,
@@ -73,7 +73,7 @@ import {
73
73
  requiredMcpWildcard,
74
74
  resolveChannels,
75
75
  serializeManifestForSlackCli
76
- } from "../chunk-V5MUX3GI.js";
76
+ } from "../chunk-HRMF6VUK.js";
77
77
  import "../chunk-XWVM4KPK.js";
78
78
 
79
79
  // src/bin/agt.ts
@@ -4909,7 +4909,7 @@ import { execFileSync, execSync } from "child_process";
4909
4909
  import { existsSync as existsSync10, realpathSync as realpathSync2 } from "fs";
4910
4910
  import chalk18 from "chalk";
4911
4911
  import ora16 from "ora";
4912
- var cliVersion = true ? "0.28.651" : "dev";
4912
+ var cliVersion = true ? "0.28.653" : "dev";
4913
4913
  async function fetchLatestVersion() {
4914
4914
  const host2 = getHost();
4915
4915
  if (!host2) return null;
@@ -6089,7 +6089,7 @@ function handleError(err) {
6089
6089
  }
6090
6090
 
6091
6091
  // src/bin/agt.ts
6092
- var cliVersion2 = true ? "0.28.651" : "dev";
6092
+ var cliVersion2 = true ? "0.28.653" : "dev";
6093
6093
  var program = new Command();
6094
6094
  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");
6095
6095
  program.hook("preAction", async (thisCommand, actionCommand) => {
@@ -8,7 +8,7 @@ import {
8
8
  isolationMode,
9
9
  log,
10
10
  parseEnvIntegrations
11
- } from "./chunk-EUXCRRZU.js";
11
+ } from "./chunk-E26EKDFP.js";
12
12
  import {
13
13
  BIND_FAILURE_QUARANTINE_THRESHOLD,
14
14
  INTEGRATIONS_SECTION_END,
@@ -55,7 +55,7 @@ import {
55
55
  resolveConnectivityProbe,
56
56
  worseConnectivityOutcome,
57
57
  wrapScheduledTaskPrompt
58
- } from "./chunk-V5MUX3GI.js";
58
+ } from "./chunk-HRMF6VUK.js";
59
59
  import {
60
60
  parsePsRows
61
61
  } from "./chunk-XWVM4KPK.js";
@@ -6073,7 +6073,7 @@ function exchangeFailureKind(err) {
6073
6073
  }
6074
6074
 
6075
6075
  // src/lib/api-client.ts
6076
- var agtCliVersion = true ? "0.28.651" : "dev";
6076
+ var agtCliVersion = true ? "0.28.653" : "dev";
6077
6077
  var lastConfigHash = null;
6078
6078
  function setConfigHash(hash) {
6079
6079
  lastConfigHash = hash && hash.length > 0 ? hash : null;
@@ -9815,4 +9815,4 @@ export {
9815
9815
  managerInstallSystemUnitCommand,
9816
9816
  managerUninstallSystemUnitCommand
9817
9817
  };
9818
- //# sourceMappingURL=chunk-EXMRWMXQ.js.map
9818
+ //# sourceMappingURL=chunk-CXZEIJRN.js.map
@@ -16,7 +16,7 @@ import {
16
16
  rotateDailySession,
17
17
  sessionFileExists,
18
18
  todayLocalIso
19
- } from "./chunk-V5MUX3GI.js";
19
+ } from "./chunk-HRMF6VUK.js";
20
20
  import {
21
21
  reapOrphanChannelMcps
22
22
  } from "./chunk-XWVM4KPK.js";
@@ -4322,4 +4322,4 @@ export {
4322
4322
  stopAllSessionsAndWait,
4323
4323
  getProjectDir
4324
4324
  };
4325
- //# sourceMappingURL=chunk-EUXCRRZU.js.map
4325
+ //# sourceMappingURL=chunk-E26EKDFP.js.map
@@ -2115,7 +2115,7 @@ var INTEGRATION_REGISTRY = [
2115
2115
  id: "firecrawl",
2116
2116
  name: "Firecrawl",
2117
2117
  category: "knowledge",
2118
- description: "Web data for agents: scrape, map, crawl and search any website for clean structured data, plus scheduled change-detection monitors whose updates arrive in the agent's direct-chat. Connect via the platform-managed account, or bring your own Firecrawl API key.",
2118
+ description: "Web data for agents: scrape, map, crawl and search any website for clean structured data, plus scheduled change-detection monitors whose updates arrive in the agent's direct-chat. Connect via the platform-managed account.",
2119
2119
  // ENG-7217: Firecrawl migrates from a customer-API-key stdio MCP
2120
2120
  // (`npx firecrawl-mcp`, FIRECRAWL_API_KEY) to a PREMIUM, platform-managed
2121
2121
  // integration on the Deck / ElevenLabs model (ADR-0031, epic ENG-6920):
@@ -2126,16 +2126,30 @@ var INTEGRATION_REGISTRY = [
2126
2126
  // is metered at the one control-plane chokepoint and gated on a per-org opt-in
2127
2127
  // + monthly USD cap.
2128
2128
  //
2129
- // ENG-8304 / ADR-0055 (Phase 1b — Firecrawl is the BYO exemplar): `api_key` is
2130
- // now also offered so a customer can bring their OWN Firecrawl key. A BYO
2129
+ // ENG-8304 / ADR-0055 (Phase 1b — Firecrawl is the BYO exemplar): `api_key`
2130
+ // was also offered so a customer could bring their OWN Firecrawl key. A BYO
2131
2131
  // install (`credential_source='byo'`) authenticates with the customer's key
2132
2132
  // (stored encrypted on the install) and is NOT metered — its upstream cost is
2133
- // on the customer's own Firecrawl bill. BYO is gated on the plan-tier
2134
- // `byo_credentials` entitlement; managed stays the platform-key, billed path.
2135
- // `api_key` is the BYO option; the connect UI offers it via the toolkit's
2136
- // `auth_types` seed (Firecrawl surfaces through the premium list, not the
2137
- // native `installable` picker that descriptor is for non-premium natives).
2138
- supported_auth_types: ["none", "api_key"],
2133
+ // on the customer's own Firecrawl bill.
2134
+ //
2135
+ // ENG-9235: `api_key` is PARKED, not abandoned. BYO is gated on the plan-tier
2136
+ // `byo_credentials` entitlement, which only `enterprise` has (the column is
2137
+ // NOT NULL DEFAULT false, and ENG-9143 explicitly set it false for Team). The
2138
+ // connect wizard never reads that flag, so offering `api_key` here sent every
2139
+ // Team/Business customer to firecrawl.dev for a key we would then reject with
2140
+ // a 403 `byo_not_entitled_by_plan` — after they had signed up for it.
2141
+ //
2142
+ // Removing it is also what removes that screen: the wizard's picker only
2143
+ // renders for 2+ selectable auth types (`selectableWizardAuthMethods`), so a
2144
+ // single `['none']` restores the friction-free managed install with no UI
2145
+ // change. Restore `api_key` only together with an entitlement-aware wizard —
2146
+ // see ENG-9236 for the proper fix.
2147
+ //
2148
+ // KEEP IN LOCKSTEP with the `firecrawl` row in
2149
+ // packages/supabase/seeds/toolkit-definitions.json: that seed carries its own
2150
+ // `auth_types` and is what `db:catalog:seed` upserts on every prod deploy, so
2151
+ // editing this array alone changes nothing a customer can see.
2152
+ supported_auth_types: ["none"],
2139
2153
  capabilities: [
2140
2154
  { id: "firecrawl:scrape", name: "Scrape Pages", description: "Fetch a single URL as clean markdown / structured data (firecrawl_scrape).", access: "write" },
2141
2155
  { id: "firecrawl:search", name: "Web Search", description: "Search the web and return ranked results, optionally scraped (firecrawl_search).", access: "write" },
@@ -5427,22 +5441,33 @@ var FLAG_REGISTRY = [
5427
5441
  },
5428
5442
  {
5429
5443
  key: "ninjafy-brand",
5430
- description: 'Present the product under the Ninjafy brand instead of Augmented Team (ENG-8250). This is the UMBRELLA brand gate, not a one-off nav toggle: every subsequent rebrand surface (page titles, email templates, marketing-facing copy) reads THIS key rather than adding its own flag, so the whole rebrand keeps a single kill switch. First surface is the left-hand nav wordmark \u2014 ON replaces the human+robot mark and the "augmented.team" text with italic lowercase "ninjafy"; OFF renders exactly what shipped before. Scope is the USER-FACING BRAND PRESENTATION \u2014 text AND VISUAL THEME. ENG-8858 widened this from text alone: the Ninjafy palette is gated here too, because a colour theme is not text. It stays ONE key rather than gaining a `ninjafy-theme` sibling, so a half-branded state \u2014 ninjafy wordmark over Augmented green \u2014 is unreachable and the rebrand keeps a single kill switch. It must never gate a code identifier, package name, env var or CLI name. EXISTING identifiers stay `Augmented`/`agt` per the CLAUDE.md naming contract, which protects them from premature renaming \u2014 the deep rename is workstream C of docs/runbooks/rebrand-ninjafy-migration.md and is out of scope here. That contract does NOT require NEW code to carry the old brand: artefacts created specifically for the rebrand take Ninjafy naming (ENG-8078 decision 9; see the CLAUDE.md rebrand carve-out). Either way it is a naming rule, not a flag concern \u2014 this key gates presentation, never an identifier. Set the stage-wide default to flip a whole environment, or add a feature_flag_overrides row to pilot a subset while everyone else still sees Augmented. Overrides resolve at FOUR grains, most specific first \u2014 agent, team, host, then org-wide (evaluate.ts:79-81); organization_id is always required, so there is no global override. Org and team are the useful pilot grains for THIS flag: EVERY consumer evaluates in the active-org cookie scope \u2014 sidebar.tsx and top-nav.tsx via usePublicBooleanFlag, and (dashboard)/layout.tsx via getPublicBooleanFlagServer \u2014 so a host- or agent-scoped row is accepted by the table but never reached by the console. The THEME is resolved SERVER-side deliberately (ENG-8858): the client hook starts at its default and updates after an async GET /flags, so gating a palette on it paints Augmented and repaints \u2014 a full-page colour flash, not just the wordmark flash it already causes. A consequence worth knowing: /login and the marketing routes stay on the Augmented palette whatever an org sets, because getPublicBooleanFlagServer returns the default without a verified session and a pre-auth page has neither a session nor an active org \u2014 a PER-ORG flag structurally cannot brand one. Those surfaces follow only when the stage-wide default flips. Ships dark.',
5444
+ description: 'Present the product under the Ninjafy brand instead of Augmented Team (ENG-8250). This is the UMBRELLA brand gate, not a one-off nav toggle: every subsequent rebrand surface (page titles, email templates, marketing-facing copy) reads THIS key rather than adding its own flag, so the whole rebrand keeps a single kill switch. First surface is the left-hand nav wordmark \u2014 ON replaces the human+robot mark and the "augmented.team" text with italic lowercase "ninjafy"; OFF renders exactly what shipped before. Scope is the USER-FACING BRAND PRESENTATION \u2014 text AND VISUAL THEME. ENG-8858 widened this from text alone: the Ninjafy palette is gated here too, because a colour theme is not text. It stays ONE key rather than gaining a `ninjafy-theme` sibling, so a half-branded state \u2014 ninjafy wordmark over Augmented green \u2014 is unreachable and the rebrand keeps a single kill switch. It must never gate a code identifier, package name, env var or CLI name. EXISTING identifiers stay `Augmented`/`agt` per the CLAUDE.md naming contract, which protects them from premature renaming \u2014 the deep rename is workstream C of docs/runbooks/rebrand-ninjafy-migration.md and is out of scope here. That contract does NOT require NEW code to carry the old brand: artefacts created specifically for the rebrand take Ninjafy naming (ENG-8078 decision 9; see the CLAUDE.md rebrand carve-out). Either way it is a naming rule, not a flag concern \u2014 this key gates presentation, never an identifier. Set the stage-wide default to flip a whole environment, or add a feature_flag_overrides row to pilot a subset while everyone else still sees Augmented. Overrides resolve at FOUR grains, most specific first \u2014 agent, team, host, then org-wide (evaluate.ts:79-81); organization_id is always required, so there is no global override. Org and team are the useful pilot grains for THIS flag: there is now exactly ONE consumer \u2014 (dashboard)/layout.tsx via getPublicBooleanFlagServer \u2014 evaluating in the active-org cookie scope, so a host- or agent-scoped row is accepted by the table but never reached by the console. It resolves the key ONCE per request and passes the boolean down to sidebar.tsx and top-nav.tsx as a required prop. Resolution is SERVER-side deliberately: the client hook starts at its default and updates after an async GET /flags, so anything gated on it paints Augmented and then repaints. ENG-8858 moved the PALETTE for that reason (a full-page colour flash); ENG-9227 moved the WORDMARK, which had been the last surface still swapping after hydration. A consequence worth knowing: /login and the marketing routes stay on the Augmented palette whatever an org sets, because getPublicBooleanFlagServer returns the default without a verified session and a pre-auth page has neither a session nor an active org \u2014 a PER-ORG flag structurally cannot brand one. Those surfaces follow only when the stage-wide default flips. Ships dark.',
5431
5445
  flagType: "boolean",
5432
5446
  // Declared safe value is `false`: the pre-rebrand brand. `false` is also the
5433
5447
  // fail-closed direction — if the flag DB is unreachable we must show the brand
5434
5448
  // that is currently live and contractually correct, never leak an unannounced
5435
5449
  // rebrand to every customer at once.
5436
5450
  defaultValue: false,
5437
- // Read on BOTH sides, so the key must be in the browser-exposed public map:
5438
- // sidebar.tsx and top-nav.tsx are "use client" and resolve it via
5439
- // usePublicBooleanFlag for the WORDMARK, while (dashboard)/layout.tsx resolves
5440
- // it server-side via getPublicBooleanFlagServer for the THEME (ENG-8858) a
5441
- // palette cannot wait for an async client fetch without flashing. Dropping
5442
- // `public` would break the two client readers, not just the server one.
5443
- // Unlike onboarding-msteams-channel above there is no wrong-org hazard — every
5444
- // reader evaluates inside the active-org cookie's scope, which is exactly the
5445
- // org whose brand should be shown.
5451
+ // ENG-9227: there are NO client readers of this key left. (dashboard)/
5452
+ // layout.tsx resolves it ONCE server-side via getPublicBooleanFlagServer and
5453
+ // passes the boolean down to sidebar.tsx and top-nav.tsx as a required prop.
5454
+ // ENG-8858 did that for the THEME; ENG-9227 finished the job for the
5455
+ // WORDMARK, which had kept usePublicBooleanFlag and so kept swapping
5456
+ // "augmented.team" to "ninjafy" after hydration.
5457
+ //
5458
+ // `public` MUST STAY ANYWAY, and this is the trap. It is tempting to read
5459
+ // "no client readers" as "no longer needs to be public" — but
5460
+ // getPublicBooleanFlagServer resolves against the very same `GET /flags`
5461
+ // endpoint the browser uses, and that route filters to listPublicFlagKeys()
5462
+ // (routes/flags.ts:72-75). A non-public key is simply absent from the map,
5463
+ // so the server helper would fall through to its default and return `false`
5464
+ // FOREVER — the brand quietly reverting to Augmented for every org, with no
5465
+ // error anywhere. `public` here means "readable through the public map",
5466
+ // not "read by a browser".
5467
+ //
5468
+ // Unlike onboarding-msteams-channel above there is no wrong-org hazard — the
5469
+ // single reader evaluates inside the active-org cookie's scope, which is
5470
+ // exactly the org whose brand should be shown.
5446
5471
  public: true
5447
5472
  },
5448
5473
  {
@@ -12234,4 +12259,4 @@ export {
12234
12259
  minutesSinceLocalMidnight,
12235
12260
  peekCurrentSession
12236
12261
  };
12237
- //# sourceMappingURL=chunk-V5MUX3GI.js.map
12262
+ //# sourceMappingURL=chunk-HRMF6VUK.js.map