@canonry/canonry 4.178.3 → 4.179.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-BCtMrEMF.js → AuditHistoryPanel-lD6Q5KaA.js} +1 -1
  2. package/assets/assets/{BacklinksPage-CIo2hA0i.js → BacklinksPage-ClN1xbOa.js} +1 -1
  3. package/assets/assets/{ChartPrimitives-B_LDVvTy.js → ChartPrimitives-DG35TyhH.js} +1 -1
  4. package/assets/assets/{HistoryPage-D24U8cUG.js → HistoryPage-CXKCPfG7.js} +1 -1
  5. package/assets/assets/{MeasurementPropertyPage-BKDdv-jJ.js → MeasurementPropertyPage-CiJsa0If.js} +1 -1
  6. package/assets/assets/ProjectPage-CD0QbHPd.js +9 -0
  7. package/assets/assets/{RunRow-B39IK7hK.js → RunRow-DkFcHvDU.js} +1 -1
  8. package/assets/assets/{RunsPage-R4W1kD0B.js → RunsPage-CLzUDwTj.js} +1 -1
  9. package/assets/assets/{SettingsPage-BAOGyt1F.js → SettingsPage-0PRgB0gI.js} +1 -1
  10. package/assets/assets/{SiteHealthSection-Bx7yVNMQ.js → SiteHealthSection-BXAMjVeD.js} +3 -3
  11. package/assets/assets/{TrafficPage-DL8RvM2R.js → TrafficPage-CP4qsn82.js} +1 -1
  12. package/assets/assets/{TrafficSourceDetailPage-COzjakZa.js → TrafficSourceDetailPage-DoaIZ_ix.js} +1 -1
  13. package/assets/assets/{extract-error-message-B3TERCQ-.js → extract-error-message-Cn74-t3z.js} +1 -1
  14. package/assets/assets/{index-D0GbiVhZ.css → index-BD8hYPvq.css} +1 -1
  15. package/assets/assets/{index-xtxQtZRo.js → index-BR9BgNb3.js} +22 -22
  16. package/assets/assets/{react-sigma_core.esm.min-CbXAujub.js → react-sigma_core.esm.min-CZrBq6qL.js} +1 -1
  17. package/assets/index.html +2 -2
  18. package/dist/{chunk-BNYDRPKC.js → chunk-A2AB7UK5.js} +40 -3
  19. package/dist/{chunk-GHO4574A.js → chunk-JFGP2U52.js} +8 -47
  20. package/dist/{chunk-2ZWW62T3.js → chunk-RDCTWBPF.js} +134 -46
  21. package/dist/{chunk-2UKCBT7D.js → chunk-T7QWSNIE.js} +1 -1
  22. package/dist/{chunk-XLVNLY2I.js → chunk-ZCNQGO3J.js} +2 -2
  23. package/dist/cli.js +5 -5
  24. package/dist/index.js +4 -4
  25. package/dist/{intelligence-service-LSQGK34A.js → intelligence-service-VBLTZGHS.js} +2 -2
  26. package/dist/mcp.js +3 -3
  27. package/package.json +14 -14
  28. package/assets/assets/ProjectPage-DrIs_ZuR.js +0 -9
@@ -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-Bx7yVNMQ.js";import"./index-xtxQtZRo.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-B_LDVvTy.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-BXAMjVeD.js";import"./index-BR9BgNb3.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-DG35TyhH.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-xtxQtZRo.js"></script>
15
+ <script type="module" crossorigin src="./assets/index-BR9BgNb3.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-D0GbiVhZ.css">
22
+ <link rel="stylesheet" crossorigin href="./assets/index-BD8hYPvq.css">
23
23
  </head>
24
24
  <body>
25
25
  <div id="root"></div>
