@canonry/canonry 6.0.0 → 6.1.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.
Files changed (32) hide show
  1. package/assets/assets/{AuditHistoryPanel-Bz2NVB6-.js → AuditHistoryPanel-Dtt7cbYo.js} +1 -1
  2. package/assets/assets/{BacklinksPage-Dte5-usf.js → BacklinksPage-h25kHk3u.js} +1 -1
  3. package/assets/assets/{HistoryPage-C1S4nw3I.js → HistoryPage-70YWNYBU.js} +1 -1
  4. package/assets/assets/{MeasurementPropertyPage-DWjsHZdt.js → MeasurementPropertyPage-CBPQ3A99.js} +1 -1
  5. package/assets/assets/ProjectPage-Dbbxf8yl.js +8 -0
  6. package/assets/assets/{RunsPage-D9wEJFfV.js → RunsPage-B6LqcDRg.js} +1 -1
  7. package/assets/assets/{SettingsPage-CN3Gew7Y.js → SettingsPage-DNV6Is27.js} +1 -1
  8. package/assets/assets/{SiteHealthSection-Bft5TfoU.js → SiteHealthSection-CWEIYXut.js} +3 -3
  9. package/assets/assets/{TrafficPage-tkNvySQH.js → TrafficPage-ZZqGgMyL.js} +2 -2
  10. package/assets/assets/{TrafficSourceDetailPage-RhRfPizo.js → TrafficSourceDetailPage-_RMyqM86.js} +1 -1
  11. package/assets/assets/{extract-error-message-tfl_SU7q.js → extract-error-message-D-AaTlPU.js} +1 -1
  12. package/assets/assets/index-BCKrocfL.js +86 -0
  13. package/assets/assets/index-C17E5ZcA.css +1 -0
  14. package/assets/assets/{react-sigma_core.esm.min-BUu3mcQJ.js → react-sigma_core.esm.min-CaRTZKvV.js} +1 -1
  15. package/assets/assets/{v2-overview-adapter-CzeGhaXn.js → v2-overview-adapter-C16fKgpq.js} +1 -1
  16. package/assets/index.html +2 -2
  17. package/dist/{chunk-ZO62Z2WN.js → chunk-B5W7HDCG.js} +23 -10
  18. package/dist/{chunk-K4356AGP.js → chunk-DMU3SFC4.js} +2 -2
  19. package/dist/{chunk-6M7HSNXJ.js → chunk-HTTYBQN4.js} +2 -2
  20. package/dist/{chunk-HAALQW4R.js → chunk-LXHE4DVO.js} +20 -2
  21. package/dist/{chunk-4NC5ZAC2.js → chunk-MJ3QINUW.js} +3 -3
  22. package/dist/{chunk-XGERCNUR.js → chunk-PDOMOHOP.js} +2 -2
  23. package/dist/{chunk-F4G7I7T7.js → chunk-QFI47QVP.js} +25 -10
  24. package/dist/cli.js +17 -9
  25. package/dist/{demo-server-54OUTZMY.js → demo-server-VP6CP33U.js} +4 -4
  26. package/dist/index.js +6 -6
  27. package/dist/{intelligence-service-MEIAMMLT.js → intelligence-service-6F63MYQ5.js} +2 -2
  28. package/dist/mcp.js +4 -4
  29. package/package.json +14 -14
  30. package/assets/assets/ProjectPage-CAJ9XvNt.js +0 -8
  31. package/assets/assets/index-B11OXdEC.css +0 -1
  32. package/assets/assets/index-Cu_xgdb1.js +0 -86
