@ainyc/canonry 4.186.0 → 4.186.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 (28) hide show
  1. package/README.md +3 -1
  2. package/assets/assets/{AuditHistoryPanel-B2OTEbWF.js → AuditHistoryPanel-D1obTGKY.js} +1 -1
  3. package/assets/assets/{BacklinksPage-B0Bz26IR.js → BacklinksPage-D_tj5Rbt.js} +1 -1
  4. package/assets/assets/{HistoryPage-DMIiplrT.js → HistoryPage-lL-CZziY.js} +1 -1
  5. package/assets/assets/{MeasurementPropertyPage-Z1m50P06.js → MeasurementPropertyPage-0voEYofK.js} +1 -1
  6. package/assets/assets/ProjectPage-Bq-ncl6p.js +9 -0
  7. package/assets/assets/{RunRow-2oIMBy4X.js → RunRow-DTeprTL3.js} +1 -1
  8. package/assets/assets/{RunsPage-D82txDn4.js → RunsPage-DrAtN-Xn.js} +1 -1
  9. package/assets/assets/{SettingsPage-B3SWwskL.js → SettingsPage-DCD1aTWP.js} +1 -1
  10. package/assets/assets/{SiteHealthSection-BwAsiVkw.js → SiteHealthSection-BX_ehKQW.js} +3 -3
  11. package/assets/assets/{TrafficPage-s7agZioX.js → TrafficPage-PTKGMjZO.js} +1 -1
  12. package/assets/assets/{TrafficSourceDetailPage-CAQu3xtO.js → TrafficSourceDetailPage-BouaEiZp.js} +1 -1
  13. package/assets/assets/{extract-error-message-PO1V0nPB.js → extract-error-message-DOUrsRz6.js} +1 -1
  14. package/assets/assets/{index-DBzUEmVj.js → index-AI2ypViE.js} +19 -19
  15. package/assets/assets/{index-SMQQ_3Nk.css → index-DJ8_LvRn.css} +1 -1
  16. package/assets/assets/{react-sigma_core.esm.min-DawtX7pg.js → react-sigma_core.esm.min-CQ5k6lQz.js} +1 -1
  17. package/assets/index.html +2 -2
  18. package/dist/{chunk-UXZCO5WK.js → chunk-67UGGOII.js} +20 -7
  19. package/dist/{chunk-4EMNAQR6.js → chunk-BPO7PDQH.js} +4 -4
  20. package/dist/{chunk-OVJJDBZY.js → chunk-GGEW65VE.js} +2 -2
  21. package/dist/{chunk-U7XFRKLH.js → chunk-PXGN7BY7.js} +7 -2
  22. package/dist/{chunk-SCNSP2GV.js → chunk-V7LWMC2C.js} +1 -1
  23. package/dist/cli.js +22 -6
  24. package/dist/index.js +4 -4
  25. package/dist/{intelligence-service-WTRLQG5V.js → intelligence-service-CTFIKNIF.js} +2 -2
  26. package/dist/mcp.js +3 -3
  27. package/package.json +9 -9
  28. package/assets/assets/ProjectPage-wcTL1Dim.js +0 -9
@@ -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-BwAsiVkw.js";import"./index-DBzUEmVj.js";import"./vendor-radix-BpmvLvpp.js";import"./vendor-recharts-FA0uySU7.js";import"./vendor-lucide-BovNTc41.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-BX_ehKQW.js";import"./index-AI2ypViE.js";import"./vendor-radix-BpmvLvpp.js";import"./vendor-recharts-FA0uySU7.js";import"./vendor-lucide-BovNTc41.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-DBzUEmVj.js"></script>
15
+ <script type="module" crossorigin src="./assets/index-AI2ypViE.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-BovNTc41.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-SMQQ_3Nk.css">
22
+ <link rel="stylesheet" crossorigin href="./assets/index-DJ8_LvRn.css">
23
23
  </head>
24
24
  <body>
25
25
  <div id="root"></div>
