openyida 2026.9.16 → 2026.9.18-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 (199) hide show
  1. package/README.md +9 -8
  2. package/bin/yida.js +11 -4
  3. package/lib/app/app-list.js +7 -3
  4. package/lib/app/application-entry-urls.js +31 -0
  5. package/lib/app/canvas-compile.js +18 -12
  6. package/lib/app/canvas-icon-exports.json +6160 -0
  7. package/lib/app/canvas-icon-guard.js +87 -0
  8. package/lib/app/canvas-navigation-guard.js +84 -0
  9. package/lib/app/canvas-path-guard.js +78 -0
  10. package/lib/app/canvas-theme-guard.js +68 -1
  11. package/lib/app/check-prd-completeness.js +7 -0
  12. package/lib/app/create-app.js +4 -1
  13. package/lib/app/create-form.js +8 -16
  14. package/lib/app/create-page.js +84 -17
  15. package/lib/app/custom-theme.js +11 -0
  16. package/lib/app/form-field-validator.js +26 -5
  17. package/lib/app/form-open-guard.js +97 -10
  18. package/lib/app/get-form-config.js +1 -0
  19. package/lib/app/inline-css-guard.js +1 -31
  20. package/lib/app/theme-from-design.js +110 -39
  21. package/lib/asset/ai-image.js +23 -7
  22. package/lib/asset/asset-cmd.js +11 -6
  23. package/lib/asset/asset-execution.js +79 -0
  24. package/lib/asset/asset-plan.js +59 -8
  25. package/lib/asset/asset-resolve.js +48 -7
  26. package/lib/asset/asset-status.js +5 -4
  27. package/lib/asset/host-capabilities.js +11 -2
  28. package/lib/asset/url-verify.js +19 -4
  29. package/lib/connector/connector-test.js +19 -5
  30. package/lib/connector/contract.js +3 -1
  31. package/lib/core/agent-capabilities.js +4 -1
  32. package/lib/core/command-manifest.js +164 -28
  33. package/lib/core/css-structure.js +37 -0
  34. package/lib/core/locales/en.js +42 -11
  35. package/lib/core/locales/zh.js +42 -11
  36. package/lib/core/sample.js +31 -7
  37. package/lib/design/check-design.js +51 -0
  38. package/lib/design/document.js +457 -0
  39. package/lib/design/icon-contrast.js +85 -0
  40. package/lib/design/page-content.js +11 -0
  41. package/lib/design-plan/artifact-updates.js +117 -0
  42. package/lib/design-plan/entry-navigation.js +10 -4
  43. package/lib/design-plan/init.js +38 -21
  44. package/lib/design-plan/materialize.js +304 -277
  45. package/lib/design-plan/navigation-policy.js +38 -0
  46. package/lib/design-plan/normalize.js +34 -16
  47. package/lib/design-plan/parallel.js +9 -3
  48. package/lib/design-plan/patch.js +18 -5
  49. package/lib/design-plan/preview.js +6 -8
  50. package/lib/design-plan/themes.js +86 -0
  51. package/lib/design-plan/validate.js +26 -6
  52. package/lib/design-plan/visual-policy.js +17 -0
  53. package/lib/process/create-process.js +84 -50
  54. package/lib/samples/openyida-scaffold/canvas-admin-entry.jsx +62 -0
  55. package/lib/samples/openyida-scaffold/canvas-form-drawer.canvas.jsx +3 -2
  56. package/lib/samples/openyida-scaffold/canvas-nav/content.jsx +93 -13
  57. package/lib/samples/openyida-scaffold/canvas-nav/data.jsx +23 -8
  58. package/lib/samples/openyida-scaffold/canvas-nav/top.jsx +10 -5
  59. package/lib/samples/openyida-scaffold/canvas-navigation.jsx +56 -0
  60. package/lib/samples/openyida-scaffold/canvas-view-state.jsx +74 -0
  61. package/package.json +2 -1
  62. package/yida-skills/SKILL.md +16 -13
  63. package/yida-skills/skills/yida-app/SKILL.md +20 -14
  64. package/yida-skills/skills/yida-app/references/entry-navigation.md +52 -11
  65. package/yida-skills/skills/yida-app/workflow/parallel-work.md +11 -11
  66. package/yida-skills/skills/yida-app/workflow/plan/step-4-deliver.md +18 -14
  67. package/yida-skills/skills/yida-app/workflow/plan/workflow.md +7 -5
  68. package/yida-skills/skills/yida-app/workflow/step-2-design.md +9 -5
  69. package/yida-skills/skills/yida-app/workflow/step-4-forms-processes.md +2 -2
  70. package/yida-skills/skills/yida-app/workflow/step-6-main-page.md +1 -1
  71. package/yida-skills/skills/yida-app/workflow/step-7-page-code.md +13 -9
  72. package/yida-skills/skills/yida-app/workflow/step-8-publish-navigation.md +16 -11
  73. package/yida-skills/skills/yida-app/workflow/step-9-output-finish.md +43 -14
  74. package/yida-skills/skills/yida-canvas-custom-page/SKILL.md +16 -7
  75. package/yida-skills/skills/yida-canvas-custom-page/references/canvas-style-implementation-guide.md +56 -40
  76. package/yida-skills/skills/yida-canvas-custom-page/references/canvas-theme-provider.md +28 -1
  77. package/yida-skills/skills/yida-canvas-custom-page/references/component-library-guide.md +13 -1
  78. package/yida-skills/skills/yida-canvas-custom-page/references/navigation-and-entry-guide.md +100 -73
  79. package/yida-skills/skills/yida-canvas-custom-page/references/page-generation-guide.md +25 -23
  80. package/yida-skills/skills/yida-canvas-custom-page/references/view-state-recovery.md +52 -0
  81. package/yida-skills/skills/yida-canvas-custom-page/scripts/build-canvas-theme.js +10 -1
  82. package/yida-skills/skills/yida-canvas-custom-page/scripts/canvas-theme-provider.template.jsx +69 -6
  83. package/yida-skills/skills/yida-canvas-data-binding/SKILL.md +2 -0
  84. package/yida-skills/skills/yida-canvas-data-binding/references/business-action-permissions.md +31 -0
  85. package/yida-skills/skills/yida-create-app/SKILL.md +2 -0
  86. package/yida-skills/skills/yida-create-form-page/SKILL.md +4 -4
  87. package/yida-skills/skills/yida-create-form-page/references/field-definition-guide.md +3 -3
  88. package/yida-skills/skills/yida-create-form-page/references/form-field-properties.md +50 -9
  89. package/yida-skills/skills/yida-create-page/SKILL.md +14 -6
  90. package/yida-skills/skills/yida-create-process/SKILL.md +13 -2
  91. package/yida-skills/skills/yida-custom-page/SKILL.md +2 -0
  92. package/yida-skills/skills/yida-custom-page/references/design-system.md +1 -1
  93. package/yida-skills/skills/yida-dashboard/SKILL.md +5 -4
  94. package/yida-skills/skills/yida-data-management/SKILL.md +4 -2
  95. package/yida-skills/skills/yida-data-management/references/data-format-guide.md +4 -4
  96. package/yida-skills/skills/yida-design/SKILL.md +18 -9
  97. package/yida-skills/skills/yida-design/references/application-theme-consistency.md +109 -0
  98. package/yida-skills/skills/yida-design/references/ask-human-interaction-contract.md +19 -15
  99. package/yida-skills/skills/yida-design/references/asset-workflow.md +4 -2
  100. package/yida-skills/skills/yida-design/references/design-mode.md +1 -1
  101. package/yida-skills/skills/yida-design/references/navigation-decision.md +13 -4
  102. package/yida-skills/skills/yida-design/references/page-continuity.md +42 -0
  103. package/yida-skills/skills/yida-design/references/page-quality-gates.md +26 -38
  104. package/yida-skills/skills/yida-design/references/theme/app-custom-theme-template.css +243 -434
  105. package/yida-skills/skills/yida-design/references/theme-selection.md +66 -0
  106. package/yida-skills/skills/yida-design/references/visual-decision-engine.md +19 -143
  107. package/yida-skills/skills/yida-design/references/visual-scaffold-recipes.md +15 -27
  108. package/yida-skills/skills/yida-design/scripts/validate_design_themes.py +259 -0
  109. package/yida-skills/skills/yida-design/sub_skill/page-design/SKILL.md +4 -0
  110. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/SKILL.md +11 -7
  111. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/assets/README.md +14 -10
  112. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/assets/build-plan-template.html +9 -4
  113. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/references/build-plan-compact-schema.md +29 -16
  114. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/references/build-plan-schema.md +10 -7
  115. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/references/visual-design.md +32 -117
  116. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/references/visual-theme-selection.md +12 -29
  117. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/scripts/render_build_plan.py +17 -49
  118. package/yida-skills/skills/yida-design/templates/design-themes/README.md +68 -0
  119. package/yida-skills/skills/yida-design/{sub_skill/yida-design-plan/templates → templates}/design-themes/basic-tokens.json +21 -5
  120. package/yida-skills/skills/yida-design/templates/design-themes/dark-inset-hairline.md +333 -0
  121. package/yida-skills/skills/yida-design/templates/design-themes/dark-rail-fine-lines.md +324 -0
  122. package/yida-skills/skills/yida-design/templates/design-themes/dark-rail-signal-panels.md +324 -0
  123. package/yida-skills/skills/yida-design/templates/design-themes/graphite-bevel-grid.md +321 -0
  124. package/yida-skills/skills/yida-design/templates/design-themes/hairline-shared-bands.md +308 -0
  125. package/yida-skills/skills/yida-design/templates/design-themes/hairline-soft-blocks.md +357 -0
  126. package/yida-skills/skills/yida-design/templates/design-themes/index.json +96 -0
  127. package/yida-skills/skills/yida-design/templates/design-themes/ink-glow-soft-panels.md +325 -0
  128. package/yida-skills/skills/yida-design/templates/design-themes/inset-frame-pixel-rhythm.md +350 -0
  129. package/yida-skills/skills/yida-design/templates/design-themes/outlined-texture-duotone.md +335 -0
  130. package/yida-skills/skills/yida-design/templates/design-themes/soft-inset-surfaces.md +320 -0
  131. package/yida-skills/skills/yida-design/templates/design-themes/soft-outline-rhythm.md +417 -0
  132. package/yida-skills/skills/yida-design/templates/design-themes/soft-rail-bold-band.md +340 -0
  133. package/yida-skills/skills/yida-design/templates/design-themes/soft-spectral-panels.md +337 -0
  134. package/yida-skills/skills/yida-design/templates/design-themes/warm-canvas-contrast-panels.md +354 -0
  135. package/yida-skills/skills/yida-design/templates/design-themes/warm-rail-muted-panels.md +331 -0
  136. package/yida-skills/skills/yida-design/workflow/output-design.md +115 -376
  137. package/yida-skills/skills/yida-design/workflow/step-2-theme-system.md +22 -26
  138. package/yida-skills/skills/yida-design/workflow/step-4-wireframe-interaction.md +3 -1
  139. package/yida-skills/skills/yida-design/workflow/step-5-visual-states.md +22 -106
  140. package/yida-skills/skills/yida-design/workflow/step-6-handoff.md +15 -22
  141. package/yida-skills/skills/yida-image-assets/SKILL.md +36 -10
  142. package/yida-skills/skills/yida-image-assets/references/manifest-contract.md +44 -10
  143. package/yida-skills/skills/yida-image-assets/references/source-policy.md +5 -5
  144. package/yida-skills/skills/yida-login/SKILL.md +2 -0
  145. package/yida-skills/skills/yida-nav-shell/SKILL.md +15 -8
  146. package/yida-skills/skills/yida-nav-shell/references/nav-shell-patterns.md +70 -133
  147. package/yida-skills/skills/yida-page-config/SKILL.md +1 -1
  148. package/yida-skills/skills/yida-prd/SKILL.md +3 -3
  149. package/yida-skills/skills/yida-prd/references/app/blueprint.md +3 -3
  150. package/yida-skills/skills/yida-prd/references/app/role-journey.md +5 -3
  151. package/yida-skills/skills/yida-prd/workflow/output-prd.md +2 -1
  152. package/yida-skills/skills/yida-prd/workflow/plan-business.md +2 -2
  153. package/yida-skills/skills/yida-prd/workflow/step-2-information-architecture.md +4 -3
  154. package/yida-skills/skills/yida-publish-page/SKILL.md +8 -1
  155. package/yida-skills/skills/yida-requirement-analysis/references/experience-groups.md +20 -0
  156. package/yida-skills/skills/yida-requirement-analysis/references/handoff.md +5 -1
  157. package/yida-skills/skills/yida-requirement-analysis/workflow/prepare-brief.md +2 -2
  158. package/yida-skills/skills-index.json +31 -11
  159. package/yida-skills/skills/yida-design/references/style-design-selection.md +0 -137
  160. package/yida-skills/skills/yida-design/references/style-designs/_design-md-template.md +0 -185
  161. package/yida-skills/skills/yida-design/references/style-designs/aqua-service-progress-dashboard.md +0 -242
  162. package/yida-skills/skills/yida-design/references/style-designs/blue-insight-operations-dashboard.md +0 -243
  163. package/yida-skills/skills/yida-design/references/style-designs/blue-productivity-insight-workbench.md +0 -242
  164. package/yida-skills/skills/yida-design/references/style-designs/command-filter-card-console.md +0 -304
  165. package/yida-skills/skills/yida-design/references/style-designs/contrast-command-analytics-workbench.md +0 -261
  166. package/yida-skills/skills/yida-design/references/style-designs/dark-stage-analytic-dashboard.md +0 -369
  167. package/yida-skills/skills/yida-design/references/style-designs/filterable-card-catalog.md +0 -354
  168. package/yida-skills/skills/yida-design/references/style-designs/green-timeline-progress-workbench.md +0 -250
  169. package/yida-skills/skills/yida-design/references/style-designs/registry.md +0 -117
  170. package/yida-skills/skills/yida-design/references/style-designs/soft-analytic-workbench.md +0 -348
  171. package/yida-skills/skills/yida-design/references/style-designs/soft-blue-grid-analytic-dashboard.md +0 -658
  172. package/yida-skills/skills/yida-design/references/style-designs/soft-bordered-analytic-workbench.md +0 -385
  173. package/yida-skills/skills/yida-design/references/style-designs/soft-curated-filter-gallery.md +0 -300
  174. package/yida-skills/skills/yida-design/references/style-designs/soft-modular-analytic-workbench.md +0 -404
  175. package/yida-skills/skills/yida-design/references/style-designs/soft-progress-analytics-workbench.md +0 -382
  176. package/yida-skills/skills/yida-design/references/style-designs/soft-timeline-analytics-workbench.md +0 -367
  177. package/yida-skills/skills/yida-design/references/style-designs/teal-rail-analytics-workbench.md +0 -341
  178. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/scripts/validate_design_themes.py +0 -219
  179. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/README.md +0 -110
  180. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/airy-media-grid.md +0 -338
  181. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/airy-modular-clarity.md +0 -330
  182. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/airy-structured-clarity.md +0 -320
  183. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/ambient-halo-layered.md +0 -341
  184. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/dark-focus-layered.md +0 -327
  185. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/dark-luminous-modular.md +0 -369
  186. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/deep-stage-duotone.md +0 -345
  187. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/hairline-runway-clarity.md +0 -378
  188. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/high-contrast-modular.md +0 -339
  189. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/index.json +0 -329
  190. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/interlocked-vivid-modules.md +0 -343
  191. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/matrix-grid-focus.md +0 -337
  192. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/media-rail-inspector.md +0 -381
  193. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/mist-layered-signal.md +0 -340
  194. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/modular-rail-signal.md +0 -341
  195. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/mono-grid-signal.md +0 -374
  196. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/ribbon-ledger-lift.md +0 -378
  197. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/segmented-meter-clarity.md +0 -380
  198. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/split-rail-precision.md +0 -339
  199. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/status-framed-media-grid.md +0 -358
