weaver-work-cli 0.1.40 → 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 (401) hide show
  1. package/README.md +17 -0
  2. package/dist/chunks/{archive-JHTONRST.js → archive-P6TBQGKL.js} +13 -5
  3. package/dist/chunks/{archive-oa-FCHLCPHC.js → archive-oa-7TQ2NXOH.js} +12 -5
  4. package/dist/chunks/{asset-RLIHC7DB.js → asset-3ELRG37G.js} +11 -4
  5. package/dist/chunks/{asset-idle-KVOFTLCP.js → asset-idle-WIGMUFMD.js} +7 -3
  6. package/dist/chunks/{attachment-content-RZYDB3MB.js → attachment-content-E3276UOV.js} +5 -4
  7. package/dist/chunks/{blog-42OZTJNP.js → blog-C5NMZAAC.js} +11 -4
  8. package/dist/chunks/{caizhilian-KRK547K5.js → caizhilian-5XSM2DFP.js} +13 -6
  9. package/dist/chunks/{calendar-RTWAMKHD.js → calendar-FI2WNSBO.js} +71 -26
  10. package/dist/chunks/{chunk-CXRQWOZ5.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-LN447PY2.js → chunk-BCVYBYYT.js} +432 -2247
  16. package/dist/chunks/{chunk-7E6MUOEK.js → chunk-CWYGFU5B.js} +2 -2
  17. package/dist/chunks/{chunk-NOODWMCL.js → chunk-D4ADSZ7H.js} +1 -1
  18. package/dist/chunks/{chunk-WFFNM65B.js → chunk-ETNJSKMM.js} +281 -29
  19. package/dist/chunks/{chunk-CAQNBBQA.js → chunk-F4E4EM35.js} +3 -3
  20. package/dist/chunks/{chunk-4CTESSKI.js → chunk-FAZTGX7S.js} +6 -6
  21. package/dist/chunks/chunk-FRZKBMSW.js +2562 -0
  22. package/dist/chunks/{chunk-BYBSCN4X.js → chunk-G7PQWD4L.js} +6 -3
  23. package/dist/chunks/{chunk-NJKREDA3.js → chunk-GAMZLAG2.js} +1 -1
  24. package/dist/chunks/{chunk-FLS4DPGP.js → chunk-GM6J7Q4B.js} +28 -15
  25. package/dist/chunks/{chunk-NETCCARD.js → chunk-GRDRG6HP.js} +3 -3
  26. package/dist/chunks/chunk-HIT4Y6OI.js +1238 -0
  27. package/dist/chunks/{chunk-EZALDOQH.js → chunk-HP7JIYMT.js} +5 -2
  28. package/dist/chunks/{chunk-IZSSVYAG.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-57IECMWX.js → chunk-N4M2DDFE.js} +29 -15
  32. package/dist/chunks/{chunk-JWRZM2H2.js → chunk-OF4S23UB.js} +4 -4
  33. package/dist/chunks/{chunk-VNBU55SL.js → chunk-PC7VKEB5.js} +80 -2458
  34. package/dist/chunks/{chunk-G2JSIUWF.js → chunk-PUQS5MWL.js} +91 -2
  35. package/dist/chunks/{chunk-E7OK5WD5.js → chunk-Q4OYAQYH.js} +5 -5
  36. package/dist/chunks/{chunk-7BRU4EFH.js → chunk-QVSWRLLU.js} +35 -6
  37. package/dist/chunks/{chunk-T6EGVBKU.js → chunk-TA7FXXJD.js} +6 -3
  38. package/dist/chunks/{chunk-GPMFD4RD.js → chunk-TXUG266F.js} +1 -1
  39. package/dist/chunks/{chunk-4TEDNCON.js → chunk-UFIT2UU3.js} +354 -56
  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-7U577Q7U.js → chunk-WSF4NNMR.js} +3 -3
  44. package/dist/chunks/chunk-XHK4MDR5.js +2497 -0
  45. package/dist/chunks/{chunk-LFMSDBZN.js → chunk-XNIK66I4.js} +326 -161
  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-I566ZYNF.js → chunk-Z7VYWPZV.js} +1 -1
  49. package/dist/chunks/{conflict-VR55AOOO.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-HI4FNPYE.js → contract-DNIIW5VJ.js} +13 -5
  55. package/dist/chunks/{cowork-HJLI353D.js → cowork-GMLRGVIW.js} +31 -14
  56. package/dist/chunks/create-flow-J22BO65E.js +56 -0
  57. package/dist/chunks/{ebuilder-form-HTGI63UU.js → ebuilder-form-ANV2FHYV.js} +12 -7
  58. package/dist/chunks/{ehr-GYXIYH3A.js → ehr-GSTGAIY3.js} +695 -1255
  59. package/dist/chunks/{employee-SAK2QYXX.js → employee-22BGJ3QS.js} +3 -3
  60. package/dist/chunks/{env-DW3G4HUO.js → env-BX3VRFS7.js} +4 -3
  61. package/dist/chunks/{esb-I5INCEFE.js → esb-ATAIASX2.js} +12 -7
  62. package/dist/chunks/{factory-TKXGXS6L.js → factory-PETTFME6.js} +3 -2
  63. package/dist/chunks/{fna-K2MHTQ24.js → fna-YEKBSFSX.js} +14 -8
  64. package/dist/chunks/{group-chat-VYBNMJLG.js → group-chat-BFVXAYFX.js} +7 -4
  65. package/dist/chunks/{host-D5SERMAJ.js → host-HRBXEPDQ.js} +5 -5
  66. package/dist/chunks/{host-JM4YVHFM.js → host-LR55CTHP.js} +5 -5
  67. package/dist/chunks/{host-L3VLITMT.js → host-SUOY6VYQ.js} +5 -5
  68. package/dist/chunks/{host-ZUQTJYYK.js → host-SZGV4UNT.js} +5 -5
  69. package/dist/chunks/{host-256GVCAH.js → host-WIKN2EJ5.js} +5 -5
  70. package/dist/chunks/{hrm-VLRBKTZB.js → hrm-NRDO4W5G.js} +11 -7
  71. package/dist/chunks/{im-QK3VTLXK.js → im-IQ2HN23S.js} +11 -10
  72. package/dist/chunks/{invoice-T5JTA32H.js → invoice-MNRW76PP.js} +636 -1768
  73. package/dist/chunks/{jiuchuanhui-P2FNEQVZ.js → jiuchuanhui-DTRBAX4N.js} +14 -6
  74. package/dist/chunks/{lazy-dispatch-XRRI46M6.js → lazy-dispatch-ZVWAI25B.js} +7 -6
  75. package/dist/chunks/{mail-3Y7MJ6PS.js → mail-ZVAUXOJA.js} +16 -14
  76. package/dist/chunks/{meeting-M7LTXGJE.js → meeting-FEVPZ67S.js} +21 -13
  77. package/dist/chunks/{okr-OBC6S67L.js → okr-SDH3E5RA.js} +12 -5
  78. package/dist/chunks/{operations-5QL3AECO.js → operations-62N6EP3C.js} +4 -3
  79. package/dist/chunks/{plan-5H6I53SK.js → plan-E35JFDI7.js} +12 -5
  80. package/dist/chunks/{project-L75QZV4S.js → project-73QXBAB2.js} +49 -25
  81. package/dist/chunks/reception-UWZVACBN.js +1899 -0
  82. package/dist/chunks/recruit-stage-4MAOCKFY.js +4770 -0
  83. package/dist/chunks/registry-IM5G23LS.js +24 -0
  84. package/dist/chunks/{registry-UGRBCBHO.js → registry-JDUS4E7D.js} +7 -6
  85. package/dist/chunks/{registry-RXPN6BBT.js → registry-KNKSCJNT.js} +7 -6
  86. package/dist/chunks/{registry-NYPYMZXG.js → registry-PO7SI256.js} +4 -4
  87. package/dist/chunks/{registry-QGHFNUWS.js → registry-PVUZQDDQ.js} +3 -3
  88. package/dist/chunks/{room-recommend-A3UDC3CA.js → room-recommend-H7KLXA5R.js} +6 -5
  89. package/dist/chunks/{schedule-5GCACCK7.js → schedule-ESZIBAUO.js} +6 -5
  90. package/dist/chunks/{workflow-M5ZJ7DWF.js → workflow-CWJFJLQU.js} +15 -10
  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 +41 -30
  98. package/dist/internal/e10/auth/commands.js +164 -8
  99. package/dist/internal/e10/auth/error-log.js +182 -0
  100. package/dist/internal/e10/auth/messages.js +6 -0
  101. package/dist/internal/e10/auth/session.js +34 -3
  102. package/dist/internal/e10/auth/xiaoe.js +286 -44
  103. package/dist/internal/e10/auth-recovery.js +72 -14
  104. package/dist/internal/e10/context.js +72 -13
  105. package/dist/internal/e10/index.js +1 -1
  106. package/dist/internal/e10/network-error.js +93 -0
  107. package/dist/internal/e10/request-runtime.js +6 -0
  108. package/dist/internal/skills/install.js +9 -1
  109. package/dist/shortcuts/archive/continuation.js +2 -1
  110. package/dist/shortcuts/archive/index.js +3 -0
  111. package/dist/shortcuts/archive/operations/confirm.js +2 -1
  112. package/dist/shortcuts/archive-oa/continuation.js +2 -1
  113. package/dist/shortcuts/archive-oa/index.js +2 -0
  114. package/dist/shortcuts/archive-oa/operations/confirm.js +2 -1
  115. package/dist/shortcuts/asset/continuation.js +2 -1
  116. package/dist/shortcuts/asset/index.js +2 -0
  117. package/dist/shortcuts/asset-idle/index.js +2 -0
  118. package/dist/shortcuts/blog/continuation.js +2 -1
  119. package/dist/shortcuts/blog/index.js +2 -0
  120. package/dist/shortcuts/caizhilian/continuation.js +2 -1
  121. package/dist/shortcuts/caizhilian/index.js +2 -0
  122. package/dist/shortcuts/caizhilian/operations/confirm.js +3 -2
  123. package/dist/shortcuts/calendar/continuation.js +2 -1
  124. package/dist/shortcuts/calendar/index.js +2 -0
  125. package/dist/shortcuts/calendar/operations/read.js +31 -22
  126. package/dist/shortcuts/calendar/operations/write.js +46 -2
  127. package/dist/shortcuts/contract/continuation.js +2 -1
  128. package/dist/shortcuts/contract/index.js +2 -0
  129. package/dist/shortcuts/contract/operations/write.js +2 -1
  130. package/dist/shortcuts/cowork/continuation.js +2 -1
  131. package/dist/shortcuts/cowork/index.js +2 -0
  132. package/dist/shortcuts/cowork/operations/discuss-write.js +5 -1
  133. package/dist/shortcuts/cowork/operations/item-write.js +1 -7
  134. package/dist/shortcuts/cowork/operations/member-write.js +3 -1
  135. package/dist/shortcuts/cowork/operations/permission-write.js +5 -1
  136. package/dist/shortcuts/cowork/operations/shared.js +7 -0
  137. package/dist/shortcuts/ebuilder-form/continuation.js +2 -1
  138. package/dist/shortcuts/ebuilder-form/index.js +2 -0
  139. package/dist/shortcuts/ebuilder-form/operations/write.js +3 -2
  140. package/dist/shortcuts/ehr/continuation.js +2 -1
  141. package/dist/shortcuts/ehr/index.js +2 -0
  142. package/dist/shortcuts/ehr/operations/attend-write.js +44 -2
  143. package/dist/shortcuts/ehr/operations/hr-contact.js +7 -4
  144. package/dist/shortcuts/ehr/operations/hr-report.js +13 -7
  145. package/dist/shortcuts/ehr/operations/recruit-candidate-import.js +317 -63
  146. package/dist/shortcuts/ehr/operations/recruit-position.js +134 -2
  147. package/dist/shortcuts/ehr/operations/recruit-write.js +263 -18
  148. package/dist/shortcuts/ehr/operations/recruit.js +10 -4
  149. package/dist/shortcuts/ehr/operations/shared.js +47 -0
  150. package/dist/shortcuts/esb/continuation.js +2 -1
  151. package/dist/shortcuts/esb/index.js +2 -0
  152. package/dist/shortcuts/esb/operations/trigger.js +2 -1
  153. package/dist/shortcuts/fna/continuation.js +2 -1
  154. package/dist/shortcuts/fna/index.js +2 -0
  155. package/dist/shortcuts/fna/operations/invoice-writeoff.js +1 -1
  156. package/dist/shortcuts/fna/operations/loan.js +1 -1
  157. package/dist/shortcuts/hrm/index.js +2 -0
  158. package/dist/shortcuts/hrm/operations/org.js +118 -0
  159. package/dist/shortcuts/im/continuation.js +2 -1
  160. package/dist/shortcuts/index.js +10 -0
  161. package/dist/shortcuts/invoice/continuation.js +2 -1
  162. package/dist/shortcuts/invoice/index.js +14 -15
  163. package/dist/shortcuts/invoice/invoice-record.js +93 -0
  164. package/dist/shortcuts/invoice/manifest.js +190 -393
  165. package/dist/shortcuts/invoice/operations/add.js +2 -1
  166. package/dist/shortcuts/invoice/operations/delete.js +2 -1
  167. package/dist/shortcuts/invoice/operations/import.js +2 -1
  168. package/dist/shortcuts/invoice/operations/issuing-contract-detail.js +86 -0
  169. package/dist/shortcuts/invoice/operations/issuing-contracts.js +210 -0
  170. package/dist/shortcuts/invoice/operations/registry.js +17 -17
  171. package/dist/shortcuts/invoice/operations/reim-auto.js +4 -569
  172. package/dist/shortcuts/invoice/operations/reim.js +52 -341
  173. package/dist/shortcuts/invoice/operations/shared.js +21 -4
  174. package/dist/shortcuts/invoice/operations/update.js +2 -1
  175. package/dist/shortcuts/invoice/projection.js +10 -62
  176. package/dist/shortcuts/jiuchuanhui/continuation.js +2 -1
  177. package/dist/shortcuts/jiuchuanhui/index.js +2 -0
  178. package/dist/shortcuts/jiuchuanhui/operations/datajson.js +2 -1
  179. package/dist/shortcuts/jiuchuanhui/operations/esb.js +2 -1
  180. package/dist/shortcuts/mail/continuation.js +2 -1
  181. package/dist/shortcuts/mail/index.js +2 -0
  182. package/dist/shortcuts/mail/operations/mail-blacklist.js +1 -1
  183. package/dist/shortcuts/mail/operations/mail-contacts.js +1 -1
  184. package/dist/shortcuts/mail/operations/mail-send.js +1 -1
  185. package/dist/shortcuts/mail/operations/mail-sign.js +1 -1
  186. package/dist/shortcuts/mail/operations/mail-template.js +1 -1
  187. package/dist/shortcuts/meeting/continuation.js +2 -1
  188. package/dist/shortcuts/meeting/index.js +2 -0
  189. package/dist/shortcuts/meeting/operations/change.js +1 -1
  190. package/dist/shortcuts/meeting/operations/create.js +1 -1
  191. package/dist/shortcuts/meeting/operations/eb/catalog.js +4 -1
  192. package/dist/shortcuts/meeting/operations/eb/create-flow.js +101 -35
  193. package/dist/shortcuts/meeting/operations/eb/decision.js +1 -1
  194. package/dist/shortcuts/meeting/operations/eb/factory.js +34 -1
  195. package/dist/shortcuts/meeting/operations/eb/group-chat.js +25 -3
  196. package/dist/shortcuts/meeting/operations/eb/person-cache.js +96 -0
  197. package/dist/shortcuts/meeting/operations/eb/room-recommend.js +33 -11
  198. package/dist/shortcuts/meeting/operations/lifecycle.js +1 -1
  199. package/dist/shortcuts/meeting/operations/receipts.js +1 -1
  200. package/dist/shortcuts/meeting/operations/signs.js +1 -1
  201. package/dist/shortcuts/okr/continuation.js +2 -1
  202. package/dist/shortcuts/okr/index.js +2 -0
  203. package/dist/shortcuts/okr/operations/write.js +1 -1
  204. package/dist/shortcuts/plan/continuation.js +2 -1
  205. package/dist/shortcuts/plan/index.js +2 -0
  206. package/dist/shortcuts/plan/operations/write.js +1 -1
  207. package/dist/shortcuts/project/continuation.js +2 -1
  208. package/dist/shortcuts/project/index.js +2 -0
  209. package/dist/shortcuts/project/operations/read.js +6 -25
  210. package/dist/shortcuts/project/operations/shared.js +22 -0
  211. package/dist/shortcuts/project/operations/write.js +28 -2
  212. package/dist/shortcuts/reception/constants.js +53 -0
  213. package/dist/shortcuts/reception/errors.js +54 -0
  214. package/dist/shortcuts/reception/host.js +125 -0
  215. package/dist/shortcuts/reception/index.js +198 -0
  216. package/dist/shortcuts/reception/manifest.js +177 -0
  217. package/dist/shortcuts/reception/operations/ask.js +71 -0
  218. package/dist/shortcuts/reception/operations/browsertool.js +58 -0
  219. package/dist/shortcuts/reception/operations/compose.js +129 -0
  220. package/dist/shortcuts/reception/operations/customparams.js +74 -0
  221. package/dist/shortcuts/reception/operations/doc.js +238 -0
  222. package/dist/shortcuts/reception/operations/docrender.js +36 -0
  223. package/dist/shortcuts/reception/operations/panels.js +179 -0
  224. package/dist/shortcuts/reception/operations/registry.js +26 -0
  225. package/dist/shortcuts/reception/operations/render-assets.js +184 -0
  226. package/dist/shortcuts/reception/operations/render.js +123 -0
  227. package/dist/shortcuts/reception/operations/runs.js +38 -0
  228. package/dist/shortcuts/reception/operations/schedule.js +127 -0
  229. package/dist/shortcuts/reception/operations/shared.js +196 -0
  230. package/dist/shortcuts/reception/operations/snapshot.js +68 -0
  231. package/dist/shortcuts/reception/operations/types.js +1 -0
  232. package/dist/shortcuts/reception/operations.js +33 -0
  233. package/dist/shortcuts/reception/upload.js +218 -0
  234. package/dist/shortcuts/recruit-stage/context.js +231 -0
  235. package/dist/shortcuts/recruit-stage/continuation.js +74 -0
  236. package/dist/shortcuts/recruit-stage/errors.js +65 -0
  237. package/dist/shortcuts/recruit-stage/host.js +109 -0
  238. package/dist/shortcuts/recruit-stage/index.js +115 -0
  239. package/dist/shortcuts/recruit-stage/manifest.js +29 -0
  240. package/dist/shortcuts/recruit-stage/operations/interview-arrange.js +722 -0
  241. package/dist/shortcuts/recruit-stage/operations/interview-feedback.js +269 -0
  242. package/dist/shortcuts/recruit-stage/operations/jd-create.js +719 -0
  243. package/dist/shortcuts/recruit-stage/operations/list.js +431 -0
  244. package/dist/shortcuts/recruit-stage/operations/registry.js +38 -0
  245. package/dist/shortcuts/recruit-stage/operations/resume-import.js +1354 -0
  246. package/dist/shortcuts/recruit-stage/operations/search.js +158 -0
  247. package/dist/shortcuts/recruit-stage/operations/types.js +25 -0
  248. package/dist/shortcuts/recruit-stage/school-tiers.json +318 -0
  249. package/dist/shortcuts/recruit-stage/shared.js +608 -0
  250. package/dist/shortcuts/workflow/continuation.js +2 -1
  251. package/dist/shortcuts/workflow/index.js +2 -0
  252. package/dist/shortcuts/workflow/operations/form.js +32 -8
  253. package/dist/shortcuts/workflow/operations/todoSmartConvert/detailFieldRules.js +4 -2
  254. package/dist/shortcuts/workflow/operations/todoSmartConvert/summaryCache.js +13 -6
  255. package/dist/shortcuts/workflow/operations/todoSmartConvert/todoDetailCache.js +17 -24
  256. package/dist/shortcuts/workflow/operations/todoSmartConvert/todoDetailFetcher.js +14 -9
  257. package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.collect.js +50 -8
  258. package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.core.js +2 -1
  259. package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.detail.js +17 -11
  260. package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.group.js +7 -39
  261. package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.groupSummary.js +3 -2
  262. package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.js +51 -15
  263. package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.pipeline.js +16 -1
  264. package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.smartGroup.js +151 -63
  265. package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.subGroup.js +56 -0
  266. package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.summary.js +39 -14
  267. package/dist/shortcuts/workflow/operations/write.js +1 -1
  268. package/docs/_catalog.md +3 -0
  269. package/docs/agent-invoice.md +1 -1
  270. package/docs/archive-oa.md +1 -1
  271. package/docs/caizhilian.md +1 -1
  272. package/docs/calendar.md +1 -1
  273. package/docs/contract.md +1 -1
  274. package/docs/e10-auth.md +23 -1
  275. package/docs/ehr.md +2 -2
  276. package/docs/esb.md +1 -1
  277. package/docs/im.md +1 -1
  278. package/docs/invoice.md +8 -12
  279. package/docs/okr.md +1 -1
  280. package/docs/operation-manual.md +8 -0
  281. package/docs/reception.md +119 -0
  282. package/package.json +1 -1
  283. package/scripts/clean.mjs +43 -2
  284. package/scripts/install-skill-to-xiaoe.mjs +105 -0
  285. package/scripts/package-skill.mjs +4 -2
  286. package/skill-template/business-info.json +42 -2
  287. package/skill-template/domains/caizhilian.md +1 -1
  288. package/skill-template/domains/reception-flow.md +18 -0
  289. package/skill-template/domains/recruit-stage.md +29 -0
  290. package/skill-template/domains/yepiaotong.md +4 -7
  291. package/skills/weaver-e10-archive-oa/references/source-manifest.json +14 -14
  292. package/skills/weaver-e10-blog/references/blog-publish.md +1 -1
  293. package/skills/weaver-e10-blog/references/source-manifest.json +7 -7
  294. package/skills/weaver-e10-caizhilian/references/source-manifest.json +21 -21
  295. package/skills/weaver-e10-caizhilian/references/write-protocol.md +2 -2
  296. package/skills/weaver-e10-calendar/SKILL.md +2 -1
  297. package/skills/weaver-e10-calendar/references/calendar-write.md +55 -1
  298. package/skills/weaver-e10-cowork/SKILL.md +1 -1
  299. package/skills/weaver-e10-cowork/references/cowork-write.md +3 -1
  300. package/skills/weaver-e10-ebuilder-form/SKILL.md +1 -1
  301. package/skills/weaver-e10-ebuilder-form/references/custom-api.md +1 -1
  302. package/skills/weaver-e10-ebuilder-form/references/openapi-write.md +1 -1
  303. package/skills/weaver-e10-esb/SKILL.md +2 -2
  304. package/skills/weaver-e10-esb/references/source-manifest.json +22 -22
  305. package/skills/weaver-e10-esb/references/trigger.md +2 -2
  306. package/skills/weaver-e10-jinchengda/references/contract-clause-library-crud.md +1 -1
  307. package/skills/weaver-e10-jinchengda/references/contract-clause-reference-save.md +1 -1
  308. package/skills/weaver-e10-jinchengda/references/contract-request-write.md +1 -1
  309. package/skills/weaver-e10-jinchengda/references/source-manifest.json +29 -29
  310. package/skills/weaver-e10-jucailin/SKILL.md +1 -1
  311. package/skills/weaver-e10-jucailin/references/attend-write.md +10 -2
  312. package/skills/weaver-e10-jucailin/references/hr-contact.md +8 -0
  313. package/skills/weaver-e10-jucailin/references/hr-report.md +8 -0
  314. package/skills/weaver-e10-jucailin/references/recruit-create.md +14 -5
  315. package/skills/weaver-e10-jucailin/references/recruit-read.md +1 -1
  316. package/skills/weaver-e10-jucailin/references/recruit-write.md +5 -4
  317. package/skills/weaver-e10-mail/SKILL.md +1 -1
  318. package/skills/weaver-e10-meeting/SKILL.md +39 -7
  319. package/skills/weaver-e10-meeting/references/meeting-change.md +1 -1
  320. package/skills/weaver-e10-meeting/references/meeting-create.md +1 -1
  321. package/skills/weaver-e10-meeting/references/meeting-lifecycle.md +1 -1
  322. package/skills/weaver-e10-meeting/references/meeting-verification.md +1 -1
  323. package/skills/weaver-e10-okr/references/okr-align.md +1 -1
  324. package/skills/weaver-e10-okr/references/okr-keyresult.md +1 -1
  325. package/skills/weaver-e10-okr/references/okr-write.md +1 -1
  326. package/skills/weaver-e10-okr/references/source-manifest.json +8 -8
  327. package/skills/weaver-e10-plan/references/plan-report-write.md +1 -1
  328. package/skills/weaver-e10-plan/references/source-manifest.json +20 -20
  329. package/skills/weaver-e10-qiyecheng/references/loan-management.md +1 -1
  330. package/skills/weaver-e10-qiyecheng/references/source-manifest.json +18 -18
  331. package/skills/weaver-e10-reception-flow/SKILL.md +173 -0
  332. 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
  333. package/skills/weaver-e10-reception-flow/data/fields-snapshot.json +213 -0
  334. package/skills/weaver-e10-reception-flow/references/browsertool.md +68 -0
  335. package/skills/weaver-e10-reception-flow/references/env-pitfalls.md +51 -0
  336. package/skills/weaver-e10-reception-flow/references/fields-snapshot.md +227 -0
  337. package/skills/weaver-e10-reception-flow/references/guide.md +179 -0
  338. package/skills/weaver-e10-reception-flow/scripts/locate.sh +14 -0
  339. package/skills/weaver-e10-reception-flow/scripts/render.py +724 -0
  340. package/skills/weaver-e10-recruit-stage/SKILL.md +230 -0
  341. package/skills/weaver-e10-recruit-stage/agents/openai.yaml +119 -0
  342. package/skills/weaver-e10-recruit-stage/lib/recruit-xiaoe-file.mjs +188 -0
  343. package/skills/weaver-e10-recruit-stage/lib/xiaoe-session.mjs +66 -0
  344. package/skills/weaver-e10-recruit-stage/references/position-templates.md +202 -0
  345. package/skills/weaver-e10-recruit-stage/references/recruit-arrange-interview.md +322 -0
  346. package/skills/weaver-e10-recruit-stage/references/recruit-capability-check.md +127 -0
  347. package/skills/weaver-e10-recruit-stage/references/recruit-check-install.md +65 -0
  348. package/skills/weaver-e10-recruit-stage/references/recruit-detail-process.md +63 -0
  349. package/skills/weaver-e10-recruit-stage/references/recruit-edit-interview-feedback.md +142 -0
  350. package/skills/weaver-e10-recruit-stage/references/recruit-jd-create.md +95 -0
  351. package/skills/weaver-e10-recruit-stage/references/recruit-jd-template.md +56 -0
  352. package/skills/weaver-e10-recruit-stage/references/recruit-list-candidate.md +101 -0
  353. package/skills/weaver-e10-recruit-stage/references/recruit-list-interview.md +148 -0
  354. package/skills/weaver-e10-recruit-stage/references/recruit-match-candidates.md +77 -0
  355. package/skills/weaver-e10-recruit-stage/references/recruit-output-links.md +59 -0
  356. package/skills/weaver-e10-recruit-stage/references/recruit-resolve-creator.md +69 -0
  357. package/skills/weaver-e10-recruit-stage/references/recruit-resolve-metadata.md +241 -0
  358. package/skills/weaver-e10-recruit-stage/references/recruit-resume-import.md +451 -0
  359. package/skills/weaver-e10-recruit-stage/references/recruit-resume-parse.md +128 -0
  360. package/skills/weaver-e10-recruit-stage/references/recruit-search-candidate.md +146 -0
  361. package/skills/weaver-e10-recruit-stage/references/recruit-urge-feedback.md +69 -0
  362. package/skills/weaver-e10-shared/SKILL.md +1 -1
  363. package/skills/weaver-e10-shared/references/e10-auth-and-session.md +10 -2
  364. package/skills/weaver-e10-shijingran/SKILL.md +7 -6
  365. package/skills/weaver-e10-shijingran/references/operations.md +3 -1
  366. package/skills/weaver-e10-shijingran/references/source-manifest.json +30 -28
  367. package/skills/weaver-e10-shijingran/references/write-operations.md +2 -0
  368. package/skills/weaver-e10-skill-maker/references/module-cli-generation.md +2 -0
  369. package/skills/weaver-e10-wenshuding/references/source-manifest.json +3 -3
  370. package/skills/weaver-e10-workflow/SKILL.md +4 -2
  371. package/skills/weaver-e10-workflow/aigroup/default.json +11 -9
  372. package/skills/weaver-e10-workflow/references/source-manifest.json +32 -32
  373. package/skills/weaver-e10-workflow/references/todo-smart-convert.md +23 -13
  374. package/skills/weaver-e10-workflow/tools/todo-summary.cjs +62 -20
  375. package/skills/weaver-e10-yepiaotong/SKILL.md +28 -36
  376. package/skills/weaver-e10-yepiaotong/references/invoice-agent-entry.md +6 -3
  377. package/skills/weaver-e10-yepiaotong/references/invoice-detail.md +13 -10
  378. package/skills/weaver-e10-yepiaotong/references/invoice-enterprise-list.md +2 -0
  379. package/skills/weaver-e10-yepiaotong/references/invoice-issuing-workflow.md +194 -155
  380. package/skills/weaver-e10-yepiaotong/references/invoice-output-view.md +28 -32
  381. package/skills/weaver-e10-yepiaotong/references/invoice-personal-list.md +5 -1
  382. package/skills/weaver-e10-yepiaotong/references/invoice-reim.md +8 -10
  383. package/skills/weaver-e10-yepiaotong/references/reim-api-reference.md +211 -616
  384. package/skills/weaver-e10-yepiaotong/references/reim-examples.md +149 -117
  385. package/skills/weaver-e10-yepiaotong/references/reim-expense-subject-rules.md +17 -20
  386. package/skills/weaver-e10-yepiaotong/references/reim-form-fill-rules.md +20 -39
  387. package/skills/weaver-e10-yepiaotong/references/reim-matching-rules.md +55 -22
  388. package/skills/weaver-e10-yepiaotong/references/reim-phone-subsidy-rules.md +7 -17
  389. package/skills/weaver-e10-yepiaotong/references/reim-workflow.md +88 -92
  390. package/skills/weaver-e10-yepiaotong/references/source-manifest.json +144 -354
  391. package/skills/weaver-e10-yimiaoban/SKILL.md +1 -1
  392. package/skills/weaver-e10-yimiaoban/references/msg-write.md +1 -1
  393. package/skills/weaver-e10-yimiaoban/references/safety-boundaries.md +1 -1
  394. package/skills/weaver-e10-yimiaoban/references/source-manifest.json +7 -7
  395. package/dist/chunks/chunk-SPRHHSVC.js +0 -465
  396. package/dist/chunks/registry-KMHCPAAD.js +0 -22
  397. package/dist/shortcuts/invoice/markdown.js +0 -172
  398. package/dist/shortcuts/invoice/operations/issuing-qys.js +0 -424
  399. package/skills/weaver-e10-meeting.zip +0 -0
  400. package/skills/weaver-e10-yepiaotong/references/invoice-issuing-examples.md +0 -131
  401. package/skills/weaver-e10-yepiaotong/references/invoice-issuing-form-fill-rules.md +0 -179
