@amaster.ai/pi-lark 0.1.7 → 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 (135) hide show
  1. package/package.json +2 -2
  2. package/skills/lark-apps/SKILL.md +39 -6
  3. package/skills/lark-apps/references/lark-apps-cloud-dev.md +5 -4
  4. package/skills/lark-apps/references/lark-apps-create.md +6 -3
  5. package/skills/lark-apps/references/lark-apps-get.md +1 -1
  6. package/skills/lark-apps/references/lark-apps-list.md +1 -1
  7. package/skills/lark-apps/references/lark-apps-local-dev.md +27 -1
  8. package/skills/lark-apps/references/lark-apps-release-create.md +1 -1
  9. package/skills/lark-base/SKILL.md +14 -6
  10. package/skills/lark-base/references/lark-base-dashboard-block-get-data.md +17 -1
  11. package/skills/lark-base/references/lark-base-dashboard.md +17 -4
  12. package/skills/lark-base/references/lark-base-data-query-guide.md +8 -0
  13. package/skills/lark-base/references/lark-base-field-create.md +19 -8
  14. package/skills/lark-base/references/lark-base-field-json.md +5 -2
  15. package/skills/lark-calendar/SKILL.md +1 -1
  16. package/skills/lark-doc/SKILL.md +26 -61
  17. package/skills/lark-doc/references/genres/business-analysis.md +30 -0
  18. package/skills/lark-doc/references/genres/data-report.md +32 -0
  19. package/skills/lark-doc/references/genres/email.md +38 -0
  20. package/skills/lark-doc/references/genres/execution-plan.md +27 -0
  21. package/skills/lark-doc/references/genres/formal-doc.md +37 -0
  22. package/skills/lark-doc/references/genres/meeting-minutes.md +24 -0
  23. package/skills/lark-doc/references/genres/memo-brief.md +25 -0
  24. package/skills/lark-doc/references/genres/official-redhead.md +73 -0
  25. package/skills/lark-doc/references/genres/prd.md +26 -0
  26. package/skills/lark-doc/references/genres/proposal.md +24 -0
  27. package/skills/lark-doc/references/genres/research-report.md +32 -0
  28. package/skills/lark-doc/references/genres/retrospective.md +25 -0
  29. package/skills/lark-doc/references/genres/route-consumer.md +37 -0
  30. package/skills/lark-doc/references/genres/route-creative.md +36 -0
  31. package/skills/lark-doc/references/genres/route-knowledge.md +39 -0
  32. package/skills/lark-doc/references/genres/route-marketing.md +40 -0
  33. package/skills/lark-doc/references/genres/route-media.md +36 -0
  34. package/skills/lark-doc/references/genres/route-opinion.md +38 -0
  35. package/skills/lark-doc/references/genres/route-personal-brand.md +36 -0
  36. package/skills/lark-doc/references/genres/route-platform.md +9 -0
  37. package/skills/lark-doc/references/genres/route-report.md +10 -0
  38. package/skills/lark-doc/references/genres/route-workplace.md +17 -0
  39. package/skills/lark-doc/references/genres/sop-tutorial.md +41 -0
  40. package/skills/lark-doc/references/genres/technical-doc.md +39 -0
  41. package/skills/lark-doc/references/genres/wechat.md +39 -0
  42. package/skills/lark-doc/references/genres/weekly-report.md +24 -0
  43. package/skills/lark-doc/references/genres/white-paper.md +32 -0
  44. package/skills/lark-doc/references/genres/xiaohongshu.md +38 -0
  45. package/skills/lark-doc/references/lark-doc-create-workflow.md +121 -0
  46. package/skills/lark-doc/references/lark-doc-create.md +22 -48
  47. package/skills/lark-doc/references/lark-doc-fetch.md +75 -92
  48. package/skills/lark-doc/references/lark-doc-history.md +16 -15
  49. package/skills/lark-doc/references/lark-doc-md.md +5 -1
  50. package/skills/lark-doc/references/lark-doc-media-download.md +2 -1
  51. package/skills/lark-doc/references/lark-doc-script.md +76 -0
  52. package/skills/lark-doc/references/lark-doc-update.md +70 -222
  53. package/skills/lark-doc/references/lark-doc-whiteboard.md +5 -9
  54. package/skills/lark-doc/references/lark-doc-xml-extended-blocks.md +17 -12
  55. package/skills/lark-doc/references/lark-doc-xml.md +38 -167
  56. package/skills/lark-drive/SKILL.md +7 -5
  57. package/skills/lark-drive/references/lark-drive-apply-permission.md +1 -1
  58. package/skills/lark-drive/references/lark-drive-copy.md +87 -0
  59. package/skills/lark-drive/references/lark-drive-download.md +2 -1
  60. package/skills/lark-drive/references/lark-drive-export.md +3 -0
  61. package/skills/lark-drive/references/lark-drive-task-result.md +3 -0
  62. package/skills/lark-drive/references/lark-drive-update-title.md +78 -0
  63. package/skills/lark-event/SKILL.md +7 -4
  64. package/skills/lark-event/references/lark-event-vc.md +8 -2
  65. package/skills/lark-im/SKILL.md +8 -8
  66. package/skills/lark-im/references/lark-im-chat-list.md +9 -2
  67. package/skills/lark-im/references/lark-im-chat-members-list.md +7 -4
  68. package/skills/lark-im/references/lark-im-chat-messages-list.md +10 -3
  69. package/skills/lark-im/references/lark-im-chat-search.md +9 -2
  70. package/skills/lark-im/references/lark-im-feed-group-list-item.md +2 -2
  71. package/skills/lark-im/references/lark-im-feed-group-list.md +2 -2
  72. package/skills/lark-im/references/lark-im-feed-shortcut-list.md +1 -1
  73. package/skills/lark-im/references/lark-im-flag-list.md +2 -2
  74. package/skills/lark-im/references/lark-im-message-enrichment.md +1 -1
  75. package/skills/lark-im/references/lark-im-messages-resources-download.md +19 -25
  76. package/skills/lark-im/references/lark-im-messages-search.md +4 -5
  77. package/skills/lark-im/references/lark-im-threads-messages-list.md +8 -4
  78. package/skills/lark-mail/references/lark-mail-triage.md +19 -4
  79. package/skills/lark-minutes/SKILL.md +1 -1
  80. package/skills/lark-minutes/references/lark-minutes-search.md +6 -7
  81. package/skills/lark-shared/SKILL.md +3 -3
  82. package/skills/lark-sheets/SKILL.md +83 -82
  83. package/skills/lark-sheets/references/lark-sheets-batch-update.md +13 -58
  84. package/skills/lark-sheets/references/lark-sheets-chart.md +2 -1
  85. package/skills/lark-sheets/references/lark-sheets-conditional-format.md +1 -1
  86. package/skills/lark-sheets/references/lark-sheets-range-operations.md +5 -5
  87. package/skills/lark-sheets/references/lark-sheets-read-data.md +80 -6
  88. package/skills/lark-sheets/references/lark-sheets-sheet-structure.md +21 -10
  89. package/skills/lark-sheets/references/lark-sheets-styles-put.md +93 -0
  90. package/skills/lark-sheets/references/lark-sheets-visual-standards.md +2 -2
  91. package/skills/lark-sheets/references/lark-sheets-workbook.md +4 -3
  92. package/skills/lark-sheets/references/lark-sheets-write-cells.md +40 -12
  93. package/skills/lark-sheets/scripts/lark_detect_subtables.py +593 -0
  94. package/skills/lark-sheets/scripts/lark_inspect_workbook.py +188 -0
  95. package/skills/lark-sheets/scripts/lark_profile_table.py +614 -0
  96. package/skills/lark-sheets/scripts/lark_sheet_range.py +176 -0
  97. package/skills/lark-sheets/scripts/lark_sheet_read_cli.py +184 -0
  98. package/skills/lark-sheets/scripts/sheets_df.py +21 -3
  99. package/skills/lark-slides/SKILL.md +27 -44
  100. package/skills/lark-slides/references/lark-slides-add-slide.md +92 -0
  101. package/skills/lark-slides/references/lark-slides-create.md +77 -65
  102. package/skills/lark-slides/references/lark-slides-delete-slide.md +65 -0
  103. package/skills/lark-slides/references/lark-slides-edit-workflows.md +6 -7
  104. package/skills/lark-slides/references/lark-slides-media-upload.md +3 -25
  105. package/skills/lark-slides/references/lark-slides-replace-slide.md +22 -1
  106. package/skills/lark-slides/references/lark-slides-screenshot.md +31 -13
  107. package/skills/lark-slides/references/lark-slides-update-slide.md +146 -0
  108. package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +31 -8
  109. package/skills/lark-slides/references/slides_chart_demo.xml +1 -2
  110. package/skills/lark-slides/references/slides_xml_schema_definition.xml +48 -4
  111. package/skills/lark-slides/references/troubleshooting.md +7 -8
  112. package/skills/lark-slides/references/validation-checklist.md +4 -4
  113. package/skills/lark-slides/references/xml-schema-quick-ref.md +23 -11
  114. package/skills/lark-slides/scripts/sxsd_validator.py +154 -10
  115. package/skills/lark-slides/scripts/xml_text_overlap_lint.py +360 -76
  116. package/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +1138 -214
  117. package/skills/lark-whiteboard/SKILL.md +15 -8
  118. package/skills/lark-whiteboard/references/lark-whiteboard-export.md +4 -3
  119. package/skills/lark-whiteboard/references/lark-whiteboard-update.md +4 -4
  120. package/skills/lark-whiteboard/references/lark-whiteboard-workflow.md +19 -17
  121. package/skills/lark-whiteboard/routes/dsl.md +8 -2
  122. package/skills/lark-whiteboard/routes/mermaid.md +1 -1
  123. package/skills/lark-whiteboard/routes/svg-edit.md +5 -2
  124. package/skills/lark-whiteboard/routes/svg.md +3 -1
  125. package/skills/lark-whiteboard/scenes/mention.md +71 -0
  126. package/skills/lark-wiki/SKILL.md +5 -3
  127. package/skills/lark-wiki/references/lark-wiki-delete-space.md +6 -3
  128. package/skills/lark-doc/references/lark-doc-word-stat.md +0 -93
  129. package/skills/lark-doc/references/style/lark-doc-create-workflow.md +0 -47
  130. package/skills/lark-doc/references/style/lark-doc-style.md +0 -68
  131. package/skills/lark-doc/references/style/lark-doc-update-workflow.md +0 -48
  132. package/skills/lark-doc/scripts/doc_word_stat.py +0 -1243
  133. package/skills/lark-slides/references/lark-slides-replace-pages.md +0 -95
  134. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-create.md +0 -219
  135. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-delete.md +0 -126
