@h-ai/cli 1.0.0-beta.2 → 1.0.0-beta.21

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 (254) hide show
  1. package/README.en.md +74 -154
  2. package/README.ja.md +74 -154
  3. package/README.md +74 -154
  4. package/dist/{chunk-AKV2CQZV.js → chunk-2ZL5ORQ2.js} +316 -97
  5. package/dist/chunk-2ZL5ORQ2.js.map +1 -0
  6. package/dist/{chunk-EF7WOFWZ.js → chunk-L53P43B2.js} +1312 -163
  7. package/dist/chunk-L53P43B2.js.map +1 -0
  8. package/dist/cli-config-templates-LWMD2I6V.js +5 -0
  9. package/dist/{cli-config-templates-HHFHNXBN.js.map → cli-config-templates-LWMD2I6V.js.map} +1 -1
  10. package/dist/{cli-skill-templates-PN4FLGBC.js → cli-skill-templates-D6S2OQ6X.js} +3 -3
  11. package/dist/{cli-skill-templates-PN4FLGBC.js.map → cli-skill-templates-D6S2OQ6X.js.map} +1 -1
  12. package/dist/index.d.ts +1 -1
  13. package/dist/index.js +30118 -3253
  14. package/dist/index.js.map +1 -1
  15. package/dist/metafile-esm.json +1 -1
  16. package/package.json +22 -18
  17. package/templates/README.md +45 -30
  18. package/templates/apps/admin/src/routes/+layout.svelte.hbs +16 -10
  19. package/templates/apps/admin/src/routes/+page.svelte.hbs +4 -4
  20. package/templates/apps/admin/src/routes/admin/+layout.svelte.hbs +17 -7
  21. package/templates/apps/admin/src/routes/admin/+page.svelte.hbs +26 -6
  22. package/templates/apps/admin/src/routes/admin/settings/+page.svelte.hbs +2 -2
  23. package/templates/apps/api/.dockerignore.hbs +10 -0
  24. package/templates/apps/api/apps/{{projectName}}-contract/README.md.hbs +8 -0
  25. package/templates/apps/api/apps/{{projectName}}-contract/src/app-schemas.ts.hbs +6 -1
  26. package/templates/apps/api/apps/{{projectName}}-contract/src/{{projectName}}-contract.ts.hbs +13 -5
  27. package/templates/apps/api/apps/{{projectName}}-contract/tests/contract.test.ts.hbs +13 -5
  28. package/templates/apps/api/apps/{{projectName}}-contract/tsup.config.ts.hbs +3 -1
  29. package/templates/apps/api/apps/{{projectName}}-serv/README.md.hbs +6 -2
  30. package/templates/apps/api/apps/{{projectName}}-serv/config/_serv.yml.hbs +24 -2
  31. package/templates/apps/api/apps/{{projectName}}-serv/package.json.hbs +4 -4
  32. package/templates/apps/api/apps/{{projectName}}-serv/src/app.ts.hbs +74 -24
  33. package/templates/apps/api/apps/{{projectName}}-serv/src/build-metadata.ts.hbs +0 -1
  34. package/templates/apps/api/apps/{{projectName}}-serv/src/lib/server/init.ts.hbs +153 -37
  35. package/templates/apps/api/apps/{{projectName}}-serv/src/server/procedures/index.ts.hbs +39 -13
  36. package/templates/apps/api/apps/{{projectName}}-serv/tests/service.test.ts.hbs +106 -33
  37. package/templates/apps/api/apps/{{projectName}}-serv/tsup.config.ts.hbs +3 -1
  38. package/templates/apps/api/apps/{{projectName}}-serv/vitest.config.ts.hbs +3 -1
  39. package/templates/apps/api/e2e/api-serv.spec.ts.hbs +20 -3
  40. package/templates/apps/api/e2e/capture-evidence.ts.hbs +4 -1
  41. package/templates/apps/api/eslint.config.js.hbs +3 -1
  42. package/templates/apps/api/images/serv.Dockerfile.hbs +15 -10
  43. package/templates/apps/api/playwright.config.ts.hbs +23 -19
  44. package/templates/apps/api/pnpm-workspace.yaml.hbs +27 -16
  45. package/templates/apps/fullstack/.dockerignore.hbs +10 -0
  46. package/templates/apps/fullstack/.gitignore.hbs +7 -2
  47. package/templates/apps/fullstack/apps/{{projectName}}-app/README.md.hbs +14 -12
  48. package/templates/apps/fullstack/apps/{{projectName}}-app/capacitor.config.ts.hbs +5 -3
  49. package/templates/apps/fullstack/apps/{{projectName}}-app/eslint.config.js.hbs +10 -2
  50. package/templates/apps/fullstack/apps/{{projectName}}-app/package.json.hbs +1 -1
  51. package/templates/apps/fullstack/apps/{{projectName}}-app/src/App.svelte.hbs +10 -2
  52. package/templates/apps/fullstack/apps/{{projectName}}-app/src/build-metadata.ts.hbs +0 -1
  53. package/templates/apps/fullstack/apps/{{projectName}}-app/src/lib/capacitor.ts.hbs +0 -1
  54. package/templates/apps/fullstack/apps/{{projectName}}-app/svelte.config.js.hbs +4 -1
  55. package/templates/apps/fullstack/apps/{{projectName}}-app/vite.config.ts.hbs +16 -4
  56. package/templates/apps/fullstack/apps/{{projectName}}-desktop/README.md.hbs +10 -8
  57. package/templates/apps/fullstack/apps/{{projectName}}-desktop/package.json.hbs +3 -3
  58. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src/App.svelte.hbs +8 -2
  59. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src/build-metadata.ts.hbs +0 -1
  60. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/tauri.conf.json.hbs +0 -2
  61. package/templates/apps/fullstack/apps/{{projectName}}-desktop/svelte.config.js.hbs +4 -1
  62. package/templates/apps/fullstack/apps/{{projectName}}-desktop/vite.config.ts.hbs +16 -4
  63. package/templates/apps/fullstack/apps/{{projectName}}-miniapp/README.md.hbs +2 -0
  64. package/templates/apps/fullstack/apps/{{projectName}}-web/README.md.hbs +9 -9
  65. package/templates/apps/fullstack/apps/{{projectName}}-web/eslint.config.js.hbs +10 -2
  66. package/templates/apps/fullstack/apps/{{projectName}}-web/index.html.hbs +1 -0
  67. package/templates/apps/fullstack/apps/{{projectName}}-web/src/build-metadata.ts.hbs +0 -1
  68. package/templates/apps/fullstack/apps/{{projectName}}-web/src/main.ts.hbs +0 -2
  69. package/templates/apps/fullstack/apps/{{projectName}}-web/svelte.config.js.hbs +4 -1
  70. package/templates/apps/fullstack/apps/{{projectName}}-web/vite.config.ts.hbs +19 -5
  71. package/templates/apps/fullstack/docs/security-configuration.md.hbs +4 -1
  72. package/templates/apps/fullstack/e2e/fullstack.spec.ts.hbs +140 -28
  73. package/templates/apps/fullstack/e2e/session-close.spec.ts.hbs +19 -5
  74. package/templates/apps/fullstack/eslint.config.js.hbs +3 -1
  75. package/templates/apps/fullstack/images/serv.Dockerfile.hbs +19 -11
  76. package/templates/apps/fullstack/images/web.Dockerfile.hbs +17 -8
  77. package/templates/apps/fullstack/package.json.hbs +2 -1
  78. package/templates/apps/fullstack/packages/{{projectName}}-contract/README.md.hbs +7 -5
  79. package/templates/apps/fullstack/packages/{{projectName}}-contract/src/admin-contract.ts.hbs +114 -23
  80. package/templates/apps/fullstack/packages/{{projectName}}-contract/src/admin-schemas.ts.hbs +57 -11
  81. package/templates/apps/fullstack/packages/{{projectName}}-contract/tsup.config.ts.hbs +3 -1
  82. package/templates/apps/fullstack/packages/{{projectName}}-serv/README.md.hbs +17 -7
  83. package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_reach.yml.hbs +13 -7
  84. package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_serv.yml.hbs +17 -7
  85. package/templates/apps/fullstack/packages/{{projectName}}-serv/package.json.hbs +10 -4
  86. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/app-server.ts.hbs +65 -30
  87. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/build-metadata.ts.hbs +0 -1
  88. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/index.ts.hbs +1 -2
  89. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/admin-service.ts.hbs +69 -21
  90. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/business-settings.ts.hbs +21 -5
  91. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/procedures/admin-procedures.ts.hbs +63 -11
  92. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/procedures/app-procedures.ts.hbs +6 -1
  93. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/procedures/index.ts.hbs +3 -1
  94. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/runtime.ts.hbs +147 -33
  95. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/security-roles.ts.hbs +43 -12
  96. package/templates/apps/fullstack/packages/{{projectName}}-serv/tests/app-server.test.ts.hbs +146 -30
  97. package/templates/apps/fullstack/packages/{{projectName}}-serv/tests/runtime.test.ts.hbs +33 -10
  98. package/templates/apps/fullstack/packages/{{projectName}}-serv/tests/security.test.ts.hbs +142 -26
  99. package/templates/apps/fullstack/packages/{{projectName}}-serv/tsup.config.ts.hbs +6 -2
  100. package/templates/apps/fullstack/packages/{{projectName}}-serv/vitest.config.ts.hbs +3 -1
  101. package/templates/apps/fullstack/packages/{{projectName}}-shared/README.md.hbs +48 -66
  102. package/templates/apps/fullstack/packages/{{projectName}}-shared/messages/en-US.json.hbs +1 -0
  103. package/templates/apps/fullstack/packages/{{projectName}}-shared/messages/ja-JP.json.hbs +1 -0
  104. package/templates/apps/fullstack/packages/{{projectName}}-shared/messages/zh-CN.json.hbs +1 -0
  105. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/api/api-client.ts.hbs +9 -2
  106. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/api/feedback-client.ts.hbs +0 -3
  107. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/api/sensitive-actions.svelte.ts.hbs +15 -3
  108. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/components/AppShell.svelte.hbs +33 -7
  109. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/components/FeedbackEntry.svelte.hbs +16 -2
  110. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/pages/audit.svelte.hbs +104 -13
  111. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/pages/feedback.svelte.hbs +37 -7
  112. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/pages/roles.svelte.hbs +9 -3
  113. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/pages/settings.svelte.hbs +25 -3
  114. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/pages/users.svelte.hbs +133 -19
  115. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/security/role-label.ts.hbs +14 -2
  116. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/stores/guide-store.ts.hbs +66 -34
  117. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/stores/management-store.svelte.ts.hbs +132 -30
  118. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/stores/theme-store.svelte.ts.hbs +8 -2
  119. package/templates/apps/fullstack/packages/{{projectName}}-shared/tests/api-client.test.ts.hbs +23 -5
  120. package/templates/apps/fullstack/packages/{{projectName}}-shared/tests/management-store.test.ts.hbs +143 -21
  121. package/templates/apps/fullstack/packages/{{projectName}}-shared/vitest.config.ts.hbs +7 -2
  122. package/templates/apps/fullstack/playwright.config.ts.hbs +25 -3
  123. package/templates/apps/fullstack/pnpm-workspace.yaml.hbs +30 -14
  124. package/templates/apps/h5/src/routes/+layout.svelte.hbs +74 -30
  125. package/templates/apps/h5/src/routes/+page.svelte.hbs +2 -2
  126. package/templates/apps/h5/src/routes/discover/+page.svelte.hbs +2 -2
  127. package/templates/apps/h5/src/routes/profile/+page.svelte.hbs +2 -2
  128. package/templates/apps/mobile-app/capacitor.config.ts.hbs +5 -2
  129. package/templates/apps/mobile-app/messages/en-US.json +2 -2
  130. package/templates/apps/mobile-app/messages/ja-JP.json +2 -2
  131. package/templates/apps/mobile-app/messages/zh-CN.json +2 -2
  132. package/templates/apps/mobile-app/src/App.svelte.hbs +17 -5
  133. package/templates/apps/mobile-app/src/lib/api.ts.hbs +20 -6
  134. package/templates/apps/mobile-app/src/lib/app-config.ts.hbs +8 -1
  135. package/templates/apps/mobile-app/src/lib/pages/home.svelte.hbs +6 -2
  136. package/templates/apps/mobile-app/src/lib/pages/profile.svelte.hbs +13 -1
  137. package/templates/apps/mobile-app/src/lib/pages/tasks.svelte.hbs +5 -1
  138. package/templates/apps/website/scripts/static-website.mjs.hbs +19 -6
  139. package/templates/apps/website/src/routes/+layout.svelte.hbs +56 -29
  140. package/templates/apps/website/src/routes/+page.svelte.hbs +4 -4
  141. package/templates/apps/website/src/routes/about/+page.svelte.hbs +2 -2
  142. package/templates/apps/website/src/routes/contact/+page.svelte.hbs +2 -2
  143. package/templates/apps/website/src/routes/services/+page.svelte.hbs +20 -5
  144. package/templates/base/.dockerignore.hbs +10 -0
  145. package/templates/base/.gitignore.hbs +7 -2
  146. package/templates/base/e2e/app.spec.ts.hbs +130 -36
  147. package/templates/base/eslint-rules.js +44 -25
  148. package/templates/base/eslint.config.js.hbs +3 -1
  149. package/templates/base/images/web.Dockerfile.hbs +25 -14
  150. package/templates/base/package.json.hbs +13 -7
  151. package/templates/base/patches/daisyui-5.7.50.patch +8 -0
  152. package/templates/base/patches/deepmerge-4.3.1.patch +51 -0
  153. package/templates/base/playwright.config.ts +3 -1
  154. package/templates/base/pnpm-workspace.yaml.hbs +33 -16
  155. package/templates/base/src/app.d.ts.hbs +1 -1
  156. package/templates/base/src/app.html.hbs +1 -0
  157. package/templates/base/src/hooks.server.ts.hbs +44 -33
  158. package/templates/base/src/lib/build-metadata.ts.hbs +0 -1
  159. package/templates/base/src/lib/server/init.ts.hbs +146 -35
  160. package/templates/base/src/lib/server/kit-config.ts.hbs +7 -4
  161. package/templates/base/src/routes/+layout.server.ts.hbs +2 -2
  162. package/templates/base/svelte.config.js.hbs +10 -100
  163. package/templates/base/tests/scaffold.test.ts.hbs +12 -3
  164. package/templates/base/tsconfig.json.hbs +7 -4
  165. package/templates/base/vite.config.ts.hbs +108 -14
  166. package/templates/base/vitest.config.ts.hbs +6 -2
  167. package/templates/features/ai/routes/api/chat/+server.ts +3 -1
  168. package/templates/features/iam/routes-admin/(auth)/auth/forgot-password/+page.svelte.hbs +3 -3
  169. package/templates/features/iam/routes-admin/(auth)/auth/login/+page.svelte.hbs +3 -3
  170. package/templates/features/iam/routes-admin/(auth)/auth/register/+page.svelte.hbs +3 -3
  171. package/templates/features/iam/routes-admin/(auth)/auth/reset-password/+page.svelte.hbs +3 -3
  172. package/templates/features/iam/routes-h5/auth/forgot-password/+page.svelte.hbs +3 -3
  173. package/templates/features/iam/routes-h5/auth/login/+page.svelte.hbs +3 -3
  174. package/templates/features/iam/routes-h5/auth/register/+page.svelte.hbs +3 -3
  175. package/templates/features/iam/routes-h5/auth/reset-password/+page.svelte.hbs +3 -3
  176. package/templates/features/iam/routes-website/auth/forgot-password/+page.svelte.hbs +3 -3
  177. package/templates/features/iam/routes-website/auth/login/+page.svelte.hbs +3 -3
  178. package/templates/features/iam/routes-website/auth/register/+page.svelte.hbs +3 -3
  179. package/templates/features/iam/routes-website/auth/reset-password/+page.svelte.hbs +3 -3
  180. package/templates/features/payment/routes/api/v1/payment/create/+server.ts +14 -3
  181. package/templates/shared/browser-check/startup.js +115 -0
  182. package/templates/shared/browser-check/update.css +37 -0
  183. package/templates/shared/browser-check/update.html +19 -0
  184. package/templates/shared/browser-startup.spec.ts +23 -0
  185. package/templates/shared/build-metadata.ts +18 -4
  186. package/templates/shared/e2e-env.ts +22 -6
  187. package/templates/shared/native-name.d.mts +5 -0
  188. package/templates/shared/native-name.mjs +94 -0
  189. package/templates/shared/public-base-path.mjs +17 -4
  190. package/templates/shared/run-e2e.mjs +46 -12
  191. package/templates/shared/run-node.mjs +56 -0
  192. package/templates/shared/run-tauri.mjs +74 -0
  193. package/templates/shared/vite-runtime-config.ts +9 -3
  194. package/templates/skills/AGENTS.md +10 -73
  195. package/templates/skills/bridges/admin/AGENTS.md +9 -65
  196. package/templates/skills/bridges/api/AGENTS.md +8 -59
  197. package/templates/skills/bridges/fullstack/AGENTS.md.hbs +9 -54
  198. package/templates/skills/bridges/h5/AGENTS.md +8 -63
  199. package/templates/skills/bridges/mobile-app/AGENTS.md +8 -62
  200. package/templates/skills/bridges/website/AGENTS.md +8 -63
  201. package/templates/skills/hai-ai/SKILL.md +6 -2
  202. package/templates/skills/hai-ai/acp.md +153 -0
  203. package/templates/skills/hai-ai/guide.md +27 -12
  204. package/templates/skills/hai-ai/reference.md +24 -15
  205. package/templates/skills/hai-ai/resources.md +69 -0
  206. package/templates/skills/hai-api-client/SKILL.md +1 -1
  207. package/templates/skills/hai-api-client/reference.md +3 -1
  208. package/templates/skills/hai-app-create/collaboration.md +7 -0
  209. package/templates/skills/hai-app-create/development.md +19 -10
  210. package/templates/skills/hai-app-create/project.md +33 -0
  211. package/templates/skills/hai-app-create/reference.md +10 -10
  212. package/templates/skills/hai-app-tests/reference.md +1 -1
  213. package/templates/skills/hai-app-tests/validation.md +1 -0
  214. package/templates/skills/hai-build/SKILL.md +19 -9
  215. package/templates/skills/hai-build/paths.md +4 -2
  216. package/templates/skills/hai-build/reference.md +26 -8
  217. package/templates/skills/hai-cache/reference.md +6 -2
  218. package/templates/skills/hai-capacitor/SKILL.md +1 -0
  219. package/templates/skills/hai-capacitor/reference.md +24 -0
  220. package/templates/skills/hai-ci/SKILL.md +3 -0
  221. package/templates/skills/hai-core/SKILL.md +9 -4
  222. package/templates/skills/hai-core/reference.md +40 -10
  223. package/templates/skills/hai-core/request-access.md +2 -2
  224. package/templates/skills/hai-crypto/SKILL.md +2 -2
  225. package/templates/skills/hai-crypto/reference.md +7 -3
  226. package/templates/skills/hai-deploy/SKILL.md +41 -5
  227. package/templates/skills/hai-deploy/middleware.md +26 -14
  228. package/templates/skills/hai-framework-sync/SKILL.md +13 -9
  229. package/templates/skills/hai-framework-sync/sync.md +2 -0
  230. package/templates/skills/hai-iam/reference.md +2 -2
  231. package/templates/skills/hai-kit/SKILL.md +1 -1
  232. package/templates/skills/hai-kit/reference.md +19 -5
  233. package/templates/skills/hai-payment/reference.md +41 -17
  234. package/templates/skills/hai-reach/SKILL.md +3 -1
  235. package/templates/skills/hai-reach/reference.md +29 -9
  236. package/templates/skills/hai-reldb/SKILL.md +1 -1
  237. package/templates/skills/hai-reldb/reference.md +9 -2
  238. package/templates/skills/hai-scheduler/reference.md +1 -1
  239. package/templates/skills/hai-serv/SKILL.md +2 -1
  240. package/templates/skills/hai-serv/reference.md +26 -15
  241. package/templates/skills/hai-storage/reference.md +23 -6
  242. package/templates/skills/hai-ui/SKILL.md +11 -6
  243. package/templates/skills/hai-ui/charts.md +51 -0
  244. package/templates/skills/hai-ui/guide.md +1 -1
  245. package/templates/skills/hai-ui/reference.md +58 -38
  246. package/templates/skills/hai-vecdb/reference.md +8 -3
  247. package/dist/chunk-AKV2CQZV.js.map +0 -1
  248. package/dist/chunk-EF7WOFWZ.js.map +0 -1
  249. package/dist/chunk-MUHRBJSW.js +0 -29272
  250. package/dist/chunk-MUHRBJSW.js.map +0 -1
  251. package/dist/cli-config-templates-HHFHNXBN.js +0 -5
  252. package/dist/src-TEBHR5I5.js +0 -5
  253. package/dist/src-TEBHR5I5.js.map +0 -1
  254. package/templates/apps/fullstack/playwright.session-close.config.ts.hbs +0 -18
