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,127 @@
1
+ # 环境能力探测(运行时自适应,不写死版本)
2
+
3
+ >
4
+ > **核心原则:不判断"是哪个版本",而是运行时探测"这个环境有哪些能力"**。探测结果驱动路由——能力可用才执行,未启用/未部署 → 友好提示并终止,**绝不猜测、不硬凑、不假装成功**。
5
+
6
+ ## 1. 为什么需要(背景)
7
+
8
+ 不同应用版本的功能差异是**离散且未知的**(全功能版本有 需求/职位/人才库/面试/Offer/入职/统计 全套;部分版本有 需求/职位/人才库/面试,但**无 Offer、无入职管理、无统计看板**,且菜单命名不同)。技能不得硬编码"某版本全 / 某版本简",因为:
9
+ - 未来可能有第三个版本(功能组合又不同);
10
+ - 同一版本不同租户可能因授权/配置不同而有差异;
11
+ - 菜单名会变(人才管理→人才库、招聘职位→职位列表、入职管理→应聘管理是不同业务、Offer管理→offer设置是配置页)。
12
+
13
+ ## 2. 能力探测流程(每次会话开始时执行一次,结果缓存于本次会话)
14
+
15
+ ```
16
+ 第 0 步 安装闸门:GET /api/bs/ebuilder/app/tags/getAppIds?tag=weaver-recruit-service
17
+ ├─ 失败/空 → ⚠️ 未安装招聘服务,终止(不进入任何招聘接口)
18
+ └─ 成功 → appId
19
+
20
+ 第 1 步 表单存在性:对每个业务 tag 调 GET /api/ebuilder/form/obj/getObjsByTag?appId={appId}&tag={tag}
21
+ tag 清单:uf_rcrt_talent_pool(人才库) / uf_rcrt_demand_manage(需求) / uf_rcrt_position_manage(职位)
22
+ / uf_rcrt_interview_plan(面试) / uf_rcrt_entry_manage(入职) / uf_rcrt_offer(Offer)
23
+ → 每个 tag:objId 解析到 = 表单存在;解析不到 = 表单未部署
24
+
25
+ 第 2 步 菜单入口:GET /api/cusapp/app/allMenus(递归 children[])
26
+ → 对每个业务用「候选关键词组 + pageType=SEARCH」语义匹配(见 recruit-resolve-metadata.md §3.1)
27
+ → 命中 = 有列表入口;不命中 = 无入口(可能是未启用,也可能是换名/配置页混淆)
28
+
29
+ 第 3 步 汇总能力清单:
30
+ 功能 表单(objId) 菜单(listId) 判定
31
+ ─────────────────────────────────────────
32
+ 人才搜索/详情 有 有(或无也可) 可用(详情不依赖列表菜单)
33
+ 需求列表 有 有 可用
34
+ 职位列表 有 有 可用
35
+ 面试(安排/查) 有 — 可用(写操作/卡片接口不依赖菜单;安排面试需 `getObjsByTag` + `ds/fields` 再确认)
36
+ 入职(名单/办/取消)有 有 可用
37
+ 有 无 ⚠️ 未启用(表单在但无入口)→ 拦截
38
+ 无 — ⚠️ 未部署 → 拦截
39
+ Offer(发/查) 有 有 可用
40
+ 有 无 ⚠️ 未启用 → 拦截(部分版本:表单在、仅 offer设置 配置页)
41
+ 招聘统计 有看板 PAGE 菜单 可用(nchart)
42
+ 无看板 PAGE 菜单 ⚠️ 未启用 → 拦截(部分版本:仅 EDC 报表,不在本技能范围)
43
+ ```
44
+
45
+ ## 3. 判定矩阵(每类功能统一规则)
46
+
47
+ | 场景 | 判定 | 输出 |
48
+ |---|---|---|
49
+ | 表单 objId 解析不到 | **未部署** | `⚠️ 当前环境未部署「X」功能,无法执行。` + 说明 + 停止 |
50
+ | 表单在、但菜单匹配不到(且该功能依赖列表入口) | **未启用** | `⚠️ 当前环境未启用「X」功能(未找到对应菜单)。` + 说明「不顶替」+ 停止 |
51
+ | 菜单匹配到**配置页/近似业务**(设置/配置/复制/开发排查等) | **不算命中** | 继续匹配;全不中按上一条处理 |
52
+ | 表单+菜单都在,但接口调用失败/业务码失败 | **调用失败** | 按接口文档错误码解释,如实提示,停止;不假装成功 |
53
+ | 表单+菜单都在,接口正常 | **可用** | 正常执行 |
54
+
55
+ **红线(严禁)**:
56
+ - 菜单匹配不到 → **不得用近似业务菜单硬凑**(如 部分版本用「应聘管理」顶入职、用「offer设置」顶 Offer);
57
+ - 字段/枚举拿不到 → 不得臆造 id(按 data-dictionary 原样回退,或反问用户);
58
+ - 接口 HTTP 200 但业务码失败 → 不得仅凭状态码判成功;
59
+ - 写操作某步失败 → 如实上报「已完成 X / 失败 Y」,不谎称整体成功;
60
+ - 网络超时写操作不自动重试(防重复写入)。
61
+
62
+ ## 4. 各功能能力探测细则
63
+
64
+ ### 4.1 人才搜索 / 详情
65
+ - 依赖:`uf_rcrt_talent_pool` objId(tag 解析)。
66
+ - 详情编排不依赖列表菜单(卡片接口直接收 talentId+batchId);但「搜索」需要列表 `getListDatas`(listId 经 allMenus 发现,或 L2 dataset/v2 降级)。
67
+ - 人才库菜单候选词:`人才管理`/`人才库`。
68
+
69
+ ### 4.2 需求 / 职位列表
70
+ - 依赖:`uf_rcrt_demand_manage`/`uf_rcrt_position_manage` objId + 对应 SEARCH 菜单。
71
+ - 菜单候选词:需求=`招聘需求`/`需求`;职位=`招聘职位`/`职位列表`。
72
+ - 菜单匹配不到 → 未启用拦截。
73
+
74
+ ### 4.3 面试(安排 / 查询 / 催评)
75
+ - 依赖:`uf_rcrt_interview_plan` objId + 布局 formId(同由 `getObjsByTag` 一次返回)+ 字段 id(经 `ds/fields` 按 `dataKey` 解析)。
76
+ - 查询/反馈卡片不依赖菜单;安排面试走 saveFormData→runEsb→assignedInterview(不依赖列表菜单)。
77
+ - **判定要点**:objId 解析到 = 表单在 = 可用;解析不到 = 未部署拦截。
78
+ - 面试通知/催评动作流:`esbActionIds` 跨环境不同,须运行时按按钮配置解析(面试计划表单 `getFormButtons` / 面试反馈列表 `getListButtons`,见 recruit-resolve-metadata.md §4)——**解析不到时反问用户提供,不臆造 id**。
79
+
80
+ ### 4.4 入职(名单 / 办入职 / 取消改期)
81
+ - 依赖:`uf_rcrt_entry_manage` objId + SEARCH 菜单(候选词:`入职管理`)。
82
+ - **部分版本**:表单在(objId 可解析)但**无「入职管理」菜单**(「应聘管理」是应聘者管理、非入职)→ 判定**未启用**,拦截提示,不顶替。
83
+ - 办入职/取消入职虽走表单接口,但定位名单/入口依赖菜单 → 同样拦截。
84
+ - **取消/改期入职另依赖中间表 tag(`uf_rcrt_entry_cancel` / `uf_rcrt_entry_change`)**:**tag 解析不到(`data:[]`)= 该环境未启用取消/改期入职** → 阻断该动作并友好提示「当前环境未启用取消入职/改期入职功能」,不执行、不兜底、不臆造(用户决策:不清晰的动作,宁可不执行,也不能乱执行)。
85
+
86
+ ### 4.5 Offer(发 Offer / 查询记录)
87
+ - 依赖:`uf_rcrt_offer` objId + SEARCH 菜单(候选词:`录用管理`——实名;`offer有效期设置`/`offer设置` 是配置页不算)。
88
+ - **部分版本**:表单在但无「录用管理」菜单(仅 offer设置 配置页)→ 判定**未启用**,拦截,不顶替。
89
+
90
+ ### 4.6 招聘统计(nchart 看板)
91
+ - 依赖:`招聘数据看板`/`招聘工作统计` 等 **PAGE 型看板菜单**(allMenus pageType=PAGE 且菜单名含 统计/看板)。
92
+ - **部分版本**:无任何统计 PAGE 看板(仅 EDC REPORT 报表:面试出席/创建/沟通统计)→ 判定**未启用**,拦截(EDC 报表不在本技能范围)。
93
+ - 全功能版本:存在 `招聘数据看板` PAGE(pageId 经 allMenus 自动发现),nchart 可用。
94
+
95
+ ### 4.7 简历解析(OCR)
96
+ - 依赖:`/api/recruit/ocr/checkRpaValid` 等接口路由(POST 空参返回业务响应即路由存在)。
97
+ - 路由不存在(404)→ 未部署拦截;存在 → 可用(仅解析不写库)。
98
+
99
+ ## 5. 执行时容错(每步都要)
100
+
101
+ 1. **接口调用前**:确认该功能在能力清单中「可用」,否则直接输出拦截提示,不发起调用。
102
+ 2. **接口调用失败**(非 200 / 业务码失败):按文档错误码解释,如实提示,停止。
103
+ 3. **解析不到**(字段 id / 枚举 / 动作流 id / 菜单):不臆造 → 反问用户或按 data-dictionary 回退。
104
+ 4. **写操作**:先定位(locate-first)→ 消歧 → 确认摘要 → 用户确认才提交;失败如实上报部分失败。
105
+ 5. **严禁猜测执行**:任何"可能是/大概是/应该可以"的路径,先停下来问用户,或按文档明确规则处理。
106
+
107
+ ## 6. 基线判定(版本探测,)
108
+
109
+ **背景**:部分接口是最近基线新增、或不同基线出入参有破坏性改造,调用前需确认当前环境基线符合。能力特征探测(§2)已能判定"接口存在/功能启用",是基线符合性的兜底;平台版本接口可补充**显式版本号**,用于精确对照文档基线标注。
110
+
111
+ **版本获取**(可选增强,容错):
112
+ - 接口:`GET /api/security/license/getVersion`(平台通用,去域名路径;随机 key 参数如 `randomkey_probe=1`)
113
+ - 响应:`data` 为 JSON 字符串,含 `version`(如 `10.0.2605.01`)
114
+ - **容错**:部分环境有安全网关(如需完整会话 cookie)或权限限制,直接调用可能失败——**探测失败不阻塞初始化**,`version` 记为未知,基线判定回退 §2 能力特征探测。
115
+ - 初始化工具 `scripts/_init_env_cache.mjs`(随包 Node 版)已含此探测,版本号落环境缓存 `version` 字段(「刷新环境参数」后生效)。
116
+
117
+ **基线判定双通道**:
118
+ 1. **版本号通道**:缓存 `version` 非空 → 对照接口文档「适用基线」标注(见 SKILL.md「接口基线标注」),低于基线 → 拦截提示,不调用;
119
+ 2. **特征通道**(兜底,始终有效):版本取不到时,用 §2 能力特征(tag 可解析 / 菜单存在 / 按钮配置)判定接口可用性——特征缺失即按「未启用/未部署」拦截提示。
120
+
121
+ **基线标注不臆测**:接口文档中「适用基线」的具体版本号需以官方基线说明为准;无明确基线号时标注机制性描述("以环境版本接口返回为准 + 能力特征探测"),不得猜测版本值。
122
+
123
+ ## 7. 与现有文档的关系
124
+
125
+ - 本文档是**第 0 步前置检查的扩展**(原只查安装闸门,现扩展为能力探测)。
126
+ - 菜单语义匹配细节见 `recruit-resolve-metadata.md` §3.1/§3.2(含多候选关键词、排除配置页、L1/L2/L3 降级)。
127
+ - 各功能接口文档(recruit-search-candidate.md / recruit-list-*.md / recruit-arrange-interview.md / recruit-entry-*.md / recruit-send-offer.md / recruit-stats.md)在「前置依赖」中引用本文档。
@@ -0,0 +1,65 @@
1
+ ---
2
+ name: recruit-check-install
3
+ description: 招聘服务安装检测闸门(第 0 步必做,取 appId)
4
+ ---
5
+
6
+ # 前置:招聘服务安装检测(Agent 辅助)
7
+ > 本文档中的 `${...}` 形参(表单 objId / 列表 listId / EB 页面 viewId·pageId / 应用 appId / 动作流 id)为**租户相关值**:表单 objId 经 `recruit-resolve-metadata.md` 的 tag 链运行时解析;其余由部署参数提供(**可经 `allMenus` 菜单树自动发现**,见 `recruit-resolve-metadata.md` §3.1);字段 ID(field_937…)依当前租户表单而定,详见 `data-dictionary.md`。
8
+
9
+ ## 1. 基础信息
10
+ - 接口名称:按应用标签获取应用 id 列表 `getAppIds`(ebuilder-app 对外 REST)
11
+ - 请求方式:`GET`
12
+ - 去域名路径:`/api/bs/ebuilder/app/tags/getAppIds`
13
+ - 所属模块:低代码平台 e-Builder(ebuilder-app)
14
+ - 所属分组:前置 / Agent 辅助
15
+
16
+ ## 2. 业务用途
17
+ **任何招聘操作前的第 0 步闸门**:用招聘应用固定标签 `weaver-recruit-service` 反查当前租户下是否已安装招聘服务。返回非空列表 = 已安装(且拿到 `appId`);返回空 = 未安装,应直接提示用户"您未安装招聘服务"并终止后续流程,不再调用任何招聘接口。
18
+
19
+ ## 3. 前置条件
20
+ - 有效的认证(由 `weaver-work-cli auth` 托管的 E10 登录态提供)(租户上下文由会话决定,无需额外传 `tenantKey`)。
21
+ - 应在搜索 / 详情等所有招聘接口之前最先调用。
22
+
23
+ ## 4. 请求参数
24
+ | 字段 | 位置 | 类型 | 必填 | 约束 | 业务说明 |
25
+ |---|---|---|---|---|---|
26
+ | `tag` | query | string | 是 | 固定值 `weaver-recruit-service` | 招聘应用的固定标签(由应用方打在 EB 应用上) |
27
+
28
+ ## 5. 响应数据结构
29
+ | 字段 | 类型 | 说明 |
30
+ |---|---|---|
31
+ | `code` | int | 200 表示成功 |
32
+ | `status` | boolean | `true` 表示正常返回 |
33
+ | `data` | array\<long\> | 该标签在当前租户下的应用 id 列表;**非空 = 已安装**,取 `data[0]` 为 `appId`;**空数组 = 未安装** |
34
+
35
+ ## 6. 请求示例
36
+ ```json
37
+ // GET /api/bs/ebuilder/app/tags/getAppIds?tag=weaver-recruit-service
38
+ ```
39
+
40
+ ## 7. 响应示例
41
+ ```json
42
+ // 已安装
43
+ { "code": 200, "msg": "接口返回成功", "status": true, "data": ["${RECRUIT_APP_ID}"], "fail": false }
44
+ // 未安装(标签无对应应用)
45
+ { "code": 200, "msg": "接口返回成功", "status": true, "data": [], "fail": false }
46
+ ```
47
+
48
+ ## 8. 错误码与失败形态(分情形处理,**不得把所有失败都当"未安装"**)
49
+ | 错误码 / 响应形态 | 含义 | AI 处理建议 |
50
+ |---|---|---|
51
+ | 200 + `status=true` + `data`=[] | 标签无对应应用(**未安装**) | 提示「您当前租户未安装招聘服务,请先安装后重试」,终止流程 |
52
+ | 200 + `status=false` + `msg` | 业务失败(常见:账号未授权该模块) | 按 `msg` 解释;`msg` 含「未授权/无权限」→ 提示「当前账号无招聘模块访问权限,请联系管理员开通」;其余按业务失败提示,**不得误报"未安装"** |
53
+ | HTTP 401 | 认证缺失或过期 | 提示重新登录(认证由 `weaver-work-cli auth` 托管)后重试 |
54
+ | HTTP 403 | 已认证但无模块访问权限(**模块未启用/未授权给本账号的典型形态**) | 提示「当前账号无招聘模块访问权限,请联系管理员开通或启用模块」 |
55
+ | HTTP 404 | 接口路由不存在(非 E10 环境 / 服务版本未部署该模块) | 提示「接口不存在:确认目标为 E10 环境且服务版本已部署该模块」,**不得误报"未安装"** |
56
+ | 网络异常 / 超时 | 连接失败 | 提示网络/连接异常,读取类可有限重试,仍失败再终止 |
57
+
58
+ ## 9. 调用参考
59
+ - Agent 辅助:作为所有招聘能力的统一前置闸门。命中 `data` 非空后,方可继续搜索 / 详情流程;命中空则直接输出未安装提示并停止。
60
+ - `appId`(`data[0]`)可用于后续 EB 详情链接拼装,或作为其他需 appId 的接口入参。
61
+
62
+ ## 10. 注意事项
63
+ - 同租户若多次导入同一标签应用,`data` 可能含多个 appId(tag 策略限制,无法自动去重)。取首个 `data[0]` 作为主 appId;必要时向用户说明"检测到多个安装实例"。
64
+ - 仅用 `tag` 入参,租户隔离由服务端会话保证,切勿在请求里臆测 `tenantKey`。
65
+ - 本接口为只读查询,不触发任何写操作。
@@ -0,0 +1,63 @@
1
+ ---
2
+ name: recruit-detail-process
3
+ description: 应聘过程卡片(Agent 辅助,默认不展示)
4
+ ---
5
+
6
+ # 详情卡片:应聘过程(Agent 辅助,默认不展示)
7
+
8
+ ## 1. 基础信息
9
+ - 接口名称:人才应聘过程日志 `getCandidateCardProcess`
10
+ - 请求方式:`POST`
11
+ - 去域名路径:`/api/recruit/processLog/getCandidateCardProcess`
12
+ - 所属模块:招聘管理(recruit)
13
+ - 所属分组:详情 / Agent 辅助
14
+
15
+ ## 2. 业务用途
16
+ 获取该人才在招聘流程中的操作过程日志:操作描述、操作人、业务类型、时间。默认详情流程**不展示**;仅当用户明确要求"应聘过程"时才调用。
17
+
18
+ ## 3. 前置条件
19
+ - `talentId`、`batchId`(来自 prepareQuery)。
20
+
21
+ ## 4. 请求参数
22
+ | 字段 | 位置 | 类型 | 必填 | 约束 | 业务说明 |
23
+ |---|---|---|---|---|---|
24
+ | `talentId` | body | string | 是 | 人才 id | |
25
+ | `batchId` | body | string | 否 | 批次 id | 部分部署需要 |
26
+ | `current` | body | int | 否 | 默认 1 | 页码 |
27
+ | `pageSize` | body | int | 否 | 默认 10 | 每页条数 |
28
+
29
+ ## 5. 响应数据结构
30
+ | 字段 | 类型 | 说明 |
31
+ |---|---|---|
32
+ | `data.list[].optContext` | string | 操作描述 |
33
+ | `data.list[].operatorId` | object | 操作人 `{name}` |
34
+ | `data.list[].optBusiness` | string | 业务类型 |
35
+ | `data.list[].createTime` | string | 操作时间 |
36
+
37
+ ## 6. 请求示例
38
+ ```json
39
+ { "talentId": "1276382457065553922", "batchId": "937153853968540001", "current": 1, "pageSize": 10 }
40
+ ```
41
+
42
+ ## 7. 响应示例
43
+ ```json
44
+ {
45
+ "code": 200, "status": true,
46
+ "data": { "list": [
47
+ { "optContext": "进入面试环节", "operatorId": { "name": "钱七" },
48
+ "optBusiness": "stage_change", "createTime": "2026-08-03 09:00" }
49
+ ] }
50
+ }
51
+ ```
52
+
53
+ ## 8. 错误码
54
+ | 错误码 | 含义 | AI 处理建议 |
55
+ |---|---|---|
56
+ | 来源文档未提供接口特有错误码 | — | 非 200 / 重定向 → 提示 认证可能过期(`weaver-work-cli auth status`) |
57
+
58
+ ## 9. 调用参考
59
+ - Agent 辅助:默认不调用;用户明确要求"应聘过程/流转记录"时才调用并加 `## 应聘过程(N)` 段。
60
+
61
+ ## 10. 注意事项
62
+ - 默认详情流程不展示本卡片,避免信息过载。
63
+ - `operatorId` 取 `name` 回填。
@@ -0,0 +1,142 @@
1
+ # 提交/修改面试反馈(组合写操作)
2
+
3
+ > **平台兼容**:本文命令示例在 macOS/Linux 与 Windows PowerShell 下均可执行——JSON 用单引号包裹、内部双引号不转义;PowerShell 下不使用反斜杠续行。
4
+
5
+ ## 1. 接口概述
6
+
7
+ 把「提交面试评价」按钮的完整动作链固化为可调用的组合写操作:保存面试反馈表单(更新结果/评价)+ 触发按钮绑定的 esb 动作流 + 写招聘过程日志(`addProcessLog`)。通过**按钮动作智能解析**(粗定位 → 精核验 → 拆解执行 → 回查校验)在任意环境自适应,不依赖按钮名/ID。
8
+
9
+ ## 2. 业务用途
10
+
11
+ 用户在面试详情里填写/修改某场面试的反馈结果(通过/不通过/待定)与评价文字并提交。系统侧点击「提交评价」按钮实际触发三段动作:
12
+ 1. **保存反馈表单**(EB `saveFormData`,更新 `interview_detail` 表单对应反馈记录);
13
+ 2. **触发动作流**(EB `runEsb`,按钮配置的 esb 动作流:面试安排-填写反馈 / 全部面试反馈完成-更新日程状态 / 招聘recruit-面试反馈提醒 等);
14
+ 3. **写招聘过程日志**(招聘专属接口 `POST /api/recruit/processLog/addProcessLog`,把结果/评价落到招聘业务过程流,`processEnum=20` 标识"提交面试评价")。
15
+
16
+ > **适用基线**:`addProcessLog` 为招聘标准接口(路径/入参由招聘应用代码固定,客户搭建不影响);表单/按钮为 EB 配置物,运行时解析。调用前经能力探测确认。
17
+
18
+ ## 3. 前置条件
19
+
20
+ - 已登录(`weaver-work-cli auth status` 通过),环境参数缓存含 `interview_detail` 表单(tag 自动解析)。
21
+ - 候选人有可编辑的面试反馈记录(`getCandidateCardInterviewInfo` 返回 `interviewFeedBack`,含 `optCanEdit:true`)。
22
+ - 能力探测:反馈表单、按钮配置、`addProcessLog` 可用;缺失即拦截提示。
23
+
24
+ ## 4. 请求参数
25
+
26
+ ### 4.1 定位参数(脚本入口)
27
+
28
+ | 参数 | 必填 | 说明 |
29
+ |---|---|---|
30
+ | `--talent-id` / `--mobile` | 二选一 | 候选人定位(talentId 优先) |
31
+ | `--feedback-id` | 选填 | 直接指定反馈记录 id(=`interviewFeedBack[0].id`=`formDataId`=`businessId`),最稳;缺省取第一场含反馈的面试(可 `--plan-index` 指定) |
32
+ | `--result` | 选填 | 新面试结果中文(通过/不通过/待定),经 `ds/options` 解析 optionId |
33
+ | `--comment` | 选填 | 新评价文字 |
34
+ | `--prepare` / `--commit` | 写操作模式 | prepare=只定位+校验+确认摘要不写;commit=真实执行 |
35
+
36
+ ### 4.2 关键接口入参
37
+
38
+ | 步骤 | 接口 | 方法/入参 |
39
+ |---|---|---|
40
+ | 反馈记录定位 | `getCandidateCardInterviewInfo` | `POST` body `{talentId, batchId, current:1, pageSize:20}` → `data.list[i].interviewFeedBack[0]`:`id`(=formDataId)、`result[]`、`judgement`、`interviewPlanId[]`、`interviewer[]` |
41
+ | 反馈记录数据 | `getFormDataAndLayout` | `POST /api/ebuilder/form/form/core/getFormDataAndLayout?formId=<反馈表单formId>&dataId=<反馈记录id>`,body 见 §5 → `data.formData.{id, updateTimeStamp, dataDetails}` + `data.formLayout.id` |
42
+ | 按钮粗定位 | `getFormButtons` | `POST /api/ebuilder/form/data/getFormButtons`,body `{layoutType:"formLayout", objId, dataId, formDataId:dataId, type:"2", ...}` → 找 `actionType=system` 或 `buttonKey=editSave` 的按钮 |
43
+ | 保存反馈 | `saveFormData` | `POST /api/ebuilder/form/form/core/saveFormData?formId=<formId>`,`formData.id`=反馈记录id、`updateTimeStamp`=最新、`dataDetails`=全字段集(防清空)、`formLayout.id`=`getFormDataAndLayout` 的 formLayout.id(⚠️ 更新场景勿用 `getFormLayout`:部分版本 GET 405,虽然 `write-op.mjs::getFormLayout` 已加 POST 回退,但记录级布局以 `getFormDataAndLayout` 为准) |
44
+ | 动作流 | `runEsb` | `POST /api/ebuilder/form/esb/runEsb?objId=<objId>`,body `{dataIds:<反馈记录id>, esbActionIds:<按钮 esb actions id 逗号拼接>}` |
45
+ | 写过程日志 | `addProcessLog` | `POST /api/recruit/processLog/addProcessLog`,body `{talentId, batchId, result:<结果optionId>, judgement:"<p>评价</p>", businessId:<反馈记录id>, processEnum:"20"}` |
46
+
47
+ ## 5. 请求示例
48
+
49
+ ```bash
50
+ # ① 反馈记录定位(拿 batchId 后)
51
+ curl -s -X POST "${BASE_URL}/api/recruit/candidate/getCandidateCardInterviewInfo" \
52
+ -H "Content-Type: application/json" -H "Cookie: ${COOKIE}" -H "eteamsid: ${ETEAMSID}" \
53
+ -H "langType: zh_CN" -H "timeZoneOffset: -480" -H "Accept: application/json" \
54
+ -d '{"talentId":"<talentId>","batchId":"<batchId>","current":1,"pageSize":20}'
55
+ # → data.list[i].interviewFeedBack[0] = {id:"<反馈记录id>", result:[{id,name}], judgement:"<p>…</p>", ...}
56
+
57
+ # ② 保存反馈(全字段集 + updateTimeStamp 乐观锁)
58
+ curl -s -X POST "${BASE_URL}/api/ebuilder/form/form/core/saveFormData?formId=<formId>" \
59
+ -H "Content-Type: application/json" -H "Cookie: ${COOKIE}" -H "eteamsid: ${ETEAMSID}" \
60
+ -H "langType: zh_CN" -H "timeZoneOffset: -480" -H "Accept: application/json" \
61
+ -d '{
62
+ "module":"ebuilderform","appId":"<appId>",
63
+ "customParam":{"objId":"<objId>","name":"面试反馈-<面试主题>","firstDataName":"面试反馈-<面试主题>","isFlowEnd":false,"otherOperator":"","dataStatus":"submit","rightType":"2","appId":"<appId>"},
64
+ "formData":{
65
+ "id":"<反馈记录id>","updateTimeStamp":"<最新>","module":"ebuilderform","client":"pc","dataStatus":"submit",
66
+ "form":{"id":"<formId>"},"formLayout":{"id":"<getFormDataAndLayout的formLayout.id>"},
67
+ "dataDetails":[
68
+ {"formField":{"id":"<result字段id>"},"dataOptions":[{"optionId":"<结果optionId>","content":"不通过"}]},
69
+ {"formField":{"id":"<judgement字段id>"},"dataText":{"content":"<p>太随意了,不合适</p>"}},
70
+ {"formField":{"id":"<面试主题字段id>"},"dataOptions":[{"optionId":"<面试计划id>","content":"<面试主题>"}]},
71
+ {"formField":{"id":"<batchId字段id>"},"dataOptions":[{"optionId":"<batchId>","content":"<batchId>"}]},
72
+ {"formField":{"id":"<人才字段id>"},"dataOptions":[{"optionId":"<talentId>","content":"<姓名>"}]},
73
+ {"formField":{"id":"<反馈人字段id>"},"dataOptions":[{"optionId":"<反馈人id>","content":"<反馈人>"}]}
74
+ ]
75
+ }
76
+ }'
77
+
78
+ # ③ 动作流
79
+ curl -s -X POST "${BASE_URL}/api/ebuilder/form/esb/runEsb?objId=<objId>" \
80
+ -H "Content-Type: application/json" -H "Cookie: ${COOKIE}" -H "eteamsid: ${ETEAMSID}" \
81
+ -H "langType: zh_CN" -H "timeZoneOffset: -480" -H "Accept: application/json" \
82
+ -d '{"dataIds":"<反馈记录id>","esbActionIds":"<按钮esb动作id1>,<id2>,<id3>","objId":"<objId>"}'
83
+
84
+ # ④ 写招聘过程日志
85
+ curl -s -X POST "${BASE_URL}/api/recruit/processLog/addProcessLog" \
86
+ -H "Content-Type: application/json" -H "Cookie: ${COOKIE}" -H "eteamsid: ${ETEAMSID}" \
87
+ -H "langType: zh_CN" -H "timeZoneOffset: -480" -H "Accept: application/json" \
88
+ -d '{"talentId":"<talentId>","batchId":"<batchId>","result":"<结果optionId>","judgement":"<p>太随意了,不合适</p>","businessId":"<反馈记录id>","processEnum":"20"}'
89
+ ```
90
+
91
+ ## 6. 响应参数
92
+
93
+ | 接口 | 成功标志 | 说明 |
94
+ |---|---|---|
95
+ | `saveFormData` | `status:true` / `code:200` | 返回 `data.id`(=反馈记录id) |
96
+ | `runEsb` | `data.successNum` ≥1 | 触发动作流数 |
97
+ | `addProcessLog` | `data:"SUCCESS"` | 过程日志写入成功 |
98
+ | 回查 | `getCandidateCardInterviewInfo` 该反馈 `result`/`judgement` 已变 | 闭环校验 |
99
+
100
+ ## 7. 错误码 / 失败边界
101
+
102
+ - **按钮匹配不到**(`getFormButtons` 无 system/editSave 按钮):拦截提示「当前环境未找到提交评价按钮,可能已被客户调整」,不硬猜。
103
+ - **saveFormData 后端 `layoutVersion null`**:`formLayout.id` 必须用 `getFormDataAndLayout` 的 `formLayout.id`,**不要用 `getFormLayout`**(部分版本该接口 GET 直接 405;`write-op.mjs::getFormLayout` 虽已加 POST 回退,但更新既有记录仍以 `getFormDataAndLayout` 为准)。
104
+ - **乐观锁冲突**:`updateTimeStamp` 必须提交前实时取(每次保存会更新),提交失败提示重试。
105
+ - **结果枚举解析不到**(`ds/options` 无该名称):列可选项请用户确认,不臆造 optionId。
106
+ - **反馈记录无权限/不存在**:`getFormDataAndLayout` 的 `formData` 为空 → 提示无权限或记录不存在。
107
+ - **部分失败**:saveFormData 成功但 runEsb/addProcessLog 失败 → 如实上报「已完成 X / 失败 Y」,不回滚不重试。
108
+
109
+ ## 8. 注意事项
110
+
111
+ - **全字段集防清空**:`dataDetails` 必须带反馈记录全部字段(面试主题/batchId/人才/反馈人/结果/评价等),只改 result/judgement 两个字段的值,缺失字段会导致保存时清空(技能红线:不得整条用空字段集覆盖)。
112
+ - **updateTimeStamp 是乐观锁**:提交用最新值;prepare 与 commit 间被他人修改会失效,commit 前需重新获取。
113
+ - **jsCode 动作不解析执行**:按钮的 `jsCode`(如"记录应聘过程")内联 JS 里的招聘 API(`addProcessLog`)按标准契约**直接调用**,不模拟执行前端 JS;刷新/关闭等前端行为技能不执行。
114
+ - **按钮动作分类**:`system`→保存;`esb`→runEsb;`jsCode`→提取其中后端 API 按契约直调(条件型说明、无法解析拦截)。
115
+ - **跨环境自适应**:不依赖按钮名/ID——以 `actionType`/`buttonKey=editSave`/URL 特征(`/api/recruit/processLog/addProcessLog`)定位;esb 动作流 id 运行时按钮解析,不写死。
116
+
117
+ ## 9. 调用编排(组合写操作)
118
+
119
+ ```
120
+ 定位候选人(talentId) → getCandidateCardPrepareQuery 取 batchId
121
+ → getCandidateCardInterviewInfo 取反馈记录(interviewFeedBack[0].id/result/judgement)
122
+ → getFormDataAndLayout 取 updateTimeStamp + 全字段 + formLayout.id
123
+ → getFormButtons(type=2+dataId) 粗定位提交按钮(system/editSave)
124
+ → analyzeButtonActions 精核验(esbIds + jsCode 招聘 API)
125
+ → [prepare] 确认摘要(候选人/面试/当前反馈/新反馈/将执行动作)
126
+ → [commit] saveFormData(全字段+最新updateTimeStamp) → runEsb(esbIds) → addProcessLog
127
+ → 回查 getCandidateCardInterviewInfo 校验已生效
128
+ ```
129
+
130
+ ## 10. 关联接口
131
+
132
+ - 前置:`getCandidateCardPrepareQuery`(取 batchId)、`getCandidateCardInterviewInfo`(面试+反馈卡片)、`getFormDataAndLayout`(反馈记录数据/updateTimeStamp/formLayout)。
133
+ - 平行:`saveFormData`(EB 通用保存)、`runEsb`(EB 通用动作流)、`addProcessLog`(招聘过程日志)。
134
+ - 关联:`recruit-urge-feedback.md`(催评,另一反馈动作流入口);`recruit-detail-process.md`(应聘过程卡片,展示 addProcessLog 写入的过程日志)。
135
+
136
+ ## 11. 产物链接(recruit-stage CLI)
137
+
138
+ `interview.feedback.edit.apply` 成功后返回两个可直接展示的字段:
139
+ - `talentCardUrl`:该人才卡片(点进去可看此候选人的面试与全部反馈);
140
+ - `interviewListUrl`:面试管理列表页。
141
+
142
+ 展示时作为可点击链接给用户(Markdown 链接),缺字段表示当前环境未配置对应页面,不补造。
@@ -0,0 +1,95 @@
1
+ # 招聘启事智能生成 —— 任务主文档(对话生成 JD → 确认 → 自动落库 → 打开列表)
2
+
3
+ > **平台兼容**:本文命令示例在 macOS/Linux 与 Windows PowerShell 下均可执行——JSON 用单引号包裹、内部双引号不转义;PowerShell 下不使用反斜杠续行。
4
+
5
+ ## 基础信息
6
+
7
+ | 项目 | 内容 |
8
+ |---|---|
9
+ | 对应需求 | 【人事招聘阶段】2. 招聘启事智能生成(小e 对话触发) |
10
+ | 脚本 | `scripts/recruit-generate-jd.mjs` |
11
+ | 写接口 | `POST /api/ebuilder/form/form/core/saveFormData`(职位管理)→ `POST /api/recruit/candidate/addPosition`(生成职位,body 只带 formDataId,两步流) |
12
+ | 输出结果 | 岗位 JD 初稿(对话展示)+ **两个 Markdown 链接**(职位详情查看页 / 招聘岗位列表·已定位新建职位) |
13
+ | 用途类型 | 用户场景 / **写操作** |
14
+
15
+ ## 交互流程(与需求逐条对应)
16
+
17
+ | 需求原文 | 实现 |
18
+ |---|---|
19
+ | 1)招聘人员在小e中输入岗位需求描述,并「帮我生成这个岗位的JD」 | 对话抽取岗位要素(名称/职责/要求/人数…),缺项先问 |
20
+ | 2)按照企业招聘标准及岗位要求生成招聘启事和岗位JD初稿 | Agent 按 `recruit-jd-template.md`(企业标准模板)生成**招聘启事 + JD 初稿**,全文展示在对话里 |
21
+ | 3)确认后自动生成到招聘岗位列表中 | 用户确认后跑脚本 `--commit` 自动落库;成功后输出两个 Markdown 链接:职位详情查看页 + **招聘岗位列表(已定位新建职位)** |
22
+ | 交互方式:小e对话框 + 右侧窗口打开招聘岗位列表 | 卡片由前端渲染(标题 + 「在 E10 中打开」按钮)→ 新 tab 打开列表(右栏 iframe 因 SameSite 不可行,见 `recruit-output-links.md`) |
23
+ | 输出结果:岗位JD初稿 | JD 初稿全文在对话里给出;落库的职位记录含职责/要求字段 |
24
+
25
+ ## 使用流程(Agent 执行约定)
26
+
27
+ 1. **抽取岗位要素**:职位名称(必缺先问)、职责、任职要求、招聘人数、用人部门等。信息不足先问,不猜。
28
+ 2. **生成 JD 初稿**:按 `recruit-jd-template.md` 的企业标准模板生成招聘启事 + 岗位 JD(职责 4~6 条、要求 4~6 条,贴合用户给的岗位描述)。**全文展示给用户**——这就是需求的"输出结果"。
29
+ 3. **字段推导**:从需求 + JD 推导职位管理字段值;不确定的列出来问用户。
30
+ 4. **`--prepare`(只读,不写库)**:脚本自动补全必填默认值(状态=招聘中、招聘流程=环境默认流程、招聘负责人/用人经理=当前登录人等),输出确认摘要。把摘要**用中文复述**给用户(不展示字段 key 与内部 id)。
31
+ 5. **用户明确确认后**才 `--commit`(写真实数据)。
32
+ 6. **输出产物**:把脚本输出的**两个 Markdown 链接**按顺序放在回答正文里:先 `viewLink`(新建职位详情查看页),再 `listLocateLink`(招聘岗位列表 + 自动滑出本次新建职位详情的组合页);JD 初稿全文在正文里。**不要用 browsertool 卡片**(fill_form 在非表单页卡死,实测;见 `recruit-output-links.md`)。
33
+ 7. **告知**:「职位已建好,点卡片上的『在 E10 中打开』可查看招聘岗位列表;JD 初稿如需调整,告诉我改哪里,我更新后再建」。
34
+
35
+ ## 脚本用法
36
+
37
+ ```bash
38
+ # ① 只出确认摘要(不写库)
39
+ node scripts/recruit-generate-jd.mjs --prepare \
40
+ --position-name "Java开发工程师" \
41
+ --position-duty "<职责正文,可多段>" \
42
+ --work-request "<任职要求正文,可多段>" \
43
+ [--set <字段dataKey>=<值> ...] # AI 依 JD 指定字段值(可多次),如 --set recruit-count=2
44
+
45
+ # ② 用户确认后写库
46
+ node scripts/recruit-generate-jd.mjs --commit ...同参数...
47
+ ```
48
+
49
+ ### 关键输出字段(--commit)
50
+
51
+ | 字段 | 含义 |
52
+ |---|---|
53
+ | `result: success` | 落库成功 |
54
+ | `formDataId` | 职位管理记录 id(内部值,不给用户看) |
55
+ | `positionListUrl` | 招聘岗位列表 URL(菜单入口形态) |
56
+ | `positionListLocateUrl` | **列表 + 滑出新建职位详情**的组合页 URL(`/sp/ebdfpage/list/{listId}/card/0/{objId}/{dataId}/{listId}?id=…`,2026-10-21 实测简化版可用) |
57
+ | `positionCardUrl` | 本次新建职位的卡片单页 URL(作为普通链接给用户) |
58
+ | `viewLink` | **Markdown 链接①**:新建职位详情查看页(原样放回答正文) |
59
+ | `listLocateLink` | **Markdown 链接②**:招聘岗位列表(已定位新建职位,原样放回答正文) |
60
+ | `rpaChecked` | RPA 发布校验结果(false 时提示用户关注 `rpaValidMsg`) |
61
+
62
+ ### 必填默认值(脚本自动补,无需用户逐项给)
63
+
64
+ 状态=招聘中、招聘流程=当前环境默认启用流程、招聘负责人/用人经理=当前登录人、招聘人数等数值/枚举类按 JD 推导或环境默认。字段 id、枚举 id、菜单 id、appId **全部运行时解析**,跨环境不写死。
65
+
66
+ > **招聘流程取值来源(四层,v1.0.20 起)**:
67
+ > ① legacy 缓存 `defaultRecruitFlow` → ② 「招聘流程」菜单列表(`listInit` 反查 objId → `getListDatas`)→ ③ 旧接口 `/api/recruit/position/recruitFlow/list` → ④ **自用系统写死兜底**。
68
+ > ④ 仅在 `selfUse=1` **且**域名为 `www.e-cology.com.cn` 时生效(自用系统只有一条「初筛+面试+offer阶段」),其他环境不受影响。
69
+ > 四层全未命中时**不写该字段**,表单自身默认值生效——结果仍正确,摘要显示「(沿用表单默认值)」。解析失败**不缓存**,下次会重试。
70
+
71
+ > ⚠️ **继承字段必须在摘要里核对(v1.0.20 起)**:`DEF_FROM_REF` 这批默认值(岗位性质、职位类别、学历、经验、工作地点、薪资上下限)来自**环境内最近一条职位记录**,不是用户指定的。
72
+ > 摘要新增两个字段:
73
+ >
74
+ > | 字段 | 含义 |
75
+ > |---|---|
76
+ > | `inheritedFromRef` | 实际继承的字段清单 `[{field, value}]` |
77
+ > | `inheritedNote` | 提示语:「以上字段未指定,值继承自环境内最近一条职位记录,可能含历史脏数据(如重复地点),请核对后再提交」 |
78
+ >
79
+ > **这两个字段存在时,Agent 必须在确认摘要里点名列出继承来的值,提示用户核对**——实测该环境继承出过重复地点这类脏数据。**不得因为 `inheritedNote` 是系统提示语就略过不报。**
80
+ >
81
+ > 🔴 **薪资不参与继承(v1.0.20 起)**:`salary_min` / `salary_max` 已从继承清单移除(历史职位薪资可能是脏数据,实测抓到过 `300.00`)。薪资一律按 [`position-templates.md`](position-templates.md) §1.1 的推荐区间取;用户明确给了就用用户的;未给且表里无对应档就留空,由用户补。
82
+
83
+ > **`work_location` 可正常通过 `sets` 指定(v1.0.20 修复)**:原实现读 `cache.menus` 找「办公地点」菜单,但该环境缓存**没有 `menus` 字段** → 恒取不到 → 无论传什么都进 `setSkipped`。
84
+ > 现改为三级来源:`lists.all_search` → `cache.menus`(若存在)→ `allMenus` 接口兜底,`cusMenuId` 不再作为硬条件。
85
+ > 实测传入完整地址「上海市闵行区三鲁公路3419号泛微软件园」后成功进 `setApplied`。
86
+ > ⚠️ 提交 `sets` 后**必须检查 `setApplied` / `setSkipped`**:`setSkipped` 非空即该值未写入。
87
+
88
+ ## 执行纪律(强制)
89
+
90
+ 1. **写操作必须先确认**:`--prepare` 摘要经用户明确确认后才可 `--commit`;**禁止跳过确认直接写库**。
91
+ 2. **不臆造参数**:字段值只能来自用户输入、JD 推导或脚本默认值;`--set` 的键必须是脚本认识的 dataKey。
92
+ 3. **不暴露内部标识**:对用户只写中文(「招聘中」「2 人」),不展示字段 key、optionId、formDataId。
93
+ 4. **不输出凭证**:不展示 Cookie / ETEAMSID / token。
94
+ 5. **产物纪律**:`viewLink` / `listLocateLink` 两个 Markdown 链接按顺序原样搬运;不要包 browsertool 标签(fill_form 在非表单页卡死,实测);url 缺失时只给另一个,不输出半截。
95
+ 6. **环境自适应**:baseUrl / appId / 字段 id 一律来自会话与环境解析,**任何文件不得写死 IP / 域名 / 端口**;目标环境未部署招聘应用时脚本会给出友好提示,如实转告。
@@ -0,0 +1,56 @@
1
+ ---
2
+ name: recruit-jd-template
3
+ description: 招聘启事 / 岗位JD 的企业标准模板与撰写规范——生成JD 与招聘启事时以本文件为准;企业有内部模板时直接替换本文件内容即可
4
+ ---
5
+
6
+ # 招聘启事 / 岗位JD 文案模板(企业标准)
7
+
8
+ > **用途**:`recruit-jd-create.md` §2.2「招聘启事 / 岗位JD 文案生成规范」的**标准来源**。
9
+ > **可替换**:企业有内部 JD 模板 / 话术 / 品牌口径时,**直接替换本文件正文**(保留章节骨架),生成即按企业标准执行;未替换则用下方**通用兜底**。
10
+
11
+ ## 1. 生成两件产物
12
+ | 产物 | 去向 | 形态 |
13
+ |---|---|---|
14
+ | **招聘启事**(对外文案) | 对话展示,**不落库**(职位管理表单无"启事"字段,已核 583 字段) | markdown 文案 |
15
+ | **岗位JD初稿**(结构化) | 落库 `position_duty`(职位职责)+ `work_request`(任职要求) | 多条、换行分隔、行首**不加** `-` |
16
+
17
+ ## 2. 招聘启事模板(通用兜底,可替换)
18
+ ```markdown
19
+ # <岗位名称>(<工作地点>|<招聘人数>人)
20
+
21
+ ## 岗位职责
22
+ 1. <职责 1:动词开头,含对象与结果>
23
+ 2. <职责 2>
24
+ …(5–8 条)
25
+
26
+ ## 任职要求
27
+ 1. <要求 1:学历/年限/技能,可衡量>
28
+ 2. <要求 2>
29
+ …(4–6 条)
30
+
31
+ ## 我们提供 # 可选,仅在有依据时写
32
+ - <薪酬范围 / 福利 / 成长空间;无依据则不写>
33
+
34
+ ## 应聘方式 # 可选
35
+ - <投递渠道 / 联系方式;无依据则不写>
36
+ ```
37
+
38
+ ## 3. 撰写规范(硬性)
39
+ - **可衡量、可核对**:职责用"动词 + 对象 + 结果";要求给学历/年限/技能等可判定条件,避免"优秀""较强"等空话。
40
+ - **条数**:职责 5–8 条、要求 4–6 条,每条一行。
41
+ - **字段联动**:启事里的地点/薪资/学历/年限应与传给脚本的 `--set`(`work_location` / `education` / `work_years` / `salary_min|max`)**保持一致**。
42
+ - **两份产物同源**:JD 初稿的职责/要求必须与启事正文**逐条一致**(不得一份删改)。
43
+ - **可参考系统已有职位**:生成前可 `recruit-list.mjs --type position` 拉同类职位,对齐措辞与字段取值。
44
+
45
+ ## 4. 红线
46
+ - **不得编造**:用户未提供的薪资/地点/学历/人数,一律写"面议 / 待定 / 不限"或**直接不写**;不得虚构福利、上市信息、团队规模。
47
+ - **不得歧视**:不出现性别、年龄、婚育、户籍/地域、民族、宗教、残障等歧视性表述。
48
+ - **不得承诺**:不写"保证录用""包住宿(未确认)"等无依据承诺。
49
+ - 合规要求沿用手册:**招聘启事内容须符合当地劳动与广告法规**。
50
+
51
+ ## 5. 企业标准替换指引
52
+ 替换时请保持以下**结构契约**不变(技能按此读取):
53
+ 1. 第 1 节两张产物表的**字段落点**(`position_duty` / `work_request`)不变;
54
+ 2. 第 3 节的**条数与同源**规则可调,但需保留"职责/要求分列";
55
+ 3. 第 4 节**红线不得删除**(可加严,不可放宽)。
56
+ > 如需新增企业专有章节(如"企业文化""团队介绍"),追加在 `## 我们提供` 之后即可。