@integrity-labs/agt-cli 0.28.299 → 0.28.301

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/dist/mcp/index.js CHANGED
@@ -23754,7 +23754,7 @@ async function getPublishedArtefactSourceChunkText(artefactId, offset, limit) {
23754
23754
  }
23755
23755
  var artefactListSchema = {
23756
23756
  publisher: external_exports.string().optional().describe('Filter by publisher (e.g. "agt-live")'),
23757
- kind: external_exports.enum(["mockup", "deck", "site", "app", "video", "other"]).optional().describe("Filter by artefact kind"),
23757
+ kind: external_exports.enum(["mockup", "deck", "carousel", "site", "app", "video", "other"]).optional().describe("Filter by artefact kind"),
23758
23758
  limit: external_exports.number().int().min(1).max(100).optional().describe("Maximum artefacts to return (default 50, max 100)")
23759
23759
  };
23760
23760
  server.tool(
@@ -1187,7 +1187,7 @@ var require_util = __commonJS({
1187
1187
  }
1188
1188
  exports.evaluatedPropsToName = evaluatedPropsToName;
1189
1189
  function setEvaluated(gen, props, ps) {
1190
- Object.keys(ps).forEach((p) => gen.assign((0, codegen_1._)`${props}${(0, codegen_1.getProperty)(p)}`, true));
1190
+ Object.keys(ps).forEach((p2) => gen.assign((0, codegen_1._)`${props}${(0, codegen_1.getProperty)(p2)}`, true));
1191
1191
  }
1192
1192
  exports.setEvaluated = setEvaluated;
1193
1193
  var snippets = {};
@@ -1760,11 +1760,11 @@ var require_code2 = __commonJS({
1760
1760
  }
1761
1761
  exports.noPropertyInData = noPropertyInData;
1762
1762
  function allSchemaProperties(schemaMap) {
1763
- return schemaMap ? Object.keys(schemaMap).filter((p) => p !== "__proto__") : [];
1763
+ return schemaMap ? Object.keys(schemaMap).filter((p2) => p2 !== "__proto__") : [];
1764
1764
  }
1765
1765
  exports.allSchemaProperties = allSchemaProperties;
1766
1766
  function schemaProperties(it, schemaMap) {
1767
- return allSchemaProperties(schemaMap).filter((p) => !(0, util_1.alwaysValidSchema)(it, schemaMap[p]));
1767
+ return allSchemaProperties(schemaMap).filter((p2) => !(0, util_1.alwaysValidSchema)(it, schemaMap[p2]));
1768
1768
  }
1769
1769
  exports.schemaProperties = schemaProperties;
1770
1770
  function callValidateCode({ schemaCode, data, it: { gen, topSchemaRef, schemaPath, errorPath }, it }, func, context, passSchema) {
@@ -2242,12 +2242,12 @@ var require_resolve = __commonJS({
2242
2242
  function getFullPath(resolver, id = "", normalize) {
2243
2243
  if (normalize !== false)
2244
2244
  id = normalizeId(id);
2245
- const p = resolver.parse(id);
2246
- return _getFullPath(resolver, p);
2245
+ const p2 = resolver.parse(id);
2246
+ return _getFullPath(resolver, p2);
2247
2247
  }
2248
2248
  exports.getFullPath = getFullPath;
2249
- function _getFullPath(resolver, p) {
2250
- const serialized = resolver.serialize(p);
2249
+ function _getFullPath(resolver, p2) {
2250
+ const serialized = resolver.serialize(p2);
2251
2251
  return serialized.split("#")[0] + "#";
2252
2252
  }
2253
2253
  exports._getFullPath = _getFullPath;
@@ -3022,11 +3022,11 @@ var require_compile = __commonJS({
3022
3022
  return sch || this.schemas[ref] || resolveSchema.call(this, root, ref);
3023
3023
  }
3024
3024
  function resolveSchema(root, ref) {
3025
- const p = this.opts.uriResolver.parse(ref);
3026
- const refPath = (0, resolve_1._getFullPath)(this.opts.uriResolver, p);
3025
+ const p2 = this.opts.uriResolver.parse(ref);
3026
+ const refPath = (0, resolve_1._getFullPath)(this.opts.uriResolver, p2);
3027
3027
  let baseId = (0, resolve_1.getFullPath)(this.opts.uriResolver, root.baseId, void 0);
3028
3028
  if (Object.keys(root.schema).length > 0 && refPath === baseId) {
3029
- return getJsonPointer.call(this, p, root);
3029
+ return getJsonPointer.call(this, p2, root);
3030
3030
  }
3031
3031
  const id = (0, resolve_1.normalizeId)(refPath);
3032
3032
  const schOrRef = this.refs[id] || this.schemas[id];
@@ -3034,7 +3034,7 @@ var require_compile = __commonJS({
3034
3034
  const sch = resolveSchema.call(this, root, schOrRef);
3035
3035
  if (typeof (sch === null || sch === void 0 ? void 0 : sch.schema) !== "object")
3036
3036
  return;
3037
- return getJsonPointer.call(this, p, sch);
3037
+ return getJsonPointer.call(this, p2, sch);
3038
3038
  }
3039
3039
  if (typeof (schOrRef === null || schOrRef === void 0 ? void 0 : schOrRef.schema) !== "object")
3040
3040
  return;
@@ -3048,7 +3048,7 @@ var require_compile = __commonJS({
3048
3048
  baseId = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schId);
3049
3049
  return new SchemaEnv({ schema, schemaId, root, baseId });
3050
3050
  }
3051
- return getJsonPointer.call(this, p, schOrRef);
3051
+ return getJsonPointer.call(this, p2, schOrRef);
3052
3052
  }
3053
3053
  exports.resolveSchema = resolveSchema;
3054
3054
  var PREVENT_SCOPE_CHANGE = /* @__PURE__ */ new Set([
@@ -4053,9 +4053,9 @@ var require_core = __commonJS({
4053
4053
  this.addSchema(_schema, ref, meta3);
4054
4054
  }
4055
4055
  async function _loadSchema(ref) {
4056
- const p = this._loading[ref];
4057
- if (p)
4058
- return p;
4056
+ const p2 = this._loading[ref];
4057
+ if (p2)
4058
+ return p2;
4059
4059
  try {
4060
4060
  return await (this._loading[ref] = loadSchema(ref));
4061
4061
  } finally {
@@ -5537,12 +5537,12 @@ var require_additionalProperties = __commonJS({
5537
5537
  const propsSchema = (0, util_1.schemaRefOrVal)(it, parentSchema.properties, "properties");
5538
5538
  definedProp = (0, code_1.isOwnProperty)(gen, propsSchema, key);
5539
5539
  } else if (props.length) {
5540
- definedProp = (0, codegen_1.or)(...props.map((p) => (0, codegen_1._)`${key} === ${p}`));
5540
+ definedProp = (0, codegen_1.or)(...props.map((p2) => (0, codegen_1._)`${key} === ${p2}`));
5541
5541
  } else {
5542
5542
  definedProp = codegen_1.nil;
5543
5543
  }
5544
5544
  if (patProps.length) {
5545
- definedProp = (0, codegen_1.or)(definedProp, ...patProps.map((p) => (0, codegen_1._)`${(0, code_1.usePattern)(cxt, p)}.test(${key})`));
5545
+ definedProp = (0, codegen_1.or)(definedProp, ...patProps.map((p2) => (0, codegen_1._)`${(0, code_1.usePattern)(cxt, p2)}.test(${key})`));
5546
5546
  }
5547
5547
  return (0, codegen_1.not)(definedProp);
5548
5548
  }
@@ -5622,7 +5622,7 @@ var require_properties = __commonJS({
5622
5622
  if (it.opts.unevaluated && allProps.length && it.props !== true) {
5623
5623
  it.props = util_1.mergeEvaluated.props(gen, (0, util_1.toHash)(allProps), it.props);
5624
5624
  }
5625
- const properties = allProps.filter((p) => !(0, util_1.alwaysValidSchema)(it, schema[p]));
5625
+ const properties = allProps.filter((p2) => !(0, util_1.alwaysValidSchema)(it, schema[p2]));
5626
5626
  if (properties.length === 0)
5627
5627
  return;
5628
5628
  const valid = gen.name("valid");
@@ -5672,7 +5672,7 @@ var require_patternProperties = __commonJS({
5672
5672
  const { gen, schema, data, parentSchema, it } = cxt;
5673
5673
  const { opts } = it;
5674
5674
  const patterns = (0, code_1.allSchemaProperties)(schema);
5675
- const alwaysValidPatterns = patterns.filter((p) => (0, util_1.alwaysValidSchema)(it, schema[p]));
5675
+ const alwaysValidPatterns = patterns.filter((p2) => (0, util_1.alwaysValidSchema)(it, schema[p2]));
5676
5676
  if (patterns.length === 0 || alwaysValidPatterns.length === patterns.length && (!it.opts.unevaluated || it.props === true)) {
5677
5677
  return;
5678
5678
  }
@@ -7057,9 +7057,9 @@ var require_unevaluatedProperties = __commonJS({
7057
7057
  }
7058
7058
  function unevaluatedStatic(evaluatedProps, key) {
7059
7059
  const ps = [];
7060
- for (const p in evaluatedProps) {
7061
- if (evaluatedProps[p] === true)
7062
- ps.push((0, codegen_1._)`${key} !== ${p}`);
7060
+ for (const p2 in evaluatedProps) {
7061
+ if (evaluatedProps[p2] === true)
7062
+ ps.push((0, codegen_1._)`${key} !== ${p2}`);
7063
7063
  }
7064
7064
  return (0, codegen_1.and)(...ps);
7065
7065
  }
@@ -10659,7 +10659,7 @@ var require_timestamp = __commonJS({
10659
10659
  const sign = str[0];
10660
10660
  const parts = sign === "-" || sign === "+" ? str.substring(1) : str;
10661
10661
  const num = (n) => asBigInt ? BigInt(n) : Number(n);
10662
- const res = parts.replace(/_/g, "").split(":").reduce((res2, p) => res2 * num(60) + num(p), num(0));
10662
+ const res = parts.replace(/_/g, "").split(":").reduce((res2, p2) => res2 * num(60) + num(p2), num(0));
10663
10663
  return sign === "-" ? num(-1) * res : res;
10664
10664
  }
10665
10665
  function stringifySexagesimal(node) {
@@ -15881,12 +15881,12 @@ var require_object = __commonJS({
15881
15881
  subClass.prototype.constructor = subClass;
15882
15882
  _setPrototypeOf(subClass, superClass);
15883
15883
  }
15884
- function _setPrototypeOf(o, p) {
15885
- _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf2(o2, p2) {
15886
- o2.__proto__ = p2;
15884
+ function _setPrototypeOf(o, p2) {
15885
+ _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf2(o2, p3) {
15886
+ o2.__proto__ = p3;
15887
15887
  return o2;
15888
15888
  };
15889
- return _setPrototypeOf(o, p);
15889
+ return _setPrototypeOf(o, p2);
15890
15890
  }
15891
15891
  var EventEmitter = __require("events");
15892
15892
  var lib = require_lib();
@@ -16017,12 +16017,12 @@ var require_nodes = __commonJS({
16017
16017
  subClass.prototype.constructor = subClass;
16018
16018
  _setPrototypeOf(subClass, superClass);
16019
16019
  }
16020
- function _setPrototypeOf(o, p) {
16021
- _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf2(o2, p2) {
16022
- o2.__proto__ = p2;
16020
+ function _setPrototypeOf(o, p2) {
16021
+ _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf2(o2, p3) {
16022
+ o2.__proto__ = p3;
16023
16023
  return o2;
16024
16024
  };
16025
- return _setPrototypeOf(o, p);
16025
+ return _setPrototypeOf(o, p2);
16026
16026
  }
16027
16027
  var _require = require_object();
16028
16028
  var Obj = _require.Obj;
@@ -16368,12 +16368,12 @@ var require_parser2 = __commonJS({
16368
16368
  subClass.prototype.constructor = subClass;
16369
16369
  _setPrototypeOf(subClass, superClass);
16370
16370
  }
16371
- function _setPrototypeOf(o, p) {
16372
- _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf2(o2, p2) {
16373
- o2.__proto__ = p2;
16371
+ function _setPrototypeOf(o, p2) {
16372
+ _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf2(o2, p3) {
16373
+ o2.__proto__ = p3;
16374
16374
  return o2;
16375
16375
  };
16376
- return _setPrototypeOf(o, p);
16376
+ return _setPrototypeOf(o, p2);
16377
16377
  }
16378
16378
  var lexer = require_lexer2();
16379
16379
  var nodes = require_nodes();
@@ -17286,11 +17286,11 @@ var require_parser2 = __commonJS({
17286
17286
  })(Obj);
17287
17287
  module.exports = {
17288
17288
  parse: function parse3(src, extensions, opts) {
17289
- var p = new Parser(lexer.lex(src, opts));
17289
+ var p2 = new Parser(lexer.lex(src, opts));
17290
17290
  if (extensions !== void 0) {
17291
- p.extensions = extensions;
17291
+ p2.extensions = extensions;
17292
17292
  }
17293
- return p.parseAsRoot();
17293
+ return p2.parseAsRoot();
17294
17294
  },
17295
17295
  Parser
17296
17296
  };
@@ -17500,20 +17500,20 @@ var require_runtime = __commonJS({
17500
17500
  return null;
17501
17501
  };
17502
17502
  _proto.lookup = function lookup(name) {
17503
- var p = this.parent;
17503
+ var p2 = this.parent;
17504
17504
  var val = this.variables[name];
17505
17505
  if (val !== void 0) {
17506
17506
  return val;
17507
17507
  }
17508
- return p && p.lookup(name);
17508
+ return p2 && p2.lookup(name);
17509
17509
  };
17510
17510
  _proto.resolve = function resolve(name, forWrite) {
17511
- var p = forWrite && this.isolateWrites ? void 0 : this.parent;
17511
+ var p2 = forWrite && this.isolateWrites ? void 0 : this.parent;
17512
17512
  var val = this.variables[name];
17513
17513
  if (val !== void 0) {
17514
17514
  return this;
17515
17515
  }
17516
- return p && p.resolve(name);
17516
+ return p2 && p2.resolve(name);
17517
17517
  };
17518
17518
  _proto.push = function push(isolateWrites) {
17519
17519
  return new Frame2(this, isolateWrites);
@@ -17786,12 +17786,12 @@ var require_compiler = __commonJS({
17786
17786
  subClass.prototype.constructor = subClass;
17787
17787
  _setPrototypeOf(subClass, superClass);
17788
17788
  }
17789
- function _setPrototypeOf(o, p) {
17790
- _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf2(o2, p2) {
17791
- o2.__proto__ = p2;
17789
+ function _setPrototypeOf(o, p2) {
17790
+ _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf2(o2, p3) {
17791
+ o2.__proto__ = p3;
17792
17792
  return o2;
17793
17793
  };
17794
- return _setPrototypeOf(o, p);
17794
+ return _setPrototypeOf(o, p2);
17795
17795
  }
17796
17796
  var parser = require_parser2();
17797
17797
  var transformer = require_transformer();
@@ -19221,12 +19221,12 @@ var require_loader = __commonJS({
19221
19221
  subClass.prototype.constructor = subClass;
19222
19222
  _setPrototypeOf(subClass, superClass);
19223
19223
  }
19224
- function _setPrototypeOf(o, p) {
19225
- _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf2(o2, p2) {
19226
- o2.__proto__ = p2;
19224
+ function _setPrototypeOf(o, p2) {
19225
+ _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf2(o2, p3) {
19226
+ o2.__proto__ = p3;
19227
19227
  return o2;
19228
19228
  };
19229
- return _setPrototypeOf(o, p);
19229
+ return _setPrototypeOf(o, p2);
19230
19230
  }
19231
19231
  var path = __require("path");
19232
19232
  var _require = require_object();
@@ -19257,12 +19257,12 @@ var require_precompiled_loader = __commonJS({
19257
19257
  subClass.prototype.constructor = subClass;
19258
19258
  _setPrototypeOf(subClass, superClass);
19259
19259
  }
19260
- function _setPrototypeOf(o, p) {
19261
- _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf2(o2, p2) {
19262
- o2.__proto__ = p2;
19260
+ function _setPrototypeOf(o, p2) {
19261
+ _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf2(o2, p3) {
19262
+ o2.__proto__ = p3;
19263
19263
  return o2;
19264
19264
  };
19265
- return _setPrototypeOf(o, p);
19265
+ return _setPrototypeOf(o, p2);
19266
19266
  }
19267
19267
  var Loader = require_loader();
19268
19268
  var PrecompiledLoader = /* @__PURE__ */ (function(_Loader) {
@@ -20386,7 +20386,7 @@ var require_chokidar = __commonJS({
20386
20386
  }
20387
20387
  var unifyPaths = (paths_) => {
20388
20388
  const paths = arrify(paths_).flat();
20389
- if (!paths.every((p) => typeof p === STRING_TYPE)) {
20389
+ if (!paths.every((p2) => typeof p2 === STRING_TYPE)) {
20390
20390
  throw new TypeError(`Non-string provided as watch path: ${paths}`);
20391
20391
  }
20392
20392
  return paths.map(normalizePathToUnix);
@@ -21032,12 +21032,12 @@ var require_node_loaders = __commonJS({
21032
21032
  subClass.prototype.constructor = subClass;
21033
21033
  _setPrototypeOf(subClass, superClass);
21034
21034
  }
21035
- function _setPrototypeOf(o, p) {
21036
- _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf2(o2, p2) {
21037
- o2.__proto__ = p2;
21035
+ function _setPrototypeOf(o, p2) {
21036
+ _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf2(o2, p3) {
21037
+ o2.__proto__ = p3;
21038
21038
  return o2;
21039
21039
  };
21040
- return _setPrototypeOf(o, p);
21040
+ return _setPrototypeOf(o, p2);
21041
21041
  }
21042
21042
  var fs = __require("fs");
21043
21043
  var path = __require("path");
@@ -21088,9 +21088,9 @@ var require_node_loaders = __commonJS({
21088
21088
  var paths = this.searchPaths;
21089
21089
  for (var i = 0; i < paths.length; i++) {
21090
21090
  var basePath = path.resolve(paths[i]);
21091
- var p = path.resolve(paths[i], name);
21092
- if (p.indexOf(basePath) === 0 && fs.existsSync(p)) {
21093
- fullpath = p;
21091
+ var p2 = path.resolve(paths[i], name);
21092
+ if (p2.indexOf(basePath) === 0 && fs.existsSync(p2)) {
21093
+ fullpath = p2;
21094
21094
  break;
21095
21095
  }
21096
21096
  }
@@ -21387,12 +21387,12 @@ var require_environment = __commonJS({
21387
21387
  subClass.prototype.constructor = subClass;
21388
21388
  _setPrototypeOf(subClass, superClass);
21389
21389
  }
21390
- function _setPrototypeOf(o, p) {
21391
- _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf2(o2, p2) {
21392
- o2.__proto__ = p2;
21390
+ function _setPrototypeOf(o, p2) {
21391
+ _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf2(o2, p3) {
21392
+ o2.__proto__ = p3;
21393
21393
  return o2;
21394
21394
  };
21395
- return _setPrototypeOf(o, p);
21395
+ return _setPrototypeOf(o, p2);
21396
21396
  }
21397
21397
  var asap = require_asap();
21398
21398
  var _waterfall = require_a_sync_waterfall();
@@ -24919,7 +24919,7 @@ var $ZodUnion = /* @__PURE__ */ $constructor("$ZodUnion", (inst, def) => {
24919
24919
  defineLazy(inst._zod, "pattern", () => {
24920
24920
  if (def.options.every((o) => o._zod.pattern)) {
24921
24921
  const patterns = def.options.map((o) => o._zod.pattern);
24922
- return new RegExp(`^(${patterns.map((p) => cleanRegex(p.source)).join("|")})$`);
24922
+ return new RegExp(`^(${patterns.map((p2) => cleanRegex(p2.source)).join("|")})$`);
24923
24923
  }
24924
24924
  return void 0;
24925
24925
  });
@@ -26126,9 +26126,9 @@ var $ZodRegistry = class {
26126
26126
  return this;
26127
26127
  }
26128
26128
  get(schema) {
26129
- const p = schema._zod.parent;
26130
- if (p) {
26131
- const pm = { ...this.get(p) ?? {} };
26129
+ const p2 = schema._zod.parent;
26130
+ if (p2) {
26131
+ const pm = { ...this.get(p2) ?? {} };
26132
26132
  delete pm.id;
26133
26133
  const f = { ...pm, ...this._map.get(schema) };
26134
26134
  return Object.keys(f).length ? f : void 0;
@@ -37336,8 +37336,8 @@ function expandBodyTemplate(template, args) {
37336
37336
  }
37337
37337
  function joinUrl(base, path) {
37338
37338
  const b = base.endsWith("/") ? base.slice(0, -1) : base;
37339
- const p = path.startsWith("/") ? path : `/${path}`;
37340
- return `${b}${p}`;
37339
+ const p2 = path.startsWith("/") ? path : `/${path}`;
37340
+ return `${b}${p2}`;
37341
37341
  }
37342
37342
  function isScalar(v) {
37343
37343
  return typeof v === "string" || typeof v === "number" || typeof v === "boolean";
@@ -38112,6 +38112,167 @@ var ajv2 = new import__2.default({ allErrors: true, strict: false });
38112
38112
  (0, import_ajv_formats3.default)(ajv2);
38113
38113
  var compiledMetaSchema = ajv2.compile(context_meta_schema_default);
38114
38114
 
38115
+ // ../core/dist/integrations/tool-tier-heuristic.js
38116
+ var READ_VERBS = "GET|LIST|FIND|FETCH|RETRIEVE|SEARCH|QUERY|DESCRIBE|INSPECT|SCAN|SHOW|VIEW|READ|EXPORT|DOWNLOAD";
38117
+ var NO_READ_VERB_ACTION = `(?!(?:^|.*[_-])(${READ_VERBS})[_-])`;
38118
+ var NO_READ_VERB_INCL_SUFFIX = `(?!(?:^|.*[_-])(${READ_VERBS})(?:[_-]|$))`;
38119
+ function p(re) {
38120
+ return { re, label: re.source };
38121
+ }
38122
+ function highRisk(core) {
38123
+ return { re: new RegExp(`^${NO_READ_VERB_ACTION}.*${core.source}`, "i"), label: core.source };
38124
+ }
38125
+ var TIER_PATTERNS = [
38126
+ {
38127
+ tier: "admin",
38128
+ patterns: [
38129
+ p(/_PERMISSION/i),
38130
+ p(/_GRANT[_S]?(_|$)/i),
38131
+ p(/_AUTHORI[SZ]E/i),
38132
+ // Reading OAuth grants / a webhook's config can expose secrets or the
38133
+ // full authorization surface, so — unlike _SETTINGS/_CONFIG — these
38134
+ // stay admin even with a read verb (deliberate; see the
38135
+ // tool-tier-heuristic test for HUBSPOT_LIST_GRANTED_OAUTH_SCOPES /
38136
+ // ATTIO_GET_WEBHOOK).
38137
+ p(/_OAUTH/i),
38138
+ p(/_WEBHOOK/i),
38139
+ // SETTINGS / CONFIG are admin only when MUTATED. A read verb anywhere —
38140
+ // prefix (GET_..._SETTINGS), infix (..._GET_..._SETTINGS), or suffix
38141
+ // (..._SETTINGS_GET / ..._SETTINGS_LIST) — means it's a settings
38142
+ // *lookup*, so it falls through to `read` and auto-executes instead of
38143
+ // routing to approval and hanging (e.g. GOOGLEANALYTICS_GET_DATA_RETENTION_SETTINGS,
38144
+ // GOOGLECALENDAR_LIST_SETTINGS, GOOGLECALENDAR_SETTINGS_GET). The suffix
38145
+ // form is safe HERE because the object noun (SETTINGS/CONFIG) is
38146
+ // unambiguous; the generic high-risk guard stays suffix-blind on purpose
38147
+ // (a trailing _LIST/_VIEW can be a noun — ENG-7684). Unlike
38148
+ // _OAUTH/_WEBHOOK/_CREDENTIAL/_VAULT/_PERMISSION above, reading app
38149
+ // settings/config is benign, so only the mutating form stays admin.
38150
+ p(new RegExp(`^${NO_READ_VERB_INCL_SUFFIX}.*_SETTINGS?(_|$)`, "i")),
38151
+ p(new RegExp(`^${NO_READ_VERB_INCL_SUFFIX}.*_CONFIG`, "i")),
38152
+ p(/_VAULT/i),
38153
+ p(/_CREDENTIAL/i),
38154
+ p(/_ENROL/i),
38155
+ p(/_REGISTER/i)
38156
+ ]
38157
+ },
38158
+ {
38159
+ tier: "write_destructive",
38160
+ patterns: [
38161
+ p(/_BATCH_DELETE/i),
38162
+ p(/_DELETE(_|$)/i),
38163
+ p(/_REVOKE/i),
38164
+ p(/_REMOVE(_|$)/i),
38165
+ p(/_TRASH/i),
38166
+ p(/_DROP(_|$)/i),
38167
+ p(/_CLEAR(_|$)/i),
38168
+ p(/_HIDE(_|$)/i),
38169
+ // Kebab-case verbs used by native MCP servers (e.g. xero's `void-invoice`).
38170
+ p(/^void-/i)
38171
+ ]
38172
+ },
38173
+ {
38174
+ // Every pattern here is read-verb-guarded (ENG-7684): a high-risk NOUN
38175
+ // (_EMAIL, _IMPORT, _FORWARD, _POST, _PUBLISH) inside a read-verb name
38176
+ // (…_GET_…, …_FETCH_…) is a read, not a high-risk action, and must
38177
+ // auto-execute instead of routing to approval.
38178
+ tier: "write_high_risk",
38179
+ patterns: [
38180
+ highRisk(/_BATCH_MODIFY/i),
38181
+ highRisk(/_SEND(_|$)/i),
38182
+ highRisk(/_POST(_|$)/i),
38183
+ highRisk(/_PUBLISH/i),
38184
+ highRisk(/_REPLY/i),
38185
+ // Message/email forwarding is high-risk. The negative lookbehind
38186
+ // exempts browser *navigation* forward (e.g. Anchor's
38187
+ // `anchor_navigate_forward`), which is benign and classifies as read;
38188
+ // the read-verb guard additionally exempts GMAIL_GET_AUTO_FORWARDING.
38189
+ highRisk(/(?<!navigate)_FORWARD/i),
38190
+ highRisk(/_EMAIL/i),
38191
+ highRisk(/_INVITE/i),
38192
+ highRisk(/_NOTIFY/i),
38193
+ highRisk(/_IMPORT/i),
38194
+ // Sharing-preference MUTATIONS grant external access to content —
38195
+ // exfiltration-shaped, so they must not fall through to the generic
38196
+ // `_ADD`/`_UPDATE` write patterns (ENG-6027 council finding: e.g.
38197
+ // GOOGLEDRIVE_ADD_FILE_SHARING_PREFERENCE). Anchored to a mutating
38198
+ // verb so read-shaped names (METAADS_LIST_*_SHARING_REQUESTS,
38199
+ // GOOGLEANALYTICS_GET_DATA_SHARING_SETTINGS) keep their read/admin
38200
+ // classification.
38201
+ highRisk(/_(ADD|UPDATE|SET|CREATE|MODIFY|CHANGE|ENABLE)_[A-Z0-9_]*SHAR(E|ING)/i)
38202
+ ]
38203
+ },
38204
+ {
38205
+ tier: "write",
38206
+ patterns: [
38207
+ p(/_ASSERT/i),
38208
+ p(/_UPSERT/i),
38209
+ p(/_PATCH/i),
38210
+ // The negative lookbehind prevents `MONDAY_GET_UPDATES` (and similar
38211
+ // "fetch the comment thread" reads) from being mis-tagged as a write
38212
+ // just because the noun happens to be "update".
38213
+ p(/(?<!_GET)_UPDATE/i),
38214
+ p(/_INSERT/i),
38215
+ p(/_CREATE/i),
38216
+ p(/_ADD(_|$)/i),
38217
+ p(/_MOVE(_|$)/i),
38218
+ p(/_COPY(_|$)/i),
38219
+ // Kebab-case verbs used by native MCP servers (e.g. xero).
38220
+ p(/^create-/i),
38221
+ p(/^update-/i),
38222
+ p(/^attach-/i)
38223
+ ]
38224
+ },
38225
+ {
38226
+ tier: "read",
38227
+ patterns: [
38228
+ p(/_GET/i),
38229
+ p(/_FIND/i),
38230
+ p(/_LIST/i),
38231
+ p(/_SEARCH/i),
38232
+ p(/_FETCH/i),
38233
+ p(/_RETRIEVE/i),
38234
+ p(/_EXPORT/i),
38235
+ p(/_DOWNLOAD/i),
38236
+ p(/_READ(_|$)/i),
38237
+ p(/_VIEW(_|$)/i),
38238
+ // Cloud-style verbs (used by aws_*, gcloud, kubectl etc.) and other
38239
+ // common read-shaped names that don't follow Composio's GET prefix.
38240
+ p(/_DESCRIBE/i),
38241
+ p(/_CHECK/i),
38242
+ p(/_INSPECT/i),
38243
+ p(/_QUERY/i),
38244
+ p(/_SCAN/i),
38245
+ p(/_SHOW(_|$)/i),
38246
+ // Native MCP servers use bare leading verbs in snake_case (Kajabi:
38247
+ // `get_landing_page`, `list_people`) or kebab-case (xero: `list-invoices`,
38248
+ // `get-invoice`; github: `search-code`; granola: `read-transcript`). The
38249
+ // uppercase/infix `_GET`/`_LIST` patterns miss both, so they fell through
38250
+ // to the `write` fallback. One delimiter-agnostic pattern covers every
38251
+ // read verb in either convention. Read is the lowest-precedence tier, so
38252
+ // a leading-verb MUTATION still matches earlier: `get_or_create_x` hits
38253
+ // `write` (_CREATE), `list_credentials` hits `admin` (_CREDENTIAL).
38254
+ // ENG-7684.
38255
+ p(new RegExp(`^(${READ_VERBS})[_-]`, "i")),
38256
+ // `report-*` (xero's `report-profit-and-loss`) — not a read verb but a
38257
+ // read-shaped native prefix. Anchored so it can't match report-* writers.
38258
+ p(/^report-/i),
38259
+ // ENG-5855: Anchor Browser observation tools (hosted MCP, `anchor_*`
38260
+ // names). Anchored to `^anchor_` so they only ever classify Anchor's
38261
+ // own tools and can't reclassify another toolkit's keys when the seed
38262
+ // is regenerated. The other read-shaped Anchor tools already match
38263
+ // generic patterns (`anchor_get_body_html` → _GET, `anchor_tab_list`
38264
+ // → _LIST). `anchor_network_requests` is deliberately NOT here — it
38265
+ // dumps auth headers/tokens, so it's raised to write_high_risk as a
38266
+ // manual escalation in the seed.
38267
+ p(/^anchor_navigate/i),
38268
+ p(/^anchor_snapshot/i),
38269
+ p(/^anchor_take_screenshot/i),
38270
+ p(/^anchor_wait_for/i),
38271
+ p(/^anchor_console_messages/i)
38272
+ ]
38273
+ }
38274
+ ];
38275
+
38115
38276
  // ../core/dist/integrations/augmented-live/markup.js
38116
38277
  var MARKUP_MARKER = "__augmentedLiveMarkup";
38117
38278
  var MARKUP_CONTROL_MARKER = "__augmentedLiveMarkupControl";
@@ -38814,7 +38975,7 @@ var INTEGRATION_REGISTRY = [
38814
38975
  id: "video-gen",
38815
38976
  name: "Video Generation",
38816
38977
  category: "media",
38817
- description: "AI video generation from a text prompt. An agent passes a prompt to generate_video and gets back a short generated video with audio, which it can deliver to a chat channel. Augmented Team manages the model access for you - there is no key to enter. Generation runs direct against xAI (Grok Imagine Video 1.5 today). It is a PREMIUM, usage-billed capability: gated on a per-org opt-in and a monthly USD budget, and metered per second of generated video.",
38978
+ description: "AI video generation from a text prompt or an input image. An agent passes a prompt (plus optionally image_url) to generate_video and gets back a short generated video with audio, which it can deliver to a chat channel. Augmented Team manages the model access for you - there is no key to enter. Generation runs direct against xAI Grok Imagine: text-to-video on the base grok-imagine-video model, image-to-video on grok-imagine-video-1.5. It is a PREMIUM, usage-billed capability: gated on a per-org opt-in and a monthly USD budget, and metered per second of generated video.",
38818
38979
  // Platform-key model (mirrors Grok Voice / ADR-0031): Augmented holds one xAI
38819
38980
  // account key (XAI_API_KEY) and every customer render bills back to it, so
38820
38981
  // auth is `none` - customers never enter a key.
@@ -38841,6 +39002,10 @@ var INTEGRATION_REGISTRY = [
38841
39002
  pricing: "usage",
38842
39003
  note: "Billed per second of generated video; the rate depends on the resolution.",
38843
39004
  meters: [
39005
+ // 1.0 (grok-imagine-video) is the text-to-video model (ENG-7696: xAI's
39006
+ // 1.5 is image-to-video ONLY, so t2v runs on the base model).
39007
+ { event_type: "grok_imagine_video_1_0_480p", unit: "second" },
39008
+ { event_type: "grok_imagine_video_1_0_720p", unit: "second" },
38844
39009
  { event_type: "grok_imagine_video_1_5_480p", unit: "second" },
38845
39010
  { event_type: "grok_imagine_video_1_5_720p", unit: "second" },
38846
39011
  // 1080p is image-to-video only (xAI restriction); metered when the
@@ -40166,6 +40331,20 @@ var FLAG_REGISTRY = [
40166
40331
  // explicit confirm (ADR-0022 §4).
40167
40332
  sensitive: true
40168
40333
  },
40334
+ {
40335
+ key: "notify-dispatch",
40336
+ description: "Membership-based channel-notify dispatch (ENG-7682 / notify Slice 1). off = today's behaviour: a non-@mention top-level channel message is dropped by the mention_only engagement gate (SLACK_CHANNEL_RESPONSE_MODE). membership = the agent's Slack MCP ADMITS non-@mention channel messages in channels its bot is a member of (the Socket Mode websocket already receives them), waking the agent in-thread via the SAME existing wake path used for @mentions/DMs. Only the mention_only engagement gate is relaxed - the echo/dedup, bot_id/self, and peer-classifier safety leaves still apply, so this never opens a bot-to-bot wake loop. The channel server can't evaluate flags, so the manager materializes the resolved value into the AGT_NOTIFY_DISPATCH spawn env (operator/canary override, ADR-0022). Enum leaves room for a later Slice 2 'filter' value (per-channel filters). Ships dark (default off).",
40337
+ flagType: "enum",
40338
+ allowedValues: ["off", "membership"],
40339
+ // Declared safe value is `off`: the mention_only gate stays in force, byte-
40340
+ // identical to today. membership is the deliberate, per-agent flip that
40341
+ // widens what wakes the agent.
40342
+ defaultValue: "off",
40343
+ envVar: "AGT_NOTIFY_DISPATCH",
40344
+ // membership widens agent-wake ingress (more inbound wakes = more cost /
40345
+ // surface), so flipping it on is worth an explicit confirm (ADR-0022 §4).
40346
+ sensitive: true
40347
+ },
40169
40348
  {
40170
40349
  key: "workflows-down-sync",
40171
40350
  description: "Down-sync active dynamic workflows to agents via /host/refresh (ADR-0012, ENG-6352). When on, the API populates the per-agent workflow set (team default \u222A agent override) and the claude-code adapter writes each as .claude/workflows/<name>.js. Boolean gate; ships dark.",