@canonry/canonry 7.9.0 → 7.10.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/assets/{AuditHistoryPanel-D0nukTwD.js → AuditHistoryPanel-BgcvPo6g.js} +1 -1
- package/assets/assets/{BacklinksPage-B525ij0g.js → BacklinksPage-DZ4tauAs.js} +1 -1
- package/assets/assets/{HistoryPage-DvupqQDM.js → HistoryPage-DWG52dz1.js} +1 -1
- package/assets/assets/{MeasurementPropertyPage-CwDbi1XN.js → MeasurementPropertyPage-DTx2iQLV.js} +1 -1
- package/assets/assets/{ProjectPage-DmZZ2C7q.js → ProjectPage-CCf70zbI.js} +1 -1
- package/assets/assets/{RunsPage-DHTvHcGm.js → RunsPage-B6MhRqxN.js} +1 -1
- package/assets/assets/{SettingsPage-BwAFzB7A.js → SettingsPage-Bxv7OSHT.js} +1 -1
- package/assets/assets/SiteHealthSection-C5x7oiFL.js +4 -0
- package/assets/assets/{TrafficPage-BOcXASAM.js → TrafficPage-C5gyQopi.js} +1 -1
- package/assets/assets/{TrafficSourceDetailPage-DTq0cN6g.js → TrafficSourceDetailPage-Dv2ZRNvN.js} +1 -1
- package/assets/assets/{extract-error-message-BOTDI6g5.js → extract-error-message-C5pr51ph.js} +1 -1
- package/assets/assets/{index-BLJfGYUw.js → index-BhXHm5nG.js} +3 -3
- package/assets/assets/{react-sigma_core.esm.min-BEBdJNtD.js → react-sigma_core.esm.min-P5bVaYly.js} +1 -1
- package/assets/assets/{v2-overview-adapter-BPZ-H3VY.js → v2-overview-adapter-QtI4xO_4.js} +1 -1
- package/assets/index.html +1 -1
- package/dist/{chunk-KRFTA4I7.js → chunk-52PHEGHT.js} +89 -50
- package/dist/{chunk-T2V2PESH.js → chunk-5ZBN3EEK.js} +2 -2
- package/dist/{chunk-DO7XPDG5.js → chunk-66DVP4DN.js} +9 -1
- package/dist/{chunk-NU62UT2S.js → chunk-FVMWUT2R.js} +122 -21
- package/dist/{chunk-AAMKTL6B.js → chunk-HL3C6Z7T.js} +3 -3
- package/dist/{chunk-LO56QXPO.js → chunk-IKXVLT4M.js} +2 -2
- package/dist/{chunk-ZLB7WX5D.js → chunk-VSZJVBVR.js} +1 -1
- package/dist/cli.js +9 -9
- package/dist/{demo-server-KDMG3APY.js → demo-server-WZIB4JKJ.js} +4 -4
- package/dist/index.js +6 -6
- package/dist/{intelligence-service-LAXJFE3U.js → intelligence-service-KC62A4X5.js} +2 -2
- package/dist/mcp.js +4 -4
- package/package.json +11 -11
- package/assets/assets/SiteHealthSection-hi54eSIt.js +0 -4
|
@@ -20,20 +20,20 @@ import {
|
|
|
20
20
|
saveConfig,
|
|
21
21
|
saveConfigPatch,
|
|
22
22
|
sentimentInstallReadiness
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-IKXVLT4M.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-5ZBN3EEK.js";
|
|
31
31
|
import {
|
|
32
32
|
CanonryMcpToolNames,
|
|
33
33
|
CliError,
|
|
34
34
|
PACKAGE_VERSION,
|
|
35
35
|
canonryMcpTools
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-VSZJVBVR.js";
|
|
37
37
|
import {
|
|
38
38
|
CC_CACHE_DIR,
|
|
39
39
|
DUCKDB_SPEC,
|
|
@@ -205,7 +205,7 @@ import {
|
|
|
205
205
|
siteLivenessState,
|
|
206
206
|
toAlertView,
|
|
207
207
|
usageCounters
|
|
208
|
-
} from "./chunk-
|
|
208
|
+
} from "./chunk-52PHEGHT.js";
|
|
209
209
|
import {
|
|
210
210
|
AGENT_MEMORY_VALUE_MAX_BYTES,
|
|
211
211
|
AGENT_NONE,
|
|
@@ -414,7 +414,7 @@ import {
|
|
|
414
414
|
visibilityReportRequestSchema,
|
|
415
415
|
winnabilityClassLabel,
|
|
416
416
|
withRetry
|
|
417
|
-
} from "./chunk-
|
|
417
|
+
} from "./chunk-66DVP4DN.js";
|
|
418
418
|
|
|
419
419
|
// src/runtime-context.ts
|
|
420
420
|
function cliRuntimeContext(env = process.env, stdio = process) {
|
|
@@ -3543,6 +3543,7 @@ import { createRequire as createRequire3 } from "module";
|
|
|
3543
3543
|
import crypto29 from "crypto";
|
|
3544
3544
|
import fs9 from "fs";
|
|
3545
3545
|
import path8 from "path";
|
|
3546
|
+
import { isIP } from "net";
|
|
3546
3547
|
import { fileURLToPath as fileURLToPath3 } from "url";
|
|
3547
3548
|
import { and as and23, eq as eq29 } from "drizzle-orm";
|
|
3548
3549
|
|
|
@@ -7872,7 +7873,7 @@ function nonBlank(value) {
|
|
|
7872
7873
|
return trimmed ? trimmed : void 0;
|
|
7873
7874
|
}
|
|
7874
7875
|
function resolveBuildCommit(env = process.env) {
|
|
7875
|
-
const embedded = true ? "
|
|
7876
|
+
const embedded = true ? "b8858fd6adad2abea13e838eab395ad7aef15323" : void 0;
|
|
7876
7877
|
return nonBlank(embedded) ?? nonBlank(env.CANONRY_COMMIT);
|
|
7877
7878
|
}
|
|
7878
7879
|
function resolveInstanceIdentity(env = process.env) {
|
|
@@ -16465,7 +16466,7 @@ function partialLists(root) {
|
|
|
16465
16466
|
if (uncounted.length === 1) {
|
|
16466
16467
|
const index = uncounted[0];
|
|
16467
16468
|
const key = lists[index][0];
|
|
16468
|
-
const paged = cursorForList(object, path9, key, root) || typeof object.truncated === "boolean" || typeof object[`${key}Truncated`] === "boolean" || ["items", "rows", "results"].includes(key);
|
|
16469
|
+
const paged = object === root || cursorForList(object, path9, key, root) || typeof object.truncated === "boolean" || typeof object[`${key}Truncated`] === "boolean" || ["items", "rows", "results"].includes(key);
|
|
16469
16470
|
if (paged) counts[index] = bareTotal(numbers);
|
|
16470
16471
|
}
|
|
16471
16472
|
for (const [index, [key, rows]] of lists.entries()) {
|
|
@@ -16746,12 +16747,12 @@ function projectionPath(path9) {
|
|
|
16746
16747
|
const digest = createHash5("sha256").update(path9).digest("hex").slice(0, 12);
|
|
16747
16748
|
return `${truncateUtf16(path9, 48)}...#${digest}${path9.slice(-24)}`;
|
|
16748
16749
|
}
|
|
16749
|
-
function boundedProjection(full) {
|
|
16750
|
+
function boundedProjection(full, partialRows, reserve = 0) {
|
|
16750
16751
|
const value = JSON.parse(full);
|
|
16751
|
-
|
|
16752
|
+
let summary = {
|
|
16752
16753
|
droppedKeys: [],
|
|
16753
16754
|
keptItems: {},
|
|
16754
|
-
projection: "Only complete array rows and marked partial string prefixes are shown; omitted fields are not evidence. Never follow a cursor from a cut page; re-request the original cursor with a smaller limit."
|
|
16755
|
+
projection: partialRows ? "Array rows are complete unless slicedKeys or droppedKeys name a field inside one; sliced strings are partial prefixes and omitted fields are not evidence. Never follow a cursor from a cut page; re-request the original cursor with a smaller limit." : "Only complete array rows and marked partial string prefixes are shown; omitted fields are not evidence. Never follow a cursor from a cut page; re-request the original cursor with a smaller limit."
|
|
16755
16756
|
};
|
|
16756
16757
|
const skippedMetadata = () => {
|
|
16757
16758
|
summary.moreMetadataEntries = (summary.moreMetadataEntries ?? 0) + 1;
|
|
@@ -16777,6 +16778,7 @@ function boundedProjection(full) {
|
|
|
16777
16778
|
}
|
|
16778
16779
|
if (dropped > summary.droppedKeys.length) summary.moreDroppedKeys = dropped - summary.droppedKeys.length;
|
|
16779
16780
|
};
|
|
16781
|
+
const cutOwners = /* @__PURE__ */ new Set();
|
|
16780
16782
|
const project = (input, budget, path9, owner, ownerPath = "") => {
|
|
16781
16783
|
if (Array.isArray(input)) {
|
|
16782
16784
|
const rows = [];
|
|
@@ -16784,11 +16786,26 @@ function boundedProjection(full) {
|
|
|
16784
16786
|
for (const row of input) {
|
|
16785
16787
|
const text = serializeResult(row);
|
|
16786
16788
|
const cost = text.length + (rows.length > 0 ? 1 : 0);
|
|
16787
|
-
if (used2 + cost
|
|
16788
|
-
|
|
16789
|
-
|
|
16789
|
+
if (used2 + cost <= budget) {
|
|
16790
|
+
rows.push(text);
|
|
16791
|
+
used2 += cost;
|
|
16792
|
+
continue;
|
|
16793
|
+
}
|
|
16794
|
+
if (partialRows && (rows.length === 0 || text.length > MAX_TOOL_RESULT_CHARS)) {
|
|
16795
|
+
const before = { summary: serializeResult(summary), dropped };
|
|
16796
|
+
const partial = project(row, budget - used2 - (rows.length > 0 ? 1 : 0), `${path9 || "items"}[${rows.length}]`);
|
|
16797
|
+
if (partial !== void 0 && partial !== "{}" && partial !== "[]") {
|
|
16798
|
+
partialRows.set(path9 || "items", rows.length);
|
|
16799
|
+
rows.push(partial);
|
|
16800
|
+
} else {
|
|
16801
|
+
summary = JSON.parse(before.summary);
|
|
16802
|
+
dropped = before.dropped;
|
|
16803
|
+
}
|
|
16804
|
+
}
|
|
16805
|
+
break;
|
|
16790
16806
|
}
|
|
16791
16807
|
if (rows.length < input.length) {
|
|
16808
|
+
if (partialRows && owner) cutOwners.add(owner);
|
|
16792
16809
|
record2(summary.keptItems, path9 || "items", `${rows.length} of ${input.length}`);
|
|
16793
16810
|
if (rows.length === 0) omit(path9 || "items");
|
|
16794
16811
|
if (owner) {
|
|
@@ -16812,9 +16829,8 @@ function boundedProjection(full) {
|
|
|
16812
16829
|
omit(path9 || "(root)");
|
|
16813
16830
|
return void 0;
|
|
16814
16831
|
}
|
|
16815
|
-
const
|
|
16816
|
-
const
|
|
16817
|
-
fields.sort((a, b) => priority(a) - priority(b));
|
|
16832
|
+
const priority = ([key, child]) => key === "queryPage" && isRecord5(child) ? 0 : typeof child === "string" && child.length > budget ? 2 : typeof child !== "object" || child === null ? 0 : partialRows && serializeResult(child).length > budget ? 2 : 1;
|
|
16833
|
+
const fields = Object.entries(input).filter(([key]) => !key.startsWith("__")).map((field) => ({ field, rank: priority(field) })).sort((a, b) => a.rank - b.rank).map(({ field }) => field);
|
|
16818
16834
|
const shown2 = [];
|
|
16819
16835
|
let used = 2;
|
|
16820
16836
|
for (const [key, child] of fields) {
|
|
@@ -16830,17 +16846,40 @@ function boundedProjection(full) {
|
|
|
16830
16846
|
shown2.push(prefix + text);
|
|
16831
16847
|
used += prefix.length + text.length + (shown2.length > 1 ? 1 : 0);
|
|
16832
16848
|
}
|
|
16849
|
+
if (path9 && cutOwners.has(input)) shown2.push('"__truncated":true');
|
|
16833
16850
|
return `{${shown2.join(",")}}`;
|
|
16834
16851
|
};
|
|
16835
|
-
const projected = project(value, MAX_TOOL_RESULT_CHARS - PROJECTION_SUMMARY_CHARS, "");
|
|
16852
|
+
const projected = project(value, MAX_TOOL_RESULT_CHARS - PROJECTION_SUMMARY_CHARS - reserve, "");
|
|
16836
16853
|
const shown = projected === void 0 ? {} : JSON.parse(projected);
|
|
16837
16854
|
const output = isRecord5(shown) ? shown : { items: shown };
|
|
16838
|
-
|
|
16839
|
-
|
|
16840
|
-
|
|
16855
|
+
const result2 = { ...output, __truncated: true, [TRUNCATION_SUMMARY_KEY]: summary };
|
|
16856
|
+
return serializeResult(partialRows ? withPartialLists(result2) : result2);
|
|
16857
|
+
}
|
|
16858
|
+
function rowsShown(cut, path9) {
|
|
16859
|
+
if (path9.includes("[")) return Infinity;
|
|
16860
|
+
const list = path9.split(".").reduce((owner, key) => isRecord5(owner) ? owner[key] : void 0, cut);
|
|
16861
|
+
return Array.isArray(list) ? list.length : 0;
|
|
16862
|
+
}
|
|
16863
|
+
function withPartialRows(full, whole) {
|
|
16864
|
+
const rescued = /* @__PURE__ */ new Map();
|
|
16865
|
+
let partial = boundedProjection(full, rescued);
|
|
16866
|
+
if (!fitsCap(partial)) {
|
|
16867
|
+
const { [PARTIAL_LISTS_KEY]: lists, __pagination: pagination } = JSON.parse(partial);
|
|
16868
|
+
rescued.clear();
|
|
16869
|
+
partial = boundedProjection(full, rescued, serializeResult({ lists, pagination }).length);
|
|
16870
|
+
}
|
|
16871
|
+
if (!fitsCap(partial)) return whole;
|
|
16872
|
+
const cut = JSON.parse(whole);
|
|
16873
|
+
return [...rescued].some(([path9, index]) => rowsShown(cut, path9) <= index) ? partial : whole;
|
|
16874
|
+
}
|
|
16875
|
+
function truncateToolResult(details, options = {}) {
|
|
16841
16876
|
const annotated = withPartialLists(details);
|
|
16842
16877
|
const full = serializeResult(annotated);
|
|
16843
16878
|
if (full.length <= MAX_TOOL_RESULT_CHARS) return full;
|
|
16879
|
+
const whole = truncateWholeRows(details, full);
|
|
16880
|
+
return options.partialRows ? withPartialRows(full, whole) : whole;
|
|
16881
|
+
}
|
|
16882
|
+
function truncateWholeRows(details, full) {
|
|
16844
16883
|
if (full.length > MAX_STRUCTURED_TRUNCATION_CHARS) return boundedProjection(full);
|
|
16845
16884
|
if (Array.isArray(details)) {
|
|
16846
16885
|
const render2 = (rows) => serializeResult({
|
|
@@ -18140,7 +18179,8 @@ function adaptRemoteTool(client, tool) {
|
|
|
18140
18179
|
}
|
|
18141
18180
|
}
|
|
18142
18181
|
return {
|
|
18143
|
-
|
|
18182
|
+
// A fetched document can be one row larger than the cap; show it in part rather than not at all.
|
|
18183
|
+
content: [{ type: "text", text: truncateToolResult(shown, { partialRows: true }) }],
|
|
18144
18184
|
details: result2,
|
|
18145
18185
|
isError: isRemoteToolError(result2)
|
|
18146
18186
|
};
|
|
@@ -21280,6 +21320,28 @@ function isLoopbackBindHost(host) {
|
|
|
21280
21320
|
if (/^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(normalized)) return true;
|
|
21281
21321
|
return false;
|
|
21282
21322
|
}
|
|
21323
|
+
function isAllowedHost(host, allowedHosts) {
|
|
21324
|
+
const normalized = host.trim().toLowerCase().replace(/^\[|\]$/g, "");
|
|
21325
|
+
return allowedHosts.has(normalized) || isIP(normalized) !== 0;
|
|
21326
|
+
}
|
|
21327
|
+
function buildAllowedHosts(bindHost, ...configuredUrls) {
|
|
21328
|
+
const allowed = /* @__PURE__ */ new Set(["localhost", "127.0.0.1", "::1"]);
|
|
21329
|
+
if (bindHost) {
|
|
21330
|
+
const normalized = bindHost.trim().toLowerCase().replace(/^\[|\]$/g, "");
|
|
21331
|
+
if (normalized && !isLoopbackBindHost(normalized)) {
|
|
21332
|
+
allowed.add(normalized);
|
|
21333
|
+
}
|
|
21334
|
+
}
|
|
21335
|
+
for (const configuredUrl of configuredUrls) {
|
|
21336
|
+
if (!configuredUrl) continue;
|
|
21337
|
+
try {
|
|
21338
|
+
const url = new URL(configuredUrl.trim());
|
|
21339
|
+
if (url.hostname) allowed.add(url.hostname.toLowerCase().replace(/^\[|\]$/g, ""));
|
|
21340
|
+
} catch {
|
|
21341
|
+
}
|
|
21342
|
+
}
|
|
21343
|
+
return allowed;
|
|
21344
|
+
}
|
|
21283
21345
|
function resolveGooglePublicUrl(config, basePath) {
|
|
21284
21346
|
const configured = config.publicUrl?.trim();
|
|
21285
21347
|
if (configured) return configured;
|
|
@@ -21432,6 +21494,45 @@ async function createServer(opts) {
|
|
|
21432
21494
|
genReqId: () => crypto29.randomUUID(),
|
|
21433
21495
|
trustProxy
|
|
21434
21496
|
});
|
|
21497
|
+
const allowedHosts = buildAllowedHosts(opts.host, opts.config.apiUrl, opts.config.publicUrl);
|
|
21498
|
+
const embedAllowedOrigins = new Set(
|
|
21499
|
+
(embed.allowedOrigins ?? []).map((o) => {
|
|
21500
|
+
try {
|
|
21501
|
+
return new URL(o).origin;
|
|
21502
|
+
} catch {
|
|
21503
|
+
return null;
|
|
21504
|
+
}
|
|
21505
|
+
}).filter((h) => h !== null)
|
|
21506
|
+
);
|
|
21507
|
+
app.addHook("onRequest", async (req, reply) => {
|
|
21508
|
+
const reject = (message) => {
|
|
21509
|
+
const error = forbidden(message);
|
|
21510
|
+
return reply.status(error.statusCode).send(error.toJSON());
|
|
21511
|
+
};
|
|
21512
|
+
const rawHostHeader = req.headers.host?.toLowerCase() ?? "";
|
|
21513
|
+
let requestUrl;
|
|
21514
|
+
try {
|
|
21515
|
+
requestUrl = new URL(`http://${rawHostHeader}`);
|
|
21516
|
+
} catch {
|
|
21517
|
+
return reject("Unexpected Host header");
|
|
21518
|
+
}
|
|
21519
|
+
if (!isAllowedHost(requestUrl.hostname, allowedHosts)) {
|
|
21520
|
+
return reject("Unexpected Host header");
|
|
21521
|
+
}
|
|
21522
|
+
const origin = req.headers.origin;
|
|
21523
|
+
if (origin) {
|
|
21524
|
+
let originUrl;
|
|
21525
|
+
try {
|
|
21526
|
+
originUrl = new URL(origin);
|
|
21527
|
+
} catch {
|
|
21528
|
+
return reject("Invalid Origin header");
|
|
21529
|
+
}
|
|
21530
|
+
const requestHost = req.headers.host?.toLowerCase() ?? "";
|
|
21531
|
+
if (originUrl.host !== requestHost && !embedAllowedOrigins.has(originUrl.origin)) {
|
|
21532
|
+
return reject("Cross-origin request refused");
|
|
21533
|
+
}
|
|
21534
|
+
}
|
|
21535
|
+
});
|
|
21435
21536
|
const registry = new ProviderRegistry();
|
|
21436
21537
|
const providers = opts.config.providers ?? {};
|
|
21437
21538
|
if (opts.config.geminiApiKey && !providers.gemini) {
|
|
@@ -4,14 +4,14 @@ import {
|
|
|
4
4
|
installSkills,
|
|
5
5
|
loadConfigRaw,
|
|
6
6
|
saveConfigPatch
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-IKXVLT4M.js";
|
|
8
8
|
import {
|
|
9
9
|
PACKAGE_VERSION
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-VSZJVBVR.js";
|
|
11
11
|
import {
|
|
12
12
|
SKILL_MANIFEST_FILENAME,
|
|
13
13
|
SkillsClients
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-66DVP4DN.js";
|
|
15
15
|
|
|
16
16
|
// src/skills-autosync.ts
|
|
17
17
|
import fs from "fs";
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
PACKAGE_VERSION,
|
|
6
6
|
canonryMcpTools,
|
|
7
7
|
isMachineFormat
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-VSZJVBVR.js";
|
|
9
9
|
import {
|
|
10
10
|
AGENT_PROVIDER_IDS,
|
|
11
11
|
CANONRY_NPM_PACKAGE_URL,
|
|
@@ -50,7 +50,7 @@ import {
|
|
|
50
50
|
skillsClientSchema,
|
|
51
51
|
upgradeCaveatFor,
|
|
52
52
|
upgradeCommandFor
|
|
53
|
-
} from "./chunk-
|
|
53
|
+
} from "./chunk-66DVP4DN.js";
|
|
54
54
|
|
|
55
55
|
// src/config.ts
|
|
56
56
|
import fs from "fs";
|
package/dist/cli.js
CHANGED
|
@@ -32,11 +32,11 @@ import {
|
|
|
32
32
|
trackCliCommandFinished,
|
|
33
33
|
trackEvent,
|
|
34
34
|
waitForServerRuntimeStartup
|
|
35
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-FVMWUT2R.js";
|
|
36
36
|
import {
|
|
37
37
|
autoSyncSkills,
|
|
38
38
|
formatAutoSyncNotice
|
|
39
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-HL3C6Z7T.js";
|
|
40
40
|
import {
|
|
41
41
|
configExists,
|
|
42
42
|
createApiClient,
|
|
@@ -53,13 +53,13 @@ import {
|
|
|
53
53
|
saveConfig,
|
|
54
54
|
saveConfigPatch,
|
|
55
55
|
shouldPrintServeSkillsNudge
|
|
56
|
-
} from "./chunk-
|
|
56
|
+
} from "./chunk-IKXVLT4M.js";
|
|
57
57
|
import {
|
|
58
58
|
DEFAULT_DEMO_TRUSTED_PROXIES,
|
|
59
59
|
trustedProxiesProblem,
|
|
60
60
|
trustedProxyProblem
|
|
61
61
|
} from "./chunk-RB2F4D3Z.js";
|
|
62
|
-
import "./chunk-
|
|
62
|
+
import "./chunk-5ZBN3EEK.js";
|
|
63
63
|
import {
|
|
64
64
|
CliError,
|
|
65
65
|
EXIT_SYSTEM_ERROR,
|
|
@@ -71,7 +71,7 @@ import {
|
|
|
71
71
|
runMeasurementDraftAction,
|
|
72
72
|
systemError,
|
|
73
73
|
usageError
|
|
74
|
-
} from "./chunk-
|
|
74
|
+
} from "./chunk-VSZJVBVR.js";
|
|
75
75
|
import {
|
|
76
76
|
CLOUDFLARE_WORKER_BINDINGS,
|
|
77
77
|
CLOUDFLARE_WORKER_GENERATED_MARKER,
|
|
@@ -100,7 +100,7 @@ import {
|
|
|
100
100
|
querySnapshots,
|
|
101
101
|
rawEventSamples,
|
|
102
102
|
runs
|
|
103
|
-
} from "./chunk-
|
|
103
|
+
} from "./chunk-52PHEGHT.js";
|
|
104
104
|
import {
|
|
105
105
|
AdsDeliverySnapshotStatuses,
|
|
106
106
|
AdsHistoricalCampaignRollupStatuses,
|
|
@@ -229,7 +229,7 @@ import {
|
|
|
229
229
|
visibilityCompareSelectionSchema,
|
|
230
230
|
visibilityReportRequestSchema,
|
|
231
231
|
winnabilityClassSchema
|
|
232
|
-
} from "./chunk-
|
|
232
|
+
} from "./chunk-66DVP4DN.js";
|
|
233
233
|
|
|
234
234
|
// src/cli.ts
|
|
235
235
|
import { pathToFileURL } from "url";
|
|
@@ -779,7 +779,7 @@ function parseDemoTrustedProxies(values) {
|
|
|
779
779
|
async function demoCommand(options) {
|
|
780
780
|
const { host, port } = parseDemoListenOptions(options);
|
|
781
781
|
const trustProxy = parseDemoTrustedProxies(options.trustProxy);
|
|
782
|
-
const { createDemoServer } = await import("./demo-server-
|
|
782
|
+
const { createDemoServer } = await import("./demo-server-WZIB4JKJ.js");
|
|
783
783
|
const app = await createDemoServer({ trustProxy });
|
|
784
784
|
let stopping = false;
|
|
785
785
|
const stop = () => {
|
|
@@ -1193,7 +1193,7 @@ No DB writes performed. Re-run without --dry-run to apply.`);
|
|
|
1193
1193
|
}
|
|
1194
1194
|
}
|
|
1195
1195
|
async function backfillInsightsCommand(project2, opts) {
|
|
1196
|
-
const { IntelligenceService } = await import("./intelligence-service-
|
|
1196
|
+
const { IntelligenceService } = await import("./intelligence-service-KC62A4X5.js");
|
|
1197
1197
|
const config = loadConfig();
|
|
1198
1198
|
const db = createClient(config.database);
|
|
1199
1199
|
migrate(db);
|
|
@@ -5,11 +5,11 @@ import {
|
|
|
5
5
|
computeFactorAverages,
|
|
6
6
|
layoutSiteCrawlGraphInput,
|
|
7
7
|
persistSiteCrawlGraphLayout
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-5ZBN3EEK.js";
|
|
9
9
|
import {
|
|
10
10
|
PACKAGE_VERSION,
|
|
11
11
|
canonryMcpTools
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-VSZJVBVR.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-52PHEGHT.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-66DVP4DN.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-FVMWUT2R.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-IKXVLT4M.js";
|
|
10
|
+
import "./chunk-5ZBN3EEK.js";
|
|
11
|
+
import "./chunk-VSZJVBVR.js";
|
|
12
|
+
import "./chunk-52PHEGHT.js";
|
|
13
|
+
import "./chunk-66DVP4DN.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-HL3C6Z7T.js";
|
|
4
4
|
import {
|
|
5
5
|
createApiClient,
|
|
6
6
|
createCanonryMcpServer
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-IKXVLT4M.js";
|
|
8
|
+
import "./chunk-VSZJVBVR.js";
|
|
9
9
|
import {
|
|
10
10
|
isReadOnlyKey,
|
|
11
11
|
updateCheckEnvOptOut
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-66DVP4DN.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.10.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
|
"@ainyc/canonry-web": "0.0.0",
|
|
89
89
|
"@ainyc/canonry-api-client": "0.0.0",
|
|
90
90
|
"@ainyc/canonry-contracts": "0.0.0",
|
|
91
|
-
"@ainyc/canonry-config": "0.0.0",
|
|
92
91
|
"@ainyc/canonry-db": "0.0.0",
|
|
92
|
+
"@ainyc/canonry-config": "0.0.0",
|
|
93
93
|
"@ainyc/canonry-api-routes": "0.0.0",
|
|
94
94
|
"@ainyc/canonry-integration-bing": "0.0.0",
|
|
95
|
-
"@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
|
|
96
|
-
"@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
|
|
97
95
|
"@ainyc/canonry-integration-cloud-run": "0.0.0",
|
|
98
|
-
"@ainyc/canonry-integration-
|
|
96
|
+
"@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
|
|
97
|
+
"@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
|
|
99
98
|
"@ainyc/canonry-integration-google-ads": "0.0.0",
|
|
100
|
-
"@ainyc/canonry-integration-google
|
|
101
|
-
"@ainyc/canonry-integration-
|
|
99
|
+
"@ainyc/canonry-integration-google": "0.0.0",
|
|
100
|
+
"@ainyc/canonry-integration-commoncrawl": "0.0.0",
|
|
102
101
|
"@ainyc/canonry-integration-google-places": "0.0.0",
|
|
103
|
-
"@ainyc/canonry-integration-
|
|
102
|
+
"@ainyc/canonry-integration-google-business-profile": "0.0.0",
|
|
104
103
|
"@ainyc/canonry-integration-traffic": "0.0.0",
|
|
105
104
|
"@ainyc/canonry-integration-wordpress": "0.0.0",
|
|
106
|
-
"@ainyc/canonry-
|
|
105
|
+
"@ainyc/canonry-integration-google-tag-manager": "0.0.0",
|
|
107
106
|
"@ainyc/canonry-provider-cdp": "0.0.0",
|
|
107
|
+
"@ainyc/canonry-intelligence": "0.0.0",
|
|
108
108
|
"@ainyc/canonry-provider-gemini": "0.0.0",
|
|
109
|
-
"@ainyc/canonry-integration-google": "0.0.0",
|
|
110
109
|
"@ainyc/canonry-provider-local": "0.0.0",
|
|
111
|
-
"@ainyc/canonry-provider-muse": "0.0.0",
|
|
112
110
|
"@ainyc/canonry-provider-claude": "0.0.0",
|
|
111
|
+
"@ainyc/canonry-provider-muse": "0.0.0",
|
|
113
112
|
"@ainyc/canonry-provider-openai": "0.0.0",
|
|
114
113
|
"@ainyc/canonry-provider-perplexity": "0.0.0",
|
|
114
|
+
"@ainyc/canonry-integration-openai-ads": "0.0.0",
|
|
115
115
|
"@ainyc/canonry-integration-typesafe": "0.0.0"
|
|
116
116
|
},
|
|
117
117
|
"scripts": {
|