@xdxer/dingtalk-agent 0.1.5-beta.5 → 0.1.5-beta.7
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 +52 -0
- package/README.en.md +6 -6
- package/README.md +6 -6
- package/dist/bin/dingtalk-agent.js +406 -139
- package/dist/bin/dingtalk-agent.js.map +1 -1
- package/dist/src/actions.js +3 -2
- package/dist/src/actions.js.map +1 -1
- package/dist/src/agent-audit.js +29 -25
- package/dist/src/agent-audit.js.map +1 -1
- package/dist/src/agent-definition.js +7 -3
- package/dist/src/agent-definition.js.map +1 -1
- package/dist/src/agent-enhance.js +2 -2
- package/dist/src/agent-enhance.js.map +1 -1
- package/dist/src/agent-platform.js +2 -2
- package/dist/src/agent-platform.js.map +1 -1
- package/dist/src/development-workspace.js +14 -9
- package/dist/src/development-workspace.js.map +1 -1
- package/dist/src/doctor.js +58 -7
- package/dist/src/doctor.js.map +1 -1
- package/dist/src/dws.js +2 -1
- package/dist/src/dws.js.map +1 -1
- package/dist/src/init.js +2 -1
- package/dist/src/init.js.map +1 -1
- package/dist/src/map.js +157 -0
- package/dist/src/map.js.map +1 -0
- package/dist/src/opencode-evals.js +6 -6
- package/dist/src/opencode-evals.js.map +1 -1
- package/dist/src/opencode-provider.js +2 -2
- package/dist/src/opencode-provider.js.map +1 -1
- package/dist/src/opencode-workspace.js +3 -3
- package/dist/src/opencode-workspace.js.map +1 -1
- package/dist/src/personal-event-evals.js +4 -2
- package/dist/src/personal-event-evals.js.map +1 -1
- package/dist/src/remote-semantic-state-live-evals.js +5 -4
- package/dist/src/remote-semantic-state-live-evals.js.map +1 -1
- package/dist/src/remote-state-evals.js +2 -2
- package/dist/src/remote-state-evals.js.map +1 -1
- package/dist/src/robot-evals.js +3 -3
- package/dist/src/robot-evals.js.map +1 -1
- package/dist/src/schedule-plan.js +1 -1
- package/dist/src/schedule-plan.js.map +1 -1
- package/dist/src/sessions.js +1 -1
- package/dist/src/sessions.js.map +1 -1
- package/dist/src/skill-manager.js +74 -13
- package/dist/src/skill-manager.js.map +1 -1
- package/dist/src/tui.js +369 -0
- package/dist/src/tui.js.map +1 -0
- package/dist/src/upgrade.js +113 -33
- package/dist/src/upgrade.js.map +1 -1
- package/dist/src/waits.js +2 -1
- package/dist/src/waits.js.map +1 -1
- package/dist/src/workspace.js +2 -2
- package/dist/src/workspace.js.map +1 -1
- package/docs/ARCHITECTURE.md +9 -9
- package/docs/INSTALLATION.md +6 -6
- package/docs/SELF-TEST.md +3 -3
- package/docs/schemas/project.schema.json +2 -2
- package/examples/agents/README.md +1 -1
- package/examples/agents/fde-coach/agent/AGENTS.md +1 -1
- package/examples/agents/release-manager/agent/AGENTS.md +1 -1
- package/lab/agent-eval/catalog.json +5 -5
- package/lab/agent-eval/classic-failures.json +4 -4
- package/lab/agent-eval/completion-gate-regression.json +9 -9
- package/lab/agent-eval/personal-event-live.example.json +3 -3
- package/lab/agent-eval/remote-semantic-state-live.example.json +1 -1
- package/lab/agent-eval/workspace/opencode.json +2 -2
- package/lab/project-workspace/multica-readonly.fixture.json +2 -2
- package/lab/project-workspace/opencode-provider-suite.json +2 -2
- package/lab/project-workspace/project.fixture.json +1 -1
- package/lab/robot-eval/suite.json +1 -1
- package/lab/robot-eval/workspace/AGENTS.md +1 -1
- package/lab/robot-eval/workspace/opencode.json +2 -2
- package/lab/schemas/personal-event-eval.schema.json +1 -1
- package/package.json +8 -8
- package/skills/README.md +10 -7
- package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/SKILL.md +8 -8
- package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/assets/AGENTS.template.md +1 -1
- package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/assets/hosts/opencode/opencode.template.json +2 -2
- package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/evals/evals.json +3 -3
- package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/references/host-loading-contract.md +1 -1
- package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/references/hosts/claude-code.md +1 -1
- package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/references/hosts/opencode.md +2 -2
- package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/SKILL.md +2 -2
- package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/assets/eval-catalog.template.json +1 -1
- package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/evals/evals.json +1 -1
- package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/eval-topology.md +3 -3
- package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/interactive-debug-channels.md +1 -1
- package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/SKILL.md +2 -2
- package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/event-to-behavior.md +1 -1
- package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/COMPLETENESS.md +1 -1
- package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/SKILL.md +2 -2
- package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/config-binding.md +1 -1
- package/skills/platforms/deap/PLATFORM.md +1 -1
- package/skills/platforms/multica-dingtalk/PLATFORM.md +4 -4
- package/skills/platforms/multica-dingtalk/{dingtalk-agent-deploy-multica → dta-deploy-multica}/SKILL.md +3 -3
- package/skills/platforms/multica-dingtalk/{multica-external → dta-ops-multica}/SKILL.md +5 -5
- package/skills/platforms/multica-dingtalk/{multica-external → dta-ops-multica}/scripts/bootstrap.sh +2 -2
- /package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/assets/REPOSITORY.template.md +0 -0
- /package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/assets/agent.bindings.dingtalk-doc.template.json +0 -0
- /package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/assets/agent.bindings.local.template.json +0 -0
- /package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/assets/role-skill.template.md +0 -0
- /package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/references/agent-definition-contract.md +0 -0
- /package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/references/drive-and-schedules.md +0 -0
- /package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/references/storage-routing.md +0 -0
- /package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/evidence-contract.md +0 -0
- /package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/failure-to-case.md +0 -0
- /package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/local-connector-smoke.md +0 -0
- /package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/scenario-taxonomy.md +0 -0
- /package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/storage-modes.md +0 -0
- /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/assets/memory-candidate-proposal.json +0 -0
- /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/assets/task-checkpoint.json +0 -0
- /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/action-contract.md +0 -0
- /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/memory-and-evolution.md +0 -0
- /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/perception-and-gates.md +0 -0
- /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/risk-authority-and-privacy.md +0 -0
- /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/runtime-modes.md +0 -0
- /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/task-lifecycle.md +0 -0
- /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/truth-and-recovery.md +0 -0
- /package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/adapters.md +0 -0
- /package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/assembly-guidance.md +0 -0
- /package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/binding.md +0 -0
- /package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/cold-start.md +0 -0
- /package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/consent-and-visibility.md +0 -0
- /package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/consolidation.md +0 -0
- /package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/event-ingest.md +0 -0
- /package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/guided-setup.md +0 -0
- /package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/model.md +0 -0
- /package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/storage-port.md +0 -0
- /package/skills/platforms/multica-dingtalk/{dingtalk-agent-deploy-multica → dta-deploy-multica}/references/multica-deployment-contract.md +0 -0
- /package/skills/platforms/multica-dingtalk/{dingtalk-agent-deploy-multica → dta-deploy-multica}/references/promotion-observation-contract.md +0 -0
- /package/skills/platforms/multica-dingtalk/{multica-external → dta-ops-multica}/scripts/multica_ext.py +0 -0
package/dist/src/actions.js
CHANGED
|
@@ -12,6 +12,7 @@ import { verifyPreparedDefinition } from './agent-definition.js';
|
|
|
12
12
|
import { verifyEnrichedInvocation } from './perception.js';
|
|
13
13
|
import { verifyResponseGate } from './response-gate.js';
|
|
14
14
|
import { acquireSessionEffectLock, armWait, completeWaitFromReceipt, markWaitTransportAccepted, reconcileWaitFromReceipt, } from './waits.js';
|
|
15
|
+
import { err } from './tui.js';
|
|
15
16
|
const OUTWARD = new Set(['ack', 'reply', 'ask']);
|
|
16
17
|
const TERMINAL = new Set(['reply', 'ask', 'silence']);
|
|
17
18
|
const KINDS = new Set(['ack', 'reply', 'ask', 'silence']);
|
|
@@ -602,7 +603,7 @@ function persistArtifact(context, actionPath, name, value) {
|
|
|
602
603
|
writeJsonAtomic(join(mirrorDir, name), value);
|
|
603
604
|
}
|
|
604
605
|
catch (e) {
|
|
605
|
-
console.error(` ⚠️ sandbox 投影写入失败(control store 已保留真值): ${e.message}`);
|
|
606
|
+
console.error(err().theme.warn(` ⚠️ sandbox 投影写入失败(control store 已保留真值): ${e.message}`));
|
|
606
607
|
}
|
|
607
608
|
}
|
|
608
609
|
function persistReceipt(context, actionPath, receipt) {
|
|
@@ -614,7 +615,7 @@ function mirrorJson(path, value) {
|
|
|
614
615
|
writeJsonAtomic(path, value);
|
|
615
616
|
}
|
|
616
617
|
catch (e) {
|
|
617
|
-
console.error(` ⚠️ sandbox 投影写入失败(control store 已保留真值): ${e.message}`);
|
|
618
|
+
console.error(err().theme.warn(` ⚠️ sandbox 投影写入失败(control store 已保留真值): ${e.message}`));
|
|
618
619
|
}
|
|
619
620
|
}
|
|
620
621
|
function transportName(kind) {
|
package/dist/src/actions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/actions.ts"],"names":[],"mappings":"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","sourcesContent":["// Basic Behavior 的四个原子动作(TypeScript source)。\n// Sandbox 中的 context/ 是可读投影;真正的 target/profile/policy/state 来自 sandbox 外 event index。\n\nimport { existsSync, mkdirSync, realpathSync, readdirSync } from 'node:fs'\nimport { dirname, join, resolve, parse, basename } from 'node:path'\nimport { randomUUID } from 'node:crypto'\nimport { digest, stableStringify } from './events.js'\nimport {\n acquireControlLock, acquireExecutionLock, readJson, writeJsonAtomic,\n} from './sessions.js'\nimport * as cfgmod from './config.js'\nimport * as dws from './dws.js'\nimport { verifySkillSnapshot } from './skills.js'\nimport { verifyPreparedDefinition } from './agent-definition.js'\nimport { verifyEnrichedInvocation } from './perception.js'\nimport { verifyResponseGate } from './response-gate.js'\nimport {\n acquireSessionEffectLock, armWait, completeWaitFromReceipt,\n markWaitTransportAccepted, reconcileWaitFromReceipt,\n} from './waits.js'\n\nconst OUTWARD = new Set(['ack', 'reply', 'ask'])\nconst TERMINAL = new Set(['reply', 'ask', 'silence'])\nconst KINDS = new Set(['ack', 'reply', 'ask', 'silence'])\nconst SILENCE_REASONS = new Set([\n 'unmentioned', 'already_answered', 'no_value', 'policy_denied', 'unsupported',\n 'heartbeat_noop',\n])\n\nclass ActionUncertainError extends Error {\n receipt: Record<string, any>\n\n constructor(message: string, receipt: Record<string, any>) {\n super(message)\n this.name = 'ActionUncertainError'\n this.receipt = receipt\n }\n}\n\nexport function findRun(start = process.cwd(), explicit = '') {\n const picked = explicit || process.env.DTA_RUN || start\n let dir = resolve(picked)\n while (true) {\n if (existsSync(join(dir, 'run.json'))) return dir\n const parent = dirname(dir)\n if (parent === dir || dir === parse(dir).root) break\n dir = parent\n }\n throw new Error('找不到当前 Run;请在 prepare 返回的 cwd 中执行,或设置 DTA_RUN/--run')\n}\n\nexport function previewAction(runPath, kind, options = {}) {\n const context = loadContext(runPath)\n const payload = normalizePayload(kind, options, context.policy)\n const nextState = validate(context, kind)\n return {\n type: 'dingtalk-agent.action.preview',\n runId: context.run.id,\n kind,\n fromState: context.run.state,\n toState: nextState,\n transport: transportName(kind),\n target: kind === 'silence' ? null : context.target,\n profile: context.field.dws.profile || '',\n expectedUserId: context.field.dws.expectedUserId || '',\n transportMode: context.field.transport.mode || '',\n egressOwner: context.field.transport.egressOwner || '',\n payload,\n authorityHash: context.index.authorityHash,\n persisted: false,\n sideEffect: false,\n }\n}\n\nexport function executeAction(runPath, kind, options = {}) {\n if (!KINDS.has(kind)) throw new Error(`原子动作只能是: ${[...KINDS].join(' / ')}`)\n let context = loadContext(runPath)\n const payload = normalizePayload(kind, options, context.policy)\n const actionId = `act_${digest(`${context.run.id}\\0${kind}\\0${JSON.stringify(payload)}`).slice(0, 20)}`\n let actionPath = join(context.controlActionRoot, actionId)\n let receiptPath = join(actionPath, 'receipt.json')\n\n // Session effect lock 把 cancel 与外部副作用线性化;先拿到锁的一方定义先后。\n // event execution lock 仍负责同一个 Run 的 Action 幂等,control lock 只做短时 RMW。\n const releaseSessionEffect = acquireSessionEffectLock(context.root, context.sessionPath)\n try {\n const release = acquireExecutionLock(context.indexPath)\n try {\n context = loadContext(runPath)\n reconcileReceipts(context)\n context = loadContext(runPath)\n actionPath = join(context.controlActionRoot, actionId)\n receiptPath = join(actionPath, 'receipt.json')\n if (existsSync(receiptPath)) {\n const receipt = readJson(receiptPath)\n reconcileReceiptWait(context, receipt)\n return replayReceipt(context, receipt)\n }\n assertNoOtherUnresolvedAttempt(context, actionId)\n const nextState = validate(context, kind)\n mkdirSync(actionPath, { recursive: true })\n const intentPath = join(actionPath, 'intent.json')\n const attemptPath = join(actionPath, 'attempt.json')\n let intent\n if (existsSync(intentPath)) {\n intent = readJson(intentPath)\n if (intent.kind !== kind || JSON.stringify(intent.payload) !== JSON.stringify(payload)) {\n throw new Error(`Action intent 碰撞: ${actionId}`)\n }\n } else {\n intent = {\n $schema: 'dingtalk-agent/action-intent@1',\n id: actionId,\n runId: context.run.id,\n kind,\n createdAt: new Date().toISOString(),\n transport: transportName(kind),\n target: kind === 'silence' ? null : context.target,\n dwsProfile: context.field.dws.profile || '',\n expectedUserId: context.field.dws.expectedUserId || '',\n transportMode: context.field.transport.mode || '',\n egressOwner: context.field.transport.egressOwner || '',\n uuid: OUTWARD.has(kind) ? randomUUID() : null,\n payload,\n authorityHash: context.index.authorityHash,\n }\n persistArtifact(context, actionPath, 'intent.json', intent)\n }\n\n if (kind === 'silence') {\n const receipt = finish(context, intent, nextState, {\n outcome: 'confirmed', verified: true, verification: 'local-no-side-effect',\n })\n persistReceipt(context, actionPath, receipt)\n completeWaitFromReceipt(\n context.root, cfgmod.must(context.root), context.run.resume, receipt)\n projectReceipt(context, receipt)\n return receipt\n }\n\n verifyExecutionIdentity(context, intent, actionPath)\n const wait = kind === 'ask' ? ensureAskWait(context, actionId, payload.text) : null\n\n if (kind === 'ack' && existsSync(attemptPath)) {\n const receipt = uncertain(context, intent,\n 'ack 已有 attempt 但没有 receipt;表情动作无服务端幂等键,拒绝盲重试')\n persistReceipt(context, actionPath, receipt)\n projectReceipt(context, receipt)\n return receipt\n }\n if (!existsSync(attemptPath)) {\n persistArtifact(context, actionPath, 'attempt.json', {\n actionId, startedAt: new Date().toISOString(),\n })\n }\n\n let result\n let checked\n try {\n const transportResultPath = join(actionPath, 'transport-result.json')\n if (existsSync(transportResultPath)) {\n // DWS 已返回且结果已落盘时,从本地继续验证;绝不为了补 Receipt 再发一次。\n result = readJson(transportResultPath)\n } else {\n result = kind === 'ack'\n ? dws.ackMessage(context.target, {\n emoji: payload.emoji, profile: intent.dwsProfile,\n })\n : dws.replyMessage(context.target, payload.text, {\n uuid: intent.uuid, profile: intent.dwsProfile,\n })\n persistArtifact(context, actionPath, 'transport-result.json', result)\n }\n if (kind === 'ask') markWaitTransportAccepted(\n context.root, cfgmod.must(context.root), wait, result)\n checked = verify(kind, context.target, result, intent.dwsProfile, payload.text || '')\n if (checked.data !== undefined) {\n persistArtifact(context, actionPath, 'verification.json', checked.data)\n }\n } catch (e) {\n const receipt = uncertain(context, intent, String(e.message || e))\n persistReceipt(context, actionPath, receipt)\n if (kind === 'ask') reconcileWaitFromReceipt(\n context.root, cfgmod.must(context.root), wait, receipt)\n projectReceipt(context, receipt)\n throw new ActionUncertainError(\n `动作结果不确定,禁止自动重发;action=${actionId}: ${e.message || e}`,\n receipt,\n )\n }\n\n const receipt = finish(context, intent, nextState, checked)\n persistReceipt(context, actionPath, receipt) // 事实先落盘\n if (kind === 'ask') reconcileWaitFromReceipt(\n context.root, cfgmod.must(context.root), wait, receipt)\n if (kind === 'reply') completeWaitFromReceipt(\n context.root, cfgmod.must(context.root), context.run.resume, receipt)\n projectReceipt(context, receipt) // 再更新 control/run 投影\n return receipt\n } finally {\n release()\n }\n } finally {\n releaseSessionEffect()\n }\n}\n\n/**\n * 权威数据只从 event index 读取。Run 目录里的静态上下文发生漂移时 fail closed;\n * 动态 run.json 只是可修复投影,不能反过来阻塞已落盘的 Receipt。\n * 这也让 --run /任意伪造目录 无法获得 DWS 外发能力。\n */\nfunction loadContext(runPath) {\n const actualRunPath = realpathSync(resolve(runPath))\n const projection = readJson(join(actualRunPath, 'run.json'))\n const root = process.env.DTA_ROOT\n ? resolve(process.env.DTA_ROOT)\n : cfgmod.findRoot(actualRunPath)\n if (!root) throw new Error('找不到 control store;act 必须由能访问 DTA_ROOT 的宿主侧执行')\n const cfg = cfgmod.must(root)\n const indexRoot = resolve(root, cfg.runtime?.eventIndexRoot || '.dingtalk-agent/event-index')\n const indexPath = join(indexRoot, `${digest(projection.eventId)}.json`)\n if (!existsSync(indexPath)) throw new Error('当前 Run 不在 event index 中;拒绝任意/伪造 --run')\n const index = readJson(indexPath)\n if (!index.authority || !index.control ||\n digest(stableStringify(index.authority)) !== index.authorityHash) {\n throw new Error('event index 的权威快照损坏,禁止执行')\n }\n if (realpathSync(index.runPath) !== actualRunPath ||\n index.runId !== index.control.id || index.eventId !== projection.eventId) {\n throw new Error('Run 与 event index 身份不一致,拒绝执行')\n }\n\n if (stableStringify(projection) !== stableStringify(index.control)) {\n mirrorJson(join(actualRunPath, 'run.json'), index.control)\n }\n const drift: string[] = []\n const targetProjection = readJson(join(actualRunPath, 'context', 'reply-target.json'))\n if (stableStringify(targetProjection) !== stableStringify(index.authority.replyTarget)) drift.push('reply-target.json')\n const policyProjection = readJson(join(actualRunPath, 'policy', 'allowed-actions.json'))\n if (stableStringify(policyProjection) !== stableStringify(index.authority.policy)) drift.push('allowed-actions.json')\n const fieldProjection = readJson(join(actualRunPath, 'context', 'field.json'))\n if (stableStringify(fieldProjection.dws || {}) !== stableStringify(index.authority.dws || {})) drift.push('field.dws')\n if (stableStringify(fieldProjection.transport || {}) !== stableStringify(index.authority.transport || {})) drift.push('field.transport')\n const behaviorProjection = readJson(join(actualRunPath, 'context', 'behavior.json'))\n if (behaviorProjection.hash !== index.authority.behaviorHash) drift.push('behavior.json')\n const eventProjection = readJson(join(actualRunPath, 'event.json'))\n if (digest(stableStringify(eventProjection)) !== index.authority.eventHash) drift.push('event.json')\n if (index.authority.resume) {\n const resumeProjection = readJson(join(actualRunPath, 'context', 'resume.json'))\n if (stableStringify(resumeProjection) !== stableStringify(index.authority.resume)) {\n drift.push('resume.json')\n }\n }\n if (index.authority.invocation) {\n const invocationProjection = readJson(join(actualRunPath, 'context', 'invocation.json'))\n if (stableStringify(invocationProjection) !== stableStringify(index.authority.invocation)) {\n drift.push('invocation.json')\n }\n }\n try {\n const enriched = readJson(join(actualRunPath, 'context', 'enriched-invocation.json'))\n verifyEnrichedInvocation(enriched, index.authority.enrichedInvocationHash)\n } catch (e) { drift.push(`enriched-invocation(${e.message})`) }\n try {\n const responseGate = readJson(join(actualRunPath, 'context', 'response-gate.json'))\n verifyResponseGate(responseGate, index.authority.responseGate?.hash || '')\n if (stableStringify(responseGate) !== stableStringify(index.authority.responseGate)) {\n drift.push('response-gate.json')\n }\n } catch (e) { drift.push(`response-gate(${e.message})`) }\n try { verifySkillSnapshot(actualRunPath, index.authority.skillManifestHash) }\n catch (e) { drift.push(`skill-snapshot(${e.message})`) }\n try { verifyPreparedDefinition(actualRunPath, index.authority.agentDefinitionHash) }\n catch (e) { drift.push(`agent-definition(${e.message})`) }\n if (drift.length) throw new Error(`Sandbox 权威投影被修改: ${drift.join(', ')};禁止执行`)\n\n const session = readJson(join(index.sessionPath, 'session.json'))\n const currentGeneration = validGeneration(session.generation, 'session.json')\n const runGeneration = validGeneration(\n index.authority.sessionGeneration ?? index.control.sessionGeneration, 'event index')\n if (currentGeneration !== runGeneration) {\n throw new Error(\n `Session generation 已失效:run=${runGeneration}, current=${currentGeneration};` +\n '该事项已被 /stop 或 /cancel 取消,禁止继续副作用')\n }\n\n const controlActionRoot = join(indexRoot, 'actions', index.runId)\n mkdirSync(controlActionRoot, { recursive: true })\n return {\n run: index.control,\n field: { dws: index.authority.dws || {}, transport: index.authority.transport || {} },\n policy: index.authority.policy,\n target: index.authority.replyTarget,\n authority: index.authority,\n index,\n indexPath,\n controlActionRoot,\n runPath: actualRunPath,\n sessionPath: index.sessionPath,\n event: eventProjection,\n root,\n }\n}\n\nfunction ensureAskWait(context, actionId, questionText = '') {\n return armWait(context.root, cfgmod.must(context.root), {\n fieldId: context.run.fieldId,\n sessionId: context.run.sessionId,\n sessionPath: context.sessionPath,\n sourceRunId: context.run.id,\n actionId,\n questionText,\n event: context.event,\n target: context.target,\n })\n}\n\nfunction reconcileAskWait(context, actionId, receipt, questionText = '') {\n const wait = ensureAskWait(context, actionId, questionText)\n return reconcileWaitFromReceipt(context.root, cfgmod.must(context.root), wait, receipt)\n}\n\nfunction reconcileReceiptWait(context, receipt) {\n if (receipt.kind === 'ask') {\n const intentPath = join(context.controlActionRoot, receipt.actionId, 'intent.json')\n const intent = existsSync(intentPath) ? readJson(intentPath) : null\n return reconcileAskWait(context, receipt.actionId, receipt, intent?.payload?.text || '')\n }\n if ((receipt.kind === 'reply' || receipt.kind === 'silence') &&\n receipt.outcome !== 'uncertain') {\n return completeWaitFromReceipt(\n context.root, cfgmod.must(context.root), context.run.resume, receipt)\n }\n return null\n}\n\nfunction normalizePayload(kind, options, policy) {\n if (!KINDS.has(kind)) throw new Error(`原子动作只能是: ${[...KINDS].join(' / ')}`)\n if (kind === 'ack') return { emoji: '收到' }\n if (kind === 'silence') {\n const reason = String(options.reason || 'no_value').trim()\n if (!SILENCE_REASONS.has(reason)) {\n throw new Error(`silence reason 必须是: ${[...SILENCE_REASONS].join(' / ')}`)\n }\n return { reason }\n }\n const text = String(options.text || '').trim()\n if (!text) throw new Error(`${kind} 需要 --text 或 --text-file`)\n const max = Number(policy.limits?.maxTextCharacters || 4000)\n if (text.length > max) throw new Error(`正文 ${text.length} 字,超过 Basic Behavior 上限 ${max}`)\n return { text }\n}\n\nfunction validate(context, kind) {\n const { run, policy, target } = context\n if (!(policy.allowedActions || []).includes(kind)) {\n throw new Error(`事件 ${run.eventKind} 不允许 ${kind};允许: ${(policy.allowedActions || []).join(', ')}`)\n }\n if (OUTWARD.has(kind) && (!target?.conversationId || !target?.messageId || !target?.senderOpenDingTalkId)) {\n throw new Error('Run 没有完整固定回复目标,禁止外发')\n }\n if (OUTWARD.has(kind)) {\n if (context.field.transport.egressOwner !== 'dingtalk-agent') {\n throw new Error(`Field 的出口属于 ${context.field.transport.egressOwner || 'unknown'},禁止 act 外发以避免双发`)\n }\n const profile = context.field.dws.profile || ''\n const expected = context.field.dws.expectedUserId || ''\n if (!profile) throw new Error('Workspace 没有固定 dws.profile,禁止依赖“当前登录身份”外发')\n if (profile.includes(',')) throw new Error('一个 Run 只能固定一个 dws.profile,禁止多组织广播式执行')\n if (!expected) throw new Error('Workspace 没有 expectedUserId,无法核对 DWS 实际执行身份')\n }\n const transition = policy.stateMachine?.transitions?.[run.state]?.[kind]\n if (!transition) throw new Error(`状态 ${run.state} 不接受动作 ${kind}`)\n const counts = run.actionCounts || {}\n const limits = policy.limits || {}\n if (kind === 'ack' && Number(counts.ack || 0) >= Number(limits.maxAckPerRun || 1)) {\n throw new Error('本 Run 已 ack,禁止重复刷表情')\n }\n if (OUTWARD.has(kind) && Number(counts.outward || 0) >= Number(limits.maxOutwardActionsPerRun || 2)) {\n throw new Error('本 Run 的外发预算已用完')\n }\n if (TERMINAL.has(kind) && Number(counts.terminal || 0) >= Number(limits.maxTerminalMessagesPerRun || 1)) {\n throw new Error('本 Run 已产生终态动作')\n }\n return transition\n}\n\nfunction verifyExecutionIdentity(context, intent, actionPath) {\n // profile 同名重新登录会换掉真实凭据身份;因此每个外发 Action 都现查,不跨 Action 缓存。\n const data = dws.getSelf(intent.dwsProfile)\n const userId = String(findValue(data, ['userId', 'user_id', 'userid']) || '')\n if (!userId) throw new Error('dws contact user get-self 没有返回 userId,禁止外发')\n if (userId !== String(intent.expectedUserId)) {\n throw new Error(`DWS 执行身份不符:expected=${intent.expectedUserId}, actual=${userId}`)\n }\n const verified = { profile: intent.dwsProfile, userId, verifiedAt: new Date().toISOString(), data }\n persistArtifact(context, actionPath, 'identity.json', verified)\n return verified\n}\n\nfunction verify(kind, target, result, profile, expectedText = '') {\n if (kind === 'ack') {\n const data = dws.readMessageEmotions(target.messageId, profile)\n return { outcome: 'accepted-unverified', verified: false,\n verification: 'reaction-readback-cannot-prove-current-actor', data }\n }\n const taskId = findValue(result, ['openTaskId', 'open_task_id'])\n if (taskId) {\n const sendStatus = dws.querySendStatus(taskId, profile)\n const sentId = findValue(sendStatus, ['openMessageId', 'openMsgId', 'open_message_id'])\n if (!sentId) {\n return { outcome: 'accepted-unverified', verified: false,\n verification: 'query-send-status-without-message-id', data: { sendStatus } }\n }\n return verifyMessageReadback(sentId, expectedText, profile, { sendStatus })\n }\n const messageId = findValue(result, ['openMessageId', 'openMsgId', 'open_message_id'])\n if (messageId) {\n return verifyMessageReadback(messageId, expectedText, profile)\n }\n return { outcome: 'accepted-unverified', verified: false,\n verification: 'reply-result-has-no-queryable-id', data: result }\n}\n\n/**\n * 发送接口返回 messageId 只证明平台受理了一个对象;独立回读还必须同时看到\n * 同一 messageId 和本次正文。否则旧消息、空壳对象或被改写正文都不能签发\n * confirmed Receipt。\n */\nfunction verifyMessageReadback(\n messageId,\n expectedText,\n profile,\n prior: Record<string, unknown> = {},\n) {\n const messageReadback = dws.readMessagesByIds(messageId, profile)\n const seenId = containsScalar(messageReadback, String(messageId))\n const seenText = Boolean(expectedText) && containsExactText(messageReadback, String(expectedText))\n const data = { ...prior, messageReadback }\n return seenId && seenText\n ? {\n outcome: 'confirmed', verified: true,\n verification: Object.keys(prior).length\n ? 'query-send-status-plus-message-readback'\n : 'message-id-plus-text-readback',\n messageId: String(messageId),\n data,\n }\n : {\n outcome: 'accepted-unverified', verified: false,\n verification: !seenId ? 'message-readback-id-miss' : 'message-readback-text-miss',\n messageId: String(messageId),\n data,\n }\n}\n\nfunction containsScalar(value, expected) {\n if (value === null || value === undefined) return false\n if (typeof value !== 'object') return String(value) === expected\n if (Array.isArray(value)) return value.some((item) => containsScalar(item, expected))\n return Object.values(value).some((item) => containsScalar(item, expected))\n}\n\nfunction containsExactText(value, expected) {\n if (value === null || value === undefined) return false\n if (typeof value === 'string') {\n if (value === expected) return true\n try {\n const parsed = JSON.parse(value)\n return parsed !== value && containsExactText(parsed, expected)\n } catch { return false }\n }\n if (Array.isArray(value)) return value.some((item) => containsExactText(item, expected))\n if (typeof value === 'object') {\n return Object.values(value).some((item) => containsExactText(item, expected))\n }\n return false\n}\n\nfunction finish(context, intent, nextState, checked) {\n return {\n $schema: 'dingtalk-agent/action-receipt@1',\n actionId: intent.id,\n runId: intent.runId,\n kind: intent.kind,\n completedAt: new Date().toISOString(),\n fromState: context.run.state,\n toState: nextState,\n ...checked,\n }\n}\n\nfunction uncertain(context, intent, reason) {\n return finish(context, intent, 'needs-reconciliation', {\n outcome: 'uncertain', verified: false, verification: reason,\n })\n}\n\nfunction replayReceipt(context, receipt) {\n projectReceipt(context, receipt)\n return { ...receipt, duplicate: true }\n}\n\nfunction projectReceipt(context, receipt) {\n const release = acquireControlLock(context.indexPath)\n try {\n const latest = readJson(context.indexPath)\n if (digest(stableStringify(latest.authority)) !== latest.authorityHash) {\n throw new Error('投影 Receipt 时 authority hash 不一致')\n }\n const current = latest.control\n const applied = new Set(current.appliedActionIds || [])\n if (applied.has(receipt.actionId)) {\n mirrorJson(join(context.runPath, 'run.json'), current)\n context.index = latest\n context.run = current\n return current\n }\n // 兼容旧 control:若计数已表明该 kind 投影过,只回填 actionId,不重复计数/转移。\n if (Number(current.actionCounts?.[receipt.kind] || 0) > 0) {\n const next = { ...current, appliedActionIds: [...applied, receipt.actionId] }\n const updated = { ...latest, control: next, updatedAt: new Date().toISOString() }\n writeJsonAtomic(context.indexPath, updated)\n context.index = updated\n context.run = next\n mirrorJson(join(context.runPath, 'run.json'), next)\n return next\n }\n if (current.state !== receipt.fromState) {\n throw new Error(`Receipt 状态冲突: control=${current.state}, receipt=${receipt.fromState}→${receipt.toState}`)\n }\n const next = {\n ...current,\n updatedAt: receipt.completedAt,\n state: receipt.toState,\n appliedActionIds: [...applied, receipt.actionId],\n }\n bump(next, receipt.kind)\n if (receipt.toState === 'needs-reconciliation') next.status = 'blocked'\n else if (receipt.toState === 'waiting-input') next.status = receipt.verified ? 'waiting-input' : 'waiting-input-unverified'\n else if (receipt.toState === 'ignored') next.status = 'completed'\n else if (receipt.toState === 'completed') next.status = receipt.verified ? 'completed' : 'completed-unverified'\n else next.status = 'active'\n const updated = { ...latest, control: next, updatedAt: new Date().toISOString() }\n writeJsonAtomic(context.indexPath, updated)\n context.index = updated\n context.run = next\n mirrorJson(join(context.runPath, 'run.json'), next)\n return next\n } finally {\n release()\n }\n}\n\n/** 已有 Receipt 是真值;新动作前先把“Receipt 已落盘、control 未更新”的窗口收敛。 */\nfunction reconcileReceipts(context) {\n const receipts: Array<Record<string, any>> = []\n for (const entry of readdirSync(context.controlActionRoot, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue\n const path = join(context.controlActionRoot, entry.name, 'receipt.json')\n if (existsSync(path)) receipts.push(readJson(path))\n }\n receipts.sort((a, b) => String(a.completedAt).localeCompare(String(b.completedAt)))\n for (const receipt of receipts) {\n reconcileReceiptWait(context, receipt)\n projectReceipt(context, receipt)\n }\n}\n\n/** 旧 Action 可能已命中 DWS 但尚无 Receipt;此时换文本会生成新 actionId,必须 fail closed。 */\nfunction assertNoOtherUnresolvedAttempt(context, currentActionId) {\n for (const entry of readdirSync(context.controlActionRoot, { withFileTypes: true })) {\n if (!entry.isDirectory() || entry.name === currentActionId) continue\n const path = join(context.controlActionRoot, entry.name)\n if (existsSync(join(path, 'attempt.json')) && !existsSync(join(path, 'receipt.json'))) {\n throw new Error(`Run 存在未对账 Action ${entry.name};禁止更换正文再外发,请先 reconcile`)\n }\n }\n}\n\nfunction bump(run, kind) {\n run.actionCounts = { ack: 0, reply: 0, ask: 0, silence: 0, outward: 0, terminal: 0,\n ...(run.actionCounts || {}) }\n run.actionCounts[kind]++\n if (OUTWARD.has(kind)) run.actionCounts.outward++\n if (TERMINAL.has(kind)) run.actionCounts.terminal++\n}\n\nfunction persistArtifact(context, actionPath, name, value) {\n writeJsonAtomic(join(actionPath, name), value)\n const mirrorDir = join(context.runPath, 'actions', basename(actionPath))\n try {\n mkdirSync(mirrorDir, { recursive: true })\n writeJsonAtomic(join(mirrorDir, name), value)\n } catch (e) {\n console.error(` ⚠️ sandbox 投影写入失败(control store 已保留真值): ${e.message}`)\n }\n}\n\nfunction persistReceipt(context, actionPath, receipt) {\n persistArtifact(context, actionPath, 'receipt.json', receipt)\n mirrorJson(join(context.runPath, 'receipts', `${receipt.actionId}.json`), receipt)\n}\n\nfunction mirrorJson(path, value) {\n try { writeJsonAtomic(path, value) }\n catch (e) { console.error(` ⚠️ sandbox 投影写入失败(control store 已保留真值): ${e.message}`) }\n}\n\nfunction transportName(kind) {\n if (kind === 'ack') return 'dws.chat.message.add-emoji'\n if (kind === 'reply' || kind === 'ask') return 'dws.chat.message.reply'\n return 'local.silence'\n}\n\nfunction findValue(value, keys) {\n if (!value || typeof value !== 'object') return ''\n for (const key of keys) if (value[key]) return value[key]\n for (const child of Object.values(value)) {\n const found = findValue(child, keys)\n if (found) return found\n }\n return ''\n}\n\nfunction validGeneration(value, label) {\n const n = Number(value ?? 1)\n if (!Number.isInteger(n) || n < 1) throw new Error(`${label} 的 Session generation 非法`)\n return n\n}\n"]}
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/actions.ts"],"names":[],"mappings":"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","sourcesContent":["// Basic Behavior 的四个原子动作(TypeScript source)。\n// Sandbox 中的 context/ 是可读投影;真正的 target/profile/policy/state 来自 sandbox 外 event index。\n\nimport { existsSync, mkdirSync, realpathSync, readdirSync } from 'node:fs'\nimport { dirname, join, resolve, parse, basename } from 'node:path'\nimport { randomUUID } from 'node:crypto'\nimport { digest, stableStringify } from './events.js'\nimport {\n acquireControlLock, acquireExecutionLock, readJson, writeJsonAtomic,\n} from './sessions.js'\nimport * as cfgmod from './config.js'\nimport * as dws from './dws.js'\nimport { verifySkillSnapshot } from './skills.js'\nimport { verifyPreparedDefinition } from './agent-definition.js'\nimport { verifyEnrichedInvocation } from './perception.js'\nimport { verifyResponseGate } from './response-gate.js'\nimport {\n acquireSessionEffectLock, armWait, completeWaitFromReceipt,\n markWaitTransportAccepted, reconcileWaitFromReceipt,\n} from './waits.js'\nimport { err } from './tui.js'\n\nconst OUTWARD = new Set(['ack', 'reply', 'ask'])\nconst TERMINAL = new Set(['reply', 'ask', 'silence'])\nconst KINDS = new Set(['ack', 'reply', 'ask', 'silence'])\nconst SILENCE_REASONS = new Set([\n 'unmentioned', 'already_answered', 'no_value', 'policy_denied', 'unsupported',\n 'heartbeat_noop',\n])\n\nclass ActionUncertainError extends Error {\n receipt: Record<string, any>\n\n constructor(message: string, receipt: Record<string, any>) {\n super(message)\n this.name = 'ActionUncertainError'\n this.receipt = receipt\n }\n}\n\nexport function findRun(start = process.cwd(), explicit = '') {\n const picked = explicit || process.env.DTA_RUN || start\n let dir = resolve(picked)\n while (true) {\n if (existsSync(join(dir, 'run.json'))) return dir\n const parent = dirname(dir)\n if (parent === dir || dir === parse(dir).root) break\n dir = parent\n }\n throw new Error('找不到当前 Run;请在 prepare 返回的 cwd 中执行,或设置 DTA_RUN/--run')\n}\n\nexport function previewAction(runPath, kind, options = {}) {\n const context = loadContext(runPath)\n const payload = normalizePayload(kind, options, context.policy)\n const nextState = validate(context, kind)\n return {\n type: 'dingtalk-agent.action.preview',\n runId: context.run.id,\n kind,\n fromState: context.run.state,\n toState: nextState,\n transport: transportName(kind),\n target: kind === 'silence' ? null : context.target,\n profile: context.field.dws.profile || '',\n expectedUserId: context.field.dws.expectedUserId || '',\n transportMode: context.field.transport.mode || '',\n egressOwner: context.field.transport.egressOwner || '',\n payload,\n authorityHash: context.index.authorityHash,\n persisted: false,\n sideEffect: false,\n }\n}\n\nexport function executeAction(runPath, kind, options = {}) {\n if (!KINDS.has(kind)) throw new Error(`原子动作只能是: ${[...KINDS].join(' / ')}`)\n let context = loadContext(runPath)\n const payload = normalizePayload(kind, options, context.policy)\n const actionId = `act_${digest(`${context.run.id}\\0${kind}\\0${JSON.stringify(payload)}`).slice(0, 20)}`\n let actionPath = join(context.controlActionRoot, actionId)\n let receiptPath = join(actionPath, 'receipt.json')\n\n // Session effect lock 把 cancel 与外部副作用线性化;先拿到锁的一方定义先后。\n // event execution lock 仍负责同一个 Run 的 Action 幂等,control lock 只做短时 RMW。\n const releaseSessionEffect = acquireSessionEffectLock(context.root, context.sessionPath)\n try {\n const release = acquireExecutionLock(context.indexPath)\n try {\n context = loadContext(runPath)\n reconcileReceipts(context)\n context = loadContext(runPath)\n actionPath = join(context.controlActionRoot, actionId)\n receiptPath = join(actionPath, 'receipt.json')\n if (existsSync(receiptPath)) {\n const receipt = readJson(receiptPath)\n reconcileReceiptWait(context, receipt)\n return replayReceipt(context, receipt)\n }\n assertNoOtherUnresolvedAttempt(context, actionId)\n const nextState = validate(context, kind)\n mkdirSync(actionPath, { recursive: true })\n const intentPath = join(actionPath, 'intent.json')\n const attemptPath = join(actionPath, 'attempt.json')\n let intent\n if (existsSync(intentPath)) {\n intent = readJson(intentPath)\n if (intent.kind !== kind || JSON.stringify(intent.payload) !== JSON.stringify(payload)) {\n throw new Error(`Action intent 碰撞: ${actionId}`)\n }\n } else {\n intent = {\n $schema: 'dingtalk-agent/action-intent@1',\n id: actionId,\n runId: context.run.id,\n kind,\n createdAt: new Date().toISOString(),\n transport: transportName(kind),\n target: kind === 'silence' ? null : context.target,\n dwsProfile: context.field.dws.profile || '',\n expectedUserId: context.field.dws.expectedUserId || '',\n transportMode: context.field.transport.mode || '',\n egressOwner: context.field.transport.egressOwner || '',\n uuid: OUTWARD.has(kind) ? randomUUID() : null,\n payload,\n authorityHash: context.index.authorityHash,\n }\n persistArtifact(context, actionPath, 'intent.json', intent)\n }\n\n if (kind === 'silence') {\n const receipt = finish(context, intent, nextState, {\n outcome: 'confirmed', verified: true, verification: 'local-no-side-effect',\n })\n persistReceipt(context, actionPath, receipt)\n completeWaitFromReceipt(\n context.root, cfgmod.must(context.root), context.run.resume, receipt)\n projectReceipt(context, receipt)\n return receipt\n }\n\n verifyExecutionIdentity(context, intent, actionPath)\n const wait = kind === 'ask' ? ensureAskWait(context, actionId, payload.text) : null\n\n if (kind === 'ack' && existsSync(attemptPath)) {\n const receipt = uncertain(context, intent,\n 'ack 已有 attempt 但没有 receipt;表情动作无服务端幂等键,拒绝盲重试')\n persistReceipt(context, actionPath, receipt)\n projectReceipt(context, receipt)\n return receipt\n }\n if (!existsSync(attemptPath)) {\n persistArtifact(context, actionPath, 'attempt.json', {\n actionId, startedAt: new Date().toISOString(),\n })\n }\n\n let result\n let checked\n try {\n const transportResultPath = join(actionPath, 'transport-result.json')\n if (existsSync(transportResultPath)) {\n // DWS 已返回且结果已落盘时,从本地继续验证;绝不为了补 Receipt 再发一次。\n result = readJson(transportResultPath)\n } else {\n result = kind === 'ack'\n ? dws.ackMessage(context.target, {\n emoji: payload.emoji, profile: intent.dwsProfile,\n })\n : dws.replyMessage(context.target, payload.text, {\n uuid: intent.uuid, profile: intent.dwsProfile,\n })\n persistArtifact(context, actionPath, 'transport-result.json', result)\n }\n if (kind === 'ask') markWaitTransportAccepted(\n context.root, cfgmod.must(context.root), wait, result)\n checked = verify(kind, context.target, result, intent.dwsProfile, payload.text || '')\n if (checked.data !== undefined) {\n persistArtifact(context, actionPath, 'verification.json', checked.data)\n }\n } catch (e) {\n const receipt = uncertain(context, intent, String(e.message || e))\n persistReceipt(context, actionPath, receipt)\n if (kind === 'ask') reconcileWaitFromReceipt(\n context.root, cfgmod.must(context.root), wait, receipt)\n projectReceipt(context, receipt)\n throw new ActionUncertainError(\n `动作结果不确定,禁止自动重发;action=${actionId}: ${e.message || e}`,\n receipt,\n )\n }\n\n const receipt = finish(context, intent, nextState, checked)\n persistReceipt(context, actionPath, receipt) // 事实先落盘\n if (kind === 'ask') reconcileWaitFromReceipt(\n context.root, cfgmod.must(context.root), wait, receipt)\n if (kind === 'reply') completeWaitFromReceipt(\n context.root, cfgmod.must(context.root), context.run.resume, receipt)\n projectReceipt(context, receipt) // 再更新 control/run 投影\n return receipt\n } finally {\n release()\n }\n } finally {\n releaseSessionEffect()\n }\n}\n\n/**\n * 权威数据只从 event index 读取。Run 目录里的静态上下文发生漂移时 fail closed;\n * 动态 run.json 只是可修复投影,不能反过来阻塞已落盘的 Receipt。\n * 这也让 --run /任意伪造目录 无法获得 DWS 外发能力。\n */\nfunction loadContext(runPath) {\n const actualRunPath = realpathSync(resolve(runPath))\n const projection = readJson(join(actualRunPath, 'run.json'))\n const root = process.env.DTA_ROOT\n ? resolve(process.env.DTA_ROOT)\n : cfgmod.findRoot(actualRunPath)\n if (!root) throw new Error('找不到 control store;act 必须由能访问 DTA_ROOT 的宿主侧执行')\n const cfg = cfgmod.must(root)\n const indexRoot = resolve(root, cfg.runtime?.eventIndexRoot || '.dingtalk-agent/event-index')\n const indexPath = join(indexRoot, `${digest(projection.eventId)}.json`)\n if (!existsSync(indexPath)) throw new Error('当前 Run 不在 event index 中;拒绝任意/伪造 --run')\n const index = readJson(indexPath)\n if (!index.authority || !index.control ||\n digest(stableStringify(index.authority)) !== index.authorityHash) {\n throw new Error('event index 的权威快照损坏,禁止执行')\n }\n if (realpathSync(index.runPath) !== actualRunPath ||\n index.runId !== index.control.id || index.eventId !== projection.eventId) {\n throw new Error('Run 与 event index 身份不一致,拒绝执行')\n }\n\n if (stableStringify(projection) !== stableStringify(index.control)) {\n mirrorJson(join(actualRunPath, 'run.json'), index.control)\n }\n const drift: string[] = []\n const targetProjection = readJson(join(actualRunPath, 'context', 'reply-target.json'))\n if (stableStringify(targetProjection) !== stableStringify(index.authority.replyTarget)) drift.push('reply-target.json')\n const policyProjection = readJson(join(actualRunPath, 'policy', 'allowed-actions.json'))\n if (stableStringify(policyProjection) !== stableStringify(index.authority.policy)) drift.push('allowed-actions.json')\n const fieldProjection = readJson(join(actualRunPath, 'context', 'field.json'))\n if (stableStringify(fieldProjection.dws || {}) !== stableStringify(index.authority.dws || {})) drift.push('field.dws')\n if (stableStringify(fieldProjection.transport || {}) !== stableStringify(index.authority.transport || {})) drift.push('field.transport')\n const behaviorProjection = readJson(join(actualRunPath, 'context', 'behavior.json'))\n if (behaviorProjection.hash !== index.authority.behaviorHash) drift.push('behavior.json')\n const eventProjection = readJson(join(actualRunPath, 'event.json'))\n if (digest(stableStringify(eventProjection)) !== index.authority.eventHash) drift.push('event.json')\n if (index.authority.resume) {\n const resumeProjection = readJson(join(actualRunPath, 'context', 'resume.json'))\n if (stableStringify(resumeProjection) !== stableStringify(index.authority.resume)) {\n drift.push('resume.json')\n }\n }\n if (index.authority.invocation) {\n const invocationProjection = readJson(join(actualRunPath, 'context', 'invocation.json'))\n if (stableStringify(invocationProjection) !== stableStringify(index.authority.invocation)) {\n drift.push('invocation.json')\n }\n }\n try {\n const enriched = readJson(join(actualRunPath, 'context', 'enriched-invocation.json'))\n verifyEnrichedInvocation(enriched, index.authority.enrichedInvocationHash)\n } catch (e) { drift.push(`enriched-invocation(${e.message})`) }\n try {\n const responseGate = readJson(join(actualRunPath, 'context', 'response-gate.json'))\n verifyResponseGate(responseGate, index.authority.responseGate?.hash || '')\n if (stableStringify(responseGate) !== stableStringify(index.authority.responseGate)) {\n drift.push('response-gate.json')\n }\n } catch (e) { drift.push(`response-gate(${e.message})`) }\n try { verifySkillSnapshot(actualRunPath, index.authority.skillManifestHash) }\n catch (e) { drift.push(`skill-snapshot(${e.message})`) }\n try { verifyPreparedDefinition(actualRunPath, index.authority.agentDefinitionHash) }\n catch (e) { drift.push(`agent-definition(${e.message})`) }\n if (drift.length) throw new Error(`Sandbox 权威投影被修改: ${drift.join(', ')};禁止执行`)\n\n const session = readJson(join(index.sessionPath, 'session.json'))\n const currentGeneration = validGeneration(session.generation, 'session.json')\n const runGeneration = validGeneration(\n index.authority.sessionGeneration ?? index.control.sessionGeneration, 'event index')\n if (currentGeneration !== runGeneration) {\n throw new Error(\n `Session generation 已失效:run=${runGeneration}, current=${currentGeneration};` +\n '该事项已被 /stop 或 /cancel 取消,禁止继续副作用')\n }\n\n const controlActionRoot = join(indexRoot, 'actions', index.runId)\n mkdirSync(controlActionRoot, { recursive: true })\n return {\n run: index.control,\n field: { dws: index.authority.dws || {}, transport: index.authority.transport || {} },\n policy: index.authority.policy,\n target: index.authority.replyTarget,\n authority: index.authority,\n index,\n indexPath,\n controlActionRoot,\n runPath: actualRunPath,\n sessionPath: index.sessionPath,\n event: eventProjection,\n root,\n }\n}\n\nfunction ensureAskWait(context, actionId, questionText = '') {\n return armWait(context.root, cfgmod.must(context.root), {\n fieldId: context.run.fieldId,\n sessionId: context.run.sessionId,\n sessionPath: context.sessionPath,\n sourceRunId: context.run.id,\n actionId,\n questionText,\n event: context.event,\n target: context.target,\n })\n}\n\nfunction reconcileAskWait(context, actionId, receipt, questionText = '') {\n const wait = ensureAskWait(context, actionId, questionText)\n return reconcileWaitFromReceipt(context.root, cfgmod.must(context.root), wait, receipt)\n}\n\nfunction reconcileReceiptWait(context, receipt) {\n if (receipt.kind === 'ask') {\n const intentPath = join(context.controlActionRoot, receipt.actionId, 'intent.json')\n const intent = existsSync(intentPath) ? readJson(intentPath) : null\n return reconcileAskWait(context, receipt.actionId, receipt, intent?.payload?.text || '')\n }\n if ((receipt.kind === 'reply' || receipt.kind === 'silence') &&\n receipt.outcome !== 'uncertain') {\n return completeWaitFromReceipt(\n context.root, cfgmod.must(context.root), context.run.resume, receipt)\n }\n return null\n}\n\nfunction normalizePayload(kind, options, policy) {\n if (!KINDS.has(kind)) throw new Error(`原子动作只能是: ${[...KINDS].join(' / ')}`)\n if (kind === 'ack') return { emoji: '收到' }\n if (kind === 'silence') {\n const reason = String(options.reason || 'no_value').trim()\n if (!SILENCE_REASONS.has(reason)) {\n throw new Error(`silence reason 必须是: ${[...SILENCE_REASONS].join(' / ')}`)\n }\n return { reason }\n }\n const text = String(options.text || '').trim()\n if (!text) throw new Error(`${kind} 需要 --text 或 --text-file`)\n const max = Number(policy.limits?.maxTextCharacters || 4000)\n if (text.length > max) throw new Error(`正文 ${text.length} 字,超过 Basic Behavior 上限 ${max}`)\n return { text }\n}\n\nfunction validate(context, kind) {\n const { run, policy, target } = context\n if (!(policy.allowedActions || []).includes(kind)) {\n throw new Error(`事件 ${run.eventKind} 不允许 ${kind};允许: ${(policy.allowedActions || []).join(', ')}`)\n }\n if (OUTWARD.has(kind) && (!target?.conversationId || !target?.messageId || !target?.senderOpenDingTalkId)) {\n throw new Error('Run 没有完整固定回复目标,禁止外发')\n }\n if (OUTWARD.has(kind)) {\n if (context.field.transport.egressOwner !== 'dingtalk-agent') {\n throw new Error(`Field 的出口属于 ${context.field.transport.egressOwner || 'unknown'},禁止 act 外发以避免双发`)\n }\n const profile = context.field.dws.profile || ''\n const expected = context.field.dws.expectedUserId || ''\n if (!profile) throw new Error('Workspace 没有固定 dws.profile,禁止依赖“当前登录身份”外发')\n if (profile.includes(',')) throw new Error('一个 Run 只能固定一个 dws.profile,禁止多组织广播式执行')\n if (!expected) throw new Error('Workspace 没有 expectedUserId,无法核对 DWS 实际执行身份')\n }\n const transition = policy.stateMachine?.transitions?.[run.state]?.[kind]\n if (!transition) throw new Error(`状态 ${run.state} 不接受动作 ${kind}`)\n const counts = run.actionCounts || {}\n const limits = policy.limits || {}\n if (kind === 'ack' && Number(counts.ack || 0) >= Number(limits.maxAckPerRun || 1)) {\n throw new Error('本 Run 已 ack,禁止重复刷表情')\n }\n if (OUTWARD.has(kind) && Number(counts.outward || 0) >= Number(limits.maxOutwardActionsPerRun || 2)) {\n throw new Error('本 Run 的外发预算已用完')\n }\n if (TERMINAL.has(kind) && Number(counts.terminal || 0) >= Number(limits.maxTerminalMessagesPerRun || 1)) {\n throw new Error('本 Run 已产生终态动作')\n }\n return transition\n}\n\nfunction verifyExecutionIdentity(context, intent, actionPath) {\n // profile 同名重新登录会换掉真实凭据身份;因此每个外发 Action 都现查,不跨 Action 缓存。\n const data = dws.getSelf(intent.dwsProfile)\n const userId = String(findValue(data, ['userId', 'user_id', 'userid']) || '')\n if (!userId) throw new Error('dws contact user get-self 没有返回 userId,禁止外发')\n if (userId !== String(intent.expectedUserId)) {\n throw new Error(`DWS 执行身份不符:expected=${intent.expectedUserId}, actual=${userId}`)\n }\n const verified = { profile: intent.dwsProfile, userId, verifiedAt: new Date().toISOString(), data }\n persistArtifact(context, actionPath, 'identity.json', verified)\n return verified\n}\n\nfunction verify(kind, target, result, profile, expectedText = '') {\n if (kind === 'ack') {\n const data = dws.readMessageEmotions(target.messageId, profile)\n return { outcome: 'accepted-unverified', verified: false,\n verification: 'reaction-readback-cannot-prove-current-actor', data }\n }\n const taskId = findValue(result, ['openTaskId', 'open_task_id'])\n if (taskId) {\n const sendStatus = dws.querySendStatus(taskId, profile)\n const sentId = findValue(sendStatus, ['openMessageId', 'openMsgId', 'open_message_id'])\n if (!sentId) {\n return { outcome: 'accepted-unverified', verified: false,\n verification: 'query-send-status-without-message-id', data: { sendStatus } }\n }\n return verifyMessageReadback(sentId, expectedText, profile, { sendStatus })\n }\n const messageId = findValue(result, ['openMessageId', 'openMsgId', 'open_message_id'])\n if (messageId) {\n return verifyMessageReadback(messageId, expectedText, profile)\n }\n return { outcome: 'accepted-unverified', verified: false,\n verification: 'reply-result-has-no-queryable-id', data: result }\n}\n\n/**\n * 发送接口返回 messageId 只证明平台受理了一个对象;独立回读还必须同时看到\n * 同一 messageId 和本次正文。否则旧消息、空壳对象或被改写正文都不能签发\n * confirmed Receipt。\n */\nfunction verifyMessageReadback(\n messageId,\n expectedText,\n profile,\n prior: Record<string, unknown> = {},\n) {\n const messageReadback = dws.readMessagesByIds(messageId, profile)\n const seenId = containsScalar(messageReadback, String(messageId))\n const seenText = Boolean(expectedText) && containsExactText(messageReadback, String(expectedText))\n const data = { ...prior, messageReadback }\n return seenId && seenText\n ? {\n outcome: 'confirmed', verified: true,\n verification: Object.keys(prior).length\n ? 'query-send-status-plus-message-readback'\n : 'message-id-plus-text-readback',\n messageId: String(messageId),\n data,\n }\n : {\n outcome: 'accepted-unverified', verified: false,\n verification: !seenId ? 'message-readback-id-miss' : 'message-readback-text-miss',\n messageId: String(messageId),\n data,\n }\n}\n\nfunction containsScalar(value, expected) {\n if (value === null || value === undefined) return false\n if (typeof value !== 'object') return String(value) === expected\n if (Array.isArray(value)) return value.some((item) => containsScalar(item, expected))\n return Object.values(value).some((item) => containsScalar(item, expected))\n}\n\nfunction containsExactText(value, expected) {\n if (value === null || value === undefined) return false\n if (typeof value === 'string') {\n if (value === expected) return true\n try {\n const parsed = JSON.parse(value)\n return parsed !== value && containsExactText(parsed, expected)\n } catch { return false }\n }\n if (Array.isArray(value)) return value.some((item) => containsExactText(item, expected))\n if (typeof value === 'object') {\n return Object.values(value).some((item) => containsExactText(item, expected))\n }\n return false\n}\n\nfunction finish(context, intent, nextState, checked) {\n return {\n $schema: 'dingtalk-agent/action-receipt@1',\n actionId: intent.id,\n runId: intent.runId,\n kind: intent.kind,\n completedAt: new Date().toISOString(),\n fromState: context.run.state,\n toState: nextState,\n ...checked,\n }\n}\n\nfunction uncertain(context, intent, reason) {\n return finish(context, intent, 'needs-reconciliation', {\n outcome: 'uncertain', verified: false, verification: reason,\n })\n}\n\nfunction replayReceipt(context, receipt) {\n projectReceipt(context, receipt)\n return { ...receipt, duplicate: true }\n}\n\nfunction projectReceipt(context, receipt) {\n const release = acquireControlLock(context.indexPath)\n try {\n const latest = readJson(context.indexPath)\n if (digest(stableStringify(latest.authority)) !== latest.authorityHash) {\n throw new Error('投影 Receipt 时 authority hash 不一致')\n }\n const current = latest.control\n const applied = new Set(current.appliedActionIds || [])\n if (applied.has(receipt.actionId)) {\n mirrorJson(join(context.runPath, 'run.json'), current)\n context.index = latest\n context.run = current\n return current\n }\n // 兼容旧 control:若计数已表明该 kind 投影过,只回填 actionId,不重复计数/转移。\n if (Number(current.actionCounts?.[receipt.kind] || 0) > 0) {\n const next = { ...current, appliedActionIds: [...applied, receipt.actionId] }\n const updated = { ...latest, control: next, updatedAt: new Date().toISOString() }\n writeJsonAtomic(context.indexPath, updated)\n context.index = updated\n context.run = next\n mirrorJson(join(context.runPath, 'run.json'), next)\n return next\n }\n if (current.state !== receipt.fromState) {\n throw new Error(`Receipt 状态冲突: control=${current.state}, receipt=${receipt.fromState}→${receipt.toState}`)\n }\n const next = {\n ...current,\n updatedAt: receipt.completedAt,\n state: receipt.toState,\n appliedActionIds: [...applied, receipt.actionId],\n }\n bump(next, receipt.kind)\n if (receipt.toState === 'needs-reconciliation') next.status = 'blocked'\n else if (receipt.toState === 'waiting-input') next.status = receipt.verified ? 'waiting-input' : 'waiting-input-unverified'\n else if (receipt.toState === 'ignored') next.status = 'completed'\n else if (receipt.toState === 'completed') next.status = receipt.verified ? 'completed' : 'completed-unverified'\n else next.status = 'active'\n const updated = { ...latest, control: next, updatedAt: new Date().toISOString() }\n writeJsonAtomic(context.indexPath, updated)\n context.index = updated\n context.run = next\n mirrorJson(join(context.runPath, 'run.json'), next)\n return next\n } finally {\n release()\n }\n}\n\n/** 已有 Receipt 是真值;新动作前先把“Receipt 已落盘、control 未更新”的窗口收敛。 */\nfunction reconcileReceipts(context) {\n const receipts: Array<Record<string, any>> = []\n for (const entry of readdirSync(context.controlActionRoot, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue\n const path = join(context.controlActionRoot, entry.name, 'receipt.json')\n if (existsSync(path)) receipts.push(readJson(path))\n }\n receipts.sort((a, b) => String(a.completedAt).localeCompare(String(b.completedAt)))\n for (const receipt of receipts) {\n reconcileReceiptWait(context, receipt)\n projectReceipt(context, receipt)\n }\n}\n\n/** 旧 Action 可能已命中 DWS 但尚无 Receipt;此时换文本会生成新 actionId,必须 fail closed。 */\nfunction assertNoOtherUnresolvedAttempt(context, currentActionId) {\n for (const entry of readdirSync(context.controlActionRoot, { withFileTypes: true })) {\n if (!entry.isDirectory() || entry.name === currentActionId) continue\n const path = join(context.controlActionRoot, entry.name)\n if (existsSync(join(path, 'attempt.json')) && !existsSync(join(path, 'receipt.json'))) {\n throw new Error(`Run 存在未对账 Action ${entry.name};禁止更换正文再外发,请先 reconcile`)\n }\n }\n}\n\nfunction bump(run, kind) {\n run.actionCounts = { ack: 0, reply: 0, ask: 0, silence: 0, outward: 0, terminal: 0,\n ...(run.actionCounts || {}) }\n run.actionCounts[kind]++\n if (OUTWARD.has(kind)) run.actionCounts.outward++\n if (TERMINAL.has(kind)) run.actionCounts.terminal++\n}\n\nfunction persistArtifact(context, actionPath, name, value) {\n writeJsonAtomic(join(actionPath, name), value)\n const mirrorDir = join(context.runPath, 'actions', basename(actionPath))\n try {\n mkdirSync(mirrorDir, { recursive: true })\n writeJsonAtomic(join(mirrorDir, name), value)\n } catch (e) {\n console.error(err().theme.warn(` ⚠️ sandbox 投影写入失败(control store 已保留真值): ${e.message}`))\n }\n}\n\nfunction persistReceipt(context, actionPath, receipt) {\n persistArtifact(context, actionPath, 'receipt.json', receipt)\n mirrorJson(join(context.runPath, 'receipts', `${receipt.actionId}.json`), receipt)\n}\n\nfunction mirrorJson(path, value) {\n try { writeJsonAtomic(path, value) }\n catch (e) {\n console.error(err().theme.warn(` ⚠️ sandbox 投影写入失败(control store 已保留真值): ${e.message}`))\n }\n}\n\nfunction transportName(kind) {\n if (kind === 'ack') return 'dws.chat.message.add-emoji'\n if (kind === 'reply' || kind === 'ask') return 'dws.chat.message.reply'\n return 'local.silence'\n}\n\nfunction findValue(value, keys) {\n if (!value || typeof value !== 'object') return ''\n for (const key of keys) if (value[key]) return value[key]\n for (const child of Object.values(value)) {\n const found = findValue(child, keys)\n if (found) return found\n }\n return ''\n}\n\nfunction validGeneration(value, label) {\n const n = Number(value ?? 1)\n if (!Number.isInteger(n) || n < 1) throw new Error(`${label} 的 Session generation 非法`)\n return n\n}\n"]}
|
package/dist/src/agent-audit.js
CHANGED
|
@@ -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 = '
|
|
16
|
-
const BASIC_INSTRUCTION = '.agents/skills/
|
|
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
|
|
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
|
|
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
|
-
|
|
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[
|
|
110
|
-
config.permissions[
|
|
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[
|
|
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), '
|
|
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 !== '
|
|
234
|
-
throw new Error('包内 canonical
|
|
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
|
|
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
|
|
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/
|
|
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', '
|
|
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: { '
|
|
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/
|
|
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', '
|
|
606
|
-
const basicPath = join(sandbox, '.agents', 'skills', '
|
|
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, '
|
|
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/
|
|
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/
|
|
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
|
|
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.
|
|
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 {
|