rulesync 17.0.0 → 17.1.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.
@@ -78601,7 +78601,8 @@ const RulesProcessorToolTargetSchema = zod_mini.z.enum(rulesProcessorToolTargetT
78601
78601
  const formatRulePaths = (rules) => rules.map((r) => (0, node_path.join)(r.getRelativeDirPath(), r.getRelativeFilePath())).join(", ");
78602
78602
  const RulesFeatureOptionsSchema = zod_mini.z.looseObject({
78603
78603
  ruleDiscoveryMode: zod_mini.z.optional(zod_mini.z.enum(["none", "explicit"])),
78604
- includeLocalRoot: zod_mini.z.optional(zod_mini.z.boolean())
78604
+ includeLocalRoot: zod_mini.z.optional(zod_mini.z.boolean()),
78605
+ includeRoot: zod_mini.z.optional(zod_mini.z.boolean())
78605
78606
  });
78606
78607
  const resolveRuleDiscoveryMode = ({ defaultMode, options }) => {
78607
78608
  if (defaultMode === "claudecode-legacy") return defaultMode;
@@ -78618,6 +78619,13 @@ const resolveIncludeLocalRoot = (options) => {
78618
78619
  if (!parsed.success) throw new Error(`Invalid options for rules feature: ${parsed.error.message}. \`includeLocalRoot\` must be a boolean.`);
78619
78620
  return parsed.data.includeLocalRoot ?? true;
78620
78621
  };
78622
+ const IncludeRootSchema = zod_mini.z.looseObject({ includeRoot: zod_mini.z.optional(zod_mini.z.boolean()) });
78623
+ const resolveIncludeRoot = (options) => {
78624
+ if (!options) return true;
78625
+ const parsed = IncludeRootSchema.safeParse(options);
78626
+ if (!parsed.success) throw new Error(`Invalid options for rules feature: ${parsed.error.message}. \`includeRoot\` must be a boolean.`);
78627
+ return parsed.data.includeRoot ?? true;
78628
+ };
78621
78629
  /**
78622
78630
  * Whether `candidate` is `base` itself or a class that extends it.
78623
78631
  *
@@ -79163,11 +79171,12 @@ var RulesProcessor = class extends FeatureProcessor {
79163
79171
  async convertRulesyncFilesToToolFiles(rulesyncFiles) {
79164
79172
  const rulesyncRules = rulesyncFiles.filter((file) => file instanceof RulesyncRule);
79165
79173
  const alignedRules = this.alignPiContextFile(rulesyncRules);
79166
- const localRootRules = alignedRules.filter((rule) => rule.getFrontmatter().localRoot);
79167
- const nonLocalRootRules = alignedRules.filter((rule) => !rule.getFrontmatter().localRoot);
79168
79174
  const factory = this.getFactory(this.toolTarget);
79169
79175
  const { meta } = factory;
79170
- const convertedRules = nonLocalRootRules.map((rulesyncRule) => {
79176
+ this.warnForIncludeRootOption(meta);
79177
+ const emittedRules = this.omitsRootFiles() ? alignedRules.filter((rule) => !rule.getFrontmatter().root && !rule.getFrontmatter().localRoot) : alignedRules;
79178
+ const localRootRules = emittedRules.filter((rule) => rule.getFrontmatter().localRoot);
79179
+ const convertedRules = emittedRules.filter((rule) => !rule.getFrontmatter().localRoot).map((rulesyncRule) => {
79171
79180
  if (!factory.class.isTargetedByRulesyncRule(rulesyncRule)) return null;
79172
79181
  return {
79173
79182
  toolRule: factory.class.fromRulesyncRule({
@@ -79304,6 +79313,57 @@ var RulesProcessor = class extends FeatureProcessor {
79304
79313
  getPromptBlockLanguage() {
79305
79314
  return this.isClaudecodeTarget() ? void 0 : this.language;
79306
79315
  }
79316
+ /**
79317
+ * `includeRoot: false` on the `claudecode` target (project scope only)
79318
+ * drops the root `CLAUDE.md` and the personal `CLAUDE.local.md`, keeping the
79319
+ * non-root `.claude/rules/*.md`. Claude Code falls back to `AGENTS.md` only
79320
+ * when none of `CLAUDE.md`, `.claude/CLAUDE.md` or `CLAUDE.local.md` exists,
79321
+ * so emitting either root file would shadow an `AGENTS.md` written by another
79322
+ * target. Stale root files are swept by the regular orphan deletion because
79323
+ * they are no longer part of the generated output. Global scope keeps the
79324
+ * root file: `~/.claude/CLAUDE.md` never shadows `AGENTS.md`, and Claude Code
79325
+ * reads no global `AGENTS.md` to fall back to. `claudecode-legacy` is not
79326
+ * covered: its `.claude/memories/*.md` are only reachable through the
79327
+ * references listed in the root file.
79328
+ * @see https://code.claude.com/docs/en/memory#when-claude-code-reads-agents-md
79329
+ */
79330
+ omitsRootFiles() {
79331
+ return this.toolTarget === "claudecode" && !this.global && !resolveIncludeRoot(this.featureOptions);
79332
+ }
79333
+ /**
79334
+ * Warn when `includeRoot: false` is set where it has no effect, or where it
79335
+ * silently disables another option that writes into the root file.
79336
+ */
79337
+ warnForIncludeRootOption(meta) {
79338
+ if (resolveIncludeRoot(this.featureOptions)) return;
79339
+ if (this.toolTarget !== "claudecode") {
79340
+ this.logger.warn(`The rules option \`includeRoot\` is only supported by the claudecode target; ignoring it for ${this.toolTarget}.`);
79341
+ return;
79342
+ }
79343
+ if (this.global) {
79344
+ this.logger.warn("The rules option `includeRoot: false` has no effect in global mode: ~/.claude/CLAUDE.md does not shadow AGENTS.md, so it is still generated.");
79345
+ return;
79346
+ }
79347
+ if (resolveRuleDiscoveryMode({
79348
+ defaultMode: meta.ruleDiscoveryMode,
79349
+ options: this.featureOptions
79350
+ }) !== "auto") this.logger.warn("The rules option `ruleDiscoveryMode` has no effect with `includeRoot: false` on claudecode: the rule references it adds are written into CLAUDE.md, which is not generated.");
79351
+ }
79352
+ /**
79353
+ * With `includeRoot: false`, a hand-authored root file at an alternative
79354
+ * location (`.claude/CLAUDE.md`, `.claude/CLAUDE.local.md`) still keeps
79355
+ * Claude Code from reading `AGENTS.md`. Rulesync never writes those files, so
79356
+ * it leaves them in place and tells the user instead of deleting them.
79357
+ */
79358
+ async warnForShadowingAlternativeRoots(alternativeRoots) {
79359
+ const localRootFileName = this.getFactory(this.toolTarget).meta.localRootFileName;
79360
+ const globs = alternativeRoots.flatMap((alt) => [rootRelativeGlob(alt.relativeDirPath, alt.relativeFilePath), ...localRootFileName ? [rootRelativeGlob(alt.relativeDirPath, localRootFileName)] : []]);
79361
+ if (globs.length === 0) return;
79362
+ const filePaths = await findFilesByGlobs(globs, { cwd: this.outputRoot });
79363
+ if (filePaths.length === 0) return;
79364
+ const names = filePaths.map((filePath) => stripControlCharacters((0, node_path.relative)(this.outputRoot, filePath)));
79365
+ this.logger.warn(`${names.join(", ")} still ${names.length === 1 ? "keeps" : "keep"} Claude Code from reading AGENTS.md although \`includeRoot: false\` is set for claudecode. Rulesync does not delete ${names.length === 1 ? "it" : "them"}; remove ${names.length === 1 ? "it" : "them"} by hand once the content is covered by AGENTS.md.`);
79366
+ }
79307
79367
  isClaudecodeTarget() {
79308
79368
  return this.toolTarget === "claudecode" || this.toolTarget === "claudecode-legacy";
79309
79369
  }
@@ -79938,9 +79998,14 @@ As this project's AI coding tool, you must follow the additional conventions bel
79938
79998
  * Resolved once, up front, so the two blocks that need it do not depend
79939
79999
  * on each other's evaluation order.
79940
80000
  */
80001
+ const omitsRootFiles = this.omitsRootFiles();
79941
80002
  const primaryRootFilePaths = settablePaths.root ? await findFilesByGlobs(rootRelativeGlob(settablePaths.root.relativeDirPath ?? ".", settablePaths.root.relativeFilePath), { cwd: this.outputRoot }) : [];
79942
80003
  const rootToolRules = await (async () => {
79943
80004
  if (!settablePaths.root) return [];
80005
+ if (forDeletion && omitsRootFiles) {
80006
+ await this.warnForShadowingAlternativeRoots(settablePaths.alternativeRoots ?? []);
80007
+ return buildDeletionRulesFromPaths(primaryRootFilePaths);
80008
+ }
79944
80009
  const uniqueRootFilePaths = await findFilesWithFallback(primaryRootFilePaths, settablePaths.alternativeRoots, (alt) => rootRelativeGlob(alt.relativeDirPath, alt.relativeFilePath), this.outputRoot);
79945
80010
  if (forDeletion) return buildDeletionRulesFromPaths(uniqueRootFilePaths);
79946
80011
  return await buildImportRulesFromPaths(uniqueRootFilePaths);
@@ -79952,7 +80017,9 @@ As this project's AI coding tool, you must follow the additional conventions bel
79952
80017
  const filePaths = await (async () => {
79953
80018
  if (factory.class.getLocalRootFileGlob) return await findFilesByGlobs(factory.class.getLocalRootFileGlob({ fileName }), { cwd: this.outputRoot });
79954
80019
  if (!settablePaths.root) return [];
79955
- return await findFilesWithFallback(await findFilesByGlobs(rootRelativeGlob(settablePaths.root.relativeDirPath ?? ".", fileName), { cwd: this.outputRoot }), settablePaths.alternativeRoots, (alt) => rootRelativeGlob(alt.relativeDirPath, fileName), this.outputRoot);
80020
+ const primaryLocalFilePaths = await findFilesByGlobs(rootRelativeGlob(settablePaths.root.relativeDirPath ?? ".", fileName), { cwd: this.outputRoot });
80021
+ if (forDeletion && omitsRootFiles) return primaryLocalFilePaths;
80022
+ return await findFilesWithFallback(primaryLocalFilePaths, settablePaths.alternativeRoots, (alt) => rootRelativeGlob(alt.relativeDirPath, fileName), this.outputRoot);
79956
80023
  })();
79957
80024
  if (forDeletion) return buildDeletionRulesFromPaths(filePaths);
79958
80025
  return (await Promise.all(filePaths.map(async (filePath) => {
@@ -78576,7 +78576,8 @@ const RulesProcessorToolTargetSchema = z.enum(rulesProcessorToolTargetTuple);
78576
78576
  const formatRulePaths = (rules) => rules.map((r) => join(r.getRelativeDirPath(), r.getRelativeFilePath())).join(", ");
78577
78577
  const RulesFeatureOptionsSchema = z.looseObject({
78578
78578
  ruleDiscoveryMode: z.optional(z.enum(["none", "explicit"])),
78579
- includeLocalRoot: z.optional(z.boolean())
78579
+ includeLocalRoot: z.optional(z.boolean()),
78580
+ includeRoot: z.optional(z.boolean())
78580
78581
  });
78581
78582
  const resolveRuleDiscoveryMode = ({ defaultMode, options }) => {
78582
78583
  if (defaultMode === "claudecode-legacy") return defaultMode;
@@ -78593,6 +78594,13 @@ const resolveIncludeLocalRoot = (options) => {
78593
78594
  if (!parsed.success) throw new Error(`Invalid options for rules feature: ${parsed.error.message}. \`includeLocalRoot\` must be a boolean.`);
78594
78595
  return parsed.data.includeLocalRoot ?? true;
78595
78596
  };
78597
+ const IncludeRootSchema = z.looseObject({ includeRoot: z.optional(z.boolean()) });
78598
+ const resolveIncludeRoot = (options) => {
78599
+ if (!options) return true;
78600
+ const parsed = IncludeRootSchema.safeParse(options);
78601
+ if (!parsed.success) throw new Error(`Invalid options for rules feature: ${parsed.error.message}. \`includeRoot\` must be a boolean.`);
78602
+ return parsed.data.includeRoot ?? true;
78603
+ };
78596
78604
  /**
78597
78605
  * Whether `candidate` is `base` itself or a class that extends it.
78598
78606
  *
@@ -79138,11 +79146,12 @@ var RulesProcessor = class extends FeatureProcessor {
79138
79146
  async convertRulesyncFilesToToolFiles(rulesyncFiles) {
79139
79147
  const rulesyncRules = rulesyncFiles.filter((file) => file instanceof RulesyncRule);
79140
79148
  const alignedRules = this.alignPiContextFile(rulesyncRules);
79141
- const localRootRules = alignedRules.filter((rule) => rule.getFrontmatter().localRoot);
79142
- const nonLocalRootRules = alignedRules.filter((rule) => !rule.getFrontmatter().localRoot);
79143
79149
  const factory = this.getFactory(this.toolTarget);
79144
79150
  const { meta } = factory;
79145
- const convertedRules = nonLocalRootRules.map((rulesyncRule) => {
79151
+ this.warnForIncludeRootOption(meta);
79152
+ const emittedRules = this.omitsRootFiles() ? alignedRules.filter((rule) => !rule.getFrontmatter().root && !rule.getFrontmatter().localRoot) : alignedRules;
79153
+ const localRootRules = emittedRules.filter((rule) => rule.getFrontmatter().localRoot);
79154
+ const convertedRules = emittedRules.filter((rule) => !rule.getFrontmatter().localRoot).map((rulesyncRule) => {
79146
79155
  if (!factory.class.isTargetedByRulesyncRule(rulesyncRule)) return null;
79147
79156
  return {
79148
79157
  toolRule: factory.class.fromRulesyncRule({
@@ -79279,6 +79288,57 @@ var RulesProcessor = class extends FeatureProcessor {
79279
79288
  getPromptBlockLanguage() {
79280
79289
  return this.isClaudecodeTarget() ? void 0 : this.language;
79281
79290
  }
79291
+ /**
79292
+ * `includeRoot: false` on the `claudecode` target (project scope only)
79293
+ * drops the root `CLAUDE.md` and the personal `CLAUDE.local.md`, keeping the
79294
+ * non-root `.claude/rules/*.md`. Claude Code falls back to `AGENTS.md` only
79295
+ * when none of `CLAUDE.md`, `.claude/CLAUDE.md` or `CLAUDE.local.md` exists,
79296
+ * so emitting either root file would shadow an `AGENTS.md` written by another
79297
+ * target. Stale root files are swept by the regular orphan deletion because
79298
+ * they are no longer part of the generated output. Global scope keeps the
79299
+ * root file: `~/.claude/CLAUDE.md` never shadows `AGENTS.md`, and Claude Code
79300
+ * reads no global `AGENTS.md` to fall back to. `claudecode-legacy` is not
79301
+ * covered: its `.claude/memories/*.md` are only reachable through the
79302
+ * references listed in the root file.
79303
+ * @see https://code.claude.com/docs/en/memory#when-claude-code-reads-agents-md
79304
+ */
79305
+ omitsRootFiles() {
79306
+ return this.toolTarget === "claudecode" && !this.global && !resolveIncludeRoot(this.featureOptions);
79307
+ }
79308
+ /**
79309
+ * Warn when `includeRoot: false` is set where it has no effect, or where it
79310
+ * silently disables another option that writes into the root file.
79311
+ */
79312
+ warnForIncludeRootOption(meta) {
79313
+ if (resolveIncludeRoot(this.featureOptions)) return;
79314
+ if (this.toolTarget !== "claudecode") {
79315
+ this.logger.warn(`The rules option \`includeRoot\` is only supported by the claudecode target; ignoring it for ${this.toolTarget}.`);
79316
+ return;
79317
+ }
79318
+ if (this.global) {
79319
+ this.logger.warn("The rules option `includeRoot: false` has no effect in global mode: ~/.claude/CLAUDE.md does not shadow AGENTS.md, so it is still generated.");
79320
+ return;
79321
+ }
79322
+ if (resolveRuleDiscoveryMode({
79323
+ defaultMode: meta.ruleDiscoveryMode,
79324
+ options: this.featureOptions
79325
+ }) !== "auto") this.logger.warn("The rules option `ruleDiscoveryMode` has no effect with `includeRoot: false` on claudecode: the rule references it adds are written into CLAUDE.md, which is not generated.");
79326
+ }
79327
+ /**
79328
+ * With `includeRoot: false`, a hand-authored root file at an alternative
79329
+ * location (`.claude/CLAUDE.md`, `.claude/CLAUDE.local.md`) still keeps
79330
+ * Claude Code from reading `AGENTS.md`. Rulesync never writes those files, so
79331
+ * it leaves them in place and tells the user instead of deleting them.
79332
+ */
79333
+ async warnForShadowingAlternativeRoots(alternativeRoots) {
79334
+ const localRootFileName = this.getFactory(this.toolTarget).meta.localRootFileName;
79335
+ const globs = alternativeRoots.flatMap((alt) => [rootRelativeGlob(alt.relativeDirPath, alt.relativeFilePath), ...localRootFileName ? [rootRelativeGlob(alt.relativeDirPath, localRootFileName)] : []]);
79336
+ if (globs.length === 0) return;
79337
+ const filePaths = await findFilesByGlobs(globs, { cwd: this.outputRoot });
79338
+ if (filePaths.length === 0) return;
79339
+ const names = filePaths.map((filePath) => stripControlCharacters(relative(this.outputRoot, filePath)));
79340
+ this.logger.warn(`${names.join(", ")} still ${names.length === 1 ? "keeps" : "keep"} Claude Code from reading AGENTS.md although \`includeRoot: false\` is set for claudecode. Rulesync does not delete ${names.length === 1 ? "it" : "them"}; remove ${names.length === 1 ? "it" : "them"} by hand once the content is covered by AGENTS.md.`);
79341
+ }
79282
79342
  isClaudecodeTarget() {
79283
79343
  return this.toolTarget === "claudecode" || this.toolTarget === "claudecode-legacy";
79284
79344
  }
@@ -79913,9 +79973,14 @@ As this project's AI coding tool, you must follow the additional conventions bel
79913
79973
  * Resolved once, up front, so the two blocks that need it do not depend
79914
79974
  * on each other's evaluation order.
79915
79975
  */
79976
+ const omitsRootFiles = this.omitsRootFiles();
79916
79977
  const primaryRootFilePaths = settablePaths.root ? await findFilesByGlobs(rootRelativeGlob(settablePaths.root.relativeDirPath ?? ".", settablePaths.root.relativeFilePath), { cwd: this.outputRoot }) : [];
79917
79978
  const rootToolRules = await (async () => {
79918
79979
  if (!settablePaths.root) return [];
79980
+ if (forDeletion && omitsRootFiles) {
79981
+ await this.warnForShadowingAlternativeRoots(settablePaths.alternativeRoots ?? []);
79982
+ return buildDeletionRulesFromPaths(primaryRootFilePaths);
79983
+ }
79919
79984
  const uniqueRootFilePaths = await findFilesWithFallback(primaryRootFilePaths, settablePaths.alternativeRoots, (alt) => rootRelativeGlob(alt.relativeDirPath, alt.relativeFilePath), this.outputRoot);
79920
79985
  if (forDeletion) return buildDeletionRulesFromPaths(uniqueRootFilePaths);
79921
79986
  return await buildImportRulesFromPaths(uniqueRootFilePaths);
@@ -79927,7 +79992,9 @@ As this project's AI coding tool, you must follow the additional conventions bel
79927
79992
  const filePaths = await (async () => {
79928
79993
  if (factory.class.getLocalRootFileGlob) return await findFilesByGlobs(factory.class.getLocalRootFileGlob({ fileName }), { cwd: this.outputRoot });
79929
79994
  if (!settablePaths.root) return [];
79930
- return await findFilesWithFallback(await findFilesByGlobs(rootRelativeGlob(settablePaths.root.relativeDirPath ?? ".", fileName), { cwd: this.outputRoot }), settablePaths.alternativeRoots, (alt) => rootRelativeGlob(alt.relativeDirPath, fileName), this.outputRoot);
79995
+ const primaryLocalFilePaths = await findFilesByGlobs(rootRelativeGlob(settablePaths.root.relativeDirPath ?? ".", fileName), { cwd: this.outputRoot });
79996
+ if (forDeletion && omitsRootFiles) return primaryLocalFilePaths;
79997
+ return await findFilesWithFallback(primaryLocalFilePaths, settablePaths.alternativeRoots, (alt) => rootRelativeGlob(alt.relativeDirPath, fileName), this.outputRoot);
79931
79998
  })();
79932
79999
  if (forDeletion) return buildDeletionRulesFromPaths(filePaths);
79933
80000
  return (await Promise.all(filePaths.map(async (filePath) => {
@@ -82252,4 +82319,4 @@ async function importChecksCore(params) {
82252
82319
  //#endregion
82253
82320
  export { RulesyncCommand as $, toPosixPath as $t, CLAUDECODE_MEMORIES_DIR_NAME as A, RULESYNC_XDG_CONFIG_HOME_DEFAULT_DIR_NAME as An, checkPathTraversal as At, RulesyncSubagent as B, stripControlCharacters as Bn, listDirectoryEntryNames as Bt, COMMANDCODE_DIR as C, RULESYNC_PERMISSIONS_SCHEMA_URL as Cn, withWarnOnceScope as Ct, CODEXCLI_DIR as D, RULESYNC_SOURCES_LOCK_RELATIVE_FILE_PATH as Dn, assertDirectoryIfExists as Dt, CODEXCLI_BASH_RULES_FILE_NAME as E, RULESYNC_SKILLS_RELATIVE_DIR_PATH as En, applyFileMode as Et, caseFoldIdentity as F, formatError as Fn, getFileSize as Ft, RulesyncRuleFrontmatterSchema as G, readFileContentOrNull as Gt, RulesyncSkill as H, stripHiddenCharacters as Hn, listSubdirectoryNames as Ht, groupSpellingsByCaseFoldedIdentity as I, truncateText as In, getHomeDirectory as It, RulesyncIgnore as J, removeFile as Jt, RulesyncPermissions as K, removeDirectory as Kt, AUGMENTCODE_DIR as L, hasDeceptiveHiddenCharacters as Ln, isFileNotFoundError as Lt, CLAUDECODE_SKILLS_DIR_PATH as M, ALL_FEATURES as Mn, directoryExists as Mt, FACTORYDROID_DIR as N, ALL_FEATURES_WITH_WILDCARD as Nn, ensureDir as Nt, CLAUDECODE_DIR as O, RULESYNC_SUBAGENTS_RELATIVE_DIR_PATH as On, assertTreeContainsNoSymlinks as Ot, FACTORYDROID_SETTINGS_LOCAL_FILE_NAME as P, DEPRECATED_FEATURE_REPLACEMENTS as Pn, fileExists as Pt, parseJsonc as Q, runWithDirectoryRollback as Qt, AUGMENTCODE_SETTINGS_LOCAL_FILE_NAME as R, hasEnclosingMarkOutsideKeycap as Rn, isFileSystemError as Rt, QWENCODE_LOCAL_RULE_FILE_NAME as S, RULESYNC_PERMISSIONS_RELATIVE_FILE_PATH as Sn, resetRunWarningState as St, ChecksProcessor as T, RULESYNC_RULES_RELATIVE_DIR_PATH as Tn, ErrorCodes as Tt, RulesyncSkillFrontmatterSchema as U, pathEscapesRoot as Ut, RulesyncSubagentFrontmatterSchema as V, stripControlCharactersKeepingLineFeeds as Vn, listFilePathsRecursively as Vt, RulesyncRule as W, readFileContent as Wt, getRulesyncSourceCandidates as X, removeTempDirectory as Xt, RulesyncHooks as Y, removeFileStrict as Yt, resolveRulesyncSourceWritePath as Z, resolvePath as Zt, IgnoreProcessor as _, RULESYNC_IGNORE_RELATIVE_FILE_PATH as _n, JsonLogger as _t, getProcessorRegistryEntry as a, ToolTargetSchema as an, SHARED_USER_MANAGED_CONFIG_PATHS as at, CommandsProcessor as b, RULESYNC_MCP_SCHEMA_URL as bn, warnOnConflictingFlags as bt, RulesProcessor as c, MAX_FILE_SIZE as cn, mergeInputRootConfigs as ct, CODEBUDDY_DIR as d, RULESYNC_COMMANDS_RELATIVE_DIR_PATH as dn, ConfigFileSchema as dt, writeFileBuffer as en, RulesyncCommandFrontmatterSchema as et, CODEBUDDY_LOCAL_RULE_FILE_NAME as f, RULESYNC_CONFIG_RELATIVE_FILE_PATH as fn, GITIGNORE_DESTINATION_KEY as ft, McpProcessor as g, RULESYNC_HOOKS_RELATIVE_FILE_PATH as gn, ConsoleLogger as gt, shortenToWidth as h, RULESYNC_CURATED_SKILLS_RELATIVE_DIR_PATH as hn, findControlCharacter as ht, inspectInputRoots as i, PACKAGING_TOOL_TARGETS as in, loadYaml as it, CLAUDECODE_SETTINGS_LOCAL_FILE_NAME as j, parseCommaSeparatedList as jn, createTempDirectory as jt, CLAUDECODE_LOCAL_RULE_FILE_NAME as k, RULESYNC_USER_CONFIG_DIR_NAME as kn, assertWritablePathInsideRoot as kt, SubagentsProcessor as l, RULESYNC_AIIGNORE_RELATIVE_FILE_PATH as ln, resolveEffectiveInputRoots as lt, displayWidthOf as m, RULESYNC_CURATED_RULES_RELATIVE_DIR_PATH as mn, assertTargetsFeaturesExclusive as mt, formatSourceLoadFailure as n, ALL_TOOL_TARGETS as nn, RulesyncCheckFrontmatterSchema as nt, convertFromTool as o, CURATED_RULES_FEATURE_SUBDIR as on, SKILL_FILE_NAME as ot, ELLIPSIS_WIDTH as p, RULESYNC_CONFIG_SCHEMA_URL as pn, SourceEntrySchema as pt, RulesyncMcp as q, removeDirectoryStrict as qt, generate as r, ALL_TOOL_TARGETS_WITH_WILDCARD as rn, stringifyFrontmatter as rt, isPackagingToolTarget as s, FEATURE_SOURCE_TREE_ENTRIES as sn, ConfigResolver as st, importFromTool as t, writeFileContent as tn, RulesyncCheck as tt, SkillsProcessor as u, RULESYNC_CHECKS_RELATIVE_DIR_PATH as un, CONFLICTING_TARGET_PAIRS as ut, HooksProcessor as v, RULESYNC_LOCAL_CONFIG_RELATIVE_FILE_PATH as vn, WarningCollectingLogger as vt, COMMANDCODE_SETTINGS_LOCAL_FILE_NAME as w, RULESYNC_RELATIVE_DIR_PATH as wn, CLIError as wt, QWENCODE_DIR as x, RULESYNC_NPM_SOURCES_LOCK_RELATIVE_FILE_PATH as xn, withFallbackLoggerTarget as xt, CRUSH_LOCAL_RULE_FILE_NAME as y, RULESYNC_MCP_RELATIVE_FILE_PATH as yn, fallbackLogger as yt, getLocalSkillDirNames as z, quoteForLog as zn, isSymlink as zt };
82254
82321
 
82255
- //# sourceMappingURL=import-CEgvxK12.js.map
82322
+ //# sourceMappingURL=import-Csmx6n4n.js.map