@canonry/canonry 4.165.0 → 4.165.2
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/README.md +11 -1
- package/assets/agent-workspace/skills/canonry/references/server-side-traffic.md +75 -3
- package/assets/assets/{AuditHistoryPanel-IYMElyK5.js → AuditHistoryPanel-DYBAiNCu.js} +1 -1
- package/assets/assets/{BacklinksPage-BMqIPRvZ.js → BacklinksPage-p19FCIyh.js} +1 -1
- package/assets/assets/{HistoryPage-iuETLmwO.js → HistoryPage-CRSuA-J0.js} +1 -1
- package/assets/assets/{MeasurementPropertyPage-BzNAaB8X.js → MeasurementPropertyPage-Bgr9VeUk.js} +1 -1
- package/assets/assets/{ProjectPage-DIzi4Ggo.js → ProjectPage-D6-9qYKU.js} +8 -8
- package/assets/assets/{RunRow-BkkYxEjl.js → RunRow-_RMMaLPt.js} +1 -1
- package/assets/assets/{RunsPage-DGTrqrTA.js → RunsPage-CaDPSEfE.js} +1 -1
- package/assets/assets/{SettingsPage-Cwb_Ft9u.js → SettingsPage-Dcp71zcu.js} +1 -1
- package/assets/assets/{SiteHealthSection-k4I71wfJ.js → SiteHealthSection-Byp_Fu5K.js} +3 -3
- package/assets/assets/{TrafficPage-C8nyb8l1.js → TrafficPage-BXkXNKYB.js} +1 -1
- package/assets/assets/{TrafficSourceDetailPage-ry7Da0pV.js → TrafficSourceDetailPage-CReS8q0H.js} +1 -1
- package/assets/assets/{extract-error-message-BYyBW07F.js → extract-error-message-CHW-A3AQ.js} +1 -1
- package/assets/assets/{index-rqOXhYwp.js → index-CcS2bDjR.js} +2 -2
- package/assets/assets/{react-sigma_core.esm.min-BtG8TWTe.js → react-sigma_core.esm.min-Cm0RA3Iv.js} +1 -1
- package/assets/index.html +1 -1
- package/dist/{chunk-QKLNTSQ2.js → chunk-BJLIMWL2.js} +12 -11
- package/dist/{chunk-QDOZEMDK.js → chunk-J56XZGG6.js} +1 -1
- package/dist/{chunk-BU6C2DKF.js → chunk-P2CQ57UV.js} +8 -2
- package/dist/{chunk-L5SMSDZB.js → chunk-UVDX2Y4N.js} +4 -4
- package/dist/cli.js +4 -4
- package/dist/index.js +4 -4
- package/dist/{intelligence-service-RDGUEEZQ.js → intelligence-service-QGBYYNWV.js} +2 -2
- package/dist/mcp.js +2 -2
- package/package.json +7 -7
package/assets/assets/{react-sigma_core.esm.min-BtG8TWTe.js → react-sigma_core.esm.min-Cm0RA3Iv.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{g as Bt,t as S,r as C}from"./vendor-tanstack-Dock0eH1.js";import{e as Ht,G as Wt}from"./SiteHealthSection-
|
|
1
|
+
import{g as Bt,t as S,r as C}from"./vendor-tanstack-Dock0eH1.js";import{e as Ht,G as Wt}from"./SiteHealthSection-Byp_Fu5K.js";import"./index-CcS2bDjR.js";import"./vendor-radix-4UOaVWza.js";import"./vendor-recharts-D8rt5lKn.js";import"./vendor-lucide-nYKv-BB7.js";import"./vendor-markdown-Bn7fRwrx.js";import"./vendor-yaml-GWJz5H2G.js";import"./ChartPrimitives-BoYe2M-i.js";function Vt(r,n){if(typeof r!="object"||!r)return r;var i=r[Symbol.toPrimitive];if(i!==void 0){var e=i.call(r,n);if(typeof e!="object")return e;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(r)}function ae(r){var n=Vt(r,"string");return typeof n=="symbol"?n:n+""}function A(r,n){if(!(r instanceof n))throw new TypeError("Cannot call a class as a function")}function He(r,n){for(var i=0;i<n.length;i++){var e=n[i];e.enumerable=e.enumerable||!1,e.configurable=!0,"value"in e&&(e.writable=!0),Object.defineProperty(r,ae(e.key),e)}}function L(r,n,i){return n&&He(r.prototype,n),i&&He(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r}function Q(r){return Q=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},Q(r)}function yt(){try{var r=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(yt=function(){return!!r})()}function jt(r){if(r===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return r}function Zt(r,n){if(n&&(typeof n=="object"||typeof n=="function"))return n;if(n!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return jt(r)}function I(r,n,i){return n=Q(n),Zt(r,yt()?Reflect.construct(n,i||[],Q(r).constructor):n.apply(r,i))}function xe(r,n){return xe=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(i,e){return i.__proto__=e,i},xe(r,n)}function G(r,n){if(typeof n!="function"&&n!==null)throw new TypeError("Super expression must either be null or a function");r.prototype=Object.create(n&&n.prototype,{constructor:{value:r,writable:!0,configurable:!0}}),Object.defineProperty(r,"prototype",{writable:!1}),n&&xe(r,n)}function qt(r){if(Array.isArray(r))return r}function Yt(r,n){var i=r==null?null:typeof Symbol<"u"&&r[Symbol.iterator]||r["@@iterator"];if(i!=null){var e,t,a,o,s=[],l=!0,h=!1;try{if(a=(i=i.call(r)).next,n===0){if(Object(i)!==i)return;l=!1}else for(;!(l=(e=a.call(i)).done)&&(s.push(e.value),s.length!==n);l=!0);}catch(u){h=!0,t=u}finally{try{if(!l&&i.return!=null&&(o=i.return(),Object(o)!==o))return}finally{if(h)throw t}}return s}}function Se(r,n){(n==null||n>r.length)&&(n=r.length);for(var i=0,e=Array(n);i<n;i++)e[i]=r[i];return e}function Tt(r,n){if(r){if(typeof r=="string")return Se(r,n);var i={}.toString.call(r).slice(8,-1);return i==="Object"&&r.constructor&&(i=r.constructor.name),i==="Map"||i==="Set"?Array.from(r):i==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?Se(r,n):void 0}}function Xt(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
|
|
2
2
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function ee(r,n){return qt(r)||Yt(r,n)||Tt(r,n)||Xt()}var pe={black:"#000000",silver:"#C0C0C0",gray:"#808080",grey:"#808080",white:"#FFFFFF",maroon:"#800000",red:"#FF0000",purple:"#800080",fuchsia:"#FF00FF",green:"#008000",lime:"#00FF00",olive:"#808000",yellow:"#FFFF00",navy:"#000080",blue:"#0000FF",teal:"#008080",aqua:"#00FFFF",darkblue:"#00008B",mediumblue:"#0000CD",darkgreen:"#006400",darkcyan:"#008B8B",deepskyblue:"#00BFFF",darkturquoise:"#00CED1",mediumspringgreen:"#00FA9A",springgreen:"#00FF7F",cyan:"#00FFFF",midnightblue:"#191970",dodgerblue:"#1E90FF",lightseagreen:"#20B2AA",forestgreen:"#228B22",seagreen:"#2E8B57",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",limegreen:"#32CD32",mediumseagreen:"#3CB371",turquoise:"#40E0D0",royalblue:"#4169E1",steelblue:"#4682B4",darkslateblue:"#483D8B",mediumturquoise:"#48D1CC",indigo:"#4B0082",darkolivegreen:"#556B2F",cadetblue:"#5F9EA0",cornflowerblue:"#6495ED",rebeccapurple:"#663399",mediumaquamarine:"#66CDAA",dimgray:"#696969",dimgrey:"#696969",slateblue:"#6A5ACD",olivedrab:"#6B8E23",slategray:"#708090",slategrey:"#708090",lightslategray:"#778899",lightslategrey:"#778899",mediumslateblue:"#7B68EE",lawngreen:"#7CFC00",chartreuse:"#7FFF00",aquamarine:"#7FFFD4",skyblue:"#87CEEB",lightskyblue:"#87CEFA",blueviolet:"#8A2BE2",darkred:"#8B0000",darkmagenta:"#8B008B",saddlebrown:"#8B4513",darkseagreen:"#8FBC8F",lightgreen:"#90EE90",mediumpurple:"#9370DB",darkviolet:"#9400D3",palegreen:"#98FB98",darkorchid:"#9932CC",yellowgreen:"#9ACD32",sienna:"#A0522D",brown:"#A52A2A",darkgray:"#A9A9A9",darkgrey:"#A9A9A9",lightblue:"#ADD8E6",greenyellow:"#ADFF2F",paleturquoise:"#AFEEEE",lightsteelblue:"#B0C4DE",powderblue:"#B0E0E6",firebrick:"#B22222",darkgoldenrod:"#B8860B",mediumorchid:"#BA55D3",rosybrown:"#BC8F8F",darkkhaki:"#BDB76B",mediumvioletred:"#C71585",indianred:"#CD5C5C",peru:"#CD853F",chocolate:"#D2691E",tan:"#D2B48C",lightgray:"#D3D3D3",lightgrey:"#D3D3D3",thistle:"#D8BFD8",orchid:"#DA70D6",goldenrod:"#DAA520",palevioletred:"#DB7093",crimson:"#DC143C",gainsboro:"#DCDCDC",plum:"#DDA0DD",burlywood:"#DEB887",lightcyan:"#E0FFFF",lavender:"#E6E6FA",darksalmon:"#E9967A",violet:"#EE82EE",palegoldenrod:"#EEE8AA",lightcoral:"#F08080",khaki:"#F0E68C",aliceblue:"#F0F8FF",honeydew:"#F0FFF0",azure:"#F0FFFF",sandybrown:"#F4A460",wheat:"#F5DEB3",beige:"#F5F5DC",whitesmoke:"#F5F5F5",mintcream:"#F5FFFA",ghostwhite:"#F8F8FF",salmon:"#FA8072",antiquewhite:"#FAEBD7",linen:"#FAF0E6",lightgoldenrodyellow:"#FAFAD2",oldlace:"#FDF5E6",magenta:"#FF00FF",deeppink:"#FF1493",orangered:"#FF4500",tomato:"#FF6347",hotpink:"#FF69B4",coral:"#FF7F50",darkorange:"#FF8C00",lightsalmon:"#FFA07A",orange:"#FFA500",lightpink:"#FFB6C1",pink:"#FFC0CB",gold:"#FFD700",peachpuff:"#FFDAB9",navajowhite:"#FFDEAD",moccasin:"#FFE4B5",bisque:"#FFE4C4",mistyrose:"#FFE4E1",blanchedalmond:"#FFEBCD",papayawhip:"#FFEFD5",lavenderblush:"#FFF0F5",seashell:"#FFF5EE",cornsilk:"#FFF8DC",lemonchiffon:"#FFFACD",floralwhite:"#FFFAF0",snow:"#FFFAFA",lightyellow:"#FFFFE0",ivory:"#FFFFF0"},Ct=new Int8Array(4),be=new Int32Array(Ct.buffer,0,1),$t=new Float32Array(Ct.buffer,0,1),Kt=/^\s*rgba?\s*\(/,Jt=/^\s*rgba?\s*\(\s*([0-9]*)\s*,\s*([0-9]*)\s*,\s*([0-9]*)(?:\s*,\s*(.*)?)?\)\s*$/;function Qt(r){var n=0,i=0,e=0,t=1;if(r[0]==="#")r.length===4?(n=parseInt(r.charAt(1)+r.charAt(1),16),i=parseInt(r.charAt(2)+r.charAt(2),16),e=parseInt(r.charAt(3)+r.charAt(3),16)):(n=parseInt(r.charAt(1)+r.charAt(2),16),i=parseInt(r.charAt(3)+r.charAt(4),16),e=parseInt(r.charAt(5)+r.charAt(6),16)),r.length===9&&(t=parseInt(r.charAt(7)+r.charAt(8),16)/255);else if(Kt.test(r)){var a=r.match(Jt);a&&(n=+a[1],i=+a[2],e=+a[3],a[4]&&(t=+a[4]))}return{r:n,g:i,b:e,a:t}}var J={};for(var le in pe)J[le]=oe(pe[le]),J[pe[le]]=J[le];function Rt(r,n,i,e,t){return be[0]=e<<24|i<<16|n<<8|r,be[0]=be[0]&4278190079,$t[0]}function oe(r){if(r=r.toLowerCase(),typeof J[r]<"u")return J[r];var n=Qt(r),i=n.r,e=n.g,t=n.b,a=n.a;a=a*255|0;var o=Rt(i,e,t,a);return J[r]=o,o}var Ee={};function _t(r){if(typeof Ee[r]<"u")return Ee[r];var n=(r&16711680)>>>16,i=(r&65280)>>>8,e=r&255,t=255,a=Rt(n,i,e,t);return Ee[r]=a,a}function We(r,n,i,e){return i+(n<<8)+(r<<16)}function Ve(r,n,i,e,t,a){var o=Math.floor(i/a*t),s=Math.floor(r.drawingBufferHeight/a-e/a*t),l=new Uint8Array(4);r.bindFramebuffer(r.FRAMEBUFFER,n),r.readPixels(o,s,1,1,r.RGBA,r.UNSIGNED_BYTE,l);var h=ee(l,4),u=h[0],d=h[1],f=h[2],g=h[3];return[u,d,f,g]}function c(r,n,i){return(n=ae(n))in r?Object.defineProperty(r,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[n]=i,r}function je(r,n){var i=Object.keys(r);if(Object.getOwnPropertySymbols){var e=Object.getOwnPropertySymbols(r);n&&(e=e.filter(function(t){return Object.getOwnPropertyDescriptor(r,t).enumerable})),i.push.apply(i,e)}return i}function b(r){for(var n=1;n<arguments.length;n++){var i=arguments[n]!=null?arguments[n]:{};n%2?je(Object(i),!0).forEach(function(e){c(r,e,i[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(i)):je(Object(i)).forEach(function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(i,e))})}return r}function ei(r,n){for(;!{}.hasOwnProperty.call(r,n)&&(r=Q(r))!==null;);return r}function Ae(){return Ae=typeof Reflect<"u"&&Reflect.get?Reflect.get.bind():function(r,n,i){var e=ei(r,n);if(e){var t=Object.getOwnPropertyDescriptor(e,n);return t.get?t.get.call(arguments.length<3?r:i):t.value}},Ae.apply(null,arguments)}function wt(r,n,i,e){var t=Ae(Q(r.prototype),n,i);return typeof t=="function"?function(a){return t.apply(i,a)}:t}function ti(r){return r.normalized?1:r.size}function ye(r){var n=0;return r.forEach(function(i){return n+=ti(i)}),n}function xt(r,n,i){var e=r==="VERTEX"?n.VERTEX_SHADER:n.FRAGMENT_SHADER,t=n.createShader(e);if(t===null)throw new Error("loadShader: error while creating the shader");n.shaderSource(t,i),n.compileShader(t);var a=n.getShaderParameter(t,n.COMPILE_STATUS);if(!a){var o=n.getShaderInfoLog(t);throw n.deleteShader(t),new Error(`loadShader: error while compiling the shader:
|
|
3
3
|
`.concat(o,`
|
|
4
4
|
`).concat(i))}return t}function ii(r,n){return xt("VERTEX",r,n)}function ri(r,n){return xt("FRAGMENT",r,n)}function ni(r,n){var i=r.createProgram();if(i===null)throw new Error("loadProgram: error while creating the program.");var e,t;for(e=0,t=n.length;e<t;e++)r.attachShader(i,n[e]);r.linkProgram(i);var a=r.getProgramParameter(i,r.LINK_STATUS);if(!a){var o=r.getProgramInfoLog(i);throw r.deleteProgram(i),new Error("loadProgram: error while linking the program: ".concat(o))}return i}function Ze(r){var n=r.gl,i=r.buffer,e=r.program,t=r.vertexShader,a=r.fragmentShader;n.deleteShader(t),n.deleteShader(a),n.deleteProgram(e),n.deleteBuffer(i)}var qe=`#define PICKING_MODE
|
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-CcS2bDjR.js"></script>
|
|
16
16
|
<link rel="modulepreload" crossorigin href="./assets/vendor-tanstack-Dock0eH1.js">
|
|
17
17
|
<link rel="modulepreload" crossorigin href="./assets/vendor-radix-4UOaVWza.js">
|
|
18
18
|
<link rel="modulepreload" crossorigin href="./assets/vendor-recharts-D8rt5lKn.js">
|
|
@@ -470,6 +470,7 @@ import {
|
|
|
470
470
|
recommendationExplainRequestSchema,
|
|
471
471
|
recommendationExplanationDtoSchema,
|
|
472
472
|
registrableDomain,
|
|
473
|
+
relativeChangeRatio,
|
|
473
474
|
reportActionCategoryLabel,
|
|
474
475
|
reportActionTone,
|
|
475
476
|
reportComparisonWindowDays,
|
|
@@ -582,7 +583,7 @@ import {
|
|
|
582
583
|
wordpressSchemaDeployResultDtoSchema,
|
|
583
584
|
wordpressSchemaStatusResultDtoSchema,
|
|
584
585
|
wordpressStatusDtoSchema
|
|
585
|
-
} from "./chunk-
|
|
586
|
+
} from "./chunk-P2CQ57UV.js";
|
|
586
587
|
|
|
587
588
|
// src/intelligence-service.ts
|
|
588
589
|
import { eq as eq59, desc as desc26, asc as asc11, and as and47, ne as ne7, or as or13, inArray as inArray21, gte as gte14, lte as lte12 } from "drizzle-orm";
|
|
@@ -8635,7 +8636,9 @@ function pickWorstKeywordDrop(loc) {
|
|
|
8635
8636
|
let worst = null;
|
|
8636
8637
|
for (const point of loc.keywordPoints) {
|
|
8637
8638
|
if (point.recent == null || point.prior == null || point.prior < GBP_KEYWORD_MIN_BASELINE) continue;
|
|
8638
|
-
const
|
|
8639
|
+
const changeRatio = relativeChangeRatio(point.recent, point.prior);
|
|
8640
|
+
if (changeRatio === null) continue;
|
|
8641
|
+
const dropPct = Math.round(-changeRatio * 100);
|
|
8639
8642
|
if (dropPct < GBP_KEYWORD_DROP_PCT) continue;
|
|
8640
8643
|
if (!worst || dropPct > worst.dropPct) {
|
|
8641
8644
|
worst = { keyword: point.keyword, dropPct, recent: point.recent, prior: point.prior };
|
|
@@ -25913,7 +25916,7 @@ function summarizeServer(crawlers, fetches, referrals) {
|
|
|
25913
25916
|
}
|
|
25914
25917
|
function comparisonDetail(latest, prior) {
|
|
25915
25918
|
if (prior === 0) return `${latest} in the latest cohort versus 0 in the prior cohort`;
|
|
25916
|
-
const change =
|
|
25919
|
+
const change = deltaPercent(latest, prior) ?? 0;
|
|
25917
25920
|
return `${latest} in the latest cohort versus ${prior} prior (${change >= 0 ? "+" : ""}${change}%)`;
|
|
25918
25921
|
}
|
|
25919
25922
|
function aggregateCoverage(row) {
|
|
@@ -35612,7 +35615,7 @@ function computeWindowDelta(rows, referenceDate) {
|
|
|
35612
35615
|
const prior = prior7d[metric2] ?? 0;
|
|
35613
35616
|
recent7d[metric2] = recent;
|
|
35614
35617
|
prior7d[metric2] = prior;
|
|
35615
|
-
deltaPct[metric2] =
|
|
35618
|
+
deltaPct[metric2] = deltaPercent(recent, prior);
|
|
35616
35619
|
}
|
|
35617
35620
|
return { recent7d, prior7d, deltaPct };
|
|
35618
35621
|
}
|
|
@@ -45941,7 +45944,6 @@ async function ga4Routes(app, opts) {
|
|
|
45941
45944
|
const prev7d = sumSocial(daysAgo(14), daysAgo(7));
|
|
45942
45945
|
const current30d = sumSocial(daysAgo(30), fmt(today));
|
|
45943
45946
|
const prev30d = sumSocial(daysAgo(60), daysAgo(30));
|
|
45944
|
-
const pct = (cur, prev) => prev === 0 ? null : Math.round((cur - prev) / prev * 100);
|
|
45945
45947
|
const sourceCurrent = app.db.select({
|
|
45946
45948
|
source: gaSocialReferrals.source,
|
|
45947
45949
|
sessions: sql16`SUM(${gaSocialReferrals.sessions})`
|
|
@@ -45970,17 +45972,17 @@ async function ga4Routes(app, opts) {
|
|
|
45970
45972
|
source: row.source,
|
|
45971
45973
|
sessions7d: row.sessions,
|
|
45972
45974
|
sessionsPrev7d: prev,
|
|
45973
|
-
changePct:
|
|
45975
|
+
changePct: deltaPercent(row.sessions, prev) ?? (row.sessions > 0 ? 100 : 0)
|
|
45974
45976
|
};
|
|
45975
45977
|
}
|
|
45976
45978
|
}
|
|
45977
45979
|
return {
|
|
45978
45980
|
socialSessions7d: current7d?.sessions ?? 0,
|
|
45979
45981
|
socialSessionsPrev7d: prev7d?.sessions ?? 0,
|
|
45980
|
-
trend7dPct:
|
|
45982
|
+
trend7dPct: deltaPercent(current7d?.sessions ?? 0, prev7d?.sessions ?? 0),
|
|
45981
45983
|
socialSessions30d: current30d?.sessions ?? 0,
|
|
45982
45984
|
socialSessionsPrev30d: prev30d?.sessions ?? 0,
|
|
45983
|
-
trend30dPct:
|
|
45985
|
+
trend30dPct: deltaPercent(current30d?.sessions ?? 0, prev30d?.sessions ?? 0),
|
|
45984
45986
|
biggestMover
|
|
45985
45987
|
};
|
|
45986
45988
|
});
|
|
@@ -45994,7 +45996,6 @@ async function ga4Routes(app, opts) {
|
|
|
45994
45996
|
d.setDate(d.getDate() - n);
|
|
45995
45997
|
return fmt(d);
|
|
45996
45998
|
};
|
|
45997
|
-
const pct = (cur, prev) => prev === 0 ? null : Math.round((cur - prev) / prev * 100);
|
|
45998
45999
|
const sumTotal = (from, to) => app.db.select({ sessions: sql16`COALESCE(SUM(${gaTrafficSnapshots.sessions}), 0)` }).from(gaTrafficSnapshots).where(and35(eq44(gaTrafficSnapshots.projectId, project.id), sql16`${gaTrafficSnapshots.date} >= ${from}`, sql16`${gaTrafficSnapshots.date} < ${to}`)).get();
|
|
45999
46000
|
const sumOrganic = (from, to) => app.db.select({ sessions: sql16`COALESCE(SUM(${gaTrafficSnapshots.organicSessions}), 0)` }).from(gaTrafficSnapshots).where(and35(eq44(gaTrafficSnapshots.projectId, project.id), sql16`${gaTrafficSnapshots.date} >= ${from}`, sql16`${gaTrafficSnapshots.date} < ${to}`)).get();
|
|
46000
46001
|
const sumDirect = (from, to) => app.db.select({ sessions: sql16`COALESCE(SUM(${gaTrafficSnapshots.directSessions}), 0)` }).from(gaTrafficSnapshots).where(and35(eq44(gaTrafficSnapshots.projectId, project.id), sql16`${gaTrafficSnapshots.date} >= ${from}`, sql16`${gaTrafficSnapshots.date} < ${to}`)).get();
|
|
@@ -46011,7 +46012,7 @@ async function ga4Routes(app, opts) {
|
|
|
46011
46012
|
const p7 = sum(daysAgo(14), daysAgo(7))?.sessions ?? 0;
|
|
46012
46013
|
const c30 = sum(daysAgo(30), todayStr)?.sessions ?? 0;
|
|
46013
46014
|
const p30 = sum(daysAgo(60), daysAgo(30))?.sessions ?? 0;
|
|
46014
|
-
return { sessions7d: c7, sessionsPrev7d: p7, trend7dPct:
|
|
46015
|
+
return { sessions7d: c7, sessionsPrev7d: p7, trend7dPct: deltaPercent(c7, p7), sessions30d: c30, sessionsPrev30d: p30, trend30dPct: deltaPercent(c30, p30) };
|
|
46015
46016
|
};
|
|
46016
46017
|
const aiSourceCurrent = app.db.select({ source: gaAiReferrals.source, sessions: sql16`COALESCE(SUM(${gaAiReferrals.sessions}), 0)` }).from(gaAiReferrals).where(and35(
|
|
46017
46018
|
eq44(gaAiReferrals.projectId, project.id),
|
|
@@ -46034,7 +46035,7 @@ async function ga4Routes(app, opts) {
|
|
|
46034
46035
|
const delta = Math.abs(row.sessions - p);
|
|
46035
46036
|
if (delta > maxDelta) {
|
|
46036
46037
|
maxDelta = delta;
|
|
46037
|
-
mover = { source: row.source, sessions7d: row.sessions, sessionsPrev7d: p, changePct:
|
|
46038
|
+
mover = { source: row.source, sessions7d: row.sessions, sessionsPrev7d: p, changePct: deltaPercent(row.sessions, p) ?? (row.sessions > 0 ? 100 : 0) };
|
|
46038
46039
|
}
|
|
46039
46040
|
}
|
|
46040
46041
|
return mover;
|
|
@@ -7126,9 +7126,14 @@ function parseInclusiveEndMs(iso) {
|
|
|
7126
7126
|
if (Number.isNaN(ms)) return null;
|
|
7127
7127
|
return DATE_ONLY_PATTERN.test(iso) ? ms + 864e5 - 1 : ms;
|
|
7128
7128
|
}
|
|
7129
|
+
function relativeChangeRatio(current, baseline) {
|
|
7130
|
+
if (!Number.isFinite(current) || !Number.isFinite(baseline) || baseline <= 0) return null;
|
|
7131
|
+
const ratio = (current - baseline) / baseline;
|
|
7132
|
+
return Number.isFinite(ratio) ? ratio : null;
|
|
7133
|
+
}
|
|
7129
7134
|
function deltaPercent(current, prior) {
|
|
7130
|
-
|
|
7131
|
-
return Math.round(
|
|
7135
|
+
const ratio = relativeChangeRatio(current, prior);
|
|
7136
|
+
return ratio === null ? null : Math.round(ratio * 100);
|
|
7132
7137
|
}
|
|
7133
7138
|
function deltaTone(deltaPct) {
|
|
7134
7139
|
if (deltaPct === null || deltaPct === 0) return "neutral";
|
|
@@ -15184,6 +15189,7 @@ export {
|
|
|
15184
15189
|
startOfDayHourInTimeZone,
|
|
15185
15190
|
formatDateRange,
|
|
15186
15191
|
parseInclusiveEndMs,
|
|
15192
|
+
relativeChangeRatio,
|
|
15187
15193
|
deltaPercent,
|
|
15188
15194
|
deltaTone,
|
|
15189
15195
|
formatDeltaCopy,
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
loadConfig,
|
|
11
11
|
loadConfigRaw,
|
|
12
12
|
saveConfigPatch
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-J56XZGG6.js";
|
|
14
14
|
import {
|
|
15
15
|
CC_CACHE_DIR,
|
|
16
16
|
DUCKDB_SPEC,
|
|
@@ -139,7 +139,7 @@ import {
|
|
|
139
139
|
siteCrawlSnapshots,
|
|
140
140
|
toAlertView,
|
|
141
141
|
usageCounters
|
|
142
|
-
} from "./chunk-
|
|
142
|
+
} from "./chunk-BJLIMWL2.js";
|
|
143
143
|
import {
|
|
144
144
|
AGENT_MEMORY_VALUE_MAX_BYTES,
|
|
145
145
|
AGENT_PROVIDER_IDS,
|
|
@@ -253,7 +253,7 @@ import {
|
|
|
253
253
|
validationError,
|
|
254
254
|
winnabilityClassLabel,
|
|
255
255
|
withRetry
|
|
256
|
-
} from "./chunk-
|
|
256
|
+
} from "./chunk-P2CQ57UV.js";
|
|
257
257
|
|
|
258
258
|
// src/telemetry.ts
|
|
259
259
|
import crypto from "crypto";
|
|
@@ -9084,7 +9084,7 @@ function readStoredGroundingSources(rawResponse) {
|
|
|
9084
9084
|
return result;
|
|
9085
9085
|
}
|
|
9086
9086
|
async function backfillInsightsCommand(project, opts) {
|
|
9087
|
-
const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-
|
|
9087
|
+
const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-QGBYYNWV.js");
|
|
9088
9088
|
const config = loadConfig();
|
|
9089
9089
|
const db = createClient(config.database);
|
|
9090
9090
|
migrate(db);
|
package/dist/cli.js
CHANGED
|
@@ -31,7 +31,7 @@ import {
|
|
|
31
31
|
showFirstRunNotice,
|
|
32
32
|
trackCliCommandFinished,
|
|
33
33
|
trackEvent
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-UVDX2Y4N.js";
|
|
35
35
|
import {
|
|
36
36
|
CliError,
|
|
37
37
|
EXIT_SYSTEM_ERROR,
|
|
@@ -51,7 +51,7 @@ import {
|
|
|
51
51
|
saveConfigPatch,
|
|
52
52
|
systemError,
|
|
53
53
|
usageError
|
|
54
|
-
} from "./chunk-
|
|
54
|
+
} from "./chunk-J56XZGG6.js";
|
|
55
55
|
import {
|
|
56
56
|
CLOUDFLARE_WORKER_BINDINGS,
|
|
57
57
|
CLOUDFLARE_WORKER_GENERATED_MARKER,
|
|
@@ -65,7 +65,7 @@ import {
|
|
|
65
65
|
projects,
|
|
66
66
|
queries,
|
|
67
67
|
renderReportHtml
|
|
68
|
-
} from "./chunk-
|
|
68
|
+
} from "./chunk-BJLIMWL2.js";
|
|
69
69
|
import {
|
|
70
70
|
AdsDeliverySnapshotStatuses,
|
|
71
71
|
AdsHistoricalCampaignRollupStatuses,
|
|
@@ -129,7 +129,7 @@ import {
|
|
|
129
129
|
providerQuotaPolicySchema,
|
|
130
130
|
resolveProviderInput,
|
|
131
131
|
winnabilityClassSchema
|
|
132
|
-
} from "./chunk-
|
|
132
|
+
} from "./chunk-P2CQ57UV.js";
|
|
133
133
|
|
|
134
134
|
// src/cli.ts
|
|
135
135
|
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-UVDX2Y4N.js";
|
|
4
4
|
import {
|
|
5
5
|
loadConfig
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-J56XZGG6.js";
|
|
7
|
+
import "./chunk-BJLIMWL2.js";
|
|
8
|
+
import "./chunk-P2CQ57UV.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-J56XZGG6.js";
|
|
7
7
|
import {
|
|
8
8
|
isReadOnlyKey
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-P2CQ57UV.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": "@canonry/canonry",
|
|
3
|
-
"version": "4.165.
|
|
3
|
+
"version": "4.165.2",
|
|
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",
|
|
@@ -70,22 +70,22 @@
|
|
|
70
70
|
"@types/node-cron": "^3.0.11",
|
|
71
71
|
"tsup": "^8.5.1",
|
|
72
72
|
"tsx": "^4.19.0",
|
|
73
|
-
"@ainyc/canonry-api-routes": "0.0.0",
|
|
74
73
|
"@ainyc/canonry-api-client": "0.0.0",
|
|
75
|
-
"@ainyc/canonry-config": "0.0.0",
|
|
76
74
|
"@ainyc/canonry-contracts": "0.0.0",
|
|
75
|
+
"@ainyc/canonry-api-routes": "0.0.0",
|
|
76
|
+
"@ainyc/canonry-config": "0.0.0",
|
|
77
77
|
"@ainyc/canonry-db": "0.0.0",
|
|
78
78
|
"@ainyc/canonry-integration-bing": "0.0.0",
|
|
79
|
-
"@ainyc/canonry-integration-cloudflare-
|
|
79
|
+
"@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
|
|
80
80
|
"@ainyc/canonry-integration-openai-ads": "0.0.0",
|
|
81
|
+
"@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
|
|
81
82
|
"@ainyc/canonry-integration-commoncrawl": "0.0.0",
|
|
82
83
|
"@ainyc/canonry-integration-cloud-run": "0.0.0",
|
|
83
|
-
"@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
|
|
84
84
|
"@ainyc/canonry-integration-google": "0.0.0",
|
|
85
|
-
"@ainyc/canonry-integration-google-places": "0.0.0",
|
|
86
85
|
"@ainyc/canonry-integration-google-business-profile": "0.0.0",
|
|
87
|
-
"@ainyc/canonry-integration-wordpress": "0.0.0",
|
|
88
86
|
"@ainyc/canonry-integration-traffic": "0.0.0",
|
|
87
|
+
"@ainyc/canonry-integration-google-places": "0.0.0",
|
|
88
|
+
"@ainyc/canonry-integration-wordpress": "0.0.0",
|
|
89
89
|
"@ainyc/canonry-intelligence": "0.0.0",
|
|
90
90
|
"@ainyc/canonry-provider-claude": "0.0.0",
|
|
91
91
|
"@ainyc/canonry-provider-local": "0.0.0",
|