weaver-work-cli 0.1.24 → 0.1.26

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 (401) hide show
  1. package/README.md +30 -21
  2. package/dist/cmd/root.js +1 -0
  3. package/dist/core/output.js +53 -1
  4. package/dist/core/runtime-agent.js +19 -0
  5. package/dist/internal/e10/auth/commands.js +58 -23
  6. package/dist/internal/e10/auth/crypto.js +52 -12
  7. package/dist/internal/e10/auth/xiaoe.js +145 -53
  8. package/dist/internal/e10/context.js +5 -27
  9. package/dist/shortcuts/archive-oa/constants.js +66 -0
  10. package/dist/shortcuts/archive-oa/continuation.js +70 -0
  11. package/dist/shortcuts/archive-oa/errors.js +53 -0
  12. package/dist/shortcuts/archive-oa/host.js +157 -0
  13. package/dist/shortcuts/archive-oa/index.js +225 -0
  14. package/dist/shortcuts/archive-oa/manifest.js +62 -0
  15. package/dist/shortcuts/archive-oa/operations/borrow-car.js +159 -0
  16. package/dist/shortcuts/archive-oa/operations/borrow-url.js +108 -0
  17. package/dist/shortcuts/archive-oa/operations/confirm.js +48 -0
  18. package/dist/shortcuts/archive-oa/operations/contract.js +120 -0
  19. package/dist/shortcuts/archive-oa/operations/locate.js +50 -0
  20. package/dist/shortcuts/archive-oa/operations/registry.js +40 -0
  21. package/dist/shortcuts/archive-oa/operations/shared.js +181 -0
  22. package/dist/shortcuts/archive-oa/operations/types.js +45 -0
  23. package/dist/shortcuts/archive-oa/operations.js +13 -0
  24. package/dist/shortcuts/caizhilian/operations/handlers/fileops.js +67 -1
  25. package/dist/shortcuts/caizhilian/operations/handlers/setting-attach.js +198 -0
  26. package/dist/shortcuts/caizhilian/operations/shared.js +32 -0
  27. package/dist/shortcuts/caizhilian/operations/specs.js +15 -0
  28. package/dist/shortcuts/index.js +2 -0
  29. package/dist/shortcuts/invoice/host.js +2 -1
  30. package/dist/shortcuts/invoice/manifest.js +111 -0
  31. package/dist/shortcuts/invoice/operations/issuing-qys.js +361 -0
  32. package/dist/shortcuts/invoice/operations/issuing.js +5 -5
  33. package/dist/shortcuts/invoice/operations/registry.js +4 -0
  34. package/dist/shortcuts/workflow/endpoints.js +11 -0
  35. package/dist/shortcuts/workflow/host.js +2 -2
  36. package/dist/shortcuts/workflow/index.js +25 -1
  37. package/dist/shortcuts/workflow/operations/chatscene.js +270 -0
  38. package/dist/shortcuts/workflow/operations/form.js +2128 -244
  39. package/dist/shortcuts/workflow/operations/read.js +186 -41
  40. package/dist/shortcuts/workflow/operations/shared.js +25 -0
  41. package/dist/shortcuts/workflow/operations/sign-input.js +106 -0
  42. package/dist/shortcuts/workflow/operations/write.js +9 -1
  43. package/dist/shortcuts/workflow/stdout-compact.js +41 -0
  44. package/docs/archive-oa.md +79 -0
  45. package/docs/caizhilian.md +4 -3
  46. package/docs/e10-auth.md +13 -5
  47. package/node_modules/@napi-rs/keyring/LICENSE +21 -0
  48. package/node_modules/@napi-rs/keyring/README.md +19 -0
  49. package/node_modules/@napi-rs/keyring/index.d.ts +166 -0
  50. package/node_modules/@napi-rs/keyring/index.js +514 -0
  51. package/node_modules/@napi-rs/keyring/keytar.d.ts +53 -0
  52. package/node_modules/@napi-rs/keyring/keytar.js +26 -0
  53. package/node_modules/@napi-rs/keyring/package.json +125 -0
  54. package/node_modules/@napi-rs/keyring-darwin-arm64/README.md +3 -0
  55. package/node_modules/@napi-rs/keyring-darwin-arm64/keyring.darwin-arm64.node +0 -0
  56. package/node_modules/@napi-rs/keyring-darwin-arm64/package.json +32 -0
  57. package/node_modules/commander/LICENSE +22 -0
  58. package/node_modules/commander/Readme.md +1149 -0
  59. package/node_modules/commander/esm.mjs +16 -0
  60. package/node_modules/commander/index.js +24 -0
  61. package/node_modules/commander/lib/argument.js +149 -0
  62. package/node_modules/commander/lib/command.js +2662 -0
  63. package/node_modules/commander/lib/error.js +39 -0
  64. package/node_modules/commander/lib/help.js +709 -0
  65. package/node_modules/commander/lib/option.js +367 -0
  66. package/node_modules/commander/lib/suggestSimilar.js +101 -0
  67. package/node_modules/commander/package-support.json +16 -0
  68. package/node_modules/commander/package.json +82 -0
  69. package/node_modules/commander/typings/esm.d.mts +3 -0
  70. package/node_modules/commander/typings/index.d.ts +1045 -0
  71. package/package.json +5 -1
  72. package/skill-template/business-info.json +16 -0
  73. package/skill-template/domains/archive-oa.md +19 -0
  74. package/skill-template/domains/yepiaotong.md +2 -2
  75. package/skills/weaver-e10-archive-oa/SKILL.md +159 -0
  76. package/skills/weaver-e10-archive-oa/references/archive-locate.md +49 -0
  77. package/skills/weaver-e10-archive-oa/references/borrow-car.md +76 -0
  78. package/skills/weaver-e10-archive-oa/references/borrow-flow.md +53 -0
  79. package/skills/weaver-e10-archive-oa/references/contract-search.md +63 -0
  80. package/skills/weaver-e10-archive-oa/references/disabled-capabilities.md +29 -0
  81. package/skills/weaver-e10-archive-oa/references/qys-contract-search.md +47 -0
  82. package/skills/weaver-e10-archive-oa/references/source-manifest.json +400 -0
  83. package/skills/weaver-e10-builder/SKILL.md +303 -0
  84. package/skills/weaver-e10-builder/_catalog.md +94 -0
  85. package/skills/weaver-e10-builder/actionflows/CONTEXT.md +71 -0
  86. package/skills/weaver-e10-builder/actionflows/SKILL.md +176 -0
  87. package/skills/weaver-e10-builder/actionflows/docs/adr/0001-generated-actionflow-cleanup-identity.md +5 -0
  88. package/skills/weaver-e10-builder/actionflows/docs/adr/0002-preserve-existing-actionflow-on-update.md +36 -0
  89. package/skills/weaver-e10-builder/actionflows/references/components/calendar/MeetingCreate.md +19 -0
  90. package/skills/weaver-e10-builder/actionflows/references/components/calendar/ScheduleCreate.md +17 -0
  91. package/skills/weaver-e10-builder/actionflows/references/components/database/DMLExecute.md +38 -0
  92. package/skills/weaver-e10-builder/actionflows/references/components/document/AttachmentCopy.md +17 -0
  93. package/skills/weaver-e10-builder/actionflows/references/components/document/AttachmentMove.md +17 -0
  94. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentCopy.md +17 -0
  95. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentDelete.md +17 -0
  96. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentEdit.md +17 -0
  97. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentMove.md +17 -0
  98. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentPermissionChange.md +17 -0
  99. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentRenewal.md +17 -0
  100. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentRevert.md +17 -0
  101. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentSave.md +17 -0
  102. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentSubscription.md +17 -0
  103. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentSubscriptionApprove.md +17 -0
  104. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentSubscriptionSendBack.md +17 -0
  105. package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentSubscriptionWithdraw.md +17 -0
  106. package/skills/weaver-e10-builder/actionflows/references/components/document/FileFolderSave.md +17 -0
  107. package/skills/weaver-e10-builder/actionflows/references/components/document/GetAttachmentInfo.md +17 -0
  108. package/skills/weaver-e10-builder/actionflows/references/components/document/GetDocumentInfo.md +17 -0
  109. package/skills/weaver-e10-builder/actionflows/references/components/document/ModifyDocumentStatus.md +17 -0
  110. package/skills/weaver-e10-builder/actionflows/references/components/document/ReplaceAttachment.md +17 -0
  111. package/skills/weaver-e10-builder/actionflows/references/components/document/UpdatePrintNum.md +17 -0
  112. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/ActionEbAdd.md +100 -0
  113. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/ActionEbDelete.md +23 -0
  114. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/ActionEbRecover.md +17 -0
  115. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/ActionEbSaveVersion.md +17 -0
  116. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/ActionEbUpdate.md +67 -0
  117. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/DateTrigger.md +32 -0
  118. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/EbGetDataById.md +17 -0
  119. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/EnquiryForm.md +107 -0
  120. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/EventButton.md +33 -0
  121. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/EventFormData.md +19 -0
  122. package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/TimeBatchTrigger.md +19 -0
  123. package/skills/weaver-e10-builder/actionflows/references/components/http/Http.md +77 -0
  124. package/skills/weaver-e10-builder/actionflows/references/components/logic/Condition.md +23 -0
  125. package/skills/weaver-e10-builder/actionflows/references/components/logic/LogicFlowSet.md +17 -0
  126. package/skills/weaver-e10-builder/actionflows/references/components/logic/MultipleExecution.md +38 -0
  127. package/skills/weaver-e10-builder/actionflows/references/components/logic/Output.md +37 -0
  128. package/skills/weaver-e10-builder/actionflows/references/components/message/InnerMQSend.md +50 -0
  129. package/skills/weaver-e10-builder/actionflows/references/components/message/SendMessage.md +30 -0
  130. package/skills/weaver-e10-builder/actionflows/references/components/personnel/AlterPersonStatus.md +30 -0
  131. package/skills/weaver-e10-builder/actionflows/references/components/personnel/HrmEmployeeUpdate.md +34 -0
  132. package/skills/weaver-e10-builder/actionflows/references/components/personnel/PersonnelAlterType.md +38 -0
  133. package/skills/weaver-e10-builder/actionflows/references/components/personnel/PersonnelOnboarding.md +36 -0
  134. package/skills/weaver-e10-builder/actionflows/references/components/serverless/ServerlessAction.md +42 -0
  135. package/skills/weaver-e10-builder/actionflows/references/components/trigger/CustomTrigger.md +82 -0
  136. package/skills/weaver-e10-builder/actionflows/references/components/trigger/InnerMQListener.md +41 -0
  137. package/skills/weaver-e10-builder/actionflows/references/components/trigger/SimpleScheduler.md +19 -0
  138. package/skills/weaver-e10-builder/actionflows/references/components/trigger/WebHookTrigger.md +91 -0
  139. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveAddSign.md +17 -0
  140. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveAgreeRejectApply.md +17 -0
  141. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveCommit.md +17 -0
  142. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveConsulTurnTodo.md +17 -0
  143. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveCreate.md +17 -0
  144. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveDelete.md +19 -0
  145. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveDoCirculate.md +17 -0
  146. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveDoForward.md +17 -0
  147. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveDoTurnTodo.md +17 -0
  148. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveEntrust.md +19 -0
  149. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveIntervention.md +17 -0
  150. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveMandatoryArchiving.md +17 -0
  151. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveManualCC.md +17 -0
  152. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveRefuseRejectApply.md +17 -0
  153. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveRejectApply.md +17 -0
  154. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveSave.md +17 -0
  155. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveSendBack.md +17 -0
  156. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveShareEntry.md +17 -0
  157. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveTrigger.md +99 -0
  158. package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveWithdraw.md +17 -0
  159. package/skills/weaver-e10-builder/actionflows/references/components/workflow/WorkFlowDocEmpowerment.md +17 -0
  160. package/skills/weaver-e10-builder/actionflows/references/components/workflow/WorkflowToDoc.md +17 -0
  161. package/skills/weaver-e10-builder/actionflows/references/condition_rules.md +100 -0
  162. package/skills/weaver-e10-builder/actionflows/references/dynamic_capability_matrix.md +39 -0
  163. package/skills/weaver-e10-builder/actionflows/references/dynamic_resources.md +41 -0
  164. package/skills/weaver-e10-builder/actionflows/references/examples/enquiry-form-batch-insert-scene2.json +1043 -0
  165. package/skills/weaver-e10-builder/actionflows/references/function_rules.md +15 -0
  166. package/skills/weaver-e10-builder/actionflows/references/trigger_runtime_notes.md +53 -0
  167. package/skills/weaver-e10-builder/assets/dom-structure/Bar.json +341 -0
  168. package/skills/weaver-e10-builder/assets/dom-structure/BarStack.json +341 -0
  169. package/skills/weaver-e10-builder/assets/dom-structure/Bubble.json +323 -0
  170. package/skills/weaver-e10-builder/assets/dom-structure/Calendar.json +515 -0
  171. package/skills/weaver-e10-builder/assets/dom-structure/Circular.json +337 -0
  172. package/skills/weaver-e10-builder/assets/dom-structure/CollapsePanel.json +289 -0
  173. package/skills/weaver-e10-builder/assets/dom-structure/Comment.json +617 -0
  174. package/skills/weaver-e10-builder/assets/dom-structure/CountDown.json +755 -0
  175. package/skills/weaver-e10-builder/assets/dom-structure/DigitalPanel.json +191 -0
  176. package/skills/weaver-e10-builder/assets/dom-structure/EbButton.json +387 -0
  177. package/skills/weaver-e10-builder/assets/dom-structure/FastCreate.json +242 -0
  178. package/skills/weaver-e10-builder/assets/dom-structure/Gauge.json +282 -0
  179. package/skills/weaver-e10-builder/assets/dom-structure/HBar.json +336 -0
  180. package/skills/weaver-e10-builder/assets/dom-structure/HBarStack.json +337 -0
  181. package/skills/weaver-e10-builder/assets/dom-structure/Line.json +341 -0
  182. package/skills/weaver-e10-builder/assets/dom-structure/NList.json +712 -0
  183. package/skills/weaver-e10-builder/assets/dom-structure/NavBar.json +274 -0
  184. package/skills/weaver-e10-builder/assets/dom-structure/NavPanel.json +390 -0
  185. package/skills/weaver-e10-builder/assets/dom-structure/NewTab.json +606 -0
  186. package/skills/weaver-e10-builder/assets/dom-structure/Nightingale.json +336 -0
  187. package/skills/weaver-e10-builder/assets/dom-structure/PageHeader.json +205 -0
  188. package/skills/weaver-e10-builder/assets/dom-structure/Picture.json +209 -0
  189. package/skills/weaver-e10-builder/assets/dom-structure/Pie.json +338 -0
  190. package/skills/weaver-e10-builder/assets/dom-structure/ProgressChart.json +299 -0
  191. package/skills/weaver-e10-builder/assets/dom-structure/SearchGlobal.json +628 -0
  192. package/skills/weaver-e10-builder/assets/dom-structure/Slide.json +489 -0
  193. package/skills/weaver-e10-builder/assets/dom-structure/Treemap.json +324 -0
  194. package/skills/weaver-e10-builder/assets/factory/chart-dimensions.json +536 -0
  195. package/skills/weaver-e10-builder/assets/factory/example-btn-progress-collapse-configured.json +2515 -0
  196. package/skills/weaver-e10-builder/assets/factory/example-configured-2.json +13805 -0
  197. package/skills/weaver-e10-builder/assets/factory/example-configured.json +6735 -0
  198. package/skills/weaver-e10-builder/assets/factory/factory-bar-stack.json +326 -0
  199. package/skills/weaver-e10-builder/assets/factory/factory-bar.json +222 -0
  200. package/skills/weaver-e10-builder/assets/factory/factory-bubble.json +322 -0
  201. package/skills/weaver-e10-builder/assets/factory/factory-calendar.json +325 -0
  202. package/skills/weaver-e10-builder/assets/factory/factory-circular.json +320 -0
  203. package/skills/weaver-e10-builder/assets/factory/factory-collapse-panel.json +132 -0
  204. package/skills/weaver-e10-builder/assets/factory/factory-comment.json +388 -0
  205. package/skills/weaver-e10-builder/assets/factory/factory-count-down.json +198 -0
  206. package/skills/weaver-e10-builder/assets/factory/factory-digital-panel.json +108 -0
  207. package/skills/weaver-e10-builder/assets/factory/factory-eb-button.json +150 -0
  208. package/skills/weaver-e10-builder/assets/factory/factory-fast-create.json +62 -0
  209. package/skills/weaver-e10-builder/assets/factory/factory-gauge.json +312 -0
  210. package/skills/weaver-e10-builder/assets/factory/factory-h-bar-stack.json +328 -0
  211. package/skills/weaver-e10-builder/assets/factory/factory-h-bar.json +326 -0
  212. package/skills/weaver-e10-builder/assets/factory/factory-line.json +212 -0
  213. package/skills/weaver-e10-builder/assets/factory/factory-nav-bar.json +167 -0
  214. package/skills/weaver-e10-builder/assets/factory/factory-nav-menu.json +144 -0
  215. package/skills/weaver-e10-builder/assets/factory/factory-nav-panel.json +338 -0
  216. package/skills/weaver-e10-builder/assets/factory/factory-new-tab.json +163 -0
  217. package/skills/weaver-e10-builder/assets/factory/factory-nightingale.json +312 -0
  218. package/skills/weaver-e10-builder/assets/factory/factory-nlist.json +112 -0
  219. package/skills/weaver-e10-builder/assets/factory/factory-page-header.json +171 -0
  220. package/skills/weaver-e10-builder/assets/factory/factory-picture.json +169 -0
  221. package/skills/weaver-e10-builder/assets/factory/factory-pie.json +212 -0
  222. package/skills/weaver-e10-builder/assets/factory/factory-progress-chart.json +162 -0
  223. package/skills/weaver-e10-builder/assets/factory/factory-search-global.json +104 -0
  224. package/skills/weaver-e10-builder/assets/factory/factory-slide.json +164 -0
  225. package/skills/weaver-e10-builder/assets/factory/factory-treemap.json +322 -0
  226. package/skills/weaver-e10-builder/assets/icons.db +0 -0
  227. package/skills/weaver-e10-builder/assets/sample/.claude/settings.local.json +8 -0
  228. package/skills/weaver-e10-builder/assets/sample/api/formApi.js +510 -0
  229. package/skills/weaver-e10-builder/assets/sample/config/config.js +0 -0
  230. package/skills/weaver-e10-builder/assets/sample/config/configLoad.js +0 -0
  231. package/skills/weaver-e10-builder/assets/sample/config/configLoad_default.js +0 -0
  232. package/skills/weaver-e10-builder/assets/sample/config/config_default.js +0 -0
  233. package/skills/weaver-e10-builder/assets/sample/entry.js +22 -0
  234. package/skills/weaver-e10-builder/assets/sample/eslint.config.cjs +48 -0
  235. package/skills/weaver-e10-builder/assets/sample/memo.md +0 -0
  236. package/skills/weaver-e10-builder/assets/sample/readme.js +8 -0
  237. package/skills/weaver-e10-builder/references/app/guide-app-publish.md +92 -0
  238. package/skills/weaver-e10-builder/references/auth/guide-auth.md +88 -0
  239. package/skills/weaver-e10-builder/references/coding/guide-edit-backfill.md +189 -0
  240. package/skills/weaver-e10-builder/references/coding/guide-form-crud.md +262 -0
  241. package/skills/weaver-e10-builder/references/coding/guide-page-code.md +244 -0
  242. package/skills/weaver-e10-builder/references/coding/guide-page-export.md +119 -0
  243. package/skills/weaver-e10-builder/references/coding/ref-compile-rules.md +130 -0
  244. package/skills/weaver-e10-builder/references/common/guide-plan-template.md +164 -0
  245. package/skills/weaver-e10-builder/references/common/map.md +153 -0
  246. package/skills/weaver-e10-builder/references/common/ref-cli-commands.md +635 -0
  247. package/skills/weaver-e10-builder/references/components/@weapp-Button.md +104 -0
  248. package/skills/weaver-e10-builder/references/components/base-Badge.md +100 -0
  249. package/skills/weaver-e10-builder/references/components/base-Dialog.md +358 -0
  250. package/skills/weaver-e10-builder/references/components/base-Empty.md +58 -0
  251. package/skills/weaver-e10-builder/references/components/base-Tag.md +112 -0
  252. package/skills/weaver-e10-builder/references/components/display-Alert.md +64 -0
  253. package/skills/weaver-e10-builder/references/components/display-Avatar.md +150 -0
  254. package/skills/weaver-e10-builder/references/components/display-Calendar.md +263 -0
  255. package/skills/weaver-e10-builder/references/components/display-Carousel.md +115 -0
  256. package/skills/weaver-e10-builder/references/components/display-Collapse.md +299 -0
  257. package/skills/weaver-e10-builder/references/components/display-FilePreview.md +49 -0
  258. package/skills/weaver-e10-builder/references/components/display-Icon.md +66 -0
  259. package/skills/weaver-e10-builder/references/components/display-List.md +320 -0
  260. package/skills/weaver-e10-builder/references/components/display-Pagination.md +41 -0
  261. package/skills/weaver-e10-builder/references/components/display-Spin.md +34 -0
  262. package/skills/weaver-e10-builder/references/components/display-Steps.md +89 -0
  263. package/skills/weaver-e10-builder/references/components/display-Table.md +160 -0
  264. package/skills/weaver-e10-builder/references/components/display-Title.md +117 -0
  265. package/skills/weaver-e10-builder/references/components/form-Checkbox.md +161 -0
  266. package/skills/weaver-e10-builder/references/components/form-DepartmentBrowser-api.md +52 -0
  267. package/skills/weaver-e10-builder/references/components/form-EmployeeBrowser-api.md +51 -0
  268. package/skills/weaver-e10-builder/references/components/form-EmployeeBrowser.md +51 -0
  269. package/skills/weaver-e10-builder/references/components/form-Input.md +123 -0
  270. package/skills/weaver-e10-builder/references/components/form-Radio.md +145 -0
  271. package/skills/weaver-e10-builder/references/components/form-Select.md +191 -0
  272. package/skills/weaver-e10-builder/references/components/form-Switch.md +46 -0
  273. package/skills/weaver-e10-builder/references/components/form-Upload.md +53 -0
  274. package/skills/weaver-e10-builder/references/components/generic-Echarts.md +102 -0
  275. package/skills/weaver-e10-builder/references/ebuilder-designer/guide-designer-components.md +130 -0
  276. package/skills/weaver-e10-builder/references/ebuilder-designer/guide-designer-css.md +127 -0
  277. package/skills/weaver-e10-builder/references/ebuilder-designer/guide-designer-factory.md +460 -0
  278. package/skills/weaver-e10-builder/references/ebuilder-designer/guide-designer-version.md +111 -0
  279. package/skills/weaver-e10-builder/references/ebuilder-designer/guide-designer.md +288 -0
  280. package/skills/weaver-e10-builder/references/esb-interface/guide-import.md +34 -0
  281. package/skills/weaver-e10-builder/references/form/guide-create-form.md +248 -0
  282. package/skills/weaver-e10-builder/references/form/guide-ebuilder-filter.md +73 -0
  283. package/skills/weaver-e10-builder/references/form/guide-ebuilder-scope.md +82 -0
  284. package/skills/weaver-e10-builder/references/form/guide-field-linkage.md +123 -0
  285. package/skills/weaver-e10-builder/references/form/guide-form-archive-permission.md +175 -0
  286. package/skills/weaver-e10-builder/references/form/guide-form-association.md +124 -0
  287. package/skills/weaver-e10-builder/references/form/guide-form-button.md +169 -0
  288. package/skills/weaver-e10-builder/references/form/guide-form-data.md +78 -0
  289. package/skills/weaver-e10-builder/references/form/guide-form-formula-functions.md +343 -0
  290. package/skills/weaver-e10-builder/references/form/guide-form-layout-incremental.md +90 -0
  291. package/skills/weaver-e10-builder/references/form/guide-form-layout-planning.md +68 -0
  292. package/skills/weaver-e10-builder/references/form/guide-form-linkage.md +269 -0
  293. package/skills/weaver-e10-builder/references/form/guide-form-message.md +74 -0
  294. package/skills/weaver-e10-builder/references/form/guide-form-physical-table.md +146 -0
  295. package/skills/weaver-e10-builder/references/form/guide-form-serial-mark.md +47 -0
  296. package/skills/weaver-e10-builder/references/form/guide-form-sub-detail.md +82 -0
  297. package/skills/weaver-e10-builder/references/form/guide-form-view-permission.md +38 -0
  298. package/skills/weaver-e10-builder/references/form/guide-form-view.md +371 -0
  299. package/skills/weaver-e10-builder/references/form/guide-formula-linkage.md +281 -0
  300. package/skills/weaver-e10-builder/references/form/guide-list-columns.md +52 -0
  301. package/skills/weaver-e10-builder/references/form/guide-list-custom-text.md +52 -0
  302. package/skills/weaver-e10-builder/references/form/guide-list-stats.md +136 -0
  303. package/skills/weaver-e10-builder/references/form/guide-virtual-form.md +156 -0
  304. package/skills/weaver-e10-builder/references/form/ref-form-fields.md +293 -0
  305. package/skills/weaver-e10-builder/references/form/style-templates.md +97 -0
  306. package/skills/weaver-e10-builder/references/hrm/guide-matrix.md +245 -0
  307. package/skills/weaver-e10-builder/references/hrm/guide-org-employee.md +155 -0
  308. package/skills/weaver-e10-builder/references/menu/system-menus.md +75 -0
  309. package/skills/weaver-e10-builder/references/report/add-dataset-registration-guide.md +139 -0
  310. package/skills/weaver-e10-builder/references/report/ai-report-workflow.md +412 -0
  311. package/skills/weaver-e10-builder/references/report/api-report-build-fast-path.md +275 -0
  312. package/skills/weaver-e10-builder/references/report/app-datasource-lookup-guide.md +230 -0
  313. package/skills/weaver-e10-builder/references/report/cell-config-echo-guide.md +163 -0
  314. package/skills/weaver-e10-builder/references/report/cell-transform-guide.md +147 -0
  315. package/skills/weaver-e10-builder/references/report/condition-format-guide.md +140 -0
  316. package/skills/weaver-e10-builder/references/report/cross-dataset-filter-guide.md +304 -0
  317. package/skills/weaver-e10-builder/references/report/dataset-query-filter-guide.md +235 -0
  318. package/skills/weaver-e10-builder/references/report/dataset-sidebar-ops-guide.md +280 -0
  319. package/skills/weaver-e10-builder/references/report/dataset-table-field-contract-guide.md +339 -0
  320. package/skills/weaver-e10-builder/references/report/datasource-metadata-guide.md +365 -0
  321. package/skills/weaver-e10-builder/references/report/datasource-selection-and-parent-filter-guide.md +148 -0
  322. package/skills/weaver-e10-builder/references/report/date-range-query-reference.md +102 -0
  323. package/skills/weaver-e10-builder/references/report/default-header-style-guide.md +70 -0
  324. package/skills/weaver-e10-builder/references/report/designer-blank-prevention-guide.md +111 -0
  325. package/skills/weaver-e10-builder/references/report/event-hreflink-guide.md +184 -0
  326. package/skills/weaver-e10-builder/references/report/field-bind-exact-match-guide.md +208 -0
  327. package/skills/weaver-e10-builder/references/report/formula-cell-api-guide.md +258 -0
  328. package/skills/weaver-e10-builder/references/report/guide-report-build.md +131 -0
  329. package/skills/weaver-e10-builder/references/report/guide-report-modify.md +100 -0
  330. package/skills/weaver-e10-builder/references/report/guide-report-multisource.md +143 -0
  331. package/skills/weaver-e10-builder/references/report/guide-report-query.md +98 -0
  332. package/skills/weaver-e10-builder/references/report/hidden-row-and-header-merge-guide.md +100 -0
  333. package/skills/weaver-e10-builder/references/report/layout-showlocation-freeze-guide.md +167 -0
  334. package/skills/weaver-e10-builder/references/report/preaggregate-auto-disable-guide.md +107 -0
  335. package/skills/weaver-e10-builder/references/report/query-condition-api-guide.md +890 -0
  336. package/skills/weaver-e10-builder/references/report/ref-report-commands.md +122 -0
  337. package/skills/weaver-e10-builder/references/report/ref-report-pitfalls.md +226 -0
  338. package/skills/weaver-e10-builder/references/report/report-baseinfo-defaults-guide.md +117 -0
  339. package/skills/weaver-e10-builder/references/report/report-building-guide.md +511 -0
  340. package/skills/weaver-e10-builder/references/report/report-config-schema.md +445 -0
  341. package/skills/weaver-e10-builder/references/report/report-create-modes-guide.md +182 -0
  342. package/skills/weaver-e10-builder/references/report/report-data-model.md +447 -0
  343. package/skills/weaver-e10-builder/references/report/report-delivery-contract.md +101 -0
  344. package/skills/weaver-e10-builder/references/report/report-designer-feature-map.md +500 -0
  345. package/skills/weaver-e10-builder/references/report/report-internal-error-guide.md +78 -0
  346. package/skills/weaver-e10-builder/references/report/report-knowledge-base.md +389 -0
  347. package/skills/weaver-e10-builder/references/report/report-lifecycle-api-guide.md +392 -0
  348. package/skills/weaver-e10-builder/references/report/report-list-page-ops-guide.md +191 -0
  349. package/skills/weaver-e10-builder/references/report/report-permission-guide.md +365 -0
  350. package/skills/weaver-e10-builder/references/report/report-requirement-analysis-template.md +202 -0
  351. package/skills/weaver-e10-builder/references/report/report-self-check-guide.md +164 -0
  352. package/skills/weaver-e10-builder/references/report/safe-partial-save-guide.md +151 -0
  353. package/skills/weaver-e10-builder/references/report/snowflake-id-precision-guide.md +84 -0
  354. package/skills/weaver-e10-builder/references/report/spec-build-schema.md +294 -0
  355. package/skills/weaver-e10-builder/references/report/targeted-fix-guide.md +97 -0
  356. package/skills/weaver-e10-builder/references/report/user-request-scope-only-guide.md +82 -0
  357. package/skills/weaver-e10-builder/references/workflow/guide-function-management.md +154 -0
  358. package/skills/weaver-e10-builder/references/workflow/guide-opinion-settings.md +126 -0
  359. package/skills/weaver-e10-builder/references/workflow/guide-workflow-action.md +174 -0
  360. package/skills/weaver-e10-builder/references/workflow/guide-workflow-auth-resp.md +224 -0
  361. package/skills/weaver-e10-builder/references/workflow/guide-workflow-condition.md +447 -0
  362. package/skills/weaver-e10-builder/references/workflow/guide-workflow-node-layout.md +181 -0
  363. package/skills/weaver-e10-builder/references/workflow/guide-workflow-odoc-setting.md +248 -0
  364. package/skills/weaver-e10-builder/references/workflow/guide-workflow-odoc.md +68 -0
  365. package/skills/weaver-e10-builder/references/workflow/guide-workflow.md +527 -0
  366. package/skills/weaver-e10-builder/references/workflow/operator-matrix.md +76 -0
  367. package/skills/weaver-e10-caizhilian/SKILL.md +43 -16
  368. package/skills/weaver-e10-caizhilian/references/agent-entry.md +7 -3
  369. package/skills/weaver-e10-caizhilian/references/collaboration.md +5 -3
  370. package/skills/weaver-e10-caizhilian/references/document.md +33 -11
  371. package/skills/weaver-e10-caizhilian/references/file-collection.md +4 -3
  372. package/skills/weaver-e10-caizhilian/references/file-upload.md +2 -3
  373. package/skills/weaver-e10-caizhilian/references/files.md +23 -2
  374. package/skills/weaver-e10-caizhilian/references/folder.md +48 -16
  375. package/skills/weaver-e10-caizhilian/references/setting-attach.md +61 -42
  376. package/skills/weaver-e10-caizhilian/references/setting-backup.md +13 -51
  377. package/skills/weaver-e10-caizhilian/references/setting-encrypt.md +20 -51
  378. package/skills/weaver-e10-caizhilian/references/setting-storage.md +82 -147
  379. package/skills/weaver-e10-caizhilian/references/source-manifest.json +99 -1
  380. package/skills/weaver-e10-caizhilian/references/withheld.md +20 -44
  381. package/skills/weaver-e10-shared/SKILL.md +24 -18
  382. package/skills/weaver-e10-shared/references/e10-auth-and-session.md +16 -15
  383. package/skills/weaver-e10-shared/references/non-interactive-environment.md +10 -10
  384. package/skills/weaver-e10-workflow/SKILL.md +23 -44
  385. package/skills/weaver-e10-workflow/references/source-manifest.json +40 -25
  386. package/skills/weaver-e10-workflow/references/workflow-create.md +278 -85
  387. package/skills/weaver-e10-workflow/references/workflow-edit.md +1 -1
  388. package/skills/weaver-e10-workflow/references/workflow-memory.md +1 -4
  389. package/skills/weaver-e10-workflow/references/workflow-query.md +2 -2
  390. package/skills/weaver-e10-yepiaotong/SKILL.md +10 -7
  391. package/skills/weaver-e10-yepiaotong/references/invoice-issuing-examples.md +49 -1
  392. package/skills/weaver-e10-yepiaotong/references/invoice-issuing-qys-ledger.md +66 -0
  393. package/skills/weaver-e10-yepiaotong/references/invoice-reim.md +59 -36
  394. package/skills/weaver-e10-yepiaotong/references/reim-api-reference.md +54 -509
  395. package/skills/weaver-e10-yepiaotong/references/reim-examples.md +182 -345
  396. package/skills/weaver-e10-yepiaotong/references/reim-expense-subject-rules.md +4 -5
  397. package/skills/weaver-e10-yepiaotong/references/reim-form-fill-rules.md +153 -345
  398. package/skills/weaver-e10-yepiaotong/references/reim-phone-subsidy-rules.md +5 -5
  399. package/skills/weaver-e10-yepiaotong/references/reim-workflow.md +182 -154
  400. package/skills/weaver-e10-yepiaotong/references/source-manifest.json +96 -0
  401. package/skills/weaver-e10-yepiaotong/references/reim-fast-path.md +0 -119
