@h-ai/cli 0.1.0-alpha9 → 1.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +229 -0
- package/README.ja.md +229 -0
- package/README.md +175 -113
- package/dist/chunk-AKV2CQZV.js +1497 -0
- package/dist/chunk-AKV2CQZV.js.map +1 -0
- package/dist/chunk-EF7WOFWZ.js +7557 -0
- package/dist/chunk-EF7WOFWZ.js.map +1 -0
- package/dist/chunk-MUHRBJSW.js +29272 -0
- package/dist/chunk-MUHRBJSW.js.map +1 -0
- package/dist/chunk-ZSDEVXZ7.js +38 -0
- package/dist/{chunk-2H7UOFLK.js.map → chunk-ZSDEVXZ7.js.map} +1 -1
- package/dist/cli-config-templates-HHFHNXBN.js +5 -0
- package/dist/cli-config-templates-HHFHNXBN.js.map +1 -0
- package/dist/cli-skill-templates-PN4FLGBC.js +5 -0
- package/dist/cli-skill-templates-PN4FLGBC.js.map +1 -0
- package/dist/index.js +4444 -554
- package/dist/index.js.map +1 -1
- package/dist/metafile-esm.json +1 -0
- package/dist/src-TEBHR5I5.js +5 -0
- package/dist/src-TEBHR5I5.js.map +1 -0
- package/package.json +35 -15
- package/templates/README.md +56 -114
- package/templates/apps/admin/messages/en-US.json +7 -0
- package/templates/apps/admin/messages/ja-JP.json +40 -0
- package/templates/apps/admin/messages/zh-CN.json +7 -0
- package/templates/apps/admin/src/routes/+layout.svelte.hbs +65 -8
- package/templates/apps/admin/src/routes/+page.svelte.hbs +35 -14
- package/templates/apps/admin/src/routes/admin/+layout.svelte.hbs +54 -22
- package/templates/apps/admin/src/routes/admin/+page.svelte.hbs +33 -24
- package/templates/apps/admin/src/routes/admin/settings/+page.svelte.hbs +16 -13
- package/templates/apps/api/.dockerignore.hbs +25 -0
- package/templates/apps/api/.gitignore.hbs +22 -0
- package/templates/apps/api/.npmrc.hbs +1 -0
- package/templates/apps/api/apps/{{projectName}}-contract/README.md.hbs +39 -0
- package/templates/apps/api/apps/{{projectName}}-contract/package.json.hbs +41 -0
- package/templates/apps/api/apps/{{projectName}}-contract/src/app-contract.ts.hbs +27 -0
- package/templates/apps/api/apps/{{projectName}}-contract/src/app-schemas.ts.hbs +28 -0
- package/templates/apps/api/apps/{{projectName}}-contract/src/index.ts.hbs +5 -0
- package/templates/apps/api/apps/{{projectName}}-contract/src/{{projectName}}-contract.ts.hbs +16 -0
- package/templates/apps/api/apps/{{projectName}}-contract/tests/contract.test.ts.hbs +18 -0
- package/templates/apps/api/apps/{{projectName}}-contract/tsconfig.json.hbs +12 -0
- package/templates/apps/api/apps/{{projectName}}-contract/tsup.config.ts.hbs +11 -0
- package/templates/apps/api/apps/{{projectName}}-contract/vitest.config.ts.hbs +9 -0
- package/templates/apps/api/apps/{{projectName}}-serv/README.md.hbs +60 -0
- package/templates/apps/api/apps/{{projectName}}-serv/config/_core.yml.hbs +17 -0
- package/templates/apps/api/apps/{{projectName}}-serv/config/_serv.yml.hbs +54 -0
- package/templates/apps/api/apps/{{projectName}}-serv/data/.gitkeep.hbs +1 -0
- package/templates/apps/api/apps/{{projectName}}-serv/package.json.hbs +66 -0
- package/templates/apps/api/apps/{{projectName}}-serv/src/app.ts.hbs +119 -0
- package/templates/apps/api/apps/{{projectName}}-serv/src/build-metadata.ts.hbs +7 -0
- package/templates/apps/api/apps/{{projectName}}-serv/src/index.ts.hbs +41 -0
- package/templates/apps/api/apps/{{projectName}}-serv/src/lib/server/init.ts.hbs +165 -0
- package/templates/apps/api/apps/{{projectName}}-serv/src/server/procedures/app-procedures.ts.hbs +57 -0
- package/templates/apps/api/apps/{{projectName}}-serv/src/server/procedures/index.ts.hbs +41 -0
- package/templates/apps/api/apps/{{projectName}}-serv/tests/service.test.ts.hbs +176 -0
- package/templates/apps/api/apps/{{projectName}}-serv/tsconfig.json.hbs +16 -0
- package/templates/apps/api/apps/{{projectName}}-serv/tsup.config.ts.hbs +20 -0
- package/templates/apps/api/apps/{{projectName}}-serv/vitest.config.ts.hbs +12 -0
- package/templates/apps/api/e2e/api-serv.spec.ts.hbs +113 -0
- package/templates/apps/api/e2e/capture-evidence.ts.hbs +23 -0
- package/templates/apps/api/eslint.config.js.hbs +30 -0
- package/templates/apps/api/hai.json.hbs +4 -0
- package/templates/apps/api/images/serv.Dockerfile.hbs +37 -0
- package/templates/apps/api/package.json.hbs +53 -0
- package/templates/apps/api/playwright.config.ts.hbs +67 -0
- package/templates/apps/api/pnpm-workspace.yaml.hbs +40 -0
- package/templates/apps/api/tsconfig.base.json +14 -0
- package/templates/apps/fullstack/.dockerignore.hbs +25 -0
- package/templates/apps/fullstack/.gitignore.hbs +38 -0
- package/templates/apps/fullstack/.npmrc.hbs +1 -0
- package/templates/apps/fullstack/apps/{{projectName}}-app/.env.example.hbs +10 -0
- package/templates/apps/fullstack/apps/{{projectName}}-app/README.md.hbs +67 -0
- package/templates/apps/fullstack/apps/{{projectName}}-app/capacitor.config.ts.hbs +20 -0
- package/templates/apps/fullstack/apps/{{projectName}}-app/eslint.config.js.hbs +20 -0
- package/templates/apps/fullstack/apps/{{projectName}}-app/index.html.hbs +22 -0
- package/templates/apps/fullstack/apps/{{projectName}}-app/messages/en-US.json.hbs +7 -0
- package/templates/apps/fullstack/apps/{{projectName}}-app/messages/ja-JP.json.hbs +7 -0
- package/templates/apps/fullstack/apps/{{projectName}}-app/messages/zh-CN.json.hbs +7 -0
- package/templates/apps/fullstack/apps/{{projectName}}-app/package.json.hbs +86 -0
- package/templates/apps/fullstack/apps/{{projectName}}-app/project.inlang/settings.json.hbs +17 -0
- package/templates/apps/fullstack/apps/{{projectName}}-app/public/runtime-config.js.hbs +4 -0
- package/templates/apps/fullstack/apps/{{projectName}}-app/src/App.svelte.hbs +59 -0
- package/templates/apps/fullstack/apps/{{projectName}}-app/src/app.css.hbs +20 -0
- package/templates/apps/fullstack/apps/{{projectName}}-app/src/app.d.ts.hbs +8 -0
- package/templates/apps/fullstack/apps/{{projectName}}-app/src/build-metadata.ts.hbs +9 -0
- package/templates/apps/fullstack/apps/{{projectName}}-app/src/lib/capacitor.ts.hbs +19 -0
- package/templates/apps/fullstack/apps/{{projectName}}-app/src/main.ts.hbs +21 -0
- package/templates/apps/fullstack/apps/{{projectName}}-app/svelte.config.js.hbs +16 -0
- package/templates/apps/fullstack/apps/{{projectName}}-app/tsconfig.json.hbs +23 -0
- package/templates/apps/fullstack/apps/{{projectName}}-app/vite.config.ts.hbs +74 -0
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/.env.example.hbs +6 -0
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/README.md.hbs +64 -0
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/eslint.config.js.hbs +20 -0
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/index.html.hbs +20 -0
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/messages/en-US.json.hbs +7 -0
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/messages/ja-JP.json.hbs +7 -0
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/messages/zh-CN.json.hbs +7 -0
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/package.json.hbs +66 -0
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/project.inlang/settings.json.hbs +17 -0
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/src/App.svelte.hbs +25 -0
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/src/app.css.hbs +18 -0
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/src/app.d.ts.hbs +8 -0
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/src/build-metadata.ts.hbs +9 -0
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/src/main.ts.hbs +20 -0
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/Cargo.toml.hbs +33 -0
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/build.rs.hbs +6 -0
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/capabilities/default.json.hbs +16 -0
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/icons/128x128.png +0 -0
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/icons/128x128@2x.png +0 -0
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/icons/32x32.png +0 -0
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/icons/icon.icns +0 -0
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/icons/icon.ico +0 -0
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/src/lib.rs.hbs +91 -0
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/src/main.rs.hbs +8 -0
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/tauri.conf.json.hbs +46 -0
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/svelte.config.js.hbs +14 -0
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/tsconfig.json.hbs +22 -0
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/vite.config.ts.hbs +89 -0
- package/templates/apps/fullstack/apps/{{projectName}}-miniapp/README.md.hbs +25 -0
- package/templates/apps/fullstack/apps/{{projectName}}-miniapp/messages/en-US.json.hbs +12 -0
- package/templates/apps/fullstack/apps/{{projectName}}-miniapp/messages/ja-JP.json.hbs +12 -0
- package/templates/apps/fullstack/apps/{{projectName}}-miniapp/messages/zh-CN.json.hbs +12 -0
- package/templates/apps/fullstack/apps/{{projectName}}-miniapp/project.inlang/settings.json.hbs +17 -0
- package/templates/apps/fullstack/apps/{{projectName}}-web/README.md.hbs +54 -0
- package/templates/apps/fullstack/apps/{{projectName}}-web/eslint.config.js.hbs +20 -0
- package/templates/apps/fullstack/apps/{{projectName}}-web/index.html.hbs +21 -0
- package/templates/apps/fullstack/apps/{{projectName}}-web/messages/en-US.json.hbs +7 -0
- package/templates/apps/fullstack/apps/{{projectName}}-web/messages/ja-JP.json.hbs +7 -0
- package/templates/apps/fullstack/apps/{{projectName}}-web/messages/zh-CN.json.hbs +7 -0
- package/templates/apps/fullstack/apps/{{projectName}}-web/package.json.hbs +53 -0
- package/templates/apps/fullstack/apps/{{projectName}}-web/project.inlang/settings.json.hbs +17 -0
- package/templates/apps/fullstack/apps/{{projectName}}-web/public/runtime-config.js.hbs +1 -0
- package/templates/apps/fullstack/apps/{{projectName}}-web/src/App.svelte.hbs +18 -0
- package/templates/apps/fullstack/apps/{{projectName}}-web/src/app.css.hbs +18 -0
- package/templates/apps/fullstack/apps/{{projectName}}-web/src/app.d.ts.hbs +8 -0
- package/templates/apps/fullstack/apps/{{projectName}}-web/src/build-metadata.ts.hbs +9 -0
- package/templates/apps/fullstack/apps/{{projectName}}-web/src/main.ts.hbs +14 -0
- package/templates/apps/fullstack/apps/{{projectName}}-web/svelte.config.js.hbs +16 -0
- package/templates/apps/fullstack/apps/{{projectName}}-web/tsconfig.json.hbs +23 -0
- package/templates/apps/fullstack/apps/{{projectName}}-web/vite.config.ts.hbs +76 -0
- package/templates/apps/fullstack/docs/security-configuration.md.hbs +349 -0
- package/templates/apps/fullstack/e2e/fullstack.spec.ts.hbs +988 -0
- package/templates/apps/fullstack/e2e/session-close.spec.ts.hbs +119 -0
- package/templates/apps/fullstack/eslint.config.js.hbs +41 -0
- package/templates/apps/fullstack/hai.json.hbs +11 -0
- package/templates/apps/fullstack/images/serv.Dockerfile.hbs +38 -0
- package/templates/apps/fullstack/images/web/19-runtime-config.envsh.hbs +5 -0
- package/templates/apps/fullstack/images/web/nginx.conf.hbs +24 -0
- package/templates/apps/fullstack/images/web/runtime-config.js.template.hbs +3 -0
- package/templates/apps/fullstack/images/web.Dockerfile.hbs +37 -0
- package/templates/apps/fullstack/package.json.hbs +61 -0
- package/templates/apps/fullstack/packages/{{projectName}}-contract/README.md.hbs +40 -0
- package/templates/apps/fullstack/packages/{{projectName}}-contract/package.json.hbs +30 -0
- package/templates/apps/fullstack/packages/{{projectName}}-contract/src/admin-contract.ts.hbs +78 -0
- package/templates/apps/fullstack/packages/{{projectName}}-contract/src/admin-schemas.ts.hbs +134 -0
- package/templates/apps/fullstack/packages/{{projectName}}-contract/src/app-contract.ts.hbs +20 -0
- package/templates/apps/fullstack/packages/{{projectName}}-contract/src/app-schemas.ts.hbs +35 -0
- package/templates/apps/fullstack/packages/{{projectName}}-contract/src/index.ts.hbs +7 -0
- package/templates/apps/fullstack/packages/{{projectName}}-contract/src/{{projectName}}-contract.ts.hbs +23 -0
- package/templates/apps/fullstack/packages/{{projectName}}-contract/tests/contract.test.ts.hbs +31 -0
- package/templates/apps/fullstack/packages/{{projectName}}-contract/tsconfig.json.hbs +9 -0
- package/templates/apps/fullstack/packages/{{projectName}}-contract/tsup.config.ts.hbs +9 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/README.md.hbs +84 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_ai.yml.hbs +1 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_audit.yml.hbs +1 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_cache.yml.hbs +1 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_core.yml.hbs +22 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_db.yml.hbs +1 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_feedback.yml.hbs +1 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_iam.yml.hbs +1 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_payment.yml.hbs +1 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_reach.yml.hbs +60 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_scheduler.yml.hbs +1 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_serv.yml.hbs +64 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_storage.yml.hbs +1 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_vecdb.yml.hbs +1 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/data/.gitkeep.hbs +1 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/package.json.hbs +62 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/src/app-server.ts.hbs +115 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/src/build-metadata.ts.hbs +7 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/src/index.ts.hbs +40 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/admin-service.ts.hbs +294 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/audit-jobs.ts.hbs +28 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/business-settings.ts.hbs +50 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/messages.ts.hbs +50 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/procedures/admin-procedures.ts.hbs +106 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/procedures/app-procedures.ts.hbs +49 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/procedures/index.ts.hbs +34 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/runtime.ts.hbs +159 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/security-roles.ts.hbs +73 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/tests/app-server.test.ts.hbs +505 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/tests/runtime.test.ts.hbs +72 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/tests/security.test.ts.hbs +183 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/tsconfig.json.hbs +10 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/tsup.config.ts.hbs +18 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/vitest.config.ts.hbs +12 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/.gitignore.hbs +10 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/README.md.hbs +97 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/messages/en-US.json.hbs +164 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/messages/ja-JP.json.hbs +164 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/messages/zh-CN.json.hbs +164 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/package.json.hbs +55 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/project.inlang/settings.json.hbs +11 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/index.ts.hbs +7 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/api/api-client.ts.hbs +94 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/api/feedback-client.ts.hbs +36 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/api/sensitive-actions.svelte.ts.hbs +16 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/api/session-recovery.svelte.ts.hbs +4 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/components/AdminWorkspace.svelte.hbs +122 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/components/AppShell.svelte.hbs +90 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/components/FeedbackEntry.svelte.hbs +86 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/pages/audit.svelte.hbs +94 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/pages/configuration.svelte.hbs +25 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/pages/feedback.svelte.hbs +157 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/pages/roles.svelte.hbs +77 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/pages/settings.svelte.hbs +44 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/pages/users.svelte.hbs +216 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/security/role-label.ts.hbs +12 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/stores/guide-store.ts.hbs +55 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/stores/management-store.svelte.ts.hbs +614 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/stores/theme-store.svelte.ts.hbs +23 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/svelte.config.js.hbs +1 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/tests/api-client.test.ts.hbs +150 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/tests/management-store.test.ts.hbs +253 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/tsconfig.json.hbs +17 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/vitest.config.ts.hbs +7 -0
- package/templates/apps/fullstack/playwright.config.ts.hbs +114 -0
- package/templates/apps/fullstack/playwright.session-close.config.ts.hbs +18 -0
- package/templates/apps/fullstack/pnpm-workspace.yaml.hbs +38 -0
- package/templates/apps/fullstack/tsconfig.base.json +14 -0
- package/templates/apps/h5/messages/en-US.json +3 -0
- package/templates/apps/h5/messages/ja-JP.json +40 -0
- package/templates/apps/h5/messages/zh-CN.json +3 -0
- package/templates/apps/h5/src/routes/+layout.svelte.hbs +85 -30
- package/templates/apps/h5/src/routes/+page.svelte.hbs +20 -8
- package/templates/apps/h5/src/routes/discover/+page.svelte.hbs +17 -6
- package/templates/apps/h5/src/routes/profile/+page.svelte.hbs +17 -6
- package/templates/apps/mobile-app/.env.hbs +3 -0
- package/templates/apps/{android-app → mobile-app}/capacitor.config.ts.hbs +2 -2
- package/templates/apps/mobile-app/index.html.hbs +14 -0
- package/templates/apps/mobile-app/messages/en-US.json +36 -0
- package/templates/apps/mobile-app/messages/ja-JP.json +36 -0
- package/templates/apps/mobile-app/messages/zh-CN.json +36 -0
- package/templates/apps/mobile-app/public/runtime-config.js +1 -0
- package/templates/apps/mobile-app/src/App.svelte.hbs +153 -0
- package/templates/apps/mobile-app/src/lib/api.ts.hbs +213 -0
- package/templates/apps/mobile-app/src/lib/app-config.ts.hbs +14 -0
- package/templates/apps/{android-app → mobile-app}/src/lib/capacitor.ts +6 -7
- package/templates/apps/mobile-app/src/lib/pages/home.svelte.hbs +58 -0
- package/templates/apps/mobile-app/src/lib/pages/profile.svelte.hbs +13 -0
- package/templates/apps/mobile-app/src/lib/pages/tasks.svelte.hbs +16 -0
- package/templates/apps/mobile-app/src/main.ts.hbs +11 -0
- package/templates/apps/website/messages/en-US.json +4 -2
- package/templates/apps/website/messages/ja-JP.json +34 -0
- package/templates/apps/website/messages/zh-CN.json +4 -2
- package/templates/apps/website/scripts/static-website.mjs.hbs +67 -0
- package/templates/apps/website/src/routes/+layout.svelte.hbs +77 -26
- package/templates/apps/website/src/routes/+layout.ts +3 -0
- package/templates/apps/website/src/routes/+page.svelte.hbs +31 -12
- package/templates/apps/website/src/routes/about/+page.svelte.hbs +11 -6
- package/templates/apps/website/src/routes/api/health/+server.ts +3 -0
- package/templates/apps/website/src/routes/contact/+page.svelte.hbs +44 -34
- package/templates/apps/website/src/routes/services/+page.svelte.hbs +27 -40
- package/templates/base/.dockerignore.hbs +27 -0
- package/templates/base/.gitignore.hbs +41 -0
- package/templates/base/.npmrc.hbs +1 -0
- package/templates/base/e2e/app.spec.ts.hbs +213 -0
- package/templates/base/e2e/helpers.ts +1 -1
- package/templates/base/eslint-rules.js +45 -0
- package/templates/base/eslint.config.js.hbs +34 -0
- package/templates/base/hai.json.hbs +4 -0
- package/templates/base/images/web/nginx.conf.hbs +24 -0
- package/templates/base/images/web.Dockerfile.hbs +72 -0
- package/templates/base/package.json.hbs +125 -49
- package/templates/base/playwright.config.ts +44 -6
- package/templates/base/pnpm-workspace.yaml.hbs +40 -0
- package/templates/base/src/app.css.hbs +40 -0
- package/templates/base/src/app.d.ts.hbs +14 -1
- package/templates/base/src/app.html.hbs +13 -0
- package/templates/base/src/hooks.server.ts.hbs +115 -43
- package/templates/base/src/lib/build-metadata.ts.hbs +7 -0
- package/templates/base/src/lib/server/init.ts.hbs +125 -152
- package/templates/base/src/lib/server/kit-config.ts.hbs +40 -0
- package/templates/base/src/routes/+layout.server.ts.hbs +35 -0
- package/templates/base/static/favicon.png +0 -0
- package/templates/base/svelte.config.js.hbs +84 -5
- package/templates/base/tests/scaffold.test.ts.hbs +102 -0
- package/templates/base/tsconfig.json.hbs +50 -0
- package/templates/base/vite.config.ts.hbs +117 -12
- package/templates/base/vitest.config.ts.hbs +19 -0
- package/templates/features/ai/routes/api/chat/+server.ts +6 -7
- package/templates/features/iam/routes-admin/(auth)/+layout.svelte.hbs +3 -17
- package/templates/features/iam/routes-admin/(auth)/auth/forgot-password/+page.svelte.hbs +10 -0
- package/templates/features/iam/routes-admin/(auth)/auth/login/+page.svelte.hbs +9 -96
- package/templates/features/iam/routes-admin/(auth)/auth/register/+page.svelte.hbs +9 -122
- package/templates/features/iam/routes-admin/(auth)/auth/reset-password/+page.svelte.hbs +10 -0
- package/templates/features/iam/routes-h5/auth/forgot-password/+page.svelte.hbs +10 -0
- package/templates/features/iam/routes-h5/auth/login/+page.svelte.hbs +9 -96
- package/templates/features/iam/routes-h5/auth/register/+page.svelte.hbs +9 -112
- package/templates/features/iam/routes-h5/auth/reset-password/+page.svelte.hbs +10 -0
- package/templates/features/iam/routes-shared/api/auth/captcha/+server.ts.hbs +4 -0
- package/templates/features/iam/routes-shared/api/auth/config/+server.ts +4 -0
- package/templates/features/iam/routes-shared/api/auth/login/+server.ts +1 -29
- package/templates/features/iam/routes-shared/api/auth/login/ldap/+server.ts +4 -0
- package/templates/features/iam/routes-shared/api/auth/login/otp/+server.ts +4 -0
- package/templates/features/iam/routes-shared/api/auth/logout/+server.ts +13 -6
- package/templates/features/iam/routes-shared/api/auth/otp/send/+server.ts +4 -0
- package/templates/features/iam/routes-shared/api/auth/password/renew/+server.ts +5 -0
- package/templates/features/iam/routes-shared/api/auth/password-reset/confirm/+server.ts +4 -0
- package/templates/features/iam/routes-shared/api/auth/password-reset/request/+server.ts +4 -0
- package/templates/features/iam/routes-shared/api/auth/reauthenticate/+server.ts +5 -0
- package/templates/features/iam/routes-shared/api/auth/register/+server.ts +1 -23
- package/templates/features/iam/routes-shared/api/auth/session/close/+server.ts.hbs +4 -0
- package/templates/features/iam/routes-website/auth/forgot-password/+page.svelte.hbs +10 -0
- package/templates/features/iam/routes-website/auth/login/+page.svelte.hbs +11 -0
- package/templates/features/iam/routes-website/auth/register/+page.svelte.hbs +11 -0
- package/templates/features/iam/routes-website/auth/reset-password/+page.svelte.hbs +10 -0
- package/templates/features/payment/routes/api/v1/payment/create/+server.ts +25 -23
- package/templates/features/payment/routes/api/v1/payment/notify/[provider]/+server.ts +5 -2
- package/templates/features/storage/routes/api/upload/+server.ts +10 -8
- package/templates/i18n/project.inlang/settings.json +2 -2
- package/templates/shared/.gitattributes +11 -0
- package/templates/shared/build-metadata.ts +42 -0
- package/templates/shared/container-runtime-config.sh +30 -0
- package/templates/shared/e2e-env.ts +98 -0
- package/templates/shared/hash-router.svelte.ts +83 -0
- package/templates/shared/public-base-path.mjs +19 -0
- package/templates/shared/run-e2e.mjs +104 -0
- package/templates/shared/vite-runtime-config.ts +56 -0
- package/templates/skills/AGENTS.md +75 -16
- package/templates/skills/CLAUDE.md +0 -11
- package/templates/skills/bridges/admin/AGENTS.md +89 -0
- package/templates/skills/bridges/api/AGENTS.md +83 -0
- package/templates/skills/bridges/fullstack/AGENTS.md.hbs +102 -0
- package/templates/skills/bridges/h5/AGENTS.md +88 -0
- package/templates/skills/bridges/mobile-app/AGENTS.md +100 -0
- package/templates/skills/bridges/website/AGENTS.md +88 -0
- package/templates/skills/copilot-instructions.md +3 -59
- package/templates/skills/hai-ai/SKILL.md +44 -715
- package/templates/skills/hai-ai/guide.md +457 -0
- package/templates/skills/hai-ai/reference.md +292 -0
- package/templates/skills/hai-api-client/SKILL.md +26 -339
- package/templates/skills/hai-api-client/reference.md +180 -0
- package/templates/skills/hai-api-contract/SKILL.md +36 -0
- package/templates/skills/hai-api-contract/reference.md +280 -0
- package/templates/skills/hai-app-create/SKILL.md +38 -351
- package/templates/skills/hai-app-create/collaboration.md +52 -0
- package/templates/skills/hai-app-create/development.md +243 -0
- package/templates/skills/hai-app-create/reference.md +376 -0
- package/templates/skills/hai-app-review/SKILL.md +57 -126
- package/templates/skills/hai-app-review/differential.md +34 -0
- package/templates/skills/hai-app-tests/SKILL.md +34 -454
- package/templates/skills/hai-app-tests/reference.md +462 -0
- package/templates/skills/hai-app-tests/validation.md +42 -0
- package/templates/skills/hai-audit/SKILL.md +37 -122
- package/templates/skills/hai-audit/reference.md +184 -0
- package/templates/skills/hai-build/SKILL.md +62 -315
- package/templates/skills/hai-build/paths.md +30 -0
- package/templates/skills/hai-build/reference.md +353 -0
- package/templates/skills/hai-cache/SKILL.md +26 -175
- package/templates/skills/hai-cache/reference.md +229 -0
- package/templates/skills/hai-capacitor/SKILL.md +24 -364
- package/templates/skills/hai-capacitor/reference.md +358 -0
- package/templates/skills/hai-change-plan/SKILL.md +46 -0
- package/templates/skills/hai-ci/SKILL.md +114 -0
- package/templates/skills/hai-core/SKILL.md +31 -469
- package/templates/skills/hai-core/reference.md +557 -0
- package/templates/skills/hai-core/request-access.md +65 -0
- package/templates/skills/hai-crypto/SKILL.md +29 -180
- package/templates/skills/hai-crypto/reference.md +317 -0
- package/templates/skills/hai-datapipe/SKILL.md +24 -207
- package/templates/skills/hai-datapipe/reference.md +204 -0
- package/templates/skills/hai-deploy/SKILL.md +53 -178
- package/templates/skills/hai-deploy/credentials.md +19 -0
- package/templates/skills/hai-deploy/middleware.md +129 -0
- package/templates/skills/hai-feedback/SKILL.md +85 -0
- package/templates/skills/hai-framework-sync/SKILL.md +105 -0
- package/templates/skills/hai-framework-sync/sync.md +49 -0
- package/templates/skills/hai-iam/SKILL.md +53 -325
- package/templates/skills/hai-iam/reference.md +535 -0
- package/templates/skills/hai-kit/SKILL.md +33 -329
- package/templates/skills/hai-kit/reference.md +202 -0
- package/templates/skills/hai-payment/SKILL.md +28 -262
- package/templates/skills/hai-payment/reference.md +295 -0
- package/templates/skills/hai-pr-review/SKILL.md +41 -0
- package/templates/skills/hai-reach/SKILL.md +28 -300
- package/templates/skills/hai-reach/reference.md +363 -0
- package/templates/skills/hai-reldb/SKILL.md +28 -449
- package/templates/skills/hai-reldb/reference.md +500 -0
- package/templates/skills/hai-scheduler/SKILL.md +26 -174
- package/templates/skills/hai-scheduler/reference.md +216 -0
- package/templates/skills/hai-serv/SKILL.md +60 -0
- package/templates/skills/hai-serv/reference.md +792 -0
- package/templates/skills/hai-spec-implement/SKILL.md +50 -0
- package/templates/skills/hai-spec-implement/changes.md +67 -0
- package/templates/skills/hai-spec-implement/evaluation.md +18 -0
- package/templates/skills/hai-spec-implement/handoff.md +47 -0
- package/templates/skills/hai-spec-implement/templates.md +117 -0
- package/templates/skills/hai-spec-implement/workflow.md +56 -0
- package/templates/skills/hai-spec-review/SKILL.md +57 -0
- package/templates/skills/hai-spec-review/checklist.md +71 -0
- package/templates/skills/hai-storage/SKILL.md +31 -262
- package/templates/skills/hai-storage/reference.md +284 -0
- package/templates/skills/hai-ui/SKILL.md +62 -238
- package/templates/skills/hai-ui/guide.md +81 -0
- package/templates/skills/hai-ui/reference.md +705 -0
- package/templates/skills/hai-ui-design/SKILL.md +31 -0
- package/templates/skills/hai-ui-design/patterns.md +31 -0
- package/templates/skills/hai-ui-review/SKILL.md +32 -0
- package/templates/skills/hai-ui-review/checklist.md +29 -0
- package/templates/skills/hai-vecdb/SKILL.md +25 -267
- package/templates/skills/hai-vecdb/reference.md +325 -0
- package/templates/skills/opencode.json +0 -5
- package/dist/chunk-2H7UOFLK.js +0 -10
- package/dist/chunk-LANIDJC7.js +0 -659
- package/dist/chunk-LANIDJC7.js.map +0 -1
- package/dist/chunk-YV7WPUI6.js +0 -206
- package/dist/chunk-YV7WPUI6.js.map +0 -1
- package/dist/config-templates-S5RI2MC6.js +0 -5
- package/dist/config-templates-S5RI2MC6.js.map +0 -1
- package/dist/skill-templates-N5DU5FNX.js +0 -5
- package/dist/skill-templates-N5DU5FNX.js.map +0 -1
- package/dist/src-XJ6YXNAF.js +0 -15030
- package/dist/src-XJ6YXNAF.js.map +0 -1
- package/templates/apps/android-app/.env.hbs +0 -3
- package/templates/apps/android-app/messages/en-US.json +0 -24
- package/templates/apps/android-app/messages/zh-CN.json +0 -24
- package/templates/apps/android-app/src/lib/api.ts.hbs +0 -30
- package/templates/apps/android-app/src/routes/+layout.svelte.hbs +0 -42
- package/templates/apps/android-app/src/routes/+layout.ts +0 -7
- package/templates/apps/android-app/src/routes/+page.svelte.hbs +0 -27
- package/templates/apps/api/src/routes/+layout.svelte +0 -14
- package/templates/apps/api/src/routes/+page.svelte +0 -11
- package/templates/apps/api/src/routes/api/v1/health/+server.ts +0 -14
- package/templates/apps/api/src/routes/api/v1/items/+server.ts +0 -37
- package/templates/apps/api/src/routes/api/v1/items/[id]/+server.ts +0 -30
- package/templates/base/src/app.css +0 -2
- package/templates/base/tsconfig.json +0 -8
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hai-ui-design
|
|
3
|
+
description: "为 Hai 前端的新页面、业务流程或较大改版制定信息结构、交互状态、视觉约定和组件方案;实现用 hai-ui,现有界面审查用 hai-ui-review。"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# hai-ui-design
|
|
7
|
+
|
|
8
|
+
## 能力契约
|
|
9
|
+
|
|
10
|
+
| 项目 | 契约 |
|
|
11
|
+
| --- | --- |
|
|
12
|
+
| 能力 | 把用户目标转为适配当前 Hai 组件、主题与平台的页面设计 |
|
|
13
|
+
| 适用场景 | 新页面、新业务流程、信息结构/布局调整或建立应用视觉约定 |
|
|
14
|
+
| 输入 | 用户任务、需求/验收、目标端、当前页面、组件公开类型和已有品牌/设计规则 |
|
|
15
|
+
| 输出 | 页面结构、状态与交互、组件映射、必要的全局/页面设计约定和可观察验收 |
|
|
16
|
+
| 限制 | 方案请求停在设计;已有实现授权时继续交给 hai-app-create / hai-ui。设计不能补定权限等未决业务规则,组件 API 以实际版本为准。 |
|
|
17
|
+
|
|
18
|
+
## 设计路径
|
|
19
|
+
|
|
20
|
+
1. 读取项目入口、需求、实际页面和已有设计,确认目标是新建、局部优化还是整体改版。复用已确认材料;仅澄清会影响用户任务的实质缺口,普通实施细节沿已有授权继续。
|
|
21
|
+
2. 确认本页面的主要任务:后台/编辑器重视扫描、操作和状态;官网重视内容表达与行动;文档/帮助重视阅读;作品展示由内容主导。同一个应用的不同页面可有不同任务,不能把营销式大留白强加给高密度操作界面。
|
|
22
|
+
3. 按 [页面模式与决策](patterns.md) 选择信息结构:主操作、导航、筛选、内容、详情和反馈。列出初始、加载、空态、错误、成功、无权限及实际需要的长任务/取消/重试状态。
|
|
23
|
+
4. 检查安装版本 exports/types 和已有应用实现,按场景 → 组合 → 原子选择 [hai-ui](../hai-ui/SKILL.md) 组件。明确业务负责的数据、鉴权和回调;真实缺口才增加应用组件或提出公共组件改进,不编造 Props。
|
|
24
|
+
5. 把设计落到现有 DaisyUI 语义色、Hai tokens、字体层级、间距、密度和布局。保留本次范围适用的品牌、字体和颜色选择;允许业务主题覆盖,组件内不散落新的色值体系。窄抽屉按容器宽度调整,表格滚动由自身承接。
|
|
25
|
+
6. 用“角色/操作 → 可观察结果”写验收,包含目标尺寸、语言/主题、长内容、键盘/触摸、减少动态效果和适用失败恢复。实现后交给 [hai-ui-review](../hai-ui-review/SKILL.md) 查看真实渲染与行为,必要时修订设计记录。
|
|
26
|
+
|
|
27
|
+
## 设计记录
|
|
28
|
+
|
|
29
|
+
沿用项目已有设计文件。小任务在任务记录或方案中说明即可;跨页面共用规则确实需要持久维护时使用一份 `.agents/instructions/ui-design.md`(或项目既定位置)。记录用户/任务、目标端、主题/token 对应、布局/密度、组件、交互和验收;页面仅记录差异,避免复制需求或整份组件 API。
|
|
30
|
+
|
|
31
|
+
前端工作与 SDD 通过 [交接契约](../hai-spec-implement/handoff.md) 传递范围和验收。设计来源可参考 [UI/UX Pro Max](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill) 的场景匹配与全局/页面分层,以及 [Impeccable](https://github.com/pbakaus/impeccable) 的任务模式;所有建议须经现有产品、平台和真实组件核验。
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# 页面模式与设计决策
|
|
2
|
+
|
|
3
|
+
本文件用于选择布局和交互,组件签名仍从当前版本公开类型确认。先看业务应用已有页面与组件展厅,再选择下面的模式;示例中的业务数据、文案和回调由应用提供。
|
|
4
|
+
|
|
5
|
+
| 场景 | 优先组件 | 设计决策与验收 |
|
|
6
|
+
| --- | --- | --- |
|
|
7
|
+
| 列表、搜索、详情和编辑 | CrudPage;需要自定义编排时 DataTable、TableToolbar、Pagination | 标题/统计与搜索/操作分组;明确筛选后的空态和请求失败;窄屏允许表格内部滚动;排序状态、分页、返回位置可感知 |
|
|
8
|
+
| 数据录入、设置、资料 | Form 或原生 form + FormLayout、FormField、现有输入组件 | 关联字段分组,明确必填和单位;输入后失焦/提交显示错误,修正更新;自动/显式跨列;失败保留输入,重复提交策略按真实业务 |
|
|
9
|
+
| 详情、确认、短流程 | Drawer、Modal、Confirm、Steps | 根据内容长度与前后文选择;标题、正文、操作区清楚;正文独立滚动,确认操作可见;焦点进入与关闭返回;保留输入与危险操作规则明确 |
|
|
10
|
+
| 多区域导航、移动端 | PageHeader、Breadcrumb、Tabs、AppBar、BottomNav、SafeArea | 导航名称对应真实任务;页签与路由导航分清;方向键和禁用项处理;移动端安全区域、触摸、返回与深链符合当前宿主 |
|
|
11
|
+
| 加载、无结果、失败和完成 | Skeleton、Empty、Result、ToastContainer,Alert仅用于info/success | 区分“没有数据”“筛选无匹配”“请求失败”“无权限”;警告和错误经Toast提示,页面保留恢复动作与状态占位,不另放行内错误段落或Alert |
|
|
12
|
+
| 上传与长任务 | 现有 storage 场景组件、进度与状态组件 | 大小/类型限制与服务端一致;区分上传、处理、完成和失败;取消/重试按幂等契约;真实外部效果未知时不能显示完成 |
|
|
13
|
+
| AI 对话、Markdown、代码和图表 | 已导出的 AI/图表场景组件 | 控制正文阅读宽度,代码/表格内部滚动;明确流式/加载/失败;渲染不可信内容走安全边界;图表图例、单位、色彩外的信息和文本摘要可读 |
|
|
14
|
+
| 官网与帮助 | 现有布局、内容与 guide 能力 | 官网按内容与行动组织层级,帮助按问题和步骤组织;使用真实文案/素材,语言展开和阅读宽度适合目标端 |
|
|
15
|
+
|
|
16
|
+
## 后台页面默认约束
|
|
17
|
+
|
|
18
|
+
- 后台与工作台优先使用 WorkspaceLayout 统一紧凑顶栏、内容内边距和可选页脚,不叠加大段上下 padding。导航已显示页面标题时,内容区不再重复;PageHeader 与 SettingsLayout 保留说明/操作,CrudPage 将操作放入工具栏。独立页面或真实子区域保留必要标题。
|
|
19
|
+
- 多条件筛选使用 FilterBar 或 CrudFilterBar,默认收起扩展条件,搜索/查询/重置保持可用;提供 activeCount 和实际 onreset,收起不能丢值或隐式清空查询。复用组件状态及三语文案,不在页面复制折叠状态机。TableToolbar 已有弹层筛选可继续复用。
|
|
20
|
+
|
|
21
|
+
## 视觉约定如何落到实现
|
|
22
|
+
|
|
23
|
+
- 语义色用 `base-*`、`primary`、`success`、`warning`、`error` 等当前主题变量,焦点沿 `--hai-focus-color`;使用已编译主题白名单与公开 theme 工具。
|
|
24
|
+
- 共享间距、圆角、动效、触摸区域沿 theme/design tokens;表格使用现有 `density`。调整密度以任务和目标设备为依据,不为每个组件新增同名配置。
|
|
25
|
+
- 标题、说明、字段标签、数值、状态有明确层级;后台外壳使用可用宽度,正文保留阅读宽度。flex/grid 子项考虑 `min-width: 0`;长链接/标识符可换行,代码可内部滚动。
|
|
26
|
+
- 操作优先级按业务决定;按钮文案说明动作,图标按钮有可访问名称。关键操作不只依赖颜色或 hover。
|
|
27
|
+
- 动效说明变化或空间关系,尊重 `prefers-reduced-motion`。新动效的加载、取消和最终状态都要可验证。
|
|
28
|
+
|
|
29
|
+
## 页面方案最小示例
|
|
30
|
+
|
|
31
|
+
“成员列表”沿现有 CrudPage 实现:用户任务是查找成员、查看详情和修改获授权字段。导航中保留页面标题,内容区只放必要说明/数量与主要操作,扩展筛选默认可收起,排序放工具栏,表格使用现有 density;窄屏内部滚动。记录初次加载、请求失败重试、无成员、筛选无结果、提交失败保留输入和缺权限状态。验收覆盖操作后的真实数据、键盘排序/页签、390px 手机、1440px 桌面、英文长名称和明暗主题。具体字段/权限来自业务需求,不从组件示例推断。
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hai-ui-review
|
|
3
|
+
description: "审查实际 Hai 界面的布局、信息层级、交互、响应式、可访问性和异常恢复;只读评审与已有授权的修复复测均适用。"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# hai-ui-review
|
|
7
|
+
|
|
8
|
+
## 能力契约
|
|
9
|
+
|
|
10
|
+
| 项目 | 契约 |
|
|
11
|
+
| --- | --- |
|
|
12
|
+
| 能力 | 根据用户任务与真实渲染检查界面体验和技术质量 |
|
|
13
|
+
| 适用场景 | 界面走查、前端改动自查、布局/交互评审与已授权修复验收 |
|
|
14
|
+
| 输入 | 目标页面/组件、需求或设计约定、运行环境、实际界面与相关实现 |
|
|
15
|
+
| 输出 | 带位置、操作、后果和截图/运行证据的问题清单及复测结果 |
|
|
16
|
+
| 限制 | 只读请求不自动修改;审美偏好单列,不能推翻明确设计。浏览器证据不等于原生平台或真实外部服务验收。 |
|
|
17
|
+
|
|
18
|
+
## 审查路径
|
|
19
|
+
|
|
20
|
+
发现和同步决策遵循[沟通与同步维护](../hai-app-create/collaboration.md);涉及使用指南的截图须来自当前实际操作并脱敏,不能仅凭源码说明视觉效果已通过。
|
|
21
|
+
|
|
22
|
+
1. 明确本次页面、角色、主要任务、设计约定与授权范围;理解本次是局部改善还是重新设计。沿 [hai-ui-design](../hai-ui-design/SKILL.md) 的页面任务判断层级、密度和表达。
|
|
23
|
+
2. 使用项目已有运行/浏览器测试入口装配隔离环境。先看真实页面再定位源码;不能启动时做源码/已有截图审查,标明截图来源与新旧关系,记录实际浏览器未验证。
|
|
24
|
+
3. 按 [走查清单](checklist.md) 完成用户路径。先处理任务无法完成、状态错误、键盘不可达和内容溢出,再评估布局一致性、层级和细节。每个问题记录具体页面、尺寸、语言/主题、操作和实际后果。
|
|
25
|
+
4. 复核发现是否来自公共组件、业务组合、设计规则或环境。公共问题优先修正 [hai-ui](../hai-ui/SKILL.md) 对应组件,再同步应用、CLI、文档;业务专属问题留在业务层,实际权限仍由服务端验收。
|
|
26
|
+
5. 已授权修复时集中处理本轮发现,再批量复测受影响路径和尺寸;需要行为回归时按 [hai-app-tests](../hai-app-tests/SKILL.md) 选合适测试层。纯视觉调整使用真实渲染验证,避免只匹配 class 字符串的测试。
|
|
27
|
+
|
|
28
|
+
## 问题与证据
|
|
29
|
+
|
|
30
|
+
沿 [交接契约](../hai-spec-implement/handoff.md) 记录稳定编号、优先级、位置、触发操作、后果、依据、建议和验收。截图证明布局,浏览器操作证明交互,服务/存储证据证明业务效果;三者按实际范围分别说明。
|
|
31
|
+
|
|
32
|
+
先报告已确认问题,再列实际覆盖和未验证边界。已修复项附本轮源码标识、操作与结果,日志/截图放 Git 忽略目录。没有浏览器或宿主环境时继续能做的检查,保留环境限制,不将静态清单视为实际通过。
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# 实际界面走查
|
|
2
|
+
|
|
3
|
+
按本次真实任务选择检查项,说明不适用原因。无需为后台、官网、API 项目强加同样的页面制度。
|
|
4
|
+
|
|
5
|
+
| 维度 | 如何检查 | 问题的可观察依据 |
|
|
6
|
+
| --- | --- | --- |
|
|
7
|
+
| 用户任务 | 从入口完成一次真实操作,再尝试失败和恢复 | 操作找不到、错误状态、数据未保存却提示成功、返回后丢失工作 |
|
|
8
|
+
| 信息结构 | 看标题、主操作、筛选、内容和反馈是否能快速定位 | 关键动作埋没、状态不清楚、同级内容层级不一致 |
|
|
9
|
+
| 布局与密度 | 目标手机、桌面、窄抽屉及产品需要的大屏 | 整页横向溢出、遮挡、操作离屏、无效空白、容器嵌套限制宽度 |
|
|
10
|
+
| 内容与语言 | 长中文、长英文、无空格标识符、多行错误、空值 | 截断关键信息、按钮重叠、标签挤压、切语言后出现旧错误文案 |
|
|
11
|
+
| 主题与焦点 | 已编译的明暗主题、Tab 键移动 | 控件边界和焦点不可见、状态仅由颜色区分、主题变量失效 |
|
|
12
|
+
| 键盘与辅助信息 | Tab/Shift+Tab、Enter/Space、方向键、Home/End、Escape | 禁用项被激活、焦点消失、弹层关闭不返回、tab/panel/sort 状态不对应 |
|
|
13
|
+
| 输入与触摸 | 点击区域、IME、失焦/提交、连续操作 | 触摸难点、输入法误提交、隐藏字段旧错误、重复提交或失败后丢输入 |
|
|
14
|
+
| 状态与恢复 | 加载、空态、无匹配、失败、无权限、长任务 | 只有 spinner、无法重试、toast 代替持久错误、未知外部效果被标完成 |
|
|
15
|
+
| 动效与性能 | 减少动态效果、内容加载、表格/图表与流式内容 | 装饰动画仍执行、布局反复跳动、监听器未释放、交互明显卡顿 |
|
|
16
|
+
| 安全与平台 | 不可信 HTML/URL、会话与实际 Web/App/Desktop 宿主 | 未消毒内容执行、前端隐藏代替鉴权、浏览器结果被冒充原生能力 |
|
|
17
|
+
| 部署目录 | [网站挂载目录](../hai-build/paths.md)、资源、当前导航与深链刷新 | 跳到域名根、运行配置未加载、API地址错位、带前缀后守卫漏匹配 |
|
|
18
|
+
|
|
19
|
+
## 紧凑工作区必查
|
|
20
|
+
|
|
21
|
+
- 导航已显示当前标题时,内容区没有重复标题;隐藏标题后新建、自定义操作和说明仍可用。顶栏、正文和页脚没有叠加的大段上下空白。
|
|
22
|
+
- 多条件筛选可通过键盘展开/收起,收起保留值且提示已启用条件;搜索和重置可触达,重置清空全部条件并真正更新列表。
|
|
23
|
+
- 手机、1440/1920/2560/3840px 下无整页横向溢出;表格自己滚动,分页不遮挡数据。用实际尺寸、截图和操作验证,不能只匹配 class。
|
|
24
|
+
|
|
25
|
+
## 验收怎么写
|
|
26
|
+
|
|
27
|
+
可用例子:“390px、英文、暗色模式下,打开筛选后首个控件获焦,Escape 关闭并回到筛选按钮,整页无横向溢出。”
|
|
28
|
+
|
|
29
|
+
不够具体的例子:“响应式已适配”“体验已优化”“截图正常”。截图应能对应页面与条件;键盘、数据保存、重试等必须实际操作,并保留必要断言。视觉审美建议注明与哪个既定设计目标相关,不能把个人字体/配色偏好写成缺陷。
|
|
@@ -1,279 +1,37 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: hai-vecdb
|
|
3
|
-
description: 使用
|
|
3
|
+
description: "使用 LanceDB/pgvector/Qdrant/Chroma 管理向量集合、写入和检索;排查维度、连接与过滤问题。"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# hai-vecdb
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
## 能力契约
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
## 适用场景
|
|
19
|
-
|
|
20
|
-
- 新增或修改向量数据库访问逻辑(集合管理/向量插入/搜索)
|
|
21
|
-
- 接入不同向量数据库后端(LanceDB / pgvector / Qdrant)
|
|
22
|
-
- 基于 `HaiVecdbError` 做错误分支处理
|
|
23
|
-
- 构建 RAG、语义搜索、知识库等 AI 场景
|
|
24
|
-
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
## 使用步骤
|
|
28
|
-
|
|
29
|
-
### 1. 配置
|
|
30
|
-
|
|
31
|
-
```yaml
|
|
32
|
-
# config/_vecdb.yml
|
|
33
|
-
|
|
34
|
-
# LanceDB(默认,嵌入式本地存储)
|
|
35
|
-
type: lancedb
|
|
36
|
-
path: ./data/vecdb
|
|
37
|
-
|
|
38
|
-
# pgvector
|
|
39
|
-
# type: pgvector
|
|
40
|
-
# url: ${HAI_VECDB_PG_URL:postgres://user:pass@localhost:5432/mydb}
|
|
41
|
-
# indexType: hnsw
|
|
42
|
-
# tablePrefix: vec_
|
|
43
|
-
|
|
44
|
-
# Qdrant
|
|
45
|
-
# type: qdrant
|
|
46
|
-
# url: ${HAI_VECDB_QDRANT_URL:http://localhost:6333}
|
|
47
|
-
# apiKey: ${HAI_VECDB_QDRANT_API_KEY:}
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
### 2. 初始化与关闭
|
|
51
|
-
|
|
52
|
-
```typescript
|
|
53
|
-
import { core } from '@h-ai/core'
|
|
54
|
-
import { vecdb } from '@h-ai/vecdb'
|
|
55
|
-
|
|
56
|
-
await vecdb.init(core.config.get('vecdb'))
|
|
57
|
-
// ... 使用向量数据库
|
|
58
|
-
await vecdb.close()
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
### 3. 选择操作接口
|
|
62
|
-
|
|
63
|
-
| 接口 | 用途 | 入口 |
|
|
64
|
-
| ---------- | -------------------------- | ----------------- |
|
|
65
|
-
| collection | 集合创建/删除/查询/判断存在 | `vecdb.collection` |
|
|
66
|
-
| vector | 向量插入/更新/删除/搜索/计数 | `vecdb.vector` |
|
|
67
|
-
|
|
68
|
-
---
|
|
69
|
-
|
|
70
|
-
## 核心 API
|
|
71
|
-
|
|
72
|
-
### 集合操作 — `vecdb.collection`
|
|
73
|
-
|
|
74
|
-
| 方法 | 签名 | 说明 |
|
|
75
|
-
| -------- | ------------------------------------------ | -------------- |
|
|
76
|
-
| `create` | `(name, options) => HaiResult<void>` | 创建集合 |
|
|
77
|
-
| `drop` | `(name) => HaiResult<void>` | 删除集合 |
|
|
78
|
-
| `exists` | `(name) => HaiResult<boolean>` | 判断集合是否存在 |
|
|
79
|
-
| `info` | `(name) => HaiResult<CollectionInfo>` | 获取集合信息 |
|
|
80
|
-
| `list` | `() => HaiResult<string[]>` | 列出所有集合 |
|
|
81
|
-
|
|
82
|
-
> 所有方法均返回 `Promise<HaiResult<T>>`,上表省略异步与错误类型。
|
|
83
|
-
|
|
84
|
-
```typescript
|
|
85
|
-
// 创建集合(指定维度和度量)
|
|
86
|
-
await vecdb.collection.create('docs', { dimension: 1536, metric: 'cosine' })
|
|
87
|
-
|
|
88
|
-
// 查询集合信息
|
|
89
|
-
const info = await vecdb.collection.info('docs')
|
|
90
|
-
if (info.success) {
|
|
91
|
-
// info.data => { name, dimension, metric, count }
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
// 列出所有集合
|
|
95
|
-
const list = await vecdb.collection.list()
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
**CollectionCreateOptions**:
|
|
99
|
-
|
|
100
|
-
```typescript
|
|
101
|
-
interface CollectionCreateOptions {
|
|
102
|
-
dimension: number // 向量维度(必填)
|
|
103
|
-
metric?: 'cosine' | 'euclidean' | 'dot' // 距离度量(默认 cosine)
|
|
104
|
-
}
|
|
105
|
-
```
|
|
10
|
+
| 项目 | 契约 |
|
|
11
|
+
| -------- | -------------------------------------------------------------------------------------------------------- |
|
|
12
|
+
| 能力 | 使用 @h-ai/vecdb 管理 LanceDB/pgvector/Qdrant/Chroma 集合与向量检索 |
|
|
13
|
+
| 适用场景 | 向量持久化、集合管理或相似度搜索 |
|
|
14
|
+
| 输入 | VecdbConfigInput、集合、固定维度向量、查询过滤条件 |
|
|
15
|
+
| 输出 | 集合/向量操作的 HaiResult |
|
|
16
|
+
| 限制 | 仅服务端;向量维度须匹配集合。Chroma 是 HTTP 服务,本地 path 模式需可用服务命令;init 失败不得当成空库。 |
|
|
106
17
|
|
|
107
|
-
|
|
18
|
+
## 使用路径
|
|
108
19
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
| `count` | `(collection) => HaiResult<number>` | 文档计数 |
|
|
20
|
+
- `_vecdb.yml` 选择实际后端;init 后检查连接结果,再创建集合并写入相同维度向量。
|
|
21
|
+
- LanceDB 集合维度/metric 随 Arrow schema 持久化,连接 metric 仅是新集合默认值;本地路径不自动跨节点共享。分布式应用优先服务端后端,重启复用持久目录与匹配的 embedding 维度。
|
|
22
|
+
- LanceDB insert/upsert 均需持久非空 id 主键与原子 merge;insert 保留已有 ID,upsert 整行替换。同批重复 ID 或能力缺失返回 CONFIG_ERROR,无 delete/add 回退。原子性只覆盖每次 merge;检查错误后再继续业务写入。
|
|
23
|
+
- LanceDB 使用原生 JSON metadata;filter 仅支持顶层字面量键的 string/有限 number/boolean/null AND 匹配,null 不匹配缺失字段。对象/数组/undefined 与旧 Utf8 metadata 表返回 CONFIG_ERROR;过滤在 topK 前执行,错误不得当作空结果。其它后端的 null/复杂过滤能力须单独核对。
|
|
24
|
+
- Chroma 仅支持 HTTP(S) 根 url(优先于 host/port),不接受路径前缀/URL 凭据/query/fragment;apiKey 按自托管网关协议发送 Authorization: Bearer,不表示 Chroma Cloud 支持。初始化同时验证数据端点权限,认证失败不得当成空库。Qdrant 只有 404 代表集合不存在。
|
|
25
|
+
- Qdrant 仅支持未命名向量字段的三种公开 metric,外部 named-vector/Manhattan 集合返回 CONFIG_ERROR;Chroma 的 metadata/filter 由真实 SDK 校验,非法输入返回操作错误,不执行无过滤回退。
|
|
116
26
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
```typescript
|
|
120
|
-
// 插入向量文档
|
|
121
|
-
await vecdb.vector.insert('docs', [
|
|
122
|
-
{ id: 'doc-1', vector: embedding, content: '文档内容', metadata: { source: 'wiki' } },
|
|
123
|
-
{ id: 'doc-2', vector: embedding2, content: '另一段内容' },
|
|
124
|
-
])
|
|
125
|
-
|
|
126
|
-
// 向量搜索(返回相似度排序结果)
|
|
127
|
-
const result = await vecdb.vector.search('docs', queryVector, {
|
|
128
|
-
topK: 10,
|
|
129
|
-
minScore: 0.7,
|
|
130
|
-
filter: { source: 'wiki' },
|
|
131
|
-
})
|
|
132
|
-
if (result.success) {
|
|
133
|
-
for (const item of result.data) {
|
|
134
|
-
// item => { id, score, content, metadata }
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
// 更新已有文档(按 id 匹配)
|
|
139
|
-
await vecdb.vector.upsert('docs', [
|
|
140
|
-
{ id: 'doc-1', vector: newEmbedding, content: '更新后的内容' },
|
|
141
|
-
])
|
|
142
|
-
|
|
143
|
-
// 删除
|
|
144
|
-
await vecdb.vector.delete('docs', ['doc-1', 'doc-2'])
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
**VectorDocument**:
|
|
148
|
-
|
|
149
|
-
```typescript
|
|
150
|
-
interface VectorDocument {
|
|
151
|
-
id: string // 文档唯一标识
|
|
152
|
-
vector: number[] // 向量数据
|
|
153
|
-
content?: string // 文本内容(可选)
|
|
154
|
-
metadata?: Record<string, unknown> // 元数据(可选)
|
|
155
|
-
}
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
**VectorSearchOptions**:
|
|
159
|
-
|
|
160
|
-
```typescript
|
|
161
|
-
interface VectorSearchOptions {
|
|
162
|
-
topK?: number // 返回数量(默认 10)
|
|
163
|
-
filter?: Record<string, unknown> // 元数据过滤(键值精确匹配)
|
|
164
|
-
minScore?: number // 最低相似度阈值(0-1)
|
|
165
|
-
}
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
---
|
|
169
|
-
|
|
170
|
-
## 错误码 — `HaiVecdbError`
|
|
171
|
-
|
|
172
|
-
| 错误码 | code | 说明 |
|
|
173
|
-
| ----------------------------------------- | ----------------- | ------------------ |
|
|
174
|
-
| `HaiVecdbError.CONNECTION_FAILED` | `hai:vecdb:001` | 连接失败 |
|
|
175
|
-
| `HaiVecdbError.QUERY_FAILED` | `hai:vecdb:002` | 查询失败 |
|
|
176
|
-
| `HaiVecdbError.COLLECTION_NOT_FOUND` | `hai:vecdb:003` | 集合不存在 |
|
|
177
|
-
| `HaiVecdbError.COLLECTION_ALREADY_EXISTS`| `hai:vecdb:004` | 集合已存在 |
|
|
178
|
-
| `HaiVecdbError.DIMENSION_MISMATCH` | `hai:vecdb:005` | 向量维度不匹配 |
|
|
179
|
-
| `HaiVecdbError.INSERT_FAILED` | `hai:vecdb:006` | 插入失败 |
|
|
180
|
-
| `HaiVecdbError.DELETE_FAILED` | `hai:vecdb:007` | 删除失败 |
|
|
181
|
-
| `HaiVecdbError.UPDATE_FAILED` | `hai:vecdb:008` | 更新失败 |
|
|
182
|
-
| `HaiVecdbError.INDEX_BUILD_FAILED` | `hai:vecdb:009` | 索引构建失败 |
|
|
183
|
-
| `HaiVecdbError.NOT_INITIALIZED` | `hai:vecdb:010` | 未初始化 |
|
|
184
|
-
| `HaiVecdbError.CONFIG_ERROR` | `hai:vecdb:011` | 配置错误 |
|
|
185
|
-
| `HaiVecdbError.UNSUPPORTED_TYPE` | `hai:vecdb:012` | 不支持的数据库类型 |
|
|
186
|
-
| `HaiVecdbError.DRIVER_NOT_FOUND` | `hai:vecdb:013` | 驱动未安装 |
|
|
187
|
-
| `HaiVecdbError.SERIALIZATION_FAILED` | `hai:vecdb:014` | 序列化失败 |
|
|
188
|
-
|
|
189
|
-
---
|
|
190
|
-
|
|
191
|
-
## 常见模式
|
|
192
|
-
|
|
193
|
-
### RAG 检索
|
|
194
|
-
|
|
195
|
-
```typescript
|
|
196
|
-
import { ai } from '@h-ai/ai'
|
|
197
|
-
import { vecdb } from '@h-ai/vecdb'
|
|
198
|
-
|
|
199
|
-
// 将查询文本转为向量
|
|
200
|
-
const embedResult = await ai.embedding.embedText(query)
|
|
201
|
-
if (!embedResult.success) return embedResult
|
|
202
|
-
|
|
203
|
-
// 检索最相似的文档
|
|
204
|
-
const searchResult = await vecdb.vector.search('knowledge', embedResult.data, {
|
|
205
|
-
topK: 5,
|
|
206
|
-
minScore: 0.7,
|
|
207
|
-
})
|
|
208
|
-
if (!searchResult.success) return searchResult
|
|
209
|
-
|
|
210
|
-
// 拼接上下文,送入 LLM
|
|
211
|
-
const context = searchResult.data.map(r => r.content).join('\n\n')
|
|
212
|
-
const chatResult = await ai.llm.chat({
|
|
213
|
-
messages: [
|
|
214
|
-
{ role: 'system', content: `参考以下资料回答用户问题:\n${context}` },
|
|
215
|
-
{ role: 'user', content: query },
|
|
216
|
-
],
|
|
217
|
-
})
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
### 文档入库
|
|
221
|
-
|
|
222
|
-
```typescript
|
|
223
|
-
import { datapipe } from '@h-ai/datapipe'
|
|
224
|
-
import { ai } from '@h-ai/ai'
|
|
225
|
-
import { vecdb } from '@h-ai/vecdb'
|
|
226
|
-
|
|
227
|
-
// 清洗 + 分块
|
|
228
|
-
const pipeline = await datapipe.pipeline()
|
|
229
|
-
.clean({ removeHtml: true })
|
|
230
|
-
.chunk({ mode: 'markdown', maxSize: 1000, overlap: 100 })
|
|
231
|
-
.run(rawText)
|
|
232
|
-
|
|
233
|
-
if (!pipeline.success) return pipeline
|
|
234
|
-
|
|
235
|
-
// 批量生成嵌入
|
|
236
|
-
const embeddings = await ai.embedding.embedBatch(
|
|
237
|
-
pipeline.data.chunks.map(c => c.content),
|
|
238
|
-
)
|
|
239
|
-
if (!embeddings.success) return embeddings
|
|
240
|
-
|
|
241
|
-
// 批量入库
|
|
242
|
-
const docs = pipeline.data.chunks.map((chunk, i) => ({
|
|
243
|
-
id: `doc-${i}`,
|
|
244
|
-
vector: embeddings.data[i],
|
|
245
|
-
content: chunk.content,
|
|
246
|
-
metadata: chunk.metadata,
|
|
247
|
-
}))
|
|
248
|
-
await vecdb.vector.insert('knowledge', docs)
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
### 错误分支处理
|
|
252
|
-
|
|
253
|
-
```typescript
|
|
254
|
-
import { vecdb, HaiVecdbError } from '@h-ai/vecdb'
|
|
255
|
-
|
|
256
|
-
const result = await vecdb.collection.create('docs', { dimension: 1536 })
|
|
257
|
-
if (!result.success) {
|
|
258
|
-
switch (result.error.code) {
|
|
259
|
-
case HaiVecdbError.COLLECTION_ALREADY_EXISTS.code:
|
|
260
|
-
// 集合已存在,可跳过
|
|
261
|
-
break
|
|
262
|
-
case HaiVecdbError.NOT_INITIALIZED.code:
|
|
263
|
-
// 未初始化,需先 vecdb.init()
|
|
264
|
-
break
|
|
265
|
-
default:
|
|
266
|
-
// 意外错误
|
|
267
|
-
break
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
```
|
|
271
|
-
|
|
272
|
-
---
|
|
27
|
+
## 按需参考
|
|
273
28
|
|
|
274
|
-
|
|
29
|
+
按任务读取 [reference.md](reference.md) 的对应小节;签名以当前源码或安装版本的公开类型为准,不默认加载全部资料。示例中的业务变量由应用提供。
|
|
275
30
|
|
|
276
|
-
-
|
|
277
|
-
-
|
|
278
|
-
-
|
|
279
|
-
-
|
|
31
|
+
- 运行环境
|
|
32
|
+
- 适用场景
|
|
33
|
+
- 使用步骤
|
|
34
|
+
- 核心 API
|
|
35
|
+
- 错误码 — `HaiVecdbError`
|
|
36
|
+
- 常见模式
|
|
37
|
+
- 相关 Skills
|