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.
- package/README.md +1 -1
- package/dist/cli/index.cjs +913 -24
- package/dist/cli/index.js +913 -24
- package/dist/cli/index.js.map +1 -1
- package/dist/{import-CMSHVMqU.js → import-CSnC5vl7.js} +194 -14
- package/dist/import-CSnC5vl7.js.map +1 -0
- package/dist/{import-nbmxtKYi.cjs → import-Dh9PCQKq.cjs} +212 -26
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/package.json +13 -13
- package/dist/import-CMSHVMqU.js.map +0 -1
|
@@ -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([
|
|
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
|
-
...
|
|
31799
|
-
...
|
|
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,
|
|
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-
|
|
41901
|
+
//# sourceMappingURL=import-CSnC5vl7.js.map
|