@canonry/canonry 7.78.0 → 7.78.3

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 (89) hide show
  1. package/dist/{ads-MIR5MCHL.js → ads-MNMND5VH.js} +2 -2
  2. package/dist/{agent-IXRL5RBI.js → agent-4KNDL3D3.js} +5 -5
  3. package/dist/{agent-ask-K42H6H2T.js → agent-ask-32RTOL2M.js} +2 -2
  4. package/dist/{agent-conversations-2T3W4DHO.js → agent-conversations-BXVWHUZC.js} +2 -2
  5. package/dist/{agent-memory-LJBNSTSP.js → agent-memory-7R7UVFS5.js} +2 -2
  6. package/dist/{agent-providers-QR4LY3AP.js → agent-providers-QGVLCCH4.js} +2 -2
  7. package/dist/{agent-transcript-JIHJWHV6.js → agent-transcript-7Y6BJCIT.js} +2 -2
  8. package/dist/{analytics-JRV7DBBU.js → analytics-YOGEHW6J.js} +2 -2
  9. package/dist/{apply-ZFWDSAV4.js → apply-TB3MF3PH.js} +2 -2
  10. package/dist/{backfill-LU2AQIPY.js → backfill-IRVLT6VT.js} +5 -5
  11. package/dist/{backlinks-NAC2373F.js → backlinks-6GTL324T.js} +2 -2
  12. package/dist/{bing-L3LDBJOC.js → bing-OMQACSDY.js} +2 -2
  13. package/dist/{bootstrap-I6DA4KWB.js → bootstrap-WZ6YDQIG.js} +6 -6
  14. package/dist/{cdp-4F74XLTH.js → cdp-3WBLAWOL.js} +5 -5
  15. package/dist/{chunk-SAHH2FXO.js → chunk-2EWZ3DJ4.js} +1 -1
  16. package/dist/{chunk-VLOCDWCS.js → chunk-3QJWOF2B.js} +3 -2
  17. package/dist/{chunk-6PRFVLIK.js → chunk-4GEEYY3N.js} +1 -1
  18. package/dist/{chunk-UH44UCRM.js → chunk-5NBXPO4G.js} +1 -1
  19. package/dist/{chunk-L2KMR7CM.js → chunk-72YPSNCG.js} +1 -1
  20. package/dist/{chunk-L6F2HOQH.js → chunk-7HE4LAJY.js} +5 -5
  21. package/dist/{chunk-C5WSQXP5.js → chunk-7OAXEMOF.js} +1 -1
  22. package/dist/{chunk-RSVANBNW.js → chunk-BKOG3GEI.js} +1 -1
  23. package/dist/{chunk-EHXNYXAS.js → chunk-BLZCNL3B.js} +1 -1
  24. package/dist/{chunk-ZUC7CJVD.js → chunk-BTMLE3EN.js} +2 -2
  25. package/dist/{chunk-WXIL2EFM.js → chunk-IYMTQHPD.js} +2 -2
  26. package/dist/{chunk-367K6XVX.js → chunk-KF7I7FBI.js} +2 -2
  27. package/dist/{chunk-WCFANFR2.js → chunk-KHIZSTDP.js} +308 -308
  28. package/dist/{chunk-SOQVI7EZ.js → chunk-LBNUTWPK.js} +1 -1
  29. package/dist/{chunk-JEUL5QZP.js → chunk-LOMRNRML.js} +3 -3
  30. package/dist/{chunk-6P6YBNKN.js → chunk-OES6PSQK.js} +3 -3
  31. package/dist/{chunk-6VBLPCCX.js → chunk-PH4AESRE.js} +2 -0
  32. package/dist/{chunk-UQOC5ZQE.js → chunk-PLLDJUG2.js} +2 -2
  33. package/dist/{chunk-M3BUP6XD.js → chunk-PRCBHOVR.js} +43 -7
  34. package/dist/{chunk-EFMZSYRD.js → chunk-QALET4XH.js} +16 -13
  35. package/dist/{chunk-QXSOXDUR.js → chunk-R26CF4WT.js} +1 -1
  36. package/dist/{citations-2XELMCCV.js → citations-PGG7JEIN.js} +2 -2
  37. package/dist/{cli-commands-WCOAB6XU.js → cli-commands-6M5QDGBZ.js} +4 -4
  38. package/dist/cli.js +7 -7
  39. package/dist/{competitor-IK4GYTZO.js → competitor-B3CZOKZU.js} +2 -2
  40. package/dist/{content-SMQPJXPC.js → content-Z4XJMZB4.js} +2 -2
  41. package/dist/{dashboard-EE24ROVG.js → dashboard-6MMYA2GG.js} +3 -3
  42. package/dist/{demo-7XH2N65A.js → demo-3R2SHQPO.js} +1 -1
  43. package/dist/{demo-server-CVB65UYW.js → demo-server-ISJOEJN5.js} +4 -4
  44. package/dist/{discover-3KHUCVE7.js → discover-OT3K7KQK.js} +2 -2
  45. package/dist/{discover-eval-DOEP4ZQ7.js → discover-eval-DN4J4KD5.js} +2 -2
  46. package/dist/{doctor-3T6RKSE7.js → doctor-UDF6OCSR.js} +2 -2
  47. package/dist/{evidence-4NFL5KM3.js → evidence-Z364UFOD.js} +2 -2
  48. package/dist/{export-cmd-BQC6XLJ7.js → export-cmd-K27XN4G5.js} +2 -2
  49. package/dist/{ga-HBRA4UUK.js → ga-Q2CELDLG.js} +2 -2
  50. package/dist/{gbp-2WMBTDJV.js → gbp-V2APGSIQ.js} +2 -2
  51. package/dist/{google-JFUE4BNJ.js → google-WFHYA3QT.js} +2 -2
  52. package/dist/{health-cmd-7BMVCCG2.js → health-cmd-RGFAJ4YP.js} +2 -2
  53. package/dist/{history-QA4ZXCVH.js → history-RUSU66BZ.js} +2 -2
  54. package/dist/index.d.ts +68 -65
  55. package/dist/index.js +13 -13
  56. package/dist/{init-O4G2MDMC.js → init-FLWVOJHU.js} +8 -8
  57. package/dist/{insights-K4UX2PSI.js → insights-4IFQLPS3.js} +2 -2
  58. package/dist/{intelligence-service-D7DS4UKT.js → intelligence-service-MPNONLCW.js} +3 -3
  59. package/dist/{journeys-UWEWJXGT.js → journeys-PTC2QY57.js} +2 -2
  60. package/dist/{keys-CL5YYE7Q.js → keys-JASXI2SR.js} +2 -2
  61. package/dist/{keyword-IFCC5IZT.js → keyword-SK2HJXCJ.js} +2 -2
  62. package/dist/{logs-2A3HBUBK.js → logs-AS5I5V2A.js} +2 -2
  63. package/dist/{mcp-B6L7PKZ4.js → mcp-BQSOYHEX.js} +3 -3
  64. package/dist/mcp.js +4 -4
  65. package/dist/{measurement-plan-GYSO6CXX.js → measurement-plan-LZYYH3OD.js} +3 -3
  66. package/dist/{notify-XM23I2B3.js → notify-JM6252F6.js} +2 -2
  67. package/dist/{organic-evidence-U7HZMXKP.js → organic-evidence-L3Y6RZIH.js} +2 -2
  68. package/dist/{overview-TSAK5DQP.js → overview-VIF2GXYW.js} +3 -3
  69. package/dist/{project-L7DLDEPI.js → project-FQEPFPRD.js} +2 -2
  70. package/dist/{query-FM5HDHO4.js → query-VKRESS6B.js} +2 -2
  71. package/dist/{research-7G5JU44N.js → research-6A6QWKN3.js} +2 -2
  72. package/dist/{results-export-JJDGG6ZP.js → results-export-VUB2ZD5B.js} +2 -2
  73. package/dist/{run-ZVIQVG23.js → run-PG5GYZT7.js} +3 -3
  74. package/dist/{schedule-TV7LWSYI.js → schedule-EBGOLCQZ.js} +2 -2
  75. package/dist/{search-7KRZLZ6S.js → search-NS4XPZRL.js} +2 -2
  76. package/dist/{serve-WSOG525W.js → serve-7HN3VT6J.js} +14 -14
  77. package/dist/{session-OUGQSGVV.js → session-FBHHWILQ.js} +6 -6
  78. package/dist/{settings-AOXQJOHN.js → settings-LNCAYCDF.js} +2 -2
  79. package/dist/{snapshot-B44CXKFU.js → snapshot-LX7OR7SO.js} +2 -2
  80. package/dist/{src-IBGSUYEG.js → src-AQ5MHQGQ.js} +1 -1
  81. package/dist/{status-RNBSFZ6Q.js → status-DQ6FNWUT.js} +3 -3
  82. package/dist/{technical-aeo-UAOKK5QH.js → technical-aeo-5GU2IY6W.js} +2 -2
  83. package/dist/{telemetry-55PUOMA7.js → telemetry-QK2GPII3.js} +3 -3
  84. package/dist/{tools-HRGP4FXN.js → tools-3ACR2D2V.js} +5 -5
  85. package/dist/{traffic-M4OHG5JW.js → traffic-2JFQKVAX.js} +2 -2
  86. package/dist/{users-GU7MULRM.js → users-7OJ2RGV3.js} +2 -2
  87. package/dist/{visibility-stats-4IDTDXDC.js → visibility-stats-VR25XMMY.js} +2 -2
  88. package/dist/{wordpress-CYXB4R5Y.js → wordpress-JYXTF4PL.js} +2 -2
  89. package/package.json +1 -1