@@ -1,8 +1,10 @@
1
1
  # hai-ui — 详细用法
2
2
 
3
+ HTTP/UI 边界只对明确的有效 4xx 状态公开业务提示;错误缺少 `httpStatus` 或状态非法时按 500 返回安全提示。手写业务错误须提供完整错误定义或显式状态,不能依赖缺省状态展示原文。
4
+
3
5
  从 [SKILL.md](SKILL.md) 选择主题后读取对应小节。代码片段展示 API 用法;省略的业务变量、schema、依赖与 return 上下文需由应用补齐。
4
6
 
5
- > `@h-ai/ui` 是基于 Svelte 5 Runes 的多端 UI 组件库,采用 DaisyUI v5 + Tailwind CSS v4 + Bits UI v2,内置 15 个精选 DaisyUI 主题及 high-contrast 高对比、formal 直角商务主题、内置中英日文 i18n、自动导入。内置 Shiki 代码高亮、Mermaid 图表渲染、Design Token 系统和 7 个移动端组件。
7
+ > `@h-ai/ui` 是基于 Svelte 5 Runes 的多端 UI 组件库,采用 DaisyUI v5 + Tailwind CSS v4 + Bits UI v2,内置 15 个精选 DaisyUI 主题及 high-contrast 高对比、formal 直角商务、eye-care 暖绿护眼主题、内置中英日文 i18n、自动导入。内置 Shiki 代码高亮、Mermaid 图表渲染、Design Token 系统和 7 个移动端组件。
6
8
 
