@ainyc/canonry 4.63.0 → 4.64.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/references/regression-playbook.md +1 -1
- package/assets/agent-workspace/skills/canonry/references/google-business-profile.md +17 -3
- package/assets/assets/{BacklinksPage-CAMqubn_.js → BacklinksPage-B9oyoljV.js} +1 -1
- package/assets/assets/{ChartPrimitives-CiZKV2Ax.js → ChartPrimitives-CvfM24iC.js} +1 -1
- package/assets/assets/ProjectPage-DELbOAlm.js +6 -0
- package/assets/assets/{RunRow-Du7aiJa1.js → RunRow-vHM36Fdi.js} +1 -1
- package/assets/assets/{RunsPage-BPNXipd_.js → RunsPage-Cr58nTet.js} +1 -1
- package/assets/assets/{SettingsPage-C5Iz4EDc.js → SettingsPage-BuiP8ZOv.js} +1 -1
- package/assets/assets/{TrafficPage-F6XgD0ME.js → TrafficPage-bwOxChyo.js} +1 -1
- package/assets/assets/{TrafficSourceDetailPage-BGk23nTl.js → TrafficSourceDetailPage-B0uY6VIB.js} +1 -1
- package/assets/assets/{extract-error-message-DCFMmz7N.js → extract-error-message-CWdzuNp4.js} +1 -1
- package/assets/assets/{index-DVWeE6yS.js → index-DiN_mzYU.js} +66 -66
- package/assets/assets/{index-DbIJBXnx.css → index-yMJe1bJR.css} +1 -1
- package/assets/assets/{server-traffic-CKrIOeHp.js → server-traffic-D3aICbxr.js} +1 -1
- package/assets/assets/{trash-2-Cs489qhT.js → trash-2-CVKno2W2.js} +1 -1
- package/assets/assets/vendor-recharts-ClRVR6aX.js +36 -0
- package/assets/index.html +3 -3
- package/dist/{chunk-GWV4FKVY.js → chunk-34PATQZM.js} +45 -0
- package/dist/{chunk-WW6NOJTP.js → chunk-64IDABSF.js} +1 -1
- package/dist/{chunk-EECLXA5D.js → chunk-KHN3XMOR.js} +52 -7
- package/dist/{chunk-UNDLLHDV.js → chunk-MDNDIBUM.js} +4 -4
- package/dist/cli.js +15 -10
- package/dist/index.js +4 -4
- package/dist/{intelligence-service-I5HMGDKS.js → intelligence-service-SMU5JVVD.js} +2 -2
- package/dist/mcp.js +2 -2
- package/package.json +11 -11
- package/assets/assets/ProjectPage-0Ph71-Nu.js +0 -6
- package/assets/assets/vendor-recharts-DWvKDyBF.js +0 -36
package/assets/index.html
CHANGED
|
@@ -12,12 +12,12 @@
|
|
|
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-
|
|
15
|
+
<script type="module" crossorigin src="./assets/index-DiN_mzYU.js"></script>
|
|
16
16
|
<link rel="modulepreload" crossorigin href="./assets/vendor-tanstack-Dq7p98wZ.js">
|
|
17
17
|
<link rel="modulepreload" crossorigin href="./assets/vendor-radix-B57xfQbP.js">
|
|
18
|
-
<link rel="modulepreload" crossorigin href="./assets/vendor-recharts-
|
|
18
|
+
<link rel="modulepreload" crossorigin href="./assets/vendor-recharts-ClRVR6aX.js">
|
|
19
19
|
<link rel="modulepreload" crossorigin href="./assets/vendor-markdown-DK7fbRNb.js">
|
|
20
|
-
<link rel="stylesheet" crossorigin href="./assets/index-
|
|
20
|
+
<link rel="stylesheet" crossorigin href="./assets/index-yMJe1bJR.css">
|
|
21
21
|
</head>
|
|
22
22
|
<body>
|
|
23
23
|
<div id="root"></div>
|
|
@@ -973,8 +973,30 @@ var gbpSummaryDtoSchema = z7.object({
|
|
|
973
973
|
totals: z7.record(z7.string(), z7.number()),
|
|
974
974
|
recent7d: z7.record(z7.string(), z7.number()),
|
|
975
975
|
prior7d: z7.record(z7.string(), z7.number()),
|
|
976
|
+
// Per-metric % change recent-vs-prior, computed over COMPLETE days only
|
|
977
|
+
// (the windows anchor to `freshness.dataThroughDate`, never the lagging
|
|
978
|
+
// tail), so a reporting-lag artifact is never shown as a real delta.
|
|
976
979
|
deltaPct: z7.record(z7.string(), z7.number().nullable())
|
|
977
980
|
}),
|
|
981
|
+
// GBP Performance data lags a few days; the most recent stored days can be
|
|
982
|
+
// not-yet-reported zeros. `freshness` lets every renderer mark the trailing
|
|
983
|
+
// window as pending instead of treating it as a real decline.
|
|
984
|
+
freshness: z7.object({
|
|
985
|
+
/** Latest day with reported (non-zero) activity — the last complete day. Null when there's no data. */
|
|
986
|
+
dataThroughDate: z7.string().nullable(),
|
|
987
|
+
/** Max stored metric date (>= dataThroughDate when Google has emitted not-yet-final zero rows). Null when there's no data. */
|
|
988
|
+
latestStoredDate: z7.string().nullable(),
|
|
989
|
+
/** Calendar days between dataThroughDate and the as-of date — the trailing window still pending/unreported. */
|
|
990
|
+
pendingDays: z7.number().int().nonnegative()
|
|
991
|
+
}),
|
|
992
|
+
// Daily series (most recent ~30 days) for the trend charts. Each day carries
|
|
993
|
+
// every metric present in the window (0 where a metric had no row that day),
|
|
994
|
+
// and a `pending` flag so the lag tail renders distinct, never as zeros.
|
|
995
|
+
timeseries: z7.array(z7.object({
|
|
996
|
+
date: z7.string(),
|
|
997
|
+
pending: z7.boolean(),
|
|
998
|
+
metrics: z7.record(z7.string(), z7.number())
|
|
999
|
+
})),
|
|
978
1000
|
keywords: z7.object({
|
|
979
1001
|
total: z7.number().int().nonnegative(),
|
|
980
1002
|
thresholdedCount: z7.number().int().nonnegative(),
|
|
@@ -992,6 +1014,28 @@ var gbpSummaryDtoSchema = z7.object({
|
|
|
992
1014
|
emptyLodgingCount: z7.number().int().nonnegative()
|
|
993
1015
|
})
|
|
994
1016
|
});
|
|
1017
|
+
var GBP_METRIC_LABELS = {
|
|
1018
|
+
BUSINESS_DIRECTION_REQUESTS: "Direction requests",
|
|
1019
|
+
WEBSITE_CLICKS: "Website clicks",
|
|
1020
|
+
CALL_CLICKS: "Call clicks",
|
|
1021
|
+
BUSINESS_BOOKINGS: "Bookings",
|
|
1022
|
+
BUSINESS_CONVERSATIONS: "Conversations",
|
|
1023
|
+
BUSINESS_FOOD_ORDERS: "Food orders",
|
|
1024
|
+
BUSINESS_FOOD_MENU_CLICKS: "Food menu clicks",
|
|
1025
|
+
BUSINESS_IMPRESSIONS_DESKTOP_SEARCH: "Search impressions (desktop)",
|
|
1026
|
+
BUSINESS_IMPRESSIONS_MOBILE_SEARCH: "Search impressions (mobile)",
|
|
1027
|
+
BUSINESS_IMPRESSIONS_DESKTOP_MAPS: "Maps impressions (desktop)",
|
|
1028
|
+
BUSINESS_IMPRESSIONS_MOBILE_MAPS: "Maps impressions (mobile)"
|
|
1029
|
+
};
|
|
1030
|
+
function humanizeMetricKey(metric) {
|
|
1031
|
+
const words = metric.replace(/^BUSINESS_/, "").split("_").filter(Boolean).map((w) => w.toLowerCase());
|
|
1032
|
+
if (words.length === 0) return metric;
|
|
1033
|
+
const joined = words.join(" ");
|
|
1034
|
+
return joined.charAt(0).toUpperCase() + joined.slice(1);
|
|
1035
|
+
}
|
|
1036
|
+
function formatGbpMetricLabel(metric) {
|
|
1037
|
+
return GBP_METRIC_LABELS[metric] ?? humanizeMetricKey(metric);
|
|
1038
|
+
}
|
|
995
1039
|
|
|
996
1040
|
// ../contracts/src/retry.ts
|
|
997
1041
|
var DEFAULT_BASE_DELAY_MS = 1e3;
|
|
@@ -3912,6 +3956,7 @@ export {
|
|
|
3912
3956
|
gbpLodgingListResponseSchema,
|
|
3913
3957
|
gbpPlaceDetailsListResponseSchema,
|
|
3914
3958
|
gbpSummaryDtoSchema,
|
|
3959
|
+
formatGbpMetricLabel,
|
|
3915
3960
|
withRetry,
|
|
3916
3961
|
isRetryableHttpError,
|
|
3917
3962
|
bingUrlInspectionDtoSchema,
|
|
@@ -207,7 +207,7 @@ import {
|
|
|
207
207
|
wordpressSchemaDeployResultDtoSchema,
|
|
208
208
|
wordpressSchemaStatusResultDtoSchema,
|
|
209
209
|
wordpressStatusDtoSchema
|
|
210
|
-
} from "./chunk-
|
|
210
|
+
} from "./chunk-34PATQZM.js";
|
|
211
211
|
|
|
212
212
|
// src/intelligence-service.ts
|
|
213
213
|
import { eq as eq30, desc as desc15, asc as asc3, and as and23, ne as ne5, or as or5, inArray as inArray11, gte as gte6, lte as lte3 } from "drizzle-orm";
|
|
@@ -16837,6 +16837,11 @@ function shiftDate(date, days) {
|
|
|
16837
16837
|
const dd = String(dt.getUTCDate()).padStart(2, "0");
|
|
16838
16838
|
return `${yy}-${mm}-${dd}`;
|
|
16839
16839
|
}
|
|
16840
|
+
function daysBetween(from, to) {
|
|
16841
|
+
const [fy, fm, fd] = from.split("-").map(Number);
|
|
16842
|
+
const [ty, tm, td] = to.split("-").map(Number);
|
|
16843
|
+
return Math.round((Date.UTC(ty, tm - 1, td) - Date.UTC(fy, fm - 1, fd)) / 864e5);
|
|
16844
|
+
}
|
|
16840
16845
|
function roundPct(numerator, denominator) {
|
|
16841
16846
|
if (denominator === 0) return 0;
|
|
16842
16847
|
return Math.round(numerator / denominator * 100);
|
|
@@ -16864,6 +16869,44 @@ function computeWindowDelta(rows, referenceDate) {
|
|
|
16864
16869
|
}
|
|
16865
16870
|
return { recent7d, prior7d, deltaPct };
|
|
16866
16871
|
}
|
|
16872
|
+
function computeFreshness(rows, asOfDate) {
|
|
16873
|
+
if (rows.length === 0) return { dataThroughDate: null, latestStoredDate: null, pendingDays: 0 };
|
|
16874
|
+
let latestStoredDate = "";
|
|
16875
|
+
const totalByDate = /* @__PURE__ */ new Map();
|
|
16876
|
+
for (const row of rows) {
|
|
16877
|
+
if (row.date > latestStoredDate) latestStoredDate = row.date;
|
|
16878
|
+
totalByDate.set(row.date, (totalByDate.get(row.date) ?? 0) + row.value);
|
|
16879
|
+
}
|
|
16880
|
+
let dataThroughDate = null;
|
|
16881
|
+
for (const [date, total] of totalByDate) {
|
|
16882
|
+
if (total > 0 && (dataThroughDate === null || date > dataThroughDate)) dataThroughDate = date;
|
|
16883
|
+
}
|
|
16884
|
+
const pendingDays = dataThroughDate ? Math.max(0, daysBetween(dataThroughDate, asOfDate)) : 0;
|
|
16885
|
+
return { dataThroughDate, latestStoredDate: latestStoredDate || null, pendingDays };
|
|
16886
|
+
}
|
|
16887
|
+
function buildTimeseries(rows, freshness, windowDays = 30) {
|
|
16888
|
+
if (rows.length === 0 || freshness.latestStoredDate === null) return [];
|
|
16889
|
+
const windowLow = shiftDate(freshness.latestStoredDate, -(windowDays - 1));
|
|
16890
|
+
const metricKeys = /* @__PURE__ */ new Set();
|
|
16891
|
+
const byDate = /* @__PURE__ */ new Map();
|
|
16892
|
+
for (const row of rows) {
|
|
16893
|
+
if (row.date < windowLow || row.date > freshness.latestStoredDate) continue;
|
|
16894
|
+
metricKeys.add(row.metric);
|
|
16895
|
+
const day = byDate.get(row.date) ?? {};
|
|
16896
|
+
day[row.metric] = (day[row.metric] ?? 0) + row.value;
|
|
16897
|
+
byDate.set(row.date, day);
|
|
16898
|
+
}
|
|
16899
|
+
return [...byDate.keys()].sort().map((date) => {
|
|
16900
|
+
const present = byDate.get(date);
|
|
16901
|
+
const metrics = {};
|
|
16902
|
+
for (const key of metricKeys) metrics[key] = present[key] ?? 0;
|
|
16903
|
+
return {
|
|
16904
|
+
date,
|
|
16905
|
+
pending: freshness.dataThroughDate !== null && date > freshness.dataThroughDate,
|
|
16906
|
+
metrics
|
|
16907
|
+
};
|
|
16908
|
+
});
|
|
16909
|
+
}
|
|
16867
16910
|
function computeKeywordCoverage(rows) {
|
|
16868
16911
|
const total = rows.length;
|
|
16869
16912
|
const thresholdedCount = rows.filter((r) => r.valueCount === null).length;
|
|
@@ -16886,7 +16929,9 @@ function summarizeLodging(rows) {
|
|
|
16886
16929
|
};
|
|
16887
16930
|
}
|
|
16888
16931
|
function buildGbpSummary(input) {
|
|
16889
|
-
const
|
|
16932
|
+
const freshness = computeFreshness(input.dailyMetrics, input.asOfDate);
|
|
16933
|
+
const anchor = freshness.dataThroughDate ?? input.asOfDate;
|
|
16934
|
+
const window = computeWindowDelta(input.dailyMetrics, anchor);
|
|
16890
16935
|
return {
|
|
16891
16936
|
scope: { locationName: input.locationName, locationCount: input.locationCount },
|
|
16892
16937
|
performance: {
|
|
@@ -16895,6 +16940,8 @@ function buildGbpSummary(input) {
|
|
|
16895
16940
|
prior7d: window.prior7d,
|
|
16896
16941
|
deltaPct: window.deltaPct
|
|
16897
16942
|
},
|
|
16943
|
+
freshness,
|
|
16944
|
+
timeseries: buildTimeseries(input.dailyMetrics, freshness),
|
|
16898
16945
|
keywords: computeKeywordCoverage(input.keywords),
|
|
16899
16946
|
placeActions: summarizePlaceActions(input.placeActions),
|
|
16900
16947
|
lodging: summarizeLodging(input.lodging)
|
|
@@ -19405,7 +19452,7 @@ async function googleRoutes(app, opts) {
|
|
|
19405
19452
|
return buildGbpSummary({
|
|
19406
19453
|
locationName,
|
|
19407
19454
|
locationCount: 0,
|
|
19408
|
-
|
|
19455
|
+
asOfDate: today,
|
|
19409
19456
|
dailyMetrics: [],
|
|
19410
19457
|
keywords: [],
|
|
19411
19458
|
placeActions: [],
|
|
@@ -19422,11 +19469,10 @@ async function googleRoutes(app, opts) {
|
|
|
19422
19469
|
latestLodgingByLocation.set(row.locationName, { locationName: row.locationName, populatedGroupCount: row.populatedGroupCount });
|
|
19423
19470
|
}
|
|
19424
19471
|
}
|
|
19425
|
-
const referenceDate = metricRows.reduce((max, r) => r.date > max ? r.date : max, "") || today;
|
|
19426
19472
|
return buildGbpSummary({
|
|
19427
19473
|
locationName,
|
|
19428
19474
|
locationCount: locationNames.length,
|
|
19429
|
-
|
|
19475
|
+
asOfDate: today,
|
|
19430
19476
|
dailyMetrics: metricRows.map((r) => ({ metric: r.metric, date: r.date, value: r.value })),
|
|
19431
19477
|
keywords: keywordRows.map((r) => ({ valueCount: r.valueCount ?? null, valueThreshold: r.valueThreshold ?? null })),
|
|
19432
19478
|
placeActions: placeActionRows.map((r) => ({ placeActionType: r.placeActionType, providerType: r.providerType ?? null })),
|
|
@@ -31420,11 +31466,10 @@ var IntelligenceService = class {
|
|
|
31420
31466
|
const lodgingRow = this.db.select({ populatedGroupCount: gbpLodgingSnapshots.populatedGroupCount }).from(gbpLodgingSnapshots).where(and23(eq30(gbpLodgingSnapshots.projectId, projectId), eq30(gbpLodgingSnapshots.locationName, locationName))).orderBy(desc15(gbpLodgingSnapshots.syncedAt)).limit(1).get();
|
|
31421
31467
|
const placeRow = this.db.select({ attributes: gbpPlaceDetails.attributes }).from(gbpPlaceDetails).where(and23(eq30(gbpPlaceDetails.projectId, projectId), eq30(gbpPlaceDetails.locationName, locationName))).orderBy(desc15(gbpPlaceDetails.syncedAt)).limit(1).get();
|
|
31422
31468
|
const placesAmenities = placeRow ? extractPlaceAmenities(placeRow.attributes) : [];
|
|
31423
|
-
const referenceDate = metricRows.reduce((max, r) => r.date > max ? r.date : max, "") || fallbackDate;
|
|
31424
31469
|
const summary = buildGbpSummary({
|
|
31425
31470
|
locationName,
|
|
31426
31471
|
locationCount: 1,
|
|
31427
|
-
|
|
31472
|
+
asOfDate: fallbackDate,
|
|
31428
31473
|
dailyMetrics: metricRows,
|
|
31429
31474
|
keywords: [],
|
|
31430
31475
|
// keyword coverage is unused here; the trend uses the monthly series below
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
loadConfig,
|
|
9
9
|
loadConfigRaw,
|
|
10
10
|
saveConfigPatch
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-64IDABSF.js";
|
|
12
12
|
import {
|
|
13
13
|
CC_CACHE_DIR,
|
|
14
14
|
DUCKDB_SPEC,
|
|
@@ -93,7 +93,7 @@ import {
|
|
|
93
93
|
runs,
|
|
94
94
|
schedules,
|
|
95
95
|
usageCounters
|
|
96
|
-
} from "./chunk-
|
|
96
|
+
} from "./chunk-KHN3XMOR.js";
|
|
97
97
|
import {
|
|
98
98
|
AGENT_MEMORY_VALUE_MAX_BYTES,
|
|
99
99
|
AGENT_PROVIDER_IDS,
|
|
@@ -141,7 +141,7 @@ import {
|
|
|
141
141
|
skillsClientSchema,
|
|
142
142
|
validationError,
|
|
143
143
|
withRetry
|
|
144
|
-
} from "./chunk-
|
|
144
|
+
} from "./chunk-34PATQZM.js";
|
|
145
145
|
|
|
146
146
|
// src/telemetry.ts
|
|
147
147
|
import crypto from "crypto";
|
|
@@ -5616,7 +5616,7 @@ function readStoredGroundingSources(rawResponse) {
|
|
|
5616
5616
|
return result;
|
|
5617
5617
|
}
|
|
5618
5618
|
async function backfillInsightsCommand(project, opts) {
|
|
5619
|
-
const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-
|
|
5619
|
+
const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-SMU5JVVD.js");
|
|
5620
5620
|
const config = loadConfig();
|
|
5621
5621
|
const db = createClient(config.database);
|
|
5622
5622
|
migrate(db);
|
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-MDNDIBUM.js";
|
|
31
31
|
import {
|
|
32
32
|
CliError,
|
|
33
33
|
EXIT_SYSTEM_ERROR,
|
|
@@ -43,7 +43,7 @@ import {
|
|
|
43
43
|
saveConfig,
|
|
44
44
|
saveConfigPatch,
|
|
45
45
|
usageError
|
|
46
|
-
} from "./chunk-
|
|
46
|
+
} from "./chunk-64IDABSF.js";
|
|
47
47
|
import {
|
|
48
48
|
apiKeys,
|
|
49
49
|
createClient,
|
|
@@ -51,7 +51,7 @@ import {
|
|
|
51
51
|
projects,
|
|
52
52
|
queries,
|
|
53
53
|
renderReportHtml
|
|
54
|
-
} from "./chunk-
|
|
54
|
+
} from "./chunk-KHN3XMOR.js";
|
|
55
55
|
import {
|
|
56
56
|
CcReleaseSyncStatuses,
|
|
57
57
|
CheckScopes,
|
|
@@ -62,12 +62,13 @@ import {
|
|
|
62
62
|
discoveryBucketSchema,
|
|
63
63
|
discoveryCompetitorTypeSchema,
|
|
64
64
|
effectiveDomains,
|
|
65
|
+
formatGbpMetricLabel,
|
|
65
66
|
formatRunErrorOneLine,
|
|
66
67
|
normalizeProjectAliases,
|
|
67
68
|
notificationEventSchema,
|
|
68
69
|
providerQuotaPolicySchema,
|
|
69
70
|
resolveProviderInput
|
|
70
|
-
} from "./chunk-
|
|
71
|
+
} from "./chunk-34PATQZM.js";
|
|
71
72
|
|
|
72
73
|
// src/cli.ts
|
|
73
74
|
import { pathToFileURL } from "url";
|
|
@@ -3015,7 +3016,7 @@ async function gbpMetrics(project, opts) {
|
|
|
3015
3016
|
for (const m of response.metrics) totals.set(m.metric, (totals.get(m.metric) ?? 0) + m.value);
|
|
3016
3017
|
console.log(`${response.total} metric row(s). Totals by metric:`);
|
|
3017
3018
|
for (const [metric, total] of [...totals.entries()].sort((a, b) => b[1] - a[1])) {
|
|
3018
|
-
console.log(` ${metric.padEnd(
|
|
3019
|
+
console.log(` ${formatGbpMetricLabel(metric).padEnd(28)} ${total}`);
|
|
3019
3020
|
}
|
|
3020
3021
|
}
|
|
3021
3022
|
async function gbpKeywords(project, opts) {
|
|
@@ -3098,15 +3099,19 @@ async function gbpSummary(project, opts) {
|
|
|
3098
3099
|
return;
|
|
3099
3100
|
}
|
|
3100
3101
|
const scopeLabel = s.scope.locationName ?? `${s.scope.locationCount} selected location(s)`;
|
|
3101
|
-
console.log(`GBP local-AEO summary \u2014 ${scopeLabel}
|
|
3102
|
-
|
|
3103
|
-
|
|
3104
|
-
|
|
3102
|
+
console.log(`GBP local-AEO summary \u2014 ${scopeLabel}`);
|
|
3103
|
+
if (s.freshness.dataThroughDate) {
|
|
3104
|
+
const pending = s.freshness.pendingDays > 0 ? ` \xB7 ${s.freshness.pendingDays}d pending` : "";
|
|
3105
|
+
console.log(`Data through ${s.freshness.dataThroughDate}${pending}`);
|
|
3106
|
+
}
|
|
3107
|
+
console.log("");
|
|
3108
|
+
console.log("Performance (totals, last-7d vs prior-7d over complete days):");
|
|
3109
|
+
const metrics = Object.keys(s.performance.totals).sort((a, b) => formatGbpMetricLabel(a).localeCompare(formatGbpMetricLabel(b)));
|
|
3105
3110
|
if (metrics.length === 0) {
|
|
3106
3111
|
console.log(" (no performance data \u2014 run `canonry gbp sync` first)");
|
|
3107
3112
|
} else {
|
|
3108
3113
|
for (const m of metrics) {
|
|
3109
|
-
console.log(` ${m.padEnd(
|
|
3114
|
+
console.log(` ${formatGbpMetricLabel(m).padEnd(28)} ${String(s.performance.totals[m]).padStart(8)} ${fmtDelta(s.performance.deltaPct[m] ?? null)}`);
|
|
3110
3115
|
}
|
|
3111
3116
|
}
|
|
3112
3117
|
console.log(`
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createServer
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-MDNDIBUM.js";
|
|
4
4
|
import {
|
|
5
5
|
loadConfig
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-64IDABSF.js";
|
|
7
|
+
import "./chunk-KHN3XMOR.js";
|
|
8
|
+
import "./chunk-34PATQZM.js";
|
|
9
9
|
export {
|
|
10
10
|
createServer,
|
|
11
11
|
loadConfig
|
package/dist/mcp.js
CHANGED
|
@@ -3,8 +3,8 @@ import {
|
|
|
3
3
|
PACKAGE_VERSION,
|
|
4
4
|
canonryMcpTools,
|
|
5
5
|
createApiClient
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-64IDABSF.js";
|
|
7
|
+
import "./chunk-34PATQZM.js";
|
|
8
8
|
|
|
9
9
|
// src/mcp/cli.ts
|
|
10
10
|
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.64.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",
|
|
@@ -62,25 +62,25 @@
|
|
|
62
62
|
"tsup": "^8.5.1",
|
|
63
63
|
"tsx": "^4.19.0",
|
|
64
64
|
"@ainyc/canonry-api-routes": "0.0.0",
|
|
65
|
-
"@ainyc/canonry-api-client": "0.0.0",
|
|
66
65
|
"@ainyc/canonry-config": "0.0.0",
|
|
67
|
-
"@ainyc/canonry-
|
|
66
|
+
"@ainyc/canonry-api-client": "0.0.0",
|
|
68
67
|
"@ainyc/canonry-db": "0.0.0",
|
|
69
|
-
"@ainyc/canonry-
|
|
68
|
+
"@ainyc/canonry-contracts": "0.0.0",
|
|
70
69
|
"@ainyc/canonry-integration-cloud-run": "0.0.0",
|
|
71
|
-
"@ainyc/canonry-integration-
|
|
72
|
-
"@ainyc/canonry-integration-
|
|
70
|
+
"@ainyc/canonry-integration-bing": "0.0.0",
|
|
71
|
+
"@ainyc/canonry-integration-commoncrawl": "0.0.0",
|
|
73
72
|
"@ainyc/canonry-integration-google": "0.0.0",
|
|
73
|
+
"@ainyc/canonry-integration-google-business-profile": "0.0.0",
|
|
74
74
|
"@ainyc/canonry-integration-traffic": "0.0.0",
|
|
75
75
|
"@ainyc/canonry-integration-wordpress": "0.0.0",
|
|
76
|
-
"@ainyc/canonry-integration-commoncrawl": "0.0.0",
|
|
77
76
|
"@ainyc/canonry-intelligence": "0.0.0",
|
|
78
|
-
"@ainyc/canonry-provider-
|
|
77
|
+
"@ainyc/canonry-provider-cdp": "0.0.0",
|
|
79
78
|
"@ainyc/canonry-provider-claude": "0.0.0",
|
|
79
|
+
"@ainyc/canonry-integration-google-places": "0.0.0",
|
|
80
|
+
"@ainyc/canonry-provider-gemini": "0.0.0",
|
|
81
|
+
"@ainyc/canonry-provider-perplexity": "0.0.0",
|
|
80
82
|
"@ainyc/canonry-provider-openai": "0.0.0",
|
|
81
|
-
"@ainyc/canonry-provider-
|
|
82
|
-
"@ainyc/canonry-provider-local": "0.0.0",
|
|
83
|
-
"@ainyc/canonry-provider-perplexity": "0.0.0"
|
|
83
|
+
"@ainyc/canonry-provider-local": "0.0.0"
|
|
84
84
|
},
|
|
85
85
|
"scripts": {
|
|
86
86
|
"build": "tsx scripts/copy-agent-assets.ts && tsup && tsx build-web.ts",
|