@canonry/canonry 5.21.0 → 5.22.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 +1 -1
- package/assets/assets/{AuditHistoryPanel-CjxWA3lx.js → AuditHistoryPanel-teTDC-4-.js} +1 -1
- package/assets/assets/{BacklinksPage-Bdd164Up.js → BacklinksPage-Bqm7bido.js} +1 -1
- package/assets/assets/{HistoryPage-BvJmE-kP.js → HistoryPage-IcqwPBmt.js} +1 -1
- package/assets/assets/{MeasurementPropertyPage-HuP6RMZ-.js → MeasurementPropertyPage-BLpptT3_.js} +1 -1
- package/assets/assets/{ProjectPage-DOvXVbyy.js → ProjectPage-nn2Y9H-m.js} +1 -1
- package/assets/assets/{RunRow-Cnb3JOBw.js → RunRow-S_SCHr0o.js} +1 -1
- package/assets/assets/{RunsPage-Dvz1JYIm.js → RunsPage-DFiif626.js} +1 -1
- package/assets/assets/{SettingsPage-DYGvphkg.js → SettingsPage-CitZ6FAS.js} +1 -1
- package/assets/assets/{SiteHealthSection-CUNiKaod.js → SiteHealthSection-C2dsyNGY.js} +3 -3
- package/assets/assets/{TrafficPage-Bf4Tq95q.js → TrafficPage-lY8na5Pg.js} +1 -1
- package/assets/assets/{TrafficSourceDetailPage-CIuLWZgT.js → TrafficSourceDetailPage-BTykoVGT.js} +1 -1
- package/assets/assets/{extract-error-message-DZex1e4H.js → extract-error-message-r0Gpc7mv.js} +1 -1
- package/assets/assets/{index-CeXW-lzj.js → index-DwlO8KfE.js} +20 -20
- package/assets/assets/{react-sigma_core.esm.min-CxvtwEkv.js → react-sigma_core.esm.min-DDrDxbO1.js} +1 -1
- package/assets/assets/{v2-overview-adapter-Bh4qIzLp.js → v2-overview-adapter-OsQiglXU.js} +1 -1
- package/assets/index.html +1 -1
- package/dist/{chunk-HDJHQPW3.js → chunk-3LCR6WU6.js} +2 -2
- package/dist/{chunk-WUT3G2GM.js → chunk-DDL2XSNM.js} +4 -2
- package/dist/{chunk-FRWZWJB3.js → chunk-GLLY2GEV.js} +6 -3
- package/dist/{chunk-FAVYLZQV.js → chunk-P5VXVFQW.js} +845 -445
- package/dist/{chunk-2LO7FLVD.js → chunk-S5OSY3PI.js} +30 -0
- package/dist/{chunk-NFN5GSEJ.js → chunk-XFHXKLNT.js} +23 -12
- package/dist/{chunk-MEAKE5W7.js → chunk-YTSXQUJ3.js} +3 -3
- package/dist/cli.js +15 -12
- package/dist/{demo-server-7BVVVXPM.js → demo-server-HULNEORN.js} +4 -4
- package/dist/index.js +6 -6
- package/dist/{intelligence-service-3UUKRAZ5.js → intelligence-service-CXNBKRHV.js} +2 -2
- package/dist/mcp.js +4 -4
- package/package.json +11 -11
|
@@ -15051,12 +15051,27 @@ var checkCategorySchema = z50.enum([
|
|
|
15051
15051
|
"agent"
|
|
15052
15052
|
]);
|
|
15053
15053
|
var CheckCategories = checkCategorySchema.enum;
|
|
15054
|
+
var checkNotificationPolicySchema = z50.enum(["health", "silent"]);
|
|
15055
|
+
var CheckNotificationPolicies = checkNotificationPolicySchema.enum;
|
|
15056
|
+
var reportMonthSchema = z50.string().regex(/^[1-9]\d{3}-(0[1-9]|1[0-2])$/, "Expected YYYY-MM");
|
|
15057
|
+
function reportMonthsForDoctor(reportMonth, now = /* @__PURE__ */ new Date()) {
|
|
15058
|
+
if (reportMonth !== void 0) return [reportMonthSchema.parse(reportMonth)];
|
|
15059
|
+
const current = now.toISOString().slice(0, 7);
|
|
15060
|
+
if (now.getUTCDate() > 3) return [current];
|
|
15061
|
+
const previous = new Date(Date.parse(calendarMonthBounds(current).since) - 1).toISOString().slice(0, 7);
|
|
15062
|
+
return [previous, current];
|
|
15063
|
+
}
|
|
15064
|
+
function gradedReportMonths(months, now = /* @__PURE__ */ new Date()) {
|
|
15065
|
+
const current = now.toISOString().slice(0, 7);
|
|
15066
|
+
return new Set(months.length > 1 ? months.filter((month) => month !== current) : months);
|
|
15067
|
+
}
|
|
15054
15068
|
var checkResultSchema = z50.object({
|
|
15055
15069
|
id: z50.string(),
|
|
15056
15070
|
category: checkCategorySchema,
|
|
15057
15071
|
scope: checkScopeSchema,
|
|
15058
15072
|
title: z50.string(),
|
|
15059
15073
|
status: checkStatusSchema,
|
|
15074
|
+
notificationPolicy: checkNotificationPolicySchema.optional().describe("Health checks page by default. Silent report advisories remain visible but never affect health alert state."),
|
|
15060
15075
|
code: z50.string().describe('Stable machine-readable code (e.g. "google.token.refresh-failed"). Use this for filtering and remediation logic.'),
|
|
15061
15076
|
summary: z50.string(),
|
|
15062
15077
|
remediation: z50.string().nullable().optional().describe('Operator-facing next step. Null when status is "ok" or no specific remediation applies.'),
|
|
@@ -15066,6 +15081,7 @@ var checkResultSchema = z50.object({
|
|
|
15066
15081
|
var doctorReportSchema = z50.object({
|
|
15067
15082
|
scope: checkScopeSchema,
|
|
15068
15083
|
project: z50.string().nullable().describe('Project name when scope is "project", null otherwise.'),
|
|
15084
|
+
reportMonths: z50.array(reportMonthSchema).optional().describe("Calendar months evaluated by project report readiness checks."),
|
|
15069
15085
|
generatedAt: z50.string().describe("ISO-8601 timestamp when this doctor run started."),
|
|
15070
15086
|
durationMs: z50.number().int().nonnegative(),
|
|
15071
15087
|
summary: z50.object({
|
|
@@ -15097,6 +15113,15 @@ function summarizeCheckResults(results) {
|
|
|
15097
15113
|
}
|
|
15098
15114
|
return summary;
|
|
15099
15115
|
}
|
|
15116
|
+
function groupIsoDateRanges(dates) {
|
|
15117
|
+
const ranges = [];
|
|
15118
|
+
for (const date of [...new Set(dates)].sort()) {
|
|
15119
|
+
const previous = ranges.at(-1);
|
|
15120
|
+
if (previous && shiftIsoCalendarDate(previous.end, 1) === date) previous.end = date;
|
|
15121
|
+
else ranges.push({ start: date, end: date });
|
|
15122
|
+
}
|
|
15123
|
+
return ranges;
|
|
15124
|
+
}
|
|
15100
15125
|
|
|
15101
15126
|
// ../contracts/src/index-coverage.ts
|
|
15102
15127
|
function deriveIndexCoverage(input) {
|
|
@@ -20229,8 +20254,13 @@ export {
|
|
|
20229
20254
|
CheckStatuses,
|
|
20230
20255
|
CheckScopes,
|
|
20231
20256
|
CheckCategories,
|
|
20257
|
+
CheckNotificationPolicies,
|
|
20258
|
+
reportMonthSchema,
|
|
20259
|
+
reportMonthsForDoctor,
|
|
20260
|
+
gradedReportMonths,
|
|
20232
20261
|
doctorReportSchema,
|
|
20233
20262
|
summarizeCheckResults,
|
|
20263
|
+
groupIsoDateRanges,
|
|
20234
20264
|
deriveIndexCoverage,
|
|
20235
20265
|
normalizeQueryText,
|
|
20236
20266
|
citationVisibilityResponseSchema,
|
|
@@ -13,19 +13,19 @@ import {
|
|
|
13
13
|
resolveOperatorApiKeyIds,
|
|
14
14
|
runWithUsageTags,
|
|
15
15
|
saveConfigPatch
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-GLLY2GEV.js";
|
|
17
17
|
import {
|
|
18
18
|
deleteSiteCrawlGraphLayout,
|
|
19
19
|
persistSiteCrawlGraphLayout,
|
|
20
20
|
prepareSiteCrawlGraphLayout
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-3LCR6WU6.js";
|
|
22
22
|
import {
|
|
23
23
|
CanonryMcpToolNames,
|
|
24
24
|
CliError,
|
|
25
25
|
PACKAGE_VERSION,
|
|
26
26
|
canonryMcpTools,
|
|
27
27
|
isMachineFormat
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-DDL2XSNM.js";
|
|
29
29
|
import {
|
|
30
30
|
CC_CACHE_DIR,
|
|
31
31
|
DUCKDB_SPEC,
|
|
@@ -172,6 +172,7 @@ import {
|
|
|
172
172
|
runChecks,
|
|
173
173
|
runFills,
|
|
174
174
|
runs,
|
|
175
|
+
scheduledHealthCheckIds,
|
|
175
176
|
schedules,
|
|
176
177
|
serializeUserSessionCookie,
|
|
177
178
|
siteAuditPages,
|
|
@@ -186,7 +187,7 @@ import {
|
|
|
186
187
|
siteLivenessState,
|
|
187
188
|
toAlertView,
|
|
188
189
|
usageCounters
|
|
189
|
-
} from "./chunk-
|
|
190
|
+
} from "./chunk-P5VXVFQW.js";
|
|
190
191
|
import {
|
|
191
192
|
AGENT_MEMORY_VALUE_MAX_BYTES,
|
|
192
193
|
AGENT_NONE,
|
|
@@ -201,6 +202,7 @@ import {
|
|
|
201
202
|
CANONRY_NPM_PACKAGE_URL,
|
|
202
203
|
CITED_URL_CAPTURE_VERSION,
|
|
203
204
|
CcReleaseSyncStatuses,
|
|
205
|
+
CheckNotificationPolicies,
|
|
204
206
|
DEFAULT_VIEWER_RESEARCH_DAILY_RUN_LIMIT,
|
|
205
207
|
DiscoveryCompetitorTypes,
|
|
206
208
|
GOOGLE_ADS_CAMPAIGN_METRICS_MAX_CAMPAIGNS,
|
|
@@ -303,6 +305,7 @@ import {
|
|
|
303
305
|
hostMatchesAnyDomain,
|
|
304
306
|
hostMatchesDomain,
|
|
305
307
|
hostOf,
|
|
308
|
+
inclusiveDayCount,
|
|
306
309
|
isAgentProviderId,
|
|
307
310
|
isBrowserProvider,
|
|
308
311
|
isGhostTelemetryEvent,
|
|
@@ -331,6 +334,7 @@ import {
|
|
|
331
334
|
providerError,
|
|
332
335
|
providerSupportsLocationContext,
|
|
333
336
|
registrableDomain,
|
|
337
|
+
reportMonthsForDoctor,
|
|
334
338
|
resolveProviderModel,
|
|
335
339
|
resolveSnapshotRequestQueries,
|
|
336
340
|
retryAfterDelayMs,
|
|
@@ -353,7 +357,7 @@ import {
|
|
|
353
357
|
visibilityReportRequestSchema,
|
|
354
358
|
winnabilityClassLabel,
|
|
355
359
|
withRetry
|
|
356
|
-
} from "./chunk-
|
|
360
|
+
} from "./chunk-S5OSY3PI.js";
|
|
357
361
|
|
|
358
362
|
// src/runtime-context.ts
|
|
359
363
|
function cliRuntimeContext(env = process.env, stdio = process) {
|
|
@@ -6648,7 +6652,7 @@ function nonBlank(value) {
|
|
|
6648
6652
|
return trimmed ? trimmed : void 0;
|
|
6649
6653
|
}
|
|
6650
6654
|
function resolveBuildCommit(env = process.env) {
|
|
6651
|
-
const embedded = true ? "
|
|
6655
|
+
const embedded = true ? "120bbd89c1dedb8df5c2850da43ac2e71ccd3cdc" : void 0;
|
|
6652
6656
|
return nonBlank(embedded) ?? nonBlank(env.CANONRY_COMMIT);
|
|
6653
6657
|
}
|
|
6654
6658
|
function resolveInstanceIdentity(env = process.env) {
|
|
@@ -12235,7 +12239,7 @@ function readStoredGroundingSources(rawResponse) {
|
|
|
12235
12239
|
return result2;
|
|
12236
12240
|
}
|
|
12237
12241
|
async function backfillInsightsCommand(project, opts) {
|
|
12238
|
-
const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-
|
|
12242
|
+
const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-CXNBKRHV.js");
|
|
12239
12243
|
const config = loadConfig();
|
|
12240
12244
|
const db = createClient(config.database);
|
|
12241
12245
|
migrate(db);
|
|
@@ -13436,11 +13440,16 @@ function startSiteLivenessLoop(deps, intervalMs = SITE_LIVENESS_INTERVAL_MS) {
|
|
|
13436
13440
|
|
|
13437
13441
|
// src/data-refresh.ts
|
|
13438
13442
|
var log16 = createLogger("DataRefresh");
|
|
13439
|
-
|
|
13443
|
+
function gaRefreshDays(now = /* @__PURE__ */ new Date()) {
|
|
13444
|
+
const [reportMonth] = reportMonthsForDoctor(void 0, now);
|
|
13445
|
+
const reach = inclusiveDayCount(`${reportMonth}-01`, now.toISOString().slice(0, 10)) ?? 0;
|
|
13446
|
+
return Math.max(30, reach);
|
|
13447
|
+
}
|
|
13448
|
+
async function refreshAllIntegrations(client, projectName, now = /* @__PURE__ */ new Date()) {
|
|
13440
13449
|
const integrations = [
|
|
13441
13450
|
{ name: "gsc", run: () => client.gscSync(projectName, {}) },
|
|
13442
13451
|
{ name: "bing", run: () => client.bingInspectSitemap(projectName, {}) },
|
|
13443
|
-
{ name: "ga", run: () => client.gaSync(projectName, { days:
|
|
13452
|
+
{ name: "ga", run: () => client.gaSync(projectName, { days: gaRefreshDays(now) }) },
|
|
13444
13453
|
{ name: "gbp", run: () => client.triggerGbpSync(projectName, {}) },
|
|
13445
13454
|
// `ads` remains the OpenAI / ChatGPT Ads integration. For scheduled
|
|
13446
13455
|
// refreshes, Google providers have explicit names and fan out only here.
|
|
@@ -13581,13 +13590,15 @@ var Notifier = class {
|
|
|
13581
13590
|
return 0;
|
|
13582
13591
|
}
|
|
13583
13592
|
};
|
|
13584
|
-
const
|
|
13593
|
+
const healthChecks = report.checks.filter((c) => c.notificationPolicy !== CheckNotificationPolicies.silent);
|
|
13594
|
+
if (healthChecks.length === 0 && report.checks.length > 0) return null;
|
|
13595
|
+
const graded = healthChecks.filter((c) => c.status === "fail" || c.status === "warn" || c.status === "ok");
|
|
13585
13596
|
const failing = graded.filter((c) => c.status !== "ok").sort((a, b) => rank(b.status) - rank(a.status) || categoryRank(b.category) - categoryRank(a.category) || a.id.localeCompare(b.id));
|
|
13586
13597
|
const worst = failing.at(0) ?? null;
|
|
13587
13598
|
const noSignal = graded.length === 0;
|
|
13588
13599
|
const status = noSignal ? "warn" : worst ? worst.status : "ok";
|
|
13589
13600
|
const code = noSignal ? "health.no-signal" : worst?.code ?? "health.ok";
|
|
13590
|
-
const summary = noSignal ? `No health check produced a result (${
|
|
13601
|
+
const summary = noSignal ? `No health check produced a result (${healthChecks.length} skipped) \u2014 health is unknown, not confirmed.` : worst?.summary ?? `All ${graded.length} health check(s) passing.`;
|
|
13591
13602
|
const previous = this.db.select().from(doctorHealthState).where(eq17(doctorHealthState.projectId, projectId)).get();
|
|
13592
13603
|
const previousStatus = previous?.status ?? null;
|
|
13593
13604
|
const failingSignature = failing.map((c) => `${c.status}:${c.code}`).join(",");
|
|
@@ -19493,7 +19504,7 @@ async function createServer(opts) {
|
|
|
19493
19504
|
onDoctorRequested: (projectName) => {
|
|
19494
19505
|
void (async () => {
|
|
19495
19506
|
try {
|
|
19496
|
-
const report = await schedulerClient.runDoctor({ project: projectName });
|
|
19507
|
+
const report = await schedulerClient.runDoctor({ project: projectName, checkIds: scheduledHealthCheckIds() });
|
|
19497
19508
|
const project = opts.db.select().from(projects).where(eq27(projects.name, projectName)).get();
|
|
19498
19509
|
if (!project) {
|
|
19499
19510
|
app.log.warn({ projectName }, "doctor schedule fired for an unknown project");
|
|
@@ -4,14 +4,14 @@ import {
|
|
|
4
4
|
installSkills,
|
|
5
5
|
loadConfigRaw,
|
|
6
6
|
saveConfigPatch
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-GLLY2GEV.js";
|
|
8
8
|
import {
|
|
9
9
|
PACKAGE_VERSION
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-DDL2XSNM.js";
|
|
11
11
|
import {
|
|
12
12
|
SKILL_MANIFEST_FILENAME,
|
|
13
13
|
SkillsClients
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-S5OSY3PI.js";
|
|
15
15
|
|
|
16
16
|
// src/skills-autosync.ts
|
|
17
17
|
import fs from "fs";
|
package/dist/cli.js
CHANGED
|
@@ -35,11 +35,11 @@ import {
|
|
|
35
35
|
trackCliCommandFinished,
|
|
36
36
|
trackEvent,
|
|
37
37
|
waitForServerRuntimeStartup
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-XFHXKLNT.js";
|
|
39
39
|
import {
|
|
40
40
|
autoSyncSkills,
|
|
41
41
|
formatAutoSyncNotice
|
|
42
|
-
} from "./chunk-
|
|
42
|
+
} from "./chunk-YTSXQUJ3.js";
|
|
43
43
|
import {
|
|
44
44
|
configExists,
|
|
45
45
|
createApiClient,
|
|
@@ -56,13 +56,13 @@ import {
|
|
|
56
56
|
saveConfig,
|
|
57
57
|
saveConfigPatch,
|
|
58
58
|
shouldPrintServeSkillsNudge
|
|
59
|
-
} from "./chunk-
|
|
59
|
+
} from "./chunk-GLLY2GEV.js";
|
|
60
60
|
import {
|
|
61
61
|
DEFAULT_DEMO_TRUSTED_PROXIES,
|
|
62
62
|
trustedProxiesProblem,
|
|
63
63
|
trustedProxyProblem
|
|
64
64
|
} from "./chunk-RB2F4D3Z.js";
|
|
65
|
-
import "./chunk-
|
|
65
|
+
import "./chunk-3LCR6WU6.js";
|
|
66
66
|
import {
|
|
67
67
|
CliError,
|
|
68
68
|
EXIT_SYSTEM_ERROR,
|
|
@@ -74,7 +74,7 @@ import {
|
|
|
74
74
|
runMeasurementDraftAction,
|
|
75
75
|
systemError,
|
|
76
76
|
usageError
|
|
77
|
-
} from "./chunk-
|
|
77
|
+
} from "./chunk-DDL2XSNM.js";
|
|
78
78
|
import {
|
|
79
79
|
CLOUDFLARE_WORKER_BINDINGS,
|
|
80
80
|
CLOUDFLARE_WORKER_GENERATED_MARKER,
|
|
@@ -89,7 +89,7 @@ import {
|
|
|
89
89
|
queries,
|
|
90
90
|
renderReportHtml,
|
|
91
91
|
runs
|
|
92
|
-
} from "./chunk-
|
|
92
|
+
} from "./chunk-P5VXVFQW.js";
|
|
93
93
|
import {
|
|
94
94
|
AdsDeliverySnapshotStatuses,
|
|
95
95
|
AdsHistoricalCampaignRollupStatuses,
|
|
@@ -179,7 +179,7 @@ import {
|
|
|
179
179
|
visibilityCompareSelectionSchema,
|
|
180
180
|
visibilityReportRequestSchema,
|
|
181
181
|
winnabilityClassSchema
|
|
182
|
-
} from "./chunk-
|
|
182
|
+
} from "./chunk-S5OSY3PI.js";
|
|
183
183
|
|
|
184
184
|
// src/cli.ts
|
|
185
185
|
import { pathToFileURL } from "url";
|
|
@@ -444,7 +444,7 @@ function parseDemoTrustedProxies(values) {
|
|
|
444
444
|
async function demoCommand(options) {
|
|
445
445
|
const { host, port } = parseDemoListenOptions(options);
|
|
446
446
|
const trustProxy = parseDemoTrustedProxies(options.trustProxy);
|
|
447
|
-
const { createDemoServer } = await import("./demo-server-
|
|
447
|
+
const { createDemoServer } = await import("./demo-server-HULNEORN.js");
|
|
448
448
|
const app = await createDemoServer({ trustProxy });
|
|
449
449
|
let stopping = false;
|
|
450
450
|
const stop = () => {
|
|
@@ -3051,7 +3051,8 @@ async function doctorCommand(opts) {
|
|
|
3051
3051
|
const client = createApiClient();
|
|
3052
3052
|
const report = await client.runDoctor({
|
|
3053
3053
|
project: opts.project,
|
|
3054
|
-
checkIds: opts.checks
|
|
3054
|
+
checkIds: opts.checks,
|
|
3055
|
+
...opts.reportMonth ? { reportMonth: opts.reportMonth } : {}
|
|
3055
3056
|
});
|
|
3056
3057
|
if (opts.format === "json") {
|
|
3057
3058
|
console.log(JSON.stringify(report, null, 2));
|
|
@@ -3077,8 +3078,8 @@ async function runDoctorAll(opts) {
|
|
|
3077
3078
|
const client = createApiClient();
|
|
3078
3079
|
const projects2 = await client.listProjects();
|
|
3079
3080
|
const [globalReport, ...projectReports] = await Promise.all([
|
|
3080
|
-
client.runDoctor({ checkIds: opts.checks }),
|
|
3081
|
-
...projects2.map((p) => client.runDoctor({ project: p.name, checkIds: opts.checks }))
|
|
3081
|
+
client.runDoctor({ checkIds: opts.checks, ...opts.reportMonth ? { reportMonth: opts.reportMonth } : {} }),
|
|
3082
|
+
...projects2.map((p) => client.runDoctor({ project: p.name, checkIds: opts.checks, ...opts.reportMonth ? { reportMonth: opts.reportMonth } : {} }))
|
|
3082
3083
|
]);
|
|
3083
3084
|
const byKey = { __global__: globalReport };
|
|
3084
3085
|
projects2.forEach((p, i) => {
|
|
@@ -3174,13 +3175,14 @@ ${header}`);
|
|
|
3174
3175
|
}
|
|
3175
3176
|
|
|
3176
3177
|
// src/cli-commands/doctor.ts
|
|
3177
|
-
var USAGE = "canonry doctor [--project <name>|--all] [--check <id>...] [--format json|jsonl]";
|
|
3178
|
+
var USAGE = "canonry doctor [--project <name>|--all] [--check <id>...] [--report-month YYYY-MM] [--format json|jsonl]";
|
|
3178
3179
|
var DOCTOR_CLI_COMMANDS = [
|
|
3179
3180
|
{
|
|
3180
3181
|
path: ["doctor"],
|
|
3181
3182
|
usage: USAGE,
|
|
3182
3183
|
options: {
|
|
3183
3184
|
project: stringOption(),
|
|
3185
|
+
"report-month": stringOption(),
|
|
3184
3186
|
check: multiStringOption(),
|
|
3185
3187
|
all: { type: "boolean" }
|
|
3186
3188
|
},
|
|
@@ -3188,6 +3190,7 @@ var DOCTOR_CLI_COMMANDS = [
|
|
|
3188
3190
|
run: async (input) => {
|
|
3189
3191
|
await doctorCommand({
|
|
3190
3192
|
project: getString(input.values, "project"),
|
|
3193
|
+
reportMonth: getString(input.values, "report-month"),
|
|
3191
3194
|
all: getBoolean(input.values, "all"),
|
|
3192
3195
|
checks: getStringArray(input.values, "check"),
|
|
3193
3196
|
format: input.format
|
|
@@ -4,11 +4,11 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
layoutSiteCrawlGraphInput,
|
|
6
6
|
persistSiteCrawlGraphLayout
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-3LCR6WU6.js";
|
|
8
8
|
import {
|
|
9
9
|
PACKAGE_VERSION,
|
|
10
10
|
canonryMcpTools
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-DDL2XSNM.js";
|
|
12
12
|
import {
|
|
13
13
|
HISTORY_WINDOW_RUNS,
|
|
14
14
|
IntelligenceService,
|
|
@@ -84,7 +84,7 @@ import {
|
|
|
84
84
|
siteCrawlPages,
|
|
85
85
|
siteCrawlSnapshots,
|
|
86
86
|
trafficSources
|
|
87
|
-
} from "./chunk-
|
|
87
|
+
} from "./chunk-P5VXVFQW.js";
|
|
88
88
|
import {
|
|
89
89
|
RunKinds,
|
|
90
90
|
SiteCrawlFetchStates,
|
|
@@ -108,7 +108,7 @@ import {
|
|
|
108
108
|
placementLinkDecision,
|
|
109
109
|
siteAuditPageFactorSchema,
|
|
110
110
|
wilsonInterval
|
|
111
|
-
} from "./chunk-
|
|
111
|
+
} from "./chunk-S5OSY3PI.js";
|
|
112
112
|
|
|
113
113
|
// src/demo-server.ts
|
|
114
114
|
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-XFHXKLNT.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-GLLY2GEV.js";
|
|
10
|
+
import "./chunk-3LCR6WU6.js";
|
|
11
|
+
import "./chunk-DDL2XSNM.js";
|
|
12
|
+
import "./chunk-P5VXVFQW.js";
|
|
13
|
+
import "./chunk-S5OSY3PI.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-YTSXQUJ3.js";
|
|
4
4
|
import {
|
|
5
5
|
createApiClient,
|
|
6
6
|
createCanonryMcpServer
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-GLLY2GEV.js";
|
|
8
|
+
import "./chunk-DDL2XSNM.js";
|
|
9
9
|
import {
|
|
10
10
|
isReadOnlyKey,
|
|
11
11
|
updateCheckEnvOptOut
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-S5OSY3PI.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": "5.
|
|
3
|
+
"version": "5.22.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": [
|
|
@@ -88,30 +88,30 @@
|
|
|
88
88
|
"tsx": "^4.19.0",
|
|
89
89
|
"@ainyc/canonry-web": "0.0.0",
|
|
90
90
|
"@ainyc/canonry-api-client": "0.0.0",
|
|
91
|
+
"@ainyc/canonry-config": "0.0.0",
|
|
91
92
|
"@ainyc/canonry-api-routes": "0.0.0",
|
|
92
93
|
"@ainyc/canonry-contracts": "0.0.0",
|
|
93
|
-
"@ainyc/canonry-config": "0.0.0",
|
|
94
94
|
"@ainyc/canonry-db": "0.0.0",
|
|
95
95
|
"@ainyc/canonry-integration-bing": "0.0.0",
|
|
96
96
|
"@ainyc/canonry-integration-cloud-run": "0.0.0",
|
|
97
|
+
"@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
|
|
97
98
|
"@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
|
|
98
99
|
"@ainyc/canonry-integration-google": "0.0.0",
|
|
99
|
-
"@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
|
|
100
|
-
"@ainyc/canonry-integration-google-ads": "0.0.0",
|
|
101
100
|
"@ainyc/canonry-integration-google-business-profile": "0.0.0",
|
|
102
|
-
"@ainyc/canonry-integration-google-places": "0.0.0",
|
|
103
101
|
"@ainyc/canonry-integration-commoncrawl": "0.0.0",
|
|
104
|
-
"@ainyc/canonry-integration-google-
|
|
102
|
+
"@ainyc/canonry-integration-google-places": "0.0.0",
|
|
103
|
+
"@ainyc/canonry-integration-google-ads": "0.0.0",
|
|
105
104
|
"@ainyc/canonry-integration-openai-ads": "0.0.0",
|
|
106
|
-
"@ainyc/canonry-integration-wordpress": "0.0.0",
|
|
107
|
-
"@ainyc/canonry-integration-traffic": "0.0.0",
|
|
108
105
|
"@ainyc/canonry-intelligence": "0.0.0",
|
|
106
|
+
"@ainyc/canonry-integration-google-tag-manager": "0.0.0",
|
|
107
|
+
"@ainyc/canonry-integration-wordpress": "0.0.0",
|
|
109
108
|
"@ainyc/canonry-provider-cdp": "0.0.0",
|
|
109
|
+
"@ainyc/canonry-integration-traffic": "0.0.0",
|
|
110
|
+
"@ainyc/canonry-provider-local": "0.0.0",
|
|
110
111
|
"@ainyc/canonry-provider-gemini": "0.0.0",
|
|
111
|
-
"@ainyc/canonry-provider-claude": "0.0.0",
|
|
112
112
|
"@ainyc/canonry-provider-openai": "0.0.0",
|
|
113
|
-
"@ainyc/canonry-provider-
|
|
114
|
-
"@ainyc/canonry-provider-
|
|
113
|
+
"@ainyc/canonry-provider-claude": "0.0.0",
|
|
114
|
+
"@ainyc/canonry-provider-perplexity": "0.0.0"
|
|
115
115
|
},
|
|
116
116
|
"scripts": {
|
|
117
117
|
"build": "pnpm run build:cli && pnpm run build:web",
|