7
9
  ## 运行环境
8
10
 
@@ -39,7 +41,8 @@
39
41
 
40
42
  至少检查以下四项:
41
43
 
42
- - `svelte.config.*`:`autoImportHaiUi()` 在 `vitePreprocess()` 前。
44
+ - SvelteKit 3 在 `vite.config.*` 的 `sveltekit({...})` 中设置预处理;纯 Svelte/Vite 使用 `svelte.config.*`。两者都先执行 `vitePreprocess()` 或其他样式/模板语言转换,再执行 `autoImportHaiUi()`;后者按整份 Svelte AST 定位实例脚本,不直接接受转换前的 SCSS/Pug,直接 markup 调用保持同步。
45
+ - 自动导入只补模板中实际使用且未被脚本或模板局部作用域绑定的组件;注释、textarea 与脚本字符串里的组件示例不触发导入。
43
46
  - `vite.config.*`:`ssr.noExternal` 包含 `@h-ai/ui` 和 `@h-ai/kit`,`optimizeDeps.exclude` 包含 `bits-ui`。
44
47
  - `app.css`:已导入 `global.css` / `theme.css`;移动端还要导入 `design-tokens.css` / `mobile.css`。
45
48
  - Tailwind:已配置 `@source` 扫描 `@h-ai/ui/dist/**/*.{svelte,js,ts}`。
