@ainyc/canonry 4.185.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 (31) hide show
  1. package/README.md +3 -1
  2. package/assets/assets/{AuditHistoryPanel-N0RYtAB2.js → AuditHistoryPanel-D1obTGKY.js} +1 -1
  3. package/assets/assets/{BacklinksPage-Bou9tizz.js → BacklinksPage-D_tj5Rbt.js} +1 -1
  4. package/assets/assets/{HistoryPage-CXhga4Ph.js → HistoryPage-lL-CZziY.js} +1 -1
  5. package/assets/assets/{MeasurementPropertyPage-XvZ5N7OJ.js → MeasurementPropertyPage-0voEYofK.js} +1 -1
  6. package/assets/assets/ProjectPage-Bq-ncl6p.js +9 -0
  7. package/assets/assets/{RunRow-C3D8VQYJ.js → RunRow-DTeprTL3.js} +1 -1
  8. package/assets/assets/{RunsPage-CpgzRa0M.js → RunsPage-DrAtN-Xn.js} +1 -1
  9. package/assets/assets/{SettingsPage-Bmx9pUOn.js → SettingsPage-DCD1aTWP.js} +1 -1
  10. package/assets/assets/{SiteHealthSection-NLM9j7Eg.js → SiteHealthSection-BX_ehKQW.js} +3 -3
  11. package/assets/assets/{TrafficPage-BYZhOBmP.js → TrafficPage-PTKGMjZO.js} +1 -1
  12. package/assets/assets/{TrafficSourceDetailPage-D9H8w5_Y.js → TrafficSourceDetailPage-BouaEiZp.js} +1 -1
  13. package/assets/assets/{extract-error-message-CH5Z1tok.js → extract-error-message-DOUrsRz6.js} +1 -1
  14. package/assets/assets/{index-D2ciQ6Rc.js → index-AI2ypViE.js} +27 -27
  15. package/assets/assets/index-DJ8_LvRn.css +1 -0
  16. package/assets/assets/{react-sigma_core.esm.min-D6BeZvg8.js → react-sigma_core.esm.min-CQ5k6lQz.js} +1 -1
  17. package/assets/assets/vendor-lucide-BovNTc41.js +1 -0
  18. package/assets/index.html +3 -3
  19. package/dist/{chunk-UXZCO5WK.js → chunk-67UGGOII.js} +20 -7
  20. package/dist/{chunk-4EMNAQR6.js → chunk-BPO7PDQH.js} +4 -4
  21. package/dist/{chunk-OVJJDBZY.js → chunk-GGEW65VE.js} +2 -2
  22. package/dist/{chunk-U7XFRKLH.js → chunk-PXGN7BY7.js} +7 -2
  23. package/dist/{chunk-SCNSP2GV.js → chunk-V7LWMC2C.js} +1 -1
  24. package/dist/cli.js +22 -6
  25. package/dist/index.js +4 -4
  26. package/dist/{intelligence-service-WTRLQG5V.js → intelligence-service-CTFIKNIF.js} +2 -2
  27. package/dist/mcp.js +3 -3
  28. package/package.json +12 -12
  29. package/assets/assets/ProjectPage-HRI4qMI7.js +0 -9
  30. package/assets/assets/index-D5UC9w71.css +0 -1
  31. package/assets/assets/vendor-lucide-XjCNFK0x.js +0 -1
