openyida 2026.9.21 → 2026.9.22-beta.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 (334) hide show
  1. package/README.md +14 -20
  2. package/bin/yida.js +6 -11
  3. package/lib/app/app-list.js +3 -7
  4. package/lib/app/canvas-compile.js +12 -22
  5. package/lib/app/check-prd-completeness.js +0 -7
  6. package/lib/app/create-app.js +1 -4
  7. package/lib/app/create-form/args.js +12 -37
  8. package/lib/app/create-form/batch.js +11 -86
  9. package/lib/app/create-form.js +86 -193
  10. package/lib/app/create-page.js +17 -84
  11. package/lib/app/custom-theme.js +0 -11
  12. package/lib/app/form-field-validator.js +41 -26
  13. package/lib/app/form-open-guard.js +10 -97
  14. package/lib/app/get-form-config.js +0 -1
  15. package/lib/app/inline-css-guard.js +31 -1
  16. package/lib/app/services/form-compiler.js +4 -2
  17. package/lib/app/theme-from-design.js +41 -144
  18. package/lib/app/theme-presets.js +1 -1
  19. package/lib/app/update-app.js +13 -63
  20. package/lib/asset/ai-image.js +9 -59
  21. package/lib/asset/asset-cmd.js +7 -18
  22. package/lib/asset/asset-plan.js +9 -102
  23. package/lib/asset/asset-resolve.js +10 -55
  24. package/lib/asset/asset-status.js +4 -5
  25. package/lib/asset/host-capabilities.js +2 -11
  26. package/lib/asset/url-verify.js +4 -19
  27. package/lib/auth/dws-sync.js +148 -0
  28. package/lib/auth/token-auth.js +73 -9
  29. package/lib/auth/token-store.js +50 -0
  30. package/lib/connector/connector-test.js +5 -19
  31. package/lib/connector/contract.js +1 -3
  32. package/lib/core/agent-capabilities.js +16 -19
  33. package/lib/core/command-manifest.js +40 -329
  34. package/lib/core/locales/en.js +17 -74
  35. package/lib/core/locales/zh.js +16 -73
  36. package/lib/core/redact.js +10 -15
  37. package/lib/core/sample.js +30 -72
  38. package/lib/core/utils.js +4 -0
  39. package/lib/design-plan/design-plan.js +4 -51
  40. package/lib/design-plan/init.js +26 -121
  41. package/lib/design-plan/materialize.js +348 -451
  42. package/lib/design-plan/normalize.js +29 -74
  43. package/lib/design-plan/parallel.js +16 -71
  44. package/lib/design-plan/patch.js +16 -63
  45. package/lib/design-plan/preview.js +8 -6
  46. package/lib/design-plan/validate.js +11 -71
  47. package/lib/process/create-process.js +50 -84
  48. package/lib/samples/openyida-scaffold/canvas-form-drawer.canvas.jsx +90 -20
  49. package/lib/samples/openyida-scaffold/canvas-nav/content.jsx +13 -93
  50. package/lib/samples/openyida-scaffold/canvas-nav/data.jsx +18 -100
  51. package/lib/samples/openyida-scaffold/canvas-nav/mixed.jsx +4 -6
  52. package/lib/samples/openyida-scaffold/canvas-nav/shared.jsx +5 -5
  53. package/lib/samples/openyida-scaffold/canvas-nav/side.jsx +2 -1
  54. package/lib/samples/openyida-scaffold/canvas-nav/sidebar.jsx +1 -1
  55. package/lib/samples/openyida-scaffold/canvas-nav/top.jsx +9 -15
  56. package/lib/samples/yida-canvas-table-form/table-form-batch-submit.canvas.jsx +83 -9
  57. package/lib/samples/yida-rechart/trend-combo.canvas.jsx +87 -14
  58. package/package.json +1 -3
  59. package/scripts/postinstall.js +3 -3
  60. package/yida-skills/SKILL.md +16 -19
  61. package/yida-skills/references/official-example-schema-patterns.md +1 -1
  62. package/yida-skills/references/yida-api.md +0 -4
  63. package/yida-skills/skills/yida-app/SKILL.md +23 -46
  64. package/yida-skills/skills/yida-app/workflow/parallel-work.md +6 -15
  65. package/yida-skills/skills/yida-app/workflow/plan/step-1-understand.md +1 -1
  66. package/yida-skills/skills/yida-app/workflow/plan/step-2-confirm.md +1 -1
  67. package/yida-skills/skills/yida-app/workflow/plan/step-4-deliver.md +15 -29
  68. package/yida-skills/skills/yida-app/workflow/plan/workflow.md +11 -29
  69. package/yida-skills/skills/yida-app/workflow/step-1-resource-context.md +2 -4
  70. package/yida-skills/skills/yida-app/workflow/step-2-design.md +9 -23
  71. package/yida-skills/skills/yida-app/workflow/step-3-create-or-reuse-app.md +4 -6
  72. package/yida-skills/skills/yida-app/workflow/step-4-forms-processes.md +4 -15
  73. package/yida-skills/skills/yida-app/workflow/step-6-main-page.md +4 -6
  74. package/yida-skills/skills/yida-app/workflow/step-7-page-code.md +9 -15
  75. package/yida-skills/skills/yida-app/workflow/step-8-publish-navigation.md +11 -25
  76. package/yida-skills/skills/yida-app/workflow/step-9-output-finish.md +28 -68
  77. package/yida-skills/skills/yida-canvas-custom-page/SKILL.md +43 -42
  78. package/yida-skills/skills/yida-canvas-custom-page/references/canvas-style-implementation-guide.md +44 -60
  79. package/yida-skills/skills/yida-canvas-custom-page/references/canvas-theme-provider.md +50 -72
  80. package/yida-skills/skills/yida-canvas-custom-page/references/component-library-guide.md +1 -13
  81. package/yida-skills/skills/yida-canvas-custom-page/references/data-bridge-guide.md +1 -140
  82. package/yida-skills/skills/yida-canvas-custom-page/references/navigation-and-entry-guide.md +72 -101
  83. package/yida-skills/skills/yida-canvas-custom-page/references/page-generation-guide.md +32 -35
  84. package/yida-skills/skills/yida-canvas-custom-page/scripts/build-canvas-theme.js +3 -29
  85. package/yida-skills/skills/yida-canvas-custom-page/scripts/canvas-theme-provider.template.jsx +6 -69
  86. package/yida-skills/skills/yida-canvas-data-binding/SKILL.md +0 -26
  87. package/yida-skills/skills/yida-create-app/SKILL.md +0 -2
  88. package/yida-skills/skills/yida-create-form-page/SKILL.md +58 -72
  89. package/yida-skills/skills/yida-create-form-page/references/advanced-form-modes.md +5 -5
  90. package/yida-skills/skills/yida-create-form-page/references/association-form-field.md +4 -4
  91. package/yida-skills/skills/yida-create-form-page/references/batch-forms.md +5 -6
  92. package/yida-skills/skills/yida-create-form-page/references/field-definition-guide.md +19 -7
  93. package/yida-skills/skills/yida-create-form-page/references/form-field-properties.md +44 -62
  94. package/yida-skills/skills/yida-create-page/SKILL.md +6 -14
  95. package/yida-skills/skills/yida-create-process/SKILL.md +2 -13
  96. package/yida-skills/skills/yida-custom-page/SKILL.md +0 -2
  97. package/yida-skills/skills/yida-custom-page/references/design-system.md +1 -1
  98. package/yida-skills/skills/yida-dashboard/SKILL.md +4 -5
  99. package/yida-skills/skills/yida-data-management/SKILL.md +2 -4
  100. package/yida-skills/skills/yida-data-management/references/data-format-guide.md +4 -4
  101. package/yida-skills/skills/yida-design/SKILL.md +14 -29
  102. package/yida-skills/skills/yida-design/references/app/blueprint.md +70 -0
  103. package/yida-skills/skills/yida-design/references/app/navigation-patterns.md +43 -0
  104. package/yida-skills/skills/yida-design/references/app/role-journey.md +30 -0
  105. package/yida-skills/skills/yida-design/references/ask-human-interaction-contract.md +42 -67
  106. package/yida-skills/skills/yida-design/references/asset-workflow.md +2 -6
  107. package/yida-skills/skills/yida-design/references/design-mode.md +4 -4
  108. package/yida-skills/skills/yida-design/references/page-quality-gates.md +38 -26
  109. package/yida-skills/skills/yida-design/references/style-design-selection.md +137 -0
  110. package/yida-skills/skills/yida-design/references/style-designs/_design-md-template.md +185 -0
  111. package/yida-skills/skills/yida-design/references/style-designs/aqua-service-progress-dashboard.md +242 -0
  112. package/yida-skills/skills/yida-design/references/style-designs/blue-insight-operations-dashboard.md +243 -0
  113. package/yida-skills/skills/yida-design/references/style-designs/blue-productivity-insight-workbench.md +242 -0
  114. package/yida-skills/skills/yida-design/references/style-designs/command-filter-card-console.md +304 -0
  115. package/yida-skills/skills/yida-design/references/style-designs/contrast-command-analytics-workbench.md +261 -0
  116. package/yida-skills/skills/yida-design/references/style-designs/dark-stage-analytic-dashboard.md +369 -0
  117. package/yida-skills/skills/yida-design/references/style-designs/filterable-card-catalog.md +354 -0
  118. package/yida-skills/skills/yida-design/references/style-designs/green-timeline-progress-workbench.md +250 -0
  119. package/yida-skills/skills/yida-design/references/style-designs/registry.md +117 -0
  120. package/yida-skills/skills/yida-design/references/style-designs/soft-analytic-workbench.md +348 -0
  121. package/yida-skills/skills/yida-design/references/style-designs/soft-blue-grid-analytic-dashboard.md +658 -0
  122. package/yida-skills/skills/yida-design/references/style-designs/soft-bordered-analytic-workbench.md +385 -0
  123. package/yida-skills/skills/yida-design/references/style-designs/soft-curated-filter-gallery.md +300 -0
  124. package/yida-skills/skills/yida-design/references/style-designs/soft-modular-analytic-workbench.md +404 -0
  125. package/yida-skills/skills/yida-design/references/style-designs/soft-progress-analytics-workbench.md +382 -0
  126. package/yida-skills/skills/yida-design/references/style-designs/soft-timeline-analytics-workbench.md +367 -0
  127. package/yida-skills/skills/yida-design/references/style-designs/teal-rail-analytics-workbench.md +341 -0
  128. package/yida-skills/skills/yida-design/references/theme/app-custom-theme-template.css +432 -350
  129. package/yida-skills/skills/yida-design/references/visual-decision-engine.md +143 -19
  130. package/yida-skills/skills/yida-design/references/visual-scaffold-recipes.md +27 -15
  131. package/yida-skills/skills/yida-design/sub_skill/page-design/SKILL.md +0 -4
  132. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/SKILL.md +8 -22
  133. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/assets/README.md +10 -14
  134. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/assets/build-plan-template.html +4 -9
  135. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/references/build-plan-compact-schema.md +27 -49
  136. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/references/build-plan-schema.md +154 -33
  137. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/references/visual-design.md +127 -48
  138. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/references/visual-theme-selection.md +51 -37
  139. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/scripts/render_build_plan.py +48 -43
  140. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/scripts/validate_design_themes.py +190 -0
  141. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/README.md +98 -0
  142. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/airy-media-grid.md +339 -0
  143. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/airy-modular-clarity.md +348 -0
  144. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/airy-structured-clarity.md +344 -0
  145. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/ambient-halo-layered.md +345 -0
  146. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/dark-focus-layered.md +355 -0
  147. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/dark-luminous-modular.md +377 -0
  148. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/deep-stage-duotone.md +352 -0
  149. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/hairline-runway-clarity.md +389 -0
  150. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/high-contrast-modular.md +364 -0
  151. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/index.json +329 -0
  152. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/interlocked-vivid-modules.md +348 -0
  153. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/matrix-grid-focus.md +345 -0
  154. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/media-rail-inspector.md +379 -0
  155. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/mist-layered-signal.md +347 -0
  156. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/modular-rail-signal.md +352 -0
  157. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/mono-grid-signal.md +386 -0
  158. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/ribbon-ledger-lift.md +384 -0
  159. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/segmented-meter-clarity.md +388 -0
  160. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/split-rail-precision.md +341 -0
  161. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/status-framed-media-grid.md +361 -0
  162. package/yida-skills/skills/yida-design/workflow/output-design.md +375 -117
  163. package/yida-skills/skills/yida-design/workflow/output-prd.md +185 -0
  164. package/yida-skills/skills/yida-design/workflow/step-1-read-brief.md +1 -1
  165. package/yida-skills/skills/yida-design/workflow/step-2-theme-system.md +29 -33
  166. package/yida-skills/skills/yida-design/workflow/step-4-wireframe-interaction.md +1 -3
  167. package/yida-skills/skills/yida-design/workflow/step-5-visual-states.md +106 -22
  168. package/yida-skills/skills/yida-design/workflow/step-6-handoff.md +22 -15
  169. package/yida-skills/skills/yida-form-permission/SKILL.md +0 -6
  170. package/yida-skills/skills/yida-image-assets/SKILL.md +50 -73
  171. package/yida-skills/skills/yida-image-assets/references/manifest-contract.md +52 -82
  172. package/yida-skills/skills/yida-image-assets/references/source-policy.md +15 -14
  173. package/yida-skills/skills/yida-integration/SKILL.md +0 -1
  174. package/yida-skills/skills/yida-login/SKILL.md +0 -2
  175. package/yida-skills/skills/yida-nav-group/SKILL.md +2 -4
  176. package/yida-skills/skills/yida-nav-shell/SKILL.md +12 -36
  177. package/yida-skills/skills/yida-nav-shell/references/nav-shell-patterns.md +136 -79
  178. package/yida-skills/skills/yida-page-config/SKILL.md +4 -13
  179. package/yida-skills/skills/yida-prd/SKILL.md +3 -5
  180. package/yida-skills/skills/yida-prd/references/app/blueprint.md +4 -4
  181. package/yida-skills/skills/yida-prd/references/app/navigation-patterns.md +3 -6
  182. package/yida-skills/skills/yida-prd/references/app/role-journey.md +3 -5
  183. package/yida-skills/skills/yida-prd/references/plan-content.md +0 -4
  184. package/yida-skills/skills/yida-prd/workflow/output-prd.md +11 -18
  185. package/yida-skills/skills/yida-prd/workflow/plan-business.md +4 -4
  186. package/yida-skills/skills/yida-prd/workflow/step-2-information-architecture.md +8 -11
  187. package/yida-skills/skills/yida-publish-page/SKILL.md +1 -9
  188. package/yida-skills/skills/yida-requirement-analysis/SKILL.md +39 -10
  189. package/yida-skills/skills/yida-requirement-analysis/workflow/prepare-brief.md +71 -40
  190. package/yida-skills/skills-index.json +16 -36
  191. package/lib/app/application-entry-urls.js +0 -31
  192. package/lib/app/application-style.js +0 -69
  193. package/lib/app/canvas-icon-exports.json +0 -6160
  194. package/lib/app/canvas-icon-guard.js +0 -87
  195. package/lib/app/canvas-navigation-guard.js +0 -84
  196. package/lib/app/canvas-path-guard.js +0 -78
  197. package/lib/app/canvas-theme-guard.js +0 -184
  198. package/lib/app/form-data-response-guard.js +0 -57
  199. package/lib/asset/asset-execution.js +0 -79
  200. package/lib/core/css-structure.js +0 -37
  201. package/lib/design/check-design.js +0 -51
  202. package/lib/design/document.js +0 -458
  203. package/lib/design/icon-contrast.js +0 -85
  204. package/lib/design/page-content.js +0 -11
  205. package/lib/design-plan/artifact-updates.js +0 -117
  206. package/lib/design-plan/confirmation.js +0 -13
  207. package/lib/design-plan/entry-navigation.js +0 -97
  208. package/lib/design-plan/navigation-policy.js +0 -38
  209. package/lib/design-plan/rebase.js +0 -60
  210. package/lib/design-plan/themes.js +0 -101
  211. package/lib/design-plan/visual-policy.js +0 -42
  212. package/lib/samples/openyida-scaffold/canvas-admin-entry.jsx +0 -62
  213. package/lib/samples/openyida-scaffold/canvas-navigation.jsx +0 -56
  214. package/lib/samples/openyida-scaffold/canvas-view-state.jsx +0 -74
  215. package/yida-skills/skills/yida-app/references/entry-navigation.md +0 -193
  216. package/yida-skills/skills/yida-canvas-custom-page/references/view-state-recovery.md +0 -52
  217. package/yida-skills/skills/yida-canvas-data-binding/references/business-action-permissions.md +0 -31
  218. package/yida-skills/skills/yida-design/references/application-style-library.md +0 -93
  219. package/yida-skills/skills/yida-design/references/application-theme-consistency.md +0 -150
  220. package/yida-skills/skills/yida-design/references/native-form-styles.md +0 -208
  221. package/yida-skills/skills/yida-design/references/navigation-decision.md +0 -53
  222. package/yida-skills/skills/yida-design/references/page-continuity.md +0 -42
  223. package/yida-skills/skills/yida-design/references/theme/application-style-recipes.css +0 -58
  224. package/yida-skills/skills/yida-design/references/theme-selection.md +0 -67
  225. package/yida-skills/skills/yida-design/scripts/validate_design_themes.py +0 -302
  226. package/yida-skills/skills/yida-design/templates/application-styles.json +0 -398
  227. package/yida-skills/skills/yida-design/templates/design-themes/README.md +0 -73
  228. package/yida-skills/skills/yida-design/templates/design-themes/app-amber/app_theme.css +0 -748
  229. package/yida-skills/skills/yida-design/templates/design-themes/app-amber/design.md +0 -274
  230. package/yida-skills/skills/yida-design/templates/design-themes/app-amber/form-layout.json +0 -15
  231. package/yida-skills/skills/yida-design/templates/design-themes/app-editorial/app_theme.css +0 -748
  232. package/yida-skills/skills/yida-design/templates/design-themes/app-editorial/design.md +0 -274
  233. package/yida-skills/skills/yida-design/templates/design-themes/app-editorial/form-layout.json +0 -14
  234. package/yida-skills/skills/yida-design/templates/design-themes/app-executive/app_theme.css +0 -748
  235. package/yida-skills/skills/yida-design/templates/design-themes/app-executive/design.md +0 -274
  236. package/yida-skills/skills/yida-design/templates/design-themes/app-executive/form-layout.json +0 -13
  237. package/yida-skills/skills/yida-design/templates/design-themes/app-finance/app_theme.css +0 -748
  238. package/yida-skills/skills/yida-design/templates/design-themes/app-finance/design.md +0 -274
  239. package/yida-skills/skills/yida-design/templates/design-themes/app-finance/form-layout.json +0 -14
  240. package/yida-skills/skills/yida-design/templates/design-themes/app-glass/app_theme.css +0 -748
  241. package/yida-skills/skills/yida-design/templates/design-themes/app-glass/design.md +0 -274
  242. package/yida-skills/skills/yida-design/templates/design-themes/app-glass/form-layout.json +0 -14
  243. package/yida-skills/skills/yida-design/templates/design-themes/app-graphite/app_theme.css +0 -748
  244. package/yida-skills/skills/yida-design/templates/design-themes/app-graphite/design.md +0 -274
  245. package/yida-skills/skills/yida-design/templates/design-themes/app-graphite/form-layout.json +0 -14
  246. package/yida-skills/skills/yida-design/templates/design-themes/app-line/app_theme.css +0 -748
  247. package/yida-skills/skills/yida-design/templates/design-themes/app-line/design.md +0 -274
  248. package/yida-skills/skills/yida-design/templates/design-themes/app-line/form-layout.json +0 -13
  249. package/yida-skills/skills/yida-design/templates/design-themes/app-neon/app_theme.css +0 -748
  250. package/yida-skills/skills/yida-design/templates/design-themes/app-neon/design.md +0 -274
  251. package/yida-skills/skills/yida-design/templates/design-themes/app-neon/form-layout.json +0 -14
  252. package/yida-skills/skills/yida-design/templates/design-themes/app-nordic/app_theme.css +0 -754
  253. package/yida-skills/skills/yida-design/templates/design-themes/app-nordic/design.md +0 -279
  254. package/yida-skills/skills/yida-design/templates/design-themes/app-nordic/form-layout.json +0 -13
  255. package/yida-skills/skills/yida-design/templates/design-themes/app-paper/app_theme.css +0 -748
  256. package/yida-skills/skills/yida-design/templates/design-themes/app-paper/design.md +0 -274
  257. package/yida-skills/skills/yida-design/templates/design-themes/app-paper/form-layout.json +0 -13
  258. package/yida-skills/skills/yida-design/templates/design-themes/app-platinum/app_theme.css +0 -748
  259. package/yida-skills/skills/yida-design/templates/design-themes/app-platinum/design.md +0 -274
  260. package/yida-skills/skills/yida-design/templates/design-themes/app-platinum/form-layout.json +0 -14
  261. package/yida-skills/skills/yida-design/templates/design-themes/app-plum/app_theme.css +0 -748
  262. package/yida-skills/skills/yida-design/templates/design-themes/app-plum/design.md +0 -274
  263. package/yida-skills/skills/yida-design/templates/design-themes/app-plum/form-layout.json +0 -14
  264. package/yida-skills/skills/yida-design/templates/design-themes/app-pop/app_theme.css +0 -758
  265. package/yida-skills/skills/yida-design/templates/design-themes/app-pop/design.md +0 -281
  266. package/yida-skills/skills/yida-design/templates/design-themes/app-pop/form-layout.json +0 -14
  267. package/yida-skills/skills/yida-design/templates/design-themes/app-sage/app_theme.css +0 -748
  268. package/yida-skills/skills/yida-design/templates/design-themes/app-sage/design.md +0 -274
  269. package/yida-skills/skills/yida-design/templates/design-themes/app-sage/form-layout.json +0 -14
  270. package/yida-skills/skills/yida-design/templates/design-themes/app-teal/app_theme.css +0 -748
  271. package/yida-skills/skills/yida-design/templates/design-themes/app-teal/design.md +0 -274
  272. package/yida-skills/skills/yida-design/templates/design-themes/app-teal/form-layout.json +0 -14
  273. package/yida-skills/skills/yida-design/templates/design-themes/app-terminal/app_theme.css +0 -754
  274. package/yida-skills/skills/yida-design/templates/design-themes/app-terminal/design.md +0 -279
  275. package/yida-skills/skills/yida-design/templates/design-themes/app-terminal/form-layout.json +0 -14
  276. package/yida-skills/skills/yida-design/templates/design-themes/app-ticket/app_theme.css +0 -752
  277. package/yida-skills/skills/yida-design/templates/design-themes/app-ticket/design.md +0 -278
  278. package/yida-skills/skills/yida-design/templates/design-themes/app-ticket/form-layout.json +0 -13
  279. package/yida-skills/skills/yida-design/templates/design-themes/app-wire/app_theme.css +0 -748
  280. package/yida-skills/skills/yida-design/templates/design-themes/app-wire/design.md +0 -274
  281. package/yida-skills/skills/yida-design/templates/design-themes/app-wire/form-layout.json +0 -14
  282. package/yida-skills/skills/yida-design/templates/design-themes/basic-tokens.json +0 -118
  283. package/yida-skills/skills/yida-design/templates/design-themes/dark-inset-hairline/app_theme.css +0 -690
  284. package/yida-skills/skills/yida-design/templates/design-themes/dark-inset-hairline/design.md +0 -382
  285. package/yida-skills/skills/yida-design/templates/design-themes/dark-inset-hairline/form-layout.json +0 -13
  286. package/yida-skills/skills/yida-design/templates/design-themes/dark-rail-fine-lines/app_theme.css +0 -691
  287. package/yida-skills/skills/yida-design/templates/design-themes/dark-rail-fine-lines/design.md +0 -380
  288. package/yida-skills/skills/yida-design/templates/design-themes/dark-rail-fine-lines/form-layout.json +0 -13
  289. package/yida-skills/skills/yida-design/templates/design-themes/dark-rail-signal-panels/app_theme.css +0 -696
  290. package/yida-skills/skills/yida-design/templates/design-themes/dark-rail-signal-panels/design.md +0 -378
  291. package/yida-skills/skills/yida-design/templates/design-themes/dark-rail-signal-panels/form-layout.json +0 -13
  292. package/yida-skills/skills/yida-design/templates/design-themes/free-creative/app_theme.css +0 -689
  293. package/yida-skills/skills/yida-design/templates/design-themes/free-creative/design.md +0 -238
  294. package/yida-skills/skills/yida-design/templates/design-themes/free-creative/form-layout.json +0 -13
  295. package/yida-skills/skills/yida-design/templates/design-themes/graphite-bevel-grid/app_theme.css +0 -692
  296. package/yida-skills/skills/yida-design/templates/design-themes/graphite-bevel-grid/design.md +0 -375
  297. package/yida-skills/skills/yida-design/templates/design-themes/graphite-bevel-grid/form-layout.json +0 -13
  298. package/yida-skills/skills/yida-design/templates/design-themes/hairline-shared-bands/app_theme.css +0 -691
  299. package/yida-skills/skills/yida-design/templates/design-themes/hairline-shared-bands/design.md +0 -362
  300. package/yida-skills/skills/yida-design/templates/design-themes/hairline-shared-bands/form-layout.json +0 -13
  301. package/yida-skills/skills/yida-design/templates/design-themes/hairline-soft-blocks/app_theme.css +0 -691
  302. package/yida-skills/skills/yida-design/templates/design-themes/hairline-soft-blocks/design.md +0 -409
  303. package/yida-skills/skills/yida-design/templates/design-themes/hairline-soft-blocks/form-layout.json +0 -13
  304. package/yida-skills/skills/yida-design/templates/design-themes/index.json +0 -464
  305. package/yida-skills/skills/yida-design/templates/design-themes/ink-glow-soft-panels/app_theme.css +0 -701
  306. package/yida-skills/skills/yida-design/templates/design-themes/ink-glow-soft-panels/design.md +0 -379
  307. package/yida-skills/skills/yida-design/templates/design-themes/ink-glow-soft-panels/form-layout.json +0 -13
  308. package/yida-skills/skills/yida-design/templates/design-themes/inset-frame-pixel-rhythm/app_theme.css +0 -691
  309. package/yida-skills/skills/yida-design/templates/design-themes/inset-frame-pixel-rhythm/design.md +0 -404
  310. package/yida-skills/skills/yida-design/templates/design-themes/inset-frame-pixel-rhythm/form-layout.json +0 -13
  311. package/yida-skills/skills/yida-design/templates/design-themes/outlined-texture-duotone/app_theme.css +0 -698
  312. package/yida-skills/skills/yida-design/templates/design-themes/outlined-texture-duotone/design.md +0 -389
  313. package/yida-skills/skills/yida-design/templates/design-themes/outlined-texture-duotone/form-layout.json +0 -13
  314. package/yida-skills/skills/yida-design/templates/design-themes/soft-inset-surfaces/app_theme.css +0 -691
  315. package/yida-skills/skills/yida-design/templates/design-themes/soft-inset-surfaces/design.md +0 -372
  316. package/yida-skills/skills/yida-design/templates/design-themes/soft-inset-surfaces/form-layout.json +0 -13
  317. package/yida-skills/skills/yida-design/templates/design-themes/soft-outline-rhythm/app_theme.css +0 -690
  318. package/yida-skills/skills/yida-design/templates/design-themes/soft-outline-rhythm/design.md +0 -455
  319. package/yida-skills/skills/yida-design/templates/design-themes/soft-outline-rhythm/form-layout.json +0 -13
  320. package/yida-skills/skills/yida-design/templates/design-themes/soft-rail-bold-band/app_theme.css +0 -698
  321. package/yida-skills/skills/yida-design/templates/design-themes/soft-rail-bold-band/design.md +0 -394
  322. package/yida-skills/skills/yida-design/templates/design-themes/soft-rail-bold-band/form-layout.json +0 -13
  323. package/yida-skills/skills/yida-design/templates/design-themes/soft-spectral-panels/app_theme.css +0 -692
  324. package/yida-skills/skills/yida-design/templates/design-themes/soft-spectral-panels/design.md +0 -391
  325. package/yida-skills/skills/yida-design/templates/design-themes/soft-spectral-panels/form-layout.json +0 -13
  326. package/yida-skills/skills/yida-design/templates/design-themes/warm-canvas-contrast-panels/app_theme.css +0 -711
  327. package/yida-skills/skills/yida-design/templates/design-themes/warm-canvas-contrast-panels/design.md +0 -408
  328. package/yida-skills/skills/yida-design/templates/design-themes/warm-canvas-contrast-panels/form-layout.json +0 -13
  329. package/yida-skills/skills/yida-design/templates/design-themes/warm-rail-muted-panels/app_theme.css +0 -692
  330. package/yida-skills/skills/yida-design/templates/design-themes/warm-rail-muted-panels/design.md +0 -383
  331. package/yida-skills/skills/yida-design/templates/design-themes/warm-rail-muted-panels/form-layout.json +0 -13
  332. package/yida-skills/skills/yida-design/templates/navigation-styles.json +0 -769
  333. package/yida-skills/skills/yida-requirement-analysis/references/experience-groups.md +0 -79
  334. package/yida-skills/skills/yida-requirement-analysis/references/handoff.md +0 -68