package/README.md CHANGED
@@ -399,8 +399,8 @@ Run `openyida --help` or `openyida <command> --help` for detailed usage.
399
399
  | `openyida design-plan catalog [--json]` | List available planning themes and page patterns |
400
400
  | `openyida design-plan init <requirement-brief.json> [--theme-id <id>] [--output-dir <dir>] [--json]` | Initialize a plan draft from confirmed requirements |
401
401
  | `openyida design-plan preview <build-plan.json> --part-file <module.json> [--json]` | Update plan drafts by module |
402
- | `openyida design-plan materialize <build-plan.json> [--from-preview \| --business-file <json> --visual-file <json>] [--output-dir <dir>] [--check] [--json]` | Generate and validate design-plan artifacts from build-plan.json |
403
- | `openyida design-plan patch <build-plan.json> --set <path=value> [--set <path=value> ...] [--materialize] [--output-dir <dir>] [--json]` | Patch a design plan; asset progress preserves existing approval |
402
+ | `openyida design-plan materialize <build-plan.json> [--from-preview \| --business-file <json> --visual-file <json>] [--output-dir <dir>] [--check] [--json]` | Generate or update plan documents and theme with consistency checks |
403
+ | `openyida design-plan patch <build-plan.json> --set <path=value> [--set <path=value> ...] [--materialize] [--output-dir <dir>] [--json]` | Patch plan fields and optionally sync documents and theme |
404
404
  | `openyida 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]` | Update app info |
