weaver-work-cli 0.1.42 → 0.1.44

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 (318) hide show
  1. package/README.md +17 -0
  2. package/dist/chunks/{archive-J4I6MCKF.js → archive-P6TBQGKL.js} +13 -5
  3. package/dist/chunks/{archive-oa-BRZKKTO4.js → archive-oa-7TQ2NXOH.js} +12 -5
  4. package/dist/chunks/{asset-L7D4FAOZ.js → asset-3ELRG37G.js} +11 -4
  5. package/dist/chunks/{asset-idle-DADLLV75.js → asset-idle-WIGMUFMD.js} +7 -3
  6. package/dist/chunks/{attachment-content-K4C7VLWQ.js → attachment-content-E3276UOV.js} +5 -4
  7. package/dist/chunks/{blog-BVGQ7NZL.js → blog-C5NMZAAC.js} +11 -4
  8. package/dist/chunks/{caizhilian-SAADNFD6.js → caizhilian-5XSM2DFP.js} +13 -6
  9. package/dist/chunks/{calendar-Q7NQY5Z2.js → calendar-FI2WNSBO.js} +12 -5
  10. package/dist/chunks/{chunk-YRSZQUD2.js → chunk-3YBDYOC4.js} +3 -3
  11. package/dist/chunks/{chunk-OOUTBLZ4.js → chunk-56EZERK4.js} +1 -1
  12. package/dist/chunks/chunk-6N4JPNFL.js +76 -0
  13. package/dist/chunks/{chunk-ZUX3P6BQ.js → chunk-727FH2NI.js} +1 -1
  14. package/dist/chunks/chunk-7BDPM5ST.js +11 -0
  15. package/dist/chunks/{chunk-EKWAQSLU.js → chunk-BCVYBYYT.js} +432 -2248
  16. package/dist/chunks/{chunk-W7BEHOSR.js → chunk-CWYGFU5B.js} +2 -2
  17. package/dist/chunks/{chunk-NOODWMCL.js → chunk-D4ADSZ7H.js} +1 -1
  18. package/dist/chunks/{chunk-SA6VBIHY.js → chunk-ETNJSKMM.js} +214 -16
  19. package/dist/chunks/{chunk-BBKDXQEC.js → chunk-F4E4EM35.js} +3 -3
  20. package/dist/chunks/{chunk-IZ7S7QUS.js → chunk-FAZTGX7S.js} +6 -6
  21. package/dist/chunks/{chunk-NKZRQXST.js → chunk-FRZKBMSW.js} +52 -36
  22. package/dist/chunks/{chunk-BYBSCN4X.js → chunk-G7PQWD4L.js} +6 -3
  23. package/dist/chunks/{chunk-GEWYMQME.js → chunk-GAMZLAG2.js} +1 -1
  24. package/dist/chunks/{chunk-R4CHUSKC.js → chunk-GM6J7Q4B.js} +4 -4
  25. package/dist/chunks/{chunk-APVFJUQH.js → chunk-GRDRG6HP.js} +3 -3
  26. package/dist/chunks/{chunk-LDZQPUIA.js → chunk-HIT4Y6OI.js} +1 -1
  27. package/dist/chunks/{chunk-EZALDOQH.js → chunk-HP7JIYMT.js} +5 -2
  28. package/dist/chunks/{chunk-LADPYOWC.js → chunk-IAZ3UPY6.js} +3 -3
  29. package/dist/chunks/{chunk-ZEDWSH32.js → chunk-IC62NFM5.js} +1 -1
  30. package/dist/chunks/{chunk-P26ZWSKU.js → chunk-KIHNAS25.js} +5 -2
  31. package/dist/chunks/{chunk-BIPYLLVS.js → chunk-N4M2DDFE.js} +15 -15
  32. package/dist/chunks/{chunk-QKNKR4RH.js → chunk-OF4S23UB.js} +4 -4
  33. package/dist/chunks/{chunk-JPRO6ER2.js → chunk-PC7VKEB5.js} +57 -60
  34. package/dist/chunks/{chunk-4PD5NWAX.js → chunk-PUQS5MWL.js} +2 -2
  35. package/dist/chunks/{chunk-2LV74IWP.js → chunk-Q4OYAQYH.js} +1 -1
  36. package/dist/chunks/{chunk-72CKAUAG.js → chunk-QVSWRLLU.js} +7 -5
  37. package/dist/chunks/{chunk-4RAE6JXP.js → chunk-TA7FXXJD.js} +6 -3
  38. package/dist/chunks/{chunk-GPMFD4RD.js → chunk-TXUG266F.js} +1 -1
  39. package/dist/chunks/{chunk-FOAA27U5.js → chunk-UFIT2UU3.js} +16 -4
  40. package/dist/chunks/{chunk-LUSPKZKY.js → chunk-UG5G54VL.js} +1 -0
  41. package/dist/chunks/{chunk-NIAJ5ZCG.js → chunk-UL5XUQ25.js} +5 -2
  42. package/dist/chunks/{chunk-FMPJJYYI.js → chunk-WRXSAVKO.js} +1 -1
  43. package/dist/chunks/{chunk-G4UR6NXN.js → chunk-WSF4NNMR.js} +3 -3
  44. package/dist/chunks/chunk-XHK4MDR5.js +2497 -0
  45. package/dist/chunks/{chunk-3KTFS4IA.js → chunk-XNIK66I4.js} +19 -9
  46. package/dist/chunks/{chunk-3SO6QL6U.js → chunk-YWX377BY.js} +5 -2
  47. package/dist/chunks/{chunk-BYATLLEF.js → chunk-Z3GDFVJR.js} +1 -1
  48. package/dist/chunks/{chunk-GHXCDPTM.js → chunk-Z7VYWPZV.js} +1 -1
  49. package/dist/chunks/{conflict-F2OMZRTO.js → conflict-ARLSZJ6V.js} +4 -3
  50. package/dist/chunks/{continuation-2CKSBLA6.js → continuation-3S37AUSH.js} +4 -3
  51. package/dist/chunks/{continuation-RN6PZN2M.js → continuation-3XLYYTKV.js} +4 -3
  52. package/dist/chunks/{continuation-HZIZRZBX.js → continuation-HFW2YT5S.js} +4 -3
  53. package/dist/chunks/{continuation-NLECEJPX.js → continuation-KI7DRRZN.js} +4 -3
  54. package/dist/chunks/{contract-5BETHRSG.js → contract-DNIIW5VJ.js} +13 -5
  55. package/dist/chunks/{cowork-3MN6EQQO.js → cowork-GMLRGVIW.js} +11 -4
  56. package/dist/chunks/{create-flow-5FQNNMVO.js → create-flow-J22BO65E.js} +8 -7
  57. package/dist/chunks/{ebuilder-form-SBHOYBUD.js → ebuilder-form-ANV2FHYV.js} +12 -7
  58. package/dist/chunks/{ehr-KMOJULKG.js → ehr-GSTGAIY3.js} +266 -24
  59. package/dist/chunks/{employee-SAK2QYXX.js → employee-22BGJ3QS.js} +3 -3
  60. package/dist/chunks/{env-LB7NBL2O.js → env-BX3VRFS7.js} +4 -3
  61. package/dist/chunks/{esb-W2PJCFCX.js → esb-ATAIASX2.js} +12 -7
  62. package/dist/chunks/{factory-6ZFQXQ46.js → factory-PETTFME6.js} +3 -2
  63. package/dist/chunks/{fna-ZQPCUV4R.js → fna-YEKBSFSX.js} +14 -8
  64. package/dist/chunks/{group-chat-2HHAJN46.js → group-chat-BFVXAYFX.js} +5 -4
  65. package/dist/chunks/{host-ATKVNZAT.js → host-HRBXEPDQ.js} +5 -5
  66. package/dist/chunks/{host-BQH22NTQ.js → host-LR55CTHP.js} +5 -5
  67. package/dist/chunks/{host-X2CSLFM6.js → host-SUOY6VYQ.js} +5 -5
  68. package/dist/chunks/{host-4CBHGOHT.js → host-SZGV4UNT.js} +5 -5
  69. package/dist/chunks/{host-YTODKMSL.js → host-WIKN2EJ5.js} +5 -5
  70. package/dist/chunks/{hrm-FFM4UJFS.js → hrm-NRDO4W5G.js} +11 -7
  71. package/dist/chunks/{im-VEHKDQPB.js → im-IQ2HN23S.js} +8 -7
  72. package/dist/chunks/{invoice-LVIKSIIF.js → invoice-MNRW76PP.js} +636 -1768
  73. package/dist/chunks/{jiuchuanhui-X6DINO5P.js → jiuchuanhui-DTRBAX4N.js} +14 -6
  74. package/dist/chunks/{lazy-dispatch-KSWTN5L6.js → lazy-dispatch-ZVWAI25B.js} +7 -6
  75. package/dist/chunks/{mail-VDKRGUD3.js → mail-ZVAUXOJA.js} +16 -14
  76. package/dist/chunks/{meeting-CLC6HP3Z.js → meeting-FEVPZ67S.js} +21 -14
  77. package/dist/chunks/{okr-CHG4OO3U.js → okr-SDH3E5RA.js} +12 -5
  78. package/dist/chunks/{operations-5QL3AECO.js → operations-62N6EP3C.js} +4 -3
  79. package/dist/chunks/{plan-XWR75667.js → plan-E35JFDI7.js} +12 -5
  80. package/dist/chunks/{project-5BXOOKMG.js → project-73QXBAB2.js} +11 -4
  81. package/dist/chunks/reception-UWZVACBN.js +1899 -0
  82. package/dist/chunks/{recruit-stage-DGMFNNDE.js → recruit-stage-4MAOCKFY.js} +320 -57
  83. package/dist/chunks/registry-IM5G23LS.js +24 -0
  84. package/dist/chunks/{registry-RHMW6ANW.js → registry-JDUS4E7D.js} +7 -6
  85. package/dist/chunks/{registry-7FFOXIAW.js → registry-KNKSCJNT.js} +7 -6
  86. package/dist/chunks/{registry-Z43434VG.js → registry-PO7SI256.js} +4 -4
  87. package/dist/chunks/{registry-OZSMDVPP.js → registry-PVUZQDDQ.js} +3 -3
  88. package/dist/chunks/{room-recommend-62H7ZQQ6.js → room-recommend-H7KLXA5R.js} +6 -5
  89. package/dist/chunks/{schedule-FNXKH3DQ.js → schedule-ESZIBAUO.js} +6 -5
  90. package/dist/chunks/{workflow-ADHKCAJK.js → workflow-CWJFJLQU.js} +13 -8
  91. package/dist/cmd/action.js +6 -0
  92. package/dist/cmd/identity/index.js +45 -0
  93. package/dist/cmd/index.js +2 -0
  94. package/dist/core/continuation-ttl.js +18 -0
  95. package/dist/core/error-codes.js +85 -0
  96. package/dist/core/logger.js +11 -0
  97. package/dist/index.js +37 -31
  98. package/dist/internal/e10/auth/commands.js +163 -8
  99. package/dist/internal/e10/auth/error-log.js +182 -0
  100. package/dist/internal/e10/auth/session.js +17 -3
  101. package/dist/internal/e10/auth-recovery.js +39 -12
  102. package/dist/internal/e10/context.js +17 -2
  103. package/dist/internal/skills/install.js +9 -1
  104. package/dist/shortcuts/archive/continuation.js +2 -1
  105. package/dist/shortcuts/archive/index.js +3 -0
  106. package/dist/shortcuts/archive/operations/confirm.js +2 -1
  107. package/dist/shortcuts/archive-oa/continuation.js +2 -1
  108. package/dist/shortcuts/archive-oa/index.js +2 -0
  109. package/dist/shortcuts/archive-oa/operations/confirm.js +2 -1
  110. package/dist/shortcuts/asset/continuation.js +2 -1
  111. package/dist/shortcuts/asset/index.js +2 -0
  112. package/dist/shortcuts/asset-idle/index.js +2 -0
  113. package/dist/shortcuts/blog/continuation.js +2 -1
  114. package/dist/shortcuts/blog/index.js +2 -0
  115. package/dist/shortcuts/caizhilian/continuation.js +2 -1
  116. package/dist/shortcuts/caizhilian/index.js +2 -0
  117. package/dist/shortcuts/caizhilian/operations/confirm.js +3 -2
  118. package/dist/shortcuts/calendar/continuation.js +2 -1
  119. package/dist/shortcuts/calendar/index.js +2 -0
  120. package/dist/shortcuts/calendar/operations/write.js +1 -1
  121. package/dist/shortcuts/contract/continuation.js +2 -1
  122. package/dist/shortcuts/contract/index.js +2 -0
  123. package/dist/shortcuts/contract/operations/write.js +2 -1
  124. package/dist/shortcuts/cowork/continuation.js +2 -1
  125. package/dist/shortcuts/cowork/index.js +2 -0
  126. package/dist/shortcuts/ebuilder-form/continuation.js +2 -1
  127. package/dist/shortcuts/ebuilder-form/index.js +2 -0
  128. package/dist/shortcuts/ebuilder-form/operations/write.js +3 -2
  129. package/dist/shortcuts/ehr/continuation.js +2 -1
  130. package/dist/shortcuts/ehr/index.js +2 -0
  131. package/dist/shortcuts/ehr/operations/attend-write.js +1 -1
  132. package/dist/shortcuts/ehr/operations/recruit-candidate-import.js +182 -3
  133. package/dist/shortcuts/ehr/operations/recruit-position.js +134 -2
  134. package/dist/shortcuts/ehr/operations/recruit-write.js +1 -1
  135. package/dist/shortcuts/esb/continuation.js +2 -1
  136. package/dist/shortcuts/esb/index.js +2 -0
  137. package/dist/shortcuts/esb/operations/trigger.js +2 -1
  138. package/dist/shortcuts/fna/continuation.js +2 -1
  139. package/dist/shortcuts/fna/index.js +2 -0
  140. package/dist/shortcuts/fna/operations/invoice-writeoff.js +1 -1
  141. package/dist/shortcuts/fna/operations/loan.js +1 -1
  142. package/dist/shortcuts/hrm/index.js +2 -0
  143. package/dist/shortcuts/im/continuation.js +2 -1
  144. package/dist/shortcuts/index.js +5 -0
  145. package/dist/shortcuts/invoice/continuation.js +2 -1
  146. package/dist/shortcuts/invoice/index.js +14 -15
  147. package/dist/shortcuts/invoice/invoice-record.js +93 -0
  148. package/dist/shortcuts/invoice/manifest.js +190 -393
  149. package/dist/shortcuts/invoice/operations/add.js +2 -1
  150. package/dist/shortcuts/invoice/operations/delete.js +2 -1
  151. package/dist/shortcuts/invoice/operations/import.js +2 -1
  152. package/dist/shortcuts/invoice/operations/issuing-contract-detail.js +86 -0
  153. package/dist/shortcuts/invoice/operations/issuing-contracts.js +210 -0
  154. package/dist/shortcuts/invoice/operations/registry.js +17 -17
  155. package/dist/shortcuts/invoice/operations/reim-auto.js +4 -569
  156. package/dist/shortcuts/invoice/operations/reim.js +52 -341
  157. package/dist/shortcuts/invoice/operations/shared.js +21 -4
  158. package/dist/shortcuts/invoice/operations/update.js +2 -1
  159. package/dist/shortcuts/invoice/projection.js +10 -62
  160. package/dist/shortcuts/jiuchuanhui/continuation.js +2 -1
  161. package/dist/shortcuts/jiuchuanhui/index.js +2 -0
  162. package/dist/shortcuts/jiuchuanhui/operations/datajson.js +2 -1
  163. package/dist/shortcuts/jiuchuanhui/operations/esb.js +2 -1
  164. package/dist/shortcuts/mail/continuation.js +2 -1
  165. package/dist/shortcuts/mail/index.js +2 -0
  166. package/dist/shortcuts/mail/operations/mail-blacklist.js +1 -1
  167. package/dist/shortcuts/mail/operations/mail-contacts.js +1 -1
  168. package/dist/shortcuts/mail/operations/mail-send.js +1 -1
  169. package/dist/shortcuts/mail/operations/mail-sign.js +1 -1
  170. package/dist/shortcuts/mail/operations/mail-template.js +1 -1
  171. package/dist/shortcuts/meeting/continuation.js +2 -1
  172. package/dist/shortcuts/meeting/index.js +2 -0
  173. package/dist/shortcuts/meeting/operations/change.js +1 -1
  174. package/dist/shortcuts/meeting/operations/create.js +1 -1
  175. package/dist/shortcuts/meeting/operations/eb/create-flow.js +16 -7
  176. package/dist/shortcuts/meeting/operations/eb/decision.js +1 -1
  177. package/dist/shortcuts/meeting/operations/eb/factory.js +1 -1
  178. package/dist/shortcuts/meeting/operations/lifecycle.js +1 -1
  179. package/dist/shortcuts/meeting/operations/receipts.js +1 -1
  180. package/dist/shortcuts/meeting/operations/signs.js +1 -1
  181. package/dist/shortcuts/okr/continuation.js +2 -1
  182. package/dist/shortcuts/okr/index.js +2 -0
  183. package/dist/shortcuts/okr/operations/write.js +1 -1
  184. package/dist/shortcuts/plan/continuation.js +2 -1
  185. package/dist/shortcuts/plan/index.js +2 -0
  186. package/dist/shortcuts/plan/operations/write.js +1 -1
  187. package/dist/shortcuts/project/continuation.js +2 -1
  188. package/dist/shortcuts/project/index.js +2 -0
  189. package/dist/shortcuts/reception/constants.js +53 -0
  190. package/dist/shortcuts/reception/errors.js +54 -0
  191. package/dist/shortcuts/reception/host.js +125 -0
  192. package/dist/shortcuts/reception/index.js +198 -0
  193. package/dist/shortcuts/reception/manifest.js +177 -0
  194. package/dist/shortcuts/reception/operations/ask.js +71 -0
  195. package/dist/shortcuts/reception/operations/browsertool.js +58 -0
  196. package/dist/shortcuts/reception/operations/compose.js +129 -0
  197. package/dist/shortcuts/reception/operations/customparams.js +74 -0
  198. package/dist/shortcuts/reception/operations/doc.js +238 -0
  199. package/dist/shortcuts/reception/operations/docrender.js +36 -0
  200. package/dist/shortcuts/reception/operations/panels.js +179 -0
  201. package/dist/shortcuts/reception/operations/registry.js +26 -0
  202. package/dist/shortcuts/reception/operations/render-assets.js +184 -0
  203. package/dist/shortcuts/reception/operations/render.js +123 -0
  204. package/dist/shortcuts/reception/operations/runs.js +38 -0
  205. package/dist/shortcuts/reception/operations/schedule.js +127 -0
  206. package/dist/shortcuts/reception/operations/shared.js +196 -0
  207. package/dist/shortcuts/reception/operations/snapshot.js +68 -0
  208. package/dist/shortcuts/reception/operations/types.js +1 -0
  209. package/dist/shortcuts/reception/operations.js +33 -0
  210. package/dist/shortcuts/reception/upload.js +218 -0
  211. package/dist/shortcuts/recruit-stage/context.js +145 -33
  212. package/dist/shortcuts/recruit-stage/continuation.js +2 -1
  213. package/dist/shortcuts/recruit-stage/operations/jd-create.js +106 -17
  214. package/dist/shortcuts/recruit-stage/operations/resume-import.js +166 -10
  215. package/dist/shortcuts/workflow/continuation.js +2 -1
  216. package/dist/shortcuts/workflow/index.js +2 -0
  217. package/dist/shortcuts/workflow/operations/form.js +32 -8
  218. package/dist/shortcuts/workflow/operations/write.js +1 -1
  219. package/docs/_catalog.md +3 -0
  220. package/docs/agent-invoice.md +1 -1
  221. package/docs/archive-oa.md +1 -1
  222. package/docs/caizhilian.md +1 -1
  223. package/docs/calendar.md +1 -1
  224. package/docs/contract.md +1 -1
  225. package/docs/e10-auth.md +16 -0
  226. package/docs/ehr.md +2 -2
  227. package/docs/esb.md +1 -1
  228. package/docs/im.md +1 -1
  229. package/docs/invoice.md +8 -12
  230. package/docs/okr.md +1 -1
  231. package/docs/reception.md +119 -0
  232. package/package.json +1 -1
  233. package/scripts/clean.mjs +43 -2
  234. package/skill-template/business-info.json +18 -2
  235. package/skill-template/domains/caizhilian.md +1 -1
  236. package/skill-template/domains/reception-flow.md +18 -0
  237. package/skill-template/domains/yepiaotong.md +4 -7
  238. package/skills/weaver-e10-archive-oa/references/source-manifest.json +14 -14
  239. package/skills/weaver-e10-blog/references/blog-publish.md +1 -1
  240. package/skills/weaver-e10-blog/references/source-manifest.json +7 -7
  241. package/skills/weaver-e10-caizhilian/references/source-manifest.json +21 -21
  242. package/skills/weaver-e10-caizhilian/references/write-protocol.md +2 -2
  243. package/skills/weaver-e10-calendar/references/calendar-write.md +1 -1
  244. package/skills/weaver-e10-cowork/SKILL.md +1 -1
  245. package/skills/weaver-e10-ebuilder-form/SKILL.md +1 -1
  246. package/skills/weaver-e10-ebuilder-form/references/custom-api.md +1 -1
  247. package/skills/weaver-e10-ebuilder-form/references/openapi-write.md +1 -1
  248. package/skills/weaver-e10-esb/SKILL.md +2 -2
  249. package/skills/weaver-e10-esb/references/source-manifest.json +22 -22
  250. package/skills/weaver-e10-esb/references/trigger.md +2 -2
  251. package/skills/weaver-e10-jinchengda/references/contract-clause-library-crud.md +1 -1
  252. package/skills/weaver-e10-jinchengda/references/contract-clause-reference-save.md +1 -1
  253. package/skills/weaver-e10-jinchengda/references/contract-request-write.md +1 -1
  254. package/skills/weaver-e10-jinchengda/references/source-manifest.json +29 -29
  255. package/skills/weaver-e10-jucailin/SKILL.md +1 -1
  256. package/skills/weaver-e10-jucailin/references/attend-write.md +2 -2
  257. package/skills/weaver-e10-jucailin/references/recruit-create.md +12 -3
  258. package/skills/weaver-e10-jucailin/references/recruit-write.md +1 -1
  259. package/skills/weaver-e10-meeting/SKILL.md +8 -6
  260. package/skills/weaver-e10-meeting/references/meeting-change.md +1 -1
  261. package/skills/weaver-e10-meeting/references/meeting-create.md +1 -1
  262. package/skills/weaver-e10-meeting/references/meeting-lifecycle.md +1 -1
  263. package/skills/weaver-e10-meeting/references/meeting-verification.md +1 -1
  264. package/skills/weaver-e10-okr/references/okr-align.md +1 -1
  265. package/skills/weaver-e10-okr/references/okr-keyresult.md +1 -1
  266. package/skills/weaver-e10-okr/references/okr-write.md +1 -1
  267. package/skills/weaver-e10-okr/references/source-manifest.json +8 -8
  268. package/skills/weaver-e10-plan/references/plan-report-write.md +1 -1
  269. package/skills/weaver-e10-plan/references/source-manifest.json +20 -20
  270. package/skills/weaver-e10-qiyecheng/references/loan-management.md +1 -1
  271. package/skills/weaver-e10-qiyecheng/references/source-manifest.json +18 -18
  272. package/skills/weaver-e10-reception-flow/SKILL.md +173 -0
  273. package/skills/weaver-e10-reception-flow/assets//350/241/214/347/250/213/345/215/225/346/250/241/346/235/277-/346/263/233/345/276/256.docx +0 -0
  274. package/skills/weaver-e10-reception-flow/data/fields-snapshot.json +213 -0
  275. package/skills/weaver-e10-reception-flow/references/browsertool.md +68 -0
  276. package/skills/weaver-e10-reception-flow/references/env-pitfalls.md +51 -0
  277. package/skills/weaver-e10-reception-flow/references/fields-snapshot.md +227 -0
  278. package/skills/weaver-e10-reception-flow/references/guide.md +179 -0
  279. package/skills/weaver-e10-reception-flow/scripts/locate.sh +14 -0
  280. package/skills/weaver-e10-reception-flow/scripts/render.py +724 -0
  281. package/skills/weaver-e10-recruit-stage/SKILL.md +9 -5
  282. package/skills/weaver-e10-recruit-stage/lib/recruit-xiaoe-file.mjs +1 -1
  283. package/skills/weaver-e10-recruit-stage/lib/xiaoe-session.mjs +66 -0
  284. package/skills/weaver-e10-recruit-stage/references/position-templates.md +202 -0
  285. package/skills/weaver-e10-recruit-stage/references/recruit-jd-create.md +22 -0
  286. package/skills/weaver-e10-recruit-stage/references/recruit-resume-import.md +14 -1
  287. package/skills/weaver-e10-shared/references/e10-auth-and-session.md +6 -0
  288. package/skills/weaver-e10-shijingran/SKILL.md +5 -5
  289. package/skills/weaver-e10-shijingran/references/source-manifest.json +37 -36
  290. package/skills/weaver-e10-skill-maker/references/module-cli-generation.md +2 -0
  291. package/skills/weaver-e10-wenshuding/references/source-manifest.json +3 -3
  292. package/skills/weaver-e10-workflow/references/source-manifest.json +32 -32
  293. package/skills/weaver-e10-yepiaotong/SKILL.md +19 -26
  294. package/skills/weaver-e10-yepiaotong/references/invoice-detail.md +13 -10
  295. package/skills/weaver-e10-yepiaotong/references/invoice-enterprise-list.md +2 -0
  296. package/skills/weaver-e10-yepiaotong/references/invoice-issuing-workflow.md +194 -155
  297. package/skills/weaver-e10-yepiaotong/references/invoice-output-view.md +28 -32
  298. package/skills/weaver-e10-yepiaotong/references/invoice-personal-list.md +5 -1
  299. package/skills/weaver-e10-yepiaotong/references/invoice-reim.md +8 -10
  300. package/skills/weaver-e10-yepiaotong/references/reim-api-reference.md +211 -616
  301. package/skills/weaver-e10-yepiaotong/references/reim-examples.md +149 -117
  302. package/skills/weaver-e10-yepiaotong/references/reim-expense-subject-rules.md +17 -20
  303. package/skills/weaver-e10-yepiaotong/references/reim-form-fill-rules.md +20 -39
  304. package/skills/weaver-e10-yepiaotong/references/reim-matching-rules.md +55 -22
  305. package/skills/weaver-e10-yepiaotong/references/reim-phone-subsidy-rules.md +7 -17
  306. package/skills/weaver-e10-yepiaotong/references/reim-workflow.md +88 -92
  307. package/skills/weaver-e10-yepiaotong/references/source-manifest.json +144 -354
  308. package/skills/weaver-e10-yimiaoban/SKILL.md +1 -1
  309. package/skills/weaver-e10-yimiaoban/references/msg-write.md +1 -1
  310. package/skills/weaver-e10-yimiaoban/references/safety-boundaries.md +1 -1
  311. package/skills/weaver-e10-yimiaoban/references/source-manifest.json +7 -7
  312. package/dist/chunks/chunk-TTPJJJC4.js +0 -465
  313. package/dist/chunks/registry-BKBZPBAJ.js +0 -23
  314. package/dist/shortcuts/invoice/markdown.js +0 -172
  315. package/dist/shortcuts/invoice/operations/issuing-qys.js +0 -424
  316. package/skills/weaver-e10-meeting.zip +0 -0
  317. package/skills/weaver-e10-yepiaotong/references/invoice-issuing-examples.md +0 -131
  318. package/skills/weaver-e10-yepiaotong/references/invoice-issuing-form-fill-rules.md +0 -179
