ygl-trees 0.77.1 → 0.77.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/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.77.2(2026-10-17)JSON 纯净性修复
4
+ - **契约修复**:unknown-group 错误路径的 try 提示不再泄漏到 --json stdout(冷启动之旅实测发现)
5
+ - degraded mode 提示在 json 模式改走 stderr
6
+ - 冷安装全链路验证通过(npm install → init → doctor → research → tree → kb → webui)
7
+
3
8
  ## 0.77.1(2026-10-17)DEP0190 hotfix
4
9
  - 所有 shell:true 消除(resolvePm 的 where/version 检查改用无 shell 调用)
5
10
  - plugin install/remove 零弃用警告
@@ -386,7 +386,11 @@ async function main(argv) {
386
386
  home, dbFile: dbFile2, ctx,
387
387
  db: null, store: null, cordis: null,
388
388
  };
389
- (0, fmt_1.out)(ctx, (0, fmt_1.paint)(fmt_1.C.yellow, " ! degraded mode: user plugins failed to load — plugin commands only", ctx.color));
389
+ // JSON purity: stdout is the machine channel — degraded-mode notice goes to stderr there
390
+ if (ctx.json)
391
+ console.error((0, fmt_1.paint)(fmt_1.C.yellow, " ! degraded mode: user plugins failed to load — plugin commands only", ctx.color));
392
+ else
393
+ (0, fmt_1.out)(ctx, (0, fmt_1.paint)(fmt_1.C.yellow, " ! degraded mode: user plugins failed to load — plugin commands only", ctx.color));
390
394
  return pluginCmds.runPluginCommand(env2, action || "list", args._.slice(2), args);
391
395
  }
392
396
  (0, startup_diagnostics_1.reportStartupFailure)(e, home, VERSION);
@@ -541,8 +545,9 @@ async function main(argv) {
541
545
  else {
542
546
  (0, fmt_1.bad)(ctx, `unknown group: ${group}`);
543
547
  }
544
- (0, fmt_1.out)(ctx, (0, fmt_1.paint)(fmt_1.C.dim, " try: ygl-trees (no args) for full usage", ctx.color));
545
- ;
548
+ if (!ctx.json) {
549
+ (0, fmt_1.out)(ctx, (0, fmt_1.paint)(fmt_1.C.dim, " try: ygl-trees (no args) for full usage", ctx.color));
550
+ }
546
551
  if (!ctx.json)
547
552
  (0, fmt_1.out)(ctx, usage()); // usage text belongs to the human channel
548
553
  return 2;
@@ -11071,7 +11071,8 @@ async function main(argv) {
11071
11071
  store: null,
11072
11072
  cordis: null
11073
11073
  };
11074
- out(ctx, paint(C.yellow, " ! degraded mode: user plugins failed to load — plugin commands only", ctx.color));
11074
+ if (ctx.json) console.error(paint(C.yellow, " ! degraded mode: user plugins failed to load — plugin commands only", ctx.color));
11075
+ else out(ctx, paint(C.yellow, " ! degraded mode: user plugins failed to load — plugin commands only", ctx.color));
11075
11076
  return pluginCmds.runPluginCommand(env2, action || "list", args._.slice(2), args);
11076
11077
  }
11077
11078
  reportStartupFailure(e, home, VERSION);
@@ -11238,7 +11239,7 @@ async function main(argv) {
11238
11239
  if (suggestions.length === 1) bad(ctx, `unknown group: ${group} — did you mean "${suggestions[0]}"?`);
11239
11240
  else if (suggestions.length > 1) bad(ctx, `unknown group: ${group} — did you mean: ${suggestions.slice(0, 3).join(" | ")}?`);
11240
11241
  else bad(ctx, `unknown group: ${group}`);
11241
- out(ctx, paint(C.dim, " try: ygl-trees (no args) for full usage", ctx.color));
11242
+ if (!ctx.json) out(ctx, paint(C.dim, " try: ygl-trees (no args) for full usage", ctx.color));
11242
11243
  if (!ctx.json) out(ctx, usage());
11243
11244
  return 2;
11244
11245
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ygl-trees",
3
- "version": "0.77.1",
3
+ "version": "0.77.2",
4
4
  "description": "猿光 · 科技树 — database-centric CLI for research → production → knowledge reuse, built for AI agents.",
5
5
  "type": "commonjs",
6
6
  "main": "dist/apps/cli/index.js",