weaver-work-cli 0.1.8 → 0.1.20

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 (263) hide show
  1. package/README.md +11 -11
  2. package/dist/cmd/action.js +76 -0
  3. package/dist/cmd/index.js +2 -0
  4. package/dist/cmd/refs/index.js +103 -0
  5. package/dist/cmd/register.js +31 -0
  6. package/dist/cmd/root.js +1 -0
  7. package/dist/cmd/setup/index.js +25 -5
  8. package/dist/cmd/skills/index.js +37 -5
  9. package/dist/core/connector.js +54 -0
  10. package/dist/core/context.js +2 -1
  11. package/dist/core/input.js +48 -0
  12. package/dist/core/output.js +298 -3
  13. package/dist/core/refs.js +432 -0
  14. package/dist/core/state.js +26 -0
  15. package/dist/internal/e10/auth/commands.js +2 -2
  16. package/dist/internal/e10/auth/session.js +14 -0
  17. package/dist/internal/e10/auth/xiaoe.js +116 -51
  18. package/dist/internal/e10/request-runtime.js +5 -0
  19. package/dist/internal/skills/install.js +148 -28
  20. package/dist/internal/skills/reader.js +12 -9
  21. package/dist/shortcuts/blog/continuation.js +74 -0
  22. package/dist/shortcuts/blog/errors.js +60 -0
  23. package/dist/shortcuts/blog/host.js +175 -0
  24. package/dist/shortcuts/blog/index.js +324 -0
  25. package/dist/shortcuts/blog/manifest.js +415 -0
  26. package/dist/shortcuts/blog/operations/comment.js +125 -0
  27. package/dist/shortcuts/blog/operations/comments.js +31 -0
  28. package/dist/shortcuts/blog/operations/edit.js +131 -0
  29. package/dist/shortcuts/blog/operations/export.js +46 -0
  30. package/dist/shortcuts/blog/operations/like.js +80 -0
  31. package/dist/shortcuts/blog/operations/publish.js +157 -0
  32. package/dist/shortcuts/blog/operations/query-user.js +58 -0
  33. package/dist/shortcuts/blog/operations/query.js +96 -0
  34. package/dist/shortcuts/blog/operations/registry.js +54 -0
  35. package/dist/shortcuts/blog/operations/remind.js +176 -0
  36. package/dist/shortcuts/blog/operations/shared.js +330 -0
  37. package/dist/shortcuts/blog/operations/types.js +16 -0
  38. package/dist/shortcuts/blog/operations.js +9 -0
  39. package/dist/shortcuts/caizhilian/continuation.js +70 -0
  40. package/dist/shortcuts/caizhilian/errors.js +53 -0
  41. package/dist/shortcuts/caizhilian/host.js +190 -0
  42. package/dist/shortcuts/caizhilian/index.js +186 -0
  43. package/dist/shortcuts/caizhilian/manifest.js +42 -0
  44. package/dist/shortcuts/caizhilian/operations/api.js +801 -0
  45. package/dist/shortcuts/caizhilian/operations/confirm.js +75 -0
  46. package/dist/shortcuts/caizhilian/operations/files.js +306 -0
  47. package/dist/shortcuts/caizhilian/operations/form.js +170 -0
  48. package/dist/shortcuts/caizhilian/operations/handlers/collab.js +611 -0
  49. package/dist/shortcuts/caizhilian/operations/handlers/document.js +890 -0
  50. package/dist/shortcuts/caizhilian/operations/handlers/file-collection.js +346 -0
  51. package/dist/shortcuts/caizhilian/operations/handlers/file-upload.js +192 -0
  52. package/dist/shortcuts/caizhilian/operations/handlers/fileops.js +570 -0
  53. package/dist/shortcuts/caizhilian/operations/handlers/folder.js +969 -0
  54. package/dist/shortcuts/caizhilian/operations/handlers/search.js +318 -0
  55. package/dist/shortcuts/caizhilian/operations/handlers/setting-attach.js +294 -0
  56. package/dist/shortcuts/caizhilian/operations/handlers/setting-backup.js +423 -0
  57. package/dist/shortcuts/caizhilian/operations/handlers/setting-encrypt.js +238 -0
  58. package/dist/shortcuts/caizhilian/operations/handlers/setting-storage.js +364 -0
  59. package/dist/shortcuts/caizhilian/operations/handlers/system.js +106 -0
  60. package/dist/shortcuts/caizhilian/operations/registry.js +151 -0
  61. package/dist/shortcuts/caizhilian/operations/shared.js +408 -0
  62. package/dist/shortcuts/caizhilian/operations/specs.js +623 -0
  63. package/dist/shortcuts/caizhilian/operations/types.js +57 -0
  64. package/dist/shortcuts/caizhilian/operations.js +21 -0
  65. package/dist/shortcuts/contract/continuation.js +70 -0
  66. package/dist/shortcuts/contract/errors.js +62 -0
  67. package/dist/shortcuts/contract/host.js +205 -0
  68. package/dist/shortcuts/contract/index.js +318 -0
  69. package/dist/shortcuts/contract/manifest.js +596 -0
  70. package/dist/shortcuts/contract/operations/clause-reference.js +78 -0
  71. package/dist/shortcuts/contract/operations/form-info.js +371 -0
  72. package/dist/shortcuts/contract/operations/read.js +118 -0
  73. package/dist/shortcuts/contract/operations/registry.js +43 -0
  74. package/dist/shortcuts/contract/operations/request.js +300 -0
  75. package/dist/shortcuts/contract/operations/shared.js +133 -0
  76. package/dist/shortcuts/contract/operations/subject.js +157 -0
  77. package/dist/shortcuts/contract/operations/template.js +81 -0
  78. package/dist/shortcuts/contract/operations/types.js +7 -0
  79. package/dist/shortcuts/contract/operations/workflow.js +52 -0
  80. package/dist/shortcuts/contract/operations/write.js +131 -0
  81. package/dist/shortcuts/contract/operations.js +8 -0
  82. package/dist/shortcuts/hrm/index.js +83 -2
  83. package/dist/shortcuts/hrm/operations/employee.js +160 -30
  84. package/dist/shortcuts/hrm/operations/org.js +17 -3
  85. package/dist/shortcuts/hrm/operations/position.js +18 -2
  86. package/dist/shortcuts/index.js +5 -1
  87. package/dist/shortcuts/invoice/index.js +74 -36
  88. package/dist/shortcuts/invoice/manifest.js +674 -4
  89. package/dist/shortcuts/invoice/markdown.js +172 -0
  90. package/dist/shortcuts/invoice/operations/add.js +3 -3
  91. package/dist/shortcuts/invoice/operations/delete.js +2 -2
  92. package/dist/shortcuts/invoice/operations/get.js +10 -2
  93. package/dist/shortcuts/invoice/operations/import.js +2 -2
  94. package/dist/shortcuts/invoice/operations/registry.js +8 -1
  95. package/dist/shortcuts/invoice/operations/reim-auto.js +719 -0
  96. package/dist/shortcuts/invoice/operations/reim.js +85 -2
  97. package/dist/shortcuts/invoice/operations/shared.js +75 -8
  98. package/dist/shortcuts/invoice/operations/update.js +2 -2
  99. package/dist/shortcuts/invoice/operations/upload-and-validate.js +93 -0
  100. package/dist/shortcuts/invoice/operations/validate-preview.js +2 -1
  101. package/dist/shortcuts/invoice/projection.js +328 -0
  102. package/dist/shortcuts/meeting/host.js +18 -1
  103. package/dist/shortcuts/meeting/manifest.js +30 -18
  104. package/dist/shortcuts/meeting/operations/eb/catalog.js +390 -0
  105. package/dist/shortcuts/meeting/operations/eb/conflict.js +389 -0
  106. package/dist/shortcuts/meeting/operations/eb/factory.js +389 -0
  107. package/dist/shortcuts/meeting/operations/eb/index.js +22 -0
  108. package/dist/shortcuts/meeting/operations/env.js +8 -1
  109. package/dist/shortcuts/meeting/operations/registry.js +2 -0
  110. package/dist/shortcuts/meeting/operations/signs.js +216 -2
  111. package/dist/shortcuts/workflow/endpoints.js +2 -1
  112. package/dist/shortcuts/workflow/errors.js +8 -2
  113. package/dist/shortcuts/workflow/host.js +6 -3
  114. package/dist/shortcuts/workflow/operations/form.js +931 -589
  115. package/dist/shortcuts/workflow/operations/read.js +128 -205
  116. package/dist/shortcuts/workflow/operations/shared.js +21 -0
  117. package/dist/shortcuts/workflow/operations/write.js +750 -52
  118. package/dist/shortcuts/workflow/operations.js +36 -10
  119. package/docs/_catalog.md +6 -0
  120. package/docs/agent-invoice.md +5 -1
  121. package/docs/agent-io-channel-design.md +468 -0
  122. package/docs/agent-skill-install.md +9 -4
  123. package/docs/blog.md +123 -0
  124. package/docs/caizhilian.md +304 -0
  125. package/docs/contract.md +91 -0
  126. package/docs/e10-auth.md +2 -2
  127. package/docs/hrm.md +19 -9
  128. package/docs/invoice.md +5 -1
  129. package/docs/meeting.md +1 -1
  130. package/docs/operation-manual.md +15 -3
  131. package/docs/skill-review-2026-09-19.md +2 -2
  132. package/package.json +2 -2
  133. package/scripts/package-skill.mjs +32 -20
  134. package/skill-template/business-info.json +113 -14
  135. package/skill-template/domains/blog.md +24 -0
  136. package/skill-template/domains/caizhilian.md +22 -0
  137. package/skill-template/domains/jinchengda.md +23 -0
  138. package/skill-template/domains/meeting.md +1 -1
  139. package/skill-template/domains/workflow.md +1 -1
  140. package/skill-template/skill-template.md +1 -1
  141. package/skills/weaver-e10-blog/SKILL.md +111 -0
  142. package/skills/weaver-e10-blog/references/blog-comment.md +51 -0
  143. package/skills/weaver-e10-blog/references/blog-comments.md +39 -0
  144. package/skills/weaver-e10-blog/references/blog-default-permission.md +38 -0
  145. package/skills/weaver-e10-blog/references/blog-disabled-capabilities.md +11 -0
  146. package/skills/weaver-e10-blog/references/blog-edit.md +51 -0
  147. package/skills/weaver-e10-blog/references/blog-export.md +42 -0
  148. package/skills/weaver-e10-blog/references/blog-like.md +50 -0
  149. package/skills/weaver-e10-blog/references/blog-publish.md +52 -0
  150. package/skills/weaver-e10-blog/references/blog-query-user.md +45 -0
  151. package/skills/weaver-e10-blog/references/blog-query.md +49 -0
  152. package/skills/weaver-e10-blog/references/blog-remind.md +51 -0
  153. package/skills/weaver-e10-blog/references/blog-resolve-users.md +38 -0
  154. package/skills/weaver-e10-blog/references/source-manifest.json +1540 -0
  155. package/skills/weaver-e10-caizhilian/SKILL.md +216 -0
  156. package/skills/weaver-e10-caizhilian/references/agent-entry.md +106 -0
  157. package/skills/weaver-e10-caizhilian/references/collaboration.md +112 -0
  158. package/skills/weaver-e10-caizhilian/references/document.md +111 -0
  159. package/skills/weaver-e10-caizhilian/references/file-collection.md +136 -0
  160. package/skills/weaver-e10-caizhilian/references/file-upload.md +309 -0
  161. package/skills/weaver-e10-caizhilian/references/files.md +120 -0
  162. package/skills/weaver-e10-caizhilian/references/folder.md +118 -0
  163. package/skills/weaver-e10-caizhilian/references/org-browser.md +104 -0
  164. package/skills/weaver-e10-caizhilian/references/setting-attach.md +410 -0
  165. package/skills/weaver-e10-caizhilian/references/setting-backup.md +372 -0
  166. package/skills/weaver-e10-caizhilian/references/setting-encrypt.md +399 -0
  167. package/skills/weaver-e10-caizhilian/references/setting-storage.md +603 -0
  168. package/skills/weaver-e10-caizhilian/references/source-manifest.json +5079 -0
  169. package/skills/weaver-e10-caizhilian/references/withheld.md +93 -0
  170. package/skills/weaver-e10-caizhilian/references/write-protocol.md +120 -0
  171. package/skills/weaver-e10-calendar/SKILL.md +4 -3
  172. package/skills/weaver-e10-ebuilder-form/SKILL.md +4 -9
  173. package/skills/weaver-e10-ebuilder-form/references/context-routing.md +0 -9
  174. package/skills/weaver-e10-ebuilder-form/references/custom-api.md +1 -5
  175. package/skills/weaver-e10-ebuilder-form/references/fields-browser.md +1 -5
  176. package/skills/weaver-e10-ebuilder-form/references/list-nlist.md +1 -5
  177. package/skills/weaver-e10-ebuilder-form/references/openapi-read.md +1 -5
  178. package/skills/weaver-e10-ebuilder-form/references/openapi-write.md +1 -5
  179. package/skills/weaver-e10-esb/SKILL.md +2 -2
  180. package/skills/weaver-e10-esb/references/source-manifest.json +9 -9
  181. package/skills/weaver-e10-hrm/SKILL.md +54 -6
  182. package/skills/weaver-e10-hrm/references/employee.md +89 -15
  183. package/skills/weaver-e10-hrm/references/org.md +7 -4
  184. package/skills/weaver-e10-hrm/references/position.md +14 -7
  185. package/skills/weaver-e10-hrm/references/source-manifest.json +1 -1
  186. package/skills/weaver-e10-jinchengda/SKILL.md +166 -0
  187. package/skills/weaver-e10-jinchengda/references/contract-agent-entry.md +82 -0
  188. package/skills/weaver-e10-jinchengda/references/contract-clause-recommender.md +69 -0
  189. package/skills/weaver-e10-jinchengda/references/contract-clause-reference-save.md +78 -0
  190. package/skills/weaver-e10-jinchengda/references/contract-disabled-capabilities.md +27 -0
  191. package/skills/weaver-e10-jinchengda/references/contract-request-status.md +71 -0
  192. package/skills/weaver-e10-jinchengda/references/contract-request-write.md +94 -0
  193. package/skills/weaver-e10-jinchengda/references/contract-signing-subjects.md +89 -0
  194. package/skills/weaver-e10-jinchengda/references/contract-subject-create.md +77 -0
  195. package/skills/weaver-e10-jinchengda/references/contract-template-selector.md +66 -0
  196. package/skills/weaver-e10-jinchengda/references/contract-workflow-discovery.md +94 -0
  197. package/skills/weaver-e10-jinchengda/references/source-manifest.json +259 -0
  198. package/skills/weaver-e10-jiuchuanhui/SKILL.md +5 -11
  199. package/skills/weaver-e10-jucailin/SKILL.md +4 -3
  200. package/skills/weaver-e10-mail/SKILL.md +4 -11
  201. package/skills/weaver-e10-meeting/SKILL.md +66 -32
  202. package/skills/weaver-e10-meeting/references/meeting-change.md +5 -2
  203. package/skills/weaver-e10-meeting/references/meeting-create.md +2 -1
  204. package/skills/weaver-e10-meeting/references/meeting-eb.md +114 -0
  205. package/skills/weaver-e10-meeting/references/meeting-lifecycle.md +9 -8
  206. package/skills/weaver-e10-meeting/references/meeting-receipts-signs.md +35 -7
  207. package/skills/weaver-e10-meeting/references/meeting-update.md +1 -1
  208. package/skills/weaver-e10-okr/SKILL.md +6 -11
  209. package/skills/weaver-e10-okr/references/source-manifest.json +3 -3
  210. package/skills/weaver-e10-plan/SKILL.md +3 -3
  211. package/skills/weaver-e10-plan/references/plan-collect-and-compose.md +1 -1
  212. package/skills/weaver-e10-plan/references/plan-overview-and-routing.md +1 -1
  213. package/skills/weaver-e10-plan/references/source-manifest.json +13 -13
  214. package/skills/weaver-e10-qiyecheng/SKILL.md +4 -10
  215. package/skills/weaver-e10-qiyecheng/references/source-manifest.json +9 -9
  216. package/skills/weaver-e10-shared/SKILL.md +36 -25
  217. package/skills/weaver-e10-shared/references/e10-auth-and-session.md +10 -31
  218. package/skills/weaver-e10-shared/references/json-output-contract.md +20 -11
  219. package/skills/weaver-e10-shijingran/SKILL.md +2 -1
  220. package/skills/weaver-e10-shijingran/references/source-manifest.json +9 -9
  221. package/skills/weaver-e10-skill-maker/SKILL.md +4 -10
  222. package/skills/weaver-e10-skill-maker/references/business-skill-generation.md +5 -3
  223. package/skills/weaver-e10-skill-maker/references/module-cli-generation.md +12 -27
  224. package/skills/weaver-e10-skill-maker/references/module-gap-audit-and-repair.md +17 -5
  225. package/skills/weaver-e10-skill-maker/references/source-update-detection.md +4 -27
  226. package/skills/weaver-e10-wenshuding/SKILL.md +5 -16
  227. package/skills/weaver-e10-wenshuding/references/source-manifest.json +7 -7
  228. package/skills/weaver-e10-workflow/SKILL.md +32 -37
  229. package/skills/weaver-e10-workflow/references/source-manifest.json +39 -75
  230. package/skills/weaver-e10-workflow/references/workflow-batch.md +90 -29
  231. package/skills/weaver-e10-workflow/references/workflow-create.md +79 -109
  232. package/skills/weaver-e10-workflow/references/workflow-memory.md +19 -9
  233. package/skills/weaver-e10-workflow/references/workflow-operate.md +2 -2
  234. package/skills/weaver-e10-workflow/references/workflow-query.md +38 -20
  235. package/skills/weaver-e10-workflow/references/workflow-share.md +18 -2
  236. package/skills/weaver-e10-workflow/references/workflow-view.md +3 -4
  237. package/skills/weaver-e10-yepiaotong/SKILL.md +75 -39
  238. package/skills/weaver-e10-yepiaotong/references/invoice-detail.md +22 -1
  239. package/skills/weaver-e10-yepiaotong/references/invoice-enterprise-list.md +3 -1
  240. package/skills/weaver-e10-yepiaotong/references/invoice-output-view.md +135 -0
  241. package/skills/weaver-e10-yepiaotong/references/invoice-personal-list.md +15 -3
  242. package/skills/weaver-e10-yepiaotong/references/invoice-reim.md +1 -1
  243. package/skills/weaver-e10-yepiaotong/references/invoice-summarize.py +217 -0
  244. package/skills/weaver-e10-yepiaotong/references/invoice-upload-and-validate.md +88 -0
  245. package/skills/weaver-e10-yepiaotong/references/invoice-validation-preview.md +7 -2
  246. package/skills/weaver-e10-yepiaotong/references/reim-api-reference.md +89 -9
  247. package/skills/weaver-e10-yepiaotong/references/reim-examples.md +1 -0
  248. package/skills/weaver-e10-yepiaotong/references/reim-expense-subject-rules.md +70 -49
  249. package/skills/weaver-e10-yepiaotong/references/reim-fast-path.md +119 -0
  250. package/skills/weaver-e10-yepiaotong/references/reim-form-fill-rules.md +55 -36
  251. package/skills/weaver-e10-yepiaotong/references/reim-matching-rules.md +4 -0
  252. package/skills/weaver-e10-yepiaotong/references/reim-phone-subsidy-rules.md +149 -0
  253. package/skills/weaver-e10-yepiaotong/references/reim-workflow.md +125 -5
  254. package/skills/weaver-e10-yepiaotong/references/source-manifest.json +430 -63
  255. package/skills/weaver-e10-yimiaoban/SKILL.md +4 -12
  256. package/skills/weaver-e10-yimiaoban/references/source-manifest.json +3 -3
  257. package/skills/weaver-e10-ziguanjia/SKILL.md +2 -1
  258. package/skills/weaver-e10-ziguanjia/references/ziguanjia-agent-entry.md +3 -3
  259. package/tools/weaver-skill-detector-1.0.13/SKILL.md +9 -9
  260. package/tools/weaver-skill-detector-1.0.13/references/checklist.md +3 -3
  261. package/tools/weaver-skill-detector-1.0.13/scripts/__pycache__/validate_skill.cpython-313.pyc +0 -0
  262. package/tools/weaver-skill-detector-1.0.13/scripts/validate_skill.py +98 -91
  263. package/scripts/sync-connector-skills.mjs +0 -172
