weaver-work-cli 0.1.23 → 0.1.25

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 (358) hide show
  1. package/README.md +33 -3
  2. package/dist/core/output.js +53 -1
  3. package/dist/internal/e10/auth/commands.js +210 -17
  4. package/dist/internal/e10/auth/crypto.js +52 -12
  5. package/dist/internal/e10/auth/xiaoe.js +117 -35
  6. package/dist/internal/e10/context.js +3 -3
  7. package/dist/internal/e10/request-runtime.js +46 -4
  8. package/dist/shortcuts/caizhilian/file-upload/metadata.js +124 -0
  9. package/dist/shortcuts/caizhilian/file-upload/multipart.js +47 -0
  10. package/dist/shortcuts/caizhilian/file-upload/protocol.js +116 -0
  11. package/dist/shortcuts/caizhilian/file-upload/receipt.js +37 -0
  12. package/dist/shortcuts/caizhilian/host.js +13 -5
  13. package/dist/shortcuts/caizhilian/operations/handlers/file-upload.js +72 -179
  14. package/dist/shortcuts/caizhilian/operations/handlers/fileops.js +67 -1
  15. package/dist/shortcuts/caizhilian/operations/handlers/folder.js +701 -4
  16. package/dist/shortcuts/caizhilian/operations/handlers/setting-attach.js +198 -0
  17. package/dist/shortcuts/caizhilian/operations/registry.js +5 -1
  18. package/dist/shortcuts/caizhilian/operations/shared.js +32 -0
  19. package/dist/shortcuts/caizhilian/operations/specs.js +67 -0
  20. package/dist/shortcuts/workflow/continuation.js +14 -9
  21. package/dist/shortcuts/workflow/endpoints.js +11 -1
  22. package/dist/shortcuts/workflow/index.js +55 -1
  23. package/dist/shortcuts/workflow/operations/flow-status.js +63 -0
  24. package/dist/shortcuts/workflow/operations/form.js +1822 -547
  25. package/dist/shortcuts/workflow/operations/read.js +414 -13
  26. package/dist/shortcuts/workflow/operations/shared.js +28 -0
  27. package/dist/shortcuts/workflow/operations/write.js +5 -5
  28. package/dist/shortcuts/workflow/operations.js +8 -6
  29. package/dist/shortcuts/workflow/stdout-compact.js +33 -0
  30. package/docs/caizhilian.md +12 -5
  31. package/docs/e10-auth.md +25 -3
  32. package/node_modules/@napi-rs/keyring/LICENSE +21 -0
  33. package/node_modules/@napi-rs/keyring/README.md +19 -0
  34. package/node_modules/@napi-rs/keyring/index.d.ts +166 -0
  35. package/node_modules/@napi-rs/keyring/index.js +514 -0
  36. package/node_modules/@napi-rs/keyring/keytar.d.ts +53 -0
  37. package/node_modules/@napi-rs/keyring/keytar.js +26 -0
  38. package/node_modules/@napi-rs/keyring/package.json +125 -0
  39. package/node_modules/@napi-rs/keyring-darwin-arm64/README.md +3 -0
  40. package/node_modules/@napi-rs/keyring-darwin-arm64/keyring.darwin-arm64.node +0 -0
  41. package/node_modules/@napi-rs/keyring-darwin-arm64/package.json +32 -0
  42. package/node_modules/commander/LICENSE +22 -0
  43. package/node_modules/commander/Readme.md +1149 -0
  44. package/node_modules/commander/esm.mjs +16 -0
  45. package/node_modules/commander/index.js +24 -0
  46. package/node_modules/commander/lib/argument.js +149 -0
  47. package/node_modules/commander/lib/command.js +2662 -0
  48. package/node_modules/commander/lib/error.js +39 -0
  49. package/node_modules/commander/lib/help.js +709 -0
  50. package/node_modules/commander/lib/option.js +367 -0
  51. package/node_modules/commander/lib/suggestSimilar.js +101 -0
  52. package/node_modules/commander/package-support.json +16 -0
  53. package/node_modules/commander/package.json +82 -0
  54. package/node_modules/commander/typings/esm.d.mts +3 -0
  55. package/node_modules/commander/typings/index.d.ts +1045 -0
  56. package/package.json +5 -1
  57. package/skills/weaver-e10-builder/SKILL.md +281 -0
  58. package/skills/weaver-e10-builder/_catalog.md +94 -0
  59. package/skills/weaver-e10-builder/actionflows/CONTEXT.md +71 -0
  60. package/skills/weaver-e10-builder/actionflows/SKILL.md +176 -0
  61. package/skills/weaver-e10-builder/actionflows/docs/adr/0001-generated-actionflow-cleanup-identity.md +5 -0
  62. package/skills/weaver-e10-builder/actionflows/docs/adr/0002-preserve-existing-actionflow-on-update.md +36 -0
  63. package/skills/weaver-e10-builder/actionflows/references/components/calendar/MeetingCreate.md +19 -0
  64. package/skills/weaver-e10-builder/actionflows/references/components/calendar/ScheduleCreate.md +17 -0
  65. package/skills/weaver-e10-builder/actionflows/references/components/database/DMLExecute.md +38 -0
  66. package/skills/weaver-e10-builder/actionflows/references/components/document/AttachmentCopy.md +17 -0
  67. package/skills/weaver-e10-builder/actionflows/references/components/document/AttachmentMove.md +17 -0
  68. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentCopy.md +17 -0
  69. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentDelete.md +17 -0
  70. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentEdit.md +17 -0
  71. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentMove.md +17 -0
  72. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentPermissionChange.md +17 -0
  73. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentRenewal.md +17 -0
  74. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentRevert.md +17 -0
  75. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentSave.md +17 -0
  76. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentSubscription.md +17 -0
  77. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentSubscriptionApprove.md +17 -0
  78. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentSubscriptionSendBack.md +17 -0
  79. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentSubscriptionWithdraw.md +17 -0
  80. package/skills/weaver-e10-builder/actionflows/references/components/document/FileFolderSave.md +17 -0
  81. package/skills/weaver-e10-builder/actionflows/references/components/document/GetAttachmentInfo.md +17 -0
  82. package/skills/weaver-e10-builder/actionflows/references/components/document/GetDocumentInfo.md +17 -0
  83. package/skills/weaver-e10-builder/actionflows/references/components/document/ModifyDocumentStatus.md +17 -0
  84. package/skills/weaver-e10-builder/actionflows/references/components/document/ReplaceAttachment.md +17 -0
  85. package/skills/weaver-e10-builder/actionflows/references/components/document/UpdatePrintNum.md +17 -0
  86. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/ActionEbAdd.md +100 -0
  87. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/ActionEbDelete.md +23 -0
  88. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/ActionEbRecover.md +17 -0
  89. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/ActionEbSaveVersion.md +17 -0
  90. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/ActionEbUpdate.md +67 -0
  91. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/DateTrigger.md +32 -0
  92. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/EbGetDataById.md +17 -0
  93. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/EnquiryForm.md +107 -0
  94. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/EventButton.md +33 -0
  95. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/EventFormData.md +19 -0
  96. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/TimeBatchTrigger.md +19 -0
  97. package/skills/weaver-e10-builder/actionflows/references/components/http/Http.md +77 -0
  98. package/skills/weaver-e10-builder/actionflows/references/components/logic/Condition.md +23 -0
  99. package/skills/weaver-e10-builder/actionflows/references/components/logic/LogicFlowSet.md +17 -0
  100. package/skills/weaver-e10-builder/actionflows/references/components/logic/MultipleExecution.md +38 -0
  101. package/skills/weaver-e10-builder/actionflows/references/components/logic/Output.md +37 -0
  102. package/skills/weaver-e10-builder/actionflows/references/components/message/InnerMQSend.md +50 -0
  103. package/skills/weaver-e10-builder/actionflows/references/components/message/SendMessage.md +30 -0
  104. package/skills/weaver-e10-builder/actionflows/references/components/personnel/AlterPersonStatus.md +30 -0
  105. package/skills/weaver-e10-builder/actionflows/references/components/personnel/HrmEmployeeUpdate.md +34 -0
  106. package/skills/weaver-e10-builder/actionflows/references/components/personnel/PersonnelAlterType.md +38 -0
  107. package/skills/weaver-e10-builder/actionflows/references/components/personnel/PersonnelOnboarding.md +36 -0
  108. package/skills/weaver-e10-builder/actionflows/references/components/serverless/ServerlessAction.md +42 -0
  109. package/skills/weaver-e10-builder/actionflows/references/components/trigger/CustomTrigger.md +82 -0
  110. package/skills/weaver-e10-builder/actionflows/references/components/trigger/InnerMQListener.md +41 -0
  111. package/skills/weaver-e10-builder/actionflows/references/components/trigger/SimpleScheduler.md +19 -0
  112. package/skills/weaver-e10-builder/actionflows/references/components/trigger/WebHookTrigger.md +91 -0
  113. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveAddSign.md +17 -0
  114. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveAgreeRejectApply.md +17 -0
  115. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveCommit.md +17 -0
  116. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveConsulTurnTodo.md +17 -0
  117. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveCreate.md +17 -0
  118. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveDelete.md +19 -0
  119. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveDoCirculate.md +17 -0
  120. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveDoForward.md +17 -0
  121. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveDoTurnTodo.md +17 -0
  122. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveEntrust.md +19 -0
  123. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveIntervention.md +17 -0
  124. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveMandatoryArchiving.md +17 -0
  125. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveManualCC.md +17 -0
  126. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveRefuseRejectApply.md +17 -0
  127. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveRejectApply.md +17 -0
  128. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveSave.md +17 -0
  129. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveSendBack.md +17 -0
  130. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveShareEntry.md +17 -0
  131. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveTrigger.md +99 -0
  132. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveWithdraw.md +17 -0
  133. package/skills/weaver-e10-builder/actionflows/references/components/workflow/WorkFlowDocEmpowerment.md +17 -0
  134. package/skills/weaver-e10-builder/actionflows/references/components/workflow/WorkflowToDoc.md +17 -0
  135. package/skills/weaver-e10-builder/actionflows/references/condition_rules.md +100 -0
  136. package/skills/weaver-e10-builder/actionflows/references/dynamic_capability_matrix.md +39 -0
  137. package/skills/weaver-e10-builder/actionflows/references/dynamic_resources.md +41 -0
  138. package/skills/weaver-e10-builder/actionflows/references/examples/enquiry-form-batch-insert-scene2.json +1043 -0
  139. package/skills/weaver-e10-builder/actionflows/references/function_rules.md +15 -0
  140. package/skills/weaver-e10-builder/actionflows/references/trigger_runtime_notes.md +53 -0
  141. package/skills/weaver-e10-builder/assets/dom-structure/Bar.json +341 -0
  142. package/skills/weaver-e10-builder/assets/dom-structure/BarStack.json +341 -0
  143. package/skills/weaver-e10-builder/assets/dom-structure/Bubble.json +323 -0
  144. package/skills/weaver-e10-builder/assets/dom-structure/Calendar.json +515 -0
  145. package/skills/weaver-e10-builder/assets/dom-structure/Circular.json +337 -0
  146. package/skills/weaver-e10-builder/assets/dom-structure/CollapsePanel.json +289 -0
  147. package/skills/weaver-e10-builder/assets/dom-structure/Comment.json +617 -0
  148. package/skills/weaver-e10-builder/assets/dom-structure/CountDown.json +755 -0
  149. package/skills/weaver-e10-builder/assets/dom-structure/DigitalPanel.json +191 -0
  150. package/skills/weaver-e10-builder/assets/dom-structure/EbButton.json +387 -0
  151. package/skills/weaver-e10-builder/assets/dom-structure/FastCreate.json +242 -0
  152. package/skills/weaver-e10-builder/assets/dom-structure/Gauge.json +282 -0
  153. package/skills/weaver-e10-builder/assets/dom-structure/HBar.json +336 -0
  154. package/skills/weaver-e10-builder/assets/dom-structure/HBarStack.json +337 -0
  155. package/skills/weaver-e10-builder/assets/dom-structure/Line.json +341 -0
  156. package/skills/weaver-e10-builder/assets/dom-structure/NList.json +712 -0
  157. package/skills/weaver-e10-builder/assets/dom-structure/NavBar.json +274 -0
  158. package/skills/weaver-e10-builder/assets/dom-structure/NavPanel.json +390 -0
  159. package/skills/weaver-e10-builder/assets/dom-structure/NewTab.json +606 -0
  160. package/skills/weaver-e10-builder/assets/dom-structure/Nightingale.json +336 -0
  161. package/skills/weaver-e10-builder/assets/dom-structure/PageHeader.json +205 -0
  162. package/skills/weaver-e10-builder/assets/dom-structure/Picture.json +209 -0
  163. package/skills/weaver-e10-builder/assets/dom-structure/Pie.json +338 -0
  164. package/skills/weaver-e10-builder/assets/dom-structure/ProgressChart.json +299 -0
  165. package/skills/weaver-e10-builder/assets/dom-structure/SearchGlobal.json +628 -0
  166. package/skills/weaver-e10-builder/assets/dom-structure/Slide.json +489 -0
  167. package/skills/weaver-e10-builder/assets/dom-structure/Treemap.json +324 -0
  168. package/skills/weaver-e10-builder/assets/factory/chart-dimensions.json +536 -0
  169. package/skills/weaver-e10-builder/assets/factory/example-btn-progress-collapse-configured.json +2515 -0
  170. package/skills/weaver-e10-builder/assets/factory/example-configured-2.json +13805 -0
  171. package/skills/weaver-e10-builder/assets/factory/example-configured.json +6735 -0
  172. package/skills/weaver-e10-builder/assets/factory/factory-bar-stack.json +326 -0
  173. package/skills/weaver-e10-builder/assets/factory/factory-bar.json +222 -0
  174. package/skills/weaver-e10-builder/assets/factory/factory-bubble.json +322 -0
  175. package/skills/weaver-e10-builder/assets/factory/factory-calendar.json +325 -0
  176. package/skills/weaver-e10-builder/assets/factory/factory-circular.json +320 -0
  177. package/skills/weaver-e10-builder/assets/factory/factory-collapse-panel.json +132 -0
  178. package/skills/weaver-e10-builder/assets/factory/factory-comment.json +388 -0
  179. package/skills/weaver-e10-builder/assets/factory/factory-count-down.json +198 -0
  180. package/skills/weaver-e10-builder/assets/factory/factory-digital-panel.json +108 -0
  181. package/skills/weaver-e10-builder/assets/factory/factory-eb-button.json +150 -0
  182. package/skills/weaver-e10-builder/assets/factory/factory-fast-create.json +62 -0
  183. package/skills/weaver-e10-builder/assets/factory/factory-gauge.json +312 -0
  184. package/skills/weaver-e10-builder/assets/factory/factory-h-bar-stack.json +328 -0
  185. package/skills/weaver-e10-builder/assets/factory/factory-h-bar.json +326 -0
  186. package/skills/weaver-e10-builder/assets/factory/factory-line.json +212 -0
  187. package/skills/weaver-e10-builder/assets/factory/factory-nav-bar.json +167 -0
  188. package/skills/weaver-e10-builder/assets/factory/factory-nav-menu.json +144 -0
  189. package/skills/weaver-e10-builder/assets/factory/factory-nav-panel.json +338 -0
  190. package/skills/weaver-e10-builder/assets/factory/factory-new-tab.json +163 -0
  191. package/skills/weaver-e10-builder/assets/factory/factory-nightingale.json +312 -0
  192. package/skills/weaver-e10-builder/assets/factory/factory-nlist.json +112 -0
  193. package/skills/weaver-e10-builder/assets/factory/factory-page-header.json +171 -0
  194. package/skills/weaver-e10-builder/assets/factory/factory-picture.json +169 -0
  195. package/skills/weaver-e10-builder/assets/factory/factory-pie.json +212 -0
  196. package/skills/weaver-e10-builder/assets/factory/factory-progress-chart.json +162 -0
  197. package/skills/weaver-e10-builder/assets/factory/factory-search-global.json +104 -0
  198. package/skills/weaver-e10-builder/assets/factory/factory-slide.json +164 -0
  199. package/skills/weaver-e10-builder/assets/factory/factory-treemap.json +322 -0
  200. package/skills/weaver-e10-builder/assets/icons.db +0 -0
  201. package/skills/weaver-e10-builder/assets/sample/.claude/settings.local.json +8 -0
  202. package/skills/weaver-e10-builder/assets/sample/api/formApi.js +510 -0
  203. package/skills/weaver-e10-builder/assets/sample/config/config.js +0 -0
  204. package/skills/weaver-e10-builder/assets/sample/config/configLoad.js +0 -0
  205. package/skills/weaver-e10-builder/assets/sample/config/configLoad_default.js +0 -0
  206. package/skills/weaver-e10-builder/assets/sample/config/config_default.js +0 -0
  207. package/skills/weaver-e10-builder/assets/sample/entry.js +22 -0
  208. package/skills/weaver-e10-builder/assets/sample/eslint.config.cjs +48 -0
  209. package/skills/weaver-e10-builder/assets/sample/memo.md +0 -0
  210. package/skills/weaver-e10-builder/assets/sample/readme.js +8 -0
  211. package/skills/weaver-e10-builder/references/app/guide-app-publish.md +92 -0
  212. package/skills/weaver-e10-builder/references/auth/guide-auth.md +88 -0
  213. package/skills/weaver-e10-builder/references/coding/guide-edit-backfill.md +189 -0
  214. package/skills/weaver-e10-builder/references/coding/guide-form-crud.md +262 -0
  215. package/skills/weaver-e10-builder/references/coding/guide-page-code.md +244 -0
  216. package/skills/weaver-e10-builder/references/coding/guide-page-export.md +119 -0
  217. package/skills/weaver-e10-builder/references/coding/ref-compile-rules.md +130 -0
  218. package/skills/weaver-e10-builder/references/common/guide-plan-template.md +164 -0
  219. package/skills/weaver-e10-builder/references/common/map.md +153 -0
  220. package/skills/weaver-e10-builder/references/common/ref-cli-commands.md +635 -0
  221. package/skills/weaver-e10-builder/references/components/@weapp-Button.md +104 -0
  222. package/skills/weaver-e10-builder/references/components/base-Badge.md +100 -0
  223. package/skills/weaver-e10-builder/references/components/base-Dialog.md +358 -0
  224. package/skills/weaver-e10-builder/references/components/base-Empty.md +58 -0
  225. package/skills/weaver-e10-builder/references/components/base-Tag.md +112 -0
  226. package/skills/weaver-e10-builder/references/components/display-Alert.md +64 -0
  227. package/skills/weaver-e10-builder/references/components/display-Avatar.md +150 -0
  228. package/skills/weaver-e10-builder/references/components/display-Calendar.md +263 -0
  229. package/skills/weaver-e10-builder/references/components/display-Carousel.md +115 -0
  230. package/skills/weaver-e10-builder/references/components/display-Collapse.md +299 -0
  231. package/skills/weaver-e10-builder/references/components/display-FilePreview.md +49 -0
  232. package/skills/weaver-e10-builder/references/components/display-Icon.md +66 -0
  233. package/skills/weaver-e10-builder/references/components/display-List.md +320 -0
  234. package/skills/weaver-e10-builder/references/components/display-Pagination.md +41 -0
  235. package/skills/weaver-e10-builder/references/components/display-Spin.md +34 -0
  236. package/skills/weaver-e10-builder/references/components/display-Steps.md +89 -0
  237. package/skills/weaver-e10-builder/references/components/display-Table.md +160 -0
  238. package/skills/weaver-e10-builder/references/components/display-Title.md +117 -0
  239. package/skills/weaver-e10-builder/references/components/form-Checkbox.md +161 -0
  240. package/skills/weaver-e10-builder/references/components/form-DepartmentBrowser-api.md +52 -0
  241. package/skills/weaver-e10-builder/references/components/form-EmployeeBrowser-api.md +51 -0
  242. package/skills/weaver-e10-builder/references/components/form-EmployeeBrowser.md +51 -0
  243. package/skills/weaver-e10-builder/references/components/form-Input.md +123 -0
  244. package/skills/weaver-e10-builder/references/components/form-Radio.md +145 -0
  245. package/skills/weaver-e10-builder/references/components/form-Select.md +191 -0
  246. package/skills/weaver-e10-builder/references/components/form-Switch.md +46 -0
  247. package/skills/weaver-e10-builder/references/components/form-Upload.md +53 -0
  248. package/skills/weaver-e10-builder/references/components/generic-Echarts.md +102 -0
  249. package/skills/weaver-e10-builder/references/ebuilder-designer/guide-designer-components.md +130 -0
  250. package/skills/weaver-e10-builder/references/ebuilder-designer/guide-designer-css.md +127 -0
  251. package/skills/weaver-e10-builder/references/ebuilder-designer/guide-designer-factory.md +460 -0
  252. package/skills/weaver-e10-builder/references/ebuilder-designer/guide-designer-version.md +111 -0
  253. package/skills/weaver-e10-builder/references/ebuilder-designer/guide-designer.md +288 -0
  254. package/skills/weaver-e10-builder/references/esb-interface/guide-import.md +34 -0
  255. package/skills/weaver-e10-builder/references/form/guide-create-form.md +248 -0
  256. package/skills/weaver-e10-builder/references/form/guide-ebuilder-filter.md +73 -0
  257. package/skills/weaver-e10-builder/references/form/guide-ebuilder-scope.md +82 -0
  258. package/skills/weaver-e10-builder/references/form/guide-field-linkage.md +123 -0
  259. package/skills/weaver-e10-builder/references/form/guide-form-archive-permission.md +175 -0
  260. package/skills/weaver-e10-builder/references/form/guide-form-association.md +124 -0
  261. package/skills/weaver-e10-builder/references/form/guide-form-button.md +169 -0
  262. package/skills/weaver-e10-builder/references/form/guide-form-data.md +78 -0
  263. package/skills/weaver-e10-builder/references/form/guide-form-formula-functions.md +343 -0
  264. package/skills/weaver-e10-builder/references/form/guide-form-layout-incremental.md +90 -0
  265. package/skills/weaver-e10-builder/references/form/guide-form-layout-planning.md +68 -0
  266. package/skills/weaver-e10-builder/references/form/guide-form-linkage.md +269 -0
  267. package/skills/weaver-e10-builder/references/form/guide-form-message.md +74 -0
  268. package/skills/weaver-e10-builder/references/form/guide-form-physical-table.md +146 -0
  269. package/skills/weaver-e10-builder/references/form/guide-form-serial-mark.md +47 -0
  270. package/skills/weaver-e10-builder/references/form/guide-form-sub-detail.md +82 -0
  271. package/skills/weaver-e10-builder/references/form/guide-form-view-permission.md +38 -0
  272. package/skills/weaver-e10-builder/references/form/guide-form-view.md +371 -0
  273. package/skills/weaver-e10-builder/references/form/guide-formula-linkage.md +281 -0
  274. package/skills/weaver-e10-builder/references/form/guide-list-columns.md +52 -0
  275. package/skills/weaver-e10-builder/references/form/guide-list-custom-text.md +52 -0
  276. package/skills/weaver-e10-builder/references/form/guide-list-stats.md +136 -0
  277. package/skills/weaver-e10-builder/references/form/guide-virtual-form.md +156 -0
  278. package/skills/weaver-e10-builder/references/form/ref-form-fields.md +293 -0
  279. package/skills/weaver-e10-builder/references/form/style-templates.md +97 -0
  280. package/skills/weaver-e10-builder/references/hrm/guide-matrix.md +245 -0
  281. package/skills/weaver-e10-builder/references/hrm/guide-org-employee.md +155 -0
  282. package/skills/weaver-e10-builder/references/menu/system-menus.md +75 -0
  283. package/skills/weaver-e10-builder/references/report/add-dataset-registration-guide.md +139 -0
  284. package/skills/weaver-e10-builder/references/report/ai-report-workflow.md +412 -0
  285. package/skills/weaver-e10-builder/references/report/api-report-build-fast-path.md +275 -0
  286. package/skills/weaver-e10-builder/references/report/app-datasource-lookup-guide.md +230 -0
  287. package/skills/weaver-e10-builder/references/report/cell-config-echo-guide.md +163 -0
  288. package/skills/weaver-e10-builder/references/report/cell-transform-guide.md +147 -0
  289. package/skills/weaver-e10-builder/references/report/condition-format-guide.md +140 -0
  290. package/skills/weaver-e10-builder/references/report/cross-dataset-filter-guide.md +304 -0
  291. package/skills/weaver-e10-builder/references/report/dataset-query-filter-guide.md +235 -0
  292. package/skills/weaver-e10-builder/references/report/dataset-sidebar-ops-guide.md +280 -0
  293. package/skills/weaver-e10-builder/references/report/dataset-table-field-contract-guide.md +339 -0
  294. package/skills/weaver-e10-builder/references/report/datasource-metadata-guide.md +365 -0
  295. package/skills/weaver-e10-builder/references/report/datasource-selection-and-parent-filter-guide.md +148 -0
  296. package/skills/weaver-e10-builder/references/report/date-range-query-reference.md +102 -0
  297. package/skills/weaver-e10-builder/references/report/default-header-style-guide.md +70 -0
  298. package/skills/weaver-e10-builder/references/report/designer-blank-prevention-guide.md +111 -0
  299. package/skills/weaver-e10-builder/references/report/event-hreflink-guide.md +184 -0
  300. package/skills/weaver-e10-builder/references/report/field-bind-exact-match-guide.md +208 -0
  301. package/skills/weaver-e10-builder/references/report/formula-cell-api-guide.md +258 -0
  302. package/skills/weaver-e10-builder/references/report/guide-report-build.md +131 -0
  303. package/skills/weaver-e10-builder/references/report/guide-report-modify.md +100 -0
  304. package/skills/weaver-e10-builder/references/report/guide-report-multisource.md +143 -0
  305. package/skills/weaver-e10-builder/references/report/guide-report-query.md +98 -0
  306. package/skills/weaver-e10-builder/references/report/hidden-row-and-header-merge-guide.md +100 -0
  307. package/skills/weaver-e10-builder/references/report/layout-showlocation-freeze-guide.md +167 -0
  308. package/skills/weaver-e10-builder/references/report/preaggregate-auto-disable-guide.md +107 -0
  309. package/skills/weaver-e10-builder/references/report/query-condition-api-guide.md +890 -0
  310. package/skills/weaver-e10-builder/references/report/ref-report-commands.md +122 -0
  311. package/skills/weaver-e10-builder/references/report/ref-report-pitfalls.md +226 -0
  312. package/skills/weaver-e10-builder/references/report/report-baseinfo-defaults-guide.md +117 -0
  313. package/skills/weaver-e10-builder/references/report/report-building-guide.md +511 -0
  314. package/skills/weaver-e10-builder/references/report/report-config-schema.md +445 -0
  315. package/skills/weaver-e10-builder/references/report/report-create-modes-guide.md +182 -0
  316. package/skills/weaver-e10-builder/references/report/report-data-model.md +447 -0
  317. package/skills/weaver-e10-builder/references/report/report-delivery-contract.md +101 -0
  318. package/skills/weaver-e10-builder/references/report/report-designer-feature-map.md +500 -0
  319. package/skills/weaver-e10-builder/references/report/report-internal-error-guide.md +78 -0
  320. package/skills/weaver-e10-builder/references/report/report-knowledge-base.md +389 -0
  321. package/skills/weaver-e10-builder/references/report/report-lifecycle-api-guide.md +392 -0
  322. package/skills/weaver-e10-builder/references/report/report-list-page-ops-guide.md +191 -0
  323. package/skills/weaver-e10-builder/references/report/report-permission-guide.md +365 -0
  324. package/skills/weaver-e10-builder/references/report/report-requirement-analysis-template.md +202 -0
  325. package/skills/weaver-e10-builder/references/report/report-self-check-guide.md +164 -0
  326. package/skills/weaver-e10-builder/references/report/safe-partial-save-guide.md +151 -0
  327. package/skills/weaver-e10-builder/references/report/snowflake-id-precision-guide.md +84 -0
  328. package/skills/weaver-e10-builder/references/report/spec-build-schema.md +294 -0
  329. package/skills/weaver-e10-builder/references/report/targeted-fix-guide.md +97 -0
  330. package/skills/weaver-e10-builder/references/report/user-request-scope-only-guide.md +82 -0
  331. package/skills/weaver-e10-builder/references/workflow/guide-function-management.md +154 -0
  332. package/skills/weaver-e10-builder/references/workflow/guide-opinion-settings.md +126 -0
  333. package/skills/weaver-e10-builder/references/workflow/guide-workflow-action.md +174 -0
  334. package/skills/weaver-e10-builder/references/workflow/guide-workflow-auth-resp.md +224 -0
  335. package/skills/weaver-e10-builder/references/workflow/guide-workflow-condition.md +447 -0
  336. package/skills/weaver-e10-builder/references/workflow/guide-workflow-node-layout.md +181 -0
  337. package/skills/weaver-e10-builder/references/workflow/guide-workflow-odoc-setting.md +248 -0
  338. package/skills/weaver-e10-builder/references/workflow/guide-workflow-odoc.md +68 -0
  339. package/skills/weaver-e10-builder/references/workflow/guide-workflow.md +527 -0
  340. package/skills/weaver-e10-builder/references/workflow/operator-matrix.md +76 -0
  341. package/skills/weaver-e10-caizhilian/SKILL.md +14 -4
  342. package/skills/weaver-e10-caizhilian/references/file-upload.md +100 -295
  343. package/skills/weaver-e10-caizhilian/references/files.md +15 -0
  344. package/skills/weaver-e10-caizhilian/references/folder.md +31 -3
  345. package/skills/weaver-e10-caizhilian/references/setting-attach.md +48 -3
  346. package/skills/weaver-e10-caizhilian/references/source-manifest.json +634 -25
  347. package/skills/weaver-e10-jiuchuanhui/SKILL.md +9 -1
  348. package/skills/weaver-e10-shared/SKILL.md +19 -5
  349. package/skills/weaver-e10-shared/references/e10-auth-and-session.md +25 -5
  350. package/skills/weaver-e10-workflow/SKILL.md +28 -47
  351. package/skills/weaver-e10-workflow/references/source-manifest.json +46 -36
  352. package/skills/weaver-e10-workflow/references/workflow-batch.md +2 -4
  353. package/skills/weaver-e10-workflow/references/workflow-create.md +261 -86
  354. package/skills/weaver-e10-workflow/references/workflow-edit.md +2 -1
  355. package/skills/weaver-e10-workflow/references/workflow-memory.md +3 -6
  356. package/skills/weaver-e10-workflow/references/workflow-operate.md +2 -1
  357. package/skills/weaver-e10-workflow/references/workflow-query.md +11 -9
  358. package/skills/weaver-e10-workflow/references/workflow-share.md +2 -0