@@ -5,7 +5,7 @@ import {
5
5
  siteCrawlGraphNodes,
6
6
  siteCrawlPages,
7
7
  siteCrawlSnapshots
8
- } from "./chunk-6VBLPCCX.js";
8
+ } from "./chunk-PH4AESRE.js";
9
9
  import {
10
10
  SITE_CRAWL_GRAPH_MAX_EDGES,
11
11
  SITE_CRAWL_GRAPH_MAX_NODES,
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  configExists,
6
6
  loadConfigRaw
7
- } from "./chunk-VLOCDWCS.js";
7
+ } from "./chunk-3QJWOF2B.js";
8
8
 
9
9
  // src/setup-state.ts
10
10
  import fs from "fs";
@@ -28,7 +28,7 @@ async function buildSetupState() {
28
28
  }
29
29
  if (dbPath && fs.existsSync(dbPath)) {
30
30
  try {
31
- const { createClient, projects, queries: queriesTable } = await import("./src-IBGSUYEG.js");
31
+ const { createClient, projects, queries: queriesTable } = await import("./src-AQ5MHQGQ.js");
32
32
  const db = createClient(dbPath);
33
33
  project_count = db.select({ id: projects.id }).from(projects).all().length;
34
34
  const firstQuery = db.select({ id: queriesTable.id }).from(queriesTable).limit(1).all();
@@ -47,7 +47,7 @@ function queueServeHandoff() {
47
47
  async function runPendingServeHandoff(format) {
48
48
  if (!pendingServeHandoff) return;
49
49
  pendingServeHandoff = false;
50
- const { serveCommand } = await import("./serve-WSOG525W.js");
50
+ const { serveCommand } = await import("./serve-7HN3VT6J.js");
51
51
  await serveCommand(format);
52
52
  }
53
53
 
@@ -5,7 +5,7 @@ import {
5
5
  isStoredPageReadTool,
6
6
  isStoredReadTool,
7
7
  truncateToolResult
8
- } from "./chunk-WXIL2EFM.js";
8
+ } from "./chunk-IYMTQHPD.js";
9
9
  import {
10
10
  CANONRY_MCP_TOOLKITS
11
11
  } from "./chunk-WVCDUKJ2.js";
@@ -22,7 +22,7 @@ import {
22
22
  resolveApiKeyFor,
23
23
  resolveModelForProvider,
24
24
  validateAgentProviderRegistry
25
- } from "./chunk-VLOCDWCS.js";
25
+ } from "./chunk-3QJWOF2B.js";
26
26
  import {
27
27
  CanonryMcpToolNames,
28
28
  canonryMcpTools
@@ -33,7 +33,7 @@ import {
33
33
  import {
34
34
  agentToolEvents,
35
35
  llmUsageEvents
36
- } from "./chunk-6VBLPCCX.js";
36
+ } from "./chunk-PH4AESRE.js";
37
37
  import {
38
38
  MeasurementPortfolioLists,
39
39
  SeoCapabilities,
@@ -919,6 +919,8 @@ var oauthClients = sqliteTable2("oauth_clients", {
919
919
  * chose its own display name — so that name is a claim, not a fact, and the
920
920
  * consent page must say so. A client calling itself "Canonry Dashboard"
921
921
  * otherwise reads as first-party on the one screen where trust is decided.
922
+ * The one exception is the shared MCP gateway's client once the operator
923
+ * names it in config (`mcpGateway.clientId`); its row stays `dynamic`.
922
924
  */
923
925
  registration: text2("registration").$type().notNull().default("operator"),
924
926
  createdAt: text2("created_at").notNull(),
@@ -2,10 +2,10 @@ import {
2
2
  bucketCliCommandDuration,
3
3
  isTelemetryEnabled,
4
4
  trackEvent
5
- } from "./chunk-6PRFVLIK.js";
5
+ } from "./chunk-4GEEYY3N.js";
6
6
  import {
7
7
  getConfigDir
8
- } from "./chunk-VLOCDWCS.js";
8
+ } from "./chunk-3QJWOF2B.js";
9
9
  import {
10
10
  currentOutcomeAttribution
11
11
  } from "./chunk-3MGM3U6V.js";
@@ -157,7 +157,7 @@ import {
157
157
  userSessions,
158
158
  users,
159
159
  writeNegativeReviewMaxStars
160
- } from "./chunk-6VBLPCCX.js";
160
+ } from "./chunk-PH4AESRE.js";
161
161
  import {
162
162
  ADS_ACTIVATE_SCOPE,
163
163
  ADS_ACTIVATION_ABSOLUTE_MAX_ENTITIES,
@@ -7957,6 +7957,8 @@ h1 { margin: 0; font-size: 24px; line-height: 32px; font-weight: 600; letter-spa
7957
7957
  p { margin: 0; overflow-wrap: anywhere; }
7958
7958
  .intro { color: var(--secondary); margin-top: 8px; }
7959
7959
  strong { color: var(--text); font-weight: 550; }
7960
+ a { color: var(--text); text-decoration: underline; text-decoration-color: var(--border-strong); text-underline-offset: 3px; }
7961
+ a:hover { text-decoration-color: var(--text); }
7960
7962
  .err { margin-top: 16px; color: var(--negative); }
7961
7963
  .warn { margin-top: 16px; padding: 12px; border: 1px solid var(--caution-border); border-radius: 6px; background: var(--caution-surface); color: var(--caution); font-size: 13px; line-height: 20px; }
7962
7964
  .grant { margin: 24px 0 0; padding: 16px 0 20px; border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); font-size: 13px; line-height: 20px; }
@@ -7979,7 +7981,7 @@ button { min-height: 36px; border: 1px solid transparent; border-radius: 6px; pa
7979
7981
  .secondary { border-color: var(--border); background: var(--surface); color: var(--text); }
7980
7982
  .secondary:hover { background: var(--hover); border-color: var(--border-strong); }
7981
7983
  .secondary:active { background: var(--border); }
7982
- :where(input, button):focus-visible { outline: 2px solid var(--focus); outline-offset: 3px; }
7984
+ :where(input, button, a):focus-visible { outline: 2px solid var(--focus); outline-offset: 3px; }
7983
7985
  @media (max-width: 480px) {
7984
7986
  main { padding: 32px 16px; align-items: flex-start; }
7985
7987
  .panel { padding: 24px; }
@@ -8004,11 +8006,11 @@ function fontFace(fontUrl) {
8004
8006
  src: url('${fontUrl}') format('woff2');
8005
8007
  }`;
8006
8008
  }
8007
- function gatePage(title, body, fontUrl) {
8009
+ function gatePage(title, body, fontUrl, head = "") {
8008
8010
  return `<!doctype html>
8009
8011
  <html lang="en"><head>
8010
8012
  <meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
8011
- <meta name="color-scheme" content="dark"><meta name="theme-color" content="#0a0a0a">
8013
+ <meta name="color-scheme" content="dark"><meta name="theme-color" content="#0a0a0a">${head}
8012
8014
  <title>${title} \xB7 Canonry</title>
8013
8015
  <style>${fontFace(fontUrl)}${styles}</style>
8014
8016
  </head><body><main><div class="gate">
@@ -8043,6 +8045,18 @@ ${o.scope.split(/\s+/).includes(RESEARCH_RUN_SCOPE) ? `<p class="warn">Run resea
8043
8045
  <div class="actions"><button class="primary" type="submit" name="approve" value="yes">Allow</button><button class="secondary" type="submit" name="approve" value="no">Deny</button></div>
8044
8046
  </form>`, o.fontUrl);
8045
8047
  }
8048
+ function renderAuthorizationHandoff(o) {
8049
+ const target = escapeHtml(o.target);
8050
+ const title = o.approved ? "Access allowed" : "Access denied";
8051
+ return gatePage(
8052
+ title,
8053
+ `<h1 id="gate-title">${title}</h1>
8054
+ <p class="intro">Returning you to <strong>${escapeHtml(o.clientName)}</strong>. If nothing happens, <a href="${target}" rel="noreferrer">continue</a>.</p>`,
8055
+ o.fontUrl,
8056
+ `
8057
+ <meta http-equiv="refresh" content="0;url=${target}">`
8058
+ );
8059
+ }
8046
8060
 
8047
8061
  // ../api-routes/src/oauth.ts
8048
8062
  var CODE_TTL_MS = 6e4;
@@ -8100,6 +8114,12 @@ function sendGatePage(reply, html) {
8100
8114
  "frame-ancestors 'none'; default-src 'none'; style-src 'unsafe-inline'; font-src 'self'; form-action 'self'"
8101
8115
  ).header("x-frame-options", "DENY").header("referrer-policy", "same-origin").header("cache-control", "no-store").type("text/html").send(html);
8102
8116
  }
8117
+ function sendHandoffPage(reply, html) {
8118
+ return reply.header(
8119
+ "content-security-policy",
8120
+ "frame-ancestors 'none'; default-src 'none'; style-src 'unsafe-inline'; font-src 'self'; form-action 'none'; base-uri 'none'"
8121
+ ).header("x-frame-options", "DENY").header("referrer-policy", "no-referrer").header("cache-control", "no-store").type("text/html").send(html);
8122
+ }
8103
8123
  var CONSENT_SECRET = crypto10.randomBytes(32);
8104
8124
  function registerOAuthRoutes(app, opts) {
8105
8125
  void app.register(async (scope) => {
@@ -8126,6 +8146,12 @@ function registerOAuthRoutesIn(app, opts) {
8126
8146
  function consentToken(userId, clientId, redirectUri, scope) {
8127
8147
  return crypto10.createHmac("sha256", CONSENT_SECRET).update([userId, clientId, redirectUri, scope].join("\0")).digest("base64url");
8128
8148
  }
8149
+ function selfRegistered(client) {
8150
+ if (client.registration !== "dynamic") return false;
8151
+ const gateway = opts.gatewayClient;
8152
+ const vouched = gateway !== void 0 && client.id === gateway.id && client.redirectUris.length > 0 && client.redirectUris.every((uri) => URL.canParse(uri) && new URL(uri).origin === gateway.origin);
8153
+ return !vouched;
8154
+ }
8129
8155
  function authorizationServerMetadata() {
8130
8156
  return {
8131
8157
  issuer,
@@ -8201,7 +8227,7 @@ function registerOAuthRoutesIn(app, opts) {
8201
8227
  return sendGatePage(reply, renderConsentPage({
8202
8228
  action: request.url,
8203
8229
  clientName: client.name,
8204
- selfRegistered: client.registration === "dynamic",
8230
+ selfRegistered: selfRegistered(client),
8205
8231
  redirectUri,
8206
8232
  scope: grantedScope,
8207
8233
  userName: user.name,
@@ -8239,7 +8265,12 @@ function registerOAuthRoutesIn(app, opts) {
8239
8265
  const denied = new URL(redirectUri);
8240
8266
  denied.searchParams.set("error", "access_denied");
8241
8267
  if (q.state) denied.searchParams.set("state", q.state);
8242
- return reply.redirect(denied.toString());
8268
+ return sendHandoffPage(reply, renderAuthorizationHandoff({
8269
+ target: denied.toString(),
8270
+ approved: false,
8271
+ clientName: client.name,
8272
+ fontUrl: opts.fontUrl
8273
+ }));
8243
8274
  }
8244
8275
  const code = newToken();
8245
8276
  const now = /* @__PURE__ */ new Date();
@@ -8258,7 +8289,12 @@ function registerOAuthRoutesIn(app, opts) {
8258
8289
  target.searchParams.set("code", code);
8259
8290
  if (q.state) target.searchParams.set("state", q.state);
8260
8291
  target.searchParams.set("iss", issuer);
8261
- return reply.redirect(target.toString());
8292
+ return sendHandoffPage(reply, renderAuthorizationHandoff({
8293
+ target: target.toString(),
8294
+ approved: true,
8295
+ clientName: client.name,
8296
+ fontUrl: opts.fontUrl
8297
+ }));
8262
8298
  });
8263
8299
  const registrations = /* @__PURE__ */ new Map();
8264
8300
  let registrationsThisWindow = [];
@@ -27,14 +27,14 @@ import {
27
27
  resolveConfiguredAgentProvider,
28
28
  resolveSessionProviderAndModel,
29
29
  setAeroSystemPrompt
30
- } from "./chunk-6P6YBNKN.js";
30
+ } from "./chunk-OES6PSQK.js";
31
31
  import {
32
32
  AeroToolProfiles,
33
33
  AeroToolScopes,
34
34
  buildAeroStateTools,
35
35
  isAeroToolProfile,
36
36
  truncateToolResult
37
- } from "./chunk-WXIL2EFM.js";
37
+ } from "./chunk-IYMTQHPD.js";
38
38
  import {
39
39
  getGoogleAuthConfig,
40
40
  getGoogleConnection,
@@ -64,7 +64,7 @@ import {
64
64
  openaiAdapter,
65
65
  openrouterAdapter,
66
66
  perplexityAdapter
67
- } from "./chunk-UH44UCRM.js";
67
+ } from "./chunk-5NBXPO4G.js";
68
68
  import {
69
69
  classifyUsageSurface,
70
70
  createApiUsageTelemetry,
@@ -76,7 +76,7 @@ import {
76
76
  startOutcomeTimer,
77
77
  trackFeatureCompleted,
78
78
  trackInstallState
79
- } from "./chunk-UQOC5ZQE.js";
79
+ } from "./chunk-PLLDJUG2.js";
80
80
  import {
81
81
  isLoopbackBindHost
82
82
  } from "./chunk-TSENU4GG.js";
@@ -96,17 +96,17 @@ import {
96
96
  recordDashboardEvent,
97
97
  setTelemetryPreference,
98
98
  trackEvent
99
- } from "./chunk-6PRFVLIK.js";
99
+ } from "./chunk-4GEEYY3N.js";
100
100
  import {
101
101
  createCanonryMcpServer
102
- } from "./chunk-RSVANBNW.js";
102
+ } from "./chunk-BKOG3GEI.js";
103
103
  import {
104
104
  CANONRY_MCP_TIERS,
105
105
  CANONRY_MCP_TOOLKIT_NAMES
106
106
  } from "./chunk-WVCDUKJ2.js";
107
107
  import {
108
108
  ApiClient
109
- } from "./chunk-C5WSQXP5.js";
109
+ } from "./chunk-7OAXEMOF.js";
110
110
  import {
111
111
  AGENT_PROVIDERS,
112
112
  adapterSupportsBatch,
@@ -138,7 +138,7 @@ import {
138
138
  saveConfigPatch,
139
139
  sentimentInstallReadiness,
140
140
  updateSharedProviderExecutionGate
141
- } from "./chunk-VLOCDWCS.js";
141
+ } from "./chunk-3QJWOF2B.js";
142
142
  import {
143
143
  getBundledSkillSnapshots
144
144
  } from "./chunk-AI44ZCMK.js";
@@ -148,7 +148,7 @@ import {
148
148
  persistSiteCrawlGraphLayout,
149
149
  prepareSiteCrawlGraphLayout,
150
150
  recordedSharePct
151
- } from "./chunk-SOQVI7EZ.js";
151
+ } from "./chunk-LBNUTWPK.js";
152
152
  import {
153
153
  CanonryMcpToolNames,
154
154
  canonryMcpTools
@@ -161,7 +161,7 @@ import {
161
161
  } from "./chunk-HGMYEDAQ.js";
162
162
  import {
163
163
  IntelligenceService
164
- } from "./chunk-ZUC7CJVD.js";
164
+ } from "./chunk-BTMLE3EN.js";
165
165
  import {
166
166
  addLogListener,
167
167
  createFastifyLogger,
@@ -291,7 +291,7 @@ import {
291
291
  webhookResponseReason,
292
292
  webhookTargetRefusalReason,
293
293
  writeAuditLog
294
- } from "./chunk-M3BUP6XD.js";
294
+ } from "./chunk-PRCBHOVR.js";
295
295
  import {
296
296
  OperationalLogStore,
297
297
  SentimentIdempotencyConflict,
@@ -377,7 +377,7 @@ import {
377
377
  siteLivenessState,
378
378
  trafficSources,
379
379
  usageCounters
380
- } from "./chunk-6VBLPCCX.js";
380
+ } from "./chunk-PH4AESRE.js";
381
381
  import {
382
382
  AGENT_MEMORY_VALUE_MAX_BYTES,
383
383
  AI_ENGINE_DOMAINS,
@@ -5937,7 +5937,7 @@ function nonBlank(value) {
5937
5937
  return trimmed ? trimmed : void 0;
5938
5938
  }
5939
5939
  function resolveBuildCommit(env = process.env) {
5940
- const embedded = true ? "d072bd75fd700d80034392e01808c70cb509c189" : void 0;
5940
+ const embedded = true ? "d3a929f13cf172d1ad099aa143935239e90409d1" : void 0;
5941
5941
  return nonBlank(embedded) ?? nonBlank(env.CANONRY_COMMIT);
5942
5942
  }
5943
5943
  function resolveInstanceIdentity(env = process.env) {
@@ -21828,11 +21828,14 @@ async function createServer(opts) {
21828
21828
  if (publicOrigin) {
21829
21829
  const dashboardAssets = path5.join(assetsDir, "assets");
21830
21830
  const gateFont = fs5.existsSync(dashboardAssets) ? fs5.readdirSync(dashboardAssets).find((name) => /^geist-latin-wght-normal-[\w-]+\.woff2$/.test(name)) : void 0;
21831
+ const gateway = opts.config.mcpGateway;
21832
+ const gatewayClient = gateway?.clientId && URL.canParse(gateway.url) ? { id: gateway.clientId, origin: new URL(gateway.url).origin } : void 0;
21831
21833
  registerOAuthRoutes(app, {
21832
21834
  db: opts.db,
21833
21835
  issuer: publicOrigin,
21834
21836
  authorizationPath,
21835
21837
  ...gateFont ? { fontUrl: `${basePath ?? "/"}assets/${gateFont}` } : {},
21838
+ ...gatewayClient ? { gatewayClient } : {},
21836
21839
  resourcePaths: mcpTransportPaths().map(
21837
21840
  (suffix) => `${basePath ?? "/"}api/v1${suffix}`.replace("//", "/")
21838
21841
  ),
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-VJWDBFSL.js";
5
5
  import {
6
6
  createApiClient
7
- } from "./chunk-C5WSQXP5.js";
7
+ } from "./chunk-7OAXEMOF.js";
8
8
  import {
9
9
  CliError,
10
10
  isMachineFormat
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-C5WSQXP5.js";
4
- import "./chunk-VLOCDWCS.js";
3
+ } from "./chunk-7OAXEMOF.js";
4
+ import "./chunk-3QJWOF2B.js";
5
5
  import "./chunk-AOJU5LKX.js";
6
6
  import "./chunk-HGMYEDAQ.js";
7
7
  import "./chunk-PM2DB3HE.js";
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  REGISTERED_CLI_COMMANDS
3
- } from "./chunk-WCFANFR2.js";
3
+ } from "./chunk-KHIZSTDP.js";
4
4
  import "./chunk-6GO5VVAC.js";
5
- import "./chunk-SAHH2FXO.js";
5
+ import "./chunk-2EWZ3DJ4.js";
6
6
  import "./chunk-VJWDBFSL.js";
7
7
  import "./chunk-TSENU4GG.js";
8
- import "./chunk-C5WSQXP5.js";
9
- import "./chunk-VLOCDWCS.js";
8
+ import "./chunk-7OAXEMOF.js";
9
+ import "./chunk-3QJWOF2B.js";
10
10
  import "./chunk-6ACWXQNZ.js";
11
11
  import "./chunk-Z7IUAJOF.js";
12
12
  import "./chunk-7HB6QLX4.js";
package/dist/cli.js CHANGED
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node --import tsx
2
2
  import {
3
3
  REGISTERED_CLI_COMMANDS
4
- } from "./chunk-WCFANFR2.js";
4
+ } from "./chunk-KHIZSTDP.js";
5
5
  import {
6
6
  buildSetupState,
7
7
  runPendingServeHandoff
8
- } from "./chunk-JEUL5QZP.js";
8
+ } from "./chunk-LOMRNRML.js";
9
9
  import "./chunk-6GO5VVAC.js";
10
- import "./chunk-SAHH2FXO.js";
10
+ import "./chunk-2EWZ3DJ4.js";
11
11
  import "./chunk-VJWDBFSL.js";
12
12
  import "./chunk-TSENU4GG.js";
13
13
  import "./chunk-FCYGY4FT.js";
@@ -24,13 +24,13 @@ import {
24
24
  showFirstRunNotice,
25
25
  trackCliCommandFinished,
26
26
  trackEvent
27
- } from "./chunk-6PRFVLIK.js";
27
+ } from "./chunk-4GEEYY3N.js";
28
28
  import {
29
29
  autoSyncSkills,
30
30
  formatAutoSyncNotice
31
- } from "./chunk-EHXNYXAS.js";
32
- import "./chunk-C5WSQXP5.js";
33
- import "./chunk-VLOCDWCS.js";
31
+ } from "./chunk-BLZCNL3B.js";
32
+ import "./chunk-7OAXEMOF.js";
33
+ import "./chunk-3QJWOF2B.js";
34
34
  import {
35
35
  accessFilterFromArgs,
36
36
  dispatchRegisteredCommand,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-C5WSQXP5.js";
4
- import "./chunk-VLOCDWCS.js";
3
+ } from "./chunk-7OAXEMOF.js";
4
+ import "./chunk-3QJWOF2B.js";
5
5
  import {
6
6
  emitJsonl
7
7
  } from "./chunk-Z7IUAJOF.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-C5WSQXP5.js";
4
- import "./chunk-VLOCDWCS.js";
3
+ } from "./chunk-7OAXEMOF.js";
4
+ import "./chunk-3QJWOF2B.js";
5
5
  import {
6
6
  emitJsonl
7
7
  } from "./chunk-Z7IUAJOF.js";
@@ -1,18 +1,18 @@
1
1
  import {
2
2
  clearDashboardPassword,
3
3
  loadConfigRaw
4
- } from "./chunk-VLOCDWCS.js";
4
+ } from "./chunk-3QJWOF2B.js";
5
5
  import {
6
6
  isMachineFormat
7
7
  } from "./chunk-HGMYEDAQ.js";
8
8
  import {
9
9
  anyUsersExist
10
- } from "./chunk-M3BUP6XD.js";
10
+ } from "./chunk-PRCBHOVR.js";
11
11
  import "./chunk-O4WBYEGV.js";
12
12
  import "./chunk-3MGM3U6V.js";
13
13
  import {
14
14
  createClient
15
- } from "./chunk-6VBLPCCX.js";
15
+ } from "./chunk-PH4AESRE.js";
16
16
  import "./chunk-PM2DB3HE.js";
17
17
  import "./chunk-MLKGABMK.js";
18
18
 
@@ -40,7 +40,7 @@ function parseDemoTrustedProxies(values) {
40
40
  async function demoCommand(options) {
41
41
  const { host, port } = parseDemoListenOptions(options);
42
42
  const trustProxy = parseDemoTrustedProxies(options.trustProxy);
43
- const { createDemoServer } = await import("./demo-server-CVB65UYW.js");
43
+ const { createDemoServer } = await import("./demo-server-ISJOEJN5.js");
44
44
  const app = await createDemoServer({ trustProxy });
45
45
  let stopping = false;
46
46
  const stop = () => {
@@ -5,7 +5,7 @@ import {
5
5
  computeFactorAverages,
6
6
  layoutSiteCrawlGraphInput,
7
7
  persistSiteCrawlGraphLayout
8
- } from "./chunk-SOQVI7EZ.js";
8
+ } from "./chunk-LBNUTWPK.js";
9
9
  import {
10
10
  canonryMcpTools
11
11
  } from "./chunk-MUYTDD35.js";
@@ -18,7 +18,7 @@ import "./chunk-HGMYEDAQ.js";
18
18
  import {
19
19
  HISTORY_WINDOW_RUNS,
20
20
  IntelligenceService
21
- } from "./chunk-ZUC7CJVD.js";
21
+ } from "./chunk-BTMLE3EN.js";
22
22
  import "./chunk-TZRYVW75.js";
23
23
  import {
24
24
  determineCitationState
@@ -26,7 +26,7 @@ import {
26
26
  import {
27
27
  apiRoutes,
28
28
  assessConversionTrackingIntegrity
29
- } from "./chunk-M3BUP6XD.js";
29
+ } from "./chunk-PRCBHOVR.js";
30
30
  import "./chunk-O4WBYEGV.js";
31
31
  import "./chunk-3MGM3U6V.js";
32
32
  import {
@@ -104,7 +104,7 @@ import {
104
104
  siteCrawlPages,
105
105
  siteCrawlSnapshots,
106
106
  trafficSources
107
- } from "./chunk-6VBLPCCX.js";
107
+ } from "./chunk-PH4AESRE.js";
108
108
  import {
109
109
  AI_ENGINE_DOMAINS,
110
110
  GA_OVERVIEW_HISTORY_DAYS,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-C5WSQXP5.js";
4
- import "./chunk-VLOCDWCS.js";
3
+ } from "./chunk-7OAXEMOF.js";
4
+ import "./chunk-3QJWOF2B.js";
5
5
  import {
6
6
  emitJsonl
7
7
  } from "./chunk-Z7IUAJOF.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-C5WSQXP5.js";
4
- import "./chunk-VLOCDWCS.js";
3
+ } from "./chunk-7OAXEMOF.js";
4
+ import "./chunk-3QJWOF2B.js";
5
5
  import "./chunk-AOJU5LKX.js";
6
6
  import {
7
7
  CliError,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-C5WSQXP5.js";
4
- import "./chunk-VLOCDWCS.js";
3
+ } from "./chunk-7OAXEMOF.js";
4
+ import "./chunk-3QJWOF2B.js";
5
5
  import {
6
6
  emitJsonl
7
7
  } from "./chunk-Z7IUAJOF.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-C5WSQXP5.js";
4
- import "./chunk-VLOCDWCS.js";
3
+ } from "./chunk-7OAXEMOF.js";
4
+ import "./chunk-3QJWOF2B.js";
5
5
  import {
6
6
  emitJsonl
7
7
  } from "./chunk-Z7IUAJOF.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-C5WSQXP5.js";
4
- import "./chunk-VLOCDWCS.js";
3
+ } from "./chunk-7OAXEMOF.js";
4
+ import "./chunk-3QJWOF2B.js";
5
5
  import "./chunk-AOJU5LKX.js";