@@ -22,16 +22,23 @@ metadata:
22
22
 
23
23
  **身份**:画板操作默认使用 `--as user`。仅当需要以应用身份上传时使用 `--as bot`。
24
24
 
25
- | 用户需求 | 行动 |
26
- |-----------------------------------------|---------------------------------------------------------------------------------------------------|
25
+ > 先判断「只读还是写入」,再在对应表内按上到下匹配,**命中即停**。
26
+
27
+ ### A. 只读 · 查看 / 导出(不改画板)
28
+
29
+ | 用户需求 | 行动 |
30
+ |---|---|
27
31
  | 查看画板内容 / 导出图片 | [`+export --output-type preview`](references/lark-whiteboard-export.md) |
28
32
  | 导出 SVG 矢量图 | [`+export --output-type svg`](references/lark-whiteboard-export.md) |
29
- | 获取画板的 Mermaid/PlantUML 代码 | [`+export --output-type source`](references/lark-whiteboard-export.md) |
30
- | 检查画板是否由代码绘制 | [`+export --output-type source`](references/lark-whiteboard-export.md) |
31
- | 仅微调节点文字/颜色 | `+export --output-type raw` → 手动改 JSON → `+update --input_format raw` |
32
- | 用户**已提供** Mermaid/PlantUML/SVG 代码,或明确指定用该格式 | 自己生成/使用代码 → [`+update --input_format mermaid/plantuml/svg`](references/lark-whiteboard-update.md) |
33
- | 新建/创作复杂图表(架构/流程/组织等) | → **[§ 创作 Workflow](references/lark-whiteboard-workflow.md#创作-workflow)** |
34
- | 修改/重绘已有画板 | → **[§ 修改 Workflow](references/lark-whiteboard-workflow.md#修改-workflow)** |
33
+ | 提取画板的 Mermaid/PlantUML 源码 | [`+export --output-type source`](references/lark-whiteboard-export.md) |
34
+
35
+ ### B. 写入 · 创作 / 编辑(会改画板,命中即停)
36
+
37
+ | 场景 | 行动 | 写入方式 | 对原内容 |
38
+ |---|---|---|---|
39
+ | 用户**已提供** Mermaid/PlantUML/SVG 代码,或明确指定用该格式 | 使用该代码 → [`+update`](references/lark-whiteboard-update.md),`--input_format` 取单值 `mermaid` / `plantuml` / `svg`;写入非空已有画板并需要 overwrite 时,先确认会整板重建;若 SVG 用于修改已有画板,先走 [`routes/svg-edit.md`](routes/svg-edit.md) 有损确认 | overwrite / append | 按用户要求 |
40
+ | 从零新建复杂图表(架构/流程/组织等) | → **[§ 创作 Workflow](references/lark-whiteboard-workflow.md#创作-workflow)** | 首次写入 | — |
41
+ | 修改 / 增补已有画板 | → **[§ 编辑 Workflow](references/lark-whiteboard-workflow.md#编辑-workflow)** | 见该表 | 见该表 |
35
42
 
36
43
  ## Shortcuts
37
44
 
@@ -10,15 +10,16 @@
10
10
  |----------------------|----|------------------------------------------------------------------------|
11
11
  | `--whiteboard-token` | 是 | 画板 token,需要拥有画板的读权限 |
12
12
  | `--output-type` | 是 | 输出格式:`preview`(预览图片)、`svg`(SVG 矢量图)、`source`(PlantUML/Mermaid 代码)、`raw`(OpenAPI 原生画板节点格式) |
13
- | `--output` | 否 | 输出路径。当 `--output-type preview` 时必填,推荐传入无后缀文件路径(如 `./preview`);当 `--output-type svg/source/raw` 时可选,不填则直接输出到终端 |
13
+ | `--output` | 否 | 输出路径。当 `--output-type preview` 时必填;当 `--output-type svg/source/raw` 时可选,不填则直接输出到终端 |
14
14
  | `--overwrite` | 否 | 覆盖已存在的文件,默认为 false |
15
15
 
16
16
  ## 输出格式
17
17
 
18
- - `preview`:预览图片。推荐 `--output ./preview` 这类无后缀文件路径,CLI 会按实际图片类型保存为 `./preview.png` 或 `./preview.jpg`。如果 `--output` 是目录,会保存为该目录下的 `whiteboard_<whiteboard-token>.png/.jpg`;如果显式写了后缀,需要和实际图片类型匹配。`--overwrite` 检查的是补齐后缀后的最终路径,例如返回 PNG 时 `--output ./preview` 对应覆盖 `./preview.png`。
18
+ - `preview`:预览图片。保存时会根据接口实际返回的 `Content-Type` 决定扩展名,例如 `image/jpeg` 会保存为 `.jpg`。
19
19
  - `svg`:导出画板为标准 SVG 矢量图。可用于 SVG 编辑后回写画板(见 [`routes/svg-edit.md`](../routes/svg-edit.md))。注意:导出为纯视觉快照,思维导图层级、表格结构、连接器绑定等语义信息会丢失。
20
20
  - `source`:PlantUML/Mermaid 代码。仅限画板内有且仅有一个 PlantUML/Mermaid 图时,才可导出代码,否则会在返回值中告知不存在/有多个节点。
21
- - `raw`:飞书 OpenAPI 原生画板节点格式。这一 json 格式不适合直接编辑复杂布局或内容,建议仅限于需要修改简单的文本内容/颜色等细节时使用。需要进行更复杂的设计/修改时,建议参考 [§ 渲染 & 写入画板](../SKILL.md#渲染--写入画板)。
21
+ - `raw`:飞书 OpenAPI 原生画板节点格式。这一 json 格式不适合直接编辑复杂布局或内容,建议仅限于需要修改简单的文本内容/颜色等细节时使用。需要进行更复杂的设计/修改时,建议参考 [§ 编辑 Workflow](lark-whiteboard-workflow.md#编辑-workflow)。
22
+ - **需编辑后回写时,导出务必加 `--output <file>` 写入文件**:文件内容可直接作为 `+update` 的输入;直接输出到终端的结果会多一层 `{ ok, identity, data }` 包装,`+update` 无法解析。
22
23
 
23
24
  ## 示例
24
25
 
@@ -17,7 +17,7 @@
17
17
  |----------------------|----|--------------------------------------------|
18
18
  | `--whiteboard-token` | 是 | 画板 token,需要拥有画板的编辑权限 |
19
19
  | `--idempotent-token` | 否 | 幂等 token,确保更新操作幂等;最少 10 个字符,建议使用时间戳 + 场景标识拼接(如 `1744800000-board-1`)。同一次逻辑更新只生成一次该 token,重试时须原样复用;切勿在每次重试时重新生成时间戳或幂等 key,否则会重复写入 |
20
- | `--overwrite` | 否 | 覆盖更新,在更新前删除所有现有内容,默认为 false |
20
+ | `--overwrite` | 否 | 写入模式:带上则覆盖更新(写入前删除画板所有现有内容再写入);省略则为增量追加(保留原有内容,新内容叠加写入)。默认 false(增量追加)|
21
21
  | `--source` | 是 | 输入画板内容,支持使用 `@path` 从文件读取,或 `-` 从 stdin 读取 |
22
22
  | `--input_format` | 否 | 输入格式:`raw`、`plantuml`、`mermaid`、`svg`,默认为 `raw` |
23
23
 
@@ -27,7 +27,7 @@
27
27
 
28
28
  思维导图,时序图,类图,饼图,流程图等图表推荐使用 Mermaid/PlantUML 语法绘制。
29
29
 
30
- 而当需要绘制架构图,组织架构图,泳道图,对比图,鱼骨图,柱状图,折线图,树状图,漏斗图,金字塔图,循环/飞轮图,里程碑或其他较为复杂的图表时,推荐参考 [§ 渲染 & 写入画板](../SKILL.md#渲染--写入画板) 使用 whiteboard-cli 工具创作。
30
+ 而当需要绘制架构图,组织架构图,泳道图,对比图,鱼骨图,柱状图,折线图,树状图,漏斗图,金字塔图,循环/飞轮图,里程碑或其他较为复杂的图表时,推荐参考 [§ 渲染 & 写入画板](lark-whiteboard-workflow.md#渲染--写入画板) 使用 whiteboard-cli 工具创作。
31
31
 
32
32
  ## 示例
33
33
 
@@ -71,7 +71,7 @@ lark-cli whiteboard +update \
71
71
 
72
72
  ### 示例 3:使用 whiteboard-cli 生成 OpenAPI 格式并写入画板
73
73
 
74
- whiteboard-cli 工具的具体用法请参考 [§ 渲染 & 写入画板](../SKILL.md#渲染--写入画板)
74
+ whiteboard-cli 工具的具体用法请参考 [§ 渲染 & 写入画板](lark-whiteboard-workflow.md#渲染--写入画板)
75
75
 
76
76
  ```bash
77
77
  # 使用 whiteboard-cli 生成 OpenAPI 格式并通过管道传递
@@ -85,7 +85,7 @@ npx -y @larksuite/whiteboard-cli@^0.2.13 -i <产物文件> --to openapi --format
85
85
 
86
86
  ### 示例 4:先生成产物文件,再从文件读取更新
87
87
 
88
- whiteboard-cli 工具的具体用法请参考 [§ 渲染 & 写入画板](../SKILL.md#渲染--写入画板)
88
+ whiteboard-cli 工具的具体用法请参考 [§ 渲染 & 写入画板](lark-whiteboard-workflow.md#渲染--写入画板)
89
89
 
90
90
  ```bash
91
91
  # 生成 OpenAPI 格式到文件
@@ -1,4 +1,4 @@
1
- # 画板创作/修改工作流
1
+ # 画板创作/编辑工作流
2
2
 
3
3
  ## 创作 Workflow
4
4
 
@@ -19,23 +19,24 @@
19
19
 
20
20
  ---
21
21
 
22
- ## 修改 Workflow
22
+ ## 编辑 Workflow
23
23
 
24
24
  **Step 1:获取 board_token**(同创作 Workflow Step 1)
25
25
 
26
- **Step 2:判断修改策略**
26
+ **Step 2:探测可编辑性 / 是否由代码绘制**
27
27
 
28
- ```
29
- +export --output-type source
30
- ├─ 返回 Mermaid/PlantUML 代码
31
- │ → 在原代码上修改 → +update --input_format mermaid/plantuml
32
- ├─ 无代码(SVG/DSL 或其他方式绘制的画板)
33
- │ ├─ 需纯新增(思维导图、流程图、时序图、类图、饼图、甘特图)图表节点
34
- │ │ → +export --output-type preview → 看图 → +export --output-type raw → 确定新节点坐标和层级 → [§ 渲染 & 写入画板]
35
- │ └─ 其他改动(几何变动/增删元素/结构调整/混合编辑等)
36
- │ → [`../routes/svg-edit.md`](../routes/svg-edit.md)(视觉高保真还原,大部分场景适用)
37
- └─ 用户有明确要求 → 以用户要求优先
38
- ```
28
+ - `+export --output-type source` — 能返回单一 Mermaid/PlantUML 源码,说明画板由代码绘制、可走路径①;返回无代码/多图则走路径②③④
29
+
30
+ **Step 3:选编辑路径**(按上到下匹配,命中即停;用户有明确指定则以用户为准)
31
+
32
+ | 路径 | 命中条件 | 怎么改 | 写入方式 | 是否有损 |
33
+ |---|---|---|---|---|
34
+ | ①源码重构 | `+export source` 返回单一 Mermaid/PlantUML(即画板由代码绘制) | 在源码上改 → 按源码类型用 `+update --input_format mermaid` 或 `+update --input_format plantuml` | overwrite(整板重建) | ⚠️ **非严格无损,执行前确认** |
35
+ | ②属性微调 | 只改已有节点的文字/颜色 | `+export --output-type raw --output <file>`(**必须写入文件**)→ 编辑文件中目标节点字段;如只能用 `+update --input_format raw --source @<file> --overwrite` 写回,先说明会整板重建并等待用户确认 | overwrite(整板重建) | ⚠️ **有损风险,未确认不得执行** |
36
+ | ③增量追加 | 在原图基础上新增图/元素,保留原内容 | `+export --output-type preview` → 理解原图 → `+export --output-type raw` → 确定新节点坐标 → [§ 渲染 & 写入画板](#渲染--写入画板) 创作&写入 | append(**不加 `--overwrite`**) | 无损(原节点不动) |
37
+ | ④结构重绘 | 需几何变动/增删元素/结构调整/混合编辑 | [`../routes/svg-edit.md`](../routes/svg-edit.md) | overwrite(清空重来) | ⚠️ **有损,必须先经用户确认** |
38
+
39
+ **⚠️ 止损**:一条路径最多试 2 轮,不行就换条路径尝试一次;仍不行就停下,如实告诉用户卡点,不要在各路径间反复横跳。
39
40
 
40
41
  ---
41
42
 
@@ -45,12 +46,13 @@
45
46
 
46
47
  **先自报身份**:按训练来源,你属于哪一家?`Claude` / `Gemini` / `GPT` / `GLM` / `Doubao 或 Seed` / `Other`。身份决定 SVG / DSL 分流(不同家族对这两种表达语言的能力不均衡),不要跳过这一步。
47
48
 
48
- **然后按图表类型 × 身份选路径**,读对应文件按其完整 workflow 执行(含读 scene 指南、生成内容、渲染审查、交付):
49
+ **然后按当前产物类型 / 图表类型 × 身份选路径**,读对应文件按其完整 workflow 执行(含读 scene 指南、生成内容、渲染审查、交付):
49
50
 
50
- 按上到下匹配, 命中即停:
51
+ 当前产物路由按上到下匹配, 命中即停:
51
52
 
52
53
  | 图表类型 | 身份 | 路径 |
53
54
  |--------------------|-------------------------------------|------------------------------------------------|
55
+ | 当前要生成/追加的内容包含 @用户提及或图片/配图 | 任何身份 | [`../routes/dsl.md`](../routes/dsl.md) |
54
56
  | 思维导图、时序图、类图、饼图、甘特图 | 任何身份 | [`../routes/mermaid.md`](../routes/mermaid.md) |
55
57
  | 鱼骨图、金字塔图、流程图 | `Doubao` / `Seed` | [`../routes/dsl.md`](../routes/dsl.md) |
56
58
  | 其他图表 | `Claude` / `Gemini` / `GPT` / `GLM` / `Doubao` / `Seed` | [`../routes/svg.md`](../routes/svg.md) |
@@ -81,7 +83,7 @@ diagram.png ← 渲染结果
81
83
 
82
84
  写入画板时按最终产物类型选择 `+update --input_format`:
83
85
 
84
- - Mermaid / PlantUML / SVG 产物直接用对应的 `mermaid` / `plantuml` / `svg` 写入。
86
+ - Mermaid / PlantUML / SVG 产物直接写入时,`--input_format` 取单值 `mermaid` / `plantuml` / `svg`;写入非空已有画板并需要 overwrite 时,先确认会整板重建;SVG 修改已有画板时先走 [`../routes/svg-edit.md`](../routes/svg-edit.md) 的确认 workflow。
85
87
  - 只有 DSL 产物或已明确需要 OpenAPI 原生节点格式时,才先用 `npx -y @larksuite/whiteboard-cli@^0.2.13 --to openapi --format json` 转换,再用 `raw` 写入。
86
88
 
87
89
  具体命令示例、`--overwrite`、`--idempotent-token` 和 `--as user/bot` 的使用方式,统一参考 [`whiteboard +update`](./lark-whiteboard-update.md)。
@@ -33,7 +33,7 @@ Step 3: 渲染 & 审查 → 交付
33
33
  npx -y @larksuite/whiteboard-cli@^0.2.13 -i diagram.json --to openapi --format json \
34
34
  | lark-cli whiteboard +update --whiteboard-token <board_token> \
35
35
  --source - --input_format raw --idempotent-token <时间戳+标识> --as user
36
- → 完整 dry-run / 确认流程见 SKILL.md [§ 写入画板](../SKILL.md#写入画板)
36
+ → 完整 dry-run / 确认流程见 [§ 写入画板](../references/lark-whiteboard-workflow.md#写入画板)
37
37
  - 交付:向用户报告 board_token 写入成功
38
38
  ```
39
39
 
@@ -73,7 +73,13 @@ Step 3: 渲染 & 审查 → 交付
73
73
  | 循环/飞轮图 | `scenes/flywheel.md` | 增长飞轮、闭环链路 |
74
74
  | 里程碑 | `scenes/milestone.md` | 时间线、版本演进 |
75
75
  | 流程图 | `scenes/flowchart.md` | 业务流、状态机、带条件判断的链路 |
76
- | 图片展示 | `scenes/photo-showcase.md` | 用户显式要求图片/配图/插图时(需先完成 `elements/image.md` 的图片准备) |
76
+
77
+ ### 插入 @用户提及 / 图片
78
+
79
+ | 当前内容包含 | 必读指南 |
80
+ |---|---|
81
+ | @用户提及 | [`../scenes/mention.md`](../scenes/mention.md) |
82
+ | 图片 / 配图 | [`../scenes/photo-showcase.md`](../scenes/photo-showcase.md) |
77
83
 
78
84
  ## 渲染前自查
79
85
 
@@ -22,6 +22,6 @@ Step 3: 渲染验证 & 写入画板 & 交付
22
22
  npx -y @larksuite/whiteboard-cli@^0.2.13 -i diagram.mmd --to openapi --format json \
23
23
  | lark-cli whiteboard +update --whiteboard-token <board_token> \
24
24
  --source - --input_format raw --idempotent-token <时间戳+标识> --as user
25
- → 完整 dry-run / 确认流程见 SKILL.md [§ 写入画板](../SKILL.md#写入画板)
25
+ → 完整 dry-run / 确认流程见 [§ 写入画板](../references/lark-whiteboard-workflow.md#写入画板)
26
26
  6. 交付:向用户报告 board_token 写入成功
27
27
  ```
@@ -16,11 +16,14 @@ SVG 导出是**纯视觉快照**,再次导入后画板语义(思维导图层
16
16
 
17
17
  ### 0. 用户确认(强制)
18
18
 
19
- 在执行任何编辑前,**必须**向用户说明:
19
+ 执行任何编辑前,先判断**紧邻的上一条用户消息**是否已明确确认有损编辑:
20
+
21
+ - **已确认**(含用户主动预授权,如"我知道有损,直接改")→ 直接进入 Step 1,不再重复警告。
22
+ - **未确认或回复含糊** → 原样向用户发出下面这句话,**然后立即结束本回合等待回复** —— 同一条消息内不得附带任何导出/编辑/写回命令或工具调用:
20
23
 
21
24
  > SVG 编辑只保证视觉层面对齐,画板语义(层级/节点类型/思维导图结构/表格结构/连线绑定/容器类型/mention 等)将不可恢复,是否继续?
22
25
 
23
- **用户未确认前不得执行后续步骤。**
26
+ 这是**知情确认**(动手前让用户对语义丢失止损);真正的破坏性写入在 Step 4 还会再经 `--overwrite` dry-run 确认一次,二者职责不同、都不可省。
24
27
 
25
28
  ### 1. 导出当前画板 SVG
26
29
 
@@ -54,6 +54,8 @@
54
54
  - 阴影:`<filter>` 里放 `<feDropShadow>` 或标准 drop/inner primitive 链 (`<feGaussianBlur in="SourceAlpha">` + `<feOffset>` + `<feFlood>` + `<feComposite>` + `<feMerge>`), 会被识别成节点阴影, drop 至多 1 个, inner 至多 1 个; 其余 filter 效果不识别
55
55
  - 渐变:`<linearGradient>` / `<radialGradient>` 在 `<defs>` 中定义, 通过 `fill="url(#id)"` 引用 (载体限 `<rect>` / `<circle>` / `<ellipse>` / `<polygon>` / `<path>`), 需要至少 2 个 `<stop>`, `gradientUnits` 只支持默认的 `objectBoundingBox` (不写即可);
56
56
 
57
- **⚠️ [!IMPORTANT] 不支持的装饰特性**
57
+ > [!IMPORTANT]
58
+ > ⚠️ **不支持的装饰特性**
59
+
58
60
  - `<pattern>` / `<clipPath>` / `<mask>` / 非阴影用途的 `<filter>` (blur / hue-rotate / 复合合成 / `flood-color=url(...)` / 多个 `<feDropShadow>` 等) → 画板不支持,**请避免使用,否则会导致画板渲染问题**
59
61
  - 渐变边界:`gradientUnits="userSpaceOnUse"` / `spreadMethod="reflect|repeat"` / stops 少于 2 个 / 复杂 `gradientTransform` 会变成不可编辑图片, 视觉正确但失去可编辑性, 若无必要请沿用默认 `objectBoundingBox`
@@ -0,0 +1,71 @@
1
+ # 提及用户 (@用户 / mentionUser)
2
+
3
+ 适用于:文本节点内需要 @ 某个飞书用户(如"负责人:@张三"、"@李四 请跟进")。mention 不是独立节点,而是文本节点富文本中的一段 run,可与普通文字混排。
4
+
5
+ > 当用户要插入 @用户提及时阅读本页。
6
+
7
+ ## 取值来源(强约束)
8
+
9
+ - 本页只讲 @用户(mentionUser)。@文档(mentionDoc)暂不支持。
10
+ - `mentionUserId` 必须是**真实的飞书用户 open_id**(形如 `ou_xxxxxxxx`)。
11
+ - 用户只给出**姓名**时,先用 `lark-contact` skill 把姓名解析成 open_id,再填入 `mentionUserId`。
12
+ - **无法解析出真实 open_id 时,停下向用户确认,禁止臆造 id**。假 id 会写入失败或 @ 到错误的人。
13
+
14
+ ## Content 约束(关键)
15
+
16
+ - 带 `mentionUserId` 的 run,其 `content` **必须非空**,约定填 `"*"`(单字符占位)。
17
+ - 原因:转换按字符占位来引用样式,`content` 为空串时该 mention 不会产出任何元素(静默丢失)。
18
+ - `content` 的字面内容**不会显示**:画板上显示的是按 open_id 反查到的用户名,不是 `content` 的文字。因此不要把用户名写进 `content`,填单个 `"*"` 即可。
19
+ - 一个 run 只能是一种类型:`mentionUserId` 与 `hyperlink` **互斥**,不能同时出现在同一个 run(校验会报错)。需要"链接 + @用户"时拆成两个 run。
20
+
21
+ ## 骨架示例
22
+
23
+ `text` 用 `WBTextRun[]`,把 @用户 拆成独立 run(`content: "*"` + `mentionUserId`),前后再接普通文字 run:
24
+
25
+ ```json
26
+ {
27
+ "type": "text",
28
+ "width": "fit-content",
29
+ "height": "fit-content",
30
+ "text": [
31
+ { "content": "负责人:", "fontSize": 14 },
32
+ { "content": "*", "mentionUserId": "ou_xxxxxxxxxxxxxxxx", "fontSize": 14 },
33
+ { "content": " 请本周内跟进", "fontSize": 14 }
34
+ ]
35
+ }
36
+ ```
37
+
38
+ 写入画板走标准 DSL 路径(`npx -y @larksuite/whiteboard-cli@^0.2.13 -i diagram.json --to openapi --format json | lark-cli whiteboard +update ... --input_format raw`),无需手写 raw JSON。
39
+
40
+ ## 正反例
41
+
42
+ 正确:
43
+
44
+ ```json
45
+ { "content": "*", "mentionUserId": "ou_abc123" }
46
+ ```
47
+
48
+ 错误(content 空串 → 不产出 @用户):
49
+
50
+ ```json
51
+ { "content": "", "mentionUserId": "ou_abc123" }
52
+ ```
53
+
54
+ 错误(把用户名写进 content → 多余占位,显示仍由 uid 决定):
55
+
56
+ ```json
57
+ { "content": "@张三", "mentionUserId": "ou_abc123" }
58
+ ```
59
+
60
+ 错误(与 hyperlink 同 run → 校验报错,须拆两个 run):
61
+
62
+ ```json
63
+ { "content": "*", "mentionUserId": "ou_abc123", "hyperlink": "https://xxx.com" }
64
+ ```
65
+
66
+ ## 陷阱
67
+
68
+ - **content 为空**:mention 静默丢失,画板上看不到 @用户。必须填 `"*"`。
69
+ - **把用户名写进 content**:无意义,显示名由 open_id 反查决定;且多字符会占用多个字符位。
70
+ - **mentionUserId + hyperlink 同 run**:一个 run 只能是一种元素类型,会被校验拦截,须拆成两个 run。
71
+ - **用假 id 或用户中文名当 id**:`mentionUserId` 只接受真实 open_id,先经 `lark-contact` 解析。
@@ -27,14 +27,14 @@ metadata:
27
27
  - 用户要**按特定主题 / 关键词 / 内容线索查找资料并收集到知识库节点或新建知识库节点下**,必须先阅读 [`../lark-drive/references/lark-drive-workflow.md`](../lark-drive/references/lark-drive-workflow.md),再按其中 `Workflow Registry` 进入 [`topic_move_collector`](../lark-drive/references/lark-drive-workflow-topic-move-collector.md) workflow。该 workflow 使用 Drive 全量搜索召回,再按 Wiki 目标解析、确认和移动;不要只用 Wiki 节点列表做局部遍历。
28
28
  - 用户要**整理 / 盘点 / 归类 / 重构知识库、个人文档库、文档库目录或 Wiki 节点结构**,或要生成整理方案、目标目录树、移动计划时,不要只使用 Wiki 节点 API。必须先阅读 [`../lark-drive/references/lark-drive-workflow.md`](../lark-drive/references/lark-drive-workflow.md),再按其中 `Workflow Registry` 进入 [`knowledge_organize`](../lark-drive/references/lark-drive-workflow-knowledge-organize.md) workflow;该 workflow 负责 Drive / Wiki / 个人文档库的统一入口解析、资源盘点、分类计划、写前确认和结果验证。
29
29
  - 用户要把**已有 Wiki 节点移出知识库,放到 Drive 文件夹或“我的空间”根目录**:使用 `wiki +move-to-drive`,不要使用 `wiki +move` 或 `drive +move`。这是会改变节点归属和权限继承的写操作,执行前确认源节点与目标位置。
30
- - 用户给的是知识库 URL(`.../wiki/<token>`),且后续要查成员/加成员/删成员:先调用 `lark-cli wiki spaces get_node --params '{"token":"<wiki_token>"}'` 获取 `space_id`,后续成员接口统一使用 `space_id`。
30
+ - 用户给的是知识库 URL(`.../wiki/<token>`),且后续要查成员/加成员/删成员:先确定下游成员操作的身份(默认 `user`;用户明确要求应用 / bot 视角时用 `bot`),再调用 `lark-cli wiki +node-get --node-token '<wiki_url>' --as user --format json`,从 `data.space_id` 获取空间 ID;下游使用 bot 时将示例中的身份改为 `--as bot`。节点解析与后续成员操作必须使用相同身份。
31
31
  - 用户要**删除**知识空间(`wiki +delete-space`)但只给了名称或 URL:**不能**把名称 / URL 原样传给 `--space-id`,必须先解析出真实 `space_id`。解析方式:
32
- - URL(`.../wiki/<token>`):`lark-cli wiki spaces get_node --params '{"token":"<wiki_token>"}' --format json`,读 `data.node.space_id`。
32
+ - URL(`.../wiki/<token>`):先确定后续 `wiki +delete-space` 的身份(默认 `user`;明确要求 bot 视角时用 `bot`),再调用 `lark-cli wiki +node-get --node-token '<wiki_url>' --as user --format json`,读取 `data.space_id`;下游使用 bot 时将示例中的身份改为 `--as bot`。解析和删除必须使用相同身份。
33
33
  - 只知名称:`lark-cli wiki spaces list --format json`,边翻页边收集 items 并按 `name` 精确匹配;**一旦任一页累计到至少 1 条精确匹配就停止翻页**。只有当翻完所有页(`has_more=false`)仍无精确匹配时,才对已收集的全量 items 做宽松匹配(`name` trim 空格、大小写不敏感、子串包含)。
34
34
  - **关键安全约束**:无论精确还是模糊,**无论命中 1 条还是多条,发起删除前都必须把候选(`name` + `space_id` + `description` + `space_type`)列给用户,由用户明确选定一个 `space_id` 再执行**。不要因为"只命中一条"就自动执行删除。
35
35
  - 命中 0 条:停下来问用户是名称拼错了还是调用方无权限;**不要**自行改名字重试。
36
36
  - 用户明确选定后再执行 `lark-cli wiki +delete-space --space-id <ID> --yes`(高风险写操作,必须显式 `--yes`)。
37
- - 反例:不要把 wiki URL / 名称直接当 `--space-id`(如 `--space-id "https://.../wiki/<wiki_token>"`);务必先用 `wiki spaces get_node` 解析出 `data.node.space_id` 再传。
37
+ - 反例:不要把 wiki URL / 名称直接当 `--space-id`(如 `--space-id "https://.../wiki/<wiki_token>"`);务必先用 `wiki +node-get` 解析出 `data.space_id` 再传。
38
38
  - 用户要在知识库中创建新节点,优先使用 `lark-cli wiki +node-create`。
39
39
  - 用户要列出 Wiki 节点:先用 `wiki +space-list --as user` 拿数字 `space_id`,再用 `wiki +node-list --space-id <space_id>`。不要把 wiki URL、node token、doc token、名称直接当 `--space-id`。钻子节点时 `--parent-node-token` 必须是 wiki node token;如果用户给的是 docx/sheet/base URL,先用 `wiki +node-get --node-token <url>` 解析出 `node_token`。
40
40
  - `wiki +node-list` 命中 `invalid_parameters`、`not_found`、`permission_denied` 时,不要重复调用同一参数;按 hint 修 `space_id` / `parent_node_token` / 权限。只有 `rate_limit` 才做退避重试。
@@ -48,6 +48,8 @@ metadata:
48
48
 
49
49
  Shortcut 是对常用操作的高级封装(`lark-cli wiki +<verb> [flags]`)。有 Shortcut 的操作优先使用。
50
50
 
51
+ 获取或解析 Wiki 节点统一优先使用 `wiki +node-get`,包括只为获取 `space_id`、`node_token`、`obj_token` 或 `obj_type` 的中间步骤。只有当前 CLI 不提供该 shortcut,或任务明确需要 shortcut 未输出的原始响应字段时,才回退到 `wiki spaces get_node`;回退前先运行 `lark-cli schema wiki.spaces.get_node`。
52
+
51
53
  | Shortcut | 说明 |
52
54
  |----------|------|
53
55
  | [`+move`](references/lark-wiki-move.md) | Move a wiki node, or move a Drive document into Wiki |
@@ -117,13 +117,16 @@ dry-run 会展示两步调用链:
117
117
 
118
118
  ### 2. 只有知识库 URL(`.../wiki/<token>`)
119
119
 
120
+ 先确定后续 `wiki +delete-space` 使用的身份:默认使用 `user`;用户明确要求应用 / bot 视角时使用 `bot`。下面展示默认 user 身份;下游使用 bot 时将两步都改为 `--as bot`。节点解析和删除必须使用相同身份。
121
+
120
122
  ```bash
121
- lark-cli wiki spaces get_node \
122
- --params '{"token":"<wiki_token>"}' \
123
+ lark-cli wiki +node-get \
124
+ --node-token '<wiki_url>' \
125
+ --as user \
123
126
  --format json
124
127
  ```
125
128
 
126
- 读取 `data.node.space_id`。
129
+ 读取 `data.space_id`。
127
130
 
128
131
  ### 3. 只有知识库名称
129
132
 
@@ -1,93 +0,0 @@
1
- # 文档统计:总字数 / 总字符数
2
-
3
- 当用户需要统计 Docx / Wiki 文档的总字数或总字符数时,使用本 skill 附带脚本 `scripts/doc_word_stat.py`。统计口径以该脚本为准,不要改用其他方式自行计算,也不要只读取 simple 摘要后统计。
4
-
5
- ## 调用方式
6
-
7
- 在线文档使用 XML full 内容,并让脚本读取 `docs +fetch --format json` 的 envelope:
8
-
9
- ```bash
10
- lark-cli docs +fetch --doc "$URL" --doc-format xml --detail full --format json \
11
- | python3 skills/lark-doc/scripts/doc_word_stat.py --protocol xml --lark-json --pretty
12
- ```
13
-
14
- `$URL` 可以是用户给出的 docx/wiki URL,也可以是可被 `docs +fetch` 解析的 token。
15
-
16
- ## 统计范围
17
-
18
- 先判断用户要求的是**整篇文档**还是**局部内容**:
19
-
20
- - 整篇文档的总字数 / 总字符数:按上方「调用方式」抓取 `full` 内容后统计。
21
- - 本次新增 / 替换 / 改写片段的字数:优先统计拟写内容本身;内容已写入文档时,只 fetch 对应 block / range 后统计。不得用整篇文档字数对比局部目标。
22
-
23
- 如需在自动化或回归验证中发现未覆盖块类型,追加严格参数:
24
-
25
- ```bash
26
- lark-cli docs +fetch --doc "$URL" --doc-format xml --detail full --format json \
27
- | python3 skills/lark-doc/scripts/doc_word_stat.py --protocol xml --lark-json --pretty --fail-on-unsupported --fail-on-unknown
28
- ```
29
-
30
- ## 如何读取结果
31
-
32
- 脚本输出 JSON。对用户汇报时默认只读两个核心字段:
33
-
34
- - `word_count`:总字数。按语义单位统计汉字、英文单词/URL/code path、数字、中文标点;普通贴着英文的英文标点不计入,但独立 ASCII 符号、中文之间的 `/` 等以脚本结果为准。
35
- - `char_count`:总字符数。统计汉字、英文字母、数字、中英文标点和脚本识别的可见符号;空格不计入。
36
-
37
- 其余字段用于排查或解释:
38
-
39
- - `breakdown`:拆分统计来源,例如 `han_chars`、`english_words`、`digits`、`chinese_punctuations`。
40
- - `unknown_blocks`:脚本遇到未知 XML/Markdown 块类型;通常表示需要扩展解析规则。
41
- - `unsupported_blocks`:脚本识别到块类型,但当前无法可靠提取可见文本。
42
- - `diagnostics.has_unknown` / `diagnostics.has_unsupported`:快速判断统计是否存在覆盖风险。
43
-
44
- 如果 `unknown_blocks` 或 `unsupported_blocks` 非空,回复用户时要说明“已统计可提取文本,但存在未覆盖块,结果可能偏低”,并列出对应块类型。为空时可直接给出结果。
45
-
46
- ## 字数遵循校验
47
-
48
- 当用户给了明确字数要求(写 N 字 / x-y 字 / x 字左右 / 上下浮动)时执行;没有明确字数要求则跳过。字数必须按本文流程用脚本统计,不要自己估。
49
-
50
- 1. 先按「统计范围」确认统计对象,再把要求归一成目标区间:`>x`→`[x+1, +∞)`;`<y`→`(-∞, y-1]`;`x-y`→`[x, y]`;`x 字左右`→`[round(0.9x), round(1.1x)]`
51
- 2. 按统计对象选择对应输入并调用脚本统计实际字数,读取输出里的 `word_count`
52
- 3. 对比 `word_count` 与目标区间:区间内即通过;低于下限 → 补充**实质内容**(非注水);高于上限 → 删减冗余内容。改完重新统计
53
- 4. **最多 2 轮**。2 轮后仍不达标:停止,不得为达标而注水或删关键内容;如实汇报【目标区间 / 当前字数 / 差值与方向 / 已试 2 轮 / 未达原因】,**禁止谎称达标**
54
-
55
- ## 输出示例
56
-
57
- 输入正文等价于:`标题` + `一个苹果是 an apple。` 时,输出形态如下:
58
-
59
- ```json
60
- {
61
- "word_count": 10,
62
- "char_count": 15,
63
- "breakdown": {
64
- "han_chars": 7,
65
- "english_words": 2,
66
- "number_words": 0,
67
- "chinese_punctuations": 1,
68
- "english_letters": 7,
69
- "digits": 0,
70
- "english_punctuations": 0,
71
- "symbol_words": 0,
72
- "symbol_chars": 0
73
- },
74
- "protocol": "xml",
75
- "unknown_blocks": [],
76
- "unsupported_blocks": [],
77
- "diagnostics": {
78
- "has_unknown": false,
79
- "has_unsupported": false,
80
- "types": {},
81
- "unknown_types": {},
82
- "unsupported_types": {},
83
- "actions": {}
84
- }
85
- }
86
- ```
87
-
88
- 面向用户的回复可简化为:
89
-
90
- ```text
91
- 总字数:10
92
- 总字符数:15
93
- ```
@@ -1,47 +0,0 @@
1
- # 从零创作工作流
2
-
3
- 用户提供主题、需求或简要说明,需要生成一份新的飞书文档时,遵循本工作流。
4
-
5
- ## 核心方法论 — Code-Act Loop
6
-
7
- 通过自适应的 **Code-Act Loop** 驱动文档创作,而非固定模板式的工作流。每次任务都循环执行:
8
-
9
- 1. **Plan(规划)** — 根据用户目标和文档当前状态,评估下一步该做什么
10
- 2. **Execute(执行)** — 由主 Agent 自己运行 `lark-cli docs` 命令推进正文;仅画板渲染按需隔离到 SubAgent(见步骤三)
11
- 3. **Observe(观察)** — 检查命令输出,验证正确性,确认内容是否满足用户目标
12
- 4. **Iterate(迭代)** — 如需调整,回到 Plan 继续循环
13
-
14
- 循环在文档达到质量标准且满足用户需求时结束。不要试图一次性产出完美内容——迭代打磨效果更好。根据用户实际需求灵活决定文档结构和版块,而不是套用固定模板。
15
-
16
-
17
- ## 典型 Code-Act Loop 流程
18
-
19
- ### 步骤一:规划与撰写(单 Agent 串行)
20
-
21
- 正文由主 Agent 串行维护,**不按章节拆给并行 Agent**,避免上下文割裂、重复矛盾和全文级约束失效。
22
-
23
- 1. 分析用户需求:受众、目的、范围
24
- 2. 设计大纲:根据任务自然选择结构。可以是短文、纪要、FAQ、方案、报告、清单或其他形式;不要默认套固定章节、固定开头或固定富 block 配比
25
- 3. `docs +create` 创建并撰写:
26
- - **短文档**:一次写入完整内容。使用 Markdown 时,避免同时传入 `--title` 和同名 `# 标题`
27
- - **长文档**:先建骨架(标题 + 各级标题),再由主 Agent **顺序逐节**用 `block_insert_after --block-id <章节标题 block_id>` 补全正文;写完一节再写下一节,始终带着已写内容的上下文,保证衔接、不重复
28
- - ⚠️ 不要一次性把超长完整内容塞进 `--content`,容易触发字符/参数限制;长文按节分次写入
29
- - ⚠️ 同一节内多次插入时,要锚到**上一个新插入的 block**(按 [`lark-doc-update.md`](../lark-doc-update.md) 的「Block ID 生命周期」),否则反复锚同一个标题会让段落顺序颠倒
30
- - ⚠️ 若先建骨架写了占位摘要,补正文时**删除占位摘要**,不要留残渣
31
- - ⚠️ **`@file` 路径限制**:`--content @file` 只接受当前工作目录下的相对路径,传绝对路径(如 `@/tmp/xxx.md`)会报 `unsafe file path`。需要落盘时,将文件写在 cwd 下,用完自行清理
32
-
33
- ### 步骤二:整合审查与画板识别(串行)
34
-
35
- 4. `docs +fetch --api-version v2 --detail with-ids` 获取文档,审查整体效果
36
- 5. 评估内容是否满足用户目标:事实是否完整、结构是否清楚、语气是否匹配、是否保留必要素材;检查跨节有无重复、矛盾或断流。再按 `lark-doc-style.md` 的「写完自检」快速核对,发现问题就地定向修正
37
- 6. **画板识别**:逐章节扫描,判断是否有段落用图明显比文字更易懂(流程 / 架构 / 时间线 / 对比 / 占比等,见 `lark-doc-style.md` 的画板原则)。默认用文字,只有确需图示才记录需要插图的章节、推荐画板类型、mermaid/SVG 路径和用于画图的源内容
38
-
39
- ### 步骤三:画板处理与润色
40
-
41
- 7. **优先处理步骤二识别出的画板需求**:读取并按 [lark-doc-whiteboard.md](../lark-doc-whiteboard.md) 选型和插入;正文本身不交给 SubAgent
42
- 8. 由**主 Agent 自行润色**(不另起内容子 Agent,正文始终一人维护):文字密集且不易读时,优先拆段、加小标题或调整顺序——叙述内容保持成段,**不要默认改成列表**,只有确属并列要点 / 步骤才用列表(见 `lark-doc-style.md`);只有确实存在行列数据时才用 `<table>`。其余富 block 的取舍一律遵循 `lark-doc-style.md` 的写作原则,不主动堆叠。需要明显分隔的主题可补充 `<hr/>`,不强制章节间都使用。本地图片使用 `docs +media-insert` 插入
43
-
44
- ### 步骤四:专项校验
45
-
46
- 9. **字数门禁**:如果用户给出任何明确字数要求(如“700-800 字”“1000 字左右”“不少于 500 字”“控制在 800 字以内”),本步骤必须执行,不属于按需项。读取并执行 [`lark-doc-word-stat.md`](../lark-doc-word-stat.md) 的「字数遵循校验」;未得到脚本统计结果前,不得向用户声明“符合字数要求”。若没有明确字数要求,则跳过本项,不读取该 workflow。若执行了专项校验,向用户呈现目标区间、`word_count` 和达标结论
47
- 10. **重复标题检查**:文档生成后,检查文档标题和正文第一个标题块是否重复;若重复,删除或改写正文第一个标题块,避免读者看到同一标题连续出现
@@ -1,68 +0,0 @@
1
- # 飞书文档写作原则
2
-
3
- 写飞书文档,像一个该领域资深的人类作者那样写,而不是把内容"装配"成组件。
4
- 本文只讲"何时用、什么风格";具体标签 / 命令语法见 [`lark-doc-xml.md`](../lark-doc-xml.md)。
5
-
6
- ## 一、用户明确要求优先
7
-
8
- 用户点名要某种格式——高亮块、分栏、列表、某编号体例、表格、画板、某模板、某已有文档的风格——**一律照用户的来,下面的"默认克制"全部让位**。用户给了样例或已有文档,就沿用它的结构与语气。
9
-
10
- ## 二、默认写连贯段落
11
-
12
- 用户没指定时,**默认是连贯段落**;其余按内容类型分流,别一律"少用结构",也别什么都升标题:
13
-
14
- | 内容 | 用什么 | ❌ 别 |
15
- |---|---|---|
16
- | 叙述、论证、分析、说明 | **连贯段落** | 拆成列举 |
17
- | 真·行列数据(预算、指标、对比、排期、字段说明) | **表格** | 写成段落或把字段堆成一行 |
18
- | 字段:值(主题、时长、负责人等,少量) | **加粗标签行**或一句话 | 每字段一个标题 |
19
- | 方法 / 措施 + 每项一段描述 | **加粗引导句段落**(「**全程督导。**…」) | 每项升标题 |
20
- | 任务清单 / 检查项 / 待办事项 | **`<checkbox>`** | 用普通列表替代可交互待办 |
21
- | 纯短并列项(无描述,如材料清单) | 列表 | — |
22
- | 章节(内容成块、需在目录导航) | 标题层级 | — |
23
-
24
- - 判断标准:**去掉结构后能顺成段落,就用段落;成行成列的数据,就用表格。**
25
- - **红线一:标题层级只给"章节"。** "小标题 + 一两句话"的小项(字段、方法、要点)不该占标题层级——按上表降成标签行 / 加粗引导句段落(否则目录里全是没信息量的条目)。
26
- - **红线二:列举(「一是 / 二是」「第一 / 第二」「(1)(2)(3)」)只给真正并列的具体项,且别每节都用。**
27
- - 「一是 / 二是」是党务列举的措辞——只用在列具体的**问题 / 措施**那一处;背景、现状、认识、分析、过渡、总结**一律成段**。
28
- - **整篇每段 / 每节都"一是 / 二是",和"每段一个 bullet"是同一个骨架化的错——不因为是党务就变对**(纯清单 / 台账类除外)。
29
-
30
- ## 三、按体裁写
31
-
32
- - **公文 / 法律 / 学术 / 申报 / 项目方案等严肃正式提交物**:靠规范的标题层级、段落与编号体系表达;**默认不用高亮块、分栏**,要强调用加粗或规范小标题。
33
- - **面向公众号、微信等外部平台粘贴 / 发布的内容**:不用飞书特有富 block(高亮块、分栏等),粘出去会丢样式 / 错乱;改用标准标题、段落、列表、引用。
34
- - **一般文档**:以可读为先,不堆砌结构。
35
-
36
- ## 四、编号与层级
37
-
38
- - **一套编号体例、全篇一致;最忌中文大层级与阿拉伯小数编号混用。**
39
- - 公文 / 正式材料常用:「一、→(一)→ 1.→(1)」(中文大层级 + 阿拉伯细分层级)。
40
- - 学术 / 技术 / 商业报告:「1 → 1.1 → 1.1.1」或「一、→(一)→ 1.」,**择一**。
41
- - ⚠️ **「一、」只能配「(一)」;要用阿拉伯小数就从顶层全用「1 / 1.1」。绝不「一、」配「1.1 / 2.1」**——这是最常见的混用。
42
- - **不混用**多套(别"第X部分"+"一、"+"1."混着来);**同级不跳号**;**不跳级**。
43
- - **编号 / 标题层级只给"章节"**,不要为了凑齐体例把每个小项都编上「(一)」、升成标题(小项处理方式见上文「二、默认写连贯段落」)。
44
- - 简单的 1.2.3 并列项用原生 `<ol><li seq="auto">…</li></ol>` 让飞书自动编号、自动对齐;「一、(一)」原生产不出,才手打成文字——此时用标题级别表达层次,**不靠手动缩进**、各级顶格(全角括号「()」叠手动缩进会视觉错位)。
45
-
46
- ## 五、飞书特有组件,克制使用
47
-
48
- - **高亮块 `<callout>`**:很重的强提醒信号,**默认不用**;只给"不提醒就会出错 / 遗漏"的关键项,全文极少(0~1 个),不要每节导语 / 结论都做成高亮块。
49
- - **分栏 `<grid>`**:仅左右信息量相当、确需并排对照的短内容;否则用段落或表格。
50
- - **画板**:默认用文字,只在**图示明显比文字更易懂**(流程、架构、时间线、对比、占比等)或用户要求时才用。怎么插、用哪种类型见 [`lark-doc-xml.md`](../lark-doc-xml.md) 与 [`lark-doc-whiteboard.md`](../lark-doc-whiteboard.md)。
51
- - **颜色**:默认朴素、不上色;需要时保持语义一致,按下表选择对应颜色,不为装饰上色。可用色见 [`lark-doc-xml.md`](../lark-doc-xml.md) 的「美化系统」。
52
-
53
- | 语义 | 背景色 | 文字色 |
54
- |-|-|-|
55
- | 信息、说明 | `light-blue` | `blue` |
56
- | 成功、推荐 | `light-green` | `green` |
57
- | 警告 / 错误 / 风险 | `light-red` | `red` |
58
- | 注意、待确认 | `light-yellow` | `yellow` |
59
- | 中性、辅助 | `light-gray` | — |
60
-
61
- ## 六、写完自检
62
-
63
- 交付前快速回看:
64
- - **叙述是否被列举化**:背景 / 现状 / 认识 / 分析 / 成效 / 过渡 / 总结等应成段;列举只用于同层级、可并列处理的信息,如问题、措施、步骤、任务或材料清单。若正文反复使用连续编号、项目符号或固定并列句式,导致内容缺少叙述,应把背景 / 认识 / 分析 / 过渡改写成有承接关系的段落(纯清单 / 台账类除外)。
65
- - **数据是否正确呈现**:成行成列的数据应使用表格呈现,不要写成段落,也不要用分隔符把多个字段硬串在一起。
66
- - **标题是否滥用**:"小标题 + 一句话"的小项不要升成标题;应改成标签行、加粗引导句段落或普通段落。
67
- - **编号是否统一**:全篇一套、不跳号、不跳级,尤其不要中文 + 阿拉伯混用(如「一、」配「1.1」)。
68
- - **组件是否克制且保真**:高亮块 / 分栏 / 画板 / 颜色应符合体裁和用户要求;引用 / 图片 / 资源块必须保留。
@@ -1,48 +0,0 @@
1
- # 改写增强工作流
2
-
3
- 用户提供已有文档链接或 token,需要改写、润色、补充或重排版时,遵循本工作流。
4
-
5
- ## 核心方法论 — Code-Act Loop
6
- 通过自适应的 **Code-Act Loop** 驱动文档改写,而非固定模板式的工作流。每次任务都循环执行:
7
- 1. **Plan(规划)** — 根据用户目标和文档当前状态,评估下一步该做什么
8
- 2. **Execute(执行)** — 由主 Agent 自己运行 `lark-cli docs` 命令推进改写;仅画板渲染按需隔离到 SubAgent(见步骤二)
9
- 3. **Observe(观察)** — 检查命令输出,验证正确性,确认内容是否满足用户目标
10
- 4. **Iterate(迭代)** — 如需调整,回到 Plan 继续循环
11
-
12
- ## 核心原则:精准手术优于全量覆盖
13
- 1. **精准手术**:只改用户指定的 block,不改其他 block。
14
- 2. **全量覆盖**:如果用户明确要改整篇,才用 `overwrite` 命令。
15
- 3. **保真约束**:改写时原文里的 `<cite type="user">`(@人)、`<cite type="doc">`(@文档)、`<img>`、`<source>`、`<whiteboard>`、`<sheet>`、`<bitable>`、`<synced_reference>` 等行内组件和资源块一律原样保留(含所有 token / user-id / doc-id 属性),不许替换成纯文本姓名、链接或占位符。
16
-
17
- ## 工作流程
18
-
19
- ### 步骤一:分析与画板识别(串行)
20
-
21
- 1. **选择读取范围**(节省上下文的关键):
22
- - 用户只改某一节 / 文档较大 → 先 `docs +fetch --scope outline --max-depth 2` 拿目录,再 `docs +fetch --scope section --start-block-id <目标标题id> --detail with-ids` 精读该节(`section` 会自动展开到下一个同级/更高级标题前,不用手动算结束 block id)
23
- - 需要精确跨节区间 → `docs +fetch --scope range --start-block-id xxx --end-block-id yyy`(或 `--end-block-id -1` 读到末尾)
24
- - 用户只给了模糊关键词 → `docs +fetch --scope keyword --keyword xxx --context-before 1 --context-after 1 --detail with-ids`
25
- - 用户明确要改整篇 → `docs +fetch --detail with-ids`
26
- - 详见 [`lark-doc-fetch.md`](../lark-doc-fetch.md) 中「选 `--scope`(读取范围)」小节
27
- 2. 系统性评估:用户想改什么、现有文档风格是什么、哪些内容需要保留、哪些问题影响理解
28
- 3. **画板识别**:逐章节扫描,判断是否有段落用图明显比文字更易懂(流程 / 架构 / 时间线 / 对比 / 占比等,见 `lark-doc-style.md` 的画板原则)。默认用文字,只有确需图示才记录需要插图的章节(block ID)、推荐画板类型、mermaid/SVG路径和源内容片段
29
- 4. 向用户简要说明改进计划(包含识别出的画板机会)
30
-
31
- ### 步骤二:定向改写(单 Agent 串行)
32
-
33
- 5. **优先处理步骤一识别出的画板候选段落**:读取并按 [lark-doc-whiteboard.md](../lark-doc-whiteboard.md) 选型和插入;正文本身不交给 SubAgent
34
- 6. 由主 Agent **顺序逐节**改写,**不按章节拆给并行 Agent**,避免上下文割裂、重复矛盾和全文级约束失效:
35
- - 沿用或轻微调整已有文档风格,除非用户要求彻底重排版
36
- - 优先通过重写段落、调整标题、补充小标题提升可读性;叙述内容保持成段,**不要默认改成列表**,只有确属并列要点 / 步骤才用列表(见 `lark-doc-style.md`)
37
- - 富 block 是可选表达手段,不因固定比例而添加,取舍遵循 `lark-doc-style.md` 的写作原则;画板类需求只走第 5 步
38
-
39
- ### 步骤三:验证(串行)
40
-
41
- 7. 获取更新后文档局部内容,检查是否符合用户目标和已有风格
42
- 8. 检查是否满足用户目标并保留原有关键内容。再按 `lark-doc-style.md` 的「写完自检」快速核对,发现问题则定向修正
43
-
44
- ### 步骤四:专项校验(按需执行)
45
-
46
- 9. 仅当用户预期需要校验字数时,才读取并执行 [`lark-doc-word-stat.md`](../lark-doc-word-stat.md) 的「字数遵循校验」;否则跳过本项,不读取该 workflow。若执行了专项校验,向用户呈现结果
47
-
48
- **上下文节省提示**:主 Agent 改某节时如需重新读取,优先用 `docs +fetch --scope section --start-block-id <章节标题id>`(自动覆盖整节),或 `--scope range --start-block-id xxx --end-block-id yyy` 精确区间,只拉当前章节,不要重复拉全文。