@canonry/canonry 7.72.1 → 7.73.0

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 (131) hide show
  1. package/assets/assets/{AgentSetupPage-D39M9CRK.js → AgentSetupPage-D7YVdPWO.js} +1 -1
  2. package/assets/assets/{AuditHistoryPanel-BS-iFyHX.js → AuditHistoryPanel-yrgfS5B_.js} +1 -1
  3. package/assets/assets/{BacklinksPage-BW2bEGF4.js → BacklinksPage-DJM6z03g.js} +1 -1
  4. package/assets/assets/{HistoryPage-Dh6o2iVd.js → HistoryPage-CNvAVJ1S.js} +1 -1
  5. package/assets/assets/{MeasurementPropertyPage-DL9cbtVz.js → MeasurementPropertyPage-BVVYhOxR.js} +1 -1
  6. package/assets/assets/{ProjectPage-DXh97uDN.js → ProjectPage-CPRD8kR9.js} +1 -1
  7. package/assets/assets/{RunsPage-BM4ETLsm.js → RunsPage-Ck33dcjz.js} +1 -1
  8. package/assets/assets/{SettingsPage-DpJTB2-Q.js → SettingsPage-CS_t4Dai.js} +1 -1
  9. package/assets/assets/{SiteHealthSection-CmlMQ17V.js → SiteHealthSection-BurKnHpn.js} +2 -2
  10. package/assets/assets/ToneBadge-Df8oiKsQ.js +60 -0
  11. package/assets/assets/{TrafficPage-ClH3Dxnm.js → TrafficPage-DAiY698E.js} +1 -1
  12. package/assets/assets/{TrafficSourceDetailPage-DE-NyNGz.js → TrafficSourceDetailPage-clJSX2rr.js} +1 -1
  13. package/assets/assets/{account-context-BwV6ox8O.js → account-context-DDEhuoP2.js} +1 -1
  14. package/assets/assets/{card-DhkoBNyY.js → card-DbR-lBY3.js} +1 -1
  15. package/assets/assets/{extract-error-message-dNDtiSBo.js → extract-error-message-7_Vm2DQF.js} +1 -1
  16. package/assets/assets/{format-helpers-Bt4tx-f3.js → format-helpers-vtahpXTQ.js} +1 -1
  17. package/assets/assets/{index-MbApCekj.js → index-BIhCeXvc.js} +4 -4
  18. package/assets/assets/{query-client-D-zMw63p.js → query-client-TlFXYJ9o.js} +1 -1
  19. package/assets/assets/{react-query-EdiRRB2q.js → react-query-C5Mv8xfD.js} +1 -1
  20. package/assets/assets/{react-sigma_core.esm.min-Bidr1Gxk.js → react-sigma_core.esm.min-DmggJ7YC.js} +1 -1
  21. package/assets/assets/{service-BUi8JgGI.js → service-CLFURPuM.js} +1 -1
  22. package/assets/index.html +7 -7
  23. package/dist/{ads-FFUUMS4J.js → ads-TX5622SS.js} +3 -3
  24. package/dist/{agent-LCD2VG7C.js → agent-AIOQL66U.js} +7 -7
  25. package/dist/{agent-ask-OBHTCYFR.js → agent-ask-A6GIJTBX.js} +3 -3
  26. package/dist/{agent-conversations-VMZ4NFIX.js → agent-conversations-LHWLKOPQ.js} +3 -3
  27. package/dist/{agent-memory-UPFJFNWC.js → agent-memory-F54BPEYN.js} +3 -3
  28. package/dist/{agent-providers-4GOWLBZK.js → agent-providers-L74KZOSG.js} +3 -3
  29. package/dist/{agent-transcript-RGXIVZUP.js → agent-transcript-IH65H755.js} +3 -3
  30. package/dist/{analytics-FBK4XV5P.js → analytics-YWCY2KSY.js} +3 -3
  31. package/dist/{apply-Y2DVE3YB.js → apply-BLUUYG2N.js} +3 -3
  32. package/dist/{backfill-7SGCPH6J.js → backfill-6WO5CH6Z.js} +9 -9
  33. package/dist/{backlinks-YWHFC7DZ.js → backlinks-NC7AUGTK.js} +3 -3
  34. package/dist/{bing-7BP3DWPK.js → bing-WQUEYHVC.js} +3 -3
  35. package/dist/{bootstrap-Z7QSKVPL.js → bootstrap-AXZV4BBC.js} +10 -10
  36. package/dist/{cdp-OL6RENO3.js → cdp-DUG5PMUD.js} +7 -7
  37. package/dist/{chunk-J523Y7X2.js → chunk-2Y6MSB4J.js} +1 -1
  38. package/dist/{chunk-YFITKHCV.js → chunk-3ANSG6YT.js} +345 -337
  39. package/dist/{chunk-GA2EHZTI.js → chunk-3WPTMLQI.js} +22 -6
  40. package/dist/{chunk-QDN3FL2A.js → chunk-3YIKSZHN.js} +2 -1
  41. package/dist/{chunk-H4HNXCDF.js → chunk-4B6DE7BB.js} +2 -2
  42. package/dist/{chunk-UWBJWKDQ.js → chunk-4JMTDLFV.js} +2 -2
  43. package/dist/{chunk-QKMGGM4B.js → chunk-5PA7SJ2M.js} +8 -271
  44. package/dist/{chunk-JO73L677.js → chunk-6ATKY252.js} +2 -2
  45. package/dist/{chunk-XR6ZVMYK.js → chunk-6W5AR4IW.js} +1 -1
  46. package/dist/{chunk-IZMT4WLZ.js → chunk-6YW24AUN.js} +2 -2
  47. package/dist/chunk-AZQNJX3T.js +269 -0
  48. package/dist/{chunk-TUVG7BIF.js → chunk-B6R223HQ.js} +8 -8
  49. package/dist/{chunk-6MYHGP46.js → chunk-DLVGMRM5.js} +1 -1
  50. package/dist/{chunk-P3UGNR2Y.js → chunk-ETVM3T7K.js} +5 -5
  51. package/dist/{chunk-IV6VZ63E.js → chunk-F5D4GPZQ.js} +18 -14
  52. package/dist/{chunk-WJ2JU32O.js → chunk-GNBATQS3.js} +23 -6
  53. package/dist/{chunk-TEDY3MHN.js → chunk-GUFKUPKZ.js} +3 -3
  54. package/dist/{chunk-BADJCT6U.js → chunk-GWDMWKM6.js} +1 -1
  55. package/dist/{chunk-PPM6Z7CM.js → chunk-HEL6DKDN.js} +1 -1
  56. package/dist/{chunk-DFCKSJQI.js → chunk-HGMTGC34.js} +4 -4
  57. package/dist/{chunk-GPTRCOKV.js → chunk-HIGBV77K.js} +259 -95
  58. package/dist/{chunk-NZZWJCKS.js → chunk-HJHFW455.js} +3 -3
  59. package/dist/{chunk-JE5QURTR.js → chunk-HKV4UWG5.js} +1 -1
  60. package/dist/{chunk-DRGCVTYH.js → chunk-JPM3VC6A.js} +1 -1
  61. package/dist/{chunk-TOX6HAQJ.js → chunk-JQNVNB63.js} +3 -3
  62. package/dist/{chunk-3AG3LPZX.js → chunk-MRSNLKSM.js} +1 -1
  63. package/dist/{chunk-O7WOCTBD.js → chunk-PAIYFNNY.js} +71 -3
  64. package/dist/{chunk-MJYO6UK2.js → chunk-PRSQ4R47.js} +2 -2
  65. package/dist/{chunk-JEBY6MS6.js → chunk-QS6RIP37.js} +1 -1
  66. package/dist/{chunk-4LTL5RNY.js → chunk-S77W2XSI.js} +4 -4
  67. package/dist/{chunk-YXAKL5HM.js → chunk-SF5JLMLG.js} +6791 -6777
  68. package/dist/{chunk-Q25JQANW.js → chunk-T5PWWDMJ.js} +17 -2
  69. package/dist/{chunk-ATT3ZCSS.js → chunk-WH2M2MQF.js} +38 -16
  70. package/dist/{chunk-7KOAP47B.js → chunk-WLWOGBLJ.js} +363 -248
  71. package/dist/{chunk-BZZDFIY2.js → chunk-XDQJOZKJ.js} +1 -1
  72. package/dist/{citations-RVSC67GE.js → citations-FUZ6DGP5.js} +3 -3
  73. package/dist/{cli-catalog-NEZE5QU5.js → cli-catalog-BXHG544D.js} +3 -3
  74. package/dist/{cli-commands-HGCYU4MQ.js → cli-commands-GMOR67F5.js} +7 -7
  75. package/dist/cli.js +13 -13
  76. package/dist/{competitor-BX3M3OYS.js → competitor-QDCH7PLT.js} +3 -3
  77. package/dist/{content-PKJMVMHJ.js → content-JX2CPIPR.js} +3 -3
  78. package/dist/{dashboard-SVHZBVM6.js → dashboard-OOWMLMKV.js} +6 -6
  79. package/dist/{demo-HYDPECCK.js → demo-GKSMSKOY.js} +1 -1
  80. package/dist/{demo-server-KEOO7WFO.js → demo-server-UQO4XKHN.js} +12 -11
  81. package/dist/{discover-JDP44ZHX.js → discover-YQSVQRUV.js} +3 -3
  82. package/dist/{discover-eval-6ORCVYYR.js → discover-eval-FN5RL6QI.js} +3 -3
  83. package/dist/{doctor-TVZRMBSS.js → doctor-YHJLAEJJ.js} +3 -3
  84. package/dist/{evidence-FNIAFBBG.js → evidence-KUPZMBIK.js} +3 -3
  85. package/dist/{export-cmd-HQNF2SSD.js → export-cmd-YSEPTUUF.js} +3 -3
  86. package/dist/{ga-PIO5OXMK.js → ga-WNS7Q7TF.js} +3 -3
  87. package/dist/{gbp-3R5FME43.js → gbp-5NYFK4TW.js} +3 -3
  88. package/dist/{google-BYZREX2O.js → google-T4CF4WCI.js} +4 -4
  89. package/dist/{google-marketing-SPQ2GW6X.js → google-marketing-IXPMUBXZ.js} +1 -1
  90. package/dist/{health-cmd-HH5RYMSV.js → health-cmd-2W37CF6J.js} +3 -3
  91. package/dist/{history-Q35NLLMJ.js → history-PA3O6ZHX.js} +3 -3
  92. package/dist/index.d.ts +248 -71
  93. package/dist/index.js +25 -24
  94. package/dist/{init-TV4ZKAAW.js → init-I3P7FINF.js} +12 -11
  95. package/dist/{insights-SH73B4PD.js → insights-O5PUVHTW.js} +3 -3
  96. package/dist/intelligence-service-EJQQNO65.js +16 -0
  97. package/dist/{journeys-SIV7HPW7.js → journeys-GU34O3HE.js} +3 -3
  98. package/dist/{keys-O656YWSW.js → keys-RXBFRNUS.js} +3 -3
  99. package/dist/{keyword-FZ2N4EW7.js → keyword-MASR36DK.js} +3 -3
  100. package/dist/{logs-2NPN7HBI.js → logs-OTA7MV4P.js} +3 -3
  101. package/dist/mcp-ZQYN2NET.js +19 -0
  102. package/dist/mcp.js +20 -14
  103. package/dist/{measurement-plan-JQKVSJRL.js → measurement-plan-ZGVO36TN.js} +5 -5
  104. package/dist/{notify-VTAYBHC6.js → notify-KS5CR3S2.js} +3 -3
  105. package/dist/{organic-evidence-HPXXEPOW.js → organic-evidence-CTH52AC5.js} +3 -3
  106. package/dist/{overview-FSBNDYZJ.js → overview-IRCIDE5H.js} +4 -4
  107. package/dist/{project-MAPPXURS.js → project-H5XPI5CT.js} +3 -3
  108. package/dist/{query-R6DLPIPJ.js → query-2R6EZG5T.js} +3 -3
  109. package/dist/{research-FXKOEUQB.js → research-OA3UQAV3.js} +3 -3
  110. package/dist/{results-export-X2PUM63S.js → results-export-XUXU3WMX.js} +3 -3
  111. package/dist/{run-6ENTG4IO.js → run-7IIOB6AS.js} +4 -4
  112. package/dist/{schedule-DMMVRT7P.js → schedule-DUTPZB5C.js} +3 -3
  113. package/dist/{search-FHI6APT7.js → search-TWUJD7KH.js} +3 -3
  114. package/dist/{serve-76BGQFPW.js → serve-BYHHULUU.js} +26 -25
  115. package/dist/{session-JBTIV7SS.js → session-M5XSTGPI.js} +13 -12
  116. package/dist/{settings-FMB4QED4.js → settings-GQXU5M3H.js} +3 -3
  117. package/dist/{skills-HBIMHSOI.js → skills-F6AXQHTO.js} +2 -2
  118. package/dist/{snapshot-RBA2EL7R.js → snapshot-QFKUO4QK.js} +3 -3
  119. package/dist/{src-BXXGJOQB.js → src-52USCS7O.js} +4 -2
  120. package/dist/{status-ATFDFAVG.js → status-42LPR7YH.js} +4 -4
  121. package/dist/{technical-aeo-JWQTGCTB.js → technical-aeo-SUILL4MY.js} +3 -3
  122. package/dist/{telemetry-6QFGJL2I.js → telemetry-RITB7YZH.js} +4 -4
  123. package/dist/{tools-4VRHKUBE.js → tools-DGWJOLNS.js} +11 -11
  124. package/dist/{traffic-5R7M4CK5.js → traffic-3YC3HUNT.js} +5 -5
  125. package/dist/{users-24TIUYJY.js → users-BST5DQ5R.js} +3 -3
  126. package/dist/{visibility-stats-YLQPPBJJ.js → visibility-stats-NCNP4AL2.js} +3 -3
  127. package/dist/{wordpress-7VDPHMUZ.js → wordpress-4HQDLQVE.js} +3 -3
  128. package/package.json +10 -6
  129. package/assets/assets/ToneBadge-CmvL5mFG.js +0 -60
  130. package/dist/intelligence-service-YNHDEY4M.js +0 -15
  131. package/dist/mcp-RHQY3DV6.js +0 -14