405
405
  | `openyida app-online <appType> [--to-ding-app-center] [--show-app-center]` | Enable a Yida app |
406
406
  | `openyida app-offline <appType> [--to-ding-app-center] [--show-app-center]` | Disable a Yida app |
@@ -430,12 +430,13 @@ Run `openyida --help` or `openyida <command> --help` for detailed usage.
430
430
  | `openyida aggregate-table <list\|create-empty\|inspect\|preview\|save\|publish\|status> <appType> ...` | Manage aggregate tables (virtualView) |
431
431
  | `openyida get-schema <appType> <formUuid\|--all> [--summary-json\|--field-map-json\|--analysis-json]` | Get one form Schema or all form Schemas |
432
432
  | `openyida check-prd-completeness <prd.md> --app-type <appType> [--build-manifest <file>] [--json]` | Check PRD page/resource count risk |
433
+ | `openyida check-design <design.md> [--prd <prd.md>] [--base-dir <dir>] [--json]` | Validate design documents, theme tokens and PRD handoff |
433
434
  | `openyida er <appType> [--format mermaid\|json] [--output file] [--include-system] [--include-pages]` | Export app entity relationship diagram |
434
435
  | `openyida create-page <appType> "<name>" [--mode dashboard] [--hide-nav] [--locale zh_CN\|en_US\|ja_JP] [--open\|--no-open]` | Create a custom display page |