@@ -14,6 +14,7 @@
14
14
  import { CaizhilianCliError, caizhilianValidationError } from '../../errors.js';
15
15
  import { issueWriteLease } from '../confirm.js';
16
16
  import { caizhilianSuccess } from '../types.js';
17
+ import { hasNextPage, parsePage, requireNonEmpty } from '../shared.js';
17
18
  const ACTION = 'caizhilian.setting-attach';
18
19
  // ── 接口路径 ──────────────────────────────────────────────
19
20
  const GET_PATH = '/api/file/tenant/setting';
@@ -282,10 +283,207 @@ async function listWorkflowsByFolders(args, env) {
282
283
  total: workflows.length,
283
284
  });
284
285
  }
286
+ // ── 获取流程上传目录设置 ──────────────────────────────────────────
287
+ /** 源 workflow_plugins._MODULE_MAP:模块类型 → 路径/参数映射。 */
288
+ const MODULE_MAP = {
289
+ workflow: { module: 'workflow', apiModule: 'workflow/core', basePath: '/api/workflow/core/form/setting/attachment' },
290
+ ebuilder: { module: 'ebuildercard', apiModule: 'ebuilder/flow', basePath: '/api/ebuilder/flow/form/setting/attachment' },
291
+ };
292
+ function resolveModuleInfo(module) {
293
+ return MODULE_MAP[module] ?? { module, apiModule: 'workflow/core', basePath: '/api/workflow/core/form/setting/attachment' };
294
+ }
295
+ function nestedValue(root, path) {
296
+ let current = root;
297
+ for (const segment of path.split('.')) {
298
+ if (current === null || current === undefined || typeof current !== 'object')
299
+ return undefined;
300
+ current = current[segment];
301
+ }
302
+ return current;
303
+ }
304
+ async function listUploadFolders(args, env) {
305
+ const action = 'caizhilian.setting-attach.list-upload-folders';
306
+ const workflowId = requireNonEmpty(args.workflow_id, 'workflow_id 不能为空');
307
+ // ── Step 1: 查询表单信息并解析模块映射 ──
308
+ const formResponse = await env.host.request({
309
+ method: 'GET',
310
+ path: '/api/bs/workflow/pathdef/baseSet/getEditForm',
311
+ query: { isCreate: '0', belongType: '1', workflowId },
312
+ operation: action,
313
+ });
314
+ const formData = asRecord(formResponse);
315
+ const formList = nestedValue(formData, 'data.data.formId');
316
+ if (!Array.isArray(formList) || formList.length === 0) {
317
+ throw caizhilianValidationError('workflow_not_found', '未找到该流程对应的表单信息', { workflow_id: workflowId });
318
+ }
319
+ const firstForm = asRecord(formList[0]);
320
+ const formId = String(firstForm.id ?? '').trim();
321
+ if (!formId) {
322
+ throw caizhilianValidationError('form_id_not_found', '未找到表单 ID', { workflow_id: workflowId });
323
+ }
324
+ const formModule = String(firstForm.module ?? '');
325
+ const moduleInfo = resolveModuleInfo(formModule);
326
+ // ── Step 2 + Step 3: 并行查询通用设置和附件字段列表 ──
327
+ const [commonResponse, fieldsResponse] = await Promise.all([
328
+ env.host.request({
329
+ method: 'POST',
330
+ path: `${moduleInfo.basePath}/getWeaFormAndData`,
331
+ body: { formId, type: 'common', module: moduleInfo.module, apiModule: moduleInfo.apiModule },
332
+ operation: action,
333
+ }),
334
+ env.host.request({
335
+ method: 'POST',
336
+ path: `${moduleInfo.basePath}/listAttachFields`,
337
+ body: { formId, apiModule: moduleInfo.apiModule, module: moduleInfo.module },
338
+ operation: action,
339
+ }),
340
+ ]);
341
+ const seen = new Map();
342
+ // 收集通用设置中的文件夹
343
+ const commonItems = nestedValue(asRecord(commonResponse), 'data.folderIdBrowserValue');
344
+ if (Array.isArray(commonItems)) {
345
+ for (const item of commonItems) {
346
+ if (!isPlainObject(item))
347
+ continue;
348
+ const fid = String(item.id ?? '').trim();
349
+ if (!fid)
350
+ continue;
351
+ const existing = seen.get(fid);
352
+ if (existing) {
353
+ existing.sources.push({ type: 'common_setting' });
354
+ }
355
+ else {
356
+ seen.set(fid, {
357
+ id: fid,
358
+ name: String(item.content ?? ''),
359
+ path: String(item.title ?? ''),
360
+ sources: [{ type: 'common_setting' }],
361
+ });
362
+ }
363
+ }
364
+ }
365
+ // ── Step 4: 并行查询每个附件字段的文件夹设置(仅 folderType=1)──
366
+ const fieldsData = asRecord(fieldsResponse);
367
+ const fieldList = Array.isArray(fieldsData.data) ? fieldsData.data : [];
368
+ const fieldRequests = [];
369
+ for (const field of fieldList) {
370
+ if (!isPlainObject(field))
371
+ continue;
372
+ const fieldId = String(field.fieldId ?? '').trim();
373
+ if (!fieldId)
374
+ continue;
375
+ if (String(field.folderType ?? '') !== '1')
376
+ continue;
377
+ fieldRequests.push({
378
+ meta: { fieldId, fieldName: String(field.fieldName ?? '') },
379
+ request: env.host.request({
380
+ method: 'POST',
381
+ path: `${moduleInfo.basePath}/getWeaFormAndData`,
382
+ body: { formId, type: 'folder', fieldId, module: moduleInfo.module, apiModule: moduleInfo.apiModule },
383
+ operation: action,
384
+ }),
385
+ });
386
+ }
387
+ if (fieldRequests.length > 0) {
388
+ const results = await Promise.allSettled(fieldRequests.map((r) => r.request));
389
+ for (let i = 0; i < fieldRequests.length; i++) {
390
+ const result = results[i];
391
+ if (result.status === 'rejected')
392
+ continue; // 单个字段失败不影响其他
393
+ const fieldFolderData = asRecord(result.value);
394
+ const fieldFolderItems = nestedValue(fieldFolderData, 'data.folderIdBrowserValue');
395
+ if (!Array.isArray(fieldFolderItems))
396
+ continue;
397
+ for (const item of fieldFolderItems) {
398
+ if (!isPlainObject(item))
399
+ continue;
400
+ const fid = String(item.id ?? '').trim();
401
+ if (!fid)
402
+ continue;
403
+ const source = {
404
+ type: 'field',
405
+ field_id: fieldRequests[i].meta.fieldId,
406
+ field_name: fieldRequests[i].meta.fieldName,
407
+ };
408
+ const existing = seen.get(fid);
409
+ if (existing) {
410
+ existing.sources.push(source);
411
+ }
412
+ else {
413
+ seen.set(fid, {
414
+ id: fid,
415
+ name: String(item.content ?? ''),
416
+ path: String(item.title ?? ''),
417
+ sources: [source],
418
+ });
419
+ }
420
+ }
421
+ }
422
+ }
423
+ return caizhilianSuccess(action, {
424
+ workflow_id: workflowId,
425
+ folders: [...seen.values()],
426
+ });
427
+ }
428
+ // ── caizhilian.setting-attach.search-workflows ────────────
429
+ const SEARCH_WORKFLOWS_ACTION = 'caizhilian.setting-attach.search-workflows';
430
+ const SEARCH_WORKFLOWS_PATH = '/api/bs/workflow/pathdef/baseSet/getBaseInfoList';
431
+ /** 源 SearchWorkflowsPlugin.execute(search_plugins.py):按流程名称模糊搜索审批流程。 */
432
+ async function searchWorkflows(args, env) {
433
+ const action = SEARCH_WORKFLOWS_ACTION;
434
+ // 源:keyword 自动去除首尾空格;不传、传空或纯空格则返回全部流程
435
+ const keyword = args.keyword === undefined || args.keyword === null ? '' : String(args.keyword).trim();
436
+ const { pageNo, pageSize } = parsePage(args, 100);
437
+ const body = {
438
+ searchParams: {
439
+ searchDatas: {
440
+ workflowNameCondition: 'in',
441
+ workflowTypeCondition: 'in',
442
+ formType: 'all',
443
+ formCondition: 'in',
444
+ status: '0',
445
+ type: 'and',
446
+ },
447
+ quickSearchDatas: { workflowName: keyword },
448
+ otherSearchDatas: { workflowType: '', workflowId: '', subCompanyId: '' },
449
+ },
450
+ isTemplate: 0,
451
+ belongType: 1,
452
+ current: pageNo,
453
+ pageSize,
454
+ };
455
+ const response = await env.host.request({
456
+ method: 'POST',
457
+ path: SEARCH_WORKFLOWS_PATH,
458
+ body,
459
+ operation: action,
460
+ });
461
+ const rawList = nestedValue(asRecord(response), 'data.data');
462
+ const items = Array.isArray(rawList) ? rawList : [];
463
+ const workflows = [];
464
+ for (const item of items) {
465
+ if (!isPlainObject(item))
466
+ continue;
467
+ workflows.push({
468
+ id: String(item.id ?? ''),
469
+ workflowName: item.workflowName ?? '',
470
+ typeName: item.typeName ?? '',
471
+ });
472
+ }
473
+ return caizhilianSuccess(action, {
474
+ page_no: pageNo,
475
+ page_size: pageSize,
476
+ // 服务端 hasMore 不随请求 pageSize 变化(按固定 100 计算),与源一致以本页返回数量判断
477
+ has_next: hasNextPage(items, pageSize),
478
+ workflows,
479
+ });
480
+ }
285
481
  // ── 处理器汇总 ────────────────────────────────────────────
