openyida 2026.9.15 → 2026.9.16-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 (149) hide show
  1. package/README.md +8 -3
  2. package/bin/yida.js +4 -1
  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 +8 -0
  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 +184 -0
  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 +4 -4
  14. package/lib/app/services/form-compiler.js +4 -4
  15. package/lib/app/theme-from-design.js +8 -2
  16. package/lib/app/theme-presets.js +1 -1
  17. package/lib/asset/ai-image.js +57 -9
  18. package/lib/asset/asset-cmd.js +14 -6
  19. package/lib/asset/asset-execution.js +79 -0
  20. package/lib/asset/asset-plan.js +66 -4
  21. package/lib/asset/asset-resolve.js +51 -10
  22. package/lib/asset/asset-status.js +5 -4
  23. package/lib/asset/host-capabilities.js +11 -2
  24. package/lib/asset/url-verify.js +19 -4
  25. package/lib/core/agent-capabilities.js +12 -2
  26. package/lib/core/command-manifest.js +147 -20
  27. package/lib/core/locales/en.js +19 -2
  28. package/lib/core/locales/zh.js +19 -2
  29. package/lib/core/redact.js +15 -10
  30. package/lib/core/sample.js +29 -17
  31. package/lib/design-plan/design-plan.js +7 -2
  32. package/lib/design-plan/entry-navigation.js +89 -0
  33. package/lib/design-plan/init.js +82 -12
  34. package/lib/design-plan/materialize.js +113 -67
  35. package/lib/design-plan/navigation-policy.js +38 -0
  36. package/lib/design-plan/normalize.js +47 -1
  37. package/lib/design-plan/parallel.js +9 -3
  38. package/lib/design-plan/patch.js +34 -6
  39. package/lib/design-plan/preview.js +3 -2
  40. package/lib/design-plan/validate.js +30 -5
  41. package/lib/design-plan/visual-policy.js +17 -0
  42. package/lib/samples/openyida-scaffold/canvas-admin-entry.jsx +62 -0
  43. package/lib/samples/openyida-scaffold/canvas-form-drawer.canvas.jsx +17 -87
  44. package/lib/samples/openyida-scaffold/canvas-nav/content.jsx +93 -13
  45. package/lib/samples/openyida-scaffold/canvas-nav/data.jsx +100 -18
  46. package/lib/samples/openyida-scaffold/canvas-nav/top.jsx +10 -5
  47. package/lib/samples/openyida-scaffold/canvas-navigation.jsx +56 -0
  48. package/lib/samples/openyida-scaffold/canvas-view-state.jsx +74 -0
  49. package/lib/samples/yida-canvas-table-form/table-form-batch-submit.canvas.jsx +9 -83
  50. package/lib/samples/yida-rechart/trend-combo.canvas.jsx +14 -87
  51. package/package.json +2 -1
  52. package/scripts/postinstall.js +3 -3
  53. package/yida-skills/SKILL.md +14 -12
  54. package/yida-skills/skills/yida-app/SKILL.md +25 -19
  55. package/yida-skills/skills/yida-app/references/entry-navigation.md +171 -0
  56. package/yida-skills/skills/yida-app/workflow/parallel-work.md +12 -3
  57. package/yida-skills/skills/yida-app/workflow/plan/step-1-understand.md +1 -1
  58. package/yida-skills/skills/yida-app/workflow/plan/step-2-confirm.md +1 -1
  59. package/yida-skills/skills/yida-app/workflow/plan/step-4-deliver.md +11 -13
  60. package/yida-skills/skills/yida-app/workflow/plan/workflow.md +8 -8
  61. package/yida-skills/skills/yida-app/workflow/step-1-resource-context.md +4 -2
  62. package/yida-skills/skills/yida-app/workflow/step-2-design.md +18 -6
  63. package/yida-skills/skills/yida-app/workflow/step-3-create-or-reuse-app.md +4 -2
  64. package/yida-skills/skills/yida-app/workflow/step-4-forms-processes.md +9 -1
  65. package/yida-skills/skills/yida-app/workflow/step-6-main-page.md +6 -4
  66. package/yida-skills/skills/yida-app/workflow/step-7-page-code.md +13 -7
  67. package/yida-skills/skills/yida-app/workflow/step-8-publish-navigation.md +17 -6
  68. package/yida-skills/skills/yida-app/workflow/step-9-output-finish.md +52 -19
  69. package/yida-skills/skills/yida-canvas-custom-page/SKILL.md +39 -40
  70. package/yida-skills/skills/yida-canvas-custom-page/references/canvas-style-implementation-guide.md +19 -11
  71. package/yida-skills/skills/yida-canvas-custom-page/references/canvas-theme-provider.md +71 -50
  72. package/yida-skills/skills/yida-canvas-custom-page/references/component-library-guide.md +11 -1
  73. package/yida-skills/skills/yida-canvas-custom-page/references/navigation-and-entry-guide.md +100 -71
  74. package/yida-skills/skills/yida-canvas-custom-page/references/page-generation-guide.md +16 -13
  75. package/yida-skills/skills/yida-canvas-custom-page/references/view-state-recovery.md +52 -0
  76. package/yida-skills/skills/yida-canvas-custom-page/scripts/build-canvas-theme.js +29 -3
  77. package/yida-skills/skills/yida-canvas-custom-page/scripts/canvas-theme-provider.template.jsx +62 -6
  78. package/yida-skills/skills/yida-canvas-data-binding/SKILL.md +2 -0
  79. package/yida-skills/skills/yida-canvas-data-binding/references/business-action-permissions.md +31 -0
  80. package/yida-skills/skills/yida-create-app/SKILL.md +2 -0
  81. package/yida-skills/skills/yida-create-form-page/SKILL.md +23 -15
  82. package/yida-skills/skills/yida-custom-page/SKILL.md +2 -0
  83. package/yida-skills/skills/yida-custom-page/references/design-system.md +1 -1
  84. package/yida-skills/skills/yida-design/SKILL.md +8 -2
  85. package/yida-skills/skills/yida-design/references/ask-human-interaction-contract.md +61 -39
  86. package/yida-skills/skills/yida-design/references/asset-workflow.md +6 -2
  87. package/yida-skills/skills/yida-design/references/design-mode.md +2 -2
  88. package/yida-skills/skills/yida-design/references/navigation-decision.md +50 -0
  89. package/yida-skills/skills/yida-design/references/page-continuity.md +44 -0
  90. package/yida-skills/skills/yida-design/references/style-design-selection.md +13 -1
  91. package/yida-skills/skills/yida-design/references/theme/app-custom-theme-template.css +2 -2
  92. package/yida-skills/skills/yida-design/references/visual-decision-engine.md +5 -28
  93. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/SKILL.md +4 -4
  94. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/references/build-plan-compact-schema.md +32 -13
  95. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/references/build-plan-schema.md +27 -151
  96. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/references/visual-design.md +8 -2
  97. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/references/visual-theme-selection.md +17 -13
  98. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/scripts/render_build_plan.py +26 -0
  99. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/scripts/validate_design_themes.py +29 -0
  100. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/README.md +13 -1
  101. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/airy-media-grid.md +86 -87
  102. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/airy-modular-clarity.md +85 -103
  103. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/airy-structured-clarity.md +73 -97
  104. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/ambient-halo-layered.md +91 -95
  105. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/basic-tokens.json +101 -0
  106. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/dark-focus-layered.md +82 -110
  107. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/dark-luminous-modular.md +86 -94
  108. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/deep-stage-duotone.md +91 -98
  109. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/hairline-runway-clarity.md +88 -99
  110. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/high-contrast-modular.md +84 -109
  111. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/interlocked-vivid-modules.md +83 -88
  112. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/matrix-grid-focus.md +85 -93
  113. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/media-rail-inspector.md +87 -85
  114. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/mist-layered-signal.md +88 -95
  115. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/modular-rail-signal.md +90 -101
  116. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/mono-grid-signal.md +87 -99
  117. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/ribbon-ledger-lift.md +86 -92
  118. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/segmented-meter-clarity.md +85 -93
  119. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/split-rail-precision.md +86 -88
  120. package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/status-framed-media-grid.md +82 -85
  121. package/yida-skills/skills/yida-design/workflow/output-design.md +5 -3
  122. package/yida-skills/skills/yida-design/workflow/step-1-read-brief.md +1 -1
  123. package/yida-skills/skills/yida-design/workflow/step-2-theme-system.md +3 -2
  124. package/yida-skills/skills/yida-design/workflow/step-4-wireframe-interaction.md +1 -1
  125. package/yida-skills/skills/yida-image-assets/SKILL.md +73 -50
  126. package/yida-skills/skills/yida-image-assets/references/manifest-contract.md +53 -54
  127. package/yida-skills/skills/yida-image-assets/references/source-policy.md +14 -15
  128. package/yida-skills/skills/yida-login/SKILL.md +2 -0
  129. package/yida-skills/skills/yida-nav-group/SKILL.md +4 -2
  130. package/yida-skills/skills/yida-nav-shell/SKILL.md +34 -10
  131. package/yida-skills/skills/yida-nav-shell/references/nav-shell-patterns.md +73 -136
  132. package/yida-skills/skills/yida-page-config/SKILL.md +3 -3
  133. package/yida-skills/skills/yida-prd/SKILL.md +2 -1
  134. package/yida-skills/skills/yida-prd/references/app/blueprint.md +1 -1
  135. package/yida-skills/skills/yida-prd/references/app/navigation-patterns.md +6 -3
  136. package/yida-skills/skills/yida-prd/references/plan-content.md +4 -0
  137. package/yida-skills/skills/yida-prd/workflow/output-prd.md +13 -7
  138. package/yida-skills/skills/yida-prd/workflow/plan-business.md +3 -3
  139. package/yida-skills/skills/yida-prd/workflow/step-2-information-architecture.md +8 -6
  140. package/yida-skills/skills/yida-publish-page/SKILL.md +4 -0
  141. package/yida-skills/skills/yida-requirement-analysis/SKILL.md +10 -39
  142. package/yida-skills/skills/yida-requirement-analysis/references/experience-groups.md +23 -0
  143. package/yida-skills/skills/yida-requirement-analysis/references/handoff.md +68 -0
  144. package/yida-skills/skills/yida-requirement-analysis/workflow/prepare-brief.md +32 -75
  145. package/yida-skills/skills-index.json +7 -7
  146. package/yida-skills/skills/yida-design/references/app/blueprint.md +0 -70
  147. package/yida-skills/skills/yida-design/references/app/navigation-patterns.md +0 -43
  148. package/yida-skills/skills/yida-design/references/app/role-journey.md +0 -30
  149. package/yida-skills/skills/yida-design/workflow/output-prd.md +0 -185
