dingtalk-minutes

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

钉钉 AI 听记 Skill

DingTalk AI Minutes Skill

<!-- DWS_RUNTIME_CONTRACT_START -->
<!-- DWS_RUNTIME_CONTRACT_START -->

最小 DWS 执行契约

Minimal DWS Execution Contract

  • 只用
    dws
    ;结构化读取加
    --format json
    ,按真实返回判断。
  • 已知命令直调;参数/约束/安全不明查 leaf 窄 Schema。Schema 不可用才读已知 leaf Help 一次;
    unknown flag
    用同 leaf Help 修正一次。
    unknown command
    不查 Help:优先错误中的明确 suggestion,其次已加载 Skill/reference 中的明确兼容入口;均无则报漂移并停,禁全 Catalog。低频 reference 不默认 Help,禁 root/parent/product Help。发现后必须执行或说明阻塞。
  • 不猜命令/flag/字段/ID/账号/业务事实;ID 来自真实返回。目标零命中/多候选/类型不明先消歧;仅可选时间/展示范围用契约默认,缺必需信息即停。
  • 解析/读/写同一 profile,ID 不跨组织。多账号只用唯一
    isOrgCurrent=true
    ;否则用户指定,禁止选择第一项、最近登录或最近使用账号。
  • 不输出/记录 token、refresh token、appSecret、webhook token;已注入认证时不索要。
  • 写须符合明确意图;确认以最终 Runtime gate/Schema 为准,确认后才加
    --yes
    。
  • 写后验证结果,不凭退出码宣称成功。退出须最终答复,区分完成、部分、阻塞、待确认、失败;保留已有数据及
    complete/hasMore/stopReason/failures
    。
  • 时间戳按会话时区展示,必要时保留原值。
  • 认证/权限/profile/confirmation/未知错误只读
    dingtalk-shared
    对应 reference,禁连续猜替代命令。
<!-- DWS_RUNTIME_CONTRACT_END --> <!-- VISIBLE_SHORTCUTS_START -->
  • Only use
    dws
    ; for structured reads add
    --format json
    and judge based on actual returns.
  • Directly call known commands; if parameters/constraints/safety are unclear, consult the leaf narrow Schema. Only if Schema is unavailable, read the known leaf Help once; for
    unknown flag
    , correct once using the same leaf Help. For
    unknown command
    , do not check Help: prioritize explicit suggestions in the error, then clear entry points in loaded Skill/reference; if neither exists, report drift and stop; full Catalog is forbidden. Do not default to Help for infrequently used references; prohibit root/parent/product Help. Once discovered, must execute or explain the blockage.
  • Do not guess commands/flags/fields/IDs/accounts/business facts; IDs come from real returns. For zero hits/multiple candidates/unclear types, disambiguate first; only optional time/display scope use contract defaults; stop if required information is missing.
  • Parse/read/write the same profile, do not cross organizations with IDs. For multiple accounts, only use the unique
    isOrgCurrent=true
    ; otherwise user specifies; it is forbidden to select the first item, most recent login, or most recently used account.
  • Do not output/record token, refresh token, appSecret, webhook token; do not ask for injected authentication.
  • Writes must conform to explicit intent; confirmation follows the final Runtime gate/Schema; add
    --yes
    only after confirmation.
  • After writes, verify results; do not claim success based on exit code. Final reply must distinguish completed, partial, blocked, pending confirmation, failed; preserve existing data and
    complete/hasMore/stopReason/failures
    .
  • Timestamps displayed in session timezone; preserve original if necessary.
  • For authentication/permission/profile/confirmation/unknown errors, only read the corresponding reference in
    dingtalk-shared
    ; do not guess alternative commands consecutively.
<!-- DWS_RUNTIME_CONTRACT_END --> <!-- VISIBLE_SHORTCUTS_START -->

Shortcut 发现(按需)

Shortcut Discovery (on demand)

