@xdxer/dingtalk-agent 0.1.5-beta.6 → 0.1.5-beta.8

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.
Files changed (119) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/README.en.md +6 -6
  3. package/README.md +6 -6
  4. package/dist/bin/dingtalk-agent.js +81 -28
  5. package/dist/bin/dingtalk-agent.js.map +1 -1
  6. package/dist/src/agent-audit.js +29 -25
  7. package/dist/src/agent-audit.js.map +1 -1
  8. package/dist/src/agent-definition.js +7 -3
  9. package/dist/src/agent-definition.js.map +1 -1
  10. package/dist/src/agent-enhance.js +2 -2
  11. package/dist/src/agent-enhance.js.map +1 -1
  12. package/dist/src/agent-platform.js +2 -2
  13. package/dist/src/agent-platform.js.map +1 -1
  14. package/dist/src/development-workspace.js +14 -9
  15. package/dist/src/development-workspace.js.map +1 -1
  16. package/dist/src/doctor.js +58 -7
  17. package/dist/src/doctor.js.map +1 -1
  18. package/dist/src/opencode-evals.js +6 -6
  19. package/dist/src/opencode-evals.js.map +1 -1
  20. package/dist/src/opencode-provider.js +2 -2
  21. package/dist/src/opencode-provider.js.map +1 -1
  22. package/dist/src/opencode-workspace.js +3 -3
  23. package/dist/src/opencode-workspace.js.map +1 -1
  24. package/dist/src/personal-event-evals.js +4 -2
  25. package/dist/src/personal-event-evals.js.map +1 -1
  26. package/dist/src/remote-semantic-state-live-evals.js +5 -4
  27. package/dist/src/remote-semantic-state-live-evals.js.map +1 -1
  28. package/dist/src/remote-state-evals.js +2 -2
  29. package/dist/src/remote-state-evals.js.map +1 -1
  30. package/dist/src/robot-evals.js +3 -3
  31. package/dist/src/robot-evals.js.map +1 -1
  32. package/dist/src/schedule-plan.js +1 -1
  33. package/dist/src/schedule-plan.js.map +1 -1
  34. package/dist/src/sessions.js +1 -1
  35. package/dist/src/sessions.js.map +1 -1
  36. package/dist/src/skill-manager.js +141 -13
  37. package/dist/src/skill-manager.js.map +1 -1
  38. package/dist/src/workspace.js +2 -2
  39. package/dist/src/workspace.js.map +1 -1
  40. package/docs/ARCHITECTURE.md +9 -9
  41. package/docs/INSTALLATION.md +6 -6
  42. package/docs/SELF-TEST.md +3 -3
  43. package/docs/schemas/project.schema.json +2 -2
  44. package/examples/agents/README.md +1 -1
  45. package/examples/agents/fde-coach/agent/AGENTS.md +1 -1
  46. package/examples/agents/release-manager/agent/AGENTS.md +1 -1
  47. package/lab/agent-eval/catalog.json +5 -5
  48. package/lab/agent-eval/classic-failures.json +4 -4
  49. package/lab/agent-eval/completion-gate-regression.json +9 -9
  50. package/lab/agent-eval/personal-event-live.example.json +3 -3
  51. package/lab/agent-eval/remote-semantic-state-live.example.json +1 -1
  52. package/lab/agent-eval/workspace/opencode.json +2 -2
  53. package/lab/project-workspace/multica-readonly.fixture.json +2 -2
  54. package/lab/project-workspace/opencode-provider-suite.json +2 -2
  55. package/lab/project-workspace/project.fixture.json +1 -1
  56. package/lab/robot-eval/suite.json +1 -1
  57. package/lab/robot-eval/workspace/AGENTS.md +1 -1
  58. package/lab/robot-eval/workspace/opencode.json +2 -2
  59. package/lab/schemas/personal-event-eval.schema.json +1 -1
  60. package/package.json +7 -7
  61. package/skills/README.md +10 -7
  62. package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/SKILL.md +8 -8
  63. package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/assets/AGENTS.template.md +1 -1
  64. package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/assets/hosts/opencode/opencode.template.json +2 -2
  65. package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/evals/evals.json +3 -3
  66. package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/references/host-loading-contract.md +1 -1
  67. package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/references/hosts/claude-code.md +1 -1
  68. package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/references/hosts/opencode.md +2 -2
  69. package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/SKILL.md +2 -2
  70. package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/assets/eval-catalog.template.json +1 -1
  71. package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/evals/evals.json +1 -1
  72. package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/eval-topology.md +3 -3
  73. package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/interactive-debug-channels.md +1 -1
  74. package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/SKILL.md +2 -2
  75. package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/event-to-behavior.md +1 -1
  76. package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/COMPLETENESS.md +1 -1
  77. package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/SKILL.md +2 -2
  78. package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/config-binding.md +1 -1
  79. package/skills/platforms/deap/PLATFORM.md +1 -1
  80. package/skills/platforms/multica-dingtalk/PLATFORM.md +4 -4
  81. package/skills/platforms/multica-dingtalk/{dingtalk-agent-deploy-multica → dta-deploy-multica}/SKILL.md +3 -3
  82. package/skills/platforms/multica-dingtalk/{multica-external → dta-ops-multica}/SKILL.md +5 -5
  83. package/skills/platforms/multica-dingtalk/{multica-external → dta-ops-multica}/scripts/bootstrap.sh +2 -2
  84. package/dist/src/map.js +0 -157
  85. package/dist/src/map.js.map +0 -1
  86. /package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/assets/REPOSITORY.template.md +0 -0
  87. /package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/assets/agent.bindings.dingtalk-doc.template.json +0 -0
  88. /package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/assets/agent.bindings.local.template.json +0 -0
  89. /package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/assets/role-skill.template.md +0 -0
  90. /package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/references/agent-definition-contract.md +0 -0
  91. /package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/references/drive-and-schedules.md +0 -0
  92. /package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/references/storage-routing.md +0 -0
  93. /package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/evidence-contract.md +0 -0
  94. /package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/failure-to-case.md +0 -0
  95. /package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/local-connector-smoke.md +0 -0
  96. /package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/scenario-taxonomy.md +0 -0
  97. /package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/storage-modes.md +0 -0
  98. /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/assets/memory-candidate-proposal.json +0 -0
  99. /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/assets/task-checkpoint.json +0 -0
  100. /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/action-contract.md +0 -0
  101. /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/memory-and-evolution.md +0 -0
  102. /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/perception-and-gates.md +0 -0
  103. /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/risk-authority-and-privacy.md +0 -0
  104. /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/runtime-modes.md +0 -0
  105. /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/task-lifecycle.md +0 -0
  106. /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/truth-and-recovery.md +0 -0
  107. /package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/adapters.md +0 -0
  108. /package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/assembly-guidance.md +0 -0
  109. /package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/binding.md +0 -0
  110. /package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/cold-start.md +0 -0
  111. /package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/consent-and-visibility.md +0 -0
  112. /package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/consolidation.md +0 -0
  113. /package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/event-ingest.md +0 -0
  114. /package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/guided-setup.md +0 -0
  115. /package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/model.md +0 -0
  116. /package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/storage-port.md +0 -0
  117. /package/skills/platforms/multica-dingtalk/{dingtalk-agent-deploy-multica → dta-deploy-multica}/references/multica-deployment-contract.md +0 -0
  118. /package/skills/platforms/multica-dingtalk/{dingtalk-agent-deploy-multica → dta-deploy-multica}/references/promotion-observation-contract.md +0 -0
  119. /package/skills/platforms/multica-dingtalk/{multica-external → dta-ops-multica}/scripts/multica_ext.py +0 -0