435
436
  | `openyida build-page <sourceFile> [--output file\|--write]` | Build Yida-compatible page source |
436
- | `openyida check-page <src> [--compat]` | Check custom page standards |
437
- | `openyida compile <src> [--canvas] [--json]` | Compile custom page locally |
438
- | `openyida publish <src> <appType> <formUuid> [--health-check] [--force] [--canvas] [--auto-nav-order] [--open\|--no-open]` | Compile and publish custom page |
437
+ | `openyida check-page <src> [--compat] [--json]` | Check custom page standards |
438
+ | `openyida compile <src> [--canvas] [--compat] [--skip-lint] [--json]` | Compile custom page locally |
439
+ | `openyida publish <src> <appType> <formUuid> [--health-check] [--force] [--canvas] [--compat] [--skip-lint] [--auto-nav-order] [--open\|--no-open] [--json]` | Compile and publish custom page |
439
440
  | `openyida update-form-config <appType> <formUuid> <true\|false\|keep> "<title>" [--locale zh_CN\|en_US\|ja_JP]` | Update form configuration |
440
441
  | `openyida get-form-config <appType> <formUuid> [--json]` | Query form configuration |
441
442
 
@@ -458,7 +459,7 @@ Run `openyida --help` or `openyida <command> --help` for detailed usage.
458
459
  | Command | Description |
