openxiangda 1.0.265 → 2.0.0-alpha.2

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 (537) hide show
  1. package/README.md +11 -675
  2. package/bin/run.js +11 -0
  3. package/dist/browser/AuthoritativeSelector.d.ts +37 -0
  4. package/dist/browser/AuthoritativeSelector.d.ts.map +1 -0
  5. package/dist/browser/AuthoritativeSelector.js +357 -0
  6. package/dist/browser/AuthoritativeSelector.js.map +1 -0
  7. package/dist/browser/FilePreviewPage.d.ts +2 -0
  8. package/dist/browser/FilePreviewPage.d.ts.map +1 -0
  9. package/dist/browser/FilePreviewPage.js +191 -0
  10. package/dist/browser/FilePreviewPage.js.map +1 -0
  11. package/dist/browser/Shell.d.ts +6 -0
  12. package/dist/browser/Shell.d.ts.map +1 -0
  13. package/dist/browser/Shell.js +198 -0
  14. package/dist/browser/Shell.js.map +1 -0
  15. package/dist/browser/appearance.d.ts +12 -0
  16. package/dist/browser/appearance.d.ts.map +1 -0
  17. package/dist/browser/appearance.js +100 -0
  18. package/dist/browser/appearance.js.map +1 -0
  19. package/dist/browser/application.d.ts +8 -0
  20. package/dist/browser/application.d.ts.map +1 -0
  21. package/dist/browser/application.js +42 -0
  22. package/dist/browser/application.js.map +1 -0
  23. package/dist/browser/components/platform-fields/AddressField.d.ts +12 -0
  24. package/dist/browser/components/platform-fields/AddressField.d.ts.map +1 -0
  25. package/dist/browser/components/platform-fields/AddressField.js +179 -0
  26. package/dist/browser/components/platform-fields/AddressField.js.map +1 -0
  27. package/dist/browser/components/platform-fields/AttachmentFileList.d.ts +9 -0
  28. package/dist/browser/components/platform-fields/AttachmentFileList.d.ts.map +1 -0
  29. package/dist/browser/components/platform-fields/AttachmentFileList.js +164 -0
  30. package/dist/browser/components/platform-fields/AttachmentFileList.js.map +1 -0
  31. package/dist/browser/components/platform-fields/CascadeField.d.ts +13 -0
  32. package/dist/browser/components/platform-fields/CascadeField.d.ts.map +1 -0
  33. package/dist/browser/components/platform-fields/CascadeField.js +14 -0
  34. package/dist/browser/components/platform-fields/CascadeField.js.map +1 -0
  35. package/dist/browser/components/platform-fields/DateTimeField.d.ts +16 -0
  36. package/dist/browser/components/platform-fields/DateTimeField.d.ts.map +1 -0
  37. package/dist/browser/components/platform-fields/DateTimeField.js +51 -0
  38. package/dist/browser/components/platform-fields/DateTimeField.js.map +1 -0
  39. package/dist/browser/components/platform-fields/JsonField.d.ts +11 -0
  40. package/dist/browser/components/platform-fields/JsonField.d.ts.map +1 -0
  41. package/dist/browser/components/platform-fields/JsonField.js +40 -0
  42. package/dist/browser/components/platform-fields/JsonField.js.map +1 -0
  43. package/dist/browser/components/platform-fields/LocationField.d.ts +11 -0
  44. package/dist/browser/components/platform-fields/LocationField.d.ts.map +1 -0
  45. package/dist/browser/components/platform-fields/LocationField.js +73 -0
  46. package/dist/browser/components/platform-fields/LocationField.js.map +1 -0
  47. package/dist/browser/components/platform-fields/PlatformDirectoryPicker.d.ts +12 -0
  48. package/dist/browser/components/platform-fields/PlatformDirectoryPicker.d.ts.map +1 -0
  49. package/dist/browser/components/platform-fields/PlatformDirectoryPicker.js +269 -0
  50. package/dist/browser/components/platform-fields/PlatformDirectoryPicker.js.map +1 -0
  51. package/dist/browser/components/platform-fields/ResourceReferenceField.d.ts +12 -0
  52. package/dist/browser/components/platform-fields/ResourceReferenceField.d.ts.map +1 -0
  53. package/dist/browser/components/platform-fields/ResourceReferenceField.js +22 -0
  54. package/dist/browser/components/platform-fields/ResourceReferenceField.js.map +1 -0
  55. package/dist/browser/components/platform-fields/RichTextField.d.ts +14 -0
  56. package/dist/browser/components/platform-fields/RichTextField.d.ts.map +1 -0
  57. package/dist/browser/components/platform-fields/RichTextField.js +214 -0
  58. package/dist/browser/components/platform-fields/RichTextField.js.map +1 -0
  59. package/dist/browser/components/platform-fields/SignatureField.d.ts +15 -0
  60. package/dist/browser/components/platform-fields/SignatureField.d.ts.map +1 -0
  61. package/dist/browser/components/platform-fields/SignatureField.js +179 -0
  62. package/dist/browser/components/platform-fields/SignatureField.js.map +1 -0
  63. package/dist/browser/components/platform-fields/SubtableField.d.ts +18 -0
  64. package/dist/browser/components/platform-fields/SubtableField.d.ts.map +1 -0
  65. package/dist/browser/components/platform-fields/SubtableField.js +236 -0
  66. package/dist/browser/components/platform-fields/SubtableField.js.map +1 -0
  67. package/dist/browser/components/platform-fields/address-value.d.ts +13 -0
  68. package/dist/browser/components/platform-fields/address-value.d.ts.map +1 -0
  69. package/dist/browser/components/platform-fields/address-value.js +70 -0
  70. package/dist/browser/components/platform-fields/address-value.js.map +1 -0
  71. package/dist/browser/components/platform-fields/cascade-value.d.ts +6 -0
  72. package/dist/browser/components/platform-fields/cascade-value.d.ts.map +1 -0
  73. package/dist/browser/components/platform-fields/cascade-value.js +47 -0
  74. package/dist/browser/components/platform-fields/cascade-value.js.map +1 -0
  75. package/dist/browser/components/platform-fields/directory-value.d.ts +7 -0
  76. package/dist/browser/components/platform-fields/directory-value.d.ts.map +1 -0
  77. package/dist/browser/components/platform-fields/directory-value.js +35 -0
  78. package/dist/browser/components/platform-fields/directory-value.js.map +1 -0
  79. package/dist/browser/components/platform-fields/field-form-codec.d.ts +10 -0
  80. package/dist/browser/components/platform-fields/field-form-codec.d.ts.map +1 -0
  81. package/dist/browser/components/platform-fields/field-form-codec.js +82 -0
  82. package/dist/browser/components/platform-fields/field-form-codec.js.map +1 -0
  83. package/dist/browser/components/platform-fields/location-value.d.ts +20 -0
  84. package/dist/browser/components/platform-fields/location-value.d.ts.map +1 -0
  85. package/dist/browser/components/platform-fields/location-value.js +57 -0
  86. package/dist/browser/components/platform-fields/location-value.js.map +1 -0
  87. package/dist/browser/components/platform-fields/resource-query.d.ts +14 -0
  88. package/dist/browser/components/platform-fields/resource-query.d.ts.map +1 -0
  89. package/dist/browser/components/platform-fields/resource-query.js +102 -0
  90. package/dist/browser/components/platform-fields/resource-query.js.map +1 -0
  91. package/dist/browser/components/platform-fields/rich-text-value.d.ts +12 -0
  92. package/dist/browser/components/platform-fields/rich-text-value.d.ts.map +1 -0
  93. package/dist/browser/components/platform-fields/rich-text-value.js +83 -0
  94. package/dist/browser/components/platform-fields/rich-text-value.js.map +1 -0
  95. package/dist/browser/components/platform-fields/subtable-value.d.ts +31 -0
  96. package/dist/browser/components/platform-fields/subtable-value.d.ts.map +1 -0
  97. package/dist/browser/components/platform-fields/subtable-value.js +120 -0
  98. package/dist/browser/components/platform-fields/subtable-value.js.map +1 -0
  99. package/dist/browser/components/resource/GeneratedResourceCrud.d.ts +8 -0
  100. package/dist/browser/components/resource/GeneratedResourceCrud.d.ts.map +1 -0
  101. package/dist/browser/components/resource/GeneratedResourceCrud.js +580 -0
  102. package/dist/browser/components/resource/GeneratedResourceCrud.js.map +1 -0
  103. package/dist/browser/components/resource/ResourceBatchActions.d.ts +25 -0
  104. package/dist/browser/components/resource/ResourceBatchActions.d.ts.map +1 -0
  105. package/dist/browser/components/resource/ResourceBatchActions.js +168 -0
  106. package/dist/browser/components/resource/ResourceBatchActions.js.map +1 -0
  107. package/dist/browser/components/resource/StandardResourcePages.d.ts +57 -0
  108. package/dist/browser/components/resource/StandardResourcePages.d.ts.map +1 -0
  109. package/dist/browser/components/resource/StandardResourcePages.js +89 -0
  110. package/dist/browser/components/resource/StandardResourcePages.js.map +1 -0
  111. package/dist/browser/components/resource/SurfaceFields.d.ts +88 -0
  112. package/dist/browser/components/resource/SurfaceFields.d.ts.map +1 -0
  113. package/dist/browser/components/resource/SurfaceFields.js +497 -0
  114. package/dist/browser/components/resource/SurfaceFields.js.map +1 -0
  115. package/dist/browser/components/resource/generated-resource-definition.d.ts +19 -0
  116. package/dist/browser/components/resource/generated-resource-definition.d.ts.map +1 -0
  117. package/dist/browser/components/resource/generated-resource-definition.js +2 -0
  118. package/dist/browser/components/resource/generated-resource-definition.js.map +1 -0
  119. package/dist/browser/components/resource/resource-import.d.ts +15 -0
  120. package/dist/browser/components/resource/resource-import.d.ts.map +1 -0
  121. package/dist/browser/components/resource/resource-import.js +197 -0
  122. package/dist/browser/components/resource/resource-import.js.map +1 -0
  123. package/dist/browser/data-provider.d.ts +4 -0
  124. package/dist/browser/data-provider.d.ts.map +1 -0
  125. package/dist/browser/data-provider.js +45 -0
  126. package/dist/browser/data-provider.js.map +1 -0
  127. package/dist/browser/platform-client.d.ts +81 -0
  128. package/dist/browser/platform-client.d.ts.map +1 -0
  129. package/dist/browser/platform-client.js +422 -0
  130. package/dist/browser/platform-client.js.map +1 -0
  131. package/dist/browser/resource-definitions.d.ts +8 -0
  132. package/dist/browser/resource-definitions.d.ts.map +1 -0
  133. package/dist/browser/resource-definitions.js +14 -0
  134. package/dist/browser/resource-definitions.js.map +1 -0
  135. package/dist/browser/runtime-meta.d.ts +22 -0
  136. package/dist/browser/runtime-meta.d.ts.map +1 -0
  137. package/dist/browser/runtime-meta.js +79 -0
  138. package/dist/browser/runtime-meta.js.map +1 -0
  139. package/dist/browser/runtime.d.ts +13 -0
  140. package/dist/browser/runtime.d.ts.map +1 -0
  141. package/dist/browser/runtime.js +47 -0
  142. package/dist/browser/runtime.js.map +1 -0
  143. package/dist/browser/styles.css +1941 -0
  144. package/dist/config.d.ts +2 -0
  145. package/dist/config.d.ts.map +1 -0
  146. package/dist/config.js +2 -0
  147. package/dist/config.js.map +1 -0
  148. package/dist/core.d.ts +6 -0
  149. package/dist/core.d.ts.map +1 -0
  150. package/dist/core.js +4 -0
  151. package/dist/core.js.map +1 -0
  152. package/dist/field-kit.d.ts +22 -0
  153. package/dist/field-kit.d.ts.map +1 -0
  154. package/dist/field-kit.js +22 -0
  155. package/dist/field-kit.js.map +1 -0
  156. package/dist/index.d.ts +2 -0
  157. package/dist/index.d.ts.map +1 -0
  158. package/dist/index.js +2 -0
  159. package/dist/index.js.map +1 -0
  160. package/dist/nest.d.ts +10 -0
  161. package/dist/nest.d.ts.map +1 -0
  162. package/dist/nest.js +9 -0
  163. package/dist/nest.js.map +1 -0
  164. package/dist/react.d.ts +12 -0
  165. package/dist/react.d.ts.map +1 -0
  166. package/dist/react.js +11 -0
  167. package/dist/react.js.map +1 -0
  168. package/dist/testing.d.ts +4 -0
  169. package/dist/testing.d.ts.map +1 -0
  170. package/dist/testing.js +4 -0
  171. package/dist/testing.js.map +1 -0
  172. package/package.json +95 -200
  173. package/skills/manifest.json +10 -0
  174. package/skills/openxiangda-v2/SKILL.md +55 -0
  175. package/skills/openxiangda-v2/references/architecture.md +7 -0
  176. package/skills/openxiangda-v2/references/backend.md +116 -0
  177. package/skills/openxiangda-v2/references/data-authz.md +93 -0
  178. package/skills/openxiangda-v2/references/delivery.md +11 -0
  179. package/skills/openxiangda-v2/references/discovery.md +15 -0
  180. package/skills/openxiangda-v2/references/frontend.md +10 -0
  181. package/skills/openxiangda-v2/references/testing.md +16 -0
  182. package/skills/openxiangda-v2/references/workflow-notification.md +69 -0
  183. package/skills/openxiangda-v2/references/workspace.md +21 -0
  184. package/bin/openxiangda.js +0 -26
  185. package/lib/app-function-invoke.js +0 -28
  186. package/lib/application-environments.js +0 -1134
  187. package/lib/change-baseline.js +0 -1359
  188. package/lib/cli.js +0 -31084
  189. package/lib/config.js +0 -450
  190. package/lib/content-cache.js +0 -97
  191. package/lib/delivery-v2-cli.js +0 -329
  192. package/lib/delivery-v2-executor.js +0 -1703
  193. package/lib/delivery-v2-package.js +0 -1176
  194. package/lib/dependency-capsule.js +0 -246
  195. package/lib/design-gates.js +0 -668
  196. package/lib/design-review.js +0 -220
  197. package/lib/developer-center.js +0 -160
  198. package/lib/form-field-contract.js +0 -79
  199. package/lib/form-schema-loader.js +0 -181
  200. package/lib/git-remote-identity.js +0 -89
  201. package/lib/http.js +0 -196
  202. package/lib/integration-bundle.js +0 -225
  203. package/lib/js-code-build.js +0 -175
  204. package/lib/open-api.js +0 -256
  205. package/lib/policy.js +0 -137
  206. package/lib/publish-context.js +0 -98
  207. package/lib/publish-lease-heartbeat.js +0 -182
  208. package/lib/publish-lease.js +0 -221
  209. package/lib/release-error-classification.js +0 -41
  210. package/lib/release-explain.js +0 -75
  211. package/lib/release-mainline.js +0 -654
  212. package/lib/release-plan.js +0 -550
  213. package/lib/release-telemetry.js +0 -182
  214. package/lib/resource-binding-contract.js +0 -210
  215. package/lib/role-resolution.js +0 -57
  216. package/lib/runtime-lineage.js +0 -326
  217. package/lib/sdd.js +0 -3306
  218. package/lib/skills.js +0 -453
  219. package/lib/source-dependencies.js +0 -921
  220. package/lib/task-status.js +0 -330
  221. package/lib/utils.js +0 -178
  222. package/lib/workspace-bootstrap.js +0 -268
  223. package/lib/workspace-init.js +0 -202
  224. package/lib/worktree-cleanup.js +0 -631
  225. package/lib/worktree-owner.js +0 -354
  226. package/openxiangda-skills/SKILL.md +0 -229
  227. package/openxiangda-skills/references/architecture-design.md +0 -409
  228. package/openxiangda-skills/references/architecture-patterns.md +0 -264
  229. package/openxiangda-skills/references/automation-v3.md +0 -349
  230. package/openxiangda-skills/references/best-practices.md +0 -272
  231. package/openxiangda-skills/references/component-guide.md +0 -287
  232. package/openxiangda-skills/references/connector-resources.md +0 -80
  233. package/openxiangda-skills/references/data-views.md +0 -360
  234. package/openxiangda-skills/references/forms/component-registry.md +0 -90
  235. package/openxiangda-skills/references/forms/form-schema.md +0 -146
  236. package/openxiangda-skills/references/forms/layout-and-rules.md +0 -24
  237. package/openxiangda-skills/references/notifications.md +0 -227
  238. package/openxiangda-skills/references/openxiangda-api.md +0 -971
  239. package/openxiangda-skills/references/pages/app-shell.md +0 -66
  240. package/openxiangda-skills/references/pages/page-sdk.md +0 -401
  241. package/openxiangda-skills/references/pages/publish-flow.md +0 -84
  242. package/openxiangda-skills/references/pages/workspace-structure.md +0 -41
  243. package/openxiangda-skills/references/permission-design-patterns.md +0 -313
  244. package/openxiangda-skills/references/permissions-settings.md +0 -468
  245. package/openxiangda-skills/references/platform-data-model.md +0 -340
  246. package/openxiangda-skills/references/resource-manifest-cheatsheet.md +0 -936
  247. package/openxiangda-skills/references/school-contact-relations.md +0 -242
  248. package/openxiangda-skills/references/style-system.md +0 -218
  249. package/openxiangda-skills/references/troubleshooting.md +0 -271
  250. package/openxiangda-skills/references/workflow-v3.md +0 -441
  251. package/openxiangda-skills/references/workspace-state.md +0 -115
  252. package/openxiangda-skills/skills/openxiangda-app/SKILL.md +0 -118
  253. package/openxiangda-skills/skills/openxiangda-architecture-design/SKILL.md +0 -137
  254. package/openxiangda-skills/skills/openxiangda-core/SKILL.md +0 -222
  255. package/openxiangda-skills/skills/openxiangda-form/SKILL.md +0 -184
  256. package/openxiangda-skills/skills/openxiangda-inspect/SKILL.md +0 -63
  257. package/openxiangda-skills/skills/openxiangda-open-api/SKILL.md +0 -57
  258. package/openxiangda-skills/skills/openxiangda-open-api/agents/openai.yaml +0 -4
  259. package/openxiangda-skills/skills/openxiangda-open-api/references/backend-authentication.md +0 -63
  260. package/openxiangda-skills/skills/openxiangda-open-api/references/dingtalk-api.openapi.json +0 -15653
  261. package/openxiangda-skills/skills/openxiangda-page/SKILL.md +0 -154
  262. package/openxiangda-skills/skills/openxiangda-permission-settings/SKILL.md +0 -209
  263. package/openxiangda-skills/skills/openxiangda-workflow-automation/SKILL.md +0 -201
  264. package/packages/sdk/bin/lowcode-workspace.mjs +0 -4
  265. package/packages/sdk/dist/ProcessPreview-DSUIJi5V.d.mts +0 -1292
  266. package/packages/sdk/dist/ProcessPreview-DSUIJi5V.d.ts +0 -1292
  267. package/packages/sdk/dist/build/index.cjs +0 -1
  268. package/packages/sdk/dist/build/index.d.mts +0 -60
  269. package/packages/sdk/dist/build/index.d.ts +0 -60
  270. package/packages/sdk/dist/build/index.mjs +0 -1
  271. package/packages/sdk/dist/components/index.cjs +0 -148
  272. package/packages/sdk/dist/components/index.d.mts +0 -970
  273. package/packages/sdk/dist/components/index.d.ts +0 -970
  274. package/packages/sdk/dist/components/index.mjs +0 -148
  275. package/packages/sdk/dist/dataManagementApi-Ro9itwm8.d.ts +0 -142
  276. package/packages/sdk/dist/dataManagementApi-p_HOhQnA.d.mts +0 -142
  277. package/packages/sdk/dist/runtime/index.cjs +0 -148
  278. package/packages/sdk/dist/runtime/index.d.mts +0 -171
  279. package/packages/sdk/dist/runtime/index.d.ts +0 -171
  280. package/packages/sdk/dist/runtime/index.mjs +0 -148
  281. package/packages/sdk/dist/runtime/react.cjs +0 -148
  282. package/packages/sdk/dist/runtime/react.d.mts +0 -3209
  283. package/packages/sdk/dist/runtime/react.d.ts +0 -3209
  284. package/packages/sdk/dist/runtime/react.mjs +0 -148
  285. package/packages/sdk/dist/styles/antd-theme.cjs +0 -1
  286. package/packages/sdk/dist/styles/antd-theme.d.mts +0 -6
  287. package/packages/sdk/dist/styles/antd-theme.d.ts +0 -6
  288. package/packages/sdk/dist/styles/antd-theme.mjs +0 -1
  289. package/packages/sdk/dist/styles/tailwind-preset.cjs +0 -1
  290. package/packages/sdk/dist/styles/tailwind-preset.d.mts +0 -74
  291. package/packages/sdk/dist/styles/tailwind-preset.d.ts +0 -74
  292. package/packages/sdk/dist/styles/tailwind-preset.mjs +0 -1
  293. package/packages/sdk/dist/styles/tokens.css +0 -74
  294. package/packages/sdk/dist/workflow/index.cjs +0 -3
  295. package/packages/sdk/dist/workflow/index.d.mts +0 -291
  296. package/packages/sdk/dist/workflow/index.d.ts +0 -291
  297. package/packages/sdk/dist/workflow/index.mjs +0 -3
  298. package/packages/sdk/source/admin-list/AdminList.tsx +0 -1734
  299. package/packages/sdk/source/admin-list/README.md +0 -12
  300. package/packages/sdk/source/admin-list/dataSources.ts +0 -345
  301. package/packages/sdk/source/admin-list/index.ts +0 -42
  302. package/packages/sdk/source/admin-list/preferences.ts +0 -174
  303. package/packages/sdk/source/admin-list/types.ts +0 -273
  304. package/packages/sdk/src/build-source/README.md +0 -9
  305. package/packages/sdk/src/build-source/bin/lowcode-workspace.mjs +0 -7
  306. package/packages/sdk/src/build-source/package.json +0 -34
  307. package/packages/sdk/src/build-source/scripts/build-forms.mjs +0 -1129
  308. package/packages/sdk/src/build-source/scripts/build-pages.mjs +0 -897
  309. package/packages/sdk/src/build-source/scripts/build-workspace.mjs +0 -89
  310. package/packages/sdk/src/build-source/scripts/publish-all.mjs +0 -190
  311. package/packages/sdk/src/build-source/scripts/publish-oss.mjs +0 -144
  312. package/packages/sdk/src/build-source/scripts/register-bundle.mjs +0 -1
  313. package/packages/sdk/src/build-source/scripts/register.mjs +0 -362
  314. package/packages/sdk/src/build-source/scripts/sync-schema.mjs +0 -381
  315. package/packages/sdk/src/build-source/scripts/utils/form-api.mjs +0 -1058
  316. package/packages/sdk/src/build-source/scripts/utils/form-runtime-assets.mjs +0 -57
  317. package/packages/sdk/src/build-source/scripts/utils/incremental.mjs +0 -348
  318. package/packages/sdk/src/build-source/scripts/utils/load-config.mjs +0 -331
  319. package/packages/sdk/src/build-source/scripts/utils/mime-types.mjs +0 -70
  320. package/packages/sdk/src/build-source/scripts/utils/namespace-css.mjs +0 -77
  321. package/packages/sdk/src/build-source/scripts/utils/oss-client.mjs +0 -128
  322. package/packages/sdk/src/build-source/scripts/utils/pages.mjs +0 -150
  323. package/packages/sdk/src/build-source/scripts/utils/progress.mjs +0 -57
  324. package/packages/sdk/src/build-source/scripts/utils/publish-oss-patterns.mjs +0 -20
  325. package/packages/sdk/src/build-source/scripts/utils/register-payload.mjs +0 -90
  326. package/packages/sdk/src/build-source/scripts/utils/runtime-css-check.mjs +0 -44
  327. package/packages/sdk/src/build-source/scripts/utils/schema-transform.mjs +0 -142
  328. package/packages/sdk/src/build-source/scripts/utils/static-assets.mjs +0 -165
  329. package/packages/sdk/src/build-source/scripts/utils/tailwind-config.mjs +0 -283
  330. package/packages/sdk/src/build-source/scripts/utils/tailwind-token-warnings.mjs +0 -146
  331. package/packages/sdk/src/build-source/scripts/utils/workspace-style-entry.mjs +0 -29
  332. package/packages/sdk/src/build-source/src/cli.mjs +0 -735
  333. package/policy/openxiangda-policy.json +0 -72
  334. package/templates/openxiangda-react-spa/.cursor/rules/openxiangda-form.mdc +0 -24
  335. package/templates/openxiangda-react-spa/.cursor/rules/openxiangda-page.mdc +0 -25
  336. package/templates/openxiangda-react-spa/.cursor/rules/openxiangda-resources.mdc +0 -32
  337. package/templates/openxiangda-react-spa/.cursor/rules/openxiangda-workflow-automation.mdc +0 -26
  338. package/templates/openxiangda-react-spa/.cursor/rules/openxiangda.mdc +0 -68
  339. package/templates/openxiangda-react-spa/.env.example +0 -4
  340. package/templates/openxiangda-react-spa/.qoder/rules/openxiangda-form.md +0 -37
  341. package/templates/openxiangda-react-spa/.qoder/rules/openxiangda-page.md +0 -29
  342. package/templates/openxiangda-react-spa/.qoder/rules/openxiangda-resources.md +0 -32
  343. package/templates/openxiangda-react-spa/.qoder/rules/openxiangda-workflow-automation.md +0 -34
  344. package/templates/openxiangda-react-spa/.qoder/rules/openxiangda.md +0 -66
  345. package/templates/openxiangda-react-spa/AGENTS.md +0 -197
  346. package/templates/openxiangda-react-spa/DELIVERY.md +0 -43
  347. package/templates/openxiangda-react-spa/app-workspace.config.ts +0 -50
  348. package/templates/openxiangda-react-spa/index.html +0 -12
  349. package/templates/openxiangda-react-spa/package.json +0 -53
  350. package/templates/openxiangda-react-spa/postcss.config.cjs +0 -6
  351. package/templates/openxiangda-react-spa/scripts/build-js-code.mjs +0 -600
  352. package/templates/openxiangda-react-spa/scripts/deploy.mjs +0 -18
  353. package/templates/openxiangda-react-spa/scripts/guard-publish.mjs +0 -21
  354. package/templates/openxiangda-react-spa/src/app/navigation.ts +0 -73
  355. package/templates/openxiangda-react-spa/src/app/router.tsx +0 -146
  356. package/templates/openxiangda-react-spa/src/app/starter-content.ts +0 -144
  357. package/templates/openxiangda-react-spa/src/forms/.gitkeep +0 -1
  358. package/templates/openxiangda-react-spa/src/layouts/AdminShell.tsx +0 -570
  359. package/templates/openxiangda-react-spa/src/main.tsx +0 -21
  360. package/templates/openxiangda-react-spa/src/pages/admin/AdminDashboardPage.tsx +0 -170
  361. package/templates/openxiangda-react-spa/src/pages/admin/LoginLogPage.tsx +0 -425
  362. package/templates/openxiangda-react-spa/src/pages/defaults/DataRoutePage.tsx +0 -36
  363. package/templates/openxiangda-react-spa/src/pages/defaults/FilePreviewRoutePage.tsx +0 -65
  364. package/templates/openxiangda-react-spa/src/pages/defaults/FormRoutePage.tsx +0 -235
  365. package/templates/openxiangda-react-spa/src/pages/public/PublicRegisterPage.tsx +0 -15
  366. package/templates/openxiangda-react-spa/src/pages/states/NotFoundPage.tsx +0 -31
  367. package/templates/openxiangda-react-spa/src/resources/menus/menus.json +0 -22
  368. package/templates/openxiangda-react-spa/src/resources/permissions/page-groups/app-admin.json +0 -8
  369. package/templates/openxiangda-react-spa/src/resources/permissions/page-groups/public-visitor.json +0 -8
  370. package/templates/openxiangda-react-spa/src/resources/public-access/public-register.json +0 -14
  371. package/templates/openxiangda-react-spa/src/resources/roles/roles.json +0 -15
  372. package/templates/openxiangda-react-spa/src/resources/routes/public-register.json +0 -8
  373. package/templates/openxiangda-react-spa/src/runtime/default-page-overrides.tsx +0 -35
  374. package/templates/openxiangda-react-spa/src/runtime/default-routes.ts +0 -16
  375. package/templates/openxiangda-react-spa/src/shared/form-schema.ts +0 -135
  376. package/templates/openxiangda-react-spa/src/shared/mac-admin.tsx +0 -651
  377. package/templates/openxiangda-react-spa/src/shared/ui.tsx +0 -22
  378. package/templates/openxiangda-react-spa/src/styles/index.css +0 -105
  379. package/templates/openxiangda-react-spa/tailwind.config.cjs +0 -37
  380. package/templates/openxiangda-react-spa/tsconfig.app.json +0 -36
  381. package/templates/openxiangda-react-spa/tsconfig.js-code-nodes.json +0 -19
  382. package/templates/openxiangda-react-spa/tsconfig.json +0 -7
  383. package/templates/openxiangda-react-spa/tsconfig.node.json +0 -10
  384. package/templates/openxiangda-react-spa/vite.config.ts +0 -209
  385. package/templates/sy-lowcode-app-workspace/.cursor/rules/openxiangda-form.mdc +0 -24
  386. package/templates/sy-lowcode-app-workspace/.cursor/rules/openxiangda-page.mdc +0 -21
  387. package/templates/sy-lowcode-app-workspace/.cursor/rules/openxiangda-resources.mdc +0 -40
  388. package/templates/sy-lowcode-app-workspace/.cursor/rules/openxiangda-workflow-automation.mdc +0 -21
  389. package/templates/sy-lowcode-app-workspace/.cursor/rules/openxiangda.mdc +0 -81
  390. package/templates/sy-lowcode-app-workspace/.qoder/rules/openxiangda-form.md +0 -38
  391. package/templates/sy-lowcode-app-workspace/.qoder/rules/openxiangda-page.md +0 -39
  392. package/templates/sy-lowcode-app-workspace/.qoder/rules/openxiangda-resources.md +0 -59
  393. package/templates/sy-lowcode-app-workspace/.qoder/rules/openxiangda-workflow-automation.md +0 -46
  394. package/templates/sy-lowcode-app-workspace/.qoder/rules/openxiangda.md +0 -82
  395. package/templates/sy-lowcode-app-workspace/AGENTS.md +0 -159
  396. package/templates/sy-lowcode-app-workspace/DELIVERY.md +0 -43
  397. package/templates/sy-lowcode-app-workspace/app-workspace.config.ts +0 -51
  398. package/templates/sy-lowcode-app-workspace/examples/best-practices/README.md +0 -43
  399. package/templates/sy-lowcode-app-workspace/examples/best-practices/access-governance.md +0 -239
  400. package/templates/sy-lowcode-app-workspace/examples/best-practices/catalog.json +0 -99
  401. package/templates/sy-lowcode-app-workspace/examples/best-practices/decision-guide.md +0 -94
  402. package/templates/sy-lowcode-app-workspace/examples/best-practices/design-style.md +0 -91
  403. package/templates/sy-lowcode-app-workspace/examples/best-practices/module-structure.md +0 -48
  404. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/role-governance/index.ts +0 -2
  405. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/role-governance/permissions.test.ts +0 -52
  406. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/role-governance/permissions.ts +0 -37
  407. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/role-governance/types.ts +0 -19
  408. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/service-ticket/index.ts +0 -4
  409. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/service-ticket/permissions.test.ts +0 -42
  410. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/service-ticket/permissions.ts +0 -25
  411. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/service-ticket/state-machine.test.ts +0 -63
  412. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/service-ticket/state-machine.ts +0 -73
  413. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/service-ticket/ticket-query.test.ts +0 -34
  414. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/service-ticket/ticket-query.ts +0 -73
  415. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/service-ticket/types.ts +0 -66
  416. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/app-role/page.tsx +0 -1
  417. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/app-role/schema.ts +0 -109
  418. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/customer-profile/page.tsx +0 -1
  419. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/customer-profile/schema.ts +0 -92
  420. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/service-ticket/page.tsx +0 -1
  421. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/service-ticket/schema.ts +0 -153
  422. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/ticket-action-log/page.tsx +0 -1
  423. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/ticket-action-log/schema.ts +0 -65
  424. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/js-code-nodes/daily_ticket_digest/index.ts +0 -44
  425. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/js-code-nodes/sync_roles_to_platform/index.ts +0 -33
  426. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/glass-home-dashboard/App.tsx +0 -8
  427. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/glass-home-dashboard/GlassHomeDashboard.tsx +0 -232
  428. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/glass-home-dashboard/index.tsx +0 -10
  429. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/glass-home-dashboard/page.config.ts +0 -14
  430. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/glass-home-dashboard/styles.css +0 -196
  431. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/interactive-workbench/App.tsx +0 -7
  432. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/interactive-workbench/WorkbenchPage.tsx +0 -36
  433. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/interactive-workbench/components/ConfigPanel.tsx +0 -34
  434. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/interactive-workbench/components/PreviewPanel.tsx +0 -17
  435. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/interactive-workbench/index.tsx +0 -10
  436. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/interactive-workbench/page.config.ts +0 -9
  437. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/interactive-workbench/reducer.ts +0 -29
  438. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/interactive-workbench/styles.css +0 -24
  439. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mint-analytics-dashboard/App.tsx +0 -8
  440. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mint-analytics-dashboard/MintAnalyticsDashboard.tsx +0 -279
  441. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mint-analytics-dashboard/index.tsx +0 -10
  442. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mint-analytics-dashboard/page.config.ts +0 -14
  443. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mint-analytics-dashboard/styles.css +0 -163
  444. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mobile-portal-shell/App.tsx +0 -7
  445. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mobile-portal-shell/MobilePortalShell.tsx +0 -31
  446. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mobile-portal-shell/index.tsx +0 -10
  447. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mobile-portal-shell/modules/MobileHome.tsx +0 -13
  448. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mobile-portal-shell/page.config.ts +0 -14
  449. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mobile-portal-shell/routes.ts +0 -13
  450. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mobile-portal-shell/styles.css +0 -11
  451. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/ops-monitor-dashboard/App.tsx +0 -8
  452. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/ops-monitor-dashboard/OpsMonitorDashboard.tsx +0 -306
  453. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/ops-monitor-dashboard/index.tsx +0 -10
  454. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/ops-monitor-dashboard/page.config.ts +0 -14
  455. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/ops-monitor-dashboard/styles.css +0 -248
  456. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/App.tsx +0 -7
  457. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/PcPortalShell.tsx +0 -35
  458. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/components/PortalMetric.tsx +0 -11
  459. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/index.tsx +0 -10
  460. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/modules/HomeModule.tsx +0 -25
  461. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/modules/TicketsModule.tsx +0 -14
  462. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/page.config.ts +0 -14
  463. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/routes.ts +0 -19
  464. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/styles.css +0 -35
  465. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/service-ticket-ops/App.tsx +0 -7
  466. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/service-ticket-ops/TicketOpsPage.tsx +0 -105
  467. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/service-ticket-ops/components/TicketActionTimeline.tsx +0 -22
  468. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/service-ticket-ops/components/TicketDetailDrawer.tsx +0 -44
  469. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/service-ticket-ops/components/TicketTableActions.tsx +0 -57
  470. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/service-ticket-ops/index.tsx +0 -10
  471. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/service-ticket-ops/page.config.ts +0 -9
  472. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/service-ticket-ops/styles.css +0 -35
  473. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/work-order-list-drawer/App.tsx +0 -8
  474. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/work-order-list-drawer/WorkOrderListDrawerPage.tsx +0 -371
  475. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/work-order-list-drawer/index.tsx +0 -10
  476. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/work-order-list-drawer/page.config.ts +0 -14
  477. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/work-order-list-drawer/styles.css +0 -182
  478. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/resources/automations/daily-ticket-digest/automation.json +0 -25
  479. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/resources/automations/daily-ticket-digest/trigger.json +0 -9
  480. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/resources/notifications/daily-ticket-digest.json +0 -24
  481. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/resources/permissions/form-groups/service-ticket-college.json +0 -21
  482. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/resources/permissions/roles.json +0 -17
  483. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/resources/workflows/expense-approval-workflow.json +0 -48
  484. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/components/ConfirmAction.tsx +0 -22
  485. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/components/QueryState.tsx +0 -37
  486. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/components/StatusTag.tsx +0 -20
  487. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/components/admin-ui-templates/DashboardPrimitives.tsx +0 -832
  488. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/components/admin-ui-templates/chartOptions.ts +0 -140
  489. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/components/admin-ui-templates/sampleData.ts +0 -466
  490. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/components/admin-ui-templates/styles.css +0 -874
  491. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/components/admin-ui-templates/types.ts +0 -150
  492. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/hooks/useTicketOps.ts +0 -96
  493. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/services/role-governance.ts +0 -48
  494. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/services/service-ticket.ts +0 -113
  495. package/templates/sy-lowcode-app-workspace/examples/forms/customer/page.tsx +0 -1
  496. package/templates/sy-lowcode-app-workspace/examples/forms/customer/schema.ts +0 -36
  497. package/templates/sy-lowcode-app-workspace/index.html +0 -12
  498. package/templates/sy-lowcode-app-workspace/package.json +0 -58
  499. package/templates/sy-lowcode-app-workspace/postcss.config.cjs +0 -9
  500. package/templates/sy-lowcode-app-workspace/scripts/build-js-code.mjs +0 -600
  501. package/templates/sy-lowcode-app-workspace/scripts/guard-publish.mjs +0 -29
  502. package/templates/sy-lowcode-app-workspace/src/dev/App.tsx +0 -820
  503. package/templates/sy-lowcode-app-workspace/src/forms/.gitkeep +0 -1
  504. package/templates/sy-lowcode-app-workspace/src/forms/README.md +0 -52
  505. package/templates/sy-lowcode-app-workspace/src/index.css +0 -26
  506. package/templates/sy-lowcode-app-workspace/src/js-code-nodes/.gitkeep +0 -1
  507. package/templates/sy-lowcode-app-workspace/src/js-code-nodes/types.d.ts +0 -3
  508. package/templates/sy-lowcode-app-workspace/src/main.tsx +0 -29
  509. package/templates/sy-lowcode-app-workspace/src/pages/.gitkeep +0 -1
  510. package/templates/sy-lowcode-app-workspace/src/runtime/builtin-overrides.tsx +0 -8
  511. package/templates/sy-lowcode-app-workspace/src/shared/form-schema.ts +0 -135
  512. package/templates/sy-lowcode-app-workspace/src/types/app-workspace.types.ts +0 -88
  513. package/templates/sy-lowcode-app-workspace/tailwind.config.cjs +0 -31
  514. package/templates/sy-lowcode-app-workspace/tsconfig.app.json +0 -40
  515. package/templates/sy-lowcode-app-workspace/tsconfig.examples.json +0 -24
  516. package/templates/sy-lowcode-app-workspace/tsconfig.js-code-nodes.json +0 -19
  517. package/templates/sy-lowcode-app-workspace/tsconfig.json +0 -7
  518. package/templates/sy-lowcode-app-workspace/tsconfig.node.json +0 -10
  519. package/templates/sy-lowcode-app-workspace/vite.config.ts +0 -85
  520. package/v2/README.md +0 -35
  521. package/v2/skills/manifest.json +0 -45
  522. package/v2/skills/openxiangda-v1-maintenance/SKILL.md +0 -21
  523. package/v2/skills/openxiangda-v1-maintenance/agents/openai.yaml +0 -4
  524. package/v2/skills/openxiangda-v2/SKILL.md +0 -38
  525. package/v2/skills/openxiangda-v2-architecture/SKILL.md +0 -29
  526. package/v2/skills/openxiangda-v2-architecture/agents/openai.yaml +0 -4
  527. package/v2/skills/openxiangda-v2-backend/SKILL.md +0 -28
  528. package/v2/skills/openxiangda-v2-backend/agents/openai.yaml +0 -4
  529. package/v2/skills/openxiangda-v2-data-authz/SKILL.md +0 -28
  530. package/v2/skills/openxiangda-v2-data-authz/agents/openai.yaml +0 -4
  531. package/v2/skills/openxiangda-v2-delivery/SKILL.md +0 -30
  532. package/v2/skills/openxiangda-v2-delivery/agents/openai.yaml +0 -4
  533. package/v2/skills/openxiangda-v2-frontend/SKILL.md +0 -21
  534. package/v2/skills/openxiangda-v2-frontend/agents/openai.yaml +0 -4
  535. package/v2/skills/openxiangda-v2-workflow-events/SKILL.md +0 -28
  536. package/v2/skills/openxiangda-v2-workflow-events/agents/openai.yaml +0 -4
  537. /package/{v2/skills → skills}/openxiangda-v2/agents/openai.yaml +0 -0
