@amaster.ai/pi-lark 0.1.2-beta.44 → 0.1.2-beta.45

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.
Files changed (122) hide show
  1. package/package.json +2 -2
  2. package/skills/lark-apps/SKILL.md +23 -12
  3. package/skills/lark-apps/creative-design/agents/assets/vision-probe.png +0 -0
  4. package/skills/lark-apps/creative-design/agents/fork-verifier-agent.md +71 -0
  5. package/skills/lark-apps/creative-design/agents/vision-probe-agent.md +41 -0
  6. package/skills/lark-apps/creative-design/assets/index.html +27 -0
  7. package/skills/lark-apps/creative-design/creative-design.md +239 -0
  8. package/skills/lark-apps/creative-design/references/aily.md +39 -0
  9. package/skills/lark-apps/creative-design/references/animated-video.md +34 -0
  10. package/skills/lark-apps/creative-design/references/charts.md +165 -0
  11. package/skills/lark-apps/creative-design/references/claude.md +36 -0
  12. package/skills/lark-apps/creative-design/references/codex.md +32 -0
  13. package/skills/lark-apps/creative-design/references/data-report.md +108 -0
  14. package/skills/lark-apps/creative-design/references/frontend-design.md +71 -0
  15. package/skills/lark-apps/creative-design/references/hi-fi-design.md +32 -0
  16. package/skills/lark-apps/creative-design/references/interactive-prototype.md +24 -0
  17. package/skills/lark-apps/creative-design/references/make-a-deck.md +133 -0
  18. package/skills/lark-apps/creative-design/references/visual-exposure.md +82 -0
  19. package/skills/lark-apps/creative-design/references/wireframe.md +14 -0
  20. package/skills/lark-apps/creative-design/starter-components/android-frame.jsx +188 -0
  21. package/skills/lark-apps/creative-design/starter-components/animations.jsx +773 -0
  22. package/skills/lark-apps/creative-design/starter-components/browser-window.jsx +122 -0
  23. package/skills/lark-apps/creative-design/starter-components/deck-stage.js +2483 -0
  24. package/skills/lark-apps/creative-design/starter-components/design-canvas.jsx +1432 -0
  25. package/skills/lark-apps/creative-design/starter-components/ios-frame.jsx +270 -0
  26. package/skills/lark-apps/creative-design/starter-components/macos-window.jsx +197 -0
  27. package/skills/lark-apps/creative-design/starter-components/tweaks-panel.jsx +752 -0
  28. package/skills/lark-apps/references/lark-apps-automation.md +80 -2
  29. package/skills/lark-apps/references/lark-apps-cloud-dev.md +0 -1
  30. package/skills/lark-apps/references/lark-apps-create.md +1 -2
  31. package/skills/lark-apps/references/lark-apps-db.md +1 -1
  32. package/skills/lark-apps/references/lark-apps-env-pull.md +1 -1
  33. package/skills/lark-apps/references/lark-apps-file.md +1 -1
  34. package/skills/lark-apps/references/lark-apps-git-credential.md +1 -1
  35. package/skills/lark-apps/references/lark-apps-html-publish.md +4 -8
  36. package/skills/lark-apps/references/lark-apps-init.md +1 -1
  37. package/skills/lark-apps/references/lark-apps-list.md +1 -1
  38. package/skills/lark-apps/references/lark-apps-local-dev.md +54 -11
  39. package/skills/lark-apps/references/lark-apps-openapi-key.md +1 -1
  40. package/skills/lark-apps/references/lark-apps-release-create.md +2 -2
  41. package/skills/lark-apps/references/lark-apps-release-get.md +3 -3
  42. package/skills/lark-base/SKILL.md +1 -2
  43. package/skills/lark-base/references/lark-base-cell-value.md +3 -3
  44. package/skills/lark-base/references/lark-base-field-create.md +4 -0
  45. package/skills/lark-base/references/lark-base-field-json.md +4 -4
  46. package/skills/lark-base/references/lark-base-field-update.md +17 -1
  47. package/skills/lark-base/references/lark-base-record-batch-create.md +12 -10
  48. package/skills/lark-base/references/lark-base-record-batch-update.md +11 -9
  49. package/skills/lark-base/references/lark-base-record-upsert.md +1 -1
  50. package/skills/lark-calendar/references/lark-calendar-create.md +1 -0
  51. package/skills/lark-calendar/references/lark-calendar-update.md +3 -0
  52. package/skills/lark-doc/references/lark-doc-fetch.md +10 -2
  53. package/skills/lark-doc/references/lark-doc-whiteboard.md +9 -8
  54. package/skills/lark-doc/references/lark-doc-xml-extended-blocks.md +41 -0
  55. package/skills/lark-doc/references/lark-doc-xml.md +3 -2
  56. package/skills/lark-drive/SKILL.md +4 -1
  57. package/skills/lark-drive/references/lark-drive-comment-location.md +2 -2
  58. package/skills/lark-drive/references/lark-drive-upload.md +1 -0
  59. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-execute.md +273 -0
  60. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-recall.md +202 -0
  61. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-resolve-verify.md +231 -0
  62. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-review-plan.md +248 -0
  63. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-setup.md +174 -0
  64. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector.md +202 -0
  65. package/skills/lark-drive/references/lark-drive-workflow.md +5 -4
  66. package/skills/lark-event/SKILL.md +1 -0
  67. package/skills/lark-event/references/lark-event-application.md +38 -0
  68. package/skills/lark-im/SKILL.md +1 -1
  69. package/skills/lark-im/references/lark-im-flag-list.md +8 -7
  70. package/skills/lark-okr/SKILL.md +71 -26
  71. package/skills/lark-okr/references/lark-okr-batch-create.md +19 -18
  72. package/skills/lark-okr/references/lark-okr-create.md +173 -0
  73. package/skills/lark-okr/references/lark-okr-cycle-list.md +17 -7
  74. package/skills/lark-okr/references/lark-okr-entities.md +1 -0
  75. package/skills/lark-okr/references/lark-okr-indicator-update.md +3 -1
  76. package/skills/lark-okr/references/lark-okr-indicators.md +61 -12
  77. package/skills/lark-okr/references/lark-okr-progress-list.md +21 -9
  78. package/skills/lark-slides/SKILL.md +103 -46
  79. package/skills/lark-slides/references/asset-planning.md +6 -4
  80. package/skills/lark-slides/references/iconpark.md +2 -2
  81. package/skills/lark-slides/references/lark-slides-create.md +2 -3
  82. package/skills/lark-slides/references/lark-slides-history.md +132 -0
  83. package/skills/lark-slides/references/lark-slides-media-upload.md +1 -2
  84. package/skills/lark-slides/references/lark-slides-pptx-template-workflows.md +7 -11
  85. package/skills/lark-slides/references/lark-slides-replace-slide.md +0 -3
  86. package/skills/lark-slides/references/lark-slides-screenshot.md +1 -1
  87. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-create.md +219 -0
  88. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-delete.md +6 -5
  89. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-get.md +2 -2
  90. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-replace.md +2 -3
  91. package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +65 -30
  92. package/skills/lark-slides/references/planning-layer.md +11 -10
  93. package/skills/lark-slides/references/slides_chart_demo.xml +1416 -1
  94. package/skills/lark-slides/references/slides_xml_schema_definition.xml +1 -45
  95. package/skills/lark-slides/references/troubleshooting.md +25 -7
  96. package/skills/lark-slides/references/validation-checklist.md +33 -13
  97. package/skills/lark-slides/references/visual-planning.md +25 -22
  98. package/skills/lark-slides/references/xml-schema-quick-ref.md +225 -46
  99. package/skills/lark-slides/scripts/xml_text_overlap_lint.py +223 -22
  100. package/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +183 -124
  101. package/skills/lark-whiteboard/SKILL.md +13 -12
  102. package/skills/lark-whiteboard/elements/layout.md +1 -1
  103. package/skills/lark-whiteboard/elements/schema.md +2 -2
  104. package/skills/lark-whiteboard/references/{lark-whiteboard-query.md → lark-whiteboard-export.md} +15 -15
  105. package/skills/lark-whiteboard/references/lark-whiteboard-update.md +3 -3
  106. package/skills/lark-whiteboard/references/lark-whiteboard-workflow.md +7 -17
  107. package/skills/lark-whiteboard/routes/dsl.md +3 -3
  108. package/skills/lark-whiteboard/routes/mermaid.md +2 -2
  109. package/skills/lark-whiteboard/routes/svg-edit.md +4 -4
  110. package/skills/lark-whiteboard/routes/svg.md +11 -6
  111. package/skills/lark-whiteboard/scenes/bar-chart.md +1 -1
  112. package/skills/lark-whiteboard/scenes/fishbone.md +1 -1
  113. package/skills/lark-whiteboard/scenes/flywheel.md +1 -1
  114. package/skills/lark-whiteboard/scenes/line-chart.md +1 -1
  115. package/skills/lark-whiteboard/scenes/treemap.md +1 -1
  116. package/skills/lark-wiki/SKILL.md +1 -0
  117. package/skills/lark-slides/references/examples.md +0 -91
  118. package/skills/lark-slides/references/lark-slides-whiteboard.md +0 -331
  119. package/skills/lark-slides/references/lark-slides-xml-get.md +0 -100
  120. package/skills/lark-slides/references/slide-templates.md +0 -201
  121. package/skills/lark-slides/references/slides_demo.xml +0 -226
  122. package/skills/lark-slides/references/xml-format-guide.md +0 -433