@@ -72,6 +75,7 @@
72
75
  | 登录/注册页布局 | `AuthShell` + `LoginForm` / `RegisterForm` | `variant='card'` 或 `'split'`;split 可通过 `illustration`/`description`/`highlights` 放大图与重点说明 |
73
76
  | 登录/注册/资料页 | `LoginForm` / `RegisterForm` / `UserProfile` | 页面只负责路由和提交逻辑 |
74
77
  | 文件/图片上传 | `FileUpload` / `ImageUpload` / `AvatarUpload` | 上传 URL、限制和业务状态由应用层提供 |
78
+ | 在线代码浏览与检查 | `CodeWorkspace` | 两个读取回调接入文件树与多标签,按需添加工作区搜索、检查面板和选区操作 |
75
79
  | 移动端页面骨架 | `SafeArea` + `AppBar` + `BottomNav` | 原生壳页面优先这一套 |
76
80
  | AI 文档/Markdown 展示 | `MarkdownRenderer` / `AiDocumentEditor` | Mermaid、代码高亮、复制/下载已内置 |
77
81
 
@@ -99,55 +103,39 @@ npm install -D tailwindcss @tailwindcss/vite daisyui
99
103
  npm install -D @iconify/tailwind4 @iconify-json/tabler
100
104
  ```
101
105
 
102
- Node adapter 使用 Crypto、Kit 或 IAM 时,还需将 `sm-crypto@0.5.7` 作为直接生产依赖安装,保留 Node 原生模块解析。
103
-
104
- ### 2. svelte.config.js
105
-
106
- ```js
107
- import { autoImportHaiUi } from '@h-ai/ui/auto-import'
108
- import adapter from '@sveltejs/adapter-node'
109
- import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'
106
+ Node adapter 使用 Crypto、Kit 或 IAM 时,还需将 `sm-crypto@0.5.8` 作为直接生产依赖安装,保留 Node 原生模块解析。
110
107
 