@@ -0,0 +1,198 @@
1
+ import { join } from 'node:path';
2
+ import { ExitCode, isCliError, toErrorEnvelope } from '../../core/errors.js';
3
+ import { stateRoot } from '../../core/state.js';
4
+ import { DEFAULT_WORKFLOW, STATE_SUBDIR } from './constants.js';
5
+ import { receptionValidationError } from './errors.js';
6
+ import { createReceptionHost } from './host.js';
7
+ import { assertManifestMatchesRegistry, receptionManifest } from './manifest.js';
8
+ import { executeReceptionOperation, normalizeInput } from './operations.js';
9
+ import { jsonArg, textOf } from './operations/shared.js';
10
+ /**
11
+ * 命令面。
12
+ *
13
+ * 形态选择:保留 `ask / doc / render` 三个动词 + `schema / run` 通用入口。
14
+ * 理由不是"省事",而是这三条命令的返回值是给宿主消费的(面板定义、browsertool),
15
+ * 塞进 CRUD 式 operation 语义反而更别扭;同时补 schema,让 Agent 仍能自查合约。
16
+ */
17
+ function asOptions(value) {
18
+ return value && typeof value === 'object' && !Array.isArray(value)
19
+ ? value
20
+ : {};
21
+ }
22
+ /** `<stateRoot>/reception/`,与 profile 同级,多环境不串。 */
23
+ function stateDirOf(ctx) {
24
+ return join(stateRoot(ctx), STATE_SUBDIR);
25
+ }
26
+ function contextOf(ctx, options) {
27
+ const stateDir = stateDirOf(ctx);
28
+ const outDir = textOf(options, 'outDir') || join(stateDir, 'out');
29
+ return { host: createReceptionHost(ctx), stateDir, outDir };
30
+ }
31
+ function successEnvelope(operation, state, data, warnings, next) {
32
+ return {
33
+ schemaVersion: 1,
34
+ ok: true,
35
+ operation,
36
+ data: data === undefined ? null : data,
37
+ meta: { state, ...(next ? { next } : {}) },
38
+ warnings,
39
+ };
40
+ }
41
+ function failureEnvelope(error) {
42
+ return { schemaVersion: 1, ok: false, error: toErrorEnvelope(error) };
43
+ }
44
+ async function runOperation(ctx, operation, input, options) {
45
+ try {
46
+ const result = await executeReceptionOperation(operation, input, contextOf(ctx, options));
47
+ const envelope = successEnvelope(operation, result.state, result.data, result.warnings || [], result.next || null);
48
+ ctx.output.write(envelope, { json: true });
49
+ // 业务上判定不成功(如 render 无任何字段有值)时用参数错误退出,便于调用方分流
50
+ if (result.ok === false)
51
+ process.exitCode = ExitCode.UsageError;
52
+ }
53
+ catch (error) {
54
+ /*
55
+ * 错误信封走 stdout,与本模块的成功输出同一通道。
56
+ *
57
+ * 其它 shortcut(plan / asset)走 stderr,这里刻意不同:接待流程的调用方是模型,
58
+ * 它只解析 stdout;SKILL.md 的失败矩阵全部依赖 `error.subtype` 分流,
59
+ * 走 stderr 会被多数宿主丢掉,表现为"命令失败了但不知道为什么"。
60
+ */
61
+ ctx.output.write(failureEnvelope(error), { json: true });
62
+ process.exitCode = isCliError(error) ? error.exitCode : ExitCode.GeneralError;
63
+ }
64
+ }
65
+ function parseAnswers(options, code = 'ANSWERS') {
66
+ return jsonArg(options, 'answers', { code });
67
+ }
68
+ export const receptionShortcut = {
69
+ name: 'reception',
70
+ description: '泛微客户参观接待流程(面板 / 行程单与内部方案 / 填单页预填)',
71
+ category: 'shortcut',
72
+ register({ program, action }) {
73
+ assertManifestMatchesRegistry();
74
+ const reception = program.command('reception')
75
+ .description('泛微客户参观接待流程:出面板 → 出两份产物并挂附件 → 输出填单页 browsertool');
76
+ reception.command('schema')
77
+ .description('输出 operation 合约(Agent 自查入口)')
78
+ .action(action((ctx) => {
79
+ ctx.output.write(receptionManifest, { json: true });
80
+ }));
81
+ reception.command('run')
82
+ .description('按 operation 名执行(reception.ask / reception.doc / reception.render)')
83
+ .argument('<operation>', 'operation 名,如 reception.ask')
84
+ .option('--input <path>', 'JSON 入参文件,- 表示 stdin')
85
+ .option('--input-json <json>', '内联 JSON 入参')
86
+ .option('--out-dir <dir>', '产物输出目录')
87
+ .action(action(async (ctx, operation, options) => {
88
+ const opts = asOptions(options);
89
+ let input = {};
90
+ if (opts.inputJson) {
91
+ const parsed = jsonArg({ inputJson: opts.inputJson }, 'inputJson', { code: 'INPUT_JSON', required: true });
92
+ input = normalizeInput(parsed);
93
+ }
94
+ else if (typeof opts.input === 'string' && opts.input.trim() && opts.input !== '-') {
95
+ throw receptionValidationError('INPUT_UNSUPPORTED', '请用 --input-json 传参,或直接使用动词命令', {
96
+ hint: 'read 类操作没有大结果回传需求,不支持 --input 文件',
97
+ });
98
+ }
99
+ await runOperation(ctx, String(operation), input, opts);
100
+ }));
101
+ reception.command('ask')
102
+ .description('出交互面板(缺项才出屏,总屏数 ≤2)')
103
+ .option('--known <json>', '7 项抽取结果(内联 JSON)')
104
+ .option('--known-file <path>', '7 项抽取结果(JSON 文件,推荐)')
105
+ .option('--user <names>', '陪同人员姓名,多人逗号分隔;不传用当前登录人兜底')
106
+ .option('--customer <name>', '客户名称,覆盖 known.customer')
107
+ .option('--workflow <name>', `目标流程名,默认「${DEFAULT_WORKFLOW}」`)
108
+ .option('--out-dir <dir>', '产物输出目录')
109
+ .action(action(async (ctx, options) => {
110
+ const opts = asOptions(options);
111
+ const known = jsonArg(opts, 'known', {
112
+ code: 'KNOWN',
113
+ required: true,
114
+ hint: '推荐用文件传参:先写 known.json(无 BOM 的 UTF-8),再 reception ask --known-file known.json',
115
+ });
116
+ await runOperation(ctx, 'reception.ask', {
117
+ known,
118
+ user: textOf(opts, 'user') || undefined,
119
+ customer: textOf(opts, 'customer') || undefined,
120
+ workflow: textOf(opts, 'workflow') || undefined,
121
+ }, opts);
122
+ }));
123
+ reception.command('doc')
124
+ .description('生成行程单 docx + 内部参考文档 md,并上传附件(零写请求)')
125
+ .option('--run-id <id>', 'ask 返回的 runId')
126
+ .option('--known <json>', 'run 失效时用于现场重建的 7 项抽取结果')
127
+ .option('--known-file <path>', '同上,JSON 文件')
128
+ .option('--answers <json>', '面板回填值(内联 JSON)')
129
+ .option('--answers-file <path>', '面板回填值(JSON 文件,推荐)')
130
+ .option('--cases-file <path>', '案例 + 专家检索结果 JSON')
131
+ .option('--workflow <name>', '目标流程名')
132
+ .option('--out-dir <dir>', '产物输出目录')
133
+ .option('--snapshot <path>', '字段快照路径(同时用于推导 render.py)')
134
+ .option('--render-py <path>', '显式指定 render.py')
135
+ .option('--no-upload', '跳过附件上传,只出本地文件')
136
+ .action(action(async (ctx, options) => {
137
+ const opts = asOptions(options);
138
+ await runOperation(ctx, 'reception.doc', {
139
+ runId: textOf(opts, 'runId') || undefined,
140
+ known: jsonArg(opts, 'known', { code: 'KNOWN' }) || undefined,
141
+ answers: parseAnswers(opts) || undefined,
142
+ casesFile: textOf(opts, 'casesFile') || undefined,
143
+ workflow: textOf(opts, 'workflow') || undefined,
144
+ outDir: textOf(opts, 'outDir') || undefined,
145
+ snapshot: textOf(opts, 'snapshot') || undefined,
146
+ renderPy: textOf(opts, 'renderPy') || undefined,
147
+ noUpload: opts.upload === false,
148
+ }, opts);
149
+ }));
150
+ reception.command('render')
151
+ .description('输出填单页 browsertool(纯本地,不调接口)')
152
+ .option('--run-id <id>', 'ask / doc 返回的 runId')
153
+ .option('--answers <json>', '面板回填值(内联 JSON)')
154
+ .option('--answers-file <path>', '面板回填值(JSON 文件,推荐)')
155
+ .option('--attachment-fileid <ids>', '附件 fileid,多个逗号分隔')
156
+ .option('--sdk-render <type>', '打开形态:inline / popup / drawer(默认 drawer)')
157
+ .option('--snapshot <path>', '字段快照路径')
158
+ .action(action(async (ctx, options) => {
159
+ const opts = asOptions(options);
160
+ await runOperation(ctx, 'reception.render', {
161
+ runId: textOf(opts, 'runId') || undefined,
162
+ answers: parseAnswers(opts) || undefined,
163
+ attachmentFileid: textOf(opts, 'attachmentFileid') || undefined,
164
+ sdkRender: textOf(opts, 'sdkRender') || undefined,
165
+ snapshot: textOf(opts, 'snapshot') || undefined,
166
+ }, opts);
167
+ }));
168
+ reception.command('doc-render')
169
+ .description('一次完成「出件 + 传附件 + 拼填单参数」(doc 与 render 合并,省一次工具往返)')
170
+ .option('--run-id <id>', 'ask 返回的 runId')
171
+ .option('--known <json>', 'run 失效时用于现场重建的 7 项抽取结果')
172
+ .option('--known-file <path>', '同上,JSON 文件')
173
+ .option('--answers <json>', '面板回填值(内联 JSON)')
174
+ .option('--answers-file <path>', '面板回填值(JSON 文件,推荐)')
175
+ .option('--cases-file <path>', '案例 + 专家检索结果 JSON')
176
+ .option('--workflow <name>', '目标流程名')
177
+ .option('--out-dir <dir>', '产物输出目录')
178
+ .option('--snapshot <path>', '字段快照路径(同时用于推导 render.py)')
179
+ .option('--render-py <path>', '显式指定 render.py')
180
+ .option('--no-upload', '跳过附件上传,只出本地文件')
181
+ .option('--sdk-render <type>', '打开形态:inline / popup / drawer(默认 drawer)')
182
+ .action(action(async (ctx, options) => {
183
+ const opts = asOptions(options);
184
+ await runOperation(ctx, 'reception.docRender', {
185
+ runId: textOf(opts, 'runId') || undefined,
186
+ known: jsonArg(opts, 'known', { code: 'KNOWN' }) || undefined,
187
+ answers: parseAnswers(opts) || undefined,
188
+ casesFile: textOf(opts, 'casesFile') || undefined,
189
+ workflow: textOf(opts, 'workflow') || undefined,
190
+ outDir: textOf(opts, 'outDir') || undefined,
191
+ snapshot: textOf(opts, 'snapshot') || undefined,
192
+ renderPy: textOf(opts, 'renderPy') || undefined,
193
+ noUpload: opts.upload === false,
194
+ sdkRender: textOf(opts, 'sdkRender') || undefined,
195
+ }, opts);
196
+ }));
197
+ },
198
+ };
@@ -0,0 +1,177 @@
1
+ import { receptionOperationNames } from './operations/registry.js';
2
+ export const receptionOperations = [
3
+ {
4
+ name: 'reception.ask',
5
+ risk: 'read',
6
+ summary: '按 7 项抽取结果出交互面板:缺项才出屏,总屏数 ≤2(客户需求 + 接待细节)。返回 runId 供 doc 使用。',
7
+ inputSchema: {
8
+ type: 'object',
9
+ additionalProperties: false,
10
+ required: ['known'],
11
+ properties: {
12
+ known: {
13
+ type: 'object',
14
+ description: '模型抽取的 7 项:customer/headcount/visitDate/visitType/companions/demand/接待细节',
15
+ additionalProperties: true,
16
+ },
17
+ user: { type: 'string', description: '陪同人员姓名,多人用逗号分隔;不传则用当前登录人兜底' },
18
+ customer: { type: 'string', description: '客户名称(覆盖 known.customer)' },
19
+ workflow: { type: 'string', description: '目标流程名,默认「泛微客户参观接待流程」' },
20
+ },
21
+ },
22
+ outputSchema: {
23
+ type: 'object',
24
+ properties: {
25
+ runId: { type: 'string' },
26
+ panels: { type: 'array', items: { type: 'object' } },
27
+ known: { type: 'object' },
28
+ timings: { type: 'object' },
29
+ },
30
+ },
31
+ },
32
+ {
33
+ name: 'reception.doc',
34
+ risk: 'read',
35
+ summary: '生成客户版行程单 docx 与内部版接待交流参考文档 md,并上传两份附件拿 fileid。零写请求:流程不落库、不提交。',
36
+ inputSchema: {
37
+ type: 'object',
38
+ additionalProperties: false,
39
+ properties: {
40
+ runId: { type: 'string', description: 'ask 返回的 runId;run 失效时改用 known 现场重建' },
41
+ known: { type: 'object', description: 'run 失效时的 7 项抽取结果,用于现场重建 run' },
42
+ answers: { type: 'object', description: 'ask_user 面板回填值:{customer_need, logistics, fields}' },
43
+ casesFile: { type: 'string', description: '案例 + 专家检索结果 JSON 文件路径(软依赖,缺省则不注入)' },
44
+ workflow: { type: 'string', description: '目标流程名' },
45
+ outDir: { type: 'string', description: '产物输出目录' },
46
+ noUpload: { type: 'boolean', description: '跳过附件上传,只出本地文件' },
47
+ snapshot: { type: 'string', description: '字段快照路径;同时用于推导技能包内 render.py 位置' },
48
+ renderPy: { type: 'string', description: '显式指定 render.py 路径' },
49
+ },
50
+ },
51
+ outputSchema: {
52
+ type: 'object',
53
+ properties: {
54
+ runId: { type: 'string' },
55
+ rebuilt: { type: 'boolean' },
56
+ files: { type: 'array', items: { type: 'object' } },
57
+ internalDoc: {
58
+ type: ['object', 'null'],
59
+ description: '内部参考文档正文 {name,path,content};null 表示没生成。模型据此在对话中原样贴出,不必再读产物文件',
60
+ },
61
+ attachments: { type: 'array', items: { type: 'object' } },
62
+ attachmentPending: { type: 'boolean' },
63
+ qa: { type: 'object' },
64
+ verify: { type: 'object' },
65
+ timings: { type: 'object' },
66
+ },
67
+ },
68
+ },
69
+ {
70
+ name: 'reception.render',
71
+ risk: 'read',
72
+ summary: '按快照把接待数据拼成 customParams,输出 <browsertool> 供宿主打开填单页。纯本地,不调接口。',
73
+ inputSchema: {
74
+ type: 'object',
75
+ additionalProperties: false,
76
+ required: ['runId'],
77
+ properties: {
78
+ runId: { type: 'string', description: 'ask / doc 返回的 runId' },
79
+ answers: { type: 'object', description: '面板回填值,覆盖 run.answers' },
80
+ attachmentFileid: { type: 'string', description: '显式指定附件 fileid,多个用逗号分隔' },
81
+ sdkRender: {
82
+ type: 'string',
83
+ enum: ['inline', 'popup', 'drawer'],
84
+ description: '打开形态:drawer 为右侧抽屉(默认)',
85
+ },
86
+ snapshot: { type: 'string', description: '字段快照路径' },
87
+ },
88
+ },
89
+ outputSchema: {
90
+ type: 'object',
91
+ properties: {
92
+ customParams: { type: 'object' },
93
+ fieldAssignKeys: { type: 'string' },
94
+ detailRowCount: { type: 'integer' },
95
+ attachmentPending: { type: 'boolean' },
96
+ sdkRenderType: { type: 'string' },
97
+ todos: { type: 'array', items: { type: 'string' } },
98
+ browsertool: { type: 'string' },
99
+ browsertoolFile: { type: 'string', description: 'browsertool 落盘的绝对路径(正斜杠)' },
100
+ browsertoolRef: { type: 'string', description: '文件引用形态,宿主支持时模型只输出这一行' },
101
+ timings: { type: 'object' },
102
+ },
103
+ },
104
+ },
105
+ {
106
+ name: 'reception.docRender',
107
+ risk: 'read',
108
+ summary: '一次完成 doc + render:出 docx/md、上传附件、拼 customParams、落 browsertool。'
109
+ + '两者之间没有人工确认点,合并只为省一次工具往返;失败语义与分开调用一致。',
110
+ inputSchema: {
111
+ type: 'object',
112
+ additionalProperties: false,
113
+ properties: {
114
+ runId: { type: 'string', description: 'ask 返回的 runId;run 失效时改用 known 现场重建' },
115
+ known: { type: 'object', description: 'run 失效时的 7 项抽取结果,用于现场重建 run' },
116
+ answers: { type: 'object', description: 'ask_user 面板回填值:{customer_need, logistics, fields}' },
117
+ casesFile: { type: 'string', description: '案例 + 专家检索结果 JSON 文件路径(软依赖)' },
118
+ workflow: { type: 'string', description: '目标流程名' },
119
+ outDir: { type: 'string', description: '产物输出目录' },
120
+ noUpload: { type: 'boolean', description: '跳过附件上传,只出本地文件' },
121
+ snapshot: { type: 'string', description: '字段快照路径;同时用于推导技能包内 render.py 位置' },
122
+ renderPy: { type: 'string', description: '显式指定 render.py 路径' },
123
+ sdkRender: {
124
+ type: 'string',
125
+ enum: ['inline', 'popup', 'drawer'],
126
+ description: '填单页打开形态:drawer 为右侧抽屉(默认)',
127
+ },
128
+ },
129
+ },
130
+ outputSchema: {
131
+ type: 'object',
132
+ properties: {
133
+ runId: { type: 'string' },
134
+ rebuilt: { type: 'boolean' },
135
+ files: { type: 'array', items: { type: 'object' } },
136
+ internalDoc: {
137
+ type: ['object', 'null'],
138
+ description: '内部参考文档正文 {name,path,content};null 表示没生成。模型据此在对话中原样贴出,不必再读产物文件',
139
+ },
140
+ attachments: { type: 'array', items: { type: 'object' } },
141
+ attachmentPending: { type: 'boolean' },
142
+ uploadDiagnostics: { type: 'array', items: { type: 'object' } },
143
+ customParams: { type: 'object' },
144
+ fieldAssignKeys: { type: 'string' },
145
+ detailRowCount: { type: 'integer' },
146
+ todos: { type: 'array', items: { type: 'string' } },
147
+ browsertool: { type: 'string' },
148
+ browsertoolFile: { type: 'string' },
149
+ browsertoolRef: { type: 'string' },
150
+ qa: { type: 'object' },
151
+ timings: { type: 'object' },
152
+ },
153
+ },
154
+ },
155
+ ];
156
+ export const receptionManifest = {
157
+ schemaVersion: 1,
158
+ name: 'reception',
159
+ title: '泛微客户参观接待流程(面板/出件/填单页)',
160
+ version: '1.0.0',
161
+ host: 'e10-reception',
162
+ status: 'builtin',
163
+ sourceSkill: 'weaver-e10-reception-flow',
164
+ capabilities: ['reception'],
165
+ /** 全链路零写请求:只上传附件,流程由用户在页面上提交。 */
166
+ writePolicy: 'none',
167
+ operations: receptionOperations,
168
+ operationNames: receptionOperationNames,
169
+ };
170
+ /** 命令面自检时用;与 registry 保持一致,避免文档与实现脱节。 */
171
+ export function assertManifestMatchesRegistry() {
172
+ const declared = receptionOperations.map((item) => item.name).sort();
173
+ const registered = [...receptionOperationNames].sort();
174
+ if (declared.join(',') !== registered.join(',')) {
175
+ throw new Error(`manifest 与 registry 不一致:\nmanifest=${declared.join(',')}\nregistry=${registered.join(',')}`);
176
+ }
177
+ }
@@ -0,0 +1,71 @@
1
+ import { DEFAULT_WORKFLOW } from '../constants.js';
2
+ import { buildPanels } from './panels.js';
3
+ import { newRunId, saveRun } from './runs.js';
4
+ import { nameList } from './shared.js';
5
+ export async function ask(input, ctx) {
6
+ const startedAt = Date.now();
7
+ const known = input.known || {};
8
+ const workflow = input.workflow || DEFAULT_WORKFLOW;
9
+ const warnings = [];
10
+ const customerKeyword = input.customer || (typeof known.customer === 'string' ? known.customer : '');
11
+ // 宿主已支持直接传中文,人机交互前不再查客户/人员的 ID(省掉两次接口往返)。
12
+ // 人员:--user 或 known.companions 里的姓名直接落到 companions;
13
+ // 一个都没有时,compose 用 empId(当前登录人)兜底填「参与人员」。
14
+ const data = { ...known };
15
+ delete data.customerId;
16
+ if (customerKeyword)
17
+ data.customer = customerKeyword;
18
+ // 主联络人优先级:`known.escorts`(明确指定的对接人)> `--user`(陪同)> `known.companions` > 登录人兜底。
19
+ //
20
+ // 事故背景:模型把对接人写在 `escorts`,同时把「当前操作人」当成陪同传给了 `--user`,
21
+ // 旧代码只认后两者,于是主联络人被填成操作人。
22
+ // 因此这里让 `escorts` 赢:它语义最明确(对接人 = 主联络人),而 `--user` 可能是操作人。
23
+ const escorts = nameList(known.escorts);
24
+ const explicitUser = nameList(input.user || '');
25
+ const companions = nameList(known.companions);
26
+ const names = escorts.length ? escorts : (explicitUser.length ? explicitUser : companions);
27
+ if (names.length)
28
+ data.companions = names.map((name) => ({ name }));
29
+ // ask 完全不读会话:解析会话要读加密 auth 并解 keyring,实测 ~300ms,
30
+ // 而 ask 只拿它填 empId(登录人兜底)和 base(拼 URL),这两件事 doc / render 阶段
31
+ // 本来就绕不开会话,放在那里做即可。ask 保持纯本地,冷启动从 643ms 降到 340ms。
32
+ data.empId = '';
33
+ const runId = newRunId();
34
+ saveRun(ctx.stateDir, {
35
+ runId,
36
+ createdAt: new Date().toISOString(),
37
+ workflow,
38
+ outDir: ctx.outDir,
39
+ base: '',
40
+ data,
41
+ customer: null,
42
+ user: null,
43
+ mode: 'browsertool',
44
+ });
45
+ const panels = buildPanels(data);
46
+ return {
47
+ state: 'asked',
48
+ ok: true,
49
+ data: {
50
+ runId,
51
+ known: {
52
+ customer: data.customer || '',
53
+ visitDate: data.visitDate || '',
54
+ visitType: data.visitType || '',
55
+ companions: data.companions || [],
56
+ // 兜底由 render 阶段补:ask 不读会话,这里恒为空
57
+ contactFallback: '',
58
+ },
59
+ panels,
60
+ timings: { totalMs: Date.now() - startedAt },
61
+ },
62
+ warnings,
63
+ next: {
64
+ command: 'ask_user(panels) → weaver-work-cli reception doc --run-id … --answers \'{...}\'',
65
+ reason: '一次问完;answers 原样回传',
66
+ },
67
+ };
68
+ }
69
+ export const askOperation = {
70
+ execute: (input, ctx) => ask(input, ctx),
71
+ };
@@ -0,0 +1,58 @@
1
+ /**
2
+ * `<browsertool>` 渲染。
3
+ *
4
+ * 依据官方《browsertool 渲染说明》:
5
+ * fill_form + data → iframe 填单
6
+ * fill_form + sdkOptions → E10 表单组件化渲染(本文件用的形态)
7
+ * open_web → 打开外部网页 + XiaoEWorkspace 通信(不用于 E10 表单)
8
+ *
9
+ * 打开形态由 `arguments.sdkRenderType` 决定:
10
+ * inline 内嵌(移动端默认)
11
+ * popup / drawer 弹层(PC 端默认;drawer = 右侧抽屉,即"侧边打开")
12
+ * 不传则用宿主默认值(实测为内嵌),所以这里显式给值。
13
+ *
14
+ * 除 title / src / sdkRenderType / 两处 routerProps / params 外全部写死;JSON 用 2 空格缩进。
15
+ */
16
+ export const SDK_RENDER_TYPES = ['inline', 'popup', 'drawer'];
17
+ function normalizeRenderType(value) {
18
+ const text = String(value || '').trim().toLowerCase();
19
+ return SDK_RENDER_TYPES.includes(text) ? text : '';
20
+ }
21
+ /** 默认形态:右侧抽屉(业务要的就是"侧边打开")。可用 RECEPTION_SDK_RENDER 或 --sdk-render 覆盖。 */
22
+ export const DEFAULT_SDK_RENDER = normalizeRenderType(process.env.RECEPTION_SDK_RENDER) || 'drawer';
23
+ /** 对外:给定入参解析出最终形态(非法值回落到默认)。 */
24
+ export const resolveRenderType = (value) => normalizeRenderType(value) || DEFAULT_SDK_RENDER;
25
+ export function renderBrowsertool(options) {
26
+ const base = String(options.baseUrl || '').replace(/\/+$/u, '');
27
+ const id = String(options.workflowId || '').trim();
28
+ if (!base || !id)
29
+ throw new Error('渲染 browsertool 需要 baseUrl 与 workflowId');
30
+ const renderType = normalizeRenderType(options.sdkRenderType) || DEFAULT_SDK_RENDER;
31
+ const createPath = `/flowpage/create/${id}`;
32
+ const payload = {
33
+ version: 1,
34
+ callId: 'call_001',
35
+ toolId: 'fill_form',
36
+ arguments: {
37
+ type: 'e10',
38
+ title: String(options.workflowName || ''),
39
+ src: `${base}/sp/workflow${createPath}?workflowId=${id}&isCreate=1`,
40
+ sdkRenderType: renderType,
41
+ sdkOptions: {
42
+ compName: 'ui.CorsComponent',
43
+ routerType: 'MemoryRouter',
44
+ routerProps_pc: { initialEntries: [createPath] },
45
+ routerProps_mobile: { initialEntries: [createPath] },
46
+ params_pc: { app: '@weapp/workflow', compName: 'Comp.WffpRoute', noMDialog: true },
47
+ params_mobile: { app: '@weapp/workflow', compName: 'Comp.MWffpRoute', noMDialog: true },
48
+ params: {
49
+ customParams: {
50
+ ...options.customParams.values,
51
+ fieldAssignKeys: options.customParams.keys.join(','),
52
+ },
53
+ },
54
+ },
55
+ },
56
+ };
57
+ return `<browsertool>\n${JSON.stringify(payload, null, 2)}\n</browsertool>`;
58
+ }
@@ -0,0 +1,129 @@
1
+ import { buildCustomParams } from './customparams.js';
2
+ import { normalizeScheduleRows } from './schedule.js';
3
+ import { nameList } from './shared.js';
4
+ /**
5
+ * 把「接待数据 + 字段快照」合成 customParams(纯本地、零网络)。
6
+ *
7
+ * 这是渲染段的核心:不依赖实时 formctx,也不需要 continuation。
8
+ * 字段清单来自技能包里的快照,字段 ID 与 doNotWrite / attachmentMountField 都在快照里。
9
+ */
10
+ const pick = (map, key) => (key && map && map[String(key)] !== undefined ? String(map[String(key)]) : '');
11
+ /** 附件 id 归一:接受 [{fileid,name}] / ['id1','id2'] / 'id1,id2' / 单串,返回去重后的 id 数组。 */
12
+ export function normAttachmentIds(list, single = '') {
13
+ const fromList = (Array.isArray(list) ? list : [])
14
+ .map((item) => {
15
+ if (typeof item === 'string')
16
+ return item.trim();
17
+ if (!item || typeof item !== 'object')
18
+ return '';
19
+ const record = item;
20
+ return String(record.fileid || record.optionId || record.fileId || record.id || '').trim();
21
+ })
22
+ .filter(Boolean);
23
+ if (fromList.length)
24
+ return [...new Set(fromList)];
25
+ return String(single || '').split(',').map((item) => item.trim()).filter(Boolean);
26
+ }
27
+ export function composeInitialValues(options) {
28
+ const { snapshot, data = {}, attachmentFileid = '', attachmentFileids = null } = options;
29
+ const fields = (snapshot && snapshot.fields) || [];
30
+ const codes = (snapshot && snapshot.optionCodes) || {};
31
+ const warnings = [];
32
+ const todos = [];
33
+ const params = { values: {}, keys: [] };
34
+ const valueOf = (name) => {
35
+ switch (name) {
36
+ // 客户名直接传中文,宿主已支持;不再拼 {id,name} 对象
37
+ case '来访客户名称':
38
+ return data.customer || '';
39
+ case '参观访问类型':
40
+ return pick(codes['参观访问类型'], data.visitType) || data.visitType || '';
41
+ case '客户到达日期':
42
+ case '客户参观日期':
43
+ return data.visitDate || data.arrivalDate || '';
44
+ case '客户需求':
45
+ return data.demand || '';
46
+ case '客户性质':
47
+ return pick(codes['客户性质'], data.nature) || data.nature || '';
48
+ case '项目金额(万元)':
49
+ return data.amount === 0 || data.amount ? data.amount : '';
50
+ case '泛微分支机构参与人员(主联络人,此人必须陪客户一同参观)': {
51
+ // escorts 是用户明确指定的对接人,优先级最高:companions 可能被 --user 覆盖成当前操作人。
52
+ // 直接传中文姓名;一个都没有时才用当前登录人 employeeid 兜底。
53
+ const escorts = nameList(data.escorts);
54
+ if (escorts.length)
55
+ return escorts;
56
+ const list = Array.isArray(data.companions) ? data.companions : [];
57
+ const names = list
58
+ .map((item) => (typeof item === 'string' ? item : item && (item.name || item.id)))
59
+ .map((item) => String(item || '').trim())
60
+ .filter(Boolean);
61
+ if (names.length)
62
+ return names;
63
+ return data.empId ? [String(data.empId)] : [];
64
+ }
65
+ case '是否需要高层参与':
66
+ return pick(codes['是否需要高层参与'], data.senior) || data.senior || '';
67
+ case '客户带队人':
68
+ return data.leader || '';
69
+ case '客户参观接待行程单(由行政经理汇总后反馈)':
70
+ // doNotWrite,走下方挂载字段
71
+ return '';
72
+ default:
73
+ return '';
74
+ }
75
+ };
76
+ const items = [];
77
+ for (const field of fields) {
78
+ if (field.doNotWrite)
79
+ continue;
80
+ const value = valueOf(field.name);
81
+ if (value === '' || value === null || value === undefined) {
82
+ if (field.required && ['客户性质', '项目金额(万元)', '客户带队人', '是否需要高层参与'].includes(field.name)) {
83
+ todos.push(`${field.name} 未填`);
84
+ }
85
+ continue;
86
+ }
87
+ items.push({ fieldId: field.id, value });
88
+ }
89
+ // 附件挂载字段(不在 formctx 的 10 个字段里,但页面认这个 id)
90
+ // 多附件(行程单 docx + 接待方案 md):同字段多值用 `,`,交给 buildCustomParams 拼
91
+ const mount = (snapshot && snapshot.attachmentMountField && snapshot.attachmentMountField.fieldId) || '';
92
+ const attachIds = normAttachmentIds(attachmentFileids, attachmentFileid);
93
+ const attachmentPending = attachIds.length === 0;
94
+ if (mount && attachIds.length)
95
+ items.push({ fieldId: mount, value: attachIds });
96
+ // 日程明细开关 + 7 列
97
+ const details = (snapshot && snapshot.details) || {};
98
+ const rows = normalizeScheduleRows(data);
99
+ const switchCode = (details.switch && details.switch.codes && details.switch.codes[details.switch.on]) || '1';
100
+ if (rows.length && details.switch)
101
+ items.push({ fieldId: details.switch.fieldId, value: switchCode });
102
+ for (const [semantic, fieldId] of Object.entries(details.columns || {})) {
103
+ rows.forEach((row, index) => items.push({
104
+ fieldId: String(fieldId),
105
+ value: row[semantic],
106
+ dataIndex: index,
107
+ }));
108
+ }
109
+ if (!rows.length)
110
+ warnings.push('日程明细为 0 行:页面上明细会是空的');
111
+ const built = buildCustomParams(items);
112
+ params.values = built.values;
113
+ params.keys = built.keys;
114
+ if (attachmentPending)
115
+ todos.push('行程单附件未上传(可在页面手动添加)');
116
+ if (!data.companions || !data.companions.length)
117
+ todos.push('陪同人员未填');
118
+ if (!data.demand)
119
+ todos.push('客户需求未填');
120
+ return {
121
+ values: params.values,
122
+ keys: params.keys,
123
+ todos,
124
+ warnings,
125
+ attachmentPending,
126
+ detailRowCount: rows.length,
127
+ items,
128
+ };
129
+ }