@xdxer/dingtalk-agent 0.1.4-beta.13 → 0.1.4-beta.15
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 +33 -0
- package/dist/bin/dingtalk-agent.js +41 -9
- package/dist/bin/dingtalk-agent.js.map +1 -1
- package/dist/src/agent-platform.js +68 -5
- package/dist/src/agent-platform.js.map +1 -1
- package/dist/src/development-workspace.js +4 -1
- package/dist/src/development-workspace.js.map +1 -1
- package/docs/schemas/project.schema.json +1 -0
- package/package.json +4 -1
- package/skills/core/dingtalk-agent-compose/SKILL.md +2 -2
- package/skills/platforms/deap/PLATFORM.md +3 -0
- package/skills/platforms/deap/README.md +3 -0
- package/skills/platforms/multica-dingtalk/PLATFORM.md +38 -0
- package/skills/platforms/multica-dingtalk/multica-external/scripts/multica_ext.py +2 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,39 @@
|
|
|
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.15 - 2026-07-19
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Multica endpoint resolution and display: `agent-platform show|use` now print the resolved endpoint and its source unconditionally — even when multica is not installed or logged in — so you always know where you'd connect and how to switch. `resolveEndpoint()` uses a single source of truth aligned with the executor (`multica_ext.py` reads `MULTICA_SERVER_URL`/`--profile`): `MULTICA_SERVER_URL` env > project config (`dingtalk-agent.json#multicaEndpoint` or `.dingtalk-agent/agent-platform.json.endpoint`) > exactly one logged-in profile's server_url (multiple = ambiguous, never auto-picked) > the platform's suggested endpoint (pre, flagged unconfirmed, never a silent direct-connect). The login readiness hint emits a full copyable `multica login --server-url <resolved> --token ...` with the source annotated.
|
|
10
|
+
- The project manifest gains an optional `multicaEndpoint` field (schema + validation) for a persistent per-project endpoint override.
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- Scattered pre-fde endpoint literals in `PLATFORM.md` and the compose skill now point to `dta agent-platform show` as the single source instead of hardcoding the URL, so docs cannot drift from the resolver.
|
|
15
|
+
|
|
16
|
+
### Release boundary
|
|
17
|
+
|
|
18
|
+
- Distribution is limited to the public npm `beta` dist-tag, a Git tag, and a GitHub pre-release. The suggested endpoint is an explicitly-unconfirmed hint only; the executor stays fail-closed and deploy-time confirmation is unchanged. Live waivers from beta.9 remain unchanged.
|
|
19
|
+
|
|
20
|
+
## 0.1.4-beta.14 - 2026-07-19
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
|
|
24
|
+
- Per-platform `PLATFORM.md`: switching to a platform now loads a document explaining what each bundled skill does. `agent-platform use|show` print the doc path, and `list|show` display every skill's role and purpose (the registry skill bindings gained a `purpose` field). `multica-dingtalk`'s doc covers the three skills by role, the delivery chain, readiness, the dws-first robot-binding priority (including `--allow-unbound` for connect-to-customers mode), DWS-conversation acceptance, and both unbind paths; `deap` is a coming-soon stub.
|
|
25
|
+
|
|
26
|
+
### Fixed
|
|
27
|
+
|
|
28
|
+
- `multica-external`'s `dingtalk-bind` now sends `robot_code` (defaulting to `client_id`, with a `--robot-code` flag). Manual robot binding previously failed with `400 robot_code is required`, blocking real DingTalk robot delivery; a live 10-chain regression on the pre environment now confirms real DWS→robot→agent replies.
|
|
29
|
+
|
|
30
|
+
### Validated
|
|
31
|
+
|
|
32
|
+
- End-to-end regression on the dedicated pre environment (authorized): from-zero token login, ten role-diverse agents each carrying basic-behavior (verified silent on un-@mentioned group messages), DWS-created robots bound via the dws path with credentials, and acceptance by real DWS conversation. Five robots were reused via revoke+rebind, confirming messages reroute to the newly bound agent. Both unbind APIs (robot `dingtalk-revoke`, account `dingtalk-account-unbind`) were confirmed.
|
|
33
|
+
|
|
34
|
+
### Release boundary
|
|
35
|
+
|
|
36
|
+
- Distribution is limited to the public npm `beta` dist-tag, a Git tag, and a GitHub pre-release. The regression's platform side effects (agents, robot bindings, messages) occurred only on the user-authorized pre environment with dedicated test objects. Live waivers from beta.9 remain unchanged.
|
|
37
|
+
|
|
5
38
|
## 0.1.4-beta.13 - 2026-07-19
|
|
6
39
|
|
|
7
40
|
### Changed
|
|
@@ -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 { agentPlatformReadiness, MANAGED_AGENT_PLATFORMS, multicaTargets, platformSkillForRole, requireSupportedAgentPlatform, resolveAgentPlatform, statusLabel as platformStatusLabel, useAgentPlatform, } from '../src/agent-platform.js';
|
|
42
|
+
import { agentPlatformReadiness, MANAGED_AGENT_PLATFORMS, multicaTargets, platformDocPath, platformSkillForRole, requireSupportedAgentPlatform, resolveAgentPlatform, resolveEndpoint, 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 = **你的工作区**(当前目录),不是包所在的目录。
|
|
@@ -742,14 +742,18 @@ async function main() {
|
|
|
742
742
|
if (positionals.length)
|
|
743
743
|
fail('agent-platform show 不接受位置参数');
|
|
744
744
|
const out = resolveAgentPlatform(PROJECT_START);
|
|
745
|
-
const readiness = out.definition ? agentPlatformReadiness(out.definition.name) : [];
|
|
745
|
+
const readiness = out.definition ? agentPlatformReadiness(out.definition.name, process.env, undefined, PROJECT_START) : [];
|
|
746
746
|
const targets = out.definition?.name === 'multica-dingtalk' ? multicaTargets() : [];
|
|
747
|
+
const endpoint = out.definition ? resolveEndpoint(out.definition.name, PROJECT_START) : null;
|
|
748
|
+
const doc = out.definition ? platformDocPath(PACKAGE_ROOT, out.definition.name) : null;
|
|
747
749
|
if (o.json)
|
|
748
|
-
console.log(JSON.stringify({ ...out, readiness, targets }, null, 2));
|
|
750
|
+
console.log(JSON.stringify({ ...out, endpoint, readiness, targets, doc }, null, 2));
|
|
749
751
|
else {
|
|
750
752
|
printAgentPlatformResolution(out);
|
|
753
|
+
printEndpoint(endpoint);
|
|
751
754
|
printAgentPlatformReadiness(readiness);
|
|
752
755
|
printMulticaTargets(targets);
|
|
756
|
+
printPlatformDoc(out.definition?.name);
|
|
753
757
|
}
|
|
754
758
|
return;
|
|
755
759
|
}
|
|
@@ -759,10 +763,12 @@ async function main() {
|
|
|
759
763
|
const out = useAgentPlatform(PROJECT_START, positionals[0], {
|
|
760
764
|
packageRoot: PACKAGE_ROOT, installSkills: !o['no-install'],
|
|
761
765
|
});
|
|
762
|
-
const readiness = out.definition ? agentPlatformReadiness(out.definition.name) : [];
|
|
766
|
+
const readiness = out.definition ? agentPlatformReadiness(out.definition.name, process.env, undefined, PROJECT_START) : [];
|
|
763
767
|
const targets = out.definition?.name === 'multica-dingtalk' ? multicaTargets() : [];
|
|
768
|
+
const endpoint = out.definition ? resolveEndpoint(out.definition.name, PROJECT_START) : null;
|
|
769
|
+
const doc = out.definition ? platformDocPath(PACKAGE_ROOT, out.definition.name) : null;
|
|
764
770
|
if (o.json)
|
|
765
|
-
console.log(JSON.stringify({ ...out, readiness, targets }, null, 2));
|
|
771
|
+
console.log(JSON.stringify({ ...out, endpoint, readiness, targets, doc }, null, 2));
|
|
766
772
|
else {
|
|
767
773
|
console.log(`✅ 工作区已归属 ${out.definition?.label}(写入 ${out.written})`);
|
|
768
774
|
for (const install of out.skillInstalls)
|
|
@@ -772,8 +778,10 @@ async function main() {
|
|
|
772
778
|
? ` 已跳过平台技能包安装(--no-install):${out.definition.skills.map((item) => item.name).join(', ')}`
|
|
773
779
|
: ' 该平台无需额外技能包。');
|
|
774
780
|
}
|
|
781
|
+
printEndpoint(endpoint);
|
|
775
782
|
printAgentPlatformReadiness(readiness);
|
|
776
783
|
printMulticaTargets(targets);
|
|
784
|
+
printPlatformDoc(out.definition?.name);
|
|
777
785
|
}
|
|
778
786
|
return;
|
|
779
787
|
}
|
|
@@ -1458,8 +1466,8 @@ function printAgentEnhance(out) {
|
|
|
1458
1466
|
function printAgentPlatform(platform) {
|
|
1459
1467
|
console.log(`${platform.status === 'supported' ? '✅' : '⏳'} ${platform.name} · ${platform.label} · ${platformStatusLabel(platform.status)}`);
|
|
1460
1468
|
console.log(` ${platform.description}`);
|
|
1461
|
-
|
|
1462
|
-
console.log(`
|
|
1469
|
+
for (const skill of platform.skills)
|
|
1470
|
+
console.log(` 技能[${skill.role}] ${skill.name} —— ${skill.purpose}`);
|
|
1463
1471
|
if (platform.commands.length)
|
|
1464
1472
|
console.log(` 平台命令: ${platform.commands.map((item) => `dta ${item}`).join(' · ')}`);
|
|
1465
1473
|
}
|
|
@@ -1472,8 +1480,8 @@ function printAgentPlatformResolution(out) {
|
|
|
1472
1480
|
const known = out.definition;
|
|
1473
1481
|
console.log(`${known ? '✅' : '❌'} 当前 platform: ${out.platform}${known ? ` · ${known.label} · ${platformStatusLabel(known.status)}` : '(未知)'}`);
|
|
1474
1482
|
console.log(` 来源: ${out.source}${out.file ? ` · ${out.file}` : ''}`);
|
|
1475
|
-
|
|
1476
|
-
console.log(`
|
|
1483
|
+
for (const skill of known?.skills || [])
|
|
1484
|
+
console.log(` 技能[${skill.role}] ${skill.name} —— ${skill.purpose}`);
|
|
1477
1485
|
}
|
|
1478
1486
|
// 披露:dta 层平台命令关联到平台内确切的 Skill(诊断信息走 stderr,不污染 --json stdout)。
|
|
1479
1487
|
function disclosePlatformSkill(resolution, role) {
|
|
@@ -1481,6 +1489,30 @@ function disclosePlatformSkill(resolution, role) {
|
|
|
1481
1489
|
if (skillName)
|
|
1482
1490
|
console.error(`提示: 平台 ${resolution.definition.name} 的该命令方法学由 Skill ${skillName} 承载`);
|
|
1483
1491
|
}
|
|
1492
|
+
function printEndpoint(endpoint) {
|
|
1493
|
+
if (!endpoint)
|
|
1494
|
+
return;
|
|
1495
|
+
if (endpoint.source === 'ambiguous') {
|
|
1496
|
+
console.log(` Endpoint: 多个已登录目标未选定(${endpoint.candidates.join(' / ')})——` +
|
|
1497
|
+
`用 ${endpoint.envVar} 或指定 profile 明确选择`);
|
|
1498
|
+
return;
|
|
1499
|
+
}
|
|
1500
|
+
if (!endpoint.endpoint) {
|
|
1501
|
+
console.log(` Endpoint: 未解析——设 ${endpoint.envVar} 或登录 multica 后生效`);
|
|
1502
|
+
return;
|
|
1503
|
+
}
|
|
1504
|
+
const mark = endpoint.confirmed ? '✅' : '⚠️';
|
|
1505
|
+
const note = endpoint.confirmed ? '' : '(建议/未确认,deploy 前需显式确认是预发还是生产)';
|
|
1506
|
+
console.log(` ${mark} Endpoint: ${endpoint.endpoint} · 来源: ${endpoint.source}${note}`);
|
|
1507
|
+
console.log(` (切换:设 ${endpoint.envVar}=<url>、写 dingtalk-agent.json#multicaEndpoint、或登录对应 profile;无需改代码)`);
|
|
1508
|
+
}
|
|
1509
|
+
function printPlatformDoc(platformName) {
|
|
1510
|
+
if (!platformName)
|
|
1511
|
+
return;
|
|
1512
|
+
const path = platformDocPath(PACKAGE_ROOT, platformName);
|
|
1513
|
+
if (path)
|
|
1514
|
+
console.log(` 平台说明: ${path}\n (切换到该平台后请阅读,了解各技能用途与交付链)`);
|
|
1515
|
+
}
|
|
1484
1516
|
function printMulticaTargets(targets) {
|
|
1485
1517
|
if (!targets.length)
|
|
1486
1518
|
return;
|