111
- /** @type {import('@sveltejs/kit').Config} */
112
- const config = {
113
- // autoImportHaiUi 必须在 vitePreprocess 之前
114
- preprocess: [autoImportHaiUi(), vitePreprocess()],
115
- compilerOptions: {
116
- runes: true, // 强制 Svelte 5 Runes 模式
117
- },
118
- kit: {
119
- adapter: adapter(),
120
- alias: {
121
- $components: './src/lib/components',
122
- $stores: './src/lib/stores',
123
- },
124
- },
125
- }
108
+ ### 2. package.json 的应用导入
126
109
 
127
- export default config
110
+ ```json
111
+ { "imports": { "#lib/*": "./src/lib/*" } }
128
112
  ```
129
113
 
130
114
  ### 3. vite.config.ts
131
115
 
116
+ SvelteKit 3 的预处理、编译器和适配器统一配置在 Vite 插件;纯 Svelte/Vite 工程保留自己的 svelte.config.js。
117
+
132
118
  ```ts
119
+ import { autoImportHaiUi } from '@h-ai/ui/auto-import'
120
+ import { haiOptimizeExclude, haiPrebundledDeps } from '@h-ai/ui/vite'
121
+ import adapter from '@sveltejs/adapter-node'
133
122
  import { sveltekit } from '@sveltejs/kit/vite'
123
+ import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'
134
124
  import tailwindcss from '@tailwindcss/vite'
135
125
  import { defineConfig } from 'vite'
136
126
 
137
127
  export default defineConfig({
138
128
  plugins: [
139
- sveltekit(),
129
+ sveltekit({
130
+ preprocess: [vitePreprocess(), autoImportHaiUi()],
131
+ compilerOptions: { runes: true },
132
+ adapter: adapter(),
133
+ paths: { relative: false },
134
+ }),
140
135
  tailwindcss(),
141
136
  ],
142
- optimizeDeps: {
143
- // bits-ui 使用 Svelte 虚拟模块,需排除预构建
144
- exclude: ['bits-ui'],
145
- },
146
- ssr: {
147
- // @h-ai 包为 ESM + Svelte 组件,需 Vite 在 SSR 时处理
148
- noExternal: ['@h-ai/ui', '@h-ai/kit'],
149
- external: ['@h-ai/core', 'sm-crypto'],
150
- },
137
+ optimizeDeps: { exclude: [...haiOptimizeExclude], include: [...haiPrebundledDeps] },
138
+ ssr: { noExternal: ['@h-ai/ui', '@h-ai/kit'], external: ['@h-ai/core', 'sm-crypto'] },
151
139
  })
152
140
  ```