459
460
  |---------|-------------|
460
461
  | `openyida configure-process <appType> <formUuid> <definition> [processCode] [--replace]` | Configure and publish process rules; Supports append/forward via JSON nodes[].actions.normalActions/appendActions |
461
- | `openyida create-process <appType> ... [--replace]` | Create process form (all-in-one); Supports append/forward via JSON nodes[].actions.normalActions/appendActions |
462
+ | `openyida create-process <appType> <formTitle> <fieldsJsonFile> <processDefinitionFile> [--replace] \| create-process <appType> --formUuid <formUuid> <processDefinitionFile> [--replace]` | Create process form (all-in-one); Supports append/forward via JSON nodes[].actions.normalActions/appendActions |
462
463
  | `openyida ai-form-setting <get\|fields\|models\|enable\|disable\|save> <appType> ...` | Manage process form AI approval prompts |
463
464
  | `openyida process preview <appType> ...` | Preview process instance (visual flowchart) |
464
465
 
@@ -491,7 +492,7 @@ Run `openyida --help` or `openyida <command> --help` for detailed usage.
491
492
  | `openyida connector update-action --connector-id <id> --action <operationId> --query-json JSON --confirm` | Safely update action query defaults |
492
493
  | `openyida connector list-actions <id>` | List actions |
