@ainyc/canonry 4.190.0 → 4.190.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 (22) hide show
  1. package/README.md +1 -1
  2. package/assets/assets/{AuditHistoryPanel-wWLs088f.js → AuditHistoryPanel-Dob_85ay.js} +1 -1
  3. package/assets/assets/{BacklinksPage-DJEO5o9c.js → BacklinksPage-BDm4gQsa.js} +1 -1
  4. package/assets/assets/{HistoryPage-CV5bTBU6.js → HistoryPage-BUGJKNWJ.js} +1 -1
  5. package/assets/assets/{MeasurementPropertyPage-C7KLIAad.js → MeasurementPropertyPage-H2g4VdcA.js} +1 -1
  6. package/assets/assets/{ProjectPage-DIW1h05b.js → ProjectPage-d7iOSkrd.js} +7 -7
  7. package/assets/assets/{RunRow-C3Ryj_9u.js → RunRow-Cja3vahD.js} +1 -1
  8. package/assets/assets/{RunsPage-BxoEkZu3.js → RunsPage-BdVfLW9Z.js} +1 -1
  9. package/assets/assets/{SettingsPage-D_mB1JUZ.js → SettingsPage-Xw9rdDPd.js} +1 -1
  10. package/assets/assets/{SiteHealthSection-Dgqtz9J2.js → SiteHealthSection-CjioXMWy.js} +3 -3
  11. package/assets/assets/{TrafficPage-DgsWuDtv.js → TrafficPage-D5ZqJrJm.js} +1 -1
  12. package/assets/assets/{TrafficSourceDetailPage-BLWlQ8aT.js → TrafficSourceDetailPage-DB5V8cdH.js} +1 -1
  13. package/assets/assets/{extract-error-message-DHIHApUf.js → extract-error-message-lzuarNEg.js} +1 -1
  14. package/assets/assets/{index-nb8QHq99.js → index-YVHujfy1.js} +26 -26
  15. package/assets/assets/{react-sigma_core.esm.min-DzTADS1A.js → react-sigma_core.esm.min-Ddu-c40B.js} +1 -1
  16. package/assets/index.html +1 -1
  17. package/dist/{chunk-4NIQ3GMO.js → chunk-BE366UCM.js} +2 -2
  18. package/dist/{chunk-6POEZ7GT.js → chunk-ECPN4OUR.js} +74 -66
  19. package/dist/cli.js +2 -2
  20. package/dist/index.js +2 -2
  21. package/dist/{intelligence-service-WNASQFN4.js → intelligence-service-QCKX2W4G.js} +1 -1
  22. package/package.json +10 -10