@@ -9,11 +9,11 @@ import { prepareOpenCodeEvalAgent, resolveOpenCodeEvalAgent, readOpenCodeVersion
9
9
  import { bindRequiredBasicSkill, verifyRequiredBasicSkill } from './opencode-workspace.js';
10
10
  import { countInstructionsForPath } from './instruction-path.js';
11
11
  import { resolvePackageRoot } from './package-root.js';
12
- import { bundledSkillPath } from './skill-manager.js';
12
+ import { bundledSkillPath, isBasicSkillName } from './skill-manager.js';
13
13
  import { createIsolatedOpenCodeHost } from './opencode-isolation.js';
14
14
  const COMPOSE_TEMPLATE_MARKER = /<(?:Agent 名称|岗位\/角色|人群、团队或工作场域|长期目标|主动负责的事项|可观察的交付物|明确不做或必须升级确认的事项|岗位稳定的输入、判断、交付与验收范式|何时自行推进、何时交给谁|本体级常见错误 [12]|纠偏动作 [12]|Role Skill names|role-skill-name|Role Skill 名称|岗位职责或工作流|领域判断、输入与交付物|相邻职责或明确交接边界|岗位特有的禁区或必须升级条件|领域输入|领域方法\/SOP|领域常见错误|领域纠偏动作|可观察结果 [12]|route)>/u;
15
- const BASIC = 'dingtalk-basic-behavior';
16
- const BASIC_INSTRUCTION = '.agents/skills/dingtalk-basic-behavior/SKILL.md';
15
+ const BASIC = 'dta-basic-behavior';
16
+ const BASIC_INSTRUCTION = '.agents/skills/dta-basic-behavior/SKILL.md';
17
17
  const DEFINITION_PROBE_PROMPT = '这是 Agent Definition 继承探针。只依据已强制加载的角色宪法末尾注释回答;' +
18
18
  '严格输出纯文本 dta-definition-probe=<值>,若看不到则输出纯文本 ' +
19
19
  'dta-definition-probe=not-loaded。不要使用反引号或代码块;禁止猜测、调用工具或解释。';
@@ -29,7 +29,7 @@ export function auditAgent(root, options = {}) {
29
29
  const hydrated = bootstrap(rootReal, { ...(options.bootstrap || {}), deferRemote: true });
30
30
  const definition = hydrated.definition;
31
31
  const requiredSkills = [...new Set((options.requiredSkills || [])
32
- .map((item) => item.trim()).filter((item) => item && item !== 'dingtalk-basic-behavior'))];
32
+ .map((item) => item.trim()).filter((item) => item && !isBasicSkillName(item)))];
33
33
  const checks = [];
