@amaster.ai/pi-lark 0.1.6 → 0.1.8

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 (266) hide show
  1. package/README.md +5 -1
  2. package/dist/config.d.ts +1 -1
  3. package/dist/config.d.ts.map +1 -1
  4. package/dist/config.js +2 -2
  5. package/dist/config.js.map +1 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +2 -1
  8. package/dist/index.js.map +1 -1
  9. package/package.json +3 -3
  10. package/skills/lark-apps/SKILL.md +59 -14
  11. package/skills/lark-apps/creative-design/agents/assets/vision-probe.png +0 -0
  12. package/skills/lark-apps/creative-design/agents/fork-verifier-agent.md +71 -0
  13. package/skills/lark-apps/creative-design/agents/vision-probe-agent.md +41 -0
  14. package/skills/lark-apps/creative-design/assets/index.html +27 -0
  15. package/skills/lark-apps/creative-design/creative-design.md +239 -0
  16. package/skills/lark-apps/creative-design/references/aily.md +39 -0
  17. package/skills/lark-apps/creative-design/references/animated-video.md +34 -0
  18. package/skills/lark-apps/creative-design/references/charts.md +165 -0
  19. package/skills/lark-apps/creative-design/references/claude.md +36 -0
  20. package/skills/lark-apps/creative-design/references/codex.md +32 -0
  21. package/skills/lark-apps/creative-design/references/data-report.md +108 -0
  22. package/skills/lark-apps/creative-design/references/frontend-design.md +71 -0
  23. package/skills/lark-apps/creative-design/references/hi-fi-design.md +32 -0
  24. package/skills/lark-apps/creative-design/references/interactive-prototype.md +24 -0
  25. package/skills/lark-apps/creative-design/references/make-a-deck.md +133 -0
  26. package/skills/lark-apps/creative-design/references/visual-exposure.md +82 -0
  27. package/skills/lark-apps/creative-design/references/wireframe.md +14 -0
  28. package/skills/lark-apps/creative-design/starter-components/android-frame.jsx +188 -0
  29. package/skills/lark-apps/creative-design/starter-components/animations.jsx +773 -0
  30. package/skills/lark-apps/creative-design/starter-components/browser-window.jsx +122 -0
  31. package/skills/lark-apps/creative-design/starter-components/deck-stage.js +2483 -0
  32. package/skills/lark-apps/creative-design/starter-components/design-canvas.jsx +1432 -0
  33. package/skills/lark-apps/creative-design/starter-components/ios-frame.jsx +270 -0
  34. package/skills/lark-apps/creative-design/starter-components/macos-window.jsx +197 -0
  35. package/skills/lark-apps/creative-design/starter-components/tweaks-panel.jsx +752 -0
  36. package/skills/lark-apps/references/lark-apps-automation.md +80 -2
  37. package/skills/lark-apps/references/lark-apps-cache.md +61 -0
  38. package/skills/lark-apps/references/lark-apps-cloud-dev.md +5 -5
  39. package/skills/lark-apps/references/lark-apps-create.md +6 -4
  40. package/skills/lark-apps/references/lark-apps-db.md +1 -1
  41. package/skills/lark-apps/references/lark-apps-env-pull.md +1 -1
  42. package/skills/lark-apps/references/lark-apps-file.md +2 -2
  43. package/skills/lark-apps/references/lark-apps-get.md +1 -1
  44. package/skills/lark-apps/references/lark-apps-git-credential.md +1 -1
  45. package/skills/lark-apps/references/lark-apps-html-publish.md +4 -8
  46. package/skills/lark-apps/references/lark-apps-init.md +1 -1
  47. package/skills/lark-apps/references/lark-apps-list.md +2 -2
  48. package/skills/lark-apps/references/lark-apps-local-dev.md +80 -11
  49. package/skills/lark-apps/references/lark-apps-openapi-key.md +1 -1
  50. package/skills/lark-apps/references/lark-apps-release-create.md +2 -2
  51. package/skills/lark-apps/references/lark-apps-release-get.md +3 -3
  52. package/skills/lark-base/SKILL.md +34 -19
  53. package/skills/lark-base/references/lark-base-cell-value.md +3 -3
  54. package/skills/lark-base/references/lark-base-dashboard-block-get-data.md +17 -1
  55. package/skills/lark-base/references/lark-base-dashboard.md +17 -4
  56. package/skills/lark-base/references/lark-base-data-query-guide.md +8 -0
  57. package/skills/lark-base/references/lark-base-data-query.md +11 -4
  58. package/skills/lark-base/references/lark-base-field-create.md +21 -6
  59. package/skills/lark-base/references/lark-base-field-json.md +9 -6
  60. package/skills/lark-base/references/lark-base-field-update.md +17 -1
  61. package/skills/lark-base/references/lark-base-filter-condition.md +179 -0
  62. package/skills/lark-base/references/lark-base-form-questions-create.md +40 -7
  63. package/skills/lark-base/references/lark-base-form-questions-update.md +73 -20
  64. package/skills/lark-base/references/lark-base-form-submit.md +16 -7
  65. package/skills/lark-base/references/lark-base-record-batch-create.md +12 -10
  66. package/skills/lark-base/references/lark-base-record-batch-update.md +11 -9
  67. package/skills/lark-base/references/lark-base-record-upsert.md +1 -1
  68. package/skills/lark-base/references/lark-base-role-guide.md +11 -0
  69. package/skills/lark-base/references/lark-base-view-set-filter.md +11 -137
  70. package/skills/lark-base/references/role-config.md +31 -5
  71. package/skills/lark-calendar/SKILL.md +14 -8
  72. package/skills/lark-calendar/references/lark-calendar-create.md +6 -5
  73. package/skills/lark-calendar/references/lark-calendar-recurring.md +1 -0
  74. package/skills/lark-calendar/references/lark-calendar-room-find.md +2 -1
  75. package/skills/lark-calendar/references/lark-calendar-schedule-clear-time.md +1 -0
  76. package/skills/lark-calendar/references/lark-calendar-suggestion.md +1 -1
  77. package/skills/lark-calendar/references/lark-calendar-update.md +10 -4
  78. package/skills/lark-contact/SKILL.md +19 -3
  79. package/skills/lark-contact/references/lark-contact-search-bot.md +60 -0
  80. package/skills/lark-doc/SKILL.md +26 -61
  81. package/skills/lark-doc/references/genres/business-analysis.md +30 -0
  82. package/skills/lark-doc/references/genres/data-report.md +32 -0
  83. package/skills/lark-doc/references/genres/email.md +38 -0
  84. package/skills/lark-doc/references/genres/execution-plan.md +27 -0
  85. package/skills/lark-doc/references/genres/formal-doc.md +37 -0
  86. package/skills/lark-doc/references/genres/meeting-minutes.md +24 -0
  87. package/skills/lark-doc/references/genres/memo-brief.md +25 -0
  88. package/skills/lark-doc/references/genres/official-redhead.md +73 -0
  89. package/skills/lark-doc/references/genres/prd.md +26 -0
  90. package/skills/lark-doc/references/genres/proposal.md +24 -0
  91. package/skills/lark-doc/references/genres/research-report.md +32 -0
  92. package/skills/lark-doc/references/genres/retrospective.md +25 -0
  93. package/skills/lark-doc/references/genres/route-consumer.md +37 -0
  94. package/skills/lark-doc/references/genres/route-creative.md +36 -0
  95. package/skills/lark-doc/references/genres/route-knowledge.md +39 -0
  96. package/skills/lark-doc/references/genres/route-marketing.md +40 -0
  97. package/skills/lark-doc/references/genres/route-media.md +36 -0
  98. package/skills/lark-doc/references/genres/route-opinion.md +38 -0
  99. package/skills/lark-doc/references/genres/route-personal-brand.md +36 -0
  100. package/skills/lark-doc/references/genres/route-platform.md +9 -0
  101. package/skills/lark-doc/references/genres/route-report.md +10 -0
  102. package/skills/lark-doc/references/genres/route-workplace.md +17 -0
  103. package/skills/lark-doc/references/genres/sop-tutorial.md +41 -0
  104. package/skills/lark-doc/references/genres/technical-doc.md +39 -0
  105. package/skills/lark-doc/references/genres/wechat.md +39 -0
  106. package/skills/lark-doc/references/genres/weekly-report.md +24 -0
  107. package/skills/lark-doc/references/genres/white-paper.md +32 -0
  108. package/skills/lark-doc/references/genres/xiaohongshu.md +38 -0
  109. package/skills/lark-doc/references/lark-doc-create-workflow.md +121 -0
  110. package/skills/lark-doc/references/lark-doc-create.md +22 -48
  111. package/skills/lark-doc/references/lark-doc-fetch.md +84 -93
  112. package/skills/lark-doc/references/lark-doc-history.md +16 -15
  113. package/skills/lark-doc/references/lark-doc-md.md +5 -1
  114. package/skills/lark-doc/references/lark-doc-media-download.md +2 -1
  115. package/skills/lark-doc/references/lark-doc-script.md +76 -0
  116. package/skills/lark-doc/references/lark-doc-update.md +70 -222
  117. package/skills/lark-doc/references/lark-doc-whiteboard.md +14 -17
  118. package/skills/lark-doc/references/lark-doc-xml-extended-blocks.md +46 -0
  119. package/skills/lark-doc/references/lark-doc-xml.md +38 -166
  120. package/skills/lark-drive/SKILL.md +32 -50
  121. package/skills/lark-drive/references/lark-drive-add-comment.md +2 -4
  122. package/skills/lark-drive/references/lark-drive-add-reply.md +47 -0
  123. package/skills/lark-drive/references/lark-drive-apply-permission.md +3 -3
  124. package/skills/lark-drive/references/lark-drive-batch-query-comments.md +46 -0
  125. package/skills/lark-drive/references/lark-drive-comment-content.md +50 -0
  126. package/skills/lark-drive/references/lark-drive-comment-location.md +9 -15
  127. package/skills/lark-drive/references/lark-drive-copy.md +87 -0
  128. package/skills/lark-drive/references/lark-drive-delete-reply.md +48 -0
  129. package/skills/lark-drive/references/lark-drive-download.md +6 -1
  130. package/skills/lark-drive/references/lark-drive-export.md +3 -0
  131. package/skills/lark-drive/references/lark-drive-list-comments.md +25 -68
  132. package/skills/lark-drive/references/lark-drive-list-replies.md +54 -0
  133. package/skills/lark-drive/references/lark-drive-member-add.md +2 -2
  134. package/skills/lark-drive/references/lark-drive-member-list.md +65 -0
  135. package/skills/lark-drive/references/lark-drive-permission-get-setting.md +48 -0
  136. package/skills/lark-drive/references/lark-drive-preview.md +11 -1
  137. package/skills/lark-drive/references/lark-drive-react-reply.md +51 -0
  138. package/skills/lark-drive/references/lark-drive-reactions.md +27 -25
  139. package/skills/lark-drive/references/lark-drive-resolve-comment.md +45 -0
  140. package/skills/lark-drive/references/lark-drive-restore-comment.md +46 -0
  141. package/skills/lark-drive/references/lark-drive-search.md +7 -1
  142. package/skills/lark-drive/references/lark-drive-secure-label.md +1 -1
  143. package/skills/lark-drive/references/lark-drive-task-result.md +3 -0
  144. package/skills/lark-drive/references/lark-drive-update-reply.md +46 -0
  145. package/skills/lark-drive/references/lark-drive-update-title.md +78 -0
  146. package/skills/lark-drive/references/lark-drive-upload.md +1 -0
  147. package/skills/lark-drive/references/lark-drive-workflow-permission-governance-commands.md +38 -8
  148. package/skills/lark-drive/references/lark-drive-workflow-permission-governance-outputs.md +10 -10
  149. package/skills/lark-drive/references/lark-drive-workflow-permission-governance.md +22 -20
  150. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-execute.md +273 -0
  151. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-recall.md +202 -0
  152. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-resolve-verify.md +231 -0
  153. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-review-plan.md +248 -0
  154. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-setup.md +174 -0
  155. package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector.md +202 -0
  156. package/skills/lark-drive/references/lark-drive-workflow.md +5 -4
  157. package/skills/lark-event/SKILL.md +8 -4
  158. package/skills/lark-event/references/lark-event-application.md +38 -0
  159. package/skills/lark-event/references/lark-event-vc.md +8 -2
  160. package/skills/lark-im/SKILL.md +9 -9
  161. package/skills/lark-im/references/card/card-2.0-schema.md +1 -1
  162. package/skills/lark-im/references/card/lark-im-card-style.md +4 -4
  163. package/skills/lark-im/references/card/resource/icons.md +14 -0
  164. package/skills/lark-im/references/lark-im-chat-list.md +9 -2
  165. package/skills/lark-im/references/lark-im-chat-members-list.md +7 -4
  166. package/skills/lark-im/references/lark-im-chat-messages-list.md +10 -3
  167. package/skills/lark-im/references/lark-im-chat-search.md +9 -2
  168. package/skills/lark-im/references/lark-im-feed-group-list-item.md +2 -2
  169. package/skills/lark-im/references/lark-im-feed-group-list.md +2 -2
  170. package/skills/lark-im/references/lark-im-feed-shortcut-list.md +1 -1
  171. package/skills/lark-im/references/lark-im-flag-list.md +9 -8
  172. package/skills/lark-im/references/lark-im-message-enrichment.md +1 -1
  173. package/skills/lark-im/references/lark-im-messages-resources-download.md +19 -25
  174. package/skills/lark-im/references/lark-im-messages-search.md +4 -5
  175. package/skills/lark-im/references/lark-im-threads-messages-list.md +8 -4
  176. package/skills/lark-mail/references/lark-mail-triage.md +19 -4
  177. package/skills/lark-minutes/SKILL.md +1 -1
  178. package/skills/lark-minutes/references/lark-minutes-search.md +6 -7
  179. package/skills/lark-okr/SKILL.md +71 -26
  180. package/skills/lark-okr/references/lark-okr-batch-create.md +19 -18
  181. package/skills/lark-okr/references/lark-okr-create.md +173 -0
  182. package/skills/lark-okr/references/lark-okr-cycle-list.md +17 -7
  183. package/skills/lark-okr/references/lark-okr-entities.md +1 -0
  184. package/skills/lark-okr/references/lark-okr-indicator-update.md +3 -1
  185. package/skills/lark-okr/references/lark-okr-indicators.md +61 -12
  186. package/skills/lark-okr/references/lark-okr-progress-list.md +21 -9
  187. package/skills/lark-shared/SKILL.md +3 -3
  188. package/skills/lark-sheets/SKILL.md +83 -82
  189. package/skills/lark-sheets/references/lark-sheets-batch-update.md +13 -58
  190. package/skills/lark-sheets/references/lark-sheets-chart.md +2 -1
  191. package/skills/lark-sheets/references/lark-sheets-conditional-format.md +1 -1
  192. package/skills/lark-sheets/references/lark-sheets-range-operations.md +5 -5
  193. package/skills/lark-sheets/references/lark-sheets-read-data.md +80 -6
  194. package/skills/lark-sheets/references/lark-sheets-sheet-structure.md +21 -10
  195. package/skills/lark-sheets/references/lark-sheets-styles-put.md +93 -0
  196. package/skills/lark-sheets/references/lark-sheets-visual-standards.md +2 -2
  197. package/skills/lark-sheets/references/lark-sheets-workbook.md +4 -3
  198. package/skills/lark-sheets/references/lark-sheets-write-cells.md +40 -12
  199. package/skills/lark-sheets/scripts/lark_detect_subtables.py +593 -0
  200. package/skills/lark-sheets/scripts/lark_inspect_workbook.py +188 -0
  201. package/skills/lark-sheets/scripts/lark_profile_table.py +614 -0
  202. package/skills/lark-sheets/scripts/lark_sheet_range.py +176 -0
  203. package/skills/lark-sheets/scripts/lark_sheet_read_cli.py +184 -0
  204. package/skills/lark-sheets/scripts/sheets_df.py +21 -3
  205. package/skills/lark-slides/SKILL.md +134 -104
  206. package/skills/lark-slides/references/asset-planning.md +6 -4
  207. package/skills/lark-slides/references/iconpark.md +2 -2
  208. package/skills/lark-slides/references/lark-slides-add-slide.md +92 -0
  209. package/skills/lark-slides/references/lark-slides-create.md +86 -66
  210. package/skills/lark-slides/references/lark-slides-delete-slide.md +65 -0
  211. package/skills/lark-slides/references/lark-slides-edit-workflows.md +6 -7
  212. package/skills/lark-slides/references/lark-slides-history.md +132 -0
  213. package/skills/lark-slides/references/lark-slides-media-upload.md +4 -27
  214. package/skills/lark-slides/references/lark-slides-pptx-template-workflows.md +7 -11
  215. package/skills/lark-slides/references/lark-slides-replace-slide.md +22 -4
  216. package/skills/lark-slides/references/lark-slides-screenshot.md +33 -15
  217. package/skills/lark-slides/references/lark-slides-update-slide.md +146 -0
  218. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-get.md +2 -2
  219. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-replace.md +2 -3
  220. package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +90 -32
  221. package/skills/lark-slides/references/planning-layer.md +11 -10
  222. package/skills/lark-slides/references/slides_chart_demo.xml +1415 -1
  223. package/skills/lark-slides/references/slides_xml_schema_definition.xml +539 -79
  224. package/skills/lark-slides/references/troubleshooting.md +26 -9
  225. package/skills/lark-slides/references/validation-checklist.md +55 -18
  226. package/skills/lark-slides/references/visual-planning.md +25 -22
  227. package/skills/lark-slides/references/xml-schema-quick-ref.md +299 -51
  228. package/skills/lark-slides/scripts/sxsd_validator.py +1052 -0
  229. package/skills/lark-slides/scripts/xml_text_overlap_lint.py +1964 -195
  230. package/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +4051 -501
  231. package/skills/lark-task/SKILL.md +7 -0
  232. package/skills/lark-task/references/lark-task-complete.md +6 -2
  233. package/skills/lark-task/references/lark-task-create.md +9 -0
  234. package/skills/lark-task/references/lark-task-update.md +6 -2
  235. package/skills/lark-whiteboard/SKILL.md +21 -13
  236. package/skills/lark-whiteboard/elements/layout.md +1 -1
  237. package/skills/lark-whiteboard/elements/schema.md +2 -2
  238. package/skills/lark-whiteboard/references/{lark-whiteboard-query.md → lark-whiteboard-export.md} +17 -16
  239. package/skills/lark-whiteboard/references/lark-whiteboard-update.md +7 -7
  240. package/skills/lark-whiteboard/references/lark-whiteboard-workflow.md +23 -31
  241. package/skills/lark-whiteboard/routes/dsl.md +11 -5
  242. package/skills/lark-whiteboard/routes/mermaid.md +3 -3
  243. package/skills/lark-whiteboard/routes/svg-edit.md +9 -6
  244. package/skills/lark-whiteboard/routes/svg.md +14 -7
  245. package/skills/lark-whiteboard/scenes/bar-chart.md +1 -1
  246. package/skills/lark-whiteboard/scenes/fishbone.md +1 -1
  247. package/skills/lark-whiteboard/scenes/flywheel.md +1 -1
  248. package/skills/lark-whiteboard/scenes/line-chart.md +1 -1
  249. package/skills/lark-whiteboard/scenes/mention.md +71 -0
  250. package/skills/lark-whiteboard/scenes/treemap.md +1 -1
  251. package/skills/lark-wiki/SKILL.md +6 -3
  252. package/skills/lark-wiki/references/lark-wiki-delete-space.md +6 -3
  253. package/skills/lark-doc/references/lark-doc-word-stat.md +0 -93
  254. package/skills/lark-doc/references/style/lark-doc-create-workflow.md +0 -47
  255. package/skills/lark-doc/references/style/lark-doc-style.md +0 -68
  256. package/skills/lark-doc/references/style/lark-doc-update-workflow.md +0 -48
  257. package/skills/lark-doc/scripts/doc_word_stat.py +0 -1243
  258. package/skills/lark-drive/references/lark-drive-comments-guide.md +0 -80
  259. package/skills/lark-slides/references/examples.md +0 -91
  260. package/skills/lark-slides/references/lark-slides-replace-pages.md +0 -95
  261. package/skills/lark-slides/references/lark-slides-whiteboard.md +0 -331
  262. package/skills/lark-slides/references/lark-slides-xml-get.md +0 -100
  263. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-delete.md +0 -125
  264. package/skills/lark-slides/references/slide-templates.md +0 -201
  265. package/skills/lark-slides/references/slides_demo.xml +0 -226
  266. package/skills/lark-slides/references/xml-format-guide.md +0 -433