@@ -1,4 +1,4 @@
1
- import{g as Bt,t as S,r as C}from"./vendor-tanstack-ZXXkndVj.js";import{e as Ht,G as Wt}from"./SiteHealthSection-Bft5TfoU.js";import"./index-Cu_xgdb1.js";import"./vendor-radix-twS1M3FF.js";import"./vendor-recharts-llkUFBGR.js";import"./vendor-lucide-N6vOpZmh.js";import"./vendor-markdown-B4giJcws.js";import"./vendor-yaml-GWJz5H2G.js";import"./ChartPrimitives-B5okB5g-.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-ZXXkndVj.js";import{e as Ht,G as Wt}from"./SiteHealthSection-CWEIYXut.js";import"./index-BCKrocfL.js";import"./vendor-radix-twS1M3FF.js";import"./vendor-recharts-llkUFBGR.js";import"./vendor-lucide-N6vOpZmh.js";import"./vendor-markdown-B4giJcws.js";import"./vendor-yaml-GWJz5H2G.js";import"./ChartPrimitives-B5okB5g-.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
@@ -1 +1 @@
1
- import{r as j,j as a}from"./vendor-tanstack-ZXXkndVj.js";import{O as ie,fG as oe,B as le,aY as ue}from"./index-Cu_xgdb1.js";import{M as ce}from"./vendor-markdown-B4giJcws.js";import{C as de,$ as pe,g as J}from"./vendor-lucide-N6vOpZmh.js";const Ae="Sources",B={copy:"Copy answer",copying:"Copying…",copied:"Copied",failed:"Could not copy. Select and copy the answer above."};function me({previewLength:e,highlight:r}){return o=>{if(e!==void 0&&Number.isFinite(e)){let c=Math.max(0,Math.floor(e));const d={field:"value",omitted:!1},p=n=>{if(n.type==="definition")return!0;if(n.children)return n.children=n.children.filter(p),n.children.length>0;const s=n.type==="image"||n.type==="imageReference"?"alt":"value",f=n[s];if(f===void 0)return c>0;const b=Array.from(f);if(b.length===0)return c>0;if(c===0)return d.omitted=!0,!1;const N=b.length>c,k=b.slice(0,c);if(N&&!/\s/.test(b[c])){let g=k.length-1;for(;g>=0&&!/\s/.test(k[g]);)g--;g>=0&&g>c-40&&(k.length=g)}return d.omitted||=N,n[s]=k.join(""),c=N?0:c-k.length,k.length===0?!1:(d.lastNode=n,d.field=s,!0)};p(o),d.omitted&&(d.lastNode?d.lastNode[d.field]=`${d.lastNode[d.field].trimEnd()}…`:o.children?.push({type:"paragraph",children:[{type:"text",value:"…"}]}))}if(r){const c=d=>{["link","linkReference","code","inlineCode"].includes(d.type)||(d.type==="text"&&(d.data={...d.data,hName:"span"}),d.children?.forEach(c))};c(o)}}}function fe({headingLevel:e}){return r=>{const o=[],c=p=>{p.type==="heading"&&p.depth&&o.push(p),p.children?.forEach(c)};c(r);const d=o.reduce((p,n)=>Math.min(p,n.depth),6);for(const p of o){const n=p.depth-d;p.depth=Math.min(6,e+n),p.data={...p.data,hProperties:{...p.data?.hProperties,"data-answer-heading-level":n+1}}}}}function ge({answer:e}){const[r,o]=j.useState("idle"),c=j.useRef(!1),d=async()=>{if(!c.current){c.current=!0,o("copying");try{await navigator.clipboard.writeText(e),o("copied")}catch{o("failed")}finally{c.current=!1}}};return a.jsxs("div",{className:"mt-3 flex flex-wrap items-center gap-x-3",children:[a.jsx(le,{type:"button",variant:"ghost",className:"min-h-11 px-2","aria-disabled":r==="copying","aria-busy":r==="copying",onClick:()=>{d()},children:r==="copying"?B.copying:B.copy}),a.jsx("span",{role:"status",className:"text-sm text-secondary",children:r==="copied"?B.copied:r==="failed"?B.failed:""})]})}const Ke=j.memo(function({children:r,headingLevel:o=4,copyable:c=!1,highlightGroups:d,previewLength:p}){return a.jsxs("div",{className:"answer-markdown",children:[a.jsx(ce,{remarkPlugins:[[fe,{headingLevel:o}],[me,{previewLength:p,highlight:!!d?.length}]],components:{p:({children:n})=>a.jsx("p",{className:"mb-3 whitespace-pre-wrap last:mb-0",children:n}),ul:({children:n})=>a.jsx("ul",{className:"mb-3 ml-5 list-disc space-y-1",children:n}),ol:({children:n,start:s})=>a.jsx("ol",{start:s,className:"mb-3 ml-5 list-decimal space-y-1",children:n}),pre:({children:n})=>a.jsx("pre",{className:"mb-3 overflow-x-auto whitespace-pre-wrap",children:n}),span:({children:n})=>a.jsx("span",{children:typeof n=="string"&&d?n.split(/(https?:\/\/[^\s<>]+)/i).map((s,f)=>f%2?s:a.jsx(j.Fragment,{children:oe(s,d)},f)):n}),a:({children:n,href:s})=>{const f=ie(s);return f?a.jsx("a",{href:f,target:"_blank",rel:"noopener noreferrer",className:"text-link underline",children:n}):a.jsx("span",{children:n})},img:({alt:n})=>a.jsx("span",{children:n})},children:r}),c&&r.trim()?a.jsx(ge,{answer:r},r):null]})}),X="min-h-11 w-full rounded-md border border-default bg-surface px-3 py-2 text-sm text-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-mono-400",D="flex min-h-11 w-full items-center justify-between gap-3 rounded px-2 text-left text-sm text-primary hover:bg-surface-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-mono-400",E=e=>e.kind==="project"?"Whole site":e.label,R={allMarkets:"All markets",browse:e=>`Browse ${e}`,select:e=>`Select ${e}`,browseAll:"Browse all properties"},he=e=>e?.kind==="group"&&e.marketKeys?.length===1?e.marketKeys[0]:void 0,ee=e=>`${e} ${e===1?"property":"properties"}`;function Se({options:e,selected:r,onSelect:o,marketKey:c,label:d="Measurement scope",labelVisibility:p="visible",allowGroupSelect:n=!0}){const s=[...e].sort((t,u)=>t.label.localeCompare(u.label,void 0,{numeric:!0})||t.id.localeCompare(u.id)),[f,b]=j.useState(""),[N,k]=j.useState([]),[g,$]=j.useState(!1),C=j.useRef(null),I=j.useRef(null),i=j.useId(),y=s.filter(t=>t.kind==="group"),h=new Map(y.map(t=>[t.id,t])),l=h.get(N.at(-1)??""),F=h.get(N.at(-2)??""),x=f.trim().toLocaleLowerCase(),ne=y.filter(t=>!t.parentGroupIds?.some(u=>h.has(u))),_=s.filter(t=>t.kind==="property"),O=t=>(t.parentGroupIds??[]).map(u=>h.get(u)?.label).filter(Boolean).join(" · "),T=t=>`${E(t)} ${O(t)}`.toLocaleLowerCase().includes(x),U=t=>{const u=[...t.parentGroupIds??[]],m=new Set;for(;u.length;){const v=u.pop();if(v===l?.id)return!0;m.has(v)||(m.add(v),u.push(...h.get(v)?.parentGroupIds??[]))}return!1},A=(g?[]:l?y.filter(t=>x?U(t):t.parentGroupIds?.includes(l.id)):x?y:ne).filter(T),K=s.find(t=>t.kind==="market"&&t.id===(c??(r.kind==="market"?r.id:void 0))),H=l&&K&&(l.marketKeys?.includes(K.id)||K.parentGroupIds?.includes(l.id))?K.id:void 0,L=n?H??he(l):void 0,G=(l?_.filter(t=>t.parentGroupIds?.includes(l.id)&&(!L||t.marketKeys?.includes(L))):x||g||y.length===0?_:[]).filter(T),W=s.filter(t=>t.kind!=="market"||g||!n&&!l&&!x&&y.length>0||n&&l?.marketKeys?.length===1&&!x?!1:(l?x?U(t):t.parentGroupIds?.includes(l.id):x||!t.parentGroupIds?.some(m=>h.has(m)))&&T(t)),Y=l||g?[]:s.filter(t=>t.kind==="project"&&T(t));j.useEffect(()=>{const t=u=>{C.current?.open&&u.target instanceof Node&&!C.current.contains(u.target)&&(C.current.open=!1)};return document.addEventListener("pointerdown",t),()=>document.removeEventListener("pointerdown",t)},[]);const se=t=>{C.current&&(C.current.open=!1,C.current.querySelector("summary")?.focus());const u=n?t.kind==="property"?L:t.kind==="group"&&t.id===l?.id?H:void 0:void 0;u?o(t,u):o(t)},q=t=>{const u=[];let m=h.get(t.parentGroupIds?.[0]??"");for(;m&&!u.includes(m.id)&&m.id!==t.id;)u.unshift(m.id),m=h.get(m.parentGroupIds?.[0]??"");return[...u,t.id]},ae=()=>{const t=r.kind==="group"?h.get(r.id):void 0,u=h.get(K?.parentGroupIds?.[0]??""),m=(r.parentGroupIds??[]).flatMap(S=>{const w=h.get(S);return w?[q(w)]:[]}),v=m.find(S=>S.at(-1)===l?.id)??m.sort((S,w)=>w.length-S.length)[0]??[],Z=u?q(u):r.marketKeys?.length?[]:v;k(t?q(t):Z),$(r.kind==="property"&&Z.length===0&&y.length>0),b("")},z=t=>{k(q(t)),$(!1),b(""),I.current?.focus()},P=(t,u=E(t))=>a.jsxs("div",{className:"flex items-stretch",children:[a.jsxs("button",{type:"button",className:D,"aria-label":t.kind==="group"&&!n?R.browse(E(t)):R.select(E(t)),"aria-current":r.kind===t.kind&&r.id===t.id?"true":void 0,onClick:()=>t.kind==="group"&&!n?z(t):se(t),children:[a.jsxs("span",{className:"min-w-0 break-words",children:[u,x&&O(t)?a.jsx("span",{className:"block text-[13px] text-secondary",children:O(t)}):null]}),a.jsx("span",{className:"shrink-0 text-right text-[13px] text-secondary",children:t.kind==="market"?n?"Query context":"Market":t.kind==="property"?"Property":ee(t.targetCount)})]}),n&&t.kind==="group"&&t.id!==l?.id&&s.some(m=>m.parentGroupIds?.includes(t.id))?a.jsx("button",{type:"button","aria-label":R.browse(t.label),title:`Browse ${t.label}`,className:"flex min-h-11 min-w-11 items-center justify-center rounded text-secondary hover:bg-surface-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-mono-400",onClick:()=>z(t),children:a.jsx(J,{size:18,"aria-hidden":"true"})}):null]},`${t.kind}:${t.id}`),V=(t,u)=>u.length>0?a.jsxs("section",{"aria-label":t,className:"mt-2",children:[a.jsx("h3",{className:"px-2 py-2 text-[13px] font-medium text-secondary",children:t}),u.map(m=>P(m))]}):null,Q=(t,u,m)=>u.length>0?a.jsxs("details",{open:m,className:"mt-2 border-y border-default",children:[a.jsxs("summary",{className:"min-h-11 cursor-pointer px-2 py-3 text-sm text-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-mono-400",children:[t," (",u.length,")"]}),u.map(v=>P(v))]},`${l?.id??"root"}:${t}`):null;return a.jsxs("div",{className:"min-w-0",children:[a.jsx("span",{id:`${i}-label`,className:p==="sr-only"?"sr-only":"mb-1 block text-sm font-medium text-heading",children:d}),a.jsxs("details",{ref:C,className:"relative",onToggle:t=>{t.target===t.currentTarget&&t.currentTarget.open&&I.current?.focus()},onKeyDown:t=>{t.key==="Escape"&&(t.preventDefault(),t.currentTarget.open=!1,t.currentTarget.querySelector("summary")?.focus())},children:[a.jsxs("summary",{id:`${i}-value`,"aria-labelledby":`${i}-label ${i}-value`,className:`${X} visibility-scope-trigger`,onClick:()=>{C.current?.open||ae()},children:[`${E(r)}${r.kind==="group"?` · ${ee(r.targetCount)}`:r.kind==="property"?` · ${s.find(t=>t.kind==="market"&&t.id===c)?.label??(r.marketKeys?.length?R.allMarkets:"Property")}`:r.kind==="market"?" · Market":""}`,a.jsx(de,{size:16,"aria-hidden":"true",className:"shrink-0 text-secondary"})]}),a.jsxs("div",{className:"visibility-scope-menu",children:[l||g?a.jsxs("div",{className:"mb-2 border-b border-default pb-2",children:[a.jsx("button",{type:"button",className:D,"aria-label":`Back to ${F?.label??"all groups"}`,onClick:()=>{k(N.slice(0,-1)),$(!1),b(""),I.current?.focus()},children:a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(pe,{size:16,"aria-hidden":"true"}),F?.label??"All groups"]})}),a.jsx("p",{className:"px-2 py-1 text-sm font-medium text-heading","aria-live":"polite",children:l?.label??"All properties"})]}):null,a.jsx("input",{ref:I,type:"search","aria-label":"Search scopes",className:X,placeholder:l?"Search within this group":g?"Search properties":"Search groups or properties",value:f,onChange:t=>b(t.target.value)}),a.jsxs("div",{className:"mt-2 max-h-80 overflow-y-auto",children:[n&&l&&!x?P(l,"All properties in this group"):null,Y.map(t=>P(t)),l&&!x?Q("Subgroups",A,!0):V(l?"Subgroups":"Groups",A),x?V("Properties",G):Q(l&&A.length>0?"All properties":"Properties",G,!l||A.length===0),V("Markets",W),!l&&!g&&!x&&y.length>0&&_.length>0?a.jsxs("button",{type:"button",className:`${D} mt-2 border-t border-default`,"aria-label":R.browseAll,onClick:()=>{$(!0),I.current?.focus()},children:[a.jsx("span",{children:"All properties"}),a.jsx(J,{size:18,"aria-hidden":"true"})]}):null,x&&A.length+G.length+W.length+Y.length===0?a.jsx("p",{className:"py-3 text-sm text-secondary",children:"No matching scopes."}):null]})]})]})]})}function Ee(e){const r=e[0];return r?e.every(o=>o.mode===r.mode&&o.scope.kind===r.scope.kind&&o.scope.key===r.scope.key&&o.queryClass===r.queryClass&&o.measurement.displayedRunId===r.measurement.displayedRunId):!0}function M(e){return e.state==="unavailable"?{numerator:null,denominator:null,reason:e.reason}:e.numerator===void 0||e.denominator===void 0||e.denominator<=0?{numerator:null,denominator:null,reason:"not_applicable"}:{numerator:e.numerator,denominator:e.denominator,...e.unattributed===void 0?{}:{unattributed:e.unattributed}}}function ye(e){return e.kind==="exact"?e.url:e.kind==="prefix"?`https://${e.host}${e.pathPrefix}/*`:`https://${e.host}/*`}function be(e){return e==="assigned"?"this-property":e==="sibling"?"another-property":e==="ownedUnmapped"?"owned-unassigned":e==="external"?"external":e==="ambiguous"?"multiple-properties":"invalid-url"}function xe(e){return e==="assigned"?"positive":e==="external"?"neutral":e==="invalid"?"negative":"caution"}function te(e){return`target:${e.targetKey}:${e.queryId}:${e.executionNodeKey}`}function ke(e,r,o){const c=new Map;if(!r)return c;const d=new Map(e.usageEdges.map(s=>[te(s),s.targetKey])),p=new Map(e.assignments.map(s=>[`${s.targetKey}:${s.queryId}`,s.queryClass])),n=new Map(e.usageEdges.map(s=>[te(s),p.get(`${s.targetKey}:${s.queryId}`)]));for(const s of r.evidence){if(o&&n.get(s.usageEdgeId)!==o)continue;const f=d.get(s.usageEdgeId);if(!f)continue;const b=c.get(f)??[];b.push({id:`${s.observationId}:${s.expectedSlotId}:${s.usageEdgeId}:${s.sourceUrl}`,kind:be(s.classification),query:s.queryText,provider:s.provider,location:s.location,url:s.sourceUrl,tone:xe(s.classification),historical:s.historical||s.bridged}),c.set(f,b)}return c}function Ce(e){if(e.flags>0)return{label:"Review",tone:"caution"};const r=[e.mentionCoverage,e.citationCoverage].filter(o=>o.state==="unavailable").map(o=>o.reason);return r.includes("no_completed_run")?{label:"Not measured",tone:"neutral"}:r.includes("plan_v1")?{label:"Update setup",tone:"caution"}:r.includes("evidence_incomplete")?{label:"Evidence incomplete",tone:"caution"}:r.includes("identity_ambiguous")?{label:ue.ambiguous,tone:"caution"}:r.includes("no_population")?{label:"No queries",tone:"neutral"}:r.includes("not_applicable")?{label:"Not applicable",tone:"neutral"}:{label:"Complete",tone:"positive"}}function je(e){return e==="complete"?{label:"Complete",tone:"positive"}:e==="partial"?{label:"Partial",tone:"caution"}:e==="queued"?{label:"Queued",tone:"neutral"}:e==="running"?{label:"Running",tone:"neutral"}:e==="failed"?{label:"Failed",tone:"negative"}:{label:"Not measured",tone:"neutral"}}function Ne(e){if(!e)return"";const r=new Date(e);return Number.isFinite(r.getTime())?r.toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric",timeZone:"UTC"}):""}function re(e){const r=e.nextAction.count??e.flags.total;if(e.nextAction.kind==="review_flags")return`${r} flagged ${r===1?"result needs":"results need"} review.`;if(e.nextAction.kind==="complete_setup")return"Finish setup.";if(e.nextAction.kind==="republish_setup")return"Setup update required.";if(e.nextAction.kind==="run_measurement")return"Ready to measure."}function Re({overview:e,activePlan:r,report:o,reportState:c=o?"ready":"loading",sort:d}){if(r.plan.schemaVersion!==2||e.mode!=="active-v2")throw new Error("The current overview requires an active version-two setup.");if(e.scope.kind!=="all"&&e.scope.kind!=="group")throw new Error("The current overview requires an All Properties or group scope.");const p=r.plan,n=new Map(p.targets.map(i=>[i.stableKey,i])),s=new Map(p.querySnapshots.map(i=>[i.queryId,i.queryText])),f=new Map;for(const i of p.assignments){if(e.queryClass!=="all"&&i.queryClass!==e.queryClass)continue;const y=s.get(i.queryId);if(!y)continue;const h=f.get(i.targetKey)??new Set;h.add(y),f.set(i.targetKey,h)}const b=o?.revision===r.revision&&o.run?.id===e.measurement.displayedRunId?o:null,N=e.measurement.displayedRunId===void 0||b?"ready":c==="error"||o!=null?"error":"loading",k=ke(p,b,e.queryClass==="all"?void 0:e.queryClass),g=new Map;for(const i of p.groups)for(const y of i.targetKeys)g.has(y)||g.set(y,i.label);const $=e.properties.items.map(i=>{const y=n.get(i.targetKey),h=k.get(i.targetKey)??[];return{id:i.targetKey,name:i.label,mentionCoverage:M(i.mentionCoverage),citationCoverage:M(i.citationCoverage),status:Ce(i),providers:i.providers?.map(l=>({provider:l.provider,mentionCoverage:M(l.mentionCoverage),citationCoverage:M(l.citationCoverage)})),market:g.get(i.targetKey),assignedQueries:[...f.get(i.targetKey)??[]],urls:y?.urlMatchers.map(ye)??[],evidence:h,evidenceState:N,historical:h.some(l=>l.historical)}}),C=e.namedShareOfVoice?.entries.map(i=>({name:i.label,coverage:{numerator:i.credits,denominator:e.namedShareOfVoice.denominator}})),I=e.properties.items.flatMap(i=>i.flags>0?[{id:`property:${i.targetKey}`,property:i.label,summary:`${i.flags} ${i.flags===1?"result needs":"results need"} review.`,tone:"caution",count:i.flags}]:[]);return{classReporting:"available",latestMeasurement:{status:je(e.measurement.state),completedSlots:e.measurement.completed,totalSlots:e.measurement.expected,date:Ne(e.measurement.completedAt),includesBridgedHistory:e.measurement.includesHistoricalData===!0},currentView:{scope:e.scope.kind==="group"?{kind:"group",...e.scope.key?{key:e.scope.key}:{}}:{kind:"all"},queryClass:e.queryClass,aggregate:{metrics:{propertiesMentioned:M(e.metrics.propertiesMentioned),mentionCoverage:M(e.metrics.mentionCoverage),citationCoverage:M(e.metrics.citationCoverage)},properties:$,...C?{shareOfVoice:C}:{}},propertyTotal:e.properties.totalEstimate??$.length,outcomes:e.outcomes,nextCursor:e.properties.nextCursor,...d?{sort:d}:{}},availableGroups:p.groups.map(i=>({id:i.stableKey,label:i.label})),...re(e)?{nextActionText:re(e)}:{},flaggedResultsTotal:e.flags.total,flaggedResults:I}}export{Ke as A,R as M,Se as V,Ae as a,Ee as b,Re as c,ye as m};
1
+ import{r as j,j as a}from"./vendor-tanstack-ZXXkndVj.js";import{P as ie,fH as oe,B as le,aZ as ue}from"./index-BCKrocfL.js";import{M as ce}from"./vendor-markdown-B4giJcws.js";import{C as de,$ as pe,g as J}from"./vendor-lucide-N6vOpZmh.js";const Ae="Sources",B={copy:"Copy answer",copying:"Copying…",copied:"Copied",failed:"Could not copy. Select and copy the answer above."};function me({previewLength:e,highlight:r}){return o=>{if(e!==void 0&&Number.isFinite(e)){let c=Math.max(0,Math.floor(e));const d={field:"value",omitted:!1},p=n=>{if(n.type==="definition")return!0;if(n.children)return n.children=n.children.filter(p),n.children.length>0;const s=n.type==="image"||n.type==="imageReference"?"alt":"value",f=n[s];if(f===void 0)return c>0;const b=Array.from(f);if(b.length===0)return c>0;if(c===0)return d.omitted=!0,!1;const N=b.length>c,k=b.slice(0,c);if(N&&!/\s/.test(b[c])){let g=k.length-1;for(;g>=0&&!/\s/.test(k[g]);)g--;g>=0&&g>c-40&&(k.length=g)}return d.omitted||=N,n[s]=k.join(""),c=N?0:c-k.length,k.length===0?!1:(d.lastNode=n,d.field=s,!0)};p(o),d.omitted&&(d.lastNode?d.lastNode[d.field]=`${d.lastNode[d.field].trimEnd()}…`:o.children?.push({type:"paragraph",children:[{type:"text",value:"…"}]}))}if(r){const c=d=>{["link","linkReference","code","inlineCode"].includes(d.type)||(d.type==="text"&&(d.data={...d.data,hName:"span"}),d.children?.forEach(c))};c(o)}}}function fe({headingLevel:e}){return r=>{const o=[],c=p=>{p.type==="heading"&&p.depth&&o.push(p),p.children?.forEach(c)};c(r);const d=o.reduce((p,n)=>Math.min(p,n.depth),6);for(const p of o){const n=p.depth-d;p.depth=Math.min(6,e+n),p.data={...p.data,hProperties:{...p.data?.hProperties,"data-answer-heading-level":n+1}}}}}function ge({answer:e}){const[r,o]=j.useState("idle"),c=j.useRef(!1),d=async()=>{if(!c.current){c.current=!0,o("copying");try{await navigator.clipboard.writeText(e),o("copied")}catch{o("failed")}finally{c.current=!1}}};return a.jsxs("div",{className:"mt-3 flex flex-wrap items-center gap-x-3",children:[a.jsx(le,{type:"button",variant:"ghost",className:"min-h-11 px-2","aria-disabled":r==="copying","aria-busy":r==="copying",onClick:()=>{d()},children:r==="copying"?B.copying:B.copy}),a.jsx("span",{role:"status",className:"text-sm text-secondary",children:r==="copied"?B.copied:r==="failed"?B.failed:""})]})}const Ke=j.memo(function({children:r,headingLevel:o=4,copyable:c=!1,highlightGroups:d,previewLength:p}){return a.jsxs("div",{className:"answer-markdown",children:[a.jsx(ce,{remarkPlugins:[[fe,{headingLevel:o}],[me,{previewLength:p,highlight:!!d?.length}]],components:{p:({children:n})=>a.jsx("p",{className:"mb-3 whitespace-pre-wrap last:mb-0",children:n}),ul:({children:n})=>a.jsx("ul",{className:"mb-3 ml-5 list-disc space-y-1",children:n}),ol:({children:n,start:s})=>a.jsx("ol",{start:s,className:"mb-3 ml-5 list-decimal space-y-1",children:n}),pre:({children:n})=>a.jsx("pre",{className:"mb-3 overflow-x-auto whitespace-pre-wrap",children:n}),span:({children:n})=>a.jsx("span",{children:typeof n=="string"&&d?n.split(/(https?:\/\/[^\s<>]+)/i).map((s,f)=>f%2?s:a.jsx(j.Fragment,{children:oe(s,d)},f)):n}),a:({children:n,href:s})=>{const f=ie(s);return f?a.jsx("a",{href:f,target:"_blank",rel:"noopener noreferrer",className:"text-link underline",children:n}):a.jsx("span",{children:n})},img:({alt:n})=>a.jsx("span",{children:n})},children:r}),c&&r.trim()?a.jsx(ge,{answer:r},r):null]})}),X="min-h-11 w-full rounded-md border border-default bg-surface px-3 py-2 text-sm text-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-mono-400",D="flex min-h-11 w-full items-center justify-between gap-3 rounded px-2 text-left text-sm text-primary hover:bg-surface-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-mono-400",E=e=>e.kind==="project"?"Whole site":e.label,P={allMarkets:"All markets",browse:e=>`Browse ${e}`,select:e=>`Select ${e}`,browseAll:"Browse all properties"},he=e=>e?.kind==="group"&&e.marketKeys?.length===1?e.marketKeys[0]:void 0,ee=e=>`${e} ${e===1?"property":"properties"}`;function Se({options:e,selected:r,onSelect:o,marketKey:c,label:d="Measurement scope",labelVisibility:p="visible",allowGroupSelect:n=!0}){const s=[...e].sort((t,u)=>t.label.localeCompare(u.label,void 0,{numeric:!0})||t.id.localeCompare(u.id)),[f,b]=j.useState(""),[N,k]=j.useState([]),[g,$]=j.useState(!1),C=j.useRef(null),I=j.useRef(null),i=j.useId(),y=s.filter(t=>t.kind==="group"),h=new Map(y.map(t=>[t.id,t])),l=h.get(N.at(-1)??""),F=h.get(N.at(-2)??""),x=f.trim().toLocaleLowerCase(),ne=y.filter(t=>!t.parentGroupIds?.some(u=>h.has(u))),_=s.filter(t=>t.kind==="property"),O=t=>(t.parentGroupIds??[]).map(u=>h.get(u)?.label).filter(Boolean).join(" · "),R=t=>`${E(t)} ${O(t)}`.toLocaleLowerCase().includes(x),U=t=>{const u=[...t.parentGroupIds??[]],m=new Set;for(;u.length;){const v=u.pop();if(v===l?.id)return!0;m.has(v)||(m.add(v),u.push(...h.get(v)?.parentGroupIds??[]))}return!1},A=(g?[]:l?y.filter(t=>x?U(t):t.parentGroupIds?.includes(l.id)):x?y:ne).filter(R),K=s.find(t=>t.kind==="market"&&t.id===(c??(r.kind==="market"?r.id:void 0))),H=l&&K&&(l.marketKeys?.includes(K.id)||K.parentGroupIds?.includes(l.id))?K.id:void 0,L=n?H??he(l):void 0,V=(l?_.filter(t=>t.parentGroupIds?.includes(l.id)&&(!L||t.marketKeys?.includes(L))):x||g||y.length===0?_:[]).filter(R),W=s.filter(t=>t.kind!=="market"||g||!n&&!l&&!x&&y.length>0||n&&l?.marketKeys?.length===1&&!x?!1:(l?x?U(t):t.parentGroupIds?.includes(l.id):x||!t.parentGroupIds?.some(m=>h.has(m)))&&R(t)),z=l||g?[]:s.filter(t=>t.kind==="project"&&R(t));j.useEffect(()=>{const t=u=>{C.current?.open&&u.target instanceof Node&&!C.current.contains(u.target)&&(C.current.open=!1)};return document.addEventListener("pointerdown",t),()=>document.removeEventListener("pointerdown",t)},[]);const se=t=>{C.current&&(C.current.open=!1,C.current.querySelector("summary")?.focus());const u=n?t.kind==="property"?L:t.kind==="group"&&t.id===l?.id?H:void 0:void 0;u?o(t,u):o(t)},T=t=>{const u=[];let m=h.get(t.parentGroupIds?.[0]??"");for(;m&&!u.includes(m.id)&&m.id!==t.id;)u.unshift(m.id),m=h.get(m.parentGroupIds?.[0]??"");return[...u,t.id]},ae=()=>{const t=r.kind==="group"?h.get(r.id):void 0,u=h.get(K?.parentGroupIds?.[0]??""),m=(r.parentGroupIds??[]).flatMap(S=>{const w=h.get(S);return w?[T(w)]:[]}),v=m.find(S=>S.at(-1)===l?.id)??m.sort((S,w)=>w.length-S.length)[0]??[],Z=u?T(u):r.marketKeys?.length?[]:v;k(t?T(t):Z),$(r.kind==="property"&&Z.length===0&&y.length>0),b("")},Y=t=>{k(T(t)),$(!1),b(""),I.current?.focus()},q=(t,u=E(t))=>a.jsxs("div",{className:"flex items-stretch",children:[a.jsxs("button",{type:"button",className:D,"aria-label":t.kind==="group"&&!n?P.browse(E(t)):P.select(E(t)),"aria-current":r.kind===t.kind&&r.id===t.id?"true":void 0,onClick:()=>t.kind==="group"&&!n?Y(t):se(t),children:[a.jsxs("span",{className:"min-w-0 break-words",children:[u,x&&O(t)?a.jsx("span",{className:"block text-[13px] text-secondary",children:O(t)}):null]}),a.jsx("span",{className:"shrink-0 text-right text-[13px] text-secondary",children:t.kind==="market"?n?"Query context":"Market":t.kind==="property"?"Property":ee(t.targetCount)})]}),n&&t.kind==="group"&&t.id!==l?.id&&s.some(m=>m.parentGroupIds?.includes(t.id))?a.jsx("button",{type:"button","aria-label":P.browse(t.label),title:`Browse ${t.label}`,className:"flex min-h-11 min-w-11 items-center justify-center rounded text-secondary hover:bg-surface-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-mono-400",onClick:()=>Y(t),children:a.jsx(J,{size:18,"aria-hidden":"true"})}):null]},`${t.kind}:${t.id}`),G=(t,u)=>u.length>0?a.jsxs("section",{"aria-label":t,className:"mt-2",children:[a.jsx("h3",{className:"px-2 py-2 text-[13px] font-medium text-secondary",children:t}),u.map(m=>q(m))]}):null,Q=(t,u,m)=>u.length>0?a.jsxs("details",{open:m,className:"mt-2 border-y border-default",children:[a.jsxs("summary",{className:"min-h-11 cursor-pointer px-2 py-3 text-sm text-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-mono-400",children:[t," (",u.length,")"]}),u.map(v=>q(v))]},`${l?.id??"root"}:${t}`):null;return a.jsxs("div",{className:"min-w-0",children:[a.jsx("span",{id:`${i}-label`,className:p==="sr-only"?"sr-only":"mb-1 block text-sm font-medium text-heading",children:d}),a.jsxs("details",{ref:C,className:"relative",onToggle:t=>{t.target===t.currentTarget&&t.currentTarget.open&&I.current?.focus()},onKeyDown:t=>{t.key==="Escape"&&(t.preventDefault(),t.currentTarget.open=!1,t.currentTarget.querySelector("summary")?.focus())},children:[a.jsxs("summary",{id:`${i}-value`,"aria-labelledby":`${i}-label ${i}-value`,className:`${X} visibility-scope-trigger`,onClick:()=>{C.current?.open||ae()},children:[`${E(r)}${r.kind==="group"?` · ${ee(r.targetCount)}`:r.kind==="property"?` · ${s.find(t=>t.kind==="market"&&t.id===c)?.label??(r.marketKeys?.length?P.allMarkets:"Property")}`:r.kind==="market"?" · Market":""}`,a.jsx(de,{size:16,"aria-hidden":"true",className:"shrink-0 text-secondary"})]}),a.jsxs("div",{className:"visibility-scope-menu",children:[l||g?a.jsxs("div",{className:"mb-2 border-b border-default pb-2",children:[a.jsx("button",{type:"button",className:D,"aria-label":`Back to ${F?.label??"all groups"}`,onClick:()=>{k(N.slice(0,-1)),$(!1),b(""),I.current?.focus()},children:a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(pe,{size:16,"aria-hidden":"true"}),F?.label??"All groups"]})}),a.jsx("p",{className:"px-2 py-1 text-sm font-medium text-heading","aria-live":"polite",children:l?.label??"All properties"})]}):null,a.jsx("input",{ref:I,type:"search","aria-label":"Search scopes",className:X,placeholder:l?"Search within this group":g?"Search properties":"Search groups or properties",value:f,onChange:t=>b(t.target.value)}),a.jsxs("div",{className:"mt-2 max-h-80 overflow-y-auto",children:[n&&l&&!x?q(l,"All properties in this group"):null,z.map(t=>q(t)),l&&!x?Q("Subgroups",A,!0):G(l?"Subgroups":"Groups",A),x?G("Properties",V):Q(l&&A.length>0?"All properties":"Properties",V,!l||A.length===0),G("Markets",W),!l&&!g&&!x&&y.length>0&&_.length>0?a.jsxs("button",{type:"button",className:`${D} mt-2 border-t border-default`,"aria-label":P.browseAll,onClick:()=>{$(!0),I.current?.focus()},children:[a.jsx("span",{children:"All properties"}),a.jsx(J,{size:18,"aria-hidden":"true"})]}):null,x&&A.length+V.length+W.length+z.length===0?a.jsx("p",{className:"py-3 text-sm text-secondary",children:"No matching scopes."}):null]})]})]})]})}function Ee(e){const r=e[0];return r?e.every(o=>o.mode===r.mode&&o.scope.kind===r.scope.kind&&o.scope.key===r.scope.key&&o.queryClass===r.queryClass&&o.measurement.displayedRunId===r.measurement.displayedRunId):!0}function M(e){return e.state==="unavailable"?{numerator:null,denominator:null,reason:e.reason}:e.numerator===void 0||e.denominator===void 0||e.denominator<=0?{numerator:null,denominator:null,reason:"not_applicable"}:{numerator:e.numerator,denominator:e.denominator,...e.unattributed===void 0?{}:{unattributed:e.unattributed}}}function ye(e){return e.kind==="exact"?e.url:e.kind==="prefix"?`https://${e.host}${e.pathPrefix}/*`:`https://${e.host}/*`}function be(e){return e==="assigned"?"this-property":e==="sibling"?"another-property":e==="ownedUnmapped"?"owned-unassigned":e==="external"?"external":e==="ambiguous"?"multiple-properties":"invalid-url"}function xe(e){return e==="assigned"?"positive":e==="external"?"neutral":e==="invalid"?"negative":"caution"}function te(e){return`target:${e.targetKey}:${e.queryId}:${e.executionNodeKey}`}function ke(e,r,o){const c=new Map;if(!r)return c;const d=new Map(e.usageEdges.map(s=>[te(s),s.targetKey])),p=new Map(e.assignments.map(s=>[`${s.targetKey}:${s.queryId}`,s.queryClass])),n=new Map(e.usageEdges.map(s=>[te(s),p.get(`${s.targetKey}:${s.queryId}`)]));for(const s of r.evidence){if(o&&n.get(s.usageEdgeId)!==o)continue;const f=d.get(s.usageEdgeId);if(!f)continue;const b=c.get(f)??[];b.push({id:`${s.observationId}:${s.expectedSlotId}:${s.usageEdgeId}:${s.sourceUrl}`,kind:be(s.classification),query:s.queryText,provider:s.provider,location:s.location,url:s.sourceUrl,tone:xe(s.classification),historical:s.historical||s.bridged}),c.set(f,b)}return c}function Ce(e){if(e.flags>0)return{label:"Review",tone:"caution"};const r=[e.mentionCoverage,e.citationCoverage].filter(o=>o.state==="unavailable").map(o=>o.reason);return r.includes("no_completed_run")?{label:"Not measured",tone:"neutral"}:r.includes("plan_v1")?{label:"Update setup",tone:"caution"}:r.includes("evidence_incomplete")?{label:"Evidence incomplete",tone:"caution"}:r.includes("identity_ambiguous")?{label:ue.ambiguous,tone:"caution"}:r.includes("no_population")?{label:"No queries",tone:"neutral"}:r.includes("not_applicable")?{label:"Not applicable",tone:"neutral"}:{label:"Complete",tone:"positive"}}function je(e){return e==="complete"?{label:"Complete",tone:"positive"}:e==="partial"?{label:"Partial",tone:"caution"}:e==="queued"?{label:"Queued",tone:"neutral"}:e==="running"?{label:"Running",tone:"neutral"}:e==="failed"?{label:"Failed",tone:"negative"}:{label:"Not measured",tone:"neutral"}}function Ne(e){if(!e)return"";const r=new Date(e);return Number.isFinite(r.getTime())?r.toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric",timeZone:"UTC"}):""}function re(e){const r=e.nextAction.count??e.flags.total;if(e.nextAction.kind==="review_flags")return`${r} flagged ${r===1?"result needs":"results need"} review.`;if(e.nextAction.kind==="complete_setup")return"Finish setup.";if(e.nextAction.kind==="republish_setup")return"Setup update required.";if(e.nextAction.kind==="run_measurement")return"Ready to measure."}function Pe({overview:e,activePlan:r,report:o,reportState:c=o?"ready":"loading",sort:d}){if(r.plan.schemaVersion!==2||e.mode!=="active-v2")throw new Error("The current overview requires an active version-two setup.");if(e.scope.kind!=="all"&&e.scope.kind!=="group")throw new Error("The current overview requires an All Properties or group scope.");const p=r.plan,n=new Map(p.targets.map(i=>[i.stableKey,i])),s=new Map(p.querySnapshots.map(i=>[i.queryId,i.queryText])),f=new Map;for(const i of p.assignments){if(e.queryClass!=="all"&&i.queryClass!==e.queryClass)continue;const y=s.get(i.queryId);if(!y)continue;const h=f.get(i.targetKey)??new Set;h.add(y),f.set(i.targetKey,h)}const b=o?.revision===r.revision&&o.run?.id===e.measurement.displayedRunId?o:null,N=e.measurement.displayedRunId===void 0||b?"ready":c==="error"||o!=null?"error":"loading",k=ke(p,b,e.queryClass==="all"?void 0:e.queryClass),g=new Map;for(const i of p.groups)for(const y of i.targetKeys)g.has(y)||g.set(y,i.label);const $=e.properties.items.map(i=>{const y=n.get(i.targetKey),h=k.get(i.targetKey)??[];return{id:i.targetKey,name:i.label,mentionCoverage:M(i.mentionCoverage),citationCoverage:M(i.citationCoverage),status:Ce(i),providers:i.providers?.map(l=>({provider:l.provider,mentionCoverage:M(l.mentionCoverage),citationCoverage:M(l.citationCoverage)})),market:g.get(i.targetKey),assignedQueries:[...f.get(i.targetKey)??[]],urls:y?.urlMatchers.map(ye)??[],evidence:h,evidenceState:N,historical:h.some(l=>l.historical)}}),C=e.namedShareOfVoice?.entries.map(i=>({name:i.label,coverage:{numerator:i.credits,denominator:e.namedShareOfVoice.denominator}})),I=e.properties.items.flatMap(i=>i.flags>0?[{id:`property:${i.targetKey}`,property:i.label,summary:`${i.flags} ${i.flags===1?"result needs":"results need"} review.`,tone:"caution",count:i.flags}]:[]);return{classReporting:"available",latestMeasurement:{status:je(e.measurement.state),completedSlots:e.measurement.completed,totalSlots:e.measurement.expected,date:Ne(e.measurement.completedAt),includesBridgedHistory:e.measurement.includesHistoricalData===!0},currentView:{scope:e.scope.kind==="group"?{kind:"group",...e.scope.key?{key:e.scope.key}:{}}:{kind:"all"},queryClass:e.queryClass,aggregate:{metrics:{propertiesMentioned:M(e.metrics.propertiesMentioned),mentionCoverage:M(e.metrics.mentionCoverage),citationCoverage:M(e.metrics.citationCoverage)},properties:$,...C?{shareOfVoice:C}:{}},propertyTotal:e.properties.totalEstimate??$.length,outcomes:e.outcomes,nextCursor:e.properties.nextCursor,...d?{sort:d}:{}},availableGroups:p.groups.map(i=>({id:i.stableKey,label:i.label})),...re(e)?{nextActionText:re(e)}:{},flaggedResultsTotal:e.flags.total,flaggedResults:I}}export{Ke as A,P as M,Se as V,Ae as a,Ee as b,Pe as c,ye as m};
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-Cu_xgdb1.js"></script>
15
+ <script type="module" crossorigin src="./assets/index-BCKrocfL.js"></script>
16
16
  <link rel="modulepreload" crossorigin href="./assets/vendor-tanstack-ZXXkndVj.js">
17
17
  <link rel="modulepreload" crossorigin href="./assets/vendor-radix-twS1M3FF.js">
18
18
  <link rel="modulepreload" crossorigin href="./assets/vendor-recharts-llkUFBGR.js">
19
19
  <link rel="modulepreload" crossorigin href="./assets/vendor-lucide-N6vOpZmh.js">
20
20
  <link rel="modulepreload" crossorigin href="./assets/vendor-markdown-B4giJcws.js">
21
21
  <link rel="modulepreload" crossorigin href="./assets/vendor-yaml-GWJz5H2G.js">
22
- <link rel="stylesheet" crossorigin href="./assets/index-B11OXdEC.css">
22
+ <link rel="stylesheet" crossorigin href="./assets/index-C17E5ZcA.css">
23
23
  </head>
24
24
  <body>
25
25
  <div id="root"></div>
@@ -869,7 +869,7 @@ import {
869
869
  wordpressSchemaDeployResultDtoSchema,
870
870
  wordpressSchemaStatusResultDtoSchema,
871
871
  wordpressStatusDtoSchema
872
- } from "./chunk-HAALQW4R.js";
872
+ } from "./chunk-LXHE4DVO.js";
873
873
 