153
141
 
@@ -273,13 +261,15 @@ const p = usePlatform()
273
261
  | `Skeleton` | `variant`, `count`, `animation` | 骨架屏 |
274
262
  | `Empty` | `title`, `description`, `icon` | 空状态 |
275
263
 
264
+ 滚动或裁剪容器中的 `Dropdown` 使用默认 `click` 或 `hover` 触发,菜单挂载到 `body`。由调用方控制开关时,使用 `trigger='manual'`,通过 `class` 切换 `dropdown-open` 显示内联菜单。`Popover` 默认挂载到 `body`,`click` 模式下键盘打开后焦点进入面板,Escape 关闭并返回触发控件。
265
+
276
266
  #### 移动端组合组件(7 个)
277
267
 
278
268
  | 组件 | Props 要点 | 说明 |
279
269
  | ---------------- | ----------------------------------------------------------------------------- | ---------------- |
280
270
  | `SafeArea` | `top`, `bottom`, `left`, `right` | 安全区域容器 |
281
271
  | `AppBar` | `title`, `backHref`, `onback`, `fixed`, `transparent`, snippet `left`/`right` | 顶部导航栏 |
282
- | `BottomNav` | `items: BottomNavItem[]`, `active` | 底部导航栏 |
272
+ | `BottomNav` | `items: BottomNavItem[]`, `active` | 底部导航栏,客户端挂载后启用按钮 |
283
273
  | `ActionSheet` | `open`, `title`, `items: ActionSheetItem[]`, `cancelText`, `onselect` | 底部弹出操作面板 |