493
494
  | `openyida connector delete-action <id> <operation-id>` | Delete an action |
494
- | `openyida 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>]` | Test an action |
495
+ | `openyida 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]` | Test an action |
495
496
  | `openyida connector list-connections <id>` | List auth connections |
496
497
  | `openyida connector create-connection <id> <name> [--interactive]` | Create an auth connection |
497
498
  | `openyida connector smart-create --curl "..."` | Generate a redacted action draft from cURL (no remote create) |
@@ -543,7 +544,7 @@ Run `openyida --help` or `openyida <command> --help` for detailed usage.
543
544
 
544
545
  #### Connector Safety and Real E2E
545
546
 
546
- `connector test` keeps the legacy flat `--params` option, but dispatches each key only to the location proven by the action schema. Unknown or ambiguous keys fail closed. Authenticated connectors require `--account-id`, and that account must belong to the selected connector. The test response follows the frontend canonical contract `{statusLine,responseHeaders,content}`; unknown envelopes and non-2xx status lines are failures.
547
+ `connector test` keeps the legacy flat `--params` option, but dispatches each key only to the location proven by the action schema. Unknown or ambiguous keys fail closed. Authenticated connectors require `--account-id`, and that account must belong to the selected connector. The test response follows the frontend canonical contract `{statusLine,responseHeaders,content}`; unknown envelopes and non-2xx status lines are failures. With `--ignore-defaults`, the test starts from empty parameter sets: saved default values from the action definition (including sensitive placeholder values such as documented `***` samples) are ignored for the run, and a warning is printed when a non-empty systemToken default exists. Declared systemToken actions still require `--system-token-app`, target-trust checks still apply, and explicitly provided systemToken values are still rejected.
547
548
 
548
549
  `connector update-action --connector-id <id> --action <operationId> --query-json '{"currentPage":"1"}' --confirm` is the narrow safe path for editing existing query defaults. It requires a complete connector/action preflight, changes only declared query defaults mirrored in `inputs` and `parameters`, submits the complete action collection once, and verifies an unchanged connector fingerprint, action count, non-target actions, and stable IDs. Missing/empty/unknown parameters, duplicate IDs, incomplete readback, and unknown write outcomes fail closed without automatic retry. `add-action` no longer overwrites an existing action ID; use `update-action` for query-only edits.
549
550
 
