rulesync 5.2.0 → 5.2.2

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 CHANGED
@@ -98,6 +98,7 @@ Get-FileHash rulesync.exe -Algorithm SHA256 | ForEach-Object {
98
98
  if ($actual -eq $expected) { "✓ Checksum verified" } else { "✗ Checksum mismatch" }
99
99
  }
100
100
  ```
101
+
101
102
  </details>
102
103
 
103
104
  ## Getting Started
@@ -126,53 +127,60 @@ npx rulesync generate --targets "*" --features "*"
126
127
 
127
128
  Rulesync supports both **generation** and **import** for All of the major AI coding tools:
128
129
 
129
- | Tool | rules | ignore | mcp | commands | subagents | skills |
130
- |------------------------|:-----:|:------:|:-----:|:--------:|:---------:|:------:|
131
- | AGENTS.md | ✅ | | | 🎮 | 🎮 | 🎮 |
132
- | Claude Code | ✅ 🌏 | ✅ | ✅ 🌏 📦 | ✅ 🌏 | ✅ 🌏 | ✅ 🌏 |
133
- | Codex CLI | ✅ 🌏 | | 🌏 | 🌏 | 🎮 | 🌏 |
134
- | Gemini CLI | ✅ 🌏 | ✅ | ✅ 🌏 | ✅ 🌏 | 🎮 | 🎮 |
135
- | GitHub Copilot | ✅ | | ✅ | | ✅ | ✅ |
136
- | Cursor | ✅ | ✅ | | ✅ 🌏 | 🎮 | ✅ |
137
- | OpenCode | ✅ | | | ✅ 🌏 | ✅ 🌏 | ✅ 🌏 |
138
- | Cline | ✅ | ✅ | ✅ | ✅ 🌏 | | |
139
- | Kilo Code | ✅ 🌏 | ✅ | | ✅ 🌏 | | |
140
- | Roo Code | ✅ | ✅ | ✅ | | 🎮 | ✅ 🌏 |
141
- | Qwen Code | ✅ | ✅ | | | | |
142
- | Kiro IDE | ✅ | ✅ | | | | |
143
- | Google Antigravity | ✅ | | | ✅ | | |
144
- | JetBrains Junie | ✅ | ✅ | | | | |
145
- | AugmentCode | ✅ | ✅ | | | | |
146
- | Windsurf | ✅ | ✅ | | | | |
147
- | Warp | ✅ | | | | | |
148
- | Zed | | ✅ | | | | |
149
-
150
- * ✅: Supports project mode
151
- * 🌏: Supports global mode
152
- * 🎮: Supports simulated commands/subagents/skills (Project mode only)
153
- * 📦: Supports modular MCP (Experimental)
130
+ | Tool | rules | ignore | mcp | commands | subagents | skills |
131
+ | ------------------ | :---: | :----: | :------: | :------: | :-------: | :----: |
132
+ | AGENTS.md | ✅ | | | 🎮 | 🎮 | 🎮 |
133
+ | Claude Code | ✅ 🌏 | ✅ | ✅ 🌏 📦 | ✅ 🌏 | ✅ 🌏 | ✅ 🌏 |
134
+ | Codex CLI | ✅ 🌏 | | 🌏 | 🌏 | 🎮 | 🌏 |
135
+ | Gemini CLI | ✅ 🌏 | ✅ | ✅ 🌏 | ✅ 🌏 | 🎮 | 🎮 |
136
+ | GitHub Copilot | ✅ | | ✅ | | ✅ | ✅ |
137
+ | Cursor | ✅ | ✅ | | ✅ 🌏 | 🎮 | ✅ |
138
+ | OpenCode | ✅ | | | ✅ 🌏 | ✅ 🌏 | ✅ 🌏 |
139
+ | Cline | ✅ | ✅ | ✅ | ✅ 🌏 | | |
140
+ | Kilo Code | ✅ 🌏 | ✅ | | ✅ 🌏 | | |
141
+ | Roo Code | ✅ | ✅ | ✅ | | 🎮 | ✅ 🌏 |
142
+ | Qwen Code | ✅ | ✅ | | | | |
143
+ | Kiro IDE | ✅ | ✅ | | | | |
144
+ | Google Antigravity | ✅ | | | ✅ | | |
145
+ | JetBrains Junie | ✅ | ✅ | | | | |
146
+ | AugmentCode | ✅ | ✅ | | | | |
147
+ | Windsurf | ✅ | ✅ | | | | |
148
+ | Warp | ✅ | | | | | |
149
+ | Zed | | ✅ | | | | |
150
+
151
+ - ✅: Supports project mode
152
+ - 🌏: Supports global mode
153
+ - 🎮: Supports simulated commands/subagents/skills (Project mode only)
154
+ - 📦: Supports modular MCP (Experimental)
154
155
 
155
156
  ## Why Rulesync?
156
157
 
157
158
  ### 🔧 **Tool Flexibility**
159
+
158
160
  Team members can freely choose their preferred AI coding tools. Whether it's GitHub Copilot, Cursor, Cline, or Claude Code, each developer can use the tool that maximizes their productivity.
159
161
 
160
162
  ### 📈 **Future-Proof Development**
163
+
161
164
  AI development tools evolve rapidly with new tools emerging frequently. With Rulesync, switching between tools doesn't require redefining your rules from scratch.
162
165
 
163
166
  ### 🎯 **Multi-Tool Workflow**
167
+
164
168
  Enable hybrid development workflows combining multiple AI tools.
165
169
 
166
170
  ### 🔓 **No Lock-in**
171
+
167
172
  Avoid lock-in completely. If you decide to stop using Rulesync, you can continue using the generated rule files as-is.
168
173
 
169
174
  ### 🎯 **Consistency Across Tools**
175
+
170
176
  Apply consistent rules across all AI tools, improving code quality and development experience for the entire team.
171
177
 
172
178
  ### 🌏 **Global Mode**
179
+
173
180
  You can use global mode via Rulesync by enabling `--global` option.
174
181
 
175
182
  ### 🎮 **Simulate Commands and Subagents**
183
+
176
184
  Simulated commands and subagents allow you to generate simulated commands and subagents for cursor and codexcli. This is useful for shortening your prompts.
177
185
 
178
186
  ## Case Studies
@@ -222,7 +230,7 @@ Rulesync provides a JSON Schema for editor validation and autocompletion. Add th
222
230
  {
223
231
  "$schema": "https://raw.githubusercontent.com/dyoshikawa/rulesync/refs/heads/main/config-schema.json",
224
232
  "targets": ["claudecode"],
225
- "features": ["rules"]
233
+ "features": ["rules"],
226
234
  }
227
235
  ```
