@lovrabet/rabetbase-cli 2.5.4 → 2.5.5-beta.1

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 (379) hide show
  1. package/lib/api/api-doc.js +1 -1
  2. package/lib/api/api-group.js +1 -1
  3. package/lib/api/fetch-model-list.js +1 -1
  4. package/lib/api/generate-api-file.js +1 -1
  5. package/lib/api/generate-sdk-config-file.js +1 -1
  6. package/lib/api/legacy-api-file.js +1 -1
  7. package/lib/api/model-registry-file.js +1 -1
  8. package/lib/api/model-registry-scaffold.js +1 -1
  9. package/lib/api/model-source.js +1 -1
  10. package/lib/auth/auth-server-ui.js +1 -1
  11. package/lib/auth/auth-server.js +1 -1
  12. package/lib/auth/constant.js +1 -1
  13. package/lib/auth/get-cookie.js +1 -1
  14. package/lib/auth/get-session-user.js +1 -1
  15. package/lib/auth/is-session-valid.js +1 -1
  16. package/lib/auth/login-success-html.js +1 -1
  17. package/lib/auth/logout.js +1 -1
  18. package/lib/cli-flags.js +1 -1
  19. package/lib/cli.js +1 -1
  20. package/lib/commands/api/generate.js +1 -1
  21. package/lib/commands/api/index.js +1 -1
  22. package/lib/commands/api/list.js +1 -1
  23. package/lib/commands/api/pull.js +1 -1
  24. package/lib/commands/api/shared.js +1 -1
  25. package/lib/commands/app/detail.js +1 -1
  26. package/lib/commands/app/index.js +1 -1
  27. package/lib/commands/app/list.js +1 -1
  28. package/lib/commands/app/members-list.js +1 -1
  29. package/lib/commands/app/remote-directory.js +1 -1
  30. package/lib/commands/app/shared.js +1 -1
  31. package/lib/commands/app-config/delete.js +1 -1
  32. package/lib/commands/app-config/get.js +1 -1
  33. package/lib/commands/app-config/index.js +1 -1
  34. package/lib/commands/app-config/list.js +1 -1
  35. package/lib/commands/app-config/set.js +1 -1
  36. package/lib/commands/app-config/shared.js +1 -1
  37. package/lib/commands/auth/index.js +1 -1
  38. package/lib/commands/bff/create.js +1 -1
  39. package/lib/commands/bff/delete.js +1 -1
  40. package/lib/commands/bff/detail.js +1 -1
  41. package/lib/commands/bff/index.js +1 -1
  42. package/lib/commands/bff/list.js +1 -1
  43. package/lib/commands/bff/logs.js +1 -1
  44. package/lib/commands/bff/pull.js +1 -1
  45. package/lib/commands/bff/push.js +1 -1
  46. package/lib/commands/bff/status.js +1 -1
  47. package/lib/commands/cli-skill/index.js +1 -1
  48. package/lib/commands/cli-update.js +1 -1
  49. package/lib/commands/codegen/index.js +1 -1
  50. package/lib/commands/codegen/sdk.js +1 -1
  51. package/lib/commands/codegen/sql.js +1 -1
  52. package/lib/commands/common/app-registry.js +1 -1
  53. package/lib/commands/common/app-selector.js +1 -1
  54. package/lib/commands/common/async-task.js +1 -1
  55. package/lib/commands/common/dry-run.js +1 -1
  56. package/lib/commands/common/flags.js +1 -1
  57. package/lib/commands/common/local-file.js +1 -1
  58. package/lib/commands/common/validate.js +1 -1
  59. package/lib/commands/config/delete.js +1 -1
  60. package/lib/commands/config/get.js +1 -1
  61. package/lib/commands/config/index.js +1 -1
  62. package/lib/commands/config/init.js +1 -1
  63. package/lib/commands/config/list.js +1 -1
  64. package/lib/commands/config/set.js +1 -1
  65. package/lib/commands/config/shared.js +1 -1
  66. package/lib/commands/dataset/batch-design.js +1 -1
  67. package/lib/commands/dataset/business-group-update.js +1 -1
  68. package/lib/commands/dataset/business-groups.js +1 -1
  69. package/lib/commands/dataset/capability.js +1 -1
  70. package/lib/commands/dataset/cross-relation-create.js +1 -1
  71. package/lib/commands/dataset/cross-relation-delete.js +1 -1
  72. package/lib/commands/dataset/cross-relation-list.js +1 -1
  73. package/lib/commands/dataset/cross-relation-shared.js +1 -1
  74. package/lib/commands/dataset/cross-relation-update.js +1 -1
  75. package/lib/commands/dataset/delete.js +1 -1
  76. package/lib/commands/dataset/detail.js +1 -1
  77. package/lib/commands/dataset/extend-update.js +1 -1
  78. package/lib/commands/dataset/field-restore.js +1 -1
  79. package/lib/commands/dataset/field-update.js +1 -1
  80. package/lib/commands/dataset/generate.js +1 -1
  81. package/lib/commands/dataset/index.js +1 -1
  82. package/lib/commands/dataset/list.js +1 -1
  83. package/lib/commands/dataset/operations.js +1 -1
  84. package/lib/commands/dataset/relation-audit.js +1 -1
  85. package/lib/commands/dataset/relation-create.js +1 -1
  86. package/lib/commands/dataset/relation-delete.js +1 -1
  87. package/lib/commands/dataset/relation-shared.js +1 -1
  88. package/lib/commands/dataset/relation-update.js +1 -1
  89. package/lib/commands/dataset/relations.js +1 -1
  90. package/lib/commands/dataset/rename.js +1 -1
  91. package/lib/commands/dataset/restore.js +1 -1
  92. package/lib/commands/dataset/user-deleted-field-list.js +1 -1
  93. package/lib/commands/db/analysis-batching.js +1 -1
  94. package/lib/commands/db/analyze-batch-plan.js +1 -1
  95. package/lib/commands/db/analyze-cancel.js +1 -1
  96. package/lib/commands/db/analyze-start.js +1 -1
  97. package/lib/commands/db/analyze-status.js +1 -1
  98. package/lib/commands/db/create.js +1 -1
  99. package/lib/commands/db/delete.js +1 -1
  100. package/lib/commands/db/detail.js +1 -1
  101. package/lib/commands/db/diff-refresh-start.js +1 -1
  102. package/lib/commands/db/diff-refresh-status.js +1 -1
  103. package/lib/commands/db/diff.js +1 -1
  104. package/lib/commands/db/index.js +1 -1
  105. package/lib/commands/db/list.js +1 -1
  106. package/lib/commands/db/shared.js +1 -1
  107. package/lib/commands/db/table-diff-shared.js +1 -1
  108. package/lib/commands/db/tables.js +1 -1
  109. package/lib/commands/db/test.js +1 -1
  110. package/lib/commands/db/update.js +1 -1
  111. package/lib/commands/deployment/index.js +1 -1
  112. package/lib/commands/deployment/sync-all.js +1 -1
  113. package/lib/commands/deployment/sync-jobs.js +1 -1
  114. package/lib/commands/deployment/sync-status.js +1 -1
  115. package/lib/commands/doctor.js +1 -1
  116. package/lib/commands/file/index.js +1 -1
  117. package/lib/commands/flow/create.js +1 -1
  118. package/lib/commands/flow/detail.js +1 -1
  119. package/lib/commands/flow/index.js +1 -1
  120. package/lib/commands/flow/list.js +1 -1
  121. package/lib/commands/flow/publish.js +1 -1
  122. package/lib/commands/flow/runtime-resources-shared.js +1 -1
  123. package/lib/commands/flow/runtime-role-list.js +1 -1
  124. package/lib/commands/flow/runtime-role-user-list.js +1 -1
  125. package/lib/commands/flow/runtime-user-search.js +1 -1
  126. package/lib/commands/flow/shared.js +1 -1
  127. package/lib/commands/flow/update.js +1 -1
  128. package/lib/commands/flow/validate.js +1 -1
  129. package/lib/commands/instant-api-policy/current.js +1 -1
  130. package/lib/commands/instant-api-policy/index.js +1 -1
  131. package/lib/commands/instant-api-policy/init.js +1 -1
  132. package/lib/commands/instant-api-policy/publish.js +1 -1
  133. package/lib/commands/instant-api-policy/pull.js +1 -1
  134. package/lib/commands/instant-api-policy/revision.js +1 -1
  135. package/lib/commands/instant-api-policy/revisions.js +1 -1
  136. package/lib/commands/instant-api-policy/rollback.js +1 -1
  137. package/lib/commands/instant-api-policy/shared.js +1 -1
  138. package/lib/commands/instant-api-policy/validate.js +1 -1
  139. package/lib/commands/issue/index.js +1 -1
  140. package/lib/commands/issue/nudge.js +1 -1
  141. package/lib/commands/issue/report.js +1 -1
  142. package/lib/commands/issue/shared.js +1 -1
  143. package/lib/commands/kb/create.js +1 -1
  144. package/lib/commands/kb/delete.js +1 -1
  145. package/lib/commands/kb/detail.js +1 -1
  146. package/lib/commands/kb/index.js +1 -1
  147. package/lib/commands/kb/list.js +1 -1
  148. package/lib/commands/kb/search.js +1 -1
  149. package/lib/commands/kb/shared.js +1 -1
  150. package/lib/commands/kb/update.js +1 -1
  151. package/lib/commands/logs/index.js +1 -1
  152. package/lib/commands/menu/asset-update.js +1 -1
  153. package/lib/commands/menu/delete.js +1 -1
  154. package/lib/commands/menu/external-link-create.js +1 -1
  155. package/lib/commands/menu/external-link-update.js +1 -1
  156. package/lib/commands/menu/group-create.js +1 -1
  157. package/lib/commands/menu/group-update.js +1 -1
  158. package/lib/commands/menu/index.js +1 -1
  159. package/lib/commands/menu/list.js +1 -1
  160. package/lib/commands/menu/move.js +1 -1
  161. package/lib/commands/menu/regroup-start.js +1 -1
  162. package/lib/commands/menu/rename.js +1 -1
  163. package/lib/commands/menu/shared/compare-table.js +1 -1
  164. package/lib/commands/menu/shared/delete-plan.js +1 -1
  165. package/lib/commands/menu/shared/facts.js +1 -1
  166. package/lib/commands/menu/shared/index.js +1 -1
  167. package/lib/commands/menu/shared/inquirer.js +1 -1
  168. package/lib/commands/menu/shared/local-pages.js +1 -1
  169. package/lib/commands/menu/shared/logic.js +1 -1
  170. package/lib/commands/menu/shared/mutations.js +1 -1
  171. package/lib/commands/menu/shared/path.js +1 -1
  172. package/lib/commands/menu/shared/service.js +1 -1
  173. package/lib/commands/menu/shared/subapp-assets.js +1 -1
  174. package/lib/commands/menu/shared/sync-core.js +1 -1
  175. package/lib/commands/menu/shared/update-core.js +1 -1
  176. package/lib/commands/menu/shared/valid-url.js +1 -1
  177. package/lib/commands/menu/subapp-assets-status.js +1 -1
  178. package/lib/commands/menu/subapp-assets-update.js +1 -1
  179. package/lib/commands/menu/sync.js +1 -1
  180. package/lib/commands/menu/visibility-update.js +1 -1
  181. package/lib/commands/notification/config-create.js +1 -1
  182. package/lib/commands/notification/config-delete.js +1 -1
  183. package/lib/commands/notification/config-list.js +1 -1
  184. package/lib/commands/notification/config-update.js +1 -1
  185. package/lib/commands/notification/index.js +1 -1
  186. package/lib/commands/notification/shared.js +1 -1
  187. package/lib/commands/ocr/index.js +1 -1
  188. package/lib/commands/page/create.js +1 -1
  189. package/lib/commands/page/custom/detail.js +1 -1
  190. package/lib/commands/page/custom/list.js +1 -1
  191. package/lib/commands/page/custom/publish.js +1 -1
  192. package/lib/commands/page/custom/shared.js +1 -1
  193. package/lib/commands/page/custom/syntax.js +1 -1
  194. package/lib/commands/page/custom/update.js +1 -1
  195. package/lib/commands/page/data-list-status.js +1 -1
  196. package/lib/commands/page/generate-start.js +1 -1
  197. package/lib/commands/page/generate-status.js +1 -1
  198. package/lib/commands/page/index.js +1 -1
  199. package/lib/commands/page/pull.js +1 -1
  200. package/lib/commands/page/push.js +1 -1
  201. package/lib/commands/page/relation-audit.js +1 -1
  202. package/lib/commands/page/restore.js +1 -1
  203. package/lib/commands/page/shared.js +1 -1
  204. package/lib/commands/page/sync.js +1 -1
  205. package/lib/commands/project/api-architecture-upgrade.js +1 -1
  206. package/lib/commands/project/create/enhanced-guided-create.js +1 -1
  207. package/lib/commands/project/create/format-elapsed.js +1 -1
  208. package/lib/commands/project/create/main.js +1 -1
  209. package/lib/commands/project/create/materialize-project-template.js +1 -1
  210. package/lib/commands/project/create/project-name.js +1 -1
  211. package/lib/commands/project/create/project-template-archive.js +1 -1
  212. package/lib/commands/project/create/project-template-path.js +1 -1
  213. package/lib/commands/project/create/use-copy-project-template.js +1 -1
  214. package/lib/commands/project/create/use-format-code.js +1 -1
  215. package/lib/commands/project/create/use-install-dependencies.js +1 -1
  216. package/lib/commands/project/domain-routing-sync.js +1 -1
  217. package/lib/commands/project/index.js +1 -1
  218. package/lib/commands/project/upgrade.js +1 -1
  219. package/lib/commands/registry.js +1 -1
  220. package/lib/commands/role/delete.js +1 -1
  221. package/lib/commands/role/detail.js +1 -1
  222. package/lib/commands/role/index.js +1 -1
  223. package/lib/commands/role/list.js +1 -1
  224. package/lib/commands/role/shared.js +1 -1
  225. package/lib/commands/role/update.js +1 -1
  226. package/lib/commands/role/user-add.js +1 -1
  227. package/lib/commands/role/user-remove.js +1 -1
  228. package/lib/commands/role/user-resolve.js +1 -1
  229. package/lib/commands/rule/get.js +1 -1
  230. package/lib/commands/rule/index.js +1 -1
  231. package/lib/commands/rule/list.js +1 -1
  232. package/lib/commands/rule/set.js +1 -1
  233. package/lib/commands/rule/shared.js +1 -1
  234. package/lib/commands/run/index.js +1 -1
  235. package/lib/commands/schema.js +1 -1
  236. package/lib/commands/sql/create.js +1 -1
  237. package/lib/commands/sql/delete.js +1 -1
  238. package/lib/commands/sql/detail.js +1 -1
  239. package/lib/commands/sql/exec.js +1 -1
  240. package/lib/commands/sql/index.js +1 -1
  241. package/lib/commands/sql/list.js +1 -1
  242. package/lib/commands/sql/pull.js +1 -1
  243. package/lib/commands/sql/push.js +1 -1
  244. package/lib/commands/sql/shared.js +1 -1
  245. package/lib/commands/sql/status.js +1 -1
  246. package/lib/commands/sql/validate.js +1 -1
  247. package/lib/commands/task/index.js +1 -1
  248. package/lib/commands/task/status.js +1 -1
  249. package/lib/commands/tenant/index.js +1 -1
  250. package/lib/commands/tenant/members-list.js +1 -1
  251. package/lib/commands/tenant/shared.js +1 -1
  252. package/lib/commands/user-account/dingding-sandbox-bind.js +1 -1
  253. package/lib/commands/user-account/feishu-bind.js +1 -1
  254. package/lib/commands/user-account/index.js +1 -1
  255. package/lib/commands/workspace/add.js +1 -1
  256. package/lib/commands/workspace/index.js +1 -1
  257. package/lib/commands/workspace/remove.js +1 -1
  258. package/lib/config/domain-config.js +1 -1
  259. package/lib/config/project-domain-routing.js +1 -1
  260. package/lib/config/region-config.js +1 -1
  261. package/lib/config/schema.js +1 -1
  262. package/lib/constant/cdn.js +1 -1
  263. package/lib/constant/cli.js +1 -1
  264. package/lib/constant/defaults.js +1 -1
  265. package/lib/constant/domain.js +1 -1
  266. package/lib/constant/env.js +1 -1
  267. package/lib/constant/output.js +1 -1
  268. package/lib/constant/paths.js +1 -1
  269. package/lib/constant/region.js +1 -1
  270. package/lib/constant/risk.js +1 -1
  271. package/lib/constant/routing-profile.js +1 -1
  272. package/lib/context/app-resolver.js +1 -1
  273. package/lib/context/auth-resolver.js +1 -1
  274. package/lib/context/config-loader.js +1 -1
  275. package/lib/context.js +1 -1
  276. package/lib/core/alias-resolver.js +1 -1
  277. package/lib/core/api-client.js +1 -1
  278. package/lib/core/bff/config.js +1 -1
  279. package/lib/core/bff/file-system.js +1 -1
  280. package/lib/core/bff/hash.js +1 -1
  281. package/lib/core/bff/hook-directory.js +1 -1
  282. package/lib/core/bff/lock.js +1 -1
  283. package/lib/core/bff/utils.js +1 -1
  284. package/lib/core/cross-db-relation.js +1 -1
  285. package/lib/core/db-resolver.js +1 -1
  286. package/lib/core/flow-config.js +1 -1
  287. package/lib/core/instant-api-policy/config.js +1 -1
  288. package/lib/core/kb-search-client.js +1 -1
  289. package/lib/core/page/file-system.js +1 -1
  290. package/lib/core/page/hash.js +1 -1
  291. package/lib/core/page/lock.js +1 -1
  292. package/lib/core/page/lr-smart-jsx.js +1 -1
  293. package/lib/core/sql-index-auditor.js +1 -1
  294. package/lib/core/sql-sync/config.js +1 -1
  295. package/lib/core/sql-sync/file-system.js +1 -1
  296. package/lib/core/sql-sync/hash.js +1 -1
  297. package/lib/core/sql-sync/lock.js +1 -1
  298. package/lib/core/sql-sync/utils.js +1 -1
  299. package/lib/core/sql-validator.js +1 -1
  300. package/lib/errors.js +1 -1
  301. package/lib/framework/build-all-flags.js +1 -1
  302. package/lib/framework/error-output.js +1 -1
  303. package/lib/framework/explicit-yes.js +1 -1
  304. package/lib/framework/flags.js +1 -1
  305. package/lib/framework/help.js +1 -1
  306. package/lib/framework/index.js +1 -1
  307. package/lib/framework/output.js +1 -1
  308. package/lib/framework/response.js +1 -1
  309. package/lib/framework/runner-alias.js +1 -1
  310. package/lib/framework/runner.js +1 -1
  311. package/lib/framework/schema-export.js +1 -1
  312. package/lib/framework/supported-flags.js +1 -1
  313. package/lib/framework/types.js +1 -1
  314. package/lib/generated/build-info.d.ts +4 -4
  315. package/lib/generated/build-info.js +1 -1
  316. package/lib/generated/official-routing.js +1 -1
  317. package/lib/generated/routing-contract.js +1 -1
  318. package/lib/help.js +1 -1
  319. package/lib/postinstall.js +1 -1
  320. package/lib/runtime/confirmation.js +1 -1
  321. package/lib/runtime/event.js +1 -1
  322. package/lib/runtime/index.js +1 -1
  323. package/lib/runtime/queue.js +1 -1
  324. package/lib/runtime/resolve.js +1 -1
  325. package/lib/skills/builtin-skill.js +1 -1
  326. package/lib/skills/main.js +1 -1
  327. package/lib/skills/npx-skills-add.js +1 -1
  328. package/lib/skills/skill-presence.js +1 -1
  329. package/lib/telemetry/cli-command-trace.js +1 -1
  330. package/lib/telemetry/cli-help-trace.js +1 -1
  331. package/lib/telemetry/ensure-cli-otel-config.js +1 -1
  332. package/lib/telemetry/register-otel-exit-shutdown.js +1 -1
  333. package/lib/telemetry/send-cli-trace-log.js +1 -1
  334. package/lib/telemetry/send-platform-issue-collect-log.js +1 -1
  335. package/lib/utils/ai_config.js +1 -1
  336. package/lib/utils/apply-jq-filter.js +1 -1
  337. package/lib/utils/cdn-config.js +1 -1
  338. package/lib/utils/check-sdk-version.js +1 -1
  339. package/lib/utils/cli-version-check.js +1 -1
  340. package/lib/utils/cli-version-policy.js +1 -1
  341. package/lib/utils/config.js +1 -1
  342. package/lib/utils/entity-with-id.js +1 -1
  343. package/lib/utils/file-utils.js +1 -1
  344. package/lib/utils/guides-cdn.js +1 -1
  345. package/lib/utils/http-client.js +1 -1
  346. package/lib/utils/is-non-interactive.js +1 -1
  347. package/lib/utils/logger.js +1 -1
  348. package/lib/utils/params.js +1 -1
  349. package/lib/utils/platform.js +1 -1
  350. package/lib/utils/sleep.js +1 -1
  351. package/lib/utils/template-replacer.js +1 -1
  352. package/lib/utils/update-notice.js +1 -1
  353. package/lib/utils/version.js +1 -1
  354. package/lib/utils/with-active-cookie.js +1 -1
  355. package/lib/utils/write-cli-side-channel.js +1 -1
  356. package/package.json +2 -1
  357. package/skills/rabetbase/SKILL.md +1 -1
  358. package/skills/rabetbase-page-generation/SKILL.md +35 -0
  359. package/skills/rabetbase-page-generation/references/component-baseline.md +18 -0
  360. package/skills/rabetbase-page-generation/references/generation.md +77 -0
  361. package/skills/rabetbase-page-generation/templates/onepage/build.mjs +63 -0
  362. package/skills/rabetbase-page-generation/templates/onepage/create/README.md +20 -0
  363. package/skills/rabetbase-page-generation/templates/onepage/create/index.jsx +4 -0
  364. package/skills/rabetbase-page-generation/templates/onepage/create/preview.png +0 -0
  365. package/skills/rabetbase-page-generation/templates/onepage/detail/README.md +20 -0
  366. package/skills/rabetbase-page-generation/templates/onepage/detail/index.jsx +194 -0
  367. package/skills/rabetbase-page-generation/templates/onepage/detail/preview.png +0 -0
  368. package/skills/rabetbase-page-generation/templates/onepage/list/README.md +20 -0
  369. package/skills/rabetbase-page-generation/templates/onepage/list/index.jsx +717 -0
  370. package/skills/rabetbase-page-generation/templates/onepage/list/preview.png +0 -0
  371. package/skills/rabetbase-page-generation/templates/onepage/shared/editor.jsx +395 -0
  372. package/skills/rabetbase-page-generation/templates/onepage/shared/model.js +141 -0
  373. package/skills/rabetbase-page-generation/templates/onepage/shared/page.css +377 -0
  374. package/skills/rabetbase-page-generation/templates/onepage/shared/record-layout.jsx +90 -0
  375. package/skills/rabetbase-page-generation/templates/onepage/shared/responsive.jsx +70 -0
  376. package/skills/rabetbase-page-generation/templates/onepage/update/README.md +21 -0
  377. package/skills/rabetbase-page-generation/templates/onepage/update/index.jsx +4 -0
  378. package/skills/rabetbase-page-generation/templates/onepage/update/preview.png +0 -0
  379. package/skills/rabetbase.manifest.json +3 -3