minutes
当前有 29 条公开 shortcut,完整清单保留在 Runtime Catalog 与 Schema,不在高频产品根 Skill 中重复展开。已知意图按下方路由/reference 直调;参数/约束/安全不明时读一次 leaf 窄 Schema。仅需且已发布
result
时查 outcomes/pagination,字段级再查
data_schema
;缺失不以 Help/样例推断。Schema 不可用才读一次已知 leaf Help;
unknown flag
用同 leaf Help 修正一次。
unknown command
禁 Help:错误 suggestion → 已加载 Skill/reference 明确入口;均无则报漂移。禁全 Catalog/root/parent/product Help;低频 reference 不默认 Help。
仅当现有路由和 reference 都无法定位低频能力时,才执行
dws shortcut list --service minutes --format json
做最后回退;不要为已知高频意图加载完整 Shortcut Catalog 或产品级 Schema。
<!-- VISIBLE_SHORTCUTS_END -->
minutes
currently has 29 public shortcuts; the full list is kept in the Runtime Catalog and Schema, not duplicated in the high-frequency product root Skill. Known intents go direct based on the routing/reference below; if parameters/constraints/safety are unclear, read the leaf narrow Schema once. Only if
result
is needed and already published, check outcomes/pagination; field-level, consult
data_schema
; do not infer from Help/samples if missing. Only if Schema is unavailable, read the known leaf Help once; for
unknown flag
, correct once using the same leaf Help. For
unknown command
, do not check Help: error suggestion → clear entry in loaded Skill/reference; if neither, report drift. Full Catalog/root/parent/product Help is forbidden; do not default Help for low-frequency references.
Only when existing routes and references cannot locate low-frequency capabilities, execute
dws shortcut list --service minutes --format json
as a final fallback; do not load the full Shortcut Catalog or product-level Schema for known high-frequency intents.
<!-- VISIBLE_SHORTCUTS_END -->

Golden Route

Golden Route