@@ -1478,6 +1478,25 @@ async function enforceSearchStdoutBudget(result, env, fileName) {
1478
1478
  };
1479
1479
  }
1480
1480
  // ---------------------------------------------------------------------------
1481
+ // 命令耗时(`durationMs`)
1482
+ // ---------------------------------------------------------------------------
1483
+ /**
1484
+ * 给 envelope 的 `data` 顶层补一个 `durationMs`(整数毫秒)。
1485
+ *
1486
+ * 口径与 `createForm` 的 `durationMs` **完全一致**(2026-10-19 用户裁定把这条命令也纳入):
1487
+ * 起点 = 命令 handler 入口(含会话解析、取数、落盘等全部动作),终点 = 返回之前;
1488
+ * 放在 `data` 顶层而不是信封 `meta`,这样「超线落盘」那一档 `data` 只剩一句提示时耗时依然在。
1489
+ *
1490
+ * 只在 `workflow.search` / `workflow.memoryPrompt` 两条命令上接线(用户明确「其他命令暂时不动」)。
1491
+ * `data` 不是普通对象(数组/字符串/空)时原样返回,绝不因为加耗时而改变返回形态。
1492
+ */
1493
+ function stampDurationMs(envelope, startedAt) {
1494
+ const data = envelope?.data;
1495
+ if (!data || typeof data !== 'object' || Array.isArray(data))
1496
+ return envelope;
1497
+ return { ...envelope, data: { ...data, durationMs: Date.now() - startedAt } };
1498
+ }
1499
+ // ---------------------------------------------------------------------------
1481
1500
  // 序号定位(查询类写索引;查看类读索引)
