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.
- package/README.md +17 -0
- package/dist/chunks/{archive-J4I6MCKF.js → archive-P6TBQGKL.js} +13 -5
- package/dist/chunks/{archive-oa-BRZKKTO4.js → archive-oa-7TQ2NXOH.js} +12 -5
- package/dist/chunks/{asset-L7D4FAOZ.js → asset-3ELRG37G.js} +11 -4
- package/dist/chunks/{asset-idle-DADLLV75.js → asset-idle-WIGMUFMD.js} +7 -3
- package/dist/chunks/{attachment-content-K4C7VLWQ.js → attachment-content-E3276UOV.js} +5 -4
- package/dist/chunks/{blog-BVGQ7NZL.js → blog-C5NMZAAC.js} +11 -4
- package/dist/chunks/{caizhilian-SAADNFD6.js → caizhilian-5XSM2DFP.js} +13 -6
- package/dist/chunks/{calendar-Q7NQY5Z2.js → calendar-FI2WNSBO.js} +12 -5
- package/dist/chunks/{chunk-YRSZQUD2.js → chunk-3YBDYOC4.js} +3 -3
- package/dist/chunks/{chunk-OOUTBLZ4.js → chunk-56EZERK4.js} +1 -1
- package/dist/chunks/chunk-6N4JPNFL.js +76 -0
- package/dist/chunks/{chunk-ZUX3P6BQ.js → chunk-727FH2NI.js} +1 -1
- package/dist/chunks/chunk-7BDPM5ST.js +11 -0
- package/dist/chunks/{chunk-EKWAQSLU.js → chunk-BCVYBYYT.js} +432 -2248
- package/dist/chunks/{chunk-W7BEHOSR.js → chunk-CWYGFU5B.js} +2 -2
- package/dist/chunks/{chunk-NOODWMCL.js → chunk-D4ADSZ7H.js} +1 -1
- package/dist/chunks/{chunk-SA6VBIHY.js → chunk-ETNJSKMM.js} +214 -16
- package/dist/chunks/{chunk-BBKDXQEC.js → chunk-F4E4EM35.js} +3 -3
- package/dist/chunks/{chunk-IZ7S7QUS.js → chunk-FAZTGX7S.js} +6 -6
- package/dist/chunks/{chunk-NKZRQXST.js → chunk-FRZKBMSW.js} +52 -36
- package/dist/chunks/{chunk-BYBSCN4X.js → chunk-G7PQWD4L.js} +6 -3
- package/dist/chunks/{chunk-GEWYMQME.js → chunk-GAMZLAG2.js} +1 -1
- package/dist/chunks/{chunk-R4CHUSKC.js → chunk-GM6J7Q4B.js} +4 -4
- package/dist/chunks/{chunk-APVFJUQH.js → chunk-GRDRG6HP.js} +3 -3
- package/dist/chunks/{chunk-LDZQPUIA.js → chunk-HIT4Y6OI.js} +1 -1
- package/dist/chunks/{chunk-EZALDOQH.js → chunk-HP7JIYMT.js} +5 -2
- package/dist/chunks/{chunk-LADPYOWC.js → chunk-IAZ3UPY6.js} +3 -3
- package/dist/chunks/{chunk-ZEDWSH32.js → chunk-IC62NFM5.js} +1 -1
- package/dist/chunks/{chunk-P26ZWSKU.js → chunk-KIHNAS25.js} +5 -2
- package/dist/chunks/{chunk-BIPYLLVS.js → chunk-N4M2DDFE.js} +15 -15
- package/dist/chunks/{chunk-QKNKR4RH.js → chunk-OF4S23UB.js} +4 -4
- package/dist/chunks/{chunk-JPRO6ER2.js → chunk-PC7VKEB5.js} +57 -60
- package/dist/chunks/{chunk-4PD5NWAX.js → chunk-PUQS5MWL.js} +2 -2
- package/dist/chunks/{chunk-2LV74IWP.js → chunk-Q4OYAQYH.js} +1 -1
- package/dist/chunks/{chunk-72CKAUAG.js → chunk-QVSWRLLU.js} +7 -5
- package/dist/chunks/{chunk-4RAE6JXP.js → chunk-TA7FXXJD.js} +6 -3
- package/dist/chunks/{chunk-GPMFD4RD.js → chunk-TXUG266F.js} +1 -1
- package/dist/chunks/{chunk-FOAA27U5.js → chunk-UFIT2UU3.js} +16 -4
- package/dist/chunks/{chunk-LUSPKZKY.js → chunk-UG5G54VL.js} +1 -0
- package/dist/chunks/{chunk-NIAJ5ZCG.js → chunk-UL5XUQ25.js} +5 -2
- package/dist/chunks/{chunk-FMPJJYYI.js → chunk-WRXSAVKO.js} +1 -1
- package/dist/chunks/{chunk-G4UR6NXN.js → chunk-WSF4NNMR.js} +3 -3
- package/dist/chunks/chunk-XHK4MDR5.js +2497 -0
- package/dist/chunks/{chunk-3KTFS4IA.js → chunk-XNIK66I4.js} +19 -9
- package/dist/chunks/{chunk-3SO6QL6U.js → chunk-YWX377BY.js} +5 -2
- package/dist/chunks/{chunk-BYATLLEF.js → chunk-Z3GDFVJR.js} +1 -1
- package/dist/chunks/{chunk-GHXCDPTM.js → chunk-Z7VYWPZV.js} +1 -1
- package/dist/chunks/{conflict-F2OMZRTO.js → conflict-ARLSZJ6V.js} +4 -3
- package/dist/chunks/{continuation-2CKSBLA6.js → continuation-3S37AUSH.js} +4 -3
- package/dist/chunks/{continuation-RN6PZN2M.js → continuation-3XLYYTKV.js} +4 -3
- package/dist/chunks/{continuation-HZIZRZBX.js → continuation-HFW2YT5S.js} +4 -3
- package/dist/chunks/{continuation-NLECEJPX.js → continuation-KI7DRRZN.js} +4 -3
- package/dist/chunks/{contract-5BETHRSG.js → contract-DNIIW5VJ.js} +13 -5
- package/dist/chunks/{cowork-3MN6EQQO.js → cowork-GMLRGVIW.js} +11 -4
- package/dist/chunks/{create-flow-5FQNNMVO.js → create-flow-J22BO65E.js} +8 -7
- package/dist/chunks/{ebuilder-form-SBHOYBUD.js → ebuilder-form-ANV2FHYV.js} +12 -7
- package/dist/chunks/{ehr-KMOJULKG.js → ehr-GSTGAIY3.js} +266 -24
- package/dist/chunks/{employee-SAK2QYXX.js → employee-22BGJ3QS.js} +3 -3
- package/dist/chunks/{env-LB7NBL2O.js → env-BX3VRFS7.js} +4 -3
- package/dist/chunks/{esb-W2PJCFCX.js → esb-ATAIASX2.js} +12 -7
- package/dist/chunks/{factory-6ZFQXQ46.js → factory-PETTFME6.js} +3 -2
- package/dist/chunks/{fna-ZQPCUV4R.js → fna-YEKBSFSX.js} +14 -8
- package/dist/chunks/{group-chat-2HHAJN46.js → group-chat-BFVXAYFX.js} +5 -4
- package/dist/chunks/{host-ATKVNZAT.js → host-HRBXEPDQ.js} +5 -5
- package/dist/chunks/{host-BQH22NTQ.js → host-LR55CTHP.js} +5 -5
- package/dist/chunks/{host-X2CSLFM6.js → host-SUOY6VYQ.js} +5 -5
- package/dist/chunks/{host-4CBHGOHT.js → host-SZGV4UNT.js} +5 -5
- package/dist/chunks/{host-YTODKMSL.js → host-WIKN2EJ5.js} +5 -5
- package/dist/chunks/{hrm-FFM4UJFS.js → hrm-NRDO4W5G.js} +11 -7
- package/dist/chunks/{im-VEHKDQPB.js → im-IQ2HN23S.js} +8 -7
- package/dist/chunks/{invoice-LVIKSIIF.js → invoice-MNRW76PP.js} +636 -1768
- package/dist/chunks/{jiuchuanhui-X6DINO5P.js → jiuchuanhui-DTRBAX4N.js} +14 -6
- package/dist/chunks/{lazy-dispatch-KSWTN5L6.js → lazy-dispatch-ZVWAI25B.js} +7 -6
- package/dist/chunks/{mail-VDKRGUD3.js → mail-ZVAUXOJA.js} +16 -14
- package/dist/chunks/{meeting-CLC6HP3Z.js → meeting-FEVPZ67S.js} +21 -14
- package/dist/chunks/{okr-CHG4OO3U.js → okr-SDH3E5RA.js} +12 -5
- package/dist/chunks/{operations-5QL3AECO.js → operations-62N6EP3C.js} +4 -3
- package/dist/chunks/{plan-XWR75667.js → plan-E35JFDI7.js} +12 -5
- package/dist/chunks/{project-5BXOOKMG.js → project-73QXBAB2.js} +11 -4
- package/dist/chunks/reception-UWZVACBN.js +1899 -0
- package/dist/chunks/{recruit-stage-DGMFNNDE.js → recruit-stage-4MAOCKFY.js} +320 -57
- package/dist/chunks/registry-IM5G23LS.js +24 -0
- package/dist/chunks/{registry-RHMW6ANW.js → registry-JDUS4E7D.js} +7 -6
- package/dist/chunks/{registry-7FFOXIAW.js → registry-KNKSCJNT.js} +7 -6
- package/dist/chunks/{registry-Z43434VG.js → registry-PO7SI256.js} +4 -4
- package/dist/chunks/{registry-OZSMDVPP.js → registry-PVUZQDDQ.js} +3 -3
- package/dist/chunks/{room-recommend-62H7ZQQ6.js → room-recommend-H7KLXA5R.js} +6 -5
- package/dist/chunks/{schedule-FNXKH3DQ.js → schedule-ESZIBAUO.js} +6 -5
- package/dist/chunks/{workflow-ADHKCAJK.js → workflow-CWJFJLQU.js} +13 -8
- package/dist/cmd/action.js +6 -0
- package/dist/cmd/identity/index.js +45 -0
- package/dist/cmd/index.js +2 -0
- package/dist/core/continuation-ttl.js +18 -0
- package/dist/core/error-codes.js +85 -0
- package/dist/core/logger.js +11 -0
- package/dist/index.js +37 -31
- package/dist/internal/e10/auth/commands.js +163 -8
- package/dist/internal/e10/auth/error-log.js +182 -0
- package/dist/internal/e10/auth/session.js +17 -3
- package/dist/internal/e10/auth-recovery.js +39 -12
- package/dist/internal/e10/context.js +17 -2
- package/dist/internal/skills/install.js +9 -1
- package/dist/shortcuts/archive/continuation.js +2 -1
- package/dist/shortcuts/archive/index.js +3 -0
- package/dist/shortcuts/archive/operations/confirm.js +2 -1
- package/dist/shortcuts/archive-oa/continuation.js +2 -1
- package/dist/shortcuts/archive-oa/index.js +2 -0
- package/dist/shortcuts/archive-oa/operations/confirm.js +2 -1
- package/dist/shortcuts/asset/continuation.js +2 -1
- package/dist/shortcuts/asset/index.js +2 -0
- package/dist/shortcuts/asset-idle/index.js +2 -0
- package/dist/shortcuts/blog/continuation.js +2 -1
- package/dist/shortcuts/blog/index.js +2 -0
- package/dist/shortcuts/caizhilian/continuation.js +2 -1
- package/dist/shortcuts/caizhilian/index.js +2 -0
- package/dist/shortcuts/caizhilian/operations/confirm.js +3 -2
- package/dist/shortcuts/calendar/continuation.js +2 -1
- package/dist/shortcuts/calendar/index.js +2 -0
- package/dist/shortcuts/calendar/operations/write.js +1 -1
- package/dist/shortcuts/contract/continuation.js +2 -1
- package/dist/shortcuts/contract/index.js +2 -0
- package/dist/shortcuts/contract/operations/write.js +2 -1
- package/dist/shortcuts/cowork/continuation.js +2 -1
- package/dist/shortcuts/cowork/index.js +2 -0
- package/dist/shortcuts/ebuilder-form/continuation.js +2 -1
- package/dist/shortcuts/ebuilder-form/index.js +2 -0
- package/dist/shortcuts/ebuilder-form/operations/write.js +3 -2
- package/dist/shortcuts/ehr/continuation.js +2 -1
- package/dist/shortcuts/ehr/index.js +2 -0
- package/dist/shortcuts/ehr/operations/attend-write.js +1 -1
- package/dist/shortcuts/ehr/operations/recruit-candidate-import.js +182 -3
- package/dist/shortcuts/ehr/operations/recruit-position.js +134 -2
- package/dist/shortcuts/ehr/operations/recruit-write.js +1 -1
- package/dist/shortcuts/esb/continuation.js +2 -1
- package/dist/shortcuts/esb/index.js +2 -0
- package/dist/shortcuts/esb/operations/trigger.js +2 -1
- package/dist/shortcuts/fna/continuation.js +2 -1
- package/dist/shortcuts/fna/index.js +2 -0
- package/dist/shortcuts/fna/operations/invoice-writeoff.js +1 -1
- package/dist/shortcuts/fna/operations/loan.js +1 -1
- package/dist/shortcuts/hrm/index.js +2 -0
- package/dist/shortcuts/im/continuation.js +2 -1
- package/dist/shortcuts/index.js +5 -0
- package/dist/shortcuts/invoice/continuation.js +2 -1
- package/dist/shortcuts/invoice/index.js +14 -15
- package/dist/shortcuts/invoice/invoice-record.js +93 -0
- package/dist/shortcuts/invoice/manifest.js +190 -393
- package/dist/shortcuts/invoice/operations/add.js +2 -1
- package/dist/shortcuts/invoice/operations/delete.js +2 -1
- package/dist/shortcuts/invoice/operations/import.js +2 -1
- package/dist/shortcuts/invoice/operations/issuing-contract-detail.js +86 -0
- package/dist/shortcuts/invoice/operations/issuing-contracts.js +210 -0
- package/dist/shortcuts/invoice/operations/registry.js +17 -17
- package/dist/shortcuts/invoice/operations/reim-auto.js +4 -569
- package/dist/shortcuts/invoice/operations/reim.js +52 -341
- package/dist/shortcuts/invoice/operations/shared.js +21 -4
- package/dist/shortcuts/invoice/operations/update.js +2 -1
- package/dist/shortcuts/invoice/projection.js +10 -62
- package/dist/shortcuts/jiuchuanhui/continuation.js +2 -1
- package/dist/shortcuts/jiuchuanhui/index.js +2 -0
- package/dist/shortcuts/jiuchuanhui/operations/datajson.js +2 -1
- package/dist/shortcuts/jiuchuanhui/operations/esb.js +2 -1
- package/dist/shortcuts/mail/continuation.js +2 -1
- package/dist/shortcuts/mail/index.js +2 -0
- package/dist/shortcuts/mail/operations/mail-blacklist.js +1 -1
- package/dist/shortcuts/mail/operations/mail-contacts.js +1 -1
- package/dist/shortcuts/mail/operations/mail-send.js +1 -1
- package/dist/shortcuts/mail/operations/mail-sign.js +1 -1
- package/dist/shortcuts/mail/operations/mail-template.js +1 -1
- package/dist/shortcuts/meeting/continuation.js +2 -1
- package/dist/shortcuts/meeting/index.js +2 -0
- package/dist/shortcuts/meeting/operations/change.js +1 -1
- package/dist/shortcuts/meeting/operations/create.js +1 -1
- package/dist/shortcuts/meeting/operations/eb/create-flow.js +16 -7
- package/dist/shortcuts/meeting/operations/eb/decision.js +1 -1
- package/dist/shortcuts/meeting/operations/eb/factory.js +1 -1
- package/dist/shortcuts/meeting/operations/lifecycle.js +1 -1
- package/dist/shortcuts/meeting/operations/receipts.js +1 -1
- package/dist/shortcuts/meeting/operations/signs.js +1 -1
- package/dist/shortcuts/okr/continuation.js +2 -1
- package/dist/shortcuts/okr/index.js +2 -0
- package/dist/shortcuts/okr/operations/write.js +1 -1
- package/dist/shortcuts/plan/continuation.js +2 -1
- package/dist/shortcuts/plan/index.js +2 -0
- package/dist/shortcuts/plan/operations/write.js +1 -1
- package/dist/shortcuts/project/continuation.js +2 -1
- package/dist/shortcuts/project/index.js +2 -0
- package/dist/shortcuts/reception/constants.js +53 -0
- package/dist/shortcuts/reception/errors.js +54 -0
- package/dist/shortcuts/reception/host.js +125 -0
- package/dist/shortcuts/reception/index.js +198 -0
- package/dist/shortcuts/reception/manifest.js +177 -0
- package/dist/shortcuts/reception/operations/ask.js +71 -0
- package/dist/shortcuts/reception/operations/browsertool.js +58 -0
- package/dist/shortcuts/reception/operations/compose.js +129 -0
- package/dist/shortcuts/reception/operations/customparams.js +74 -0
- package/dist/shortcuts/reception/operations/doc.js +238 -0
- package/dist/shortcuts/reception/operations/docrender.js +36 -0
- package/dist/shortcuts/reception/operations/panels.js +179 -0
- package/dist/shortcuts/reception/operations/registry.js +26 -0
- package/dist/shortcuts/reception/operations/render-assets.js +184 -0
- package/dist/shortcuts/reception/operations/render.js +123 -0
- package/dist/shortcuts/reception/operations/runs.js +38 -0
- package/dist/shortcuts/reception/operations/schedule.js +127 -0
- package/dist/shortcuts/reception/operations/shared.js +196 -0
- package/dist/shortcuts/reception/operations/snapshot.js +68 -0
- package/dist/shortcuts/reception/operations/types.js +1 -0
- package/dist/shortcuts/reception/operations.js +33 -0
- package/dist/shortcuts/reception/upload.js +218 -0
- package/dist/shortcuts/recruit-stage/context.js +145 -33
- package/dist/shortcuts/recruit-stage/continuation.js +2 -1
- package/dist/shortcuts/recruit-stage/operations/jd-create.js +106 -17
- package/dist/shortcuts/recruit-stage/operations/resume-import.js +166 -10
- package/dist/shortcuts/workflow/continuation.js +2 -1
- package/dist/shortcuts/workflow/index.js +2 -0
- package/dist/shortcuts/workflow/operations/form.js +32 -8
- package/dist/shortcuts/workflow/operations/write.js +1 -1
- package/docs/_catalog.md +3 -0
- package/docs/agent-invoice.md +1 -1
- package/docs/archive-oa.md +1 -1
- package/docs/caizhilian.md +1 -1
- package/docs/calendar.md +1 -1
- package/docs/contract.md +1 -1
- package/docs/e10-auth.md +16 -0
- package/docs/ehr.md +2 -2
- package/docs/esb.md +1 -1
- package/docs/im.md +1 -1
- package/docs/invoice.md +8 -12
- package/docs/okr.md +1 -1
- package/docs/reception.md +119 -0
- package/package.json +1 -1
- package/scripts/clean.mjs +43 -2
- package/skill-template/business-info.json +18 -2
- package/skill-template/domains/caizhilian.md +1 -1
- package/skill-template/domains/reception-flow.md +18 -0
- package/skill-template/domains/yepiaotong.md +4 -7
- package/skills/weaver-e10-archive-oa/references/source-manifest.json +14 -14
- package/skills/weaver-e10-blog/references/blog-publish.md +1 -1
- package/skills/weaver-e10-blog/references/source-manifest.json +7 -7
- package/skills/weaver-e10-caizhilian/references/source-manifest.json +21 -21
- package/skills/weaver-e10-caizhilian/references/write-protocol.md +2 -2
- package/skills/weaver-e10-calendar/references/calendar-write.md +1 -1
- package/skills/weaver-e10-cowork/SKILL.md +1 -1
- package/skills/weaver-e10-ebuilder-form/SKILL.md +1 -1
- package/skills/weaver-e10-ebuilder-form/references/custom-api.md +1 -1
- package/skills/weaver-e10-ebuilder-form/references/openapi-write.md +1 -1
- package/skills/weaver-e10-esb/SKILL.md +2 -2
- package/skills/weaver-e10-esb/references/source-manifest.json +22 -22
- package/skills/weaver-e10-esb/references/trigger.md +2 -2
- package/skills/weaver-e10-jinchengda/references/contract-clause-library-crud.md +1 -1
- package/skills/weaver-e10-jinchengda/references/contract-clause-reference-save.md +1 -1
- package/skills/weaver-e10-jinchengda/references/contract-request-write.md +1 -1
- package/skills/weaver-e10-jinchengda/references/source-manifest.json +29 -29
- package/skills/weaver-e10-jucailin/SKILL.md +1 -1
- package/skills/weaver-e10-jucailin/references/attend-write.md +2 -2
- package/skills/weaver-e10-jucailin/references/recruit-create.md +12 -3
- package/skills/weaver-e10-jucailin/references/recruit-write.md +1 -1
- package/skills/weaver-e10-meeting/SKILL.md +8 -6
- package/skills/weaver-e10-meeting/references/meeting-change.md +1 -1
- package/skills/weaver-e10-meeting/references/meeting-create.md +1 -1
- package/skills/weaver-e10-meeting/references/meeting-lifecycle.md +1 -1
- package/skills/weaver-e10-meeting/references/meeting-verification.md +1 -1
- package/skills/weaver-e10-okr/references/okr-align.md +1 -1
- package/skills/weaver-e10-okr/references/okr-keyresult.md +1 -1
- package/skills/weaver-e10-okr/references/okr-write.md +1 -1
- package/skills/weaver-e10-okr/references/source-manifest.json +8 -8
- package/skills/weaver-e10-plan/references/plan-report-write.md +1 -1
- package/skills/weaver-e10-plan/references/source-manifest.json +20 -20
- package/skills/weaver-e10-qiyecheng/references/loan-management.md +1 -1
- package/skills/weaver-e10-qiyecheng/references/source-manifest.json +18 -18
- package/skills/weaver-e10-reception-flow/SKILL.md +173 -0
- 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
- package/skills/weaver-e10-reception-flow/data/fields-snapshot.json +213 -0
- package/skills/weaver-e10-reception-flow/references/browsertool.md +68 -0
- package/skills/weaver-e10-reception-flow/references/env-pitfalls.md +51 -0
- package/skills/weaver-e10-reception-flow/references/fields-snapshot.md +227 -0
- package/skills/weaver-e10-reception-flow/references/guide.md +179 -0
- package/skills/weaver-e10-reception-flow/scripts/locate.sh +14 -0
- package/skills/weaver-e10-reception-flow/scripts/render.py +724 -0
- package/skills/weaver-e10-recruit-stage/SKILL.md +9 -5
- package/skills/weaver-e10-recruit-stage/lib/recruit-xiaoe-file.mjs +1 -1
- package/skills/weaver-e10-recruit-stage/lib/xiaoe-session.mjs +66 -0
- package/skills/weaver-e10-recruit-stage/references/position-templates.md +202 -0
- package/skills/weaver-e10-recruit-stage/references/recruit-jd-create.md +22 -0
- package/skills/weaver-e10-recruit-stage/references/recruit-resume-import.md +14 -1
- package/skills/weaver-e10-shared/references/e10-auth-and-session.md +6 -0
- package/skills/weaver-e10-shijingran/SKILL.md +5 -5
- package/skills/weaver-e10-shijingran/references/source-manifest.json +37 -36
- package/skills/weaver-e10-skill-maker/references/module-cli-generation.md +2 -0
- package/skills/weaver-e10-wenshuding/references/source-manifest.json +3 -3
- package/skills/weaver-e10-workflow/references/source-manifest.json +32 -32
- package/skills/weaver-e10-yepiaotong/SKILL.md +19 -26
- package/skills/weaver-e10-yepiaotong/references/invoice-detail.md +13 -10
- package/skills/weaver-e10-yepiaotong/references/invoice-enterprise-list.md +2 -0
- package/skills/weaver-e10-yepiaotong/references/invoice-issuing-workflow.md +194 -155
- package/skills/weaver-e10-yepiaotong/references/invoice-output-view.md +28 -32
- package/skills/weaver-e10-yepiaotong/references/invoice-personal-list.md +5 -1
- package/skills/weaver-e10-yepiaotong/references/invoice-reim.md +8 -10
- package/skills/weaver-e10-yepiaotong/references/reim-api-reference.md +211 -616
- package/skills/weaver-e10-yepiaotong/references/reim-examples.md +149 -117
- package/skills/weaver-e10-yepiaotong/references/reim-expense-subject-rules.md +17 -20
- package/skills/weaver-e10-yepiaotong/references/reim-form-fill-rules.md +20 -39
- package/skills/weaver-e10-yepiaotong/references/reim-matching-rules.md +55 -22
- package/skills/weaver-e10-yepiaotong/references/reim-phone-subsidy-rules.md +7 -17
- package/skills/weaver-e10-yepiaotong/references/reim-workflow.md +88 -92
- package/skills/weaver-e10-yepiaotong/references/source-manifest.json +144 -354
- package/skills/weaver-e10-yimiaoban/SKILL.md +1 -1
- package/skills/weaver-e10-yimiaoban/references/msg-write.md +1 -1
- package/skills/weaver-e10-yimiaoban/references/safety-boundaries.md +1 -1
- package/skills/weaver-e10-yimiaoban/references/source-manifest.json +7 -7
- package/dist/chunks/chunk-TTPJJJC4.js +0 -465
- package/dist/chunks/registry-BKBZPBAJ.js +0 -23
- package/dist/shortcuts/invoice/markdown.js +0 -172
- package/dist/shortcuts/invoice/operations/issuing-qys.js +0 -424
- package/skills/weaver-e10-meeting.zip +0 -0
- package/skills/weaver-e10-yepiaotong/references/invoice-issuing-examples.md +0 -131
- 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 { createArchiveOaContinuationSigner } from './continuation.js';
|
|
4
5
|
import { createArchiveOaHost } from './host.js';
|
|
5
6
|
import { archiveOaManifest } from './manifest.js';
|
|
@@ -116,6 +117,7 @@ async function executeAndPrint(ctx, operation, input) {
|
|
|
116
117
|
ctx.output.write(successEnvelope(result), { json: true });
|
|
117
118
|
}
|
|
118
119
|
catch (error) {
|
|
120
|
+
reportPlatformError(error);
|
|
119
121
|
console.error(JSON.stringify(failureEnvelope(error), null, 2));
|
|
120
122
|
process.exitCode = isCliError(error) ? error.exitCode : ExitCode.GeneralError;
|
|
121
123
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CONTINUATION_TTL_MS } from '../../../core/continuation-ttl.js';
|
|
1
2
|
import { archiveOaConfirmationError, archiveOaValidationError } from '../errors.js';
|
|
2
3
|
/** apply 类写操作必须显式确认。 */
|
|
3
4
|
export function requireConfirm(args, action) {
|
|
@@ -11,7 +12,7 @@ export function requireConfirm(args, action) {
|
|
|
11
12
|
* prepare 阶段签发 continuation。
|
|
12
13
|
* 环境指纹(baseUrl + 登录账号)写进票据,apply 时校验,避免跨环境/跨账号复用。
|
|
13
14
|
*/
|
|
14
|
-
export async function issueLease(env, action, payload, ttlMs =
|
|
15
|
+
export async function issueLease(env, action, payload, ttlMs = CONTINUATION_TTL_MS) {
|
|
15
16
|
const session = await env.host.getSession();
|
|
16
17
|
const continuation = await env.continuation.issue({
|
|
17
18
|
operation: action,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CONTINUATION_TTL_MS } from '../../core/continuation-ttl.js';
|
|
1
2
|
import { createHmac, randomBytes, timingSafeEqual } from 'node:crypto';
|
|
2
3
|
import { existsSync } from 'node:fs';
|
|
3
4
|
import { chmod, mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
@@ -35,7 +36,7 @@ function signature(payload, key) {
|
|
|
35
36
|
}
|
|
36
37
|
export function createZiguanjiaContinuationSigner(ctx) {
|
|
37
38
|
return {
|
|
38
|
-
async issue(payload, ttlMs =
|
|
39
|
+
async issue(payload, ttlMs = CONTINUATION_TTL_MS) {
|
|
39
40
|
const issuedAt = Date.now();
|
|
40
41
|
const body = encode({ ...payload, issuedAt, expiresAt: issuedAt + ttlMs });
|
|
41
42
|
const sig = signature(body, await loadKey(ctx));
|
|
@@ -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 { createZiguanjiaContinuationSigner } from './continuation.js';
|
|
4
5
|
import { createZiguanjiaHost } from './host.js';
|
|
5
6
|
import { ziguanjiaManifest } from './manifest.js';
|
|
@@ -85,6 +86,7 @@ async function executeAndPrint(ctx, operation, input) {
|
|
|
85
86
|
ctx.output.write(successEnvelope(operation, result), { json: true });
|
|
86
87
|
}
|
|
87
88
|
catch (error) {
|
|
89
|
+
reportPlatformError(error);
|
|
88
90
|
console.error(JSON.stringify(failureEnvelope(error), null, 2));
|
|
89
91
|
process.exitCode = isCliError(error) ? error.exitCode : ExitCode.GeneralError;
|
|
90
92
|
}
|
|
@@ -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 { createAssetIdleHost } from './host.js';
|
|
4
5
|
import { assetIdleManifest } from './manifest.js';
|
|
5
6
|
import { executeAssetIdleOperation } from './operations.js';
|
|
@@ -83,6 +84,7 @@ async function executeAndPrint(ctx, operation, input) {
|
|
|
83
84
|
ctx.output.write(successEnvelope(operation, result), { json: true });
|
|
84
85
|
}
|
|
85
86
|
catch (error) {
|
|
87
|
+
reportPlatformError(error);
|
|
86
88
|
console.error(JSON.stringify(failureEnvelope(error), null, 2));
|
|
87
89
|
process.exitCode = isCliError(error) ? error.exitCode : ExitCode.GeneralError;
|
|
88
90
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CONTINUATION_TTL_MS } from '../../core/continuation-ttl.js';
|
|
1
2
|
import { createHmac, randomBytes, timingSafeEqual } from 'node:crypto';
|
|
2
3
|
import { existsSync } from 'node:fs';
|
|
3
4
|
import { chmod, mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
@@ -39,7 +40,7 @@ function signature(payload, key) {
|
|
|
39
40
|
*/
|
|
40
41
|
export function createBlogContinuationSigner(ctx) {
|
|
41
42
|
return {
|
|
42
|
-
async issue(payload, ttlMs =
|
|
43
|
+
async issue(payload, ttlMs = CONTINUATION_TTL_MS) {
|
|
43
44
|
const issuedAt = Date.now();
|
|
44
45
|
const body = encode({ ...payload, issuedAt, expiresAt: issuedAt + ttlMs });
|
|
45
46
|
const sig = signature(body, await loadKey(ctx));
|
|
@@ -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 { createBlogContinuationSigner } from './continuation.js';
|
|
4
5
|
import { blogValidationError } from './errors.js';
|
|
5
6
|
import { createBlogHost } from './host.js';
|
|
@@ -101,6 +102,7 @@ async function executeAndPrint(ctx, operation, input) {
|
|
|
101
102
|
ctx.output.write(successEnvelope(operation, result), { json: true });
|
|
102
103
|
}
|
|
103
104
|
catch (error) {
|
|
105
|
+
reportPlatformError(error);
|
|
104
106
|
console.error(JSON.stringify(failureEnvelope(error), null, 2));
|
|
105
107
|
process.exitCode = isCliError(error) ? error.exitCode : ExitCode.GeneralError;
|
|
106
108
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CONTINUATION_TTL_MS } from '../../core/continuation-ttl.js';
|
|
1
2
|
import { createHmac, randomBytes, timingSafeEqual } from 'node:crypto';
|
|
2
3
|
import { existsSync } from 'node:fs';
|
|
3
4
|
import { chmod, mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
@@ -35,7 +36,7 @@ function signature(payload, key) {
|
|
|
35
36
|
}
|
|
36
37
|
export function createCaizhilianContinuationSigner(ctx) {
|
|
37
38
|
return {
|
|
38
|
-
async issue(payload, ttlMs =
|
|
39
|
+
async issue(payload, ttlMs = CONTINUATION_TTL_MS) {
|
|
39
40
|
const issuedAt = Date.now();
|
|
40
41
|
const body = encode({ ...payload, issuedAt, expiresAt: issuedAt + ttlMs });
|
|
41
42
|
const sig = signature(body, await loadKey(ctx));
|
|
@@ -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 { createCaizhilianContinuationSigner } from './continuation.js';
|
|
4
5
|
import { caizhilianValidationError } from './errors.js';
|
|
5
6
|
import { createCaizhilianHost } from './host.js';
|
|
@@ -88,6 +89,7 @@ async function executeAndPrint(ctx, operation, input) {
|
|
|
88
89
|
ctx.output.write(successEnvelope(operation, result), { json: true });
|
|
89
90
|
}
|
|
90
91
|
catch (error) {
|
|
92
|
+
reportPlatformError(error);
|
|
91
93
|
console.error(JSON.stringify(failureEnvelope(error), null, 2));
|
|
92
94
|
process.exitCode = isCliError(error) ? error.exitCode : ExitCode.GeneralError;
|
|
93
95
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CONTINUATION_TTL_MS } from '../../../core/continuation-ttl.js';
|
|
1
2
|
import { caizhilianConfirmationError, caizhilianValidationError } from '../errors.js';
|
|
2
3
|
import { fingerprint } from './shared.js';
|
|
3
4
|
/** apply 类写操作必须显式确认。 */
|
|
@@ -12,7 +13,7 @@ export function requireConfirm(args, action) {
|
|
|
12
13
|
* prepare 阶段签发 continuation。
|
|
13
14
|
* 环境指纹(baseUrl + 登录账号)写进票据,apply 时校验,避免跨环境/跨账号复用。
|
|
14
15
|
*/
|
|
15
|
-
export async function issueLease(env, action, payload, ttlMs =
|
|
16
|
+
export async function issueLease(env, action, payload, ttlMs = CONTINUATION_TTL_MS) {
|
|
16
17
|
const session = await env.host.getSession();
|
|
17
18
|
const continuation = await env.continuation.issue({
|
|
18
19
|
operation: action,
|
|
@@ -61,7 +62,7 @@ export function leaseArgsFingerprint(args) {
|
|
|
61
62
|
return fingerprint(picked);
|
|
62
63
|
}
|
|
63
64
|
/** prepare 签发票据:自动附带入参指纹(apply 时由 assertLeaseArgs 校验)。 */
|
|
64
|
-
export async function issueWriteLease(env, action, args, payload, ttlMs =
|
|
65
|
+
export async function issueWriteLease(env, action, args, payload, ttlMs = CONTINUATION_TTL_MS) {
|
|
65
66
|
return issueLease(env, action, { ...payload, argsFingerprint: leaseArgsFingerprint(args) }, ttlMs);
|
|
66
67
|
}
|
|
67
68
|
/** apply 校验整体入参与 prepare 时一致(比 assertLeaseTarget 更严格的全量防漂移)。 */
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CONTINUATION_TTL_MS } from '../../core/continuation-ttl.js';
|
|
1
2
|
import { createHmac, randomBytes, timingSafeEqual } from 'node:crypto';
|
|
2
3
|
import { existsSync } from 'node:fs';
|
|
3
4
|
import { chmod, mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
@@ -35,7 +36,7 @@ function signature(payload, key) {
|
|
|
35
36
|
}
|
|
36
37
|
export function createCalendarContinuationSigner(ctx) {
|
|
37
38
|
return {
|
|
38
|
-
async issue(payload, ttlMs =
|
|
39
|
+
async issue(payload, ttlMs = CONTINUATION_TTL_MS) {
|
|
39
40
|
const issuedAt = Date.now();
|
|
40
41
|
const body = encode({ ...payload, issuedAt, expiresAt: issuedAt + ttlMs });
|
|
41
42
|
const sig = signature(body, await loadKey(ctx));
|
|
@@ -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 { createCalendarContinuationSigner } from './continuation.js';
|
|
4
5
|
import { createCalendarHost } from './host.js';
|
|
5
6
|
import { calendarManifest } from './manifest.js';
|
|
@@ -83,6 +84,7 @@ async function executeAndPrint(ctx, operation, input) {
|
|
|
83
84
|
ctx.output.write(successEnvelope(operation, result), { json: true });
|
|
84
85
|
}
|
|
85
86
|
catch (error) {
|
|
87
|
+
reportPlatformError(error);
|
|
86
88
|
console.error(JSON.stringify(failureEnvelope(error), null, 2));
|
|
87
89
|
process.exitCode = isCliError(error) ? error.exitCode : ExitCode.GeneralError;
|
|
88
90
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import { CONTINUATION_TTL_SECONDS } from '../../../core/continuation-ttl.js';
|
|
1
2
|
import { createHash } from 'node:crypto';
|
|
2
3
|
import { calendarConfirmationError, calendarPartialError, calendarValidationError, CalendarCliError } from '../errors.js';
|
|
3
4
|
import { calendarSuccess, schemaOf, SCHEMA_ID, SCHEMA_DATETIME_MINUTE, SCHEMA_SWITCH, SCHEMA_DATE } from './types.js';
|
|
4
5
|
import { assertDateTimeMinute, defaultEndTime, optionId, participantIds, pickDefined, } from './shared.js';
|
|
5
6
|
import { fetchAgendaAppAndForm } from './read.js';
|
|
6
|
-
const CONTINUATION_TTL_SECONDS = 600;
|
|
7
7
|
// 日程 mainTable 可选业务字段(创建/更新共用)
|
|
8
8
|
const OPTIONAL_FIELDS = [
|
|
9
9
|
'next_start_remind',
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CONTINUATION_TTL_MS } from '../../core/continuation-ttl.js';
|
|
1
2
|
import { createHmac, randomBytes, timingSafeEqual } from 'node:crypto';
|
|
2
3
|
import { existsSync } from 'node:fs';
|
|
3
4
|
import { chmod, mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
@@ -35,7 +36,7 @@ function signature(payload, key) {
|
|
|
35
36
|
}
|
|
36
37
|
export function createContractContinuationSigner(ctx) {
|
|
37
38
|
return {
|
|
38
|
-
async issue(payload, ttlMs =
|
|
39
|
+
async issue(payload, ttlMs = CONTINUATION_TTL_MS) {
|
|
39
40
|
const issuedAt = Date.now();
|
|
40
41
|
const body = encode({ ...payload, issuedAt, expiresAt: issuedAt + ttlMs });
|
|
41
42
|
const sig = signature(body, await loadKey(ctx));
|
|
@@ -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 { createContractContinuationSigner } from './continuation.js';
|
|
4
5
|
import { contractValidationError } from './errors.js';
|
|
5
6
|
import { createContractHost } from './host.js';
|
|
@@ -109,6 +110,7 @@ async function executeAndPrint(ctx, operation, input) {
|
|
|
109
110
|
ctx.output.write(successEnvelope(operation, result), { json: true });
|
|
110
111
|
}
|
|
111
112
|
catch (error) {
|
|
113
|
+
reportPlatformError(error);
|
|
112
114
|
console.error(JSON.stringify(failureEnvelope(error), null, 2));
|
|
113
115
|
process.exitCode = isCliError(error) ? error.exitCode : ExitCode.GeneralError;
|
|
114
116
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CONTINUATION_TTL_SECONDS } from '../../../core/continuation-ttl.js';
|
|
1
2
|
import { ContractCliError, contractConfirmationError, contractPartialError, contractValidationError } from '../errors.js';
|
|
2
3
|
import { objectFingerprint, sessionMatches } from './shared.js';
|
|
3
4
|
import { CONTRACT_WORKFLOW } from './types.js';
|
|
@@ -37,7 +38,7 @@ export class ContractWritePrepareOperation {
|
|
|
37
38
|
data: {
|
|
38
39
|
preview,
|
|
39
40
|
continuation: continuationToken,
|
|
40
|
-
expiresInSeconds:
|
|
41
|
+
expiresInSeconds: CONTINUATION_TTL_SECONDS,
|
|
41
42
|
workflow: CONTRACT_WORKFLOW.awaitingConfirmation(baseName),
|
|
42
43
|
...(precheck ? { precheck } : {}),
|
|
43
44
|
},
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CONTINUATION_TTL_MS } from '../../core/continuation-ttl.js';
|
|
1
2
|
import { createHmac, randomBytes, timingSafeEqual } from 'node:crypto';
|
|
2
3
|
import { existsSync } from 'node:fs';
|
|
3
4
|
import { chmod, mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
@@ -35,7 +36,7 @@ function signature(payload, key) {
|
|
|
35
36
|
}
|
|
36
37
|
export function createCoworkContinuationSigner(ctx) {
|
|
37
38
|
return {
|
|
38
|
-
async issue(payload, ttlMs =
|
|
39
|
+
async issue(payload, ttlMs = CONTINUATION_TTL_MS) {
|
|
39
40
|
const issuedAt = Date.now();
|
|
40
41
|
const body = encode({ ...payload, issuedAt, expiresAt: issuedAt + ttlMs });
|
|
41
42
|
const sig = signature(body, await loadKey(ctx));
|
|
@@ -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 { createCoworkContinuationSigner } from './continuation.js';
|
|
4
5
|
import { createCoworkHost } from './host.js';
|
|
5
6
|
import { coworkManifest } from './manifest.js';
|
|
@@ -84,6 +85,7 @@ async function executeAndPrint(ctx, operation, input) {
|
|
|
84
85
|
ctx.output.write(successEnvelope(operation, result), { json: true });
|
|
85
86
|
}
|
|
86
87
|
catch (error) {
|
|
88
|
+
reportPlatformError(error);
|
|
87
89
|
console.error(JSON.stringify(failureEnvelope(error), null, 2));
|
|
88
90
|
process.exitCode = isCliError(error) ? error.exitCode : ExitCode.GeneralError;
|
|
89
91
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CONTINUATION_TTL_MS } from '../../core/continuation-ttl.js';
|
|
1
2
|
import { createHmac, randomBytes, timingSafeEqual } from 'node:crypto';
|
|
2
3
|
import { existsSync } from 'node:fs';
|
|
3
4
|
import { chmod, mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
@@ -35,7 +36,7 @@ function signature(payload, key) {
|
|
|
35
36
|
}
|
|
36
37
|
export function createEbuilderFormContinuationSigner(ctx) {
|
|
37
38
|
return {
|
|
38
|
-
async issue(payload, ttlMs =
|
|
39
|
+
async issue(payload, ttlMs = CONTINUATION_TTL_MS) {
|
|
39
40
|
const issuedAt = Date.now();
|
|
40
41
|
const body = encode({ ...payload, issuedAt, expiresAt: issuedAt + ttlMs });
|
|
41
42
|
const sig = signature(body, await loadKey(ctx));
|
|
@@ -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 { createEbuilderFormContinuationSigner } from './continuation.js';
|
|
4
5
|
import { ebuilderValidationError } from './errors.js';
|
|
5
6
|
import { createEbuilderFormHost } from './host.js';
|
|
@@ -81,6 +82,7 @@ async function executeAndPrint(ctx, operation, input) {
|
|
|
81
82
|
ctx.output.write(successEnvelope(operation, result), { json: true });
|
|
82
83
|
}
|
|
83
84
|
catch (error) {
|
|
85
|
+
reportPlatformError(error);
|
|
84
86
|
console.error(JSON.stringify(failureEnvelope(error), null, 2));
|
|
85
87
|
process.exitCode = isCliError(error) ? error.exitCode : ExitCode.GeneralError;
|
|
86
88
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CONTINUATION_TTL_SECONDS } from '../../../core/continuation-ttl.js';
|
|
1
2
|
import { ebuilderConfirmationError, ebuilderValidationError } from '../errors.js';
|
|
2
3
|
import { ebuilderSuccess } from './types.js';
|
|
3
4
|
import { asObject, assertKnownKeys, assertNoForbiddenKeys, optionalArray, optionalObject, optionalString, requiredArray, requiredString, sha256VisibleFingerprint, } from './shared.js';
|
|
@@ -51,7 +52,7 @@ export class EbuilderOpenapiPrepareOperation {
|
|
|
51
52
|
target: prepared.target,
|
|
52
53
|
requestPreview: { datajson: prepared.datajson },
|
|
53
54
|
continuation,
|
|
54
|
-
expiresInSeconds:
|
|
55
|
+
expiresInSeconds: CONTINUATION_TTL_SECONDS,
|
|
55
56
|
}, { status: 'PREPARED' }, prepared.warnings);
|
|
56
57
|
}
|
|
57
58
|
}
|
|
@@ -110,7 +111,7 @@ export class EbuilderCustomPrepareOperation {
|
|
|
110
111
|
target: prepared.target,
|
|
111
112
|
requestPreview: { datajson: prepared.datajson },
|
|
112
113
|
continuation,
|
|
113
|
-
expiresInSeconds:
|
|
114
|
+
expiresInSeconds: CONTINUATION_TTL_SECONDS,
|
|
114
115
|
}, { status: 'PREPARED' }, prepared.warnings);
|
|
115
116
|
}
|
|
116
117
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CONTINUATION_TTL_MS } from '../../core/continuation-ttl.js';
|
|
1
2
|
import { createHmac, randomBytes, timingSafeEqual } from 'node:crypto';
|
|
2
3
|
import { existsSync } from 'node:fs';
|
|
3
4
|
import { chmod, mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
@@ -35,7 +36,7 @@ function signature(payload, key) {
|
|
|
35
36
|
}
|
|
36
37
|
export function createEhrContinuationSigner(ctx) {
|
|
37
38
|
return {
|
|
38
|
-
async issue(payload, ttlMs =
|
|
39
|
+
async issue(payload, ttlMs = CONTINUATION_TTL_MS) {
|
|
39
40
|
const issuedAt = Date.now();
|
|
40
41
|
const body = encode({ ...payload, issuedAt, expiresAt: issuedAt + ttlMs });
|
|
41
42
|
const sig = signature(body, await loadKey(ctx));
|
|
@@ -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 { createEhrContinuationSigner } from './continuation.js';
|
|
4
5
|
import { createEhrHost } from './host.js';
|
|
5
6
|
import { ehrManifest } from './manifest.js';
|
|
@@ -89,6 +90,7 @@ async function executeAndPrint(ctx, operation, input) {
|
|
|
89
90
|
ctx.output.write(successEnvelope(operation, result), { json: true });
|
|
90
91
|
}
|
|
91
92
|
catch (error) {
|
|
93
|
+
reportPlatformError(error);
|
|
92
94
|
console.error(JSON.stringify(failureEnvelope(error), null, 2));
|
|
93
95
|
process.exitCode = isCliError(error) ? error.exitCode : ExitCode.GeneralError;
|
|
94
96
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import { CONTINUATION_TTL_SECONDS } from '../../../core/continuation-ttl.js';
|
|
1
2
|
import { createHash } from 'node:crypto';
|
|
2
3
|
import { ehrConfirmationError, ehrPartialError, ehrValidationError, EhrCliError } from '../errors.js';
|
|
3
4
|
import { READ, SCHEMA_DATE, SCHEMA_ID, ehrSuccess, schemaOf, WRITE, } from './types.js';
|
|
4
5
|
import { assertEnum, assertEnumArray, compact, pickDefined, toIdList, EHR_PAGES, ehrPageUrl, addDays } from './shared.js';
|
|
5
|
-
const CONTINUATION_TTL_SECONDS = 600;
|
|
6
6
|
const CARD_TYPES = ['CHECKIN', 'CHECKOUT', 'LEAVE', 'RETURN', 'CHECKIN_AND_RETURN', 'CHECKOUT_AND_LEAVE'];
|
|
7
7
|
const APPEAL_TYPES = [
|
|
8
8
|
'leave',
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CONTINUATION_TTL_MS, CONTINUATION_TTL_SECONDS } from '../../../core/continuation-ttl.js';
|
|
1
2
|
import { createHash } from 'node:crypto';
|
|
2
3
|
import { readFile, stat } from 'node:fs/promises';
|
|
3
4
|
import { basename } from 'node:path';
|
|
@@ -100,6 +101,133 @@ function joinRange(start, end) {
|
|
|
100
101
|
return undefined;
|
|
101
102
|
return `${s},${e}`;
|
|
102
103
|
}
|
|
104
|
+
// ── 日期格式预检与归一(2026-11-05 与 recruit-stage 同步修复)──
|
|
105
|
+
// 人才表单接口只接受 yyyy-MM-dd。模型常给「2020.11」「2008-08」「2004.09-2008.07」,
|
|
106
|
+
// 会让 dataset 新增整批校验失败 → 回退建主表 → 补明细又被同一格式拦下 → 明细全丢。
|
|
107
|
+
// 规则同 recruit-stage:只有年月时开始补 -01、结束补当月最后一天;「至今」归一为空(不伪造结束日);
|
|
108
|
+
// 无法识别则跳过该字段并在 warnings 明示,绝不静默改写。
|
|
109
|
+
const DATE_ONLY_RE = /^\d{4}-\d{2}-\d{2}$/;
|
|
110
|
+
const ONGOING_RE = /至今|现在|今|now|present/i;
|
|
111
|
+
const RE_RANGE_FULL = /^\s*(\d{4}[.\-/年]\d{1,2}[.\-/月]\d{1,2}\s*日?)\s*[-–—~至,,]\s*(\d{4}[.\-/年]\d{1,2}[.\-/月]\d{1,2}\s*日?|至今|现在|今)\s*$/;
|
|
112
|
+
const RE_RANGE_YM = /^\s*(\d{4}[.\-/年]\d{1,2})\s*[-–—~至,,]\s*(\d{4}[.\-/年]\d{1,2}|至今|现在|今)\s*$/;
|
|
113
|
+
/** 单日期片段 → yyyy-MM-dd;isEnd=true 且缺日时补该月最后一天。无法解析返回 ''。 */
|
|
114
|
+
function normDatePart(raw, isEnd) {
|
|
115
|
+
const s = String(raw ?? '').trim();
|
|
116
|
+
if (!s)
|
|
117
|
+
return '';
|
|
118
|
+
if (ONGOING_RE.test(s))
|
|
119
|
+
return '';
|
|
120
|
+
if (DATE_ONLY_RE.test(s))
|
|
121
|
+
return s;
|
|
122
|
+
const m = s.match(/^(\d{4})\s*[.\-/年]?\s*(\d{1,2})?\s*[.\-/月]?\s*(\d{1,2})?\s*日?$/);
|
|
123
|
+
if (!m)
|
|
124
|
+
return '';
|
|
125
|
+
const y = Number(m[1]);
|
|
126
|
+
const mo = m[2] ? Number(m[2]) : 1;
|
|
127
|
+
if (!y || mo < 1 || mo > 12)
|
|
128
|
+
return '';
|
|
129
|
+
const lastDay = new Date(y, mo, 0).getDate();
|
|
130
|
+
let d;
|
|
131
|
+
if (m[3]) {
|
|
132
|
+
d = Number(m[3]);
|
|
133
|
+
if (d < 1 || d > lastDay)
|
|
134
|
+
return '';
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
d = isEnd ? lastDay : 1;
|
|
138
|
+
}
|
|
139
|
+
return `${y}-${String(mo).padStart(2, '0')}-${String(d).padStart(2, '0')}`;
|
|
140
|
+
}
|
|
141
|
+
/** 日期区间 → "start,end";单值原样归一。 */
|
|
142
|
+
function normDateRange(raw) {
|
|
143
|
+
const s = Array.isArray(raw)
|
|
144
|
+
? raw.map((x) => String(x ?? '').trim()).filter(Boolean).join(',')
|
|
145
|
+
: String(raw ?? '').trim();
|
|
146
|
+
if (!s)
|
|
147
|
+
return '';
|
|
148
|
+
const m = s.match(RE_RANGE_FULL) || s.match(RE_RANGE_YM);
|
|
149
|
+
if (m) {
|
|
150
|
+
const a = normDatePart(m[1], false);
|
|
151
|
+
if (!a)
|
|
152
|
+
return '';
|
|
153
|
+
const b = normDatePart(m[2], true);
|
|
154
|
+
return b ? `${a},${b}` : a;
|
|
155
|
+
}
|
|
156
|
+
return normDatePart(s, false);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* 就地归一简历入参里的全部日期字段,把每处改动写入 warnings(不静默改写)。
|
|
160
|
+
* 覆盖:joinworkdate / graduate_date / birthday;academicInformations[].study_date;
|
|
161
|
+
* jobInformations|workExperiences|projectExperiences 的 start_date/end_date;
|
|
162
|
+
* internshipExperiences[].entry_time;awardExperiences[].award_date。
|
|
163
|
+
*/
|
|
164
|
+
export function normalizeImportDates(input, warnings) {
|
|
165
|
+
if (!input || typeof input !== 'object')
|
|
166
|
+
return;
|
|
167
|
+
const one = (label, val, isEnd = false) => {
|
|
168
|
+
const before = String(val ?? '').trim();
|
|
169
|
+
if (!before)
|
|
170
|
+
return '';
|
|
171
|
+
if (ONGOING_RE.test(before))
|
|
172
|
+
return '';
|
|
173
|
+
const after = normDatePart(before, isEnd);
|
|
174
|
+
if (!after) {
|
|
175
|
+
warnings.push(`日期无法识别,已跳过该字段(避免接口整批校验失败):${label} = 「${before}」`);
|
|
176
|
+
return '';
|
|
177
|
+
}
|
|
178
|
+
if (after !== before)
|
|
179
|
+
warnings.push(`日期已规范化:${label} 「${before}」→「${after}」`);
|
|
180
|
+
return after;
|
|
181
|
+
};
|
|
182
|
+
for (const k of ['joinworkdate', 'graduate_date', 'birthday']) {
|
|
183
|
+
if (input[k] === undefined || input[k] === null)
|
|
184
|
+
continue;
|
|
185
|
+
input[k] = one(k, input[k], false);
|
|
186
|
+
}
|
|
187
|
+
if (Array.isArray(input.academicInformations)) {
|
|
188
|
+
input.academicInformations.forEach((r, i) => {
|
|
189
|
+
if (!r || typeof r !== 'object' || r.study_date === undefined)
|
|
190
|
+
return;
|
|
191
|
+
const before = String(r.study_date ?? '').trim();
|
|
192
|
+
if (!before)
|
|
193
|
+
return;
|
|
194
|
+
const after = normDateRange(before);
|
|
195
|
+
if (!after) {
|
|
196
|
+
warnings.push(`日期区间无法识别,已跳过:academicInformations[${i}].study_date = 「${before}」`);
|
|
197
|
+
r.study_date = '';
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
if (after !== before)
|
|
201
|
+
warnings.push(`日期已规范化:academicInformations[${i}].study_date 「${before}」→「${after}」`);
|
|
202
|
+
r.study_date = after;
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
for (const key of ['jobInformations', 'workExperiences', 'projectExperiences']) {
|
|
207
|
+
const arr = input[key];
|
|
208
|
+
if (!Array.isArray(arr))
|
|
209
|
+
continue;
|
|
210
|
+
arr.forEach((r, i) => {
|
|
211
|
+
if (!r || typeof r !== 'object')
|
|
212
|
+
return;
|
|
213
|
+
if (r.start_date !== undefined && r.start_date !== null)
|
|
214
|
+
r.start_date = one(`${key}[${i}].start_date`, r.start_date, false);
|
|
215
|
+
if (r.end_date !== undefined && r.end_date !== null)
|
|
216
|
+
r.end_date = one(`${key}[${i}].end_date`, r.end_date, true);
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
for (const [key, field] of [['internshipExperiences', 'entry_time'], ['awardExperiences', 'award_date']]) {
|
|
220
|
+
const arr = input[key];
|
|
221
|
+
if (!Array.isArray(arr))
|
|
222
|
+
continue;
|
|
223
|
+
arr.forEach((r, i) => {
|
|
224
|
+
if (!r || typeof r !== 'object')
|
|
225
|
+
return;
|
|
226
|
+
if (r[field] !== undefined && r[field] !== null)
|
|
227
|
+
r[field] = one(`${key}[${i}].${field}`, r[field], false);
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
}
|
|
103
231
|
async function resolveSubTableMeta(env, formId) {
|
|
104
232
|
let data = null;
|
|
105
233
|
try {
|
|
@@ -464,6 +592,9 @@ function str(value) {
|
|
|
464
592
|
}
|
|
465
593
|
async function buildImportPlan(env, cache, args) {
|
|
466
594
|
const warnings = [];
|
|
595
|
+
// 日期格式预检与归一:必须在构建主表/明细之前执行。原实现直接把模型给的
|
|
596
|
+
// 「2020.11」「2004.09-2008.07」写进接口,导致 dataset 整批校验失败、明细全丢。
|
|
597
|
+
normalizeImportDates(args, warnings);
|
|
467
598
|
const talent = cache.forms.talent_pool;
|
|
468
599
|
const objId = talent?.objId;
|
|
469
600
|
const formId = talent?.formId || objId;
|
|
@@ -691,7 +822,7 @@ const candidateImportPrepare = {
|
|
|
691
822
|
candidateName: plan.talentName,
|
|
692
823
|
telephone: plan.mobile,
|
|
693
824
|
},
|
|
694
|
-
},
|
|
825
|
+
}, CONTINUATION_TTL_MS);
|
|
695
826
|
return ehrSuccess('ehr.recruit.candidate.import.prepare', {
|
|
696
827
|
status: 'AWAITING_CONFIRMATION',
|
|
697
828
|
preview: {
|
|
@@ -709,7 +840,7 @@ const candidateImportPrepare = {
|
|
|
709
840
|
},
|
|
710
841
|
...(tagCheck ? { tagCheck } : {}),
|
|
711
842
|
continuation,
|
|
712
|
-
expiresInSeconds:
|
|
843
|
+
expiresInSeconds: CONTINUATION_TTL_SECONDS,
|
|
713
844
|
});
|
|
714
845
|
},
|
|
715
846
|
};
|
|
@@ -809,13 +940,61 @@ const candidateImportApply = {
|
|
|
809
940
|
const warnings = [...(payload.warnings || [])];
|
|
810
941
|
if (batchNote)
|
|
811
942
|
warnings.push(batchNote);
|
|
943
|
+
// 明细完整性判定(2026-11-05 与 recruit-stage 同步修复):
|
|
944
|
+
// 主表建成 ≠ 建档成功。原实现 result 硬编码 'success' 且从不回读明细,
|
|
945
|
+
// 一旦日期格式等原因导致明细整批被拒,会出现「人才已建、经历全空」却仍报成功的静默事故。
|
|
946
|
+
// 规则:期望行数 > 0 时读回行数必须 >= 期望,否则 result 只能报 partial;回读失败标 unverified。
|
|
947
|
+
let detailsState = 'complete';
|
|
948
|
+
const expectedDetailRows = Object.values(payload.subStats || {}).reduce((sum, n) => sum + Number(n || 0), 0);
|
|
949
|
+
if (expectedDetailRows > 0) {
|
|
950
|
+
try {
|
|
951
|
+
const snapshot = (await env.host.request({
|
|
952
|
+
path: '/api/ebuilder/form/form/core/getFormDataAndLayout',
|
|
953
|
+
method: 'POST',
|
|
954
|
+
body: {
|
|
955
|
+
terminalType: 'PC',
|
|
956
|
+
dataId: talentId,
|
|
957
|
+
formId,
|
|
958
|
+
module: 'ebuilderform',
|
|
959
|
+
newLayout: true,
|
|
960
|
+
dataCrossLayout: false,
|
|
961
|
+
permissionId: '',
|
|
962
|
+
allReadOnly: true,
|
|
963
|
+
initialDatas: [],
|
|
964
|
+
dynamicData: false,
|
|
965
|
+
cost: false,
|
|
966
|
+
customParam: { objId, dataId: talentId },
|
|
967
|
+
},
|
|
968
|
+
operation: 'ehr.recruit.candidate.import.apply',
|
|
969
|
+
}));
|
|
970
|
+
const detailData = snapshot?.data?.formData?.dataDetails || [];
|
|
971
|
+
const seenRows = {};
|
|
972
|
+
for (const d of detailData) {
|
|
973
|
+
if (!d?.subFormId)
|
|
974
|
+
continue;
|
|
975
|
+
const key = String(d.subFormId);
|
|
976
|
+
(seenRows[key] = seenRows[key] || new Set()).add(String(d.dataIndex));
|
|
977
|
+
}
|
|
978
|
+
const gotRows = Object.values(seenRows).reduce((sum, set) => sum + set.size, 0);
|
|
979
|
+
if (gotRows < expectedDetailRows) {
|
|
980
|
+
detailsState = 'missing';
|
|
981
|
+
warnings.push(`明细行未完整落库(期望 ${expectedDetailRows} 行,读回 ${gotRows} 行):主表已写入,请核对后补齐明细`);
|
|
982
|
+
}
|
|
983
|
+
}
|
|
984
|
+
catch (error) {
|
|
985
|
+
detailsState = 'unverified';
|
|
986
|
+
warnings.push(`明细读回校验失败(无法确认明细是否落库):${error?.message || '未知错误'}`);
|
|
987
|
+
}
|
|
988
|
+
}
|
|
812
989
|
return ehrSuccess('ehr.recruit.candidate.import.apply', {
|
|
813
|
-
result: 'success',
|
|
990
|
+
result: detailsState === 'complete' ? 'success' : 'partial',
|
|
991
|
+
detailsState,
|
|
814
992
|
talentId,
|
|
815
993
|
candidateName: payload.candidateName,
|
|
816
994
|
telephone: payload.telephone,
|
|
817
995
|
mainTableFields: Object.keys(mainTable).length,
|
|
818
996
|
detailRows: payload.subStats || undefined,
|
|
997
|
+
detailRowsExpected: expectedDetailRows || undefined,
|
|
819
998
|
attachment: uploaded ? { name: uploaded.name, size: uploaded.size } : null,
|
|
820
999
|
batch: { ok: batchOk, note: batchNote },
|
|
821
1000
|
labelMatch,
|