以下是当前 Minutes Case 支持的核心路径,用于减少 Agent 选路分叉;它不等同于生产使用频率统计。已有 taskUuid 必须原样传入,禁止解码或重新编码;完整听记 URL 先提取 taskUuid,再原样使用。只有标题或时间线索时先搜索,零命中停止,多候选或候选差异较大时让用户消歧,不默认取第一条。
用户意图唯一推荐入口关键边界
按标题或时间找听记
dws minutes +search --scope all --query "<关键词>" --page-all
scope
可选
mine/shared/all
;至少提供 query/start/end 之一。
all --page-all
分别追完 mine/shared 后去重,不把单个 noLimit 端点当完整全集
浏览我创建、共享给我或全部可访问听记
+list-mine
/
+list-shared
/
+list-all
默认是可续拉预览;要声称完整必须加
--page-all
并检查
complete=true
。用户只说“我的听记”不等于明确
mine
,范围不清时用
all
按真实标签找听记
dws minutes tag list --format json
,再
tag query --tag-id <真实tagId>
标签不等于关键词;空标签即结束。按标签查找的分页细节见局部意图
看我最新创建的一条
dws minutes +latest [--keyword <关键词>]
只在用户明确说“最新”时用;不能用它替代具名目标搜索,也不能在录音 start 后拿 latest 猜新录音 ID
读取基础信息、摘要或关键词
dws minutes +detail --id <taskUuid> --artifacts basic,summary,keywords
已有 taskUuid 且只读取现有产物时直接使用,不要进入上传 workflow;任一产物失败都按 partial/非零处理,不把缺失项说成空内容
读取逐字稿
dws minutes +transcript --id <taskUuid> [--direction 1] [--single-page]
已有 taskUuid 且只读取逐字稿时直接使用,不要借
+upload-and-analyze --resume-id
代读。默认正序并追完分页;倒序必须传
--direction 1
,用户明确只要第一页时传
--single-page
,不得随后自动续页。交付前检查
data.direction/data.complete/data.pages
与
meta.pagination
读取行动项单条
+action-items --id <taskUuid>
;批量
+detail --ids <uuid1,uuid2> --artifacts todos
只在
state=known_empty
时说“没有待办”;
ready
才能读取
items
。
unsupported_shape/failed
必须非零并保留脱敏 shape 证据,不能翻译为空结果。需要创建钉钉待办时再切
dingtalk-todo
把摘要、关键词、完整逐字稿和行动项归档到本地
dws minutes +export-pack --id <taskUuid> --output <新相对目录>
要带媒体时加
--include-media
;必须由
published/path/manifest/files
证明落盘,只有建目录、计划或文件名不能称已生成
修改或预览标题
dws minutes +update --id <taskUuid> --title "<新标题>"
真实修改按 Runtime confirmation 执行并读回;用户只要预览时先读 basic,再加
--dry-run
,展示“当前值 → 目标值”后停止,不追加
--yes
覆盖纪要正文
dws minutes +summary --id <taskUuid> --content @<相对文件>
content
是完整目标正文,不是局部 patch;按 Runtime confirmation 执行,并保护图片引用、读回全文
上传音视频生成听记
dws minutes +upload --file <相对路径>
真实执行会上传文件并创建远端听记,必须按 Runtime confirmation;用户明确要闪记卡片时改用
+upload-and-notify
,需要上传后等待分析产物时用
+upload-and-analyze
真实开始、暂停、继续或停止录音
+record-start
/
+record-pause
/
+record-resume
/
+record-stop
这组入口会真实执行。start 返回
accepted=true, bound=false
或
controlReady=false
时,报告“已受理但未绑定”并停止:不得重试 start,也不得用
+latest
、列表第一条或时间最近项猜 ID。结束并等待产物用
+record-wrap-up
只预览录音请求,不实际执行
dws minutes record start --dry-run --format json
使用对应的原子 `minutes record start
生成或继续思维导图
dws minutes +mindmap --id <taskUuid>
创建后有界轮询;超时或未知状态保留恢复信息,用
--resume
继续,不重复创建
生成或继续发言人洞察
dws minutes +speaker-insights --id <taskUuid>
只有
state=ready/complete=true
才完成;pending 保留
taskId
并同账号
--resume [--task-id <ID>]
,不重复创建;用户给定等待时长传
--timeout
当前用户申请查看/下载/编辑权限`dws minutes +apply-permission --id <taskUuid> --permission viewdownload
所有者给成员授权或撤权
dws minutes +share ...
/
dws minutes +unshare ...
先用通讯录把姓名解析为同组织稳定 UID;撤权是破坏性操作。批量结果必须保留逐成员 ledger 和失败项
The following are the core paths supported by the current Minutes Case, used to reduce agent routing forks; they do not equal production frequency statistics. Existing taskUuid must be passed unchanged; decoding or re-encoding is forbidden. For full minutes URLs, extract the taskUuid first, then use it as-is. When only title or time clues exist, search first; stop on zero hits; for multiple candidates or significant differences, let the user disambiguate; do not default to the first item.
User intentUnique recommended entryKey boundaries
Find minutes by title or time
dws minutes +search --scope all --query "<keyword>" --page-all
scope
can be
mine/shared/all
; provide at least one of query/start/end.
all --page-all
follows mine/shared separately and deduplicates; do not treat a single noLimit endpoint as the complete set
Browse minutes I created, shared with me, or all accessible
+list-mine
/
+list-shared
/
+list-all
Default is a continuable preview; to claim completeness, must add
--page-all
and check
complete=true
. User saying "my minutes" is not explicitly
mine
; when scope is unclear, use
all
Find minutes by real tags
dws minutes tag list --format json
, then
tag query --tag-id <real tagId>
Tags are not keywords; empty tag ends. Pagination details for tag search see local intents
View my latest created item
dws minutes +latest [--keyword <keyword>]
Use only when user explicitly says "latest"; cannot replace named target search, nor guess new recording ID after recording start
Read basic info, summary, or keywords
dws minutes +detail --id <taskUuid> --artifacts basic,summary,keywords
If taskUuid exists and only reading existing artifacts, use directly; do not enter upload workflow; any artifact failure treated as partial/non-zero, do not report missing items as empty content
Read transcript
dws minutes +transcript --id <taskUuid> [--direction 1] [--single-page]
If taskUuid exists and only reading transcript, use directly; do not use
+upload-and-analyze --resume-id
instead. Default is forward order and follow pagination; reverse order requires
--direction 1
; if user explicitly wants only first page, pass
--single-page
, no automatic continuation. Before delivery check
data.direction/data.complete/data.pages
and
meta.pagination
Read action itemsSingle:
+action-items --id <taskUuid>
; batch:
+detail --ids <uuid1,uuid2> --artifacts todos
Only say "no todos" when
state=known_empty
;
ready
before reading
items
.
unsupported_shape/failed
must be non-zero and preserve sanitized shape evidence; cannot be translated into empty result. When creating DingTalk todos, switch to
dingtalk-todo
Archive summary, keywords, full transcript, and action items to local
dws minutes +export-pack --id <taskUuid> --output <new relative directory>
For media add
--include-media
; must be proven by
published/path/manifest/files
; creating directory, plan, or filename is not generation
Modify or preview title
dws minutes +update --id <taskUuid> --title "<new title>"
Real modification follows Runtime confirmation and read-back; if user only wants preview, read basic first, then add
--dry-run
, show "current value → target value" and stop; do not append
--yes
Override minutes body
dws minutes +summary --id <taskUuid> --content @<relative file>
content
is the complete target body, not a partial patch; follow Runtime confirmation and protect image references, read back full text
Upload audio/video to generate minutes
dws minutes +upload --file <relative path>
Real execution uploads file and creates remote minutes; must follow Runtime confirmation; if user explicitly wants flash note card, use
+upload-and-notify
; if need to wait for analysis artifacts after upload, use
+upload-and-analyze
Actually start, pause, resume, or stop recording
+record-start
/
+record-pause
/
+record-resume
/
+record-stop
These entries execute for real. If start returns
accepted=true, bound=false
or
controlReady=false
, report "accepted but not bound" and stop: do not retry start, nor use
+latest
, first list item, or most recent time to guess ID. End and wait for artifacts use
+record-wrap-up
Preview recording request only, no actual execution
dws minutes record start --dry-run --format json
Use corresponding atomic `minutes record start
Generate or continue mind map
dws minutes +mindmap --id <taskUuid>
Bounded polling after creation; on timeout or unknown state preserve recovery info and continue with
--resume
, avoid duplicate creation
Generate or continue speaker insights
dws minutes +speaker-insights --id <taskUuid>
Only
state=ready/complete=true
means done; pending preserves
taskId
and
--resume [--task-id <ID>]
under same account; do not duplicate; pass
--timeout
if user gives wait time
Current user applies for view/download/edit permission`dws minutes +apply-permission --id <taskUuid> --permission viewdownload
Owner grants or revokes member permissions
dws minutes +share ...
/
dws minutes +unshare ...
First resolve names to stable UIDs in same organization via contacts; revocation is destructive. Batch results must preserve per-member ledger and failures

