@integrity-labs/agt-cli 0.28.659 → 0.28.661

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.
@@ -100,7 +100,7 @@ async function spawnPairSession(session) {
100
100
  return { ok: true };
101
101
  } catch {
102
102
  }
103
- const { resolveClaudeBinary } = await import("./persistent-session-QVLWWFK3.js");
103
+ const { resolveClaudeBinary } = await import("./persistent-session-WOZN2ORO.js");
104
104
  const claudeBin = resolveClaudeBinary();
105
105
  const pairEnv = {
106
106
  ...process.env,
@@ -373,4 +373,4 @@ export {
373
373
  startClaudePair,
374
374
  submitClaudePairCode
375
375
  };
376
- //# sourceMappingURL=claude-pair-runtime-ODPRSH45.js.map
376
+ //# sourceMappingURL=claude-pair-runtime-AAHU6VUL.js.map
@@ -55,7 +55,7 @@ import {
55
55
  safeWriteJsonAtomic,
56
56
  setConfigHash,
57
57
  tripClass
58
- } from "../chunk-ACQZZIK6.js";
58
+ } from "../chunk-WDCI3FYP.js";
59
59
  import {
60
60
  getProjectDir as getProjectDir2,
61
61
  getReadyTasks,
@@ -111,7 +111,7 @@ import {
111
111
  takeZombieDetection,
112
112
  toOpencodeModel,
113
113
  writeEgressAllowlist
114
- } from "../chunk-LUIGOCT4.js";
114
+ } from "../chunk-5JAUM7J2.js";
115
115
  import {
116
116
  ACCOUNT_ENFORCEMENT_MARKER_FILENAME,
117
117
  AnchorSessionClient,
@@ -192,7 +192,7 @@ import {
192
192
  subagentActivityAgeSeconds,
193
193
  sumTranscriptUsageInWindow,
194
194
  transcriptActivityAgeSeconds
195
- } from "../chunk-NLCHGFD5.js";
195
+ } from "../chunk-SU2J2QRH.js";
196
196
  import {
197
197
  reapOrphanChannelMcps
198
198
  } from "../chunk-XWVM4KPK.js";
@@ -11609,7 +11609,7 @@ var pendingDayRolloverReset = /* @__PURE__ */ new Set();
11609
11609
  var dayRolloverInboundHold = /* @__PURE__ */ new Map();
11610
11610
  var INBOUND_HOLD_EPISODE_GAP_MS = 12e4;