@@ -1,11 +1,5 @@
1
1
  'use strict';
2
2
 
3
- const { getMaterialSourcingGuidance } = require('../asset/ai-image');
4
- const { getVisualDecisionPolicy } = require('../design-plan/visual-policy');
5
- const { getPageNavigationContract } = require('../design-plan/navigation-policy');
6
- const { ENTRY_MODES } = require('../design-plan/entry-navigation');
7
- const { DIVIDER_TYPES, DEFAULT_DIVIDER_TYPE } = require('../app/form-field-validator');
8
-
9
3
  const SIDE_EFFECT_BASES = Object.freeze({
10
4
  local_read: Object.freeze({
11
5
  kind: 'local_read',
@@ -370,13 +364,11 @@ const COMMAND_SIDE_EFFECTS = new Map([
370
364
  ['create-form.batch', sideEffect('remote_write', { mutates_local: true })],
371
365
  ...sideEffectEntries([
372
366
  'agent-capabilities',
373
- 'check-design',
374
367
  'check-page',
375
368
  'commands',
376
369
  'create-form.icons',
377
370
  'create-form.validate-fields',
378
371
  'dingtalk-link',
379
- 'design-plan.catalog',
380
372
  'formula.evaluate',
381
373
  'integration.diagnose',
382
374
  ], sideEffect('local_read')),
@@ -515,8 +507,8 @@ const COMMAND_SIDE_EFFECTS = new Map([
515
507
  ['auth', sideEffect('mixed', {
516
508
  mutates_yida: false,
517
509
  mutates_local: true,
518
- read_actions: ['status', 'profiles', 'profile list'],
519
- mutating_actions: ['login', 'refresh', 'logout', 'profile switch'],
510
+ read_actions: ['status', 'profiles'],
511
+ mutating_actions: ['login', 'sync-dws', 'refresh', 'logout', 'profile switch'],
520
512
  })],
521
513
  ['batch', sideEffect('mixed', {
522
514
  mutates_yida: true,
@@ -634,7 +626,6 @@ const COMMAND_PERMISSIONS = new Map([
634
626
  ...permissionEntries([
635
627
  'agent-capabilities',
636
628
  'app-list',
637
- 'check-design',
638
629
  'check-prd-completeness',
639
630
  'check-page',
640
631
  'commands',
@@ -645,7 +636,6 @@ const COMMAND_PERMISSIONS = new Map([
645
636
  'create-form.icons',
646
637
  'create-form.validate-fields',
647
638
  'dingtalk-link',
648
- 'design-plan.catalog',
649
639
  'dws.contact-user-search',
650
640
  'formula.evaluate',
651
641
  'get-form-config',
@@ -798,7 +788,7 @@ const COMMAND_PERMISSIONS = new Map([
798
788
  ...permissionEntries([
799
789
  'auth',
800
790
  ], actionDependentPermission({
801
- preauthorized_actions: ['login', 'refresh', 'logout', 'profile switch'],
791
+ preauthorized_actions: ['login', 'sync-dws', 'refresh', 'logout', 'profile switch'],
802
792
  })),
803
793
 
804
794
  ...permissionEntries([
@@ -1017,8 +1007,6 @@ function command(id, path, usage, descriptionKey, options = {}) {
1017
1007
  deprecatedPatterns: cloneJsonMetadata(options.deprecatedPatterns, []),
1018
1008
  repairPatterns: cloneJsonMetadata(options.repairPatterns, []),
1019
1009
  examples: cloneJsonMetadata(options.examples, []),
1020
- notes: cloneJsonMetadata(options.notes, []),
1021
- noteKeys: cloneJsonMetadata(options.noteKeys, []),
1022
1010
  hidden: options.hidden === true,
1023
1011
  sideEffect: cloneSideEffect(commandSideEffect),
1024
1012
  permission: clonePermission(normalizedPermission),
@@ -1035,7 +1023,7 @@ const COMMAND_GROUPS = [
1035
1023
  output: 'json',
1036
1024
  }),
1037
1025
  command('logout', ['logout'], 'logout', 'help.cmd_logout', { requiresLogin: false }),
1038
- command('auth', ['auth'], 'auth <status|login|refresh|logout|profiles|profile switch>', 'help.cmd_auth', { requiresLogin: false }),
1026
+ command('auth', ['auth'], 'auth <status|login|sync-dws|refresh|logout|profiles|profile switch>', 'help.cmd_auth', { requiresLogin: false }),
1039
1027
  command('org', ['org'], 'org <list|switch> [--json] [--corp-id <corpId>]', 'help.cmd_org'),
1040
1028
  command('env', ['env'], 'env [--json|setup|list|show|switch|add|remove] [options]', 'help.cmd_env', {
1041
1029
  requiresLogin: false,
@@ -1047,24 +1035,14 @@ const COMMAND_GROUPS = [
1047
1035
  id: 'app',
1048
1036
  titleKey: 'help.group_app',
1049
1037
  commands: [
1050
- command('app-list', ['app-list'], 'app-list [--type managed|created] [--page N] [--size N]', 'help.cmd_app_list', {
1051
- notes: ['Successful results include appUrl/workbenchUrl for the business workspace and adminUrl for developer administration. Complete application delivery retains adminUrl regardless of auth runtime; route construction does not verify recipient access. Preserve the frontend URL from its own page result.'],
1052
- }),
1038
+ command('app-list', ['app-list'], 'app-list [--type managed|created] [--page N] [--size N]', 'help.cmd_app_list'),
1053
1039
  command('corp-efficiency', ['corp-efficiency'], 'corp-efficiency [overview|details|detail|groups|notify] [options] [--open|--no-open]', 'help.cmd_corp_efficiency', {
1054
1040
  output: 'json',
1055
1041
  }),
1056
- command('create-app', ['create-app'], 'create-app "<name>"|--name <name> [options] [--locale zh_CN|en_US|ja_JP] [--open|--no-open]', 'help.cmd_create_app', {
1057
- notes: ['Successful results include appUrl/workbenchUrl for the business workspace and adminUrl for developer administration. Complete application delivery retains adminUrl regardless of auth runtime; route construction does not verify recipient access. Preserve the frontend URL from its own page result.'],
1058
- }),
1059
- command('design-plan.catalog', ['design-plan', 'catalog'], 'design-plan catalog [--json]', 'help.cmd_design_plan_catalog', {
1060
- requiresLogin: false, output: 'json',
1061
- args: [{ name: 'json', type: 'boolean', source: 'option', builder_options: ['--json'] }],
1062
- notes: ['Read available theme IDs and page patterns before init when the theme mapping is unknown. Theme summaries describe deep/light navigation and deep/light content in natural language; they do not expose navTheme/contentTheme assignment syntax. Reuse this result for the current planning session.'],
1063
- }),
1042
+ command('create-app', ['create-app'], 'create-app "<name>"|--name <name> [options] [--locale zh_CN|en_US|ja_JP] [--open|--no-open]', 'help.cmd_create_app'),
1064
1043
  command('design-plan.init', ['design-plan', 'init'], 'design-plan init <requirement-brief.json> [--theme-id <id>] [--output-dir <dir>] [--json]', 'help.cmd_design_plan_init', {
1065
1044
  requiresLogin: false,
1066
1045
  output: 'text|json',
1067
- notes: ['Requires a selected theme from --theme-id or visualSelection.themeId. There is no navigation-tone argument: init reads navTheme from the selected theme template, overwrites stale navigationStyle.tone, and records toneSource=theme_derived. Free creative preserves an explicitly authored navigationStyle.tone and records toneSource=project_defined. Returns preserved business facts, authoring.pendingFields with file/path/message, typed examples in authoring-context.md, and materialize.command with materialize.shell (powershell on Windows, posix elsewhere). Execute the command in that shell. Complete the pending facts, review business coverage, then set ready=true. Author ordered page blocks as {name,purpose}; omitted contentPriority and contentRichness.contentLayers derive from these blocks, preserving explicit overrides. Author project-specific acceptanceCriteria; materialize merges them with resource-based checks. A string visualSelection.colorStrategy is preserved as usage text with primaryColor pending; invalid types fail before files are written. Init guidance is preliminary; materialize still validates the completed plan.'],
1068
1046
  args: [
1069
1047
  { name: 'requirementBrief', type: 'file', required: true, source: 'positional', position: 0, builder_options: ['--requirement-brief'] },
1070
1048
  { name: 'themeId', type: 'string', required: false, source: 'option', builder_options: ['--theme-id'] },
@@ -1081,14 +1059,12 @@ const COMMAND_GROUPS = [
1081
1059
  ],
1082
1060
  notes: ['Updates completed fact modules in preview/ drafts. Modules share a source base; one writer updates changed sections and preserves custom CSS. Final materialize validates the complete plan and writes PRD, design, HTML and theme together.'],
1083
1061
  }),
1084
- command('design-plan.materialize', ['design-plan', 'materialize'], 'design-plan materialize <build-plan.json> [--from-preview | --business-file <json> --visual-file <json>] [--output-dir <dir>] [--rebase-parts] [--check] [--json]', 'help.cmd_design_plan_materialize', {
1085
- notes: ['Derives navigationStyle.tone and appConfig.navTheme from the selected theme template. Navigation appearance tokens come directly from that template plus explicit visualStyle.tokens; mode-independent tokens such as --pod-nav-menu-item-selected-shadow flow through the base token contract; materialize does not synthesize a light/dark replacement palette. Free creative uses project-authored navigation tone and tokens. Validates image slots before writing artifacts. JSON assetTasks lists taskKey/taskState, independent searches ordered by required/hero/design order, collection-wide concurrency, host-enforced time budgets, two-round limits, resume policy, output paths and resolve argv. After matching plan confirmation, executionContract requires checking background Agent and Bash separately, dispatching only verified nonblocking tools or doing authorized business work before synchronous asset batches; record real job IDs and continue app/form/page work; replace <appType> with the real ID for upload. Materialized PRD execution pages include navigationPolicy derived from app/page navigation: platform-shell is content-only; standalone without a planned menu renders no application menu. This command performs no search or upload. Local asset inputs resolve against the command cwd; absolute paths survive page-task directory changes.'],
1062
+ command('design-plan.materialize', ['design-plan', 'materialize'], 'design-plan materialize <build-plan.json> [--from-preview | --business-file <json> --visual-file <json>] [--output-dir <dir>] [--check] [--json]', 'help.cmd_design_plan_materialize', {
1086
1063
  requiresLogin: false,
1087
1064
  output: 'text|json',
1088
1065
  args: [
1089
1066
  { name: 'buildPlan', type: 'file', required: true, source: 'positional', position: 0, builder_options: ['--build-plan'] },
1090
1067
  { name: 'fromPreview', type: 'boolean', required: false, source: 'option', builder_options: ['--from-preview'] },
1091
- { name: 'rebaseParts', type: 'boolean', source: 'option', builder_options: ['--rebase-parts'] },
1092
1068
  { name: 'businessFile', type: 'file', required: false, source: 'option', builder_options: ['--business-file'] },
1093
1069
  { name: 'visualFile', type: 'file', required: false, source: 'option', builder_options: ['--visual-file'] },
1094
1070
  { name: 'outputDir', type: 'string', required: false, source: 'option', builder_options: ['--output-dir'] },
@@ -1097,41 +1073,17 @@ const COMMAND_GROUPS = [
1097
1073
  ],
1098
1074
  }),
1099
1075
  command('design-plan.patch', ['design-plan', 'patch'], 'design-plan patch <build-plan.json> --set <path=value> [--set <path=value> ...] [--materialize] [--output-dir <dir>] [--json]', 'help.cmd_design_plan_patch', {
1100
- notes: ['Edit the existing plan with one batch of --set assignments; do not restart init or rewrite business.json/visual.json. navigationStyle.tone, navigationStyle.toneSource and execution.appConfig.navTheme are derived and cannot be patched; change the selected theme instead. For free-creative only, navigationStyle.tone is authored and can be patched. With --materialize, update changed PRD/design/HTML sections and theme tokens, preserving unrelated local content and custom CSS. JSON updated lists artifact files actually written. The CLI maintains .build-plan-artifacts.json as the generated baseline; overlapping local edits fail before any writes. Without --materialize, validate and save source facts without rendering HTML or writing artifacts. Unpresented edits keep the draft revision; substantive edits to a presented version advance once and clear approval. Asset materialStatus/missingAssets updates preserve approval.'],
1101
1076
  requiresLogin: false,
1102
1077
  output: 'text|json',
1103
1078
  args: [
1104
1079
  { name: 'buildPlan', type: 'file', required: true, source: 'positional', position: 0, builder_options: ['--build-plan'] },
1105
- { name: 'set', type: 'string', required: true, source: 'option', builder_options: ['--set'], repeatable: true, description: 'Field assignment path=value; repeat --set for multiple changes. CSS token overrides use visualStyle.tokens.<token>=<value>.' },
1080
+ { name: 'set', type: 'string', required: true, source: 'option', builder_options: ['--set'], repeatable: true, description: 'Field assignment path=value; repeat --set for multiple changes.' },
1106
1081
  { name: 'materialize', type: 'boolean', source: 'option', builder_options: ['--materialize'] },
1107
1082
  { name: 'outputDir', type: 'string', source: 'option', builder_options: ['--output-dir'] },
1108
1083
  { name: 'json', type: 'boolean', source: 'option', builder_options: ['--json'] },
1109
1084
  ],
1110
1085
  }),
1111
- command('update-app', ['update-app'], 'update-app <appType> [--name "..."] [--desc "..."] [--icon <name>] [--icon-color <color>] [--colour <key>] [--theme-color <color>] [--theme-file <css>] [--nav-theme light|dark|white|gray] [--logo-source appIcon|customImage] [--layout side|top|l_shape] [--hide-app-nav|--show-app-nav]', 'help.cmd_update_app', {
1112
- args: [
1113
- { name: 'appType', type: 'string', required: true, source: 'positional', position: 0 },
1114
- { name: 'name', type: 'string', source: 'option', builder_options: ['--name', '-n'] },
1115
- { name: 'desc', type: 'string', source: 'option', builder_options: ['--desc', '-d'] },
1116
- { name: 'icon', type: 'string', source: 'option', builder_options: ['--icon'] },
1117
- { name: 'iconColor', type: 'string', source: 'option', builder_options: ['--icon-color'] },
1118
- { name: 'colour', type: 'string', source: 'option', builder_options: ['--colour', '--theme'], description: 'Platform theme key or custom; CSS colors belong in themeColor.' },
1119
- { name: 'themeColor', type: 'string', source: 'option', builder_options: ['--theme-color', '--themeColor'], description: 'App primary color; themeFile supplies the effective color when both are provided.' },
1120
- { name: 'themeFile', type: 'file', source: 'option', builder_options: ['--theme-file', '--custom-theme-file'], description: 'Completed application theme CSS, not a placeholder authoring bundle. Reads --color-brand1-6, uploads CSS and sets colour=custom. Supports app-theme.css or app_theme.css; use the actual generated path.' },
1121
- { name: 'navTheme', type: 'string', source: 'option', builder_options: ['--nav-theme', '--navTheme'], description: 'Platform value: light, dark, white or gray. Generated design flows pass the selected template-derived light/dark value explicitly; this option has no implicit light default.' },
1122
- { name: 'logoSource', type: 'string', source: 'option', builder_options: ['--logo-source', '--logoSource'], description: 'appIcon or customImage; customImage requires an existing homepageLogo.' },
1123
- { name: 'layoutDirection', type: 'string', source: 'option', builder_options: ['--layout', '--layout-direction', '--layoutDirection'], description: 'side, top or l_shape.' },
1124
- { name: 'hideAppNav', type: 'boolean', source: 'option', builder_options: ['--hide-app-nav'] },
1125
- { name: 'showAppNav', type: 'boolean', source: 'option', builder_options: ['--show-app-nav'] },
1126
- ],
1127
- notes: [
1128
- 'Upload application CSS with --theme-file; the primary color is read from CSS and saved with the theme resource. Edit navigation radius, three border states and selected shadow in design.md, regenerate CSS, then upload; these tokens are not separate update-app flags. Unknown options, missing values and combined --hide-app-nav/--show-app-nav are rejected.',
1129
- 'One design document and theme CSS cover navigation, application shell, native forms, custom pages and record details. tokens.application-global.appearance.navigation defines navigation surfaces, text and interaction states, logo, groups, search, popups, borders, radius and density. Platform-supported tokens are applied through the active navigation mode; page content consumes the same application theme.',
1130
- 'navigationVerification reads back explicitly requested navTheme, layoutDirection, hideAppNav and logoSource. A mismatch returns APP_NAVIGATION_NOT_PERSISTED and a nonzero exit code; only readback is retried. themeVerification independently verifies the uploaded theme resource. Verify rendered navigation, form, custom page and record detail after both checks pass.',
1131
- 'For generated design artifacts, pass themeProfile.navTheme from design.md to --nav-theme. Do not infer it from the business brief or omit it expecting a light default.',
1132
- 'Platform preset keys are used independently of --theme-file and --theme-color. Choose --hide-app-nav or --show-app-nav to set navigation visibility.',
1133
- ],
1134
- }),
1086
+ command('update-app', ['update-app'], 'update-app <appType> [--name "..."] [--theme-file <css>] [--nav-theme light|dark|white|gray] [--logo-source appIcon|customImage] [--layout side|top|l_shape] [--hide-app-nav|--show-app-nav]', 'help.cmd_update_app'),
1135
1087
  command('app-online', ['app-online'], 'app-online <appType> [--to-ding-app-center] [--show-app-center]', 'help.cmd_app_online'),
1136
1088
  command('app-offline', ['app-offline'], 'app-offline <appType> [--to-ding-app-center] [--show-app-center]', 'help.cmd_app_offline'),
1137
1089
  command('nav-group', ['nav-group'], 'nav-group <list|create|rename|delete|move|order|auto-order|hide|show> <appType> ...', 'help.cmd_nav_group', {
@@ -1165,9 +1117,9 @@ const COMMAND_GROUPS = [
1165
1117
  { name: 'check', type: 'boolean', source: 'option', builder_options: ['--check'], description: 'Validate definitions and dependency groups locally.' },
1166
1118
  { name: 'json', type: 'boolean', source: 'option', builder_options: ['--json'] },
1167
1119
  ],
1168
- notes: ['Creates independent normal forms concurrently after dependency validation. Each plan item accepts layout (single/double/card/section), theme (default/compact/comfortable), labelAlign (top/left/right), icon and locale, and forwards them to create-form create. References resolve from successful schema readbacks. Existing formUuid entries are read-only reuse. Saves IDs and status beside the plan; recoveryAction and nextAction are enum values: rerun_unchanged_plan reuses successful results and resumes known form IDs; inspect_unknown_write_then_reconcile requires checking uncertain writes before rerunning. Results expose appUrl and formUrl; url remains the compatible form entry. Navigation ordering and shared app configuration follow the batch.'],
1120
+ notes: ['Creates independent normal forms concurrently after dependency validation. References resolve from successful schema readbacks. Existing formUuid entries are read-only reuse. Saves IDs and status beside the plan; interrupted and failed creates require reconciliation. Navigation ordering and shared app configuration follow the batch.'],
1169
1121
  }),
1170
- command('create-form.create', ['create-form', 'create'], 'create-form create <appType> "<formTitle>" <fieldsJsonFile> [--layout single|double|card|section] [--theme default|compact|comfortable] [--label-align top|left|right] [--icon auto|<iconName>] [--locale zh_CN|en_US|ja_JP] [--open|--no-open]', 'help.cmd_create_form', {
1122
+ command('create-form.create', ['create-form', 'create'], 'create-form create <appType> "<formTitle>" <fieldsJsonFile> [--icon auto|<iconName>] [--locale zh_CN|en_US|ja_JP] [--open|--no-open]', 'help.cmd_create_form', {
1171
1123
  args: [
1172
1124
  {
1173
1125
  name: 'appType',
@@ -1198,36 +1150,6 @@ const COMMAND_GROUPS = [
1198
1150
  inline_json_rejected_options: ['--fields'],
1199
1151
  description: 'Path to a local JSON file containing field definitions.',
1200
1152
  },
1201
- {
1202
- name: 'layout',
1203
- type: 'string',
1204
- required: false,
1205
- source: 'option',
1206
- builder_options: ['--layout'],
1207
- default: 'single',
1208
- values: ['single', 'double', 'card', 'section'],
1209
- description: 'Form-wide layout preset: single, double, card or section. Numeric aliases 1 and 2 remain accepted by the CLI.',
1210
- },
1211
- {
1212
- name: 'theme',
1213
- type: 'string',
1214
- required: false,
1215
- source: 'option',
1216
- builder_options: ['--theme'],
1217
- default: 'default',
1218
- values: ['default', 'compact', 'comfortable'],
1219
- description: 'Form density preset: default, compact or comfortable; this is not the application visual theme.',
1220
- },
1221
- {
1222
- name: 'labelAlign',
1223
- type: 'string',
1224
- required: false,
1225
- source: 'option',
1226
- builder_options: ['--label-align'],
1227
- default: 'top',
1228
- values: ['top', 'left', 'right'],
1229
- description: 'PC field-label alignment: top, left or right.',
1230
- },
1231
1153
  {
1232
1154
  name: 'icon',
1233
1155
  type: 'string',
@@ -1238,24 +1160,13 @@ const COMMAND_GROUPS = [
1238
1160
  value_catalog_command_id: 'create-form.icons',
1239
1161
  description: 'Form navigation icon name. Use auto for semantic selection or run create-form.icons for supported values.',
1240
1162
  },
1241
- {
1242
- name: 'contentLocale',
1243
- type: 'string',
1244
- required: false,
1245
- source: 'option',
1246
- builder_options: ['--locale', '--content-locale', '--lang'],
1247
- values: ['zh_CN', 'en_US', 'ja_JP'],
1248
- description: 'Content locale: zh_CN, en_US or ja_JP (normalized locale aliases are also accepted).',
1249
- },
1250
- { name: 'open', type: 'boolean', required: false, source: 'option', builder_options: ['--open'] },
1251
- { name: 'noOpen', type: 'boolean', required: false, source: 'option', builder_options: ['--no-open'] },
1252
1163
  ],
1253
1164
  canonical: {
1254
1165
  command_id: 'create-form.create',
1255
1166
  path: ['create-form', 'create'],
1256
1167
  argv_template: ['create-form', 'create', '<appType>', '<formTitle>', '<fieldsJsonFile>'],
1257
1168
  display: 'openyida create-form create <appType> "<formTitle>" <fieldsJsonFile>',
1258
- builder: 'openyida commands build create-form.create --app-type <appType> --form-title "<formTitle>" --fields-json-file <fieldsJsonFile> [--layout single|double|card|section] [--theme default|compact|comfortable] [--label-align top|left|right] [--icon <iconName>] [--locale zh_CN|en_US|ja_JP] [--open|--no-open] --json',
1169
+ builder: 'openyida commands build create-form.create --app-type <appType> --form-title "<formTitle>" --fields-json-file <fieldsJsonFile> [--icon <iconName>] --json',
1259
1170
  },
1260
1171
  deprecatedPatterns: [
1261
1172
  {
@@ -1285,10 +1196,9 @@ const COMMAND_GROUPS = [
1285
1196
  ],
1286
1197
  examples: [
1287
1198
  'openyida create-form create APP_XXX "访客登记" .cache/openyida/visitor/fields.json',
1288
- 'openyida create-form create APP_XXX "访客登记" .cache/openyida/visitor/fields.json --layout section --theme comfortable --label-align left --icon name-card --locale zh_CN --no-open',
1289
- 'openyida commands build create-form.create --app-type APP_XXX --form-title "访客登记" --fields-json-file .cache/openyida/visitor/fields.json --layout section --theme comfortable --label-align left --locale zh_CN --no-open --json',
1199
+ 'openyida create-form create APP_XXX "访客登记" .cache/openyida/visitor/fields.json --icon name-card',
1200
+ 'openyida commands build create-form.create --app-type APP_XXX --form-title "访客登记" --fields-json-file .cache/openyida/visitor/fields.json --json',
1290
1201
  ],
1291
- notes: ['Divider accepts the 23 visible platform styles (none is excluded) through field JSON dividerType, not a CLI flag. Omission falls back to bold-with-thin; invalid supplied styles fail. Choose per business page and keep same-level sections consistent; see summary.core_workflows.full_app_build.divider_style_contract.'],
1292
1202
  }),
1293
1203
  command('create-form.icons', ['create-form', 'icons'], 'create-form icons [--json]', 'help.cmd_list_form_icons', {
1294
1204
  requiresLogin: false,
@@ -1316,9 +1226,7 @@ const COMMAND_GROUPS = [
1316
1226
  requiresLogin: false,
1317
1227
  }),
1318
1228
  command('create-form.update', ['create-form', 'update'], 'create-form update <appType> <formUuid> (<changesJsonOrFile> | --data-file <changesJsonOrFile>) [--locale zh_CN|en_US|ja_JP] [--open|--no-open]', 'help.cmd_update_form'),
1319
- command('create-form.resume', ['create-form', 'resume'], 'create-form resume <appType> <formUuid> <fieldsJsonOrFile> [--json]', 'help.cmd_update_form', {
1320
- notes: ['On save-schema HTTP 5xx, read back the latest schema. Accept already-applied fields or retry missing compatible fields once with the latest revision; conflicts and other failures stop. Success includes appUrl, formUrl and the compatible url field.'],
1321
- }),
1229
+ command('create-form.resume', ['create-form', 'resume'], 'create-form resume <appType> <formUuid> <fieldsJsonOrFile> [--json]', 'help.cmd_update_form'),
1322
1230
  command('create-form.patch', ['create-form', 'patch'], 'create-form patch <appType> <formUuid> <patchJsonOrFile> [--open|--no-open]', 'help.cmd_update_form'),
1323
1231
  command('create-form.rule', ['create-form', 'rule'], 'create-form rule <appType> <formUuid> <rulesJsonOrFile> [--open|--no-open]', 'help.cmd_update_form'),
1324
1232
  command('create-form.validation', ['create-form', 'validation'], 'create-form validation <appType> <formUuid> <validationsJsonOrFile> [--open|--no-open]', 'help.cmd_update_form'),
@@ -1336,100 +1244,17 @@ const COMMAND_GROUPS = [
1336
1244
  }),
1337
1245
  command('check-prd-completeness', ['check-prd-completeness'], 'check-prd-completeness <prd.md> --app-type <appType> [--build-manifest <file>] [--json]', 'help.cmd_check_prd_completeness', {
1338
1246
  output: 'json',
1339
- notes: ['Checks resource counts and optional build-manifest.assetExecution recorded intervals. Include materialize.assetTasks and taskState records plus businessWork startedAt/endedAt; missing dispatch proof, missing overlap or assets before business in synchronous fallback produces needs_review. This is record consistency, not independent verification of host events.'],
1340
- }),
1341
- command('check-design', ['check-design'], 'check-design <design.md> [--prd <prd.md>] [--base-dir <dir>] [--json]', 'help.cmd_check_design', {
1342
- requiresLogin: false,
1343
- output: 'text|json',
1344
- notes: ['Checks declared iconSystem.colorPairs against resolved design tokens. Each pair has a unique name, foreground, background and an opaque surface when the background is translucent. Icon contrast must reach 3:1; JSON iconContrast reports the checked pairs. Unsupported colors and missing surfaces fail rather than count as verified. This does not inspect browser styles, inherited opacity, gradients or undeclared icon colors.'],
1345
- args: [
1346
- { name: 'design', type: 'file', source: 'positional', position: 0, required: true },
1347
- { name: 'prd', type: 'file', source: 'option', builder_options: ['--prd'] },
1348
- { name: 'baseDir', type: 'string', source: 'option', builder_options: ['--base-dir'], description: 'Project root for PRD designFile references; defaults to the current working directory. Input file arguments remain relative to the working directory.' },
1349
- { name: 'json', type: 'boolean', source: 'option', builder_options: ['--json'] },
1350
- ],
1351
1247
  }),
1352
1248
  command('er', ['er'], 'er <appType> [--format mermaid|json] [--output file] [--include-system] [--include-pages]', 'help.cmd_er', {
1353
1249
  output: 'text|json',
1354
1250
  }),
1355
- command('create-page', ['create-page'], 'create-page <appType> "<name>" [--mode dashboard] [--hide-nav] [--locale zh_CN|en_US|ja_JP] [--open|--no-open]', 'help.cmd_create_page', {
1356
- output: 'text|json',
1357
- args: [
1358
- { name: 'appType', type: 'string', source: 'positional', position: 0, required: true },
1359
- { name: 'pageName', type: 'string', source: 'positional', position: 1, required: true },
1360
- { name: 'mode', type: 'string', source: 'option', builder_options: ['--mode'], description: 'default or dashboard; neither hides navigation automatically.' },
1361
- { name: 'hideNav', type: 'boolean', source: 'option', builder_options: ['--hide-nav', '--hide-navigation', '--no-nav'] },
1362
- { name: 'renderNav', type: 'string', source: 'option', builder_options: ['--render-nav', '--is-render-nav', '--isRenderNav'], description: 'Compatibility alias: false hides navigation, true retains the default. Accepts true/false, 1/0, yes/no, y/n; last navigation option wins.' },
1363
- { name: 'locale', type: 'string', source: 'option', builder_options: ['--locale', '--content-locale', '--lang'], description: 'Content locale: zh_CN, en_US or ja_JP (also accepts normalized locale aliases).' },
1364
- { name: 'open', type: 'boolean', source: 'option', builder_options: ['--open'] },
1365
- { name: 'noOpen', type: 'boolean', source: 'option', builder_options: ['--no-open'] },
1366
- ],
1367
- notes: [
1368
- 'Returns a JSON result with progress text; there is no command-specific --json flag. pageId is the created display page formUuid.',
1369
- '--hide-nav updates the created page and reads its configuration back, with at most one repair write. navigationVerification contains requestedRenderNav, renderNav (boolean|null), verified and attempts. Read renderNav first; use isRenderNav only when renderNav is absent. URL query parameters are not readback evidence.',
1370
- 'Without --hide-nav: hideNavRequested=false, hideNav=false, chromeless=false and navigationVerification=null. With --hide-nav: hideNav reports the readback result (null if unknown); chromeless=true and the hidden-navigation URL require verified=true.',
1371
- 'Unverified hiding exits nonzero with success=false, pageCreated=true, pageId and CREATE_PAGE_NAVIGATION_NOT_VERIFIED. Use recovery.command/args and recovery.verifyCommand/verifyArgs on that existing page. Never repeat create-page to repair navigation.',
1372
- ],
1373
- }),
1251
+ command('create-page', ['create-page'], 'create-page <appType> "<name>" [--mode dashboard] [--hide-nav] [--locale zh_CN|en_US|ja_JP] [--open|--no-open]', 'help.cmd_create_page'),
1374
1252
  command('build-page', ['build-page'], 'build-page <sourceFile> [--output file|--write]', 'help.cmd_build_page', { requiresLogin: false }),
1375
- command('check-page', ['check-page'], 'check-page <src> [--compat] [--json]', 'help.cmd_check_page', {
1376
- requiresLogin: false,
1377
- output: 'text|json',
1378
- args: [
1379
- { name: 'src', type: 'file', source: 'positional', position: 0, required: true },
1380
- { name: 'compat', type: 'boolean', source: 'option', builder_options: ['--compat', '--modern'] },
1381
- { name: 'json', type: 'boolean', source: 'option', builder_options: ['--json'] },
1382
- ],
1383
- notes: ['Local source validation, including form-open-container checks for recognized form links and drawer structure. Fails with CHECK_PAGE_FAILED and per-rule diagnostics. Dynamic interactions still require runtime verification.'],
1384
- }),
1385
- command('compile', ['compile'], 'compile <src> [--canvas] [--compat] [--skip-lint] [--json]', 'help.cmd_compile', {
1386
- requiresLogin: false,
1387
- output: 'text|json',
1388
- args: [
1389
- { name: 'src', type: 'file', source: 'positional', position: 0, required: true },
1390
- { name: 'canvas', type: 'boolean', source: 'option', builder_options: ['--canvas'] },
1391
- { name: 'compat', type: 'boolean', source: 'option', builder_options: ['--compat', '--modern'] },
1392
- { name: 'skipLint', type: 'boolean', source: 'option', builder_options: ['--skip-lint'], description: 'Legacy JSX lint only; does not bypass Canvas compilation checks.' },
1393
- { name: 'json', type: 'boolean', source: 'option', builder_options: ['--json'] },
1394
- ],
1395
- notes: ['Canvas compilation checks theme provider mounting, theme reads before the provider is active, module-level theme context declarations, fixed ConfigProvider brand colors, and known navigation destinations missing appType. Extract canvas-theme and canvas-navigation before coding. Form actions also require the maintained form-open-container fragment, hook and rendered container. Dynamic colors, resource identity and runtime rendering still require verification.'],
1396
- }),
1397
- command('publish', ['publish'], 'publish <src> <appType> <formUuid> [--health-check] [--force] [--canvas] [--compat] [--skip-lint] [--auto-nav-order] [--open|--no-open] [--json]', 'help.cmd_publish', {
1398
- args: [
1399
- { name: 'src', type: 'file', source: 'positional', position: 0, required: true },
1400
- { name: 'appType', type: 'string', source: 'positional', position: 1, required: true },
1401
- { name: 'formUuid', type: 'string', source: 'positional', position: 2, required: true },
1402
- { name: 'healthCheck', type: 'boolean', source: 'option', builder_options: ['--health-check', '--check'] },
1403
- { name: 'force', type: 'boolean', source: 'option', builder_options: ['--force'], description: 'Override target checks; does not bypass Canvas compilation checks.' },
1404
- { name: 'canvas', type: 'boolean', source: 'option', builder_options: ['--canvas'] },
1405
- { name: 'compat', type: 'boolean', source: 'option', builder_options: ['--compat', '--modern'] },
1406
- { name: 'skipLint', type: 'boolean', source: 'option', builder_options: ['--skip-lint'], description: 'Legacy JSX lint only; does not bypass Canvas compilation checks.' },
1407
- { name: 'autoNavOrder', type: 'boolean', source: 'option', builder_options: ['--auto-nav-order'] },
1408
- { name: 'open', type: 'boolean', source: 'option', builder_options: ['--open'] },
1409
- { name: 'noOpen', type: 'boolean', source: 'option', builder_options: ['--no-open'] },
1410
- { name: 'json', type: 'boolean', source: 'option', builder_options: ['--json'] },
1411
- ],
1412
- notes: ['Canvas publishing runs the same theme and form-open-container structure checks as compile before login or remote writes. --force does not bypass Canvas compilation checks. --health-check verifies saved content; inspect the actual page for runtime behavior.'],
1413
- }),
1414
- command('update-form-config', ['update-form-config'], 'update-form-config <appType> <formUuid> <true|false|keep> "<title>" [--locale zh_CN|en_US|ja_JP]', 'help.cmd_update_form_config', {
1415
- args: [
1416
- { name: 'appType', type: 'string', source: 'positional', position: 0, required: true },
1417
- { name: 'formUuid', type: 'string', source: 'positional', position: 1, required: true },
1418
- { name: 'isRenderNav', type: 'string', source: 'positional', position: 2, required: true, description: 'true, false or keep; use false for hide-navigation recovery.' },
1419
- { name: 'title', type: 'string', source: 'positional', position: 3, required: true },
1420
- { name: 'locale', type: 'string', source: 'option', builder_options: ['--locale', '--content-locale', '--lang'] },
1421
- ],
1422
- notes: ['A successful write acknowledgement is not navigation readback. Follow with get-form-config <appType> <formUuid> --json; inspect renderNav, falling back to isRenderNav only when renderNav is absent.'],
1423
- }),
1424
- command('get-form-config', ['get-form-config'], 'get-form-config <appType> <formUuid> [--json]', 'help.cmd_get_form_config', {
1425
- output: 'json',
1426
- args: [
1427
- { name: 'appType', type: 'string', source: 'positional', position: 0, required: true },
1428
- { name: 'formUuid', type: 'string', source: 'positional', position: 1, required: true },
1429
- { name: 'json', type: 'boolean', source: 'option', builder_options: ['--json'] },
1430
- ],
1431
- notes: ['Navigation readback uses renderNav first, falling back to isRenderNav only when renderNav is absent. true/false booleans and strings are recognized; missing or invalid values remain unknown. --json includes the raw configuration; the default summary preserves both navigation fields when present.'],
1432
- }),
1253
+ command('check-page', ['check-page'], 'check-page <src> [--compat]', 'help.cmd_check_page', { output: 'text|json' }),
1254
+ command('compile', ['compile'], 'compile <src> [--canvas] [--json]', 'help.cmd_compile', { requiresLogin: false, output: 'text|json' }),
1255
+ command('publish', ['publish'], 'publish <src> <appType> <formUuid> [--health-check] [--force] [--canvas] [--auto-nav-order] [--open|--no-open]', 'help.cmd_publish'),
1256
+ command('update-form-config', ['update-form-config'], 'update-form-config <appType> <formUuid> <true|false|keep> "<title>" [--locale zh_CN|en_US|ja_JP]', 'help.cmd_update_form_config'),
1257
+ command('get-form-config', ['get-form-config'], 'get-form-config <appType> <formUuid> [--json]', 'help.cmd_get_form_config', { output: 'json' }),
1433
1258
  ],
1434
1259
  },
1435
1260
  {
@@ -1437,8 +1262,6 @@ const COMMAND_GROUPS = [
1437
1262
  titleKey: 'help.group_data',
1438
1263
  commands: [
1439
1264
  command('data', ['data'], 'data <query|get|create|update> <resource> ... | delete form <appType> <formUuid> --inst-id <id> --expect-form-name <name> --expect-form-type receipt --confirm [--json]', 'help.cmd_data', {
1440
- output: 'json',
1441
- noteKeys: ['help.data_notes'],
1442
1265
  examples: [
1443
1266
  'openyida data create form APP_XXX FORM_XXX --expect-form-name 客户 --expect-form-type receipt --data-json \'{"textField_name":"客户 A","dateField_followUp":1787932800000}\'',
1444
1267
  'openyida data delete form APP_XXX FORM_XXX --inst-id FINST_XXX --expect-form-name 客户 --expect-form-type receipt --confirm --json',
@@ -1472,9 +1295,7 @@ const COMMAND_GROUPS = [
1472
1295
  command('configure-process', ['configure-process'], 'configure-process <appType> <formUuid> <definition> [processCode] [--replace]', 'help.cmd_configure_process', {
1473
1296
  examples: ['openyida configure-process APP_XXX FORM_XXX .cache/openyida/process/process-with-actions.json'],
1474
1297
  }),
1475
- command('create-process', ['create-process'], 'create-process <appType> <formTitle> <fieldsJsonFile> <processDefinitionFile> [--replace] | create-process <appType> --formUuid <formUuid> <processDefinitionFile> [--replace]', 'help.cmd_create_process', {
1476
- output: 'json',
1477
- noteKeys: ['help.create_process_notes'],
1298
+ command('create-process', ['create-process'], 'create-process <appType> ... [--replace]', 'help.cmd_create_process', {
1478
1299
  examples: [
1479
1300
  'openyida create-process APP_XXX "Approval Form" .cache/openyida/process/fields.json .cache/openyida/process/process-with-actions.json',
1480
1301
  'openyida create-process APP_XXX --formUuid FORM_XXX .cache/openyida/process/process-with-actions.json',
@@ -1520,7 +1341,7 @@ const COMMAND_GROUPS = [
1520
1341
  command('connector.update-action', ['connector', 'update-action'], 'connector update-action --connector-id <id> --action <operationId> --query-json JSON --confirm', 'help.cmd_connector_update_action'),
1521
1342
  command('connector.list-actions', ['connector', 'list-actions'], 'connector list-actions <id>', 'help.cmd_connector_list_actions'),
1522
1343
  command('connector.delete-action', ['connector', 'delete-action'], 'connector delete-action <id> <operation-id>', 'help.cmd_connector_delete_action'),
1523
- command('connector.test', ['connector', 'test'], 'connector test --connector-id <id> --action <actionId> [--path-json JSON] [--query-json JSON] [--header-json JSON] [--body-json JSON] [--account-id <id>] [--system-token-app <appType>] [--ignore-defaults]', 'help.cmd_connector_test'),
1344
+ command('connector.test', ['connector', 'test'], 'connector test --connector-id <id> --action <actionId> [--path-json JSON] [--query-json JSON] [--header-json JSON] [--body-json JSON] [--account-id <id>] [--system-token-app <appType>]', 'help.cmd_connector_test'),
1524
1345
  command('connector.list-connections', ['connector', 'list-connections'], 'connector list-connections <id>', 'help.cmd_connector_list_connections'),
1525
1346
  command('connector.create-connection', ['connector', 'create-connection'], 'connector create-connection <id> <name> [--interactive]', 'help.cmd_connector_create_connection'),
1526
1347
  command('connector.smart-create', ['connector', 'smart-create'], 'connector smart-create --curl "..."', 'help.cmd_connector_smart'),
@@ -1585,31 +1406,15 @@ const COMMAND_GROUPS = [
1585
1406
  output: 'text|json',
1586
1407
  }),
1587
1408
  command('copy', ['copy'], 'copy [--force]', 'help.cmd_copy', { requiresLogin: false }),
1588
- command('sample', ['sample'], 'sample [--list] [<skill> <name>] [--output <file-or-directory>] [--var KEY=VALUE ...] [--design-file <design.md>] [--style-id <themeId|free-creative>]', 'help.cmd_sample', {
1409
+ command('sample', ['sample'], 'sample [--list] [<skill> <name>] [--output <file>] [--var KEY=VALUE ...] [--design-file <design.md>]', 'help.cmd_sample', {
1589
1410
  requiresLogin: false,
1590
- output: 'text|json',
1591
- notes: [
1592
- 'yida-design app-theme reads concrete tokens from --design-file and writes CSS plus a sibling <output>.tokens.md update snapshot. The same output path preserves project CSS and applies changed tokens. Without --design-file it resets the output to the public base template. Menu radius, normal/hover/selected borders and selected shadow apply to side, L-shaped and top navigation; older CSS gains missing menu-shape rules when the design supplies menu-border tokens.',
1593
- 'yida-design application-style --style-id supports every catalog theme and exports a three-file design.md/app_theme.css/form-layout.json authoring bundle to an output directory without overwriting files. Brand primary and hover values remain project placeholders until app-theme --design-file generates concrete CSS. Use design-plan catalog for presets and its separate creativeOption; free creative requires independent business decisions and explicit design tokens.',
1594
- 'Author menu radius, normal/hover/selected borders, selected shadow, item height, padding, gap and shell spacing together in design.md navigation tokens (Fast) or visualStyle.tokens (Plan). These are design values, not separate CLI flags. Preset appearance does not override the business navigation layout. Verify native data-management navigation and business pages in workbench access mode; /admin is the development configuration surface.',
1595
- 'Native forms use a component tree with top, left, main, right and between-field regions. Platform form components include tabs, button groups, images/graphics, status areas, dividers, columns and business fields, serving navigation, actions, visual focus, feedback, hierarchy, decoration and data capture. Application-style form-layout.json provides an editable starting layout for openyida create-form: use the supported business fields, Divider and ColumnContainer, and retain other existing components when updating a form.',
1596
- 'canvas-nav-side/top/mixed/dock consume the same menu radius, normal/hover/selected borders and selected shadow as platform navigation. Side and Dock items read menu item height/padding; top and mixed header items read top-tab height/padding/max-width. Side/top/mixed menus read menu-gap; Dock reads slide-collapsed-menu-gap. Side shell padding uses slide-aside-padding and mixed uses l-aside-padding. Re-export the fragment, integrate it into existing page source and republish to upgrade existing custom navigation. canvas-nav-tabs remains an in-page tab control.',
1597
- 'Canvas form-drawer, table-form and trend-combo samples include the maintained CanvasThemeProvider, read the current application CSS variables, and prevent loading-mask border flashes caused by late CSS resets.',
1598
- 'form-fields demonstrates field layout, not a default divider design. Choose dividerType for the current business page before creating forms; keep same-level sections consistent and vary different business pages when appropriate.',
1599
- 'openyida-page-template canvas-theme outputs the same provider as a reusable fragment; combine its imports and code with the business page in one Canvas file, keeping its scoped loading-mask style. Existing pages must update their provider and be republished; changing application theme CSS alone does not upgrade embedded provider code.',
1600
- 'openyida-page-template form-open-container extracts the maintained Canvas form drawer. Merge its imports, CanvasDrawer, FormOpenContainer, useYidaFormOpen and helpers; bind openForm(request) and render formOpenContainer. Do not replace it with a similarly named custom drawer.',
1601
- 'canvas-admin-entry includes canvas-navigation and a theme-aware business-workbench button. Visibility uses the current app-scoped loginUser.isAppAdmin flag (y/true only), matching g_config/pageConfig app identity with conflicts kept unknown, never CLI identities or a copied admin list. Configure a verified business page ID; unknown identity stays hidden and backend authorization remains authoritative.',
1602
- 'canvas-view-state restores the current local task view, allowlisted non-sensitive enum filters and page through URL state, preserving unrelated query/hash/history metadata. Use only without an existing router or unsaved-edit blockers; drafts, per-task caches and scroll need explicit policies. Verify iframe refresh/return behavior in the host. Business writes require verified server-side role, record, field and state-transition authorization; hidden buttons do not grant or enforce it.',
1603
- 'Extract canvas-theme before antd UI and canvas-navigation before cross-page actions; use verified target types and resource IDs. Local tabs use state. Compile/publish reject known app-prefix omissions and fixed ConfigProvider brand colors; runtime theme and destination verification is still required.',
1604
- ],
1605
1411
  args: [
1606
1412
  { name: 'skill', type: 'string', source: 'positional', position: 0, description: 'Required when copying a sample.' },
1607
1413
  { name: 'name', type: 'string', source: 'positional', position: 1, description: 'Required when copying a sample; use --list for available names.' },
1608
1414
  { name: 'list', type: 'boolean', source: 'option', builder_options: ['--list'] },
1609
- { name: 'output', type: 'file', source: 'option', builder_options: ['--output'], description: 'Output file for ordinary samples/app-theme; output directory for application-style. Defaults under cwd/.cache/samples; application-style defaults to its application-style subdirectory and rejects an existing bundle file.' },
1610
- { name: 'var', type: 'string', source: 'option', builder_options: ['--var'], repeatable: true, description: 'Ordinary sample assignment KEY=VALUE; repeat --var for multiple variables. Not accepted by yida-design app-theme or application-style; complete design.md before generating theme CSS.' },
1611
- { name: 'designFile', type: 'file', source: 'option', builder_options: ['--design-file'], description: 'Only for yida-design app-theme: completed design.md with concrete tokens. Optional for a base-template reset; supply it to generate or incrementally update project CSS.' },
1612
- { name: 'styleId', type: 'string', source: 'option', builder_options: ['--style-id'], description: 'Required only for yida-design application-style. Accepts any themeId from design-plan catalog, including shared themes and free-creative. Exports design.md, app_theme.css and form-layout.json with brand placeholders; accepts neither --design-file nor --var.' },
1415
+ { name: 'output', type: 'file', source: 'option', builder_options: ['--output'] },
1416
+ { name: 'var', type: 'string', source: 'option', builder_options: ['--var'], repeatable: true, description: 'Template assignment KEY=VALUE; repeat --var for multiple variables.' },
1417
+ { name: 'designFile', type: 'file', source: 'option', builder_options: ['--design-file'], description: 'Design tokens for yida-design app-theme; preserves custom CSS when updating.' },
1613
1418
  ],
1614
1419
  }),
1615
1420
  command('doctor', ['doctor'], 'doctor [--fix]', 'help.cmd_doctor', { requiresLogin: false }),
@@ -1636,13 +1441,6 @@ const COMMAND_GROUPS = [
1636
1441
  output: 'text|json',
1637
1442
  }),
1638
1443
  command('asset', ['asset'], 'asset <status|resolve|sources> [options]', 'help.cmd_asset', {
1639
- noteKeys: ['asset.sourceRecords'],
1640
- notes: ['resolve --page-id <pageId> selects a page from --design or input assetStrategy; output contains only that page. Use distinct --manifest paths for concurrent page jobs. Host search follows collection_policy; resolve performs one attempt per supplied candidate. Verified hotlink-allowed URLs are delivered directly without login or appType. Draft assets accept hotlinkAllowed/rehostAllowed booleans and deliveryMode=auto|upload. Stock CDN URLs allow hotlinking by default; Unsplash requires hotlinking unless separate rehosting permission is recorded. --upload-assets requests permitted hosting; upload failure keeps only a verified hotlink-allowed original URL.'],
1641
- args: [
1642
- { name: 'pageId', type: 'string', source: 'option', builder_options: ['--page-id'], description: 'Resolve only this page; requires design or input assetStrategy.' },
1643
- { name: 'appType', type: 'string', source: 'option', builder_options: ['--app-type'], description: 'Target application for uploads; direct URLs need no application.' },
1644
- { name: 'uploadAssets', type: 'boolean', source: 'option', builder_options: ['--upload-assets'], description: 'Request hosting where rehosting is allowed; otherwise use verified direct URLs by default.' },
1645
- ],
1646
1444
  requiresLogin: false,
1647
1445
  output: 'text|json',
1648
1446
  }),
@@ -1676,7 +1474,6 @@ function localizeCommand(entry, translate) {
1676
1474
  deprecated_patterns: cloneJsonMetadata(entry.deprecatedPatterns, []),
1677
1475
  repair_patterns: cloneJsonMetadata(entry.repairPatterns, []),
1678
1476
  examples: entry.examples,
1679
- notes: [...cloneJsonMetadata(entry.notes, []), ...(entry.noteKeys || []).map(key => translate(key))],
1680
1477
  hidden: entry.hidden,
1681
1478
  side_effect: cloneSideEffect(entry.sideEffect),
1682
1479
  permission: clonePermission(entry.permission),
@@ -1749,35 +1546,12 @@ function summarizeLocalizedCommands(commands) {
1749
1546
  default_ui_guidance_skill_id: 'yida-design',
1750
1547
  requirement_analysis_skill_id: 'yida-requirement-analysis',
1751
1548
  requirement_brief_path: '.cache/openyida/<project>/requirement-brief.json',
1752
- visual_decision_policy: getVisualDecisionPolicy(),
1753
- user_visible_expression_policy: {
1754
- reference: 'yida-skills/skills/yida-design/references/ask-human-interaction-contract.md',
1755
- audience: 'nontechnical_user',
1756
- wording: 'Use everyday language, concrete business names and short sentences. Lead with the result or action; explain necessary technical terms on first use.',
1757
- progress: 'Say what is happening and what happens next. Report completed work from verified results.',
1758
- image_progress: 'Use 素材采集&应用创建 as the progress description while image collection and app creation are both running; otherwise use the active stage name. Keep the todo items separate. Record image counts, slots, subtasks and execution details internally.',
1759
- todo: {
1760
- templates: 'yida-skills/skills/yida-design/references/ask-human-interaction-contract.md#步骤列表与进度',
1761
- titles: 'Use the exact short stage titles for the selected mode; keep app, forms, sample data, images, pages and publication as separate items.',
1762
- scope: 'Select stages needed by the agreed scope; omit app creation for an existing app and omit unused sample-data/image stages.',
1763
- updates: 'Keep titles and display order stable; update statuses and retain completed items. Display order permits parallel work.',
1764
- details: 'Put business details in progress messages; record commands, task IDs, authorization context and timings internally. Put requested timing summaries in the report.',
1765
- },
1766
- questions: 'Ask one concrete decision and explain each option by what the user can do.',
1767
- failures: 'State what failed, the actual impact and the next safe action. Explain only evidenced causes; describe unknown outcomes as pending verification.',
1768
- waiting: 'Explain what is taking time and what can continue. Give time estimates only with a basis and update them when circumstances change.',
1769
- diagnostics: 'Keep exact technical fields and error codes in tool results and implementation handoffs; explain them when the user asks for technical details.',
1770
- },
1771
1549
  optional_asset_branch: {
1772
1550
  skill_id: 'yida-image-assets',
1773
- collection_policy: getMaterialSourcingGuidance().collectionPolicy,
1774
- failure_policy: getMaterialSourcingGuidance().failurePolicy,
1775
- completion_policy: getMaterialSourcingGuidance().completionPolicy,
1776
- scheduling_policy: getMaterialSourcingGuidance().schedulingPolicy,
1777
1551
  trigger: 'Any page is imageNeed=required, or imageNeed=beneficial with declared image slots.',
1778
- output_path: 'prd/<project>/asset-manifests/<pageId>.json',
1552
+ output_path: 'prd/<project>/asset-manifest.json',
1779
1553
  skip: 'All pages are imageNeed=none.',
1780
- dependency_policy: 'After Plan confirmation, dispatch materialize.assetTasks through host background tools, record actual task IDs in taskState and continue app/form/page creation, layout, data binding and interactions. Fast derives the same tasks from design.md. Reattach running tasks; preserve deadlines and used rounds on resume. Use scheduling_policy for collection-wide concurrency, priorities and host-enforced budgets. One writer owns each page draft/manifest. Verify direct URLs as each page draft becomes ready; uploads additionally need appType. Read results at own-page image binding, waiting only after independent work. Check background_agent and background_shell independently. QwenWork may use Bash run_in_background only when the actual tool schema supports it; synchronous Agent calls are not background dispatch. Without usable background execution, perform authorized resource/seed/independent page work first, then bounded asset batches. Record dispatch return and business start/end intervals in build-manifest.assetExecution for check-prd-completeness; never claim overlap from task names alone.',
1554
+ dependency_policy: 'Only blocks pages that consume the declared image slots.',
1781
1555
  },
1782
1556
  artifact_generation: {
1783
1557
  mode: 'parallel',
@@ -1790,89 +1564,26 @@ function summarizeLocalizedCommands(commands) {
1790
1564
  join_owner_skill_id: 'yida-app',
1791
1565
  },
1792
1566
  ordinary_jsx_skill_id: 'yida-custom-page',
1793
- form_page_policy: 'Use yida-create-form-page for form structure and business actions. Use create-form.batch to create independent normal forms concurrently, resolve dependencies from real IDs and read back fields; apply shared app configuration, application theme, and navigation order afterward.',
1794
- divider_style_contract: {
1795
- reference: 'yida-skills/skills/yida-create-form-page/references/form-field-properties.md#divider',
1796
- input: 'fields[].dividerType (also inside layout children); field JSON, not a CLI flag',
1797
- schema_path: 'Divider.props.type',
1798
- supported_types: DIVIDER_TYPES,
1799
- fallback: DEFAULT_DIVIDER_TYPE,
1800
- selection: 'Choose by each page business task and visual weight; keep same-level sections consistent within a page. Prefer suitable variation across different business pages. If the scene is unclear or suitable candidates tie, shuffle compatible candidates and rotate across pages, preferring unused styles until exhausted. Record one choice per page in design.md and dividerType before compilation; retries reuse it. Preserve existing supported styles for local edits.',
1801
- invalid_input: 'INVALID_DIVIDER_TYPE diagnostics; create rejects with CREATE_FORM_INVALID_DIVIDER_TYPE. Never silently replace a supplied unsupported style.',
1802
- },
1567
+ form_page_policy: 'Use yida-create-form-page for form structure. Use create-form.batch to create independent normal forms concurrently, resolve dependencies from real IDs and read back fields; apply shared app configuration and navigation order afterward. Never inject CSS, JavaScript, HTML, or theme code into native forms or formDetail pages; the platform renders those pages.',
1803
1568
  page_skill_policy: 'Use YidaCodeCanvas by default for new primary custom pages. Choose yida-custom-page only when the current target has been identified as existing .oyd.jsx/.oyb.jsx/renderJsx/platform Jsx component maintenance; do not switch to yida-custom-page merely because a page needs data, forms, uploads, this.utils.yida.*, or dataSourceMap-like capabilities.',
1804
- form_entry_policy: {
1805
- scope: 'Ordinary page-level form creation, submission and detail actions in frontend and backend, Fast and Plan; full-code pages are not exempt.',
1806
- reference: 'yida-skills/skills/yida-canvas-custom-page/references/navigation-and-entry-guide.md#标准-formopencontainer',
1807
- sample_command: 'openyida sample openyida-page-template form-open-container --output .cache/samples/form-open-container.jsx',
1808
- integration: 'Merge CanvasDrawer, FormOpenContainer, useYidaFormOpen, imports and helpers. Bind openForm(request) and render formOpenContainer. Keep iframe, header controls, resize handlers and close refresh; desktop uses the drawer, mobile opens the native form.',
1809
- validation_command_ids: ['check-page', 'compile', 'publish'],
1810
- verification: 'Canvas preflight uses compile <source> --json; check-page is the legacy platform JSX preflight. Source checks detect recognized direct links, homemade overlays and incomplete template wiring; verify actual form interactions after publishing. Static checks do not prove all dynamic actions.',
1811
- exceptions: 'Search/filter controls are not form submission. Explicit batch entry uses the table-form skill. Planned application navigation may embed a native form in its main content; this does not exempt page action buttons.',
1812
- },
1813
- plan_command_ids: ['design-plan.catalog', 'design-plan.init', 'design-plan.preview', 'design-plan.materialize', 'design-plan.patch'],
1569
+ plan_command_ids: ['design-plan.init', 'design-plan.preview', 'design-plan.materialize', 'design-plan.patch'],
1814
1570
  theme_command_ids: ['sample', 'create-app', 'update-app'],
1815
1571
  navigation_command_ids: { platform: ['update-app', 'nav-group'], custom: ['update-app', 'update-form-config', 'get-form-config'] },
1816
- navigation_policy: 'Before PRD planning in Fast and Plan, the agent determines navigation ownership and layout from business context. Follow yida-design/references/navigation-decision.md for entry and layout decisions. Preserve explicit user requirements and existing navigation for local changes; resource-only requests operate on their specified resources and settings. Use native navigation by default for the application workspace, and custom navigation only for an explicitly justified application-level branded menu or special navigation interaction. A service frontend defaults to one coding page with its own menu and all selected business views; a single-step entry can use navigation.type=none. Choose backend native or coding pages by task efficiency. Backend coding pages in platform-shell are content-only: platform menus own cross-module navigation; local Tabs cover categories or states of the current task only. Never turn the management entry menu into a second page navbar, sidebar or module Tabs. Persistent filters/state alone do not justify custom application navigation. Plan handoff pages include derived navigationPolicy; Fast records the same boundary. Do not hide platform navigation to repair duplicate page menus. Store application navigation in navigationType and standalone entry menus in pageSpecHandoff.navigation. Configure a custom frontend menu at page scope and preserve workspace navigation. Record type/source/reason/variant using ai_default for agent ownership decisions and user_selected for explicit user requirements. Include navigation in the overall Plan confirmation; Fast implements the recorded decision. Platform navigation uses update-app --layout top|side|l_shape --show-app-nav, persisting layoutDirection and hideAppNav=n. Preserve stored navType. Without --layout, normalize legacy layoutDirection and navType using the application layout compatibility rules (hoz plus top_side means l_shape; missing layout uses top_fold/top_side for top/l_shape). Apply shell top_fold/none overrides at page scope. Application-wide custom side/top/mixed/dock uses app hiding plus per-page hiding within scope; a standalone frontend in a platform-navigation app uses only page configuration. Read back layoutDirection, hideAppNav and each configured page, then verify the planned frontend and workspace links. Navigation structure is separate from tone. Navigation tone is derived from the final selected theme template, never guessed from the business brief or implicitly defaulted to light; apply that explicit value with update-app --nav-theme. Custom top navigation defaults to edge-to-edge, not floating. Over a hero image, start transparent, add a surface on scroll, restore transparency at the top; expanded menus stay readable. Follow yida-design/references/page-continuity.md; floating requires an explicit design.',
1817
- design_mode_policy: 'Analyze requirements first with yida-requirement-analysis: read only necessary sources before the first question, offer concrete core-function candidates, clarify key usage, and preserve explicit scope and valid answers. Initial intake focuses on core functions and actual usage. Record actual user replies; proceed with dependent planning after a reply or explicit delegation. First-time builds include new apps and existing apps without business pages. After intake, reuse explicit mode choices and detailed supplied plans; if the user delegates the mode or asks for no more questions, use Fast unless Plan is explicit; otherwise, if the mode is unspecified, ask whether to prepare a PRD for confirmation (Plan, more detailed and slower) or build from the supplied requirements (Fast). Without detailed requirements, offer Fast and Plan neutrally. intake.confirmed records scope and key-usage clarification; the plan revision tracks plan approval separately. Fast and Plan share one three-direction visual generation rule. Fast compares exactly three directions internally and keeps the selected result. When Plan is explicit and the user has not supplied a complete visual direction, generate exactly three directions and use ask_human for the style choice before design-plan init; do not wait for the user to request a comparison. Planning preparation derives page scenes, selected theme mapping and navigation structure before init; mark AI suggestions and apply navigation_policy. Existing business apps only clarify the current change. A named resource-only request with explicitScope.allowInferredResources=false keeps planning within the specified resources. When theme mapping is missing, query design-plan catalog once and reuse its themes and pagePatterns. Init returns authoring.pendingFields and context with typed examples; complete pending facts and review coverage before setting ready=true. Reuse one complete agent-capabilities summary per unchanged environment. Standard Plan uses design-plan init parallelTasks, then executes the returned materialize.command exactly once with business-file and visual-file; preview and --from-preview are only for explicitly incremental large plans. Present the current plan without revision numbers in user-visible titles, summaries, attachments or questions. Keep revision in internal confirmation fields, validate it before building, and execute its generated artifacts.',
1818
- product_design_policy: 'yida-requirement-analysis owns shared facts and first-time intake. yida-prd owns business planning; yida-design owns visual design. Reuse the same confirmed brief and supplied details. Prepare business and base visuals concurrently, then bind visuals to settled page tasks. yida-app merges and checks the artifacts before creating resources. Plan authors scope, data and rules, page organization, business interactions and acceptance once. Ordered blocks {name,purpose} supply default priority and content layers; explicit designs remain authoritative. Project-specific acceptance criteria are merged with generated resource checks. Plan uses the compact authoring contract and selected theme context; the CLI reads full templates and renders all artifacts. Fast, Plan and single-page design share yida-design/templates/design-themes and the same three-direction generation rule. Theme templates declare application-global variables from basic-tokens.json with fixed typography, spacing and Tooltip colors, plus scoped custom-page variables; component recipes consume those variables. Each selected template is the authority for navTheme, its six navigation color tokens, and its selected-item shadow token; free-creative authors its own navigation tone and tokens. Explicit project customization stays in visualStyle.tokens. The CLI applies the selected template palette to its derived light or dark navigation mode, preserves mode-independent navigation appearance tokens, preserves inactive and white/gray platform modes, and never synthesizes a replacement navigation palette.',
1819
- ui_guidance_policy: 'Page implementation consumes yida-prd prd.md for positioning, information architecture, page prototype, native form entry policy, material strategy, business-specific checks, resource creation order, page implementation delivery order, navigation order, and acceptance criteria; it consumes yida-design design.md for app custom theme CSS delivery, themeColor/navTheme, visual states, visualScaffold, surface material, rounded rules, density rules, components, state styling, and page-level imageNeed. When a page is imageNeed=required, or beneficial with declared image slots, yida-image-assets prepares a traceable asset manifest alongside page layout and interaction work; wait for final images only at that page\'s image binding and acceptance. imageNeed=none skips the branch. prd.md and design.md remain the only design sources of truth. Page implementation may extract page-spec.json as a derived implementation handoff from prd.md + design.md; conflicts are resolved by sending business conflicts to yida-prd and visual conflicts to yida-design before regenerating the spec. Core normal forms default to 1-3 business sample records before page implementation, followed by query readback. An explicit opt-out, configuration dictionary, sensitive data, or lack of safely constructible values requires a recorded skip reason. Screenshots, public sharing, data-source deep binding, and fine navigation grouping are optional after explicit user request or PRD acceptance criteria.',
1820
- default_nav_order_policy: 'For application-wide custom navigation, implement each entry menu and verify app/page navigation hiding. A standalone frontend preserves platform navigation for the management workspace; frontend-only delivery skips platform ordering. After all scoped resources and page publications finish, perform exactly one navigation order operation. Use management tasks and their default destination, without creating a homepage or putting a frontend page first. When execution.entryRecommendation exists, derive navigationOrder from its management/workspace menus. Call openyida nav-group order <appType> <items...> for an explicit order; otherwise call openyida nav-group auto-order <appType> once for legacy single-workspace plans. Do not use openyida publish ... --auto-nav-order for per-page application builds. Explicit and automatic ordering are mutually exclusive; never generate per-item move loops.',
1821
- final_link_policy: 'Return exactly one user-visible application entry group, never one artifact or link card per form, process, report, schema, manifest, PRD, design file, or intermediate artifact. Include one verified management entry when a management or unified workspace is in scope: the app workbench URL or a planned workbench/formUuid URL with its real viewUuid. Backend-only returns its verified business backend entry and developer admin URL without adding a frontend. Native management does not require a display homepage; frontend-only delivery includes its verified frontend entry and developer admin URL, without inventing a business backend. Add the clean custom page URL only when PRD entryMode=standalone and get-form-config readback confirms renderNav=false (fallback to isRenderNav only when renderNav is absent). Complete application delivery defaults to 2-3 distinct entries: frontend or unified workspace, business backend when separately planned, and developer admin. agent-capabilities application_entry_policy.entries.admin=include is independent of auth runtime. Read adminUrl from create-app or app-list results; route construction does not verify recipient permissions. Explicit user exclusions take precedence; single-page tasks retain their scope. Put the business summary, verification results and remaining work in the terminal delivery artifact description; when no delivery tool is available, return the same content and entry group in the final response. Summarize business resources by capability or count, but every resource count, seed-record count, and completed/verified claim must come from that resource\'s own successful result or readback. When the user or caller explicitly requests a resource manifest, resource UUIDs/IDs, publish status, or test-data summary, include one concise verified delivery manifest in that description (or the final response when no delivery tool is available).',
1822
- entry_navigation_contract: {
1823
- reference: 'yida-skills/skills/yida-app/references/entry-navigation.md',
1824
- brief_path: 'entryRecommendation',
1825
- plan_path: 'execution.entryRecommendation',
1826
- input_transport: 'JSON file or design-plan patch --set execution.entryRecommendation=<json>; not a CLI flag',
1827
- modes: [...ENTRY_MODES],
1828
- mode_meaning: 'These modes describe how people use the application, not developer administration: unified shares business pages with role-based menus and permissions; service-management separates pages for people requesting a service and people processing it; frontend-only delivers only the requested frontend; backend-only delivers staff pages for recording, processing or maintaining business, with service requests originating elsewhere or no service entry required. For frontend-only submissions that need processing, record the existing system, staff entry or automation in reason and business flows; unresolved handling remains an open question. Backend-only entries use role management; new unified plans normally use workspace, while legacy unified plans retain their roles. Different roles alone do not require separate frontends and backends. Separate entries can share one application and its data.',
1829
- user_facing_explanation: 'Say whether the system has separate frontend and business-backend pages, then explain who uses each entry, what they see and what they can do. Choose from confirmed tasks; if actual usage is unclear and changes the page plan, ask a concrete business-use question.',
1830
- derived_summary: 'execution.entryModeSummary is generated for PRD and preview from the selected mode; do not author it in build-plan.json.',
1831
- roles: ['service', 'management', 'workspace'],
1832
- entry_required_fields: ['key', 'name', 'role', 'menu', 'defaultMenuKey'],
1833
- service_page_binding: 'sceneKey of a standalone page',
1834
- page_navigation_policy: getPageNavigationContract(),
1835
- local_menu_binding: 'Every entry containing local menus, including management/workspace, requires sceneKey matching exactly one page; each local menu requires resource equal to that page name and a nonempty viewKey.',
1836
- menu_target_types: ['local', 'submission', 'page', 'custom'],
1837
- menu_resource_reference: 'planned resource name; resolve to real formUuid before runtime',
1838
- menu_optional_fields: ['viewUuid', 'viewKey'],
1839
- planned_access_fields: ['resource', 'operation', 'dataScope', 'viewUuid?'],
1840
- leaf_access_required: 'Every leaf menu in every role requires access: OPERATE_CREATE for submission, OPERATE_VIEW otherwise, with matching target resource and viewUuid. These declarations do not grant permissions.',
1841
- runtime: {
1842
- applies_to: 'Confirmed page-owned application menus only. Platform-shell management pages use platform menus and content-only pages; same-task Tabs do not require canvas-nav-data or a navigation shell.',
1843
- sample: 'canvas-nav-data',
1844
- loader: 'loadCanvasNavigation',
1845
- parameters: ['items', 'appType?', 'formUuid?', 'csrfToken?', 'hiddenNav?', 'signal?', 'mode?', 'resolveAccess?'],
1846
- app_type_required: 'platform, independent or any declared access',
1847
- modes: ['local', 'platform', 'independent'],
1848
- local_policy: 'Presentation-only views require key/viewKey/targetType=local and no href/url; no platform navigation request. Declared access still requires real resolveAccess. Business data and mutations retain platform permission checks.',
1849
- platform_policy: 'Every leaf binds formUuid/navUuid. Local views must not be filtered through platform navigation; configuration errors fail before network requests.',
1850
- layout_policy: 'Long pages use canvas-nav-content layout=document with natural height; canvas-nav-top uses headerOnly and overlay. Default full-width sticky header; navigationPosition=fixed stays within page bounds when the host prevents sticky. Workspace retains bounded flex and inner scrolling.',
1851
- default_mode: 'platform',
1852
- mode_meaning: 'Permission/filtering source for an already planned custom menu; platform mode does not mean platform-shell pages should render another menu.',
1853
- resolve_access_required: 'independent mode or any declared access',
1854
- resolve_access_input: ['appType', 'requirements', 'signal'],
1855
- requirement_fields: ['formUuid', 'operation', 'viewUuid?'],
1856
- resolve_access_output: '{appType,grants:[{formUuid,operation,viewUuid?,allowed:boolean}]}',
1857
- builtin_permission_adapter: false,
1858
- permission_policy: 'Current viewer, exact resource/operation/view and allowed===true; errors never fall back to unrestricted menus. dataScope is enforced by platform permissions, not menu filtering.',
1859
- },
1860
- },
1572
+ navigation_policy: 'Before PRD planning, reuse explicit navigation choices. During first-time intake, ask only when ownership is unknown and offer exactly two neutral options with no preselection: "宜搭原生导航" (使用宜搭自带的导航菜单。) and "自定义导航" (在自定义页面里定制菜单的样式和操作方式,替代宜搭自带的导航菜单。). Native means platform navigation. The agent chooses layout from module count, hierarchy, switching frequency, content width and target device; do not ask layout or presentation-style questions. Prefer top for few shallow modules and wide content, side for many frequently accessed modules, L-shaped/mixed for business domains with child modules, and custom dock for lightweight mobile entries. Preserve user-specified layouts. Store resolved type/source/reason/variant in the brief, distinguishing user ownership from agent layout reasoning. Platform navigation uses update-app --layout top|side|l_shape --show-app-nav, which writes layoutDirection=top|side|l_shape and hideAppNav=n. Preserve stored navType unchanged; do not derive or invent it and do not add a --nav-type option. Without --layout, normalize stored legacy layoutDirection and navType using the yc-utils application rules (hoz plus top_side means l_shape; missing layout uses top_fold/top_side for top/l_shape). Shell page-level top_fold/none overrides do not belong in app settings. Custom side/top/mixed/dock is a page layout and requires app and per-page navigation hiding with readback. Verify persisted layoutDirection and hideAppNav; updatedFields and themeVerification do not prove navigation persistence. Navigation tone is separate from layout.',
1573
+ design_mode_policy: 'Analyze requirements first. First-time builds include new apps and existing apps without business pages. Reuse detailed supplied plans; if the mode is unspecified, ask whether to prepare a PRD for confirmation (Plan, more detailed and slower) or build from the supplied requirements (Fast). Without detailed requirements, offer Fast and Plan neutrally. Confirm unresolved navigation ownership, visual style and page scope before planning or resource creation; the agent determines navigation layout from the business context without a layout question. Existing business apps only clarify the current change. A named resource-only request with explicitScope.allowInferredResources=false skips unrelated navigation and visual questions. Standard Plan uses design-plan init parallelTasks, then executes the returned materialize.command exactly once with business-file and visual-file; preview and --from-preview are only for explicitly incremental large plans. Confirm the displayed revision before building, and do not materialize or patch again after confirmation.',
1574
+ product_design_policy: 'yida-requirement-analysis owns shared facts and first-time intake. yida-prd owns business planning; yida-design owns visual design. Reuse the same confirmed brief and supplied details. Prepare business and base visuals concurrently, then bind visuals to settled page tasks. yida-app merges and checks the artifacts before creating resources. Plan uses the compact authoring contract and selected theme context; the CLI reads full templates and renders all artifacts.',
1575
+ ui_guidance_policy: 'Page implementation consumes yida-prd prd.md for positioning, information architecture, page prototype, native form entry policy, material strategy, business-specific checks, resource creation order, page implementation delivery order, navigation order, and acceptance criteria; it consumes yida-design design.md for app custom theme CSS delivery, themeColor/navTheme, visual states, visualScaffold, surface material, rounded rules, density rules, components, state styling, and page-level imageNeed. When a page is imageNeed=required, or beneficial with declared image slots, yida-image-assets prepares a traceable asset manifest before that page is implemented; imageNeed=none skips the branch. prd.md and design.md remain the only design sources of truth. Page implementation may extract page-spec.json as a derived implementation handoff from prd.md + design.md; conflicts are resolved by sending business conflicts to yida-prd and visual conflicts to yida-design before regenerating the spec. Core normal forms default to 1-3 business sample records before page implementation, followed by query readback. An explicit opt-out, configuration dictionary, sensitive data, or lack of safely constructible values requires a recorded skip reason. Screenshots, public sharing, data-source deep binding, and fine navigation grouping are optional after explicit user request or PRD acceptance criteria.',
1576
+ default_nav_order_policy: 'For custom navigation, implement PRD navigation order in the custom shell and verify app/page navigation hiding; skip platform nav-group ordering. For platform navigation: after the primary page is successfully published, perform exactly one navigation order operation. If the PRD names a navigation order, publish without --auto-nav-order and then call openyida nav-group order <appType> <items...>. If the PRD only gives broad groups or is missing navigation order, use openyida publish ... --auto-nav-order and do not call nav-group order or auto-order afterward. Explicit and automatic ordering are mutually exclusive; never generate per-item move loops. The fallback priority is portal/home/workbench entry > business handling > data management > business analytics > system configuration.',
1577
+ final_link_policy: 'Return exactly one user-visible application entry group, never one artifact or link card per form, process, report, schema, manifest, PRD, design file, or intermediate artifact. The group always contains the app workbench URL. Add the clean custom page URL only when PRD entryMode=standalone and get-form-config readback confirms isRenderNav=false. Add the admin URL only when agent-capabilities application_entry_policy.entries.admin=include. Summarize other business resources in prose by default, but every resource count, seed-record count, and completed/verified claim must come from that resource\'s own successful result or readback. When the user or caller explicitly requests a resource manifest, resource UUIDs/IDs, publish status, or test-data summary, include one concise verified delivery manifest in the final prose and do not substitute link cards for it.',
1861
1578
  application_entry_policy: {
1862
1579
  delivery_unit: 'single_application_entry_group',
1863
- workbench: {
1864
- include: 'when_workspace_in_scope',
1865
- url: '{base_url}/{appType}/workbench',
1866
- task_url: '{base_url}/{appType}/workbench/{formUuid}',
1867
- view_parameter: 'viewUuid',
1868
- selection: 'one verified planned management default; use real resource/view IDs; no homepage required',
1869
- },
1580
+ workbench: { include: 'always', url: '{base_url}/{appType}/workbench' },
1870
1581
  custom: {
1871
1582
  include: 'when_entry_mode_standalone_and_is_render_nav_false_readback',
1872
1583
  url: '{base_url}/{appType}/custom/{formUuid}',
1873
1584
  },
1874
1585
  admin: {
1875
- include: 'default_for_complete_application',
1586
+ include: 'follow_agent_capabilities_application_entry_policy',
1876
1587
  url: '{base_url}/{appType}/admin',
1877
1588
  },
1878
1589
  internal_artifacts: 'never_user_visible',
@@ -1906,7 +1617,7 @@ function summarizeLocalizedCommands(commands) {
1906
1617
  'yida-data-source-connectors',
1907
1618
  'yida-dashboard',
1908
1619
  ],
1909
- completion_contract: 'Clarify core functions and actual usage first, then resolve the required resource context and settle entry navigation before PRD planning. Fast generates prd.md and design.md in parallel; Plan uses design-plan init/preview/materialize/patch and confirms the current revision. Validate both artifacts, create or reuse app and core forms/processes, seed and query-check core normal-form samples or record an allowed skip reason, then implement the primary page in PRD resource order, publish it, apply PRD navigation order or lightweight fallback navigation order for platform navigation, or verify app and per-page hiding for application-wide custom navigation. For a standalone frontend in a platform-navigation app, verify that page independently and retain workspace navigation. Return one named application entry group. Include workbench when a management or unified workspace is in scope; backend-only delivers its business backend and developer admin URL without adding a frontend; frontend-only delivery includes its verified frontend entry and developer admin URL, without inventing a business backend. Always include developer adminUrl for complete application delivery unless explicitly excluded by the user, regardless of auth runtime; this is separate from the optional business backend. Use create-app or app-list URL fields and state any unavailable entry instead of silently omitting it. Put the verified business summary, results and remaining work in the delivery artifact description; use the final response when no delivery tool is available.',
1620
+ completion_contract: 'Resolve context, organize requirements and settle navigation before PRD planning. Fast generates prd.md and design.md in parallel; Plan uses design-plan init/preview/materialize/patch and confirms the current revision. Validate both artifacts, create or reuse app and core forms/processes, seed and query-check core normal-form samples or record an allowed skip reason, then implement the primary page in PRD resource order, publish it, apply PRD navigation order or lightweight fallback navigation order for platform navigation, or verify app and per-page hiding for custom navigation, and return one named application entry group. The group contains workbench, conditionally a verified standalone custom entry, and admin only for non-cloud agents. Business resources are summarized instead of emitted as individual delivery artifacts.',
1910
1621
  },
1911
1622
  },
1912
1623
  };