@ainyc/canonry 4.186.9 → 4.187.0

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 (24) hide show
  1. package/assets/assets/{AuditHistoryPanel-aXPOAK7n.js → AuditHistoryPanel-G2iVWlbn.js} +1 -1
  2. package/assets/assets/{BacklinksPage-Bim-7fNk.js → BacklinksPage-B13UlDT7.js} +1 -1
  3. package/assets/assets/{HistoryPage-B8RyIjRC.js → HistoryPage-DZoRKfzJ.js} +1 -1
  4. package/assets/assets/{MeasurementPropertyPage-BlxY3qHW.js → MeasurementPropertyPage-DNxsAgEA.js} +1 -1
  5. package/assets/assets/{ProjectPage-BMZrEjBE.js → ProjectPage-BdfsfLkU.js} +1 -1
  6. package/assets/assets/{RunRow-B28gp-6g.js → RunRow-C9u35nrm.js} +1 -1
  7. package/assets/assets/{RunsPage-BXm6DVdt.js → RunsPage-DST-BpAu.js} +1 -1
  8. package/assets/assets/{SettingsPage-CJX7c5HH.js → SettingsPage-BC05JomS.js} +1 -1
  9. package/assets/assets/SiteHealthSection-DIeYA2HJ.js +4 -0
  10. package/assets/assets/{TrafficPage-wPdIYn8H.js → TrafficPage-DezdhoxL.js} +1 -1
  11. package/assets/assets/{TrafficSourceDetailPage-C813qZsA.js → TrafficSourceDetailPage-C0FIPjXi.js} +1 -1
  12. package/assets/assets/{extract-error-message-C3RpUAm_.js → extract-error-message-B5OYNTJO.js} +1 -1
  13. package/assets/assets/{index-Dr_-IUJz.js → index-DJWMbOc5.js} +18 -18
  14. package/assets/assets/{react-sigma_core.esm.min-LmiGNvR6.js → react-sigma_core.esm.min-B06R8tYw.js} +1 -1
  15. package/assets/index.html +1 -1
  16. package/dist/{chunk-U3M2VALC.js → chunk-5BUAG4CN.js} +8 -0
  17. package/dist/{chunk-O26JKJXV.js → chunk-B7WQ5Z4L.js} +22 -6
  18. package/dist/{chunk-XD2ZD2BP.js → chunk-IPALTNIE.js} +1 -1
  19. package/dist/cli.js +3 -3
  20. package/dist/index.d.ts +4 -2
  21. package/dist/index.js +2 -2
  22. package/dist/mcp.js +2 -2
  23. package/package.json +10 -10
  24. package/assets/assets/SiteHealthSection-Ys8sVumO.js +0 -4
