@minonl/dia 0.0.17 → 0.0.18
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 +4 -8
- package/dist/cli.js +9 -8
- package/docs/cli.md +1 -1
- package/docs/status.md +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -72,19 +72,15 @@ dia update --check # 查 npm 最新版;dia update 按安装方式升级(
|
|
|
72
72
|
git clone https://github.com/minonl/dia ~/repos/github/dia
|
|
73
73
|
cd ~/repos/github/dia
|
|
74
74
|
bun install && bun run build # 或 npm ci + npm run build(Node ≥ 24)
|
|
75
|
-
|
|
75
|
+
npm i -g . # 仍然走 npm 全局安装(与正式安装同一条路径)
|
|
76
76
|
dia version && dia doctor
|
|
77
77
|
```
|
|
78
78
|
|
|
79
79
|
- 依赖:Node ≥ 24 或 Bun ≥ 1.2(见 `package.json` 的 `engines`)。
|
|
80
80
|
- 安装只落盘:**不启停服务、不改宿主默认 agent**。
|
|
81
|
-
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
`ln -sfn "$(npm prefix -g)/bin/dia" ~/.local/bin/dia`。只装到别处(不碰生效链接)用
|
|
85
|
-
`bash install.sh --home DIR --bin BINDIR`——`--home` 单独用只改安装目录,链接仍写默认 bin,守卫照旧生效。
|
|
86
|
-
装完会打印 `effective: <实际生效的 dia> (<version>)`,顺带暴露 PATH 顺序问题。
|
|
87
|
-
- `install.sh` = **开发 / 离线通道**(从仓库构建时用);日常安装/升级一律 `npm i -g @minonl/dia@latest`。
|
|
81
|
+
- **升级只有一条路**:`npm i -g @minonl/dia@latest`(`dia update` 会走这条)。
|
|
82
|
+
- `bash install.sh` 仅用于**开发 / 离线**:它把包内容拷到 `~/.local/share/dia` 并改 `~/.local/bin/dia`;
|
|
83
|
+
当那条链接已属于包管理器安装时会被守卫拒绝(exit 3,零改动)。细节见 [install-guard-design.md](docs/install-guard-design.md)。
|
|
88
84
|
- 内置能力(`dia-msg`)无需手动安装:首次 `persona add/render` 或 `dia collab enable` 自动装配,`dia doctor` 的 `bootstrap` 项会显示是否跟随包版本。
|
|
89
85
|
- 装 persona(示例 dabo):`dia persona add dabo --from git+https://github.com/minonl/dabo-agent.git`
|
|
90
86
|
- 卸载:`dia persona remove dabo`(只删带 `.dia-managed` 的产物)。
|
package/dist/cli.js
CHANGED
|
@@ -7037,7 +7037,7 @@ function jobRootResolved() {
|
|
|
7037
7037
|
function runJobCapture(argv) {
|
|
7038
7038
|
const { bin, error } = jobBin();
|
|
7039
7039
|
if (!bin) {
|
|
7040
|
-
process.stderr.write(`dia job: ${error || "未找到 dia-job
|
|
7040
|
+
process.stderr.write(`dia job: ${error || "未找到 dia-job;npm 包不完整?`npm i -g @minonl/dia@latest` 重装;或设置 DIA_JOB_BIN"}
|
|
7041
7041
|
`);
|
|
7042
7042
|
return { status: 2, stdout: "", stderr: "" };
|
|
7043
7043
|
}
|
|
@@ -7056,7 +7056,7 @@ function runJobCapture(argv) {
|
|
|
7056
7056
|
function runJob(argv) {
|
|
7057
7057
|
const { bin, error } = jobBin();
|
|
7058
7058
|
if (!bin) {
|
|
7059
|
-
process.stderr.write(`dia job: ${error || "未找到 dia-job
|
|
7059
|
+
process.stderr.write(`dia job: ${error || "未找到 dia-job;npm 包不完整?`npm i -g @minonl/dia@latest` 重装;或设置 DIA_JOB_BIN"}
|
|
7060
7060
|
`);
|
|
7061
7061
|
return 2;
|
|
7062
7062
|
}
|
|
@@ -7165,7 +7165,7 @@ function installShadowCheck() {
|
|
|
7165
7165
|
if (installNpm === binNpm) {
|
|
7166
7166
|
return { name, status: "ok", detail: `一致(${kind(installNpm)}):install=${install};PATH dia=${binReal}` };
|
|
7167
7167
|
}
|
|
7168
|
-
const fix =
|
|
7168
|
+
const fix = `npm i -g @minonl/dia@latest && ln -sfn "$(npm prefix -g)/bin/dia" ${quoteArg(bin)}`;
|
|
7169
7169
|
return {
|
|
7170
7170
|
name,
|
|
7171
7171
|
status: "warn",
|
|
@@ -7330,7 +7330,7 @@ async function run(opts = {}) {
|
|
|
7330
7330
|
checks.push(installShadowCheck());
|
|
7331
7331
|
checks.push(bootstrapCheck());
|
|
7332
7332
|
const wt = join25(install, "packages/wt/bin/dia-wt");
|
|
7333
|
-
checks.push({ name: "wt", status: existsSync23(wt) ? "ok" : "warn", detail: existsSync23(wt) ? wt : "dia wt 未安装(dia
|
|
7333
|
+
checks.push({ name: "wt", status: existsSync23(wt) ? "ok" : "warn", detail: existsSync23(wt) ? wt : "dia wt 未安装(npm 包不完整?npm i -g @minonl/dia@latest 重装)" });
|
|
7334
7334
|
const jobRoot = jobRootResolved();
|
|
7335
7335
|
checks.push({
|
|
7336
7336
|
name: "job",
|
|
@@ -11678,7 +11678,7 @@ function wtCli(argv) {
|
|
|
11678
11678
|
].filter(Boolean);
|
|
11679
11679
|
const bin = candidates.find((c) => existsSync30(c));
|
|
11680
11680
|
if (!bin) {
|
|
11681
|
-
err("E_WT: dia-wt
|
|
11681
|
+
err("E_WT: dia-wt 未安装(npm 包不完整?`npm i -g @minonl/dia@latest` 重装;或设 DIA_WT_BIN)");
|
|
11682
11682
|
return 33;
|
|
11683
11683
|
}
|
|
11684
11684
|
const r = spawnSync5("bash", [bin, ...argv], { stdio: "inherit", env: process.env });
|
|
@@ -11958,9 +11958,10 @@ async function main(rawArgv) {
|
|
|
11958
11958
|
try {
|
|
11959
11959
|
source = String(JSON.parse(readFileSync26(join32(install, "install.json"), "utf8")).source || "");
|
|
11960
11960
|
} catch {}
|
|
11961
|
-
out(
|
|
11962
|
-
out(`
|
|
11963
|
-
out(
|
|
11961
|
+
out(`当前是脚本安装(${install})。推荐切到 npm 全局安装,之后升级都走 npm:`);
|
|
11962
|
+
out(` npm i -g @minonl/dia@latest`);
|
|
11963
|
+
out(` ln -sfn "$(npm prefix -g)/bin/dia" ~/.local/bin/dia # 让稳定路径指向 npm 安装`);
|
|
11964
|
+
out(`(仍要脚本安装:cd ${source || "<dia 仓库>"} && git pull && bun run build && bash install.sh —— 已降级为开发/离线通道)`);
|
|
11964
11965
|
return 0;
|
|
11965
11966
|
}
|
|
11966
11967
|
const r = spawnSync5("npm", ["i", "-g", "@minonl/dia@latest"], { stdio: "inherit" });
|
package/docs/cli.md
CHANGED
|
@@ -97,7 +97,7 @@ dia persona remove dabo
|
|
|
97
97
|
| `persona create / render` | **已实现** | `create` 出骨架;`render --check` 只比对不写盘(跳过宿主自写文件,如 dsh `cordis.yml` / `package.json` / 锁文件);`render` 只覆盖 persona 产物,不整树重建宿主 profile |
|
|
98
98
|
| `kit add / list / verify / remove` | **已实现** | 复制/软链/记账;冲突写盘前全量检查(`E_CONFLICT`);**空清单/空内容拒绝**(`E_MANIFEST`/`E_KIT_EMPTY`);`src/kit.ts` + `tests/kit.test.ts` |
|
|
99
99
|
| `env list / check / run` | **已实现** | 白名单注入、不回显值、`--redact`、密钥不进 argv;清单由 persona 声明(`src/env.ts` + `tests/env.test.ts`) |
|
|
100
|
-
| `update [--check]` | **已实现** | 查 npm `dist-tags`;`--check` 有新版 exit 1、领先/最新 exit 0;**按安装方式分流**:npm 全局包 → `npm i -g`;脚本安装 →
|
|
100
|
+
| `update [--check]` | **已实现** | 查 npm `dist-tags`;`--check` 有新版 exit 1、领先/最新 exit 0;**按安装方式分流**:npm 全局包 → `npm i -g`;脚本安装 → **统一引导切到 npm**(`npm i -g` + 回链),`bash install.sh` 只作为「开发/离线通道」备选 |
|
|
101
101
|
| `deps list / record` | **已实现** | `list` = 登记 + 实测派生视图(required 缺失 exit 2);`record` = 只追加一行(`--id/--kind/--version` 必填);`src/deps.ts` + `tests/deps*.test.ts` |
|
|
102
102
|
| `doctor` | **已实现** | 组合自检:persona verify / **persona.render(宿主产物只读漂移,warn + 修复命令)** / default_agent / kit(**只查该 persona 引用的**,孤儿 kit 不拖红)/ knowledge(**索引新鲜度三态**,过期给重建命令)/ dsh preset / **deps 登记校验** / **platform 版本(读 `docs/platforms/registry.json`)** / wt / **install_shadow(遮蔽提示,warn)** / **bootstrap(内置能力是否跟随包版本)**(脚本安装 vs 包管理器全局安装互相遮挡:双向一致判定,不一致 fail + 一行修复命令;shim 形态按内容识别)**;exit 0/1/2。不指定 persona 且装了多个 → **逐个自检**(条目加 `<id>.` 前缀),不再整体 `E_SCOPE` |
|
|
103
103
|
| `wt …` | **已实现(需安装包)** | 转发 `packages/wt/bin/dia-wt`(create/adopt/doctor/gate/list/status/check/clean/prune-merged;详见 [worktree.md](worktree.md));未装时 `E_WT`(exit 33),`install.sh` 会分发 |
|
package/docs/status.md
CHANGED
|
@@ -91,6 +91,7 @@
|
|
|
91
91
|
| D0.21 | worktree 抽取 `packages/wt` | **完成** | 7 处 python→node;`dia wt`;4 套测试原样迁移全绿 |
|
|
92
92
|
| D0.23 | doctor 平台版本自检 | **完成** | `platform:opencode` / `platform:dsh` 报版本(缺宿主 = warn,不判红);`tests/active-doctor.test.ts` |
|
|
93
93
|
| D0.44 | 配置迁移走 LLM 任务 | **完成** | `docs/migrations/llm-migration.md`:升级只改声明;迁移=任务+判据+回滚;禁止代码里堆版本分支(安全敏感/原子场景例外) |
|
|
94
|
+
| D0.67 | npm 单一安装通道(收口) | **完成** | `dia update` 脚本安装分支统一引导 `npm i -g` + 回链;`E_WT`/`job`/`doctor wt` 报错不再让人跑 `install.sh`;`install_shadow` 修复命令统一 npm;README 主流程只留 npm,`install.sh` 降为开发/离线 |
|
|
94
95
|
| D0.66 | 内置能力分层(dia-msg 用户零操作) | **完成** | `kit.install` 原子换入 + 数据根锁;版本 semver 排序;`installDir()` 校验;`collab enable` 失败退 32;自举戳 `~/.dia/state/bootstrap.json` + `doctor bootstrap` 检查;`install_shadow` 降 warn;设计见 [builtin-kit-design.md](builtin-kit-design.md) |
|
|
95
96
|
| D0.65 | 安装防呆:脚本安装不抢包管理器全局安装 | **完成** | `install.sh` 守卫(目标 bin 属于包管理器全局安装且为 `command -v dia` 命中项 → exit 3,零改动):npm/bun 软链看 `node_modules/@minonl/dia`,pnpm/yarn shim 看内容,volta 看 bin 目录;放行 = `DIA_ALLOW_SCRIPT_INSTALL=1` / `--dry-run` / **bin 目录被重定向**(`--home` 等只改安装目录不算沙箱);装完打印 `effective:`;`doctor install_shadow` 双向一致判定(含 shim);`tests/install-guard.test.sh` + `tests/install-guard-strict.test.sh` |
|
|
96
97
|
| D0.64 | 复制过滤按相对路径判断 | **完成** | 绝对路径匹配 `node_modules` 会误伤 npm 全局安装(kit 整树被过滤 → `E_KIT_EMPTY`);改 `copyFilter(base)` 用相对路径,persona/kit 共用 |
|