228
236
 
@@ -240,7 +248,7 @@ Example:
240
248
 
241
249
  // Features to generate. You can specify "*" to generate all features.
242
250
  "features": ["rules", "ignore", "mcp", "commands", "subagents"],
243
-
251
+
244
252
  // Base directories for generation.
245
253
  // Basically, you can specify a `["."]` only.
246
254
  // However, for example, if your project is a monorepo and you have to launch the AI agent at each package directory, you can specify multiple base directories.
@@ -253,11 +261,11 @@ Example:
253
261
  "verbose": false,
254
262
 
255
263
  // Advanced options
256
- "global": false, // Generate for global(user scope) configuration files
257
- "simulateCommands": false, // Generate simulated commands
258
- "simulateSubagents": false, // Generate simulated subagents
259
- "simulateSkills": false, // Generate simulated skills
260
- "modularMcp": false // Enable modular-mcp for context compression (experimental, Claude Code only)
264
+ "global": false, // Generate for global(user scope) configuration files
265
+ "simulateCommands": false, // Generate simulated commands
266
+ "simulateSubagents": false, // Generate simulated subagents
267
+ "simulateSkills": false, // Generate simulated skills
268
+ "modularMcp": false, // Enable modular-mcp for context compression (experimental, Claude Code only)
261
269
  }
262
270
  ```
263
271
 
@@ -271,11 +279,12 @@ For example, both `agentsmd` and `opencode` generate `AGENTS.md`:
271
279
  {
272
280
  // opencode wins because it comes last
273
281
  "targets": ["agentsmd", "opencode"],
274
- "features": ["rules"]
282
+ "features": ["rules"],
275
283
  }
276
284
  ```
