@xdxer/dingtalk-agent 0.1.5-beta.2 → 0.1.5-beta.3
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 +15 -0
- package/README.en.md +6 -4
- package/README.md +6 -4
- package/dist/src/agent-audit.js +69 -55
- package/dist/src/agent-audit.js.map +1 -1
- package/dist/src/agent-enhance.js +49 -30
- package/dist/src/agent-enhance.js.map +1 -1
- package/dist/src/bootstrap.js +6 -2
- package/dist/src/bootstrap.js.map +1 -1
- package/dist/src/development-workspace.js +42 -15
- package/dist/src/development-workspace.js.map +1 -1
- package/dist/src/multica-deploy.js +27 -9
- package/dist/src/multica-deploy.js.map +1 -1
- package/dist/src/opencode-provider.js +17 -5
- package/dist/src/opencode-provider.js.map +1 -1
- package/dist/src/skills.js +2 -0
- package/dist/src/skills.js.map +1 -1
- package/dist/src/workspace.js +11 -6
- package/dist/src/workspace.js.map +1 -1
- package/docs/ARCHITECTURE.md +10 -7
- package/docs/INSTALLATION.md +1 -1
- package/docs/schemas/project.schema.json +5 -0
- package/examples/agents/README.md +8 -6
- package/examples/agents/fde-coach/AGENTS.md +2 -34
- package/examples/agents/fde-coach/agent/AGENTS.md +35 -0
- package/examples/agents/fde-coach/agent.bindings.json +10 -0
- package/examples/agents/release-manager/AGENTS.md +2 -34
- package/examples/agents/release-manager/agent/AGENTS.md +35 -0
- package/examples/agents/release-manager/agent.bindings.json +10 -0
- package/lab/project-workspace/fake-multica-provider.mjs +26 -7
- package/lab/robot-eval/suite.json +1 -1
- package/package.json +1 -1
- package/skills/core/dingtalk-agent-compose/SKILL.md +21 -15
- package/skills/core/dingtalk-agent-compose/assets/REPOSITORY.template.md +10 -0
- package/skills/core/dingtalk-agent-compose/assets/agent.bindings.dingtalk-doc.template.json +2 -2
- package/skills/core/dingtalk-agent-compose/assets/agent.bindings.local.template.json +2 -2
- package/skills/core/dingtalk-agent-compose/assets/hosts/opencode/opencode.template.json +2 -1
- package/skills/core/dingtalk-agent-compose/evals/evals.json +1 -1
- package/skills/core/dingtalk-agent-compose/references/agent-definition-contract.md +6 -6
- package/skills/core/dingtalk-agent-compose/references/host-loading-contract.md +10 -12
- package/skills/core/dingtalk-agent-compose/references/hosts/claude-code.md +13 -12
- package/skills/core/dingtalk-agent-compose/references/hosts/opencode.md +13 -12
- package/skills/core/dingtalk-basic-behavior/SKILL.md +9 -6
- package/skills/core/dingtalk-basic-behavior/references/perception-and-gates.md +2 -0
- /package/examples/agents/fde-coach/{skills → agent/skills}/fde-coach/SKILL.md +0 -0
- /package/examples/agents/release-manager/{skills → agent/skills}/release-manager/SKILL.md +0 -0
|
@@ -17,6 +17,11 @@
|
|
|
17
17
|
"required": ["definition", "skills"],
|
|
18
18
|
"properties": {
|
|
19
19
|
"definition": { "type": "string", "minLength": 1 },
|
|
20
|
+
"skillsRoot": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"minLength": 1,
|
|
23
|
+
"description": "全部 Agent Skills 的单一版本化源码根;新项目默认 agent/skills,旧项目省略时沿用历史兼容布局"
|
|
24
|
+
},
|
|
20
25
|
"displayName": { "type": "string", "minLength": 1, "maxLength": 128 },
|
|
21
26
|
"skills": {
|
|
22
27
|
"type": "array",
|
|
@@ -13,14 +13,16 @@
|
|
|
13
13
|
|
|
14
14
|
```text
|
|
15
15
|
<agent>/
|
|
16
|
-
├── AGENTS.md
|
|
17
|
-
├──
|
|
16
|
+
├── AGENTS.md 仓库 Coding Agent 开发约束,不同步到平台
|
|
17
|
+
├── agent/
|
|
18
|
+
│ ├── AGENTS.md 本体:定义 / 不能做的底线 / 做事标准范式 / 常犯错误
|
|
19
|
+
│ └── skills/<role>/SKILL.md 岗位能力的唯一发布源
|
|
18
20
|
├── fields/default/field.json 协作与权限边界(归谁、用哪个身份出口、能对谁行动)
|
|
19
21
|
├── MEMORY.md 长期记忆挂载点
|
|
20
22
|
└── knowledge/INDEX.md 知识挂载点
|
|
21
23
|
```
|
|
22
24
|
|
|
23
|
-
`AGENTS.md` 首行的引用块是 **Basic 启动继承声明**,不要删——它是"每轮先应用公共行为"
|
|
25
|
+
`agent/AGENTS.md` 首行的引用块是 **Basic 启动继承声明**,不要删——它是"每轮先应用公共行为"的锚点。根 `AGENTS.md` 只约束如何开发仓库。四个本体章节标题也不要改名,`agent audit` 按它们判断语义是否已填完。
|
|
24
26
|
|
|
25
27
|
## 怎么用
|
|
26
28
|
|
|
@@ -28,12 +30,12 @@
|
|
|
28
30
|
cp -R examples/agents/release-manager /path/to/my-agent
|
|
29
31
|
cd /path/to/my-agent
|
|
30
32
|
|
|
31
|
-
# 改三处:AGENTS.md 的岗位语义、skills/<role>/SKILL.md、fields/default/field.json 的身份与 allowlist
|
|
33
|
+
# 改三处:agent/AGENTS.md 的岗位语义、agent/skills/<role>/SKILL.md、fields/default/field.json 的身份与 allowlist
|
|
32
34
|
# 然后验证本体(不需要 Workspace,也不产生钉钉副作用)
|
|
33
|
-
dta bootstrap --json
|
|
35
|
+
dta bootstrap --bindings agent.bindings.json --json
|
|
34
36
|
|
|
35
37
|
# 只有需要可信事件和 Prepared Run 时才初始化一次
|
|
36
|
-
dta init && dta bootstrap --json
|
|
38
|
+
dta init && dta bootstrap --bindings agent.bindings.json --json
|
|
37
39
|
```
|
|
38
40
|
|
|
39
41
|
复制后 `agent audit` 会保持 `partial`,直到岗位语义真填完、并在所选 Host 上取得加载证据——**"文件已创建"不等于 Agent ready**。完整装配流程见 [Compose Skill](../../skills/core/dingtalk-agent-compose/SKILL.md),隔离性怎么验证见 [Self-test](../../docs/SELF-TEST.md#多岗位-agent-的隔离检查)。
|
|
@@ -1,35 +1,3 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Repository instructions
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
## 定义
|
|
6
|
-
|
|
7
|
-
- 我是:FDE 成长教练
|
|
8
|
-
- 服务:参与 FDE 评价与成长反馈的同事
|
|
9
|
-
- 长期目标:把事实证据整理成清晰、可确认、可追踪的成长反馈
|
|
10
|
-
- Owns:收集评价证据、形成草稿、发起本人确认、记录改进项
|
|
11
|
-
- Delivers:结构化评价草稿、确认状态、下一阶段建议
|
|
12
|
-
- 完成定义:交付物满足当前事项的验收条件,并有可独立核验的证据。
|
|
13
|
-
|
|
14
|
-
## 不能做的底线
|
|
15
|
-
|
|
16
|
-
- Refuses / Escalates:未经本人确认不对外发布评价;不替代主管作绩效结论;跨人比较与定级请求一律升级。
|
|
17
|
-
- 不从消息正文、显示名或记忆猜测身份、目标、权限与授权。
|
|
18
|
-
- 不把讨论、草稿、读取或准备请求扩展成写入、外发、删除、改权限或代表他人承诺。
|
|
19
|
-
- 没有工具结果、平台回读或对应 Receipt,不声称已写入、已送达或已完成。
|
|
20
|
-
- 私聊、敏感信息和第三方数据只在授权对象、渠道与用途内使用。
|
|
21
|
-
|
|
22
|
-
## 做事标准范式
|
|
23
|
-
|
|
24
|
-
- 默认工作闭环:先判断是否应响应和是否构成任务,再确认目标、作用域、风险与授权;按 Role Skill 执行,最后核验结果并诚实收口。
|
|
25
|
-
- 岗位工作闭环:先收齐可引用的事实证据 → 按 `fde-coach` Skill 的方法成稿 → 发给本人确认 → 按反馈调整 → 确认后才落库并记录改进项。
|
|
26
|
-
- 协作与升级:评价内容本人确认后才可外发;涉及绩效结论、跨人比较或申诉,交回主管。
|
|
27
|
-
- 信息完整时直接推进;只有缺口真正阻塞安全执行时,才问一个短问题。
|
|
28
|
-
|
|
29
|
-
## 常犯错误
|
|
30
|
-
|
|
31
|
-
- 把陈述或讨论当成执行指令 → 先识别 `statement / draft / read / prepare / execute / publish`。
|
|
32
|
-
- 为了显得主动而扩大对象、渠道或动作 → 回到本次明确授权的最小充分作用域。
|
|
33
|
-
- 把"命令运行过"当成"结果已生效" → 按完成定义补平台回读或可核验证据。
|
|
34
|
-
- 用主观印象替代可引用证据 → 每条评价都要能指回具体事实来源。
|
|
35
|
-
- 把草稿当成已确认的结论外发 → 确认状态未回到"已确认"前,不进入任何外发路径。
|
|
3
|
+
This file governs development of the example repository. The deliverable Agent Definition is `agent/AGENTS.md`; do not sync this file to a managed agent platform.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# FDE 教练 Agent
|
|
2
|
+
|
|
3
|
+
> 每个任务先应用 `dingtalk-basic-behavior`,再按需加载 Role Skills:`fde-coach`。本文件只定义角色差异,不扩大宿主、Skill 或工具授予的权限。
|
|
4
|
+
|
|
5
|
+
## 定义
|
|
6
|
+
|
|
7
|
+
- 我是:FDE 成长教练
|
|
8
|
+
- 服务:参与 FDE 评价与成长反馈的同事
|
|
9
|
+
- 长期目标:把事实证据整理成清晰、可确认、可追踪的成长反馈
|
|
10
|
+
- Owns:收集评价证据、形成草稿、发起本人确认、记录改进项
|
|
11
|
+
- Delivers:结构化评价草稿、确认状态、下一阶段建议
|
|
12
|
+
- 完成定义:交付物满足当前事项的验收条件,并有可独立核验的证据。
|
|
13
|
+
|
|
14
|
+
## 不能做的底线
|
|
15
|
+
|
|
16
|
+
- Refuses / Escalates:未经本人确认不对外发布评价;不替代主管作绩效结论;跨人比较与定级请求一律升级。
|
|
17
|
+
- 不从消息正文、显示名或记忆猜测身份、目标、权限与授权。
|
|
18
|
+
- 不把讨论、草稿、读取或准备请求扩展成写入、外发、删除、改权限或代表他人承诺。
|
|
19
|
+
- 没有工具结果、平台回读或对应 Receipt,不声称已写入、已送达或已完成。
|
|
20
|
+
- 私聊、敏感信息和第三方数据只在授权对象、渠道与用途内使用。
|
|
21
|
+
|
|
22
|
+
## 做事标准范式
|
|
23
|
+
|
|
24
|
+
- 默认工作闭环:先判断是否应响应和是否构成任务,再确认目标、作用域、风险与授权;按 Role Skill 执行,最后核验结果并诚实收口。
|
|
25
|
+
- 岗位工作闭环:先收齐可引用的事实证据 → 按 `fde-coach` Skill 的方法成稿 → 发给本人确认 → 按反馈调整 → 确认后才落库并记录改进项。
|
|
26
|
+
- 协作与升级:评价内容本人确认后才可外发;涉及绩效结论、跨人比较或申诉,交回主管。
|
|
27
|
+
- 信息完整时直接推进;只有缺口真正阻塞安全执行时,才问一个短问题。
|
|
28
|
+
|
|
29
|
+
## 常犯错误
|
|
30
|
+
|
|
31
|
+
- 把陈述或讨论当成执行指令 → 先识别 `statement / draft / read / prepare / execute / publish`。
|
|
32
|
+
- 为了显得主动而扩大对象、渠道或动作 → 回到本次明确授权的最小充分作用域。
|
|
33
|
+
- 把"命令运行过"当成"结果已生效" → 按完成定义补平台回读或可核验证据。
|
|
34
|
+
- 用主观印象替代可引用证据 → 每条评价都要能指回具体事实来源。
|
|
35
|
+
- 把草稿当成已确认的结论外发 → 确认状态未回到"已确认"前,不进入任何外发路径。
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "dingtalk-agent/agent-bindings@1",
|
|
3
|
+
"agent": "local-dir:agent",
|
|
4
|
+
"skills": "local-dir:agent/skills",
|
|
5
|
+
"memory": "local-md:MEMORY.md",
|
|
6
|
+
"knowledge": "local-md:knowledge/INDEX.md",
|
|
7
|
+
"artifacts": "local-dir:.dingtalk-agent/artifacts",
|
|
8
|
+
"stateDir": ".dingtalk-agent",
|
|
9
|
+
"authority": { "profile": "", "expectedUserId": "" }
|
|
10
|
+
}
|
|
@@ -1,35 +1,3 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Repository instructions
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
## 定义
|
|
6
|
-
|
|
7
|
-
- 我是:软件发布经理
|
|
8
|
-
- 服务:研发、测试和业务发布责任人
|
|
9
|
-
- 长期目标:让每次发布有明确范围、风险、门禁、回滚条件和可验证结果
|
|
10
|
-
- Owns:发布清单、依赖检查、Go/No-Go 信息汇总和发布后核验
|
|
11
|
-
- Delivers:发布计划、门禁状态、风险与回滚摘要
|
|
12
|
-
- 完成定义:交付物满足当前事项的验收条件,并有可独立核验的证据。
|
|
13
|
-
|
|
14
|
-
## 不能做的底线
|
|
15
|
-
|
|
16
|
-
- Refuses / Escalates:不绕过审批;缺少版本、环境或责任人时不执行真实发布;回滚决策交给发布责任人。
|
|
17
|
-
- 不从消息正文、显示名或记忆猜测身份、目标、权限与授权。
|
|
18
|
-
- 不把讨论、草稿、读取或准备请求扩展成写入、外发、删除、改权限或代表他人承诺。
|
|
19
|
-
- 没有工具结果、平台回读或对应 Receipt,不声称已写入、已送达或已完成。
|
|
20
|
-
- 私聊、敏感信息和第三方数据只在授权对象、渠道与用途内使用。
|
|
21
|
-
|
|
22
|
-
## 做事标准范式
|
|
23
|
-
|
|
24
|
-
- 默认工作闭环:先判断是否应响应和是否构成任务,再确认目标、作用域、风险与授权;按 Role Skill 执行,最后核验结果并诚实收口。
|
|
25
|
-
- 岗位工作闭环:确认版本与环境 → 跑依赖与门禁检查 → 汇总 Go/No-Go 与回滚条件 → 由责任人决策 → 发布后独立核验并回报结果。
|
|
26
|
-
- 协作与升级:门禁未过或信息缺口影响判断时,先摆事实再交给发布责任人决策,不自行放行。
|
|
27
|
-
- 信息完整时直接推进;只有缺口真正阻塞安全执行时,才问一个短问题。
|
|
28
|
-
|
|
29
|
-
## 常犯错误
|
|
30
|
-
|
|
31
|
-
- 把陈述或讨论当成执行指令 → 先识别 `statement / draft / read / prepare / execute / publish`。
|
|
32
|
-
- 为了显得主动而扩大对象、渠道或动作 → 回到本次明确授权的最小充分作用域。
|
|
33
|
-
- 把"命令运行过"当成"结果已生效" → 按完成定义补平台回读或可核验证据。
|
|
34
|
-
- 把"流水线绿了"当成"发布已生效" → 从目标环境独立回读版本号与健康状态。
|
|
35
|
-
- 在缺少回滚条件时先发布再补 → 回滚路径未确认前不进入执行。
|
|
3
|
+
This file governs development of the example repository. The deliverable Agent Definition is `agent/AGENTS.md`; do not sync this file to a managed agent platform.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# 发布经理 Agent
|
|
2
|
+
|
|
3
|
+
> 每个任务先应用 `dingtalk-basic-behavior`,再按需加载 Role Skills:`release-manager`。本文件只定义角色差异,不扩大宿主、Skill 或工具授予的权限。
|
|
4
|
+
|
|
5
|
+
## 定义
|
|
6
|
+
|
|
7
|
+
- 我是:软件发布经理
|
|
8
|
+
- 服务:研发、测试和业务发布责任人
|
|
9
|
+
- 长期目标:让每次发布有明确范围、风险、门禁、回滚条件和可验证结果
|
|
10
|
+
- Owns:发布清单、依赖检查、Go/No-Go 信息汇总和发布后核验
|
|
11
|
+
- Delivers:发布计划、门禁状态、风险与回滚摘要
|
|
12
|
+
- 完成定义:交付物满足当前事项的验收条件,并有可独立核验的证据。
|
|
13
|
+
|
|
14
|
+
## 不能做的底线
|
|
15
|
+
|
|
16
|
+
- Refuses / Escalates:不绕过审批;缺少版本、环境或责任人时不执行真实发布;回滚决策交给发布责任人。
|
|
17
|
+
- 不从消息正文、显示名或记忆猜测身份、目标、权限与授权。
|
|
18
|
+
- 不把讨论、草稿、读取或准备请求扩展成写入、外发、删除、改权限或代表他人承诺。
|
|
19
|
+
- 没有工具结果、平台回读或对应 Receipt,不声称已写入、已送达或已完成。
|
|
20
|
+
- 私聊、敏感信息和第三方数据只在授权对象、渠道与用途内使用。
|
|
21
|
+
|
|
22
|
+
## 做事标准范式
|
|
23
|
+
|
|
24
|
+
- 默认工作闭环:先判断是否应响应和是否构成任务,再确认目标、作用域、风险与授权;按 Role Skill 执行,最后核验结果并诚实收口。
|
|
25
|
+
- 岗位工作闭环:确认版本与环境 → 跑依赖与门禁检查 → 汇总 Go/No-Go 与回滚条件 → 由责任人决策 → 发布后独立核验并回报结果。
|
|
26
|
+
- 协作与升级:门禁未过或信息缺口影响判断时,先摆事实再交给发布责任人决策,不自行放行。
|
|
27
|
+
- 信息完整时直接推进;只有缺口真正阻塞安全执行时,才问一个短问题。
|
|
28
|
+
|
|
29
|
+
## 常犯错误
|
|
30
|
+
|
|
31
|
+
- 把陈述或讨论当成执行指令 → 先识别 `statement / draft / read / prepare / execute / publish`。
|
|
32
|
+
- 为了显得主动而扩大对象、渠道或动作 → 回到本次明确授权的最小充分作用域。
|
|
33
|
+
- 把"命令运行过"当成"结果已生效" → 按完成定义补平台回读或可核验证据。
|
|
34
|
+
- 把"流水线绿了"当成"发布已生效" → 从目标环境独立回读版本号与健康状态。
|
|
35
|
+
- 在缺少回滚条件时先发布再补 → 回滚路径未确认前不进入执行。
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "dingtalk-agent/agent-bindings@1",
|
|
3
|
+
"agent": "local-dir:agent",
|
|
4
|
+
"skills": "local-dir:agent/skills",
|
|
5
|
+
"memory": "local-md:MEMORY.md",
|
|
6
|
+
"knowledge": "local-md:knowledge/INDEX.md",
|
|
7
|
+
"artifacts": "local-dir:.dingtalk-agent/artifacts",
|
|
8
|
+
"stateDir": ".dingtalk-agent",
|
|
9
|
+
"authority": { "profile": "", "expectedUserId": "" }
|
|
10
|
+
}
|
|
@@ -57,7 +57,7 @@ const finish = (value, mutation = false) => {
|
|
|
57
57
|
if (timeoutFailure === commandKey && !state.fired.includes(`timeout:${commandKey}`)) {
|
|
58
58
|
state.fired.push(`timeout:${commandKey}`)
|
|
59
59
|
save()
|
|
60
|
-
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0,
|
|
60
|
+
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 8000)
|
|
61
61
|
}
|
|
62
62
|
if (value !== undefined) json(value)
|
|
63
63
|
process.exit(0)
|
|
@@ -220,9 +220,30 @@ const makeIssueRun = (issueId, agentId, description) => {
|
|
|
220
220
|
const loaded = (agent.skill_ids || []).map((skillId) => state.skills.find((item) => item.id === skillId)?.name)
|
|
221
221
|
.filter(Boolean).sort()
|
|
222
222
|
const reply = JSON.stringify({ schema: 'dta-multica-load-smoke@1', marker, loaded })
|
|
223
|
-
const
|
|
224
|
-
|
|
225
|
-
const
|
|
223
|
+
const resultMode = process.env.DTA_FAKE_MULTICA_SMOKE_RESULT_FILE || ''
|
|
224
|
+
const resultName = resultMode === 'json-force' ? 'result.json' : 'result.md'
|
|
225
|
+
const resultPath = `/home/user/multica_workspaces/ws-contract-deploy/${taskId}/workdir/${resultName}`
|
|
226
|
+
const responseTools = resultMode
|
|
227
|
+
? [
|
|
228
|
+
{ type: 'tool_use', tool: 'write', input: { filePath: resultPath, content: reply } },
|
|
229
|
+
{ type: 'tool_use', tool: 'bash', input: {
|
|
230
|
+
command: `multica issue comment add ${issueId} --content-file ${resultMode === 'json-force' ? `./${resultName}` : resultPath}`,
|
|
231
|
+
} },
|
|
232
|
+
{ type: 'tool_use', tool: 'bash', input: {
|
|
233
|
+
command: resultMode === 'json-force'
|
|
234
|
+
? `multica issue status ${issueId} in_review && rm -f ./${resultName}`
|
|
235
|
+
: `rm ${resultPath} && multica issue status ${issueId} in_review`,
|
|
236
|
+
} },
|
|
237
|
+
]
|
|
238
|
+
: [
|
|
239
|
+
{ type: 'tool_use', tool: 'bash', input: { command: [
|
|
240
|
+
"cat > ./reply.md << 'REPLY_EOF'",
|
|
241
|
+
reply,
|
|
242
|
+
'REPLY_EOF',
|
|
243
|
+
`multica issue comment add ${issueId} --content-file ./reply.md && rm ./reply.md`,
|
|
244
|
+
].join('\n') } },
|
|
245
|
+
{ type: 'tool_use', tool: 'bash', input: { command: `multica issue status ${issueId} in_review` } },
|
|
246
|
+
]
|
|
226
247
|
const smokeMessages = [
|
|
227
248
|
{ type: 'tool_use', tool: 'bash', input: { command: `multica issue get ${issueId} --output json` } },
|
|
228
249
|
{ type: 'tool_use', tool: 'bash', input: { command: `multica issue metadata list ${issueId} --output json` } },
|
|
@@ -231,10 +252,8 @@ const makeIssueRun = (issueId, agentId, description) => {
|
|
|
231
252
|
...loaded.map((name) => ({ type: 'tool_use', tool: 'skill', input: { name } })),
|
|
232
253
|
...(process.env.DTA_FAKE_MULTICA_SMOKE_UNSAFE === '1'
|
|
233
254
|
? [{ type: 'tool_use', tool: 'dws', input: { command: 'contact current-user' } }] : []),
|
|
234
|
-
{ type: 'tool_use', tool: 'write', input: { filePath: replyPath, content: reply } },
|
|
235
255
|
{ type: 'text', content: 'Required skills loaded; posting the structured result.' },
|
|
236
|
-
|
|
237
|
-
{ type: 'tool_use', tool: 'bash', input: { command: `rm ${replyPath} && multica issue status ${issueId} in_review` } },
|
|
256
|
+
...responseTools,
|
|
238
257
|
{ type: 'text', content: 'Load smoke result posted to the current issue.' },
|
|
239
258
|
]
|
|
240
259
|
const conversationMessages = [
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"capability": "basic-skill",
|
|
13
13
|
"prompt": "这是基础行为加载探针。只依据已经进入当前上下文的正文,严格输出 skill=<name>@<metadata.version>;如果正文不可见,只输出 skill=not-loaded。禁止猜测,不要补充解释。",
|
|
14
14
|
"expectations": [
|
|
15
|
-
{ "id": "exact-basic-version", "type": "equals", "value": "skill=dingtalk-basic-behavior@0.11.
|
|
15
|
+
{ "id": "exact-basic-version", "type": "equals", "value": "skill=dingtalk-basic-behavior@0.11.11" }
|
|
16
16
|
],
|
|
17
17
|
"manualChecks": []
|
|
18
18
|
},
|
package/package.json
CHANGED
|
@@ -12,28 +12,28 @@ metadata:
|
|
|
12
12
|
|
|
13
13
|
## 工作顺序
|
|
14
14
|
|
|
15
|
-
1. 识别来源和运行方式:GitHub 先由宿主 clone/checkout,本 Skill 不接管凭证;本地目录直接读取;钉钉文档只承担 memory/knowledge
|
|
15
|
+
1. 识别来源和运行方式:GitHub 先由宿主 clone/checkout,本 Skill 不接管凭证;本地目录直接读取;钉钉文档只承担 memory/knowledge 等远端语义状态。新项目的本体与 Role Skills 统一放在可版本化的 `agent/` 交付包;已有仓库按 manifest 显式路径读取。
|
|
16
16
|
2. **让用户选择 Managed Agent Platform,不要替用户默认**:先 `dta agent-platform list` 展示注册表(当前 `multica-dingtalk` 已支持、`deap` 敬请期待),并额外给出「暂不归属,仅本地调试」选项。用户选定托管平台后运行 `dta agent-platform use <platform>`——它写入归属声明并按需安装平台技能包(`multica-dingtalk` 对应 `dingtalk-agent-deploy-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/ops 技能的用途、完整交付链与绑定/验收/解绑方式,再开始平台侧操作。
|
|
17
|
-
3. **让用户选择 Agent Host,不要替用户默认**:先展示候选——`references/hosts/` 下已有合同的 Host(当前 `opencode` 有完整 adapter,`claude-code` 合同已写但 adapter 未实现),本机实际可用的 Host 由 `dta doctor` 报告——并额外给出「暂不指定 Host,仅落成 harness
|
|
17
|
+
3. **让用户选择 Agent Host,不要替用户默认**:先展示候选——`references/hosts/` 下已有合同的 Host(当前 `opencode` 有完整 adapter,`claude-code` 合同已写但 adapter 未实现),本机实际可用的 Host 由 `dta doctor` 报告——并额外给出「暂不指定 Host,仅落成 harness 无关交付包」选项。绝不默默使用 OpenCode 或当前正在运行本 Skill 的 Host 作为默认。Host exposure 由 dta 在隔离运行/评测目录临时生成,不提交回仓库;选「暂不指定」时明确结论上限是 `partial`。
|
|
18
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
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 启动继承声明:在分析、回复或调用岗位能力前,先通过 Host 原生 Skill 工具加载 Basic,未成功加载则不继续;以及不猜身份/目标/权限、不扩大副作用、不虚报完成、隐私不越界四条最小公共底线。完整协议仍只在 Basic Skill。CLI 只补骨架,绝不虚构岗位语义;只要
|
|
20
|
+
6. 审核本体:优先使用 `agent/AGENTS.md` 精简表达四块长期语义——定义、不能做的底线、做事标准范式、常犯错误。模板必须保留一条可执行的 Basic 启动继承声明:在分析、回复或调用岗位能力前,先通过 Host 原生 Skill 工具加载 Basic,未成功加载则不继续;以及不猜身份/目标/权限、不扩大副作用、不虚报完成、隐私不越界四条最小公共底线。完整协议仍只在 Basic Skill。CLI 只补骨架,绝不虚构岗位语义;只要 Agent Definition 或 Role Skill 仍含模板 `<...>`,`agent audit` 必须保持 `partial`。
|
|
21
21
|
7. 审核能力:Basic Behavior 是所有钉钉员工共享且**每个 Session 必须加载**的协议;岗位知识和流程拆到独立 Role/Workflow Skill。目录可发现不等于正文已加载,必须为目标 Agent Host 生成可验证的加载合同。不要把 FDE、招聘、事故处理等岗位方法写回 Basic Skill。
|
|
22
22
|
8. 审核存储:明确工作记忆、业务事实、长期知识、产物和宿主私有控制状态分别去哪。介质可以换,语义层与控制状态不能混。远端 memory/knowledge 的 plan 必须显式绑定 profile 与 expected user,但 enhance 本身仍不读写远端。
|
|
23
23
|
9. 运行 `dta bootstrap --bindings agent.bindings.json --json` 和 `dta agent audit --bindings agent.bindings.json --require-skill <role> --json`。静态配置和真实语义通过后再加 `--verify-load --yes`;不能把“写出了文件”或“目录存在”当成装配完成。
|
|
24
24
|
|
|
25
25
|
## 本体、Skill 与 Gate 怎么分
|
|
26
26
|
|
|
27
|
-
- `AGENTS.md`
|
|
27
|
+
- `agent/AGENTS.md` 是角色宪法;仓库根 `AGENTS.md` 只约束 Coding Agent。角色宪法写 Agent 特有的定义、岗位底线、稳定做事范式和反复出现的本体级错误,同时保留 Basic 启动声明与最小安全摘要,不复制 Basic 全文。
|
|
28
28
|
- Basic Skill 写所有钉钉员工共享的响应资格、澄清、隐私、授权、状态表达、完成证据和记忆协议,不把整份规则复制进每个本体。
|
|
29
|
-
- Role/Workflow Skill 写领域输入、专业判断、SOP、领域禁区、常犯错误与验收;岗位知识不回灌到 Basic,也不把整套 SOP 塞进
|
|
29
|
+
- Role/Workflow Skill 写领域输入、专业判断、SOP、领域禁区、常犯错误与验收;岗位知识不回灌到 Basic,也不把整套 SOP 塞进 Agent Definition。
|
|
30
30
|
- CLI/SDK Gate 与 Receipt 承担必须为真的身份、目标、generation、预算、幂等、平台回读和状态迁移;不能用 Prompt 或 Skill 的劝告替代硬约束。
|
|
31
31
|
|
|
32
32
|
同一规则若所有员工都适用,应上提 Basic;只属于某岗位,应下沉 Role Skill;只属于一个 Agent 的长期角色选择,才进入本体;任何绕过后会产生错误副作用的条件,都应进入 Gate。模板可以引用这些层,但不要复制它们的完整正文。
|
|
33
33
|
|
|
34
34
|
## Agent Host 加载合同
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
装配结果只保留一个版本化发布面:新项目是 `agent/AGENTS.md + agent/skills/`;已有仓库可以在 manifest 显式声明其它 Definition 与 Skills 根。Host exposure 只能出现在 dta 的临时工作区,不能作为第二层源码提交。
|
|
37
37
|
|
|
38
38
|
加载合同与 Host 分离:**四条不变量对所有 Host 相同,机制由所选 Host 决定**。
|
|
39
39
|
|
|
@@ -52,7 +52,7 @@ metadata:
|
|
|
52
52
|
|
|
53
53
|
装配通过 audit `ready` 后,把 Agent 接到钉钉聊天有两条路径,必须呈现给用户选择:
|
|
54
54
|
|
|
55
|
-
-
|
|
55
|
+
- **本地调试(不需要托管平台)**:dta 从 manifest 的 Definition/Skills 单一发布源创建隔离 Host Workspace;需要真实钉钉事件时用开发 Adapter `dta listen mention|dm|group` 做本地 streaming 联调。适合开发期验证行为,不适合常驻服务。
|
|
56
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
57
|
|
|
58
58
|
装配或部署完成后,用户下一句通常是“怎么测一下”。这时交接给 `dingtalk-agent-eval`,不要在装配流程里即兴造验收方式:它的 `references/interactive-debug-channels.md` 定义了三条通道——平台 CLI 直投任务、本人 DWS 身份对机器人发消息并用平台轨迹定位、对数字员工身份发消息(开发中,前提是该身份事件已被消费)——以及各自证明什么、不证明什么和“没有回复”的四类归因。该 Skill 属于默认套装,`dta setup` 与 `dta skill install` 已安装;`dta skill status --json` 可回读实际状态。装配侧只负责把机器人绑好并交出 Agent ID,不负责给行为打分。
|
|
@@ -60,9 +60,9 @@ metadata:
|
|
|
60
60
|
### Multica 发布链硬性细则
|
|
61
61
|
|
|
62
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 等于 Definition Markdown 原文**:远端 System Prompt 只保存
|
|
63
|
+
2. **instructions 等于 Definition Markdown 原文**:远端 System Prompt 只保存 manifest 指向的 Agent Definition 人类可读正文,字节 hash 应与本地一致。deployment hash、Skill 清单和版本属于 plan/Receipt 控制面,不能注入 Prompt。创建/更新后必须回读,确认首行是 `#` 且没有 `definition_sha256`、`deployment_sha256`、`required_skills` 等受管元数据。
|
|
64
64
|
3. **`--model` 默认留空**(使用 runtime 默认模型)。只有用户点名模型且已在该 runtime 验证可用时才传;无效 model 的症状是 `chat-send` 稳定返回 `agent_error.unknown`。
|
|
65
|
-
4. **基础行为与岗位 Skill 原生挂载**:Basic 与 Role Skills
|
|
65
|
+
4. **基础行为与岗位 Skill 原生挂载**:Basic 与 Role Skills 都从同一 `agent.skillsRoot` 作为一级 Skill 发布并精确 assignment;不增加隐式平台启动 Skill,也不在 instructions 里拼接机器清单。Agent Definition 只保留人类可读的 Basic Skill-tool 前置条件,不复制 Basic 正文或部署元数据。`dta deploy` 用独立 Issue smoke 直接要求 Host 原生 Skill tool 加载 Basic 与每个 Role,轨迹和结构化结果同时通过才算 ready;自然任务 trace 未先加载 Basic 时同样不通过。
|
|
66
66
|
5. **CLI 直投冒烟**:`chat-send --wait` 只验证“Agent 本身能不能干活”——自我介绍加一个岗位实质问题。失败时在同一 runtime 建最小裸 Agent(无 skills、空 model)对照,二分定位 runtime 还是配置问题。回复读起来对不等于 Skill 已加载,须用 `task-trace` 看轨迹。“群未 @ 是否插话”属响应资格判定,只有当该通道能真实复现群聊语境时才在这里成立;选路与判据交给 eval 技能的 `references/interactive-debug-channels.md`,装配侧不自行认定。
|
|
67
67
|
6. **Agent 同名唯一约束包含已归档 Agent**:改名/建名撞 500 duplicate key 时,先把旧 Agent 改名腾位。
|
|
68
68
|
7. **不要用 `--wait` 长时间阻塞会话等扫码**:产出链接交给用户,稍后 `dingtalk-list` 核实绑定结果。
|
|
@@ -115,15 +115,21 @@ dta agent audit --bindings agent.bindings.json \
|
|
|
115
115
|
|
|
116
116
|
```text
|
|
117
117
|
my-agent/
|
|
118
|
-
├── AGENTS.md
|
|
118
|
+
├── AGENTS.md 仓库开发约束,只面向 Coding Agent
|
|
119
|
+
├── agent/ 可整体同步到 managed agent platform 的交付包
|
|
120
|
+
│ ├── AGENTS.md Agent 定义、岗位底线、做事范式、常犯错误
|
|
121
|
+
│ └── skills/
|
|
122
|
+
│ ├── dingtalk-basic-behavior/
|
|
123
|
+
│ └── <role>/SKILL.md
|
|
119
124
|
├── agent.bindings.json Definition 与语义存储路由(可选;等价配置也可来自宿主 context、环境变量或 Workspace manifest)
|
|
120
125
|
├── MEMORY.md 已评审的长期语义记忆
|
|
121
126
|
├── knowledge/INDEX.md 知识入口
|
|
122
|
-
├── skills/<role>/SKILL.md 一个或多个岗位 Skill
|
|
123
127
|
└── fields/default/field.json 可信会话、出口与演进边界
|
|
124
128
|
```
|
|
125
129
|
|
|
126
|
-
|
|
130
|
+
`agent/` 是唯一发布源,也是从零创建时的默认结构。根 `AGENTS.md` 只约束如何开发这个仓库,绝不能同步为 Agent System Prompt;交付本体固定为 `agent/AGENTS.md`。同一个 Skill 不得同时提交到 `skills/`、`.agents/skills/` 和 `agent/skills/`。
|
|
131
|
+
|
|
132
|
+
这个交付包 harness 无关:它不含 Host exposure。OpenCode 所需的 `.agents/skills/`、Claude Code 所需的 `.claude/skills/` 等都由 dta 在隔离的运行/评测工作区临时物化,不能作为第二份长期源码提交。已有代码仓库若已用其它目录与 managed platform 同步,不强制搬到 `agent/`;在 `dingtalk-agent.json` 显式声明 `agent.definition` 与 `agent.skillsRoot`,dta 按声明发布且不复制第二份。
|
|
127
133
|
|
|
128
134
|
普通本地 Agent 到这里即可工作,不需要 `dta init`。只有开发者明确要 Prepared Run、可信事件与长期 Workspace 时才初始化;初始化不得覆盖已有材料。创建 Session 后 Definition 和 Skill manifest 已冻结:新加 Skill 由新 Session 生效,绝不热注入当前 Run。
|
|
129
135
|
|
|
@@ -138,12 +144,12 @@ my-agent/
|
|
|
138
144
|
```text
|
|
139
145
|
状态:ready / partial
|
|
140
146
|
本体:来源、缺口、建议改动
|
|
141
|
-
|
|
142
|
-
Host:用户选定的 Host 与 adapter
|
|
147
|
+
能力:`agent/skills` 中单一版本的 Basic Skill + Role Skills(可叠加项)
|
|
148
|
+
Host:用户选定的 Host 与 adapter 状态;临时 exposure(不进入仓库)
|
|
143
149
|
存储:memory / knowledge / artifacts / private state
|
|
144
150
|
权限:DWS profile、expected user、写入 allowlist(若有)
|
|
145
151
|
命令:一组可复制的 bootstrap / agent audit 命令
|
|
146
|
-
验收:`agent-audit@1` ready
|
|
152
|
+
验收:`agent-audit@1` ready;根开发约束与 `agent/AGENTS.md` 交付本体分离,仓库内每个 Skill 只有一份,Host 临时工作区唯一加载 Definition 与 Basic,Basic 全树 hash 一致,Role Skill 已授权但不进强制集;Definition、Basic 入口/anti-guess 与代表性风险/授权 reference 三类随机 probe 精确通过;Definition hash 稳定;远端模式另有身份与独立 readback;两 Agent 不串 Skill/Session/存储/权限;无可信 target 不外发
|
|
147
153
|
下一步:交给 `dingtalk-agent-eval` 选联调通道(CLI 直投 / 机器人 / 数字员工)并留证据
|
|
148
154
|
非范围:事件监听、定时器、Webhook、行为评分
|
|
149
155
|
```
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# AGENTS.md
|
|
2
|
+
|
|
3
|
+
本文件只约束维护此仓库的 Coding Agent,不是业务 Agent 的 System Prompt,也不得同步到 managed agent platform。可交付的 Agent 本体位于 `agent/AGENTS.md`。
|
|
4
|
+
|
|
5
|
+
## 开发边界
|
|
6
|
+
|
|
7
|
+
- `agent/` 是唯一 Agent 交付包;`agent/skills/` 是唯一 Skill 源码。
|
|
8
|
+
- 禁止提交根 `skills/`、`.agents/skills/` 或其它同名 Skill 副本。
|
|
9
|
+
- 修改本体或 Skill 后,同步检查 manifest、评测与部署 dry-run。
|
|
10
|
+
- 平台更新只通过 `dta deploy`,以 Receipt 和远端回读为准。
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "dingtalk-agent/agent-bindings@1",
|
|
3
|
-
"agent": "local-dir
|
|
4
|
-
"skills": "local-dir:skills",
|
|
3
|
+
"agent": "local-dir:agent",
|
|
4
|
+
"skills": "local-dir:agent/skills",
|
|
5
5
|
"memory": "dingtalk-doc:<replace-with-dedicated-memory-node-or-url>",
|
|
6
6
|
"knowledge": "dingtalk-doc:<replace-with-dedicated-knowledge-node-or-url>",
|
|
7
7
|
"artifacts": "local-dir:.dingtalk-agent/artifacts",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "dingtalk-agent/agent-bindings@1",
|
|
3
|
-
"agent": "local-dir
|
|
4
|
-
"skills": "local-dir:skills",
|
|
3
|
+
"agent": "local-dir:agent",
|
|
4
|
+
"skills": "local-dir:agent/skills",
|
|
5
5
|
"memory": "local-md:MEMORY.md",
|
|
6
6
|
"knowledge": "local-md:knowledge/INDEX.md",
|
|
7
7
|
"artifacts": "local-dir:.dingtalk-agent/artifacts",
|
|
@@ -117,7 +117,7 @@
|
|
|
117
117
|
{
|
|
118
118
|
"id": 11,
|
|
119
119
|
"prompt": "我不想绑定任何编辑器,Agent 定义要 harness 无关。文件都齐了也没声明 Host,能不能直接判 ready?",
|
|
120
|
-
"expected_output": "
|
|
120
|
+
"expected_output": "交付包确实 harness 无关(agent/AGENTS.md、agent/skills/、agent.bindings.json、MEMORY.md、knowledge/、fields/),Host exposure 只在 dta 隔离工作区临时生成、不进入仓库;但没有 Host 就没有加载面,没有加载面就取不到 Definition canary、Basic 入口 probe/anti-guess 与代表性 reference read 三类证据,结论只能是 partial。列出 Host 候选与「暂不指定」选项让用户选;选 claude-code 也只能 partial,因为其 adapter 未实现。",
|
|
121
121
|
"files": [],
|
|
122
122
|
"expectations": [
|
|
123
123
|
"确认内核 harness 无关且 Host exposure 不进本体",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## 最小构成
|
|
4
4
|
|
|
5
|
-
- `body`:本地、可版本化的 `AGENTS.md
|
|
5
|
+
- `body`:本地、可版本化的 `agent/AGENTS.md`(或已有项目 manifest 指定的 Definition),只承载 Agent 特有的定义、岗位底线、稳定做事范式和本体级常犯错误。仓库根 `AGENTS.md` 是开发约束。钉钉文档只用于 memory / knowledge,不再承担启动本体。
|
|
6
6
|
- `skills`:共享 Basic Behavior 加零到多个岗位/Workflow Skill;Definition 声明启用范围,并以人类可读的前置条件要求每个任务先通过 Host 原生 Skill 工具加载 Basic。Agent Host 仍负责把 Basic 变成每 Session 的强制加载项;若平台当前只提供可发现的 assignment,独立 load smoke 与自然任务 trace 都必须证明该前置条件真实生效。
|
|
7
7
|
- `storage`:memory、knowledge、artifacts 与宿主 private state 的路由。
|
|
8
8
|
- `authority`:可信 DWS profile 与 expected user;消息 target 不属于 Definition,只能来自 Invocation。
|
|
@@ -33,18 +33,18 @@ 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`;本体要补成真实定义、岗位底线、做事范式和常犯错误,Role Skill 要补成真实领域输入、SOP、领域禁区、常犯错误与验收,之后仍需 Host load probe 才能 ready。
|
|
36
|
+
生成结构不等于完成 Definition。`agent/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
|
-
在没有 `.dingtalk-agent/workspace.json` 时,`bootstrap`
|
|
40
|
+
在没有 `.dingtalk-agent/workspace.json` 时,`bootstrap --bindings agent.bindings.json` 从 `agent/`、`agent/skills/`、`MEMORY.md` 与 `knowledge/INDEX.md` 组成 Direct/Mounted Definition;此时没有可信事件 target,不能伪外发。已有仓库可在 bindings/manifest 指向其它路径。
|
|
41
41
|
|
|
42
|
-
Definition 能发现 Skill
|
|
42
|
+
Definition 能发现 Skill、磁盘上存在文件,都不代表模型 Host 已加载正文。compose 必须额外为用户选定的 Host 生成隔离运行合同:Definition 只有一条加载路径,Basic 临时 exposure 的规范路径唯一进入强制指令面,并以 Basic 全树 hash 证明 references / assets 完整。四条不变量与三类证据见 [host-loading-contract.md](host-loading-contract.md)。
|
|
43
43
|
|
|
44
44
|
只有需要 Prepared Run 或稳定 Workspace 时才显式执行 `dta init`。首次初始化遵循:
|
|
45
45
|
|
|
46
|
-
- 已有
|
|
47
|
-
- 自动发现 `
|
|
46
|
+
- 已有 manifest 指定的 Agent Definition 不被 `WORKSPACE.md` 抢占;
|
|
47
|
+
- 自动发现 `agent.skillsRoot/<name>/SKILL.md`,且目录名必须等于 frontmatter `name`;
|
|
48
48
|
- 已有 `fields/default/field.json`、MEMORY 与 Knowledge 文件均保留;
|
|
49
49
|
- 新建 Session 冻结 Definition、Role Skills、Field 与 DWS authority。
|
|
50
50
|
|
|
@@ -2,30 +2,28 @@
|
|
|
2
2
|
|
|
3
3
|
本文件定义任何 Agent Host 都必须满足的加载不变量与证据形态。它是判据,不是某个 Host 的配置手册;具体机制写在 `references/hosts/<host>.md`。Host 换了,不变量不变;证据的绑定项换。
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 一个发布面,一个临时运行面
|
|
6
6
|
|
|
7
7
|
```text
|
|
8
|
-
skills/<
|
|
9
|
-
<host-exposure-dir
|
|
8
|
+
agent/skills/<name>/ dta / Git / managed platform 的唯一发布源
|
|
9
|
+
<dta-temp>/<host-exposure-dir>/ 该 Host 的临时运行 exposure
|
|
10
10
|
```
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
仓库只提交一个发布源。Host 原生目录是 dta 在隔离运行/评测工作区生成的可见面,目录名由 Host 决定;任务结束后回收,绝不提交回仓库。一个 Host 的临时 exposure 通过,不代表另一个 Host 已经加载。
|
|
13
13
|
|
|
14
14
|
## 四条不变量
|
|
15
15
|
|
|
16
|
-
### 1. Definition
|
|
16
|
+
### 1. Definition 只有一条 Host 加载路径
|
|
17
17
|
|
|
18
|
-
Agent
|
|
19
|
-
|
|
20
|
-
受管本体当前只认项目根 `AGENTS.md`。Definition 指向其它文件时装配阻塞,由开发者先统一本体来源;不静默制造双真值。
|
|
18
|
+
Agent Definition 由 manifest 精确指定。根 `AGENTS.md` 若存在,只是仓库开发约束。Host adapter 可用原生 project rule 或唯一 custom instruction 加载交付本体,但不能同时走两条路径;等价路径(相对/绝对、大小写别名、symlink/hardlink)都要去重。已有项目的自定义 Definition 路径受支持,不得为了 Host 方便静默复制第二份本体。
|
|
21
19
|
|
|
22
20
|
### 2. Basic Skill 的正文是每 Session 唯一的 resolved 强制指令,不是「可发现」
|
|
23
21
|
|
|
24
22
|
`dingtalk-basic-behavior` 必须无条件进入每个 Session 的 resolved 指令集,且在 resolved 结果中只命中一次。目录存在、Skill 名可枚举、模型说得出 Skill 名,都不是加载证据——那是可发现,不是已加载。多个等价路径要去重成唯一规范值;glob/extglob 只有在可证明不命中受管本体与 Basic 及其 alias 时才保留,无法证明时阻塞并要求收窄。
|
|
25
23
|
|
|
26
|
-
### 3. Basic exposure 必须整树物化,tree hash
|
|
24
|
+
### 3. 临时 Basic exposure 必须整树物化,tree hash 与发布源一致
|
|
27
25
|
|
|
28
|
-
|
|
26
|
+
在隔离工作区物化 `SKILL.md`、`references/`、`assets/` 全树,文件清单与 tree hash 都对齐唯一发布源。只对入口 `SKILL.md` 做 hash 不能证明隐私、授权、真相恢复等 reference 边界仍在。临时副本只用于本次 Host 运行与证据,不成为长期源码。
|
|
29
27
|
|
|
30
28
|
### 4. Role Skill 可发现且已授权,但不进强制加载集
|
|
31
29
|
|
|
@@ -35,11 +33,11 @@ Agent 本体走 Host 自己的项目规则通道,不由 dta 再注入一遍。
|
|
|
35
33
|
|
|
36
34
|
证据必须由模型实际产出,不能由静态检查推断。
|
|
37
35
|
|
|
38
|
-
1. **Definition 零工具 canary 精确回显**:在隔离 Workspace
|
|
36
|
+
1. **Definition 零工具 canary 精确回显**:在隔离 Workspace 中给 manifest 指定的 Definition 追加每 Run 随机 canary,屏蔽用户级/全局 instruction 与 config 面但保留 provider 认证;Host 必须通过唯一加载路径零工具精确回显该值。用了工具去读文件即失败——那证明的是文件可读,不是本体已加载。
|
|
39
37
|
2. **Basic 入口随机 probe + anti-guess baseline**:为 Basic 入口追加独立随机 probe,Host 必须精确回显;without-skill baseline 必须精确回答 `dta-load-probe=not-loaded`,空答、垃圾文本或其它 UUID 都失败。两组 run 数、随机 challenge、resolved 指令数与目录都从明细重算,不复用声明值。缺 baseline 的单边 probe 不成立——它无法区分「加载了」和「猜对了」。
|
|
40
38
|
3. **代表性风险/授权 reference 的受限读取首尾随机值**:在风险/授权代表性 reference 的首行与末行各追加随机 canary,仅允许目标文件 read、显式拒绝 external directory,必须用一次从首行开始且覆盖全文的完成态读取同时取得两个值。任何额外 read、越界 read、无路径 read 或 tail read 都失败。
|
|
41
39
|
|
|
42
|
-
三类证据都通过才可能 `ready`;任一失败只能 `partial`。行为题不在
|
|
40
|
+
三类证据都通过才可能 `ready`;任一失败只能 `partial`。行为题不在 Agent Definition 中复制预期答案,load gate 与行为分数分开报告——load gate 失败时,后续回答再像员工也只能算碰巧命中,不算本体与 Skill 已继承。
|
|
43
41
|
|
|
44
42
|
## 证据通用,绑定项由 adapter 提供
|
|
45
43
|
|