@canonry/canonry 7.99.0 → 7.100.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 (182) hide show
  1. package/README.md +18 -16
  2. package/assets/agent-workspace/AGENTS.md +13 -6
  3. package/assets/agent-workspace/skills/aero/SKILL.md +45 -26
  4. package/assets/agent-workspace/skills/aero/references/agent-operations.md +47 -12
  5. package/assets/agent-workspace/skills/aero/references/memory-patterns.md +1 -1
  6. package/assets/agent-workspace/skills/aero/references/orchestration.md +9 -9
  7. package/assets/agent-workspace/skills/aero/references/reporting.md +8 -4
  8. package/assets/agent-workspace/skills/aero/references/seo-analysis.md +2 -2
  9. package/assets/agent-workspace/skills/aero/references/site-health.md +23 -22
  10. package/assets/agent-workspace/skills/aero/soul.md +2 -2
  11. package/assets/agent-workspace/skills/canonry/SKILL.md +37 -7
  12. package/assets/agent-workspace/skills/canonry/references/aeo-analysis.md +14 -11
  13. package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +122 -53
  14. package/assets/assets/AccessControls-DzO5Y8v9.js +2 -0
  15. package/assets/assets/AgentSetupPage-DWWovaCw.js +36 -0
  16. package/assets/assets/AuditHistoryPanel-BG-n1i8c.js +1 -0
  17. package/assets/assets/BacklinksPage-D6wdOMXt.js +1 -0
  18. package/assets/assets/ChartPrimitives-CtKdkn64.js +3 -0
  19. package/assets/assets/Hint-3TTi0MgX.js +1 -0
  20. package/assets/assets/{HistoryPage-DNE76LNh.js → HistoryPage-B_ReWHbL.js} +1 -1
  21. package/assets/assets/InfoTooltip-D29JcNMW.js +1 -0
  22. package/assets/assets/MeasurementPropertyPage-zdyLL-kl.js +4 -0
  23. package/assets/assets/ProjectPage-KZNKXR4w.js +15 -0
  24. package/assets/assets/RunsPage-DxN0xXQh.js +1 -0
  25. package/assets/assets/ServerTrafficSection-CvISj5pf.js +40 -0
  26. package/assets/assets/SettingsPage-CpRpBlMV.js +1 -0
  27. package/assets/assets/ToneBadge-DcwPruHr.js +60 -0
  28. package/assets/assets/TrafficPage-zk6zMZyz.js +1 -0
  29. package/assets/assets/TrafficSourceDetailPage-DJtsI06Z.js +1 -0
  30. package/assets/assets/{account-context-j3asaevn.js → account-context-CoJVqEXZ.js} +1 -1
  31. package/assets/assets/{agent-trust-copy--U_DFYQE.js → agent-trust-copy-BIXDMtBm.js} +1 -1
  32. package/assets/assets/{card-CQAQ-c3g.js → card-Dwmc7Srx.js} +1 -1
  33. package/assets/assets/index-fh1T5JQY.css +1 -0
  34. package/assets/assets/index-mqc2mWUR.js +42 -0
  35. package/assets/assets/query-client-Tg1fZu4i.js +1 -0
  36. package/assets/assets/react-query-BqcEEfEO.js +1 -0
  37. package/assets/assets/{react-sigma_core.esm.min-BAq_-iP1.js → react-sigma_core.esm.min-D1q0DR_j.js} +3 -3
  38. package/assets/assets/{server-traffic-jKXLZyeC.js → server-traffic-Djnh_9f0.js} +1 -1
  39. package/assets/assets/service-BQjBdN4O.js +1 -0
  40. package/assets/assets/use-tooltip-position-BOzm-6Wy.js +1 -0
  41. package/assets/assets/vendor-lucide-iE5MEh2-.js +1 -0
  42. package/assets/assets/{vendor-markdown-BDQ1GKGP.js → vendor-markdown-BBGbNklj.js} +1 -1
  43. package/assets/assets/{vendor-radix-BGYlvS2l.js → vendor-radix-DKCt5Z_h.js} +1 -1
  44. package/assets/assets/{vendor-recharts-DhEHcK3G.js → vendor-recharts-D3MLFU3q.js} +1 -1
  45. package/assets/assets/{vendor-tanstack-BNuZ37rE.js → vendor-tanstack-B90HW50P.js} +2 -2
  46. package/assets/index.html +16 -15
  47. package/dist/{ads-EYDUTG4U.js → ads-FVPZ6R6Z.js} +3 -3
  48. package/dist/{agent-KTK2IDB3.js → agent-2LPU2E5I.js} +7 -7
  49. package/dist/{agent-ask-KPZOH6RY.js → agent-ask-5ODREK6D.js} +3 -3
  50. package/dist/{agent-conversations-BCWA4JJL.js → agent-conversations-SNLOOJEM.js} +3 -3
  51. package/dist/{agent-journeys-UBVLQ7JV.js → agent-journeys-XDXVL6PK.js} +3 -3
  52. package/dist/{agent-memory-24SYEGEX.js → agent-memory-NKAI2S3U.js} +3 -3
  53. package/dist/{agent-providers-E7EWFE5P.js → agent-providers-R5L7A72X.js} +3 -3
  54. package/dist/{agent-transcript-QGJ45NW5.js → agent-transcript-C5WAGYVC.js} +3 -3
  55. package/dist/{analytics-GHVG5CCT.js → analytics-EJVOLIQL.js} +33 -13
  56. package/dist/{apply-7YLB2DPH.js → apply-I6JOM247.js} +3 -3
  57. package/dist/{backfill-WNQ6O5WP.js → backfill-UVUR36IB.js} +10 -10
  58. package/dist/{backlinks-ZBZR4D27.js → backlinks-3VMVACWN.js} +3 -3
  59. package/dist/{bing-4VBSKPSX.js → bing-R5RL3PW2.js} +3 -3
  60. package/dist/{bootstrap-7ESCLP2G.js → bootstrap-GMMSDTNO.js} +12 -12
  61. package/dist/{cdp-WBL6FZTL.js → cdp-FJKUXHEY.js} +7 -7
  62. package/dist/{chunk-L53ZSQN5.js → chunk-2DV7F6XA.js} +91 -2
  63. package/dist/{chunk-MTW37GXF.js → chunk-2FWYWGIR.js} +2 -2
  64. package/dist/{chunk-DMPSA7ZS.js → chunk-56VVRWJM.js} +14 -5
  65. package/dist/{chunk-YACKJGY4.js → chunk-7BEGCVVB.js} +1 -1
  66. package/dist/{chunk-YMHN4UIT.js → chunk-7BH53MOB.js} +27 -2
  67. package/dist/{chunk-XPIMVXAI.js → chunk-7J2RIIYU.js} +1366 -1033
  68. package/dist/{chunk-UY6SKAKW.js → chunk-7SNMIXEQ.js} +2 -2
  69. package/dist/{chunk-C55P75G4.js → chunk-AMGM55CP.js} +2 -2
  70. package/dist/{chunk-ZN2TEBBX.js → chunk-AYKTVQF7.js} +13 -5
  71. package/dist/{chunk-74V5EPZH.js → chunk-BKDRT4VS.js} +7 -7
  72. package/dist/{chunk-O6RXNSNW.js → chunk-COHSL6KW.js} +1 -1
  73. package/dist/{chunk-3WDQ5GPO.js → chunk-DGDLLRS4.js} +1 -1
  74. package/dist/{chunk-VADVPARO.js → chunk-DHIB7EIA.js} +4 -4
  75. package/dist/{chunk-3MFYM2IS.js → chunk-EE3QTCLS.js} +18 -6
  76. package/dist/{chunk-DLOWRO5R.js → chunk-F46TBLXK.js} +204 -94
  77. package/dist/{chunk-P764TJKQ.js → chunk-FBO25TA3.js} +1 -1
  78. package/dist/{chunk-SY3CWJR4.js → chunk-FZ3MUTU3.js} +2 -2
  79. package/dist/{chunk-WA6APXI6.js → chunk-G6QN4VFS.js} +16 -10
  80. package/dist/{chunk-YBWATBX4.js → chunk-HBHLYWKE.js} +9 -6
  81. package/dist/{chunk-5ZOM5BJS.js → chunk-HL2LGRTI.js} +8 -6
  82. package/dist/chunk-J6536OL6.js +31 -0
  83. package/dist/{chunk-3MKJ4LP6.js → chunk-KVRX7YIH.js} +20 -10
  84. package/dist/{chunk-3VPBRGPN.js → chunk-LJO2BKWU.js} +1 -1
  85. package/dist/{chunk-YEUULP44.js → chunk-LNVFERI4.js} +1 -1
  86. package/dist/{chunk-WXAF7AMC.js → chunk-NQYJHKML.js} +39 -7
  87. package/dist/{chunk-UPHHKO3L.js → chunk-O5UFAXUI.js} +646 -588
  88. package/dist/{chunk-XQP3XHLJ.js → chunk-O6APBEJE.js} +2 -2
  89. package/dist/{chunk-47X24IJG.js → chunk-O7S7OHLE.js} +9393 -8394
  90. package/dist/{chunk-2RW5D55K.js → chunk-QS5DWJDI.js} +2 -2
  91. package/dist/{chunk-TVBOK4P2.js → chunk-RBG2QXQM.js} +4 -4
  92. package/dist/{chunk-LM7HTNUO.js → chunk-SWZXHHAG.js} +16 -8
  93. package/dist/{chunk-AY7SDX6G.js → chunk-T7UDY7W3.js} +26 -11
  94. package/dist/{chunk-AJD252SX.js → chunk-UGO2FO6V.js} +119 -55
  95. package/dist/{chunk-PT5HNVCM.js → chunk-VHULVUDL.js} +1 -1
  96. package/dist/{chunk-ZGBLNKFN.js → chunk-YGAQQSCL.js} +56303 -54933
  97. package/dist/{chunk-RRXLJPBN.js → chunk-YIIRS7V7.js} +98 -65
  98. package/dist/{chunk-VOVT2H25.js → chunk-YU2WX7RD.js} +3 -3
  99. package/dist/{citations-N5MGNKJN.js → citations-LOEQRDUB.js} +21 -10
  100. package/dist/{cli-catalog-FFU7PHW7.js → cli-catalog-5RXNUFBS.js} +3 -3
  101. package/dist/{cli-commands-AMIDEUO2.js → cli-commands-HE2BQY3Y.js} +7 -7
  102. package/dist/cli.js +22 -17
  103. package/dist/{competitor-GRA2GMZR.js → competitor-PIX2BHJW.js} +3 -3
  104. package/dist/{content-YVAPTIV4.js → content-PJGW4WZF.js} +3 -3
  105. package/dist/{dashboard-33ACBR5A.js → dashboard-7OKBD4MG.js} +6 -6
  106. package/dist/{demo-AGXWBMR6.js → demo-SCOFAWFM.js} +1 -1
  107. package/dist/{demo-server-W4YAC7GT.js → demo-server-SJPI6RSL.js} +38 -36
  108. package/dist/{discover-BH33TO4Z.js → discover-I3WL2QUN.js} +10 -8
  109. package/dist/{discover-eval-3CEA6DEE.js → discover-eval-YRECOIP5.js} +3 -3
  110. package/dist/{doctor-ZAYTD5PC.js → doctor-F4J6LILX.js} +3 -3
  111. package/dist/{evidence-247GL7UK.js → evidence-MYQTCY4V.js} +25 -10
  112. package/dist/{export-cmd-HLKWFI5Q.js → export-cmd-3SUFOJM6.js} +3 -3
  113. package/dist/{ga-BMING57Z.js → ga-VA6FYK4L.js} +3 -3
  114. package/dist/{gbp-MIB5CXSD.js → gbp-DI6ZVFHL.js} +3 -3
  115. package/dist/{google-5JP6RYAW.js → google-UVKWJCD2.js} +4 -4
  116. package/dist/{google-marketing-25OBMPS6.js → google-marketing-S63HN733.js} +1 -1
  117. package/dist/{health-cmd-D5XSEL7H.js → health-cmd-DOZXGI46.js} +16 -9
  118. package/dist/{history-6MDRFPQ3.js → history-UTJTUDYK.js} +3 -3
  119. package/dist/index.d.ts +211 -19
  120. package/dist/index.js +26 -26
  121. package/dist/{init-RDR75N2Y.js → init-IVJSS33J.js} +19 -19
  122. package/dist/{insights-QZVMBGVM.js → insights-UHCVCZ76.js} +3 -3
  123. package/dist/intelligence-service-3EENJ5DS.js +16 -0
  124. package/dist/{journeys-TABTZDFZ.js → journeys-XIT7WDM2.js} +3 -3
  125. package/dist/{keys-SL5YF7NQ.js → keys-MQKW4JUI.js} +3 -3
  126. package/dist/{keyword-OCDEXRSW.js → keyword-EASMKYZ3.js} +3 -3
  127. package/dist/{logs-CSC7O364.js → logs-ZHZ6XM55.js} +3 -3
  128. package/dist/{mcp-P725OHAJ.js → mcp-ECVT2YGU.js} +4 -4
  129. package/dist/mcp.js +10 -10
  130. package/dist/{measurement-plan-Z42GBJBO.js → measurement-plan-7FQKUOMR.js} +5 -5
  131. package/dist/{notify-E5JBES4I.js → notify-TC7ARC6W.js} +3 -3
  132. package/dist/{organic-evidence-CUA3T64O.js → organic-evidence-M34MWJXE.js} +7 -4
  133. package/dist/overview-P6BRMXJN.js +314 -0
  134. package/dist/{project-2ULM64TV.js → project-WZ2YXFPJ.js} +4 -4
  135. package/dist/project-setup-WV6SPGIV.js +176 -0
  136. package/dist/{query-Y47IEFKJ.js → query-WAFJKDHG.js} +3 -3
  137. package/dist/{research-DPFQZ3TE.js → research-B5ZPQX7R.js} +3 -3
  138. package/dist/{results-export-KBHOBQAH.js → results-export-NIZV6R3K.js} +3 -3
  139. package/dist/{run-4CYHVIIU.js → run-ICLPZ7QT.js} +7 -4
  140. package/dist/{schedule-GY4P3RON.js → schedule-4C44LQ7R.js} +22 -3
  141. package/dist/{search-AGVNZMJQ.js → search-UJM7KII3.js} +11 -4
  142. package/dist/{serve-5LFKIXNL.js → serve-A6UIO6WP.js} +30 -29
  143. package/dist/{session-YAYEDM3P.js → session-RTE22GQT.js} +14 -14
  144. package/dist/settings-BOF5Z7ML.js +211 -0
  145. package/dist/{sitemaps-APTY7U6H.js → sitemaps-BM7S76H2.js} +4 -4
  146. package/dist/{skills-4BUONEIZ.js → skills-X5SR4HRO.js} +2 -2
  147. package/dist/{snapshot-BXCWSF5P.js → snapshot-KLKE37VY.js} +4 -4
  148. package/dist/{src-R7XZUX3D.js → src-EKLG5A6O.js} +4 -2
  149. package/dist/{status-SB6HPBYJ.js → status-OYG57DWU.js} +6 -5
  150. package/dist/{technical-aeo-G7UEMWZD.js → technical-aeo-KWVWOOTI.js} +23 -23
  151. package/dist/{telemetry-H4S4Y7YV.js → telemetry-KGE6FF3Y.js} +4 -4
  152. package/dist/{tools-46XX6I4R.js → tools-4R33AZQ3.js} +11 -11
  153. package/dist/{traffic-I6WRJN3W.js → traffic-SVMOKCSS.js} +7 -11
  154. package/dist/{trends-AQK3GLWF.js → trends-RGAKGX3L.js} +4 -4
  155. package/dist/{users-SNTVY6OB.js → users-47WKA2TO.js} +3 -3
  156. package/dist/{visibility-stats-44QAD2XS.js → visibility-stats-DTGQJPNV.js} +9 -5
  157. package/dist/{wordpress-N7LTOW46.js → wordpress-2CNUX4UE.js} +3 -3
  158. package/package.json +1 -1
  159. package/assets/assets/AgentSetupPage-yOqSVJ-e.js +0 -18
  160. package/assets/assets/AuditHistoryPanel-CiTzFgbw.js +0 -1
  161. package/assets/assets/BacklinksPage-DmRdQsFQ.js +0 -1
  162. package/assets/assets/ChartPrimitives-CvK6CQrj.js +0 -1
  163. package/assets/assets/Hint-c4a4W87X.js +0 -1
  164. package/assets/assets/InfoTooltip-Drnst4ML.js +0 -1
  165. package/assets/assets/MeasurementPropertyPage-Cx64Fnmz.js +0 -4
  166. package/assets/assets/ProjectPage-DNfgC82V.js +0 -11
  167. package/assets/assets/RunsPage-BmPKBKKr.js +0 -1
  168. package/assets/assets/SettingsPage-Dl0TNeVK.js +0 -1
  169. package/assets/assets/SiteHealthSection-DxQPaR--.js +0 -2
  170. package/assets/assets/ToneBadge-BhjTBHi-.js +0 -60
  171. package/assets/assets/TrafficPage-CJp0pS01.js +0 -40
  172. package/assets/assets/TrafficSourceDetailPage-DKE8tSw5.js +0 -1
  173. package/assets/assets/format-helpers-BPugHeIX.js +0 -3
  174. package/assets/assets/index-BAxHW-1G.css +0 -1
  175. package/assets/assets/index-xlDLvgRC.js +0 -60
  176. package/assets/assets/query-client-CwZpfiiD.js +0 -1
  177. package/assets/assets/react-query-CBpNFR4t.js +0 -1
  178. package/assets/assets/service-DFumlmXt.js +0 -1
  179. package/assets/assets/vendor-lucide-DuOM7wVi.js +0 -1
  180. package/dist/intelligence-service-KQE7RO5I.js +0 -16
  181. package/dist/overview-UKQ52I72.js +0 -213
  182. package/dist/settings-HUKMWRHY.js +0 -119
