@canonry/canonry 4.161.0 → 4.162.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.
Files changed (28) hide show
  1. package/assets/assets/{AuditHistoryPanel-C_1twF00.js → AuditHistoryPanel-BTtqk1mK.js} +1 -1
  2. package/assets/assets/{BacklinksPage-CfAuMCaN.js → BacklinksPage-wqRYkJFG.js} +1 -1
  3. package/assets/assets/ChartPrimitives-BoYe2M-i.js +1 -0
  4. package/assets/assets/{HistoryPage-DrRxOL3j.js → HistoryPage-Dj1FU5WV.js} +1 -1
  5. package/assets/assets/{MeasurementPropertyPage-BFtxx5Jw.js → MeasurementPropertyPage-CPCYzznG.js} +1 -1
  6. package/assets/assets/ProjectPage-7vg1El9D.js +9 -0
  7. package/assets/assets/{RunRow-DVZXibR2.js → RunRow-CTgtgq5x.js} +1 -1
  8. package/assets/assets/{RunsPage-CAUMy7By.js → RunsPage-qS7etC5f.js} +1 -1
  9. package/assets/assets/{SettingsPage-CcSOmQAl.js → SettingsPage-BlUWPiA7.js} +1 -1
  10. package/assets/assets/{SiteHealthSection-DYjEWd1I.js → SiteHealthSection-tUFchSy-.js} +3 -3
  11. package/assets/assets/{TrafficPage-BWM33jnJ.js → TrafficPage-BSWUsXM1.js} +1 -1
  12. package/assets/assets/{TrafficSourceDetailPage-DvEZ_JGY.js → TrafficSourceDetailPage-DOTtU4SK.js} +1 -1
  13. package/assets/assets/{extract-error-message-CnKOJkYB.js → extract-error-message-DOWCsWL0.js} +1 -1
  14. package/assets/assets/{index-CQGAqmDx.js → index-BYGqta_M.js} +20 -20
  15. package/assets/assets/{index-CACRaOmZ.css → index-CHluSPlN.css} +1 -1
  16. package/assets/assets/{react-sigma_core.esm.min-CHCAIMBW.js → react-sigma_core.esm.min-C4kgfZfm.js} +1 -1
  17. package/assets/index.html +2 -2
  18. package/dist/{chunk-HCGTKQCG.js → chunk-2TLRE2L3.js} +1 -1
  19. package/dist/{chunk-J27J2DF6.js → chunk-C6ZZH3XI.js} +36 -3
  20. package/dist/{chunk-W6OWEPZG.js → chunk-FZAAGXTK.js} +4 -4
  21. package/dist/{chunk-EXDO7EPL.js → chunk-NG7OR6GO.js} +3335 -3223
  22. package/dist/cli.js +29 -8
  23. package/dist/index.js +4 -4
  24. package/dist/{intelligence-service-HKDIVTZB.js → intelligence-service-ANRFEQWX.js} +2 -2
  25. package/dist/mcp.js +2 -2
  26. package/package.json +10 -10
  27. package/assets/assets/ChartPrimitives-DXVLCdBi.js +0 -1
  28. package/assets/assets/ProjectPage-Djvhx4HD.js +0 -12
@@ -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-DYjEWd1I.js";import"./index-CQGAqmDx.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-DXVLCdBi.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.
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-tUFchSy-.js";import"./index-BYGqta_M.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,14 +12,14 @@
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-CQGAqmDx.js"></script>
15
+ <script type="module" crossorigin src="./assets/index-BYGqta_M.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">
19
19
  <link rel="modulepreload" crossorigin href="./assets/vendor-lucide-nYKv-BB7.js">
20
20
  <link rel="modulepreload" crossorigin href="./assets/vendor-markdown-Bn7fRwrx.js">
21
21
  <link rel="modulepreload" crossorigin href="./assets/vendor-yaml-GWJz5H2G.js">
22
- <link rel="stylesheet" crossorigin href="./assets/index-CACRaOmZ.css">
22
+ <link rel="stylesheet" crossorigin href="./assets/index-CHluSPlN.css">
23
23
  </head>
24
24
  <body>
25
25
  <div id="root"></div>
@@ -81,7 +81,7 @@ import {
81
81
  trafficConnectWordpressRequestSchema,
82
82
  trafficEventKindSchema,
83
83
  trafficSeriesGranularitySchema
84
- } from "./chunk-EXDO7EPL.js";
84
+ } from "./chunk-NG7OR6GO.js";
85
85
 
86
86
  // src/config.ts
87
87
  import fs from "fs";
@@ -183,6 +183,7 @@ import {
183
183
  buildHarvestAnchorTerms,
184
184
  buildMeasurementExecutionIdentity,
185
185
  buildMeasurementRunManifestV1,
186
+ calendarDateRange,
186
187
  calendarMonthBounds,
187
188
  canonicalMeasurementExecutionIdentityJson,
188
189
  canonicalMeasurementPlanJson,
@@ -324,6 +325,7 @@ import {
324
325
  keywordDtoSchema,
325
326
  keywordGenerateRequestSchema,
326
327
  latestProjectRunDtoSchema,
328
+ linearTrend,
327
329
  locationContextSchema,
328
330
  loginRequestSchema,
329
331
  mapWithConcurrency,
@@ -578,7 +580,7 @@ import {
578
580
  wordpressSchemaDeployResultDtoSchema,
579
581
  wordpressSchemaStatusResultDtoSchema,
580
582
  wordpressStatusDtoSchema
581
- } from "./chunk-EXDO7EPL.js";
583
+ } from "./chunk-NG7OR6GO.js";
582
584
 
583
585
  // src/intelligence-service.ts
584
586
  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";
@@ -37627,6 +37629,7 @@ async function googleRoutes(app, opts) {
37627
37629
  clicks: sql13`COALESCE(SUM(${gscSearchData.clicks}), 0)`,
37628
37630
  impressions: sql13`COALESCE(SUM(${gscSearchData.impressions}), 0)`
37629
37631
  }).from(gscSearchData).where(and30(...conditions)).groupBy(gscSearchData.date).orderBy(gscSearchData.date).all();