@@ -3,7 +3,7 @@ import {
3
3
  resolveCliAccess,
4
4
  resolveCliAccessForInvocation,
5
5
  windowOptions
6
- } from "./chunk-QDN3FL2A.js";
6
+ } from "./chunk-3YIKSZHN.js";
7
7
  import {
8
8
  emitJsonl
9
9
  } from "./chunk-Z7IUAJOF.js";
@@ -14,7 +14,7 @@ import {
14
14
  } from "./chunk-HGMYEDAQ.js";
15
15
  import {
16
16
  OperationAccesses
17
- } from "./chunk-YXAKL5HM.js";
17
+ } from "./chunk-SF5JLMLG.js";
18
18
 
19
19
  // src/cli-catalog.ts
20
20
  import { createRequire } from "module";
@@ -111,7 +111,7 @@ async function dispatchRegisteredCommand(args, fallbackFormat, specs) {
111
111
  const accessValue = accessFilterFromArgs(argsWithoutHelp);
112
112
  validateAccessFilter(accessValue);
113
113
  if (fallbackFormat !== "text") {
114
- const { printCliCatalog: printCliCatalog2 } = await import("./cli-catalog-NEZE5QU5.js");
114
+ const { printCliCatalog: printCliCatalog2 } = await import("./cli-catalog-BXHG544D.js");
115
115
  const group2 = argsWithoutHelp.find((arg) => !arg.startsWith("--"));
116
116
  printCliCatalog2(specs, fallbackFormat, group2, accessValue);
117
117
  return true;
@@ -20,7 +20,7 @@ import {
20
20
  resolveProviderModel,
21
21
  schedulableRunKindSchema,
22
22
  sentimentEvaluatorProviderSchema
23
- } from "./chunk-YXAKL5HM.js";
23
+ } from "./chunk-SF5JLMLG.js";
24
24
 
25
25
  // ../config/src/index.ts
26
26
  import { z as z4 } from "zod";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  hostMatchesDomain
3
- } from "./chunk-YXAKL5HM.js";
3
+ } from "./chunk-SF5JLMLG.js";
4
4
 