277
285
 
278
286
  In this case:
287
+
279
288
  1. `agentsmd` generates `AGENTS.md` first
280
289
  2. `opencode` generates `AGENTS.md` second, overwriting the previous file
281
290
 
@@ -285,7 +294,7 @@ If you want `agentsmd`'s output instead, reverse the order:
285
294
  {
286
295
  // agentsmd wins because it comes last
287
296
  "targets": ["opencode", "agentsmd"],
288
- "features": ["rules"]
297
+ "features": ["rules"],
289
298
  }
290
299
  ```
291
300
 
@@ -330,7 +339,7 @@ Example:
330
339
 
331
340
  ```md
332
341
  ---
333
- description: 'Review a pull request' # command description
342
+ description: "Review a pull request" # command description
334
343
  targets: ["*"] # * = all, or specific tools
335
344
  copilot: # copilot specific parameters (optional)
336
345
  description: "Review a pull request"
@@ -405,6 +414,7 @@ This is the skill body content.
405
414
  You can provide instructions, context, or any information that helps the AI agent understand and execute this skill effectively.
406
415
 
407
416
  The skill can include:
417
+
408
418
  - Step-by-step instructions
409
419
  - Code examples
410
420
  - Best practices
@@ -442,10 +452,7 @@ Example:
442
452
  "description": "Library documentation search server",
443
453
  "type": "stdio",
444
454
  "command": "npx",
445
- "args": [
446
- "-y",
447
- "@upstash/context7-mcp"
448
- ],
455
+ "args": ["-y", "@upstash/context7-mcp"],
449
456
  "env": {}
450
457
  }
451
458
  }
@@ -466,6 +473,7 @@ Rules and behavior:
466
473
  - If neither file exists yet, Rulesync defaults to creating `.rulesync/.aiignore`.
467
474
 
468
475
  Notes:
476
+
469
477
  - Running `rulesync init` will create `.rulesync/.aiignore` if no ignore file is present.
470
478
 
471
479
  Example:
@@ -482,39 +490,44 @@ You can use global mode via Rulesync by enabling `--global` option. It can also
482
490
  Currently, supports rules and commands generation for Claude Code. Import for global files is supported for rules and commands.
483
491
 
484
492
  1. Create an any name directory. For example, if you prefer `~/.aiglobal`, run the following command.
485
- ```bash
486
- mkdir -p ~/.aiglobal
487
- ```
493
+ ```bash
494
+ mkdir -p ~/.aiglobal
495
+ ```
488
496
  2. Initialize files for global files in the directory.
489
- ```bash
490
- cd ~/.aiglobal
491
- npx rulesync init
492
- ```
497
+ ```bash
498
+ cd ~/.aiglobal
499
+ npx rulesync init
500
+ ```
493
501
  3. Edit `~/.aiglobal/rulesync.jsonc` to enable global mode.
494
- ```jsonc
495
- {
496
- "global": true
497
- }
498
- ```
502
+ ```jsonc
503
+ {
504
+ "global": true,
505
+ }
506
+ ```
499
507
  4. Edit `~/.aiglobal/.rulesync/rules/overview.md` to your preferences.
500
- ```md
501
- ---
502
- root: true
503
- ---
504
- # The Project Overview
505
- ...
506
- ```
508
+
509
+ ```md
510
+ ---
511
+ root: true
512
+ ---
513
+
514
+ # The Project Overview
515
+
516
+ ...
517
+ ```
518
+
507
519
  5. Generate rules for global settings.
508
- ```bash
509
- # Run in the `~/.aiglobal` directory
510
- npx rulesync generate
511
- ```
520
+ ```bash
521
+ # Run in the `~/.aiglobal` directory
522
+ npx rulesync generate
523
+ ```
512
524
 
513
525
  > [!NOTE]
514
526
  > Currently, when in the directory enabled global mode:
515
- > * `rulesync.jsonc` only supports `global`, `features`, `delete` and `verbose`. `Features` can be set `"rules"` and `"commands"`. Other parameters are ignored.
516
- > * `rules/*.md` only supports single file has `root: true`, and frontmatter parameters without `root` are ignored.
517
- > * Only Claude Code is supported for global mode commands.
527
+ >
528
+ > - `rulesync.jsonc` only supports `global`, `features`, `delete` and `verbose`. `Features` can be set `"rules"` and `"commands"`. Other parameters are ignored.
529
+ > - `rules/*.md` only supports single file has `root: true`, and frontmatter parameters without `root` are ignored.
530
+ > - Only Claude Code is supported for global mode commands.
518
531
 
519
532
  ## Simulate Commands, Subagents and Skills
520
533
 
@@ -522,26 +535,27 @@ Simulated commands, subagents and skills allow you to generate simulated feature
522
535
 
523
536
  1. Prepare `.rulesync/commands/*.md`, `.rulesync/subagents/*.md` and `.rulesync/skills/*/SKILL.md` for your purposes.
524
537
  2. Generate simulated commands, subagents and skills for specific tools that are included in cursor, codexcli and etc.
525
- ```bash
526
- npx rulesync generate \
527
- --targets copilot,cursor,codexcli \
528
- --features commands,subagents,skills \
529
- --simulate-commands \
530
- --simulate-subagents \
531
- --simulate-skills
532
- ```
538
+ ```bash
539
+ npx rulesync generate \
540
+ --targets copilot,cursor,codexcli \
541
+ --features commands,subagents,skills \
542
+ --simulate-commands \
543
+ --simulate-subagents \
544
+ --simulate-skills
545
+ ```
533
546
  3. Use simulated commands, subagents and skills in your prompts.
534
- - Prompt examples:
535
- ```txt
536
- # Execute simulated commands. By the way, `s/` stands for `simulate/`.
537
- s/your-command
547
+ - Prompt examples:
538
548
 
539
- # Execute simulated subagents
540
- Call your-subagent to achieve something.
549
+ ```txt
550
+ # Execute simulated commands. By the way, `s/` stands for `simulate/`.
551
+ s/your-command
541
552
 
542
- # Use simulated skills
543
- Use the skill your-skill to achieve something.
544
- ```
553
+ # Execute simulated subagents
554
+ Call your-subagent to achieve something.
555
+
556
+ # Use simulated skills
557
+ Use the skill your-skill to achieve something.
558
+ ```
545
559
 
546
560
  ## Modular MCP (Experimental)
547
561
 
@@ -631,19 +645,14 @@ When using following mcp servers:
631
645
  "description": "Up-to-date documentation and code examples for libraries",
632
646
  "type": "stdio",
633
647
  "command": "npx",
634
- "args": [
635
- "-y",
636
- "@upstash/context7-mcp"
637
- ],
648
+ "args": ["-y", "@upstash/context7-mcp"],
638
649
  "env": {}
639
650
  },
640
651
  "fetch": {
641
652
  "description": "This server enables LLMs to retrieve and process content from web pages, converting HTML to markdown for easier consumption.",
642
653
  "type": "stdio",
643
654
  "command": "uvx",
644
- "args": [
645
- "mcp-server-fetch"
646
- ],
655
+ "args": ["mcp-server-fetch"],
647
656
  "env": {}
648
657
  }
649
658
  }