package/lib/open-api.js DELETED
@@ -1,256 +0,0 @@
1
- const crypto = require('crypto');
2
- const fs = require('fs');
3
- const path = require('path');
4
-
5
- const OPEN_API_SPEC_FILE = path.join(
6
- __dirname,
7
- '..',
8
- 'openxiangda-skills',
9
- 'skills',
10
- 'openxiangda-open-api',
11
- 'references',
12
- 'dingtalk-api.openapi.json'
13
- );
14
- const HTTP_METHODS = new Set(['get', 'post', 'put', 'delete', 'patch']);
15
-
16
- function loadOpenApiDocument(file = OPEN_API_SPEC_FILE) {
17
- const document = JSON.parse(fs.readFileSync(file, 'utf8'));
18
- validateOpenApiDocument(document);
19
- return document;
20
- }
21
-
22
- function validateOpenApiDocument(document) {
23
- if (!document || typeof document !== 'object') {
24
- throw new Error('DingTalk OpenAPI document must be a JSON object');
25
- }
26
- if (document.openapi !== '3.0.1') {
27
- throw new Error(`Unsupported DingTalk OpenAPI version: ${document.openapi || 'missing'}`);
28
- }
29
- const operations = collectOperations(document);
30
- if (operations.length === 0) {
31
- throw new Error('DingTalk OpenAPI document contains no operations');
32
- }
33
- const securitySchemes = document.components?.securitySchemes || {};
34
- for (const item of operations) {
35
- const operation = item.operation;
36
- for (const field of ['operationId', 'summary', 'description']) {
37
- if (!String(operation[field] || '').trim()) {
38
- throw new Error(`${item.method.toUpperCase()} ${item.path} is missing ${field}`);
39
- }
40
- }
41
- if (!Array.isArray(operation.tags) || operation.tags.length === 0) {
42
- throw new Error(`${item.method.toUpperCase()} ${item.path} is missing tags`);
43
- }
44
- if (!operation.responses || Object.keys(operation.responses).length === 0) {
45
- throw new Error(`${item.method.toUpperCase()} ${item.path} is missing responses`);
46
- }
47
- for (const requirement of operation.security || []) {
48
- for (const name of Object.keys(requirement)) {
49
- if (!securitySchemes[name]) {
50
- throw new Error(
51
- `${item.method.toUpperCase()} ${item.path} references unknown security scheme ${name}`
52
- );
53
- }
54
- }
55
- }
56
- }
57
- return document;
58
- }
59
-
60
- function collectOperations(document) {
61
- const operations = [];
62
- for (const [routePath, pathItem] of Object.entries(document.paths || {})) {
63
- for (const [method, operation] of Object.entries(pathItem || {})) {
64
- if (!HTTP_METHODS.has(method)) continue;
65
- operations.push({
66
- method,
67
- path: routePath,
68
- operation,
69
- });
70
- }
71
- }
72
- return operations.sort((left, right) =>
73
- `${left.path} ${left.method}`.localeCompare(`${right.path} ${right.method}`)
74
- );
75
- }
76
-
77
- function listOpenApiTags(document) {
78
- const declared = new Map(
79
- (document.tags || []).map(item => [item.name, item.description || ''])
80
- );
81
- for (const { operation } of collectOperations(document)) {
82
- for (const tag of operation.tags || []) {
83
- if (!declared.has(tag)) declared.set(tag, '');
84
- }
85
- }
86
- return [...declared.entries()]
87
- .map(([name, description]) => ({ name, description }))
88
- .sort((left, right) => left.name.localeCompare(right.name));
89
- }
90
-
91
- function listOpenApiOperations(document, options = {}) {
92
- const tag = String(options.tag || '').trim().toLowerCase();
93
- const search = String(options.search || '').trim().toLowerCase();
94
- return collectOperations(document)
95
- .filter(({ operation }) => {
96
- if (!tag) return true;
97
- return (operation.tags || []).some(item => String(item).toLowerCase() === tag);
98
- })
99
- .filter(item => {
100
- if (!search) return true;
101
- return [
102
- item.method,
103
- item.path,
104
- item.operation.operationId,
105
- item.operation.summary,
106
- item.operation.description,
107
- ...(item.operation.tags || []),
108
- ]
109
- .join('\n')
110
- .toLowerCase()
111
- .includes(search);
112
- })
113
- .map(item => ({
114
- method: item.method.toUpperCase(),
115
- path: item.path,
116
- operationId: item.operation.operationId,
117
- summary: item.operation.summary,
118
- tags: item.operation.tags || [],
119
- authenticated: (item.operation.security || []).length > 0,
120
- }));
121
- }
122
-
123
- function describeOpenApiOperation(document, selector, method) {
124
- const normalizedSelector = String(selector || '').trim();
125
- if (!normalizedSelector) {
126
- throw new Error('Missing operationId or path');
127
- }
128
- const normalizedMethod = String(method || '').trim().toLowerCase();
129
- let matches = collectOperations(document).filter(item =>
130
- item.operation.operationId === normalizedSelector || item.path === normalizedSelector
131
- );
132
- if (normalizedMethod) {
133
- matches = matches.filter(item => item.method === normalizedMethod);
134
- }
135
- if (matches.length === 0) {
136
- throw new Error(`Open API operation not found: ${normalizedSelector}`);
137
- }
138
- if (matches.length > 1) {
139
- const methods = matches.map(item => item.method.toUpperCase()).join(', ');
140
- throw new Error(
141
- `Path ${normalizedSelector} has multiple methods (${methods}); pass --method`
142
- );
143
- }
144
-
145
- const { path: routePath, method: operationMethod, operation } = matches[0];
146
- const security = operation.security || [];
147
- const securitySchemeNames = [
148
- ...new Set(security.flatMap(requirement => Object.keys(requirement))),
149
- ];
150
- const securitySchemes = Object.fromEntries(
151
- securitySchemeNames.map(name => [
152
- name,
153
- resolveNode(document.components?.securitySchemes?.[name], document),
154
- ])
155
- );
156
- return {
157
- method: operationMethod.toUpperCase(),
158
- path: routePath,
159
- operationId: operation.operationId,
160
- summary: operation.summary,
161
- description: operation.description,
162
- tags: operation.tags || [],
163
- authenticated: security.length > 0,
164
- security,
165
- securitySchemes,
166
- parameters: resolveNode(operation.parameters || [], document),
167
- requestBody: resolveNode(operation.requestBody || null, document),
168
- responses: resolveNode(operation.responses || {}, document),
169
- source: operation['x-code-source'] || null,
170
- };
171
- }
172
-
173
- function resolveNode(value, document, seen = new Set()) {
174
- if (Array.isArray(value)) {
175
- return value.map(item => resolveNode(item, document, seen));
176
- }
177
- if (!value || typeof value !== 'object') return value;
178
-
179
- if (value.$ref) {
180
- const reference = value.$ref;
181
- if (seen.has(reference)) return { $ref: reference };
182
- const target = resolveJsonPointer(document, reference);
183
- if (!target) return { ...value };
184
- const nextSeen = new Set(seen);
185
- nextSeen.add(reference);
186
- return resolveNode(target, document, nextSeen);
187
- }
188
-
189
- const resolved = {};
190
- for (const [key, item] of Object.entries(value)) {
191
- if (key === 'allOf') continue;
192
- resolved[key] = resolveNode(item, document, seen);
193
- }
194
- if (!Array.isArray(value.allOf)) return resolved;
195
-
196
- const merged = {};
197
- for (const item of value.allOf) {
198
- mergeSchema(merged, resolveNode(item, document, seen));
199
- }
200
- mergeSchema(merged, resolved);
201
- return merged;
202
- }
203
-
204
- function resolveJsonPointer(document, reference) {
205
- if (!String(reference).startsWith('#/')) return null;
206
- return reference
207
- .slice(2)
208
- .split('/')
209
- .map(part => part.replace(/~1/g, '/').replace(/~0/g, '~'))
210
- .reduce((current, part) => current?.[part], document);
211
- }
212
-
213
- function mergeSchema(target, source) {
214
- if (!source || typeof source !== 'object' || Array.isArray(source)) return target;
215
- for (const [key, value] of Object.entries(source)) {
216
- if (key === 'properties' && value && typeof value === 'object') {
217
- target.properties = { ...(target.properties || {}), ...value };
218
- } else if (key === 'required' && Array.isArray(value)) {
219
- target.required = [...new Set([...(target.required || []), ...value])];
220
- } else {
221
- target[key] = value;
222
- }
223
- }
224
- return target;
225
- }
226
-
227
- function redactOpenApiSecret(value, showSecret = false) {
228
- if (showSecret || value === null || value === undefined) return value;
229
- if (Array.isArray(value)) {
230
- return value.map(item => redactOpenApiSecret(item, false));
231
- }
232
- if (typeof value !== 'object') return value;
233
- const result = {};
234
- for (const [key, item] of Object.entries(value)) {
235
- result[key] = /^(appSecret|secret)$/i.test(key)
236
- ? '***redacted***'
237
- : redactOpenApiSecret(item, false);
238
- }
239
- return result;
240
- }
241
-
242
- function sha256File(file) {
243
- return crypto.createHash('sha256').update(fs.readFileSync(file)).digest('hex');
244
- }
245
-
246
- module.exports = {
247
- OPEN_API_SPEC_FILE,
248
- collectOperations,
249
- describeOpenApiOperation,
250
- listOpenApiOperations,
251
- listOpenApiTags,
252
- loadOpenApiDocument,
253
- redactOpenApiSecret,
254
- sha256File,
255
- validateOpenApiDocument,
256
- };
package/lib/policy.js DELETED
@@ -1,137 +0,0 @@
1
- const fs = require('fs');
2
- const path = require('path');
3
-
4
- const POLICY_FILE = path.join(
5
- __dirname,
6
- '..',
7
- 'policy',
8
- 'openxiangda-policy.json'
9
- );
10
- const POLICY_MARKER_PREFIX = 'OpenXiangda-Policy-Version:';
11
- const POLICY_MARKER_FILES = [
12
- 'README.md',
13
- 'openxiangda-skills/SKILL.md',
14
- 'templates/openxiangda-react-spa/AGENTS.md',
15
- 'templates/sy-lowcode-app-workspace/AGENTS.md',
16
- ];
17
-
18
- function loadEngineeringPolicy() {
19
- const policy = JSON.parse(fs.readFileSync(POLICY_FILE, 'utf8'));
20
- validateEngineeringPolicy(policy);
21
- return policy;
22
- }
23
-
24
- function validateEngineeringPolicy(policy) {
25
- const errors = [];
26
- if (policy?.schemaVersion !== 'openxiangda_engineering_policy_v1') {
27
- errors.push('schemaVersion 必须是 openxiangda_engineering_policy_v1');
28
- }
29
- if (!Number.isSafeInteger(policy?.policyVersion) || policy.policyVersion < 1) {
30
- errors.push('policyVersion 必须是正整数');
31
- }
32
- if (policy?.sdd?.verifyIsReadOnly !== true) {
33
- errors.push('sdd.verifyIsReadOnly 必须为 true');
34
- }
35
- if (policy?.git?.requireRemoteMainlineContainment !== true) {
36
- errors.push('git.requireRemoteMainlineContainment 必须为 true');
37
- }
38
- if (policy?.release?.unsupportedGenericMode !== 'fail-closed') {
39
- errors.push('release.unsupportedGenericMode 必须为 fail-closed');
40
- }
41
- if (
42
- policy?.release?.applicationEnvironmentMode !==
43
- 'candidate-preproduction-evidence-production'
44
- ) {
45
- errors.push(
46
- 'release.applicationEnvironmentMode 必须为 candidate-preproduction-evidence-production'
47
- );
48
- }
49
- if (
50
- policy?.release?.candidateImmutable !== true ||
51
- policy?.release?.productionDirectPublish !== false ||
52
- policy?.release?.sameCandidateRequiredForPromotion !== true
53
- ) {
54
- errors.push('应用环境发布必须冻结 candidate、禁止生产直发并同候选晋级');
55
- }
56
- if (
57
- policy?.release?.sealedAuthoredBuildClosure !== true ||
58
- policy?.release?.workspaceNodeModulesDuringExecution !== false ||
59
- policy?.release?.exactResourceFingerprintDiff !== true ||
60
- policy?.release?.deletionsFailClosed !== true ||
61
- policy?.release?.attemptFencing !== true ||
62
- policy?.release?.crossMachineBindingReplay !== true ||
63
- policy?.release?.deterministicRuntimeBuildIdentity !==
64
- 'runtime-layer-plus-package-digest' ||
65
- policy?.release?.deterministicRuntimeUploadedReleaseReuse !==
66
- 'exact-content-source-parent-only' ||
67
- policy?.release?.statusAutoResolvesEnvironment !== true
68
- ) {
69
- errors.push(
70
- 'Delivery V2 必须启用密封构建、精确差异、删除关闭、attempt 隔离、跨机器绑定恢复、Runtime 包级身份与严格恢复,以及环境自动解析'
71
- );
72
- }
73
- const ttl = Number(policy?.ownership?.defaultTtlSeconds);
74
- if (!Number.isSafeInteger(ttl) || ttl < 300 || ttl > 86400) {
75
- errors.push('ownership.defaultTtlSeconds 必须在 300-86400 之间');
76
- }
77
- if (errors.length > 0) {
78
- const error = new Error(`OPENXIANGDA_POLICY_INVALID: ${errors.join('; ')}`);
79
- error.code = 'OPENXIANGDA_POLICY_INVALID';
80
- error.errors = errors;
81
- throw error;
82
- }
83
- return policy;
84
- }
85
-
86
- function checkEngineeringPolicyMarkers(options = {}) {
87
- const root = path.resolve(options.root || path.join(__dirname, '..'));
88
- const policy = loadEngineeringPolicy();
89
- const expected = `${POLICY_MARKER_PREFIX} ${policy.policyVersion}`;
90
- const files = POLICY_MARKER_FILES.map(relativePath => {
91
- const file = path.join(root, relativePath);
92
- const exists = fs.existsSync(file);
93
- const content = exists ? fs.readFileSync(file, 'utf8') : '';
94
- return {
95
- file: relativePath,
96
- exists,
97
- synchronized: exists && content.includes(expected),
98
- };
99
- });
100
- return {
101
- valid: files.every(item => item.synchronized),
102
- policyVersion: policy.policyVersion,
103
- expectedMarker: expected,
104
- files,
105
- };
106
- }
107
-
108
- function renderEngineeringPolicyMarkdown(policy = loadEngineeringPolicy()) {
109
- return [
110
- `<!-- ${POLICY_MARKER_PREFIX} ${policy.policyVersion} -->`,
111
- `Policy v${policy.policyVersion}:`,
112
- '',
113
- `- 风险按 ${policy.risk.classifyBy.join('、')} 分级;目录只作信号。`,
114
- '- SDD verify 只读;Markdown 是按需派生视图。',
115
- `- Delivery V${policy.release.normalDeliveryVersion} 是正常发布入口:${policy.release.normalCommands.join(
116
- ' / '
117
- )};生产只消费预发验证过的封存包,ReleaseRun 与检查点由平台持久化。`,
118
- '- Delivery V2 信任平台开发者,不要求 SDD、Git 主线、`--change` 或 `--only`;下列 V1 规则只保留兼容性。',
119
- '- Delivery V2 authored build 使用 CLI 密封工具链且不链接工作区 node_modules;按资源指纹计算精确范围,删除在写入前失败关闭。',
120
- '- ReleaseRun retry 以 attempt 隔离旧执行器,并在另一台机器安全重建本地 Form 绑定;status/retry 可自动定位预发或生产环境。',
121
- '- 平台仓库直接开发权威 master;应用任务可用独立 worktree,但只从干净、已推送的权威主线发布。',
122
- '- 应用任务在主线发布和 release end 后从 canonical 主工作区执行 workspace cleanup;只删除已合并、干净、无 owner 和发布私有状态的 SAFE worktree/本地分支。',
123
- '- 环境托管应用冻结不可变 candidate,先部署预发并提交有效测试证据,再将同一 candidate 晋级生产;禁止生产直发。',
124
- `- 原子 child:${policy.release.atomicChildren.join(', ')}。`,
125
- `- 尚无 staged child 的通用资源必须 ${policy.release.unsupportedGenericMode};维护直发必须显式选择并展示影响范围。`,
126
- `- 激活后的副作用进入 ${policy.release.postCommitMode}。`,
127
- ].join('\n');
128
- }
129
-
130
- module.exports = {
131
- POLICY_FILE,
132
- POLICY_MARKER_FILES,
133
- checkEngineeringPolicyMarkers,
134
- loadEngineeringPolicy,
135
- renderEngineeringPolicyMarkdown,
136
- validateEngineeringPolicy,
137
- };
@@ -1,98 +0,0 @@
1
- const HEADER_NAMES = Object.freeze({
2
- publishLeaseId: 'x-openxiangda-publish-lease-id',
3
- changeBaselineId: 'x-openxiangda-change-baseline-id',
4
- changeId: 'x-openxiangda-change-id',
5
- clientSessionId: 'x-openxiangda-client-session-id',
6
- });
7
-
8
- const ENV_NAMES = Object.freeze({
9
- publishLeaseId: 'OPENXIANGDA_PUBLISH_LEASE_ID',
10
- changeBaselineId: 'OPENXIANGDA_CHANGE_BASELINE_ID',
11
- changeId: 'OPENXIANGDA_CHANGE_ID',
12
- clientSessionId: 'OPENXIANGDA_CLIENT_SESSION_ID',
13
- });
14
-
15
- function normalizePublishContext(value, options = {}) {
16
- if (!value || typeof value !== 'object' || Array.isArray(value)) return null;
17
- const context = {
18
- appType: normalizeOptionalString(value.appType),
19
- profileName: normalizeOptionalString(value.profileName || value.profile),
20
- publishLeaseId: normalizeOptionalString(
21
- value.publishLeaseId || value.leaseId
22
- ),
23
- changeBaselineId: normalizeOptionalString(
24
- value.changeBaselineId || value.baselineId
25
- ),
26
- changeId: normalizeOptionalString(value.changeId),
27
- clientSessionId: normalizeOptionalString(value.clientSessionId),
28
- };
29
- if (options.requireComplete) assertCompletePublishContext(context);
30
- return context;
31
- }
32
-
33
- function assertCompletePublishContext(value) {
34
- const context = normalizePublishContext(value) || {};
35
- const missing = [];
36
- if (!context.publishLeaseId) missing.push('publishLeaseId');
37
- if (!context.changeBaselineId) missing.push('changeBaselineId');
38
- if (!context.changeId) missing.push('changeId');
39
- if (!context.clientSessionId) missing.push('clientSessionId');
40
- if (missing.length > 0) {
41
- const error = new Error(
42
- `发布上下文不完整,缺少 ${missing.join(', ')};请先执行 openxiangda release begin --change <id>`
43
- );
44
- error.code = 'PUBLISH_CONTEXT_REQUIRED';
45
- error.missing = missing;
46
- throw error;
47
- }
48
- return context;
49
- }
50
-
51
- function buildPublishContextHeaders(value, options = {}) {
52
- const context = options.requireComplete
53
- ? assertCompletePublishContext(value)
54
- : normalizePublishContext(value);
55
- if (!context) return {};
56
- return compactMappedValues(context, HEADER_NAMES);
57
- }
58
-
59
- function buildPublishContextEnv(value, options = {}) {
60
- const context = options.requireComplete
61
- ? assertCompletePublishContext(value)
62
- : normalizePublishContext(value);
63
- if (!context) return {};
64
- return compactMappedValues(context, ENV_NAMES);
65
- }
66
-
67
- function readPublishContextEnv(env = process.env) {
68
- return normalizePublishContext({
69
- publishLeaseId: env?.[ENV_NAMES.publishLeaseId],
70
- changeBaselineId: env?.[ENV_NAMES.changeBaselineId],
71
- changeId: env?.[ENV_NAMES.changeId],
72
- clientSessionId: env?.[ENV_NAMES.clientSessionId],
73
- });
74
- }
75
-
76
- function compactMappedValues(context, names) {
77
- const entries = [];
78
- for (const [field, outputName] of Object.entries(names)) {
79
- const value = normalizeOptionalString(context[field]);
80
- if (value) entries.push([outputName, value]);
81
- }
82
- return Object.fromEntries(entries);
83
- }
84
-
85
- function normalizeOptionalString(value) {
86
- const text = String(value === undefined || value === null ? '' : value).trim();
87
- return text || null;
88
- }
89
-
90
- module.exports = {
91
- ENV_NAMES,
92
- HEADER_NAMES,
93
- assertCompletePublishContext,
94
- buildPublishContextEnv,
95
- buildPublishContextHeaders,
96
- normalizePublishContext,
97
- readPublishContextEnv,
98
- };
@@ -1,182 +0,0 @@
1
- const DEFAULT_HEARTBEAT_INTERVAL_MS = 30_000;
2
- const DEFAULT_RENEW_WINDOW_MS = 60_000;
3
-
4
- class PublishLeaseLostError extends Error {
5
- constructor(message, cause) {
6
- const detail = String(
7
- message || '应用发布租约已丢失,已停止后续写入。'
8
- );
9
- super(
10
- detail.startsWith('PUBLISH_LEASE_LOST:')
11
- ? detail
12
- : `PUBLISH_LEASE_LOST: ${detail}`
13
- );
14
- this.name = 'PublishLeaseLostError';
15
- this.code = 'PUBLISH_LEASE_LOST';
16
- if (cause !== undefined) this.cause = cause;
17
- }
18
- }
19
-
20
- class PublishLeaseHeartbeat {
21
- constructor(options = {}) {
22
- if (typeof options.renew !== 'function') {
23
- throw new TypeError('publish lease heartbeat renew 必须是函数');
24
- }
25
- this.lease = options.lease || null;
26
- this.renew = options.renew;
27
- this.now = options.now || Date.now;
28
- this.intervalMs = normalizePositiveInteger(
29
- options.intervalMs,
30
- DEFAULT_HEARTBEAT_INTERVAL_MS
31
- );
32
- this.renewWindowMs = normalizePositiveInteger(
33
- options.renewWindowMs,
34
- DEFAULT_RENEW_WINDOW_MS
35
- );
36
- this.setInterval = options.setInterval || global.setInterval;
37
- this.clearInterval = options.clearInterval || global.clearInterval;
38
- this.onRenew =
39
- typeof options.onRenew === 'function' ? options.onRenew : () => {};
40
- this.onLost =
41
- typeof options.onLost === 'function' ? options.onLost : () => {};
42
- this.timer = null;
43
- this.inFlight = null;
44
- this.lostError = null;
45
- this.stopped = false;
46
- }
47
-
48
- start() {
49
- if (this.stopped || this.timer) return this;
50
- this.timer = this.setInterval(() => {
51
- void this.tick();
52
- }, this.intervalMs);
53
- this.timer?.unref?.();
54
- return this;
55
- }
56
-
57
- setLease(lease) {
58
- if (!lease?.leaseId) {
59
- throw new TypeError('publish lease heartbeat lease 缺少 leaseId');
60
- }
61
- if (
62
- this.lease?.leaseId &&
63
- String(lease.leaseId) !== String(this.lease.leaseId)
64
- ) {
65
- throw new TypeError('不能把 heartbeat 切换到另一条 publish lease');
66
- }
67
- this.lease = lease;
68
- return this.lease;
69
- }
70
-
71
- async tick() {
72
- if (this.stopped || this.lostError || !this.shouldRenew()) return this.lease;
73
- try {
74
- return await this.renewOnce();
75
- } catch {
76
- return null;
77
- }
78
- }
79
-
80
- async beforeWrite(options = {}) {
81
- this.assertHealthy();
82
- if (options.forceRenew || this.shouldRenew()) {
83
- await this.renewOnce();
84
- }
85
- this.assertHealthy();
86
- return this.lease;
87
- }
88
-
89
- shouldRenew() {
90
- const expiresAt = new Date(this.lease?.expiresAt || 0).getTime();
91
- if (!Number.isFinite(expiresAt) || expiresAt <= 0) return true;
92
- return expiresAt - Number(this.now()) <= this.renewWindowMs;
93
- }
94
-
95
- async renewOnce() {
96
- this.assertHealthy();
97
- if (this.stopped) {
98
- throw this.markLost(
99
- new Error('publish lease heartbeat 已停止,不能继续续租')
100
- );
101
- }
102
- if (this.inFlight) return await this.inFlight;
103
-
104
- this.inFlight = Promise.resolve()
105
- .then(() => this.renew(this.lease))
106
- .then(nextLease => {
107
- if (!nextLease?.leaseId || !nextLease?.expiresAt) {
108
- throw new Error('续租响应缺少 leaseId 或 expiresAt');
109
- }
110
- if (
111
- this.lease?.leaseId &&
112
- String(nextLease.leaseId) !== String(this.lease.leaseId)
113
- ) {
114
- throw new Error('续租响应 leaseId 与当前租约不一致');
115
- }
116
- this.lease = nextLease;
117
- this.onRenew(nextLease);
118
- return nextLease;
119
- })
120
- .catch(error => {
121
- throw this.markLost(error);
122
- })
123
- .finally(() => {
124
- this.inFlight = null;
125
- });
126
- return await this.inFlight;
127
- }
128
-
129
- assertHealthy() {
130
- if (this.lostError) throw this.lostError;
131
- }
132
-
133
- markLost(cause) {
134
- if (!this.lostError) {
135
- const detail = String(cause?.message || cause || '').trim();
136
- this.lostError = new PublishLeaseLostError(
137
- detail
138
- ? `应用发布租约续期失败,已停止后续写入:${detail}`
139
- : undefined,
140
- cause
141
- );
142
- try {
143
- this.onLost(this.lostError);
144
- } catch {
145
- // Observability callbacks must not replace the stable safety error.
146
- }
147
- }
148
- return this.lostError;
149
- }
150
-
151
- async stop() {
152
- if (this.timer) {
153
- this.clearInterval(this.timer);
154
- this.timer = null;
155
- }
156
- this.stopped = true;
157
- if (this.inFlight) {
158
- try {
159
- await this.inFlight;
160
- } catch {
161
- // The caller can inspect the stable error with assertHealthy().
162
- }
163
- }
164
- }
165
- }
166
-
167
- function normalizePositiveInteger(value, fallback) {
168
- const numeric = Number(value);
169
- return Number.isSafeInteger(numeric) && numeric > 0 ? numeric : fallback;
170
- }
171
-
172
- function createPublishLeaseHeartbeat(options) {
173
- return new PublishLeaseHeartbeat(options);
174
- }
175
-
176
- module.exports = {
177
- DEFAULT_HEARTBEAT_INTERVAL_MS,
178
- DEFAULT_RENEW_WINDOW_MS,
179
- PublishLeaseHeartbeat,
180
- PublishLeaseLostError,
181
- createPublishLeaseHeartbeat,
182
- };