@xdxer/dingtalk-agent 0.1.4-beta.16 → 0.1.4-beta.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.
Files changed (43) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/README.en.md +1 -0
  3. package/README.md +1 -0
  4. package/dist/bin/dingtalk-agent.js +15 -8
  5. package/dist/bin/dingtalk-agent.js.map +1 -1
  6. package/dist/src/agent-audit.js +12 -5
  7. package/dist/src/agent-audit.js.map +1 -1
  8. package/dist/src/development-workspace.js +17 -3
  9. package/dist/src/development-workspace.js.map +1 -1
  10. package/dist/src/doctor.js +41 -6
  11. package/dist/src/doctor.js.map +1 -1
  12. package/dist/src/map.js +157 -0
  13. package/dist/src/map.js.map +1 -0
  14. package/dist/src/multica-deploy.js +76 -19
  15. package/dist/src/multica-deploy.js.map +1 -1
  16. package/dist/src/multica-provider.js +1 -1
  17. package/dist/src/multica-provider.js.map +1 -1
  18. package/dist/src/skill-manager.js +98 -10
  19. package/dist/src/skill-manager.js.map +1 -1
  20. package/dist/src/upgrade.js +23 -27
  21. package/dist/src/upgrade.js.map +1 -1
  22. package/dist/src/version.js +73 -0
  23. package/dist/src/version.js.map +1 -0
  24. package/docs/schemas/project.schema.json +1 -0
  25. package/lab/agent-eval/catalog.json +5 -5
  26. package/lab/agent-eval/classic-failures.json +2 -2
  27. package/lab/project-workspace/fake-multica-provider.mjs +17 -6
  28. package/lab/project-workspace/opencode-provider-suite.json +1 -1
  29. package/lab/schemas/agent-eval-catalog.schema.json +1 -1
  30. package/package.json +3 -2
  31. package/skills/core/dingtalk-agent-compose/SKILL.md +6 -3
  32. package/skills/core/dingtalk-agent-compose/evals/evals.json +11 -0
  33. package/skills/core/dingtalk-agent-eval/SKILL.md +30 -6
  34. package/skills/core/dingtalk-agent-eval/assets/eval-catalog.template.json +1 -1
  35. package/skills/core/dingtalk-agent-eval/evals/evals.json +22 -0
  36. package/skills/core/dingtalk-agent-eval/references/eval-topology.md +14 -0
  37. package/skills/core/dingtalk-agent-eval/references/evidence-contract.md +21 -0
  38. package/skills/core/dingtalk-agent-eval/references/failure-to-case.md +35 -0
  39. package/skills/core/dingtalk-agent-eval/references/interactive-debug-channels.md +93 -0
  40. package/skills/core/dingtalk-agent-eval/references/local-connector-smoke.md +75 -0
  41. package/skills/platforms/multica-dingtalk/PLATFORM.md +4 -2
  42. package/skills/platforms/multica-dingtalk/dingtalk-agent-boot-multica/SKILL.md +4 -4
  43. package/skills/platforms/multica-dingtalk/multica-external/SKILL.md +2 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,48 @@
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.18 - 2026-07-20
6
+
7
+ ### Added
8
+
9
+ - `dingtalk-agent-eval/references/local-connector-smoke.md`: the local route for an Agent that is **not yet deployed** — a dedicated test robot driven by a `dws dev connect` connector against a local workspace. Covers egress ownership (`robot-connect`/`connector`), the workspace constraints that must hold before starting, a five-step runbook, `status=not_running` as the only teardown truth, and how it differs from the Robot Pool. It is explicitly not a fourth interactive channel: the other three test deployed artifacts.
10
+ - `dingtalk-agent-eval/references/failure-to-case.md`: how a real failure becomes a regression case — the iteration path, the CLI-versus-Skill discrimination rule ("would bypassing this produce a worse reply, or a wrong side effect?"), and how to set up the with/without and current/previous comparisons without letting ordering effects read as gains.
11
+ - The L0–L4 tier table with promotion rules now lives in the eval SKILL; the eight-item hard-gate checklist and the sandbox containment audit now live in `evidence-contract.md`; egress ownership and the Role Principal / Execution Subject / Input Channel split now live in `eval-topology.md`.
12
+
13
+ ### Changed
14
+
15
+ - Testing methods are consolidated into the eval skill as the single source of truth. `docs/SELF-TEST.md` loses 191 lines of method content and keeps only this repository's own evidence, baselines and historical conclusions; `docs/ARCHITECTURE.md` and the Multica `PLATFORM.md` converge to pointers. This fixes a real defect: `docs/` is not part of the npm tarball, so shipped skill text was pointing users at files their installation does not contain.
16
+ - The local smoke route no longer hardcodes `--channel claudecode`. It selects by whichever coding agent is actually installed, and states plainly that the Robot Pool still pins a single channel.
17
+ - Fixed an error in the eval SKILL channel table: channel B's egress owner is the platform-side Agent, not the connector.
18
+ - `dingtalk-agent-eval` 0.6.0 → 0.7.0.
19
+
20
+ ### Release boundary
21
+
22
+ - Distribution is limited to the public npm `beta` dist-tag and a Git tag. No DingTalk write, robot binding, or Live canary was executed. Verification used targeted contract scenarios (20/28/34/56/62) plus a link check over the packaged skill tree, per the repository's current fast-verification discipline.
23
+
24
+ ## 0.1.4-beta.17 - 2026-07-20
25
+
26
+ ### Added
27
+
28
+ - Interactive debug channels for a delivered Agent (`dingtalk-agent-eval/references/interactive-debug-channels.md`): three channels — platform CLI dispatch, your own DingTalk identity to a bound robot, and digital-employee identity (in development) — each with what it proves and explicitly does not prove, an A→B→C one-way escalation rule, and a four-way attribution tree for "no reply" (eligibility silence / channel not connected / runtime or task failure / genuinely wrong answer). The Compose skill hands off to eval after assembly instead of improvising acceptance criteria.
29
+ - `platform trace` as a first-class evidence surface: the managed platform's persisted execution trace (task and session id, reasoning, every tool call, `failure_reason`, the skills actually in effect) is the only surface that reliably catches "the reply reads correctly but the assembly is broken". Synced across the eval SKILL, the evidence contract, the topology table and the lab catalog schema enum.
30
+ - Skill version state model replacing a single boolean: `missing / current / modified / outdated / ahead / unknown`, backed by a whole-tree `contentHash` so a body edit that skips a version bump is still detected. `skill status` reports `installedVersion → skillVersion (state)`; `doctor` prints the same and folds already-installed platform skills into the report without letting opt-in skills affect `ready`; `dta upgrade` reports before/after/bundled/state per skill.
31
+ - `scripts/check-skill-versions.mjs`, wired into `release:check`: a skill whose body changed against the baseline without a version bump, or whose version regressed, fails the gate.
32
+ - Contract scenario 62 `SkillVersionDrift` covering the four drift states, the downgrade refusal and its `--allow-downgrade` recovery, doctor grading, and content-hash detection.
33
+
34
+ ### Changed
35
+
36
+ - `dingtalk-agent-eval` joins the default skill suite. Testing methods are consolidated into that skill, so a machine without it has no path to any testing guidance; `setup` and `skill install` now install three skills.
37
+ - Skill updates fail closed: a local copy newer than the bundled one is refused unless `--allow-downgrade`, and every install/upgrade re-reads the canonical copy afterwards — exit code 0 with a non-`current` readback is now an error rather than a silent success.
38
+ - `multica-external` declares `metadata.version` for the first time. Without it the empty-string comparison was always true, so the skill reported `current` permanently and could never be upgraded.
39
+ - `src/version.ts` extracted so the npm package and skills share one semver implementation; prerelease comparison changed from whole-string collation to dot-identifier segments.
40
+ - OpenCode/Multica real acceptance chain (from the branch's earlier work): JSON-stringified prompts accepted, `agent.displayName` added, and the skill load smoke verified against a strict structured allowlist.
41
+ - Stale `skills/<name>/` paths left by the core/platforms reorganization corrected in AGENTS.md, CLAUDE.md, CONTRIBUTING.md, the eval catalog template and three lab fixtures; the frozen 2026-07-16 baselines are deliberately left untouched.
42
+
43
+ ### Release boundary
44
+
45
+ - Distribution is limited to the public npm `beta` dist-tag and a Git tag. No DingTalk write, robot binding, or Live canary was executed for this release: the interactive-channel documentation is verified against source and CLI help output only, and the version mechanism is verified by deterministic contract scenarios. Live waivers from beta.9 remain unchanged.
46
+
5
47
  ## 0.1.4-beta.16 - 2026-07-20
6
48
 
7
49
  ### Added
package/README.en.md CHANGED
@@ -158,6 +158,7 @@ dta agent audit \
158
158
  | Install, upgrade, or troubleshoot | [Installation](docs/INSTALLATION.md) |
159
159
  | Understand evaluation and evidence levels | [Self-test](docs/SELF-TEST.md) |
160
160
  | Create or audit an Agent | [Compose Skill](skills/core/dingtalk-agent-compose/SKILL.md) |
161
+ | Test or debug a delivered Agent | [Eval Skill](skills/core/dingtalk-agent-eval/SKILL.md) |
161
162
  | Read the shared behavior protocol | [Basic Behavior Skill](skills/core/dingtalk-basic-behavior/SKILL.md) |
162
163
  | Copy a complete example | [Example Agents](examples/agents) |
163
164
 
package/README.md CHANGED
@@ -158,6 +158,7 @@ dta agent audit \
158
158
  | 安装、升级与排障 | [Installation](docs/INSTALLATION.md) |
159
159
  | 理解评测与证据分层 | [Self-test](docs/SELF-TEST.md) |
160
160
  | 创建或审计 Agent | [Compose Skill](skills/core/dingtalk-agent-compose/SKILL.md) |
161
+ | 测试或调试已交付的 Agent | [Eval Skill](skills/core/dingtalk-agent-eval/SKILL.md) |
161
162
  | 查看公共行为协议 | [Basic Behavior Skill](skills/core/dingtalk-basic-behavior/SKILL.md) |
162
163
  | 复制完整示例 | [Example Agents](examples/agents) |
163
164
 
@@ -57,7 +57,7 @@ dta —— 给 Agent 安装钉钉员工的基础行为和工作环境
57
57
  · 从本地目录或钉钉文档加载身份、记忆和知识
58
58
 
59
59
  开始使用:
60
- dta setup 首次配置 CLI、DWS 和内置 Skill(基础行为 + Agent 装配)
60
+ dta setup 首次配置 CLI、DWS 和内置 Skill(基础行为 + Agent 装配 + 交付后评测)
61
61
  dta bootstrap --json 为当前 Agent 会话加载工作区
62
62
  dta agent enhance / audit 安全增强已有仓库,再审计定义、存储与 Skill 真加载
63
63
  dta info / dta workspace doctor <name> 查看 Project 并只读诊断 Workspace
@@ -66,7 +66,7 @@ dta —— 给 Agent 安装钉钉员工的基础行为和工作环境
66
66
  维护环境:
67
67
  dta doctor 检查哪里没装好,并给出修复提示
68
68
  dta upgrade 自升级,再重新检查完整环境
69
- dta skill status 查看 Claude Code、Codex、OpenCode 能否发现内置 Skill(可加 name 只查一个)
69
+ dta skill status 查看内置 Skill 的版本状态与三个客户端能否发现(可加 name 只查一个)
70
70
 
71
71
  接入钉钉事件和可靠外发:dta help runtime
72
72
  `;
@@ -683,25 +683,27 @@ async function main() {
683
683
  allowPositionals: true,
684
684
  options: {
685
685
  name: { type: 'string' }, 'dry-run': { type: 'boolean' }, json: { type: 'boolean' },
686
+ 'allow-downgrade': { type: 'boolean' },
686
687
  },
687
688
  });
688
689
  if (positionals.length > 1)
689
690
  fail('skill 最多接受一个 Skill name');
690
691
  const name = o.name || positionals[0];
691
692
  const dryRun = Boolean(o['dry-run']);
693
+ const allowDowngrade = Boolean(o['allow-downgrade']);
692
694
  let out;
693
695
  if (sub === 'install') {
694
696
  out = name
695
- ? installGlobalSkill(PACKAGE_ROOT, { dryRun, name })
696
- : installBundledSkills(PACKAGE_ROOT, { dryRun });
697
+ ? installGlobalSkill(PACKAGE_ROOT, { dryRun, name, allowDowngrade })
698
+ : installBundledSkills(PACKAGE_ROOT, { dryRun, allowDowngrade });
697
699
  }
698
700
  else if (sub === 'status') {
699
701
  out = name ? skillStatus(PACKAGE_ROOT, { dryRun, name }) : skillSuiteStatus(PACKAGE_ROOT, { dryRun });
700
702
  }
701
703
  else if (sub === 'upgrade') {
702
704
  out = name
703
- ? upgradeGlobalSkill(PACKAGE_ROOT, { dryRun, name })
704
- : upgradeBundledSkills(PACKAGE_ROOT, { dryRun });
705
+ ? upgradeGlobalSkill(PACKAGE_ROOT, { dryRun, name, allowDowngrade })
706
+ : upgradeBundledSkills(PACKAGE_ROOT, { dryRun, allowDowngrade });
705
707
  }
706
708
  else if (sub === 'uninstall') {
707
709
  out = name
@@ -1534,8 +1536,13 @@ function printSkillStatus(out, action, dryRun) {
1534
1536
  console.log(`${prefix} ${verb}: ${out.name}`);
1535
1537
  console.log(` manager=${out.manager} bundled=${out.bundled.skillVersion || '-'}`);
1536
1538
  console.log(` canonical=${out.canonical.path}`);
1537
- console.log(` installed=${out.canonical.exists} installedVersion=${out.canonical.installedVersion || '-'} ` +
1538
- `current=${out.canonical.current}`);
1539
+ console.log(` installed=${out.canonical.exists} ` +
1540
+ `${out.canonical.installedVersion || '—'} → ${out.bundled.skillVersion} ` +
1541
+ `state=${out.canonical.state}`);
1542
+ if (out.operation?.after) {
1543
+ console.log(` ${out.operation.before.installedVersion || '—'}(${out.operation.before.state})` +
1544
+ ` → ${out.operation.after.installedVersion}(${out.operation.after.state})`);
1545
+ }
1539
1546
  if (out.operation)
1540
1547
  console.log(` delegated: ${out.operation.command}`);
1541
1548
  for (const client of out.clients) {