5
5
  // src/citation-utils.ts
6
6
  function pickProjectCitedDomain(citedDomains, projectDomains) {
@@ -2,18 +2,18 @@ import {
2
2
  configExists,
3
3
  loadConfigRaw,
4
4
  saveConfigPatch
5
- } from "./chunk-JE5QURTR.js";
5
+ } from "./chunk-HKV4UWG5.js";
6
6
  import {
7
7
  BUNDLED_SKILL_NAMES,
8
8
  installSkills
9
- } from "./chunk-PPM6Z7CM.js";
9
+ } from "./chunk-HEL6DKDN.js";
10
10
  import {
11
11
  PACKAGE_VERSION
12
12
  } from "./chunk-AOJU5LKX.js";
13
13
  import {
14
14
  SKILL_MANIFEST_FILENAME,
15
15
  SkillsClients
16
- } from "./chunk-YXAKL5HM.js";
16
+ } from "./chunk-SF5JLMLG.js";
17
17
 
18
18
  // src/skills-autosync.ts
19
19
  import fs from "fs";
@@ -23,7 +23,7 @@ import {
23
23
  measurementDraftUpsertGroupRequestSchema,
24
24
  measurementDraftUpsertMarketRequestSchema,
25
25
  measurementDraftUpsertTargetRequestSchema
26
- } from "./chunk-YXAKL5HM.js";
26
+ } from "./chunk-SF5JLMLG.js";
27
27
 