@@ -20,7 +20,7 @@ import {
20
20
  templateLinkRatio,
21
21
  templateLinkUbiquityAvailable,
22
22
  validationError
23
- } from "./chunk-47X24IJG.js";
23
+ } from "./chunk-O7S7OHLE.js";
24
24
  import {
25
25
  __export
26
26
  } from "./chunk-MLKGABMK.js";
@@ -146,6 +146,7 @@ __export(schema_exports, {
146
146
  projects: () => projects,
147
147
  providerBatchRequests: () => providerBatchRequests,
148
148
  providerBatches: () => providerBatches,
149
+ providerConnectionTests: () => providerConnectionTests,
149
150
  queries: () => queries,
150
151
  queryBasketVersions: () => queryBasketVersions,
151
152
  querySnapshots: () => querySnapshots,
@@ -574,6 +575,20 @@ var runs = sqliteTable2("runs", {
574
575
  * (`providerAccountAdmission`). Null when it skips none.
575
576
  */
576
577
  skippedProviders: text2("skipped_providers", { mode: "json" }).$type(),
578
+ /**
579
+ * Each engine's failures so far, written by a running sweep as they happen
580
+ * so a reader can see them before the run ends. Only meaningful while the
581
+ * run is active: once it finishes, `error` carries the failures. Null when
582
+ * no engine has failed.
583
+ */
584
+ providerFailures: text2("provider_failures", { mode: "json" }).$type(),
585
+ /**
586
+ * Answers an answer-visibility sweep set out to collect, written when it
587
+ * starts from its actual work list: every query times every engine it calls,
588
+ * or a published plan's slots for those engines. Null until then, on runs
589
+ * from before it was recorded, and on other run kinds.
590
+ */
591
+ plannedAnswers: integer2("planned_answers"),
577
592
  /**
578
593
  * What a sync run did and why it stopped (counts and stop reason), written
579
594
  * when the run finishes. Only syncs that report one set it (a Cloudflare
@@ -641,7 +656,10 @@ var querySnapshots = sqliteTable2("query_snapshots", {
641
656
  // rows and providers that disclose no model identity (CDP scrapes the web
642
657
  // UI) legitimately have none.
643
658
  servedModel: text2("served_model"),
644
- citationState: text2("citation_state").notNull(),
659
+ // `cited`, `not-cited`, or `not-measured` (the engine returned no sources).
660
+ // Rows written before `not-measured` existed hold `not-cited` for those
661
+ // answers; read every row through `readCitationState` (contracts).
662
+ citationState: text2("citation_state").$type().notNull(),
645
663
  answerMentioned: integer2("answer_mentioned", { mode: "boolean" }),
646
664
  // Sentiment's identity verdict on a Simple answer, kept by
647
665
  // `refreshSnapshotMentionIdentity` (api-routes) when a verdict is stored:
@@ -864,6 +882,15 @@ var dataRepairCompletions = sqliteTable2("data_repair_completions", {
864
882
  version: integer2("version").notNull(),
865
883
  completedAt: text2("completed_at").notNull()
866
884
  });
885
+ var providerConnectionTests = sqliteTable2("provider_connection_tests", {
886
+ provider: text2("provider").primaryKey().notNull(),
887
+ fingerprint: text2("fingerprint").notNull(),
888
+ status: text2("status").notNull(),
889
+ message: text2("message").notNull(),
890
+ model: text2("model"),
891
+ checkedAt: text2("checked_at").notNull(),
892
+ durationMs: integer2("duration_ms").notNull()
893
+ });
867
894
  var apiKeys = sqliteTable2("api_keys", {
868
895
  id: text2("id").primaryKey(),
869
896
  name: text2("name").notNull(),
@@ -2356,6 +2383,9 @@ var healthSnapshots = sqliteTable2("health_snapshots", {
2356
2383
  id: text2("id").primaryKey(),
2357
2384
  projectId: text2("project_id").notNull().references(() => projects.id, { onDelete: "cascade" }),
2358
2385
  runId: text2("run_id").references(() => runs.id, { onDelete: "cascade" }),
2386
+ // Over the pairs whose sources were checked. NOT NULL, so a run none of
2387
+ // whose pairs carried sources stores 0; readers return null for it, since
2388
+ // providerBreakdown's `citationNotMeasured` then covers every pair.
2359
2389
  overallCitedRate: text2("overall_cited_rate").notNull(),
2360
2390
  // Answer-text mention rate, independent of citation. Nullable because the
2361
2391
  // column is added by migration v80 via ALTER TABLE ADD COLUMN — rows
@@ -2367,6 +2397,9 @@ var healthSnapshots = sqliteTable2("health_snapshots", {
2367
2397
  // Count of pairs MENTIONED in the answer text. Nullable for the same
2368
2398
  // legacy-row reason as overall_mention_rate; coalesced NULL→0 on read.
2369
2399
  mentionedPairs: integer2("mentioned_pairs"),
2400
+ // `citedRate` is over the provider's pairs whose sources were checked, null
2401
+ // when none were; `citationNotMeasured` counts the rest. Rows written before
2402
+ // it existed have no key (read 0) and a rate computed over every pair.
2370
2403
  providerBreakdown: text2("provider_breakdown", { mode: "json" }).$type().notNull().default({}),
2371
2404
  createdAt: text2("created_at").notNull()
2372
2405
  }, (table) => [
@@ -9101,6 +9134,61 @@ var MIGRATION_VERSIONS = [
9101
9134
  notified_at TEXT
9102
9135
  )`
9103
9136
  ]
9137
+ },
9138
+ {
9139
+ version: 215,
9140
+ name: "provider-connection-tests",
9141
+ // One row per connection: the latest test result and a keyed hash of the
9142
+ // registration it checked. No status CHECK, so a status a later release
9143
+ // adds needs no table rebuild; readers validate rows against the contract.
9144
+ statements: [
9145
+ `CREATE TABLE IF NOT EXISTS provider_connection_tests (
9146
+ provider TEXT PRIMARY KEY NOT NULL,
9147
+ fingerprint TEXT NOT NULL,
9148
+ status TEXT NOT NULL,
9149
+ message TEXT NOT NULL,
9150
+ model TEXT,
9151
+ checked_at TEXT NOT NULL,
9152
+ duration_ms INTEGER NOT NULL
9153
+ )`
9154
+ ]
9155
+ },
9156
+ {
9157
+ version: 216,
9158
+ name: "run-provider-failures",
9159
+ // A running sweep's failures so far, so a reader sees them before the run
9160
+ // ends. Nullable: existing runs have none to report.
9161
+ statements: [
9162
+ `ALTER TABLE runs ADD COLUMN provider_failures TEXT`
9163
+ ]
9164
+ },
9165
+ {
9166
+ version: 217,
9167
+ name: "run-planned-answers",
9168
+ // The answers a sweep set out to collect, written when it starts, so a
9169
+ // reader can show progress without remembering the launch. Nullable:
9170
+ // existing runs never recorded one.
9171
+ statements: [
9172
+ `ALTER TABLE runs ADD COLUMN planned_answers INTEGER`
9173
+ ]
9174
+ },
9175
+ {
9176
+ version: 218,
9177
+ name: "site-health-notify-state-repair",
9178
+ // v214 again. Before this release merged the one that shipped v214, its
9179
+ // provider-connection-tests, run-provider-failures and run-planned-answers
9180
+ // migrations were numbered 214-216 (now 215-217). A database that applied
9181
+ // them under those numbers skipped v214, since only versions above the
9182
+ // highest applied one run. Everywhere else the table exists: a no-op.
9183
+ statements: [
9184
+ `CREATE TABLE IF NOT EXISTS site_health_notify_state (
9185
+ project_id TEXT PRIMARY KEY REFERENCES projects(id) ON DELETE CASCADE,
9186
+ reported_keys TEXT NOT NULL DEFAULT '[]',
9187
+ run_id TEXT NOT NULL,
9188
+ updated_at TEXT NOT NULL,
9189
+ notified_at TEXT
9190
+ )`
9191
+ ]
9104
9192
  }
9105
9193
  ];
9106
9194
  var AERO_LEDGER_REBUILDS = [
@@ -10539,6 +10627,7 @@ export {
10539
10627
  runtimeLogs,
10540
10628
  runtimeLogMetadata,
10541
10629
  dataRepairCompletions,
10630
+ providerConnectionTests,
10542
10631
  apiKeys,
10543
10632
  users,
10544
10633
  userSessions,
@@ -62,8 +62,8 @@ var CANONRY_MCP_TOOLKITS = [
62
62
  {
63
63
  name: "monitoring",
64
64
  title: "Measurement, runs, insights, health",
65
- description: "Inspect portfolio and Property measurement, question results, experimental branded and non-brand sentiment and evidence, content opportunities and addressed-target records, run history, intelligence insights, health timelines, and bounded Site Health reads (overview, page audit evidence, focused subgraphs, paths, and scan changes).",
66
- whenToLoad: "Load when finding weak Properties, reviewing answers, sentiment and competitors, marking or restoring addressed content targets, checking data quality, tying a Site Health page score to concrete findings, investigating site architecture, comparing scans, or diagnosing regressions."
65
+ description: "Inspect portfolio and Property measurement, question results, experimental branded and non-brand sentiment and evidence, content opportunities and addressed-target records, run history, intelligence insights, health timelines, and bounded Agent Readiness reads (score, overview, issues, page audit evidence, focused subgraphs, paths, and scan changes).",
66
+ whenToLoad: "Load when finding weak Properties, reviewing answers, sentiment and competitors, marking or restoring addressed content targets, checking data quality, tying an Agent Readiness page score to concrete findings, investigating site architecture, comparing scans, or diagnosing regressions."
67
67
  },
68
68
  {
69
69
  name: "setup",
@@ -1,16 +1,17 @@
1
1
  import {
2
2
  runWithUsageTags
3
- } from "./chunk-AJD252SX.js";
3
+ } from "./chunk-UGO2FO6V.js";
4
4
  import {
5
5
  CanonryMcpToolNames,
6
+ DEPRECATED_MCP_TOOL_ALIAS_NAMES,
6
7
  canonryMcpTools
7
- } from "./chunk-DLOWRO5R.js";
8
+ } from "./chunk-F46TBLXK.js";
8
9
  import {
9
10
  CliError
10
11
  } from "./chunk-HGMYEDAQ.js";
11
12
  import {
12
13
  buildOpenApiDocument
13
- } from "./chunk-ZGBLNKFN.js";
14
+ } from "./chunk-YGAQQSCL.js";
14
15
  import {
15
16
  DEFAULT_COMPETITOR_AUTO_ALIAS_MODE,
16
17
  MeasurementPortfolioLists,
@@ -23,7 +24,7 @@ import {
23
24
  seoDatasetWithoutVendor,
24
25
  seoProviderSchema,
25
26
  truncateUtf16
26
- } from "./chunk-47X24IJG.js";
27
+ } from "./chunk-O7S7OHLE.js";
27
28
 
28
29
  // src/agent/tools.ts
29
30
  import { Type as Type2 } from "@earendil-works/pi-ai";
@@ -777,6 +778,10 @@ var AERO_EXCLUDED_MCP_TOOLS = /* @__PURE__ */ new Set([
777
778
  "canonry_seo_run_cancel",
778
779
  // Reloading install-wide credentials remains an explicit operator action.
779
780
  CanonryMcpToolNames.canonry_providers_reload,
781
+ CanonryMcpToolNames.canonry_provider_disconnect,
782
+ CanonryMcpToolNames.canonry_provider_settings_update,
783
+ // A connection test spends on the operator's provider account with the saved key.
784
+ CanonryMcpToolNames.canonry_provider_test,
780
785
  // Aero reads stored sentiment. Configuration and backfill submission can
781
786
  // start paid classifier work and remain operator actions.
782
787
  "canonry_sentiment_configure",
@@ -791,7 +796,11 @@ var AERO_EXCLUDED_MCP_TOOLS = /* @__PURE__ */ new Set([
791
796
  CanonryMcpToolNames.canonry_agent_conversations_new,
792
797
  CanonryMcpToolNames.canonry_agent_conversations_resume,
793
798
  CanonryMcpToolNames.canonry_agent_conversations_delete,
794
- CanonryMcpToolNames.canonry_results_clear
799
+ CanonryMcpToolNames.canonry_results_clear,
800
+ // Deprecated names (canonry_technical_aeo_*, canonry_site_health_*) answer
801
+ // exactly like their canonry_agent_readiness_* tools. They exist only for
802
+ // existing external clients; Aero gets the canonical tools once.
803
+ ...DEPRECATED_MCP_TOOL_ALIAS_NAMES
795
804
  ]);
796
805
  var AERO_MANAGED_SWEEP_MCP_TOOLS = /* @__PURE__ */ new Set([
797
806
  CanonryMcpToolNames.canonry_run_trigger,
@@ -23,7 +23,7 @@ import {
23
23
  measurementDraftUpsertGroupRequestSchema,
24
24
  measurementDraftUpsertMarketRequestSchema,
25
25
  measurementDraftUpsertTargetRequestSchema
26
- } from "./chunk-47X24IJG.js";
26
+ } from "./chunk-O7S7OHLE.js";
27
27
 
28
28
  // src/measurement-draft-actions.ts
29
29
  import { z } from "zod";
@@ -5,7 +5,7 @@ import {
5
5
  AppError,
6
6
  parseWindowIn,
7
7
  resolveDateRange
8
- } from "./chunk-47X24IJG.js";
8
+ } from "./chunk-O7S7OHLE.js";
9
9
 
10
10
  // src/cli-access.ts
11
11
  var CLI_ACCESS_BY_ID = Object.freeze({
@@ -57,6 +57,23 @@ var CLI_ACCESS_BY_ID = Object.freeze({
57
57
  "agent.providers": "stored",
58
58
  "agent.reset": "write",
59
59
  "agent.transcript": "stored",
60
+ "agent-readiness.changes": "stored",
61
+ "agent-readiness.dead-links": "stored",
62
+ "agent-readiness.issue-pages": "stored",
63
+ "agent-readiness.issues": "stored",
64
+ "agent-readiness.links": "stored",
65
+ "agent-readiness.neighbors": "stored",
66
+ "agent-readiness.overview": "stored",
67
+ "agent-readiness.page-audit": "stored",
68
+ "agent-readiness.page-scores": "stored",
69
+ "agent-readiness.pages": "stored",
70
+ "agent-readiness.path": "stored",
71
+ "agent-readiness.progress": "stored",
72
+ "agent-readiness.run": "write",
73
+ "agent-readiness.score": "stored",
74
+ "agent-readiness.structure": "stored",
75
+ "agent-readiness.subgraph": "stored",
76
+ "agent-readiness.trend": "stored",
60
77
  "analytics": "stored",
61
78
  "apply": "write",
62
79
  "backfill": "write",
@@ -294,6 +311,7 @@ var CLI_ACCESS_BY_ID = Object.freeze({
294
311
  "project.locations": "stored",
295
312
  "project.remove-location": "write",
296
313
  "project.set-default-location": "write",
314
+ "project.setup": "stored",
297
315
  "project.show": "stored",
298
316
  "project.update": "write",
299
317
  "query": "write",
@@ -315,6 +333,7 @@ var CLI_ACCESS_BY_ID = Object.freeze({
315
333
  "run.completeness": "stored",
316
334
  "run.fill": "write",
317
335
  "run.list": "stored",
336
+ "run.preview": "stored",
318
337
  "run.show": "stored",
319
338
  "run.trigger": "write",
320
339
  "runs": "stored",
@@ -322,10 +341,12 @@ var CLI_ACCESS_BY_ID = Object.freeze({
322
341
  "schedule.disable": "write",
323
342
  "schedule.enable": "write",
324
343
  "schedule.list": "stored",
344
+ "schedule.preview": "stored",
325
345
  "schedule.remove": "write",
326
346
  "schedule.set": "write",
327
347
  "schedule.show": "stored",
328
348
  "search": "stored",
349
+ // Deprecated names keep the access of the agent-readiness command they run.
329
350
  "site-health.overview": "stored",
330
351
  "site-health.issues": "stored",
331
352
  "site-health.issue-pages": "stored",
@@ -370,6 +391,9 @@ var CLI_ACCESS_BY_ID = Object.freeze({
370
391
  "settings": "stored",
371
392
  "settings.google": "write",
372
393
  "settings.provider": "write",
394
+ "settings.provider.test": "live",
395
+ "settings.provider-info": "stored",
396
+ "settings.disconnect-provider": "write",
373
397
  "settings.reload-providers": "write",
374
398
  "skills": "write",
375
399
  "skills.install": "write",
@@ -383,7 +407,8 @@ var CLI_ACCESS_BY_ID = Object.freeze({
383
407
  "technical-aeo.changes": "stored",
384
408
  "technical-aeo.issues": "stored",
385
409
  "technical-aeo.issue-pages": "stored",
386
- "technical-aeo.crawl": "write",
410
+ // A stored read of the crawl summary, like `agent-readiness overview`.
411
+ "technical-aeo.crawl": "stored",
387
412
  "technical-aeo.crawl-pages": "stored",
388
413
  "technical-aeo.dead-links": "stored",
389
414
  "technical-aeo.links": "stored",