openyida 2026.9.21 → 2026.9.22-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +145 -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,302 +0,0 @@
1
- #!/usr/bin/env python3
2
- """Validate the shared V2 theme catalog and design.md templates (Python 3.9+)."""
3
-
4
- from __future__ import annotations
5
-
6
- import argparse
7
- import json
8
- import re
9
- import sys
10
- from pathlib import Path
11
-
12
-
13
- REQUIRED_HEADINGS = (
14
- "1. 风格摘要",
15
- "2. 页面视觉系统",
16
- "3. 基础组件表达",
17
- "4. 特色表达配方",
18
- "5. 项目应用与调整规则",
19
- )
20
- REQUIRED_PLACEHOLDERS = {"PROJECT_NAME", "PRIMARY_COLOR", "COLOR_SOURCE", "PAGE_APPLICATIONS"}
21
- CANDIDATE_RULE_FILES = (
22
- "../yida-app/workflow/plan/step-2-confirm.md",
23
- "sub_skill/yida-design-plan/references/visual-theme-selection.md",
24
- "sub_skill/yida-design-plan/references/build-plan-schema.md",
25
- )
26
- TOKEN_NAME = re.compile(r"--[a-z][a-zA-Z0-9-]*\Z")
27
- TOKEN_REFERENCE = re.compile(r"--[a-z][a-zA-Z0-9-]*")
28
- TOKEN_SUFFIX_SHORTHAND = re.compile(r"--[a-z0-9-]+/(?!\s*--)")
29
- TOKEN_WILDCARD = re.compile(r"--[a-z0-9-]*\*")
30
-
31
-
32
- def parse_scalar(raw: str) -> str | dict:
33
- """Read the template's YAML mapping subset without a PyYAML dependency.
34
-
35
- Quoted strings, plain CSS scalars and empty maps are supported; sequences,
36
- aliases, tags and block strings are rejected instead of silently ignored.
37
- """
38
- if raw.startswith('"'):
39
- value, end = json.JSONDecoder().raw_decode(raw)
40
- if raw[end:].strip() and not raw[end:].lstrip().startswith("#"):
41
- raise ValueError("字符串后含无效内容")
42
- return value
43
- if raw.startswith("'"):
44
- match = re.fullmatch(r"'((?:[^']|'')*)'\s*(?:#.*)?", raw)
45
- if not match:
46
- raise ValueError("单引号字符串未闭合")
47
- return match.group(1).replace("''", "'")
48
- value = re.split(r"\s+#", raw, maxsplit=1)[0].strip()
49
- if value == "{}":
50
- return {}
51
- if not value or value[0] in "[{&*!|>" or value in ("null", "~", "true", "false"):
52
- raise ValueError("仅支持映射和非空 CSS 标量")
53
- return value
54
-
55
-
56
- def parse_frontmatter(text: str) -> dict:
57
- match = re.match(r"\A---\n([\s\S]*?)\n---(?:\n|$)", text)
58
- if not match:
59
- raise ValueError("缺少合法 YAML frontmatter")
60
- root: dict = {}
61
- stack = [(-2, root)]
62
- for number, line in enumerate(match.group(1).splitlines(), start=2):
63
- if not line.strip() or line.lstrip().startswith("#"):
64
- continue
65
- item = re.fullmatch(r'([ ]*)("[^"\n]+"|\'[^\'\n]+\'|[a-zA-Z_][\w-]*):(?:\s+(.*))?', line)
66
- if not item:
67
- raise ValueError(f"第 {number} 行不是受支持的 YAML 映射")
68
- indent = len(item.group(1))
69
- key = item.group(2).strip('"\'')
70
- raw = (item.group(3) or "").strip()
71
- while stack[-1][0] >= indent:
72
- stack.pop()
73
- parent_indent, parent = stack[-1]
74
- if indent != parent_indent + 2:
75
- raise ValueError(f"第 {number} 行缩进应逐级增加两个空格")
76
- if key in parent:
77
- raise ValueError(f"第 {number} 行重复定义 {key}")
78
- value = {} if not raw or raw.startswith("#") else parse_scalar(raw)
79
- parent[key] = value
80
- if isinstance(value, dict):
81
- stack.append((indent, value))
82
- return root
83
-
84
-
85
- def collect_tokens(node: object, label: str, errors: list[str]) -> dict[str, str]:
86
- tokens: dict[str, str] = {}
87
- if not isinstance(node, dict):
88
- errors.append(f"{label} 必须是映射")
89
- return tokens
90
- for key, value in node.items():
91
- if key.startswith("--"):
92
- if not TOKEN_NAME.fullmatch(key) or not isinstance(value, str) or not value:
93
- errors.append(f"{label} 含无效 Token 声明:{key}")
94
- continue
95
- nested = {key: value}
96
- elif isinstance(value, dict):
97
- nested = collect_tokens(value, f"{label}.{key}", errors)
98
- else:
99
- errors.append(f"{label} 标量必须使用完整 CSS 变量名:{key}")
100
- continue
101
- for name, token_value in nested.items():
102
- if name in tokens:
103
- errors.append(f"{label} 重复定义变量:{name}")
104
- tokens[name] = token_value
105
- return tokens
106
-
107
-
108
- def validate_tokens(frontmatter: dict, text: str, label: str, contract: dict, errors: list[str]) -> None:
109
- groups = contract["groups"]
110
- basic_tokens = {name for names in groups.values() for name in names}
111
- tokens = frontmatter.get("tokens")
112
- if not isinstance(tokens, dict) or set(tokens) != {"application-global", "custom-page"}:
113
- errors.append(f"{label} tokens 必须包含 application-global 和 custom-page 两层")
114
- return
115
- global_tokens = collect_tokens(tokens["application-global"], f"{label} application-global", errors)
116
- custom_tokens = collect_tokens(tokens["custom-page"], f"{label} custom-page", errors)
117
- missing = sorted(basic_tokens - set(global_tokens))
118
- if missing:
119
- errors.append(f"{label} 全局变量集合缺少基础变量:{missing}")
120
- overlap = set(global_tokens) & set(custom_tokens)
121
- if overlap:
122
- errors.append(f"{label} 页面层重复定义全局变量:{', '.join(sorted(overlap))}")
123
- for name, value in contract["fixedValues"].items():
124
- if name in global_tokens and global_tokens[name] != str(value):
125
- errors.append(f"{label} {name} 应使用固定值 {value}")
126
- if global_tokens.get("--color-brand1-6") != "{{PRIMARY_COLOR}}":
127
- errors.append(f"{label} --color-brand1-6 必须使用项目主色占位符")
128
- if "--oyd-page-bg" in custom_tokens and custom_tokens["--oyd-page-bg"] != "var(--pod-page-bg-color)":
129
- errors.append(f"{label} --oyd-page-bg 必须单向继承 --pod-page-bg-color")
130
-
131
- declared = {**global_tokens, **custom_tokens}
132
- unsupported = set(declared) & {"--color-brand1-4", "--color-brand1-7", "--color-brand1-8"}
133
- if unsupported:
134
- errors.append(f"{label} 不支持的品牌色阶:{', '.join(sorted(unsupported))}")
135
- unknown = set(TOKEN_REFERENCE.findall(text)) - set(declared)
136
- if unknown:
137
- errors.append(f"{label} 引用了未声明变量:{', '.join(sorted(unknown))}")
138
- dependencies = {name: set(TOKEN_REFERENCE.findall(value)) for name, value in declared.items()}
139
- visited: set[str] = set()
140
- active: set[str] = set()
141
-
142
- def visit(name: str) -> None:
143
- if name in active:
144
- errors.append(f"{label} 变量循环引用:{name}")
145
- return
146
- if name in visited or name not in dependencies:
147
- return
148
- active.add(name)
149
- for dependency in dependencies[name]:
150
- visit(dependency)
151
- active.remove(name)
152
- visited.add(name)
153
-
154
- for name in declared:
155
- visit(name)
156
- for name in global_tokens:
157
- if name.startswith("--color-brand1-") and name != "--color-brand1-6" and "--color-brand1-6" not in dependencies[name]:
158
- errors.append(f"{label} {name} 必须与 --color-brand1-6 同源")
159
-
160
-
161
- def validate(skill_root: Path) -> list[str]:
162
- errors: list[str] = []
163
- template_dir = skill_root / "templates" / "design-themes"
164
- try:
165
- index = json.loads((template_dir / "index.json").read_text(encoding="utf-8"))
166
- if not isinstance(index, dict) or index.get("schemaVersion") != "2.0":
167
- return ["主题索引 schemaVersion 必须为 2.0"]
168
- themes = index.get("themes")
169
- if not isinstance(themes, list) or not themes:
170
- return ["主题索引缺少非空 themes 数组"]
171
- contract = json.loads((template_dir / "basic-tokens.json").read_text(encoding="utf-8"))
172
- names = [name for group in contract["groups"].values() for name in group]
173
- if len(set(names)) != len(names) or not all(isinstance(name, str) and TOKEN_NAME.fullmatch(name) for name in names):
174
- return ["基础变量契约含重复或非法变量名"]
175
- if not isinstance(contract["fixedValues"], dict) or set(contract["fixedValues"]) - set(names):
176
- return ["基础变量契约 fixedValues 必须引用已登记变量"]
177
- except (OSError, ValueError, KeyError, TypeError, AttributeError) as exc:
178
- return [f"无法读取主题索引或基础变量契约:{exc}"]
179
-
180
- seen = {field: set() for field in ("themeId", "label", "templatePath")}
181
- for position, theme in enumerate(themes):
182
- label = f"themes[{position}]"
183
- if not isinstance(theme, dict):
184
- errors.append(f"{label} 必须是对象")
185
- continue
186
- for field in (*seen, "styleSummary"):
187
- value = theme.get(field)
188
- if not isinstance(value, str) or not value.strip():
189
- errors.append(f"{label} 缺少非空字符串 {field}")
190
- elif field in seen:
191
- if value in seen[field]:
192
- errors.append(f"重复 {field}: {value}")
193
- seen[field].add(value)
194
- theme_id = theme.get("themeId")
195
- template_path = theme.get("templatePath")
196
- mode = theme.get("mode")
197
- if mode == "creative":
198
- if "contentTone" in theme or "navTheme" in theme:
199
- errors.append(f"{label} 自由创意不能预设 contentTone 或 navTheme")
200
- else:
201
- if theme.get("contentTone") not in {"light", "dark"}:
202
- errors.append(f"{label} contentTone 必须是 light 或 dark")
203
- if theme.get("navTheme") not in {"light", "dark"}:
204
- errors.append(f"{label} navTheme 必须是 light 或 dark")
205
- if not isinstance(theme.get("navigationSummary"), str) or not theme["navigationSummary"].strip():
206
- errors.append(f"{label} navigationSummary 必须说明导航与应用整体风格的关系")
207
- if not isinstance(theme_id, str) or not re.fullmatch(r"[a-z][a-z0-9]*(?:-[a-z0-9]+)*", theme_id):
208
- errors.append(f"{label} themeId 格式非法")
209
- continue
210
- if template_path != f"templates/design-themes/{theme_id}/design.md":
211
- errors.append(f"{label} templatePath 必须指向公共主题目录中的同名模板")
212
- continue
213
- full_path = (skill_root / template_path).resolve()
214
- if full_path.parent != (template_dir / theme_id).resolve():
215
- errors.append(f"{label} templatePath 不得越出公共主题目录")
216
- continue
217
- if theme.get("mode") not in ("template", "creative"):
218
- errors.append(f"{label} mode 必须是 template 或 creative")
219
- for field, filename in (("cssTemplatePath", "app_theme.css"), ("formLayoutPath", "form-layout.json")):
220
- expected = f"templates/design-themes/{theme_id}/{filename}"
221
- if theme.get(field) != expected or not (skill_root / expected).is_file():
222
- errors.append(f"{label} 缺少配对资产 {field}: {expected}")
223
- if full_path.parent.is_dir() and {p.name for p in full_path.parent.iterdir()} != {"design.md", "app_theme.css", "form-layout.json"}:
224
- errors.append(f"{label} 主题目录必须只包含 design.md、app_theme.css、form-layout.json 三个文件")
225
- try:
226
- css = (full_path.parent / "app_theme.css").read_text(encoding="utf-8")
227
- for name, pattern in (("--color-brand1-6", r"\{\{PRIMARY_COLOR\}\}"), ("--color-brand1-1", r"<生成实际色值:--color-brand1-6 [^;\n]+>")):
228
- if not re.search(r"^\s*" + re.escape(name) + r":\s*" + pattern + r";", css, re.M):
229
- errors.append(f"{label} app_theme.css {name} 必须保留项目颜色占位")
230
- layout = json.loads((full_path.parent / "form-layout.json").read_text(encoding="utf-8"))
231
- if not isinstance(layout, list) or not layout:
232
- errors.append(f"{label} form-layout.json 必须是非空组件数组")
233
- except (OSError, ValueError) as exc:
234
- errors.append(f"{label} 主题配对资产不可读:{exc}")
235
- try:
236
- text = full_path.read_text(encoding="utf-8")
237
- frontmatter = parse_frontmatter(text)
238
- except (OSError, ValueError) as exc:
239
- errors.append(f"{template_path}: {exc}")
240
- continue
241
- if frontmatter.get("themeId") != theme_id:
242
- errors.append(f"{template_path} 的 themeId 与索引不一致")
243
- if theme.get("mode") != "creative":
244
- nav_theme = frontmatter.get("themeProfile", {}).get("navTheme", frontmatter.get("navTheme"))
245
- if nav_theme not in {"light", "dark"}:
246
- errors.append(f"{template_path} 的 navTheme 必须是 light 或 dark")
247
- style_summary = theme.get("styleSummary", "")
248
- nav_match = re.search(r"(深色|浅色)导航", style_summary)
249
- content_match = re.search(r"(深色|浅色)内容界面", style_summary)
250
- if not nav_match or not content_match:
251
- errors.append(f"{label} styleSummary 必须用自然语言说明深色或浅色导航,以及深色或浅色内容界面")
252
- elif nav_theme in {"light", "dark"} and nav_match.group(1) != {"light": "浅色", "dark": "深色"}[nav_theme]:
253
- errors.append(f"{label} styleSummary 的导航明暗与主题模板 navTheme 不一致")
254
- if theme.get("navTheme") != nav_theme:
255
- errors.append(f"{label} navTheme 与主题模板不一致")
256
- validate_tokens(frontmatter, text, template_path, contract, errors)
257
- headings = re.findall(r"^## (.+)$", text, re.M)
258
- if headings != list(REQUIRED_HEADINGS):
259
- errors.append(f"{template_path} 必须依次包含 V2 五个章节")
260
- placeholders = set(re.findall(r"\{\{([A-Z0-9_]+)\}\}", text))
261
- if placeholders != REQUIRED_PLACEHOLDERS:
262
- errors.append(f"{template_path} 项目占位符不符合 V2 契约:缺少 {sorted(REQUIRED_PLACEHOLDERS - placeholders)},未知 {sorted(placeholders - REQUIRED_PLACEHOLDERS)}")
263
- if TOKEN_SUFFIX_SHORTHAND.search(text) or TOKEN_WILDCARD.search(text):
264
- errors.append(f"{template_path} 含未展开的 Token 后缀缩写或通配写法")
265
-
266
- # Catalog paths use forward slashes on every OS, including nested theme bundles.
267
- actual_files = {f"templates/design-themes/{p.relative_to(template_dir).as_posix()}" for p in template_dir.rglob("*.md") if p.name != "README.md"}
268
- for name in sorted(actual_files - seen["templatePath"]):
269
- errors.append(f"主题模板未登记到索引:{name}")
270
- for name in sorted(seen["templatePath"] - actual_files):
271
- errors.append(f"索引引用了不存在的主题模板:{name}")
272
- for relative_path in CANDIDATE_RULE_FILES:
273
- try:
274
- rule_text = (skill_root / relative_path).read_text(encoding="utf-8")
275
- except OSError as exc:
276
- errors.append(f"无法读取候选规则 {relative_path}: {exc}")
277
- continue
278
- for field in ("themeId", "label"):
279
- for value in seen[field] - {item.get(field) for item in themes if item.get("mode") == "creative"}:
280
- if value in rule_text:
281
- errors.append(f"{relative_path} 硬编码了主题 {field}:{value}")
282
- return errors
283
-
284
-
285
- def main() -> int:
286
- # Keep redirected Windows output readable even with inherited cp1252.
287
- sys.stdout.reconfigure(encoding="utf-8")
288
- sys.stderr.reconfigure(encoding="utf-8")
289
- parser = argparse.ArgumentParser(description=__doc__)
290
- parser.add_argument("--skill-root", type=Path, default=Path(__file__).resolve().parents[1], help="shared yida-design skill root")
291
- errors = validate(parser.parse_args().skill_root.resolve())
292
- if errors:
293
- print("主题模板校验失败:")
294
- for error in errors:
295
- print(f"- {error}")
296
- return 1
297
- print("主题索引与完整 design.md 模板校验通过。")
298
- return 0
299
-
300
-
301
- if __name__ == "__main__":
302
- raise SystemExit(main())