@canonry/canonry 7.47.0 → 7.48.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 (35) hide show
  1. package/assets/assets/{AuditHistoryPanel-BTlvVW6p.js → AuditHistoryPanel-CX61JUTX.js} +1 -1
  2. package/assets/assets/{BacklinksPage-DQu_3poO.js → BacklinksPage-DqnhCPLf.js} +1 -1
  3. package/assets/assets/{HistoryPage-D_3qu4SQ.js → HistoryPage-rRFCtFL5.js} +1 -1
  4. package/assets/assets/{MeasurementPropertyPage-FKmEMw_G.js → MeasurementPropertyPage-CfIZVKgg.js} +1 -1
  5. package/assets/assets/{ProjectPage-H7nsLkhG.js → ProjectPage-DU88Joxp.js} +1 -1
  6. package/assets/assets/{RunsPage-CE5wFNdP.js → RunsPage-B3NIVoWb.js} +1 -1
  7. package/assets/assets/{SettingsPage-D2zKpqOv.js → SettingsPage-098-3JC1.js} +1 -1
  8. package/assets/assets/{SiteHealthSection-ClZRxJ-A.js → SiteHealthSection-CfcQYuwU.js} +3 -3
  9. package/assets/assets/{TrafficPage-BDH4Dzk0.js → TrafficPage-Bl6INnLT.js} +1 -1
  10. package/assets/assets/{TrafficSourceDetailPage-DaVUcHXu.js → TrafficSourceDetailPage-Bu_0hPCZ.js} +1 -1
  11. package/assets/assets/{extract-error-message-YXzyZAEc.js → extract-error-message-Dp43pOCs.js} +1 -1
  12. package/assets/assets/{index-Zj8hd7aE.js → index-je69pgAK.js} +20 -20
  13. package/assets/assets/{react-sigma_core.esm.min-9j5NHFWR.js → react-sigma_core.esm.min-DFuzq2Lx.js} +1 -1
  14. package/assets/assets/{v2-overview-adapter-BsKpkQvx.js → v2-overview-adapter-CjEkLZwJ.js} +1 -1
  15. package/assets/index.html +1 -1
  16. package/dist/{chunk-XHRJYIJQ.js → chunk-5KCJQO4I.js} +1 -1
  17. package/dist/{chunk-DGKSQ5QD.js → chunk-AKDSQTHE.js} +1 -1
  18. package/dist/{chunk-RUAQAQ7X.js → chunk-BNZ3N6UX.js} +69 -19
  19. package/dist/{chunk-CIYCCA2I.js → chunk-CS4POCLI.js} +2 -2
  20. package/dist/{chunk-3F4KBEMY.js → chunk-JPFZ4CXQ.js} +2 -2
  21. package/dist/{chunk-HQS2Y7HO.js → chunk-NPYNNEFP.js} +3 -3
  22. package/dist/{chunk-QS262E4F.js → chunk-NVKQVQ3C.js} +17 -0
  23. package/dist/{chunk-66K6U5H5.js → chunk-P6KH6N4Z.js} +3 -3
  24. package/dist/{chunk-XLKWD5WO.js → chunk-PTDX75HP.js} +9 -9
  25. package/dist/{chunk-KCSU2OSL.js → chunk-U2GU6MAC.js} +59 -30
  26. package/dist/{cli-catalog-MRYQK7LI.js → cli-catalog-NJPHC55G.js} +3 -3
  27. package/dist/cli-commands-MVIT7XNN.js +15 -0
  28. package/dist/cli.js +10 -10
  29. package/dist/{demo-server-ASCEFIVC.js → demo-server-CX2FZGR5.js} +4 -4
  30. package/dist/index.d.ts +29 -0
  31. package/dist/index.js +6 -6
  32. package/dist/{intelligence-service-VRWJUHNM.js → intelligence-service-6INMSEAQ.js} +2 -2
  33. package/dist/mcp.js +4 -4
  34. package/package.json +14 -14
  35. package/dist/cli-commands-RJF4TCEZ.js +0 -15
@@ -765,6 +765,7 @@ import {
765
765
  resultsClearRequestSchema,
766
766
  resultsClearResponseSchema,
767
767
  resultsExportDtoSchema,
768
+ retrievedSourceSchema,
768
769
  retryAfterDelayMs,
769
770
  roundRatio,
770
771
  runAdmissionDtoSchema,
@@ -915,7 +916,7 @@ import {
915
916
  wordpressSchemaDeployResultDtoSchema,
916
917
  wordpressSchemaStatusResultDtoSchema,
917
918
  wordpressStatusDtoSchema
918
- } from "./chunk-QS262E4F.js";
919
+ } from "./chunk-NVKQVQ3C.js";
919
920
 
