@integrity-labs/agt-cli 0.28.1112 → 0.28.1114

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-5EYINOIW.js → chunk-2XQPQOJX.js} +2 -2
  3. package/dist/chunk-2XQPQOJX.js.map +1 -0
  4. package/dist/{chunk-TJUDOE53.js → chunk-J3L66T65.js} +194 -22
  5. package/dist/{chunk-TJUDOE53.js.map → chunk-J3L66T65.js.map} +1 -1
  6. package/dist/{chunk-NO57I56V.js → chunk-OBZB6MUE.js} +74 -1
  7. package/dist/chunk-OBZB6MUE.js.map +1 -0
  8. package/dist/{claude-pair-runtime-CKWLQMAC.js → claude-pair-runtime-2LVLURUE.js} +2 -2
  9. package/dist/lib/manager-worker.js +17 -16
  10. package/dist/lib/manager-worker.js.map +1 -1
  11. package/dist/mcp/direct-chat-channel.js +107 -4
  12. package/dist/mcp/index.js +106 -3
  13. package/dist/mcp/origami.js +73 -0
  14. package/dist/mcp/slack-channel.js +110 -7
  15. package/dist/mcp/teams-channel.js +34 -4
  16. package/dist/mcp/telegram-channel.js +108 -5
  17. package/dist/{persistent-session-SDYY75X7.js → persistent-session-TDPGTHTG.js} +3 -3
  18. package/dist/{responsiveness-probe-NEBHDSMI.js → responsiveness-probe-6P7TB4QA.js} +3 -3
  19. package/dist/{session-auth-dead-CNV4O7RF.js → session-auth-dead-LMCPZJ4K.js} +2 -2
  20. package/package.json +1 -1
  21. package/dist/chunk-5EYINOIW.js.map +0 -1
  22. package/dist/chunk-NO57I56V.js.map +0 -1
  23. /package/dist/{claude-pair-runtime-CKWLQMAC.js.map → claude-pair-runtime-2LVLURUE.js.map} +0 -0
  24. /package/dist/{persistent-session-SDYY75X7.js.map → persistent-session-TDPGTHTG.js.map} +0 -0
  25. /package/dist/{responsiveness-probe-NEBHDSMI.js.map → responsiveness-probe-6P7TB4QA.js.map} +0 -0
  26. /package/dist/{session-auth-dead-CNV4O7RF.js.map → session-auth-dead-LMCPZJ4K.js.map} +0 -0
@@ -30935,8 +30935,38 @@ var ONBOARDING_DM_ONLY_MESSAGE = "Sorry, I can only be onboarded from a Direct M
30935
30935
  import { existsSync as existsSync2, readFileSync as readFileSync3 } from "fs";
30936
30936
  import { homedir as homedir2 } from "os";
30937
30937
  import { join as join2 } from "path";