1482
1501
  // ---------------------------------------------------------------------------
1483
1502
  async function saveListIndex(env, normalized) {
@@ -1566,6 +1585,8 @@ const workflowSearch = {
1566
1585
  queryJson: { type: 'object', description: '已生成的完整查询 JSON(跳过 build-query)' },
1567
1586
  }),
1568
1587
  handler: async (args, env) => {
1588
+ // 耗时起点:整条命令的入口(含 plan 门禁的版本探测、取数、落盘)。
1589
+ const startedAt = Date.now();
1569
1590
  const plan = args.planJson;
1570
1591
  if (plan && typeof plan === 'object') {
1571
1592
  // plan 批量编排仅智能分组模式支持(来源:Python cmd_workflow_search_plan 首行的
@@ -1578,7 +1599,7 @@ const workflowSearch = {
1578
1599
  throw workflowValidationError('plan_requires_smart_mode', `plan 批量编排模式仅支持智能分组模式(OA ≥ ${formatOaVersion(SMART_GROUPING_MIN_OA_VERSION)});低版本请改用单条 workflow.search`, { retryAllowed: false });
1579
1600
  }
1580
1601
  // 顶层 pageSize 即 plan 的展示窗口 page_cap(来源:Python cmd_workflow_search_plan 的 page_cap)
1581
- return executePlanSearch(env, plan, asInt(args.pageSize) ?? 10);
1602
+ return stampDurationMs(await executePlanSearch(env, plan, asInt(args.pageSize) ?? 10), startedAt);
1582
1603
  }
1583
1604
  const category = (asString(args.category) || 'todo');
1584
1605
  const searchMode = await resolveSearchMode(env);
@@ -1588,7 +1609,7 @@ const workflowSearch = {
1588
1609
  // grouping_active 分支):未显式指定子分类、非 total-only、非批量取数时按「待处理/超时/紧急」
1589
1610
  // 分组取数并输出分组统计。smart 模式不做 CLI 侧分组(分组由模型按 countDetails 规划)。
1590
1611
  if (searchMode === 'legacy' && category === 'todo' && !batchType && !totalOnly && !hasExplicitTab(args)) {
1591
- return executeLegacyGroupedTodoSearch(env, args);
1612
+ return stampDurationMs(await executeLegacyGroupedTodoSearch(env, args), startedAt);
1592
1613
  }
1593
1614
  const { query, tabid } = await buildSearchQuery(env, { ...args, searchMode }, 'list');
1594
1615
  const prefix = ENDPOINT_PREFIX[category];
@@ -1652,13 +1673,13 @@ const workflowSearch = {
1652
1673
  }
1653
1674
  }
1654
1675
  if (totalOnly) {
1655
- return workflowSuccess('workflow.search', {
1676
+ return stampDurationMs(workflowSuccess('workflow.search', {
1656
1677
  type: 'workflowSearch',
1657
1678
  category,
1658
1679
  categoryName: CATEGORY_NAMES[category],
1659
1680
  total,
1660
1681
  finalMarkdown: buildSearchFinalMarkdown(null, probes, total, category, true, searchMode === 'smart', waitReadTotal),
1661
- });
1682
+ }), startedAt);
1662
1683
  }
1663
1684
  // 卡片摘要行只在 **legacy(低版本模式)** 生成——契约见 references/workflow-query.md
1664
1685
  // 「执行模式与返回形态」的「卡片摘要行」一行(低版本=标题/摘要/辅助三行;智能分组=标题/辅助
@@ -1674,7 +1695,7 @@ const workflowSearch = {
1674
1695
  await enrichWorkflowCardSummaries(env, normalized, asInt(args.pageSize) ?? normalized.pageSize);
1675
1696
  }
1676
1697
  const index = await saveListIndex(env, normalized);
1677
- return workflowSuccess('workflow.search', await enforceSearchStdoutBudget({
1698
+ return stampDurationMs(workflowSuccess('workflow.search', await enforceSearchStdoutBudget({
1678
1699
  type: 'workflowSearch',
1679
1700
  category,
1680
1701
  categoryName: CATEGORY_NAMES[category],
@@ -1688,7 +1709,7 @@ const workflowSearch = {
1688
1709
  finalMarkdown: buildSearchFinalMarkdown(normalized, probes, total, category, false, searchMode === 'smart', waitReadTotal, withCardSummaries),
1689
1710
  queryId: index.queryId,
1690
1711
  sessionMap: { queryId: index.queryId, itemCount: normalized.items.length },
1691
- }, env, { json: 'last_search.json', md: 'last_search.md' }));
1712
+ }, env, { json: 'last_search.json', md: 'last_search.md' })), startedAt);
1692
1713
  },
1693
1714
  };