6
6
  import {
7
7
  isEndpointMissing,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-C5WSQXP5.js";
4
- import "./chunk-VLOCDWCS.js";
3
+ } from "./chunk-7OAXEMOF.js";
4
+ import "./chunk-3QJWOF2B.js";
5
5
  import {
6
6
  emitJsonl
7
7
  } from "./chunk-Z7IUAJOF.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-C5WSQXP5.js";
4
- import "./chunk-VLOCDWCS.js";
3
+ } from "./chunk-7OAXEMOF.js";
4
+ import "./chunk-3QJWOF2B.js";
5
5
  import "./chunk-AOJU5LKX.js";
6
6
  import {
7
7
  isMachineFormat
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-C5WSQXP5.js";
4
- import "./chunk-VLOCDWCS.js";
3
+ } from "./chunk-7OAXEMOF.js";
4
+ import "./chunk-3QJWOF2B.js";
5
5
  import {
6
6
  emitJsonl
7
7
  } from "./chunk-Z7IUAJOF.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-C5WSQXP5.js";
4
- import "./chunk-VLOCDWCS.js";
3
+ } from "./chunk-7OAXEMOF.js";
4
+ import "./chunk-3QJWOF2B.js";
5
5
  import {
6
6
  emitJsonl
7
7
  } from "./chunk-Z7IUAJOF.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-C5WSQXP5.js";
4
- import "./chunk-VLOCDWCS.js";
3
+ } from "./chunk-7OAXEMOF.js";
4
+ import "./chunk-3QJWOF2B.js";
5
5
  import {
6
6
  emitJsonl
7
7
  } from "./chunk-Z7IUAJOF.js";