920
921
  // src/intelligence-service.ts
921
922
  import { eq as eq99, desc as desc45, asc as asc20, and as and82, ne as ne17, or as or24, inArray as inArray40, gte as gte26, lte as lte23, isNull as isNull19, sql as sql37, exists as exists2 } from "drizzle-orm";
@@ -3402,6 +3403,7 @@ var researchRunQueries = sqliteTable("research_run_queries", {
3402
3403
  groundingSources: text("grounding_sources", { mode: "json" }).$type().notNull().default([]),
3403
3404
  citedDomains: text("cited_domains", { mode: "json" }).$type().notNull().default([]),
3404
3405
  searchQueries: text("search_queries", { mode: "json" }).$type().notNull().default([]),
3406
+ retrievedSources: text("retrieved_sources", { mode: "json" }).$type(),
3405
3407
  namedCompetitors: text("named_competitors", { mode: "json" }).$type().notNull().default([]),
3406
3408
  citedCompetitorDomains: text("cited_competitor_domains", { mode: "json" }).$type().notNull().default([]),
3407
3409
  answerMentioned: integer("answer_mentioned", { mode: "boolean" }),
@@ -8682,6 +8684,15 @@ var MIGRATION_VERSIONS = [
8682
8684
  `ALTER TABLE doctor_health_state ADD COLUMN urgent_receipts TEXT`,
8683
8685
  `ALTER TABLE site_liveness_state ADD COLUMN urgent_receipts TEXT`
8684
8686
  ]
8687
+ },
8688
+ {
8689
+ // Pages an engine's searches listed or opened for a Research answer. NULL
8690
+ // on every existing row and for engines that do not report retrievals.
8691
+ version: 184,
8692
+ name: "research-retrieved-sources",
8693
+ statements: [
8694
+ `ALTER TABLE research_run_queries ADD COLUMN retrieved_sources TEXT`
8695
+ ]
8685
8696
  }
8686
8697
  ];
8687
8698
  var AERO_LEDGER_REBUILDS = [
@@ -22569,6 +22580,7 @@ async function competitorSuggestionRoutes(app) {
22569
22580
  // ../api-routes/src/runs.ts
22570
22581
  import crypto16 from "crypto";
22571
22582
  import { and as and22, eq as eq30, ne as ne7, asc as asc4, desc as desc11, inArray as inArray15, notInArray, or as or7, sql as sql11 } from "drizzle-orm";
22583
+ import { z as z3 } from "zod";
22572
22584
  import { gte as gte4 } from "drizzle-orm";
22573
22585
 
22574
22586
  // ../api-routes/src/run-fill.ts
@@ -23386,9 +23398,12 @@ function formatRun(row) {
23386
23398
  }
23387
23399
  function parseSnapshotRawResponse(raw) {
23388
23400
  const parsed = parseJsonColumn(raw, {});
23401
+ const retrieved = z3.array(retrievedSourceSchema).safeParse(parsed.retrievedSources);
23389
23402
  return {
23390
23403
  groundingSources: parsed.groundingSources ?? [],
23391
23404
  searchQueries: parsed.searchQueries ?? [],
23405
+ // Absent on engines that do not report retrievals and on older rows.
23406
+ retrievedSources: retrieved.success ? retrieved.data : null,
23392
23407
  model: parsed.model ?? null
23393
23408
  };
23394
23409
  }
@@ -23480,6 +23495,7 @@ function loadRunDetail(app, run) {
23480
23495
  usage: s.usage,
23481
23496
  groundingSources: rawParsed.groundingSources,
23482
23497
  searchQueries: rawParsed.searchQueries,
23498
+ retrievedSources: rawParsed.retrievedSources,
23483
23499
  createdAt: s.createdAt
23484
23500
  };
23485
23501
  });
@@ -40255,7 +40271,7 @@ function winnabilityClassRank(winnabilityClass) {
40255
40271
  }
40256
40272
 
40257
40273
  // ../api-routes/src/openapi-schemas.ts
