@xdxer/dingtalk-agent 0.1.4-beta.18 → 0.1.4-beta.19

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
@@ -2,6 +2,27 @@
2
2
 
3
3
  All notable changes to `@xdxer/dingtalk-agent` are documented here. The project follows semantic versioning; prerelease entries describe release candidates and do not imply that Live canaries or registry publication have completed.
4
4
 
5
+ ## 0.1.4-beta.19 - 2026-07-20
6
+
7
+ ### Added
8
+
9
+ - `references/host-loading-contract.md`: the loading contract stated as four host-agnostic invariants — the Definition is loaded by the host's native project rule and must not also enter custom instructions; the Basic Skill's body is the single resolved forced instruction of every session, not merely "discoverable"; the Basic exposure must be materialized as a whole tree matching the canonical hash; Role Skills stay discoverable-and-authorized without joining the forced set. The three evidence classes are described in general form, with the binding fields (host name, host version, model, raw trace) supplied by each host adapter.
10
+ - `references/hosts/claude-code.md`: Claude Code's mechanism differences, most importantly that it does **not** natively read `AGENTS.md` (the body must be referenced via `@AGENTS.md` in `CLAUDE.md` or a symlink) and that its skill exposure root `.claude/skills` is not shared with `.agents/skills`. The file states plainly that the adapter is unimplemented and that choosing Claude Code therefore caps the verdict at `partial`.
11
+ - `src/host-detect.ts` and a `hosts` section in `doctor`: which coding agent CLIs are installed locally, with binary path, version, config roots (honoring `CLAUDE_CONFIG_DIR`, `CODEX_HOME`, `XDG_CONFIG_HOME`) and skill exposure root reported separately.
12
+
13
+ ### Changed
14
+
15
+ - The minimal Agent directory is now harness-agnostic: `opencode.json` and `.agents/skills/` are no longer part of the core, matching what `examples/agents/*` have always contained. Host config and exposure directories are listed as "appended per chosen host, not part of the body". Compose gains a step for letting the user choose the Agent Host instead of defaulting silently.
16
+ - OpenCode-specific material moved to `references/hosts/opencode.md` and `assets/hosts/opencode/`. OpenCode remains the only host with a complete adapter, and the documentation says so rather than implying broader support.
17
+ - Not selecting a host is not an exemption: an unselected host, or one without an adapter, yields `partial` and never `ready`.
18
+ - `doctor` no longer derives Codex and OpenCode status from one shared boolean. `cli.found` (binary on PATH) and skill visibility are separate fields, so a machine with neither client installed no longer reports both as `ok`. The `hosts` array is additive and does not participate in `ready`; the three existing client checks keep their level semantics.
19
+ - `scripts/check-skill-versions.mjs` compares the baseline tree against the working tree instead of `base...HEAD`, which only saw committed changes and passed vacuously before a commit.
20
+ - Host lists, per-host directory conventions and multi-host installation continue to be delegated to the upstream `skills` CLI rather than reimplemented; this repository only owns the loading contract and the loading evidence, which upstream does not provide.
21
+
22
+ ### Release boundary
23
+
24
+ - Distribution is limited to the public npm `beta` dist-tag and a Git tag. No DingTalk write, robot binding, or Live canary was executed. The Claude Code adapter is documented but not implemented, and no evidence class is claimed for it. Verification used targeted contract scenarios (24/27/28/30/34/50/56/60/62).
25
+
5
26
  ## 0.1.4-beta.18 - 2026-07-20
6
27
 
7
28
  ### Added
@@ -1562,12 +1562,32 @@ function printDoctor(out) {
1562
1562
  if (check.fix)
1563
1563
  console.log(` 修复: ${check.fix}`);
1564
1564
  }
1565
+ if (out.hosts.length) {
1566
+ // Host 面回答"本地能在哪跑",不改变上面的 ready 结论。
1567
+ console.log('\n本机 Coding Agent:');
1568
+ const width = Math.max(...out.hosts.map((host) => displayWidth(host.label)));
1569
+ for (const host of out.hosts) {
1570
+ const label = host.label + ' '.repeat(width - displayWidth(host.label));
1571
+ const where = host.cli.found
1572
+ ? [host.cli.path, host.cli.version].filter(Boolean).join(' ')
1573
+ : `未找到 ${host.cli.command}`;
1574
+ console.log(` ${host.cli.found ? '✅' : '❌'} ${label} ${where}`);
1575
+ console.log(` Skill 可见性: ${host.skillExposure.exists ? '已暴露' : '未暴露'} · ${host.skillExposureRoot}`);
1576
+ }
1577
+ }
1565
1578
  if (out.nextSteps.length) {
1566
1579
  console.log('\n下一步:');
1567
1580
  for (const step of out.nextSteps)
1568
1581
  console.log(` ${step}`);
1569
1582
  }
1570
1583
  }
1584
+ /** 全角字符按两列计宽,避免中英混排的 Host 列表错位。 */
1585
+ function displayWidth(text) {
1586
+ let width = 0;
1587
+ for (const char of text)
1588
+ width += /[ᄀ-ᅟ⺀-꓏가-힣豈-﫿︰-﹯＀-⦆¢-₩]/.test(char) ? 2 : 1;
1589
+ return width;
1590
+ }
1571
1591
  function printProjectInfo(out) {
1572
1592
  console.log(`dingtalk-agent Project · ${out.project.name}`);
1573
1593
  console.log(` root=${out.root}`);