@ainyc/canonry 4.188.2 → 4.188.3

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 (27) hide show
  1. package/assets/assets/{AuditHistoryPanel-BB7rr4vG.js → AuditHistoryPanel-C58OHinE.js} +1 -1
  2. package/assets/assets/{BacklinksPage-8dDuc28f.js → BacklinksPage-BXHARmkv.js} +1 -1
  3. package/assets/assets/{HistoryPage-CCvbnLuu.js → HistoryPage-DGHy5AST.js} +1 -1
  4. package/assets/assets/{MeasurementPropertyPage-BrrQ6PvC.js → MeasurementPropertyPage-Dhzw05Kj.js} +1 -1
  5. package/assets/assets/{ProjectPage-DNT9kgFA.js → ProjectPage-BkXYHYxW.js} +1 -1
  6. package/assets/assets/{RunRow-CmgxzVdi.js → RunRow-DWVXPbMq.js} +1 -1
  7. package/assets/assets/{RunsPage-C45l2Esz.js → RunsPage-Bs-wYMIK.js} +1 -1
  8. package/assets/assets/{SettingsPage-CpYnUN8n.js → SettingsPage-wP-BxKXV.js} +1 -1
  9. package/assets/assets/{SiteHealthSection-D0WRI8jf.js → SiteHealthSection-weOW2a99.js} +3 -3
  10. package/assets/assets/{TrafficPage-D632bq2a.js → TrafficPage-BKPq62Do.js} +1 -1
  11. package/assets/assets/{TrafficSourceDetailPage-DPBUcLs4.js → TrafficSourceDetailPage-BfzMTwYB.js} +1 -1
  12. package/assets/assets/{extract-error-message-DFIwOwb8.js → extract-error-message-BoqECTcn.js} +1 -1
  13. package/assets/assets/index-KTeRanN1.css +1 -0
  14. package/assets/assets/{index-D_ut_IJW.js → index-gmvpT868.js} +30 -30
  15. package/assets/assets/{react-sigma_core.esm.min-BtdnOf_z.js → react-sigma_core.esm.min-Gf0WvNYq.js} +1 -1
  16. package/assets/index.html +2 -2
  17. package/dist/{chunk-EBLUZCIX.js → chunk-3HZELBZZ.js} +27 -13
  18. package/dist/{chunk-H25PK25P.js → chunk-7NMMQ7QO.js} +4 -4
  19. package/dist/{chunk-HBXA2APL.js → chunk-AC3ZIRHR.js} +61 -25
  20. package/dist/{chunk-FUCEQ5C5.js → chunk-OXYM6VCJ.js} +1 -1
  21. package/dist/{chunk-5NAOIDJM.js → chunk-VJRQTKUB.js} +2 -2
  22. package/dist/cli.js +5 -5
  23. package/dist/index.js +4 -4
  24. package/dist/{intelligence-service-SLL5HWV6.js → intelligence-service-GMG2S55U.js} +2 -2
  25. package/dist/mcp.js +3 -3
  26. package/package.json +13 -13
  27. package/assets/assets/index-DLB5x_Yh.css +0 -1
@@ -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-D0WRI8jf.js";import"./index-D_ut_IJW.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-weOW2a99.js";import"./index-gmvpT868.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,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-D_ut_IJW.js"></script>
15
+ <script type="module" crossorigin src="./assets/index-gmvpT868.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">
19
19
  <link rel="modulepreload" crossorigin href="./assets/vendor-lucide-dNHw1I5G.js">
20
20
  <link rel="modulepreload" crossorigin href="./assets/vendor-markdown-9tTeP8v7.js">
21
21
  <link rel="modulepreload" crossorigin href="./assets/vendor-yaml-GWJz5H2G.js">
22
- <link rel="stylesheet" crossorigin href="./assets/index-DLB5x_Yh.css">
22
+ <link rel="stylesheet" crossorigin href="./assets/index-KTeRanN1.css">
23
23
  </head>
24
24
  <body>
25
25
  <div id="root"></div>