@@ -664,7 +664,7 @@ import {
664
664
  wordpressSchemaDeployResultDtoSchema,
665
665
  wordpressSchemaStatusResultDtoSchema,
666
666
  wordpressStatusDtoSchema
667
- } from "./chunk-U7XFRKLH.js";
667
+ } from "./chunk-PXGN7BY7.js";
668
668
 
669
669
  // src/intelligence-service.ts
670
670
  import { eq as eq66, desc as desc29, asc as asc12, and as and56, ne as ne10, or as or14, inArray as inArray25, gte as gte17, lte as lte15, isNull as isNull12, sql as sql25, exists } from "drizzle-orm";
@@ -12393,7 +12393,7 @@ function assertNoActivePlanlessSweep(tx, scope) {
12393
12393
  inArray(runs.status, [RunStatuses.queued, RunStatuses.running]),
12394
12394
  isNull2(runs.measurementPlanVersionId)
12395
12395
  )).get();
12396
- if (activeRun) throw runInProgress(scope.projectName);
12396
+ if (activeRun) throw runInProgress(scope.projectName, RunKinds["answer-visibility"], activeRun.id);
12397
12397
  }
12398
12398
  function assertQueryReplacementAllowed(tx, scope, incomingTexts) {
12399
12399
  const existing = tx.select({ id: queries.id, text: queries.query }).from(queries).where(eq7(queries.projectId, scope.projectId)).all();
@@ -15481,6 +15481,7 @@ function queueRunIfProjectIdle(db, params) {
15481
15481
  const activeRun = tx.select().from(runs).where(
15482
15482
  and10(
15483
15483
  eq15(runs.projectId, params.projectId),
15484
+ eq15(runs.kind, kind),
15484
15485
  or(eq15(runs.status, "queued"), eq15(runs.status, "running"))
15485
15486
  )
15486
15487
  ).get();
@@ -15607,10 +15608,11 @@ async function runRoutes(app, opts) {
15607
15608
  const result = app.db.transaction((tx) => {
15608
15609
  const activeRun = tx.select({ id: runs.id }).from(runs).where(and11(
15609
15610
  eq16(runs.projectId, project.id),
15611
+ eq16(runs.kind, kind),
15610
15612
  or2(eq16(runs.status, "queued"), eq16(runs.status, "running"))
15611
15613
  )).get();
15612
15614
  if (activeRun) {
15613
- return { conflict: true };
15615
+ return { conflict: true, activeRunId: activeRun.id };
15614
15616
  }
15615
15617
  const inserted = [];
15616
15618
  for (const loc of projectLocations) {
@@ -15630,7 +15632,7 @@ async function runRoutes(app, opts) {
15630
15632
  return { conflict: false, inserted };
15631
15633
  });
15632
15634
  if (result.conflict) {
15633
- throw runInProgress(project.name);
15635
+ throw runInProgress(project.name, kind, result.activeRunId);
15634
15636
  }
15635
15637
  const results = [];
15636
15638
  for (const { runId: runId2, loc } of result.inserted) {
@@ -15662,7 +15664,7 @@ async function runRoutes(app, opts) {
15662
15664
  providerModels: opts.getEffectiveProviderModels?.(),
15663
15665
  measurementScope: body.measurementScope ?? null
15664
15666
  });
15665
- if (queueResult.conflict) throw runInProgress(project.name);
15667
+ if (queueResult.conflict) throw runInProgress(project.name, kind, queueResult.activeRunId);
15666
15668
  const runId = queueResult.runId;
15667
15669
  writeAuditLog(app.db, {
15668
15670
  projectId: project.id,
@@ -30771,12 +30773,18 @@ function confidenceFromEvidence(count2) {
30771
30773
  function actionAudienceMatches2(action, audience) {
30772
30774
  return action.audience === "both" || action.audience === audience;
30773
30775
  }
30776
+ function configuredCompetitorDomainsForActionPlan(db, projectId, projectCompetitorDomains) {
30777
+ const active = activeMeasurementPlan(db, projectId);
30778
+ if (!active) return [...projectCompetitorDomains];
30779
+ const planCompetitorDomains = active.plan.schemaVersion === 2 ? active.plan.groups.flatMap((group) => group.competitors.map((competitor) => competitor.domain)) : active.plan.groups.flatMap((group) => group.competitors ?? []);
30780
+ return [.../* @__PURE__ */ new Set([...projectCompetitorDomains, ...planCompetitorDomains])];
30781
+ }
30774
30782
  function buildReportActionPlan(input) {
30775
30783
  const actions = [];
30776
30784
  if (input.competitorDomains.length === 0 && input.aiSourceOrigin.topDomains.length > 0) {
30777
30785
  const topDomains = input.aiSourceOrigin.topDomains.slice(0, 5);
30778
30786
  actions.push({
30779
- audience: "both",
30787
+ audience: "agency",
30780
30788
  priority: 10,
30781
30789
  horizon: "immediate",
30782
30790
  category: "competitors",
@@ -31177,6 +31185,11 @@ function buildProjectReport(db, projectName, periodDays) {
31177
31185
  const latestRunLocation = representativeLatestRun?.location ?? null;
31178
31186
  const competitorRows2 = db.select().from(competitors).where(eq32(competitors.projectId, project.id)).all();
31179
31187
  const competitorDomains = competitorRows2.map((c) => c.domain);
31188
+ const actionPlanCompetitorDomains = configuredCompetitorDomainsForActionPlan(
31189
+ db,
31190
+ project.id,
31191
+ competitorDomains
31192
+ );
31180
31193
  const ownedDomains = project.ownedDomains;
31181
31194
  const projectDomains = [project.canonicalDomain, ...ownedDomains];
31182
31195
  const projectBrandNames = effectiveBrandNames(project);
@@ -31298,7 +31311,7 @@ function buildProjectReport(db, projectName, periodDays) {
31298
31311
  };
31299
31312
  const actionPlan = buildReportActionPlan({
31300
31313
  canonicalDomain: project.canonicalDomain,
31301
- competitorDomains,
31314
+ competitorDomains: actionPlanCompetitorDomains,
31302
31315
  citationScorecard,
31303
31316
  aiSourceOrigin,
31304
31317
  gsc: gscSection,
@@ -11,7 +11,7 @@ import {
11
11
  loadConfig,
12
12
  loadConfigRaw,
13
13
  saveConfigPatch
14
- } from "./chunk-SCNSP2GV.js";
14
+ } from "./chunk-V7LWMC2C.js";
15
15
  import {
16
16
  CC_CACHE_DIR,
17
17
  DUCKDB_SPEC,
@@ -158,7 +158,7 @@ import {
158
158
  siteCrawlSnapshots,
159
159
  toAlertView,
160
160
  usageCounters
161
- } from "./chunk-UXZCO5WK.js";
161
+ } from "./chunk-67UGGOII.js";
162
162
  import {
163
163
  AGENT_MEMORY_VALUE_MAX_BYTES,
164
164
  AGENT_PROVIDER_IDS,
@@ -299,7 +299,7 @@ import {
299
299
  validationError,
300
300
  winnabilityClassLabel,
301
301
  withRetry
302
- } from "./chunk-U7XFRKLH.js";
302
+ } from "./chunk-PXGN7BY7.js";
303
303
 
304
304
  // src/telemetry.ts
305
305
  import crypto from "crypto";
@@ -11903,7 +11903,7 @@ function readStoredGroundingSources(rawResponse) {
11903
11903
  return result;
11904
11904
  }
11905
11905
  async function backfillInsightsCommand(project, opts) {
11906
- const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-WTRLQG5V.js");
11906
+ const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-CTFIKNIF.js");
11907
11907
  const config = loadConfig();
11908
11908
  const db = createClient(config.database);
11909
11909
  migrate(db);
@@ -5,11 +5,11 @@ import {
5
5
  installSkills,
6
6
  loadConfigRaw,
7
7
  saveConfigPatch
8
- } from "./chunk-SCNSP2GV.js";
8
+ } from "./chunk-V7LWMC2C.js";
9
9
  import {
10
10
  SKILL_MANIFEST_FILENAME,
11
11
  SkillsClients
12
- } from "./chunk-U7XFRKLH.js";
12
+ } from "./chunk-PXGN7BY7.js";
13
13
 
14
14
  // src/skills-autosync.ts
15
15
  import fs from "fs";
@@ -72,8 +72,13 @@ function noQueries(projectName) {
72
72
  { projectName }
73
73
  );
74
74
  }
75
- function runInProgress(projectName) {
76
- return new AppError("RUN_IN_PROGRESS", `A run is already in progress for '${projectName}'`, 409);
75
+ function runInProgress(projectName, kind = "answer-visibility", activeRunId) {
76
+ return new AppError(
77
+ "RUN_IN_PROGRESS",
78
+ `A '${kind}' run is already in progress for '${projectName}'`,
79
+ 409,
80
+ { projectName, kind, ...activeRunId ? { activeRunId } : {} }
81
+ );
77
82
  }
78
83
  function operationInProgress(message, details) {
79
84
  return new AppError("OPERATION_IN_PROGRESS", message, 409, details);
@@ -97,7 +97,7 @@ import {
97
97
  trafficEventKindSchema,
98
98
  trafficSeriesGranularitySchema,
99
99
  visibilityReportRequestSchema
100
- } from "./chunk-U7XFRKLH.js";
100
+ } from "./chunk-PXGN7BY7.js";
101
101
 
102
102
  // src/cli-error.ts
103
103
  function isMachineFormat(format) {
package/dist/cli.js CHANGED
@@ -28,11 +28,11 @@ import {
28
28
  trackCliCommandFinished,
29
29
  trackEvent,
30
30
  waitForServerRuntimeStartup
31
- } from "./chunk-4EMNAQR6.js";
31
+ } from "./chunk-BPO7PDQH.js";
32
32
  import {
33
33
  autoSyncSkills,
34
34
  formatAutoSyncNotice
35
- } from "./chunk-OVJJDBZY.js";
35
+ } from "./chunk-GGEW65VE.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-SCNSP2GV.js";
61
+ } from "./chunk-V7LWMC2C.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-UXZCO5WK.js";
75
+ } from "./chunk-67UGGOII.js";
76
76
  import {
77
77
  AdsDeliverySnapshotStatuses,
78
78
  AdsHistoricalCampaignRollupStatuses,
@@ -143,7 +143,7 @@ import {
143
143
  resolveProviderInput,
144
144
  visibilityReportRequestSchema,
145
145
  winnabilityClassSchema
146
- } from "./chunk-U7XFRKLH.js";
146
+ } from "./chunk-PXGN7BY7.js";
147
147
 
148
148
  // src/cli.ts
149
149
  import { pathToFileURL } from "url";
@@ -12410,7 +12410,23 @@ async function cancelRun(project, runId, format) {
12410
12410
  let targetId = runId;
12411
12411
  if (!targetId) {
12412
12412
  const runs = await client.listRuns(project);
12413
- const active = runs.find((r) => r.status === "queued" || r.status === "running");
12413
+ const activeRuns = runs.filter((r) => r.status === "queued" || r.status === "running");
12414
+ if (activeRuns.length > 1) {
12415
+ const candidates = activeRuns.map(({ id, kind, status }) => ({ id, kind, status }));
12416
+ throw new CliError({
12417
+ code: "MULTIPLE_ACTIVE_RUNS",
12418
+ message: `Multiple active runs found for project "${project}". Specify a run ID.`,
12419
+ displayMessage: `Error: Multiple active runs found for project "${project}". Specify a run ID.
12420
+ ` + candidates.map((r) => ` ${r.id} ${r.kind} ${r.status}`).join("\n") + `
12421
+ To cancel by ID: canonry run cancel ${project} <run-id>`,
12422
+ details: {
12423
+ project,
12424
+ activeRuns: candidates,
12425
+ suggestedCommands: [`canonry run cancel ${project} <run-id>`]
12426
+ }
12427
+ });
12428
+ }
12429
+ const active = activeRuns[0];
12414
12430
  if (!active) {
12415
12431
  throw new CliError({
12416
12432
  code: "NO_ACTIVE_RUN",
package/dist/index.js CHANGED
@@ -3,12 +3,12 @@ import {
3
3
  createGoogleMarketingCredentialStore,
4
4
  createGoogleMarketingRuntime,
5
5
  createServer
6
- } from "./chunk-4EMNAQR6.js";
6
+ } from "./chunk-BPO7PDQH.js";
7
7
  import {
8
8
  loadConfig
9
- } from "./chunk-SCNSP2GV.js";
10
- import "./chunk-UXZCO5WK.js";
11
- import "./chunk-U7XFRKLH.js";
9
+ } from "./chunk-V7LWMC2C.js";
10
+ import "./chunk-67UGGOII.js";
11
+ import "./chunk-PXGN7BY7.js";
12
12
  export {
13
13
  GoogleMarketingRuntimeError,
14
14
  createGoogleMarketingCredentialStore,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  IntelligenceService
3
- } from "./chunk-UXZCO5WK.js";
4
- import "./chunk-U7XFRKLH.js";
3
+ } from "./chunk-67UGGOII.js";
4
+ import "./chunk-PXGN7BY7.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-OVJJDBZY.js";
3
+ } from "./chunk-GGEW65VE.js";
4
4
  import {
5
5
  createApiClient,
6
6
  createCanonryMcpServer
7
- } from "./chunk-SCNSP2GV.js";
7
+ } from "./chunk-V7LWMC2C.js";
8
8
  import {
9
9
  isReadOnlyKey
10
- } from "./chunk-U7XFRKLH.js";
10
+ } from "./chunk-PXGN7BY7.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.186.0",
3
+ "version": "4.186.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",
@@ -72,28 +72,28 @@
72
72
  "tsx": "^4.19.0",
73
73
  "@ainyc/canonry-api-routes": "0.0.0",
74
74
  "@ainyc/canonry-api-client": "0.0.0",
75
- "@ainyc/canonry-config": "0.0.0",
76
75
  "@ainyc/canonry-contracts": "0.0.0",
76
+ "@ainyc/canonry-config": "0.0.0",
77
77
  "@ainyc/canonry-db": "0.0.0",
78
78
  "@ainyc/canonry-integration-cloud-run": "0.0.0",
79
79
  "@ainyc/canonry-integration-bing": "0.0.0",
80
- "@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
80
+ "@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
81
81
  "@ainyc/canonry-integration-commoncrawl": "0.0.0",
82
82
  "@ainyc/canonry-integration-google": "0.0.0",
83
- "@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
84
83
  "@ainyc/canonry-integration-google-ads": "0.0.0",
84
+ "@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
85
+ "@ainyc/canonry-integration-google-places": "0.0.0",
85
86
  "@ainyc/canonry-integration-google-business-profile": "0.0.0",
86
- "@ainyc/canonry-integration-google-tag-manager": "0.0.0",
87
- "@ainyc/canonry-integration-openai-ads": "0.0.0",
88
87
  "@ainyc/canonry-integration-traffic": "0.0.0",
88
+ "@ainyc/canonry-integration-openai-ads": "0.0.0",
89
89
  "@ainyc/canonry-integration-wordpress": "0.0.0",
90
90
  "@ainyc/canonry-intelligence": "0.0.0",
91
- "@ainyc/canonry-integration-google-places": "0.0.0",
92
- "@ainyc/canonry-provider-claude": "0.0.0",
91
+ "@ainyc/canonry-integration-google-tag-manager": "0.0.0",
93
92
  "@ainyc/canonry-provider-cdp": "0.0.0",
94
- "@ainyc/canonry-provider-gemini": "0.0.0",
95
93
  "@ainyc/canonry-provider-local": "0.0.0",
96
94
  "@ainyc/canonry-provider-openai": "0.0.0",
95
+ "@ainyc/canonry-provider-claude": "0.0.0",
96
+ "@ainyc/canonry-provider-gemini": "0.0.0",
97
97
  "@ainyc/canonry-provider-perplexity": "0.0.0"
98
98
  },
99
99
  "scripts": {