@@ -0,0 +1,202 @@
1
+ # 主题资料收集工作流:召回
2
+
3
+ 由状态 `SEARCH_RECALL`、`RECALL_ENHANCE` 加载。
4
+
5
+ 本文档负责基础搜索召回、覆盖增强、query 证据、去重和 `CandidateItem`。不得解析目标移动 token、读取完整文档内容、判断相关性或执行写操作。
6
+
7
+ 本文档只服务 `topic_move_collector`。进入本文档时,`workflow_id` 必须是 `topic_move_collector`;不得把当前任务改路由到其他 workflow。
8
+
9
+ ## 必读上下文
10
+
11
+ 执行本文档规则前:
12
+
13
+ 1. 按 [`../../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 处理身份、认证和权限。
14
+ 2. 按 [`lark-drive-search.md`](lark-drive-search.md) 处理 `drive +search` 语法、过滤条件、单批最多 5 页和身份语义;本 workflow 的全量续批规则见下文。
15
+
16
+ ## 搜索原则
17
+
18
+ 1. 默认使用 `drive +search --mine` 召回当前用户 owner / 负责的 Workspace 资源。
19
+ 2. 除非用户本来就要求限定范围,否则不要要求用户指定文件夹或 Wiki 范围。
20
+ 3. `SEARCH_RECALL` 和 `RECALL_ENHANCE` 必须保持为独立状态。
21
+ 4. `SEARCH_RECALL` 使用用户原始关键词、`owner_scope` 和显式限制。
22
+ 5. `RECALL_ENHANCE` 可以基于基础召回证据增加扩展 query,且必须继承同一个 `owner_scope`。
23
+ 6. 每个候选项必须保留 query 证据,方便后续解释来源。
24
+ 7. 单页或单个最多 5 页的 query 批次不代表完整覆盖;`has_more=true` 时必须保存 `next_page_token` 并自动开始下一批,直到 `has_more=false` 或出现阻塞。
25
+ 8. 召回和增强召回可能耗时较长,执行超过 60 秒时必须输出进度提示,之后约每 60 秒提示一次。
26
+ 9. 只有用户在 `CONFIRM_CONTEXT` 明确确认 `owner_scope=all_visible` 时,才允许移除 `--mine`。
27
+
28
+ ### 分页优先级与完成语义
29
+
30
+ 1. 用户确认进入 `topic_move_collector` 即表示同意为本次收集任务执行完整召回;无需再要求用户额外说“全部 / 全量 / 继续翻”。本规则覆盖 `lark-drive-search.md` 的默认首屏交互规则。
31
+ 2. 仍遵守 `lark-drive-search.md` 的单轮最多 5 页限制。每读取最多 5 页形成一个批次;批次结束且 `has_more=true` 时,保存 checkpoint,并使用原 query、原过滤条件和返回的 `next_page_token` 自动开始下一批。
32
+ 3. 自动续批不改变 workflow 状态,也不触发用户确认。执行超过约 60 秒时只输出进度。
33
+ 4. 一个 query 只有在 `has_more=false` 时才是 `complete`。单批结束、达到 5 页或已有部分候选都不代表完成。
34
+ 5. 当前状态的全部 query 都为 `complete` 后,才能进入下一状态。认证、权限、无效分页 token、连续重试失败或工具预算不足属于 blocker;必须保留 checkpoint、报告部分召回并停在当前状态,不得把部分结果当成完整召回继续分类。
35
+
36
+ ### QueryRecallState
37
+
38
+ 每个基础 / 增强 query 必须维护:
39
+
40
+ ```json
41
+ {
42
+ "query_id": "稳定 query ID",
43
+ "query": "完整 query",
44
+ "recall_stage": "search_recall|recall_enhance",
45
+ "page_count": 0,
46
+ "batch_count": 0,
47
+ "next_page_token": "下一批起点",
48
+ "has_more": true,
49
+ "status": "pending|running|complete|blocked",
50
+ "blocker": "阻塞原因"
51
+ }
52
+ ```
53
+
54
+ ## 状态:`SEARCH_RECALL`
55
+
56
+ 进入条件:用户已确认 `CONFIRM_CONTEXT`。
57
+
58
+ 必须:
59
+
60
+ 1. 基于已确认的 `topic` 构造基础 query。
61
+ 2. 应用默认 `owner_scope=mine` 和 `constraints` 中的显式限制。
62
+ 3. 不隐式添加 `--folder-tokens` 或 `--space-ids`。
63
+ 4. 当 `owner_scope=mine` 时,所有基础 query 必须带 `--mine`。
64
+ 5. 当 `owner_scope=all_visible` 时,不带 `--mine`,并记录扩展召回风险。
65
+ 6. 除非命令限制要求更低值,否则使用 `--page-size 20`。
66
+ 7. 每个基础 query 按每批最多 5 页执行;批次结束仍有更多结果时自动续批,并合并所有页面。
67
+ 8. 记录基础统计:query、搜索范围、页数、批次数、收集数量、重复数量、阻塞项。
68
+ 9. 只有全部基础 query 的 `status=complete` 且 `has_more=false` 时,才进入 `RECALL_ENHANCE`;出现阻塞时保持在 `SEARCH_RECALL`。
69
+
70
+ ### 召回进度 UI
71
+
72
+ 当 `SEARCH_RECALL` 或 `RECALL_ENHANCE` 持续超过约 60 秒时,输出当前进度:
73
+
74
+ ```text
75
+ 搜索进度:当前阶段 <SEARCH_RECALL|RECALL_ENHANCE>,已执行 <query_count> 个 query,已读取 <page_count> 页,收集候选 <raw_count> 项,去重后 <unique_count> 项。继续搜索,不会创建或移动资源。
76
+ ```
77
+
78
+ 如果正在执行具体 query,可补充:
79
+
80
+ ```text
81
+ 当前 query:<query>
82
+ ```
83
+
84
+ ### 基础 Query 规则
85
+
86
+ | 用户输入 | 基础 Query |
87
+ |------------|----------------|
88
+ | 单个关键词 | 直接作为 `--query`。 |
89
+ | 多个关键词组成一个短语 | 优先按用户输入的短语执行。 |
90
+ | 明确精确短语 | 保留引号。 |
91
+ | 明确排除词 | 保留负向词。 |
92
+ | 没有真实关键词,只有过滤条件 | 使用 `--query ""` 搭配过滤条件。 |
93
+
94
+ 在 `SEARCH_RECALL` 中不得添加同义词、仅标题搜索、仅评论搜索或 OR 扩展。
95
+
96
+ ### 基础召回输出
97
+
98
+ ```text
99
+ 基础召回完成:
100
+ - 使用 query:
101
+ - 搜索范围:
102
+ - 应用限制:
103
+ - 收集候选:
104
+ - 去重后候选:
105
+ - 阻塞项:
106
+
107
+ 下一步:继续执行覆盖增强,不需要你操作;不会创建或移动资源。
108
+ ```
109
+
110
+ ## 状态:`RECALL_ENHANCE`
111
+
112
+ 进入条件:基础召回完成。
113
+
114
+ 必须:
115
+
116
+ 1. 基于已确认主题和基础召回证据生成增强 query。
117
+ 2. 确保增强 query 可解释且不引入明显污染。
118
+ 3. 每个增强 query 都必须继承 `owner_scope`;`owner_scope=mine` 时必须带 `--mine`。
119
+ 4. 每个 query 都必须按每批最多 5 页处理分页,并自动续批直到 `has_more=false`。
120
+ 5. 有稳定去重键时,按稳定去重键合并候选项。
121
+ 6. 为每个候选项保留 `source_queries` 和命中证据。
122
+ 7. 当 query 不再产生新候选,或出现工具预算 / API 阻塞时,停止增强。
123
+
124
+ ### 召回阶段退出门禁
125
+
126
+ `RECALL_ENHANCE` 完成后,必须:
127
+
128
+ 1. 确认全部基础和增强 query 的 `status=complete` 且 `has_more=false`,再固化完整 `candidate_items`,包含去重结果、`source_queries`、`match_channels`、`snippets` 和 `dedupe_status`。
129
+ 2. 将 `current_state` 设置为 `RESOURCE_RESOLVE`。
130
+ 3. 加载 [`lark-drive-workflow-topic-move-collector-resolve-verify.md`](lark-drive-workflow-topic-move-collector-resolve-verify.md)。
131
+ 4. 把完整 `candidate_items` 交给 `RESOURCE_RESOLVE`。
132
+ 5. 不得直接进入 `RELEVANCE_CLASSIFY`、`PLAN_MOVE` 或展示相关性结果。
133
+ 6. 不得用搜索标题、摘要或 query 命中直接生成高 / 中 / 低相关分组。
134
+
135
+ ### 增强策略
136
+
137
+ | 策略 | 说明 |
138
+ |----------|------|
139
+ | 精确短语 | 对明确短语使用 `"..."` 提高精确命中。 |
140
+ | `intitle:` | 对项目名、客户名、制度名、报表名等标题特征强的主题执行标题召回。 |
141
+ | `--only-title` | 当标题命中更可信时使用。 |
142
+ | `--only-comment` | 当主题可能只出现在评论讨论中时使用。 |
143
+ | 类型拆分 | 对 `docx`、`sheet`、`bitable`、`slides`、`file` 等分类型搜索,减少服务端排序偏差。 |
144
+ | 同义词 / 别名 | 使用业务上明确的同义词、简称、英文名、中文名。 |
145
+ | OR 扩展 | 对同一实体的别名做 OR 扩展。 |
146
+ | 负向词 | 对明显噪声使用 `-term`,但不能排除可能相关的主题词。 |
147
+
148
+ ### Query 证据
149
+
150
+ 每个候选项都要记录:
151
+
152
+ | 字段 | 说明 |
153
+ |-------|------|
154
+ | `source_queries` | 命中过该资源的 query 列表。 |
155
+ | `match_channels` | 命中位置,如 title、body、comment、metadata。 |
156
+ | `snippets` | 搜索返回的摘要或片段。 |
157
+ | `query_rank` | 资源在各 query 中的相对位置。 |
158
+ | `recall_stage` | `search_recall` 或 `recall_enhance`。 |
159
+
160
+ ## 去重规则
161
+
162
+ 必须:
163
+
164
+ 1. 搜索响应提供 canonical token 时,优先使用 canonical token。
165
+ 2. 对 Wiki 结果,不得只按 object token 去重;同一对象可能出现在多个 Wiki 节点中。
166
+ 3. token 缺失时,使用 URL 作为 fallback。
167
+ 4. 合并重复项时保留所有 query 证据。
168
+ 5. 如果无法确定去重是否稳定,保留该项并设置 `dedupe_status=uncertain`。
169
+
170
+ ## CandidateItem
171
+
172
+ ```json
173
+ {
174
+ "title": "资源标题",
175
+ "url": "资源链接",
176
+ "raw_type": "搜索返回类型",
177
+ "source_queries": ["query"],
178
+ "match_channels": ["title|body|comment|metadata"],
179
+ "snippets": ["命中片段"],
180
+ "page_rank": 1,
181
+ "dedupe_key": "候选去重键",
182
+ "dedupe_status": "stable|fallback|uncertain",
183
+ "recall_stage": "search_recall|recall_enhance"
184
+ }
185
+ ```
186
+
187
+ | 字段 | 说明 |
188
+ |-------|------|
189
+ | `title` | 搜索结果标题。 |
190
+ | `url` | 资源访问链接。 |
191
+ | `raw_type` | 搜索返回的原始类型。 |
192
+ | `source_queries` | 命中过该资源的搜索 query。 |
193
+ | `match_channels` | 命中位置。 |
194
+ | `snippets` | 摘要或命中片段。 |
195
+ | `page_rank` | 当前 query 下的排序位置。 |
196
+ | `dedupe_key` | 候选去重键。 |
197
+ | `dedupe_status` | 去重可信度。 |
198
+ | `recall_stage` | 资源首次进入候选集的召回阶段。 |
199
+
200
+ ## 阻塞项
201
+
202
+ 缺少认证 / scope、`drive +search` 返回权限或策略阻塞、分页 token 无效、分页重试后仍无法继续,或工具预算不足以完成全部页面时,必须把对应 `QueryRecallState.status` 设置为 `blocked`,保留累计候选、页数和 `next_page_token`,停止并报告。阻塞解除后从 checkpoint 续跑;在全部 query 完成前不得进入资源解析或分类阶段。
@@ -0,0 +1,231 @@
1
+ # 主题资料收集工作流:资源解析与内容验证
2
+
3
+ 由状态 `RESOURCE_RESOLVE`、`CONTENT_VERIFY` 加载。
4
+
5
+ 本文档负责资源解析、结构化父级、移动资格、内容验证和 `ResourceItem`。不得判断相关性、生成移动计划、创建目标、移动资源或执行恢复操作。
6
+
7
+ 本文档只服务 `topic_move_collector`。进入本文档时,`workflow_id` 必须是 `topic_move_collector`;不得把当前任务改路由到其他 workflow。
8
+
9
+ ## 必读上下文
10
+
11
+ 执行本文档规则前:
12
+
13
+ 1. 按 [`../../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 处理身份、认证和权限。
14
+ 2. 按 [`lark-drive-inspect.md`](lark-drive-inspect.md) 处理 URL / token 解析。
15
+ 3. 使用 `drive metas batch_query` 补齐 Drive 资源 owner、标题和 URL。
16
+ 4. 必要时使用 `drive permission.members auth` 读取权限信号;该接口不提供 `full_access` / 移动权限的直接判定,不能把 `manage_public` 等同为可移动。
17
+ 5. 按 [`../../lark-wiki/references/lark-wiki-node-get.md`](../../lark-wiki/references/lark-wiki-node-get.md) 处理 Wiki 节点解析。
18
+ 6. 按 [`../../lark-doc/references/lark-doc-fetch.md`](../../lark-doc/references/lark-doc-fetch.md) 读取文档内容。
19
+ 7. 需要验证 Sheet 内容时,按 [`../../lark-sheets/SKILL.md`](../../lark-sheets/SKILL.md) 执行。
20
+
21
+ ## 进入解析与验证阶段前校验
22
+
23
+ 进入本文档后,如果 `resource_items` 还不存在,当前状态必须是 `RESOURCE_RESOLVE`。
24
+
25
+ 禁止从 `candidate_items` 直接进入 `CONTENT_VERIFY` 或 `RELEVANCE_CLASSIFY`,也禁止从 `RESOURCE_RESOLVE` 直接进入 `RELEVANCE_CLASSIFY`。即使候选项已有标题、URL、摘要或 token,也必须依次执行 `RESOURCE_RESOLVE` 和 `CONTENT_VERIFY`;两个状态不得合并。
26
+
27
+ ## 状态:`RESOURCE_RESOLVE`
28
+
29
+ 进入条件:候选列表已准备。
30
+
31
+ 必须:
32
+
33
+ 1. 为每个 `CandidateItem` 生成稳定 `resource_id`,并转换为标准化 `ResourceItem`。
34
+ 2. 解析 canonical token、资源类型、URL、结构化当前父级、Wiki 节点身份和读取权限状态。
35
+ 3. 对 Wiki 资源同时保留 `wiki_node_token` 和 `wiki_obj_token`。
36
+ 4. 按 `move_method` 补齐 `owner_id`、`is_owner`、`source_move_state`、`source_parent_write_state`、`target_write_state`、`move_permission_state` 和 `move_permission_basis`。
37
+ 5. 基于 `target_location` 检测不支持的移动方向。
38
+ 6. 未解析成功的资源仍保留在审核分组中,不得静默丢弃。
39
+ 7. 即使搜索结果已经包含标题、URL 或 token,也必须经过本状态生成 `ResourceItem`;不得从召回结果直接进入相关性分级。
40
+ 8. 只有确认 `move_permission_state=movable` 且 `target_write_state=confirmed` 的资源,才能进入后续默认移动链路。
41
+ 9. 解析耗时超过约 60 秒时,必须输出进度提示,之后约每 60 秒提示一次。
42
+
43
+ ### 解析规则
44
+
45
+ | 候选类型 | agent 必须执行 |
46
+ |----------------|---------------|
47
+ | Drive URL / token | token 或类型不确定时,使用 `drive +inspect`。 |
48
+ | Wiki URL / token | 使用 `drive +inspect` 或 `wiki +node-get`;保留节点身份和对象身份。 |
49
+ | 文件夹候选 | 标记为容器;不要当作普通文档做内容验证。 |
50
+ | 快捷方式候选 | 能解析源资源时解析源资源;同时保留快捷方式身份。 |
51
+ | 无读取权限 | 保留可见元数据,并设置 `permission_state=denied`。 |
52
+ | 无移动权限或移动权限未知 | 保留可见元数据和召回证据,并设置对应 `move_permission_state`。 |
53
+ | 无法解析当前父级 | 设置 `current_parent_kind=unknown`,保留已知路径,后续计划项设置 `rollback_supported=false` 和明确 blocker;不得编造父级 token。 |
54
+
55
+ ### 资源解析进度 UI
56
+
57
+ 当 `RESOURCE_RESOLVE` 持续超过约 60 秒时,输出当前进度:
58
+
59
+ ```text
60
+ 资源解析进度:已解析 <resolved_count>/<total_count> 项,已确认可移动 <movable_count> 项,无移动权限 <denied_count> 项,移动权限未知 <unknown_count> 项,解析失败 <failed_count> 项。
61
+ 当前资源:<title>
62
+ 继续解析中,不会创建或移动资源。
63
+ ```
64
+
65
+ 如果正在处理权限或 owner 元数据,可补充:
66
+
67
+ ```text
68
+ 当前步骤:解析 owner / 当前父级 / 移动资格。
69
+ ```
70
+
71
+ `RESOURCE_RESOLVE` 完成后,输出摘要:
72
+
73
+ ```text
74
+ 资源解析完成:
75
+ - 候选总数:N 项
76
+ - 可进入内容验证:N 项
77
+ - 无移动权限:N 项
78
+ - 移动权限未知:N 项
79
+ - 解析失败或无读取权限:N 项
80
+
81
+ 下一步会对可移动资源做内容验证;不会创建或移动资源。
82
+ ```
83
+
84
+ ### 资源解析出口门禁
85
+
86
+ `RESOURCE_RESOLVE` 完成后必须:
87
+
88
+ 1. 将 `content_verify_completed` 重置为 `false`。
89
+ 2. 将下一状态设置为 `CONTENT_VERIFY`,不得设置为 `RELEVANCE_CLASSIFY` 或 `PLAN_MOVE`。
90
+ 3. 不得在本状态生成 `relevance`、`relevance_groups` 或移动计划。
91
+ 4. 即使可读取正文的资源数量为 0,也必须进入 `CONTENT_VERIFY`,为每项记录跳过验证原因并输出验证摘要。
92
+
93
+ ### 移动资格判定
94
+
95
+ `owner` 只能作为部分权限证据,不得单独把资源判为 `movable`。`RESOURCE_RESOLVE` 必须先按 `move_method` 记录以下独立状态:
96
+
97
+ | 字段 | 说明 |
98
+ |------|------|
99
+ | `source_move_state` | 当前身份是否确认可以对源资源执行对应移动;Drive owner 只可作为 Drive 源资源可管理的证据,Wiki 底层资源 owner 不能证明 Wiki 节点可移动。 |
100
+ | `source_parent_write_state` | 当前身份是否确认可编辑源位置;仅 `drive_move` 必须确认,其他移动方式为 `not_required`。 |
101
+ | `target_write_state` | 当前身份是否确认可写目标位置;待创建目标以父级位置的创建 / 写入权限为准。 |
102
+
103
+ #### 按移动方式的权限矩阵
104
+
105
+ | `move_method` | `source_move_state=confirmed` 的证据 | `source_parent_write_state` | `target_write_state` |
106
+ |---------------|--------------------------------------|-----------------------------|----------------------|
107
+ | `drive_move` | 当前用户是可靠解析出的 Drive 资源 owner,或有明确资源可管理证据 | 必须为 `confirmed` | 必须为 `confirmed` |
108
+ | `wiki_move_docs_to_wiki` | 有明确的 Drive 文档直接迁入权限;仅 owner 元数据不足以证明可直接迁入 | `not_required` | 必须确认目标 Wiki 节点 / 空间可写 |
109
+ | `wiki_move_node` | 有明确的 Wiki 节点 / 源空间移动权限;不得从底层资源 owner 推导 | `not_required` | 必须确认目标 Wiki 节点 / 空间可写 |
110
+ | `wiki_move_to_drive` | 有明确的 Wiki 节点移出权限;不得从底层资源 owner 推导 | `not_required` | 必须确认目标 Drive 文件夹可写 |
111
+
112
+ #### 聚合顺序
113
+
114
+ 1. 目标方向或资源类型不支持时,设置 `move_permission_state=denied`、`move_permission_basis=["unsupported_direction"]`。
115
+ 2. 任一必需状态为 `denied` 时,设置 `move_permission_state=denied`,并在 `move_permission_basis` 记录 `source_denied`、`source_parent_denied` 或 `target_denied`。
116
+ 3. 任一必需状态为 `unknown` 时,设置 `move_permission_state=unknown`,并记录对应的 `source_unknown`、`source_parent_unknown` 或 `target_unknown`。
117
+ 4. 只有权限矩阵中的全部必需状态都为 `confirmed` 时,才能设置 `move_permission_state=movable`、`move_permission_basis=["permission_matrix_confirmed"]`。
118
+
119
+ 注意:
120
+
121
+ 1. `drive permission.members auth` 不提供 `full_access` 或 `move` action;不能用 `view`、`edit`、`share` 或 `manage_public` 结果推断源位置或目标位置可写。
122
+ 2. `target_write_state=unknown|denied` 的资源不得进入高 / 中相关可执行分组或移动计划。
123
+ 3. `move_permission_state=unknown` 的资源默认不进入内容验证、相关性高 / 中分组或移动计划。
124
+ 4. 当 `owner_scope=mine` 但解析出的 owner 不是当前用户时,将该资源视为异常候选,设置 `source_move_state=unknown` 和 `move_permission_state=unknown`,不得加入移动计划。
125
+
126
+ ## 状态:`CONTENT_VERIFY`
127
+
128
+ 进入条件:资源列表已准备。
129
+
130
+ 必须:
131
+
132
+ 1. 本状态不可跳过,也不得与 `RESOURCE_RESOLVE` 或 `RELEVANCE_CLASSIFY` 合并;没有可读取正文的资源时仍须执行。
133
+ 2. 只在资源解析后读取支持的内容。
134
+ 3. 按数量、大小和类型能力限制读取范围。
135
+ 4. 结合搜索证据和内容证据;除非标题精确且足够强,否则不要仅凭标题判为高相关。
136
+ 5. 将不可读取资源标记为 `unverifiable` 或 `permission_denied`。
137
+ 6. 不得自动申请权限。
138
+ 7. 为每个资源写入验证状态:已读取内容证据、仅可使用搜索证据、无权限、无移动权限、移动权限未知、无法验证或不支持内容验证。
139
+ 8. 对 `move_permission_state=denied|unknown` 的资源,不再读取正文内容,写入跳过验证原因并保留召回证据;写入跳过原因属于执行本状态,不等于跳过本状态。
140
+ 9. 所有资源都有验证状态或跳过原因后,将 `content_verify_completed` 设置为 `true` 并输出验证摘要。
141
+ 10. `content_verify_completed=true` 前不得进入 `RELEVANCE_CLASSIFY`。
142
+
143
+ ### 验证方式
144
+
145
+ | 资源类型 | 验证方式 |
146
+ |---------------|---------------------|
147
+ | `docx` / `doc` | 允许时使用 `docs +fetch --api-version v2`。 |
148
+ | `sheet` | 使用 `sheets +find` 查关键词证据,或用 `sheets +read` 读取有界范围。 |
149
+ | `bitable` | 只有必要且已加载 Base 能力时验证。 |
150
+ | `slides` | 除非具备幻灯片读取能力,否则使用元数据 / 预览 / 标题证据。 |
151
+ | `file` | 仅在支持时使用标题、元数据、预览或导出文本。 |
152
+ | `wiki` 节点 | 按 `obj_type` 验证底层对象;节点本身不是内容 token。 |
153
+ | `folder` | 除非用户明确要移动容器,否则通常不作为主题证据移动。 |
154
+
155
+ ### 内容验证完成 UI
156
+
157
+ 完成 `CONTENT_VERIFY` 后必须输出:
158
+
159
+ ```text
160
+ 内容验证完成:
161
+ - 已读取内容证据:N 项
162
+ - 仅复用搜索证据:N 项
163
+ - 因无权限或移动资格跳过:N 项
164
+ - 无法验证或不支持验证:N 项
165
+
166
+ 下一步会基于以上证据进行相关性分组;不会创建或移动资源。
167
+ ```
168
+
169
+ 如果没有任何资源可以读取正文,仍须输出该摘要,并明确说明所有资源采用的搜索证据或跳过原因。
170
+
171
+ ### 内容验证出口门禁
172
+
173
+ `CONTENT_VERIFY` 完成后必须:
174
+
175
+ 1. 确认 `content_verify_completed=true`,且每个 `ResourceItem` 都已有验证状态或跳过原因。
176
+ 2. 将下一状态设置为 `RELEVANCE_CLASSIFY`。
177
+ 3. 加载 [`lark-drive-workflow-topic-move-collector-review-plan.md`](lark-drive-workflow-topic-move-collector-review-plan.md)。
178
+ 4. 不得直接进入 `PLAN_MOVE`。
179
+
180
+ ## ResourceItem
181
+
182
+ ```json
183
+ {
184
+ "resource_id": "稳定资源 ID",
185
+ "title": "资源标题",
186
+ "resource_type": "doc|docx|sheet|bitable|file|folder|wiki|slides|shortcut",
187
+ "url": "资源链接",
188
+ "canonical_token": "标准资源 token",
189
+ "wiki_node_token": "Wiki 节点 token",
190
+ "wiki_obj_token": "Wiki 底层对象 token",
191
+ "wiki_obj_type": "Wiki 底层对象类型",
192
+ "space_id": "知识空间 ID",
193
+ "current_parent_kind": "drive_folder|drive_root|wiki_node|wiki_space_root|unknown",
194
+ "current_parent_token": "当前父级 token",
195
+ "current_parent_space_id": "当前父级 Wiki space_id",
196
+ "current_path": "用于展示的当前位置",
197
+ "owner_id": "资源 owner open_id",
198
+ "is_owner": "true|false|unknown",
199
+ "permission_state": "readable|denied|unknown",
200
+ "source_move_state": "confirmed|unknown|denied",
201
+ "source_parent_write_state": "confirmed|unknown|denied|not_required",
202
+ "move_permission_state": "movable|denied|unknown",
203
+ "move_permission_basis": ["权限矩阵证据或阻塞原因"],
204
+ "target_write_state": "confirmed|unknown|denied",
205
+ "item_resolve_status": "resolved|partial|failed",
206
+ "content_verify_state": "verified|search_evidence_only|skipped_by_move_permission|permission_denied|unverifiable|unsupported",
207
+ "content_evidence": ["证据"],
208
+ "relevance": "high|medium|low|permission_denied|no_move_permission|move_permission_unknown|unverifiable|unsupported_move_target"
209
+ }
210
+ ```
211
+
212
+ | 字段 | 说明 |
213
+ |-------|------|
214
+ | `canonical_token` | 内容读取、Drive 对象操作或底层对象操作使用的标准 token;Wiki 节点移动不得使用该字段。 |
215
+ | `resource_id` | 资源解析时生成的稳定 ID,用于连接 `ResourceItem` 和 `MovePlanItem`。 |
216
+ | `wiki_node_token` | Wiki 节点身份,用于 Wiki 节点移动。 |
217
+ | `wiki_obj_token` | Wiki 节点背后的真实文档 token。 |
218
+ | `current_parent_kind` / `current_parent_token` / `current_parent_space_id` | 结构化执行前父级,用于 `already_at_target` 判断和恢复;未知值不得猜测。 |
219
+ | `current_path` | 仅用于用户展示的当前位置,不得代替父级 token。 |
220
+ | `owner_id` | 资源 owner;Drive 资源优先来自 `drive metas batch_query`,Wiki 节点优先来自 `wiki +node-get`。 |
221
+ | `is_owner` | 当前用户是否为资源 owner。 |
222
+ | `permission_state` | 当前身份下的读取权限状态。 |
223
+ | `source_move_state` | 当前身份是否确认能对源资源执行所选 `move_method`;必须按权限矩阵判断。 |
224
+ | `source_parent_write_state` | Drive 内移动所需的源位置编辑状态;非 `drive_move` 为 `not_required`。 |
225
+ | `move_permission_state` | 权限矩阵聚合结果;只有 `movable` 且目标写入状态为 `confirmed` 才可进入默认移动链路。 |
226
+ | `move_permission_basis` | 移动资格判断依据,用于解释为什么纳入或排除。 |
227
+ | `target_write_state` | 目标位置是否确认可写。 |
228
+ | `item_resolve_status` | 资源项解析状态;不要和 `TargetLocation.target_resolve_status` 混用。 |
229
+ | `content_verify_state` | 内容验证状态或跳过验证原因。 |
230
+ | `content_evidence` | 支撑相关性判断的命中证据。 |
231
+ | `relevance` | 相关性和可执行性分组。 |