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,148 @@
1
+ import { requireE10Session } from '../../internal/e10/context.js';
2
+ import { getActiveProfile } from '../../internal/e10/auth/session.js';
3
+ import { E10ApiError, createE10RequestRuntime } from '../../internal/e10/request-runtime.js';
4
+ import { calendarAuthError, calendarNetworkError, CalendarCliError, calendarValidationError } from './errors.js';
5
+ function inferProfile(ctx) {
6
+ const options = ctx.getGlobalOptions();
7
+ return options.profile || getActiveProfile();
8
+ }
9
+ /**
10
+ * 判断业务是否成功。日程模块三类响应契约:
11
+ * - datajson 结构(创建/查询详情/总数/更新/删除/类型/紧急程度):`datajson.status === true`
12
+ * - ESB 流程触发结构(列表查询):`resultCode === 200`
13
+ * - 版本检测 GET 接口(getAppIds / querySpAppVersionInfo / getObjsByTag):无失败标志且有 `data` 字段
14
+ */
15
+ export function isBusinessSuccess(value) {
16
+ if (!value || typeof value !== 'object')
17
+ return false;
18
+ const datajson = value.datajson;
19
+ if (datajson && typeof datajson === 'object') {
20
+ return datajson.status === true;
21
+ }
22
+ if (value.resultCode !== undefined && value.resultCode !== null) {
23
+ return Number(value.resultCode) === 200;
24
+ }
25
+ // 普通 GET 接口:无明确失败标志时,有 data 字段即视为成功(空数组/空对象也返回,由调用方解读)
26
+ if ('data' in value)
27
+ return true;
28
+ return false;
29
+ }
30
+ export function businessMessage(value) {
31
+ if (!value || typeof value !== 'object')
32
+ return '泛微接口返回业务失败';
33
+ const candidates = [value.resultMsg, value.msg, value.message, value.datajson?.message];
34
+ for (const item of candidates) {
35
+ if (typeof item === 'string' && item.trim())
36
+ return item;
37
+ }
38
+ return '泛微接口返回业务失败';
39
+ }
40
+ function assertPath(requestPath) {
41
+ if (typeof requestPath !== 'string' || !requestPath.startsWith('/') || requestPath.startsWith('//')) {
42
+ throw calendarValidationError('path_invalid', '请求路径必须是相对绝对路径');
43
+ }
44
+ if (/^https?:/i.test(requestPath) || /[\r\n]/.test(requestPath) || requestPath.includes('/../')) {
45
+ throw calendarValidationError('path_invalid', '请求路径不允许跨域或路径逃逸');
46
+ }
47
+ if (!requestPath.startsWith('/api/')) {
48
+ throw calendarValidationError('path_not_allowed', '日程模块只能调用 /api/ 路径');
49
+ }
50
+ }
51
+ function omitEmptyQueryValues(query) {
52
+ if (!query)
53
+ return undefined;
54
+ return Object.fromEntries(Object.entries(query).filter(([, value]) => value !== '' && value !== undefined && value !== null));
55
+ }
56
+ function mapRuntimeNetworkError(error) {
57
+ if (error instanceof E10ApiError && error.type === 'network') {
58
+ throw calendarNetworkError(error.subtype, error.message, {
59
+ retryable: error.retryable,
60
+ details: error.details,
61
+ });
62
+ }
63
+ throw error;
64
+ }
65
+ export function createCalendarHost(ctx, dependencies = {}) {
66
+ let e10Session = null;
67
+ let sessionContext = null;
68
+ const requireSession = dependencies.requireSession || requireE10Session;
69
+ async function ensureSession() {
70
+ if (!e10Session) {
71
+ e10Session = await requireSession(ctx);
72
+ sessionContext = {
73
+ baseUrl: e10Session.getBaseUrl(),
74
+ profile: inferProfile(ctx),
75
+ userId: e10Session.userId,
76
+ tenantKey: e10Session.tenantKey,
77
+ eteamsId: e10Session.eteamsId,
78
+ };
79
+ }
80
+ return e10Session;
81
+ }
82
+ async function getSession() {
83
+ await ensureSession();
84
+ return sessionContext;
85
+ }
86
+ async function runtime() {
87
+ return createE10RequestRuntime(ctx, await ensureSession(), {
88
+ interceptors: dependencies.interceptors,
89
+ fetch: dependencies.fetch,
90
+ });
91
+ }
92
+ async function request(request) {
93
+ const { method, path, query, body, operation, timeoutMs = 30_000 } = request;
94
+ assertPath(path);
95
+ const resolvedMethod = method || 'POST';
96
+ let response;
97
+ try {
98
+ response = await (await runtime()).requestJson({
99
+ module: 'calendar',
100
+ operation,
101
+ method: resolvedMethod,
102
+ path,
103
+ query: omitEmptyQueryValues(query),
104
+ body,
105
+ headers: { 'X-Requested-With': 'XMLHttpRequest' },
106
+ timeoutMs,
107
+ });
108
+ }
109
+ catch (error) {
110
+ mapRuntimeNetworkError(error);
111
+ }
112
+ if (response.status === 401 || response.status === 302) {
113
+ throw calendarAuthError('session_expired', 'E10 登录态已失效,请先向用户确认 E10 登录域名,再运行 weaver-work-cli auth login --base-url <域名> 完成登录', { httpStatus: response.status });
114
+ }
115
+ if (response.parseError) {
116
+ if (response.status < 200 || response.status >= 300) {
117
+ throw new CalendarCliError('api', 'http_error', `泛微接口 HTTP ${response.status}`, {
118
+ code: response.status,
119
+ details: { status: response.status },
120
+ exitCode: 1,
121
+ });
122
+ }
123
+ throw calendarNetworkError('protocol', `接口返回不是合法 JSON(HTTP ${response.status})`, { retryable: false });
124
+ }
125
+ if (response.status < 200 || response.status >= 300) {
126
+ throw new CalendarCliError('api', 'http_error', `泛微接口 HTTP ${response.status}`, {
127
+ code: response.status,
128
+ details: { status: response.status, message: businessMessage(response.value) },
129
+ exitCode: 1,
130
+ });
131
+ }
132
+ // HTTP 404:源资料判定为「日程应用未安装」,需给出明确提示而非当作普通失败。
133
+ if (response.status === 404) {
134
+ throw new CalendarCliError('api', 'app_not_installed', '接口返回 404,当前环境可能未安装「日程」应用,请先安装/部署应用后再试', {
135
+ code: response.status,
136
+ exitCode: 1,
137
+ });
138
+ }
139
+ if (!isBusinessSuccess(response.value)) {
140
+ throw new CalendarCliError('api', 'business_error', businessMessage(response.value), {
141
+ details: { message: businessMessage(response.value) },
142
+ exitCode: 1,
143
+ });
144
+ }
145
+ return response.value;
146
+ }
147
+ return { request, getSession };
148
+ }
@@ -0,0 +1,125 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { ExitCode, isCliError, toErrorEnvelope } from '../../core/errors.js';
3
+ import { createCalendarContinuationSigner } from './continuation.js';
4
+ import { createCalendarHost } from './host.js';
5
+ import { calendarManifest } from './manifest.js';
6
+ import { executeCalendarOperation } from './operations.js';
7
+ import { calendarValidationError } from './errors.js';
8
+ function asOptions(value) {
9
+ return value && typeof value === 'object' && !Array.isArray(value) ? value : {};
10
+ }
11
+ async function readStdin() {
12
+ const chunks = [];
13
+ for await (const chunk of process.stdin) {
14
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
15
+ }
16
+ return Buffer.concat(chunks).toString('utf8');
17
+ }
18
+ function stripBom(value) {
19
+ return value.replace(/^\uFEFF+/, '');
20
+ }
21
+ export async function inputFrom(options, extra = {}) {
22
+ const opts = asOptions(options);
23
+ let input = {};
24
+ if (opts.input && opts.inputJson) {
25
+ throw calendarValidationError('input_conflict', '不能同时传 --input 和 --input-json');
26
+ }
27
+ if (opts.inputJson) {
28
+ input = parseJsonInput(String(opts.inputJson), '--input-json');
29
+ }
30
+ if (opts.input) {
31
+ let raw;
32
+ try {
33
+ raw = stripBom(opts.input === '-' ? await readStdin() : await readFile(String(opts.input), 'utf8'));
34
+ }
35
+ catch {
36
+ throw calendarValidationError('input_unreadable', `无法读取 --input:${String(opts.input)}`);
37
+ }
38
+ input = parseJsonInput(raw, '--input');
39
+ }
40
+ return {
41
+ ...input,
42
+ ...Object.fromEntries(Object.entries(extra).filter(([, value]) => value !== undefined && value !== '')),
43
+ };
44
+ }
45
+ function parseJsonInput(raw, label) {
46
+ try {
47
+ const parsed = JSON.parse(stripBom(raw));
48
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
49
+ throw new Error('input must be an object');
50
+ }
51
+ return parsed;
52
+ }
53
+ catch {
54
+ throw calendarValidationError('input_invalid', `${label} 不是合法 JSON 对象`);
55
+ }
56
+ }
57
+ export function successEnvelope(operation, result) {
58
+ return {
59
+ schemaVersion: 1,
60
+ ok: true,
61
+ operation,
62
+ data: result.data === undefined ? null : result.data,
63
+ ...(result.meta ? { meta: result.meta } : {}),
64
+ warnings: [],
65
+ };
66
+ }
67
+ function failureEnvelope(error) {
68
+ const structured = error;
69
+ return {
70
+ schemaVersion: 1,
71
+ ok: false,
72
+ ...(structured?.partialData === undefined ? {} : { data: structured.partialData }),
73
+ error: toErrorEnvelope(error),
74
+ };
75
+ }
76
+ async function executeAndPrint(ctx, operation, input) {
77
+ try {
78
+ const result = await executeCalendarOperation(operation, input, {
79
+ ctx,
80
+ host: createCalendarHost(ctx),
81
+ continuation: createCalendarContinuationSigner(ctx),
82
+ });
83
+ ctx.output.write(successEnvelope(operation, result), { json: true });
84
+ }
85
+ catch (error) {
86
+ console.error(JSON.stringify(failureEnvelope(error), null, 2));
87
+ process.exitCode = isCliError(error) ? error.exitCode : ExitCode.GeneralError;
88
+ }
89
+ }
90
+ export const calendarShortcut = {
91
+ name: 'calendar',
92
+ description: '泛微E10日程管理 CLI(创建/查询/更新/删除/字典)',
93
+ category: 'shortcut',
94
+ register({ program, action }) {
95
+ const calendar = program.command('calendar').description('泛微E10日程管理(创建/查询列表/详情/总数/更新/删除/类型/紧急程度)');
96
+ calendar.command('schema')
97
+ .description('Print calendar operation manifest for agents')
98
+ .action(action((ctx) => {
99
+ ctx.output.write(calendarManifest, { json: true });
100
+ }));
101
+ calendar.command('run')
102
+ .description('Run a calendar operation with JSON input')
103
+ .argument('<operation>', 'operation name, e.g. calendar.list')
104
+ .option('--input <path>', 'JSON input file, or - for stdin')
105
+ .option('--input-json <json>', 'inline JSON input object')
106
+ .action(action(async (ctx, operation, options) => {
107
+ await executeAndPrint(ctx, String(operation), await inputFrom(options));
108
+ }));
109
+ // 高频便捷命令
110
+ calendar.command('get')
111
+ .description('查询单条日程详情(calendar.get 薄包装)')
112
+ .option('--input <path>', 'JSON input file, or - for stdin')
113
+ .option('--input-json <json>', 'inline JSON input object')
114
+ .option('--id <id>', '日程数据 ID')
115
+ .action(action(async (ctx, options) => {
116
+ const opts = asOptions(options);
117
+ await executeAndPrint(ctx, 'calendar.get', await inputFrom(options, { id: opts.id }));
118
+ }));
119
+ calendar.command('count')
120
+ .description('查询日程总数(calendar.count 薄包装)')
121
+ .action(action(async (ctx) => {
122
+ await executeAndPrint(ctx, 'calendar.count', {});
123
+ }));
124
+ },
125
+ };
@@ -0,0 +1,26 @@
1
+ import { calendarOperationDefinitions } from './operations/registry.js';
2
+ /** 禁用边界:日程模块暂无暂缓能力,所有源资料能力均已实现。 */
3
+ const WITHHELD = [];
4
+ function buildOperations() {
5
+ return calendarOperationDefinitions().map((definition) => ({
6
+ name: definition.name,
7
+ resource: definition.resource,
8
+ summary: definition.summary,
9
+ ...(definition.capability ? { capability: definition.capability } : {}),
10
+ risk: definition.risk,
11
+ ...(definition.requiresConfirmation ? { requiresConfirmation: true } : {}),
12
+ inputSchema: definition.inputSchema,
13
+ }));
14
+ }
15
+ export const calendarManifest = {
16
+ schemaVersion: 1,
17
+ name: 'calendar',
18
+ title: '泛微E10日程管理(创建/查询/更新/删除/字典)',
19
+ version: '0.1.0',
20
+ host: 'e10-calendar',
21
+ status: 'builtin',
22
+ sourceSkill: 'weaver-e10-calendar',
23
+ capabilities: ['calendar'],
24
+ operations: buildOperations(),
25
+ withheldOperations: WITHHELD,
26
+ };
@@ -0,0 +1,259 @@
1
+ import { calendarSuccess, schemaOf, SCHEMA_ID } from './types.js';
2
+ // ESB 日程列表查询流程唯一标识(来自源资料 catalog.md)
3
+ const LIST_UNIQUE_INDENT = 'E49255BD213B480CB13DFB8E1B4159ED';
4
+ const AGENDA_APP_TAG = 'weaver-calendar-eb';
5
+ const AGENDA_FORM_TAG = 'uf_agn_agenda';
6
+ const MIN_APP_VERSION = '4.1.4';
7
+ /** 构造 datajson 结构请求体并自动填充 header.operator。 */
8
+ async function buildDatajson(host, mainTable, extra = {}) {
9
+ const session = await host.getSession();
10
+ const datajson = {
11
+ mainTable,
12
+ header: { operator: session.userId },
13
+ ...extra,
14
+ };
15
+ return { datajson };
16
+ }
17
+ /** 分页参数:源资料 pageInfo.pageNo/pageSize 为字符串类型。 */
18
+ function pageInfo(args) {
19
+ const pageNo = args.pageNo !== undefined ? String(args.pageNo) : undefined;
20
+ const pageSize = args.pageSize !== undefined ? String(args.pageSize) : undefined;
21
+ if (pageNo === undefined && pageSize === undefined)
22
+ return undefined;
23
+ return {
24
+ pageNo: pageNo ?? '1',
25
+ pageSize: pageSize ?? '10',
26
+ };
27
+ }
28
+ // ---------------------------------------------------------------------------
29
+ // 查询日程列表(ESB 流程触发)
30
+ // ---------------------------------------------------------------------------
31
+ const calendarList = {
32
+ name: 'calendar.list',
33
+ resource: 'calendar',
34
+ method: 'list',
35
+ action: 'calendar.list',
36
+ summary: '分页查询日程列表,支持按时间范围和关键字筛选;也用于更新/删除前按名称获取日程 ID',
37
+ capability: 'calendar',
38
+ risk: 'read',
39
+ inputSchema: schemaOf({
40
+ start_time: { type: 'string', pattern: '^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}$', description: '开始时间筛选(yyyy-MM-dd HH:mm)' },
41
+ end_time: { type: 'string', pattern: '^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}$', description: '结束时间筛选(yyyy-MM-dd HH:mm)' },
42
+ keywork: { type: 'string', description: '关键字检索(按日程名称模糊匹配,字段名拼写为 keywork)' },
43
+ page_no: { type: 'integer', minimum: 1, default: 1, description: '页码' },
44
+ page_size: { type: 'integer', minimum: 1, maximum: 100, default: 10, description: '每页条数' },
45
+ }),
46
+ handler: async (args, { host }) => {
47
+ const mainTable = {};
48
+ if (args.start_time !== undefined)
49
+ mainTable.start_time = args.start_time;
50
+ if (args.end_time !== undefined)
51
+ mainTable.end_time = args.end_time;
52
+ if (args.keywork !== undefined)
53
+ mainTable.keywork = args.keywork;
54
+ if (args.page_no !== undefined)
55
+ mainTable.page_no = args.page_no;
56
+ if (args.page_size !== undefined)
57
+ mainTable.page_size = args.page_size;
58
+ const response = await host.request({
59
+ method: 'POST',
60
+ path: '/api/esb/server/event/triggerActionFlow',
61
+ operation: 'calendar.list',
62
+ body: {
63
+ customParams: { mainTable },
64
+ moduleSource: '',
65
+ uniqueIndent: LIST_UNIQUE_INDENT,
66
+ },
67
+ });
68
+ return calendarSuccess('calendar.list', response);
69
+ },
70
+ };
71
+ // ---------------------------------------------------------------------------
72
+ // 查询日程详情
73
+ // ---------------------------------------------------------------------------
74
+ const calendarGet = {
75
+ name: 'calendar.get',
76
+ resource: 'calendar',
77
+ method: 'get',
78
+ action: 'calendar.get',
79
+ summary: '按日程数据 ID 查询单条日程完整信息;也作为更新、删除前的辅助查询',
80
+ capability: 'calendar',
81
+ risk: 'read',
82
+ inputSchema: schemaOf({ id: SCHEMA_ID }, { required: ['id'] }),
83
+ handler: async (args, { host }) => {
84
+ const id = String(args.id);
85
+ const body = await buildDatajson(host, { id });
86
+ const response = await host.request({
87
+ method: 'POST',
88
+ path: '/api/ebuilder/form/formdata/v2/getFormDataByPk/queryAgenda',
89
+ operation: 'calendar.get',
90
+ body,
91
+ });
92
+ return calendarSuccess('calendar.get', response);
93
+ },
94
+ };
95
+ // ---------------------------------------------------------------------------
96
+ // 查询日程总数
97
+ // ---------------------------------------------------------------------------
98
+ const calendarCount = {
99
+ name: 'calendar.count',
100
+ resource: 'calendar',
101
+ method: 'count',
102
+ action: 'calendar.count',
103
+ summary: '查询日程数据总数量',
104
+ capability: 'calendar',
105
+ risk: 'read',
106
+ inputSchema: schemaOf({}),
107
+ handler: async (_args, { host }) => {
108
+ const body = await buildDatajson(host, {});
109
+ const response = await host.request({
110
+ method: 'POST',
111
+ path: '/api/ebuilder/form/formdata/v2/getFormDataCount/queryAgendaCount',
112
+ operation: 'calendar.count',
113
+ body,
114
+ });
115
+ return calendarSuccess('calendar.count', response);
116
+ },
117
+ };
118
+ // ---------------------------------------------------------------------------
119
+ // 查询日程紧急程度 / 查询日程类型(两个字典接口结构一致)
120
+ // ---------------------------------------------------------------------------
121
+ function dictOperation(name, method, summary, path, filterField) {
122
+ return {
123
+ name,
124
+ resource: 'calendar',
125
+ method,
126
+ action: name,
127
+ summary,
128
+ capability: 'calendar',
129
+ risk: 'read',
130
+ inputSchema: schemaOf({
131
+ ...(filterField
132
+ ? { [filterField]: { type: 'string', description: '按名称筛选;不传则查询全部(注意不可传空字符串)' } }
133
+ : {}),
134
+ pageNo: { type: 'integer', minimum: 1, default: 1 },
135
+ pageSize: { type: 'integer', minimum: 1, maximum: 100, default: 10 },
136
+ }),
137
+ handler: async (args, { host }) => {
138
+ const mainTable = {};
139
+ if (filterField && args[filterField] !== undefined) {
140
+ mainTable[filterField] = args[filterField];
141
+ }
142
+ const page = pageInfo(args);
143
+ const body = await buildDatajson(host, mainTable, page ? { pageInfo: page } : {});
144
+ const response = await host.request({
145
+ method: 'POST',
146
+ path,
147
+ operation: name,
148
+ body,
149
+ });
150
+ return calendarSuccess(name, response);
151
+ },
152
+ };
153
+ }
154
+ const calendarPriorityList = dictOperation('calendar.priority.list', 'priority.list', '查询日程紧急程度选项列表(priority 字段可选值)', '/api/ebuilder/form/formdata/v2/getFormDataList/queryAgendaPriority', 'priority_name');
155
+ const calendarTypeList = dictOperation('calendar.type.list', 'type.list', '查询日程类型选项列表(agn_type 字段可选值)', '/api/ebuilder/form/formdata/v2/getFormDataList/queryAgendaType', 'type_name');
156
+ // ---------------------------------------------------------------------------
157
+ // 版本检测(三步 GET)
158
+ // ---------------------------------------------------------------------------
159
+ function compareVersion(a, b) {
160
+ const pa = a.split('.').map((part) => Number(part) || 0);
161
+ const pb = b.split('.').map((part) => Number(part) || 0);
162
+ const length = Math.max(pa.length, pb.length);
163
+ for (let i = 0; i < length; i++) {
164
+ const x = pa[i] ?? 0;
165
+ const y = pb[i] ?? 0;
166
+ if (x !== y)
167
+ return x > y ? 1 : -1;
168
+ }
169
+ return 0;
170
+ }
171
+ function firstId(value) {
172
+ if (Array.isArray(value) && value.length > 0) {
173
+ const first = value[0];
174
+ if (typeof first === 'string' || typeof first === 'number')
175
+ return String(first);
176
+ if (first && typeof first === 'object') {
177
+ const record = first;
178
+ const id = record.id ?? record.appId ?? record.app_id;
179
+ if (id !== undefined && id !== null && id !== '')
180
+ return String(id);
181
+ }
182
+ }
183
+ if (typeof value === 'string' || typeof value === 'number')
184
+ return String(value);
185
+ return undefined;
186
+ }
187
+ const calendarAppCheck = {
188
+ name: 'calendar.app.check',
189
+ resource: 'calendar',
190
+ method: 'app.check',
191
+ action: 'calendar.app.check',
192
+ summary: '检测「日程」应用是否安装及版本(要求 >= 4.1.4),并返回日程表单 ID(用于详情卡片页链接)',
193
+ capability: 'calendar',
194
+ risk: 'read',
195
+ inputSchema: schemaOf({}),
196
+ handler: async (_args, { host }) => {
197
+ // 1. getAppIds 取当前环境 appId
198
+ const appIdsResponse = await host.request({
199
+ method: 'GET',
200
+ path: '/api/bs/ebuilder/app/tags/getAppIds',
201
+ operation: 'calendar.app.check',
202
+ query: { tag: AGENDA_APP_TAG },
203
+ }).catch(() => undefined);
204
+ const appId = firstId(appIdsResponse?.data);
205
+ if (!appId) {
206
+ return calendarSuccess('calendar.app.check', {
207
+ installed: false,
208
+ reason: 'app_not_found',
209
+ message: '未检测到「日程」应用(getAppIds 未返回 appId),请先安装应用',
210
+ });
211
+ }
212
+ // 2. 查询版本信息
213
+ const versionResponse = await host.request({
214
+ method: 'GET',
215
+ path: '/api/installer/public/querySpAppVersionInfo',
216
+ operation: 'calendar.app.check',
217
+ query: { appId },
218
+ }).catch(() => undefined);
219
+ const commitVersion = versionResponse?.data?.commitVersion ?? versionResponse?.commitVersion;
220
+ // 3. 查询日程表单 ID(偶发空返回,参数原样重试最多 3 次)
221
+ let formId;
222
+ for (let attempt = 0; attempt < 3 && !formId; attempt++) {
223
+ const formResponse = await host.request({
224
+ method: 'GET',
225
+ path: '/api/ebuilder/form/obj/getObjsByTag',
226
+ operation: 'calendar.app.check',
227
+ query: { tag: AGENDA_FORM_TAG, appId },
228
+ }).catch(() => undefined);
229
+ formId = firstId(formResponse?.data);
230
+ if (!formId && attempt < 2) {
231
+ await new Promise((resolve) => setTimeout(resolve, 800));
232
+ }
233
+ }
234
+ const hasVersion = typeof commitVersion === 'string' && commitVersion.trim() !== '';
235
+ const installed = hasVersion && commitVersion !== null && commitVersion !== undefined;
236
+ const versionOk = installed && compareVersion(commitVersion, MIN_APP_VERSION) >= 0;
237
+ return calendarSuccess('calendar.app.check', {
238
+ installed,
239
+ appId,
240
+ commitVersion: installed ? commitVersion : null,
241
+ versionOk,
242
+ minRequiredVersion: MIN_APP_VERSION,
243
+ formId: formId ?? null,
244
+ status: !installed
245
+ ? 'NOT_INSTALLED'
246
+ : versionOk
247
+ ? 'OK'
248
+ : 'VERSION_TOO_LOW',
249
+ });
250
+ },
251
+ };
252
+ export const calendarReadOperations = [
253
+ calendarList,
254
+ calendarGet,
255
+ calendarCount,
256
+ calendarPriorityList,
257
+ calendarTypeList,
258
+ calendarAppCheck,
259
+ ];
@@ -0,0 +1,31 @@
1
+ import { calendarValidationError } from '../errors.js';
2
+ import { calendarReadOperations } from './read.js';
3
+ import { calendarWriteOperations } from './write.js';
4
+ function buildRegistry() {
5
+ const registry = new Map();
6
+ const definitions = [
7
+ ...calendarReadOperations,
8
+ ...calendarWriteOperations,
9
+ ];
10
+ for (const definition of definitions) {
11
+ if (registry.has(definition.name)) {
12
+ throw new Error(`duplicate calendar operation: ${definition.name}`);
13
+ }
14
+ registry.set(definition.name, definition);
15
+ }
16
+ return registry;
17
+ }
18
+ const calendarOperationRegistry = buildRegistry();
19
+ export function calendarOperationDefinitions() {
20
+ return [...calendarOperationRegistry.values()];
21
+ }
22
+ export function getCalendarOperation(operation) {
23
+ const definition = calendarOperationRegistry.get(operation);
24
+ if (!definition) {
25
+ throw calendarValidationError('operation_unknown', `日程模块不支持操作:${operation}`);
26
+ }
27
+ return definition;
28
+ }
29
+ export function hasCalendarOperation(operation) {
30
+ return calendarOperationRegistry.has(operation);
31
+ }