30938
- function defaultFlagsCachePath() {
30939
- return join2(homedir2(), ".augmented", "flags-cache.json");
30938
+ function hasUsableFlags(path) {
30939
+ try {
30940
+ if (!existsSync2(path)) return false;
30941
+ const parsed = JSON.parse(readFileSync3(path, "utf8"));
30942
+ if (!parsed || typeof parsed !== "object") return false;
30943
+ const flags = parsed.flags;
30944
+ return !!flags && typeof flags === "object" && !Array.isArray(flags);
30945
+ } catch {
30946
+ return false;
30947
+ }
30948
+ }
30949
+ function cacheUpdatedAt(path) {
30950
+ try {
30951
+ if (!existsSync2(path)) return void 0;
30952
+ const parsed = JSON.parse(readFileSync3(path, "utf8"));
30953
+ if (!parsed || typeof parsed !== "object") return void 0;
30954
+ const u = parsed.updated_at;
30955
+ return typeof u === "string" && u.length > 0 ? u : void 0;
30956
+ } catch {
30957
+ return void 0;
30958
+ }
30959
+ }
30960
+ function defaultFlagsCachePath(env2 = process.env) {
30961
+ const hostWide = join2(homedir2(), ".augmented", "flags-cache.json");
30962
+ const agentId = env2["AGT_AGENT_ID"]?.trim();
30963
+ if (!agentId) return hostWide;
30964
+ const perAgent = join2(homedir2(), ".augmented", agentId, "flags-cache.json");
30965
+ if (!hasUsableFlags(perAgent)) return hostWide;
30966
+ const hostWideAt = cacheUpdatedAt(hostWide);
30967
+ const perAgentAt = cacheUpdatedAt(perAgent);
30968
+ if (hostWideAt && (!perAgentAt || perAgentAt < hostWideAt)) return hostWide;
30969
+ return perAgent;
30940
30970
  }
30941
30971
  function envBoolean(raw) {
30942
30972
  if (raw === void 0) return void 0;
@@ -30963,7 +30993,7 @@ function resolveHostBooleanFlag(opts) {
30963
30993
  const env2 = opts.env ?? process.env;
30964
30994
  const envValue = envBoolean(env2[opts.envVar]);
30965
30995
  if (envValue !== void 0) return envValue;
30966
- const cached2 = cachedBoolean(opts.key, opts.cachePath ?? defaultFlagsCachePath());
30996
+ const cached2 = cachedBoolean(opts.key, opts.cachePath ?? defaultFlagsCachePath(env2));
30967
30997
  if (cached2 !== void 0) return cached2;
30968
30998
  return opts.defaultValue;
30969
30999
  }
@@ -30999,7 +31029,7 @@ function resolveGhostReplyMode(opts) {
30999
31029
  if (modeOverride !== void 0) return modeOverride;
31000
31030
  const legacyOverride = parseGhostReplyMode(env2["AGT_GHOST_REPLY_INTENT_CLASSIFIER_ENABLED"]);
31001
31031
  if (legacyOverride !== void 0) return legacyOverride;
31002
- const cached2 = cachedGhostReplyMode(opts?.cachePath ?? defaultFlagsCachePath());
31032
+ const cached2 = cachedGhostReplyMode(opts?.cachePath ?? defaultFlagsCachePath(env2));
31003
31033
  if (cached2 !== void 0) return cached2;
31004
31034
  return "off";
31005
31035
  }
@@ -31030,7 +31060,7 @@ function cachedMaintenanceMode(path) {
31030
31060
  }
31031
31061
  }
31032
31062
  function resolveMaintenanceMode(opts) {
31033
- const cached2 = cachedMaintenanceMode(opts?.cachePath ?? defaultFlagsCachePath());
31063
+ const cached2 = cachedMaintenanceMode(opts?.cachePath ?? defaultFlagsCachePath(opts?.env));
31034
31064
  if (cached2 !== void 0) return cached2;
31035
31065
  return "off";
31036
31066
  }
@@ -34260,6 +34290,51 @@ var OAUTH_PROVIDERS = {
34260
34290
  }
34261
34291
  ]
34262
34292
  },
