@h-ai/cli 0.1.0-alpha.66 → 0.1.0-alpha.68
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 +86 -241
- package/README.ja.md +86 -241
- package/README.md +86 -241
- package/dist/{src-RDQ2EIBT.js → chunk-FI56GONY.js} +32 -2669
- package/dist/chunk-FI56GONY.js.map +1 -0
- package/dist/chunk-MBPB37FR.js +1348 -0
- package/dist/chunk-MBPB37FR.js.map +1 -0
- package/dist/{chunk-QYX6V7H2.js → chunk-ZFNBUF77.js} +347 -276
- package/dist/chunk-ZFNBUF77.js.map +1 -0
- package/dist/cli-config-templates-W2LLPMB6.js +5 -0
- package/dist/{cli-config-templates-3XSFIXBP.js.map → cli-config-templates-W2LLPMB6.js.map} +1 -1
- package/dist/{cli-skill-templates-TSYEQTCY.js → cli-skill-templates-US5CCAJ4.js} +3 -3
- package/dist/{cli-skill-templates-TSYEQTCY.js.map → cli-skill-templates-US5CCAJ4.js.map} +1 -1
- package/dist/index.js +1304 -532
- package/dist/index.js.map +1 -1
- package/dist/metafile-esm.json +1 -0
- package/dist/src-DSJJXM2F.js +3849 -0
- package/dist/src-DSJJXM2F.js.map +1 -0
- package/package.json +9 -8
- package/templates/README.md +48 -145
- package/templates/apps/admin/messages/ja-JP.json +38 -0
- package/templates/apps/admin/src/routes/+layout.svelte.hbs +16 -6
- package/templates/apps/admin/src/routes/admin/+layout.svelte.hbs +3 -3
- package/templates/apps/api/.dockerignore.hbs +14 -7
- package/templates/apps/api/.gitignore.hbs +7 -0
- package/templates/apps/api/apps/{{projectName}}-contract/README.md.hbs +23 -2
- package/templates/apps/api/apps/{{projectName}}-contract/src/index.ts.hbs +2 -0
- package/templates/apps/api/apps/{{projectName}}-contract/src/{{projectName}}-contract.ts.hbs +4 -1
- package/templates/apps/api/apps/{{projectName}}-service/README.md.hbs +33 -8
- package/templates/apps/api/apps/{{projectName}}-service/config/_core.yml.hbs +0 -10
- package/templates/apps/api/apps/{{projectName}}-service/config/_serv.yml.hbs +2 -1
- package/templates/apps/api/apps/{{projectName}}-service/package.json.hbs +1 -2
- package/templates/apps/api/apps/{{projectName}}-service/src/app.ts.hbs +24 -11
- package/templates/apps/api/apps/{{projectName}}-service/src/index.ts.hbs +8 -1
- package/templates/apps/api/apps/{{projectName}}-service/src/lib/server/init.ts.hbs +68 -11
- package/templates/apps/api/apps/{{projectName}}-service/src/server/procedures/index.ts.hbs +10 -2
- package/templates/apps/api/e2e/api-service.spec.ts.hbs +2 -2
- package/templates/apps/api/hai.build.json.hbs +1 -1
- package/templates/apps/api/images/app.Dockerfile.hbs +35 -0
- package/templates/apps/api/package.json.hbs +6 -1
- package/templates/apps/api/playwright.config.ts.hbs +15 -7
- package/templates/apps/fullstack/.dockerignore.hbs +14 -9
- package/templates/apps/fullstack/.gitignore.hbs +7 -0
- package/templates/apps/fullstack/apps/{{projectName}}-app/README.md.hbs +24 -6
- package/templates/apps/fullstack/apps/{{projectName}}-app/index.html.hbs +1 -0
- package/templates/apps/fullstack/apps/{{projectName}}-app/messages/ja-JP.json.hbs +7 -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 +7 -1
- package/templates/apps/fullstack/apps/{{projectName}}-app/vite.config.ts.hbs +2 -2
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/README.md.hbs +23 -5
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/messages/ja-JP.json.hbs +7 -0
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/vite.config.ts.hbs +1 -1
- package/templates/apps/fullstack/apps/{{projectName}}-miniapp/README.md.hbs +16 -6
- package/templates/apps/fullstack/apps/{{projectName}}-miniapp/messages/ja-JP.json.hbs +12 -0
- package/templates/apps/fullstack/apps/{{projectName}}-web/README.md.hbs +24 -6
- package/templates/apps/fullstack/apps/{{projectName}}-web/messages/ja-JP.json.hbs +7 -0
- package/templates/apps/fullstack/apps/{{projectName}}-web/vite.config.ts.hbs +2 -2
- package/templates/apps/fullstack/e2e/fullstack.spec.ts.hbs +30 -9
- package/templates/apps/fullstack/hai.build.json.hbs +2 -2
- package/templates/apps/fullstack/images/app.Dockerfile.hbs +36 -0
- package/templates/apps/fullstack/images/web.Dockerfile.hbs +34 -0
- package/templates/apps/fullstack/package.json.hbs +3 -1
- package/templates/apps/fullstack/packages/{{projectName}}-contract/README.md.hbs +23 -2
- package/templates/apps/fullstack/packages/{{projectName}}-contract/src/admin-schemas.ts.hbs +1 -1
- package/templates/apps/fullstack/packages/{{projectName}}-contract/src/index.ts.hbs +2 -0
- package/templates/apps/fullstack/packages/{{projectName}}-contract/src/{{projectName}}-contract.ts.hbs +3 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/README.md.hbs +32 -8
- package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_core.yml.hbs +0 -6
- package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_reach.yml.hbs +8 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_serv.yml.hbs +2 -1
- package/templates/apps/fullstack/packages/{{projectName}}-serv/package.json.hbs +6 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/src/app-server.ts.hbs +9 -5
- package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/admin-service.ts.hbs +3 -2
- package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/messages.ts.hbs +16 -1
- package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/procedures/admin-procedures.ts.hbs +7 -3
- package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/procedures/index.ts.hbs +3 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/src/server/runtime.ts.hbs +58 -7
- package/templates/apps/fullstack/packages/{{projectName}}-serv/tests/app-server.test.ts.hbs +13 -3
- package/templates/apps/fullstack/packages/{{projectName}}-shared/.gitignore.hbs +7 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/README.md.hbs +40 -14
- package/templates/apps/fullstack/packages/{{projectName}}-shared/messages/ja-JP.json.hbs +105 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/components/AdminWorkspace.svelte.hbs +3 -3
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/components/AppShell.svelte.hbs +6 -6
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/pages/audit.svelte.hbs +7 -7
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/pages/settings.svelte.hbs +4 -4
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/pages/users.svelte.hbs +8 -8
- package/templates/apps/fullstack/packages/{{projectName}}-shared/tests/api-client.test.ts.hbs +13 -14
- package/templates/apps/fullstack/playwright.config.ts.hbs +15 -6
- package/templates/apps/h5/messages/ja-JP.json +40 -0
- package/templates/apps/h5/src/routes/+layout.svelte.hbs +16 -5
- package/templates/apps/mobile-app/messages/ja-JP.json +36 -0
- package/templates/apps/mobile-app/src/App.svelte.hbs +15 -5
- package/templates/apps/mobile-app/src/lib/api.ts.hbs +173 -14
- package/templates/apps/mobile-app/src/lib/pages/home.svelte.hbs +2 -2
- package/templates/apps/website/messages/ja-JP.json +32 -0
- package/templates/apps/website/src/routes/+layout.svelte.hbs +13 -5
- package/templates/apps/website/src/routes/services/+page.svelte.hbs +1 -1
- package/templates/base/.dockerignore.hbs +14 -8
- package/templates/base/.gitignore.hbs +7 -0
- package/templates/base/e2e/app.spec.ts.hbs +23 -8
- package/templates/base/hai.build.json.hbs +1 -1
- package/templates/base/{Dockerfile.hbs → images/app.Dockerfile.hbs} +19 -17
- package/templates/base/package.json.hbs +11 -3
- package/templates/base/playwright.config.ts +15 -4
- package/templates/base/src/hooks.server.ts.hbs +15 -6
- package/templates/base/src/lib/server/init.ts.hbs +139 -30
- package/templates/base/vite.config.ts.hbs +5 -3
- package/templates/features/iam/routes-shared/api/auth/logout/+server.ts +11 -6
- package/templates/features/payment/routes/api/v1/payment/create/+server.ts +18 -25
- package/templates/features/payment/routes/api/v1/payment/notify/[provider]/+server.ts +4 -0
- package/templates/i18n/project.inlang/settings.json +1 -1
- package/templates/shared/.gitattributes +6 -0
- package/templates/shared/e2e-env.ts +98 -0
- package/templates/shared/run-e2e.mjs +51 -12
- package/templates/skills/AGENTS.md +7 -3
- package/templates/skills/bridges/admin/AGENTS.md +6 -2
- package/templates/skills/bridges/api/AGENTS.md +3 -1
- package/templates/skills/bridges/fullstack/AGENTS.md.hbs +5 -1
- package/templates/skills/bridges/h5/AGENTS.md +6 -2
- package/templates/skills/bridges/mobile-app/AGENTS.md +6 -2
- package/templates/skills/bridges/website/AGENTS.md +6 -2
- package/templates/skills/hai-ai/SKILL.md +8 -2
- package/templates/skills/hai-ai/guide.md +134 -60
- package/templates/skills/hai-ai/reference.md +51 -11
- package/templates/skills/hai-api-client/SKILL.md +15 -160
- package/templates/skills/hai-api-client/reference.md +178 -0
- package/templates/skills/hai-api-contract/SKILL.md +16 -273
- package/templates/skills/hai-api-contract/reference.md +280 -0
- package/templates/skills/hai-app-create/SKILL.md +6 -2
- package/templates/skills/hai-app-create/development.md +24 -8
- package/templates/skills/hai-app-create/reference.md +7 -5
- package/templates/skills/hai-app-review/SKILL.md +7 -3
- package/templates/skills/hai-app-review/differential.md +34 -0
- package/templates/skills/hai-app-tests/SKILL.md +6 -3
- package/templates/skills/hai-app-tests/reference.md +5 -5
- package/templates/skills/hai-app-tests/validation.md +38 -0
- package/templates/skills/hai-audit/SKILL.md +24 -147
- package/templates/skills/hai-audit/reference.md +148 -0
- package/templates/skills/hai-build/SKILL.md +14 -8
- package/templates/skills/hai-build/reference.md +16 -13
- package/templates/skills/hai-cache/SKILL.md +20 -181
- package/templates/skills/hai-cache/reference.md +229 -0
- package/templates/skills/hai-capacitor/SKILL.md +7 -4
- package/templates/skills/hai-capacitor/reference.md +15 -9
- package/templates/skills/hai-ci/SKILL.md +2 -0
- package/templates/skills/hai-core/SKILL.md +7 -3
- package/templates/skills/hai-core/reference.md +25 -5
- package/templates/skills/hai-crypto/SKILL.md +22 -250
- package/templates/skills/hai-crypto/reference.md +310 -0
- package/templates/skills/hai-datapipe/SKILL.md +16 -195
- package/templates/skills/hai-datapipe/reference.md +204 -0
- package/templates/skills/hai-deploy/SKILL.md +24 -54
- package/templates/skills/hai-deploy/middleware.md +51 -43
- package/templates/skills/hai-framework-sync/SKILL.md +2 -2
- package/templates/skills/hai-framework-sync/sync.md +1 -1
- package/templates/skills/hai-iam/SKILL.md +25 -11
- package/templates/skills/hai-iam/reference.md +181 -154
- package/templates/skills/hai-kit/SKILL.md +35 -174
- package/templates/skills/hai-kit/reference.md +190 -0
- package/templates/skills/hai-payment/SKILL.md +33 -263
- package/templates/skills/hai-payment/reference.md +295 -0
- package/templates/skills/hai-pr-review/SKILL.md +21 -88
- package/templates/skills/hai-reach/SKILL.md +6 -3
- package/templates/skills/hai-reach/reference.md +83 -22
- package/templates/skills/hai-reldb/SKILL.md +6 -3
- package/templates/skills/hai-reldb/reference.md +68 -25
- package/templates/skills/hai-scheduler/SKILL.md +18 -195
- package/templates/skills/hai-scheduler/reference.md +216 -0
- package/templates/skills/hai-serv/SKILL.md +25 -10
- package/templates/skills/hai-serv/reference.md +123 -87
- package/templates/skills/hai-spec-implement/SKILL.md +5 -1
- 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 +5 -0
- package/templates/skills/hai-spec-implement/workflow.md +5 -3
- package/templates/skills/hai-spec-review/SKILL.md +4 -0
- package/templates/skills/hai-storage/SKILL.md +23 -238
- package/templates/skills/hai-storage/reference.md +282 -0
- package/templates/skills/hai-ui/SKILL.md +17 -3
- package/templates/skills/hai-ui/guide.md +3 -3
- package/templates/skills/hai-ui/reference.md +26 -11
- package/templates/skills/hai-ui-design/SKILL.md +31 -0
- package/templates/skills/hai-ui-design/patterns.md +26 -0
- package/templates/skills/hai-ui-review/SKILL.md +30 -0
- package/templates/skills/hai-ui-review/checklist.md +22 -0
- package/templates/skills/hai-vecdb/SKILL.md +14 -10
- package/templates/skills/hai-vecdb/reference.md +33 -3
- package/dist/chunk-FWN5B54L.js +0 -468
- package/dist/chunk-FWN5B54L.js.map +0 -1
- package/dist/chunk-QYX6V7H2.js.map +0 -1
- package/dist/cli-config-templates-3XSFIXBP.js +0 -5
- package/dist/src-RDQ2EIBT.js.map +0 -1
- package/templates/apps/api/Dockerfile.hbs +0 -35
- package/templates/apps/fullstack/Dockerfile.hbs +0 -57
- /package/templates/apps/fullstack/{docker → images/web}/19-runtime-config.envsh.hbs +0 -0
- /package/templates/apps/fullstack/{docker → images/web}/nginx.conf.hbs +0 -0
- /package/templates/apps/fullstack/{docker → images/web}/runtime-config.js.template.hbs +0 -0
- /package/templates/base/{docker → images/web}/nginx.conf.hbs +0 -0
package/README.md
CHANGED
|
@@ -1,312 +1,157 @@
|
|
|
1
1
|
# @h-ai/cli
|
|
2
2
|
|
|
3
|
-
[简体中文](
|
|
3
|
+
[简体中文](README.md) | [English](README.en.md) | [日本語](README.ja.md)
|
|
4
4
|
|
|
5
|
-
[框架首页](../../README.md)
|
|
5
|
+
[框架首页](../../README.md)
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## 简介
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
生成项目默认启用 `zh-CN`、`en-US`、`ja-JP`。交互配置可选择日语为默认语言;fullstack 可通过 `fullstack.i18n.locales` 缩小启用语言列表。CLI 终端语言按 `HAI_CORE_DEFAULTLOCALE` → `LC_ALL` → `LC_MESSAGES` → `LANG` 选择,支持中英日文。
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
用 `hai` 创建应用、添加模块、生成基础代码,再构建和交付应用。支持 SvelteKit、独立 API 和前后端分离工程。第一次使用可按[完整使用指南](../../docs/usage/README.md)从创建走到部署。
|
|
12
12
|
|
|
13
|
-
##
|
|
13
|
+
## 核心功能清单
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
- 创建管理后台、企业官网、H5、API、移动应用或多端 fullstack 工程。
|
|
16
|
+
- 为已有项目添加模块、补齐配置和 AI 开发指引。
|
|
17
|
+
- 生成页面、组件、接口、模型和迁移骨架。
|
|
18
|
+
- 按镜像构建,完整离线交付,或只更新选中的服务。
|
|
16
19
|
|
|
17
|
-
|
|
18
|
-
- **模块添加** — 向现有项目增量启用模块,自动解析依赖
|
|
19
|
-
- **配置初始化** — 校验项目配置完整性,补全缺失的配置文件
|
|
20
|
-
- **代码生成** — 快速生成页面、组件、API 端点、数据模型、数据库迁移
|
|
21
|
-
- **模板选择** — 最小 / 标准 / 完整 / 自定义四种项目模板
|
|
22
|
-
- **功能组合** — 按需启用 IAM、DB、AI、Storage、Crypto 等模块
|
|
23
|
-
- **API 服务脚手架** — API Service 模板使用 `@h-ai/api-contract` + `@h-ai/serv` 组合公共 contract / procedures,并通过 `@h-ai/api-client` typed client 消费
|
|
24
|
-
- **自动依赖解析** — 选择功能时自动补全依赖(如 IAM 自动引入 Crypto)
|
|
25
|
-
|
|
26
|
-
## AI 使用指南
|
|
27
|
-
|
|
28
|
-
CLI 从 `templates/skills/` 将所选 skill 的完整目录复制到生成项目 `.agents/skills/`。`SKILL.md` 提供能力边界和任务导航,`reference.md`/`guide.md` 保留按需范本;同步时不能只复制入口。AGENTS.md 保存应用约束,Claude/Copilot 桥接文件引用它;修改模板需同步相关仓库 skills。模板生成测试会核对参考文件的完整交付。
|
|
29
|
-
|
|
30
|
-
业务以用户当前明确要求及其指定的需求/设计文档为准。模板 AGENTS、README、skills、生成代码及测试中的角色/权限、流程、限额和架构是可调整的初始方案。审查将差异列为模板适配项,不因偏离模板判定需求错误;实施按授权同步修改冲突代码、测试和过期规则。框架 API 仍以安装版本公开契约为准,服务端授权、资源隔离、输入校验和凭据保护仍需落实。已有项目需显式合并这些规则,`hai init` 不覆盖现有文件。
|
|
31
|
-
|
|
32
|
-
所有应用类型均交付 `hai-spec-review`:生成前严格检查需求/设计文档的完备性、歧义、技术及框架使用错误、命名一致性,给出带位置和修正建议的问题清单;问题解决且证据充分后才判定可以进入 AI 生成。`hai init` / `hai add` 同时为已有项目补齐该工作流 skill,保留自定义文件。
|
|
33
|
-
|
|
34
|
-
审查后的文档实施使用独立的 `hai-spec-implement`,同样交付到所有应用并由 `hai init` / `hai add` 补齐。AI 按可独立验收的功能和实际依赖决定是否拆分,默认写入 `docs/task-list.md` 与 `docs/tasks/<编号>-<slug>.md`;每项在独立 Git 分支走 TDD、门禁、本地合并,记录真实合并提交后更新清单。返修复用原任务编号、文件和分支,追加轮次并关联此前证据。流程复用 Markdown、Git 和已有开发/测试 skills,无新增运行依赖或工作流引擎。可以请求“只根据 docs/需求.md 拆分任务”“根据该文档生成代码”“执行 T003”或“T002 返修后合并”;仅规划时不实施,指定任务先核验依赖,远端操作依实际授权。
|
|
35
|
-
|
|
36
|
-
需求/设计文档提交后,可以请求“我修改了 docs/需求.md、docs/设计.md,请帮我更新实现”。Skill 在原清单中区分已验收文档 SHA、固定目标文档 SHA 与已验收实现 SHA,比较完整文档集合的净差异(含增删、重命名及关联影响),更新原任务或新建任务,逐项在对应分支测试、合并。全部差异处理且整体验收通过后,才提交新的已验收基线;部分完成或中断保留旧基线。旧项目缺少可信基线时先追溯/核验,不猜测版本。详见 [文档差异与基线流程](templates/skills/hai-spec-implement/changes.md)。`hai init` / `hai add` 会补齐新增参考文件,已存在的入口、执行流程和任务范本仍须对照模板合并。
|
|
37
|
-
|
|
38
|
-
日常新增、修改、修复功能由 `AGENTS.md` 引导读取 `hai-app-create/SKILL.md` 与 `development.md`:先把需求映射到框架现成功能、配置和扩展点,再依据当前安装版本的 exports/类型实现。适用能力优先复用;能力不足时说明具体缺口,不为模块覆盖率安装无关依赖。Codex 使用 `.agents/skills/`,仍需遵循项目根 `AGENTS.md` 的常驻规则。
|
|
39
|
-
|
|
40
|
-
工具入口共享同一份规则与技能:Codex/Cursor 使用 AGENTS 与 `.agents/skills/`;Copilot 的 `.github/copilot-instructions.md` 只引用共享 `AGENTS.md`,不另保存各应用类型规则;OpenCode 的 opencode.json 通过 `instructions: ["AGENTS.md"]` 直接引用共享规则。Claude Code 的根 CLAUDE.md 仅包含 `@AGENTS.md`,通过共享规则的任务导航按需读取 `.agents/skills/` 正文和参考文件。CLI 不创建 `.claude/`,无需重复技能或符号链接。此模式不提供 Claude 原生技能自动发现或 `/skill` 命令;项目已有的 Claude 设置与技能保留。依据:[Claude 项目指引](https://code.claude.com/docs/en/memory)、[Claude 原生 skills](https://code.claude.com/docs/en/skills)、[Copilot](https://docs.github.com/en/copilot/concepts/agents/about-agent-skills)、[OpenCode](https://docs.opencode.ai/docs/skills/)、[Cursor](https://cursor.com/docs/skills)。
|
|
41
|
-
|
|
42
|
-
Codex 原生发现 `.agents/skills/` 并按任务自动选择,也可显式输入 `$hai-app-create`、`$hai-app-review` 等名称调用;入口和参考文件保持按需读取。无需额外 `.codex/skills` 或 Copilot 设置。依据:[Codex skills](https://learn.chatgpt.com/docs/build-skills)、[AGENTS.md](https://learn.chatgpt.com/docs/agent-configuration/agents-md)。
|
|
43
|
-
|
|
44
|
-
Claude Code v2.1.277 起也可直接读取根 `AGENTS.md`(没有更高优先级项目 CLAUDE 文件且相关内置插件启用时)。保留这一行导入可兼容旧版及未开启该能力的会话,官方说明导入不会重复加载规则;仍无须 `.claude/` 目录。参见 [AGENTS.md 支持](https://code.claude.com/docs/en/memory#agentsmd)。
|
|
45
|
-
|
|
46
|
-
生成项目共享 `eslint-rules.js`,lint 拦截显式 `any`、console、无理由抑制、双重 unknown 断言、框架内部源码导入及明确的 localStorage 敏感键写入;合理的第三方 workaround 需局部说明。静态规则不能证明权限隔离、输入安全、事务或日志脱敏,相关行为仍需测试与审查。
|
|
47
|
-
|
|
48
|
-
已有项目先更新 CLI,再运行 `hai init` 补齐缺失的流程 skill、参考资源和入口;该操作保留现有文件,即使 `--force` 也不覆盖 AI 规则。旧入口、已存在的 skills、ESLint 配置与脚本需要对照新生成项目合并,缺失的 .npmrc/.gitignore 也需补齐;只补文件不会自动升级旧规则。模板变更未发布前可通过本仓库构建的 CLI 生成对照项目,不要把未发布能力当作已安装包能力。
|
|
49
|
-
|
|
50
|
-
AI 文件写入前会解析已有文件和目录链接;共享技能与项目桥接文件均限制在当前项目内。链接指向项目外时停止写入。已有 `.claude/` 目录及其链接不参与生成,`hai init` / `hai add` 不修改或删除其中的内容。
|
|
51
|
-
|
|
52
|
-
交付验证同时检查发布归档和生成项目。`.npmrc` / `.gitignore` 在模板源中使用 `.hbs` 后缀,避免打包时被排除;生成时仍恢复正常文件名,保留依赖布局与敏感产物忽略规则。归档回归检查全部模板都进入 `.tgz`,不能仅验证源码目录中的 create。
|
|
53
|
-
|
|
54
|
-
## 快速开始
|
|
55
|
-
|
|
56
|
-
要求 Node.js 22.22.2+ / 24.15.0+ / 26+;生成的根项目和工作区包均声明相同最低版本。
|
|
20
|
+
## 使用入门
|
|
57
21
|
|
|
58
22
|
### 安装 CLI
|
|
59
23
|
|
|
60
|
-
|
|
24
|
+
需要符合项目 `engines` 的 Node.js(`^22.22.2 || ^24.15.0 || >=26.0.0`)与 pnpm 12.11.2。PowerShell 使用 `pnpm.cmd`。
|
|
61
25
|
|
|
62
|
-
```
|
|
26
|
+
```sh
|
|
63
27
|
pnpm add -g @h-ai/cli
|
|
64
28
|
hai --version
|
|
29
|
+
hai --help
|
|
65
30
|
```
|
|
66
31
|
|
|
67
|
-
|
|
32
|
+
生成的框架依赖固定到 CLI 对应版本;安装失败会显示命令、退出码与输出,保留已生成文件供重试。未发布的源码功能请按下方本地开发方式验证。
|
|
68
33
|
|
|
69
34
|
### 创建项目
|
|
70
35
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
创建提示直接输出到终端;安装失败会显示包管理器命令、退出码和 stdout/stderr,已生成文件保留,可进入目录重试安装。`prebuild-install@7.1.3` 的弃用警告来自 `better-sqlite3` 的上游安装依赖,单独的警告不会令安装失败;不要为隐藏警告覆盖或删除原生安装器。
|
|
76
|
-
|
|
77
|
-
```bash
|
|
78
|
-
# 交互式创建(推荐)
|
|
79
|
-
hai create my-admin-app
|
|
80
|
-
|
|
81
|
-
# 指定模板与功能
|
|
82
|
-
hai create my-app -t full
|
|
83
|
-
hai create my-app -t custom -f iam,db,ai
|
|
36
|
+
```sh
|
|
37
|
+
hai create my-app --type fullstack --frontends web --yes
|
|
38
|
+
cd my-app
|
|
39
|
+
pnpm dev
|
|
84
40
|
```
|
|
85
41
|
|
|
86
|
-
|
|
42
|
+
省略选项时按向导选择,`--yes` 使用默认值。默认安装依赖并初始化 Git,`--no-install` / `--no-git` 可关闭。部署工具默认作为开发依赖安装,不需要时加 `--no-deploy`。
|
|
87
43
|
|
|
88
|
-
|
|
89
|
-
2. 选择模板(minimal / default / full / custom)
|
|
90
|
-
3. 选择功能模块(custom 模板下)
|
|
91
|
-
4. 是否添加示例代码
|
|
92
|
-
5. 选择包管理器(pnpm / npm / yarn)
|
|
93
|
-
6. 是否安装依赖
|
|
94
|
-
7. 是否初始化 Git
|
|
44
|
+
### 项目模板
|
|
95
45
|
|
|
96
|
-
|
|
46
|
+
| 类型 | 生成内容 |
|
|
47
|
+
| -------------------------- | ----------------------------------------------------------------- |
|
|
48
|
+
| `admin` / `website` / `h5` | SvelteKit 管理后台、官网、移动网页 |
|
|
49
|
+
| `api` | 共享 contract + API service 的 pnpm workspace |
|
|
50
|
+
| `mobile-app` | Svelte + Vite + Capacitor |
|
|
51
|
+
| `fullstack` | contract、API、共享界面与所选 Web/App/Desktop;miniapp 仅预留说明 |
|
|
97
52
|
|
|
98
|
-
|
|
99
|
-
# 交互式选择
|
|
100
|
-
hai add
|
|
53
|
+
`--template minimal|default|full|custom` 选择模块预设,`--features iam,db,...` 选择业务模块。Fullstack 始终保留默认管理界面所需的 IAM、数据库、缓存、加密、存储和审计;默认不安装 AI/ONNX/CUDA。
|
|
101
54
|
|
|
102
|
-
|
|
103
|
-
hai add iam
|
|
104
|
-
hai add storage
|
|
105
|
-
```
|
|
55
|
+
独立 `mobile-app` 选择 IAM 或 crypto 时会安装前端 crypto 并默认启用 typed client 加密传输;未选择 crypto 时可连接明确的明文 API。`PUBLIC_API_TRANSPORT=off` 只用于匹配的明文服务,`PUBLIC_API_KEY_EXCHANGE_PATH` 仅覆盖公开协商子路径。握手失败不会降级,服务端私钥不进入客户端。客户端先关闭 transport,再释放自身初始化的 crypto。
|
|
106
56
|
|
|
107
|
-
|
|
57
|
+
### Fullstack mini 管理后台
|
|
108
58
|
|
|
109
|
-
|
|
59
|
+
提供用户管理、角色、审计日志、头像和个人设置,以及主题、语言、引导和帮助中心。首次登录使用 `admin`,随机密码在根 `.env.local` 的 `HAI_ADMIN_DEFAULT_PASSWORD`;已有用户时不会重设密码。模板业务可按需求修改,权限检查始终在服务端执行。
|
|
110
60
|
|
|
111
|
-
|
|
112
|
-
# 校验配置完整性,补全缺失配置
|
|
113
|
-
hai init
|
|
61
|
+
### 应用配置与显示
|
|
114
62
|
|
|
115
|
-
#
|
|
116
|
-
hai init --force
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
### 代码生成
|
|
63
|
+
运行参数见 `.env.example`。公共基础 `.env` 与 `.env.dev/.env.test/.env.prod` 提交 Git,私有值放 `.env.local`。覆盖顺序为进程环境 > 本机私有文件 > 所选环境 > 公共基础。API 模板在服务目录放环境文件,fullstack 在工程根。模块 YAML、环境覆盖和显示信息说明见[使用指南](../../docs/usage/README.md#3-配置环境再开始开发)。
|
|
120
64
|
|
|
121
|
-
|
|
65
|
+
### 已有项目与代码生成
|
|
122
66
|
|
|
123
|
-
|
|
67
|
+
创建或添加 AI 会同时安装 reldb 与 vecdb;生成的启动代码按数据库 → 向量库 → AI 初始化,失败检查关闭结果并逆序清理。`.env.prod` 按启用模块选择 PostgreSQL(已选 MySQL 则保留)、Redis、S3、Qdrant,默认使用 Compose 的 `db/cache/storage/vecdb` 服务名。数据库/缓存密码、S3 凭据、模型密钥和受保护 Qdrant 的密钥必须由私有环境注入;容器外运行需覆盖这些内部地址。生产 Reach 的空 Provider 数组有意拒绝启动,须私有注入真实 `HAI_REACH_PROVIDERS` JSON。`hai add` 保留已有生产参数,只补新增字段;随后在现有业务入口接入新增模块。
|
|
124
68
|
|
|
125
|
-
```
|
|
126
|
-
|
|
69
|
+
```sh
|
|
70
|
+
hai add storage
|
|
71
|
+
hai init
|
|
127
72
|
hai generate
|
|
128
|
-
|
|
129
|
-
# 指定类型
|
|
130
|
-
hai generate page users
|
|
73
|
+
hai generate page dashboard
|
|
131
74
|
hai generate component UserCard
|
|
132
|
-
hai generate api
|
|
133
|
-
hai generate model
|
|
134
|
-
hai generate migration add-
|
|
135
|
-
|
|
136
|
-
# 快捷命令
|
|
137
|
-
hai g:page dashboard
|
|
138
|
-
hai g:component StatusBadge
|
|
139
|
-
hai g:api orders
|
|
140
|
-
hai g:model order
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
## 项目模板
|
|
144
|
-
|
|
145
|
-
| 模板 | 说明 | 包含功能 |
|
|
146
|
-
| --------- | -------- | --------------------------------------------------- |
|
|
147
|
-
| `minimal` | 最小模板 | 基础 SvelteKit/hai 骨架(移动端为 Svelte 5 + Vite) |
|
|
148
|
-
| `default` | 标准模板 | IAM + DB + Cache + Crypto |
|
|
149
|
-
| `full` | 完整模板 | 全量业务模块 + API Service / contract 机制 |
|
|
150
|
-
| `custom` | 自定义 | 按需选择 |
|
|
151
|
-
|
|
152
|
-
## Fullstack mini 管理后台
|
|
153
|
-
|
|
154
|
-
默认管理界面启用 `@h-ai/ui/guide` 新手引导与帮助中心:首次邀请、页面逐步高亮、搜索使用说明、手动重看和个人设置导览。Web/App/Desktop 共用 guide-store 和业务翻译,Web 用 Cookie、原生 WebView 用 localStorage,按用户和引导版本记录。新增页面只需补共享内容与 data-guide 锚点,见 [引导 skill](templates/skills/hai-ui/guide.md)。
|
|
155
|
-
|
|
156
|
-
`--type fullstack` 默认生成包含 IAM、reldb、cache、audit、storage、crypto 的管理工程;即使选择 minimal,管理所需模块也会保留。`--frontends` 选择 Web、Capacitor App 和 Tauri Desktop;miniapp 仍是说明占位,不参与运行或构建。
|
|
157
|
-
|
|
158
|
-
```powershell
|
|
159
|
-
hai create mini-admin --type fullstack --frontends web,app,desktop
|
|
160
|
-
cd mini-admin
|
|
161
|
-
pnpm.cmd install
|
|
162
|
-
pnpm.cmd dev
|
|
75
|
+
hai generate api orders
|
|
76
|
+
hai generate model order
|
|
77
|
+
hai generate migration add-orders
|
|
163
78
|
```
|
|
164
79
|
|
|
165
|
-
|
|
80
|
+
`hai add` 解析模块依赖并补充配置。`hai init` 补齐缺失配置和 AI 文件,保留已有自定义内容;`--force` 可重建模块配置,使用前检查差异。
|
|
166
81
|
|
|
167
|
-
|
|
82
|
+
page 只支持 SvelteKit 文件路由;api 会按目标应用选择 SvelteKit 文件路由或 serv 的共享 contract/procedure。API/fullstack 根目录可自动选择唯一后端;多应用用 `--workspace <包名或相对路径>`,也可进入目标 workspace。纯 Vite 的 page/api 组合明确拒绝;serv 不接受 `--output`,SvelteKit 路由输出须位于 `src/routes` 内,定制 `kit.files` 时明确拒绝猜测;API 目标须已安装 `@h-ai/kit` 与 `zod`。serv 只改写带 `@hai-generator` 标记的既有聚合入口,未知结构要求手动扩展,不创建平行路由。名称不能包含路径;默认拒绝覆盖,`--force` 只替换生成文件,不覆盖已有业务领域注册。整批预检,写入失败回滚本次修改。迁移只生成 up/down 函数,不自动执行;运行前确认数据影响。
|
|
168
83
|
|
|
169
|
-
-
|
|
170
|
-
- 初始角色为 `admin` / `user`,角色页显示人数并编辑说明,用户页分配角色。默认普通用户仅进入个人设置,直接请求管理接口也会被服务端拒绝;这些业务规则可按实际需求调整。
|
|
171
|
-
- 审计页按操作、资源与日期查询记录;成功登录、退出、密码变更和管理写操作写入审计,记录不含密码、token 或头像内容。
|
|
172
|
-
- 个人设置提供资料、头像、语言、主题和密码修改;偏好保存到 IAM 用户 metadata。头像接受 PNG/JPEG/WebP,最大 512 KiB,服务端验证图片内容并生成 storage key。
|
|
84
|
+
CLI 消息支持中文、英文和日文,优先使用 `HAI_CORE_DEFAULTLOCALE`,再按 `LC_ALL` → `LC_MESSAGES` → `LANG` 选择非空终端语言;`en`/`zh`/`ja` 地区变体映射到现有字典,`C`/`POSIX` 使用英文。未知语言保留 core 当前语言(默认中文)。例如 PowerShell 先执行 `$env:HAI_CORE_DEFAULTLOCALE='en-US'`,再执行 `hai generate`。CLI 内部命令也响应 `core.i18n.setGlobalLocale('en-US')` 的同进程语言切换;省略类型或名称会交互,取消后不写文件。生成源码的中文注释和用户指定名称保留原样。
|
|
173
85
|
|
|
174
|
-
|
|
86
|
+
`create`、`add`、`init` 与 `generate` 的提示、校验、模块/模板名称、描述和完成信息均使用当前 CLI 语言。静态选择目录在读取时翻译,同一进程切换 locale 也会生效。CLI 语言与生成应用的 `core.defaultLocale` 分开配置;生成的中文 README、配置/源码注释、用户输入和外部工具原始诊断保留原样。
|
|
175
87
|
|
|
176
|
-
|
|
88
|
+
### 构建与部署
|
|
177
89
|
|
|
178
|
-
|
|
90
|
+
数据库连接保存前使用所选后端的真实公开 Schema 校验:MySQL `ssl` 仅 `false` 或严格 TLS 对象,`{}` 默认校验证书链和 DNS 身份;PostgreSQL 保留其模式。CLI 已内联纯 Schema 和 Zod,配置校验不要求目标应用安装数据库包/驱动;实际运行应用仍需相应依赖。部署功能仍须能解析已安装的 `@h-ai/deploy`(生成工程将其作为开发依赖)。
|
|
179
91
|
|
|
180
|
-
|
|
92
|
+
`pnpm build` 只编译源码。镜像使用 `images/` 中独立 Dockerfile,由 `hai.build.json` 指定文件;`--images` 决定构建哪些镜像,`--services` 决定更新哪些服务。容器引擎 auto 优先 Podman,再尝试 Docker。下载、安装和整理生产依赖共用包缓存与 SQLite 驱动缓存,避免重复下载。
|
|
181
93
|
|
|
182
|
-
|
|
94
|
+
默认容器用于 CPU 运行或连接远程 AI 服务,不额外下载 GPU 运行库。需要使用部署机器上的 GPU 时,自行定制镜像和容器运行参数。
|
|
183
95
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
所有模板从 `_core.yml` 统一读取 `name`、`version`、`env`、`defaultLocale` 和 `logging`,通过 `core.config` 获取元信息并使用 `core.logger`。单应用配置在 `config/`;API workspace 在 `apps/<project>-service/config/`;fullstack 在 `packages/<project>-serv/config/`。日志级别与格式由 YAML 决定,不在初始化时另写固定 `logging` 覆盖。
|
|
191
|
-
|
|
192
|
-
环境变量可按 core 约定覆盖,如 `HAI_CORE_NAME`、`HAI_CORE_VERSION`、`HAI_CORE_ENV`、`HAI_CORE_LOGGING_LEVEL`;整体 `HAI_CORE` 覆盖遵循父节点优先规则。服务端配置变更后重启服务,容器显式设置 `HAI_CORE_ENV=production`,由该值启用生产安全策略。
|
|
193
|
-
|
|
194
|
-
叶子环境变量只覆盖 YAML 中已有的路径;注释掉的键须先取消注释,或使用 `HAI_DB`、`HAI_CACHE` 等整体对象覆盖。camelCase 不拆词,例如 `connectTimeout` 对应 `HAI_CACHE_CONNECTTIMEOUT`。语言列表由各前端与 shared 的 `project.inlang/settings.json` 维护,`_core.yml` 只配置默认语言。
|
|
195
|
-
|
|
196
|
-
Fullstack 的 `.env` 启用当前模块的运行参数;YAML 引用同名变量并保留本地回退。未启用模块的变量和可选 Schema 字段保留注释。使用 `dev:test` / `dev:prod` 与服务端 `start:test` / `start:prod` 加载环境覆盖。
|
|
197
|
-
|
|
198
|
-
SvelteKit 的服务端 layout 只下发名称、版本、环境和默认语言等公开白名单。独立 mobile-app 的 Vite 配置在 Node 构建阶段通过 core 解析 YAML,再注入公开值及浏览器日志级别/格式;修改 YAML 或覆盖变量后需要重新构建。Fullstack 前端通过加密的 `app.info` 获取服务端公开元信息。任何模板都不能把完整 core/模块配置、密钥或日志脱敏上下文注入浏览器。
|
|
199
|
-
|
|
200
|
-
## 全局选项
|
|
201
|
-
|
|
202
|
-
构建和部署参数的含义、默认值与示例见[使用指南](../../docs/usage/README.md)。交付文件使用应用根 package.json 的版本,CLI 版本不会代替应用版本。
|
|
203
|
-
|
|
204
|
-
| 选项 | 说明 | 默认值 | 示例 |
|
|
205
|
-
| ------------------ | ------------- | -------- | ----------------------------- |
|
|
206
|
-
| `-v, --verbose` | 显示详细输出 | false | `hai create my-app --verbose` |
|
|
207
|
-
| `-C, --cwd <path>` | 指定工作目录 | 当前目录 | `hai build --cwd ../my-app` |
|
|
208
|
-
| `-h, --help` | 显示命令帮助 | false | `hai build --help` |
|
|
209
|
-
| `-V, --version` | 显示 CLI 版本 | false | `hai --version` |
|
|
210
|
-
|
|
211
|
-
## 开发阶段本地使用
|
|
212
|
-
|
|
213
|
-
> 适用于尚未发布到 npm、在 monorepo 中本地调试 CLI 的场景。
|
|
214
|
-
|
|
215
|
-
### 1. 构建
|
|
216
|
-
|
|
217
|
-
```bash
|
|
218
|
-
# 构建 CLI(生成 dist/)
|
|
219
|
-
pnpm --filter @h-ai/cli build
|
|
220
|
-
|
|
221
|
-
# 或启动 watch 模式(修改源码后自动重建)
|
|
222
|
-
pnpm --filter @h-ai/cli dev
|
|
96
|
+
```sh
|
|
97
|
+
pnpm build --target docker
|
|
98
|
+
pnpm run deploy --env prod
|
|
99
|
+
pnpm run deploy --env prod --build --services web
|
|
100
|
+
pnpm run deploy --env prod --build --bundle-only
|
|
223
101
|
```
|
|
224
102
|
|
|
225
|
-
|
|
103
|
+
完整包包含应用和自建中间件镜像。部署缓存、tar 与操作目录默认放在工程根 `.hai/deploy/<环境>/`;`--output` 可显式指定相对命令执行目录的 tar 路径。仅打包不询问 SSH,会同时生成 tar、带逐项说明的 `deploy-target.json` 与 Windows `deploy.ps1`、Linux/macOS `deploy.sh`。执行上传脚本前先修改并核对 `deploy-target.json`,两个脚本均读取此文件;完全隔离的 Linux 服务器解包后运行 `sh apply.sh`。首次部署必须完整;部分更新保留未选服务和数据卷。每步报告结果,失败返回非零并尝试恢复。前置工具、缓存、版本和恢复流程见[部署说明](../deploy/README.md)。
|
|
226
104
|
|
|
227
|
-
|
|
105
|
+
部署失败时分别显示本地受管理进程终止确认、远端未知/脚本已完成状态和结果文件路径;本地 SSH 结束不证明远端停止。未知状态先核对服务器,CLI 不自动重跑发布或回滚。Windows 命令使用内嵌的系统 PowerShell/.NET Job,需允许 Add-Type,失败不会裸启动。
|
|
228
106
|
|
|
229
|
-
|
|
230
|
-
# 从仓库根目录运行
|
|
231
|
-
node packages/cli/dist/index.js create my-app
|
|
232
|
-
node packages/cli/dist/index.js create my-app --type admin --features iam,db
|
|
233
|
-
```
|
|
107
|
+
正常前台部署及同步失败恢复收尾、发布终态后显式释放 `.deploy.lock`,后台服务继续运行不阻塞后续发布。HUP/INT/TERM 中断或父 shell 被强杀时,继承描述符的活跃子命令仍持锁,全部 holder 退出或服务器重启后才释放;锁文件永久保留,不删除或替换。
|
|
234
108
|
|
|
235
|
-
|
|
109
|
+
桌面安装包用 `pnpm build --target desktop --platform windows|linux|macos --arch x64|arm64`,在对应系统准备工具链并验证。容器里的 Web 页面不代替原生安装包。
|
|
236
110
|
|
|
237
|
-
|
|
238
|
-
node /path/to/hai-framework/packages/cli/dist/index.js create my-app
|
|
239
|
-
```
|
|
111
|
+
### 使用 AI 辅助开发
|
|
240
112
|
|
|
241
|
-
|
|
113
|
+
生成工程根的 `AGENTS.md` 导航到 `.agents/skills/`;Claude、Copilot、OpenCode 的入口引用同一套规则。普通功能用 [应用开发](templates/skills/hai-app-create/SKILL.md),较大文档先[审查](templates/skills/hai-spec-review/SKILL.md)再[逐项实施](templates/skills/hai-spec-implement/SKILL.md),框架升级用[升级与同步](templates/skills/hai-framework-sync/SKILL.md)。
|
|
242
114
|
|
|
243
|
-
|
|
115
|
+
Skill 入口保存任务边界,相邻参考按需读取。`hai init` / `hai add` 只补齐缺失内容,已有技能与自定义规则需合并;同步时复制完整目录。
|
|
244
116
|
|
|
245
|
-
|
|
246
|
-
# 在 packages/cli 目录下执行
|
|
247
|
-
cd packages/cli
|
|
248
|
-
pnpm link --global
|
|
117
|
+
## 开发测试
|
|
249
118
|
|
|
250
|
-
|
|
251
|
-
hai --version
|
|
252
|
-
hai create my-app
|
|
253
|
-
```
|
|
254
|
-
|
|
255
|
-
> 使用完毕后可解除链接:`pnpm unlink --global @h-ai/cli`
|
|
119
|
+
### 开发阶段本地使用
|
|
256
120
|
|
|
257
|
-
|
|
121
|
+
在框架仓库根执行,用当前源码生成项目。完整测试命令如下,部署门禁另需可用 Podman/Docker。
|
|
258
122
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
123
|
+
```sh
|
|
124
|
+
pnpm --filter @h-ai/cli build
|
|
125
|
+
node packages/cli/dist/index.js create ../my-app
|
|
126
|
+
pnpm --filter @h-ai/cli typecheck
|
|
127
|
+
pnpm --filter @h-ai/cli lint
|
|
128
|
+
pnpm --filter @h-ai/cli test
|
|
129
|
+
pnpm check:skills
|
|
130
|
+
pnpm --filter @h-ai/cli test:scaffold-gates
|
|
131
|
+
pnpm --filter @h-ai/cli test:scaffold-gates --list --json
|
|
132
|
+
pnpm --filter @h-ai/cli test:deploy-gates
|
|
264
133
|
```
|
|
265
134
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
运行 `hai deploy --env test`,先检查 `.env.test`,再逐项选择中间件默认配置、自定义连接或保持不变。`--yes` 保留目标环境的完整配置并为其余项采用当前后端默认值,`--env-dir` 指定环境文件目录。明确传入目标服务目录,如 `hai deploy packages/my-app-serv --env test`,不猜测 workspace 布局;容器启动脚本保留明确环境标识。公共连接项写目标环境文件,凭据写 `.env.local` 并脱敏显示。
|
|
269
|
-
|
|
270
|
-
配置已完备时可在向导中选择“直接部署”,或执行 `hai deploy packages/my-app-serv --env prod --yes --skip-middleware`,跳过全部中间件提示、配置写入和资源开通。部署目标缺失时引导填写 SSH/Vercel 参数;SSH 地址、端口、密钥路径、远程目录及 Token 只保存到被 Git 忽略的 `.env.local`,下次自动复用。可编辑其中的 `HAI_DEPLOY_PROVIDER` 更新目标;私钥只填写路径。
|
|
271
|
-
|
|
272
|
-
失败与降级提示也必须国际化:官网 API 按请求 locale 生成 AI 降级/邮件送达状态;未送达不能称为已接收。CLI 部署状态使用 cliM,Gallery 加密能力限制使用双语消息。中文与英文分别验证未配置、失败和成功路径,无需调用付费服务。
|
|
135
|
+
生成门禁保留八个场景,逐应用类型执行真实安装、编译及 HTTP/浏览器验收。scaffold 与生成路由 runtime 两个重型文件分批顺序执行,避免实测的构建和安装资源争用;三个语言、CLI 进程和环境消费文件可与 runtime 在最多两个 worker 内并行。各场景复用 E2E 入口自带的完整构建,原有生产构建隔离检查在 E2E 后验证非空的真实产物。真实容器部署按运行形态选取 API、SSR(admin 代表 website/h5 共用的 Dockerfile 与部署分支)、静态移动前端和 fullstack;资源拥有权、认证/传输、增量更新、损坏制品与回滚验收保留。部署夹具启用 init 并验证孤儿进程实际回收;快速 Nginx 门禁用生产同版本镜像对部署包执行 `nginx -t`,普通单测不探测引擎。workspace 的 compile 通过真实依赖图构建 contract,fullstack 先准备共享 i18n,避免重复编译 contract。
|
|
273
136
|
|
|
274
|
-
|
|
137
|
+
脚手架门禁生成真实项目,执行安装、typecheck、lint、build、test 和浏览器测试,同时覆盖生成路由的实际 HTTP 入口、CLI 进程语言选择和环境文件消费;`--generate`、`--i18n` 可分别定向复测。部署门禁覆盖实际资源拥有权、动态宿主端口隔离,以及离线包、SSH/人工发布、增量更新和回滚。只回收本轮已记录的容器 ID 和私有镜像 tag;安全元数据报告保留在 ignored `tmp/validation/module-review/VERIFY-05/`。已生成的浏览器截图、trace 和报告默认保留在 ignored `tmp/validation/module-review/scaffold-browser/` 或 `deploy-browser/`;也可显式指定证据、HTML 报告和输出目录。临时工程、密钥、数据及进程仍自动回收。原生壳和真实云服务单独验收。
|
|
275
138
|
|
|
276
|
-
|
|
139
|
+
可选 Windows 安装包验收需准备 Rust 的 `x86_64-pc-windows-msvc` 目标和 MSVC 构建工具。设置 `HAI_CLI_NATIVE_BUILD=1` 后运行 `pnpm --filter @h-ai/cli test:scaffold-gates`,现有 fullstack 场景会构建 NSIS 安装包并核对应用根版本与产物文件名。可用 `CARGO_BUILD_JOBS=2` 限制 Rust 编译并发。原生 UI 交互与设备能力另行验收。
|
|
277
140
|
|
|
278
|
-
|
|
141
|
+
部署夹具先检查固定公开基础镜像,仅明确缺失时拉取,可沿用 HAI_DEPLOY_E2E_MIRROR;公共缓存不进入清理账本。成功 create 后先登记容器 ID,再在其私有 PID namespace 内异步安装 APT/pip 并启动 sshd。准备失败、超时或合作式取消会等待本地客户端退出,按已登记 ID 回收并确认消失;仅重型嵌套 Podman 夹具使用特权。HAI_DEPLOY_E2E_APT_MIRROR 只接受镜像站主机名并保留 HTTPS。拥有权测试用固定公开镜像的本轮私有 tag,保留同内容外部 tag、重指向保护、动态端口和外部 sentinel 检查。create 回执丢失且未获得可信 ID、测试进程被强制终止等情况仍需记录未知状态,不能按名称或 label 认领清理。
|
|
279
142
|
|
|
280
|
-
|
|
143
|
+
`--generate` 是定向路由门禁:复用仓库已安装依赖,实际生成、构建并访问 SvelteKit、serv API、fullstack 后端的新路由(含 transport)。它不替代上面的完整安装与浏览器矩阵。
|
|
281
144
|
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
[完整 IAM 配置 / IAM configuration](../iam/README.md)
|
|
285
|
-
|
|
286
|
-
### 6. 运行测试
|
|
287
|
-
|
|
288
|
-
```bash
|
|
289
|
-
# 单元测试 + E2E 模板生成测试
|
|
290
|
-
pnpm --filter @h-ai/cli test
|
|
291
|
-
|
|
292
|
-
# 真实脚手架 E2E 门禁(生成项目后执行 install/typecheck/lint/build/test/e2e)
|
|
293
|
-
pnpm --filter @h-ai/cli test:e2e
|
|
294
|
-
|
|
295
|
-
# watch 模式
|
|
296
|
-
pnpm --filter @h-ai/cli test:watch
|
|
297
|
-
|
|
298
|
-
# 覆盖率
|
|
299
|
-
pnpm --filter @h-ai/cli test:coverage
|
|
300
|
-
```
|
|
145
|
+
`test:e2e` 为本轮服务显式选择隔离的测试后端及绝对数据目录,服务子进程不继承外部 `HAI_*` / `PUBLIC_*` / `VITE_*` 配置或读取用户 `.env.local`。测试专用 `HAI_E2E=1` 不改变普通开发、生产 dotenv 或共享后端要求;启用 transport 的场景使用新建可信 SM2 ring 与实际 registry。样板浏览器阶段另用独立 TCP 计数进程核验外部数据库配置未被触达。完整部署验收仍保留 fullstack 的真实 Redis/S3、增量发布与回滚。
|
|
301
146
|
|
|
302
|
-
|
|
147
|
+
`--i18n` 定向门禁构建 CLI 后,在独立进程中验证语言优先级、help、生成成功与失败,并重放中英日文选择/名称校验/取消交互。
|
|
303
148
|
|
|
304
|
-
|
|
149
|
+
## 技能工作流与前端指引
|
|
305
150
|
|
|
306
|
-
|
|
151
|
+
工作流统一使用 hai-spec-review、hai-spec-implement、hai-app-create、hai-app-tests、hai-app-review、hai-pr-review。需求、验收、发现与证据通过 [交接契约](templates/skills/hai-spec-implement/handoff.md) 连接,文档差异仍沿已有 Git 基线推进。
|
|
307
152
|
|
|
308
|
-
|
|
153
|
+
UI 模块成套交付 [hai-ui-design](templates/skills/hai-ui-design/SKILL.md)、hai-ui 与 [hai-ui-review](templates/skills/hai-ui-review/SKILL.md);纯 API 模板排除这些前端技能。init/add 保留已有私有入口并补齐缺失参考资源。仓库同职责技能采用同名入口。
|
|
309
154
|
|
|
310
|
-
##
|
|
155
|
+
## 许可证
|
|
311
156
|
|
|
312
157
|
Apache-2.0
|