@@ -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` | 相关性和可执行性分组。 |
@@ -0,0 +1,248 @@
1
+ # 主题资料收集工作流:审核与计划
2
+
3
+ 由状态 `RELEVANCE_CLASSIFY`、`PLAN_MOVE` 加载。
4
+
5
+ 本文档负责相关性分级、审核 UI、移动计划生成和 `MovePlanItem`。不得重新执行资源解析或内容验证,也不得创建目标、移动资源或执行恢复操作。
6
+
7
+ 本文档只服务 `topic_move_collector`。进入本文档时,`workflow_id` 必须是 `topic_move_collector`;不得把当前任务改路由到其他 workflow。
8
+
9
+ ## 输入契约
10
+
11
+ 进入本文档前必须已有:
12
+
13
+ 1. `resource_items`,且每个 `ResourceItem` 已包含稳定 `resource_id`、资源类型、移动所需 token、结构化当前父级、权限状态、内容验证状态和证据。
14
+ 2. `content_verify_completed=true`。
15
+ 3. 每个资源都有内容证据、搜索证据复用说明或明确跳过原因。
16
+
17
+ `ResourceItem` schema 和字段生成规则由 [`lark-drive-workflow-topic-move-collector-resolve-verify.md`](lark-drive-workflow-topic-move-collector-resolve-verify.md) 负责。只要上述输入契约完整,本状态不得为重复读取 schema 而重新加载或执行前一阶段文档。
18
+
19
+ 如果输入字段缺失、资源需要重新解析或用户要求重新读取证据,废弃受影响的相关性和计划结果,返回 `RESOURCE_RESOLVE` 或 `CONTENT_VERIFY`,并加载资源解析与内容验证文档;不得在本状态补猜。
20
+
21
+ ## 状态:`RELEVANCE_CLASSIFY`
22
+
23
+ 进入条件:`CONTENT_VERIFY` 已完成,`content_verify_completed=true`,且每个 `ResourceItem` 都已有验证状态或跳过验证原因。
24
+
25
+ 禁止条件:
26
+
27
+ 1. 只有 `candidate_items`,没有 `resource_items`。
28
+ 2. 资源未经过 `RESOURCE_RESOLVE`。
29
+ 3. 资源没有 `RESOURCE_RESOLVE` 写入的移动资格状态。
30
+ 4. 资源没有 `CONTENT_VERIFY` 写入的验证状态或跳过验证原因。
31
+ 5. 上一完成状态是 `RESOURCE_RESOLVE`,或 `content_verify_completed` 不为 `true`。
32
+
33
+ 必须将每个资源归入且只归入一个分组:
34
+
35
+ | 分组 | 说明 | 默认移动 |
36
+ |-------|------|--------------|
37
+ | `high` | 可移动资源,且主题或内容直接命中,有明确标题 / 正文 / 表格 / 评论证据。 | 是 |
38
+ | `medium` | 可移动资源,可能相关,但证据不足或只命中弱相关片段。 | 否,需用户选择 |
39
+ | `low` | 可移动资源,弱相关或噪声,保留展示但不建议移动。 | 否 |
40
+ | `permission_denied` | 当前身份无权读取或解析,不能验证内容。 | 否 |
41
+ | `no_move_permission` | 已确认当前身份不具备移动资格。 | 否 |
42
+ | `move_permission_unknown` | 无法确认当前身份是否具备移动资格。 | 否 |
43
+ | `unverifiable` | 类型或工具限制导致无法验证内容。 | 否 |
44
+ | `unsupported_move_target` | 目标方向或资源类型不支持移动。 | 否 |
45
+
46
+ `high`、`medium` 和 `low` 只能包含 `move_permission_state=movable` 且 `target_write_state=confirmed` 的资源。
47
+
48
+ 判为高相关至少需要一个强证据:
49
+
50
+ 1. 标题或内容中出现精确主题短语。
51
+ 2. 多个主题词在相关上下文中同时出现。
52
+ 3. Sheet / 表格单元格明确匹配用户主题。
53
+ 4. 用户明确提供的文档名或项目别名命中。
54
+
55
+ 中相关示例:
56
+
57
+ 1. 标题包含一个主题词,但内容无法确认。
58
+ 2. 搜索摘要看起来相关,但无法完整读取。
59
+ 3. 别名命中合理但证据不够强。
60
+
61
+ ## 审核 UI
62
+
63
+ 必须展示每个分组中的资源名称。
64
+
65
+ 默认展示规则:
66
+
67
+ 1. 展开 `high` 和 `medium`。
68
+ 2. 折叠 `low`、`permission_denied`、`no_move_permission`、`move_permission_unknown`、`unverifiable` 和 `unsupported_move_target`,但展示数量并允许展开。
69
+ 3. 每个可见资源展示标题、类型、当前位置、证据和默认动作。
70
+ 4. 除非用户要求技术细节,否则不展示原始 token。
71
+
72
+ 示例:
73
+
74
+ ```text
75
+ 筛选结果:
76
+
77
+ 搜索范围:<当前用户 owner / 负责的资源 | 所有当前身份可见资源>
78
+
79
+ 高相关(默认移动):
80
+ - 标题|类型|证据|当前位置
81
+
82
+ 中相关(需你勾选后才移动):
83
+ - 标题|类型|证据|当前位置
84
+
85
+ 未默认移动:
86
+ - 低相关:N 项
87
+ - 无权限:N 项
88
+ - 无移动权限:N 项
89
+ - 移动权限未知:N 项
90
+ - 无法验证:N 项
91
+ - 不支持移动:N 项
92
+
93
+ 你可以选择:
94
+ 1. 确认按默认规则生成移动计划。
95
+ 2. 勾选要加入计划的中相关资源。
96
+ 3. 要求把某些资源移到其他分组或从计划中移除。
97
+ 4. 展开低相关 / 无权限 / 无移动权限 / 移动权限未知 / 无法验证 / 不支持移动分组查看名称。
98
+ ```
99
+
100
+ ### 用户调整规则
101
+
102
+ 如果用户不同意相关性结果,必须基于用户要求更新 `relevance_groups`,再重新展示分组结果并重新生成后续移动计划。
103
+
104
+ 典型调整包括:
105
+
106
+ 1. 从 `high` 中移除某个资源。
107
+ 2. 将 `medium` 中某个资源提升为 `high`。
108
+ 3. 将某个资源标为 `low` 或不移动。
109
+ 4. 要求重新读取证据或重新判断一批资源。
110
+ 5. 要求重新确认某些资源的移动权限。
111
+
112
+ 用户调整后:
113
+
114
+ 1. 旧的 `move_plan_items` 立即失效。
115
+ 2. 必须先输出“调整后相关性结果”,展示被调整项、各分组数量和高 / 中相关资源名称。
116
+ 3. 不得只回复“已调整”,也不得直接跳到 `CONFIRM_EXECUTION`。
117
+ 4. 必须基于新的 `relevance_groups` 重新执行 `PLAN_MOVE`。
118
+ 5. 不得把 `no_move_permission` 或 `move_permission_unknown` 资源直接提升到 `high` / `medium`;必须先回到 `RESOURCE_RESOLVE`,加载 [`lark-drive-workflow-topic-move-collector-resolve-verify.md`](lark-drive-workflow-topic-move-collector-resolve-verify.md) 取得可移动证据。
119
+
120
+ ### 调整后结果 UI
121
+
122
+ ```text
123
+ 已按你的要求调整相关性结果:
124
+ - <标题>:<原分组> -> <新分组>
125
+
126
+ 调整后分组:
127
+
128
+ 搜索范围:<当前用户 owner / 负责的资源 | 所有当前身份可见资源>
129
+
130
+ 高相关(默认移动):N 项
131
+ - 标题|类型|证据|当前位置
132
+
133
+ 中相关(需你勾选后才移动):N 项
134
+ - 标题|类型|证据|当前位置
135
+
136
+ 未默认移动:
137
+ - 低相关:N 项
138
+ - 无权限:N 项
139
+ - 无移动权限:N 项
140
+ - 移动权限未知:N 项
141
+ - 无法验证:N 项
142
+ - 不支持移动:N 项
143
+
144
+ 接下来会基于这个调整后的结果重新生成移动计划;你也可以继续调整。
145
+ ```
146
+
147
+ ## 状态:`PLAN_MOVE`
148
+
149
+ 进入条件:相关性分组已准备。
150
+
151
+ 必须:
152
+
153
+ 1. 当 `target_location.create_required=true` 时,纳入目标创建计划。
154
+ 2. 生成移动计划前,比较规范化的当前父级与目标父级;已在目标位置的资源生成 `skip_resource`,设置 `skip_reason=already_at_target`,不得生成移动命令。
155
+ 3. 默认纳入全部 `high`、`move_permission_state=movable` 且 `target_write_state=confirmed` 的资源。
156
+ 4. 只有用户明确选择时,才纳入 `medium`、`move_permission_state=movable` 且 `target_write_state=confirmed` 的资源。
157
+ 5. 默认排除 `low`、`permission_denied`、`no_move_permission`、`move_permission_unknown`、`unverifiable` 和 `unsupported_move_target`。
158
+ 6. 为每个跳过项生成 `skip_reason`。
159
+ 7. 为每个计划项生成稳定 `plan_id`,并使用 `resource_id` 连接对应资源;不得按标题或临时 token 猜测关联。
160
+ 8. 按 `command_family` 保存完整、不可变的 `command_args`;不得把 Wiki 底层对象 token 当作 Wiki 节点移动 token。
161
+ 9. 为每个 `move_resource` 项复制执行前恢复所需的完整 `rollback_input`,使确认计划不依赖运行时回查 `ResourceItem`。
162
+ 10. 当前父级无法结构化解析或属于 Drive / Wiki 跨容器移动时,设置 `rollback_supported=false` 和明确 `rollback_blocker`;该单项仍可进入确认,但必须逐项展示不可恢复风险,不得阻塞其他独立项。
163
+ 11. 停止并等待用户选择或执行意图。
164
+ 12. 不得为 `move_permission_state!=movable` 或 `target_write_state!=confirmed` 的资源生成 `move_resource` 计划项。
165
+
166
+ ### 已在目标位置判定
167
+
168
+ 1. `drive_move` 比较 `current_parent_kind` 和目标 Drive 父级,并比较规范化后的 `current_parent_token` / root 标识。
169
+ 2. `wiki_move_node` 比较 `current_parent_space_id`、`current_parent_kind` 和 `current_parent_token`;Wiki 空间根节点使用明确的 root 标识,不得用空字符串和未知状态混淆。
170
+ 3. 只有父级类型、space ID(适用时)和 token 都已解析且相等时,才能设置 `skip_reason=already_at_target`;父级未知时不得猜测为相等。
171
+
172
+ ### 移动 token 选择
173
+
174
+ | `command_family` | `command_args` 必须包含 |
175
+ |------------------|---------------------------|
176
+ | `drive +move` | `file_token`、`type`、`folder_token`;移动到 Drive root 时显式记录 `folder_token` 为空且目标类型为 root。 |
177
+ | `wiki +move`(node) | `node_token`,以及 `target_space_id` 或 `target_parent_token`;可选 `source_space_id`。不得使用 `wiki_obj_token` 代替 `node_token`。 |
178
+ | `wiki +move`(docs-to-wiki) | `obj_type`、`obj_token`、`target_space_id`、可选 `target_parent_token`,并显式保存 `apply=false`。 |
179
+ | `wiki +move-to-drive` | `node_token`、`folder_token`;移动到 Drive root 时显式记录 `folder_token` 为空。 |
180
+ | `drive +create-folder` | `name`、父级 `folder_token`;创建在 Drive root 时显式记录父级为空。 |
181
+ | `wiki +node-create` | `space_id`、`title`、`obj_type`、可选 `parent_node_token`。 |
182
+ | `none` | 不执行命令,保留 `skip_reason`。 |
183
+
184
+ 目标由本次 workflow 创建时,对应目标参数保存 `created_by_plan:<create_target plan_id>` 引用。`EXECUTE` 只允许把该引用替换为对应创建计划返回的 token;不得重新搜索或猜测目标。
185
+
186
+ ### 计划 UI
187
+
188
+ ```text
189
+ 移动计划已生成:
190
+ - 默认将移动高相关:N 项
191
+ - 你已选择中相关:N 项
192
+ - 其中不可自动恢复:N 项
193
+ - 已在目标位置:N 项
194
+ - 不会移动:N 项
195
+ - 无移动权限:N 项
196
+ - 移动权限未知:N 项
197
+
198
+ 你可以回复“确认执行”,也可以继续调整分组、增减中相关资源,或取消本次移动。
199
+ ```
200
+
201
+ ## MovePlanItem
202
+
203
+ ```json
204
+ {
205
+ "plan_id": "稳定计划项 ID",
206
+ "resource_id": "对应 ResourceItem.resource_id;create_target 为空",
207
+ "action_type": "create_target|move_resource|skip_resource|unsupported",
208
+ "title": "资源或目标名称",
209
+ "resource_type": "源资源类型",
210
+ "move_method": "drive_move|wiki_move_node|wiki_move_docs_to_wiki|wiki_move_to_drive|none",
211
+ "command_family": "具体 shortcut 命令或 none",
212
+ "command_args": {
213
+ "<arg>": "按 command_family 参数表保存的完整、类型明确的参数"
214
+ },
215
+ "source_path": "用户确认时展示的源位置",
216
+ "target_path": "用户确认时展示的目标位置",
217
+ "move_permission_state": "movable|denied|unknown|not_required",
218
+ "target_write_state": "confirmed|unknown|denied",
219
+ "reason": "纳入或跳过原因",
220
+ "skip_reason": "already_at_target 或其他跳过原因",
221
+ "rollback_input": {
222
+ "source_kind": "drive|wiki",
223
+ "original_token": "原始 Drive / obj token",
224
+ "original_node_token": "原始 Wiki node token",
225
+ "resource_type": "恢复命令需要的资源类型",
226
+ "original_parent_kind": "drive_folder|drive_root|wiki_node|wiki_space_root|unknown",
227
+ "original_parent_token": "原始父级 token",
228
+ "original_space_id": "原始 Wiki space_id",
229
+ "original_path": "执行前路径"
230
+ },
231
+ "rollback_supported": "是否支持自动恢复",
232
+ "rollback_blocker": "不可自动恢复原因",
233
+ "execution_status": "pending|success|failed|skipped"
234
+ }
235
+ ```
236
+
237
+ | 字段 | 说明 |
238
+ |-------|------|
239
+ | `plan_id` | 稳定计划项 ID,用于连接计划、快照和执行日志。 |
240
+ | `resource_id` | 稳定资源 ID,用于连接确认计划和解析结果;`create_target` 为空。执行阶段不得依赖该关联回查可变参数。 |
241
+ | `action_type` | 计划动作类型。 |
242
+ | `move_method` | 实际使用的移动方式。 |
243
+ | `command_family` / `command_args` | 用户确认的完整写命令及参数快照;确认后保持不可变。目标待创建时只允许使用 `created_by_plan:<plan_id>` 引用。 |
244
+ | `move_permission_state` / `target_write_state` | 用户确认时的权限门禁快照;`move_resource` 必须分别为 `movable` / `confirmed`。`create_target` 的移动权限为 `not_required`,但父级写入权限仍必须为 `confirmed`。 |
245
+ | `rollback_input` | 从 `ResourceItem` 复制出的完整恢复输入;仅 `move_resource` 必填,生成确认计划后不得再回查或猜测。 |
246
+ | `rollback_supported` | 是否支持自动恢复。 |
247
+ | `rollback_blocker` | 不可自动恢复原因;跨容器移动使用 `cross_container_permission_model_not_losslessly_restorable`,原父级 token 缺失使用 `original_parent_token_unavailable`。 |
248
+ | `execution_status` | 执行状态。 |
@@ -0,0 +1,174 @@
1
+ # 主题资料收集工作流:输入与目标确认
2
+
3
+ 由状态 `PARSE_INPUT`、`RESOLVE_TARGET`、`CONFIRM_CONTEXT` 加载。
4
+
5
+ 本文档负责用户输入解析、目标位置解析、搜索前确认和 `TargetLocation`。不得执行搜索召回、资源分类、目标创建或资源移动。
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. 解析 Drive 目标时,遵循 [`lark-drive-inspect.md`](lark-drive-inspect.md)、[`lark-drive-create-folder.md`](lark-drive-create-folder.md) 和 [`lark-drive-search.md`](lark-drive-search.md)。
15
+ 3. 解析 Wiki 目标时,遵循 [`../../lark-wiki/SKILL.md`](../../lark-wiki/SKILL.md)、[`../../lark-wiki/references/lark-wiki-node-get.md`](../../lark-wiki/references/lark-wiki-node-get.md) 和 [`../../lark-wiki/references/lark-wiki-node-create.md`](../../lark-wiki/references/lark-wiki-node-create.md)。
16
+
17
+ ## 状态:`PARSE_INPUT`
18
+
19
+ 进入条件:workflow 被触发。
20
+
21
+ 必须:
22
+
23
+ 1. 提取 `topic`、`target`、`identity`、`owner_scope` 和 `constraints`。
24
+ 2. 将 `topic` 和 `target` 视为必填字段。
25
+ 3. 除非用户明确要求 bot / app 视角,否则 `identity` 默认使用用户身份。
26
+ 4. 默认 `allow_cross_container_move=true`,但必须在 `CONFIRM_CONTEXT` 展示。
27
+ 5. 默认 `owner_scope=mine`,表示只搜索当前用户 owner / 负责的资源。
28
+ 6. 只有用户明确要求“不限 owner”“包括共享给我的”“所有我能看到的文档”或“全量搜索”时,才设置 `owner_scope=all_visible`。
29
+ 7. 除非用户明确提供限制,否则 `constraints` 保持为空。
30
+ 8. 如果缺少 `topic` 或 `target`,只提出最小澄清问题。
31
+
32
+ ### 输入字段
33
+
34
+ | 字段 | 说明 |
35
+ |-------|------|
36
+ | `topic` | 用户要查找的主题、关键词、内容线索、同义词、缩写、排除词。 |
37
+ | `target` | 归档目标,可以是已有 Drive 文件夹、已有 Wiki 节点、待创建 Drive 文件夹或待创建 Wiki 节点。 |
38
+ | `identity` | 执行身份,默认 `--as user`。 |
39
+ | `owner_scope` | 搜索 owner 范围,默认 `mine`;`all_visible` 仅在用户明确要求扩展到所有可见资源时使用。 |
40
+ | `constraints` | 用户显式给出的类型、时间、创建人、评论、标题、范围等限制。 |
41
+ | `allow_cross_container_move` | 是否允许跨 Drive / Wiki 容器移动;默认允许,但必须确认。 |
42
+
43
+ ### 澄清模板
44
+
45
+ ```text
46
+ 我还需要补齐两个信息后才能开始:
47
+
48
+ 1. 要查找的主题 / 关键词 / 内容线索是什么?
49
+ 2. 找到后要移动到哪个 Drive 文件夹或 Wiki 节点?如果需要新建目标,也请说明父级位置和新名称。
50
+ ```
51
+
52
+ ## 状态:`RESOLVE_TARGET`
53
+
54
+ 进入条件:`topic` 和 `target` 已获得。
55
+
56
+ 必须:
57
+
58
+ 1. 将已有目标解析为具体 token。
59
+ 2. 如果目标需要创建,只解析父级位置和新目标名称。
60
+ 3. 在本状态中不得创建文件夹或 Wiki 节点。
61
+ 4. 分别保留 Drive 文件夹 token、Wiki 节点 token、Wiki 对象 token、space ID 和 parent token。
62
+ 5. 如果目标 URL / token 存在,但当前身份无法读取或解析目标位置,设置 `target_resolve_status=permission_denied`,保持在 `RESOLVE_TARGET` 并等待用户更换目标或结束;不得进入搜索。
63
+ 6. 如果已知移动方向不支持,尽早标记。
64
+
65
+ ### 目标解析
66
+
67
+ | 条件 | agent 必须执行 | 设置 `target_type` |
68
+ |-----------|---------------|-------------------|
69
+ | 已有 Drive 文件夹 URL 或 token | 有 URL 时用 `drive +inspect` 解析;保留 `folder_token` | `drive_folder` |
70
+ | 已有 Wiki 节点 URL 或 token | 用 `wiki +node-get` 或 `drive +inspect` 解析;保留 `wiki_node_token` 和 `space_id` | `wiki_node` |
71
+ | 在已知父级下新建 Drive 文件夹 | 解析父文件夹;保存新文件夹名称;不创建 | `new_drive_folder` |
72
+ | 在已知父级下新建 Wiki 节点 | 解析知识空间和可选父节点;保存新节点标题;不创建 | `new_wiki_node` |
73
+ | 以 Wiki 空间根节点作为目标 | 解析 `space_id`;parent token 可以为空 | `wiki_space` |
74
+ | 目标名称有歧义 | 仅在必要时搜索或列出候选;展示候选并等待用户选择 | `unknown` |
75
+
76
+ ### 目标解析状态
77
+
78
+ | 条件 | `target_resolve_status` |
79
+ |------|--------------------------|
80
+ | 目标已解析,或待创建目标的父级位置已解析 | `resolved` |
81
+ | 目标名称有歧义、候选不唯一,或 `target_type=unknown` 需要用户选择 | `ambiguous` |
82
+ | 已知目标方向或目标类型不支持本 workflow | `unsupported` |
83
+ | 目标 URL / token 存在,但当前身份无权读取、解析或确认目标位置 | `permission_denied` |
84
+
85
+ ### 目标解析出口门禁
86
+
87
+ | `target_resolve_status` | 下一状态 | agent 必须执行 |
88
+ |-------------------------|----------|----------------|
89
+ | `resolved` | `CONFIRM_CONTEXT` | 展示已解析目标并进入搜索前确认。 |
90
+ | `ambiguous` | 保持 `RESOLVE_TARGET` | 展示候选并等待用户选择;不得进入 `CONFIRM_CONTEXT`。 |
91
+ | `unsupported` | 保持 `RESOLVE_TARGET` | 展示不支持原因,等待用户更换目标或结束;不得搜索。 |
92
+ | `permission_denied` | 保持 `RESOLVE_TARGET` | 展示权限 blocker,等待用户更换目标或结束;不得搜索。 |
93
+
94
+ 用户提供新目标后,重新执行 `RESOLVE_TARGET`。只有新的解析结果为 `resolved`,才能进入 `CONFIRM_CONTEXT`;用户选择结束时进入 `DONE`。
95
+
96
+ ### 跨容器规则
97
+
98
+ | 来源 -> 目标 | 默认规则 |
99
+ |------------------|---------|
100
+ | Drive 资源 -> Drive 文件夹 | 支持,使用 `drive +move`。 |
101
+ | Drive 文档类资源 -> Wiki 节点 / 空间 | 资源类型支持时,使用 `wiki +move`。 |
102
+ | Wiki 节点 -> Wiki 节点 / 空间 | 支持,使用 `wiki +move --node-token`。 |
103
+ | Wiki 节点 -> Drive 文件夹 | `wiki +move-to-drive`。 |
104
+
105
+ ## 状态:`CONFIRM_CONTEXT`
106
+
107
+ 进入条件:`target_resolve_status=resolved`。
108
+
109
+ 必须:
110
+
111
+ 1. 展示主题、目标、身份、搜索 owner 范围、限制和目标解析字段。
112
+ 2. 说明下一步只进行搜索 / 读取。
113
+ 3. 说明是否计划创建目标,但尚未执行。
114
+ 4. 展示是否允许跨容器移动。
115
+ 5. 在进入 `SEARCH_RECALL` 前停止并等待用户确认。
116
+ 6. 如果 `owner_scope=all_visible`,明确提示候选数量可能较多,且可能包含无法移动的资源。
117
+
118
+ ### 确认 UI
119
+
120
+ ```text
121
+ 我先确认本次收集任务。
122
+
123
+ 查找主题:
124
+ 目标位置:
125
+ 目标解析:
126
+ 执行身份:
127
+ 搜索范围:
128
+ 可选限制:
129
+ 跨容器移动:
130
+ 下一步操作:只进行搜索和读取验证,不创建目标,不移动资源。
131
+
132
+ 请确认是否按以上信息开始搜索?
133
+ ```
134
+
135
+ 默认搜索范围文案:
136
+
137
+ ```text
138
+ 搜索范围:当前用户 owner / 负责的资源
139
+ ```
140
+
141
+ 扩展搜索范围文案:
142
+
143
+ ```text
144
+ 搜索范围:所有当前身份可见资源
145
+ 风险提示:候选数量可能较多,且部分资源可能无法移动;后续仍会经过资源解析和内容验证。
146
+ ```
147
+
148
+ 如果用户修改任一字段,更新 `topic`、`target_location`、`owner_scope` 或 `constraints`,然后只重新执行受影响的 setup 状态,再次展示确认信息。
149
+
150
+ ## TargetLocation
151
+
152
+ ```json
153
+ {
154
+ "target_type": "drive_folder|wiki_node|wiki_space|new_drive_folder|new_wiki_node|unknown",
155
+ "target_token": "已有目标的 folder_token 或 wiki_node_token",
156
+ "parent_token": "待创建目标的父级 folder_token 或 wiki_node_token",
157
+ "space_id": "知识库空间 ID",
158
+ "target_name": "待创建目标名称",
159
+ "create_required": false,
160
+ "allow_cross_container_move": true,
161
+ "target_resolve_status": "resolved|ambiguous|unsupported|permission_denied"
162
+ }
163
+ ```
164
+
165
+ | 字段 | 说明 |
166
+ |-------|------|
167
+ | `target_type` | 目标位置类型,用于决定后续创建和移动命令。 |
168
+ | `target_token` | 已有目标的可执行 token。 |
169
+ | `parent_token` | 待创建目标的父级位置 token。 |
170
+ | `space_id` | Wiki 目标所属知识空间 ID。 |
171
+ | `target_name` | 待创建目标的名称。 |
172
+ | `create_required` | 是否需要在 `EXECUTE` 阶段创建目标。 |
173
+ | `allow_cross_container_move` | 是否允许 Drive / Wiki 之间移动。 |
174
+ | `target_resolve_status` | 目标位置解析状态;不要和 `ResourceItem.item_resolve_status` 混用。 |