@ainyc/canonry 4.46.0 → 4.46.1
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/aero/SKILL.md +5 -3
- package/assets/agent-workspace/skills/canonry/SKILL.md +55 -12
- package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +48 -12
- package/assets/agent-workspace/skills/canonry/references/server-side-traffic.md +32 -0
- package/assets/assets/{index-BVHV03Fk.css → index-BDMNXVHa.css} +1 -1
- package/assets/assets/{index-CFKPcvOe.js → index-CJWNAoK4.js} +2 -2
- package/assets/index.html +2 -2
- package/dist/{chunk-G2HQOLPK.js → chunk-IYUI74JP.js} +42 -32
- package/dist/{chunk-TBADB57G.js → chunk-K2TOOQ4F.js} +11 -7
- package/dist/{chunk-Q7XFJO2V.js → chunk-MM3A2CJK.js} +2 -2
- package/dist/{chunk-GRFMZ7PD.js → chunk-PRNO52YC.js} +1 -1
- package/dist/cli.js +5 -5
- package/dist/index.js +4 -4
- package/dist/{intelligence-service-YFBVWCK2.js → intelligence-service-R3KDVKIB.js} +2 -2
- package/dist/mcp.js +2 -2
- package/package.json +8 -8
package/assets/index.html
CHANGED
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
<link rel="icon" type="image/png" sizes="32x32" href="./favicon-32.png" />
|
|
13
13
|
<link rel="apple-touch-icon" href="./apple-touch-icon.png" />
|
|
14
14
|
<title>Canonry</title>
|
|
15
|
-
<script type="module" crossorigin src="./assets/index-
|
|
16
|
-
<link rel="stylesheet" crossorigin href="./assets/index-
|
|
15
|
+
<script type="module" crossorigin src="./assets/index-CJWNAoK4.js"></script>
|
|
16
|
+
<link rel="stylesheet" crossorigin href="./assets/index-BDMNXVHa.css">
|
|
17
17
|
</head>
|
|
18
18
|
<body>
|
|
19
19
|
<div id="root"></div>
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
loadConfig,
|
|
6
6
|
loadConfigRaw,
|
|
7
7
|
saveConfigPatch
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-PRNO52YC.js";
|
|
9
9
|
import {
|
|
10
10
|
DEFAULT_RUN_HISTORY_LIMIT,
|
|
11
11
|
IntelligenceService,
|
|
@@ -80,7 +80,7 @@ import {
|
|
|
80
80
|
smoothedRunDelta,
|
|
81
81
|
trafficSources,
|
|
82
82
|
usageCounters
|
|
83
|
-
} from "./chunk-
|
|
83
|
+
} from "./chunk-K2TOOQ4F.js";
|
|
84
84
|
import {
|
|
85
85
|
AGENT_MEMORY_VALUE_MAX_BYTES,
|
|
86
86
|
AGENT_PROVIDER_IDS,
|
|
@@ -193,7 +193,7 @@ import {
|
|
|
193
193
|
visibilityStateFromAnswerMentioned,
|
|
194
194
|
windowCutoff,
|
|
195
195
|
wordpressEnvSchema
|
|
196
|
-
} from "./chunk-
|
|
196
|
+
} from "./chunk-MM3A2CJK.js";
|
|
197
197
|
|
|
198
198
|
// src/telemetry.ts
|
|
199
199
|
import crypto from "crypto";
|
|
@@ -5636,8 +5636,13 @@ function normalizeDomain(domain) {
|
|
|
5636
5636
|
}
|
|
5637
5637
|
function extractPath(url) {
|
|
5638
5638
|
if (!url) return "";
|
|
5639
|
-
const
|
|
5640
|
-
|
|
5639
|
+
const trimmed = url.trim();
|
|
5640
|
+
let path16;
|
|
5641
|
+
try {
|
|
5642
|
+
path16 = new URL(trimmed).pathname;
|
|
5643
|
+
} catch {
|
|
5644
|
+
path16 = trimmed;
|
|
5645
|
+
}
|
|
5641
5646
|
const stripped = path16.replace(/\/+$/, "");
|
|
5642
5647
|
return stripped || "/";
|
|
5643
5648
|
}
|
|
@@ -11127,7 +11132,7 @@ function buildOperationId(method, path16) {
|
|
|
11127
11132
|
}
|
|
11128
11133
|
return part;
|
|
11129
11134
|
});
|
|
11130
|
-
return [method, ...parts].join("-").replace(/[^a-
|
|
11135
|
+
return [method, ...parts].join("-").replace(/[^a-z0-9]+(.)/gi, (_match, char) => char.toUpperCase()).replace(/^[^a-z]+/i, "");
|
|
11131
11136
|
}
|
|
11132
11137
|
|
|
11133
11138
|
// ../api-routes/src/settings.ts
|
|
@@ -12045,7 +12050,9 @@ function escapeRegExp2(str) {
|
|
|
12045
12050
|
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
12046
12051
|
}
|
|
12047
12052
|
async function runReport(accessToken, propertyId, request) {
|
|
12048
|
-
|
|
12053
|
+
validatePropertyId(propertyId);
|
|
12054
|
+
const safePropertyId = encodeURIComponent(propertyId);
|
|
12055
|
+
const url = `${GA4_DATA_API_BASE}/properties/${safePropertyId}:runReport`;
|
|
12049
12056
|
const res = await fetch(url, {
|
|
12050
12057
|
method: "POST",
|
|
12051
12058
|
headers: {
|
|
@@ -12119,7 +12126,7 @@ async function batchRunReports(accessToken, propertyId, requests) {
|
|
|
12119
12126
|
return data.reports;
|
|
12120
12127
|
}
|
|
12121
12128
|
function formatDate2(d) {
|
|
12122
|
-
return d.toISOString().
|
|
12129
|
+
return d.toISOString().slice(0, 10);
|
|
12123
12130
|
}
|
|
12124
12131
|
var AI_REFERRAL_SOURCE_FILTERS = [
|
|
12125
12132
|
{ matchType: "CONTAINS", value: "perplexity" },
|
|
@@ -12467,7 +12474,8 @@ async function fetchSocialReferrals(accessToken, propertyId, days) {
|
|
|
12467
12474
|
const PAGE_SIZE = 1e3;
|
|
12468
12475
|
const rows = [];
|
|
12469
12476
|
let offset = 0;
|
|
12470
|
-
|
|
12477
|
+
let pageCount = 0;
|
|
12478
|
+
while (pageCount < GA4_MAX_PAGES) {
|
|
12471
12479
|
const request = {
|
|
12472
12480
|
dateRanges: [{ startDate: formatDate2(startDate), endDate: formatDate2(endDate) }],
|
|
12473
12481
|
dimensions: [
|
|
@@ -12506,6 +12514,7 @@ async function fetchSocialReferrals(accessToken, propertyId, days) {
|
|
|
12506
12514
|
rows.push(...pageRows);
|
|
12507
12515
|
const totalRows = response.rowCount ?? 0;
|
|
12508
12516
|
offset += pageRows.length;
|
|
12517
|
+
pageCount += 1;
|
|
12509
12518
|
if (pageRows.length < PAGE_SIZE || offset >= totalRows) break;
|
|
12510
12519
|
}
|
|
12511
12520
|
for (const row of rows) {
|
|
@@ -13421,7 +13430,7 @@ async function getCrawlIssues(apiKey, siteUrl) {
|
|
|
13421
13430
|
// ../api-routes/src/bing.ts
|
|
13422
13431
|
function parseBingDate(value) {
|
|
13423
13432
|
if (!value) return null;
|
|
13424
|
-
const match = /\/Date\((-?\d+)[
|
|
13433
|
+
const match = /\/Date\((-?\d+)(?:[-+]\d+)?\)\//.exec(value);
|
|
13425
13434
|
if (!match) return null;
|
|
13426
13435
|
const ms = parseInt(match[1], 10);
|
|
13427
13436
|
if (ms <= 0) return null;
|
|
@@ -13438,7 +13447,7 @@ function isBlockingIssueType(issueType) {
|
|
|
13438
13447
|
if (!issueType) return true;
|
|
13439
13448
|
const trimmed = issueType.trim();
|
|
13440
13449
|
if (!trimmed) return true;
|
|
13441
|
-
return trimmed.split(/\s+/).some((flag) => !/^(None|Seo(Issues|Concerns))$/i.test(flag));
|
|
13450
|
+
return trimmed.split(/\s+/).some((flag) => !/^(?:None|Seo(?:Issues|Concerns))$/i.test(flag));
|
|
13442
13451
|
}
|
|
13443
13452
|
async function loadBlockingCrawlIssues(apiKey, siteUrl, domain) {
|
|
13444
13453
|
const now = Date.now();
|
|
@@ -15163,7 +15172,7 @@ async function fetchText(url) {
|
|
|
15163
15172
|
}
|
|
15164
15173
|
}
|
|
15165
15174
|
function stripHtml(input) {
|
|
15166
|
-
return input.replace(/<script[\s\S]*?<\/script>/gi, " ").replace(/<style[\s\S]*?<\/style>/gi, " ").replace(/<[^>]+>/g, " ").replace(/ /gi, " ").replace(/&/gi, "&").replace(/"/gi, '"').replace(/'/
|
|
15175
|
+
return input.replace(/<script[\s\S]*?<\/script>/gi, " ").replace(/<style[\s\S]*?<\/style>/gi, " ").replace(/<[^>]+>/g, " ").replace(/ /gi, " ").replace(/&/gi, "&").replace(/"/gi, '"').replace(/'/g, "'").replace(/</gi, "<").replace(/>/gi, ">").replace(/\s+/g, " ").trim();
|
|
15167
15176
|
}
|
|
15168
15177
|
function extractMetaContent(html, name) {
|
|
15169
15178
|
const patterns = [
|
|
@@ -15183,7 +15192,7 @@ function extractTitle(html) {
|
|
|
15183
15192
|
function extractGeneratorVersion(html) {
|
|
15184
15193
|
const generator = extractMetaContent(html, "generator");
|
|
15185
15194
|
if (!generator) return null;
|
|
15186
|
-
const match = /WordPress\s+([
|
|
15195
|
+
const match = /WordPress\s+(\d[^ ]*)/i.exec(generator);
|
|
15187
15196
|
return match?.[1] ?? generator;
|
|
15188
15197
|
}
|
|
15189
15198
|
function extractSchemaBlocks(html) {
|
|
@@ -17345,7 +17354,7 @@ function numberOrNull(value) {
|
|
|
17345
17354
|
}
|
|
17346
17355
|
function latencyToMs(value) {
|
|
17347
17356
|
if (!value) return null;
|
|
17348
|
-
const secondsMatch = /^(
|
|
17357
|
+
const secondsMatch = /^(\d+(?:\.\d+)?)s$/.exec(value.trim());
|
|
17349
17358
|
if (!secondsMatch) return null;
|
|
17350
17359
|
const seconds = Number(secondsMatch[1]);
|
|
17351
17360
|
return Number.isFinite(seconds) ? Math.round(seconds * 1e6) / 1e3 : null;
|
|
@@ -21542,7 +21551,7 @@ function extractCitedDomainsFromSources(groundingSources) {
|
|
|
21542
21551
|
}
|
|
21543
21552
|
function extractDomainFromTitle(title) {
|
|
21544
21553
|
const trimmed = title.trim().toLowerCase();
|
|
21545
|
-
if (/^[a-z0-9]([a-z0-9-]*[a-z0-9])?(
|
|
21554
|
+
if (/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\.[a-z]{2,})+$/.test(trimmed)) {
|
|
21546
21555
|
return trimmed.replace(/^www\./, "");
|
|
21547
21556
|
}
|
|
21548
21557
|
return null;
|
|
@@ -23156,7 +23165,7 @@ function extractCitedDomains(groundingSources) {
|
|
|
23156
23165
|
return [...domains];
|
|
23157
23166
|
}
|
|
23158
23167
|
function extractDomainFromTitle2(title) {
|
|
23159
|
-
const domainPattern = /^([a-z0-9]([a-z0-9-]*[a-z0-9])?\.)+[a-z]{2,}$/i;
|
|
23168
|
+
const domainPattern = /^(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z]{2,}$/i;
|
|
23160
23169
|
const firstWord = title.split(/[\s\-–—|]/)[0]?.trim();
|
|
23161
23170
|
if (firstWord && domainPattern.test(firstWord)) {
|
|
23162
23171
|
return firstWord.replace(/^www\./, "").toLowerCase();
|
|
@@ -24016,10 +24025,10 @@ function extractRecommendedCompetitors(answerText, ownDomains, citedDomains, com
|
|
|
24016
24025
|
);
|
|
24017
24026
|
if (knownCompetitorKeys.size === 0) return [];
|
|
24018
24027
|
const candidatePatterns = [
|
|
24019
|
-
/^\s*(?:[-*]|\d+\.)\s+(?:\*\*)?([A-Z0-9][A-Za-z0-9][\w\s.&',/()-]{1,50}?)(?:\*\*)?\s*[:\u2014\u2013
|
|
24020
|
-
/\*\*([A-Z0-9][A-Za-z0-9][\w\s.&',/()-]{1,50}
|
|
24028
|
+
/^\s*(?:[-*]|\d+\.)\s+(?:\*\*)?([A-Z0-9][A-Za-z0-9][\w\s.&',/()-]{1,50}?)(?:\*\*)?\s*[:\u2014\u2013-]/gm,
|
|
24029
|
+
/\*\*([A-Z0-9][A-Za-z0-9][\w\s.&',/()-]{1,50})\*\*/g,
|
|
24021
24030
|
/^#{1,4}\s+(?:\d+\.\s+)?(?:\*\*)?([A-Z0-9][A-Za-z0-9][\w\s.&',/()-]{1,50}?)(?:\*\*)?$/gm,
|
|
24022
|
-
/\[([A-Z0-9][A-Za-z0-9][\w\s.&',/()-]{1,50}
|
|
24031
|
+
/\[([A-Z0-9][A-Za-z0-9][\w\s.&',/()-]{1,50})\]\(https?:\/\/[^\s)]+\)/g
|
|
24023
24032
|
];
|
|
24024
24033
|
const genericKeys = /* @__PURE__ */ new Set([
|
|
24025
24034
|
"additional",
|
|
@@ -24814,7 +24823,7 @@ import { eq as eq29, and as and20 } from "drizzle-orm";
|
|
|
24814
24823
|
|
|
24815
24824
|
// src/sitemap-parser.ts
|
|
24816
24825
|
var log3 = createLogger("SitemapParser");
|
|
24817
|
-
var LOC_REGEX = /<loc
|
|
24826
|
+
var LOC_REGEX = /<loc>([^<]+)<\/loc>/gi;
|
|
24818
24827
|
var SITEMAP_TAG_REGEX = /<sitemap>[\s\S]*?<\/sitemap>/gi;
|
|
24819
24828
|
var PRIVATE_IP_PATTERNS = [
|
|
24820
24829
|
/^169\.254\./,
|
|
@@ -24905,9 +24914,10 @@ async function parseSitemapRecursive(url, urls, visited, depth, isChild) {
|
|
|
24905
24914
|
for (const entry of sitemapEntries) {
|
|
24906
24915
|
const locMatch = LOC_REGEX.exec(entry);
|
|
24907
24916
|
LOC_REGEX.lastIndex = 0;
|
|
24908
|
-
|
|
24917
|
+
const inner = locMatch?.[1]?.trim();
|
|
24918
|
+
if (inner) {
|
|
24909
24919
|
await parseSitemapRecursive(
|
|
24910
|
-
|
|
24920
|
+
inner,
|
|
24911
24921
|
urls,
|
|
24912
24922
|
visited,
|
|
24913
24923
|
depth + 1,
|
|
@@ -24920,8 +24930,9 @@ async function parseSitemapRecursive(url, urls, visited, depth, isChild) {
|
|
|
24920
24930
|
}
|
|
24921
24931
|
let match;
|
|
24922
24932
|
while ((match = LOC_REGEX.exec(xml)) !== null) {
|
|
24923
|
-
|
|
24924
|
-
|
|
24933
|
+
const inner = match[1]?.trim();
|
|
24934
|
+
if (inner) {
|
|
24935
|
+
urls.add(inner);
|
|
24925
24936
|
}
|
|
24926
24937
|
}
|
|
24927
24938
|
LOC_REGEX.lastIndex = 0;
|
|
@@ -25054,7 +25065,7 @@ import { eq as eq30, desc as desc14 } from "drizzle-orm";
|
|
|
25054
25065
|
var log5 = createLogger("BingInspectSitemap");
|
|
25055
25066
|
function parseBingDate2(value) {
|
|
25056
25067
|
if (!value) return null;
|
|
25057
|
-
const match = /\/Date\((-?\d+)[
|
|
25068
|
+
const match = /\/Date\((-?\d+)(?:[-+]\d+)?\)\//.exec(value);
|
|
25058
25069
|
if (!match) return null;
|
|
25059
25070
|
const ms = parseInt(match[1], 10);
|
|
25060
25071
|
if (ms <= 0) return null;
|
|
@@ -25064,7 +25075,7 @@ function isBlockingIssueType2(issueType) {
|
|
|
25064
25075
|
if (!issueType) return true;
|
|
25065
25076
|
const trimmed = issueType.trim();
|
|
25066
25077
|
if (!trimmed) return true;
|
|
25067
|
-
return trimmed.split(/\s+/).some((flag) => !/^(None|Seo(Issues|Concerns))$/i.test(flag));
|
|
25078
|
+
return trimmed.split(/\s+/).some((flag) => !/^(?:None|Seo(?:Issues|Concerns))$/i.test(flag));
|
|
25068
25079
|
}
|
|
25069
25080
|
async function executeBingInspectSitemap(db, runId, projectId, opts) {
|
|
25070
25081
|
const startedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
@@ -25781,7 +25792,7 @@ function parseQueryLines(text, max) {
|
|
|
25781
25792
|
if (!line) continue;
|
|
25782
25793
|
line = line.replace(/^\s*(?:\d+[.)]\s*|[-*•]\s*)/, "").replace(/^["']|["']$/g, "").trim();
|
|
25783
25794
|
if (!line) continue;
|
|
25784
|
-
if (/^(here are|sure|certainly|of course|i['
|
|
25795
|
+
if (/^(?:here are|sure|certainly|of course|i[’']ve|these are|below are)/i.test(line)) continue;
|
|
25785
25796
|
const key = line.toLowerCase();
|
|
25786
25797
|
if (seen.has(key)) continue;
|
|
25787
25798
|
seen.add(key);
|
|
@@ -26314,7 +26325,7 @@ function readStoredGroundingSources(rawResponse) {
|
|
|
26314
26325
|
return result;
|
|
26315
26326
|
}
|
|
26316
26327
|
async function backfillInsightsCommand(project, opts) {
|
|
26317
|
-
const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-
|
|
26328
|
+
const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-R3KDVKIB.js");
|
|
26318
26329
|
const config = loadConfig();
|
|
26319
26330
|
const db = createClient(config.database);
|
|
26320
26331
|
migrate(db);
|
|
@@ -27093,7 +27104,7 @@ function parseDescription(body) {
|
|
|
27093
27104
|
if (end === -1) return "(no description)";
|
|
27094
27105
|
const block = body.slice(3, end);
|
|
27095
27106
|
for (const line of block.split("\n")) {
|
|
27096
|
-
const match = line.match(/^description:\s*(
|
|
27107
|
+
const match = line.match(/^description:\s*(\S.*)$/);
|
|
27097
27108
|
if (match) return match[1].trim().replace(/^["']|["']$/g, "");
|
|
27098
27109
|
}
|
|
27099
27110
|
return "(no description)";
|
|
@@ -28797,7 +28808,7 @@ function mapAuditFactor(factor) {
|
|
|
28797
28808
|
};
|
|
28798
28809
|
}
|
|
28799
28810
|
function parseJsonObject(input) {
|
|
28800
|
-
const fenced = input.match(/```(?:json)
|
|
28811
|
+
const fenced = input.match(/```(?:json)?([\s\S]*?)```/i);
|
|
28801
28812
|
const candidate = fenced?.[1] ?? input;
|
|
28802
28813
|
const start = candidate.indexOf("{");
|
|
28803
28814
|
const end = candidate.lastIndexOf("}");
|
|
@@ -28864,7 +28875,6 @@ var API_ADAPTERS = [
|
|
|
28864
28875
|
var BROWSER_ADAPTERS = [
|
|
28865
28876
|
cdpChatgptAdapter
|
|
28866
28877
|
];
|
|
28867
|
-
var ALL_ADAPTERS = [...API_ADAPTERS, ...BROWSER_ADAPTERS];
|
|
28868
28878
|
var adapterMap = Object.fromEntries(
|
|
28869
28879
|
API_ADAPTERS.map((a) => [a.name, a])
|
|
28870
28880
|
);
|
|
@@ -29880,7 +29890,7 @@ function parseQueryResponse(raw, count) {
|
|
|
29880
29890
|
let cleaned = line.replace(/^\s*(?:\d+[.)]\s*|[-*•]\s*)/, "").trim();
|
|
29881
29891
|
cleaned = cleaned.replace(/^["']|["']$/g, "").trim();
|
|
29882
29892
|
if (!cleaned) continue;
|
|
29883
|
-
if (/^(here are|sure|certainly|of course|i've|these are|below are)/i.test(cleaned)) continue;
|
|
29893
|
+
if (/^(?:here are|sure|certainly|of course|i['’]ve|these are|below are)/i.test(cleaned)) continue;
|
|
29884
29894
|
if (cleaned.split(/\s+/).length > 8) continue;
|
|
29885
29895
|
const key = cleaned.toLowerCase();
|
|
29886
29896
|
if (seen.has(key)) continue;
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
categoryLabel,
|
|
10
10
|
determineAnswerMentioned,
|
|
11
11
|
normalizeProjectDomain
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-MM3A2CJK.js";
|
|
13
13
|
|
|
14
14
|
// src/intelligence-service.ts
|
|
15
15
|
import { eq, desc, asc, and, or, inArray } from "drizzle-orm";
|
|
@@ -2574,8 +2574,8 @@ function analyzeRuns(currentRun, previousRun, opts = {}) {
|
|
|
2574
2574
|
}
|
|
2575
2575
|
|
|
2576
2576
|
// ../intelligence/src/query-shape.ts
|
|
2577
|
-
var TRANSACTIONAL = /\b(buy|price|pricing|cost|cheap|discount|coupon|deal|sale|trial|plan)\b/i;
|
|
2578
|
-
var NAVIGATIONAL = /\b(login|sign[- ]?in|contact|support|help|download|app|homepage)\b|\.(com|io|net|org|app|ai)\b/i;
|
|
2577
|
+
var TRANSACTIONAL = /\b(?:buy|price|pricing|cost|cheap|discount|coupon|deal|sale|trial|plan)\b/i;
|
|
2578
|
+
var NAVIGATIONAL = /\b(?:login|sign[- ]?in|contact|support|help|download|app|homepage)\b|\.(?:com|io|net|org|app|ai)\b/i;
|
|
2579
2579
|
function isBlogShapedQuery(query) {
|
|
2580
2580
|
const trimmed = query.trim();
|
|
2581
2581
|
if (!trimmed) return false;
|
|
@@ -2619,8 +2619,12 @@ function buildInventory(input) {
|
|
|
2619
2619
|
function extractPath(url) {
|
|
2620
2620
|
const trimmed = url.trim();
|
|
2621
2621
|
if (!trimmed) return "";
|
|
2622
|
-
|
|
2623
|
-
|
|
2622
|
+
let path;
|
|
2623
|
+
try {
|
|
2624
|
+
path = new URL(trimmed).pathname;
|
|
2625
|
+
} catch {
|
|
2626
|
+
path = trimmed;
|
|
2627
|
+
}
|
|
2624
2628
|
const stripped = path.replace(/\/+$/, "");
|
|
2625
2629
|
return stripped || "/";
|
|
2626
2630
|
}
|
|
@@ -3008,8 +3012,8 @@ function groupInsights(insights2, keyFn = (i) => JSON.stringify([i.query, i.prov
|
|
|
3008
3012
|
}
|
|
3009
3013
|
|
|
3010
3014
|
// ../intelligence/src/query-categorize.ts
|
|
3011
|
-
var TRANSACTIONAL_RE = /\b(buy|price|pricing|cost|hire|near me|services?|agency|consultant|company)\b/i;
|
|
3012
|
-
var INFORMATIONAL_RE = /\b(what|how|why|when|guide|tutorial|vs|versus|alternatives?|examples?|definition)\b/i;
|
|
3015
|
+
var TRANSACTIONAL_RE = /\b(?:buy|price|pricing|cost|hire|near me|services?|agency|consultant|company)\b/i;
|
|
3016
|
+
var INFORMATIONAL_RE = /\b(?:what|how|why|when|guide|tutorial|vs|versus|alternatives?|examples?|definition)\b/i;
|
|
3013
3017
|
var MIN_BRAND_TOKEN_LENGTH = 3;
|
|
3014
3018
|
function compact(value) {
|
|
3015
3019
|
return value.toLowerCase().replace(/[^a-z0-9]/g, "");
|
|
@@ -142,7 +142,7 @@ var runDtoSchema = z2.object({
|
|
|
142
142
|
error: runErrorSchema.nullable().optional(),
|
|
143
143
|
createdAt: z2.string()
|
|
144
144
|
});
|
|
145
|
-
var PROVIDER_PREFIX = /^\[provider-[
|
|
145
|
+
var PROVIDER_PREFIX = /^\[provider-[\w-]+\]\s+/;
|
|
146
146
|
function parseProviderErrorMessage(msg) {
|
|
147
147
|
const stripped = msg.replace(PROVIDER_PREFIX, "");
|
|
148
148
|
try {
|
|
@@ -2002,7 +2002,7 @@ function normalizeUrlPath(input) {
|
|
|
2002
2002
|
trimmed = trimmed.replace(/ /g, " ").replace(/\s+/g, " ").trim();
|
|
2003
2003
|
if (trimmed === "" || trimmed === "/") return "/";
|
|
2004
2004
|
if (trimmed === "(not set)") return null;
|
|
2005
|
-
trimmed = trimmed.replace(/([a-
|
|
2005
|
+
trimmed = trimmed.replace(/([a-z0-9])[).]+$/i, "$1");
|
|
2006
2006
|
if (trimmed.startsWith("/)") || trimmed.startsWith("/ ")) {
|
|
2007
2007
|
trimmed = "/";
|
|
2008
2008
|
}
|
package/dist/cli.js
CHANGED
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
setTelemetrySource,
|
|
22
22
|
showFirstRunNotice,
|
|
23
23
|
trackEvent
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-IYUI74JP.js";
|
|
25
25
|
import {
|
|
26
26
|
CliError,
|
|
27
27
|
EXIT_SYSTEM_ERROR,
|
|
@@ -37,14 +37,14 @@ import {
|
|
|
37
37
|
saveConfig,
|
|
38
38
|
saveConfigPatch,
|
|
39
39
|
usageError
|
|
40
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-PRNO52YC.js";
|
|
41
41
|
import {
|
|
42
42
|
apiKeys,
|
|
43
43
|
createClient,
|
|
44
44
|
migrate,
|
|
45
45
|
projects,
|
|
46
46
|
queries
|
|
47
|
-
} from "./chunk-
|
|
47
|
+
} from "./chunk-K2TOOQ4F.js";
|
|
48
48
|
import {
|
|
49
49
|
CcReleaseSyncStatuses,
|
|
50
50
|
CheckScopes,
|
|
@@ -63,7 +63,7 @@ import {
|
|
|
63
63
|
providerQuotaPolicySchema,
|
|
64
64
|
resolveProviderInput,
|
|
65
65
|
skillsClientSchema
|
|
66
|
-
} from "./chunk-
|
|
66
|
+
} from "./chunk-MM3A2CJK.js";
|
|
67
67
|
|
|
68
68
|
// src/cli.ts
|
|
69
69
|
import { pathToFileURL } from "url";
|
|
@@ -7295,7 +7295,7 @@ function resolveBundledSkillsRoot(pkgDir) {
|
|
|
7295
7295
|
function parseDescription(content) {
|
|
7296
7296
|
const fmMatch = /^---\n([\s\S]*?)\n---/.exec(content);
|
|
7297
7297
|
if (!fmMatch) return "";
|
|
7298
|
-
const descMatch = /^description:\s*(
|
|
7298
|
+
const descMatch = /^description:\s*(\S.*)$/m.exec(fmMatch[1]);
|
|
7299
7299
|
if (!descMatch) return "";
|
|
7300
7300
|
return descMatch[1].replace(/^["']|["']$/g, "").trim();
|
|
7301
7301
|
}
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createServer
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-IYUI74JP.js";
|
|
4
4
|
import {
|
|
5
5
|
loadConfig
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-PRNO52YC.js";
|
|
7
|
+
import "./chunk-K2TOOQ4F.js";
|
|
8
|
+
import "./chunk-MM3A2CJK.js";
|
|
9
9
|
export {
|
|
10
10
|
createServer,
|
|
11
11
|
loadConfig
|
package/dist/mcp.js
CHANGED
|
@@ -2,8 +2,8 @@ import {
|
|
|
2
2
|
CliError,
|
|
3
3
|
canonryMcpTools,
|
|
4
4
|
createApiClient
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-PRNO52YC.js";
|
|
6
|
+
import "./chunk-MM3A2CJK.js";
|
|
7
7
|
|
|
8
8
|
// src/mcp/cli.ts
|
|
9
9
|
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.46.
|
|
3
|
+
"version": "4.46.1",
|
|
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",
|
|
@@ -60,23 +60,23 @@
|
|
|
60
60
|
"@types/node-cron": "^3.0.11",
|
|
61
61
|
"tsup": "^8.5.1",
|
|
62
62
|
"tsx": "^4.19.0",
|
|
63
|
-
"@ainyc/canonry-config": "0.0.0",
|
|
64
63
|
"@ainyc/canonry-api-routes": "0.0.0",
|
|
64
|
+
"@ainyc/canonry-config": "0.0.0",
|
|
65
65
|
"@ainyc/canonry-contracts": "0.0.0",
|
|
66
|
-
"@ainyc/canonry-integration-bing": "0.0.0",
|
|
67
66
|
"@ainyc/canonry-db": "0.0.0",
|
|
68
|
-
"@ainyc/canonry-integration-cloud-run": "0.0.0",
|
|
69
67
|
"@ainyc/canonry-intelligence": "0.0.0",
|
|
68
|
+
"@ainyc/canonry-integration-cloud-run": "0.0.0",
|
|
69
|
+
"@ainyc/canonry-integration-bing": "0.0.0",
|
|
70
70
|
"@ainyc/canonry-integration-commoncrawl": "0.0.0",
|
|
71
71
|
"@ainyc/canonry-integration-google": "0.0.0",
|
|
72
72
|
"@ainyc/canonry-integration-traffic": "0.0.0",
|
|
73
73
|
"@ainyc/canonry-integration-wordpress": "0.0.0",
|
|
74
|
-
"@ainyc/canonry-provider-claude": "0.0.0",
|
|
75
74
|
"@ainyc/canonry-provider-cdp": "0.0.0",
|
|
76
|
-
"@ainyc/canonry-provider-
|
|
75
|
+
"@ainyc/canonry-provider-claude": "0.0.0",
|
|
77
76
|
"@ainyc/canonry-provider-local": "0.0.0",
|
|
78
|
-
"@ainyc/canonry-provider-
|
|
79
|
-
"@ainyc/canonry-provider-
|
|
77
|
+
"@ainyc/canonry-provider-openai": "0.0.0",
|
|
78
|
+
"@ainyc/canonry-provider-gemini": "0.0.0",
|
|
79
|
+
"@ainyc/canonry-provider-perplexity": "0.0.0"
|
|
80
80
|
},
|
|
81
81
|
"scripts": {
|
|
82
82
|
"build": "tsx scripts/copy-agent-assets.ts && tsup && tsx build-web.ts",
|