284
274
  | `PullRefresh` | `refreshing`, `onrefresh`, `threshold`, `pullText`, `releaseText` | 下拉刷新 |
285
275
  | `InfiniteScroll` | `loading`, `finished`, `threshold`, `onload`, `loadingText`, `finishedText` | 无限滚动加载 |
@@ -347,6 +337,33 @@ const p = usePlatform()
347
337
 
348
338
  内置中英日文翻译的业务场景组件。
349
339
 
340
+ #### 代码工作区
341
+
342
+ `CodeWorkspace` 提供异步文件树、只读 Monaco 代码区和可选的检查面板。从 `@h-ai/ui/components/scenes/code/index` 导入组件和类型。
343
+
344
+ ```svelte
345
+ <script lang="ts">
346
+ import type { CodeWorkspaceSource } from '@h-ai/ui/components/scenes/code/index'
347
+ import { CodeWorkspace } from '@h-ai/ui/components/scenes/code/index'
348
+
349
+ const source: CodeWorkspaceSource = {
350
+ listChildren: () => [{ kind: 'file', id: 'readme', name: 'README.md' }],
351
+ readFile: () => ({ text: '# Hello', language: 'markdown' }),
352
+ }
353
+ </script>
354
+
355
+ <CodeWorkspace {source} />
356
+ ```
357
+
358
+ - `listChildren(null, signal)` 读取根节点。目录展开时组件传入目录节点并复用已加载的结果。文件 ID 与版本用于复用标签和恢复视图。`initialFile` 与 `initialAncestors` 可预先打开文件并展开其父目录。保持 `source` 对象引用稳定,切换仓库或分支时替换对象。
359
+ - 可选的 `search({ mode, query, cursor }, signal)` 接入宿主索引。`mode` 是 `files` 或 `content`。命中包含 `node`,可附带 `ancestors`、`range` 和 `preview`。返回 `nextCursor` 启用续页。把收到的 `signal` 传给实际请求,后端负责授权与索引范围。回调失败时可抛错或拒绝 Promise,组件会提供重试入口。
360
+ - 节点的 `markers` 使用 `label` 提供可访问名称,按需附加 `text` 和 `tone`。`readFile` 返回的 `annotations` 使用 `range`、`label` 和可选的 `tone`、`display`,可在行前和对应范围内显示。搜索命中与标注应使用同一文件版本,行列从 1 开始,列按 UTF-16 计数,结束位置不含。
361
+ - `inspector` snippet 收到 `{ file, selection, reveal }`,其中 `selection` 可以为 `null`。`selectionActions` 收到非空选区、同一 `file`、`reveal` 和 `openInspector`。`reveal(range)` 仅在对应文档仍激活时跳转,`openInspector()` 可打开已有右栏。解释、标记保存等宿主操作从这两个入口接入。
362
+ - 工作区内 `Ctrl/⌘+P` 找文件,`Ctrl/⌘+Shift+F` 搜工作区内容;代码区 `Ctrl/⌘+F` 查找,`Ctrl/⌘+G` 跳行;`Alt+Shift+Enter` 聚焦可用的选区操作。通过 `options` 设置行号、缩略图、面包屑和换行的初始值,用户可在工具栏切换。
363
+ - `theme` 默认 `inherit`,另有 `vs-light`、`vs-dark`、`hc-light`、`hc-dark` 和 `github-dark`。自定义主题传入 `{ base, colors, tokens }`,其中 `base` 是 VS 或高对比预设,`colors` 和 `tokens` 可省略。同页 Monaco 实例共享编辑器主题。工作区外壳可 SSR,Monaco 及默认同源 worker 由 Vite 在浏览器按需加载。移动端和编辑器加载失败时使用纯文本视图。
364
+
365
+ 行前图标和浮层可通过 `annotationIcon`、`annotationHover` Snippet 自定义,两者收到 `{ file, annotation }`。仅需提示文字时,在标注上传入 `hoverText`,它优先于浮层 Snippet。图标锚定标注起始行,支持悬停、键盘和点击。
366
+
350
367
  #### 引导与帮助场景组件
351
368
 
352
369
  | 组件 | Props 要点 | 说明 |
@@ -365,6 +382,8 @@ const p = usePlatform()
365
382
  | `RegisterForm` | `fields`, `minPasswordLength`, `errors` | 注册表单 |
366
383
  | `UserProfile` | `user`, `editable`, `fields`, `avatarAccept`, `avatarHint` | 用户资料,选择器和提示对齐业务校验;最终验证和上传仍由回调负责 |
