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,5 +1,6 @@
1
1
  import { readFile } from 'node:fs/promises';
2
2
  import { ExitCode, isCliError, toErrorEnvelope } from '../../core/errors.js';
3
+ import { reportPlatformError } from '../../core/error-codes.js';
3
4
  import { createWorkflowContinuationSigner } from './continuation.js';
4
5
  import { createWorkflowHost } from './host.js';
5
6
  import { workflowManifest } from './manifest.js';
@@ -113,6 +114,7 @@ async function executeAndPrint(ctx, operation, input) {
113
114
  printWorkflowResult(ctx, operation, result);
114
115
  }
115
116
  catch (error) {
117
+ reportPlatformError(error);
116
118
  console.error(JSON.stringify(failureEnvelope(error), null, 2));
117
119
  process.exitCode = isCliError(error) ? error.exitCode : ExitCode.GeneralError;
118
120
  }
@@ -15,6 +15,7 @@
15
15
  * createApply 合并而来):模型只需「取表单 → 填字段 → createRequest」,不必自己判断必填是否缺失
16
16
  * ——必填判定完全在 CLI 内部按实际所填数据(含联动带出值)实时计算。
17
17
  */
18
+ import { CONTINUATION_TTL_MS } from '../../../core/continuation-ttl.js';
18
19
  import { randomUUID } from 'node:crypto';
19
20
  import { workflowSuccess, schemaOf, SCHEMA_REQUEST_ID, SCHEMA_CONTINUATION, SCHEMA_CONFIRM, } from './types.js';
20
21
  import { asBool, responseData, toArray, withLeadingMeta, stdoutBytesOf, stdoutCharsOf, STDOUT_SAFE_BYTES, parseNameWithId, resolveMemoryAppId, } from './shared.js';
@@ -72,7 +73,6 @@ const SYSTEM_FIELD_KEYS = {
72
73
  };
73
74
  /** 附件大小档位 0-5 对应 1/5/10/20/50/100MB;6/9 取同层 customAttmentSize(已修复 bug)。 */
74
75
  const ATTACH_SIZE_LIMIT_STEPS_MB = [1, 5, 10, 20, 50, 100];
75
- const CONTINUATION_TTL_MS = 10 * 60 * 1000;
76
76
  /**
77
77
  * 大表单输出保护(通用,不针对任何具体工作流/表单)。
78
78
  *
@@ -4720,6 +4720,7 @@ function linkageResultNotice(linkageDetails, fields, hiddenSubforms, rowHidden,
4720
4720
  * - `title` 取**工作流名称**;`src` 与两处 `routerProps_*` 的 `initialEntries` 用**工作流 id**;
4721
4721
  * `src` 末尾另按 `&<字段id>=<值>` 拼上本次要填的字段(2026-10-30 用户裁定,与下面
4722
4722
  * `params.customParams` 同一份数据);
4723
+ * `src` 里的 `#` **一律写成 `%23`**(2026-11-05 用户裁定,见 `xiaoEEncodeSrcHash`);
4723
4724
  * `params.customParams` 取 `createRequest` **入参**经解析后的字段值(不含表单默认值、不含联动带出的值),
4724
4725
  * 同段 `fieldAssignKeys` 列出这次要填的**全部字段 id**(`,` 连接)。
4725
4726
  */
@@ -4761,6 +4762,11 @@ const XIAOE_INITIAL_VALUES_ROW_SEPARATOR = ';';
4761
4762
  * 明细多行同口径:`##<id>;<名称>`。
4762
4763
  */
4763
4764
  const XIAOE_BROWSER_ID_PREFIX = '##';
4765
+ /**
4766
+ * 交给浏览器页面时带的自定义标识(`src` 与 `params.customParams` 各带一份,值都是 `1`):
4767
+ * 页面据此按「带初始值打开新建页」处理。
4768
+ */
4769
+ const XIAOE_INITIAL_COVERT_NAME = 1;
4764
4770
  /** 单个标量 → URL 传参里的那一段文本。对象按「id 优先」取标识(附件取到的就是 fileid)。 */