@@ -655,7 +664,7 @@ Once run `rulesync generate --targets claudecode --features mcp`, `/context` res
655
664
  ```
656
665
  Context Usage
657
666
  ⛁ ⛁ ⛁ ⛁ ⛁ ⛁ ⛁ ⛁ ⛁ ⛁ claude-sonnet-4-5-20250929 · 82k/200k tokens (41%)
658
- ⛁ ⛁ ⛁ ⛁ ⛁ ⛁ ⛁ ⛁ ⛀ ⛀
667
+ ⛁ ⛁ ⛁ ⛁ ⛁ ⛁ ⛁ ⛁ ⛀ ⛀
659
668
  ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛁ System prompt: 2.5k tokens (1.3%)
660
669
  ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛁ System tools: 13.9k tokens (6.9%)
661
670
  ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛁ MCP tools: 15.7k tokens (7.9%)
@@ -668,10 +677,10 @@ Once run `rulesync generate --targets claudecode --features mcp`, `/context` res
668
677
 
669
678
  On the other hand, once run `rulesync generate --targets claudecode --features mcp --modular-mcp`, `/context` result on Claude Code is as follows:
670
679
 
671
- ```
680
+ ```
672
681
  Context Usage
673
682
  ⛁ ⛁ ⛁ ⛁ ⛁ ⛁ ⛁ ⛁ ⛀ ⛁ claude-sonnet-4-5-20250929 · 68k/200k tokens (34%)
674
- ⛁ ⛀ ⛀ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶
683
+ ⛁ ⛀ ⛀ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶
675
684
  ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛁ System prompt: 2.5k tokens (1.3%)
676
685
  ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛁ System tools: 13.5k tokens (6.8%)
677
686
  ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛁ MCP tools: 1.3k tokens (0.6%)
@@ -684,12 +693,13 @@ On the other hand, once run `rulesync generate --targets claudecode --features m
684
693
 
685
694
  Focus on the difference of MCP tools usage.
686
695
 
687
- | | Context Usage|
688
- |---|---|
689
- |Disabled Modular MCP| 15.7k tokens (7.9%) |
690
- |Enabled Modular MCP| 1.3k tokens (0.6%) |
696
+ | | Context Usage |
697
+ | -------------------- | ------------------- |
698
+ | Disabled Modular MCP | 15.7k tokens (7.9%) |
699
+ | Enabled Modular MCP | 1.3k tokens (0.6%) |
691
700
 
692
701
  So, in this case, approximately 92% reduction in MCP tools consumption!
702
+
693
703
  </details>
694
704
 
695
705
  ## Rulesync MCP Server
package/dist/index.cjs CHANGED
@@ -105,15 +105,15 @@ var logger = new Logger();
105
105
  var import_es_toolkit4 = require("es-toolkit");
106
106
 
107
107
  // src/config/config-resolver.ts
108
- var import_node_path2 = require("path");
109
108
  var import_jsonc_parser = require("jsonc-parser");
109
+ var import_node_path2 = require("path");
110
110
 
111
111
  // src/utils/file.ts
112
+ var import_es_toolkit = require("es-toolkit");
112
113
  var import_node_fs = require("fs");
113
114
  var import_promises = require("fs/promises");
114
115
  var import_node_os = __toESM(require("os"), 1);
115
116
  var import_node_path = require("path");
