@xdxer/dingtalk-agent 0.1.4-beta.9 → 0.1.4
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 +198 -0
- package/README.en.md +98 -326
- package/README.md +95 -673
- package/dist/bin/dingtalk-agent.js +200 -18
- package/dist/bin/dingtalk-agent.js.map +1 -1
- package/dist/src/agent-audit.js +1014 -89
- package/dist/src/agent-audit.js.map +1 -1
- package/dist/src/agent-enhance.js +41 -8
- package/dist/src/agent-enhance.js.map +1 -1
- package/dist/src/agent-platform.js +299 -0
- package/dist/src/agent-platform.js.map +1 -0
- package/dist/src/config.js +1 -7
- package/dist/src/config.js.map +1 -1
- package/dist/src/development-workspace.js +31 -5
- package/dist/src/development-workspace.js.map +1 -1
- package/dist/src/doctor.js +74 -15
- package/dist/src/doctor.js.map +1 -1
- package/dist/src/host-detect.js +146 -0
- package/dist/src/host-detect.js.map +1 -0
- package/dist/src/instruction-path.js +270 -0
- package/dist/src/instruction-path.js.map +1 -0
- package/dist/src/map.js +157 -0
- package/dist/src/map.js.map +1 -0
- package/dist/src/multica-deploy.js +78 -20
- package/dist/src/multica-deploy.js.map +1 -1
- package/dist/src/multica-provider.js +1 -1
- package/dist/src/multica-provider.js.map +1 -1
- package/dist/src/opencode-evals.js +710 -225
- package/dist/src/opencode-evals.js.map +1 -1
- package/dist/src/opencode-isolation.js +124 -0
- package/dist/src/opencode-isolation.js.map +1 -0
- package/dist/src/opencode-provider.js +1 -0
- package/dist/src/opencode-provider.js.map +1 -1
- package/dist/src/opencode-workspace.js +21 -10
- package/dist/src/opencode-workspace.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/setup.js +6 -5
- package/dist/src/setup.js.map +1 -1
- package/dist/src/skill-manager.js +141 -12
- 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/dist/src/types.js.map +1 -1
- package/dist/src/upgrade.js +23 -27
- package/dist/src/upgrade.js.map +1 -1
- package/dist/src/version.js +73 -0
- package/dist/src/version.js.map +1 -0
- package/docs/INSTALLATION.md +3 -3
- package/docs/assets/agent-delivery-lifecycle.svg +103 -0
- package/docs/schemas/agent-platform.schema.json +13 -0
- package/docs/schemas/project.schema.json +3 -0
- package/docs/schemas/release-readiness.schema.json +2 -1
- package/evals/README.md +17 -0
- package/lab/README.md +3 -3
- package/lab/agent-eval/catalog.json +5 -5
- package/lab/agent-eval/classic-failures.json +9 -9
- package/lab/agent-eval/completion-gate-regression.json +6 -6
- package/lab/agent-eval/remote-state-workspace/opencode.json +1 -1
- package/lab/agent-eval/workspace/AGENTS.md +1 -1
- package/lab/project-workspace/fake-multica-provider.mjs +17 -6
- package/lab/project-workspace/opencode-provider-suite.json +1 -1
- package/lab/robot-eval/suite.json +1 -1
- package/lab/robot-eval/workspace/AGENTS.md +1 -1
- package/lab/schemas/agent-eval-catalog.schema.json +1 -1
- package/package.json +13 -12
- package/skills/README.md +23 -0
- package/skills/core/dingtalk-agent-compose/SKILL.md +151 -0
- package/skills/core/dingtalk-agent-compose/assets/AGENTS.template.md +35 -0
- package/skills/core/dingtalk-agent-compose/assets/role-skill.template.md +32 -0
- package/skills/core/dingtalk-agent-compose/evals/evals.json +129 -0
- package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/references/agent-definition-contract.md +3 -3
- package/skills/core/dingtalk-agent-compose/references/host-loading-contract.md +58 -0
- package/skills/core/dingtalk-agent-compose/references/hosts/claude-code.md +48 -0
- package/skills/core/dingtalk-agent-compose/references/hosts/opencode.md +77 -0
- package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/SKILL.md +31 -7
- package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/assets/eval-catalog.template.json +1 -1
- package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/evals/evals.json +22 -0
- package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/references/eval-topology.md +14 -0
- package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/references/evidence-contract.md +21 -0
- package/skills/core/dingtalk-agent-eval/references/failure-to-case.md +35 -0
- package/skills/core/dingtalk-agent-eval/references/interactive-debug-channels.md +93 -0
- package/skills/core/dingtalk-agent-eval/references/local-connector-smoke.md +75 -0
- package/skills/core/dingtalk-basic-behavior/SKILL.md +87 -0
- package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/memory-and-evolution.md +12 -0
- package/skills/core/dingtalk-basic-behavior/references/risk-authority-and-privacy.md +62 -0
- package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/task-lifecycle.md +15 -3
- package/skills/core/dingtalk-basic-behavior/references/truth-and-recovery.md +65 -0
- package/skills/platforms/deap/PLATFORM.md +3 -0
- package/skills/platforms/deap/README.md +3 -0
- package/skills/platforms/multica-dingtalk/PLATFORM.md +40 -0
- package/skills/{dingtalk-agent-boot-multica → platforms/multica-dingtalk/dingtalk-agent-boot-multica}/SKILL.md +4 -4
- 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 +282 -0
- package/skills/platforms/multica-dingtalk/multica-external/scripts/bootstrap.sh +78 -0
- package/skills/platforms/multica-dingtalk/multica-external/scripts/multica_ext.py +1180 -0
- package/skills/dingtalk-agent-compose/SKILL.md +0 -110
- package/skills/dingtalk-agent-compose/assets/AGENTS.template.md +0 -26
- package/skills/dingtalk-agent-compose/assets/role-skill.template.md +0 -24
- package/skills/dingtalk-agent-compose/evals/evals.json +0 -94
- package/skills/dingtalk-agent-compose/references/opencode-host-contract.md +0 -65
- package/skills/dingtalk-basic-behavior/SKILL.md +0 -146
- /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/assets → core/dingtalk-agent-compose/assets/hosts/opencode}/opencode.template.json +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}/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}/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/perception-and-gates.md +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/runtime-modes.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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xdxer/dingtalk-agent",
|
|
3
|
-
"version": "0.1.4
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "钉钉数字员工的 Skill-first 行为范式:全局 Skill 决策,CLI 固定事务边界,Workspace 按需。",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"dingtalk",
|
|
@@ -17,19 +17,20 @@
|
|
|
17
17
|
"files": [
|
|
18
18
|
"dist/bin",
|
|
19
19
|
"dist/src",
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"skills/dingtalk-
|
|
25
|
-
"skills/dingtalk-
|
|
26
|
-
"skills/dingtalk
|
|
27
|
-
"skills/
|
|
28
|
-
"skills/
|
|
20
|
+
"skills/core/dingtalk-basic-behavior",
|
|
21
|
+
"skills/platforms/multica-dingtalk/dingtalk-agent-boot-multica",
|
|
22
|
+
"skills/core/dingtalk-agent-compose",
|
|
23
|
+
"skills/platforms/multica-dingtalk/dingtalk-agent-deploy-multica",
|
|
24
|
+
"skills/core/dingtalk-agent-eval",
|
|
25
|
+
"skills/platforms/multica-dingtalk/multica-external",
|
|
26
|
+
"skills/platforms/multica-dingtalk/PLATFORM.md",
|
|
27
|
+
"skills/platforms/deap/PLATFORM.md",
|
|
28
|
+
"skills/README.md",
|
|
29
29
|
"examples/agents",
|
|
30
30
|
"templates/behaviors",
|
|
31
31
|
"templates/fields",
|
|
32
32
|
"docs/architecture",
|
|
33
|
+
"docs/assets",
|
|
33
34
|
"docs/schemas",
|
|
34
35
|
"evals/baselines/2026-07-16/opencode-basic-skill-required-summary.json",
|
|
35
36
|
"evals/baselines/2026-07-16/opencode-basic-010-completion-summary.json",
|
|
@@ -56,9 +57,9 @@
|
|
|
56
57
|
"eval:behavior": "npm run build && node evals/run-shadow-evals.mjs",
|
|
57
58
|
"eval:opencode": "npm run build && node dist/bin/dingtalk-agent.js lab eval --engine opencode --workspace lab/robot-eval/workspace --suite lab/robot-eval/suite.json --lanes stateless --execute --yes --json",
|
|
58
59
|
"prepack": "npm run build",
|
|
59
|
-
"release:check": "node scripts/release-readiness.mjs --json"
|
|
60
|
+
"release:check": "node scripts/check-skill-versions.mjs && node scripts/release-readiness.mjs --json",
|
|
61
|
+
"check:skill-versions": "node scripts/check-skill-versions.mjs"
|
|
60
62
|
},
|
|
61
|
-
"dependencies": {},
|
|
62
63
|
"devDependencies": {
|
|
63
64
|
"@types/node": "^18.19.0",
|
|
64
65
|
"typescript": "^5.9.0"
|
package/skills/README.md
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# skills/ 目录约定
|
|
2
|
+
|
|
3
|
+
内置 Skill 按两层组织;安装到用户机器后 canonical 布局保持扁平(`~/.agents/skills/<name>/`),分层只存在于仓库与 npm 包内。
|
|
4
|
+
|
|
5
|
+
```text
|
|
6
|
+
skills/
|
|
7
|
+
├── core/ 所有钉钉数字员工通用,默认套装随 setup / skill install 安装
|
|
8
|
+
│ ├── dingtalk-basic-behavior/ 基础行为协议(响应资格、追问、确认、沉默、完成标准)
|
|
9
|
+
│ ├── dingtalk-agent-compose/ 创建/装配 Agent 的方法(含平台选择与发布链细则)
|
|
10
|
+
│ └── dingtalk-agent-eval/ 评测方法:场景分类、多证据断言、晋级门禁
|
|
11
|
+
└── platforms/ 按 Managed Agent Platform 分组,只在 `dta agent-platform use <name>` 时装填
|
|
12
|
+
├── multica-dingtalk/ 钉钉 Multica 托管平台
|
|
13
|
+
│ ├── dingtalk-agent-deploy-multica/ 经 dta 稳定 CLI 的受控部署、晋级与观测
|
|
14
|
+
│ ├── dingtalk-agent-boot-multica/ 部署产物在 Multica Host 内的启动协议
|
|
15
|
+
│ └── multica-external/ 平台运维执行体(纯 HTTPS,供给/绑定/观测/调度)
|
|
16
|
+
└── deap/ 敬请期待
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
规则:
|
|
20
|
+
|
|
21
|
+
- Skill 名字全局唯一,目录 basename 必须等于 frontmatter `name`;代码中一律通过 `src/skill-manager.ts` 的 `bundledSkillPath()` 解析路径,不要硬编码目录层级。
|
|
22
|
+
- 新平台 = `skills/platforms/<platform>/` 一个目录 + `src/agent-platform.ts` 注册表一条记录(status、skills、commands)。平台相关方法学只放平台包,不进 core、不进 CLI。
|
|
23
|
+
- core 变更走 `npm run eval:contract` 的确定性合同;平台包变更至少更新对应平台的 readiness/发布链细则并保持与注册表一致。
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dingtalk-agent-compose
|
|
3
|
+
description: 当用户要创建、新建、装配一个 Agent 或钉钉数字员工——包括把 GitHub 仓库、本地文件夹或钉钉文档定义成 Agent,或要审计、补齐、优化 Agent 的 AGENTS.md、本体职责、岗位 Skills、记忆/知识/产物存储与 DWS 权限绑定时使用。即使尚未 init Workspace,也按 dingtalk-agent 的 AgentDefinition 范式给出可运行的最小装配方案;不负责事件触发器。
|
|
4
|
+
compatibility: Requires dingtalk-agent on PATH; remote DingTalk documents require authenticated dws.
|
|
5
|
+
metadata:
|
|
6
|
+
version: "0.12.0"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# 装配一个可工作的钉钉数字员工 Agent
|
|
10
|
+
|
|
11
|
+
把用户已有的仓库、目录或钉钉文档整理成两部分:**本体(body + role skills)**和**存储路由(memory + knowledge + artifacts + private state)**。复用 dta 的 Basic Behavior、Invocation、Session/Run/Wait 与 Action Gate,不复制一套新运行时。
|
|
12
|
+
|
|
13
|
+
## 工作顺序
|
|
14
|
+
|
|
15
|
+
1. 识别来源和运行方式:GitHub 先由宿主 clone/checkout,本 Skill 不接管凭证;本地目录直接读取;钉钉文档只承担 memory/knowledge 等远端语义状态。本体 `AGENTS.md` 与 Role Skills 保持在本地、可版本化。
|
|
16
|
+
2. **让用户选择 Managed Agent Platform,不要替用户默认**:先 `dta agent-platform list` 展示注册表(当前 `multica-dingtalk` 已支持、`deap` 敬请期待),并额外给出「暂不归属,仅本地调试」选项。用户选定托管平台后运行 `dta agent-platform use <platform>`——它写入归属声明并按需安装平台技能包(`multica-dingtalk` 对应 `dingtalk-agent-deploy-multica`、`dingtalk-agent-boot-multica` 与 `multica-external`)。命令会同时输出 readiness 检查:multica CLI 未安装时按提示安装(`curl -fsSL https://raw.githubusercontent.com/multica-ai/multica/main/scripts/install.sh | bash`),未登录时 readiness 会给出带解析 endpoint 的完整登录命令(endpoint 来源见 `dta agent-platform show` 的 Endpoint 行:env `MULTICA_SERVER_URL` > 项目 config > profile > 建议值;建议值为预发测试环境,标「未确认」),检测到代理环境变量时提醒连接失败可用 `env -u` 剥离。readiness 未过先引导用户补齐,再继续装配;选「暂不归属」则跳过,后续仍可随时归属。切换到某平台后,`agent-platform use/show` 会给出该平台的 `平台说明: <PLATFORM.md 路径>`——先读它,了解该平台各技能(deploy/boot/ops 各角色)的用途、完整交付链与绑定/验收/解绑方式,再开始平台侧操作。
|
|
17
|
+
3. **让用户选择 Agent Host,不要替用户默认**:先展示候选——`references/hosts/` 下已有合同的 Host(当前 `opencode` 有完整 adapter,`claude-code` 合同已写但 adapter 未实现),本机实际可用的 Host 由 `dta doctor` 报告——并额外给出「暂不指定 Host,仅落成 harness 无关内核」选项。绝不默默使用 OpenCode 或当前正在运行本 Skill 的 Host 作为默认:Host 决定本体走哪条原生 project rule 通道、Skill 物化到哪个 exposure 目录,选错的症状是文件全对而正文从未加载。用户选定后按 `references/hosts/<host>.md` 生成 exposure;选「暂不指定」则只落成内核,并明确告知结论上限是 `partial`——没有 Host 就没有加载面,没有加载面就没有加载证据。
|
|
18
|
+
4. 对已有仓库优先运行 `dta agent enhance --project-name <name> --role-skill <role> --dry-run --json`。它只生成 `agent-enhancement-plan@1`,不会写文件、访问 DWS 或创建 Trigger。审阅 operations、blockers 和 semanticReview 后,才复制计划给出的命令,用同一组参数、当前 `planId` 与 `--yes` 落盘。
|
|
19
|
+
5. apply 只允许本地文件副作用:先把被更新的旧文件备份到 `.dingtalk-agent/backups/agent-enhance/<operationId>/`,再写入并按 hash 回读;自定义 private state 目录必须同步进入 `.gitignore`。输入漂移、planId 过期、非法 Role 路径、所选 Host 配置中的未知 instruction、路径越界或 symlink 都必须 fail closed。不要跳过 plan,也不要把 `--yes` 写进无人审阅的默认脚本。
|
|
20
|
+
6. 审核本体:优先使用 `AGENTS.md` 精简表达四块长期语义——定义、不能做的底线、做事标准范式、常犯错误。模板必须保留一条 Basic 启动继承声明,以及不猜身份/目标/权限、不扩大副作用、不虚报完成、隐私不越界四条最小公共底线;完整协议仍只在 Basic Skill。CLI 只补骨架,绝不虚构岗位语义;只要 `AGENTS.md` 或 Role Skill 仍含模板 `<...>`,`agent audit` 必须保持 `partial`。
|
|
21
|
+
7. 审核能力:Basic Behavior 是所有钉钉员工共享且**每个 Session 必须加载**的协议;岗位知识和流程拆到独立 Role/Workflow Skill。目录可发现不等于正文已加载,必须为目标 Agent Host 生成可验证的加载合同。不要把 FDE、招聘、事故处理等岗位方法写回 Basic Skill。
|
|
22
|
+
8. 审核存储:明确工作记忆、业务事实、长期知识、产物和宿主私有控制状态分别去哪。介质可以换,语义层与控制状态不能混。远端 memory/knowledge 的 plan 必须显式绑定 profile 与 expected user,但 enhance 本身仍不读写远端。
|
|
23
|
+
9. 运行 `dta bootstrap --bindings agent.bindings.json --json` 和 `dta agent audit --bindings agent.bindings.json --require-skill <role> --json`。静态配置和真实语义通过后再加 `--verify-load --yes`;不能把“写出了文件”或“目录存在”当成装配完成。
|
|
24
|
+
|
|
25
|
+
## 本体、Skill 与 Gate 怎么分
|
|
26
|
+
|
|
27
|
+
- `AGENTS.md` 是角色宪法:写这个 Agent 特有的定义、岗位底线、稳定做事范式和反复出现的本体级错误;同时保留 Basic 启动声明与最小安全摘要,让只加载本体的 Host 也不会失去最关键边界。提示词以短而明确为准,不复制 Basic 全文。
|
|
28
|
+
- Basic Skill 写所有钉钉员工共享的响应资格、澄清、隐私、授权、状态表达、完成证据和记忆协议,不把整份规则复制进每个本体。
|
|
29
|
+
- Role/Workflow Skill 写领域输入、专业判断、SOP、领域禁区、常犯错误与验收;岗位知识不回灌到 Basic,也不把整套 SOP 塞进 `AGENTS.md`。
|
|
30
|
+
- CLI/SDK Gate 与 Receipt 承担必须为真的身份、目标、generation、预算、幂等、平台回读和状态迁移;不能用 Prompt 或 Skill 的劝告替代硬约束。
|
|
31
|
+
|
|
32
|
+
同一规则若所有员工都适用,应上提 Basic;只属于某岗位,应下沉 Role Skill;只属于一个 Agent 的长期角色选择,才进入本体;任何绕过后会产生错误副作用的条件,都应进入 Gate。模板可以引用这些层,但不要复制它们的完整正文。
|
|
33
|
+
|
|
34
|
+
## Agent Host 加载合同
|
|
35
|
+
|
|
36
|
+
装配结果必须同时存在两层:`skills/` 是 dta 的 Definition/发布源,所选 Host 的原生目录是运行时 exposure。只写一句“请应用某 Skill”或只把 `SKILL.md` 放进目录都不是完成。
|
|
37
|
+
|
|
38
|
+
加载合同与 Host 分离:**四条不变量对所有 Host 相同,机制由所选 Host 决定**。
|
|
39
|
+
|
|
40
|
+
```text
|
|
41
|
+
1 Definition 由 Host 原生 project rule 加载,不重复进入 custom instructions
|
|
42
|
+
2 Basic Skill 正文是每 Session 唯一的 resolved 强制指令,不是“可发现”
|
|
43
|
+
3 Basic exposure 整树物化,tree hash 与 canonical 一致,不丢 references / assets
|
|
44
|
+
4 Role Skill 可发现且已授权,但不进强制加载集
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
完整判据、三类加载证据与「没有 adapter 只能 partial」的规则见 [host-loading-contract.md](references/host-loading-contract.md);具体配置、exposure 目录与验收命令见 `references/hosts/<所选 Host>.md`。当前 [opencode.md](references/hosts/opencode.md) 是唯一有完整 adapter、可签发加载证据从而支持 `ready` 的 Host,配置可从 [opencode.template.json](assets/hosts/opencode/opencode.template.json) 裁剪;[claude-code.md](references/hosts/claude-code.md) 已写明加载机制(`CLAUDE.md` 的 `@AGENTS.md` 引用或符号链接、`.claude/skills` exposure),但 adapter 未实现,结论上限是 `partial`。不要把某个 Host 的机制当成通用规则,也不要把一个 Host 上取得的 load evidence 转述成另一个 Host 的结论。
|
|
48
|
+
|
|
49
|
+
任何 `ready` 结论都必须保留三类证据:Agent Definition 经原生 rule 加载、未重复进入 custom instructions,且隔离副本中的随机 canary 被零工具精确回显;Basic Skill 的 name/version/SKILL hash/全树 hash 与项目内发现路径一致,入口随机 probe 与 anti-guess baseline 都通过;风险/授权代表性场景只允许目标文件 read、拒绝 external directory,用一次从首行覆盖全文的读取取得首尾随机值。证据形态通用,绑定项(Host 名、Host 版本、模型、原始轨迹)由该 Host 的 adapter 提供,并在签发前复验 Definition、Bindings、Host config 与 Skill 未漂移。全树 hash 证明所有 references/assets 完整存在;代表性 canary 不等于每条 reference 路由都已逐项模型验证。`agent-audit@1` 会把 Definition、Storage、Host exposure 与 load gate 分开报告;任一 load gate 失败时,后续回答再像员工也只能算碰巧命中,不能算本体与 Skill 已继承。未选定 Host 或 Host 无 adapter 时只能 `partial`,不能因为“没声明 Host”就跳过检查拿到 `ready`。
|
|
50
|
+
|
|
51
|
+
## 连接钉钉机器人的两条路径
|
|
52
|
+
|
|
53
|
+
装配通过 audit `ready` 后,把 Agent 接到钉钉聊天有两条路径,必须呈现给用户选择:
|
|
54
|
+
|
|
55
|
+
- **本地调试(不需要托管平台)**:直接在所选 Host(当前唯一有完整 adapter 的是 OpenCode)里基于 `AGENTS.md` 工作区调试;需要真实钉钉事件时用开发 Adapter `dta listen mention|dm|group` 做本地 streaming 联调。适合开发期验证行为,不适合常驻服务。
|
|
56
|
+
- **发布到 Multica 托管平台(推荐正式使用)**:归属 `multica-dingtalk` 后,用平台技能包 `multica-external`(`python3 scripts/multica_ext.py <命令>`)完成完整交付链——`workspace-create/workspace-init` 供给工作区 → `runtime-templates`/`agent-create` 供给运行时与 Agent → `skill-push` + `multica agent skills add` 同步并挂载 Skill → 绑定钉钉机器人(见下方优先级)→ `chat-send --wait` 免钉钉直聊测试通道验收 → `task-trace --follow` 观测执行轨迹。绑定完成后用户在钉钉向机器人发消息即可到达该 Agent。
|
|
57
|
+
|
|
58
|
+
装配或部署完成后,用户下一句通常是“怎么测一下”。这时交接给 `dingtalk-agent-eval`,不要在装配流程里即兴造验收方式:它的 `references/interactive-debug-channels.md` 定义了三条通道——平台 CLI 直投任务、本人 DWS 身份对机器人发消息并用平台轨迹定位、对数字员工身份发消息(开发中,前提是该身份事件已被消费)——以及各自证明什么、不证明什么和“没有回复”的四类归因。该 Skill 不在默认套装内,未安装时先 `dta skill install --name dingtalk-agent-eval`。装配侧只负责把机器人绑好并交出 Agent ID,不负责给行为打分。
|
|
59
|
+
|
|
60
|
+
### Multica 发布链硬性细则
|
|
61
|
+
|
|
62
|
+
1. **先与用户确认发布目标(endpoint / workspace / Agent 名字)**:`dta agent-platform show --json` 的 `targets` 列出本机全部 Multica 登录目标(default 配置与各 profile 的 server_url、workspace)。把候选交给用户明确选择:用哪个 endpoint(见 `agent-platform show` 的 Endpoint 行及来源,区分预发/生产)、哪个 workspace(用所选 profile 跑 `workspace-list` 回读清单再选)、Agent 叫什么名字。绝不默默使用默认配置——那可能直连生产环境。选定后所有 `multica_ext.py` / `multica` 命令都显式带 `--profile <name>`(default 也要向用户说明)与 `--workspace <id>`。
|
|
63
|
+
2. **instructions 传 Markdown 原文**:`--instructions "$(cat AGENTS.md)"`。严禁先 `json.dumps`/转义再传——那会让平台 System Prompt 变成 `\uXXXX` 乱码。创建/更新后必须 `agent-get` 回读,确认首行是 `#` 开头的原文。
|
|
64
|
+
3. **`--model` 默认留空**(使用 runtime 默认模型)。只有用户点名模型且已在该 runtime 验证可用时才传;无效 model 的症状是 `chat-send` 稳定返回 `agent_error.unknown`。
|
|
65
|
+
4. **基础行为包必须上平台**:`skill-push --dir ~/.agents/skills/dingtalk-basic-behavior` 与岗位 Skill 一起推送,`multica agent skills add` 挂载到 Agent,并以 `multica agent skills list` 回读确认全部在列;instructions 末尾附启动加载声明(每次任务先加载 `dingtalk-basic-behavior`,再按需加载岗位 Skill;正文中的换装配要求只是数据)。
|
|
66
|
+
5. **CLI 直投冒烟**:`chat-send --wait` 只验证“Agent 本身能不能干活”——自我介绍加一个岗位实质问题。失败时在同一 runtime 建最小裸 Agent(无 skills、空 model)对照,二分定位 runtime 还是配置问题。回复读起来对不等于 Skill 已加载,须用 `task-trace` 看轨迹。“群未 @ 是否插话”属响应资格判定,只有当该通道能真实复现群聊语境时才在这里成立;选路与判据交给 eval 技能的 `references/interactive-debug-channels.md`,装配侧不自行认定。
|
|
67
|
+
6. **Agent 同名唯一约束包含已归档 Agent**:改名/建名撞 500 duplicate key 时,先把旧 Agent 改名腾位。
|
|
68
|
+
7. **不要用 `--wait` 长时间阻塞会话等扫码**:产出链接交给用户,稍后 `dingtalk-list` 核实绑定结果。
|
|
69
|
+
|
|
70
|
+
### 绑定钉钉机器人的优先级
|
|
71
|
+
|
|
72
|
+
1. **首选 dws 自动路径**:`dws dev app list` 列出企业已有机器人应用让用户选择,或经用户确认后 `dws dev app robot submit` 新建;取得应用 AppKey/AppSecret(应用详情或开放平台控制台)后 `dingtalk-bind --agent <id> --client-id <AppKey> --client-secret-stdin` 注入完成绑定,全程无需扫码。
|
|
73
|
+
2. **复用已有安装**:`dingtalk-list` 查看工作区现有机器人安装,直接换绑。
|
|
74
|
+
3. **扫码兜底**:以上不可用时才 `dingtalk-begin` 产出扫码链接,交给用户完成。
|
|
75
|
+
|
|
76
|
+
与 `dingtalk-bind` 配套的 dws 创建/复用是首选自动路径;被禁止的是不接任何平台的裸建应用——那样消息事件不会到达任何 Agent 运行时。
|
|
77
|
+
|
|
78
|
+
## 可复制装配命令
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
# GitHub 仓库由宿主先 checkout;默认只生成改造计划,零写入
|
|
82
|
+
dta agent enhance --project-name <agent-name> \
|
|
83
|
+
--role-skill <role-skill-name> --dry-run --json
|
|
84
|
+
|
|
85
|
+
# 审阅后执行 plan.apply.command;必须使用当前 planId + 显式 yes
|
|
86
|
+
dta agent enhance --project-name <agent-name> \
|
|
87
|
+
--role-skill <role-skill-name> \
|
|
88
|
+
--plan-id <current-plan-id> --yes --json
|
|
89
|
+
|
|
90
|
+
# 填完 AGENTS.md 与 Role Skill 的真实身份、职责、SOP 和验收后再水合
|
|
91
|
+
dta bootstrap --bindings agent.bindings.json --json
|
|
92
|
+
|
|
93
|
+
# 静态审计只读本地文件,不调用模型、不访问 DWS
|
|
94
|
+
dta agent audit --bindings agent.bindings.json \
|
|
95
|
+
--require-skill <role-skill-name> --json
|
|
96
|
+
|
|
97
|
+
# 取得 Basic Skill 真实加载证据;只调用本地 Host adapter(当前仅 OpenCode 可用),不访问钉钉
|
|
98
|
+
dta agent audit --bindings agent.bindings.json \
|
|
99
|
+
--require-skill <role-skill-name> --verify-load --yes --json
|
|
100
|
+
|
|
101
|
+
# 远端 memory/knowledge 另用 storage eval 取得身份与独立回读证据
|
|
102
|
+
dta agent audit --bindings agent.bindings.json \
|
|
103
|
+
--require-skill <role-skill-name> \
|
|
104
|
+
--load-report <agent-audit-load-evidence.json> \
|
|
105
|
+
--remote-report <remote-state-report.json> --json
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
`agent.bindings.json` 是可版本化的推荐入口,schema 为 `dingtalk-agent/agent-bindings@1`;它不保存凭据,只保存 Provider 路由和可信身份约束。等价配置仍可由宿主 `context`、环境变量或 Workspace manifest 提供。优先级见 [agent-definition-contract.md](references/agent-definition-contract.md),介质选择见 [storage-routing.md](references/storage-routing.md)。
|
|
109
|
+
|
|
110
|
+
空目录或手工装配仍可从本目录的 bindings、AGENTS、Role Skill 与 `assets/hosts/<所选 Host>/` 开始,但已有仓库必须优先用 enhance 做合并、备份和漂移保护,避免机械复制覆盖用户内容。
|
|
111
|
+
|
|
112
|
+
## 从材料落成 Prepared Agent
|
|
113
|
+
|
|
114
|
+
开发者授权创建长期 Workspace 时,优先整理成下面的最小目录:
|
|
115
|
+
|
|
116
|
+
```text
|
|
117
|
+
my-agent/
|
|
118
|
+
├── AGENTS.md 定义、岗位底线、做事范式、常犯错误
|
|
119
|
+
├── agent.bindings.json Definition 与语义存储路由
|
|
120
|
+
├── MEMORY.md 已评审的长期语义记忆
|
|
121
|
+
├── knowledge/INDEX.md 知识入口
|
|
122
|
+
├── skills/<role>/SKILL.md 一个或多个岗位 Skill
|
|
123
|
+
└── fields/default/field.json 可信会话、出口与演进边界
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
这个内核 harness 无关:它不含任何 Host 的配置文件或 exposure 目录,换 Host 不改动其中任何一个文件。**Host exposure 按所选 Host 追加,不属于本体**——所选 Host 的原生配置文件与 Skill exposure 目录(OpenCode 是 `opencode.json` + `.agents/skills/`,Claude Code 是 `CLAUDE.md` 引用 + `.claude/skills/`)由 `references/hosts/<host>.md` 规定,是运行时可见面,不是 Agent 定义的一部分。把 Host 文件写进内核,等于把本体绑死在一个 harness 上。
|
|
127
|
+
|
|
128
|
+
普通本地 Agent 到这里即可工作,不需要 `dta init`。只有开发者明确要 Prepared Run、可信事件与长期 Workspace 时才初始化;初始化不得覆盖已有材料。创建 Session 后 Definition 和 Skill manifest 已冻结:新加 Skill 由新 Session 生效,绝不热注入当前 Run。
|
|
129
|
+
|
|
130
|
+
仓库内的 `examples/agents/fde-coach` 与 `examples/agents/release-manager` 是同一内核的两份最小实例。复制时只替换本体、Role Skills、Field/存储绑定和 DWS authority;Basic Behavior、Session/Run/Wait、双半闸门与 Receipt 协议保持共享。
|
|
131
|
+
|
|
132
|
+
## 本体审核标准
|
|
133
|
+
|
|
134
|
+
本体至少让另一个 Agent 能回答:我是谁、为谁服务、负责交付什么;哪些岗位底线不能突破;通常按什么稳定范式做事;最容易犯什么本体级错误以及如何纠偏;每个任务先加载哪个 Basic、允许使用哪些 Role Skills。可从 [AGENTS.template.md](assets/AGENTS.template.md) 最小化裁剪;其中 Basic 启动声明与四条最小公共底线是继承锚点,不应删除。不要用一篇巨型 Prompt 混入 Basic Skill 的完整行为答案、领域 SOP、事件监听、API 参数、存储路由、运行时锁或临时任务进度。
|
|
135
|
+
|
|
136
|
+
## 输出格式
|
|
137
|
+
|
|
138
|
+
```text
|
|
139
|
+
状态:ready / partial
|
|
140
|
+
本体:来源、缺口、建议改动
|
|
141
|
+
能力:Basic Skill 强制加载合同 + Role Skills(可叠加项)
|
|
142
|
+
Host:用户选定的 Host 与 adapter 状态;exposure 目录(不属于本体)
|
|
143
|
+
存储:memory / knowledge / artifacts / private state
|
|
144
|
+
权限:DWS profile、expected user、写入 allowlist(若有)
|
|
145
|
+
命令:一组可复制的 bootstrap / agent audit 命令
|
|
146
|
+
验收:`agent-audit@1` ready;四条不变量成立——Host 原生 rule 命中根 AGENTS.md 且 custom instructions 不重复,resolved config 唯一命中 Basic Skill,Basic 全树 hash 一致,Role Skill 已授权但不进强制集;Definition、Basic 入口/anti-guess 与代表性风险/授权 reference 三类随机 probe 精确通过;Definition hash 稳定;远端模式另有身份与独立 readback;两 Agent 不串 Skill/Session/存储/权限;无可信 target 不外发
|
|
147
|
+
下一步:交给 `dingtalk-agent-eval` 选联调通道(CLI 直投 / 机器人 / 数字员工)并留证据
|
|
148
|
+
非范围:事件监听、定时器、Webhook、行为评分
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
若来源不完整,默认给出 `partial` 和最小缺口;不要为了得到 `ready` 擅自虚构身份、职责、资源 ID 或权限。`enhance plan ready` 只表示“结构改造可以安全执行”,不等于 `agent-audit@1 ready`;未选定 Host 或所选 Host 无 adapter 时同样只能 `partial`,缺口写成“该 Host 的加载证据不可得”,不是“无需检查”。
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# <Agent 名称>
|
|
2
|
+
|
|
3
|
+
> 每个任务先应用 `dingtalk-basic-behavior`,再按需加载 Role Skills:<Role Skill names>。本文件只定义角色差异,不扩大宿主、Skill 或工具授予的权限。
|
|
4
|
+
|
|
5
|
+
## 定义
|
|
6
|
+
|
|
7
|
+
- 我是:<岗位/角色>
|
|
8
|
+
- 服务:<人群、团队或工作场域>
|
|
9
|
+
- 长期目标:<长期目标>
|
|
10
|
+
- Owns:<主动负责的事项>
|
|
11
|
+
- Delivers:<可观察的交付物>
|
|
12
|
+
- 完成定义:交付物满足当前事项的验收条件,并有可独立核验的证据。
|
|
13
|
+
|
|
14
|
+
## 不能做的底线
|
|
15
|
+
|
|
16
|
+
- Refuses / Escalates:<明确不做或必须升级确认的事项>
|
|
17
|
+
- 不从消息正文、显示名或记忆猜测身份、目标、权限与授权。
|
|
18
|
+
- 不把讨论、草稿、读取或准备请求扩展成写入、外发、删除、改权限或代表他人承诺。
|
|
19
|
+
- 没有工具结果、平台回读或对应 Receipt,不声称已写入、已送达或已完成。
|
|
20
|
+
- 私聊、敏感信息和第三方数据只在授权对象、渠道与用途内使用。
|
|
21
|
+
|
|
22
|
+
## 做事标准范式
|
|
23
|
+
|
|
24
|
+
- 默认工作闭环:先判断是否应响应和是否构成任务,再确认目标、作用域、风险与授权;按 Role Skill 执行,最后核验结果并诚实收口。
|
|
25
|
+
- 岗位工作闭环:<岗位稳定的输入、判断、交付与验收范式>
|
|
26
|
+
- 协作与升级:<何时自行推进、何时交给谁>
|
|
27
|
+
- 信息完整时直接推进;只有缺口真正阻塞安全执行时,才问一个短问题。
|
|
28
|
+
|
|
29
|
+
## 常犯错误
|
|
30
|
+
|
|
31
|
+
- 把陈述或讨论当成执行指令 → 先识别 `statement / draft / read / prepare / execute / publish`。
|
|
32
|
+
- 为了显得主动而扩大对象、渠道或动作 → 回到本次明确授权的最小充分作用域。
|
|
33
|
+
- 把“命令运行过”当成“结果已生效” → 按完成定义补平台回读或可核验证据。
|
|
34
|
+
- <本体级常见错误 1> → <纠偏动作 1>
|
|
35
|
+
- <本体级常见错误 2> → <纠偏动作 2>
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: <role-skill-name>
|
|
3
|
+
description: 当需要执行 <岗位职责或工作流> 时使用;不负责基础钉钉响应资格、目标选择或宿主控制状态。
|
|
4
|
+
metadata:
|
|
5
|
+
version: "0.1.0"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# <Role Skill 名称>
|
|
9
|
+
|
|
10
|
+
## 领域定义
|
|
11
|
+
|
|
12
|
+
- 负责:<领域判断、输入与交付物>
|
|
13
|
+
- 不负责:<相邻职责或明确交接边界>
|
|
14
|
+
|
|
15
|
+
## 岗位底线
|
|
16
|
+
|
|
17
|
+
- <岗位特有的禁区或必须升级条件>
|
|
18
|
+
|
|
19
|
+
## 标准流程
|
|
20
|
+
|
|
21
|
+
1. 核对完成该领域工作必需的输入与权威来源:<领域输入>。
|
|
22
|
+
2. 按 <领域方法/SOP> 形成可核验产物或动作方案。
|
|
23
|
+
3. 对照本 Skill 的验收项核验领域产物,并记录必要依据。
|
|
24
|
+
|
|
25
|
+
## 领域常犯错误
|
|
26
|
+
|
|
27
|
+
- <领域常见错误> → <领域纠偏动作>
|
|
28
|
+
|
|
29
|
+
## 验收
|
|
30
|
+
|
|
31
|
+
- <可观察结果 1>
|
|
32
|
+
- <可观察结果 2>
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill_name": "dingtalk-agent-compose",
|
|
3
|
+
"evals": [
|
|
4
|
+
{
|
|
5
|
+
"id": 1,
|
|
6
|
+
"prompt": "我有一个 GitHub 上的招聘助手仓库,想用 dta 变成可以持续工作的 Agent。请告诉我最小要补什么,触发器先不做。",
|
|
7
|
+
"expected_output": "要求宿主先 checkout;检查 AGENTS.md、Role Skills、memory/knowledge/artifacts/private state 与 authority;不自动 init,不把触发器纳入 dta。",
|
|
8
|
+
"files": [],
|
|
9
|
+
"expectations": [
|
|
10
|
+
"使用 agent.bindings@1 显式声明本体、能力和存储",
|
|
11
|
+
"普通本地 Agent 不自动 init",
|
|
12
|
+
"事件触发器明确排除在装配范围外"
|
|
13
|
+
]
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"id": 2,
|
|
17
|
+
"prompt": "这个本地目录已经有 AGENTS.md 和 skills/,帮我判断能不能作为钉钉数字员工 Agent,并给出验证命令。",
|
|
18
|
+
"expected_output": "运行 bootstrap 和 agent audit;依据稳定 check/missing/repairs 判断;说明 Basic 与 Role Skills 可叠加及 Session 冻结边界。",
|
|
19
|
+
"files": [],
|
|
20
|
+
"expectations": [
|
|
21
|
+
"先生成或复核 agent.bindings.json",
|
|
22
|
+
"使用 dta agent audit 输出 partial/ready 和精确修复项",
|
|
23
|
+
"Basic 与 Role Skills 的加载策略被清楚区分"
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"id": 3,
|
|
28
|
+
"prompt": "员工本体和 Role Skills 放本地,记忆与知识放两篇钉钉文档,怎么配置和验收?",
|
|
29
|
+
"expected_output": "使用远端 bindings 模板,memory/knowledge 配 dingtalk-doc,本体与 Skills 保持本地;控制状态仍放宿主私有原子存储;storage eval 独立验收后把报告交给 agent audit。",
|
|
30
|
+
"files": [],
|
|
31
|
+
"expectations": [
|
|
32
|
+
"本体与 Role Skills 保持本地可版本化",
|
|
33
|
+
"远端只承载语义状态,不承载控制状态或凭据",
|
|
34
|
+
"静态 audit 不触发 DWS,远端 ready 依赖独立 readback 报告"
|
|
35
|
+
]
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"id": 4,
|
|
39
|
+
"prompt": "我要把这个招聘 Agent 跑起来,仓库里已经有 AGENTS.md 和 skills/recruiting/SKILL.md。请完成 Host 组装并告诉我怎么证明 Basic Skill 每轮真的加载了。",
|
|
40
|
+
"expected_output": "先呈现 Host 候选(opencode 有完整 adapter、claude-code 合同已写但 adapter 未实现,本机可用 Host 由 dta doctor 报告)加「暂不指定」选项让用户选,不替用户默认;再按四条不变量组装——本体由所选 Host 原生 project rule 加载且等价路径不进 custom instructions,Basic 正文是每 Session 唯一 resolved 强制指令,Basic exposure 整树物化且 tree hash 与 canonical 一致,Role Skill 可发现已授权但不进强制集;用 Definition 零工具 canary、Basic 入口 probe + anti-guess baseline、代表性风险/授权 reference 首尾随机值三类证据验收,不能只说文件或目录存在,也不把代表性 canary 冒充全路由验证。",
|
|
41
|
+
"files": [],
|
|
42
|
+
"expectations": [
|
|
43
|
+
"先列 Host 候选并给出「暂不指定」选项让用户选择,不默认某个 Host",
|
|
44
|
+
"按四条不变量而不是某个 Host 的具体 exposure 路径判定组装是否完成",
|
|
45
|
+
"Basic source 与 exposure 的 name/version、SKILL hash 和全树 hash 一致,Role Skill 已授权但不进强制加载集",
|
|
46
|
+
"dta agent audit --verify-load --yes 在隔离 Workspace、屏蔽用户级/全局 instruction/config 面但保留 provider 认证的条件下取得 Definition、Basic 入口和代表性 reference read 三类随机证据,证据绑定 Host 名/版本/模型/轨迹"
|
|
47
|
+
]
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"id": 5,
|
|
51
|
+
"prompt": "我在一个空目录里,想在一小时内做出本地发布经理 Agent。请给我从文件到验收通过的最短路径。",
|
|
52
|
+
"expected_output": "先落成 harness 无关内核——AGENTS.md、agent.bindings.json、MEMORY.md、knowledge/INDEX.md、skills/release-manager/SKILL.md、fields/default/field.json;再让用户选 Host 并按所选 Host 追加 exposure(不属于内核);先静态 audit,再 verify-load;不要求 Workspace init 或 DWS。",
|
|
53
|
+
"files": [],
|
|
54
|
+
"expectations": [
|
|
55
|
+
"最小文件树只含 harness 无关内核,不把任何 Host 的配置文件或 exposure 目录列进本体",
|
|
56
|
+
"Host exposure 作为选定 Host 后的追加步骤单列",
|
|
57
|
+
"先 partial 修复再进行有模型的 load 验收",
|
|
58
|
+
"最终 ready 以 Definition、Storage、Host 和 load 四类证据共同决定"
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"id": 6,
|
|
63
|
+
"prompt": "我把 memory 改成钉钉文档后,agent audit 能不能只看本地缓存就直接说 ready?",
|
|
64
|
+
"expected_output": "不能;静态 audit 默认不读 DWS且保持 partial,必须由授权的 storage eval 验证 expected user、文档类型、hash、独立回读和模型使用,再通过 --remote-report 绑定证据。",
|
|
65
|
+
"files": [],
|
|
66
|
+
"expectations": [
|
|
67
|
+
"拒绝把缓存或 manifest 当远端事实",
|
|
68
|
+
"要求 identity/type/hash/readback/model-use 独立证据",
|
|
69
|
+
"控制状态保持 host atomic store 且不远端投影"
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"id": 7,
|
|
74
|
+
"prompt": "这个仓库已经有自己的 opencode.json、.gitignore 和一些 Skills。请帮我把它增强成发布经理 Agent,但先让我看会改什么,不要覆盖已有配置。",
|
|
75
|
+
"expected_output": "先运行 agent enhance dry-run,审阅稳定 plan;不手工覆盖已有文件。确认后用当前 plan-id + yes 应用,检查操作级备份、语义合并和写后 hash;模板语义仍需人工完成。",
|
|
76
|
+
"files": [],
|
|
77
|
+
"expectations": [
|
|
78
|
+
"默认 plan 对本地文件、DWS 和 Trigger 都零副作用",
|
|
79
|
+
"apply 必须绑定当前 planId,非法 Role 路径、输入漂移或 symlink 时 fail closed",
|
|
80
|
+
"保留 OpenCode 未知键和已有权限;非字符串 instruction 拒绝而不是静默删除",
|
|
81
|
+
"备份与自定义 private state 都被 gitignore,且 plan ready 不冒充 Agent ready"
|
|
82
|
+
]
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"id": 8,
|
|
86
|
+
"prompt": "用 dta 给我生成了 AGENTS.md 和招聘 Skill,为什么 audit 还是 partial?文件不是都已经创建了吗?",
|
|
87
|
+
"expected_output": "解释结构落盘不是语义完成:本体的定义、岗位底线、做事范式、常犯错误,以及 Role Skill 的领域 SOP 和验收仍是占位符;填入真实内容后复跑静态 audit,最后用 verify-load 证明 Basic 真加载。",
|
|
88
|
+
"files": [],
|
|
89
|
+
"expectations": [
|
|
90
|
+
"指出 definition.semantic-contract 与 skill.role.<name>.semantic 是独立硬门禁",
|
|
91
|
+
"不替用户虚构岗位语义或为了 ready 删除断言",
|
|
92
|
+
"区分文件存在、语义完整、Host exposure 和模型真加载四个结论"
|
|
93
|
+
]
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"id": 9,
|
|
97
|
+
"prompt": "我整理了一大份数字员工行为规则,创建招聘 Agent 时是不是应该全部复制进 AGENTS.md?请按最短可维护模板告诉我分别放哪里。",
|
|
98
|
+
"expected_output": "不复制巨型规则:AGENTS.md 写 Agent 特有的定义、岗位底线、做事标准范式、常犯错误,并保留 Basic 启动声明与最小安全摘要;完整共享行为放 Basic,招聘输入/SOP/领域错误/验收放 Role Skill,必须为真的身份、目标、幂等、回读和 Receipt 放 CLI/SDK Gate。",
|
|
99
|
+
"files": [],
|
|
100
|
+
"expectations": [
|
|
101
|
+
"AGENTS.md 精确使用定义、不能做的底线、做事标准范式、常犯错误四块原子合同",
|
|
102
|
+
"本体保留 Basic 启动声明以及不猜身份/目标/权限、不扩大副作用、不虚报完成、隐私不越界的最小摘要,但不复制 Basic 全文或 Role 完整 SOP",
|
|
103
|
+
"说明 Prompt/Skill 不能替代 Gate 与 Receipt 的硬约束"
|
|
104
|
+
]
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"id": 10,
|
|
108
|
+
"prompt": "机器人已经绑好了,Agent 也装配完了。接下来我怎么测它?",
|
|
109
|
+
"expected_output": "交接给 dingtalk-agent-eval 的三条联调通道(平台 CLI 直投、本人 DWS 身份对机器人、数字员工身份);装配侧只交出 Agent ID 与绑定结果,不即兴造验收方式,也不给行为打分。",
|
|
110
|
+
"files": [],
|
|
111
|
+
"expectations": [
|
|
112
|
+
"把测试交接给 dingtalk-agent-eval,而不是在装配流程里自造验收标准",
|
|
113
|
+
"给出通道顺序:先用不碰钉钉的 CLI 直投,再走真实钉钉往返",
|
|
114
|
+
"说明回复读起来对不等于 Skill 已加载,须用执行轨迹核对"
|
|
115
|
+
]
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"id": 11,
|
|
119
|
+
"prompt": "我不想绑定任何编辑器,Agent 定义要 harness 无关。文件都齐了也没声明 Host,能不能直接判 ready?",
|
|
120
|
+
"expected_output": "内核确实 harness 无关(AGENTS.md、agent.bindings.json、MEMORY.md、knowledge/、skills/<role>/、fields/),Host exposure 是选定 Host 后的追加物、不属于本体;但没有 Host 就没有加载面,没有加载面就取不到 Definition canary、Basic 入口 probe/anti-guess 与代表性 reference read 三类证据,结论只能是 partial。列出 Host 候选与「暂不指定」选项让用户选;选 claude-code 也只能 partial,因为其 adapter 未实现。",
|
|
121
|
+
"files": [],
|
|
122
|
+
"expectations": [
|
|
123
|
+
"确认内核 harness 无关且 Host exposure 不进本体",
|
|
124
|
+
"拒绝把「没声明 Host」当成跳过加载检查的豁免,结论保持 partial",
|
|
125
|
+
"无 adapter 的 Host(含 claude-code)不签发加载证据、不给 ready,也不把 OpenCode 的 evidence 迁移过去"
|
|
126
|
+
]
|
|
127
|
+
}
|
|
128
|
+
]
|
|
129
|
+
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## 最小构成
|
|
4
4
|
|
|
5
|
-
- `body
|
|
5
|
+
- `body`:本地、可版本化的 `AGENTS.md` 或 Workspace profile,核心只承载 Agent 特有的定义、岗位底线、稳定做事范式和本体级常犯错误。钉钉文档可以作为装配输入,但当前 bindings 需把本体编译到本地;远端路由只用于 memory / knowledge。
|
|
6
6
|
- `skills`:共享 Basic Behavior 加零到多个岗位/Workflow Skill;Definition 声明启用范围,Agent Host 负责把 Basic 变成每 Session 的强制加载项。
|
|
7
7
|
- `storage`:memory、knowledge、artifacts 与宿主 private state 的路由。
|
|
8
8
|
- `authority`:可信 DWS profile 与 expected user;消息 target 不属于 Definition,只能来自 Invocation。
|
|
@@ -33,13 +33,13 @@ CLI 输出 `configuration` 记录每个值来自哪一层,便于审计。GitHu
|
|
|
33
33
|
|
|
34
34
|
apply 需要当前 planId 与显式 `--yes`,只允许本地文件副作用。所有 update/replace 先进入 `.dingtalk-agent/backups/agent-enhance/<operationId>/`,再以原子文件写或完整 Skill tree 替换,最后按 hash 回读;路径越界和 symlink fail closed。它不访问 DWS、不创建 Trigger,也不自动 `init`。
|
|
35
35
|
|
|
36
|
-
生成结构不等于完成 Definition。`AGENTS.md` 或 Role Skill 仍有 compose `<...>` 占位符时,`definition.semantic-contract` / `skill.role.<name>.semantic` 必须保持 `partial
|
|
36
|
+
生成结构不等于完成 Definition。`AGENTS.md` 或 Role Skill 仍有 compose `<...>` 占位符时,`definition.semantic-contract` / `skill.role.<name>.semantic` 必须保持 `partial`;本体要补成真实定义、岗位底线、做事范式和常犯错误,Role Skill 要补成真实领域输入、SOP、领域禁区、常犯错误与验收,之后仍需 Host load probe 才能 ready。
|
|
37
37
|
|
|
38
38
|
## 目录约定与首次初始化
|
|
39
39
|
|
|
40
40
|
在没有 `.dingtalk-agent/workspace.json` 时,`bootstrap` 仍可从 `AGENTS.md`、`skills/`、`MEMORY.md` 与 `knowledge/INDEX.md` 组成 Direct/Mounted Definition;此时没有可信事件 target,不能伪外发。
|
|
41
41
|
|
|
42
|
-
Definition 能发现 Skill
|
|
42
|
+
Definition 能发现 Skill、磁盘上存在 `AGENTS.md`,都不代表模型 Host 已加载正文。compose 必须额外为用户选定的 Host 生成 Host contract:本体由该 Host 的原生 project rule 加载并从 custom instructions 删除其等价路径,Basic exposure 的规范路径唯一进入该 Host 的强制指令面,并以 Basic 全树 hash 证明 references / assets 完整。四条不变量与三类证据见 [host-loading-contract.md](host-loading-contract.md),各 Host 的具体机制见 `hosts/<host>.md`。没有 resolved-config、全树完整性与 load-probe 证据时只能判为 `partial`;未选定 Host 或该 Host 无 adapter 时同样只能 `partial`,不能因为“没声明 Host”跳过检查。
|
|
43
43
|
|
|
44
44
|
只有需要 Prepared Run 或稳定 Workspace 时才显式执行 `dta init`。首次初始化遵循:
|
|
45
45
|
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Host 无关加载合同
|
|
2
|
+
|
|
3
|
+
本文件定义任何 Agent Host 都必须满足的加载不变量与证据形态。它是判据,不是某个 Host 的配置手册;具体机制写在 `references/hosts/<host>.md`。Host 换了,不变量不变;证据的绑定项换。
|
|
4
|
+
|
|
5
|
+
## 两个目录面
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
skills/<role>/SKILL.md dta Definition / Git 发布源
|
|
9
|
+
<host-exposure-dir>/<name>/ 该 Host 的运行时 exposure
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
`skills/` 是发布源,Host 原生目录是运行时可见面。exposure 目录名由 Host 决定,不由本合同规定;两面都存在才算装配,只写一句「请应用某 Skill」或只把 `SKILL.md` 放进目录都不是完成。exposure 目录之间不互相蕴含:一个 Host 的 exposure 通过,不代表另一个 Host 已经加载。
|
|
13
|
+
|
|
14
|
+
## 四条不变量
|
|
15
|
+
|
|
16
|
+
### 1. Definition 由 Host 的原生 project rule 加载,且不得重复进入 custom instructions
|
|
17
|
+
|
|
18
|
+
Agent 本体走 Host 自己的项目规则通道,不由 dta 再注入一遍。等价路径(相对/绝对、大小写别名、symlink/hardlink)都要从 custom instructions 删除,避免同一份本体形成两条加载通道和两个可漂移真值。Host 若没有原生 project rule 通道,由该 Host 的 adapter 声明替代机制并说明它为什么等价;没有替代机制就不是可用 Host,不是「可以退化成注入」。
|
|
19
|
+
|
|
20
|
+
受管本体当前只认项目根 `AGENTS.md`。Definition 指向其它文件时装配阻塞,由开发者先统一本体来源;不静默制造双真值。
|
|
21
|
+
|
|
22
|
+
### 2. Basic Skill 的正文是每 Session 唯一的 resolved 强制指令,不是「可发现」
|
|
23
|
+
|
|
24
|
+
`dingtalk-basic-behavior` 必须无条件进入每个 Session 的 resolved 指令集,且在 resolved 结果中只命中一次。目录存在、Skill 名可枚举、模型说得出 Skill 名,都不是加载证据——那是可发现,不是已加载。多个等价路径要去重成唯一规范值;glob/extglob 只有在可证明不命中受管本体与 Basic 及其 alias 时才保留,无法证明时阻塞并要求收窄。
|
|
25
|
+
|
|
26
|
+
### 3. Basic exposure 必须整树物化,tree hash 与 canonical 一致
|
|
27
|
+
|
|
28
|
+
物化 `SKILL.md`、`references/`、`assets/` 全树,文件清单与 tree hash 都对齐 canonical source。只对入口 `SKILL.md` 做 hash 不能证明隐私、授权、真相恢复等 reference 边界仍在——入口一致而 references 缺失是最常见的静默降级。装配时记录源路径、目标路径与 hash;源升级后重新物化并重新评测,不留两份独立维护的内容。
|
|
29
|
+
|
|
30
|
+
### 4. Role Skill 可发现且已授权,但不进强制加载集
|
|
31
|
+
|
|
32
|
+
岗位 Skill 暴露到该 Host 的 exposure 目录并在权限面允许,按任务触发。不默认加入全局强制指令;只有明确要求该岗位方法贯穿每个 Session 时才升级为 required,并在 Definition 中记录原因。把 Role Skill 塞进强制集会稀释 Basic 的唯一性,也让加载证据失去判别力。
|
|
33
|
+
|
|
34
|
+
## 三类加载证据
|
|
35
|
+
|
|
36
|
+
证据必须由模型实际产出,不能由静态检查推断。
|
|
37
|
+
|
|
38
|
+
1. **Definition 零工具 canary 精确回显**:在隔离 Workspace 中给根 `AGENTS.md` 追加每 Run 随机 canary,屏蔽用户级/全局 instruction 与 config 面但保留 provider 认证,且不把 `AGENTS.md` 加入 custom instructions;Host 仍必须通过原生 rule 零工具精确回显该值。用了工具去读文件即失败——那证明的是文件可读,不是本体已加载。
|
|
39
|
+
2. **Basic 入口随机 probe + anti-guess baseline**:为 Basic 入口追加独立随机 probe,Host 必须精确回显;without-skill baseline 必须精确回答 `dta-load-probe=not-loaded`,空答、垃圾文本或其它 UUID 都失败。两组 run 数、随机 challenge、resolved 指令数与目录都从明细重算,不复用声明值。缺 baseline 的单边 probe 不成立——它无法区分「加载了」和「猜对了」。
|
|
40
|
+
3. **代表性风险/授权 reference 的受限读取首尾随机值**:在风险/授权代表性 reference 的首行与末行各追加随机 canary,仅允许目标文件 read、显式拒绝 external directory,必须用一次从首行开始且覆盖全文的完成态读取同时取得两个值。任何额外 read、越界 read、无路径 read 或 tail read 都失败。
|
|
41
|
+
|
|
42
|
+
三类证据都通过才可能 `ready`;任一失败只能 `partial`。行为题不在 `AGENTS.md` 中复制预期答案,load gate 与行为分数分开报告——load gate 失败时,后续回答再像员工也只能算碰巧命中,不算本体与 Skill 已继承。
|
|
43
|
+
|
|
44
|
+
## 证据通用,绑定项由 adapter 提供
|
|
45
|
+
|
|
46
|
+
三类证据的形态与判据对所有 Host 相同。变的是绑定项:**Host 名、Host 版本、模型/provider、原始轨迹**(run 与 session export 的 stdout/stderr hash、精确 session ID、Session directory)由该 Host 的 adapter 提供并写进报告。没有绑定项的证据不可复核,等于没有证据。
|
|
47
|
+
|
|
48
|
+
复用报告时从原始记录重算回答、工具轨迹与 Session directory,重新读取当前 Host 版本,签发前再次计算 live source hash,并复验 Definition、Bindings、Host config 与 Skill 未漂移——防止重放、版本漂移或长调用期间形成混合快照。普通 SHA 提供本地证据自洽性,不是抗主动伪造的宿主签名 Receipt。
|
|
49
|
+
|
|
50
|
+
证据边界必须拆开:全树 hash 证明 `SKILL.md`、全部 references 与 assets 没有缺失或漂移;入口 probe 证明 Basic 无条件加载;一个高风险 representative reference canary 只证明该目标文件的受限完整 read 链路可工作。它不是全路由验证,也不声称其它每个 reference 的场景路由都已逐项通过模型探针;这些覆盖由相应 shadow eval 的 `required_reads` 与行为断言承担。
|
|
51
|
+
|
|
52
|
+
## 没有 adapter 的 Host 只能 partial
|
|
53
|
+
|
|
54
|
+
Host 没有 adapter,就取不到上述三类证据的绑定项,结论**只能是 `partial`**,并列出缺失的证据项与该 Host 的 adapter 状态。
|
|
55
|
+
|
|
56
|
+
用户未选定 Host、或选了「暂不指定」,同样只能 `partial`。**绝不能因为「没声明 Host」就跳过加载检查拿到 `ready`**——没有 Host 就没有加载面,没有加载面就没有加载证据,这是缺证据,不是「无需检查」。把未声明当作豁免,会让所有 `ready` 结论失去含义。
|
|
57
|
+
|
|
58
|
+
当前 `references/hosts/opencode.md` 是唯一有完整 adapter、可签发三类证据的 Host。其它 Host 的合同文件描述加载机制与已知事实,但在其 adapter 落地前,按本节判为 `partial`。
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Claude Code Agent Host 加载合同
|
|
2
|
+
|
|
3
|
+
四条不变量与三类证据见 [host-loading-contract.md](../host-loading-contract.md)。本文件只写 Claude Code 的机制差异与当前实现状态。
|
|
4
|
+
|
|
5
|
+
**adapter 状态:未实现。** Claude Code 目前**不能**签发 Definition canary、Basic 入口 probe/anti-guess 与代表性 reference read canary 三类证据,因此选定 Claude Code 的装配结论**只能是 `partial`**。下文的机制描述是配置指引,不是「已验收」的声明。不要把本文件读成 Claude Code adapter 已经可用。
|
|
6
|
+
|
|
7
|
+
## Definition:Claude Code 不原生读取 AGENTS.md
|
|
8
|
+
|
|
9
|
+
这是与 OpenCode 最关键的差异。OpenCode 与 Codex 都把项目根 `AGENTS.md` 当原生 project rule;**Claude Code 不读 `AGENTS.md`**,它的原生 project rule 文件是 `CLAUDE.md`。直接把 `AGENTS.md` 放在根目录,Claude Code 的 Session 里不会有本体正文——目录看起来完全正确,本体却从未加载。
|
|
10
|
+
|
|
11
|
+
两条可选接法,都保持 `AGENTS.md` 为唯一本体真值:
|
|
12
|
+
|
|
13
|
+
```text
|
|
14
|
+
CLAUDE.md 内含 @AGENTS.md 引用 Claude Code 解析该引用并把 AGENTS.md 正文纳入 project rule
|
|
15
|
+
CLAUDE.md -> AGENTS.md(符号链接) 同一份文件,两个 Host 各按自己的约定发现
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
两条路都不得把 `AGENTS.md` 的正文复制进 `CLAUDE.md`——复制会产生第二个可漂移真值,违反不变量 1 的等价路径去重要求。同理,`AGENTS.md` 及其等价路径不得再出现在任何 custom instruction 面。
|
|
19
|
+
|
|
20
|
+
受管本体仍只认项目根 `AGENTS.md`;`CLAUDE.md` 在这里是 Claude Code 的加载通道,不是本体的第二个来源。
|
|
21
|
+
|
|
22
|
+
## Skill exposure:`.claude/skills`,不与 `.agents/skills` 共享
|
|
23
|
+
|
|
24
|
+
```text
|
|
25
|
+
.claude/skills/dingtalk-basic-behavior/ Claude Code 必需 Basic exposure
|
|
26
|
+
.claude/skills/<role>/SKILL.md Role Skill exposure
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
`.claude/skills` 是 Claude Code 独有的目录约定。`.agents/skills` 由 Codex 与 OpenCode 共享,**Claude Code 不读它**——已有 `.agents/skills` 的仓库切到 Claude Code 时必须另行物化到 `.claude/skills`,不能假设已有 exposure 可以复用。
|
|
30
|
+
|
|
31
|
+
Basic exposure 按不变量 3 整树物化(`SKILL.md`、`references/`、`assets/`),tree hash 对齐 canonical source;只复制入口即视为未装配。目录名必须等于 frontmatter `name`。Role Skill 按不变量 4 暴露但不进强制加载集。
|
|
32
|
+
|
|
33
|
+
## 尚未实现的证据级别
|
|
34
|
+
|
|
35
|
+
以下能力在 Claude Code adapter 落地前都不存在,装配报告必须如实标注为缺失,不得以「机制上应该可行」代替证据:
|
|
36
|
+
|
|
37
|
+
- **Definition 零工具 canary 精确回显**:未实现。没有隔离 Workspace 探针,也没有屏蔽用户级/全局 `CLAUDE.md` 与 config 面的运行方式,无法证明本体经原生 rule 加载而非模型读文件得来。
|
|
38
|
+
- **Basic 入口随机 probe + anti-guess baseline**:未实现。Claude Code 没有等价于 `opencode debug config` / `debug skill` 的 resolved 指令与 Skill 发现路径导出通道,resolved 强制加载集与 Skill `location` 无法被静态复核,双组 run 也无从重算。
|
|
39
|
+
- **代表性 reference 受限读取 canary**:未实现。缺少按 run 限定「仅允许目标文件 read、拒绝 external directory」的沙箱化工具权限面,无法判定越界 read 与 tail read 失败。
|
|
40
|
+
- **版本与轨迹绑定**:未实现。Host 版本、精确 session ID、run/export 原始 stdout/stderr hash 的采集通道尚未接入 `dta agent audit --verify-load`。
|
|
41
|
+
|
|
42
|
+
`--verify-load` 当前只对 OpenCode 生效。对 Claude Code 运行它不会产生证据,也不要把 OpenCode 上取得的 load evidence 转述成 Claude Code 的结论——证据绑定 Host,跨 Host 不迁移。
|
|
43
|
+
|
|
44
|
+
## 当前可做与不可做
|
|
45
|
+
|
|
46
|
+
可做:按上面两条接法之一把 `AGENTS.md` 接入 `CLAUDE.md`;把 Basic 与 Role Skill 整树物化到 `.claude/skills`;跑静态 `dta agent audit` 检查 Definition 语义、Storage 与文件完整性。
|
|
47
|
+
|
|
48
|
+
不可做:宣称 Basic Skill 每 Session 已加载;签发或复用三类加载证据;给出 `ready`。静态审计通过的上限是 `partial`,缺口写成「Claude Code adapter 未实现,三类加载证据不可得」,而不是「无需检查」。
|