搜索与列表执行胶囊

Search and List Execution Capsule

用户要求“全部、所有、完整、汇总整个范围”时,首轮直接使用
--page-all
:
text
dws minutes +search --query "<关键词>" --scope all --page-all --format json
dws minutes +search --start "<RFC3339>" --end "<RFC3339>" --scope mine --page-all --format json
dws minutes +list-mine --page-all --format json
dws minutes +list-shared --page-all --format json
dws minutes +list-all --page-all --format json
只有用户明确要第一页、预览、样本或限定页数时才省略
--page-all
,如实保留完整性与续页证据。每页 N 条须首轮及续页均传
--limit N
,不能取默认数量后只展示 N 条冒充;限定页数用同一 leaf 的
--cursor <真实 next_token>
续拉,不扩大为全量。
+list-all
的
--cursor
与
--page-all
互斥。有时间窗用
+search
,因为
+list-*
不接受
--start/--end
。
When the user requests "all, every, complete, summarize entire scope", use
--page-all
in the first round:
text
dws minutes +search --query "<keyword>" --scope all --page-all --format json
dws minutes +search --start "<RFC3339>" --end "<RFC3339>" --scope mine --page-all --format json
dws minutes +list-mine --page-all --format json
dws minutes +list-shared --page-all --format json
dws minutes +list-all --page-all --format json
Only when the user explicitly asks for first page, preview, sample, or limited pages, omit
--page-all
and honestly preserve completeness and continuation evidence. For each page of N items, must pass
--limit N
in both first round and continuations; cannot take default count and show only N items as full. For limited pages, use same leaf's
--cursor <real next_token>
to continue, do not expand to full. For
+list-all
,
--cursor
and
--page-all
are mutually exclusive. If time window exists use
+search
, because
+list-*
does not accept
--start/--end
.

