openxiangda 1.0.264 → 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 -666
  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 -226
  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 -224
  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 -3202
  283. package/packages/sdk/dist/runtime/react.d.ts +0 -3202
  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 -192
  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 -158
  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
@@ -1,668 +0,0 @@
1
- const DESIGN_GATE_HARD_RULE =
2
- '架构类需求默认只规划、不实现;用户明确确认设计后,才允许改文件、写平台资源或发布。';
3
-
4
- const DESIGN_GATE_TOPICS = [
5
- {
6
- code: 'new-app',
7
- title: '新应用 / 大版本应用',
8
- triggers: ['新应用', '从零搭建', '门户', '后台系统', '管理系统', '业务系统'],
9
- mustAsk: [
10
- '目标用户是谁,内部用户和外部用户是否都存在',
11
- '核心对象和主流程是什么,哪些对象需要表单、data-view 或 App Function',
12
- '是否需要登录注册、公开访问、组织内权限分层',
13
- '首屏是工作台、列表、表单、公开页还是仪表盘',
14
- '是否需要集成外部系统、通知、流程自动化',
15
- ],
16
- recommendedDefaults: [
17
- 'React SPA runtime,路由用 src/resources/routes 声明',
18
- '多资源正式开发走 src/resources/** + resource plan/publish',
19
- '先输出应用地图、资源清单、权限矩阵、验收用例,再实现',
20
- ],
21
- antiPatterns: [
22
- '先创建页面再回头补权限和数据模型',
23
- '把公开访问写成旧版 ?publicAccess=guest 链接',
24
- '用页面本地状态模拟应落库的数据',
25
- ],
26
- acceptance: [
27
- '用户确认资源边界和权限策略',
28
- 'resource validate/plan 无错误',
29
- '关键公开、登录、权限拒绝路径都有验收步骤',
30
- ],
31
- },
32
- {
33
- code: 'complex-page',
34
- title: '复杂页面 / 工作台 / Dashboard',
35
- triggers: ['复杂页面', '看板', '工作台', '详情页', '列表页', '移动端', '大屏'],
36
- mustAsk: [
37
- '页面的主任务、最高频操作、首屏信息密度',
38
- '数据来自表单直读、data-view 聚合、App Function 还是连接器',
39
- '是否需要编辑、批量操作、导入导出、移动端适配',
40
- '各角色能看哪些模块和字段',
41
- '加载、空状态、失败重试和越权状态如何呈现',
42
- ],
43
- recommendedDefaults: [
44
- '读取类复杂列表优先用 data-view,跨表逻辑优先 App Function',
45
- '管理后台采用紧凑、可扫描布局,避免营销式 hero',
46
- '页面路由和菜单分离声明,页面权限单独验收',
47
- ],
48
- antiPatterns: [
49
- '直接在前端拼接跨表权限逻辑',
50
- '宽泛授予表单全部数据再靠 UI 隐藏',
51
- '移动端只靠桌面页面缩放',
52
- ],
53
- acceptance: [
54
- '不同角色打开页面看到的模块符合权限矩阵',
55
- '无数据、错误、越权、加载状态可用',
56
- '公开页面不依赖 PageProvider 私有页面上下文',
57
- ],
58
- },
59
- {
60
- code: 'auth',
61
- title: '登录 / 注册 / 账号绑定',
62
- triggers: ['登录', '注册', '手机号', '验证码', '外部账号', '账号绑定', 'SSO'],
63
- mustAsk: [
64
- '用户来源是平台组织用户、应用自注册用户、外部账号还是混合',
65
- '登录方式:密码、手机号验证码、第三方 SSO、免登 ticket',
66
- '注册策略:开放注册、邀请码、管理员审核、禁止注册',
67
- '账号和组织用户如何匹配:手机号、邮箱、工号、外部 ID',
68
- '失败、冻结、解绑、找回密码的处理边界',
69
- ],
70
- recommendedDefaults: [
71
- '用 src/resources/auth/*.json 声明 auth-config',
72
- '默认 registration.mode=reject,除非用户确认开放注册',
73
- '验证码发送优先由显式 grant 的 App Function/连接器承接',
74
- ],
75
- antiPatterns: [
76
- '前端自行保存明文密码或验证码',
77
- '未确认注册策略就开放外部用户写入',
78
- '把登录页和公开访问页混为同一权限模型',
79
- ],
80
- acceptance: [
81
- 'auth-config methods 与实际登录页参数一致',
82
- '未登录访问内部路由会跳登录或拒绝',
83
- '注册/绑定失败有明确错误码和文案',
84
- ],
85
- },
86
- {
87
- code: 'public-access',
88
- title: '公开访问 / 外部人员无需登录',
89
- triggers: ['公开访问', '无需登录', '外部人员', '游客', '报名', '公开查询', '分享链接'],
90
- mustAsk: [
91
- '公开的是哪些 route,是否仅 /view/:appType/public/*',
92
- '外部角色有哪些,是否只读、可提交表单、可调用函数或连接器',
93
- '是否需要 ticket:一次性、有效期、绑定手机号/邮箱、签名来源',
94
- '允许访问哪些 form、data-view、function、connector grant',
95
- '是否需要限流、过期时间、审计字段和回收策略',
96
- ],
97
- recommendedDefaults: [
98
- '新 React SPA 仅使用 /view/:appType/public/* + routes + public-access policy + PublicAccessGate',
99
- '普通公开页用 scoped public session;敏感页用 ticket 模式',
100
- '未显式 grant 的 form/dataView/function/connector 一律拒绝',
101
- ],
102
- antiPatterns: [
103
- '新应用继续使用 ?publicAccess=guest',
104
- '给游客账号平台级宽权限',
105
- '公开页读取内部 data-view 但没有 public-access grant',
106
- ],
107
- acceptance: [
108
- '无登录直接打开公开 route 成功获得 scoped public session',
109
- '允许的 form/data-view/function/connector 可访问',
110
- '未 grant 的内部路由和资源返回拒绝,ticket 缺失/过期也拒绝',
111
- ],
112
- },
113
- {
114
- code: 'permissions',
115
- title: '账号 / 角色 / 页面权限 / 表单数据范围',
116
- triggers: ['权限', '角色', 'RBAC', '账号权限', '平台账号', '组织账号', '角色治理', '数据范围', '业务范围', 'scope_policy', '只看自己', '部门数据', '页面权限', '字段权限', '查询参数权限'],
117
- mustAsk: [
118
- '权限模式选择:managed-platform-account、existing-platform-user-assignment、static-role-permission、query-param-context 中哪一种,为什么',
119
- '账号来源是什么:应用创建平台账号/部门、选择已有平台用户、固定角色成员,还是仅使用低风险查询参数上下文',
120
- '是否创建或维护平台账号/部门;如果是,哪些 App Function/organization SDK 负责创建、更新、重置密码和同步审计',
121
- '角色成员如何维护:角色分配表、平台角色手工维护、静态 roles manifest、还是公开访问 externalRoleCodes',
122
- '业务范围是否来自应用表单:用户/角色到客户、项目、区域、门店、学院、班级等授权关系是否需要 scopeDimensions、scopeGrantSources、dataScopePolicies',
123
- '业务范围数量是否超过少量固定枚举;如果会增长到几十/上百个对象,是否采用 scope_policy 而不是为每个对象建角色/权限组',
124
- '哪些角色可以设置应用角色、分配角色成员、给角色分配接口权限;这些角色是否需要 `app:role:manage`',
125
- '哪些角色可以维护页面权限组、表单权限组、组织账号;是否需要 `app:page-permission-group:manage`、`app:form-permission-group:manage`、`app:organization:manage`',
126
- '业务范围字段是什么,哪些可见字段需要派生隐藏 scalar key 供表单权限条件匹配',
127
- '每个角色的 action matrix 是什么:view/create/edit/delete/export/import/change_records/workflow 是否分别授权',
128
- '导出/导入是否独立授权;导出范围是否与 view 范围不同,导入是否还需要逐行 create 范围校验',
129
- 'create 是否需要 scope_policy 校验提交数据,防止新增到未授权业务范围',
130
- '页面/菜单/路由、表单 actions/fieldAccessPolicy/dataPermission/scope_policy 的权限矩阵如何落到 resources',
131
- '查询参数是否参与授权;如果参与,只能做上下文、筛选或 ticket 输入,敏感数据必须由 public-access grant、角色、表单权限组或 App Function 校验',
132
- '验收时需要模拟哪些角色、账号状态、业务范围、查询参数篡改和拒绝场景',
133
- ],
134
- recommendedDefaults: [
135
- '正式后台优先选择 managed-platform-account;如果平台账号已存在,选择 existing-platform-user-assignment;固定内部门户选择 static-role-permission',
136
- 'query-param-context 仅用于低风险页面上下文、筛选条件或公开 ticket 输入,不作为敏感数据授权依据',
137
- '角色写 src/resources/roles,页面组写 permissions/page-groups,表单组写 permissions/form-groups,显式声明 actions/dataPermission/fieldAccessPolicy;平台内部仍兼容存储为 operations',
138
- '复杂业务范围优先写 permissions/scope-dimensions、permissions/scope-grant-sources、permissions/data-scope-policies,并在表单权限组或 data-view 权限组使用 dataPermission.type=scope_policy;授权来源默认 syncMode=on_write,由平台在来源表单写入后自动物化',
139
- 'scope_policy 只表达数据范围,actions 表达操作能力;按钮隐藏只是 UX,后端 action check 才是权威',
140
- 'scope_policy 默认语义是个人授权 + 当前应用角色授权;多维 rules 显式 AND;空授权集合拒绝;管理员绕过但可审计',
141
- '能管理角色或给别人分配角色的应用角色必须在 roles manifest 声明 apiPermissionCodes;至少包含 app:role:manage,按需加入 app:page-permission-group:manage、app:form-permission-group:manage、app:organization:manage',
142
- '由校区管理员等委托管理员创建的新角色,如果还具备继续管理账号/角色/权限的能力,也必须同步声明并发布对应 apiPermissionCodes',
143
- '账号治理闭环使用 organization_unit、system_account、role_assignment 等业务表,加 roles、page groups、form groups、sync App Functions 和 PermissionBoundary',
144
- '平台账号创建、更新、重置密码只走 sdk.organization/ctx.organization;操作者必须具备 app:organization:manage',
145
- '公开访问不要复用内部管理员权限组;公开数据仍需 public-access grants 与外部角色权限组双重覆盖',
146
- ],
147
- antiPatterns: [
148
- '不能只做前端权限隐藏,必须有后端角色、表单权限组、public-access grant 或 App Function 校验',
149
- '查询参数不能作为敏感授权依据,只能作为上下文、筛选或 ticket 输入',
150
- '只配菜单可见,不配后端数据权限',
151
- '只隐藏按钮但没有表单权限组 actions 或 App Function 服务端校验',
152
- '为了省事授予全部数据再在前端过滤',
153
- '为每个客户/项目/区域/学院/班级/门店创建一个角色或一个权限组',
154
- '把应用表单里的业务范围强行同步成平台部门、平台角色或大量权限组',
155
- '用数据冗余字段 + 成百上千个权限组表达动态业务授权',
156
- '在页面里硬编码角色、账号、部门或权限范围',
157
- '只给用户挂业务角色但没有给该角色绑定角色设置接口权限,导致后续新增账号/角色时运行时报无权限',
158
- '让普通管理员创建带管理能力的新角色,但没有同时发布新角色的 apiPermissionCodes',
159
- '前端模拟权限通过、mock role、假账号、假 ID 或空数组兜底',
160
- '直接绕过 SDK 调平台账号/组织写接口,或用旧 /user、/department 接口写账号',
161
- '公开角色和内部角色混用',
162
- ],
163
- acceptance: [
164
- 'permission audit 输出无高危缺口',
165
- '业务范围超过少量枚举时,resource validate/permission audit 不再出现权限组爆炸 warning,scope explain 能说明用户、当前角色、命中授权、缓存状态和最终策略',
166
- '设计文档写明权限模式、账号来源、角色成员来源和权限矩阵',
167
- '角色资源中声明了管理型角色的 apiPermissionCodes,并说明由谁首次授予',
168
- '内部角色允许项可用,未授权项拒绝',
169
- '用非授权角色验证角色创建/成员分配/权限组维护会被拒绝,用授权角色验证可成功',
170
- '敏感 App Function 包含服务端 role/scope checks,且不信任页面传入的 roleCodes',
171
- '平台账号治理路径验证当前操作者拥有 app:organization:manage',
172
- '查询参数篡改不会扩大敏感数据访问范围',
173
- '公开访问受 public-access grant 和权限组双重约束',
174
- ],
175
- },
176
- {
177
- code: 'workflow-automation',
178
- title: '流程 / 自动化 / App Function',
179
- triggers: ['流程', '审批', '自动化', '定时', 'App Function', 'JS_CODE', '函数'],
180
- mustAsk: [
181
- '触发来源:表单提交、状态变化、定时、手动按钮、公开访问',
182
- '节点输入输出、失败重试、幂等键和日志保留',
183
- '函数需要访问哪些 forms/dataViews/connectors',
184
- '是否需要人工审批、通知、回写表单或调用外部系统',
185
- '测试用例包含成功、失败、重复触发、越权调用哪些场景',
186
- ],
187
- recommendedDefaults: [
188
- '函数源码放 src/functions/<code>/index.ts 或对应模板约定目录',
189
- 'definitionJson 中通过 resources 声明依赖,发布时自动绑定',
190
- '公开调用函数必须通过 public-access grants.functions 显式开放',
191
- ],
192
- antiPatterns: [
193
- '函数里硬编码 formUuid 或外部密钥',
194
- '忽略重复触发导致重复写入或重复通知',
195
- '公开页面直接调用未 grant 的内部函数',
196
- ],
197
- acceptance: [
198
- '函数 invoke 测试 envelope 成功,失败码会被识别',
199
- '自动化 executions/logs 可追踪',
200
- '重复触发不会产生重复副作用',
201
- ],
202
- },
203
- {
204
- code: 'connector-notification',
205
- title: '连接器 / 通知 / 外部集成',
206
- triggers: ['连接器', '第三方接口', '通知', '消息', 'Webhook', '短信', '钉钉'],
207
- mustAsk: [
208
- '外部接口域名、鉴权方式、超时、重试、脱敏要求',
209
- '哪些 connector API 允许内部调用,哪些允许公开访问调用',
210
- '通知类型、模板变量、渠道、接收人解析方式',
211
- '失败降级:重试、人工补偿、只记日志还是阻断主流程',
212
- '是否需要 preview/send/batch-send 的验收样例',
213
- ],
214
- recommendedDefaults: [
215
- '连接器写 src/resources/connectors,通知写 src/resources/notifications',
216
- '复杂写入通过 App Function 包装,连接器只做外部通信',
217
- '公开访问连接器必须显式 grants.connectors,并限制 API 粒度',
218
- ],
219
- antiPatterns: [
220
- '把密钥写入前端或公开 manifest',
221
- '只看 HTTP 200,不检查 JSON envelope 错误码',
222
- '通知模板变量和实际 send body 不一致',
223
- ],
224
- acceptance: [
225
- 'connector invoke/download-test 请求 body 与 SDK DTO 一致',
226
- 'notification preview/send 能用真实模板变量',
227
- 'PUBLIC_GRANT_DENIED 等业务错误码被当作失败',
228
- ],
229
- },
230
- {
231
- code: 'resource-maintenance',
232
- title: '资源维护 / 小步修复',
233
- triggers: ['改一个资源', '补路由', '调整权限', '修复菜单', '删除配置', '同步 manifest'],
234
- mustAsk: [
235
- '这是临时 live mutation,还是要同步到仓库 manifest',
236
- '是否允许删除、覆盖、发送通知等高风险操作',
237
- '影响哪些 profile/appType,是否覆盖 workspace binding',
238
- '是否需要先 pull/plan/audit 再写入',
239
- ],
240
- recommendedDefaults: [
241
- '多资源正式变更仍走 resource plan/publish',
242
- '直接 CLI 写平台资源时加 --write-manifest 防漂移',
243
- '删除、发送、覆盖前需要 --force',
244
- ],
245
- antiPatterns: [
246
- '手写未知 HTTP 绕过 CLI',
247
- '平台改了但 src/resources 没同步',
248
- '不传 profile/app-type 就在错误应用上写资源',
249
- ],
250
- acceptance: [
251
- 'dry-run 能展示 method/path/body',
252
- '成功写入后 state 和 manifest 同步',
253
- 'commands --json 可发现相应资源命令',
254
- ],
255
- },
256
- ];
257
-
258
- const DESIGN_GATE_TOPIC_ALIASES = {
259
- app: 'new-app',
260
- application: 'new-app',
261
- dashboard: 'complex-page',
262
- page: 'complex-page',
263
- pages: 'complex-page',
264
- login: 'auth',
265
- register: 'auth',
266
- registration: 'auth',
267
- sso: 'auth',
268
- public: 'public-access',
269
- guest: 'public-access',
270
- visitor: 'public-access',
271
- visitors: 'public-access',
272
- permission: 'permissions',
273
- role: 'permissions',
274
- roles: 'permissions',
275
- rbac: 'permissions',
276
- 'role-governance': 'permissions',
277
- 'account-permission': 'permissions',
278
- 'organization-account': 'permissions',
279
- 'org-account': 'permissions',
280
- 'account-role': 'permissions',
281
- 'query-param-permission': 'permissions',
282
- workflow: 'workflow-automation',
283
- automation: 'workflow-automation',
284
- function: 'workflow-automation',
285
- functions: 'workflow-automation',
286
- 'app-function': 'workflow-automation',
287
- js_code: 'workflow-automation',
288
- jscode: 'workflow-automation',
289
- connector: 'connector-notification',
290
- connectors: 'connector-notification',
291
- notification: 'connector-notification',
292
- notifications: 'connector-notification',
293
- integration: 'connector-notification',
294
- integrations: 'connector-notification',
295
- webhook: 'connector-notification',
296
- resource: 'resource-maintenance',
297
- resources: 'resource-maintenance',
298
- maintenance: 'resource-maintenance',
299
- };
300
-
301
- function resolveTopicSelection(topicCode) {
302
- if (!topicCode || topicCode === 'all') {
303
- return { requested: ['all'], wanted: null, unknown: [] };
304
- }
305
- const knownCodes = new Set(DESIGN_GATE_TOPICS.map(topic => topic.code));
306
- const requested = String(topicCode)
307
- .split(/[,/|+\s]+/)
308
- .map(item => item.trim())
309
- .filter(Boolean);
310
- const wanted = new Set();
311
- const unknown = [];
312
- for (const item of requested) {
313
- const normalized = item.toLowerCase();
314
- const code = DESIGN_GATE_TOPIC_ALIASES[normalized] || normalized;
315
- if (knownCodes.has(code)) {
316
- wanted.add(code);
317
- } else {
318
- unknown.push(item);
319
- }
320
- }
321
- return { requested, wanted, unknown };
322
- }
323
-
324
- function selectTopics(topicCode) {
325
- const selection = resolveTopicSelection(topicCode);
326
- if (!selection.wanted) return DESIGN_GATE_TOPICS;
327
- return DESIGN_GATE_TOPICS.filter(topic => selection.wanted.has(topic.code));
328
- }
329
-
330
- function getDesignGates(topicCode) {
331
- const selection = resolveTopicSelection(topicCode);
332
- return {
333
- hardRule: DESIGN_GATE_HARD_RULE,
334
- requestedTopics: selection.requested,
335
- unknownTopics: selection.unknown,
336
- topics: selectTopics(topicCode),
337
- };
338
- }
339
-
340
- function getDesignTopicCatalog() {
341
- return {
342
- hardRule: DESIGN_GATE_HARD_RULE,
343
- topics: DESIGN_GATE_TOPICS.map(topic => ({
344
- code: topic.code,
345
- title: topic.title,
346
- triggers: topic.triggers,
347
- })),
348
- aliases: DESIGN_GATE_TOPIC_ALIASES,
349
- };
350
- }
351
-
352
- function renderDesignHelp() {
353
- const catalog = getDesignTopicCatalog();
354
- const lines = [
355
- '用法: openxiangda design gates|template|review [--topic code[,code...]] [--json]',
356
- '',
357
- catalog.hardRule,
358
- '',
359
- 'Topics:',
360
- ];
361
- for (const topic of catalog.topics) {
362
- lines.push(`- ${topic.code}: ${topic.title} (${topic.triggers.join('、')})`);
363
- }
364
- lines.push('', 'Aliases:');
365
- for (const [alias, code] of Object.entries(catalog.aliases).sort()) {
366
- lines.push(`- ${alias} -> ${code}`);
367
- }
368
- return lines.join('\n');
369
- }
370
-
371
- function renderDesignGatesText(topicCode) {
372
- const gates = getDesignGates(topicCode);
373
- const lines = [gates.hardRule, ''];
374
- for (const topic of gates.topics) {
375
- lines.push(`# ${topic.code}: ${topic.title}`);
376
- lines.push(`触发词: ${topic.triggers.join('、')}`);
377
- lines.push(`必须提问: ${topic.mustAsk.join(';')}`);
378
- lines.push(`推荐默认: ${topic.recommendedDefaults.join(';')}`);
379
- lines.push(`反模式: ${topic.antiPatterns.join(';')}`);
380
- lines.push(`验收: ${topic.acceptance.join(';')}`);
381
- lines.push('');
382
- }
383
- return lines.join('\n').trimEnd();
384
- }
385
-
386
- function renderDesignTemplate(topicCode) {
387
- const gates = getDesignGates(topicCode);
388
- const lines = [
389
- '# OpenXiangda 架构设计确认稿',
390
- '',
391
- `> ${gates.hardRule}`,
392
- '> 本稿确认前,只允许读取、快照、dry-run、提问和输出设计。',
393
- '',
394
- '## 1. 需求边界',
395
- '- 目标用户:',
396
- '- 内部/外部访问:',
397
- '- 核心对象与流程:',
398
- '- 明确不做:',
399
- '',
400
- '## 2. 推荐方案',
401
- '- Runtime:React SPA',
402
- '- 资源发布:src/resources/** + openxiangda resource plan/publish',
403
- '- 公开访问:仅使用 /view/:appType/public/* + routes + public-access policy + PublicAccessGate',
404
- '',
405
- '## 3. 待确认问题',
406
- ];
407
- for (const topic of gates.topics) {
408
- lines.push(`### ${topic.title}`);
409
- for (const question of topic.mustAsk) {
410
- lines.push(`- [ ] ${question}`);
411
- }
412
- }
413
- lines.push(
414
- '',
415
- '## 4. 资源设计',
416
- '- routes:',
417
- '- public-access:',
418
- '- auth-config:',
419
- '- roles/page-groups/form-groups:',
420
- '- forms/data-views/functions/connectors/notifications:',
421
- '',
422
- '## 5. 验收清单',
423
- );
424
- for (const topic of gates.topics) {
425
- for (const item of topic.acceptance) {
426
- lines.push(`- [ ] ${item}`);
427
- }
428
- }
429
- lines.push('', '## 6. 用户确认', '- [ ] 用户确认后再进入实现。');
430
- return lines.join('\n');
431
- }
432
-
433
- const RESOURCE_EXPLAINS = {
434
- route: {
435
- dir: 'src/resources/routes/*.json',
436
- minimalManifest: {
437
- code: 'public.register',
438
- title: '公开报名',
439
- kind: 'page',
440
- pathPattern: '/view/:appType/public/register',
441
- publicAccess: 'guest',
442
- publicPolicyCode: 'public_register',
443
- },
444
- commands: [
445
- 'openxiangda route upsert --json-file src/resources/routes/public_register.json --dry-run',
446
- 'openxiangda resource plan',
447
- 'openxiangda resource publish',
448
- ],
449
- },
450
- 'public-access': {
451
- dir: 'src/resources/public-access/*.json',
452
- minimalManifest: {
453
- code: 'public_register',
454
- mode: 'guest',
455
- routeCode: 'public.register',
456
- externalRoleCodes: ['external_visitor'],
457
- grants: {
458
- forms: [
459
- {
460
- code: 'FORM_OR_FORM_CODE',
461
- actions: ['upload', 'preview'],
462
- fields: ['attachmentFieldId'],
463
- },
464
- ],
465
- dataViews: ['public_lookup'],
466
- functions: [],
467
- connectors: [],
468
- storage: [
469
- {
470
- bucketName: 'images',
471
- actions: ['upload', 'preview'],
472
- allowedMimeTypes: ['image/jpeg', 'image/png', 'image/webp'],
473
- allowedExtensions: ['jpg', 'jpeg', 'png', 'webp'],
474
- maxSizeBytes: 15728640,
475
- visibility: 'private',
476
- pathPrefix: 'public/register/images/',
477
- },
478
- {
479
- bucketName: 'attachments',
480
- actions: ['upload', 'preview', 'download'],
481
- allowedMimeTypes: [
482
- 'application/pdf',
483
- 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
484
- 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
485
- 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
486
- 'text/plain',
487
- 'text/csv',
488
- 'application/json',
489
- ],
490
- allowedExtensions: ['pdf', 'docx', 'xlsx', 'pptx', 'txt', 'csv', 'json'],
491
- maxSizeBytes: 31457280,
492
- visibility: 'private',
493
- pathPrefix: 'public/register/attachments/',
494
- },
495
- ],
496
- },
497
- },
498
- commands: [
499
- 'openxiangda public-access upsert --json-file src/resources/public-access/public_register.json',
500
- 'openxiangda public-access session-test public_register --path /view/APP_XXX/public/register',
501
- 'openxiangda public-access grant-check public_register --form-code customer',
502
- '公开页 ImageField/AttachmentField 上传走 public session guest 凭据;grants.forms 用 {code, actions:[upload,preview], fields} 绑定表单/字段,storage 或 form.upload 再限制 bucket/MIME/ext/size/visibility/pathPrefix。',
503
- 'React 页面侧使用 PublicAccessGate;如果使用 Page SDK hooks,放在 OpenXiangdaProvider + OpenXiangdaPageProvider 内',
504
- ],
505
- },
506
- 'auth-config': {
507
- dir: 'src/resources/auth/*.json',
508
- minimalManifest: {
509
- code: 'default',
510
- status: 'active',
511
- configJson: {
512
- methods: [{ type: 'password', enabled: true }],
513
- registration: { mode: 'reject' },
514
- binding: { mode: 'auto' },
515
- },
516
- },
517
- commands: [
518
- 'openxiangda auth-config methods',
519
- 'openxiangda auth-config upsert --json-file src/resources/auth/default.json',
520
- ],
521
- },
522
- function: {
523
- dir: 'src/resources/functions/*.json',
524
- minimalManifest: {
525
- code: 'summarize_customer',
526
- definitionJson: {
527
- kind: 'app_function',
528
- version: 'function_v1',
529
- runtimeMode: 'trusted_node',
530
- sourceType: 'inline',
531
- runtimeInvoke: {
532
- audience: { type: 'authenticated' },
533
- },
534
- code: 'module.exports = async () => ({ ok: true })',
535
- },
536
- status: 'active',
537
- },
538
- commands: [
539
- 'openxiangda function upsert --json-file src/resources/functions/summarize_customer.json',
540
- 'openxiangda function invoke summarize_customer --body-json \'{"input":{}}\'',
541
- ],
542
- },
543
- connector: {
544
- dir: 'src/resources/connectors/*.json',
545
- minimalManifest: {
546
- code: 'third_party',
547
- name: '第三方服务',
548
- protocol: 'https',
549
- domain: 'api.example.com',
550
- authType: 'none',
551
- apis: [{ code: 'ping', path: '/ping', method: 'GET' }],
552
- },
553
- commands: [
554
- 'openxiangda connector upsert --json-file src/resources/connectors/third_party.json',
555
- 'openxiangda connector invoke third_party.ping --query-json query.json',
556
- ],
557
- },
558
- notification: {
559
- dir: 'src/resources/notifications/*.json',
560
- minimalManifest: {
561
- templates: [{ code: 'reservation_reminder', name: '预约提醒', content: '{{title}}' }],
562
- typeConfigs: [{ notificationType: 'reservation_reminder', templateCode: 'reservation_reminder', enabled: true }],
563
- },
564
- commands: [
565
- 'openxiangda notification template-upsert --json-file src/resources/notifications/reservation_reminder.json',
566
- 'openxiangda notification preview reservation_reminder --body-json \'{"payload":{"title":"测试"}}\'',
567
- ],
568
- },
569
- workflow: {
570
- dir: 'src/resources/workflows/*.json + src/workflows/<code>/workflow.ts',
571
- minimalManifest: {
572
- code: 'expense_approval',
573
- name: '费用审批',
574
- formCode: 'expense_request',
575
- workflowFile: '../../workflows/expense_approval/workflow.ts',
576
- definitionFile: '../../generated/workflows/expense_approval/definition.v3.json',
577
- previewFile: '../../generated/workflows/expense_approval/preview.json',
578
- publish: true,
579
- enable: true,
580
- },
581
- commands: [
582
- 'openxiangda workspace publish --profile <name> --form expense_request',
583
- 'openxiangda workflow compile src/workflows/expense_approval/workflow.ts --check',
584
- 'openxiangda workflow compile src/workflows/expense_approval/workflow.ts --out-definition src/generated/workflows/expense_approval/definition.v3.json --out-preview src/generated/workflows/expense_approval/preview.json',
585
- 'openxiangda resource validate workflow',
586
- 'openxiangda resource plan workflow',
587
- 'openxiangda resource publish',
588
- ],
589
- },
590
- 'data-view': {
591
- dir: 'src/resources/data-views/*.json',
592
- minimalManifest: {
593
- code: 'customer_lookup',
594
- base: { formCode: 'customer', alias: 'customer' },
595
- select: [{ field: 'customer.form_instance_id', as: 'id' }],
596
- refresh: { mode: 'manual' },
597
- },
598
- commands: [
599
- 'openxiangda data-view upsert --json-file src/resources/data-views/customer_lookup.json',
600
- 'openxiangda data-view query customer_lookup --query-json query.json',
601
- ],
602
- },
603
- permission: {
604
- dir: 'src/resources/roles 与 src/resources/permissions/**',
605
- minimalManifest: {
606
- role: { code: 'manager', name: '管理员' },
607
- pageGroup: { code: 'manager_pages', name: '管理员页面', roles: ['manager'], routeCodes: ['admin.home'] },
608
- formGroup: { code: 'customer_view', formCode: 'customer', name: '客户查看', type: 'view', roles: ['manager'] },
609
- },
610
- commands: [
611
- 'openxiangda permission audit --json',
612
- 'openxiangda permission role-update manager --json-file role.json --write-manifest',
613
- ],
614
- },
615
- };
616
-
617
- function getResourceExplain(type) {
618
- const rawKey = String(type || 'route')
619
- .trim()
620
- .replace(/([a-z0-9])([A-Z])/g, '$1-$2')
621
- .replace(/[_\s]+/g, '-')
622
- .toLowerCase();
623
- const aliases = {
624
- routes: 'route',
625
- notifications: 'notification',
626
- workflows: 'workflow',
627
- dataview: 'data-view',
628
- dataviews: 'data-view',
629
- 'data-views': 'data-view',
630
- publicaccess: 'public-access',
631
- publicaccesspolicy: 'public-access',
632
- publicaccesspolicies: 'public-access',
633
- auth: 'auth-config',
634
- authconfigs: 'auth-config',
635
- functions: 'function',
636
- connectors: 'connector',
637
- };
638
- const key = aliases[rawKey] || rawKey;
639
- return RESOURCE_EXPLAINS[key];
640
- }
641
-
642
- function renderResourceExplain(type) {
643
- const item = getResourceExplain(type);
644
- if (!item) {
645
- return `未知资源类型: ${type}`;
646
- }
647
- return [
648
- `# ${type}`,
649
- `目录: ${item.dir}`,
650
- '最小 manifest:',
651
- JSON.stringify(item.minimalManifest, null, 2),
652
- '常用命令:',
653
- ...item.commands.map(command => `- ${command}`),
654
- ].join('\n');
655
- }
656
-
657
- module.exports = {
658
- DESIGN_GATE_HARD_RULE,
659
- DESIGN_GATE_TOPICS,
660
- DESIGN_GATE_TOPIC_ALIASES,
661
- getDesignGates,
662
- getDesignTopicCatalog,
663
- getResourceExplain,
664
- renderDesignHelp,
665
- renderDesignGatesText,
666
- renderDesignTemplate,
667
- renderResourceExplain,
668
- };