1694
1715
  // ---------------------------------------------------------------------------
@@ -4815,6 +4836,8 @@ const workflowMemoryPrompt = {
4815
4836
  dynamicContext: { type: 'object', description: '动态上下文参数(可选,合并进 dynamicContextParams)' },
4816
4837
  }),
4817
4838
  handler: async (args, env) => {
4839
+ // 耗时起点:整条命令的入口(含记忆接口那一趟与会话解析)。
4840
+ const startedAt = Date.now();
4818
4841
  // 记忆接口契约(来源:Python memory_chat_params):
4819
4842
  // { appid: <记忆应用 ID>, dynamicContextParams: { workflowId?, ...额外上下文 } }
4820
4843
  // 缺 appid 时接口判为无效应用,直接返回空 promptText(available=false)——
@@ -4897,6 +4920,8 @@ const workflowMemoryPrompt = {
4897
4920
  if (!hasOaContext) {
4898
4921
  result.oaContextMissingReason = '当前 E10 会话中未包含 OA 版本与用户身份信息。请先运行 weaver-work-cli auth status 确认登录态;若会话确已失效,请用 weaver-work-cli auth login --base-url <域名> --agent_type <当前智能体名称> 重新登录后重试。';
4899
4922
  }
4923
+ // 命令耗时(毫秒):与 createForm / workflow.search 同口径,`data` 顶层。
4924
+ result.durationMs = Date.now() - startedAt;
4900
4925
  return workflowSuccess('workflow.memoryPrompt', result, {
4901
4926
  oaContextMissing: !hasOaContext,
4902
4927
  });
@@ -4961,6 +4986,13 @@ function isEmptyRawFieldValue(value) {
4961
4986
  *
4962
4987
  * 与 `detailFormFieldValue` 同契约、同候选顺序,唯一区别是**不提前串化**——后者服务详情面板
4963
4988
  * (只需要可读文本),前者服务历史参考值(还需要 `id` 才能拼出 `名称(id)`)。两处必须同步修改。
4989
+ *
4990
+ * ★ 2026-10-14 补齐 `dataText` 候选(此前只存在于 `detailFormFieldValue`,两边口径**并不一致**):
4991
+ * `TextArea` 类字段(真机 `报销事由`)的值在 detail 响应里是 `dataText: {content/richContent/…}`,
4992
+ * 只有详情面板分支认得它 ⇒ 历史参考值恒缺这一类字段(真机实证:同一条历史流程,
4993
+ * 详情面板解出 50 个字段、历史取值只有 49 个,差的正好是唯一的必填 `TextArea` 字段
4994
+ * `报销事由`,其值 `2026-08…`)。这里返回**已抽出的展示文本**(与详情面板同口径),
4995
+ * 调用方的 `formatHistoryFieldValue` 仍会按字段类型二次格式化。
4964
4996
  */
4965
4997
  function detailFormFieldRawValue(obj, formField) {
4966
4998
  const dataKey = pickText(formField, 'dataKey', 'fieldKey', 'key');
@@ -4978,6 +5010,12 @@ function detailFormFieldRawValue(obj, formField) {
4978
5010
  }
4979
5011
  if (Array.isArray(obj?.dataOptions) && obj.dataOptions.length)
4980
5012
  return obj.dataOptions;
5013
+ const dataText = obj?.dataText;
5014
+ if (dataText && typeof dataText === 'object') {
5015
+ const text = stringifyDetailDataText(dataText);
5016
+ if (text)
5017
+ return text;
5018
+ }
4981
5019
  for (const key of ['showValue', 'displayValue', 'fieldValue', 'value', 'content', 'text']) {
4982
5020
  if (obj && typeof obj === 'object' && key in obj) {
4983
5021
  const value = obj[key];
@@ -5096,32 +5134,17 @@ function formatHistoryFieldValue(raw, field) {
5096
5134
  return stringifyDetailValue(raw);
5097
5135
  }
5098
5136
  /**
5099
- * 取「历史流程可参考字段值」。返回 `null` 表示没有可参考的历史数据。
5137
+ * 历史取数的**前半段**:只发那一次列表请求。
5100
5138
  *
5101
- * - `fields`:当前表单布局里的字段清单(`context.fields`,用来判断字段是不是浏览按钮/选项类,
5102
- * 并在 `allFormFields` 档收口缓存范围——只有本表单的字段 id 会被保留)
5103
- * - `targets`:本次要取值的字段(`{id,name}` 或 `missingFields` 同形;`systemField` 项会被忽略)
5104
- * - `options.allFormFields`:见 `HistoryRequestDataOptions`
5139
+ * 与 `buildHistoryRequestData` 拆开的原因(P2 提速,2026-10-13):这一步**只依赖 `workflowId`**,
5140
+ * 不需要任何表单字段 ⇒ 可以和 `loadBaseParam` / `loadFrameParam` / `loadMinorInfo` / `getFormLayout`
5141
+ * 一起**并发发起**,不再排在这些载入之后的串行尾巴上(真机该请求约 1–2 s,落在关键路径上纯亏)。
5105
5142
  *
5106
- * 只保留**至少命中 1 个可参考字段值**的历史流程;系统字段(流程标题/紧急程度等)不参与。
5143
+ * 失败口径与整体一致:一律降级为 `null`(`rethrowAuthOrNetworkError` 仍会把认证/网络类错误抛出去,
5144
+ * 由调用方决定;调用方若走"预取 + 复用"的形态,必须在预取处 `.catch(() => null)` 兜住,
5145
+ * 避免出现无人 `await` 的未处理拒绝——真正需要暴露的认证错误由同批的载入请求抛出,不会因此被吞掉)。
5107
5146
  */
5108
- export async function buildHistoryRequestData(env, fields, targets, options = {}) {
5109
- const targetList = toArray(targets)
5110
- .filter((item) => !item?.systemField && String(item?.id ?? '').trim())
5111
- .map((item) => ({ id: String(item.id).trim(), name: String(item.name ?? item.id) }));
5112
- // 普通档必须真的有字段要取;缓存档允许 targets 为空(表单本身没有静态必填时,
5113
- // 缓存仍要建——条件必填是在 createRequest 阶段才现身的,那时已经没有联网取数的机会了)。
5114
- if (!targetList.length && !options.allFormFields)
5115
- return null;
5116
- const fieldMeta = new Map();
5117
- for (const field of toArray(fields))
5118
- fieldMeta.set(String(field?.id ?? ''), field);
5119
- // 取值顺序 = 「本表单布局顺序」(缓存档)或 targets 顺序(普通档)。
5120
- // 缓存档用布局顺序是为了结果稳定可 diff;但只保留本表单的字段 id,避免把别张表单的字段带进来。
5121
- const orderedIds = options.allFormFields
5122
- ? [...fieldMeta.keys()]
5123
- : targetList.map((t) => t.id);
5124
- const nameOf = new Map(targetList.map((t) => [t.id, t.name]));
5147
+ export async function fetchHistoryListSnapshot(env, options = {}) {
5125
5148
  try {
5126
5149
  const now = new Date();
5127
5150
  const start = new Date(now.getTime() - HISTORY_LOOKBACK_DAYS * 24 * 60 * 60 * 1000);
@@ -5160,6 +5183,122 @@ export async function buildHistoryRequestData(env, fields, targets, options = {}
5160
5183
  const requestIds = items.map((item) => String(item?.requestId ?? '').trim()).filter(Boolean);
5161
5184
  if (!requestIds.length)
5162
5185
  return null;
5186
+ return { items, requestIds };
5187
+ }
5188
+ catch (error) {
5189
+ rethrowAuthOrNetworkError(error);
5190
+ return null;
5191
+ }
5192
+ }
5193
+ /**
5194
+ * 「多候选里按用户近一年的发起记录消歧」——`createForm` 澄清前的最后一次尝试。
5195
+ *
5196
+ * 场景(2026-10-20 用户裁定):`workflow` 只给了名称、**多命中又没有全名精确匹配**,本来要返回
5197
+ * 多候选澄清。但用户往往只发起过其中之一 ⇒ 用「我发起的」**工作流树**把候选里他真发起过的捞出来:
5198
+ * 只剩一个就直接用它,不必再问一遍;否则照旧澄清。
5199
+ *
5200
+ * 请求 = `getMineListData` 的 body **去掉分页**(`customDisplayPage`),外加一个 `workflowid`
5201
+ * 条件把范围**限定在待澄清候选上**("涉及这次要澄清的那些工作流的流程")。`workflowid` 属
5202
+ * 浏览按钮类条件,**只认 `browserDatas`**——`multiContent` 会被服务端静默忽略(2026-09-29 实测)。
5203
+ *
5204
+ * 判据(用户逐字给定):`data.data` 恰一个根、该根 `children` 恰一个子 ⇒ 唯一。子节点 id 形如
5205
+ * `wf_<workflowId>`,去掉 `wf_` 即工作流 ID。
5206
+ *
5207
+ * 返回 `null` 的**所有**情形(候选不足 2 个 / 无数据 / 多个根 / 单个根多个子 / 命中项不在候选内 /
5208
+ * 接口失败或返回异常)都由调用方**回落原澄清**:本函数只回答"能不能确定",绝不上抛错误
5209
+ * ——兜底查询的失败不能顶掉用户本来要看到的那条澄清文案。
5210
+ */
5211
+ export async function pickUniqueMineWorkflow(candidates, env) {
5212
+ const candidateIds = [];
5213
+ const nameById = new Map();
5214
+ for (const item of toArray(candidates)) {
5215
+ const id = String(item?.id ?? '').trim();
5216
+ if (!id || nameById.has(id))
5217
+ continue;
5218
+ candidateIds.push(id);
5219
+ nameById.set(id, String(item?.name ?? ''));
5220
+ }
5221
+ // 只有一个候选时上游已经直接采用了,不会走到这里;0 个也没得消歧。
5222
+ if (candidateIds.length < 2)
5223
+ return null;
5224
+ try {
5225
+ const now = new Date();
5226
+ const start = new Date(now.getTime() - HISTORY_LOOKBACK_DAYS * 24 * 60 * 60 * 1000);
5227
+ const response = await env.host.workflowRequest({
5228
+ method: 'POST',
5229
+ path: WORKFLOW_ENDPOINTS.MINE_TREE,
5230
+ operation: 'workflow.createForm.mineTree',
5231
+ body: {
5232
+ params: { tabid: DEFAULT_TABID.mine, dimension: 'mine', flowSpareType: 1, outType: 0 },
5233
+ searchParams: {
5234
+ formDatas: {
5235
+ // 与历史取数同一口径:非草稿(未结束 + 已结束)。选项类条件必须是 `multiContent`。
5236
+ flowstatus: flowStatusCondition('notFinish,finish')?.condition ?? [],
5237
+ createdatetime: [{
5238
+ dateContent: [formatLocalDate(start), formatLocalDate(now)],
5239
+ term: 'like',
5240
+ }],
5241
+ workflowid: [{
5242
+ term: 'in',
5243
+ browserDatas: candidateIds.map((id) => ({ id, name: nameById.get(id) ?? '' })),
5244
+ }],
5245
+ },
5246
+ type: 'and',
5247
+ initSearch: false,
5248
+ },
5249
+ },
5250
+ });
5251
+ const body = (response && typeof response === 'object' ? response : {});
5252
+ if (body.fail === true || body.status === false)
5253
+ return null;
5254
+ const roots = toArray(body.data?.data);
5255
+ if (roots.length !== 1)
5256
+ return null;
5257
+ const children = toArray(roots[0]?.children);
5258
+ if (children.length !== 1)
5259
+ return null;
5260
+ const rawId = String(children[0]?.id ?? '').trim();
5261
+ const id = rawId.startsWith('wf_') ? rawId.slice(3) : rawId;
5262
+ // 双保险:服务端若没认 `workflowid` 条件、回了别的流程,这里必须挡掉(宁可澄清也不猜)。
5263
+ if (!id || !nameById.has(id))
5264
+ return null;
5265
+ const title = String(children[0]?.title ?? '').trim();
5266
+ return { id, name: title || (nameById.get(id) ?? '') };
5267
+ }
5268
+ catch {
5269
+ // 认证/网络/格式错误一律按"没能确定"处理 —— 澄清才是用户能继续操作的出口。
5270
+ return null;
5271
+ }
5272
+ }
5273
+ export async function buildHistoryRequestData(env, fields, targets, options = {},
5274
+ /**
5275
+ * 已提前发起的列表请求(见 `fetchHistoryListSnapshot`)。传入即直接复用,不再重复发请求;
5276
+ * 传 `null` / 不传时退回"本函数内自己发列表"的老口径。
5277
+ */
5278
+ prefetchedList) {
5279
+ const targetList = toArray(targets)
5280
+ .filter((item) => !item?.systemField && String(item?.id ?? '').trim())
5281
+ .map((item) => ({ id: String(item.id).trim(), name: String(item.name ?? item.id) }));
5282
+ // 普通档必须真的有字段要取;缓存档允许 targets 为空(表单本身没有静态必填时,
5283
+ // 缓存仍要建——条件必填是在 createRequest 阶段才现身的,那时已经没有联网取数的机会了)。
5284
+ if (!targetList.length && !options.allFormFields)
5285
+ return null;
5286
+ const fieldMeta = new Map();
5287
+ for (const field of toArray(fields))
5288
+ fieldMeta.set(String(field?.id ?? ''), field);
5289
+ // 取值顺序 = 「本表单布局顺序」(缓存档)或 targets 顺序(普通档)。
5290
+ // 缓存档用布局顺序是为了结果稳定可 diff;但只保留本表单的字段 id,避免把别张表单的字段带进来。
5291
+ const orderedIds = options.allFormFields
5292
+ ? [...fieldMeta.keys()]
5293
+ : targetList.map((t) => t.id);
5294
+ try {
5295
+ const listed = prefetchedList
5296
+ ? await prefetchedList
5297
+ : await fetchHistoryListSnapshot(env, options);
5298
+ if (!listed)
5299
+ return null;
5300
+ const items = listed.items;
5301
+ const requestIds = listed.requestIds;
5163
5302
  const session = await env.host.getSession();
5164
5303
  const details = await Promise.all(requestIds.map(async (requestId) => {
5165
5304
  const payload = {
@@ -5184,30 +5323,29 @@ export async function buildHistoryRequestData(env, fields, targets, options = {}
5184
5323
  const data = details[index] || {};
5185
5324
  const rawById = new Map();
5186
5325
  collectHistoryFieldRawValues(data, rawById);
5187
- const fieldValues = [];
5326
+ // 键序 = `orderedIds`(本表单布局顺序)的插入顺序;同一字段只留**首个**取到值的结果。
5327
+ const fieldValues = {};
5188
5328
  for (const fieldId of orderedIds) {
5189
5329
  const raw = rawById.get(fieldId);
5190
5330
  if (raw === undefined || raw === null)
5191
5331
  continue;
5332
+ if (Object.prototype.hasOwnProperty.call(fieldValues, fieldId))
5333
+ continue;
5192
5334
  const value = formatHistoryFieldValue(raw, fieldMeta.get(fieldId));
5193
5335
  // 附件类返回的是对象 ⇒ 不能再用 `String(value).trim()` 判空(那会得到 "[object Object]")。
5194
5336
  if (isEmptyRawFieldValue(value))
5195
5337
  continue;
5196
- fieldValues.push({
5197
- fieldId,
5198
- fieldName: nameOf.get(fieldId) || String(fieldMeta.get(fieldId)?.name ?? fieldId),
5199
- value,
5200
- });
5338
+ fieldValues[fieldId] = value;
5201
5339
  }
5202
- if (!fieldValues.length)
5340
+ if (!Object.keys(fieldValues).length)
5203
5341
  continue;
5204
5342
  const base = data.workflowBaseInfo && typeof data.workflowBaseInfo === 'object' ? data.workflowBaseInfo : {};
5205
5343
  const listedItem = items[index] || {};
5206
5344
  result.push({
5207
- requestId: requestIds[index],
5208
5345
  requestName: pickText(base, 'requestName', 'requestNameTitle')
5209
5346
  || String(listedItem.flowName ?? ''),
5210
- createTime: pickText(base, 'createDateTime', 'createTime')
5347
+ requestId: requestIds[index],
5348
+ createdatetime: pickText(base, 'createDateTime', 'createTime')
5211
5349
  || String(listedItem.createdAt ?? ''),
5212
5350
  fieldValues,
5213
5351
  });
@@ -5241,9 +5379,16 @@ export function filterHistoryRequestData(records, fieldIds) {
5241
5379
  for (const record of toArray(records)) {
5242
5380
  if (!record || typeof record !== 'object')
5243
5381
  continue;
5244
- const fieldValues = toArray(record.fieldValues)
5245
- .filter((value) => value && wanted.has(String(value.fieldId ?? '')));
5246
- if (!fieldValues.length)
5382
+ const source = record.fieldValues;
5383
+ if (!source || typeof source !== 'object' || Array.isArray(source))
5384
+ continue;
5385
+ // 保留原键序,只留下本次要看的字段(口径见函数注释)。
5386
+ const fieldValues = {};
5387
+ for (const fieldId of Object.keys(source)) {
5388
+ if (wanted.has(fieldId))
5389
+ fieldValues[fieldId] = source[fieldId];
5390
+ }
5391
+ if (!Object.keys(fieldValues).length)
5247
5392
  continue;
5248
5393
  result.push({ ...record, fieldValues });
5249
5394
  }
@@ -1,4 +1,5 @@
1
1
  import { WorkflowCliError, workflowValidationError } from '../errors.js';
2
+ import { stringifyForStdout } from '../../../core/output.js';
2
3
  /**
3
4
  * 模型输入中永远不允许出现的键。
4
5
  *
@@ -212,3 +213,27 @@ export function stdoutBytesOf(value) {
212
213
  return 0;
213
214
  }
214
215
  }
216
+ /**
217
+ * 宿主**实际看到**的 stdout 字符数 —— 与 `Output.write` 真正打出去的那份文本**同源**
218
+ * (同一条 `stringifyForStdout` + 同一套紧凑路径),而不是"美化 JSON 长度的近似值"。
219
+ *
220
+ * ★ 判线必须与最终输出同源。2026-10-15 之前量的是 `JSON.stringify(value, null, 2).length`(纯美化),
221
+ * 而紧凑路径会把 `fields` / `historyRequestData` / `systemFields` 的缩进空白整段压掉 —— 实测
222
+ * `createForm` 整份小约 **30%**(`hugeLayout(120)` 桩:23,522 → 16,613 字符),那份桩因此从
223
+ * 「超线落盘」翻成「内联返回」。两份数一旦脱钩,判线就**系统性高估**:本可内联的表单被判落盘。
224
+ * 而宿主侧的线(`terminal_tool.py` 的 `MAX_OUTPUT_LEN = 20000`)量的是**最终输出文本**的 `len()`,
225
+ * 它并不关心美化不美化。
226
+ *
227
+ * `compactPaths` 从**信封根**算起(如 `data.fields`);不传即按无紧凑路径量(等价于纯美化)。
228
+ * 其余命令仍用 `stdoutBytesOf()` 的**字节**口径 —— 两个口径对纯 ASCII 一致、对中文差 3 倍
229
+ * (1 字符 / 3 字节),**用哪个必须跟着阈值走**,不可混用。
230
+ */
231
+ export function stdoutCharsOf(value, compactPaths) {
232
+ try {
233
+ const text = stringifyForStdout(value, compactPaths);
234
+ return typeof text === 'string' ? text.length : 0;
235
+ }
236
+ catch {
237
+ return 0;
238
+ }
239
+ }
@@ -0,0 +1,106 @@
1
+ import { AJAX_QUERY, FORM_ENDPOINTS } from '../endpoints.js';
2
+ /** 接口没给出可用值时的兜底 —— 与真机默认值一致(`微软雅黑/Microsoft YaHei`、`18/18px`)。 */
3
+ const DEFAULT_FONT_FAMILY = 'Microsoft YaHei';
4
+ const DEFAULT_FONT_SIZE = '18px';
5
+ const DEFAULT_FONT_ID = 'wea_rich_text_default_font';
6
+ /**
7
+ * `defaultFontFamily` / `defaultFontSize` 都是「中文名/实际值」的双段形态
8
+ * (`微软雅黑/Microsoft YaHei`、`18/18px`)。CSS 要的是斜杠**后面**那段;没有斜杠就整段用。
9
+ */
10
+ function cssValue(raw, fallback) {
11
+ const text = String(raw ?? '').trim();
12
+ if (!text)
13
+ return fallback;
14
+ const segments = text.split('/').map((item) => item.trim()).filter(Boolean);
15
+ const value = segments.length ? segments[segments.length - 1] : '';
16
+ if (!value)
17
+ return fallback;
18
+ return value;
19
+ }
20
+ /** 字号只给数字(`18`)时补单位 —— 否则拼出来的 `font-size:18` 是无效 CSS,浏览器会整条丢弃。 */
21
+ function cssFontSize(raw) {
22
+ const value = cssValue(raw, DEFAULT_FONT_SIZE);
23
+ return /^\d+(\.\d+)?$/u.test(value) ? `${value}px` : value;
24
+ }
25
+ /**
26
+ * 取签字意见的默认样式。**失败一律返回 `null`**(调用方据此退回原行为),绝不阻断提交 ——
27
+ * 这只是给意见加样式,不能因为样式接口挂了就让整条流程发不出去。
28
+ */
29
+ export async function loadSignInputCfg(env, target) {
30
+ const workflowId = String(target.workflowId ?? '').trim();
31
+ const requestId = String(target.requestId ?? '').trim();
32
+ // 发起流程用 `workflowId` + `isCreate:1`;提交已有流程用 `requestId` + `isCreate:0`。
33
+ const isCreate = workflowId && !requestId;
34
+ if (!isCreate && !requestId)
35
+ return null;
36
+ const body = isCreate
37
+ ? { isRemark: '', workflowId, isCreate: 1 }
38
+ : {
39
+ isRemark: 0,
40
+ operResultType: 'SUCCESS_RELOAD_CURRENT_PAGE',
41
+ userSpecifiedNodeId: '0',
42
+ autoMaxDisplay: '0',
43
+ isCreate: 0,
44
+ requestId,
45
+ };
46
+ try {
47
+ const response = await env.host.workflowRequest({
48
+ method: 'POST',
49
+ path: FORM_ENDPOINTS.signInputInfo,
50
+ // 与同族 `flowPage/*` 接口(loadBaseParam / loadFrameParam / loadMinorInfo)取同一份公共 query。
51
+ query: AJAX_QUERY,
52
+ body,
53
+ operation: isCreate ? 'workflow.createRequest' : 'workflow.operateApply',
54
+ });
55
+ const cfg = response?.data?.signInputCfg;
56
+ if (!cfg || typeof cfg !== 'object')
57
+ return null;
58
+ const raw = cfg.plainTextSignInput;
59
+ return {
60
+ plainText: raw === true || String(raw ?? '').toLowerCase() === 'true',
61
+ fontFamily: cssValue(cfg.defaultFontFamily, DEFAULT_FONT_FAMILY),
62
+ fontSize: cssFontSize(cfg.defaultFontSize),
63
+ };
64
+ }
65
+ catch {
66
+ return null;
67
+ }
68
+ }
69
+ function escapeText(text) {
70
+ return text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
71
+ }
72
+ /**
73
+ * 把签字意见包成服务端能正确渲染的形态。
74
+ *
75
+ * - 空内容 ⇒ `_weaverMte_`(与历史一致,表示"没有意见");
76
+ * - 已带 `_weaverMte_` 前缀(模型自己给了富文本)⇒ 原样,不重复嵌套;
77
+ * - `cfg` 取不到 ⇒ 退回历史行为 `_weaverMte_<p>内容</p>`(不知道协商格式就不猜);
78
+ * - `plainTextSignInput` 为真 ⇒ `<span id=... style=...>内容</span>`;
79
+ * - 否则 ⇒ `_weaverMte_<div id=... style=...><p>内容</p></div>`。
80
+ */
81
+ export function wrapSignRemark(raw, cfg) {
82
+ const text = String(raw ?? '').trim();
83
+ if (!text)
84
+ return '_weaverMte_';
85
+ if (text.startsWith('_weaverMte_'))
86
+ return text;
87
+ if (!cfg)
88
+ return `_weaverMte_<p>${escapeText(text)}</p>`;
89
+ const style = `font-family:${cfg.fontFamily};font-size:${cfg.fontSize};`;
90
+ const escaped = escapeText(text);
91
+ if (cfg.plainText) {
92
+ return `<span id="${DEFAULT_FONT_ID}" style="${style}">${escaped}</span>`;
93
+ }
94
+ return `_weaverMte_<div id="${DEFAULT_FONT_ID}" style="${style}"><p>${escaped}</p></div>`;
95
+ }
96
+ /**
97
+ * 提交侧的入口:**只在真有意见、且还没带富文本前缀时**才去问样式接口。
98
+ *
99
+ * 没有意见 / 已经是 `_weaverMte_` 富文本 ⇒ 一次请求都不发(这两档包与不包结果一样)。
100
+ */
101
+ export async function resolveSignRemark(env, raw, target) {
102
+ const text = String(raw ?? '').trim();
103
+ if (!text || text.startsWith('_weaverMte_'))
104
+ return wrapSignRemark(raw, null);
105
+ return wrapSignRemark(text, await loadSignInputCfg(env, target));
106
+ }
@@ -5,6 +5,7 @@ import { defaultTabIdOf, rethrowAuthOrNetworkError, runWorkflowSearch } from './
5
5
  import { CONTINUATION_INPUT, SCHEMA_CATEGORY, SCHEMA_CONFIRM, SCHEMA_INDEX, SCHEMA_REQUEST_ID, schemaOf, workflowSuccess, } from './types.js';
6
6
  import { asInt, asString, asStringArray, compact, responseData, detailDataOf, toArray, resolveMemoryAppId } from './shared.js';
7
7
  import { WORKFLOW_ENDPOINTS } from '../endpoints.js';
8
+ import { resolveSignRemark } from './sign-input.js';
8
9
  import { findIndexedItem, loadSearchIndex, } from '../state.js';
9
10
  // ===========================================================================
10
11
  // 工作流写操作(operate / share / batch / memory)
@@ -1013,7 +1014,14 @@ const workflowOperateApply = {
1013
1014
  verification,
1014
1015
  });
1015
1016
  }
1016
- const payload = await withUserId(env, { requestId, remark });
1017
+ // 提交前先按租户配置把签字意见包成带默认字体/字号的形态(已有流程 ⇒ `isCreate:0` + `requestId`)。
1018
+ // 取不到样式时 `resolveSignRemark` 内部已退回原形态,不会阻断提交。
1019
+ // **没意见就原样传空串**:这条命令历史上空意见就是 `''`(不像发起侧用 `_weaverMte_` 占位),
1020
+ // 改成占位符会改变提交请求体,没有必要。
1021
+ const signRemark = String(remark ?? '').trim()
1022
+ ? await resolveSignRemark(env, remark, { requestId })
1023
+ : remark;
1024
+ const payload = await withUserId(env, { requestId, remark: signRemark });
1017
1025
  if (nodeId)
1018
1026
  payload.userCurrentNodeId = nodeId;
1019
1027
  if (prepared.requestName)
@@ -0,0 +1,41 @@
1
+ /**
2
+ * 「只去缩进、不动内容」的 stdout 路径(按 operation 声明;路径从**信封根**算起)。
3
+ *
4
+ * 依据(实测):
5
+ * - `historyRequestData` 独占 `createForm` 输出的 60%(真机 13,017 B / 21,620 B),其中近 1/4 是缩进
6
+ * 空白 —— 压成单行后 9,835 B、整份 18,438 B(2026-10-14 用户裁定纳入)。
7
+ * - `fields`(2026-10-15 用户裁定纳入)是"每个字段占 4 行"的数组,缩进空白占它自己 **24%~31%**
8
+ * —— 实测平铺字段的桩(仅 `id`/`name`/`componentKey`/`browserType`)20,642 → 15,601 字符(省 24%);
9
+ * 带 `options` / `fileUploadParams` 的嵌套字段层级更深,可到约 31%。它通常占整份输出的 **88% 上下**。
10
+ * - `systemFields`(同日用户裁定纳入)是"层级深、内容短"的小对象:`permissions` 是一层
11
+ * `{系统字段: {isview/isedit/ismandatory}}`、`levelOptions` / `secLevelOptions` 是选项数组,
12
+ * 缩进空白占它自己约 **29%**(259 → 183 字符),而它每次都要下发。
13
+ *
14
+ * 三个键合计的效果(`hugeLayout(120)` 桩实测):整份 **23,522 → 16,613 字符(省 29.4%)**
15
+ * —— 该桩因此从「超线落盘」翻成「内联返回」。字段里嵌套对象越多、`fields` 占整份比例越高,省得越多。
16
+ *
17
+ * 三个键都是"逐条长、层级深"的典型:读它们要的是「哪个字段 / 什么值」,每层两个空格的缩进没有
18
+ * 任何信息量。**内容一字不改**:输出仍是合法 JSON,`parse` 出来与全缩进版完全一致(只是空白不同),
19
+ * 结构也保持数组原样、不会退化成"需要再 parse 一次的字符串",消费端零改动
20
+ * (实现见 `core/output.ts` 的 `stringifyForStdout`)。
21
+ *
22
+ * **为什么独立成模块**(而不是留在 `shortcuts/workflow/index.ts`):`operations/form.ts` 的判线也要用
23
+ * 同一份路径 —— 它量的必须是**这条命令最终打出去的那份文本**(见 `finalStdoutChars`)。常量若留在
24
+ * `index.ts`,`form.ts` 反向 import 就会与 `index → operations → form` 形成循环依赖;常量放这里、
25
+ * 两边都正向引用,依赖图仍是单向的。
26
+ */
27
+ export const COMPACT_STDOUT_PATHS = {
28
+ // `data.data`(智能填参算出的字段值)与 `fields` 同构:键是字段 id、层级深,压掉缩进省得可观。
29
+ // 它与 `historyRequestData` / `systemFields` **互斥出现**(智能体成功时后两者已被删),
30
+ // 三个都登记在这里不会互相干扰。
31
+ 'workflow.createForm': [
32
+ 'data.fields',
33
+ 'data.historyRequestData',
34
+ 'data.systemFields',
35
+ 'data.data',
36
+ ],
37
+ };
38
+ /** 该 operation 的紧凑路径(不声明 = 维持全量缩进)。导出让用例锁住接线。 */
39
+ export function compactStdoutPaths(operation) {
40
+ return COMPACT_STDOUT_PATHS[operation];
41
+ }
@@ -0,0 +1,79 @@
1
+ # 泛微商务合同档案查询 CLI
2
+
3
+ 来源 Skill:`weaver-e10-archive-oa`。本模块把接口文档中可安全自动化的能力封装为 `weaver-work-cli archive-oa` 命令,供 AI Agent 通过结构化 JSON 调用。
4
+
5
+ 源码位于 `src/shortcuts/archive-oa`。命令注册、`operation manifest` 和业务执行逻辑分离:manifest 由 `operations/registry.ts` 汇总各 operation 定义生成,具体执行逻辑在 `src/shortcuts/archive-oa/operations` 中按业务分组维护(档案定位、合同查询、借阅车、发起借阅)。
6
+
7
+ 面向 Agent 的说明位于 `skills/weaver-e10-archive-oa`。入口 `SKILL.md` 只负责共享规则和 reference 路由;具体细节拆在 `skills/weaver-e10-archive-oa/references/`,与飞书 CLI 的业务 Skill 组织方式保持一致。
8
+
9
+ ## 公共前置
10
+
11
+ 先通过 E10 鉴权模块登录:
12
+
13
+ ```text
14
+ weaver-work-cli auth login --base-url "https://weapp.xxx.cn" --agent_type "<当前智能体名称>"
15
+ weaver-work-cli auth status --no-check
16
+ ```
17
+
18
+ 每个业务请求由 CLI 托管:
19
+
20
+ 1. 读取当前 `weaver-work-cli auth` Profile 的 E10 会话。
21
+ 2. 请求只允许 `/api/`(ebuilder 业务接口)与 `/openserver/`(E10 开放服务)路径,由 CLI 携带 E10 Cookie/ETEAMSID 与必要的业务头。
22
+ 3. 响应按以下规则判定业务成功:ebuilder 列表/ESB 看 `code=200` 与 `status=true`;ebuilder 自定义接口看 `datajson.status`。
23
+
24
+ Agent 不得在业务 JSON 中传 Cookie、ETEAMSID、Token 或内部控制字段。
25
+
26
+ ## Agent 入口
27
+
28
+ 优先使用 `archive-oa run <operation>`:
29
+
30
+ Windows PowerShell:
31
+
32
+ ```powershell
33
+ weaver-work-cli archive-oa schema
34
+ weaver-work-cli --json archive-oa run archive-oa.contract.list --input-json '{"pageNo":1}'
35
+ ```
36
+
37
+ macOS/Linux(bash/zsh):
38
+
39
+ ```bash
40
+ weaver-work-cli archive-oa schema
41
+ weaver-work-cli --json archive-oa run archive-oa.contract.list --input-json '{"pageNo":1}'
42
+ ```
43
+
44
+ 复杂或多行 JSON:先写成 UTF-8 文件,再用 `--input <path>`(`--input -` 读 stdin)。不要存在 `~/.tmp` 之类的路径假设;Windows 用 `$env:TEMP`,macOS/Linux 用临时目录。
45
+
46
+ ## operation 划分
47
+
48
+ | 分组 | operation |
49
+ | --- | --- |
50
+ | 档案定位 | `archive-oa.archive.locate` |
51
+ | 泛微合同 | `archive-oa.contract.list`、`archive-oa.contract.fields` |
52
+ | 泛微借阅车 | `archive-oa.borrow-car.list`、`archive-oa.borrow-car.add.prepare`、`archive-oa.borrow-car.add.apply` |
53
+ | 契约锁合同 | `archive-oa.qys.contract.list` |
54
+ | 契约锁借阅车 | `archive-oa.qys.borrow-car.list`、`archive-oa.qys.borrow-car.add.prepare`、`archive-oa.qys.borrow-car.add.apply` |
55
+
56
+ | 发起借阅(生成流程页 URL) | `archive-oa.borrow.start.url`、`archive-oa.qys.borrow.start.url` |
57
+
58
+ **发起借阅由 `archive-oa.borrow.start.url` 生成流程创建页 URL**:`<baseUrl>/sp/workflow/flowpage/fullCreate/100003460000002090?fb=<fb>&data=<JSON>`,`data` 为 `[{hth, htmc, yfhd, fph}]`。该 operation 只读:不写数据、不触发流程、不需要后台应用凭据;URL 可直接在浏览器打开,表单由用户填写并提交。已下线的 `archive-oa.borrow.start.prepare` / `.apply`(OpenESB webhook)不再提供。
59
+
60
+ ## 两套链路的参数差异
61
+
62
+ | 项 | 泛微商务合同 | 契约锁协作采纳 |
63
+ | --- | --- | --- |
64
+ | 合同查询 `passid` / `listId` | `850741972510941185` / `850741985437786120` | `850742853046345728` / `1190611964371984450` |
65
+ | 借阅车 `listId` | `882393480417296390` | `883819516961857839` |
66
+ | 加入借阅车 `esbActionIds` | `882395911377174530` | `892706856573648911` |
67
+
68
+ ## 写操作确认协议
69
+
70
+ - `*.prepare`:只读回查与参数校验(加入借阅车会查一次借阅车现状),返回 `preview` 与 `continuation`。
71
+ - `*.apply`:必须带 `continuation` 且 `confirm: true`(CLI `--yes`);票据含环境与登录账号指纹,10 分钟有效。
72
+ - 发起借阅用 `archive-oa.borrow.start.url` 生成流程页 URL(只读,`risk: read`):生成后优先用系统默认浏览器打开,无法打开时原样输出完整 URL;流程表单由用户在浏览器确认并提交。OpenESB 版 `borrow.start.prepare` / `.apply` 已下线。
73
+ - `failNum > 0` 时返回 `partial / write_uncertain`,不自动重放。
74
+
75
+ ## 参考
76
+
77
+ - `skills/weaver-e10-archive-oa/SKILL.md`:Agent 路由与执行原则。
78
+ - `skills/weaver-e10-archive-oa/references/`:按意图拆分的用法说明。
79
+ - `skill-template/domains/archive-oa.md`:业务域 Agent 调优要点。