4765
4771
  function xiaoEUrlParamScalar(value, prefixBrowserId = false) {
4766
4772
  if (value === null || value === undefined)
@@ -4904,9 +4910,10 @@ function xiaoECustomParams(preview, fields) {
4904
4910
  * `src` 末尾的字段参数(2026-10-30 用户裁定):`&<字段id>=<值>`,与 `params.customParams` 里那份
4905
4911
  * 字段值**同一份数据、同一顺序**(`fieldAssignKeys` 是元信息,不进 URL)。
4906
4912
  *
4907
- * 值**原样拼、不做任何百分号编码**:客户端自己解析这段 query(按 `&` 切键值对、再按 `=` 切第一个
4908
- * 等号),中文、空格、`,` / `;` / `#` 等都不需要转义,拼出来的字面值必须与 `params.customParams`
4909
- * 里逐字相同。唯一代价是值本身含 `&` 时会截断——按用户口径以此为准,不在此处兜底改写。
4913
+ * 值在这里**原样拼**(不逐个做百分号编码):中文、空格、`,` / `;` 等都保持字面值,与
4914
+ * `params.customParams` 里那份一致。**只有 `#` 例外**——整段 `src` 拼完之后统一换成 `%23`
4915
+ * (见下面的 `xiaoEEncodeSrcHash`,2026-11-05 用户裁定)。唯一剩余代价是值本身含 `&` 时会截断
4916
+ * ——按用户口径以此为准,不在此处兜底改写。
4910
4917
  */
4911
4918
  function xiaoESrcFieldQuery(params) {
4912
4919
  let query = '';
@@ -4918,13 +4925,28 @@ function xiaoESrcFieldQuery(params) {
4918
4925
  }
4919
4926
  return query;
4920
4927
  }
4928
+ /**
4929
+ * `src` 里的 `#` 一律写成 `%23`(2026-11-05 用户裁定)。
4930
+ *
4931
+ * 原因:`#` 在 URL 里是**片段起始符**,一旦出现在 query 段,浏览器与路由会把 `#` 之后的全部内容
4932
+ * 当成 hash 丢掉 —— 浏览按钮字段的 `##<id>` 前缀(见 `XIAOE_BROWSER_ID_PREFIX`)与用户自己填的
4933
+ * `#` 都会踩这个坑。
4934
+ *
4935
+ * 只作用于 `src` 这一个属性;`params.customParams` 里仍是原样的 `##<id>`(两处不再逐字相同,
4936
+ * 页面解析 `src` 时按 URL 语义还原即可)。
4937
+ */
4938
+ function xiaoEEncodeSrcHash(src) {
4939
+ return src.replace(/#/gu, '%23');
4940
+ }
4921
4941
  /**
4922
4942
  * 渲染 `<browsertool>` 块(该块**整体**就是小e 环境下 `createRequest` 的 `finalMarkdown`)。
4923
4943
  *
4924
4944
  * 除 `title` / `src` / 两处 `routerProps_*` 的 `initialEntries` / `params.customParams` 外全部写死。
4925
4945
  *
4926
- * `src` 形如 `…/flowpage/create/<workflowId>?workflowId=<workflowId>&isCreate=1&<字段id>=<值>&…`
4927
- * —— 末尾的字段参数与 `params.customParams` 同源(2026-10-30 用户裁定)。
4946
+ * `src` 形如 `…/flowpage/create/<workflowId>?workflowId=<workflowId>&isCreate=1&initialCovertName=1&<字段id>=<值>&…`
4947
+ * —— 末尾的字段参数与 `params.customParams` 同源(2026-10-30 用户裁定);其中 `#` 全部写成 `%23`
4948
+ * (2026-11-05 用户裁定)。
4949
+ * `initialCovertName=1` 是自定义标识,`params.customParams.initialCovertName: 1` 与之同步(两处都要有)。
4928
4950
  */
4929
4951
  function renderXiaoEFillFormMarkdown(params) {
4930
4952
  const base = String(params.baseUrl ?? '').replace(/\/+$/u, '');
@@ -4937,7 +4959,8 @@ function renderXiaoEFillFormMarkdown(params) {
4937
4959
  arguments: {
4938
4960
  type: 'e10',
4939
4961
  title: String(params.title ?? ''),
4940
- src: `${base}/sp/workflow${createPath}?workflowId=${workflowId}&isCreate=1${xiaoESrcFieldQuery(params.customParams)}`,
4962
+ // `#` 一律转义成 `%23`(2026-11-05 用户裁定):`##<id>` 前缀与用户填的 `#` 都会被当成片段起始符。
4963
+ src: xiaoEEncodeSrcHash(`${base}/sp/workflow${createPath}?workflowId=${workflowId}&isCreate=1&initialCovertName=${XIAOE_INITIAL_COVERT_NAME}${xiaoESrcFieldQuery(params.customParams)}`),
4941
4964
  sdkOptions: {
4942
4965
  compName: XIAOE_FILL_FORM_SDK_OPTIONS.compName,
4943
4966
  routerType: XIAOE_FILL_FORM_SDK_OPTIONS.routerType,
@@ -4947,9 +4970,10 @@ function renderXiaoEFillFormMarkdown(params) {
4947
4970
  params_mobile: { ...XIAOE_FILL_FORM_SDK_OPTIONS.params_mobile },
4948
4971
  params: {
4949
4972
  customParams: {
4950
- // 字段 id → 值(要填写的字段及值),随后是这次要填的**全部字段 id**。
4973
+ // 字段 id → 值(要填写的字段及值),随后是这次要填的**全部字段 id** 与自定义标识。
4951
4974
  ...params.customParams.values,
4952
4975
  fieldAssignKeys: params.customParams.keys.join(','),
4976
+ initialCovertName: XIAOE_INITIAL_COVERT_NAME,
4953
4977
  },
4954
4978
  },
4955
4979
  },
@@ -1,3 +1,4 @@
1
+ import { CONTINUATION_TTL_SECONDS } from '../../../core/continuation-ttl.js';
1
2
  import { createHash } from 'node:crypto';
2
3
  import { WorkflowCliError, workflowConfirmationError, workflowPartialError, workflowValidationError, } from '../errors.js';
3
4
  import { continuationReplayError } from '../continuation.js';
@@ -17,7 +18,6 @@ import { findIndexedItem, loadSearchIndex, } from '../state.js';
17
18
  // 「确定性幂等键 + 有界保护窗口」的一次性闸门承担(见 batchIdempotencyKey / claimBatchWrite)。
18
19
  // 写请求遇网络中断/超时(结果未知)一律抛 workflowPartialError,禁止自动重试。
19
20
  // ===========================================================================
20
- const CONTINUATION_TTL_SECONDS = 600;
21
21
  const BATCH_SIZE_DEFAULT = 100;
22
22
  const READ_REMARK_VALUES = new Set(['60', '61', '70', '71', '80', '81']);
23
23
  // 共享对象类型 → addRequestShare2 的 shareType
package/docs/_catalog.md CHANGED
@@ -13,6 +13,7 @@
13
13
  | 齐业成费控中心(预算/费用中心/报销报表 AI 问答/借款管理/发票核销)、fna operation、提醒还款与催票 prepare/apply | `docs/fna.md` |
14
14
  | 文书定档案管理(全宗/检索/借阅车/借阅单/发起借阅/预归档上传)、wenshuding operation | `docs/wenshuding.md` |
15
15
  | 计划报告管理(报告查询/新建/修改/发布/撤回/提交提醒/评论)、plan operation、写操作 prepare/apply | `docs/plan.md` |
16
+ | 客户参观接待(面板/行程单与内部方案/填单页预填)、reception operation、零写请求 | `docs/reception.md` |
16
17
  | OKR 目标管理(目标查询/详情、关键成果、目标对齐、评论)、okr operation、标准版与 ebuilder 双链路、写操作 prepare/apply | `docs/okr.md` |
17
18
  | eBuilder 表单(菜单定位、List/NList、字段/浏览、OpenAPI 与自定义接口)、ebuilder-form operation、写操作 prepare/apply | `docs/ebuilder-form.md` |
18
19
  | E10 ESB 中心自定义触发动作流(入参模板查询 / prepare-apply 触发)、esb operation | `docs/esb.md` |
@@ -30,6 +31,8 @@
30
31
  | Agent 调用齐业成费控 CLI 的具体 reference | `skills/weaver-e10-qiyecheng/references/` |
31
32
  | Agent 调用计划报告 CLI 的入口路由 | `skills/weaver-e10-plan/SKILL.md` |
32
33
  | Agent 调用计划报告 CLI 的具体 reference | `skills/weaver-e10-plan/references/` |
34
+ | Agent 调用客户参观接待 CLI 的入口路由 | `skills/weaver-e10-reception-flow/SKILL.md` |
35
+ | Agent 调用客户参观接待 CLI 的具体 reference(抽取口径/面板约束/建单口径) | `skills/weaver-e10-reception-flow/references/` |
33
36
  | Agent 调用 OKR 目标管理 CLI 的入口路由 | `skills/weaver-e10-okr/SKILL.md` |
34
37
  | Agent 调用 OKR 目标管理 CLI 的具体 reference | `skills/weaver-e10-okr/references/` |
35
38
  | Agent 调用 ESB 动作流 CLI 的入口路由 | `skills/weaver-e10-esb/SKILL.md` |
@@ -67,7 +67,7 @@ weaver-work-cli --json invoice run invoice.list --input-json '{"page_size":10,"s
67
67
 
68
68
  删除、编辑、新增同样必须使用 `prepare -> apply`。出现 `partial/write_uncertain` 时停止,不能自动重试写操作。
69
69
 
70
- 处理“把发票填进流程表单”的场景,使用 `invoice.browse-field.data` 生成浏览按钮控件所需 JSON。处理“报销发票/自动填单”时,先读取 `invoice-reim.md`,用报销相关只读 operation 获取事前申请、工作流、表单结构、预填信息和人员上级;Agent 组装报销单结构化 JSON 后,必须通过 `invoice.reim.flow.create.prepare/apply` 或 `invoice.reim.flow.update.prepare/apply` 写入,创建报销单的 `work_flow_id/mainFormId/request_name/main_fields/detail_rows` 等字段在 operation 顶层传入,不包通用 `payload`。处理“开票”时默认读取 `invoice-issuing-workflow.md`:用 `invoice.issuing.qys.list` 的 `groups` 按合同号选定一组,确认后调用 `weaver-e10-workflow` 的 `workflow.createForm` / `workflow.createRequest`(`action` 固定 `draft`)发起开票流程草稿。只有用户明确要求“直接开票/不走流程/存待开台账”时,才读取 `invoice-issuing-qys-ledger.md`(台账行)或 `invoice-issuing.md` + `invoice-issuing-field-rules.md`(口述字段),走 `invoice.issuing.make.prepare/apply`。当前修正资料包没有客户档案查询或红字发票红冲接口,`invoice.customer.*` 和 `invoice.red.*` 不能调用或绕过。
70
+ 处理“把发票填进流程表单”的场景,使用 `invoice.browse-field.data` 生成浏览按钮控件所需 JSON。处理“报销发票/自动填单”时,先读取 `invoice-reim.md`,用报销相关只读 operation(`invoice.reim.candidates.list`、`invoice.reim.requests.list`、`invoice.reim.workflow.resolve`、`invoice.reim.employee-superiors`、`invoice.reim.field.search`)获取候选发票、事前申请、工作流、人员上级和相关客户/项目;报销单的载入、创建和修改统一走 `weaver-e10-workflow`:`workflow.createForm` 载入表单,`workflow.createRequest`(`action` 固定 `draft`)存草稿,修改走 `workflow.editLoad` / `workflow.editPrepare` / `workflow.editApply`。旧的 `invoice.reim.flow.create/update.*` 已移除,不要再调用。处理“开票 / 待开票合同”时读取 `invoice-issuing-workflow.md`:先用 `weaver-e10-workflow` 的 `workflow.search` 查出当前用户有权限看的合同审批流程,再把 `data.cards` 传给 `invoice.issuing.contracts.list` 补齐是否开票、合同号、客户名称和开票金额,列出待开票合同;用户选定后用 `invoice.issuing.contract.detail` 取合同客户与合同正文文档 id,按销售方选开票申请流程,问清预计收款时间并确认后用 `workflow.createForm` / `workflow.createRequest`(`action` 固定 `draft`)存草稿。当前修正资料包没有客户档案查询或红字发票红冲接口,`invoice.customer.*` 和 `invoice.red.*` 不能调用或绕过。
71
71
 
72
72
  ## 暂缓能力
73
73
 
@@ -68,7 +68,7 @@ weaver-work-cli --json archive-oa run archive-oa.contract.list --input-json '{"p
68
68
  ## 写操作确认协议
69
69
 
70
70
  - `*.prepare`:只读回查与参数校验(加入借阅车会查一次借阅车现状),返回 `preview` 与 `continuation`。
71
- - `*.apply`:必须带 `continuation` 且 `confirm: true`(CLI `--yes`);票据含环境与登录账号指纹,10 分钟有效。
71
+ - `*.apply`:必须带 `continuation` 且 `confirm: true`(CLI `--yes`);票据含环境与登录账号指纹,24 小时有效。
72
72
  - 发起借阅用 `archive-oa.borrow.start.url` 生成流程页 URL(只读,`risk: read`):生成后优先用系统默认浏览器打开,无法打开时原样输出完整 URL;流程表单由用户在浏览器确认并提交。OpenESB 版 `borrow.start.prepare` / `.apply` 已下线。
73
73
  - `failNum > 0` 时返回 `partial / write_uncertain`,不自动重放。
74
74
 
@@ -245,7 +245,7 @@ weaver-work-cli --json caizhilian run caizhilian.attachment.download --input-jso
245
245
  - **枚举拼写 1:1 沿用源接口**:权限相关键是 `deletePremisstion` / `downloadPremisstion` / `newCreateDocPremisstion` / `newCreateFolderPremisstion` / `settingPermission`(源拼写 `Premisstion`,不要改成 `Permission`)。
246
246
  - **根文件夹约定**:`folder_id` 100 = 系统、200 = 公共、300 = 个人;`folder_type` / `kb_type` 取 `company` / `privy` / `sys`。`folder.create` 在 `parent_type=privy` 时强制 `sequence=0`、`inherit_parent=false`。
247
247
  - **分页语义**:`has_next = 本页条数 >= page_size`;`page_no` / `page_size <= 0` 报 `validation/number_invalid`(源是静默归一,CLI 选择显式报错)。
248
- - **确认链**:票据有效期 10 分钟,绑定 baseUrl + 登录账号 + 目标 apply 操作名 + 入参指纹 + 请求体指纹(文件类还绑定 MD5 与大小)。相应报错为 `continuation_expired` / `continuation_context_mismatch` / `continuation_mismatch` / `continuation_args_changed` / `continuation_target_changed` / `plan_changed` / `file_changed`,一律重新 prepare。
248
+ - **确认链**:票据有效期 24 小时,绑定 baseUrl + 登录账号 + 目标 apply 操作名 + 入参指纹 + 请求体指纹(文件类还绑定 MD5 与大小)。相应报错为 `continuation_expired` / `continuation_context_mismatch` / `continuation_mismatch` / `continuation_args_changed` / `continuation_target_changed` / `plan_changed` / `file_changed`,一律重新 prepare。
249
249
  - **文件传输**:上传统一走 `preUploadCheck` → `module/upload`,命中 MD5 秒传时不真正传文件;下载文件名取响应头 `content-disposition`(已过滤路径穿越),同名文件按 `名称(1).扩展名` 自动改名,不覆盖。
250
250
  - **共享语义**:`share.add` 在服务端返回 `code=500 + status=true` 时判定为「已存在」,返回 `{ added: false, message }`,不算失败;其他业务失败抛 `api/business_error`。`participant.remove` 用 `share_entry_id` 而不是 `user_id`。
251
251
  - **标签语义**:`type=0` 公共标签(仅 document 可用)、`type=1` 个人标签;批量写操作按「公共组 + 个人组」两次请求提交,空组跳过。
package/docs/calendar.md CHANGED
@@ -53,7 +53,7 @@ weaver-work-cli --json calendar run <operation> --input-json '{"key":"value"}'
53
53
 
54
54
  1. `prepare` 只归一化、补默认值、查当前数据(更新/删除)、生成预览和 continuation,不写入。
55
55
  2. `apply` 必须带 `confirm=true` 与 prepare 返回的 continuation。
56
- 3. continuation 绑定 `baseUrl`/`profile`/`userId`,10 分钟有效;变化触发 `context_mismatch`,字段指纹变化触发 `target_changed`。
56
+ 3. continuation 绑定 `baseUrl`/`profile`/`userId`,24 小时有效;变化触发 `context_mismatch`,字段指纹变化触发 `target_changed`。
57
57
  4. 网络中断抛 `partial/write_uncertain`,禁止自动重试,先做只读回查。
58
58
 
59
59
  ## 关键业务规则
package/docs/contract.md CHANGED
@@ -100,7 +100,7 @@ weaver-work-cli --json contract run contract.workflow.query --input-json '{"work
100
100
 
101
101
  ## 写操作确认链
102
102
 
103
- - 写操作一律 `prepare -> apply`:`prepare` 返回脱敏 `preview` 与 `continuation`(有效期 10 分钟),`apply` 必须带 `continuation` 与 `confirm: true`。
103
+ - 写操作一律 `prepare -> apply`:`prepare` 返回脱敏 `preview` 与 `continuation`(有效期 24 小时),`apply` 必须带 `continuation` 与 `confirm: true`。
104
104
  - 提交审批与催办需要与“创建并保存”分开的第二次确认。
105
105
  - 提交后回读 `contract.request.status`,`flowStatus.code` 为 1(审批中)或 3(已归档)才算生效。
106
106
  - 写请求超时或断线返回 `partial/write_uncertain`(退出码 11),禁止自动重放。
package/docs/e10-auth.md CHANGED
@@ -94,6 +94,22 @@ E10 兼容的 auth 文件。
94
94
 
95
95
  静默恢复失败时,`authentication/xiaoe_credential_unavailable` 会带 `details` 以便定位而不必复现:`attemptedSteps` 按序记录评估过的凭证通道及结果(如 `platform_token:missing`、`bundled_env_script:failed`、`token_script:disabled`、`environment_map:empty`、`e10_session:failed`),`failures` 按发生顺序保留每一次失败的阶段(`platform_token` / `bundled_env_script` / `token_script` / `client_session` / `teams_check` / `e10_session`)、类别(`network` / `http` / `credential`)以及网络错误的系统错误码 `causeCode`(取自 `error.cause.code`,如 `ECONNREFUSED`、`ETIMEDOUT`)和 HTTP 错误的状态码 `httpStatus`,`lastError` 是最后一条真实原因(已对已知凭据脱敏并截断到 300 字符),并附带解析出的 `baseUrl`、`clientType`、`platformCredentialDetected`、整体归类 `errorKind` 与最后失败阶段 `failureStage`;若票其实换到了、但按 `expiryTimes` 判定为已过期,会额外带 `resultSessionExpired: true`。当且仅当所有失败都是网络错误时,错误改为 `authentication/xiaoe_network_unavailable`、`retryable: true`,文案换成“暂时无法连接 E10,请稍后重试”(此时登录态并未被验证,提示用户重新登录属于误导)。这条路径默认依然完全无输出,需要看每一步的过程日志时给业务命令加 `--verbose`(经 stderr 以 `[debug]` 前缀输出;`--json` 下完全不输出)。
96
96
 
97
+ 显式 `auth xiaoe` 失败和上述静默恢复失败都会把同一份诊断持久化为 JSON Lines。
98
+ 持久化前会再次移除 URL 查询参数、已知凭据、Bearer 值和服务端原始 `details`;日志不保存
99
+ Cookie、ETEAMSID 或 Token。支持 POSIX 权限的平台会把日志目录和文件分别限制为 `0700`
100
+ 和 `0600`。查看与清理只通过 CLI:
101
+
102
+ ```text
103
+ weaver-work-cli auth logs
104
+ weaver-work-cli auth logs show --limit 100
105
+ weaver-work-cli --json auth logs show --limit 100
106
+ weaver-work-cli auth logs path
107
+ weaver-work-cli auth logs clear
108
+ ```
109
+
110
+ `auth logs` 默认按时间倒序显示最近 50 条,`--limit` 范围为 1–500;`auth logs clear`
111
+ 只删除固定的 XiaoE 认证错误日志,不影响 profile、登录态或 keychain。
112
+
97
113
  网页端若返回 `details.reason=host_credential_not_injected`,表示沙箱仍带 `XIAOE_CLIENT_TYPE=cloud` 标记,但宿主注入的平台凭据在启动子进程时丢失。这不是 E10 登录损坏,也不能通过重试或浏览器 OAuth 自愈;沙箱启动器必须保留宿主环境并只定向覆盖 `WEAVER_WORK_CLI_AUTH_ROOT` 等测试变量,不得用 `env -i`、空环境字典或不包含 XiaoE 平台凭据的白名单启动 CLI。凭据值不得写入命令、日志或错误详情。
98
114
 
99
115
  `auth whoami` 默认读取本地缓存,不发网络请求;`auth whoami --live` 会调用
package/docs/ehr.md CHANGED
@@ -113,7 +113,7 @@ HR 报表类接口走 `application/x-www-form-urlencoded`(`sourceType=LOGIC` +
113
113
 
114
114
  1. `prepare` 只预览并生成 continuation,不发送写请求。
115
115
  2. `apply` 必须带 `confirm=true` 与 `prepare` 返回的 continuation。
116
- 3. continuation 绑定 `baseUrl`/`profile`/`userId`,10 分钟有效;租户或账号变化会触发 `context_mismatch`。
116
+ 3. continuation 绑定 `baseUrl`/`profile`/`userId`,24 小时有效;租户或账号变化会触发 `context_mismatch`。
117
117
  4. 关键参数与 `prepare` 快照不一致时触发 `target_changed`,必须重新 `prepare`。
118
118
  5. 网络中断抛出 `partial/write_uncertain`(退出码 `partial`),**禁止自动重试**,先做只读回查。
119
119
 
@@ -168,7 +168,7 @@ printf '%s\n' '{"beginDate":"2026-03-01","endDate":"2026-03-31"}' | weaver-work-
168
168
  招聘 EB 接口要求 `ebBusinessId: <listId>` 请求头,`ds/fields` 要求 multipart/form-data,
169
169
  两者由 `host.ts` 的 `headers`/`multipart` 通道支持(认证头仍由运行时统一注入并保护)。
170
170
 
171
- **招聘写操作**(`operations/recruit-write.ts`):candidate.create / interview.arrange / offer.send / entry.process / interview.feedback.edit / interview.feedback.urge 六对 prepare→apply 已实现(迁移自 ehr 技能 recruit-* 写脚本),全部走确认链协议:prepare(只读定位/查重/枚举与人员解析 + 摘要 + continuation 10 分钟)→ 用户确认 → apply(confirm + 指纹校验 + 会话绑定校验 + 部分操作 apply 阶段二次查重);多步写入(saveFormData → initTalentBatch / sendOffer / saveEstPreEntry / runEsb)中断报 `partial/write_uncertain` 禁止自动重试。Offer 邮件、面试通知(notify)、催评为 L3 外部通知。esbActionIds 全部运行时按钮解析(getFormButtons/getListButtons),解析不到阻断不编造。入职撤销(entry.cancel.change)暂缓实现。
171
+ **招聘写操作**(`operations/recruit-write.ts`):candidate.create / interview.arrange / offer.send / entry.process / interview.feedback.edit / interview.feedback.urge 六对 prepare→apply 已实现(迁移自 ehr 技能 recruit-* 写脚本),全部走确认链协议:prepare(只读定位/查重/枚举与人员解析 + 摘要 + continuation 24 小时)→ 用户确认 → apply(confirm + 指纹校验 + 会话绑定校验 + 部分操作 apply 阶段二次查重);多步写入(saveFormData → initTalentBatch / sendOffer / saveEstPreEntry / runEsb)中断报 `partial/write_uncertain` 禁止自动重试。Offer 邮件、面试通知(notify)、催评为 L3 外部通知。esbActionIds 全部运行时按钮解析(getFormButtons/getListButtons),解析不到阻断不编造。入职撤销(entry.cancel.change)暂缓实现。
172
172
 
173
173
  ## 禁用边界
174
174
 
package/docs/esb.md CHANGED
@@ -32,7 +32,7 @@ src/shortcuts/esb/
32
32
  | operation | 风险 | 用途 |
33
33
  | --- | --- | --- |
34
34
  | `esb.input-format` | `read` | 按 `applicationId` 取回 `customParams` 模板、`moduleSource` 与 `esbFlowId`;无副作用 |
35
- | `esb.trigger.prepare` | `read-before-write` | 只读回查目标动作流、组装触发请求体、签发 continuation(10 分钟);不触发动作流 |
35
+ | `esb.trigger.prepare` | `read-before-write` | 只读回查目标动作流、组装触发请求体、签发 continuation(24 小时);不触发动作流 |
36
36
  | `esb.trigger.apply` | `high-risk-write` | 校验 continuation 与登录身份后调用触发接口,需 `confirm: true` |
37
37
 
38
38
  ## 常见命令
package/docs/im.md CHANGED
@@ -68,7 +68,7 @@ weaver-work-cli --json im run <operation> --input-json '{"key":"value"}'
68
68
 
69
69
  所有写操作(send/withdraw/top.set/ding/group 系列)统一 `prepare → apply`:
70
70
 
71
- - `prepare`:只读校验(成员解析、源消息读取、接收人计算),返回 `summary` + `continuation`(HMAC-SHA256 签名,10 分钟有效,含 baseUrl/profile/userId 指纹与 snapshot 指纹)。
71
+ - `prepare`:只读校验(成员解析、源消息读取、接收人计算),返回 `summary` + `continuation`(HMAC-SHA256 签名,24 小时有效,含 baseUrl/profile/userId 指纹与 snapshot 指纹)。
72
72
  - `apply`:必须 `confirm:true` + 有效 continuation;校验租户/账号一致(`context_mismatch`)与目标指纹(`target_changed`);执行后不确定结果返回 `partial/write_uncertain`,禁止自动重试。
73
73
 
74
74
  会话提醒设置(`im.user.setRemind`,接口 `POST /api/em/msg/executeIm/user/setMsgRemind`)走同一确认链:`sessionType` 取 `1` 单聊会话(`toUid`+`toCid`)、`2` 群聊会话(`groupId`)、`4` 系统会话(`group`);`reminder` 取 `0` 消息接收提醒 / `1` 消息接收但不提醒(免打扰)。操作者身份由 CLI 用当前登录人填充,调用方不能自带。
package/docs/invoice.md CHANGED
@@ -52,6 +52,8 @@ weaver-work-cli --json invoice list --fields number,detailUrl
52
52
 
53
53
  当前输出层把完整 JSON 直接写 stdout。0.1.17 起可用 `--view summary`(列表语义平表,仅 `invoice.list` / `invoice.enterprise.list` 支持)与 `--fields a,b.c`(点路径投影,所有 operation 可用)裁剪输出——两者互斥,只影响输出、不改变请求参数;仍不提供飞书 CLI 的 `--jq`、`--format table/ndjson` 或通用 `--page-all`。Agent 使用时应默认小页读取和摘要渲染:列表先 `page_size=10`,按 `start_pos` 继续;回复只展示关键字段和数量,超长详情/OCR/调试 JSON 落本地文件后给路径。
54
54
 
55
+ 票面扩展信息 `ext`(费用说明、城市、备注、起止地、上下车站点)对报销按城市 / 行程筛票很关键。`/api/inc/sync` 的 `mext` 按位选择返回哪些 `ext` 字段,不传就不返回 `ext`,所以 `invoice.list` / `invoice.enterprise.list` 默认传 `mext=2147483647` 取回完整 `ext`(调用方显式传的 `mext` 优先)。每条发票保留原始 `ext` 字符串,另加解析好的 `extInfo`(`expenseNote`、`content`、`city`、`province`、`comment`、`from`、`to`、`stationGetOn`、`stationGetOff`,空值省键);`--view summary`、`--view detail` 把这些字段平铺展示。提取逻辑在 `src/shortcuts/invoice/invoice-record.ts`,列表项是 `{ info, ret }` 包装时也能识别。
56
+
55
57
  ## Operation 目录
56
58
 
57
59
  | Operation | 风险 | 固定规则 |
@@ -69,17 +71,15 @@ weaver-work-cli --json invoice list --fields number,detailUrl
69
71
  | `invoice.delete.prepare/apply` | 高风险写 | 固定软删除 `flag=0`,确认后执行并回查 |
70
72
  | `invoice.browse-field.data` | 只读 | 基于详情接口生成流程表单发票浏览按钮 JSON |
71
73
  | `invoice.reim.file-ocr.preview` | 文件识别预览 | 对 E10 fileId 调用报销场景的发票识别接口,只保留成功项 |
72
- | `invoice.reim.requests.list` | 只读 | 查询事前申请流程列表,默认 `pageNo=1`、`pageSize=100`;未传 `cusCreateDateEnd` 时按东八区当天 + 1 天填入,传入时按该日期再 + 1 天发给接口;每条只输出 `requestid` / `workflowid` / `requestname` / `flowStatus` / `creatorId` / `creatorName` / `createTime` |
74
+ | `invoice.reim.requests.list` | 只读 | 查询事前申请流程列表,默认 `pageNo=1`、`pageSize=100`;结束日取传入的 `cusCreateDateEnd` 或东八区当天,发给接口时再 + 1 天;未传 `cusCreateDateStart` 时取结束日前 7 天,第 1 页为空自动放宽到结束日前 1 个月再查一次,`scene="phone"`(话费)时取结束日前 90 天且不放宽;返回 `data.query`(实际 `cusCreateDateStart`、业务结束日 `cusCreateDateEnd`、`widened`);每条只输出 `requestid` / `workflowid` / `requestname` / `flowStatus` / `creatorId` / `creatorName` / `createTime` |
73
75
  | `invoice.reim.workflow.resolve` | 只读 | 根据事前申请 ID 获取报销工作流;无事前申请时传空数组 |
74
- | `invoice.reim.form.structure` | 只读 | 获取报销流程表单字段结构 |
75
- | `invoice.reim.row-info` | 只读 | 使用 urlencoded 请求获取单张发票明细行预填信息 |
76
+ | `invoice.reim.candidates.list` | 只读 | 按日期自动翻页拉取未报销发票,分成 `available`(可报)/ `assigned`(已挂单)两组并给出金额合计 |
76
77
  | `invoice.reim.employee-superiors` | 只读 | 获取当前人员和上级信息 |
77
78
  | `invoice.reim.field.search` | 只读 | `GET /api/government/formStructure/fieldRelateSearch`;按名称模糊搜相关客户或相关项目。返回 `match=unique/multiple/none`:一条直接填 `名称(ID)`,多条让用户选。报销时客户和项目必须在建草稿前确认 |
78
- | `invoice.reim.flow.create.prepare/apply` | 高风险写 | continuation 绑定已组装报销单 JSON;`work_flow_id/mainFormId/request_name/main_fields/detail_rows` 等字段在 schema 顶层逐项暴露,确认后调用 `createFlowNew` |
79
- | `invoice.reim.flow.update.prepare/apply` | 高风险写 | continuation 绑定更新报销单 JSON;确认后调用 `updateFlow` |
80
- | `invoice.issuing.qys.list` | 只读 | 获取待开票合同数据(含契约锁、泛微及其他合同),返回可开票行 `items` 与按「合同号 + 购方」汇总的 `groups`(开票金额合计按分累加、`blockedRows` 计不可开票行、`sellerNames` 为核算公司);AI 开票据此调用 `weaver-e10-workflow` 发起开票流程草稿 |
79
+ | `invoice.issuing.contracts.list` | 只读 | 入参 `cards`(`workflow.search` 返回的 `data.cards`,原样传入)或 `requestIds`,二选一,最多 50 条。对每个 `requestId` 调一次 `POST /api/ebuilder/form/eblist/getData`(合同虚拟表,按「合同审批流程」过滤,明细按 100 行一页取完),把结果拼回卡片:`invoiced`(查不到明细为 `true`,即已开票)、`contractNo`、`customerName`、`buyerTaxNo`、`sellerName`、`invoiceAmount`(全部明细金额之和,两位小数)、`invoiceGroups[]`(按分组标识汇总 `group` / `amount` / `items[]`);顶层返回 `count`、`pendingCount`、`invoicedCount`。AI 开票先用 `weaver-e10-workflow` 的 `workflow.search` 查三个合同审批流程(用户点名检索词时追加 `requestName`,按流程标题模糊搜索;不传则不带该字段),再用本命令列出待开票合同 |
80
+ | `invoice.issuing.contract.detail` | 只读 | 入参 `requestId`(用户选定的合同审批流程)。`POST /api/workflow/core/paService/v1/getWorkflowRequest`(`isReadRequest=false`,不标记已读),只取主表:`customer`(「客户名称」Ebuilder 的 `{id, name}`,没有时取「最终用户卡片」)、`customerSource`、`contractDocuments[]`(「合同正文及附件」每个文件的 `docId` / `fileId` / `name`)、`contractDocIds`(全部 `docId` 逗号连接)。AI 开票「合同客户」填 `customer` 的 `{id, name}`;「合同文本」与合同流程一样,按每个文件的 `docId`、`name` 填 `{id, name}`,多个文件传数组,不要填 `contractDocIds` 逗号串或纯数字 id |
81
81
 
82
- > 直接开票类 operation(`invoice.issuing.make.prepare/apply`、`invoice.issuing.qys.prepare`、`invoice.issuing.result`)已于 0.1.27 移除:开票按销售方选择流程草稿(销售方取台账「核算公司」,名称必须完全相同:「上海亘岩网络科技有限公司」走「契约锁合同收款发票开具及快递申请」;泛微网络、泛微软件、上海田亩、成都泛微、泛微国际、北京泛微、浙江泛微走「合同收款发票开具及快递申请」;为空或不在名单里时先问用户;退票、冲红、红冲走「合同开票冲红流程」),不再支持绕过流程直接调用 `makeInvoice`。
82
+ > 报销单的创建与修改统一走 `weaver-e10-workflow`(`workflow.createForm` / `workflow.createRequest` / `workflow.edit*`),旧的 `invoice.reim.form.structure`、`invoice.reim.row-info`、`invoice.reim.row-info-batch`、`invoice.reim.flow.create.prepare/apply`、`invoice.reim.flow.update.prepare/apply`、`invoice.reim.template.build`、`invoice.reim.flow.create.auto-prepare` 已移除;`invoice.issuing.qys.list` 也已由 `invoice.issuing.contracts.list` / `invoice.issuing.contract.detail` 取代。调用这些旧 operation 会返回 `validation/operation_retired`(退出码 2),`error.details` 给出 `replacement`(替代链路)和 `reference`(skill 文档),完整清单见 `invoice schema` 的 `retiredOperations`。
83
83
 
84
84
  共享、转让和标签仍暂不暴露给 Agent:新版源资料给出了提交接口,但还缺少稳定的接收人 `appid/cid/uid` 解析来源、标签关系查询和写后回查契约。
85
85
 
@@ -107,8 +107,6 @@ weaver-work-cli --json invoice run invoice.ocr.preview --input-json '{"file":"./
107
107
  weaver-work-cli --json invoice import prepare --input-json '{"file":"./invoice.pdf","validate":true,"syncToOa":true}'
108
108
 
109
109
  weaver-work-cli --json invoice import apply --input-json '{"file":"./invoice.pdf","continuation":"PREPARE_CONTINUATION","confirm":true}'
110
-
111
- weaver-work-cli --json invoice run invoice.reim.flow.create.prepare --input .\reim-create.json
112
110
  ```
113
111
 
114
112
  macOS/Linux(bash/zsh):
@@ -119,13 +117,11 @@ weaver-work-cli --json invoice run invoice.ocr.preview --input-json '{"file":"./
119
117
  weaver-work-cli --json invoice import prepare --input-json '{"file":"./invoice.pdf","validate":true,"syncToOa":true}'
120
118
 
121
119
  weaver-work-cli --json invoice import apply --input-json '{"file":"./invoice.pdf","continuation":"PREPARE_CONTINUATION","confirm":true}'
122
-
123
- weaver-work-cli --json invoice run invoice.reim.flow.create.prepare --input ./reim-create.json
124
120
  ```
125
121
 
126
122
  导入发票文件或远程 URL 时,面向 Agent 的正常链路是先 `invoice.ocr.preview`,再 `invoice.import.prepare` 使用 `validate=true`、`syncToOa=true`。只有用户明确要求跳过查验或离线导入时才传 `validate=false`;`validate=false` 表示跳过查验,不能描述为“查验通过”。`filedMap`、嵌套字段映射等 JSON 参数在 `--input-json` 中保持对象,CLI 只在 multipart 提交前序列化。
127
123
 
128
- 报销单创建只接受 Agent 已组装好的结构化 JSON;开票按销售方选择流程后,通过 `weaver-e10-workflow` 发起对应开票流程草稿(退票、冲红、红冲发起「合同开票冲红流程」),CLI 不再提供直接开票接口。发票与事前申请只按时间关联,一张发票同时落在多条事前申请上时由用户选择。CLI 不负责猜测出差客户或税率;这些规则在 Skill reference 中指导 Agent 组装和展示预览。报销单创建的字段必须在 operation 顶层逐项传入,不再包一层通用 `payload`。当前修正资料包没有客户档案查询或红字发票红冲接口,`invoice.customer.*` 和 `invoice.red.*` 不暴露为 operation,Agent 不能绕过 CLI 调用原始接口。写操作出现网络中断、部分成功、缺少回执 ID 或回查失败时,CLI 返回 `partial/write_uncertain`,Agent 禁止自动重复提交。
124
+ 报销单由 Agent 按 Skill 规则组装 `data` 后,通过 `weaver-e10-workflow` 存草稿;待开票合同由 `workflow.search` 查出合同审批流程后(用户点名检索词时追加 `requestName` 做标题模糊搜索),交给 `invoice.issuing.contracts.list` 补齐开票信息;用户选定并确认后,按销售方通过 `weaver-e10-workflow` 创建「合同收款发票开具及快递申请」或「契约锁合同收款发票开具及快递申请」草稿,不提交。发票与事前申请只按时间关联,一张发票同时落在多条事前申请上时由用户选择。CLI 不负责猜测出差客户或税率;这些规则在 Skill reference 中指导 Agent 组装。当前修正资料包没有客户档案查询或红字发票红冲接口,`invoice.customer.*` 和 `invoice.red.*` 不暴露为 operation,Agent 不能绕过 CLI 调用原始接口。写操作出现网络中断、部分成功、缺少回执 ID 或回查失败时,CLI 返回 `partial/write_uncertain`,Agent 禁止自动重复提交。
129
125
 
130
126
  ## 编辑白名单
131
127
 
package/docs/okr.md CHANGED
@@ -77,7 +77,7 @@ OKR 目标在不同租户走两套互不兼容的接口链路,由 `okr.version
77
77
 
78
78
  1. `prepare` 只归一化、补默认值、查当前数据(编辑时)、生成预览和 continuation,不写入。
79
79
  2. `apply` 必须带 `confirm=true` 与 prepare 返回的 continuation。
80
- 3. continuation 绑定 `baseUrl`/`profile`/`userId`,10 分钟有效;变化触发 `context_mismatch`,字段指纹变化触发 `target_changed`。
80
+ 3. continuation 绑定 `baseUrl`/`profile`/`userId`,24 小时有效;变化触发 `context_mismatch`,字段指纹变化触发 `target_changed`。
81
81
  4. 网络中断抛 `partial/write_uncertain`,禁止自动重试,先做只读回查。
82
82
 
83
83
  ## 关键业务规则
@@ -0,0 +1,119 @@
1
+ # reception — 泛微客户参观接待流程
2
+
3
+ `reception` 模块把「客户参观接待」这条业务链路收敛成三个 operation:出面板、出件并挂附件、输出填单页。
4
+ 它原本是一个独立的 `@weaver/reception-cli` 包(含自建鉴权、会话缓存、写闸门、客户/人员 ID 检索),
5
+ 现已并入 `weaver-work-cli`,**独立包退役**。
6
+
7
+ ## 为什么合并
8
+
9
+ 旧实现有 2874 行代码,其中约 1200 行是"因为不在 CLI 里"才产生的重复设施:
10
+
11
+ | 旧模块 | 行数 | 合并后 |
12
+ |---|---|---|
13
+ | `cli.js` + `session-cache.js`(spawn CLI 换会话、落盘 session.env) | 261 | 删,改用 `requireE10Session` |
14
+ | `customer.js` + `employee.js`(查客户/人员 ID) | 298 | 删,v5.4.0 起直接传中文名 |
15
+ | `formctx.js`(实时取表单结构) | 72 | 删,主链路用字段快照 |
16
+ | `payload.js` + `submit.js` + `gate.js` 闸门(兜底写链路) | 166 | 删,需要写时直接用 `workflow` 模块 |
17
+ | `commands.js` 的 prepare/build | ~330 | 删,同上 |
18
+ | `bin/reception.js` | 30 | 并入命令面 |
19
+
20
+ 保留的是纯业务口径:字段映射、日程 7 列、customParams 拼装、browsertool 渲染、面板与后勤解析。
21
+
22
+ ## CLI 结构
23
+
24
+ ```text
25
+ weaver-work-cli reception --help
26
+ weaver-work-cli reception schema
27
+ weaver-work-cli --json reception ask --known-file known.json [--user "<姓名>"]
28
+ weaver-work-cli --json reception doc --run-id <id> --answers-file answers.json --snapshot <skill>/data/fields-snapshot.json
29
+ weaver-work-cli --json reception render --run-id <id>
30
+ ```
31
+
32
+ > 示例为 macOS/Linux 写法;**Windows PowerShell** 下路径用引号包起来即可(`--snapshot "C:\...\fields-snapshot.json"`),参数完全一致。
33
+
34
+ `--snapshot` 只在 `doc` 传一次:`doc` 成功后路径写进 run,`render` 直接复用。
35
+ 只有 run 被重建(`RUN_NOT_FOUND` 后现场重建)时,`render` 才需要补传。
36
+
37
+ 通用入口也支持 operation 名:
38
+
39
+ ```text
40
+ weaver-work-cli --json reception run reception.ask --input-json '{"known":{"customer":"某某集团"}}'
41
+ ```
42
+
43
+ ## operation 合约
44
+
45
+ | operation | risk | 作用 |
46
+ |---|---|---|
47
+ | `reception.ask` | read | 按 7 项抽取结果算缺口、出面板,返回 `runId` |
48
+ | `reception.doc` | read | 渲染行程单 docx + 内部参考 md,上传两份附件拿 fileid |
49
+ | `reception.render` | read | 按快照拼 `customParams`,输出 `<browsertool>` |
50
+
51
+ 全链路 **零写请求**(`writePolicy: none`):只上传附件,流程由用户在页面上提交。
52
+ 因此三个 operation 都是 `read`,也没有 continuation 票据。
53
+
54
+ ## 典型链路
55
+
56
+ ```text
57
+ ask(出面板,≤2 屏)
58
+ → ask_user(panels) 只调一次
59
+ → (案例 + 专家检索,软依赖) 结果写 cases.json
60
+ → doc 两份产物 + attachments
61
+ → render browsertool,宿主打开填单页
62
+ ```
63
+
64
+ 失败恢复的关键一条:`RUN_NOT_FOUND` 时**不要重跑 ask**,把 `--known` 带上重跑 `doc`,
65
+ CLI 会现场重建 run 并返回 `rebuilt: true` + 新 `runId`。
66
+
67
+ ## 资产边界
68
+
69
+ CLI 不打包下面这两个,它们属于技能包 `weaver-e10-reception-flow`:
70
+
71
+ | 资产 | 位置 | 谁读 |
72
+ |---|---|---|
73
+ | 字段快照 `fields-snapshot.json` | `<skill>/data/` | CLI(经 `--snapshot`) |
74
+ | 渲染器 `render.py` + 行程单模板 | `<skill>/scripts/`、`<skill>/assets/` | CLI 调起 python 子进程 |
75
+
76
+ `render.py` 用自身路径定位模板(`../assets/行程单模板-泛微.docx`),CLI 只需找到脚本本身:
77
+ 优先 `--render-py`,其次从 `--snapshot` 反推 `<skill>/scripts/render.py`。
78
+
79
+ ## 状态与缓存
80
+
81
+ - `<stateRoot>/reception/runs/<runId>.json`:run 状态(`ask` 建、`doc` 写、`render` 读)
82
+ - `<stateRoot>/reception/python.json`:python 探测结果,7 天有效
83
+ - `<stateRoot>/reception/out/`:默认产物目录(`--out-dir` 可覆盖)
84
+
85
+ `stateRoot` 与 CLI profile 同级(Windows 默认 `~/.weaver-work-cli`),多环境不串。
86
+
87
+ ## 源码结构
88
+
89
+ ```text
90
+ src/shortcuts/reception/
91
+ ├── index.ts 命令面:schema / run / ask / doc / render
92
+ ├── manifest.ts operation 合约(schema 原样输出)
93
+ ├── operations.ts 调度入口 + 凭据字段拦截
94
+ ├── constants.ts 流程名、面板文案、后勤字段
95
+ ├── host.ts 会话 + 上传(复用 runtime 的 formData)
96
+ ├── errors.ts 域内结构化错误
97
+ └── operations/
98
+ ├── ask.ts / doc.ts / render.ts
99
+ ├── panels.ts 后勤解析、answers 合并、面板生成
100
+ ├── compose.ts 接待数据 → customParams
101
+ ├── customparams.ts 多值/明细拼接口径
102
+ ├── schedule.ts 日程 7 列与标准议程
103
+ ├── browsertool.ts fill_form + sdkOptions
104
+ ├── snapshot.ts 快照定位与漂移对拍
105
+ ├── render-assets.ts python 探测 + render.py 调度
106
+ ├── runs.ts run 状态
107
+ └── shared.ts JSON 入参、哈希、稳定序列化
108
+ ```
109
+
110
+ ## 验证
111
+
112
+ ```bash
113
+ npm run build
114
+ node dist/index.js reception --help
115
+ node dist/index.js --json reception schema
116
+ node --test --import tsx test/business/reception-*.test.ts
117
+ ```
118
+
119
+ `doc` 的真实渲染用例需要 python-docx 与技能包同时存在,缺任一项会自动跳过。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "weaver-work-cli",
3
- "version": "0.1.42",
3
+ "version": "0.1.44",
4
4
  "description": "面向泛微工作工具链的可扩展 TypeScript CLI 基础框架(E10 业票通等能力)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
package/scripts/clean.mjs CHANGED
@@ -1,4 +1,45 @@
1
- import { rmSync } from 'node:fs';
1
+ #!/usr/bin/env node
2
+ /**
3
+ * 清 dist。
4
+ *
5
+ * 不用 fs.rmSync 的原因:本机给 Node 注入了 safe-delete 拦截层(node-language-shim.cjs),
6
+ * 删除会改走回收站,几百个文件逐个 spawn 回收站命令,表现为"构建卡住不动"。
7
+ * 这里优先用系统删除命令(不经过 shim),失败再退回 Node 原生实现。
8
+ *
9
+ * 这是清构建产物,不是删用户数据,所以不进回收站是符合预期的。
10
+ */
11
+ import { existsSync, rmSync } from 'node:fs';
12
+ import { spawnSync } from 'node:child_process';
2
13
  import { resolve } from 'node:path';
3
14
 
4
- rmSync(resolve('dist'), { recursive: true, force: true });
15
+ // 防误删:只允许在项目根执行
16
+ if (!existsSync(resolve('package.json'))) {
17
+ console.error('clean: 请在项目根目录执行(找不到 package.json)');
18
+ process.exit(1);
19
+ }
20
+
21
+ const target = resolve('dist');
22
+ if (!existsSync(target)) process.exit(0);
23
+
24
+ // 系统命令优先:不经过 Node 的删除拦截层
25
+ const ok = process.platform === 'win32'
26
+ ? spawnSync('cmd.exe', ['/c', 'rmdir', '/s', '/q', target], { stdio: 'ignore' }).status === 0
27
+ : spawnSync('rm', ['-rf', target], { stdio: 'ignore' }).status === 0;
28
+
29
+ if (ok && !existsSync(target)) process.exit(0);
30
+
31
+ // 系统命令不可用时退回原生实现
32
+ try {
33
+ rmSync(target, { recursive: true, force: true });
34
+ } catch (error) {
35
+ console.error(`clean: 删除失败:${error.message}`);
36
+ }
37
+
38
+ // 仍失败就停下来,不要让 build 带着 stale 产物继续
39
+ if (existsSync(target)) {
40
+ console.error('clean: dist 仍存在,请手动删除后重跑:');
41
+ console.error(process.platform === 'win32'
42
+ ? ` Remove-Item -Force -Recurse "${target}"`
43
+ : ` rm -rf "${target}"`);
44
+ process.exit(1);
45
+ }
@@ -88,7 +88,6 @@
88
88
  "自动填单",
89
89
  "事前申请报销",
90
90
  "开票",
91
- "存台账",
92
91
  "发票浏览按钮"
93
92
  ],
94
93
  "weaver-e10-jucailin": [
@@ -549,5 +548,22 @@
549
548
  "置信度",
550
549
  "处置建议",
551
550
  "资管家闲置"
551
+ ],
552
+ "weaver-e10-reception-flow": [
553
+ "客户参观",
554
+ "客户来访",
555
+ "客户到访",
556
+ "客户接待",
557
+ "接待流程",
558
+ "接待行程单",
559
+ "参观接待",
560
+ "来访接待",
561
+ "接待细节",
562
+ "行程单",
563
+ "接待方案",
564
+ "接待交流参考文档",
565
+ "参观总部",
566
+ "参观典型客户",
567
+ "客户参观接待流程"
552
568
  ]
553
- }
569
+ }
@@ -16,7 +16,7 @@ Agent 调优重点:
16
16
  - 业务输入不得包含 Cookie、ETEAMSID、Token 或内部控制字段;认证只走 `weaver-work-cli auth ...`。
17
17
  - ID 一律来自查询:`doc_id` 来自检索或详情,`folder_id` 来自 `folder.query-by-name`,人员与部门 ID 来自 `org.search-*`,权限与共享的合法取值来自 `*.form` / `*.list`。
18
18
  - 枚举拼写 1:1 沿用源接口,权限键是 `deletePremisstion` / `downloadPremisstion` / `newCreateDocPremisstion` / `newCreateFolderPremisstion`,不要「纠正」成 `Permission`。
19
- - 写操作只接受 CLI 生成的 continuation,不手工构造、不跨操作复用;apply 入参必须与 prepare 逐字一致,票据有效期 10 分钟。
19
+ - 写操作只接受 CLI 生成的 continuation,不手工构造、不跨操作复用;apply 入参必须与 prepare 逐字一致,票据有效期 24 小时。
20
20
  - 分页 `has_next` 按「本页条数 >= page_size」判定,服务端 `total` 不可信;列表默认小页,回复只给摘要。
21
21
  - 附件、封面图片、正文文件属于用户私有数据:上传下载前必须提醒文件可能进入大模型上下文并取得明确确认;文件内容不得读入上下文,只引用路径与元数据。
22
22
  - 上传与下载是长耗时操作(120 秒超时、下载上限 100MB),一次只跑一个,不并发批量传输。
@@ -0,0 +1,18 @@
1
+ 本业务域用于泛微客户参观接待,覆盖「从原话抽取 → 补缺口 → 出两份产物 → 打开填单页」这一条完整链路。入口 `SKILL.md` 按 weaver 风格组织:CRITICAL 共享前置、四步主流程、原话抽取口径、面板约束、建单口径、失败处理、重跑恢复。具体细节拆到 `references/`:
2
+
3
+ - `guide.md`:7 项抽取线索、歧义判据、引导话术、案例与专家检索口径(**只讲抽取与检索,不讲交互形态**)。
4
+ - `browsertool.md`:`<browsertool>` 的 `fill_form + sdkOptions` 形态、`sdkRenderType` 取值含义与排障。
5
+ - `fields-snapshot.md`:字段 ID / 组件类型 / 选项编码 / 明细 7 列的人读对照版;程序读 `data/fields-snapshot.json`。
6
+ - `env-pitfalls.md`:环境踩坑、退出码语义、完整失败矩阵与假阴性判定。
7
+
8
+ Agent 调优重点:
9
+
10
+ - 意图命中「客户来访 / 参观 / 到访 / 接待」即进入本域,先抽取 7 项再决定问什么,不要一上来就提问。
11
+ - 抽取由模型做,CLI 不重做:`reception.ask` 只按 `--known` 算缺口并出面板。
12
+ - 面板只能原样来自 `ask` 回包,**总屏数 ≤2**(客户需求 + 接待细节),手机号并入接待细节,不单独出屏。
13
+ - `ask_user` 只调一次;用户少答的进待办,禁止二轮追问。
14
+ - 案例与专家检索是软依赖:先检索再出件,工具缺失或空结果才跳过,并在内部文档「待确认事项」注明。
15
+ - 两份产物分别是对外行程单 docx 与内部参考 md;**案例与专家只进内部 md**,对外件 `externalLeaks` 必须为 0。
16
+ - 本链路零写请求:只上传附件,流程由用户在页面上自己提交,助手不得代点。
17
+ - `RUN_NOT_FOUND` 时不重跑整轮、不重走面板:带 `--known-file` 重跑 `doc`,CLI 现场重建 run。
18
+ - 技能包只提供数据与资产(快照 / `render.py` / 模板),doc 与 render 必须显式 `--snapshot "$SD/data/fields-snapshot.json"`。