34293
+ "otter": {
34294
+ // CS-2029: Otter.ai's official MCP — remote streamable-HTTP at
34295
+ // https://mcp.otter.ai/mcp. Same Granola/Kajabi shape: OAuth 2.0
34296
+ // authorization-code with PKCE (S256) and a public client
34297
+ // (token_endpoint_auth_method 'none') issued via Dynamic Client
34298
+ // Registration (RFC 7591). Values below are taken verbatim from the
34299
+ // metadata, not inferred:
34300
+ // - https://mcp.otter.ai/.well-known/oauth-protected-resource names the
34301
+ // AS as https://otter.ai/ and advertises scopes profile:read,
34302
+ // conversations:read;
34303
+ // - https://otter.ai/.well-known/oauth-authorization-server gives
34304
+ // authorize /oauth2/authorize, token /oauth/token, revoke
34305
+ // /oauth/revoke_token, register /oauth/register, PKCE S256, `none`,
34306
+ // and the refresh_token grant.
34307
+ // NOTE the authorize path is /oauth2/authorize while token/revoke live
34308
+ // under /oauth/ — that is Otter's own split, do not "normalise" it.
34309
+ // The prod client was registered 2026-10-10 against /oauth/register with
34310
+ // scope 'profile:read conversations:read' and BOTH API callbacks,
34311
+ // https://api.augmented.team/... and https://api.ninjafy.com/integrations/oauth/callback,
34312
+ // because redirect_uri follows API_PUBLIC_URL and the ENG-11060 flip makes
34313
+ // the ninjafy name canonical; Otter returns no RFC 7592 handle, so a redirect
34314
+ // cannot be added later without a new client and a re-consent per connection.
34315
+ // OAUTH_OTTER_CLIENT_ID is set from its output (docs/runbooks/otter-dogfood.md). Otter advertises ONLY
34316
+ // read scopes, so this integration is read-only by construction: there is
34317
+ // no write scope to request even by mistake.
34318
+ definitionId: "otter",
34319
+ authorizeUrl: "https://otter.ai/oauth2/authorize",
34320
+ tokenUrl: "https://otter.ai/oauth/token",
34321
+ revokeUrl: "https://otter.ai/oauth/revoke_token",
34322
+ defaultScopes: ["profile:read", "conversations:read"],
34323
+ supportsRefresh: true,
34324
+ extraAuthorizeParams: {},
34325
+ clientAuthMethod: "body",
34326
+ pkce: "S256",
34327
+ publicClient: true,
34328
+ mcpUrl: "https://mcp.otter.ai/mcp",
34329
+ // Curated surface (matches the catalog seed's defined_scopes[].tools).
34330
+ // These are the server's three tools, all read-only. The names are
34331
+ // Otter's own, quoted from the tools' descriptions ("use `otter_search`
34332
+ // first", "call otter_get_user_info() first"), not Composio's wrapped
34333
+ // OTTER_AI_MCP_* slugs. An allowlisted name the server does not advertise
34334
+ // is logged and SKIPPED by the proxy, so confirm against the first live
34335
+ // tools/list after a real consent (runbook Step 3).
34336
+ toolAllowlist: ["otter_get_user_info", "otter_search", "otter_fetch"]
34337
+ },
34263
34338
  "notion-cli": {
34264
34339
  // Notion's public OAuth app. Tokens are workspace-scoped and long-lived —
34265
34340
  // Notion does not issue refresh_tokens, so `supportsRefresh: false` and
@@ -34893,6 +34968,34 @@ var INTEGRATION_REGISTRY = [
34893
34968
  docs_url: "https://help.kajabi.com/articles/api-integrations/connect-kajabi-to-claude-or-chatgpt",
34894
34969
  beta: true
34895
34970
  },
34971
+ {
34972
+ id: "otter",
34973
+ name: "Otter.ai",
34974
+ category: "knowledge",
34975
+ description: "Read Otter.ai meetings: search recordings by date, attendee or topic, and read summaries, action items and full speaker-attributed transcripts.",
34976
+ // CS-2029: same remote streamable-HTTP MCP + OAuth pattern as Granola/Kajabi.
34977
+ // Otter's server implements the MCP discovery chain (RFC 9728 protected-
34978
+ // resource metadata at mcp.otter.ai → RFC 8414 AS metadata at otter.ai →
34979
+ // RFC 7591 registration); auth is OAuth 2.0 authorization-code with PKCE
34980
+ // (S256) and a public client registered via one-time Dynamic Client
34981
+ // Registration (scripts/dcr-register.ts against https://otter.ai/oauth/register
34982
+ // → OAUTH_OTTER_CLIENT_ID, --scope 'profile:read conversations:read').
34983
+ // Consent is brokered by the webapp through the shared
34984
+ // /integrations/oauth/authorize → /callback path, and the access_token
34985
+ // reaches the host via the generic remote-oauth-proxy
34986
+ // (OAUTH_PROVIDERS.otter.mcpUrl). Read-only by construction: Otter
34987
+ // advertises no write scope.
34988
+ supported_auth_types: ["oauth2"],
34989
+ capabilities: [
34990
+ { id: "otter:read", name: "Read Meetings & Transcripts", description: "Find recorded meetings by date, attendee, topic or title, and read their summaries, action items, outlines and full transcripts (otter_get_user_info, otter_search, otter_fetch)", access: "read" }
34991
+ ],
34992
+ // Otter's own Help Center article for the MCP server (CodeRabbit, #6906). It
34993
+ // exists even though help.otter.ai answers 403 to non-browser clients; the
34994
+ // help-centre API confirmed it (title "Otter MCP Server"). The MCP endpoint
34995
+ // itself is a JSON-RPC URL, not a page (Obi Wan 8305072d5414).
34996
+ docs_url: "https://help.otter.ai/hc/en-us/articles/35287607569687-Otter-MCP-Server",
34997
+ beta: true
34998
+ },
34896
34999
  {
34897
35000
  id: "anchor-browser",
34898
35001
  name: "Anchor Browser",
@@ -68,8 +68,8 @@ import {
68
68
  writeDirectChatSessionState,
69
69
  writeEgressAllowlist,
70
70
  writePersistentClaudeWrapper
71
- } from "./chunk-5EYINOIW.js";
72
- import "./chunk-NO57I56V.js";
71
+ } from "./chunk-2XQPQOJX.js";
72
+ import "./chunk-OBZB6MUE.js";
73
73
  import "./chunk-OCMJ5E6J.js";
74
74
  import "./chunk-XWVM4KPK.js";
75
75
  import "./chunk-EL5MWGGH.js";
@@ -145,4 +145,4 @@ export {
145
145
  writeEgressAllowlist,
146
146
  writePersistentClaudeWrapper
147
147
  };
148
- //# sourceMappingURL=persistent-session-SDYY75X7.js.map
148
+ //# sourceMappingURL=persistent-session-TDPGTHTG.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  paneLogPath
3
- } from "./chunk-5EYINOIW.js";
4
- import "./chunk-NO57I56V.js";
3
+ } from "./chunk-2XQPQOJX.js";
4
+ import "./chunk-OBZB6MUE.js";
5
5
  import "./chunk-OCMJ5E6J.js";