37632
+ const propertyDates = new Set(dailyTotals.map((d) => d.date));
37630
37633
  const daily = mergeGscDailyTotalsWithFallback(
37631
37634
  dailyTotals,
37632
37635
  dimensionedRows.map((r) => ({
@@ -37639,15 +37642,36 @@ async function googleRoutes(app, opts) {
37639
37642
  date: d.date,
37640
37643
  clicks: d.clicks,
37641
37644
  impressions: d.impressions,
37642
- ctr: d.impressions > 0 ? d.clicks / d.impressions : 0
37645
+ ctr: d.impressions > 0 ? d.clicks / d.impressions : 0,
37646
+ position: propertyDates.has(d.date) ? d.position : null
37643
37647
  }));
37644
37648
  const totalClicks = daily.reduce((sum, d) => sum + d.clicks, 0);
37645
37649
  const totalImpressions = daily.reduce((sum, d) => sum + d.impressions, 0);
37650
+ let positionWeight = 0;
37651
+ let positionWeighted = 0;
37652
+ for (const d of daily) {
37653
+ if (d.position === null || d.impressions <= 0) continue;
37654
+ positionWeight += d.impressions;
37655
+ positionWeighted += d.position * d.impressions;
37656
+ }
37657
+ const byDate = new Map(daily.map((d) => [d.date, d]));
37658
+ const denseDates = daily.length === 0 ? [] : calendarDateRange(daily[0].date, daily[daily.length - 1].date);
37659
+ const densify = (pick) => denseDates.map((date) => {
37660
+ const row = byDate.get(date);
37661
+ return row ? pick(row) : null;
37662
+ });
37646
37663
  return {
37647
37664
  totals: {
37648
37665
  clicks: totalClicks,
37649
37666
  impressions: totalImpressions,
37650
37667
  ctr: totalImpressions > 0 ? totalClicks / totalImpressions : 0,
37668
+ position: positionWeight > 0 ? positionWeighted / positionWeight : null,
37669
+ /**
37670
+ * How many days actually carried a property-level position. Below
37671
+ * `days`, the position figure describes a SUBSET of the window, and a
37672
+ * surface must say so rather than present it as the window's average.
37673
+ */
37674
+ positionDays: daily.filter((d) => d.position !== null).length,
37651
37675
  days: daily.length
37652
37676
  },
37653
37677
  daily,
@@ -37661,7 +37685,16 @@ async function googleRoutes(app, opts) {
37661
37685
  // contain the rows beside it. When only one side is given, the other is
37662
37686
  // dropped rather than reported reversed: an absent bound is honest about
37663
37687
  // being unspecified, a reversed pair is not.
37664
- window: resolveReportedWindow(resolvedWindow, startDate, endDate)
37688
+ window: resolveReportedWindow(resolvedWindow, startDate, endDate),
37689
+ // Fitted server-side so the dashboard, the CLI, and the report all draw
37690
+ // the SAME line (UI/CLI parity — a chart-only regression is invisible to
37691
+ // an agent), and fitted over the CALENDAR, not over the rows.
37692
+ trends: {
37693
+ clicks: linearTrend(densify((d) => d.clicks)),
37694
+ impressions: linearTrend(densify((d) => d.impressions)),
37695
+ ctr: linearTrend(densify((d) => d.ctr)),
37696
+ position: linearTrend(densify((d) => d.position))
37697
+ }
37665
37698
  };
37666
37699
  });
37667
37700
  app.get("/projects/:name/google/gsc/top-pages", async (request) => {
@@ -10,7 +10,7 @@ import {
10
10
  loadConfig,
11
11
  loadConfigRaw,
12
12
  saveConfigPatch
13
- } from "./chunk-HCGTKQCG.js";
13
+ } from "./chunk-2TLRE2L3.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-J27J2DF6.js";
142
+ } from "./chunk-C6ZZH3XI.js";
143
143
  import {
144
144
  AGENT_MEMORY_VALUE_MAX_BYTES,
145
145
  AGENT_PROVIDER_IDS,
@@ -250,7 +250,7 @@ import {
250
250
  validationError,
251
251
  winnabilityClassLabel,
252
252
  withRetry
253
- } from "./chunk-EXDO7EPL.js";
253
+ } from "./chunk-NG7OR6GO.js";
254
254
 
255
255
  // src/telemetry.ts
256
256
  import crypto from "crypto";
@@ -9034,7 +9034,7 @@ function readStoredGroundingSources(rawResponse) {
9034
9034
  return result;
9035
9035
  }
9036
9036
  async function backfillInsightsCommand(project, opts) {
9037
- const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-HKDIVTZB.js");
9037
+ const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-ANRFEQWX.js");
9038
9038
  const config = loadConfig();
9039
9039
  const db = createClient(config.database);
9040
9040
  migrate(db);