@integrity-labs/agt-cli 0.28.1131 → 0.28.1133

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,12 +40,12 @@ import {
40
40
  success,
41
41
  table,
42
42
  warn
43
- } from "../chunk-4BKN4EUH.js";
43
+ } from "../chunk-I7W7LI5F.js";
44
44
  import {
45
45
  getProjectDir,
46
46
  isSessionResumeDisabled,
47
47
  readDirectChatSessionState
48
- } from "../chunk-KG4IEJEF.js";
48
+ } from "../chunk-NIKSQHNB.js";
49
49
  import {
50
50
  AnchorSessionClient,
51
51
  CHANNEL_REGISTRY,
@@ -79,7 +79,7 @@ import {
79
79
  serializeManifestForSlackCli,
80
80
  sessionFileExists,
81
81
  sessionTranscriptDir
82
- } from "../chunk-TKBGHAN3.js";
82
+ } from "../chunk-TPUS37QC.js";
83
83
  import "../chunk-B6UYVEMD.js";
84
84
  import "../chunk-XWVM4KPK.js";
85
85
  import "../chunk-EL5MWGGH.js";
@@ -5474,7 +5474,7 @@ import { execFileSync, execSync } from "child_process";
5474
5474
  import { existsSync as existsSync11, realpathSync as realpathSync2 } from "fs";
5475
5475
  import chalk18 from "chalk";
5476
5476
  import ora16 from "ora";
