weaver-work-cli 0.1.2 → 0.1.5

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 (405) hide show
  1. package/README.md +176 -78
  2. package/dist/cmd/setup/index.js +5 -5
  3. package/dist/cmd/skills/index.js +1 -1
  4. package/dist/core/hooks.js +7 -0
  5. package/dist/index.js +0 -0
  6. package/dist/internal/e10/auth/commands.js +159 -54
  7. package/dist/internal/e10/auth/xiaoe.js +268 -0
  8. package/dist/internal/e10/context.js +16 -2
  9. package/dist/internal/e10/index.js +1 -0
  10. package/dist/internal/e10/request-runtime.js +345 -0
  11. package/dist/internal/skills/install.js +48 -6
  12. package/dist/internal/skills/reader.js +27 -0
  13. package/dist/shortcuts/archive/continuation.js +70 -0
  14. package/dist/shortcuts/archive/errors.js +53 -0
  15. package/dist/shortcuts/archive/host.js +197 -0
  16. package/dist/shortcuts/archive/index.js +363 -0
  17. package/dist/shortcuts/archive/manifest.js +45 -0
  18. package/dist/shortcuts/archive/operations/archive-info.js +55 -0
  19. package/dist/shortcuts/archive/operations/borrow-car.js +146 -0
  20. package/dist/shortcuts/archive/operations/borrow-list.js +200 -0
  21. package/dist/shortcuts/archive/operations/confirm.js +46 -0
  22. package/dist/shortcuts/archive/operations/download.js +238 -0
  23. package/dist/shortcuts/archive/operations/flow-url.js +240 -0
  24. package/dist/shortcuts/archive/operations/fonds.js +95 -0
  25. package/dist/shortcuts/archive/operations/getPageUrl.js +137 -0
  26. package/dist/shortcuts/archive/operations/registry.js +43 -0
  27. package/dist/shortcuts/archive/operations/search.js +88 -0
  28. package/dist/shortcuts/archive/operations/shared.js +120 -0
  29. package/dist/shortcuts/archive/operations/types.js +23 -0
  30. package/dist/shortcuts/archive/operations/upload.js +182 -0
  31. package/dist/shortcuts/archive/operations.js +13 -0
  32. package/dist/shortcuts/archive/render/search-format.js +276 -0
  33. package/dist/shortcuts/archive/render/search-view.js +125 -0
  34. package/dist/shortcuts/asset/continuation.js +70 -0
  35. package/dist/shortcuts/asset/errors.js +67 -0
  36. package/dist/shortcuts/asset/host.js +438 -0
  37. package/dist/shortcuts/asset/index.js +255 -0
  38. package/dist/shortcuts/asset/manifest.js +471 -0
  39. package/dist/shortcuts/asset/operations/query.js +249 -0
  40. package/dist/shortcuts/asset/operations/registry.js +85 -0
  41. package/dist/shortcuts/asset/operations/shared.js +100 -0
  42. package/dist/shortcuts/asset/operations/type-cache.js +49 -0
  43. package/dist/shortcuts/asset/operations/types.js +1 -0
  44. package/dist/shortcuts/asset/operations/viewlink.js +117 -0
  45. package/dist/shortcuts/asset/operations/write.js +435 -0
  46. package/dist/shortcuts/asset/operations.js +9 -0
  47. package/dist/shortcuts/calendar/continuation.js +70 -0
  48. package/dist/shortcuts/calendar/errors.js +53 -0
  49. package/dist/shortcuts/calendar/host.js +148 -0
  50. package/dist/shortcuts/calendar/index.js +125 -0
  51. package/dist/shortcuts/calendar/manifest.js +26 -0
  52. package/dist/shortcuts/calendar/operations/read.js +259 -0
  53. package/dist/shortcuts/calendar/operations/registry.js +31 -0
  54. package/dist/shortcuts/calendar/operations/shared.js +132 -0
  55. package/dist/shortcuts/calendar/operations/types.js +25 -0
  56. package/dist/shortcuts/calendar/operations/write.js +439 -0
  57. package/dist/shortcuts/calendar/operations.js +8 -0
  58. package/dist/shortcuts/ehr/continuation.js +70 -0
  59. package/dist/shortcuts/ehr/errors.js +53 -0
  60. package/dist/shortcuts/ehr/host.js +213 -0
  61. package/dist/shortcuts/ehr/index.js +205 -0
  62. package/dist/shortcuts/ehr/manifest.js +47 -0
  63. package/dist/shortcuts/ehr/operations/attend-read.js +373 -0
  64. package/dist/shortcuts/ehr/operations/attend-write.js +514 -0
  65. package/dist/shortcuts/ehr/operations/hr-contact.js +363 -0
  66. package/dist/shortcuts/ehr/operations/hr-ds.js +298 -0
  67. package/dist/shortcuts/ehr/operations/hr-report.js +386 -0
  68. package/dist/shortcuts/ehr/operations/recruit-write.js +1629 -0
  69. package/dist/shortcuts/ehr/operations/recruit.js +803 -0
  70. package/dist/shortcuts/ehr/operations/registry.js +43 -0
  71. package/dist/shortcuts/ehr/operations/salary.js +319 -0
  72. package/dist/shortcuts/ehr/operations/shared.js +246 -0
  73. package/dist/shortcuts/ehr/operations/types.js +25 -0
  74. package/dist/shortcuts/ehr/operations.js +25 -0
  75. package/dist/shortcuts/esb/continuation.js +70 -0
  76. package/dist/shortcuts/esb/errors.js +65 -0
  77. package/dist/shortcuts/esb/host.js +187 -0
  78. package/dist/shortcuts/esb/index.js +112 -0
  79. package/dist/shortcuts/esb/manifest.js +91 -0
  80. package/dist/shortcuts/esb/operations/input-format.js +31 -0
  81. package/dist/shortcuts/esb/operations/registry.js +48 -0
  82. package/dist/shortcuts/esb/operations/shared.js +152 -0
  83. package/dist/shortcuts/esb/operations/trigger.js +76 -0
  84. package/dist/shortcuts/esb/operations/types.js +21 -0
  85. package/dist/shortcuts/esb/operations.js +15 -0
  86. package/dist/shortcuts/fna/continuation.js +70 -0
  87. package/dist/shortcuts/fna/errors.js +59 -0
  88. package/dist/shortcuts/fna/host.js +146 -0
  89. package/dist/shortcuts/fna/index.js +111 -0
  90. package/dist/shortcuts/fna/manifest.js +41 -0
  91. package/dist/shortcuts/fna/operations/budget.js +124 -0
  92. package/dist/shortcuts/fna/operations/expense-center.js +148 -0
  93. package/dist/shortcuts/fna/operations/invoice-writeoff.js +212 -0
  94. package/dist/shortcuts/fna/operations/loan.js +195 -0
  95. package/dist/shortcuts/fna/operations/registry.js +35 -0
  96. package/dist/shortcuts/fna/operations/shared.js +210 -0
  97. package/dist/shortcuts/fna/operations/types.js +25 -0
  98. package/dist/shortcuts/fna/operations.js +19 -0
  99. package/dist/shortcuts/hrm/errors.js +38 -0
  100. package/dist/shortcuts/hrm/host.js +156 -0
  101. package/dist/shortcuts/hrm/index.js +111 -0
  102. package/dist/shortcuts/hrm/manifest.js +32 -0
  103. package/dist/shortcuts/hrm/operations/employee.js +338 -0
  104. package/dist/shortcuts/hrm/operations/org.js +110 -0
  105. package/dist/shortcuts/hrm/operations/position.js +176 -0
  106. package/dist/shortcuts/hrm/operations/registry.js +33 -0
  107. package/dist/shortcuts/hrm/operations/shared.js +143 -0
  108. package/dist/shortcuts/hrm/operations/types.js +23 -0
  109. package/dist/shortcuts/hrm/operations.js +19 -0
  110. package/dist/shortcuts/index.js +24 -0
  111. package/dist/shortcuts/invoice/host.js +99 -94
  112. package/dist/shortcuts/invoice/index.js +58 -59
  113. package/dist/shortcuts/invoice/manifest.js +200 -3
  114. package/dist/shortcuts/invoice/operations/browse-field.js +17 -0
  115. package/dist/shortcuts/invoice/operations/issuing.js +198 -0
  116. package/dist/shortcuts/invoice/operations/registry.js +17 -0
  117. package/dist/shortcuts/invoice/operations/reim.js +401 -0
  118. package/dist/shortcuts/invoice/operations/shared.js +247 -0
  119. package/dist/shortcuts/jiuchuanhui/cache.js +441 -0
  120. package/dist/shortcuts/jiuchuanhui/continuation.js +70 -0
  121. package/dist/shortcuts/jiuchuanhui/errors.js +59 -0
  122. package/dist/shortcuts/jiuchuanhui/host.js +159 -0
  123. package/dist/shortcuts/jiuchuanhui/index.js +109 -0
  124. package/dist/shortcuts/jiuchuanhui/manifest.js +469 -0
  125. package/dist/shortcuts/jiuchuanhui/operations/datajson.js +214 -0
  126. package/dist/shortcuts/jiuchuanhui/operations/esb.js +157 -0
  127. package/dist/shortcuts/jiuchuanhui/operations/generic.js +146 -0
  128. package/dist/shortcuts/jiuchuanhui/operations/registry.js +133 -0
  129. package/dist/shortcuts/jiuchuanhui/operations/shared.js +158 -0
  130. package/dist/shortcuts/jiuchuanhui/operations/types.js +1 -0
  131. package/dist/shortcuts/jiuchuanhui/operations.js +8 -0
  132. package/dist/shortcuts/mail/continuation.js +70 -0
  133. package/dist/shortcuts/mail/errors.js +53 -0
  134. package/dist/shortcuts/mail/host.js +182 -0
  135. package/dist/shortcuts/mail/index.js +519 -0
  136. package/dist/shortcuts/mail/manifest.js +38 -0
  137. package/dist/shortcuts/mail/operations/mail-blacklist.js +79 -0
  138. package/dist/shortcuts/mail/operations/mail-contacts.js +195 -0
  139. package/dist/shortcuts/mail/operations/mail-manage.js +335 -0
  140. package/dist/shortcuts/mail/operations/mail-read.js +508 -0
  141. package/dist/shortcuts/mail/operations/mail-send.js +474 -0
  142. package/dist/shortcuts/mail/operations/mail-sign.js +203 -0
  143. package/dist/shortcuts/mail/operations/mail-template.js +170 -0
  144. package/dist/shortcuts/mail/operations/registry.js +41 -0
  145. package/dist/shortcuts/mail/operations/shared.js +64 -0
  146. package/dist/shortcuts/mail/operations/types.js +27 -0
  147. package/dist/shortcuts/mail/operations.js +19 -0
  148. package/dist/shortcuts/meeting/continuation.js +70 -0
  149. package/dist/shortcuts/meeting/errors.js +63 -0
  150. package/dist/shortcuts/meeting/host.js +167 -0
  151. package/dist/shortcuts/meeting/index.js +123 -0
  152. package/dist/shortcuts/meeting/manifest.js +64 -0
  153. package/dist/shortcuts/meeting/operations/catalogs.js +58 -0
  154. package/dist/shortcuts/meeting/operations/change.js +242 -0
  155. package/dist/shortcuts/meeting/operations/conflicts.js +142 -0
  156. package/dist/shortcuts/meeting/operations/create.js +349 -0
  157. package/dist/shortcuts/meeting/operations/env.js +191 -0
  158. package/dist/shortcuts/meeting/operations/lifecycle.js +139 -0
  159. package/dist/shortcuts/meeting/operations/meetings.js +73 -0
  160. package/dist/shortcuts/meeting/operations/receipts.js +195 -0
  161. package/dist/shortcuts/meeting/operations/registry.js +47 -0
  162. package/dist/shortcuts/meeting/operations/rooms.js +132 -0
  163. package/dist/shortcuts/meeting/operations/shared.js +112 -0
  164. package/dist/shortcuts/meeting/operations/signs.js +41 -0
  165. package/dist/shortcuts/meeting/operations/types.js +25 -0
  166. package/dist/shortcuts/meeting/operations.js +19 -0
  167. package/dist/shortcuts/plan/continuation.js +70 -0
  168. package/dist/shortcuts/plan/errors.js +70 -0
  169. package/dist/shortcuts/plan/host.js +180 -0
  170. package/dist/shortcuts/plan/index.js +150 -0
  171. package/dist/shortcuts/plan/manifest.js +53 -0
  172. package/dist/shortcuts/plan/operations/link.js +256 -0
  173. package/dist/shortcuts/plan/operations/read.js +259 -0
  174. package/dist/shortcuts/plan/operations/registry.js +33 -0
  175. package/dist/shortcuts/plan/operations/shared.js +246 -0
  176. package/dist/shortcuts/plan/operations/types.js +49 -0
  177. package/dist/shortcuts/plan/operations/version.js +49 -0
  178. package/dist/shortcuts/plan/operations/write.js +710 -0
  179. package/dist/shortcuts/plan/operations.js +8 -0
  180. package/dist/shortcuts/yimiaoban/continuation.js +70 -0
  181. package/dist/shortcuts/yimiaoban/errors.js +61 -0
  182. package/dist/shortcuts/yimiaoban/host.js +469 -0
  183. package/dist/shortcuts/yimiaoban/index.js +271 -0
  184. package/dist/shortcuts/yimiaoban/manifest.js +28 -0
  185. package/dist/shortcuts/yimiaoban/operations/file-user.js +288 -0
  186. package/dist/shortcuts/yimiaoban/operations/group-read.js +477 -0
  187. package/dist/shortcuts/yimiaoban/operations/group-write.js +591 -0
  188. package/dist/shortcuts/yimiaoban/operations/msg-parse.js +429 -0
  189. package/dist/shortcuts/yimiaoban/operations/msg-sync.js +519 -0
  190. package/dist/shortcuts/yimiaoban/operations/msg-write.js +593 -0
  191. package/dist/shortcuts/yimiaoban/operations/person.js +102 -0
  192. package/dist/shortcuts/yimiaoban/operations/registry.js +38 -0
  193. package/dist/shortcuts/yimiaoban/operations/session.js +437 -0
  194. package/dist/shortcuts/yimiaoban/operations/shared.js +236 -0
  195. package/dist/shortcuts/yimiaoban/operations/types.js +27 -0
  196. package/dist/shortcuts/yimiaoban/operations/write-util.js +78 -0
  197. package/dist/shortcuts/yimiaoban/operations.js +8 -0
  198. package/docs/SKILL.md +11 -7
  199. package/docs/_catalog.md +28 -5
  200. package/docs/agent-invoice.md +19 -9
  201. package/docs/agent-skill-install.md +141 -22
  202. package/docs/calendar.md +87 -0
  203. package/docs/e10-auth.md +28 -9
  204. package/docs/ehr.md +186 -0
  205. package/docs/esb.md +64 -0
  206. package/docs/fna.md +72 -0
  207. package/docs/hrm.md +89 -0
  208. package/docs/invoice.md +61 -20
  209. package/docs/jiuchuanhui.md +131 -0
  210. package/docs/meeting.md +48 -0
  211. package/docs/operation-manual.md +443 -0
  212. package/docs/plan.md +82 -0
  213. package/docs/wenshuding.md +129 -0
  214. package/docs/yimiaoban.md +86 -0
  215. package/docs/ziguanjia.md +89 -0
  216. package/package.json +4 -4
  217. package/scripts/package-skill.mjs +127 -34
  218. package/scripts/postbuild.mjs +13 -0
  219. package/skill-template/business-info.json +16 -2
  220. package/skill-template/domains/calendar.md +15 -0
  221. package/skill-template/domains/esb.md +13 -0
  222. package/skill-template/domains/hrm.md +16 -0
  223. package/skill-template/domains/jiuchuanhui.md +23 -0
  224. package/skill-template/domains/jucailin.md +22 -0
  225. package/skill-template/domains/mail.md +21 -0
  226. package/skill-template/domains/meeting.md +3 -0
  227. package/skill-template/domains/plan.md +17 -0
  228. package/skill-template/domains/qiyecheng.md +17 -0
  229. package/skill-template/domains/shared.md +5 -3
  230. package/skill-template/domains/skill-maker.md +10 -0
  231. package/skill-template/domains/wenshuding.md +22 -0
  232. package/skill-template/domains/{invoice.md → yepiaotong.md} +4 -0
  233. package/skill-template/domains/yimiaoban.md +21 -0
  234. package/skill-template/domains/ziguanjia.md +21 -0
  235. package/skill-template/master-skill-template.md +12 -6
  236. package/skill-template/skill-template.md +26 -10
  237. package/skills/weaver-e10-calendar/SKILL.md +102 -0
  238. package/skills/weaver-e10-calendar/product.json +8 -0
  239. package/skills/weaver-e10-calendar/references/calendar-app-check.md +65 -0
  240. package/skills/weaver-e10-calendar/references/calendar-dict.md +55 -0
  241. package/skills/weaver-e10-calendar/references/calendar-query.md +70 -0
  242. package/skills/weaver-e10-calendar/references/calendar-write.md +97 -0
  243. package/skills/weaver-e10-calendar/references/source-manifest.json +54 -0
  244. package/skills/weaver-e10-esb/SKILL.md +103 -0
  245. package/skills/weaver-e10-esb/product.json +8 -0
  246. package/skills/weaver-e10-esb/references/input-format.md +52 -0
  247. package/skills/weaver-e10-esb/references/source-manifest.json +242 -0
  248. package/skills/weaver-e10-esb/references/trigger.md +99 -0
  249. package/skills/weaver-e10-hrm/SKILL.md +88 -0
  250. package/skills/weaver-e10-hrm/product.json +8 -0
  251. package/skills/weaver-e10-hrm/references/employee.md +109 -0
  252. package/skills/weaver-e10-hrm/references/org.md +95 -0
  253. package/skills/weaver-e10-hrm/references/position.md +95 -0
  254. package/skills/weaver-e10-hrm/references/source-manifest.json +121 -0
  255. package/skills/weaver-e10-jiuchuanhui/SKILL.md +175 -0
  256. package/skills/weaver-e10-jiuchuanhui/product.json +8 -0
  257. package/skills/weaver-e10-jiuchuanhui/references/cache.md +110 -0
  258. package/skills/weaver-e10-jiuchuanhui/references/clue.md +61 -0
  259. package/skills/weaver-e10-jiuchuanhui/references/contact-plan.md +56 -0
  260. package/skills/weaver-e10-jiuchuanhui/references/contact-records.md +48 -0
  261. package/skills/weaver-e10-jiuchuanhui/references/contact.md +56 -0
  262. package/skills/weaver-e10-jiuchuanhui/references/customer.md +69 -0
  263. package/skills/weaver-e10-jiuchuanhui/references/disabled-capabilities.md +24 -0
  264. package/skills/weaver-e10-jiuchuanhui/references/discovery-config.md +60 -0
  265. package/skills/weaver-e10-jiuchuanhui/references/general-helpers.md +59 -0
  266. package/skills/weaver-e10-jiuchuanhui/references/jiuchuanhui-entry.md +60 -0
  267. package/skills/weaver-e10-jiuchuanhui/references/sale.md +72 -0
  268. package/skills/weaver-e10-jiuchuanhui/references/source-manifest.json +2632 -0
  269. package/skills/weaver-e10-jucailin/SKILL.md +102 -0
  270. package/skills/weaver-e10-jucailin/product.json +8 -0
  271. package/skills/weaver-e10-jucailin/references/attend-read.md +73 -0
  272. package/skills/weaver-e10-jucailin/references/attend-write.md +82 -0
  273. package/skills/weaver-e10-jucailin/references/hr-contact.md +92 -0
  274. package/skills/weaver-e10-jucailin/references/hr-datasource.md +104 -0
  275. package/skills/weaver-e10-jucailin/references/hr-report.md +76 -0
  276. package/skills/weaver-e10-jucailin/references/recruit-read.md +76 -0
  277. package/skills/weaver-e10-jucailin/references/recruit-write.md +70 -0
  278. package/skills/weaver-e10-jucailin/references/safety-boundaries.md +35 -0
  279. package/skills/weaver-e10-jucailin/references/salary.md +110 -0
  280. package/skills/weaver-e10-jucailin/references/source-manifest.json +152 -0
  281. package/skills/weaver-e10-mail/SKILL.md +152 -0
  282. package/skills/weaver-e10-mail/product.json +8 -0
  283. package/skills/weaver-e10-mail/references/mail-agent-entry.md +47 -0
  284. package/skills/weaver-e10-mail/references/mail-attachment.md +30 -0
  285. package/skills/weaver-e10-mail/references/mail-blacklist.md +27 -0
  286. package/skills/weaver-e10-mail/references/mail-contacts.md +33 -0
  287. package/skills/weaver-e10-mail/references/mail-manage.md +44 -0
  288. package/skills/weaver-e10-mail/references/mail-read.md +76 -0
  289. package/skills/weaver-e10-mail/references/mail-send.md +43 -0
  290. package/skills/weaver-e10-mail/references/mail-sign.md +33 -0
  291. package/skills/weaver-e10-mail/references/mail-template.md +31 -0
  292. package/skills/weaver-e10-mail/references/safety-boundaries.md +32 -0
  293. package/skills/weaver-e10-meeting/SKILL.md +106 -0
  294. package/skills/weaver-e10-meeting/product.json +8 -0
  295. package/skills/weaver-e10-meeting/references/meeting-change.md +67 -0
  296. package/skills/weaver-e10-meeting/references/meeting-create.md +52 -0
  297. package/skills/weaver-e10-meeting/references/meeting-lifecycle.md +57 -0
  298. package/skills/weaver-e10-meeting/references/meeting-queries.md +61 -0
  299. package/skills/weaver-e10-meeting/references/meeting-receipts-signs.md +48 -0
  300. package/skills/weaver-e10-meeting/references/meeting-update.md +7 -0
  301. package/skills/weaver-e10-meeting/references/source-manifest.json +50 -0
  302. package/skills/weaver-e10-plan/SKILL.md +140 -0
  303. package/skills/weaver-e10-plan/product.json +8 -0
  304. package/skills/weaver-e10-plan/references/plan-collect-and-compose.md +123 -0
  305. package/skills/weaver-e10-plan/references/plan-overview-and-routing.md +138 -0
  306. package/skills/weaver-e10-plan/references/plan-report-query.md +154 -0
  307. package/skills/weaver-e10-plan/references/plan-report-remind.md +104 -0
  308. package/skills/weaver-e10-plan/references/plan-report-write.md +162 -0
  309. package/skills/weaver-e10-plan/references/source-manifest.json +858 -0
  310. package/skills/weaver-e10-qiyecheng/SKILL.md +119 -0
  311. package/skills/weaver-e10-qiyecheng/product.json +8 -0
  312. package/skills/weaver-e10-qiyecheng/references/budget.md +65 -0
  313. package/skills/weaver-e10-qiyecheng/references/catalog.md +56 -0
  314. package/skills/weaver-e10-qiyecheng/references/expense-center.md +51 -0
  315. package/skills/weaver-e10-qiyecheng/references/invoice-writeoff.md +57 -0
  316. package/skills/weaver-e10-qiyecheng/references/loan-management.md +59 -0
  317. package/skills/weaver-e10-qiyecheng/references/source-manifest.json +698 -0
  318. package/skills/weaver-e10-shared/SKILL.md +90 -0
  319. package/skills/weaver-e10-shared/references/e10-auth-and-session.md +127 -0
  320. package/skills/{weaver-work-cli-shared → weaver-e10-shared}/references/json-output-contract.md +34 -0
  321. package/skills/weaver-e10-shared/references/weaver-e10-installation.md +110 -0
  322. package/skills/weaver-e10-skill-maker/SKILL.md +78 -0
  323. package/skills/weaver-e10-skill-maker/product.json +8 -0
  324. package/skills/weaver-e10-skill-maker/references/business-skill-generation.md +124 -0
  325. package/skills/weaver-e10-skill-maker/references/detector-validation.md +101 -0
  326. package/skills/weaver-e10-skill-maker/references/module-cli-generation.md +230 -0
  327. package/skills/weaver-e10-skill-maker/references/post-generation-install.md +105 -0
  328. package/skills/weaver-e10-skill-maker/references/source-update-detection.md +261 -0
  329. package/skills/weaver-e10-skill-maker/references/weaver-skill-style.md +141 -0
  330. package/skills/weaver-e10-wenshuding/SKILL.md +158 -0
  331. package/skills/weaver-e10-wenshuding/product.json +8 -0
  332. package/skills/weaver-e10-wenshuding/references/archive-agent-entry.md +63 -0
  333. package/skills/weaver-e10-wenshuding/references/archive-borrow-car.md +52 -0
  334. package/skills/weaver-e10-wenshuding/references/archive-borrow-list.md +52 -0
  335. package/skills/weaver-e10-wenshuding/references/archive-disabled-capabilities.md +22 -0
  336. package/skills/weaver-e10-wenshuding/references/archive-download.md +48 -0
  337. package/skills/weaver-e10-wenshuding/references/archive-flow.md +46 -0
  338. package/skills/weaver-e10-wenshuding/references/archive-fonds.md +34 -0
  339. package/skills/weaver-e10-wenshuding/references/archive-info.md +33 -0
  340. package/skills/weaver-e10-wenshuding/references/archive-search.md +52 -0
  341. package/skills/weaver-e10-wenshuding/references/archive-upload.md +41 -0
  342. package/skills/weaver-e10-wenshuding/references/source-manifest.json +517 -0
  343. package/skills/weaver-e10-yepiaotong/SKILL.md +184 -0
  344. package/skills/{weaver-work-cli-invoice → weaver-e10-yepiaotong}/references/invoice-add.md +1 -1
  345. package/skills/{weaver-work-cli-invoice → weaver-e10-yepiaotong}/references/invoice-agent-entry.md +16 -9
  346. package/skills/weaver-e10-yepiaotong/references/invoice-browse-field-data.md +204 -0
  347. package/skills/{weaver-work-cli-invoice → weaver-e10-yepiaotong}/references/invoice-delete.md +1 -1
  348. package/skills/{weaver-work-cli-invoice → weaver-e10-yepiaotong}/references/invoice-detail.md +13 -5
  349. package/skills/weaver-e10-yepiaotong/references/invoice-disabled-capabilities.md +28 -0
  350. package/skills/{weaver-work-cli-invoice → weaver-e10-yepiaotong}/references/invoice-download.md +9 -2
  351. package/skills/{weaver-work-cli-invoice → weaver-e10-yepiaotong}/references/invoice-enterprise-list.md +12 -4
  352. package/skills/{weaver-work-cli-invoice → weaver-e10-yepiaotong}/references/invoice-file-upload.md +9 -2
  353. package/skills/{weaver-work-cli-invoice → weaver-e10-yepiaotong}/references/invoice-import.md +16 -7
  354. package/skills/weaver-e10-yepiaotong/references/invoice-issuing-examples.md +120 -0
  355. package/skills/weaver-e10-yepiaotong/references/invoice-issuing-field-rules.md +161 -0
  356. package/skills/weaver-e10-yepiaotong/references/invoice-issuing.md +99 -0
  357. package/skills/{weaver-work-cli-invoice → weaver-e10-yepiaotong}/references/invoice-ocr-preview.md +12 -4
  358. package/skills/{weaver-work-cli-invoice → weaver-e10-yepiaotong}/references/invoice-personal-list.md +12 -4
  359. package/skills/weaver-e10-yepiaotong/references/invoice-red.md +261 -0
  360. package/skills/weaver-e10-yepiaotong/references/invoice-reim.md +97 -0
  361. package/skills/{weaver-work-cli-invoice → weaver-e10-yepiaotong}/references/invoice-update.md +1 -1
  362. package/skills/{weaver-work-cli-invoice → weaver-e10-yepiaotong}/references/invoice-validation-preview.md +9 -2
  363. package/skills/weaver-e10-yepiaotong/references/reim-api-reference.md +1340 -0
  364. package/skills/weaver-e10-yepiaotong/references/reim-examples.md +845 -0
  365. package/skills/weaver-e10-yepiaotong/references/reim-expense-subject-rules.md +94 -0
  366. package/skills/weaver-e10-yepiaotong/references/reim-form-fill-rules.md +449 -0
  367. package/skills/weaver-e10-yepiaotong/references/reim-matching-rules.md +266 -0
  368. package/skills/weaver-e10-yepiaotong/references/reim-workflow.md +494 -0
  369. package/skills/weaver-e10-yepiaotong/references/source-manifest.json +1103 -0
  370. package/skills/weaver-e10-yimiaoban/SKILL.md +104 -0
  371. package/skills/weaver-e10-yimiaoban/product.json +8 -0
  372. package/skills/weaver-e10-yimiaoban/references/ding-write.md +68 -0
  373. package/skills/weaver-e10-yimiaoban/references/error-codes.md +85 -0
  374. package/skills/weaver-e10-yimiaoban/references/field-resolution.md +46 -0
  375. package/skills/weaver-e10-yimiaoban/references/file-user-i18n.md +54 -0
  376. package/skills/weaver-e10-yimiaoban/references/group-read.md +55 -0
  377. package/skills/weaver-e10-yimiaoban/references/group-write.md +72 -0
  378. package/skills/weaver-e10-yimiaoban/references/msg-read.md +59 -0
  379. package/skills/weaver-e10-yimiaoban/references/msg-write.md +64 -0
  380. package/skills/weaver-e10-yimiaoban/references/person.md +44 -0
  381. package/skills/weaver-e10-yimiaoban/references/safety-boundaries.md +61 -0
  382. package/skills/weaver-e10-yimiaoban/references/session-sysmsg.md +47 -0
  383. package/skills/weaver-e10-yimiaoban/references/source-manifest.json +485 -0
  384. package/skills/weaver-e10-ziguanjia/SKILL.md +163 -0
  385. package/skills/weaver-e10-ziguanjia/product.json +8 -0
  386. package/skills/weaver-e10-ziguanjia/references/source-manifest.json +147 -0
  387. package/skills/weaver-e10-ziguanjia/references/ziguanjia-agent-entry.md +65 -0
  388. package/skills/weaver-e10-ziguanjia/references/ziguanjia-create.md +45 -0
  389. package/skills/weaver-e10-ziguanjia/references/ziguanjia-depre.md +48 -0
  390. package/skills/weaver-e10-ziguanjia/references/ziguanjia-disabled-capabilities.md +22 -0
  391. package/skills/weaver-e10-ziguanjia/references/ziguanjia-purch.md +57 -0
  392. package/skills/weaver-e10-ziguanjia/references/ziguanjia-query.md +62 -0
  393. package/skills/weaver-e10-ziguanjia/references/ziguanjia-repair.md +83 -0
  394. package/skills/weaver-e10-ziguanjia/references/ziguanjia-resolve.md +49 -0
  395. package/skills/weaver-e10-ziguanjia/references/ziguanjia-return.md +70 -0
  396. package/skills/weaver-e10-ziguanjia/references/ziguanjia-update.md +45 -0
  397. package/skills/weaver-e10-ziguanjia/references/ziguanjia-use.md +60 -0
  398. package/skills/weaver-e10-ziguanjia/references/ziguanjia-viewlink.md +81 -0
  399. package/skills/weaver-work-cli-invoice/SKILL.md +0 -122
  400. package/skills/weaver-work-cli-invoice/references/invoice-disabled-capabilities.md +0 -26
  401. package/skills/weaver-work-cli-shared/SKILL.md +0 -63
  402. package/skills/weaver-work-cli-shared/references/e10-auth-and-session.md +0 -90
  403. package/skills/weaver-work-cli-shared/references/weaver-work-cli-installation.md +0 -73
  404. /package/skills/{weaver-work-cli-shared → weaver-e10-shared}/references/high-risk-write.md +0 -0
  405. /package/skills/{weaver-work-cli-invoice → weaver-e10-yepiaotong}/product.json +0 -0