@@ -1,4 +1,4 @@
1
- import{g as Bt,t as S,r as C}from"./vendor-tanstack-CYBjbqVr.js";import{e as Ht,G as Wt}from"./SiteHealthSection-Ys8sVumO.js";import"./index-Dr_-IUJz.js";import"./vendor-radix-BpmvLvpp.js";import"./vendor-recharts-FA0uySU7.js";import"./vendor-lucide-BovNTc41.js";import"./vendor-markdown-9tTeP8v7.js";import"./vendor-yaml-GWJz5H2G.js";import"./ChartPrimitives-DLEICrrL.js";function Vt(r,n){if(typeof r!="object"||!r)return r;var i=r[Symbol.toPrimitive];if(i!==void 0){var e=i.call(r,n);if(typeof e!="object")return e;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(r)}function ae(r){var n=Vt(r,"string");return typeof n=="symbol"?n:n+""}function A(r,n){if(!(r instanceof n))throw new TypeError("Cannot call a class as a function")}function He(r,n){for(var i=0;i<n.length;i++){var e=n[i];e.enumerable=e.enumerable||!1,e.configurable=!0,"value"in e&&(e.writable=!0),Object.defineProperty(r,ae(e.key),e)}}function L(r,n,i){return n&&He(r.prototype,n),i&&He(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r}function Q(r){return Q=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},Q(r)}function yt(){try{var r=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(yt=function(){return!!r})()}function jt(r){if(r===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return r}function Zt(r,n){if(n&&(typeof n=="object"||typeof n=="function"))return n;if(n!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return jt(r)}function I(r,n,i){return n=Q(n),Zt(r,yt()?Reflect.construct(n,i||[],Q(r).constructor):n.apply(r,i))}function xe(r,n){return xe=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(i,e){return i.__proto__=e,i},xe(r,n)}function G(r,n){if(typeof n!="function"&&n!==null)throw new TypeError("Super expression must either be null or a function");r.prototype=Object.create(n&&n.prototype,{constructor:{value:r,writable:!0,configurable:!0}}),Object.defineProperty(r,"prototype",{writable:!1}),n&&xe(r,n)}function qt(r){if(Array.isArray(r))return r}function Yt(r,n){var i=r==null?null:typeof Symbol<"u"&&r[Symbol.iterator]||r["@@iterator"];if(i!=null){var e,t,a,o,s=[],l=!0,h=!1;try{if(a=(i=i.call(r)).next,n===0){if(Object(i)!==i)return;l=!1}else for(;!(l=(e=a.call(i)).done)&&(s.push(e.value),s.length!==n);l=!0);}catch(u){h=!0,t=u}finally{try{if(!l&&i.return!=null&&(o=i.return(),Object(o)!==o))return}finally{if(h)throw t}}return s}}function Se(r,n){(n==null||n>r.length)&&(n=r.length);for(var i=0,e=Array(n);i<n;i++)e[i]=r[i];return e}function Tt(r,n){if(r){if(typeof r=="string")return Se(r,n);var i={}.toString.call(r).slice(8,-1);return i==="Object"&&r.constructor&&(i=r.constructor.name),i==="Map"||i==="Set"?Array.from(r):i==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?Se(r,n):void 0}}function Xt(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
1
+ import{g as Bt,t as S,r as C}from"./vendor-tanstack-CYBjbqVr.js";import{e as Ht,G as Wt}from"./SiteHealthSection-DIeYA2HJ.js";import"./index-DJWMbOc5.js";import"./vendor-radix-BpmvLvpp.js";import"./vendor-recharts-FA0uySU7.js";import"./vendor-lucide-BovNTc41.js";import"./vendor-markdown-9tTeP8v7.js";import"./vendor-yaml-GWJz5H2G.js";import"./ChartPrimitives-DLEICrrL.js";function Vt(r,n){if(typeof r!="object"||!r)return r;var i=r[Symbol.toPrimitive];if(i!==void 0){var e=i.call(r,n);if(typeof e!="object")return e;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(r)}function ae(r){var n=Vt(r,"string");return typeof n=="symbol"?n:n+""}function A(r,n){if(!(r instanceof n))throw new TypeError("Cannot call a class as a function")}function He(r,n){for(var i=0;i<n.length;i++){var e=n[i];e.enumerable=e.enumerable||!1,e.configurable=!0,"value"in e&&(e.writable=!0),Object.defineProperty(r,ae(e.key),e)}}function L(r,n,i){return n&&He(r.prototype,n),i&&He(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r}function Q(r){return Q=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},Q(r)}function yt(){try{var r=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(yt=function(){return!!r})()}function jt(r){if(r===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return r}function Zt(r,n){if(n&&(typeof n=="object"||typeof n=="function"))return n;if(n!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return jt(r)}function I(r,n,i){return n=Q(n),Zt(r,yt()?Reflect.construct(n,i||[],Q(r).constructor):n.apply(r,i))}function xe(r,n){return xe=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(i,e){return i.__proto__=e,i},xe(r,n)}function G(r,n){if(typeof n!="function"&&n!==null)throw new TypeError("Super expression must either be null or a function");r.prototype=Object.create(n&&n.prototype,{constructor:{value:r,writable:!0,configurable:!0}}),Object.defineProperty(r,"prototype",{writable:!1}),n&&xe(r,n)}function qt(r){if(Array.isArray(r))return r}function Yt(r,n){var i=r==null?null:typeof Symbol<"u"&&r[Symbol.iterator]||r["@@iterator"];if(i!=null){var e,t,a,o,s=[],l=!0,h=!1;try{if(a=(i=i.call(r)).next,n===0){if(Object(i)!==i)return;l=!1}else for(;!(l=(e=a.call(i)).done)&&(s.push(e.value),s.length!==n);l=!0);}catch(u){h=!0,t=u}finally{try{if(!l&&i.return!=null&&(o=i.return(),Object(o)!==o))return}finally{if(h)throw t}}return s}}function Se(r,n){(n==null||n>r.length)&&(n=r.length);for(var i=0,e=Array(n);i<n;i++)e[i]=r[i];return e}function Tt(r,n){if(r){if(typeof r=="string")return Se(r,n);var i={}.toString.call(r).slice(8,-1);return i==="Object"&&r.constructor&&(i=r.constructor.name),i==="Map"||i==="Set"?Array.from(r):i==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?Se(r,n):void 0}}function Xt(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
2
2
  In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function ee(r,n){return qt(r)||Yt(r,n)||Tt(r,n)||Xt()}var pe={black:"#000000",silver:"#C0C0C0",gray:"#808080",grey:"#808080",white:"#FFFFFF",maroon:"#800000",red:"#FF0000",purple:"#800080",fuchsia:"#FF00FF",green:"#008000",lime:"#00FF00",olive:"#808000",yellow:"#FFFF00",navy:"#000080",blue:"#0000FF",teal:"#008080",aqua:"#00FFFF",darkblue:"#00008B",mediumblue:"#0000CD",darkgreen:"#006400",darkcyan:"#008B8B",deepskyblue:"#00BFFF",darkturquoise:"#00CED1",mediumspringgreen:"#00FA9A",springgreen:"#00FF7F",cyan:"#00FFFF",midnightblue:"#191970",dodgerblue:"#1E90FF",lightseagreen:"#20B2AA",forestgreen:"#228B22",seagreen:"#2E8B57",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",limegreen:"#32CD32",mediumseagreen:"#3CB371",turquoise:"#40E0D0",royalblue:"#4169E1",steelblue:"#4682B4",darkslateblue:"#483D8B",mediumturquoise:"#48D1CC",indigo:"#4B0082",darkolivegreen:"#556B2F",cadetblue:"#5F9EA0",cornflowerblue:"#6495ED",rebeccapurple:"#663399",mediumaquamarine:"#66CDAA",dimgray:"#696969",dimgrey:"#696969",slateblue:"#6A5ACD",olivedrab:"#6B8E23",slategray:"#708090",slategrey:"#708090",lightslategray:"#778899",lightslategrey:"#778899",mediumslateblue:"#7B68EE",lawngreen:"#7CFC00",chartreuse:"#7FFF00",aquamarine:"#7FFFD4",skyblue:"#87CEEB",lightskyblue:"#87CEFA",blueviolet:"#8A2BE2",darkred:"#8B0000",darkmagenta:"#8B008B",saddlebrown:"#8B4513",darkseagreen:"#8FBC8F",lightgreen:"#90EE90",mediumpurple:"#9370DB",darkviolet:"#9400D3",palegreen:"#98FB98",darkorchid:"#9932CC",yellowgreen:"#9ACD32",sienna:"#A0522D",brown:"#A52A2A",darkgray:"#A9A9A9",darkgrey:"#A9A9A9",lightblue:"#ADD8E6",greenyellow:"#ADFF2F",paleturquoise:"#AFEEEE",lightsteelblue:"#B0C4DE",powderblue:"#B0E0E6",firebrick:"#B22222",darkgoldenrod:"#B8860B",mediumorchid:"#BA55D3",rosybrown:"#BC8F8F",darkkhaki:"#BDB76B",mediumvioletred:"#C71585",indianred:"#CD5C5C",peru:"#CD853F",chocolate:"#D2691E",tan:"#D2B48C",lightgray:"#D3D3D3",lightgrey:"#D3D3D3",thistle:"#D8BFD8",orchid:"#DA70D6",goldenrod:"#DAA520",palevioletred:"#DB7093",crimson:"#DC143C",gainsboro:"#DCDCDC",plum:"#DDA0DD",burlywood:"#DEB887",lightcyan:"#E0FFFF",lavender:"#E6E6FA",darksalmon:"#E9967A",violet:"#EE82EE",palegoldenrod:"#EEE8AA",lightcoral:"#F08080",khaki:"#F0E68C",aliceblue:"#F0F8FF",honeydew:"#F0FFF0",azure:"#F0FFFF",sandybrown:"#F4A460",wheat:"#F5DEB3",beige:"#F5F5DC",whitesmoke:"#F5F5F5",mintcream:"#F5FFFA",ghostwhite:"#F8F8FF",salmon:"#FA8072",antiquewhite:"#FAEBD7",linen:"#FAF0E6",lightgoldenrodyellow:"#FAFAD2",oldlace:"#FDF5E6",magenta:"#FF00FF",deeppink:"#FF1493",orangered:"#FF4500",tomato:"#FF6347",hotpink:"#FF69B4",coral:"#FF7F50",darkorange:"#FF8C00",lightsalmon:"#FFA07A",orange:"#FFA500",lightpink:"#FFB6C1",pink:"#FFC0CB",gold:"#FFD700",peachpuff:"#FFDAB9",navajowhite:"#FFDEAD",moccasin:"#FFE4B5",bisque:"#FFE4C4",mistyrose:"#FFE4E1",blanchedalmond:"#FFEBCD",papayawhip:"#FFEFD5",lavenderblush:"#FFF0F5",seashell:"#FFF5EE",cornsilk:"#FFF8DC",lemonchiffon:"#FFFACD",floralwhite:"#FFFAF0",snow:"#FFFAFA",lightyellow:"#FFFFE0",ivory:"#FFFFF0"},Ct=new Int8Array(4),be=new Int32Array(Ct.buffer,0,1),$t=new Float32Array(Ct.buffer,0,1),Kt=/^\s*rgba?\s*\(/,Jt=/^\s*rgba?\s*\(\s*([0-9]*)\s*,\s*([0-9]*)\s*,\s*([0-9]*)(?:\s*,\s*(.*)?)?\)\s*$/;function Qt(r){var n=0,i=0,e=0,t=1;if(r[0]==="#")r.length===4?(n=parseInt(r.charAt(1)+r.charAt(1),16),i=parseInt(r.charAt(2)+r.charAt(2),16),e=parseInt(r.charAt(3)+r.charAt(3),16)):(n=parseInt(r.charAt(1)+r.charAt(2),16),i=parseInt(r.charAt(3)+r.charAt(4),16),e=parseInt(r.charAt(5)+r.charAt(6),16)),r.length===9&&(t=parseInt(r.charAt(7)+r.charAt(8),16)/255);else if(Kt.test(r)){var a=r.match(Jt);a&&(n=+a[1],i=+a[2],e=+a[3],a[4]&&(t=+a[4]))}return{r:n,g:i,b:e,a:t}}var J={};for(var le in pe)J[le]=oe(pe[le]),J[pe[le]]=J[le];function Rt(r,n,i,e,t){return be[0]=e<<24|i<<16|n<<8|r,be[0]=be[0]&4278190079,$t[0]}function oe(r){if(r=r.toLowerCase(),typeof J[r]<"u")return J[r];var n=Qt(r),i=n.r,e=n.g,t=n.b,a=n.a;a=a*255|0;var o=Rt(i,e,t,a);return J[r]=o,o}var Ee={};function _t(r){if(typeof Ee[r]<"u")return Ee[r];var n=(r&16711680)>>>16,i=(r&65280)>>>8,e=r&255,t=255,a=Rt(n,i,e,t);return Ee[r]=a,a}function We(r,n,i,e){return i+(n<<8)+(r<<16)}function Ve(r,n,i,e,t,a){var o=Math.floor(i/a*t),s=Math.floor(r.drawingBufferHeight/a-e/a*t),l=new Uint8Array(4);r.bindFramebuffer(r.FRAMEBUFFER,n),r.readPixels(o,s,1,1,r.RGBA,r.UNSIGNED_BYTE,l);var h=ee(l,4),u=h[0],d=h[1],f=h[2],g=h[3];return[u,d,f,g]}function c(r,n,i){return(n=ae(n))in r?Object.defineProperty(r,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[n]=i,r}function je(r,n){var i=Object.keys(r);if(Object.getOwnPropertySymbols){var e=Object.getOwnPropertySymbols(r);n&&(e=e.filter(function(t){return Object.getOwnPropertyDescriptor(r,t).enumerable})),i.push.apply(i,e)}return i}function b(r){for(var n=1;n<arguments.length;n++){var i=arguments[n]!=null?arguments[n]:{};n%2?je(Object(i),!0).forEach(function(e){c(r,e,i[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(i)):je(Object(i)).forEach(function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(i,e))})}return r}function ei(r,n){for(;!{}.hasOwnProperty.call(r,n)&&(r=Q(r))!==null;);return r}function Ae(){return Ae=typeof Reflect<"u"&&Reflect.get?Reflect.get.bind():function(r,n,i){var e=ei(r,n);if(e){var t=Object.getOwnPropertyDescriptor(e,n);return t.get?t.get.call(arguments.length<3?r:i):t.value}},Ae.apply(null,arguments)}function wt(r,n,i,e){var t=Ae(Q(r.prototype),n,i);return typeof t=="function"?function(a){return t.apply(i,a)}:t}function ti(r){return r.normalized?1:r.size}function ye(r){var n=0;return r.forEach(function(i){return n+=ti(i)}),n}function xt(r,n,i){var e=r==="VERTEX"?n.VERTEX_SHADER:n.FRAGMENT_SHADER,t=n.createShader(e);if(t===null)throw new Error("loadShader: error while creating the shader");n.shaderSource(t,i),n.compileShader(t);var a=n.getShaderParameter(t,n.COMPILE_STATUS);if(!a){var o=n.getShaderInfoLog(t);throw n.deleteShader(t),new Error(`loadShader: error while compiling the shader:
3
3
  `.concat(o,`
4
4
  `).concat(i))}return t}function ii(r,n){return xt("VERTEX",r,n)}function ri(r,n){return xt("FRAGMENT",r,n)}function ni(r,n){var i=r.createProgram();if(i===null)throw new Error("loadProgram: error while creating the program.");var e,t;for(e=0,t=n.length;e<t;e++)r.attachShader(i,n[e]);r.linkProgram(i);var a=r.getProgramParameter(i,r.LINK_STATUS);if(!a){var o=r.getProgramInfoLog(i);throw r.deleteProgram(i),new Error("loadProgram: error while linking the program: ".concat(o))}return i}function Ze(r){var n=r.gl,i=r.buffer,e=r.program,t=r.vertexShader,a=r.fragmentShader;n.deleteShader(t),n.deleteShader(a),n.deleteProgram(e),n.deleteBuffer(i)}var qe=`#define PICKING_MODE
package/assets/index.html CHANGED
@@ -12,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-Dr_-IUJz.js"></script>
15
+ <script type="module" crossorigin src="./assets/index-DJWMbOc5.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">
@@ -172,6 +172,7 @@ import { z } from "zod";
172
172
  var dashboardManagedSweepsSchema = z.boolean().nullish();
173
173
  var researchAllowViewersSchema = z.boolean().nullish();
174
174
  var researchViewerDailyRunLimitSchema = z.number().int().positive().nullish();
175
+ var dashboardManagedRunKindsSchema = z.array(schedulableRunKindSchema).nullish();
175
176
  var envSchema = z.object({
176
177
  DATABASE_URL: z.string().default("postgresql://aeo:aeo@postgres:5432/aeo_platform"),
177
178
  API_PORT: z.coerce.number().int().positive().default(3e3),
@@ -407,6 +408,12 @@ Do not use "canonry init --force" for recovery. It replaces credentials without
407
408
  message: `Invalid config at ${configPath}: research.allowViewers must be true, false, or left blank.`
408
409
  });
409
410
  }
411
+ if (!dashboardManagedRunKindsSchema.safeParse(parsed.dashboard?.managedRunKinds).success) {
412
+ throw new CliError({
413
+ code: "CONFIG_INVALID",
414
+ message: `Invalid config at ${configPath}: dashboard.managedRunKinds must be a list of schedulable run kinds.`
415
+ });
416
+ }
410
417
  if (!researchViewerDailyRunLimitSchema.safeParse(parsed.research?.viewerDailyRunLimit).success) {
411
418
  throw new CliError({
412
419
  code: "CONFIG_INVALID",
@@ -13021,6 +13028,7 @@ function parseSkillsClient(value) {
13021
13028
  }
13022
13029
 
13023
13030
  export {
13031
+ dashboardManagedRunKindsSchema,
13024
13032
  getBootstrapEnv,
13025
13033
  isMachineFormat,
13026
13034
  EXIT_USER_ERROR,
@@ -2,16 +2,18 @@ import {
2
2
  ApiClient,
3
3
  CANONRY_MCP_TOOLKIT_NAMES,
4
4
  CanonryMcpToolNames,
5
+ CliError,
5
6
  canonryMcpTools,
6
7
  configExists,
7
8
  createCanonryMcpServer,
9
+ dashboardManagedRunKindsSchema,
8
10
  getBundledSkillSnapshots,
9
11
  getConfigPath,
10
12
  isMachineFormat,
11
13
  loadConfig,
12
14
  loadConfigRaw,
13
15
  saveConfigPatch
14
- } from "./chunk-U3M2VALC.js";
16
+ } from "./chunk-5BUAG4CN.js";
15
17
  import {
16
18
  CC_CACHE_DIR,
17
19
  DUCKDB_SPEC,
@@ -16942,8 +16944,22 @@ function resolveDashboardRequirePassword(env, config) {
16942
16944
  function resolveDashboardShowResourceLinks(env, config) {
16943
16945
  return parseBooleanEnv(env.CANONRY_DASHBOARD_SHOW_RESOURCE_LINKS) ?? config.dashboard?.showResourceLinks ?? true;
16944
16946
  }
16945
- function resolveDashboardManagedSweeps(env, config) {
16946
- return parseBooleanEnv(env.CANONRY_DASHBOARD_MANAGED_SWEEPS) ?? config.dashboard?.managedSweeps ?? false;
16947
+ function resolveDashboardManagedRunKinds(env, config) {
16948
+ const configured = dashboardManagedRunKindsSchema.safeParse(config.dashboard?.managedRunKinds);
16949
+ if (!configured.success) {
16950
+ throw new CliError({ code: "CONFIG_INVALID", message: "dashboard.managedRunKinds must be a list of schedulable run kinds." });
16951
+ }
16952
+ const envValue = env.CANONRY_DASHBOARD_MANAGED_RUN_KINDS?.trim();
16953
+ if (envValue) {
16954
+ const parsed = dashboardManagedRunKindsSchema.safeParse(envValue.split(",").map((kind) => kind.trim()));
16955
+ if (!parsed.success) {
16956
+ throw new CliError({ code: "CONFIG_INVALID", message: "CANONRY_DASHBOARD_MANAGED_RUN_KINDS must be a comma-separated list of schedulable run kinds." });
16957
+ }
16958
+ return [...new Set(parsed.data)];
16959
+ }
16960
+ const legacyEnv = parseBooleanEnv(env.CANONRY_DASHBOARD_MANAGED_SWEEPS);
16961
+ if (legacyEnv !== void 0) return legacyEnv ? [SchedulableRunKinds["answer-visibility"]] : [];
16962
+ return [...new Set(configured.data ?? (config.dashboard?.managedSweeps ? [SchedulableRunKinds["answer-visibility"]] : []))];
16947
16963
  }
16948
16964
  function resolveResearchAllowViewers(env, config) {
16949
16965
  return parseBooleanEnv(env.CANONRY_RESEARCH_ALLOW_VIEWERS) ?? config.research?.allowViewers ?? false;
@@ -17260,6 +17276,7 @@ function createGoogleMarketingConfigCredentialStore(input) {
17260
17276
  };
17261
17277
  }
17262
17278
  async function createServer(opts) {
17279
+ const dashboardManagedRunKinds = resolveDashboardManagedRunKinds(process.env, opts.config);
17263
17280
  const logger = opts.logger === false ? false : process.stdout.isTTY ? {
17264
17281
  transport: {
17265
17282
  target: "pino-pretty",
@@ -18082,7 +18099,6 @@ async function createServer(opts) {
18082
18099
  const dashboardRequirePassword = resolveDashboardRequirePassword(process.env, opts.config);
18083
18100
  const dashboardShowResourceLinks = resolveDashboardShowResourceLinks(process.env, opts.config);
18084
18101
  const dashboardShowUpdateNotification = resolveDashboardShowUpdateNotification(process.env, opts.config);
18085
- const dashboardManagedSweeps = resolveDashboardManagedSweeps(process.env, opts.config);
18086
18102
  const dashboardOnboardingMode = resolveDashboardOnboardingMode(process.env, opts.config);
18087
18103
  const researchAllowViewers = resolveResearchAllowViewers(process.env, opts.config);
18088
18104
  const researchViewerDailyRunLimit = resolveResearchViewerDailyRunLimit(process.env, opts.config);
@@ -18977,8 +18993,8 @@ async function createServer(opts) {
18977
18993
  if (!dashboardShowUpdateNotification) {
18978
18994
  dashboardConfig.showUpdateNotification = false;
18979
18995
  }
18980
- if (dashboardManagedSweeps) {
18981
- dashboardConfig.managedSweeps = true;
18996
+ if (dashboardManagedRunKinds.length > 0) {
18997
+ dashboardConfig.managedRunKinds = dashboardManagedRunKinds;
18982
18998
  }
18983
18999
  if (!agentEnabled) {
18984
19000
  dashboardConfig.showAgentBar = false;
@@ -5,7 +5,7 @@ import {
5
5
  installSkills,
6
6
  loadConfigRaw,
7
7
  saveConfigPatch
8
- } from "./chunk-U3M2VALC.js";
8
+ } from "./chunk-5BUAG4CN.js";
9
9
  import {
10
10
  SKILL_MANIFEST_FILENAME,
11
11
  SkillsClients
package/dist/cli.js CHANGED
@@ -28,11 +28,11 @@ import {
28
28
  trackCliCommandFinished,
29
29
  trackEvent,
30
30
  waitForServerRuntimeStartup
31
- } from "./chunk-O26JKJXV.js";
31
+ } from "./chunk-B7WQ5Z4L.js";
32
32
  import {
33
33
  autoSyncSkills,
34
34
  formatAutoSyncNotice
35
- } from "./chunk-XD2ZD2BP.js";
35
+ } from "./chunk-IPALTNIE.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-U3M2VALC.js";
61
+ } from "./chunk-5BUAG4CN.js";
62
62
  import {
63
63
  CLOUDFLARE_WORKER_BINDINGS,
64
64
  CLOUDFLARE_WORKER_GENERATED_MARKER,
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { FastifyInstance } from 'fastify';
2
2
  import { DatabaseClient } from '@ainyc/canonry-db';
3
- import { ProviderQuotaPolicy, EmbedConfigEntry, AgentPluginState, GoogleAdsCampaignMetricsQuery, GoogleAdsRawSnapshotDto, GoogleAdsEffectiveGoalGraphDto, GoogleMarketingProvider, GoogleAdsAccessibleCustomersResponse, GoogleAdsAccessibleCustomerDto, GtmAccountsResponse, GtmContainerListResponse, GtmWorkspaceListResponse, GtmRawSnapshotDto } from '@ainyc/canonry-contracts';
3
+ import { ProviderQuotaPolicy, SchedulableRunKind, EmbedConfigEntry, AgentPluginState, GoogleAdsCampaignMetricsQuery, GoogleAdsRawSnapshotDto, GoogleAdsEffectiveGoalGraphDto, GoogleMarketingProvider, GoogleAdsAccessibleCustomersResponse, GoogleAdsAccessibleCustomerDto, GtmAccountsResponse, GtmContainerListResponse, GtmWorkspaceListResponse, GtmRawSnapshotDto } from '@ainyc/canonry-contracts';
4
4
  import { GoogleTokenResponse } from '@ainyc/canonry-integration-google';
5
5
 
6
6
  type GoogleConnectionType = 'gsc' | 'ga4' | 'gbp';
@@ -306,8 +306,10 @@ interface DashboardConfigEntry {
306
306
  * or CLI update notice.
307
307
  */
308
308
  showUpdateNotification?: boolean;
309
- /** Hide dashboard sweep controls; operators can still use `canonry run`. Defaults to false. */
309
+ /** Legacy alias for managedRunKinds: ['answer-visibility']. */
310
310
  managedSweeps?: boolean | null;
311
+ /** Presentation only. Managed sweeps hide all launches; managed scans hide viewer launches. */
312
+ managedRunKinds?: SchedulableRunKind[] | null;
311
313
  }
312
314
  interface ResearchConfigEntry {
313
315
  /** Allow signed-in viewers to run paid research queries. Defaults to false. */
package/dist/index.js CHANGED
@@ -3,10 +3,10 @@ import {
3
3
  createGoogleMarketingCredentialStore,
4
4
  createGoogleMarketingRuntime,
5
5
  createServer
6
- } from "./chunk-O26JKJXV.js";
6
+ } from "./chunk-B7WQ5Z4L.js";
7
7
  import {
8
8
  loadConfig
9
- } from "./chunk-U3M2VALC.js";
9
+ } from "./chunk-5BUAG4CN.js";
10
10
  import "./chunk-EMSDPSQM.js";
11
11
  import "./chunk-LNBX7RTN.js";
12
12
  export {
package/dist/mcp.js CHANGED
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  autoSyncSkills
3
- } from "./chunk-XD2ZD2BP.js";
3
+ } from "./chunk-IPALTNIE.js";
4
4
  import {
5
5
  createApiClient,
6
6
  createCanonryMcpServer
7
- } from "./chunk-U3M2VALC.js";
7
+ } from "./chunk-5BUAG4CN.js";
8
8
  import {
9
9
  isReadOnlyKey
10
10
  } from "./chunk-LNBX7RTN.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ainyc/canonry",
3
- "version": "4.186.9",
3
+ "version": "4.187.0",
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,27 +70,27 @@
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
- "@ainyc/canonry-api-routes": "0.0.0",
75
73
  "@ainyc/canonry-web": "0.0.0",
74
+ "@ainyc/canonry-api-client": "0.0.0",
76
75
  "@ainyc/canonry-config": "0.0.0",
77
76
  "@ainyc/canonry-contracts": "0.0.0",
78
- "@ainyc/canonry-db": "0.0.0",
77
+ "@ainyc/canonry-api-routes": "0.0.0",
79
78
  "@ainyc/canonry-integration-bing": "0.0.0",
79
+ "@ainyc/canonry-db": "0.0.0",
80
80
  "@ainyc/canonry-integration-cloud-run": "0.0.0",
81
81
  "@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
82
- "@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
83
- "@ainyc/canonry-integration-google": "0.0.0",
84
- "@ainyc/canonry-integration-commoncrawl": "0.0.0",
85
82
  "@ainyc/canonry-integration-google-ads": "0.0.0",
86
83
  "@ainyc/canonry-integration-google-business-profile": "0.0.0",
87
- "@ainyc/canonry-integration-google-places": "0.0.0",
84
+ "@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
85
+ "@ainyc/canonry-integration-google": "0.0.0",
88
86
  "@ainyc/canonry-integration-google-tag-manager": "0.0.0",
89
- "@ainyc/canonry-integration-openai-ads": "0.0.0",
87
+ "@ainyc/canonry-integration-google-places": "0.0.0",
88
+ "@ainyc/canonry-integration-commoncrawl": "0.0.0",
90
89
  "@ainyc/canonry-integration-traffic": "0.0.0",
91
- "@ainyc/canonry-integration-wordpress": "0.0.0",
92
90
  "@ainyc/canonry-intelligence": "0.0.0",
93
91
  "@ainyc/canonry-provider-cdp": "0.0.0",
92
+ "@ainyc/canonry-integration-openai-ads": "0.0.0",
93
+ "@ainyc/canonry-integration-wordpress": "0.0.0",
94
94
  "@ainyc/canonry-provider-claude": "0.0.0",
95
95
  "@ainyc/canonry-provider-openai": "0.0.0",
96
96
  "@ainyc/canonry-provider-perplexity": "0.0.0",