@xdxer/dingtalk-agent 0.1.4-beta.11 → 0.1.4-beta.12

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,22 @@
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.12 - 2026-07-19
6
+
7
+ ### Added
8
+
9
+ - The `multica-fde-external` skill is bundled verbatim from the pre-fde registry into the `multica-dingtalk` platform pack: a self-contained Python wrapper (stdlib only, Python ≥3.9) covering the full delivery chain — workspace/runtime/agent provisioning, skill push/pull, DingTalk robot and account binding, the `chat-send --wait` DingTalk-free test channel, `task-trace` observability, autopilot scheduling, and `agent-check` health checks. Selecting `multica-dingtalk` now installs three platform skills.
10
+ - `agent-platform show|use` emit advisory readiness checks for the selected platform: multica CLI presence (with the official install command), login state (with `multica login --server-url <endpoint>` guidance), and a proxy-environment warning with an `env -u` workaround.
11
+
12
+ ### Changed
13
+
14
+ - Compose Skill 0.6.0: the workflow now requires offering the user a managed-agent-platform choice (multica-dingtalk / deap coming-soon / local-only) before assembly, guides through readiness gaps, and documents the two paths to a DingTalk robot — local `dta listen` streaming debugging versus publishing through Multica (`dingtalk-begin`/`dingtalk-bind` plus the `chat-send --wait` acceptance channel). Creating a bare DingTalk app via `dws dev app robot submit` without asking the user is explicitly forbidden.
15
+ - Contract case 61 now verifies the three-skill lazy install for `multica-dingtalk`.
16
+
17
+ ### Release boundary
18
+
19
+ - Distribution is limited to the public npm `beta` dist-tag, a Git tag, and a GitHub pre-release. No robot, webhook, schedule, Trigger, or DingTalk/Multica side effect is created by the release itself. The end-to-end evidence recorded for this line was produced on the dedicated pre environment with explicit user authorization.
20
+
5
21
  ## 0.1.4-beta.11 - 2026-07-19
6
22
 
7
23
  ### Added
package/README.md CHANGED
@@ -341,7 +341,7 @@ dta workspace status multica-dev --json
341
341
 
342
342
  回读证据只保存最小资源事实和原始输出 hash,不保存 Token、邮箱、Server URL 明文、Agent instructions/runtime config 或 Skill content。身份、默认 Workspace、scope、稳定 ID、Skill 唯一性或 evidence hash 任一不符都 fail closed;成功后 state 仍是 `verifying`,`readyForApply=true` 只表示可以进入 W4 规划。
343
343
 
344
- 部署、晋级等平台命令先经过 managed agent platform 归属门禁。工作区用 `dta agent-platform use multica-dingtalk` 声明归属(写入 `dingtalk-agent.json#agentPlatform` 或 `.dingtalk-agent/agent-platform.json`,也可用 `DTA_AGENT_PLATFORM` 环境变量覆盖),声明时才按需安装该平台的技能包(deploy 与 boot-multica);`dta agent-platform list` 展示注册表——当前已支持 `multica-dingtalk`,`deap` 敬请期待。未归属、未知或 coming-soon 平台上的 `deploy`/`promote`/`observe` 一律 fail-closed;已声明 Multica Provider 的项目可被自动推断为 `multica-dingtalk`。后续所有平台相关的方法学都随对应平台的技能包分发,不进入 CLI 与基础行为。
344
+ 部署、晋级等平台命令先经过 managed agent platform 归属门禁。工作区用 `dta agent-platform use multica-dingtalk` 声明归属(写入 `dingtalk-agent.json#agentPlatform` 或 `.dingtalk-agent/agent-platform.json`,也可用 `DTA_AGENT_PLATFORM` 环境变量覆盖),声明时才按需安装该平台的技能包(deploy、boot-multicamultica-fde-external 平台运维工具);`dta agent-platform list` 展示注册表——当前已支持 `multica-dingtalk`,`deap` 敬请期待。`agent-platform show/use` 同时输出平台工具链 readiness(multica CLI 未装、未登录或存在代理变量时给出可执行的安装/登录/绕代理提示);未归属、未知或 coming-soon 平台上的 `deploy`/`promote`/`observe` 一律 fail-closed;已声明 Multica Provider 的项目可被自动推断为 `multica-dingtalk`。后续所有平台相关的方法学都随对应平台的技能包分发,不进入 CLI 与基础行为。
345
345
 
