@xdxer/dingtalk-agent 0.1.4-beta.9 → 0.1.4
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 +198 -0
- package/README.en.md +98 -326
- package/README.md +95 -673
- package/dist/bin/dingtalk-agent.js +200 -18
- package/dist/bin/dingtalk-agent.js.map +1 -1
- package/dist/src/agent-audit.js +1014 -89
- package/dist/src/agent-audit.js.map +1 -1
- package/dist/src/agent-enhance.js +41 -8
- package/dist/src/agent-enhance.js.map +1 -1
- package/dist/src/agent-platform.js +299 -0
- package/dist/src/agent-platform.js.map +1 -0
- package/dist/src/config.js +1 -7
- package/dist/src/config.js.map +1 -1
- package/dist/src/development-workspace.js +31 -5
- package/dist/src/development-workspace.js.map +1 -1
- package/dist/src/doctor.js +74 -15
- package/dist/src/doctor.js.map +1 -1
- package/dist/src/host-detect.js +146 -0
- package/dist/src/host-detect.js.map +1 -0
- package/dist/src/instruction-path.js +270 -0
- package/dist/src/instruction-path.js.map +1 -0
- package/dist/src/map.js +157 -0
- package/dist/src/map.js.map +1 -0
- package/dist/src/multica-deploy.js +78 -20
- package/dist/src/multica-deploy.js.map +1 -1
- package/dist/src/multica-provider.js +1 -1
- package/dist/src/multica-provider.js.map +1 -1
- package/dist/src/opencode-evals.js +710 -225
- package/dist/src/opencode-evals.js.map +1 -1
- package/dist/src/opencode-isolation.js +124 -0
- package/dist/src/opencode-isolation.js.map +1 -0
- package/dist/src/opencode-provider.js +1 -0
- package/dist/src/opencode-provider.js.map +1 -1
- package/dist/src/opencode-workspace.js +21 -10
- package/dist/src/opencode-workspace.js.map +1 -1
- package/dist/src/remote-state-evals.js +2 -1
- package/dist/src/remote-state-evals.js.map +1 -1
- package/dist/src/robot-evals.js +2 -1
- package/dist/src/robot-evals.js.map +1 -1
- package/dist/src/setup.js +6 -5
- package/dist/src/setup.js.map +1 -1
- package/dist/src/skill-manager.js +141 -12
- package/dist/src/skill-manager.js.map +1 -1
- package/dist/src/skills.js +2 -1
- package/dist/src/skills.js.map +1 -1
- package/dist/src/types.js.map +1 -1
- package/dist/src/upgrade.js +23 -27
- package/dist/src/upgrade.js.map +1 -1
- package/dist/src/version.js +73 -0
- package/dist/src/version.js.map +1 -0
- package/docs/INSTALLATION.md +3 -3
- package/docs/assets/agent-delivery-lifecycle.svg +103 -0
- package/docs/schemas/agent-platform.schema.json +13 -0
- package/docs/schemas/project.schema.json +3 -0
- package/docs/schemas/release-readiness.schema.json +2 -1
- package/evals/README.md +17 -0
- package/lab/README.md +3 -3
- package/lab/agent-eval/catalog.json +5 -5
- package/lab/agent-eval/classic-failures.json +9 -9
- package/lab/agent-eval/completion-gate-regression.json +6 -6
- package/lab/agent-eval/remote-state-workspace/opencode.json +1 -1
- package/lab/agent-eval/workspace/AGENTS.md +1 -1
- package/lab/project-workspace/fake-multica-provider.mjs +17 -6
- package/lab/project-workspace/opencode-provider-suite.json +1 -1
- package/lab/robot-eval/suite.json +1 -1
- package/lab/robot-eval/workspace/AGENTS.md +1 -1
- package/lab/schemas/agent-eval-catalog.schema.json +1 -1
- package/package.json +13 -12
- package/skills/README.md +23 -0
- package/skills/core/dingtalk-agent-compose/SKILL.md +151 -0
- package/skills/core/dingtalk-agent-compose/assets/AGENTS.template.md +35 -0
- package/skills/core/dingtalk-agent-compose/assets/role-skill.template.md +32 -0
- package/skills/core/dingtalk-agent-compose/evals/evals.json +129 -0
- package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/references/agent-definition-contract.md +3 -3
- package/skills/core/dingtalk-agent-compose/references/host-loading-contract.md +58 -0
- package/skills/core/dingtalk-agent-compose/references/hosts/claude-code.md +48 -0
- package/skills/core/dingtalk-agent-compose/references/hosts/opencode.md +77 -0
- package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/SKILL.md +31 -7
- package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/assets/eval-catalog.template.json +1 -1
- package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/evals/evals.json +22 -0
- package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/references/eval-topology.md +14 -0
- package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/references/evidence-contract.md +21 -0
- package/skills/core/dingtalk-agent-eval/references/failure-to-case.md +35 -0
- package/skills/core/dingtalk-agent-eval/references/interactive-debug-channels.md +93 -0
- package/skills/core/dingtalk-agent-eval/references/local-connector-smoke.md +75 -0
- package/skills/core/dingtalk-basic-behavior/SKILL.md +87 -0
- package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/memory-and-evolution.md +12 -0
- package/skills/core/dingtalk-basic-behavior/references/risk-authority-and-privacy.md +62 -0
- package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/task-lifecycle.md +15 -3
- package/skills/core/dingtalk-basic-behavior/references/truth-and-recovery.md +65 -0
- package/skills/platforms/deap/PLATFORM.md +3 -0
- package/skills/platforms/deap/README.md +3 -0
- package/skills/platforms/multica-dingtalk/PLATFORM.md +40 -0
- package/skills/{dingtalk-agent-boot-multica → platforms/multica-dingtalk/dingtalk-agent-boot-multica}/SKILL.md +4 -4
- package/skills/{dingtalk-agent-deploy → platforms/multica-dingtalk/dingtalk-agent-deploy-multica}/SKILL.md +1 -1
- package/skills/platforms/multica-dingtalk/multica-external/SKILL.md +282 -0
- package/skills/platforms/multica-dingtalk/multica-external/scripts/bootstrap.sh +78 -0
- package/skills/platforms/multica-dingtalk/multica-external/scripts/multica_ext.py +1180 -0
- package/skills/dingtalk-agent-compose/SKILL.md +0 -110
- package/skills/dingtalk-agent-compose/assets/AGENTS.template.md +0 -26
- package/skills/dingtalk-agent-compose/assets/role-skill.template.md +0 -24
- package/skills/dingtalk-agent-compose/evals/evals.json +0 -94
- package/skills/dingtalk-agent-compose/references/opencode-host-contract.md +0 -65
- package/skills/dingtalk-basic-behavior/SKILL.md +0 -146
- /package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/assets/agent.bindings.dingtalk-doc.template.json +0 -0
- /package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/assets/agent.bindings.local.template.json +0 -0
- /package/skills/{dingtalk-agent-compose/assets → core/dingtalk-agent-compose/assets/hosts/opencode}/opencode.template.json +0 -0
- /package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/references/storage-routing.md +0 -0
- /package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/references/scenario-taxonomy.md +0 -0
- /package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/references/storage-modes.md +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/assets/memory-candidate-proposal.json +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/assets/task-checkpoint.json +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/action-contract.md +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/event-to-behavior.md +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/perception-and-gates.md +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/runtime-modes.md +0 -0
- /package/skills/{dingtalk-agent-deploy → platforms/multica-dingtalk/dingtalk-agent-deploy-multica}/references/multica-deployment-contract.md +0 -0
- /package/skills/{dingtalk-agent-deploy → platforms/multica-dingtalk/dingtalk-agent-deploy-multica}/references/promotion-observation-contract.md +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"robot-evals.js","sourceRoot":"","sources":["../../src/robot-evals.ts"],"names":[],"mappings":"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","sourcesContent":["// 可复用机器人评测:机器人是稳定资源,connector/workspace/run 是一次性测试实例。\n// 所有真实钉钉动作仍只走 dws;本模块固定前缀、身份、模型、预算、marker、回读与 teardown。\n\nimport {\n cpSync, existsSync, mkdirSync, readFileSync, realpathSync, renameSync, writeFileSync,\n} from 'node:fs'\nimport { createHash, randomUUID } from 'node:crypto'\nimport { dirname, join, relative, resolve } from 'node:path'\nimport { resolvePackageRoot } from './package-root.js'\nimport * as dws from './dws.js'\nimport {\n bindRequiredBasicSkill, relativeBinding, verifyRequiredBasicSkill,\n type OpenCodeSkillBinding,\n} from './opencode-workspace.js'\nimport type { EvalEvidenceExpectation } from './eval-evidence.js'\n\nexport type RobotEvalLane = 'stateless' | 'stateful' | 'role'\n\nexport interface RobotPoolSlot {\n id: string\n appName: string\n name: string\n lane: RobotEvalLane\n unifiedAppId: string\n creationTaskId?: string\n robotClientId: string\n botOpenDingTalkId: string\n workspaceTemplate: string\n channel: 'opencode'\n model: string\n agentMemory: boolean\n}\n\nexport interface RobotPoolSpec {\n $schema: 'dingtalk-agent/robot-pool@1'\n prefix: string\n dws: { profile: string; expectedUserId: string }\n budgets: {\n maxRobots: number\n maxCases: number\n maxTextCharacters: number\n maxWaitSeconds: number\n }\n slots: RobotPoolSlot[]\n}\n\ntype TextExpectation = {\n id: string\n type: 'includesAny' | 'includesAll' | 'excludesAll'\n values: string[]\n gate?: 'safety' | 'quality'\n}\ntype ExactExpectation = {\n id: string; type: 'equals'; value: string; gate?: 'safety' | 'quality'\n}\ntype QuestionExpectation = {\n id: string; type: 'maxQuestions'; max: number; gate?: 'safety' | 'quality'\n}\ntype RegexExpectation = {\n id: string\n type: 'matches' | 'notMatches'\n pattern: string\n flags?: string\n gate?: 'safety' | 'quality'\n}\nexport type RobotEvalExpectation = TextExpectation | ExactExpectation |\n QuestionExpectation | RegexExpectation\n\nexport type AgentEvalScenario = 'host-loading' | 'conversation-contract' |\n 'authority-and-egress' | 'task-lifecycle' | 'memory-and-storage' |\n 'workspace-and-artifacts' | 'platform-reliability'\n\nexport interface RobotEvalComparisonPolicy {\n minimumRunsPerConfiguration: number\n minimumOverallPassRateDelta: number\n minimumImprovedCases: number\n maximumRegressedCases: number\n}\n\nexport interface RobotEvalCase {\n id: string\n category: string\n scenario?: AgentEvalScenario\n risk?: 'safety' | 'reliability' | 'quality'\n lane: RobotEvalLane\n kind?: 'load-probe' | 'behavior'\n capability?: 'agent-body' | 'basic-skill' | 'role-skill' | 'session-memory' |\n 'knowledge' | 'workspace' | 'artifact' | 'platform'\n completionClaim?: 'forbidden' | 'permitted'\n continuationOf?: string\n prompt: string\n expectations: RobotEvalExpectation[]\n execution?: {\n host: 'opencode-only'\n tools: 'none' | 'workspace-read' | 'workspace-write' | 'workspace-write-verify'\n }\n postconditions?: EvalEvidenceExpectation[]\n sourceRefs?: string[]\n manualChecks: string[]\n}\n\nexport interface RobotEvalSuite {\n $schema: 'dingtalk-agent/robot-eval-suite@1'\n id: string\n markerPrefix: string\n evidenceRoot: string\n comparisonPolicy?: RobotEvalComparisonPolicy\n cases: RobotEvalCase[]\n}\n\nexport interface RobotEvalOptions {\n lanes?: RobotEvalLane[]\n live?: boolean\n yes?: boolean\n}\n\ninterface EvalSelection {\n cases: RobotEvalCase[]\n slots: RobotPoolSlot[]\n assignments: Map<string, RobotPoolSlot>\n}\n\ninterface MaterializedRobotWorkspace {\n path: string\n binding: OpenCodeSkillBinding\n packageSourceHash: string\n}\n\nconst sleep = (ms: number) => Atomics.wait(\n new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms,\n)\n\nexport function runRobotEvaluation(\n root: string,\n poolFile: string,\n suiteFile: string,\n options: RobotEvalOptions = {},\n): Record<string, any> {\n const pool = loadRobotPool(root, poolFile)\n const suite = loadRobotEvalSuite(root, suiteFile)\n const selection = selectEvaluation(pool, suite, options.lanes || [])\n const plan = {\n suite: suite.id,\n prefix: pool.prefix,\n lanes: [...new Set(selection.cases.map((item) => item.lane))],\n robots: selection.slots.map((slot) => ({\n id: slot.id, name: slot.name, lane: slot.lane,\n appName: slot.appName,\n channel: slot.channel, model: slot.model, agentMemory: slot.agentMemory,\n workspaceTemplate: slot.workspaceTemplate,\n })),\n cases: selection.cases.map((item) => ({\n id: item.id, category: item.category, lane: item.lane,\n scenario: item.scenario || null, risk: item.risk || null,\n kind: item.kind || 'behavior', capability: item.capability || 'unspecified',\n robot: selection.assignments.get(item.id)!.name,\n continuationOf: item.continuationOf || null,\n })),\n hostContract: {\n host: 'opencode',\n requiredSkill: 'dingtalk-basic-behavior',\n loadStrategy: 'opencode.json#instructions',\n preflightBeforeMessage: true,\n },\n }\n if (!options.live) {\n return {\n $schema: 'dingtalk-agent/robot-eval-plan@1', ready: true,\n sideEffect: false, liveRequired: true, plan,\n }\n }\n if (!options.yes) {\n throw new Error('Robot Eval 会启动 connector 并以当前用户身份真实发消息;必须同时传 --live --yes')\n }\n\n const runId = `robot_eval_${Date.now()}_${randomUUID().slice(0, 8)}`\n const evidencePath = safeInside(root, join(suite.evidenceRoot, runId), false)\n mkdirSync(evidencePath, { recursive: true })\n writeJson(join(evidencePath, 'suite.json'), suite)\n writeJson(join(evidencePath, 'pool.redacted.json'), redactPool(pool))\n writeJson(join(evidencePath, 'plan.json'), plan)\n\n const workspaces = new Map<string, MaterializedRobotWorkspace>()\n const connectorReports: Record<string, any>[] = []\n const teardownReports: Record<string, any>[] = []\n const started: RobotPoolSlot[] = []\n const results: Record<string, any>[] = []\n let fatal: Error | null = null\n\n try {\n // 所有需要的 connector 先启动完成,最多 3 个可同时保持在线;随后才开始发送题目。\n for (const slot of selection.slots) {\n const workspace = materializeWorkspace(root, runId, slot)\n workspaces.set(slot.id, workspace)\n const preflight = process.env.DTA_LAB_FAKE_DWS === '1'\n ? {\n ...relativeBinding(workspace.binding),\n verification: 'static-contract',\n packageSourceHash: workspace.packageSourceHash,\n }\n : {\n ...relativeBinding(verifyRequiredBasicSkill(workspace.binding)),\n verification: 'opencode-resolved',\n packageSourceHash: workspace.packageSourceHash,\n }\n writeJson(join(evidencePath, 'workspaces', `${safeName(slot.id)}.json`), preflight)\n const report = startConnector(pool, slot, workspace.path, preflight)\n connectorReports.push(report)\n started.push(slot)\n }\n writeJson(join(evidencePath, 'connectors.json'), connectorReports)\n\n const orderedCases = [\n ...selection.cases.filter((item) => item.kind === 'load-probe'),\n ...selection.cases.filter((item) => item.kind !== 'load-probe'),\n ]\n for (const testCase of orderedCases) {\n const slot = selection.assignments.get(testCase.id)!\n const result = runCase(pool, suite, testCase, slot, evidencePath)\n results.push(result)\n if (testCase.kind === 'load-probe' && !result.passed) {\n throw new Error(`Basic Skill load probe 失败: case=${testCase.id};后续行为题已中止`)\n }\n }\n } catch (error) {\n fatal = error as Error\n writeJson(join(evidencePath, 'fatal.json'), {\n message: fatal.message, at: new Date().toISOString(),\n })\n } finally {\n for (const slot of [...started].reverse()) {\n teardownReports.push(stopConnector(pool, slot))\n }\n writeJson(join(evidencePath, 'teardown.json'), {\n status: 'complete', connectors: teardownReports,\n stoppedOnly: started.map((slot) => slot.name), completedAt: new Date().toISOString(),\n })\n }\n\n const passedCases = results.filter((item) => item.passed).length\n const selectedLoadProbes = selection.cases.filter((item) => item.kind === 'load-probe')\n const evaluatedLoadProbes = results.filter((item) => item.kind === 'load-probe')\n const loadGate = evaluatedLoadProbes.length === selectedLoadProbes.length &&\n evaluatedLoadProbes.every((item) => item.passed)\n const capabilitySummary = Object.fromEntries(\n [...new Set(results.map((item) => item.capability))].map((capability) => {\n const capabilityResults = results.filter((item) => item.capability === capability)\n return [capability, {\n total: capabilityResults.length,\n passed: capabilityResults.filter((item) => item.passed).length,\n }]\n }),\n )\n const report = {\n $schema: 'dingtalk-agent/robot-eval-report@1',\n passed: !fatal && passedCases === selection.cases.length,\n sideEffect: true,\n runId,\n evidencePath: relative(root, evidencePath).split('\\\\').join('/'),\n plan,\n summary: {\n total: selection.cases.length,\n passed: passedCases,\n failed: selection.cases.length - passedCases,\n platformVisible: results.filter((item) => item.platformVisible).length,\n exactAttributed: results.filter((item) => item.exactAttributed).length,\n loadGate,\n capabilities: capabilitySummary,\n manualReview: 'not-collected',\n },\n results,\n fatal: fatal?.message || null,\n teardown: teardownReports.map((item) => ({ slot: item.slot, stopped: item.stopped })),\n }\n writeJson(join(evidencePath, 'report.json'), report)\n return report\n}\n\nexport function loadRobotPool(root: string, file: string): RobotPoolSpec {\n const value = readJsonFile(safeInside(root, file, true), 'Robot Pool')\n return validatePool(root, value)\n}\n\nexport function loadRobotEvalSuite(root: string, file: string): RobotEvalSuite {\n const value = readJsonFile(safeInside(root, file, true), 'Robot Eval Suite')\n return validateSuite(root, value)\n}\n\nfunction selectEvaluation(\n pool: RobotPoolSpec,\n suite: RobotEvalSuite,\n lanes: RobotEvalLane[],\n): EvalSelection {\n const requested = lanes.length ? new Set(lanes) : new Set(suite.cases.map((item) => item.lane))\n const cases = suite.cases.filter((item) => requested.has(item.lane))\n if (!cases.length) throw new Error('Robot Eval 选择后没有 case')\n const localOnly = cases.filter((item) => item.execution?.host === 'opencode-only')\n if (localOnly.length) {\n throw new Error(`Robot Eval 不执行 opencode-only case: ${localOnly.map((item) => item.id).join(',')}`)\n }\n if (cases.length > pool.budgets.maxCases) {\n throw new Error(`Robot Eval case 超过预算: ${cases.length}/${pool.budgets.maxCases}`)\n }\n const assignments = new Map<string, RobotPoolSlot>()\n const selected = new Map<string, RobotPoolSlot>()\n for (const testCase of cases) {\n const matches = pool.slots.filter((slot) => slot.lane === testCase.lane)\n if (matches.length !== 1) {\n throw new Error(`lane=${testCase.lane} 必须恰好绑定一个机器人,当前 ${matches.length} 个`)\n }\n assignments.set(testCase.id, matches[0])\n selected.set(matches[0].id, matches[0])\n }\n const slots = [...selected.values()]\n if (slots.length > pool.budgets.maxRobots || slots.length > 3) {\n throw new Error(`Robot Eval 同时机器人超过上限: ${slots.length}`)\n }\n return { cases, slots, assignments }\n}\n\nfunction startConnector(\n pool: RobotPoolSpec,\n slot: RobotPoolSlot,\n workspace: string,\n basicSkillLoad: Record<string, unknown>,\n): Record<string, any> {\n const app = dws.run([\n 'dev', 'app', 'get', '--unified-app-id', slot.unifiedAppId,\n ...profileArgs(pool.dws.profile),\n ], { retries: 0 })\n const appJson = JSON.stringify(app)\n if (!appJson.includes(slot.unifiedAppId) || !appJson.includes(slot.appName)) {\n throw new Error(`机器人 ${slot.name} 的 unifiedAppId 无法按应用详情回读`)\n }\n const bot = dws.run([\n 'chat', 'bot', 'find', '--query', slot.name, '--limit', '20',\n ...profileArgs(pool.dws.profile),\n ], { retries: 0 })\n const botJson = JSON.stringify(bot)\n if (!botJson.includes(slot.name) || !botJson.includes(slot.botOpenDingTalkId)) {\n throw new Error(`机器人 ${slot.name} 的 openDingTalkId 无法按名称回读`)\n }\n const before = dws.run([\n 'dev', 'connect', 'status', '--robot-client-id', slot.robotClientId, '--json',\n ...profileArgs(pool.dws.profile),\n ], { allowFail: true, retries: 0 })\n if (connectorHealthy(before)) {\n throw new Error(`机器人 ${slot.name} 已有未知配置的 healthy connector;先显式停止,避免复用错误模型/工作区`)\n }\n let owned = false\n try {\n const start = dws.startConnectDaemon([\n 'dev', 'connect', '--unified-app-id', slot.unifiedAppId,\n '--channel', slot.channel,\n '--agent-model', slot.model,\n '--agent-workdir', workspace,\n '--allowed-users', pool.dws.expectedUserId,\n '--agent-permission-mode', 'ask',\n '--agent-approval-mode', 'ask',\n `--agent-memory=${String(slot.agentMemory)}`,\n '--reply-card=false',\n '--user-rate-limit', '10',\n '--agent-timeout', String(pool.budgets.maxWaitSeconds),\n '--daemon', '--yes',\n ...profileArgs(pool.dws.profile),\n ], { timeout: 60_000 })\n owned = true\n\n const deadline = Date.now() + 30_000\n let status: unknown = null\n while (Date.now() < deadline) {\n status = dws.run([\n 'dev', 'connect', 'status', '--robot-client-id', slot.robotClientId, '--json',\n ...profileArgs(pool.dws.profile),\n ], { allowFail: true, retries: 0 })\n if (connectorHealthy(status)) break\n sleep(1000)\n }\n if (!connectorHealthy(status)) throw new Error(`机器人 ${slot.name} connector 未进入 healthy`)\n return {\n slot: slot.name, lane: slot.lane, channel: slot.channel, model: slot.model,\n agentMemory: slot.agentMemory, workspace, started: Boolean(start), healthy: true,\n basicSkillLoad,\n }\n } catch (error) {\n // daemon 进程一旦由本次 Run 创建,就归本次 Run 所有;即使健康检查失败也要精确回收。\n if (owned) {\n stopConnector(pool, slot)\n }\n throw error\n }\n}\n\nfunction stopConnector(pool: RobotPoolSpec, slot: RobotPoolSlot): Record<string, any> {\n let command: unknown = null\n let error = ''\n try {\n command = dws.stopConnectDaemon([\n 'dev', 'connect', 'stop', '--robot-client-id', slot.robotClientId,\n '--yes', ...profileArgs(pool.dws.profile),\n ])\n } catch (caught) {\n error = String((caught as Error).message || caught)\n }\n const deadline = Date.now() + 10_000\n let status: unknown = null\n while (Date.now() < deadline) {\n status = dws.run([\n 'dev', 'connect', 'status', '--robot-client-id', slot.robotClientId, '--json',\n ...profileArgs(pool.dws.profile),\n ], { allowFail: true, retries: 0 })\n if (connectorNotRunning(status)) break\n sleep(500)\n }\n return {\n slot: slot.name,\n stopped: connectorNotRunning(status),\n commandAccepted: Boolean(command),\n status,\n error: error || null,\n }\n}\n\nfunction runCase(\n pool: RobotPoolSpec,\n suite: RobotEvalSuite,\n testCase: RobotEvalCase,\n slot: RobotPoolSlot,\n evidenceRoot: string,\n): Record<string, any> {\n const uuid = randomUUID()\n const marker = `${suite.markerPrefix}${safeName(suite.id)}-${safeName(testCase.id)}-${uuid}]`\n const outbound = `${marker}\\n评测协议:回复第一行原样保留上面的 marker,不要解释评测协议。\\n${testCase.prompt}`\n if (outbound.length > pool.budgets.maxTextCharacters) {\n throw new Error(`case=${testCase.id} 超过文本预算 ${pool.budgets.maxTextCharacters}`)\n }\n const casePath = join(evidenceRoot, 'cases', safeName(testCase.id))\n mkdirSync(casePath, { recursive: true })\n const startedAt = Date.now()\n writeJson(join(casePath, 'request.json'), {\n case: testCase, robot: slot.name, marker, outbound, uuid, startedAt: new Date(startedAt).toISOString(),\n })\n let send: unknown = null\n let readback: unknown = null\n let reply = ''\n let candidateReply = ''\n let error = ''\n try {\n send = dws.run([\n 'chat', 'message', 'send', '--open-dingtalk-id', slot.botOpenDingTalkId,\n '--text', outbound, '--uuid', uuid, '--yes', ...profileArgs(pool.dws.profile),\n ], { retries: 0 })\n const deadline = Date.now() + pool.budgets.maxWaitSeconds * 1000\n while (Date.now() < deadline) {\n readback = dws.run([\n 'chat', 'message', 'list', '--open-dingtalk-id', slot.botOpenDingTalkId,\n '--time', formatLocalTime(new Date(startedAt - 10_000)),\n '--direction', 'newer', '--limit', '100', ...profileArgs(pool.dws.profile),\n ], { retries: 0 })\n reply = extractReply(readback, marker, outbound)\n if (reply) break\n candidateReply = extractCandidateReply(readback, uuid, outbound)\n if (candidateReply) {\n error = '平台已回收到同 UUID 回复,但 marker 被改写,不能作为本 case 的精确归因证据'\n break\n }\n sleep(3000)\n }\n if (!reply && !candidateReply) {\n error = `等待 ${pool.budgets.maxWaitSeconds}s 未回收到带 marker 的机器人回复`\n }\n } catch (caught) {\n error = String((caught as Error).message || caught)\n }\n const answer = reply\n ? reply.replace(marker, '').trim()\n : stripEvalMarker(candidateReply)\n const grading = gradeAnswer(answer, testCase.expectations)\n const platformVisible = Boolean(reply || candidateReply)\n const exactAttributed = Boolean(reply)\n const attribution = exactAttributed ? 'exact-marker' : candidateReply ? 'marker-mismatch' : 'missing'\n const passed = exactAttributed && grading.every((item) => item.passed)\n const result = {\n id: testCase.id,\n category: testCase.category,\n lane: testCase.lane,\n kind: testCase.kind || 'behavior',\n capability: testCase.capability || 'unspecified',\n robot: slot.name,\n marker,\n platformVisible,\n exactAttributed,\n attribution,\n passed,\n reply: answer,\n grading,\n manualReview: testCase.manualChecks.map((text) => ({ text, status: 'not-collected' })),\n error: error || null,\n durationMs: Date.now() - startedAt,\n }\n writeJson(join(casePath, 'send.json'), send || { status: 'not-sent', error })\n writeJson(join(casePath, 'platform-readback.json'), readback || { status: 'unverified', error })\n writeJson(join(casePath, 'result.json'), result)\n return result\n}\n\nexport function gradeAnswer(\n answer: string,\n expectations: RobotEvalExpectation[],\n): Array<{ id: string; passed: boolean; detail: string }> {\n const normalized = answer.toLocaleLowerCase()\n return expectations.map((expectation) => {\n if (expectation.type === 'equals') {\n return {\n id: expectation.id,\n passed: answer.trim() === expectation.value,\n detail: `equals: actual=${JSON.stringify(answer.trim())}, expected=${JSON.stringify(expectation.value)}`,\n }\n }\n if (expectation.type === 'maxQuestions') {\n const count = (answer.match(/[??]/g) || []).length\n return {\n id: expectation.id, passed: count <= expectation.max,\n detail: `questions=${count}, max=${expectation.max}`,\n }\n }\n if (expectation.type === 'matches' || expectation.type === 'notMatches') {\n const regex = new RegExp(expectation.pattern, expectation.flags || 'u')\n const matched = regex.test(answer)\n return {\n id: expectation.id,\n passed: expectation.type === 'matches' ? matched : !matched,\n detail: `${expectation.type}: pattern=${JSON.stringify(expectation.pattern)}, matched=${matched}`,\n }\n }\n const textExpectation = expectation as TextExpectation\n const values = textExpectation.values.map((value) => value.toLocaleLowerCase())\n const hits = values.filter((value) => normalized.includes(value))\n const passed = textExpectation.type === 'includesAny'\n ? hits.length > 0\n : textExpectation.type === 'includesAll'\n ? hits.length === values.length\n : hits.length === 0\n return {\n id: textExpectation.id, passed,\n detail: `${textExpectation.type}: hits=${JSON.stringify(hits)}, expected=${JSON.stringify(textExpectation.values)}`,\n }\n })\n}\n\nfunction materializeWorkspace(\n root: string,\n runId: string,\n slot: RobotPoolSlot,\n): MaterializedRobotWorkspace {\n const source = safeInside(root, slot.workspaceTemplate, true)\n const destination = safeInside(root,\n join('.dingtalk-agent', 'robot-eval-workspaces', runId, safeName(slot.id)), false)\n mkdirSync(dirname(destination), { recursive: true })\n cpSync(source, destination, { recursive: true, errorOnExist: true })\n const packageRoot = resolvePackageRoot(import.meta.url)\n const basicSource = join(packageRoot, 'skills', 'dingtalk-basic-behavior')\n const basicTarget = join(destination, '.agents', 'skills', 'dingtalk-basic-behavior')\n mkdirSync(dirname(basicTarget), { recursive: true })\n cpSync(basicSource, basicTarget, { recursive: true, errorOnExist: true })\n const binding = bindRequiredBasicSkill(destination)\n const packageSourceHash = createHash('sha256')\n .update(readFileSync(join(basicSource, 'SKILL.md'), 'utf8')).digest('hex')\n if (packageSourceHash !== binding.skill.hash) {\n throw new Error('Robot Eval 物化后的 Basic Skill 与当前 package source hash 不一致')\n }\n return { path: destination, binding, packageSourceHash }\n}\n\nfunction validatePool(root: string, value: unknown): RobotPoolSpec {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw new Error('Robot Pool 必须是 JSON object')\n }\n const input = value as Record<string, any>\n if (input.$schema !== 'dingtalk-agent/robot-pool@1') throw new Error('Robot Pool schema 非法')\n if (!String(input.prefix || '').trim()) throw new Error('Robot Pool 缺少 prefix')\n if (!input.dws || typeof input.dws.profile !== 'string' || !String(input.dws.expectedUserId || '').trim()) {\n throw new Error('Robot Pool dws 必须固定 profile 与 expectedUserId')\n }\n const budget = input.budgets || {}\n if (!Number.isInteger(budget.maxRobots) || budget.maxRobots < 1 || budget.maxRobots > 3 ||\n !Number.isInteger(budget.maxCases) || budget.maxCases < 1 || budget.maxCases > 30 ||\n !Number.isInteger(budget.maxTextCharacters) || budget.maxTextCharacters < 1 || budget.maxTextCharacters > 4000 ||\n !Number.isInteger(budget.maxWaitSeconds) || budget.maxWaitSeconds < 10 || budget.maxWaitSeconds > 300) {\n throw new Error('Robot Pool budgets 非法(robots 1..3 / cases 1..30 / text 1..4000 / wait 10..300)')\n }\n if (!Array.isArray(input.slots) || input.slots.length < 1 || input.slots.length > 3) {\n throw new Error('Robot Pool slots 必须为 1..3 个')\n }\n const seen = {\n id: new Set(), name: new Set(), app: new Set(), task: new Set(),\n client: new Set(), bot: new Set(), lane: new Set(),\n }\n for (const slot of input.slots) {\n for (const key of ['id', 'appName', 'name', 'lane', 'unifiedAppId', 'robotClientId', 'botOpenDingTalkId', 'workspaceTemplate', 'channel', 'model']) {\n if (!String(slot?.[key] || '').trim()) throw new Error(`Robot Pool slot 缺少 ${key}`)\n }\n if (!slot.name.startsWith(input.prefix)) throw new Error(`机器人名不符合 prefix: ${slot.name}`)\n if (!['stateless', 'stateful', 'role'].includes(slot.lane)) throw new Error(`机器人 lane 非法: ${slot.lane}`)\n if (slot.channel !== 'opencode') throw new Error(`Robot Eval 只允许 opencode: ${slot.channel}`)\n if (!slot.model.startsWith('deepseek/')) throw new Error(`Robot Eval 模型必须是 deepseek/*: ${slot.model}`)\n if (typeof slot.agentMemory !== 'boolean') throw new Error(`机器人 ${slot.name} 缺少 agentMemory boolean`)\n if (slot.lane === 'stateful' && slot.agentMemory !== true) throw new Error('stateful lane 必须 agentMemory=true')\n if (slot.lane === 'stateless' && slot.agentMemory !== false) throw new Error('stateless lane 必须 agentMemory=false')\n const uniqueKeys = [\n ['id', slot.id], ['name', slot.name],\n ['app', slot.unifiedAppId],\n ...(slot.creationTaskId ? [['task', slot.creationTaskId]] : []),\n ['client', slot.robotClientId], ['bot', slot.botOpenDingTalkId], ['lane', slot.lane],\n ] as Array<[keyof typeof seen, string]>\n for (const [kind, key] of uniqueKeys) {\n if (seen[kind].has(key)) throw new Error(`Robot Pool ${kind} 重复: ${key}`)\n seen[kind].add(key)\n }\n safeInside(root, slot.workspaceTemplate, true)\n }\n return input as RobotPoolSpec\n}\n\nfunction validateSuite(root: string, value: unknown): RobotEvalSuite {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw new Error('Robot Eval Suite 必须是 JSON object')\n }\n const input = value as Record<string, any>\n if (input.$schema !== 'dingtalk-agent/robot-eval-suite@1') throw new Error('Robot Eval Suite schema 非法')\n if (!String(input.id || '').trim() || !String(input.markerPrefix || '').startsWith('[DTA-EVAL-')) {\n throw new Error('Robot Eval Suite 缺少 id 或合法 markerPrefix')\n }\n if (!String(input.evidenceRoot || '').trim()) throw new Error('Robot Eval Suite 缺少 evidenceRoot')\n safeInside(root, input.evidenceRoot, false)\n if (input.comparisonPolicy !== undefined) {\n const policy = input.comparisonPolicy\n const keys = policy && typeof policy === 'object' && !Array.isArray(policy)\n ? Object.keys(policy).sort()\n : []\n const expectedKeys = [\n 'maximumRegressedCases', 'minimumImprovedCases',\n 'minimumOverallPassRateDelta', 'minimumRunsPerConfiguration',\n ]\n if (JSON.stringify(keys) !== JSON.stringify(expectedKeys) ||\n !Number.isInteger(policy.minimumRunsPerConfiguration) ||\n policy.minimumRunsPerConfiguration < 3 || policy.minimumRunsPerConfiguration > 10 ||\n typeof policy.minimumOverallPassRateDelta !== 'number' ||\n policy.minimumOverallPassRateDelta <= 0 || policy.minimumOverallPassRateDelta > 1 ||\n !Number.isInteger(policy.minimumImprovedCases) || policy.minimumImprovedCases < 1 ||\n !Number.isInteger(policy.maximumRegressedCases) || policy.maximumRegressedCases < 0) {\n throw new Error('Robot Eval Suite comparisonPolicy 非法')\n }\n }\n if (!Array.isArray(input.cases) || input.cases.length < 1 || input.cases.length > 30) {\n throw new Error('Robot Eval Suite cases 必须为 1..30 个')\n }\n const ids = new Set<string>()\n for (const testCase of input.cases) {\n if (!/^[a-z0-9][a-z0-9._-]*$/.test(testCase?.id || '')) throw new Error(`case id 非法: ${testCase?.id}`)\n if (ids.has(testCase.id)) throw new Error(`case id 重复: ${testCase.id}`)\n ids.add(testCase.id)\n if (!['stateless', 'stateful', 'role'].includes(testCase.lane) || !String(testCase.prompt || '').trim()) {\n throw new Error(`case=${testCase.id} 缺少合法 lane/prompt`)\n }\n if (testCase.kind !== undefined && !['load-probe', 'behavior'].includes(testCase.kind)) {\n throw new Error(`case=${testCase.id} kind 非法`)\n }\n if (testCase.capability !== undefined &&\n !['agent-body', 'basic-skill', 'role-skill', 'session-memory', 'knowledge',\n 'workspace', 'artifact', 'platform'].includes(testCase.capability)) {\n throw new Error(`case=${testCase.id} capability 非法`)\n }\n if (testCase.completionClaim !== undefined &&\n !['forbidden', 'permitted'].includes(testCase.completionClaim)) {\n throw new Error(`case=${testCase.id} completionClaim 非法`)\n }\n if (testCase.scenario !== undefined &&\n !['host-loading', 'conversation-contract', 'authority-and-egress',\n 'task-lifecycle', 'memory-and-storage', 'workspace-and-artifacts',\n 'platform-reliability'].includes(testCase.scenario)) {\n throw new Error(`case=${testCase.id} scenario 非法`)\n }\n if (testCase.risk !== undefined && !['safety', 'reliability', 'quality'].includes(testCase.risk)) {\n throw new Error(`case=${testCase.id} risk 非法`)\n }\n if (testCase.kind === 'load-probe' && testCase.capability !== 'basic-skill') {\n throw new Error(`case=${testCase.id} load-probe 必须归类为 basic-skill`)\n }\n if (!Array.isArray(testCase.expectations) || !testCase.expectations.length ||\n !Array.isArray(testCase.manualChecks)) {\n throw new Error(`case=${testCase.id} 缺少 expectations/manualChecks`)\n }\n if (testCase.execution !== undefined &&\n (testCase.execution.host !== 'opencode-only' ||\n !['none', 'workspace-read', 'workspace-write',\n 'workspace-write-verify'].includes(testCase.execution.tools))) {\n throw new Error(`case=${testCase.id} execution 非法`)\n }\n if (testCase.execution?.tools !== undefined && testCase.execution.tools !== 'none' &&\n (!Array.isArray(testCase.postconditions) || !testCase.postconditions.length)) {\n throw new Error(`case=${testCase.id} 文件工具模式必须声明 postconditions`)\n }\n if (testCase.postconditions !== undefined) {\n if (!Array.isArray(testCase.postconditions) || !testCase.postconditions.length) {\n throw new Error(`case=${testCase.id} postconditions 非法`)\n }\n for (const expectation of testCase.postconditions) {\n validateEvidenceExpectation(testCase.id, expectation)\n }\n }\n if (testCase.sourceRefs !== undefined &&\n (!Array.isArray(testCase.sourceRefs) ||\n testCase.sourceRefs.some((item: unknown) => !String(item || '').trim()))) {\n throw new Error(`case=${testCase.id} sourceRefs 非法`)\n }\n for (const expectation of testCase.expectations) validateExpectation(testCase.id, expectation)\n }\n for (const testCase of input.cases) {\n if (testCase.continuationOf) {\n const parent = input.cases.find((item) => item.id === testCase.continuationOf)\n if (!parent || parent.lane !== testCase.lane || testCase.lane !== 'stateful') {\n throw new Error(`case=${testCase.id} continuationOf 必须指向同一 stateful lane 的已有 case`)\n }\n if (input.cases.indexOf(parent) >= input.cases.indexOf(testCase)) {\n throw new Error(`case=${testCase.id} continuationOf 必须位于当前 case 之前`)\n }\n }\n }\n return input as RobotEvalSuite\n}\n\nfunction validateEvidenceExpectation(caseId: string, expectation: Record<string, any>): void {\n if (!String(expectation?.id || '').trim() ||\n !['filesystem', 'workspace', 'artifact'].includes(expectation?.surface) ||\n !['pathExists', 'pathAbsent', 'textIncludesAll', 'textExcludesAll',\n 'jsonEquals', 'agentDefinition'].includes(expectation?.type)) {\n throw new Error(`case=${caseId} postcondition 非法`)\n }\n if (expectation.type === 'agentDefinition') {\n if (expectation.surface !== 'workspace' || !['ready', 'partial'].includes(expectation.status) ||\n !Array.isArray(expectation.requiredSkills)) {\n throw new Error(`case=${caseId} agentDefinition postcondition 非法`)\n }\n return\n }\n const path = String(expectation.path || '')\n if (!path || resolve('/', path) === path || path.split(/[\\\\/]/).includes('..')) {\n throw new Error(`case=${caseId} postcondition path 必须是安全相对路径`)\n }\n if (expectation.type === 'pathExists') {\n if (expectation.kind !== undefined && !['file', 'directory'].includes(expectation.kind)) {\n throw new Error(`case=${caseId} pathExists.kind 非法`)\n }\n if (expectation.minBytes !== undefined &&\n (!Number.isInteger(expectation.minBytes) || expectation.minBytes < 0)) {\n throw new Error(`case=${caseId} pathExists.minBytes 非法`)\n }\n }\n if (['textIncludesAll', 'textExcludesAll'].includes(expectation.type) &&\n (!Array.isArray(expectation.values) || !expectation.values.length ||\n expectation.values.some((item: unknown) => !String(item || '').trim()))) {\n throw new Error(`case=${caseId} text postcondition values 非法`)\n }\n if (expectation.type === 'jsonEquals' &&\n (typeof expectation.pointer !== 'string' || !expectation.pointer.startsWith('/'))) {\n throw new Error(`case=${caseId} jsonEquals.pointer 非法`)\n }\n}\n\nfunction validateExpectation(caseId: string, expectation: Record<string, any>): void {\n if (!String(expectation?.id || '').trim() ||\n !['includesAny', 'includesAll', 'excludesAll', 'equals', 'maxQuestions',\n 'matches', 'notMatches'].includes(expectation?.type)) {\n throw new Error(`case=${caseId} expectation 非法`)\n }\n if (expectation.gate !== undefined && !['safety', 'quality'].includes(expectation.gate)) {\n throw new Error(`case=${caseId} expectation.gate 非法`)\n }\n if (expectation.type === 'maxQuestions') {\n if (!Number.isInteger(expectation.max) || expectation.max < 0 || expectation.max > 3) {\n throw new Error(`case=${caseId} maxQuestions 非法`)\n }\n } else if (expectation.type === 'equals') {\n if (!String(expectation.value || '').trim()) throw new Error(`case=${caseId} equals.value 非法`)\n } else if (expectation.type === 'matches' || expectation.type === 'notMatches') {\n if (!String(expectation.pattern || '').trim() || expectation.pattern.length > 500 ||\n (expectation.flags !== undefined && !/^(?=[imu]*$)(?!.*(.).*\\1)[imu]*$/.test(expectation.flags))) {\n throw new Error(`case=${caseId} regex expectation 非法`)\n }\n try { new RegExp(expectation.pattern, expectation.flags || 'u') }\n catch { throw new Error(`case=${caseId} regex pattern 无法编译`) }\n } else if (!Array.isArray(expectation.values) || !expectation.values.length ||\n expectation.values.some((item: unknown) => !String(item || '').trim())) {\n throw new Error(`case=${caseId} expectation.values 非法`)\n }\n}\n\nfunction connectorHealthy(value: unknown): boolean {\n return /\"(?:state|status)\"\\s*:\\s*\"healthy\"/i.test(JSON.stringify(value || {}))\n}\n\nfunction connectorNotRunning(value: unknown): boolean {\n return /\"(?:state|status)\"\\s*:\\s*\"not_running\"/i.test(JSON.stringify(value || {}))\n}\n\nfunction extractReply(value: unknown, marker: string, outbound: string): string {\n const strings: string[] = []\n collectStrings(value, strings, 0)\n const unique = [...new Set(strings.map((item) => item.trim()).filter(Boolean))]\n const candidates = unique.filter((item) =>\n item.includes(marker) && item !== outbound && !item.includes('评测协议:') &&\n item.length > marker.length + 1,\n )\n const preferred = candidates.filter((item) => item.startsWith(marker) && !item.startsWith('{'))\n return (preferred.length ? preferred : candidates)\n .sort((a, b) => a.length - b.length)[0] || ''\n}\n\nfunction extractCandidateReply(value: unknown, uuid: string, outbound: string): string {\n const strings: string[] = []\n collectStrings(value, strings, 0)\n const unique = [...new Set(strings.map((item) => item.trim()).filter(Boolean))]\n const candidates = unique.filter((item) =>\n item.includes(uuid) && item !== outbound && !item.includes('评测协议:') &&\n item.length > uuid.length + 1,\n )\n const preferred = candidates.filter((item) => item.startsWith('[DTA-EVAL-') && !item.startsWith('{'))\n return (preferred.length ? preferred : candidates)\n .sort((a, b) => a.length - b.length)[0] || ''\n}\n\nfunction stripEvalMarker(value: string): string {\n return value.replace(/^\\[DTA-EVAL-[^\\]\\n]+\\]\\s*/, '').trim()\n}\n\nfunction collectStrings(value: unknown, output: string[], depth: number): void {\n if (depth > 8 || value === null || value === undefined) return\n if (typeof value === 'string') {\n output.push(value)\n if (depth < 4 && /^[\\s]*[{[]/.test(value)) {\n try { collectStrings(JSON.parse(value), output, depth + 1) } catch { /* plain text */ }\n }\n return\n }\n if (Array.isArray(value)) {\n for (const item of value) collectStrings(item, output, depth + 1)\n return\n }\n if (typeof value === 'object') {\n for (const item of Object.values(value as Record<string, unknown>)) {\n collectStrings(item, output, depth + 1)\n }\n }\n}\n\nfunction formatLocalTime(date: Date): string {\n return new Intl.DateTimeFormat('sv-SE', {\n year: 'numeric', month: '2-digit', day: '2-digit',\n hour: '2-digit', minute: '2-digit', second: '2-digit', hourCycle: 'h23',\n }).format(date)\n}\n\nfunction redactPool(pool: RobotPoolSpec): Record<string, unknown> {\n return {\n ...pool,\n dws: {\n profile: redact(pool.dws.profile),\n expectedUserId: redact(pool.dws.expectedUserId),\n },\n slots: pool.slots.map((slot) => ({\n ...slot,\n unifiedAppId: redact(slot.unifiedAppId),\n creationTaskId: redact(slot.creationTaskId || ''),\n robotClientId: redact(slot.robotClientId),\n botOpenDingTalkId: redact(slot.botOpenDingTalkId),\n })),\n }\n}\n\nfunction redact(value: string): string {\n return value ? `<redacted:${createHash('sha256').update(value).digest('hex').slice(0, 10)}>` : ''\n}\n\nfunction profileArgs(profile: string): string[] {\n return profile ? ['--profile', profile] : []\n}\n\nfunction readJsonFile(path: string, label: string): unknown {\n try { return JSON.parse(readFileSync(path, 'utf8')) }\n catch (error) { throw new Error(`${label} 不是合法 JSON: ${(error as Error).message}`) }\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 safeInside(root: string, path: string, mustExist: boolean): string {\n const rootReal = realpathSync(resolve(root))\n const candidate = resolve(rootReal, path)\n const rel = relative(rootReal, candidate)\n if (rel === '..' || rel.startsWith(`..${process.platform === 'win32' ? '\\\\' : '/'}`)) {\n throw new Error(`Robot Eval 路径必须位于当前目录内: ${path}`)\n }\n if (mustExist && !existsSync(candidate)) throw new Error(`Robot Eval 路径不存在: ${path}`)\n return candidate\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":"robot-evals.js","sourceRoot":"","sources":["../../src/robot-evals.ts"],"names":[],"mappings":"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","sourcesContent":["// 可复用机器人评测:机器人是稳定资源,connector/workspace/run 是一次性测试实例。\n// 所有真实钉钉动作仍只走 dws;本模块固定前缀、身份、模型、预算、marker、回读与 teardown。\n\nimport {\n cpSync, existsSync, mkdirSync, readFileSync, realpathSync, renameSync, writeFileSync,\n} from 'node:fs'\nimport { createHash, randomUUID } from 'node:crypto'\nimport { dirname, join, relative, resolve } from 'node:path'\nimport { resolvePackageRoot } from './package-root.js'\nimport * as dws from './dws.js'\nimport {\n bindRequiredBasicSkill, relativeBinding, verifyRequiredBasicSkill,\n type OpenCodeSkillBinding,\n} from './opencode-workspace.js'\nimport type { EvalEvidenceExpectation } from './eval-evidence.js'\nimport { bundledSkillPath } from './skill-manager.js'\n\nexport type RobotEvalLane = 'stateless' | 'stateful' | 'role'\n\nexport interface RobotPoolSlot {\n id: string\n appName: string\n name: string\n lane: RobotEvalLane\n unifiedAppId: string\n creationTaskId?: string\n robotClientId: string\n botOpenDingTalkId: string\n workspaceTemplate: string\n channel: 'opencode'\n model: string\n agentMemory: boolean\n}\n\nexport interface RobotPoolSpec {\n $schema: 'dingtalk-agent/robot-pool@1'\n prefix: string\n dws: { profile: string; expectedUserId: string }\n budgets: {\n maxRobots: number\n maxCases: number\n maxTextCharacters: number\n maxWaitSeconds: number\n }\n slots: RobotPoolSlot[]\n}\n\ntype TextExpectation = {\n id: string\n type: 'includesAny' | 'includesAll' | 'excludesAll'\n values: string[]\n gate?: 'safety' | 'quality'\n}\ntype ExactExpectation = {\n id: string; type: 'equals'; value: string; gate?: 'safety' | 'quality'\n}\ntype QuestionExpectation = {\n id: string; type: 'maxQuestions'; max: number; gate?: 'safety' | 'quality'\n}\ntype RegexExpectation = {\n id: string\n type: 'matches' | 'notMatches'\n pattern: string\n flags?: string\n gate?: 'safety' | 'quality'\n}\nexport type RobotEvalExpectation = TextExpectation | ExactExpectation |\n QuestionExpectation | RegexExpectation\n\nexport type AgentEvalScenario = 'host-loading' | 'conversation-contract' |\n 'authority-and-egress' | 'task-lifecycle' | 'memory-and-storage' |\n 'workspace-and-artifacts' | 'platform-reliability'\n\nexport interface RobotEvalComparisonPolicy {\n minimumRunsPerConfiguration: number\n minimumOverallPassRateDelta: number\n minimumImprovedCases: number\n maximumRegressedCases: number\n}\n\nexport interface RobotEvalCase {\n id: string\n category: string\n scenario?: AgentEvalScenario\n risk?: 'safety' | 'reliability' | 'quality'\n lane: RobotEvalLane\n kind?: 'load-probe' | 'behavior'\n capability?: 'agent-body' | 'basic-skill' | 'role-skill' | 'session-memory' |\n 'knowledge' | 'workspace' | 'artifact' | 'platform'\n completionClaim?: 'forbidden' | 'permitted'\n continuationOf?: string\n prompt: string\n expectations: RobotEvalExpectation[]\n execution?: {\n host: 'opencode-only'\n tools: 'none' | 'workspace-read' | 'workspace-write' | 'workspace-write-verify'\n }\n postconditions?: EvalEvidenceExpectation[]\n sourceRefs?: string[]\n manualChecks: string[]\n}\n\nexport interface RobotEvalSuite {\n $schema: 'dingtalk-agent/robot-eval-suite@1'\n id: string\n markerPrefix: string\n evidenceRoot: string\n comparisonPolicy?: RobotEvalComparisonPolicy\n cases: RobotEvalCase[]\n}\n\nexport interface RobotEvalOptions {\n lanes?: RobotEvalLane[]\n live?: boolean\n yes?: boolean\n}\n\ninterface EvalSelection {\n cases: RobotEvalCase[]\n slots: RobotPoolSlot[]\n assignments: Map<string, RobotPoolSlot>\n}\n\ninterface MaterializedRobotWorkspace {\n path: string\n binding: OpenCodeSkillBinding\n packageSourceHash: string\n}\n\nconst sleep = (ms: number) => Atomics.wait(\n new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms,\n)\n\nexport function runRobotEvaluation(\n root: string,\n poolFile: string,\n suiteFile: string,\n options: RobotEvalOptions = {},\n): Record<string, any> {\n const pool = loadRobotPool(root, poolFile)\n const suite = loadRobotEvalSuite(root, suiteFile)\n const selection = selectEvaluation(pool, suite, options.lanes || [])\n const plan = {\n suite: suite.id,\n prefix: pool.prefix,\n lanes: [...new Set(selection.cases.map((item) => item.lane))],\n robots: selection.slots.map((slot) => ({\n id: slot.id, name: slot.name, lane: slot.lane,\n appName: slot.appName,\n channel: slot.channel, model: slot.model, agentMemory: slot.agentMemory,\n workspaceTemplate: slot.workspaceTemplate,\n })),\n cases: selection.cases.map((item) => ({\n id: item.id, category: item.category, lane: item.lane,\n scenario: item.scenario || null, risk: item.risk || null,\n kind: item.kind || 'behavior', capability: item.capability || 'unspecified',\n robot: selection.assignments.get(item.id)!.name,\n continuationOf: item.continuationOf || null,\n })),\n hostContract: {\n host: 'opencode',\n requiredSkill: 'dingtalk-basic-behavior',\n loadStrategy: 'opencode.json#instructions',\n preflightBeforeMessage: true,\n },\n }\n if (!options.live) {\n return {\n $schema: 'dingtalk-agent/robot-eval-plan@1', ready: true,\n sideEffect: false, liveRequired: true, plan,\n }\n }\n if (!options.yes) {\n throw new Error('Robot Eval 会启动 connector 并以当前用户身份真实发消息;必须同时传 --live --yes')\n }\n\n const runId = `robot_eval_${Date.now()}_${randomUUID().slice(0, 8)}`\n const evidencePath = safeInside(root, join(suite.evidenceRoot, runId), false)\n mkdirSync(evidencePath, { recursive: true })\n writeJson(join(evidencePath, 'suite.json'), suite)\n writeJson(join(evidencePath, 'pool.redacted.json'), redactPool(pool))\n writeJson(join(evidencePath, 'plan.json'), plan)\n\n const workspaces = new Map<string, MaterializedRobotWorkspace>()\n const connectorReports: Record<string, any>[] = []\n const teardownReports: Record<string, any>[] = []\n const started: RobotPoolSlot[] = []\n const results: Record<string, any>[] = []\n let fatal: Error | null = null\n\n try {\n // 所有需要的 connector 先启动完成,最多 3 个可同时保持在线;随后才开始发送题目。\n for (const slot of selection.slots) {\n const workspace = materializeWorkspace(root, runId, slot)\n workspaces.set(slot.id, workspace)\n const preflight = process.env.DTA_LAB_FAKE_DWS === '1'\n ? {\n ...relativeBinding(workspace.binding),\n verification: 'static-contract',\n packageSourceHash: workspace.packageSourceHash,\n }\n : {\n ...relativeBinding(verifyRequiredBasicSkill(workspace.binding)),\n verification: 'opencode-resolved',\n packageSourceHash: workspace.packageSourceHash,\n }\n writeJson(join(evidencePath, 'workspaces', `${safeName(slot.id)}.json`), preflight)\n const report = startConnector(pool, slot, workspace.path, preflight)\n connectorReports.push(report)\n started.push(slot)\n }\n writeJson(join(evidencePath, 'connectors.json'), connectorReports)\n\n const orderedCases = [\n ...selection.cases.filter((item) => item.kind === 'load-probe'),\n ...selection.cases.filter((item) => item.kind !== 'load-probe'),\n ]\n for (const testCase of orderedCases) {\n const slot = selection.assignments.get(testCase.id)!\n const result = runCase(pool, suite, testCase, slot, evidencePath)\n results.push(result)\n if (testCase.kind === 'load-probe' && !result.passed) {\n throw new Error(`Basic Skill load probe 失败: case=${testCase.id};后续行为题已中止`)\n }\n }\n } catch (error) {\n fatal = error as Error\n writeJson(join(evidencePath, 'fatal.json'), {\n message: fatal.message, at: new Date().toISOString(),\n })\n } finally {\n for (const slot of [...started].reverse()) {\n teardownReports.push(stopConnector(pool, slot))\n }\n writeJson(join(evidencePath, 'teardown.json'), {\n status: 'complete', connectors: teardownReports,\n stoppedOnly: started.map((slot) => slot.name), completedAt: new Date().toISOString(),\n })\n }\n\n const passedCases = results.filter((item) => item.passed).length\n const selectedLoadProbes = selection.cases.filter((item) => item.kind === 'load-probe')\n const evaluatedLoadProbes = results.filter((item) => item.kind === 'load-probe')\n const loadGate = evaluatedLoadProbes.length === selectedLoadProbes.length &&\n evaluatedLoadProbes.every((item) => item.passed)\n const capabilitySummary = Object.fromEntries(\n [...new Set(results.map((item) => item.capability))].map((capability) => {\n const capabilityResults = results.filter((item) => item.capability === capability)\n return [capability, {\n total: capabilityResults.length,\n passed: capabilityResults.filter((item) => item.passed).length,\n }]\n }),\n )\n const report = {\n $schema: 'dingtalk-agent/robot-eval-report@1',\n passed: !fatal && passedCases === selection.cases.length,\n sideEffect: true,\n runId,\n evidencePath: relative(root, evidencePath).split('\\\\').join('/'),\n plan,\n summary: {\n total: selection.cases.length,\n passed: passedCases,\n failed: selection.cases.length - passedCases,\n platformVisible: results.filter((item) => item.platformVisible).length,\n exactAttributed: results.filter((item) => item.exactAttributed).length,\n loadGate,\n capabilities: capabilitySummary,\n manualReview: 'not-collected',\n },\n results,\n fatal: fatal?.message || null,\n teardown: teardownReports.map((item) => ({ slot: item.slot, stopped: item.stopped })),\n }\n writeJson(join(evidencePath, 'report.json'), report)\n return report\n}\n\nexport function loadRobotPool(root: string, file: string): RobotPoolSpec {\n const value = readJsonFile(safeInside(root, file, true), 'Robot Pool')\n return validatePool(root, value)\n}\n\nexport function loadRobotEvalSuite(root: string, file: string): RobotEvalSuite {\n const value = readJsonFile(safeInside(root, file, true), 'Robot Eval Suite')\n return validateSuite(root, value)\n}\n\nfunction selectEvaluation(\n pool: RobotPoolSpec,\n suite: RobotEvalSuite,\n lanes: RobotEvalLane[],\n): EvalSelection {\n const requested = lanes.length ? new Set(lanes) : new Set(suite.cases.map((item) => item.lane))\n const cases = suite.cases.filter((item) => requested.has(item.lane))\n if (!cases.length) throw new Error('Robot Eval 选择后没有 case')\n const localOnly = cases.filter((item) => item.execution?.host === 'opencode-only')\n if (localOnly.length) {\n throw new Error(`Robot Eval 不执行 opencode-only case: ${localOnly.map((item) => item.id).join(',')}`)\n }\n if (cases.length > pool.budgets.maxCases) {\n throw new Error(`Robot Eval case 超过预算: ${cases.length}/${pool.budgets.maxCases}`)\n }\n const assignments = new Map<string, RobotPoolSlot>()\n const selected = new Map<string, RobotPoolSlot>()\n for (const testCase of cases) {\n const matches = pool.slots.filter((slot) => slot.lane === testCase.lane)\n if (matches.length !== 1) {\n throw new Error(`lane=${testCase.lane} 必须恰好绑定一个机器人,当前 ${matches.length} 个`)\n }\n assignments.set(testCase.id, matches[0])\n selected.set(matches[0].id, matches[0])\n }\n const slots = [...selected.values()]\n if (slots.length > pool.budgets.maxRobots || slots.length > 3) {\n throw new Error(`Robot Eval 同时机器人超过上限: ${slots.length}`)\n }\n return { cases, slots, assignments }\n}\n\nfunction startConnector(\n pool: RobotPoolSpec,\n slot: RobotPoolSlot,\n workspace: string,\n basicSkillLoad: Record<string, unknown>,\n): Record<string, any> {\n const app = dws.run([\n 'dev', 'app', 'get', '--unified-app-id', slot.unifiedAppId,\n ...profileArgs(pool.dws.profile),\n ], { retries: 0 })\n const appJson = JSON.stringify(app)\n if (!appJson.includes(slot.unifiedAppId) || !appJson.includes(slot.appName)) {\n throw new Error(`机器人 ${slot.name} 的 unifiedAppId 无法按应用详情回读`)\n }\n const bot = dws.run([\n 'chat', 'bot', 'find', '--query', slot.name, '--limit', '20',\n ...profileArgs(pool.dws.profile),\n ], { retries: 0 })\n const botJson = JSON.stringify(bot)\n if (!botJson.includes(slot.name) || !botJson.includes(slot.botOpenDingTalkId)) {\n throw new Error(`机器人 ${slot.name} 的 openDingTalkId 无法按名称回读`)\n }\n const before = dws.run([\n 'dev', 'connect', 'status', '--robot-client-id', slot.robotClientId, '--json',\n ...profileArgs(pool.dws.profile),\n ], { allowFail: true, retries: 0 })\n if (connectorHealthy(before)) {\n throw new Error(`机器人 ${slot.name} 已有未知配置的 healthy connector;先显式停止,避免复用错误模型/工作区`)\n }\n let owned = false\n try {\n const start = dws.startConnectDaemon([\n 'dev', 'connect', '--unified-app-id', slot.unifiedAppId,\n '--channel', slot.channel,\n '--agent-model', slot.model,\n '--agent-workdir', workspace,\n '--allowed-users', pool.dws.expectedUserId,\n '--agent-permission-mode', 'ask',\n '--agent-approval-mode', 'ask',\n `--agent-memory=${String(slot.agentMemory)}`,\n '--reply-card=false',\n '--user-rate-limit', '10',\n '--agent-timeout', String(pool.budgets.maxWaitSeconds),\n '--daemon', '--yes',\n ...profileArgs(pool.dws.profile),\n ], { timeout: 60_000 })\n owned = true\n\n const deadline = Date.now() + 30_000\n let status: unknown = null\n while (Date.now() < deadline) {\n status = dws.run([\n 'dev', 'connect', 'status', '--robot-client-id', slot.robotClientId, '--json',\n ...profileArgs(pool.dws.profile),\n ], { allowFail: true, retries: 0 })\n if (connectorHealthy(status)) break\n sleep(1000)\n }\n if (!connectorHealthy(status)) throw new Error(`机器人 ${slot.name} connector 未进入 healthy`)\n return {\n slot: slot.name, lane: slot.lane, channel: slot.channel, model: slot.model,\n agentMemory: slot.agentMemory, workspace, started: Boolean(start), healthy: true,\n basicSkillLoad,\n }\n } catch (error) {\n // daemon 进程一旦由本次 Run 创建,就归本次 Run 所有;即使健康检查失败也要精确回收。\n if (owned) {\n stopConnector(pool, slot)\n }\n throw error\n }\n}\n\nfunction stopConnector(pool: RobotPoolSpec, slot: RobotPoolSlot): Record<string, any> {\n let command: unknown = null\n let error = ''\n try {\n command = dws.stopConnectDaemon([\n 'dev', 'connect', 'stop', '--robot-client-id', slot.robotClientId,\n '--yes', ...profileArgs(pool.dws.profile),\n ])\n } catch (caught) {\n error = String((caught as Error).message || caught)\n }\n const deadline = Date.now() + 10_000\n let status: unknown = null\n while (Date.now() < deadline) {\n status = dws.run([\n 'dev', 'connect', 'status', '--robot-client-id', slot.robotClientId, '--json',\n ...profileArgs(pool.dws.profile),\n ], { allowFail: true, retries: 0 })\n if (connectorNotRunning(status)) break\n sleep(500)\n }\n return {\n slot: slot.name,\n stopped: connectorNotRunning(status),\n commandAccepted: Boolean(command),\n status,\n error: error || null,\n }\n}\n\nfunction runCase(\n pool: RobotPoolSpec,\n suite: RobotEvalSuite,\n testCase: RobotEvalCase,\n slot: RobotPoolSlot,\n evidenceRoot: string,\n): Record<string, any> {\n const uuid = randomUUID()\n const marker = `${suite.markerPrefix}${safeName(suite.id)}-${safeName(testCase.id)}-${uuid}]`\n const outbound = `${marker}\\n评测协议:回复第一行原样保留上面的 marker,不要解释评测协议。\\n${testCase.prompt}`\n if (outbound.length > pool.budgets.maxTextCharacters) {\n throw new Error(`case=${testCase.id} 超过文本预算 ${pool.budgets.maxTextCharacters}`)\n }\n const casePath = join(evidenceRoot, 'cases', safeName(testCase.id))\n mkdirSync(casePath, { recursive: true })\n const startedAt = Date.now()\n writeJson(join(casePath, 'request.json'), {\n case: testCase, robot: slot.name, marker, outbound, uuid, startedAt: new Date(startedAt).toISOString(),\n })\n let send: unknown = null\n let readback: unknown = null\n let reply = ''\n let candidateReply = ''\n let error = ''\n try {\n send = dws.run([\n 'chat', 'message', 'send', '--open-dingtalk-id', slot.botOpenDingTalkId,\n '--text', outbound, '--uuid', uuid, '--yes', ...profileArgs(pool.dws.profile),\n ], { retries: 0 })\n const deadline = Date.now() + pool.budgets.maxWaitSeconds * 1000\n while (Date.now() < deadline) {\n readback = dws.run([\n 'chat', 'message', 'list', '--open-dingtalk-id', slot.botOpenDingTalkId,\n '--time', formatLocalTime(new Date(startedAt - 10_000)),\n '--direction', 'newer', '--limit', '100', ...profileArgs(pool.dws.profile),\n ], { retries: 0 })\n reply = extractReply(readback, marker, outbound)\n if (reply) break\n candidateReply = extractCandidateReply(readback, uuid, outbound)\n if (candidateReply) {\n error = '平台已回收到同 UUID 回复,但 marker 被改写,不能作为本 case 的精确归因证据'\n break\n }\n sleep(3000)\n }\n if (!reply && !candidateReply) {\n error = `等待 ${pool.budgets.maxWaitSeconds}s 未回收到带 marker 的机器人回复`\n }\n } catch (caught) {\n error = String((caught as Error).message || caught)\n }\n const answer = reply\n ? reply.replace(marker, '').trim()\n : stripEvalMarker(candidateReply)\n const grading = gradeAnswer(answer, testCase.expectations)\n const platformVisible = Boolean(reply || candidateReply)\n const exactAttributed = Boolean(reply)\n const attribution = exactAttributed ? 'exact-marker' : candidateReply ? 'marker-mismatch' : 'missing'\n const passed = exactAttributed && grading.every((item) => item.passed)\n const result = {\n id: testCase.id,\n category: testCase.category,\n lane: testCase.lane,\n kind: testCase.kind || 'behavior',\n capability: testCase.capability || 'unspecified',\n robot: slot.name,\n marker,\n platformVisible,\n exactAttributed,\n attribution,\n passed,\n reply: answer,\n grading,\n manualReview: testCase.manualChecks.map((text) => ({ text, status: 'not-collected' })),\n error: error || null,\n durationMs: Date.now() - startedAt,\n }\n writeJson(join(casePath, 'send.json'), send || { status: 'not-sent', error })\n writeJson(join(casePath, 'platform-readback.json'), readback || { status: 'unverified', error })\n writeJson(join(casePath, 'result.json'), result)\n return result\n}\n\nexport function gradeAnswer(\n answer: string,\n expectations: RobotEvalExpectation[],\n): Array<{ id: string; passed: boolean; detail: string }> {\n const normalized = answer.toLocaleLowerCase()\n return expectations.map((expectation) => {\n if (expectation.type === 'equals') {\n return {\n id: expectation.id,\n passed: answer.trim() === expectation.value,\n detail: `equals: actual=${JSON.stringify(answer.trim())}, expected=${JSON.stringify(expectation.value)}`,\n }\n }\n if (expectation.type === 'maxQuestions') {\n const count = (answer.match(/[??]/g) || []).length\n return {\n id: expectation.id, passed: count <= expectation.max,\n detail: `questions=${count}, max=${expectation.max}`,\n }\n }\n if (expectation.type === 'matches' || expectation.type === 'notMatches') {\n const regex = new RegExp(expectation.pattern, expectation.flags || 'u')\n const matched = regex.test(answer)\n return {\n id: expectation.id,\n passed: expectation.type === 'matches' ? matched : !matched,\n detail: `${expectation.type}: pattern=${JSON.stringify(expectation.pattern)}, matched=${matched}`,\n }\n }\n const textExpectation = expectation as TextExpectation\n const values = textExpectation.values.map((value) => value.toLocaleLowerCase())\n const hits = values.filter((value) => normalized.includes(value))\n const passed = textExpectation.type === 'includesAny'\n ? hits.length > 0\n : textExpectation.type === 'includesAll'\n ? hits.length === values.length\n : hits.length === 0\n return {\n id: textExpectation.id, passed,\n detail: `${textExpectation.type}: hits=${JSON.stringify(hits)}, expected=${JSON.stringify(textExpectation.values)}`,\n }\n })\n}\n\nfunction materializeWorkspace(\n root: string,\n runId: string,\n slot: RobotPoolSlot,\n): MaterializedRobotWorkspace {\n const source = safeInside(root, slot.workspaceTemplate, true)\n const destination = safeInside(root,\n join('.dingtalk-agent', 'robot-eval-workspaces', runId, safeName(slot.id)), false)\n mkdirSync(dirname(destination), { recursive: true })\n cpSync(source, destination, { recursive: true, errorOnExist: true })\n const packageRoot = resolvePackageRoot(import.meta.url)\n const basicSource = bundledSkillPath(packageRoot, 'dingtalk-basic-behavior')\n const basicTarget = join(destination, '.agents', 'skills', 'dingtalk-basic-behavior')\n mkdirSync(dirname(basicTarget), { recursive: true })\n cpSync(basicSource, basicTarget, { recursive: true, errorOnExist: true })\n const binding = bindRequiredBasicSkill(destination)\n const packageSourceHash = createHash('sha256')\n .update(readFileSync(join(basicSource, 'SKILL.md'), 'utf8')).digest('hex')\n if (packageSourceHash !== binding.skill.hash) {\n throw new Error('Robot Eval 物化后的 Basic Skill 与当前 package source hash 不一致')\n }\n return { path: destination, binding, packageSourceHash }\n}\n\nfunction validatePool(root: string, value: unknown): RobotPoolSpec {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw new Error('Robot Pool 必须是 JSON object')\n }\n const input = value as Record<string, any>\n if (input.$schema !== 'dingtalk-agent/robot-pool@1') throw new Error('Robot Pool schema 非法')\n if (!String(input.prefix || '').trim()) throw new Error('Robot Pool 缺少 prefix')\n if (!input.dws || typeof input.dws.profile !== 'string' || !String(input.dws.expectedUserId || '').trim()) {\n throw new Error('Robot Pool dws 必须固定 profile 与 expectedUserId')\n }\n const budget = input.budgets || {}\n if (!Number.isInteger(budget.maxRobots) || budget.maxRobots < 1 || budget.maxRobots > 3 ||\n !Number.isInteger(budget.maxCases) || budget.maxCases < 1 || budget.maxCases > 30 ||\n !Number.isInteger(budget.maxTextCharacters) || budget.maxTextCharacters < 1 || budget.maxTextCharacters > 4000 ||\n !Number.isInteger(budget.maxWaitSeconds) || budget.maxWaitSeconds < 10 || budget.maxWaitSeconds > 300) {\n throw new Error('Robot Pool budgets 非法(robots 1..3 / cases 1..30 / text 1..4000 / wait 10..300)')\n }\n if (!Array.isArray(input.slots) || input.slots.length < 1 || input.slots.length > 3) {\n throw new Error('Robot Pool slots 必须为 1..3 个')\n }\n const seen = {\n id: new Set(), name: new Set(), app: new Set(), task: new Set(),\n client: new Set(), bot: new Set(), lane: new Set(),\n }\n for (const slot of input.slots) {\n for (const key of ['id', 'appName', 'name', 'lane', 'unifiedAppId', 'robotClientId', 'botOpenDingTalkId', 'workspaceTemplate', 'channel', 'model']) {\n if (!String(slot?.[key] || '').trim()) throw new Error(`Robot Pool slot 缺少 ${key}`)\n }\n if (!slot.name.startsWith(input.prefix)) throw new Error(`机器人名不符合 prefix: ${slot.name}`)\n if (!['stateless', 'stateful', 'role'].includes(slot.lane)) throw new Error(`机器人 lane 非法: ${slot.lane}`)\n if (slot.channel !== 'opencode') throw new Error(`Robot Eval 只允许 opencode: ${slot.channel}`)\n if (!slot.model.startsWith('deepseek/')) throw new Error(`Robot Eval 模型必须是 deepseek/*: ${slot.model}`)\n if (typeof slot.agentMemory !== 'boolean') throw new Error(`机器人 ${slot.name} 缺少 agentMemory boolean`)\n if (slot.lane === 'stateful' && slot.agentMemory !== true) throw new Error('stateful lane 必须 agentMemory=true')\n if (slot.lane === 'stateless' && slot.agentMemory !== false) throw new Error('stateless lane 必须 agentMemory=false')\n const uniqueKeys = [\n ['id', slot.id], ['name', slot.name],\n ['app', slot.unifiedAppId],\n ...(slot.creationTaskId ? [['task', slot.creationTaskId]] : []),\n ['client', slot.robotClientId], ['bot', slot.botOpenDingTalkId], ['lane', slot.lane],\n ] as Array<[keyof typeof seen, string]>\n for (const [kind, key] of uniqueKeys) {\n if (seen[kind].has(key)) throw new Error(`Robot Pool ${kind} 重复: ${key}`)\n seen[kind].add(key)\n }\n safeInside(root, slot.workspaceTemplate, true)\n }\n return input as RobotPoolSpec\n}\n\nfunction validateSuite(root: string, value: unknown): RobotEvalSuite {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw new Error('Robot Eval Suite 必须是 JSON object')\n }\n const input = value as Record<string, any>\n if (input.$schema !== 'dingtalk-agent/robot-eval-suite@1') throw new Error('Robot Eval Suite schema 非法')\n if (!String(input.id || '').trim() || !String(input.markerPrefix || '').startsWith('[DTA-EVAL-')) {\n throw new Error('Robot Eval Suite 缺少 id 或合法 markerPrefix')\n }\n if (!String(input.evidenceRoot || '').trim()) throw new Error('Robot Eval Suite 缺少 evidenceRoot')\n safeInside(root, input.evidenceRoot, false)\n if (input.comparisonPolicy !== undefined) {\n const policy = input.comparisonPolicy\n const keys = policy && typeof policy === 'object' && !Array.isArray(policy)\n ? Object.keys(policy).sort()\n : []\n const expectedKeys = [\n 'maximumRegressedCases', 'minimumImprovedCases',\n 'minimumOverallPassRateDelta', 'minimumRunsPerConfiguration',\n ]\n if (JSON.stringify(keys) !== JSON.stringify(expectedKeys) ||\n !Number.isInteger(policy.minimumRunsPerConfiguration) ||\n policy.minimumRunsPerConfiguration < 3 || policy.minimumRunsPerConfiguration > 10 ||\n typeof policy.minimumOverallPassRateDelta !== 'number' ||\n policy.minimumOverallPassRateDelta <= 0 || policy.minimumOverallPassRateDelta > 1 ||\n !Number.isInteger(policy.minimumImprovedCases) || policy.minimumImprovedCases < 1 ||\n !Number.isInteger(policy.maximumRegressedCases) || policy.maximumRegressedCases < 0) {\n throw new Error('Robot Eval Suite comparisonPolicy 非法')\n }\n }\n if (!Array.isArray(input.cases) || input.cases.length < 1 || input.cases.length > 30) {\n throw new Error('Robot Eval Suite cases 必须为 1..30 个')\n }\n const ids = new Set<string>()\n for (const testCase of input.cases) {\n if (!/^[a-z0-9][a-z0-9._-]*$/.test(testCase?.id || '')) throw new Error(`case id 非法: ${testCase?.id}`)\n if (ids.has(testCase.id)) throw new Error(`case id 重复: ${testCase.id}`)\n ids.add(testCase.id)\n if (!['stateless', 'stateful', 'role'].includes(testCase.lane) || !String(testCase.prompt || '').trim()) {\n throw new Error(`case=${testCase.id} 缺少合法 lane/prompt`)\n }\n if (testCase.kind !== undefined && !['load-probe', 'behavior'].includes(testCase.kind)) {\n throw new Error(`case=${testCase.id} kind 非法`)\n }\n if (testCase.capability !== undefined &&\n !['agent-body', 'basic-skill', 'role-skill', 'session-memory', 'knowledge',\n 'workspace', 'artifact', 'platform'].includes(testCase.capability)) {\n throw new Error(`case=${testCase.id} capability 非法`)\n }\n if (testCase.completionClaim !== undefined &&\n !['forbidden', 'permitted'].includes(testCase.completionClaim)) {\n throw new Error(`case=${testCase.id} completionClaim 非法`)\n }\n if (testCase.scenario !== undefined &&\n !['host-loading', 'conversation-contract', 'authority-and-egress',\n 'task-lifecycle', 'memory-and-storage', 'workspace-and-artifacts',\n 'platform-reliability'].includes(testCase.scenario)) {\n throw new Error(`case=${testCase.id} scenario 非法`)\n }\n if (testCase.risk !== undefined && !['safety', 'reliability', 'quality'].includes(testCase.risk)) {\n throw new Error(`case=${testCase.id} risk 非法`)\n }\n if (testCase.kind === 'load-probe' && testCase.capability !== 'basic-skill') {\n throw new Error(`case=${testCase.id} load-probe 必须归类为 basic-skill`)\n }\n if (!Array.isArray(testCase.expectations) || !testCase.expectations.length ||\n !Array.isArray(testCase.manualChecks)) {\n throw new Error(`case=${testCase.id} 缺少 expectations/manualChecks`)\n }\n if (testCase.execution !== undefined &&\n (testCase.execution.host !== 'opencode-only' ||\n !['none', 'workspace-read', 'workspace-write',\n 'workspace-write-verify'].includes(testCase.execution.tools))) {\n throw new Error(`case=${testCase.id} execution 非法`)\n }\n if (testCase.execution?.tools !== undefined && testCase.execution.tools !== 'none' &&\n (!Array.isArray(testCase.postconditions) || !testCase.postconditions.length)) {\n throw new Error(`case=${testCase.id} 文件工具模式必须声明 postconditions`)\n }\n if (testCase.postconditions !== undefined) {\n if (!Array.isArray(testCase.postconditions) || !testCase.postconditions.length) {\n throw new Error(`case=${testCase.id} postconditions 非法`)\n }\n for (const expectation of testCase.postconditions) {\n validateEvidenceExpectation(testCase.id, expectation)\n }\n }\n if (testCase.sourceRefs !== undefined &&\n (!Array.isArray(testCase.sourceRefs) ||\n testCase.sourceRefs.some((item: unknown) => !String(item || '').trim()))) {\n throw new Error(`case=${testCase.id} sourceRefs 非法`)\n }\n for (const expectation of testCase.expectations) validateExpectation(testCase.id, expectation)\n }\n for (const testCase of input.cases) {\n if (testCase.continuationOf) {\n const parent = input.cases.find((item) => item.id === testCase.continuationOf)\n if (!parent || parent.lane !== testCase.lane || testCase.lane !== 'stateful') {\n throw new Error(`case=${testCase.id} continuationOf 必须指向同一 stateful lane 的已有 case`)\n }\n if (input.cases.indexOf(parent) >= input.cases.indexOf(testCase)) {\n throw new Error(`case=${testCase.id} continuationOf 必须位于当前 case 之前`)\n }\n }\n }\n return input as RobotEvalSuite\n}\n\nfunction validateEvidenceExpectation(caseId: string, expectation: Record<string, any>): void {\n if (!String(expectation?.id || '').trim() ||\n !['filesystem', 'workspace', 'artifact'].includes(expectation?.surface) ||\n !['pathExists', 'pathAbsent', 'textIncludesAll', 'textExcludesAll',\n 'jsonEquals', 'agentDefinition'].includes(expectation?.type)) {\n throw new Error(`case=${caseId} postcondition 非法`)\n }\n if (expectation.type === 'agentDefinition') {\n if (expectation.surface !== 'workspace' || !['ready', 'partial'].includes(expectation.status) ||\n !Array.isArray(expectation.requiredSkills)) {\n throw new Error(`case=${caseId} agentDefinition postcondition 非法`)\n }\n return\n }\n const path = String(expectation.path || '')\n if (!path || resolve('/', path) === path || path.split(/[\\\\/]/).includes('..')) {\n throw new Error(`case=${caseId} postcondition path 必须是安全相对路径`)\n }\n if (expectation.type === 'pathExists') {\n if (expectation.kind !== undefined && !['file', 'directory'].includes(expectation.kind)) {\n throw new Error(`case=${caseId} pathExists.kind 非法`)\n }\n if (expectation.minBytes !== undefined &&\n (!Number.isInteger(expectation.minBytes) || expectation.minBytes < 0)) {\n throw new Error(`case=${caseId} pathExists.minBytes 非法`)\n }\n }\n if (['textIncludesAll', 'textExcludesAll'].includes(expectation.type) &&\n (!Array.isArray(expectation.values) || !expectation.values.length ||\n expectation.values.some((item: unknown) => !String(item || '').trim()))) {\n throw new Error(`case=${caseId} text postcondition values 非法`)\n }\n if (expectation.type === 'jsonEquals' &&\n (typeof expectation.pointer !== 'string' || !expectation.pointer.startsWith('/'))) {\n throw new Error(`case=${caseId} jsonEquals.pointer 非法`)\n }\n}\n\nfunction validateExpectation(caseId: string, expectation: Record<string, any>): void {\n if (!String(expectation?.id || '').trim() ||\n !['includesAny', 'includesAll', 'excludesAll', 'equals', 'maxQuestions',\n 'matches', 'notMatches'].includes(expectation?.type)) {\n throw new Error(`case=${caseId} expectation 非法`)\n }\n if (expectation.gate !== undefined && !['safety', 'quality'].includes(expectation.gate)) {\n throw new Error(`case=${caseId} expectation.gate 非法`)\n }\n if (expectation.type === 'maxQuestions') {\n if (!Number.isInteger(expectation.max) || expectation.max < 0 || expectation.max > 3) {\n throw new Error(`case=${caseId} maxQuestions 非法`)\n }\n } else if (expectation.type === 'equals') {\n if (!String(expectation.value || '').trim()) throw new Error(`case=${caseId} equals.value 非法`)\n } else if (expectation.type === 'matches' || expectation.type === 'notMatches') {\n if (!String(expectation.pattern || '').trim() || expectation.pattern.length > 500 ||\n (expectation.flags !== undefined && !/^(?=[imu]*$)(?!.*(.).*\\1)[imu]*$/.test(expectation.flags))) {\n throw new Error(`case=${caseId} regex expectation 非法`)\n }\n try { new RegExp(expectation.pattern, expectation.flags || 'u') }\n catch { throw new Error(`case=${caseId} regex pattern 无法编译`) }\n } else if (!Array.isArray(expectation.values) || !expectation.values.length ||\n expectation.values.some((item: unknown) => !String(item || '').trim())) {\n throw new Error(`case=${caseId} expectation.values 非法`)\n }\n}\n\nfunction connectorHealthy(value: unknown): boolean {\n return /\"(?:state|status)\"\\s*:\\s*\"healthy\"/i.test(JSON.stringify(value || {}))\n}\n\nfunction connectorNotRunning(value: unknown): boolean {\n return /\"(?:state|status)\"\\s*:\\s*\"not_running\"/i.test(JSON.stringify(value || {}))\n}\n\nfunction extractReply(value: unknown, marker: string, outbound: string): string {\n const strings: string[] = []\n collectStrings(value, strings, 0)\n const unique = [...new Set(strings.map((item) => item.trim()).filter(Boolean))]\n const candidates = unique.filter((item) =>\n item.includes(marker) && item !== outbound && !item.includes('评测协议:') &&\n item.length > marker.length + 1,\n )\n const preferred = candidates.filter((item) => item.startsWith(marker) && !item.startsWith('{'))\n return (preferred.length ? preferred : candidates)\n .sort((a, b) => a.length - b.length)[0] || ''\n}\n\nfunction extractCandidateReply(value: unknown, uuid: string, outbound: string): string {\n const strings: string[] = []\n collectStrings(value, strings, 0)\n const unique = [...new Set(strings.map((item) => item.trim()).filter(Boolean))]\n const candidates = unique.filter((item) =>\n item.includes(uuid) && item !== outbound && !item.includes('评测协议:') &&\n item.length > uuid.length + 1,\n )\n const preferred = candidates.filter((item) => item.startsWith('[DTA-EVAL-') && !item.startsWith('{'))\n return (preferred.length ? preferred : candidates)\n .sort((a, b) => a.length - b.length)[0] || ''\n}\n\nfunction stripEvalMarker(value: string): string {\n return value.replace(/^\\[DTA-EVAL-[^\\]\\n]+\\]\\s*/, '').trim()\n}\n\nfunction collectStrings(value: unknown, output: string[], depth: number): void {\n if (depth > 8 || value === null || value === undefined) return\n if (typeof value === 'string') {\n output.push(value)\n if (depth < 4 && /^[\\s]*[{[]/.test(value)) {\n try { collectStrings(JSON.parse(value), output, depth + 1) } catch { /* plain text */ }\n }\n return\n }\n if (Array.isArray(value)) {\n for (const item of value) collectStrings(item, output, depth + 1)\n return\n }\n if (typeof value === 'object') {\n for (const item of Object.values(value as Record<string, unknown>)) {\n collectStrings(item, output, depth + 1)\n }\n }\n}\n\nfunction formatLocalTime(date: Date): string {\n return new Intl.DateTimeFormat('sv-SE', {\n year: 'numeric', month: '2-digit', day: '2-digit',\n hour: '2-digit', minute: '2-digit', second: '2-digit', hourCycle: 'h23',\n }).format(date)\n}\n\nfunction redactPool(pool: RobotPoolSpec): Record<string, unknown> {\n return {\n ...pool,\n dws: {\n profile: redact(pool.dws.profile),\n expectedUserId: redact(pool.dws.expectedUserId),\n },\n slots: pool.slots.map((slot) => ({\n ...slot,\n unifiedAppId: redact(slot.unifiedAppId),\n creationTaskId: redact(slot.creationTaskId || ''),\n robotClientId: redact(slot.robotClientId),\n botOpenDingTalkId: redact(slot.botOpenDingTalkId),\n })),\n }\n}\n\nfunction redact(value: string): string {\n return value ? `<redacted:${createHash('sha256').update(value).digest('hex').slice(0, 10)}>` : ''\n}\n\nfunction profileArgs(profile: string): string[] {\n return profile ? ['--profile', profile] : []\n}\n\nfunction readJsonFile(path: string, label: string): unknown {\n try { return JSON.parse(readFileSync(path, 'utf8')) }\n catch (error) { throw new Error(`${label} 不是合法 JSON: ${(error as Error).message}`) }\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 safeInside(root: string, path: string, mustExist: boolean): string {\n const rootReal = realpathSync(resolve(root))\n const candidate = resolve(rootReal, path)\n const rel = relative(rootReal, candidate)\n if (rel === '..' || rel.startsWith(`..${process.platform === 'win32' ? '\\\\' : '/'}`)) {\n throw new Error(`Robot Eval 路径必须位于当前目录内: ${path}`)\n }\n if (mustExist && !existsSync(candidate)) throw new Error(`Robot Eval 路径不存在: ${path}`)\n return candidate\n}\n\nfunction safeName(value: string): string {\n return value.replace(/[^a-zA-Z0-9._-]+/g, '-').replace(/^-+|-+$/g, '') || 'case'\n}\n"]}
|
package/dist/src/setup.js
CHANGED
|
@@ -3,7 +3,7 @@ import { delimiter, join } from 'node:path';
|
|
|
3
3
|
import { homedir } from 'node:os';
|
|
4
4
|
import { spawnSync } from 'node:child_process';
|
|
5
5
|
import { doctor, findExecutable } from './doctor.js';
|
|
6
|
-
import {
|
|
6
|
+
import { GLOBAL_SKILL_NAME, installBundledSkills, skillSuiteStatus, } from './skill-manager.js';
|
|
7
7
|
const PATH_MARKER_START = '# >>> dingtalk-agent PATH >>>';
|
|
8
8
|
const PATH_MARKER_END = '# <<< dingtalk-agent PATH <<<';
|
|
9
9
|
export function setup(packageRoot, options = {}) {
|
|
@@ -41,10 +41,10 @@ export function setup(packageRoot, options = {}) {
|
|
|
41
41
|
...env,
|
|
42
42
|
PATH: [binDir, env.PATH || ''].filter(Boolean).join(delimiter),
|
|
43
43
|
};
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
const suite = options.dryRun
|
|
45
|
+
? skillSuiteStatus(packageRoot, { home })
|
|
46
|
+
: installBundledSkills(packageRoot, { home, env: effectiveEnv });
|
|
47
|
+
const skill = suite.skills.find((item) => item.name === GLOBAL_SKILL_NAME) || suite.skills[0];
|
|
48
48
|
const report = doctor(packageRoot, { home, env: effectiveEnv });
|
|
49
49
|
return {
|
|
50
50
|
$schema: 'dingtalk-agent/setup@1',
|
|
@@ -60,6 +60,7 @@ export function setup(packageRoot, options = {}) {
|
|
|
60
60
|
},
|
|
61
61
|
shell,
|
|
62
62
|
skill,
|
|
63
|
+
skills: suite.skills,
|
|
63
64
|
doctor: report,
|
|
64
65
|
nextCommand: report.ready ? 'dta bootstrap --json' : 'dta doctor',
|
|
65
66
|
};
|
package/dist/src/setup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/setup.ts"],"names":[],"mappings":"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","sourcesContent":["import { appendFileSync, existsSync, mkdirSync, readFileSync } from 'node:fs'\nimport { delimiter, join } from 'node:path'\nimport { homedir } from 'node:os'\nimport { spawnSync } from 'node:child_process'\n\nimport { doctor, findExecutable, type DoctorReport } from './doctor.js'\nimport {\n installGlobalSkill, skillStatus, type GlobalSkillStatus,\n} from './skill-manager.js'\n\nconst PATH_MARKER_START = '# >>> dingtalk-agent PATH >>>'\nconst PATH_MARKER_END = '# <<< dingtalk-agent PATH <<<'\n\nexport interface SetupOptions {\n home?: string\n env?: NodeJS.ProcessEnv\n prefix?: string\n dryRun?: boolean\n writeShell?: boolean\n skipCliInstall?: boolean\n}\n\nexport interface SetupResult {\n $schema: 'dingtalk-agent/setup@1'\n dryRun: boolean\n cli: {\n installed: boolean\n skipped: boolean\n prefix: string\n binDir: string\n executable: string\n alias: string\n packageSpec: string\n }\n shell: {\n pathReady: boolean\n rcFile: string\n updated: boolean\n activateCommand: string\n }\n skill: GlobalSkillStatus\n doctor: DoctorReport\n nextCommand: string\n}\n\nexport function setup(packageRoot: string, options: SetupOptions = {}): SetupResult {\n const home = options.home || homedir()\n const env = { ...(options.env || process.env) }\n const prefix = options.prefix || join(home, '.local')\n const binDir = process.platform === 'win32' ? prefix : join(prefix, 'bin')\n const executable = join(binDir, process.platform === 'win32' ? 'dingtalk-agent.cmd' : 'dingtalk-agent')\n const alias = join(binDir, process.platform === 'win32' ? 'dta.cmd' : 'dta')\n const pkg = JSON.parse(readFileSync(join(packageRoot, 'package.json'), 'utf8'))\n const packageSpec = env.DTA_SETUP_PACKAGE_SOURCE || `${pkg.name}@${pkg.version}`\n const npm = findExecutable(process.platform === 'win32' ? 'npm.cmd' : 'npm', env) || 'npm'\n const installedVersion = existsSync(executable)\n ? readInstalledVersion(executable, env)\n : ''\n const aliasVersion = existsSync(alias) ? readInstalledVersion(alias, env) : ''\n const alreadyCurrent = installedVersion === String(pkg.version || '') && aliasVersion === installedVersion\n\n if (!options.dryRun && !options.skipCliInstall && !alreadyCurrent) {\n mkdirSync(prefix, { recursive: true })\n const run = spawnSync(npm, [\n 'install', '--global', '--prefix', prefix, '--registry', 'https://registry.npmjs.org', packageSpec,\n ], { encoding: 'utf8', env, timeout: 120_000 })\n if (run.status !== 0 || run.error) {\n throw new Error(\n `CLI 用户级安装失败: ${run.error?.message || String(run.stderr || run.stdout).trim() || `退出码 ${run.status}`}`,\n )\n }\n if (!existsSync(executable) || !existsSync(alias)) {\n throw new Error(`npm 安装完成但 CLI 入口不完整: ${executable} / ${alias}`)\n }\n }\n\n const shell = ensureShellPath(home, binDir, env, {\n dryRun: Boolean(options.dryRun),\n writeShell: options.writeShell !== false,\n })\n const effectiveEnv = {\n ...env,\n PATH: [binDir, env.PATH || ''].filter(Boolean).join(delimiter),\n }\n const beforeSkill = skillStatus(packageRoot, { home })\n const skill = options.dryRun\n ? beforeSkill\n : installGlobalSkill(packageRoot, { home, env: effectiveEnv })\n const report = doctor(packageRoot, { home, env: effectiveEnv })\n return {\n $schema: 'dingtalk-agent/setup@1',\n dryRun: Boolean(options.dryRun),\n cli: {\n installed: !options.dryRun && !options.skipCliInstall && existsSync(executable),\n skipped: Boolean(options.skipCliInstall || alreadyCurrent),\n prefix,\n binDir,\n executable,\n alias,\n packageSpec,\n },\n shell,\n skill,\n doctor: report,\n nextCommand: report.ready ? 'dta bootstrap --json' : 'dta doctor',\n }\n}\n\nfunction ensureShellPath(\n home: string,\n binDir: string,\n env: NodeJS.ProcessEnv,\n options: { dryRun: boolean; writeShell: boolean },\n) {\n const current = (env.PATH || '').split(delimiter).filter(Boolean)\n const pathReady = current.includes(binDir)\n const shell = env.SHELL || ''\n const rcFile = shell.endsWith('/zsh')\n ? join(home, '.zshrc')\n : shell.endsWith('/bash')\n ? join(home, '.bashrc')\n : ''\n const isDefaultBin = binDir === join(home, '.local', 'bin')\n const activateCommand = isDefaultBin\n ? 'export PATH=\"$HOME/.local/bin:$PATH\"'\n : `export PATH=${shellQuote(binDir)}:\"$PATH\"`\n let updated = false\n if (!pathReady && options.writeShell && rcFile) {\n const before = existsSync(rcFile) ? readFileSync(rcFile, 'utf8') : ''\n if (!before.includes(PATH_MARKER_START) && !options.dryRun) {\n const pathLine = isDefaultBin\n ? 'export PATH=\"$HOME/.local/bin:$PATH\"'\n : `export PATH=${shellQuote(binDir)}:\"$PATH\"`\n const block = `${before && !before.endsWith('\\n') ? '\\n' : ''}${PATH_MARKER_START}\\n` +\n `${pathLine}\\n${PATH_MARKER_END}\\n`\n appendFileSync(rcFile, block)\n updated = true\n }\n }\n return { pathReady, rcFile, updated, activateCommand }\n}\n\nfunction shellQuote(value: string): string {\n return `'${value.replace(/'/g, `'\"'\"'`)}'`\n}\n\nfunction readInstalledVersion(executable: string, env: NodeJS.ProcessEnv): string {\n const run = spawnSync(executable, ['--version'], { encoding: 'utf8', env, timeout: 8_000 })\n return run.status === 0 ? String(run.stdout || '').trim() : ''\n}\n"]}
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/setup.ts"],"names":[],"mappings":"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","sourcesContent":["import { appendFileSync, existsSync, mkdirSync, readFileSync } from 'node:fs'\nimport { delimiter, join } from 'node:path'\nimport { homedir } from 'node:os'\nimport { spawnSync } from 'node:child_process'\n\nimport { doctor, findExecutable, type DoctorReport } from './doctor.js'\nimport {\n GLOBAL_SKILL_NAME, installBundledSkills, skillSuiteStatus, type GlobalSkillStatus,\n} from './skill-manager.js'\n\nconst PATH_MARKER_START = '# >>> dingtalk-agent PATH >>>'\nconst PATH_MARKER_END = '# <<< dingtalk-agent PATH <<<'\n\nexport interface SetupOptions {\n home?: string\n env?: NodeJS.ProcessEnv\n prefix?: string\n dryRun?: boolean\n writeShell?: boolean\n skipCliInstall?: boolean\n}\n\nexport interface SetupResult {\n $schema: 'dingtalk-agent/setup@1'\n dryRun: boolean\n cli: {\n installed: boolean\n skipped: boolean\n prefix: string\n binDir: string\n executable: string\n alias: string\n packageSpec: string\n }\n shell: {\n pathReady: boolean\n rcFile: string\n updated: boolean\n activateCommand: string\n }\n skill: GlobalSkillStatus\n skills: GlobalSkillStatus[]\n doctor: DoctorReport\n nextCommand: string\n}\n\nexport function setup(packageRoot: string, options: SetupOptions = {}): SetupResult {\n const home = options.home || homedir()\n const env = { ...(options.env || process.env) }\n const prefix = options.prefix || join(home, '.local')\n const binDir = process.platform === 'win32' ? prefix : join(prefix, 'bin')\n const executable = join(binDir, process.platform === 'win32' ? 'dingtalk-agent.cmd' : 'dingtalk-agent')\n const alias = join(binDir, process.platform === 'win32' ? 'dta.cmd' : 'dta')\n const pkg = JSON.parse(readFileSync(join(packageRoot, 'package.json'), 'utf8'))\n const packageSpec = env.DTA_SETUP_PACKAGE_SOURCE || `${pkg.name}@${pkg.version}`\n const npm = findExecutable(process.platform === 'win32' ? 'npm.cmd' : 'npm', env) || 'npm'\n const installedVersion = existsSync(executable)\n ? readInstalledVersion(executable, env)\n : ''\n const aliasVersion = existsSync(alias) ? readInstalledVersion(alias, env) : ''\n const alreadyCurrent = installedVersion === String(pkg.version || '') && aliasVersion === installedVersion\n\n if (!options.dryRun && !options.skipCliInstall && !alreadyCurrent) {\n mkdirSync(prefix, { recursive: true })\n const run = spawnSync(npm, [\n 'install', '--global', '--prefix', prefix, '--registry', 'https://registry.npmjs.org', packageSpec,\n ], { encoding: 'utf8', env, timeout: 120_000 })\n if (run.status !== 0 || run.error) {\n throw new Error(\n `CLI 用户级安装失败: ${run.error?.message || String(run.stderr || run.stdout).trim() || `退出码 ${run.status}`}`,\n )\n }\n if (!existsSync(executable) || !existsSync(alias)) {\n throw new Error(`npm 安装完成但 CLI 入口不完整: ${executable} / ${alias}`)\n }\n }\n\n const shell = ensureShellPath(home, binDir, env, {\n dryRun: Boolean(options.dryRun),\n writeShell: options.writeShell !== false,\n })\n const effectiveEnv = {\n ...env,\n PATH: [binDir, env.PATH || ''].filter(Boolean).join(delimiter),\n }\n const suite = options.dryRun\n ? skillSuiteStatus(packageRoot, { home })\n : installBundledSkills(packageRoot, { home, env: effectiveEnv })\n const skill = suite.skills.find((item) => item.name === GLOBAL_SKILL_NAME) || suite.skills[0]\n const report = doctor(packageRoot, { home, env: effectiveEnv })\n return {\n $schema: 'dingtalk-agent/setup@1',\n dryRun: Boolean(options.dryRun),\n cli: {\n installed: !options.dryRun && !options.skipCliInstall && existsSync(executable),\n skipped: Boolean(options.skipCliInstall || alreadyCurrent),\n prefix,\n binDir,\n executable,\n alias,\n packageSpec,\n },\n shell,\n skill,\n skills: suite.skills,\n doctor: report,\n nextCommand: report.ready ? 'dta bootstrap --json' : 'dta doctor',\n }\n}\n\nfunction ensureShellPath(\n home: string,\n binDir: string,\n env: NodeJS.ProcessEnv,\n options: { dryRun: boolean; writeShell: boolean },\n) {\n const current = (env.PATH || '').split(delimiter).filter(Boolean)\n const pathReady = current.includes(binDir)\n const shell = env.SHELL || ''\n const rcFile = shell.endsWith('/zsh')\n ? join(home, '.zshrc')\n : shell.endsWith('/bash')\n ? join(home, '.bashrc')\n : ''\n const isDefaultBin = binDir === join(home, '.local', 'bin')\n const activateCommand = isDefaultBin\n ? 'export PATH=\"$HOME/.local/bin:$PATH\"'\n : `export PATH=${shellQuote(binDir)}:\"$PATH\"`\n let updated = false\n if (!pathReady && options.writeShell && rcFile) {\n const before = existsSync(rcFile) ? readFileSync(rcFile, 'utf8') : ''\n if (!before.includes(PATH_MARKER_START) && !options.dryRun) {\n const pathLine = isDefaultBin\n ? 'export PATH=\"$HOME/.local/bin:$PATH\"'\n : `export PATH=${shellQuote(binDir)}:\"$PATH\"`\n const block = `${before && !before.endsWith('\\n') ? '\\n' : ''}${PATH_MARKER_START}\\n` +\n `${pathLine}\\n${PATH_MARKER_END}\\n`\n appendFileSync(rcFile, block)\n updated = true\n }\n }\n return { pathReady, rcFile, updated, activateCommand }\n}\n\nfunction shellQuote(value: string): string {\n return `'${value.replace(/'/g, `'\"'\"'`)}'`\n}\n\nfunction readInstalledVersion(executable: string, env: NodeJS.ProcessEnv): string {\n const run = spawnSync(executable, ['--version'], { encoding: 'utf8', env, timeout: 8_000 })\n return run.status === 0 ? String(run.stdout || '').trim() : ''\n}\n"]}
|