rulesync 3.33.0 → 4.0.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 (4) hide show
  1. package/README.md +4 -5
  2. package/dist/index.cjs +380 -228
  3. package/dist/index.js +432 -280
  4. package/package.json +15 -15
package/dist/index.cjs CHANGED
@@ -102,7 +102,7 @@ var Logger = class {
102
102
  var logger = new Logger();
103
103
 
104
104
  // src/cli/commands/generate.ts
105
- var import_es_toolkit2 = require("es-toolkit");
105
+ var import_es_toolkit3 = require("es-toolkit");
106
106
 
107
107
  // src/config/config-resolver.ts
108
108
  var import_node_path2 = require("path");
@@ -113,6 +113,7 @@ var import_node_fs = require("fs");
113
113
  var import_promises = require("fs/promises");
114
114
  var import_node_os = __toESM(require("os"), 1);
115
115
  var import_node_path = require("path");
116
+ var import_es_toolkit = require("es-toolkit");
116
117
  async function ensureDir(dirPath) {
117
118
  try {
118
119
  await (0, import_promises.stat)(dirPath);
@@ -240,6 +241,13 @@ function validateBaseDir(baseDir) {
240
241
  }
241
242
  checkPathTraversal({ relativePath: baseDir, intendedRootDir: process.cwd() });
242
243
  }
244
+ function toKebabCaseFilename(filename) {
245
+ const lastDotIndex = filename.lastIndexOf(".");
246
+ const extension = lastDotIndex > 0 ? filename.slice(lastDotIndex) : "";
247
+ const nameWithoutExt = lastDotIndex > 0 ? filename.slice(0, lastDotIndex) : filename;
248
+ const kebabName = (0, import_es_toolkit.kebabCase)(nameWithoutExt);
249
+ return kebabName + extension;
250
+ }
243
251
 
244
252
  // src/config/config.ts
245
253
  var import_mini3 = require("zod/mini");
@@ -284,11 +292,7 @@ var ConfigParamsSchema = import_mini3.z.object({
284
292
  simulateCommands: (0, import_mini3.optional)(import_mini3.z.boolean()),
285
293
  simulateSubagents: (0, import_mini3.optional)(import_mini3.z.boolean()),
286
294
  simulateSkills: (0, import_mini3.optional)(import_mini3.z.boolean()),
287
- modularMcp: (0, import_mini3.optional)(import_mini3.z.boolean()),
288
- // Deprecated experimental options (for backward compatibility)
289
- experimentalGlobal: (0, import_mini3.optional)(import_mini3.z.boolean()),
290
- experimentalSimulateCommands: (0, import_mini3.optional)(import_mini3.z.boolean()),
291
- experimentalSimulateSubagents: (0, import_mini3.optional)(import_mini3.z.boolean())
295
+ modularMcp: (0, import_mini3.optional)(import_mini3.z.boolean())
292
296
  });
293
297
  var PartialConfigParamsSchema = import_mini3.z.partial(ConfigParamsSchema);
294
298
  var ConfigFileSchema = import_mini3.z.object({
@@ -322,10 +326,7 @@ var Config = class {
322
326
  simulateCommands,
323
327
  simulateSubagents,
324
328
  simulateSkills,
325
- modularMcp,
326
- experimentalGlobal,
327
- experimentalSimulateCommands,
328
- experimentalSimulateSubagents
329
+ modularMcp
329
330
  }) {
330
331
  this.validateConflictingTargets(targets);
331
332
  this.baseDirs = baseDirs;
@@ -333,9 +334,9 @@ var Config = class {
333
334
  this.features = features;
334
335
  this.verbose = verbose;
335
336
  this.delete = isDelete;
336
- this.global = global ?? experimentalGlobal ?? false;
337
- this.simulateCommands = simulateCommands ?? experimentalSimulateCommands ?? false;
338
- this.simulateSubagents = simulateSubagents ?? experimentalSimulateSubagents ?? false;
337
+ this.global = global ?? false;
338
+ this.simulateCommands = simulateCommands ?? false;
339
+ this.simulateSubagents = simulateSubagents ?? false;
339
340
  this.simulateSkills = simulateSkills ?? false;
340
341
  this.modularMcp = modularMcp ?? false;
341
342
  }
@@ -389,19 +390,6 @@ var Config = class {
389
390
  getModularMcp() {
390
391
  return this.modularMcp;
391
392
  }
392
- // Deprecated getters for backward compatibility
393
- /** @deprecated Use getGlobal() instead */
394
- getExperimentalGlobal() {
395
- return this.global;
396
- }
397
- /** @deprecated Use getSimulateCommands() instead */
398
- getExperimentalSimulateCommands() {
399
- return this.simulateCommands;
400
- }
401
- /** @deprecated Use getSimulateSubagents() instead */
402
- getExperimentalSimulateSubagents() {
403
- return this.simulateSubagents;
404
- }
405
393
  };
406
394
 
407
395
  // src/config/config-resolver.ts
@@ -416,10 +404,7 @@ var getDefaults = () => ({
416
404
  simulateCommands: false,
417
405
  simulateSubagents: false,
418
406
  simulateSkills: false,
419
- modularMcp: false,
420
- experimentalGlobal: false,
421
- experimentalSimulateCommands: false,
422
- experimentalSimulateSubagents: false
407
+ modularMcp: false
423
408
  });
424
409
  var ConfigResolver = class {
425
410
  static async resolve({
@@ -433,10 +418,7 @@ var ConfigResolver = class {
433
418
  simulateCommands,
434
419
  simulateSubagents,
435
420
  simulateSkills,
436
- modularMcp,
437
- experimentalGlobal,
438
- experimentalSimulateCommands,
439
- experimentalSimulateSubagents
421
+ modularMcp
440
422
  }) {
441
423
  const validatedConfigPath = resolvePath(configPath, process.cwd());
442
424
  let configByFile = {};
@@ -452,21 +434,9 @@ var ConfigResolver = class {
452
434
  throw error;
453
435
  }
454
436
  }
455
- const deprecatedGlobal = experimentalGlobal ?? configByFile.experimentalGlobal;
456
- const deprecatedCommands = experimentalSimulateCommands ?? configByFile.experimentalSimulateCommands;
457
- const deprecatedSubagents = experimentalSimulateSubagents ?? configByFile.experimentalSimulateSubagents;
458
- if (deprecatedGlobal !== void 0) {
459
- warnDeprecatedOptions({ experimentalGlobal: deprecatedGlobal });
460
- }
461
- if (deprecatedCommands !== void 0) {
462
- warnDeprecatedOptions({ experimentalSimulateCommands: deprecatedCommands });
463
- }
464
- if (deprecatedSubagents !== void 0) {
465
- warnDeprecatedOptions({ experimentalSimulateSubagents: deprecatedSubagents });
466
- }
467
- const resolvedGlobal = global ?? configByFile.global ?? experimentalGlobal ?? configByFile.experimentalGlobal ?? getDefaults().global;
468
- const resolvedSimulateCommands = simulateCommands ?? configByFile.simulateCommands ?? experimentalSimulateCommands ?? configByFile.experimentalSimulateCommands ?? getDefaults().simulateCommands;
469
- const resolvedSimulateSubagents = simulateSubagents ?? configByFile.simulateSubagents ?? experimentalSimulateSubagents ?? configByFile.experimentalSimulateSubagents ?? getDefaults().simulateSubagents;
437
+ const resolvedGlobal = global ?? configByFile.global ?? getDefaults().global;
438
+ const resolvedSimulateCommands = simulateCommands ?? configByFile.simulateCommands ?? getDefaults().simulateCommands;
439
+ const resolvedSimulateSubagents = simulateSubagents ?? configByFile.simulateSubagents ?? getDefaults().simulateSubagents;
470
440
  const resolvedSimulateSkills = simulateSkills ?? configByFile.simulateSkills ?? getDefaults().simulateSkills;
471
441
  const configParams = {
472
442
  targets: targets ?? configByFile.targets ?? getDefaults().targets,
@@ -486,25 +456,6 @@ var ConfigResolver = class {
486
456
  return new Config(configParams);
487
457
  }
488
458
  };
489
- function warnDeprecatedOptions({
490
- experimentalGlobal,
491
- experimentalSimulateCommands,
492
- experimentalSimulateSubagents
493
- }) {
494
- if (experimentalGlobal !== void 0) {
495
- logger.warn("'experimentalGlobal' option is deprecated. Please use 'global' instead.");
496
- }
497
- if (experimentalSimulateCommands !== void 0) {
498
- logger.warn(
499
- "'experimentalSimulateCommands' option is deprecated. Please use 'simulateCommands' instead."
500
- );
501
- }
502
- if (experimentalSimulateSubagents !== void 0) {
503
- logger.warn(
504
- "'experimentalSimulateSubagents' option is deprecated. Please use 'simulateSubagents' instead."
505
- );
506
- }
507
- }
508
459
  function getBaseDirsInLightOfGlobal({
509
460
  baseDirs,
510
461
  global
@@ -2347,7 +2298,7 @@ var AugmentcodeIgnore = class _AugmentcodeIgnore extends ToolIgnore {
2347
2298
 
2348
2299
  // src/features/ignore/claudecode-ignore.ts
2349
2300
  var import_node_path20 = require("path");
2350
- var import_es_toolkit = require("es-toolkit");
2301
+ var import_es_toolkit2 = require("es-toolkit");
2351
2302
  var ClaudecodeIgnore = class _ClaudecodeIgnore extends ToolIgnore {
2352
2303
  constructor(params) {
2353
2304
  super(params);
@@ -2397,11 +2348,19 @@ var ClaudecodeIgnore = class _ClaudecodeIgnore extends ToolIgnore {
2397
2348
  const exists = await fileExists(filePath);
2398
2349
  const existingFileContent = exists ? await readFileContent(filePath) : "{}";
2399
2350
  const existingJsonValue = JSON.parse(existingFileContent);
2351
+ const existingDenies = existingJsonValue.permissions?.deny ?? [];
2352
+ const preservedDenies = existingDenies.filter((deny) => {
2353
+ const isReadPattern = deny.startsWith("Read(") && deny.endsWith(")");
2354
+ if (isReadPattern) {
2355
+ return deniedValues.includes(deny);
2356
+ }
2357
+ return true;
2358
+ });
2400
2359
  const jsonValue = {
2401
2360
  ...existingJsonValue,
2402
2361
  permissions: {
2403
2362
  ...existingJsonValue.permissions,
2404
- deny: (0, import_es_toolkit.uniq)([...existingJsonValue.permissions?.deny ?? [], ...deniedValues].toSorted())
2363
+ deny: (0, import_es_toolkit2.uniq)([...preservedDenies, ...deniedValues].toSorted())
2405
2364
  }
2406
2365
  };
2407
2366
  return new _ClaudecodeIgnore({
@@ -4307,7 +4266,7 @@ var McpProcessor = class extends FeatureProcessor {
4307
4266
  // src/features/rules/rules-processor.ts
4308
4267
  var import_node_path84 = require("path");
4309
4268
  var import_toon = require("@toon-format/toon");
4310
- var import_mini33 = require("zod/mini");
4269
+ var import_mini34 = require("zod/mini");
4311
4270
 
4312
4271
  // src/constants/general.ts
4313
4272
  var SKILL_FILE_NAME = "SKILL.md";
@@ -6173,6 +6132,12 @@ var RulesyncRuleFrontmatterSchema = import_mini28.z.object({
6173
6132
  import_mini28.z.object({
6174
6133
  excludeAgent: import_mini28.z.optional(import_mini28.z.union([import_mini28.z.literal("code-review"), import_mini28.z.literal("coding-agent")]))
6175
6134
  })
6135
+ ),
6136
+ antigravity: import_mini28.z.optional(
6137
+ import_mini28.z.looseObject({
6138
+ trigger: import_mini28.z.optional(import_mini28.z.string()),
6139
+ globs: import_mini28.z.optional(import_mini28.z.array(import_mini28.z.string()))
6140
+ })
6176
6141
  )
6177
6142
  });
6178
6143
  var RulesyncRule = class _RulesyncRule extends RulesyncFile {
@@ -6198,9 +6163,6 @@ var RulesyncRule = class _RulesyncRule extends RulesyncFile {
6198
6163
  return {
6199
6164
  recommended: {
6200
6165
  relativeDirPath: RULESYNC_RULES_RELATIVE_DIR_PATH
6201
- },
6202
- legacy: {
6203
- relativeDirPath: RULESYNC_RELATIVE_DIR_PATH
6204
6166
  }
6205
6167
  };
6206
6168
  }
@@ -6223,44 +6185,6 @@ var RulesyncRule = class _RulesyncRule extends RulesyncFile {
6223
6185
  };
6224
6186
  }
6225
6187
  }
6226
- static async fromFileLegacy({
6227
- relativeFilePath,
6228
- validate = true
6229
- }) {
6230
- const legacyPath = (0, import_node_path63.join)(
6231
- process.cwd(),
6232
- this.getSettablePaths().legacy.relativeDirPath,
6233
- relativeFilePath
6234
- );
6235
- const recommendedPath = (0, import_node_path63.join)(
6236
- this.getSettablePaths().recommended.relativeDirPath,
6237
- relativeFilePath
6238
- );
6239
- logger.warn(`\u26A0\uFE0F Using deprecated path "${legacyPath}". Please migrate to "${recommendedPath}"`);
6240
- const fileContent = await readFileContent(legacyPath);
6241
- const { frontmatter, body: content } = parseFrontmatter(fileContent);
6242
- const result = RulesyncRuleFrontmatterSchema.safeParse(frontmatter);
6243
- if (!result.success) {
6244
- throw new Error(`Invalid frontmatter in ${legacyPath}: ${formatError(result.error)}`);
6245
- }
6246
- const validatedFrontmatter = {
6247
- root: result.data.root ?? false,
6248
- targets: result.data.targets ?? ["*"],
6249
- description: result.data.description ?? "",
6250
- globs: result.data.globs ?? [],
6251
- agentsmd: result.data.agentsmd,
6252
- cursor: result.data.cursor
6253
- };
6254
- const filename = (0, import_node_path63.basename)(legacyPath);
6255
- return new _RulesyncRule({
6256
- baseDir: process.cwd(),
6257
- relativeDirPath: this.getSettablePaths().recommended.relativeDirPath,
6258
- relativeFilePath: filename,
6259
- frontmatter: validatedFrontmatter,
6260
- body: content.trim(),
6261
- validate
6262
- });
6263
- }
6264
6188
  static async fromFile({
6265
6189
  relativeFilePath,
6266
6190
  validate = true
@@ -6542,7 +6466,176 @@ var AmazonQCliRule = class _AmazonQCliRule extends ToolRule {
6542
6466
 
6543
6467
  // src/features/rules/antigravity-rule.ts
6544
6468
  var import_node_path67 = require("path");
6469
+ var import_mini29 = require("zod/mini");
6470
+ var AntigravityRuleFrontmatterSchema = import_mini29.z.looseObject({
6471
+ trigger: import_mini29.z.optional(
6472
+ import_mini29.z.union([
6473
+ import_mini29.z.literal("always_on"),
6474
+ import_mini29.z.literal("glob"),
6475
+ import_mini29.z.literal("manual"),
6476
+ import_mini29.z.literal("model_decision"),
6477
+ import_mini29.z.string()
6478
+ // accepts any string for forward compatibility
6479
+ ])
6480
+ ),
6481
+ globs: import_mini29.z.optional(import_mini29.z.string()),
6482
+ description: import_mini29.z.optional(import_mini29.z.string())
6483
+ });
6484
+ function parseGlobsString(globs) {
6485
+ if (!globs) {
6486
+ return [];
6487
+ }
6488
+ if (Array.isArray(globs)) {
6489
+ return globs;
6490
+ }
6491
+ if (globs.trim() === "") {
6492
+ return [];
6493
+ }
6494
+ return globs.split(",").map((g) => g.trim());
6495
+ }
6496
+ function stringifyGlobs(globs) {
6497
+ if (!globs || globs.length === 0) {
6498
+ return void 0;
6499
+ }
6500
+ return globs.join(",");
6501
+ }
6502
+ function normalizeStoredAntigravity(stored) {
6503
+ if (!stored) {
6504
+ return void 0;
6505
+ }
6506
+ const { globs, ...rest } = stored;
6507
+ return {
6508
+ ...rest,
6509
+ globs: Array.isArray(globs) ? stringifyGlobs(globs) : globs
6510
+ };
6511
+ }
6512
+ var globStrategy = {
6513
+ canHandle: (trigger) => trigger === "glob",
6514
+ generateFrontmatter: (normalized, rulesyncFrontmatter) => {
6515
+ const effectiveGlobsArray = normalized?.globs ? parseGlobsString(normalized.globs) : rulesyncFrontmatter.globs ?? [];
6516
+ return {
6517
+ ...normalized,
6518
+ trigger: "glob",
6519
+ globs: stringifyGlobs(effectiveGlobsArray)
6520
+ };
6521
+ },
6522
+ exportRulesyncData: ({ description, ...frontmatter }) => ({
6523
+ globs: parseGlobsString(frontmatter.globs),
6524
+ description: description || "",
6525
+ antigravity: frontmatter
6526
+ })
6527
+ };
6528
+ var manualStrategy = {
6529
+ canHandle: (trigger) => trigger === "manual",
6530
+ generateFrontmatter: (normalized) => ({
6531
+ ...normalized,
6532
+ trigger: "manual"
6533
+ }),
6534
+ exportRulesyncData: ({ description, ...frontmatter }) => ({
6535
+ globs: [],
6536
+ description: description || "",
6537
+ antigravity: frontmatter
6538
+ })
6539
+ };
6540
+ var alwaysOnStrategy = {
6541
+ canHandle: (trigger) => trigger === "always_on",
6542
+ generateFrontmatter: (normalized) => ({
6543
+ ...normalized,
6544
+ trigger: "always_on"
6545
+ }),
6546
+ exportRulesyncData: ({ description, ...frontmatter }) => ({
6547
+ globs: ["**/*"],
6548
+ description: description || "",
6549
+ antigravity: frontmatter
6550
+ })
6551
+ };
6552
+ var modelDecisionStrategy = {
6553
+ canHandle: (trigger) => trigger === "model_decision",
6554
+ generateFrontmatter: (normalized, rulesyncFrontmatter) => ({
6555
+ ...normalized,
6556
+ trigger: "model_decision",
6557
+ description: rulesyncFrontmatter.description
6558
+ }),
6559
+ exportRulesyncData: ({ description, ...frontmatter }) => ({
6560
+ globs: [],
6561
+ description: description || "",
6562
+ antigravity: frontmatter
6563
+ })
6564
+ };
6565
+ var unknownStrategy = {
6566
+ canHandle: (trigger) => trigger !== void 0,
6567
+ generateFrontmatter: (normalized) => {
6568
+ const trigger = typeof normalized?.trigger === "string" ? normalized.trigger : "manual";
6569
+ return {
6570
+ ...normalized,
6571
+ trigger
6572
+ };
6573
+ },
6574
+ exportRulesyncData: ({ description, ...frontmatter }) => ({
6575
+ globs: frontmatter.globs ? parseGlobsString(frontmatter.globs) : ["**/*"],
6576
+ description: description || "",
6577
+ antigravity: frontmatter
6578
+ })
6579
+ };
6580
+ var inferenceStrategy = {
6581
+ canHandle: (trigger) => trigger === void 0,
6582
+ generateFrontmatter: (normalized, rulesyncFrontmatter) => {
6583
+ const effectiveGlobsArray = normalized?.globs ? parseGlobsString(normalized.globs) : rulesyncFrontmatter.globs ?? [];
6584
+ if (effectiveGlobsArray.length > 0 && !effectiveGlobsArray.includes("**/*") && !effectiveGlobsArray.includes("*")) {
6585
+ return {
6586
+ ...normalized,
6587
+ trigger: "glob",
6588
+ globs: stringifyGlobs(effectiveGlobsArray)
6589
+ };
6590
+ }
6591
+ return {
6592
+ ...normalized,
6593
+ trigger: "always_on"
6594
+ };
6595
+ },
6596
+ exportRulesyncData: ({ description, ...frontmatter }) => ({
6597
+ globs: frontmatter.globs ? parseGlobsString(frontmatter.globs) : ["**/*"],
6598
+ description: description || "",
6599
+ antigravity: frontmatter
6600
+ })
6601
+ };
6602
+ var STRATEGIES = [
6603
+ globStrategy,
6604
+ manualStrategy,
6605
+ alwaysOnStrategy,
6606
+ modelDecisionStrategy,
6607
+ unknownStrategy,
6608
+ inferenceStrategy
6609
+ ];
6545
6610
  var AntigravityRule = class _AntigravityRule extends ToolRule {
6611
+ frontmatter;
6612
+ body;
6613
+ /**
6614
+ * Creates an AntigravityRule instance.
6615
+ *
6616
+ * @param params - Rule parameters including frontmatter and body
6617
+ * @param params.frontmatter - Antigravity-specific frontmatter configuration
6618
+ * @param params.body - The markdown body content (without frontmatter)
6619
+ *
6620
+ * Note: Files without frontmatter will default to always_on trigger during fromFile().
6621
+ */
6622
+ constructor({ frontmatter, body, ...rest }) {
6623
+ if (rest.validate !== false) {
6624
+ const result = AntigravityRuleFrontmatterSchema.safeParse(frontmatter);
6625
+ if (!result.success) {
6626
+ throw new Error(
6627
+ `Invalid frontmatter in ${(0, import_node_path67.join)(rest.relativeDirPath, rest.relativeFilePath)}: ${formatError(result.error)}`
6628
+ );
6629
+ }
6630
+ }
6631
+ super({
6632
+ ...rest,
6633
+ // Ensure fileContent includes frontmatter when constructed directly
6634
+ fileContent: stringifyFrontmatter(body, frontmatter)
6635
+ });
6636
+ this.frontmatter = frontmatter;
6637
+ this.body = body;
6638
+ }
6546
6639
  static getSettablePaths() {
6547
6640
  return {
6548
6641
  nonRoot: {
@@ -6555,36 +6648,121 @@ var AntigravityRule = class _AntigravityRule extends ToolRule {
6555
6648
  relativeFilePath,
6556
6649
  validate = true
6557
6650
  }) {
6558
- const fileContent = await readFileContent(
6559
- (0, import_node_path67.join)(baseDir, this.getSettablePaths().nonRoot.relativeDirPath, relativeFilePath)
6651
+ const filePath = (0, import_node_path67.join)(
6652
+ baseDir,
6653
+ this.getSettablePaths().nonRoot.relativeDirPath,
6654
+ relativeFilePath
6560
6655
  );
6656
+ const fileContent = await readFileContent(filePath);
6657
+ const { frontmatter, body } = parseFrontmatter(fileContent);
6658
+ let parsedFrontmatter;
6659
+ if (validate) {
6660
+ const result = AntigravityRuleFrontmatterSchema.safeParse(frontmatter);
6661
+ if (result.success) {
6662
+ parsedFrontmatter = result.data;
6663
+ } else {
6664
+ throw new Error(`Invalid frontmatter in ${filePath}: ${formatError(result.error)}`);
6665
+ }
6666
+ } else {
6667
+ parsedFrontmatter = frontmatter;
6668
+ }
6561
6669
  return new _AntigravityRule({
6562
6670
  baseDir,
6563
6671
  relativeDirPath: this.getSettablePaths().nonRoot.relativeDirPath,
6564
6672
  relativeFilePath,
6565
- fileContent,
6673
+ body,
6674
+ frontmatter: parsedFrontmatter,
6566
6675
  validate,
6567
6676
  root: false
6568
6677
  });
6569
6678
  }
6679
+ /**
6680
+ * Converts a RulesyncRule to an AntigravityRule.
6681
+ *
6682
+ * Trigger inference:
6683
+ * - If antigravity.trigger is set, it's preserved
6684
+ * - If specific globs are set, infers "glob" trigger
6685
+ * - Otherwise, infers "always_on" trigger
6686
+ */
6570
6687
  static fromRulesyncRule({
6571
6688
  baseDir = process.cwd(),
6572
6689
  rulesyncRule,
6573
6690
  validate = true
6574
6691
  }) {
6575
- return new _AntigravityRule(
6576
- this.buildToolRuleParamsDefault({
6577
- baseDir,
6578
- rulesyncRule,
6579
- validate,
6580
- nonRootPath: this.getSettablePaths().nonRoot
6581
- })
6582
- );
6692
+ const rulesyncFrontmatter = rulesyncRule.getFrontmatter();
6693
+ const storedAntigravity = rulesyncFrontmatter.antigravity;
6694
+ const normalized = normalizeStoredAntigravity(storedAntigravity);
6695
+ const storedTrigger = storedAntigravity?.trigger;
6696
+ const strategy = STRATEGIES.find((s) => s.canHandle(storedTrigger));
6697
+ if (!strategy) {
6698
+ throw new Error(`No strategy found for trigger: ${storedTrigger}`);
6699
+ }
6700
+ const frontmatter = strategy.generateFrontmatter(normalized, rulesyncFrontmatter);
6701
+ const paths = this.getSettablePaths();
6702
+ const kebabCaseFilename = toKebabCaseFilename(rulesyncRule.getRelativeFilePath());
6703
+ return new _AntigravityRule({
6704
+ baseDir,
6705
+ relativeDirPath: paths.nonRoot.relativeDirPath,
6706
+ relativeFilePath: kebabCaseFilename,
6707
+ frontmatter,
6708
+ body: rulesyncRule.getBody(),
6709
+ validate,
6710
+ root: false
6711
+ });
6583
6712
  }
6713
+ /**
6714
+ * Converts this AntigravityRule to a RulesyncRule.
6715
+ *
6716
+ * The Antigravity configuration is preserved in the RulesyncRule's
6717
+ * frontmatter.antigravity field for round-trip compatibility.
6718
+ *
6719
+ * Note: All Antigravity rules are treated as non-root (root: false),
6720
+ * as they are all placed in the .agent/rules directory.
6721
+ *
6722
+ * @returns RulesyncRule instance with Antigravity config preserved
6723
+ */
6584
6724
  toRulesyncRule() {
6585
- return this.toRulesyncRuleDefault();
6725
+ const strategy = STRATEGIES.find((s) => s.canHandle(this.frontmatter.trigger));
6726
+ let rulesyncData = {
6727
+ globs: [],
6728
+ description: "",
6729
+ antigravity: this.frontmatter
6730
+ };
6731
+ if (strategy) {
6732
+ rulesyncData = strategy.exportRulesyncData(this.frontmatter);
6733
+ }
6734
+ const antigravityForRulesync = {
6735
+ ...rulesyncData.antigravity,
6736
+ globs: this.frontmatter.globs ? parseGlobsString(this.frontmatter.globs) : void 0
6737
+ };
6738
+ return new RulesyncRule({
6739
+ baseDir: process.cwd(),
6740
+ relativeDirPath: RulesyncRule.getSettablePaths().recommended.relativeDirPath,
6741
+ relativeFilePath: this.getRelativeFilePath(),
6742
+ frontmatter: {
6743
+ root: false,
6744
+ targets: ["*"],
6745
+ ...rulesyncData,
6746
+ antigravity: antigravityForRulesync
6747
+ },
6748
+ // When converting back, we only want the body content
6749
+ body: this.body
6750
+ });
6751
+ }
6752
+ getBody() {
6753
+ return this.body;
6754
+ }
6755
+ // Helper to access raw file content including frontmatter is `this.fileContent` (from ToolFile)
6756
+ // But we might want `body` only for some operations?
6757
+ // ToolFile.getFileContent() returns the whole string.
6758
+ getFrontmatter() {
6759
+ return this.frontmatter;
6586
6760
  }
6587
6761
  validate() {
6762
+ const result = AntigravityRuleFrontmatterSchema.safeParse(this.frontmatter);
6763
+ if (!result.success) {
6764
+ return { success: false, error: new Error(formatError(result.error)) };
6765
+ }
6588
6766
  return { success: true, error: null };
6589
6767
  }
6590
6768
  static isTargetedByRulesyncRule(rulesyncRule) {
@@ -6818,9 +6996,9 @@ var ClaudecodeLegacyRule = class _ClaudecodeLegacyRule extends ToolRule {
6818
6996
 
6819
6997
  // src/features/rules/claudecode-rule.ts
6820
6998
  var import_node_path71 = require("path");
6821
- var import_mini29 = require("zod/mini");
6822
- var ClaudecodeRuleFrontmatterSchema = import_mini29.z.object({
6823
- paths: import_mini29.z.optional(import_mini29.z.string())
6999
+ var import_mini30 = require("zod/mini");
7000
+ var ClaudecodeRuleFrontmatterSchema = import_mini30.z.object({
7001
+ paths: import_mini30.z.optional(import_mini30.z.string())
6824
7002
  });
6825
7003
  var ClaudecodeRule = class _ClaudecodeRule extends ToolRule {
6826
7004
  frontmatter;
@@ -7010,9 +7188,9 @@ var ClaudecodeRule = class _ClaudecodeRule extends ToolRule {
7010
7188
 
7011
7189
  // src/features/rules/cline-rule.ts
7012
7190
  var import_node_path72 = require("path");
7013
- var import_mini30 = require("zod/mini");
7014
- var ClineRuleFrontmatterSchema = import_mini30.z.object({
7015
- description: import_mini30.z.string()
7191
+ var import_mini31 = require("zod/mini");
7192
+ var ClineRuleFrontmatterSchema = import_mini31.z.object({
7193
+ description: import_mini31.z.string()
7016
7194
  });
7017
7195
  var ClineRule = class _ClineRule extends ToolRule {
7018
7196
  static getSettablePaths() {
@@ -7159,11 +7337,11 @@ var CodexcliRule = class _CodexcliRule extends ToolRule {
7159
7337
 
7160
7338
  // src/features/rules/copilot-rule.ts
7161
7339
  var import_node_path74 = require("path");
7162
- var import_mini31 = require("zod/mini");
7163
- var CopilotRuleFrontmatterSchema = import_mini31.z.object({
7164
- description: import_mini31.z.optional(import_mini31.z.string()),
7165
- applyTo: import_mini31.z.optional(import_mini31.z.string()),
7166
- excludeAgent: import_mini31.z.optional(import_mini31.z.union([import_mini31.z.literal("code-review"), import_mini31.z.literal("coding-agent")]))
7340
+ var import_mini32 = require("zod/mini");
7341
+ var CopilotRuleFrontmatterSchema = import_mini32.z.object({
7342
+ description: import_mini32.z.optional(import_mini32.z.string()),
7343
+ applyTo: import_mini32.z.optional(import_mini32.z.string()),
7344
+ excludeAgent: import_mini32.z.optional(import_mini32.z.union([import_mini32.z.literal("code-review"), import_mini32.z.literal("coding-agent")]))
7167
7345
  });
7168
7346
  var CopilotRule = class _CopilotRule extends ToolRule {
7169
7347
  frontmatter;
@@ -7331,11 +7509,11 @@ var CopilotRule = class _CopilotRule extends ToolRule {
7331
7509
 
7332
7510
  // src/features/rules/cursor-rule.ts
7333
7511
  var import_node_path75 = require("path");
7334
- var import_mini32 = require("zod/mini");
7335
- var CursorRuleFrontmatterSchema = import_mini32.z.object({
7336
- description: import_mini32.z.optional(import_mini32.z.string()),
7337
- globs: import_mini32.z.optional(import_mini32.z.string()),
7338
- alwaysApply: import_mini32.z.optional(import_mini32.z.boolean())
7512
+ var import_mini33 = require("zod/mini");
7513
+ var CursorRuleFrontmatterSchema = import_mini33.z.object({
7514
+ description: import_mini33.z.optional(import_mini33.z.string()),
7515
+ globs: import_mini33.z.optional(import_mini33.z.string()),
7516
+ alwaysApply: import_mini33.z.optional(import_mini33.z.boolean())
7339
7517
  });
7340
7518
  var CursorRule = class _CursorRule extends ToolRule {
7341
7519
  frontmatter;
@@ -8053,7 +8231,7 @@ var rulesProcessorToolTargets = [
8053
8231
  "warp",
8054
8232
  "windsurf"
8055
8233
  ];
8056
- var RulesProcessorToolTargetSchema = import_mini33.z.enum(rulesProcessorToolTargets);
8234
+ var RulesProcessorToolTargetSchema = import_mini34.z.enum(rulesProcessorToolTargets);
8057
8235
  var toolRuleFactories = /* @__PURE__ */ new Map([
8058
8236
  [
8059
8237
  "agentsmd",
@@ -8434,13 +8612,6 @@ var RulesProcessor = class extends FeatureProcessor {
8434
8612
  }
8435
8613
  return rulesyncRules;
8436
8614
  }
8437
- async loadRulesyncFilesLegacy() {
8438
- const legacyFiles = await findFilesByGlobs((0, import_node_path84.join)(RULESYNC_RELATIVE_DIR_PATH, "*.md"));
8439
- logger.debug(`Found ${legacyFiles.length} legacy rulesync files`);
8440
- return Promise.all(
8441
- legacyFiles.map((file) => RulesyncRule.fromFileLegacy({ relativeFilePath: (0, import_node_path84.basename)(file) }))
8442
- );
8443
- }
8444
8615
  /**
8445
8616
  * Implementation of abstract method from FeatureProcessor
8446
8617
  * Load tool-specific rule configurations and parse them into ToolRule instances
@@ -8653,7 +8824,7 @@ async function generateRules(config, options) {
8653
8824
  }
8654
8825
  let totalRulesOutputs = 0;
8655
8826
  logger.info("Generating rule files...");
8656
- const toolTargets = (0, import_es_toolkit2.intersection)(
8827
+ const toolTargets = (0, import_es_toolkit3.intersection)(
8657
8828
  config.getTargets(),
8658
8829
  RulesProcessor.getToolTargets({ global: config.getGlobal() })
8659
8830
  );
@@ -8672,10 +8843,7 @@ async function generateRules(config, options) {
8672
8843
  const oldToolFiles = await processor.loadToolFiles({ forDeletion: true });
8673
8844
  await processor.removeAiFiles(oldToolFiles);
8674
8845
  }
8675
- let rulesyncFiles = await processor.loadRulesyncFiles();
8676
- if (rulesyncFiles.length === 0) {
8677
- rulesyncFiles = await processor.loadRulesyncFilesLegacy();
8678
- }
8846
+ const rulesyncFiles = await processor.loadRulesyncFiles();
8679
8847
  const toolFiles = await processor.convertRulesyncFilesToToolFiles(rulesyncFiles);
8680
8848
  const writtenCount = await processor.writeAiFiles(toolFiles);
8681
8849
  totalRulesOutputs += writtenCount;
@@ -8695,7 +8863,7 @@ async function generateIgnore(config) {
8695
8863
  }
8696
8864
  let totalIgnoreOutputs = 0;
8697
8865
  logger.info("Generating ignore files...");
8698
- for (const toolTarget of (0, import_es_toolkit2.intersection)(config.getTargets(), IgnoreProcessor.getToolTargets())) {
8866
+ for (const toolTarget of (0, import_es_toolkit3.intersection)(config.getTargets(), IgnoreProcessor.getToolTargets())) {
8699
8867
  for (const baseDir of config.getBaseDirs()) {
8700
8868
  try {
8701
8869
  const processor = new IgnoreProcessor({
@@ -8734,7 +8902,7 @@ async function generateMcp(config) {
8734
8902
  if (config.getModularMcp()) {
8735
8903
  logger.info("\u2139\uFE0F Modular MCP support is experimental.");
8736
8904
  }
8737
- const toolTargets = (0, import_es_toolkit2.intersection)(
8905
+ const toolTargets = (0, import_es_toolkit3.intersection)(
8738
8906
  config.getTargets(),
8739
8907
  McpProcessor.getToolTargets({ global: config.getGlobal() })
8740
8908
  );
@@ -8766,7 +8934,7 @@ async function generateCommands(config) {
8766
8934
  }
8767
8935
  let totalCommandOutputs = 0;
8768
8936
  logger.info("Generating command files...");
8769
- const toolTargets = (0, import_es_toolkit2.intersection)(
8937
+ const toolTargets = (0, import_es_toolkit3.intersection)(
8770
8938
  config.getTargets(),
8771
8939
  CommandsProcessor.getToolTargets({
8772
8940
  global: config.getGlobal(),
@@ -8800,7 +8968,7 @@ async function generateSubagents(config) {
8800
8968
  }
8801
8969
  let totalSubagentOutputs = 0;
8802
8970
  logger.info("Generating subagent files...");
8803
- const toolTargets = (0, import_es_toolkit2.intersection)(
8971
+ const toolTargets = (0, import_es_toolkit3.intersection)(
8804
8972
  config.getTargets(),
8805
8973
  SubagentsProcessor.getToolTargets({
8806
8974
  global: config.getGlobal(),
@@ -8835,7 +9003,7 @@ async function generateSkills(config) {
8835
9003
  let totalSkillOutputs = 0;
8836
9004
  const allSkills = [];
8837
9005
  logger.info("Generating skill files...");
8838
- const toolTargets = (0, import_es_toolkit2.intersection)(
9006
+ const toolTargets = (0, import_es_toolkit3.intersection)(
8839
9007
  config.getTargets(),
8840
9008
  SkillsProcessor.getToolTargets({
8841
9009
  global: config.getGlobal(),
@@ -9402,7 +9570,7 @@ var import_fastmcp = require("fastmcp");
9402
9570
 
9403
9571
  // src/mcp/commands.ts
9404
9572
  var import_node_path87 = require("path");
9405
- var import_mini34 = require("zod/mini");
9573
+ var import_mini35 = require("zod/mini");
9406
9574
  var maxCommandSizeBytes = 1024 * 1024;
9407
9575
  var maxCommandsCount = 1e3;
9408
9576
  async function listCommands() {
@@ -9521,17 +9689,17 @@ async function deleteCommand({ relativePathFromCwd }) {
9521
9689
  }
9522
9690
  }
9523
9691
  var commandToolSchemas = {
9524
- listCommands: import_mini34.z.object({}),
9525
- getCommand: import_mini34.z.object({
9526
- relativePathFromCwd: import_mini34.z.string()
9692
+ listCommands: import_mini35.z.object({}),
9693
+ getCommand: import_mini35.z.object({
9694
+ relativePathFromCwd: import_mini35.z.string()
9527
9695
  }),
9528
- putCommand: import_mini34.z.object({
9529
- relativePathFromCwd: import_mini34.z.string(),
9696
+ putCommand: import_mini35.z.object({
9697
+ relativePathFromCwd: import_mini35.z.string(),
9530
9698
  frontmatter: RulesyncCommandFrontmatterSchema,
9531
- body: import_mini34.z.string()
9699
+ body: import_mini35.z.string()
9532
9700
  }),
9533
- deleteCommand: import_mini34.z.object({
9534
- relativePathFromCwd: import_mini34.z.string()
9701
+ deleteCommand: import_mini35.z.object({
9702
+ relativePathFromCwd: import_mini35.z.string()
9535
9703
  })
9536
9704
  };
9537
9705
  var commandTools = {
@@ -9580,7 +9748,7 @@ var commandTools = {
9580
9748
 
9581
9749
  // src/mcp/ignore.ts
9582
9750
  var import_node_path88 = require("path");
9583
- var import_mini35 = require("zod/mini");
9751
+ var import_mini36 = require("zod/mini");
9584
9752
  var maxIgnoreFileSizeBytes = 100 * 1024;
9585
9753
  async function getIgnoreFile() {
9586
9754
  const ignoreFilePath = (0, import_node_path88.join)(process.cwd(), RULESYNC_AIIGNORE_RELATIVE_FILE_PATH);
@@ -9637,11 +9805,11 @@ async function deleteIgnoreFile() {
9637
9805
  }
9638
9806
  }
9639
9807
  var ignoreToolSchemas = {
9640
- getIgnoreFile: import_mini35.z.object({}),
9641
- putIgnoreFile: import_mini35.z.object({
9642
- content: import_mini35.z.string()
9808
+ getIgnoreFile: import_mini36.z.object({}),
9809
+ putIgnoreFile: import_mini36.z.object({
9810
+ content: import_mini36.z.string()
9643
9811
  }),
9644
- deleteIgnoreFile: import_mini35.z.object({})
9812
+ deleteIgnoreFile: import_mini36.z.object({})
9645
9813
  };
9646
9814
  var ignoreTools = {
9647
9815
  getIgnoreFile: {
@@ -9675,7 +9843,7 @@ var ignoreTools = {
9675
9843
 
9676
9844
  // src/mcp/mcp.ts
9677
9845
  var import_node_path89 = require("path");
9678
- var import_mini36 = require("zod/mini");
9846
+ var import_mini37 = require("zod/mini");
9679
9847
  var maxMcpSizeBytes = 1024 * 1024;
9680
9848
  async function getMcpFile() {
9681
9849
  const config = await ConfigResolver.resolve({});
@@ -9765,11 +9933,11 @@ async function deleteMcpFile() {
9765
9933
  }
9766
9934
  }
9767
9935
  var mcpToolSchemas = {
9768
- getMcpFile: import_mini36.z.object({}),
9769
- putMcpFile: import_mini36.z.object({
9770
- content: import_mini36.z.string()
9936
+ getMcpFile: import_mini37.z.object({}),
9937
+ putMcpFile: import_mini37.z.object({
9938
+ content: import_mini37.z.string()
9771
9939
  }),
9772
- deleteMcpFile: import_mini36.z.object({})
9940
+ deleteMcpFile: import_mini37.z.object({})
9773
9941
  };
9774
9942
  var mcpTools = {
9775
9943
  getMcpFile: {
@@ -9803,7 +9971,7 @@ var mcpTools = {
9803
9971
 
9804
9972
  // src/mcp/rules.ts
9805
9973
  var import_node_path90 = require("path");
9806
- var import_mini37 = require("zod/mini");
9974
+ var import_mini38 = require("zod/mini");
9807
9975
  var maxRuleSizeBytes = 1024 * 1024;
9808
9976
  var maxRulesCount = 1e3;
9809
9977
  async function listRules() {
@@ -9922,17 +10090,17 @@ async function deleteRule({ relativePathFromCwd }) {
9922
10090
  }
9923
10091
  }
9924
10092
  var ruleToolSchemas = {
9925
- listRules: import_mini37.z.object({}),
9926
- getRule: import_mini37.z.object({
9927
- relativePathFromCwd: import_mini37.z.string()
10093
+ listRules: import_mini38.z.object({}),
10094
+ getRule: import_mini38.z.object({
10095
+ relativePathFromCwd: import_mini38.z.string()
9928
10096
  }),
9929
- putRule: import_mini37.z.object({
9930
- relativePathFromCwd: import_mini37.z.string(),
10097
+ putRule: import_mini38.z.object({
10098
+ relativePathFromCwd: import_mini38.z.string(),
9931
10099
  frontmatter: RulesyncRuleFrontmatterSchema,
9932
- body: import_mini37.z.string()
10100
+ body: import_mini38.z.string()
9933
10101
  }),
9934
- deleteRule: import_mini37.z.object({
9935
- relativePathFromCwd: import_mini37.z.string()
10102
+ deleteRule: import_mini38.z.object({
10103
+ relativePathFromCwd: import_mini38.z.string()
9936
10104
  })
9937
10105
  };
9938
10106
  var ruleTools = {
@@ -9981,7 +10149,7 @@ var ruleTools = {
9981
10149
 
9982
10150
  // src/mcp/skills.ts
9983
10151
  var import_node_path91 = require("path");
9984
- var import_mini38 = require("zod/mini");
10152
+ var import_mini39 = require("zod/mini");
9985
10153
  var maxSkillSizeBytes = 1024 * 1024;
9986
10154
  var maxSkillsCount = 1e3;
9987
10155
  function aiDirFileToMcpSkillFile(file) {
@@ -10149,23 +10317,23 @@ async function deleteSkill({
10149
10317
  );
10150
10318
  }
10151
10319
  }
10152
- var McpSkillFileSchema = import_mini38.z.object({
10153
- name: import_mini38.z.string(),
10154
- body: import_mini38.z.string()
10320
+ var McpSkillFileSchema = import_mini39.z.object({
10321
+ name: import_mini39.z.string(),
10322
+ body: import_mini39.z.string()
10155
10323
  });
10156
10324
  var skillToolSchemas = {
10157
- listSkills: import_mini38.z.object({}),
10158
- getSkill: import_mini38.z.object({
10159
- relativeDirPathFromCwd: import_mini38.z.string()
10325
+ listSkills: import_mini39.z.object({}),
10326
+ getSkill: import_mini39.z.object({
10327
+ relativeDirPathFromCwd: import_mini39.z.string()
10160
10328
  }),
10161
- putSkill: import_mini38.z.object({
10162
- relativeDirPathFromCwd: import_mini38.z.string(),
10329
+ putSkill: import_mini39.z.object({
10330
+ relativeDirPathFromCwd: import_mini39.z.string(),
10163
10331
  frontmatter: RulesyncSkillFrontmatterSchema,
10164
- body: import_mini38.z.string(),
10165
- otherFiles: import_mini38.z.optional(import_mini38.z.array(McpSkillFileSchema))
10332
+ body: import_mini39.z.string(),
10333
+ otherFiles: import_mini39.z.optional(import_mini39.z.array(McpSkillFileSchema))
10166
10334
  }),
10167
- deleteSkill: import_mini38.z.object({
10168
- relativeDirPathFromCwd: import_mini38.z.string()
10335
+ deleteSkill: import_mini39.z.object({
10336
+ relativeDirPathFromCwd: import_mini39.z.string()
10169
10337
  })
10170
10338
  };
10171
10339
  var skillTools = {
@@ -10215,7 +10383,7 @@ var skillTools = {
10215
10383
 
10216
10384
  // src/mcp/subagents.ts
10217
10385
  var import_node_path92 = require("path");
10218
- var import_mini39 = require("zod/mini");
10386
+ var import_mini40 = require("zod/mini");
10219
10387
  var maxSubagentSizeBytes = 1024 * 1024;
10220
10388
  var maxSubagentsCount = 1e3;
10221
10389
  async function listSubagents() {
@@ -10339,17 +10507,17 @@ async function deleteSubagent({ relativePathFromCwd }) {
10339
10507
  }
10340
10508
  }
10341
10509
  var subagentToolSchemas = {
10342
- listSubagents: import_mini39.z.object({}),
10343
- getSubagent: import_mini39.z.object({
10344
- relativePathFromCwd: import_mini39.z.string()
10510
+ listSubagents: import_mini40.z.object({}),
10511
+ getSubagent: import_mini40.z.object({
10512
+ relativePathFromCwd: import_mini40.z.string()
10345
10513
  }),
10346
- putSubagent: import_mini39.z.object({
10347
- relativePathFromCwd: import_mini39.z.string(),
10514
+ putSubagent: import_mini40.z.object({
10515
+ relativePathFromCwd: import_mini40.z.string(),
10348
10516
  frontmatter: RulesyncSubagentFrontmatterSchema,
10349
- body: import_mini39.z.string()
10517
+ body: import_mini40.z.string()
10350
10518
  }),
10351
- deleteSubagent: import_mini39.z.object({
10352
- relativePathFromCwd: import_mini39.z.string()
10519
+ deleteSubagent: import_mini40.z.object({
10520
+ relativePathFromCwd: import_mini40.z.string()
10353
10521
  })
10354
10522
  };
10355
10523
  var subagentTools = {
@@ -10433,7 +10601,7 @@ async function mcpCommand({ version }) {
10433
10601
  }
10434
10602
 
10435
10603
  // src/cli/index.ts
10436
- var getVersion = () => "3.33.0";
10604
+ var getVersion = () => "4.0.0";
10437
10605
  var main = async () => {
10438
10606
  const program = new import_commander.Command();
10439
10607
  const version = getVersion();
@@ -10457,18 +10625,14 @@ var main = async () => {
10457
10625
  (value) => {
10458
10626
  return value.split(",").map((f) => f.trim());
10459
10627
  }
10460
- ).option("-V, --verbose", "Verbose output").option("-g, --global", "Import for global(user scope) configuration files").option(
10461
- "--experimental-global",
10462
- "Import for global(user scope) configuration files (deprecated: use --global instead)"
10463
- ).action(async (options) => {
10628
+ ).option("-V, --verbose", "Verbose output").option("-g, --global", "Import for global(user scope) configuration files").action(async (options) => {
10464
10629
  try {
10465
10630
  await importCommand({
10466
10631
  targets: options.targets,
10467
10632
  features: options.features,
10468
10633
  verbose: options.verbose,
10469
10634
  configPath: options.config,
10470
- global: options.global,
10471
- experimentalGlobal: options.experimentalGlobal
10635
+ global: options.global
10472
10636
  });
10473
10637
  } catch (error) {
10474
10638
  logger.error(formatError(error));
@@ -10507,15 +10671,6 @@ var main = async () => {
10507
10671
  ).option(
10508
10672
  "--simulate-skills",
10509
10673
  "Generate simulated skills. This feature is only available for copilot, cursor and codexcli."
10510
- ).option(
10511
- "--experimental-global",
10512
- "Generate for global(user scope) configuration files (deprecated: use --global instead)"
10513
- ).option(
10514
- "--experimental-simulate-commands",
10515
- "Generate simulated commands (deprecated: use --simulate-commands instead)"
10516
- ).option(
10517
- "--experimental-simulate-subagents",
10518
- "Generate simulated subagents (deprecated: use --simulate-subagents instead)"
10519
10674
  ).option(
10520
10675
  "--modular-mcp",
10521
10676
  "Generate modular-mcp configuration for context compression (experimental)"
@@ -10532,10 +10687,7 @@ var main = async () => {
10532
10687
  simulateCommands: options.simulateCommands,
10533
10688
  simulateSubagents: options.simulateSubagents,
10534
10689
  simulateSkills: options.simulateSkills,
10535
- modularMcp: options.modularMcp,
10536
- experimentalGlobal: options.experimentalGlobal,
10537
- experimentalSimulateCommands: options.experimentalSimulateCommands,
10538
- experimentalSimulateSubagents: options.experimentalSimulateSubagents
10690
+ modularMcp: options.modularMcp
10539
10691
  });
10540
10692
  } catch (error) {
10541
10693
  logger.error(formatError(error));