weaver-work-cli 0.1.7 → 0.1.20

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 (264) hide show
  1. package/README.md +11 -11
  2. package/dist/cmd/action.js +76 -0
  3. package/dist/cmd/index.js +2 -0
  4. package/dist/cmd/refs/index.js +103 -0
  5. package/dist/cmd/register.js +31 -0
  6. package/dist/cmd/root.js +1 -0
  7. package/dist/cmd/setup/index.js +25 -5
  8. package/dist/cmd/skills/index.js +37 -5
  9. package/dist/core/connector.js +54 -0
  10. package/dist/core/context.js +2 -1
  11. package/dist/core/input.js +48 -0
  12. package/dist/core/output.js +298 -3
  13. package/dist/core/refs.js +432 -0
  14. package/dist/core/state.js +26 -0
  15. package/dist/internal/e10/auth/commands.js +2 -2
  16. package/dist/internal/e10/auth/session.js +14 -0
  17. package/dist/internal/e10/auth/xiaoe.js +116 -51
  18. package/dist/internal/e10/request-runtime.js +5 -0
  19. package/dist/internal/skills/install.js +148 -28
  20. package/dist/internal/skills/reader.js +12 -9
  21. package/dist/shortcuts/blog/continuation.js +74 -0
  22. package/dist/shortcuts/blog/errors.js +60 -0
  23. package/dist/shortcuts/blog/host.js +175 -0
  24. package/dist/shortcuts/blog/index.js +324 -0
  25. package/dist/shortcuts/blog/manifest.js +415 -0
  26. package/dist/shortcuts/blog/operations/comment.js +125 -0
  27. package/dist/shortcuts/blog/operations/comments.js +31 -0
  28. package/dist/shortcuts/blog/operations/edit.js +131 -0
  29. package/dist/shortcuts/blog/operations/export.js +46 -0
  30. package/dist/shortcuts/blog/operations/like.js +80 -0
  31. package/dist/shortcuts/blog/operations/publish.js +157 -0
  32. package/dist/shortcuts/blog/operations/query-user.js +58 -0
  33. package/dist/shortcuts/blog/operations/query.js +96 -0
  34. package/dist/shortcuts/blog/operations/registry.js +54 -0
  35. package/dist/shortcuts/blog/operations/remind.js +176 -0
  36. package/dist/shortcuts/blog/operations/shared.js +330 -0
  37. package/dist/shortcuts/blog/operations/types.js +16 -0
  38. package/dist/shortcuts/blog/operations.js +9 -0
  39. package/dist/shortcuts/caizhilian/continuation.js +70 -0
  40. package/dist/shortcuts/caizhilian/errors.js +53 -0
  41. package/dist/shortcuts/caizhilian/host.js +190 -0
  42. package/dist/shortcuts/caizhilian/index.js +186 -0
  43. package/dist/shortcuts/caizhilian/manifest.js +42 -0
  44. package/dist/shortcuts/caizhilian/operations/api.js +801 -0
  45. package/dist/shortcuts/caizhilian/operations/confirm.js +75 -0
  46. package/dist/shortcuts/caizhilian/operations/files.js +306 -0
  47. package/dist/shortcuts/caizhilian/operations/form.js +170 -0
  48. package/dist/shortcuts/caizhilian/operations/handlers/collab.js +611 -0
  49. package/dist/shortcuts/caizhilian/operations/handlers/document.js +890 -0
  50. package/dist/shortcuts/caizhilian/operations/handlers/file-collection.js +346 -0
  51. package/dist/shortcuts/caizhilian/operations/handlers/file-upload.js +192 -0
  52. package/dist/shortcuts/caizhilian/operations/handlers/fileops.js +570 -0
  53. package/dist/shortcuts/caizhilian/operations/handlers/folder.js +969 -0
  54. package/dist/shortcuts/caizhilian/operations/handlers/search.js +318 -0
  55. package/dist/shortcuts/caizhilian/operations/handlers/setting-attach.js +294 -0
  56. package/dist/shortcuts/caizhilian/operations/handlers/setting-backup.js +423 -0
  57. package/dist/shortcuts/caizhilian/operations/handlers/setting-encrypt.js +238 -0
  58. package/dist/shortcuts/caizhilian/operations/handlers/setting-storage.js +364 -0
  59. package/dist/shortcuts/caizhilian/operations/handlers/system.js +106 -0
  60. package/dist/shortcuts/caizhilian/operations/registry.js +151 -0
  61. package/dist/shortcuts/caizhilian/operations/shared.js +408 -0
  62. package/dist/shortcuts/caizhilian/operations/specs.js +623 -0
  63. package/dist/shortcuts/caizhilian/operations/types.js +57 -0
  64. package/dist/shortcuts/caizhilian/operations.js +21 -0
  65. package/dist/shortcuts/contract/continuation.js +70 -0
  66. package/dist/shortcuts/contract/errors.js +62 -0
  67. package/dist/shortcuts/contract/host.js +205 -0
  68. package/dist/shortcuts/contract/index.js +318 -0
  69. package/dist/shortcuts/contract/manifest.js +596 -0
  70. package/dist/shortcuts/contract/operations/clause-reference.js +78 -0
  71. package/dist/shortcuts/contract/operations/form-info.js +371 -0
  72. package/dist/shortcuts/contract/operations/read.js +118 -0
  73. package/dist/shortcuts/contract/operations/registry.js +43 -0
  74. package/dist/shortcuts/contract/operations/request.js +300 -0
  75. package/dist/shortcuts/contract/operations/shared.js +133 -0
  76. package/dist/shortcuts/contract/operations/subject.js +157 -0
  77. package/dist/shortcuts/contract/operations/template.js +81 -0
  78. package/dist/shortcuts/contract/operations/types.js +7 -0
  79. package/dist/shortcuts/contract/operations/workflow.js +52 -0
  80. package/dist/shortcuts/contract/operations/write.js +131 -0
  81. package/dist/shortcuts/contract/operations.js +8 -0
  82. package/dist/shortcuts/hrm/index.js +83 -2
  83. package/dist/shortcuts/hrm/operations/employee.js +160 -30
  84. package/dist/shortcuts/hrm/operations/org.js +17 -3
  85. package/dist/shortcuts/hrm/operations/position.js +18 -2
  86. package/dist/shortcuts/index.js +5 -1
  87. package/dist/shortcuts/invoice/index.js +74 -36
  88. package/dist/shortcuts/invoice/manifest.js +674 -4
  89. package/dist/shortcuts/invoice/markdown.js +172 -0
  90. package/dist/shortcuts/invoice/operations/add.js +3 -3
  91. package/dist/shortcuts/invoice/operations/delete.js +2 -2
  92. package/dist/shortcuts/invoice/operations/get.js +10 -2
  93. package/dist/shortcuts/invoice/operations/import.js +2 -2
  94. package/dist/shortcuts/invoice/operations/registry.js +8 -1
  95. package/dist/shortcuts/invoice/operations/reim-auto.js +719 -0
  96. package/dist/shortcuts/invoice/operations/reim.js +85 -2
  97. package/dist/shortcuts/invoice/operations/shared.js +75 -8
  98. package/dist/shortcuts/invoice/operations/update.js +2 -2
  99. package/dist/shortcuts/invoice/operations/upload-and-validate.js +93 -0
  100. package/dist/shortcuts/invoice/operations/validate-preview.js +2 -1
  101. package/dist/shortcuts/invoice/projection.js +328 -0
  102. package/dist/shortcuts/meeting/host.js +18 -1
  103. package/dist/shortcuts/meeting/manifest.js +30 -18
  104. package/dist/shortcuts/meeting/operations/eb/catalog.js +390 -0
  105. package/dist/shortcuts/meeting/operations/eb/conflict.js +389 -0
  106. package/dist/shortcuts/meeting/operations/eb/factory.js +389 -0
  107. package/dist/shortcuts/meeting/operations/eb/index.js +22 -0
  108. package/dist/shortcuts/meeting/operations/env.js +8 -1
  109. package/dist/shortcuts/meeting/operations/registry.js +2 -0
  110. package/dist/shortcuts/meeting/operations/signs.js +216 -2
  111. package/dist/shortcuts/workflow/endpoints.js +2 -1
  112. package/dist/shortcuts/workflow/errors.js +8 -2
  113. package/dist/shortcuts/workflow/host.js +6 -3
  114. package/dist/shortcuts/workflow/operations/form.js +931 -533
  115. package/dist/shortcuts/workflow/operations/read.js +462 -81
  116. package/dist/shortcuts/workflow/operations/shared.js +44 -0
  117. package/dist/shortcuts/workflow/operations/write.js +760 -56
  118. package/dist/shortcuts/workflow/operations.js +36 -10
  119. package/docs/_catalog.md +6 -0
  120. package/docs/agent-invoice.md +5 -1
  121. package/docs/agent-io-channel-design.md +468 -0
  122. package/docs/agent-skill-install.md +9 -4
  123. package/docs/blog.md +123 -0
  124. package/docs/caizhilian.md +304 -0
  125. package/docs/contract.md +91 -0
  126. package/docs/e10-auth.md +2 -2
  127. package/docs/hrm.md +19 -9
  128. package/docs/invoice.md +5 -1
  129. package/docs/meeting.md +1 -1
  130. package/docs/operation-manual.md +15 -3
  131. package/docs/skill-review-2026-09-19.md +2 -2
  132. package/package.json +2 -2
  133. package/scripts/package-skill.mjs +33 -20
  134. package/skill-template/business-info.json +113 -14
  135. package/skill-template/domains/blog.md +24 -0
  136. package/skill-template/domains/caizhilian.md +22 -0
  137. package/skill-template/domains/jinchengda.md +23 -0
  138. package/skill-template/domains/meeting.md +1 -1
  139. package/skill-template/domains/workflow.md +1 -1
  140. package/skill-template/skill-template.md +1 -1
  141. package/skills/weaver-e10-blog/SKILL.md +111 -0
  142. package/skills/weaver-e10-blog/references/blog-comment.md +51 -0
  143. package/skills/weaver-e10-blog/references/blog-comments.md +39 -0
  144. package/skills/weaver-e10-blog/references/blog-default-permission.md +38 -0
  145. package/skills/weaver-e10-blog/references/blog-disabled-capabilities.md +11 -0
  146. package/skills/weaver-e10-blog/references/blog-edit.md +51 -0
  147. package/skills/weaver-e10-blog/references/blog-export.md +42 -0
  148. package/skills/weaver-e10-blog/references/blog-like.md +50 -0
  149. package/skills/weaver-e10-blog/references/blog-publish.md +52 -0
  150. package/skills/weaver-e10-blog/references/blog-query-user.md +45 -0
  151. package/skills/weaver-e10-blog/references/blog-query.md +49 -0
  152. package/skills/weaver-e10-blog/references/blog-remind.md +51 -0
  153. package/skills/weaver-e10-blog/references/blog-resolve-users.md +38 -0
  154. package/skills/weaver-e10-blog/references/source-manifest.json +1540 -0
  155. package/skills/weaver-e10-caizhilian/SKILL.md +216 -0
  156. package/skills/weaver-e10-caizhilian/references/agent-entry.md +106 -0
  157. package/skills/weaver-e10-caizhilian/references/collaboration.md +112 -0
  158. package/skills/weaver-e10-caizhilian/references/document.md +111 -0
  159. package/skills/weaver-e10-caizhilian/references/file-collection.md +136 -0
  160. package/skills/weaver-e10-caizhilian/references/file-upload.md +309 -0
  161. package/skills/weaver-e10-caizhilian/references/files.md +120 -0
  162. package/skills/weaver-e10-caizhilian/references/folder.md +118 -0
  163. package/skills/weaver-e10-caizhilian/references/org-browser.md +104 -0
  164. package/skills/weaver-e10-caizhilian/references/setting-attach.md +410 -0
  165. package/skills/weaver-e10-caizhilian/references/setting-backup.md +372 -0
  166. package/skills/weaver-e10-caizhilian/references/setting-encrypt.md +399 -0
  167. package/skills/weaver-e10-caizhilian/references/setting-storage.md +603 -0
  168. package/skills/weaver-e10-caizhilian/references/source-manifest.json +5079 -0
  169. package/skills/weaver-e10-caizhilian/references/withheld.md +93 -0
  170. package/skills/weaver-e10-caizhilian/references/write-protocol.md +120 -0
  171. package/skills/weaver-e10-calendar/SKILL.md +4 -3
  172. package/skills/weaver-e10-ebuilder-form/SKILL.md +4 -9
  173. package/skills/weaver-e10-ebuilder-form/references/context-routing.md +0 -9
  174. package/skills/weaver-e10-ebuilder-form/references/custom-api.md +1 -5
  175. package/skills/weaver-e10-ebuilder-form/references/fields-browser.md +1 -5
  176. package/skills/weaver-e10-ebuilder-form/references/list-nlist.md +1 -5
  177. package/skills/weaver-e10-ebuilder-form/references/openapi-read.md +1 -5
  178. package/skills/weaver-e10-ebuilder-form/references/openapi-write.md +1 -5
  179. package/skills/weaver-e10-esb/SKILL.md +2 -2
  180. package/skills/weaver-e10-esb/references/source-manifest.json +9 -9
  181. package/skills/weaver-e10-hrm/SKILL.md +54 -6
  182. package/skills/weaver-e10-hrm/references/employee.md +89 -15
  183. package/skills/weaver-e10-hrm/references/org.md +7 -4
  184. package/skills/weaver-e10-hrm/references/position.md +14 -7
  185. package/skills/weaver-e10-hrm/references/source-manifest.json +1 -1
  186. package/skills/weaver-e10-jinchengda/SKILL.md +166 -0
  187. package/skills/weaver-e10-jinchengda/references/contract-agent-entry.md +82 -0
  188. package/skills/weaver-e10-jinchengda/references/contract-clause-recommender.md +69 -0
  189. package/skills/weaver-e10-jinchengda/references/contract-clause-reference-save.md +78 -0
  190. package/skills/weaver-e10-jinchengda/references/contract-disabled-capabilities.md +27 -0
  191. package/skills/weaver-e10-jinchengda/references/contract-request-status.md +71 -0
  192. package/skills/weaver-e10-jinchengda/references/contract-request-write.md +94 -0
  193. package/skills/weaver-e10-jinchengda/references/contract-signing-subjects.md +89 -0
  194. package/skills/weaver-e10-jinchengda/references/contract-subject-create.md +77 -0
  195. package/skills/weaver-e10-jinchengda/references/contract-template-selector.md +66 -0
  196. package/skills/weaver-e10-jinchengda/references/contract-workflow-discovery.md +94 -0
  197. package/skills/weaver-e10-jinchengda/references/source-manifest.json +259 -0
  198. package/skills/weaver-e10-jiuchuanhui/SKILL.md +5 -11
  199. package/skills/weaver-e10-jucailin/SKILL.md +4 -3
  200. package/skills/weaver-e10-mail/SKILL.md +4 -11
  201. package/skills/weaver-e10-meeting/SKILL.md +66 -32
  202. package/skills/weaver-e10-meeting/references/meeting-change.md +5 -2
  203. package/skills/weaver-e10-meeting/references/meeting-create.md +2 -1
  204. package/skills/weaver-e10-meeting/references/meeting-eb.md +114 -0
  205. package/skills/weaver-e10-meeting/references/meeting-lifecycle.md +9 -8
  206. package/skills/weaver-e10-meeting/references/meeting-receipts-signs.md +35 -7
  207. package/skills/weaver-e10-meeting/references/meeting-update.md +1 -1
  208. package/skills/weaver-e10-okr/SKILL.md +6 -11
  209. package/skills/weaver-e10-okr/references/source-manifest.json +3 -3
  210. package/skills/weaver-e10-plan/SKILL.md +3 -3
  211. package/skills/weaver-e10-plan/references/plan-collect-and-compose.md +1 -1
  212. package/skills/weaver-e10-plan/references/plan-overview-and-routing.md +1 -1
  213. package/skills/weaver-e10-plan/references/source-manifest.json +13 -13
  214. package/skills/weaver-e10-qiyecheng/SKILL.md +4 -10
  215. package/skills/weaver-e10-qiyecheng/references/source-manifest.json +9 -9
  216. package/skills/weaver-e10-shared/SKILL.md +36 -25
  217. package/skills/weaver-e10-shared/references/e10-auth-and-session.md +10 -31
  218. package/skills/weaver-e10-shared/references/json-output-contract.md +20 -11
  219. package/skills/weaver-e10-shijingran/SKILL.md +2 -1
  220. package/skills/weaver-e10-shijingran/references/source-manifest.json +9 -9
  221. package/skills/weaver-e10-skill-maker/SKILL.md +4 -10
  222. package/skills/weaver-e10-skill-maker/references/business-skill-generation.md +5 -3
  223. package/skills/weaver-e10-skill-maker/references/module-cli-generation.md +12 -27
  224. package/skills/weaver-e10-skill-maker/references/module-gap-audit-and-repair.md +17 -5
  225. package/skills/weaver-e10-skill-maker/references/source-update-detection.md +4 -27
  226. package/skills/weaver-e10-wenshuding/SKILL.md +5 -16
  227. package/skills/weaver-e10-wenshuding/references/source-manifest.json +7 -7
  228. package/skills/weaver-e10-workflow/SKILL.md +32 -37
  229. package/skills/weaver-e10-workflow/references/source-manifest.json +40 -77
  230. package/skills/weaver-e10-workflow/references/workflow-batch.md +90 -29
  231. package/skills/weaver-e10-workflow/references/workflow-create.md +79 -109
  232. package/skills/weaver-e10-workflow/references/workflow-memory.md +19 -9
  233. package/skills/weaver-e10-workflow/references/workflow-operate.md +2 -2
  234. package/skills/weaver-e10-workflow/references/workflow-query.md +37 -20
  235. package/skills/weaver-e10-workflow/references/workflow-share.md +18 -2
  236. package/skills/weaver-e10-workflow/references/workflow-view.md +4 -4
  237. package/skills/weaver-e10-yepiaotong/SKILL.md +75 -39
  238. package/skills/weaver-e10-yepiaotong/references/invoice-detail.md +22 -1
  239. package/skills/weaver-e10-yepiaotong/references/invoice-enterprise-list.md +3 -1
  240. package/skills/weaver-e10-yepiaotong/references/invoice-issuing.md +5 -5
  241. package/skills/weaver-e10-yepiaotong/references/invoice-output-view.md +135 -0
  242. package/skills/weaver-e10-yepiaotong/references/invoice-personal-list.md +15 -3
  243. package/skills/weaver-e10-yepiaotong/references/invoice-reim.md +1 -1
  244. package/skills/weaver-e10-yepiaotong/references/invoice-summarize.py +217 -0
  245. package/skills/weaver-e10-yepiaotong/references/invoice-upload-and-validate.md +88 -0
  246. package/skills/weaver-e10-yepiaotong/references/invoice-validation-preview.md +7 -2
  247. package/skills/weaver-e10-yepiaotong/references/reim-api-reference.md +90 -10
  248. package/skills/weaver-e10-yepiaotong/references/reim-examples.md +1 -0
  249. package/skills/weaver-e10-yepiaotong/references/reim-expense-subject-rules.md +70 -49
  250. package/skills/weaver-e10-yepiaotong/references/reim-fast-path.md +119 -0
  251. package/skills/weaver-e10-yepiaotong/references/reim-form-fill-rules.md +55 -36
  252. package/skills/weaver-e10-yepiaotong/references/reim-matching-rules.md +4 -0
  253. package/skills/weaver-e10-yepiaotong/references/reim-phone-subsidy-rules.md +149 -0
  254. package/skills/weaver-e10-yepiaotong/references/reim-workflow.md +125 -5
  255. package/skills/weaver-e10-yepiaotong/references/source-manifest.json +430 -63
  256. package/skills/weaver-e10-yimiaoban/SKILL.md +4 -12
  257. package/skills/weaver-e10-yimiaoban/references/source-manifest.json +3 -3
  258. package/skills/weaver-e10-ziguanjia/SKILL.md +2 -1
  259. package/skills/weaver-e10-ziguanjia/references/ziguanjia-agent-entry.md +3 -3
  260. package/tools/weaver-skill-detector-1.0.13/SKILL.md +9 -9
  261. package/tools/weaver-skill-detector-1.0.13/references/checklist.md +3 -3
  262. package/tools/weaver-skill-detector-1.0.13/scripts/__pycache__/validate_skill.cpython-313.pyc +0 -0
  263. package/tools/weaver-skill-detector-1.0.13/scripts/validate_skill.py +98 -91
  264. package/scripts/sync-connector-skills.mjs +0 -172