6
6
  import "./chunk-XWVM4KPK.js";
7
7
  import "./chunk-EL5MWGGH.js";
@@ -802,4 +802,4 @@ export {
802
802
  readAndResetSlackReplyBindingClassifications,
803
803
  readAndResetSlackReplyTargetClassifications
804
804
  };
805
- //# sourceMappingURL=responsiveness-probe-NEBHDSMI.js.map
805
+ //# sourceMappingURL=responsiveness-probe-6P7TB4QA.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  sessionTranscriptDir
3
- } from "./chunk-NO57I56V.js";
3
+ } from "./chunk-OBZB6MUE.js";
4
4
  import "./chunk-DGUM43GV.js";
5
5
 
6
6
  // src/lib/session-auth-dead.ts
@@ -204,4 +204,4 @@ export {
204
204
  decideSessionAuthState,
205
205
  probeSessionAuth
206
206
  };
207
- //# sourceMappingURL=session-auth-dead-CNV4O7RF.js.map
207
+ //# sourceMappingURL=session-auth-dead-LMCPZJ4K.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@integrity-labs/agt-cli",
3
- "version": "0.28.1112",
3
+ "version": "0.28.1114",
4
4
  "description": "Augmented Team CLI — agent provisioning and management",
5
5
  "type": "module",
6
6
  "engines": {