package/bin/yida.js CHANGED
@@ -526,6 +526,7 @@ function printManifestCommandHelp(commandName) {
526
526
  printCommandUsage(...entries.flatMap((entry) => [
527
527
  entry.usage,
528
528
  entry.description,
529
+ ...(entry.notes || []),
529
530
  ...(entry.examples || []),
530
531
  ]));
531
532
  return true;
@@ -697,7 +698,10 @@ async function main() {
697
698
  console.log(JSON.stringify(listAuthProfiles(buildTokenLoginOptions(authArgs)), null, 2));
698
699
  } else if (subCommand === 'profile') {
699
700
  const profileSubCommand = authArgs[0];
700
- if (profileSubCommand === 'switch') {
701
+ if (profileSubCommand === 'list') {
702
+ const { listAuthProfiles } = require('../lib/auth/profile');
703
+ console.log(JSON.stringify(listAuthProfiles(buildTokenLoginOptions(authArgs.slice(1))), null, 2));
704
+ } else if (profileSubCommand === 'switch') {
701
705
  const target = getFirstPositionalArg(authArgs, 1);
702
706
  const { switchAuthProfile } = require('../lib/auth/profile');
703
707
  console.log(JSON.stringify(switchAuthProfile(target, buildTokenLoginOptions(authArgs)), null, 2));
@@ -795,6 +799,12 @@ async function main() {
795
799
  break;
796
800
  }
797
801
 
802
+ case 'check-design': {
803
+ const { run } = require('../lib/design/check-design');
804
+ await run(args);
805
+ break;
806
+ }
807
+
798
808
  case 'er': {
799
809
  const { run } = require('../lib/app/er');
800
810
  await run(args);
@@ -1006,9 +1016,6 @@ async function main() {
1006
1016
  }
1007
1017
 
1008
1018
  case 'create-process': {
1009
- if (args.length < 2) {
1010
- throwCliUsage(t('cli.create_process_usage'), t('cli.create_process_example'));
1011
- }
1012
1019
  const { run: runCreateProcess } = require('../lib/process/create-process');
1013
1020
  await runCreateProcess(args);
1014
1021
  break;
@@ -6,13 +6,16 @@
6
6
  * 输出字段:
7
7
  * appName - 应用名称(zh_CN)
8
8
  * appType - 应用唯一标识
9
- * systemLink - 应用访问地址
9
+ * systemLink - 平台返回的应用访问地址
10
+ * appUrl / workbenchUrl - 应用工作台地址
11
+ * adminUrl - 开发者管理后台地址(不表示已验证访问权限)
10
12
  */
11
13
 
12
14
  'use strict';
13
15
 
14
16
  const { createAuthRef, createYidaClient } = require('../core/yida-client');
15
17
  const { t } = require('../core/i18n');
18
+ const { buildApplicationEntryUrls } = require('./application-entry-urls');
16
19
  const { throwCommandError, throwUsage } = require('../core/command-errors');
17
20
 
18
21
  const API_PATH = '/query/app/getAppList.json';
@@ -76,11 +79,12 @@ function parseArgs(args = []) {
76
79
  /**
77
80
  * 将应用原始数据提取为输出字段
78
81
  */
79
- function formatApp(app) {
82
+ function formatApp(app, baseUrl) {
80
83
  return {
81
84
  appName: (app.appName && app.appName.zh_CN) || '',
82
85
  appType: app.appType || '',
83
86
  systemLink: app.systemLink || '',
87
+ ...buildApplicationEntryUrls({ appType: app.appType, systemLink: app.systemLink, baseUrl }),
84
88
  };
85
89
  }
86
90
 
@@ -141,7 +145,7 @@ async function run(args) {
141
145
  const totalCount = Number.isFinite(Number(content.totalCount)) ? Number(content.totalCount) : apps.length;
142
146
  const totalPages = Math.max(1, Math.ceil(totalCount / options.pageSize));
143
147
  const scopeLabel = t(`app_list.scope_${options.type}`);
144
- const formattedApps = apps.map(formatApp);
148
+ const formattedApps = apps.map(app => formatApp(app, authRef.baseUrl));
145
149
 
146
150
  // stdout 输出 JSON,方便 AI 工具解析
147
151
  console.log(JSON.stringify(formattedApps, null, 2));
@@ -0,0 +1,31 @@
1
+ 'use strict';
2
+
3
+ // URLs derived by the CLI from a successful app result and its authenticated
4
+ // base URL. Constructing a route does not verify the recipient's access rights.
5
+ function buildApplicationEntryUrls({ appType, baseUrl, systemLink }) {
6
+ if (typeof appType !== 'string' || !/^APP_[A-Za-z0-9_-]+$/.test(appType)) { return {}; }
7
+ let origin;
8
+ const params = new URLSearchParams();
9
+ try {
10
+ const base = new URL(baseUrl);
11
+ if (!['https:', 'http:'].includes(base.protocol) || base.username || base.password) { return {}; }
12
+ origin = base.origin;
13
+ } catch { return {}; }
14
+ try {
15
+ if (systemLink) {
16
+ const app = new URL(systemLink, origin);
17
+ if (['https:', 'http:'].includes(app.protocol) && !app.username && !app.password && (app.pathname === `/${appType}` || app.pathname.startsWith(`/${appType}/`))) {
18
+ origin = app.origin;
19
+ for (const key of ['corpid', 'locale']) {
20
+ if (app.searchParams.has(key)) { params.set(key, app.searchParams.get(key)); }
21
+ }
22
+ }
23
+ }
24
+ } catch { /* Ignore malformed optional links; retain the authenticated base. */ }
25
+ const query = params.toString();
26
+ const suffix = query ? `?${query}` : '';
27
+ const workbenchUrl = `${origin}/${appType}/workbench${suffix}`;
28
+ return { appUrl: workbenchUrl, workbenchUrl, adminUrl: `${origin}/${appType}/admin${suffix}` };
29
+ }
30
+
31
+ module.exports = { buildApplicationEntryUrls };
@@ -51,6 +51,9 @@ const {
51
51
  const { t } = require('../core/i18n');
52
52
  const { assertInlineCssStructure } = require('./inline-css-guard');
53
53
  const { assertCanvasThemeStructure } = require('./canvas-theme-guard');
54
+ const { assertCanvasIconExports } = require('./canvas-icon-guard');
55
+ const { assertCanvasNavigationStructure } = require('./canvas-navigation-guard');
56
+ const { assertCanvasNavigationPaths } = require('./canvas-path-guard');
54
57
 
55
58
  /**
56
59
  * 依赖 → window 别名白名单,用于把 import 改写到运行时全局对象。
@@ -937,29 +940,29 @@ function compileCanvasLocal(source, options = {}) {
937
940
  },
938
941
  });
939
942
  }
940
- const directFormOpenIssues = findDirectFormOpenIssues(source);
941
- if (directFormOpenIssues.length > 0) {
942
- const firstIssue = directFormOpenIssues[0];
943
- throw new CliError(formatDirectFormOpenMessage(), {
944
- code: 'OPENYIDA_CANVAS_FORM_OPEN_CONTAINER_REQUIRED',
943
+ const formDetailLinkIssues = findFormDetailLinkIssues(source);
944
+ if (formDetailLinkIssues.length > 0) {
945
+ const firstIssue = formDetailLinkIssues[0];
946
+ throw new CliError(formatFormDetailLinkMessage(firstIssue), {
947
+ code: 'OPENYIDA_CANVAS_FORM_DETAIL_LINK_INVALID',
945
948
  details: {
946
949
  stage: 'canvas_compile',
947
950
  sourcePath: options.sourcePath || '',
948
951
  line: firstIssue.line,
949
- callee: firstIssue.callee,
952
+ issueType: firstIssue.type,
950
953
  },
951
954
  });
952
955
  }
953
- const formDetailLinkIssues = findFormDetailLinkIssues(source);
954
- if (formDetailLinkIssues.length > 0) {
955
- const firstIssue = formDetailLinkIssues[0];
956
- throw new CliError(formatFormDetailLinkMessage(firstIssue), {
957
- code: 'OPENYIDA_CANVAS_FORM_DETAIL_LINK_INVALID',
956
+ const directFormOpenIssues = findDirectFormOpenIssues(source);
957
+ if (directFormOpenIssues.length > 0) {
958
+ const firstIssue = directFormOpenIssues[0];
959
+ throw new CliError(formatDirectFormOpenMessage(), {
960
+ code: 'OPENYIDA_CANVAS_FORM_OPEN_CONTAINER_REQUIRED',
958
961
  details: {
959
962
  stage: 'canvas_compile',
960
963
  sourcePath: options.sourcePath || '',
961
964
  line: firstIssue.line,
962
- issueType: firstIssue.type,
965
+ callee: firstIssue.callee,
963
966
  },
964
967
  });
965
968
  }
@@ -967,6 +970,9 @@ function compileCanvasLocal(source, options = {}) {
967
970
  assertNoSelfReferentialDependencyBindings(source, options);
968
971
  assertNoBareDependencyGlobals(source, options);
969
972
  assertNoManualDependencyGlobals(source, options);
973
+ assertCanvasIconExports(source, options);
974
+ assertCanvasNavigationStructure(source, options);
975
+ assertCanvasNavigationPaths(source, options);
970
976
  assertInlineCssStructure(source, options);
971
977
  assertCanvasThemeStructure(source, options);
972
978