package/README.md CHANGED
@@ -396,11 +396,12 @@ Run `openyida --help` or `openyida <command> --help` for detailed usage.
396
396
  | `openyida app-list [--type managed\|created] [--page N] [--size N]` | Page through apps I manage or created |
397
397
  | `openyida corp-efficiency [overview\|details\|detail\|groups\|notify] [options] [--open\|--no-open]` | Query enterprise efficiency overview and detail reports |
398
398
  | `openyida create-app "<name>"\|--name <name> [options] [--locale zh_CN\|en_US\|ja_JP] [--open\|--no-open]` | Create a Yida app |
399
+ | `openyida design-plan catalog [--json]` | List available planning themes and page patterns |
399
400
  | `openyida design-plan init <requirement-brief.json> [--theme-id <id>] [--output-dir <dir>] [--json]` | Initialize a plan draft from confirmed requirements |
400
401
  | `openyida design-plan preview <build-plan.json> --part-file <module.json> [--json]` | Update plan drafts by module |
401
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 |
402
- | `openyida design-plan patch <build-plan.json> --set <path=value> [--set <path=value> ...] [--materialize] [--output-dir <dir>] [--json]` | Patch a design plan by field path and invalidate prior confirmation |
403
- | `openyida 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]` | Update app info |
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 |
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 |
404
405
  | `openyida app-online <appType> [--to-ding-app-center] [--show-app-center]` | Enable a Yida app |