34
34
  const add = (id, surface, level, blocking, summary, evidence = {}) => checks.push({ id, surface, level, blocking, summary, evidence });
35
35
  const memoryMounted = definition.storage.memory.startsWith('dingtalk-doc:') ||
@@ -66,7 +66,7 @@ export function auditAgent(root, options = {}) {
66
66
  : '远端语义状态缺少 DWS profile 或 expected user', { remoteSlots: remoteSlots.length, profileConfigured: Boolean(definition.authority.dwsProfile),
67
67
  expectedUserConfigured: Boolean(definition.authority.expectedUserId) });
68
68
  const roleSkills = new Map(definition.skills
69
- .filter((item) => item.name !== 'dingtalk-basic-behavior')
69
+ .filter((item) => !isBasicSkillName(item.name))
70
70
  .map((item) => [item.name, item]));
71
71
  for (const name of requiredSkills) {
72
72
  const skill = roleSkills.get(name);
@@ -78,7 +78,11 @@ export function auditAgent(root, options = {}) {
78
78
  }
79
79
  }
80
80
  const basic = readCanonicalBasicSkill();
81
- const packagedBasic = definition.skills.find((item) => item.name === BASIC);
81
+ // legacy 名也认一次:改名过渡期里 Definition 可能仍声明旧名。认出来之后 exposure
82
+ // 检查照常严格比对 canonical(旧副本必然 hash 不符,本来就该 fail)——这里放宽的只是
83
+ // 「找得到那份文件」,好让报告指向真正陈旧的路径,而不是含糊地说缺失。
84
+ const packagedBasic = definition.skills.find((item) => isBasicSkillName(item.name));
85
+ const declaredBasic = packagedBasic?.name || BASIC;
82
86
  const basicExposurePath = packagedBasic?.path || join(rootReal, '.agents', 'skills', BASIC, 'SKILL.md');
83
87
  const basicExposure = inspectSkill(basicExposurePath);
84
88
  const basicExposureTree = inspectSkillTree(basicExposurePath);
@@ -106,11 +110,11 @@ export function auditAgent(root, options = {}) {
106
110
  const basicInstruction = relative(rootReal, basicExposurePath).split('\\').join('/');
107
111
  const instructionCount = countInstructionsForPath(rootReal, config.instructions, basicInstruction);
108
112
  add('host.basic-instruction', 'host', !config.error && instructionCount === 1 &&
109
- config.permissions['dingtalk-basic-behavior'] === 'allow' ? 'pass' : 'fail', true, !config.error && instructionCount === 1 &&
110
- config.permissions['dingtalk-basic-behavior'] === 'allow'
113
+ config.permissions[declaredBasic] === 'allow' ? 'pass' : 'fail', true, !config.error && instructionCount === 1 &&
114
+ config.permissions[declaredBasic] === 'allow'
111
115
  ? 'OpenCode 每 Session 强制加载 Basic Skill'
112
116
  : 'opencode.json 未形成唯一 Basic instruction + allow 合同', { path: config.path, error: config.error, instructionCount,
113
- permission: config.permissions['dingtalk-basic-behavior'] || '' });
117
+ permission: config.permissions[declaredBasic] || '' });
114
118
  for (const name of requiredSkills) {
115
119
  const source = roleSkills.get(name);
116
120
  const permission = config.permissions[name] || '';
@@ -228,14 +232,14 @@ export function auditAgent(root, options = {}) {
228
232
  };
229
233
  }
