rulesync 5.2.0 → 5.2.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 +106 -96
- package/dist/index.cjs +10 -9
- package/dist/index.js +10 -9
- package/package.json +10 -10
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
|
|
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
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
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,
|
|
257
|
-
"simulateCommands": false,
|
|
258
|
-
"simulateSubagents": false,
|
|
259
|
-
"simulateSkills": false,
|
|
260
|
-
"modularMcp": false
|
|
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:
|
|
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
|
-
|
|
486
|
-
|
|
487
|
-
|
|
493
|
+
```bash
|
|
494
|
+
mkdir -p ~/.aiglobal
|
|
495
|
+
```
|
|
488
496
|
2. Initialize files for global files in the directory.
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
497
|
+
```bash
|
|
498
|
+
cd ~/.aiglobal
|
|
499
|
+
npx rulesync init
|
|
500
|
+
```
|
|
493
501
|
3. Edit `~/.aiglobal/rulesync.jsonc` to enable global mode.
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
502
|
+
```jsonc
|
|
503
|
+
{
|
|
504
|
+
"global": true,
|
|
505
|
+
}
|
|
506
|
+
```
|
|
499
507
|
4. Edit `~/.aiglobal/.rulesync/rules/overview.md` to your preferences.
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
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
|
-
|
|
509
|
-
|
|
510
|
-
|
|
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
|
-
>
|
|
516
|
-
>
|
|
517
|
-
>
|
|
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
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
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
|
-
|
|
535
|
-
```txt
|
|
536
|
-
# Execute simulated commands. By the way, `s/` stands for `simulate/`.
|
|
537
|
-
s/your-command
|
|
547
|
+
- Prompt examples:
|
|
538
548
|
|
|
539
|
-
|
|
540
|
-
|
|
549
|
+
```txt
|
|
550
|
+
# Execute simulated commands. By the way, `s/` stands for `simulate/`.
|
|
551
|
+
s/your-command
|
|
541
552
|
|
|
542
|
-
|
|
543
|
-
|
|
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
|
-
|
|
|
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(
|
|
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.
|
|
13184
|
+
var getVersion = () => "5.2.1";
|
|
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(
|
|
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.
|
|
13161
|
+
var getVersion = () => "5.2.1";
|
|
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.
|
|
3
|
+
"version": "5.2.1",
|
|
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
|
-
"
|
|
10
|
+
"copilot",
|
|
11
|
+
"cursor",
|
|
12
|
+
"development",
|
|
13
|
+
"rules"
|
|
14
14
|
],
|
|
15
15
|
"homepage": "https://github.com/dyoshikawa/rulesync#readme",
|
|
16
16
|
"bugs": {
|
|
@@ -53,7 +53,6 @@
|
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
55
|
"@anthropic-ai/claude-agent-sdk": "0.1.76",
|
|
56
|
-
"@biomejs/biome": "2.3.11",
|
|
57
56
|
"@eslint/js": "9.39.2",
|
|
58
57
|
"@secretlint/secretlint-rule-preset-recommend": "11.2.5",
|
|
59
58
|
"@tsconfig/node24": "24.0.3",
|
|
@@ -70,6 +69,7 @@
|
|
|
70
69
|
"eslint-plugin-zod-import": "0.3.0",
|
|
71
70
|
"knip": "5.79.0",
|
|
72
71
|
"lint-staged": "16.2.7",
|
|
72
|
+
"oxfmt": "0.23.0",
|
|
73
73
|
"oxlint": "1.36.0",
|
|
74
74
|
"secretlint": "11.2.5",
|
|
75
75
|
"simple-git-hooks": "2.13.1",
|
|
@@ -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
|
|
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
|
|
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",
|