@ainyc/canonry 4.84.0 → 4.85.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 (24) hide show
  1. package/assets/agent-workspace/skills/aero/references/regression-playbook.md +2 -0
  2. package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +19 -0
  3. package/assets/assets/{BacklinksPage-OrSg_iPA.js → BacklinksPage-CDAv0ggn.js} +1 -1
  4. package/assets/assets/{ChartPrimitives-DPBhAT_r.js → ChartPrimitives-CnAmsyt7.js} +1 -1
  5. package/assets/assets/{ProjectPage-CpMcEmtw.js → ProjectPage-C9KEgRxD.js} +1 -1
  6. package/assets/assets/{RunRow-2Rty0BAH.js → RunRow-CVZ5o8fg.js} +1 -1
  7. package/assets/assets/{RunsPage-B3ahqf8s.js → RunsPage-Bzy5c0MZ.js} +1 -1
  8. package/assets/assets/{SettingsPage-BIjeI85q.js → SettingsPage-B1ocxPBe.js} +1 -1
  9. package/assets/assets/{TrafficPage-DjGoj691.js → TrafficPage-D2zepQOC.js} +1 -1
  10. package/assets/assets/{TrafficSourceDetailPage-BgKG-2q3.js → TrafficSourceDetailPage-C7JuAkaK.js} +1 -1
  11. package/assets/assets/{arrow-left-Cf7wmru1.js → arrow-left-Bv3CWylm.js} +1 -1
  12. package/assets/assets/{extract-error-message-CANxezte.js → extract-error-message-BtVid5TP.js} +1 -1
  13. package/assets/assets/{index-CGlPx_cu.js → index-DmNti_xn.js} +72 -72
  14. package/assets/assets/{trash-2-6nHJZrvy.js → trash-2-BoimCsYz.js} +1 -1
  15. package/assets/index.html +1 -1
  16. package/dist/{chunk-VJBO4VIK.js → chunk-3K3QRSYE.js} +620 -422
  17. package/dist/{chunk-Y3O3HBMN.js → chunk-62YB3ML7.js} +49 -1
  18. package/dist/{chunk-M3IYKTSF.js → chunk-7BMSWI2K.js} +4 -4
  19. package/dist/{chunk-BNF3HXBW.js → chunk-I2BJC3DT.js} +1021 -942
  20. package/dist/cli.js +151 -20
  21. package/dist/index.js +4 -4
  22. package/dist/{intelligence-service-PDIAMP5I.js → intelligence-service-AHHBQKRD.js} +2 -2
  23. package/dist/mcp.js +2 -2
  24. package/package.json +9 -9
@@ -23,7 +23,7 @@ import {
23
23
  trafficConnectVercelRequestSchema,
24
24
  trafficConnectWordpressRequestSchema,
25
25
  trafficEventKindSchema
26
- } from "./chunk-BNF3HXBW.js";
26
+ } from "./chunk-I2BJC3DT.js";
27
27
 
28
28
  // src/config.ts
29
29
  import fs from "fs";
@@ -1538,6 +1538,18 @@ var getApiV1ProjectsByNameAnalyticsSources = (options) => {
1538
1538
  ...options
1539
1539
  });
1540
1540
  };
