@ainyc/canonry 4.85.0 → 4.87.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 +3 -1
- package/assets/assets/{BacklinksPage-CDAv0ggn.js → BacklinksPage-BPvsw_Bi.js} +1 -1
- package/assets/assets/{ChartPrimitives-CnAmsyt7.js → ChartPrimitives-BdlKCq7y.js} +1 -1
- package/assets/assets/ProjectPage-1Q8YC9Vd.js +6 -0
- package/assets/assets/{RunRow-CVZ5o8fg.js → RunRow-DcSsnE5c.js} +1 -1
- package/assets/assets/{RunsPage-Bzy5c0MZ.js → RunsPage-DKoIMkQL.js} +1 -1
- package/assets/assets/{SettingsPage-B1ocxPBe.js → SettingsPage-bH3PdNKb.js} +1 -1
- package/assets/assets/{TrafficPage-D2zepQOC.js → TrafficPage-IW_DX-0V.js} +1 -1
- package/assets/assets/{TrafficSourceDetailPage-C7JuAkaK.js → TrafficSourceDetailPage-DRHOGn9B.js} +1 -1
- package/assets/assets/{arrow-left-Bv3CWylm.js → arrow-left-B5Du72nk.js} +1 -1
- package/assets/assets/{extract-error-message-BtVid5TP.js → extract-error-message-C7Vhd5zH.js} +1 -1
- package/assets/assets/index-C_ZzKZfM.js +210 -0
- package/assets/assets/index-ClkRAeHL.css +1 -0
- package/assets/assets/{trash-2-BoimCsYz.js → trash-2-DWcofmpv.js} +1 -1
- package/assets/index.html +2 -2
- package/dist/{chunk-3K3QRSYE.js → chunk-5LW7CJAO.js} +276 -53
- package/dist/{chunk-62YB3ML7.js → chunk-6XMXBAEW.js} +47 -2
- package/dist/{chunk-7BMSWI2K.js → chunk-DUDFNP5Y.js} +19 -4
- package/dist/{chunk-I2BJC3DT.js → chunk-MDRDX5R2.js} +634 -205
- package/dist/cli.js +73 -9
- package/dist/index.js +4 -4
- package/dist/{intelligence-service-AHHBQKRD.js → intelligence-service-XUKYOHKL.js} +2 -2
- package/dist/mcp.js +2 -2
- package/package.json +7 -7
- package/assets/assets/ProjectPage-C9KEgRxD.js +0 -6
- package/assets/assets/index-BgWgJE7S.css +0 -1
- package/assets/assets/index-DmNti_xn.js +0 -210
package/dist/cli.js
CHANGED
|
@@ -27,7 +27,7 @@ import {
|
|
|
27
27
|
setTelemetrySource,
|
|
28
28
|
showFirstRunNotice,
|
|
29
29
|
trackEvent
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-DUDFNP5Y.js";
|
|
31
31
|
import {
|
|
32
32
|
CliError,
|
|
33
33
|
EXIT_SYSTEM_ERROR,
|
|
@@ -44,7 +44,7 @@ import {
|
|
|
44
44
|
saveConfig,
|
|
45
45
|
saveConfigPatch,
|
|
46
46
|
usageError
|
|
47
|
-
} from "./chunk-
|
|
47
|
+
} from "./chunk-6XMXBAEW.js";
|
|
48
48
|
import {
|
|
49
49
|
apiKeys,
|
|
50
50
|
createClient,
|
|
@@ -52,7 +52,7 @@ import {
|
|
|
52
52
|
projects,
|
|
53
53
|
queries,
|
|
54
54
|
renderReportHtml
|
|
55
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-5LW7CJAO.js";
|
|
56
56
|
import {
|
|
57
57
|
BacklinkSources,
|
|
58
58
|
CcReleaseSyncStatuses,
|
|
@@ -77,7 +77,7 @@ import {
|
|
|
77
77
|
providerQuotaPolicySchema,
|
|
78
78
|
resolveProviderInput,
|
|
79
79
|
winnabilityClassSchema
|
|
80
|
-
} from "./chunk-
|
|
80
|
+
} from "./chunk-MDRDX5R2.js";
|
|
81
81
|
|
|
82
82
|
// src/cli.ts
|
|
83
83
|
import { pathToFileURL } from "url";
|
|
@@ -1832,6 +1832,39 @@ async function discoverShow(project, sessionId, opts) {
|
|
|
1832
1832
|
}
|
|
1833
1833
|
printSessionDetail(session);
|
|
1834
1834
|
}
|
|
1835
|
+
async function discoverHarvest(project, sessionId, opts) {
|
|
1836
|
+
const client = getClient4();
|
|
1837
|
+
const harvest = await client.getDiscoveryHarvest(project, sessionId, {
|
|
1838
|
+
minProbeHits: opts.minProbeHits,
|
|
1839
|
+
anchor: opts.anchor
|
|
1840
|
+
});
|
|
1841
|
+
if (opts.format === "json") {
|
|
1842
|
+
console.log(JSON.stringify(harvest, null, 2));
|
|
1843
|
+
return;
|
|
1844
|
+
}
|
|
1845
|
+
if (opts.format === "jsonl") {
|
|
1846
|
+
const context = { project, sessionId, provider: harvest.provider };
|
|
1847
|
+
emitJsonl(harvest.candidates.map((c) => ({ ...context, ...c })));
|
|
1848
|
+
return;
|
|
1849
|
+
}
|
|
1850
|
+
const r = harvest.stats.rejected;
|
|
1851
|
+
console.log(`Harvested issued search queries \u2014 session ${harvest.sessionId} (${harvest.provider})`);
|
|
1852
|
+
console.log(
|
|
1853
|
+
` ${harvest.stats.admitted} admitted of ${harvest.stats.rawCandidates} raw \xB7 floor=${harvest.minProbeHits} \xB7 anchor=${harvest.anchorApplied ? "on" : "off"} \xB7 novelty=${harvest.semanticNoveltyApplied ? "semantic" : "exact-only"}`
|
|
1854
|
+
);
|
|
1855
|
+
console.log(
|
|
1856
|
+
` rejected: ${r.belowFloor} below-floor \xB7 ${r.length} length \xB7 ${r.navigational} navigational \xB7 ${r.duplicate} already-tracked \xB7 ${r.semanticDuplicate} synonym \xB7 ${r.offAnchor} off-subject`
|
|
1857
|
+
);
|
|
1858
|
+
if (harvest.candidates.length === 0) {
|
|
1859
|
+
console.log(" (no candidates \u2014 nothing to track from this session)");
|
|
1860
|
+
return;
|
|
1861
|
+
}
|
|
1862
|
+
console.log("");
|
|
1863
|
+
console.log(" HITS QUERY");
|
|
1864
|
+
for (const candidate of harvest.candidates) {
|
|
1865
|
+
console.log(` ${String(candidate.probeHits).padStart(4)} ${candidate.query}`);
|
|
1866
|
+
}
|
|
1867
|
+
}
|
|
1835
1868
|
async function discoverPromotePreview(project, sessionId, opts) {
|
|
1836
1869
|
const client = getClient4();
|
|
1837
1870
|
const preview = await client.previewDiscoveryPromote(project, sessionId);
|
|
@@ -2156,6 +2189,32 @@ var DISCOVER_CLI_COMMANDS = [
|
|
|
2156
2189
|
});
|
|
2157
2190
|
}
|
|
2158
2191
|
},
|
|
2192
|
+
{
|
|
2193
|
+
path: ["discover", "harvest"],
|
|
2194
|
+
usage: "canonry discover harvest <project> <session-id> [--min-probe-hits <n>] [--no-anchor] [--format json|jsonl]",
|
|
2195
|
+
options: {
|
|
2196
|
+
"min-probe-hits": stringOption(),
|
|
2197
|
+
"no-anchor": { type: "boolean", default: false }
|
|
2198
|
+
},
|
|
2199
|
+
run: async (input) => {
|
|
2200
|
+
const usage = "canonry discover harvest <project> <session-id> [--min-probe-hits <n>] [--no-anchor] [--format json|jsonl]";
|
|
2201
|
+
const project = requireProject(input, "discover.harvest", usage);
|
|
2202
|
+
const sessionId = requirePositional(input, 1, {
|
|
2203
|
+
command: "discover.harvest",
|
|
2204
|
+
usage,
|
|
2205
|
+
message: "session ID is required"
|
|
2206
|
+
});
|
|
2207
|
+
await discoverHarvest(project, sessionId, {
|
|
2208
|
+
minProbeHits: parseIntegerOption(input, "min-probe-hits", {
|
|
2209
|
+
command: "discover.harvest",
|
|
2210
|
+
usage,
|
|
2211
|
+
message: "--min-probe-hits must be an integer"
|
|
2212
|
+
}),
|
|
2213
|
+
anchor: !getBoolean(input.values, "no-anchor"),
|
|
2214
|
+
format: input.format
|
|
2215
|
+
});
|
|
2216
|
+
}
|
|
2217
|
+
},
|
|
2159
2218
|
{
|
|
2160
2219
|
path: ["discover", "promote", "preview"],
|
|
2161
2220
|
usage: "canonry discover promote preview <project> <session-id> [--format json]",
|
|
@@ -9346,7 +9405,9 @@ function renderHuman(overview) {
|
|
|
9346
9405
|
providers,
|
|
9347
9406
|
transitions,
|
|
9348
9407
|
scores,
|
|
9349
|
-
|
|
9408
|
+
citationMovement,
|
|
9409
|
+
mentionMovement,
|
|
9410
|
+
movementComparison,
|
|
9350
9411
|
competitors,
|
|
9351
9412
|
providerScores,
|
|
9352
9413
|
attentionItems,
|
|
@@ -9379,10 +9440,13 @@ function renderHuman(overview) {
|
|
|
9379
9440
|
console.log(`
|
|
9380
9441
|
Queries cited: ${queryCounts.citedQueries}/${queryCounts.totalQueries} (${pct2(queryCounts.citedRate)})`);
|
|
9381
9442
|
console.log(` Queries mentioned: ${queryCounts.mentionedQueries}/${queryCounts.totalQueries} (${pct2(queryCounts.mentionRate)})`);
|
|
9382
|
-
if (
|
|
9383
|
-
|
|
9384
|
-
}
|
|
9385
|
-
console.log(`
|
|
9443
|
+
if (movementComparison.hasPreviousRun) {
|
|
9444
|
+
const comparisonLabel = movementComparison.querySetChanged ? `changed (+${movementComparison.addedQueryCount} added, -${movementComparison.removedQueryCount} removed); movement compares ${movementComparison.comparableQueryCount} shared` : `unchanged; ${movementComparison.comparableQueryCount} comparable`;
|
|
9445
|
+
console.log(` Query basket: ${comparisonLabel}`);
|
|
9446
|
+
console.log(` Citation movement: +${citationMovement.gained} gained, -${citationMovement.lost} lost (${citationMovement.tone})`);
|
|
9447
|
+
console.log(` Mention movement: +${mentionMovement.gained} gained, -${mentionMovement.lost} lost (${mentionMovement.tone})`);
|
|
9448
|
+
} else {
|
|
9449
|
+
console.log(" Movement: first sweep; no comparison yet");
|
|
9386
9450
|
}
|
|
9387
9451
|
if (providers.length > 0) {
|
|
9388
9452
|
console.log("\n Providers:");
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createServer
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-DUDFNP5Y.js";
|
|
4
4
|
import {
|
|
5
5
|
loadConfig
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-6XMXBAEW.js";
|
|
7
|
+
import "./chunk-5LW7CJAO.js";
|
|
8
|
+
import "./chunk-MDRDX5R2.js";
|
|
9
9
|
export {
|
|
10
10
|
createServer,
|
|
11
11
|
loadConfig
|
package/dist/mcp.js
CHANGED
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
PACKAGE_VERSION,
|
|
4
4
|
canonryMcpTools,
|
|
5
5
|
createApiClient
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-6XMXBAEW.js";
|
|
7
7
|
import {
|
|
8
8
|
isReadOnlyKey
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-MDRDX5R2.js";
|
|
10
10
|
|
|
11
11
|
// src/mcp/cli.ts
|
|
12
12
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ainyc/canonry",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.87.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Agent-first open-source AEO operating platform - track how answer engines cite your domain",
|
|
6
6
|
"license": "FSL-1.1-ALv2",
|
|
@@ -62,24 +62,24 @@
|
|
|
62
62
|
"@types/node-cron": "^3.0.11",
|
|
63
63
|
"tsup": "^8.5.1",
|
|
64
64
|
"tsx": "^4.19.0",
|
|
65
|
+
"@ainyc/canonry-api-routes": "0.0.0",
|
|
65
66
|
"@ainyc/canonry-config": "0.0.0",
|
|
66
67
|
"@ainyc/canonry-api-client": "0.0.0",
|
|
67
|
-
"@ainyc/canonry-
|
|
68
|
+
"@ainyc/canonry-contracts": "0.0.0",
|
|
68
69
|
"@ainyc/canonry-db": "0.0.0",
|
|
69
|
-
"@ainyc/canonry-integration-bing": "0.0.0",
|
|
70
70
|
"@ainyc/canonry-integration-openai-ads": "0.0.0",
|
|
71
71
|
"@ainyc/canonry-integration-cloud-run": "0.0.0",
|
|
72
|
-
"@ainyc/canonry-contracts": "0.0.0",
|
|
73
72
|
"@ainyc/canonry-integration-commoncrawl": "0.0.0",
|
|
74
|
-
"@ainyc/canonry-integration-
|
|
73
|
+
"@ainyc/canonry-integration-bing": "0.0.0",
|
|
75
74
|
"@ainyc/canonry-integration-google-business-profile": "0.0.0",
|
|
75
|
+
"@ainyc/canonry-integration-google": "0.0.0",
|
|
76
76
|
"@ainyc/canonry-integration-google-places": "0.0.0",
|
|
77
77
|
"@ainyc/canonry-integration-traffic": "0.0.0",
|
|
78
|
-
"@ainyc/canonry-intelligence": "0.0.0",
|
|
79
78
|
"@ainyc/canonry-integration-wordpress": "0.0.0",
|
|
80
|
-
"@ainyc/canonry-
|
|
79
|
+
"@ainyc/canonry-intelligence": "0.0.0",
|
|
81
80
|
"@ainyc/canonry-provider-gemini": "0.0.0",
|
|
82
81
|
"@ainyc/canonry-provider-local": "0.0.0",
|
|
82
|
+
"@ainyc/canonry-provider-cdp": "0.0.0",
|
|
83
83
|
"@ainyc/canonry-provider-claude": "0.0.0",
|
|
84
84
|
"@ainyc/canonry-provider-openai": "0.0.0",
|
|
85
85
|
"@ainyc/canonry-provider-perplexity": "0.0.0"
|