11611
11611
  async function channelInboundActivityAgeSecondsFor(codeName) {
11612
- const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-NN4BNX2V.js");
11612
+ const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-APGLAESO.js");
11613
11613
  const newest = newestPendingInboundActivityMtimeMs(dirname10(paneLogPath(codeName)));
11614
11614
  if (newest === null) return null;
11615
11615
  return Math.max(0, Math.floor((Date.now() - newest) / 1e3));
@@ -12252,7 +12252,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
12252
12252
  var lastVersionCheckAt = 0;
12253
12253
  var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
12254
12254
  var lastResponsivenessProbeAt = 0;
12255
- var agtCliVersion = true ? "0.28.659" : "dev";
12255
+ var agtCliVersion = true ? "0.28.661" : "dev";
12256
12256
  function resolveBrewPath(execFileSync3) {
12257
12257
  try {
12258
12258
  const out = execFileSync3("which", ["brew"], { timeout: 5e3 }).toString().trim();
@@ -13562,7 +13562,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
13562
13562
  if (codeNames.length === 0) return;
13563
13563
  void (async () => {
13564
13564
  try {
13565
- const { collectDiagnostics } = await import("../persistent-session-QVLWWFK3.js");
13565
+ const { collectDiagnostics } = await import("../persistent-session-WOZN2ORO.js");
13566
13566
  await api.post("/host/heartbeat", {
13567
13567
  host_id: hostId,
13568
13568
  agent_diagnostics: collectDiagnostics(codeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor)
@@ -13678,7 +13678,7 @@ async function pollCycleInner() {
13678
13678
  }
13679
13679
  try {
13680
13680
  const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
13681
- const { collectDiagnostics } = await import("../persistent-session-QVLWWFK3.js");
13681
+ const { collectDiagnostics } = await import("../persistent-session-WOZN2ORO.js");
13682
13682
  const diagCodeNames = [...agentState.persistentSessionAgents];
13683
13683
  const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor) : void 0;
13684
13684
  let tailscaleHostname;
@@ -13801,7 +13801,7 @@ async function pollCycleInner() {
13801
13801
  collectPanelessActivityProbes,
13802
13802
  getResponsivenessIntervalMs,
13803
13803
  occupancyQualificationClassifications
13804
- } = await import("../responsiveness-probe-NN4BNX2V.js");
13804
+ } = await import("../responsiveness-probe-APGLAESO.js");
13805
13805
  const probeIntervalMs = getResponsivenessIntervalMs();
13806
13806
  if (now - lastResponsivenessProbeAt > probeIntervalMs) {
13807
13807
  const probeCodeNames = [...agentState.persistentSessionAgents];
@@ -13911,7 +13911,7 @@ async function pollCycleInner() {
13911
13911
  collectResponsivenessProbes,
13912
13912
  livePendingInboundOldestAgeSeconds,
13913
13913
  parkPendingInbound
13914
- } = await import("../responsiveness-probe-NN4BNX2V.js");
13914
+ } = await import("../responsiveness-probe-APGLAESO.js");
13915
13915
  const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-NDP36U7O.js");
13916
13916
  const wedgeNow = /* @__PURE__ */ new Date();
13917
13917
  const liveAgents = agentState.persistentSessionAgents;
@@ -14067,7 +14067,7 @@ async function pollCycleInner() {
14067
14067
  }
14068
14068
  try {
14069
14069
  const { scrapeMcpFailedBannerCount } = await import("../pane-mcp-banner-scraper-JA437JIB.js");
14070
- const { probeSessionAuth } = await import("../session-auth-dead-KD66YN7O.js");
14070
+ const { probeSessionAuth } = await import("../session-auth-dead-SMMFC3UF.js");
14071
14071
  const observations = [];
14072
14072
  const pendingCacheCommits = [];
14073
14073
  const modelApiErrorReportingOn = hostFlagStore().getBoolean("model-api-error-reporting");
@@ -17700,7 +17700,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
17700
17700
  void api.post("/host/restart-ack", { host_id: hostId, agent_id: agentId, restart_requested_at: requestedAt }).catch((err) => log(`[restart-lane] ack failed for '${codeName}': ${err.message}`));
17701
17701
  void (async () => {
17702
17702
  try {
17703
- const { collectDiagnostics } = await import("../persistent-session-QVLWWFK3.js");
17703
+ const { collectDiagnostics } = await import("../persistent-session-WOZN2ORO.js");
17704
17704
  await api.post("/host/heartbeat", {
17705
17705
  host_id: hostId,
17706
17706
  agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor)
@@ -17751,7 +17751,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
17751
17751
  }
17752
17752
  try {
17753
17753
  const hostId = await getHostId();
17754
- const { collectDiagnostics } = await import("../persistent-session-QVLWWFK3.js");
17754
+ const { collectDiagnostics } = await import("../persistent-session-WOZN2ORO.js");
17755
17755
  await api.post("/host/heartbeat", {
17756
17756
  host_id: hostId,
17757
17757
  agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor)
@@ -18348,7 +18348,7 @@ async function processClaudePairSessions(agents) {
18348
18348
  killPairSession,
18349
18349
  pairTmuxSession,
18350
18350
  finalizeClaudePairOnboarding
18351
- } = await import("../claude-pair-runtime-ODPRSH45.js");
18351
+ } = await import("../claude-pair-runtime-AAHU6VUL.js");
18352
18352
  for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
18353
18353
  log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
18354
18354
  const killed = await killPairSession(pairTmuxSession(pairId));
@@ -33419,6 +33419,69 @@ var INTEGRATION_REGISTRY = [
33419
33419
  args: ["mcp"]
33420
33420
  }
33421
33421
  },
33422
+ {
33423
+ // ENG-9244 / CS-1593. Framer is the first `cli_tool` integration whose CLI
33424
+ // does NOT authenticate from `env_key`, so read
33425
+ // `integrations/framer-credentials.ts` before changing anything here — the
33426
+ // env var below serves the SDK, and the CLI is served by a separate
33427
+ // `projects.json` the provisioner materialises.
33428
+ id: "framer",
33429
+ name: "Framer",
33430
+ category: "ui-generation",
33431
+ description: "Design, edit and publish a Framer website \u2014 update page copy and images, manage CMS collections, and publish deployments",
33432
+ supported_auth_types: ["api_key"],
33433
+ // Pre-1.0 on both halves (@framer/agent 0.0.44, framer-api 0.1.29) and
33434
+ // Framer bills the Server API itself as a preview. Expect churn.
33435
+ beta: true,
33436
+ installable: { category: "Website", authTypes: ["api_key"] },
33437
+ capabilities: [
33438
+ {
33439
+ id: "framer:read-site",
33440
+ name: "Read Site",
33441
+ description: "Read page text, structure, styles, fonts and CMS content",
33442
+ access: "read"
33443
+ },
33444
+ {
33445
+ id: "framer:edit-site",
33446
+ name: "Edit Site",
33447
+ description: "Update page text and images, create pages, manage CMS collections, redirects and localisation",
33448
+ access: "write"
33449
+ },
33450
+ {
33451
+ id: "framer:publish",
33452
+ name: "Publish",
33453
+ description: "Publish the site and promote a deployment to production",
33454
+ access: "write"
33455
+ }
33456
+ ],
33457
+ cli_tool: {
33458
+ package: "@framer/agent",
33459
+ // UPSTREAM HAZARD: the package's own bin name is `agent`. On a fleet whose
33460
+ // whole job is running agents, putting a global `agent` on PATH is asking
33461
+ // for a collision, so the binary we look for and invoke is the shimmed
33462
+ // `framer-agent`. `installer: 'script'` (rather than plain npm) is what
33463
+ // creates that shim — a bare `npm install -g @framer/agent` would publish
33464
+ // `agent` and we would have shipped the collision.
33465
+ binary: "framer-agent",
33466
+ // Serves the `framer-api` SDK, which DOES read this. The CLI does not —
33467
+ // see framer-credentials.ts for why that distinction matters.
33468
+ env_key: "FRAMER_API_KEY",
33469
+ skill_id: "framer",
33470
+ installer: "script",
33471
+ // The catalog is the trust boundary for this string (same contract as the
33472
+ // `gh` entry above). Installs into a private prefix and links ONLY the
33473
+ // renamed binary, so `agent` never lands on PATH.
33474
+ // VERSION IS PINNED ON PURPOSE. `framer-credentials.ts` mirrors this
33475
+ // CLI's pre-1.0 `projects.json` schema (already at version 2, with a
33476
+ // legacy credentials.json path still in its source — this format HAS
33477
+ // churned). An unpinned global install would let a future release land a
33478
+ // schema we do not write, leaving the CLI unauthenticated on a headless
33479
+ // host. Bump this only alongside a compatibility check of the config
33480
+ // format against the new release.
33481
+ script: "npm install -g --prefix /usr/local/framer-agent @framer/agent@0.0.44 && ln -sf /usr/local/framer-agent/bin/agent /usr/local/bin/framer-agent"
33482
+ },
33483
+ docs_url: "https://www.framer.com/developers/server-api-quick-start"
33484
+ },
33422
33485
  {
33423
33486
  id: "v0",
33424
33487
  name: "v0 by Vercel",
package/dist/mcp/index.js CHANGED
@@ -37309,6 +37309,12 @@ function describeFeatureRequestResult(resp) {
37309
37309
  isError: false
37310
37310
  };
37311
37311
  }
37312
+ if (resp.status === "catalogue_match") {
37313
+ return {
37314
+ text: `Not filed \u2014 we already sell this. ${resp.message ?? ""}`.trim(),
37315
+ isError: false
37316
+ };
37317
+ }
37312
37318
  return {
37313
37319
  text: `Could not submit the feature request${resp.message ? `: ${resp.message}` : ""}. Tell your operator what you need and don't keep retrying.`,
37314
37320
  isError: true
@@ -40801,6 +40807,69 @@ var INTEGRATION_REGISTRY = [
40801
40807
  args: ["mcp"]
40802
40808
  }
40803
40809
  },
40810
+ {
40811
+ // ENG-9244 / CS-1593. Framer is the first `cli_tool` integration whose CLI
40812
+ // does NOT authenticate from `env_key`, so read
40813
+ // `integrations/framer-credentials.ts` before changing anything here — the
40814
+ // env var below serves the SDK, and the CLI is served by a separate
40815
+ // `projects.json` the provisioner materialises.
40816
+ id: "framer",
40817
+ name: "Framer",
40818
+ category: "ui-generation",
40819
+ description: "Design, edit and publish a Framer website \u2014 update page copy and images, manage CMS collections, and publish deployments",
40820
+ supported_auth_types: ["api_key"],
40821
+ // Pre-1.0 on both halves (@framer/agent 0.0.44, framer-api 0.1.29) and
40822
+ // Framer bills the Server API itself as a preview. Expect churn.
40823
+ beta: true,
40824
+ installable: { category: "Website", authTypes: ["api_key"] },
40825
+ capabilities: [
40826
+ {
40827
+ id: "framer:read-site",
40828
+ name: "Read Site",
40829
+ description: "Read page text, structure, styles, fonts and CMS content",
40830
+ access: "read"
40831
+ },
40832
+ {
40833
+ id: "framer:edit-site",
40834
+ name: "Edit Site",
40835
+ description: "Update page text and images, create pages, manage CMS collections, redirects and localisation",
40836
+ access: "write"
40837
+ },
40838
+ {
40839
+ id: "framer:publish",
40840
+ name: "Publish",
40841
+ description: "Publish the site and promote a deployment to production",
40842
+ access: "write"
40843
+ }
40844
+ ],
40845
+ cli_tool: {
40846
+ package: "@framer/agent",
40847
+ // UPSTREAM HAZARD: the package's own bin name is `agent`. On a fleet whose
40848
+ // whole job is running agents, putting a global `agent` on PATH is asking
40849
+ // for a collision, so the binary we look for and invoke is the shimmed
40850
+ // `framer-agent`. `installer: 'script'` (rather than plain npm) is what
40851
+ // creates that shim — a bare `npm install -g @framer/agent` would publish
40852
+ // `agent` and we would have shipped the collision.
40853
+ binary: "framer-agent",
40854
+ // Serves the `framer-api` SDK, which DOES read this. The CLI does not —
40855
+ // see framer-credentials.ts for why that distinction matters.
40856
+ env_key: "FRAMER_API_KEY",
40857
+ skill_id: "framer",
40858
+ installer: "script",
40859
+ // The catalog is the trust boundary for this string (same contract as the
40860
+ // `gh` entry above). Installs into a private prefix and links ONLY the
40861
+ // renamed binary, so `agent` never lands on PATH.
40862
+ // VERSION IS PINNED ON PURPOSE. `framer-credentials.ts` mirrors this
40863
+ // CLI's pre-1.0 `projects.json` schema (already at version 2, with a
40864
+ // legacy credentials.json path still in its source — this format HAS
40865
+ // churned). An unpinned global install would let a future release land a
40866
+ // schema we do not write, leaving the CLI unauthenticated on a headless
40867
+ // host. Bump this only alongside a compatibility check of the config
40868
+ // format against the new release.
40869
+ script: "npm install -g --prefix /usr/local/framer-agent @framer/agent@0.0.44 && ln -sf /usr/local/framer-agent/bin/agent /usr/local/bin/framer-agent"
40870
+ },
40871
+ docs_url: "https://www.framer.com/developers/server-api-quick-start"
40872
+ },
40804
40873
  {
40805
40874
  id: "v0",
40806
40875
  name: "v0 by Vercel",
@@ -44572,6 +44641,9 @@ server.tool(
44572
44641
  provider: external_exports.string().max(120).optional().describe(
44573
44642
  'For feature_type="integration": the name of the service/provider requested (e.g. "Notion", "QuickBooks"). Omit for other types.'
44574
44643
  ),
44644
+ acknowledged_catalogue_alternative: external_exports.boolean().optional().describe(
44645
+ "ENG-9246. Leave this unset on a first attempt. If your request is declined because Augmented already sells the capability, the reply names the integration and the request_integration_access call to make instead \u2014 do that. Only set this to true, and say why in the description, when the customer genuinely needs a DIFFERENT vendor rather than the capability itself. It does not make a stronger case; it just records that you checked."
44646
+ ),
44575
44647
  requester_email: external_exports.string().email().max(320).optional().describe(
44576
44648
  "The email address of the end user who asked for this, so Augmented Team can email them when it is resolved. Only include an email the user has given you and agreed to be contacted at - do NOT guess or invent one. Omit if you don't have their consent or an address."
44577
44649
  ),
@@ -44595,7 +44667,8 @@ server.tool(
44595
44667
  description: params.description,
44596
44668
  ...params.provider ? { provider: params.provider } : {},
44597
44669
  ...params.requester_email ? { requester_email: params.requester_email } : {},
44598
- ...params.requester_user_id ? { requester_user_id: params.requester_user_id } : {}
44670
+ ...params.requester_user_id ? { requester_user_id: params.requester_user_id } : {},
44671
+ ...params.acknowledged_catalogue_alternative ? { acknowledged_catalogue_alternative: true } : {}
44599
44672
  });
44600
44673
  } catch (err) {
44601
44674
  return {
@@ -39639,6 +39639,69 @@ var INTEGRATION_REGISTRY = [
39639
39639
  args: ["mcp"]
39640
39640
  }
39641
39641
  },
39642
+ {
39643
+ // ENG-9244 / CS-1593. Framer is the first `cli_tool` integration whose CLI
39644
+ // does NOT authenticate from `env_key`, so read
39645
+ // `integrations/framer-credentials.ts` before changing anything here — the
39646
+ // env var below serves the SDK, and the CLI is served by a separate
39647
+ // `projects.json` the provisioner materialises.
39648
+ id: "framer",
39649
+ name: "Framer",
39650
+ category: "ui-generation",
39651
+ description: "Design, edit and publish a Framer website \u2014 update page copy and images, manage CMS collections, and publish deployments",
39652
+ supported_auth_types: ["api_key"],
39653
+ // Pre-1.0 on both halves (@framer/agent 0.0.44, framer-api 0.1.29) and
39654
+ // Framer bills the Server API itself as a preview. Expect churn.
39655
+ beta: true,
39656
+ installable: { category: "Website", authTypes: ["api_key"] },
39657
+ capabilities: [
39658
+ {
39659
+ id: "framer:read-site",
39660
+ name: "Read Site",
39661
+ description: "Read page text, structure, styles, fonts and CMS content",
39662
+ access: "read"
39663
+ },
39664
+ {
39665
+ id: "framer:edit-site",
39666
+ name: "Edit Site",
39667
+ description: "Update page text and images, create pages, manage CMS collections, redirects and localisation",
39668
+ access: "write"
39669
+ },
39670
+ {
39671
+ id: "framer:publish",
39672
+ name: "Publish",
39673
+ description: "Publish the site and promote a deployment to production",
39674
+ access: "write"
39675
+ }
39676
+ ],
39677
+ cli_tool: {
39678
+ package: "@framer/agent",
39679
+ // UPSTREAM HAZARD: the package's own bin name is `agent`. On a fleet whose
39680
+ // whole job is running agents, putting a global `agent` on PATH is asking
39681
+ // for a collision, so the binary we look for and invoke is the shimmed
39682
+ // `framer-agent`. `installer: 'script'` (rather than plain npm) is what
39683
+ // creates that shim — a bare `npm install -g @framer/agent` would publish
39684
+ // `agent` and we would have shipped the collision.
39685
+ binary: "framer-agent",
39686
+ // Serves the `framer-api` SDK, which DOES read this. The CLI does not —
39687
+ // see framer-credentials.ts for why that distinction matters.
39688
+ env_key: "FRAMER_API_KEY",
39689
+ skill_id: "framer",
39690
+ installer: "script",
39691
+ // The catalog is the trust boundary for this string (same contract as the
39692
+ // `gh` entry above). Installs into a private prefix and links ONLY the
39693
+ // renamed binary, so `agent` never lands on PATH.
39694
+ // VERSION IS PINNED ON PURPOSE. `framer-credentials.ts` mirrors this
39695
+ // CLI's pre-1.0 `projects.json` schema (already at version 2, with a
39696
+ // legacy credentials.json path still in its source — this format HAS
39697
+ // churned). An unpinned global install would let a future release land a
39698
+ // schema we do not write, leaving the CLI unauthenticated on a headless
39699
+ // host. Bump this only alongside a compatibility check of the config
39700
+ // format against the new release.
39701
+ script: "npm install -g --prefix /usr/local/framer-agent @framer/agent@0.0.44 && ln -sf /usr/local/framer-agent/bin/agent /usr/local/bin/framer-agent"
39702
+ },
39703
+ docs_url: "https://www.framer.com/developers/server-api-quick-start"
39704
+ },
39642
39705
  {
39643
39706
  id: "v0",
39644
39707
  name: "v0 by Vercel",
@@ -33705,6 +33705,69 @@ var INTEGRATION_REGISTRY = [
33705
33705
  args: ["mcp"]
33706
33706
  }
33707
33707
  },
33708
+ {
33709
+ // ENG-9244 / CS-1593. Framer is the first `cli_tool` integration whose CLI
33710
+ // does NOT authenticate from `env_key`, so read
33711
+ // `integrations/framer-credentials.ts` before changing anything here — the
33712
+ // env var below serves the SDK, and the CLI is served by a separate
33713
+ // `projects.json` the provisioner materialises.
33714
+ id: "framer",
33715
+ name: "Framer",
33716
+ category: "ui-generation",
33717
+ description: "Design, edit and publish a Framer website \u2014 update page copy and images, manage CMS collections, and publish deployments",
33718
+ supported_auth_types: ["api_key"],
33719
+ // Pre-1.0 on both halves (@framer/agent 0.0.44, framer-api 0.1.29) and
33720
+ // Framer bills the Server API itself as a preview. Expect churn.
33721
+ beta: true,
33722
+ installable: { category: "Website", authTypes: ["api_key"] },
33723
+ capabilities: [
33724
+ {
33725
+ id: "framer:read-site",
33726
+ name: "Read Site",
33727
+ description: "Read page text, structure, styles, fonts and CMS content",
33728
+ access: "read"
33729
+ },
33730
+ {
33731
+ id: "framer:edit-site",
33732
+ name: "Edit Site",
33733
+ description: "Update page text and images, create pages, manage CMS collections, redirects and localisation",
33734
+ access: "write"
33735
+ },
33736
+ {
33737
+ id: "framer:publish",
33738
+ name: "Publish",
33739
+ description: "Publish the site and promote a deployment to production",
33740
+ access: "write"
33741
+ }
33742
+ ],
33743
+ cli_tool: {
33744
+ package: "@framer/agent",
33745
+ // UPSTREAM HAZARD: the package's own bin name is `agent`. On a fleet whose
33746
+ // whole job is running agents, putting a global `agent` on PATH is asking
33747
+ // for a collision, so the binary we look for and invoke is the shimmed
33748
+ // `framer-agent`. `installer: 'script'` (rather than plain npm) is what
33749
+ // creates that shim — a bare `npm install -g @framer/agent` would publish
33750
+ // `agent` and we would have shipped the collision.
33751
+ binary: "framer-agent",
33752
+ // Serves the `framer-api` SDK, which DOES read this. The CLI does not —
33753
+ // see framer-credentials.ts for why that distinction matters.
33754
+ env_key: "FRAMER_API_KEY",
33755
+ skill_id: "framer",
33756
+ installer: "script",
33757
+ // The catalog is the trust boundary for this string (same contract as the
33758
+ // `gh` entry above). Installs into a private prefix and links ONLY the
33759
+ // renamed binary, so `agent` never lands on PATH.
33760
+ // VERSION IS PINNED ON PURPOSE. `framer-credentials.ts` mirrors this
33761
+ // CLI's pre-1.0 `projects.json` schema (already at version 2, with a
33762
+ // legacy credentials.json path still in its source — this format HAS
33763
+ // churned). An unpinned global install would let a future release land a
33764
+ // schema we do not write, leaving the CLI unauthenticated on a headless
33765
+ // host. Bump this only alongside a compatibility check of the config
33766
+ // format against the new release.
33767
+ script: "npm install -g --prefix /usr/local/framer-agent @framer/agent@0.0.44 && ln -sf /usr/local/framer-agent/bin/agent /usr/local/bin/framer-agent"
33768
+ },
33769
+ docs_url: "https://www.framer.com/developers/server-api-quick-start"
33770
+ },
33708
33771
  {
33709
33772
  id: "v0",
33710
33773
  name: "v0 by Vercel",
@@ -33849,6 +33849,69 @@ var INTEGRATION_REGISTRY = [
33849
33849
  args: ["mcp"]
33850
33850
  }
33851
33851
  },
33852
+ {
33853
+ // ENG-9244 / CS-1593. Framer is the first `cli_tool` integration whose CLI
33854
+ // does NOT authenticate from `env_key`, so read
33855
+ // `integrations/framer-credentials.ts` before changing anything here — the
33856
+ // env var below serves the SDK, and the CLI is served by a separate
33857
+ // `projects.json` the provisioner materialises.
33858
+ id: "framer",
33859
+ name: "Framer",
33860
+ category: "ui-generation",
33861
+ description: "Design, edit and publish a Framer website \u2014 update page copy and images, manage CMS collections, and publish deployments",
33862
+ supported_auth_types: ["api_key"],
33863
+ // Pre-1.0 on both halves (@framer/agent 0.0.44, framer-api 0.1.29) and
33864
+ // Framer bills the Server API itself as a preview. Expect churn.
33865
+ beta: true,
33866
+ installable: { category: "Website", authTypes: ["api_key"] },
33867
+ capabilities: [
33868
+ {
33869
+ id: "framer:read-site",
33870
+ name: "Read Site",
33871
+ description: "Read page text, structure, styles, fonts and CMS content",
33872
+ access: "read"
33873
+ },
33874
+ {
33875
+ id: "framer:edit-site",
33876
+ name: "Edit Site",
33877
+ description: "Update page text and images, create pages, manage CMS collections, redirects and localisation",
33878
+ access: "write"
33879
+ },
33880
+ {
33881
+ id: "framer:publish",
33882
+ name: "Publish",
33883
+ description: "Publish the site and promote a deployment to production",
33884
+ access: "write"
33885
+ }
33886
+ ],
33887
+ cli_tool: {
33888
+ package: "@framer/agent",
33889
+ // UPSTREAM HAZARD: the package's own bin name is `agent`. On a fleet whose
33890
+ // whole job is running agents, putting a global `agent` on PATH is asking
33891
+ // for a collision, so the binary we look for and invoke is the shimmed
33892
+ // `framer-agent`. `installer: 'script'` (rather than plain npm) is what
33893
+ // creates that shim — a bare `npm install -g @framer/agent` would publish
33894
+ // `agent` and we would have shipped the collision.
33895
+ binary: "framer-agent",
33896
+ // Serves the `framer-api` SDK, which DOES read this. The CLI does not —
33897
+ // see framer-credentials.ts for why that distinction matters.
33898
+ env_key: "FRAMER_API_KEY",
33899
+ skill_id: "framer",
33900
+ installer: "script",
33901
+ // The catalog is the trust boundary for this string (same contract as the
33902
+ // `gh` entry above). Installs into a private prefix and links ONLY the
33903
+ // renamed binary, so `agent` never lands on PATH.
33904
+ // VERSION IS PINNED ON PURPOSE. `framer-credentials.ts` mirrors this
33905
+ // CLI's pre-1.0 `projects.json` schema (already at version 2, with a
33906
+ // legacy credentials.json path still in its source — this format HAS
33907
+ // churned). An unpinned global install would let a future release land a
33908
+ // schema we do not write, leaving the CLI unauthenticated on a headless
33909
+ // host. Bump this only alongside a compatibility check of the config
33910
+ // format against the new release.
33911
+ script: "npm install -g --prefix /usr/local/framer-agent @framer/agent@0.0.44 && ln -sf /usr/local/framer-agent/bin/agent /usr/local/bin/framer-agent"
33912
+ },
33913
+ docs_url: "https://www.framer.com/developers/server-api-quick-start"
33914
+ },
33852
33915
  {
33853
33916
  id: "v0",
33854
33917
  name: "v0 by Vercel",
@@ -43,8 +43,8 @@ import {
43
43
  writeDirectChatSessionState,
44
44
  writeEgressAllowlist,
45
45
  writePersistentClaudeWrapper
46
- } from "./chunk-LUIGOCT4.js";
47
- import "./chunk-NLCHGFD5.js";
46
+ } from "./chunk-5JAUM7J2.js";
47
+ import "./chunk-SU2J2QRH.js";
48
48
  import "./chunk-XWVM4KPK.js";
49
49
  export {
50
50
  EGRESS_BASELINE_DOMAINS,
@@ -92,4 +92,4 @@ export {
92
92
  writeEgressAllowlist,
93
93
  writePersistentClaudeWrapper
94
94
  };
95
- //# sourceMappingURL=persistent-session-QVLWWFK3.js.map
95
+ //# sourceMappingURL=persistent-session-WOZN2ORO.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  paneLogPath
3
- } from "./chunk-LUIGOCT4.js";
4
- import "./chunk-NLCHGFD5.js";
3
+ } from "./chunk-5JAUM7J2.js";
4
+ import "./chunk-SU2J2QRH.js";
5
5
  import "./chunk-XWVM4KPK.js";
6
6
 
7
7
  // src/lib/responsiveness-probe.ts
@@ -727,4 +727,4 @@ export {
727
727
  readAndResetSlackReplyBindingClassifications,
728
728
  readAndResetSlackReplyTargetClassifications
729
729
  };
730
- //# sourceMappingURL=responsiveness-probe-NN4BNX2V.js.map
730
+ //# sourceMappingURL=responsiveness-probe-APGLAESO.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  sessionTranscriptDir
3
- } from "./chunk-NLCHGFD5.js";
3
+ } from "./chunk-SU2J2QRH.js";
4
4
 
5
5
  // src/lib/session-auth-dead.ts
6
6
  import { closeSync, openSync, readSync, readdirSync, statSync } from "fs";
@@ -203,4 +203,4 @@ export {
203
203
  decideSessionAuthState,
204
204
  probeSessionAuth
205
205
  };
206
- //# sourceMappingURL=session-auth-dead-KD66YN7O.js.map
206
+ //# sourceMappingURL=session-auth-dead-SMMFC3UF.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@integrity-labs/agt-cli",
3
- "version": "0.28.659",
3
+ "version": "0.28.661",
4
4
  "description": "Augmented Team CLI — agent provisioning and management",
5
5
  "type": "module",
6
6
  "engines": {