@canonry/canonry 4.179.0 → 4.179.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.
- package/assets/assets/{AuditHistoryPanel-lD6Q5KaA.js → AuditHistoryPanel-TTMgg1iQ.js} +1 -1
- package/assets/assets/{BacklinksPage-ClN1xbOa.js → BacklinksPage-BmlsStTz.js} +1 -1
- package/assets/assets/{HistoryPage-CXKCPfG7.js → HistoryPage-OlX3tvxL.js} +1 -1
- package/assets/assets/{MeasurementPropertyPage-CiJsa0If.js → MeasurementPropertyPage-B_usHzN3.js} +1 -1
- package/assets/assets/{ProjectPage-CD0QbHPd.js → ProjectPage-DsC2NUCt.js} +1 -1
- package/assets/assets/{RunRow-DkFcHvDU.js → RunRow-BL8kiPON.js} +1 -1
- package/assets/assets/{RunsPage-CLzUDwTj.js → RunsPage-BXMLPcIB.js} +1 -1
- package/assets/assets/{SettingsPage-0PRgB0gI.js → SettingsPage-Bm_T8JMf.js} +1 -1
- package/assets/assets/{SiteHealthSection-BXAMjVeD.js → SiteHealthSection-xlUYOOe2.js} +3 -3
- package/assets/assets/{TrafficPage-CP4qsn82.js → TrafficPage-DmyGEdhw.js} +1 -1
- package/assets/assets/{TrafficSourceDetailPage-DoaIZ_ix.js → TrafficSourceDetailPage-sbu3kXCD.js} +1 -1
- package/assets/assets/{extract-error-message-Cn74-t3z.js → extract-error-message-Ra108eiS.js} +1 -1
- package/assets/assets/{index-BR9BgNb3.js → index-rJBOFic-.js} +22 -22
- package/assets/assets/{react-sigma_core.esm.min-CZrBq6qL.js → react-sigma_core.esm.min-tfJo9bgS.js} +1 -1
- package/assets/index.html +1 -1
- package/dist/{chunk-A2AB7UK5.js → chunk-E2JGJH5E.js} +15 -8
- package/dist/{chunk-T7QWSNIE.js → chunk-F4HFEWLM.js} +2 -2
- package/dist/{chunk-JFGP2U52.js → chunk-SKL6ZDIY.js} +4 -4
- package/dist/{chunk-ZCNQGO3J.js → chunk-VRQ7U4HU.js} +2 -2
- package/dist/{chunk-RDCTWBPF.js → chunk-Z46AW53D.js} +112 -27
- package/dist/cli.js +5 -5
- package/dist/index.js +4 -4
- package/dist/{intelligence-service-VBLTZGHS.js → intelligence-service-F67UFJBG.js} +2 -2
- package/dist/mcp.js +3 -3
- package/package.json +8 -8
package/assets/assets/{react-sigma_core.esm.min-CZrBq6qL.js → react-sigma_core.esm.min-tfJo9bgS.js}
RENAMED
|
@@ -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-
|
|
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-xlUYOOe2.js";import"./index-rJBOFic-.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-
|
|
15
|
+
<script type="module" crossorigin src="./assets/index-rJBOFic-.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">
|
|
@@ -15427,12 +15427,19 @@ var adsActivationEntityRefSchema = z52.object({
|
|
|
15427
15427
|
expectedUpdatedAt: z52.number().int().nonnegative()
|
|
15428
15428
|
}).strict();
|
|
15429
15429
|
var adsActivationAdSchema = adsActivationEntityRefSchema;
|
|
15430
|
+
var ADS_ACTIVATION_ABSOLUTE_MAX_ENTITIES = 1e3;
|
|
15430
15431
|
var ADS_ACTIVATION_MAX_ENTITIES = 100;
|
|
15432
|
+
function countAdsActivationManifestEntities(manifest) {
|
|
15433
|
+
return 1 + manifest.campaign.adGroups.reduce(
|
|
15434
|
+
(count, group) => count + 1 + group.ads.length,
|
|
15435
|
+
0
|
|
15436
|
+
);
|
|
15437
|
+
}
|
|
15431
15438
|
var adsActivationAdGroupSchema = adsActivationEntityRefSchema.extend({
|
|
15432
|
-
ads: z52.array(adsActivationAdSchema).min(1).max(
|
|
15439
|
+
ads: z52.array(adsActivationAdSchema).min(1).max(ADS_ACTIVATION_ABSOLUTE_MAX_ENTITIES - 1)
|
|
15433
15440
|
}).strict();
|
|
15434
15441
|
var adsActivationCampaignSchema = adsActivationEntityRefSchema.extend({
|
|
15435
|
-
adGroups: z52.array(adsActivationAdGroupSchema).min(1).max(
|
|
15442
|
+
adGroups: z52.array(adsActivationAdGroupSchema).min(1).max(ADS_ACTIVATION_ABSOLUTE_MAX_ENTITIES - 1)
|
|
15436
15443
|
}).strict();
|
|
15437
15444
|
function compareAdsActivationEntityIds(left, right) {
|
|
15438
15445
|
if (left < right) return -1;
|
|
@@ -15454,15 +15461,12 @@ function addCanonicalEntityOrderIssue(items, path, ctx) {
|
|
|
15454
15461
|
var adsActivationManifestSchema = z52.object({
|
|
15455
15462
|
campaign: adsActivationCampaignSchema
|
|
15456
15463
|
}).strict().superRefine((manifest, ctx) => {
|
|
15457
|
-
const entityCount =
|
|
15458
|
-
|
|
15459
|
-
0
|
|
15460
|
-
);
|
|
15461
|
-
if (entityCount > ADS_ACTIVATION_MAX_ENTITIES) {
|
|
15464
|
+
const entityCount = countAdsActivationManifestEntities(manifest);
|
|
15465
|
+
if (entityCount > ADS_ACTIVATION_ABSOLUTE_MAX_ENTITIES) {
|
|
15462
15466
|
ctx.addIssue({
|
|
15463
15467
|
code: "custom",
|
|
15464
15468
|
path: ["campaign"],
|
|
15465
|
-
message: `Activation manifests may contain at most ${
|
|
15469
|
+
message: `Activation manifests may contain at most ${ADS_ACTIVATION_ABSOLUTE_MAX_ENTITIES} entities`
|
|
15466
15470
|
});
|
|
15467
15471
|
}
|
|
15468
15472
|
addCanonicalEntityOrderIssue(manifest.campaign.adGroups, ["campaign", "adGroups"], ctx);
|
|
@@ -16999,6 +17003,9 @@ export {
|
|
|
16999
17003
|
AdsEntityStatuses,
|
|
17000
17004
|
AdsEntityTypes,
|
|
17001
17005
|
AdsActivationEntityTypes,
|
|
17006
|
+
ADS_ACTIVATION_ABSOLUTE_MAX_ENTITIES,
|
|
17007
|
+
ADS_ACTIVATION_MAX_ENTITIES,
|
|
17008
|
+
countAdsActivationManifestEntities,
|
|
17002
17009
|
adsActivationManifestSchema,
|
|
17003
17010
|
canonicalizeAdsActivationManifest,
|
|
17004
17011
|
adsActivationManifestHashSchema,
|
|
@@ -92,7 +92,7 @@ import {
|
|
|
92
92
|
trafficConnectWordpressRequestSchema,
|
|
93
93
|
trafficEventKindSchema,
|
|
94
94
|
trafficSeriesGranularitySchema
|
|
95
|
-
} from "./chunk-
|
|
95
|
+
} from "./chunk-E2JGJH5E.js";
|
|
96
96
|
|
|
97
97
|
// src/config.ts
|
|
98
98
|
import fs from "fs";
|
|
@@ -10388,7 +10388,7 @@ var canonryMcpTools = [
|
|
|
10388
10388
|
defineTool({
|
|
10389
10389
|
name: "canonry_apply_config",
|
|
10390
10390
|
title: "Apply project config",
|
|
10391
|
-
description: "Apply one Canonry config-as-code project document. Replaces the project to match the config \u2014 fields omitted from the spec are reset to defaults. For multi-document YAML, call this tool once per project document.",
|
|
10391
|
+
description: "Apply one Canonry config-as-code project document. Replaces the project to match the config \u2014 fields omitted from the spec are reset to defaults, with one exception: a spec with neither queries nor keywords leaves the tracked-query basket unchanged. To clear the basket, pass an explicit empty queries list. For multi-document YAML, call this tool once per project document.",
|
|
10392
10392
|
access: "write",
|
|
10393
10393
|
tier: "core",
|
|
10394
10394
|
inputSchema: applyConfigInputSchema,
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
loadConfig,
|
|
12
12
|
loadConfigRaw,
|
|
13
13
|
saveConfigPatch
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-F4HFEWLM.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-
|
|
160
|
+
} from "./chunk-Z46AW53D.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-
|
|
298
|
+
} from "./chunk-E2JGJH5E.js";
|
|
299
299
|
|
|
300
300
|
// src/telemetry.ts
|
|
301
301
|
import crypto from "crypto";
|
|
@@ -11857,7 +11857,7 @@ function readStoredGroundingSources(rawResponse) {
|
|
|
11857
11857
|
return result;
|
|
11858
11858
|
}
|
|
11859
11859
|
async function backfillInsightsCommand(project, opts) {
|
|
11860
|
-
const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-
|
|
11860
|
+
const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-F67UFJBG.js");
|
|
11861
11861
|
const config = loadConfig();
|
|
11862
11862
|
const db = createClient(config.database);
|
|
11863
11863
|
migrate(db);
|
|
@@ -5,11 +5,11 @@ import {
|
|
|
5
5
|
installSkills,
|
|
6
6
|
loadConfigRaw,
|
|
7
7
|
saveConfigPatch
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-F4HFEWLM.js";
|
|
9
9
|
import {
|
|
10
10
|
SKILL_MANIFEST_FILENAME,
|
|
11
11
|
SkillsClients
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-E2JGJH5E.js";
|
|
13
13
|
|
|
14
14
|
// src/skills-autosync.ts
|
|
15
15
|
import fs from "fs";
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ADS_ACTIVATE_SCOPE,
|
|
3
|
+
ADS_ACTIVATION_ABSOLUTE_MAX_ENTITIES,
|
|
4
|
+
ADS_ACTIVATION_MAX_ENTITIES,
|
|
3
5
|
ADS_APPROVE_SCOPE,
|
|
4
6
|
ADS_WRITE_SCOPE,
|
|
5
7
|
AGENT_PROVIDER_IDS,
|
|
@@ -251,6 +253,7 @@ import {
|
|
|
251
253
|
conversionTrackingIntegrityReadEnvelopeSchema,
|
|
252
254
|
conversionTrackingOptionsDtoSchema,
|
|
253
255
|
cosineSimilarity,
|
|
256
|
+
countAdsActivationManifestEntities,
|
|
254
257
|
createApiKeyRequestSchema,
|
|
255
258
|
createTemplateLinkPairIndex,
|
|
256
259
|
createUserRequestSchema,
|
|
@@ -639,7 +642,7 @@ import {
|
|
|
639
642
|
wordpressSchemaDeployResultDtoSchema,
|
|
640
643
|
wordpressSchemaStatusResultDtoSchema,
|
|
641
644
|
wordpressStatusDtoSchema
|
|
642
|
-
} from "./chunk-
|
|
645
|
+
} from "./chunk-E2JGJH5E.js";
|
|
643
646
|
|
|
644
647
|
// src/intelligence-service.ts
|
|
645
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";
|
|
@@ -20870,6 +20873,7 @@ async function applyRoutes(app, opts) {
|
|
|
20870
20873
|
}
|
|
20871
20874
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
20872
20875
|
const name = config.metadata.name;
|
|
20876
|
+
const managesQueries = "queries" in rawSpec || "keywords" in rawSpec;
|
|
20873
20877
|
const configQueries = resolveConfigSpecQueries(config.spec);
|
|
20874
20878
|
const target = app.db.select({ id: projects.id, providerModels: projects.providerModels }).from(projects).where(eq22(projects.name, name)).get();
|
|
20875
20879
|
const scopedProjectId = request.apiKey?.projectId;
|
|
@@ -20948,14 +20952,16 @@ async function applyRoutes(app, opts) {
|
|
|
20948
20952
|
entityId: projectId
|
|
20949
20953
|
});
|
|
20950
20954
|
}
|
|
20951
|
-
|
|
20952
|
-
|
|
20953
|
-
|
|
20954
|
-
|
|
20955
|
-
|
|
20956
|
-
|
|
20957
|
-
|
|
20958
|
-
|
|
20955
|
+
if (managesQueries) {
|
|
20956
|
+
replaceProjectQueries(tx, projectId, configQueries, now);
|
|
20957
|
+
writeAuditLog(tx, {
|
|
20958
|
+
projectId,
|
|
20959
|
+
actor: "api",
|
|
20960
|
+
action: "queries.replaced",
|
|
20961
|
+
entityType: "query",
|
|
20962
|
+
diff: { queries: configQueries }
|
|
20963
|
+
});
|
|
20964
|
+
}
|
|
20959
20965
|
tx.delete(competitors).where(eq22(competitors.projectId, projectId)).run();
|
|
20960
20966
|
const normalizedCompetitors = normalizeCompetitorList2(config.spec.competitors);
|
|
20961
20967
|
for (const domain of normalizedCompetitors) {
|
|
@@ -34266,7 +34272,7 @@ var routeCatalog = [
|
|
|
34266
34272
|
method: "post",
|
|
34267
34273
|
path: "/api/v1/projects/{name}/ads/activation-grants",
|
|
34268
34274
|
summary: "Approve one exact paused OpenAI Ads campaign tree for activation",
|
|
34269
|
-
description: "Human-only approval surface. The authenticated ads.approve key is recorded as approver and must differ from the named executor key. Canonry verifies account eligibility, exact parent-child membership, paused state, upstream timestamps, and ad review approval before issuing a short-lived single-use grant.",
|
|
34275
|
+
description: "Human-only approval surface. The authenticated ads.approve key is recorded as approver and must differ from the named executor key. Canonry verifies account eligibility, exact parent-child membership, paused state, upstream timestamps, and ad review approval before issuing a short-lived single-use grant. New grants are refused when the manifest exceeds the deployment's operational entity cap (default 100, tunable via CANONRY_ADS_ACTIVATION_MAX_ENTITIES to a whole number between 1 and the structural ceiling of 1000; a set-but-invalid value fails closed and refuses new grants until fixed).",
|
|
34270
34276
|
tags: ["ads"],
|
|
34271
34277
|
parameters: [nameParameter],
|
|
34272
34278
|
requestBody: {
|
|
@@ -34321,7 +34327,7 @@ var routeCatalog = [
|
|
|
34321
34327
|
method: "post",
|
|
34322
34328
|
path: "/api/v1/projects/{name}/ads/campaigns/{id}/activate-tree",
|
|
34323
34329
|
summary: "Execute a grant-bound OpenAI Ads campaign-tree activation",
|
|
34324
|
-
description: "Requires ads.activate and a nonexpired single-use grant bound to the exact executor key, project, advertiser account, manifest hash, campaign, entity IDs, and upstream timestamps. Canonry activates ads first, then ad groups, then the campaign; every step is durably checkpointed and verified. Failure rolls back the campaign before children and ambiguous outcomes fail closed as unknown.",
|
|
34330
|
+
description: "Requires ads.activate and a nonexpired single-use grant bound to the exact executor key, project, advertiser account, manifest hash, campaign, entity IDs, and upstream timestamps. Canonry activates ads first, then ad groups, then the campaign; every step is durably checkpointed and verified. Failure rolls back the campaign before children and ambiguous outcomes fail closed as unknown. New executions are refused when the manifest exceeds the deployment's operational entity cap (default 100, tunable via CANONRY_ADS_ACTIVATION_MAX_ENTITIES to a whole number between 1 and the structural ceiling of 1000; a set-but-invalid value fails closed and refuses new executions until fixed); stored receipts replay and reconcile regardless.",
|
|
34325
34331
|
tags: ["ads"],
|
|
34326
34332
|
parameters: [
|
|
34327
34333
|
nameParameter,
|
|
@@ -43176,10 +43182,6 @@ async function googleMarketingRoutes(app, opts) {
|
|
|
43176
43182
|
import crypto35 from "crypto";
|
|
43177
43183
|
import { eq as eq43, and as and35, asc as asc8, desc as desc19, gt as gt2, gte as gte9, lt as lt8, lte as lte8, ne as ne5, inArray as inArray17, or as or10, isNull as isNull5, isNotNull as isNotNull2, sql as sql17 } from "drizzle-orm";
|
|
43178
43184
|
|
|
43179
|
-
// ../api-routes/src/ads-activation-routes.ts
|
|
43180
|
-
import crypto34 from "crypto";
|
|
43181
|
-
import { and as and34, asc as asc7, eq as eq42, gt, isNotNull, isNull as isNull4, lte as lte7, or as or9, sql as sql16 } from "drizzle-orm";
|
|
43182
|
-
|
|
43183
43185
|
// ../api-routes/src/ads-activation.ts
|
|
43184
43186
|
import crypto33 from "crypto";
|
|
43185
43187
|
var AdsActivationErrorCodes = {
|
|
@@ -43218,6 +43220,55 @@ var AdsActivationError = class extends Error {
|
|
|
43218
43220
|
operation;
|
|
43219
43221
|
entity;
|
|
43220
43222
|
};
|
|
43223
|
+
function createMemoizedAdsActivationProvider(source) {
|
|
43224
|
+
const adGroupsByCampaignId = /* @__PURE__ */ new Map();
|
|
43225
|
+
const adsByAdGroupId = /* @__PURE__ */ new Map();
|
|
43226
|
+
const readThrough = (cache, parentId, load) => {
|
|
43227
|
+
const cached = cache.get(parentId);
|
|
43228
|
+
if (cached) return cached;
|
|
43229
|
+
const pending = load();
|
|
43230
|
+
cache.set(parentId, pending);
|
|
43231
|
+
pending.catch(() => {
|
|
43232
|
+
if (cache.get(parentId) === pending) cache.delete(parentId);
|
|
43233
|
+
});
|
|
43234
|
+
return pending;
|
|
43235
|
+
};
|
|
43236
|
+
const invalidate = () => {
|
|
43237
|
+
adGroupsByCampaignId.clear();
|
|
43238
|
+
adsByAdGroupId.clear();
|
|
43239
|
+
};
|
|
43240
|
+
const mutate = async (run) => {
|
|
43241
|
+
try {
|
|
43242
|
+
return await run();
|
|
43243
|
+
} finally {
|
|
43244
|
+
invalidate();
|
|
43245
|
+
}
|
|
43246
|
+
};
|
|
43247
|
+
const listAdGroups = (campaignId) => readThrough(adGroupsByCampaignId, campaignId, () => source.listAdGroups(campaignId));
|
|
43248
|
+
const listAds = (adGroupId) => readThrough(adsByAdGroupId, adGroupId, () => source.listAds(adGroupId));
|
|
43249
|
+
return {
|
|
43250
|
+
getAccount: () => source.getAccount(),
|
|
43251
|
+
getCampaign: (id) => source.getCampaign(id),
|
|
43252
|
+
listAdGroups,
|
|
43253
|
+
getAdGroup: async (id, campaignId) => {
|
|
43254
|
+
const entity = (await listAdGroups(campaignId)).find((candidate) => candidate.id === id);
|
|
43255
|
+
if (!entity) throw new Error("OpenAI Ads ad group was not found under the approved campaign");
|
|
43256
|
+
return entity;
|
|
43257
|
+
},
|
|
43258
|
+
listAds,
|
|
43259
|
+
getAd: async (id, adGroupId) => {
|
|
43260
|
+
const entity = (await listAds(adGroupId)).find((candidate) => candidate.id === id);
|
|
43261
|
+
if (!entity) throw new Error("OpenAI Ads ad was not found under the approved ad group");
|
|
43262
|
+
return entity;
|
|
43263
|
+
},
|
|
43264
|
+
activateCampaign: (id) => mutate(() => source.activateCampaign(id)),
|
|
43265
|
+
activateAdGroup: (id) => mutate(() => source.activateAdGroup(id)),
|
|
43266
|
+
activateAd: (id) => mutate(() => source.activateAd(id)),
|
|
43267
|
+
pauseCampaign: (id) => mutate(() => source.pauseCampaign(id)),
|
|
43268
|
+
pauseAdGroup: (id) => mutate(() => source.pauseAdGroup(id)),
|
|
43269
|
+
pauseAd: (id) => mutate(() => source.pauseAd(id))
|
|
43270
|
+
};
|
|
43271
|
+
}
|
|
43221
43272
|
var DEFAULT_LEASE_MS = 5 * 6e4;
|
|
43222
43273
|
var DEFAULT_ACTIVATION_VERIFICATION_RETRY_DELAYS_MS = [100, 250, 500, 1e3, 2e3, 2e3];
|
|
43223
43274
|
var PROVIDER_PAUSED = "paused";
|
|
@@ -44514,6 +44565,8 @@ async function executeApprovedAdsActivation(dependencies, request) {
|
|
|
44514
44565
|
}
|
|
44515
44566
|
|
|
44516
44567
|
// ../api-routes/src/ads-activation-routes.ts
|
|
44568
|
+
import crypto34 from "crypto";
|
|
44569
|
+
import { and as and34, asc as asc7, eq as eq42, gt, isNotNull, isNull as isNull4, lte as lte7, or as or9, sql as sql16 } from "drizzle-orm";
|
|
44517
44570
|
var MAX_ACTIVATION_GRANT_LIFETIME_MS = 24 * 60 * 60 * 1e3;
|
|
44518
44571
|
var ACTIVATION_LEASE_MS = 5 * 6e4;
|
|
44519
44572
|
var ACTIVATION_REVOCATION_SETTLEMENT_MS = ACTIVATION_LEASE_MS;
|
|
@@ -44931,6 +44984,40 @@ function countManifest(manifest) {
|
|
|
44931
44984
|
adCount: manifest.campaign.adGroups.reduce((count2, group) => count2 + group.ads.length, 0)
|
|
44932
44985
|
};
|
|
44933
44986
|
}
|
|
44987
|
+
function resolveAdsActivationMaxEntities(env = process.env) {
|
|
44988
|
+
const raw = env.CANONRY_ADS_ACTIVATION_MAX_ENTITIES;
|
|
44989
|
+
if (raw === void 0 || raw.trim() === "") return ADS_ACTIVATION_MAX_ENTITIES;
|
|
44990
|
+
const trimmed = raw.trim();
|
|
44991
|
+
const parsed = /^\d+$/.test(trimmed) ? Number(trimmed) : Number.NaN;
|
|
44992
|
+
if (!Number.isSafeInteger(parsed) || parsed < 1 || parsed > ADS_ACTIVATION_ABSOLUTE_MAX_ENTITIES) {
|
|
44993
|
+
throw internalError(
|
|
44994
|
+
`CANONRY_ADS_ACTIVATION_MAX_ENTITIES is set to the invalid value "${raw}". It must be a whole number between 1 and ${ADS_ACTIVATION_ABSOLUTE_MAX_ENTITIES} (unset it to use the default of ${ADS_ACTIVATION_MAX_ENTITIES}). New ads activations are refused until the variable is fixed.`,
|
|
44995
|
+
{
|
|
44996
|
+
envVar: "CANONRY_ADS_ACTIVATION_MAX_ENTITIES",
|
|
44997
|
+
value: raw,
|
|
44998
|
+
min: 1,
|
|
44999
|
+
max: ADS_ACTIVATION_ABSOLUTE_MAX_ENTITIES,
|
|
45000
|
+
default: ADS_ACTIVATION_MAX_ENTITIES
|
|
45001
|
+
}
|
|
45002
|
+
);
|
|
45003
|
+
}
|
|
45004
|
+
return parsed;
|
|
45005
|
+
}
|
|
45006
|
+
function enforceAdsActivationOperationalCap(manifest) {
|
|
45007
|
+
const maxEntities = resolveAdsActivationMaxEntities();
|
|
45008
|
+
const entityCount = countAdsActivationManifestEntities(manifest);
|
|
45009
|
+
if (entityCount > maxEntities) {
|
|
45010
|
+
throw validationError(
|
|
45011
|
+
`New ads activations may contain at most ${maxEntities} entities (raise CANONRY_ADS_ACTIVATION_MAX_ENTITIES to change the operational cap)`,
|
|
45012
|
+
{
|
|
45013
|
+
entityCount,
|
|
45014
|
+
maxEntities,
|
|
45015
|
+
absoluteMaxEntities: ADS_ACTIVATION_ABSOLUTE_MAX_ENTITIES,
|
|
45016
|
+
envVar: "CANONRY_ADS_ACTIVATION_MAX_ENTITIES"
|
|
45017
|
+
}
|
|
45018
|
+
);
|
|
45019
|
+
}
|
|
45020
|
+
}
|
|
44934
45021
|
function requireAuthenticatedKey(request) {
|
|
44935
45022
|
if (!request.apiKey) {
|
|
44936
45023
|
throw forbidden("Ads activation approval and execution require an authenticated API key");
|
|
@@ -45375,6 +45462,7 @@ function registerAdsActivationRoutes(app, opts) {
|
|
|
45375
45462
|
const approver = requireAuthenticatedKey(request);
|
|
45376
45463
|
const project = resolveProject(app.db, request.params.name);
|
|
45377
45464
|
const body = parseBody3(adsActivationGrantCreateRequestSchema, request.body);
|
|
45465
|
+
enforceAdsActivationOperationalCap(body.manifest);
|
|
45378
45466
|
const now = /* @__PURE__ */ new Date();
|
|
45379
45467
|
const expiresAt = Date.parse(body.expiresAt);
|
|
45380
45468
|
if (!Number.isFinite(expiresAt) || expiresAt <= now.getTime() || expiresAt > now.getTime() + MAX_ACTIVATION_GRANT_LIFETIME_MS) {
|
|
@@ -45537,6 +45625,9 @@ function registerAdsActivationRoutes(app, opts) {
|
|
|
45537
45625
|
if (grant.manifestHash !== body.manifestHash) {
|
|
45538
45626
|
throw validationError("The activation grant does not match the requested manifest hash");
|
|
45539
45627
|
}
|
|
45628
|
+
if (!grant.operationId) {
|
|
45629
|
+
enforceAdsActivationOperationalCap(grant.manifest);
|
|
45630
|
+
}
|
|
45540
45631
|
try {
|
|
45541
45632
|
const terminal = terminalActivationResponse(app, opts, grant, body.operationKey);
|
|
45542
45633
|
if (terminal) return terminal;
|
|
@@ -46983,20 +47074,14 @@ async function adsRoutes(app, opts) {
|
|
|
46983
47074
|
entity: { ...entity, status: entity.status, updatedAt: entity.updatedAt }
|
|
46984
47075
|
});
|
|
46985
47076
|
},
|
|
46986
|
-
|
|
47077
|
+
// getAdGroup/getAd are list-derived (no single-entity upstream read),
|
|
47078
|
+
// so the memoized provider shares one list walk per parent across the
|
|
47079
|
+
// whole verification pass and clears its cache on every mutation —
|
|
47080
|
+
// see createMemoizedAdsActivationProvider for the invariants.
|
|
47081
|
+
provider: createMemoizedAdsActivationProvider({
|
|
46987
47082
|
getAccount: refreshAccount,
|
|
46988
47083
|
getCampaign: (id) => operator.getCampaign(apiKey, id),
|
|
46989
|
-
getAdGroup: async (id, campaignId) => {
|
|
46990
|
-
const entity = (await operator.listAdGroups(apiKey, campaignId)).find((candidate) => candidate.id === id);
|
|
46991
|
-
if (!entity) throw new Error("OpenAI Ads ad group was not found under the approved campaign");
|
|
46992
|
-
return entity;
|
|
46993
|
-
},
|
|
46994
47084
|
listAdGroups: (campaignId) => operator.listAdGroups(apiKey, campaignId),
|
|
46995
|
-
getAd: async (id, adGroupId) => {
|
|
46996
|
-
const entity = (await operator.listAds(apiKey, adGroupId)).find((candidate) => candidate.id === id);
|
|
46997
|
-
if (!entity) throw new Error("OpenAI Ads ad was not found under the approved ad group");
|
|
46998
|
-
return entity;
|
|
46999
|
-
},
|
|
47000
47085
|
listAds: (adGroupId) => operator.listAds(apiKey, adGroupId),
|
|
47001
47086
|
activateCampaign: (id) => activateCampaign(apiKey, id),
|
|
47002
47087
|
activateAdGroup: (id) => activateAdGroup(apiKey, id),
|
|
@@ -47004,7 +47089,7 @@ async function adsRoutes(app, opts) {
|
|
|
47004
47089
|
pauseCampaign: (id) => operator.pauseCampaign(apiKey, id),
|
|
47005
47090
|
pauseAdGroup: (id) => operator.pauseAdGroup(apiKey, id),
|
|
47006
47091
|
pauseAd: (id) => operator.pauseAd(apiKey, id)
|
|
47007
|
-
}
|
|
47092
|
+
})
|
|
47008
47093
|
};
|
|
47009
47094
|
},
|
|
47010
47095
|
toOperationDto: operationDto
|
package/dist/cli.js
CHANGED
|
@@ -26,11 +26,11 @@ import {
|
|
|
26
26
|
showFirstRunNotice,
|
|
27
27
|
trackCliCommandFinished,
|
|
28
28
|
trackEvent
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-SKL6ZDIY.js";
|
|
30
30
|
import {
|
|
31
31
|
autoSyncSkills,
|
|
32
32
|
formatAutoSyncNotice
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-VRQ7U4HU.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-
|
|
58
|
+
} from "./chunk-F4HFEWLM.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-
|
|
72
|
+
} from "./chunk-Z46AW53D.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-
|
|
141
|
+
} from "./chunk-E2JGJH5E.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-
|
|
6
|
+
} from "./chunk-SKL6ZDIY.js";
|
|
7
7
|
import {
|
|
8
8
|
loadConfig
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-F4HFEWLM.js";
|
|
10
|
+
import "./chunk-Z46AW53D.js";
|
|
11
|
+
import "./chunk-E2JGJH5E.js";
|
|
12
12
|
export {
|
|
13
13
|
GoogleMarketingRuntimeError,
|
|
14
14
|
createGoogleMarketingCredentialStore,
|
package/dist/mcp.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
autoSyncSkills
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-VRQ7U4HU.js";
|
|
4
4
|
import {
|
|
5
5
|
createApiClient,
|
|
6
6
|
createCanonryMcpServer
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-F4HFEWLM.js";
|
|
8
8
|
import {
|
|
9
9
|
isReadOnlyKey
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-E2JGJH5E.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.179.
|
|
3
|
+
"version": "4.179.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,25 +70,25 @@
|
|
|
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",
|
|
75
74
|
"@ainyc/canonry-config": "0.0.0",
|
|
76
|
-
"@ainyc/canonry-
|
|
77
|
-
"@ainyc/canonry-contracts": "0.0.0",
|
|
75
|
+
"@ainyc/canonry-api-client": "0.0.0",
|
|
78
76
|
"@ainyc/canonry-db": "0.0.0",
|
|
79
|
-
"@ainyc/canonry-
|
|
77
|
+
"@ainyc/canonry-contracts": "0.0.0",
|
|
78
|
+
"@ainyc/canonry-integration-bing": "0.0.0",
|
|
80
79
|
"@ainyc/canonry-integration-cloud-run": "0.0.0",
|
|
81
|
-
"@ainyc/canonry-integration-
|
|
80
|
+
"@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
|
|
82
81
|
"@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
|
|
82
|
+
"@ainyc/canonry-integration-commoncrawl": "0.0.0",
|
|
83
83
|
"@ainyc/canonry-integration-google": "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
|
-
"@ainyc/canonry-integration-google-tag-manager": "0.0.0",
|
|
87
86
|
"@ainyc/canonry-integration-google-places": "0.0.0",
|
|
87
|
+
"@ainyc/canonry-integration-google-tag-manager": "0.0.0",
|
|
88
88
|
"@ainyc/canonry-integration-openai-ads": "0.0.0",
|
|
89
|
+
"@ainyc/canonry-integration-traffic": "0.0.0",
|
|
89
90
|
"@ainyc/canonry-integration-wordpress": "0.0.0",
|
|
90
91
|
"@ainyc/canonry-intelligence": "0.0.0",
|
|
91
|
-
"@ainyc/canonry-integration-traffic": "0.0.0",
|
|
92
92
|
"@ainyc/canonry-provider-cdp": "0.0.0",
|
|
93
93
|
"@ainyc/canonry-provider-claude": "0.0.0",
|
|
94
94
|
"@ainyc/canonry-provider-gemini": "0.0.0",
|