230
234
  function readCanonicalBasicSkill() {
231
- const path = join(bundledSkillPath(resolvePackageRoot(import.meta.url), 'dingtalk-basic-behavior'), 'SKILL.md');
235
+ const path = join(bundledSkillPath(resolvePackageRoot(import.meta.url), 'dta-basic-behavior'), 'SKILL.md');
232
236
  const inspected = inspectSkill(path);
233
- if (!inspected.exists || inspected.name !== 'dingtalk-basic-behavior' || !inspected.version) {
234
- throw new Error('包内 canonical dingtalk-basic-behavior 非法');
237
+ if (!inspected.exists || inspected.name !== 'dta-basic-behavior' || !inspected.version) {
238
+ throw new Error('包内 canonical dta-basic-behavior 非法');
235
239
  }
236
240
  const tree = inspectSkillTree(path);
237
241
  if (!tree.hash)
238
- throw new Error(`包内 canonical dingtalk-basic-behavior 全树非法: ${tree.error}`);
242
+ throw new Error(`包内 canonical dta-basic-behavior 全树非法: ${tree.error}`);
239
243
  return {
240
244
  name: inspected.name, version: inspected.version, path,
241
245
  hash: inspected.hash, treeHash: tree.hash,
@@ -384,7 +388,7 @@ function currentLoadTargetHash(root, options, requiredSkills, model) {
384
388
  const exposedTree = inspectSkillTree(exposedPath);
385
389
  const config = inspectOpenCodeConfig(root);
386
390
  const roleSkills = new Map(definition.skills
387
- .filter((item) => item.name !== 'dingtalk-basic-behavior')
391
+ .filter((item) => !isBasicSkillName(item.name))
388
392
  .map((item) => [item.name, item]));
389
393
  const roleSourceHashes = Object.fromEntries(requiredSkills.map((name) => [
390
394
  name, roleSkills.get(name)?.hash || '',
@@ -442,7 +446,7 @@ function executeLoadAudit(root, options, targetHash, definitionInstruction, basi
442
446
  execution: { host: 'opencode-only', tools: 'none' },
443
447
  prompt: '这是装配验收。保留评测 marker,并用一句话确认已进入直接工作状态;不要提问。',
444
448
  expectations: [{ id: 'no-question', type: 'maxQuestions', max: 0 }],
445
- sourceRefs: ['skills/core/dingtalk-agent-compose/references/hosts/opencode.md'],
449
+ sourceRefs: ['skills/core/dta-agent-compose/references/hosts/opencode.md'],
446
450
  manualChecks: [],
447
451
  }],
448
452
  }, null, 2) + '\n');
@@ -498,7 +502,7 @@ function materializeAuditProbeWorkspace(sourceRoot, targetRoot, definitionInstru
498
502
  mkdirSync(targetRoot, { recursive: true });
499
503
  writeAtomic(join(targetRoot, definitionInstruction), readFileSync(join(sourceRoot, definitionInstruction), 'utf8'));
500
504
  const sourceBasic = dirname(join(sourceRoot, basicInstruction));
501
- const targetBasic = join(targetRoot, '.agents', 'skills', 'dingtalk-basic-behavior');
505
+ const targetBasic = join(targetRoot, '.agents', 'skills', 'dta-basic-behavior');
502
506
  mkdirSync(dirname(targetBasic), { recursive: true });
503
507
  cpSync(sourceBasic, targetBasic, { recursive: true });
504
508
  const config = {
@@ -507,7 +511,7 @@ function materializeAuditProbeWorkspace(sourceRoot, targetRoot, definitionInstru
507
511
  ...(definitionInstruction === 'AGENTS.md' ? [] : [definitionInstruction]),
508
512
  BASIC_INSTRUCTION,
509
513
  ],
510
- permission: { skill: { 'dingtalk-basic-behavior': 'allow' } },
514
+ permission: { skill: { 'dta-basic-behavior': 'allow' } },
511
515
  plugin: [],
512
516
  mcp: {},
513
517
  share: 'disabled',
@@ -591,7 +595,7 @@ function inspectSourceOpenCodeRuntime(command, root, environment, definitionInst
591
595
  };
592
596
  }
593
597
  function executeInheritanceProbe(sourceRoot, model, command, timeoutMs, reportEvidenceRoot, definitionInstruction, environment) {
594
- const referenceInstruction = '.agents/skills/dingtalk-basic-behavior/references/risk-authority-and-privacy.md';
598
+ const referenceInstruction = '.agents/skills/dta-basic-behavior/references/risk-authority-and-privacy.md';
595
599
  const definitionProbe = randomUUID();
596
600
  const referenceProbeStart = randomUUID();
597
601
  const referenceProbeEnd = randomUUID();
@@ -602,8 +606,8 @@ function executeInheritanceProbe(sourceRoot, model, command, timeoutMs, reportEv
602
606
  initializeProbeWorktree(sandbox);
603
607
  const sourceDefinitionPath = resolve(sourceRoot, definitionInstruction);
604
608
  const definitionPath = resolve(sandbox, definitionInstruction);
605
- const sourceBasicPath = join(sourceRoot, '.agents', 'skills', 'dingtalk-basic-behavior');
606
- const basicPath = join(sandbox, '.agents', 'skills', 'dingtalk-basic-behavior');
609
+ const sourceBasicPath = join(sourceRoot, '.agents', 'skills', 'dta-basic-behavior');
610
+ const basicPath = join(sandbox, '.agents', 'skills', 'dta-basic-behavior');
607
611
  const referencePath = resolve(sandbox, referenceInstruction);
608
612
  if (!isInside(sourceRoot, sourceDefinitionPath) || !existsSync(sourceDefinitionPath) ||
609
613
  !isInside(sandbox, definitionPath) || !existsSync(sourceBasicPath)) {
@@ -638,7 +642,7 @@ function executeInheritanceProbe(sourceRoot, model, command, timeoutMs, reportEv
638
642
  sourceConfig.permission = {
639
643
  ...permission,
640
644
  external_directory: 'deny',
641
- skill: { ...skill, 'dingtalk-basic-behavior': 'allow' },
645
+ skill: { ...skill, 'dta-basic-behavior': 'allow' },
642
646
  };
643
647
  writeAtomic(join(sandbox, 'opencode.json'), JSON.stringify(sourceConfig, null, 2) + '\n');
644
648
  const probeEnvironment = { ...environment, PWD: sandbox };
@@ -997,7 +1001,7 @@ function verifyLoadReport(root, reportPath, report, basic, definitionInstruction
997
1001
  Array.isArray(reference.toolPaths) && reference.toolPaths.length === 1 &&
998
1002
  reference.toolPaths[0] === reference.path;
999
1003
  const referencePassed = reference.path ===
1000
- '.agents/skills/dingtalk-basic-behavior/references/risk-authority-and-privacy.md' &&
1004
+ '.agents/skills/dta-basic-behavior/references/risk-authority-and-privacy.md' &&
1001
1005
  validRandomProbe(reference.expected, 'dta-reference-probe') &&
1002
1006
  reference.answer === reference.expected && reference.exitCode === 0 &&
1003
1007
  reference.directoryMatched === true && referenceRead && referenceFullRead &&
@@ -1176,7 +1180,7 @@ function persistedToolPaths(event) {
1176
1180
  typeof value !== 'string')
1177
1181
  continue;
1178
1182
  const normalized = value.replace(/\\/g, '/').replace(/^\.\//, '');
1179
- const target = '.agents/skills/dingtalk-basic-behavior/references/' +
1183
+ const target = '.agents/skills/dta-basic-behavior/references/' +
1180
1184
  'risk-authority-and-privacy.md';
1181
1185
  paths.push(normalized === target || normalized.endsWith(`/${target}`)
1182
1186
  ? target : normalized);
@@ -1281,7 +1285,7 @@ function repairFor(id) {
1281
1285
  if (id === 'host.basic-exposure')
1282
1286
  return {
1283
1287
  id, why: 'OpenCode 只能从项目 exposure 完整继承本次装配的 Basic Skill 入口、references 与 assets。',
1284
- actions: ['把 canonical dingtalk-basic-behavior 全树放入 agent.skillsRoot;由 dta 在隔离 Host 工作区临时物化 exposure。'],
1288
+ actions: ['把 canonical dta-basic-behavior 全树放入 agent.skillsRoot;由 dta 在隔离 Host 工作区临时物化 exposure。'],
1285
1289
  };
1286
1290
  if (id === 'host.definition-rule')
1287
1291
  return {
@@ -1291,7 +1295,7 @@ function repairFor(id) {
1291
1295
  if (id === 'host.basic-instruction')
1292
1296
  return {
1293
1297
  id, why: '目录发现不等于正文进入每个 Session。',
1294
- actions: ['合并 opencode.json:Basic path 仅出现一次,并设置 permission.skill.dingtalk-basic-behavior=allow。'],
1298
+ actions: ['合并 opencode.json:Basic path 仅出现一次,并设置 permission.skill.dta-basic-behavior=allow。'],
1295
1299
  };
1296
1300
  if (id.startsWith('host.role-exposure.'))
1297
1301
  return {