@canonry/canonry 5.12.0 → 5.13.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 -0
- package/assets/assets/{AuditHistoryPanel-DL_NSpfm.js → AuditHistoryPanel-DWDOPf8c.js} +1 -1
- package/assets/assets/{BacklinksPage-BtcBybtX.js → BacklinksPage-DGxq-iU6.js} +1 -1
- package/assets/assets/{HistoryPage-jXj-qi9c.js → HistoryPage-DR91m-gT.js} +1 -1
- package/assets/assets/{MeasurementPropertyPage-DKw401ok.js → MeasurementPropertyPage-a8poltfM.js} +1 -1
- package/assets/assets/{ProjectPage-og4qfFFD.js → ProjectPage-CCCJE7rA.js} +1 -1
- package/assets/assets/{RunRow-nK5iaZe1.js → RunRow-Xe63DyPK.js} +1 -1
- package/assets/assets/{RunsPage-CMgr3YSF.js → RunsPage-DK119ZZw.js} +1 -1
- package/assets/assets/{SettingsPage-QtElCcew.js → SettingsPage-G461foD-.js} +1 -1
- package/assets/assets/{SiteHealthSection-DNdVVl30.js → SiteHealthSection-CJnHkGM2.js} +3 -3
- package/assets/assets/{TrafficPage-C0WgvfRj.js → TrafficPage-AsWgc7Ot.js} +1 -1
- package/assets/assets/{TrafficSourceDetailPage-jOTedQtt.js → TrafficSourceDetailPage-D10yBQoD.js} +1 -1
- package/assets/assets/{extract-error-message-DO_053o0.js → extract-error-message-PP4HD_Dp.js} +1 -1
- package/assets/assets/{index-CnVwWE3V.js → index-CCIeAE4J.js} +22 -22
- package/assets/assets/{react-sigma_core.esm.min-DJttq2UK.js → react-sigma_core.esm.min-CkyyYkKU.js} +1 -1
- package/assets/assets/{v2-overview-adapter-BC_oa__K.js → v2-overview-adapter-DW-In1hp.js} +1 -1
- package/assets/index.html +1 -1
- package/dist/{chunk-S4BIBUCK.js → chunk-6YLNO2T5.js} +2 -2
- package/dist/{chunk-LWGYRN3T.js → chunk-IDZQ5H3J.js} +2 -2
- package/dist/{chunk-WJGUBZSW.js → chunk-IPGBK7XR.js} +65 -1
- package/dist/{chunk-DOC4QQLS.js → chunk-Q35D2R2P.js} +2490 -2094
- package/dist/{chunk-KBSAEALE.js → chunk-TDHRUXN3.js} +398 -151
- package/dist/{chunk-NYRRWWEE.js → chunk-UWJAATGC.js} +3015 -2923
- package/dist/cli.js +133 -7
- package/dist/{demo-server-OTXS6ZHS.js → demo-server-IZFTJI7E.js} +3 -3
- package/dist/index.js +5 -5
- package/dist/{intelligence-service-K4U55A2J.js → intelligence-service-PM7MC5VC.js} +2 -2
- package/dist/mcp.js +3 -3
- package/package.json +9 -9
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-TDHRUXN3.js";
|
|
39
39
|
import {
|
|
40
40
|
autoSyncSkills,
|
|
41
41
|
formatAutoSyncNotice
|
|
42
|
-
} from "./chunk-
|
|
42
|
+
} from "./chunk-6YLNO2T5.js";
|
|
43
43
|
import {
|
|
44
44
|
CliError,
|
|
45
45
|
EXIT_SYSTEM_ERROR,
|
|
@@ -66,13 +66,13 @@ import {
|
|
|
66
66
|
shouldPrintServeSkillsNudge,
|
|
67
67
|
systemError,
|
|
68
68
|
usageError
|
|
69
|
-
} from "./chunk-
|
|
69
|
+
} from "./chunk-IPGBK7XR.js";
|
|
70
70
|
import {
|
|
71
71
|
DEFAULT_DEMO_TRUSTED_PROXIES,
|
|
72
72
|
trustedProxiesProblem,
|
|
73
73
|
trustedProxyProblem
|
|
74
74
|
} from "./chunk-RB2F4D3Z.js";
|
|
75
|
-
import "./chunk-
|
|
75
|
+
import "./chunk-IDZQ5H3J.js";
|
|
76
76
|
import "./chunk-AOJU5LKX.js";
|
|
77
77
|
import {
|
|
78
78
|
CLOUDFLARE_WORKER_BINDINGS,
|
|
@@ -88,7 +88,7 @@ import {
|
|
|
88
88
|
queries,
|
|
89
89
|
renderReportHtml,
|
|
90
90
|
runs
|
|
91
|
-
} from "./chunk-
|
|
91
|
+
} from "./chunk-Q35D2R2P.js";
|
|
92
92
|
import {
|
|
93
93
|
AdsDeliverySnapshotStatuses,
|
|
94
94
|
AdsHistoricalCampaignRollupStatuses,
|
|
@@ -173,7 +173,7 @@ import {
|
|
|
173
173
|
snapshotProviderModeSchema,
|
|
174
174
|
visibilityReportRequestSchema,
|
|
175
175
|
winnabilityClassSchema
|
|
176
|
-
} from "./chunk-
|
|
176
|
+
} from "./chunk-UWJAATGC.js";
|
|
177
177
|
|
|
178
178
|
// src/cli.ts
|
|
179
179
|
import { pathToFileURL } from "url";
|
|
@@ -438,7 +438,7 @@ function parseDemoTrustedProxies(values) {
|
|
|
438
438
|
async function demoCommand(options) {
|
|
439
439
|
const { host, port } = parseDemoListenOptions(options);
|
|
440
440
|
const trustProxy = parseDemoTrustedProxies(options.trustProxy);
|
|
441
|
-
const { createDemoServer } = await import("./demo-server-
|
|
441
|
+
const { createDemoServer } = await import("./demo-server-IZFTJI7E.js");
|
|
442
442
|
const app = await createDemoServer({ trustProxy });
|
|
443
443
|
let stopping = false;
|
|
444
444
|
const stop = () => {
|
|
@@ -12775,10 +12775,96 @@ function printRunDetail(run) {
|
|
|
12775
12775
|
}
|
|
12776
12776
|
}
|
|
12777
12777
|
}
|
|
12778
|
+
var FILL_POLL_INTERVAL_MS = 3e3;
|
|
12779
|
+
var FILL_POLL_TIMEOUT_MS = 6 * 60 * 60 * 1e3;
|
|
12780
|
+
function missingSummary(completeness) {
|
|
12781
|
+
const parts = Object.entries(completeness.missingByProvider).sort(([left], [right]) => left.localeCompare(right)).map(([provider, count]) => `${provider} ${count}`);
|
|
12782
|
+
return parts.length ? parts.join(", ") : "none";
|
|
12783
|
+
}
|
|
12784
|
+
function printCompleteness(completeness) {
|
|
12785
|
+
console.log(`Run: ${completeness.runId}`);
|
|
12786
|
+
console.log(` Status: ${completeness.status}`);
|
|
12787
|
+
if (!completeness.planned) {
|
|
12788
|
+
console.log(" Not a measurement-plan run: there are no expected answers to count.");
|
|
12789
|
+
return;
|
|
12790
|
+
}
|
|
12791
|
+
if (!completeness.readable) {
|
|
12792
|
+
console.log(" Answers: unknown (the run's manifest cannot be read)");
|
|
12793
|
+
} else {
|
|
12794
|
+
console.log(` Answers: ${completeness.executed}/${completeness.expected}`);
|
|
12795
|
+
console.log(` Missing: ${completeness.missing} (${missingSummary(completeness)})`);
|
|
12796
|
+
}
|
|
12797
|
+
if (completeness.refusal) console.log(` Fillable: no. ${completeness.refusal.message}`);
|
|
12798
|
+
else console.log(` Fillable: ${completeness.fillable ? "yes" : "not right now (a sweep or another fill is running)"}`);
|
|
12799
|
+
const fill = completeness.latestFill;
|
|
12800
|
+
if (fill) {
|
|
12801
|
+
console.log(` Last fill: ${fill.id} ${fill.status}, ${fill.filled}/${fill.expected} recorded${fill.error ? `. ${fill.error}` : ""}`);
|
|
12802
|
+
}
|
|
12803
|
+
}
|
|
12804
|
+
async function showRunCompleteness(runId, format) {
|
|
12805
|
+
const completeness = await getClient23().getRunCompleteness(runId);
|
|
12806
|
+
if (isMachineFormat(format)) {
|
|
12807
|
+
console.log(JSON.stringify(completeness, null, 2));
|
|
12808
|
+
return;
|
|
12809
|
+
}
|
|
12810
|
+
printCompleteness(completeness);
|
|
12811
|
+
}
|
|
12812
|
+
async function fillRun(runId, opts = {}) {
|
|
12813
|
+
const client = getClient23();
|
|
12814
|
+
const response = await client.fillRun(runId, {
|
|
12815
|
+
...opts.providers?.length ? { providers: opts.providers } : {},
|
|
12816
|
+
...opts.dryRun ? { dryRun: true } : {}
|
|
12817
|
+
});
|
|
12818
|
+
if (!opts.wait || response.outcome !== "queued" || !response.fill) {
|
|
12819
|
+
if (isMachineFormat(opts.format)) {
|
|
12820
|
+
console.log(JSON.stringify(response, null, 2));
|
|
12821
|
+
return;
|
|
12822
|
+
}
|
|
12823
|
+
if (response.outcome === "already-complete") console.log(`Run ${runId} is already complete: nothing to fill.`);
|
|
12824
|
+
else if (response.outcome === "dry-run") console.log("Dry run: nothing was queued.");
|
|
12825
|
+
else if (response.fill) console.log(`Fill ${response.fill.id} queued: ${response.fill.expected} missing answer(s) (${missingSummary(response.completeness)}).`);
|
|
12826
|
+
printCompleteness(response.completeness);
|
|
12827
|
+
return;
|
|
12828
|
+
}
|
|
12829
|
+
const fillId = response.fill.id;
|
|
12830
|
+
const deadline = Date.now() + FILL_POLL_TIMEOUT_MS;
|
|
12831
|
+
let completeness = response.completeness;
|
|
12832
|
+
if (!isMachineFormat(opts.format)) {
|
|
12833
|
+
process.stderr.write(`Filling ${response.fill.expected} missing answer(s) in run ${runId}`);
|
|
12834
|
+
}
|
|
12835
|
+
for (; ; ) {
|
|
12836
|
+
await new Promise((resolve) => setTimeout(resolve, FILL_POLL_INTERVAL_MS));
|
|
12837
|
+
if (Date.now() > deadline) {
|
|
12838
|
+
throw new CliError({
|
|
12839
|
+
code: "RUN_FILL_INCOMPLETE",
|
|
12840
|
+
message: `Timed out waiting for fill ${fillId}; it may still be running. Check with: canonry run completeness ${runId}`,
|
|
12841
|
+
exitCode: EXIT_SYSTEM_ERROR,
|
|
12842
|
+
details: { runId, fillId }
|
|
12843
|
+
});
|
|
12844
|
+
}
|
|
12845
|
+
completeness = await client.getRunCompleteness(runId);
|
|
12846
|
+
if (!isMachineFormat(opts.format)) process.stderr.write(".");
|
|
12847
|
+
const latest = completeness.latestFill;
|
|
12848
|
+
const working = latest !== null && (latest.status === "queued" || latest.status === "running");
|
|
12849
|
+
if (completeness.status === "completed" || !working) break;
|
|
12850
|
+
}
|
|
12851
|
+
if (!isMachineFormat(opts.format)) process.stderr.write("\n");
|
|
12852
|
+
if (isMachineFormat(opts.format)) console.log(JSON.stringify(completeness, null, 2));
|
|
12853
|
+
else printCompleteness(completeness);
|
|
12854
|
+
if (completeness.status !== "completed") {
|
|
12855
|
+
throw new CliError({
|
|
12856
|
+
code: "RUN_FILL_INCOMPLETE",
|
|
12857
|
+
message: `Run ${runId} is still ${completeness.status}: ${completeness.missing} answer(s) missing (${missingSummary(completeness)}).`,
|
|
12858
|
+
exitCode: EXIT_SYSTEM_ERROR,
|
|
12859
|
+
details: { runId, fillId, missing: completeness.missing, missingByProvider: completeness.missingByProvider }
|
|
12860
|
+
});
|
|
12861
|
+
}
|
|
12862
|
+
}
|
|
12778
12863
|
|
|
12779
12864
|
// src/cli-commands/run.ts
|
|
12780
12865
|
var RUN_TRIGGER_USAGE = "canonry run trigger <project> [--group <key>]... [--target <key>]... [--provider <name>] [--query <q>...] [--location <label>] [--all-locations] [--no-location] [--probe] [--wait] [--format json]";
|
|
12781
12866
|
var RUN_USAGE2 = "canonry run <project|--all> [--group <key>]... [--target <key>]... [--provider <name>] [--query <q>...] [--location <label>] [--all-locations] [--no-location] [--probe] [--wait] [--format json]";
|
|
12867
|
+
var RUN_FILL_USAGE = "canonry run fill <run-id> [--provider <name>[,<name>]] [--dry-run] [--wait] [--format json]";
|
|
12782
12868
|
var RUNS_USAGE = "canonry runs <project> [--limit <n>] [--kind <kind>] [--status <status>] [--format json]";
|
|
12783
12869
|
var RUN_TRIGGER_OPTIONS = {
|
|
12784
12870
|
provider: stringOption(),
|
|
@@ -12875,6 +12961,43 @@ var RUN_CLI_COMMANDS = [
|
|
|
12875
12961
|
await showRun(id, input.format);
|
|
12876
12962
|
}
|
|
12877
12963
|
},
|
|
12964
|
+
{
|
|
12965
|
+
path: ["run", "fill"],
|
|
12966
|
+
usage: RUN_FILL_USAGE,
|
|
12967
|
+
options: {
|
|
12968
|
+
provider: stringOption(),
|
|
12969
|
+
wait: { type: "boolean", default: false }
|
|
12970
|
+
},
|
|
12971
|
+
supportsDryRun: true,
|
|
12972
|
+
run: async (input) => {
|
|
12973
|
+
if (input.positionals.length === 0 && !input.dryRun) return triggerRunCommand({ ...input, positionals: ["fill"] }, "run");
|
|
12974
|
+
const runId = requirePositional(input, 0, {
|
|
12975
|
+
command: "run.fill",
|
|
12976
|
+
usage: RUN_FILL_USAGE,
|
|
12977
|
+
message: "run ID is required"
|
|
12978
|
+
});
|
|
12979
|
+
const provider = getString(input.values, "provider");
|
|
12980
|
+
await fillRun(runId, {
|
|
12981
|
+
providers: provider ? provider.split(",").map((value) => value.trim()).filter(Boolean) : void 0,
|
|
12982
|
+
dryRun: input.dryRun,
|
|
12983
|
+
wait: getBoolean(input.values, "wait"),
|
|
12984
|
+
format: input.format
|
|
12985
|
+
});
|
|
12986
|
+
}
|
|
12987
|
+
},
|
|
12988
|
+
{
|
|
12989
|
+
path: ["run", "completeness"],
|
|
12990
|
+
usage: "canonry run completeness <run-id> [--format json]",
|
|
12991
|
+
run: async (input) => {
|
|
12992
|
+
if (input.positionals.length === 0) return triggerRunCommand({ ...input, positionals: ["completeness"] }, "run");
|
|
12993
|
+
const runId = requirePositional(input, 0, {
|
|
12994
|
+
command: "run.completeness",
|
|
12995
|
+
usage: "canonry run completeness <run-id> [--format json]",
|
|
12996
|
+
message: "run ID is required"
|
|
12997
|
+
});
|
|
12998
|
+
await showRunCompleteness(runId, input.format);
|
|
12999
|
+
}
|
|
13000
|
+
},
|
|
12878
13001
|
{
|
|
12879
13002
|
path: ["run", "cancel"],
|
|
12880
13003
|
usage: "canonry run cancel <project> [run-id] [--format json]",
|
|
@@ -19536,6 +19659,9 @@ var TELEMETRY_ERROR_CODES = /* @__PURE__ */ new Set([
|
|
|
19536
19659
|
"AGENT_BUSY",
|
|
19537
19660
|
"MISSING_DEPENDENCY",
|
|
19538
19661
|
"RUNTIME_STATE_MISSING",
|
|
19662
|
+
"RUN_FILL_REFUSED",
|
|
19663
|
+
"RUN_FILL_IN_PROGRESS",
|
|
19664
|
+
"RUN_FILL_INCOMPLETE",
|
|
19539
19665
|
"API_ERROR",
|
|
19540
19666
|
"CLI_ERROR",
|
|
19541
19667
|
"CLI_USAGE_ERROR",
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
layoutSiteCrawlGraphInput,
|
|
6
6
|
persistSiteCrawlGraphLayout
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-IDZQ5H3J.js";
|
|
8
8
|
import {
|
|
9
9
|
PACKAGE_VERSION
|
|
10
10
|
} from "./chunk-AOJU5LKX.js";
|
|
@@ -83,7 +83,7 @@ import {
|
|
|
83
83
|
siteCrawlPages,
|
|
84
84
|
siteCrawlSnapshots,
|
|
85
85
|
trafficSources
|
|
86
|
-
} from "./chunk-
|
|
86
|
+
} from "./chunk-Q35D2R2P.js";
|
|
87
87
|
import {
|
|
88
88
|
RunKinds,
|
|
89
89
|
SiteCrawlFetchStates,
|
|
@@ -104,7 +104,7 @@ import {
|
|
|
104
104
|
measurementPlanV2Schema,
|
|
105
105
|
placementLinkDecision,
|
|
106
106
|
siteAuditPageFactorSchema
|
|
107
|
-
} from "./chunk-
|
|
107
|
+
} from "./chunk-UWJAATGC.js";
|
|
108
108
|
|
|
109
109
|
// src/demo-server.ts
|
|
110
110
|
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-TDHRUXN3.js";
|
|
7
7
|
import {
|
|
8
8
|
loadConfig
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-IPGBK7XR.js";
|
|
10
|
+
import "./chunk-IDZQ5H3J.js";
|
|
11
11
|
import "./chunk-AOJU5LKX.js";
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-Q35D2R2P.js";
|
|
13
|
+
import "./chunk-UWJAATGC.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-6YLNO2T5.js";
|
|
4
4
|
import {
|
|
5
5
|
createApiClient,
|
|
6
6
|
createCanonryMcpServer
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-IPGBK7XR.js";
|
|
8
8
|
import "./chunk-AOJU5LKX.js";
|
|
9
9
|
import {
|
|
10
10
|
isReadOnlyKey,
|
|
11
11
|
updateCheckEnvOptOut
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-UWJAATGC.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.13.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,28 +88,28 @@
|
|
|
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-api-routes": "0.0.0",
|
|
91
92
|
"@ainyc/canonry-config": "0.0.0",
|
|
92
93
|
"@ainyc/canonry-contracts": "0.0.0",
|
|
93
|
-
"@ainyc/canonry-api-routes": "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-commoncrawl": "0.0.0",
|
|
98
97
|
"@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
|
|
98
|
+
"@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
|
|
99
|
+
"@ainyc/canonry-integration-commoncrawl": "0.0.0",
|
|
99
100
|
"@ainyc/canonry-integration-google": "0.0.0",
|
|
100
101
|
"@ainyc/canonry-integration-google-ads": "0.0.0",
|
|
101
|
-
"@ainyc/canonry-integration-google-business-profile": "0.0.0",
|
|
102
|
-
"@ainyc/canonry-integration-google-tag-manager": "0.0.0",
|
|
103
|
-
"@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
|
|
104
102
|
"@ainyc/canonry-integration-google-places": "0.0.0",
|
|
103
|
+
"@ainyc/canonry-integration-google-tag-manager": "0.0.0",
|
|
105
104
|
"@ainyc/canonry-integration-openai-ads": "0.0.0",
|
|
105
|
+
"@ainyc/canonry-integration-wordpress": "0.0.0",
|
|
106
106
|
"@ainyc/canonry-integration-traffic": "0.0.0",
|
|
107
107
|
"@ainyc/canonry-intelligence": "0.0.0",
|
|
108
108
|
"@ainyc/canonry-provider-cdp": "0.0.0",
|
|
109
|
-
"@ainyc/canonry-integration-
|
|
110
|
-
"@ainyc/canonry-provider-claude": "0.0.0",
|
|
111
|
-
"@ainyc/canonry-provider-local": "0.0.0",
|
|
109
|
+
"@ainyc/canonry-integration-google-business-profile": "0.0.0",
|
|
112
110
|
"@ainyc/canonry-provider-gemini": "0.0.0",
|
|
111
|
+
"@ainyc/canonry-provider-local": "0.0.0",
|
|
112
|
+
"@ainyc/canonry-provider-claude": "0.0.0",
|
|
113
113
|
"@ainyc/canonry-provider-openai": "0.0.0",
|
|
114
114
|
"@ainyc/canonry-provider-perplexity": "0.0.0"
|
|
115
115
|
},
|