@xdxer/dingtalk-agent 0.1.5-beta.6 → 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 +29 -0
- package/README.en.md +6 -6
- package/README.md +6 -6
- package/dist/bin/dingtalk-agent.js +79 -28
- package/dist/bin/dingtalk-agent.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/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/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 +7 -7
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-state-evals.js","sourceRoot":"","sources":["../../src/remote-state-evals.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from 'node:crypto'\nimport {\n copyFileSync, cpSync, existsSync, lstatSync, mkdirSync, mkdtempSync, readFileSync,\n realpathSync, readdirSync, renameSync, rmSync, writeFileSync,\n} from 'node:fs'\nimport { tmpdir } from 'node:os'\nimport { dirname, isAbsolute, join, relative, resolve } from 'node:path'\nimport { bootstrap, type BootstrapMount } from './bootstrap.js'\nimport * as dws from './dws.js'\nimport { digest } from './events.js'\nimport { isWorkspacePathInside, relativeWorkspacePath } from './eval-evidence.js'\nimport {\n prepareOpenCodeEvalAgent, runOpenCodePrompt, type OpenCodeExecution,\n} from './opencode-evals.js'\nimport {\n bindRequiredBasicSkill, relativeBinding, verifyRequiredBasicSkill,\n} from './opencode-workspace.js'\nimport { resolvePackageRoot } from './package-root.js'\nimport { bundledSkillPath } from './skill-manager.js'\n\ntype RemoteStateSlot = 'memory' | 'knowledge'\n\ninterface RemoteStateBinding {\n slot: RemoteStateSlot\n uri: string\n requiredText: string[]\n writeProbe: boolean\n}\n\ninterface RemoteStateEvalSpec {\n $schema: 'dingtalk-agent/remote-state-eval@1'\n id: string\n description: string\n scenario: 'memory-and-storage'\n dws: { profile: string; expectedUserId: string }\n stateDir: string\n requiredSkills: string[]\n bindings: RemoteStateBinding[]\n modelProbe: {\n model: string\n prompt: string\n expectedText: string[]\n }\n}\n\nexport interface RemoteStateEvalOptions {\n execute?: boolean\n live?: boolean\n yes?: boolean\n model?: string\n command?: string\n timeoutMs?: number\n out?: string\n}\n\ninterface RemoteMountEvidence {\n slot: RemoteStateSlot\n source: string\n provider: string\n remoteHash: string\n mountHash: string\n cacheHash: string\n cachePath: string\n manifestPath: string\n requiredTextMatched: boolean\n typeAccepted: boolean\n sourceMatched: boolean\n cacheContained: boolean\n manifestMatched: boolean\n hashesMatched: boolean\n passed: boolean\n}\n\nexport function runRemoteStateEvaluation(\n root: string,\n workspacePath: string,\n suitePath: string,\n options: RemoteStateEvalOptions = {},\n): Record<string, any> {\n const workspace = safeInside(root, workspacePath, true)\n const suiteFile = safeInside(root, suitePath, true)\n const suite = validateSpec(readJson(suiteFile))\n assertRemoteOnlyProbes(workspace, suite.modelProbe.prompt, suite.modelProbe.expectedText)\n safeStateDir(workspace, suite.stateDir)\n const model = options.model || suite.modelProbe.model\n if (!model.startsWith('deepseek/')) {\n throw new Error('Remote State Eval 模型必须固定为 deepseek/*')\n }\n const timeoutMs = options.timeoutMs ?? 120_000\n if (!Number.isInteger(timeoutMs) || timeoutMs < 10_000 || timeoutMs > 300_000) {\n throw new Error('Remote State Eval timeoutMs 必须为 10000..300000')\n }\n const writeBindings = suite.bindings.filter((item) => item.writeProbe)\n if (options.live && writeBindings.length !== 1) {\n throw new Error('Remote State Eval Live 必须且只能声明一个 writeProbe binding')\n }\n const plan = {\n $schema: 'dingtalk-agent/remote-state-eval-plan@1',\n id: suite.id,\n scenario: suite.scenario,\n sideEffect: options.live ? 'append-one-unique-marker-to-dedicated-test-document' : false,\n remoteRead: Boolean(options.execute),\n engine: 'storage',\n host: 'opencode',\n model,\n workspace: relative(realpathSync(root), workspace),\n suite: relative(realpathSync(root), suiteFile),\n definition: 'local AGENTS.md + local Role Skills',\n semanticState: suite.bindings.map((item) => ({\n slot: item.slot,\n provider: 'dingtalk-doc',\n uri: item.uri,\n writeProbe: item.writeProbe,\n })),\n controlState: 'local atomic host store',\n hardGates: [\n 'fixed DWS profile and exact expectedUserId',\n 'ALIDOC/adoc document type',\n 'local Definition and required Role Skills',\n 'forced Basic Skill OpenCode binding',\n 'remote readback = mount hash = cache bytes = cache manifest',\n 'model recalls remote-only probes with zero tools',\n 'optional unique write marker independently read back exactly once',\n ],\n }\n if (!options.execute) return { ...plan, ready: true, executeRequired: true }\n if (!options.yes) {\n throw new Error('Remote State Eval 会读取 DWS 并调用模型;必须同时传 --execute --yes')\n }\n if (options.live && !options.execute) {\n throw new Error('Remote State Eval Live 必须同时传 --execute --live --yes')\n }\n\n const runId = `remote_state_eval_${Date.now()}_${randomUUID().slice(0, 8)}`\n const evidenceRoot = safeInside(\n root,\n options.out || join('.dingtalk-agent', 'remote-state-eval-results', runId),\n false,\n )\n mkdirSync(evidenceRoot, { recursive: true })\n writeJson(join(evidenceRoot, 'plan.json'), plan)\n\n const sandboxParent = mkdtempSync(join(tmpdir(), 'dta-remote-state-eval-'))\n const sandbox = join(sandboxParent, 'workspace')\n const writeReceipts: Record<string, any>[] = []\n let stage = 'materialize-workspace'\n cpSync(workspace, sandbox, {\n recursive: true,\n filter: (source) => {\n const rel = relative(workspace, source)\n const first = rel.split(/[\\\\/]/)[0]\n return first !== '.git' && first !== '.dingtalk-agent'\n },\n })\n try {\n materializeBasicSkill(sandbox)\n stage = 'verify-dws-identity'\n const identityData = dws.getSelf(suite.dws.profile)\n const actualUserId = String(findValue(identityData, ['userId', 'user_id', 'userid']) || '')\n if (!actualUserId) {\n throw new Error('dws contact user get-self 没有返回 userId,拒绝远端状态评测')\n }\n if (actualUserId !== suite.dws.expectedUserId) {\n throw new Error(\n `DWS 执行身份不符:expected=${suite.dws.expectedUserId}, actual=${actualUserId}`,\n )\n }\n\n stage = 'probe-and-optionally-write-documents'\n for (const binding of suite.bindings) {\n assertDocType(binding, dws.docInfo(nodeRef(binding.uri), suite.dws.profile))\n if (!options.live || !binding.writeProbe) continue\n const marker = `[DTA-REMOTE-STATE-EVAL:${runId}:${binding.slot}]`\n const before = String(dws.readDoc(nodeRef(binding.uri), suite.dws.profile))\n if (semanticMarkerCount(before, marker) !== 0) {\n throw new Error(`远端写探针 marker 在写入前已经存在: ${binding.slot}`)\n }\n const fragment = join(sandboxParent, `${binding.slot}-write-probe.md`)\n writeFileSync(fragment, `\\n\\n${marker}\\n`)\n const accepted = Boolean(dws.appendDoc(nodeRef(binding.uri), fragment, suite.dws.profile))\n const after = String(dws.readDoc(nodeRef(binding.uri), suite.dws.profile))\n const markerCount = semanticMarkerCount(after, marker)\n writeReceipts.push({\n slot: binding.slot,\n marker,\n commandAccepted: accepted,\n markerCount,\n verified: markerCount === 1,\n verification: 'independent-full-document-readback',\n })\n writeJson(join(evidenceRoot, 'write-receipts.json'), writeReceipts)\n if (markerCount !== 1) {\n throw new Error(`远端写探针回读不一致: slot=${binding.slot}, count=${markerCount}`)\n }\n }\n\n stage = 'bootstrap-remote-state'\n const stateDir = safeStateDir(sandbox, suite.stateDir)\n const hydrated = bootstrap(sandbox, {\n agent: `local-dir:${sandbox}`,\n skills: `local-dir:${join(sandbox, 'skills')}`,\n memory: bindingUri(suite, 'memory'),\n knowledge: bindingUri(suite, 'knowledge'),\n stateDir,\n profile: suite.dws.profile,\n expectedUserId: suite.dws.expectedUserId,\n })\n const roleSkills = new Set(hydrated.definition.skills.map((item) => item.name))\n const missingSkills = suite.requiredSkills.filter((name) => !roleSkills.has(name))\n const definitionPassed = hydrated.definition.status === 'ready' &&\n hydrated.definition.source.kind === 'local-folder' &&\n hydrated.definition.storage.memory === bindingUri(suite, 'memory') &&\n hydrated.definition.storage.knowledge === bindingUri(suite, 'knowledge') &&\n hydrated.definition.authority.dwsProfile === suite.dws.profile &&\n hydrated.definition.authority.expectedUserId === suite.dws.expectedUserId &&\n missingSkills.length === 0\n\n stage = 'independent-remote-readback'\n const mountEvidence: RemoteMountEvidence[] = []\n for (const binding of suite.bindings) {\n const mount = hydrated.mounts.find((item) => item.slot === binding.slot)\n if (!mount) throw new Error(`bootstrap 缺少远端挂载: ${binding.slot}`)\n const info = dws.docInfo(nodeRef(binding.uri), suite.dws.profile)\n assertDocType(binding, info)\n const readback = String(dws.readDoc(nodeRef(binding.uri), suite.dws.profile))\n const evidence = verifyMount(\n sandbox, stateDir, suite.dws.profile, binding, mount, readback, info)\n mountEvidence.push(evidence)\n const snapshotPath = join(evidenceRoot, 'outputs', 'remote-state', `${binding.slot}.md`)\n mkdirSync(dirname(snapshotPath), { recursive: true })\n copyFileSync(mount.path, snapshotPath)\n }\n\n stage = 'opencode-basic-skill-preflight'\n addRemoteInstructions(sandbox, hydrated.mounts)\n prepareOpenCodeEvalAgent(sandbox, 'none')\n const skillBinding = bindRequiredBasicSkill(sandbox)\n const preflight = verifyRequiredBasicSkill(\n skillBinding,\n options.command || process.env.DTA_OPENCODE_BIN || 'opencode',\n )\n stage = 'opencode-remote-state-probe'\n const marker = `[DTA-REMOTE-STATE-PROBE:${runId}]`\n const prompt = `${marker}\\n评测协议:回复第一行原样保留上面的 marker;禁止调用工具;不要解释评测协议。\\n${suite.modelProbe.prompt}`\n const execution = runOpenCodePrompt(\n options.command || process.env.DTA_OPENCODE_BIN || 'opencode',\n sandbox,\n model,\n prompt,\n `DTA remote state ${suite.id}`,\n timeoutMs,\n )\n const exactAttributed = execution.answer.startsWith(marker)\n const answer = exactAttributed\n ? execution.answer.slice(marker.length).trim()\n : execution.answer\n const modelChecks = suite.modelProbe.expectedText.map((value) => ({\n value,\n passed: answer.includes(value),\n }))\n const modelPassed = execution.exitCode === 0 && exactAttributed &&\n execution.toolCalls === 0 && execution.directoryMatched &&\n modelChecks.every((item) => item.passed)\n const passed = definitionPassed && mountEvidence.every((item) => item.passed) &&\n writeReceipts.every((item) => item.verified) && preflight.verified && modelPassed\n const report = {\n $schema: 'dingtalk-agent/remote-state-eval-report@1',\n runId,\n passed,\n plan,\n identity: {\n profile: suite.dws.profile,\n expectedUserId: suite.dws.expectedUserId,\n actualUserId,\n matched: true,\n },\n definition: {\n passed: definitionPassed,\n hash: hydrated.definition.hash,\n source: hydrated.definition.source,\n status: hydrated.definition.status,\n requiredSkills: suite.requiredSkills,\n loadedSkills: [...roleSkills],\n missingSkills,\n storage: hydrated.definition.storage,\n },\n basicSkill: relativeBinding(preflight),\n mounts: mountEvidence,\n writeReceipts,\n modelProbe: {\n passed: modelPassed,\n model,\n marker,\n exactAttributed,\n answer,\n checks: modelChecks,\n toolCalls: execution.toolCalls,\n toolNames: execution.toolNames,\n directoryMatched: execution.directoryMatched,\n sessionId: execution.sessionId,\n tokens: execution.tokens,\n cost: execution.cost,\n durationMs: execution.durationMs,\n exitCode: execution.exitCode,\n },\n evidence: {\n root: evidenceRoot,\n remoteSnapshots: mountEvidence.map((item) =>\n `outputs/remote-state/${item.slot}.md`),\n report: 'report.json',\n },\n }\n writeJson(join(evidenceRoot, 'report.json'), report)\n writeFileSync(join(evidenceRoot, 'opencode.stdout.ndjson'), execution.stdout)\n writeFileSync(join(evidenceRoot, 'opencode.stderr.log'), execution.stderr)\n return report\n } catch (error) {\n writeJson(join(evidenceRoot, 'failure.json'), {\n $schema: 'dingtalk-agent/remote-state-eval-failure@1',\n runId,\n stage,\n error: (error as Error).message,\n writeReceipts,\n reconciliationRequired: writeReceipts.some((item) => !item.verified),\n })\n throw error\n } finally {\n if (process.env.DTA_KEEP_REMOTE_STATE_EVAL_WORKSPACE !== '1') {\n rmSync(sandboxParent, { recursive: true, force: true })\n }\n }\n}\n\nfunction verifyMount(\n workspace: string,\n stateDir: string,\n profile: string,\n binding: RemoteStateBinding,\n mount: BootstrapMount,\n readback: string,\n info: Record<string, any>,\n): RemoteMountEvidence {\n const cacheBody = readFileSync(mount.path, 'utf8')\n const manifestPath = join(dirname(mount.path), 'manifest.json')\n const manifest = readJson(manifestPath) as Record<string, any>\n const remoteHash = digest(readback)\n const cacheHash = digest(cacheBody)\n const typeAccepted = String(info.contentType || '').toUpperCase() === 'ALIDOC' &&\n String(info.extension || '').toLowerCase() === 'adoc'\n const sourceMatched = mount.provider === 'dingtalk-doc' && mount.source === binding.uri\n const cacheContained = isWorkspacePathInside(stateDir, mount.path) &&\n isWorkspacePathInside(workspace, mount.path) && !lstatSync(mount.path).isSymbolicLink()\n const manifestMatched = manifest.$schema === 'dingtalk-agent/bootstrap-cache@1' &&\n manifest.source === binding.uri && manifest.profile === profile &&\n manifest.hash === mount.hash && realpathSync(manifest.path) === realpathSync(mount.path)\n const hashesMatched = remoteHash === mount.hash && cacheHash === mount.hash\n const requiredTextMatched = binding.requiredText.every((value) => readback.includes(value))\n return {\n slot: binding.slot,\n source: binding.uri,\n provider: mount.provider,\n remoteHash,\n mountHash: mount.hash,\n cacheHash,\n cachePath: relativeWorkspacePath(workspace, mount.path),\n manifestPath: relativeWorkspacePath(workspace, manifestPath),\n requiredTextMatched,\n typeAccepted,\n sourceMatched,\n cacheContained,\n manifestMatched,\n hashesMatched,\n passed: requiredTextMatched && typeAccepted && sourceMatched && cacheContained &&\n manifestMatched && hashesMatched,\n }\n}\n\nfunction addRemoteInstructions(workspace: string, mounts: BootstrapMount[]): void {\n const path = join(workspace, 'opencode.json')\n const config = existsSync(path) ? readJson(path) as Record<string, any> : {}\n const current = Array.isArray(config.instructions)\n ? config.instructions.filter((item: unknown): item is string => typeof item === 'string')\n : []\n const remote = mounts.filter((item) =>\n item.provider === 'dingtalk-doc' && ['memory', 'knowledge'].includes(item.slot))\n .map((item) => relativeWorkspacePath(workspace, item.path))\n config.$schema ||= 'https://opencode.ai/config.json'\n config.instructions = [...new Set([...current, ...remote])]\n writeJsonAtomic(path, config)\n}\n\nfunction materializeBasicSkill(workspace: string): void {\n const source = bundledSkillPath(resolvePackageRoot(import.meta.url), 'dingtalk-basic-behavior')\n const target = join(workspace, '.agents', 'skills', 'dingtalk-basic-behavior')\n mkdirSync(dirname(target), { recursive: true })\n rmSync(target, { recursive: true, force: true })\n cpSync(source, target, { recursive: true })\n}\n\nfunction safeStateDir(workspace: string, input: string): string {\n if (!input || isAbsolute(input) || input.split(/[\\\\/]/).includes('..')) {\n throw new Error(`Remote State Eval stateDir 必须是 Workspace 内相对路径: ${input}`)\n }\n const stateDir = resolve(workspace, input)\n if (!isWorkspacePathInside(workspace, stateDir)) {\n throw new Error(`Remote State Eval stateDir 越界: ${input}`)\n }\n return stateDir\n}\n\nfunction safeInside(root: string, input: string, mustExist: boolean): string {\n const rootReal = realpathSync(resolve(root))\n const candidate = resolve(rootReal, input)\n if (!isWorkspacePathInside(rootReal, candidate)) {\n throw new Error(`Remote State Eval 路径必须位于当前目录内: ${input}`)\n }\n if (mustExist && !existsSync(candidate)) {\n throw new Error(`Remote State Eval 路径不存在: ${input}`)\n }\n return candidate\n}\n\nfunction bindingUri(suite: RemoteStateEvalSpec, slot: RemoteStateSlot): string {\n const binding = suite.bindings.find((item) => item.slot === slot)\n if (!binding) throw new Error(`Remote State Eval 缺少 ${slot} binding`)\n return binding.uri\n}\n\nfunction nodeRef(uri: string): string {\n return uri.slice('dingtalk-doc:'.length)\n}\n\nfunction assertDocType(binding: RemoteStateBinding, info: Record<string, any>): void {\n const contentType = String(info?.contentType || '').toUpperCase()\n const extension = String(info?.extension || '').toLowerCase()\n if (contentType !== 'ALIDOC' || extension !== 'adoc') {\n throw new Error(\n `Remote State ${binding.slot} 只接受在线文档 adoc;实际 contentType=${contentType || '?'} extension=${extension || '?'}`,\n )\n }\n}\n\nfunction validateSpec(value: unknown): RemoteStateEvalSpec {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw new Error('Remote State Eval suite 必须是 JSON object')\n }\n const input = value as Record<string, any>\n assertKeys(input, [\n '$schema', 'id', 'description', 'scenario', 'dws', 'stateDir', 'requiredSkills',\n 'bindings', 'modelProbe',\n ], 'suite')\n if (input.$schema !== 'dingtalk-agent/remote-state-eval@1') {\n throw new Error('Remote State Eval suite $schema 非法')\n }\n if (!clean(input.id) || !clean(input.description) || input.scenario !== 'memory-and-storage') {\n throw new Error('Remote State Eval suite id/description/scenario 非法')\n }\n const profile = clean(input.dws?.profile)\n const expectedUserId = clean(input.dws?.expectedUserId)\n if (input.dws && typeof input.dws === 'object' && !Array.isArray(input.dws)) {\n assertKeys(input.dws, ['profile', 'expectedUserId'], 'dws')\n }\n if (!profile || profile.includes(',') || !expectedUserId) {\n throw new Error('Remote State Eval 必须固定单一 profile 和 expectedUserId')\n }\n const requiredSkills = stringList(input.requiredSkills, 'requiredSkills', true)\n if (!Array.isArray(input.bindings) || input.bindings.length !== 2) {\n throw new Error('Remote State Eval 必须各声明一个 memory 和 knowledge binding')\n }\n const bindings = input.bindings.map((item: unknown) => {\n if (!item || typeof item !== 'object' || Array.isArray(item)) {\n throw new Error('Remote State Eval binding 必须是 object')\n }\n const binding = item as Record<string, any>\n assertKeys(binding, ['slot', 'uri', 'requiredText', 'writeProbe'], 'binding')\n const uri = clean(binding.uri)\n if (!['memory', 'knowledge'].includes(binding.slot) ||\n !uri.startsWith('dingtalk-doc:') || !uri.slice('dingtalk-doc:'.length)) {\n throw new Error('Remote State Eval binding 只支持 memory/knowledge 的 dingtalk-doc URI')\n }\n if (typeof binding.writeProbe !== 'boolean') {\n throw new Error('Remote State Eval binding.writeProbe 必须是 boolean')\n }\n return {\n slot: binding.slot as RemoteStateSlot,\n uri,\n requiredText: stringList(binding.requiredText, `${binding.slot}.requiredText`, true),\n writeProbe: binding.writeProbe === true,\n }\n })\n if (new Set(bindings.map((item) => item.slot)).size !== 2) {\n throw new Error('Remote State Eval memory/knowledge binding 不得重复')\n }\n const model = clean(input.modelProbe?.model)\n const prompt = clean(input.modelProbe?.prompt)\n const expectedText = stringList(input.modelProbe?.expectedText, 'modelProbe.expectedText', true)\n if (input.modelProbe && typeof input.modelProbe === 'object' &&\n !Array.isArray(input.modelProbe)) {\n assertKeys(input.modelProbe, ['model', 'prompt', 'expectedText'], 'modelProbe')\n }\n if (!model || !prompt) throw new Error('Remote State Eval modelProbe 不完整')\n const remoteText = new Set(bindings.flatMap((item) => item.requiredText))\n const nonRemote = expectedText.filter((item) => !remoteText.has(item))\n if (nonRemote.length) {\n throw new Error(`Remote State Eval modelProbe 只能检查远端 requiredText: ${nonRemote.join(',')}`)\n }\n return {\n $schema: 'dingtalk-agent/remote-state-eval@1',\n id: clean(input.id),\n description: clean(input.description),\n scenario: 'memory-and-storage',\n dws: { profile, expectedUserId },\n stateDir: clean(input.stateDir) || '.dingtalk-agent/remote-state-eval',\n requiredSkills,\n bindings,\n modelProbe: { model, prompt, expectedText },\n }\n}\n\nfunction assertRemoteOnlyProbes(workspace: string, prompt: string, expected: string[]): void {\n if (expected.some((value) => prompt.includes(value))) {\n throw new Error('Remote State Eval prompt 不得直接泄露 expectedText')\n }\n const files = [join(workspace, 'AGENTS.md'), join(workspace, 'opencode.json')]\n const skills = join(workspace, 'skills')\n if (existsSync(skills)) {\n for (const entry of readdirSync(skills, { withFileTypes: true })) {\n if (entry.isDirectory()) files.push(join(skills, entry.name, 'SKILL.md'))\n }\n }\n for (const path of files) {\n if (!existsSync(path) || !lstatSync(path).isFile()) continue\n const body = readFileSync(path, 'utf8')\n const leaked = expected.filter((value) => body.includes(value))\n if (leaked.length) {\n throw new Error(`Remote State Eval expectedText 已出现在本地 Definition: ${path}`)\n }\n }\n}\n\nfunction assertKeys(value: Record<string, any>, allowed: string[], label: string): void {\n const extras = Object.keys(value).filter((key) => !allowed.includes(key))\n if (extras.length) throw new Error(`Remote State Eval ${label} 包含未知字段: ${extras.join(',')}`)\n}\n\nfunction findValue(value: unknown, keys: string[]): unknown {\n if (!value || typeof value !== 'object') return undefined\n if (Array.isArray(value)) {\n for (const item of value) {\n const found = findValue(item, keys)\n if (found !== undefined) return found\n }\n return undefined\n }\n const object = value as Record<string, unknown>\n for (const key of keys) if (object[key] !== undefined) return object[key]\n for (const item of Object.values(object)) {\n const found = findValue(item, keys)\n if (found !== undefined) return found\n }\n return undefined\n}\n\nfunction stringList(value: unknown, label: string, nonEmpty = false): string[] {\n if (!Array.isArray(value) || value.some((item) => !clean(item))) {\n throw new Error(`Remote State Eval ${label} 必须是非空 string[]`)\n }\n const out = value.map((item) => clean(item))\n if (nonEmpty && out.length === 0) {\n throw new Error(`Remote State Eval ${label} 不能为空`)\n }\n return [...new Set(out)]\n}\n\nfunction semanticMarkerCount(body: string, marker: string): number {\n // DingTalk may escape underscores/brackets when Markdown is read back. Compare\n // the text stream, not serialized Markdown decoration, while keeping the marker unique.\n const normalizedBody = dws.words(body)\n const normalizedMarker = dws.words(marker)\n return normalizedMarker ? normalizedBody.split(normalizedMarker).length - 1 : 0\n}\n\nfunction clean(value: unknown): string {\n return typeof value === 'string' ? value.trim() : ''\n}\n\nfunction readJson(path: string): unknown {\n try { return JSON.parse(readFileSync(path, 'utf8')) }\n catch (error) { throw new Error(`${path} 不是合法 JSON: ${(error as Error).message}`) }\n}\n\nfunction writeJson(path: string, value: unknown): void {\n mkdirSync(dirname(path), { recursive: true })\n writeJsonAtomic(path, value)\n}\n\nfunction writeJsonAtomic(path: string, value: unknown): void {\n const temporary = `${path}.${process.pid}.${Date.now()}.tmp`\n writeFileSync(temporary, JSON.stringify(value, null, 2) + '\\n', { flag: 'wx' })\n renameSync(temporary, path)\n}\n"]}
|
|
1
|
+
{"version":3,"file":"remote-state-evals.js","sourceRoot":"","sources":["../../src/remote-state-evals.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from 'node:crypto'\nimport {\n copyFileSync, cpSync, existsSync, lstatSync, mkdirSync, mkdtempSync, readFileSync,\n realpathSync, readdirSync, renameSync, rmSync, writeFileSync,\n} from 'node:fs'\nimport { tmpdir } from 'node:os'\nimport { dirname, isAbsolute, join, relative, resolve } from 'node:path'\nimport { bootstrap, type BootstrapMount } from './bootstrap.js'\nimport * as dws from './dws.js'\nimport { digest } from './events.js'\nimport { isWorkspacePathInside, relativeWorkspacePath } from './eval-evidence.js'\nimport {\n prepareOpenCodeEvalAgent, runOpenCodePrompt, type OpenCodeExecution,\n} from './opencode-evals.js'\nimport {\n bindRequiredBasicSkill, relativeBinding, verifyRequiredBasicSkill,\n} from './opencode-workspace.js'\nimport { resolvePackageRoot } from './package-root.js'\nimport { bundledSkillPath } from './skill-manager.js'\n\ntype RemoteStateSlot = 'memory' | 'knowledge'\n\ninterface RemoteStateBinding {\n slot: RemoteStateSlot\n uri: string\n requiredText: string[]\n writeProbe: boolean\n}\n\ninterface RemoteStateEvalSpec {\n $schema: 'dingtalk-agent/remote-state-eval@1'\n id: string\n description: string\n scenario: 'memory-and-storage'\n dws: { profile: string; expectedUserId: string }\n stateDir: string\n requiredSkills: string[]\n bindings: RemoteStateBinding[]\n modelProbe: {\n model: string\n prompt: string\n expectedText: string[]\n }\n}\n\nexport interface RemoteStateEvalOptions {\n execute?: boolean\n live?: boolean\n yes?: boolean\n model?: string\n command?: string\n timeoutMs?: number\n out?: string\n}\n\ninterface RemoteMountEvidence {\n slot: RemoteStateSlot\n source: string\n provider: string\n remoteHash: string\n mountHash: string\n cacheHash: string\n cachePath: string\n manifestPath: string\n requiredTextMatched: boolean\n typeAccepted: boolean\n sourceMatched: boolean\n cacheContained: boolean\n manifestMatched: boolean\n hashesMatched: boolean\n passed: boolean\n}\n\nexport function runRemoteStateEvaluation(\n root: string,\n workspacePath: string,\n suitePath: string,\n options: RemoteStateEvalOptions = {},\n): Record<string, any> {\n const workspace = safeInside(root, workspacePath, true)\n const suiteFile = safeInside(root, suitePath, true)\n const suite = validateSpec(readJson(suiteFile))\n assertRemoteOnlyProbes(workspace, suite.modelProbe.prompt, suite.modelProbe.expectedText)\n safeStateDir(workspace, suite.stateDir)\n const model = options.model || suite.modelProbe.model\n if (!model.startsWith('deepseek/')) {\n throw new Error('Remote State Eval 模型必须固定为 deepseek/*')\n }\n const timeoutMs = options.timeoutMs ?? 120_000\n if (!Number.isInteger(timeoutMs) || timeoutMs < 10_000 || timeoutMs > 300_000) {\n throw new Error('Remote State Eval timeoutMs 必须为 10000..300000')\n }\n const writeBindings = suite.bindings.filter((item) => item.writeProbe)\n if (options.live && writeBindings.length !== 1) {\n throw new Error('Remote State Eval Live 必须且只能声明一个 writeProbe binding')\n }\n const plan = {\n $schema: 'dingtalk-agent/remote-state-eval-plan@1',\n id: suite.id,\n scenario: suite.scenario,\n sideEffect: options.live ? 'append-one-unique-marker-to-dedicated-test-document' : false,\n remoteRead: Boolean(options.execute),\n engine: 'storage',\n host: 'opencode',\n model,\n workspace: relative(realpathSync(root), workspace),\n suite: relative(realpathSync(root), suiteFile),\n definition: 'local AGENTS.md + local Role Skills',\n semanticState: suite.bindings.map((item) => ({\n slot: item.slot,\n provider: 'dingtalk-doc',\n uri: item.uri,\n writeProbe: item.writeProbe,\n })),\n controlState: 'local atomic host store',\n hardGates: [\n 'fixed DWS profile and exact expectedUserId',\n 'ALIDOC/adoc document type',\n 'local Definition and required Role Skills',\n 'forced Basic Skill OpenCode binding',\n 'remote readback = mount hash = cache bytes = cache manifest',\n 'model recalls remote-only probes with zero tools',\n 'optional unique write marker independently read back exactly once',\n ],\n }\n if (!options.execute) return { ...plan, ready: true, executeRequired: true }\n if (!options.yes) {\n throw new Error('Remote State Eval 会读取 DWS 并调用模型;必须同时传 --execute --yes')\n }\n if (options.live && !options.execute) {\n throw new Error('Remote State Eval Live 必须同时传 --execute --live --yes')\n }\n\n const runId = `remote_state_eval_${Date.now()}_${randomUUID().slice(0, 8)}`\n const evidenceRoot = safeInside(\n root,\n options.out || join('.dingtalk-agent', 'remote-state-eval-results', runId),\n false,\n )\n mkdirSync(evidenceRoot, { recursive: true })\n writeJson(join(evidenceRoot, 'plan.json'), plan)\n\n const sandboxParent = mkdtempSync(join(tmpdir(), 'dta-remote-state-eval-'))\n const sandbox = join(sandboxParent, 'workspace')\n const writeReceipts: Record<string, any>[] = []\n let stage = 'materialize-workspace'\n cpSync(workspace, sandbox, {\n recursive: true,\n filter: (source) => {\n const rel = relative(workspace, source)\n const first = rel.split(/[\\\\/]/)[0]\n return first !== '.git' && first !== '.dingtalk-agent'\n },\n })\n try {\n materializeBasicSkill(sandbox)\n stage = 'verify-dws-identity'\n const identityData = dws.getSelf(suite.dws.profile)\n const actualUserId = String(findValue(identityData, ['userId', 'user_id', 'userid']) || '')\n if (!actualUserId) {\n throw new Error('dws contact user get-self 没有返回 userId,拒绝远端状态评测')\n }\n if (actualUserId !== suite.dws.expectedUserId) {\n throw new Error(\n `DWS 执行身份不符:expected=${suite.dws.expectedUserId}, actual=${actualUserId}`,\n )\n }\n\n stage = 'probe-and-optionally-write-documents'\n for (const binding of suite.bindings) {\n assertDocType(binding, dws.docInfo(nodeRef(binding.uri), suite.dws.profile))\n if (!options.live || !binding.writeProbe) continue\n const marker = `[DTA-REMOTE-STATE-EVAL:${runId}:${binding.slot}]`\n const before = String(dws.readDoc(nodeRef(binding.uri), suite.dws.profile))\n if (semanticMarkerCount(before, marker) !== 0) {\n throw new Error(`远端写探针 marker 在写入前已经存在: ${binding.slot}`)\n }\n const fragment = join(sandboxParent, `${binding.slot}-write-probe.md`)\n writeFileSync(fragment, `\\n\\n${marker}\\n`)\n const accepted = Boolean(dws.appendDoc(nodeRef(binding.uri), fragment, suite.dws.profile))\n const after = String(dws.readDoc(nodeRef(binding.uri), suite.dws.profile))\n const markerCount = semanticMarkerCount(after, marker)\n writeReceipts.push({\n slot: binding.slot,\n marker,\n commandAccepted: accepted,\n markerCount,\n verified: markerCount === 1,\n verification: 'independent-full-document-readback',\n })\n writeJson(join(evidenceRoot, 'write-receipts.json'), writeReceipts)\n if (markerCount !== 1) {\n throw new Error(`远端写探针回读不一致: slot=${binding.slot}, count=${markerCount}`)\n }\n }\n\n stage = 'bootstrap-remote-state'\n const stateDir = safeStateDir(sandbox, suite.stateDir)\n const hydrated = bootstrap(sandbox, {\n agent: `local-dir:${sandbox}`,\n skills: `local-dir:${join(sandbox, 'skills')}`,\n memory: bindingUri(suite, 'memory'),\n knowledge: bindingUri(suite, 'knowledge'),\n stateDir,\n profile: suite.dws.profile,\n expectedUserId: suite.dws.expectedUserId,\n })\n const roleSkills = new Set(hydrated.definition.skills.map((item) => item.name))\n const missingSkills = suite.requiredSkills.filter((name) => !roleSkills.has(name))\n const definitionPassed = hydrated.definition.status === 'ready' &&\n hydrated.definition.source.kind === 'local-folder' &&\n hydrated.definition.storage.memory === bindingUri(suite, 'memory') &&\n hydrated.definition.storage.knowledge === bindingUri(suite, 'knowledge') &&\n hydrated.definition.authority.dwsProfile === suite.dws.profile &&\n hydrated.definition.authority.expectedUserId === suite.dws.expectedUserId &&\n missingSkills.length === 0\n\n stage = 'independent-remote-readback'\n const mountEvidence: RemoteMountEvidence[] = []\n for (const binding of suite.bindings) {\n const mount = hydrated.mounts.find((item) => item.slot === binding.slot)\n if (!mount) throw new Error(`bootstrap 缺少远端挂载: ${binding.slot}`)\n const info = dws.docInfo(nodeRef(binding.uri), suite.dws.profile)\n assertDocType(binding, info)\n const readback = String(dws.readDoc(nodeRef(binding.uri), suite.dws.profile))\n const evidence = verifyMount(\n sandbox, stateDir, suite.dws.profile, binding, mount, readback, info)\n mountEvidence.push(evidence)\n const snapshotPath = join(evidenceRoot, 'outputs', 'remote-state', `${binding.slot}.md`)\n mkdirSync(dirname(snapshotPath), { recursive: true })\n copyFileSync(mount.path, snapshotPath)\n }\n\n stage = 'opencode-basic-skill-preflight'\n addRemoteInstructions(sandbox, hydrated.mounts)\n prepareOpenCodeEvalAgent(sandbox, 'none')\n const skillBinding = bindRequiredBasicSkill(sandbox)\n const preflight = verifyRequiredBasicSkill(\n skillBinding,\n options.command || process.env.DTA_OPENCODE_BIN || 'opencode',\n )\n stage = 'opencode-remote-state-probe'\n const marker = `[DTA-REMOTE-STATE-PROBE:${runId}]`\n const prompt = `${marker}\\n评测协议:回复第一行原样保留上面的 marker;禁止调用工具;不要解释评测协议。\\n${suite.modelProbe.prompt}`\n const execution = runOpenCodePrompt(\n options.command || process.env.DTA_OPENCODE_BIN || 'opencode',\n sandbox,\n model,\n prompt,\n `DTA remote state ${suite.id}`,\n timeoutMs,\n )\n const exactAttributed = execution.answer.startsWith(marker)\n const answer = exactAttributed\n ? execution.answer.slice(marker.length).trim()\n : execution.answer\n const modelChecks = suite.modelProbe.expectedText.map((value) => ({\n value,\n passed: answer.includes(value),\n }))\n const modelPassed = execution.exitCode === 0 && exactAttributed &&\n execution.toolCalls === 0 && execution.directoryMatched &&\n modelChecks.every((item) => item.passed)\n const passed = definitionPassed && mountEvidence.every((item) => item.passed) &&\n writeReceipts.every((item) => item.verified) && preflight.verified && modelPassed\n const report = {\n $schema: 'dingtalk-agent/remote-state-eval-report@1',\n runId,\n passed,\n plan,\n identity: {\n profile: suite.dws.profile,\n expectedUserId: suite.dws.expectedUserId,\n actualUserId,\n matched: true,\n },\n definition: {\n passed: definitionPassed,\n hash: hydrated.definition.hash,\n source: hydrated.definition.source,\n status: hydrated.definition.status,\n requiredSkills: suite.requiredSkills,\n loadedSkills: [...roleSkills],\n missingSkills,\n storage: hydrated.definition.storage,\n },\n basicSkill: relativeBinding(preflight),\n mounts: mountEvidence,\n writeReceipts,\n modelProbe: {\n passed: modelPassed,\n model,\n marker,\n exactAttributed,\n answer,\n checks: modelChecks,\n toolCalls: execution.toolCalls,\n toolNames: execution.toolNames,\n directoryMatched: execution.directoryMatched,\n sessionId: execution.sessionId,\n tokens: execution.tokens,\n cost: execution.cost,\n durationMs: execution.durationMs,\n exitCode: execution.exitCode,\n },\n evidence: {\n root: evidenceRoot,\n remoteSnapshots: mountEvidence.map((item) =>\n `outputs/remote-state/${item.slot}.md`),\n report: 'report.json',\n },\n }\n writeJson(join(evidenceRoot, 'report.json'), report)\n writeFileSync(join(evidenceRoot, 'opencode.stdout.ndjson'), execution.stdout)\n writeFileSync(join(evidenceRoot, 'opencode.stderr.log'), execution.stderr)\n return report\n } catch (error) {\n writeJson(join(evidenceRoot, 'failure.json'), {\n $schema: 'dingtalk-agent/remote-state-eval-failure@1',\n runId,\n stage,\n error: (error as Error).message,\n writeReceipts,\n reconciliationRequired: writeReceipts.some((item) => !item.verified),\n })\n throw error\n } finally {\n if (process.env.DTA_KEEP_REMOTE_STATE_EVAL_WORKSPACE !== '1') {\n rmSync(sandboxParent, { recursive: true, force: true })\n }\n }\n}\n\nfunction verifyMount(\n workspace: string,\n stateDir: string,\n profile: string,\n binding: RemoteStateBinding,\n mount: BootstrapMount,\n readback: string,\n info: Record<string, any>,\n): RemoteMountEvidence {\n const cacheBody = readFileSync(mount.path, 'utf8')\n const manifestPath = join(dirname(mount.path), 'manifest.json')\n const manifest = readJson(manifestPath) as Record<string, any>\n const remoteHash = digest(readback)\n const cacheHash = digest(cacheBody)\n const typeAccepted = String(info.contentType || '').toUpperCase() === 'ALIDOC' &&\n String(info.extension || '').toLowerCase() === 'adoc'\n const sourceMatched = mount.provider === 'dingtalk-doc' && mount.source === binding.uri\n const cacheContained = isWorkspacePathInside(stateDir, mount.path) &&\n isWorkspacePathInside(workspace, mount.path) && !lstatSync(mount.path).isSymbolicLink()\n const manifestMatched = manifest.$schema === 'dingtalk-agent/bootstrap-cache@1' &&\n manifest.source === binding.uri && manifest.profile === profile &&\n manifest.hash === mount.hash && realpathSync(manifest.path) === realpathSync(mount.path)\n const hashesMatched = remoteHash === mount.hash && cacheHash === mount.hash\n const requiredTextMatched = binding.requiredText.every((value) => readback.includes(value))\n return {\n slot: binding.slot,\n source: binding.uri,\n provider: mount.provider,\n remoteHash,\n mountHash: mount.hash,\n cacheHash,\n cachePath: relativeWorkspacePath(workspace, mount.path),\n manifestPath: relativeWorkspacePath(workspace, manifestPath),\n requiredTextMatched,\n typeAccepted,\n sourceMatched,\n cacheContained,\n manifestMatched,\n hashesMatched,\n passed: requiredTextMatched && typeAccepted && sourceMatched && cacheContained &&\n manifestMatched && hashesMatched,\n }\n}\n\nfunction addRemoteInstructions(workspace: string, mounts: BootstrapMount[]): void {\n const path = join(workspace, 'opencode.json')\n const config = existsSync(path) ? readJson(path) as Record<string, any> : {}\n const current = Array.isArray(config.instructions)\n ? config.instructions.filter((item: unknown): item is string => typeof item === 'string')\n : []\n const remote = mounts.filter((item) =>\n item.provider === 'dingtalk-doc' && ['memory', 'knowledge'].includes(item.slot))\n .map((item) => relativeWorkspacePath(workspace, item.path))\n config.$schema ||= 'https://opencode.ai/config.json'\n config.instructions = [...new Set([...current, ...remote])]\n writeJsonAtomic(path, config)\n}\n\nfunction materializeBasicSkill(workspace: string): void {\n const source = bundledSkillPath(resolvePackageRoot(import.meta.url), 'dta-basic-behavior')\n const target = join(workspace, '.agents', 'skills', 'dta-basic-behavior')\n mkdirSync(dirname(target), { recursive: true })\n rmSync(target, { recursive: true, force: true })\n cpSync(source, target, { recursive: true })\n}\n\nfunction safeStateDir(workspace: string, input: string): string {\n if (!input || isAbsolute(input) || input.split(/[\\\\/]/).includes('..')) {\n throw new Error(`Remote State Eval stateDir 必须是 Workspace 内相对路径: ${input}`)\n }\n const stateDir = resolve(workspace, input)\n if (!isWorkspacePathInside(workspace, stateDir)) {\n throw new Error(`Remote State Eval stateDir 越界: ${input}`)\n }\n return stateDir\n}\n\nfunction safeInside(root: string, input: string, mustExist: boolean): string {\n const rootReal = realpathSync(resolve(root))\n const candidate = resolve(rootReal, input)\n if (!isWorkspacePathInside(rootReal, candidate)) {\n throw new Error(`Remote State Eval 路径必须位于当前目录内: ${input}`)\n }\n if (mustExist && !existsSync(candidate)) {\n throw new Error(`Remote State Eval 路径不存在: ${input}`)\n }\n return candidate\n}\n\nfunction bindingUri(suite: RemoteStateEvalSpec, slot: RemoteStateSlot): string {\n const binding = suite.bindings.find((item) => item.slot === slot)\n if (!binding) throw new Error(`Remote State Eval 缺少 ${slot} binding`)\n return binding.uri\n}\n\nfunction nodeRef(uri: string): string {\n return uri.slice('dingtalk-doc:'.length)\n}\n\nfunction assertDocType(binding: RemoteStateBinding, info: Record<string, any>): void {\n const contentType = String(info?.contentType || '').toUpperCase()\n const extension = String(info?.extension || '').toLowerCase()\n if (contentType !== 'ALIDOC' || extension !== 'adoc') {\n throw new Error(\n `Remote State ${binding.slot} 只接受在线文档 adoc;实际 contentType=${contentType || '?'} extension=${extension || '?'}`,\n )\n }\n}\n\nfunction validateSpec(value: unknown): RemoteStateEvalSpec {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw new Error('Remote State Eval suite 必须是 JSON object')\n }\n const input = value as Record<string, any>\n assertKeys(input, [\n '$schema', 'id', 'description', 'scenario', 'dws', 'stateDir', 'requiredSkills',\n 'bindings', 'modelProbe',\n ], 'suite')\n if (input.$schema !== 'dingtalk-agent/remote-state-eval@1') {\n throw new Error('Remote State Eval suite $schema 非法')\n }\n if (!clean(input.id) || !clean(input.description) || input.scenario !== 'memory-and-storage') {\n throw new Error('Remote State Eval suite id/description/scenario 非法')\n }\n const profile = clean(input.dws?.profile)\n const expectedUserId = clean(input.dws?.expectedUserId)\n if (input.dws && typeof input.dws === 'object' && !Array.isArray(input.dws)) {\n assertKeys(input.dws, ['profile', 'expectedUserId'], 'dws')\n }\n if (!profile || profile.includes(',') || !expectedUserId) {\n throw new Error('Remote State Eval 必须固定单一 profile 和 expectedUserId')\n }\n const requiredSkills = stringList(input.requiredSkills, 'requiredSkills', true)\n if (!Array.isArray(input.bindings) || input.bindings.length !== 2) {\n throw new Error('Remote State Eval 必须各声明一个 memory 和 knowledge binding')\n }\n const bindings = input.bindings.map((item: unknown) => {\n if (!item || typeof item !== 'object' || Array.isArray(item)) {\n throw new Error('Remote State Eval binding 必须是 object')\n }\n const binding = item as Record<string, any>\n assertKeys(binding, ['slot', 'uri', 'requiredText', 'writeProbe'], 'binding')\n const uri = clean(binding.uri)\n if (!['memory', 'knowledge'].includes(binding.slot) ||\n !uri.startsWith('dingtalk-doc:') || !uri.slice('dingtalk-doc:'.length)) {\n throw new Error('Remote State Eval binding 只支持 memory/knowledge 的 dingtalk-doc URI')\n }\n if (typeof binding.writeProbe !== 'boolean') {\n throw new Error('Remote State Eval binding.writeProbe 必须是 boolean')\n }\n return {\n slot: binding.slot as RemoteStateSlot,\n uri,\n requiredText: stringList(binding.requiredText, `${binding.slot}.requiredText`, true),\n writeProbe: binding.writeProbe === true,\n }\n })\n if (new Set(bindings.map((item) => item.slot)).size !== 2) {\n throw new Error('Remote State Eval memory/knowledge binding 不得重复')\n }\n const model = clean(input.modelProbe?.model)\n const prompt = clean(input.modelProbe?.prompt)\n const expectedText = stringList(input.modelProbe?.expectedText, 'modelProbe.expectedText', true)\n if (input.modelProbe && typeof input.modelProbe === 'object' &&\n !Array.isArray(input.modelProbe)) {\n assertKeys(input.modelProbe, ['model', 'prompt', 'expectedText'], 'modelProbe')\n }\n if (!model || !prompt) throw new Error('Remote State Eval modelProbe 不完整')\n const remoteText = new Set(bindings.flatMap((item) => item.requiredText))\n const nonRemote = expectedText.filter((item) => !remoteText.has(item))\n if (nonRemote.length) {\n throw new Error(`Remote State Eval modelProbe 只能检查远端 requiredText: ${nonRemote.join(',')}`)\n }\n return {\n $schema: 'dingtalk-agent/remote-state-eval@1',\n id: clean(input.id),\n description: clean(input.description),\n scenario: 'memory-and-storage',\n dws: { profile, expectedUserId },\n stateDir: clean(input.stateDir) || '.dingtalk-agent/remote-state-eval',\n requiredSkills,\n bindings,\n modelProbe: { model, prompt, expectedText },\n }\n}\n\nfunction assertRemoteOnlyProbes(workspace: string, prompt: string, expected: string[]): void {\n if (expected.some((value) => prompt.includes(value))) {\n throw new Error('Remote State Eval prompt 不得直接泄露 expectedText')\n }\n const files = [join(workspace, 'AGENTS.md'), join(workspace, 'opencode.json')]\n const skills = join(workspace, 'skills')\n if (existsSync(skills)) {\n for (const entry of readdirSync(skills, { withFileTypes: true })) {\n if (entry.isDirectory()) files.push(join(skills, entry.name, 'SKILL.md'))\n }\n }\n for (const path of files) {\n if (!existsSync(path) || !lstatSync(path).isFile()) continue\n const body = readFileSync(path, 'utf8')\n const leaked = expected.filter((value) => body.includes(value))\n if (leaked.length) {\n throw new Error(`Remote State Eval expectedText 已出现在本地 Definition: ${path}`)\n }\n }\n}\n\nfunction assertKeys(value: Record<string, any>, allowed: string[], label: string): void {\n const extras = Object.keys(value).filter((key) => !allowed.includes(key))\n if (extras.length) throw new Error(`Remote State Eval ${label} 包含未知字段: ${extras.join(',')}`)\n}\n\nfunction findValue(value: unknown, keys: string[]): unknown {\n if (!value || typeof value !== 'object') return undefined\n if (Array.isArray(value)) {\n for (const item of value) {\n const found = findValue(item, keys)\n if (found !== undefined) return found\n }\n return undefined\n }\n const object = value as Record<string, unknown>\n for (const key of keys) if (object[key] !== undefined) return object[key]\n for (const item of Object.values(object)) {\n const found = findValue(item, keys)\n if (found !== undefined) return found\n }\n return undefined\n}\n\nfunction stringList(value: unknown, label: string, nonEmpty = false): string[] {\n if (!Array.isArray(value) || value.some((item) => !clean(item))) {\n throw new Error(`Remote State Eval ${label} 必须是非空 string[]`)\n }\n const out = value.map((item) => clean(item))\n if (nonEmpty && out.length === 0) {\n throw new Error(`Remote State Eval ${label} 不能为空`)\n }\n return [...new Set(out)]\n}\n\nfunction semanticMarkerCount(body: string, marker: string): number {\n // DingTalk may escape underscores/brackets when Markdown is read back. Compare\n // the text stream, not serialized Markdown decoration, while keeping the marker unique.\n const normalizedBody = dws.words(body)\n const normalizedMarker = dws.words(marker)\n return normalizedMarker ? normalizedBody.split(normalizedMarker).length - 1 : 0\n}\n\nfunction clean(value: unknown): string {\n return typeof value === 'string' ? value.trim() : ''\n}\n\nfunction readJson(path: string): unknown {\n try { return JSON.parse(readFileSync(path, 'utf8')) }\n catch (error) { throw new Error(`${path} 不是合法 JSON: ${(error as Error).message}`) }\n}\n\nfunction writeJson(path: string, value: unknown): void {\n mkdirSync(dirname(path), { recursive: true })\n writeJsonAtomic(path, value)\n}\n\nfunction writeJsonAtomic(path: string, value: unknown): void {\n const temporary = `${path}.${process.pid}.${Date.now()}.tmp`\n writeFileSync(temporary, JSON.stringify(value, null, 2) + '\\n', { flag: 'wx' })\n renameSync(temporary, path)\n}\n"]}
|
package/dist/src/robot-evals.js
CHANGED
|
@@ -31,7 +31,7 @@ export function runRobotEvaluation(root, poolFile, suiteFile, options = {}) {
|
|
|
31
31
|
})),
|
|
32
32
|
hostContract: {
|
|
33
33
|
host: 'opencode',
|
|
34
|
-
requiredSkill: '
|
|
34
|
+
requiredSkill: 'dta-basic-behavior',
|
|
35
35
|
loadStrategy: 'opencode.json#instructions',
|
|
36
36
|
preflightBeforeMessage: true,
|
|
37
37
|
},
|
|
@@ -403,8 +403,8 @@ function materializeWorkspace(root, runId, slot) {
|
|
|
403
403
|
mkdirSync(dirname(destination), { recursive: true });
|
|
404
404
|
cpSync(source, destination, { recursive: true, errorOnExist: true });
|
|
405
405
|
const packageRoot = resolvePackageRoot(import.meta.url);
|
|
406
|
-
const basicSource = bundledSkillPath(packageRoot, '
|
|
407
|
-
const basicTarget = join(destination, '.agents', 'skills', '
|
|
406
|
+
const basicSource = bundledSkillPath(packageRoot, 'dta-basic-behavior');
|
|
407
|
+
const basicTarget = join(destination, '.agents', 'skills', 'dta-basic-behavior');
|
|
408
408
|
mkdirSync(dirname(basicTarget), { recursive: true });
|
|
409
409
|
cpSync(basicSource, basicTarget, { recursive: true, errorOnExist: true });
|
|
410
410
|
const binding = bindRequiredBasicSkill(destination);
|