@@ -1,3 +1,4 @@
1
+ import { CONTINUATION_TTL_SECONDS } from '../../../core/continuation-ttl.js';
1
2
  import { InvoiceCliError, invoiceConfirmationError, invoicePartialError, invoiceValidationError, isInvoiceNetworkError } from '../errors.js';
2
3
  import { addPreview, asPositiveString, assertNotDuplicate, detailInfo, getDetail, identityFingerprint, normalizeAddInfo, normalizeScope, objectFingerprint, operateType, preview, reqBase, sessionMatches, workflow, } from './shared.js';
3
4
  export class InvoiceAddPrepareOperation {
@@ -24,7 +25,7 @@ export class InvoiceAddPrepareOperation {
24
25
  preview: addPreview(info, scope, session.baseUrl),
25
26
  normalizedInfo: info,
26
27
  continuation: continuationToken,
27
- expiresInSeconds: 600,
28
+ expiresInSeconds: CONTINUATION_TTL_SECONDS,
28
29
  workflow: workflow('invoice.add', 'AWAITING_CONFIRMATION'),
29
30
  },
30
31
  };
@@ -1,3 +1,4 @@
1
+ import { CONTINUATION_TTL_SECONDS } from '../../../core/continuation-ttl.js';
1
2
  import { InvoiceCliError, invoiceConfirmationError, invoicePartialError, invoiceValidationError, isInvoiceNetworkError } from '../errors.js';