@@ -3403,6 +3403,19 @@ function brandWords(value) {
3403
3403
  function brandKeyFromText(value) {
3404
3404
  return brandWords(value).join("");
3405
3405
  }
3406
+ var wordsByPreparedText = /* @__PURE__ */ new WeakMap();
3407
+ function prepareBrandMatchText(text) {
3408
+ if (!text) return null;
3409
+ const normalized = normalizeForMatch(text);
3410
+ return { normalized, stripped: normalized.replace(NON_WORD, "") };
3411
+ }
3412
+ function wordsOfPreparedText(prepared) {
3413
+ const cached = wordsByPreparedText.get(prepared);
3414
+ if (cached) return cached;
3415
+ const words = wordsOfNormalized(prepared.normalized);
3416
+ wordsByPreparedText.set(prepared, words);
3417
+ return words;
3418
+ }
3406
3419
  function compileBrandAliases(aliases) {
3407
3420
  const keys = /* @__PURE__ */ new Set();
3408
3421
  let longest = 0;
@@ -3417,17 +3430,17 @@ function compileBrandAliases(aliases) {
3417
3430
  }
3418
3431
  function matcherMatchesText(matcher, text) {
3419
3432
  if (!text || matcher.keys.size === 0) return false;
3420
- const normalized = normalizeForMatch(text);
3421
- const stripped = normalized.replace(NON_WORD, "");
3433
+ const prepared = typeof text === "string" ? prepareBrandMatchText(text) : text;
3434
+ if (!prepared) return false;
3422
3435
  let possible = false;
3423
3436
  for (const key of matcher.keys) {
3424
- if (stripped.includes(key)) {
3437
+ if (prepared.stripped.includes(key)) {
3425
3438
  possible = true;
3426
3439
  break;
3427
3440
  }
3428
3441
  }
3429
3442
  if (!possible) return false;
3430
- const words = wordsOfNormalized(normalized);
3443
+ const words = wordsOfPreparedText(prepared);
3431
3444
  for (let start = 0; start < words.length; start++) {
3432
3445
  let candidate = "";
3433
3446
  for (let end = start; end < words.length; end++) {
@@ -3441,11 +3454,11 @@ function matcherMatchesText(matcher, text) {
3441
3454
  function matchedAliasKeys(matcher, text) {
3442
3455
  const found = /* @__PURE__ */ new Set();
3443
3456
  if (!text || matcher.keys.size === 0) return found;
3444
- const normalized = normalizeForMatch(text);
3445
- const stripped = normalized.replace(NON_WORD, "");
3446
- const reachable = [...matcher.keys].filter((key) => stripped.includes(key));
3457
+ const prepared = typeof text === "string" ? prepareBrandMatchText(text) : text;
3458
+ if (!prepared) return found;
3459
+ const reachable = [...matcher.keys].filter((key) => prepared.stripped.includes(key));
3447
3460
  if (reachable.length === 0) return found;
3448
- const words = wordsOfNormalized(normalized);
3461
+ const words = wordsOfPreparedText(prepared);
3449
3462
  for (let start = 0; start < words.length; start++) {
3450
3463
  let candidate = "";
3451
3464
  for (let end = start; end < words.length; end++) {
@@ -3467,15 +3480,15 @@ function textContainsAnyBrandAlias(text, aliases) {
3467
3480
 
3468
3481
  // ../contracts/src/answer-visibility.ts
3469
3482
  var MIN_DOMAIN_BRAND_KEY_LENGTH = 4;
3470
- function extractAnswerMentions(answerText, brandNames, domains) {
3483
+ function extractAnswerMentions(answerText, brandNames, domains, answerDomains) {
3471
3484
  if (!answerText) return { mentioned: false, matchedTerms: [] };
3472
3485
  const matchedTerms = [];
3473
3486
  const matchedDomainTerms = /* @__PURE__ */ new Set();
3474
- const answerDomains = extractDomainsFromText(answerText);
3487
+ const extractedAnswerDomains = answerDomains ?? extractDomainsFromText(answerText);
3475
3488
  for (const domain of domains) {
3476
3489
  const normalizedDomain = hostOf(domain);
3477
3490
  if (!normalizedDomain || !normalizedDomain.includes(".")) continue;
3478
- if (answerDomains.some((candidate) => hostMatchesDomain(candidate, normalizedDomain))) {
3491
+ if (extractedAnswerDomains.some((candidate) => hostMatchesDomain(candidate, normalizedDomain))) {
3479
3492
  matchedTerms.push(normalizedDomain);
3480
3493
  matchedDomainTerms.add(normalizedDomain);
3481
3494
  }
@@ -3510,8 +3523,8 @@ function extractAnswerMentions(answerText, brandNames, domains) {
3510
3523
  });
3511
3524
  return { mentioned: dedupedFinal.length > 0, matchedTerms: dedupedFinal };
3512
3525
  }
3513
- function determineAnswerMentioned(answerText, brandNames, domains) {
3514
- return extractAnswerMentions(answerText, brandNames, domains).mentioned;
3526
+ function determineAnswerMentioned(answerText, brandNames, domains, answerDomains) {
3527
+ return extractAnswerMentions(answerText, brandNames, domains, answerDomains).mentioned;
3515
3528
  }
3516
3529
  function visibilityStateFromAnswerMentioned(answerMentioned) {
3517
3530
  return answerMentioned ? "visible" : "not-visible";
@@ -17548,6 +17561,7 @@ export {
17548
17561
  textContainsDomain,
17549
17562
  normalizeUrlPath,
17550
17563
  brandKeyFromText,
17564
+ prepareBrandMatchText,
17551
17565
  compileBrandAliases,
17552
17566
  matcherMatchesText,
17553
17567
  matchedAliasKeys,
@@ -13,7 +13,7 @@ import {
13
13
  loadConfig,
14
14
  loadConfigRaw,
15
15
  saveConfigPatch
16
- } from "./chunk-FUCEQ5C5.js";
16
+ } from "./chunk-OXYM6VCJ.js";
17
17
  import {
18
18
  CC_CACHE_DIR,
19
19
  DUCKDB_SPEC,
@@ -160,7 +160,7 @@ import {
160
160
  siteCrawlSnapshots,
161
161
  toAlertView,
162
162
  usageCounters
163
- } from "./chunk-HBXA2APL.js";
163
+ } from "./chunk-AC3ZIRHR.js";
164
164
  import {
165
165
  AGENT_MEMORY_VALUE_MAX_BYTES,
166
166
  AGENT_PROVIDER_IDS,
@@ -302,7 +302,7 @@ import {
302
302
  validationError,
303
303
  winnabilityClassLabel,
304
304
  withRetry
305
- } from "./chunk-EBLUZCIX.js";
305
+ } from "./chunk-3HZELBZZ.js";
306
306
 
307
307
  // src/telemetry.ts
308
308
  import crypto from "crypto";
@@ -11924,7 +11924,7 @@ function readStoredGroundingSources(rawResponse) {
11924
11924
  return result;
11925
11925
  }
11926
11926
  async function backfillInsightsCommand(project, opts) {
11927
- const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-SLL5HWV6.js");
11927
+ const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-GMG2S55U.js");
11928
11928
  const config = loadConfig();
11929
11929
  const db = createClient(config.database);
11930
11930
  migrate(db);
@@ -524,6 +524,7 @@ import {
524
524
  parseStoredMeasurementPlanAnyVersion,
525
525
  parseWindow,
526
526
  pickClusterRepresentative,
527
+ prepareBrandMatchText,
527
528
  projectConfigSchema,
528
529
  projectCreateRequestSchema,
529
530
  projectDtoSchema,
@@ -670,7 +671,7 @@ import {
670
671
  wordpressSchemaDeployResultDtoSchema,
671
672
  wordpressSchemaStatusResultDtoSchema,
672
673
  wordpressStatusDtoSchema
673
- } from "./chunk-EBLUZCIX.js";
674
+ } from "./chunk-3HZELBZZ.js";
674
675
 
675
676
  // src/intelligence-service.ts
676
677
  import { eq as eq67, desc as desc29, asc as asc12, and as and56, ne as ne10, or as or14, inArray as inArray25, gte as gte18, lte as lte15, isNull as isNull12, sql as sql26, exists } from "drizzle-orm";
@@ -8486,7 +8487,7 @@ function compileCompetitiveSignalResolver(competitorDomains) {
8486
8487
  ...evidence.citedDomains ?? [],
8487
8488
  ...(evidence.groundingSources ?? []).map((source) => source.uri)
8488
8489
  ];
8489
- const answerDomains = extractDomainsFromText(evidence.answerText);
8490
+ const answerDomains = evidence.answerDomains ?? extractDomainsFromText(evidence.answerText);
8490
8491
  const mentionedBrandKeys = matchedAliasKeys(domainBrandMatcher, evidence.answerText);
8491
8492
  const citedCompetitorDomains = [];
8492
8493
  const mentionedCompetitorDomains = [];
@@ -13091,11 +13092,16 @@ function buildMentionShareInputs(opts) {
13091
13092
  competitors: mentionShareCompetitorsFromDomains(opts.competitorDomains),
13092
13093
  snapshots: opts.snapshots.map((snap) => {
13093
13094
  const queryText = (snap.queryId ? opts.queryTextById?.get(snap.queryId) : void 0) ?? snap.queryText ?? null;
13095
+ const cachedAnswerDomains = !snap.answerText || !opts.answerDomainsByText ? void 0 : opts.answerDomainsByText.get(snap.answerText) ?? (() => {
13096
+ const domains = extractDomainsFromText(snap.answerText);
13097
+ opts.answerDomainsByText.set(snap.answerText, domains);
13098
+ return domains;
13099
+ })();
13094
13100
  return {
13095
13101
  // Mention share is a current-identity metric. Recompute stored answer
13096
13102
  // text after an alias/domain rename; only text-less legacy rows need
13097
13103
  // the persisted run-time boolean as a fallback.
13098
- projectMentioned: snap.answerText ? determineAnswerMentioned(snap.answerText, projectBrandNames, projectDomains) : snap.answerMentioned === true,
13104
+ projectMentioned: snap.answerText ? determineAnswerMentioned(snap.answerText, projectBrandNames, projectDomains, cachedAnswerDomains) : snap.answerMentioned === true,
13099
13105
  answerText: snap.answerText,
13100
13106
  queryClass: classify ? classify(queryText) : null
13101
13107
  };
@@ -13173,32 +13179,41 @@ function parseSourceUrl(value) {
13173
13179
  function ownedBy(host, roots) {
13174
13180
  return roots.some((root) => host === root || host.endsWith(`.${root}`));
13175
13181
  }
13176
- function routeClaim(source, target, url) {
13177
- if (source.host !== normalizedHost(url.host)) return null;
13178
- if (url.mode === "host") return { targetId: target.id, urlId: url.id, modeRank: 1, pathLength: 0 };
13179
- const configuredPath = normalizedPath(url.path);
13182
+ function compiledTargetRoutes(targets) {
13183
+ const routes = /* @__PURE__ */ new Map();
13184
+ for (const target of targets) {
13185
+ for (const url of target.urls) {
13186
+ const host = normalizedHost(url.host);
13187
+ const path8 = url.mode === "host" ? "" : normalizedPath(url.path);
13188
+ const rows = routes.get(host) ?? [];
13189
+ rows.push({ targetId: target.id, url, path: url.pathCase === "insensitive" ? path8.toLocaleLowerCase("en") : path8 });
13190
+ routes.set(host, rows);
13191
+ }
13192
+ }
13193
+ return routes;
13194
+ }
13195
+ function routeClaim(source, route) {
13196
+ const { targetId, url, path: matcherPath } = route;
13197
+ if (url.mode === "host") return { targetId, urlId: url.id, modeRank: 1, pathLength: 0 };
13180
13198
  const sourcePath = url.pathCase === "insensitive" ? source.path.toLocaleLowerCase("en") : source.path;
13181
- const matcherPath = url.pathCase === "insensitive" ? configuredPath.toLocaleLowerCase("en") : configuredPath;
13182
13199
  const matches = url.mode === "exact" ? sourcePath === matcherPath : matcherPath === "/" || sourcePath === matcherPath || sourcePath.startsWith(`${matcherPath}/`);
13183
13200
  if (!matches) return null;
13184
13201
  return {
13185
- targetId: target.id,
13202
+ targetId,
13186
13203
  urlId: url.id,
13187
13204
  modeRank: url.mode === "exact" ? 3 : 2,
13188
13205
  pathLength: matcherPath.length
13189
13206
  };
13190
13207
  }
13191
- function classifySourceAttribution(value, targets, normalizedOwnedHosts) {
13208
+ function classifySourceAttribution(value, routes, normalizedOwnedHosts) {
13192
13209
  const source = parseSourceUrl(value);
13193
13210
  if (!source) {
13194
13211
  return { classification: "invalid", normalizedUrl: null, matchedTargetIds: [], matchedUrlIds: [] };
13195
13212
  }
13196
13213
  const claims = [];
13197
- for (const target of targets) {
13198
- for (const url of target.urls) {
13199
- const claim = routeClaim(source, target, url);
13200
- if (claim) claims.push(claim);
13201
- }
13214
+ for (const route of routes.get(source.host) ?? []) {
13215
+ const claim = routeClaim(source, route);
13216
+ if (claim) claims.push(claim);
13202
13217
  }
13203
13218
  claims.sort((left, right) => right.modeRank - left.modeRank || right.pathLength - left.pathLength || compareText2(left.targetId, right.targetId) || compareText2(left.urlId, right.urlId));
13204
13219
  const best = claims.at(0);
@@ -13268,12 +13283,22 @@ function containsAnyAlias(answerText, aliases) {
13268
13283
  function compiledMentionAliases(targets) {
13269
13284
  return targets.flatMap((target) => target.aliases.map((alias2) => ({ targetId: target.id, words: words(alias2) }))).filter((alias2) => alias2.words.length > 0);
13270
13285
  }
13286
+ function indexMentionAliases(aliases) {
13287
+ const byFirstWord = /* @__PURE__ */ new Map();
13288
+ for (const alias2 of aliases) {
13289
+ const firstWord = alias2.words[0];
13290
+ const rows = byFirstWord.get(firstWord) ?? [];
13291
+ rows.push(alias2);
13292
+ byFirstWord.set(firstWord, rows);
13293
+ }
13294
+ return byFirstWord;
13295
+ }
13271
13296
  function mentionedTargetsForAliases(answerText, aliases) {
13272
13297
  const result = /* @__PURE__ */ new Set();
13273
13298
  if (answerText === null) return result;
13274
13299
  const textWords = words(answerText);
13275
13300
  for (let start = 0; start < textWords.length; ) {
13276
- const matches = aliases.filter((alias2) => aliasMatchesAt(textWords, alias2.words, start));
13301
+ const matches = (aliases.get(textWords[start]) ?? []).filter((alias2) => aliasMatchesAt(textWords, alias2.words, start));
13277
13302
  if (matches.length === 0) {
13278
13303
  start++;
13279
13304
  continue;
@@ -13286,7 +13311,7 @@ function mentionedTargetsForAliases(answerText, aliases) {
13286
13311
  return result;
13287
13312
  }
13288
13313
  function mentionedTargets(answerText, targets) {
13289
- return mentionedTargetsForAliases(answerText, compiledMentionAliases(targets));
13314
+ return mentionedTargetsForAliases(answerText, indexMentionAliases(compiledMentionAliases(targets)));
13290
13315
  }
13291
13316
  function targetMentionedInAnswer(answerText, targetId, targets) {
13292
13317
  if (answerText === null) return null;
@@ -13312,6 +13337,7 @@ function prepareReport(input, options = {}) {
13312
13337
  const bridged = /* @__PURE__ */ new Set();
13313
13338
  const candidates = /* @__PURE__ */ new Map();
13314
13339
  const mentionAliases = compiledMentionAliases(input.targets);
13340
+ const aliasesByFirstWord = indexMentionAliases(mentionAliases);
13315
13341
  for (const observation of input.observations) {
13316
13342
  const slots = observation.executionId !== null ? input.expectedSlots.filter((slot2) => slot2.executionId === observation.executionId && slot2.provider === observation.provider) : input.expectedSlots.filter((slot2) => slot2.queryText === observation.queryText && slot2.provider === observation.provider && normalizeMeasurementLocation(slot2.location) === normalizeMeasurementLocation(observation.location));
13317
13343
  if (slots.length === 0) {
@@ -13350,7 +13376,7 @@ function prepareReport(input, options = {}) {
13350
13376
  historical: source.historical,
13351
13377
  sourceComplete: source.complete,
13352
13378
  sourceUrls: source.urls,
13353
- mentionedTargetIds: mentionedTargetsForAliases(observation.answerText, mentionAliases)
13379
+ mentionedTargetIds: mentionedTargetsForAliases(observation.answerText, aliasesByFirstWord)
13354
13380
  });
13355
13381
  }
13356
13382
  const edgesByExecution = /* @__PURE__ */ new Map();
@@ -13361,11 +13387,12 @@ function prepareReport(input, options = {}) {
13361
13387
  }
13362
13388
  const answers = [];
13363
13389
  const normalizedOwnedHosts = input.ownedHosts.map(normalizedHost);
13390
+ const targetRoutes = compiledTargetRoutes(input.targets);
13364
13391
  const sourceAttributions = /* @__PURE__ */ new Map();
13365
13392
  const sourceAttribution = (sourceUrl) => {
13366
13393
  const cached = sourceAttributions.get(sourceUrl);
13367
13394
  if (cached !== void 0) return cached;
13368
- const resolved = classifySourceAttribution(sourceUrl, input.targets, normalizedOwnedHosts);
13395
+ const resolved = classifySourceAttribution(sourceUrl, targetRoutes, normalizedOwnedHosts);
13369
13396
  sourceAttributions.set(sourceUrl, resolved);
13370
13397
  return resolved;
13371
13398
  };
@@ -22542,8 +22569,8 @@ function frozenCompetitorMatchers(competitors2) {
22542
22569
  function exactCompetitorMatchers(plan) {
22543
22570
  return frozenCompetitorMatchers(plan.groups.flatMap((group) => group.competitors));
22544
22571
  }
22545
- function competitorSignals(snapshot, matchers) {
22546
- const mentioned = snapshot.answerText === null ? [] : [...matchers].filter(([, matcher]) => matcherMatchesText(matcher, snapshot.answerText)).map(([domain]) => domain);
22572
+ function competitorSignals(snapshot, matchers, preparedAnswerText = prepareBrandMatchText(snapshot.answerText)) {
22573
+ const mentioned = preparedAnswerText === null ? [] : [...matchers].filter(([, matcher]) => matcherMatchesText(matcher, preparedAnswerText)).map(([domain]) => domain);
22547
22574
  const citedDomains = new Set(snapshot.citedDomains.map((value) => {
22548
22575
  try {
22549
22576
  return normalizeMeasurementHost(value);
@@ -22784,8 +22811,9 @@ function frozenSimpleRun(run, definition, snapshots) {
22784
22811
  }
22785
22812
  const slotId = `slot:simple:${query.queryId}:${provider}`;
22786
22813
  if (!slotKeys.has(slotId)) throw new Error(`Frozen simple definition has no slot for stored snapshot ${snapshot.id}`);
22787
- const mentioned = snapshot.answerText !== null ? matcherMatchesText(matcher, snapshot.answerText) : snapshot.answerMentioned === true;
22788
- const competitorSignalsForSnapshot = competitors2 === null ? { mentioned: [], cited: [] } : competitorSignals(snapshot, competitors2);
22814
+ const preparedAnswerText = prepareBrandMatchText(snapshot.answerText);
22815
+ const mentioned = snapshot.answerText !== null ? matcherMatchesText(matcher, preparedAnswerText) : snapshot.answerMentioned === true;
22816
+ const competitorSignalsForSnapshot = competitors2 === null ? { mentioned: [], cited: [] } : competitorSignals(snapshot, competitors2, preparedAnswerText);
22789
22817
  observations.push({
22790
22818
  slotId,
22791
22819
  answerId: snapshot.id,
@@ -33574,11 +33602,18 @@ async function compositeRoutes(app) {
33574
33602
  }
33575
33603
  }
33576
33604
  const configuredApiProviders = project.providers.filter((p) => !p.startsWith("cdp:"));
33605
+ const answerDomainsByText = /* @__PURE__ */ new Map();
33606
+ for (const snapshot of trackedLatest) {
33607
+ if (snapshot.answerText && !answerDomainsByText.has(snapshot.answerText)) {
33608
+ answerDomainsByText.set(snapshot.answerText, extractDomainsFromText(snapshot.answerText));
33609
+ }
33610
+ }
33577
33611
  const mentionShareInputs = buildMentionShareInputs({
33578
33612
  project,
33579
33613
  competitorDomains: competitorRows2.map((c) => c.domain),
33580
33614
  snapshots: trackedLatest,
33581
- queryTextById: queryLookup.byId
33615
+ queryTextById: queryLookup.byId,
33616
+ answerDomainsByText
33582
33617
  });
33583
33618
  const competitiveSignalResolver = compileCompetitiveSignalResolver(
33584
33619
  competitorRows2.map((c) => c.domain)
@@ -33588,7 +33623,8 @@ async function compositeRoutes(app) {
33588
33623
  ...competitiveSignalResolver.resolve({
33589
33624
  citedDomains: snapshot.citedDomains,
33590
33625
  groundingSources: snapshot.groundingSources,
33591
- answerText: snapshot.answerText
33626
+ answerText: snapshot.answerText,
33627
+ answerDomains: snapshot.answerText ? answerDomainsByText.get(snapshot.answerText) : void 0
33592
33628
  })
33593
33629
  }));
33594
33630
  const scores = {
@@ -99,7 +99,7 @@ import {
99
99
  trafficEventKindSchema,
100
100
  trafficSeriesGranularitySchema,
101
101
  visibilityReportRequestSchema
102
- } from "./chunk-EBLUZCIX.js";
102
+ } from "./chunk-3HZELBZZ.js";
103
103
 
104
104
  // src/cli-error.ts
105
105
  function isMachineFormat(format) {
@@ -5,11 +5,11 @@ import {
5
5
  installSkills,
6
6
  loadConfigRaw,
7
7
  saveConfigPatch
8
- } from "./chunk-FUCEQ5C5.js";
8
+ } from "./chunk-OXYM6VCJ.js";
9
9
  import {
10
10
  SKILL_MANIFEST_FILENAME,
11
11
  SkillsClients
12
- } from "./chunk-EBLUZCIX.js";
12
+ } from "./chunk-3HZELBZZ.js";
13
13
 
14
14
  // src/skills-autosync.ts
15
15
  import fs from "fs";
package/dist/cli.js CHANGED
@@ -28,11 +28,11 @@ import {
28
28
  trackCliCommandFinished,
29
29
  trackEvent,
30
30
  waitForServerRuntimeStartup
31
- } from "./chunk-H25PK25P.js";
31
+ } from "./chunk-7NMMQ7QO.js";
32
32
  import {
33
33
  autoSyncSkills,
34
34
  formatAutoSyncNotice
35
- } from "./chunk-5NAOIDJM.js";
35
+ } from "./chunk-VJRQTKUB.js";
36
36
  import {
37
37
  CliError,
38
38
  EXIT_SYSTEM_ERROR,
@@ -58,7 +58,7 @@ import {
58
58
  saveConfigPatch,
59
59
  systemError,
60
60
  usageError
61
- } from "./chunk-FUCEQ5C5.js";
61
+ } from "./chunk-OXYM6VCJ.js";
62
62
  import {
63
63
  CLOUDFLARE_WORKER_BINDINGS,
64
64
  CLOUDFLARE_WORKER_GENERATED_MARKER,
@@ -72,7 +72,7 @@ import {
72
72
  projects,
73
73
  queries,
74
74
  renderReportHtml
75
- } from "./chunk-HBXA2APL.js";
75
+ } from "./chunk-AC3ZIRHR.js";
76
76
  import {
77
77
  AdsDeliverySnapshotStatuses,
78
78
  AdsHistoricalCampaignRollupStatuses,
@@ -146,7 +146,7 @@ import {
146
146
  shareOfVoiceReason,
147
147
  visibilityReportRequestSchema,
148
148
  winnabilityClassSchema
149
- } from "./chunk-EBLUZCIX.js";
149
+ } from "./chunk-3HZELBZZ.js";
150
150
 
151
151
  // src/cli.ts
152
152
  import { pathToFileURL } from "url";
package/dist/index.js CHANGED
@@ -3,12 +3,12 @@ import {
3
3
  createGoogleMarketingCredentialStore,
4
4
  createGoogleMarketingRuntime,
5
5
  createServer
6
- } from "./chunk-H25PK25P.js";
6
+ } from "./chunk-7NMMQ7QO.js";
7
7
  import {
8
8
  loadConfig
9
- } from "./chunk-FUCEQ5C5.js";
10
- import "./chunk-HBXA2APL.js";
11
- import "./chunk-EBLUZCIX.js";
9
+ } from "./chunk-OXYM6VCJ.js";
10
+ import "./chunk-AC3ZIRHR.js";
11
+ import "./chunk-3HZELBZZ.js";
12
12
  export {
13
13
  GoogleMarketingRuntimeError,
14
14
  createGoogleMarketingCredentialStore,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  IntelligenceService
3
- } from "./chunk-HBXA2APL.js";
4
- import "./chunk-EBLUZCIX.js";
3
+ } from "./chunk-AC3ZIRHR.js";
4
+ import "./chunk-3HZELBZZ.js";
5
5
  export {
6
6
  IntelligenceService
7
7
  };
package/dist/mcp.js CHANGED
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  autoSyncSkills
3
- } from "./chunk-5NAOIDJM.js";
3
+ } from "./chunk-VJRQTKUB.js";
4
4
  import {
5
5
  createApiClient,
6
6
  createCanonryMcpServer
7
- } from "./chunk-FUCEQ5C5.js";
7
+ } from "./chunk-OXYM6VCJ.js";
8
8
  import {
9
9
  isReadOnlyKey
10
- } from "./chunk-EBLUZCIX.js";
10
+ } from "./chunk-3HZELBZZ.js";
11
11
 
12
12
  // src/mcp/cli.ts
13
13
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ainyc/canonry",
3
- "version": "4.188.2",
3
+ "version": "4.188.3",
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",
@@ -70,31 +70,31 @@
70
70
  "@types/node-cron": "^3.0.11",
71
71
  "tsup": "^8.5.1",
72
72
  "tsx": "^4.19.0",
73
- "@ainyc/canonry-web": "0.0.0",
74
- "@ainyc/canonry-config": "0.0.0",
75
- "@ainyc/canonry-contracts": "0.0.0",
73
+ "@ainyc/canonry-api-client": "0.0.0",
76
74
  "@ainyc/canonry-api-routes": "0.0.0",
75
+ "@ainyc/canonry-config": "0.0.0",
77
76
  "@ainyc/canonry-db": "0.0.0",
77
+ "@ainyc/canonry-contracts": "0.0.0",
78
78
  "@ainyc/canonry-integration-bing": "0.0.0",
79
- "@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
79
+ "@ainyc/canonry-web": "0.0.0",
80
80
  "@ainyc/canonry-integration-cloud-run": "0.0.0",
81
- "@ainyc/canonry-integration-google": "0.0.0",
81
+ "@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
82
82
  "@ainyc/canonry-integration-commoncrawl": "0.0.0",
83
83
  "@ainyc/canonry-integration-google-ads": "0.0.0",
84
84
  "@ainyc/canonry-integration-google-business-profile": "0.0.0",
85
+ "@ainyc/canonry-integration-google": "0.0.0",
86
+ "@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
85
87
  "@ainyc/canonry-integration-google-places": "0.0.0",
86
- "@ainyc/canonry-integration-google-tag-manager": "0.0.0",
87
- "@ainyc/canonry-api-client": "0.0.0",
88
88
  "@ainyc/canonry-integration-openai-ads": "0.0.0",
89
- "@ainyc/canonry-intelligence": "0.0.0",
90
- "@ainyc/canonry-integration-traffic": "0.0.0",
91
89
  "@ainyc/canonry-integration-wordpress": "0.0.0",
92
- "@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
93
- "@ainyc/canonry-provider-claude": "0.0.0",
90
+ "@ainyc/canonry-integration-traffic": "0.0.0",
91
+ "@ainyc/canonry-integration-google-tag-manager": "0.0.0",
94
92
  "@ainyc/canonry-provider-cdp": "0.0.0",
93
+ "@ainyc/canonry-provider-claude": "0.0.0",
95
94
  "@ainyc/canonry-provider-gemini": "0.0.0",
96
- "@ainyc/canonry-provider-openai": "0.0.0",
97
95
  "@ainyc/canonry-provider-local": "0.0.0",
96
+ "@ainyc/canonry-intelligence": "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": {