@@ -14749,7 +14749,22 @@ var trafficSeriesPointSchema = z50.object({
14749
14749
  * The part of `aiReferralHits` not answered with a Location redirect — the
14750
14750
  * series to chart under any label that says sessions or visits.
14751
14751
  */
14752
- aiReferralLandedHits: z50.number().int().nonnegative()
14752
+ aiReferralLandedHits: z50.number().int().nonnegative(),
14753
+ /**
14754
+ * The part of `crawlerHits` that is a real content page, excluding robots,
14755
+ * sitemaps and assets. `crawlerHits` keeps its full-count contract; this is
14756
+ * the series to chart under any label that says "pages crawled", because a
14757
+ * sitemap re-fetch is not a page an engine read.
14758
+ */
14759
+ crawlerContentHits: z50.number().int().nonnegative(),
14760
+ /**
14761
+ * False for a bucket that predates any observation for this project, i.e.
14762
+ * before `series.coverageStart`. Such a bucket reads 0 because nothing was
14763
+ * being recorded, NOT because nothing happened, and a chart must not draw
14764
+ * those as a measured zero. Derived here rather than in a component so the
14765
+ * CLI draws the same distinction.
14766
+ */
14767
+ measured: z50.boolean()
14753
14768
  });
14754
14769
  var trafficCrawlerEventEntrySchema = z50.object({
14755
14770
  kind: z50.literal(TrafficEventKinds.crawler),
@@ -14816,7 +14831,29 @@ var trafficEventsResponseSchema = z50.object({
14816
14831
  */
14817
14832
  series: z50.object({
14818
14833
  granularity: trafficSeriesGranularitySchema,
14819
- points: z50.array(trafficSeriesPointSchema)
14834
+ points: z50.array(trafficSeriesPointSchema),
14835
+ /**
14836
+ * Earliest event ever observed for this project, across ALL of its traffic
14837
+ * sources, or null when nothing has been recorded. Buckets before it were
14838
+ * not measured. Earliest-across-sources is deliberate: the band answers
14839
+ * "before this we have nothing", and if any source has data we do not have
14840
+ * nothing. The cost is that a source connected much later hides its own
14841
+ * early gap, which is the better error than marking real data unmeasured.
14842
+ */
14843
+ coverageStart: z50.string().nullable(),
14844
+ /**
14845
+ * Least-squares fit per charted metric, over the densified points.
14846
+ *
14847
+ * Fitted HERE rather than in a chart component: a regression computed in the
14848
+ * UI is invisible to the CLI and to any other consumer, which is the
14849
+ * UI/CLI parity rule. `null` for a metric with fewer than two observations,
14850
+ * so a caller renders "no trend" instead of a fabricated flat line.
14851
+ */
14852
+ trends: z50.object({
14853
+ crawlerContentHits: linearTrendSchema.nullable(),
14854
+ aiUserFetchHits: linearTrendSchema.nullable(),
14855
+ aiReferralLandedHits: linearTrendSchema.nullable()
14856
+ })
14820
14857
  }),
14821
14858
  totals: z50.object({
14822
14859
  /** Total classified-crawler hits across the window. UNCHANGED contract. */
@@ -16749,7 +16786,6 @@ export {
16749
16786
  siteCrawlDeadLinksResponseSchema,
16750
16787
  SITE_AUDIT_DEFAULT_PAGE_LIMIT,
16751
16788
  SITE_AUDIT_MAX_PAGE_LIMIT,
16752
- SITE_AUDIT_DEFAULT_EDGE_LIMIT,
16753
16789
  SITE_AUDIT_MAX_EDGE_LIMIT,
16754
16790
  siteAuditRunRequestSchema,
16755
16791
  normalizeSiteAuditRunRequest,
@@ -16922,6 +16958,7 @@ export {
16922
16958
  trafficSeriesGranularitySchema,
16923
16959
  TrafficSeriesGranularities,
16924
16960
  trafficEventsResponseSchema,
16961
+ TrafficPathClasses,
16925
16962
  classifyTrafficPath,
16926
16963
  segmentCrawlerHits,
16927
16964
  sumInfraHits,
@@ -11,7 +11,7 @@ import {
11
11
  loadConfig,
12
12
  loadConfigRaw,
13
13
  saveConfigPatch
14
- } from "./chunk-2UKCBT7D.js";
14
+ } from "./chunk-T7QWSNIE.js";
15
15
  import {
16
16
  CC_CACHE_DIR,
17
17
  DUCKDB_SPEC,
@@ -157,7 +157,7 @@ import {
157
157
  siteCrawlSnapshots,
158
158
  toAlertView,
159
159
  usageCounters
160
- } from "./chunk-2ZWW62T3.js";
160
+ } from "./chunk-RDCTWBPF.js";
161
161
  import {
162
162
  AGENT_MEMORY_VALUE_MAX_BYTES,
163
163
  AGENT_PROVIDER_IDS,
@@ -191,7 +191,6 @@ import {
191
191
  RunKinds,
192
192
  RunStatuses,
193
193
  RunTriggers,
194
- SITE_AUDIT_DEFAULT_EDGE_LIMIT,
195
194
  SITE_AUDIT_DEFAULT_PAGE_LIMIT,
196
195
  SITE_AUDIT_MAX_EDGE_LIMIT,
197
196
  SITE_AUDIT_MAX_PAGE_LIMIT,
@@ -296,7 +295,7 @@ import {
296
295
  validationError,
297
296
  winnabilityClassLabel,
298
297
  withRetry
299
- } from "./chunk-BNYDRPKC.js";
298
+ } from "./chunk-A2AB7UK5.js";
300
299
 
301
300
  // src/telemetry.ts
302
301
  import crypto from "crypto";
@@ -10742,7 +10741,7 @@ function clampSiteAuditLimit(limit) {
10742
10741
  return Math.max(1, Math.min(SITE_AUDIT_MAX_PAGE_LIMIT, Math.floor(limit)));
10743
10742
  }
10744
10743
  function clampSiteAuditEdgeLimit(limit) {
10745
- if (limit == null || !Number.isFinite(limit)) return SITE_AUDIT_DEFAULT_EDGE_LIMIT;
10744
+ if (limit == null || !Number.isFinite(limit)) return void 0;
10746
10745
  return Math.max(1, Math.min(SITE_AUDIT_MAX_EDGE_LIMIT, Math.floor(limit)));
10747
10746
  }
10748
10747
  function toPageFactor(factor) {
@@ -10873,43 +10872,6 @@ function deadLinkCheckedCount(edges, pages) {
10873
10872
  }
10874
10873
  return new Set([...edges].filter((edge) => edge.type === "anchor" && edge.classification === "internal" && attemptedUrls.has(edge.to)).map((edge) => edge.to)).size;
10875
10874
  }
10876
- var RATE_LIMITED_STATUS = 429;
10877
- function partitionDeadLinks(deadLinks) {
10878
- const reported = deadLinks.findings;
10879
- const engineUnverified = deadLinks.unverified ?? [];
10880
- const answeredWithError = (finding) => typeof finding.statusCode === "number" && finding.statusCode >= 400;
10881
- const dead = reported.filter((finding) => answeredWithError(finding) && finding.statusCode !== RATE_LIMITED_STATUS);
10882
- const unverified = [
10883
- ...reported.filter((finding) => !answeredWithError(finding) || finding.statusCode === RATE_LIMITED_STATUS),
10884
- ...engineUnverified
10885
- ];
10886
- return { dead, unverified };
10887
- }
10888
- function reportedTermination(summary) {
10889
- const limits = summary.limits;
10890
- if (limits) {
10891
- if (limits.maxBytes && (summary.bytesRead ?? 0) >= limits.maxBytes) return "max-bytes";
10892
- if (limits.maxDurationMs && (summary.elapsedMs ?? 0) >= limits.maxDurationMs) return "max-duration";
10893
- if (limits.maxFetches && (summary.fetchesStarted ?? 0) >= limits.maxFetches) return "max-fetches";
10894
- }
10895
- return summary.terminationReason ?? "complete";
10896
- }
10897
- function crawlBudgetsFor(maxPages) {
10898
- return {
10899
- // 2x the ~745 KB/page measured on a media-heavy production site, so the
10900
- // byte cap is headroom rather than the thing that stops the crawl.
10901
- maxBytes: maxPages * 15e5,
10902
- // ~5 pages/s at the engine's default concurrency of 5, doubled for slow
10903
- // origins, and never below the engine's own 2-minute floor.
10904
- maxDurationMs: Math.max(12e4, Math.ceil(maxPages / 5 * 1e3 * 2)),
10905
- // Redirects and dead-link probes cost fetches without producing pages.
10906
- maxFetches: Math.ceil(maxPages * 1.5),
10907
- // Raised off the default of 10 because it is an ADMISSION limit: a sitemap
10908
- // with many query-parameter variants trips it during seeding and latches a
10909
- // soft reason that then masks whatever really stops the crawl.
10910
- maxQueryVariants: Math.max(50, Math.ceil(maxPages / 10))
10911
- };
10912
- }
10913
10875
  async function executeSiteAudit(db, runId, projectId, opts = {}) {
10914
10876
  const startedAt = (/* @__PURE__ */ new Date()).toISOString();
10915
10877
  const claim = db.update(runs).set({ status: "running", startedAt }).where(and12(eq15(runs.id, runId), eq15(runs.projectId, projectId), eq15(runs.status, "queued"))).run();
@@ -11210,7 +11172,6 @@ async function executeSiteAudit(db, runId, projectId, opts = {}) {
11210
11172
  maxEdges,
11211
11173
  maxDepth: opts.maxDepth ?? null
11212
11174
  });
11213
- const budgets = crawlBudgetsFor(maxPages);
11214
11175
  const report = await runSiteCrawl(crawlRootUrl, {
11215
11176
  mode: "summary",
11216
11177
  sitemapUrl: opts.sitemapUrl,
@@ -11218,7 +11179,6 @@ async function executeSiteAudit(db, runId, projectId, opts = {}) {
11218
11179
  maxEdges,
11219
11180
  maxDepth: opts.maxDepth,
11220
11181
  checkDeadLinks: opts.checkDeadLinks ?? false,
11221
- ...budgets,
11222
11182
  signal: opts.signal,
11223
11183
  onEvent: persistEvent
11224
11184
  });
@@ -11253,7 +11213,8 @@ async function executeSiteAudit(db, runId, projectId, opts = {}) {
11253
11213
  const errorCount = observedErrorCount(observedPages.values());
11254
11214
  const terminalStatus = crawlSummary.complete ? "completed" : "partial";
11255
11215
  const deadLinksChecked = opts.checkDeadLinks ? deadLinkCheckedCount(observedEdges.values(), observedPages.values()) : 0;
11256
- const { dead: deadLinkFindings, unverified: unverifiedLinks } = partitionDeadLinks(report.deadLinks);
11216
+ const deadLinkFindings = report.deadLinks.findings;
11217
+ const unverifiedLinks = report.deadLinks.unverified;
11257
11218
  const deadLinksFound = deadLinkFindings.length;
11258
11219
  const deadLinksUnverified = new Set(unverifiedLinks.map((finding) => finding.to)).size;
11259
11220
  const legacyIssues = factors.map((factor) => toLegacyIssue(factor, crawlSummary.auditRollup.auditedPages)).filter((issue) => issue !== null);
@@ -11345,7 +11306,7 @@ async function executeSiteAudit(db, runId, projectId, opts = {}) {
11345
11306
  maxDepth: opts.maxDepth ?? null,
11346
11307
  checkDeadLinks: opts.checkDeadLinks ?? false,
11347
11308
  complete: crawlSummary.complete,
11348
- termination: reportedTermination(crawlSummary),
11309
+ termination: crawlSummary.terminationReason ?? "complete",
11349
11310
  detailsAvailable: true,
11350
11311
  pagesDiscovered: crawlSummary.pagesDiscovered,
11351
11312
  pagesFetched: crawlSummary.pagesFetched,
@@ -11896,7 +11857,7 @@ function readStoredGroundingSources(rawResponse) {
11896
11857
  return result;
11897
11858
  }
11898
11859
  async function backfillInsightsCommand(project, opts) {
11899
- const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-LSQGK34A.js");
11860
+ const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-VBLTZGHS.js");
11900
11861
  const config = loadConfig();
11901
11862
  const db = createClient(config.database);
11902
11863
  migrate(db);