874
874
  // src/intelligence-service.ts
875
875
  import { eq as eq82, desc as desc36, asc as asc15, and as and69, ne as ne14, or as or20, inArray as inArray32, gte as gte22, lte as lte20, isNull as isNull16, sql as sql31, exists } from "drizzle-orm";
@@ -13868,6 +13868,7 @@ var DISCLOSURE = "Experimental English sentiment classification. Enabling sends
13868
13868
  var FULL_ROWS = { include: /* @__PURE__ */ new Set(["assessments", "locations"]), limit: null, after: null };
13869
13869
  var COMPACT_ROWS = { include: /* @__PURE__ */ new Set(), limit: null, after: null };
13870
13870
  var OPERATIONAL_OUTCOMES = /* @__PURE__ */ new Set([SentimentOutcomes.pending, SentimentOutcomes.running, SentimentOutcomes["waiting-to-retry"], SentimentOutcomes.failed, SentimentOutcomes.canceled]);
13871
+ var RATED_OUTCOMES = /* @__PURE__ */ new Set([SentimentOutcomes.favorable, SentimentOutcomes.mixed, SentimentOutcomes.unfavorable]);
13871
13872
  var SentimentService = class {
13872
13873
  constructor(db, options) {
13873
13874
  this.db = db;
@@ -14108,10 +14109,15 @@ var SentimentService = class {
14108
14109
  return [{ ...item2, input, evidence }];
14109
14110
  });
14110
14111
  }