@@ -0,0 +1 @@
1
+ import{r as h}from"./vendor-tanstack-CYBjbqVr.js";const _=a=>a.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),M=a=>a.replace(/^([A-Z])|[\s-_]+(\w)/g,(t,o,c)=>c?c.toUpperCase():o.toLowerCase()),y=a=>{const t=M(a);return t.charAt(0).toUpperCase()+t.slice(1)},r=(...a)=>a.filter((t,o,c)=>!!t&&t.trim()!==""&&c.indexOf(t)===o).join(" ").trim(),m=a=>{for(const t in a)if(t.startsWith("aria-")||t==="role"||t==="title")return!0};var v={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};const u=h.forwardRef(({color:a="currentColor",size:t=24,strokeWidth:o=2,absoluteStrokeWidth:c,className:s="",children:n,iconNode:i,...d},k)=>h.createElement("svg",{ref:k,...v,width:t,height:t,stroke:a,strokeWidth:c?Number(o)*24/Number(t):o,className:r("lucide",s),...!n&&!m(d)&&{"aria-hidden":"true"},...d},[...i.map(([p,l])=>h.createElement(p,l)),...Array.isArray(n)?n:[n]]));const e=(a,t)=>{const o=h.forwardRef(({className:c,...s},n)=>h.createElement(u,{ref:n,iconNode:t,className:r(`lucide-${_(y(a))}`,`lucide-${a}`,c),...s}));return o.displayName=y(a),o};const x=[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]],p1=e("arrow-left",x);const g=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]],l1=e("arrow-right",g);const w=[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]],_1=e("arrow-up",w);const $=[["path",{d:"M12 7v14",key:"1akyts"}],["path",{d:"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z",key:"ruj8y"}]],M1=e("book-open",$);const N=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],m1=e("check",N);const f=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],v1=e("chevron-down",f);const z=[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]],u1=e("chevron-left",z);const q=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],x1=e("chevron-right",q);const C=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],g1=e("circle-check",C);const j=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]],w1=e("circle-question-mark",j);const b=[["path",{d:"M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z",key:"p7xjir"}]],$1=e("cloud",b);const A=[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]],N1=e("copy",A);const L=[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]],f1=e("download",L);const H=[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]],z1=e("external-link",H);const R=[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]],q1=e("file-text",R);const V=[["path",{d:"M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4",key:"tonef"}],["path",{d:"M9 18c-4.51 2-5-2-7-2",key:"9comsn"}]],C1=e("github",V);const P=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]],j1=e("globe",P);const E=[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M12 7v5l4 2",key:"1fdv2h"}]],b1=e("history",E);const Z=[["rect",{width:"7",height:"9",x:"3",y:"3",rx:"1",key:"10lvy0"}],["rect",{width:"7",height:"5",x:"14",y:"3",rx:"1",key:"16une8"}],["rect",{width:"7",height:"9",x:"14",y:"12",rx:"1",key:"1hutg5"}],["rect",{width:"7",height:"5",x:"3",y:"16",rx:"1",key:"ldoo1y"}]],A1=e("layout-dashboard",Z);const S=[["path",{d:"M9 17H7A5 5 0 0 1 7 7h2",key:"8i5ue5"}],["path",{d:"M15 7h2a5 5 0 1 1 0 10h-2",key:"1b9ql8"}],["line",{x1:"8",x2:"16",y1:"12",y2:"12",key:"1jonct"}]],L1=e("link-2",S);const U=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],H1=e("loader-circle",U);const B=[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"m21 3-7 7",key:"1l2asr"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M9 21H3v-6",key:"wtvkvv"}]],R1=e("maximize-2",B);const D=[["path",{d:"M4 12h16",key:"1lakjw"}],["path",{d:"M4 18h16",key:"19g7jn"}],["path",{d:"M4 6h16",key:"1o0s65"}]],V1=e("menu",D);const T=[["path",{d:"m14 10 7-7",key:"oa77jy"}],["path",{d:"M20 10h-6V4",key:"mjg0md"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M4 14h6v6",key:"rmj7iw"}]],P1=e("minimize-2",T);const G=[["path",{d:"M5 12h14",key:"1ays0h"}]],E1=e("minus",G);const I=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}],["path",{d:"m16 15-3-3 3-3",key:"14y99z"}]],Z1=e("panel-left-close",I);const W=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}],["path",{d:"m14 9 3 3-3 3",key:"8010ee"}]],S1=e("panel-left-open",W);const F=[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]],U1=e("pencil",F);const O=[["path",{d:"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z",key:"10ikf1"}]],B1=e("play",O);const J=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]],D1=e("plus",J);const K=[["path",{d:"M19.07 4.93A10 10 0 0 0 6.99 3.34",key:"z3du51"}],["path",{d:"M4 6h.01",key:"oypzma"}],["path",{d:"M2.29 9.62A10 10 0 1 0 21.31 8.35",key:"qzzz0"}],["path",{d:"M16.24 7.76A6 6 0 1 0 8.23 16.67",key:"1yjesh"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M17.99 11.66A6 6 0 0 1 15.77 16.67",key:"1u2y91"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}],["path",{d:"m13.41 10.59 5.66-5.66",key:"mhq4k0"}]],T1=e("radar",K);const Q=[["path",{d:"M16.247 7.761a6 6 0 0 1 0 8.478",key:"1fwjs5"}],["path",{d:"M19.075 4.933a10 10 0 0 1 0 14.134",key:"ehdyv1"}],["path",{d:"M4.925 19.067a10 10 0 0 1 0-14.134",key:"1q22gi"}],["path",{d:"M7.753 16.239a6 6 0 0 1 0-8.478",key:"r2q7qm"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]],G1=e("radio",Q);const X=[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]],I1=e("refresh-cw",X);const Y=[["path",{d:"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z",key:"m3kijz"}],["path",{d:"m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z",key:"1fmvmk"}],["path",{d:"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0",key:"1f8sc4"}],["path",{d:"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5",key:"qeys4"}]],W1=e("rocket",Y);const e1=[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]],F1=e("rotate-ccw",e1);const t1=[["path",{d:"M3 7V5a2 2 0 0 1 2-2h2",key:"aa7l1z"}],["path",{d:"M17 3h2a2 2 0 0 1 2 2v2",key:"4qcy5o"}],["path",{d:"M21 17v2a2 2 0 0 1-2 2h-2",key:"6vwrx8"}],["path",{d:"M7 21H5a2 2 0 0 1-2-2v-2",key:"ioqczr"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}],["path",{d:"m16 16-1.9-1.9",key:"1dq9hf"}]],O1=e("scan-search",t1);const a1=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],J1=e("search",a1);const o1=[["path",{d:"M14 17H5",key:"gfn3mx"}],["path",{d:"M19 7h-9",key:"6i9tg"}],["circle",{cx:"17",cy:"17",r:"3",key:"18b49y"}],["circle",{cx:"7",cy:"7",r:"3",key:"dfmy0x"}]],K1=e("settings-2",o1);const c1=[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],Q1=e("settings",c1);const n1=[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],X1=e("trash-2",n1);const h1=[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]],Y1=e("triangle-alert",h1);const s1=[["path",{d:"M13.73 4a2 2 0 0 0-3.46 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z",key:"14u9p9"}]],e2=e("triangle",s1);const d1=[["path",{d:"m19 5 3-3",key:"yk6iyv"}],["path",{d:"m2 22 3-3",key:"19mgm9"}],["path",{d:"M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z",key:"goz73y"}],["path",{d:"M7.5 13.5 10 11",key:"7xgeeb"}],["path",{d:"M10.5 16.5 13 14",key:"10btkg"}],["path",{d:"m12 6 6 6 2.3-2.3a2.4 2.4 0 0 0 0-3.4l-2.6-2.6a2.4 2.4 0 0 0-3.4 0Z",key:"1snsnr"}]],t2=e("unplug",d1);const y1=[["path",{d:"M12 3v12",key:"1x0j5s"}],["path",{d:"m17 8-5-5-5 5",key:"7q97r8"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}]],a2=e("upload",y1);const r1=[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z",key:"1ngwbx"}]],o2=e("wrench",r1);const i1=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],c2=e("x",i1);export{l1 as A,M1 as B,v1 as C,f1 as D,z1 as E,q1 as F,j1 as G,b1 as H,u1 as I,O1 as J,K1 as K,H1 as L,P1 as M,B1 as P,G1 as R,J1 as S,Y1 as T,t2 as U,o2 as W,c2 as X,F1 as a,R1 as b,_1 as c,m1 as d,x1 as e,N1 as f,A1 as g,T1 as h,L1 as i,Q1 as j,W1 as k,C1 as l,S1 as m,Z1 as n,V1 as o,D1 as p,I1 as q,a2 as r,g1 as s,w1 as t,E1 as u,U1 as v,X1 as w,$1 as x,e2 as y,p1 as z};
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-D2ciQ6Rc.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
- <link rel="modulepreload" crossorigin href="./assets/vendor-lucide-XjCNFK0x.js">
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-D5UC9w71.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.185.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",
@@ -70,30 +70,30 @@
70
70
  "@types/node-cron": "^3.0.11",
71
71
  "tsup": "^8.5.1",
72
72
  "tsx": "^4.19.0",
73
- "@ainyc/canonry-api-client": "0.0.0",
74
73
  "@ainyc/canonry-api-routes": "0.0.0",
74
+ "@ainyc/canonry-api-client": "0.0.0",
75
75
  "@ainyc/canonry-contracts": "0.0.0",
76
76
  "@ainyc/canonry-config": "0.0.0",
77
77
  "@ainyc/canonry-db": "0.0.0",
78
- "@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
79
- "@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
80
78
  "@ainyc/canonry-integration-cloud-run": "0.0.0",
81
- "@ainyc/canonry-integration-google": "0.0.0",
82
- "@ainyc/canonry-integration-commoncrawl": "0.0.0",
83
79
  "@ainyc/canonry-integration-bing": "0.0.0",
80
+ "@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
81
+ "@ainyc/canonry-integration-commoncrawl": "0.0.0",
82
+ "@ainyc/canonry-integration-google": "0.0.0",
84
83
  "@ainyc/canonry-integration-google-ads": "0.0.0",
85
- "@ainyc/canonry-integration-google-business-profile": "0.0.0",
84
+ "@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
86
85
  "@ainyc/canonry-integration-google-places": "0.0.0",
87
- "@ainyc/canonry-integration-google-tag-manager": "0.0.0",
88
- "@ainyc/canonry-integration-openai-ads": "0.0.0",
86
+ "@ainyc/canonry-integration-google-business-profile": "0.0.0",
89
87
  "@ainyc/canonry-integration-traffic": "0.0.0",
88
+ "@ainyc/canonry-integration-openai-ads": "0.0.0",
90
89
  "@ainyc/canonry-integration-wordpress": "0.0.0",
91
- "@ainyc/canonry-provider-cdp": "0.0.0",
92
90
  "@ainyc/canonry-intelligence": "0.0.0",
91
+ "@ainyc/canonry-integration-google-tag-manager": "0.0.0",
92
+ "@ainyc/canonry-provider-cdp": "0.0.0",
93
+ "@ainyc/canonry-provider-local": "0.0.0",
94
+ "@ainyc/canonry-provider-openai": "0.0.0",
93
95
  "@ainyc/canonry-provider-claude": "0.0.0",
94
96
  "@ainyc/canonry-provider-gemini": "0.0.0",
95
- "@ainyc/canonry-provider-openai": "0.0.0",
96
- "@ainyc/canonry-provider-local": "0.0.0",
97
97
  "@ainyc/canonry-provider-perplexity": "0.0.0"
98
98
  },
99
99
  "scripts": {