rulesync 3.14.0 → 3.16.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.
Files changed (4) hide show
  1. package/README.md +74 -7
  2. package/dist/index.cjs +123 -131
  3. package/dist/index.js +304 -312
  4. package/package.json +15 -13
package/README.md CHANGED
@@ -15,15 +15,11 @@ A Node.js CLI tool that automatically generates configuration files for various
15
15
 
16
16
  ## Installation
17
17
 
18
+ ### Package Managers
19
+
18
20
  ```bash
19
21
  npm install -g rulesync
20
22
  # or
21
- pnpm add -g rulesync
22
- # or
23
- yarn global add rulesync
24
- # or
25
- bun add -g rulesync
26
- # or
27
23
  brew install rulesync
28
24
 
29
25
  # And then
@@ -31,6 +27,61 @@ rulesync --version
31
27
  rulesync --help
32
28
  ```
33
29
 
30
+ ### Single Binary (Experimental)
31
+
32
+ Download pre-built binaries from the [latest release](https://github.com/dyoshikawa/rulesync/releases/latest).
33
+
34
+ <details>
35
+ <summary>Commands to install a binary for your platform</summary>
36
+
37
+ #### Linux (x64)
38
+
39
+ ```bash
40
+ curl -L https://github.com/dyoshikawa/rulesync/releases/latest/download/rulesync-linux-x64 -o rulesync
41
+ chmod +x rulesync
42
+ # Place the binary wherever set PATH
43
+ sudo mv rulesync /usr/local/bin/
44
+ ```
45
+
46
+ #### Linux (ARM64)
47
+
48
+ ```bash
49
+ curl -L https://github.com/dyoshikawa/rulesync/releases/latest/download/rulesync-linux-arm64 -o rulesync
50
+ chmod +x rulesync
51
+ # Place the binary wherever set PATH
52
+ sudo mv rulesync /usr/local/bin/
53
+ ```
54
+
55
+ #### macOS (Intel)
56
+
57
+ ```bash
58
+ curl -L https://github.com/dyoshikawa/rulesync/releases/latest/download/rulesync-darwin-x64 -o rulesync
59
+ chmod +x rulesync
60
+ # Place the binary wherever set PATH
61
+ sudo mv rulesync /usr/local/bin/
62
+ ```
63
+
64
+ #### macOS (Apple Silicon)
65
+
66
+ ```bash
67
+ curl -L https://github.com/dyoshikawa/rulesync/releases/latest/download/rulesync-darwin-arm64 -o rulesync
68
+ chmod +x rulesync
69
+ # Place the binary wherever set PATH
70
+ sudo mv rulesync /usr/local/bin/
71
+ ```
72
+
73
+ #### Verify checksums
74
+
75
+ ```bash
76
+ curl -L https://github.com/dyoshikawa/rulesync/releases/latest/download/SHA256SUMS -o SHA256SUMS
77
+ sha256sum -c SHA256SUMS
78
+ ```
79
+
80
+ #### Windows support?
81
+
82
+ Though Windows is not supported yet, we are positively considering it.
83
+ </details>
84
+
34
85
  ## Getting Started
35
86
 
36
87
  ```bash
@@ -101,7 +152,7 @@ Apply consistent rules across all AI tools, improving code quality and developme
101
152
  ### 🌏 **Global Mode**
102
153
  You can use global mode via Rulesync by enabling `--global` option.
103
154
 
104
- ### 🎮 **Simulated Commands and Subagents**
155
+ ### 🎮 **Simulate Commands and Subagents**
105
156
  Simulated commands and subagents allow you to generate simulated commands and subagents for copilot, cursor and codexcli. This is useful for shortening your prompts.
106
157
 
107
158
  ## Quick Commands
@@ -501,6 +552,22 @@ pnpm dev generate -t claudecode -f "*"
501
552
  pnpm dev import -t claudecode -f "*"
502
553
  ```
503
554
 
555
+ ## FAQ
556
+
557
+ ### Q. The generated `.mcp.json` doesn't work properly in Claude Code.
558
+
559
+ You can try adding the following to `.claude/settings.json` or `.claude/settings.local.json`:
560
+
561
+ ```diff
562
+ {
563
+ + "enableAllProjectMcpServers": true
564
+ }
565
+ ```
566
+
567
+ According to [the documentation](https://code.claude.com/docs/en/settings), this means:
568
+
569
+ > Automatically approve all MCP servers defined in project .mcp.json files
570
+
504
571
  ## License
505
572
 
506
573
  MIT License
package/dist/index.cjs CHANGED
@@ -112,6 +112,15 @@ async function readOrInitializeFileContent(filePath, initialContent = "") {
112
112
  return initialContent;
113
113
  }
114
114
  }
115
+ function resolvePath(relativePath, baseDir) {
116
+ if (!baseDir) return relativePath;
117
+ const resolved = (0, import_node_path.resolve)(baseDir, relativePath);
118
+ const rel = (0, import_node_path.relative)(baseDir, resolved);
119
+ if (rel.startsWith("..") || (0, import_node_path.resolve)(resolved) !== resolved) {
120
+ throw new Error(`Path traversal detected: ${relativePath}`);
121
+ }
122
+ return resolved;
123
+ }
115
124
  async function directoryExists(dirPath) {
116
125
  try {
117
126
  const stats = await (0, import_promises.stat)(dirPath);
@@ -176,14 +185,8 @@ function validateBaseDir(baseDir) {
176
185
  if (baseDir.includes("..")) {
177
186
  throw new Error(`baseDir cannot contain directory traversal (..): ${baseDir}`);
178
187
  }
179
- if (baseDir.startsWith("/")) {
180
- throw new Error(`baseDir must be a relative path. Absolute path not allowed: ${baseDir}`);
181
- }
182
- if (/^[a-zA-Z]:[/\\]/.test(baseDir)) {
183
- throw new Error(`baseDir must be a relative path. Absolute path not allowed: ${baseDir}`);
184
- }
185
- const normalized = (0, import_node_path.resolve)(".", baseDir);
186
- const rel = (0, import_node_path.relative)(".", normalized);
188
+ const normalized = (0, import_node_path.resolve)(baseDir);
189
+ const rel = (0, import_node_path.relative)(process.cwd(), normalized);
187
190
  if (rel.startsWith("..")) {
188
191
  throw new Error(`baseDir cannot contain directory traversal (..): ${baseDir}`);
189
192
  }
@@ -1654,9 +1657,28 @@ var CommandsProcessor = class extends FeatureProcessor {
1654
1657
 
1655
1658
  // src/config/config-resolver.ts
1656
1659
  var import_node_path13 = require("path");
1657
- var import_c12 = require("c12");
1660
+ var import_jsonc_parser = require("jsonc-parser");
1658
1661
 
1659
1662
  // src/config/config.ts
1663
+ var import_mini10 = require("zod/mini");
1664
+ var ConfigParamsSchema = import_mini10.z.object({
1665
+ baseDirs: import_mini10.z.array(import_mini10.z.string()),
1666
+ targets: RulesyncTargetsSchema,
1667
+ features: RulesyncFeaturesSchema,
1668
+ verbose: import_mini10.z.boolean(),
1669
+ delete: import_mini10.z.boolean(),
1670
+ // New non-experimental options
1671
+ global: (0, import_mini10.optional)(import_mini10.z.boolean()),
1672
+ simulatedCommands: (0, import_mini10.optional)(import_mini10.z.boolean()),
1673
+ simulatedSubagents: (0, import_mini10.optional)(import_mini10.z.boolean()),
1674
+ modularMcp: (0, import_mini10.optional)(import_mini10.z.boolean()),
1675
+ // Deprecated experimental options (for backward compatibility)
1676
+ experimentalGlobal: (0, import_mini10.optional)(import_mini10.z.boolean()),
1677
+ experimentalSimulateCommands: (0, import_mini10.optional)(import_mini10.z.boolean()),
1678
+ experimentalSimulateSubagents: (0, import_mini10.optional)(import_mini10.z.boolean())
1679
+ });
1680
+ var PartialConfigParamsSchema = import_mini10.z.partial(ConfigParamsSchema);
1681
+ var RequiredConfigParamsSchema = import_mini10.z.required(ConfigParamsSchema);
1660
1682
  var Config = class {
1661
1683
  baseDirs;
1662
1684
  targets;
@@ -1771,46 +1793,18 @@ var ConfigResolver = class {
1771
1793
  experimentalSimulateCommands,
1772
1794
  experimentalSimulateSubagents
1773
1795
  }) {
1774
- if (!await fileExists(configPath)) {
1775
- if (experimentalGlobal !== void 0) {
1776
- warnDeprecatedOptions({ experimentalGlobal });
1777
- }
1778
- if (experimentalSimulateCommands !== void 0) {
1779
- warnDeprecatedOptions({ experimentalSimulateCommands });
1780
- }
1781
- if (experimentalSimulateSubagents !== void 0) {
1782
- warnDeprecatedOptions({ experimentalSimulateSubagents });
1796
+ const validatedConfigPath = resolvePath(configPath, process.cwd());
1797
+ let configByFile = {};
1798
+ if (await fileExists(validatedConfigPath)) {
1799
+ try {
1800
+ const fileContent = await readFileContent(validatedConfigPath);
1801
+ const jsonData = (0, import_jsonc_parser.parse)(fileContent);
1802
+ configByFile = PartialConfigParamsSchema.parse(jsonData);
1803
+ } catch (error) {
1804
+ logger.error(`Failed to load config file: ${formatError(error)}`);
1805
+ throw error;
1783
1806
  }
1784
- const resolvedGlobal2 = global ?? experimentalGlobal ?? defaults.global;
1785
- const resolvedSimulatedCommands2 = simulatedCommands ?? experimentalSimulateCommands ?? defaults.simulatedCommands;
1786
- const resolvedSimulatedSubagents2 = simulatedSubagents ?? experimentalSimulateSubagents ?? defaults.simulatedSubagents;
1787
- return new Config({
1788
- targets: targets ?? defaults.targets,
1789
- features: features ?? defaults.features,
1790
- verbose: verbose ?? defaults.verbose,
1791
- delete: isDelete ?? defaults.delete,
1792
- baseDirs: getBaseDirsInLightOfGlobal({
1793
- baseDirs: baseDirs ?? defaults.baseDirs,
1794
- global: resolvedGlobal2
1795
- }),
1796
- global: resolvedGlobal2,
1797
- simulatedCommands: resolvedSimulatedCommands2,
1798
- simulatedSubagents: resolvedSimulatedSubagents2,
1799
- modularMcp: modularMcp ?? defaults.modularMcp
1800
- });
1801
1807
  }
1802
- const loadOptions = {
1803
- name: "rulesync",
1804
- cwd: process.cwd(),
1805
- rcFile: false,
1806
- // Disable rc file lookup
1807
- configFile: "rulesync"
1808
- // Will look for rulesync.jsonc, rulesync.ts, etc.
1809
- };
1810
- if (configPath) {
1811
- loadOptions.configFile = configPath;
1812
- }
1813
- const { config: configByFile } = await (0, import_c12.loadConfig)(loadOptions);
1814
1808
  const deprecatedGlobal = experimentalGlobal ?? configByFile.experimentalGlobal;
1815
1809
  const deprecatedCommands = experimentalSimulateCommands ?? configByFile.experimentalSimulateCommands;
1816
1810
  const deprecatedSubagents = experimentalSimulateSubagents ?? configByFile.experimentalSimulateSubagents;
@@ -1866,20 +1860,18 @@ function getBaseDirsInLightOfGlobal({
1866
1860
  baseDirs,
1867
1861
  global
1868
1862
  }) {
1869
- if (isEnvTest) {
1870
- return baseDirs.map((baseDir) => (0, import_node_path13.join)(".", baseDir));
1871
- }
1872
1863
  if (global) {
1873
1864
  return [getHomeDirectory()];
1874
1865
  }
1875
- baseDirs.forEach((baseDir) => {
1866
+ const resolvedBaseDirs = baseDirs.map((baseDir) => (0, import_node_path13.resolve)(baseDir));
1867
+ resolvedBaseDirs.forEach((baseDir) => {
1876
1868
  validateBaseDir(baseDir);
1877
1869
  });
1878
- return baseDirs;
1870
+ return resolvedBaseDirs;
1879
1871
  }
1880
1872
 
1881
1873
  // src/ignore/ignore-processor.ts
1882
- var import_mini10 = require("zod/mini");
1874
+ var import_mini11 = require("zod/mini");
1883
1875
 
1884
1876
  // src/ignore/amazonqcli-ignore.ts
1885
1877
  var import_node_path15 = require("path");
@@ -2527,7 +2519,7 @@ var ignoreProcessorToolTargets = [
2527
2519
  "roo",
2528
2520
  "windsurf"
2529
2521
  ];
2530
- var IgnoreProcessorToolTargetSchema = import_mini10.z.enum(ignoreProcessorToolTargets);
2522
+ var IgnoreProcessorToolTargetSchema = import_mini11.z.enum(ignoreProcessorToolTargets);
2531
2523
  var IgnoreProcessor = class extends FeatureProcessor {
2532
2524
  toolTarget;
2533
2525
  constructor({
@@ -2702,7 +2694,7 @@ var IgnoreProcessor = class extends FeatureProcessor {
2702
2694
  };
2703
2695
 
2704
2696
  // src/mcp/mcp-processor.ts
2705
- var import_mini12 = require("zod/mini");
2697
+ var import_mini13 = require("zod/mini");
2706
2698
 
2707
2699
  // src/mcp/amazonqcli-mcp.ts
2708
2700
  var import_node_path27 = require("path");
@@ -2710,37 +2702,37 @@ var import_node_path27 = require("path");
2710
2702
  // src/mcp/rulesync-mcp.ts
2711
2703
  var import_node_path26 = require("path");
2712
2704
  var import_object = require("es-toolkit/object");
2713
- var import_mini11 = require("zod/mini");
2714
- var McpTransportTypeSchema = import_mini11.z.enum(["stdio", "sse", "http"]);
2715
- var McpServerBaseSchema = import_mini11.z.object({
2716
- type: import_mini11.z.optional(import_mini11.z.enum(["stdio", "sse", "http"])),
2717
- command: import_mini11.z.optional(import_mini11.z.union([import_mini11.z.string(), import_mini11.z.array(import_mini11.z.string())])),
2718
- args: import_mini11.z.optional(import_mini11.z.array(import_mini11.z.string())),
2719
- url: import_mini11.z.optional(import_mini11.z.string()),
2720
- httpUrl: import_mini11.z.optional(import_mini11.z.string()),
2721
- env: import_mini11.z.optional(import_mini11.z.record(import_mini11.z.string(), import_mini11.z.string())),
2722
- disabled: import_mini11.z.optional(import_mini11.z.boolean()),
2723
- networkTimeout: import_mini11.z.optional(import_mini11.z.number()),
2724
- timeout: import_mini11.z.optional(import_mini11.z.number()),
2725
- trust: import_mini11.z.optional(import_mini11.z.boolean()),
2726
- cwd: import_mini11.z.optional(import_mini11.z.string()),
2727
- transport: import_mini11.z.optional(McpTransportTypeSchema),
2728
- alwaysAllow: import_mini11.z.optional(import_mini11.z.array(import_mini11.z.string())),
2729
- tools: import_mini11.z.optional(import_mini11.z.array(import_mini11.z.string())),
2730
- kiroAutoApprove: import_mini11.z.optional(import_mini11.z.array(import_mini11.z.string())),
2731
- kiroAutoBlock: import_mini11.z.optional(import_mini11.z.array(import_mini11.z.string())),
2732
- headers: import_mini11.z.optional(import_mini11.z.record(import_mini11.z.string(), import_mini11.z.string()))
2705
+ var import_mini12 = require("zod/mini");
2706
+ var McpTransportTypeSchema = import_mini12.z.enum(["stdio", "sse", "http"]);
2707
+ var McpServerBaseSchema = import_mini12.z.object({
2708
+ type: import_mini12.z.optional(import_mini12.z.enum(["stdio", "sse", "http"])),
2709
+ command: import_mini12.z.optional(import_mini12.z.union([import_mini12.z.string(), import_mini12.z.array(import_mini12.z.string())])),
2710
+ args: import_mini12.z.optional(import_mini12.z.array(import_mini12.z.string())),
2711
+ url: import_mini12.z.optional(import_mini12.z.string()),
2712
+ httpUrl: import_mini12.z.optional(import_mini12.z.string()),
2713
+ env: import_mini12.z.optional(import_mini12.z.record(import_mini12.z.string(), import_mini12.z.string())),
2714
+ disabled: import_mini12.z.optional(import_mini12.z.boolean()),
2715
+ networkTimeout: import_mini12.z.optional(import_mini12.z.number()),
2716
+ timeout: import_mini12.z.optional(import_mini12.z.number()),
2717
+ trust: import_mini12.z.optional(import_mini12.z.boolean()),
2718
+ cwd: import_mini12.z.optional(import_mini12.z.string()),
2719
+ transport: import_mini12.z.optional(McpTransportTypeSchema),
2720
+ alwaysAllow: import_mini12.z.optional(import_mini12.z.array(import_mini12.z.string())),
2721
+ tools: import_mini12.z.optional(import_mini12.z.array(import_mini12.z.string())),
2722
+ kiroAutoApprove: import_mini12.z.optional(import_mini12.z.array(import_mini12.z.string())),
2723
+ kiroAutoBlock: import_mini12.z.optional(import_mini12.z.array(import_mini12.z.string())),
2724
+ headers: import_mini12.z.optional(import_mini12.z.record(import_mini12.z.string(), import_mini12.z.string()))
2733
2725
  });
2734
- var ModularMcpServerSchema = import_mini11.z.extend(McpServerBaseSchema, {
2735
- description: import_mini11.z.string().check(import_mini11.z.minLength(1))
2726
+ var ModularMcpServerSchema = import_mini12.z.extend(McpServerBaseSchema, {
2727
+ description: import_mini12.z.string().check(import_mini12.z.minLength(1))
2736
2728
  });
2737
- var ModularMcpServersSchema = import_mini11.z.record(import_mini11.z.string(), ModularMcpServerSchema);
2738
- var RulesyncMcpServersSchema = import_mini11.z.extend(McpServerBaseSchema, {
2739
- description: import_mini11.z.optional(import_mini11.z.string()),
2740
- targets: import_mini11.z.optional(RulesyncTargetsSchema)
2729
+ var ModularMcpServersSchema = import_mini12.z.record(import_mini12.z.string(), ModularMcpServerSchema);
2730
+ var RulesyncMcpServersSchema = import_mini12.z.extend(McpServerBaseSchema, {
2731
+ description: import_mini12.z.optional(import_mini12.z.string()),
2732
+ targets: import_mini12.z.optional(RulesyncTargetsSchema)
2741
2733
  });
2742
- var RulesyncMcpConfigSchema = import_mini11.z.object({
2743
- mcpServers: import_mini11.z.record(import_mini11.z.string(), RulesyncMcpServersSchema)
2734
+ var RulesyncMcpConfigSchema = import_mini12.z.object({
2735
+ mcpServers: import_mini12.z.record(import_mini12.z.string(), RulesyncMcpServersSchema)
2744
2736
  });
2745
2737
  var RulesyncMcp = class _RulesyncMcp extends RulesyncFile {
2746
2738
  json;
@@ -3537,7 +3529,7 @@ var mcpProcessorToolTargets = [
3537
3529
  "geminicli",
3538
3530
  "roo"
3539
3531
  ];
3540
- var McpProcessorToolTargetSchema = import_mini12.z.enum(
3532
+ var McpProcessorToolTargetSchema = import_mini13.z.enum(
3541
3533
  // codexcli is not in the list of tool targets but we add it here because it is a valid tool target for global mode generation
3542
3534
  mcpProcessorToolTargets.concat("codexcli")
3543
3535
  );
@@ -3776,14 +3768,14 @@ var McpProcessor = class extends FeatureProcessor {
3776
3768
  // src/rules/rules-processor.ts
3777
3769
  var import_node_path65 = require("path");
3778
3770
  var import_fast_xml_parser = require("fast-xml-parser");
3779
- var import_mini21 = require("zod/mini");
3771
+ var import_mini22 = require("zod/mini");
3780
3772
 
3781
3773
  // src/subagents/agentsmd-subagent.ts
3782
3774
  var import_node_path37 = require("path");
3783
3775
 
3784
3776
  // src/subagents/simulated-subagent.ts
3785
3777
  var import_node_path36 = require("path");
3786
- var import_mini13 = require("zod/mini");
3778
+ var import_mini14 = require("zod/mini");
3787
3779
 
3788
3780
  // src/subagents/tool-subagent.ts
3789
3781
  var ToolSubagent = class extends ToolFile {
@@ -3818,9 +3810,9 @@ var ToolSubagent = class extends ToolFile {
3818
3810
  };
3819
3811
 
3820
3812
  // src/subagents/simulated-subagent.ts
3821
- var SimulatedSubagentFrontmatterSchema = import_mini13.z.object({
3822
- name: import_mini13.z.string(),
3823
- description: import_mini13.z.string()
3813
+ var SimulatedSubagentFrontmatterSchema = import_mini14.z.object({
3814
+ name: import_mini14.z.string(),
3815
+ description: import_mini14.z.string()
3824
3816
  });
3825
3817
  var SimulatedSubagent = class extends ToolSubagent {
3826
3818
  frontmatter;
@@ -4054,22 +4046,22 @@ var RooSubagent = class _RooSubagent extends SimulatedSubagent {
4054
4046
 
4055
4047
  // src/subagents/subagents-processor.ts
4056
4048
  var import_node_path45 = require("path");
4057
- var import_mini16 = require("zod/mini");
4049
+ var import_mini17 = require("zod/mini");
4058
4050
 
4059
4051
  // src/subagents/claudecode-subagent.ts
4060
4052
  var import_node_path44 = require("path");
4061
- var import_mini15 = require("zod/mini");
4053
+ var import_mini16 = require("zod/mini");
4062
4054
 
4063
4055
  // src/subagents/rulesync-subagent.ts
4064
4056
  var import_node_path43 = require("path");
4065
- var import_mini14 = require("zod/mini");
4066
- var RulesyncSubagentModelSchema = import_mini14.z.enum(["opus", "sonnet", "haiku", "inherit"]);
4067
- var RulesyncSubagentFrontmatterSchema = import_mini14.z.object({
4057
+ var import_mini15 = require("zod/mini");
4058
+ var RulesyncSubagentModelSchema = import_mini15.z.enum(["opus", "sonnet", "haiku", "inherit"]);
4059
+ var RulesyncSubagentFrontmatterSchema = import_mini15.z.object({
4068
4060
  targets: RulesyncTargetsSchema,
4069
- name: import_mini14.z.string(),
4070
- description: import_mini14.z.string(),
4071
- claudecode: import_mini14.z.optional(
4072
- import_mini14.z.object({
4061
+ name: import_mini15.z.string(),
4062
+ description: import_mini15.z.string(),
4063
+ claudecode: import_mini15.z.optional(
4064
+ import_mini15.z.object({
4073
4065
  model: RulesyncSubagentModelSchema
4074
4066
  })
4075
4067
  )
@@ -4143,10 +4135,10 @@ var RulesyncSubagent = class _RulesyncSubagent extends RulesyncFile {
4143
4135
  };
4144
4136
 
4145
4137
  // src/subagents/claudecode-subagent.ts
4146
- var ClaudecodeSubagentFrontmatterSchema = import_mini15.z.object({
4147
- name: import_mini15.z.string(),
4148
- description: import_mini15.z.string(),
4149
- model: import_mini15.z.optional(import_mini15.z.enum(["opus", "sonnet", "haiku", "inherit"]))
4138
+ var ClaudecodeSubagentFrontmatterSchema = import_mini16.z.object({
4139
+ name: import_mini16.z.string(),
4140
+ description: import_mini16.z.string(),
4141
+ model: import_mini16.z.optional(import_mini16.z.enum(["opus", "sonnet", "haiku", "inherit"]))
4150
4142
  });
4151
4143
  var ClaudecodeSubagent = class _ClaudecodeSubagent extends ToolSubagent {
4152
4144
  frontmatter;
@@ -4292,7 +4284,7 @@ var subagentsProcessorToolTargetsSimulated = [
4292
4284
  "roo"
4293
4285
  ];
4294
4286
  var subagentsProcessorToolTargetsGlobal = ["claudecode"];
4295
- var SubagentsProcessorToolTargetSchema = import_mini16.z.enum(subagentsProcessorToolTargets);
4287
+ var SubagentsProcessorToolTargetSchema = import_mini17.z.enum(subagentsProcessorToolTargets);
4296
4288
  var SubagentsProcessor = class extends FeatureProcessor {
4297
4289
  toolTarget;
4298
4290
  global;
@@ -4577,23 +4569,23 @@ var import_node_path47 = require("path");
4577
4569
 
4578
4570
  // src/rules/rulesync-rule.ts
4579
4571
  var import_node_path46 = require("path");
4580
- var import_mini17 = require("zod/mini");
4581
- var RulesyncRuleFrontmatterSchema = import_mini17.z.object({
4582
- root: import_mini17.z.optional(import_mini17.z.optional(import_mini17.z.boolean())),
4583
- targets: import_mini17.z.optional(RulesyncTargetsSchema),
4584
- description: import_mini17.z.optional(import_mini17.z.string()),
4585
- globs: import_mini17.z.optional(import_mini17.z.array(import_mini17.z.string())),
4586
- agentsmd: import_mini17.z.optional(
4587
- import_mini17.z.object({
4572
+ var import_mini18 = require("zod/mini");
4573
+ var RulesyncRuleFrontmatterSchema = import_mini18.z.object({
4574
+ root: import_mini18.z.optional(import_mini18.z.optional(import_mini18.z.boolean())),
4575
+ targets: import_mini18.z.optional(RulesyncTargetsSchema),
4576
+ description: import_mini18.z.optional(import_mini18.z.string()),
4577
+ globs: import_mini18.z.optional(import_mini18.z.array(import_mini18.z.string())),
4578
+ agentsmd: import_mini18.z.optional(
4579
+ import_mini18.z.object({
4588
4580
  // @example "path/to/subproject"
4589
- subprojectPath: import_mini17.z.optional(import_mini17.z.string())
4581
+ subprojectPath: import_mini18.z.optional(import_mini18.z.string())
4590
4582
  })
4591
4583
  ),
4592
- cursor: import_mini17.z.optional(
4593
- import_mini17.z.object({
4594
- alwaysApply: import_mini17.z.optional(import_mini17.z.boolean()),
4595
- description: import_mini17.z.optional(import_mini17.z.string()),
4596
- globs: import_mini17.z.optional(import_mini17.z.array(import_mini17.z.string()))
4584
+ cursor: import_mini18.z.optional(
4585
+ import_mini18.z.object({
4586
+ alwaysApply: import_mini18.z.optional(import_mini18.z.boolean()),
4587
+ description: import_mini18.z.optional(import_mini18.z.string()),
4588
+ globs: import_mini18.z.optional(import_mini18.z.array(import_mini18.z.string()))
4597
4589
  })
4598
4590
  )
4599
4591
  });
@@ -5186,9 +5178,9 @@ var ClaudecodeRule = class _ClaudecodeRule extends ToolRule {
5186
5178
 
5187
5179
  // src/rules/cline-rule.ts
5188
5180
  var import_node_path53 = require("path");
5189
- var import_mini18 = require("zod/mini");
5190
- var ClineRuleFrontmatterSchema = import_mini18.z.object({
5191
- description: import_mini18.z.string()
5181
+ var import_mini19 = require("zod/mini");
5182
+ var ClineRuleFrontmatterSchema = import_mini19.z.object({
5183
+ description: import_mini19.z.string()
5192
5184
  });
5193
5185
  var ClineRule = class _ClineRule extends ToolRule {
5194
5186
  static getSettablePaths() {
@@ -5335,10 +5327,10 @@ var CodexcliRule = class _CodexcliRule extends ToolRule {
5335
5327
 
5336
5328
  // src/rules/copilot-rule.ts
5337
5329
  var import_node_path55 = require("path");
5338
- var import_mini19 = require("zod/mini");
5339
- var CopilotRuleFrontmatterSchema = import_mini19.z.object({
5340
- description: import_mini19.z.optional(import_mini19.z.string()),
5341
- applyTo: import_mini19.z.optional(import_mini19.z.string())
5330
+ var import_mini20 = require("zod/mini");
5331
+ var CopilotRuleFrontmatterSchema = import_mini20.z.object({
5332
+ description: import_mini20.z.optional(import_mini20.z.string()),
5333
+ applyTo: import_mini20.z.optional(import_mini20.z.string())
5342
5334
  });
5343
5335
  var CopilotRule = class _CopilotRule extends ToolRule {
5344
5336
  frontmatter;
@@ -5505,11 +5497,11 @@ var CopilotRule = class _CopilotRule extends ToolRule {
5505
5497
 
5506
5498
  // src/rules/cursor-rule.ts
5507
5499
  var import_node_path56 = require("path");
5508
- var import_mini20 = require("zod/mini");
5509
- var CursorRuleFrontmatterSchema = import_mini20.z.object({
5510
- description: import_mini20.z.optional(import_mini20.z.string()),
5511
- globs: import_mini20.z.optional(import_mini20.z.string()),
5512
- alwaysApply: import_mini20.z.optional(import_mini20.z.boolean())
5500
+ var import_mini21 = require("zod/mini");
5501
+ var CursorRuleFrontmatterSchema = import_mini21.z.object({
5502
+ description: import_mini21.z.optional(import_mini21.z.string()),
5503
+ globs: import_mini21.z.optional(import_mini21.z.string()),
5504
+ alwaysApply: import_mini21.z.optional(import_mini21.z.boolean())
5513
5505
  });
5514
5506
  var CursorRule = class _CursorRule extends ToolRule {
5515
5507
  frontmatter;
@@ -6225,7 +6217,7 @@ var rulesProcessorToolTargets = [
6225
6217
  "warp",
6226
6218
  "windsurf"
6227
6219
  ];
6228
- var RulesProcessorToolTargetSchema = import_mini21.z.enum(rulesProcessorToolTargets);
6220
+ var RulesProcessorToolTargetSchema = import_mini22.z.enum(rulesProcessorToolTargets);
6229
6221
  var rulesProcessorToolTargetsGlobal = [
6230
6222
  "claudecode",
6231
6223
  "codexcli",
@@ -7715,7 +7707,7 @@ Attention, again, you are just the planner, so though you can read any files and
7715
7707
  }
7716
7708
 
7717
7709
  // src/cli/index.ts
7718
- var getVersion = () => "3.14.0";
7710
+ var getVersion = () => "3.16.0";
7719
7711
  var main = async () => {
7720
7712
  const program = new import_commander.Command();
7721
7713
  const version = getVersion();