rulesync 13.0.0 → 14.0.1

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.
@@ -112,6 +112,7 @@ const RULESYNC_OVERVIEW_FILE_NAME = "overview.md";
112
112
  const RULESYNC_SKILLS_RELATIVE_DIR_PATH = join$1(RULESYNC_RELATIVE_DIR_PATH, "skills");
113
113
  const RULESYNC_CURATED_SKILLS_RELATIVE_DIR_PATH = join$1(RULESYNC_SKILLS_RELATIVE_DIR_PATH, ".curated");
114
114
  const RULESYNC_SOURCES_LOCK_RELATIVE_FILE_PATH = "rulesync.lock";
115
+ const RULESYNC_NPM_SOURCES_LOCK_RELATIVE_FILE_PATH = "rulesync-npm.lock.json";
115
116
  const RULESYNC_MCP_FILE_NAME = "mcp.json";
116
117
  const RULESYNC_HOOKS_FILE_NAME = "hooks.json";
117
118
  const RULESYNC_PERMISSIONS_FILE_NAME = "permissions.json";
@@ -344,6 +345,7 @@ const permissionsProcessorToolTargetTuple = [
344
345
  "claudecode",
345
346
  "cline",
346
347
  "codexcli",
348
+ "copilot",
347
349
  "cursor",
348
350
  "devin",
349
351
  "factorydroid",
@@ -855,9 +857,15 @@ const GITIGNORE_DESTINATION_KEY = "gitignoreDestination";
855
857
  const SourceEntrySchema = z.object({
856
858
  source: z.string().check(minLength(1, "source must be a non-empty string")),
857
859
  skills: optional(z.array(z.string())),
858
- transport: optional(z.enum(["github", "git"])),
860
+ transport: optional(z.enum([
861
+ "github",
862
+ "git",
863
+ "npm"
864
+ ])),
859
865
  ref: optional(z.string().check(refine((v) => !v.startsWith("-"), "ref must not start with \"-\""), refine((v) => !hasControlCharacters(v), "ref must not contain control characters"))),
860
866
  path: optional(z.string().check(refine((v) => !v.includes(".."), "path must not contain \"..\""), refine((v) => !isAbsolute(v), "path must not be absolute"), refine((v) => !hasControlCharacters(v), "path must not contain control characters"))),
867
+ registry: optional(z.string().check(refine((v) => v.startsWith("https://") || v.startsWith("http://"), "registry must be an http(s) URL"), refine((v) => !hasControlCharacters(v), "registry must not contain control characters"))),
868
+ tokenEnv: optional(z.string().check(refine((v) => /^[A-Za-z_][A-Za-z0-9_]*$/.test(v), "tokenEnv must be a valid environment variable name"))),
861
869
  agent: optional(z.enum([
862
870
  "github-copilot",
863
871
  "claude-code",
@@ -867,7 +875,7 @@ const SourceEntrySchema = z.object({
867
875
  "antigravity"
868
876
  ])),
869
877
  scope: optional(z.enum(["project", "user"]))
870
- });
878
+ }).check(refine((entry) => entry.registry === void 0 && entry.tokenEnv === void 0 || entry.transport === "npm", "\"registry\" and \"tokenEnv\" are only valid with transport \"npm\""));
871
879
  const ConfigParamsSchema = z.object({
872
880
  outputRoots: z.union([z.array(z.string()), z.record(z.string(), z.union([z.string(), z.array(z.string())]))]),
873
881
  targets: RulesyncConfigTargetsSchema,
@@ -3239,6 +3247,7 @@ const COPILOT_HOOKS_DIR_PATH = join(GITHUB_DIR, "hooks");
3239
3247
  const COPILOT_HOOKS_FILE_NAME = "copilot-hooks.json";
3240
3248
  const COPILOT_MCP_DIR = ".vscode";
3241
3249
  const COPILOT_MCP_FILE_NAME = "mcp.json";
3250
+ const COPILOT_VSCODE_SETTINGS_FILE_NAME = "settings.json";
3242
3251
  const COPILOTCLI_MCP_FILE_NAME = "mcp-config.json";
3243
3252
  const COPILOTCLI_PROJECT_MCP_FILE_NAME = "mcp.json";
3244
3253
  const COPILOTCLI_AGENTS_DIR_PATH = join(COPILOT_DIR, "agents");
@@ -4644,6 +4653,15 @@ const SHARED_CONFIG_OWNERSHIP = {
4644
4653
  }
4645
4654
  }
4646
4655
  },
4656
+ ".vscode/settings.json": {
4657
+ format: "jsonc",
4658
+ invalidRootPolicy: "error",
4659
+ jsoncParseErrors: "error",
4660
+ features: { permissions: {
4661
+ kind: "replace-owned-keys",
4662
+ ownedKeys: ["chat.tools.terminal.autoApprove"]
4663
+ } }
4664
+ },
4647
4665
  ".qwen/settings.json": {
4648
4666
  format: "json",
4649
4667
  features: {
@@ -6611,7 +6629,8 @@ const HookDefinitionSchema = z.looseObject({
6611
6629
  server: z.optional(safeString),
6612
6630
  tool: z.optional(safeString),
6613
6631
  input: z.optional(z.looseObject({})),
6614
- model: z.optional(safeString)
6632
+ model: z.optional(safeString),
6633
+ if: z.optional(safeString)
6615
6634
  });
6616
6635
  /**
6617
6636
  * All canonical hook event names.
@@ -7671,6 +7690,22 @@ function importBooleanPassthroughFields({ h, converterConfig }) {
7671
7690
  return Object.fromEntries((converterConfig.booleanPassthroughFields ?? []).filter(({ tool }) => typeof h[tool] === "boolean").map(({ canonical, tool }) => [canonical, h[tool]]));
7672
7691
  }
7673
7692
  /**
7693
+ * Emit the configured string passthrough fields on the tool side, mapping each
7694
+ * canonical field name to its (possibly renamed) tool field name. Only non-empty
7695
+ * string values are carried through.
7696
+ */
7697
+ function emitStringPassthroughFields({ def, converterConfig }) {
7698
+ return Object.fromEntries((converterConfig.stringPassthroughFields ?? []).filter(({ canonical }) => typeof def[canonical] === "string" && def[canonical] !== "").map(({ canonical, tool }) => [tool, def[canonical]]));
7699
+ }
7700
+ /**
7701
+ * Import the configured string passthrough fields back into canonical fields,
7702
+ * reversing {@link emitStringPassthroughFields}. Only non-empty string values
7703
+ * are read.
7704
+ */
7705
+ function importStringPassthroughFields({ h, converterConfig }) {
7706
+ return Object.fromEntries((converterConfig.stringPassthroughFields ?? []).filter(({ tool }) => typeof h[tool] === "string" && h[tool] !== "").map(({ canonical, tool }) => [canonical, h[tool]]));
7707
+ }
7708
+ /**
7674
7709
  * Emit the payload fields specific to a hook type — `url`/`headers`/
7675
7710
  * `allowedEnvVars` for http, `server`/`tool`/`input` for mcp_tool, `model`
7676
7711
  * for prompt/agent. https://code.claude.com/docs/en/hooks
@@ -7707,6 +7742,10 @@ function buildToolHooks({ defs, converterConfig }) {
7707
7742
  def,
7708
7743
  converterConfig
7709
7744
  }),
7745
+ ...emitStringPassthroughFields({
7746
+ def,
7747
+ converterConfig
7748
+ }),
7710
7749
  type: hookType,
7711
7750
  ...command !== void 0 && command !== null && { command },
7712
7751
  ...def.timeout !== void 0 && def.timeout !== null && { timeout: def.timeout },
@@ -7847,6 +7886,10 @@ function toolHookToCanonical({ h, rawEntry, converterConfig }) {
7847
7886
  h,
7848
7887
  converterConfig
7849
7888
  }),
7889
+ ...importStringPassthroughFields({
7890
+ h,
7891
+ converterConfig
7892
+ }),
7850
7893
  ...rawEntry.matcher !== void 0 && rawEntry.matcher !== null && rawEntry.matcher !== "" && { matcher: rawEntry.matcher }
7851
7894
  };
7852
7895
  }
@@ -8418,7 +8461,11 @@ const CLAUDE_CONVERTER_CONFIG = {
8418
8461
  "mcp_tool",
8419
8462
  "agent"
8420
8463
  ]),
8421
- emitsPromptModel: true
8464
+ emitsPromptModel: true,
8465
+ stringPassthroughFields: [{
8466
+ canonical: "if",
8467
+ tool: "if"
8468
+ }]
8422
8469
  };
8423
8470
  var ClaudecodeHooks = class ClaudecodeHooks extends ToolHooks {
8424
8471
  constructor(params) {
@@ -18216,6 +18263,7 @@ const PermissionsConfigSchema = z.looseObject({
18216
18263
  kiro: z.optional(KiroPermissionsOverrideSchema),
18217
18264
  codexcli: z.optional(CodexcliPermissionsOverrideSchema),
18218
18265
  "antigravity-ide": z.optional(CanonicalPermissionsOverrideSchema),
18266
+ copilot: z.optional(CanonicalPermissionsOverrideSchema),
18219
18267
  devin: z.optional(CanonicalPermissionsOverrideSchema),
18220
18268
  goose: z.optional(CanonicalPermissionsOverrideSchema),
18221
18269
  grokcli: z.optional(CanonicalPermissionsOverrideSchema),
@@ -20719,6 +20767,135 @@ function mapBashActionToDecision(action) {
20719
20767
  return "forbidden";
20720
20768
  }
20721
20769
  //#endregion
20770
+ //#region src/features/permissions/copilot-permissions.ts
20771
+ /**
20772
+ * The flat, dotted VS Code setting key this adapter manages. VS Code stores
20773
+ * settings with dotted keys flat at the document top level, so this is a single
20774
+ * literal key — not a nested `chat.tools.terminal` path.
20775
+ * @see https://code.visualstudio.com/docs/agents/approvals
20776
+ */
20777
+ const AUTO_APPROVE_KEY = "chat.tools.terminal.autoApprove";
20778
+ /**
20779
+ * The canonical permission category this adapter maps. Only shell/terminal
20780
+ * commands (`bash`) have a clean, high-fidelity representation in VS Code's
20781
+ * `chat.tools.terminal.autoApprove` map; other categories (read/edit/webfetch/
20782
+ * …) have no terminal-command equivalent and are intentionally not mapped.
20783
+ */
20784
+ const TERMINAL_CATEGORY = "bash";
20785
+ function asAutoApproveMap(value) {
20786
+ if (!isPlainObject$1(value)) return {};
20787
+ const result = {};
20788
+ for (const [pattern, flag] of Object.entries(value)) if (typeof flag === "boolean") result[pattern] = flag;
20789
+ return result;
20790
+ }
20791
+ /**
20792
+ * Permissions generator for GitHub Copilot Chat in VS Code.
20793
+ *
20794
+ * VS Code has no standalone, environment-agnostic Copilot policy file (like
20795
+ * `.claude/settings.json`); project-level terminal auto-approvals are managed
20796
+ * through the workspace `chat.tools.terminal.autoApprove` map inside
20797
+ * `.vscode/settings.json`. That file is a general workspace settings file with
20798
+ * many unrelated keys, so reads and writes merge into the existing JSON
20799
+ * (touching only the one managed key) and the file is never deleted.
20800
+ *
20801
+ * Scope is deliberately limited to `chat.tools.terminal.autoApprove` — the one
20802
+ * clean, non-lossy mapping. The canonical `bash` category's per-pattern rules
20803
+ * map as: `allow` → `true` (auto-approve), `deny` → `false` (never approve),
20804
+ * and `ask` → the entry is OMITTED (VS Code then falls through to its default
20805
+ * in-chat approval prompt, i.e. "ask"). Only project scope is modeled: VS Code's
20806
+ * user-scope settings.json lives at a platform-dependent path outside rulesync's
20807
+ * home-relative global model.
20808
+ */
20809
+ var CopilotPermissions = class CopilotPermissions extends ToolPermissions {
20810
+ constructor(params) {
20811
+ super({
20812
+ ...params,
20813
+ fileContent: params.fileContent ?? "{}"
20814
+ });
20815
+ }
20816
+ /**
20817
+ * `.vscode/settings.json` is a user-managed workspace file with unrelated
20818
+ * settings, so it must not be deleted.
20819
+ */
20820
+ isDeletable() {
20821
+ return false;
20822
+ }
20823
+ static getSettablePaths(_options = {}) {
20824
+ return {
20825
+ relativeDirPath: COPILOT_MCP_DIR,
20826
+ relativeFilePath: COPILOT_VSCODE_SETTINGS_FILE_NAME
20827
+ };
20828
+ }
20829
+ static async fromFile({ outputRoot = process.cwd(), validate = true }) {
20830
+ const paths = CopilotPermissions.getSettablePaths();
20831
+ const fileContent = await readFileContentOrNull(join(outputRoot, paths.relativeDirPath, paths.relativeFilePath)) ?? "{}";
20832
+ return new CopilotPermissions({
20833
+ outputRoot,
20834
+ relativeDirPath: paths.relativeDirPath,
20835
+ relativeFilePath: paths.relativeFilePath,
20836
+ fileContent,
20837
+ validate
20838
+ });
20839
+ }
20840
+ static async fromRulesyncPermissions({ outputRoot = process.cwd(), rulesyncPermissions }) {
20841
+ const paths = CopilotPermissions.getSettablePaths();
20842
+ const filePath = join(outputRoot, paths.relativeDirPath, paths.relativeFilePath);
20843
+ const existingContent = await readFileContentOrNull(filePath) ?? "{}";
20844
+ const rules = rulesyncPermissions.getJson().permission[TERMINAL_CATEGORY] ?? {};
20845
+ const autoApprove = {};
20846
+ for (const [pattern, action] of Object.entries(rules)) if (action === "allow") autoApprove[pattern] = true;
20847
+ else if (action === "deny") autoApprove[pattern] = false;
20848
+ const patchValue = Object.keys(autoApprove).length > 0 ? autoApprove : void 0;
20849
+ return new CopilotPermissions({
20850
+ outputRoot,
20851
+ relativeDirPath: paths.relativeDirPath,
20852
+ relativeFilePath: paths.relativeFilePath,
20853
+ fileContent: applySharedConfigPatch({
20854
+ fileKey: sharedConfigFileKey(paths),
20855
+ feature: "permissions",
20856
+ existingContent,
20857
+ patch: { [AUTO_APPROVE_KEY]: patchValue },
20858
+ filePath
20859
+ }),
20860
+ validate: true
20861
+ });
20862
+ }
20863
+ toRulesyncPermissions() {
20864
+ let settings;
20865
+ try {
20866
+ settings = parseSharedConfig({
20867
+ format: "jsonc",
20868
+ fileContent: this.getFileContent() || "{}",
20869
+ filePath: join(this.getRelativeDirPath(), this.getRelativeFilePath()),
20870
+ invalidRootPolicy: "error",
20871
+ jsoncParseErrors: "error"
20872
+ });
20873
+ } catch (error) {
20874
+ throw new Error(`Failed to parse Copilot VS Code settings in ${join(this.getRelativeDirPath(), this.getRelativeFilePath())}: ${formatError(error)}`, { cause: error });
20875
+ }
20876
+ const autoApprove = asAutoApproveMap(settings[AUTO_APPROVE_KEY]);
20877
+ const rules = {};
20878
+ for (const [pattern, flag] of Object.entries(autoApprove)) rules[pattern] = flag ? "allow" : "deny";
20879
+ const permission = Object.keys(rules).length > 0 ? { [TERMINAL_CATEGORY]: rules } : {};
20880
+ return this.toRulesyncPermissionsDefault({ fileContent: JSON.stringify({ permission }, null, 2) });
20881
+ }
20882
+ validate() {
20883
+ return {
20884
+ success: true,
20885
+ error: null
20886
+ };
20887
+ }
20888
+ static forDeletion({ outputRoot = process.cwd(), relativeDirPath, relativeFilePath }) {
20889
+ return new CopilotPermissions({
20890
+ outputRoot,
20891
+ relativeDirPath,
20892
+ relativeFilePath,
20893
+ fileContent: "{}",
20894
+ validate: false
20895
+ });
20896
+ }
20897
+ };
20898
+ //#endregion
20722
20899
  //#region src/features/permissions/cursor-permissions.ts
20723
20900
  /**
20724
20901
  * Mapping from rulesync canonical tool category names (lowercase) to Cursor CLI
@@ -24609,6 +24786,14 @@ const toolPermissionsFactories = /* @__PURE__ */ new Map([
24609
24786
  supportsImport: true
24610
24787
  }
24611
24788
  }],
24789
+ ["copilot", {
24790
+ class: CopilotPermissions,
24791
+ meta: {
24792
+ supportsProject: true,
24793
+ supportsGlobal: false,
24794
+ supportsImport: true
24795
+ }
24796
+ }],
24612
24797
  ["cursor", {
24613
24798
  class: CursorPermissions,
24614
24799
  meta: {
@@ -31722,7 +31907,6 @@ var CodexCliSubagent = class CodexCliSubagent extends ToolSubagent {
31722
31907
  };
31723
31908
  //#endregion
31724
31909
  //#region src/features/subagents/copilot-subagent.ts
31725
- const REQUIRED_TOOL = "agent/runSubagent";
31726
31910
  const CopilotSubagentFrontmatterSchema = z.looseObject({
31727
31911
  name: z.string(),
31728
31912
  description: z.optional(z.string()),
@@ -31732,10 +31916,6 @@ const normalizeTools = (tools) => {
31732
31916
  if (!tools) return [];
31733
31917
  return Array.isArray(tools) ? tools : [tools];
31734
31918
  };
31735
- const ensureRequiredTool = (tools) => {
31736
- const mergedTools = /* @__PURE__ */ new Set([REQUIRED_TOOL, ...tools]);
31737
- return Array.from(mergedTools);
31738
- };
31739
31919
  const toCopilotAgentFilePath = (relativeFilePath) => {
31740
31920
  if (relativeFilePath.endsWith(".agent.md")) return relativeFilePath;
31741
31921
  if (relativeFilePath.endsWith(".md")) return relativeFilePath.replace(/\.md$/, ".agent.md");
@@ -31789,14 +31969,14 @@ var CopilotSubagent = class CopilotSubagent extends ToolSubagent {
31789
31969
  static fromRulesyncSubagent({ outputRoot = process.cwd(), rulesyncSubagent, validate = true, global = false }) {
31790
31970
  const rulesyncFrontmatter = rulesyncSubagent.getFrontmatter();
31791
31971
  const copilotSection = rulesyncFrontmatter.copilot ?? {};
31972
+ const { tools: _rawTools, ...copilotRest } = copilotSection;
31792
31973
  const toolsField = copilotSection.tools;
31793
31974
  const userTools = normalizeTools(Array.isArray(toolsField) || typeof toolsField === "string" ? toolsField : void 0);
31794
- const mergedTools = ensureRequiredTool(userTools);
31795
31975
  const copilotFrontmatter = {
31796
31976
  name: rulesyncFrontmatter.name,
31797
31977
  description: rulesyncFrontmatter.description,
31798
- ...copilotSection,
31799
- ...mergedTools.length > 0 && { tools: mergedTools }
31978
+ ...copilotRest,
31979
+ ...userTools.length > 0 && { tools: userTools }
31800
31980
  };
31801
31981
  const body = rulesyncSubagent.getBody();
31802
31982
  const fileContent = stringifyFrontmatter(body, copilotFrontmatter);
@@ -41716,6 +41896,6 @@ async function importChecksCore(params) {
41716
41896
  return writtenCount;
41717
41897
  }
41718
41898
  //#endregion
41719
- export { isSymlink as $, CLAUDECODE_SETTINGS_LOCAL_FILE_NAME as A, RULESYNC_PERMISSIONS_RELATIVE_FILE_PATH as At, findControlCharacter as B, CommandsProcessor as C, RULESYNC_MCP_FILE_NAME as Ct, CLAUDECODE_DIR as D, RULESYNC_OVERVIEW_FILE_NAME as Dt, CODEXCLI_DIR as E, RULESYNC_MCP_SCHEMA_URL as Et, RulesyncCheck as F, RULESYNC_SOURCES_LOCK_RELATIVE_FILE_PATH as Ft, checkPathTraversal as G, JsonLogger as H, RulesyncCheckFrontmatterSchema as I, RULESYNC_SUBAGENTS_RELATIVE_DIR_PATH as It, ensureDir as J, createTempDirectory as K, stringifyFrontmatter as L, formatError as Lt, RulesyncCommand as M, RULESYNC_RELATIVE_DIR_PATH as Mt, RulesyncCommandFrontmatterSchema as N, RULESYNC_RULES_RELATIVE_DIR_PATH as Nt, CLAUDECODE_LOCAL_RULE_FILE_NAME as O, RULESYNC_PERMISSIONS_FILE_NAME as Ot, ChecksProcessor as P, RULESYNC_SKILLS_RELATIVE_DIR_PATH as Pt, getHomeDirectory as Q, loadYaml as R, ALL_FEATURES as Rt, RulesyncHooks as S, RULESYNC_LOCAL_CONFIG_RELATIVE_FILE_PATH as St, CODEXCLI_BASH_RULES_FILE_NAME as T, RULESYNC_MCP_RELATIVE_FILE_PATH as Tt, CLIError as U, ConsoleLogger as V, ErrorCodes as W, findFilesByGlobs as X, fileExists as Y, getFileSize as Z, McpProcessor as _, RULESYNC_CURATED_SKILLS_RELATIVE_DIR_PATH as _t, convertFromTool as a, toPosixPath as at, RulesyncIgnore as b, RULESYNC_HOOKS_RELATIVE_FILE_PATH as bt, RulesyncRuleFrontmatterSchema as c, ALL_TOOL_TARGETS_WITH_WILDCARD as ct, RulesyncSubagentFrontmatterSchema as d, RULESYNC_AIIGNORE_FILE_NAME as dt, listDirectoryFiles as et, SkillsProcessor as f, RULESYNC_AIIGNORE_RELATIVE_FILE_PATH as ft, RulesyncPermissions as g, RULESYNC_CONFIG_SCHEMA_URL as gt, RulesyncSkillFrontmatterSchema as h, RULESYNC_CONFIG_RELATIVE_FILE_PATH as ht, getProcessorRegistryEntry as i, removeTempDirectory as it, CLAUDECODE_SKILLS_DIR_PATH as j, RULESYNC_PERMISSIONS_SCHEMA_URL as jt, CLAUDECODE_MEMORIES_DIR_NAME as k, RULESYNC_PERMISSIONS_JSONC_FILE_NAME as kt, SubagentsProcessor as l, ToolTargetSchema as lt, RulesyncSkill as m, RULESYNC_COMMANDS_RELATIVE_DIR_PATH as mt, checkRulesyncDirExists as n, removeDirectory as nt, RulesProcessor as o, writeFileContent as ot, getLocalSkillDirNames as p, RULESYNC_CHECKS_RELATIVE_DIR_PATH as pt, directoryExists as q, generate as r, removeFile as rt, RulesyncRule as s, ALL_TOOL_TARGETS as st, importFromTool as t, readFileContent as tt, RulesyncSubagent as u, MAX_FILE_SIZE as ut, RulesyncMcp as v, RULESYNC_HOOKS_FILE_NAME as vt, SKILL_FILE_NAME$1 as w, RULESYNC_MCP_JSONC_FILE_NAME as wt, HooksProcessor as x, RULESYNC_IGNORE_RELATIVE_FILE_PATH as xt, IgnoreProcessor as y, RULESYNC_HOOKS_JSONC_FILE_NAME as yt, ConfigResolver as z, ALL_FEATURES_WITH_WILDCARD as zt };
41899
+ export { isSymlink as $, CLAUDECODE_SETTINGS_LOCAL_FILE_NAME as A, RULESYNC_PERMISSIONS_JSONC_FILE_NAME as At, findControlCharacter as B, ALL_FEATURES_WITH_WILDCARD as Bt, CommandsProcessor as C, RULESYNC_MCP_FILE_NAME as Ct, CLAUDECODE_DIR as D, RULESYNC_NPM_SOURCES_LOCK_RELATIVE_FILE_PATH as Dt, CODEXCLI_DIR as E, RULESYNC_MCP_SCHEMA_URL as Et, RulesyncCheck as F, RULESYNC_SKILLS_RELATIVE_DIR_PATH as Ft, checkPathTraversal as G, JsonLogger as H, RulesyncCheckFrontmatterSchema as I, RULESYNC_SOURCES_LOCK_RELATIVE_FILE_PATH as It, ensureDir as J, createTempDirectory as K, stringifyFrontmatter as L, RULESYNC_SUBAGENTS_RELATIVE_DIR_PATH as Lt, RulesyncCommand as M, RULESYNC_PERMISSIONS_SCHEMA_URL as Mt, RulesyncCommandFrontmatterSchema as N, RULESYNC_RELATIVE_DIR_PATH as Nt, CLAUDECODE_LOCAL_RULE_FILE_NAME as O, RULESYNC_OVERVIEW_FILE_NAME as Ot, ChecksProcessor as P, RULESYNC_RULES_RELATIVE_DIR_PATH as Pt, getHomeDirectory as Q, loadYaml as R, formatError as Rt, RulesyncHooks as S, RULESYNC_LOCAL_CONFIG_RELATIVE_FILE_PATH as St, CODEXCLI_BASH_RULES_FILE_NAME as T, RULESYNC_MCP_RELATIVE_FILE_PATH as Tt, CLIError as U, ConsoleLogger as V, ErrorCodes as W, findFilesByGlobs as X, fileExists as Y, getFileSize as Z, McpProcessor as _, RULESYNC_CURATED_SKILLS_RELATIVE_DIR_PATH as _t, convertFromTool as a, toPosixPath as at, RulesyncIgnore as b, RULESYNC_HOOKS_RELATIVE_FILE_PATH as bt, RulesyncRuleFrontmatterSchema as c, ALL_TOOL_TARGETS_WITH_WILDCARD as ct, RulesyncSubagentFrontmatterSchema as d, RULESYNC_AIIGNORE_FILE_NAME as dt, listDirectoryFiles as et, SkillsProcessor as f, RULESYNC_AIIGNORE_RELATIVE_FILE_PATH as ft, RulesyncPermissions as g, RULESYNC_CONFIG_SCHEMA_URL as gt, RulesyncSkillFrontmatterSchema as h, RULESYNC_CONFIG_RELATIVE_FILE_PATH as ht, getProcessorRegistryEntry as i, removeTempDirectory as it, CLAUDECODE_SKILLS_DIR_PATH as j, RULESYNC_PERMISSIONS_RELATIVE_FILE_PATH as jt, CLAUDECODE_MEMORIES_DIR_NAME as k, RULESYNC_PERMISSIONS_FILE_NAME as kt, SubagentsProcessor as l, ToolTargetSchema as lt, RulesyncSkill as m, RULESYNC_COMMANDS_RELATIVE_DIR_PATH as mt, checkRulesyncDirExists as n, removeDirectory as nt, RulesProcessor as o, writeFileContent as ot, getLocalSkillDirNames as p, RULESYNC_CHECKS_RELATIVE_DIR_PATH as pt, directoryExists as q, generate as r, removeFile as rt, RulesyncRule as s, ALL_TOOL_TARGETS as st, importFromTool as t, readFileContent as tt, RulesyncSubagent as u, MAX_FILE_SIZE as ut, RulesyncMcp as v, RULESYNC_HOOKS_FILE_NAME as vt, SKILL_FILE_NAME$1 as w, RULESYNC_MCP_JSONC_FILE_NAME as wt, HooksProcessor as x, RULESYNC_IGNORE_RELATIVE_FILE_PATH as xt, IgnoreProcessor as y, RULESYNC_HOOKS_JSONC_FILE_NAME as yt, ConfigResolver as z, ALL_FEATURES as zt };
41720
41900
 
41721
- //# sourceMappingURL=import-CMSHVMqU.js.map
41901
+ //# sourceMappingURL=import-CSnC5vl7.js.map