405
406
  | `openyida app-offline <appType> [--to-ding-app-center] [--show-app-center]` | Disable a Yida app |
406
407
  | `openyida nav-group <list\|create\|rename\|delete\|move\|order\|auto-order\|hide\|show> <appType> ...` | Manage app sidebar navigation groups |
@@ -649,10 +650,14 @@ npx clawhub@latest install nicky1108/yida-app
649
650
  ```bash
650
651
  git clone https://github.com/openyida/openyida.git
651
652
  cd openyida
652
- npm install
653
+ nvm install
654
+ nvm use
655
+ npm ci --ignore-scripts
653
656
  npm run check:ci
654
657
  ```
655
658
 
659
+ Use the Node.js version in `.nvmrc` to match CI validation. If you do not use nvm, install that version directly.
660
+
656
661
  Useful checks:
657
662
 
658
663
  | Command | Purpose |
package/bin/yida.js CHANGED
@@ -697,7 +697,10 @@ async function main() {
697
697
  console.log(JSON.stringify(listAuthProfiles(buildTokenLoginOptions(authArgs)), null, 2));
698
698
  } else if (subCommand === 'profile') {
699
699
  const profileSubCommand = authArgs[0];
700
- if (profileSubCommand === 'switch') {
700
+ if (profileSubCommand === 'list') {
701
+ const { listAuthProfiles } = require('../lib/auth/profile');
702
+ console.log(JSON.stringify(listAuthProfiles(buildTokenLoginOptions(authArgs.slice(1))), null, 2));
703
+ } else if (profileSubCommand === 'switch') {
701
704
  const target = getFirstPositionalArg(authArgs, 1);
702
705
  const { switchAuthProfile } = require('../lib/auth/profile');
703
706
  console.log(JSON.stringify(switchAuthProfile(target, buildTokenLoginOptions(authArgs)), null, 2));
@@ -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 };
@@ -50,6 +50,10 @@ const {
50
50
  } = require('./form-detail-link-guard');
51
51
  const { t } = require('../core/i18n');
52
52
  const { assertInlineCssStructure } = require('./inline-css-guard');
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');
53
57
 
54
58
  /**
55
59
  * 依赖 → window 别名白名单,用于把 import 改写到运行时全局对象。
@@ -966,7 +970,11 @@ function compileCanvasLocal(source, options = {}) {
966
970
  assertNoSelfReferentialDependencyBindings(source, options);
967
971
  assertNoBareDependencyGlobals(source, options);
968
972
  assertNoManualDependencyGlobals(source, options);
973
+ assertCanvasIconExports(source, options);
974
+ assertCanvasNavigationStructure(source, options);
975
+ assertCanvasNavigationPaths(source, options);
969
976
  assertInlineCssStructure(source, options);
977
+ assertCanvasThemeStructure(source, options);
970
978
 
971
979
  const importedModules = extractImportedModules(source);
972
980