@@ -0,0 +1,372 @@
1
+ ---
2
+ name: weaver-setting-backup
3
+ description: "对话式管理 weapp 后台\"文件设置 → 备份设置\"页面:开关本地备份、列出备份规则、 调整规则路径/周期/启停、删除规则。`backup on` 一句话开启、`backup update --id N --period 720` 一句话调整。覆盖 `POST /api/file/tenant/setting/save`(开关 `sysLocalFileBackup`)+ `FileBackupController` 全部 5 个 CRUD 端点。Use for 备份设置、本地备份、附件备份、备份规则、backupRule、backupPath、备份周期、 文件设置备份、eteams-file 备份、<your-e10-domain>/info/fileSet/backup."
4
+ license: Proprietary
5
+ compatibility: 泛微E10采知连配套使用,内部可自由使用与修改,禁止对外分发
6
+ metadata:
7
+ maintainer: unknown
8
+ type: capability
9
+ version: 1.0.0
10
+ updated: 2026-08-19
11
+ tags: [备份设置, 本地备份, 备份规则, backupRule, 备份周期]
12
+ ---
13
+
14
+ # weaver-setting-backup
15
+
16
+ 让"文件设置 → 备份设置"页面**用一句话就能管**。背后调两类接口:
17
+ - `POST /api/file/tenant/setting/save`(开关 `sysLocalFileBackup`)
18
+ - `FileBackupController` 全部 5 个 CRUD 端点(list/get/update/delete/enable)
19
+
20
+ 修改前先 diff,写操作必走对话确认。
21
+
22
+ ## 前置依赖
23
+
24
+ ### 认证前置(必须)
25
+
26
+ 本模块通过 CLI 托管的认证获取凭证(base_url + Cookie + eteamsid + User-Agent),凭证契约见共享规则 [`../../weaver-e10-shared/SKILL.md`](../../weaver-e10-shared/SKILL.md),不依赖手动配置文件,Agent 不得自己读取或输出凭证。
27
+
28
+ **使用前必须确保**:
29
+ 1. CLI 已安装:`weaver-work-cli --version` 能正常输出版本号
30
+ 2. 已完成登录:`weaver-work-cli auth status` 显示已登录
31
+
32
+ **首次登录**:
33
+ ```text
34
+ # OAuth2.0 浏览器授权(推荐)
35
+ weaver-work-cli auth login
36
+
37
+ # 或手动写入 ETEAMSID(从浏览器 DevTools 复制)
38
+ weaver-work-cli auth set --eteamsid "PCACCOUNT_xxx"
39
+ ```
40
+
41
+ **凭证过期处理**:操作返回认证错误时,提示用户通过 `weaver-work-cli auth login` 或 `weaver-work-cli auth set` 重新登录。
42
+
43
+ ## When to use
44
+
45
+ - 用户说"把本地备份打开""关掉本地备份""备份周期改成 720 分钟"
46
+ "列出所有备份规则""禁用规则 id=1""删除规则 id=2"等
47
+ - 改 weapp 后台的"备份设置"页(`<your-e10-domain>/info/fileSet/backup`)
48
+ - 调试 eteams-file 备份策略
49
+
50
+ **不适用**:附件设置(见 `weaver-setting-attach`)、加解密设置(见
51
+ `weaver-setting-encrypt`)、存储设置、文件采集设置、预览编辑设置、
52
+ 文件深度清理、页面设置——这 6 个 Tab 走的接口各不相同,**不在本 skill 范围**。
53
+
54
+ ## 命令清单
55
+
56
+ CLI 软链名 `setting-backup`(用全名避开与 `weaver-setting-attach` 的
57
+ `setting-attach`、`weaver-setting-encrypt` 的 `setting-encrypt` 软链冲突)。
58
+
59
+ | 命令 | 作用 |
60
+ |---|---|
61
+ | `backup on` | 开启本地备份(无规则时自动建默认规则) |
62
+ | `backup off` | 关闭本地备份 |
63
+ | `backup show` | 显示开关状态 + 默认规则详情 |
64
+ | `backup list` | 列出所有备份规则(表格) |
65
+ | `backup update --id <N> [--name] [--org-path] [--backup-path] [--period] [--enable/--disable]` | 调整某条规则 |
66
+ | `backup enable --id <N>` | 启用某条规则 |
67
+ | `backup disable --id <N>` | 禁用某条规则 |
68
+ | `backup delete --id <N> [--yes]` | 删除某条规则(prod 必须 `--yes`) |
69
+
70
+ ## 一句话用法
71
+
72
+ ```text
73
+ # 开启本地备份
74
+ backup on
75
+
76
+ # 调整周期(720 分钟 = 12 小时)
77
+ backup update --id 1 --period 720
78
+
79
+ # 改备份路径
80
+ backup update --id 1 --backup-path /nfs/data/backup
81
+
82
+ # 禁用某条规则
83
+ backup disable --id 1
84
+
85
+ # 删规则(prod 必须 --yes)
86
+ backup delete --id 2 --yes
87
+ ```
88
+
89
+ ## 硬性门禁
90
+
91
+ 1. **写操作必须先 diff**——`on/off/update/enable/disable/delete` 不带 `--yes` 时
92
+ 把 diff/影响打到 stdout 并等 stdin `y` 才发请求;EOF / `n` 视为取消。
93
+ **对话式 agent 流程**:即使 CLI 已带 `--yes`,**仍必须先在对话里走
94
+ "改前值 / 改后影响 / 明确询问" 三步**(见对话式规则 3),得到
95
+ "改 / 确认 / 好的" 之类回复后才调 CLI。
96
+ 2. **`prod` 必须 --yes**——防手滑。
97
+ 3. **不开开关不能调规则**——`backup update/enable/disable/delete` 在
98
+ `sysLocalFileBackup=false` 时拒绝(关着的备份调规则没意义)。
99
+ 4. **period 范围 60-1440 分钟**(后端 `FileBackupManagerImpl.java:57` 校验);
100
+ CLI 也做同样校验。
101
+ 5. **新建规则不能走 CLI**——后端没 `/api/file/create/backup/rule` 端点(前端 bug);
102
+ 唯一新建路径是 `backup on` 在无规则时自动建默认。
103
+ 6. **保存后校验**——`on/off/update/enable/disable` 后调一次 GET 拉回确认。
104
+
105
+ ## 对话式交互规则
106
+
107
+ > 这些是 **agent 在对话中使用本 skill 时**的硬约束,跟底层 CLI 脚本无关。命令行直接跑
108
+ > `backup` 可以绕过,但任何经由本 skill 的 agent 流程都必须遵守。
109
+
110
+ 1. **操作前必查登录态**
111
+ 每次执行业务操作前,确认 CLI 已完成登录:
112
+ - 若 `weaver-work-cli auth status` 显示未登录,提示用户执行 `weaver-work-cli auth login` 或 `weaver-work-cli auth set` 完成登录
113
+ - 登录完成后**立刻**继续用户原本的请求,不要让用户再敲一次命令
114
+
115
+ 2. **查询要简洁**(`show / list` 时的输出格式)
116
+ - **只返回三样**:设置项名(业务中文)、当前值、**当前租户名**
117
+ - **不要**返回:bool 三态展开、enum 解释、字段语义说明、风险提示、
118
+ "建议/可以这么做" 等附加内容 —— 这些只在用户追问时再说
119
+ - `show` 开关状态:单行一行,格式固定
120
+
121
+ ```
122
+ <租户名> · <设置项名>:<当前值>
123
+ ```
124
+
125
+ - `show` / `list` 规则详情:**按列表逐项展示**(每行一个字段),
126
+ 规则名前**不显示** `规则 #<id>`,直接用规则名。格式固定:
127
+
128
+ ```
129
+ <租户名> · <规则名>:
130
+ - 状态:<启用 / 禁用>
131
+ - 源目录:<org-path>
132
+ - 备份目录:<backup-path>
133
+ - 周期:<period> 分钟
134
+ ```
135
+
136
+ - 多条规则时按顺序依次排列,每条独立一组
137
+
138
+ 3. **修改前必须三步问清**
139
+ - 步骤 a — **改前的值**:说清楚这一项当前是什么(从 GET 里取,不要瞎猜);
140
+ 涉及路径/周期时复述当前值,让客户确认是不是他/她要改的那条
141
+ - 步骤 b — **改后影响**:说清楚改完影响什么业务、触及哪些文件、是否
142
+ **会触发新文件 IO 失败**(路径不可达时)、周期超出 60-1440 范围时
143
+ 明确说"会被后端拒"
144
+ - 步骤 c — **明确询问**:用一句话问"要改成 X 吗?",**得到用户肯定回复
145
+ (y / 改 / 确认 / 好的 之类)才发 POST**,即使 CLI 已带 `--yes` 也不许跳过
146
+ - 三步可以一次消息里说全,但步骤 c 的问句**必须独立成行**,不能藏在
147
+ 长段落里让人找不到
148
+ - `on` 操作必须确认开关目标("现在关着要开 / 现在开着要关")和**是否
149
+ 已经在所有 E10 节点挂载好共享备份目录**(见规则 5 的运维前置)
150
+
151
+ 4. **话术面向客户(非开发)**
152
+ 本 skill 的对话对象是**客户/业务人员**,不是开发。所有输出话术:
153
+ - **禁止出现**:CLI key(`--id` / `--period` / `--org-path` 等)、DTO 字段名
154
+ (`sysLocalFileBackup` 等)、布尔字面值(`true` / `false`)、HTTP 术语
155
+ (POST / GET / 200 / 401)、内部流程术语("步骤 a / 步骤 b / 步骤 c"、
156
+ "diff"、"回 y / 改"、"落库")
157
+ - **必须使用**:业务中文名("本地备份"、"备份规则"、"备份周期")、
158
+ 业务状态("已开启 / 已关闭"、"启用 / 禁用")、自然语言确认
159
+ ("要打开吗?回 改 / 确认 / 好的")
160
+ - 需要看技术细节时(用户主动问"用的什么字段" / "接口是啥" / "为什么改不了"),
161
+ **只在该轮回应**展开,平时一律隐藏
162
+ - 身份信息隐藏 `userId` / `tenantKey` 这类内部 ID,只说"当前租户"
163
+ - **路径描述严禁用 E10 内部术语**(如 E10 内部 path 概念),统一用
164
+ 业务中文("源目录" / "备份目录")
165
+
166
+ 5. **做不到时正确引导**
167
+ 客户要改的项**当前工具/接口改不了**或**前置条件没满足**时,**不要**静默
168
+ 截断、**不要**发注定失败的请求。常见场景:
169
+ - **共享备份目录没挂载(硬阻断)** — 调 `on / update / enable` 前必须
170
+ 主动问"你那边的运维同事已经把共享备份目录挂到所有 E10 节点了吗?",
171
+ 客户回"挂好了 / 已挂"才继续;客户说不清楚或没挂,**直接停手**并
172
+ 解释"没挂载就开后端写文件会失败",不要静默继续
173
+ - **路径不在 E10 服务器能访问的目录(白话,禁止静默接受)** — 源目录
174
+ 和备份目录都必须是 E10 应用服务器能访问的目录(不能是客户本机的
175
+ `/Users/xxx`、不能是某个应用节点临时目录、不能是其他服务器的远程
176
+ 路径),否则后端写不进去。改路径时 agent **必须**在话术里复述这个约束
177
+ - **改"备份目录"前必做本地预校验,不发注定失败的请求** — 后端
178
+ `FileSettingManagerImpl.checkBackupPath`
179
+ (`src/main/java/com/weaver/teams/file/e10/manager/file/FileSettingManagerImpl.java:276-302`)
180
+ 会拒 5 类路径,agent 改路径前**必须**在 CLI 端先把目标路径跑一遍
181
+ 等价校验,任一不过**直接告诉客户"后端会拒:<原因>",让客户重新给路径**,
182
+ **不要**静默发请求让后端报错。5 项校验:
183
+
184
+ 1. 必须以 `/` 开头(Windows 跳过这条)
185
+ 2. 不能含 `\` `*` `?` `"` `<` `>` `|`
186
+ 3. FILE_PATH 正则不匹配(`\s` 空白 + `\` + `;` + `'` + `*` + `?`(全角) + `?` + `"` + `<` + `>` + `|`)
187
+ 4. 不能等于源目录(源目录按 `;` 切分后逐个比较)
188
+ 5. 不能是源目录的子目录(源目录末尾补 `/` 后取备份路径前 N 位对比)
189
+
190
+ CLI 已有 `_validate_backup_path()` 函数封装这 5 项(`scripts/backup_setting.py`),
191
+ `cmd_update` 在 `--backup-path` 显式传值时自动跑,错误打到 stderr 并
192
+ `return 4`,不发请求。常见客户语言:
193
+ - "路径要以 / 开头"(CODE_20080)
194
+ - "路径不能含特殊字符 \* ? \" < > |"(CODE_20078)
195
+ - "路径不能含空白 / 分号 / 单引号 / 全角问号"(FILE_PATH 正则)
196
+ - "备份路径不能和源路径相同"(CODE_20082)
197
+ - "备份路径不能是源路径的子目录"(CODE_20079)
198
+ - **period 超范围(60-1440 分钟)** — 客户想设"30 分钟"或"2880 分钟",
199
+ 直接告诉客户范围是 60-1440 分钟(1-24 小时),**不**静默截断
200
+ - **规则 id 不存在** — `update / enable / disable / delete --id N` 里的 N
201
+ 找不到时,先调一次 `list` 把当前 id 列表给客户看,让客户重新指定
202
+ - **只支持 1 条默认规则,不能新增** — 后端业务上只允许存在 1 条"默认
203
+ 备份规则",也没有新建规则端点。客户想"新建第二条规则"时,**直接
204
+ 告诉客户后端不支持**(不是 CLI 限制,是产品设计),只能在现有默认
205
+ 规则上调路径 / 周期 / 启停。新装环境无规则时,启用本地备份(`on`)
206
+ 会自动建这条默认规则
207
+ - **`update` 想开/关的开关没显式传** — 没传 `--enable/--disable` 时
208
+ 保持原状态;客户**明确说**"要启用" 时**必须**传 `--enable`
209
+ - **后端返回致命错误**(已知):不重试,直接告诉客户失败原因 + 正确路径
210
+ - 话术模板:
211
+ "这里改不了:<原因>。需要去<正确路径>那里先做<前置操作>。
212
+ 在那边保存后,回到这里再让我帮你改备份设置里的对应项,
213
+ 就能改到你想要的值了。"
214
+
215
+ 6. **典型部署模板(默认值参考)**
216
+ 客户问"备份能干嘛用" / "本地存储 + 备份服务器" 场景怎么配 / "默认值是多少",
217
+ 直接给两步走 + 默认参考值:
218
+ - **第一步(运维前置)**:运维把共享备份目录挂到所有 E10 节点
219
+ - **第二步(业务配置)**:在 E10 后台 文件设置 → 备份设置 开启 + 配置 + 保存
220
+ - **默认参考值**:源目录 = E10 文件数据目录(如 `/nfs/date`),
221
+ 备份目录 = 共享备份目录(如 `/nfs/bakFile`),
222
+ 周期 = **1440 分钟(24 小时)**
223
+ - 客户明确想调时,**先报出这个参考值再问**"想调到多少",别直接问"设多少"
224
+
225
+ ## 宿主
226
+
227
+ CLI 入口:
228
+
229
+ ```text
230
+ python3 scripts/backup_setting.py <cmd> [args]
231
+ ```
232
+
233
+
234
+ ## 与 weaver-setting-attach / weaver-setting-encrypt 的关系
235
+
236
+ 三个 skill **互相独立**,可在同一台机器共存:
237
+
238
+ | | weaver-setting-attach | weaver-setting-encrypt | weaver-setting-backup |
239
+ |---|---|---|---|
240
+ | 改的页面 | 文件设置 → 附件设置 | 文件设置 → 加解密设置 | 文件设置 → 备份设置 |
241
+ | CLI 软链 | `setting-attach` | `setting-encrypt` | `setting-backup` |
242
+ | 共享 | 后端 `POST /api/file/tenant/setting/save` 共用一份;凭证统一通过 CLI 托管的认证获取 |
243
+ | 不同 | attach 走"逐字段 update";encrypt 走"整对象 toString";backup 走"开关字段 + 独立 CRUD 控制器" |
244
+
245
+ ## 版本
246
+
247
+ - 0.1.0(2026-08-06)首次创建。
248
+ - 0.2.0(2026-08-06)优化:对话式规则完整内联 6 条(去除外部仓库依赖),加上 backup
249
+ 特有"业务前置 + 路径约束 + 典型部署模板"作为规则 6/7 整合;重写"与 attach/encrypt
250
+ 关系"段(删开发内部决策);门禁 1 补对话确认说明;加版本号规则。
251
+ - 0.2.1(2026-08-09)优化:规则 3 `show` / `list` 规则详情输出格式改为按列表
252
+ 逐项展示,规则名前不再显示 `规则 #<id>`,直接用规则名。
253
+ - 0.2.2(2026-08-09)澄清:业务上后端只支持 1 条"默认备份规则",不能
254
+ 新建第二条。规则 6 改写为"只支持 1 条默认规则,不能新增",去掉
255
+ "新建规则没 CLI 入口"的旧表述(之前会让用户去找 weapp 后台手动加,
256
+ 实际是后端根本不支持)。
257
+ - 0.2.3(2026-08-09)修 bug + 加预校验:
258
+ - `scripts/backup_api.py 的 `get_rule`` 参数从 `id` 改为 `backupId`(后端
259
+ `FileBackupServiceImpl.getBackupRule:88` 校验的是 `backupId`,传 `id`
260
+ 被拒)
261
+ - `scripts/backup_setting.py 的 `cmd_update`` 拉详情时多下沉一层到 `weaForm.data`,
262
+ 否则 `backupName` 等字段读到空串
263
+ - 规则 6 加"改备份目录前必做本地预校验":把后端
264
+ `FileSettingManagerImpl.checkBackupPath:276-302` 的 5 项校验
265
+ (`/` 开头 / 硬禁字符 / FILE_PATH 正则 / 不等于源路径 / 非源路径子目录)
266
+ 搬到 CLI 端 `_validate_backup_path()`,update 前自动跑,错误直接
267
+ 拦在客户端不发请求
268
+
269
+ 版本号规则 `x.y.z`:
270
+ - **x 升** — 大重构(接口变化、DTO 结构变化、命令大幅增删)
271
+ - **y 升** — 新增命令、新增子模块、新增业务场景
272
+ - **z 升** — 文案修正、门禁澄清、不改行为的小修
273
+ # 接口协议
274
+
275
+ ## 端点
276
+
277
+ | 操作 | 方法 | URL | 入参 | 出参 |
278
+ |---|---|---|---|---|
279
+ | 拉 settings(含开关) | POST | `{base}/api/file/tenant/setting` | `{}` | `{code, data: {sysLocalFileBackup: ...}}` |
280
+ | 改开关 | POST | `{base}/api/file/tenant/setting/save` | `{sysLocalFileBackup: true/false}` | `{code, data: ...}` |
281
+ | 列规则 | POST | `{base}/api/file/get/backup/rule/list` | `{pageNo, pageSize}` | `{code, data: FileBackupListDto}` |
282
+ | 单个规则详情 | GET | `{base}/api/file/get/backup/rule?id=N` | `?id=N` | `{code, data: FileBackupFormDto}` |
283
+ | 更新规则 | POST | `{base}/api/file/update/backup/rule` | `BackupRuleUpdateParam` | `{code, data: null}` |
284
+ | 删除规则 | POST | `{base}/api/file/delete/backup/rule` | `{ids: [N]}` | `{code, data: null}` |
285
+ | 启停规则 | POST | `{base}/api/file/enable/backup/rule` | `{id, enableStatus}` | `{code, data: null}` |
286
+
287
+ ## 鉴权
288
+
289
+ `Cookie: ETEAMSID=<id>`,与前端一致。
290
+
291
+ ## POST 注意事项
292
+
293
+ 1. **开关是逐字段 update**:只传 `sysLocalFileBackup` 一个字段,后端不会清空
294
+ 其它字段(参考 agent memory 中 weaver-setting-attach 的同款经验)。
295
+ 2. **开开关 + 无规则 = 自动建默认规则**——`SysLocalFileBackup.java:138-159`:
296
+ ```java
297
+ getInitFileBackup(tenantKey, newValue)
298
+ → 取第一个 LOCAL_STORE 实例 → 构造 BackupRuleCreateParam
299
+ (backupName=默认备份规则, backupPath=orgPath/backup, enableStatus=true)
300
+ → fileBackupManager.createFileBackup(...)
301
+ ```
302
+ 3. **新建规则的端点不存在**——前端 `createBackupRule` 调的是
303
+ `/api/file/create/backup/rule`,后端 `FileBackupController` 里**没有**这个
304
+ 端点。前端 bug,CLI 不暴露 `create`。
305
+ 4. **period 范围 60-1440 分钟**——后端 `FileBackupManagerImpl.java:57` 校验。
306
+ 5. **delete 是批量**——body 是 `{ids: [N1, N2, ...]}`;CLI 一次只支持一个
307
+ id,多个需要循环。
308
+ 6. **enable 接口的字段是 `enableStatus`(Boolean),不是 `enabled`**——后端
309
+ `BackupRuleEnableParam` 用 `enableStatus` 字段。
310
+
311
+ ## 后端实现位置
312
+
313
+ - Controller:`eteams-file/src/main/java/com/weaver/teams/file/e10/mvc/web/FileBackupController.java`
314
+ - 开关注册:`eteams-file/src/main/java/com/weaver/teams/file/e10/manager/set/impl/SysLocalFileBackup.java`
315
+ - 规则 CRUD:`eteams-file/src/main/java/com/weaver/teams/file/e10/service/web/impl/FileBackupServiceImpl.java`
316
+ - Param/DTO:`eteams-file/src/main/java/com/weaver/teams/file/e10/param/BackupRule*.java`
317
+ - 前端 UI:`weapp-file/src/components/pc/FileSet/components/BackupSet/`
318
+ # 字段说明
319
+
320
+ ## 顶层:本地备份开关
321
+
322
+ - **DTO 字段**:`sysLocalFileBackup`(Boolean)
323
+ - **GET 端点**:`POST /api/file/tenant/setting`
324
+ - **SAVE 端点**:`POST /api/file/tenant/setting/save`(只传这一个字段)
325
+ - **特殊行为**:开时如果当前无规则,**自动建默认规则**(用第一个本地存储实例的 path,详见 `SysLocalFileBackup.java:138-159`)
326
+
327
+ ## 备份规则字段
328
+
329
+ | CLI flag | 后端字段 | 类型 | 必填 | 备注 |
330
+ |---|---|---|---|---|
331
+ | `--id` | `id` | Long | update/enable/disable/delete 必填 | 规则主键 |
332
+ | `--name` | `backupName` | String | update 必填 | 规则名称,< 255 字符 |
333
+ | `--org-path` | `orgPath` | String | update 可选 | 源路径 |
334
+ | `--backup-path` | `backupPath` | String | update 必填 | 备份路径 |
335
+ | `--period` | `period` | Long (分钟) | update 必填 | **60-1440**(1 小时 - 24 小时) |
336
+ | `--enable` | `enableStatus=true` | Boolean | update 可选(与 --disable 互斥) | 启用 |
337
+ | `--disable` | `enableStatus=false` | Boolean | 同上 | 禁用 |
338
+ | — | `backupConfig` | String | update 可选 | 高级配置(CLI 暂不暴露) |
339
+
340
+ > 列表接口 (`POST /api/file/get/backup/rule/list`) 返回 `FileBackupListDto`:
341
+ > ```json
342
+ > {
343
+ > "columns": [...],
344
+ > "list": [
345
+ > {
346
+ > "id": 1,
347
+ > "backupName": "默认备份规则",
348
+ > "orgPath": "/nfs/data",
349
+ > "backupPath": "/nfs/data/backup",
350
+ > "period": 1440,
351
+ > "enableStatus": 1,
352
+ > "backupConfig": "..."
353
+ > }
354
+ > ],
355
+ > "pageNo": 1, "pageSize": 50,
356
+ > "totalCount": 1, "totalPages": 1, "nextPage": null
357
+ > }
358
+ > ```
359
+ > `enableStatus` 后端用 0/1 整数表示;CLI 自动翻译成"启用/禁用"。
360
+
361
+ ## ⚠️ 已知坑
362
+
363
+ 1. **没有"新建规则"接口**——后端 `FileBackupController` 没有
364
+ `/api/file/create/backup/rule` 端点;前端代码 `RuleDialog.tsx:120` 调了但
365
+ 后端没实现,是个**前端 bug**。CLI 不暴露 `create` 子命令。
366
+ 2. **唯一新建路径**:`backup on` 开启本地备份时如果无规则会自动建默认
367
+ (用第一个本地存储实例的 path)。如果租户没有本地存储实例,
368
+ `SysLocalFileBackup.java:142` 会抛 `BusinessException("no useful local storage")`。
369
+ 3. **规则操作需要本地备份开启**——CLI 在 `update/enable/disable/delete` 前
370
+ 会 GET 一次 settings 检查 `sysLocalFileBackup`,没开会拒绝并提示先 `on`。
371
+ 4. **period 范围 60-1440**(后端 `FileBackupManagerImpl.java:57` 校验),
372
+ CLI 也做同样校验;非整数倍数的"1440"会被四舍五入(按分钟)。