@@ -0,0 +1,596 @@
1
+ const AUTH = ['e10-session'];
2
+ function readSchema(properties, required = []) {
3
+ return {
4
+ type: 'object',
5
+ additionalProperties: false,
6
+ properties,
7
+ ...(required.length ? { required } : {}),
8
+ };
9
+ }
10
+ const pageNoSize = {
11
+ pageNo: { type: 'integer', minimum: 1 },
12
+ pageSize: { type: 'integer', minimum: 1, maximum: 1000 },
13
+ };
14
+ const pageNumSize = {
15
+ pageNum: { type: 'integer', minimum: 0 },
16
+ pageSize: { type: 'integer', minimum: 1, maximum: 1000 },
17
+ };
18
+ const idString = { type: 'string', pattern: '^[1-9]\\d*$', minLength: 1 };
19
+ const SUBJECT_FORM_TAGS = ['我方签约主体库', '客户签约主体库', '供应商签约主体库'];
20
+ export const contractOperations = [
21
+ {
22
+ name: 'contract.type.tree',
23
+ risk: 'read',
24
+ auth: AUTH,
25
+ fixed: { method: 'GET', path: '/api/ebd/contract/type/allTypes' },
26
+ inputSchema: readSchema({}),
27
+ },
28
+ {
29
+ name: 'contract.template.tree',
30
+ risk: 'read',
31
+ auth: AUTH,
32
+ fixed: { method: 'GET', path: '/api/ebd/contract/tpltree/queryList' },
33
+ inputSchema: readSchema({
34
+ treeName: { type: 'string' },
35
+ parentId: idString,
36
+ treeType: { type: 'integer' },
37
+ isSystem: { type: 'integer' },
38
+ useType: { type: 'integer' },
39
+ appId: idString,
40
+ }),
41
+ },
42
+ {
43
+ name: 'contract.template.list',
44
+ risk: 'read',
45
+ auth: AUTH,
46
+ fixed: { method: 'GET', path: '/api/ebd/contract/tplinfo/getListPage', defaults: { pageNo: 1, pageSize: 10 } },
47
+ inputSchema: readSchema({
48
+ templateName: { type: 'string' },
49
+ templateDesc: { type: 'string' },
50
+ belongId: idString,
51
+ contractType: idString,
52
+ templateStatus: { type: 'integer', enum: [0, 1] },
53
+ source: { type: 'integer', enum: [0, 1, 2] },
54
+ sourceType: { type: 'string' },
55
+ templateVersion: { type: 'string' },
56
+ operateType: { type: 'integer' },
57
+ useType: { type: 'integer' },
58
+ code: { type: 'string' },
59
+ appId: idString,
60
+ formId: idString,
61
+ orgId: idString,
62
+ belongSub: { type: 'string' },
63
+ outTime: { type: 'boolean' },
64
+ ...pageNoSize,
65
+ }),
66
+ },
67
+ {
68
+ name: 'contract.template.detail',
69
+ risk: 'read',
70
+ auth: AUTH,
71
+ fixed: { method: 'GET', path: '/api/ebd/contract/tplinfo/getById' },
72
+ inputSchema: readSchema({ id: idString }, ['id']),
73
+ },
74
+ {
75
+ name: 'contract.clause.tree',
76
+ risk: 'read',
77
+ auth: AUTH,
78
+ fixed: { method: 'GET', path: '/api/ebd/contract/tree/queryList' },
79
+ inputSchema: readSchema({}),
80
+ },
81
+ {
82
+ name: 'contract.clause.list',
83
+ risk: 'read',
84
+ auth: AUTH,
85
+ fixed: { method: 'GET', path: '/api/ebd/contract/clauseinfo/getListPage', defaults: { pageNo: 1, pageSize: 10 } },
86
+ inputSchema: readSchema({
87
+ belongId: idString,
88
+ clauseName: { type: 'string' },
89
+ clauseNum: { type: 'string' },
90
+ clauseStatus: { type: 'integer', enum: [0, 1] },
91
+ clauseGroup: { type: 'string' },
92
+ contractType: idString,
93
+ clauseVersion: { type: 'string' },
94
+ orgId: idString,
95
+ belongSub: { type: 'string' },
96
+ ...pageNoSize,
97
+ }),
98
+ },
99
+ {
100
+ name: 'contract.clause.group.list',
101
+ risk: 'read',
102
+ auth: AUTH,
103
+ fixed: { method: 'GET', path: '/api/ebd/contract/clausegroup/getListPage', defaults: { pageNo: 1, pageSize: 10 } },
104
+ inputSchema: readSchema({
105
+ belongId: idString,
106
+ clauseName: { type: 'string' },
107
+ clauseNum: { type: 'string' },
108
+ clauseStatus: { type: 'integer', enum: [0, 1] },
109
+ contractType: idString,
110
+ ...pageNoSize,
111
+ }),
112
+ },
113
+ {
114
+ name: 'contract.clause.search',
115
+ risk: 'read',
116
+ auth: AUTH,
117
+ fixed: { method: 'GET', path: '/api/ebd/contract/clauseinfo/getClauses', defaults: { pageNum: 0, pageSize: 10 } },
118
+ inputSchema: readSchema({
119
+ id: { type: 'string' },
120
+ title: { type: 'string' },
121
+ tagId: { type: 'string' },
122
+ content: { type: 'string' },
123
+ group: { type: 'boolean' },
124
+ mark: { type: 'boolean' },
125
+ ...pageNumSize,
126
+ }),
127
+ },
128
+ {
129
+ name: 'contract.clause.tags',
130
+ risk: 'read',
131
+ auth: AUTH,
132
+ fixed: { method: 'GET', path: '/api/ebd/contract/clauseinfo/getClausesConfig', defaults: { pageNum: 0, pageSize: 10 } },
133
+ inputSchema: readSchema({
134
+ label: { type: 'string' },
135
+ value: { type: 'string' },
136
+ ...pageNumSize,
137
+ }),
138
+ },
139
+ {
140
+ name: 'contract.clause.reference.get',
141
+ risk: 'read',
142
+ auth: AUTH,
143
+ fixed: { method: 'POST', path: '/api/ebd/contract/clauseReference/selectData' },
144
+ inputSchema: readSchema({
145
+ fileId: idString,
146
+ requestId: idString,
147
+ clauseId: idString,
148
+ referenceObjType: { type: 'integer', enum: [1], default: 1 },
149
+ startTime: { type: 'string' },
150
+ endTime: { type: 'string' },
151
+ ...pageNumSize,
152
+ }),
153
+ },
154
+ {
155
+ name: 'contract.clause.reference.save.prepare',
156
+ risk: 'read-before-write',
157
+ auth: AUTH,
158
+ fixed: { writeMethod: 'POST', path: '/api/ebd/contract/clauseReference/saveData', referenceObjType: 1 },
159
+ inputSchema: readSchema({
160
+ clauseIds: { type: 'array', minItems: 1, items: idString },
161
+ fileId: idString,
162
+ fileName: { type: 'string' },
163
+ requestId: idString,
164
+ requestName: { type: 'string' },
165
+ }, ['clauseIds', 'fileId', 'requestId']),
166
+ },
167
+ {
168
+ name: 'contract.clause.reference.save.apply',
169
+ risk: 'high-risk-write',
170
+ auth: AUTH,
171
+ fixed: { writeMethod: 'POST', path: '/api/ebd/contract/clauseReference/saveData', referenceObjType: 1 },
172
+ inputSchema: readSchema({
173
+ clauseIds: { type: 'array', minItems: 1, items: idString },
174
+ fileId: idString,
175
+ fileName: { type: 'string' },
176
+ requestId: idString,
177
+ requestName: { type: 'string' },
178
+ continuation: { type: 'string', minLength: 1 },
179
+ confirm: { const: true },
180
+ }, ['clauseIds', 'fileId', 'requestId', 'continuation', 'confirm']),
181
+ },
182
+ {
183
+ name: 'contract.subject.app',
184
+ risk: 'read',
185
+ auth: AUTH,
186
+ fixed: { method: 'GET', path: '/api/bs/ebuilder/app/tags/getAppIds', defaultTag: '合同管理' },
187
+ inputSchema: readSchema({
188
+ tag: { type: 'string', minLength: 1, default: '合同管理' },
189
+ }),
190
+ },
191
+ {
192
+ name: 'contract.subject.form',
193
+ risk: 'read',
194
+ auth: AUTH,
195
+ fixed: { method: 'GET', path: '/api/ebuilder/form/obj/getObjsByTag' },
196
+ inputSchema: readSchema({
197
+ appId: idString,
198
+ tag: { type: 'string', enum: SUBJECT_FORM_TAGS },
199
+ }, ['appId', 'tag']),
200
+ },
201
+ {
202
+ name: 'contract.subject.fields',
203
+ risk: 'read',
204
+ auth: AUTH,
205
+ fixed: {
206
+ method: 'POST',
207
+ path: '/api/ebuilder/common/ds/fields',
208
+ contentType: 'multipart/form-data',
209
+ sourceType: 'FORM',
210
+ defaults: { detailFieldsGroup: true, enableMerge: true, customParam: '{"terminal":""}', params: '[]' },
211
+ },
212
+ inputSchema: readSchema({
213
+ appId: idString,
214
+ objId: idString,
215
+ detailFieldsGroup: { type: 'boolean' },
216
+ enableMerge: { type: 'boolean' },
217
+ customParam: { type: 'string' },
218
+ params: { type: 'string' },
219
+ }, ['appId', 'objId']),
220
+ },
221
+ {
222
+ name: 'contract.subject.options',
223
+ risk: 'read',
224
+ auth: AUTH,
225
+ fixed: { method: 'GET', path: '/api/ebuilder/common/ds/options', sourceType: 'FORM' },
226
+ inputSchema: readSchema({
227
+ appId: idString,
228
+ objId: idString,
229
+ fieldName: idString,
230
+ }, ['appId', 'objId', 'fieldName']),
231
+ },
232
+ {
233
+ name: 'contract.subject.query',
234
+ risk: 'read',
235
+ auth: AUTH,
236
+ fixed: { method: 'POST', path: '/api/ebuilder/form/dataset/v2/getAllData', defaults: { pageNo: 1, pageSize: 10, isReturnDetail: 'n' } },
237
+ inputSchema: readSchema({
238
+ objId: idString,
239
+ mainTable: { type: 'object' },
240
+ pageNo: { type: 'integer', minimum: 1 },
241
+ pageSize: { type: 'integer', minimum: 1, maximum: 1000 },
242
+ isReturnDetail: { type: 'string', enum: ['y', 'n'] },
243
+ }, ['objId']),
244
+ },
245
+ {
246
+ name: 'contract.subject.create.prepare',
247
+ risk: 'read-before-write',
248
+ auth: AUTH,
249
+ fixed: {
250
+ writeMethod: 'POST',
251
+ path: '/api/ebuilder/form/dataset/v2/saveFormData',
252
+ defaults: { fieldNoFindIgnore: 'true', doAction: 'false' },
253
+ },
254
+ inputSchema: readSchema({
255
+ objId: idString,
256
+ mainTable: { type: 'object', minProperties: 1 },
257
+ details: { type: 'object' },
258
+ fieldNoFindIgnore: { type: 'string', enum: ['true', 'false'] },
259
+ doAction: { type: 'string', enum: ['true', 'false'] },
260
+ verify: {
261
+ type: 'object',
262
+ additionalProperties: false,
263
+ properties: { field: { type: 'string', minLength: 1 }, value: { type: 'string' } },
264
+ required: ['field', 'value'],
265
+ },
266
+ }, ['objId', 'mainTable']),
267
+ },
268
+ {
269
+ name: 'contract.subject.create.apply',
270
+ risk: 'high-risk-write',
271
+ auth: AUTH,
272
+ fixed: {
273
+ writeMethod: 'POST',
274
+ path: '/api/ebuilder/form/dataset/v2/saveFormData',
275
+ defaults: { fieldNoFindIgnore: 'true', doAction: 'false' },
276
+ },
277
+ inputSchema: readSchema({
278
+ objId: idString,
279
+ mainTable: { type: 'object', minProperties: 1 },
280
+ details: { type: 'object' },
281
+ fieldNoFindIgnore: { type: 'string', enum: ['true', 'false'] },
282
+ doAction: { type: 'string', enum: ['true', 'false'] },
283
+ verify: {
284
+ type: 'object',
285
+ additionalProperties: false,
286
+ properties: { field: { type: 'string', minLength: 1 }, value: { type: 'string' } },
287
+ required: ['field', 'value'],
288
+ },
289
+ continuation: { type: 'string', minLength: 1 },
290
+ confirm: { const: true },
291
+ }, ['objId', 'mainTable', 'continuation', 'confirm']),
292
+ },
293
+ {
294
+ name: 'contract.workflow.query',
295
+ risk: 'read',
296
+ auth: AUTH,
297
+ fixed: { method: 'POST', path: '/api/workflow/pathdef/openapi/getBaseInfoByCondition', userIdField: 'userid' },
298
+ inputSchema: readSchema({
299
+ workflowName: { type: 'string', minLength: 1 },
300
+ workflowType: { type: 'string' },
301
+ status: { type: 'string', enum: ['1', '2', '5', '9'] },
302
+ }, ['workflowName']),
303
+ },
304
+ {
305
+ name: 'contract.workflow.list',
306
+ risk: 'read',
307
+ auth: AUTH,
308
+ fixed: { method: 'POST', path: '/api/workflow/list/paService/v1/getCreateWorkflowList', userIdField: 'userid' },
309
+ inputSchema: readSchema({
310
+ wfpCode: { type: 'integer', enum: [0, 1] },
311
+ filterHide: { type: 'string' },
312
+ }, ['wfpCode']),
313
+ },
314
+ {
315
+ name: 'contract.workflow.form.info',
316
+ risk: 'read',
317
+ auth: AUTH,
318
+ fixed: {
319
+ method: 'POST',
320
+ path: '/api/workflow/core/flowPage/loadBaseParam',
321
+ note: '三段式表单读取:loadBaseParam -> loadFrameParam -> getFormLayout,实际以最后一步为准',
322
+ },
323
+ inputSchema: readSchema({ workflowId: idString }, ['workflowId']),
324
+ },
325
+ {
326
+ name: 'contract.workflow.field.options',
327
+ risk: 'read',
328
+ auth: AUTH,
329
+ fixed: { method: 'POST', path: '/api/workflow/core/paService/v1/getFieldOption', userIdField: 'userid', acceptsErrcode200: true },
330
+ inputSchema: readSchema({
331
+ fieldId: idString,
332
+ pageNo: { type: 'integer', minimum: 1 },
333
+ pageSize: { type: 'integer', minimum: 1 },
334
+ }, ['fieldId']),
335
+ },
336
+ {
337
+ name: 'contract.request.create.prepare',
338
+ risk: 'read-before-write',
339
+ auth: AUTH,
340
+ fixed: {
341
+ writeMethod: 'POST',
342
+ path: '/api/workflow/core/paService/v2/doCreateRequest',
343
+ userIdField: 'userid',
344
+ defaults: { isnextflow: 0, requestLevel: 0, isVerifyFormRequired: false },
345
+ },
346
+ inputSchema: readSchema({
347
+ workflowId: idString,
348
+ requestname: { type: 'string', minLength: 1 },
349
+ remark: { type: 'string' },
350
+ isnextflow: { type: 'integer', enum: [0, 1] },
351
+ isVerifyFormRequired: { type: 'boolean' },
352
+ requestLevel: { type: 'integer', enum: [0, 1, 2] },
353
+ formData: { type: 'object' },
354
+ isNewFormData: { type: 'boolean' },
355
+ seniorFormParam: { type: 'object' },
356
+ }, ['workflowId']),
357
+ },
358
+ {
359
+ name: 'contract.request.create.apply',
360
+ risk: 'high-risk-write',
361
+ auth: AUTH,
362
+ fixed: {
363
+ writeMethod: 'POST',
364
+ path: '/api/workflow/core/paService/v2/doCreateRequest',
365
+ userIdField: 'userid',
366
+ defaults: { isnextflow: 0, requestLevel: 0, isVerifyFormRequired: false },
367
+ },
368
+ inputSchema: readSchema({
369
+ workflowId: idString,
370
+ requestname: { type: 'string', minLength: 1 },
371
+ remark: { type: 'string' },
372
+ isnextflow: { type: 'integer', enum: [0, 1] },
373
+ isVerifyFormRequired: { type: 'boolean' },
374
+ requestLevel: { type: 'integer', enum: [0, 1, 2] },
375
+ formData: { type: 'object' },
376
+ isNewFormData: { type: 'boolean' },
377
+ seniorFormParam: { type: 'object' },
378
+ continuation: { type: 'string', minLength: 1 },
379
+ confirm: { const: true },
380
+ }, ['workflowId', 'continuation', 'confirm']),
381
+ },
382
+ {
383
+ name: 'contract.request.save.prepare',
384
+ risk: 'read-before-write',
385
+ auth: AUTH,
386
+ fixed: { writeMethod: 'POST', path: '/api/workflow/core/paService/v1/saveFormData', userIdField: 'userid' },
387
+ inputSchema: readSchema({
388
+ requestId: idString,
389
+ workflowId: idString,
390
+ userCurrentNodeId: idString,
391
+ formData: {
392
+ type: 'object',
393
+ properties: {
394
+ formId: idString,
395
+ module: { type: 'string' },
396
+ dataDetails: { type: 'array', minItems: 1, items: { type: 'object' } },
397
+ },
398
+ required: ['dataDetails'],
399
+ additionalProperties: false,
400
+ },
401
+ isNewFormData: { type: 'boolean' },
402
+ seniorFormParam: { type: 'object' },
403
+ }, ['requestId', 'formData']),
404
+ },
405
+ {
406
+ name: 'contract.request.save.apply',
407
+ risk: 'high-risk-write',
408
+ auth: AUTH,
409
+ fixed: { writeMethod: 'POST', path: '/api/workflow/core/paService/v1/saveFormData', userIdField: 'userid' },
410
+ inputSchema: readSchema({
411
+ requestId: idString,
412
+ workflowId: idString,
413
+ userCurrentNodeId: idString,
414
+ formData: {
415
+ type: 'object',
416
+ properties: {
417
+ formId: idString,
418
+ module: { type: 'string' },
419
+ dataDetails: { type: 'array', minItems: 1, items: { type: 'object' } },
420
+ },
421
+ required: ['dataDetails'],
422
+ additionalProperties: false,
423
+ },
424
+ isNewFormData: { type: 'boolean' },
425
+ seniorFormParam: { type: 'object' },
426
+ continuation: { type: 'string', minLength: 1 },
427
+ confirm: { const: true },
428
+ }, ['requestId', 'formData', 'continuation', 'confirm']),
429
+ },
430
+ {
431
+ name: 'contract.request.submit.prepare',
432
+ risk: 'read-before-write',
433
+ auth: AUTH,
434
+ fixed: {
435
+ writeMethod: 'POST',
436
+ path: '/api/workflow/core/paService/v1/submitRequest',
437
+ userIdField: 'userid',
438
+ secondConfirmation: true,
439
+ defaults: { isVerifyFormRequired: true },
440
+ },
441
+ inputSchema: readSchema({
442
+ requestId: idString,
443
+ remark: { type: 'string' },
444
+ userCurrentNodeId: idString,
445
+ requestName: { type: 'string' },
446
+ formdata: { type: 'object' },
447
+ otherParams: { type: 'string' },
448
+ isVerifyFormRequired: { type: 'boolean' },
449
+ }, ['requestId']),
450
+ },
451
+ {
452
+ name: 'contract.request.submit.apply',
453
+ risk: 'high-risk-write',
454
+ auth: AUTH,
455
+ fixed: {
456
+ writeMethod: 'POST',
457
+ path: '/api/workflow/core/paService/v1/submitRequest',
458
+ userIdField: 'userid',
459
+ secondConfirmation: true,
460
+ defaults: { isVerifyFormRequired: true },
461
+ },
462
+ inputSchema: readSchema({
463
+ requestId: idString,
464
+ remark: { type: 'string' },
465
+ userCurrentNodeId: idString,
466
+ requestName: { type: 'string' },
467
+ formdata: { type: 'object' },
468
+ otherParams: { type: 'string' },
469
+ isVerifyFormRequired: { type: 'boolean' },
470
+ continuation: { type: 'string', minLength: 1 },
471
+ confirm: { const: true },
472
+ }, ['requestId', 'continuation', 'confirm']),
473
+ },
474
+ {
475
+ name: 'contract.request.supervise.prepare',
476
+ risk: 'read-before-write',
477
+ auth: AUTH,
478
+ fixed: {
479
+ writeMethod: 'POST',
480
+ path: '/api/workflow/core/paService/v1/requestSupervise',
481
+ userIdField: 'userId',
482
+ secondConfirmation: true,
483
+ highImpact: true,
484
+ },
485
+ inputSchema: readSchema({
486
+ requestId: idString,
487
+ remark: { type: 'string' },
488
+ otherParam: {
489
+ type: 'object',
490
+ additionalProperties: false,
491
+ properties: {
492
+ otherReminder: { type: 'string' },
493
+ currentOperator: { type: 'integer', enum: [0, 1] },
494
+ doneOperator: { type: 'integer', enum: [0, 1] },
495
+ submitOperator: { type: 'integer', enum: [0, 1] },
496
+ ccOperator: { type: 'integer', enum: [0, 1] },
497
+ messageRemind: { type: 'integer', enum: [0, 1] },
498
+ emailRemind: { type: 'integer', enum: [0, 1] },
499
+ },
500
+ anyOf: [
501
+ { required: ['currentOperator'] },
502
+ { required: ['doneOperator'] },
503
+ { required: ['submitOperator'] },
504
+ { required: ['ccOperator'] },
505
+ { required: ['otherReminder'] },
506
+ ],
507
+ },
508
+ }, ['requestId', 'otherParam']),
509
+ },
510
+ {
511
+ name: 'contract.request.supervise.apply',
512
+ risk: 'high-risk-write',
513
+ auth: AUTH,
514
+ fixed: {
515
+ writeMethod: 'POST',
516
+ path: '/api/workflow/core/paService/v1/requestSupervise',
517
+ userIdField: 'userId',
518
+ secondConfirmation: true,
519
+ highImpact: true,
520
+ },
521
+ inputSchema: readSchema({
522
+ requestId: idString,
523
+ remark: { type: 'string' },
524
+ otherParam: {
525
+ type: 'object',
526
+ additionalProperties: false,
527
+ properties: {
528
+ otherReminder: { type: 'string' },
529
+ currentOperator: { type: 'integer', enum: [0, 1] },
530
+ doneOperator: { type: 'integer', enum: [0, 1] },
531
+ submitOperator: { type: 'integer', enum: [0, 1] },
532
+ ccOperator: { type: 'integer', enum: [0, 1] },
533
+ messageRemind: { type: 'integer', enum: [0, 1] },
534
+ emailRemind: { type: 'integer', enum: [0, 1] },
535
+ },
536
+ anyOf: [
537
+ { required: ['currentOperator'] },
538
+ { required: ['doneOperator'] },
539
+ { required: ['submitOperator'] },
540
+ { required: ['ccOperator'] },
541
+ { required: ['otherReminder'] },
542
+ ],
543
+ },
544
+ continuation: { type: 'string', minLength: 1 },
545
+ confirm: { const: true },
546
+ }, ['requestId', 'otherParam', 'continuation', 'confirm']),
547
+ },
548
+ {
549
+ name: 'contract.request.status',
550
+ risk: 'read',
551
+ auth: AUTH,
552
+ fixed: { method: 'GET', path: '/api/workflow/core/paService/v1/getRequestStatus', userIdField: 'userid' },
553
+ inputSchema: readSchema({ requestId: idString }, ['requestId']),
554
+ },
555
+ {
556
+ name: 'contract.request.log',
557
+ risk: 'read',
558
+ auth: AUTH,
559
+ fixed: { method: 'GET', path: '/api/workflow/core/paService/v1/getRequestLog', userIdField: 'userid' },
560
+ inputSchema: readSchema({
561
+ requestId: idString,
562
+ otherParams: { type: 'string' },
563
+ }, ['requestId']),
564
+ },
565
+ ];
566
+ export const contractManifest = {
567
+ schemaVersion: 1,
568
+ name: 'contract',
569
+ title: '泛微E10今承达合同管理',
570
+ version: '0.1.0',
571
+ host: 'e10-contract',
572
+ status: 'builtin',
573
+ sourceSkill: 'weaver-e10-jinchengda',
574
+ operations: contractOperations,
575
+ withheldOperations: [
576
+ {
577
+ name: 'contract.credit.query',
578
+ reason: '源资料 enterprise-credit/api-enterprise-credit.md 只有 9 行索引,指向的 api-credit-info.md、api-enterprise-change.md、api-monitor-config.md 三个子文档不存在,缺少接口路径、方法和字段,暂不实现。',
579
+ },
580
+ {
581
+ name: 'contract.credit.change',
582
+ reason: '企业变更查询接口文档缺失,缺少路径、参数与响应结构。',
583
+ },
584
+ {
585
+ name: 'contract.credit.monitor',
586
+ reason: '企业监控开启/修改属于写操作,源资料缺少接口路径、参数与确认回查契约。',
587
+ },
588
+ {
589
+ name: 'contract.workflow.withdraw',
590
+ reason: '撤回/退回接口在源资料中只被提及,未给出路径、方法和参数。',
591
+ },
592
+ ],
593
+ };
594
+ export function hasContractOperation(operation) {
595
+ return contractOperations.some((item) => item.name === operation);
596
+ }
@@ -0,0 +1,78 @@
1
+ import { contractPartialError, contractPolicyError } from '../errors.js';
2
+ import { maskText, objectFingerprint, requireId } from './shared.js';
3
+ import { ContractWriteApplyOperation, ContractWritePrepareOperation } from './write.js';
4
+ const SAVE_PATH = '/api/ebd/contract/clauseReference/saveData';
5
+ const SELECT_PATH = '/api/ebd/contract/clauseReference/selectData';
6
+ function clauseIdsOf(input) {
7
+ const value = input.clauseIds;
8
+ if (!Array.isArray(value) || !value.length) {
9
+ throw contractPolicyError('clause_ids_required', 'clauseIds 必须是非空 ID 数组');
10
+ }
11
+ return value.map((item, index) => requireId(item, `clauseIds[${index}]`));
12
+ }
13
+ async function referencedClauseIds(input, host) {
14
+ const result = await host.contractRequest({
15
+ method: 'POST',
16
+ path: SELECT_PATH,
17
+ body: {
18
+ fileId: requireId(input.fileId, 'fileId'),
19
+ requestId: requireId(input.requestId, 'requestId'),
20
+ referenceObjType: 1,
21
+ pageNum: 1,
22
+ pageSize: 200,
23
+ },
24
+ });
25
+ const records = Array.isArray(result?.data?.records) ? result.data.records : [];
26
+ return new Set(records.map((item) => String(item?.clauseId ?? '')).filter(Boolean));
27
+ }
28
+ const CLAUSE_REFERENCE_SAVE_SPEC = {
29
+ method: 'POST',
30
+ path: SAVE_PATH,
31
+ defaults: { referenceObjType: 1 },
32
+ body: (input) => ({
33
+ clauseIds: clauseIdsOf(input),
34
+ fileId: requireId(input.fileId, 'fileId'),
35
+ requestId: requireId(input.requestId, 'requestId'),
36
+ ...(input.fileName === undefined ? {} : { fileName: String(input.fileName) }),
37
+ ...(input.requestName === undefined ? {} : { requestName: String(input.requestName) }),
38
+ }),
39
+ fingerprint: (input) => objectFingerprint({
40
+ clauseIds: clauseIdsOf(input),
41
+ fileId: input.fileId,
42
+ requestId: input.requestId,
43
+ }),
44
+ preview: (input) => ({
45
+ action: '把条款引用写入合同文档',
46
+ path: SAVE_PATH,
47
+ fileId: maskText(input.fileId),
48
+ requestId: maskText(input.requestId),
49
+ requestName: input.requestName,
50
+ clauseCount: clauseIdsOf(input).length,
51
+ clauseIds: clauseIdsOf(input).map((id) => maskText(id)),
52
+ }),
53
+ async precheck(input, host) {
54
+ const existing = await referencedClauseIds(input, host);
55
+ const duplicated = clauseIdsOf(input).filter((id) => existing.has(id));
56
+ if (duplicated.length) {
57
+ throw contractPolicyError('already_referenced', `以下条款已被该合同文档引用,禁止重复插入:${duplicated.map((id) => maskText(id)).join('、')}`, { duplicatedCount: duplicated.length });
58
+ }
59
+ return { existingCount: existing.size, duplicated: false };
60
+ },
61
+ async readback(_result, input, host) {
62
+ const existing = await referencedClauseIds(input, host);
63
+ const missing = clauseIdsOf(input).filter((id) => !existing.has(id));
64
+ if (missing.length) {
65
+ throw contractPartialError('条款引用接口已返回成功,但回读发现部分条款未生效,结果不确定', {
66
+ missingCount: missing.length,
67
+ missing: missing.map((id) => maskText(id)),
68
+ }, { stage: 'readback' });
69
+ }
70
+ return { referencedCount: existing.size, insertedCount: clauseIdsOf(input).length };
71
+ },
72
+ };
73
+ export const contractClauseReferenceSavePrepareOperation = new ContractWritePrepareOperation('contract.clause.reference.save.prepare', 'contract.clause.reference.save.apply', CLAUSE_REFERENCE_SAVE_SPEC);
74
+ export const contractClauseReferenceSaveApplyOperation = new ContractWriteApplyOperation('contract.clause.reference.save.apply', CLAUSE_REFERENCE_SAVE_SPEC);
75
+ export const contractClauseReferenceOperations = [
76
+ contractClauseReferenceSavePrepareOperation,
77
+ contractClauseReferenceSaveApplyOperation,
78
+ ];