@canonry/canonry 4.180.1 → 4.180.2

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 (26) hide show
  1. package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +11 -6
  2. package/assets/assets/{AuditHistoryPanel-DI6iXS0J.js → AuditHistoryPanel-Cf-jEEKZ.js} +1 -1
  3. package/assets/assets/{BacklinksPage-DiwTMJTp.js → BacklinksPage-oMcS6Hc_.js} +1 -1
  4. package/assets/assets/{HistoryPage-BWODoEok.js → HistoryPage-CDQOpxi0.js} +1 -1
  5. package/assets/assets/{MeasurementPropertyPage-C1uZ9LEl.js → MeasurementPropertyPage-MoKFTmrS.js} +1 -1
  6. package/assets/assets/{ProjectPage-C-fk0Jja.js → ProjectPage-CtD1AwXE.js} +8 -8
  7. package/assets/assets/{RunRow-CMSISg-I.js → RunRow-CPekiscK.js} +1 -1
  8. package/assets/assets/{RunsPage-HZwwLQDE.js → RunsPage-hn05ImCv.js} +1 -1
  9. package/assets/assets/{SettingsPage-3eoRO4ze.js → SettingsPage-BOTYXtfF.js} +1 -1
  10. package/assets/assets/{SiteHealthSection-CATUc26x.js → SiteHealthSection-FwMZ11F8.js} +3 -3
  11. package/assets/assets/{TrafficPage-Cw8AM5VR.js → TrafficPage-f2v6A_uk.js} +1 -1
  12. package/assets/assets/{TrafficSourceDetailPage-ChFDAstr.js → TrafficSourceDetailPage-nhWRLHiu.js} +1 -1
  13. package/assets/assets/{extract-error-message-CG_IQ_9c.js → extract-error-message-Cp1YeVEr.js} +1 -1
  14. package/assets/assets/{index-Dz0ju3qg.js → index-VmxEHABq.js} +22 -22
  15. package/assets/assets/{react-sigma_core.esm.min-BvgsCKLZ.js → react-sigma_core.esm.min-fnm2MkMi.js} +1 -1
  16. package/assets/index.html +1 -1
  17. package/dist/{chunk-VEEHINTY.js → chunk-44LVINXQ.js} +20 -10
  18. package/dist/{chunk-A6XDLCKF.js → chunk-4XHQ2GCN.js} +2 -2
  19. package/dist/{chunk-BJAZWJNH.js → chunk-665YENL2.js} +4 -10
  20. package/dist/{chunk-3JW762Q4.js → chunk-6IR32MIH.js} +5 -7
  21. package/dist/{chunk-NFALEGSZ.js → chunk-DA25LOTW.js} +2 -2
  22. package/dist/cli.js +5 -5
  23. package/dist/index.js +4 -4
  24. package/dist/{intelligence-service-NHAF7V6L.js → intelligence-service-RNBODYMZ.js} +2 -2
  25. package/dist/mcp.js +3 -3
  26. package/package.json +8 -8