116
- var import_es_toolkit = require("es-toolkit");
117
117
  async function ensureDir(dirPath) {
118
118
  try {
119
119
  await (0, import_promises.stat)(dirPath);
@@ -2613,8 +2613,8 @@ var AugmentcodeIgnore = class _AugmentcodeIgnore extends ToolIgnore {
2613
2613
  };
2614
2614
 
2615
2615
  // src/features/ignore/claudecode-ignore.ts
2616
- var import_node_path21 = require("path");
2617
2616
  var import_es_toolkit2 = require("es-toolkit");
2617
+ var import_node_path21 = require("path");
2618
2618
  var ClaudecodeIgnore = class _ClaudecodeIgnore extends ToolIgnore {
2619
2619
  constructor(params) {
2620
2620
  super(params);
@@ -3261,8 +3261,8 @@ var WindsurfIgnore = class _WindsurfIgnore extends ToolIgnore {
3261
3261
  };
3262
3262
 
3263
3263
  // src/features/ignore/zed-ignore.ts
3264
- var import_node_path31 = require("path");
3265
3264
  var import_es_toolkit3 = require("es-toolkit");
3265
+ var import_node_path31 = require("path");
3266
3266
  var ZedIgnore = class _ZedIgnore extends ToolIgnore {
3267
3267
  constructor(params) {
3268
3268
  super(params);
@@ -3635,8 +3635,8 @@ var ModularMcp = class _ModularMcp extends AiFile {
3635
3635
  };
3636
3636
 
3637
3637
  // src/features/mcp/rulesync-mcp.ts
3638
- var import_node_path33 = require("path");
3639
3638
  var import_object = require("es-toolkit/object");
3639
+ var import_node_path33 = require("path");
3640
3640
  var import_mini16 = require("zod/mini");
3641
3641
  var RulesyncMcpServerSchema = import_mini16.z.union([
3642
3642
  import_mini16.z.extend(McpServerSchema, {
@@ -5029,8 +5029,8 @@ var McpProcessor = class extends FeatureProcessor {
5029
5029
  };
5030
5030
 
5031
5031
  // src/features/rules/rules-processor.ts
5032
- var import_node_path91 = require("path");
5033
5032
  var import_toon = require("@toon-format/toon");
5033
+ var import_node_path91 = require("path");
5034
5034
  var import_mini41 = require("zod/mini");
5035
5035
 
5036
5036
  // src/constants/general.ts
@@ -8246,7 +8246,9 @@ var RulesyncRule = class _RulesyncRule extends RulesyncFile {
8246
8246
  this.getSettablePaths().recommended.relativeDirPath,
8247
8247
  relativeFilePath
8248
8248
  );
8249
- logger.warn(`\u26A0\uFE0F Using deprecated path "${legacyPath}". Please migrate to "${recommendedPath}"`);
8249
+ logger.warn(
8250
+ `\u26A0\uFE0F Using deprecated path "${legacyPath}". Please migrate to "${recommendedPath}"`
8251
+ );
8250
8252
  const fileContent = await readFileContent(legacyPath);
8251
8253
  const { frontmatter, body: content } = parseFrontmatter(fileContent);
8252
8254
  const result = RulesyncRuleFrontmatterSchema.safeParse(frontmatter);
@@ -11496,7 +11498,6 @@ var RULESYNC_IGNORE_ENTRIES = [
11496
11498
  "**/.opencode/command/",
11497
11499
  "**/.opencode/agent/",
11498
11500
  "**/.opencode/skill/",
11499
- "**/opencode.json",
11500
11501
  // Qwen
11501
11502
  "**/QWEN.md",
11502
11503
  "**/.qwen/memories/",
@@ -13180,7 +13181,7 @@ async function mcpCommand({ version }) {
13180
13181
  }
13181
13182
 
13182
13183
  // src/cli/index.ts
13183
- var getVersion = () => "5.2.0";
13184
+ var getVersion = () => "5.2.2";
13184
13185
  var main = async () => {
13185
13186
  const program = new import_commander.Command();
13186
13187
  const version = getVersion();
package/dist/index.js CHANGED
@@ -82,15 +82,15 @@ var logger = new Logger();
82
82
  import { intersection } from "es-toolkit";
83
83
 
84
84
  // src/config/config-resolver.ts
85
- import { resolve as resolve2 } from "path";
86
85
  import { parse as parseJsonc } from "jsonc-parser";
86
+ import { resolve as resolve2 } from "path";
87
87
 
88
88
  // src/utils/file.ts
89
+ import { kebabCase } from "es-toolkit";
89
90
  import { globSync } from "fs";
90
91
  import { mkdir, readdir, readFile, rm, stat, writeFile } from "fs/promises";
91
92
  import os from "os";
92
93
  import { dirname, join, relative, resolve } from "path";
93
- import { kebabCase } from "es-toolkit";
94
94
  async function ensureDir(dirPath) {
95
95
  try {
96
96
  await stat(dirPath);
@@ -2590,8 +2590,8 @@ var AugmentcodeIgnore = class _AugmentcodeIgnore extends ToolIgnore {
2590
2590
  };
2591
2591
 
2592
2592
  // src/features/ignore/claudecode-ignore.ts
2593
- import { join as join19 } from "path";
2594
2593
  import { uniq } from "es-toolkit";
2594
+ import { join as join19 } from "path";
2595
2595
  var ClaudecodeIgnore = class _ClaudecodeIgnore extends ToolIgnore {
2596
2596
  constructor(params) {
2597
2597
  super(params);
@@ -3238,8 +3238,8 @@ var WindsurfIgnore = class _WindsurfIgnore extends ToolIgnore {
3238
3238
  };
3239
3239
 
3240
3240
  // src/features/ignore/zed-ignore.ts
3241
- import { join as join29 } from "path";
3242
3241
  import { uniq as uniq2 } from "es-toolkit";
3242
+ import { join as join29 } from "path";
3243
3243
  var ZedIgnore = class _ZedIgnore extends ToolIgnore {
3244
3244
  constructor(params) {
3245
3245
  super(params);
@@ -3612,8 +3612,8 @@ var ModularMcp = class _ModularMcp extends AiFile {
3612
3612
  };
3613
3613
 
3614
3614
  // src/features/mcp/rulesync-mcp.ts
3615
- import { join as join31 } from "path";
3616
3615
  import { omit } from "es-toolkit/object";
3616
+ import { join as join31 } from "path";
3617
3617
  import { z as z16 } from "zod/mini";
3618
3618
  var RulesyncMcpServerSchema = z16.union([
3619
3619
  z16.extend(McpServerSchema, {
@@ -5006,8 +5006,8 @@ var McpProcessor = class extends FeatureProcessor {
5006
5006
  };
5007
5007
 
5008
5008
  // src/features/rules/rules-processor.ts
5009
- import { basename as basename23, join as join89 } from "path";
5010
5009
  import { encode } from "@toon-format/toon";
5010
+ import { basename as basename23, join as join89 } from "path";
5011
5011
  import { z as z41 } from "zod/mini";
5012
5012
 
5013
5013
  // src/constants/general.ts
@@ -8223,7 +8223,9 @@ var RulesyncRule = class _RulesyncRule extends RulesyncFile {
8223
8223
  this.getSettablePaths().recommended.relativeDirPath,
8224
8224
  relativeFilePath
8225
8225
  );
8226
- logger.warn(`\u26A0\uFE0F Using deprecated path "${legacyPath}". Please migrate to "${recommendedPath}"`);
8226
+ logger.warn(
8227
+ `\u26A0\uFE0F Using deprecated path "${legacyPath}". Please migrate to "${recommendedPath}"`
8228
+ );
8227
8229
  const fileContent = await readFileContent(legacyPath);
8228
8230
  const { frontmatter, body: content } = parseFrontmatter(fileContent);
8229
8231
  const result = RulesyncRuleFrontmatterSchema.safeParse(frontmatter);
@@ -11473,7 +11475,6 @@ var RULESYNC_IGNORE_ENTRIES = [
11473
11475
  "**/.opencode/command/",
11474
11476
  "**/.opencode/agent/",
11475
11477
  "**/.opencode/skill/",
11476
- "**/opencode.json",
11477
11478
  // Qwen
11478
11479
  "**/QWEN.md",
11479
11480
  "**/.qwen/memories/",
@@ -13157,7 +13158,7 @@ async function mcpCommand({ version }) {
13157
13158
  }
13158
13159
 
13159
13160
  // src/cli/index.ts
13160
- var getVersion = () => "5.2.0";
13161
+ var getVersion = () => "5.2.2";
13161
13162
  var main = async () => {
13162
13163
  const program = new Command();
13163
13164
  const version = getVersion();
package/package.json CHANGED
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "rulesync",
3
- "version": "5.2.0",
3
+ "version": "5.2.2",
4
4
  "description": "Unified AI rules management CLI tool that generates configuration files for various AI development tools",
5
5
  "keywords": [
6
6
  "ai",
7
- "rules",
8
7
  "cli",
9
- "copilot",
10
- "cursor",
11
8
  "cline",
12
9
  "configuration",
13
- "development"
10
+ "copilot",
11
+ "cursor",
12
+ "development",
13
+ "rules"
14
14
  ],
15
15
  "homepage": "https://github.com/dyoshikawa/rulesync#readme",
16
16
  "bugs": {
@@ -36,48 +36,48 @@
36
36
  "pre-commit": "pnpm exec lint-staged"
37
37
  },
38
38
  "dependencies": {
39
- "@modelcontextprotocol/sdk": "1.25.1",
39
+ "@modelcontextprotocol/sdk": "1.25.2",
40
40
  "@toon-format/toon": "2.1.0",
41
41
  "@valibot/to-json-schema": "1.5.0",
42
42
  "commander": "14.0.2",
43
43
  "consola": "3.4.2",
44
44
  "effect": "3.19.14",
45
45
  "es-toolkit": "1.43.0",
46
- "fastmcp": "3.26.7",
46
+ "fastmcp": "3.26.8",
47
47
  "gray-matter": "4.0.3",
48
48
  "js-yaml": "4.1.1",
49
49
  "jsonc-parser": "3.3.1",
50
50
  "smol-toml": "1.6.0",
51
51
  "sury": "11.0.0-alpha.4",
52
- "zod": "4.3.4"
52
+ "zod": "4.3.5"
53
53
  },
54
54
  "devDependencies": {
55
- "@anthropic-ai/claude-agent-sdk": "0.1.76",
56
- "@biomejs/biome": "2.3.11",
55
+ "@anthropic-ai/claude-agent-sdk": "0.2.4",
57
56
  "@eslint/js": "9.39.2",
58
57
  "@secretlint/secretlint-rule-preset-recommend": "11.2.5",
59
58
  "@tsconfig/node24": "24.0.3",
60
59
  "@types/js-yaml": "4.0.9",
61
- "@types/node": "25.0.3",
62
- "@typescript/native-preview": "7.0.0-dev.20260103.1",
60
+ "@types/node": "25.0.6",
61
+ "@typescript/native-preview": "7.0.0-dev.20260109.1",
63
62
  "@vitest/coverage-v8": "4.0.16",
64
63
  "cspell": "9.4.0",
65
64
  "eslint": "9.39.2",
66
65
  "eslint-plugin-import": "2.32.0",
67
66
  "eslint-plugin-no-type-assertion": "1.3.0",
68
- "eslint-plugin-oxlint": "1.36.0",
67
+ "eslint-plugin-oxlint": "1.38.0",
69
68
  "eslint-plugin-strict-dependencies": "1.3.29",
70
69
  "eslint-plugin-zod-import": "0.3.0",
71
- "knip": "5.79.0",
70
+ "knip": "5.80.2",
72
71
  "lint-staged": "16.2.7",
73
- "oxlint": "1.36.0",
72
+ "oxfmt": "0.23.0",
73
+ "oxlint": "1.38.0",
74
74
  "secretlint": "11.2.5",
75
75
  "simple-git-hooks": "2.13.1",
76
76
  "sort-package-json": "3.6.0",
77
77
  "tsup": "8.5.1",
78
78
  "tsx": "4.21.0",
79
79
  "typescript": "5.9.3",
80
- "typescript-eslint": "8.51.0",
80
+ "typescript-eslint": "8.52.0",
81
81
  "vitest": "4.0.16"
82
82
  },
83
83
  "engines": {
@@ -87,10 +87,8 @@
87
87
  "access": "public"
88
88
  },
89
89
  "scripts": {
90
- "bcheck": "biome check .",
91
- "bcheck:fix": "biome check --write .",
92
90
  "build": "tsup src/cli/index.ts --format cjs,esm --dts --clean",
93
- "check": "pnpm run bcheck && pnpm run oxlint && pnpm run eslint && pnpm run typecheck",
91
+ "check": "pnpm run fmt:check && pnpm run oxlint && pnpm run eslint && pnpm run typecheck",
94
92
  "cicheck": "pnpm run cicheck:code && pnpm run cicheck:content",
95
93
  "cicheck:code": "pnpm run check && pnpm run test",
96
94
  "cicheck:content": "pnpm run cspell && pnpm run secretlint",
@@ -98,7 +96,9 @@
98
96
  "dev": "tsx src/cli/index.ts",
99
97
  "eslint": "eslint . --max-warnings 0 --cache",
100
98
  "eslint:fix": "eslint . --fix --max-warnings 0 --cache",
101
- "fix": "pnpm run bcheck:fix && pnpm run oxlint:fix && pnpm run eslint:fix",
99
+ "fix": "pnpm run fmt && pnpm run oxlint:fix && pnpm run eslint:fix",
100
+ "fmt": "oxfmt .",
101
+ "fmt:check": "oxfmt --check .",
102
102
  "generate": "pnpm run dev generate",
103
103
  "generate:schema": "tsx scripts/generate-json-schema.ts",
104
104
  "knip": "knip",