286
482
  export const caizhilianSettingAttachHandlers = {
287
483
  'caizhilian.setting-attach.get': { execute: getSettingAttach },
288
484
  'caizhilian.setting-attach.list-workflows-by-folders': { execute: listWorkflowsByFolders },
485
+ 'caizhilian.setting-attach.list-upload-folders': { execute: listUploadFolders },
486
+ 'caizhilian.setting-attach.search-workflows': { execute: searchWorkflows },
289
487
  'caizhilian.setting-attach.set': {
290
488
  prepare: setSettingAttachPrepare,
291
489
  apply: setSettingAttachApply,
@@ -65,7 +65,10 @@ function prepareDefinition(spec, entry) {
65
65
  summary: `${spec.summary}|prepare:只读校验与请求体预览,签发 apply 所需的 continuation,不产生副作用`,
66
66
  risk: 'read-before-write',
67
67
  requiresConfirmation: true,
68
- handler: (args, env) => entry.prepare(args, env),
68
+ handler: (args, env) => {
69
+ entry.validateInput?.(args);
70
+ return entry.prepare(args, env);
71
+ },
69
72
  };
70
73
  }
71
74
  /**
@@ -83,6 +86,7 @@ function applyDefinition(spec, entry) {
83
86
  requiresConfirmation: true,
84
87
  inputSchema: applySchemaOf(spec.inputSchema, base.required ?? []),
85
88
  handler: async (args, env) => {
89
+ entry.validateInput?.(args);
86
90
  const lease = await verifyLease(args, name, env);
87
91
  assertLeaseArgs(lease, args, name);
88
92
  assertLeaseTarget(lease, args, entry.targetKeys ?? [], name);
@@ -191,6 +191,38 @@ export function timestampToDateStr(tsMs, fallback = '') {
191
191
  return fallback;
192
192
  return formatDateTimeMs(parsed + CN_TZ_OFFSET_MS, true);
193
193
  }
194
+ /**
195
+ * 附件历史版本 updateTime 兼容转换(源为毫秒时间戳,但需兼容秒级时间戳与已格式化字符串):
196
+ * - 数值/数字串 >= 1e12 → 视为毫秒时间戳;
197
+ * - 1e9 <= 数值 < 1e12 → 视为秒时间戳,×1000 后转换;
198
+ * - 已是 'YYYY-MM-DD…' 形态的字符串 → 原样透传;
199
+ * - 其它无法识别的值 → 原样转为字符串透传(不丢信息)。
200
+ */
201
+ export function formatVersionTimestamp(value) {
202
+ if (value === undefined || value === null || value === '')
203
+ return '';
204
+ if (typeof value === 'number') {
205
+ if (value >= 1e12)
206
+ return timestampToDateStr(value, String(value));
207
+ if (value >= 1e9)
208
+ return timestampToDateStr(value * 1000, String(value));
209
+ return String(value);
210
+ }
211
+ const text = String(value).trim();
212
+ if (text === '')
213
+ return '';
214
+ if (/^\d{4}-\d{2}-\d{2}/u.test(text))
215
+ return text;
216
+ if (/^-?\d+$/u.test(text)) {
217
+ const parsed = Number(text);
218
+ if (parsed >= 1e12)
219
+ return timestampToDateStr(parsed, text);
220
+ if (parsed >= 1e9)
221
+ return timestampToDateStr(parsed * 1000, text);
222
+ return text;
223
+ }
224
+ return text;
225
+ }
194
226
  function formatDateTimeMs(shiftedMs, withSeconds) {
195
227
  const t = new Date(shiftedMs);
196
228
  const date = `${t.getUTCFullYear()}-${pad(t.getUTCMonth() + 1)}-${pad(t.getUTCDate())}`;
@@ -271,6 +271,8 @@ export const caizhilianOperationSpecs = [
271
271
  position_attribute: LIST('岗位属性'),
272
272
  position_level_department: LIST('岗位层级-部门'),
273
273
  position_level_subcompany: LIST('岗位层级-分部'),
274
+ seclevel_min: INT('密级下限,范围 -999~999', { minimum: -999, maximum: 999 }),
275
+ seclevel_max: INT('密级上限,范围 -999~999', { minimum: -999, maximum: 999 }),
274
276
  }, ['folder_id', 'permission_type', 'obj_type'], { requiresConfirmation: true }),
275
277
  spec('folder', 'permission.delete', 'delete_folder_permission', 'high-risk-write', '删除文件夹文档权限设置', {
276
278
  folder_id: ID('文件夹 ID'),
@@ -309,6 +311,50 @@ export const caizhilianOperationSpecs = [
309
311
  spec('folder', 'permission.sync-setting', 'sync_folder_setting_permission', 'high-risk-write', '将当前文件夹的"管理员"权限设置同步到下级子文件夹', {
310
312
  id: ID('文件夹 ID'),
311
313
  keepOldSettingForAllFolders: BOOL('是否保留原有管理员设置(true=保留,false=不保留)'),
314
+ }, ['id', 'keepOldSettingForAllFolders'], { requiresConfirmation: true }),
315
+ spec('folder', 'permission.sync-maintain', 'sync_folder_maintain_permission', 'high-risk-write', '将当前文件夹的"文件夹维护"权限设置同步到下级子文件夹', {
316
+ id: ID('文件夹 ID'),
317
+ keepOldSettingForAllFolders: BOOL('是否保留原有文件夹维护设置(true=保留,false=不保留)'),
318
+ }, ['id', 'keepOldSettingForAllFolders'], { requiresConfirmation: true }),
319
+ spec('folder', 'permission.sync-download', 'sync_folder_download_permission', 'high-risk-write', '将当前文件夹的"下载权限"设置同步到下级子文件夹', {
320
+ id: ID('文件夹 ID'),
321
+ keepOldSettingForAllFolders: BOOL('是否保留原有下载权限设置(true=保留,false=不保留)'),
322
+ }, ['id'], { requiresConfirmation: true }),
323
+ spec('folder', 'permission.sync-delete', 'sync_folder_delete_permission', 'high-risk-write', '将当前文件夹的"删除权限"设置同步到下级子文件夹', {
324
+ id: ID('文件夹 ID'),
325
+ keepOldSettingForAllFolders: BOOL('是否保留原有删除权限设置(true=保留,false=不保留)'),
326
+ }, ['id'], { requiresConfirmation: true }),
327
+ spec('folder', 'permission.sync-copy', 'sync_folder_copy_permission', 'high-risk-write', '将当前文件夹的"复制权限"设置同步到下级子文件夹', {
328
+ id: ID('文件夹 ID'),
329
+ keepOldSettingForAllFolders: BOOL('是否保留原有复制权限设置(true=保留,false=不保留)'),
330
+ }, ['id', 'keepOldSettingForAllFolders'], { requiresConfirmation: true }),
331
+ spec('folder', 'permission.sync-create', 'sync_folder_create_permission', 'high-risk-write', '将当前文件夹的"新建文档权限"设置同步到下级子文件夹', {
332
+ id: ID('文件夹 ID'),
333
+ keepOldSettingForAllFolders: BOOL('是否保留原有新建文档权限设置(true=保留,false=不保留)'),
334
+ }, ['id', 'keepOldSettingForAllFolders'], { requiresConfirmation: true }),
335
+ spec('folder', 'permission.sync-move', 'sync_folder_move_permission', 'high-risk-write', '将当前文件夹的"移动权限"设置同步到下级子文件夹', {
336
+ id: ID('文件夹 ID'),
337
+ keepOldSettingForAllFolders: BOOL('是否保留原有移动权限设置(true=保留,false=不保留)'),
338
+ }, ['id', 'keepOldSettingForAllFolders'], { requiresConfirmation: true }),
339
+ spec('folder', 'permission.sync-participant', 'sync_folder_participant', 'high-risk-write', '将当前文件夹的"默认参与人"设置同步到下级子文件夹或历史文档', {
340
+ id: ID('文件夹 ID'),
341
+ sync_to_folder_docs: BOOL('是否同步到当前文件夹内的历史文档'),
342
+ sync_to_all_folders: BOOL('是否同步到所有下级文件夹'),
343
+ sync_to_all_sub_folder_docs: BOOL('是否同步到所有下级文件夹内的历史文档'),
344
+ keep_old_for_folder_docs: BOOL('原有参与人是否保留(同步到历史文档时)', { default: true }),
345
+ keep_old_for_all_folders: BOOL('原有参与人是否保留(同步到下级文件夹时)', { default: true }),
346
+ keep_old_for_all_sub_folder_docs: BOOL('原有参与人是否保留(同步到下级文件夹历史文档时)', { default: true }),
347
+ }, ['id'], { requiresConfirmation: true }),
348
+ spec('folder', 'permission.sync-default-share', 'sync_folder_default_share', 'high-risk-write', '将当前文件夹的"默认共享人"设置同步到下级子文件夹或历史文档', {
349
+ id: ID('文件夹 ID'),
350
+ sync_to_folder_docs: BOOL('是否同步到当前文件夹内的历史文档'),
351
+ sync_to_all_folders: BOOL('是否同步到所有下级文件夹'),
352
+ sync_to_all_sub_folder_docs: BOOL('是否同步到所有下级文件夹内的历史文档'),
353
+ keep_old_default_share_for_folder_docs: BOOL('原有默认共享人是否保留(同步到历史文档时)', { default: true }),
354
+ keep_old_non_default_share_for_folder_docs: BOOL('原有非默认共享人是否保留(同步到历史文档时)', { default: true }),
355
+ keep_old_default_share_for_all_folders: BOOL('原有默认共享人是否保留(同步到下级文件夹时)', { default: true }),
356
+ keep_old_default_share_for_sub_folder_docs: BOOL('原有默认共享人是否保留(同步到下级文件夹历史文档时)', { default: true }),
357
+ keep_old_non_default_share_for_sub_folder_docs: BOOL('原有非默认共享人是否保留(同步到下级文件夹历史文档时)', { default: true }),
312
358
  }, ['id'], { requiresConfirmation: true }),
313
359
  // ── setting-attach ──────────────────────────────────────
314
360
  spec('setting-attach', 'get', 'get_setting_attach', 'read', '读取附件设置(文件设置 → 附件设置)', {}, [], {
@@ -319,6 +365,16 @@ export const caizhilianOperationSpecs = [
319
365
  }, ['folder_ids'], {
320
366
  method: 'http_template',
321
367
  }),
368
+ spec('setting-attach', 'list-upload-folders', 'fetch_workflow_upload_folder', 'read', '获取指定审批流程的附件上传目录设置(源 fetch_workflow_upload_folder)', {
369
+ workflow_id: ID('审批流程 ID'),
370
+ }, ['workflow_id']),
371
+ spec('setting-attach', 'search-workflows', 'search_workflows', 'read', '按名称模糊搜索审批流程(源 search_workflows)', {
372
+ keyword: S('流程名称搜索词,模糊匹配;不传或空白返回全部流程'),
373
+ name: S('旧字段别名,等价 keyword(已废弃,与 keyword 同时出现且取值不一致会报 alias_conflict)'),
374
+ ...pageProps(100),
375
+ }, [], {
376
+ deprecatedInputAliases: { keyword: ['name'] },
377
+ }),
322
378
  spec('setting-attach', 'set', 'set_setting_attach', 'high-risk-write', '保存附件设置(只改指定字段,未指定字段透传原值)', {
323
379
  items: {
324
380
  type: 'object',
@@ -544,11 +600,17 @@ export const caizhilianOperationSpecs = [
544
600
  spec('file-upload', 'prepare', 'prepare_upload', 'read', '准备上传(本地文件校验与元数据)', {
545
601
  file_path: FILE('本地文件绝对路径'),
546
602
  module: S('业务模块(如 document、workflow 等)'),
603
+ context_file: FILE('可选业务上下文 JSON 文件绝对路径(最大 64 KiB)'),
604
+ chat_id: S('宿主对话标识,用于隔离上传回执;默认 cli'),
605
+ timeout_seconds: INT('上传超时秒数(1–3600,默认 300)', { minimum: 1, maximum: 3600, default: 300 }),
547
606
  }, ['file_path', 'module']),
548
607
  spec('file-upload', 'upload', 'upload_file', 'high-risk-write', '上传文件到文件服务', {
549
608
  file_path: FILE('本地文件绝对路径'),
550
609
  module: S('业务模块(如 document、workflow 等)'),
551
610
  user_confirmed: BOOL('用户已确认上传'),
611
+ context_file: FILE('可选业务上下文 JSON 文件绝对路径(最大 64 KiB)'),
612
+ chat_id: S('宿主对话标识,用于隔离上传回执;默认 cli'),
613
+ timeout_seconds: INT('上传超时秒数(1–3600,默认 300)', { minimum: 1, maximum: 3600, default: 300 }),
552
614
  }, ['file_path', 'module', 'user_confirmed'], { requiresConfirmation: true }),
553
615
  // ── org ─────────────────────────────────────────────────
554
616
  spec('org', 'search-user', 'search_user', 'read', '人员浏览器检索(源 search_user → /api/hrm/common/browser/data/resource)', {
@@ -659,6 +721,11 @@ export const caizhilianOperationSpecs = [
659
721
  doc_id: ID('文档 ID'),
660
722
  save_path: FILE('保存路径(完整文件路径或目录)'),
661
723
  }, ['attachment_id', 'doc_id']),
724
+ spec('attachment', 'list-versions', 'find_version_list', 'read', '按附件 ID 查询附件历史版本(源 filePreview 历史版本抽屉接口)', {
725
+ attachment_id: ID('附件 ID'),
726
+ doc_id: ID('文档 ID(可选,不传时发空串)'),
727
+ ...pageProps(10),
728
+ }, ['attachment_id'], { method: 'http_template' }),
662
729
  // ── cover ───────────────────────────────────────────────
663
730
  spec('cover', 'upload', 'upload_cover_image', 'read-with-upload', '上传封面图片,仅返回 file_id(不改文档)', {
664
731
  file_path: FILE('本地图片路径(.png/.jpg/.jpeg/.gif/.webp/.bmp)'),
@@ -189,15 +189,20 @@ export function continuationReplayError(replay, expectedOperation) {
189
189
  return workflowAlreadyAppliedError(operation, replay);
190
190
  }
191
191
  if (replay.state === 'saving') {
192
- // 写入请求已发出但结果未知:一律按"结果不确定"处理(先只读核对,禁止重复提交)。
193
- // 恢复路径按命令形态分述:单命令(batchSubmit)没有 Prepare 可重跑,只能等幂等窗口过去后原样重跑。
194
- const recovery = /Apply$/u.test(operation)
195
- ? '确认未生效后再重跑对应的 Prepare 获取新句柄。'
196
- : '确认未生效后,等本次写入的幂等保护窗口过去(约 1 分钟)再原样重跑同一条命令(同一批 requestId 在窗口内会被拦住)。';
197
- return workflowPartialError('该 continuation 对应的上一次执行**已经发出写入请求,但结果未确认**(进程被中止或回执丢失),'
198
- + '本次未执行、也不要重复提交。请先只读核对(如 workflow.search --category done --requestId <目标ID>'
199
- + ',或 workflow.search --category mine 看是否已出现目标条目)确认真实状态,'
200
- + recovery, replay, { stage: 'continuation_replay', ...replay });
192
+ // 写入请求已发出但结果未知:一律按"结果不确定"处理,**本次不执行、也不重放**。
193
+ //
194
+ // 恢复路径按**句柄形态**分述,且**不再出现"等一会儿原样重跑"**——`createForm` 签发的
195
+ // `wc-` 句柄是没有幂等窗口的(`consume` 不传 `ttlMs`,一次性且永久),"等约 1 分钟再跑"
196
+ // 对它是结构性无效的死路(2026-09-28 用户裁定改写)。批量写侧虽有 60s 确定性键窗口,
197
+ // 但同样不该由模型自动重跑。
198
+ const recovery = operation === 'workflow.createForm'
199
+ ? '要重新发起,请**重新执行 workflow.createForm 获取新句柄**(本次句柄已消费,重发同一句柄无效)。'
200
+ : /Apply$/u.test(operation)
201
+ ? '确认未生效后,重跑对应的 Prepare 获取新句柄。'
202
+ : '该命令没有可重跑的 Prepare,也**不要原样重跑**;请把结果如实告知用户。';
203
+ return workflowPartialError('该 continuation 对应的上一次执行**已经发出写入请求,但结果未确认**(进程被中止或回执丢失),本次未执行。'
204
+ + '**请把"上一次结果未确认"如实告知用户并停下,不要自行继续**'
205
+ + '(不要重试、不要改用其它命令反复推断、不要替用户下结论)。' + recovery, replay, { stage: 'continuation_replay', ...replay });
201
206
  }
202
207
  if (replay.state === 'claimed') {
203
208
  // 只抢到句柄、未发出任何写入:并发的另一次执行正在占用,等它结束再重试即可。
@@ -124,10 +124,20 @@ export const FORM_ENDPOINTS = {
124
124
  create: '/api/workflow/core/flow/create',
125
125
  /** 提交(复用查询侧同一路径) */
126
126
  submit: '/api/workflow/core/paService/v1/submitRequest',
127
- /** 节点符合性校验 */
127
+ /**
128
+ * 节点字段校验的**第一跳**:轻量预检。
129
+ *
130
+ * 服务端只回一个布尔(是否需要把校验结果弹给用户),据此决定要不要再去取详细规则集
131
+ * (`conformanceSet` + `verificationConditionRule`)。开关 `passPopUpPrompt`/`noPassPrompt`
132
+ * 都为真时前端**不调**本接口,直接取详细规则集(2026-09-28 双 HAR 实证)。
133
+ */
134
+ verifyNodeFieldByList: '/api/workflow/core/verification/verifyNodeFieldByList',
135
+ /** 节点符合性校验(详细规则集,仅在需要展示校验结果时才取) */
128
136
  conformanceSet: '/api/bs/workflow/pathdef/nodeConformance/getConformanceSetByVerification',
129
137
  verificationRequestData: '/api/workflow/core/verification/getRequestDataByRequestId',
130
138
  verificationConditionRule: '/api/bs/workflow/pathdef/nodeConformance/verificationConditionRule',
139
+ /** 提交已创建的流程(创建后页面重载拿到 view 页鉴权再提交,与真机同路径) */
140
+ flowSubmit: '/api/workflow/core/flow/submit',
131
141
  /** 租户级文件上传设置(单文件大小上限 + 格式黑白名单) */
132
142
  tenantSetting: '/api/file/tenant/setting',
133
143
  };
@@ -5,6 +5,7 @@ import { createWorkflowHost } from './host.js';
5
5
  import { workflowManifest } from './manifest.js';
6
6
  import { executeWorkflowOperation } from './operations.js';
7
7
  import { workflowValidationError } from './errors.js';
8
+ import { compactStdoutPaths } from './stdout-compact.js';
8
9
  function asOptions(value) {
9
10
  return value && typeof value === 'object' && !Array.isArray(value) ? value : {};
10
11
  }
@@ -73,6 +74,59 @@ function failureEnvelope(error) {
73
74
  error: toErrorEnvelope(error),
74
75
  };
75
76
  }
77
+ /**
78
+ * 紧凑路径的**声明**在 `stdout-compact.ts`:`operations/form.ts` 判线时要用同一份路径
79
+ * (它量的必须是最终打出去的那份文本),常量留在本文件会让 `form.ts` 反向 import,
80
+ * 与 `index → operations → form` 形成循环依赖。本文件只把查询函数转发出去。
81
+ */
82
+ export { compactStdoutPaths };
83
+ /**
84
+ * 「stdout 整体直出」的判定 —— 目前**只有小e 环境的 `BROWSER_FILL` 一档**适用。
85
+ *
86
+ * 用户 2026-10-15 裁定:「xiaoe 下应该直接输出 `<browsertool>` 标签」。即该档的 stdout **就是**
87
+ * 那段标签块本身,**不再套** `{schemaVersion, ok, operation, data, warnings}` 信封 —— 于是
88
+ * `workflow-create.md` 里「返回内容以 `<browsertool>` 开头 ⇒ 原样输出」这句是**字面成立**的。
89
+ * 代价(用户已知悉并接受):这一档模型拿不到 `status` / `contextId`(本档不写服务端、句柄也未消费,
90
+ * 需要重发时由用户重新发起即可)。
91
+ *
92
+ * 两个条件必须同时成立,缺一就退回信封 —— 宁可不直出,也不让调用方拿到半截或空输出:
93
+ * - `data.status === 'BROWSER_FILL'`:小e 专用档,其它状态(含 `NEEDS_INPUT`)一律维持信封;
94
+ * - `data.finalMarkdown` 以 `<browsertool>` 开头:与文档口径同字面,渲染档万一变了也不会直出一个
95
+ * 看起来像标签、实际不是的东西。
96
+ *
97
+ * 必须走 `ctx.output.raw()` 而不是 `write(value, { text })`:后者在**全局 `--json`** 下仍会退化成
98
+ * JSON(`core/output.ts`:`useJson = globalOptions.json || options.json || !options.text`),
99
+ * 而本 skill 的文档一律带 `--json`。
100
+ */
101
+ export function rawStdoutOf(result) {
102
+ const data = result.data;
103
+ if (!data || typeof data !== 'object')
104
+ return undefined;
105
+ if (data.status !== 'BROWSER_FILL')
106
+ return undefined;
107
+ const markdown = data.finalMarkdown;
108
+ if (typeof markdown !== 'string' || !markdown.startsWith('<browsertool>'))
109
+ return undefined;
110
+ return markdown;
111
+ }
112
+ /**
113
+ * 把一次 operation 的结果打到 stdout —— **形态二选一**(判定见 `rawStdoutOf`)。
114
+ *
115
+ * 独立成函数并**导出**,是为了让用例直接锁住这条接线(与 `compactStdoutPaths` 同一理由:
116
+ * 回归要在这里红,而不是等到真机上模型拿到一份"既不是 JSON、也不是标签块"的东西才发现)。
117
+ */
118
+ export function printWorkflowResult(ctx, operation, result) {
119
+ const raw = rawStdoutOf(result);
120
+ if (raw !== undefined) {
121
+ // 小e:stdout 就是标签块本身 —— 不套信封、不进 `prepare()` 的超线落盘(这段本来就不长)。
122
+ ctx.output.raw(raw);
123
+ return;
124
+ }
125
+ ctx.output.write(successEnvelope(operation, result), {
126
+ json: true,
127
+ compactPaths: compactStdoutPaths(operation),
128
+ });
129
+ }
76
130
  async function executeAndPrint(ctx, operation, input) {
77
131
  try {
78
132
  const result = await executeWorkflowOperation(operation, input, {
@@ -80,7 +134,7 @@ async function executeAndPrint(ctx, operation, input) {
80
134
  host: createWorkflowHost(ctx),
81
135
  continuation: createWorkflowContinuationSigner(ctx),
82
136
  });
83
- ctx.output.write(successEnvelope(operation, result), { json: true });
137
+ printWorkflowResult(ctx, operation, result);
84
138
  }
85
139
  catch (error) {
86
140
  console.error(JSON.stringify(failureEnvelope(error), null, 2));
@@ -0,0 +1,63 @@
1
+ /**
2
+ * 流程状态(`flowstatus`)系统条件。
3
+ *
4
+ * ★ `flowstatus` 是**选项类**系统条件,服务端只认 `[{term, multiContent:[<代码>]}]`
5
+ * —— **不是** `[{content, term}]`。`content` 形态是给"文本类"条件(requestname /
6
+ * requestmark)用的;把取值塞进 `content`,服务端会**静默忽略**该条件
7
+ * ⇒ 按流程状态筛选恒不生效、退化成全量。
8
+ *
9
+ * 来源对照:V11.3 `e10_workflow.py:8519 flow_status_condition` 产出的就是
10
+ * `[{"term": "in", "multiContent": [...]}]`;V12.1 移植时退化成了 `[{content, term}]`
11
+ * (2026-09-28 用户实测预期结构为 `[{"term":"in","multiContent":["notFinish","finish"]}]`)。
12
+ *
13
+ * ★★ 取值口径(2026-09-28 用户裁定=方案 C):**只认四个选项代码,不做中文口语词识别**。
14
+ * 说明层(schema 描述 / 报错文案 / `workflow-query.md` 的筛选条件表)已经列出四个代码及其
15
+ * 含义,"用户口语 → 代码"的翻译由**模型**完成;CLI 只做代码的校验与纯归一,且:
16
+ * - 出现任何一个非代码取值 ⇒ **整体报错并停止**,不静默丢弃——丢掉一个取值就少一层筛选,
17
+ * 等于把结果静默放大到全量,与本项目"禁止静默丢条件"的纪律相悖;
18
+ * - 大小写不敏感(`Finish` → `finish`)属纯归一,不做任何语义猜测。
19
+ */
20
+ /** 服务端认可的流程状态选项(唯一定义处,说明文案由它派生,避免两处口径漂移)。 */
21
+ const FLOW_STATUS_OPTIONS = [
22
+ { code: 'finish', meaning: '已结束' },
23
+ { code: 'normalFinish', meaning: '正常结束' },
24
+ { code: 'forceFinish', meaning: '强制结束' },
25
+ { code: 'notFinish', meaning: '未结束·审批中' },
26
+ ];
27
+ /**
28
+ * 模型可见的取值说明(schema 描述与报错文案共用同一份,避免两处口径漂移)。
29
+ *
30
+ * ★ **代码在前、含义在后**(`finish(已结束)`):与本条契约"传的就是这个 key"一致,
31
+ * 也和 `workflow-query.md` 筛选条件表的写法逐字对齐(2026-09-28 用户要求统一)。
32
+ */
33
+ export const FLOW_STATUS_HINT = `${FLOW_STATUS_OPTIONS.map((item) => `${item.code}(${item.meaning})`).join('、')}`
34
+ + ';只接受上述四个代码、不接受中文,可逗号分隔多值';
35
+ /**
36
+ * `--flow-status` 取值 → `formDatas.flowstatus` 条件项。
37
+ *
38
+ * 返回 `null` 仅代表**输入为空**(调用方不设该条件)。取值非法一律通过 `invalid` 上报,
39
+ * 由调用方报错——**绝不静默丢弃条件**(丢弃会退化成全量查询)。
40
+ */
41
+ export function flowStatusCondition(value, term) {
42
+ const text = String(value ?? '').trim();
43
+ if (!text)
44
+ return null;
45
+ const byLowerCode = new Map(FLOW_STATUS_OPTIONS.map((item) => [item.code.toLowerCase(), item.code]));
46
+ const codes = [];
47
+ const invalid = [];
48
+ for (const partRaw of text.split(/[,,、]/u)) {
49
+ const part = partRaw.trim();
50
+ if (!part)
51
+ continue;
52
+ const code = byLowerCode.get(part.toLowerCase());
53
+ if (code)
54
+ codes.push(code);
55
+ else
56
+ invalid.push(part);
57
+ }
58
+ if (invalid.length || !codes.length) {
59
+ return { condition: [], invalid: invalid.length ? invalid : [text] };
60
+ }
61
+ const normalizedTerm = String(term ?? '').trim().toLowerCase() === 'notin' ? 'notin' : 'in';
62
+ return { condition: [{ term: normalizedTerm, multiContent: [...new Set(codes)] }], invalid: [] };
63
+ }