@@ -1,4 +1,4 @@
1
- import{g as Bt,t as S,r as C}from"./vendor-tanstack-Dock0eH1.js";import{e as Ht,G as Wt}from"./SiteHealthSection-CATUc26x.js";import"./index-Dz0ju3qg.js";import"./vendor-radix-4UOaVWza.js";import"./vendor-recharts-D8rt5lKn.js";import"./vendor-lucide-nYKv-BB7.js";import"./vendor-markdown-Bn7fRwrx.js";import"./vendor-yaml-GWJz5H2G.js";import"./ChartPrimitives-DG35TyhH.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-Dock0eH1.js";import{e as Ht,G as Wt}from"./SiteHealthSection-FwMZ11F8.js";import"./index-VmxEHABq.js";import"./vendor-radix-4UOaVWza.js";import"./vendor-recharts-D8rt5lKn.js";import"./vendor-lucide-nYKv-BB7.js";import"./vendor-markdown-Bn7fRwrx.js";import"./vendor-yaml-GWJz5H2G.js";import"./ChartPrimitives-DG35TyhH.js";function Vt(r,n){if(typeof r!="object"||!r)return r;var i=r[Symbol.toPrimitive];if(i!==void 0){var e=i.call(r,n);if(typeof e!="object")return e;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(r)}function ae(r){var n=Vt(r,"string");return typeof n=="symbol"?n:n+""}function A(r,n){if(!(r instanceof n))throw new TypeError("Cannot call a class as a function")}function He(r,n){for(var i=0;i<n.length;i++){var e=n[i];e.enumerable=e.enumerable||!1,e.configurable=!0,"value"in e&&(e.writable=!0),Object.defineProperty(r,ae(e.key),e)}}function L(r,n,i){return n&&He(r.prototype,n),i&&He(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r}function Q(r){return Q=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},Q(r)}function yt(){try{var r=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(yt=function(){return!!r})()}function jt(r){if(r===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return r}function Zt(r,n){if(n&&(typeof n=="object"||typeof n=="function"))return n;if(n!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return jt(r)}function I(r,n,i){return n=Q(n),Zt(r,yt()?Reflect.construct(n,i||[],Q(r).constructor):n.apply(r,i))}function xe(r,n){return xe=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(i,e){return i.__proto__=e,i},xe(r,n)}function G(r,n){if(typeof n!="function"&&n!==null)throw new TypeError("Super expression must either be null or a function");r.prototype=Object.create(n&&n.prototype,{constructor:{value:r,writable:!0,configurable:!0}}),Object.defineProperty(r,"prototype",{writable:!1}),n&&xe(r,n)}function qt(r){if(Array.isArray(r))return r}function Yt(r,n){var i=r==null?null:typeof Symbol<"u"&&r[Symbol.iterator]||r["@@iterator"];if(i!=null){var e,t,a,o,s=[],l=!0,h=!1;try{if(a=(i=i.call(r)).next,n===0){if(Object(i)!==i)return;l=!1}else for(;!(l=(e=a.call(i)).done)&&(s.push(e.value),s.length!==n);l=!0);}catch(u){h=!0,t=u}finally{try{if(!l&&i.return!=null&&(o=i.return(),Object(o)!==o))return}finally{if(h)throw t}}return s}}function Se(r,n){(n==null||n>r.length)&&(n=r.length);for(var i=0,e=Array(n);i<n;i++)e[i]=r[i];return e}function Tt(r,n){if(r){if(typeof r=="string")return Se(r,n);var i={}.toString.call(r).slice(8,-1);return i==="Object"&&r.constructor&&(i=r.constructor.name),i==="Map"||i==="Set"?Array.from(r):i==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?Se(r,n):void 0}}function Xt(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
2
2
  In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function ee(r,n){return qt(r)||Yt(r,n)||Tt(r,n)||Xt()}var pe={black:"#000000",silver:"#C0C0C0",gray:"#808080",grey:"#808080",white:"#FFFFFF",maroon:"#800000",red:"#FF0000",purple:"#800080",fuchsia:"#FF00FF",green:"#008000",lime:"#00FF00",olive:"#808000",yellow:"#FFFF00",navy:"#000080",blue:"#0000FF",teal:"#008080",aqua:"#00FFFF",darkblue:"#00008B",mediumblue:"#0000CD",darkgreen:"#006400",darkcyan:"#008B8B",deepskyblue:"#00BFFF",darkturquoise:"#00CED1",mediumspringgreen:"#00FA9A",springgreen:"#00FF7F",cyan:"#00FFFF",midnightblue:"#191970",dodgerblue:"#1E90FF",lightseagreen:"#20B2AA",forestgreen:"#228B22",seagreen:"#2E8B57",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",limegreen:"#32CD32",mediumseagreen:"#3CB371",turquoise:"#40E0D0",royalblue:"#4169E1",steelblue:"#4682B4",darkslateblue:"#483D8B",mediumturquoise:"#48D1CC",indigo:"#4B0082",darkolivegreen:"#556B2F",cadetblue:"#5F9EA0",cornflowerblue:"#6495ED",rebeccapurple:"#663399",mediumaquamarine:"#66CDAA",dimgray:"#696969",dimgrey:"#696969",slateblue:"#6A5ACD",olivedrab:"#6B8E23",slategray:"#708090",slategrey:"#708090",lightslategray:"#778899",lightslategrey:"#778899",mediumslateblue:"#7B68EE",lawngreen:"#7CFC00",chartreuse:"#7FFF00",aquamarine:"#7FFFD4",skyblue:"#87CEEB",lightskyblue:"#87CEFA",blueviolet:"#8A2BE2",darkred:"#8B0000",darkmagenta:"#8B008B",saddlebrown:"#8B4513",darkseagreen:"#8FBC8F",lightgreen:"#90EE90",mediumpurple:"#9370DB",darkviolet:"#9400D3",palegreen:"#98FB98",darkorchid:"#9932CC",yellowgreen:"#9ACD32",sienna:"#A0522D",brown:"#A52A2A",darkgray:"#A9A9A9",darkgrey:"#A9A9A9",lightblue:"#ADD8E6",greenyellow:"#ADFF2F",paleturquoise:"#AFEEEE",lightsteelblue:"#B0C4DE",powderblue:"#B0E0E6",firebrick:"#B22222",darkgoldenrod:"#B8860B",mediumorchid:"#BA55D3",rosybrown:"#BC8F8F",darkkhaki:"#BDB76B",mediumvioletred:"#C71585",indianred:"#CD5C5C",peru:"#CD853F",chocolate:"#D2691E",tan:"#D2B48C",lightgray:"#D3D3D3",lightgrey:"#D3D3D3",thistle:"#D8BFD8",orchid:"#DA70D6",goldenrod:"#DAA520",palevioletred:"#DB7093",crimson:"#DC143C",gainsboro:"#DCDCDC",plum:"#DDA0DD",burlywood:"#DEB887",lightcyan:"#E0FFFF",lavender:"#E6E6FA",darksalmon:"#E9967A",violet:"#EE82EE",palegoldenrod:"#EEE8AA",lightcoral:"#F08080",khaki:"#F0E68C",aliceblue:"#F0F8FF",honeydew:"#F0FFF0",azure:"#F0FFFF",sandybrown:"#F4A460",wheat:"#F5DEB3",beige:"#F5F5DC",whitesmoke:"#F5F5F5",mintcream:"#F5FFFA",ghostwhite:"#F8F8FF",salmon:"#FA8072",antiquewhite:"#FAEBD7",linen:"#FAF0E6",lightgoldenrodyellow:"#FAFAD2",oldlace:"#FDF5E6",magenta:"#FF00FF",deeppink:"#FF1493",orangered:"#FF4500",tomato:"#FF6347",hotpink:"#FF69B4",coral:"#FF7F50",darkorange:"#FF8C00",lightsalmon:"#FFA07A",orange:"#FFA500",lightpink:"#FFB6C1",pink:"#FFC0CB",gold:"#FFD700",peachpuff:"#FFDAB9",navajowhite:"#FFDEAD",moccasin:"#FFE4B5",bisque:"#FFE4C4",mistyrose:"#FFE4E1",blanchedalmond:"#FFEBCD",papayawhip:"#FFEFD5",lavenderblush:"#FFF0F5",seashell:"#FFF5EE",cornsilk:"#FFF8DC",lemonchiffon:"#FFFACD",floralwhite:"#FFFAF0",snow:"#FFFAFA",lightyellow:"#FFFFE0",ivory:"#FFFFF0"},Ct=new Int8Array(4),be=new Int32Array(Ct.buffer,0,1),$t=new Float32Array(Ct.buffer,0,1),Kt=/^\s*rgba?\s*\(/,Jt=/^\s*rgba?\s*\(\s*([0-9]*)\s*,\s*([0-9]*)\s*,\s*([0-9]*)(?:\s*,\s*(.*)?)?\)\s*$/;function Qt(r){var n=0,i=0,e=0,t=1;if(r[0]==="#")r.length===4?(n=parseInt(r.charAt(1)+r.charAt(1),16),i=parseInt(r.charAt(2)+r.charAt(2),16),e=parseInt(r.charAt(3)+r.charAt(3),16)):(n=parseInt(r.charAt(1)+r.charAt(2),16),i=parseInt(r.charAt(3)+r.charAt(4),16),e=parseInt(r.charAt(5)+r.charAt(6),16)),r.length===9&&(t=parseInt(r.charAt(7)+r.charAt(8),16)/255);else if(Kt.test(r)){var a=r.match(Jt);a&&(n=+a[1],i=+a[2],e=+a[3],a[4]&&(t=+a[4]))}return{r:n,g:i,b:e,a:t}}var J={};for(var le in pe)J[le]=oe(pe[le]),J[pe[le]]=J[le];function Rt(r,n,i,e,t){return be[0]=e<<24|i<<16|n<<8|r,be[0]=be[0]&4278190079,$t[0]}function oe(r){if(r=r.toLowerCase(),typeof J[r]<"u")return J[r];var n=Qt(r),i=n.r,e=n.g,t=n.b,a=n.a;a=a*255|0;var o=Rt(i,e,t,a);return J[r]=o,o}var Ee={};function _t(r){if(typeof Ee[r]<"u")return Ee[r];var n=(r&16711680)>>>16,i=(r&65280)>>>8,e=r&255,t=255,a=Rt(n,i,e,t);return Ee[r]=a,a}function We(r,n,i,e){return i+(n<<8)+(r<<16)}function Ve(r,n,i,e,t,a){var o=Math.floor(i/a*t),s=Math.floor(r.drawingBufferHeight/a-e/a*t),l=new Uint8Array(4);r.bindFramebuffer(r.FRAMEBUFFER,n),r.readPixels(o,s,1,1,r.RGBA,r.UNSIGNED_BYTE,l);var h=ee(l,4),u=h[0],d=h[1],f=h[2],g=h[3];return[u,d,f,g]}function c(r,n,i){return(n=ae(n))in r?Object.defineProperty(r,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[n]=i,r}function je(r,n){var i=Object.keys(r);if(Object.getOwnPropertySymbols){var e=Object.getOwnPropertySymbols(r);n&&(e=e.filter(function(t){return Object.getOwnPropertyDescriptor(r,t).enumerable})),i.push.apply(i,e)}return i}function b(r){for(var n=1;n<arguments.length;n++){var i=arguments[n]!=null?arguments[n]:{};n%2?je(Object(i),!0).forEach(function(e){c(r,e,i[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(i)):je(Object(i)).forEach(function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(i,e))})}return r}function ei(r,n){for(;!{}.hasOwnProperty.call(r,n)&&(r=Q(r))!==null;);return r}function Ae(){return Ae=typeof Reflect<"u"&&Reflect.get?Reflect.get.bind():function(r,n,i){var e=ei(r,n);if(e){var t=Object.getOwnPropertyDescriptor(e,n);return t.get?t.get.call(arguments.length<3?r:i):t.value}},Ae.apply(null,arguments)}function wt(r,n,i,e){var t=Ae(Q(r.prototype),n,i);return typeof t=="function"?function(a){return t.apply(i,a)}:t}function ti(r){return r.normalized?1:r.size}function ye(r){var n=0;return r.forEach(function(i){return n+=ti(i)}),n}function xt(r,n,i){var e=r==="VERTEX"?n.VERTEX_SHADER:n.FRAGMENT_SHADER,t=n.createShader(e);if(t===null)throw new Error("loadShader: error while creating the shader");n.shaderSource(t,i),n.compileShader(t);var a=n.getShaderParameter(t,n.COMPILE_STATUS);if(!a){var o=n.getShaderInfoLog(t);throw n.deleteShader(t),new Error(`loadShader: error while compiling the shader:
3
3
  `.concat(o,`
4
4
  `).concat(i))}return t}function ii(r,n){return xt("VERTEX",r,n)}function ri(r,n){return xt("FRAGMENT",r,n)}function ni(r,n){var i=r.createProgram();if(i===null)throw new Error("loadProgram: error while creating the program.");var e,t;for(e=0,t=n.length;e<t;e++)r.attachShader(i,n[e]);r.linkProgram(i);var a=r.getProgramParameter(i,r.LINK_STATUS);if(!a){var o=r.getProgramInfoLog(i);throw r.deleteProgram(i),new Error("loadProgram: error while linking the program: ".concat(o))}return i}function Ze(r){var n=r.gl,i=r.buffer,e=r.program,t=r.vertexShader,a=r.fragmentShader;n.deleteShader(t),n.deleteShader(a),n.deleteProgram(e),n.deleteBuffer(i)}var qe=`#define PICKING_MODE
package/assets/index.html CHANGED
@@ -12,7 +12,7 @@
12
12
  <link rel="icon" type="image/png" sizes="32x32" href="./favicon-32.png" />
13
13
  <link rel="apple-touch-icon" href="./apple-touch-icon.png" />
14
14
  <title>Canonry</title>
15
- <script type="module" crossorigin src="./assets/index-Dz0ju3qg.js"></script>
15
+ <script type="module" crossorigin src="./assets/index-VmxEHABq.js"></script>
16
16
  <link rel="modulepreload" crossorigin href="./assets/vendor-tanstack-Dock0eH1.js">
17
17
  <link rel="modulepreload" crossorigin href="./assets/vendor-radix-4UOaVWza.js">
18
18
  <link rel="modulepreload" crossorigin href="./assets/vendor-recharts-D8rt5lKn.js">
@@ -642,7 +642,7 @@ import {
642
642
  wordpressSchemaDeployResultDtoSchema,
643
643
  wordpressSchemaStatusResultDtoSchema,
644
644
  wordpressStatusDtoSchema
645
- } from "./chunk-3JW762Q4.js";
645
+ } from "./chunk-6IR32MIH.js";
646
646
 
647
647
  // src/intelligence-service.ts
648
648
  import { eq as eq62, desc as desc27, asc as asc11, and as and51, ne as ne8, or as or14, inArray as inArray22, gte as gte14, lte as lte12, isNull as isNull9, sql as sql25, exists } from "drizzle-orm";
@@ -34400,7 +34400,7 @@ var routeCatalog = [
34400
34400
  method: "post",
34401
34401
  path: "/api/v1/projects/{name}/ads/campaigns",
34402
34402
  summary: "Create a paused OpenAI Ads campaign",
34403
- description: "The server always creates the campaign paused. Click bidding requires at least one unique conversion event-setting ID. Omit both bidding fields for legacy impressions mode. Status is not accepted from the caller.",
34403
+ description: "The server always creates the campaign paused. biddingType is what the account is billed for and is immutable after creation; conversionEventSettingIds is the independent, optional optimization target, so click bidding may carry none. Omit both bidding fields for legacy impressions mode. Status is not accepted from the caller.",
34404
34404
  tags: ["ads"],
34405
34405
  parameters: [nameParameter],
34406
34406
  requestBody: {
@@ -34421,7 +34421,7 @@ var routeCatalog = [
34421
34421
  type: "array",
34422
34422
  uniqueItems: true,
34423
34423
  items: stringSchema,
34424
- description: "Required and non-empty when biddingType is clicks."
34424
+ description: "Optional conversion events to optimize delivery toward. Independent of biddingType: a clicks campaign may omit these."
34425
34425
  }
34426
34426
  }
34427
34427
  } } }
@@ -70148,10 +70148,16 @@ function bindTrafficSyncSchedule(tx, projectId, sourceId, now, createIfMissing =
70148
70148
  }).run();
70149
70149
  return { changed: true, created: true };
70150
70150
  }
70151
+ var VercelRetentionClampError = class extends Error {
70152
+ constructor(requestedStartMs, effectiveStartMs) {
70153
+ super(
70154
+ `Vercel request-logs retention starts at ${new Date(effectiveStartMs).toISOString()}, after requested start ${new Date(requestedStartMs).toISOString()}; refusing to advance because historical traffic would be skipped`
70155
+ );
70156
+ this.name = "VercelRetentionClampError";
70157
+ }
70158
+ };
70151
70159
  function vercelRetentionClampError(requestedStartMs, effectiveStartMs) {
70152
- return new Error(
70153
- `Vercel request-logs retention starts at ${new Date(effectiveStartMs).toISOString()}, after requested start ${new Date(requestedStartMs).toISOString()}; refusing to advance because historical traffic would be skipped`
70154
- );
70160
+ return new VercelRetentionClampError(requestedStartMs, effectiveStartMs);
70155
70161
  }
70156
70162
  async function runBackfillTask(options) {
70157
70163
  const {
@@ -70164,13 +70170,13 @@ async function runBackfillTask(options) {
70164
70170
  pullForBackfill,
70165
70171
  pullErrorPrefix
70166
70172
  } = options;
70167
- const markFailed = (msg) => {
70173
+ const markFailed = (msg, preserveSourceState = false) => {
70168
70174
  const failedAt = (/* @__PURE__ */ new Date()).toISOString();
70169
70175
  try {
70170
70176
  app.db.transaction((tx) => {
70171
70177
  tx.update(runs).set({ status: RunStatuses.failed, error: msg, finishedAt: failedAt }).where(eq51(runs.id, runId)).run();
70172
70178
  const latestSource = tx.select().from(trafficSources).where(eq51(trafficSources.id, sourceRow2.id)).get();
70173
- if (latestSource && isAuthoritativeTrafficSource(tx, latestSource) && isSameTrafficSourceGeneration(latestSource, sourceRow2)) {
70179
+ if (!preserveSourceState && latestSource && isAuthoritativeTrafficSource(tx, latestSource) && isSameTrafficSourceGeneration(latestSource, sourceRow2)) {
70174
70180
  tx.update(trafficSources).set({ status: TrafficSourceStatuses.error, lastError: msg, updatedAt: failedAt }).where(eq51(trafficSources.id, sourceRow2.id)).run();
70175
70181
  }
70176
70182
  });
@@ -70185,7 +70191,10 @@ async function runBackfillTask(options) {
70185
70191
  try {
70186
70192
  allEvents = await pullForBackfill();
70187
70193
  } catch (e) {
70188
- markFailed(`${pullErrorPrefix}: ${describeError(e)}`);
70194
+ markFailed(
70195
+ `${pullErrorPrefix}: ${describeError(e)}`,
70196
+ e instanceof VercelRetentionClampError
70197
+ );
70189
70198
  return;
70190
70199
  }
70191
70200
  if (allEvents.length === 0) {
@@ -72300,7 +72309,8 @@ async function trafficRoutes(app, opts) {
72300
72309
  }
72301
72310
  const appliedDays = Math.min(requestedDays, MAX_BACKFILL_DAYS);
72302
72311
  const windowEnd = /* @__PURE__ */ new Date();
72303
- const windowStart = new Date(windowEnd.getTime() - appliedDays * 864e5);
72312
+ const requestedWindowStartMs = windowEnd.getTime() - appliedDays * 864e5;
72313
+ const windowStart = new Date(requestedWindowStartMs);
72304
72314
  windowStart.setUTCMinutes(0, 0, 0);
72305
72315
  let pullForBackfill;
72306
72316
  let pullErrorPrefix;
@@ -5,11 +5,11 @@ import {
5
5
  installSkills,
6
6
  loadConfigRaw,
7
7
  saveConfigPatch
8
- } from "./chunk-NFALEGSZ.js";
8
+ } from "./chunk-DA25LOTW.js";
9
9
  import {
10
10
  SKILL_MANIFEST_FILENAME,
11
11
  SkillsClients
12
- } from "./chunk-3JW762Q4.js";
12
+ } from "./chunk-6IR32MIH.js";
13
13
 
14
14
  // src/skills-autosync.ts
15
15
  import fs from "fs";
@@ -11,7 +11,7 @@ import {
11
11
  loadConfig,
12
12
  loadConfigRaw,
13
13
  saveConfigPatch
14
- } from "./chunk-NFALEGSZ.js";
14
+ } from "./chunk-DA25LOTW.js";
15
15
  import {
16
16
  CC_CACHE_DIR,
17
17
  DUCKDB_SPEC,
@@ -157,7 +157,7 @@ import {
157
157
  siteCrawlSnapshots,
158
158
  toAlertView,
159
159
  usageCounters
160
- } from "./chunk-VEEHINTY.js";
160
+ } from "./chunk-44LVINXQ.js";
161
161
  import {
162
162
  AGENT_MEMORY_VALUE_MAX_BYTES,
163
163
  AGENT_PROVIDER_IDS,
@@ -295,7 +295,7 @@ import {
295
295
  validationError,
296
296
  winnabilityClassLabel,
297
297
  withRetry
298
- } from "./chunk-3JW762Q4.js";
298
+ } from "./chunk-6IR32MIH.js";
299
299
 
300
300
  // src/telemetry.ts
301
301
  import crypto from "crypto";
@@ -7843,12 +7843,6 @@ function validateCampaignBidding(request) {
7843
7843
  throw new OpenAiAdsApiError("Campaign conversion_event_setting_ids must contain unique IDs", 400);
7844
7844
  }
7845
7845
  }
7846
- if (biddingType === OpenAiAdsBiddingTypes.clicks && (!Array.isArray(conversionIds) || conversionIds.length === 0)) {
7847
- throw new OpenAiAdsApiError(
7848
- "Click campaigns require at least one conversion_event_setting_id",
7849
- 400
7850
- );
7851
- }
7852
7846
  }
7853
7847
  function validateBiddingConfig(value) {
7854
7848
  validateRequestObject(value, "Ad group bidding_config");
@@ -11857,7 +11851,7 @@ function readStoredGroundingSources(rawResponse) {
11857
11851
  return result;
11858
11852
  }
11859
11853
  async function backfillInsightsCommand(project, opts) {
11860
- const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-NHAF7V6L.js");
11854
+ const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-RNBODYMZ.js");
11861
11855
  const config = loadConfig();
11862
11856
  const db = createClient(config.database);
11863
11857
  migrate(db);
@@ -15575,19 +15575,17 @@ var adsCampaignCreateRequestSchema = z52.object({
15575
15575
  endTime: adsTimestampSchema.optional(),
15576
15576
  lifetimeSpendLimitMicros: adsMicrosSchema.min(1e6),
15577
15577
  locationIds: z52.array(adsEntityIdSchema).min(1).max(100),
15578
+ // biddingType is BILLING (what the account pays for) and is immutable once
15579
+ // the provider creates the campaign. conversionEventSettingIds is
15580
+ // OPTIMIZATION (what delivery is steered toward). The two are independent,
15581
+ // and the provider accepts a clicks campaign carrying no conversion event
15582
+ // settings, so neither field is conditioned on the other here.
15578
15583
  biddingType: adsCampaignBiddingTypeSchema.optional(),
15579
15584
  conversionEventSettingIds: adsConversionEventSettingIdsSchema.optional()
15580
15585
  }).superRefine((value, ctx) => {
15581
15586
  if (value.startTime !== void 0 && value.endTime !== void 0 && value.endTime <= value.startTime) {
15582
15587
  ctx.addIssue({ code: "custom", path: ["endTime"], message: "endTime must be after startTime" });
15583
15588
  }
15584
- if (value.biddingType === AdsCampaignBiddingTypes.clicks && (value.conversionEventSettingIds === void 0 || value.conversionEventSettingIds.length === 0)) {
15585
- ctx.addIssue({
15586
- code: "custom",
15587
- path: ["conversionEventSettingIds"],
15588
- message: "conversionEventSettingIds must be non-empty when biddingType is clicks"
15589
- });
15590
- }
15591
15589
  });
15592
15590
  var adsAdGroupCreateRequestSchema = z52.object({
15593
15591
  operationKey: adsOperationKeySchema,
@@ -92,7 +92,7 @@ import {
92
92
  trafficConnectWordpressRequestSchema,
93
93
  trafficEventKindSchema,
94
94
  trafficSeriesGranularitySchema
95
- } from "./chunk-3JW762Q4.js";
95
+ } from "./chunk-6IR32MIH.js";
96
96
 
97
97
  // src/config.ts
98
98
  import fs from "fs";
@@ -11800,7 +11800,7 @@ var canonryMcpTools = [
11800
11800
  defineTool({
11801
11801
  name: "canonry_ads_campaign_create",
11802
11802
  title: "Create a paused ads campaign",
11803
- description: "Create an OpenAI Ads campaign PAUSED with an explicit lifetime spend limit and location allowlist. Set biddingType=clicks with one or more provider-issued conversionEventSettingIds for conversion-optimized delivery; omit both for legacy impressions bidding. The server ignores any status concept and always sends paused. Inspect the receipt, then create matching paused ad groups and ads. A human must separately approve the exact tree before this operator can activate it.",
11803
+ description: "Create an OpenAI Ads campaign PAUSED with an explicit lifetime spend limit and location allowlist. biddingType is what the account is BILLED for (clicks or the legacy impressions default) and is immutable after creation; conversionEventSettingIds are what delivery OPTIMIZES toward and are independent, so a clicks campaign may omit them; adding provider-issued IDs makes it conversion-optimized. The server ignores any status concept and always sends paused. Inspect the receipt, then create matching paused ad groups and ads. A human must separately approve the exact tree before this operator can activate it.",
11804
11804
  access: "write",
11805
11805
  tier: "ads",
11806
11806
  inputSchema: adsCampaignCreateInputSchema,
package/dist/cli.js CHANGED
@@ -26,11 +26,11 @@ import {
26
26
  showFirstRunNotice,
27
27
  trackCliCommandFinished,
28
28
  trackEvent
29
- } from "./chunk-BJAZWJNH.js";
29
+ } from "./chunk-665YENL2.js";
30
30
  import {
31
31
  autoSyncSkills,
32
32
  formatAutoSyncNotice
33
- } from "./chunk-A6XDLCKF.js";
33
+ } from "./chunk-4XHQ2GCN.js";
34
34
  import {
35
35
  CliError,
36
36
  EXIT_SYSTEM_ERROR,
@@ -55,7 +55,7 @@ import {
55
55
  saveConfigPatch,
56
56
  systemError,
57
57
  usageError
58
- } from "./chunk-NFALEGSZ.js";
58
+ } from "./chunk-DA25LOTW.js";
59
59
  import {
60
60
  CLOUDFLARE_WORKER_BINDINGS,
61
61
  CLOUDFLARE_WORKER_GENERATED_MARKER,
@@ -69,7 +69,7 @@ import {
69
69
  projects,
70
70
  queries,
71
71
  renderReportHtml
72
- } from "./chunk-VEEHINTY.js";
72
+ } from "./chunk-44LVINXQ.js";
73
73
  import {
74
74
  AdsDeliverySnapshotStatuses,
75
75
  AdsHistoricalCampaignRollupStatuses,
@@ -138,7 +138,7 @@ import {
138
138
  providerQuotaPolicySchema,
139
139
  resolveProviderInput,
140
140
  winnabilityClassSchema
141
- } from "./chunk-3JW762Q4.js";
141
+ } from "./chunk-6IR32MIH.js";
142
142
 
143
143
  // src/cli.ts
144
144
  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-BJAZWJNH.js";
6
+ } from "./chunk-665YENL2.js";
7
7
  import {
8
8
  loadConfig
9
- } from "./chunk-NFALEGSZ.js";
10
- import "./chunk-VEEHINTY.js";
11
- import "./chunk-3JW762Q4.js";
9
+ } from "./chunk-DA25LOTW.js";
10
+ import "./chunk-44LVINXQ.js";
11
+ import "./chunk-6IR32MIH.js";
12
12
  export {
13
13
  GoogleMarketingRuntimeError,
14
14
  createGoogleMarketingCredentialStore,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  IntelligenceService
3
- } from "./chunk-VEEHINTY.js";
4
- import "./chunk-3JW762Q4.js";
3
+ } from "./chunk-44LVINXQ.js";
4
+ import "./chunk-6IR32MIH.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-A6XDLCKF.js";
3
+ } from "./chunk-4XHQ2GCN.js";
4
4
  import {
5
5
  createApiClient,
6
6
  createCanonryMcpServer
7
- } from "./chunk-NFALEGSZ.js";
7
+ } from "./chunk-DA25LOTW.js";
8
8
  import {
9
9
  isReadOnlyKey
10
- } from "./chunk-3JW762Q4.js";
10
+ } from "./chunk-6IR32MIH.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": "@canonry/canonry",
3
- "version": "4.180.1",
3
+ "version": "4.180.2",
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-api-routes": "0.0.0",
74
73
  "@ainyc/canonry-api-client": "0.0.0",
74
+ "@ainyc/canonry-api-routes": "0.0.0",
75
75
  "@ainyc/canonry-config": "0.0.0",
76
- "@ainyc/canonry-contracts": "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
79
  "@ainyc/canonry-integration-cloud-run": "0.0.0",
80
- "@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
81
80
  "@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
82
81
  "@ainyc/canonry-integration-commoncrawl": "0.0.0",
83
82
  "@ainyc/canonry-integration-google": "0.0.0",
83
+ "@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
84
84
  "@ainyc/canonry-integration-google-ads": "0.0.0",
85
85
  "@ainyc/canonry-integration-google-business-profile": "0.0.0",
86
86
  "@ainyc/canonry-integration-google-places": "0.0.0",
87
+ "@ainyc/canonry-integration-google-tag-manager": "0.0.0",
87
88
  "@ainyc/canonry-integration-traffic": "0.0.0",
88
89
  "@ainyc/canonry-integration-openai-ads": "0.0.0",
89
- "@ainyc/canonry-integration-wordpress": "0.0.0",
90
- "@ainyc/canonry-integration-google-tag-manager": "0.0.0",
90
+ "@ainyc/canonry-provider-claude": "0.0.0",
91
91
  "@ainyc/canonry-intelligence": "0.0.0",
92
92
  "@ainyc/canonry-provider-cdp": "0.0.0",
93
- "@ainyc/canonry-provider-claude": "0.0.0",
94
93
  "@ainyc/canonry-provider-gemini": "0.0.0",
95
94
  "@ainyc/canonry-provider-local": "0.0.0",
96
95
  "@ainyc/canonry-provider-perplexity": "0.0.0",
97
- "@ainyc/canonry-provider-openai": "0.0.0"
96
+ "@ainyc/canonry-provider-openai": "0.0.0",
97
+ "@ainyc/canonry-integration-wordpress": "0.0.0"
98
98
  },
99
99
  "scripts": {
100
100
  "build": "tsx scripts/copy-agent-assets.ts && tsup && tsx build-web.ts",