5477
- var cliVersion = true ? "0.28.1131" : "dev";
5477
+ var cliVersion = true ? "0.28.1133" : "dev";
5478
5478
  async function fetchLatestVersion() {
5479
5479
  const host2 = getHost();
5480
5480
  if (!host2) return null;
@@ -6734,7 +6734,7 @@ function handleError(err) {
6734
6734
  }
6735
6735
 
6736
6736
  // src/bin/agt.ts
6737
- var cliVersion2 = true ? "0.28.1131" : "dev";
6737
+ var cliVersion2 = true ? "0.28.1133" : "dev";
6738
6738
  var program = new Command();
6739
6739
  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");
6740
6740
  program.hook("preAction", async (thisCommand, actionCommand) => {
@@ -16,7 +16,7 @@ import {
16
16
  parseEnvFileEntries,
17
17
  parseEnvIntegrations,
18
18
  shellQuote
19
- } from "./chunk-KG4IEJEF.js";
19
+ } from "./chunk-NIKSQHNB.js";
20
20
  import {
21
21
  BIND_FAILURE_QUARANTINE_THRESHOLD,
22
22
  INTEGRATIONS_SECTION_END,
@@ -79,7 +79,7 @@ import {
79
79
  sessionTranscriptDir,
80
80
  worseConnectivityOutcome,
81
81
  wrapScheduledTaskPrompt
82
- } from "./chunk-TKBGHAN3.js";
82
+ } from "./chunk-TPUS37QC.js";
83
83
  import {
84
84
  classifyUnanswerablePane,
85
85
  isConsumerTermsDialogVisible,
@@ -8076,7 +8076,7 @@ function exchangeFailureKind(err) {
8076
8076
  }
8077
8077
 
8078
8078
  // src/lib/api-client.ts
8079
- var agtCliVersion = true ? "0.28.1131" : "dev";
8079
+ var agtCliVersion = true ? "0.28.1133" : "dev";
8080
8080
  var lastConfigHash = null;
8081
8081
  function setConfigHash(hash) {
8082
8082
  lastConfigHash = hash && hash.length > 0 ? hash : null;
@@ -13227,4 +13227,4 @@ export {
13227
13227
  managerInstallSystemUnitCommand,
13228
13228
  managerUninstallSystemUnitCommand
13229
13229
  };
13230
- //# sourceMappingURL=chunk-4BKN4EUH.js.map
13230
+ //# sourceMappingURL=chunk-I7W7LI5F.js.map
@@ -24,7 +24,7 @@ import {
24
24
  rotateDailySession,
25
25
  sessionFileExists,
26
26
  todayLocalIso
27
- } from "./chunk-TKBGHAN3.js";
27
+ } from "./chunk-TPUS37QC.js";
28
28
  import {
29
29
  classifyUnanswerablePane,
30
30
  findUsageLimitResetHint,
@@ -6114,4 +6114,4 @@ export {
6114
6114
  stopAllSessionsAndWait,
6115
6115
  getProjectDir
6116
6116
  };
6117
- //# sourceMappingURL=chunk-KG4IEJEF.js.map
6117
+ //# sourceMappingURL=chunk-NIKSQHNB.js.map
@@ -1113,7 +1113,17 @@ function formatEmailDomainConfigLines(config) {
1113
1113
  const blocked = stringList(config.blocked_domains);
1114
1114
  lines.push(` - blocked_domains: ${blocked.length ? blocked.join(", ") : "(none)"}`);
1115
1115
  } else if (mode === "internal_only") {
1116
- lines.push(` - only your organization's own email domain is permitted`);
1116
+ const allowed = stringList(config.allowed_domains);
1117
+ const blocked = stringList(config.blocked_domains);
1118
+ if (allowed.length) {
1119
+ lines.push(` - permitted: your organization's own email domain, plus allowed_domains: ${allowed.join(", ")}`);
1120
+ } else {
1121
+ lines.push(` - only your organization's own email domain is permitted`);
1122
+ }
1123
+ if (blocked.length) {
1124
+ const list = blocked.join(", ");
1125
+ lines.push(config.enforce_live === true ? ` - blocked_domains (refused): ${list}` : config.approval_live === true ? ` - blocked_domains: ${list} (a send to these is held for a person to approve, not refused \u2014 never assume it went)` : config.not_live_reason === "no_verified_domain" ? ` - blocked_domains: ${list} (not enforced yet: your organization has no verified email domain, so never email these)` : ` - blocked_domains: ${list} (nothing is enforced at this setting, so a send would go straight out \u2014 never email these)`);
1126
+ }
1117
1127
  }
1118
1128
  const stage = typeof config.stage === "string" ? config.stage : void 0;
1119
1129
  const enforceLive = config.enforce_live === true;
@@ -2085,6 +2095,36 @@ var INTEGRATION_REGISTRY = [
2085
2095
  docs_url: "https://help.otter.ai/hc/en-us/articles/35287607569687-Otter-MCP-Server",
2086
2096
  beta: true
2087
2097
  },
2098
+ {
2099
+ id: "plaud",
2100
+ name: "Plaud",
2101
+ category: "knowledge",
2102
+ description: "Read Plaud recordings: list and search recordings by name or date, and read their AI notes (summary, action items, key topics) and full speaker-labelled transcripts.",
2103
+ // ENG-11543 (CS-2134): same remote streamable-HTTP MCP + OAuth pattern as
2104
+ // Granola/Kajabi/Otter, against Plaud's HOSTED server (https://mcp.plaud.ai/mcp),
2105
+ // not the stdio `npx @plaud-ai/mcp` package. Discovery chain: RFC 9728
2106
+ // protected-resource metadata at mcp.plaud.ai -> RFC 8414 AS metadata on the
2107
+ // same host -> RFC 7591 registration at /register. Auth is OAuth 2.0
2108
+ // authorization-code with PKCE (S256) and a public client registered once by
2109
+ // an operator (docs/runbooks/plaud-dogfood.md -> OAUTH_PLAUD_CLIENT_ID).
2110
+ // Consent is brokered through the shared /integrations/oauth/authorize ->
2111
+ // /callback path, and the token reaches the host via the generic
2112
+ // remote-oauth-proxy (OAUTH_PROVIDERS.plaud.mcpUrl).
2113
+ //
2114
+ // READ-ONLY RESTS ENTIRELY ON THE TOOL ALLOWLIST. Unlike Otter, Plaud
2115
+ // advertises NO scopes_supported, so there is no read scope to request and
2116
+ // the granted token is not scope-limited. What keeps this integration
2117
+ // read-only is OAUTH_PROVIDERS.plaud.toolAllowlist (the five documented
2118
+ // reads), which the proxy enforces on tools/list and tools/call. `login` and
2119
+ // `logout` are excluded; `logout` would revoke the user's authorization.
2120
+ // Anything that widens the allowlist widens what the token can do.
2121
+ supported_auth_types: ["oauth2"],
2122
+ capabilities: [
2123
+ { id: "plaud:read", name: "Read Recordings & Transcripts", description: "List and search recordings by name or date, and read their details, AI notes (summary, action items, key topics) and full transcripts with speaker labels (get_current_user, list_files, get_file, get_note, get_transcript)", access: "read" }
2124
+ ],
2125
+ docs_url: "https://docs.plaud.ai/plaud-mcp-cli/mcp",
2126
+ beta: true
2127
+ },
2088
2128
  {
2089
2129
  id: "anchor-browser",
2090
2130
  name: "Anchor Browser",
@@ -11981,6 +12021,61 @@ var OAUTH_PROVIDERS = {
11981
12021
  // tools/list after a real consent (runbook Step 3).
11982
12022
  toolAllowlist: ["otter_get_user_info", "otter_search", "otter_fetch"]
11983
12023
  },
12024
+ "plaud": {
12025
+ // ENG-11543 (CS-2134): Plaud's hosted MCP - remote streamable-HTTP at
12026
+ // https://mcp.plaud.ai/mcp. Same Granola/Kajabi/Otter shape: OAuth 2.0
12027
+ // authorization-code with PKCE (S256) and a public client
12028
+ // (token_endpoint_auth_method 'none') issued via Dynamic Client
12029
+ // Registration (RFC 7591). NOT the stdio `npx @plaud-ai/mcp` package,
12030
+ // which runs its own local browser sign-in and token file. Values below
12031
+ // are taken verbatim from the metadata (re-read 2026-10-16), not inferred:
12032
+ // - https://mcp.plaud.ai/.well-known/oauth-protected-resource (and the
12033
+ // path-suffixed /.well-known/oauth-protected-resource/mcp the server's
12034
+ // 401 points at) give resource https://mcp.plaud.ai/mcp, AS
12035
+ // https://mcp.plaud.ai/, bearer in the header;
12036
+ // - https://mcp.plaud.ai/.well-known/oauth-authorization-server (and
12037
+ // the identical openid-configuration) give authorize /authorize, token
12038
+ // /token, register /register, PKCE S256 only, `none` among the token
12039
+ // auth methods, and the authorization_code + refresh_token grants.
12040
+ // NOT advertised: `scopes_supported` (so defaultScopes is empty, the
12041
+ // notion-cli precedent, and the authorize URL carries `scope=`) and
12042
+ // `revocation_endpoint` (so there is no revokeUrl: disconnecting here
12043
+ // deletes our copy of the token but cannot revoke Plaud's grant; the user
12044
+ // revokes it in their Plaud account).
12045
+ //
12046
+ // DCR (operator step, NOT done as of this commit): POST the registration
12047
+ // body by hand to https://mcp.plaud.ai/register with client_name
12048
+ // `Ninjafy`, token_endpoint_auth_method `none`, grant_types
12049
+ // authorization_code + refresh_token, and BOTH API callbacks in
12050
+ // redirect_uris (https://api.augmented.team/integrations/oauth/callback
12051
+ // and https://api.ninjafy.com/integrations/oauth/callback). Do not use
12052
+ // scripts/dcr-register.ts: it takes a single --redirect-uri. Store the
12053
+ // returned client id as OAUTH_PLAUD_CLIENT_ID; unset, Connect soft-fails
12054
+ // "not configured". Full procedure: docs/runbooks/plaud-dogfood.md.
12055
+ definitionId: "plaud",
12056
+ authorizeUrl: "https://mcp.plaud.ai/authorize",
12057
+ tokenUrl: "https://mcp.plaud.ai/token",
12058
+ defaultScopes: [],
12059
+ supportsRefresh: true,
12060
+ extraAuthorizeParams: {},
12061
+ clientAuthMethod: "body",
12062
+ pkce: "S256",
12063
+ publicClient: true,
12064
+ mcpUrl: "https://mcp.plaud.ai/mcp",
12065
+ // Curated surface (matches the catalog seed's defined_scopes[].tools).
12066
+ // Plaud advertises NO scopes, so the token is not scope-limited: the
12067
+ // read-only property of this integration rests ENTIRELY on this
12068
+ // allowlist, which the remote-oauth-proxy enforces on tools/list and
12069
+ // tools/call. The five names are Plaud's documented read tools
12070
+ // (https://docs.plaud.ai/plaud-mcp-cli/mcp). `login` and `logout` are
12071
+ // deliberately excluded: sign-in is our OAuth broker's job, and `logout`
12072
+ // revokes the user's authorization, which an agent must never do. The
12073
+ // names come from the docs, not from an authenticated tools/list (that
12074
+ // needs a consented token), and the proxy SKIPS an allowlisted name the
12075
+ // server does not serve, so confirm against the first live tools/list
12076
+ // (runbook Step 3, a gate before customer use).
12077
+ toolAllowlist: ["get_current_user", "list_files", "get_file", "get_note", "get_transcript"]
12078
+ },
11984
12079
  "notion-cli": {
11985
12080
  // Notion's public OAuth app. Tokens are workspace-scoped and long-lived —
11986
12081
  // Notion does not issue refresh_tokens, so `supportsRefresh: false` and
@@ -17010,4 +17105,4 @@ export {
17010
17105
  peekCurrentSession,
17011
17106
  readDailySessionPin
17012
17107
  };
17013
- //# sourceMappingURL=chunk-TKBGHAN3.js.map
17108
+ //# sourceMappingURL=chunk-TPUS37QC.js.map