@canonry/canonry 7.46.1 → 7.47.1
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.
- package/assets/assets/{AuditHistoryPanel-u65pF2eT.js → AuditHistoryPanel-BTlvVW6p.js} +1 -1
- package/assets/assets/{BacklinksPage-CmYpSNGB.js → BacklinksPage-DQu_3poO.js} +1 -1
- package/assets/assets/{HistoryPage-CqzQSAil.js → HistoryPage-D_3qu4SQ.js} +1 -1
- package/assets/assets/{MeasurementPropertyPage-KfpmUisb.js → MeasurementPropertyPage-FKmEMw_G.js} +1 -1
- package/assets/assets/{ProjectPage-BCiospUp.js → ProjectPage-H7nsLkhG.js} +1 -1
- package/assets/assets/{RunsPage-CzPvTnwG.js → RunsPage-CE5wFNdP.js} +1 -1
- package/assets/assets/{SettingsPage-CZYckyPO.js → SettingsPage-D2zKpqOv.js} +1 -1
- package/assets/assets/{SiteHealthSection-Bm5nWAoZ.js → SiteHealthSection-ClZRxJ-A.js} +3 -3
- package/assets/assets/{TrafficPage-DZw_GvaO.js → TrafficPage-BDH4Dzk0.js} +1 -1
- package/assets/assets/{TrafficSourceDetailPage-CD20PJ4A.js → TrafficSourceDetailPage-DaVUcHXu.js} +1 -1
- package/assets/assets/{extract-error-message-Cpzj_AMZ.js → extract-error-message-YXzyZAEc.js} +1 -1
- package/assets/assets/{index-BHLYJHa-.js → index-Zj8hd7aE.js} +3 -3
- package/assets/assets/{react-sigma_core.esm.min-CK2U3T7S.js → react-sigma_core.esm.min-9j5NHFWR.js} +1 -1
- package/assets/assets/{v2-overview-adapter-DL1IsAM2.js → v2-overview-adapter-BsKpkQvx.js} +1 -1
- package/assets/index.html +1 -1
- package/dist/{chunk-Y2QMWZT7.js → chunk-66K6U5H5.js} +3 -3
- package/dist/{chunk-WMG365JI.js → chunk-CIYCCA2I.js} +11 -2
- package/dist/{chunk-QBZPKXFW.js → chunk-DGKSQ5QD.js} +1 -1
- package/dist/{chunk-GWRIZSIL.js → chunk-HQS2Y7HO.js} +3 -3
- package/dist/{chunk-OO64BWNB.js → chunk-IYAUKA7Z.js} +251 -222
- package/dist/{chunk-QWLKYIQ4.js → chunk-JNBPNW7P.js} +2 -2
- package/dist/{chunk-IBRZ23VQ.js → chunk-QNXQHHCP.js} +36 -13
- package/dist/{chunk-V4TITINC.js → chunk-QS262E4F.js} +9 -1
- package/dist/{chunk-7R2HFAG4.js → chunk-XCS3JXN2.js} +9 -9
- package/dist/{chunk-PCZXWOYX.js → chunk-XHRJYIJQ.js} +1 -1
- package/dist/{cli-catalog-TFCCKIE4.js → cli-catalog-MRYQK7LI.js} +3 -3
- package/dist/cli-commands-ZX7GLZZT.js +15 -0
- package/dist/cli.js +10 -10
- package/dist/{demo-server-5TX4MJIS.js → demo-server-GPNX3EXT.js} +4 -4
- package/dist/index.d.ts +12 -0
- package/dist/index.js +6 -6
- package/dist/{intelligence-service-5BYJSFLW.js → intelligence-service-LZ3MC6G6.js} +2 -2
- package/dist/mcp.js +4 -4
- package/package.json +13 -13
- package/dist/cli-commands-JEN27DWN.js +0 -15
|
@@ -147,6 +147,7 @@ import {
|
|
|
147
147
|
RatioUnits,
|
|
148
148
|
ResearchQueryStatuses,
|
|
149
149
|
ResearchRunStatuses,
|
|
150
|
+
RetrievalStatuses,
|
|
150
151
|
RunFillRefusalCodes,
|
|
151
152
|
RunKinds,
|
|
152
153
|
RunStatuses,
|
|
@@ -914,7 +915,7 @@ import {
|
|
|
914
915
|
wordpressSchemaDeployResultDtoSchema,
|
|
915
916
|
wordpressSchemaStatusResultDtoSchema,
|
|
916
917
|
wordpressStatusDtoSchema
|
|
917
|
-
} from "./chunk-
|
|
918
|
+
} from "./chunk-QS262E4F.js";
|
|
918
919
|
|
|
919
920
|
// src/intelligence-service.ts
|
|
920
921
|
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";
|
|
@@ -30902,6 +30903,7 @@ function visibilityComparisonPopulation(run, selection) {
|
|
|
30902
30903
|
answerMentioned: signals.mention,
|
|
30903
30904
|
mentionApplicable: candidate.edges.some((edge) => targets.get(edge.targetKey)?.mentionEligible === true),
|
|
30904
30905
|
citation: citationForCoverage(candidate, targets),
|
|
30906
|
+
retrievalStatus: candidate.observation.retrievalStatus ?? null,
|
|
30905
30907
|
answerText: candidate.observation.answerText,
|
|
30906
30908
|
competitorDomains: [...new Set(candidate.edges.flatMap((edge) => edge.competitorDomains))],
|
|
30907
30909
|
competitorMentions: candidate.observation.competitorMentionDomains.filter((domain) => candidate.edges.some((edge) => edge.competitorDomains.includes(domain))),
|
|
@@ -30966,6 +30968,7 @@ function loadVisibilitySnapshots(db, runIds) {
|
|
|
30966
30968
|
citedDomains: querySnapshots.citedDomains,
|
|
30967
30969
|
citedUrls: querySnapshots.citedUrls,
|
|
30968
30970
|
captureStatus: querySnapshots.captureStatus,
|
|
30971
|
+
retrievalStatus: querySnapshots.retrievalStatus,
|
|
30969
30972
|
location: querySnapshots.location,
|
|
30970
30973
|
measurementExecutionId: querySnapshots.measurementExecutionId,
|
|
30971
30974
|
requestedContext: querySnapshots.requestedContext,
|
|
@@ -31111,6 +31114,7 @@ function v2Observations(plan, revision, run, snapshots, includeEvidence = true)
|
|
|
31111
31114
|
unknownMentionTargetKeys: attribution?.unknownMentionTargetIds ?? [],
|
|
31112
31115
|
citedTargetKeys: attribution?.citedTargetIds ?? [],
|
|
31113
31116
|
citationComplete: attribution?.sourceComplete ?? false,
|
|
31117
|
+
retrievalStatus: raw.retrievalStatus ?? null,
|
|
31114
31118
|
competitorMentionDomains: signals.mentioned,
|
|
31115
31119
|
competitorCitationDomains: signals.cited,
|
|
31116
31120
|
observedCompetitorNames: includeEvidence ? observedCompetitorNames2(raw.recommendedCompetitors) : [],
|
|
@@ -31234,6 +31238,7 @@ function frozenSimpleRun(run, definition2, snapshots, includeEvidence = true) {
|
|
|
31234
31238
|
// Simple citation state comes from the stored cited domains, not from
|
|
31235
31239
|
// source-URL capture, so a saved Simple answer is never `unchecked`.
|
|
31236
31240
|
citationComplete: true,
|
|
31241
|
+
retrievalStatus: snapshot.retrievalStatus ?? null,
|
|
31237
31242
|
competitorMentionDomains: competitorSignalsForSnapshot.mentioned,
|
|
31238
31243
|
competitorCitationDomains: competitorSignalsForSnapshot.cited,
|
|
31239
31244
|
observedCompetitorNames: includeEvidence ? observedCompetitorNames2(snapshot.recommendedCompetitors) : [],
|
|
@@ -31317,6 +31322,7 @@ function legacySimpleRun(project, run, snapshots, includeEvidence = true) {
|
|
|
31317
31322
|
citedTargetKeys: snapshot.citationState === "cited" ? ["project"] : [],
|
|
31318
31323
|
// Legacy rows carry only the stored citation state (see the frozen-simple note).
|
|
31319
31324
|
citationComplete: true,
|
|
31325
|
+
retrievalStatus: snapshot.retrievalStatus ?? null,
|
|
31320
31326
|
competitorMentionDomains: [],
|
|
31321
31327
|
competitorCitationDomains: [],
|
|
31322
31328
|
observedCompetitorNames: includeEvidence ? observedCompetitorNames2(snapshot.recommendedCompetitors) : [],
|
|
@@ -37544,6 +37550,7 @@ function countPeriod(snaps, competitors2, queryClassOf, classificationAvailable,
|
|
|
37544
37550
|
let total = 0;
|
|
37545
37551
|
let cited = 0;
|
|
37546
37552
|
let citationUnknown = 0;
|
|
37553
|
+
let citationNotSearched = 0;
|
|
37547
37554
|
let competitorCited = 0;
|
|
37548
37555
|
const perProvider = /* @__PURE__ */ new Map();
|
|
37549
37556
|
const mentionedQueries = /* @__PURE__ */ new Set();
|
|
@@ -37556,9 +37563,11 @@ function countPeriod(snaps, competitors2, queryClassOf, classificationAvailable,
|
|
|
37556
37563
|
mentionedQueries.add(snap.queryId);
|
|
37557
37564
|
}
|
|
37558
37565
|
const citationKnown = snap.citationChecked !== false;
|
|
37559
|
-
|
|
37560
|
-
|
|
37561
|
-
|
|
37566
|
+
const noRetrieval = citationKnown && snap.retrievalStatus === RetrievalStatuses["not-used"];
|
|
37567
|
+
if (!citationKnown) citationUnknown += 1;
|
|
37568
|
+
else if (noRetrieval) citationNotSearched += 1;
|
|
37569
|
+
else total += 1;
|
|
37570
|
+
const isCited = citationKnown && !noRetrieval && snap.citationState === CitationStates.cited;
|
|
37562
37571
|
if (isCited) cited += 1;
|
|
37563
37572
|
const pp = perProvider.get(snap.provider) ?? { checked: 0, mentioned: 0, cited: 0 };
|
|
37564
37573
|
if (snap.answerMentioned === true || snap.answerMentioned === false) pp.checked += 1;
|
|
@@ -37603,6 +37612,7 @@ function countPeriod(snaps, competitors2, queryClassOf, classificationAvailable,
|
|
|
37603
37612
|
total,
|
|
37604
37613
|
cited,
|
|
37605
37614
|
citationUnknown,
|
|
37615
|
+
citationNotSearched,
|
|
37606
37616
|
citationEvidence: snaps.some((snapshot) => snapshot.citationChecked !== void 0),
|
|
37607
37617
|
projectCited: cited,
|
|
37608
37618
|
competitorCited,
|
|
@@ -37662,7 +37672,7 @@ function computeVisibilityCompare(input) {
|
|
|
37662
37672
|
});
|
|
37663
37673
|
const fromShare = shareCounts(fromShareCounts);
|
|
37664
37674
|
const toShare = shareCounts(toShareCounts);
|
|
37665
|
-
const citationPeriod = (c, value) => c.citationEvidence ? { ...value, excludedUnknown: c.citationUnknown } : value;
|
|
37675
|
+
const citationPeriod = (c, value) => c.citationEvidence ? { ...value, excludedUnknown: c.citationUnknown, ...c.citationNotSearched > 0 ? { excludedNoRetrieval: c.citationNotSearched } : {} } : value;
|
|
37666
37676
|
const metrics = [
|
|
37667
37677
|
metric(
|
|
37668
37678
|
"mention-share-of-voice",
|
|
@@ -37709,7 +37719,7 @@ function computeVisibilityCompare(input) {
|
|
|
37709
37719
|
const classPeriod = (snapshots, queryClass, signal) => {
|
|
37710
37720
|
if (!classificationAvailable) return { ...period(0, 0), availability: "classification-unavailable" };
|
|
37711
37721
|
const selected = snapshots.filter((snapshot) => queryClassOf(snapshot) === queryClass && (signal === "cited" || snapshot.mentionApplicable !== false));
|
|
37712
|
-
const checked = selected.filter((snapshot) => signal === "mention" ? typeof snapshot.answerMentioned === "boolean" : snapshot.citationChecked !== false);
|
|
37722
|
+
const checked = selected.filter((snapshot) => signal === "mention" ? typeof snapshot.answerMentioned === "boolean" : snapshot.citationChecked !== false && snapshot.retrievalStatus !== RetrievalStatuses["not-used"]);
|
|
37713
37723
|
const numerator = checked.filter((snapshot) => signal === "mention" ? snapshot.answerMentioned === true : snapshot.citationState === CitationStates.cited).length;
|
|
37714
37724
|
return { ...period(numerator, checked.length), excludedUnknown: selected.length - checked.length };
|
|
37715
37725
|
};
|
|
@@ -43355,7 +43365,7 @@ var routeCatalog = [
|
|
|
43355
43365
|
method: "get",
|
|
43356
43366
|
path: "/api/v1/projects/{name}/visibility-compare",
|
|
43357
43367
|
summary: "Compare AEO visibility month over month",
|
|
43358
|
-
description: "Statistically honest month-over-month AEO comparison in one call. PRIMARY metric is share of voice (brand vs competitor mentions in the same answers), which is less exposed to broad model-wide naming propensity than an absolute rate but never bypasses model continuity. Rates are pooled per-snapshot over each month (invariant to sweep count), restricted to query/provider pairs present in BOTH months, and then restricted again to providers with exactly one known, identical configured model id in both months. `continuity` reports every provider and its model evidence; changed, mixed mid-month, or legacy-unknown models are excluded. When no provider remains, metrics return a continuity-blocked verdict rather than a directional call. `from` must be a month strictly before `to`. Adds separate branded/non-brand mention and cited rates with classification-unavailable rather than pooled fallback. Advanced class metrics read frozen Property/market/execution assignments and reuse each answer once per class. Without a scope or marketKey the four original metrics keep the project frame (provider/location narrow it the same way for Simple and Advanced) and Advanced class metrics carry their own `classComparison` cohort. A scope or marketKey answers entirely from the frozen frame and is refused when either month holds runs whose plan cannot be reconstructed (schema v1). On frozen frames, answers with incomplete source capture leave every citation figure and are counted in `excludedUnknown`. A silent upstream version bump under an unchanged configured id remains undetectable. competitorIdentityChangedAt is when the project's competitor names last changed (a tracked competitor's curated or stored auto-detected names (a block counts only when it removes a stored name), a detection pass or a write that moved a market-only competitor's learned names, or a published revision that renames a market pin). Share of voice reads both months with the tracked competitors' current names only, so a comparison quoted before a change to those names was restated; a market pin or learned-name change moves the time without changing share of voice. A scoped comparison (a group, market or property scope, or a marketKey) reads frozen plan history and carries no competitorIdentityChangedAt.",
|
|
43368
|
+
description: "Statistically honest month-over-month AEO comparison in one call. PRIMARY metric is share of voice (brand vs competitor mentions in the same answers), which is less exposed to broad model-wide naming propensity than an absolute rate but never bypasses model continuity. Rates are pooled per-snapshot over each month (invariant to sweep count), restricted to query/provider pairs present in BOTH months, and then restricted again to providers with exactly one known, identical configured model id in both months. `continuity` reports every provider and its model evidence; changed, mixed mid-month, or legacy-unknown models are excluded. When no provider remains, metrics return a continuity-blocked verdict rather than a directional call. `from` must be a month strictly before `to`. Adds separate branded/non-brand mention and cited rates with classification-unavailable rather than pooled fallback. Advanced class metrics read frozen Property/market/execution assignments and reuse each answer once per class. Without a scope or marketKey the four original metrics keep the project frame (provider/location narrow it the same way for Simple and Advanced) and Advanced class metrics carry their own `classComparison` cohort. A scope or marketKey answers entirely from the frozen frame and is refused when either month holds runs whose plan cannot be reconstructed (schema v1). On frozen frames, answers with incomplete source capture leave every citation figure and are counted in `excludedUnknown`. An answer the provider wrote with no retrieval step at all (retrievalStatus of not-used) cites nothing by construction, so it also leaves the cited denominator and is counted in `excludedNoRetrieval`; it stays in the mention denominator, since brand recall does not need search. A silent upstream version bump under an unchanged configured id remains undetectable. competitorIdentityChangedAt is when the project's competitor names last changed (a tracked competitor's curated or stored auto-detected names (a block counts only when it removes a stored name), a detection pass or a write that moved a market-only competitor's learned names, or a published revision that renames a market pin). Share of voice reads both months with the tracked competitors' current names only, so a comparison quoted before a change to those names was restated; a market pin or learned-name change moves the time without changing share of voice. A scoped comparison (a group, market or property scope, or a marketKey) reads frozen plan history and carries no competitorIdentityChangedAt.",
|
|
43359
43369
|
tags: ["analytics"],
|
|
43360
43370
|
parameters: [
|
|
43361
43371
|
nameParameter,
|
|
@@ -87486,7 +87496,8 @@ var SPECS = [
|
|
|
87486
87496
|
kind: RunKinds["gtm-sync"],
|
|
87487
87497
|
connection: googleMarketingConnection("gtm"),
|
|
87488
87498
|
syncCommand: (name) => `canonry gtm sync ${name}`,
|
|
87489
|
-
causeCheckIds: ["gtm.auth.connection", "gtm.auth.scopes", "gtm.container.context", "gtm.api.reachable"]
|
|
87499
|
+
causeCheckIds: ["gtm.auth.connection", "gtm.auth.scopes", "gtm.container.context", "gtm.api.reachable"],
|
|
87500
|
+
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>\`.`
|
|
87490
87501
|
},
|
|
87491
87502
|
{
|
|
87492
87503
|
prefix: "gbp",
|
|
@@ -87582,12 +87593,13 @@ function gradeSyncFailures(ctx, spec) {
|
|
|
87582
87593
|
const errorText = state.latestError ?? "no error was recorded";
|
|
87583
87594
|
const shownError = errorText.length > SUMMARY_ERROR_LIMIT ? `${truncateUtf16(errorText, SUMMARY_ERROR_LIMIT)}...` : errorText;
|
|
87584
87595
|
const lastSuccessText = state.lastSuccessAt ?? (connection.since ? `none since connecting at ${connection.since}` : "never");
|
|
87596
|
+
const notFound2 = spec.notFoundRemediation && /\bwas not found\b/i.test(errorText);
|
|
87585
87597
|
return {
|
|
87586
87598
|
status: CheckStatuses.fail,
|
|
87587
87599
|
code: code("repeated-failures"),
|
|
87588
87600
|
urgent: true,
|
|
87589
87601
|
summary: `The last ${state.consecutiveFailures} ${spec.label} syncs failed (last success: ${lastSuccessText}). Latest error: ${shownError}`,
|
|
87590
|
-
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)}\`.`,
|
|
87602
|
+
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)}\`.`,
|
|
87591
87603
|
details
|
|
87592
87604
|
};
|
|
87593
87605
|
}
|
|
@@ -88812,12 +88824,23 @@ var sourceConnectedCheck = {
|
|
|
88812
88824
|
}
|
|
88813
88825
|
const errored = activeSources.filter((s) => s.status === "error");
|
|
88814
88826
|
if (errored.length > 0 && errored.length === activeSources.length) {
|
|
88827
|
+
const streaks = errored.map((s) => readSyncRunState(ctx.db, ctx.project.id, RunKinds["traffic-sync"], { sourceId: s.id }));
|
|
88828
|
+
const recovering = streaks.every((state) => state.latestStatus === RunStatuses.failed && !state.repeatedFailure);
|
|
88829
|
+
const lastDataAt = errored.map((s) => s.lastSyncedAt).filter((at) => !!at).sort().at(-1) ?? null;
|
|
88830
|
+
const failuresInARow = Math.min(...streaks.map((state) => state.consecutiveFailures));
|
|
88831
|
+
const sinceText = lastDataAt ? `No new data since ${lastDataAt}.` : "No data has arrived yet.";
|
|
88815
88832
|
return {
|
|
88816
|
-
status: CheckStatuses.fail,
|
|
88817
|
-
code: "traffic.source.all-errored",
|
|
88818
|
-
summary: `All ${activeSources.length} active traffic source(s) are in error state.
|
|
88833
|
+
status: recovering ? CheckStatuses.warn : CheckStatuses.fail,
|
|
88834
|
+
code: recovering ? "traffic.source.all-errored-recently" : "traffic.source.all-errored",
|
|
88835
|
+
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}`,
|
|
88819
88836
|
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.",
|
|
88820
|
-
details: {
|
|
88837
|
+
details: {
|
|
88838
|
+
sourceCount: activeSources.length,
|
|
88839
|
+
pausedCount: sources.length - activeSources.length,
|
|
88840
|
+
erroredIds: errored.map((s) => s.id),
|
|
88841
|
+
failuresInARow,
|
|
88842
|
+
lastSyncedAt: lastDataAt
|
|
88843
|
+
}
|
|
88821
88844
|
};
|
|
88822
88845
|
}
|
|
88823
88846
|
if (errored.length > 0) {
|
|
@@ -10843,7 +10843,15 @@ var visibilityCompareMetricPeriodSchema = z23.object({
|
|
|
10843
10843
|
* source capture for a class cited rate, and, on frames that record capture
|
|
10844
10844
|
* completeness (Advanced), for the pooled cited rate and cited share of voice.
|
|
10845
10845
|
*/
|
|
10846
|
-
excludedUnknown: z23.number().int().nonnegative().optional()
|
|
10846
|
+
excludedUnknown: z23.number().int().nonnegative().optional(),
|
|
10847
|
+
/**
|
|
10848
|
+
* Cited-rate rows the provider answered with no retrieval step at all
|
|
10849
|
+
* (`retrievalStatus = 'not-used'`). They cite nothing by construction, so
|
|
10850
|
+
* they leave the cited denominator rather than count as a searched miss;
|
|
10851
|
+
* they remain in the mention denominator, since brand recall does not need
|
|
10852
|
+
* search. Only set on frames that record retrieval status.
|
|
10853
|
+
*/
|
|
10854
|
+
excludedNoRetrieval: z23.number().int().nonnegative().optional()
|
|
10847
10855
|
});
|
|
10848
10856
|
var visibilityCompareMetricKeySchema = z23.enum([
|
|
10849
10857
|
"mention-share-of-voice",
|
|
@@ -31,7 +31,7 @@ import {
|
|
|
31
31
|
trackFeatureCompleted,
|
|
32
32
|
trackIntegrationConnection,
|
|
33
33
|
waitForServerRuntimeStartup
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-IYAUKA7Z.js";
|
|
35
35
|
import {
|
|
36
36
|
clearDashboardPassword,
|
|
37
37
|
configExists,
|
|
@@ -50,7 +50,7 @@ import {
|
|
|
50
50
|
saveConfigPatch,
|
|
51
51
|
shouldPrintServeSkillsNudge,
|
|
52
52
|
withBootstrapProviderDefaults
|
|
53
|
-
} from "./chunk-
|
|
53
|
+
} from "./chunk-CIYCCA2I.js";
|
|
54
54
|
import {
|
|
55
55
|
emitJsonl,
|
|
56
56
|
getBoolean,
|
|
@@ -64,7 +64,7 @@ import {
|
|
|
64
64
|
resolveCliAccess,
|
|
65
65
|
stringOption,
|
|
66
66
|
unknownSubcommand
|
|
67
|
-
} from "./chunk-
|
|
67
|
+
} from "./chunk-DGKSQ5QD.js";
|
|
68
68
|
import {
|
|
69
69
|
DEFAULT_DEMO_TRUSTED_PROXIES,
|
|
70
70
|
trustedProxiesProblem,
|
|
@@ -77,7 +77,7 @@ import {
|
|
|
77
77
|
resolveDiscoveredGscSitemapUrls,
|
|
78
78
|
runMeasurementDraftAction,
|
|
79
79
|
submitGscSitemapBatches
|
|
80
|
-
} from "./chunk-
|
|
80
|
+
} from "./chunk-XHRJYIJQ.js";
|
|
81
81
|
import {
|
|
82
82
|
CANONRY_DISCORD_URL,
|
|
83
83
|
CANONRY_ISSUES_URL,
|
|
@@ -122,7 +122,7 @@ import {
|
|
|
122
122
|
rawEventSamples,
|
|
123
123
|
readMarketCompetitorNames,
|
|
124
124
|
runs
|
|
125
|
-
} from "./chunk-
|
|
125
|
+
} from "./chunk-QNXQHHCP.js";
|
|
126
126
|
import {
|
|
127
127
|
AdsDeliverySnapshotStatuses,
|
|
128
128
|
AdsHistoricalCampaignRollupStatuses,
|
|
@@ -278,7 +278,7 @@ import {
|
|
|
278
278
|
visibilityCompareSelectionSchema,
|
|
279
279
|
visibilityReportRequestSchema,
|
|
280
280
|
winnabilityClassSchema
|
|
281
|
-
} from "./chunk-
|
|
281
|
+
} from "./chunk-QS262E4F.js";
|
|
282
282
|
|
|
283
283
|
// src/cli-commands/sentiment.ts
|
|
284
284
|
import "zod";
|
|
@@ -586,7 +586,7 @@ function parseDemoTrustedProxies(values) {
|
|
|
586
586
|
async function demoCommand(options) {
|
|
587
587
|
const { host, port } = parseDemoListenOptions(options);
|
|
588
588
|
const trustProxy = parseDemoTrustedProxies(options.trustProxy);
|
|
589
|
-
const { createDemoServer } = await import("./demo-server-
|
|
589
|
+
const { createDemoServer } = await import("./demo-server-GPNX3EXT.js");
|
|
590
590
|
const app = await createDemoServer({ trustProxy });
|
|
591
591
|
let stopping = false;
|
|
592
592
|
const stop = () => {
|
|
@@ -1000,7 +1000,7 @@ No DB writes performed. Re-run without --dry-run to apply.`);
|
|
|
1000
1000
|
}
|
|
1001
1001
|
}
|
|
1002
1002
|
async function backfillInsightsCommand(project2, opts) {
|
|
1003
|
-
const { IntelligenceService } = await import("./intelligence-service-
|
|
1003
|
+
const { IntelligenceService } = await import("./intelligence-service-LZ3MC6G6.js");
|
|
1004
1004
|
const config = loadConfig();
|
|
1005
1005
|
const db = createClient(config.database);
|
|
1006
1006
|
migrate(db);
|
|
@@ -19378,7 +19378,7 @@ var SYSTEM_CLI_COMMANDS = [
|
|
|
19378
19378
|
options: { access: stringOption() },
|
|
19379
19379
|
run: async (input) => {
|
|
19380
19380
|
if (input.positionals.length > 1) throw usageError("Expected at most one command group");
|
|
19381
|
-
const [{ printCliCatalog }, { REGISTERED_CLI_COMMANDS: REGISTERED_CLI_COMMANDS2 }] = await Promise.all([import("./cli-catalog-
|
|
19381
|
+
const [{ printCliCatalog }, { REGISTERED_CLI_COMMANDS: REGISTERED_CLI_COMMANDS2 }] = await Promise.all([import("./cli-catalog-MRYQK7LI.js"), import("./cli-commands-ZX7GLZZT.js")]);
|
|
19382
19382
|
printCliCatalog(REGISTERED_CLI_COMMANDS2, input.format, input.positionals[0], getString(input.values, "access"));
|
|
19383
19383
|
}
|
|
19384
19384
|
},
|
|
@@ -163,7 +163,7 @@ import {
|
|
|
163
163
|
trafficSeriesGranularitySchema,
|
|
164
164
|
visibilityCompareSelectionSchema,
|
|
165
165
|
visibilityReportRequestSchema
|
|
166
|
-
} from "./chunk-
|
|
166
|
+
} from "./chunk-QS262E4F.js";
|
|
167
167
|
|
|
168
168
|
// src/package-version.ts
|
|
169
169
|
import { createRequire } from "module";
|
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
buildCliCatalog,
|
|
4
4
|
printCliCatalog,
|
|
5
5
|
renderTopLevelHelp
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-66K6U5H5.js";
|
|
7
|
+
import "./chunk-DGKSQ5QD.js";
|
|
8
8
|
import "./chunk-HGMYEDAQ.js";
|
|
9
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-QS262E4F.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-XCS3JXN2.js";
|
|
4
|
+
import "./chunk-IYAUKA7Z.js";
|
|
5
|
+
import "./chunk-CIYCCA2I.js";
|
|
6
|
+
import "./chunk-DGKSQ5QD.js";
|
|
7
|
+
import "./chunk-RB2F4D3Z.js";
|
|
8
|
+
import "./chunk-JNBPNW7P.js";
|
|
9
|
+
import "./chunk-XHRJYIJQ.js";
|
|
10
|
+
import "./chunk-HGMYEDAQ.js";
|
|
11
|
+
import "./chunk-QNXQHHCP.js";
|
|
12
|
+
import "./chunk-QS262E4F.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-
|
|
5
|
+
} from "./chunk-HQS2Y7HO.js";
|
|
6
6
|
import {
|
|
7
7
|
accessFilterFromArgs,
|
|
8
8
|
dispatchRegisteredCommand,
|
|
9
9
|
printCliCatalog
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-66K6U5H5.js";
|
|
11
11
|
import {
|
|
12
12
|
REGISTERED_CLI_COMMANDS,
|
|
13
13
|
buildSetupState,
|
|
14
14
|
consumePendingServeHandoff,
|
|
15
15
|
serveCommand
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-XCS3JXN2.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-
|
|
31
|
-
import "./chunk-
|
|
30
|
+
} from "./chunk-IYAUKA7Z.js";
|
|
31
|
+
import "./chunk-CIYCCA2I.js";
|
|
32
32
|
import {
|
|
33
33
|
resolveCliAccess
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-DGKSQ5QD.js";
|
|
35
35
|
import "./chunk-RB2F4D3Z.js";
|
|
36
|
-
import "./chunk-
|
|
37
|
-
import "./chunk-
|
|
36
|
+
import "./chunk-JNBPNW7P.js";
|
|
37
|
+
import "./chunk-XHRJYIJQ.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-
|
|
45
|
+
import "./chunk-QNXQHHCP.js";
|
|
46
46
|
import {
|
|
47
47
|
OperationAccesses
|
|
48
|
-
} from "./chunk-
|
|
48
|
+
} from "./chunk-QS262E4F.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-
|
|
8
|
+
} from "./chunk-JNBPNW7P.js";
|
|
9
9
|
import {
|
|
10
10
|
PACKAGE_VERSION,
|
|
11
11
|
canonryMcpTools
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-XHRJYIJQ.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-
|
|
89
|
+
} from "./chunk-QNXQHHCP.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-
|
|
119
|
+
} from "./chunk-QS262E4F.js";
|
|
120
120
|
|
|
121
121
|
// src/demo-server.ts
|
|
122
122
|
import { dirname, join as join2 } from "path";
|
package/dist/index.d.ts
CHANGED
|
@@ -33581,6 +33581,10 @@ declare const sentimentInstallConfigSchema: z.ZodObject<{
|
|
|
33581
33581
|
}, z.core.$strict>;
|
|
33582
33582
|
type SentimentInstallConfigInput = z.input<typeof sentimentInstallConfigSchema>;
|
|
33583
33583
|
|
|
33584
|
+
/** Reasoning levels Aero can ask a model for, lowest to highest (pi-agent-core's `ThinkingLevel`). */
|
|
33585
|
+
declare const AGENT_REASONING_LEVELS: readonly ["off", "minimal", "low", "medium", "high", "xhigh", "max"];
|
|
33586
|
+
type AgentReasoningLevel = (typeof AGENT_REASONING_LEVELS)[number];
|
|
33587
|
+
|
|
33584
33588
|
type GoogleConnectionType = 'gsc' | 'ga4' | 'gbp';
|
|
33585
33589
|
interface ProviderConfigEntry {
|
|
33586
33590
|
apiKey?: string;
|
|
@@ -33909,6 +33913,14 @@ interface AgentConfigEntry {
|
|
|
33909
33913
|
* overrides it; resolved by `resolveAgentAllowViewers`.
|
|
33910
33914
|
*/
|
|
33911
33915
|
allowViewers?: boolean | null;
|
|
33916
|
+
/**
|
|
33917
|
+
* How hard Aero asks the model to reason on every turn, one of
|
|
33918
|
+
* `AGENT_REASONING_LEVELS`. Absent uses the provider's default
|
|
33919
|
+
* (`PROVIDER_DEFAULT_REASONING`: `low` for OpenAI, `off` elsewhere). The model
|
|
33920
|
+
* clamps a level it does not support. `CANONRY_AGENT_REASONING` overrides it;
|
|
33921
|
+
* resolved by `resolveAgentReasoning`.
|
|
33922
|
+
*/
|
|
33923
|
+
reasoning?: AgentReasoningLevel | null;
|
|
33912
33924
|
}
|
|
33913
33925
|
interface DashboardConfigEntry {
|
|
33914
33926
|
/**
|
package/dist/index.js
CHANGED
|
@@ -3,15 +3,15 @@ import {
|
|
|
3
3
|
createGoogleMarketingCredentialStore,
|
|
4
4
|
createGoogleMarketingRuntime,
|
|
5
5
|
createServer
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-IYAUKA7Z.js";
|
|
7
7
|
import {
|
|
8
8
|
loadConfig
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-CIYCCA2I.js";
|
|
10
|
+
import "./chunk-JNBPNW7P.js";
|
|
11
|
+
import "./chunk-XHRJYIJQ.js";
|
|
12
12
|
import "./chunk-HGMYEDAQ.js";
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
13
|
+
import "./chunk-QNXQHHCP.js";
|
|
14
|
+
import "./chunk-QS262E4F.js";
|
|
15
15
|
export {
|
|
16
16
|
GoogleMarketingRuntimeError,
|
|
17
17
|
createGoogleMarketingCredentialStore,
|
package/dist/mcp.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
autoSyncSkills
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-HQS2Y7HO.js";
|
|
4
4
|
import {
|
|
5
5
|
createApiClient,
|
|
6
6
|
createCanonryMcpServer
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-CIYCCA2I.js";
|
|
8
|
+
import "./chunk-XHRJYIJQ.js";
|
|
9
9
|
import "./chunk-HGMYEDAQ.js";
|
|
10
10
|
import {
|
|
11
11
|
isReadOnlyKey,
|
|
12
12
|
updateCheckEnvOptOut
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-QS262E4F.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.
|
|
3
|
+
"version": "7.47.1",
|
|
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": [
|
|
@@ -87,32 +87,32 @@
|
|
|
87
87
|
"tsx": "^4.19.0",
|
|
88
88
|
"@canonry/canonry-web": "0.0.0",
|
|
89
89
|
"@canonry/canonry-api-client": "0.0.0",
|
|
90
|
-
"@canonry/canonry-api-routes": "0.0.0",
|
|
91
|
-
"@canonry/canonry-config": "0.0.0",
|
|
92
90
|
"@canonry/canonry-contracts": "0.0.0",
|
|
91
|
+
"@canonry/canonry-config": "0.0.0",
|
|
93
92
|
"@canonry/canonry-db": "0.0.0",
|
|
93
|
+
"@canonry/canonry-api-routes": "0.0.0",
|
|
94
94
|
"@canonry/canonry-integration-bing": "0.0.0",
|
|
95
|
-
"@canonry/canonry-integration-cloud-run": "0.0.0",
|
|
96
|
-
"@canonry/canonry-integration-cloudflare-queue": "0.0.0",
|
|
97
95
|
"@canonry/canonry-integration-cloudflare-worker": "0.0.0",
|
|
98
|
-
"@canonry/canonry-integration-
|
|
96
|
+
"@canonry/canonry-integration-cloudflare-queue": "0.0.0",
|
|
97
|
+
"@canonry/canonry-integration-cloud-run": "0.0.0",
|
|
98
|
+
"@canonry/canonry-integration-google": "0.0.0",
|
|
99
99
|
"@canonry/canonry-integration-google-ads": "0.0.0",
|
|
100
100
|
"@canonry/canonry-integration-google-business-profile": "0.0.0",
|
|
101
|
-
"@canonry/canonry-integration-google-tag-manager": "0.0.0",
|
|
102
|
-
"@canonry/canonry-integration-google": "0.0.0",
|
|
103
101
|
"@canonry/canonry-integration-google-places": "0.0.0",
|
|
102
|
+
"@canonry/canonry-integration-commoncrawl": "0.0.0",
|
|
103
|
+
"@canonry/canonry-integration-google-tag-manager": "0.0.0",
|
|
104
|
+
"@canonry/canonry-integration-openai-ads": "0.0.0",
|
|
104
105
|
"@canonry/canonry-integration-traffic": "0.0.0",
|
|
105
106
|
"@canonry/canonry-integration-wordpress": "0.0.0",
|
|
106
|
-
"@canonry/canonry-integration-openai-ads": "0.0.0",
|
|
107
|
-
"@canonry/canonry-intelligence": "0.0.0",
|
|
108
107
|
"@canonry/canonry-provider-cdp": "0.0.0",
|
|
109
|
-
"@canonry/canonry-
|
|
108
|
+
"@canonry/canonry-intelligence": "0.0.0",
|
|
110
109
|
"@canonry/canonry-provider-gemini": "0.0.0",
|
|
111
|
-
"@canonry/canonry-provider-muse": "0.0.0",
|
|
112
110
|
"@canonry/canonry-provider-local": "0.0.0",
|
|
111
|
+
"@canonry/canonry-provider-muse": "0.0.0",
|
|
113
112
|
"@canonry/canonry-provider-openai": "0.0.0",
|
|
113
|
+
"@canonry/canonry-provider-perplexity": "0.0.0",
|
|
114
114
|
"@canonry/canonry-integration-typesafe": "0.0.0",
|
|
115
|
-
"@canonry/canonry-provider-
|
|
115
|
+
"@canonry/canonry-provider-claude": "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-7R2HFAG4.js";
|
|
4
|
-
import "./chunk-OO64BWNB.js";
|
|
5
|
-
import "./chunk-WMG365JI.js";
|
|
6
|
-
import "./chunk-QBZPKXFW.js";
|
|
7
|
-
import "./chunk-RB2F4D3Z.js";
|
|
8
|
-
import "./chunk-QWLKYIQ4.js";
|
|
9
|
-
import "./chunk-PCZXWOYX.js";
|
|
10
|
-
import "./chunk-HGMYEDAQ.js";
|
|
11
|
-
import "./chunk-IBRZ23VQ.js";
|
|
12
|
-
import "./chunk-V4TITINC.js";
|
|
13
|
-
export {
|
|
14
|
-
REGISTERED_CLI_COMMANDS
|
|
15
|
-
};
|