rulesync 9.1.0 → 9.2.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.
- package/dist/cli/index.cjs +11 -11
- package/dist/cli/index.js +11 -11
- package/dist/cli/index.js.map +1 -1
- package/dist/{import-ylOvQDpE.js → import-BkxwFCDM.js} +190 -97
- package/dist/import-BkxwFCDM.js.map +1 -0
- package/dist/{import-CNtfs80W.cjs → import-H0MKtu9x.cjs} +189 -96
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/package.json +16 -16
- package/dist/import-ylOvQDpE.js.map +0 -1
|
@@ -7169,6 +7169,12 @@ var CodexcliHooks = class CodexcliHooks extends ToolHooks {
|
|
|
7169
7169
|
relativeFilePath: CODEXCLI_HOOKS_FILE_NAME
|
|
7170
7170
|
};
|
|
7171
7171
|
}
|
|
7172
|
+
static getExtraSharedWritePaths() {
|
|
7173
|
+
return [{
|
|
7174
|
+
relativeDirPath: CODEXCLI_DIR,
|
|
7175
|
+
relativeFilePath: CODEXCLI_MCP_FILE_NAME
|
|
7176
|
+
}];
|
|
7177
|
+
}
|
|
7172
7178
|
static async fromFile({ outputRoot = process.cwd(), validate = true, global = false }) {
|
|
7173
7179
|
const paths = CodexcliHooks.getSettablePaths({ global });
|
|
7174
7180
|
const fileContent = await readFileContentOrNull((0, node_path.join)(outputRoot, paths.relativeDirPath, paths.relativeFilePath)) ?? "{\"hooks\":{}}";
|
|
@@ -9759,6 +9765,12 @@ var VibeHooks = class VibeHooks extends ToolHooks {
|
|
|
9759
9765
|
relativeFilePath: VIBE_HOOKS_FILE_NAME
|
|
9760
9766
|
};
|
|
9761
9767
|
}
|
|
9768
|
+
static getExtraSharedWritePaths() {
|
|
9769
|
+
return [{
|
|
9770
|
+
relativeDirPath: VIBE_DIR,
|
|
9771
|
+
relativeFilePath: VIBE_CONFIG_FILE_NAME
|
|
9772
|
+
}];
|
|
9773
|
+
}
|
|
9762
9774
|
static async fromFile({ outputRoot = process.cwd(), validate = true, global = false }) {
|
|
9763
9775
|
const paths = VibeHooks.getSettablePaths({ global });
|
|
9764
9776
|
const fileContent = await readFileContentOrNull((0, node_path.join)(outputRoot, paths.relativeDirPath, paths.relativeFilePath)) ?? smol_toml.stringify({});
|
|
@@ -10477,6 +10489,66 @@ var AugmentcodeIgnore = class AugmentcodeIgnore extends ToolIgnore {
|
|
|
10477
10489
|
}
|
|
10478
10490
|
};
|
|
10479
10491
|
//#endregion
|
|
10492
|
+
//#region src/features/claudecode-settings-gateway.ts
|
|
10493
|
+
/**
|
|
10494
|
+
* Single owner of the `.claude/settings.json` `permissions` block, which both
|
|
10495
|
+
* `ignore` (writes `Read(...)` into `permissions.deny`) and `permissions`
|
|
10496
|
+
* (writes the whole `allow`/`ask`/`deny`) read-modify-write. The entry format,
|
|
10497
|
+
* the merge, and the cross-feature ownership rule (permissions' explicit `Read`
|
|
10498
|
+
* rules win over ignore-derived `Read` denies) used to be duplicated across both
|
|
10499
|
+
* feature files; they live here once so each feature just states its intent and
|
|
10500
|
+
* never reasons about the other's existence.
|
|
10501
|
+
*/
|
|
10502
|
+
const READ_TOOL_NAME = "Read";
|
|
10503
|
+
const isReadDenyEntry = (entry) => entry.startsWith(`${READ_TOOL_NAME}(`) && entry.endsWith(")");
|
|
10504
|
+
const buildReadDenyEntry = (pattern) => `${READ_TOOL_NAME}(${pattern})`;
|
|
10505
|
+
const parsePermissionsBlock = (settings) => {
|
|
10506
|
+
const permissions = settings.permissions ?? {};
|
|
10507
|
+
return {
|
|
10508
|
+
allow: permissions.allow ?? [],
|
|
10509
|
+
ask: permissions.ask ?? [],
|
|
10510
|
+
deny: permissions.deny ?? []
|
|
10511
|
+
};
|
|
10512
|
+
};
|
|
10513
|
+
const withPermissions = (settings, next) => {
|
|
10514
|
+
const permissions = { ...settings.permissions };
|
|
10515
|
+
const assign = (key, values) => {
|
|
10516
|
+
if (values.length > 0) permissions[key] = values;
|
|
10517
|
+
else delete permissions[key];
|
|
10518
|
+
};
|
|
10519
|
+
assign("allow", next.allow);
|
|
10520
|
+
assign("ask", next.ask);
|
|
10521
|
+
assign("deny", next.deny);
|
|
10522
|
+
return {
|
|
10523
|
+
...settings,
|
|
10524
|
+
permissions
|
|
10525
|
+
};
|
|
10526
|
+
};
|
|
10527
|
+
const applyIgnoreReadDenies = (params) => {
|
|
10528
|
+
const { settings, readDenies } = params;
|
|
10529
|
+
const current = parsePermissionsBlock(settings);
|
|
10530
|
+
const preservedDeny = current.deny.filter((entry) => !isReadDenyEntry(entry) || readDenies.includes(entry));
|
|
10531
|
+
return withPermissions(settings, {
|
|
10532
|
+
allow: current.allow,
|
|
10533
|
+
ask: current.ask,
|
|
10534
|
+
deny: (0, es_toolkit.uniq)([...preservedDeny, ...readDenies].toSorted())
|
|
10535
|
+
});
|
|
10536
|
+
};
|
|
10537
|
+
const applyPermissions = (params) => {
|
|
10538
|
+
const { settings, managedToolNames, toolNameOf, allow, ask, deny, logger } = params;
|
|
10539
|
+
const current = parsePermissionsBlock(settings);
|
|
10540
|
+
const keepUnmanaged = (entries) => entries.filter((entry) => !managedToolNames.has(toolNameOf(entry)));
|
|
10541
|
+
if (logger && managedToolNames.has(READ_TOOL_NAME)) {
|
|
10542
|
+
const overwrittenReadDenies = current.deny.filter((entry) => toolNameOf(entry) === READ_TOOL_NAME);
|
|
10543
|
+
if (overwrittenReadDenies.length > 0) logger.warn(`Permissions feature manages '${READ_TOOL_NAME}' tool and will overwrite ${overwrittenReadDenies.length} existing ${READ_TOOL_NAME} deny entries. Permissions take precedence.`);
|
|
10544
|
+
}
|
|
10545
|
+
return withPermissions(settings, {
|
|
10546
|
+
allow: (0, es_toolkit.uniq)([...keepUnmanaged(current.allow), ...allow].toSorted()),
|
|
10547
|
+
ask: (0, es_toolkit.uniq)([...keepUnmanaged(current.ask), ...ask].toSorted()),
|
|
10548
|
+
deny: (0, es_toolkit.uniq)([...keepUnmanaged(current.deny), ...deny].toSorted())
|
|
10549
|
+
});
|
|
10550
|
+
};
|
|
10551
|
+
//#endregion
|
|
10480
10552
|
//#region src/features/ignore/claudecode-ignore.ts
|
|
10481
10553
|
const DEFAULT_FILE_MODE = "shared";
|
|
10482
10554
|
/**
|
|
@@ -10523,7 +10595,7 @@ var ClaudecodeIgnore = class ClaudecodeIgnore extends ToolIgnore {
|
|
|
10523
10595
|
}
|
|
10524
10596
|
toRulesyncIgnore() {
|
|
10525
10597
|
const fileContent = this.patterns.map((pattern) => {
|
|
10526
|
-
if (
|
|
10598
|
+
if (isReadDenyEntry(pattern)) return pattern.slice(5, -1);
|
|
10527
10599
|
return pattern;
|
|
10528
10600
|
}).filter((pattern) => pattern.length > 0).join("\n");
|
|
10529
10601
|
return new RulesyncIgnore({
|
|
@@ -10534,22 +10606,20 @@ var ClaudecodeIgnore = class ClaudecodeIgnore extends ToolIgnore {
|
|
|
10534
10606
|
});
|
|
10535
10607
|
}
|
|
10536
10608
|
static async fromRulesyncIgnore({ outputRoot = process.cwd(), rulesyncIgnore, options }) {
|
|
10537
|
-
const deniedValues = rulesyncIgnore.getFileContent().split(/\r?\n|\r/).map((line) => line.trim()).filter((line) => line.length > 0 && !line.startsWith("#")).map((pattern) =>
|
|
10609
|
+
const deniedValues = rulesyncIgnore.getFileContent().split(/\r?\n|\r/).map((line) => line.trim()).filter((line) => line.length > 0 && !line.startsWith("#")).map((pattern) => buildReadDenyEntry(pattern));
|
|
10538
10610
|
const paths = this.getSettablePaths({ options });
|
|
10539
10611
|
const filePath = (0, node_path.join)(outputRoot, paths.relativeDirPath, paths.relativeFilePath);
|
|
10540
10612
|
const existingFileContent = await fileExists(filePath) ? await readFileContent(filePath) : "{}";
|
|
10541
|
-
|
|
10542
|
-
|
|
10543
|
-
|
|
10544
|
-
|
|
10613
|
+
let existingJsonValue;
|
|
10614
|
+
try {
|
|
10615
|
+
existingJsonValue = JSON.parse(existingFileContent);
|
|
10616
|
+
} catch (error) {
|
|
10617
|
+
throw new Error(`Failed to parse existing Claude settings at ${filePath}: ${formatError(error)}`, { cause: error });
|
|
10618
|
+
}
|
|
10619
|
+
const jsonValue = applyIgnoreReadDenies({
|
|
10620
|
+
settings: existingJsonValue,
|
|
10621
|
+
readDenies: deniedValues
|
|
10545
10622
|
});
|
|
10546
|
-
const jsonValue = {
|
|
10547
|
-
...existingJsonValue,
|
|
10548
|
-
permissions: {
|
|
10549
|
-
...existingJsonValue.permissions,
|
|
10550
|
-
deny: (0, es_toolkit.uniq)([...preservedDenies, ...deniedValues].toSorted())
|
|
10551
|
-
}
|
|
10552
|
-
};
|
|
10553
10623
|
return new ClaudecodeIgnore({
|
|
10554
10624
|
outputRoot,
|
|
10555
10625
|
relativeDirPath: paths.relativeDirPath,
|
|
@@ -17086,31 +17156,15 @@ var ClaudecodePermissions = class ClaudecodePermissions extends ToolPermissions
|
|
|
17086
17156
|
const config = rulesyncPermissions.getJson();
|
|
17087
17157
|
const { allow, ask, deny } = convertRulesyncToClaudePermissions(config);
|
|
17088
17158
|
const managedToolNames = new Set(Object.keys(config.permission).map((category) => toClaudeToolName(category)));
|
|
17089
|
-
const
|
|
17090
|
-
|
|
17091
|
-
|
|
17092
|
-
|
|
17093
|
-
|
|
17094
|
-
|
|
17095
|
-
|
|
17096
|
-
|
|
17097
|
-
|
|
17098
|
-
if (droppedReadDenyEntries.length > 0) logger.warn(`Permissions feature manages 'Read' tool and will overwrite ${droppedReadDenyEntries.length} existing Read deny entries (possibly from ignore feature). Permissions take precedence.`);
|
|
17099
|
-
}
|
|
17100
|
-
const mergedPermissions = { ...existingPermissions };
|
|
17101
|
-
const mergedAllow = (0, es_toolkit.uniq)([...preservedAllow, ...allow].toSorted());
|
|
17102
|
-
const mergedAsk = (0, es_toolkit.uniq)([...preservedAsk, ...ask].toSorted());
|
|
17103
|
-
const mergedDeny = (0, es_toolkit.uniq)([...preservedDeny, ...deny].toSorted());
|
|
17104
|
-
if (mergedAllow.length > 0) mergedPermissions.allow = mergedAllow;
|
|
17105
|
-
else delete mergedPermissions.allow;
|
|
17106
|
-
if (mergedAsk.length > 0) mergedPermissions.ask = mergedAsk;
|
|
17107
|
-
else delete mergedPermissions.ask;
|
|
17108
|
-
if (mergedDeny.length > 0) mergedPermissions.deny = mergedDeny;
|
|
17109
|
-
else delete mergedPermissions.deny;
|
|
17110
|
-
const merged = {
|
|
17111
|
-
...settings,
|
|
17112
|
-
permissions: mergedPermissions
|
|
17113
|
-
};
|
|
17159
|
+
const merged = applyPermissions({
|
|
17160
|
+
settings,
|
|
17161
|
+
managedToolNames,
|
|
17162
|
+
toolNameOf: (entry) => parseClaudePermissionEntry(entry).toolName,
|
|
17163
|
+
allow,
|
|
17164
|
+
ask,
|
|
17165
|
+
deny,
|
|
17166
|
+
logger
|
|
17167
|
+
});
|
|
17114
17168
|
const fileContent = JSON.stringify(merged, null, 2);
|
|
17115
17169
|
return new ClaudecodePermissions({
|
|
17116
17170
|
outputRoot,
|
|
@@ -33788,6 +33842,9 @@ var KiloRule = class KiloRule extends ToolRule {
|
|
|
33788
33842
|
nonRoot: { relativeDirPath: buildToolPath(KILO_DIR, KILO_RULES_DIR_NAME, excludeToolDir) }
|
|
33789
33843
|
};
|
|
33790
33844
|
}
|
|
33845
|
+
static getExtraSharedWritePaths({ global = false } = {}) {
|
|
33846
|
+
return global ? [] : [KiloMcp.getSettablePaths({ global: false })];
|
|
33847
|
+
}
|
|
33791
33848
|
static async fromFile({ outputRoot = process.cwd(), relativeFilePath, validate = true, global = false }) {
|
|
33792
33849
|
const paths = this.getSettablePaths({ global });
|
|
33793
33850
|
if (relativeFilePath === paths.root.relativeFilePath) {
|
|
@@ -34049,6 +34106,9 @@ var OpenCodeRule = class OpenCodeRule extends ToolRule {
|
|
|
34049
34106
|
nonRoot: { relativeDirPath: buildToolPath(OPENCODE_DIR, "memories", excludeToolDir) }
|
|
34050
34107
|
};
|
|
34051
34108
|
}
|
|
34109
|
+
static getExtraSharedWritePaths({ global = false } = {}) {
|
|
34110
|
+
return global ? [] : [OpencodeMcp.getSettablePaths({ global: false })];
|
|
34111
|
+
}
|
|
34052
34112
|
static async fromFile({ outputRoot = process.cwd(), relativeFilePath, validate = true, global = false }) {
|
|
34053
34113
|
const paths = this.getSettablePaths({ global });
|
|
34054
34114
|
if (relativeFilePath === paths.root.relativeFilePath) {
|
|
@@ -34725,6 +34785,37 @@ var RovodevRule = class RovodevRule extends ToolRule {
|
|
|
34725
34785
|
toolTarget: "rovodev"
|
|
34726
34786
|
});
|
|
34727
34787
|
}
|
|
34788
|
+
/**
|
|
34789
|
+
* Mirror the primary `.rovodev/AGENTS.md` root rule to `./AGENTS.md` so project
|
|
34790
|
+
* memory stays discoverable at the repo root. Empty when `rootRule` is not the primary root.
|
|
34791
|
+
*/
|
|
34792
|
+
static getRootMirrorFiles({ outputRoot, rootRule, content }) {
|
|
34793
|
+
if (!(rootRule instanceof RovodevRule)) return [];
|
|
34794
|
+
const primary = this.getSettablePaths({ global: false }).root;
|
|
34795
|
+
if (rootRule.getRelativeDirPath() !== primary.relativeDirPath || rootRule.getRelativeFilePath() !== primary.relativeFilePath) return [];
|
|
34796
|
+
return [new RovodevRule({
|
|
34797
|
+
outputRoot,
|
|
34798
|
+
relativeDirPath: ".",
|
|
34799
|
+
relativeFilePath: ROVODEV_RULE_FILE_NAME,
|
|
34800
|
+
fileContent: content,
|
|
34801
|
+
validate: true,
|
|
34802
|
+
root: true
|
|
34803
|
+
})];
|
|
34804
|
+
}
|
|
34805
|
+
/**
|
|
34806
|
+
* Globs for mirror deletion: the `./AGENTS.md` mirror (`mirrorGlob`) is deleted
|
|
34807
|
+
* only when the primary `.rovodev/AGENTS.md` (`primaryGlob`) still exists.
|
|
34808
|
+
*/
|
|
34809
|
+
static getRootMirrorDeletionGlobs({ outputRoot }) {
|
|
34810
|
+
return {
|
|
34811
|
+
primaryGlob: (0, node_path.join)(outputRoot, ROVODEV_DIR, ROVODEV_RULE_FILE_NAME),
|
|
34812
|
+
mirrorGlob: (0, node_path.join)(outputRoot, ROVODEV_RULE_FILE_NAME)
|
|
34813
|
+
};
|
|
34814
|
+
}
|
|
34815
|
+
/** Glob for the `separate-local-file` deletion; rovodev writes it at project root, not under `.rovodev/`. */
|
|
34816
|
+
static getLocalRootDeletionGlob({ outputRoot, fileName }) {
|
|
34817
|
+
return (0, node_path.join)(outputRoot, fileName);
|
|
34818
|
+
}
|
|
34728
34819
|
};
|
|
34729
34820
|
//#endregion
|
|
34730
34821
|
//#region src/features/rules/takt-rule.ts
|
|
@@ -35447,7 +35538,7 @@ var RulesProcessor = class extends FeatureProcessor {
|
|
|
35447
35538
|
});
|
|
35448
35539
|
this.applyRootRuleSections({
|
|
35449
35540
|
toolRules,
|
|
35450
|
-
|
|
35541
|
+
factory
|
|
35451
35542
|
});
|
|
35452
35543
|
return [...toolRules, ...extraFiles];
|
|
35453
35544
|
}
|
|
@@ -35509,31 +35600,16 @@ var RulesProcessor = class extends FeatureProcessor {
|
|
|
35509
35600
|
* reference and conventions sections to the root rule content. Mutates the
|
|
35510
35601
|
* root rule in place.
|
|
35511
35602
|
*/
|
|
35512
|
-
applyRootRuleSections({ toolRules,
|
|
35603
|
+
applyRootRuleSections({ toolRules, factory }) {
|
|
35604
|
+
const { meta } = factory;
|
|
35513
35605
|
const rootRule = toolRules.find((rule) => rule.isRoot());
|
|
35514
35606
|
if (!rootRule) return;
|
|
35515
35607
|
const newContent = this.generateReferenceSectionFromMeta(meta, toolRules) + (!meta.createsSeparateConventionsRule && meta.additionalConventions ? this.generateAdditionalConventionsSectionFromMeta(meta) : "") + rootRule.getFileContent();
|
|
35516
35608
|
rootRule.setFileContent(newContent);
|
|
35517
|
-
if (meta.mirrorsRootToAgentsMd && !this.global)
|
|
35518
|
-
|
|
35609
|
+
if (meta.mirrorsRootToAgentsMd && !this.global && factory.class.getRootMirrorFiles) toolRules.push(...factory.class.getRootMirrorFiles({
|
|
35610
|
+
outputRoot: this.outputRoot,
|
|
35519
35611
|
rootRule,
|
|
35520
35612
|
content: newContent
|
|
35521
|
-
});
|
|
35522
|
-
}
|
|
35523
|
-
/**
|
|
35524
|
-
* Mirror the primary root rule to a project-root `AGENTS.md` for tools whose
|
|
35525
|
-
* primary root lives in a subdirectory (rovodev: `.rovodev/AGENTS.md`).
|
|
35526
|
-
*/
|
|
35527
|
-
mirrorRootRuleToAgentsMd({ toolRules, rootRule, content }) {
|
|
35528
|
-
if (!(rootRule instanceof RovodevRule)) return;
|
|
35529
|
-
const primary = RovodevRule.getSettablePaths({ global: false }).root;
|
|
35530
|
-
if (rootRule.getRelativeDirPath() === primary.relativeDirPath && rootRule.getRelativeFilePath() === primary.relativeFilePath) toolRules.push(new RovodevRule({
|
|
35531
|
-
outputRoot: this.outputRoot,
|
|
35532
|
-
relativeDirPath: ".",
|
|
35533
|
-
relativeFilePath: "AGENTS.md",
|
|
35534
|
-
fileContent: content,
|
|
35535
|
-
validate: true,
|
|
35536
|
-
root: true
|
|
35537
35613
|
}));
|
|
35538
35614
|
}
|
|
35539
35615
|
buildSkillList(skillClass) {
|
|
@@ -35759,15 +35835,19 @@ As this project's AI coding tool, you must follow the additional conventions bel
|
|
|
35759
35835
|
const localRootToolRules = await (async () => {
|
|
35760
35836
|
if (!forDeletion || this.global || factory.meta.localRootMode !== "separate-local-file" || !factory.meta.localRootFileName) return [];
|
|
35761
35837
|
const fileName = factory.meta.localRootFileName;
|
|
35762
|
-
if (factory.class
|
|
35838
|
+
if (factory.class.getLocalRootDeletionGlob) return buildDeletionRulesFromPaths(await findFilesByGlobs(factory.class.getLocalRootDeletionGlob({
|
|
35839
|
+
outputRoot: this.outputRoot,
|
|
35840
|
+
fileName
|
|
35841
|
+
})));
|
|
35763
35842
|
if (!settablePaths.root) return [];
|
|
35764
35843
|
return buildDeletionRulesFromPaths(await findFilesWithFallback((0, node_path.join)(this.outputRoot, settablePaths.root.relativeDirPath ?? ".", fileName), settablePaths.alternativeRoots, (alt) => (0, node_path.join)(this.outputRoot, alt.relativeDirPath, fileName)));
|
|
35765
35844
|
})();
|
|
35766
35845
|
this.logger.debug(`Found ${localRootToolRules.length} local root tool rule files for deletion`);
|
|
35767
35846
|
const rootMirrorDeletionRules = await (async () => {
|
|
35768
|
-
if (!forDeletion || this.global || !factory.meta.mirrorsRootToAgentsMd || factory.class
|
|
35769
|
-
|
|
35770
|
-
|
|
35847
|
+
if (!forDeletion || this.global || !factory.meta.mirrorsRootToAgentsMd || !factory.class.getRootMirrorDeletionGlobs) return [];
|
|
35848
|
+
const { primaryGlob, mirrorGlob } = factory.class.getRootMirrorDeletionGlobs({ outputRoot: this.outputRoot });
|
|
35849
|
+
if ((await findFilesByGlobs(primaryGlob)).length === 0) return [];
|
|
35850
|
+
return buildDeletionRulesFromPaths(await findFilesByGlobs(mirrorGlob));
|
|
35771
35851
|
})();
|
|
35772
35852
|
const nonRootToolRules = await (async () => {
|
|
35773
35853
|
if (!settablePaths.nonRoot) return [];
|
|
@@ -36281,22 +36361,29 @@ function resolveExecutionOrder(steps) {
|
|
|
36281
36361
|
const GENERATION_STEP_GRAPH = [
|
|
36282
36362
|
{
|
|
36283
36363
|
id: "ignore",
|
|
36284
|
-
writesSharedFile: ["claude
|
|
36364
|
+
writesSharedFile: [".claude/settings.json", ".zed/settings.json"]
|
|
36285
36365
|
},
|
|
36286
36366
|
{
|
|
36287
36367
|
id: "mcp",
|
|
36288
36368
|
writesSharedFile: [
|
|
36289
|
-
"
|
|
36290
|
-
"
|
|
36291
|
-
"
|
|
36292
|
-
"
|
|
36293
|
-
"
|
|
36294
|
-
"
|
|
36295
|
-
"
|
|
36296
|
-
"
|
|
36297
|
-
"
|
|
36298
|
-
"
|
|
36299
|
-
"
|
|
36369
|
+
".amp/settings.json",
|
|
36370
|
+
".augment/settings.json",
|
|
36371
|
+
".codex/config.toml",
|
|
36372
|
+
".config/amp/settings.json",
|
|
36373
|
+
".config/devin/config.json",
|
|
36374
|
+
".config/opencode/opencode.json",
|
|
36375
|
+
".config/zed/settings.json",
|
|
36376
|
+
".devin/config.json",
|
|
36377
|
+
".grok/config.toml",
|
|
36378
|
+
".hermes/config.yaml",
|
|
36379
|
+
".qwen/settings.json",
|
|
36380
|
+
".reasonix/config.toml",
|
|
36381
|
+
".takt/config.yaml",
|
|
36382
|
+
".vibe/config.toml",
|
|
36383
|
+
".zed/settings.json",
|
|
36384
|
+
"kilo.json",
|
|
36385
|
+
"opencode.json",
|
|
36386
|
+
"reasonix.toml"
|
|
36300
36387
|
],
|
|
36301
36388
|
dependsOn: ["ignore"]
|
|
36302
36389
|
},
|
|
@@ -36306,33 +36393,39 @@ const GENERATION_STEP_GRAPH = [
|
|
|
36306
36393
|
{
|
|
36307
36394
|
id: "hooks",
|
|
36308
36395
|
writesSharedFile: [
|
|
36309
|
-
"
|
|
36310
|
-
"
|
|
36311
|
-
"
|
|
36312
|
-
"
|
|
36313
|
-
"
|
|
36314
|
-
"
|
|
36315
|
-
"
|
|
36316
|
-
"
|
|
36396
|
+
".augment/settings.json",
|
|
36397
|
+
".claude/settings.json",
|
|
36398
|
+
".codex/config.toml",
|
|
36399
|
+
".config/devin/config.json",
|
|
36400
|
+
".hermes/config.yaml",
|
|
36401
|
+
".kiro/agents/default.json",
|
|
36402
|
+
".qwen/settings.json",
|
|
36403
|
+
".vibe/config.toml"
|
|
36317
36404
|
],
|
|
36318
36405
|
dependsOn: ["ignore", "mcp"]
|
|
36319
36406
|
},
|
|
36320
36407
|
{
|
|
36321
36408
|
id: "permissions",
|
|
36322
36409
|
writesSharedFile: [
|
|
36323
|
-
"
|
|
36324
|
-
"
|
|
36325
|
-
"
|
|
36326
|
-
"
|
|
36327
|
-
"
|
|
36328
|
-
"
|
|
36329
|
-
"
|
|
36330
|
-
"
|
|
36331
|
-
"
|
|
36332
|
-
"
|
|
36333
|
-
"
|
|
36334
|
-
"
|
|
36335
|
-
"
|
|
36410
|
+
".amp/settings.json",
|
|
36411
|
+
".augment/settings.json",
|
|
36412
|
+
".claude/settings.json",
|
|
36413
|
+
".codex/config.toml",
|
|
36414
|
+
".config/amp/settings.json",
|
|
36415
|
+
".config/devin/config.json",
|
|
36416
|
+
".config/opencode/opencode.json",
|
|
36417
|
+
".config/zed/settings.json",
|
|
36418
|
+
".devin/config.json",
|
|
36419
|
+
".grok/config.toml",
|
|
36420
|
+
".hermes/config.yaml",
|
|
36421
|
+
".kiro/agents/default.json",
|
|
36422
|
+
".qwen/settings.json",
|
|
36423
|
+
".reasonix/config.toml",
|
|
36424
|
+
".takt/config.yaml",
|
|
36425
|
+
".vibe/config.toml",
|
|
36426
|
+
".zed/settings.json",
|
|
36427
|
+
"opencode.json",
|
|
36428
|
+
"reasonix.toml"
|
|
36336
36429
|
],
|
|
36337
36430
|
dependsOn: [
|
|
36338
36431
|
"ignore",
|
|
@@ -36342,7 +36435,7 @@ const GENERATION_STEP_GRAPH = [
|
|
|
36342
36435
|
},
|
|
36343
36436
|
{
|
|
36344
36437
|
id: "rules",
|
|
36345
|
-
writesSharedFile: ["kilo
|
|
36438
|
+
writesSharedFile: ["kilo.json", "opencode.json"],
|
|
36346
36439
|
dependsOn: [
|
|
36347
36440
|
"mcp",
|
|
36348
36441
|
"skills",
|
package/dist/index.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_import = require("./import-
|
|
2
|
+
const require_import = require("./import-H0MKtu9x.cjs");
|
|
3
3
|
//#region src/index.ts
|
|
4
4
|
async function generate(options = {}) {
|
|
5
5
|
const { silent = true, verbose = false, ...rest } = options;
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Ut as ALL_FEATURES, Y as ConfigResolver, Z as ConsoleLogger, _t as ALL_TOOL_TARGETS, i as convertFromTool$1, n as checkRulesyncDirExists, r as generate$1, t as importFromTool$1 } from "./import-
|
|
1
|
+
import { Ut as ALL_FEATURES, Y as ConfigResolver, Z as ConsoleLogger, _t as ALL_TOOL_TARGETS, i as convertFromTool$1, n as checkRulesyncDirExists, r as generate$1, t as importFromTool$1 } from "./import-BkxwFCDM.js";
|
|
2
2
|
//#region src/index.ts
|
|
3
3
|
async function generate(options = {}) {
|
|
4
4
|
const { silent = true, verbose = false, ...rest } = options;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rulesync",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.2.0",
|
|
4
4
|
"description": "Unified AI rules management CLI tool that generates configuration files for various AI development tools",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
@@ -54,33 +54,33 @@
|
|
|
54
54
|
"@toon-format/toon": "2.3.0",
|
|
55
55
|
"@valibot/to-json-schema": "1.7.1",
|
|
56
56
|
"commander": "15.0.0",
|
|
57
|
-
"effect": "3.21.
|
|
58
|
-
"es-toolkit": "1.
|
|
59
|
-
"fastmcp": "4.3.
|
|
57
|
+
"effect": "3.21.4",
|
|
58
|
+
"es-toolkit": "1.49.0",
|
|
59
|
+
"fastmcp": "4.3.2",
|
|
60
60
|
"globby": "16.2.0",
|
|
61
61
|
"gray-matter": "4.0.3",
|
|
62
62
|
"js-yaml": "4.2.0",
|
|
63
63
|
"jsonc-parser": "3.3.1",
|
|
64
|
-
"smol-toml": "1.
|
|
64
|
+
"smol-toml": "1.7.0",
|
|
65
65
|
"sury": "10.0.4",
|
|
66
66
|
"zod": "4.4.3"
|
|
67
67
|
},
|
|
68
68
|
"devDependencies": {
|
|
69
|
-
"@anthropic-ai/claude-agent-sdk": "0.3.
|
|
70
|
-
"@openrouter/sdk": "0.13.
|
|
69
|
+
"@anthropic-ai/claude-agent-sdk": "0.3.198",
|
|
70
|
+
"@openrouter/sdk": "0.13.22",
|
|
71
71
|
"@secretlint/secretlint-rule-preset-recommend": "13.0.2",
|
|
72
72
|
"@tsconfig/node24": "24.0.4",
|
|
73
73
|
"@types/js-yaml": "4.0.9",
|
|
74
|
-
"@types/node": "
|
|
75
|
-
"@typescript/native-preview": "7.0.0-dev.
|
|
74
|
+
"@types/node": "26.1.0",
|
|
75
|
+
"@typescript/native-preview": "7.0.0-dev.20260701.1",
|
|
76
76
|
"@vitest/coverage-v8": "4.1.9",
|
|
77
77
|
"cspell": "10.0.1",
|
|
78
|
-
"knip": "6.
|
|
79
|
-
"lint-staged": "17.0.
|
|
80
|
-
"oxfmt": "0.
|
|
81
|
-
"oxlint": "1.
|
|
82
|
-
"repomix": "1.
|
|
83
|
-
"resend": "6.
|
|
78
|
+
"knip": "6.23.0",
|
|
79
|
+
"lint-staged": "17.0.8",
|
|
80
|
+
"oxfmt": "0.57.0",
|
|
81
|
+
"oxlint": "1.72.0",
|
|
82
|
+
"repomix": "1.16.0",
|
|
83
|
+
"resend": "6.16.0",
|
|
84
84
|
"secretlint": "13.0.2",
|
|
85
85
|
"simple-git": "3.36.0",
|
|
86
86
|
"simple-git-hooks": "2.13.1",
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
"tsdown": "0.22.3",
|
|
89
89
|
"tsx": "4.22.4",
|
|
90
90
|
"typescript": "6.0.3",
|
|
91
|
-
"vite": "8.
|
|
91
|
+
"vite": "8.1.2",
|
|
92
92
|
"vitepress": "1.6.4",
|
|
93
93
|
"vitest": "4.1.9"
|
|
94
94
|
},
|