28
28
  // src/measurement-draft-actions.ts
29
29
  import { z } from "zod";
@@ -20,7 +20,7 @@ import {
20
20
  templateLinkRatio,
21
21
  templateLinkUbiquityAvailable,
22
22
  validationError
23
- } from "./chunk-YXAKL5HM.js";
23
+ } from "./chunk-SF5JLMLG.js";
24
24
  import {
25
25
  __export
26
26
  } from "./chunk-MLKGABMK.js";
@@ -125,6 +125,7 @@ __export(schema_exports, {
125
125
  notifications: () => notifications,
126
126
  oauthAuthorizationCodes: () => oauthAuthorizationCodes,
127
127
  oauthClients: () => oauthClients,
128
+ oauthGrants: () => oauthGrants,
128
129
  oauthTokens: () => oauthTokens,
129
130
  projects: () => projects,
130
131
  providerBatchRequests: () => providerBatchRequests,
@@ -858,12 +859,15 @@ var apiKeys = sqliteTable2("api_keys", {
858
859
  projectId: text2("project_id").references(() => projects.id, { onDelete: "cascade" }),
859
860
  /** Internal delegated session identity, never accepted by the key-create API. */
860
861
  delegatedUserId: text2("delegated_user_id").references(() => users.id, { onDelete: "cascade" }),
862
+ /** Authorization that minted this internal MCP credential. */
863
+ delegatedOAuthGrantId: text2("delegated_oauth_grant_id").references(() => oauthGrants.id, { onDelete: "cascade" }),
861
864
  createdAt: text2("created_at").notNull(),
862
865
  lastUsedAt: text2("last_used_at"),
863
866
  revokedAt: text2("revoked_at")
864
867
  }, (table) => [
865
868
  index2("idx_api_keys_prefix").on(table.keyPrefix),
866
- index2("idx_api_keys_project").on(table.projectId)
869
+ index2("idx_api_keys_project").on(table.projectId),
870
+ index2("idx_api_keys_oauth_grant").on(table.delegatedOAuthGrantId)
867
871
  ]);
868
872
  var users = sqliteTable2("users", {
869
873
  id: text2("id").primaryKey(),
@@ -901,7 +905,7 @@ var oauthClients = sqliteTable2("oauth_clients", {
901
905
  id: text2("id").primaryKey(),
902
906
  name: text2("name").notNull(),
903
907
  /**
904
- * scrypt digest, or NULL for a public client that authenticates by PKCE
908
+ * SHA-256 digest, or NULL for a public client that authenticates by PKCE
905
909
  * alone. Never the secret: a client secret is a bearer credential, and a
906
910
  * copied database file must not be a working client.
907
911
  */
@@ -920,6 +924,18 @@ var oauthClients = sqliteTable2("oauth_clients", {
920
924
  createdAt: text2("created_at").notNull(),
921
925
  revokedAt: text2("revoked_at")
922
926
  });
927
+ var oauthGrants = sqliteTable2("oauth_grants", {
928
+ id: text2("id").primaryKey(),
929
+ clientId: text2("client_id").notNull().references(() => oauthClients.id, { onDelete: "cascade" }),
930
+ userId: text2("user_id").notNull().references(() => users.id, { onDelete: "cascade" }),
931
+ resource: text2("resource"),
932
+ scope: text2("scope"),
933
+ createdAt: text2("created_at").notNull(),
934
+ revokedAt: text2("revoked_at")
935
+ }, (table) => [
936
+ index2("idx_oauth_grants_client").on(table.clientId),
937
+ index2("idx_oauth_grants_user").on(table.userId)
938
+ ]);
923
939
  var oauthAuthorizationCodes = sqliteTable2("oauth_authorization_codes", {
924
940
  /** SHA-256 of the code. The code itself is 256 bits of randomness. */
925
941
  codeHash: text2("code_hash").primaryKey(),
@@ -943,6 +959,8 @@ var oauthAuthorizationCodes = sqliteTable2("oauth_authorization_codes", {
943
959
  var oauthTokens = sqliteTable2("oauth_tokens", {
944
960
  tokenHash: text2("token_hash").primaryKey(),
945
961
  kind: text2("kind").$type().notNull(),
962
+ /** Nullable only for an older binary writing after this migration. */
963
+ grantId: text2("grant_id").references(() => oauthGrants.id, { onDelete: "cascade" }),
946
964
  clientId: text2("client_id").notNull().references(() => oauthClients.id, { onDelete: "cascade" }),
947
965
  userId: text2("user_id").notNull().references(() => users.id, { onDelete: "cascade" }),
948
966
  /** Audience. Enforced on every resource request. */
@@ -952,6 +970,7 @@ var oauthTokens = sqliteTable2("oauth_tokens", {
952
970
  revokedAt: text2("revoked_at"),
953
971
  createdAt: text2("created_at").notNull()
954
972
  }, (table) => [
973
+ index2("idx_oauth_tokens_grant").on(table.grantId),
955
974
  index2("idx_oauth_tokens_user").on(table.userId),
956
975
  index2("idx_oauth_tokens_expires").on(table.expiresAt)
957
976
  ]);
@@ -8284,6 +8303,54 @@ var MIGRATION_VERSIONS = [
8284
8303
  statements: [
8285
8304
  `ALTER TABLE site_crawl_attempts ADD COLUMN url_versions_skipped INTEGER NOT NULL DEFAULT 0`
8286
8305
  ]
8306
+ },
8307
+ {
8308
+ version: 199,
8309
+ name: "oauth-authorization-grants",
8310
+ statements: [
8311
+ `CREATE TABLE IF NOT EXISTS oauth_grants (
8312
+ id TEXT PRIMARY KEY,
8313
+ client_id TEXT NOT NULL REFERENCES oauth_clients(id) ON DELETE CASCADE,
8314
+ user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
8315
+ resource TEXT,
8316
+ scope TEXT,
8317
+ created_at TEXT NOT NULL,
8318
+ revoked_at TEXT
8319
+ )`,
8320
+ `CREATE INDEX IF NOT EXISTS idx_oauth_grants_client ON oauth_grants(client_id)`,
8321
+ `CREATE INDEX IF NOT EXISTS idx_oauth_grants_user ON oauth_grants(user_id)`,
8322
+ `ALTER TABLE oauth_tokens ADD COLUMN grant_id TEXT REFERENCES oauth_grants(id) ON DELETE CASCADE`,
8323
+ `ALTER TABLE api_keys ADD COLUMN delegated_oauth_grant_id TEXT REFERENCES oauth_grants(id) ON DELETE CASCADE`,
8324
+ `CREATE INDEX IF NOT EXISTS idx_oauth_tokens_grant ON oauth_tokens(grant_id)`,
8325
+ `CREATE INDEX IF NOT EXISTS idx_api_keys_oauth_grant ON api_keys(delegated_oauth_grant_id)`,
8326
+ // Credentials whose account or client was removed with foreign keys off
8327
+ // are already unusable. Drop them before enforcing the new grant FKs.
8328
+ `DELETE FROM oauth_tokens WHERE NOT EXISTS (SELECT 1 FROM oauth_clients WHERE id = oauth_tokens.client_id)
8329
+ OR NOT EXISTS (SELECT 1 FROM users WHERE id = oauth_tokens.user_id)`,
8330
+ // Historical rotations carry no lineage. Preserve access while grouping
8331
+ // only the same client, person, audience and consented scope for revocation.
8332
+ `INSERT OR IGNORE INTO oauth_grants (id, client_id, user_id, resource, scope, created_at)
8333
+ SELECT 'legacy:' || MIN(token_hash), client_id, user_id, resource, scope, MIN(created_at)
8334
+ FROM oauth_tokens WHERE grant_id IS NULL
8335
+ AND EXISTS (SELECT 1 FROM oauth_clients WHERE id = oauth_tokens.client_id)
8336
+ AND EXISTS (SELECT 1 FROM users WHERE id = oauth_tokens.user_id)
8337
+ GROUP BY client_id, user_id, resource, scope`,
8338
+ `UPDATE oauth_tokens SET grant_id = (
8339
+ SELECT id FROM oauth_grants g
8340
+ WHERE g.id LIKE 'legacy:%' AND g.client_id = oauth_tokens.client_id
8341
+ AND g.user_id = oauth_tokens.user_id AND g.resource IS oauth_tokens.resource AND g.scope IS oauth_tokens.scope
8342
+ ) WHERE grant_id IS NULL`,
8343
+ // Old MCP keys lack a grant link and cannot be assigned safely. Match
8344
+ // the bound constructor and the older reserved namespace without user
8345
+ // linkage. A manually named key in that namespace also requires reissue.
8346
+ `DELETE FROM dashboard_sessions WHERE api_key_id IN (
8347
+ SELECT id FROM api_keys WHERE (delegated_user_id IS NOT NULL AND name = 'mcp-session:' || delegated_user_id)
8348
+ OR (delegated_user_id IS NULL AND name GLOB 'mcp-session:*')
8349
+ )`,
8350
+ `UPDATE api_keys SET revoked_at = COALESCE(revoked_at, strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
8351
+ WHERE (delegated_user_id IS NOT NULL AND name = 'mcp-session:' || delegated_user_id)
8352
+ OR (delegated_user_id IS NULL AND name GLOB 'mcp-session:*')`
8353
+ ]
8287
8354
  }
8288
8355
  ];
8289
8356
  var AERO_LEDGER_REBUILDS = [
@@ -9727,6 +9794,7 @@ export {
9727
9794
  userSessions,
9728
9795
  dashboardSessions,
9729
9796
  oauthClients,
9797
+ oauthGrants,
9730
9798
  oauthAuthorizationCodes,
9731
9799
  oauthTokens,
9732
9800
  schedules,
@@ -5,7 +5,7 @@ import {
5
5
  loadConfig,
6
6
  loadConfigRaw,
7
7
  saveConfigPatch
8
- } from "./chunk-JE5QURTR.js";
8
+ } from "./chunk-HKV4UWG5.js";
9
9
  import {
10
10
  CANONRY_NPM_PACKAGE_URL,
11
11
  compareSemver,
@@ -18,7 +18,7 @@ import {
18
18
  updateCheckEnvOptOut,
19
19
  upgradeCaveatFor,
20
20
  upgradeCommandFor
21
- } from "./chunk-YXAKL5HM.js";
21
+ } from "./chunk-SF5JLMLG.js";
22
22
 
23
23
  // src/runtime-context.ts
24
24
  function cliRuntimeContext(env = process.env, stdio = process) {
@@ -8,7 +8,7 @@ import {
8
8
  classifyJourneyEntry,
9
9
  hostMatchesDomain,
10
10
  hostOf
11
- } from "./chunk-YXAKL5HM.js";
11
+ } from "./chunk-SF5JLMLG.js";
12
12
 
13
13
  // ../integration-traffic/src/ip-ranges/amazonbot.json
14
14
  var amazonbot_default = {
@@ -2,13 +2,13 @@ import {
2
2
  bucketCliCommandDuration,
3
3
  isTelemetryEnabled,
4
4
  trackEvent
5
- } from "./chunk-MJYO6UK2.js";
5
+ } from "./chunk-PRSQ4R47.js";
6
6
  import {
7
7
  getConfigDir
8
- } from "./chunk-JE5QURTR.js";
8
+ } from "./chunk-HKV4UWG5.js";
9
9
  import {
10
10
  currentOutcomeAttribution
11
- } from "./chunk-BADJCT6U.js";
11
+ } from "./chunk-GWDMWKM6.js";
12
12
  import {
13
13
  AGENT_NONE,
14
14
  OutcomeSurfaces,
@@ -19,7 +19,7 @@ import {
19
19
  integrationConnectionPropertiesSchema,
20
20
  normalizeAgentSlug,
21
21
  usageSurfaceSchema
22
- } from "./chunk-YXAKL5HM.js";
22
+ } from "./chunk-SF5JLMLG.js";
23
23
 
24
24
  // src/outcome-telemetry.ts
25
25
  import fs from "fs";