1541
+ var getApiV1ProjectsByNameVisibilityStats = (options) => {
1542
+ return (options.client ?? client).get({
1543
+ security: [
1544
+ {
1545
+ scheme: "bearer",
1546
+ type: "http"
1547
+ }
1548
+ ],
1549
+ url: "/api/v1/projects/{name}/visibility-stats",
1550
+ ...options
1551
+ });
1552
+ };
1541
1553
  var getApiV1ProjectsByNameSnapshotsDiff = (options) => {
1542
1554
  return (options.client ?? client).get({
1543
1555
  security: [
@@ -5062,6 +5074,20 @@ var ApiClient = class {
5062
5074
  () => getApiV1ProjectsByNameCitationsVisibility({ client: this.heyClient, path: { name: project } })
5063
5075
  );
5064
5076
  }
5077
+ async getVisibilityStats(project, opts = {}) {
5078
+ return this.invoke(
5079
+ () => getApiV1ProjectsByNameVisibilityStats({
5080
+ client: this.heyClient,
5081
+ path: { name: project },
5082
+ query: {
5083
+ since: opts.since,
5084
+ until: opts.until,
5085
+ lastRuns: opts.lastRuns,
5086
+ groupBy: opts.groupBy
5087
+ }
5088
+ })
5089
+ );
5090
+ }
5065
5091
  // ── Backlinks — workspace-level ────────────────────────────────────────
5066
5092
  async backlinksStatus() {
5067
5093
  return this.invoke(() => getApiV1BacklinksStatus({ client: this.heyClient }));
@@ -5768,6 +5794,28 @@ var canonryMcpTools = [
5768
5794
  openApiOperations: ["GET /api/v1/projects/{name}/citations/visibility"],
5769
5795
  handler: (client2, input) => client2.getCitationVisibility(input.project)
5770
5796
  }),
5797
+ defineTool({
5798
+ name: "canonry_visibility_stats",
5799
+ title: "Get aggregated mention/citation stats",
5800
+ description: 'Per-query mention (answer-text) and citation (source-list) counts WITH a sample size, pooled across many answer-visibility runs (probe-excluded) \u2014 the data to compute a confidence-aware (Wilson) proportion or detect drift without fetching every run. Tri-state aware: `checked` (the n for the mention proportion) counts only snapshots where answerMentioned was recorded; `null` ("not checked") is excluded, never counted as not-mentioned. Returns per-query `total`/`checked`/`mentioned`/`cited` + derived `mentionRate` (mentioned/checked) and `citedRate` (cited/total), `firstObserved`/`lastObserved`, and pooled `totals`. Window with `since`/`until` (ISO) OR `lastRuns` (mutually exclusive); with none set, EVERY completed/partial run is pooled (`window.runCount` says how many) \u2014 pass `lastRuns` for a recent sample. Set `groupBy=provider` for a per-provider breakdown whose counts sum to the pooled counts (`groupBy` is omitted from the response otherwise).',
5801
+ access: "read",
5802
+ tier: "monitoring",
5803
+ inputSchema: z2.object({
5804
+ project: projectNameSchema,
5805
+ since: z2.string().optional().describe("Inclusive lower bound on run createdAt (ISO 8601). A date-only value (YYYY-MM-DD) is the start of that UTC day. Mutually exclusive with lastRuns."),
5806
+ until: z2.string().optional().describe("Inclusive upper bound on run createdAt (ISO 8601). A date-only value (YYYY-MM-DD) covers the whole UTC day (through 23:59:59.999). Mutually exclusive with lastRuns."),
5807
+ lastRuns: z2.number().int().positive().optional().describe("Aggregate only the most recent N answer-visibility runs. Mutually exclusive with since/until."),
5808
+ groupBy: z2.enum(["provider"]).optional().describe('Set to "provider" for a per-provider breakdown.')
5809
+ }),
5810
+ annotations: readAnnotations(),
5811
+ openApiOperations: ["GET /api/v1/projects/{name}/visibility-stats"],
5812
+ handler: (client2, input) => client2.getVisibilityStats(input.project, {
5813
+ since: input.since,
5814
+ until: input.until,
5815
+ lastRuns: input.lastRuns,
5816
+ groupBy: input.groupBy
5817
+ })
5818
+ }),
5771
5819
  defineTool({
5772
5820
  name: "canonry_content_targets",
5773
5821
  title: "Get content targets",
@@ -9,7 +9,7 @@ import {
9
9
  loadConfig,
10
10
  loadConfigRaw,
11
11
  saveConfigPatch
12
- } from "./chunk-Y3O3HBMN.js";
12
+ } from "./chunk-62YB3ML7.js";
13
13
  import {
14
14
  CC_CACHE_DIR,
15
15
  DUCKDB_SPEC,
@@ -104,7 +104,7 @@ import {
104
104
  siteAuditPages,
105
105
  siteAuditSnapshots,
106
106
  usageCounters
107
- } from "./chunk-VJBO4VIK.js";
107
+ } from "./chunk-3K3QRSYE.js";
108
108
  import {
109
109
  AGENT_MEMORY_VALUE_MAX_BYTES,
110
110
  AGENT_PROVIDER_IDS,
@@ -160,7 +160,7 @@ import {
160
160
  validationError,
161
161
  winnabilityClassLabel,
162
162
  withRetry
163
- } from "./chunk-BNF3HXBW.js";
163
+ } from "./chunk-I2BJC3DT.js";
164
164
 
165
165
  // src/telemetry.ts
166
166
  import crypto from "crypto";
@@ -6289,7 +6289,7 @@ function readStoredGroundingSources(rawResponse) {
6289
6289
  return result;
6290
6290
  }
6291
6291
  async function backfillInsightsCommand(project, opts) {
6292
- const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-PDIAMP5I.js");
6292
+ const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-AHHBQKRD.js");
6293
6293
  const config = loadConfig();
6294
6294
  const db = createClient(config.database);
6295
6295
  migrate(db);