目标与完整性

Goals and Completeness

  • 时间展示与筛选:日期、时区偏移、星期及“本周”等边界必须由日期工具计算,不能心算或从标题日期推断。时间戳使用本地脚本 format_timestamp.py:
    python3 <本Skill目录>/scripts/format_timestamp.py --unit ms --timezone Asia/Shanghai <时间戳1> [时间戳2 ...]
    ;示例单位/时区须替换为已确认值(优先用户指定时区,否则已知会话时区)。最终直接复用输出,不补算星期或二次换算;已有明确时区的可读返回可直接引用,单位/时区不明时保留原值。相对周边界另用日期库计算,该脚本只转换时间戳。
    duration
    等时长不传给该脚本;仅按已确认单位用本地计算换算,单位未知保留原值,不凭时长判断内容无效或录音状态。
  • 目标锁定优先级:用户给出的
    taskUuid
    /URL > 精确标题 > 标题包含或语义相关候选。相似候选可展示,但候选差异明显或多个候选都合理时必须停下来消歧;分页未完成本身不是目标歧义。
  • 用户说“先确认/核对目标”默认要求用真实基础信息字段完成证据核对,不自动变成等待用户回复的会话门禁。目标唯一、分页完整且后续均为只读时,展示标题、时间、归属等核对证据后在同一轮完成所需交付;只有用户明确要求“等我确认后再继续”或仍有多个合理候选时才暂停。
  • 纯能力、规则或错误说明且没有唯一真实目标时直接解释,不猜对象;用户明确要求核对且目标唯一时必须真实读取,不能只展示命令。
  • mine
    仅表示我创建的,
    shared
    仅表示共享给我的;
    all
    表示 accessible 聚合目标。不得声称后端单个 noLimit 端点天然等于
    mine + shared
    。
  • 列表或逐字稿只有
    data.complete=true
    才能称为“全部/完整”。全量请求遇到
    meta.pagination.next_token
    时继续;只有 token 缺失、cursor 停滞/循环、达到
    page-limit
    或后页失败时才停止,并保留失败信封或不完整证据。
  • 用户要求核对、汇总“这些/每条/全部”命中项时,必须覆盖完整命中集合;可用
    dws minutes +detail --ids <uuid1,uuid2> --artifacts basic --format json
    批量核对,并逐项保留失败。只检查第一条不能代表全体;响应没有逐条归属或组织字段时如实说明不可得,不能用当前 profile 的组织名代替每条听记的归属。
  • 多听记、多来源或跨产品汇总按每个
    taskUuid
    /来源 ID 保留
    requested/resolved/missing/artifacts/status
    ;缺输入或必需产物时整体按 partial,仍交付成功内容支持的独立结果并列缺项;不缩减原请求或把子集说成全部,依赖缺失来源的结论暂不生成。
  • 内容归纳必须来自每条真实
    summary/transcript/keywords
    ;只有
    title/basic
    时只列元数据;其他未满足用户要求的内容依据也只列元数据,分类任务列“待分类/证据不足”,不凭标题或时长判无效。按 taskUuid 去重后的已分类数+待分类数须等于目标总数。
  • partial_success
    、异步
    pending
    、超时和未知写入结果不是成功。按结果中的恢复句柄继续,不能重放已成功步骤。
  • Time display and filtering: dates, timezone offsets, weekday, and "this week" boundaries must be computed by date tools, not mental arithmetic or inferred from title dates. Timestamps use local script format_timestamp.py:
    python3 <this Skill directory>/scripts/format_timestamp.py --unit ms --timezone Asia/Shanghai <timestamp1> [timestamp2 ...]
    ; example unit/timezone must be replaced with confirmed values (prefer user-specified timezone, otherwise known session timezone). Reuse output directly; do not recalculate weekday or convert again. Readable returns with explicit timezone can be referenced directly; preserve original if unit/timezone unclear. Relative week boundaries use date library; this script only converts timestamps. Durations such as
    duration
    are not passed to this script; convert locally according to confirmed units; preserve original if unit unknown; do not judge content invalid or recording state based on duration.
  • Target locking priority: user-provided
    taskUuid
    /URL > exact title > title containing or semantically related candidates. Similar candidates can be shown, but must stop and disambiguate when differences are obvious or multiple candidates are reasonable; incomplete pagination is not goal ambiguity.
  • User saying "confirm/verify target first" by default requires evidence verification with real basic info fields, not automatically becoming a session gate waiting for user reply. When target is unique, pagination complete, and subsequent operations are read-only, show verification evidence such as title, time, ownership and complete delivery in same round; only pause when user explicitly asks "wait for my confirmation before continuing" or there are still multiple reasonable candidates.
  • Pure capability, rules, or error explanations with no unique real target explain directly without guessing objects; if user explicitly requests verification and target is unique, must actually read, not just show command.
  • mine
    means only I created,
    shared
    means only shared with me;
    all
    means accessible aggregate target. Do not claim a backend single noLimit endpoint equals
    mine + shared
    naturally.
  • Lists or transcripts can only be called "all/complete" when
    data.complete=true
    . For full requests, continue when
    meta.pagination.next_token
    exists; stop only when token missing, cursor stalled/loops, reaching
    page-limit
    , or subsequent page failure, preserving failure envelope or incompleteness evidence.
  • When user asks to verify/summarize "these/each/all" hits, must cover the complete hit set; can use
    dws minutes +detail --ids <uuid1,uuid2> --artifacts basic --format json
    for batch verification, preserving failures per item. Checking only first item does not represent all; if response lacks per-item ownership or organization fields, state honestly unavailable; do not use current profile's organization name to replace each minutes' ownership.
  • Multi-minutes, multi-source, or cross-product summaries preserve
    requested/resolved/missing/artifacts/status
    per
    taskUuid
    /source ID; if inputs or required artifacts missing, overall is partial, still deliver independent results supported by successful content and list missing items; do not reduce original request or claim subset as all; conclusions relying on missing sources are not generated.
  • Content summarization must come from each real
    summary/transcript/keywords
    ; only
    title/basic
    available means list metadata only; other content basis not satisfying user request also lists metadata only; classification tasks list "to classify/insufficient evidence"; do not judge invalid by title or duration. Deduplicated by taskUuid, classified count + to-be-classified count must equal target total.
  • partial_success
    , async
    pending
    , timeout, and unknown write results are not success. Continue with recovery handles in result; cannot replay already successful steps.