346
346
  W4 用 `dta deploy` 把这份可信 inspection 变成 plan-bound apply。dry-run 固定 profile/workspace/runtime/Agent/Definition/Skill tree hash 和 forward/rollback 最大写预算,apply 前重新回读同一条 ID 链;只有显式 `--plan-id` 与 `--yes` 才会创建或更新。CLI 会精确同步受管 Boot、Basic、Role Skill 完整树和唯一 assignment,再通过专用 Issue 回读 Skill tool trace 与精确 JSON response;两个证据都通过才从 `verifying` 进入 `ready`:
347
347
 
@@ -39,7 +39,7 @@ import { checkpointTask, showTaskCheckpoint } from '../src/memory/task-checkpoin
39
39
  import { upsertOperationalMemory } from '../src/memory/operational.js';
40
40
  import { proposeMemoryCandidate, publishMemoryCandidate, reviewMemoryCandidate, showMemoryCandidate, } from '../src/memory/candidates.js';
41
41
  import { installBundledSkills, installGlobalSkill, skillStatus, skillSuiteStatus, uninstallBundledSkills, uninstallGlobalSkill, upgradeBundledSkills, upgradeGlobalSkill, } from '../src/skill-manager.js';
42
- import { MANAGED_AGENT_PLATFORMS, requireSupportedAgentPlatform, resolveAgentPlatform, statusLabel as platformStatusLabel, useAgentPlatform, } from '../src/agent-platform.js';
42
+ import { agentPlatformReadiness, MANAGED_AGENT_PLATFORMS, requireSupportedAgentPlatform, resolveAgentPlatform, statusLabel as platformStatusLabel, useAgentPlatform, } from '../src/agent-platform.js';
43
43
  const PACKAGE_ROOT = resolvePackageRoot(import.meta.url);
44
44
  const PACKAGE_JSON = JSON.parse(readFileSync(join(PACKAGE_ROOT, 'package.json'), 'utf8'));
45
45
  // ROOT = **你的工作区**(当前目录),不是包所在的目录。
@@ -739,10 +739,13 @@ async function main() {
739
739
  if (positionals.length)
740
740
  fail('agent-platform show 不接受位置参数');
741
741
  const out = resolveAgentPlatform(PROJECT_START);
742
+ const readiness = out.definition ? agentPlatformReadiness(out.definition.name) : [];
742
743
  if (o.json)
743
- console.log(JSON.stringify(out, null, 2));
744
- else
744
+ console.log(JSON.stringify({ ...out, readiness }, null, 2));
745
+ else {
745
746
  printAgentPlatformResolution(out);
747
+ printAgentPlatformReadiness(readiness);
748
+ }
746
749
  return;
747
750
  }
748
751
  if (sub === 'use') {
@@ -751,8 +754,9 @@ async function main() {
751
754
  const out = useAgentPlatform(PROJECT_START, positionals[0], {
752
755
  packageRoot: PACKAGE_ROOT, installSkills: !o['no-install'],
753
756
  });
757
+ const readiness = out.definition ? agentPlatformReadiness(out.definition.name) : [];
754
758
  if (o.json)
755
- console.log(JSON.stringify(out, null, 2));
759
+ console.log(JSON.stringify({ ...out, readiness }, null, 2));
756
760
  else {
757
761
  console.log(`✅ 工作区已归属 ${out.definition?.label}(写入 ${out.written})`);
758
762
  for (const install of out.skillInstalls)
@@ -762,6 +766,7 @@ async function main() {
762
766
  ? ` 已跳过平台技能包安装(--no-install):${out.definition.skills.join(', ')}`
763
767
  : ' 该平台无需额外技能包。');
764
768
  }
769
+ printAgentPlatformReadiness(readiness);
765
770
  }
766
771
  return;
767
772
  }
@@ -1463,6 +1468,13 @@ function printAgentPlatformResolution(out) {
1463
1468
  if (known?.skills.length)
1464
1469
  console.log(` 技能包: ${known.skills.join(', ')}`);
1465
1470
  }
1471
+ function printAgentPlatformReadiness(checks) {
1472
+ for (const check of checks) {
1473
+ console.log(` ${check.ok ? '✅' : '⚠️'} ${check.summary}`);
1474
+ if (check.hint)
1475
+ console.log(` ${check.hint}`);
1476
+ }
1477
+ }
1466
1478
  function printSkillStatus(out, action, dryRun) {
1467
1479
  const prefix = dryRun ? 'DRY-RUN' : '✅';
1468
1480
  const verb = action === 'status' ? '全局 Skill 状态' : `skill ${action}`;