40258
- import { z as z3 } from "zod";
40274
+ import { z as z4 } from "zod";
40259
40275
  var SCHEMA_TABLE = {
40260
40276
  SentimentSummary: sentimentSummarySchema,
40261
40277
  SentimentSettings: sentimentSettingsSchema,
@@ -40541,7 +40557,7 @@ var SCHEMA_TABLE = {
40541
40557
  SnapshotListResponse: snapshotListResponseSchema,
40542
40558
  SnapshotReportDto: snapshotReportSchema,
40543
40559
  // The API accepts legacy phrases, but the public contract advertises queries.
40544
- SnapshotRequest: z3.object(snapshotRequestInputSchema.shape).omit({ phrases: true }),
40560
+ SnapshotRequest: z4.object(snapshotRequestInputSchema.shape).omit({ phrases: true }),
40545
40561
  SourceBreakdownDto: sourceBreakdownDtoSchema,
40546
40562
  TelemetryEventAcceptedDto: telemetryEventAcceptedDtoSchema,
40547
40563
  FeedbackSubmission: feedbackSubmissionSchema,
@@ -40581,11 +40597,11 @@ var SCHEMA_TABLE = {
40581
40597
  // the API never returns this from a typed handler — it's emitted by the
40582
40598
  // global error handler. Codegen consumers reference it through the
40583
40599
  // ErrorEnvelope ref so error shape is part of the public contract.
40584
- ErrorEnvelope: z3.object({
40585
- error: z3.object({
40586
- code: z3.string(),
40587
- message: z3.string(),
40588
- details: z3.unknown().optional()
40600
+ ErrorEnvelope: z4.object({
40601
+ error: z4.object({
40602
+ code: z4.string(),
40603
+ message: z4.string(),
40604
+ details: z4.unknown().optional()
40589
40605
  })
40590
40606
  })
40591
40607
  };
@@ -40610,7 +40626,7 @@ function buildComponentSchemas() {
40610
40626
  const out = {};
40611
40627
  for (const [name, schema] of Object.entries(SCHEMA_TABLE)) {
40612
40628
  const io = INPUT_FORM_SCHEMAS.has(name) ? "input" : "output";
40613
- const json = z3.toJSONSchema(schema, { target: "openapi-3.0", io });
40629
+ const json = z4.toJSONSchema(schema, { target: "openapi-3.0", io });
40614
40630
  addNullToNullableEnums(json);
40615
40631
  out[name] = json;
40616
40632
  }
@@ -53339,18 +53355,18 @@ function parseReviewLimit(value) {
53339
53355
  // ../api-routes/src/google-marketing.ts
53340
53356
  import crypto37 from "crypto";
53341
53357
  import { and as and51, desc as desc30, eq as eq63, isNull as isNull11, lt as lt9, ne as ne12, or as or15, sql as sql24 } from "drizzle-orm";
53342
- import { z as z4 } from "zod";
53343
- var snapshotPageQuerySchema = z4.object({
53344
- limit: z4.coerce.number().int().min(1).max(GOOGLE_MARKETING_STORED_SNAPSHOT_PAGE_MAX).optional(),
53345
- cursor: z4.string().min(1).optional()
53358
+ import { z as z5 } from "zod";
53359
+ var snapshotPageQuerySchema = z5.object({
53360
+ limit: z5.coerce.number().int().min(1).max(GOOGLE_MARKETING_STORED_SNAPSHOT_PAGE_MAX).optional(),
53361
+ cursor: z5.string().min(1).optional()
53346
53362
  }).strict();
53347
- var oauthStateSchema = z4.object({
53348
- projectId: z4.string().min(1),
53349
- projectName: z4.string().min(1),
53363
+ var oauthStateSchema = z5.object({
53364
+ projectId: z5.string().min(1),
53365
+ projectName: z5.string().min(1),
53350
53366
  provider: googleMarketingProviderSchema,
53351
- redirectUri: z4.string().url(),
53352
- nonce: z4.string().regex(/^[\w-]{43}$/),
53353
- issuedAt: z4.number()
53367
+ redirectUri: z5.string().url(),
53368
+ nonce: z5.string().regex(/^[\w-]{43}$/),
53369
+ issuedAt: z5.number()
53354
53370
  }).strict();
53355
53371
  var GOOGLE_MARKETING_OAUTH_PENDING_FLOW_MAX = 256;
53356
53372
  var GOOGLE_MARKETING_OAUTH_COOKIE_PREFIX = "canonry_google_marketing_oauth_";
@@ -53494,7 +53510,7 @@ function decodeSnapshotCursor(value) {
53494
53510
  try {
53495
53511
  const decoded = Buffer.from(value, "base64url");
53496
53512
  if (decoded.toString("base64url") !== value) throw new Error("Non-canonical cursor");
53497
- const parsed = z4.object({ capturedAt: z4.string().min(1), id: z4.string().min(1) }).strict().parse(JSON.parse(decoded.toString()));
53513
+ const parsed = z5.object({ capturedAt: z5.string().min(1), id: z5.string().min(1) }).strict().parse(JSON.parse(decoded.toString()));
53498
53514
  return parsed;
53499
53515
  } catch {
53500
53516
  throw validationError("Invalid Google Marketing snapshot cursor.");
@@ -53793,7 +53809,7 @@ function latestGtmSnapshot(app, projectId) {
53793
53809
  if (!snapshot || snapshot.metadata.id !== connection.lastSnapshotId || snapshot.metadata.connectionId !== connection.id || snapshot.metadata.accountId !== connection.selectedAccountId || snapshot.metadata.containerId !== connection.selectedContainerId || snapshot.metadata.workspaceId !== connection.selectedWorkspaceId || snapshot.metadata.capturedAt !== connection.lastSnapshotAt || snapshot.payload.kind !== GtmSnapshotKinds.container) return null;
53794
53810
  return snapshot;
53795
53811
  }
53796
- var googleAdsPerformanceQuerySchema = z4.object({
53812
+ var googleAdsPerformanceQuerySchema = z5.object({
53797
53813
  window: googleAdsMetricsWindowSchema.optional()
53798
53814
  }).strict();
53799
53815
  var GOOGLE_ADS_PERFORMANCE_WINDOW_DAYS = {
@@ -87496,7 +87512,8 @@ var SPECS = [
87496
87512
  kind: RunKinds["gtm-sync"],
87497
87513
  connection: googleMarketingConnection("gtm"),
87498
87514
  syncCommand: (name) => `canonry gtm sync ${name}`,
87499
- causeCheckIds: ["gtm.auth.connection", "gtm.auth.scopes", "gtm.container.context", "gtm.api.reachable"]
87515
+ causeCheckIds: ["gtm.auth.connection", "gtm.auth.scopes", "gtm.container.context", "gtm.api.reachable"],
87516
+ notFoundRemediation: (name) => `The selected account or container no longer exists, or this login can no longer see it. List what it can see with \`canonry gtm accounts ${name}\`, then choose again with \`canonry gtm select ${name} --account <id> --container <id>\`.`
87500
87517
  },
87501
87518
  {
87502
87519
  prefix: "gbp",
@@ -87592,12 +87609,13 @@ function gradeSyncFailures(ctx, spec) {
87592
87609
  const errorText = state.latestError ?? "no error was recorded";
87593
87610
  const shownError = errorText.length > SUMMARY_ERROR_LIMIT ? `${truncateUtf16(errorText, SUMMARY_ERROR_LIMIT)}...` : errorText;
87594
87611
  const lastSuccessText = state.lastSuccessAt ?? (connection.since ? `none since connecting at ${connection.since}` : "never");
87612
+ const notFound2 = spec.notFoundRemediation && /\bwas not found\b/i.test(errorText);
87595
87613
  return {
87596
87614
  status: CheckStatuses.fail,
87597
87615
  code: code("repeated-failures"),
87598
87616
  urgent: true,
87599
87617
  summary: `The last ${state.consecutiveFailures} ${spec.label} syncs failed (last success: ${lastSuccessText}). Latest error: ${shownError}`,
87600
- remediation: `Fix the cause the latest error names (DNS or network filtering of the API host, credentials, or account access), then run \`${spec.syncCommand(project.name)}\`.`,
87618
+ remediation: notFound2 ? spec.notFoundRemediation(project.name) : `Fix the cause the latest error names (DNS or network filtering of the API host, credentials, or account access), then run \`${spec.syncCommand(project.name)}\`.`,
87601
87619
  details
87602
87620
  };
87603
87621
  }
@@ -88822,12 +88840,23 @@ var sourceConnectedCheck = {
88822
88840
  }
88823
88841
  const errored = activeSources.filter((s) => s.status === "error");
88824
88842
  if (errored.length > 0 && errored.length === activeSources.length) {
88843
+ const streaks = errored.map((s) => readSyncRunState(ctx.db, ctx.project.id, RunKinds["traffic-sync"], { sourceId: s.id }));
88844
+ const recovering = streaks.every((state) => state.latestStatus === RunStatuses.failed && !state.repeatedFailure);
88845
+ const lastDataAt = errored.map((s) => s.lastSyncedAt).filter((at) => !!at).sort().at(-1) ?? null;
88846
+ const failuresInARow = Math.min(...streaks.map((state) => state.consecutiveFailures));
88847
+ const sinceText = lastDataAt ? `No new data since ${lastDataAt}.` : "No data has arrived yet.";
88825
88848
  return {
88826
- status: CheckStatuses.fail,
88827
- code: "traffic.source.all-errored",
88828
- summary: `All ${activeSources.length} active traffic source(s) are in error state. No data is being ingested.`,
88849
+ status: recovering ? CheckStatuses.warn : CheckStatuses.fail,
88850
+ code: recovering ? "traffic.source.all-errored-recently" : "traffic.source.all-errored",
88851
+ summary: recovering ? `The latest sync failed for all ${activeSources.length} active traffic source(s) (${failuresInARow} in a row; this fails at ${SYNC_FAILURE_WINDOW}). ${sinceText}` : `All ${activeSources.length} active traffic source(s) are in error state. ${sinceText}`,
88829
88852
  remediation: errored[0].lastError ? `Latest error: "${errored[0].lastError}". Re-connect the source or run \`canonry traffic sync <project> --source <id>\` to retry.` : "Run `canonry traffic sources <project>` to inspect the failing source(s) and re-connect.",
88830
- details: { sourceCount: activeSources.length, pausedCount: sources.length - activeSources.length, erroredIds: errored.map((s) => s.id) }
88853
+ details: {
88854
+ sourceCount: activeSources.length,
88855
+ pausedCount: sources.length - activeSources.length,
88856
+ erroredIds: errored.map((s) => s.id),
88857
+ failuresInARow,
88858
+ lastSyncedAt: lastDataAt
88859
+ }
88831
88860
  };
88832
88861
  }
88833
88862
  if (errored.length > 0) {
@@ -93403,7 +93432,7 @@ async function technicalAeoRoutes(app, opts) {
93403
93432
 
93404
93433
  // ../api-routes/src/research.ts
93405
93434
  import crypto55 from "crypto";
93406
- import { z as z5 } from "zod";
93435
+ import { z as z6 } from "zod";
93407
93436
  import { and as and79, count as count8, desc as desc44, eq as eq96, gte as gte25, lt as lt14, or as or23, sql as sql36 } from "drizzle-orm";
93408
93437
  var sameLocation = (a, b) => a.label === b.label && a.city === b.city && a.region === b.region && a.country === b.country && a.timezone === b.timezone;
93409
93438
  var BATCH_RECEIPT_PREFIX = "__canonry_research_batch__:";
@@ -93625,7 +93654,7 @@ function assertSameDirectResearchRequest(existing, input, hash2) {
93625
93654
  };
93626
93655
  if (crypto55.createHash("sha256").update(JSON.stringify(normalized)).digest("hex") !== existing.requestHash) throw alreadyExists("Research idempotency key", input.idempotencyKey);
93627
93656
  }
93628
- var researchCursorSchema = z5.object({ projectId: z5.string().min(1), createdAt: z5.string().datetime({ offset: true }), id: z5.string().min(1).max(256) }).strict();
93657
+ var researchCursorSchema = z6.object({ projectId: z6.string().min(1), createdAt: z6.string().datetime({ offset: true }), id: z6.string().min(1).max(256) }).strict();
93629
93658
  function parseResearchCursor(value, projectId) {
93630
93659
  try {
93631
93660
  if (value.length > 2048 || !/^[\w-]+$/.test(value)) throw new Error("Invalid encoding");
@@ -93734,7 +93763,7 @@ function serializeRun(row) {
93734
93763
  return { id: row.id, projectId: row.projectId, status: row.status, provider: row.provider, requestedModel: row.requestedModel, resolvedModel: row.resolvedModel, location: row.location ?? null, scope: row.scope ?? null, template: row.template ?? null, totalQueries: row.totalQueries, completedQueries: row.completedQueries, failedQueries: row.failedQueries, error: row.error, initiatedBy: row.initiatedBy ?? null, startedAt: row.startedAt, finishedAt: row.finishedAt, createdAt: row.createdAt };
93735
93764
  }
93736
93765
  function serializeQuery(row) {
93737
- return { id: row.id, position: row.position, query: row.queryText, queryClass: row.queryClass ?? null, status: row.status, requestedModel: row.requestedModel, resolvedModel: row.resolvedModel, servedModel: row.servedModel, answerText: row.answerText, groundingSources: row.groundingSources, citedDomains: row.citedDomains, searchQueries: row.searchQueries, namedCompetitors: row.namedCompetitors, citedCompetitorDomains: row.citedCompetitorDomains, answerMentioned: row.answerMentioned, citationState: row.citationState, error: row.error, startedAt: row.startedAt, finishedAt: row.finishedAt, createdAt: row.createdAt };
93766
+ return { id: row.id, position: row.position, query: row.queryText, queryClass: row.queryClass ?? null, status: row.status, requestedModel: row.requestedModel, resolvedModel: row.resolvedModel, servedModel: row.servedModel, answerText: row.answerText, groundingSources: row.groundingSources, citedDomains: row.citedDomains, searchQueries: row.searchQueries, retrievedSources: row.retrievedSources ?? null, namedCompetitors: row.namedCompetitors, citedCompetitorDomains: row.citedCompetitorDomains, answerMentioned: row.answerMentioned, citationState: row.citationState, error: row.error, startedAt: row.startedAt, finishedAt: row.finishedAt, createdAt: row.createdAt };
93738
93767
  }
93739
93768
  function researchPrincipal(request) {
93740
93769
  const principal = request.principal;
@@ -3,10 +3,10 @@ import {
3
3
  buildCliCatalog,
4
4
  printCliCatalog,
5
5
  renderTopLevelHelp
6
- } from "./chunk-66K6U5H5.js";
7
- import "./chunk-DGKSQ5QD.js";
6
+ } from "./chunk-P6KH6N4Z.js";
7
+ import "./chunk-AKDSQTHE.js";
8
8
  import "./chunk-HGMYEDAQ.js";
9
- import "./chunk-QS262E4F.js";
9
+ import "./chunk-NVKQVQ3C.js";
10
10
  export {
11
11
  CLI_ROOT_SUMMARIES,
12
12
  buildCliCatalog,
@@ -0,0 +1,15 @@
1
+ import {
2
+ REGISTERED_CLI_COMMANDS
3
+ } from "./chunk-PTDX75HP.js";
4
+ import "./chunk-BNZ3N6UX.js";
5
+ import "./chunk-CS4POCLI.js";
6
+ import "./chunk-AKDSQTHE.js";
7
+ import "./chunk-RB2F4D3Z.js";
8
+ import "./chunk-JPFZ4CXQ.js";
9
+ import "./chunk-5KCJQO4I.js";
10
+ import "./chunk-HGMYEDAQ.js";
11
+ import "./chunk-U2GU6MAC.js";
12
+ import "./chunk-NVKQVQ3C.js";
13
+ export {
14
+ REGISTERED_CLI_COMMANDS
15
+ };
package/dist/cli.js CHANGED
@@ -2,18 +2,18 @@
2
2
  import {
3
3
  autoSyncSkills,
4
4
  formatAutoSyncNotice
5
- } from "./chunk-HQS2Y7HO.js";
5
+ } from "./chunk-NPYNNEFP.js";
6
6
  import {
7
7
  accessFilterFromArgs,
8
8
  dispatchRegisteredCommand,
9
9
  printCliCatalog
10
- } from "./chunk-66K6U5H5.js";
10
+ } from "./chunk-P6KH6N4Z.js";
11
11
  import {
12
12
  REGISTERED_CLI_COMMANDS,
13
13
  buildSetupState,
14
14
  consumePendingServeHandoff,
15
15
  serveCommand
16
- } from "./chunk-XLKWD5WO.js";
16
+ } from "./chunk-PTDX75HP.js";
17
17
  import {
18
18
  checkLatestVersionForCli,
19
19
  cliRuntimeContext,
@@ -27,14 +27,14 @@ import {
27
27
  showFirstRunNotice,
28
28
  trackCliCommandFinished,
29
29
  trackEvent
30
- } from "./chunk-RUAQAQ7X.js";
31
- import "./chunk-CIYCCA2I.js";
30
+ } from "./chunk-BNZ3N6UX.js";
31
+ import "./chunk-CS4POCLI.js";
32
32
  import {
33
33
  resolveCliAccess
34
- } from "./chunk-DGKSQ5QD.js";
34
+ } from "./chunk-AKDSQTHE.js";
35
35
  import "./chunk-RB2F4D3Z.js";
36
- import "./chunk-3F4KBEMY.js";
37
- import "./chunk-XHRJYIJQ.js";
36
+ import "./chunk-JPFZ4CXQ.js";
37
+ import "./chunk-5KCJQO4I.js";
38
38
  import {
39
39
  CliError,
40
40
  EXIT_SYSTEM_ERROR,
@@ -42,10 +42,10 @@ import {
42
42
  printCliError,
43
43
  usageError
44
44
  } from "./chunk-HGMYEDAQ.js";
45
- import "./chunk-KCSU2OSL.js";
45
+ import "./chunk-U2GU6MAC.js";
46
46
  import {
47
47
  OperationAccesses
48
- } from "./chunk-QS262E4F.js";
48
+ } from "./chunk-NVKQVQ3C.js";
49
49
 
50
50
  // src/cli.ts
51
51
  import { pathToFileURL } from "url";
@@ -5,11 +5,11 @@ import {
5
5
  computeFactorAverages,
6
6
  layoutSiteCrawlGraphInput,
7
7
  persistSiteCrawlGraphLayout
8
- } from "./chunk-3F4KBEMY.js";
8
+ } from "./chunk-JPFZ4CXQ.js";
9
9
  import {
10
10
  PACKAGE_VERSION,
11
11
  canonryMcpTools
12
- } from "./chunk-XHRJYIJQ.js";
12
+ } from "./chunk-5KCJQO4I.js";
13
13
  import "./chunk-HGMYEDAQ.js";
14
14
  import {
15
15
  HISTORY_WINDOW_RUNS,
@@ -86,7 +86,7 @@ import {
86
86
  siteCrawlPages,
87
87
  siteCrawlSnapshots,
88
88
  trafficSources
89
- } from "./chunk-KCSU2OSL.js";
89
+ } from "./chunk-U2GU6MAC.js";
90
90
  import {
91
91
  RunKinds,
92
92
  SiteCrawlFetchStates,
@@ -116,7 +116,7 @@ import {
116
116
  roundPreservingTotal,
117
117
  siteAuditPageFactorSchema,
118
118
  wilsonInterval
119
- } from "./chunk-QS262E4F.js";
119
+ } from "./chunk-NVKQVQ3C.js";
120
120
 
121
121
  // src/demo-server.ts
122
122
  import { dirname, join as join2 } from "path";
package/dist/index.d.ts CHANGED
@@ -22863,6 +22863,35 @@ declare const researchRunQueries: drizzle_orm_sqlite_core.SQLiteTableWithColumns
22863
22863
  }, {}, {
22864
22864
  $type: string[];
22865
22865
  }>;
22866
+ retrievedSources: drizzle_orm_sqlite_core.SQLiteColumn<{
22867
+ name: "retrieved_sources";
22868
+ tableName: "research_run_queries";
22869
+ dataType: "json";
22870
+ columnType: "SQLiteTextJson";
22871
+ data: {
22872
+ uri: string;
22873
+ title: string;
22874
+ kind: "search-result" | "page-read";
22875
+ query: string | null;
22876
+ }[];
22877
+ driverParam: string;
22878
+ notNull: false;
22879
+ hasDefault: false;
22880
+ isPrimaryKey: false;
22881
+ isAutoincrement: false;
22882
+ hasRuntimeDefault: false;
22883
+ enumValues: undefined;
22884
+ baseColumn: never;
22885
+ identity: undefined;
22886
+ generated: undefined;
22887
+ }, {}, {
22888
+ $type: {
22889
+ uri: string;
22890
+ title: string;
22891
+ kind: "search-result" | "page-read";
22892
+ query: string | null;
22893
+ }[];
22894
+ }>;
22866
22895
  namedCompetitors: drizzle_orm_sqlite_core.SQLiteColumn<{
22867
22896
  name: "named_competitors";
22868
22897
  tableName: "research_run_queries";
package/dist/index.js CHANGED
@@ -3,15 +3,15 @@ import {
3
3
  createGoogleMarketingCredentialStore,
4
4
  createGoogleMarketingRuntime,
5
5
  createServer
6
- } from "./chunk-RUAQAQ7X.js";
6
+ } from "./chunk-BNZ3N6UX.js";
7
7
  import {
8
8
  loadConfig
9
- } from "./chunk-CIYCCA2I.js";
10
- import "./chunk-3F4KBEMY.js";
11
- import "./chunk-XHRJYIJQ.js";
9
+ } from "./chunk-CS4POCLI.js";
10
+ import "./chunk-JPFZ4CXQ.js";
11
+ import "./chunk-5KCJQO4I.js";
12
12
  import "./chunk-HGMYEDAQ.js";
13
- import "./chunk-KCSU2OSL.js";
14
- import "./chunk-QS262E4F.js";
13
+ import "./chunk-U2GU6MAC.js";
14
+ import "./chunk-NVKQVQ3C.js";
15
15
  export {
16
16
  GoogleMarketingRuntimeError,
17
17
  createGoogleMarketingCredentialStore,
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  HISTORY_WINDOW_RUNS,
3
3
  IntelligenceService
4
- } from "./chunk-KCSU2OSL.js";
5
- import "./chunk-QS262E4F.js";
4
+ } from "./chunk-U2GU6MAC.js";
5
+ import "./chunk-NVKQVQ3C.js";
6
6
  export {
7
7
  HISTORY_WINDOW_RUNS,
8
8
  IntelligenceService
package/dist/mcp.js CHANGED
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  autoSyncSkills
3
- } from "./chunk-HQS2Y7HO.js";
3
+ } from "./chunk-NPYNNEFP.js";
4
4
  import {
5
5
  createApiClient,
6
6
  createCanonryMcpServer
7
- } from "./chunk-CIYCCA2I.js";
8
- import "./chunk-XHRJYIJQ.js";
7
+ } from "./chunk-CS4POCLI.js";
8
+ import "./chunk-5KCJQO4I.js";
9
9
  import "./chunk-HGMYEDAQ.js";
10
10
  import {
11
11
  isReadOnlyKey,
12
12
  updateCheckEnvOptOut
13
- } from "./chunk-QS262E4F.js";
13
+ } from "./chunk-NVKQVQ3C.js";
14
14
 
15
15
  // src/mcp/cli.ts
16
16
  import { randomUUID } from "crypto";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@canonry/canonry",
3
- "version": "7.47.0",
3
+ "version": "7.48.0",
4
4
  "type": "module",
5
5
  "description": "Self-hosted AI visibility (AEO) platform: track how ChatGPT, Claude, Gemini, and Perplexity cite your domain, join it with Search Console, GA4, server-side traffic, and paid media, and fix what you find through agent tools (CLI, REST, MCP). Local SQLite.",
6
6
  "keywords": [
@@ -85,34 +85,34 @@
85
85
  "@types/node-cron": "^3.0.11",
86
86
  "tsup": "^8.5.1",
87
87
  "tsx": "^4.19.0",
88
- "@canonry/canonry-web": "0.0.0",
89
- "@canonry/canonry-api-routes": "0.0.0",
90
- "@canonry/canonry-contracts": "0.0.0",
91
- "@canonry/canonry-config": "0.0.0",
92
88
  "@canonry/canonry-api-client": "0.0.0",
89
+ "@canonry/canonry-config": "0.0.0",
90
+ "@canonry/canonry-web": "0.0.0",
93
91
  "@canonry/canonry-db": "0.0.0",
92
+ "@canonry/canonry-contracts": "0.0.0",
93
+ "@canonry/canonry-api-routes": "0.0.0",
94
94
  "@canonry/canonry-integration-bing": "0.0.0",
95
95
  "@canonry/canonry-integration-cloud-run": "0.0.0",
96
96
  "@canonry/canonry-integration-cloudflare-worker": "0.0.0",
97
97
  "@canonry/canonry-integration-cloudflare-queue": "0.0.0",
98
- "@canonry/canonry-integration-commoncrawl": "0.0.0",
99
- "@canonry/canonry-integration-google": "0.0.0",
100
98
  "@canonry/canonry-integration-google-ads": "0.0.0",
101
- "@canonry/canonry-integration-google-places": "0.0.0",
99
+ "@canonry/canonry-integration-commoncrawl": "0.0.0",
102
100
  "@canonry/canonry-integration-google-business-profile": "0.0.0",
103
- "@canonry/canonry-integration-traffic": "0.0.0",
104
- "@canonry/canonry-integration-wordpress": "0.0.0",
101
+ "@canonry/canonry-integration-google-places": "0.0.0",
102
+ "@canonry/canonry-integration-google": "0.0.0",
105
103
  "@canonry/canonry-integration-openai-ads": "0.0.0",
104
+ "@canonry/canonry-integration-google-tag-manager": "0.0.0",
105
+ "@canonry/canonry-integration-wordpress": "0.0.0",
106
+ "@canonry/canonry-integration-traffic": "0.0.0",
106
107
  "@canonry/canonry-provider-cdp": "0.0.0",
107
- "@canonry/canonry-intelligence": "0.0.0",
108
+ "@canonry/canonry-provider-claude": "0.0.0",
108
109
  "@canonry/canonry-provider-gemini": "0.0.0",
110
+ "@canonry/canonry-intelligence": "0.0.0",
109
111
  "@canonry/canonry-provider-local": "0.0.0",
110
- "@canonry/canonry-provider-claude": "0.0.0",
111
112
  "@canonry/canonry-provider-muse": "0.0.0",
112
113
  "@canonry/canonry-provider-openai": "0.0.0",
113
- "@canonry/canonry-integration-typesafe": "0.0.0",
114
114
  "@canonry/canonry-provider-perplexity": "0.0.0",
115
- "@canonry/canonry-integration-google-tag-manager": "0.0.0"
115
+ "@canonry/canonry-integration-typesafe": "0.0.0"
116
116
  },
117
117
  "scripts": {
118
118
  "build": "pnpm run build:cli && pnpm run build:web",
@@ -1,15 +0,0 @@
1
- import {
2
- REGISTERED_CLI_COMMANDS
3
- } from "./chunk-XLKWD5WO.js";
4
- import "./chunk-RUAQAQ7X.js";
5
- import "./chunk-CIYCCA2I.js";
6
- import "./chunk-DGKSQ5QD.js";
7
- import "./chunk-RB2F4D3Z.js";
8
- import "./chunk-3F4KBEMY.js";
9
- import "./chunk-XHRJYIJQ.js";
10
- import "./chunk-HGMYEDAQ.js";
11
- import "./chunk-KCSU2OSL.js";
12
- import "./chunk-QS262E4F.js";
13
- export {
14
- REGISTERED_CLI_COMMANDS
15
- };