安全边界

Safety Boundaries

  • +export-pack
    会递归清理全部文本产物中的已识别签名链接/凭据,签名目标替换为
    [signed-url-removed]
    ;扫描失败不发布。交付时说明
    sanitized/redactionCount/sanitizationScope
    ,不要把
    complete=true
    解释为摘要图片已离线保存;当前
    offlineImagesComplete=false
    。二进制媒体内容不属于文本扫描范围。
  • 是否确认以 leaf Schema 与 Runtime gate 为准,不根据“看起来像写操作”自行推断。推荐 Golden Route 中的
    +update
    、
    +summary
    、
    +record-*
    、
    +share/+unshare/+apply-permission
    、
    +speaker-replace
    、
    +replace-batch
    等当前要求确认。
  • 为兼容既有公开 Contract,对应的底层原子命令保留历史
    not_required
    ;它们只用于 Shortcut 无法表达的明确底层控制,不得为了绕过 Golden Route 的确认门禁而降级调用。
  • +upload
    与
    +upload-and-analyze
    即使不发送消息,仍会上传本地媒体并创建远端听记,真实执行必须按 Runtime confirmation;
    --dry-run
    仍可在零远端调用下预览。上传并发送闪记卡片、精确同步并删除热词、撤权等副作用更大的入口继续单独处理。
  • +mindmap
    、
    +speaker-insights
    和
    +prepare-asr
    当前要求确认;
    --resume
    仍沿用所在 Shortcut 的命令级门禁。旧
    +upload --enable-message-card
    与
    +upload-and-analyze --enable-message-card
    继续作为可执行兼容入口,并遵循各自 Shortcut 的确认门禁;新调用仍推荐
    +upload-and-notify
    。原子
    minutes upload create --enable-message-card
    与旧
    --sync
    只保留为公开迁移提示,不得当作可执行 Golden Route。
  • --dry-run
    必须返回明确的 dry-run/request 证据且不调用远端;录音预览按上方原子入口执行。任何入口若拒绝 dry-run,必须报告“不支持预览”,不得把拦截或普通执行称为预演成功。
  • 用户明确要求“仅预览/不实际写入”时,任务在真实现状读取、dry-run 计划和差异交付后结束;不得继续请求写入确认,也不得为了验证预览而执行真实写入后再还原。
  • 分享/撤权使用稳定成员 UID,不能把姓名、手机号或跨组织 ID 直接当 UID;同一目标解析、读取、写入和验证必须使用同一 profile。
  • +export-pack
    recursively cleans identified signed links/credentials in all text artifacts, replacing signed targets with
    [signed-url-removed]
    ; do not publish if scan fails. On delivery, explain
    sanitized/redactionCount/sanitizationScope
    ; do not interpret
    complete=true
    as summary images saved offline; current
    offlineImagesComplete=false
    . Binary media content is not in text scan scope.
  • Confirmation is based on leaf Schema and Runtime gate, not inferred from "looks like a write operation". Recommended
    +update
    ,
    +summary
    ,
    +record-*
    ,
    +share/+unshare/+apply-permission
    ,
    +speaker-replace
    ,
    +replace-batch
    in Golden Route currently require confirmation.
  • For compatibility with existing public Contract, corresponding atomic commands retain historical
    not_required
    ; they are only for explicit low-level control that Shortcut cannot express, and cannot be degraded to bypass Golden Route confirmation gates.
  • +upload
    and
    +upload-and-analyze
    still upload local media and create remote minutes even without sending message; real execution must follow Runtime confirmation;
    --dry-run
    still previews with zero remote calls. Entries with greater side effects such as upload and send flash note card, precise sync and delete hotwords, revoke permissions continue to be handled separately.
  • +mindmap
    ,
    +speaker-insights
    , and
    +prepare-asr
    currently require confirmation;
    --resume
    still follows the command-level gate of the Shortcut. Old
    +upload --enable-message-card
    and
    +upload-and-analyze --enable-message-card
    continue as executable compatibility entries and follow their Shortcut confirmation gates; new calls still recommend
    +upload-and-notify
    . Atomic
    minutes upload create --enable-message-card
    and old
    --sync
    are only public migration hints, not executable Golden Route.
  • --dry-run
    must return clear dry-run/request evidence and not call remote; recording preview executes via atomic entries above. If any entry rejects dry-run, must report "preview not supported"; do not call interception or normal execution as successful rehearsal.
  • When user explicitly asks "preview only / no actual write", task ends after real-status read, dry-run plan, and difference delivery; do not continue to ask for write confirmation, nor execute real write then revert to verify preview.
  • Share/revoke use stable member UIDs; cannot use name, phone number, or cross-organization ID directly as UID; same target resolution, reading, writing, and verification use same profile.