367
384
 
385
+ `UserProfile.onsubmit` 必须返回 `true` / `false` 表示保存成功 / 失败;仅成功退出编辑,失败保留编辑器与草稿。宿主在失败时更新错误提示并返回 `false`,不要把失败转换成正常关闭。
386
+
368
387
  #### 错误页 / 设置场景组件
369
388
 
370
389
  | 组件 | Props 要点 | 说明 |
@@ -546,7 +565,7 @@ form={{ variant: 'drawer', drawerWidth: '40rem' }}
546
565
 
547
566
  ## 主题系统
548
567
 
549
- 支持 15 个精选 DaisyUI 主题及 high-contrast 高对比、formal 直角商务主题。
568
+ 支持 15 个精选 DaisyUI 主题及 high-contrast 高对比、formal 直角商务、eye-care 暖绿护眼主题。
550
569
 
551
570
  ```typescript
552
571
  import { applyTheme, getCurrentTheme, getSavedTheme, isDarkTheme, THEMES, THEME_GROUPS } from '@h-ai/ui/theme'
@@ -660,6 +679,7 @@ AuthPanel 在 SSR 阶段禁用原生表单控件,客户端挂载并绑定事
660
679
  | `@h-ai/ui/auto-import` | Svelte 预处理器:组件自动导入 |
661
680
  | `@h-ai/ui/components/primitives/index` 等明确 barrel | 仅 package.exports 列出的组件目录;组件默认导出经 barrel 转发 |
662
681
  | `@h-ai/ui/components/primitives/index` | 公开原子组件目录入口,如 Button/Input |
682
+ | `@h-ai/ui/components/scenes/code/index` | `CodeWorkspace` 与代码工作区接入类型 |
663
683
  | `@h-ai/ui/styles/global.css` | 全局基础样式(重置/滚动条/焦点) |
664
684
  | `@h-ai/ui/styles/theme.css` | Tailwind v4 `@theme` Token |
665
685
  | `@h-ai/ui/styles/design-tokens.css`| CSS 自定义属性(间距/圆角/z-index) |
@@ -6,6 +6,8 @@
6
6
 
7
7
  ## 运行环境
8
8
 
9
+ pgvector 将集合 metric 持久保存在 vector 列注释,索引、info、search 使用同一值;重连后修改默认 metric 不改变已有集合。旧集合从实际索引恢复;缺少索引与有效注释时先恢复定义,不按当前默认值猜测。
10
+
9
11
  > ⚠️ **服务端模块(Node.js only)。** 浏览器端不直接操作向量数据库,通过 `@h-ai/ai` 的 API 端点间接使用(如 RAG 检索、知识库查询)。
10
12
 
11
13
  ## 适用场景
@@ -62,9 +64,12 @@ operationLog:
62
64
 
63
65
  ```typescript
64
66
  import { core } from '@h-ai/core'
65
- import { vecdb } from '@h-ai/vecdb'
67
+ import { vecdb, VecdbConfigSchema } from '@h-ai/vecdb'
66
68
 
67
- await vecdb.init(core.config.get('vecdb'))
69
+ const config = core.config.validate('vecdb', VecdbConfigSchema)
70
+ if (!config.success) throw new Error(config.error.message)
71
+ const initialized = await vecdb.init(config.data)
72
+ if (!initialized.success) throw new Error(initialized.error.message)
68
73
  // ... 使用向量数据库
69
74
  const closeResult = await vecdb.close()
70
75
  if (!closeResult.success) {
@@ -182,7 +187,7 @@ Chroma 直连 `url` 仅支持 HTTP(S) 根端点,优先于 `host/port`;URL
182
187
 
183
188
  直连初始化总截止为 5 秒,本地服务拉起使用 `startupTimeout`;超时中止候选 HTTP 请求。成功清除初始化 timer,不限制后续业务请求。
184
189
 
185
- Qdrant 使用 `@qdrant/js-client-rest 1.18.0`,仅支持未命名向量字段的 cosine/euclidean/dot;外部 named-vector/Manhattan 集合的 info/写入/搜索返回 CONFIG_ERROR,不猜测维度或 metric。Chroma 使用 `chromadb 3.5.0` 的真实类型及 metadata/filter 校验,非法输入返回操作错误,不丢弃过滤;content 可省略。各后端的 null 和复杂元数据语义不承诺统一。
190
+ Qdrant 使用原生 HTTP 固定 REST 端点,无额外 SDK 依赖;超时 30 秒覆盖完整响应体,响应超过 16 MiB 明确失败。仅支持未命名向量字段的 cosine/euclidean/dot;外部 named-vector/Manhattan 集合的 info/写入/搜索返回 CONFIG_ERROR,不猜测维度或 metric。Chroma 使用 `chromadb 3.5.0` 的真实类型及 metadata/filter 校验,非法输入返回操作错误,不丢弃过滤;content 可省略。各后端的 null 和复杂元数据语义不承诺统一。
186
191
 
187
192
  **VectorDocument**:
188
193