@ainyc/canonry 4.95.0 → 4.96.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/{BacklinksPage-CT3DfxMw.js → BacklinksPage-BiuaXwM3.js} +1 -1
- package/assets/assets/{ChartPrimitives-B6Dleq3z.js → ChartPrimitives-C7jCdApm.js} +1 -1
- package/assets/assets/ProjectPage-BHo6vIlj.js +6 -0
- package/assets/assets/{RunRow-C7rEdPSI.js → RunRow-DLn-qaBh.js} +1 -1
- package/assets/assets/{RunsPage-ByohAHOY.js → RunsPage-BArLwd1T.js} +1 -1
- package/assets/assets/{SettingsPage-D4dwPwZy.js → SettingsPage-BJmzcMsh.js} +1 -1
- package/assets/assets/{TrafficPage-Kh1CSxMr.js → TrafficPage-DqG9hcNu.js} +1 -1
- package/assets/assets/{TrafficSourceDetailPage-CIlOFRYB.js → TrafficSourceDetailPage-yW5pdgrM.js} +1 -1
- package/assets/assets/{arrow-left-BoX1Vp7B.js → arrow-left-BUhA2bZu.js} +1 -1
- package/assets/assets/{extract-error-message-ZqsMkFg8.js → extract-error-message-D2vzFSUQ.js} +1 -1
- package/assets/assets/{index-k1XIw8WK.js → index-afT0D_K8.js} +3 -3
- package/assets/assets/{trash-2-A1PQNK3E.js → trash-2-C94CCTsF.js} +1 -1
- package/assets/index.html +1 -1
- package/dist/{chunk-BUGJOQNW.js → chunk-CEYDMSQO.js} +29 -0
- package/dist/{chunk-7YU6ILWL.js → chunk-CNTBEUVE.js} +11 -7
- package/dist/{chunk-FFSJRZJR.js → chunk-IFB43PRW.js} +1 -1
- package/dist/{chunk-4E4JPS37.js → chunk-ROLTZPV7.js} +4 -4
- package/dist/cli.js +4 -4
- package/dist/index.js +4 -4
- package/dist/{intelligence-service-PGEGDNY6.js → intelligence-service-SJKUVFZ6.js} +2 -2
- package/dist/mcp.js +2 -2
- package/package.json +10 -10
- package/assets/assets/ProjectPage-DeEE66hg.js +0 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c}from"./index-
|
|
1
|
+
import{c}from"./index-afT0D_K8.js";const a=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],h=c("circle-check",a);const e=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]],n=c("circle-question-mark",e);const o=[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]],s=c("download",o);const t=[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],r=c("trash-2",t);export{h as C,s as D,r as T,n as a};
|
package/assets/index.html
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
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-afT0D_K8.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
18
|
<link rel="modulepreload" crossorigin href="./assets/vendor-recharts-ClRVR6aX.js">
|
|
@@ -4283,6 +4283,13 @@ var reportRateDeltaSchema = z28.object({
|
|
|
4283
4283
|
prior: z28.number(),
|
|
4284
4284
|
/** Absolute delta (current − prior). Negative = decrease. */
|
|
4285
4285
|
deltaAbs: z28.number(),
|
|
4286
|
+
/**
|
|
4287
|
+
* Signed percent change vs `prior`, rounded to a whole number. Null when
|
|
4288
|
+
* `prior <= 0` (percentage undefined). Renderers route count/traffic tiles
|
|
4289
|
+
* through the "smart %" rule — percentage when the prior base is large
|
|
4290
|
+
* enough (`MIN_PCT_BASE`), otherwise a rounded raw delta.
|
|
4291
|
+
*/
|
|
4292
|
+
deltaPct: z28.number().nullable(),
|
|
4286
4293
|
/**
|
|
4287
4294
|
* Direction tag for tone mapping. Threshold is metric-specific (3pp for
|
|
4288
4295
|
* rates, 0.5 for counts) so small noise lands as 'flat' rather than
|
|
@@ -5064,6 +5071,26 @@ function formatDeltaCopy(d, suffix, windowLabel = "vs prior 7 days") {
|
|
|
5064
5071
|
if (d.deltaPct < 0) return `Down ${Math.abs(d.deltaPct)}% ${windowLabel} (${formatNumber(d.prior)} ${suffix})`;
|
|
5065
5072
|
return `Flat ${windowLabel} (${formatNumber(d.prior)} ${suffix})`;
|
|
5066
5073
|
}
|
|
5074
|
+
var MIN_PCT_BASE = 30;
|
|
5075
|
+
function round1(value) {
|
|
5076
|
+
return Math.round(value * 10) / 10;
|
|
5077
|
+
}
|
|
5078
|
+
function formatAverageDelta(d) {
|
|
5079
|
+
if (d.prior >= MIN_PCT_BASE && d.deltaPct !== null) {
|
|
5080
|
+
const sign2 = d.deltaPct > 0 ? "+" : "";
|
|
5081
|
+
return `${sign2}${d.deltaPct}% vs prior`;
|
|
5082
|
+
}
|
|
5083
|
+
const sign = d.deltaAbs > 0 ? "+" : "";
|
|
5084
|
+
return `${sign}${round1(d.deltaAbs)} vs ${round1(d.prior)}`;
|
|
5085
|
+
}
|
|
5086
|
+
function formatWindowCountDelta(d, countLabel, windowLabel) {
|
|
5087
|
+
if (d.prior >= MIN_PCT_BASE && d.deltaPct !== null) {
|
|
5088
|
+
const sign2 = d.deltaPct > 0 ? "+" : "";
|
|
5089
|
+
return `${sign2}${d.deltaPct}% ${windowLabel}`;
|
|
5090
|
+
}
|
|
5091
|
+
const sign = d.deltaAbs > 0 ? "+" : "";
|
|
5092
|
+
return `${sign}${formatNumber(Math.round(d.deltaAbs))} ${countLabel} ${windowLabel}`;
|
|
5093
|
+
}
|
|
5067
5094
|
|
|
5068
5095
|
// ../contracts/src/ads.ts
|
|
5069
5096
|
import { z as z31 } from "zod";
|
|
@@ -5572,6 +5599,8 @@ export {
|
|
|
5572
5599
|
deltaPercent,
|
|
5573
5600
|
deltaTone,
|
|
5574
5601
|
formatDeltaCopy,
|
|
5602
|
+
formatAverageDelta,
|
|
5603
|
+
formatWindowCountDelta,
|
|
5575
5604
|
adsConnectRequestSchema,
|
|
5576
5605
|
adsConnectionStatusDtoSchema,
|
|
5577
5606
|
adsDisconnectResponseSchema,
|
|
@@ -124,12 +124,14 @@ import {
|
|
|
124
124
|
extractAnswerMentions,
|
|
125
125
|
findDuplicateLocationLabels,
|
|
126
126
|
forbidden,
|
|
127
|
+
formatAverageDelta,
|
|
127
128
|
formatDate,
|
|
128
129
|
formatDateRange,
|
|
129
130
|
formatDeltaCopy,
|
|
130
131
|
formatIsoDate,
|
|
131
132
|
formatNumber,
|
|
132
133
|
formatRatio,
|
|
134
|
+
formatWindowCountDelta,
|
|
133
135
|
ga4AiReferralHistoryEntrySchema,
|
|
134
136
|
ga4SessionHistoryEntrySchema,
|
|
135
137
|
ga4SocialReferralHistoryEntrySchema,
|
|
@@ -259,7 +261,7 @@ import {
|
|
|
259
261
|
wordpressSchemaDeployResultDtoSchema,
|
|
260
262
|
wordpressSchemaStatusResultDtoSchema,
|
|
261
263
|
wordpressStatusDtoSchema
|
|
262
|
-
} from "./chunk-
|
|
264
|
+
} from "./chunk-CEYDMSQO.js";
|
|
263
265
|
|
|
264
266
|
// src/intelligence-service.ts
|
|
265
267
|
import { eq as eq37, desc as desc18, asc as asc5, and as and27, ne as ne5, or as or5, inArray as inArray14, gte as gte7, lte as lte4 } from "drizzle-orm";
|
|
@@ -5237,10 +5239,13 @@ function smoothedRunDelta(points, valueFn, maxWindow = SMOOTHED_RUN_DELTA_MAX_WI
|
|
|
5237
5239
|
const sum = (arr) => arr.reduce((s, p) => s + valueFn(p), 0);
|
|
5238
5240
|
const currentAvg = sum(tail) / tail.length;
|
|
5239
5241
|
const priorAvg = sum(prior) / prior.length;
|
|
5242
|
+
const current = roundTo1Decimal(currentAvg);
|
|
5243
|
+
const prior_ = roundTo1Decimal(priorAvg);
|
|
5240
5244
|
return {
|
|
5241
|
-
current
|
|
5242
|
-
prior:
|
|
5245
|
+
current,
|
|
5246
|
+
prior: prior_,
|
|
5243
5247
|
deltaAbs: currentAvg - priorAvg,
|
|
5248
|
+
deltaPct: deltaPercent(current, prior_),
|
|
5244
5249
|
window
|
|
5245
5250
|
};
|
|
5246
5251
|
}
|
|
@@ -10123,8 +10128,7 @@ function renderRateDeltaTile(label, delta, unit) {
|
|
|
10123
10128
|
return `<div class="metric"><div class="label">${escapeHtml(label)}</div><div class="value">\u2014</div><div class="delta">No prior data</div></div>`;
|
|
10124
10129
|
}
|
|
10125
10130
|
const valueSuffix = unit === "%" ? "%" : "";
|
|
10126
|
-
const
|
|
10127
|
-
const deltaText = `${deltaSign}${delta.deltaAbs.toFixed(unit === "%" ? 1 : 0)}${valueSuffix} vs ${delta.prior}${valueSuffix}`;
|
|
10131
|
+
const deltaText = unit === "%" ? `${delta.deltaAbs > 0 ? "+" : ""}${delta.deltaAbs.toFixed(1)}% vs ${delta.prior}%` : formatAverageDelta(delta);
|
|
10128
10132
|
return `<div class="metric">
|
|
10129
10133
|
<div class="label">${escapeHtml(label)}</div>
|
|
10130
10134
|
<div class="value ${deltaToneClass(delta.direction)}">${delta.current}${valueSuffix} <span style="font-size:14px;font-weight:500;">${deltaArrow(delta.direction)}</span></div>
|
|
@@ -10135,8 +10139,7 @@ function renderTrafficDeltaTile(label, delta, countLabel) {
|
|
|
10135
10139
|
if (!delta) {
|
|
10136
10140
|
return `<div class="metric"><div class="label">${escapeHtml(label)}</div><div class="value">\u2014</div><div class="delta">Not enough trend data</div></div>`;
|
|
10137
10141
|
}
|
|
10138
|
-
const
|
|
10139
|
-
const deltaText = `${deltaSign}${formatNumber(delta.deltaAbs)} ${countLabel} vs prior ${WHATS_CHANGED_PERIOD_DAYS} days`;
|
|
10142
|
+
const deltaText = formatWindowCountDelta(delta, countLabel, `vs prior ${WHATS_CHANGED_PERIOD_DAYS} days`);
|
|
10140
10143
|
return `<div class="metric">
|
|
10141
10144
|
<div class="label">${escapeHtml(label)}</div>
|
|
10142
10145
|
<div class="value ${deltaToneClass(delta.direction)}">${formatNumber(delta.current)} <span style="font-size:14px;font-weight:500;">${deltaArrow(delta.direction)}</span></div>
|
|
@@ -12437,6 +12440,7 @@ function periodOverPeriodDelta(trend) {
|
|
|
12437
12440
|
current,
|
|
12438
12441
|
prior: priorTotal,
|
|
12439
12442
|
deltaAbs,
|
|
12443
|
+
deltaPct: deltaPercent(current, priorTotal),
|
|
12440
12444
|
direction: rateDirection(deltaAbs, 0)
|
|
12441
12445
|
};
|
|
12442
12446
|
}
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
loadConfig,
|
|
10
10
|
loadConfigRaw,
|
|
11
11
|
saveConfigPatch
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-IFB43PRW.js";
|
|
13
13
|
import {
|
|
14
14
|
CC_CACHE_DIR,
|
|
15
15
|
DUCKDB_SPEC,
|
|
@@ -111,7 +111,7 @@ import {
|
|
|
111
111
|
siteAuditPages,
|
|
112
112
|
siteAuditSnapshots,
|
|
113
113
|
usageCounters
|
|
114
|
-
} from "./chunk-
|
|
114
|
+
} from "./chunk-CNTBEUVE.js";
|
|
115
115
|
import {
|
|
116
116
|
AGENT_MEMORY_VALUE_MAX_BYTES,
|
|
117
117
|
AGENT_PROVIDER_IDS,
|
|
@@ -171,7 +171,7 @@ import {
|
|
|
171
171
|
validationError,
|
|
172
172
|
winnabilityClassLabel,
|
|
173
173
|
withRetry
|
|
174
|
-
} from "./chunk-
|
|
174
|
+
} from "./chunk-CEYDMSQO.js";
|
|
175
175
|
|
|
176
176
|
// src/telemetry.ts
|
|
177
177
|
import crypto from "crypto";
|
|
@@ -6396,7 +6396,7 @@ function readStoredGroundingSources(rawResponse) {
|
|
|
6396
6396
|
return result;
|
|
6397
6397
|
}
|
|
6398
6398
|
async function backfillInsightsCommand(project, opts) {
|
|
6399
|
-
const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-
|
|
6399
|
+
const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-SJKUVFZ6.js");
|
|
6400
6400
|
const config = loadConfig();
|
|
6401
6401
|
const db = createClient(config.database);
|
|
6402
6402
|
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-ROLTZPV7.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-IFB43PRW.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-CNTBEUVE.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-CEYDMSQO.js";
|
|
81
81
|
|
|
82
82
|
// src/cli.ts
|
|
83
83
|
import { pathToFileURL } from "url";
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createServer
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-ROLTZPV7.js";
|
|
4
4
|
import {
|
|
5
5
|
loadConfig
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-IFB43PRW.js";
|
|
7
|
+
import "./chunk-CNTBEUVE.js";
|
|
8
|
+
import "./chunk-CEYDMSQO.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-IFB43PRW.js";
|
|
7
7
|
import {
|
|
8
8
|
isReadOnlyKey
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-CEYDMSQO.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.96.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,27 +62,27 @@
|
|
|
62
62
|
"@types/node-cron": "^3.0.11",
|
|
63
63
|
"tsup": "^8.5.1",
|
|
64
64
|
"tsx": "^4.19.0",
|
|
65
|
+
"@ainyc/canonry-api-client": "0.0.0",
|
|
65
66
|
"@ainyc/canonry-api-routes": "0.0.0",
|
|
66
|
-
"@ainyc/canonry-
|
|
67
|
-
"@ainyc/canonry-integration-openai-ads": "0.0.0",
|
|
67
|
+
"@ainyc/canonry-config": "0.0.0",
|
|
68
68
|
"@ainyc/canonry-integration-bing": "0.0.0",
|
|
69
|
-
"@ainyc/canonry-api-client": "0.0.0",
|
|
70
69
|
"@ainyc/canonry-db": "0.0.0",
|
|
71
70
|
"@ainyc/canonry-integration-cloud-run": "0.0.0",
|
|
71
|
+
"@ainyc/canonry-contracts": "0.0.0",
|
|
72
72
|
"@ainyc/canonry-integration-commoncrawl": "0.0.0",
|
|
73
|
-
"@ainyc/canonry-config": "0.0.0",
|
|
74
73
|
"@ainyc/canonry-integration-google": "0.0.0",
|
|
74
|
+
"@ainyc/canonry-integration-openai-ads": "0.0.0",
|
|
75
75
|
"@ainyc/canonry-integration-google-business-profile": "0.0.0",
|
|
76
|
+
"@ainyc/canonry-integration-traffic": "0.0.0",
|
|
76
77
|
"@ainyc/canonry-integration-google-places": "0.0.0",
|
|
77
78
|
"@ainyc/canonry-integration-wordpress": "0.0.0",
|
|
78
|
-
"@ainyc/canonry-integration-traffic": "0.0.0",
|
|
79
79
|
"@ainyc/canonry-intelligence": "0.0.0",
|
|
80
|
-
"@ainyc/canonry-provider-cdp": "0.0.0",
|
|
81
|
-
"@ainyc/canonry-provider-claude": "0.0.0",
|
|
82
80
|
"@ainyc/canonry-provider-gemini": "0.0.0",
|
|
83
|
-
"@ainyc/canonry-provider-local": "0.0.0",
|
|
84
81
|
"@ainyc/canonry-provider-openai": "0.0.0",
|
|
85
|
-
"@ainyc/canonry-provider-
|
|
82
|
+
"@ainyc/canonry-provider-claude": "0.0.0",
|
|
83
|
+
"@ainyc/canonry-provider-local": "0.0.0",
|
|
84
|
+
"@ainyc/canonry-provider-perplexity": "0.0.0",
|
|
85
|
+
"@ainyc/canonry-provider-cdp": "0.0.0"
|
|
86
86
|
},
|
|
87
87
|
"scripts": {
|
|
88
88
|
"build": "tsx scripts/copy-agent-assets.ts && tsup && tsx build-web.ts",
|