@xdxer/dingtalk-agent 0.1.5-beta.5 → 0.1.5-beta.6
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 +23 -0
- package/dist/bin/dingtalk-agent.js +338 -122
- package/dist/bin/dingtalk-agent.js.map +1 -1
- package/dist/src/actions.js +3 -2
- package/dist/src/actions.js.map +1 -1
- package/dist/src/dws.js +2 -1
- package/dist/src/dws.js.map +1 -1
- package/dist/src/init.js +2 -1
- package/dist/src/init.js.map +1 -1
- package/dist/src/map.js +157 -0
- package/dist/src/map.js.map +1 -0
- package/dist/src/tui.js +369 -0
- package/dist/src/tui.js.map +1 -0
- package/dist/src/upgrade.js +113 -33
- package/dist/src/upgrade.js.map +1 -1
- package/dist/src/waits.js +2 -1
- package/dist/src/waits.js.map +1 -1
- package/package.json +2 -2
package/dist/src/actions.js
CHANGED
|
@@ -12,6 +12,7 @@ import { verifyPreparedDefinition } from './agent-definition.js';
|
|
|
12
12
|
import { verifyEnrichedInvocation } from './perception.js';
|
|
13
13
|
import { verifyResponseGate } from './response-gate.js';
|
|
14
14
|
import { acquireSessionEffectLock, armWait, completeWaitFromReceipt, markWaitTransportAccepted, reconcileWaitFromReceipt, } from './waits.js';
|
|
15
|
+
import { err } from './tui.js';
|
|
15
16
|
const OUTWARD = new Set(['ack', 'reply', 'ask']);
|
|
16
17
|
const TERMINAL = new Set(['reply', 'ask', 'silence']);
|
|
17
18
|
const KINDS = new Set(['ack', 'reply', 'ask', 'silence']);
|
|
@@ -602,7 +603,7 @@ function persistArtifact(context, actionPath, name, value) {
|
|
|
602
603
|
writeJsonAtomic(join(mirrorDir, name), value);
|
|
603
604
|
}
|
|
604
605
|
catch (e) {
|
|
605
|
-
console.error(` ⚠️ sandbox 投影写入失败(control store 已保留真值): ${e.message}`);
|
|
606
|
+
console.error(err().theme.warn(` ⚠️ sandbox 投影写入失败(control store 已保留真值): ${e.message}`));
|
|
606
607
|
}
|
|
607
608
|
}
|
|
608
609
|
function persistReceipt(context, actionPath, receipt) {
|
|
@@ -614,7 +615,7 @@ function mirrorJson(path, value) {
|
|
|
614
615
|
writeJsonAtomic(path, value);
|
|
615
616
|
}
|
|
616
617
|
catch (e) {
|
|
617
|
-
console.error(` ⚠️ sandbox 投影写入失败(control store 已保留真值): ${e.message}`);
|
|
618
|
+
console.error(err().theme.warn(` ⚠️ sandbox 投影写入失败(control store 已保留真值): ${e.message}`));
|
|
618
619
|
}
|
|
619
620
|
}
|
|
620
621
|
function transportName(kind) {
|
package/dist/src/actions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/actions.ts"],"names":[],"mappings":"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","sourcesContent":["// Basic Behavior 的四个原子动作(TypeScript source)。\n// Sandbox 中的 context/ 是可读投影;真正的 target/profile/policy/state 来自 sandbox 外 event index。\n\nimport { existsSync, mkdirSync, realpathSync, readdirSync } from 'node:fs'\nimport { dirname, join, resolve, parse, basename } from 'node:path'\nimport { randomUUID } from 'node:crypto'\nimport { digest, stableStringify } from './events.js'\nimport {\n acquireControlLock, acquireExecutionLock, readJson, writeJsonAtomic,\n} from './sessions.js'\nimport * as cfgmod from './config.js'\nimport * as dws from './dws.js'\nimport { verifySkillSnapshot } from './skills.js'\nimport { verifyPreparedDefinition } from './agent-definition.js'\nimport { verifyEnrichedInvocation } from './perception.js'\nimport { verifyResponseGate } from './response-gate.js'\nimport {\n acquireSessionEffectLock, armWait, completeWaitFromReceipt,\n markWaitTransportAccepted, reconcileWaitFromReceipt,\n} from './waits.js'\n\nconst OUTWARD = new Set(['ack', 'reply', 'ask'])\nconst TERMINAL = new Set(['reply', 'ask', 'silence'])\nconst KINDS = new Set(['ack', 'reply', 'ask', 'silence'])\nconst SILENCE_REASONS = new Set([\n 'unmentioned', 'already_answered', 'no_value', 'policy_denied', 'unsupported',\n 'heartbeat_noop',\n])\n\nclass ActionUncertainError extends Error {\n receipt: Record<string, any>\n\n constructor(message: string, receipt: Record<string, any>) {\n super(message)\n this.name = 'ActionUncertainError'\n this.receipt = receipt\n }\n}\n\nexport function findRun(start = process.cwd(), explicit = '') {\n const picked = explicit || process.env.DTA_RUN || start\n let dir = resolve(picked)\n while (true) {\n if (existsSync(join(dir, 'run.json'))) return dir\n const parent = dirname(dir)\n if (parent === dir || dir === parse(dir).root) break\n dir = parent\n }\n throw new Error('找不到当前 Run;请在 prepare 返回的 cwd 中执行,或设置 DTA_RUN/--run')\n}\n\nexport function previewAction(runPath, kind, options = {}) {\n const context = loadContext(runPath)\n const payload = normalizePayload(kind, options, context.policy)\n const nextState = validate(context, kind)\n return {\n type: 'dingtalk-agent.action.preview',\n runId: context.run.id,\n kind,\n fromState: context.run.state,\n toState: nextState,\n transport: transportName(kind),\n target: kind === 'silence' ? null : context.target,\n profile: context.field.dws.profile || '',\n expectedUserId: context.field.dws.expectedUserId || '',\n transportMode: context.field.transport.mode || '',\n egressOwner: context.field.transport.egressOwner || '',\n payload,\n authorityHash: context.index.authorityHash,\n persisted: false,\n sideEffect: false,\n }\n}\n\nexport function executeAction(runPath, kind, options = {}) {\n if (!KINDS.has(kind)) throw new Error(`原子动作只能是: ${[...KINDS].join(' / ')}`)\n let context = loadContext(runPath)\n const payload = normalizePayload(kind, options, context.policy)\n const actionId = `act_${digest(`${context.run.id}\\0${kind}\\0${JSON.stringify(payload)}`).slice(0, 20)}`\n let actionPath = join(context.controlActionRoot, actionId)\n let receiptPath = join(actionPath, 'receipt.json')\n\n // Session effect lock 把 cancel 与外部副作用线性化;先拿到锁的一方定义先后。\n // event execution lock 仍负责同一个 Run 的 Action 幂等,control lock 只做短时 RMW。\n const releaseSessionEffect = acquireSessionEffectLock(context.root, context.sessionPath)\n try {\n const release = acquireExecutionLock(context.indexPath)\n try {\n context = loadContext(runPath)\n reconcileReceipts(context)\n context = loadContext(runPath)\n actionPath = join(context.controlActionRoot, actionId)\n receiptPath = join(actionPath, 'receipt.json')\n if (existsSync(receiptPath)) {\n const receipt = readJson(receiptPath)\n reconcileReceiptWait(context, receipt)\n return replayReceipt(context, receipt)\n }\n assertNoOtherUnresolvedAttempt(context, actionId)\n const nextState = validate(context, kind)\n mkdirSync(actionPath, { recursive: true })\n const intentPath = join(actionPath, 'intent.json')\n const attemptPath = join(actionPath, 'attempt.json')\n let intent\n if (existsSync(intentPath)) {\n intent = readJson(intentPath)\n if (intent.kind !== kind || JSON.stringify(intent.payload) !== JSON.stringify(payload)) {\n throw new Error(`Action intent 碰撞: ${actionId}`)\n }\n } else {\n intent = {\n $schema: 'dingtalk-agent/action-intent@1',\n id: actionId,\n runId: context.run.id,\n kind,\n createdAt: new Date().toISOString(),\n transport: transportName(kind),\n target: kind === 'silence' ? null : context.target,\n dwsProfile: context.field.dws.profile || '',\n expectedUserId: context.field.dws.expectedUserId || '',\n transportMode: context.field.transport.mode || '',\n egressOwner: context.field.transport.egressOwner || '',\n uuid: OUTWARD.has(kind) ? randomUUID() : null,\n payload,\n authorityHash: context.index.authorityHash,\n }\n persistArtifact(context, actionPath, 'intent.json', intent)\n }\n\n if (kind === 'silence') {\n const receipt = finish(context, intent, nextState, {\n outcome: 'confirmed', verified: true, verification: 'local-no-side-effect',\n })\n persistReceipt(context, actionPath, receipt)\n completeWaitFromReceipt(\n context.root, cfgmod.must(context.root), context.run.resume, receipt)\n projectReceipt(context, receipt)\n return receipt\n }\n\n verifyExecutionIdentity(context, intent, actionPath)\n const wait = kind === 'ask' ? ensureAskWait(context, actionId, payload.text) : null\n\n if (kind === 'ack' && existsSync(attemptPath)) {\n const receipt = uncertain(context, intent,\n 'ack 已有 attempt 但没有 receipt;表情动作无服务端幂等键,拒绝盲重试')\n persistReceipt(context, actionPath, receipt)\n projectReceipt(context, receipt)\n return receipt\n }\n if (!existsSync(attemptPath)) {\n persistArtifact(context, actionPath, 'attempt.json', {\n actionId, startedAt: new Date().toISOString(),\n })\n }\n\n let result\n let checked\n try {\n const transportResultPath = join(actionPath, 'transport-result.json')\n if (existsSync(transportResultPath)) {\n // DWS 已返回且结果已落盘时,从本地继续验证;绝不为了补 Receipt 再发一次。\n result = readJson(transportResultPath)\n } else {\n result = kind === 'ack'\n ? dws.ackMessage(context.target, {\n emoji: payload.emoji, profile: intent.dwsProfile,\n })\n : dws.replyMessage(context.target, payload.text, {\n uuid: intent.uuid, profile: intent.dwsProfile,\n })\n persistArtifact(context, actionPath, 'transport-result.json', result)\n }\n if (kind === 'ask') markWaitTransportAccepted(\n context.root, cfgmod.must(context.root), wait, result)\n checked = verify(kind, context.target, result, intent.dwsProfile, payload.text || '')\n if (checked.data !== undefined) {\n persistArtifact(context, actionPath, 'verification.json', checked.data)\n }\n } catch (e) {\n const receipt = uncertain(context, intent, String(e.message || e))\n persistReceipt(context, actionPath, receipt)\n if (kind === 'ask') reconcileWaitFromReceipt(\n context.root, cfgmod.must(context.root), wait, receipt)\n projectReceipt(context, receipt)\n throw new ActionUncertainError(\n `动作结果不确定,禁止自动重发;action=${actionId}: ${e.message || e}`,\n receipt,\n )\n }\n\n const receipt = finish(context, intent, nextState, checked)\n persistReceipt(context, actionPath, receipt) // 事实先落盘\n if (kind === 'ask') reconcileWaitFromReceipt(\n context.root, cfgmod.must(context.root), wait, receipt)\n if (kind === 'reply') completeWaitFromReceipt(\n context.root, cfgmod.must(context.root), context.run.resume, receipt)\n projectReceipt(context, receipt) // 再更新 control/run 投影\n return receipt\n } finally {\n release()\n }\n } finally {\n releaseSessionEffect()\n }\n}\n\n/**\n * 权威数据只从 event index 读取。Run 目录里的静态上下文发生漂移时 fail closed;\n * 动态 run.json 只是可修复投影,不能反过来阻塞已落盘的 Receipt。\n * 这也让 --run /任意伪造目录 无法获得 DWS 外发能力。\n */\nfunction loadContext(runPath) {\n const actualRunPath = realpathSync(resolve(runPath))\n const projection = readJson(join(actualRunPath, 'run.json'))\n const root = process.env.DTA_ROOT\n ? resolve(process.env.DTA_ROOT)\n : cfgmod.findRoot(actualRunPath)\n if (!root) throw new Error('找不到 control store;act 必须由能访问 DTA_ROOT 的宿主侧执行')\n const cfg = cfgmod.must(root)\n const indexRoot = resolve(root, cfg.runtime?.eventIndexRoot || '.dingtalk-agent/event-index')\n const indexPath = join(indexRoot, `${digest(projection.eventId)}.json`)\n if (!existsSync(indexPath)) throw new Error('当前 Run 不在 event index 中;拒绝任意/伪造 --run')\n const index = readJson(indexPath)\n if (!index.authority || !index.control ||\n digest(stableStringify(index.authority)) !== index.authorityHash) {\n throw new Error('event index 的权威快照损坏,禁止执行')\n }\n if (realpathSync(index.runPath) !== actualRunPath ||\n index.runId !== index.control.id || index.eventId !== projection.eventId) {\n throw new Error('Run 与 event index 身份不一致,拒绝执行')\n }\n\n if (stableStringify(projection) !== stableStringify(index.control)) {\n mirrorJson(join(actualRunPath, 'run.json'), index.control)\n }\n const drift: string[] = []\n const targetProjection = readJson(join(actualRunPath, 'context', 'reply-target.json'))\n if (stableStringify(targetProjection) !== stableStringify(index.authority.replyTarget)) drift.push('reply-target.json')\n const policyProjection = readJson(join(actualRunPath, 'policy', 'allowed-actions.json'))\n if (stableStringify(policyProjection) !== stableStringify(index.authority.policy)) drift.push('allowed-actions.json')\n const fieldProjection = readJson(join(actualRunPath, 'context', 'field.json'))\n if (stableStringify(fieldProjection.dws || {}) !== stableStringify(index.authority.dws || {})) drift.push('field.dws')\n if (stableStringify(fieldProjection.transport || {}) !== stableStringify(index.authority.transport || {})) drift.push('field.transport')\n const behaviorProjection = readJson(join(actualRunPath, 'context', 'behavior.json'))\n if (behaviorProjection.hash !== index.authority.behaviorHash) drift.push('behavior.json')\n const eventProjection = readJson(join(actualRunPath, 'event.json'))\n if (digest(stableStringify(eventProjection)) !== index.authority.eventHash) drift.push('event.json')\n if (index.authority.resume) {\n const resumeProjection = readJson(join(actualRunPath, 'context', 'resume.json'))\n if (stableStringify(resumeProjection) !== stableStringify(index.authority.resume)) {\n drift.push('resume.json')\n }\n }\n if (index.authority.invocation) {\n const invocationProjection = readJson(join(actualRunPath, 'context', 'invocation.json'))\n if (stableStringify(invocationProjection) !== stableStringify(index.authority.invocation)) {\n drift.push('invocation.json')\n }\n }\n try {\n const enriched = readJson(join(actualRunPath, 'context', 'enriched-invocation.json'))\n verifyEnrichedInvocation(enriched, index.authority.enrichedInvocationHash)\n } catch (e) { drift.push(`enriched-invocation(${e.message})`) }\n try {\n const responseGate = readJson(join(actualRunPath, 'context', 'response-gate.json'))\n verifyResponseGate(responseGate, index.authority.responseGate?.hash || '')\n if (stableStringify(responseGate) !== stableStringify(index.authority.responseGate)) {\n drift.push('response-gate.json')\n }\n } catch (e) { drift.push(`response-gate(${e.message})`) }\n try { verifySkillSnapshot(actualRunPath, index.authority.skillManifestHash) }\n catch (e) { drift.push(`skill-snapshot(${e.message})`) }\n try { verifyPreparedDefinition(actualRunPath, index.authority.agentDefinitionHash) }\n catch (e) { drift.push(`agent-definition(${e.message})`) }\n if (drift.length) throw new Error(`Sandbox 权威投影被修改: ${drift.join(', ')};禁止执行`)\n\n const session = readJson(join(index.sessionPath, 'session.json'))\n const currentGeneration = validGeneration(session.generation, 'session.json')\n const runGeneration = validGeneration(\n index.authority.sessionGeneration ?? index.control.sessionGeneration, 'event index')\n if (currentGeneration !== runGeneration) {\n throw new Error(\n `Session generation 已失效:run=${runGeneration}, current=${currentGeneration};` +\n '该事项已被 /stop 或 /cancel 取消,禁止继续副作用')\n }\n\n const controlActionRoot = join(indexRoot, 'actions', index.runId)\n mkdirSync(controlActionRoot, { recursive: true })\n return {\n run: index.control,\n field: { dws: index.authority.dws || {}, transport: index.authority.transport || {} },\n policy: index.authority.policy,\n target: index.authority.replyTarget,\n authority: index.authority,\n index,\n indexPath,\n controlActionRoot,\n runPath: actualRunPath,\n sessionPath: index.sessionPath,\n event: eventProjection,\n root,\n }\n}\n\nfunction ensureAskWait(context, actionId, questionText = '') {\n return armWait(context.root, cfgmod.must(context.root), {\n fieldId: context.run.fieldId,\n sessionId: context.run.sessionId,\n sessionPath: context.sessionPath,\n sourceRunId: context.run.id,\n actionId,\n questionText,\n event: context.event,\n target: context.target,\n })\n}\n\nfunction reconcileAskWait(context, actionId, receipt, questionText = '') {\n const wait = ensureAskWait(context, actionId, questionText)\n return reconcileWaitFromReceipt(context.root, cfgmod.must(context.root), wait, receipt)\n}\n\nfunction reconcileReceiptWait(context, receipt) {\n if (receipt.kind === 'ask') {\n const intentPath = join(context.controlActionRoot, receipt.actionId, 'intent.json')\n const intent = existsSync(intentPath) ? readJson(intentPath) : null\n return reconcileAskWait(context, receipt.actionId, receipt, intent?.payload?.text || '')\n }\n if ((receipt.kind === 'reply' || receipt.kind === 'silence') &&\n receipt.outcome !== 'uncertain') {\n return completeWaitFromReceipt(\n context.root, cfgmod.must(context.root), context.run.resume, receipt)\n }\n return null\n}\n\nfunction normalizePayload(kind, options, policy) {\n if (!KINDS.has(kind)) throw new Error(`原子动作只能是: ${[...KINDS].join(' / ')}`)\n if (kind === 'ack') return { emoji: '收到' }\n if (kind === 'silence') {\n const reason = String(options.reason || 'no_value').trim()\n if (!SILENCE_REASONS.has(reason)) {\n throw new Error(`silence reason 必须是: ${[...SILENCE_REASONS].join(' / ')}`)\n }\n return { reason }\n }\n const text = String(options.text || '').trim()\n if (!text) throw new Error(`${kind} 需要 --text 或 --text-file`)\n const max = Number(policy.limits?.maxTextCharacters || 4000)\n if (text.length > max) throw new Error(`正文 ${text.length} 字,超过 Basic Behavior 上限 ${max}`)\n return { text }\n}\n\nfunction validate(context, kind) {\n const { run, policy, target } = context\n if (!(policy.allowedActions || []).includes(kind)) {\n throw new Error(`事件 ${run.eventKind} 不允许 ${kind};允许: ${(policy.allowedActions || []).join(', ')}`)\n }\n if (OUTWARD.has(kind) && (!target?.conversationId || !target?.messageId || !target?.senderOpenDingTalkId)) {\n throw new Error('Run 没有完整固定回复目标,禁止外发')\n }\n if (OUTWARD.has(kind)) {\n if (context.field.transport.egressOwner !== 'dingtalk-agent') {\n throw new Error(`Field 的出口属于 ${context.field.transport.egressOwner || 'unknown'},禁止 act 外发以避免双发`)\n }\n const profile = context.field.dws.profile || ''\n const expected = context.field.dws.expectedUserId || ''\n if (!profile) throw new Error('Workspace 没有固定 dws.profile,禁止依赖“当前登录身份”外发')\n if (profile.includes(',')) throw new Error('一个 Run 只能固定一个 dws.profile,禁止多组织广播式执行')\n if (!expected) throw new Error('Workspace 没有 expectedUserId,无法核对 DWS 实际执行身份')\n }\n const transition = policy.stateMachine?.transitions?.[run.state]?.[kind]\n if (!transition) throw new Error(`状态 ${run.state} 不接受动作 ${kind}`)\n const counts = run.actionCounts || {}\n const limits = policy.limits || {}\n if (kind === 'ack' && Number(counts.ack || 0) >= Number(limits.maxAckPerRun || 1)) {\n throw new Error('本 Run 已 ack,禁止重复刷表情')\n }\n if (OUTWARD.has(kind) && Number(counts.outward || 0) >= Number(limits.maxOutwardActionsPerRun || 2)) {\n throw new Error('本 Run 的外发预算已用完')\n }\n if (TERMINAL.has(kind) && Number(counts.terminal || 0) >= Number(limits.maxTerminalMessagesPerRun || 1)) {\n throw new Error('本 Run 已产生终态动作')\n }\n return transition\n}\n\nfunction verifyExecutionIdentity(context, intent, actionPath) {\n // profile 同名重新登录会换掉真实凭据身份;因此每个外发 Action 都现查,不跨 Action 缓存。\n const data = dws.getSelf(intent.dwsProfile)\n const userId = String(findValue(data, ['userId', 'user_id', 'userid']) || '')\n if (!userId) throw new Error('dws contact user get-self 没有返回 userId,禁止外发')\n if (userId !== String(intent.expectedUserId)) {\n throw new Error(`DWS 执行身份不符:expected=${intent.expectedUserId}, actual=${userId}`)\n }\n const verified = { profile: intent.dwsProfile, userId, verifiedAt: new Date().toISOString(), data }\n persistArtifact(context, actionPath, 'identity.json', verified)\n return verified\n}\n\nfunction verify(kind, target, result, profile, expectedText = '') {\n if (kind === 'ack') {\n const data = dws.readMessageEmotions(target.messageId, profile)\n return { outcome: 'accepted-unverified', verified: false,\n verification: 'reaction-readback-cannot-prove-current-actor', data }\n }\n const taskId = findValue(result, ['openTaskId', 'open_task_id'])\n if (taskId) {\n const sendStatus = dws.querySendStatus(taskId, profile)\n const sentId = findValue(sendStatus, ['openMessageId', 'openMsgId', 'open_message_id'])\n if (!sentId) {\n return { outcome: 'accepted-unverified', verified: false,\n verification: 'query-send-status-without-message-id', data: { sendStatus } }\n }\n return verifyMessageReadback(sentId, expectedText, profile, { sendStatus })\n }\n const messageId = findValue(result, ['openMessageId', 'openMsgId', 'open_message_id'])\n if (messageId) {\n return verifyMessageReadback(messageId, expectedText, profile)\n }\n return { outcome: 'accepted-unverified', verified: false,\n verification: 'reply-result-has-no-queryable-id', data: result }\n}\n\n/**\n * 发送接口返回 messageId 只证明平台受理了一个对象;独立回读还必须同时看到\n * 同一 messageId 和本次正文。否则旧消息、空壳对象或被改写正文都不能签发\n * confirmed Receipt。\n */\nfunction verifyMessageReadback(\n messageId,\n expectedText,\n profile,\n prior: Record<string, unknown> = {},\n) {\n const messageReadback = dws.readMessagesByIds(messageId, profile)\n const seenId = containsScalar(messageReadback, String(messageId))\n const seenText = Boolean(expectedText) && containsExactText(messageReadback, String(expectedText))\n const data = { ...prior, messageReadback }\n return seenId && seenText\n ? {\n outcome: 'confirmed', verified: true,\n verification: Object.keys(prior).length\n ? 'query-send-status-plus-message-readback'\n : 'message-id-plus-text-readback',\n messageId: String(messageId),\n data,\n }\n : {\n outcome: 'accepted-unverified', verified: false,\n verification: !seenId ? 'message-readback-id-miss' : 'message-readback-text-miss',\n messageId: String(messageId),\n data,\n }\n}\n\nfunction containsScalar(value, expected) {\n if (value === null || value === undefined) return false\n if (typeof value !== 'object') return String(value) === expected\n if (Array.isArray(value)) return value.some((item) => containsScalar(item, expected))\n return Object.values(value).some((item) => containsScalar(item, expected))\n}\n\nfunction containsExactText(value, expected) {\n if (value === null || value === undefined) return false\n if (typeof value === 'string') {\n if (value === expected) return true\n try {\n const parsed = JSON.parse(value)\n return parsed !== value && containsExactText(parsed, expected)\n } catch { return false }\n }\n if (Array.isArray(value)) return value.some((item) => containsExactText(item, expected))\n if (typeof value === 'object') {\n return Object.values(value).some((item) => containsExactText(item, expected))\n }\n return false\n}\n\nfunction finish(context, intent, nextState, checked) {\n return {\n $schema: 'dingtalk-agent/action-receipt@1',\n actionId: intent.id,\n runId: intent.runId,\n kind: intent.kind,\n completedAt: new Date().toISOString(),\n fromState: context.run.state,\n toState: nextState,\n ...checked,\n }\n}\n\nfunction uncertain(context, intent, reason) {\n return finish(context, intent, 'needs-reconciliation', {\n outcome: 'uncertain', verified: false, verification: reason,\n })\n}\n\nfunction replayReceipt(context, receipt) {\n projectReceipt(context, receipt)\n return { ...receipt, duplicate: true }\n}\n\nfunction projectReceipt(context, receipt) {\n const release = acquireControlLock(context.indexPath)\n try {\n const latest = readJson(context.indexPath)\n if (digest(stableStringify(latest.authority)) !== latest.authorityHash) {\n throw new Error('投影 Receipt 时 authority hash 不一致')\n }\n const current = latest.control\n const applied = new Set(current.appliedActionIds || [])\n if (applied.has(receipt.actionId)) {\n mirrorJson(join(context.runPath, 'run.json'), current)\n context.index = latest\n context.run = current\n return current\n }\n // 兼容旧 control:若计数已表明该 kind 投影过,只回填 actionId,不重复计数/转移。\n if (Number(current.actionCounts?.[receipt.kind] || 0) > 0) {\n const next = { ...current, appliedActionIds: [...applied, receipt.actionId] }\n const updated = { ...latest, control: next, updatedAt: new Date().toISOString() }\n writeJsonAtomic(context.indexPath, updated)\n context.index = updated\n context.run = next\n mirrorJson(join(context.runPath, 'run.json'), next)\n return next\n }\n if (current.state !== receipt.fromState) {\n throw new Error(`Receipt 状态冲突: control=${current.state}, receipt=${receipt.fromState}→${receipt.toState}`)\n }\n const next = {\n ...current,\n updatedAt: receipt.completedAt,\n state: receipt.toState,\n appliedActionIds: [...applied, receipt.actionId],\n }\n bump(next, receipt.kind)\n if (receipt.toState === 'needs-reconciliation') next.status = 'blocked'\n else if (receipt.toState === 'waiting-input') next.status = receipt.verified ? 'waiting-input' : 'waiting-input-unverified'\n else if (receipt.toState === 'ignored') next.status = 'completed'\n else if (receipt.toState === 'completed') next.status = receipt.verified ? 'completed' : 'completed-unverified'\n else next.status = 'active'\n const updated = { ...latest, control: next, updatedAt: new Date().toISOString() }\n writeJsonAtomic(context.indexPath, updated)\n context.index = updated\n context.run = next\n mirrorJson(join(context.runPath, 'run.json'), next)\n return next\n } finally {\n release()\n }\n}\n\n/** 已有 Receipt 是真值;新动作前先把“Receipt 已落盘、control 未更新”的窗口收敛。 */\nfunction reconcileReceipts(context) {\n const receipts: Array<Record<string, any>> = []\n for (const entry of readdirSync(context.controlActionRoot, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue\n const path = join(context.controlActionRoot, entry.name, 'receipt.json')\n if (existsSync(path)) receipts.push(readJson(path))\n }\n receipts.sort((a, b) => String(a.completedAt).localeCompare(String(b.completedAt)))\n for (const receipt of receipts) {\n reconcileReceiptWait(context, receipt)\n projectReceipt(context, receipt)\n }\n}\n\n/** 旧 Action 可能已命中 DWS 但尚无 Receipt;此时换文本会生成新 actionId,必须 fail closed。 */\nfunction assertNoOtherUnresolvedAttempt(context, currentActionId) {\n for (const entry of readdirSync(context.controlActionRoot, { withFileTypes: true })) {\n if (!entry.isDirectory() || entry.name === currentActionId) continue\n const path = join(context.controlActionRoot, entry.name)\n if (existsSync(join(path, 'attempt.json')) && !existsSync(join(path, 'receipt.json'))) {\n throw new Error(`Run 存在未对账 Action ${entry.name};禁止更换正文再外发,请先 reconcile`)\n }\n }\n}\n\nfunction bump(run, kind) {\n run.actionCounts = { ack: 0, reply: 0, ask: 0, silence: 0, outward: 0, terminal: 0,\n ...(run.actionCounts || {}) }\n run.actionCounts[kind]++\n if (OUTWARD.has(kind)) run.actionCounts.outward++\n if (TERMINAL.has(kind)) run.actionCounts.terminal++\n}\n\nfunction persistArtifact(context, actionPath, name, value) {\n writeJsonAtomic(join(actionPath, name), value)\n const mirrorDir = join(context.runPath, 'actions', basename(actionPath))\n try {\n mkdirSync(mirrorDir, { recursive: true })\n writeJsonAtomic(join(mirrorDir, name), value)\n } catch (e) {\n console.error(` ⚠️ sandbox 投影写入失败(control store 已保留真值): ${e.message}`)\n }\n}\n\nfunction persistReceipt(context, actionPath, receipt) {\n persistArtifact(context, actionPath, 'receipt.json', receipt)\n mirrorJson(join(context.runPath, 'receipts', `${receipt.actionId}.json`), receipt)\n}\n\nfunction mirrorJson(path, value) {\n try { writeJsonAtomic(path, value) }\n catch (e) { console.error(` ⚠️ sandbox 投影写入失败(control store 已保留真值): ${e.message}`) }\n}\n\nfunction transportName(kind) {\n if (kind === 'ack') return 'dws.chat.message.add-emoji'\n if (kind === 'reply' || kind === 'ask') return 'dws.chat.message.reply'\n return 'local.silence'\n}\n\nfunction findValue(value, keys) {\n if (!value || typeof value !== 'object') return ''\n for (const key of keys) if (value[key]) return value[key]\n for (const child of Object.values(value)) {\n const found = findValue(child, keys)\n if (found) return found\n }\n return ''\n}\n\nfunction validGeneration(value, label) {\n const n = Number(value ?? 1)\n if (!Number.isInteger(n) || n < 1) throw new Error(`${label} 的 Session generation 非法`)\n return n\n}\n"]}
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/actions.ts"],"names":[],"mappings":"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","sourcesContent":["// Basic Behavior 的四个原子动作(TypeScript source)。\n// Sandbox 中的 context/ 是可读投影;真正的 target/profile/policy/state 来自 sandbox 外 event index。\n\nimport { existsSync, mkdirSync, realpathSync, readdirSync } from 'node:fs'\nimport { dirname, join, resolve, parse, basename } from 'node:path'\nimport { randomUUID } from 'node:crypto'\nimport { digest, stableStringify } from './events.js'\nimport {\n acquireControlLock, acquireExecutionLock, readJson, writeJsonAtomic,\n} from './sessions.js'\nimport * as cfgmod from './config.js'\nimport * as dws from './dws.js'\nimport { verifySkillSnapshot } from './skills.js'\nimport { verifyPreparedDefinition } from './agent-definition.js'\nimport { verifyEnrichedInvocation } from './perception.js'\nimport { verifyResponseGate } from './response-gate.js'\nimport {\n acquireSessionEffectLock, armWait, completeWaitFromReceipt,\n markWaitTransportAccepted, reconcileWaitFromReceipt,\n} from './waits.js'\nimport { err } from './tui.js'\n\nconst OUTWARD = new Set(['ack', 'reply', 'ask'])\nconst TERMINAL = new Set(['reply', 'ask', 'silence'])\nconst KINDS = new Set(['ack', 'reply', 'ask', 'silence'])\nconst SILENCE_REASONS = new Set([\n 'unmentioned', 'already_answered', 'no_value', 'policy_denied', 'unsupported',\n 'heartbeat_noop',\n])\n\nclass ActionUncertainError extends Error {\n receipt: Record<string, any>\n\n constructor(message: string, receipt: Record<string, any>) {\n super(message)\n this.name = 'ActionUncertainError'\n this.receipt = receipt\n }\n}\n\nexport function findRun(start = process.cwd(), explicit = '') {\n const picked = explicit || process.env.DTA_RUN || start\n let dir = resolve(picked)\n while (true) {\n if (existsSync(join(dir, 'run.json'))) return dir\n const parent = dirname(dir)\n if (parent === dir || dir === parse(dir).root) break\n dir = parent\n }\n throw new Error('找不到当前 Run;请在 prepare 返回的 cwd 中执行,或设置 DTA_RUN/--run')\n}\n\nexport function previewAction(runPath, kind, options = {}) {\n const context = loadContext(runPath)\n const payload = normalizePayload(kind, options, context.policy)\n const nextState = validate(context, kind)\n return {\n type: 'dingtalk-agent.action.preview',\n runId: context.run.id,\n kind,\n fromState: context.run.state,\n toState: nextState,\n transport: transportName(kind),\n target: kind === 'silence' ? null : context.target,\n profile: context.field.dws.profile || '',\n expectedUserId: context.field.dws.expectedUserId || '',\n transportMode: context.field.transport.mode || '',\n egressOwner: context.field.transport.egressOwner || '',\n payload,\n authorityHash: context.index.authorityHash,\n persisted: false,\n sideEffect: false,\n }\n}\n\nexport function executeAction(runPath, kind, options = {}) {\n if (!KINDS.has(kind)) throw new Error(`原子动作只能是: ${[...KINDS].join(' / ')}`)\n let context = loadContext(runPath)\n const payload = normalizePayload(kind, options, context.policy)\n const actionId = `act_${digest(`${context.run.id}\\0${kind}\\0${JSON.stringify(payload)}`).slice(0, 20)}`\n let actionPath = join(context.controlActionRoot, actionId)\n let receiptPath = join(actionPath, 'receipt.json')\n\n // Session effect lock 把 cancel 与外部副作用线性化;先拿到锁的一方定义先后。\n // event execution lock 仍负责同一个 Run 的 Action 幂等,control lock 只做短时 RMW。\n const releaseSessionEffect = acquireSessionEffectLock(context.root, context.sessionPath)\n try {\n const release = acquireExecutionLock(context.indexPath)\n try {\n context = loadContext(runPath)\n reconcileReceipts(context)\n context = loadContext(runPath)\n actionPath = join(context.controlActionRoot, actionId)\n receiptPath = join(actionPath, 'receipt.json')\n if (existsSync(receiptPath)) {\n const receipt = readJson(receiptPath)\n reconcileReceiptWait(context, receipt)\n return replayReceipt(context, receipt)\n }\n assertNoOtherUnresolvedAttempt(context, actionId)\n const nextState = validate(context, kind)\n mkdirSync(actionPath, { recursive: true })\n const intentPath = join(actionPath, 'intent.json')\n const attemptPath = join(actionPath, 'attempt.json')\n let intent\n if (existsSync(intentPath)) {\n intent = readJson(intentPath)\n if (intent.kind !== kind || JSON.stringify(intent.payload) !== JSON.stringify(payload)) {\n throw new Error(`Action intent 碰撞: ${actionId}`)\n }\n } else {\n intent = {\n $schema: 'dingtalk-agent/action-intent@1',\n id: actionId,\n runId: context.run.id,\n kind,\n createdAt: new Date().toISOString(),\n transport: transportName(kind),\n target: kind === 'silence' ? null : context.target,\n dwsProfile: context.field.dws.profile || '',\n expectedUserId: context.field.dws.expectedUserId || '',\n transportMode: context.field.transport.mode || '',\n egressOwner: context.field.transport.egressOwner || '',\n uuid: OUTWARD.has(kind) ? randomUUID() : null,\n payload,\n authorityHash: context.index.authorityHash,\n }\n persistArtifact(context, actionPath, 'intent.json', intent)\n }\n\n if (kind === 'silence') {\n const receipt = finish(context, intent, nextState, {\n outcome: 'confirmed', verified: true, verification: 'local-no-side-effect',\n })\n persistReceipt(context, actionPath, receipt)\n completeWaitFromReceipt(\n context.root, cfgmod.must(context.root), context.run.resume, receipt)\n projectReceipt(context, receipt)\n return receipt\n }\n\n verifyExecutionIdentity(context, intent, actionPath)\n const wait = kind === 'ask' ? ensureAskWait(context, actionId, payload.text) : null\n\n if (kind === 'ack' && existsSync(attemptPath)) {\n const receipt = uncertain(context, intent,\n 'ack 已有 attempt 但没有 receipt;表情动作无服务端幂等键,拒绝盲重试')\n persistReceipt(context, actionPath, receipt)\n projectReceipt(context, receipt)\n return receipt\n }\n if (!existsSync(attemptPath)) {\n persistArtifact(context, actionPath, 'attempt.json', {\n actionId, startedAt: new Date().toISOString(),\n })\n }\n\n let result\n let checked\n try {\n const transportResultPath = join(actionPath, 'transport-result.json')\n if (existsSync(transportResultPath)) {\n // DWS 已返回且结果已落盘时,从本地继续验证;绝不为了补 Receipt 再发一次。\n result = readJson(transportResultPath)\n } else {\n result = kind === 'ack'\n ? dws.ackMessage(context.target, {\n emoji: payload.emoji, profile: intent.dwsProfile,\n })\n : dws.replyMessage(context.target, payload.text, {\n uuid: intent.uuid, profile: intent.dwsProfile,\n })\n persistArtifact(context, actionPath, 'transport-result.json', result)\n }\n if (kind === 'ask') markWaitTransportAccepted(\n context.root, cfgmod.must(context.root), wait, result)\n checked = verify(kind, context.target, result, intent.dwsProfile, payload.text || '')\n if (checked.data !== undefined) {\n persistArtifact(context, actionPath, 'verification.json', checked.data)\n }\n } catch (e) {\n const receipt = uncertain(context, intent, String(e.message || e))\n persistReceipt(context, actionPath, receipt)\n if (kind === 'ask') reconcileWaitFromReceipt(\n context.root, cfgmod.must(context.root), wait, receipt)\n projectReceipt(context, receipt)\n throw new ActionUncertainError(\n `动作结果不确定,禁止自动重发;action=${actionId}: ${e.message || e}`,\n receipt,\n )\n }\n\n const receipt = finish(context, intent, nextState, checked)\n persistReceipt(context, actionPath, receipt) // 事实先落盘\n if (kind === 'ask') reconcileWaitFromReceipt(\n context.root, cfgmod.must(context.root), wait, receipt)\n if (kind === 'reply') completeWaitFromReceipt(\n context.root, cfgmod.must(context.root), context.run.resume, receipt)\n projectReceipt(context, receipt) // 再更新 control/run 投影\n return receipt\n } finally {\n release()\n }\n } finally {\n releaseSessionEffect()\n }\n}\n\n/**\n * 权威数据只从 event index 读取。Run 目录里的静态上下文发生漂移时 fail closed;\n * 动态 run.json 只是可修复投影,不能反过来阻塞已落盘的 Receipt。\n * 这也让 --run /任意伪造目录 无法获得 DWS 外发能力。\n */\nfunction loadContext(runPath) {\n const actualRunPath = realpathSync(resolve(runPath))\n const projection = readJson(join(actualRunPath, 'run.json'))\n const root = process.env.DTA_ROOT\n ? resolve(process.env.DTA_ROOT)\n : cfgmod.findRoot(actualRunPath)\n if (!root) throw new Error('找不到 control store;act 必须由能访问 DTA_ROOT 的宿主侧执行')\n const cfg = cfgmod.must(root)\n const indexRoot = resolve(root, cfg.runtime?.eventIndexRoot || '.dingtalk-agent/event-index')\n const indexPath = join(indexRoot, `${digest(projection.eventId)}.json`)\n if (!existsSync(indexPath)) throw new Error('当前 Run 不在 event index 中;拒绝任意/伪造 --run')\n const index = readJson(indexPath)\n if (!index.authority || !index.control ||\n digest(stableStringify(index.authority)) !== index.authorityHash) {\n throw new Error('event index 的权威快照损坏,禁止执行')\n }\n if (realpathSync(index.runPath) !== actualRunPath ||\n index.runId !== index.control.id || index.eventId !== projection.eventId) {\n throw new Error('Run 与 event index 身份不一致,拒绝执行')\n }\n\n if (stableStringify(projection) !== stableStringify(index.control)) {\n mirrorJson(join(actualRunPath, 'run.json'), index.control)\n }\n const drift: string[] = []\n const targetProjection = readJson(join(actualRunPath, 'context', 'reply-target.json'))\n if (stableStringify(targetProjection) !== stableStringify(index.authority.replyTarget)) drift.push('reply-target.json')\n const policyProjection = readJson(join(actualRunPath, 'policy', 'allowed-actions.json'))\n if (stableStringify(policyProjection) !== stableStringify(index.authority.policy)) drift.push('allowed-actions.json')\n const fieldProjection = readJson(join(actualRunPath, 'context', 'field.json'))\n if (stableStringify(fieldProjection.dws || {}) !== stableStringify(index.authority.dws || {})) drift.push('field.dws')\n if (stableStringify(fieldProjection.transport || {}) !== stableStringify(index.authority.transport || {})) drift.push('field.transport')\n const behaviorProjection = readJson(join(actualRunPath, 'context', 'behavior.json'))\n if (behaviorProjection.hash !== index.authority.behaviorHash) drift.push('behavior.json')\n const eventProjection = readJson(join(actualRunPath, 'event.json'))\n if (digest(stableStringify(eventProjection)) !== index.authority.eventHash) drift.push('event.json')\n if (index.authority.resume) {\n const resumeProjection = readJson(join(actualRunPath, 'context', 'resume.json'))\n if (stableStringify(resumeProjection) !== stableStringify(index.authority.resume)) {\n drift.push('resume.json')\n }\n }\n if (index.authority.invocation) {\n const invocationProjection = readJson(join(actualRunPath, 'context', 'invocation.json'))\n if (stableStringify(invocationProjection) !== stableStringify(index.authority.invocation)) {\n drift.push('invocation.json')\n }\n }\n try {\n const enriched = readJson(join(actualRunPath, 'context', 'enriched-invocation.json'))\n verifyEnrichedInvocation(enriched, index.authority.enrichedInvocationHash)\n } catch (e) { drift.push(`enriched-invocation(${e.message})`) }\n try {\n const responseGate = readJson(join(actualRunPath, 'context', 'response-gate.json'))\n verifyResponseGate(responseGate, index.authority.responseGate?.hash || '')\n if (stableStringify(responseGate) !== stableStringify(index.authority.responseGate)) {\n drift.push('response-gate.json')\n }\n } catch (e) { drift.push(`response-gate(${e.message})`) }\n try { verifySkillSnapshot(actualRunPath, index.authority.skillManifestHash) }\n catch (e) { drift.push(`skill-snapshot(${e.message})`) }\n try { verifyPreparedDefinition(actualRunPath, index.authority.agentDefinitionHash) }\n catch (e) { drift.push(`agent-definition(${e.message})`) }\n if (drift.length) throw new Error(`Sandbox 权威投影被修改: ${drift.join(', ')};禁止执行`)\n\n const session = readJson(join(index.sessionPath, 'session.json'))\n const currentGeneration = validGeneration(session.generation, 'session.json')\n const runGeneration = validGeneration(\n index.authority.sessionGeneration ?? index.control.sessionGeneration, 'event index')\n if (currentGeneration !== runGeneration) {\n throw new Error(\n `Session generation 已失效:run=${runGeneration}, current=${currentGeneration};` +\n '该事项已被 /stop 或 /cancel 取消,禁止继续副作用')\n }\n\n const controlActionRoot = join(indexRoot, 'actions', index.runId)\n mkdirSync(controlActionRoot, { recursive: true })\n return {\n run: index.control,\n field: { dws: index.authority.dws || {}, transport: index.authority.transport || {} },\n policy: index.authority.policy,\n target: index.authority.replyTarget,\n authority: index.authority,\n index,\n indexPath,\n controlActionRoot,\n runPath: actualRunPath,\n sessionPath: index.sessionPath,\n event: eventProjection,\n root,\n }\n}\n\nfunction ensureAskWait(context, actionId, questionText = '') {\n return armWait(context.root, cfgmod.must(context.root), {\n fieldId: context.run.fieldId,\n sessionId: context.run.sessionId,\n sessionPath: context.sessionPath,\n sourceRunId: context.run.id,\n actionId,\n questionText,\n event: context.event,\n target: context.target,\n })\n}\n\nfunction reconcileAskWait(context, actionId, receipt, questionText = '') {\n const wait = ensureAskWait(context, actionId, questionText)\n return reconcileWaitFromReceipt(context.root, cfgmod.must(context.root), wait, receipt)\n}\n\nfunction reconcileReceiptWait(context, receipt) {\n if (receipt.kind === 'ask') {\n const intentPath = join(context.controlActionRoot, receipt.actionId, 'intent.json')\n const intent = existsSync(intentPath) ? readJson(intentPath) : null\n return reconcileAskWait(context, receipt.actionId, receipt, intent?.payload?.text || '')\n }\n if ((receipt.kind === 'reply' || receipt.kind === 'silence') &&\n receipt.outcome !== 'uncertain') {\n return completeWaitFromReceipt(\n context.root, cfgmod.must(context.root), context.run.resume, receipt)\n }\n return null\n}\n\nfunction normalizePayload(kind, options, policy) {\n if (!KINDS.has(kind)) throw new Error(`原子动作只能是: ${[...KINDS].join(' / ')}`)\n if (kind === 'ack') return { emoji: '收到' }\n if (kind === 'silence') {\n const reason = String(options.reason || 'no_value').trim()\n if (!SILENCE_REASONS.has(reason)) {\n throw new Error(`silence reason 必须是: ${[...SILENCE_REASONS].join(' / ')}`)\n }\n return { reason }\n }\n const text = String(options.text || '').trim()\n if (!text) throw new Error(`${kind} 需要 --text 或 --text-file`)\n const max = Number(policy.limits?.maxTextCharacters || 4000)\n if (text.length > max) throw new Error(`正文 ${text.length} 字,超过 Basic Behavior 上限 ${max}`)\n return { text }\n}\n\nfunction validate(context, kind) {\n const { run, policy, target } = context\n if (!(policy.allowedActions || []).includes(kind)) {\n throw new Error(`事件 ${run.eventKind} 不允许 ${kind};允许: ${(policy.allowedActions || []).join(', ')}`)\n }\n if (OUTWARD.has(kind) && (!target?.conversationId || !target?.messageId || !target?.senderOpenDingTalkId)) {\n throw new Error('Run 没有完整固定回复目标,禁止外发')\n }\n if (OUTWARD.has(kind)) {\n if (context.field.transport.egressOwner !== 'dingtalk-agent') {\n throw new Error(`Field 的出口属于 ${context.field.transport.egressOwner || 'unknown'},禁止 act 外发以避免双发`)\n }\n const profile = context.field.dws.profile || ''\n const expected = context.field.dws.expectedUserId || ''\n if (!profile) throw new Error('Workspace 没有固定 dws.profile,禁止依赖“当前登录身份”外发')\n if (profile.includes(',')) throw new Error('一个 Run 只能固定一个 dws.profile,禁止多组织广播式执行')\n if (!expected) throw new Error('Workspace 没有 expectedUserId,无法核对 DWS 实际执行身份')\n }\n const transition = policy.stateMachine?.transitions?.[run.state]?.[kind]\n if (!transition) throw new Error(`状态 ${run.state} 不接受动作 ${kind}`)\n const counts = run.actionCounts || {}\n const limits = policy.limits || {}\n if (kind === 'ack' && Number(counts.ack || 0) >= Number(limits.maxAckPerRun || 1)) {\n throw new Error('本 Run 已 ack,禁止重复刷表情')\n }\n if (OUTWARD.has(kind) && Number(counts.outward || 0) >= Number(limits.maxOutwardActionsPerRun || 2)) {\n throw new Error('本 Run 的外发预算已用完')\n }\n if (TERMINAL.has(kind) && Number(counts.terminal || 0) >= Number(limits.maxTerminalMessagesPerRun || 1)) {\n throw new Error('本 Run 已产生终态动作')\n }\n return transition\n}\n\nfunction verifyExecutionIdentity(context, intent, actionPath) {\n // profile 同名重新登录会换掉真实凭据身份;因此每个外发 Action 都现查,不跨 Action 缓存。\n const data = dws.getSelf(intent.dwsProfile)\n const userId = String(findValue(data, ['userId', 'user_id', 'userid']) || '')\n if (!userId) throw new Error('dws contact user get-self 没有返回 userId,禁止外发')\n if (userId !== String(intent.expectedUserId)) {\n throw new Error(`DWS 执行身份不符:expected=${intent.expectedUserId}, actual=${userId}`)\n }\n const verified = { profile: intent.dwsProfile, userId, verifiedAt: new Date().toISOString(), data }\n persistArtifact(context, actionPath, 'identity.json', verified)\n return verified\n}\n\nfunction verify(kind, target, result, profile, expectedText = '') {\n if (kind === 'ack') {\n const data = dws.readMessageEmotions(target.messageId, profile)\n return { outcome: 'accepted-unverified', verified: false,\n verification: 'reaction-readback-cannot-prove-current-actor', data }\n }\n const taskId = findValue(result, ['openTaskId', 'open_task_id'])\n if (taskId) {\n const sendStatus = dws.querySendStatus(taskId, profile)\n const sentId = findValue(sendStatus, ['openMessageId', 'openMsgId', 'open_message_id'])\n if (!sentId) {\n return { outcome: 'accepted-unverified', verified: false,\n verification: 'query-send-status-without-message-id', data: { sendStatus } }\n }\n return verifyMessageReadback(sentId, expectedText, profile, { sendStatus })\n }\n const messageId = findValue(result, ['openMessageId', 'openMsgId', 'open_message_id'])\n if (messageId) {\n return verifyMessageReadback(messageId, expectedText, profile)\n }\n return { outcome: 'accepted-unverified', verified: false,\n verification: 'reply-result-has-no-queryable-id', data: result }\n}\n\n/**\n * 发送接口返回 messageId 只证明平台受理了一个对象;独立回读还必须同时看到\n * 同一 messageId 和本次正文。否则旧消息、空壳对象或被改写正文都不能签发\n * confirmed Receipt。\n */\nfunction verifyMessageReadback(\n messageId,\n expectedText,\n profile,\n prior: Record<string, unknown> = {},\n) {\n const messageReadback = dws.readMessagesByIds(messageId, profile)\n const seenId = containsScalar(messageReadback, String(messageId))\n const seenText = Boolean(expectedText) && containsExactText(messageReadback, String(expectedText))\n const data = { ...prior, messageReadback }\n return seenId && seenText\n ? {\n outcome: 'confirmed', verified: true,\n verification: Object.keys(prior).length\n ? 'query-send-status-plus-message-readback'\n : 'message-id-plus-text-readback',\n messageId: String(messageId),\n data,\n }\n : {\n outcome: 'accepted-unverified', verified: false,\n verification: !seenId ? 'message-readback-id-miss' : 'message-readback-text-miss',\n messageId: String(messageId),\n data,\n }\n}\n\nfunction containsScalar(value, expected) {\n if (value === null || value === undefined) return false\n if (typeof value !== 'object') return String(value) === expected\n if (Array.isArray(value)) return value.some((item) => containsScalar(item, expected))\n return Object.values(value).some((item) => containsScalar(item, expected))\n}\n\nfunction containsExactText(value, expected) {\n if (value === null || value === undefined) return false\n if (typeof value === 'string') {\n if (value === expected) return true\n try {\n const parsed = JSON.parse(value)\n return parsed !== value && containsExactText(parsed, expected)\n } catch { return false }\n }\n if (Array.isArray(value)) return value.some((item) => containsExactText(item, expected))\n if (typeof value === 'object') {\n return Object.values(value).some((item) => containsExactText(item, expected))\n }\n return false\n}\n\nfunction finish(context, intent, nextState, checked) {\n return {\n $schema: 'dingtalk-agent/action-receipt@1',\n actionId: intent.id,\n runId: intent.runId,\n kind: intent.kind,\n completedAt: new Date().toISOString(),\n fromState: context.run.state,\n toState: nextState,\n ...checked,\n }\n}\n\nfunction uncertain(context, intent, reason) {\n return finish(context, intent, 'needs-reconciliation', {\n outcome: 'uncertain', verified: false, verification: reason,\n })\n}\n\nfunction replayReceipt(context, receipt) {\n projectReceipt(context, receipt)\n return { ...receipt, duplicate: true }\n}\n\nfunction projectReceipt(context, receipt) {\n const release = acquireControlLock(context.indexPath)\n try {\n const latest = readJson(context.indexPath)\n if (digest(stableStringify(latest.authority)) !== latest.authorityHash) {\n throw new Error('投影 Receipt 时 authority hash 不一致')\n }\n const current = latest.control\n const applied = new Set(current.appliedActionIds || [])\n if (applied.has(receipt.actionId)) {\n mirrorJson(join(context.runPath, 'run.json'), current)\n context.index = latest\n context.run = current\n return current\n }\n // 兼容旧 control:若计数已表明该 kind 投影过,只回填 actionId,不重复计数/转移。\n if (Number(current.actionCounts?.[receipt.kind] || 0) > 0) {\n const next = { ...current, appliedActionIds: [...applied, receipt.actionId] }\n const updated = { ...latest, control: next, updatedAt: new Date().toISOString() }\n writeJsonAtomic(context.indexPath, updated)\n context.index = updated\n context.run = next\n mirrorJson(join(context.runPath, 'run.json'), next)\n return next\n }\n if (current.state !== receipt.fromState) {\n throw new Error(`Receipt 状态冲突: control=${current.state}, receipt=${receipt.fromState}→${receipt.toState}`)\n }\n const next = {\n ...current,\n updatedAt: receipt.completedAt,\n state: receipt.toState,\n appliedActionIds: [...applied, receipt.actionId],\n }\n bump(next, receipt.kind)\n if (receipt.toState === 'needs-reconciliation') next.status = 'blocked'\n else if (receipt.toState === 'waiting-input') next.status = receipt.verified ? 'waiting-input' : 'waiting-input-unverified'\n else if (receipt.toState === 'ignored') next.status = 'completed'\n else if (receipt.toState === 'completed') next.status = receipt.verified ? 'completed' : 'completed-unverified'\n else next.status = 'active'\n const updated = { ...latest, control: next, updatedAt: new Date().toISOString() }\n writeJsonAtomic(context.indexPath, updated)\n context.index = updated\n context.run = next\n mirrorJson(join(context.runPath, 'run.json'), next)\n return next\n } finally {\n release()\n }\n}\n\n/** 已有 Receipt 是真值;新动作前先把“Receipt 已落盘、control 未更新”的窗口收敛。 */\nfunction reconcileReceipts(context) {\n const receipts: Array<Record<string, any>> = []\n for (const entry of readdirSync(context.controlActionRoot, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue\n const path = join(context.controlActionRoot, entry.name, 'receipt.json')\n if (existsSync(path)) receipts.push(readJson(path))\n }\n receipts.sort((a, b) => String(a.completedAt).localeCompare(String(b.completedAt)))\n for (const receipt of receipts) {\n reconcileReceiptWait(context, receipt)\n projectReceipt(context, receipt)\n }\n}\n\n/** 旧 Action 可能已命中 DWS 但尚无 Receipt;此时换文本会生成新 actionId,必须 fail closed。 */\nfunction assertNoOtherUnresolvedAttempt(context, currentActionId) {\n for (const entry of readdirSync(context.controlActionRoot, { withFileTypes: true })) {\n if (!entry.isDirectory() || entry.name === currentActionId) continue\n const path = join(context.controlActionRoot, entry.name)\n if (existsSync(join(path, 'attempt.json')) && !existsSync(join(path, 'receipt.json'))) {\n throw new Error(`Run 存在未对账 Action ${entry.name};禁止更换正文再外发,请先 reconcile`)\n }\n }\n}\n\nfunction bump(run, kind) {\n run.actionCounts = { ack: 0, reply: 0, ask: 0, silence: 0, outward: 0, terminal: 0,\n ...(run.actionCounts || {}) }\n run.actionCounts[kind]++\n if (OUTWARD.has(kind)) run.actionCounts.outward++\n if (TERMINAL.has(kind)) run.actionCounts.terminal++\n}\n\nfunction persistArtifact(context, actionPath, name, value) {\n writeJsonAtomic(join(actionPath, name), value)\n const mirrorDir = join(context.runPath, 'actions', basename(actionPath))\n try {\n mkdirSync(mirrorDir, { recursive: true })\n writeJsonAtomic(join(mirrorDir, name), value)\n } catch (e) {\n console.error(err().theme.warn(` ⚠️ sandbox 投影写入失败(control store 已保留真值): ${e.message}`))\n }\n}\n\nfunction persistReceipt(context, actionPath, receipt) {\n persistArtifact(context, actionPath, 'receipt.json', receipt)\n mirrorJson(join(context.runPath, 'receipts', `${receipt.actionId}.json`), receipt)\n}\n\nfunction mirrorJson(path, value) {\n try { writeJsonAtomic(path, value) }\n catch (e) {\n console.error(err().theme.warn(` ⚠️ sandbox 投影写入失败(control store 已保留真值): ${e.message}`))\n }\n}\n\nfunction transportName(kind) {\n if (kind === 'ack') return 'dws.chat.message.add-emoji'\n if (kind === 'reply' || kind === 'ask') return 'dws.chat.message.reply'\n return 'local.silence'\n}\n\nfunction findValue(value, keys) {\n if (!value || typeof value !== 'object') return ''\n for (const key of keys) if (value[key]) return value[key]\n for (const child of Object.values(value)) {\n const found = findValue(child, keys)\n if (found) return found\n }\n return ''\n}\n\nfunction validGeneration(value, label) {\n const n = Number(value ?? 1)\n if (!Number.isInteger(n) || n < 1) throw new Error(`${label} 的 Session generation 非法`)\n return n\n}\n"]}
|
package/dist/src/dws.js
CHANGED
|
@@ -31,10 +31,11 @@
|
|
|
31
31
|
// 一句话:**所有这些坑的形状都一样 —— 它不报错,它给你一个看起来很正常的答案。**
|
|
32
32
|
// 这一层做的就是:**把「看起来正常」和「真的正常」分开。**
|
|
33
33
|
import { spawnSync } from 'node:child_process';
|
|
34
|
+
import { err } from './tui.js';
|
|
34
35
|
export class Blocked extends Error {
|
|
35
36
|
}
|
|
36
37
|
export function die(msg) {
|
|
37
|
-
console.error('[FAIL] ' + msg);
|
|
38
|
+
console.error(err().theme.danger('[FAIL] ' + msg));
|
|
38
39
|
throw new Blocked(msg);
|
|
39
40
|
}
|
|
40
41
|
const sleep = (ms) => Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
|
package/dist/src/dws.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dws.js","sourceRoot":"","sources":["../../src/dws.ts"],"names":[],"mappings":"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","sourcesContent":["// dws 硬化包装 —— 这一层是「拦」(TypeScript source)。\n//\n// **上面的每个模块都必须走它,不许自己 spawn dws。**\n//\n// ════════════════════════════════════════════════════════════════\n// 【六条工程纪律】—— 每一条都是踩出来的,违反必出错,而且是【静默】出错\n// ════════════════════════════════════════════════════════════════\n//\n// 1. **拿不到就响亮地死,绝不当成\"是空的\"。**\n// 不同接口把数据藏在不同层级。读错层级 → 拿到 undefined → 当成\"表是空的\"\n// → **一整天的数据可以这么无声丢掉,而且不报错。**\n// 「查到 0 条」和「读错地方了」**必须分得开**。分不开就 die。\n//\n// 2. **分页会静默截断。** 默认页大小有上限,超了就悄悄少给你,\n// **而且不一定有信号告诉你被截断了。**\n// **拿不到分页信号 ≠ 没有下一页,那叫「没有信号」。**\n// **半张表算出来的结果是错的,不是\"差不多\"。**\n//\n// 3. **创建类:报错了也可能其实建成功了。**\n// **绝不看返回信封** —— 按名回查 + 内容回读定成败。\n// 推论:**创建类永不盲重试**(会造重复件),失败先按幂等键回查。\n//\n// 4. **写操作报错 ≠ 失败。** 回读实态才定成败。返回 success 也不算验收。\n//\n// 5. **字段读写不对称。** 写进去的形状 ≠ 读回来的形状。**写完必回读。**\n//\n// 6. **markdown 会被重排版。重排版不是漂移。**\n// 判漂移必须剥掉 markdown 符号只看文字流 —— 用行级 diff 会每次都误报,\n// **然后你就会开始无脑 --force,真漂移也一起覆盖掉。**\n//\n// 一句话:**所有这些坑的形状都一样 —— 它不报错,它给你一个看起来很正常的答案。**\n// 这一层做的就是:**把「看起来正常」和「真的正常」分开。**\n\nimport { spawnSync } from 'node:child_process'\n\nexport class Blocked extends Error {}\n\nexport function die(msg): never {\n console.error('[FAIL] ' + msg)\n throw new Blocked(msg)\n}\n\nconst sleep = (ms) => Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms)\n\n/** 跑一条 dws。限流退避;超时不当成\"空\";坏响应响亮地死。 */\nexport function run(args, { allowFail = false, timeout = 180_000, retries = 2 } = {}) {\n let last = ''\n for (let attempt = 0; attempt <= retries; attempt++) {\n const p = spawnSync('dws', [...args, '--format', 'json'],\n { encoding: 'utf8', timeout, maxBuffer: 64 * 1024 * 1024 })\n if (p.error) {\n if ((p.error as NodeJS.ErrnoException).code === 'ENOENT') {\n if (allowFail) return null\n die('dws 跑不起来 —— 先 export PATH=\"$HOME/.local/bin:$PATH\"')\n }\n last = String(p.error); sleep(2000 * (attempt + 1)); continue\n }\n const out = p.stdout || p.stderr || ''\n last = out.slice(0, 300)\n const i = out.indexOf('{')\n if (i < 0) { sleep(2000 * (attempt + 1)); continue }\n let d\n try { d = JSON.parse(out.slice(i, lastBrace(out) + 1)) }\n catch { sleep(2000 * (attempt + 1)); continue }\n const err = d.error || {}\n if (err && (err.code || err.message)) {\n const s = JSON.stringify(err).toLowerCase()\n if (s.includes('limit') || s.includes('frequen') || s.includes('flow')) {\n sleep(3000 * (attempt + 1)); continue // 限流 → 退避\n }\n if (allowFail) return null\n die(`dws 失败 ${args.slice(0, 4).join(' ')}\\n ${JSON.stringify(err).slice(0, 300)}`)\n }\n if (p.status !== 0) {\n if (allowFail) return null\n die(`dws 以退出码 ${p.status} 结束,但没有结构化 error: ${args.slice(0, 4).join(' ')}\\n ${last}`)\n }\n return d\n }\n if (allowFail) return null\n die(`dws 无响应(重试 ${retries} 次) ${args.slice(0, 4).join(' ')}\\n ${last}`)\n}\n\n/**\n * 启动 dev connect daemon。\n *\n * dws 当前即使收到 `--format json`,成功时仍可能只输出:\n * `connect daemon started (pid=..., log=...)`。这不是通用 JSON 契约,只有这个\n * 已知启动动作允许接受;健康与否仍必须由调用方随后执行 status 回读确认。\n */\nexport function startConnectDaemon(\n args: string[],\n { timeout = 60_000 } = {},\n): Record<string, any> {\n if (args[0] !== 'dev' || args[1] !== 'connect' || !args.includes('--daemon')) {\n die('startConnectDaemon 只允许执行 dev connect --daemon')\n }\n if (!args.includes('--unified-app-id') && !args.includes('--robot-client-id')) {\n die('dev connect daemon 必须固定 unified-app-id 或 robot-client-id')\n }\n if (args.includes('--robot-client-secret')) {\n die('dev connect daemon 禁止通过命令行传机器人 Secret')\n }\n\n const p = spawnSync('dws', [...args, '--format', 'json'], {\n encoding: 'utf8', timeout, maxBuffer: 64 * 1024 * 1024,\n })\n if (p.error) {\n if ((p.error as NodeJS.ErrnoException).code === 'ENOENT') {\n die('dws 跑不起来 —— 先 export PATH=\"$HOME/.local/bin:$PATH\"')\n }\n die(`dws dev connect daemon 启动失败: ${String(p.error)}`)\n }\n const out = p.stdout || p.stderr || ''\n const i = out.indexOf('{')\n if (i >= 0) {\n try {\n const data = JSON.parse(out.slice(i, lastBrace(out) + 1))\n const err = data?.error || {}\n if (err.code || err.message) {\n die(`dws 失败 dev connect daemon\\n ${JSON.stringify(err).slice(0, 300)}`)\n }\n if (p.status !== 0) {\n die(`dws dev connect daemon 以退出码 ${p.status} 结束`)\n }\n return data\n } catch (error) {\n if (error instanceof Blocked) throw error\n die('dws dev connect daemon 返回了无法解析的 JSON')\n }\n }\n if (p.status === 0 && /connect daemon started\\s*\\(pid\\s*=?\\s*\\d+\\)/i.test(out)) {\n const pid = Number(out.match(/pid\\s*=?\\s*(\\d+)/i)?.[1] || 0)\n return { data: { started: true, pid, responseMode: 'daemon-text' } }\n }\n const summary = out.trim().replace(/\\s+/g, ' ').slice(0, 300)\n die(`dws dev connect daemon 未返回已知成功响应${p.status === null ? '' : ` (exit=${p.status})`}: ${summary}`)\n}\n\n/** 停止已知 connector;命令回包只说明“已受理”,调用方仍须 status 回读。 */\nexport function stopConnectDaemon(\n args: string[],\n { timeout = 30_000 } = {},\n): Record<string, any> {\n if (args[0] !== 'dev' || args[1] !== 'connect' || args[2] !== 'stop') {\n die('stopConnectDaemon 只允许执行 dev connect stop')\n }\n if (!args.includes('--robot-client-id') && !args.includes('--unified-app-id')) {\n die('dev connect stop 必须固定 robot-client-id 或 unified-app-id')\n }\n if (args.includes('--robot-client-secret')) {\n die('dev connect stop 禁止通过命令行传机器人 Secret')\n }\n const p = spawnSync('dws', [...args, '--format', 'json'], {\n encoding: 'utf8', timeout, maxBuffer: 64 * 1024 * 1024,\n })\n if (p.error) die(`dws dev connect stop 执行失败: ${String(p.error)}`)\n const out = p.stdout || p.stderr || ''\n const i = out.indexOf('{')\n if (i >= 0) {\n try {\n const data = JSON.parse(out.slice(i, lastBrace(out) + 1))\n const err = data?.error || {}\n if (err.code || err.message) {\n die(`dws 失败 dev connect stop\\n ${JSON.stringify(err).slice(0, 300)}`)\n }\n if (p.status !== 0) die(`dws dev connect stop 以退出码 ${p.status} 结束`)\n return data\n } catch (error) {\n if (error instanceof Blocked) throw error\n die('dws dev connect stop 返回了无法解析的 JSON')\n }\n }\n if (p.status === 0 && /(connect daemon stopped|connector (?:is )?not running|no connector heartbeat)/i.test(out)) {\n return { data: { stopAccepted: true, responseMode: 'daemon-text' } }\n }\n const summary = out.trim().replace(/\\s+/g, ' ').slice(0, 300)\n die(`dws dev connect stop 未返回已知响应${p.status === null ? '' : ` (exit=${p.status})`}: ${summary}`)\n}\n\nfunction lastBrace(s) {\n // dws 有时在 JSON 后面粘一行 WARN / INFO —— 从最后一个 } 截断\n for (let i = s.length - 1; i >= 0; i--) if (s[i] === '}') return i\n return s.length - 1\n}\n\n// ──────────────── 三个层级,各读各的 ────────────────\nconst inner = (d) => (d && typeof d.data === 'object' && d.data !== null ? d.data : d)\n\n/** 列表类查询的记录。拿不到就 die —— 绝不当成\"表是空的\"。 */\nexport function records(d) {\n const x = inner(d)\n if (!('records' in x)) {\n die(`返回里没有 records(顶层键=${Object.keys(d)}) —— 接口形状可能变了。` +\n `**绝不把它当成【表是空的】。**`)\n }\n if (x.hasMore || x.partial) {\n die('分页未收敛 —— **部分结果不许当完整结果用。** 半张表算出来的是错的。')\n }\n return x.records || []\n}\n\n/** 文档正文。**层级和列表类查询不一样** —— 两种形状都兜住,拿不到就 die。 */\nexport function markdown(d) {\n const md = inner(d).markdown ?? d.markdown\n if (md === undefined || md === null) {\n die(`拿不到文档正文(顶层键=${Object.keys(d)}) —— **绝不当成【这篇是空的】。**`)\n }\n return md\n}\n\n/** 目录节点。 */\nexport const nodes = (d) => inner(d).nodes || []\n\n/**\n * 待办翻页 —— **这是唯一有分页信号的读法。**\n *\n * ⚠️ **不要把页开大**。超过这个大小,分页信号会消失,\n * 你拿到 undefined、当成 false,然后**静默漏掉剩下的**。\n * 心跳的收件靠它 —— 漏了循环件就是「静默收工且不自知」。\n */\nexport function todosPage(status = 'false', page = 1) {\n const d = run(['todo', 'task', 'list', '--status', status, '--size', '20', '--page', String(page)])\n const r = d.result || {}\n if (!('todoCards' in r)) {\n die(`待办返回里没有 todoCards(result 键=${Object.keys(r)}) —— 绝不当成【没有待办】。`)\n }\n return { cards: r.todoCards || [], more: Boolean(r.hasMore) }\n}\n\n/** 把待办【拉全】。只看第一页会漏掉循环件。 */\nexport function todosAll(status = 'false', maxPages = 20) {\n const out: any[] = []\n for (let page = 1; page <= maxPages; page++) {\n const { cards, more } = todosPage(status, page)\n out.push(...cards)\n if (!more) return out\n }\n die(`待办翻页超过 ${maxPages} 页还没收敛 —— 不许把部分结果当完整。`)\n}\n\n// ──────────────── 创建类:报错也可能成功 → 按名回查 ────────────────\n/** 目录列表可能把扩展名单列,比对时要拼回去。 */\nexport function findChild(folder, name) {\n for (const n of nodes(run(['doc', 'list', '--folder', folder, '--page-size', '50']))) {\n const nm = n.name || '', ext = n.extension || ''\n if (nm === name || (ext && `${nm}.${ext}` === name)) return n.nodeId\n }\n return null\n}\n\n/** 建文档。**不看返回信封** —— 一律按名回查定成败。 */\nexport function createDoc(folder, name, file) {\n const exist = findChild(folder, name)\n if (exist) return exist\n run(['doc', 'create', '--name', name, '--folder', folder,\n '--content-file', file, '--content-format', 'markdown', '--yes'],\n { allowFail: true }) // ← **报错也可能其实成功了**\n sleep(1200)\n const nid = findChild(folder, name)\n if (!nid) die(`建不出文档 ${name} —— 别把它当成【建成功了】。`)\n return nid\n}\n\nexport const updateDoc = (node, file) =>\n run(['doc', 'update', '--node', node, '--content-file', file,\n '--content-format', 'markdown', '--mode', 'overwrite', '--yes'])\n\n/** 候选发布只追加唯一 marker;写错误不重试,调用方必须全文回读。 */\nexport const appendDoc = (node: string, file: string, profile = '') =>\n run(['doc', 'update', '--node', node, '--content-file', file,\n '--content-format', 'markdown', '--mode', 'append', ...profileArgs(profile), '--yes'],\n { allowFail: true, retries: 0 })\n\nexport const readDoc = (node, profile = '') => markdown(run([\n 'doc', 'read', '--node', node, ...profileArgs(profile),\n]))\nexport const docInfo = (node, profile = '') => inner(run([\n 'doc', 'info', '--node', node, ...profileArgs(profile),\n]))\n\n// ──────────────── 漂移判定:重排版【不是】漂移 ────────────────\n/**\n * 剥掉 markdown 语法和转义装饰,只留【文字本身】。\n *\n * 钉钉会重排版你推上去的 markdown。**重排版不是漂移。**\n * 用行级 diff 判漂移 → 每次 sync 都误报 →\n * **然后你就会开始无脑 --force,真正的漂移也一起覆盖掉了。**\n */\nexport function words(s) {\n let t = String(s ?? '')\n for (let i = 0; i < 3; i++) t = unescapeHtml(t) // 可能被多次转义\n t = t.replace(/&#(\\d+);/g, (_, n) => String.fromCharCode(+n))\n t = t.replace(/\\[打开\\]\\([^)]*\\)/g, '') // 钉钉自动加的链接装饰\n return t.replace(/[`*_>#|\\\\~\\-\\s]+/g, '')\n}\n\nfunction unescapeHtml(s) {\n return s.replace(/&(amp|lt|gt|quot|#39);/g, (m, e) =>\n ({ amp: '&', lt: '<', gt: '>', quot: '\"', '#39': \"'\" })[e])\n}\n\nexport const same = (a, b) => words(a) === words(b)\n\n// ──────────────── 数字员工的消息原子动作(typed,目标不可自由拼装) ────────────────\nfunction profileArgs(profile) {\n return profile ? ['--profile', profile] : []\n}\n\nfunction assertReplyTarget(target) {\n const missing: string[] = []\n if (!target?.conversationId) missing.push('conversationId')\n if (!target?.messageId) missing.push('messageId')\n if (!target?.senderOpenDingTalkId) missing.push('senderOpenDingTalkId')\n if (missing.length) die(`固定回复目标缺少 ${missing.join(' / ')}`)\n}\n\n/** ack 没有服务端 UUID,因此绝不自动重试。 */\nexport function ackMessage(target, { emoji = '收到', profile = '' } = {}) {\n assertReplyTarget(target)\n return run([\n 'chat', 'message', 'add-emoji',\n '--conversation-id', target.conversationId,\n '--msg-id', target.messageId,\n '--emoji', emoji,\n ...profileArgs(profile),\n ], { retries: 0 })\n}\n\n/** reply/ask 共用同一传输;uuid 在调用前已持久化,重试也必须复用。 */\nexport function replyMessage(\n target,\n text,\n { uuid = '', profile = '' }: { uuid?: string; profile?: string } = {},\n) {\n assertReplyTarget(target)\n if (!String(text || '').trim()) die('回复正文不能为空')\n if (!uuid) die('回复前必须先持久化 uuid 幂等键')\n return run([\n 'chat', 'message', 'reply',\n '--conversation-id', target.conversationId,\n '--ref-msg-id', target.messageId,\n '--ref-sender', target.senderOpenDingTalkId,\n '--text', text,\n '--uuid', uuid,\n '--ai-tag=true',\n ...profileArgs(profile),\n '--yes',\n ], { retries: 1 })\n}\n\nexport function readMessageEmotions(messageId, profile = '') {\n return run([\n 'chat', 'message', 'list-emotion-replies', '--msg-ids', messageId,\n ...profileArgs(profile),\n ], { allowFail: true, retries: 0 })\n}\n\nexport function querySendStatus(openTaskId, profile = '') {\n return run([\n 'chat', 'message', 'query-send-status', '--open-task-id', openTaskId,\n ...profileArgs(profile),\n ], { allowFail: true, retries: 1 })\n}\n\nexport function readMessagesByIds(messageId, profile = '') {\n return run([\n 'chat', 'message', 'list-by-ids', '--msg-ids', messageId,\n ...profileArgs(profile),\n ], { allowFail: true, retries: 1 })\n}\n\n/** 外发前核对 profile 对应的真实执行身份。 */\nexport function getSelf(profile = '') {\n return run([\n 'contact', 'user', 'get-self', ...profileArgs(profile),\n ], { retries: 1 })\n}\n\n// ──────────────── Operational Memory:AI 表格宽表原子能力 ────────────────\nexport function queryAiTableRecords({\n baseId, tableId, filters = null, recordIds = [], profile = '',\n}: {\n baseId: string\n tableId: string\n filters?: Record<string, unknown> | null\n recordIds?: string[]\n profile?: string\n}) {\n const args = [\n 'aitable', 'record', 'query', '--base-id', baseId, '--table-id', tableId,\n ]\n if (recordIds.length) args.push('--record-ids', recordIds.join(','))\n else if (filters) args.push('--filters', JSON.stringify(filters), '--limit', '100')\n args.push(...profileArgs(profile))\n return records(run(args, { retries: 1 }))\n}\n\n/** AI 表格 Base 目录回读;调用方仍需继续核对固定 tableId。 */\nexport function getAiTableBase(baseId: string, profile = ''): Record<string, any> {\n return inner(run([\n 'aitable', 'base', 'get', '--base-id', baseId, ...profileArgs(profile),\n ], { retries: 1 }))\n}\n\n/** AI 表格表结构回读;写入前用它确认固定 tableId 与 fieldId。 */\nexport function getAiTableTables(\n baseId: string,\n tableIds: string[],\n profile = '',\n): Record<string, any> {\n if (!tableIds.length) die('AI 表格结构回读必须固定至少一个 tableId')\n return inner(run([\n 'aitable', 'table', 'get', '--base-id', baseId,\n '--table-ids', tableIds.join(','), ...profileArgs(profile),\n ], { retries: 1 }))\n}\n\n/** 写错误可能实际成功,因此不重试、不直接下结论;调用方必须按 key/recordId 回读。 */\nexport function createAiTableRecord(\n baseId: string,\n tableId: string,\n cells: Record<string, unknown>,\n profile = '',\n): { accepted: boolean; recordIds: string[]; data: unknown } {\n const data = run([\n 'aitable', 'record', 'create', '--base-id', baseId, '--table-id', tableId,\n '--records', JSON.stringify([{ cells }]), ...profileArgs(profile), '--yes',\n ], { allowFail: true, retries: 0 })\n const ids = data ? inner(data).newRecordIds : []\n return {\n accepted: Boolean(data),\n recordIds: Array.isArray(ids) ? ids.map(String).filter(Boolean) : [],\n data,\n }\n}\n\n/** 写错误可能实际成功,因此不重试;调用方必须按 recordId 回读。 */\nexport function updateAiTableRecord(\n baseId: string,\n tableId: string,\n recordId: string,\n cells: Record<string, unknown>,\n profile = '',\n): { accepted: boolean; data: unknown } {\n const data = run([\n 'aitable', 'record', 'update', '--base-id', baseId, '--table-id', tableId,\n '--records', JSON.stringify([{ recordId, cells }]), ...profileArgs(profile), '--yes',\n ], { allowFail: true, retries: 0 })\n return { accepted: Boolean(data), data }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"dws.js","sourceRoot":"","sources":["../../src/dws.ts"],"names":[],"mappings":"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","sourcesContent":["// dws 硬化包装 —— 这一层是「拦」(TypeScript source)。\n//\n// **上面的每个模块都必须走它,不许自己 spawn dws。**\n//\n// ════════════════════════════════════════════════════════════════\n// 【六条工程纪律】—— 每一条都是踩出来的,违反必出错,而且是【静默】出错\n// ════════════════════════════════════════════════════════════════\n//\n// 1. **拿不到就响亮地死,绝不当成\"是空的\"。**\n// 不同接口把数据藏在不同层级。读错层级 → 拿到 undefined → 当成\"表是空的\"\n// → **一整天的数据可以这么无声丢掉,而且不报错。**\n// 「查到 0 条」和「读错地方了」**必须分得开**。分不开就 die。\n//\n// 2. **分页会静默截断。** 默认页大小有上限,超了就悄悄少给你,\n// **而且不一定有信号告诉你被截断了。**\n// **拿不到分页信号 ≠ 没有下一页,那叫「没有信号」。**\n// **半张表算出来的结果是错的,不是\"差不多\"。**\n//\n// 3. **创建类:报错了也可能其实建成功了。**\n// **绝不看返回信封** —— 按名回查 + 内容回读定成败。\n// 推论:**创建类永不盲重试**(会造重复件),失败先按幂等键回查。\n//\n// 4. **写操作报错 ≠ 失败。** 回读实态才定成败。返回 success 也不算验收。\n//\n// 5. **字段读写不对称。** 写进去的形状 ≠ 读回来的形状。**写完必回读。**\n//\n// 6. **markdown 会被重排版。重排版不是漂移。**\n// 判漂移必须剥掉 markdown 符号只看文字流 —— 用行级 diff 会每次都误报,\n// **然后你就会开始无脑 --force,真漂移也一起覆盖掉。**\n//\n// 一句话:**所有这些坑的形状都一样 —— 它不报错,它给你一个看起来很正常的答案。**\n// 这一层做的就是:**把「看起来正常」和「真的正常」分开。**\n\nimport { spawnSync } from 'node:child_process'\nimport { err } from './tui.js'\n\nexport class Blocked extends Error {}\n\nexport function die(msg): never {\n console.error(err().theme.danger('[FAIL] ' + msg))\n throw new Blocked(msg)\n}\n\nconst sleep = (ms) => Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms)\n\n/** 跑一条 dws。限流退避;超时不当成\"空\";坏响应响亮地死。 */\nexport function run(args, { allowFail = false, timeout = 180_000, retries = 2 } = {}) {\n let last = ''\n for (let attempt = 0; attempt <= retries; attempt++) {\n const p = spawnSync('dws', [...args, '--format', 'json'],\n { encoding: 'utf8', timeout, maxBuffer: 64 * 1024 * 1024 })\n if (p.error) {\n if ((p.error as NodeJS.ErrnoException).code === 'ENOENT') {\n if (allowFail) return null\n die('dws 跑不起来 —— 先 export PATH=\"$HOME/.local/bin:$PATH\"')\n }\n last = String(p.error); sleep(2000 * (attempt + 1)); continue\n }\n const out = p.stdout || p.stderr || ''\n last = out.slice(0, 300)\n const i = out.indexOf('{')\n if (i < 0) { sleep(2000 * (attempt + 1)); continue }\n let d\n try { d = JSON.parse(out.slice(i, lastBrace(out) + 1)) }\n catch { sleep(2000 * (attempt + 1)); continue }\n const err = d.error || {}\n if (err && (err.code || err.message)) {\n const s = JSON.stringify(err).toLowerCase()\n if (s.includes('limit') || s.includes('frequen') || s.includes('flow')) {\n sleep(3000 * (attempt + 1)); continue // 限流 → 退避\n }\n if (allowFail) return null\n die(`dws 失败 ${args.slice(0, 4).join(' ')}\\n ${JSON.stringify(err).slice(0, 300)}`)\n }\n if (p.status !== 0) {\n if (allowFail) return null\n die(`dws 以退出码 ${p.status} 结束,但没有结构化 error: ${args.slice(0, 4).join(' ')}\\n ${last}`)\n }\n return d\n }\n if (allowFail) return null\n die(`dws 无响应(重试 ${retries} 次) ${args.slice(0, 4).join(' ')}\\n ${last}`)\n}\n\n/**\n * 启动 dev connect daemon。\n *\n * dws 当前即使收到 `--format json`,成功时仍可能只输出:\n * `connect daemon started (pid=..., log=...)`。这不是通用 JSON 契约,只有这个\n * 已知启动动作允许接受;健康与否仍必须由调用方随后执行 status 回读确认。\n */\nexport function startConnectDaemon(\n args: string[],\n { timeout = 60_000 } = {},\n): Record<string, any> {\n if (args[0] !== 'dev' || args[1] !== 'connect' || !args.includes('--daemon')) {\n die('startConnectDaemon 只允许执行 dev connect --daemon')\n }\n if (!args.includes('--unified-app-id') && !args.includes('--robot-client-id')) {\n die('dev connect daemon 必须固定 unified-app-id 或 robot-client-id')\n }\n if (args.includes('--robot-client-secret')) {\n die('dev connect daemon 禁止通过命令行传机器人 Secret')\n }\n\n const p = spawnSync('dws', [...args, '--format', 'json'], {\n encoding: 'utf8', timeout, maxBuffer: 64 * 1024 * 1024,\n })\n if (p.error) {\n if ((p.error as NodeJS.ErrnoException).code === 'ENOENT') {\n die('dws 跑不起来 —— 先 export PATH=\"$HOME/.local/bin:$PATH\"')\n }\n die(`dws dev connect daemon 启动失败: ${String(p.error)}`)\n }\n const out = p.stdout || p.stderr || ''\n const i = out.indexOf('{')\n if (i >= 0) {\n try {\n const data = JSON.parse(out.slice(i, lastBrace(out) + 1))\n const err = data?.error || {}\n if (err.code || err.message) {\n die(`dws 失败 dev connect daemon\\n ${JSON.stringify(err).slice(0, 300)}`)\n }\n if (p.status !== 0) {\n die(`dws dev connect daemon 以退出码 ${p.status} 结束`)\n }\n return data\n } catch (error) {\n if (error instanceof Blocked) throw error\n die('dws dev connect daemon 返回了无法解析的 JSON')\n }\n }\n if (p.status === 0 && /connect daemon started\\s*\\(pid\\s*=?\\s*\\d+\\)/i.test(out)) {\n const pid = Number(out.match(/pid\\s*=?\\s*(\\d+)/i)?.[1] || 0)\n return { data: { started: true, pid, responseMode: 'daemon-text' } }\n }\n const summary = out.trim().replace(/\\s+/g, ' ').slice(0, 300)\n die(`dws dev connect daemon 未返回已知成功响应${p.status === null ? '' : ` (exit=${p.status})`}: ${summary}`)\n}\n\n/** 停止已知 connector;命令回包只说明“已受理”,调用方仍须 status 回读。 */\nexport function stopConnectDaemon(\n args: string[],\n { timeout = 30_000 } = {},\n): Record<string, any> {\n if (args[0] !== 'dev' || args[1] !== 'connect' || args[2] !== 'stop') {\n die('stopConnectDaemon 只允许执行 dev connect stop')\n }\n if (!args.includes('--robot-client-id') && !args.includes('--unified-app-id')) {\n die('dev connect stop 必须固定 robot-client-id 或 unified-app-id')\n }\n if (args.includes('--robot-client-secret')) {\n die('dev connect stop 禁止通过命令行传机器人 Secret')\n }\n const p = spawnSync('dws', [...args, '--format', 'json'], {\n encoding: 'utf8', timeout, maxBuffer: 64 * 1024 * 1024,\n })\n if (p.error) die(`dws dev connect stop 执行失败: ${String(p.error)}`)\n const out = p.stdout || p.stderr || ''\n const i = out.indexOf('{')\n if (i >= 0) {\n try {\n const data = JSON.parse(out.slice(i, lastBrace(out) + 1))\n const err = data?.error || {}\n if (err.code || err.message) {\n die(`dws 失败 dev connect stop\\n ${JSON.stringify(err).slice(0, 300)}`)\n }\n if (p.status !== 0) die(`dws dev connect stop 以退出码 ${p.status} 结束`)\n return data\n } catch (error) {\n if (error instanceof Blocked) throw error\n die('dws dev connect stop 返回了无法解析的 JSON')\n }\n }\n if (p.status === 0 && /(connect daemon stopped|connector (?:is )?not running|no connector heartbeat)/i.test(out)) {\n return { data: { stopAccepted: true, responseMode: 'daemon-text' } }\n }\n const summary = out.trim().replace(/\\s+/g, ' ').slice(0, 300)\n die(`dws dev connect stop 未返回已知响应${p.status === null ? '' : ` (exit=${p.status})`}: ${summary}`)\n}\n\nfunction lastBrace(s) {\n // dws 有时在 JSON 后面粘一行 WARN / INFO —— 从最后一个 } 截断\n for (let i = s.length - 1; i >= 0; i--) if (s[i] === '}') return i\n return s.length - 1\n}\n\n// ──────────────── 三个层级,各读各的 ────────────────\nconst inner = (d) => (d && typeof d.data === 'object' && d.data !== null ? d.data : d)\n\n/** 列表类查询的记录。拿不到就 die —— 绝不当成\"表是空的\"。 */\nexport function records(d) {\n const x = inner(d)\n if (!('records' in x)) {\n die(`返回里没有 records(顶层键=${Object.keys(d)}) —— 接口形状可能变了。` +\n `**绝不把它当成【表是空的】。**`)\n }\n if (x.hasMore || x.partial) {\n die('分页未收敛 —— **部分结果不许当完整结果用。** 半张表算出来的是错的。')\n }\n return x.records || []\n}\n\n/** 文档正文。**层级和列表类查询不一样** —— 两种形状都兜住,拿不到就 die。 */\nexport function markdown(d) {\n const md = inner(d).markdown ?? d.markdown\n if (md === undefined || md === null) {\n die(`拿不到文档正文(顶层键=${Object.keys(d)}) —— **绝不当成【这篇是空的】。**`)\n }\n return md\n}\n\n/** 目录节点。 */\nexport const nodes = (d) => inner(d).nodes || []\n\n/**\n * 待办翻页 —— **这是唯一有分页信号的读法。**\n *\n * ⚠️ **不要把页开大**。超过这个大小,分页信号会消失,\n * 你拿到 undefined、当成 false,然后**静默漏掉剩下的**。\n * 心跳的收件靠它 —— 漏了循环件就是「静默收工且不自知」。\n */\nexport function todosPage(status = 'false', page = 1) {\n const d = run(['todo', 'task', 'list', '--status', status, '--size', '20', '--page', String(page)])\n const r = d.result || {}\n if (!('todoCards' in r)) {\n die(`待办返回里没有 todoCards(result 键=${Object.keys(r)}) —— 绝不当成【没有待办】。`)\n }\n return { cards: r.todoCards || [], more: Boolean(r.hasMore) }\n}\n\n/** 把待办【拉全】。只看第一页会漏掉循环件。 */\nexport function todosAll(status = 'false', maxPages = 20) {\n const out: any[] = []\n for (let page = 1; page <= maxPages; page++) {\n const { cards, more } = todosPage(status, page)\n out.push(...cards)\n if (!more) return out\n }\n die(`待办翻页超过 ${maxPages} 页还没收敛 —— 不许把部分结果当完整。`)\n}\n\n// ──────────────── 创建类:报错也可能成功 → 按名回查 ────────────────\n/** 目录列表可能把扩展名单列,比对时要拼回去。 */\nexport function findChild(folder, name) {\n for (const n of nodes(run(['doc', 'list', '--folder', folder, '--page-size', '50']))) {\n const nm = n.name || '', ext = n.extension || ''\n if (nm === name || (ext && `${nm}.${ext}` === name)) return n.nodeId\n }\n return null\n}\n\n/** 建文档。**不看返回信封** —— 一律按名回查定成败。 */\nexport function createDoc(folder, name, file) {\n const exist = findChild(folder, name)\n if (exist) return exist\n run(['doc', 'create', '--name', name, '--folder', folder,\n '--content-file', file, '--content-format', 'markdown', '--yes'],\n { allowFail: true }) // ← **报错也可能其实成功了**\n sleep(1200)\n const nid = findChild(folder, name)\n if (!nid) die(`建不出文档 ${name} —— 别把它当成【建成功了】。`)\n return nid\n}\n\nexport const updateDoc = (node, file) =>\n run(['doc', 'update', '--node', node, '--content-file', file,\n '--content-format', 'markdown', '--mode', 'overwrite', '--yes'])\n\n/** 候选发布只追加唯一 marker;写错误不重试,调用方必须全文回读。 */\nexport const appendDoc = (node: string, file: string, profile = '') =>\n run(['doc', 'update', '--node', node, '--content-file', file,\n '--content-format', 'markdown', '--mode', 'append', ...profileArgs(profile), '--yes'],\n { allowFail: true, retries: 0 })\n\nexport const readDoc = (node, profile = '') => markdown(run([\n 'doc', 'read', '--node', node, ...profileArgs(profile),\n]))\nexport const docInfo = (node, profile = '') => inner(run([\n 'doc', 'info', '--node', node, ...profileArgs(profile),\n]))\n\n// ──────────────── 漂移判定:重排版【不是】漂移 ────────────────\n/**\n * 剥掉 markdown 语法和转义装饰,只留【文字本身】。\n *\n * 钉钉会重排版你推上去的 markdown。**重排版不是漂移。**\n * 用行级 diff 判漂移 → 每次 sync 都误报 →\n * **然后你就会开始无脑 --force,真正的漂移也一起覆盖掉了。**\n */\nexport function words(s) {\n let t = String(s ?? '')\n for (let i = 0; i < 3; i++) t = unescapeHtml(t) // 可能被多次转义\n t = t.replace(/&#(\\d+);/g, (_, n) => String.fromCharCode(+n))\n t = t.replace(/\\[打开\\]\\([^)]*\\)/g, '') // 钉钉自动加的链接装饰\n return t.replace(/[`*_>#|\\\\~\\-\\s]+/g, '')\n}\n\nfunction unescapeHtml(s) {\n return s.replace(/&(amp|lt|gt|quot|#39);/g, (m, e) =>\n ({ amp: '&', lt: '<', gt: '>', quot: '\"', '#39': \"'\" })[e])\n}\n\nexport const same = (a, b) => words(a) === words(b)\n\n// ──────────────── 数字员工的消息原子动作(typed,目标不可自由拼装) ────────────────\nfunction profileArgs(profile) {\n return profile ? ['--profile', profile] : []\n}\n\nfunction assertReplyTarget(target) {\n const missing: string[] = []\n if (!target?.conversationId) missing.push('conversationId')\n if (!target?.messageId) missing.push('messageId')\n if (!target?.senderOpenDingTalkId) missing.push('senderOpenDingTalkId')\n if (missing.length) die(`固定回复目标缺少 ${missing.join(' / ')}`)\n}\n\n/** ack 没有服务端 UUID,因此绝不自动重试。 */\nexport function ackMessage(target, { emoji = '收到', profile = '' } = {}) {\n assertReplyTarget(target)\n return run([\n 'chat', 'message', 'add-emoji',\n '--conversation-id', target.conversationId,\n '--msg-id', target.messageId,\n '--emoji', emoji,\n ...profileArgs(profile),\n ], { retries: 0 })\n}\n\n/** reply/ask 共用同一传输;uuid 在调用前已持久化,重试也必须复用。 */\nexport function replyMessage(\n target,\n text,\n { uuid = '', profile = '' }: { uuid?: string; profile?: string } = {},\n) {\n assertReplyTarget(target)\n if (!String(text || '').trim()) die('回复正文不能为空')\n if (!uuid) die('回复前必须先持久化 uuid 幂等键')\n return run([\n 'chat', 'message', 'reply',\n '--conversation-id', target.conversationId,\n '--ref-msg-id', target.messageId,\n '--ref-sender', target.senderOpenDingTalkId,\n '--text', text,\n '--uuid', uuid,\n '--ai-tag=true',\n ...profileArgs(profile),\n '--yes',\n ], { retries: 1 })\n}\n\nexport function readMessageEmotions(messageId, profile = '') {\n return run([\n 'chat', 'message', 'list-emotion-replies', '--msg-ids', messageId,\n ...profileArgs(profile),\n ], { allowFail: true, retries: 0 })\n}\n\nexport function querySendStatus(openTaskId, profile = '') {\n return run([\n 'chat', 'message', 'query-send-status', '--open-task-id', openTaskId,\n ...profileArgs(profile),\n ], { allowFail: true, retries: 1 })\n}\n\nexport function readMessagesByIds(messageId, profile = '') {\n return run([\n 'chat', 'message', 'list-by-ids', '--msg-ids', messageId,\n ...profileArgs(profile),\n ], { allowFail: true, retries: 1 })\n}\n\n/** 外发前核对 profile 对应的真实执行身份。 */\nexport function getSelf(profile = '') {\n return run([\n 'contact', 'user', 'get-self', ...profileArgs(profile),\n ], { retries: 1 })\n}\n\n// ──────────────── Operational Memory:AI 表格宽表原子能力 ────────────────\nexport function queryAiTableRecords({\n baseId, tableId, filters = null, recordIds = [], profile = '',\n}: {\n baseId: string\n tableId: string\n filters?: Record<string, unknown> | null\n recordIds?: string[]\n profile?: string\n}) {\n const args = [\n 'aitable', 'record', 'query', '--base-id', baseId, '--table-id', tableId,\n ]\n if (recordIds.length) args.push('--record-ids', recordIds.join(','))\n else if (filters) args.push('--filters', JSON.stringify(filters), '--limit', '100')\n args.push(...profileArgs(profile))\n return records(run(args, { retries: 1 }))\n}\n\n/** AI 表格 Base 目录回读;调用方仍需继续核对固定 tableId。 */\nexport function getAiTableBase(baseId: string, profile = ''): Record<string, any> {\n return inner(run([\n 'aitable', 'base', 'get', '--base-id', baseId, ...profileArgs(profile),\n ], { retries: 1 }))\n}\n\n/** AI 表格表结构回读;写入前用它确认固定 tableId 与 fieldId。 */\nexport function getAiTableTables(\n baseId: string,\n tableIds: string[],\n profile = '',\n): Record<string, any> {\n if (!tableIds.length) die('AI 表格结构回读必须固定至少一个 tableId')\n return inner(run([\n 'aitable', 'table', 'get', '--base-id', baseId,\n '--table-ids', tableIds.join(','), ...profileArgs(profile),\n ], { retries: 1 }))\n}\n\n/** 写错误可能实际成功,因此不重试、不直接下结论;调用方必须按 key/recordId 回读。 */\nexport function createAiTableRecord(\n baseId: string,\n tableId: string,\n cells: Record<string, unknown>,\n profile = '',\n): { accepted: boolean; recordIds: string[]; data: unknown } {\n const data = run([\n 'aitable', 'record', 'create', '--base-id', baseId, '--table-id', tableId,\n '--records', JSON.stringify([{ cells }]), ...profileArgs(profile), '--yes',\n ], { allowFail: true, retries: 0 })\n const ids = data ? inner(data).newRecordIds : []\n return {\n accepted: Boolean(data),\n recordIds: Array.isArray(ids) ? ids.map(String).filter(Boolean) : [],\n data,\n }\n}\n\n/** 写错误可能实际成功,因此不重试;调用方必须按 recordId 回读。 */\nexport function updateAiTableRecord(\n baseId: string,\n tableId: string,\n recordId: string,\n cells: Record<string, unknown>,\n profile = '',\n): { accepted: boolean; data: unknown } {\n const data = run([\n 'aitable', 'record', 'update', '--base-id', baseId, '--table-id', tableId,\n '--records', JSON.stringify([{ recordId, cells }]), ...profileArgs(profile), '--yes',\n ], { allowFail: true, retries: 0 })\n return { accepted: Boolean(data), data }\n}\n"]}
|
package/dist/src/init.js
CHANGED
|
@@ -5,6 +5,7 @@ import { join } from 'node:path';
|
|
|
5
5
|
import * as cfg from './config.js';
|
|
6
6
|
import { resolvePackageRoot } from './package-root.js';
|
|
7
7
|
import { ensureWorkspace, workspacePath, } from './workspace.js';
|
|
8
|
+
import { out } from './tui.js';
|
|
8
9
|
const PKG = resolvePackageRoot(import.meta.url);
|
|
9
10
|
export function init(root, options = {}) {
|
|
10
11
|
const wasInitialized = existsSync(workspacePath(root));
|
|
@@ -21,7 +22,7 @@ export function init(root, options = {}) {
|
|
|
21
22
|
mkdirSync(join(root, dir), { recursive: true });
|
|
22
23
|
if (!existingConfig)
|
|
23
24
|
cfg.save(root, cfg.DEFAULT);
|
|
24
|
-
console.log(`${wasInitialized ? '✅ Workspace 已存在;检查完成,未重新初始化' : '✅ 已初始化最小 Agent Workspace'}
|
|
25
|
+
console.log(`${out().theme.success(wasInitialized ? '✅ Workspace 已存在;检查完成,未重新初始化' : '✅ 已初始化最小 Agent Workspace')}
|
|
25
26
|
|
|
26
27
|
Context: ${workspace.contextId}(未显式指定时由目录名稳定派生)
|
|
27
28
|
配置: .dingtalk-agent/workspace.json
|
package/dist/src/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/init.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,gEAAgE;AAEhE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,KAAK,GAAG,MAAM,aAAa,CAAA;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EACL,eAAe,EAAE,aAAa,GAC/B,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/init.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,gEAAgE;AAEhE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,KAAK,GAAG,MAAM,aAAa,CAAA;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EACL,eAAe,EAAE,aAAa,GAC/B,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAE9B,MAAM,GAAG,GAAG,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAE/C,MAAM,UAAU,IAAI,CAAC,IAAY,EAAE,UAAgC,EAAE;IACnE,MAAM,cAAc,GAAG,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAA;IACtD,MAAM,cAAc,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACrC,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAEhD,kDAAkD;IAClD,8CAA8C;IAC9C,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAA;IACzE,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAA;IACnE,KAAK,MAAM,GAAG,IAAI;QAChB,0BAA0B,EAAE,6BAA6B;QACzD,uBAAuB,EAAE,uBAAuB;KACjD;QAAE,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAClD,IAAI,CAAC,cAAc;QAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IAEhD,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,0BAA0B,CAAC;;aAEpG,SAAS,CAAC,SAAS;;aAEnB,SAAS,CAAC,MAAM,CAAC,MAAM,MAAM,SAAS,CAAC,MAAM,CAAC,SAAS;aACvD,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;;;;mBAIrB,CAAC,CAAA;IAClB,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,EAAU;IAC3C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAM;IAC7B,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAA;AAC1E,CAAC","sourcesContent":["// init 只为“需要持久 Workspace / Prepared Run runtime”的目录建立最小骨架。\n// 普通 Claude Code/Codex Session 只需全局 Skill + bootstrap,不需要 init。\n\nimport { cpSync, existsSync, mkdirSync } from 'node:fs'\nimport { join } from 'node:path'\nimport * as cfg from './config.js'\nimport { resolvePackageRoot } from './package-root.js'\nimport {\n ensureWorkspace, workspacePath, type WorkspaceInitOptions,\n} from './workspace.js'\nimport { out } from './tui.js'\n\nconst PKG = resolvePackageRoot(import.meta.url)\n\nexport function init(root: string, options: WorkspaceInitOptions = {}) {\n const wasInitialized = existsSync(workspacePath(root))\n const existingConfig = cfg.load(root)\n const workspace = ensureWorkspace(root, options)\n\n // Runtime 的机器策略仍需本地存在;只补缺失项,不复制全局 Skill、Ontology,\n // 也不修改项目的 AGENTS.md / CLAUDE.md / .gitignore。\n copyMissing(join(PKG, 'templates', 'behaviors'), join(root, 'behaviors'))\n copyMissing(join(PKG, 'templates', 'fields'), join(root, 'fields'))\n for (const dir of [\n '.dingtalk-agent/sessions', '.dingtalk-agent/event-index',\n '.dingtalk-agent/waits', '.dingtalk-agent/cache',\n ]) mkdirSync(join(root, dir), { recursive: true })\n if (!existingConfig) cfg.save(root, cfg.DEFAULT)\n\n console.log(`${out().theme.success(wasInitialized ? '✅ Workspace 已存在;检查完成,未重新初始化' : '✅ 已初始化最小 Agent Workspace')}\n\n Context: ${workspace.contextId}(未显式指定时由目录名稳定派生)\n 配置: .dingtalk-agent/workspace.json\n Storage: ${workspace.mounts.memory} / ${workspace.mounts.knowledge}\n Skill: ${workspace.skills.join(', ')}(按名称解析;不复制进当前项目)\n\n 会话水合: dingtalk-agent bootstrap\n 事件运行时: dingtalk-agent prepare --event-file <event.json>\n 环境检查: dta doctor`)\n return workspace\n}\n\nfunction copyMissing(from: string, to: string): void {\n if (!existsSync(from)) return\n cpSync(from, to, { recursive: true, force: false, errorOnExist: false })\n}\n"]}
|