@xdxer/dingtalk-agent 0.1.5-beta.6 → 0.1.5-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +29 -0
- package/README.en.md +6 -6
- package/README.md +6 -6
- package/dist/bin/dingtalk-agent.js +79 -28
- package/dist/bin/dingtalk-agent.js.map +1 -1
- package/dist/src/agent-audit.js +29 -25
- package/dist/src/agent-audit.js.map +1 -1
- package/dist/src/agent-definition.js +7 -3
- package/dist/src/agent-definition.js.map +1 -1
- package/dist/src/agent-enhance.js +2 -2
- package/dist/src/agent-enhance.js.map +1 -1
- package/dist/src/agent-platform.js +2 -2
- package/dist/src/agent-platform.js.map +1 -1
- package/dist/src/development-workspace.js +14 -9
- package/dist/src/development-workspace.js.map +1 -1
- package/dist/src/doctor.js +58 -7
- package/dist/src/doctor.js.map +1 -1
- package/dist/src/opencode-evals.js +6 -6
- package/dist/src/opencode-evals.js.map +1 -1
- package/dist/src/opencode-provider.js +2 -2
- package/dist/src/opencode-provider.js.map +1 -1
- package/dist/src/opencode-workspace.js +3 -3
- package/dist/src/opencode-workspace.js.map +1 -1
- package/dist/src/personal-event-evals.js +4 -2
- package/dist/src/personal-event-evals.js.map +1 -1
- package/dist/src/remote-semantic-state-live-evals.js +5 -4
- package/dist/src/remote-semantic-state-live-evals.js.map +1 -1
- package/dist/src/remote-state-evals.js +2 -2
- package/dist/src/remote-state-evals.js.map +1 -1
- package/dist/src/robot-evals.js +3 -3
- package/dist/src/robot-evals.js.map +1 -1
- package/dist/src/schedule-plan.js +1 -1
- package/dist/src/schedule-plan.js.map +1 -1
- package/dist/src/sessions.js +1 -1
- package/dist/src/sessions.js.map +1 -1
- package/dist/src/skill-manager.js +74 -13
- package/dist/src/skill-manager.js.map +1 -1
- package/dist/src/workspace.js +2 -2
- package/dist/src/workspace.js.map +1 -1
- package/docs/ARCHITECTURE.md +9 -9
- package/docs/INSTALLATION.md +6 -6
- package/docs/SELF-TEST.md +3 -3
- package/docs/schemas/project.schema.json +2 -2
- package/examples/agents/README.md +1 -1
- package/examples/agents/fde-coach/agent/AGENTS.md +1 -1
- package/examples/agents/release-manager/agent/AGENTS.md +1 -1
- package/lab/agent-eval/catalog.json +5 -5
- package/lab/agent-eval/classic-failures.json +4 -4
- package/lab/agent-eval/completion-gate-regression.json +9 -9
- package/lab/agent-eval/personal-event-live.example.json +3 -3
- package/lab/agent-eval/remote-semantic-state-live.example.json +1 -1
- package/lab/agent-eval/workspace/opencode.json +2 -2
- package/lab/project-workspace/multica-readonly.fixture.json +2 -2
- package/lab/project-workspace/opencode-provider-suite.json +2 -2
- package/lab/project-workspace/project.fixture.json +1 -1
- package/lab/robot-eval/suite.json +1 -1
- package/lab/robot-eval/workspace/AGENTS.md +1 -1
- package/lab/robot-eval/workspace/opencode.json +2 -2
- package/lab/schemas/personal-event-eval.schema.json +1 -1
- package/package.json +7 -7
- package/skills/README.md +10 -7
- package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/SKILL.md +8 -8
- package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/assets/AGENTS.template.md +1 -1
- package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/assets/hosts/opencode/opencode.template.json +2 -2
- package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/evals/evals.json +3 -3
- package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/references/host-loading-contract.md +1 -1
- package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/references/hosts/claude-code.md +1 -1
- package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/references/hosts/opencode.md +2 -2
- package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/SKILL.md +2 -2
- package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/assets/eval-catalog.template.json +1 -1
- package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/evals/evals.json +1 -1
- package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/eval-topology.md +3 -3
- package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/interactive-debug-channels.md +1 -1
- package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/SKILL.md +2 -2
- package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/event-to-behavior.md +1 -1
- package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/COMPLETENESS.md +1 -1
- package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/SKILL.md +2 -2
- package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/config-binding.md +1 -1
- package/skills/platforms/deap/PLATFORM.md +1 -1
- package/skills/platforms/multica-dingtalk/PLATFORM.md +4 -4
- package/skills/platforms/multica-dingtalk/{dingtalk-agent-deploy-multica → dta-deploy-multica}/SKILL.md +3 -3
- package/skills/platforms/multica-dingtalk/{multica-external → dta-ops-multica}/SKILL.md +5 -5
- package/skills/platforms/multica-dingtalk/{multica-external → dta-ops-multica}/scripts/bootstrap.sh +2 -2
- /package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/assets/REPOSITORY.template.md +0 -0
- /package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/assets/agent.bindings.dingtalk-doc.template.json +0 -0
- /package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/assets/agent.bindings.local.template.json +0 -0
- /package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/assets/role-skill.template.md +0 -0
- /package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/references/agent-definition-contract.md +0 -0
- /package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/references/drive-and-schedules.md +0 -0
- /package/skills/core/{dingtalk-agent-compose → dta-agent-compose}/references/storage-routing.md +0 -0
- /package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/evidence-contract.md +0 -0
- /package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/failure-to-case.md +0 -0
- /package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/local-connector-smoke.md +0 -0
- /package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/scenario-taxonomy.md +0 -0
- /package/skills/core/{dingtalk-agent-eval → dta-agent-eval}/references/storage-modes.md +0 -0
- /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/assets/memory-candidate-proposal.json +0 -0
- /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/assets/task-checkpoint.json +0 -0
- /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/action-contract.md +0 -0
- /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/memory-and-evolution.md +0 -0
- /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/perception-and-gates.md +0 -0
- /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/risk-authority-and-privacy.md +0 -0
- /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/runtime-modes.md +0 -0
- /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/task-lifecycle.md +0 -0
- /package/skills/core/{dingtalk-basic-behavior → dta-basic-behavior}/references/truth-and-recovery.md +0 -0
- /package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/adapters.md +0 -0
- /package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/assembly-guidance.md +0 -0
- /package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/binding.md +0 -0
- /package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/cold-start.md +0 -0
- /package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/consent-and-visibility.md +0 -0
- /package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/consolidation.md +0 -0
- /package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/event-ingest.md +0 -0
- /package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/guided-setup.md +0 -0
- /package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/model.md +0 -0
- /package/skills/core/{dingtalk-people-group-memory → dta-people-group-memory}/references/storage-port.md +0 -0
- /package/skills/platforms/multica-dingtalk/{dingtalk-agent-deploy-multica → dta-deploy-multica}/references/multica-deployment-contract.md +0 -0
- /package/skills/platforms/multica-dingtalk/{dingtalk-agent-deploy-multica → dta-deploy-multica}/references/promotion-observation-contract.md +0 -0
- /package/skills/platforms/multica-dingtalk/{multica-external → dta-ops-multica}/scripts/multica_ext.py +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"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"]}
|
|
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: 'dta-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, 'dta-basic-behavior')\n const basicTarget = join(destination, '.agents', 'skills', 'dta-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"]}
|
|
@@ -59,7 +59,7 @@ export function buildSchedulePlan(info, workspaceName) {
|
|
|
59
59
|
return {
|
|
60
60
|
$schema: 'dingtalk-agent/schedule-plan@1',
|
|
61
61
|
workspace: workspaceName, provider, supported: true, count: schedules.length, schedules,
|
|
62
|
-
reconcile: '由 multica
|
|
62
|
+
reconcile: '由 dta-ops-multica 技能执行:先 autopilot-list 读线上,按 title 匹配,' +
|
|
63
63
|
'只建缺的、改漂移的、删多余的;$MULTICA_EXT 指向 multica_ext.py,$…_AGENT_ID 由受信环境注入。' +
|
|
64
64
|
'autopilot-create 非幂等,务必先 list 再建,别盲建(会造重复→重复外发)。',
|
|
65
65
|
sideEffect: false, dingtalkSideEffect: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule-plan.js","sourceRoot":"","sources":["../../src/schedule-plan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,mBAAmB,EAAgD,MAAM,4BAA4B,CAAA;AAmB9G,2EAA2E;AAC3E,MAAM,YAAY,GAA6C;IAC7D,SAAS,EAAE,UAAU;IACrB,WAAW,EAAE,cAAc;CAC5B,CAAA;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,GAAG,CAAA;AACnD,CAAC;AAED,SAAS,MAAM,CAAC,GAAW;IACzB,wDAAwD;IACxD,OAAO,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA;AAC1D,CAAC;AAED,SAAS,mBAAmB,CAC1B,QAA0B,EAAE,OAAe,EAAE,WAAmB;IAEhE,MAAM,KAAK,GAAG;QACZ,yCAAyC;QACzC,aAAa,OAAO,EAAE;QACtB,WAAW,MAAM,CAAC,WAAW,CAAC,EAAE;QAChC,WAAW,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;QACtC,UAAU,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;QACvC,UAAU,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;QACrC,cAAc,QAAQ,CAAC,QAAQ,EAAE;QACjC,iBAAiB,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;KAC9D,CAAA;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACxB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAsB,EAAE,aAAqB;IAC7E,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,CAAA;IAC7E,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,aAAa,EAAE,CAAC,CAAA;IAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAA;IACvC,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAA;IAExC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAA;QAChD,MAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAA;QACxD,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,aAAa,aAAa,2CAA2C,CAAC,CAAA;QACxF,CAAC;QACD,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC5C,GAAG,QAAQ;YACX,YAAY,EAAE,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC;SAClE,CAAC,CAAC,CAAA;QACH,OAAO;YACL,OAAO,EAAE,gCAAgC;YACzC,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS;YACvF,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"schedule-plan.js","sourceRoot":"","sources":["../../src/schedule-plan.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Schedule reconcile plan — dta's half of the driving contract.\n *\n * dta owns: read the declared schedules (dingtalk-agent.json#schedules), validate\n * them, and map them to a provider-specific reconcile plan. dta does NOT fire or\n * live-write triggers — that stays with the platform ops path (see ARCHITECTURE\n * §3.1, \"触发器不属于 dingtalk-agent 核心执行\"). The plan is the authoritative,\n * provider-mapped desired state the ops skill reconciles against live.\n *\n * Pure: no network, no side effects — safe to run in CI and fully testable.\n */\nimport { inspectAgentProject, type AgentProjectInfo, type DeclaredSchedule } from './development-workspace.js'\n\nexport interface SchedulePlanEntry extends DeclaredSchedule {\n applyCommand: string\n}\n\nexport interface SchedulePlan {\n $schema: 'dingtalk-agent/schedule-plan@1'\n workspace: string\n provider: string\n supported: boolean\n reason?: string\n count: number\n schedules: SchedulePlanEntry[]\n reconcile: string\n sideEffect: false\n dingtalkSideEffect: false\n}\n\n// ephemeral = run-only (no work item); work-item = one work item per fire.\nconst MULTICA_MODE: Record<DeclaredSchedule['mode'], string> = {\n ephemeral: 'run_only',\n 'work-item': 'create_issue',\n}\n\nfunction shellQuote(value: string): string {\n return `\"${value.replace(/([\"\\\\$`])/g, '\\\\$1')}\"`\n}\n\nfunction envVar(ref: string): string {\n // \"env:MULTICA_FDE_AGENT_ID\" -> \"$MULTICA_FDE_AGENT_ID\"\n return ref.startsWith('env:') ? `$${ref.slice(4)}` : ref\n}\n\nfunction multicaApplyCommand(\n schedule: DeclaredSchedule, profile: string, agentIdFrom: string,\n): string {\n const parts = [\n 'python3 \"$MULTICA_EXT\" autopilot-create',\n `--profile ${profile}`,\n `--agent ${envVar(agentIdFrom)}`,\n `--title ${shellQuote(schedule.name)}`,\n `--mode ${MULTICA_MODE[schedule.mode]}`,\n `--cron ${shellQuote(schedule.cron)}`,\n `--timezone ${schedule.timezone}`,\n `--description ${shellQuote(schedule.wake || schedule.name)}`,\n ]\n return parts.join(' ')\n}\n\n/**\n * Build the reconcile plan for one workspace's provider. Returns supported:false\n * (with a reason) when the target platform does not offer schedules yet — the\n * declared rhythms are then a recorded gap, never a silent downgrade.\n */\nexport function buildSchedulePlan(info: AgentProjectInfo, workspaceName: string): SchedulePlan {\n const workspace = info.workspaces.find((item) => item.name === workspaceName)\n if (!workspace) throw new Error(`Project 未声明 Workspace: ${workspaceName}`)\n const declared = info.project.schedules\n const provider = workspace.provider.kind\n\n if (provider === 'multica') {\n const profile = workspace.provider.profile || ''\n const agentIdFrom = workspace.provider.agentIdFrom || ''\n if (!profile || !agentIdFrom) {\n throw new Error(`Workspace ${workspaceName} 的 multica provider 缺 profile/agentIdFrom`)\n }\n const schedules = declared.map((schedule) => ({\n ...schedule,\n applyCommand: multicaApplyCommand(schedule, profile, agentIdFrom),\n }))\n return {\n $schema: 'dingtalk-agent/schedule-plan@1',\n workspace: workspaceName, provider, supported: true, count: schedules.length, schedules,\n reconcile: '由 dta-ops-multica 技能执行:先 autopilot-list 读线上,按 title 匹配,' +\n '只建缺的、改漂移的、删多余的;$MULTICA_EXT 指向 multica_ext.py,$…_AGENT_ID 由受信环境注入。' +\n 'autopilot-create 非幂等,务必先 list 再建,别盲建(会造重复→重复外发)。',\n sideEffect: false, dingtalkSideEffect: false,\n }\n }\n\n // opencode / local dev / not-yet-supported platforms: no schedule capability.\n const reason = provider === 'opencode'\n ? 'opencode 是本地开发运行时,不承载常驻节律;节律需部署到托管平台'\n : `provider ${provider} 尚未提供 schedule 能力`\n return {\n $schema: 'dingtalk-agent/schedule-plan@1',\n workspace: workspaceName, provider, supported: false, reason,\n count: declared.length, schedules: [],\n reconcile: `记为缺口:声明了 ${declared.length} 条节律,但目标 provider 不支持——` +\n '别静默降级成\"那就不定时了\"。',\n sideEffect: false, dingtalkSideEffect: false,\n }\n}\n\nexport interface ScheduleShow {\n $schema: 'dingtalk-agent/schedule-show@1'\n count: number\n schedules: DeclaredSchedule[]\n minutesDistinct: boolean\n collidingMinutes: string[]\n sideEffect: false\n dingtalkSideEffect: false\n}\n\n/**\n * Declared schedules + the one platform-independent invariant dta can check\n * statically: ticks must not share a minute. Outward-effect ticks have no lock on\n * their delivery receipt, so two firing in the same minute double-send to third\n * parties. Reports any minute field claimed by more than one schedule.\n */\nexport function buildScheduleShow(start: string, cliVersion = ''): ScheduleShow {\n const info = inspectAgentProject(start, cliVersion)\n const declared = info.project.schedules\n const seen = new Map<string, number>()\n for (const schedule of declared) {\n const minute = schedule.cron.trim().split(/\\s+/)[0]\n seen.set(minute, (seen.get(minute) || 0) + 1)\n }\n const collidingMinutes = [...seen.entries()].filter(([, n]) => n > 1).map(([m]) => m)\n return {\n $schema: 'dingtalk-agent/schedule-show@1',\n count: declared.length,\n schedules: declared,\n minutesDistinct: collidingMinutes.length === 0,\n collidingMinutes,\n sideEffect: false, dingtalkSideEffect: false,\n }\n}\n"]}
|
package/dist/src/sessions.js
CHANGED
|
@@ -614,7 +614,7 @@ function runMarkdown(event, field, rule, contextId, sessionId, runId, resume) {
|
|
|
614
614
|
`3. \`context/invocation.json\`、存在时的 \`context/task-checkpoint.json\`、` +
|
|
615
615
|
`\`context/agent-definition/definition.json\` 和存在时的 ` +
|
|
616
616
|
`\`context/agent-definition/body.md\`;\n` +
|
|
617
|
-
`4. \`trigger.json\` 和 \`context/skills/
|
|
617
|
+
`4. \`trigger.json\` 和 \`context/skills/dta-basic-behavior/SKILL.md\`。\n\n` +
|
|
618
618
|
`只有任务需要时才读 context/mounts/ 下的 memory、knowledge。` +
|
|
619
619
|
`目标、身份、Wait 与 Event Journal 都是宿主内部控制状态,不需要理解或修改。\n\n` +
|
|
620
620
|
`每一步只调用一个允许的原子动作;可选一次 ack,随后至多一个终态动作:\n\n` +
|