@canonry/canonry 7.14.0 → 7.16.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.
- package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +5 -2
- package/assets/assets/{AuditHistoryPanel-gAkqWz9z.js → AuditHistoryPanel-Cl9tUvSZ.js} +1 -1
- package/assets/assets/{BacklinksPage-C67DtHo8.js → BacklinksPage-CTeTJ9dh.js} +1 -1
- package/assets/assets/{HistoryPage-BQuW6Z6m.js → HistoryPage-DpOoXr2P.js} +1 -1
- package/assets/assets/{MeasurementPropertyPage-B1XS6DR0.js → MeasurementPropertyPage-DxXsgM25.js} +1 -1
- package/assets/assets/{ProjectPage-CV_7bOA7.js → ProjectPage-By9arjLJ.js} +1 -1
- package/assets/assets/{RunsPage-CJYihZYC.js → RunsPage-CfDi7I1z.js} +1 -1
- package/assets/assets/{SettingsPage-Dd3J2DQE.js → SettingsPage-BHDb1apK.js} +1 -1
- package/assets/assets/{SiteHealthSection-iktyuzt2.js → SiteHealthSection-DQZyy4P_.js} +3 -3
- package/assets/assets/{TrafficPage-CWjK7F3j.js → TrafficPage-DX_vN2RL.js} +1 -1
- package/assets/assets/{TrafficSourceDetailPage-D4_AXQNE.js → TrafficSourceDetailPage-Cg92zrtZ.js} +1 -1
- package/assets/assets/{extract-error-message-Cxefvthz.js → extract-error-message-BKxVCbov.js} +1 -1
- package/assets/assets/index-DoQJETc6.js +86 -0
- package/assets/assets/{react-sigma_core.esm.min-DDEPa7AV.js → react-sigma_core.esm.min-BhqZcSgh.js} +1 -1
- package/assets/assets/{v2-overview-adapter-CLxlMdb2.js → v2-overview-adapter-DZ5YsE_G.js} +1 -1
- package/assets/index.html +1 -1
- package/dist/{chunk-WHVEDCHY.js → chunk-2S7U2YHI.js} +2 -2
- package/dist/{chunk-ZHXOR2LJ.js → chunk-3ZGBSHZ2.js} +2 -2
- package/dist/{chunk-A25FO3Z5.js → chunk-6LS2R477.js} +5671 -5399
- package/dist/{chunk-4LQ4HKVK.js → chunk-KDWTNI4Z.js} +2 -2
- package/dist/{chunk-LUQ5G5OO.js → chunk-O6XPXEN6.js} +3 -3
- package/dist/{chunk-EZRBFH77.js → chunk-SPZRSKCF.js} +859 -455
- package/dist/{chunk-KXHPQMBP.js → chunk-VWSUFTW5.js} +43 -20
- package/dist/cli.js +52 -9
- package/dist/{demo-server-SIATTXXS.js → demo-server-6OE3H2KL.js} +4 -4
- package/dist/index.js +6 -6
- package/dist/{intelligence-service-UEEVETII.js → intelligence-service-USSTKAKC.js} +2 -2
- package/dist/mcp.js +4 -4
- package/package.json +15 -15
- package/assets/assets/index-BbmiGIM_.js +0 -86
|
@@ -20,20 +20,20 @@ import {
|
|
|
20
20
|
saveConfig,
|
|
21
21
|
saveConfigPatch,
|
|
22
22
|
sentimentInstallReadiness
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-3ZGBSHZ2.js";
|
|
24
24
|
import {
|
|
25
25
|
computeFactorAverages,
|
|
26
26
|
deleteSiteCrawlGraphLayout,
|
|
27
27
|
persistSiteCrawlGraphLayout,
|
|
28
28
|
prepareSiteCrawlGraphLayout,
|
|
29
29
|
recordedSharePct
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-2S7U2YHI.js";
|
|
31
31
|
import {
|
|
32
32
|
CanonryMcpToolNames,
|
|
33
33
|
CliError,
|
|
34
34
|
PACKAGE_VERSION,
|
|
35
35
|
canonryMcpTools
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-KDWTNI4Z.js";
|
|
37
37
|
import {
|
|
38
38
|
CC_CACHE_DIR,
|
|
39
39
|
DUCKDB_SPEC,
|
|
@@ -217,7 +217,7 @@ import {
|
|
|
217
217
|
siteLivenessState,
|
|
218
218
|
toAlertView,
|
|
219
219
|
usageCounters
|
|
220
|
-
} from "./chunk-
|
|
220
|
+
} from "./chunk-SPZRSKCF.js";
|
|
221
221
|
import {
|
|
222
222
|
AGENT_MEMORY_VALUE_MAX_BYTES,
|
|
223
223
|
AGENT_NONE,
|
|
@@ -238,6 +238,7 @@ import {
|
|
|
238
238
|
DEFAULT_VIEWER_RESEARCH_DAILY_RUN_LIMIT,
|
|
239
239
|
DiscoveryCompetitorTypes,
|
|
240
240
|
FEEDBACK_LIMITS,
|
|
241
|
+
GBP_NO_SELECTED_LOCATIONS_ERROR,
|
|
241
242
|
GOOGLE_ADS_CAMPAIGN_METRICS_MAX_CAMPAIGNS,
|
|
242
243
|
GOOGLE_ADS_CAMPAIGN_METRICS_MAX_DAYS,
|
|
243
244
|
GOOGLE_ADS_CAMPAIGN_METRICS_MAX_ROWS,
|
|
@@ -328,6 +329,7 @@ import {
|
|
|
328
329
|
deriveSiteHealthState,
|
|
329
330
|
describeBatchIneligibility,
|
|
330
331
|
describeError,
|
|
332
|
+
describeFetchError,
|
|
331
333
|
detectAgentRuntime,
|
|
332
334
|
determineAnswerMentioned,
|
|
333
335
|
dollarsToMicros,
|
|
@@ -430,7 +432,7 @@ import {
|
|
|
430
432
|
winnabilityClassLabel,
|
|
431
433
|
withRetry,
|
|
432
434
|
withSkippedProviders
|
|
433
|
-
} from "./chunk-
|
|
435
|
+
} from "./chunk-6LS2R477.js";
|
|
434
436
|
|
|
435
437
|
// src/runtime-context.ts
|
|
436
438
|
function cliRuntimeContext(env = process.env, stdio = process) {
|
|
@@ -1597,15 +1599,16 @@ var GoogleAdsClient = class {
|
|
|
1597
1599
|
if (includeLoginCustomerId && this.#loginCustomerId) {
|
|
1598
1600
|
headers["login-customer-id"] = this.#loginCustomerId;
|
|
1599
1601
|
}
|
|
1602
|
+
const url = `${GOOGLE_ADS_API_BASE}${path9}`;
|
|
1600
1603
|
let response;
|
|
1601
1604
|
try {
|
|
1602
|
-
response = await this.#fetch(
|
|
1605
|
+
response = await this.#fetch(url, {
|
|
1603
1606
|
...init,
|
|
1604
1607
|
headers,
|
|
1605
1608
|
signal: AbortSignal.timeout(this.#requestTimeoutMs)
|
|
1606
1609
|
});
|
|
1607
1610
|
} catch (error) {
|
|
1608
|
-
const detail =
|
|
1611
|
+
const detail = describeFetchError(error, url);
|
|
1609
1612
|
throw new GoogleAdsApiError(
|
|
1610
1613
|
`Google Ads API request failed: ${sanitizeText(detail, this.#secrets())}`
|
|
1611
1614
|
);
|
|
@@ -8042,7 +8045,7 @@ function nonBlank(value) {
|
|
|
8042
8045
|
return trimmed ? trimmed : void 0;
|
|
8043
8046
|
}
|
|
8044
8047
|
function resolveBuildCommit(env = process.env) {
|
|
8045
|
-
const embedded = true ? "
|
|
8048
|
+
const embedded = true ? "27c13aa5394b95a729a483c1d7062fc4be42361f" : void 0;
|
|
8046
8049
|
return nonBlank(embedded) ?? nonBlank(env.CANONRY_COMMIT);
|
|
8047
8050
|
}
|
|
8048
8051
|
function resolveInstanceIdentity(env = process.env) {
|
|
@@ -11005,7 +11008,7 @@ async function executeGbpSync(db, runId, projectId, opts) {
|
|
|
11005
11008
|
locationRows = locationRows.filter((l) => wanted.has(l.locationName));
|
|
11006
11009
|
}
|
|
11007
11010
|
if (locationRows.length === 0) {
|
|
11008
|
-
throw new Error(
|
|
11011
|
+
throw new Error(GBP_NO_SELECTED_LOCATIONS_ERROR);
|
|
11009
11012
|
}
|
|
11010
11013
|
locationRows = await refreshSelectedLocationProfiles(db, projectId, accessToken, locationRows);
|
|
11011
11014
|
const daysOfMetrics = opts.daysOfMetrics ?? DEFAULT_DAYS_OF_METRICS;
|
|
@@ -15453,27 +15456,47 @@ function gaRefreshDays(now = /* @__PURE__ */ new Date()) {
|
|
|
15453
15456
|
const reach = inclusiveDayCount(`${reportMonth}-01`, now.toISOString().slice(0, 10)) ?? 0;
|
|
15454
15457
|
return Math.max(30, reach);
|
|
15455
15458
|
}
|
|
15459
|
+
function queuedRun(result2) {
|
|
15460
|
+
const record2 = asRecord(result2);
|
|
15461
|
+
const runId = record2?.runId ?? record2?.id;
|
|
15462
|
+
const runStatus = record2?.status;
|
|
15463
|
+
return {
|
|
15464
|
+
runId: typeof runId === "string" ? runId : null,
|
|
15465
|
+
runStatus: typeof runStatus === "string" ? runStatus : null
|
|
15466
|
+
};
|
|
15467
|
+
}
|
|
15456
15468
|
async function refreshAllIntegrations(client, projectName, now = /* @__PURE__ */ new Date()) {
|
|
15457
15469
|
const integrations = [
|
|
15458
|
-
{ name: "gsc", run: () => client.gscSync(projectName, {}) },
|
|
15459
|
-
{ name: "bing", run: () => client.bingInspectSitemap(projectName, {}) },
|
|
15460
|
-
{ name: "ga", run: () => client.gaSync(projectName, { days: gaRefreshDays(now) }) },
|
|
15461
|
-
{ name: "gbp", run: () => client.triggerGbpSync(projectName, {}) },
|
|
15470
|
+
{ name: "gsc", completion: "queued", run: () => client.gscSync(projectName, {}) },
|
|
15471
|
+
{ name: "bing", completion: "queued", run: () => client.bingInspectSitemap(projectName, {}) },
|
|
15472
|
+
{ name: "ga", completion: "synchronous", run: () => client.gaSync(projectName, { days: gaRefreshDays(now) }) },
|
|
15473
|
+
{ name: "gbp", completion: "queued", run: () => client.triggerGbpSync(projectName, {}) },
|
|
15462
15474
|
// `ads` remains the OpenAI / ChatGPT Ads integration. For scheduled
|
|
15463
15475
|
// refreshes, Google providers have explicit names and fan out only here.
|
|
15464
|
-
{ name: "ads", run: () => client.triggerAdsSync(projectName) },
|
|
15465
|
-
{ name: "google-ads", run: () => client.triggerGoogleAdsSync(projectName) },
|
|
15466
|
-
{ name: "gtm", run: () => client.triggerGtmSync(projectName) }
|
|
15476
|
+
{ name: "ads", completion: "queued", run: () => client.triggerAdsSync(projectName) },
|
|
15477
|
+
{ name: "google-ads", completion: "queued", run: () => client.triggerGoogleAdsSync(projectName) },
|
|
15478
|
+
{ name: "gtm", completion: "queued", run: () => client.triggerGtmSync(projectName) }
|
|
15467
15479
|
];
|
|
15468
15480
|
const results = await Promise.allSettled(integrations.map((i) => i.run()));
|
|
15469
15481
|
results.forEach((result2, idx) => {
|
|
15470
|
-
const integration = integrations[idx]
|
|
15471
|
-
if (result2.status === "
|
|
15472
|
-
log19.info("integration.refreshed", { projectName, integration });
|
|
15473
|
-
} else {
|
|
15482
|
+
const { name: integration, completion } = integrations[idx];
|
|
15483
|
+
if (result2.status === "rejected") {
|
|
15474
15484
|
const reason = result2.reason;
|
|
15475
15485
|
const message = describeError(reason);
|
|
15476
15486
|
log19.warn("integration.refresh-failed", { projectName, integration, error: message });
|
|
15487
|
+
return;
|
|
15488
|
+
}
|
|
15489
|
+
switch (completion) {
|
|
15490
|
+
case "synchronous":
|
|
15491
|
+
log19.info("integration.refreshed", { projectName, integration });
|
|
15492
|
+
return;
|
|
15493
|
+
case "queued":
|
|
15494
|
+
log19.info("integration.queued", { projectName, integration, ...queuedRun(result2.value) });
|
|
15495
|
+
return;
|
|
15496
|
+
default: {
|
|
15497
|
+
const _exhaustive = completion;
|
|
15498
|
+
return _exhaustive;
|
|
15499
|
+
}
|
|
15477
15500
|
}
|
|
15478
15501
|
});
|
|
15479
15502
|
}
|
package/dist/cli.js
CHANGED
|
@@ -33,11 +33,11 @@ import {
|
|
|
33
33
|
trackCliCommandFinished,
|
|
34
34
|
trackEvent,
|
|
35
35
|
waitForServerRuntimeStartup
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-VWSUFTW5.js";
|
|
37
37
|
import {
|
|
38
38
|
autoSyncSkills,
|
|
39
39
|
formatAutoSyncNotice
|
|
40
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-O6XPXEN6.js";
|
|
41
41
|
import {
|
|
42
42
|
configExists,
|
|
43
43
|
createApiClient,
|
|
@@ -54,13 +54,13 @@ import {
|
|
|
54
54
|
saveConfig,
|
|
55
55
|
saveConfigPatch,
|
|
56
56
|
shouldPrintServeSkillsNudge
|
|
57
|
-
} from "./chunk-
|
|
57
|
+
} from "./chunk-3ZGBSHZ2.js";
|
|
58
58
|
import {
|
|
59
59
|
DEFAULT_DEMO_TRUSTED_PROXIES,
|
|
60
60
|
trustedProxiesProblem,
|
|
61
61
|
trustedProxyProblem
|
|
62
62
|
} from "./chunk-RB2F4D3Z.js";
|
|
63
|
-
import "./chunk-
|
|
63
|
+
import "./chunk-2S7U2YHI.js";
|
|
64
64
|
import {
|
|
65
65
|
CliError,
|
|
66
66
|
EXIT_SYSTEM_ERROR,
|
|
@@ -72,7 +72,7 @@ import {
|
|
|
72
72
|
runMeasurementDraftAction,
|
|
73
73
|
systemError,
|
|
74
74
|
usageError
|
|
75
|
-
} from "./chunk-
|
|
75
|
+
} from "./chunk-KDWTNI4Z.js";
|
|
76
76
|
import {
|
|
77
77
|
CLOUDFLARE_WORKER_BINDINGS,
|
|
78
78
|
CLOUDFLARE_WORKER_GENERATED_MARKER,
|
|
@@ -104,7 +104,7 @@ import {
|
|
|
104
104
|
rawEventSamples,
|
|
105
105
|
readMarketCompetitorNames,
|
|
106
106
|
runs
|
|
107
|
-
} from "./chunk-
|
|
107
|
+
} from "./chunk-SPZRSKCF.js";
|
|
108
108
|
import {
|
|
109
109
|
AdsDeliverySnapshotStatuses,
|
|
110
110
|
AdsHistoricalCampaignRollupStatuses,
|
|
@@ -234,7 +234,7 @@ import {
|
|
|
234
234
|
visibilityCompareSelectionSchema,
|
|
235
235
|
visibilityReportRequestSchema,
|
|
236
236
|
winnabilityClassSchema
|
|
237
|
-
} from "./chunk-
|
|
237
|
+
} from "./chunk-6LS2R477.js";
|
|
238
238
|
|
|
239
239
|
// src/cli.ts
|
|
240
240
|
import { pathToFileURL } from "url";
|
|
@@ -784,7 +784,7 @@ function parseDemoTrustedProxies(values) {
|
|
|
784
784
|
async function demoCommand(options) {
|
|
785
785
|
const { host, port } = parseDemoListenOptions(options);
|
|
786
786
|
const trustProxy = parseDemoTrustedProxies(options.trustProxy);
|
|
787
|
-
const { createDemoServer } = await import("./demo-server-
|
|
787
|
+
const { createDemoServer } = await import("./demo-server-6OE3H2KL.js");
|
|
788
788
|
const app = await createDemoServer({ trustProxy });
|
|
789
789
|
let stopping = false;
|
|
790
790
|
const stop = () => {
|
|
@@ -1198,7 +1198,7 @@ No DB writes performed. Re-run without --dry-run to apply.`);
|
|
|
1198
1198
|
}
|
|
1199
1199
|
}
|
|
1200
1200
|
async function backfillInsightsCommand(project2, opts) {
|
|
1201
|
-
const { IntelligenceService } = await import("./intelligence-service-
|
|
1201
|
+
const { IntelligenceService } = await import("./intelligence-service-USSTKAKC.js");
|
|
1202
1202
|
const config = loadConfig();
|
|
1203
1203
|
const db = createClient(config.database);
|
|
1204
1204
|
migrate(db);
|
|
@@ -5530,6 +5530,48 @@ async function gaTraffic(project2, opts) {
|
|
|
5530
5530
|
Last synced: ${result.lastSyncedAt}`);
|
|
5531
5531
|
}
|
|
5532
5532
|
}
|
|
5533
|
+
var AI_ENGINE_LEAD_RATE_NOTES = {
|
|
5534
|
+
"no-data": null,
|
|
5535
|
+
"sync-not-ready": "the latest acquisition or lead sync failed, so sessions and lead events may cover different days; rerun the GA sync for lead rates.",
|
|
5536
|
+
"channel-leads-unfiltered": "lead events are channel-level here, so host and path filters narrow sessions but not leads; rerun with --host-scope all and no --path-prefix for lead rates.",
|
|
5537
|
+
"paid-split-needs-landing-page": "lead events are channel-level here, so the paid/organic split cannot read landing-page utm tags, and some AI sessions were paid only by those tags (counted as organic above); tag paid AI links with a paid utm_medium such as cpc for lead rates.",
|
|
5538
|
+
"sessions-behind-leads": "stored lead events run past the last stored session date, so recent leads have no sessions to divide by; rerun the GA sync for lead rates.",
|
|
5539
|
+
"sessions-missing-on-lead-days": "some days in this window have stored lead events but no stored sessions, so those leads have no sessions to divide by; rerun the GA sync with --days covering the window for lead rates."
|
|
5540
|
+
};
|
|
5541
|
+
function hasAiEngineLeadRows(block) {
|
|
5542
|
+
return block.engines.length > 0 || block.unattributed.sources.length > 0;
|
|
5543
|
+
}
|
|
5544
|
+
function printAiEngineLeadClass(heading, block) {
|
|
5545
|
+
const cell2 = (period) => `${period.eventCount} / ${period.sessions} ${formatPercent(period.leadRate)}`;
|
|
5546
|
+
const rows = [
|
|
5547
|
+
...block.engines.map((engine) => ({ label: engine.label, cells: engine.periods.map(cell2) })),
|
|
5548
|
+
...block.unattributed.sources.length > 0 ? [{ label: "Other AI Assistant", cells: block.unattributed.periods.map(cell2) }] : [],
|
|
5549
|
+
{ label: "All AI", cells: block.periods.map(cell2) }
|
|
5550
|
+
];
|
|
5551
|
+
const labelWidth = Math.max("ENGINE".length, ...rows.map((row) => row.label.length));
|
|
5552
|
+
const widths = block.periods.map((period, index) => Math.max(
|
|
5553
|
+
period.label.length,
|
|
5554
|
+
...rows.map((row) => row.cells[index]?.length ?? 0)
|
|
5555
|
+
));
|
|
5556
|
+
const line = (label, cells) => ` ${label.padEnd(labelWidth)} ${cells.map((value, index) => value.padEnd(widths[index] ?? 0)).join(" ")}`.trimEnd();
|
|
5557
|
+
console.log(` ${heading} (lead events / AI sessions, lead rate)`);
|
|
5558
|
+
console.log(line("ENGINE", block.periods.map((period) => period.label.toUpperCase())));
|
|
5559
|
+
for (const row of rows) console.log(line(row.label, row.cells));
|
|
5560
|
+
}
|
|
5561
|
+
function printAiEngineLeads(aiEngines) {
|
|
5562
|
+
if (!aiEngines) return;
|
|
5563
|
+
if (aiEngines.organic.periods.length === 0) return;
|
|
5564
|
+
if (!hasAiEngineLeadRows(aiEngines.organic) && !hasAiEngineLeadRows(aiEngines.paid)) {
|
|
5565
|
+
console.log(" Leads by AI engine: no AI engine sessions or lead events in this window");
|
|
5566
|
+
return;
|
|
5567
|
+
}
|
|
5568
|
+
printAiEngineLeadClass("Leads by AI engine, organic", aiEngines.organic);
|
|
5569
|
+
if (hasAiEngineLeadRows(aiEngines.paid)) {
|
|
5570
|
+
printAiEngineLeadClass("Leads by AI engine, paid clicks", aiEngines.paid);
|
|
5571
|
+
}
|
|
5572
|
+
const note = aiEngines.leadRateUnavailableReason === null ? null : AI_ENGINE_LEAD_RATE_NOTES[aiEngines.leadRateUnavailableReason];
|
|
5573
|
+
if (note) console.log(` Note: ${note}`);
|
|
5574
|
+
}
|
|
5533
5575
|
async function gaMeasurementAnalysis(project2, opts) {
|
|
5534
5576
|
const client = getClient7();
|
|
5535
5577
|
const params = {};
|
|
@@ -5563,6 +5605,7 @@ async function gaMeasurementAnalysis(project2, opts) {
|
|
|
5563
5605
|
for (const period of result.leads.periods) {
|
|
5564
5606
|
console.log(` ${period.label.padEnd(8)} ${period.eventCount} leads ${period.startDate} to ${period.endDate}`);
|
|
5565
5607
|
}
|
|
5608
|
+
printAiEngineLeads(result.leads.aiEngines);
|
|
5566
5609
|
console.log(` Search demand: ${result.searchDemand.status}`);
|
|
5567
5610
|
for (const period of result.searchDemand.periods) {
|
|
5568
5611
|
console.log(` ${period.label.padEnd(8)} ${period.propertyClicks} clicks / ${period.propertyImpressions} impressions (${period.brandedClicks} branded clicks / ${period.brandedImpressions} branded impressions; ${period.nonBrandedClicks} reported non-brand clicks / ${period.nonBrandedImpressions} reported non-brand impressions; ${period.unreportedClicks} unreported clicks / ${period.unreportedImpressions} unreported impressions)`);
|
|
@@ -5,11 +5,11 @@ import {
|
|
|
5
5
|
computeFactorAverages,
|
|
6
6
|
layoutSiteCrawlGraphInput,
|
|
7
7
|
persistSiteCrawlGraphLayout
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-2S7U2YHI.js";
|
|
9
9
|
import {
|
|
10
10
|
PACKAGE_VERSION,
|
|
11
11
|
canonryMcpTools
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-KDWTNI4Z.js";
|
|
13
13
|
import {
|
|
14
14
|
HISTORY_WINDOW_RUNS,
|
|
15
15
|
IntelligenceService,
|
|
@@ -83,7 +83,7 @@ import {
|
|
|
83
83
|
siteCrawlPages,
|
|
84
84
|
siteCrawlSnapshots,
|
|
85
85
|
trafficSources
|
|
86
|
-
} from "./chunk-
|
|
86
|
+
} from "./chunk-SPZRSKCF.js";
|
|
87
87
|
import {
|
|
88
88
|
RunKinds,
|
|
89
89
|
SiteCrawlFetchStates,
|
|
@@ -112,7 +112,7 @@ import {
|
|
|
112
112
|
roundPreservingTotal,
|
|
113
113
|
siteAuditPageFactorSchema,
|
|
114
114
|
wilsonInterval
|
|
115
|
-
} from "./chunk-
|
|
115
|
+
} from "./chunk-6LS2R477.js";
|
|
116
116
|
|
|
117
117
|
// src/demo-server.ts
|
|
118
118
|
import { dirname, join as join2 } from "path";
|
package/dist/index.js
CHANGED
|
@@ -3,14 +3,14 @@ import {
|
|
|
3
3
|
createGoogleMarketingCredentialStore,
|
|
4
4
|
createGoogleMarketingRuntime,
|
|
5
5
|
createServer
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-VWSUFTW5.js";
|
|
7
7
|
import {
|
|
8
8
|
loadConfig
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-3ZGBSHZ2.js";
|
|
10
|
+
import "./chunk-2S7U2YHI.js";
|
|
11
|
+
import "./chunk-KDWTNI4Z.js";
|
|
12
|
+
import "./chunk-SPZRSKCF.js";
|
|
13
|
+
import "./chunk-6LS2R477.js";
|
|
14
14
|
export {
|
|
15
15
|
GoogleMarketingRuntimeError,
|
|
16
16
|
createGoogleMarketingCredentialStore,
|
package/dist/mcp.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
autoSyncSkills
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-O6XPXEN6.js";
|
|
4
4
|
import {
|
|
5
5
|
createApiClient,
|
|
6
6
|
createCanonryMcpServer
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-3ZGBSHZ2.js";
|
|
8
|
+
import "./chunk-KDWTNI4Z.js";
|
|
9
9
|
import {
|
|
10
10
|
isReadOnlyKey,
|
|
11
11
|
updateCheckEnvOptOut
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-6LS2R477.js";
|
|
13
13
|
|
|
14
14
|
// src/mcp/cli.ts
|
|
15
15
|
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.16.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
|
-
"@ainyc/canonry-
|
|
88
|
+
"@ainyc/canonry-web": "0.0.0",
|
|
89
89
|
"@ainyc/canonry-api-routes": "0.0.0",
|
|
90
|
+
"@ainyc/canonry-api-client": "0.0.0",
|
|
90
91
|
"@ainyc/canonry-config": "0.0.0",
|
|
91
|
-
"@ainyc/canonry-web": "0.0.0",
|
|
92
|
-
"@ainyc/canonry-contracts": "0.0.0",
|
|
93
92
|
"@ainyc/canonry-db": "0.0.0",
|
|
94
|
-
"@ainyc/canonry-
|
|
93
|
+
"@ainyc/canonry-contracts": "0.0.0",
|
|
95
94
|
"@ainyc/canonry-integration-bing": "0.0.0",
|
|
95
|
+
"@ainyc/canonry-integration-cloud-run": "0.0.0",
|
|
96
96
|
"@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
|
|
97
97
|
"@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
|
|
98
|
-
"@ainyc/canonry-integration-google-ads": "0.0.0",
|
|
99
|
-
"@ainyc/canonry-integration-commoncrawl": "0.0.0",
|
|
100
98
|
"@ainyc/canonry-integration-google": "0.0.0",
|
|
101
99
|
"@ainyc/canonry-integration-google-business-profile": "0.0.0",
|
|
102
|
-
"@ainyc/canonry-integration-openai-ads": "0.0.0",
|
|
103
|
-
"@ainyc/canonry-integration-traffic": "0.0.0",
|
|
104
100
|
"@ainyc/canonry-integration-google-places": "0.0.0",
|
|
105
101
|
"@ainyc/canonry-integration-google-tag-manager": "0.0.0",
|
|
106
|
-
"@ainyc/canonry-
|
|
107
|
-
"@ainyc/canonry-
|
|
102
|
+
"@ainyc/canonry-integration-commoncrawl": "0.0.0",
|
|
103
|
+
"@ainyc/canonry-integration-openai-ads": "0.0.0",
|
|
104
|
+
"@ainyc/canonry-integration-traffic": "0.0.0",
|
|
108
105
|
"@ainyc/canonry-integration-wordpress": "0.0.0",
|
|
109
106
|
"@ainyc/canonry-intelligence": "0.0.0",
|
|
107
|
+
"@ainyc/canonry-provider-cdp": "0.0.0",
|
|
110
108
|
"@ainyc/canonry-provider-gemini": "0.0.0",
|
|
111
|
-
"@ainyc/canonry-
|
|
112
|
-
"@ainyc/canonry-provider-
|
|
109
|
+
"@ainyc/canonry-integration-google-ads": "0.0.0",
|
|
110
|
+
"@ainyc/canonry-provider-claude": "0.0.0",
|
|
113
111
|
"@ainyc/canonry-provider-muse": "0.0.0",
|
|
114
|
-
"@ainyc/canonry-provider-
|
|
115
|
-
"@ainyc/canonry-
|
|
112
|
+
"@ainyc/canonry-provider-local": "0.0.0",
|
|
113
|
+
"@ainyc/canonry-provider-openai": "0.0.0",
|
|
114
|
+
"@ainyc/canonry-integration-typesafe": "0.0.0",
|
|
115
|
+
"@ainyc/canonry-provider-perplexity": "0.0.0"
|
|
116
116
|
},
|
|
117
117
|
"scripts": {
|
|
118
118
|
"build": "pnpm run build:cli && pnpm run build:web",
|