@xdxer/dingtalk-agent 0.1.4-beta.11 → 0.1.4-beta.13
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 +29 -0
- package/README.en.md +1 -1
- package/README.md +15 -16
- package/dist/bin/dingtalk-agent.js +43 -10
- package/dist/bin/dingtalk-agent.js.map +1 -1
- package/dist/src/agent-audit.js +3 -2
- package/dist/src/agent-audit.js.map +1 -1
- package/dist/src/agent-enhance.js +3 -2
- package/dist/src/agent-enhance.js.map +1 -1
- package/dist/src/agent-platform.js +82 -4
- package/dist/src/agent-platform.js.map +1 -1
- package/dist/src/development-workspace.js +3 -1
- package/dist/src/development-workspace.js.map +1 -1
- package/dist/src/multica-deploy.js +2 -1
- package/dist/src/multica-deploy.js.map +1 -1
- package/dist/src/opencode-evals.js +2 -1
- package/dist/src/opencode-evals.js.map +1 -1
- package/dist/src/remote-state-evals.js +2 -1
- package/dist/src/remote-state-evals.js.map +1 -1
- package/dist/src/robot-evals.js +2 -1
- package/dist/src/robot-evals.js.map +1 -1
- package/dist/src/skill-manager.js +18 -3
- package/dist/src/skill-manager.js.map +1 -1
- package/dist/src/skills.js +2 -1
- package/dist/src/skills.js.map +1 -1
- package/docs/INSTALLATION.md +2 -2
- package/lab/agent-eval/completion-gate-regression.json +6 -6
- package/package.json +7 -6
- package/skills/README.md +23 -0
- package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/SKILL.md +33 -7
- package/skills/{dingtalk-agent-deploy → platforms/multica-dingtalk/dingtalk-agent-deploy-multica}/SKILL.md +1 -1
- package/skills/platforms/multica-dingtalk/multica-external/SKILL.md +280 -0
- package/skills/platforms/multica-dingtalk/multica-external/scripts/bootstrap.sh +78 -0
- package/skills/platforms/multica-dingtalk/multica-external/scripts/multica_ext.py +1178 -0
- /package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/assets/AGENTS.template.md +0 -0
- /package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/assets/agent.bindings.dingtalk-doc.template.json +0 -0
- /package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/assets/agent.bindings.local.template.json +0 -0
- /package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/assets/opencode.template.json +0 -0
- /package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/assets/role-skill.template.md +0 -0
- /package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/evals/evals.json +0 -0
- /package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/references/agent-definition-contract.md +0 -0
- /package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/references/opencode-host-contract.md +0 -0
- /package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/references/storage-routing.md +0 -0
- /package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/SKILL.md +0 -0
- /package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/assets/eval-catalog.template.json +0 -0
- /package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/evals/evals.json +0 -0
- /package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/references/eval-topology.md +0 -0
- /package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/references/evidence-contract.md +0 -0
- /package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/references/scenario-taxonomy.md +0 -0
- /package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/references/storage-modes.md +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/SKILL.md +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/assets/memory-candidate-proposal.json +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/assets/task-checkpoint.json +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/action-contract.md +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/event-to-behavior.md +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/memory-and-evolution.md +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/perception-and-gates.md +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/runtime-modes.md +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/task-lifecycle.md +0 -0
- /package/skills/{dingtalk-agent-boot-multica → platforms/multica-dingtalk/dingtalk-agent-boot-multica}/SKILL.md +0 -0
- /package/skills/{dingtalk-agent-deploy → platforms/multica-dingtalk/dingtalk-agent-deploy-multica}/references/multica-deployment-contract.md +0 -0
- /package/skills/{dingtalk-agent-deploy → platforms/multica-dingtalk/dingtalk-agent-deploy-multica}/references/promotion-observation-contract.md +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,35 @@
|
|
|
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.13 - 2026-07-19
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- Bundled skills reorganize by platform: `skills/core/` carries the universal suite (basic-behavior, compose, eval) and `skills/platforms/multica-dingtalk/` carries the platform pack, with a `deap` coming-soon placeholder; all code resolves sources through the `bundledSkillPath` registry. Installed canonical layout stays flat.
|
|
10
|
+
- Platform skill names disclose their platform: `dingtalk-agent-deploy` → `dingtalk-agent-deploy-multica`, `multica-fde-external` → `multica-external`. The platform registry binds roles to exact skills (deploy/boot/ops); `agent-platform list|show` display the mapping, `platformSkillForRole` exposes it programmatically, and `deploy`/`promote`/`observe` disclose the carrying skill on stderr.
|
|
11
|
+
- `agent-platform show|use` list local Multica login targets (profile, server URL, workspace — never tokens), and compose 0.8.0 makes user confirmation of endpoint/workspace/agent-name the first hard rule of the Multica publish chain, alongside plain-Markdown instructions with readback, empty `--model` by default, mandatory basic-behavior push/attach with a boot declaration, two-probe chat acceptance, and the dws-first robot-binding priority (list or user-confirmed create + `dingtalk-bind`, reuse existing installs, scan-QR as fallback, never a blocking `--wait`).
|
|
12
|
+
- The contract runner gains `--only=<ids>` for targeted verification; AGENTS.md reserves the full 61-scenario suite and `release:check` for deep regression and release acceptance.
|
|
13
|
+
|
|
14
|
+
### Release boundary
|
|
15
|
+
|
|
16
|
+
- Distribution is limited to the public npm `beta` dist-tag, a Git tag, and a GitHub pre-release. The renamed skill was also pushed to the dedicated pre-environment registry with explicit user authorization; no robot, webhook, schedule, Trigger, or other DingTalk/Multica side effect is created. Live waivers from beta.9 remain unchanged.
|
|
17
|
+
|
|
18
|
+
## 0.1.4-beta.12 - 2026-07-19
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
|
|
22
|
+
- 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.
|
|
23
|
+
- `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.
|
|
24
|
+
|
|
25
|
+
### Changed
|
|
26
|
+
|
|
27
|
+
- 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.
|
|
28
|
+
- Contract case 61 now verifies the three-skill lazy install for `multica-dingtalk`.
|
|
29
|
+
|
|
30
|
+
### Release boundary
|
|
31
|
+
|
|
32
|
+
- 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.
|
|
33
|
+
|
|
5
34
|
## 0.1.4-beta.11 - 2026-07-19
|
|
6
35
|
|
|
7
36
|
### Added
|
package/README.en.md
CHANGED
|
@@ -204,7 +204,7 @@ dta deploy --workspace multica-dev --retire --dry-run --json
|
|
|
204
204
|
dta deploy --workspace multica-dev --retire --plan-id <plan-id> --yes --json
|
|
205
205
|
```
|
|
206
206
|
|
|
207
|
-
A timed-out write persists its operation/Receipt and enters `reconciling`; status performs independent reads rather than retrying or rolling back an ambiguous action. If Agent create returned no ID, recovery reads candidates by stable ID and binds only one exact instructions/runtime fingerprint match, never a display name alone. Confirmed failures roll back only changes managed by the current operation. Retire archives the exact Agent without deleting Skills, Issues, semantic storage, or evidence history. Deploy never creates a robot, webhook, schedule, or other Trigger. The `dingtalk-agent-deploy` Skill only guides these stable CLI calls; it does not write through Multica directly or retain credentials.
|
|
207
|
+
A timed-out write persists its operation/Receipt and enters `reconciling`; status performs independent reads rather than retrying or rolling back an ambiguous action. If Agent create returned no ID, recovery reads candidates by stable ID and binds only one exact instructions/runtime fingerprint match, never a display name alone. Confirmed failures roll back only changes managed by the current operation. Retire archives the exact Agent without deleting Skills, Issues, semantic storage, or evidence history. Deploy never creates a robot, webhook, schedule, or other Trigger. The `dingtalk-agent-deploy-multica` Skill only guides these stable CLI calls; it does not write through Multica directly or retain credentials.
|
|
208
208
|
|
|
209
209
|
W5 links designated W2 Eval evidence to a W4 Receipt as an explicit Promotion chain. A policy freezes source/target Workspaces, suite, minimum runs, required cases, and evidence surfaces. Dry-run recomputes the Definition/Skill, managed Workspace, plan/suite/report, and deployment hashes without Provider calls. Only the current planId plus explicit confirmation may delegate to W4 deploy. The resulting Promotion Receipt binds source, Eval, the historical deployment Receipt, and the final observed hash.
|
|
210
210
|
|
package/README.md
CHANGED
|
@@ -121,7 +121,7 @@ npx skills add D1-2004/dingtalk-agent \
|
|
|
121
121
|
从本地 checkout 安装则使用:
|
|
122
122
|
|
|
123
123
|
```bash
|
|
124
|
-
npx skills add ./skills/dingtalk-basic-behavior \
|
|
124
|
+
npx skills add ./skills/core/dingtalk-basic-behavior \
|
|
125
125
|
--global --yes --agent claude-code --agent codex --agent opencode
|
|
126
126
|
```
|
|
127
127
|
|
|
@@ -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 与
|
|
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 与 multica-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
|
|
|
@@ -355,7 +355,7 @@ dta deploy --workspace multica-dev --retire --dry-run --json
|
|
|
355
355
|
dta deploy --workspace multica-dev --retire --plan-id <plan-id> --yes --json
|
|
356
356
|
```
|
|
357
357
|
|
|
358
|
-
写命令超时会保存 operation/Receipt 并进入 `reconciling`;后续 status 只独立回读,不盲重试或把不确定操作回滚。Agent create 若没返回 ID,只能逐个读取稳定候选 ID,并在唯一完整 instructions/runtime 指纹匹配时恢复绑定,不能按显示名认领。确认失败只回滚当前 operation 的受管修改;retire 只归档精确 Agent,不删除 Skill、Issue、语义存储或历史证据。部署不创建机器人、Webhook、定时器或其他 Trigger。`dingtalk-agent-deploy` Skill 只辅导调用这组稳定 CLI,不直接调用 Multica 写命令,也不保存登录凭据。
|
|
358
|
+
写命令超时会保存 operation/Receipt 并进入 `reconciling`;后续 status 只独立回读,不盲重试或把不确定操作回滚。Agent create 若没返回 ID,只能逐个读取稳定候选 ID,并在唯一完整 instructions/runtime 指纹匹配时恢复绑定,不能按显示名认领。确认失败只回滚当前 operation 的受管修改;retire 只归档精确 Agent,不删除 Skill、Issue、语义存储或历史证据。部署不创建机器人、Webhook、定时器或其他 Trigger。`dingtalk-agent-deploy-multica` Skill 只辅导调用这组稳定 CLI,不直接调用 Multica 写命令,也不保存登录凭据。
|
|
359
359
|
|
|
360
360
|
W5 把 W2 的指定 Eval evidence 与 W4 Receipt 串成显式 Promotion 链。Policy 冻结源/目标 Workspace、suite、最少 runs、必须 case 和四个证据面;dry-run 重算 Definition/Skill、managed Workspace、plan/suite/report 与 deployment hash,零 Provider 调用。只有当前 planId 和显式确认才委托 W4 deploy,Promotion Receipt 会绑定 source、Eval、历史 deployment Receipt 与最终 observed hash。
|
|
361
361
|
|
|
@@ -708,19 +708,18 @@ npm run eval:contract
|
|
|
708
708
|
## 项目结构
|
|
709
709
|
|
|
710
710
|
```text
|
|
711
|
-
bin/
|
|
712
|
-
src/
|
|
713
|
-
skills/
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
lab/
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
.github/ CI 与协作模板
|
|
711
|
+
bin/ CLI composition root(唯一入口;业务规则在 src/)
|
|
712
|
+
src/ TypeScript 运行时:事务边界、双半闸门、平台注册表、Provider
|
|
713
|
+
skills/ 内置 Skill,两层组织(详见 skills/README.md)
|
|
714
|
+
core/ 通用套装:dingtalk-basic-behavior 基础行为 · dingtalk-agent-compose 装配 · dingtalk-agent-eval 评测
|
|
715
|
+
platforms/ 按 Managed Agent Platform 装填:multica-dingtalk/(deploy · boot-multica · fde-external)· deap/(敬请期待)
|
|
716
|
+
templates/ dta init 落盘的行为包与场域策略模板
|
|
717
|
+
examples/ 可复制的岗位 Agent kit(FDE 教练、发布经理)
|
|
718
|
+
evals/ L0 确定性合同评测与 shadow runner(61 场景)
|
|
719
|
+
lab/ L1–L4 联调与 Live 评测控制面(manifest、schema、runbook)
|
|
720
|
+
scripts/ 构建后处理与发布验收(release-readiness)
|
|
721
|
+
docs/ 架构、Schema、决策与实施计划
|
|
722
|
+
.github/ CI 与协作模板
|
|
724
723
|
```
|
|
725
724
|
|
|
726
725
|
## 深入阅读
|
|
@@ -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, multicaTargets, platformSkillForRole, 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 = **你的工作区**(当前目录),不是包所在的目录。
|
|
@@ -233,7 +233,8 @@ async function main() {
|
|
|
233
233
|
return;
|
|
234
234
|
}
|
|
235
235
|
if (cmd === 'deploy') {
|
|
236
|
-
requireSupportedAgentPlatform('deploy', PROJECT_START);
|
|
236
|
+
const platformForDeploy = requireSupportedAgentPlatform('deploy', PROJECT_START);
|
|
237
|
+
disclosePlatformSkill(platformForDeploy, 'deploy');
|
|
237
238
|
const { values: o, positionals } = parseArgs({
|
|
238
239
|
args: argv.slice(1), allowPositionals: true,
|
|
239
240
|
options: {
|
|
@@ -309,7 +310,8 @@ async function main() {
|
|
|
309
310
|
return;
|
|
310
311
|
}
|
|
311
312
|
if (cmd === 'promote') {
|
|
312
|
-
requireSupportedAgentPlatform('promote', PROJECT_START);
|
|
313
|
+
const platformForPromote = requireSupportedAgentPlatform('promote', PROJECT_START);
|
|
314
|
+
disclosePlatformSkill(platformForPromote, 'deploy');
|
|
313
315
|
const { values: o, positionals } = parseArgs({
|
|
314
316
|
args: argv.slice(1), allowPositionals: true,
|
|
315
317
|
options: {
|
|
@@ -369,7 +371,8 @@ async function main() {
|
|
|
369
371
|
return;
|
|
370
372
|
}
|
|
371
373
|
if (cmd === 'observe') {
|
|
372
|
-
requireSupportedAgentPlatform('observe', PROJECT_START);
|
|
374
|
+
const platformForObserve = requireSupportedAgentPlatform('observe', PROJECT_START);
|
|
375
|
+
disclosePlatformSkill(platformForObserve, 'deploy');
|
|
373
376
|
const { values: o, positionals } = parseArgs({
|
|
374
377
|
args: argv.slice(1), allowPositionals: true,
|
|
375
378
|
options: {
|
|
@@ -739,10 +742,15 @@ async function main() {
|
|
|
739
742
|
if (positionals.length)
|
|
740
743
|
fail('agent-platform show 不接受位置参数');
|
|
741
744
|
const out = resolveAgentPlatform(PROJECT_START);
|
|
745
|
+
const readiness = out.definition ? agentPlatformReadiness(out.definition.name) : [];
|
|
746
|
+
const targets = out.definition?.name === 'multica-dingtalk' ? multicaTargets() : [];
|
|
742
747
|
if (o.json)
|
|
743
|
-
console.log(JSON.stringify(out, null, 2));
|
|
744
|
-
else
|
|
748
|
+
console.log(JSON.stringify({ ...out, readiness, targets }, null, 2));
|
|
749
|
+
else {
|
|
745
750
|
printAgentPlatformResolution(out);
|
|
751
|
+
printAgentPlatformReadiness(readiness);
|
|
752
|
+
printMulticaTargets(targets);
|
|
753
|
+
}
|
|
746
754
|
return;
|
|
747
755
|
}
|
|
748
756
|
if (sub === 'use') {
|
|
@@ -751,17 +759,21 @@ async function main() {
|
|
|
751
759
|
const out = useAgentPlatform(PROJECT_START, positionals[0], {
|
|
752
760
|
packageRoot: PACKAGE_ROOT, installSkills: !o['no-install'],
|
|
753
761
|
});
|
|
762
|
+
const readiness = out.definition ? agentPlatformReadiness(out.definition.name) : [];
|
|
763
|
+
const targets = out.definition?.name === 'multica-dingtalk' ? multicaTargets() : [];
|
|
754
764
|
if (o.json)
|
|
755
|
-
console.log(JSON.stringify(out, null, 2));
|
|
765
|
+
console.log(JSON.stringify({ ...out, readiness, targets }, null, 2));
|
|
756
766
|
else {
|
|
757
767
|
console.log(`✅ 工作区已归属 ${out.definition?.label}(写入 ${out.written})`);
|
|
758
768
|
for (const install of out.skillInstalls)
|
|
759
769
|
printSkillStatus(install, 'install', false);
|
|
760
770
|
if (!out.skillInstalls.length) {
|
|
761
771
|
console.log(out.definition?.skills.length
|
|
762
|
-
? ` 已跳过平台技能包安装(--no-install):${out.definition.skills.join(', ')}`
|
|
772
|
+
? ` 已跳过平台技能包安装(--no-install):${out.definition.skills.map((item) => item.name).join(', ')}`
|
|
763
773
|
: ' 该平台无需额外技能包。');
|
|
764
774
|
}
|
|
775
|
+
printAgentPlatformReadiness(readiness);
|
|
776
|
+
printMulticaTargets(targets);
|
|
765
777
|
}
|
|
766
778
|
return;
|
|
767
779
|
}
|
|
@@ -1447,7 +1459,7 @@ function printAgentPlatform(platform) {
|
|
|
1447
1459
|
console.log(`${platform.status === 'supported' ? '✅' : '⏳'} ${platform.name} · ${platform.label} · ${platformStatusLabel(platform.status)}`);
|
|
1448
1460
|
console.log(` ${platform.description}`);
|
|
1449
1461
|
if (platform.skills.length)
|
|
1450
|
-
console.log(` 技能包: ${platform.skills.join('
|
|
1462
|
+
console.log(` 技能包: ${platform.skills.map((item) => `${item.role}→${item.name}`).join(' · ')}`);
|
|
1451
1463
|
if (platform.commands.length)
|
|
1452
1464
|
console.log(` 平台命令: ${platform.commands.map((item) => `dta ${item}`).join(' · ')}`);
|
|
1453
1465
|
}
|
|
@@ -1461,7 +1473,28 @@ function printAgentPlatformResolution(out) {
|
|
|
1461
1473
|
console.log(`${known ? '✅' : '❌'} 当前 platform: ${out.platform}${known ? ` · ${known.label} · ${platformStatusLabel(known.status)}` : '(未知)'}`);
|
|
1462
1474
|
console.log(` 来源: ${out.source}${out.file ? ` · ${out.file}` : ''}`);
|
|
1463
1475
|
if (known?.skills.length)
|
|
1464
|
-
console.log(` 技能包: ${known.skills.join('
|
|
1476
|
+
console.log(` 技能包: ${known.skills.map((item) => `${item.role}→${item.name}`).join(' · ')}`);
|
|
1477
|
+
}
|
|
1478
|
+
// 披露:dta 层平台命令关联到平台内确切的 Skill(诊断信息走 stderr,不污染 --json stdout)。
|
|
1479
|
+
function disclosePlatformSkill(resolution, role) {
|
|
1480
|
+
const skillName = resolution.definition ? platformSkillForRole(resolution.definition.name, role) : null;
|
|
1481
|
+
if (skillName)
|
|
1482
|
+
console.error(`提示: 平台 ${resolution.definition.name} 的该命令方法学由 Skill ${skillName} 承载`);
|
|
1483
|
+
}
|
|
1484
|
+
function printMulticaTargets(targets) {
|
|
1485
|
+
if (!targets.length)
|
|
1486
|
+
return;
|
|
1487
|
+
console.log(' 本机 Multica 登录目标(发布前必须与用户确认 endpoint 与 workspace):');
|
|
1488
|
+
for (const target of targets) {
|
|
1489
|
+
console.log(` - profile=${target.profile} · ${target.serverUrl}${target.workspaceId ? ` · workspace=${target.workspaceId}` : ''}`);
|
|
1490
|
+
}
|
|
1491
|
+
}
|
|
1492
|
+
function printAgentPlatformReadiness(checks) {
|
|
1493
|
+
for (const check of checks) {
|
|
1494
|
+
console.log(` ${check.ok ? '✅' : '⚠️'} ${check.summary}`);
|
|
1495
|
+
if (check.hint)
|
|
1496
|
+
console.log(` ${check.hint}`);
|
|
1497
|
+
}
|
|
1465
1498
|
}
|
|
1466
1499
|
function printSkillStatus(out, action, dryRun) {
|
|
1467
1500
|
const prefix = dryRun ? 'DRY-RUN' : '✅';
|