@canonry/canonry 4.178.3 → 4.178.4
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/dist/{chunk-XLVNLY2I.js → chunk-EBRGLDTB.js} +2 -2
- package/dist/{chunk-2UKCBT7D.js → chunk-HNY2FNJH.js} +1 -1
- package/dist/{chunk-BNYDRPKC.js → chunk-IMEJQQZU.js} +0 -1
- package/dist/{chunk-2ZWW62T3.js → chunk-KMK6AOB5.js} +1 -1
- package/dist/{chunk-GHO4574A.js → chunk-WYCHM3EP.js} +8 -47
- package/dist/cli.js +5 -5
- package/dist/index.js +4 -4
- package/dist/{intelligence-service-LSQGK34A.js → intelligence-service-XPAKDZJI.js} +2 -2
- package/dist/mcp.js +3 -3
- package/package.json +12 -12
|
@@ -5,11 +5,11 @@ import {
|
|
|
5
5
|
installSkills,
|
|
6
6
|
loadConfigRaw,
|
|
7
7
|
saveConfigPatch
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-HNY2FNJH.js";
|
|
9
9
|
import {
|
|
10
10
|
SKILL_MANIFEST_FILENAME,
|
|
11
11
|
SkillsClients
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-IMEJQQZU.js";
|
|
13
13
|
|
|
14
14
|
// src/skills-autosync.ts
|
|
15
15
|
import fs from "fs";
|
|
@@ -16749,7 +16749,6 @@ export {
|
|
|
16749
16749
|
siteCrawlDeadLinksResponseSchema,
|
|
16750
16750
|
SITE_AUDIT_DEFAULT_PAGE_LIMIT,
|
|
16751
16751
|
SITE_AUDIT_MAX_PAGE_LIMIT,
|
|
16752
|
-
SITE_AUDIT_DEFAULT_EDGE_LIMIT,
|
|
16753
16752
|
SITE_AUDIT_MAX_EDGE_LIMIT,
|
|
16754
16753
|
siteAuditRunRequestSchema,
|
|
16755
16754
|
normalizeSiteAuditRunRequest,
|
|
@@ -638,7 +638,7 @@ import {
|
|
|
638
638
|
wordpressSchemaDeployResultDtoSchema,
|
|
639
639
|
wordpressSchemaStatusResultDtoSchema,
|
|
640
640
|
wordpressStatusDtoSchema
|
|
641
|
-
} from "./chunk-
|
|
641
|
+
} from "./chunk-IMEJQQZU.js";
|
|
642
642
|
|
|
643
643
|
// src/intelligence-service.ts
|
|
644
644
|
import { eq as eq62, desc as desc27, asc as asc11, and as and51, ne as ne8, or as or14, inArray as inArray21, gte as gte14, lte as lte12, isNull as isNull9, sql as sql25, exists } from "drizzle-orm";
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
loadConfig,
|
|
12
12
|
loadConfigRaw,
|
|
13
13
|
saveConfigPatch
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-HNY2FNJH.js";
|
|
15
15
|
import {
|
|
16
16
|
CC_CACHE_DIR,
|
|
17
17
|
DUCKDB_SPEC,
|
|
@@ -157,7 +157,7 @@ import {
|
|
|
157
157
|
siteCrawlSnapshots,
|
|
158
158
|
toAlertView,
|
|
159
159
|
usageCounters
|
|
160
|
-
} from "./chunk-
|
|
160
|
+
} from "./chunk-KMK6AOB5.js";
|
|
161
161
|
import {
|
|
162
162
|
AGENT_MEMORY_VALUE_MAX_BYTES,
|
|
163
163
|
AGENT_PROVIDER_IDS,
|
|
@@ -191,7 +191,6 @@ import {
|
|
|
191
191
|
RunKinds,
|
|
192
192
|
RunStatuses,
|
|
193
193
|
RunTriggers,
|
|
194
|
-
SITE_AUDIT_DEFAULT_EDGE_LIMIT,
|
|
195
194
|
SITE_AUDIT_DEFAULT_PAGE_LIMIT,
|
|
196
195
|
SITE_AUDIT_MAX_EDGE_LIMIT,
|
|
197
196
|
SITE_AUDIT_MAX_PAGE_LIMIT,
|
|
@@ -296,7 +295,7 @@ import {
|
|
|
296
295
|
validationError,
|
|
297
296
|
winnabilityClassLabel,
|
|
298
297
|
withRetry
|
|
299
|
-
} from "./chunk-
|
|
298
|
+
} from "./chunk-IMEJQQZU.js";
|
|
300
299
|
|
|
301
300
|
// src/telemetry.ts
|
|
302
301
|
import crypto from "crypto";
|
|
@@ -10742,7 +10741,7 @@ function clampSiteAuditLimit(limit) {
|
|
|
10742
10741
|
return Math.max(1, Math.min(SITE_AUDIT_MAX_PAGE_LIMIT, Math.floor(limit)));
|
|
10743
10742
|
}
|
|
10744
10743
|
function clampSiteAuditEdgeLimit(limit) {
|
|
10745
|
-
if (limit == null || !Number.isFinite(limit)) return
|
|
10744
|
+
if (limit == null || !Number.isFinite(limit)) return void 0;
|
|
10746
10745
|
return Math.max(1, Math.min(SITE_AUDIT_MAX_EDGE_LIMIT, Math.floor(limit)));
|
|
10747
10746
|
}
|
|
10748
10747
|
function toPageFactor(factor) {
|
|
@@ -10873,43 +10872,6 @@ function deadLinkCheckedCount(edges, pages) {
|
|
|
10873
10872
|
}
|
|
10874
10873
|
return new Set([...edges].filter((edge) => edge.type === "anchor" && edge.classification === "internal" && attemptedUrls.has(edge.to)).map((edge) => edge.to)).size;
|
|
10875
10874
|
}
|
|
10876
|
-
var RATE_LIMITED_STATUS = 429;
|
|
10877
|
-
function partitionDeadLinks(deadLinks) {
|
|
10878
|
-
const reported = deadLinks.findings;
|
|
10879
|
-
const engineUnverified = deadLinks.unverified ?? [];
|
|
10880
|
-
const answeredWithError = (finding) => typeof finding.statusCode === "number" && finding.statusCode >= 400;
|
|
10881
|
-
const dead = reported.filter((finding) => answeredWithError(finding) && finding.statusCode !== RATE_LIMITED_STATUS);
|
|
10882
|
-
const unverified = [
|
|
10883
|
-
...reported.filter((finding) => !answeredWithError(finding) || finding.statusCode === RATE_LIMITED_STATUS),
|
|
10884
|
-
...engineUnverified
|
|
10885
|
-
];
|
|
10886
|
-
return { dead, unverified };
|
|
10887
|
-
}
|
|
10888
|
-
function reportedTermination(summary) {
|
|
10889
|
-
const limits = summary.limits;
|
|
10890
|
-
if (limits) {
|
|
10891
|
-
if (limits.maxBytes && (summary.bytesRead ?? 0) >= limits.maxBytes) return "max-bytes";
|
|
10892
|
-
if (limits.maxDurationMs && (summary.elapsedMs ?? 0) >= limits.maxDurationMs) return "max-duration";
|
|
10893
|
-
if (limits.maxFetches && (summary.fetchesStarted ?? 0) >= limits.maxFetches) return "max-fetches";
|
|
10894
|
-
}
|
|
10895
|
-
return summary.terminationReason ?? "complete";
|
|
10896
|
-
}
|
|
10897
|
-
function crawlBudgetsFor(maxPages) {
|
|
10898
|
-
return {
|
|
10899
|
-
// 2x the ~745 KB/page measured on a media-heavy production site, so the
|
|
10900
|
-
// byte cap is headroom rather than the thing that stops the crawl.
|
|
10901
|
-
maxBytes: maxPages * 15e5,
|
|
10902
|
-
// ~5 pages/s at the engine's default concurrency of 5, doubled for slow
|
|
10903
|
-
// origins, and never below the engine's own 2-minute floor.
|
|
10904
|
-
maxDurationMs: Math.max(12e4, Math.ceil(maxPages / 5 * 1e3 * 2)),
|
|
10905
|
-
// Redirects and dead-link probes cost fetches without producing pages.
|
|
10906
|
-
maxFetches: Math.ceil(maxPages * 1.5),
|
|
10907
|
-
// Raised off the default of 10 because it is an ADMISSION limit: a sitemap
|
|
10908
|
-
// with many query-parameter variants trips it during seeding and latches a
|
|
10909
|
-
// soft reason that then masks whatever really stops the crawl.
|
|
10910
|
-
maxQueryVariants: Math.max(50, Math.ceil(maxPages / 10))
|
|
10911
|
-
};
|
|
10912
|
-
}
|
|
10913
10875
|
async function executeSiteAudit(db, runId, projectId, opts = {}) {
|
|
10914
10876
|
const startedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
10915
10877
|
const claim = db.update(runs).set({ status: "running", startedAt }).where(and12(eq15(runs.id, runId), eq15(runs.projectId, projectId), eq15(runs.status, "queued"))).run();
|
|
@@ -11210,7 +11172,6 @@ async function executeSiteAudit(db, runId, projectId, opts = {}) {
|
|
|
11210
11172
|
maxEdges,
|
|
11211
11173
|
maxDepth: opts.maxDepth ?? null
|
|
11212
11174
|
});
|
|
11213
|
-
const budgets = crawlBudgetsFor(maxPages);
|
|
11214
11175
|
const report = await runSiteCrawl(crawlRootUrl, {
|
|
11215
11176
|
mode: "summary",
|
|
11216
11177
|
sitemapUrl: opts.sitemapUrl,
|
|
@@ -11218,7 +11179,6 @@ async function executeSiteAudit(db, runId, projectId, opts = {}) {
|
|
|
11218
11179
|
maxEdges,
|
|
11219
11180
|
maxDepth: opts.maxDepth,
|
|
11220
11181
|
checkDeadLinks: opts.checkDeadLinks ?? false,
|
|
11221
|
-
...budgets,
|
|
11222
11182
|
signal: opts.signal,
|
|
11223
11183
|
onEvent: persistEvent
|
|
11224
11184
|
});
|
|
@@ -11253,7 +11213,8 @@ async function executeSiteAudit(db, runId, projectId, opts = {}) {
|
|
|
11253
11213
|
const errorCount = observedErrorCount(observedPages.values());
|
|
11254
11214
|
const terminalStatus = crawlSummary.complete ? "completed" : "partial";
|
|
11255
11215
|
const deadLinksChecked = opts.checkDeadLinks ? deadLinkCheckedCount(observedEdges.values(), observedPages.values()) : 0;
|
|
11256
|
-
const
|
|
11216
|
+
const deadLinkFindings = report.deadLinks.findings;
|
|
11217
|
+
const unverifiedLinks = report.deadLinks.unverified;
|
|
11257
11218
|
const deadLinksFound = deadLinkFindings.length;
|
|
11258
11219
|
const deadLinksUnverified = new Set(unverifiedLinks.map((finding) => finding.to)).size;
|
|
11259
11220
|
const legacyIssues = factors.map((factor) => toLegacyIssue(factor, crawlSummary.auditRollup.auditedPages)).filter((issue) => issue !== null);
|
|
@@ -11345,7 +11306,7 @@ async function executeSiteAudit(db, runId, projectId, opts = {}) {
|
|
|
11345
11306
|
maxDepth: opts.maxDepth ?? null,
|
|
11346
11307
|
checkDeadLinks: opts.checkDeadLinks ?? false,
|
|
11347
11308
|
complete: crawlSummary.complete,
|
|
11348
|
-
termination:
|
|
11309
|
+
termination: crawlSummary.terminationReason ?? "complete",
|
|
11349
11310
|
detailsAvailable: true,
|
|
11350
11311
|
pagesDiscovered: crawlSummary.pagesDiscovered,
|
|
11351
11312
|
pagesFetched: crawlSummary.pagesFetched,
|
|
@@ -11896,7 +11857,7 @@ function readStoredGroundingSources(rawResponse) {
|
|
|
11896
11857
|
return result;
|
|
11897
11858
|
}
|
|
11898
11859
|
async function backfillInsightsCommand(project, opts) {
|
|
11899
|
-
const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-
|
|
11860
|
+
const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-XPAKDZJI.js");
|
|
11900
11861
|
const config = loadConfig();
|
|
11901
11862
|
const db = createClient(config.database);
|
|
11902
11863
|
migrate(db);
|
package/dist/cli.js
CHANGED
|
@@ -26,11 +26,11 @@ import {
|
|
|
26
26
|
showFirstRunNotice,
|
|
27
27
|
trackCliCommandFinished,
|
|
28
28
|
trackEvent
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-WYCHM3EP.js";
|
|
30
30
|
import {
|
|
31
31
|
autoSyncSkills,
|
|
32
32
|
formatAutoSyncNotice
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-EBRGLDTB.js";
|
|
34
34
|
import {
|
|
35
35
|
CliError,
|
|
36
36
|
EXIT_SYSTEM_ERROR,
|
|
@@ -55,7 +55,7 @@ import {
|
|
|
55
55
|
saveConfigPatch,
|
|
56
56
|
systemError,
|
|
57
57
|
usageError
|
|
58
|
-
} from "./chunk-
|
|
58
|
+
} from "./chunk-HNY2FNJH.js";
|
|
59
59
|
import {
|
|
60
60
|
CLOUDFLARE_WORKER_BINDINGS,
|
|
61
61
|
CLOUDFLARE_WORKER_GENERATED_MARKER,
|
|
@@ -69,7 +69,7 @@ import {
|
|
|
69
69
|
projects,
|
|
70
70
|
queries,
|
|
71
71
|
renderReportHtml
|
|
72
|
-
} from "./chunk-
|
|
72
|
+
} from "./chunk-KMK6AOB5.js";
|
|
73
73
|
import {
|
|
74
74
|
AdsDeliverySnapshotStatuses,
|
|
75
75
|
AdsHistoricalCampaignRollupStatuses,
|
|
@@ -138,7 +138,7 @@ import {
|
|
|
138
138
|
providerQuotaPolicySchema,
|
|
139
139
|
resolveProviderInput,
|
|
140
140
|
winnabilityClassSchema
|
|
141
|
-
} from "./chunk-
|
|
141
|
+
} from "./chunk-IMEJQQZU.js";
|
|
142
142
|
|
|
143
143
|
// src/cli.ts
|
|
144
144
|
import { pathToFileURL } from "url";
|
package/dist/index.js
CHANGED
|
@@ -3,12 +3,12 @@ import {
|
|
|
3
3
|
createGoogleMarketingCredentialStore,
|
|
4
4
|
createGoogleMarketingRuntime,
|
|
5
5
|
createServer
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-WYCHM3EP.js";
|
|
7
7
|
import {
|
|
8
8
|
loadConfig
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-HNY2FNJH.js";
|
|
10
|
+
import "./chunk-KMK6AOB5.js";
|
|
11
|
+
import "./chunk-IMEJQQZU.js";
|
|
12
12
|
export {
|
|
13
13
|
GoogleMarketingRuntimeError,
|
|
14
14
|
createGoogleMarketingCredentialStore,
|
package/dist/mcp.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
autoSyncSkills
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-EBRGLDTB.js";
|
|
4
4
|
import {
|
|
5
5
|
createApiClient,
|
|
6
6
|
createCanonryMcpServer
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-HNY2FNJH.js";
|
|
8
8
|
import {
|
|
9
9
|
isReadOnlyKey
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-IMEJQQZU.js";
|
|
11
11
|
|
|
12
12
|
// src/mcp/cli.ts
|
|
13
13
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@canonry/canonry",
|
|
3
|
-
"version": "4.178.
|
|
3
|
+
"version": "4.178.4",
|
|
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
|
"license": "FSL-1.1-ALv2",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
43
|
"@anthropic-ai/sdk": "^0.91.1",
|
|
44
|
-
"@canonry/aeo-audit": "
|
|
44
|
+
"@canonry/aeo-audit": "7.1.0",
|
|
45
45
|
"@fastify/rate-limit": "^11.2.0",
|
|
46
46
|
"@fastify/static": "^9.1.1",
|
|
47
47
|
"@google/genai": "^1.46.0",
|
|
@@ -70,30 +70,30 @@
|
|
|
70
70
|
"@types/node-cron": "^3.0.11",
|
|
71
71
|
"tsup": "^8.5.1",
|
|
72
72
|
"tsx": "^4.19.0",
|
|
73
|
+
"@ainyc/canonry-api-client": "0.0.0",
|
|
73
74
|
"@ainyc/canonry-config": "0.0.0",
|
|
75
|
+
"@ainyc/canonry-contracts": "0.0.0",
|
|
74
76
|
"@ainyc/canonry-api-routes": "0.0.0",
|
|
75
77
|
"@ainyc/canonry-db": "0.0.0",
|
|
76
|
-
"@ainyc/canonry-contracts": "0.0.0",
|
|
77
|
-
"@ainyc/canonry-api-client": "0.0.0",
|
|
78
|
-
"@ainyc/canonry-integration-cloud-run": "0.0.0",
|
|
79
78
|
"@ainyc/canonry-integration-bing": "0.0.0",
|
|
79
|
+
"@ainyc/canonry-integration-cloud-run": "0.0.0",
|
|
80
80
|
"@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
|
|
81
|
-
"@ainyc/canonry-integration-commoncrawl": "0.0.0",
|
|
82
|
-
"@ainyc/canonry-integration-google": "0.0.0",
|
|
83
81
|
"@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
|
|
82
|
+
"@ainyc/canonry-integration-commoncrawl": "0.0.0",
|
|
84
83
|
"@ainyc/canonry-integration-google-ads": "0.0.0",
|
|
85
|
-
"@ainyc/canonry-integration-google-
|
|
84
|
+
"@ainyc/canonry-integration-google-business-profile": "0.0.0",
|
|
86
85
|
"@ainyc/canonry-integration-google-tag-manager": "0.0.0",
|
|
86
|
+
"@ainyc/canonry-integration-google-places": "0.0.0",
|
|
87
87
|
"@ainyc/canonry-integration-openai-ads": "0.0.0",
|
|
88
|
-
"@ainyc/canonry-integration-google
|
|
88
|
+
"@ainyc/canonry-integration-google": "0.0.0",
|
|
89
89
|
"@ainyc/canonry-integration-traffic": "0.0.0",
|
|
90
90
|
"@ainyc/canonry-integration-wordpress": "0.0.0",
|
|
91
|
-
"@ainyc/canonry-intelligence": "0.0.0",
|
|
92
91
|
"@ainyc/canonry-provider-cdp": "0.0.0",
|
|
93
|
-
"@ainyc/canonry-provider-gemini": "0.0.0",
|
|
94
92
|
"@ainyc/canonry-provider-claude": "0.0.0",
|
|
95
|
-
"@ainyc/canonry-
|
|
93
|
+
"@ainyc/canonry-intelligence": "0.0.0",
|
|
94
|
+
"@ainyc/canonry-provider-gemini": "0.0.0",
|
|
96
95
|
"@ainyc/canonry-provider-openai": "0.0.0",
|
|
96
|
+
"@ainyc/canonry-provider-local": "0.0.0",
|
|
97
97
|
"@ainyc/canonry-provider-perplexity": "0.0.0"
|
|
98
98
|
},
|
|
99
99
|
"scripts": {
|