2
3
  import { detailFingerprint, detailInfo, getDetail, normalizeScope, operateType, preview, reqBase, sessionMatches, workflow, } from './shared.js';
3
4
  export class InvoiceDeletePrepareOperation {
@@ -19,7 +20,7 @@ export class InvoiceDeletePrepareOperation {
19
20
  fingerprint: detailFingerprint(info),
20
21
  preview: item,
21
22
  });
22
- return { status: 'AWAITING_CONFIRMATION', data: { preview: item, continuation: continuationToken, expiresInSeconds: 600, workflow: workflow('invoice.delete', 'AWAITING_CONFIRMATION') } };
23
+ return { status: 'AWAITING_CONFIRMATION', data: { preview: item, continuation: continuationToken, expiresInSeconds: CONTINUATION_TTL_SECONDS, workflow: workflow('invoice.delete', 'AWAITING_CONFIRMATION') } };
23
24
  }
24
25
  }
25
26
  export class InvoiceDeleteApplyOperation {
@@ -1,3 +1,4 @@
1
+ import { CONTINUATION_TTL_SECONDS } from '../../../core/continuation-ttl.js';
1
2
  import { InvoiceCliError, invoiceConfirmationError, invoicePartialError, invoiceValidationError, isInvoiceNetworkError } from '../errors.js';
2
3
  import { asPositiveString, detailInfo, getDetail, importOptions, importSource, objectFingerprint, preview, sessionMatches, workflow, } from './shared.js';
3
4
  export class InvoiceImportPrepareOperation {
@@ -34,7 +35,7 @@ export class InvoiceImportPrepareOperation {
34
35
  data: {
35
36
  preview: filePreview,
36
37
  continuation: continuationToken,
37
- expiresInSeconds: 600,
38
+ expiresInSeconds: CONTINUATION_TTL_SECONDS,
38
39
  workflow: workflow('invoice.import', 'AWAITING_CONFIRMATION'),
39
40
  },
40
41
  };
@@ -0,0 +1,86 @@
1
+ import { InvoiceCliError, invoiceValidationError } from '../errors.js';
2
+ const REQUEST_DETAIL_PATH = '/api/workflow/core/paService/v1/getWorkflowRequest';
3
+ /** 合同审批流程里放客户的 Ebuilder 字段;新客户购买合同没有「客户名称」,用「最终用户卡片」。 */
4
+ const CUSTOMER_FIELD_TITLES = ['客户名称', '最终用户卡片'];
5
+ const CONTRACT_FILE_FIELD_TITLE = '合同正文及附件';
6
+ function textValue(value) {
7
+ if (value === undefined || value === null)
8
+ return null;
9
+ const text = String(value).trim();
10
+ return text === '' ? null : text;
11
+ }
12
+ function mainFields(data) {
13
+ const details = data?.formData?.dataDetails;
14
+ return Array.isArray(details) ? details.filter((item) => item?.formField && typeof item.formField === 'object') : [];
15
+ }
16
+ function fieldByTitle(fields, title, componentKey) {
17
+ return fields.find((field) => textValue(field.formField.title) === title && textValue(field.formField.componentKey) === componentKey);
18
+ }
19
+ function customerOf(fields) {
20
+ for (const title of CUSTOMER_FIELD_TITLES) {
21
+ const option = fieldByTitle(fields, title, 'Ebuilder')?.dataOptions?.[0];
22
+ const id = textValue(option?.optionId);
23
+ const name = textValue(option?.content);
24
+ if (id && name)
25
+ return { customer: { id, name }, customerSource: title };
26
+ }
27
+ return { customer: null, customerSource: null };
28
+ }
29
+ function contractDocumentsOf(fields) {
30
+ const options = fieldByTitle(fields, CONTRACT_FILE_FIELD_TITLE, 'FileComponent')?.dataOptions;
31
+ if (!Array.isArray(options))
32
+ return [];
33
+ return options.map((option) => ({
34
+ docId: textValue(option?.optionObj?.docId),
35
+ fileId: textValue(option?.optionObj?.fileid) ?? textValue(option?.optionId),
36
+ name: textValue(option?.content) ?? textValue(option?.optionObj?.name),
37
+ }));
38
+ }
39
+ export class InvoiceIssuingContractDetailOperation {
40
+ name = 'invoice.issuing.contract.detail';
41
+ async execute(input, { host }) {
42
+ const requestId = textValue(input.requestId);
43
+ if (!requestId || !/^\d+$/u.test(requestId)) {
44
+ throw invoiceValidationError('input_invalid', 'requestId 必须是合同审批流程的数字 requestId');
45
+ }
46
+ const session = await host.getSession();
47
+ const result = await host.invoiceRequest({
48
+ path: REQUEST_DETAIL_PATH,
49
+ method: 'POST',
50
+ body: {
51
+ requestId,
52
+ isGetRequestBaseInfo: true,
53
+ isGetRequestLog: false,
54
+ isGetFormData: true,
55
+ isReadRequest: false,
56
+ ...(session.userId ? { userId: session.userId } : {}),
57
+ },
58
+ operation: this.name,
59
+ });
60
+ const errcode = textValue(result?.message?.errcode);
61
+ if (errcode !== null && errcode !== '0') {
62
+ throw new InvoiceCliError('api', 'issuing_contract_detail_failed', textValue(result?.message?.errmsg) ?? `读取合同流程 ${requestId} 失败`, {
63
+ code: errcode,
64
+ exitCode: 1,
65
+ });
66
+ }
67
+ const data = result?.data;
68
+ if (!Array.isArray(data?.formData?.dataDetails)) {
69
+ throw new InvoiceCliError('api', 'issuing_contract_detail_failed', `合同流程 ${requestId} 的详情缺少表单数据,可能没有查看权限`, { exitCode: 1 });
70
+ }
71
+ const fields = mainFields(data);
72
+ const contractDocuments = contractDocumentsOf(fields);
73
+ const docIds = contractDocuments.map((document) => document.docId).filter((docId) => Boolean(docId));
74
+ return {
75
+ status: 'COMPLETE',
76
+ data: {
77
+ requestId,
78
+ requestName: textValue(data.workflowBaseInfo?.requestName),
79
+ workflowName: textValue(data.workflowBaseInfo?.workflowName),
80
+ ...customerOf(fields),
81
+ contractDocuments,
82
+ contractDocIds: docIds.length ? docIds.join(',') : null,
83
+ },
84
+ };
85
+ }
86
+ }
@@ -0,0 +1,210 @@
1
+ import { InvoiceCliError, invoiceValidationError } from '../errors.js';
2
+ import { assertBusinessSuccess } from './shared.js';
3
+ const CONTRACT_DATA_PATH = '/api/ebuilder/form/eblist/getData';
4
+ const PAGE_APP_ID = '846297243998732291';
5
+ const PAGE_ID = '1332949650257698904';
6
+ const COMP_ID = 'd9393fc65f7f49cc870600a78d71bc0e';
7
+ const DETAIL_PAGE_SIZE = 100;
8
+ const MAX_DETAIL_PAGES = 20;
9
+ const MAX_REQUESTS = 50;
10
+ /** 「合同虚拟表」返回行的字段 id。 */
11
+ const FIELD = {
12
+ contractNo: '1201427014149029927',
13
+ seller: '1214704660726972419',
14
+ itemName: '1204384271089598493',
15
+ amount: '1201418617613795454',
16
+ customerName: '1201418170947821738',
17
+ buyerTaxNo: '1201418170947821739',
18
+ group: '1201417526769836172',
19
+ };
20
+ function contractFilter(requestId) {
21
+ return [{
22
+ conditionType: 'and',
23
+ dataType: 'field',
24
+ id: 'd65b6602cd2e4c119beda5f5721e6035',
25
+ conditionComId: `${COMP_ID}_advance_EXCLUDECACHE`,
26
+ filterFields: [{
27
+ compId: COMP_ID,
28
+ compType: 'Workflow',
29
+ dataset: {
30
+ isPhysical: true,
31
+ relationDataset: { groupId: 'weaver-ebuilder-form-service', id: '1201416959744065575', type: 'LOGIC' },
32
+ ebuilderDataConfig: { dataSetup: {}, type: 'FORM' },
33
+ detailTable: false,
34
+ groupId: 'weaver-ebuilder-form-service',
35
+ usage: 'all',
36
+ appId: PAGE_APP_ID,
37
+ id: '1332949650257698828',
38
+ text: '合同虚拟表',
39
+ type: 'LOGIC',
40
+ objType: 'vform',
41
+ },
42
+ fieldName: 'field_1208799170921791564',
43
+ id: '1208799170921791564',
44
+ objId: '1332949650257698828',
45
+ type: 'Workflow',
46
+ text: '合同审批流程',
47
+ }],
48
+ funcType: 'inC',
49
+ value: requestId,
50
+ customSelect: null,
51
+ }];
52
+ }
53
+ function textValue(value) {
54
+ if (value === undefined || value === null)
55
+ return null;
56
+ const text = String(value).trim();
57
+ return text === '' ? null : text;
58
+ }
59
+ function firstText(rows, field) {
60
+ for (const row of rows) {
61
+ const value = textValue(row[field]);
62
+ if (value)
63
+ return value;
64
+ }
65
+ return null;
66
+ }
67
+ function sellerName(rows) {
68
+ for (const row of rows) {
69
+ const sellers = Array.isArray(row[FIELD.seller]) ? row[FIELD.seller] : [];
70
+ const names = sellers.map((seller) => textValue(seller?.name)).filter(Boolean);
71
+ if (names.length)
72
+ return names.join('、');
73
+ }
74
+ return null;
75
+ }
76
+ function amountCents(value, requestId) {
77
+ const text = textValue(value)?.replace(/,/g, '') ?? null;
78
+ if (text === null)
79
+ return 0;
80
+ if (!/^-?\d+(?:\.\d+)?$/u.test(text)) {
81
+ throw new InvoiceCliError('api', 'issuing_amount_invalid', `合同流程 ${requestId} 的开票金额不是数字:${text}`, { exitCode: 1 });
82
+ }
83
+ return Math.round(Number(text) * 100);
84
+ }
85
+ function formatCents(cents) {
86
+ return (cents / 100).toFixed(2);
87
+ }
88
+ /** 把同一合同的开票明细汇总成「是否开票、合同号、客户、开票金额」;明细为空表示已开票。 */
89
+ export function summarizeContractRows(requestId, rows) {
90
+ if (rows.length === 0) {
91
+ return {
92
+ invoiced: true,
93
+ contractNo: null,
94
+ customerName: null,
95
+ buyerTaxNo: null,
96
+ sellerName: null,
97
+ invoiceAmount: null,
98
+ invoiceGroups: [],
99
+ };
100
+ }
101
+ const groups = new Map();
102
+ let totalCents = 0;
103
+ for (const row of rows) {
104
+ const group = textValue(row[FIELD.group]);
105
+ const cents = amountCents(row[FIELD.amount], requestId);
106
+ totalCents += cents;
107
+ const key = group ?? '';
108
+ const entry = groups.get(key) ?? { group, cents: 0, items: [] };
109
+ entry.cents += cents;
110
+ entry.items.push({ name: textValue(row[FIELD.itemName]), amount: formatCents(cents) });
111
+ groups.set(key, entry);
112
+ }
113
+ return {
114
+ invoiced: false,
115
+ contractNo: firstText(rows, FIELD.contractNo),
116
+ customerName: firstText(rows, FIELD.customerName),
117
+ buyerTaxNo: firstText(rows, FIELD.buyerTaxNo),
118
+ sellerName: sellerName(rows),
119
+ invoiceAmount: formatCents(totalCents),
120
+ invoiceGroups: [...groups.values()].map(({ group, cents, items }) => ({ group, amount: formatCents(cents), items })),
121
+ };
122
+ }
123
+ function requestIdOf(value, location) {
124
+ const requestId = textValue(value);
125
+ if (!requestId || !/^\d+$/u.test(requestId)) {
126
+ throw invoiceValidationError('input_invalid', `${location} 必须是数字 requestId`);
127
+ }
128
+ return requestId;
129
+ }
130
+ function inputCards(input) {
131
+ const { cards, requestIds } = input;
132
+ if (cards !== undefined && requestIds !== undefined) {
133
+ throw invoiceValidationError('input_ambiguous', 'cards 与 requestIds 只能提供一个');
134
+ }
135
+ let result;
136
+ if (cards !== undefined) {
137
+ if (!Array.isArray(cards))
138
+ throw invoiceValidationError('input_invalid', 'cards 必须是 workflow.search 返回的 data.cards 数组');
139
+ result = cards.map((card, index) => {
140
+ if (!card || typeof card !== 'object' || Array.isArray(card)) {
141
+ throw invoiceValidationError('input_invalid', `cards[${index}] 必须是对象`);
142
+ }
143
+ return { ...card, requestId: requestIdOf(card.requestId, `cards[${index}].requestId`) };
144
+ });
145
+ }
146
+ else {
147
+ const ids = typeof requestIds === 'string' ? requestIds.split(',') : requestIds;
148
+ if (!Array.isArray(ids))
149
+ throw invoiceValidationError('input_invalid', '必须提供 cards 或 requestIds');
150
+ result = ids.map((id, index) => ({ requestId: requestIdOf(id, `requestIds[${index}]`) }));
151
+ }
152
+ if (result.length === 0)
153
+ throw invoiceValidationError('input_invalid', 'cards / requestIds 不能为空');
154
+ if (result.length > MAX_REQUESTS)
155
+ throw invoiceValidationError('input_invalid', `一次最多查询 ${MAX_REQUESTS} 个合同流程`);
156
+ return result;
157
+ }
158
+ export class InvoiceIssuingContractsListOperation {
159
+ name = 'invoice.issuing.contracts.list';
160
+ async execute(input, { host }) {
161
+ const cards = inputCards(input);
162
+ const summaries = new Map();
163
+ for (const { requestId } of cards) {
164
+ if (summaries.has(requestId))
165
+ continue;
166
+ const rows = await this.contractRows(host, requestId);
167
+ summaries.set(requestId, summarizeContractRows(requestId, rows));
168
+ }
169
+ const merged = cards.map((card) => ({ ...card, ...summaries.get(card.requestId) }));
170
+ const pendingCount = merged.filter((card) => card.invoiced === false).length;
171
+ return {
172
+ status: 'COMPLETE',
173
+ data: {
174
+ cards: merged,
175
+ count: merged.length,
176
+ pendingCount,
177
+ invoicedCount: merged.length - pendingCount,
178
+ },
179
+ };
180
+ }
181
+ async contractRows(host, requestId) {
182
+ const rows = [];
183
+ for (let pageNo = 1; pageNo <= MAX_DETAIL_PAGES; pageNo += 1) {
184
+ const result = await host.invoiceMultipartRequest({
185
+ path: CONTRACT_DATA_PATH,
186
+ method: 'POST',
187
+ fields: {
188
+ filter: contractFilter(requestId),
189
+ fieldFilter: {},
190
+ pageFilter: { filter: {}, filterIsNull: true, esbFilter: [] },
191
+ pageAppId: PAGE_APP_ID,
192
+ compId: COMP_ID,
193
+ pageId: PAGE_ID,
194
+ pageNo: String(pageNo),
195
+ pageSize: String(DETAIL_PAGE_SIZE),
196
+ },
197
+ operation: this.name,
198
+ });
199
+ assertBusinessSuccess(result, 'issuing_contracts_query_failed', `查询合同流程 ${requestId} 的开票数据失败`);
200
+ const list = result?.data?.list;
201
+ if (!Array.isArray(list)) {
202
+ throw new InvoiceCliError('api', 'issuing_contracts_query_failed', `合同流程 ${requestId} 的开票数据返回缺少 data.list`, { exitCode: 1 });
203
+ }
204
+ rows.push(...list);
205
+ if (list.length < DETAIL_PAGE_SIZE)
206
+ return rows;
207
+ }
208
+ throw new InvoiceCliError('api', 'issuing_contracts_too_many_rows', `合同流程 ${requestId} 的开票明细超过 ${DETAIL_PAGE_SIZE * MAX_DETAIL_PAGES} 行`, { exitCode: 1 });
209
+ }
210
+ }
@@ -1,16 +1,17 @@
1
1
  import { invoiceValidationError } from '../errors.js';
2
- import { invoiceOperations } from '../manifest.js';
2
+ import { invoiceOperations, invoiceRetiredOperations } from '../manifest.js';
3
3
  import { InvoiceAddApplyOperation, InvoiceAddPrepareOperation } from './add.js';
4
4
  import { InvoiceBrowseFieldDataOperation } from './browse-field.js';
5
5
  import { InvoiceDeleteApplyOperation, InvoiceDeletePrepareOperation } from './delete.js';
6
6
  import { InvoiceDownloadOperation } from './download.js';
7
7
  import { InvoiceGetOperation } from './get.js';
8
8
  import { InvoiceImportApplyOperation, InvoiceImportPrepareOperation } from './import.js';
9
- import { InvoiceIssuingQysListOperation } from './issuing-qys.js';
9
+ import { InvoiceIssuingContractDetailOperation } from './issuing-contract-detail.js';
10
+ import { InvoiceIssuingContractsListOperation } from './issuing-contracts.js';
10
11
  import { InvoiceListOperation } from './list.js';
11
12
  import { InvoiceOcrPreviewOperation } from './ocr-preview.js';
12
- import { InvoiceReimEmployeeSuperiorsOperation, InvoiceReimFieldSearchOperation, InvoiceReimFileOcrPreviewOperation, InvoiceReimFlowCreateApplyOperation, InvoiceReimFlowCreatePrepareOperation, InvoiceReimFlowUpdateApplyOperation, InvoiceReimFlowUpdatePrepareOperation, InvoiceReimFormStructureOperation, InvoiceReimRequestsListOperation, InvoiceReimRowInfoBatchOperation, InvoiceReimRowInfoOperation, InvoiceReimWorkflowResolveOperation, } from './reim.js';
13
- import { InvoiceReimCandidatesListOperation, InvoiceReimFlowCreateAutoPrepareOperation, InvoiceReimTemplateBuildOperation, } from './reim-auto.js';
13
+ import { InvoiceReimEmployeeSuperiorsOperation, InvoiceReimFieldSearchOperation, InvoiceReimFileOcrPreviewOperation, InvoiceReimRequestsListOperation, InvoiceReimWorkflowResolveOperation, } from './reim.js';
14
+ import { InvoiceReimCandidatesListOperation } from './reim-auto.js';
14
15
  import { InvoiceUpdateApplyOperation, InvoiceUpdatePrepareOperation } from './update.js';
15
16
  import { InvoiceUploadOperation } from './upload.js';
16
17
  import { InvoiceUploadAndValidateOperation } from './upload-and-validate.js';
@@ -39,18 +40,10 @@ function buildRegistry() {
39
40
  new InvoiceReimRequestsListOperation(),
40
41
  new InvoiceReimWorkflowResolveOperation(),
41
42
  new InvoiceReimCandidatesListOperation(),
42
- new InvoiceReimTemplateBuildOperation(),
43
- new InvoiceReimFlowCreateAutoPrepareOperation(),
44
- new InvoiceReimFormStructureOperation(),
45
- new InvoiceReimRowInfoOperation(),
46
- new InvoiceReimRowInfoBatchOperation(),
47
43
  new InvoiceReimEmployeeSuperiorsOperation(),
48
44
  new InvoiceReimFieldSearchOperation(),
49
- new InvoiceReimFlowCreatePrepareOperation(),
50
- new InvoiceReimFlowCreateApplyOperation(),
51
- new InvoiceReimFlowUpdatePrepareOperation(),
52
- new InvoiceReimFlowUpdateApplyOperation(),
53
- new InvoiceIssuingQysListOperation(),
45
+ new InvoiceIssuingContractsListOperation(),
46
+ new InvoiceIssuingContractDetailOperation(),
54
47
  ];
55
48
  for (const handler of handlers) {
56
49
  if (registry.has(handler.name))
@@ -61,13 +54,20 @@ function buildRegistry() {
61
54
  if (!registry.has(contract.name))
62
55
  throw new Error(`missing invoice operation handler: ${contract.name}`);
63
56
  }
57
+ for (const retired of invoiceRetiredOperations) {
58
+ if (registry.has(retired.name))
59
+ throw new Error(`retired invoice operation is still registered: ${retired.name}`);
60
+ }
64
61
  return registry;
65
62
  }
66
63
  const invoiceOperationRegistry = buildRegistry();
67
64
  export function getInvoiceOperation(operation) {
68
65
  const handler = invoiceOperationRegistry.get(operation);
69
- if (!handler) {
70
- throw invoiceValidationError('operation_unknown', `业票通不支持操作:${operation}`);
66
+ if (handler)
67
+ return handler;
68
+ const retired = invoiceRetiredOperations.find((item) => item.name === operation);
69
+ if (retired) {
70
+ throw invoiceValidationError('operation_retired', `业票通不支持操作:${operation}(已下线)。${retired.replacement};详见 weaver-e10-yepiaotong 的 ${retired.reference}`, { operation, replacement: retired.replacement, reference: retired.reference });
71
71
  }
72
- return handler;
72
+ throw invoiceValidationError('operation_unknown', `业票通不支持操作:${operation}`);
73
73
  }