@@ -0,0 +1,77 @@
1
+ # 生成、浏览器迭代与发布
2
+
3
+ ## 安装独立 Skill
4
+
5
+ CLI 包内包含 `skills/rabetbase-page-generation`。使用现有 Skill 安装工具从已安装 CLI 包目录安装:
6
+
7
+ ```sh
8
+ npx skills add /path/to/rabetbase-cli/skills/rabetbase-page-generation -g -y
9
+ ```
10
+
11
+ 将路径替换为当前 CLI 包的真实位置,安装后确认 Agent 可发现 `rabetbase-page-generation`。CLI 既有 postinstall 安装的是 `rabetbase` Skill;此独立 Skill 的安装由使用方显式执行。
12
+
13
+ ## 绑定真实 Dataset
14
+
15
+ 1. 用 `rabetbase dataset detail --code <datasetCode> --format compress` 读取字段、类型、必填、枚举和操作。用 `rabetbase codegen sdk` 核验 SDK 签名;不要从原始接口元信息猜测请求或响应。
16
+ 2. 将 `templates/onepage` 整体复制到页面工作目录。先阅读对应页面目录的 `README.md` 和 `preview.png`,明确布局与交互;`shared/` 保存四页共用代码,复制时一起保留。它是供 Agent 改写的 JSX 模板,不是配置解释器:客户字段展示了分组、数字、枚举、日期、智能筛选和表单的完整写法。按真实 Dataset 改写 `shared/model.js` 的字段与查询、`shared/record-layout.jsx` 的分组说明、`list/index.jsx` 的筛选/标题/手机主字段、`shared/editor.jsx` 的控件/校验/写入字段及 `detail/index.jsx` 的标题/主键读取。不能只替换 Dataset code 就直接发布给其他业务。
17
+ 3. 替换 `shared/model.js` 中 `__APP_CODE__`、`__DATASET_CODE__`;创建前将尚无真实路径的 `__LIST_PATH__`、`__DETAIL_PATH__`、`__CREATE_PATH__`、`__UPDATE_PATH__` 设为空字符串,创建后回填服务端真实路径。四页使用相同绑定。示例以数字 `id` 为主键;其他类型需要同时改写校验、记录导航和 SDK 参数。
18
+ 4. 页面使用宿主 `useSdkClient()`:已核验的 Dataset 模型提供 `filter({where,currentPage,pageSize,orderBy})`、`getOne(id)`、`create(fields)`、`update(id,fields)`。列表读取 `tableData` 和 `paging.totalCount`;若实际 SDK 不同,按真实契约改写。只在已确认需要连接、聚合或业务规则时改用 Custom SQL / Backend Function。
19
+
20
+ 保持零值、枚举、空日期和主键类型正确;数字不加千分位,金额精度按字段定义。列表、详情和表单均区分加载、空数据、错误与重试。分页只使用已提交的筛选;搜索、重置和切换页大小回第一页,忽略过期响应。
21
+
22
+ ## 构建四个独立目录
23
+
24
+ 在页面工作目录安装页面构建工具 `esbuild`,准备已核验版本的智能搜索 JSX 入口及 CSS;不要求 CLI 安装这些页面开发依赖。`build.mjs` 只打包当前目录的四页源码,不读取 Dataset、不选模板、不创建平台资源。
25
+
26
+ ```sh
27
+ npm install --save-dev esbuild
28
+ node build.mjs ./pages-v1 /path/to/smart-filter/index.tsx /path/to/smart-filter/style.css
29
+ ```
30
+
31
+ 输出目录必须尚不存在,避免旧文件混入更新。结果为 `pages-v1/list`、`detail`、`create`、`update`;每页包含完整的 `src/app/index.jsx`、`page.js`、`page.css`,没有跨页源码依赖。四页共享相同 CSS 内容,避免打开子页时宿主更新资源导致父列表丢失样式。页面文案默认中文,按应用语言调整源码;需要多语言时使用宿主 `useI18n` 和页面自己的语言资源。
32
+
33
+ 构建脚本解析当前页面项目安装的 esbuild。若使用 npm 包形式的智能搜索入口,先检查实际 exports 并解析出具体文件路径;不要假设某版本存在 `smart-filter` 子入口。缺失组件或 CSS 时先解决依赖,不改成简易输入框宣称效果一致。
34
+
35
+ ## 创建、回填与更新
36
+
37
+ 对四页分别执行已有命令,下面以列表为例:
38
+
39
+ ```sh
40
+ rabetbase page create --name "<页面名称>" --page-dir ./pages-v1/list --appcode <appCode> --dry-run --format compress
41
+ rabetbase page create --name "<页面名称>" --page-dir ./pages-v1/list --appcode <appCode> --format compress
42
+ rabetbase page custom-detail --id <pageId> --appcode <appCode> --format compress
43
+ ```
44
+
45
+ 复用 `page create` 的默认建菜单行为,需要父菜单时使用已有 `--parent-menu-id`。菜单展示通过既有 `rabetbase menu` 命令管理,先查看 `menu list` 和 `menu visibility-update --help` 并按要求预演,再执行授权的调整。隐藏菜单保留路由和资源,不等同于不创建菜单;不得删除页面绑定菜单来模拟隐藏。当前任务若允许四页菜单,按该策略验收;不要声称只有入口绑定菜单。菜单状态只根据真实返回和回查结果判断。
46
+
47
+ 记录四页 `pageId` 与真实路径,回填 `shared/model.js`,重新构建到新的输出目录。先回读远端当前 `codeContent`,再更新;`--page-dir` 是整目录替换,目录必须完整:
48
+
49
+ ```sh
50
+ rabetbase page custom-update --id <pageId> --appcode <appCode> --page-dir ./pages-v2/list --format compress
51
+ ```
52
+
53
+ ONEPAGE 子页读取 `onePageInfo.innerSearchParams.id`,直接访问时读取 `useLocation().search`。缺少或无效主键时不发数据请求。列表通过 `navigate(pathWithQuery, {onePage:true})` 打开子页;详情的上一条/下一条和详情切编辑使用当前面板替换,避免不断增加层级。更新保存后回原详情或父列表;直接访问返回真实入口。SDK 保存成功才发送按列表路径区分的刷新事件,父列表保留筛选和分页并重新读取数据;取消不写入数据、不发送刷新。
54
+
55
+ ## 本地与浏览器验收
56
+
57
+ 在非沙箱页面工作目录预览迭代;临时预览夹具、模拟数据和运行回执放任务验收目录,不加入 CLI 源码;页面目录中的 `preview.png` 是随 Skill 分发的效果参考。浏览器使用 Codex 内置浏览器。
58
+
59
+ - 同 Dataset 对比旧标准页的字段、分组、智能搜索、表单密度与操作位置;覆盖空数据、有数据、无匹配结果和超过一页的数据。
60
+ - 查询、重置、翻页、页大小、勾选和列设置;自然语言查询必须读取真实结果,失败不冒充空结果。
61
+ - 列表打开详情/新增/更新,主键正确;详情上一条/下一条和编辑仍在当前 ONEPAGE 面板。
62
+ - 必填错误、零值、枚举和日期;保存、重置、取消、保存后返回刷新;连续新增清空表单并聚焦首字段,快捷键不重复提交。
63
+ - 桌面及手机窄屏,列表和子页无溢出,底部按钮可访问;父列表保持筛选/分页。实际设备软键盘、深色主题等未覆盖项需明确记录。
64
+ - 仅操作授权的测试数据,写入前保留原值,验收后还原修改并清理本轮测试记录。旧页面只用于对比,不作为新流程的运行依赖。
65
+
66
+ 本地模拟不能证明真实 SDK、权限或 ONEPAGE 宿主正确。用四页预览验证真实数据流后再发布;若正式态暴露问题,修复后重新验收。
67
+
68
+ ## 发布与结果回查
69
+
70
+ ```sh
71
+ rabetbase page custom-publish --id <pageId> --appcode <appCode> --remark "页面验收通过" --format compress
72
+ rabetbase page custom-detail --id <pageId> --appcode <appCode> --format compress
73
+ ```
74
+
75
+ 四页分别检查发布状态 `FORMAL`、源码及版本,使用返回的运行 URL 打开正式态复验;报告实际菜单绑定情况。保留与最终提交/版本对应的复现步骤和结果,作为 MR 附件或外部验收材料;不把旧回执当成新版本证据。
76
+
77
+ CLI beta 发布遵循 CLI 发布流程;页面验收不等于 npm 发布成功。Development Sandbox 中安装 CLI beta 及独立 Skill 后,验证 Agent 可发现该 Skill,并完整执行四页生成和浏览器 E2E;Runtime Sandbox 不安装该 Skill。
@@ -0,0 +1,63 @@
1
+ import { createRequire } from "node:module";
2
+ import { mkdir, stat, writeFile } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+
6
+ // 页面项目自行安装构建依赖;此脚本不参与 CLI 命令或宿主构建。
7
+ const require = createRequire(path.resolve("package.json"));
8
+ const { build } = require("esbuild");
9
+ const root = path.dirname(fileURLToPath(import.meta.url));
10
+ const [output, componentEntry, componentCss] = process.argv.slice(2);
11
+ if (!output || !componentEntry || !componentCss)
12
+ throw Error(
13
+ "Usage: node build.mjs <output directory> <smart-filter JSX entry> <smart-filter CSS>",
14
+ );
15
+ const entry = path.resolve(componentEntry);
16
+ const css = path.resolve(componentCss);
17
+ for (const file of [entry, css]) {
18
+ if (!(await stat(file)).isFile()) throw Error(`Not a file: ${file}`);
19
+ }
20
+ // 输出必须是新目录,避免旧文件进入 custom-update 的完整替换范围。
21
+ const destination = path.resolve(output);
22
+ const external = [
23
+ "react",
24
+ "react/jsx-runtime",
25
+ "antd",
26
+ "@ant-design/icons",
27
+ "dayjs",
28
+ "@/context/app-context",
29
+ ];
30
+ const outputs = [];
31
+ for (const kind of ["list", "detail", "create", "update"]) {
32
+ const result = await build({
33
+ stdin: {
34
+ contents: `import ${JSON.stringify(css)};\nexport { default } from "./${kind}/index.jsx";`,
35
+ resolveDir: root,
36
+ sourcefile: "page-entry.jsx",
37
+ loader: "jsx",
38
+ },
39
+ bundle: true,
40
+ format: "esm",
41
+ platform: "browser",
42
+ jsx: "automatic",
43
+ outfile: path.join(destination, kind, "src/app/page.js"),
44
+ write: false,
45
+ external,
46
+ alias: { "@lovrabet/components/smart-filter": entry },
47
+ });
48
+ outputs.push(...result.outputFiles);
49
+ }
50
+ // 四页都引入相同的筛选 CSS 和页面 CSS,避免宿主资源替换破坏父列表。
51
+ await mkdir(path.dirname(destination), { recursive: true });
52
+ await mkdir(destination);
53
+ for (const file of outputs) {
54
+ await mkdir(path.dirname(file.path), { recursive: true });
55
+ await writeFile(file.path, file.contents);
56
+ }
57
+ for (const kind of ["list", "detail", "create", "update"]) {
58
+ await writeFile(
59
+ path.join(destination, kind, "src/app/index.jsx"),
60
+ 'import "./page.css";\nexport { default } from "./page.js";\n',
61
+ );
62
+ }
63
+ console.log(`Built four CustomJSX page directories in ${destination}`);
@@ -0,0 +1,20 @@
1
+ # 新增页
2
+
3
+ 入口是 `index.jsx`,以 `mode="create"` 使用 `../shared/editor.jsx`。新增与更新共享控件及校验,分别构建成独立 CustomJSX 页面。
4
+
5
+ ![新增页效果示例](preview.png)
6
+
7
+ 图中为本模板空表单的桌面效果,供字段分组与操作位置参考;外层“关闭子页”是本地预览容器,真实运行使用 ONEPAGE 宿主。
8
+
9
+ ## 保留的交互
10
+
11
+ - 按 Dataset 分组展示字段、说明、必填提示;隐藏自动生成的主键。
12
+ - 顶部和底部都可保存,支持 Ctrl/⌘+Enter;必填校验失败时定位字段,提交中阻止重复保存。
13
+ - “保存并返回”关闭子页并刷新列表;“保存并继续新增”保留新增页,清空表单并聚焦首字段。
14
+ - 保存失败保留输入,重置恢复初始表单;手机日期使用适合触控的输入方式。
15
+
16
+ ## 生成时修改
17
+
18
+ 在 `shared/editor.jsx` 中按真实字段调整控件、校验、默认值与写入白名单,在 `shared/record-layout.jsx` 调整分组、说明和必填。需要同步首字段聚焦引用。不要把主键或只读字段提交给创建接口。
19
+
20
+ 零值、枚举及空日期必须正确转换。只有 SDK 创建成功才通知列表刷新;取消不创建记录。完整构建及发布见 [生成流程](../../../references/generation.md)。
@@ -0,0 +1,4 @@
1
+ import EditorPage from "../shared/editor";
2
+ export default function CreatePage() {
3
+ return <EditorPage mode="create" />;
4
+ }
@@ -0,0 +1,20 @@
1
+ # 详情页
2
+
3
+ 入口是 `index.jsx`,是独立的只读页面。通过 `shared/record-layout.jsx` 与表单保持字段分组一致,不使用抽屉。
4
+
5
+ ![详情页效果示例](preview.png)
6
+
7
+ 图中为本模板使用本地示例数据的桌面效果,供布局与组件参考;外层“关闭子页”是本地预览容器,真实运行使用 ONEPAGE 宿主。
8
+
9
+ ## 保留的交互
10
+
11
+ - 顶部显示记录名称和可复制的主键;提供编辑、当前列表页内上一条/下一条,首尾按钮禁用。
12
+ - 按分组显示标签、说明和只读值;枚举显示标签,空值显示 `--`,数字不加千分位。
13
+ - 编辑替换当前 ONEPAGE 面板,保存后回到更新后的详情;关闭返回原列表。
14
+ - 重新读取真实 SDK 记录,区分加载失败、记录不存在与正常数据。
15
+
16
+ ## 生成时修改
17
+
18
+ 根据 Dataset 修改标题字段、主键校验、SDK 模型和分组。ONEPAGE 优先读取 `onePageInfo.innerSearchParams.id`,直接访问再读 URL 查询参数。缺失或无效主键时不发请求。
19
+
20
+ 详情与更新应保持不同的页面 ID/路径,不能用一个页面切换只读状态替代两页。完整构建及发布见 [生成流程](../../../references/generation.md)。
@@ -0,0 +1,194 @@
1
+ import { useEffect, useState } from "react";
2
+ import {
3
+ Alert,
4
+ Button,
5
+ ConfigProvider,
6
+ Form,
7
+ Empty,
8
+ Spin,
9
+ Space,
10
+ Typography,
11
+ theme,
12
+ } from "antd";
13
+ import {
14
+ useAppContext,
15
+ useAppTheme,
16
+ useLocation,
17
+ useNavigate,
18
+ useSdkClient,
19
+ } from "@/context/app-context";
20
+ import { DATASET_CODE, LIST_PATH, childPaths, formatField } from "../shared/model";
21
+ import { RecordGroups, RecordItem, recordTheme } from "../shared/record-layout";
22
+ import "../shared/page.css";
23
+
24
+ function CustomerDetail() {
25
+ const client = useSdkClient();
26
+ const { onePageInfo } = useAppContext();
27
+ const location = useLocation();
28
+ const navigate = useNavigate();
29
+ const rawId =
30
+ onePageInfo?.innerSearchParams?.id ??
31
+ new URLSearchParams(location.search).get("id");
32
+ const recordId = rawId == null ? "" : String(rawId).trim();
33
+ const [state, setState] = useState({
34
+ loading: true,
35
+ record: null,
36
+ error: "",
37
+ });
38
+ const [retry, setRetry] = useState(0);
39
+ const params =
40
+ onePageInfo?.innerSearchParams ??
41
+ Object.fromEntries(new URLSearchParams(location.search));
42
+ const ids = [
43
+ ...new Set(
44
+ String(params.ids || "")
45
+ .split(",")
46
+ .filter((id) => /^\d+$/.test(id)),
47
+ ),
48
+ ].slice(0, 100);
49
+ const position = ids.indexOf(recordId);
50
+ function moveRecord(index) {
51
+ navigate(
52
+ `${childPaths.detail}?${new URLSearchParams({ id: ids[index], ids: ids.join(",") })}`,
53
+ { replace: true },
54
+ );
55
+ }
56
+ useEffect(() => {
57
+ const changed = (event) => {
58
+ if (event.detail === LIST_PATH) setRetry((value) => value + 1);
59
+ };
60
+ window.addEventListener("lovrabet:page-generation:changed", changed);
61
+ return () =>
62
+ window.removeEventListener("lovrabet:page-generation:changed", changed);
63
+ }, []);
64
+
65
+ useEffect(() => {
66
+ let active = true;
67
+ setState({ loading: true, record: null, error: "" });
68
+ (async () => {
69
+ try {
70
+ if (!/^\d+$/.test(recordId))
71
+ throw Error("缺少或无效的客户主键,请从列表重新打开详情");
72
+ const record =
73
+ await client.models[`dataset_${DATASET_CODE}`].getOne(recordId);
74
+ if (
75
+ record != null &&
76
+ (typeof record !== "object" || Array.isArray(record))
77
+ )
78
+ throw Error("详情响应无效,请重试");
79
+ if (active) setState({ loading: false, record, error: "" });
80
+ } catch (cause) {
81
+ if (active)
82
+ setState({
83
+ loading: false,
84
+ record: null,
85
+ error: cause.message || "加载失败,请重试",
86
+ });
87
+ }
88
+ })();
89
+ return () => {
90
+ active = false;
91
+ };
92
+ }, [client, recordId, retry]);
93
+
94
+ return (
95
+ <main className="customer-record customer-detail">
96
+ {!onePageInfo && (
97
+ <Button className="record-back" onClick={() => navigate(LIST_PATH)}>
98
+ 返回列表
99
+ </Button>
100
+ )}
101
+ <header className="record-heading">
102
+ <div className="record-heading-title">
103
+ <h1>{state.record?.customer_name || "客户详情"}</h1>
104
+ <Typography.Text
105
+ type="secondary"
106
+ copyable={
107
+ recordId
108
+ ? { text: recordId, tooltips: ["复制主键", "已复制"] }
109
+ : false
110
+ }
111
+ >
112
+ 主键 {recordId || "—"}
113
+ </Typography.Text>
114
+ </div>
115
+ <Space wrap>
116
+ <Button
117
+ type="primary"
118
+ disabled={!state.record || state.loading}
119
+ onClick={() =>
120
+ navigate(
121
+ `${childPaths.update}?${new URLSearchParams({ id: recordId, returnDetail: "1", ids: ids.join(",") })}`,
122
+ { replace: true },
123
+ )
124
+ }
125
+ >
126
+ 编辑客户
127
+ </Button>
128
+ {position >= 0 && (
129
+ <span className="record-sequence" aria-label="当前页记录导航">
130
+ <Button
131
+ disabled={position === 0 || state.loading}
132
+ onClick={() => moveRecord(position - 1)}
133
+ >
134
+ 上一条
135
+ </Button>
136
+ <span>
137
+ 本页 {position + 1}/{ids.length}
138
+ </span>
139
+ <Button
140
+ disabled={position === ids.length - 1 || state.loading}
141
+ onClick={() => moveRecord(position + 1)}
142
+ >
143
+ 下一条
144
+ </Button>
145
+ </span>
146
+ )}
147
+ </Space>
148
+ </header>
149
+ {state.loading ? (
150
+ <Spin aria-label="正在加载客户详情" />
151
+ ) : state.error ? (
152
+ <Alert
153
+ type="error"
154
+ showIcon
155
+ message="详情加载失败"
156
+ description={state.error}
157
+ action={
158
+ <Button onClick={() => setRetry((value) => value + 1)}>重试</Button>
159
+ }
160
+ />
161
+ ) : state.record ? (
162
+ <Form layout="vertical" className="record-readonly" component="div">
163
+ <RecordGroups>
164
+ {(field) => (
165
+ <RecordItem key={field.key} field={field}>
166
+ <div className="record-value">
167
+ {formatField(state.record[field.key], field)}
168
+ </div>
169
+ </RecordItem>
170
+ )}
171
+ </RecordGroups>
172
+ </Form>
173
+ ) : (
174
+ <Empty description="客户不存在或已被删除" />
175
+ )}
176
+ </main>
177
+ );
178
+ }
179
+
180
+ export default function DetailPage() {
181
+ const hostTheme = useAppTheme();
182
+ return (
183
+ <ConfigProvider
184
+ theme={recordTheme(
185
+ hostTheme,
186
+ hostTheme?.mode === "dark"
187
+ ? theme.darkAlgorithm
188
+ : theme.defaultAlgorithm,
189
+ )}
190
+ >
191
+ <CustomerDetail />
192
+ </ConfigProvider>
193
+ );
194
+ }
@@ -0,0 +1,20 @@
1
+ # 列表页
2
+
3
+ 入口是 `index.jsx`,数据绑定、查询和格式化来自 `../shared/model.js`。列表是四页包的入口,通过 ONEPAGE 打开详情、新增与更新。
4
+
5
+ ![列表页效果示例](preview.png)
6
+
7
+ 图中为本模板使用本地示例数据的桌面效果,供布局与组件参考;不是业务数据或真实环境验收凭证。
8
+
9
+ ## 保留的交互
10
+
11
+ - 顶部使用 LrSmartFilter 智能搜索组合,支持自然语言与结构化筛选;查询结果交给真实 SDK。
12
+ - 工具栏包含勾选摘要、导出、刷新、列设置和新增;列偏好按应用与 Dataset 区分。
13
+ - AntD 表格使用服务端总数分页,查询及页大小变更回到第一页;错误、空数据、无匹配结果分别反馈。
14
+ - 名称点击打开详情;操作列提供更新、详情和删除确认。手机使用卡片,保留勾选、分页及主要操作。
15
+
16
+ ## 生成时修改
17
+
18
+ 按 Dataset 改写 `shared/model.js` 中字段、枚举、排序、查询和页面路径;同步修改本页筛选控件、主显示字段、手机卡片字段、标题及导出名称。数字不加千分位,金额精度遵循字段定义。不要把图中的客户字段或测试数据写入其他业务。
19
+
20
+ 保存后的刷新通知以真实列表路径区分。返回列表应保留已提交的筛选和分页,并读取最新数据。完整构建及发布见 [生成流程](../../../references/generation.md);应整体构建四页,而不是单独上传本目录。