@@ -0,0 +1,438 @@
1
+ import { requireE10Session } from '../../internal/e10/context.js';
2
+ import { getActiveProfile } from '../../internal/e10/auth/session.js';
3
+ import { createE10RequestRuntime } from '../../internal/e10/request-runtime.js';
4
+ import { ziguanjiaAuthError, ziguanjiaBusinessError, ziguanjiaNetworkError, ziguanjiaValidationError, } from './errors.js';
5
+ const EBUILDER_PREFIX = process.env.WEAVER_EBUILDER_PREFIX || '/api/ebuilder';
6
+ const ESB_TRIGGER_PATH = '/api/esb/server/event/triggerActionFlow';
7
+ /** 卡片链接 /sp/ebdfpage/card/0/{表单ID}/{数据ID} 用到的资产域应用标签(固定值)。 */
8
+ const ASSET_APP_TAG = 'weaver-asset-eb';
9
+ const GET_APP_IDS_PATH = '/api/bs/ebuilder/app/tags/getAppIds';
10
+ const GET_OBJS_BY_TAG_PATH = '/api/ebuilder/form/obj/getObjsByTag';
11
+ /** 表单字段定义接口(OpenAPI):传入表单 objId,返回主表/明细表字段列表(name / config.dataKey / 显示文本)。 */
12
+ const FORM_FIELDS_PATH = '/api/ebuilder/common/ds/fields';
13
+ /** 分部(subcompany)浏览接口:按名称解析「当前登录人所属分部」ID(折旧分组计提等场景需要)。 */
14
+ const SEARCH_SUBCOMPANY_PATH = '/api/hrm/common/browser/data/subcompany';
15
+ const FORBIDDEN_INPUT_KEYS = new Set([
16
+ 'access_token',
17
+ 'app_key',
18
+ 'app_secret',
19
+ 'cookie',
20
+ 'eteamsid',
21
+ 'token',
22
+ 'sedit',
23
+ ]);
24
+ /**
25
+ * 从表单字段定义中挑出「人员」字段(领用人 / 使用人)。
26
+ * 优先按候选 dataKey 精确命中 `name` 或 `config.dataKey`(来自运行时字段定义,非臆造);
27
+ * 兜底按显示文本含「领用/使用」且含「人」匹配。都不命中返回 undefined,由调用方报错而非猜字段。
28
+ */
29
+ export function pickPersonField(fields, candidates) {
30
+ const lower = new Set(candidates.map((c) => c.toLowerCase()));
31
+ const byKey = fields.find((f) => (f.name && lower.has(f.name.toLowerCase())) || (f.dataKey && lower.has(f.dataKey.toLowerCase())));
32
+ if (byKey)
33
+ return byKey;
34
+ const byText = fields.find((f) => {
35
+ const t = f.text ?? '';
36
+ return /领用|使用/.test(t) && /人|人员/.test(t);
37
+ });
38
+ return byText;
39
+ }
40
+ function ebuilderPath(endpoint, interfacePk) {
41
+ return `${EBUILDER_PREFIX}/form/formdata/v2/${endpoint}/${interfacePk}`;
42
+ }
43
+ /**
44
+ * ebuilder 自定义接口的请求体必须整体包在 datajson 内,且 header.operator 位于 datajson 内部(不是根层级)。
45
+ * 抽成纯函数以便单测直接断言真实请求形状,避免测试里重复实现一遍包装逻辑。
46
+ */
47
+ export function wrapEbuilderBody(body, operator) {
48
+ return {
49
+ datajson: {
50
+ ...body,
51
+ header: { operator, ...(body.header && typeof body.header === 'object' ? body.header : {}) },
52
+ },
53
+ };
54
+ }
55
+ function assertPath(requestPath) {
56
+ if (typeof requestPath !== 'string' || !requestPath.startsWith('/') || requestPath.startsWith('//')) {
57
+ throw ziguanjiaValidationError('path_invalid', '请求路径必须是相对绝对路径');
58
+ }
59
+ if (/^https?:/i.test(requestPath) || /[\r\n]/.test(requestPath) || requestPath.includes('/../')) {
60
+ throw ziguanjiaValidationError('path_invalid', '请求路径不允许跨域或路径逃逸');
61
+ }
62
+ if (!requestPath.startsWith('/api/')) {
63
+ throw ziguanjiaValidationError('path_not_allowed', 'E10 API 只能调用 /api/ 路径');
64
+ }
65
+ }
66
+ function responseDatajson(value) {
67
+ if (value && typeof value === 'object' && 'datajson' in value)
68
+ return value.datajson;
69
+ return value;
70
+ }
71
+ function isEbSessionExpired(value) {
72
+ const root = responseDatajson(value);
73
+ const code = root?.ret ?? root?.code ?? root?.status;
74
+ return code !== undefined && (String(code) === '-2' || String(code) === '401' || String(code) === '403');
75
+ }
76
+ function ebMessage(value) {
77
+ const root = responseDatajson(value);
78
+ return typeof root?.message === 'string'
79
+ ? root.message
80
+ : typeof root?.msg === 'string'
81
+ ? root.msg
82
+ : '泛微接口返回业务失败';
83
+ }
84
+ function ebCode(value) {
85
+ const root = responseDatajson(value);
86
+ return root?.ret ?? root?.code ?? root?.status;
87
+ }
88
+ /**
89
+ * E10 各接口的成功码口径不一:
90
+ * - ebuilder 自定义接口:数字 0 / 200;
91
+ * - 部分环境的查询/动作流接口用布尔 `true` 或字符串 `"true"` 表示成功(`"false"` 表示失败)。
92
+ * 因此除 0/200 外,布尔 true 与字符串 "true"(含数字字符串 "0"/"200")也视为成功。
93
+ */
94
+ export function isEbSuccessCode(code) {
95
+ if (code === undefined)
96
+ return true;
97
+ if (code === 0 || code === 200)
98
+ return true;
99
+ if (code === true || code === 'true')
100
+ return true;
101
+ if (typeof code === 'string') {
102
+ const text = code.trim();
103
+ return text === '0' || text === '200';
104
+ }
105
+ return false;
106
+ }
107
+ /**
108
+ * 大整数(应用 ID / 表单 ID / 数据 ID)全程按字符串处理,避免精度丢失导致链接指向错误卡片。
109
+ */
110
+ function normalizeBigId(raw) {
111
+ if (raw === undefined || raw === null)
112
+ return undefined;
113
+ if (typeof raw === 'object')
114
+ return undefined;
115
+ const text = String(raw).trim();
116
+ return text === '' ? undefined : text;
117
+ }
118
+ function tagDataRoot(value) {
119
+ const root = value && typeof value === 'object' && 'datajson' in value ? value.datajson : value;
120
+ return root && typeof root === 'object' ? root : undefined;
121
+ }
122
+ /** getAppIds 返回 data 数组首元素即该资产域应用 ID。 */
123
+ export function pickAppId(value) {
124
+ const data = tagDataRoot(value)?.data;
125
+ if (!Array.isArray(data) || data.length === 0)
126
+ return undefined;
127
+ const first = data[0];
128
+ const raw = first && typeof first === 'object' ? (first.appId ?? first.id) : first;
129
+ return normalizeBigId(raw);
130
+ }
131
+ /** getObjsByTag 返回 data 中 tag 命中的那条记录的 objId。 */
132
+ export function pickObjId(value, formTag) {
133
+ const data = tagDataRoot(value)?.data;
134
+ if (!Array.isArray(data))
135
+ return undefined;
136
+ const match = data.find((item) => item && typeof item === 'object' && String(item.tag ?? '') === formTag);
137
+ if (!match)
138
+ return undefined;
139
+ return normalizeBigId(match.objId ?? match.id);
140
+ }
141
+ export function createZiguanjiaHost(ctx) {
142
+ let e10Session = null;
143
+ let sessionContext = null;
144
+ async function ensureSession() {
145
+ if (!e10Session) {
146
+ e10Session = await requireE10Session(ctx);
147
+ sessionContext = {
148
+ baseUrl: e10Session.getBaseUrl(),
149
+ profile: ctx.getGlobalOptions().profile || getActiveProfile(),
150
+ userId: e10Session.userId,
151
+ subcompany: e10Session.subcompany,
152
+ };
153
+ }
154
+ return e10Session;
155
+ }
156
+ async function getSession() {
157
+ await ensureSession();
158
+ return sessionContext;
159
+ }
160
+ async function runtime() {
161
+ return createE10RequestRuntime(ctx, await ensureSession(), {});
162
+ }
163
+ // 缓存键统一带环境标识(baseUrl),换环境即作废,不跨环境沿用。
164
+ const appIdCache = new Map();
165
+ const formIdCache = new Map();
166
+ const formFieldsCache = new Map();
167
+ const subcompanyIdCache = new Map();
168
+ async function ebuilderGetJson(path, query, operation) {
169
+ assertPath(path);
170
+ const response = await (await runtime()).requestJson({
171
+ module: 'asset',
172
+ operation,
173
+ method: 'GET',
174
+ path,
175
+ query,
176
+ bigIntStrings: true,
177
+ });
178
+ if (response.status === 401 || response.status === 302) {
179
+ throw ziguanjiaAuthError('session_expired', 'E10 登录态已失效,请先运行 weaver-work-cli auth login --base-url <域名> --agent_type <当前智能体名称> 完成登录后再试', { httpStatus: response.status });
180
+ }
181
+ if (response.parseError) {
182
+ throw ziguanjiaNetworkError('protocol', `接口返回不是合法 JSON(HTTP ${response.status})`, { retryable: false });
183
+ }
184
+ if (response.status < 200 || response.status >= 300) {
185
+ throw ziguanjiaBusinessError('http_error', `泛微接口 HTTP ${response.status}`, { code: response.status, details: { message: ebMessage(response.value) } });
186
+ }
187
+ // GET 标签接口的成功标识不统一(可能没有 ret/code/status,也可能用 1 表示成功),
188
+ // 这里不做业务码判定,交由调用方按 data 结构判定,避免把 status=1 误判为失败。
189
+ return response.value;
190
+ }
191
+ async function resolveAppId(appTag, envKey, operation) {
192
+ const cacheKey = `${envKey}|app|${appTag}`;
193
+ const cached = appIdCache.get(cacheKey);
194
+ if (cached)
195
+ return cached;
196
+ const value = await ebuilderGetJson(GET_APP_IDS_PATH, { tag: appTag }, operation);
197
+ const appId = pickAppId(value);
198
+ if (!appId) {
199
+ throw ziguanjiaValidationError('resolve_not_found', `未解析到应用标签 ${appTag} 对应的应用 ID,链接暂不可用`);
200
+ }
201
+ appIdCache.set(cacheKey, appId);
202
+ return appId;
203
+ }
204
+ async function resolveFormId(request) {
205
+ const appTag = request.appTag && request.appTag.trim() !== '' ? request.appTag : ASSET_APP_TAG;
206
+ const { formTag, operation } = request;
207
+ const session = await getSession();
208
+ const cacheKey = `${session.baseUrl}|${appTag}|${formTag}`;
209
+ const cached = formIdCache.get(cacheKey);
210
+ if (cached)
211
+ return cached;
212
+ const appId = await resolveAppId(appTag, session.baseUrl, operation);
213
+ const value = await ebuilderGetJson(GET_OBJS_BY_TAG_PATH, { appId, tag: formTag }, operation);
214
+ const objId = pickObjId(value, formTag);
215
+ if (!objId) {
216
+ throw ziguanjiaValidationError('resolve_not_found', `未解析到表单标识 ${formTag} 对应的表单 ID(objId),链接暂不可用`);
217
+ }
218
+ formIdCache.set(cacheKey, objId);
219
+ return objId;
220
+ }
221
+ async function getFormFields(formTag) {
222
+ const session = await getSession();
223
+ const cacheKey = `${session.baseUrl}|${formTag}`;
224
+ const cached = formFieldsCache.get(cacheKey);
225
+ if (cached)
226
+ return cached;
227
+ const objId = await resolveFormId({ formTag, operation: `getFormFields:${formTag}` });
228
+ const fd = new FormData();
229
+ fd.set('groupId', objId);
230
+ fd.set('sourceId', objId);
231
+ fd.set('sourceType', 'FORM');
232
+ fd.set('detailFieldsGroup', 'true');
233
+ fd.set('enableMerge', 'true');
234
+ fd.set('customParam', '{"terminal":""}');
235
+ fd.set('params', '[]');
236
+ const response = await (await runtime()).requestJson({
237
+ module: 'asset',
238
+ operation: `getFormFields:${formTag}`,
239
+ method: 'POST',
240
+ path: FORM_FIELDS_PATH,
241
+ formData: fd,
242
+ bigIntStrings: false,
243
+ });
244
+ if (response.status === 401 || response.status === 302) {
245
+ throw ziguanjiaAuthError('session_expired', 'E10 登录态已失效,请先运行 weaver-work-cli auth login --base-url <域名> --agent_type <当前智能体名称> 完成登录后再试', { httpStatus: response.status });
246
+ }
247
+ if (response.parseError) {
248
+ throw ziguanjiaNetworkError('protocol', `接口返回不是合法 JSON(HTTP ${response.status})`, { retryable: false });
249
+ }
250
+ if (response.status < 200 || response.status >= 300) {
251
+ throw ziguanjiaBusinessError('http_error', `泛微接口 HTTP ${response.status}`, { code: response.status, details: { message: ebMessage(response.value) } });
252
+ }
253
+ const value = response.value;
254
+ if (!isEbSuccessCode(value?.code ?? value?.status)) {
255
+ throw ziguanjiaBusinessError('form_fields_failed', ebMessage(value), { code: String(value?.code ?? value?.status), details: { result: value } });
256
+ }
257
+ const groups = Array.isArray(value?.data) ? value.data : [];
258
+ const fields = [];
259
+ for (const group of groups) {
260
+ if (!group || typeof group !== 'object')
261
+ continue;
262
+ const groupFields = group.fields;
263
+ if (!Array.isArray(groupFields))
264
+ continue;
265
+ for (const f of groupFields) {
266
+ if (!f || typeof f !== 'object')
267
+ continue;
268
+ fields.push({
269
+ name: typeof f.name === 'string' ? f.name : String(f.name ?? ''),
270
+ dataKey: f.config?.dataKey !== undefined ? String(f.config.dataKey) : undefined,
271
+ text: f.text !== undefined ? String(f.text) : undefined,
272
+ compType: f.compType !== undefined ? String(f.compType) : undefined,
273
+ mainField: f.mainField === true,
274
+ });
275
+ }
276
+ }
277
+ formFieldsCache.set(cacheKey, fields);
278
+ return fields;
279
+ }
280
+ /**
281
+ * 按分部名称精确解析分部 ID(折旧「分组计提」需当前登录人所属分部 ID)。
282
+ * 走 E10 组织浏览接口,name 条件 eq 精确匹配;命中 0 条或重名时明确报错,绝不臆造 ID。
283
+ */
284
+ async function resolveSubcompanyIdByName(name) {
285
+ const trimmed = typeof name === 'string' ? name.trim() : '';
286
+ if (trimmed === '') {
287
+ throw ziguanjiaValidationError('company_unresolved', '无法从登录会话确定当前登录人所属分部名称,请在输入中显式提供 company_ids');
288
+ }
289
+ const session = await getSession();
290
+ const cacheKey = `${session.baseUrl}|subcompany|${trimmed}`;
291
+ const cached = subcompanyIdCache.get(cacheKey);
292
+ if (cached)
293
+ return cached;
294
+ assertPath(SEARCH_SUBCOMPANY_PATH);
295
+ const response = await (await runtime()).requestJson({
296
+ module: 'asset',
297
+ operation: 'resolveSubcompany',
298
+ method: 'POST',
299
+ path: SEARCH_SUBCOMPANY_PATH,
300
+ body: {
301
+ browserMultiple: true,
302
+ authWecahtBook: false,
303
+ wxDepNeedConvertCount: 0,
304
+ wxEmpNeedConvertCount: 0,
305
+ wxTotalNeedConvertCount: 0,
306
+ virtualType: 'ALL',
307
+ cmd: 'list',
308
+ current: 1,
309
+ pageSize: 200,
310
+ formDatas: { name: [{ nameCondition: { id: 'eq', content: '等于', disabled: false }, name: trimmed }] },
311
+ quickSearchDatas: {},
312
+ type: 'and',
313
+ stopDepartment: false,
314
+ },
315
+ bigIntStrings: true,
316
+ });
317
+ if (response.status === 401 || response.status === 302) {
318
+ throw ziguanjiaAuthError('session_expired', 'E10 登录态已失效,请先运行 weaver-work-cli auth login --base-url <域名> --agent_type <当前智能体名称> 完成登录后再试', { httpStatus: response.status });
319
+ }
320
+ if (response.parseError) {
321
+ throw ziguanjiaNetworkError('protocol', `接口返回不是合法 JSON(HTTP ${response.status})`, { retryable: false });
322
+ }
323
+ if (response.status < 200 || response.status >= 300) {
324
+ throw ziguanjiaBusinessError('http_error', `泛微接口 HTTP ${response.status}`, { code: response.status, details: { message: ebMessage(response.value) } });
325
+ }
326
+ const value = response.value;
327
+ const rows = Array.isArray(value?.data?.data) ? value.data.data : [];
328
+ if (rows.length === 0) {
329
+ throw ziguanjiaValidationError('company_unresolved', `未找到分部「${trimmed}」对应的 ID,请在输入中显式提供 company_ids`);
330
+ }
331
+ if (rows.length > 1) {
332
+ throw ziguanjiaValidationError('company_ambiguous', `分部名称「${trimmed}」命中 ${rows.length} 条,无法唯一确定,请在输入中显式提供 company_ids`);
333
+ }
334
+ const id = normalizeBigId(rows[0]?.id ?? rows[0]?.subcompanyId);
335
+ if (!id) {
336
+ throw ziguanjiaValidationError('company_unresolved', `分部「${trimmed}」返回缺少 ID,请在输入中显式提供 company_ids`);
337
+ }
338
+ subcompanyIdCache.set(cacheKey, id);
339
+ return id;
340
+ }
341
+ function handleEbusiness(value) {
342
+ if (isEbSessionExpired(value)) {
343
+ throw ziguanjiaAuthError('session_expired', 'E10 登录态已失效,请先运行 weaver-work-cli auth login --base-url <域名> --agent_type <当前智能体名称> 完成登录后再试', { ret: ebCode(value) });
344
+ }
345
+ const code = ebCode(value);
346
+ if (!isEbSuccessCode(code)) {
347
+ throw ziguanjiaBusinessError('business_error', ebMessage(value), { code: String(code), details: { result: value } });
348
+ }
349
+ return value;
350
+ }
351
+ async function ebuilderRequest(request) {
352
+ const { endpoint, interfacePk, body, operation, query } = request;
353
+ assertPath(ebuilderPath(endpoint, interfacePk));
354
+ const session = await getSession();
355
+ const fullBody = wrapEbuilderBody(body, session.userId);
356
+ const response = await (await runtime()).requestJson({
357
+ module: 'asset',
358
+ operation,
359
+ method: 'POST',
360
+ path: ebuilderPath(endpoint, interfacePk),
361
+ query,
362
+ body: fullBody,
363
+ bigIntStrings: true,
364
+ });
365
+ if (response.status === 401 || response.status === 302) {
366
+ throw ziguanjiaAuthError('session_expired', 'E10 登录态已失效,请先运行 weaver-work-cli auth login --base-url <域名> --agent_type <当前智能体名称> 完成登录后再试', { httpStatus: response.status });
367
+ }
368
+ if (response.parseError) {
369
+ throw ziguanjiaNetworkError('protocol', `接口返回不是合法 JSON(HTTP ${response.status})`, { retryable: false });
370
+ }
371
+ if (response.status < 200 || response.status >= 300) {
372
+ throw ziguanjiaBusinessError('http_error', `泛微接口 HTTP ${response.status}`, { code: response.status, details: { message: ebMessage(response.value) } });
373
+ }
374
+ return handleEbusiness(response.value);
375
+ }
376
+ async function actionFlow(request) {
377
+ const { uniqueIndent, mainTable, operation, moduleSource } = request;
378
+ assertPath(ESB_TRIGGER_PATH);
379
+ const session = await getSession();
380
+ const payload = {
381
+ customParams: { mainTable },
382
+ uniqueIndent,
383
+ employeeId: session.userId,
384
+ };
385
+ if (moduleSource)
386
+ payload.moduleSource = moduleSource;
387
+ const response = await (await runtime()).requestJson({
388
+ module: 'asset',
389
+ operation,
390
+ method: 'POST',
391
+ path: ESB_TRIGGER_PATH,
392
+ body: payload,
393
+ bigIntStrings: true,
394
+ });
395
+ if (response.status === 401 || response.status === 302) {
396
+ throw ziguanjiaAuthError('session_expired', 'E10 登录态已失效,请先运行 weaver-work-cli auth login --base-url <域名> --agent_type <当前智能体名称> 完成登录后再试', { httpStatus: response.status });
397
+ }
398
+ if (response.parseError) {
399
+ throw ziguanjiaNetworkError('protocol', `接口返回不是合法 JSON(HTTP ${response.status})`, { retryable: false });
400
+ }
401
+ if (response.status < 200 || response.status >= 300) {
402
+ throw ziguanjiaBusinessError('http_error', `ESB 接口 HTTP ${response.status}`, { code: response.status, details: { message: ebMessage(response.value) } });
403
+ }
404
+ const value = response.value;
405
+ const resultCode = value?.resultCode;
406
+ if (resultCode === undefined) {
407
+ throw ziguanjiaBusinessError('actionflow_no_code', '动作流返回缺少 resultCode', { details: { result: value } });
408
+ }
409
+ if (resultCode !== 200) {
410
+ throw ziguanjiaBusinessError('actionflow_failed', `动作流执行未成功(resultCode=${resultCode}):${value?.resultMsg || ''}`, { code: resultCode, details: { result: value }, retryable: resultCode === 507 || resultCode === 508 || resultCode === 511 });
411
+ }
412
+ return value;
413
+ }
414
+ return { ebuilderRequest, actionFlow, getSession, resolveFormId, getFormFields, resolveSubcompanyIdByName };
415
+ }
416
+ /**
417
+ * 拼卡片式查看链接 `/sp/ebdfpage/card/0/{表单ID}/{数据ID}`(去域名路径 + 当前环境地址)。
418
+ * 表单 ID(objId)与数据 ID 均为长整型,由调用方以字符串传入,避免精度丢失。
419
+ */
420
+ export function buildCardLink(baseUrl, objId, dataId) {
421
+ if (typeof baseUrl !== 'string' || baseUrl.trim() === '' || !objId || !dataId)
422
+ return null;
423
+ return `${baseUrl.replace(/\/+$/u, '')}/sp/ebdfpage/card/0/${objId}/${dataId}`;
424
+ }
425
+ export function assertNoForbiddenKeys(value, location = 'input') {
426
+ if (!value || typeof value !== 'object')
427
+ return;
428
+ if (Array.isArray(value)) {
429
+ value.forEach((item, index) => assertNoForbiddenKeys(item, `${location}[${index}]`));
430
+ return;
431
+ }
432
+ for (const [key, child] of Object.entries(value)) {
433
+ if (FORBIDDEN_INPUT_KEYS.has(key) || FORBIDDEN_INPUT_KEYS.has(key.toLowerCase())) {
434
+ throw ziguanjiaValidationError('field_forbidden', `禁止业务输入字段:${location}.${key}`);
435
+ }
436
+ assertNoForbiddenKeys(child, `${location}.${key}`);
437
+ }
438
+ }