按需加载

On-Demand Loading

Golden Route 参数足够时直接执行,不预读 Reference。每个 Case 最多先读取一个最精确的文件;参数事实优先读取 compact leaf Schema,不读取产品级全量 Catalog。
触发条件Reference
ASR 热词、上传会话恢复、复杂异步轮询、批量权限 workflow复杂流程
发言人替换、批量文本替换、下载媒体、离线导出等低频意图局部意图
必须落到原子命令,或需要 URL/参数/确认事实原子命令
If Golden Route parameters are sufficient, execute directly without pre-reading Reference. Each Case reads at most one most precise file first; parameter facts prefer compact leaf Schema, not product-level full Catalog.
TriggerReference
ASR hotwords, upload session recovery, complex async polling, batch permission workflowComplex flows
Speaker replacement, batch text replacement, download media, offline export and other low-frequency intentsLocal intents
Must fall back to atomic commands, or need URL/parameter/confirmation factsAtomic commands

错误最短路径

Error Shortest Path

  1. 零命中、多候选或 ID 类型不明:停止并返回候选证据。全量请求分页未完成但有有效 continuation 时继续;只有 token 缺失/停滞/循环、达到页数上限或后页失败时停止并返回
    data.complete
    、
    meta.pagination
    或失败信封等证据。
  2. 认证、权限、profile 或 confirmation 错误:按
    dingtalk-shared
    对应错误 Reference 处理;不更换 scope、账号或写命令碰运气。
  3. 异步超时或部分成功:保留
    taskUuid/taskId/sessionId/checkpoint
    ,只恢复未完成阶段;未知写入先读回,不能自动重试。
  1. Zero hits, multiple candidates, or unclear ID types: stop and return candidate evidence. For full request with incomplete pagination but valid continuation, continue; only stop when token missing/stalled/loops, page limit reached, or subsequent page failure, returning
    data.complete
    ,
    meta.pagination
    , or failure envelope evidence.
  2. Authentication, permission, profile, or confirmation errors: handle via corresponding error Reference in
    dingtalk-shared
    ; do not switch scope, account, or write commands to try luck.
  3. Async timeout or partial success: preserve
    taskUuid/taskId/sessionId/checkpoint
    , only recover unfinished stages; unknown write read back first, cannot auto-retry.

跨产品边界

Cross-Product Boundaries

  • 把听记摘要或逐字稿写成文档 → 读取真实内容后切
    dingtalk-doc
    。
  • 把听记行动项创建为任务 → 读取行动项后切
    dingtalk-todo
    ,并按其身份解析规则处理执行人。
  • 把摘要发给同事 → 切
    dingtalk-chat
    ;
    +share
    只管理听记权限,不发送摘要消息。
  • 创建或修改日程、会议室 →
    dingtalk-calendar
    ;Minutes 只处理听记产物和录音控制。
  • Write minutes summary or transcript into document → read real content then switch to
    dingtalk-doc
    .
  • Create tasks from minutes action items → read action items then switch to
    dingtalk-todo
    , and resolve executant per its identity rules.
  • Send summary to colleagues → switch to
    dingtalk-chat
    ;
    +share
    only manages minutes permissions, does not send summary messages.
  • Create or modify calendar/meeting room →
    dingtalk-calendar
    ; Minutes only handles minutes artifacts and recording control.