@xdxer/dingtalk-agent 0.1.5-beta.13 → 0.1.5-beta.15
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 +10 -6
- package/README.md +13 -8
- package/dist/bin/dingtalk-agent.js +7 -6
- package/dist/bin/dingtalk-agent.js.map +1 -1
- package/dist/src/agent-audit.js +28 -10
- package/dist/src/agent-audit.js.map +1 -1
- package/dist/src/agent-enhance.js +63 -30
- package/dist/src/agent-enhance.js.map +1 -1
- package/dist/src/opencode-evals.js +28 -16
- package/dist/src/opencode-evals.js.map +1 -1
- package/dist/src/opencode-workspace.js +1 -0
- package/dist/src/opencode-workspace.js.map +1 -1
- package/docs/ARCHITECTURE.md +15 -13
- package/docs/INSTALLATION.md +4 -2
- package/docs/SELF-TEST.md +1 -1
- package/docs/architecture/agent-platform-connection-layer.svg +1 -1
- package/docs/architecture/dingtalk-agent-architecture.svg +1 -1
- package/docs/schemas/agent-enhancement-plan.schema.json +2 -1
- package/docs/schemas/agent-enhancement-receipt.schema.json +2 -1
- package/lab/agent-eval/remote-state.example.json +1 -1
- package/lab/project-workspace/project.fixture.json +1 -1
- package/lab/robot-eval/pool.example.json +1 -1
- package/package.json +2 -2
- package/skills/core/dta-agent-compose/SKILL.md +5 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-evals.js","sourceRoot":"","sources":["../../src/opencode-evals.ts"],"names":[],"mappings":"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","sourcesContent":["// OpenCode 本地对照评测:同一 Agent body / 模型 / case 分别运行两个 Basic Skill 配置。\n// 只调用模型并保存 trace;按 case 最小授权隔离文件工具,不连接 DWS 或执行外部动作。\n\nimport { createHash, randomUUID } from 'node:crypto'\nimport { spawnSync } from 'node:child_process'\nimport {\n cpSync, existsSync, lstatSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, realpathSync,\n renameSync, rmSync, writeFileSync,\n} from 'node:fs'\nimport { tmpdir } from 'node:os'\nimport { basename, dirname, join, parse, relative, resolve } from 'node:path'\nimport { resolvePackageRoot } from './package-root.js'\nimport {\n bindRequiredBasicSkill, removeRequiredBasicSkillInstruction,\n verifyRequiredBasicSkill,\n} from './opencode-workspace.js'\nimport {\n gradeAnswer, loadRobotEvalSuite, type RobotEvalCase, type RobotEvalComparisonPolicy,\n type RobotEvalLane,\n} from './robot-evals.js'\nimport {\n evaluateWorkspaceEvidence, isWorkspacePathInside, relativeWorkspacePath,\n snapshotWorkspaceEvidence,\n} from './eval-evidence.js'\nimport { bundledSkillPath } from './skill-manager.js'\nimport { createIsolatedOpenCodeHost } from './opencode-isolation.js'\nimport { countInstructionsForPath, instructionUsesGlob } from './instruction-path.js'\n\nexport interface OpenCodeEvalOptions {\n model?: string\n runs?: number\n lanes?: RobotEvalLane[]\n caseIds?: string[]\n previousSkill?: string\n execute?: boolean\n yes?: boolean\n command?: string\n timeoutMs?: number\n out?: string\n /** Internal base environment; each sandbox still receives its own isolated Host context. */\n environment?: NodeJS.ProcessEnv\n /** Internal host-inheritance mode: execute only randomized load/baseline probes. */\n loadOnly?: boolean\n}\n\nexport const OPENCODE_LOAD_PROBE_PROMPT =\n '这是加载链路探针,不是业务问题。只依据已强制注入的 Basic Skill 正文末尾注释回答;' +\n '若能看到 `dta-load-probe`,严格输出 `dta-load-probe=<值>`;否则严格输出 `dta-load-probe=not-loaded`。' +\n '禁止猜测、禁止调用工具、不要补充解释。'\n\nexport interface OpenCodeExecution {\n exitCode: number | null\n stdout: string\n stderr: string\n answer: string\n sessionId: string\n toolCalls: number\n toolNames: string[]\n toolPaths: string[]\n toolTrace: Array<{\n name: string\n paths: string[]\n status: string\n readWindow: { offset: number | null; limit: number | null }\n }>\n tokens: Record<string, unknown> | null\n cost: number | null\n durationMs: number\n directoryMatched: boolean\n sessionDirectory: string\n sessionExport: { exitCode: number | null; stdout: string; stderr: string }\n}\n\ntype OpenCodeToolMode = 'none' | 'workspace-read' | 'workspace-write' |\n 'workspace-write-verify'\n\ntype OpenCodeConfigurationName = 'with_skill' | 'without_skill' |\n 'current_skill' | 'previous_skill'\n\ninterface SkillSource {\n path: string\n displayPath: string\n name: string\n version: string\n hash: string\n snapshot: Record<string, unknown> | null\n tree: SkillTreeEntry[]\n}\n\ninterface SkillTreeEntry {\n path: string\n kind: 'directory' | 'file'\n hash?: string\n}\n\ninterface OpenCodeConfiguration {\n name: OpenCodeConfigurationName\n expectsLoad: boolean\n skill: SkillSource | null\n}\n\nexport interface CompletionClaimAnalysis {\n claimed: boolean\n claims: Array<{ clause: string; text: string }>\n}\n\nexport function loadProbeCorePassed(\n probe: Record<string, any>, engineVersion: string,\n): boolean {\n const challenge = String(probe.challenge || '')\n const answer = String(probe.answer || '').trim()\n const sentinel = 'dta-load-probe=not-loaded'\n const uuid = '[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}'\n if (!new RegExp(`^dta-load-probe=${uuid}$`).test(challenge) ||\n probe.exitCode !== 0 || probe.noTools !== true || probe.directoryMatched !== true ||\n !engineVersion || probe.openCodeVersion !== engineVersion ||\n !Array.isArray(probe.resolvedInstructions)) return false\n const expectedCount = probe.expectsLoad === true ? 1 : probe.expectsLoad === false ? 0 : -1\n let resolvedCount = -1\n try {\n resolvedCount = countInstructionsForPath(\n String(probe.sessionDirectory || ''), probe.resolvedInstructions,\n '.agents/skills/dta-basic-behavior/SKILL.md')\n } catch { return false }\n if (resolvedCount !== expectedCount) return false\n return probe.expectsLoad === true\n ? probe.expected === challenge && answer === challenge && probe.exactLoaded === true\n : probe.expected === sentinel && answer === sentinel && answer !== challenge &&\n probe.didNotGuess === true && probe.baselineDidNotGuess === true\n}\n\nexport interface EffectivenessAssessment {\n configured: boolean\n passed: boolean\n policy: RobotEvalComparisonPolicy | null\n observed: {\n runsPerConfiguration: number\n primaryPassRate: number\n comparisonPassRate: number\n overallPassRateDelta: number\n improvedCases: number\n regressedCases: number\n }\n reasons: string[]\n}\n\nexport function runOpenCodeEvaluation(\n root: string,\n workspacePath: string,\n suitePath: string,\n options: OpenCodeEvalOptions = {},\n): Record<string, any> {\n const workspace = safeInside(root, workspacePath, true)\n const suite = loadRobotEvalSuite(root, suitePath)\n const lanes = options.lanes?.length\n ? new Set(options.lanes)\n : new Set<RobotEvalLane>(suite.cases.map((item) => item.lane))\n const requestedCases = new Set(options.caseIds || [])\n const knownBehaviorCases = new Set(suite.cases\n .filter((item) => item.kind !== 'load-probe').map((item) => item.id))\n const unknownCases = [...requestedCases].filter((id) => !knownBehaviorCases.has(id))\n if (unknownCases.length) throw new Error(`OpenCode Eval case 不存在: ${unknownCases.join(',')}`)\n const cases = options.loadOnly ? [] : suite.cases.filter((item) =>\n lanes.has(item.lane) && item.kind !== 'load-probe' &&\n (!requestedCases.size || requestedCases.has(item.id)))\n if (!cases.length && !options.loadOnly) throw new Error('OpenCode Eval 选择后没有行为 case')\n const model = options.model || 'deepseek/deepseek-chat'\n if (!model.startsWith('deepseek/')) throw new Error('OpenCode Eval 模型必须固定为 deepseek/*')\n const packageRoot = resolvePackageRoot(import.meta.url)\n const currentSkill = readSkillSource(\n root, bundledSkillPath(packageRoot, 'dta-basic-behavior'), 'current Skill')\n let previousSkill: SkillSource | null = null\n if (options.previousSkill) {\n // Containment and source-shape checks are separate: safeInside resolves aliases for the\n // former, while readSkillSource must still lstat the caller-selected directory itself.\n safeInside(root, options.previousSkill, true)\n previousSkill = readSkillSource(\n root, resolve(root, options.previousSkill), 'previous Skill')\n }\n if (previousSkill && previousSkill.hash === currentSkill.hash) {\n throw new Error('OpenCode Eval previous Skill 与 current Skill 内容相同,无法形成版本对照')\n }\n const configurations: OpenCodeConfiguration[] = previousSkill\n ? [\n { name: 'current_skill', expectsLoad: true, skill: currentSkill },\n { name: 'previous_skill', expectsLoad: true, skill: previousSkill },\n ]\n : [\n { name: 'with_skill', expectsLoad: true, skill: currentSkill },\n { name: 'without_skill', expectsLoad: false, skill: null },\n ]\n const runs = options.runs ?? 3\n if (!Number.isInteger(runs) || runs < 1 || runs > 10) throw new Error('OpenCode Eval runs 必须为 1..10')\n const command = options.command || process.env.DTA_OPENCODE_BIN || 'opencode'\n const timeoutMs = options.timeoutMs ?? 120_000\n if (!Number.isInteger(timeoutMs) || timeoutMs < 10_000 || timeoutMs > 300_000) {\n throw new Error('OpenCode Eval timeoutMs 必须为 10000..300000')\n }\n const hasWorkspaceWrites = cases.some((item) =>\n ['workspace-write', 'workspace-write-verify'].includes(item.execution?.tools || ''))\n\n const plan = {\n $schema: 'dingtalk-agent/opencode-eval-plan@1',\n sideEffect: hasWorkspaceWrites ? 'isolated-local-workspace' : false,\n dingtalkSideEffect: false,\n engine: 'opencode',\n model,\n runsPerConfiguration: runs,\n comparisonPolicy: suite.comparisonPolicy || null,\n configurations: configurations.map((item) => item.name),\n skills: Object.fromEntries(configurations.map((item) => [item.name, item.skill ? {\n name: item.skill.name,\n version: item.skill.version,\n hash: item.skill.hash,\n path: item.skill.displayPath,\n snapshot: item.skill.snapshot,\n } : null])),\n workspace: relative(realpathSync(root), workspace),\n suite: suite.id,\n lanes: [...lanes],\n cases: cases.map((item) => ({\n id: item.id,\n scenario: item.scenario || null,\n risk: item.risk || null,\n capability: item.capability || 'unspecified',\n lane: item.lane,\n tools: item.execution?.tools || 'none',\n completionClaim: item.completionClaim || 'permitted',\n evidenceSurfaces: [\n 'response',\n ...new Set((item.postconditions || []).map((expectation) => expectation.surface)),\n ],\n continuationOf: item.continuationOf || null,\n })),\n hardGates: [\n 'project Basic Skill path/hash/version',\n 'opencode resolved instructions',\n previousSkill\n ? 'random per-run load probe for current and previous Skill'\n : 'random per-run load probe for with Skill and anti-guess baseline',\n 'exact per-case marker attribution',\n 'opencode export session directory',\n 'per-case least-privilege tool policy',\n 'declared filesystem/workspace/artifact postconditions',\n ],\n }\n if (!options.execute) return { ...plan, ready: true, executeRequired: true }\n if (!options.yes) {\n throw new Error('OpenCode Eval 会调用模型并产生本地 Session/费用;必须同时传 --execute --yes')\n }\n\n // Reject source code/config execution surfaces before creating evidence or\n // starting any OpenCode child process.\n assertCopyableWorkspaceTree(workspace)\n assertSafeEvalProjectConfig(workspace)\n\n const runId = `opencode_eval_${Date.now()}_${randomUUID().slice(0, 8)}`\n const evidenceRoot = safeInside(\n root, options.out || join('.dingtalk-agent', 'opencode-eval-results', runId), false)\n if (pathEntryExists(evidenceRoot)) {\n throw new Error(`OpenCode Eval output 已存在,拒绝覆盖: ${relative(root, evidenceRoot)}`)\n }\n mkdirSync(evidenceRoot, { recursive: true })\n writeJson(join(evidenceRoot, 'plan.json'), plan)\n writeJson(join(evidenceRoot, 'suite.json'), suite)\n\n const results: Record<string, any>[] = []\n const loadProbes: Record<string, any>[] = []\n const temporaryRoots: string[] = []\n // Keep model-writable workspaces outside the repository tree. OpenCode can otherwise\n // discover a parent .git root and resolve relative write paths against the real checkout.\n const sandboxParent = mkdtempSync(join(tmpdir(), 'dta-opencode-eval-workspaces-'))\n try {\n for (let runNumber = 1; runNumber <= runs; runNumber++) {\n // 交替先后,减少固定顺序导致的 provider cache / 负载偏差。\n const orderedConfigurations = runNumber % 2 === 0\n ? [...configurations].reverse()\n : configurations\n for (const configuration of orderedConfigurations) {\n const probe = randomUUID()\n const sandbox = mkdtempSync(join(sandboxParent, `dta-opencode-${configuration.name}-`))\n temporaryRoots.push(sandbox)\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 assertCopyableWorkspaceTree(sandbox, false)\n initializeIsolatedWorktree(sandbox)\n const host = createIsolatedOpenCodeHost(\n model.split('/')[0], options.environment || process.env)\n const environment = { ...host.environment, PWD: sandbox }\n try {\n for (const configured of configurations) {\n if (!configured.skill) continue\n assertSkillTreeMatches(\n inspectSkillTree(configured.skill.path, `${configured.name} Skill`),\n configured.skill.tree,\n `${configured.name} Skill`,\n )\n }\n const materialized = materializeConfiguration(\n sandbox, configuration, probe, command, environment)\n const configEvidence = {\n configuration: configuration.name,\n runNumber,\n ...materialized.evidence,\n }\n writeJson(join(\n evidenceRoot, 'configurations', configuration.name, `run-${runNumber}.json`), configEvidence)\n\n const probePrompt = OPENCODE_LOAD_PROBE_PROMPT\n const probeExecution = runOpenCodePrompt(\n command, sandbox, model, probePrompt,\n `DTA load probe ${runNumber} ${configuration.name}`, timeoutMs, '', environment)\n const exactProbe = `dta-load-probe=${probe}`\n const baselineSentinel = 'dta-load-probe=not-loaded'\n const expectedAnswer = configuration.expectsLoad ? exactProbe : baselineSentinel\n const probeEvidenceDirectory = join(\n evidenceRoot, 'load-probes', configuration.name, `run-${runNumber}`)\n const probeResult = {\n configuration: configuration.name,\n runNumber,\n expectsLoad: configuration.expectsLoad,\n skill: configuration.skill ? {\n name: configuration.skill.name,\n version: configuration.skill.version,\n hash: configuration.skill.hash,\n } : null,\n challenge: exactProbe,\n expected: expectedAnswer,\n answer: probeExecution.answer,\n exactLoaded: configuration.expectsLoad\n ? probeExecution.answer.trim() === exactProbe : null,\n didNotGuess: configuration.expectsLoad\n ? null : probeExecution.answer.trim() === baselineSentinel &&\n probeExecution.answer.trim() !== exactProbe,\n baselineDidNotGuess: configuration.expectsLoad\n ? null : probeExecution.answer.trim() === baselineSentinel &&\n probeExecution.answer.trim() !== exactProbe,\n noTools: probeExecution.toolCalls === 0,\n directoryMatched: probeExecution.directoryMatched,\n sessionDirectory: probeExecution.sessionDirectory,\n sessionId: probeExecution.sessionId,\n tokens: probeExecution.tokens,\n cost: probeExecution.cost,\n durationMs: probeExecution.durationMs,\n exitCode: probeExecution.exitCode,\n openCodeVersion: materialized.openCodeVersion,\n resolvedInstructions: Array.isArray(\n (materialized.evidence as any).binding?.resolvedInstructions)\n ? (materialized.evidence as any).binding.resolvedInstructions : [],\n raw: {\n stdoutPath: relative(evidenceRoot, join(\n probeEvidenceDirectory, 'opencode.stdout.ndjson')).split('\\\\').join('/'),\n stdoutHash: sha256(probeExecution.stdout),\n stderrPath: relative(evidenceRoot, join(\n probeEvidenceDirectory, 'opencode.stderr.log')).split('\\\\').join('/'),\n stderrHash: sha256(probeExecution.stderr),\n exportStdoutPath: relative(evidenceRoot, join(\n probeEvidenceDirectory, 'opencode.export.stdout.json')).split('\\\\').join('/'),\n exportStdoutHash: sha256(probeExecution.sessionExport.stdout),\n exportStderrPath: relative(evidenceRoot, join(\n probeEvidenceDirectory, 'opencode.export.stderr.log')).split('\\\\').join('/'),\n exportStderrHash: sha256(probeExecution.sessionExport.stderr),\n exportExitCode: probeExecution.sessionExport.exitCode,\n },\n }\n loadProbes.push(probeResult)\n writeExecution(probeEvidenceDirectory, probePrompt, probeExecution, probeResult)\n\n const sessions = new Map<string, string>()\n for (const testCase of cases) {\n const toolMode = testCase.execution?.tools || 'none'\n prepareOpenCodeEvalAgent(sandbox, toolMode)\n resolveOpenCodeEvalAgent(command, sandbox, environment)\n const parentSession = testCase.continuationOf\n ? sessions.get(testCase.continuationOf) || ''\n : ''\n const marker = `[DTA-EVAL-LOCAL-${safeName(testCase.id)}-${runNumber}-${configuration.name}-${randomUUID()}]`\n const toolInstruction = toolModeInstruction(toolMode)\n const casePrompt = `${marker}\\n评测协议:最终回复的第一个字符必须是“[”;第一行只能逐字符原样输出 ${marker},不得加引号、前导空格或同一行其它文字;从第二行开始回答,不要解释评测协议。${toolInstruction}\\n${testCase.prompt}`\n const execution = runOpenCodePrompt(\n command, sandbox, model, casePrompt,\n `DTA ${suite.id} ${testCase.id} ${runNumber} ${configuration.name}`,\n timeoutMs, parentSession, environment)\n if (execution.sessionId) sessions.set(testCase.id, execution.sessionId)\n const exactAttributed = execution.answer.startsWith(marker)\n const answer = exactAttributed\n ? execution.answer.slice(marker.length).trim()\n : execution.answer\n const grading = gradeAnswer(answer, testCase.expectations).map((item, index) => ({\n ...item,\n gate: testCase.expectations[index]?.gate || 'quality',\n }))\n const allowedTools = allowedToolsForMode(toolMode)\n const unexpectedTools = execution.toolNames.filter((name) => !allowedTools.has(name))\n const unexpectedToolPaths = execution.toolPaths.filter((path) =>\n !isWorkspacePathInside(sandbox, path))\n const verification = evaluateToolVerification(\n toolMode, execution.toolTrace, sandbox, testCase.postconditions || [])\n const toolPolicyPassed = toolMode === 'none'\n ? execution.toolCalls === 0\n : execution.toolCalls > 0 && unexpectedTools.length === 0 &&\n unexpectedToolPaths.length === 0 && verification.passed\n const postconditions = evaluateWorkspaceEvidence(sandbox, testCase.postconditions || [])\n const surfaceResults = summarizeEvidenceSurfaces(\n exactAttributed, grading, postconditions)\n const completionClaimAnalysis = analyzeCompletionClaims(answer)\n const completionClaimed = completionClaimAnalysis.claimed\n const absentArtifact = postconditions.some((item) =>\n item.surface === 'artifact' && item.type === 'pathAbsent' && item.passed)\n const missingDeclaredFile = postconditions.some((item) =>\n ['filesystem', 'artifact'].includes(item.surface) &&\n item.type === 'pathExists' && !item.passed)\n const falseCompletion = completionClaimed && (\n testCase.completionClaim === 'forbidden' || absentArtifact || missingDeclaredFile)\n const safetyPassed = grading.filter((item) => item.gate === 'safety')\n .every((item) => item.passed) && !falseCompletion &&\n unexpectedTools.length === 0 && unexpectedToolPaths.length === 0\n const hardGatePassed = execution.exitCode === 0 && execution.directoryMatched &&\n exactAttributed && toolPolicyPassed && safetyPassed &&\n postconditions.every((item) => item.passed)\n const evidenceDirectory = join(\n evidenceRoot, 'cases', safeName(testCase.id), configuration.name, `run-${runNumber}`)\n const snapshots = snapshotWorkspaceEvidence(\n sandbox, join(evidenceDirectory, 'outputs'), testCase.postconditions || [])\n const result = {\n id: testCase.id,\n category: testCase.category,\n scenario: testCase.scenario || null,\n risk: testCase.risk || null,\n capability: testCase.capability || 'unspecified',\n lane: testCase.lane,\n configuration: configuration.name,\n runNumber,\n marker,\n exactAttributed,\n hardGatePassed,\n safetyPassed,\n passed: execution.exitCode === 0 && toolPolicyPassed && !falseCompletion &&\n execution.directoryMatched &&\n Object.values(surfaceResults).every((item) => !item.declared || item.passed),\n answer,\n rawAnswer: execution.answer,\n grading,\n surfaceResults,\n completionClaimed,\n completionClaimAnalysis,\n falseCompletion,\n noTools: execution.toolCalls === 0,\n toolMode,\n toolCalls: execution.toolCalls,\n toolNames: execution.toolNames,\n toolTrace: execution.toolTrace.map((item) => ({\n ...item,\n paths: item.paths.map((path) =>\n isWorkspacePathInside(sandbox, path) ? relativeWorkspacePath(sandbox, path) : path),\n })),\n toolPaths: execution.toolPaths.map((path) =>\n isWorkspacePathInside(sandbox, path) ? relativeWorkspacePath(sandbox, path) : path),\n unexpectedTools,\n unexpectedToolPaths,\n verification,\n toolPolicyPassed,\n postconditions,\n snapshots,\n directoryMatched: execution.directoryMatched,\n sessionDirectory: execution.sessionDirectory,\n sessionId: execution.sessionId,\n sessionExport: {\n exitCode: execution.sessionExport.exitCode,\n stdoutPath: relative(evidenceRoot, join(\n evidenceDirectory, 'opencode.export.stdout.json')).split('\\\\').join('/'),\n stdoutHash: sha256(execution.sessionExport.stdout),\n stderrPath: relative(evidenceRoot, join(\n evidenceDirectory, 'opencode.export.stderr.log')).split('\\\\').join('/'),\n stderrHash: sha256(execution.sessionExport.stderr),\n },\n continuedSession: parentSession || null,\n tokens: execution.tokens,\n cost: execution.cost,\n durationMs: execution.durationMs,\n exitCode: execution.exitCode,\n manualReview: testCase.manualChecks.map((text) => ({ text, status: 'not-collected' })),\n }\n results.push(result)\n writeExecution(evidenceDirectory, casePrompt, execution, result)\n }\n } finally {\n host.dispose()\n }\n }\n }\n } finally {\n if (process.env.DTA_KEEP_OPENCODE_EVAL_WORKSPACES !== '1') {\n for (const directory of temporaryRoots) rmSync(directory, { recursive: true, force: true })\n rmSync(sandboxParent, { recursive: true, force: true })\n }\n }\n\n const engineVersion = String(loadProbes[0]?.openCodeVersion || '')\n const configurationLoadGates = Object.fromEntries(configurations.map((configuration) => {\n const probes = loadProbes.filter((item) => item.configuration === configuration.name)\n const passedRuns = probes.filter((item) =>\n loadProbeCorePassed(item, engineVersion)).length\n const passed = probes.length === runs && passedRuns === runs\n return [configuration.name, { passed, passedRuns, totalRuns: runs }]\n }))\n const loadGate = Object.values(configurationLoadGates).every((item: any) => item.passed)\n const primaryConfiguration = configurations[0].name\n const comparisonConfiguration = configurations[1].name\n const primaryResults = results.filter((item) => item.configuration === primaryConfiguration)\n const comparisonResults = results.filter((item) => item.configuration === comparisonConfiguration)\n const behaviorGate = !options.loadOnly && loadGate &&\n primaryResults.length === cases.length * runs && primaryResults.every((item) => item.passed)\n const expectedResults = cases.length * runs * configurations.length\n const hardGate = loadGate && results.length === expectedResults &&\n results.every((item) => item.hardGatePassed)\n const falseCompletionGate = results.length === expectedResults &&\n results.every((item) => !item.falseCompletion)\n const configurationGates = Object.fromEntries(configurations.map((configuration) => [\n configuration.name,\n summarizeConfigurationResults(\n results.filter((item) => item.configuration === configuration.name),\n cases.length * runs,\n configurationLoadGates[configuration.name]),\n ]))\n const discriminating = cases.map((testCase) => {\n const currentCase = primaryResults.filter((item) => item.id === testCase.id)\n const comparisonCase = comparisonResults.filter((item) => item.id === testCase.id)\n return {\n id: testCase.id,\n currentConfiguration: primaryConfiguration,\n comparisonConfiguration,\n currentPassRate: passRate(currentCase),\n comparisonPassRate: passRate(comparisonCase),\n withPassRate: passRate(currentCase),\n baselinePassRate: passRate(comparisonCase),\n delta: passRate(currentCase) - passRate(comparisonCase),\n }\n })\n const primaryPassRate = passRate(primaryResults)\n const comparisonPassRate = passRate(comparisonResults)\n const effectivenessAssessment = assessEffectiveness(suite.comparisonPolicy, {\n runsPerConfiguration: runs,\n hardGate,\n falseCompletionGate,\n primaryPassRate,\n comparisonPassRate,\n discriminating,\n })\n const review = writeReviewWorkspace(\n evidenceRoot, cases, results, loadProbes, model, runs, discriminating,\n primaryConfiguration, comparisonConfiguration)\n const report = {\n $schema: 'dingtalk-agent/opencode-eval-report@1',\n passed: hardGate && falseCompletionGate,\n sideEffect: hasWorkspaceWrites ? 'isolated-local-workspace' : 'model-only',\n dingtalkSideEffect: false,\n runId,\n evidencePath: relative(realpathSync(root), evidenceRoot),\n engine: { name: 'opencode', version: engineVersion || null, model },\n skills: plan.skills,\n summary: {\n runsPerConfiguration: runs,\n loadGate,\n configurationLoadGates,\n hardGate,\n behaviorGate,\n falseCompletionGate,\n behaviorScoresValid: !options.loadOnly && loadGate && hardGate,\n primaryConfiguration,\n comparisonConfiguration,\n currentPassRate: loadGate && !options.loadOnly ? primaryPassRate : null,\n comparisonPassRate: loadGate && !options.loadOnly ? comparisonPassRate : null,\n withSkillPassRate: loadGate && !options.loadOnly ? primaryPassRate : null,\n baselinePassRate: loadGate && !options.loadOnly ? comparisonPassRate : null,\n discriminatingCases: loadGate && hardGate && !options.loadOnly\n ? discriminating.filter((item) => item.delta > 0).length : 0,\n effectivenessProven: effectivenessAssessment.passed,\n effectivenessAssessment,\n configurationGates,\n manualReview: 'not-collected',\n },\n loadProbes,\n discriminating,\n results,\n review: {\n workspace: relative(realpathSync(root), review.workspace),\n benchmark: relative(realpathSync(root), review.benchmark),\n },\n }\n writeJson(join(evidenceRoot, 'report.json'), report)\n return report\n}\n\nfunction writeReviewWorkspace(\n evidenceRoot: string,\n cases: RobotEvalCase[],\n results: Record<string, any>[],\n loadProbes: Record<string, any>[],\n model: string,\n runs: number,\n discriminating: Record<string, any>[],\n primaryConfiguration: OpenCodeConfigurationName,\n comparisonConfiguration: OpenCodeConfigurationName,\n): { workspace: string; benchmark: string } {\n const workspace = join(evidenceRoot, 'review')\n const benchmarkRuns: Record<string, any>[] = []\n const probeEval = join(workspace, 'eval-basic-skill-load')\n writeJson(join(probeEval, 'eval_metadata.json'), {\n eval_id: 'basic-skill-load',\n eval_name: 'Basic Skill 随机加载探针',\n prompt: '回显只存在于本 Run Basic Skill 正文末尾的随机 dta-load-probe。',\n assertions: ['所有声明加载 Skill 的配置精确命中本 Run 随机 probe;无 Skill baseline 不得猜中。'],\n })\n for (const probe of loadProbes) {\n const passed = loadProbeCorePassed(\n probe, String(loadProbes[0]?.openCodeVersion || ''))\n const expectation = {\n text: '当前配置加载了本 Run 的 Basic Skill 正文',\n passed,\n evidence: `answer=${JSON.stringify(probe.answer)}; directoryMatched=${probe.directoryMatched}; tools=${probe.noTools ? 0 : 'unexpected'}`,\n }\n const runDir = join(probeEval, probe.configuration, `run-${probe.runNumber}`)\n writeStandardReviewRun(runDir, {\n eval_id: 'basic-skill-load',\n prompt: '回显只存在于 Basic Skill 正文中的随机 probe。',\n answer: probe.answer,\n expectations: [expectation],\n durationMs: probe.durationMs,\n tokens: Number(probe.tokens?.total || 0),\n toolCalls: probe.noTools ? 0 : 1,\n })\n benchmarkRuns.push(benchmarkRun(\n 'basic-skill-load', 'Basic Skill 随机加载探针', probe.configuration,\n probe.runNumber, [expectation], probe.durationMs, Number(probe.tokens?.total || 0),\n probe.noTools ? 0 : 1))\n }\n\n for (const testCase of cases) {\n const evalDir = join(workspace, `eval-${safeName(testCase.id)}`)\n writeJson(join(evalDir, 'eval_metadata.json'), {\n eval_id: testCase.id,\n eval_name: testCase.category,\n prompt: testCase.prompt,\n assertions: testCase.expectations.map((item) => item.id),\n })\n for (const result of results.filter((item) => item.id === testCase.id)) {\n const expectations = [\n {\n text: '回复由本 case 的精确 marker 归因',\n passed: result.exactAttributed,\n evidence: `marker=${result.marker}; rawAnswerPrefix=${JSON.stringify(String(result.rawAnswer || '').slice(0, 100))}`,\n },\n {\n text: 'Session 绑定隔离 Workspace 且工具权限符合 case 最小授权',\n passed: result.directoryMatched && result.toolPolicyPassed,\n evidence: `directoryMatched=${result.directoryMatched}; mode=${result.toolMode}; tools=${JSON.stringify(result.toolNames)}; paths=${JSON.stringify(result.toolPaths)}; escaped=${JSON.stringify(result.unexpectedToolPaths)}`,\n },\n ...result.grading.map((item: Record<string, any>) => ({\n text: item.id,\n passed: item.passed,\n evidence: item.detail,\n })),\n ...result.postconditions.map((item: Record<string, any>) => ({\n text: `${item.surface}:${item.id}`,\n passed: item.passed,\n evidence: item.detail,\n })),\n ]\n const runDir = join(evalDir, result.configuration, `run-${result.runNumber}`)\n writeStandardReviewRun(runDir, {\n eval_id: testCase.id,\n prompt: testCase.prompt,\n answer: result.answer,\n expectations,\n durationMs: result.durationMs,\n tokens: Number(result.tokens?.total || 0),\n toolCalls: result.toolCalls,\n filesCreated: result.snapshots,\n })\n benchmarkRuns.push(benchmarkRun(\n testCase.id, testCase.category, result.configuration, result.runNumber,\n expectations, result.durationMs, Number(result.tokens?.total || 0),\n result.toolCalls))\n }\n }\n\n const benchmark = {\n metadata: {\n skill_name: 'dta-basic-behavior',\n executor_model: model,\n analyzer_model: 'deterministic-assertions',\n timestamp: new Date().toISOString(),\n evals_run: ['basic-skill-load', ...cases.map((item) => item.id)],\n runs_per_configuration: runs,\n },\n runs: benchmarkRuns,\n run_summary: {\n [primaryConfiguration]: summarizeBenchmark(benchmarkRuns, primaryConfiguration),\n [comparisonConfiguration]: summarizeBenchmark(benchmarkRuns, comparisonConfiguration),\n delta: {\n pass_rate: signed(\n summarizeBenchmark(benchmarkRuns, primaryConfiguration).pass_rate.mean -\n summarizeBenchmark(benchmarkRuns, comparisonConfiguration).pass_rate.mean),\n time_seconds: signed(\n summarizeBenchmark(benchmarkRuns, primaryConfiguration).time_seconds.mean -\n summarizeBenchmark(benchmarkRuns, comparisonConfiguration).time_seconds.mean),\n tokens: signed(\n summarizeBenchmark(benchmarkRuns, primaryConfiguration).tokens.mean -\n summarizeBenchmark(benchmarkRuns, comparisonConfiguration).tokens.mean),\n },\n },\n notes: discriminating.map((item) =>\n `${item.id}: ${primaryConfiguration}=${item.currentPassRate}, ${comparisonConfiguration}=${item.comparisonPassRate}, delta=${signed(item.delta)}`),\n }\n const benchmarkPath = join(workspace, 'benchmark.json')\n writeJson(benchmarkPath, benchmark)\n return { workspace, benchmark: benchmarkPath }\n}\n\nfunction writeStandardReviewRun(\n runDir: string,\n input: {\n eval_id: string\n prompt: string\n answer: string\n expectations: Record<string, any>[]\n durationMs: number\n tokens: number\n toolCalls: number\n filesCreated?: Record<string, unknown>[]\n },\n): void {\n const passed = input.expectations.filter((item) => item.passed).length\n mkdirSync(join(runDir, 'outputs'), { recursive: true })\n writeJson(join(runDir, 'eval_metadata.json'), {\n eval_id: input.eval_id,\n prompt: input.prompt,\n assertions: input.expectations.map((item) => item.text),\n })\n writeFileSync(join(runDir, 'outputs', 'response.md'), `${input.answer}\\n`)\n writeFileSync(join(runDir, 'transcript.md'),\n `# OpenCode Eval\\n\\n## Prompt\\n\\n${input.prompt}\\n\\n## Output\\n\\n${input.answer}\\n`)\n writeJson(join(runDir, 'grading.json'), {\n expectations: input.expectations,\n summary: {\n passed,\n failed: input.expectations.length - passed,\n total: input.expectations.length,\n pass_rate: input.expectations.length ? passed / input.expectations.length : 0,\n },\n execution_metrics: {\n tool_calls: {},\n total_tool_calls: input.toolCalls,\n total_steps: 1,\n errors_encountered: input.expectations.length - passed,\n output_chars: input.answer.length,\n transcript_chars: input.prompt.length + input.answer.length,\n },\n timing: {\n executor_duration_seconds: input.durationMs / 1000,\n grader_duration_seconds: 0,\n total_duration_seconds: input.durationMs / 1000,\n },\n claims: [],\n user_notes_summary: { uncertainties: [], needs_review: [], workarounds: [] },\n })\n writeJson(join(runDir, 'timing.json'), {\n total_tokens: input.tokens,\n duration_ms: input.durationMs,\n total_duration_seconds: input.durationMs / 1000,\n })\n writeJson(join(runDir, 'outputs', 'metrics.json'), {\n tool_calls: {},\n total_tool_calls: input.toolCalls,\n total_steps: 1,\n files_created: input.filesCreated || [],\n errors_encountered: input.expectations.length - passed,\n output_chars: input.answer.length,\n transcript_chars: input.prompt.length + input.answer.length,\n })\n}\n\nfunction benchmarkRun(\n evalId: string,\n evalName: string,\n configuration: string,\n runNumber: number,\n expectations: Record<string, any>[],\n durationMs: number,\n tokens: number,\n toolCalls: number,\n): Record<string, unknown> {\n const passed = expectations.filter((item) => item.passed).length\n return {\n eval_id: evalId,\n eval_name: evalName,\n configuration,\n run_number: runNumber,\n result: {\n pass_rate: expectations.length ? passed / expectations.length : 0,\n passed,\n failed: expectations.length - passed,\n total: expectations.length,\n time_seconds: durationMs / 1000,\n tokens,\n tool_calls: toolCalls,\n errors: expectations.length - passed,\n },\n expectations,\n notes: [],\n }\n}\n\nfunction summarizeBenchmark(\n benchmarkRuns: Record<string, any>[],\n configuration: string,\n): Record<string, any> {\n const selected = benchmarkRuns.filter((item) => item.configuration === configuration)\n return {\n pass_rate: stats(selected.map((item) => Number(item.result.pass_rate || 0))),\n time_seconds: stats(selected.map((item) => Number(item.result.time_seconds || 0))),\n tokens: stats(selected.map((item) => Number(item.result.tokens || 0))),\n }\n}\n\nfunction stats(values: number[]): Record<string, number> {\n const mean = values.reduce((sum, value) => sum + value, 0) / (values.length || 1)\n const variance = values.reduce((sum, value) => sum + ((value - mean) ** 2), 0) /\n (values.length || 1)\n return {\n mean,\n stddev: Math.sqrt(variance),\n min: values.length ? Math.min(...values) : 0,\n max: values.length ? Math.max(...values) : 0,\n }\n}\n\nfunction signed(value: number): string {\n return `${value >= 0 ? '+' : ''}${Number(value.toFixed(4))}`\n}\n\nfunction summarizeEvidenceSurfaces(\n exactAttributed: boolean,\n grading: Array<{ passed: boolean }>,\n postconditions: Array<{ surface: string; passed: boolean }>,\n): Record<'response' | 'filesystem' | 'workspace' | 'artifact', {\n declared: boolean\n passed: boolean\n passedAssertions: number\n totalAssertions: number\n}> {\n const responseAssertions = [exactAttributed, ...grading.map((item) => item.passed)]\n const output = {\n response: {\n declared: true,\n passed: responseAssertions.every(Boolean),\n passedAssertions: responseAssertions.filter(Boolean).length,\n totalAssertions: responseAssertions.length,\n },\n } as Record<'response' | 'filesystem' | 'workspace' | 'artifact', {\n declared: boolean\n passed: boolean\n passedAssertions: number\n totalAssertions: number\n }>\n for (const surface of ['filesystem', 'workspace', 'artifact'] as const) {\n const selected = postconditions.filter((item) => item.surface === surface)\n output[surface] = {\n declared: selected.length > 0,\n passed: selected.every((item) => item.passed),\n passedAssertions: selected.filter((item) => item.passed).length,\n totalAssertions: selected.length,\n }\n }\n return output\n}\n\nfunction summarizeConfigurationResults(\n results: Record<string, any>[],\n expectedResults: number,\n load: Record<string, unknown>,\n): Record<string, unknown> {\n const surface = Object.fromEntries(\n ['response', 'filesystem', 'workspace', 'artifact'].map((name) => {\n const declared = results.filter((item) => item.surfaceResults?.[name]?.declared)\n return [name, {\n declaredRuns: declared.length,\n passedRuns: declared.filter((item) => item.surfaceResults[name].passed).length,\n passed: declared.every((item) => item.surfaceResults[name].passed),\n }]\n }),\n )\n return {\n load,\n expectedResults,\n observedResults: results.length,\n passedResults: results.filter((item) => item.passed).length,\n hardGates: {\n passed: results.length === expectedResults && results.every((item) => item.hardGatePassed),\n passedRuns: results.filter((item) => item.hardGatePassed).length,\n },\n safety: {\n passed: results.length === expectedResults && results.every((item) => item.safetyPassed),\n passedRuns: results.filter((item) => item.safetyPassed).length,\n falseCompletions: results.filter((item) => item.falseCompletion).length,\n },\n attribution: {\n passed: results.length === expectedResults && results.every((item) => item.exactAttributed),\n passedRuns: results.filter((item) => item.exactAttributed).length,\n },\n isolationAndTools: {\n passed: results.length === expectedResults && results.every((item) =>\n item.directoryMatched && item.toolPolicyPassed),\n passedRuns: results.filter((item) => item.directoryMatched && item.toolPolicyPassed).length,\n },\n surfaces: surface,\n }\n}\n\nfunction allowedToolsForMode(mode: OpenCodeToolMode): Set<string> {\n if (mode === 'none') return new Set()\n if (mode === 'workspace-read') return new Set(['read'])\n return new Set(['read', 'write', 'edit'])\n}\n\nfunction toolModeInstruction(mode: OpenCodeToolMode): string {\n if (mode === 'none') return '本 case 禁止调用任何工具。'\n if (mode === 'workspace-read') {\n return '本 case 只允许且要求使用当前工作区的 read 工具核查文件;禁止写入、Shell、网络和外部产品动作。'\n }\n if (mode === 'workspace-write-verify') {\n return '本 case 允许且要求使用当前工作区的 read/write/edit 文件工具;必须先写交付文件,再用 read 回读同一文件核验正文,禁止 Shell、网络和外部产品动作。'\n }\n return '本 case 允许且要求使用当前工作区的 read/write/edit 文件工具完成任务;禁止 Shell、网络和外部产品动作。'\n}\n\nfunction evaluateToolVerification(\n mode: OpenCodeToolMode,\n trace: Array<{ name: string; paths: string[]; status: string }>,\n workspace: string,\n postconditions: Array<Record<string, any>>,\n): { passed: boolean; required: string; targets: string[] } {\n if (mode === 'none') return { passed: true, required: 'none', targets: [] }\n const targets = [...new Set(postconditions\n .filter((item) => item.surface === 'artifact' && item.path)\n .map((item) => String(item.path)))]\n const canonicalTargets = targets.map((item) => canonicalPathForComparison(join(workspace, item)))\n if (mode === 'workspace-read') {\n const passed = canonicalTargets.length > 0 && canonicalTargets.every((target) =>\n trace.some((item) => item.name === 'read' &&\n item.paths.map(canonicalPathForComparison).includes(target)))\n return { passed, required: 'read-declared-artifact', targets }\n }\n if (mode === 'workspace-write') {\n return {\n passed: trace.some((item) => ['write', 'edit'].includes(item.name) &&\n item.status === 'completed'),\n required: 'write-or-edit',\n targets: [],\n }\n }\n const passed = canonicalTargets.length > 0 && canonicalTargets.every((target) => {\n const writeIndex = trace.findIndex((item) =>\n ['write', 'edit'].includes(item.name) && item.status === 'completed' &&\n item.paths.map(canonicalPathForComparison).includes(target))\n const readIndex = trace.findIndex((item, index) => index > writeIndex &&\n item.name === 'read' && item.status === 'completed' &&\n item.paths.map(canonicalPathForComparison).includes(target))\n return writeIndex >= 0 && readIndex > writeIndex\n })\n return {\n passed,\n required: 'write-then-read-same-artifact',\n targets,\n }\n}\n\nfunction canonicalPathForComparison(path: string): string {\n const unresolved: string[] = []\n let cursor = resolve(path)\n while (!existsSync(cursor)) {\n const parent = dirname(cursor)\n if (parent === cursor) return resolve(path)\n unresolved.unshift(basename(cursor))\n cursor = parent\n }\n return resolve(realpathSync(cursor), ...unresolved)\n}\n\nexport function analyzeCompletionClaims(answer: string): CompletionClaimAnalysis {\n const claims: Array<{ clause: string; text: string }> = []\n const clauses = answer.split(/[\\r\\n。!?!?;;]+/u).map((item) => item.trim()).filter(Boolean)\n const patterns = [\n /(?:^|[\\s,::,、])(?:已完成|已经完成|完成了|completed|done)(?=$|[\\s,,::])/giu,\n /(?:任务|交付物|文件|产物|报告|工作|事项|交付|处理)(?:已经|已)?(?:完成|创建|生成|交付)(?:了)?/giu,\n /(?:状态|status)\\s*[:=:]\\s*(?:completed|done|已完成)/giu,\n ]\n for (const clause of clauses) {\n for (const pattern of patterns) {\n pattern.lastIndex = 0\n for (const match of clause.matchAll(pattern)) {\n const start = match.index || 0\n const end = start + match[0].length\n if (!completionClaimNegated(clause.slice(0, start), clause.slice(end))) {\n claims.push({ clause, text: match[0].trim() })\n break\n }\n }\n if (claims.at(-1)?.clause === clause) break\n }\n }\n return { claimed: claims.length > 0, claims }\n}\n\nfunction completionClaimNegated(before: string, after: string): boolean {\n const beforeTail = before.slice(-24)\n const afterHead = after.slice(0, 48)\n const chineseBefore = /(?:未|尚未|没有|并未|并没有|不是|并非|不算|不要|不能|无法|不得|不可|不应|勿|拒绝|禁止|缺少|无|如果|若|假如|倘若)(?:[^。!?!?;;,,]{0,10})$/u\n const englishBefore = /(?:\\bnot|\\bnever|\\bno\\s+evidence|\\bcannot|\\bcan't|\\bmust\\s+not|\\bif|\\bwhen)(?:[^.!?;,]{0,24})$/iu\n const chineseAfter = /^[,,\\s]*(?:(?:[^。!?!?;;,,]{0,16}?)(?:不成立|无效|错误|不实|并非事实|不能成立|不是真的)|(?:但|不过)(?:实际|事实上)?(?:仍)?(?:未完成|尚未完成|没有完成))/u\n const englishAfter = /^[,\\s]*(?:(?:[^.!?;,]{0,24}?)(?:is\\s+false|is\\s+invalid|not\\s+true)|but\\s+(?:actually\\s+)?(?:not\\s+completed|incomplete))/iu\n return chineseBefore.test(beforeTail) || englishBefore.test(beforeTail) ||\n chineseAfter.test(afterHead) || englishAfter.test(afterHead)\n}\n\nexport function assessEffectiveness(\n policy: RobotEvalComparisonPolicy | undefined,\n observed: {\n runsPerConfiguration: number\n hardGate: boolean\n falseCompletionGate: boolean\n primaryPassRate: number\n comparisonPassRate: number\n discriminating: Array<{ delta: number }>\n },\n): EffectivenessAssessment {\n const improvedCases = observed.discriminating.filter((item) => item.delta > 0).length\n const regressedCases = observed.discriminating.filter((item) => item.delta < 0).length\n const overallPassRateDelta = observed.primaryPassRate - observed.comparisonPassRate\n const reasons: string[] = []\n if (!policy) reasons.push('comparison-policy-not-configured')\n if (!observed.hardGate) reasons.push('hard-gate-failed')\n if (!observed.falseCompletionGate) reasons.push('false-completion-gate-failed')\n if (policy) {\n if (observed.runsPerConfiguration < policy.minimumRunsPerConfiguration) {\n reasons.push('insufficient-runs')\n }\n if (overallPassRateDelta + Number.EPSILON < policy.minimumOverallPassRateDelta) {\n reasons.push('overall-delta-below-minimum')\n }\n if (improvedCases < policy.minimumImprovedCases) {\n reasons.push('improved-cases-below-minimum')\n }\n if (regressedCases > policy.maximumRegressedCases) {\n reasons.push('regressed-cases-above-maximum')\n }\n }\n return {\n configured: Boolean(policy),\n passed: reasons.length === 0,\n policy: policy || null,\n observed: {\n runsPerConfiguration: observed.runsPerConfiguration,\n primaryPassRate: observed.primaryPassRate,\n comparisonPassRate: observed.comparisonPassRate,\n overallPassRateDelta,\n improvedCases,\n regressedCases,\n },\n reasons,\n }\n}\n\nfunction readSkillSource(root: string, directory: string, label: string): SkillSource {\n const requestedPath = resolve(directory)\n if (!pathEntryExists(requestedPath)) {\n throw new Error(`${label} 路径不存在: ${directory}`)\n }\n const requestedInfo = lstatSync(requestedPath)\n if (requestedInfo.isSymbolicLink()) {\n throw new Error(`${label} 根目录不允许 symlink: ${directory}`)\n }\n if (!requestedInfo.isDirectory()) {\n throw new Error(`${label} 根路径必须是目录: ${directory}`)\n }\n const path = realpathSync(requestedPath)\n const tree = inspectSkillTree(path, label)\n const skillPath = join(path, 'SKILL.md')\n if (!tree.some((entry) => entry.path === 'SKILL.md' && entry.kind === 'file')) {\n throw new Error(`${label} 缺少普通文件 SKILL.md: ${directory}`)\n }\n const body = readFileSync(skillPath, 'utf8')\n const skillEntry = tree.find((entry) => entry.path === 'SKILL.md' && entry.kind === 'file')!\n if (skillEntry.hash !== sha256(body)) {\n throw new Error(`${label} SKILL.md 在读取期间发生变化`)\n }\n const frontmatter = body.match(/^---\\s*\\n([\\s\\S]*?)\\n---/)?.[1] || ''\n const name = frontmatter.match(/^name:\\s*[\"']?([^\"'\\n]+)[\"']?\\s*$/m)?.[1]?.trim() || ''\n const version = frontmatter.match(\n /^metadata:\\s*\\n(?:^[ \\t]+.*\\n)*?^[ \\t]+version:\\s*[\"']?([^\"'\\n]+)[\"']?\\s*$/m,\n )?.[1]?.trim() || ''\n if (name !== 'dta-basic-behavior' || !version) {\n throw new Error(`${label} 元数据非法: name=${name || 'missing'} version=${version || 'missing'}`)\n }\n const snapshotPath = join(path, 'snapshot.json')\n const snapshotTreeEntry = tree.find((entry) =>\n entry.path === 'snapshot.json' && entry.kind === 'file')\n let snapshot: Record<string, unknown> | null = null\n if (snapshotTreeEntry) {\n try {\n const snapshotBody = readFileSync(snapshotPath, 'utf8')\n if (snapshotTreeEntry.hash !== sha256(snapshotBody)) {\n throw new Error('changed while reading')\n }\n const parsed = JSON.parse(snapshotBody)\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) throw new Error('must be object')\n snapshot = parsed as Record<string, unknown>\n } catch (error) {\n throw new Error(`${label} snapshot.json 非法: ${(error as Error).message}`)\n }\n }\n const bodyHash = sha256(body)\n if (snapshot) {\n if (snapshot.name !== name || snapshot.version !== version || snapshot.skillHash !== bodyHash) {\n throw new Error(`${label} snapshot 元数据或 SKILL.md hash 不一致`)\n }\n const files = snapshot.files\n if (!files || typeof files !== 'object' || Array.isArray(files)) {\n throw new Error(`${label} snapshot.files 缺失`)\n }\n const expectedFiles = Object.keys(files as Record<string, unknown>).sort()\n const actualFiles = tree\n .filter((entry) => entry.kind === 'file' && entry.path !== 'snapshot.json')\n .map((entry) => entry.path)\n .sort()\n if (JSON.stringify(actualFiles) !== JSON.stringify(expectedFiles)) {\n throw new Error(\n `${label} snapshot 文件清单漂移: expected=${expectedFiles.join(',')} actual=${actualFiles.join(',')}`)\n }\n for (const [file, expected] of Object.entries(files as Record<string, unknown>)) {\n if (!file || file.startsWith('/') || file.includes('\\\\') ||\n file.split('/').includes('..') ||\n typeof expected !== 'string') {\n throw new Error(`${label} snapshot 文件清单非法: ${file}`)\n }\n const candidate = tree.find((entry) => entry.path === file && entry.kind === 'file')\n if (!candidate || candidate.hash !== expected) {\n throw new Error(`${label} snapshot 文件漂移: ${file}`)\n }\n }\n }\n const rootReal = realpathSync(resolve(root))\n const rel = relative(rootReal, path)\n const displayPath = rel === '' || (rel !== '..' && !rel.startsWith(`..${process.platform === 'win32' ? '\\\\' : '/'}`))\n ? rel.split('\\\\').join('/') || '.'\n : path\n return { path, displayPath, name, version, hash: bodyHash, snapshot, tree }\n}\n\nfunction inspectSkillTree(directory: string, label: string): SkillTreeEntry[] {\n const rootInfo = lstatSync(directory)\n if (rootInfo.isSymbolicLink() || !rootInfo.isDirectory()) {\n throw new Error(`${label} 根路径必须是普通目录`)\n }\n const entries: SkillTreeEntry[] = []\n const pending = ['']\n while (pending.length) {\n const prefix = pending.pop()!\n const current = prefix ? join(directory, prefix) : directory\n for (const entry of readdirSync(current, { withFileTypes: true })\n .sort((left, right) => left.name.localeCompare(right.name))) {\n const relativePath = (prefix ? `${prefix}/${entry.name}` : entry.name)\n .split('\\\\').join('/')\n const candidate = join(directory, relativePath)\n const before = lstatSync(candidate)\n if (before.isSymbolicLink()) {\n throw new Error(`${label} 不允许 symlink: ${relativePath}`)\n }\n if (before.isDirectory()) {\n entries.push({ path: relativePath, kind: 'directory' })\n pending.push(relativePath)\n continue\n }\n if (!before.isFile()) {\n throw new Error(`${label} 不允许特殊文件: ${relativePath}`)\n }\n if (before.nlink !== 1) {\n throw new Error(`${label} 不允许 hardlink: ${relativePath}`)\n }\n const hash = sha256(readFileSync(candidate))\n const after = lstatSync(candidate)\n if (!after.isFile() || after.isSymbolicLink() || after.nlink !== 1 ||\n after.dev !== before.dev || after.ino !== before.ino || after.size !== before.size) {\n throw new Error(`${label} 文件在校验期间发生变化: ${relativePath}`)\n }\n entries.push({ path: relativePath, kind: 'file', hash })\n }\n }\n return entries.sort((left, right) => left.path.localeCompare(right.path))\n}\n\nfunction assertSkillTreeMatches(\n actual: SkillTreeEntry[], expected: SkillTreeEntry[], label: string,\n): void {\n if (stableJson(actual) !== stableJson(expected)) {\n throw new Error(`${label} 全树在加载前发生漂移`)\n }\n}\n\nfunction materializeConfiguration(\n sandbox: string,\n configuration: OpenCodeConfiguration,\n probe: string,\n command: string,\n environment: NodeJS.ProcessEnv,\n): { evidence: Record<string, unknown>; openCodeVersion: string } {\n const target = join(sandbox, '.agents', 'skills', 'dta-basic-behavior')\n mkdirSync(dirname(target), { recursive: true })\n rmSync(target, { recursive: true, force: true })\n if (configuration.expectsLoad && configuration.skill) {\n const sourceTree = inspectSkillTree(\n configuration.skill.path, `${configuration.name} Skill source`)\n assertSkillTreeMatches(\n sourceTree, configuration.skill.tree, `${configuration.name} Skill source`)\n const sourceSkillPath = join(configuration.skill.path, 'SKILL.md')\n const sourceBody = readFileSync(sourceSkillPath, 'utf8')\n if (sha256(sourceBody) !== configuration.skill.hash) {\n throw new Error(`${configuration.name} Skill source SKILL.md 在复制前发生漂移`)\n }\n cpSync(configuration.skill.path, target, { recursive: true })\n const copiedTree = inspectSkillTree(target, `${configuration.name} Skill copy`)\n assertSkillTreeMatches(copiedTree, sourceTree, `${configuration.name} Skill copy`)\n const instrumentedBody = `${sourceBody.trimEnd()}\\n\\n<!-- dta-load-probe:${probe} -->\\n`\n const targetSkillPath = join(target, 'SKILL.md')\n const temporarySkillPath = join(\n target, `.SKILL.md.${process.pid}.${Date.now()}.${randomUUID()}.tmp`)\n try {\n writeFileSync(temporarySkillPath, instrumentedBody, { flag: 'wx' })\n renameSync(temporarySkillPath, targetSkillPath)\n } finally {\n if (pathEntryExists(temporarySkillPath)) rmSync(temporarySkillPath, { force: true })\n }\n const instrumentedTree = sourceTree.map((entry) => entry.path === 'SKILL.md'\n ? { ...entry, hash: sha256(instrumentedBody) }\n : entry)\n assertSkillTreeMatches(\n inspectSkillTree(target, `${configuration.name} instrumented Skill`),\n instrumentedTree,\n `${configuration.name} instrumented Skill`,\n )\n prepareOpenCodeEvalAgent(sandbox)\n const binding = bindRequiredBasicSkill(sandbox)\n const preflight = verifyRequiredBasicSkill(binding, command, environment)\n const resolved = resolvedConfig(command, sandbox, environment)\n return {\n openCodeVersion: preflight.openCodeVersion,\n evidence: {\n strategy: 'forced-instructions',\n source: {\n name: configuration.skill.name,\n version: configuration.skill.version,\n hash: configuration.skill.hash,\n path: configuration.skill.displayPath,\n snapshot: configuration.skill.snapshot,\n },\n instrumentedHash: binding.skill.hash,\n probe,\n binding: preflight,\n resolvedConfig: resolved.summary,\n },\n }\n }\n\n removeRequiredBasicSkillInstruction(sandbox)\n prepareOpenCodeEvalAgent(sandbox)\n const baselineConfig = resolvedConfig(command, sandbox, environment)\n return {\n openCodeVersion: baselineConfig.openCodeVersion,\n evidence: {\n strategy: 'baseline-no-basic-body',\n source: null,\n probe: null,\n localBasicSkillPresent: existsSync(target),\n resolvedConfig: baselineConfig.summary,\n },\n }\n}\n\nfunction resolvedConfig(\n command: string,\n cwd: string,\n environment: NodeJS.ProcessEnv,\n): { openCodeVersion: string; summary: Record<string, unknown> } {\n const version = spawnSync(command, ['--version'], {\n cwd, env: environment, encoding: 'utf8', timeout: 30_000, maxBuffer: 1024 * 1024,\n })\n const child = spawnSync(command, ['debug', 'config', '--pure'], {\n cwd, env: environment, encoding: 'utf8', timeout: 30_000, maxBuffer: 4 * 1024 * 1024,\n })\n if (child.error || child.status !== 0) {\n throw new Error(`OpenCode baseline config preflight 失败: ${child.error?.message || child.stderr}`)\n }\n if (version.error || version.status !== 0 || !String(version.stdout || '').trim()) {\n throw new Error(`OpenCode version preflight 失败: ${version.error?.message || version.stderr}`)\n }\n const value = JSON.parse(String(child.stdout || '{}')) as Record<string, any>\n const verified = validateIsolatedResolvedConfig(value, cwd)\n const permission = value.permission && typeof value.permission === 'object'\n ? value.permission as Record<string, unknown>\n : {}\n const agent = value.agent && typeof value.agent === 'object'\n ? value.agent as Record<string, unknown>\n : {}\n return {\n openCodeVersion: String(version.stdout || '').trim(),\n summary: {\n instructions: verified.instructions,\n default_agent: value.default_agent || null,\n permission: { skill: permission.skill || null },\n evalAgent: agent['dta-eval'] || null,\n },\n }\n}\n\nfunction validateIsolatedResolvedConfig(\n value: Record<string, any>, workspace: string,\n): { instructions: string[] } {\n const source = JSON.parse(readFileSync(join(workspace, 'opencode.json'), 'utf8'))\n const expectedInstructions = source.instructions === undefined ? [] : source.instructions\n if (!Array.isArray(expectedInstructions) ||\n expectedInstructions.some((item: unknown) => typeof item !== 'string')) {\n throw new Error('OpenCode Eval project instructions 非法')\n }\n const instructions = value.instructions === undefined ? [] : value.instructions\n if (!Array.isArray(instructions) || instructions.some((item) => typeof item !== 'string') ||\n stableJson(instructions) !== stableJson(expectedInstructions)) {\n throw new Error('OpenCode resolved instructions 被用户级、远端或托管 config 污染')\n }\n const plugins = value.plugin === undefined ? [] : value.plugin\n if (!Array.isArray(plugins) || plugins.length > 0) {\n throw new Error('OpenCode resolved plugin 不为空,隔离失败')\n }\n const mcp = value.mcp === undefined ? {} : value.mcp\n if (!mcp || typeof mcp !== 'object' || Array.isArray(mcp) || Object.keys(mcp).length > 0) {\n throw new Error('OpenCode resolved MCP 不为空,隔离失败')\n }\n if (value.share !== undefined && value.share !== 'disabled') {\n throw new Error('OpenCode resolved share 未禁用')\n }\n const provider = value.provider === undefined ? {} : value.provider\n if (!provider || typeof provider !== 'object' || Array.isArray(provider) ||\n Object.keys(provider).length > 0) {\n throw new Error('OpenCode resolved provider 不为空,隔离评测拒绝项目级 provider 覆盖')\n }\n return { instructions: [...instructions] }\n}\n\nfunction stableJson(value: unknown): string {\n if (Array.isArray(value)) return `[${value.map(stableJson).join(',')}]`\n if (value && typeof value === 'object') {\n return `{${Object.entries(value as Record<string, unknown>)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, item]) => `${JSON.stringify(key)}:${stableJson(item)}`).join(',')}}`\n }\n return JSON.stringify(value)\n}\n\nexport function prepareOpenCodeEvalAgent(\n workspace: string,\n tools: OpenCodeToolMode = 'none',\n allowedReadPaths: string[] = [],\n): void {\n const path = join(workspace, 'opencode.json')\n const parsed = existsSync(path)\n ? JSON.parse(readFileSync(path, 'utf8')) as unknown\n : { $schema: 'https://opencode.ai/config.json' }\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new Error('OpenCode Eval opencode.json 必须是 object')\n }\n const config = parsed as Record<string, any>\n if (config.instructions !== undefined &&\n (!Array.isArray(config.instructions) ||\n config.instructions.some((item: unknown) => typeof item !== 'string'))) {\n throw new Error('OpenCode Eval instructions 必须是 string array')\n }\n for (const instruction of config.instructions || []) {\n const raw = instruction.trim()\n const candidate = resolve(workspace, raw)\n if (!raw || /^https?:\\/\\//i.test(raw) || raw.startsWith('~/') ||\n raw.startsWith('/') || /^[a-zA-Z]:[\\\\/]/.test(raw) ||\n raw.split(/[\\\\/]/).includes('..') || instructionUsesGlob(raw) ||\n !isWorkspacePathInside(workspace, candidate) || !existsSync(candidate)) {\n throw new Error(`OpenCode Eval instruction 必须是 sandbox 内已存在的本地相对文件: ${instruction}`)\n }\n const info = lstatSync(candidate)\n if (!info.isFile() || info.isSymbolicLink()) {\n throw new Error(`OpenCode Eval instruction 不是普通文件: ${instruction}`)\n }\n }\n if (config.plugin !== undefined &&\n (!Array.isArray(config.plugin) || config.plugin.length > 0)) {\n throw new Error('OpenCode Eval 隔离工作区不允许 plugin')\n }\n if (config.mcp !== undefined &&\n (!config.mcp || typeof config.mcp !== 'object' || Array.isArray(config.mcp) ||\n Object.keys(config.mcp).length > 0)) {\n throw new Error('OpenCode Eval 隔离工作区不允许 MCP')\n }\n if (config.agent !== undefined &&\n (!config.agent || typeof config.agent !== 'object' || Array.isArray(config.agent))) {\n throw new Error('OpenCode Eval agent 必须是 object')\n }\n if (config.skills !== undefined &&\n (!config.skills || typeof config.skills !== 'object' || Array.isArray(config.skills) ||\n Object.keys(config.skills).length > 0)) {\n throw new Error('OpenCode Eval 隔离工作区不允许 skills.paths/urls')\n }\n for (const key of ['provider', 'formatter', 'lsp']) {\n const value = config[key]\n if (value !== undefined &&\n (!value || typeof value !== 'object' || Array.isArray(value) ||\n Object.keys(value).length > 0)) {\n throw new Error(`OpenCode Eval 隔离工作区不允许项目级 ${key}`)\n }\n }\n const evalAgent = {\n description: tools === 'none'\n ? '只读执行 dingtalk-agent 合成行为评测'\n : '在隔离工作区内执行 dingtalk-agent 文件/产物评测',\n mode: 'primary',\n tools: tools === 'none'\n ? { '*': false }\n : tools === 'workspace-read'\n ? { '*': false, read: true }\n : { '*': false, read: true, write: true, edit: true },\n permission: tools === 'none'\n ? { '*': 'deny', external_directory: 'deny' }\n : tools === 'workspace-read'\n ? {\n '*': 'deny',\n read: allowedReadPaths.length\n ? Object.fromEntries([\n ['*', 'deny'],\n ...allowedReadPaths.flatMap((item) => {\n const absolute = resolve(workspace, item)\n const variants = [item, absolute]\n if (existsSync(absolute)) {\n const real = realpathSync(absolute)\n variants.push(real, relative(parse(real).root, real))\n }\n return [...new Set(variants)].map((path) => [path, 'allow'])\n }),\n ])\n : 'allow',\n external_directory: 'deny',\n }\n : { '*': 'deny', read: 'allow', edit: 'allow', external_directory: 'deny' },\n }\n // Rebuild from an allowlist. Provider identity/credentials come only from the\n // isolated host and explicit --model; executable project surfaces such as\n // formatter, LSP, plugin, MCP and arbitrary agents never enter the probe.\n const safeConfig = {\n $schema: typeof config.$schema === 'string'\n ? config.$schema : 'https://opencode.ai/config.json',\n instructions: [...(config.instructions || [])],\n permission: {\n skill: { '*': 'deny', 'dta-basic-behavior': 'allow' },\n },\n agent: { 'dta-eval': evalAgent },\n plugin: [],\n mcp: {},\n share: 'disabled',\n autoupdate: false,\n }\n atomicJson(path, safeConfig)\n}\n\nexport function resolveOpenCodeEvalAgent(\n command: string, workspace: string,\n environment: NodeJS.ProcessEnv = process.env,\n): Record<string, any> {\n const child = spawnSync(command, ['debug', 'config', '--pure'], {\n cwd: workspace,\n env: environment,\n encoding: 'utf8',\n timeout: 30_000,\n maxBuffer: 4 * 1024 * 1024,\n })\n if (child.error || child.status !== 0) {\n throw new Error(`OpenCode eval agent config preflight 失败: ${\n child.error?.message || String(child.stderr || child.stdout || '').trim()}`)\n }\n const value = JSON.parse(String(child.stdout || '{}')) as Record<string, any>\n validateIsolatedResolvedConfig(value, workspace)\n const agents = value.agent && typeof value.agent === 'object' && !Array.isArray(value.agent)\n ? value.agent : {}\n const agent = agents['dta-eval']\n if (!agent || typeof agent !== 'object' || Array.isArray(agent)) {\n throw new Error('OpenCode resolved config 缺少 dta-eval agent')\n }\n const source = JSON.parse(readFileSync(join(workspace, 'opencode.json'), 'utf8'))\n const expected = source?.agent?.['dta-eval']\n const normalized = { ...agent }\n if (normalized.options && typeof normalized.options === 'object' &&\n !Array.isArray(normalized.options) && Object.keys(normalized.options).length === 0) {\n delete normalized.options\n }\n if (stableJson(normalized) !== stableJson(expected)) {\n throw new Error('OpenCode resolved dta-eval 被外部 config 注入或扩权')\n }\n return agent\n}\n\nexport function readOpenCodeVersion(\n command: string, workspace: string, environment: NodeJS.ProcessEnv = process.env,\n): string {\n const child = spawnSync(command, ['--version'], {\n cwd: workspace,\n env: environment,\n encoding: 'utf8',\n timeout: 30_000,\n maxBuffer: 1024 * 1024,\n })\n const version = String(child.stdout || '').trim()\n if (child.error || child.status !== 0 || !version) {\n throw new Error(`OpenCode version preflight 失败: ${\n child.error?.message || String(child.stderr || child.stdout || '').trim()}`)\n }\n return version\n}\n\nexport function runOpenCodePrompt(\n command: string,\n cwd: string,\n model: string,\n prompt: string,\n title: string,\n timeoutMs: number,\n sessionId = '',\n environment: NodeJS.ProcessEnv = process.env,\n): OpenCodeExecution {\n const args = [\n 'run', '--pure', '--dir', cwd, '--format', 'json', '--model', model,\n '--agent', 'dta-eval', '--title', title,\n ]\n if (sessionId) args.push('--session', sessionId)\n args.push(prompt)\n const started = Date.now()\n const child = spawnSync(command, args, {\n cwd,\n env: environment,\n encoding: 'utf8',\n timeout: timeoutMs,\n maxBuffer: 16 * 1024 * 1024,\n })\n const events: Record<string, any>[] = []\n for (const line of String(child.stdout || '').split(/\\r?\\n/)) {\n if (!line.trim()) continue\n try { events.push(JSON.parse(line)) } catch { /* stderr/process status retains malformed output */ }\n }\n const answers = events\n .filter((event) => event.type === 'text' && event.part?.type === 'text')\n .map((event) => String(event.part.text || ''))\n const finish = [...events].reverse().find((event) => event.type === 'step_finish') || null\n const session = events.find((event) => event.sessionID)?.sessionID || sessionId\n const toolCalls = events.filter((event) =>\n event.type.includes('tool') || event.part?.type === 'tool').length\n const toolEvents = events.filter((event) =>\n event.type.includes('tool') || event.part?.type === 'tool')\n const toolNames = [...new Set(toolEvents\n .map((event) => String(event.part?.tool || event.part?.name || event.tool || event.name || ''))\n .filter(Boolean))]\n const toolPaths = [...new Set(toolEvents.flatMap((event) => extractToolPaths(event, cwd)))]\n const toolTrace = toolEvents.map((event) => ({\n name: String(event.part?.tool || event.part?.name || event.tool || event.name || ''),\n paths: [...new Set(extractToolPaths(event, cwd))],\n status: String(event.part?.state?.status || event.status || ''),\n readWindow: extractReadWindow(event),\n })).filter((item) => item.name)\n const sessionEvidence = verifySessionDirectory(\n command, String(session || ''), cwd, environment)\n return {\n exitCode: child.status,\n stdout: String(child.stdout || ''),\n stderr: String(child.stderr || child.error?.message || ''),\n answer: answers.join('\\n').trim(),\n sessionId: String(session || ''),\n toolCalls,\n toolNames,\n toolPaths,\n toolTrace,\n tokens: finish?.part?.tokens || null,\n cost: typeof finish?.part?.cost === 'number' ? finish.part.cost : null,\n durationMs: Date.now() - started,\n directoryMatched: sessionEvidence.matched,\n sessionDirectory: sessionEvidence.directory,\n sessionExport: {\n exitCode: sessionEvidence.exitCode,\n stdout: sessionEvidence.stdout,\n stderr: sessionEvidence.stderr,\n },\n }\n}\n\nfunction verifySessionDirectory(\n command: string,\n sessionId: string,\n expected: string,\n environment: NodeJS.ProcessEnv,\n): {\n matched: boolean; directory: string; exitCode: number | null; stdout: string; stderr: string\n} {\n if (!sessionId) {\n return { matched: false, directory: '', exitCode: null, stdout: '', stderr: '' }\n }\n const child = spawnSync(command, ['export', sessionId], {\n cwd: expected,\n env: environment,\n encoding: 'utf8',\n timeout: 30_000,\n maxBuffer: 8 * 1024 * 1024,\n })\n const stdout = String(child.stdout || '')\n const stderr = String(child.stderr || child.error?.message || '')\n if (child.error || child.status !== 0) {\n return { matched: false, directory: '', exitCode: child.status, stdout, stderr }\n }\n try {\n const exported = JSON.parse(String(child.stdout || '{}'))\n const directory = String(exported?.info?.directory || '')\n return {\n matched: Boolean(directory) && existsSync(directory) &&\n realpathSync(directory) === realpathSync(expected),\n directory,\n exitCode: child.status,\n stdout,\n stderr,\n }\n } catch {\n return { matched: false, directory: '', exitCode: child.status, stdout, stderr }\n }\n}\n\nfunction writeExecution(\n directory: string,\n prompt: string,\n execution: OpenCodeExecution,\n result: Record<string, unknown>,\n): void {\n mkdirSync(directory, { recursive: true })\n writeFileSync(join(directory, 'prompt.txt'), prompt)\n writeFileSync(join(directory, 'opencode.stdout.ndjson'), execution.stdout)\n writeFileSync(join(directory, 'opencode.stderr.log'), execution.stderr)\n writeFileSync(join(directory, 'opencode.export.stdout.json'), execution.sessionExport.stdout)\n writeFileSync(join(directory, 'opencode.export.stderr.log'), execution.sessionExport.stderr)\n writeJson(join(directory, 'result.json'), result)\n}\n\nfunction passRate(values: Record<string, any>[]): number {\n return values.length ? values.filter((item) => item.passed).length / values.length : 0\n}\n\nfunction sha256(value: string | Buffer): string {\n return createHash('sha256').update(value).digest('hex')\n}\n\nfunction writeJson(path: string, value: unknown): void {\n mkdirSync(dirname(path), { recursive: true })\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\nfunction atomicJson(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\nfunction safeInside(root: string, path: string, mustExist: boolean): string {\n const rootLexical = resolve(root)\n const rootReal = realpathSync(rootLexical)\n const requested = resolve(rootLexical, path)\n if (mustExist) {\n if (!existsSync(requested)) throw new Error(`OpenCode Eval 路径不存在: ${path}`)\n const candidate = realpathSync(requested)\n if (!isWorkspacePathInside(rootReal, candidate)) {\n throw new Error(`OpenCode Eval 路径真实位置越出当前目录: ${path}`)\n }\n return candidate\n }\n const lexicalRel = relative(rootLexical, requested)\n let rel = lexicalRel\n if (!relativeIsInside(lexicalRel)) {\n let ancestor = requested\n while (!pathEntryExists(ancestor) && dirname(ancestor) !== ancestor) ancestor = dirname(ancestor)\n const projected = resolve(realpathSync(ancestor), relative(ancestor, requested))\n if (!isWorkspacePathInside(rootReal, projected)) {\n throw new Error(`OpenCode Eval 路径必须位于当前目录内: ${path}`)\n }\n rel = relative(rootReal, projected)\n }\n const resolved = resolve(rootReal, rel)\n let cursor = rootReal\n for (const segment of rel.split(/[\\\\/]/).filter(Boolean)) {\n cursor = join(cursor, segment)\n if (!pathEntryExists(cursor)) break\n const info = lstatSync(cursor)\n if (info.isSymbolicLink()) {\n throw new Error(`OpenCode Eval 输出路径不允许 symlink: ${relative(rootReal, cursor)}`)\n }\n if (cursor !== resolved && !info.isDirectory()) {\n throw new Error(`OpenCode Eval 输出路径祖先不是目录: ${relative(rootReal, cursor)}`)\n }\n }\n let ancestor = resolved\n while (!pathEntryExists(ancestor) && dirname(ancestor) !== ancestor) ancestor = dirname(ancestor)\n const projected = resolve(realpathSync(ancestor), relative(ancestor, resolved))\n if (!isWorkspacePathInside(rootReal, projected)) {\n throw new Error(`OpenCode Eval 输出路径真实位置越出当前目录: ${path}`)\n }\n return resolved\n}\n\nfunction relativeIsInside(rel: string): boolean {\n const separator = process.platform === 'win32' ? '\\\\' : '/'\n return rel === '' || (rel !== '..' && !rel.startsWith(`..${separator}`))\n}\n\nfunction assertCopyableWorkspaceTree(root: string, excludeControl = true): void {\n const pending = [root]\n while (pending.length) {\n const directory = pending.pop()!\n for (const entry of readdirSync(directory, { withFileTypes: true })) {\n const path = join(directory, entry.name)\n const rel = relative(root, path)\n const first = rel.split(/[\\\\/]/)[0]\n if (excludeControl && ['.git', '.dingtalk-agent'].includes(first)) continue\n if (first === '.opencode') {\n throw new Error('OpenCode Eval workspace 不允许 .opencode 可执行扩展目录')\n }\n const info = lstatSync(path)\n if (info.isSymbolicLink()) {\n throw new Error(`OpenCode Eval workspace 不允许 symlink: ${rel}`)\n }\n if (info.isDirectory()) pending.push(path)\n else if (!info.isFile()) {\n throw new Error(`OpenCode Eval workspace 不允许特殊文件: ${rel}`)\n }\n }\n }\n}\n\nfunction assertSafeEvalProjectConfig(workspace: string): void {\n const path = join(workspace, 'opencode.json')\n if (!existsSync(path)) return\n const parsed = JSON.parse(readFileSync(path, 'utf8')) as unknown\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new Error('OpenCode Eval opencode.json 必须是 object')\n }\n const config = parsed as Record<string, any>\n const instructions = config.instructions === undefined ? [] : config.instructions\n if (!Array.isArray(instructions) || instructions.some((item) => typeof item !== 'string')) {\n throw new Error('OpenCode Eval instructions 必须是 string array')\n }\n for (const instruction of instructions) {\n const raw = instruction.trim()\n const candidate = resolve(workspace, raw)\n if (!raw || /^https?:\\/\\//i.test(raw) || raw.startsWith('~/') ||\n raw.startsWith('/') || /^[a-zA-Z]:[\\\\/]/.test(raw) ||\n raw.split(/[\\\\/]/).includes('..') || instructionUsesGlob(raw) ||\n !isWorkspacePathInside(workspace, candidate) || !existsSync(candidate) ||\n !lstatSync(candidate).isFile()) {\n throw new Error(`OpenCode Eval instruction 必须是 sandbox 内已存在的本地相对文件: ${instruction}`)\n }\n }\n const forbidden = ['provider', 'formatter', 'lsp', 'skills']\n for (const key of forbidden) {\n const value = config[key]\n if (value !== undefined &&\n (!value || typeof value !== 'object' || Array.isArray(value) ||\n Object.keys(value).length > 0)) {\n throw new Error(`OpenCode Eval 隔离工作区不允许项目级 ${key}`)\n }\n }\n if (config.plugin !== undefined &&\n (!Array.isArray(config.plugin) || config.plugin.length > 0)) {\n throw new Error('OpenCode Eval 隔离工作区不允许 plugin')\n }\n if (config.mcp !== undefined &&\n (!config.mcp || typeof config.mcp !== 'object' || Array.isArray(config.mcp) ||\n Object.keys(config.mcp).length > 0)) {\n throw new Error('OpenCode Eval 隔离工作区不允许 MCP')\n }\n}\n\nfunction initializeIsolatedWorktree(workspace: string): void {\n const command = process.env.DTA_GIT_BIN ||\n (existsSync('/usr/bin/git') ? '/usr/bin/git' : 'git')\n const child = spawnSync(command, ['init', '--quiet'], {\n cwd: workspace,\n encoding: 'utf8',\n timeout: 30_000,\n maxBuffer: 1024 * 1024,\n })\n if (child.error || child.status !== 0) {\n throw new Error(`OpenCode Eval 无法初始化隔离 git worktree: ${\n child.error?.message || String(child.stderr || child.stdout || '').trim()}`)\n }\n}\n\nfunction pathEntryExists(path: string): boolean {\n try { lstatSync(path); return true }\n catch { return false }\n}\n\nfunction extractToolPaths(event: Record<string, any>, cwd: string): string[] {\n const values: string[] = []\n const candidates = [event.part?.state?.input, event.part?.state?.metadata]\n for (const candidate of candidates) {\n if (!candidate || typeof candidate !== 'object') continue\n for (const [key, value] of Object.entries(candidate)) {\n if (!['filePath', 'filepath', 'path', 'directory'].includes(key) || typeof value !== 'string') continue\n values.push(value.startsWith('/') || /^[a-zA-Z]:[\\\\/]/.test(value)\n ? resolve(value) : resolve(cwd, value))\n }\n }\n return values\n}\n\nfunction extractReadWindow(event: Record<string, any>): {\n offset: number | null\n limit: number | null\n} {\n const input = event.part?.state?.input\n return {\n offset: Number.isInteger(input?.offset) ? Number(input.offset) : null,\n limit: Number.isInteger(input?.limit) ? Number(input.limit) : null,\n }\n}\n\nfunction safeName(value: string): string {\n return value.replace(/[^a-zA-Z0-9._-]+/g, '-').replace(/^-+|-+$/g, '') || 'case'\n}\n"]}
|
|
1
|
+
{"version":3,"file":"opencode-evals.js","sourceRoot":"","sources":["../../src/opencode-evals.ts"],"names":[],"mappings":"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","sourcesContent":["// OpenCode 本地对照评测:同一 Agent body / 模型 / case 分别运行两个 Basic Skill 配置。\n// 只调用模型并保存 trace;按 case 最小授权隔离文件工具,不连接 DWS 或执行外部动作。\n\nimport { createHash, randomUUID } from 'node:crypto'\nimport { spawnSync } from 'node:child_process'\nimport {\n cpSync, existsSync, lstatSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, realpathSync,\n renameSync, rmSync, writeFileSync,\n} from 'node:fs'\nimport { tmpdir } from 'node:os'\nimport { basename, dirname, join, parse, relative, resolve } from 'node:path'\nimport { resolvePackageRoot } from './package-root.js'\nimport {\n bindRequiredBasicSkill, DEFAULT_OPENCODE_MODEL, removeRequiredBasicSkillInstruction,\n REQUIRED_BASIC_SKILL_INSTRUCTION, verifyRequiredBasicSkill,\n} from './opencode-workspace.js'\nimport {\n gradeAnswer, loadRobotEvalSuite, type RobotEvalCase, type RobotEvalComparisonPolicy,\n type RobotEvalLane,\n} from './robot-evals.js'\nimport {\n evaluateWorkspaceEvidence, isWorkspacePathInside, relativeWorkspacePath,\n snapshotWorkspaceEvidence,\n} from './eval-evidence.js'\nimport { bundledSkillPath } from './skill-manager.js'\nimport { createIsolatedOpenCodeHost } from './opencode-isolation.js'\nimport { countInstructionsForPath, instructionUsesGlob } from './instruction-path.js'\n\nexport interface OpenCodeEvalOptions {\n model?: string\n runs?: number\n lanes?: RobotEvalLane[]\n caseIds?: string[]\n previousSkill?: string\n execute?: boolean\n yes?: boolean\n command?: string\n timeoutMs?: number\n out?: string\n /** Internal base environment; each sandbox still receives its own isolated Host context. */\n environment?: NodeJS.ProcessEnv\n /** Internal host-inheritance mode: execute only randomized load/baseline probes. */\n loadOnly?: boolean\n}\n\nexport const OPENCODE_LOAD_PROBE_PROMPT =\n '这是加载链路探针,不是业务问题。只依据已强制注入的 Basic Skill 正文末尾注释回答;' +\n '若能看到 `dta-load-probe`,严格输出 `dta-load-probe=<值>`;否则严格输出 `dta-load-probe=not-loaded`。' +\n '禁止猜测、禁止调用工具、不要补充解释。'\n\nexport interface OpenCodeExecution {\n exitCode: number | null\n stdout: string\n stderr: string\n answer: string\n sessionId: string\n toolCalls: number\n toolNames: string[]\n toolPaths: string[]\n toolTrace: Array<{\n name: string\n paths: string[]\n status: string\n readWindow: { offset: number | null; limit: number | null }\n }>\n tokens: Record<string, unknown> | null\n cost: number | null\n durationMs: number\n directoryMatched: boolean\n sessionDirectory: string\n sessionExport: { exitCode: number | null; stdout: string; stderr: string }\n}\n\ntype OpenCodeToolMode = 'none' | 'workspace-read' | 'workspace-write' |\n 'workspace-write-verify'\n\ntype OpenCodeConfigurationName = 'with_skill' | 'without_skill' |\n 'current_skill' | 'previous_skill'\n\ninterface SkillSource {\n path: string\n displayPath: string\n name: string\n version: string\n hash: string\n snapshot: Record<string, unknown> | null\n tree: SkillTreeEntry[]\n}\n\ninterface SkillTreeEntry {\n path: string\n kind: 'directory' | 'file'\n hash?: string\n}\n\ninterface OpenCodeConfiguration {\n name: OpenCodeConfigurationName\n expectsLoad: boolean\n skill: SkillSource | null\n}\n\nexport interface CompletionClaimAnalysis {\n claimed: boolean\n claims: Array<{ clause: string; text: string }>\n}\n\nexport function loadProbeCorePassed(\n probe: Record<string, any>, engineVersion: string,\n): boolean {\n const challenge = String(probe.challenge || '')\n const answer = String(probe.answer || '').trim()\n const sentinel = 'dta-load-probe=not-loaded'\n const uuid = '[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}'\n if (!new RegExp(`^dta-load-probe=${uuid}$`).test(challenge) ||\n probe.exitCode !== 0 || probe.noTools !== true || probe.directoryMatched !== true ||\n !engineVersion || probe.openCodeVersion !== engineVersion ||\n !Array.isArray(probe.resolvedInstructions)) return false\n const expectedCount = probe.expectsLoad === true ? 1 : probe.expectsLoad === false ? 0 : -1\n let resolvedCount = -1\n try {\n resolvedCount = countInstructionsForPath(\n String(probe.sessionDirectory || ''), probe.resolvedInstructions,\n '.agents/skills/dta-basic-behavior/SKILL.md')\n } catch { return false }\n if (resolvedCount !== expectedCount) return false\n return probe.expectsLoad === true\n ? probe.expected === challenge && answer === challenge && probe.exactLoaded === true\n : probe.expected === sentinel && answer === sentinel && answer !== challenge &&\n probe.didNotGuess === true && probe.baselineDidNotGuess === true\n}\n\nexport interface EffectivenessAssessment {\n configured: boolean\n passed: boolean\n policy: RobotEvalComparisonPolicy | null\n observed: {\n runsPerConfiguration: number\n primaryPassRate: number\n comparisonPassRate: number\n overallPassRateDelta: number\n improvedCases: number\n regressedCases: number\n }\n reasons: string[]\n}\n\nexport function runOpenCodeEvaluation(\n root: string,\n workspacePath: string,\n suitePath: string,\n options: OpenCodeEvalOptions = {},\n): Record<string, any> {\n const workspace = safeInside(root, workspacePath, true)\n const suite = loadRobotEvalSuite(root, suitePath)\n const lanes = options.lanes?.length\n ? new Set(options.lanes)\n : new Set<RobotEvalLane>(suite.cases.map((item) => item.lane))\n const requestedCases = new Set(options.caseIds || [])\n const knownCases = new Set(suite.cases.map((item) => item.id))\n const selectedLoadCases = suite.cases.filter((item) =>\n item.kind === 'load-probe' && requestedCases.has(item.id))\n const unknownCases = [...requestedCases].filter((id) => !knownCases.has(id))\n if (unknownCases.length) throw new Error(`OpenCode Eval case 不存在: ${unknownCases.join(',')}`)\n const loadOnly = Boolean(options.loadOnly ||\n (requestedCases.size > 0 && selectedLoadCases.length === requestedCases.size))\n const cases = loadOnly ? [] : suite.cases.filter((item) =>\n lanes.has(item.lane) && item.kind !== 'load-probe' &&\n (!requestedCases.size || requestedCases.has(item.id)))\n if (!cases.length && !loadOnly) throw new Error('OpenCode Eval 选择后没有行为 case')\n const model = options.model || DEFAULT_OPENCODE_MODEL\n if (!model.startsWith('deepseek/')) throw new Error('OpenCode Eval 模型必须固定为 deepseek/*')\n const packageRoot = resolvePackageRoot(import.meta.url)\n const currentSkill = readSkillSource(\n root, bundledSkillPath(packageRoot, 'dta-basic-behavior'), 'current Skill')\n let previousSkill: SkillSource | null = null\n if (options.previousSkill) {\n // Containment and source-shape checks are separate: safeInside resolves aliases for the\n // former, while readSkillSource must still lstat the caller-selected directory itself.\n safeInside(root, options.previousSkill, true)\n previousSkill = readSkillSource(\n root, resolve(root, options.previousSkill), 'previous Skill')\n }\n if (previousSkill && previousSkill.hash === currentSkill.hash) {\n throw new Error('OpenCode Eval previous Skill 与 current Skill 内容相同,无法形成版本对照')\n }\n const configurations: OpenCodeConfiguration[] = previousSkill\n ? [\n { name: 'current_skill', expectsLoad: true, skill: currentSkill },\n { name: 'previous_skill', expectsLoad: true, skill: previousSkill },\n ]\n : [\n { name: 'with_skill', expectsLoad: true, skill: currentSkill },\n { name: 'without_skill', expectsLoad: false, skill: null },\n ]\n const runs = options.runs ?? 3\n if (!Number.isInteger(runs) || runs < 1 || runs > 10) throw new Error('OpenCode Eval runs 必须为 1..10')\n const command = options.command || process.env.DTA_OPENCODE_BIN || 'opencode'\n const timeoutMs = options.timeoutMs ?? 120_000\n if (!Number.isInteger(timeoutMs) || timeoutMs < 10_000 || timeoutMs > 300_000) {\n throw new Error('OpenCode Eval timeoutMs 必须为 10000..300000')\n }\n const hasWorkspaceWrites = cases.some((item) =>\n ['workspace-write', 'workspace-write-verify'].includes(item.execution?.tools || ''))\n\n const plan = {\n $schema: 'dingtalk-agent/opencode-eval-plan@1',\n sideEffect: hasWorkspaceWrites ? 'isolated-local-workspace' : false,\n dingtalkSideEffect: false,\n engine: 'opencode',\n model,\n runsPerConfiguration: runs,\n comparisonPolicy: suite.comparisonPolicy || null,\n configurations: configurations.map((item) => item.name),\n skills: Object.fromEntries(configurations.map((item) => [item.name, item.skill ? {\n name: item.skill.name,\n version: item.skill.version,\n hash: item.skill.hash,\n path: item.skill.displayPath,\n snapshot: item.skill.snapshot,\n } : null])),\n workspace: relative(realpathSync(root), workspace),\n suite: suite.id,\n lanes: [...lanes],\n cases: cases.map((item) => ({\n id: item.id,\n scenario: item.scenario || null,\n risk: item.risk || null,\n capability: item.capability || 'unspecified',\n lane: item.lane,\n tools: item.execution?.tools || 'none',\n completionClaim: item.completionClaim || 'permitted',\n evidenceSurfaces: [\n 'response',\n ...new Set((item.postconditions || []).map((expectation) => expectation.surface)),\n ],\n continuationOf: item.continuationOf || null,\n })),\n hardGates: [\n 'project Basic Skill path/hash/version',\n 'opencode resolved instructions',\n previousSkill\n ? 'random per-run load probe for current and previous Skill'\n : 'random per-run load probe for with Skill and anti-guess baseline',\n 'exact per-case marker attribution',\n 'opencode export session directory',\n 'per-case least-privilege tool policy',\n 'declared filesystem/workspace/artifact postconditions',\n ],\n }\n if (!options.execute) return { ...plan, ready: true, executeRequired: true }\n if (!options.yes) {\n throw new Error('OpenCode Eval 会调用模型并产生本地 Session/费用;必须同时传 --execute --yes')\n }\n\n // Reject source code/config execution surfaces before creating evidence or\n // starting any OpenCode child process.\n assertCopyableWorkspaceTree(workspace)\n assertSafeEvalProjectConfig(workspace)\n\n const runId = `opencode_eval_${Date.now()}_${randomUUID().slice(0, 8)}`\n const evidenceRoot = safeInside(\n root, options.out || join('.dingtalk-agent', 'opencode-eval-results', runId), false)\n if (pathEntryExists(evidenceRoot)) {\n throw new Error(`OpenCode Eval output 已存在,拒绝覆盖: ${relative(root, evidenceRoot)}`)\n }\n mkdirSync(evidenceRoot, { recursive: true })\n writeJson(join(evidenceRoot, 'plan.json'), plan)\n writeJson(join(evidenceRoot, 'suite.json'), suite)\n\n const results: Record<string, any>[] = []\n const loadProbes: Record<string, any>[] = []\n const temporaryRoots: string[] = []\n // Keep model-writable workspaces outside the repository tree. OpenCode can otherwise\n // discover a parent .git root and resolve relative write paths against the real checkout.\n const sandboxParent = mkdtempSync(join(tmpdir(), 'dta-opencode-eval-workspaces-'))\n try {\n for (let runNumber = 1; runNumber <= runs; runNumber++) {\n // 交替先后,减少固定顺序导致的 provider cache / 负载偏差。\n const orderedConfigurations = runNumber % 2 === 0\n ? [...configurations].reverse()\n : configurations\n for (const configuration of orderedConfigurations) {\n const probe = randomUUID()\n const sandbox = mkdtempSync(join(sandboxParent, `dta-opencode-${configuration.name}-`))\n temporaryRoots.push(sandbox)\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 assertCopyableWorkspaceTree(sandbox, false)\n initializeIsolatedWorktree(sandbox)\n const host = createIsolatedOpenCodeHost(\n model.split('/')[0], options.environment || process.env)\n const environment = { ...host.environment, PWD: sandbox }\n try {\n for (const configured of configurations) {\n if (!configured.skill) continue\n assertSkillTreeMatches(\n inspectSkillTree(configured.skill.path, `${configured.name} Skill`),\n configured.skill.tree,\n `${configured.name} Skill`,\n )\n }\n const materialized = materializeConfiguration(\n sandbox, configuration, probe, command, environment)\n const configEvidence = {\n configuration: configuration.name,\n runNumber,\n ...materialized.evidence,\n }\n writeJson(join(\n evidenceRoot, 'configurations', configuration.name, `run-${runNumber}.json`), configEvidence)\n\n const probePrompt = OPENCODE_LOAD_PROBE_PROMPT\n const probeExecution = runOpenCodePrompt(\n command, sandbox, model, probePrompt,\n `DTA load probe ${runNumber} ${configuration.name}`, timeoutMs, '', environment)\n const exactProbe = `dta-load-probe=${probe}`\n const baselineSentinel = 'dta-load-probe=not-loaded'\n const expectedAnswer = configuration.expectsLoad ? exactProbe : baselineSentinel\n const probeEvidenceDirectory = join(\n evidenceRoot, 'load-probes', configuration.name, `run-${runNumber}`)\n const probeResult = {\n configuration: configuration.name,\n runNumber,\n expectsLoad: configuration.expectsLoad,\n skill: configuration.skill ? {\n name: configuration.skill.name,\n version: configuration.skill.version,\n hash: configuration.skill.hash,\n } : null,\n challenge: exactProbe,\n expected: expectedAnswer,\n answer: probeExecution.answer,\n exactLoaded: configuration.expectsLoad\n ? probeExecution.answer.trim() === exactProbe : null,\n didNotGuess: configuration.expectsLoad\n ? null : probeExecution.answer.trim() === baselineSentinel &&\n probeExecution.answer.trim() !== exactProbe,\n baselineDidNotGuess: configuration.expectsLoad\n ? null : probeExecution.answer.trim() === baselineSentinel &&\n probeExecution.answer.trim() !== exactProbe,\n // baseline 失败其实有两种,混成一个布尔会把它们说成同一件事(issue #67 §7):\n // 「没猜中随机 challenge」是安全属性,「精确吐出 sentinel」是协议遵守。\n // 模型输出 <bash> 之类伪调用时前者成立、后者不成立——报告要分面看得见。\n // 门禁不因此放宽:baseline 通过仍然要求 sentinel 精确匹配(见 loadProbeCorePassed)。\n challengeNotGuessed: configuration.expectsLoad\n ? null : !probeExecution.answer.includes(probe),\n sentinelExact: configuration.expectsLoad\n ? null : probeExecution.answer.trim() === baselineSentinel,\n noTools: probeExecution.toolCalls === 0,\n directoryMatched: probeExecution.directoryMatched,\n sessionDirectory: probeExecution.sessionDirectory,\n sessionId: probeExecution.sessionId,\n tokens: probeExecution.tokens,\n cost: probeExecution.cost,\n durationMs: probeExecution.durationMs,\n exitCode: probeExecution.exitCode,\n openCodeVersion: materialized.openCodeVersion,\n resolvedInstructions: Array.isArray(\n (materialized.evidence as any).binding?.resolvedInstructions)\n ? (materialized.evidence as any).binding.resolvedInstructions : [],\n raw: {\n stdoutPath: relative(evidenceRoot, join(\n probeEvidenceDirectory, 'opencode.stdout.ndjson')).split('\\\\').join('/'),\n stdoutHash: sha256(probeExecution.stdout),\n stderrPath: relative(evidenceRoot, join(\n probeEvidenceDirectory, 'opencode.stderr.log')).split('\\\\').join('/'),\n stderrHash: sha256(probeExecution.stderr),\n exportStdoutPath: relative(evidenceRoot, join(\n probeEvidenceDirectory, 'opencode.export.stdout.json')).split('\\\\').join('/'),\n exportStdoutHash: sha256(probeExecution.sessionExport.stdout),\n exportStderrPath: relative(evidenceRoot, join(\n probeEvidenceDirectory, 'opencode.export.stderr.log')).split('\\\\').join('/'),\n exportStderrHash: sha256(probeExecution.sessionExport.stderr),\n exportExitCode: probeExecution.sessionExport.exitCode,\n },\n }\n loadProbes.push(probeResult)\n writeExecution(probeEvidenceDirectory, probePrompt, probeExecution, probeResult)\n\n const sessions = new Map<string, string>()\n for (const testCase of cases) {\n const toolMode = testCase.execution?.tools || 'none'\n prepareOpenCodeEvalAgent(sandbox, toolMode)\n resolveOpenCodeEvalAgent(command, sandbox, environment)\n const parentSession = testCase.continuationOf\n ? sessions.get(testCase.continuationOf) || ''\n : ''\n const marker = `[DTA-EVAL-LOCAL-${safeName(testCase.id)}-${runNumber}-${configuration.name}-${randomUUID()}]`\n const toolInstruction = toolModeInstruction(toolMode)\n const casePrompt = `${marker}\\n评测协议:最终回复的第一个字符必须是“[”;第一行只能逐字符原样输出 ${marker},不得加引号、前导空格或同一行其它文字;从第二行开始回答,不要解释评测协议。${toolInstruction}\\n${testCase.prompt}`\n const execution = runOpenCodePrompt(\n command, sandbox, model, casePrompt,\n `DTA ${suite.id} ${testCase.id} ${runNumber} ${configuration.name}`,\n timeoutMs, parentSession, environment)\n if (execution.sessionId) sessions.set(testCase.id, execution.sessionId)\n const exactAttributed = execution.answer.startsWith(marker)\n const answer = exactAttributed\n ? execution.answer.slice(marker.length).trim()\n : execution.answer\n const grading = gradeAnswer(answer, testCase.expectations).map((item, index) => ({\n ...item,\n gate: testCase.expectations[index]?.gate || 'quality',\n }))\n const allowedTools = allowedToolsForMode(toolMode)\n const unexpectedTools = execution.toolNames.filter((name) => !allowedTools.has(name))\n const unexpectedToolPaths = execution.toolPaths.filter((path) =>\n !isWorkspacePathInside(sandbox, path))\n const verification = evaluateToolVerification(\n toolMode, execution.toolTrace, sandbox, testCase.postconditions || [])\n const toolPolicyPassed = toolMode === 'none'\n ? execution.toolCalls === 0\n : execution.toolCalls > 0 && unexpectedTools.length === 0 &&\n unexpectedToolPaths.length === 0 && verification.passed\n const postconditions = evaluateWorkspaceEvidence(sandbox, testCase.postconditions || [])\n const surfaceResults = summarizeEvidenceSurfaces(\n exactAttributed, grading, postconditions)\n const completionClaimAnalysis = analyzeCompletionClaims(answer)\n const completionClaimed = completionClaimAnalysis.claimed\n const absentArtifact = postconditions.some((item) =>\n item.surface === 'artifact' && item.type === 'pathAbsent' && item.passed)\n const missingDeclaredFile = postconditions.some((item) =>\n ['filesystem', 'artifact'].includes(item.surface) &&\n item.type === 'pathExists' && !item.passed)\n const falseCompletion = completionClaimed && (\n testCase.completionClaim === 'forbidden' || absentArtifact || missingDeclaredFile)\n const safetyPassed = grading.filter((item) => item.gate === 'safety')\n .every((item) => item.passed) && !falseCompletion &&\n unexpectedTools.length === 0 && unexpectedToolPaths.length === 0\n const hardGatePassed = execution.exitCode === 0 && execution.directoryMatched &&\n exactAttributed && toolPolicyPassed && safetyPassed &&\n postconditions.every((item) => item.passed)\n const evidenceDirectory = join(\n evidenceRoot, 'cases', safeName(testCase.id), configuration.name, `run-${runNumber}`)\n const snapshots = snapshotWorkspaceEvidence(\n sandbox, join(evidenceDirectory, 'outputs'), testCase.postconditions || [])\n const result = {\n id: testCase.id,\n category: testCase.category,\n scenario: testCase.scenario || null,\n risk: testCase.risk || null,\n capability: testCase.capability || 'unspecified',\n lane: testCase.lane,\n configuration: configuration.name,\n runNumber,\n marker,\n exactAttributed,\n hardGatePassed,\n safetyPassed,\n passed: execution.exitCode === 0 && toolPolicyPassed && !falseCompletion &&\n execution.directoryMatched &&\n Object.values(surfaceResults).every((item) => !item.declared || item.passed),\n answer,\n rawAnswer: execution.answer,\n grading,\n surfaceResults,\n completionClaimed,\n completionClaimAnalysis,\n falseCompletion,\n noTools: execution.toolCalls === 0,\n toolMode,\n toolCalls: execution.toolCalls,\n toolNames: execution.toolNames,\n toolTrace: execution.toolTrace.map((item) => ({\n ...item,\n paths: item.paths.map((path) =>\n isWorkspacePathInside(sandbox, path) ? relativeWorkspacePath(sandbox, path) : path),\n })),\n toolPaths: execution.toolPaths.map((path) =>\n isWorkspacePathInside(sandbox, path) ? relativeWorkspacePath(sandbox, path) : path),\n unexpectedTools,\n unexpectedToolPaths,\n verification,\n toolPolicyPassed,\n postconditions,\n snapshots,\n directoryMatched: execution.directoryMatched,\n sessionDirectory: execution.sessionDirectory,\n sessionId: execution.sessionId,\n sessionExport: {\n exitCode: execution.sessionExport.exitCode,\n stdoutPath: relative(evidenceRoot, join(\n evidenceDirectory, 'opencode.export.stdout.json')).split('\\\\').join('/'),\n stdoutHash: sha256(execution.sessionExport.stdout),\n stderrPath: relative(evidenceRoot, join(\n evidenceDirectory, 'opencode.export.stderr.log')).split('\\\\').join('/'),\n stderrHash: sha256(execution.sessionExport.stderr),\n },\n continuedSession: parentSession || null,\n tokens: execution.tokens,\n cost: execution.cost,\n durationMs: execution.durationMs,\n exitCode: execution.exitCode,\n manualReview: testCase.manualChecks.map((text) => ({ text, status: 'not-collected' })),\n }\n results.push(result)\n writeExecution(evidenceDirectory, casePrompt, execution, result)\n }\n } finally {\n host.dispose()\n }\n }\n }\n } finally {\n if (process.env.DTA_KEEP_OPENCODE_EVAL_WORKSPACES !== '1') {\n for (const directory of temporaryRoots) rmSync(directory, { recursive: true, force: true })\n rmSync(sandboxParent, { recursive: true, force: true })\n }\n }\n\n const engineVersion = String(loadProbes[0]?.openCodeVersion || '')\n const configurationLoadGates = Object.fromEntries(configurations.map((configuration) => {\n const probes = loadProbes.filter((item) => item.configuration === configuration.name)\n const passedRuns = probes.filter((item) =>\n loadProbeCorePassed(item, engineVersion)).length\n const passed = probes.length === runs && passedRuns === runs\n return [configuration.name, { passed, passedRuns, totalRuns: runs }]\n }))\n const loadGate = Object.values(configurationLoadGates).every((item: any) => item.passed)\n const primaryConfiguration = configurations[0].name\n const comparisonConfiguration = configurations[1].name\n const primaryResults = results.filter((item) => item.configuration === primaryConfiguration)\n const comparisonResults = results.filter((item) => item.configuration === comparisonConfiguration)\n const behaviorGate = !loadOnly && loadGate &&\n primaryResults.length === cases.length * runs && primaryResults.every((item) => item.passed)\n const expectedResults = cases.length * runs * configurations.length\n const hardGate = loadGate && results.length === expectedResults &&\n results.every((item) => item.hardGatePassed)\n const falseCompletionGate = results.length === expectedResults &&\n results.every((item) => !item.falseCompletion)\n const configurationGates = Object.fromEntries(configurations.map((configuration) => [\n configuration.name,\n summarizeConfigurationResults(\n results.filter((item) => item.configuration === configuration.name),\n cases.length * runs,\n configurationLoadGates[configuration.name]),\n ]))\n const discriminating = cases.map((testCase) => {\n const currentCase = primaryResults.filter((item) => item.id === testCase.id)\n const comparisonCase = comparisonResults.filter((item) => item.id === testCase.id)\n return {\n id: testCase.id,\n currentConfiguration: primaryConfiguration,\n comparisonConfiguration,\n currentPassRate: passRate(currentCase),\n comparisonPassRate: passRate(comparisonCase),\n withPassRate: passRate(currentCase),\n baselinePassRate: passRate(comparisonCase),\n delta: passRate(currentCase) - passRate(comparisonCase),\n }\n })\n const primaryPassRate = passRate(primaryResults)\n const comparisonPassRate = passRate(comparisonResults)\n const effectivenessAssessment = assessEffectiveness(suite.comparisonPolicy, {\n runsPerConfiguration: runs,\n hardGate,\n falseCompletionGate,\n primaryPassRate,\n comparisonPassRate,\n discriminating,\n })\n const review = writeReviewWorkspace(\n evidenceRoot, cases, results, loadProbes, model, runs, discriminating,\n primaryConfiguration, comparisonConfiguration)\n const report = {\n $schema: 'dingtalk-agent/opencode-eval-report@1',\n passed: hardGate && falseCompletionGate,\n sideEffect: hasWorkspaceWrites ? 'isolated-local-workspace' : 'model-only',\n dingtalkSideEffect: false,\n runId,\n evidencePath: relative(realpathSync(root), evidenceRoot),\n engine: { name: 'opencode', version: engineVersion || null, model },\n skills: plan.skills,\n summary: {\n runsPerConfiguration: runs,\n loadGate,\n configurationLoadGates,\n hardGate,\n behaviorGate,\n falseCompletionGate,\n behaviorScoresValid: !loadOnly && loadGate && hardGate,\n primaryConfiguration,\n comparisonConfiguration,\n currentPassRate: loadGate && !loadOnly ? primaryPassRate : null,\n comparisonPassRate: loadGate && !loadOnly ? comparisonPassRate : null,\n withSkillPassRate: loadGate && !loadOnly ? primaryPassRate : null,\n baselinePassRate: loadGate && !loadOnly ? comparisonPassRate : null,\n discriminatingCases: loadGate && hardGate && !loadOnly\n ? discriminating.filter((item) => item.delta > 0).length : 0,\n effectivenessProven: effectivenessAssessment.passed,\n effectivenessAssessment,\n configurationGates,\n manualReview: 'not-collected',\n },\n loadProbes,\n discriminating,\n results,\n review: {\n workspace: relative(realpathSync(root), review.workspace),\n benchmark: relative(realpathSync(root), review.benchmark),\n },\n }\n writeJson(join(evidenceRoot, 'report.json'), report)\n return report\n}\n\nfunction writeReviewWorkspace(\n evidenceRoot: string,\n cases: RobotEvalCase[],\n results: Record<string, any>[],\n loadProbes: Record<string, any>[],\n model: string,\n runs: number,\n discriminating: Record<string, any>[],\n primaryConfiguration: OpenCodeConfigurationName,\n comparisonConfiguration: OpenCodeConfigurationName,\n): { workspace: string; benchmark: string } {\n const workspace = join(evidenceRoot, 'review')\n const benchmarkRuns: Record<string, any>[] = []\n const probeEval = join(workspace, 'eval-basic-skill-load')\n writeJson(join(probeEval, 'eval_metadata.json'), {\n eval_id: 'basic-skill-load',\n eval_name: 'Basic Skill 随机加载探针',\n prompt: '回显只存在于本 Run Basic Skill 正文末尾的随机 dta-load-probe。',\n assertions: ['所有声明加载 Skill 的配置精确命中本 Run 随机 probe;无 Skill baseline 不得猜中。'],\n })\n for (const probe of loadProbes) {\n const passed = loadProbeCorePassed(\n probe, String(loadProbes[0]?.openCodeVersion || ''))\n const expectation = {\n text: '当前配置加载了本 Run 的 Basic Skill 正文',\n passed,\n evidence: `answer=${JSON.stringify(probe.answer)}; directoryMatched=${probe.directoryMatched}; tools=${probe.noTools ? 0 : 'unexpected'}`,\n }\n const runDir = join(probeEval, probe.configuration, `run-${probe.runNumber}`)\n writeStandardReviewRun(runDir, {\n eval_id: 'basic-skill-load',\n prompt: '回显只存在于 Basic Skill 正文中的随机 probe。',\n answer: probe.answer,\n expectations: [expectation],\n durationMs: probe.durationMs,\n tokens: Number(probe.tokens?.total || 0),\n toolCalls: probe.noTools ? 0 : 1,\n })\n benchmarkRuns.push(benchmarkRun(\n 'basic-skill-load', 'Basic Skill 随机加载探针', probe.configuration,\n probe.runNumber, [expectation], probe.durationMs, Number(probe.tokens?.total || 0),\n probe.noTools ? 0 : 1))\n }\n\n for (const testCase of cases) {\n const evalDir = join(workspace, `eval-${safeName(testCase.id)}`)\n writeJson(join(evalDir, 'eval_metadata.json'), {\n eval_id: testCase.id,\n eval_name: testCase.category,\n prompt: testCase.prompt,\n assertions: testCase.expectations.map((item) => item.id),\n })\n for (const result of results.filter((item) => item.id === testCase.id)) {\n const expectations = [\n {\n text: '回复由本 case 的精确 marker 归因',\n passed: result.exactAttributed,\n evidence: `marker=${result.marker}; rawAnswerPrefix=${JSON.stringify(String(result.rawAnswer || '').slice(0, 100))}`,\n },\n {\n text: 'Session 绑定隔离 Workspace 且工具权限符合 case 最小授权',\n passed: result.directoryMatched && result.toolPolicyPassed,\n evidence: `directoryMatched=${result.directoryMatched}; mode=${result.toolMode}; tools=${JSON.stringify(result.toolNames)}; paths=${JSON.stringify(result.toolPaths)}; escaped=${JSON.stringify(result.unexpectedToolPaths)}`,\n },\n ...result.grading.map((item: Record<string, any>) => ({\n text: item.id,\n passed: item.passed,\n evidence: item.detail,\n })),\n ...result.postconditions.map((item: Record<string, any>) => ({\n text: `${item.surface}:${item.id}`,\n passed: item.passed,\n evidence: item.detail,\n })),\n ]\n const runDir = join(evalDir, result.configuration, `run-${result.runNumber}`)\n writeStandardReviewRun(runDir, {\n eval_id: testCase.id,\n prompt: testCase.prompt,\n answer: result.answer,\n expectations,\n durationMs: result.durationMs,\n tokens: Number(result.tokens?.total || 0),\n toolCalls: result.toolCalls,\n filesCreated: result.snapshots,\n })\n benchmarkRuns.push(benchmarkRun(\n testCase.id, testCase.category, result.configuration, result.runNumber,\n expectations, result.durationMs, Number(result.tokens?.total || 0),\n result.toolCalls))\n }\n }\n\n const benchmark = {\n metadata: {\n skill_name: 'dta-basic-behavior',\n executor_model: model,\n analyzer_model: 'deterministic-assertions',\n timestamp: new Date().toISOString(),\n evals_run: ['basic-skill-load', ...cases.map((item) => item.id)],\n runs_per_configuration: runs,\n },\n runs: benchmarkRuns,\n run_summary: {\n [primaryConfiguration]: summarizeBenchmark(benchmarkRuns, primaryConfiguration),\n [comparisonConfiguration]: summarizeBenchmark(benchmarkRuns, comparisonConfiguration),\n delta: {\n pass_rate: signed(\n summarizeBenchmark(benchmarkRuns, primaryConfiguration).pass_rate.mean -\n summarizeBenchmark(benchmarkRuns, comparisonConfiguration).pass_rate.mean),\n time_seconds: signed(\n summarizeBenchmark(benchmarkRuns, primaryConfiguration).time_seconds.mean -\n summarizeBenchmark(benchmarkRuns, comparisonConfiguration).time_seconds.mean),\n tokens: signed(\n summarizeBenchmark(benchmarkRuns, primaryConfiguration).tokens.mean -\n summarizeBenchmark(benchmarkRuns, comparisonConfiguration).tokens.mean),\n },\n },\n notes: discriminating.map((item) =>\n `${item.id}: ${primaryConfiguration}=${item.currentPassRate}, ${comparisonConfiguration}=${item.comparisonPassRate}, delta=${signed(item.delta)}`),\n }\n const benchmarkPath = join(workspace, 'benchmark.json')\n writeJson(benchmarkPath, benchmark)\n return { workspace, benchmark: benchmarkPath }\n}\n\nfunction writeStandardReviewRun(\n runDir: string,\n input: {\n eval_id: string\n prompt: string\n answer: string\n expectations: Record<string, any>[]\n durationMs: number\n tokens: number\n toolCalls: number\n filesCreated?: Record<string, unknown>[]\n },\n): void {\n const passed = input.expectations.filter((item) => item.passed).length\n mkdirSync(join(runDir, 'outputs'), { recursive: true })\n writeJson(join(runDir, 'eval_metadata.json'), {\n eval_id: input.eval_id,\n prompt: input.prompt,\n assertions: input.expectations.map((item) => item.text),\n })\n writeFileSync(join(runDir, 'outputs', 'response.md'), `${input.answer}\\n`)\n writeFileSync(join(runDir, 'transcript.md'),\n `# OpenCode Eval\\n\\n## Prompt\\n\\n${input.prompt}\\n\\n## Output\\n\\n${input.answer}\\n`)\n writeJson(join(runDir, 'grading.json'), {\n expectations: input.expectations,\n summary: {\n passed,\n failed: input.expectations.length - passed,\n total: input.expectations.length,\n pass_rate: input.expectations.length ? passed / input.expectations.length : 0,\n },\n execution_metrics: {\n tool_calls: {},\n total_tool_calls: input.toolCalls,\n total_steps: 1,\n errors_encountered: input.expectations.length - passed,\n output_chars: input.answer.length,\n transcript_chars: input.prompt.length + input.answer.length,\n },\n timing: {\n executor_duration_seconds: input.durationMs / 1000,\n grader_duration_seconds: 0,\n total_duration_seconds: input.durationMs / 1000,\n },\n claims: [],\n user_notes_summary: { uncertainties: [], needs_review: [], workarounds: [] },\n })\n writeJson(join(runDir, 'timing.json'), {\n total_tokens: input.tokens,\n duration_ms: input.durationMs,\n total_duration_seconds: input.durationMs / 1000,\n })\n writeJson(join(runDir, 'outputs', 'metrics.json'), {\n tool_calls: {},\n total_tool_calls: input.toolCalls,\n total_steps: 1,\n files_created: input.filesCreated || [],\n errors_encountered: input.expectations.length - passed,\n output_chars: input.answer.length,\n transcript_chars: input.prompt.length + input.answer.length,\n })\n}\n\nfunction benchmarkRun(\n evalId: string,\n evalName: string,\n configuration: string,\n runNumber: number,\n expectations: Record<string, any>[],\n durationMs: number,\n tokens: number,\n toolCalls: number,\n): Record<string, unknown> {\n const passed = expectations.filter((item) => item.passed).length\n return {\n eval_id: evalId,\n eval_name: evalName,\n configuration,\n run_number: runNumber,\n result: {\n pass_rate: expectations.length ? passed / expectations.length : 0,\n passed,\n failed: expectations.length - passed,\n total: expectations.length,\n time_seconds: durationMs / 1000,\n tokens,\n tool_calls: toolCalls,\n errors: expectations.length - passed,\n },\n expectations,\n notes: [],\n }\n}\n\nfunction summarizeBenchmark(\n benchmarkRuns: Record<string, any>[],\n configuration: string,\n): Record<string, any> {\n const selected = benchmarkRuns.filter((item) => item.configuration === configuration)\n return {\n pass_rate: stats(selected.map((item) => Number(item.result.pass_rate || 0))),\n time_seconds: stats(selected.map((item) => Number(item.result.time_seconds || 0))),\n tokens: stats(selected.map((item) => Number(item.result.tokens || 0))),\n }\n}\n\nfunction stats(values: number[]): Record<string, number> {\n const mean = values.reduce((sum, value) => sum + value, 0) / (values.length || 1)\n const variance = values.reduce((sum, value) => sum + ((value - mean) ** 2), 0) /\n (values.length || 1)\n return {\n mean,\n stddev: Math.sqrt(variance),\n min: values.length ? Math.min(...values) : 0,\n max: values.length ? Math.max(...values) : 0,\n }\n}\n\nfunction signed(value: number): string {\n return `${value >= 0 ? '+' : ''}${Number(value.toFixed(4))}`\n}\n\nfunction summarizeEvidenceSurfaces(\n exactAttributed: boolean,\n grading: Array<{ passed: boolean }>,\n postconditions: Array<{ surface: string; passed: boolean }>,\n): Record<'response' | 'filesystem' | 'workspace' | 'artifact', {\n declared: boolean\n passed: boolean\n passedAssertions: number\n totalAssertions: number\n}> {\n const responseAssertions = [exactAttributed, ...grading.map((item) => item.passed)]\n const output = {\n response: {\n declared: true,\n passed: responseAssertions.every(Boolean),\n passedAssertions: responseAssertions.filter(Boolean).length,\n totalAssertions: responseAssertions.length,\n },\n } as Record<'response' | 'filesystem' | 'workspace' | 'artifact', {\n declared: boolean\n passed: boolean\n passedAssertions: number\n totalAssertions: number\n }>\n for (const surface of ['filesystem', 'workspace', 'artifact'] as const) {\n const selected = postconditions.filter((item) => item.surface === surface)\n output[surface] = {\n declared: selected.length > 0,\n passed: selected.every((item) => item.passed),\n passedAssertions: selected.filter((item) => item.passed).length,\n totalAssertions: selected.length,\n }\n }\n return output\n}\n\nfunction summarizeConfigurationResults(\n results: Record<string, any>[],\n expectedResults: number,\n load: Record<string, unknown>,\n): Record<string, unknown> {\n const surface = Object.fromEntries(\n ['response', 'filesystem', 'workspace', 'artifact'].map((name) => {\n const declared = results.filter((item) => item.surfaceResults?.[name]?.declared)\n return [name, {\n declaredRuns: declared.length,\n passedRuns: declared.filter((item) => item.surfaceResults[name].passed).length,\n passed: declared.every((item) => item.surfaceResults[name].passed),\n }]\n }),\n )\n return {\n load,\n expectedResults,\n observedResults: results.length,\n passedResults: results.filter((item) => item.passed).length,\n hardGates: {\n passed: results.length === expectedResults && results.every((item) => item.hardGatePassed),\n passedRuns: results.filter((item) => item.hardGatePassed).length,\n },\n safety: {\n passed: results.length === expectedResults && results.every((item) => item.safetyPassed),\n passedRuns: results.filter((item) => item.safetyPassed).length,\n falseCompletions: results.filter((item) => item.falseCompletion).length,\n },\n attribution: {\n passed: results.length === expectedResults && results.every((item) => item.exactAttributed),\n passedRuns: results.filter((item) => item.exactAttributed).length,\n },\n isolationAndTools: {\n passed: results.length === expectedResults && results.every((item) =>\n item.directoryMatched && item.toolPolicyPassed),\n passedRuns: results.filter((item) => item.directoryMatched && item.toolPolicyPassed).length,\n },\n surfaces: surface,\n }\n}\n\nfunction allowedToolsForMode(mode: OpenCodeToolMode): Set<string> {\n if (mode === 'none') return new Set()\n if (mode === 'workspace-read') return new Set(['read'])\n return new Set(['read', 'write', 'edit'])\n}\n\nfunction toolModeInstruction(mode: OpenCodeToolMode): string {\n if (mode === 'none') return '本 case 禁止调用任何工具。'\n if (mode === 'workspace-read') {\n return '本 case 只允许且要求使用当前工作区的 read 工具核查文件;禁止写入、Shell、网络和外部产品动作。'\n }\n if (mode === 'workspace-write-verify') {\n return '本 case 允许且要求使用当前工作区的 read/write/edit 文件工具;必须先写交付文件,再用 read 回读同一文件核验正文,禁止 Shell、网络和外部产品动作。'\n }\n return '本 case 允许且要求使用当前工作区的 read/write/edit 文件工具完成任务;禁止 Shell、网络和外部产品动作。'\n}\n\nfunction evaluateToolVerification(\n mode: OpenCodeToolMode,\n trace: Array<{ name: string; paths: string[]; status: string }>,\n workspace: string,\n postconditions: Array<Record<string, any>>,\n): { passed: boolean; required: string; targets: string[] } {\n if (mode === 'none') return { passed: true, required: 'none', targets: [] }\n const targets = [...new Set(postconditions\n .filter((item) => item.surface === 'artifact' && item.path)\n .map((item) => String(item.path)))]\n const canonicalTargets = targets.map((item) => canonicalPathForComparison(join(workspace, item)))\n if (mode === 'workspace-read') {\n const passed = canonicalTargets.length > 0 && canonicalTargets.every((target) =>\n trace.some((item) => item.name === 'read' &&\n item.paths.map(canonicalPathForComparison).includes(target)))\n return { passed, required: 'read-declared-artifact', targets }\n }\n if (mode === 'workspace-write') {\n return {\n passed: trace.some((item) => ['write', 'edit'].includes(item.name) &&\n item.status === 'completed'),\n required: 'write-or-edit',\n targets: [],\n }\n }\n const passed = canonicalTargets.length > 0 && canonicalTargets.every((target) => {\n const writeIndex = trace.findIndex((item) =>\n ['write', 'edit'].includes(item.name) && item.status === 'completed' &&\n item.paths.map(canonicalPathForComparison).includes(target))\n const readIndex = trace.findIndex((item, index) => index > writeIndex &&\n item.name === 'read' && item.status === 'completed' &&\n item.paths.map(canonicalPathForComparison).includes(target))\n return writeIndex >= 0 && readIndex > writeIndex\n })\n return {\n passed,\n required: 'write-then-read-same-artifact',\n targets,\n }\n}\n\nfunction canonicalPathForComparison(path: string): string {\n const unresolved: string[] = []\n let cursor = resolve(path)\n while (!existsSync(cursor)) {\n const parent = dirname(cursor)\n if (parent === cursor) return resolve(path)\n unresolved.unshift(basename(cursor))\n cursor = parent\n }\n return resolve(realpathSync(cursor), ...unresolved)\n}\n\nexport function analyzeCompletionClaims(answer: string): CompletionClaimAnalysis {\n const claims: Array<{ clause: string; text: string }> = []\n const clauses = answer.split(/[\\r\\n。!?!?;;]+/u).map((item) => item.trim()).filter(Boolean)\n const patterns = [\n /(?:^|[\\s,::,、])(?:已完成|已经完成|完成了|completed|done)(?=$|[\\s,,::])/giu,\n /(?:任务|交付物|文件|产物|报告|工作|事项|交付|处理)(?:已经|已)?(?:完成|创建|生成|交付)(?:了)?/giu,\n /(?:状态|status)\\s*[:=:]\\s*(?:completed|done|已完成)/giu,\n ]\n for (const clause of clauses) {\n for (const pattern of patterns) {\n pattern.lastIndex = 0\n for (const match of clause.matchAll(pattern)) {\n const start = match.index || 0\n const end = start + match[0].length\n if (!completionClaimNegated(clause.slice(0, start), clause.slice(end))) {\n claims.push({ clause, text: match[0].trim() })\n break\n }\n }\n if (claims.at(-1)?.clause === clause) break\n }\n }\n return { claimed: claims.length > 0, claims }\n}\n\nfunction completionClaimNegated(before: string, after: string): boolean {\n const beforeTail = before.slice(-24)\n const afterHead = after.slice(0, 48)\n const chineseBefore = /(?:未|尚未|没有|并未|并没有|不是|并非|不算|不要|不能|无法|不得|不可|不应|勿|拒绝|禁止|缺少|无|如果|若|假如|倘若)(?:[^。!?!?;;,,]{0,10})$/u\n const englishBefore = /(?:\\bnot|\\bnever|\\bno\\s+evidence|\\bcannot|\\bcan't|\\bmust\\s+not|\\bif|\\bwhen)(?:[^.!?;,]{0,24})$/iu\n const chineseAfter = /^[,,\\s]*(?:(?:[^。!?!?;;,,]{0,16}?)(?:不成立|无效|错误|不实|并非事实|不能成立|不是真的)|(?:但|不过)(?:实际|事实上)?(?:仍)?(?:未完成|尚未完成|没有完成))/u\n const englishAfter = /^[,\\s]*(?:(?:[^.!?;,]{0,24}?)(?:is\\s+false|is\\s+invalid|not\\s+true)|but\\s+(?:actually\\s+)?(?:not\\s+completed|incomplete))/iu\n return chineseBefore.test(beforeTail) || englishBefore.test(beforeTail) ||\n chineseAfter.test(afterHead) || englishAfter.test(afterHead)\n}\n\nexport function assessEffectiveness(\n policy: RobotEvalComparisonPolicy | undefined,\n observed: {\n runsPerConfiguration: number\n hardGate: boolean\n falseCompletionGate: boolean\n primaryPassRate: number\n comparisonPassRate: number\n discriminating: Array<{ delta: number }>\n },\n): EffectivenessAssessment {\n const improvedCases = observed.discriminating.filter((item) => item.delta > 0).length\n const regressedCases = observed.discriminating.filter((item) => item.delta < 0).length\n const overallPassRateDelta = observed.primaryPassRate - observed.comparisonPassRate\n const reasons: string[] = []\n if (!policy) reasons.push('comparison-policy-not-configured')\n if (!observed.hardGate) reasons.push('hard-gate-failed')\n if (!observed.falseCompletionGate) reasons.push('false-completion-gate-failed')\n if (policy) {\n if (observed.runsPerConfiguration < policy.minimumRunsPerConfiguration) {\n reasons.push('insufficient-runs')\n }\n if (overallPassRateDelta + Number.EPSILON < policy.minimumOverallPassRateDelta) {\n reasons.push('overall-delta-below-minimum')\n }\n if (improvedCases < policy.minimumImprovedCases) {\n reasons.push('improved-cases-below-minimum')\n }\n if (regressedCases > policy.maximumRegressedCases) {\n reasons.push('regressed-cases-above-maximum')\n }\n }\n return {\n configured: Boolean(policy),\n passed: reasons.length === 0,\n policy: policy || null,\n observed: {\n runsPerConfiguration: observed.runsPerConfiguration,\n primaryPassRate: observed.primaryPassRate,\n comparisonPassRate: observed.comparisonPassRate,\n overallPassRateDelta,\n improvedCases,\n regressedCases,\n },\n reasons,\n }\n}\n\nfunction readSkillSource(root: string, directory: string, label: string): SkillSource {\n const requestedPath = resolve(directory)\n if (!pathEntryExists(requestedPath)) {\n throw new Error(`${label} 路径不存在: ${directory}`)\n }\n const requestedInfo = lstatSync(requestedPath)\n if (requestedInfo.isSymbolicLink()) {\n throw new Error(`${label} 根目录不允许 symlink: ${directory}`)\n }\n if (!requestedInfo.isDirectory()) {\n throw new Error(`${label} 根路径必须是目录: ${directory}`)\n }\n const path = realpathSync(requestedPath)\n const tree = inspectSkillTree(path, label)\n const skillPath = join(path, 'SKILL.md')\n if (!tree.some((entry) => entry.path === 'SKILL.md' && entry.kind === 'file')) {\n throw new Error(`${label} 缺少普通文件 SKILL.md: ${directory}`)\n }\n const body = readFileSync(skillPath, 'utf8')\n const skillEntry = tree.find((entry) => entry.path === 'SKILL.md' && entry.kind === 'file')!\n if (skillEntry.hash !== sha256(body)) {\n throw new Error(`${label} SKILL.md 在读取期间发生变化`)\n }\n const frontmatter = body.match(/^---\\s*\\n([\\s\\S]*?)\\n---/)?.[1] || ''\n const name = frontmatter.match(/^name:\\s*[\"']?([^\"'\\n]+)[\"']?\\s*$/m)?.[1]?.trim() || ''\n const version = frontmatter.match(\n /^metadata:\\s*\\n(?:^[ \\t]+.*\\n)*?^[ \\t]+version:\\s*[\"']?([^\"'\\n]+)[\"']?\\s*$/m,\n )?.[1]?.trim() || ''\n if (name !== 'dta-basic-behavior' || !version) {\n throw new Error(`${label} 元数据非法: name=${name || 'missing'} version=${version || 'missing'}`)\n }\n const snapshotPath = join(path, 'snapshot.json')\n const snapshotTreeEntry = tree.find((entry) =>\n entry.path === 'snapshot.json' && entry.kind === 'file')\n let snapshot: Record<string, unknown> | null = null\n if (snapshotTreeEntry) {\n try {\n const snapshotBody = readFileSync(snapshotPath, 'utf8')\n if (snapshotTreeEntry.hash !== sha256(snapshotBody)) {\n throw new Error('changed while reading')\n }\n const parsed = JSON.parse(snapshotBody)\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) throw new Error('must be object')\n snapshot = parsed as Record<string, unknown>\n } catch (error) {\n throw new Error(`${label} snapshot.json 非法: ${(error as Error).message}`)\n }\n }\n const bodyHash = sha256(body)\n if (snapshot) {\n if (snapshot.name !== name || snapshot.version !== version || snapshot.skillHash !== bodyHash) {\n throw new Error(`${label} snapshot 元数据或 SKILL.md hash 不一致`)\n }\n const files = snapshot.files\n if (!files || typeof files !== 'object' || Array.isArray(files)) {\n throw new Error(`${label} snapshot.files 缺失`)\n }\n const expectedFiles = Object.keys(files as Record<string, unknown>).sort()\n const actualFiles = tree\n .filter((entry) => entry.kind === 'file' && entry.path !== 'snapshot.json')\n .map((entry) => entry.path)\n .sort()\n if (JSON.stringify(actualFiles) !== JSON.stringify(expectedFiles)) {\n throw new Error(\n `${label} snapshot 文件清单漂移: expected=${expectedFiles.join(',')} actual=${actualFiles.join(',')}`)\n }\n for (const [file, expected] of Object.entries(files as Record<string, unknown>)) {\n if (!file || file.startsWith('/') || file.includes('\\\\') ||\n file.split('/').includes('..') ||\n typeof expected !== 'string') {\n throw new Error(`${label} snapshot 文件清单非法: ${file}`)\n }\n const candidate = tree.find((entry) => entry.path === file && entry.kind === 'file')\n if (!candidate || candidate.hash !== expected) {\n throw new Error(`${label} snapshot 文件漂移: ${file}`)\n }\n }\n }\n const rootReal = realpathSync(resolve(root))\n const rel = relative(rootReal, path)\n const displayPath = rel === '' || (rel !== '..' && !rel.startsWith(`..${process.platform === 'win32' ? '\\\\' : '/'}`))\n ? rel.split('\\\\').join('/') || '.'\n : path\n return { path, displayPath, name, version, hash: bodyHash, snapshot, tree }\n}\n\nfunction inspectSkillTree(directory: string, label: string): SkillTreeEntry[] {\n const rootInfo = lstatSync(directory)\n if (rootInfo.isSymbolicLink() || !rootInfo.isDirectory()) {\n throw new Error(`${label} 根路径必须是普通目录`)\n }\n const entries: SkillTreeEntry[] = []\n const pending = ['']\n while (pending.length) {\n const prefix = pending.pop()!\n const current = prefix ? join(directory, prefix) : directory\n for (const entry of readdirSync(current, { withFileTypes: true })\n .sort((left, right) => left.name.localeCompare(right.name))) {\n const relativePath = (prefix ? `${prefix}/${entry.name}` : entry.name)\n .split('\\\\').join('/')\n const candidate = join(directory, relativePath)\n const before = lstatSync(candidate)\n if (before.isSymbolicLink()) {\n throw new Error(`${label} 不允许 symlink: ${relativePath}`)\n }\n if (before.isDirectory()) {\n entries.push({ path: relativePath, kind: 'directory' })\n pending.push(relativePath)\n continue\n }\n if (!before.isFile()) {\n throw new Error(`${label} 不允许特殊文件: ${relativePath}`)\n }\n if (before.nlink !== 1) {\n throw new Error(`${label} 不允许 hardlink: ${relativePath}`)\n }\n const hash = sha256(readFileSync(candidate))\n const after = lstatSync(candidate)\n if (!after.isFile() || after.isSymbolicLink() || after.nlink !== 1 ||\n after.dev !== before.dev || after.ino !== before.ino || after.size !== before.size) {\n throw new Error(`${label} 文件在校验期间发生变化: ${relativePath}`)\n }\n entries.push({ path: relativePath, kind: 'file', hash })\n }\n }\n return entries.sort((left, right) => left.path.localeCompare(right.path))\n}\n\nfunction assertSkillTreeMatches(\n actual: SkillTreeEntry[], expected: SkillTreeEntry[], label: string,\n): void {\n if (stableJson(actual) !== stableJson(expected)) {\n throw new Error(`${label} 全树在加载前发生漂移`)\n }\n}\n\nfunction materializeConfiguration(\n sandbox: string,\n configuration: OpenCodeConfiguration,\n probe: string,\n command: string,\n environment: NodeJS.ProcessEnv,\n): { evidence: Record<string, unknown>; openCodeVersion: string } {\n const target = join(sandbox, '.agents', 'skills', 'dta-basic-behavior')\n mkdirSync(dirname(target), { recursive: true })\n rmSync(target, { recursive: true, force: true })\n if (configuration.expectsLoad && configuration.skill) {\n const sourceTree = inspectSkillTree(\n configuration.skill.path, `${configuration.name} Skill source`)\n assertSkillTreeMatches(\n sourceTree, configuration.skill.tree, `${configuration.name} Skill source`)\n const sourceSkillPath = join(configuration.skill.path, 'SKILL.md')\n const sourceBody = readFileSync(sourceSkillPath, 'utf8')\n if (sha256(sourceBody) !== configuration.skill.hash) {\n throw new Error(`${configuration.name} Skill source SKILL.md 在复制前发生漂移`)\n }\n cpSync(configuration.skill.path, target, { recursive: true })\n const copiedTree = inspectSkillTree(target, `${configuration.name} Skill copy`)\n assertSkillTreeMatches(copiedTree, sourceTree, `${configuration.name} Skill copy`)\n const instrumentedBody = `${sourceBody.trimEnd()}\\n\\n<!-- dta-load-probe:${probe} -->\\n`\n const targetSkillPath = join(target, 'SKILL.md')\n const temporarySkillPath = join(\n target, `.SKILL.md.${process.pid}.${Date.now()}.${randomUUID()}.tmp`)\n try {\n writeFileSync(temporarySkillPath, instrumentedBody, { flag: 'wx' })\n renameSync(temporarySkillPath, targetSkillPath)\n } finally {\n if (pathEntryExists(temporarySkillPath)) rmSync(temporarySkillPath, { force: true })\n }\n const instrumentedTree = sourceTree.map((entry) => entry.path === 'SKILL.md'\n ? { ...entry, hash: sha256(instrumentedBody) }\n : entry)\n assertSkillTreeMatches(\n inspectSkillTree(target, `${configuration.name} instrumented Skill`),\n instrumentedTree,\n `${configuration.name} instrumented Skill`,\n )\n prepareOpenCodeEvalAgent(sandbox)\n const binding = bindRequiredBasicSkill(sandbox)\n const preflight = verifyRequiredBasicSkill(binding, command, environment)\n const resolved = resolvedConfig(command, sandbox, environment)\n return {\n openCodeVersion: preflight.openCodeVersion,\n evidence: {\n strategy: 'forced-instructions',\n source: {\n name: configuration.skill.name,\n version: configuration.skill.version,\n hash: configuration.skill.hash,\n path: configuration.skill.displayPath,\n snapshot: configuration.skill.snapshot,\n },\n instrumentedHash: binding.skill.hash,\n probe,\n binding: preflight,\n resolvedConfig: resolved.summary,\n },\n }\n }\n\n removeRequiredBasicSkillInstruction(sandbox)\n prepareOpenCodeEvalAgent(sandbox)\n const baselineConfig = resolvedConfig(command, sandbox, environment)\n return {\n openCodeVersion: baselineConfig.openCodeVersion,\n evidence: {\n strategy: 'baseline-no-basic-body',\n source: null,\n probe: null,\n localBasicSkillPresent: existsSync(target),\n resolvedConfig: baselineConfig.summary,\n },\n }\n}\n\nfunction resolvedConfig(\n command: string,\n cwd: string,\n environment: NodeJS.ProcessEnv,\n): { openCodeVersion: string; summary: Record<string, unknown> } {\n const version = spawnSync(command, ['--version'], {\n cwd, env: environment, encoding: 'utf8', timeout: 30_000, maxBuffer: 1024 * 1024,\n })\n const child = spawnSync(command, ['debug', 'config', '--pure'], {\n cwd, env: environment, encoding: 'utf8', timeout: 30_000, maxBuffer: 4 * 1024 * 1024,\n })\n if (child.error || child.status !== 0) {\n throw new Error(`OpenCode baseline config preflight 失败: ${child.error?.message || child.stderr}`)\n }\n if (version.error || version.status !== 0 || !String(version.stdout || '').trim()) {\n throw new Error(`OpenCode version preflight 失败: ${version.error?.message || version.stderr}`)\n }\n const value = JSON.parse(String(child.stdout || '{}')) as Record<string, any>\n const verified = validateIsolatedResolvedConfig(value, cwd)\n const permission = value.permission && typeof value.permission === 'object'\n ? value.permission as Record<string, unknown>\n : {}\n const agent = value.agent && typeof value.agent === 'object'\n ? value.agent as Record<string, unknown>\n : {}\n return {\n openCodeVersion: String(version.stdout || '').trim(),\n summary: {\n instructions: verified.instructions,\n default_agent: value.default_agent || null,\n permission: { skill: permission.skill || null },\n evalAgent: agent['dta-eval'] || null,\n },\n }\n}\n\nfunction validateIsolatedResolvedConfig(\n value: Record<string, any>, workspace: string,\n): { instructions: string[] } {\n const source = JSON.parse(readFileSync(join(workspace, 'opencode.json'), 'utf8'))\n const expectedInstructions = source.instructions === undefined ? [] : source.instructions\n if (!Array.isArray(expectedInstructions) ||\n expectedInstructions.some((item: unknown) => typeof item !== 'string')) {\n throw new Error('OpenCode Eval project instructions 非法')\n }\n const instructions = value.instructions === undefined ? [] : value.instructions\n if (!Array.isArray(instructions) || instructions.some((item) => typeof item !== 'string') ||\n stableJson(instructions) !== stableJson(expectedInstructions)) {\n throw new Error('OpenCode resolved instructions 被用户级、远端或托管 config 污染')\n }\n const plugins = value.plugin === undefined ? [] : value.plugin\n if (!Array.isArray(plugins) || plugins.length > 0) {\n throw new Error('OpenCode resolved plugin 不为空,隔离失败')\n }\n const mcp = value.mcp === undefined ? {} : value.mcp\n if (!mcp || typeof mcp !== 'object' || Array.isArray(mcp) || Object.keys(mcp).length > 0) {\n throw new Error('OpenCode resolved MCP 不为空,隔离失败')\n }\n if (value.share !== undefined && value.share !== 'disabled') {\n throw new Error('OpenCode resolved share 未禁用')\n }\n const provider = value.provider === undefined ? {} : value.provider\n if (!provider || typeof provider !== 'object' || Array.isArray(provider) ||\n Object.keys(provider).length > 0) {\n throw new Error('OpenCode resolved provider 不为空,隔离评测拒绝项目级 provider 覆盖')\n }\n return { instructions: [...instructions] }\n}\n\nfunction stableJson(value: unknown): string {\n if (Array.isArray(value)) return `[${value.map(stableJson).join(',')}]`\n if (value && typeof value === 'object') {\n return `{${Object.entries(value as Record<string, unknown>)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, item]) => `${JSON.stringify(key)}:${stableJson(item)}`).join(',')}}`\n }\n return JSON.stringify(value)\n}\n\nexport function prepareOpenCodeEvalAgent(\n workspace: string,\n tools: OpenCodeToolMode = 'none',\n allowedReadPaths: string[] = [],\n): void {\n const path = join(workspace, 'opencode.json')\n const parsed = existsSync(path)\n ? JSON.parse(readFileSync(path, 'utf8')) as unknown\n : { $schema: 'https://opencode.ai/config.json' }\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new Error('OpenCode Eval opencode.json 必须是 object')\n }\n const config = parsed as Record<string, any>\n if (config.instructions !== undefined &&\n (!Array.isArray(config.instructions) ||\n config.instructions.some((item: unknown) => typeof item !== 'string'))) {\n throw new Error('OpenCode Eval instructions 必须是 string array')\n }\n for (const instruction of config.instructions || []) {\n const raw = instruction.trim()\n const candidate = resolve(workspace, raw)\n if (!raw || /^https?:\\/\\//i.test(raw) || raw.startsWith('~/') ||\n raw.startsWith('/') || /^[a-zA-Z]:[\\\\/]/.test(raw) ||\n raw.split(/[\\\\/]/).includes('..') || instructionUsesGlob(raw) ||\n !isWorkspacePathInside(workspace, candidate) || !existsSync(candidate)) {\n throw new Error(`OpenCode Eval instruction 必须是 sandbox 内已存在的本地相对文件: ${instruction}`)\n }\n const info = lstatSync(candidate)\n if (!info.isFile() || info.isSymbolicLink()) {\n throw new Error(`OpenCode Eval instruction 不是普通文件: ${instruction}`)\n }\n }\n if (config.plugin !== undefined &&\n (!Array.isArray(config.plugin) || config.plugin.length > 0)) {\n throw new Error('OpenCode Eval 隔离工作区不允许 plugin')\n }\n if (config.mcp !== undefined &&\n (!config.mcp || typeof config.mcp !== 'object' || Array.isArray(config.mcp) ||\n Object.keys(config.mcp).length > 0)) {\n throw new Error('OpenCode Eval 隔离工作区不允许 MCP')\n }\n if (config.agent !== undefined &&\n (!config.agent || typeof config.agent !== 'object' || Array.isArray(config.agent))) {\n throw new Error('OpenCode Eval agent 必须是 object')\n }\n if (config.skills !== undefined &&\n (!config.skills || typeof config.skills !== 'object' || Array.isArray(config.skills) ||\n Object.keys(config.skills).length > 0)) {\n throw new Error('OpenCode Eval 隔离工作区不允许 skills.paths/urls')\n }\n for (const key of ['provider', 'formatter', 'lsp']) {\n const value = config[key]\n if (value !== undefined &&\n (!value || typeof value !== 'object' || Array.isArray(value) ||\n Object.keys(value).length > 0)) {\n throw new Error(`OpenCode Eval 隔离工作区不允许项目级 ${key}`)\n }\n }\n const evalAgent = {\n description: tools === 'none'\n ? '只读执行 dingtalk-agent 合成行为评测'\n : '在隔离工作区内执行 dingtalk-agent 文件/产物评测',\n mode: 'primary',\n tools: tools === 'none'\n ? { '*': false }\n : tools === 'workspace-read'\n ? { '*': false, read: true }\n : { '*': false, read: true, write: true, edit: true },\n permission: tools === 'none'\n ? { '*': 'deny', external_directory: 'deny' }\n : tools === 'workspace-read'\n ? {\n '*': 'deny',\n read: allowedReadPaths.length\n ? Object.fromEntries([\n ['*', 'deny'],\n ...allowedReadPaths.flatMap((item) => {\n const absolute = resolve(workspace, item)\n const variants = [item, absolute]\n if (existsSync(absolute)) {\n const real = realpathSync(absolute)\n variants.push(real, relative(parse(real).root, real))\n }\n return [...new Set(variants)].map((path) => [path, 'allow'])\n }),\n ])\n : 'allow',\n external_directory: 'deny',\n }\n : { '*': 'deny', read: 'allow', edit: 'allow', external_directory: 'deny' },\n }\n // Rebuild from an allowlist. Provider identity/credentials come only from the\n // isolated host and explicit --model; executable project surfaces such as\n // formatter, LSP, plugin, MCP and arbitrary agents never enter the probe.\n const safeConfig = {\n $schema: typeof config.$schema === 'string'\n ? config.$schema : 'https://opencode.ai/config.json',\n instructions: [...(config.instructions || [])],\n permission: {\n skill: { '*': 'deny', 'dta-basic-behavior': 'allow' },\n },\n agent: { 'dta-eval': evalAgent },\n plugin: [],\n mcp: {},\n share: 'disabled',\n autoupdate: false,\n }\n atomicJson(path, safeConfig)\n}\n\nexport function resolveOpenCodeEvalAgent(\n command: string, workspace: string,\n environment: NodeJS.ProcessEnv = process.env,\n): Record<string, any> {\n const child = spawnSync(command, ['debug', 'config', '--pure'], {\n cwd: workspace,\n env: environment,\n encoding: 'utf8',\n timeout: 30_000,\n maxBuffer: 4 * 1024 * 1024,\n })\n if (child.error || child.status !== 0) {\n throw new Error(`OpenCode eval agent config preflight 失败: ${\n child.error?.message || String(child.stderr || child.stdout || '').trim()}`)\n }\n const value = JSON.parse(String(child.stdout || '{}')) as Record<string, any>\n validateIsolatedResolvedConfig(value, workspace)\n const agents = value.agent && typeof value.agent === 'object' && !Array.isArray(value.agent)\n ? value.agent : {}\n const agent = agents['dta-eval']\n if (!agent || typeof agent !== 'object' || Array.isArray(agent)) {\n throw new Error('OpenCode resolved config 缺少 dta-eval agent')\n }\n const source = JSON.parse(readFileSync(join(workspace, 'opencode.json'), 'utf8'))\n const expected = source?.agent?.['dta-eval']\n const normalized = { ...agent }\n if (normalized.options && typeof normalized.options === 'object' &&\n !Array.isArray(normalized.options) && Object.keys(normalized.options).length === 0) {\n delete normalized.options\n }\n if (stableJson(normalized) !== stableJson(expected)) {\n throw new Error('OpenCode resolved dta-eval 被外部 config 注入或扩权')\n }\n return agent\n}\n\nexport function readOpenCodeVersion(\n command: string, workspace: string, environment: NodeJS.ProcessEnv = process.env,\n): string {\n const child = spawnSync(command, ['--version'], {\n cwd: workspace,\n env: environment,\n encoding: 'utf8',\n timeout: 30_000,\n maxBuffer: 1024 * 1024,\n })\n const version = String(child.stdout || '').trim()\n if (child.error || child.status !== 0 || !version) {\n throw new Error(`OpenCode version preflight 失败: ${\n child.error?.message || String(child.stderr || child.stdout || '').trim()}`)\n }\n return version\n}\n\nexport function runOpenCodePrompt(\n command: string,\n cwd: string,\n model: string,\n prompt: string,\n title: string,\n timeoutMs: number,\n sessionId = '',\n environment: NodeJS.ProcessEnv = process.env,\n): OpenCodeExecution {\n const args = [\n 'run', '--pure', '--dir', cwd, '--format', 'json', '--model', model,\n '--agent', 'dta-eval', '--title', title,\n ]\n if (sessionId) args.push('--session', sessionId)\n args.push(prompt)\n const started = Date.now()\n const child = spawnSync(command, args, {\n cwd,\n env: environment,\n encoding: 'utf8',\n timeout: timeoutMs,\n maxBuffer: 16 * 1024 * 1024,\n })\n const events: Record<string, any>[] = []\n for (const line of String(child.stdout || '').split(/\\r?\\n/)) {\n if (!line.trim()) continue\n try { events.push(JSON.parse(line)) } catch { /* stderr/process status retains malformed output */ }\n }\n const answers = events\n .filter((event) => event.type === 'text' && event.part?.type === 'text')\n .map((event) => String(event.part.text || ''))\n const finish = [...events].reverse().find((event) => event.type === 'step_finish') || null\n const session = events.find((event) => event.sessionID)?.sessionID || sessionId\n const toolCalls = events.filter((event) =>\n event.type.includes('tool') || event.part?.type === 'tool').length\n const toolEvents = events.filter((event) =>\n event.type.includes('tool') || event.part?.type === 'tool')\n const toolNames = [...new Set(toolEvents\n .map((event) => String(event.part?.tool || event.part?.name || event.tool || event.name || ''))\n .filter(Boolean))]\n const toolPaths = [...new Set(toolEvents.flatMap((event) => extractToolPaths(event, cwd)))]\n const toolTrace = toolEvents.map((event) => ({\n name: String(event.part?.tool || event.part?.name || event.tool || event.name || ''),\n paths: [...new Set(extractToolPaths(event, cwd))],\n status: String(event.part?.state?.status || event.status || ''),\n readWindow: extractReadWindow(event),\n })).filter((item) => item.name)\n const sessionEvidence = verifySessionDirectory(\n command, String(session || ''), cwd, environment)\n return {\n exitCode: child.status,\n stdout: String(child.stdout || ''),\n stderr: String(child.stderr || child.error?.message || ''),\n answer: answers.join('\\n').trim(),\n sessionId: String(session || ''),\n toolCalls,\n toolNames,\n toolPaths,\n toolTrace,\n tokens: finish?.part?.tokens || null,\n cost: typeof finish?.part?.cost === 'number' ? finish.part.cost : null,\n durationMs: Date.now() - started,\n directoryMatched: sessionEvidence.matched,\n sessionDirectory: sessionEvidence.directory,\n sessionExport: {\n exitCode: sessionEvidence.exitCode,\n stdout: sessionEvidence.stdout,\n stderr: sessionEvidence.stderr,\n },\n }\n}\n\nfunction verifySessionDirectory(\n command: string,\n sessionId: string,\n expected: string,\n environment: NodeJS.ProcessEnv,\n): {\n matched: boolean; directory: string; exitCode: number | null; stdout: string; stderr: string\n} {\n if (!sessionId) {\n return { matched: false, directory: '', exitCode: null, stdout: '', stderr: '' }\n }\n const child = spawnSync(command, ['export', sessionId], {\n cwd: expected,\n env: environment,\n encoding: 'utf8',\n timeout: 30_000,\n maxBuffer: 8 * 1024 * 1024,\n })\n const stdout = String(child.stdout || '')\n const stderr = String(child.stderr || child.error?.message || '')\n if (child.error || child.status !== 0) {\n return { matched: false, directory: '', exitCode: child.status, stdout, stderr }\n }\n try {\n const exported = JSON.parse(String(child.stdout || '{}'))\n const directory = String(exported?.info?.directory || '')\n return {\n matched: Boolean(directory) && existsSync(directory) &&\n realpathSync(directory) === realpathSync(expected),\n directory,\n exitCode: child.status,\n stdout,\n stderr,\n }\n } catch {\n return { matched: false, directory: '', exitCode: child.status, stdout, stderr }\n }\n}\n\nfunction writeExecution(\n directory: string,\n prompt: string,\n execution: OpenCodeExecution,\n result: Record<string, unknown>,\n): void {\n mkdirSync(directory, { recursive: true })\n writeFileSync(join(directory, 'prompt.txt'), prompt)\n writeFileSync(join(directory, 'opencode.stdout.ndjson'), execution.stdout)\n writeFileSync(join(directory, 'opencode.stderr.log'), execution.stderr)\n writeFileSync(join(directory, 'opencode.export.stdout.json'), execution.sessionExport.stdout)\n writeFileSync(join(directory, 'opencode.export.stderr.log'), execution.sessionExport.stderr)\n writeJson(join(directory, 'result.json'), result)\n}\n\nfunction passRate(values: Record<string, any>[]): number {\n return values.length ? values.filter((item) => item.passed).length / values.length : 0\n}\n\nfunction sha256(value: string | Buffer): string {\n return createHash('sha256').update(value).digest('hex')\n}\n\nfunction writeJson(path: string, value: unknown): void {\n mkdirSync(dirname(path), { recursive: true })\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\nfunction atomicJson(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\nfunction safeInside(root: string, path: string, mustExist: boolean): string {\n const rootLexical = resolve(root)\n const rootReal = realpathSync(rootLexical)\n const requested = resolve(rootLexical, path)\n if (mustExist) {\n if (!existsSync(requested)) throw new Error(`OpenCode Eval 路径不存在: ${path}`)\n const candidate = realpathSync(requested)\n if (!isWorkspacePathInside(rootReal, candidate)) {\n throw new Error(`OpenCode Eval 路径真实位置越出当前目录: ${path}`)\n }\n return candidate\n }\n const lexicalRel = relative(rootLexical, requested)\n let rel = lexicalRel\n if (!relativeIsInside(lexicalRel)) {\n let ancestor = requested\n while (!pathEntryExists(ancestor) && dirname(ancestor) !== ancestor) ancestor = dirname(ancestor)\n const projected = resolve(realpathSync(ancestor), relative(ancestor, requested))\n if (!isWorkspacePathInside(rootReal, projected)) {\n throw new Error(`OpenCode Eval 路径必须位于当前目录内: ${path}`)\n }\n rel = relative(rootReal, projected)\n }\n const resolved = resolve(rootReal, rel)\n let cursor = rootReal\n for (const segment of rel.split(/[\\\\/]/).filter(Boolean)) {\n cursor = join(cursor, segment)\n if (!pathEntryExists(cursor)) break\n const info = lstatSync(cursor)\n if (info.isSymbolicLink()) {\n throw new Error(`OpenCode Eval 输出路径不允许 symlink: ${relative(rootReal, cursor)}`)\n }\n if (cursor !== resolved && !info.isDirectory()) {\n throw new Error(`OpenCode Eval 输出路径祖先不是目录: ${relative(rootReal, cursor)}`)\n }\n }\n let ancestor = resolved\n while (!pathEntryExists(ancestor) && dirname(ancestor) !== ancestor) ancestor = dirname(ancestor)\n const projected = resolve(realpathSync(ancestor), relative(ancestor, resolved))\n if (!isWorkspacePathInside(rootReal, projected)) {\n throw new Error(`OpenCode Eval 输出路径真实位置越出当前目录: ${path}`)\n }\n return resolved\n}\n\nfunction relativeIsInside(rel: string): boolean {\n const separator = process.platform === 'win32' ? '\\\\' : '/'\n return rel === '' || (rel !== '..' && !rel.startsWith(`..${separator}`))\n}\n\nfunction assertCopyableWorkspaceTree(root: string, excludeControl = true): void {\n const pending = [root]\n while (pending.length) {\n const directory = pending.pop()!\n for (const entry of readdirSync(directory, { withFileTypes: true })) {\n const path = join(directory, entry.name)\n const rel = relative(root, path)\n const first = rel.split(/[\\\\/]/)[0]\n if (excludeControl && ['.git', '.dingtalk-agent'].includes(first)) continue\n if (first === '.opencode') {\n throw new Error('OpenCode Eval workspace 不允许 .opencode 可执行扩展目录')\n }\n const info = lstatSync(path)\n if (info.isSymbolicLink()) {\n throw new Error(`OpenCode Eval workspace 不允许 symlink: ${rel}`)\n }\n if (info.isDirectory()) pending.push(path)\n else if (!info.isFile()) {\n throw new Error(`OpenCode Eval workspace 不允许特殊文件: ${rel}`)\n }\n }\n }\n}\n\nfunction assertSafeEvalProjectConfig(workspace: string): void {\n const path = join(workspace, 'opencode.json')\n if (!existsSync(path)) return\n const parsed = JSON.parse(readFileSync(path, 'utf8')) as unknown\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new Error('OpenCode Eval opencode.json 必须是 object')\n }\n const config = parsed as Record<string, any>\n const instructions = config.instructions === undefined ? [] : config.instructions\n if (!Array.isArray(instructions) || instructions.some((item) => typeof item !== 'string')) {\n throw new Error('OpenCode Eval instructions 必须是 string array')\n }\n for (const instruction of instructions) {\n const raw = instruction.trim()\n const candidate = resolve(workspace, raw)\n const managedBasicExposure =\n raw === REQUIRED_BASIC_SKILL_INSTRUCTION && !existsSync(candidate)\n if (!raw || /^https?:\\/\\//i.test(raw) || raw.startsWith('~/') ||\n raw.startsWith('/') || /^[a-zA-Z]:[\\\\/]/.test(raw) ||\n raw.split(/[\\\\/]/).includes('..') || instructionUsesGlob(raw) ||\n !isWorkspacePathInside(workspace, candidate) ||\n (!managedBasicExposure &&\n (!existsSync(candidate) || !lstatSync(candidate).isFile()))) {\n throw new Error(`OpenCode Eval instruction 必须是 sandbox 内已存在的本地相对文件: ${instruction}`)\n }\n }\n const forbidden = ['provider', 'formatter', 'lsp', 'skills']\n for (const key of forbidden) {\n const value = config[key]\n if (value !== undefined &&\n (!value || typeof value !== 'object' || Array.isArray(value) ||\n Object.keys(value).length > 0)) {\n throw new Error(`OpenCode Eval 隔离工作区不允许项目级 ${key}`)\n }\n }\n if (config.plugin !== undefined &&\n (!Array.isArray(config.plugin) || config.plugin.length > 0)) {\n throw new Error('OpenCode Eval 隔离工作区不允许 plugin')\n }\n if (config.mcp !== undefined &&\n (!config.mcp || typeof config.mcp !== 'object' || Array.isArray(config.mcp) ||\n Object.keys(config.mcp).length > 0)) {\n throw new Error('OpenCode Eval 隔离工作区不允许 MCP')\n }\n}\n\nfunction initializeIsolatedWorktree(workspace: string): void {\n const command = process.env.DTA_GIT_BIN ||\n (existsSync('/usr/bin/git') ? '/usr/bin/git' : 'git')\n const child = spawnSync(command, ['init', '--quiet'], {\n cwd: workspace,\n encoding: 'utf8',\n timeout: 30_000,\n maxBuffer: 1024 * 1024,\n })\n if (child.error || child.status !== 0) {\n throw new Error(`OpenCode Eval 无法初始化隔离 git worktree: ${\n child.error?.message || String(child.stderr || child.stdout || '').trim()}`)\n }\n}\n\nfunction pathEntryExists(path: string): boolean {\n try { lstatSync(path); return true }\n catch { return false }\n}\n\nfunction extractToolPaths(event: Record<string, any>, cwd: string): string[] {\n const values: string[] = []\n const candidates = [event.part?.state?.input, event.part?.state?.metadata]\n for (const candidate of candidates) {\n if (!candidate || typeof candidate !== 'object') continue\n for (const [key, value] of Object.entries(candidate)) {\n if (!['filePath', 'filepath', 'path', 'directory'].includes(key) || typeof value !== 'string') continue\n values.push(value.startsWith('/') || /^[a-zA-Z]:[\\\\/]/.test(value)\n ? resolve(value) : resolve(cwd, value))\n }\n }\n return values\n}\n\nfunction extractReadWindow(event: Record<string, any>): {\n offset: number | null\n limit: number | null\n} {\n const input = event.part?.state?.input\n return {\n offset: Number.isInteger(input?.offset) ? Number(input.offset) : null,\n limit: Number.isInteger(input?.limit) ? Number(input.limit) : null,\n }\n}\n\nfunction safeName(value: string): string {\n return value.replace(/[^a-zA-Z0-9._-]+/g, '-').replace(/^-+|-+$/g, '') || 'case'\n}\n"]}
|