@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 +16 -0
- package/README.md +1 -1
- package/dist/bin/dingtalk-agent.js +16 -4
- package/dist/bin/dingtalk-agent.js.map +1 -1
- package/dist/src/agent-platform.js +47 -3
- package/dist/src/agent-platform.js.map +1 -1
- package/dist/src/skill-manager.js +2 -1
- package/dist/src/skill-manager.js.map +1 -1
- package/package.json +2 -1
- package/skills/dingtalk-agent-compose/SKILL.md +17 -7
- package/skills/multica-fde-external/SKILL.md +280 -0
- package/skills/multica-fde-external/scripts/bootstrap.sh +78 -0
- package/skills/multica-fde-external/scripts/multica_ext.py +1178 -0
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 与
|
|
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-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}`;
|