14111
- aggregate(selection, items, source, settings, rows) {
14112
+ /**
14113
+ * `ratedPopulation` is the stored items whose rated assessments count toward every row's Rated
14114
+ * share. It defaults to `items`; a comparison scores only its matched units but passes the whole
14115
+ * period, so each period's Rated share is the one its own summary read shows.
14116
+ */
14117
+ aggregate(selection, items, source, settings, rows, ratedPopulation = items) {
14112
14118
  const definition = selection.evaluationDefinitionId ? this.definition(selection.evaluationDefinitionId) : null;
14113
14119
  const disabled = !settings.enabled || !settings.installEnabled;
14114
- const options = { disabled, incomplete: Boolean(source.skipped["incomplete-run"]) };
14120
+ const options = { disabled, incomplete: Boolean(source.skipped["incomplete-run"]), rated: ratedAssessments(ratedPopulation) };
14115
14121
  const base = { ...scoreAssessments(items, source.assessments, { ...options, slots: source.sourceCoverage }), configured: settings.enabled && settings.installEnabled, selection, evaluationDefinition: definition };
14116
14122
  if (!rows) return { summary: { ...base, breakdowns: [] }, queries: [], total: 0, next: null };
14117
14123
  const filter = sourceFilter(selection);
@@ -14265,8 +14271,8 @@ var SentimentService = class {
14265
14271
  const fromUnits = units(fromItems), toUnits = units(toItems);
14266
14272
  const common = new Set([...fromUnits.byUnit.keys()].filter((key) => toUnits.byUnit.has(key)));
14267
14273
  const settings = this.settings(projectId);
14268
- const fromSummary = withoutNodeKeys(this.aggregate(from.selection, fromItems.filter((item2) => common.has(fromUnits.byItem.get(item2))), from.source, settings, COMPACT_ROWS));
14269
- const toSummary = withoutNodeKeys(this.aggregate(to.selection, toItems.filter((item2) => common.has(toUnits.byItem.get(item2))), to.source, settings, COMPACT_ROWS));
14274
+ const fromSummary = withoutNodeKeys(this.aggregate(from.selection, fromItems.filter((item2) => common.has(fromUnits.byItem.get(item2))), from.source, settings, COMPACT_ROWS, fromItems));
14275
+ const toSummary = withoutNodeKeys(this.aggregate(to.selection, toItems.filter((item2) => common.has(toUnits.byItem.get(item2))), to.source, settings, COMPACT_ROWS, toItems));
14270
14276
  const refusalReasons = [];
14271
14277
  const expectedFrom = from.source.assessments.length, expectedTo = to.source.assessments.length;
14272
14278
  if (fromItems.length < expectedFrom || toItems.length < expectedTo) refusalReasons.push("classification-coverage-gap");
@@ -14315,7 +14321,6 @@ function incompatibleSelectionReason(selections, assessments, filter) {
14315
14321
  return reason;
14316
14322
  }
14317
14323
  function overallSentiment(reads, disabled) {
14318
- const assessmentKey = (item2) => JSON.stringify([item2.snapshotId, item2.subject.key]);
14319
14324
  const assessments = reads.flatMap((read) => read.source.assessments);
14320
14325
  const eligible = [...new Map(assessments.map((item2) => [assessmentKey(item2), item2])).values()];
14321
14326
  const selected = [...new Map(reads.flatMap((read) => read.items).map((item2) => [assessmentKey(item2.member), item2])).values()];
@@ -14353,12 +14358,20 @@ function compareRows(left, right) {
14353
14358
  function withheldCounts(counts2) {
14354
14359
  return Object.fromEntries(Object.entries(counts2).map(([key, value]) => [key, OPERATIONAL_OUTCOMES.has(key) ? value : 0]));
14355
14360
  }
14361
+ function assessmentKey(item2) {
14362
+ return JSON.stringify([item2.snapshotId, item2.subject.key]);
14363
+ }
14364
+ function ratedAssessments(items) {
14365
+ return new Set(items.filter((item2) => RATED_OUTCOMES.has(item2.outcome)).map((item2) => assessmentKey(item2.member)));
14366
+ }
14356
14367
  function scoreAssessments(selected, eligible, options) {
14357
- const distinct = new Set(eligible.map((item2) => item2.snapshotId)).size;
14358
- const slots = options.slots ?? { expected: distinct, completed: distinct };
14359
- const result = aggregateSentiment(selected.map((item2) => ({ assessmentId: item2.work.id, sourceSnapshotId: item2.work.snapshotId, outcome: item2.outcome })), { disabled: options.disabled, eligibleAssessments: eligible.length, expectedProviderSlots: slots.expected, completedProviderSlots: slots.completed });
14368
+ const eligibleAnswers = new Set(eligible.map((item2) => item2.snapshotId)).size;
14369
+ const rated = options.rated ?? ratedAssessments(selected);
14370
+ const ratedAnswers = new Set(eligible.filter((item2) => rated.has(assessmentKey(item2))).map((item2) => item2.snapshotId)).size;
14371
+ const slots = options.slots ?? { expected: eligibleAnswers, completed: eligibleAnswers };
14372
+ const result = aggregateSentiment(selected.map((item2) => ({ assessmentId: item2.work.id, sourceSnapshotId: item2.work.snapshotId, outcome: item2.outcome })), { disabled: options.disabled, eligibleAssessments: eligible.length, eligibleAnswers, ratedAnswers, expectedProviderSlots: slots.expected, completedProviderSlots: slots.completed });
14360
14373
  const gap = selected.length > 0 && selected.length < eligible.length;
14361
- const coverage = options.disabled ? { ...result.coverage, judged: 0, counts: withheldCounts(result.coverage.counts) } : result.coverage;
14374
+ const coverage = options.disabled ? { ...result.coverage, judged: 0, ratedAnswers: 0, counts: withheldCounts(result.coverage.counts) } : result.coverage;
14362
14375
  return { ...result, coverage, ...(gap || options.incomplete) && !options.disabled ? { state: selected.length ? "partial" : "not-measured", provisional: true } : {}, reason: options.disabled ? "Sentiment is disabled." : options.incomplete ? "Source sweep is incomplete." : gap ? "classification-coverage-gap: some source assessments have not been admitted." : null };
14363
14376
  }
14364
14377
  function jobReceipt(row, tally, attempts) {
@@ -128,7 +128,7 @@ import {
128
128
  trafficSeriesGranularitySchema,
129
129
  visibilityCompareSelectionSchema,
130
130
  visibilityReportRequestSchema
131
- } from "./chunk-HAALQW4R.js";
131
+ } from "./chunk-LXHE4DVO.js";
132
132
 
133
133
  // src/cli-error.ts
134
134
  function isMachineFormat(format) {
@@ -1263,7 +1263,7 @@ var canonryMcpTools = [
1263
1263
  defineTool({
1264
1264
  name: "canonry_sentiment",
1265
1265
  title: "Read sentiment and per-query scores",
1266
- description: 'Read stored model-classified language about frozen Simple identities or Advanced Properties. Returns headline and per-query favorable/mixed/unfavorable rates, judged and selected counts, distinct answers, exclusions, intervals and method limitations. Favorable % is favorable / (favorable + mixed + unfavorable); factual and unjudged answers do not enter that denominator. Select branded or non-brand explicitly and keep their metrics separate; the default is branded. Optional queryId selects one frozen query. Query rows are compact and paged: queryLimit (default 25) rows per page, then pass queryPage.nextCursor as queryCursor. Per-engine assessment verdicts and per-location scores are opt-in with include=["assessments","locations"], or come by default when queryId names one query. Advanced rows are per executionNodeKey; pass it to narrow evidence to that node. Optional runIds selects the exact grouped location runs instead of runId. A known subject absent from a non-brand answer is not unfavorable. Partial values are provisional. Never starts a classifier. Preserve the resolved evaluationDefinitionId and complete selection for later evidence reads.',
1266
+ description: 'Read stored model-classified language about frozen Simple identities or Advanced Properties. Returns headline and per-query favorable/mixed/unfavorable rates, judged and selected assessment counts, rated and eligible answers with their share (ratedAnswerRate: answers with a favorable, mixed or unfavorable rating over every eligible answer, admitted or not; each answer counts once), exclusions, intervals and method limitations. Favorable % is favorable / (favorable + mixed + unfavorable); factual and unjudged answers do not enter that denominator. Select branded or non-brand explicitly and keep their metrics separate; the default is branded. Optional queryId selects one frozen query. Query rows are compact and paged: queryLimit (default 25) rows per page, then pass queryPage.nextCursor as queryCursor. Per-engine assessment verdicts and per-location scores are opt-in with include=["assessments","locations"], or come by default when queryId names one query. Advanced rows are per executionNodeKey; pass it to narrow evidence to that node. Optional runIds selects the exact grouped location runs instead of runId. A known subject absent from a non-brand answer is not unfavorable. Partial values are provisional. Never starts a classifier. Preserve the resolved evaluationDefinitionId and complete selection for later evidence reads.',
1267
1267
  access: "read",
1268
1268
  tier: "monitoring",
1269
1269
  inputSchema: sentimentInputSchema,
@@ -5,7 +5,7 @@ import {
5
5
  siteCrawlGraphNodes,
6
6
  siteCrawlPages,
7
7
  siteCrawlSnapshots
8
- } from "./chunk-ZO62Z2WN.js";
8
+ } from "./chunk-B5W7HDCG.js";
9
9
  import {
10
10
  SITE_CRAWL_GRAPH_MAX_EDGES,
11
11
  SITE_CRAWL_GRAPH_MAX_NODES,
@@ -13,7 +13,7 @@ import {
13
13
  TEMPLATE_LINK_RATIO_THRESHOLD,
14
14
  factorStatusFromScore,
15
15
  roundPreservingTotal
16
- } from "./chunk-HAALQW4R.js";
16
+ } from "./chunk-LXHE4DVO.js";
17
17
 
18
18
  // src/site-audit-factors.ts
19
19
  function recordedSharePct(factor) {
@@ -15755,7 +15755,19 @@ var sentimentCompareRequestSchema = sentimentSelectionBaseSchema.extend({ fromRu
15755
15755
  });
15756
15756
  var sentimentResolvedSelectionSchema = sentimentSelectionBaseSchema.extend({ runId: id.nullable(), revision: z51.number().int().nullable(), evaluationDefinitionId: id.nullable(), mode: z51.enum(["simple", "advanced"]) });
15757
15757
  var sentimentCountsSchema = z51.object(Object.fromEntries(sentimentOutcomeSchema.options.map((outcome) => [outcome, count]))).strict();
15758
- var sentimentCoverageSchema = z51.object({ selected: count, eligibleAssessments: count, unadmittedAssessments: count, judged: count, distinctSourceAnswers: count, counts: sentimentCountsSchema, expectedProviderSlots: count, completedProviderSlots: count }).strict();
15758
+ var sentimentCoverageSchema = z51.object({
15759
+ selected: count,
15760
+ eligibleAssessments: count,
15761
+ unadmittedAssessments: count,
15762
+ judged: count,
15763
+ distinctSourceAnswers: count,
15764
+ eligibleAnswers: count.optional(),
15765
+ ratedAnswers: count.optional(),
15766
+ ratedAnswerRate: rate.optional(),
15767
+ counts: sentimentCountsSchema,
15768
+ expectedProviderSlots: count,
15769
+ completedProviderSlots: count
15770
+ }).strict();
15759
15771
  var sentimentScoreSchema = z51.object({ favorableRate: rate, mixedRate: rate, unfavorableRate: rate, favorableDisplay: z51.string(), mixedDisplay: z51.string(), unfavorableDisplay: z51.string(), interval: z51.object({ low: z51.number(), high: z51.number() }).strict().nullable(), method: z51.literal("wilson-independent-v1"), limitation: z51.string() }).strict();
15760
15772
  var headlineFields = { state: sentimentStateSchema, reason: z51.string().nullable(), provisional: z51.boolean(), coverage: sentimentCoverageSchema, score: sentimentScoreSchema };
15761
15773
  var sentimentHeadlineSchema = z51.object({ ...headlineFields, selection: sentimentResolvedSelectionSchema, runIds: z51.array(id) }).strict();
@@ -15880,11 +15892,17 @@ function emptySentimentCounts() {
15880
15892
  function sentimentRateDisplay(value) {
15881
15893
  return value === null ? "Unavailable" : formatPercent(value, RatioUnits.fraction);
15882
15894
  }
15895
+ var JUDGED_OUTCOMES = /* @__PURE__ */ new Set(["favorable", "mixed", "unfavorable"]);
15883
15896
  function aggregateSentiment(items, options = {}) {
15884
15897
  const unique = [...new Map(items.map((item) => [item.assessmentId, item])).values()];
15885
15898
  const counts = emptySentimentCounts();
15886
15899
  for (const item of unique) counts[item.outcome]++;
15887
15900
  const judged = counts.favorable + counts.mixed + counts.unfavorable;
15901
+ const distinctSourceAnswers = new Set(unique.map((item) => item.sourceSnapshotId)).size;
15902
+ const ratedInItems = new Set(unique.filter((item) => JUDGED_OUTCOMES.has(item.outcome)).map((item) => item.sourceSnapshotId)).size;
15903
+ const ratedAnswers = Math.max(options.ratedAnswers ?? ratedInItems, ratedInItems);
15904
+ const eligibleAnswers = Math.max(options.eligibleAnswers ?? distinctSourceAnswers, distinctSourceAnswers);
15905
+ const ratedAnswerRate = options.disabled || eligibleAnswers === 0 ? null : roundRatio(ratedAnswers / eligibleAnswers, RatioUnits.fraction);
15888
15906
  const processing = counts.pending + counts.running + counts["waiting-to-retry"];
15889
15907
  const provisional = processing + counts.failed + counts.canceled > 0;
15890
15908
  const state = options.disabled ? "disabled" : unique.length === 0 ? "not-measured" : counts.canceled === unique.length ? "canceled" : counts.failed === unique.length ? "failed" : processing === unique.length ? "processing" : provisional ? "partial" : "complete";
@@ -15894,7 +15912,7 @@ function aggregateSentiment(items, options = {}) {
15894
15912
  return {
15895
15913
  state,
15896
15914
  provisional,
15897
- coverage: { selected: unique.length, eligibleAssessments: Math.max(options.eligibleAssessments ?? unique.length, unique.length), unadmittedAssessments: Math.max(0, (options.eligibleAssessments ?? unique.length) - unique.length), judged, distinctSourceAnswers: new Set(unique.map((item) => item.sourceSnapshotId)).size, counts, expectedProviderSlots: options.expectedProviderSlots ?? 0, completedProviderSlots: options.completedProviderSlots ?? 0 },
15915
+ coverage: { selected: unique.length, eligibleAssessments: Math.max(options.eligibleAssessments ?? unique.length, unique.length), unadmittedAssessments: Math.max(0, (options.eligibleAssessments ?? unique.length) - unique.length), judged, distinctSourceAnswers, eligibleAnswers, ratedAnswers, ratedAnswerRate, counts, expectedProviderSlots: options.expectedProviderSlots ?? 0, completedProviderSlots: options.completedProviderSlots ?? 0 },
15898
15916
  score: { favorableRate, mixedRate, unfavorableRate, favorableDisplay: sentimentRateDisplay(favorableRate), mixedDisplay: sentimentRateDisplay(mixedRate), unfavorableDisplay: sentimentRateDisplay(unfavorableRate), interval: options.disabled ? null : wilsonInterval(counts.favorable, judged), method: "wilson-independent-v1", limitation: SENTIMENT_INTERVAL_LIMITATION }
15899
15917
  };
15900
15918
  }
@@ -4,14 +4,14 @@ import {
4
4
  installSkills,
5
5
  loadConfigRaw,
6
6
  saveConfigPatch
7
- } from "./chunk-XGERCNUR.js";
7
+ } from "./chunk-PDOMOHOP.js";
8
8
  import {
9
9
  PACKAGE_VERSION
10
- } from "./chunk-K4356AGP.js";
10
+ } from "./chunk-DMU3SFC4.js";
11
11
  import {
12
12
  SKILL_MANIFEST_FILENAME,
13
13
  SkillsClients
14
- } from "./chunk-HAALQW4R.js";
14
+ } from "./chunk-LXHE4DVO.js";
15
15
 
16
16
  // src/skills-autosync.ts
17
17
  import fs from "fs";
@@ -5,7 +5,7 @@ import {
5
5
  PACKAGE_VERSION,
6
6
  canonryMcpTools,
7
7
  isMachineFormat
8
- } from "./chunk-K4356AGP.js";
8
+ } from "./chunk-DMU3SFC4.js";
9
9
  import {
10
10
  AGENT_PROVIDER_IDS,
11
11
  CANONRY_NPM_PACKAGE_URL,
@@ -50,7 +50,7 @@ import {
50
50
  skillsClientSchema,
51
51
  upgradeCaveatFor,
52
52
  upgradeCommandFor
53
- } from "./chunk-HAALQW4R.js";
53
+ } from "./chunk-LXHE4DVO.js";
54
54
 
55
55
  // src/config.ts
56
56
  import fs from "fs";
@@ -19,21 +19,21 @@ import {
19
19
  runWithUsageTags,
20
20
  saveConfigPatch,
21
21
  sentimentInstallReadiness
22
- } from "./chunk-XGERCNUR.js";
22
+ } from "./chunk-PDOMOHOP.js";
23
23
  import {
24
24
  computeFactorAverages,
25
25
  deleteSiteCrawlGraphLayout,
26
26
  persistSiteCrawlGraphLayout,
27
27
  prepareSiteCrawlGraphLayout,
28
28
  recordedSharePct
29
- } from "./chunk-6M7HSNXJ.js";
29
+ } from "./chunk-HTTYBQN4.js";
30
30
  import {
31
31
  CanonryMcpToolNames,
32
32
  CliError,
33
33
  PACKAGE_VERSION,
34
34
  canonryMcpTools,
35
35
  isMachineFormat
36
- } from "./chunk-K4356AGP.js";
36
+ } from "./chunk-DMU3SFC4.js";
37
37
  import {
38
38
  CC_CACHE_DIR,
39
39
  DUCKDB_SPEC,
@@ -214,7 +214,7 @@ import {
214
214
  siteLivenessState,
215
215
  toAlertView,
216
216
  usageCounters
217
- } from "./chunk-ZO62Z2WN.js";
217
+ } from "./chunk-B5W7HDCG.js";
218
218
  import {
219
219
  AGENT_MEMORY_VALUE_MAX_BYTES,
220
220
  AGENT_NONE,
@@ -414,7 +414,7 @@ import {
414
414
  visibilityReportRequestSchema,
415
415
  winnabilityClassLabel,
416
416
  withRetry
417
- } from "./chunk-HAALQW4R.js";
417
+ } from "./chunk-LXHE4DVO.js";
418
418
 
419
419
  // src/runtime-context.ts
420
420
  function cliRuntimeContext(env = process.env, stdio = process) {
@@ -7830,7 +7830,7 @@ function nonBlank(value) {
7830
7830
  return trimmed ? trimmed : void 0;
7831
7831
  }
7832
7832
  function resolveBuildCommit(env = process.env) {
7833
- const embedded = true ? "408113dd797bbfbe747b95111a724850117fb42b" : void 0;
7833
+ const embedded = true ? "fa1be433951042396fa94c96898efadbb4e1d212" : void 0;
7834
7834
  return nonBlank(embedded) ?? nonBlank(env.CANONRY_COMMIT);
7835
7835
  }
7836
7836
  function resolveInstanceIdentity(env = process.env) {
@@ -14454,7 +14454,7 @@ function readStoredGroundingSources(rawResponse) {
14454
14454
  return result2;
14455
14455
  }
14456
14456
  async function backfillInsightsCommand(project, opts) {
14457
- const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-MEIAMMLT.js");
14457
+ const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-6F63MYQ5.js");
14458
14458
  const config = loadConfig();
14459
14459
  const db = createClient(config.database);
14460
14460
  migrate(db);
@@ -16693,6 +16693,17 @@ var aeroModels = builtinModels();
16693
16693
  var DEFAULT_MAX_RETRIES = 2;
16694
16694
  var DEFAULT_MAX_OUTPUT_TOKENS = 32e3;
16695
16695
  var CANONRY_USER_AGENT = "canonry";
16696
+ var STAINLESS_HOST_HEADERS = {
16697
+ "X-Stainless-OS": null,
16698
+ "X-Stainless-Arch": null,
16699
+ "X-Stainless-Runtime-Version": null
16700
+ };
16701
+ var HOST_HEADERS = {
16702
+ "anthropic-messages": STAINLESS_HOST_HEADERS,
16703
+ "openai-responses": STAINLESS_HOST_HEADERS,
16704
+ "openai-completions": STAINLESS_HOST_HEADERS,
16705
+ "google-generative-ai": { "x-goog-api-client": CANONRY_USER_AGENT }
16706
+ };
16696
16707
  function outputCap(model) {
16697
16708
  return Math.min(model.maxTokens, DEFAULT_MAX_OUTPUT_TOKENS);
16698
16709
  }
@@ -16701,7 +16712,7 @@ function canonryDefaults(model, options) {
16701
16712
  ...options,
16702
16713
  maxRetries: options?.maxRetries ?? DEFAULT_MAX_RETRIES,
16703
16714
  maxTokens: options?.maxTokens ?? outputCap(model),
16704
- headers: { "User-Agent": CANONRY_USER_AGENT, ...options?.headers }
16715
+ headers: { "User-Agent": CANONRY_USER_AGENT, ...HOST_HEADERS[model.api], ...options?.headers }
16705
16716
  };
16706
16717
  }
16707
16718
  var aeroStreamFn = (model, context, options) => aeroModels.streamSimple(model, context, canonryDefaults(model, options));
@@ -18554,6 +18565,9 @@ async function connectStreamableHttp(server) {
18554
18565
  function isReadOnly(tool) {
18555
18566
  return tool.annotations?.readOnlyHint === true;
18556
18567
  }
18568
+ function isRemoteToolError(result2) {
18569
+ return typeof result2 === "object" && result2 !== null && "isError" in result2 && result2.isError === true;
18570
+ }
18557
18571
  function adaptRemoteTool(client, tool) {
18558
18572
  const parameters = Type6.Unsafe(
18559
18573
  tool.inputSchema ?? { type: "object", properties: {} }
@@ -18562,7 +18576,8 @@ function adaptRemoteTool(client, tool) {
18562
18576
  const result2 = await client.callTool({ name: tool.name, arguments: params });
18563
18577
  return {
18564
18578
  content: [{ type: "text", text: truncate(JSON.stringify(result2, null, 2)) }],
18565
- details: result2
18579
+ details: result2,
18580
+ isError: isRemoteToolError(result2)
18566
18581
  };
18567
18582
  };
18568
18583
  return {
@@ -19955,7 +19970,7 @@ function viewerAeroCaller(request, opts) {
19955
19970
  const principal = request.principal;
19956
19971
  return principal?.kind === "user" && principal.role === UserRoles.viewer ? principal.id : null;
19957
19972
  }
19958
- var VIEWER_HIDDEN_ASSISTANT_KEYS = ["api", "provider", "model", "responseId", "usage", "responseModel", "diagnostics", "providerThinkingLevel", "rawStopReason"];
19973
+ var VIEWER_HIDDEN_ASSISTANT_KEYS = ["api", "provider", "model", "responseId", "usage", "responseModel", "diagnostics", "providerThinkingLevel", "thinkingLevel", "rawStopReason"];
19959
19974
  var VIEWER_ERROR_MESSAGE = "Aero could not finish this answer. Try again, or ask an administrator if it keeps happening.";
19960
19975
  function viewerRedact(_key, value) {
19961
19976
  if (!value || typeof value !== "object" || value.role !== "assistant") return value;
package/dist/cli.js CHANGED
@@ -35,11 +35,11 @@ import {
35
35
  trackCliCommandFinished,
36
36
  trackEvent,
37
37
  waitForServerRuntimeStartup
38
- } from "./chunk-F4G7I7T7.js";
38
+ } from "./chunk-QFI47QVP.js";
39
39
  import {
40
40
  autoSyncSkills,
41
41
  formatAutoSyncNotice
42
- } from "./chunk-4NC5ZAC2.js";
42
+ } from "./chunk-MJ3QINUW.js";
43
43
  import {
44
44
  configExists,
45
45
  createApiClient,
@@ -56,13 +56,13 @@ import {
56
56
  saveConfig,
57
57
  saveConfigPatch,
58
58
  shouldPrintServeSkillsNudge
59
- } from "./chunk-XGERCNUR.js";
59
+ } from "./chunk-PDOMOHOP.js";
60
60
  import {
61
61
  DEFAULT_DEMO_TRUSTED_PROXIES,
62
62
  trustedProxiesProblem,
63
63
  trustedProxyProblem
64
64
  } from "./chunk-RB2F4D3Z.js";
65
- import "./chunk-6M7HSNXJ.js";
65
+ import "./chunk-HTTYBQN4.js";
66
66
  import {
67
67
  CliError,
68
68
  EXIT_SYSTEM_ERROR,
@@ -74,7 +74,7 @@ import {
74
74
  runMeasurementDraftAction,
75
75
  systemError,
76
76
  usageError
77
- } from "./chunk-K4356AGP.js";
77
+ } from "./chunk-DMU3SFC4.js";
78
78
  import {
79
79
  CLOUDFLARE_WORKER_BINDINGS,
80
80
  CLOUDFLARE_WORKER_GENERATED_MARKER,
@@ -89,7 +89,7 @@ import {
89
89
  queries,
90
90
  renderReportHtml,
91
91
  runs
92
- } from "./chunk-ZO62Z2WN.js";
92
+ } from "./chunk-B5W7HDCG.js";
93
93
  import {
94
94
  AdsDeliverySnapshotStatuses,
95
95
  AdsHistoricalCampaignRollupStatuses,
@@ -196,7 +196,7 @@ import {
196
196
  visibilityCompareSelectionSchema,
197
197
  visibilityReportRequestSchema,
198
198
  winnabilityClassSchema
199
- } from "./chunk-HAALQW4R.js";
199
+ } from "./chunk-LXHE4DVO.js";
200
200
 
201
201
  // src/cli.ts
202
202
  import { pathToFileURL } from "url";
@@ -461,13 +461,21 @@ async function showSentiment(project2, selection2, format) {
461
461
  if (machine(value, format)) return;
462
462
  printSummary(value);
463
463
  }
464
+ function ratedAnswersLine({ ratedAnswers, eligibleAnswers, ratedAnswerRate }) {
465
+ if (ratedAnswers === void 0 || eligibleAnswers === void 0) return null;
466
+ if (eligibleAnswers === 0) return "Rated: no answers yet";
467
+ if (ratedAnswerRate === null || ratedAnswerRate === void 0) return `Rated: Unavailable \xB7 ${eligibleAnswers} eligible ${eligibleAnswers === 1 ? "answer" : "answers"}`;
468
+ return `Rated: ${formatPercent(ratedAnswerRate, RatioUnits.fraction)} \xB7 ${ratedAnswers} of ${eligibleAnswers} ${eligibleAnswers === 1 ? "answer" : "answers"} rated`;
469
+ }
464
470
  function printSummary(value) {
465
471
  const label = value.selection.queryClass === "branded" ? "Branded" : "Non-brand";
466
472
  console.log(`${label} sentiment: ${value.state}${value.provisional ? " \xB7 provisional" : ""}`);
467
473
  if (value.reason) console.log(value.reason);
468
474
  console.log(`Favorable: ${value.score.favorableDisplay} \xB7 Mixed: ${value.score.mixedDisplay} \xB7 Unfavorable: ${value.score.unfavorableDisplay}`);
469
475
  console.log(`${label} favorable % = favorable / (favorable + mixed + unfavorable).`);
470
- console.log(`${value.coverage.judged} of ${value.coverage.selected} assessments judged \xB7 ${value.coverage.distinctSourceAnswers} distinct source answers`);
476
+ const rated = ratedAnswersLine(value.coverage);
477
+ if (rated) console.log(rated);
478
+ console.log(`${value.coverage.judged} of ${value.coverage.selected} assessments judged \xB7 ${value.coverage.distinctSourceAnswers} admitted source answers`);
471
479
  console.log(`${value.coverage.eligibleAssessments} eligible assessments \xB7 ${value.coverage.unadmittedAssessments} not yet admitted`);
472
480
  console.log(`Source provider slots: ${value.coverage.completedProviderSlots} of ${value.coverage.expectedProviderSlots}`);
473
481
  console.log(`Evaluation definition: ${value.selection.evaluationDefinitionId ?? "not measured"}`);
@@ -722,7 +730,7 @@ function parseDemoTrustedProxies(values) {
722
730
  async function demoCommand(options) {
723
731
  const { host, port } = parseDemoListenOptions(options);
724
732
  const trustProxy = parseDemoTrustedProxies(options.trustProxy);
725
- const { createDemoServer } = await import("./demo-server-54OUTZMY.js");
733
+ const { createDemoServer } = await import("./demo-server-VP6CP33U.js");
726
734
  const app = await createDemoServer({ trustProxy });
727
735
  let stopping = false;
728
736
  const stop = () => {
@@ -5,11 +5,11 @@ import {
5
5
  computeFactorAverages,
6
6
  layoutSiteCrawlGraphInput,
7
7
  persistSiteCrawlGraphLayout
8
- } from "./chunk-6M7HSNXJ.js";
8
+ } from "./chunk-HTTYBQN4.js";
9
9
  import {
10
10
  PACKAGE_VERSION,
11
11
  canonryMcpTools
12
- } from "./chunk-K4356AGP.js";
12
+ } from "./chunk-DMU3SFC4.js";
13
13
  import {
14
14
  HISTORY_WINDOW_RUNS,
15
15
  IntelligenceService,
@@ -85,7 +85,7 @@ import {
85
85
  siteCrawlPages,
86
86
  siteCrawlSnapshots,
87
87
  trafficSources
88
- } from "./chunk-ZO62Z2WN.js";
88
+ } from "./chunk-B5W7HDCG.js";
89
89
  import {
90
90
  RunKinds,
91
91
  SiteCrawlFetchStates,
@@ -112,7 +112,7 @@ import {
112
112
  roundPreservingTotal,
113
113
  siteAuditPageFactorSchema,
114
114
  wilsonInterval
115
- } from "./chunk-HAALQW4R.js";
115
+ } from "./chunk-LXHE4DVO.js";
116
116
 
117
117
  // src/demo-server.ts
118
118
  import { dirname, join as join2 } from "path";
package/dist/index.js CHANGED
@@ -3,14 +3,14 @@ import {
3
3
  createGoogleMarketingCredentialStore,
4
4
  createGoogleMarketingRuntime,
5
5
  createServer
6
- } from "./chunk-F4G7I7T7.js";
6
+ } from "./chunk-QFI47QVP.js";
7
7
  import {
8
8
  loadConfig
9
- } from "./chunk-XGERCNUR.js";
10
- import "./chunk-6M7HSNXJ.js";
11
- import "./chunk-K4356AGP.js";
12
- import "./chunk-ZO62Z2WN.js";
13
- import "./chunk-HAALQW4R.js";
9
+ } from "./chunk-PDOMOHOP.js";
10
+ import "./chunk-HTTYBQN4.js";
11
+ import "./chunk-DMU3SFC4.js";
12
+ import "./chunk-B5W7HDCG.js";
13
+ import "./chunk-LXHE4DVO.js";
14
14
  export {
15
15
  GoogleMarketingRuntimeError,
16
16
  createGoogleMarketingCredentialStore,
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  HISTORY_WINDOW_RUNS,
3
3
  IntelligenceService
4
- } from "./chunk-ZO62Z2WN.js";
5
- import "./chunk-HAALQW4R.js";
4
+ } from "./chunk-B5W7HDCG.js";
5
+ import "./chunk-LXHE4DVO.js";
6
6
  export {
7
7
  HISTORY_WINDOW_RUNS,
8
8
  IntelligenceService