rulemux 0.1.4 → 0.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 +38 -11
- package/README.zh-CN.md +35 -9
- package/bin/postinstall.js +87 -0
- package/dist/rulemux-darwin-amd64 +0 -0
- package/dist/rulemux-darwin-arm64 +0 -0
- package/dist/rulemux-linux-amd64 +0 -0
- package/dist/rulemux-linux-arm64 +0 -0
- package/dist/rulemux-windows-amd64.exe +0 -0
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -18,9 +18,11 @@ workspace rules directory**. You manage them in one place; they take effect ever
|
|
|
18
18
|
|
|
19
19
|
- rulemux **does not own or maintain any rule content**. Your source files stay yours — rulemux
|
|
20
20
|
only copies them. Which agents / workspaces they apply to is declared in your config.
|
|
21
|
-
- **The session hook is only the courier.**
|
|
22
|
-
into the directory the agent loads natively, so they enjoy static-prefix semantics
|
|
23
|
-
fade out mid-conversation,
|
|
21
|
+
- **The session hook is (almost) only the courier.** Rule *content* is never injected: files are
|
|
22
|
+
really copied into the directory the agent loads natively, so they enjoy static-prefix semantics
|
|
23
|
+
(never fade out mid-conversation, never accumulate). The single, deliberate exception is one
|
|
24
|
+
**transient notice line** the hook emits when it detects that the rules really changed — it asks
|
|
25
|
+
you to start a new session. See §5.3.
|
|
24
26
|
- Invariants: **no symlinks** (real copies only) and **free add/remove** (delete a source from the
|
|
25
27
|
config and its copy disappears on the next sync).
|
|
26
28
|
|
|
@@ -37,8 +39,7 @@ directory and hook location have been confirmed by a real canary test. Today:
|
|
|
37
39
|
|
|
38
40
|
| Agent | Tier | Rules directory | Status |
|
|
39
41
|
|---|---|---|---|
|
|
40
|
-
| **codebuddy** | Tier-1 (real copy) | `.codebuddy/rules/` | ✅ **Verified — installable** |
|
|
41
|
-
| **workbuddy** | Tier-1 (real copy) | `.codebuddy/rules/` (shared with CodeBuddy) | ✅ **Verified — installable** |
|
|
42
|
+
| **codebuddy** | Tier-1 (real copy) | `.codebuddy/rules/` | ✅ **Verified — installable** (`workbuddy` / `codebuddy-cn` are aliases of it: same agent, same dir, same hook) |
|
|
42
43
|
| claude (Claude Code) | Tier-1 | `.claude/rules/` | ⚠️ registered, **not verified yet** — cannot be installed |
|
|
43
44
|
| trae (Trae) | Tier-1 | `.trae/rules/` | ⚠️ registered, **not verified yet** — cannot be installed |
|
|
44
45
|
| codex | Tier-2 (injection) | none — injects into context | ⚠️ registered, **not verified yet** |
|
|
@@ -74,6 +75,18 @@ There is **no auto-update**. Upgrades are manual and handled by your package man
|
|
|
74
75
|
(`go install …@latest`, Homebrew/Scoop/apt later on). This is a deliberate decision — see
|
|
75
76
|
[design/requirements.md](docs/design/requirements.md) §五.
|
|
76
77
|
|
|
78
|
+
**An upgrade keeps your hooks current.** A hook command can change between releases (0.2.0 added
|
|
79
|
+
`--hook`), so after `npm i -g rulemux@latest` the npm `postinstall` step rewrites the SessionStart
|
|
80
|
+
hooks rulemux itself had installed — and touches nothing else. For non-npm upgrades, run it yourself:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
rulemux init --refresh # rewrite rulemux's OWN hooks only: never installs, never creates files
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
`rulemux doctor` now reports a hook that is installed but out of date (and how to fix it). If you
|
|
87
|
+
moved this agent's config directory with `CODEBUDDY_CONFIG_DIR`, rulemux follows it — see
|
|
88
|
+
[design/external/agent-rules-dirs.md](docs/design/external/agent-rules-dirs.md) §五.
|
|
89
|
+
|
|
77
90
|
---
|
|
78
91
|
|
|
79
92
|
## 4. Quick start
|
|
@@ -88,7 +101,9 @@ rulemux init --agent codebuddy
|
|
|
88
101
|
rulemux doctor # 3. Self-check: binary/PATH, agents, config validity
|
|
89
102
|
rulemux verify # 4. Canary check: drop a probe and ask the agent to recite its token
|
|
90
103
|
|
|
91
|
-
# From now on every new session triggers `rulemux sync --agent codebuddy` automatically.
|
|
104
|
+
# From now on every new session triggers `rulemux sync --hook --agent codebuddy` automatically.
|
|
105
|
+
|
|
106
|
+
rulemux sync --all # optional: re-align EVERY workspace recorded in the ledger, in one shot
|
|
92
107
|
|
|
93
108
|
rulemux uninstall --agent codebuddy # remove rulemux again (--yes skips the confirmation)
|
|
94
109
|
```
|
|
@@ -165,14 +180,24 @@ Things worth knowing:
|
|
|
165
180
|
### 5.3 What sync does, and what it never touches
|
|
166
181
|
|
|
167
182
|
On every sync rulemux computes the set of prefixed files that should exist, then removes any
|
|
168
|
-
|
|
183
|
+
`__rulemux__*` file that is not in that set, copies/overwrites the ones that are missing or changed,
|
|
169
184
|
and skips the rest.
|
|
170
185
|
|
|
171
|
-
- Destination name:
|
|
186
|
+
- Destination name: `__rulemux__` + source basename (a short hash is appended on name collisions).
|
|
172
187
|
- **Your source files are only ever read** — never modified or deleted.
|
|
173
|
-
- **Files without the
|
|
188
|
+
- **Files without the `__rulemux__` prefix in the rules directory are never touched**, so your own
|
|
174
189
|
rule files stay safe.
|
|
175
190
|
|
|
191
|
+
> ⚠️ **Run `rulemux sync` after editing your config or source docs**
|
|
192
|
+
> After you edit `~/.rulemux/config.toml` (adding/removing a `[[source]]`, changing `path`) or any
|
|
193
|
+
> source rule document, run `rulemux sync --agent codebuddy` (omit `--agent` to sync every supported
|
|
194
|
+
> agent).
|
|
195
|
+
> - **If you run sync**: the next new session reads the updated rules.
|
|
196
|
+
> - **If you don't**: CodeBuddy / WorkBuddy still auto-sync on every session start via the SessionStart
|
|
197
|
+
> hook, but the harness fixes the rule snapshot at the **start of the session** (before the hook runs),
|
|
198
|
+
> so the current session still sees the old version — the update only takes effect on the **second**
|
|
199
|
+
> new session.
|
|
200
|
+
|
|
176
201
|
---
|
|
177
202
|
|
|
178
203
|
## 6. Uninstalling
|
|
@@ -184,7 +209,7 @@ rulemux uninstall --agent codebuddy --yes # skip the confirmation prompt
|
|
|
184
209
|
```
|
|
185
210
|
|
|
186
211
|
It removes rulemux's own hook entry (other tools' hooks in the same file are preserved) and deletes
|
|
187
|
-
the
|
|
212
|
+
the `__rulemux__*` files it previously delivered. Because the hook lives in the user-level config,
|
|
188
213
|
rulemux also **revisits every workspace recorded in its ledger** (`~/.rulemux/workspaces.json`) and
|
|
189
214
|
cleans those too — otherwise, with the hook gone, that residue could never be removed again. You are
|
|
190
215
|
shown the list of workspaces before anything is deleted.
|
|
@@ -195,9 +220,11 @@ shown the list of workspaces before anything is deleted.
|
|
|
195
220
|
|
|
196
221
|
| Command | What it does |
|
|
197
222
|
|---|---|
|
|
198
|
-
| `rulemux sync [--agent <id>] [--config <path>] [--workspace <dir>]` | Sync rules
|
|
223
|
+
| `rulemux sync [--hook] [--agent <id>] [--config <path>] [--workspace <dir>]` | Sync rules. `--hook` = this run comes from an agent's SessionStart hook (only then may it create the rules dir and emit the change notice); omit `--agent` to target every supported agent |
|
|
224
|
+
| `rulemux sync --all [--config <path>]` | Manually re-align every workspace recorded in the ledger (never reads cwd, never creates dirs, prunes ledger entries whose directory is gone). Mutually exclusive with `--hook` / `--agent` / `--workspace` |
|
|
199
225
|
| `rulemux inject --agent <id> [--config <path>]` | Tier-2: print rules to stdout for hook injection |
|
|
200
226
|
| `rulemux init --agent <id[,id...]> [--config <path>] [--workspace <dir>]` | Write a sample config and install the SessionStart hook |
|
|
227
|
+
| `rulemux init --refresh [--agent <id[,id...]>] [--workspace <dir>]` | Refresh **only** the hooks rulemux already installed (npm `postinstall` calls this). Never adds a hook, never creates a file or directory, preserves every other entry and key in the host config |
|
|
201
228
|
| `rulemux doctor [--config <path>] [--workspace <dir>]` | Environment self-check |
|
|
202
229
|
| `rulemux verify --agent <id> [--clean] [--workspace <dir>]` | Canary acceptance test |
|
|
203
230
|
| `rulemux uninstall --agent <id[,id...]> \| --off \| --all [--yes]` | Remove hooks and delivered files |
|
package/README.zh-CN.md
CHANGED
|
@@ -16,8 +16,9 @@
|
|
|
16
16
|
|
|
17
17
|
- rulemux **不持有、不维护任何规则内容**。源文件完全由你维护,rulemux 只负责复制;
|
|
18
18
|
「适用于哪些 agent / 哪些工作区」在你的配置里声明。
|
|
19
|
-
-
|
|
19
|
+
- **会话钩子(几乎)只当「投递员」**:规则**正文**从不注入,文件是真正拷进 agent 原生加载的目录,
|
|
20
20
|
因此享有静态前缀语义 —— 不会随对话老化淡出,也不会每轮累积。
|
|
21
|
+
唯一刻意的例外:当钩子检测到规则**确有变化**时,会注入**一条瞬态提示**,请你新开会话(见 §5.3)。
|
|
21
22
|
- 底线:**不用软链**(一律真实拷贝)、**加删自由**(配置里删掉某源文件,下次同步它的副本即消失)。
|
|
22
23
|
|
|
23
24
|
> 为什么不直接用钩子注入?注入落在上下文的动态区,压缩时会被摘要掉(淡出),
|
|
@@ -32,8 +33,7 @@ rulemux **每个 agent 一套适配器**;只有「规则目录 + 钩子落点
|
|
|
32
33
|
|
|
33
34
|
| Agent | 层级 | 规则目录 | 状态 |
|
|
34
35
|
|---|---|---|---|
|
|
35
|
-
| **codebuddy** | Tier-1(真实拷贝) | `.codebuddy/rules/` | ✅
|
|
36
|
-
| **workbuddy** | Tier-1(真实拷贝) | `.codebuddy/rules/`(与 CodeBuddy 共用) | ✅ **已验证,可安装** |
|
|
36
|
+
| **codebuddy** | Tier-1(真实拷贝) | `.codebuddy/rules/` | ✅ **已验证,可安装**(`workbuddy` / `codebuddy-cn` 是它的别名:同一 agent、同一目录、同一钩子) |
|
|
37
37
|
| claude(Claude Code) | Tier-1 | `.claude/rules/` | ⚠️ 已注册,**尚未验证**,不可安装 |
|
|
38
38
|
| trae(Trae) | Tier-1 | `.trae/rules/` | ⚠️ 已注册,**尚未验证**,不可安装 |
|
|
39
39
|
| codex | Tier-2(注入) | 无 —— 注入上下文 | ⚠️ 已注册,**尚未验证** |
|
|
@@ -67,6 +67,18 @@ npm i -g rulemux
|
|
|
67
67
|
**没有自动更新**。升级手动、交给包管理器(`go install …@latest`,将来 Homebrew / Scoop / apt)。
|
|
68
68
|
这是刻意决策,见 [`docs/design/requirements.md`](docs/design/requirements.md) §五。
|
|
69
69
|
|
|
70
|
+
**升级会自动把你的钩子刷新到当前格式。** 钩子命令会随版本变化(0.2.0 起加了 `--hook`),所以
|
|
71
|
+
`npm i -g rulemux@latest` 之后,npm 的 `postinstall` 会**只重写 rulemux 自己装过的那条** SessionStart
|
|
72
|
+
钩子 —— 别的条目、别的键一个字节都不动。非 npm 方式升级的,自己跑一条即可:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
rulemux init --refresh # 只刷新「我们自己装过的」钩子:不新增、不创建任何文件或目录
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
`rulemux doctor` 现在能报出「已安装但格式过期」,并给出上面这条修复命令。若你用
|
|
79
|
+
`CODEBUDDY_CONFIG_DIR` 把该 agent 的配置目录挪走过,rulemux 会跟随 —— 见
|
|
80
|
+
[`docs/design/external/agent-rules-dirs.md`](docs/design/external/agent-rules-dirs.md) §五。
|
|
81
|
+
|
|
70
82
|
---
|
|
71
83
|
|
|
72
84
|
## 4. 快速开始
|
|
@@ -81,7 +93,9 @@ rulemux init --agent codebuddy
|
|
|
81
93
|
rulemux doctor # 3. 自检:二进制/PATH、各 agent 状态、配置合法性
|
|
82
94
|
rulemux verify # 4. canary 验收:投放探针,开新会话让 agent 念出暗号
|
|
83
95
|
|
|
84
|
-
# 此后每次开新会话,都会自动触发 rulemux sync --agent codebuddy
|
|
96
|
+
# 此后每次开新会话,都会自动触发 rulemux sync --hook --agent codebuddy
|
|
97
|
+
|
|
98
|
+
rulemux sync --all # 可选:一条命令把账本里记录过的所有工作区重新对齐
|
|
85
99
|
|
|
86
100
|
rulemux uninstall --agent codebuddy # 卸载(--yes 跳过确认)
|
|
87
101
|
```
|
|
@@ -154,12 +168,22 @@ workspace = ["/path/to/standalone"] # 也可与 workspace_groups 同时
|
|
|
154
168
|
|
|
155
169
|
### 5.3 同步做了什么,以及绝不碰什么
|
|
156
170
|
|
|
157
|
-
每次同步:算出「应该存在的带前缀文件集合」,目标目录里不在这个集合中的
|
|
171
|
+
每次同步:算出「应该存在的带前缀文件集合」,目标目录里不在这个集合中的 `__rulemux__*` 一律删除(删残留),
|
|
158
172
|
缺失或内容不一致的复制/覆盖,其余跳过。
|
|
159
173
|
|
|
160
|
-
-
|
|
174
|
+
- 目标文件名:`__rulemux__` + 源 basename(同名冲突时追加短 hash)。
|
|
161
175
|
- **源文件只被读取** —— 绝不修改、绝不删除。
|
|
162
|
-
- **规则目录里不带
|
|
176
|
+
- **规则目录里不带 `__rulemux__` 前缀的文件绝不触碰**,你自己的规则文件始终安全。
|
|
177
|
+
|
|
178
|
+
> ⚠️ **规则改了,要等下一个会话生效 —— 而且 agent 会主动告诉你**
|
|
179
|
+
> SessionStart 钩子每次会话都会同步、并把文件真正拷到磁盘。但 harness 在会话**开始瞬间**就固定了规则快照
|
|
180
|
+
> (早于钩子执行),所以本次会话读到的仍是旧版,改动要**下一个**会话才会被加载。
|
|
181
|
+
> 钩子检测到规则**确有变化**(新增 / 修改 / 删除)时,会注入**一句话**请模型转告你「请新开会话」;
|
|
182
|
+
> **没有变化时它一个字节都不输出**。
|
|
183
|
+
>
|
|
184
|
+
> 想一次性把所有工作区都对齐?`rulemux sync --all` 会遍历账本(`~/.rulemux/workspaces.json`)里记录过的
|
|
185
|
+
> 每个工作区重新同步。它**绝不创建**规则目录(只有该 agent 自己的会话钩子才会创建),并顺手清掉账本里
|
|
186
|
+
> 「目录已经不存在」的条目。
|
|
163
187
|
|
|
164
188
|
---
|
|
165
189
|
|
|
@@ -171,7 +195,7 @@ rulemux uninstall --off # 全部 agent(--all 等价)
|
|
|
171
195
|
rulemux uninstall --agent codebuddy --yes # 跳过交互确认
|
|
172
196
|
```
|
|
173
197
|
|
|
174
|
-
它会移除 rulemux 自己的钩子条目(同一文件里其它工具的钩子会保留),并删掉此前投递的
|
|
198
|
+
它会移除 rulemux 自己的钩子条目(同一文件里其它工具的钩子会保留),并删掉此前投递的 `__rulemux__*` 文件。
|
|
175
199
|
由于钩子在 user 级配置里,rulemux 还会**按账本(~/.rulemux/workspaces.json)回访所有记录过的工作区**
|
|
176
200
|
一并清理 —— 否则钩子一去,那些残留就再没机会被删掉了。删除前会把要回访的工作区列表给你确认。
|
|
177
201
|
|
|
@@ -181,9 +205,11 @@ rulemux uninstall --agent codebuddy --yes # 跳过交互确认
|
|
|
181
205
|
|
|
182
206
|
| 命令 | 作用 |
|
|
183
207
|
|---|---|
|
|
184
|
-
| `rulemux sync [--agent <id>] [--config <path>] [--workspace <dir>]` |
|
|
208
|
+
| `rulemux sync [--hook] [--agent <id>] [--config <path>] [--workspace <dir>]` | 同步规则。`--hook` = 本次由某 agent 的 SessionStart 钩子调起(**只有此时**才允许创建规则目录、才可能输出变化提示);省略 `--agent` 则针对全部已支持 agent |
|
|
209
|
+
| `rulemux sync --all [--config <path>]` | 手动把账本里记录过的所有工作区重新对齐(不读 cwd、绝不创建目录、顺手 GC 掉目录已不在的条目)。与 `--hook` / `--agent` / `--workspace` 互斥 |
|
|
185
210
|
| `rulemux inject --agent <id> [--config <path>]` | Tier-2:把规则输出到 stdout 供钩子注入 |
|
|
186
211
|
| `rulemux init --agent <id[,id...]> [--config <path>] [--workspace <dir>]` | 生成示例配置并安装 SessionStart 钩子 |
|
|
212
|
+
| `rulemux init --refresh [--agent <id[,id...]>] [--workspace <dir>]` | **只刷新** rulemux 自己装过的钩子(npm `postinstall` 调用的就是它):不新增、不创建任何文件或目录、文件里其它条目与其它键一律原样保留 |
|
|
187
213
|
| `rulemux doctor [--config <path>] [--workspace <dir>]` | 环境自检 |
|
|
188
214
|
| `rulemux verify --agent <id> [--clean] [--workspace <dir>]` | canary 验收 |
|
|
189
215
|
| `rulemux uninstall --agent <id[,id...]> \| --off \| --all [--yes]` | 移除钩子与已投递文件 |
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
// npm postinstall: bring rulemux's own SessionStart hooks up to date after a
|
|
5
|
+
// global install/upgrade.
|
|
6
|
+
//
|
|
7
|
+
// Why: a hook command can change between releases (0.2.0 added `--hook`). Users
|
|
8
|
+
// who upgraded but never re-ran `init` would silently keep the old behaviour,
|
|
9
|
+
// so the upgrade itself refreshes what it previously wrote.
|
|
10
|
+
//
|
|
11
|
+
// Deliberate limits — this script must never surprise anyone:
|
|
12
|
+
// - global installs only: a project-local `npm i rulemux` must not touch the
|
|
13
|
+
// user's host config;
|
|
14
|
+
// - skipped under CI, sudo and --ignore-scripts: $HOME would point at the
|
|
15
|
+
// wrong user, or the run is not a real user's machine;
|
|
16
|
+
// - it never installs anything new: only hooks rulemux itself already wrote;
|
|
17
|
+
// - it never fails the install: every error path exits 0, silently.
|
|
18
|
+
//
|
|
19
|
+
// Non-npm installs (go install, a binary from GitHub Releases) have no
|
|
20
|
+
// postinstall. Those users run `rulemux init --refresh` themselves, and
|
|
21
|
+
// `rulemux doctor` reports hooks that are installed but outdated.
|
|
22
|
+
|
|
23
|
+
const fs = require("fs");
|
|
24
|
+
const path = require("path");
|
|
25
|
+
const { spawnSync } = require("child_process");
|
|
26
|
+
|
|
27
|
+
function platformKey() {
|
|
28
|
+
const plat = process.platform === "win32" ? "windows" : process.platform;
|
|
29
|
+
let arch = process.arch;
|
|
30
|
+
if (arch === "x64") arch = "amd64";
|
|
31
|
+
else if (arch === "ia32") arch = "386";
|
|
32
|
+
return `${plat}-${arch}`;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Same resolution order as bin/rulemux.js: a bundled binary first, then a
|
|
36
|
+
// `rulemux` already on PATH.
|
|
37
|
+
function resolveBinary() {
|
|
38
|
+
const ext = process.platform === "win32" ? ".exe" : "";
|
|
39
|
+
const key = platformKey();
|
|
40
|
+
const candidates = [
|
|
41
|
+
path.join(__dirname, "..", "dist", `rulemux-${key}${ext}`),
|
|
42
|
+
path.join(__dirname, "..", "dist", `rulemux-${process.platform}-${process.arch}${ext}`),
|
|
43
|
+
];
|
|
44
|
+
for (const c of candidates) {
|
|
45
|
+
if (fs.existsSync(c)) return c;
|
|
46
|
+
}
|
|
47
|
+
const which = process.platform === "win32" ? "where" : "which";
|
|
48
|
+
const r = spawnSync(which, ["rulemux"], { stdio: "ignore" });
|
|
49
|
+
return r.status === 0 ? "rulemux" : null;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function shouldRun() {
|
|
53
|
+
if (process.env.npm_config_global !== "true") return false;
|
|
54
|
+
if (process.env.npm_config_ignore_scripts === "true") return false;
|
|
55
|
+
if (process.env.CI) return false;
|
|
56
|
+
if (process.env.SUDO_USER) return false;
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function main() {
|
|
61
|
+
if (!shouldRun()) return;
|
|
62
|
+
|
|
63
|
+
const bin = resolveBinary();
|
|
64
|
+
if (!bin) return;
|
|
65
|
+
|
|
66
|
+
const r = spawnSync(bin, ["init", "--refresh"], { encoding: "utf8" });
|
|
67
|
+
if (r.error || r.status !== 0 || !r.stdout) return;
|
|
68
|
+
|
|
69
|
+
// Stay quiet unless something actually changed: "refreshed:" marks a rewrite.
|
|
70
|
+
const changed = r.stdout
|
|
71
|
+
.split("\n")
|
|
72
|
+
.map((line) => line.trim())
|
|
73
|
+
.filter((line) => line.includes("refreshed:"));
|
|
74
|
+
if (changed.length === 0) return;
|
|
75
|
+
|
|
76
|
+
process.stdout.write(
|
|
77
|
+
"rulemux: upgraded the SessionStart hook(s) rulemux had already installed\n" +
|
|
78
|
+
changed.map((line) => " " + line).join("\n") +
|
|
79
|
+
"\n"
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
try {
|
|
84
|
+
main();
|
|
85
|
+
} catch (_) {
|
|
86
|
+
// Never let a hook refresh break `npm install`.
|
|
87
|
+
}
|
|
Binary file
|
|
Binary file
|
package/dist/rulemux-linux-amd64
CHANGED
|
Binary file
|
package/dist/rulemux-linux-arm64
CHANGED
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rulemux",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"description": "One set of rules, delivered to every AI coding agent: copies the rule files you declare into each agent's native workspace rules directory, with the same effect and token cost as writing AGENTS.md by hand.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
],
|
|
24
24
|
"scripts": {
|
|
25
25
|
"build:dist": "bash scripts/build-dist.sh",
|
|
26
|
+
"postinstall": "node bin/postinstall.js",
|
|
26
27
|
"prepublishOnly": "npm run build:dist"
|
|
27
28
|
},
|
|
28
29
|
"engines": {
|