@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.
- package/README.md +5 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -2
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/skills/lark-apps/SKILL.md +59 -14
- package/skills/lark-apps/creative-design/agents/assets/vision-probe.png +0 -0
- package/skills/lark-apps/creative-design/agents/fork-verifier-agent.md +71 -0
- package/skills/lark-apps/creative-design/agents/vision-probe-agent.md +41 -0
- package/skills/lark-apps/creative-design/assets/index.html +27 -0
- package/skills/lark-apps/creative-design/creative-design.md +239 -0
- package/skills/lark-apps/creative-design/references/aily.md +39 -0
- package/skills/lark-apps/creative-design/references/animated-video.md +34 -0
- package/skills/lark-apps/creative-design/references/charts.md +165 -0
- package/skills/lark-apps/creative-design/references/claude.md +36 -0
- package/skills/lark-apps/creative-design/references/codex.md +32 -0
- package/skills/lark-apps/creative-design/references/data-report.md +108 -0
- package/skills/lark-apps/creative-design/references/frontend-design.md +71 -0
- package/skills/lark-apps/creative-design/references/hi-fi-design.md +32 -0
- package/skills/lark-apps/creative-design/references/interactive-prototype.md +24 -0
- package/skills/lark-apps/creative-design/references/make-a-deck.md +133 -0
- package/skills/lark-apps/creative-design/references/visual-exposure.md +82 -0
- package/skills/lark-apps/creative-design/references/wireframe.md +14 -0
- package/skills/lark-apps/creative-design/starter-components/android-frame.jsx +188 -0
- package/skills/lark-apps/creative-design/starter-components/animations.jsx +773 -0
- package/skills/lark-apps/creative-design/starter-components/browser-window.jsx +122 -0
- package/skills/lark-apps/creative-design/starter-components/deck-stage.js +2483 -0
- package/skills/lark-apps/creative-design/starter-components/design-canvas.jsx +1432 -0
- package/skills/lark-apps/creative-design/starter-components/ios-frame.jsx +270 -0
- package/skills/lark-apps/creative-design/starter-components/macos-window.jsx +197 -0
- package/skills/lark-apps/creative-design/starter-components/tweaks-panel.jsx +752 -0
- package/skills/lark-apps/references/lark-apps-automation.md +80 -2
- package/skills/lark-apps/references/lark-apps-cache.md +61 -0
- package/skills/lark-apps/references/lark-apps-cloud-dev.md +5 -5
- package/skills/lark-apps/references/lark-apps-create.md +6 -4
- package/skills/lark-apps/references/lark-apps-db.md +1 -1
- package/skills/lark-apps/references/lark-apps-env-pull.md +1 -1
- package/skills/lark-apps/references/lark-apps-file.md +2 -2
- package/skills/lark-apps/references/lark-apps-get.md +1 -1
- package/skills/lark-apps/references/lark-apps-git-credential.md +1 -1
- package/skills/lark-apps/references/lark-apps-html-publish.md +4 -8
- package/skills/lark-apps/references/lark-apps-init.md +1 -1
- package/skills/lark-apps/references/lark-apps-list.md +2 -2
- package/skills/lark-apps/references/lark-apps-local-dev.md +80 -11
- package/skills/lark-apps/references/lark-apps-openapi-key.md +1 -1
- package/skills/lark-apps/references/lark-apps-release-create.md +2 -2
- package/skills/lark-apps/references/lark-apps-release-get.md +3 -3
- package/skills/lark-base/SKILL.md +34 -19
- package/skills/lark-base/references/lark-base-cell-value.md +3 -3
- package/skills/lark-base/references/lark-base-dashboard-block-get-data.md +17 -1
- package/skills/lark-base/references/lark-base-dashboard.md +17 -4
- package/skills/lark-base/references/lark-base-data-query-guide.md +8 -0
- package/skills/lark-base/references/lark-base-data-query.md +11 -4
- package/skills/lark-base/references/lark-base-field-create.md +21 -6
- package/skills/lark-base/references/lark-base-field-json.md +9 -6
- package/skills/lark-base/references/lark-base-field-update.md +17 -1
- package/skills/lark-base/references/lark-base-filter-condition.md +179 -0
- package/skills/lark-base/references/lark-base-form-questions-create.md +40 -7
- package/skills/lark-base/references/lark-base-form-questions-update.md +73 -20
- package/skills/lark-base/references/lark-base-form-submit.md +16 -7
- package/skills/lark-base/references/lark-base-record-batch-create.md +12 -10
- package/skills/lark-base/references/lark-base-record-batch-update.md +11 -9
- package/skills/lark-base/references/lark-base-record-upsert.md +1 -1
- package/skills/lark-base/references/lark-base-role-guide.md +11 -0
- package/skills/lark-base/references/lark-base-view-set-filter.md +11 -137
- package/skills/lark-base/references/role-config.md +31 -5
- package/skills/lark-calendar/SKILL.md +14 -8
- package/skills/lark-calendar/references/lark-calendar-create.md +6 -5
- package/skills/lark-calendar/references/lark-calendar-recurring.md +1 -0
- package/skills/lark-calendar/references/lark-calendar-room-find.md +2 -1
- package/skills/lark-calendar/references/lark-calendar-schedule-clear-time.md +1 -0
- package/skills/lark-calendar/references/lark-calendar-suggestion.md +1 -1
- package/skills/lark-calendar/references/lark-calendar-update.md +10 -4
- package/skills/lark-contact/SKILL.md +19 -3
- package/skills/lark-contact/references/lark-contact-search-bot.md +60 -0
- package/skills/lark-doc/SKILL.md +26 -61
- package/skills/lark-doc/references/genres/business-analysis.md +30 -0
- package/skills/lark-doc/references/genres/data-report.md +32 -0
- package/skills/lark-doc/references/genres/email.md +38 -0
- package/skills/lark-doc/references/genres/execution-plan.md +27 -0
- package/skills/lark-doc/references/genres/formal-doc.md +37 -0
- package/skills/lark-doc/references/genres/meeting-minutes.md +24 -0
- package/skills/lark-doc/references/genres/memo-brief.md +25 -0
- package/skills/lark-doc/references/genres/official-redhead.md +73 -0
- package/skills/lark-doc/references/genres/prd.md +26 -0
- package/skills/lark-doc/references/genres/proposal.md +24 -0
- package/skills/lark-doc/references/genres/research-report.md +32 -0
- package/skills/lark-doc/references/genres/retrospective.md +25 -0
- package/skills/lark-doc/references/genres/route-consumer.md +37 -0
- package/skills/lark-doc/references/genres/route-creative.md +36 -0
- package/skills/lark-doc/references/genres/route-knowledge.md +39 -0
- package/skills/lark-doc/references/genres/route-marketing.md +40 -0
- package/skills/lark-doc/references/genres/route-media.md +36 -0
- package/skills/lark-doc/references/genres/route-opinion.md +38 -0
- package/skills/lark-doc/references/genres/route-personal-brand.md +36 -0
- package/skills/lark-doc/references/genres/route-platform.md +9 -0
- package/skills/lark-doc/references/genres/route-report.md +10 -0
- package/skills/lark-doc/references/genres/route-workplace.md +17 -0
- package/skills/lark-doc/references/genres/sop-tutorial.md +41 -0
- package/skills/lark-doc/references/genres/technical-doc.md +39 -0
- package/skills/lark-doc/references/genres/wechat.md +39 -0
- package/skills/lark-doc/references/genres/weekly-report.md +24 -0
- package/skills/lark-doc/references/genres/white-paper.md +32 -0
- package/skills/lark-doc/references/genres/xiaohongshu.md +38 -0
- package/skills/lark-doc/references/lark-doc-create-workflow.md +121 -0
- package/skills/lark-doc/references/lark-doc-create.md +22 -48
- package/skills/lark-doc/references/lark-doc-fetch.md +84 -93
- package/skills/lark-doc/references/lark-doc-history.md +16 -15
- package/skills/lark-doc/references/lark-doc-md.md +5 -1
- package/skills/lark-doc/references/lark-doc-media-download.md +2 -1
- package/skills/lark-doc/references/lark-doc-script.md +76 -0
- package/skills/lark-doc/references/lark-doc-update.md +70 -222
- package/skills/lark-doc/references/lark-doc-whiteboard.md +14 -17
- package/skills/lark-doc/references/lark-doc-xml-extended-blocks.md +46 -0
- package/skills/lark-doc/references/lark-doc-xml.md +38 -166
- package/skills/lark-drive/SKILL.md +32 -50
- package/skills/lark-drive/references/lark-drive-add-comment.md +2 -4
- package/skills/lark-drive/references/lark-drive-add-reply.md +47 -0
- package/skills/lark-drive/references/lark-drive-apply-permission.md +3 -3
- package/skills/lark-drive/references/lark-drive-batch-query-comments.md +46 -0
- package/skills/lark-drive/references/lark-drive-comment-content.md +50 -0
- package/skills/lark-drive/references/lark-drive-comment-location.md +9 -15
- package/skills/lark-drive/references/lark-drive-copy.md +87 -0
- package/skills/lark-drive/references/lark-drive-delete-reply.md +48 -0
- package/skills/lark-drive/references/lark-drive-download.md +6 -1
- package/skills/lark-drive/references/lark-drive-export.md +3 -0
- package/skills/lark-drive/references/lark-drive-list-comments.md +25 -68
- package/skills/lark-drive/references/lark-drive-list-replies.md +54 -0
- package/skills/lark-drive/references/lark-drive-member-add.md +2 -2
- package/skills/lark-drive/references/lark-drive-member-list.md +65 -0
- package/skills/lark-drive/references/lark-drive-permission-get-setting.md +48 -0
- package/skills/lark-drive/references/lark-drive-preview.md +11 -1
- package/skills/lark-drive/references/lark-drive-react-reply.md +51 -0
- package/skills/lark-drive/references/lark-drive-reactions.md +27 -25
- package/skills/lark-drive/references/lark-drive-resolve-comment.md +45 -0
- package/skills/lark-drive/references/lark-drive-restore-comment.md +46 -0
- package/skills/lark-drive/references/lark-drive-search.md +7 -1
- package/skills/lark-drive/references/lark-drive-secure-label.md +1 -1
- package/skills/lark-drive/references/lark-drive-task-result.md +3 -0
- package/skills/lark-drive/references/lark-drive-update-reply.md +46 -0
- package/skills/lark-drive/references/lark-drive-update-title.md +78 -0
- package/skills/lark-drive/references/lark-drive-upload.md +1 -0
- package/skills/lark-drive/references/lark-drive-workflow-permission-governance-commands.md +38 -8
- package/skills/lark-drive/references/lark-drive-workflow-permission-governance-outputs.md +10 -10
- package/skills/lark-drive/references/lark-drive-workflow-permission-governance.md +22 -20
- package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-execute.md +273 -0
- package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-recall.md +202 -0
- package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-resolve-verify.md +231 -0
- package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-review-plan.md +248 -0
- package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-setup.md +174 -0
- package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector.md +202 -0
- package/skills/lark-drive/references/lark-drive-workflow.md +5 -4
- package/skills/lark-event/SKILL.md +8 -4
- package/skills/lark-event/references/lark-event-application.md +38 -0
- package/skills/lark-event/references/lark-event-vc.md +8 -2
- package/skills/lark-im/SKILL.md +9 -9
- package/skills/lark-im/references/card/card-2.0-schema.md +1 -1
- package/skills/lark-im/references/card/lark-im-card-style.md +4 -4
- package/skills/lark-im/references/card/resource/icons.md +14 -0
- package/skills/lark-im/references/lark-im-chat-list.md +9 -2
- package/skills/lark-im/references/lark-im-chat-members-list.md +7 -4
- package/skills/lark-im/references/lark-im-chat-messages-list.md +10 -3
- package/skills/lark-im/references/lark-im-chat-search.md +9 -2
- package/skills/lark-im/references/lark-im-feed-group-list-item.md +2 -2
- package/skills/lark-im/references/lark-im-feed-group-list.md +2 -2
- package/skills/lark-im/references/lark-im-feed-shortcut-list.md +1 -1
- package/skills/lark-im/references/lark-im-flag-list.md +9 -8
- package/skills/lark-im/references/lark-im-message-enrichment.md +1 -1
- package/skills/lark-im/references/lark-im-messages-resources-download.md +19 -25
- package/skills/lark-im/references/lark-im-messages-search.md +4 -5
- package/skills/lark-im/references/lark-im-threads-messages-list.md +8 -4
- package/skills/lark-mail/references/lark-mail-triage.md +19 -4
- package/skills/lark-minutes/SKILL.md +1 -1
- package/skills/lark-minutes/references/lark-minutes-search.md +6 -7
- package/skills/lark-okr/SKILL.md +71 -26
- package/skills/lark-okr/references/lark-okr-batch-create.md +19 -18
- package/skills/lark-okr/references/lark-okr-create.md +173 -0
- package/skills/lark-okr/references/lark-okr-cycle-list.md +17 -7
- package/skills/lark-okr/references/lark-okr-entities.md +1 -0
- package/skills/lark-okr/references/lark-okr-indicator-update.md +3 -1
- package/skills/lark-okr/references/lark-okr-indicators.md +61 -12
- package/skills/lark-okr/references/lark-okr-progress-list.md +21 -9
- package/skills/lark-shared/SKILL.md +3 -3
- package/skills/lark-sheets/SKILL.md +83 -82
- package/skills/lark-sheets/references/lark-sheets-batch-update.md +13 -58
- package/skills/lark-sheets/references/lark-sheets-chart.md +2 -1
- package/skills/lark-sheets/references/lark-sheets-conditional-format.md +1 -1
- package/skills/lark-sheets/references/lark-sheets-range-operations.md +5 -5
- package/skills/lark-sheets/references/lark-sheets-read-data.md +80 -6
- package/skills/lark-sheets/references/lark-sheets-sheet-structure.md +21 -10
- package/skills/lark-sheets/references/lark-sheets-styles-put.md +93 -0
- package/skills/lark-sheets/references/lark-sheets-visual-standards.md +2 -2
- package/skills/lark-sheets/references/lark-sheets-workbook.md +4 -3
- package/skills/lark-sheets/references/lark-sheets-write-cells.md +40 -12
- package/skills/lark-sheets/scripts/lark_detect_subtables.py +593 -0
- package/skills/lark-sheets/scripts/lark_inspect_workbook.py +188 -0
- package/skills/lark-sheets/scripts/lark_profile_table.py +614 -0
- package/skills/lark-sheets/scripts/lark_sheet_range.py +176 -0
- package/skills/lark-sheets/scripts/lark_sheet_read_cli.py +184 -0
- package/skills/lark-sheets/scripts/sheets_df.py +21 -3
- package/skills/lark-slides/SKILL.md +134 -104
- package/skills/lark-slides/references/asset-planning.md +6 -4
- package/skills/lark-slides/references/iconpark.md +2 -2
- package/skills/lark-slides/references/lark-slides-add-slide.md +92 -0
- package/skills/lark-slides/references/lark-slides-create.md +86 -66
- package/skills/lark-slides/references/lark-slides-delete-slide.md +65 -0
- package/skills/lark-slides/references/lark-slides-edit-workflows.md +6 -7
- package/skills/lark-slides/references/lark-slides-history.md +132 -0
- package/skills/lark-slides/references/lark-slides-media-upload.md +4 -27
- package/skills/lark-slides/references/lark-slides-pptx-template-workflows.md +7 -11
- package/skills/lark-slides/references/lark-slides-replace-slide.md +22 -4
- package/skills/lark-slides/references/lark-slides-screenshot.md +33 -15
- package/skills/lark-slides/references/lark-slides-update-slide.md +146 -0
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-get.md +2 -2
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-replace.md +2 -3
- package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +90 -32
- package/skills/lark-slides/references/planning-layer.md +11 -10
- package/skills/lark-slides/references/slides_chart_demo.xml +1415 -1
- package/skills/lark-slides/references/slides_xml_schema_definition.xml +539 -79
- package/skills/lark-slides/references/troubleshooting.md +26 -9
- package/skills/lark-slides/references/validation-checklist.md +55 -18
- package/skills/lark-slides/references/visual-planning.md +25 -22
- package/skills/lark-slides/references/xml-schema-quick-ref.md +299 -51
- package/skills/lark-slides/scripts/sxsd_validator.py +1052 -0
- package/skills/lark-slides/scripts/xml_text_overlap_lint.py +1964 -195
- package/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +4051 -501
- package/skills/lark-task/SKILL.md +7 -0
- package/skills/lark-task/references/lark-task-complete.md +6 -2
- package/skills/lark-task/references/lark-task-create.md +9 -0
- package/skills/lark-task/references/lark-task-update.md +6 -2
- package/skills/lark-whiteboard/SKILL.md +21 -13
- package/skills/lark-whiteboard/elements/layout.md +1 -1
- package/skills/lark-whiteboard/elements/schema.md +2 -2
- package/skills/lark-whiteboard/references/{lark-whiteboard-query.md → lark-whiteboard-export.md} +17 -16
- package/skills/lark-whiteboard/references/lark-whiteboard-update.md +7 -7
- package/skills/lark-whiteboard/references/lark-whiteboard-workflow.md +23 -31
- package/skills/lark-whiteboard/routes/dsl.md +11 -5
- package/skills/lark-whiteboard/routes/mermaid.md +3 -3
- package/skills/lark-whiteboard/routes/svg-edit.md +9 -6
- package/skills/lark-whiteboard/routes/svg.md +14 -7
- package/skills/lark-whiteboard/scenes/bar-chart.md +1 -1
- package/skills/lark-whiteboard/scenes/fishbone.md +1 -1
- package/skills/lark-whiteboard/scenes/flywheel.md +1 -1
- package/skills/lark-whiteboard/scenes/line-chart.md +1 -1
- package/skills/lark-whiteboard/scenes/mention.md +71 -0
- package/skills/lark-whiteboard/scenes/treemap.md +1 -1
- package/skills/lark-wiki/SKILL.md +6 -3
- package/skills/lark-wiki/references/lark-wiki-delete-space.md +6 -3
- package/skills/lark-doc/references/lark-doc-word-stat.md +0 -93
- package/skills/lark-doc/references/style/lark-doc-create-workflow.md +0 -47
- package/skills/lark-doc/references/style/lark-doc-style.md +0 -68
- package/skills/lark-doc/references/style/lark-doc-update-workflow.md +0 -48
- package/skills/lark-doc/scripts/doc_word_stat.py +0 -1243
- package/skills/lark-drive/references/lark-drive-comments-guide.md +0 -80
- package/skills/lark-slides/references/examples.md +0 -91
- package/skills/lark-slides/references/lark-slides-replace-pages.md +0 -95
- package/skills/lark-slides/references/lark-slides-whiteboard.md +0 -331
- package/skills/lark-slides/references/lark-slides-xml-get.md +0 -100
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-delete.md +0 -125
- package/skills/lark-slides/references/slide-templates.md +0 -201
- package/skills/lark-slides/references/slides_demo.xml +0 -226
- package/skills/lark-slides/references/xml-format-guide.md +0 -433
|
@@ -38,11 +38,11 @@ Risk / Structure: `R2` / `S2`
|
|
|
38
38
|
- 目录组织、迁移、归档或清理;这类需求应使用知识整理 workflow。
|
|
39
39
|
- 内容审查、过期内容判断或知识质量评分。
|
|
40
40
|
- backup owner 补充、部门 / 项目负责人绑定、协作者创建 / 撤销、成员列表审计;本 workflow 只支持把 owner 转移给每个目标明确指定的新 owner,不建模 backup owner 或负责人绑定关系。
|
|
41
|
-
-
|
|
41
|
+
- 文件夹自身公开权限审计或修复。文件夹自身权限设置可以用 `drive +permission-get-setting` 读取;写入是否支持必须以运行时 schema 和明确需求为准,不能猜测执行 `patch type=folder`。
|
|
42
42
|
- 当前身份无法枚举到的不可见文档的完整发现;只能处理已发现目标,或用户显式提供的 URL / token。
|
|
43
43
|
- 未按范围确认的批量写入。
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
协作者列表读取只覆盖当前目标的直接协作者/授权成员:可使用 `drive +member-list` 。
|
|
46
46
|
|
|
47
47
|
## Progressive Load Map
|
|
48
48
|
|
|
@@ -53,7 +53,7 @@ Risk / Structure: `R2` / `S2`
|
|
|
53
53
|
| `PARSE_INTENT` | 本文件、[`lark-drive-workflow.md`](lark-drive-workflow.md)、[`../../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) |
|
|
54
54
|
| `TARGET_INSPECT` | [`lark-drive-inspect.md`](lark-drive-inspect.md) |
|
|
55
55
|
| `DISCOVER_TARGETS` | 容器范围时读取 [`../../lark-wiki/references/lark-wiki-node-list.md`](../../lark-wiki/references/lark-wiki-node-list.md) 或 [`lark-drive-files-list.md`](lark-drive-files-list.md) |
|
|
56
|
-
| `FACT_READ` | `lark-cli schema drive.metas.batch_query
|
|
56
|
+
| `FACT_READ` | `lark-cli schema drive.metas.batch_query`;涉及权限设置读取时使用 `drive +permission-get-setting`;涉及活跃度、访问复核或生命周期判断时再读取 `lark-cli schema drive.file.statistics.get` 和 `lark-cli schema drive.file.view_records.list` |
|
|
57
57
|
| `RISK_ASSESS` | 本文件的 `Risk Classification` |
|
|
58
58
|
| `EXEC_CONFIRM` | 只为用户选择的动作读取 [`lark-drive-apply-permission.md`](lark-drive-apply-permission.md)、[`lark-drive-secure-label.md`](lark-drive-secure-label.md),或 `lark-cli schema drive.permission.public.patch` / `lark-cli schema drive.permission.members.transfer_owner`;需要确认模板时读取 [`lark-drive-workflow-permission-governance-outputs.md`](lark-drive-workflow-permission-governance-outputs.md) |
|
|
59
59
|
| `EXECUTE` | 复用 `EXEC_CONFIRM` 已加载且已确认的写命令上下文 |
|
|
@@ -76,9 +76,9 @@ Risk / Structure: `R2` / `S2`
|
|
|
76
76
|
| State | Protocol Step | Agent MUST Do | User-Facing Output | wait_for_user | Next State |
|
|
77
77
|
|-------|---------------|---------------|--------------------|---------------|------------|
|
|
78
78
|
| `PARSE_INTENT` | `route` / `scope` | 解析 intent、target scope、desired policy,以及只读审计、单目标公开性判断、权限申请、owner 转移还是修复模式;单目标公开性判断设置 `intent=public_exposure_check`、`target_scope=single_resource` | 范围确认;如果缺少目标、新 owner 或期望动作,只问一个澄清问题 | 缺少 target / new owner / action,或容器范围需要用户确认时为 `true` | `TARGET_INSPECT` |
|
|
79
|
-
| `TARGET_INSPECT` | `scope` | 解析单资源、明确列表、Wiki space / node、Drive folder
|
|
79
|
+
| `TARGET_INSPECT` | `scope` | 解析单资源、明确列表、Wiki space / node、Drive folder;Drive folder 直接从 URL 路径或显式 `type=folder` 解析,不调用 `drive +inspect`;保留原始 URL、scope type、canonical token/type | 目标范围表,包含 scope、title/type/token status | 除非解析失败,否则为 `false` | `DISCOVER_TARGETS` or `FACT_READ` |
|
|
80
80
|
| `DISCOVER_TARGETS` | `scope` / `read` | 对 Wiki space / node 或 Drive folder 递归只读枚举,归一化为 `discovered_targets`;记录 `discovery_blockers` | 发现进度和覆盖摘要;不展示内部 cursor/token,除非用户要求 | 除非发现范围无法确认或全部被阻断,否则为 `false` | `FACT_READ` |
|
|
81
|
-
| `FACT_READ` | `read` | 对直接目标或 `discovered_targets` 执行 `drive metas batch_query
|
|
81
|
+
| `FACT_READ` | `read` | 对直接目标或 `discovered_targets` 执行 `drive metas batch_query`;对支持的文件、文件夹或云文档目标执行 `drive +permission-get-setting` 读取自身权限设置;当 `intent=public_exposure_check` 且 `target_scope=single_resource` 时,可复用 `drive +inspect` 返回的 title / URL / type,只补读目标公共访问和协作权限设置;在用户要求活跃度 / 访问复核 / 生命周期判断时读取访问统计和访问记录 | 权限事实摘要、coverage summary、activity facts 和 unsupported checks | 除非所有目标都被 auth 阻断,否则为 `false` | `RISK_ASSESS` |
|
|
82
82
|
| `RISK_ASSESS` | `assess/plan` | 对每个可审计目标生成 `per_target_permission_assessment` 并分类证据;如用户提供 policy,则对照 policy;`public_exposure_check + single_resource` 只渲染单目标结论,不生成 `risk_id`;owner 转移路径生成 `owner_transfer_candidates` / `owner_transfer_plan`;治理路径构建可定位风险清单、访问复核清单、dry-run 整改计划或候选修复计划,完整清单必须生成稳定 `risk_id` | 带 priority、URL、risk_id、owner、sec_label 的 findings、confidence、review items、建议动作和下一步 CTA;单目标公开性判断只输出结论和关键字段 | 治理路径为 `true`,单目标公开性判断为 `false` | `EXEC_CONFIRM` or `DONE` |
|
|
83
83
|
| `EXEC_CONFIRM` | `confirm` | 展示准确写入范围、command family、target count、risk、verification method | 确认请求 | `true` | `EXECUTE` or `DONE` |
|
|
84
84
|
| `EXECUTE` | `execute` | 只执行 `Command Map` 中已确认的写入 | 进度 / 结果摘要 | 除非被阻断,否则为 `false` | `VERIFY` |
|
|
@@ -91,21 +91,23 @@ Risk / Structure: `R2` / `S2`
|
|
|
91
91
|
|
|
92
92
|
| State | Allowed Command Families | Purpose |
|
|
93
93
|
|-------|--------------------------|---------|
|
|
94
|
-
| `TARGET_INSPECT` | `drive +inspect` |
|
|
94
|
+
| `TARGET_INSPECT` | `drive +inspect` | 解析非 folder URL、type、canonical token、title 和 wiki unwrap data;Drive folder 不支持 `+inspect`,必须从 URL 路径或显式 `type=folder` 直接解析 |
|
|
95
95
|
| `DISCOVER_TARGETS` | `wiki +node-list` | 递归发现 Wiki space / node 下当前身份可见的节点 |
|
|
96
96
|
| `DISCOVER_TARGETS` | `drive files list` | 递归发现 Drive folder 下当前身份可见的文件和子文件夹 |
|
|
97
97
|
| `FACT_READ` | `drive metas batch_query` | 读取 title、URL、owner 和 secure-label metadata |
|
|
98
98
|
| `FACT_READ` | `drive permission.public get` | 读取支持类型的文档公共访问和协作权限设置,包括链接分享、对外分享、协作者管理、复制内容、创建副本、打印、下载和评论 |
|
|
99
|
+
| `FACT_READ` | `drive +member-list` | 读取用户显式要求的单目标直接协作者/授权成员列表;不代表完整继承链或历史权限审计 |
|
|
100
|
+
| `FACT_READ` | `drive +permission-get-setting` | 读取支持类型的文件、文件夹或云文档自身权限设置,包括公开访问、分享、协作者管理、安全与评论 |
|
|
99
101
|
| `FACT_READ` | `drive file.statistics get` | 在用户要求活跃度、闲置暴露、生命周期或访问复核时读取文件访问统计 |
|
|
100
102
|
| `FACT_READ` | `drive file.view_records list` | 在用户要求最近访问人、访问复核或低活跃证据时读取访问记录 |
|
|
101
103
|
| `EXEC_CONFIRM` | `drive +secure-label-list` | 提议 label update 前解析可用 secure-label IDs |
|
|
102
|
-
| `EXEC_CONFIRM` | `drive permission.members auth` |
|
|
104
|
+
| `EXEC_CONFIRM` | `drive permission.members auth` | 目标公共访问和协作权限设置修改前检查 `action=manage_public` |
|
|
103
105
|
| `EXEC_CONFIRM` | `lark-cli schema drive.permission.members.transfer_owner` | owner 转移前读取当前字段、支持类型和高风险写入门禁 |
|
|
104
106
|
| `EXECUTE` | `drive +apply-permission` | 向 owner 提交 view/edit access request;只允许单目标、小列表或已明确确认的候选列表逐个执行 |
|
|
105
107
|
| `EXECUTE` | `drive permission.public patch` | 修改已确认的 public/link settings;必须传 `--yes` |
|
|
106
108
|
| `EXECUTE` | `drive permission.members transfer_owner` | 转移已确认目标的 owner;必须传 `--yes` |
|
|
107
109
|
| `EXECUTE` | `drive +secure-label-update` | 设置已确认的 secure-label ID |
|
|
108
|
-
| `VERIFY` | `drive metas batch_query`, `drive permission
|
|
110
|
+
| `VERIFY` | `drive metas batch_query`, `drive +permission-get-setting` | 验证支持的 metadata,包括 owner、secure-label 和目标公共访问与协作权限设置变更;权限申请只能表述为已发起 |
|
|
109
111
|
|
|
110
112
|
## Command Patterns
|
|
111
113
|
|
|
@@ -119,9 +121,9 @@ Risk / Structure: `R2` / `S2`
|
|
|
119
121
|
|
|
120
122
|
1. "所有文档"只表示当前身份在确认范围内可枚举到的文档。不可见、无权限、API 不返回或工具预算不足的部分必须进入 `discovery_blockers` 或 `unsupported_checks`。
|
|
121
123
|
2. 发现阶段必须生成稳定 `path`。不要只保存 title;同名文档必须能通过 path 或 token 区分。
|
|
122
|
-
3.
|
|
124
|
+
3. 权限设置读取使用 `drive +permission-get-setting`,目标类型包括 `doc`、`sheet`、`file`、`wiki`、`bitable`、`docx`、`mindnote`、`minutes`、`slides`、`folder`、`apps`;未来新增类型以 shortcut 和 OpenAPI 元数据为准。
|
|
123
125
|
4. `minutes` 只能作为 `partial_public_permission` 目标:可读取 / 修改公开权限和 owner 转移能力以运行时 schema 为准,但 `drive metas batch_query` 当前不支持 `minutes`,URL、owner、密级等 metadata 可能进入 `unsupported_checks`。
|
|
124
|
-
5. `folder`
|
|
126
|
+
5. `folder` 作为递归容器时先枚举子资源;如用户明确要查询文件夹自身权限设置,可对该文件夹单独执行 `drive +permission-get-setting --token <folder_token> --type folder`。不要执行 raw `permission.public patch type=folder`,除非 schema 和需求都明确支持。`shortcut`、`catalog` 或缺少 stable token/type 的条目必须记录为 unsupported,除非后续 API 明确解析出支持目标。
|
|
125
127
|
6. 对大范围目标输出进度时,只展示已扫描容器数、已发现目标数、已审计目标数、剩余队列或 blocker;不要默认展示内部 page token / cursor。
|
|
126
128
|
|
|
127
129
|
Wiki space / node 发现:
|
|
@@ -133,7 +135,7 @@ Wiki space / node 发现:
|
|
|
133
135
|
|
|
134
136
|
Drive folder 发现:
|
|
135
137
|
|
|
136
|
-
1. `/drive/folder/<folder_token>` 解析为 `target_scope=drive_folder
|
|
138
|
+
1. `/drive/folder/<folder_token>` 解析为 `target_scope=drive_folder`。默认继续枚举其子文档;只有用户明确要求文件夹自身权限设置时,才额外调用 `drive +permission-get-setting --token <folder_token> --type folder` 读取该文件夹自身设置。
|
|
137
139
|
2. 按 [`lark-drive-files-list.md`](lark-drive-files-list.md) 递归处理 `data.files`、`has_more` 和 `next_page_token`。不要把第一页数量当作完整范围。
|
|
138
140
|
3. 只对返回项中的 `folder` 继续递归;对子文档按 `type + token` 归一化为 `discovered_targets`。
|
|
139
141
|
4. 如果某个目录分页失败、无 continuation token、权限不足或 API 报错,只阻断该目录分支,并在 `discovery_blockers` 中记录;继续处理其他可枚举分支。
|
|
@@ -141,11 +143,11 @@ Drive folder 发现:
|
|
|
141
143
|
## Fact Read Rules
|
|
142
144
|
|
|
143
145
|
1. `drive metas batch_query` 单次最多 200 个 `request_docs`;当 `targets` 或 `discovered_targets` 超过 200 个时,必须分批读取并合并结果。
|
|
144
|
-
2. `drive permission
|
|
146
|
+
2. `drive +permission-get-setting` 没有批量读取接口;对支持目标逐个读取。单个目标失败时记录 `unsupported_checks` 或 `partial`,不要阻断其他目标。
|
|
145
147
|
3. 对 Wiki 发现目标,公开权限读取优先使用 `type=wiki` + `node_token`;metadata 可使用 `obj_type` + `obj_token` 补充 title、owner、URL 和 `sec_label_name`。
|
|
146
148
|
4. 当 intent 是 `list_permission_settings` 时,只输出权限设置清单和覆盖限制,不主动生成修复计划。
|
|
147
149
|
5. 单目标、多目标明确列表和容器发现目标都必须复用同一套逐目标事实读取与语义归一逻辑;差异只体现在目标来源、coverage summary 和输出聚合。
|
|
148
|
-
6. `permission_public`
|
|
150
|
+
6. `permission_public` 用户可见含义是“目标公共访问和协作权限设置”,语义以官方 OpenAPI 字段说明为准,同时兼容当前 CLI schema 返回的字段:优先使用 `external_access_entity`,缺失时才用 `external_access` boolean 映射为 `open` / `closed`;`manage_collaborator_entity`、`copy_entity`、`lock_switch` 等字段缺失时标记为 unknown,不要伪造;未识别字段保留在 raw evidence / partial note 中。
|
|
149
151
|
7. `drive file.statistics get` 和 `drive file.view_records list` 只在用户要求最近访问、活跃度、闲置暴露、访问复核,或用户提供的 policy 明确依赖活跃度时执行;不要为普通权限审计默认读取访问记录。
|
|
150
152
|
8. 访问统计 / 访问记录当前只对 `doc`、`docx`、`sheet`、`bitable`、`mindnote`、`wiki`、`file` 作为支持类型处理。其他类型必须进入 `unsupported_checks`,不能推断活跃度。
|
|
151
153
|
9. `view_records` 是访问证据,不是权限列表。没有返回访问记录只能表述为“未获得最近访问证据”或“低活跃候选”,不能表述为“无人有权限”。
|
|
@@ -162,17 +164,17 @@ Drive folder 发现:
|
|
|
162
164
|
- `PolicyReview`:复制、创建副本、打印、下载、评论等依赖 policy 的设置;没有明确 policy 时不要称为高风险。
|
|
163
165
|
- `Unknown`:读取失败、已删除、无权限、API 不支持、协作者名单 / 继承链 / DLP / AI 索引 / 审计日志未覆盖。
|
|
164
166
|
|
|
165
|
-
每个可审计目标都必须先归一化为 `per_target_permission_assessment`,再按 [`lark-drive-workflow-permission-governance-outputs.md`](lark-drive-workflow-permission-governance-outputs.md) 的 `Semantic Rendering` 渲染。`public_exposure_check` 只是 `target_count=1`
|
|
167
|
+
每个可审计目标都必须先归一化为 `per_target_permission_assessment`,再按 [`lark-drive-workflow-permission-governance-outputs.md`](lark-drive-workflow-permission-governance-outputs.md) 的 `Semantic Rendering` 渲染。`public_exposure_check` 只是 `target_count=1` 的轻量渲染模式;它和多目标、容器诊断复用同一套语义字段与风险分类。该判断只覆盖当前目标公共访问和协作权限设置,不审计协作者名单、历史权限变更、完整继承链或审计日志。
|
|
166
168
|
|
|
167
169
|
`AI 检索暴露候选风险` 只是基于权限和标签的代理标签。除非另有工具明确返回索引状态,否则不要声称某个文档已经被 Agent、Copilot 或 RAG 索引。
|
|
168
170
|
|
|
169
171
|
## 写入规则
|
|
170
172
|
|
|
171
|
-
-
|
|
173
|
+
- 目标公共访问和协作权限设置修改(`drive permission.public patch`)属于高风险写入。请求确认前,必须展示 target title、token、current setting、desired setting 和准确 field changes。
|
|
172
174
|
- 如果 `manage_public_auth.auth_result=false`,禁止 patch。告诉用户需要具备 manage-public 权限的用户,或由 owner 操作。
|
|
173
|
-
- `drive permission
|
|
175
|
+
- 权限设置读取使用 `drive +permission-get-setting`;裸 token 必须传 `--type`,URL 可以自动推断。写入仍使用 `drive permission.public patch`,只 patch 已解析且 schema 明确支持的类型和字段,不要把读取支持的 `folder` 自动外推为可写入。
|
|
174
176
|
- 不要 patch 已解析类型不支持的字段。对于 wiki 目标,必须省略 schema 明确标注为 wiki 不支持的字段。
|
|
175
|
-
-
|
|
177
|
+
- 不要在同一个写入确认中合并密级标签更新和目标公共访问与协作权限设置修改;必须分别确认。
|
|
176
178
|
- `drive +apply-permission` 默认不批量执行;每次调用都会向 owner 发送通知。
|
|
177
179
|
- `permission_request_candidates` 可以来自用户直接提供的目标、明确列表或容器发现目标;只要能构造 token、type、权限类型和申请理由,就可以进入候选。不要因为目标不在 `discovered_targets` 中而拒绝单目标 / 小列表权限申请。
|
|
178
180
|
- 容器范围内的"统一申请权限"必须先产出 `permission_request_candidates`。未展示候选目标、数量、权限类型和 owner 通知影响前,禁止调用 `drive +apply-permission`。
|
|
@@ -182,8 +184,8 @@ Drive folder 发现:
|
|
|
182
184
|
- 批量 owner 转移必须逐个顺序执行;失败项进入结果清单,不要重复执行已成功目标。`remove_old_owner=true` 或 `old_owner_perm` 降权必须单独在确认中高亮。
|
|
183
185
|
- 用户要求“生成整改方案 / dry-run / 先看看会改什么”时,只生成 `remediation_plan`,不执行任何写命令。dry-run 必须包含 target count、field changes、跳过原因、验证方式和有限回滚范围。
|
|
184
186
|
- 用户基于完整风险清单选择对象时,必须先解析 `risk_id`、风险分组、URL 或 artifact 中 `selected=true` 的行,生成 `selected_risk_items`。无法匹配到当前 `risk_manifest` 的选择必须要求用户重新确认或重新读取清单。
|
|
185
|
-
- 针对 `selected_risk_items` 生成 dry-run 前,必须重新读取所选目标的 `drive permission
|
|
186
|
-
- 执行 `drive permission.public patch` 前,必须把当前 `public_permission_facts` 中会被改动的字段保存为 `public_permission_snapshots
|
|
187
|
+
- 针对 `selected_risk_items` 生成 dry-run 前,必须重新读取所选目标的 `drive +permission-get-setting`;如果当前设置和清单快照不同,标记为 `changed_since_report` 并跳过或要求用户确认更新后的计划。
|
|
188
|
+
- 执行 `drive permission.public patch` 前,必须把当前 `public_permission_facts` 中会被改动的字段保存为 `public_permission_snapshots`。该快照只用于目标公共访问和协作权限设置字段的有限回滚说明,不覆盖协作者、owner、继承权限或密级标签。
|
|
187
189
|
- 如果用户要求批量收紧权限,必须按风险分层和目标顺序逐个执行;失败项进入结果清单,不要因为单个失败而重复执行已成功目标。
|
|
188
190
|
- 遇到 secure-label downgrade error `1063013` 时,停止重试,并告诉用户需要在文档 UI 中完成审批。
|
|
189
191
|
|
|
@@ -194,7 +196,7 @@ Drive folder 发现:
|
|
|
194
196
|
- `drive permission.members create` 可创建协作者权限,但当前 workflow 不做协作者 grant / update / revoke;未来需要单独定义授权对象解析、最小权限、确认模板和验证方式。
|
|
195
197
|
- backup owner、部门 / 项目负责人绑定没有当前 workflow 可执行写入面;如用户要落地为 owner 转移,必须先给出明确目标和新 owner,并走本 workflow 的 owner-transfer 确认。
|
|
196
198
|
- `wiki +member-list` 可作为 Wiki space 成员治理的读侧事实来源;当前 workflow 只治理文档 / 节点 / 文件夹下可发现文档的权限,不做 space member governance。
|
|
197
|
-
-
|
|
199
|
+
- `drive +member-list` 可读取单目标直接协作者/授权成员;当前 CLI 仍没有完整继承链、DLP 扫描、AI 索引状态、审计日志和跨平台权限事实。遇到这些需求必须记录为 `unsupported_checks` 或建议新增独立 workflow。
|
|
198
200
|
|
|
199
201
|
## 输出策略
|
|
200
202
|
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
# 主题资料收集工作流:执行
|
|
2
|
+
|
|
3
|
+
由状态 `CONFIRM_EXECUTION`、`EXECUTE`、`VERIFY`、`RESTORE` 加载。
|
|
4
|
+
|
|
5
|
+
本文档负责最终写操作确认、目标创建、资源移动、验证、恢复行为、`RollbackSnapshotItem` 和执行日志。不得修改搜索、召回、分类规则或计划 schema。
|
|
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-create-folder.md`](lark-drive-create-folder.md) 创建 Drive 文件夹。
|
|
15
|
+
3. 按 [`lark-drive-move.md`](lark-drive-move.md) 执行 Drive 移动。
|
|
16
|
+
4. 按 [`../../lark-wiki/references/lark-wiki-node-create.md`](../../lark-wiki/references/lark-wiki-node-create.md) 创建 Wiki 节点。
|
|
17
|
+
5. 按 [`../../lark-wiki/references/lark-wiki-move.md`](../../lark-wiki/references/lark-wiki-move.md) 执行 Wiki 移动和 Drive 文档移动到 Wiki。
|
|
18
|
+
6. 按 [`../../lark-wiki/references/lark-wiki-move-to-drive.md`](../../lark-wiki/references/lark-wiki-move-to-drive.md) 将 Wiki 节点移出到 Drive 文件夹。
|
|
19
|
+
7. 按 [`lark-drive-delete.md`](lark-drive-delete.md) 删除本次 workflow 新建的 Drive 文件夹。
|
|
20
|
+
8. 按 [`../../lark-wiki/references/lark-wiki-node-delete.md`](../../lark-wiki/references/lark-wiki-node-delete.md) 删除本次 workflow 新建的 Wiki 节点。
|
|
21
|
+
9. 需要轮询异步任务时,按 [`lark-drive-task-result.md`](lark-drive-task-result.md) 执行。
|
|
22
|
+
10. `MovePlanItem` schema 由 [`lark-drive-workflow-topic-move-collector-review-plan.md`](lark-drive-workflow-topic-move-collector-review-plan.md) 定义,本文件只消费已确认计划。
|
|
23
|
+
|
|
24
|
+
## 状态:`CONFIRM_EXECUTION`
|
|
25
|
+
|
|
26
|
+
进入条件:移动计划已准备,且用户要求执行。
|
|
27
|
+
|
|
28
|
+
必须:
|
|
29
|
+
|
|
30
|
+
1. 执行前展示所有写操作类别。
|
|
31
|
+
2. 将目标创建和资源移动分开展示。
|
|
32
|
+
3. 展示默认纳入的高相关资源。
|
|
33
|
+
4. 如有用户选择的中相关资源,也要展示。
|
|
34
|
+
5. 展示跳过分组和原因。
|
|
35
|
+
6. 明确展示跨容器移动。
|
|
36
|
+
7. 展示无移动权限和移动权限未知的资源数量。
|
|
37
|
+
8. 请求用户明确确认。
|
|
38
|
+
9. 确认前校验每个 `move_resource` 项都包含完整 `command_family`、`command_args`、权限快照和 `rollback_input`;缺失时必须返回 `PLAN_MOVE` 重新生成计划,不得在执行阶段补猜。
|
|
39
|
+
10. 只有 `move_permission_state=movable` 且 `target_write_state=confirmed` 的计划项可以列入“将移动”。
|
|
40
|
+
11. 对每个 `rollback_supported=false` 的计划项逐项展示标题、当前位置、目标位置、不可恢复原因和影响,不得只展示数量。
|
|
41
|
+
|
|
42
|
+
### 确认 UI
|
|
43
|
+
|
|
44
|
+
```text
|
|
45
|
+
请确认是否执行以下写操作:
|
|
46
|
+
|
|
47
|
+
本次搜索范围:<当前用户 owner / 负责的资源 | 所有当前身份可见资源>
|
|
48
|
+
|
|
49
|
+
将创建:
|
|
50
|
+
- 目标名称|父级位置|目标类型
|
|
51
|
+
|
|
52
|
+
将移动:
|
|
53
|
+
- 标题|类型|当前位置|目标位置|原因
|
|
54
|
+
|
|
55
|
+
不会移动:
|
|
56
|
+
- 中相关未选择:N 项
|
|
57
|
+
- 低相关:N 项
|
|
58
|
+
- 无权限:N 项
|
|
59
|
+
- 无移动权限:N 项
|
|
60
|
+
- 移动权限未知:N 项
|
|
61
|
+
- 无法验证:N 项
|
|
62
|
+
- 不支持移动:N 项
|
|
63
|
+
|
|
64
|
+
风险提示:
|
|
65
|
+
- 不可自动恢复:N 项
|
|
66
|
+
- 标题|当前位置|目标位置|不可恢复原因|影响:移动成功后 workflow 无法自动搬回原位置,需要手动处理
|
|
67
|
+
- 如果搜索范围是所有当前身份可见资源,移动权限未知项不会移动。
|
|
68
|
+
|
|
69
|
+
确认后才会创建目标和移动资源。
|
|
70
|
+
|
|
71
|
+
如果不存在不可自动恢复项,请回复“确认执行”开始写操作。
|
|
72
|
+
如果存在不可自动恢复项,请回复“确认执行,包括不可自动恢复项”;普通“确认执行”不满足本次风险确认。
|
|
73
|
+
也可以回复“调整计划”返回选择资源,或回复“取消”结束流程。
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
如果用户修改选择或相关性分组,废弃当前 `move_plan_items` 并返回 `PLAN_MOVE` 重新生成计划;不得在 `CONFIRM_EXECUTION` 直接局部改写计划。
|
|
77
|
+
|
|
78
|
+
## 状态:`EXECUTE`
|
|
79
|
+
|
|
80
|
+
进入条件:用户明确确认写操作;存在 `rollback_supported=false` 的计划项时,用户已明确确认包括不可自动恢复项。
|
|
81
|
+
|
|
82
|
+
必须:
|
|
83
|
+
|
|
84
|
+
1. 只执行已确认 `MovePlanItem.command_family` 和 `command_args`;不得回查 `ResourceItem` 补齐或改写命令参数。
|
|
85
|
+
2. 当存在 `action_type=create_target` 的 `MovePlanItem` 时,先创建目标。
|
|
86
|
+
3. 目标创建后记录返回 token;只允许把 `created_by_plan:<create_target plan_id>` 引用解析为该 token,并把解析后的实际参数写入 `execution_journal`。不得重新搜索或猜测目标。
|
|
87
|
+
4. 目标 token 引用解析成功后再移动依赖该目标的资源;解析失败时停止依赖该创建目标的移动并记录 blocker,不得替换为其他目标。
|
|
88
|
+
5. 执行任何写操作前,基于每个已确认计划项的 `rollback_input` 生成 `rollback_snapshot`。`rollback_supported=false` 且已有明确 `rollback_blocker` 的快照视为完整风险快照,不阻塞其他项。
|
|
89
|
+
6. 执行任何写操作前,初始化 `execution_journal`。
|
|
90
|
+
7. 每次写操作尝试后记录 `execution_journal`。
|
|
91
|
+
8. 单项失败后可继续执行相互独立的移动;目标创建失败时必须停止。
|
|
92
|
+
9. 不得移动 `permission_denied`、`no_move_permission`、`move_permission_unknown`、`unverifiable`、`low` 或 `unsupported_move_target` 项。
|
|
93
|
+
10. 不得移动 `move_permission_state!=movable` 或 `target_write_state!=confirmed` 的资源。
|
|
94
|
+
11. 如果移动命令返回权限错误,记录失败原因,不自动申请权限,不自动重试同一移动。
|
|
95
|
+
12. 如果 `rollback_supported=true` 但 `rollback_input` 缺少恢复所需字段,将该计划项标记为 `failed` / `plan_snapshot_incomplete` 并跳过;不得在未重新确认风险的情况下把它静默降级为不可恢复项,也不得阻塞其他独立项。
|
|
96
|
+
|
|
97
|
+
### 移动方式选择
|
|
98
|
+
|
|
99
|
+
| 来源 -> 目标 | 移动方式 |
|
|
100
|
+
|------------------|-------------|
|
|
101
|
+
| Drive resource -> Drive folder | `drive +move` |
|
|
102
|
+
| Drive document-like resource -> Wiki target | `wiki +move` 的 docs-to-wiki 模式;默认不可自动恢复 |
|
|
103
|
+
| Wiki node -> Wiki target | `wiki +move --node-token` |
|
|
104
|
+
| Wiki node -> Drive folder | `wiki +move-to-drive` |
|
|
105
|
+
|
|
106
|
+
### 执行顺序
|
|
107
|
+
|
|
108
|
+
1. 如有 `create_target` 项,先执行。
|
|
109
|
+
2. 按确认计划顺序执行 `move_resource` 项。
|
|
110
|
+
3. 如果命令返回 task ID,执行异步任务轮询。
|
|
111
|
+
4. 输出写操作执行摘要。
|
|
112
|
+
|
|
113
|
+
### 进度 UI
|
|
114
|
+
|
|
115
|
+
批量较大时,按计数汇报进度:
|
|
116
|
+
|
|
117
|
+
```text
|
|
118
|
+
执行进度:已完成 <done_count>/<total_count>,成功 <success_count>,失败 <failed_count>。
|
|
119
|
+
当前操作:<title>
|
|
120
|
+
继续执行中,不需要你操作;如遇到需要确认的失败会单独提示。
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## 状态:`VERIFY`
|
|
124
|
+
|
|
125
|
+
进入条件:执行完成。
|
|
126
|
+
|
|
127
|
+
必须:
|
|
128
|
+
|
|
129
|
+
1. 如果创建了目标,验证目标存在。
|
|
130
|
+
2. 能力支持时,验证已移动资源在目标位置可见。
|
|
131
|
+
3. 对比实际位置和 `move_plan_items`。
|
|
132
|
+
4. 为每一项标记验证状态。
|
|
133
|
+
5. 只有当已有移动成功且存在严重不一致或失败时,才提供恢复选项。
|
|
134
|
+
6. 输出验证结果时,必须说明用户下一步可以结束流程、查看失败项,或在可恢复时选择恢复。
|
|
135
|
+
7. 如果出现 `async_pending`,先使用 `drive +task_result` 轮询确认;超过轮询限制后再报告 pending blocker。
|
|
136
|
+
|
|
137
|
+
### 验证结果
|
|
138
|
+
|
|
139
|
+
| 状态值 | 说明 |
|
|
140
|
+
|--------|------|
|
|
141
|
+
| `verified` | 资源已在目标位置可见。 |
|
|
142
|
+
| `not_found` | 目标位置未找到资源。 |
|
|
143
|
+
| `permission_unknown` | 当前身份无法确认结果。 |
|
|
144
|
+
| `async_pending` | 异步任务尚未完成,需要继续轮询。 |
|
|
145
|
+
| `failed` | 移动命令失败或结果不符合计划。 |
|
|
146
|
+
|
|
147
|
+
## 状态:`RESTORE`
|
|
148
|
+
|
|
149
|
+
进入条件:失败、不一致或用户明确要求恢复。
|
|
150
|
+
|
|
151
|
+
必须:
|
|
152
|
+
|
|
153
|
+
1. 只基于 `rollback_snapshot` 和 `execution_journal` 生成恢复计划。
|
|
154
|
+
2. 展示可恢复项和不可恢复项。
|
|
155
|
+
3. 执行恢复写操作前请求明确确认;确认内容必须包含反向移动和删除本次 workflow 新建目标。
|
|
156
|
+
4. 只恢复本次 workflow 移动过的资源。
|
|
157
|
+
5. 只恢复 `rollback_supported=true` 且 `rollback_eligible=true` 的移动项。
|
|
158
|
+
6. Drive / Wiki 跨容器移动、原父级 token 缺失等 `rollback_supported=false` 的项不得反向移动,也不得删除迁入后的文档。
|
|
159
|
+
7. 本次 workflow 成功创建的目标文件夹或 Wiki 节点必须纳入清理计划。
|
|
160
|
+
8. 删除 workflow 新建的 Wiki 目标节点时,必须使用 `wiki +node-delete --include-children=false --yes`,让已迁入的直接子文档保留到该节点父级层级。
|
|
161
|
+
9. 删除 workflow 新建的 Drive 文件夹前,必须先恢复或移出其中由本次 workflow 放入的资源;如果无法确认文件夹已安全可删,报告清理阻塞,不得用删除文件夹来删除用户资源。
|
|
162
|
+
|
|
163
|
+
### 恢复顺序
|
|
164
|
+
|
|
165
|
+
1. 先恢复 `rollback_supported=true` 且 `rollback_eligible=true` 的移动项。
|
|
166
|
+
2. 对全部 `rollback_supported=false` 的项,只记录“保留在当前目标位置,不回迁、不删除”和对应 blocker。
|
|
167
|
+
3. 再清理 `created_by_workflow=true` 的目标容器。
|
|
168
|
+
4. Wiki 新建目标清理使用 `--include-children=false`;Drive 新建目标清理只在不会删除用户资源时执行。
|
|
169
|
+
|
|
170
|
+
### 恢复 UI
|
|
171
|
+
|
|
172
|
+
```text
|
|
173
|
+
可以尝试恢复本次已移动的资源:
|
|
174
|
+
|
|
175
|
+
可恢复:
|
|
176
|
+
- 标题|当前位置|原位置
|
|
177
|
+
|
|
178
|
+
不可自动恢复:
|
|
179
|
+
- 标题|当前位置|原位置|原因|影响:需要手动恢复
|
|
180
|
+
|
|
181
|
+
将清理本次新建目标:
|
|
182
|
+
- 名称|类型|清理方式
|
|
183
|
+
|
|
184
|
+
将保留在当前目标位置的跨容器迁入文档:
|
|
185
|
+
- 标题|当前位置|保留结果
|
|
186
|
+
|
|
187
|
+
是否执行恢复?
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
## RollbackSnapshotItem
|
|
191
|
+
|
|
192
|
+
```json
|
|
193
|
+
{
|
|
194
|
+
"snapshot_id": "稳定快照行 ID",
|
|
195
|
+
"plan_id": "对应 MovePlanItem.plan_id",
|
|
196
|
+
"resource_id": "对应 MovePlanItem.resource_id",
|
|
197
|
+
"source_kind": "drive|wiki",
|
|
198
|
+
"title": "资源标题",
|
|
199
|
+
"resource_type": "Drive 恢复命令需要的资源类型",
|
|
200
|
+
"original_token": "原始 Drive token",
|
|
201
|
+
"original_node_token": "原始 Wiki node token",
|
|
202
|
+
"original_parent_kind": "drive_folder|drive_root|wiki_node|wiki_space_root|unknown",
|
|
203
|
+
"original_parent_token": "原始父级 token",
|
|
204
|
+
"original_space_id": "原始 Wiki space_id",
|
|
205
|
+
"original_path": "执行前路径",
|
|
206
|
+
"planned_target_parent_token": "计划目标父级 token",
|
|
207
|
+
"rollback_supported": "是否支持自动恢复",
|
|
208
|
+
"rollback_blocker": "不可自动恢复原因"
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
| 字段 | 说明 |
|
|
213
|
+
|-------|------|
|
|
214
|
+
| `snapshot_id` | 稳定快照行 ID。 |
|
|
215
|
+
| `plan_id` | 对应 `MovePlanItem.plan_id`,用于连接计划、快照和执行日志。 |
|
|
216
|
+
| `resource_id` | 对应稳定资源 ID,用于审计计划来源。 |
|
|
217
|
+
| `resource_type` | `drive +move` 恢复时必须传入的 `--type`;非 Drive 恢复也保留原始资源类型。 |
|
|
218
|
+
| `original_token` / `original_node_token` | 执行前源资源身份。 |
|
|
219
|
+
| `original_parent_kind` / `original_parent_token` | 执行前父级位置。 |
|
|
220
|
+
| `rollback_supported` | 是否支持自动恢复。 |
|
|
221
|
+
| `rollback_blocker` | 不可自动恢复原因。 |
|
|
222
|
+
|
|
223
|
+
## 执行日志
|
|
224
|
+
|
|
225
|
+
每次写操作尝试都必须追加一条内部日志:
|
|
226
|
+
|
|
227
|
+
```json
|
|
228
|
+
{
|
|
229
|
+
"journal_id": "稳定日志行 ID",
|
|
230
|
+
"plan_id": "对应 MovePlanItem 的 plan_id",
|
|
231
|
+
"time": "ISO-8601",
|
|
232
|
+
"action_type": "create_target|move_resource|restore_resource|cleanup_target",
|
|
233
|
+
"operation": "create_folder|create_node|move_drive|move_wiki_node|move_wiki_to_drive|restore_drive|restore_wiki_node|delete_folder|delete_wiki_node",
|
|
234
|
+
"command_family": "drive +move|wiki +move|wiki +move-to-drive|drive +create-folder|wiki +node-create|drive +delete|wiki +node-delete",
|
|
235
|
+
"resolved_command_args": {"<arg>": "实际发送的参数"},
|
|
236
|
+
"title": "资源或目标名称",
|
|
237
|
+
"resource_type": "资源类型",
|
|
238
|
+
"input_token": "命令输入 token",
|
|
239
|
+
"input_node_token": "命令输入 Wiki node token",
|
|
240
|
+
"input_parent_token": "已知源父级 token",
|
|
241
|
+
"target_parent_token": "目标父级 token",
|
|
242
|
+
"returned_token": "命令返回 token",
|
|
243
|
+
"returned_node_token": "命令返回 Wiki node token",
|
|
244
|
+
"returned_parent_token": "返回父级 token",
|
|
245
|
+
"task_id": "异步任务 ID",
|
|
246
|
+
"next_command": "异步继续命令",
|
|
247
|
+
"created_by_workflow": "是否由本次 workflow 创建",
|
|
248
|
+
"rollback_eligible": "是否可进入自动恢复计划",
|
|
249
|
+
"status": "success|failed|pending",
|
|
250
|
+
"error": "失败原因"
|
|
251
|
+
}
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
字段说明:
|
|
255
|
+
|
|
256
|
+
| 字段 | 说明 |
|
|
257
|
+
|------|------|
|
|
258
|
+
| `journal_id` | 稳定日志行 ID。 |
|
|
259
|
+
| `plan_id` | 对应 `MovePlanItem`,用于把日志项匹配回原计划。 |
|
|
260
|
+
| `operation` | 细分操作类型,用于区分创建、移动和恢复。 |
|
|
261
|
+
| `resolved_command_args` | 从确认计划解析出的实际发送参数;用于审计 `created_by_plan:<plan_id>` 的唯一运行时替换。 |
|
|
262
|
+
| `resource_type` | 实际移动 / 恢复使用的资源类型。 |
|
|
263
|
+
| `input_token` / `input_node_token` | 命令实际输入的资源 token。 |
|
|
264
|
+
| `input_parent_token` | 执行前已知源父级 token。 |
|
|
265
|
+
| `target_parent_token` | 命令输入的目标父级 token。 |
|
|
266
|
+
| `returned_token` / `returned_node_token` | 命令返回的资源 token,恢复时作为当前源。 |
|
|
267
|
+
| `returned_parent_token` | 命令返回的当前父级 token。 |
|
|
268
|
+
| `task_id` / `next_command` | 异步任务跟踪信息。 |
|
|
269
|
+
| `created_by_workflow` | 是否由本次 workflow 创建,用于后续清理判断。 |
|
|
270
|
+
| `rollback_eligible` | 是否可进入自动恢复计划。 |
|
|
271
|
+
| `status` | 写操作状态,异步未完成时为 `pending`。 |
|
|
272
|
+
|
|
273
|
+
除非用户要求查看技术调试细节,否则不要展示完整原始命令输出。
|
|
@@ -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 完成前不得进入资源解析或分类阶段。
|