@xdxer/dingtalk-agent 0.1.4-beta.10 → 0.1.4-beta.12
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 +36 -0
- package/README.en.md +2 -2
- package/README.md +5 -3
- package/dist/bin/dingtalk-agent.js +118 -16
- package/dist/bin/dingtalk-agent.js.map +1 -1
- package/dist/src/agent-platform.js +202 -0
- package/dist/src/agent-platform.js.map +1 -0
- package/dist/src/development-workspace.js +8 -1
- package/dist/src/development-workspace.js.map +1 -1
- package/dist/src/doctor.js +31 -15
- package/dist/src/doctor.js.map +1 -1
- package/dist/src/map.js +157 -0
- package/dist/src/map.js.map +1 -0
- package/dist/src/setup.js +6 -5
- package/dist/src/setup.js.map +1 -1
- package/dist/src/skill-manager.js +29 -2
- package/dist/src/skill-manager.js.map +1 -1
- package/docs/INSTALLATION.md +1 -1
- package/docs/schemas/agent-platform.schema.json +13 -0
- package/docs/schemas/project.schema.json +1 -0
- package/docs/schemas/release-readiness.schema.json +2 -1
- package/package.json +2 -1
- package/skills/dingtalk-agent-compose/SKILL.md +19 -9
- package/skills/dingtalk-agent-compose/evals/evals.json +1 -1
- package/skills/multica-fde-external/SKILL.md +280 -0
- package/skills/multica-fde-external/scripts/bootstrap.sh +78 -0
- package/skills/multica-fde-external/scripts/multica_ext.py +1178 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"development-workspace.js","sourceRoot":"","sources":["../../src/development-workspace.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from 'node:crypto'\nimport {\n existsSync, lstatSync, readFileSync, readdirSync, realpathSync, statSync,\n} from 'node:fs'\nimport { basename, dirname, join, parse, relative, resolve } from 'node:path'\nimport { findExecutable } from './doctor.js'\nimport { digest, stableStringify } from './events.js'\nimport { resolvePackageRoot } from './package-root.js'\nimport { loadWorkspace, workspacePath, type WorkspaceSpec } from './workspace.js'\n\nexport const PROJECT_FILE = 'dingtalk-agent.json'\nexport const CURRENT_WORKSPACE_FILE = '.dingtalk-agent/current-workspace'\nexport const WORKSPACE_STATE_ROOT = '.dingtalk-agent/state/workspaces'\nexport const LEGACY_WORKSPACE_NAME = 'legacy-prepared'\n\nexport type DevelopmentStage = 'dev' | 'test' | 'staging' | 'prod'\nexport type DeclaredProviderKind = 'opencode' | 'multica'\nexport type DevelopmentProviderKind = DeclaredProviderKind | 'local-prepared'\nexport type DevelopmentWorkspaceStatus =\n | 'declared' | 'resolving' | 'planned' | 'applying' | 'verifying'\n | 'ready' | 'drifted' | 'failed' | 'retired'\n\nexport interface OpenCodeProvider {\n kind: 'opencode'\n model: string\n}\n\nexport interface MulticaProvider {\n kind: 'multica'\n profile: string\n workspaceIdFrom: string\n runtimeIdFrom: string\n agentIdFrom?: string\n}\n\nexport interface WorkspaceStorage {\n memory: string\n knowledge: string\n artifacts?: string\n}\n\nexport interface WorkspaceAuthority {\n dwsProfileFrom: string\n expectedUserIdFrom: string\n}\n\nexport interface DeclaredWorkspace {\n stage: DevelopmentStage\n provider: OpenCodeProvider | MulticaProvider\n storage: WorkspaceStorage\n authority?: WorkspaceAuthority\n}\n\nexport interface AgentProjectManifest {\n $schema: 'dingtalk-agent/project@1'\n name: string\n dtaVersion: string\n agent: {\n definition: string\n skills: string[]\n }\n workspaces: Record<string, DeclaredWorkspace>\n}\n\nexport interface DevelopmentWorkspaceState {\n $schema: 'dingtalk-agent/workspace-state@1'\n workspace: string\n provider: DeclaredProviderKind\n status: DevelopmentWorkspaceStatus\n binding: Record<string, string>\n desiredHash: string\n observedHash: string\n lastPlanId: string\n lastReceiptId: string\n lastEvalId: string\n}\n\nexport interface DevelopmentWorkspaceView {\n name: string\n stage: DevelopmentStage\n provider: { kind: DevelopmentProviderKind } & Record<string, string>\n storage: Required<WorkspaceStorage>\n authority: WorkspaceAuthority | null\n sourceHash: string\n desiredHash: string\n observedHash: string\n status: DevelopmentWorkspaceStatus\n current: boolean\n legacy: boolean\n statePath: string\n state: DevelopmentWorkspaceState | null\n drift: string[]\n configSources: string[]\n}\n\nexport interface AgentProjectInfo {\n $schema: 'dingtalk-agent/info@1'\n root: string\n source: 'manifest' | 'legacy'\n manifest: string\n manifestHash: string\n project: {\n name: string\n dtaVersion: string\n compatibleWithCli: boolean\n definition: string\n skills: string[]\n }\n currentWorkspace: string\n workspaces: DevelopmentWorkspaceView[]\n sideEffect: false\n dingtalkSideEffect: false\n}\n\nexport interface DevelopmentWorkspaceCheck {\n id: string\n surface: 'project' | 'provider' | 'definition' | 'skills' | 'storage' | 'authority' | 'state'\n level: 'pass' | 'warn' | 'fail'\n blocking: boolean\n summary: string\n evidence: Record<string, unknown>\n fix?: string\n}\n\nexport interface DevelopmentWorkspaceDoctorReport {\n $schema: 'dingtalk-agent/workspace-doctor@1'\n ready: boolean\n workspace: string\n provider: DevelopmentProviderKind\n desiredHash: string\n observedHash: string\n status: DevelopmentWorkspaceStatus\n checks: DevelopmentWorkspaceCheck[]\n missing: string[]\n configSources: string[]\n sideEffect: false\n dingtalkSideEffect: false\n}\n\ninterface LoadedProject {\n root: string\n source: 'manifest' | 'legacy'\n manifestPath: string\n manifestHash: string\n manifest: AgentProjectManifest\n legacy: WorkspaceSpec | null\n}\n\nconst PROJECT_KEYS = new Set(['$schema', 'name', 'dtaVersion', 'agent', 'workspaces'])\nconst AGENT_KEYS = new Set(['definition', 'skills'])\nconst WORKSPACE_KEYS = new Set(['stage', 'provider', 'storage', 'authority'])\nconst OPENCODE_KEYS = new Set(['kind', 'model'])\nconst MULTICA_KEYS = new Set([\n 'kind', 'profile', 'workspaceIdFrom', 'runtimeIdFrom', 'agentIdFrom',\n])\nconst STORAGE_KEYS = new Set(['memory', 'knowledge', 'artifacts'])\nconst AUTHORITY_KEYS = new Set(['dwsProfileFrom', 'expectedUserIdFrom'])\nconst STATE_KEYS = new Set([\n '$schema', 'workspace', 'provider', 'status', 'binding', 'desiredHash', 'observedHash',\n 'lastPlanId', 'lastReceiptId', 'lastEvalId',\n])\nconst STATE_STATUSES = new Set<DevelopmentWorkspaceStatus>([\n 'declared', 'resolving', 'planned', 'applying', 'verifying',\n 'ready', 'drifted', 'failed', 'retired',\n])\nconst SECRET_KEY = /(?:secret|token|cookie|password|credentials?)$/i\nconst NAME = /^[a-z0-9](?:[a-z0-9._-]{0,62}[a-z0-9])?$/\nconst ENV_REF = /^env:[A-Z_][A-Z0-9_]*$/\n\nexport function findAgentProjectRoot(start = process.cwd()): string | null {\n let directory = resolve(start)\n if (existsSync(directory) && !statSync(directory).isDirectory()) directory = dirname(directory)\n while (true) {\n if (existsSync(join(directory, PROJECT_FILE)) || existsSync(workspacePath(directory))) {\n return realpathSync(directory)\n }\n const parent = dirname(directory)\n if (parent === directory || directory === parse(directory).root) return null\n directory = parent\n }\n}\n\nexport function inspectAgentProject(\n start = process.cwd(), cliVersion = '',\n): AgentProjectInfo {\n const loaded = loadAgentProject(start)\n const currentWorkspace = readCurrentWorkspace(loaded.root)\n const declared = Object.entries(loaded.manifest.workspaces)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([name, workspace]) => declaredView(loaded, name, workspace, currentWorkspace))\n if (loaded.legacy && !(LEGACY_WORKSPACE_NAME in loaded.manifest.workspaces)) {\n declared.push(legacyView(loaded, loaded.legacy, currentWorkspace))\n }\n if (currentWorkspace && !declared.some((item) => item.name === currentWorkspace)) {\n throw new Error(`current-workspace 指向未知 Workspace: ${currentWorkspace}`)\n }\n return {\n $schema: 'dingtalk-agent/info@1',\n root: loaded.root,\n source: loaded.source,\n manifest: loaded.manifestPath ? relative(loaded.root, loaded.manifestPath) : '',\n manifestHash: loaded.manifestHash,\n project: {\n name: loaded.manifest.name,\n dtaVersion: loaded.manifest.dtaVersion,\n compatibleWithCli: !cliVersion || versionSatisfies(cliVersion, loaded.manifest.dtaVersion),\n definition: loaded.manifest.agent.definition,\n skills: [...loaded.manifest.agent.skills],\n },\n currentWorkspace,\n workspaces: declared,\n sideEffect: false,\n dingtalkSideEffect: false,\n }\n}\n\nexport function showDevelopmentWorkspace(\n start: string, name: string, cliVersion = '',\n): DevelopmentWorkspaceView {\n const info = inspectAgentProject(start, cliVersion)\n const workspace = info.workspaces.find((item) => item.name === name)\n if (!workspace) throw new Error(`Project 未声明 Workspace: ${name}`)\n return workspace\n}\n\nexport function doctorDevelopmentWorkspace(\n start: string,\n name: string,\n options: { cliVersion?: string; env?: NodeJS.ProcessEnv } = {},\n): DevelopmentWorkspaceDoctorReport {\n const cliVersion = options.cliVersion || ''\n const env = options.env || process.env\n const info = inspectAgentProject(start, cliVersion)\n const workspace = info.workspaces.find((item) => item.name === name)\n if (!workspace) throw new Error(`Project 未声明 Workspace: ${name}`)\n const checks: DevelopmentWorkspaceCheck[] = []\n const add = (\n id: string, surface: DevelopmentWorkspaceCheck['surface'], level: DevelopmentWorkspaceCheck['level'],\n blocking: boolean, summary: string, evidence: Record<string, unknown> = {}, fix?: string,\n ) => checks.push({ id, surface, level, blocking, summary, evidence, ...(fix ? { fix } : {}) })\n\n add('project.schema', 'project', 'pass', true, 'Project manifest/schema 可解析', {\n source: info.source, manifestHash: info.manifestHash,\n })\n add('project.version', 'project', info.project.compatibleWithCli ? 'pass' : 'fail', true,\n info.project.compatibleWithCli ? 'Project 声明兼容当前 dta 版本' : 'Project dtaVersion 与当前 CLI 不兼容',\n { required: info.project.dtaVersion, actual: cliVersion || 'unknown' },\n '升级 CLI,或在审阅兼容性后更新 dingtalk-agent.json#dtaVersion')\n\n const definition = inspectLocalFile(info.root, info.project.definition)\n add('definition.file', 'definition', definition.valid ? 'pass' : 'fail', true,\n definition.valid ? 'Agent Definition 位于 Project 内且可读' : 'Agent Definition 缺失、越界或不是文件',\n definition, `修复 ${info.project.definition}`)\n\n for (const [slot, uri] of Object.entries(workspace.storage)) {\n const local = inspectStorageRoute(info.root, uri)\n const blocking = !uri.startsWith('dingtalk-doc:') && !(workspace.legacy && slot === 'artifacts')\n add(`storage.${slot}`, 'storage', local.valid ? 'pass' : blocking ? 'fail' : 'warn', blocking,\n local.valid ? `${slot} Storage route 可解析`\n : uri.startsWith('dingtalk-doc:') ? `${slot} 是远端语义路由,W1 不执行 DWS 回读`\n : `${slot} 本地 Storage route 缺失或越界`,\n { route: uri, ...local }, local.fix)\n }\n\n if (workspace.state) {\n add('state.provider', 'state', workspace.drift.includes('provider') ? 'fail' : 'pass', true,\n workspace.drift.includes('provider') ? 'State Provider 与声明不一致' : 'State Provider 与声明一致',\n { declared: workspace.provider.kind, observed: workspace.state.provider })\n add('state.desired-hash', 'state', workspace.drift.includes('desiredHash') ? 'fail' : 'pass', true,\n workspace.drift.includes('desiredHash') ? 'State desiredHash 已漂移' : 'State desiredHash 与声明一致',\n { desiredHash: workspace.desiredHash, stateDesiredHash: workspace.state.desiredHash })\n add('state.status', 'state', workspace.state.status === 'ready' ? 'pass' : 'fail', true,\n workspace.state.status === 'ready' ? 'Provider state 已回读为 ready'\n : `Provider state 尚未 ready: ${workspace.state.status}`,\n { status: workspace.state.status })\n const observedHashValid = /^[a-f0-9]{64}$/.test(workspace.state.observedHash)\n add('state.observed-hash', 'state', observedHashValid ? 'pass' : 'fail', true,\n observedHashValid ? 'Provider observedHash 是稳定 sha256' : 'ready state 缺少有效 observedHash',\n { configured: Boolean(workspace.state.observedHash) })\n } else {\n const required = !workspace.legacy\n add('state.present', 'state', required ? 'fail' : 'warn', required,\n required ? '尚无 Provider 回读 state;Workspace 只完成声明,尚未就绪'\n : 'Legacy adapter 不要求新的 Provider state', {\n expectedPath: workspace.statePath,\n })\n }\n\n if (workspace.provider.kind === 'opencode') {\n inspectOpenCodeWorkspace(info, workspace, env, add)\n } else if (workspace.provider.kind === 'multica') {\n inspectDeclaredMulticaWorkspace(workspace, env, add)\n } else {\n add('provider.legacy', 'provider', 'pass', true,\n 'Legacy Prepared Workspace 已通过 workspace@1 parser 只读加载', {\n provider: workspace.provider.kind, state: 'adapter-only',\n })\n }\n\n const missing = checks.filter((check) => check.blocking && check.level !== 'pass')\n .map((check) => check.id)\n return {\n $schema: 'dingtalk-agent/workspace-doctor@1',\n ready: missing.length === 0,\n workspace: workspace.name,\n provider: workspace.provider.kind,\n desiredHash: workspace.desiredHash,\n observedHash: workspace.observedHash,\n status: workspace.status,\n checks,\n missing,\n configSources: workspace.configSources,\n sideEffect: false,\n dingtalkSideEffect: false,\n }\n}\n\nfunction loadAgentProject(start: string): LoadedProject {\n const root = findAgentProjectRoot(start)\n if (!root) {\n throw new Error(`找不到 ${PROJECT_FILE} 或 ${workspacePath('<project>')};请在 Agent Project 内运行`)\n }\n const manifestPath = join(root, PROJECT_FILE)\n const legacyPath = workspacePath(root)\n if (existsSync(legacyPath) && (\n lstatSync(legacyPath).isSymbolicLink() || !isInside(root, realpathSync(legacyPath))\n )) {\n throw new Error('Legacy workspace manifest 不能是越界符号链接')\n }\n const legacy = existsSync(legacyPath) ? loadWorkspace(root) : null\n if (!existsSync(manifestPath)) {\n if (!legacy) throw new Error(`找不到 ${PROJECT_FILE}`)\n const manifest = syntheticLegacyProject(root, legacy)\n return {\n root, source: 'legacy', manifestPath: '', manifest,\n manifestHash: digest(stableStringify(manifest)), legacy,\n }\n }\n if (lstatSync(manifestPath).isSymbolicLink()) {\n throw new Error(`${PROJECT_FILE} 不能是符号链接`)\n }\n let raw: unknown\n let source = ''\n try {\n source = readFileSync(manifestPath, 'utf8')\n raw = JSON.parse(source)\n } catch (error) {\n throw new Error(`${PROJECT_FILE} 不是合法 JSON: ${error.message}`)\n }\n rejectSecretLikeKeys(raw, PROJECT_FILE)\n const manifest = validateProjectManifest(raw, root)\n return {\n root, source: 'manifest', manifestPath: realpathSync(manifestPath), manifest,\n manifestHash: digest(stableStringify(manifest)), legacy,\n }\n}\n\nfunction validateProjectManifest(value: unknown, root: string): AgentProjectManifest {\n const input = objectValue(value, 'Project manifest')\n assertExactKeys(input, PROJECT_KEYS, 'Project manifest')\n if (input.$schema !== 'dingtalk-agent/project@1') {\n throw new Error('Project manifest 缺少 dingtalk-agent/project@1 schema')\n }\n const name = stableName(input.name, 'Project name')\n const dtaVersion = requiredString(input.dtaVersion, 'dtaVersion')\n const agentInput = objectValue(input.agent, 'Project agent')\n assertExactKeys(agentInput, AGENT_KEYS, 'Project agent')\n const definition = safeRelativePath(root, requiredString(agentInput.definition, 'agent.definition'),\n 'agent.definition', false)\n if (!Array.isArray(agentInput.skills) || agentInput.skills.length === 0) {\n throw new Error('agent.skills 必须是非空 string[]')\n }\n const skills = agentInput.skills.map((item, index) => stableName(item, `agent.skills[${index}]`))\n if (new Set(skills).size !== skills.length) throw new Error('agent.skills 不能包含重复项')\n if (!skills.includes('dingtalk-basic-behavior')) {\n throw new Error('agent.skills 必须显式包含 dingtalk-basic-behavior')\n }\n const workspaceInput = objectValue(input.workspaces, 'Project workspaces')\n const workspaces: Record<string, DeclaredWorkspace> = {}\n for (const [workspaceName, rawWorkspace] of Object.entries(workspaceInput)) {\n stableName(workspaceName, `Workspace name ${workspaceName}`)\n if (workspaceName === LEGACY_WORKSPACE_NAME) {\n throw new Error(`${LEGACY_WORKSPACE_NAME} 是 legacy adapter 保留名称`)\n }\n workspaces[workspaceName] = validateDeclaredWorkspace(rawWorkspace, root, workspaceName)\n }\n return {\n $schema: 'dingtalk-agent/project@1', name, dtaVersion,\n agent: { definition, skills }, workspaces,\n }\n}\n\nfunction validateDeclaredWorkspace(value: unknown, root: string, name: string): DeclaredWorkspace {\n const input = objectValue(value, `Workspace ${name}`)\n assertAllowedKeys(input, WORKSPACE_KEYS, `Workspace ${name}`)\n for (const required of ['stage', 'provider', 'storage']) {\n if (!(required in input)) throw new Error(`Workspace ${name} 缺少字段: ${required}`)\n }\n const stage = requiredString(input.stage, `Workspace ${name}.stage`) as DevelopmentStage\n if (!['dev', 'test', 'staging', 'prod'].includes(stage)) {\n throw new Error(`Workspace ${name}.stage 非法: ${stage}`)\n }\n const providerInput = objectValue(input.provider, `Workspace ${name}.provider`)\n const kind = requiredString(providerInput.kind, `Workspace ${name}.provider.kind`)\n let provider: OpenCodeProvider | MulticaProvider\n if (kind === 'opencode') {\n assertExactKeys(providerInput, OPENCODE_KEYS, `Workspace ${name}.provider`)\n provider = { kind, model: requiredString(providerInput.model, `Workspace ${name}.provider.model`) }\n } else if (kind === 'multica') {\n assertAllowedKeys(providerInput, MULTICA_KEYS, `Workspace ${name}.provider`)\n for (const required of ['kind', 'profile', 'workspaceIdFrom', 'runtimeIdFrom']) {\n if (!(required in providerInput)) {\n throw new Error(`Workspace ${name}.provider 缺少字段: ${required}`)\n }\n }\n provider = {\n kind,\n profile: requiredString(providerInput.profile, `Workspace ${name}.provider.profile`),\n workspaceIdFrom: envReference(providerInput.workspaceIdFrom, `${name}.workspaceIdFrom`),\n runtimeIdFrom: envReference(providerInput.runtimeIdFrom, `${name}.runtimeIdFrom`),\n ...(providerInput.agentIdFrom === undefined ? {} : {\n agentIdFrom: envReference(providerInput.agentIdFrom, `${name}.agentIdFrom`),\n }),\n }\n } else {\n throw new Error(`Workspace ${name}.provider.kind 只支持 opencode / multica`)\n }\n const storageInput = objectValue(input.storage, `Workspace ${name}.storage`)\n assertAllowedKeys(storageInput, STORAGE_KEYS, `Workspace ${name}.storage`)\n const memory = storageRoute(storageInput.memory, ['local-md', 'dingtalk-doc'], `${name}.memory`, root)\n const knowledge = storageRoute(\n storageInput.knowledge, ['local-md', 'dingtalk-doc'], `${name}.knowledge`, root,\n )\n const artifacts = storageInput.artifacts === undefined ? undefined\n : storageRoute(storageInput.artifacts, ['local-dir'], `${name}.artifacts`, root)\n let authority: WorkspaceAuthority | undefined\n if (input.authority !== undefined) {\n const authorityInput = objectValue(input.authority, `Workspace ${name}.authority`)\n assertExactKeys(authorityInput, AUTHORITY_KEYS, `Workspace ${name}.authority`)\n authority = {\n dwsProfileFrom: envReference(authorityInput.dwsProfileFrom, `${name}.dwsProfileFrom`),\n expectedUserIdFrom: envReference(\n authorityInput.expectedUserIdFrom, `${name}.expectedUserIdFrom`,\n ),\n }\n }\n if (provider.kind === 'multica' && !authority) {\n throw new Error(`Workspace ${name} 的 multica Provider 必须声明 authority env 来源`)\n }\n return { stage, provider, storage: { memory, knowledge, ...(artifacts ? { artifacts } : {}) },\n ...(authority ? { authority } : {}) }\n}\n\nfunction declaredView(\n loaded: LoadedProject,\n name: string,\n workspace: DeclaredWorkspace,\n currentWorkspace: string,\n): DevelopmentWorkspaceView {\n const artifacts = workspace.storage.artifacts ||\n `local-dir:.dingtalk-agent/artifacts/${name}`\n const storage: Required<WorkspaceStorage> = { ...workspace.storage, artifacts }\n const sourceHash = projectSourceHash(loaded.root, loaded.manifest)\n const desiredHash = digest(stableStringify({\n project: loaded.manifest.name,\n agent: loaded.manifest.agent,\n workspace: name,\n stage: workspace.stage,\n provider: workspace.provider,\n storage,\n authority: workspace.authority || null,\n sourceHash,\n }))\n const statePath = join(loaded.root, WORKSPACE_STATE_ROOT, `${name}.json`)\n const state = existsSync(statePath)\n ? loadDevelopmentWorkspaceState(statePath, name, loaded.root) : null\n const drift: string[] = []\n if (state && state.provider !== workspace.provider.kind) drift.push('provider')\n if (state && state.desiredHash !== desiredHash) drift.push('desiredHash')\n const status: DevelopmentWorkspaceStatus = drift.length ? 'drifted' : state?.status || 'declared'\n return {\n name,\n stage: workspace.stage,\n provider: { ...workspace.provider },\n storage,\n authority: workspace.authority || null,\n sourceHash,\n desiredHash,\n observedHash: state?.observedHash || '',\n status,\n current: currentWorkspace === name,\n legacy: false,\n statePath: relative(loaded.root, statePath),\n state,\n drift,\n configSources: collectConfigSources(workspace),\n }\n}\n\nfunction legacyView(\n loaded: LoadedProject, spec: WorkspaceSpec, currentWorkspace: string,\n): DevelopmentWorkspaceView {\n const storage: Required<WorkspaceStorage> = {\n memory: spec.mounts.memory,\n knowledge: spec.mounts.knowledge,\n artifacts: 'local-dir:.dingtalk-agent/artifacts/legacy-prepared',\n }\n const desiredHash = digest(stableStringify({ provider: 'local-prepared', workspace: spec }))\n return {\n name: LEGACY_WORKSPACE_NAME,\n stage: 'dev',\n provider: { kind: 'local-prepared', contextId: spec.contextId, fieldId: spec.fieldId },\n storage,\n authority: spec.dws.profile || spec.dws.expectedUserId ? {\n dwsProfileFrom: 'legacy:workspace.dws.profile',\n expectedUserIdFrom: 'legacy:workspace.dws.expectedUserId',\n } : null,\n sourceHash: digest(stableStringify({ definition: spec.mounts.profile, skills: spec.skills })),\n desiredHash,\n observedHash: desiredHash,\n status: 'ready',\n current: currentWorkspace === LEGACY_WORKSPACE_NAME,\n legacy: true,\n statePath: relative(loaded.root, workspacePath(loaded.root)),\n state: null,\n drift: [],\n configSources: ['legacy:.dingtalk-agent/workspace.json'],\n }\n}\n\nfunction projectSourceHash(root: string, manifest: AgentProjectManifest): string {\n const sources: Record<string, string> = {\n definition: localContentHash(root, manifest.agent.definition),\n opencode: localContentHash(root, 'opencode.json'),\n }\n for (const name of manifest.agent.skills) {\n const ref = name === 'dingtalk-basic-behavior'\n ? `.agents/skills/${name}` : `skills/${name}`\n sources[`skill:${name}`] = localContentHash(root, ref)\n const exposure = `.agents/skills/${name}`\n sources[`exposure:${name}`] = localContentHash(root, exposure)\n }\n return digest(stableStringify(sources))\n}\n\nfunction localContentHash(root: string, ref: string): string {\n const candidate = resolve(root, ref)\n if (!isInside(root, candidate) || !existsSync(candidate)) return ''\n const actual = realpathSync(candidate)\n if (!isInside(root, actual)) throw new Error(`Project source 真实路径越界: ${ref}`)\n const stat = lstatSync(actual)\n if (stat.isSymbolicLink()) throw new Error(`Project source 不允许符号链接: ${ref}`)\n if (stat.isFile()) return sha256(readFileSync(actual))\n if (!stat.isDirectory()) throw new Error(`Project source 类型非法: ${ref}`)\n const entries: Array<{ path: string; hash: string }> = []\n const visit = (directory: string, prefix = ''): void => {\n for (const entry of readdirSorted(directory)) {\n const path = join(directory, entry.name)\n const relativePath = prefix ? `${prefix}/${entry.name}` : entry.name\n if (entry.isSymbolicLink()) throw new Error(`Project source 不允许符号链接: ${ref}/${relativePath}`)\n if (entry.isDirectory()) visit(path, relativePath)\n else if (entry.isFile()) entries.push({ path: relativePath, hash: sha256(readFileSync(path)) })\n else throw new Error(`Project source 类型非法: ${ref}/${relativePath}`)\n }\n }\n visit(actual)\n return digest(stableStringify(entries))\n}\n\nfunction readdirSorted(directory: string): import('node:fs').Dirent[] {\n return readdirSync(directory, { withFileTypes: true })\n .sort((a, b) => a.name.localeCompare(b.name))\n}\n\nfunction sha256(value: string | Buffer): string {\n return createHash('sha256').update(value).digest('hex')\n}\n\nfunction loadDevelopmentWorkspaceState(\n path: string, workspace: string, root: string,\n): DevelopmentWorkspaceState {\n if (lstatSync(path).isSymbolicLink()) throw new Error(`Workspace state 不能是符号链接: ${path}`)\n if (!isInside(root, realpathSync(path))) throw new Error(`Workspace state 真实路径越出 Project: ${path}`)\n let raw: unknown\n try { raw = JSON.parse(readFileSync(path, 'utf8')) }\n catch (error) { throw new Error(`Workspace state 不是合法 JSON: ${error.message}`) }\n rejectSecretLikeKeys(raw, 'Workspace state')\n const input = objectValue(raw, 'Workspace state')\n assertExactKeys(input, STATE_KEYS, 'Workspace state')\n if (input.$schema !== 'dingtalk-agent/workspace-state@1') {\n throw new Error('Workspace state 缺少 dingtalk-agent/workspace-state@1 schema')\n }\n if (input.workspace !== workspace) {\n throw new Error(`Workspace state 名称不一致: ${String(input.workspace)} != ${workspace}`)\n }\n const provider = requiredString(input.provider, 'Workspace state provider') as DeclaredProviderKind\n if (!['opencode', 'multica'].includes(provider)) throw new Error(`Workspace state provider 非法: ${provider}`)\n const status = requiredString(input.status, 'Workspace state status') as DevelopmentWorkspaceStatus\n if (!STATE_STATUSES.has(status)) throw new Error(`Workspace state status 非法: ${status}`)\n const bindingInput = objectValue(input.binding, 'Workspace state binding')\n const binding = Object.fromEntries(Object.entries(bindingInput).map(([key, item]) => [\n key, optionalString(item, `Workspace state binding.${key}`),\n ]))\n return {\n $schema: 'dingtalk-agent/workspace-state@1', workspace, provider, status, binding,\n desiredHash: requiredString(input.desiredHash, 'Workspace state desiredHash'),\n observedHash: optionalString(input.observedHash, 'Workspace state observedHash'),\n lastPlanId: optionalString(input.lastPlanId, 'Workspace state lastPlanId'),\n lastReceiptId: optionalString(input.lastReceiptId, 'Workspace state lastReceiptId'),\n lastEvalId: optionalString(input.lastEvalId, 'Workspace state lastEvalId'),\n }\n}\n\nfunction inspectOpenCodeWorkspace(\n info: AgentProjectInfo,\n workspace: DevelopmentWorkspaceView,\n env: NodeJS.ProcessEnv,\n add: (\n id: string, surface: DevelopmentWorkspaceCheck['surface'], level: DevelopmentWorkspaceCheck['level'],\n blocking: boolean, summary: string, evidence?: Record<string, unknown>, fix?: string,\n ) => void,\n): void {\n const executable = findExecutable('opencode', env)\n add('provider.opencode-cli', 'provider', executable ? 'pass' : 'fail', true,\n executable ? 'OpenCode CLI 可执行' : 'PATH 找不到 opencode',\n { executable: executable || '' }, '安装 OpenCode,并确认 opencode --version 可执行')\n add('provider.opencode-model', 'provider', workspace.provider.model ? 'pass' : 'fail', true,\n workspace.provider.model ? 'OpenCode model 已显式声明' : 'OpenCode model 缺失',\n { model: workspace.provider.model || '' })\n\n const basicPath = '.agents/skills/dingtalk-basic-behavior/SKILL.md'\n const basic = inspectLocalFile(info.root, basicPath)\n const canonicalBasic = inspectLocalFile(\n resolvePackageRoot(import.meta.url), 'skills/dingtalk-basic-behavior/SKILL.md',\n )\n const basicMatched = basic.valid && canonicalBasic.valid && basic.hash === canonicalBasic.hash\n add('skills.basic-exposure', 'skills', basicMatched ? 'pass' : 'fail', true,\n basicMatched ? 'Basic Skill exposure 与当前 canonical source 一致'\n : 'Basic Skill exposure 缺失、越界或 hash 漂移',\n { exposure: basic, canonicalHash: canonicalBasic.hash || '' }, `重新物化 ${basicPath}`)\n const configPath = join(info.root, 'opencode.json')\n const configFile = inspectLocalFile(info.root, 'opencode.json')\n let configError = ''\n let instructionCount = 0\n let permission = ''\n let permissions: Record<string, string> = {}\n if (configFile.valid) {\n try {\n const config = JSON.parse(readFileSync(configPath, 'utf8')) as Record<string, any>\n const instructions = Array.isArray(config.instructions) ? config.instructions : []\n instructionCount = instructions.filter((item) => item === basicPath).length\n const skillPermissions = config.permission?.skill\n permissions = skillPermissions && typeof skillPermissions === 'object' &&\n !Array.isArray(skillPermissions)\n ? Object.fromEntries(Object.entries(skillPermissions).map(([key, value]) => [key, String(value)]))\n : {}\n permission = permissions['dingtalk-basic-behavior'] || ''\n } catch (error) { configError = error.message }\n } else configError = configFile.exists ? 'outside-or-not-file' : 'missing'\n const configValid = !configError && instructionCount === 1 && permission === 'allow'\n add('skills.basic-instruction', 'skills', configValid ? 'pass' : 'fail', true,\n configValid ? 'OpenCode config 强制加载且允许 Basic Skill' : 'OpenCode Basic instruction/permission 合同不完整',\n { path: 'opencode.json', error: configError, instructionCount, permission },\n '运行 compose/bind 流程生成唯一 Basic instruction 与 allow permission')\n\n for (const name of info.project.skills.filter((item) => item !== 'dingtalk-basic-behavior')) {\n const source = inspectLocalFile(info.root, `skills/${name}/SKILL.md`)\n const exposure = inspectLocalFile(info.root, `.agents/skills/${name}/SKILL.md`)\n const matched = source.valid && exposure.valid && source.hash === exposure.hash &&\n permissions[name] === 'allow'\n add(`skills.role.${name}`, 'skills', matched ? 'pass' : 'fail', true,\n matched ? `Role Skill ${name} source/exposure hash 与 permission 一致`\n : `Role Skill ${name} source、exposure hash 或 permission 不一致`,\n { source, exposure, permission: permissions[name] || '' }, `运行 compose/bind 流程物化 ${name}`)\n }\n const managedRef = workspace.state?.binding.managedPath || ''\n if (managedRef) {\n const managedHash = localContentHash(info.root, managedRef)\n const matched = Boolean(managedHash && managedHash === workspace.state?.observedHash &&\n workspace.state?.binding.sourceHash === workspace.sourceHash &&\n workspace.state?.binding.model === workspace.provider.model)\n add('provider.managed-integrity', 'provider', matched ? 'pass' : 'fail', true,\n matched ? 'Managed Workspace、source/model 与 observed hash 一致'\n : 'Managed Workspace 缺失或 source/model/observed hash 漂移', {\n path: managedRef,\n actualHash: managedHash,\n expectedHash: workspace.state?.observedHash || '',\n sourceMatched: workspace.state?.binding.sourceHash === workspace.sourceHash,\n modelMatched: workspace.state?.binding.model === workspace.provider.model,\n }, `重新执行 dta workspace create ${workspace.name} --yes`)\n }\n const loadVerified = workspace.state?.status === 'ready' && Boolean(\n workspace.state.lastReceiptId || workspace.state.lastEvalId)\n add('provider.load-proof', 'provider', loadVerified ? 'pass' : 'warn', false,\n loadVerified\n ? 'Provider state 已绑定通过的随机 load/eval 证据;详情见 lastReceiptId/lastEvalId'\n : '尚未取得随机 load probe;先执行 workspace run/eval', {\n executed: Boolean(workspace.state?.lastReceiptId || workspace.state?.lastEvalId),\n lastReceiptId: workspace.state?.lastReceiptId || '',\n lastEvalId: workspace.state?.lastEvalId || '',\n })\n}\n\nfunction inspectDeclaredMulticaWorkspace(\n workspace: DevelopmentWorkspaceView,\n env: NodeJS.ProcessEnv,\n add: (\n id: string, surface: DevelopmentWorkspaceCheck['surface'], level: DevelopmentWorkspaceCheck['level'],\n blocking: boolean, summary: string, evidence?: Record<string, unknown>, fix?: string,\n ) => void,\n): void {\n const executable = findExecutable('multica', env)\n add('provider.multica-cli', 'provider', executable ? 'pass' : 'fail', true,\n executable ? 'Multica CLI 可执行' : 'PATH 找不到 multica;仅当前 Multica Workspace 不就绪',\n { executable: executable || '' }, '安装 Multica CLI;其他 Provider Workspace 不受影响')\n const refs = [\n ['workspace-id', workspace.provider.workspaceIdFrom],\n ['runtime-id', workspace.provider.runtimeIdFrom],\n ['dws-profile', workspace.authority?.dwsProfileFrom || ''],\n ['expected-user-id', workspace.authority?.expectedUserIdFrom || ''],\n ] as const\n for (const [id, ref] of refs) {\n const variable = ref.startsWith('env:') ? ref.slice(4) : ''\n const configured = Boolean(variable && env[variable])\n add(`authority.${id}`, 'authority', configured ? 'pass' : 'fail', true,\n configured ? `${id} 来源已解析` : `${id} 环境来源未设置`,\n { source: ref, configured }, `设置 ${ref || '<missing-env-ref>'}`)\n }\n const agentRef = workspace.provider.agentIdFrom || ''\n const agentVariable = agentRef.startsWith('env:') ? agentRef.slice(4) : ''\n const agentConfigured = Boolean(agentVariable && env[agentVariable])\n add('authority.agent-id', 'authority', agentRef && agentConfigured ? 'pass' : 'warn', false,\n agentRef\n ? agentConfigured ? 'agent-id 可信来源已解析' : 'agent-id 来源未设置;只允许列候选,不按名称绑定'\n : '未声明 agent-id;W3 只列候选,W4 create 后必须保存稳定 ID',\n { source: agentRef, configured: agentConfigured },\n agentRef ? `设置 ${agentRef}` : '已有 Agent 时声明 provider.agentIdFrom;新 Agent 由 W4 apply 保存 ID')\n const inspectionId = workspace.state?.binding.inspectionId || ''\n add('provider.remote-inspect', 'provider', 'warn', false,\n inspectionId\n ? '已有脱敏 Multica 只读 inspection;W4 load/smoke 前仍不能 ready'\n : '尚未运行 Multica 只读 inspection;不会创建或更新远端资源', {\n executed: Boolean(inspectionId), inspectionId, remoteWrite: false,\n })\n}\n\nfunction inspectStorageRoute(root: string, uri: string): Record<string, any> {\n if (uri.startsWith('dingtalk-doc:')) {\n return { valid: false, provider: 'dingtalk-doc', local: false, checked: false }\n }\n const separator = uri.indexOf(':')\n const provider = uri.slice(0, separator)\n const ref = uri.slice(separator + 1)\n const inspected = provider === 'local-md'\n ? inspectLocalFile(root, ref)\n : inspectLocalDirectory(root, ref)\n return { ...inspected, provider, local: true, checked: true }\n}\n\nfunction inspectLocalFile(root: string, ref: string): Record<string, any> {\n const inspected = inspectLocalPath(root, ref)\n const valid = inspected.inside && inspected.exists && inspected.type === 'file'\n return { ...inspected, valid, fix: valid ? undefined : `创建 Project 内文件 ${ref}` }\n}\n\nfunction inspectLocalDirectory(root: string, ref: string): Record<string, any> {\n const inspected = inspectLocalPath(root, ref)\n const valid = inspected.inside && inspected.exists && inspected.type === 'directory'\n return { ...inspected, valid, fix: valid ? undefined : `创建 Project 内目录 ${ref}` }\n}\n\nfunction inspectLocalPath(root: string, ref: string): Record<string, unknown> {\n const candidate = resolve(root, ref)\n const inside = isInside(root, candidate)\n if (!inside || !existsSync(candidate)) {\n return { path: ref, inside, exists: false, type: 'missing' }\n }\n const actual = realpathSync(candidate)\n const actualInside = isInside(root, actual)\n const stat = statSync(actual)\n return {\n path: relative(root, actual), inside: actualInside, exists: true,\n type: stat.isFile() ? 'file' : stat.isDirectory() ? 'directory' : 'other',\n ...(stat.isFile() && actualInside ? { hash: digest(readFileSync(actual, 'utf8')) } : {}),\n }\n}\n\nfunction syntheticLegacyProject(root: string, workspace: WorkspaceSpec): AgentProjectManifest {\n const definition = workspace.mounts.profile.startsWith('local-md:')\n ? workspace.mounts.profile.slice('local-md:'.length) : 'WORKSPACE.md'\n return {\n $schema: 'dingtalk-agent/project@1',\n name: stableName(basename(root) || 'legacy-agent', 'Legacy Project name'),\n dtaVersion: '*',\n agent: { definition, skills: [...workspace.skills] },\n workspaces: {},\n }\n}\n\nfunction readCurrentWorkspace(root: string): string {\n const path = join(root, CURRENT_WORKSPACE_FILE)\n if (!existsSync(path)) return ''\n if (lstatSync(path).isSymbolicLink()) throw new Error('current-workspace 不能是符号链接')\n if (!isInside(root, realpathSync(path))) throw new Error('current-workspace 真实路径越出 Project')\n const value = readFileSync(path, 'utf8').trim()\n return value ? stableName(value, 'current-workspace') : ''\n}\n\nfunction collectConfigSources(workspace: DeclaredWorkspace): string[] {\n const sources = [\n `manifest:provider.kind=${workspace.provider.kind}`,\n `manifest:stage=${workspace.stage}`,\n ]\n if (workspace.provider.kind === 'opencode') sources.push('manifest:provider.model')\n else sources.push(\n 'manifest:provider.profile', workspace.provider.workspaceIdFrom, workspace.provider.runtimeIdFrom,\n ...(workspace.provider.agentIdFrom ? [workspace.provider.agentIdFrom] : []),\n )\n if (workspace.authority) sources.push(\n workspace.authority.dwsProfileFrom, workspace.authority.expectedUserIdFrom,\n )\n return [...new Set(sources)]\n}\n\nfunction storageRoute(\n value: unknown, providers: string[], label: string, root: string,\n): string {\n const text = requiredString(value, label)\n const separator = text.indexOf(':')\n const provider = separator < 0 ? '' : text.slice(0, separator)\n const ref = separator < 0 ? '' : text.slice(separator + 1).trim()\n if (!providers.includes(provider) || !ref) {\n throw new Error(`${label} Storage 非法;允许 ${providers.map((item) => `${item}:<ref>`).join(' / ')}`)\n }\n if (provider.startsWith('local-')) safeRelativePath(root, ref, label, true)\n return `${provider}:${ref}`\n}\n\nfunction safeRelativePath(root: string, input: string, label: string, allowMissing: boolean): string {\n if (input.includes('\\0')) throw new Error(`${label} 包含 NUL`) // defensive for non-POSIX callers\n const candidate = resolve(root, input)\n if (!isInside(root, candidate) || candidate === root) throw new Error(`${label} 必须位于 Project 内: ${input}`)\n if (existsSync(candidate)) {\n const actual = realpathSync(candidate)\n if (!isInside(root, actual)) throw new Error(`${label} 真实路径越出 Project: ${input}`)\n } else if (!allowMissing && !isInside(root, candidate)) {\n throw new Error(`${label} 越出 Project: ${input}`)\n }\n return relative(root, candidate).split('\\\\').join('/')\n}\n\nfunction envReference(value: unknown, label: string): string {\n const text = requiredString(value, label)\n if (!ENV_REF.test(text)) throw new Error(`${label} 必须是 env:UPPER_CASE_VAR 引用`)\n return text\n}\n\nfunction stableName(value: unknown, label: string): string {\n const text = requiredString(value, label)\n if (!NAME.test(text)) throw new Error(`${label} 非法: ${text}`)\n return text\n}\n\nfunction requiredString(value: unknown, label: string): string {\n if (typeof value !== 'string' || !value.trim()) throw new Error(`${label} 必须是非空字符串`)\n return value.trim()\n}\n\nfunction optionalString(value: unknown, label: string): string {\n if (typeof value !== 'string') throw new Error(`${label} 必须是字符串`)\n return value.trim()\n}\n\nfunction objectValue(value: unknown, label: string): Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw new Error(`${label} 必须是 JSON object`)\n }\n return value as Record<string, unknown>\n}\n\nfunction assertExactKeys(value: Record<string, unknown>, allowed: Set<string>, label: string): void {\n assertAllowedKeys(value, allowed, label)\n const missing = [...allowed].filter((key) => !(key in value))\n if (missing.length) throw new Error(`${label} 缺少字段: ${missing.join(', ')}`)\n}\n\nfunction assertAllowedKeys(value: Record<string, unknown>, allowed: Set<string>, label: string): void {\n const unknown = Object.keys(value).filter((key) => !allowed.has(key))\n if (unknown.length) throw new Error(`${label} 包含未知字段: ${unknown.join(', ')}`)\n}\n\nfunction rejectSecretLikeKeys(value: unknown, label: string, path: string[] = []): void {\n if (Array.isArray(value)) {\n value.forEach((item, index) => rejectSecretLikeKeys(item, label, [...path, String(index)]))\n return\n }\n if (!value || typeof value !== 'object') return\n for (const [key, item] of Object.entries(value as Record<string, unknown>)) {\n const next = [...path, key]\n if (SECRET_KEY.test(key)) {\n throw new Error(`${label} 禁止凭据字段: ${next.join('.')}`)\n }\n rejectSecretLikeKeys(item, label, next)\n }\n}\n\nfunction versionSatisfies(actualInput: string, rangeInput: string): boolean {\n const actual = parseVersion(actualInput)\n const range = rangeInput.trim()\n if (range === '*' || range === 'latest') return true\n const operator = range.startsWith('^') ? '^' : range.startsWith('~') ? '~' : '='\n const expected = parseVersion(operator === '=' ? range : range.slice(1))\n if (!actual || !expected) return false\n if (operator === '=') return actual.join('.') === expected.join('.')\n if (compareVersion(actual, expected) < 0) return false\n if (operator === '~') return actual[0] === expected[0] && actual[1] === expected[1]\n if (expected[0] > 0) return actual[0] === expected[0]\n if (expected[1] > 0) return actual[0] === 0 && actual[1] === expected[1]\n return actual[0] === 0 && actual[1] === 0 && actual[2] === expected[2]\n}\n\nfunction parseVersion(value: string): [number, number, number] | null {\n const match = value.trim().replace(/^v/, '').match(/^(\\d+)\\.(\\d+)\\.(\\d+)/)\n return match ? [Number(match[1]), Number(match[2]), Number(match[3])] : null\n}\n\nfunction compareVersion(a: number[], b: number[]): number {\n for (let index = 0; index < 3; index += 1) {\n if (a[index] !== b[index]) return a[index] - b[index]\n }\n return 0\n}\n\nfunction isInside(root: string, candidate: string): boolean {\n const rel = relative(root, candidate)\n return rel === '' || (rel !== '..' && !rel.startsWith(`..${process.platform === 'win32' ? '\\\\' : '/'}`))\n}\n"]}
|
|
1
|
+
{"version":3,"file":"development-workspace.js","sourceRoot":"","sources":["../../src/development-workspace.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from 'node:crypto'\nimport {\n existsSync, lstatSync, readFileSync, readdirSync, realpathSync, statSync,\n} from 'node:fs'\nimport { basename, dirname, join, parse, relative, resolve } from 'node:path'\nimport { findExecutable } from './doctor.js'\nimport { digest, stableStringify } from './events.js'\nimport { resolvePackageRoot } from './package-root.js'\nimport { loadWorkspace, workspacePath, type WorkspaceSpec } from './workspace.js'\n\nexport const PROJECT_FILE = 'dingtalk-agent.json'\nexport const CURRENT_WORKSPACE_FILE = '.dingtalk-agent/current-workspace'\nexport const WORKSPACE_STATE_ROOT = '.dingtalk-agent/state/workspaces'\nexport const LEGACY_WORKSPACE_NAME = 'legacy-prepared'\n\nexport type DevelopmentStage = 'dev' | 'test' | 'staging' | 'prod'\nexport type DeclaredProviderKind = 'opencode' | 'multica'\nexport type DevelopmentProviderKind = DeclaredProviderKind | 'local-prepared'\nexport type DevelopmentWorkspaceStatus =\n | 'declared' | 'resolving' | 'planned' | 'applying' | 'verifying'\n | 'ready' | 'drifted' | 'failed' | 'retired'\n\nexport interface OpenCodeProvider {\n kind: 'opencode'\n model: string\n}\n\nexport interface MulticaProvider {\n kind: 'multica'\n profile: string\n workspaceIdFrom: string\n runtimeIdFrom: string\n agentIdFrom?: string\n}\n\nexport interface WorkspaceStorage {\n memory: string\n knowledge: string\n artifacts?: string\n}\n\nexport interface WorkspaceAuthority {\n dwsProfileFrom: string\n expectedUserIdFrom: string\n}\n\nexport interface DeclaredWorkspace {\n stage: DevelopmentStage\n provider: OpenCodeProvider | MulticaProvider\n storage: WorkspaceStorage\n authority?: WorkspaceAuthority\n}\n\nexport interface AgentProjectManifest {\n $schema: 'dingtalk-agent/project@1'\n name: string\n dtaVersion: string\n agentPlatform?: string\n agent: {\n definition: string\n skills: string[]\n }\n workspaces: Record<string, DeclaredWorkspace>\n}\n\nexport interface DevelopmentWorkspaceState {\n $schema: 'dingtalk-agent/workspace-state@1'\n workspace: string\n provider: DeclaredProviderKind\n status: DevelopmentWorkspaceStatus\n binding: Record<string, string>\n desiredHash: string\n observedHash: string\n lastPlanId: string\n lastReceiptId: string\n lastEvalId: string\n}\n\nexport interface DevelopmentWorkspaceView {\n name: string\n stage: DevelopmentStage\n provider: { kind: DevelopmentProviderKind } & Record<string, string>\n storage: Required<WorkspaceStorage>\n authority: WorkspaceAuthority | null\n sourceHash: string\n desiredHash: string\n observedHash: string\n status: DevelopmentWorkspaceStatus\n current: boolean\n legacy: boolean\n statePath: string\n state: DevelopmentWorkspaceState | null\n drift: string[]\n configSources: string[]\n}\n\nexport interface AgentProjectInfo {\n $schema: 'dingtalk-agent/info@1'\n root: string\n source: 'manifest' | 'legacy'\n manifest: string\n manifestHash: string\n project: {\n name: string\n dtaVersion: string\n compatibleWithCli: boolean\n definition: string\n skills: string[]\n }\n currentWorkspace: string\n workspaces: DevelopmentWorkspaceView[]\n sideEffect: false\n dingtalkSideEffect: false\n}\n\nexport interface DevelopmentWorkspaceCheck {\n id: string\n surface: 'project' | 'provider' | 'definition' | 'skills' | 'storage' | 'authority' | 'state'\n level: 'pass' | 'warn' | 'fail'\n blocking: boolean\n summary: string\n evidence: Record<string, unknown>\n fix?: string\n}\n\nexport interface DevelopmentWorkspaceDoctorReport {\n $schema: 'dingtalk-agent/workspace-doctor@1'\n ready: boolean\n workspace: string\n provider: DevelopmentProviderKind\n desiredHash: string\n observedHash: string\n status: DevelopmentWorkspaceStatus\n checks: DevelopmentWorkspaceCheck[]\n missing: string[]\n configSources: string[]\n sideEffect: false\n dingtalkSideEffect: false\n}\n\ninterface LoadedProject {\n root: string\n source: 'manifest' | 'legacy'\n manifestPath: string\n manifestHash: string\n manifest: AgentProjectManifest\n legacy: WorkspaceSpec | null\n}\n\nconst PROJECT_KEYS = new Set(['$schema', 'name', 'dtaVersion', 'agent', 'workspaces'])\nconst PROJECT_OPTIONAL_KEYS = new Set([...PROJECT_KEYS, 'agentPlatform'])\nconst AGENT_KEYS = new Set(['definition', 'skills'])\nconst WORKSPACE_KEYS = new Set(['stage', 'provider', 'storage', 'authority'])\nconst OPENCODE_KEYS = new Set(['kind', 'model'])\nconst MULTICA_KEYS = new Set([\n 'kind', 'profile', 'workspaceIdFrom', 'runtimeIdFrom', 'agentIdFrom',\n])\nconst STORAGE_KEYS = new Set(['memory', 'knowledge', 'artifacts'])\nconst AUTHORITY_KEYS = new Set(['dwsProfileFrom', 'expectedUserIdFrom'])\nconst STATE_KEYS = new Set([\n '$schema', 'workspace', 'provider', 'status', 'binding', 'desiredHash', 'observedHash',\n 'lastPlanId', 'lastReceiptId', 'lastEvalId',\n])\nconst STATE_STATUSES = new Set<DevelopmentWorkspaceStatus>([\n 'declared', 'resolving', 'planned', 'applying', 'verifying',\n 'ready', 'drifted', 'failed', 'retired',\n])\nconst SECRET_KEY = /(?:secret|token|cookie|password|credentials?)$/i\nconst NAME = /^[a-z0-9](?:[a-z0-9._-]{0,62}[a-z0-9])?$/\nconst ENV_REF = /^env:[A-Z_][A-Z0-9_]*$/\n\nexport function findAgentProjectRoot(start = process.cwd()): string | null {\n let directory = resolve(start)\n if (existsSync(directory) && !statSync(directory).isDirectory()) directory = dirname(directory)\n while (true) {\n if (existsSync(join(directory, PROJECT_FILE)) || existsSync(workspacePath(directory))) {\n return realpathSync(directory)\n }\n const parent = dirname(directory)\n if (parent === directory || directory === parse(directory).root) return null\n directory = parent\n }\n}\n\nexport function inspectAgentProject(\n start = process.cwd(), cliVersion = '',\n): AgentProjectInfo {\n const loaded = loadAgentProject(start)\n const currentWorkspace = readCurrentWorkspace(loaded.root)\n const declared = Object.entries(loaded.manifest.workspaces)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([name, workspace]) => declaredView(loaded, name, workspace, currentWorkspace))\n if (loaded.legacy && !(LEGACY_WORKSPACE_NAME in loaded.manifest.workspaces)) {\n declared.push(legacyView(loaded, loaded.legacy, currentWorkspace))\n }\n if (currentWorkspace && !declared.some((item) => item.name === currentWorkspace)) {\n throw new Error(`current-workspace 指向未知 Workspace: ${currentWorkspace}`)\n }\n return {\n $schema: 'dingtalk-agent/info@1',\n root: loaded.root,\n source: loaded.source,\n manifest: loaded.manifestPath ? relative(loaded.root, loaded.manifestPath) : '',\n manifestHash: loaded.manifestHash,\n project: {\n name: loaded.manifest.name,\n dtaVersion: loaded.manifest.dtaVersion,\n compatibleWithCli: !cliVersion || versionSatisfies(cliVersion, loaded.manifest.dtaVersion),\n definition: loaded.manifest.agent.definition,\n skills: [...loaded.manifest.agent.skills],\n },\n currentWorkspace,\n workspaces: declared,\n sideEffect: false,\n dingtalkSideEffect: false,\n }\n}\n\nexport function showDevelopmentWorkspace(\n start: string, name: string, cliVersion = '',\n): DevelopmentWorkspaceView {\n const info = inspectAgentProject(start, cliVersion)\n const workspace = info.workspaces.find((item) => item.name === name)\n if (!workspace) throw new Error(`Project 未声明 Workspace: ${name}`)\n return workspace\n}\n\nexport function doctorDevelopmentWorkspace(\n start: string,\n name: string,\n options: { cliVersion?: string; env?: NodeJS.ProcessEnv } = {},\n): DevelopmentWorkspaceDoctorReport {\n const cliVersion = options.cliVersion || ''\n const env = options.env || process.env\n const info = inspectAgentProject(start, cliVersion)\n const workspace = info.workspaces.find((item) => item.name === name)\n if (!workspace) throw new Error(`Project 未声明 Workspace: ${name}`)\n const checks: DevelopmentWorkspaceCheck[] = []\n const add = (\n id: string, surface: DevelopmentWorkspaceCheck['surface'], level: DevelopmentWorkspaceCheck['level'],\n blocking: boolean, summary: string, evidence: Record<string, unknown> = {}, fix?: string,\n ) => checks.push({ id, surface, level, blocking, summary, evidence, ...(fix ? { fix } : {}) })\n\n add('project.schema', 'project', 'pass', true, 'Project manifest/schema 可解析', {\n source: info.source, manifestHash: info.manifestHash,\n })\n add('project.version', 'project', info.project.compatibleWithCli ? 'pass' : 'fail', true,\n info.project.compatibleWithCli ? 'Project 声明兼容当前 dta 版本' : 'Project dtaVersion 与当前 CLI 不兼容',\n { required: info.project.dtaVersion, actual: cliVersion || 'unknown' },\n '升级 CLI,或在审阅兼容性后更新 dingtalk-agent.json#dtaVersion')\n\n const definition = inspectLocalFile(info.root, info.project.definition)\n add('definition.file', 'definition', definition.valid ? 'pass' : 'fail', true,\n definition.valid ? 'Agent Definition 位于 Project 内且可读' : 'Agent Definition 缺失、越界或不是文件',\n definition, `修复 ${info.project.definition}`)\n\n for (const [slot, uri] of Object.entries(workspace.storage)) {\n const local = inspectStorageRoute(info.root, uri)\n const blocking = !uri.startsWith('dingtalk-doc:') && !(workspace.legacy && slot === 'artifacts')\n add(`storage.${slot}`, 'storage', local.valid ? 'pass' : blocking ? 'fail' : 'warn', blocking,\n local.valid ? `${slot} Storage route 可解析`\n : uri.startsWith('dingtalk-doc:') ? `${slot} 是远端语义路由,W1 不执行 DWS 回读`\n : `${slot} 本地 Storage route 缺失或越界`,\n { route: uri, ...local }, local.fix)\n }\n\n if (workspace.state) {\n add('state.provider', 'state', workspace.drift.includes('provider') ? 'fail' : 'pass', true,\n workspace.drift.includes('provider') ? 'State Provider 与声明不一致' : 'State Provider 与声明一致',\n { declared: workspace.provider.kind, observed: workspace.state.provider })\n add('state.desired-hash', 'state', workspace.drift.includes('desiredHash') ? 'fail' : 'pass', true,\n workspace.drift.includes('desiredHash') ? 'State desiredHash 已漂移' : 'State desiredHash 与声明一致',\n { desiredHash: workspace.desiredHash, stateDesiredHash: workspace.state.desiredHash })\n add('state.status', 'state', workspace.state.status === 'ready' ? 'pass' : 'fail', true,\n workspace.state.status === 'ready' ? 'Provider state 已回读为 ready'\n : `Provider state 尚未 ready: ${workspace.state.status}`,\n { status: workspace.state.status })\n const observedHashValid = /^[a-f0-9]{64}$/.test(workspace.state.observedHash)\n add('state.observed-hash', 'state', observedHashValid ? 'pass' : 'fail', true,\n observedHashValid ? 'Provider observedHash 是稳定 sha256' : 'ready state 缺少有效 observedHash',\n { configured: Boolean(workspace.state.observedHash) })\n } else {\n const required = !workspace.legacy\n add('state.present', 'state', required ? 'fail' : 'warn', required,\n required ? '尚无 Provider 回读 state;Workspace 只完成声明,尚未就绪'\n : 'Legacy adapter 不要求新的 Provider state', {\n expectedPath: workspace.statePath,\n })\n }\n\n if (workspace.provider.kind === 'opencode') {\n inspectOpenCodeWorkspace(info, workspace, env, add)\n } else if (workspace.provider.kind === 'multica') {\n inspectDeclaredMulticaWorkspace(workspace, env, add)\n } else {\n add('provider.legacy', 'provider', 'pass', true,\n 'Legacy Prepared Workspace 已通过 workspace@1 parser 只读加载', {\n provider: workspace.provider.kind, state: 'adapter-only',\n })\n }\n\n const missing = checks.filter((check) => check.blocking && check.level !== 'pass')\n .map((check) => check.id)\n return {\n $schema: 'dingtalk-agent/workspace-doctor@1',\n ready: missing.length === 0,\n workspace: workspace.name,\n provider: workspace.provider.kind,\n desiredHash: workspace.desiredHash,\n observedHash: workspace.observedHash,\n status: workspace.status,\n checks,\n missing,\n configSources: workspace.configSources,\n sideEffect: false,\n dingtalkSideEffect: false,\n }\n}\n\nfunction loadAgentProject(start: string): LoadedProject {\n const root = findAgentProjectRoot(start)\n if (!root) {\n throw new Error(`找不到 ${PROJECT_FILE} 或 ${workspacePath('<project>')};请在 Agent Project 内运行`)\n }\n const manifestPath = join(root, PROJECT_FILE)\n const legacyPath = workspacePath(root)\n if (existsSync(legacyPath) && (\n lstatSync(legacyPath).isSymbolicLink() || !isInside(root, realpathSync(legacyPath))\n )) {\n throw new Error('Legacy workspace manifest 不能是越界符号链接')\n }\n const legacy = existsSync(legacyPath) ? loadWorkspace(root) : null\n if (!existsSync(manifestPath)) {\n if (!legacy) throw new Error(`找不到 ${PROJECT_FILE}`)\n const manifest = syntheticLegacyProject(root, legacy)\n return {\n root, source: 'legacy', manifestPath: '', manifest,\n manifestHash: digest(stableStringify(manifest)), legacy,\n }\n }\n if (lstatSync(manifestPath).isSymbolicLink()) {\n throw new Error(`${PROJECT_FILE} 不能是符号链接`)\n }\n let raw: unknown\n let source = ''\n try {\n source = readFileSync(manifestPath, 'utf8')\n raw = JSON.parse(source)\n } catch (error) {\n throw new Error(`${PROJECT_FILE} 不是合法 JSON: ${error.message}`)\n }\n rejectSecretLikeKeys(raw, PROJECT_FILE)\n const manifest = validateProjectManifest(raw, root)\n return {\n root, source: 'manifest', manifestPath: realpathSync(manifestPath), manifest,\n manifestHash: digest(stableStringify(manifest)), legacy,\n }\n}\n\nfunction validateProjectManifest(value: unknown, root: string): AgentProjectManifest {\n const input = objectValue(value, 'Project manifest')\n assertAllowedKeys(input, PROJECT_OPTIONAL_KEYS, 'Project manifest')\n const missing = [...PROJECT_KEYS].filter((key) => !(key in input))\n if (missing.length) throw new Error(`Project manifest 缺少字段: ${missing.join(', ')}`)\n if (input.$schema !== 'dingtalk-agent/project@1') {\n throw new Error('Project manifest 缺少 dingtalk-agent/project@1 schema')\n }\n const name = stableName(input.name, 'Project name')\n const dtaVersion = requiredString(input.dtaVersion, 'dtaVersion')\n const agentPlatform = input.agentPlatform === undefined\n ? undefined : requiredString(input.agentPlatform, 'agentPlatform')\n const agentInput = objectValue(input.agent, 'Project agent')\n assertExactKeys(agentInput, AGENT_KEYS, 'Project agent')\n const definition = safeRelativePath(root, requiredString(agentInput.definition, 'agent.definition'),\n 'agent.definition', false)\n if (!Array.isArray(agentInput.skills) || agentInput.skills.length === 0) {\n throw new Error('agent.skills 必须是非空 string[]')\n }\n const skills = agentInput.skills.map((item, index) => stableName(item, `agent.skills[${index}]`))\n if (new Set(skills).size !== skills.length) throw new Error('agent.skills 不能包含重复项')\n if (!skills.includes('dingtalk-basic-behavior')) {\n throw new Error('agent.skills 必须显式包含 dingtalk-basic-behavior')\n }\n const workspaceInput = objectValue(input.workspaces, 'Project workspaces')\n const workspaces: Record<string, DeclaredWorkspace> = {}\n for (const [workspaceName, rawWorkspace] of Object.entries(workspaceInput)) {\n stableName(workspaceName, `Workspace name ${workspaceName}`)\n if (workspaceName === LEGACY_WORKSPACE_NAME) {\n throw new Error(`${LEGACY_WORKSPACE_NAME} 是 legacy adapter 保留名称`)\n }\n workspaces[workspaceName] = validateDeclaredWorkspace(rawWorkspace, root, workspaceName)\n }\n return {\n $schema: 'dingtalk-agent/project@1', name, dtaVersion,\n ...(agentPlatform === undefined ? {} : { agentPlatform }),\n agent: { definition, skills }, workspaces,\n }\n}\n\nfunction validateDeclaredWorkspace(value: unknown, root: string, name: string): DeclaredWorkspace {\n const input = objectValue(value, `Workspace ${name}`)\n assertAllowedKeys(input, WORKSPACE_KEYS, `Workspace ${name}`)\n for (const required of ['stage', 'provider', 'storage']) {\n if (!(required in input)) throw new Error(`Workspace ${name} 缺少字段: ${required}`)\n }\n const stage = requiredString(input.stage, `Workspace ${name}.stage`) as DevelopmentStage\n if (!['dev', 'test', 'staging', 'prod'].includes(stage)) {\n throw new Error(`Workspace ${name}.stage 非法: ${stage}`)\n }\n const providerInput = objectValue(input.provider, `Workspace ${name}.provider`)\n const kind = requiredString(providerInput.kind, `Workspace ${name}.provider.kind`)\n let provider: OpenCodeProvider | MulticaProvider\n if (kind === 'opencode') {\n assertExactKeys(providerInput, OPENCODE_KEYS, `Workspace ${name}.provider`)\n provider = { kind, model: requiredString(providerInput.model, `Workspace ${name}.provider.model`) }\n } else if (kind === 'multica') {\n assertAllowedKeys(providerInput, MULTICA_KEYS, `Workspace ${name}.provider`)\n for (const required of ['kind', 'profile', 'workspaceIdFrom', 'runtimeIdFrom']) {\n if (!(required in providerInput)) {\n throw new Error(`Workspace ${name}.provider 缺少字段: ${required}`)\n }\n }\n provider = {\n kind,\n profile: requiredString(providerInput.profile, `Workspace ${name}.provider.profile`),\n workspaceIdFrom: envReference(providerInput.workspaceIdFrom, `${name}.workspaceIdFrom`),\n runtimeIdFrom: envReference(providerInput.runtimeIdFrom, `${name}.runtimeIdFrom`),\n ...(providerInput.agentIdFrom === undefined ? {} : {\n agentIdFrom: envReference(providerInput.agentIdFrom, `${name}.agentIdFrom`),\n }),\n }\n } else {\n throw new Error(`Workspace ${name}.provider.kind 只支持 opencode / multica`)\n }\n const storageInput = objectValue(input.storage, `Workspace ${name}.storage`)\n assertAllowedKeys(storageInput, STORAGE_KEYS, `Workspace ${name}.storage`)\n const memory = storageRoute(storageInput.memory, ['local-md', 'dingtalk-doc'], `${name}.memory`, root)\n const knowledge = storageRoute(\n storageInput.knowledge, ['local-md', 'dingtalk-doc'], `${name}.knowledge`, root,\n )\n const artifacts = storageInput.artifacts === undefined ? undefined\n : storageRoute(storageInput.artifacts, ['local-dir'], `${name}.artifacts`, root)\n let authority: WorkspaceAuthority | undefined\n if (input.authority !== undefined) {\n const authorityInput = objectValue(input.authority, `Workspace ${name}.authority`)\n assertExactKeys(authorityInput, AUTHORITY_KEYS, `Workspace ${name}.authority`)\n authority = {\n dwsProfileFrom: envReference(authorityInput.dwsProfileFrom, `${name}.dwsProfileFrom`),\n expectedUserIdFrom: envReference(\n authorityInput.expectedUserIdFrom, `${name}.expectedUserIdFrom`,\n ),\n }\n }\n if (provider.kind === 'multica' && !authority) {\n throw new Error(`Workspace ${name} 的 multica Provider 必须声明 authority env 来源`)\n }\n return { stage, provider, storage: { memory, knowledge, ...(artifacts ? { artifacts } : {}) },\n ...(authority ? { authority } : {}) }\n}\n\nfunction declaredView(\n loaded: LoadedProject,\n name: string,\n workspace: DeclaredWorkspace,\n currentWorkspace: string,\n): DevelopmentWorkspaceView {\n const artifacts = workspace.storage.artifacts ||\n `local-dir:.dingtalk-agent/artifacts/${name}`\n const storage: Required<WorkspaceStorage> = { ...workspace.storage, artifacts }\n const sourceHash = projectSourceHash(loaded.root, loaded.manifest)\n const desiredHash = digest(stableStringify({\n project: loaded.manifest.name,\n agent: loaded.manifest.agent,\n workspace: name,\n stage: workspace.stage,\n provider: workspace.provider,\n storage,\n authority: workspace.authority || null,\n sourceHash,\n }))\n const statePath = join(loaded.root, WORKSPACE_STATE_ROOT, `${name}.json`)\n const state = existsSync(statePath)\n ? loadDevelopmentWorkspaceState(statePath, name, loaded.root) : null\n const drift: string[] = []\n if (state && state.provider !== workspace.provider.kind) drift.push('provider')\n if (state && state.desiredHash !== desiredHash) drift.push('desiredHash')\n const status: DevelopmentWorkspaceStatus = drift.length ? 'drifted' : state?.status || 'declared'\n return {\n name,\n stage: workspace.stage,\n provider: { ...workspace.provider },\n storage,\n authority: workspace.authority || null,\n sourceHash,\n desiredHash,\n observedHash: state?.observedHash || '',\n status,\n current: currentWorkspace === name,\n legacy: false,\n statePath: relative(loaded.root, statePath),\n state,\n drift,\n configSources: collectConfigSources(workspace),\n }\n}\n\nfunction legacyView(\n loaded: LoadedProject, spec: WorkspaceSpec, currentWorkspace: string,\n): DevelopmentWorkspaceView {\n const storage: Required<WorkspaceStorage> = {\n memory: spec.mounts.memory,\n knowledge: spec.mounts.knowledge,\n artifacts: 'local-dir:.dingtalk-agent/artifacts/legacy-prepared',\n }\n const desiredHash = digest(stableStringify({ provider: 'local-prepared', workspace: spec }))\n return {\n name: LEGACY_WORKSPACE_NAME,\n stage: 'dev',\n provider: { kind: 'local-prepared', contextId: spec.contextId, fieldId: spec.fieldId },\n storage,\n authority: spec.dws.profile || spec.dws.expectedUserId ? {\n dwsProfileFrom: 'legacy:workspace.dws.profile',\n expectedUserIdFrom: 'legacy:workspace.dws.expectedUserId',\n } : null,\n sourceHash: digest(stableStringify({ definition: spec.mounts.profile, skills: spec.skills })),\n desiredHash,\n observedHash: desiredHash,\n status: 'ready',\n current: currentWorkspace === LEGACY_WORKSPACE_NAME,\n legacy: true,\n statePath: relative(loaded.root, workspacePath(loaded.root)),\n state: null,\n drift: [],\n configSources: ['legacy:.dingtalk-agent/workspace.json'],\n }\n}\n\nfunction projectSourceHash(root: string, manifest: AgentProjectManifest): string {\n const sources: Record<string, string> = {\n definition: localContentHash(root, manifest.agent.definition),\n opencode: localContentHash(root, 'opencode.json'),\n }\n for (const name of manifest.agent.skills) {\n const ref = name === 'dingtalk-basic-behavior'\n ? `.agents/skills/${name}` : `skills/${name}`\n sources[`skill:${name}`] = localContentHash(root, ref)\n const exposure = `.agents/skills/${name}`\n sources[`exposure:${name}`] = localContentHash(root, exposure)\n }\n return digest(stableStringify(sources))\n}\n\nfunction localContentHash(root: string, ref: string): string {\n const candidate = resolve(root, ref)\n if (!isInside(root, candidate) || !existsSync(candidate)) return ''\n const actual = realpathSync(candidate)\n if (!isInside(root, actual)) throw new Error(`Project source 真实路径越界: ${ref}`)\n const stat = lstatSync(actual)\n if (stat.isSymbolicLink()) throw new Error(`Project source 不允许符号链接: ${ref}`)\n if (stat.isFile()) return sha256(readFileSync(actual))\n if (!stat.isDirectory()) throw new Error(`Project source 类型非法: ${ref}`)\n const entries: Array<{ path: string; hash: string }> = []\n const visit = (directory: string, prefix = ''): void => {\n for (const entry of readdirSorted(directory)) {\n const path = join(directory, entry.name)\n const relativePath = prefix ? `${prefix}/${entry.name}` : entry.name\n if (entry.isSymbolicLink()) throw new Error(`Project source 不允许符号链接: ${ref}/${relativePath}`)\n if (entry.isDirectory()) visit(path, relativePath)\n else if (entry.isFile()) entries.push({ path: relativePath, hash: sha256(readFileSync(path)) })\n else throw new Error(`Project source 类型非法: ${ref}/${relativePath}`)\n }\n }\n visit(actual)\n return digest(stableStringify(entries))\n}\n\nfunction readdirSorted(directory: string): import('node:fs').Dirent[] {\n return readdirSync(directory, { withFileTypes: true })\n .sort((a, b) => a.name.localeCompare(b.name))\n}\n\nfunction sha256(value: string | Buffer): string {\n return createHash('sha256').update(value).digest('hex')\n}\n\nfunction loadDevelopmentWorkspaceState(\n path: string, workspace: string, root: string,\n): DevelopmentWorkspaceState {\n if (lstatSync(path).isSymbolicLink()) throw new Error(`Workspace state 不能是符号链接: ${path}`)\n if (!isInside(root, realpathSync(path))) throw new Error(`Workspace state 真实路径越出 Project: ${path}`)\n let raw: unknown\n try { raw = JSON.parse(readFileSync(path, 'utf8')) }\n catch (error) { throw new Error(`Workspace state 不是合法 JSON: ${error.message}`) }\n rejectSecretLikeKeys(raw, 'Workspace state')\n const input = objectValue(raw, 'Workspace state')\n assertExactKeys(input, STATE_KEYS, 'Workspace state')\n if (input.$schema !== 'dingtalk-agent/workspace-state@1') {\n throw new Error('Workspace state 缺少 dingtalk-agent/workspace-state@1 schema')\n }\n if (input.workspace !== workspace) {\n throw new Error(`Workspace state 名称不一致: ${String(input.workspace)} != ${workspace}`)\n }\n const provider = requiredString(input.provider, 'Workspace state provider') as DeclaredProviderKind\n if (!['opencode', 'multica'].includes(provider)) throw new Error(`Workspace state provider 非法: ${provider}`)\n const status = requiredString(input.status, 'Workspace state status') as DevelopmentWorkspaceStatus\n if (!STATE_STATUSES.has(status)) throw new Error(`Workspace state status 非法: ${status}`)\n const bindingInput = objectValue(input.binding, 'Workspace state binding')\n const binding = Object.fromEntries(Object.entries(bindingInput).map(([key, item]) => [\n key, optionalString(item, `Workspace state binding.${key}`),\n ]))\n return {\n $schema: 'dingtalk-agent/workspace-state@1', workspace, provider, status, binding,\n desiredHash: requiredString(input.desiredHash, 'Workspace state desiredHash'),\n observedHash: optionalString(input.observedHash, 'Workspace state observedHash'),\n lastPlanId: optionalString(input.lastPlanId, 'Workspace state lastPlanId'),\n lastReceiptId: optionalString(input.lastReceiptId, 'Workspace state lastReceiptId'),\n lastEvalId: optionalString(input.lastEvalId, 'Workspace state lastEvalId'),\n }\n}\n\nfunction inspectOpenCodeWorkspace(\n info: AgentProjectInfo,\n workspace: DevelopmentWorkspaceView,\n env: NodeJS.ProcessEnv,\n add: (\n id: string, surface: DevelopmentWorkspaceCheck['surface'], level: DevelopmentWorkspaceCheck['level'],\n blocking: boolean, summary: string, evidence?: Record<string, unknown>, fix?: string,\n ) => void,\n): void {\n const executable = findExecutable('opencode', env)\n add('provider.opencode-cli', 'provider', executable ? 'pass' : 'fail', true,\n executable ? 'OpenCode CLI 可执行' : 'PATH 找不到 opencode',\n { executable: executable || '' }, '安装 OpenCode,并确认 opencode --version 可执行')\n add('provider.opencode-model', 'provider', workspace.provider.model ? 'pass' : 'fail', true,\n workspace.provider.model ? 'OpenCode model 已显式声明' : 'OpenCode model 缺失',\n { model: workspace.provider.model || '' })\n\n const basicPath = '.agents/skills/dingtalk-basic-behavior/SKILL.md'\n const basic = inspectLocalFile(info.root, basicPath)\n const canonicalBasic = inspectLocalFile(\n resolvePackageRoot(import.meta.url), 'skills/dingtalk-basic-behavior/SKILL.md',\n )\n const basicMatched = basic.valid && canonicalBasic.valid && basic.hash === canonicalBasic.hash\n add('skills.basic-exposure', 'skills', basicMatched ? 'pass' : 'fail', true,\n basicMatched ? 'Basic Skill exposure 与当前 canonical source 一致'\n : 'Basic Skill exposure 缺失、越界或 hash 漂移',\n { exposure: basic, canonicalHash: canonicalBasic.hash || '' }, `重新物化 ${basicPath}`)\n const configPath = join(info.root, 'opencode.json')\n const configFile = inspectLocalFile(info.root, 'opencode.json')\n let configError = ''\n let instructionCount = 0\n let permission = ''\n let permissions: Record<string, string> = {}\n if (configFile.valid) {\n try {\n const config = JSON.parse(readFileSync(configPath, 'utf8')) as Record<string, any>\n const instructions = Array.isArray(config.instructions) ? config.instructions : []\n instructionCount = instructions.filter((item) => item === basicPath).length\n const skillPermissions = config.permission?.skill\n permissions = skillPermissions && typeof skillPermissions === 'object' &&\n !Array.isArray(skillPermissions)\n ? Object.fromEntries(Object.entries(skillPermissions).map(([key, value]) => [key, String(value)]))\n : {}\n permission = permissions['dingtalk-basic-behavior'] || ''\n } catch (error) { configError = error.message }\n } else configError = configFile.exists ? 'outside-or-not-file' : 'missing'\n const configValid = !configError && instructionCount === 1 && permission === 'allow'\n add('skills.basic-instruction', 'skills', configValid ? 'pass' : 'fail', true,\n configValid ? 'OpenCode config 强制加载且允许 Basic Skill' : 'OpenCode Basic instruction/permission 合同不完整',\n { path: 'opencode.json', error: configError, instructionCount, permission },\n '运行 compose/bind 流程生成唯一 Basic instruction 与 allow permission')\n\n for (const name of info.project.skills.filter((item) => item !== 'dingtalk-basic-behavior')) {\n const source = inspectLocalFile(info.root, `skills/${name}/SKILL.md`)\n const exposure = inspectLocalFile(info.root, `.agents/skills/${name}/SKILL.md`)\n const matched = source.valid && exposure.valid && source.hash === exposure.hash &&\n permissions[name] === 'allow'\n add(`skills.role.${name}`, 'skills', matched ? 'pass' : 'fail', true,\n matched ? `Role Skill ${name} source/exposure hash 与 permission 一致`\n : `Role Skill ${name} source、exposure hash 或 permission 不一致`,\n { source, exposure, permission: permissions[name] || '' }, `运行 compose/bind 流程物化 ${name}`)\n }\n const managedRef = workspace.state?.binding.managedPath || ''\n if (managedRef) {\n const managedHash = localContentHash(info.root, managedRef)\n const matched = Boolean(managedHash && managedHash === workspace.state?.observedHash &&\n workspace.state?.binding.sourceHash === workspace.sourceHash &&\n workspace.state?.binding.model === workspace.provider.model)\n add('provider.managed-integrity', 'provider', matched ? 'pass' : 'fail', true,\n matched ? 'Managed Workspace、source/model 与 observed hash 一致'\n : 'Managed Workspace 缺失或 source/model/observed hash 漂移', {\n path: managedRef,\n actualHash: managedHash,\n expectedHash: workspace.state?.observedHash || '',\n sourceMatched: workspace.state?.binding.sourceHash === workspace.sourceHash,\n modelMatched: workspace.state?.binding.model === workspace.provider.model,\n }, `重新执行 dta workspace create ${workspace.name} --yes`)\n }\n const loadVerified = workspace.state?.status === 'ready' && Boolean(\n workspace.state.lastReceiptId || workspace.state.lastEvalId)\n add('provider.load-proof', 'provider', loadVerified ? 'pass' : 'warn', false,\n loadVerified\n ? 'Provider state 已绑定通过的随机 load/eval 证据;详情见 lastReceiptId/lastEvalId'\n : '尚未取得随机 load probe;先执行 workspace run/eval', {\n executed: Boolean(workspace.state?.lastReceiptId || workspace.state?.lastEvalId),\n lastReceiptId: workspace.state?.lastReceiptId || '',\n lastEvalId: workspace.state?.lastEvalId || '',\n })\n}\n\nfunction inspectDeclaredMulticaWorkspace(\n workspace: DevelopmentWorkspaceView,\n env: NodeJS.ProcessEnv,\n add: (\n id: string, surface: DevelopmentWorkspaceCheck['surface'], level: DevelopmentWorkspaceCheck['level'],\n blocking: boolean, summary: string, evidence?: Record<string, unknown>, fix?: string,\n ) => void,\n): void {\n const executable = findExecutable('multica', env)\n add('provider.multica-cli', 'provider', executable ? 'pass' : 'fail', true,\n executable ? 'Multica CLI 可执行' : 'PATH 找不到 multica;仅当前 Multica Workspace 不就绪',\n { executable: executable || '' }, '安装 Multica CLI;其他 Provider Workspace 不受影响')\n const refs = [\n ['workspace-id', workspace.provider.workspaceIdFrom],\n ['runtime-id', workspace.provider.runtimeIdFrom],\n ['dws-profile', workspace.authority?.dwsProfileFrom || ''],\n ['expected-user-id', workspace.authority?.expectedUserIdFrom || ''],\n ] as const\n for (const [id, ref] of refs) {\n const variable = ref.startsWith('env:') ? ref.slice(4) : ''\n const configured = Boolean(variable && env[variable])\n add(`authority.${id}`, 'authority', configured ? 'pass' : 'fail', true,\n configured ? `${id} 来源已解析` : `${id} 环境来源未设置`,\n { source: ref, configured }, `设置 ${ref || '<missing-env-ref>'}`)\n }\n const agentRef = workspace.provider.agentIdFrom || ''\n const agentVariable = agentRef.startsWith('env:') ? agentRef.slice(4) : ''\n const agentConfigured = Boolean(agentVariable && env[agentVariable])\n add('authority.agent-id', 'authority', agentRef && agentConfigured ? 'pass' : 'warn', false,\n agentRef\n ? agentConfigured ? 'agent-id 可信来源已解析' : 'agent-id 来源未设置;只允许列候选,不按名称绑定'\n : '未声明 agent-id;W3 只列候选,W4 create 后必须保存稳定 ID',\n { source: agentRef, configured: agentConfigured },\n agentRef ? `设置 ${agentRef}` : '已有 Agent 时声明 provider.agentIdFrom;新 Agent 由 W4 apply 保存 ID')\n const inspectionId = workspace.state?.binding.inspectionId || ''\n add('provider.remote-inspect', 'provider', 'warn', false,\n inspectionId\n ? '已有脱敏 Multica 只读 inspection;W4 load/smoke 前仍不能 ready'\n : '尚未运行 Multica 只读 inspection;不会创建或更新远端资源', {\n executed: Boolean(inspectionId), inspectionId, remoteWrite: false,\n })\n}\n\nfunction inspectStorageRoute(root: string, uri: string): Record<string, any> {\n if (uri.startsWith('dingtalk-doc:')) {\n return { valid: false, provider: 'dingtalk-doc', local: false, checked: false }\n }\n const separator = uri.indexOf(':')\n const provider = uri.slice(0, separator)\n const ref = uri.slice(separator + 1)\n const inspected = provider === 'local-md'\n ? inspectLocalFile(root, ref)\n : inspectLocalDirectory(root, ref)\n return { ...inspected, provider, local: true, checked: true }\n}\n\nfunction inspectLocalFile(root: string, ref: string): Record<string, any> {\n const inspected = inspectLocalPath(root, ref)\n const valid = inspected.inside && inspected.exists && inspected.type === 'file'\n return { ...inspected, valid, fix: valid ? undefined : `创建 Project 内文件 ${ref}` }\n}\n\nfunction inspectLocalDirectory(root: string, ref: string): Record<string, any> {\n const inspected = inspectLocalPath(root, ref)\n const valid = inspected.inside && inspected.exists && inspected.type === 'directory'\n return { ...inspected, valid, fix: valid ? undefined : `创建 Project 内目录 ${ref}` }\n}\n\nfunction inspectLocalPath(root: string, ref: string): Record<string, unknown> {\n const candidate = resolve(root, ref)\n const inside = isInside(root, candidate)\n if (!inside || !existsSync(candidate)) {\n return { path: ref, inside, exists: false, type: 'missing' }\n }\n const actual = realpathSync(candidate)\n const actualInside = isInside(root, actual)\n const stat = statSync(actual)\n return {\n path: relative(root, actual), inside: actualInside, exists: true,\n type: stat.isFile() ? 'file' : stat.isDirectory() ? 'directory' : 'other',\n ...(stat.isFile() && actualInside ? { hash: digest(readFileSync(actual, 'utf8')) } : {}),\n }\n}\n\nfunction syntheticLegacyProject(root: string, workspace: WorkspaceSpec): AgentProjectManifest {\n const definition = workspace.mounts.profile.startsWith('local-md:')\n ? workspace.mounts.profile.slice('local-md:'.length) : 'WORKSPACE.md'\n return {\n $schema: 'dingtalk-agent/project@1',\n name: stableName(basename(root) || 'legacy-agent', 'Legacy Project name'),\n dtaVersion: '*',\n agent: { definition, skills: [...workspace.skills] },\n workspaces: {},\n }\n}\n\nfunction readCurrentWorkspace(root: string): string {\n const path = join(root, CURRENT_WORKSPACE_FILE)\n if (!existsSync(path)) return ''\n if (lstatSync(path).isSymbolicLink()) throw new Error('current-workspace 不能是符号链接')\n if (!isInside(root, realpathSync(path))) throw new Error('current-workspace 真实路径越出 Project')\n const value = readFileSync(path, 'utf8').trim()\n return value ? stableName(value, 'current-workspace') : ''\n}\n\nfunction collectConfigSources(workspace: DeclaredWorkspace): string[] {\n const sources = [\n `manifest:provider.kind=${workspace.provider.kind}`,\n `manifest:stage=${workspace.stage}`,\n ]\n if (workspace.provider.kind === 'opencode') sources.push('manifest:provider.model')\n else sources.push(\n 'manifest:provider.profile', workspace.provider.workspaceIdFrom, workspace.provider.runtimeIdFrom,\n ...(workspace.provider.agentIdFrom ? [workspace.provider.agentIdFrom] : []),\n )\n if (workspace.authority) sources.push(\n workspace.authority.dwsProfileFrom, workspace.authority.expectedUserIdFrom,\n )\n return [...new Set(sources)]\n}\n\nfunction storageRoute(\n value: unknown, providers: string[], label: string, root: string,\n): string {\n const text = requiredString(value, label)\n const separator = text.indexOf(':')\n const provider = separator < 0 ? '' : text.slice(0, separator)\n const ref = separator < 0 ? '' : text.slice(separator + 1).trim()\n if (!providers.includes(provider) || !ref) {\n throw new Error(`${label} Storage 非法;允许 ${providers.map((item) => `${item}:<ref>`).join(' / ')}`)\n }\n if (provider.startsWith('local-')) safeRelativePath(root, ref, label, true)\n return `${provider}:${ref}`\n}\n\nfunction safeRelativePath(root: string, input: string, label: string, allowMissing: boolean): string {\n if (input.includes('\\0')) throw new Error(`${label} 包含 NUL`) // defensive for non-POSIX callers\n const candidate = resolve(root, input)\n if (!isInside(root, candidate) || candidate === root) throw new Error(`${label} 必须位于 Project 内: ${input}`)\n if (existsSync(candidate)) {\n const actual = realpathSync(candidate)\n if (!isInside(root, actual)) throw new Error(`${label} 真实路径越出 Project: ${input}`)\n } else if (!allowMissing && !isInside(root, candidate)) {\n throw new Error(`${label} 越出 Project: ${input}`)\n }\n return relative(root, candidate).split('\\\\').join('/')\n}\n\nfunction envReference(value: unknown, label: string): string {\n const text = requiredString(value, label)\n if (!ENV_REF.test(text)) throw new Error(`${label} 必须是 env:UPPER_CASE_VAR 引用`)\n return text\n}\n\nfunction stableName(value: unknown, label: string): string {\n const text = requiredString(value, label)\n if (!NAME.test(text)) throw new Error(`${label} 非法: ${text}`)\n return text\n}\n\nfunction requiredString(value: unknown, label: string): string {\n if (typeof value !== 'string' || !value.trim()) throw new Error(`${label} 必须是非空字符串`)\n return value.trim()\n}\n\nfunction optionalString(value: unknown, label: string): string {\n if (typeof value !== 'string') throw new Error(`${label} 必须是字符串`)\n return value.trim()\n}\n\nfunction objectValue(value: unknown, label: string): Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw new Error(`${label} 必须是 JSON object`)\n }\n return value as Record<string, unknown>\n}\n\nfunction assertExactKeys(value: Record<string, unknown>, allowed: Set<string>, label: string): void {\n assertAllowedKeys(value, allowed, label)\n const missing = [...allowed].filter((key) => !(key in value))\n if (missing.length) throw new Error(`${label} 缺少字段: ${missing.join(', ')}`)\n}\n\nfunction assertAllowedKeys(value: Record<string, unknown>, allowed: Set<string>, label: string): void {\n const unknown = Object.keys(value).filter((key) => !allowed.has(key))\n if (unknown.length) throw new Error(`${label} 包含未知字段: ${unknown.join(', ')}`)\n}\n\nfunction rejectSecretLikeKeys(value: unknown, label: string, path: string[] = []): void {\n if (Array.isArray(value)) {\n value.forEach((item, index) => rejectSecretLikeKeys(item, label, [...path, String(index)]))\n return\n }\n if (!value || typeof value !== 'object') return\n for (const [key, item] of Object.entries(value as Record<string, unknown>)) {\n const next = [...path, key]\n if (SECRET_KEY.test(key)) {\n throw new Error(`${label} 禁止凭据字段: ${next.join('.')}`)\n }\n rejectSecretLikeKeys(item, label, next)\n }\n}\n\nfunction versionSatisfies(actualInput: string, rangeInput: string): boolean {\n const actual = parseVersion(actualInput)\n const range = rangeInput.trim()\n if (range === '*' || range === 'latest') return true\n const operator = range.startsWith('^') ? '^' : range.startsWith('~') ? '~' : '='\n const expected = parseVersion(operator === '=' ? range : range.slice(1))\n if (!actual || !expected) return false\n if (operator === '=') return actual.join('.') === expected.join('.')\n if (compareVersion(actual, expected) < 0) return false\n if (operator === '~') return actual[0] === expected[0] && actual[1] === expected[1]\n if (expected[0] > 0) return actual[0] === expected[0]\n if (expected[1] > 0) return actual[0] === 0 && actual[1] === expected[1]\n return actual[0] === 0 && actual[1] === 0 && actual[2] === expected[2]\n}\n\nfunction parseVersion(value: string): [number, number, number] | null {\n const match = value.trim().replace(/^v/, '').match(/^(\\d+)\\.(\\d+)\\.(\\d+)/)\n return match ? [Number(match[1]), Number(match[2]), Number(match[3])] : null\n}\n\nfunction compareVersion(a: number[], b: number[]): number {\n for (let index = 0; index < 3; index += 1) {\n if (a[index] !== b[index]) return a[index] - b[index]\n }\n return 0\n}\n\nfunction isInside(root: string, candidate: string): boolean {\n const rel = relative(root, candidate)\n return rel === '' || (rel !== '..' && !rel.startsWith(`..${process.platform === 'win32' ? '\\\\' : '/'}`))\n}\n"]}
|
package/dist/src/doctor.js
CHANGED
|
@@ -2,7 +2,7 @@ import { accessSync, constants, existsSync, readFileSync } from 'node:fs';
|
|
|
2
2
|
import { delimiter, dirname, join, resolve } from 'node:path';
|
|
3
3
|
import { homedir } from 'node:os';
|
|
4
4
|
import { spawnSync } from 'node:child_process';
|
|
5
|
-
import {
|
|
5
|
+
import { GLOBAL_SKILL_NAME, skillSuiteStatus, } from './skill-manager.js';
|
|
6
6
|
export function doctor(packageRoot, options = {}) {
|
|
7
7
|
const home = options.home || homedir();
|
|
8
8
|
const env = options.env || process.env;
|
|
@@ -84,28 +84,43 @@ export function doctor(packageRoot, options = {}) {
|
|
|
84
84
|
detail: authRun.error || 'authenticated=false', fix: '运行 `dws auth login`',
|
|
85
85
|
});
|
|
86
86
|
}
|
|
87
|
-
const
|
|
88
|
-
|
|
87
|
+
const suite = skillSuiteStatus(packageRoot, { home });
|
|
88
|
+
const skill = suite.skills.find((item) => item.name === GLOBAL_SKILL_NAME) || suite.skills[0];
|
|
89
|
+
const allCurrent = suite.skills.every((item) => item.canonical.current);
|
|
90
|
+
const anyMissing = suite.skills.some((item) => !item.canonical.exists);
|
|
91
|
+
const installedSummary = suite.skills
|
|
92
|
+
.map((item) => `${item.name} ${item.bundled.skillVersion}`).join(' + ');
|
|
93
|
+
const staleSummary = suite.skills
|
|
94
|
+
.filter((item) => !item.canonical.current)
|
|
95
|
+
.map((item) => `${item.name}=${item.canonical.exists ? '需升级或有本地修改' : '未安装'}`).join('; ');
|
|
96
|
+
checks.push(allCurrent
|
|
89
97
|
? {
|
|
90
98
|
id: 'skill', level: 'pass',
|
|
91
|
-
summary:
|
|
92
|
-
detail:
|
|
99
|
+
summary: `内置 Skill 已安装: ${installedSummary}`,
|
|
100
|
+
detail: suite.skills.map((item) => item.canonical.path).join(' · '),
|
|
93
101
|
}
|
|
94
102
|
: {
|
|
95
|
-
id: 'skill', level:
|
|
96
|
-
summary:
|
|
97
|
-
detail:
|
|
98
|
-
fix:
|
|
99
|
-
? '运行 `dingtalk-agent skill
|
|
100
|
-
: '运行 `dingtalk-agent skill
|
|
103
|
+
id: 'skill', level: anyMissing ? 'fail' : 'warn',
|
|
104
|
+
summary: `内置 Skill 不完整: ${staleSummary}`,
|
|
105
|
+
detail: suite.skills.map((item) => item.canonical.path).join(' · '),
|
|
106
|
+
fix: anyMissing
|
|
107
|
+
? '运行 `dingtalk-agent skill install`'
|
|
108
|
+
: '运行 `dingtalk-agent skill status`,确认后执行 `dingtalk-agent skill upgrade`',
|
|
101
109
|
});
|
|
102
110
|
for (const client of skill.clients) {
|
|
111
|
+
const states = suite.skills.map((item) => ({
|
|
112
|
+
name: item.name,
|
|
113
|
+
state: item.clients.find((entry) => entry.name === client.name)?.state || 'missing',
|
|
114
|
+
}));
|
|
115
|
+
const level = states.some((item) => item.state === 'conflict')
|
|
116
|
+
? 'fail'
|
|
117
|
+
: states.some((item) => item.state === 'missing') ? 'warn' : 'pass';
|
|
103
118
|
checks.push({
|
|
104
119
|
id: client.name,
|
|
105
|
-
level
|
|
106
|
-
summary: `${client.label}: ${
|
|
107
|
-
detail: `${client.discovery} · ${
|
|
108
|
-
fix:
|
|
120
|
+
level,
|
|
121
|
+
summary: `${client.label}: ${level === 'pass' ? '可发现内置 Skill' : level === 'fail' ? 'Skill 路径冲突' : '尚不可发现全部内置 Skill'}`,
|
|
122
|
+
detail: `${client.discovery} · ${states.map((item) => `${item.name}=${item.state}`).join('; ')}`,
|
|
123
|
+
fix: level === 'pass' ? undefined : '运行 `dingtalk-agent skill install`',
|
|
109
124
|
});
|
|
110
125
|
}
|
|
111
126
|
const nextSteps = checks
|
|
@@ -118,6 +133,7 @@ export function doctor(packageRoot, options = {}) {
|
|
|
118
133
|
checks,
|
|
119
134
|
nextSteps,
|
|
120
135
|
skill,
|
|
136
|
+
skills: suite.skills,
|
|
121
137
|
};
|
|
122
138
|
}
|
|
123
139
|
export function findExecutable(command, env = process.env) {
|
package/dist/src/doctor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/doctor.ts"],"names":[],"mappings":"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","sourcesContent":["import { accessSync, constants, existsSync, readFileSync } from 'node:fs'\nimport { delimiter, dirname, join, resolve } from 'node:path'\nimport { homedir } from 'node:os'\nimport { spawnSync } from 'node:child_process'\n\nimport { skillStatus, type GlobalSkillStatus } from './skill-manager.js'\n\nexport type CheckLevel = 'pass' | 'warn' | 'fail'\n\nexport interface DoctorCheck {\n id: 'node' | 'cli' | 'dws' | 'dws-auth' | 'skill' | 'claude-code' | 'codex' | 'opencode'\n level: CheckLevel\n summary: string\n detail?: string\n fix?: string\n}\n\nexport interface DoctorReport {\n $schema: 'dingtalk-agent/doctor@1'\n ready: boolean\n checks: DoctorCheck[]\n nextSteps: string[]\n skill: GlobalSkillStatus\n}\n\nexport interface DoctorOptions {\n home?: string\n env?: NodeJS.ProcessEnv\n}\n\nexport function doctor(packageRoot: string, options: DoctorOptions = {}): DoctorReport {\n const home = options.home || homedir()\n const env = options.env || process.env\n const checks: DoctorCheck[] = []\n const pkg = JSON.parse(readFileSync(join(packageRoot, 'package.json'), 'utf8'))\n const version = String(pkg.version || '')\n\n const nodeVersion = process.versions.node\n checks.push(versionAtLeast(nodeVersion, '18.3.0')\n ? { id: 'node', level: 'pass', summary: `Node.js ${nodeVersion}` }\n : {\n id: 'node', level: 'fail', summary: `Node.js ${nodeVersion} 过旧`,\n fix: '升级到 Node.js 18.3 或更高版本',\n })\n\n const cli = findExecutable('dingtalk-agent', env)\n const alias = findExecutable('dta', env)\n if (cli && alias) {\n const installed = runText(cli, ['--version'], env)\n const aliasRun = runText(alias, ['--version'], env)\n const installedVersion = installed.ok ? firstLine(installed.stdout) : ''\n const aliasVersion = aliasRun.ok ? firstLine(aliasRun.stdout) : ''\n checks.push(installedVersion === version && aliasVersion === version\n ? {\n id: 'cli', level: 'pass', summary: `CLI ${installedVersion} 已在 PATH 中(dta 可用)`,\n detail: `${cli} · ${alias}`,\n }\n : {\n id: 'cli', level: 'warn', summary: 'PATH 中的 CLI 版本与当前包不一致',\n detail: `${cli} (${installedVersion || '无法识别版本'}) · ${alias} (${aliasVersion || '无法识别版本'})`,\n fix: `运行 npx --yes --registry=https://registry.npmjs.org @xdxer/dingtalk-agent@${version} setup`,\n })\n } else if (cli || alias) {\n checks.push({\n id: 'cli', level: 'fail', summary: 'CLI 入口不完整:dingtalk-agent 与 dta 应同时存在',\n detail: `dingtalk-agent=${cli || 'missing'} · dta=${alias || 'missing'}`,\n fix: `运行 npx --yes --registry=https://registry.npmjs.org @xdxer/dingtalk-agent@${version} setup`,\n })\n } else {\n checks.push({\n id: 'cli', level: 'fail', summary: 'PATH 找不到 dingtalk-agent',\n detail: `当前 PATH=${env.PATH || ''}`,\n fix: `运行 npx --yes --registry=https://registry.npmjs.org @xdxer/dingtalk-agent@${version} setup`,\n })\n }\n\n const dws = findExecutable('dws', env)\n if (!dws) {\n checks.push({\n id: 'dws', level: 'fail', summary: 'PATH 找不到 dws',\n fix: '安装 DWS,并确认 `dws version --format json` 可以执行',\n })\n checks.push({\n id: 'dws-auth', level: 'fail', summary: '无法检查 DWS 认证',\n fix: 'DWS 可用后运行 `dws auth login`',\n })\n } else {\n const versionRun = runJson(dws, ['version', '--format', 'json'], env)\n const dwsVersion = versionRun.json?.version || firstLine(versionRun.stdout)\n const supported = versionRun.ok && versionAtLeast(String(dwsVersion || '').replace(/^v/, ''), '1.0.15')\n checks.push(supported\n ? { id: 'dws', level: 'pass', summary: `DWS ${dwsVersion || '可执行'}`, detail: dws }\n : {\n id: 'dws', level: 'fail',\n summary: versionRun.ok ? `DWS ${dwsVersion || ''} 低于最低版本 1.0.15` : 'DWS 存在但无法运行',\n detail: versionRun.ok ? dws : versionRun.error,\n fix: versionRun.ok ? '运行 `dws upgrade`' : '运行 `dws doctor` 检查安装',\n })\n\n const authRun = runJson(dws, ['auth', 'status', '--format', 'json'], env)\n const authenticated = authRun.ok && authRun.json?.authenticated === true &&\n authRun.json?.token_valid !== false\n checks.push(authenticated\n ? {\n id: 'dws-auth', level: 'pass', summary: 'DWS 已认证',\n detail: [authRun.json?.corp_name, authRun.json?.user_name].filter(Boolean).join(' · '),\n }\n : {\n id: 'dws-auth', level: 'fail', summary: 'DWS 尚未认证或凭据已失效',\n detail: authRun.error || 'authenticated=false', fix: '运行 `dws auth login`',\n })\n }\n\n const skill = skillStatus(packageRoot, { home })\n checks.push(skill.canonical.current\n ? {\n id: 'skill', level: 'pass',\n summary: `Basic Behavior Skill ${skill.bundled.skillVersion} 已安装`,\n detail: skill.canonical.path,\n }\n : {\n id: 'skill', level: skill.canonical.exists ? 'warn' : 'fail',\n summary: skill.canonical.exists ? 'Basic Behavior Skill 需要升级或存在本地修改' : 'Basic Behavior Skill 未安装',\n detail: skill.canonical.path,\n fix: skill.canonical.exists\n ? '运行 `dingtalk-agent skill status`,确认后执行 `dingtalk-agent skill upgrade`'\n : '运行 `dingtalk-agent skill install`',\n })\n\n for (const client of skill.clients) {\n checks.push({\n id: client.name,\n level: client.state === 'ok' ? 'pass' : client.state === 'conflict' ? 'fail' : 'warn',\n summary: `${client.label}: ${client.state === 'ok' ? '可发现 Skill' : client.state === 'conflict' ? 'Skill 路径冲突' : '尚不可发现 Skill'}`,\n detail: `${client.discovery} · ${client.path}`,\n fix: client.state === 'ok' ? undefined : '运行 `dingtalk-agent skill install`',\n })\n }\n\n const nextSteps = checks\n .filter((check) => check.level !== 'pass' && check.fix)\n .map((check) => check.fix as string)\n .filter((step, index, all) => all.indexOf(step) === index)\n return {\n $schema: 'dingtalk-agent/doctor@1',\n ready: !checks.some((check) => check.level === 'fail'),\n checks,\n nextSteps,\n skill,\n }\n}\n\nexport function findExecutable(command: string, env: NodeJS.ProcessEnv = process.env): string {\n const path = env.PATH || ''\n const extensions = process.platform === 'win32'\n ? (env.PATHEXT || '.EXE;.CMD;.BAT').split(';')\n : ['']\n for (const directory of path.split(delimiter).filter(Boolean)) {\n for (const extension of extensions) {\n const candidate = resolve(directory, command + extension.toLowerCase())\n try {\n accessSync(candidate, process.platform === 'win32' ? constants.F_OK : constants.X_OK)\n return candidate\n } catch { /* continue */ }\n }\n }\n return ''\n}\n\nfunction runJson(command: string, args: string[], env: NodeJS.ProcessEnv) {\n const run = spawnSync(command, args, { encoding: 'utf8', env, timeout: 8_000 })\n const stdout = String(run.stdout || '').trim()\n const stderr = String(run.stderr || '').trim()\n let json: any = null\n try { json = stdout ? JSON.parse(stdout) : null } catch { /* human output is allowed */ }\n return {\n ok: run.status === 0 && !run.error,\n json,\n stdout,\n error: run.error?.message || stderr || (run.signal ? `被 ${run.signal} 终止` : `退出码 ${run.status}`),\n }\n}\n\nfunction runText(command: string, args: string[], env: NodeJS.ProcessEnv) {\n const run = spawnSync(command, args, { encoding: 'utf8', env, timeout: 8_000 })\n return {\n ok: run.status === 0 && !run.error,\n stdout: String(run.stdout || '').trim(),\n }\n}\n\nfunction firstLine(text: string): string {\n return text.split(/\\r?\\n/, 1)[0]?.trim() || ''\n}\n\nfunction versionAtLeast(actual: string, minimum: string): boolean {\n const a = actual.split('.').map((part) => Number.parseInt(part, 10) || 0)\n const b = minimum.split('.').map((part) => Number.parseInt(part, 10) || 0)\n for (let i = 0; i < Math.max(a.length, b.length); i += 1) {\n if ((a[i] || 0) > (b[i] || 0)) return true\n if ((a[i] || 0) < (b[i] || 0)) return false\n }\n return true\n}\n"]}
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACzE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAE9C,OAAO,EACL,iBAAiB,EAAE,gBAAgB,GACpC,MAAM,oBAAoB,CAAA;AA0B3B,MAAM,UAAU,MAAM,CAAC,WAAmB,EAAE,UAAyB,EAAE;IACrE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,EAAE,CAAA;IACtC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAA;IACtC,MAAM,MAAM,GAAkB,EAAE,CAAA;IAChC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;IAC/E,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA;IAEzC,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAA;IACzC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,QAAQ,CAAC;QAC/C,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,WAAW,EAAE,EAAE;QAClE,CAAC,CAAC;YACE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,WAAW,KAAK;YAC/D,GAAG,EAAE,wBAAwB;SAC9B,CAAC,CAAA;IAEN,MAAM,GAAG,GAAG,cAAc,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAA;IACjD,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IACxC,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;QACjB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,CAAA;QAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,CAAA;QACnD,MAAM,gBAAgB,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACxE,MAAM,YAAY,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAClE,MAAM,CAAC,IAAI,CAAC,gBAAgB,KAAK,OAAO,IAAI,YAAY,KAAK,OAAO;YAClE,CAAC,CAAC;gBACE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,gBAAgB,oBAAoB;gBAC9E,MAAM,EAAE,GAAG,GAAG,MAAM,KAAK,EAAE;aAC5B;YACH,CAAC,CAAC;gBACE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB;gBAC1D,MAAM,EAAE,GAAG,GAAG,KAAK,gBAAgB,IAAI,QAAQ,OAAO,KAAK,KAAK,YAAY,IAAI,QAAQ,GAAG;gBAC3F,GAAG,EAAE,4EAA4E,OAAO,QAAQ;aACjG,CAAC,CAAA;IACR,CAAC;SAAM,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC;YACV,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,sCAAsC;YACzE,MAAM,EAAE,kBAAkB,GAAG,IAAI,SAAS,UAAU,KAAK,IAAI,SAAS,EAAE;YACxE,GAAG,EAAE,4EAA4E,OAAO,QAAQ;SACjG,CAAC,CAAA;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC;YACR,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,yBAAyB;YAC5D,MAAM,EAAE,WAAW,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE;YACnC,GAAG,EAAE,4EAA4E,OAAO,QAAQ;SACjG,CAAC,CAAA;IACN,CAAC;IAED,MAAM,GAAG,GAAG,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IACtC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,CAAC,IAAI,CAAC;YACV,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc;YACjD,GAAG,EAAE,6CAA6C;SACnD,CAAC,CAAA;QACF,MAAM,CAAC,IAAI,CAAC;YACV,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;YACrD,GAAG,EAAE,4BAA4B;SAClC,CAAC,CAAA;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,CAAA;QACrE,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;QAC3E,MAAM,SAAS,GAAG,UAAU,CAAC,EAAE,IAAI,cAAc,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAA;QACvG,MAAM,CAAC,IAAI,CAAC,SAAS;YACnB,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,UAAU,IAAI,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;YAClF,CAAC,CAAC;gBACE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;gBACxB,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,UAAU,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,aAAa;gBAChF,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK;gBAC9C,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,sBAAsB;aACjE,CAAC,CAAA;QAEN,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,CAAA;QACzE,MAAM,aAAa,GAAG,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI;YACtE,OAAO,CAAC,IAAI,EAAE,WAAW,KAAK,KAAK,CAAA;QACrC,MAAM,CAAC,IAAI,CAAC,aAAa;YACvB,CAAC,CAAC;gBACE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS;gBACjD,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;aACvF;YACH,CAAC,CAAC;gBACE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB;gBACxD,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,qBAAqB,EAAE,GAAG,EAAE,qBAAqB;aAC3E,CAAC,CAAA;IACR,CAAC;IAED,MAAM,KAAK,GAAG,gBAAgB,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;IACrD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAC7F,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;IACvE,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IACtE,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM;SAClC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACzE,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM;SAC9B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SACzC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1F,MAAM,CAAC,IAAI,CAAC,UAAU;QACpB,CAAC,CAAC;YACE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM;YAC1B,OAAO,EAAE,iBAAiB,gBAAgB,EAAE;YAC5C,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;SACpE;QACH,CAAC,CAAC;YACE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;YAChD,OAAO,EAAE,iBAAiB,YAAY,EAAE;YACxC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;YACnE,GAAG,EAAE,UAAU;gBACb,CAAC,CAAC,mCAAmC;gBACrC,CAAC,CAAC,uEAAuE;SAC5E,CAAC,CAAA;IAEN,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACzC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,SAAS;SACpF,CAAC,CAAC,CAAA;QACH,MAAM,KAAK,GAAe,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,UAAU,CAAC;YACxE,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAA;QACrE,MAAM,CAAC,IAAI,CAAC;YACV,EAAE,EAAE,MAAM,CAAC,IAAI;YACf,KAAK;YACL,OAAO,EAAE,GAAG,MAAM,CAAC,KAAK,KAAK,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,iBAAiB,EAAE;YACrH,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAChG,GAAG,EAAE,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,mCAAmC;SACxE,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,MAAM;SACrB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC;SACtD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAa,CAAC;SACnC,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAA;IAC5D,OAAO;QACL,OAAO,EAAE,yBAAyB;QAClC,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC;QACtD,MAAM;QACN,SAAS;QACT,KAAK;QACL,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,MAAyB,OAAO,CAAC,GAAG;IAClF,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAA;IAC3B,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO;QAC7C,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,gBAAgB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QAC9C,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IACR,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9D,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,CAAA;YACvE,IAAI,CAAC;gBACH,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;gBACrF,OAAO,SAAS,CAAA;YAClB,CAAC;YAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED,SAAS,OAAO,CAAC,OAAe,EAAE,IAAc,EAAE,GAAsB;IACtE,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;IAC/E,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IAC9C,IAAI,IAAI,GAAQ,IAAI,CAAA;IACpB,IAAI,CAAC;QAAC,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,6BAA6B,CAAC,CAAC;IACzF,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK;QAClC,IAAI;QACJ,MAAM;QACN,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,MAAM,EAAE,CAAC;KACjG,CAAA;AACH,CAAC;AAED,SAAS,OAAO,CAAC,OAAe,EAAE,IAAc,EAAE,GAAsB;IACtE,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;IAC/E,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK;QAClC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;KACxC,CAAA;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;AAChD,CAAC;AAED,SAAS,cAAc,CAAC,MAAc,EAAE,OAAe;IACrD,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IACzE,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAC1E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzD,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAA;QAC1C,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAAE,OAAO,KAAK,CAAA;IAC7C,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC","sourcesContent":["import { accessSync, constants, existsSync, readFileSync } from 'node:fs'\nimport { delimiter, dirname, join, resolve } from 'node:path'\nimport { homedir } from 'node:os'\nimport { spawnSync } from 'node:child_process'\n\nimport {\n GLOBAL_SKILL_NAME, skillSuiteStatus, type GlobalSkillStatus,\n} from './skill-manager.js'\n\nexport type CheckLevel = 'pass' | 'warn' | 'fail'\n\nexport interface DoctorCheck {\n id: 'node' | 'cli' | 'dws' | 'dws-auth' | 'skill' | 'claude-code' | 'codex' | 'opencode'\n level: CheckLevel\n summary: string\n detail?: string\n fix?: string\n}\n\nexport interface DoctorReport {\n $schema: 'dingtalk-agent/doctor@1'\n ready: boolean\n checks: DoctorCheck[]\n nextSteps: string[]\n skill: GlobalSkillStatus\n skills: GlobalSkillStatus[]\n}\n\nexport interface DoctorOptions {\n home?: string\n env?: NodeJS.ProcessEnv\n}\n\nexport function doctor(packageRoot: string, options: DoctorOptions = {}): DoctorReport {\n const home = options.home || homedir()\n const env = options.env || process.env\n const checks: DoctorCheck[] = []\n const pkg = JSON.parse(readFileSync(join(packageRoot, 'package.json'), 'utf8'))\n const version = String(pkg.version || '')\n\n const nodeVersion = process.versions.node\n checks.push(versionAtLeast(nodeVersion, '18.3.0')\n ? { id: 'node', level: 'pass', summary: `Node.js ${nodeVersion}` }\n : {\n id: 'node', level: 'fail', summary: `Node.js ${nodeVersion} 过旧`,\n fix: '升级到 Node.js 18.3 或更高版本',\n })\n\n const cli = findExecutable('dingtalk-agent', env)\n const alias = findExecutable('dta', env)\n if (cli && alias) {\n const installed = runText(cli, ['--version'], env)\n const aliasRun = runText(alias, ['--version'], env)\n const installedVersion = installed.ok ? firstLine(installed.stdout) : ''\n const aliasVersion = aliasRun.ok ? firstLine(aliasRun.stdout) : ''\n checks.push(installedVersion === version && aliasVersion === version\n ? {\n id: 'cli', level: 'pass', summary: `CLI ${installedVersion} 已在 PATH 中(dta 可用)`,\n detail: `${cli} · ${alias}`,\n }\n : {\n id: 'cli', level: 'warn', summary: 'PATH 中的 CLI 版本与当前包不一致',\n detail: `${cli} (${installedVersion || '无法识别版本'}) · ${alias} (${aliasVersion || '无法识别版本'})`,\n fix: `运行 npx --yes --registry=https://registry.npmjs.org @xdxer/dingtalk-agent@${version} setup`,\n })\n } else if (cli || alias) {\n checks.push({\n id: 'cli', level: 'fail', summary: 'CLI 入口不完整:dingtalk-agent 与 dta 应同时存在',\n detail: `dingtalk-agent=${cli || 'missing'} · dta=${alias || 'missing'}`,\n fix: `运行 npx --yes --registry=https://registry.npmjs.org @xdxer/dingtalk-agent@${version} setup`,\n })\n } else {\n checks.push({\n id: 'cli', level: 'fail', summary: 'PATH 找不到 dingtalk-agent',\n detail: `当前 PATH=${env.PATH || ''}`,\n fix: `运行 npx --yes --registry=https://registry.npmjs.org @xdxer/dingtalk-agent@${version} setup`,\n })\n }\n\n const dws = findExecutable('dws', env)\n if (!dws) {\n checks.push({\n id: 'dws', level: 'fail', summary: 'PATH 找不到 dws',\n fix: '安装 DWS,并确认 `dws version --format json` 可以执行',\n })\n checks.push({\n id: 'dws-auth', level: 'fail', summary: '无法检查 DWS 认证',\n fix: 'DWS 可用后运行 `dws auth login`',\n })\n } else {\n const versionRun = runJson(dws, ['version', '--format', 'json'], env)\n const dwsVersion = versionRun.json?.version || firstLine(versionRun.stdout)\n const supported = versionRun.ok && versionAtLeast(String(dwsVersion || '').replace(/^v/, ''), '1.0.15')\n checks.push(supported\n ? { id: 'dws', level: 'pass', summary: `DWS ${dwsVersion || '可执行'}`, detail: dws }\n : {\n id: 'dws', level: 'fail',\n summary: versionRun.ok ? `DWS ${dwsVersion || ''} 低于最低版本 1.0.15` : 'DWS 存在但无法运行',\n detail: versionRun.ok ? dws : versionRun.error,\n fix: versionRun.ok ? '运行 `dws upgrade`' : '运行 `dws doctor` 检查安装',\n })\n\n const authRun = runJson(dws, ['auth', 'status', '--format', 'json'], env)\n const authenticated = authRun.ok && authRun.json?.authenticated === true &&\n authRun.json?.token_valid !== false\n checks.push(authenticated\n ? {\n id: 'dws-auth', level: 'pass', summary: 'DWS 已认证',\n detail: [authRun.json?.corp_name, authRun.json?.user_name].filter(Boolean).join(' · '),\n }\n : {\n id: 'dws-auth', level: 'fail', summary: 'DWS 尚未认证或凭据已失效',\n detail: authRun.error || 'authenticated=false', fix: '运行 `dws auth login`',\n })\n }\n\n const suite = skillSuiteStatus(packageRoot, { home })\n const skill = suite.skills.find((item) => item.name === GLOBAL_SKILL_NAME) || suite.skills[0]\n const allCurrent = suite.skills.every((item) => item.canonical.current)\n const anyMissing = suite.skills.some((item) => !item.canonical.exists)\n const installedSummary = suite.skills\n .map((item) => `${item.name} ${item.bundled.skillVersion}`).join(' + ')\n const staleSummary = suite.skills\n .filter((item) => !item.canonical.current)\n .map((item) => `${item.name}=${item.canonical.exists ? '需升级或有本地修改' : '未安装'}`).join('; ')\n checks.push(allCurrent\n ? {\n id: 'skill', level: 'pass',\n summary: `内置 Skill 已安装: ${installedSummary}`,\n detail: suite.skills.map((item) => item.canonical.path).join(' · '),\n }\n : {\n id: 'skill', level: anyMissing ? 'fail' : 'warn',\n summary: `内置 Skill 不完整: ${staleSummary}`,\n detail: suite.skills.map((item) => item.canonical.path).join(' · '),\n fix: anyMissing\n ? '运行 `dingtalk-agent skill install`'\n : '运行 `dingtalk-agent skill status`,确认后执行 `dingtalk-agent skill upgrade`',\n })\n\n for (const client of skill.clients) {\n const states = suite.skills.map((item) => ({\n name: item.name,\n state: item.clients.find((entry) => entry.name === client.name)?.state || 'missing',\n }))\n const level: CheckLevel = states.some((item) => item.state === 'conflict')\n ? 'fail'\n : states.some((item) => item.state === 'missing') ? 'warn' : 'pass'\n checks.push({\n id: client.name,\n level,\n summary: `${client.label}: ${level === 'pass' ? '可发现内置 Skill' : level === 'fail' ? 'Skill 路径冲突' : '尚不可发现全部内置 Skill'}`,\n detail: `${client.discovery} · ${states.map((item) => `${item.name}=${item.state}`).join('; ')}`,\n fix: level === 'pass' ? undefined : '运行 `dingtalk-agent skill install`',\n })\n }\n\n const nextSteps = checks\n .filter((check) => check.level !== 'pass' && check.fix)\n .map((check) => check.fix as string)\n .filter((step, index, all) => all.indexOf(step) === index)\n return {\n $schema: 'dingtalk-agent/doctor@1',\n ready: !checks.some((check) => check.level === 'fail'),\n checks,\n nextSteps,\n skill,\n skills: suite.skills,\n }\n}\n\nexport function findExecutable(command: string, env: NodeJS.ProcessEnv = process.env): string {\n const path = env.PATH || ''\n const extensions = process.platform === 'win32'\n ? (env.PATHEXT || '.EXE;.CMD;.BAT').split(';')\n : ['']\n for (const directory of path.split(delimiter).filter(Boolean)) {\n for (const extension of extensions) {\n const candidate = resolve(directory, command + extension.toLowerCase())\n try {\n accessSync(candidate, process.platform === 'win32' ? constants.F_OK : constants.X_OK)\n return candidate\n } catch { /* continue */ }\n }\n }\n return ''\n}\n\nfunction runJson(command: string, args: string[], env: NodeJS.ProcessEnv) {\n const run = spawnSync(command, args, { encoding: 'utf8', env, timeout: 8_000 })\n const stdout = String(run.stdout || '').trim()\n const stderr = String(run.stderr || '').trim()\n let json: any = null\n try { json = stdout ? JSON.parse(stdout) : null } catch { /* human output is allowed */ }\n return {\n ok: run.status === 0 && !run.error,\n json,\n stdout,\n error: run.error?.message || stderr || (run.signal ? `被 ${run.signal} 终止` : `退出码 ${run.status}`),\n }\n}\n\nfunction runText(command: string, args: string[], env: NodeJS.ProcessEnv) {\n const run = spawnSync(command, args, { encoding: 'utf8', env, timeout: 8_000 })\n return {\n ok: run.status === 0 && !run.error,\n stdout: String(run.stdout || '').trim(),\n }\n}\n\nfunction firstLine(text: string): string {\n return text.split(/\\r?\\n/, 1)[0]?.trim() || ''\n}\n\nfunction versionAtLeast(actual: string, minimum: string): boolean {\n const a = actual.split('.').map((part) => Number.parseInt(part, 10) || 0)\n const b = minimum.split('.').map((part) => Number.parseInt(part, 10) || 0)\n for (let i = 0; i < Math.max(a.length, b.length); i += 1) {\n if ((a[i] || 0) > (b[i] || 0)) return true\n if ((a[i] || 0) < (b[i] || 0)) return false\n }\n return true\n}\n"]}
|