@@ -1,4 +1,4 @@
1
- import{g as Bt,t as S,r as C}from"./vendor-tanstack-CYBjbqVr.js";import{e as Ht,G as Wt}from"./SiteHealthSection-Dgqtz9J2.js";import"./index-nb8QHq99.js";import"./vendor-radix-BpmvLvpp.js";import"./vendor-recharts-FA0uySU7.js";import"./vendor-lucide-dNHw1I5G.js";import"./vendor-markdown-9tTeP8v7.js";import"./vendor-yaml-GWJz5H2G.js";import"./ChartPrimitives-DLEICrrL.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-CYBjbqVr.js";import{e as Ht,G as Wt}from"./SiteHealthSection-CjioXMWy.js";import"./index-YVHujfy1.js";import"./vendor-radix-BpmvLvpp.js";import"./vendor-recharts-FA0uySU7.js";import"./vendor-lucide-dNHw1I5G.js";import"./vendor-markdown-9tTeP8v7.js";import"./vendor-yaml-GWJz5H2G.js";import"./ChartPrimitives-DLEICrrL.js";function Vt(r,n){if(typeof r!="object"||!r)return r;var i=r[Symbol.toPrimitive];if(i!==void 0){var e=i.call(r,n);if(typeof e!="object")return e;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(r)}function ae(r){var n=Vt(r,"string");return typeof n=="symbol"?n:n+""}function A(r,n){if(!(r instanceof n))throw new TypeError("Cannot call a class as a function")}function He(r,n){for(var i=0;i<n.length;i++){var e=n[i];e.enumerable=e.enumerable||!1,e.configurable=!0,"value"in e&&(e.writable=!0),Object.defineProperty(r,ae(e.key),e)}}function L(r,n,i){return n&&He(r.prototype,n),i&&He(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r}function Q(r){return Q=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},Q(r)}function yt(){try{var r=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(yt=function(){return!!r})()}function jt(r){if(r===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return r}function Zt(r,n){if(n&&(typeof n=="object"||typeof n=="function"))return n;if(n!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return jt(r)}function I(r,n,i){return n=Q(n),Zt(r,yt()?Reflect.construct(n,i||[],Q(r).constructor):n.apply(r,i))}function xe(r,n){return xe=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(i,e){return i.__proto__=e,i},xe(r,n)}function G(r,n){if(typeof n!="function"&&n!==null)throw new TypeError("Super expression must either be null or a function");r.prototype=Object.create(n&&n.prototype,{constructor:{value:r,writable:!0,configurable:!0}}),Object.defineProperty(r,"prototype",{writable:!1}),n&&xe(r,n)}function qt(r){if(Array.isArray(r))return r}function Yt(r,n){var i=r==null?null:typeof Symbol<"u"&&r[Symbol.iterator]||r["@@iterator"];if(i!=null){var e,t,a,o,s=[],l=!0,h=!1;try{if(a=(i=i.call(r)).next,n===0){if(Object(i)!==i)return;l=!1}else for(;!(l=(e=a.call(i)).done)&&(s.push(e.value),s.length!==n);l=!0);}catch(u){h=!0,t=u}finally{try{if(!l&&i.return!=null&&(o=i.return(),Object(o)!==o))return}finally{if(h)throw t}}return s}}function Se(r,n){(n==null||n>r.length)&&(n=r.length);for(var i=0,e=Array(n);i<n;i++)e[i]=r[i];return e}function Tt(r,n){if(r){if(typeof r=="string")return Se(r,n);var i={}.toString.call(r).slice(8,-1);return i==="Object"&&r.constructor&&(i=r.constructor.name),i==="Map"||i==="Set"?Array.from(r):i==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?Se(r,n):void 0}}function Xt(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
2
2
  In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function ee(r,n){return qt(r)||Yt(r,n)||Tt(r,n)||Xt()}var pe={black:"#000000",silver:"#C0C0C0",gray:"#808080",grey:"#808080",white:"#FFFFFF",maroon:"#800000",red:"#FF0000",purple:"#800080",fuchsia:"#FF00FF",green:"#008000",lime:"#00FF00",olive:"#808000",yellow:"#FFFF00",navy:"#000080",blue:"#0000FF",teal:"#008080",aqua:"#00FFFF",darkblue:"#00008B",mediumblue:"#0000CD",darkgreen:"#006400",darkcyan:"#008B8B",deepskyblue:"#00BFFF",darkturquoise:"#00CED1",mediumspringgreen:"#00FA9A",springgreen:"#00FF7F",cyan:"#00FFFF",midnightblue:"#191970",dodgerblue:"#1E90FF",lightseagreen:"#20B2AA",forestgreen:"#228B22",seagreen:"#2E8B57",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",limegreen:"#32CD32",mediumseagreen:"#3CB371",turquoise:"#40E0D0",royalblue:"#4169E1",steelblue:"#4682B4",darkslateblue:"#483D8B",mediumturquoise:"#48D1CC",indigo:"#4B0082",darkolivegreen:"#556B2F",cadetblue:"#5F9EA0",cornflowerblue:"#6495ED",rebeccapurple:"#663399",mediumaquamarine:"#66CDAA",dimgray:"#696969",dimgrey:"#696969",slateblue:"#6A5ACD",olivedrab:"#6B8E23",slategray:"#708090",slategrey:"#708090",lightslategray:"#778899",lightslategrey:"#778899",mediumslateblue:"#7B68EE",lawngreen:"#7CFC00",chartreuse:"#7FFF00",aquamarine:"#7FFFD4",skyblue:"#87CEEB",lightskyblue:"#87CEFA",blueviolet:"#8A2BE2",darkred:"#8B0000",darkmagenta:"#8B008B",saddlebrown:"#8B4513",darkseagreen:"#8FBC8F",lightgreen:"#90EE90",mediumpurple:"#9370DB",darkviolet:"#9400D3",palegreen:"#98FB98",darkorchid:"#9932CC",yellowgreen:"#9ACD32",sienna:"#A0522D",brown:"#A52A2A",darkgray:"#A9A9A9",darkgrey:"#A9A9A9",lightblue:"#ADD8E6",greenyellow:"#ADFF2F",paleturquoise:"#AFEEEE",lightsteelblue:"#B0C4DE",powderblue:"#B0E0E6",firebrick:"#B22222",darkgoldenrod:"#B8860B",mediumorchid:"#BA55D3",rosybrown:"#BC8F8F",darkkhaki:"#BDB76B",mediumvioletred:"#C71585",indianred:"#CD5C5C",peru:"#CD853F",chocolate:"#D2691E",tan:"#D2B48C",lightgray:"#D3D3D3",lightgrey:"#D3D3D3",thistle:"#D8BFD8",orchid:"#DA70D6",goldenrod:"#DAA520",palevioletred:"#DB7093",crimson:"#DC143C",gainsboro:"#DCDCDC",plum:"#DDA0DD",burlywood:"#DEB887",lightcyan:"#E0FFFF",lavender:"#E6E6FA",darksalmon:"#E9967A",violet:"#EE82EE",palegoldenrod:"#EEE8AA",lightcoral:"#F08080",khaki:"#F0E68C",aliceblue:"#F0F8FF",honeydew:"#F0FFF0",azure:"#F0FFFF",sandybrown:"#F4A460",wheat:"#F5DEB3",beige:"#F5F5DC",whitesmoke:"#F5F5F5",mintcream:"#F5FFFA",ghostwhite:"#F8F8FF",salmon:"#FA8072",antiquewhite:"#FAEBD7",linen:"#FAF0E6",lightgoldenrodyellow:"#FAFAD2",oldlace:"#FDF5E6",magenta:"#FF00FF",deeppink:"#FF1493",orangered:"#FF4500",tomato:"#FF6347",hotpink:"#FF69B4",coral:"#FF7F50",darkorange:"#FF8C00",lightsalmon:"#FFA07A",orange:"#FFA500",lightpink:"#FFB6C1",pink:"#FFC0CB",gold:"#FFD700",peachpuff:"#FFDAB9",navajowhite:"#FFDEAD",moccasin:"#FFE4B5",bisque:"#FFE4C4",mistyrose:"#FFE4E1",blanchedalmond:"#FFEBCD",papayawhip:"#FFEFD5",lavenderblush:"#FFF0F5",seashell:"#FFF5EE",cornsilk:"#FFF8DC",lemonchiffon:"#FFFACD",floralwhite:"#FFFAF0",snow:"#FFFAFA",lightyellow:"#FFFFE0",ivory:"#FFFFF0"},Ct=new Int8Array(4),be=new Int32Array(Ct.buffer,0,1),$t=new Float32Array(Ct.buffer,0,1),Kt=/^\s*rgba?\s*\(/,Jt=/^\s*rgba?\s*\(\s*([0-9]*)\s*,\s*([0-9]*)\s*,\s*([0-9]*)(?:\s*,\s*(.*)?)?\)\s*$/;function Qt(r){var n=0,i=0,e=0,t=1;if(r[0]==="#")r.length===4?(n=parseInt(r.charAt(1)+r.charAt(1),16),i=parseInt(r.charAt(2)+r.charAt(2),16),e=parseInt(r.charAt(3)+r.charAt(3),16)):(n=parseInt(r.charAt(1)+r.charAt(2),16),i=parseInt(r.charAt(3)+r.charAt(4),16),e=parseInt(r.charAt(5)+r.charAt(6),16)),r.length===9&&(t=parseInt(r.charAt(7)+r.charAt(8),16)/255);else if(Kt.test(r)){var a=r.match(Jt);a&&(n=+a[1],i=+a[2],e=+a[3],a[4]&&(t=+a[4]))}return{r:n,g:i,b:e,a:t}}var J={};for(var le in pe)J[le]=oe(pe[le]),J[pe[le]]=J[le];function Rt(r,n,i,e,t){return be[0]=e<<24|i<<16|n<<8|r,be[0]=be[0]&4278190079,$t[0]}function oe(r){if(r=r.toLowerCase(),typeof J[r]<"u")return J[r];var n=Qt(r),i=n.r,e=n.g,t=n.b,a=n.a;a=a*255|0;var o=Rt(i,e,t,a);return J[r]=o,o}var Ee={};function _t(r){if(typeof Ee[r]<"u")return Ee[r];var n=(r&16711680)>>>16,i=(r&65280)>>>8,e=r&255,t=255,a=Rt(n,i,e,t);return Ee[r]=a,a}function We(r,n,i,e){return i+(n<<8)+(r<<16)}function Ve(r,n,i,e,t,a){var o=Math.floor(i/a*t),s=Math.floor(r.drawingBufferHeight/a-e/a*t),l=new Uint8Array(4);r.bindFramebuffer(r.FRAMEBUFFER,n),r.readPixels(o,s,1,1,r.RGBA,r.UNSIGNED_BYTE,l);var h=ee(l,4),u=h[0],d=h[1],f=h[2],g=h[3];return[u,d,f,g]}function c(r,n,i){return(n=ae(n))in r?Object.defineProperty(r,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[n]=i,r}function je(r,n){var i=Object.keys(r);if(Object.getOwnPropertySymbols){var e=Object.getOwnPropertySymbols(r);n&&(e=e.filter(function(t){return Object.getOwnPropertyDescriptor(r,t).enumerable})),i.push.apply(i,e)}return i}function b(r){for(var n=1;n<arguments.length;n++){var i=arguments[n]!=null?arguments[n]:{};n%2?je(Object(i),!0).forEach(function(e){c(r,e,i[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(i)):je(Object(i)).forEach(function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(i,e))})}return r}function ei(r,n){for(;!{}.hasOwnProperty.call(r,n)&&(r=Q(r))!==null;);return r}function Ae(){return Ae=typeof Reflect<"u"&&Reflect.get?Reflect.get.bind():function(r,n,i){var e=ei(r,n);if(e){var t=Object.getOwnPropertyDescriptor(e,n);return t.get?t.get.call(arguments.length<3?r:i):t.value}},Ae.apply(null,arguments)}function wt(r,n,i,e){var t=Ae(Q(r.prototype),n,i);return typeof t=="function"?function(a){return t.apply(i,a)}:t}function ti(r){return r.normalized?1:r.size}function ye(r){var n=0;return r.forEach(function(i){return n+=ti(i)}),n}function xt(r,n,i){var e=r==="VERTEX"?n.VERTEX_SHADER:n.FRAGMENT_SHADER,t=n.createShader(e);if(t===null)throw new Error("loadShader: error while creating the shader");n.shaderSource(t,i),n.compileShader(t);var a=n.getShaderParameter(t,n.COMPILE_STATUS);if(!a){var o=n.getShaderInfoLog(t);throw n.deleteShader(t),new Error(`loadShader: error while compiling the shader:
3
3
  `.concat(o,`
4
4
  `).concat(i))}return t}function ii(r,n){return xt("VERTEX",r,n)}function ri(r,n){return xt("FRAGMENT",r,n)}function ni(r,n){var i=r.createProgram();if(i===null)throw new Error("loadProgram: error while creating the program.");var e,t;for(e=0,t=n.length;e<t;e++)r.attachShader(i,n[e]);r.linkProgram(i);var a=r.getProgramParameter(i,r.LINK_STATUS);if(!a){var o=r.getProgramInfoLog(i);throw r.deleteProgram(i),new Error("loadProgram: error while linking the program: ".concat(o))}return i}function Ze(r){var n=r.gl,i=r.buffer,e=r.program,t=r.vertexShader,a=r.fragmentShader;n.deleteShader(t),n.deleteShader(a),n.deleteProgram(e),n.deleteBuffer(i)}var qe=`#define PICKING_MODE
package/assets/index.html CHANGED
@@ -12,7 +12,7 @@
12
12
  <link rel="icon" type="image/png" sizes="32x32" href="./favicon-32.png" />
13
13
  <link rel="apple-touch-icon" href="./apple-touch-icon.png" />
14
14
  <title>Canonry</title>
15
- <script type="module" crossorigin src="./assets/index-nb8QHq99.js"></script>
15
+ <script type="module" crossorigin src="./assets/index-YVHujfy1.js"></script>
16
16
  <link rel="modulepreload" crossorigin href="./assets/vendor-tanstack-CYBjbqVr.js">
17
17
  <link rel="modulepreload" crossorigin href="./assets/vendor-radix-BpmvLvpp.js">
18
18
  <link rel="modulepreload" crossorigin href="./assets/vendor-recharts-FA0uySU7.js">
@@ -162,7 +162,7 @@ import {
162
162
  siteCrawlSnapshots,
163
163
  toAlertView,
164
164
  usageCounters
165
- } from "./chunk-6POEZ7GT.js";
165
+ } from "./chunk-ECPN4OUR.js";
166
166
  import {
167
167
  AGENT_MEMORY_VALUE_MAX_BYTES,
168
168
  AGENT_PROVIDER_IDS,
@@ -12041,7 +12041,7 @@ function readStoredGroundingSources(rawResponse) {
12041
12041
  return result;
12042
12042
  }
12043
12043
  async function backfillInsightsCommand(project, opts) {
12044
- const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-WNASQFN4.js");
12044
+ const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-QCKX2W4G.js");
12045
12045
  const config = loadConfig();
12046
12046
  const db = createClient(config.database);
12047
12047
  migrate(db);
@@ -13805,54 +13805,61 @@ function scopeNamedShareOfVoice(identities, answered2, prepared) {
13805
13805
  entries: credited.map((row) => ({ ...row, share: row.credits / denominator }))
13806
13806
  };
13807
13807
  }
13808
- function buildMeasurementOverview(input, options = {}) {
13808
+ function createMeasurementOverviewEvaluator(input, options = {}) {
13809
13809
  const prepared = prepareReport(input, options);
13810
13810
  const indexes = buildMeasurementOverviewIndexes(input, prepared, options.onEvidenceIndexed);
13811
- const targetIds = new Set(input.scopeTargetIds);
13812
- const edges = indexedScopeEdges(indexes, targetIds);
13813
- const slots = indexedSlotsForEdges(edges, indexes);
13814
- const answered2 = indexedAnsweredSlots(slots, indexes);
13815
- const properties = sortedUnique([...targetIds]).map((targetId) => {
13816
- const ownEdges = indexes.targetEdgesByTargetId.get(targetId) ?? [];
13817
- const ownSlots = indexedSlotsForEdges(ownEdges, indexes);
13818
- const ownAnswered = indexedAnsweredSlots(ownSlots, indexes);
13819
- const ownTargets = indexes.targetsById.get(targetId);
13820
- return {
13821
- targetId,
13822
- mentionCoverage: targetMentionRate(ownTargets, ownSlots, ownAnswered, indexes),
13823
- citationCoverage: indexedScopeCitationRate(ownSlots, ownEdges, indexes),
13824
- // Each engine is measured over the slots it owns, using exactly the
13825
- // functions the Property total uses. A per-engine reading is therefore
13826
- // withheld for the same reasons the total is, never rounded down to zero.
13827
- providers: providersFor(ownSlots).map((provider) => {
13828
- const providerSlots = ownSlots.filter((slot) => slot.provider === provider);
13811
+ return {
13812
+ evaluate(scopeTargetIds, namedIdentities = input.namedIdentities) {
13813
+ const targetIds = new Set(scopeTargetIds);
13814
+ const edges = indexedScopeEdges(indexes, targetIds);
13815
+ const slots = indexedSlotsForEdges(edges, indexes);
13816
+ const answered2 = indexedAnsweredSlots(slots, indexes);
13817
+ const properties = sortedUnique([...targetIds]).map((targetId) => {
13818
+ const ownEdges = indexes.targetEdgesByTargetId.get(targetId) ?? [];
13819
+ const ownSlots = indexedSlotsForEdges(ownEdges, indexes);
13820
+ const ownAnswered = indexedAnsweredSlots(ownSlots, indexes);
13821
+ const ownTargets = indexes.targetsById.get(targetId);
13829
13822
  return {
13830
- provider,
13831
- mentionCoverage: targetMentionRate(
13832
- ownTargets,
13833
- providerSlots,
13834
- indexedAnsweredSlots(providerSlots, indexes),
13835
- indexes
13836
- ),
13837
- citationCoverage: indexedScopeCitationRate(providerSlots, ownEdges, indexes)
13823
+ targetId,
13824
+ mentionCoverage: targetMentionRate(ownTargets, ownSlots, ownAnswered, indexes),
13825
+ citationCoverage: indexedScopeCitationRate(ownSlots, ownEdges, indexes),
13826
+ // Each engine is measured over the slots it owns, using exactly the
13827
+ // functions the Property total uses. A per-engine reading is therefore
13828
+ // withheld for the same reasons the total is, never rounded down to zero.
13829
+ providers: providersFor(ownSlots).map((provider) => {
13830
+ const providerSlots = ownSlots.filter((slot) => slot.provider === provider);
13831
+ return {
13832
+ provider,
13833
+ mentionCoverage: targetMentionRate(
13834
+ ownTargets,
13835
+ providerSlots,
13836
+ indexedAnsweredSlots(providerSlots, indexes),
13837
+ indexes
13838
+ ),
13839
+ citationCoverage: indexedScopeCitationRate(providerSlots, ownEdges, indexes)
13840
+ };
13841
+ }),
13842
+ flags: indexes.ambiguousEvidenceKeysByTargetId.get(targetId)?.size ?? 0
13838
13843
  };
13839
- }),
13840
- flags: indexes.ambiguousEvidenceKeysByTargetId.get(targetId)?.size ?? 0
13841
- };
13842
- });
13843
- return {
13844
- eligibleSlots: slots.length,
13845
- answeredSlots: answered2.length,
13846
- includesHistoricalData: prepared.diagnostics.bridgedObservationIds.length > 0 || prepared.diagnostics.historicalObservationIds.length > 0,
13847
- propertiesMentioned: scopePropertiesMentioned(input, targetIds, slots, answered2, prepared),
13848
- mentionCoverage: scopeMentionRate(input, targetIds, slots, answered2, prepared),
13849
- citationCoverage: indexedScopeCitationRate(slots, edges, indexes),
13850
- brandPresence: scopeBrandPresence(input, slots, answered2, prepared),
13851
- namedShareOfVoice: scopeNamedShareOfVoice(input.namedIdentities ?? [], answered2, prepared),
13852
- properties,
13853
- flags: properties.reduce((total, row) => total + row.flags, 0)
13844
+ });
13845
+ return {
13846
+ eligibleSlots: slots.length,
13847
+ answeredSlots: answered2.length,
13848
+ includesHistoricalData: prepared.diagnostics.bridgedObservationIds.length > 0 || prepared.diagnostics.historicalObservationIds.length > 0,
13849
+ propertiesMentioned: scopePropertiesMentioned(input, targetIds, slots, answered2, prepared),
13850
+ mentionCoverage: scopeMentionRate(input, targetIds, slots, answered2, prepared),
13851
+ citationCoverage: indexedScopeCitationRate(slots, edges, indexes),
13852
+ brandPresence: scopeBrandPresence(input, slots, answered2, prepared),
13853
+ namedShareOfVoice: scopeNamedShareOfVoice(namedIdentities ?? [], answered2, prepared),
13854
+ properties,
13855
+ flags: properties.reduce((total, row) => total + row.flags, 0)
13856
+ };
13857
+ }
13854
13858
  };
13855
13859
  }
13860
+ function buildMeasurementOverview(input, options = {}) {
13861
+ return createMeasurementOverviewEvaluator(input, options).evaluate(input.scopeTargetIds, input.namedIdentities);
13862
+ }
13856
13863
  function buildMeasurementEvidence(input, options = {}) {
13857
13864
  const prepared = prepareReport(input, options);
13858
13865
  return { answers: prepared.answers, evidence: prepared.evidence, diagnostics: prepared.diagnostics };
@@ -21408,16 +21415,16 @@ function filteredOverviewWithDb(db, active, plan, run, filters, targetKeys) {
21408
21415
  const location = filters.location === void 0 ? void 0 : normalizeMeasurementLocation(filters.location);
21409
21416
  const expectedSlots = materialized.input.expectedSlots.filter((slot) => (provider === void 0 || normalizeText2(slot.provider) === provider) && (location === void 0 || normalizeMeasurementLocation(slot.location) === location));
21410
21417
  const usageEdges = materialized.input.usageEdges.filter((edge) => filters.queryClass === "all" || materialized.edgeQueryClass.get(edge.id) === filters.queryClass);
21411
- return {
21412
- materialized,
21418
+ const evaluator = createMeasurementOverviewEvaluator({
21419
+ ...materialized.input,
21413
21420
  expectedSlots,
21414
21421
  usageEdges,
21415
- overview: buildMeasurementOverview({
21416
- ...materialized.input,
21417
- expectedSlots,
21418
- usageEdges,
21419
- scopeTargetIds: [...targetKeys]
21420
- })
21422
+ scopeTargetIds: [...targetKeys]
21423
+ });
21424
+ return {
21425
+ materialized,
21426
+ evaluator,
21427
+ overview: evaluator.evaluate(targetKeys)
21421
21428
  };
21422
21429
  }
21423
21430
  function targetAnswers(plan, target, materialized, filters) {
@@ -21537,16 +21544,11 @@ function targetKeysForRun(plan, run, requested, requireEntireScope) {
21537
21544
  }
21538
21545
  return selected;
21539
21546
  }
21540
- function marketRollup(plan, run, materialized, expectedSlots, usageEdges, scopedToOneGroup) {
21547
+ function marketRollup(plan, run, evaluator, scopedToOneGroup) {
21541
21548
  if (scopedToOneGroup) return [];
21542
21549
  return plan.groups.map((group) => {
21543
21550
  const targetKeys = targetKeysForRun(plan, run, group.targetKeys, false);
21544
- const overview = buildMeasurementOverview({
21545
- ...materialized.input,
21546
- expectedSlots,
21547
- usageEdges,
21548
- scopeTargetIds: targetKeys
21549
- });
21551
+ const overview = evaluator.evaluate(targetKeys);
21550
21552
  return {
21551
21553
  groupKey: group.stableKey,
21552
21554
  label: group.label,
@@ -21618,22 +21620,28 @@ function portfolioResponse(db, active, plan, query) {
21618
21620
  truncated: rows2.length > limit2
21619
21621
  });
21620
21622
  }
21621
- const { materialized, overview, expectedSlots: filteredSlots, usageEdges: filteredEdges } = filteredOverviewWithDb(db, active, plan, run, filters, targetKeys);
21623
+ const { materialized, overview, evaluator } = filteredOverviewWithDb(db, active, plan, run, filters, targetKeys);
21622
21624
  const measured = new Map(overview.properties.map((row) => [row.targetId, row]));
21623
- const rows = targets.map((target) => {
21625
+ const ranked = targets.map((target) => {
21624
21626
  const row = measured.get(target.stableKey);
21625
- const recommendations = recommendationRows(target, targetAnswers(plan, target, materialized, filters));
21626
21627
  return {
21628
+ target,
21627
21629
  ...propertyDto2(target),
21628
21630
  mentionCoverage: row ? coverageMetric2(row.mentionCoverage) : unavailable3("no_population"),
21629
21631
  citationCoverage: row ? coverageMetric2(row.citationCoverage) : unavailable3("no_population"),
21630
- flags: row?.flags ?? 0,
21632
+ flags: row?.flags ?? 0
21633
+ };
21634
+ }).sort(compareWeakest);
21635
+ const limit = query.limit ?? DEFAULT_LIMIT3;
21636
+ const rows = ranked.slice(0, limit).map(({ target, ...row }) => {
21637
+ const recommendations = recommendationRows(target, targetAnswers(plan, target, materialized, filters));
21638
+ return {
21639
+ ...row,
21631
21640
  recommendedInstead: recommendations.slice(0, 5).map(({ name, occurrences }) => ({ name, occurrences })),
21632
21641
  recommendedInsteadTotal: recommendations.length,
21633
21642
  recommendedInsteadTruncated: recommendations.length > 5
21634
21643
  };
21635
- }).sort(compareWeakest);
21636
- const limit = query.limit ?? DEFAULT_LIMIT3;
21644
+ });
21637
21645
  return measurementPortfolioSummaryResponseSchema.parse({
21638
21646
  portfolio: {
21639
21647
  groupKey: group?.stableKey ?? null,
@@ -21648,9 +21656,9 @@ function portfolioResponse(db, active, plan, query) {
21648
21656
  citationCoverage: coverageMetric2(overview.citationCoverage)
21649
21657
  },
21650
21658
  weakestProperties: rows.slice(0, limit),
21651
- markets: marketRollup(plan, run, materialized, filteredSlots, filteredEdges, group !== void 0),
21652
- totalProperties: rows.length,
21653
- truncated: rows.length > limit
21659
+ markets: marketRollup(plan, run, evaluator, group !== void 0),
21660
+ totalProperties: ranked.length,
21661
+ truncated: ranked.length > limit
21654
21662
  });
21655
21663
  }
21656
21664
  function propertyCompetitorsResponse(db, active, plan, query) {
package/dist/cli.js CHANGED
@@ -28,7 +28,7 @@ import {
28
28
  trackCliCommandFinished,
29
29
  trackEvent,
30
30
  waitForServerRuntimeStartup
31
- } from "./chunk-4NIQ3GMO.js";
31
+ } from "./chunk-BE366UCM.js";
32
32
  import {
33
33
  autoSyncSkills,
34
34
  formatAutoSyncNotice
@@ -72,7 +72,7 @@ import {
72
72
  projects,
73
73
  queries,
74
74
  renderReportHtml
75
- } from "./chunk-6POEZ7GT.js";
75
+ } from "./chunk-ECPN4OUR.js";
76
76
  import {
77
77
  AdsDeliverySnapshotStatuses,
78
78
  AdsHistoricalCampaignRollupStatuses,
package/dist/index.js CHANGED
@@ -3,11 +3,11 @@ import {
3
3
  createGoogleMarketingCredentialStore,
4
4
  createGoogleMarketingRuntime,
5
5
  createServer
6
- } from "./chunk-4NIQ3GMO.js";
6
+ } from "./chunk-BE366UCM.js";
7
7
  import {
8
8
  loadConfig
9
9
  } from "./chunk-32QBVRMN.js";
10
- import "./chunk-6POEZ7GT.js";
10
+ import "./chunk-ECPN4OUR.js";
11
11
  import "./chunk-ROPJUNQN.js";
12
12
  export {
13
13
  GoogleMarketingRuntimeError,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  IntelligenceService
3
- } from "./chunk-6POEZ7GT.js";
3
+ } from "./chunk-ECPN4OUR.js";
4
4
  import "./chunk-ROPJUNQN.js";
5
5
  export {
6
6
  IntelligenceService
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ainyc/canonry",
3
- "version": "4.190.0",
3
+ "version": "4.190.1",
4
4
  "type": "module",
5
5
  "description": "Self-hosted AI visibility (AEO) platform: track how ChatGPT, Claude, Gemini, and Perplexity cite your domain, join it with Search Console, GA4, server-side traffic, and paid media, and fix what you find through agent tools (CLI, REST, MCP). Local SQLite.",
6
6
  "license": "FSL-1.1-ALv2",
@@ -71,30 +71,30 @@
71
71
  "tsup": "^8.5.1",
72
72
  "tsx": "^4.19.0",
73
73
  "@ainyc/canonry-web": "0.0.0",
74
+ "@ainyc/canonry-api-client": "0.0.0",
75
+ "@ainyc/canonry-config": "0.0.0",
74
76
  "@ainyc/canonry-api-routes": "0.0.0",
75
77
  "@ainyc/canonry-contracts": "0.0.0",
76
- "@ainyc/canonry-config": "0.0.0",
77
- "@ainyc/canonry-api-client": "0.0.0",
78
+ "@ainyc/canonry-db": "0.0.0",
78
79
  "@ainyc/canonry-integration-bing": "0.0.0",
79
80
  "@ainyc/canonry-integration-cloud-run": "0.0.0",
80
81
  "@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
81
- "@ainyc/canonry-db": "0.0.0",
82
- "@ainyc/canonry-integration-commoncrawl": "0.0.0",
83
82
  "@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
84
- "@ainyc/canonry-integration-google-ads": "0.0.0",
83
+ "@ainyc/canonry-integration-commoncrawl": "0.0.0",
85
84
  "@ainyc/canonry-integration-google": "0.0.0",
85
+ "@ainyc/canonry-integration-google-ads": "0.0.0",
86
+ "@ainyc/canonry-integration-google-business-profile": "0.0.0",
86
87
  "@ainyc/canonry-integration-google-places": "0.0.0",
87
88
  "@ainyc/canonry-integration-google-tag-manager": "0.0.0",
88
- "@ainyc/canonry-integration-google-business-profile": "0.0.0",
89
89
  "@ainyc/canonry-integration-openai-ads": "0.0.0",
90
90
  "@ainyc/canonry-integration-wordpress": "0.0.0",
91
- "@ainyc/canonry-intelligence": "0.0.0",
92
91
  "@ainyc/canonry-integration-traffic": "0.0.0",
93
- "@ainyc/canonry-provider-cdp": "0.0.0",
94
92
  "@ainyc/canonry-provider-claude": "0.0.0",
93
+ "@ainyc/canonry-provider-cdp": "0.0.0",
94
+ "@ainyc/canonry-intelligence": "0.0.0",
95
95
  "@ainyc/canonry-provider-gemini": "0.0.0",
96
- "@ainyc/canonry-provider-openai": "0.0.0",
97
96
  "@ainyc/canonry-provider-local": "0.0.0",
97
+ "@ainyc/canonry-provider-openai": "0.0.0",
98
98
  "@ainyc/canonry-provider-perplexity": "0.0.0"
99
99
  },
100
100
  "scripts": {