@h-ai/cli 0.1.0-alpha.65 → 0.1.0-alpha.67
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 +66 -251
- package/README.ja.md +67 -252
- package/README.md +66 -251
- package/dist/{chunk-47V5OT22.js → chunk-7DSURTJ4.js} +32 -115
- package/dist/chunk-7DSURTJ4.js.map +1 -0
- package/dist/{chunk-IPG3QNYK.js → chunk-AOQ4N657.js} +212 -8
- package/dist/chunk-AOQ4N657.js.map +1 -0
- package/dist/cli-config-templates-6AHNUGBN.js +5 -0
- package/dist/{cli-config-templates-SJ2MBIR7.js.map → cli-config-templates-6AHNUGBN.js.map} +1 -1
- package/dist/{cli-skill-templates-A5VIR5J6.js → cli-skill-templates-FC3QRKDO.js} +3 -3
- package/dist/{cli-skill-templates-A5VIR5J6.js.map → cli-skill-templates-FC3QRKDO.js.map} +1 -1
- package/dist/index.js +644 -391
- package/dist/index.js.map +1 -1
- package/dist/{src-6PPBKQ6Q.js → src-2V6VP4I5.js} +972 -520
- package/dist/src-2V6VP4I5.js.map +1 -0
- package/package.json +8 -8
- package/templates/README.md +48 -145
- package/templates/apps/admin/src/routes/admin/+layout.svelte.hbs +1 -1
- package/templates/apps/api/.dockerignore.hbs +18 -12
- package/templates/apps/api/.gitignore.hbs +9 -1
- package/templates/apps/api/apps/{{projectName}}-contract/README.md.hbs +23 -2
- package/templates/apps/api/apps/{{projectName}}-service/README.md.hbs +28 -7
- package/templates/apps/api/apps/{{projectName}}-service/package.json.hbs +1 -3
- package/templates/apps/api/hai.build.json.hbs +1 -0
- package/templates/apps/api/images/app.Dockerfile.hbs +35 -0
- package/templates/apps/api/package.json.hbs +10 -8
- package/templates/apps/fullstack/.dockerignore.hbs +18 -14
- package/templates/apps/fullstack/.gitignore.hbs +9 -1
- package/templates/apps/fullstack/apps/{{projectName}}-app/README.md.hbs +23 -8
- package/templates/apps/fullstack/apps/{{projectName}}-app/index.html.hbs +1 -0
- package/templates/apps/fullstack/apps/{{projectName}}-app/package.json.hbs +0 -2
- package/templates/apps/fullstack/apps/{{projectName}}-app/public/runtime-config.js.hbs +4 -0
- package/templates/apps/fullstack/apps/{{projectName}}-app/vite.config.ts.hbs +3 -3
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/README.md.hbs +25 -10
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/package.json.hbs +2 -3
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/src/lib.rs.hbs +73 -2
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/tauri.conf.json.hbs +2 -2
- package/templates/apps/fullstack/apps/{{projectName}}-desktop/vite.config.ts.hbs +2 -2
- package/templates/apps/fullstack/apps/{{projectName}}-miniapp/README.md.hbs +16 -6
- package/templates/apps/fullstack/apps/{{projectName}}-web/README.md.hbs +24 -10
- package/templates/apps/fullstack/apps/{{projectName}}-web/package.json.hbs +0 -2
- package/templates/apps/fullstack/apps/{{projectName}}-web/vite.config.ts.hbs +3 -3
- package/templates/apps/fullstack/e2e/fullstack.spec.ts.hbs +12 -1
- package/templates/apps/fullstack/hai.build.json.hbs +7 -0
- 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 +7 -12
- package/templates/apps/fullstack/packages/{{projectName}}-contract/README.md.hbs +23 -2
- package/templates/apps/fullstack/packages/{{projectName}}-serv/README.md.hbs +28 -7
- package/templates/apps/fullstack/packages/{{projectName}}-serv/package.json.hbs +0 -1
- package/templates/apps/fullstack/packages/{{projectName}}-shared/.gitignore.hbs +7 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/README.md.hbs +33 -12
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/components/AppShell.svelte.hbs +2 -2
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/pages/settings.svelte.hbs +3 -3
- package/templates/apps/fullstack/packages/{{projectName}}-shared/tests/api-client.test.ts.hbs +2 -2
- package/templates/apps/h5/src/routes/+layout.svelte.hbs +2 -2
- package/templates/apps/mobile-app/index.html.hbs +1 -0
- package/templates/apps/mobile-app/public/runtime-config.js +1 -0
- package/templates/apps/mobile-app/src/App.svelte.hbs +2 -2
- package/templates/apps/mobile-app/src/lib/api.ts.hbs +2 -1
- package/templates/apps/mobile-app/src/lib/app-config.ts.hbs +3 -2
- package/templates/apps/mobile-app/src/lib/pages/home.svelte.hbs +2 -2
- package/templates/apps/website/src/routes/+layout.svelte.hbs +3 -3
- package/templates/apps/website/src/routes/services/+page.svelte.hbs +1 -1
- package/templates/base/.dockerignore.hbs +18 -13
- package/templates/base/.gitignore.hbs +9 -1
- package/templates/base/e2e/app.spec.ts.hbs +10 -0
- package/templates/base/hai.build.json.hbs +1 -0
- package/templates/base/images/app.Dockerfile.hbs +64 -0
- package/templates/base/{docker → images/web}/nginx.conf.hbs +6 -0
- package/templates/base/package.json.hbs +20 -19
- package/templates/base/svelte.config.js.hbs +2 -0
- package/templates/base/vite.config.ts.hbs +9 -3
- package/templates/shared/.gitattributes +11 -0
- package/templates/shared/container-runtime-config.sh +30 -0
- package/templates/shared/run-e2e.mjs +65 -0
- package/templates/shared/vite-runtime-config.ts +54 -0
- package/templates/skills/AGENTS.md +3 -3
- package/templates/skills/bridges/admin/AGENTS.md +1 -1
- package/templates/skills/bridges/api/AGENTS.md +1 -1
- package/templates/skills/bridges/fullstack/AGENTS.md.hbs +1 -1
- package/templates/skills/bridges/h5/AGENTS.md +1 -1
- package/templates/skills/bridges/mobile-app/AGENTS.md +1 -1
- package/templates/skills/bridges/website/AGENTS.md +1 -1
- package/templates/skills/hai-api-client/SKILL.md +14 -161
- package/templates/skills/hai-api-client/reference.md +166 -0
- package/templates/skills/hai-api-contract/SKILL.md +15 -273
- package/templates/skills/hai-api-contract/reference.md +278 -0
- package/templates/skills/hai-app-create/SKILL.md +2 -2
- package/templates/skills/hai-app-create/development.md +6 -4
- package/templates/skills/hai-app-create/reference.md +5 -4
- package/templates/skills/hai-app-review/SKILL.md +1 -1
- package/templates/skills/hai-app-tests/SKILL.md +4 -3
- package/templates/skills/hai-app-tests/reference.md +2 -2
- package/templates/skills/hai-app-tests/validation.md +31 -0
- package/templates/skills/hai-audit/SKILL.md +17 -142
- package/templates/skills/hai-audit/reference.md +145 -0
- package/templates/skills/hai-build/SKILL.md +24 -3
- package/templates/skills/hai-build/reference.md +10 -9
- package/templates/skills/hai-cache/SKILL.md +15 -182
- package/templates/skills/hai-cache/reference.md +187 -0
- package/templates/skills/hai-capacitor/SKILL.md +4 -3
- package/templates/skills/hai-capacitor/reference.md +6 -4
- package/templates/skills/hai-ci/SKILL.md +2 -0
- package/templates/skills/hai-core/SKILL.md +3 -3
- package/templates/skills/hai-crypto/SKILL.md +16 -252
- package/templates/skills/hai-crypto/reference.md +256 -0
- package/templates/skills/hai-datapipe/SKILL.md +15 -196
- package/templates/skills/hai-datapipe/reference.md +202 -0
- package/templates/skills/hai-deploy/SKILL.md +28 -271
- package/templates/skills/hai-deploy/middleware.md +6 -18
- 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 +1 -3
- package/templates/skills/hai-kit/SKILL.md +12 -167
- package/templates/skills/hai-kit/reference.md +172 -0
- package/templates/skills/hai-payment/SKILL.md +19 -251
- package/templates/skills/hai-payment/reference.md +256 -0
- package/templates/skills/hai-pr-review/SKILL.md +4 -4
- package/templates/skills/hai-reach/SKILL.md +2 -2
- package/templates/skills/hai-reldb/SKILL.md +1 -1
- package/templates/skills/hai-scheduler/SKILL.md +15 -195
- package/templates/skills/hai-scheduler/reference.md +202 -0
- package/templates/skills/hai-serv/SKILL.md +2 -2
- package/templates/skills/hai-spec-implement/SKILL.md +1 -1
- package/templates/skills/hai-spec-implement/workflow.md +3 -3
- package/templates/skills/hai-storage/SKILL.md +17 -238
- package/templates/skills/hai-storage/reference.md +243 -0
- package/templates/skills/hai-ui/SKILL.md +1 -1
- package/templates/skills/hai-ui/reference.md +11 -5
- package/templates/skills/hai-vecdb/SKILL.md +2 -2
- package/dist/chunk-47V5OT22.js.map +0 -1
- package/dist/chunk-IPG3QNYK.js.map +0 -1
- package/dist/cli-config-templates-SJ2MBIR7.js +0 -5
- package/dist/src-6PPBKQ6Q.js.map +0 -1
- package/templates/apps/api/Dockerfile.hbs +0 -48
- package/templates/apps/fullstack/Dockerfile.hbs +0 -69
- package/templates/base/Dockerfile.hbs +0 -79
- /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/README.md
CHANGED
|
@@ -1,306 +1,121 @@
|
|
|
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
|
+
用 `hai` 创建应用、添加模块、生成基础代码,再构建和交付应用。支持 SvelteKit、独立 API 和前后端分离工程。第一次使用可按[完整使用指南](../../docs/usage/README.md)从创建走到部署。
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
## 核心功能清单
|
|
12
12
|
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
- **模板选择** — 最小 / 标准 / 完整 / 自定义四种项目模板
|
|
18
|
-
- **功能组合** — 按需启用 IAM、DB、AI、Storage、Crypto 等模块
|
|
19
|
-
- **API 服务脚手架** — API Service 模板使用 `@h-ai/api-contract` + `@h-ai/serv` 组合公共 contract / procedures,并通过 `@h-ai/api-client` typed client 消费
|
|
20
|
-
- **自动依赖解析** — 选择功能时自动补全依赖(如 IAM 自动引入 Crypto)
|
|
13
|
+
- 创建管理后台、企业官网、H5、API、移动应用或多端 fullstack 工程。
|
|
14
|
+
- 为已有项目添加模块、补齐配置和 AI 开发指引。
|
|
15
|
+
- 生成页面、组件、接口、模型和迁移骨架。
|
|
16
|
+
- 按镜像构建,完整离线交付,或只更新选中的服务。
|
|
21
17
|
|
|
22
|
-
##
|
|
23
|
-
|
|
24
|
-
CLI 从 `templates/skills/` 将所选 skill 的完整目录复制到生成项目 `.agents/skills/`。`SKILL.md` 提供能力边界和任务导航,`reference.md`/`guide.md` 保留按需范本;同步时不能只复制入口。AGENTS.md 保存应用约束,Claude/Copilot 桥接文件引用它;修改模板需同步相关仓库 skills。模板生成测试会核对参考文件的完整交付。
|
|
25
|
-
|
|
26
|
-
业务以用户当前明确要求及其指定的需求/设计文档为准。模板 AGENTS、README、skills、生成代码及测试中的角色/权限、流程、限额和架构是可调整的初始方案。审查将差异列为模板适配项,不因偏离模板判定需求错误;实施按授权同步修改冲突代码、测试和过期规则。框架 API 仍以安装版本公开契约为准,服务端授权、资源隔离、输入校验和凭据保护仍需落实。已有项目需显式合并这些规则,`hai init` 不覆盖现有文件。
|
|
27
|
-
|
|
28
|
-
所有应用类型均交付 `hai-spec-review`:生成前严格检查需求/设计文档的完备性、歧义、技术及框架使用错误、命名一致性,给出带位置和修正建议的问题清单;问题解决且证据充分后才判定可以进入 AI 生成。`hai init` / `hai add` 同时为已有项目补齐该工作流 skill,保留自定义文件。
|
|
29
|
-
|
|
30
|
-
审查后的文档实施使用独立的 `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 返修后合并”;仅规划时不实施,指定任务先核验依赖,远端操作依实际授权。
|
|
31
|
-
|
|
32
|
-
需求/设计文档提交后,可以请求“我修改了 docs/需求.md、docs/设计.md,请帮我更新实现”。Skill 在原清单中区分已验收文档 SHA、固定目标文档 SHA 与已验收实现 SHA,比较完整文档集合的净差异(含增删、重命名及关联影响),更新原任务或新建任务,逐项在对应分支测试、合并。全部差异处理且整体验收通过后,才提交新的已验收基线;部分完成或中断保留旧基线。旧项目缺少可信基线时先追溯/核验,不猜测版本。详见 [文档差异与基线流程](templates/skills/hai-spec-implement/changes.md)。`hai init` / `hai add` 会补齐新增参考文件,已存在的入口、执行流程和任务范本仍须对照模板合并。
|
|
33
|
-
|
|
34
|
-
日常新增、修改、修复功能由 `AGENTS.md` 引导读取 `hai-app-create/SKILL.md` 与 `development.md`:先把需求映射到框架现成功能、配置和扩展点,再依据当前安装版本的 exports/类型实现。适用能力优先复用;能力不足时说明具体缺口,不为模块覆盖率安装无关依赖。Codex 使用 `.agents/skills/`,仍需遵循项目根 `AGENTS.md` 的常驻规则。
|
|
35
|
-
|
|
36
|
-
工具入口共享同一份规则与技能: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)。
|
|
37
|
-
|
|
38
|
-
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)。
|
|
39
|
-
|
|
40
|
-
Claude Code v2.1.277 起也可直接读取根 `AGENTS.md`(没有更高优先级项目 CLAUDE 文件且相关内置插件启用时)。保留这一行导入可兼容旧版及未开启该能力的会话,官方说明导入不会重复加载规则;仍无须 `.claude/` 目录。参见 [AGENTS.md 支持](https://code.claude.com/docs/en/memory#agentsmd)。
|
|
41
|
-
|
|
42
|
-
生成项目共享 `eslint-rules.js`,lint 拦截显式 `any`、console、无理由抑制、双重 unknown 断言、框架内部源码导入及明确的 localStorage 敏感键写入;合理的第三方 workaround 需局部说明。静态规则不能证明权限隔离、输入安全、事务或日志脱敏,相关行为仍需测试与审查。
|
|
43
|
-
|
|
44
|
-
已有项目先更新 CLI,再运行 `hai init` 补齐缺失的流程 skill、参考资源和入口;该操作保留现有文件,即使 `--force` 也不覆盖 AI 规则。旧入口、已存在的 skills、ESLint 配置与脚本需要对照新生成项目合并,缺失的 .npmrc/.gitignore 也需补齐;只补文件不会自动升级旧规则。模板变更未发布前可通过本仓库构建的 CLI 生成对照项目,不要把未发布能力当作已安装包能力。
|
|
45
|
-
|
|
46
|
-
AI 文件写入前会解析已有文件和目录链接;共享技能与项目桥接文件均限制在当前项目内。链接指向项目外时停止写入。已有 `.claude/` 目录及其链接不参与生成,`hai init` / `hai add` 不修改或删除其中的内容。
|
|
47
|
-
|
|
48
|
-
交付验证同时检查发布归档和生成项目。`.npmrc` / `.gitignore` 在模板源中使用 `.hbs` 后缀,避免打包时被排除;生成时仍恢复正常文件名,保留依赖布局与敏感产物忽略规则。归档回归检查全部模板都进入 `.tgz`,不能仅验证源码目录中的 create。
|
|
49
|
-
|
|
50
|
-
## 快速开始
|
|
51
|
-
|
|
52
|
-
要求 Node.js 22.22.2+ / 24.15.0+ / 26+;生成的根项目和工作区包均声明相同最低版本。
|
|
18
|
+
## 使用入门
|
|
53
19
|
|
|
54
20
|
### 安装 CLI
|
|
55
21
|
|
|
56
|
-
|
|
22
|
+
需要符合项目 `engines` 的 Node.js(`^22.22.2 || ^24.15.0 || >=26.0.0`)与 pnpm 12.11.2。PowerShell 使用 `pnpm.cmd`。
|
|
57
23
|
|
|
58
|
-
```
|
|
24
|
+
```sh
|
|
59
25
|
pnpm add -g @h-ai/cli
|
|
60
26
|
hai --version
|
|
27
|
+
hai --help
|
|
61
28
|
```
|
|
62
29
|
|
|
63
|
-
|
|
30
|
+
生成的框架依赖固定到 CLI 对应版本;安装失败会显示命令、退出码与输出,保留已生成文件供重试。未发布的源码功能请按下方本地开发方式验证。
|
|
64
31
|
|
|
65
32
|
### 创建项目
|
|
66
33
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
创建提示直接输出到终端;安装失败会显示包管理器命令、退出码和 stdout/stderr,已生成文件保留,可进入目录重试安装。`prebuild-install@7.1.3` 的弃用警告来自 `better-sqlite3` 的上游安装依赖,单独的警告不会令安装失败;不要为隐藏警告覆盖或删除原生安装器。
|
|
72
|
-
|
|
73
|
-
```bash
|
|
74
|
-
# 交互式创建(推荐)
|
|
75
|
-
hai create my-admin-app
|
|
76
|
-
|
|
77
|
-
# 指定模板与功能
|
|
78
|
-
hai create my-app -t full
|
|
79
|
-
hai create my-app -t custom -f iam,db,ai
|
|
34
|
+
```sh
|
|
35
|
+
hai create my-app --type fullstack --frontends web --yes
|
|
36
|
+
cd my-app
|
|
37
|
+
pnpm dev
|
|
80
38
|
```
|
|
81
39
|
|
|
82
|
-
|
|
40
|
+
省略选项时按向导选择,`--yes` 使用默认值。默认安装依赖并初始化 Git,`--no-install` / `--no-git` 可关闭。部署工具默认作为开发依赖安装,不需要时加 `--no-deploy`。
|
|
83
41
|
|
|
84
|
-
|
|
85
|
-
2. 选择模板(minimal / default / full / custom)
|
|
86
|
-
3. 选择功能模块(custom 模板下)
|
|
87
|
-
4. 是否添加示例代码
|
|
88
|
-
5. 选择包管理器(pnpm / npm / yarn)
|
|
89
|
-
6. 是否安装依赖
|
|
90
|
-
7. 是否初始化 Git
|
|
42
|
+
### 项目模板
|
|
91
43
|
|
|
92
|
-
|
|
44
|
+
| 类型 | 生成内容 |
|
|
45
|
+
| -------------------------- | ----------------------------------------------------------------- |
|
|
46
|
+
| `admin` / `website` / `h5` | SvelteKit 管理后台、官网、移动网页 |
|
|
47
|
+
| `api` | 共享 contract + API service 的 pnpm workspace |
|
|
48
|
+
| `mobile-app` | Svelte + Vite + Capacitor |
|
|
49
|
+
| `fullstack` | contract、API、共享界面与所选 Web/App/Desktop;miniapp 仅预留说明 |
|
|
93
50
|
|
|
94
|
-
|
|
95
|
-
# 交互式选择
|
|
96
|
-
hai add
|
|
51
|
+
`--template minimal|default|full|custom` 选择模块预设,`--features iam,db,...` 选择业务模块。Fullstack 始终保留默认管理界面所需的 IAM、数据库、缓存、加密、存储和审计;默认不安装 AI/ONNX/CUDA。
|
|
97
52
|
|
|
98
|
-
|
|
99
|
-
hai add iam
|
|
100
|
-
hai add storage
|
|
101
|
-
```
|
|
53
|
+
### Fullstack mini 管理后台
|
|
102
54
|
|
|
103
|
-
|
|
55
|
+
提供用户管理、角色、审计日志、头像和个人设置,以及主题、语言、引导和帮助中心。首次登录使用 `admin`,随机密码在根 `.env.local` 的 `HAI_ADMIN_DEFAULT_PASSWORD`;已有用户时不会重设密码。模板业务可按需求修改,权限检查始终在服务端执行。
|
|
104
56
|
|
|
105
|
-
###
|
|
57
|
+
### 应用配置与显示
|
|
106
58
|
|
|
107
|
-
|
|
108
|
-
# 校验配置完整性,补全缺失配置
|
|
109
|
-
hai init
|
|
110
|
-
|
|
111
|
-
# 强制重新生成所有配置
|
|
112
|
-
hai init --force
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
### 代码生成
|
|
116
|
-
|
|
117
|
-
名称必须以字母开头,仅含字母、数字、短横线或下划线,不接受路径。默认先预检全部输出并拒绝覆盖;显式 `--force` 才替换文件。输出及符号链接目标必须留在工作目录内。
|
|
59
|
+
运行参数见 `.env.example`。公共基础 `.env` 与 `.env.dev/.env.test/.env.prod` 提交 Git,私有值放 `.env.local`。覆盖顺序为进程环境 > 本机私有文件 > 所选环境 > 公共基础。API 模板在服务目录放环境文件,fullstack 在工程根。模块 YAML、环境覆盖和显示信息说明见[使用指南](../../docs/usage/README.md#3-配置环境再开始开发)。
|
|
118
60
|
|
|
119
|
-
|
|
61
|
+
### 已有项目与代码生成
|
|
120
62
|
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
hai
|
|
124
|
-
|
|
125
|
-
# 指定类型
|
|
126
|
-
hai generate page users
|
|
63
|
+
```sh
|
|
64
|
+
hai add storage
|
|
65
|
+
hai init
|
|
66
|
+
hai generate page dashboard
|
|
127
67
|
hai generate component UserCard
|
|
128
|
-
hai generate api
|
|
129
|
-
hai generate model
|
|
130
|
-
hai generate migration add-
|
|
131
|
-
|
|
132
|
-
# 快捷命令
|
|
133
|
-
hai g:page dashboard
|
|
134
|
-
hai g:component StatusBadge
|
|
135
|
-
hai g:api orders
|
|
136
|
-
hai g:model order
|
|
68
|
+
hai generate api orders
|
|
69
|
+
hai generate model order
|
|
70
|
+
hai generate migration add-orders
|
|
137
71
|
```
|
|
138
72
|
|
|
139
|
-
|
|
73
|
+
`hai add` 解析模块依赖并补充配置。`hai init` 补齐缺失配置和 AI 文件,保留已有自定义内容;`--force` 可重建模块配置,使用前检查差异。
|
|
140
74
|
|
|
141
|
-
|
|
142
|
-
| --------- | -------- | --------------------------------------------------- |
|
|
143
|
-
| `minimal` | 最小模板 | 基础 SvelteKit/hai 骨架(移动端为 Svelte 5 + Vite) |
|
|
144
|
-
| `default` | 标准模板 | IAM + DB + Cache + Crypto |
|
|
145
|
-
| `full` | 完整模板 | 全量业务模块 + API Service / contract 机制 |
|
|
146
|
-
| `custom` | 自定义 | 按需选择 |
|
|
75
|
+
page/api 生成器面向 SvelteKit,fullstack/API workspace 沿自己的 contract/procedure 结构扩展。名称不能包含路径,默认拒绝覆盖,`--force` 才替换。迁移只生成 up/down 函数,不自动执行;运行前确认数据影响。
|
|
147
76
|
|
|
148
|
-
|
|
77
|
+
### 构建与部署
|
|
149
78
|
|
|
150
|
-
|
|
79
|
+
`pnpm build` 只编译源码。镜像使用 `images/` 中独立 Dockerfile,由 `hai.build.json` 指定文件;`--images` 决定构建哪些镜像,`--services` 决定更新哪些服务。容器引擎 auto 优先 Podman,再尝试 Docker。下载、安装和整理生产依赖共用包缓存与 SQLite 驱动缓存,避免重复下载。
|
|
151
80
|
|
|
152
|
-
|
|
81
|
+
默认容器用于 CPU 运行或连接远程 AI 服务,不额外下载 GPU 运行库。需要使用部署机器上的 GPU 时,自行定制镜像和容器运行参数。
|
|
153
82
|
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
pnpm
|
|
158
|
-
pnpm.
|
|
83
|
+
```sh
|
|
84
|
+
pnpm build --target docker
|
|
85
|
+
pnpm run deploy --env prod
|
|
86
|
+
pnpm run deploy --env prod --build --services web
|
|
87
|
+
pnpm run deploy --env prod --build --bundle-only --output release-prod.tar
|
|
159
88
|
```
|
|
160
89
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
CLI 自动生成根目录 `.env.local`,其中 `HAI_ADMIN_DEFAULT_PASSWORD` 是每个项目独立的随机强密码;直接运行 `dev` / `start` 即可。首次登录使用 `admin` 和 `.env.local` 中的密码,同名环境变量可以覆盖它。密码遵循 `_iam.yml` 策略,默认至少 8 位;不符合策略时启动日志显示具体校验原因与错误码。已有用户后,该变量不会重设账号或密码。`.env.local` 被 Git 和容器构建忽略,`.env.example` 仅保留占位;部署时设置目标环境自己的密码。
|
|
164
|
-
|
|
165
|
-
- 管理员可搜索、分页、新增、编辑、启禁用、删除用户并上传头像;服务端保护当前管理员,管理写操作在锁内重新鉴权,防止并发操作使管理员全部失权。
|
|
166
|
-
- 初始角色为 `admin` / `user`,角色页显示人数并编辑说明,用户页分配角色。默认普通用户仅进入个人设置,直接请求管理接口也会被服务端拒绝;这些业务规则可按实际需求调整。
|
|
167
|
-
- 审计页按操作、资源与日期查询记录;成功登录、退出、密码变更和管理写操作写入审计,记录不含密码、token 或头像内容。
|
|
168
|
-
- 个人设置提供资料、头像、语言、主题和密码修改;偏好保存到 IAM 用户 metadata。头像接受 PNG/JPEG/WebP,最大 512 KiB,服务端验证图片内容并生成 storage key。
|
|
169
|
-
|
|
170
|
-
前端 typed api-client 与 serv 的 crypto transport 统一加解密 JSON 业务、登录与刷新。Web 使用内存 access token 和 HttpOnly refresh Cookie;App 原生端使用 Capacitor 安全 TokenStorage,Desktop 原生端仅在内存保存 token,重启后重新登录。原生刷新 body 通道校验客户端标识、显式传输头和受信 Origin;浏览器预览沿用 Cookie。公开头像是白名单内的二进制图片资源。
|
|
171
|
-
|
|
172
|
-
Web/App/Desktop 复用同一个 `AdminWorkspace`、management store 和 typed client。当前用户与刷新直接选用框架默认 IAM procedures,主题缓存与 DOM 更新复用 `@h-ai/ui/theme`;应用编排初始角色、自我保护、头像与审计等示例业务,这些规则可按实际需求调整。
|
|
173
|
-
|
|
174
|
-
默认 SQLite、本地 storage 与 memory cache 适用于单实例 mini 后台。管理写入仅支持单写实例;多实例读取需要共享数据库、存储、Redis cache 和传输会话粘性路由,管理写请求仍须路由至同一实例。仅更换 Redis 不能保证任意多写副本的最后管理员原子保护。生成后的根脚本提供 typecheck、lint、build、test、test:e2e;Capacitor/Tauri 交付另执行对应原生构建和打包。
|
|
175
|
-
|
|
176
|
-
## 应用配置与显示
|
|
177
|
-
|
|
178
|
-
配置字段使用显式 `HAI_<配置名>_<路径>` 引用。每个项目的 `.env.example` 包含已启用参数和可选字段的用途、枚举、范围;框架根 [`.env.example`](../../.env.example) 是完整总表。分环境加载和命令见 [环境配置](templates/skills/hai-app-create/development.md#环境配置)。
|
|
179
|
-
|
|
180
|
-
所有生成项目的 `.gitignore` 都包含 `**/data/`,忽略根目录及嵌套 workspace 的运行数据,包括 `.gitkeep`;运行时会创建需要的数据目录。
|
|
181
|
-
|
|
182
|
-
Fullstack 的 `packages/<project>-serv/config/` 始终保留 13 份配置:`_core`、`_serv`、`_db`、`_cache`、`_iam`、`_storage`、`_audit`、`_reach`、`_ai`、`_vecdb`、`_payment`、`_scheduler`、`_deploy`(均为 `.yml`)。已用模块保留有效默认值,未启用模块整份注释,各模块的可选字段和替代 Provider 也以注释保留。`.env.example` 同时提供未启用模块的注释凭据示例。创建时填写的模块选项会保留。
|
|
183
|
-
|
|
184
|
-
扩展时先在服务端 workspace 安装所需模块,在 `src/server/runtime.ts` 按公开 Schema 校验配置、初始化并反序关闭,再取消所需配置的注释。整份注释的文件先去掉一层外层注释,可选块继续按需开启;配置文件存在并不等于业务能力已接入。数据库、缓存和存储可通过环境变量切换 Provider 并填写连接字段;Reach Provider 使用标准配置数组,同名 Provider 只保留一个。`crypto.init()` 无配置参数,datapipe 是纯函数,不生成虚构的 YAML 配置。
|
|
185
|
-
|
|
186
|
-
所有模板从 `_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` 覆盖。
|
|
187
|
-
|
|
188
|
-
环境变量可按 core 约定覆盖,如 `HAI_CORE_NAME`、`HAI_CORE_VERSION`、`HAI_CORE_ENV`、`HAI_CORE_LOGGING_LEVEL`;整体 `HAI_CORE` 覆盖遵循父节点优先规则。服务端配置变更后重启服务,容器显式设置 `HAI_CORE_ENV=production`,由该值启用生产安全策略。
|
|
90
|
+
完整包包含应用和自建中间件镜像。仅打包会同时生成 tar 与 Windows `deploy.ps1`、Linux/macOS `deploy.sh`;完全隔离的 Linux 服务器解包后运行 `sh apply.sh`。首次部署必须完整;部分更新保留未选服务和数据卷。每步报告结果,失败返回非零并尝试恢复。前置工具、缓存、版本和恢复流程见[部署说明](../deploy/README.md)。
|
|
189
91
|
|
|
190
|
-
|
|
92
|
+
桌面安装包用 `pnpm build --target desktop --platform windows|linux|macos --arch x64|arm64`,在对应系统准备工具链并验证。容器里的 Web 页面不代替原生安装包。
|
|
191
93
|
|
|
192
|
-
|
|
94
|
+
### 使用 AI 辅助开发
|
|
193
95
|
|
|
194
|
-
|
|
96
|
+
生成工程根的 `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)。
|
|
195
97
|
|
|
196
|
-
|
|
98
|
+
Skill 入口保存任务边界,相邻参考按需读取。`hai init` / `hai add` 只补齐缺失内容,已有技能与自定义规则需合并;同步时复制完整目录。
|
|
197
99
|
|
|
198
|
-
|
|
199
|
-
| ------------------ | ------------ |
|
|
200
|
-
| `-v, --verbose` | 显示详细输出 |
|
|
201
|
-
| `-C, --cwd <path>` | 指定工作目录 |
|
|
100
|
+
## 开发测试
|
|
202
101
|
|
|
203
|
-
|
|
102
|
+
### 开发阶段本地使用
|
|
204
103
|
|
|
205
|
-
|
|
104
|
+
在框架仓库根执行,用当前源码生成项目。完整测试命令如下,部署门禁另需可用 Podman/Docker。
|
|
206
105
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
```bash
|
|
210
|
-
# 构建 CLI(生成 dist/)
|
|
106
|
+
```sh
|
|
211
107
|
pnpm --filter @h-ai/cli build
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
pnpm --filter @h-ai/cli
|
|
215
|
-
```
|
|
216
|
-
|
|
217
|
-
### 2. 直接运行(无需安装)
|
|
218
|
-
|
|
219
|
-
构建完成后,可以用 `node` 直接调用 `dist/index.js`:
|
|
220
|
-
|
|
221
|
-
```bash
|
|
222
|
-
# 从仓库根目录运行
|
|
223
|
-
node packages/cli/dist/index.js create my-app
|
|
224
|
-
node packages/cli/dist/index.js create my-app --type admin --features iam,db
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
或者在任意目录通过绝对路径调用:
|
|
228
|
-
|
|
229
|
-
```bash
|
|
230
|
-
node /path/to/hai-framework/packages/cli/dist/index.js create my-app
|
|
231
|
-
```
|
|
232
|
-
|
|
233
|
-
### 3. 全局链接(`pnpm link`)
|
|
234
|
-
|
|
235
|
-
如果希望在终端里直接用 `hai` 命令,可以全局链接:
|
|
236
|
-
|
|
237
|
-
```bash
|
|
238
|
-
# 在 packages/cli 目录下执行
|
|
239
|
-
cd packages/cli
|
|
240
|
-
pnpm link --global
|
|
241
|
-
|
|
242
|
-
# 验证
|
|
243
|
-
hai --version
|
|
244
|
-
hai create my-app
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
> 使用完毕后可解除链接:`pnpm unlink --global @h-ai/cli`
|
|
248
|
-
|
|
249
|
-
### 4. 在 monorepo 内的其他 app 中使用
|
|
250
|
-
|
|
251
|
-
monorepo 内的 `apps/*` 项目已通过 `workspace:*` 协议引用本地包,可直接使用:
|
|
252
|
-
|
|
253
|
-
```bash
|
|
254
|
-
# 在仓库根目录执行,对任意 app 类型生成项目
|
|
255
|
-
node packages/cli/dist/index.js create ../my-new-project
|
|
256
|
-
```
|
|
257
|
-
|
|
258
|
-
## 分环境部署
|
|
259
|
-
|
|
260
|
-
运行 `hai deploy --env test`,先检查 `.env.test`,再逐项选择中间件默认配置、自定义连接或保持不变。`--yes` 保留目标环境的完整配置并为其余项采用当前后端默认值,`--env-dir` 指定环境文件目录。明确传入目标服务目录,如 `hai deploy packages/my-app-serv --env test`,不猜测 workspace 布局;容器启动脚本保留明确环境标识。公共连接项写目标环境文件,凭据写 `.env.local` 并脱敏显示。
|
|
261
|
-
|
|
262
|
-
配置已完备时可在向导中选择“直接部署”,或执行 `hai deploy packages/my-app-serv --env prod --yes --skip-middleware`,跳过全部中间件提示、配置写入和资源开通。部署目标缺失时引导填写 SSH/Vercel 参数;SSH 地址、端口、密钥路径、远程目录及 Token 只保存到被 Git 忽略的 `.env.local`,下次自动复用。可编辑其中的 `HAI_DEPLOY_PROVIDER` 更新目标;私钥只填写路径。
|
|
263
|
-
|
|
264
|
-
fullstack 的命令只部署指定 API 包,Web 需单独发布。docker-ssh 在本地构建镜像,经 SCP 上传镜像 tar、Compose、运行环境和启动脚本,在远程加载启动;`--skip-build` 不跳过容器构建。Node 20 / pnpm 9.5.0 不受支持。具体命令、离线材料及 Web 发布步骤见 [deploy 使用说明](../deploy/README.md),中间件字段见 [环境与中间件](templates/skills/hai-deploy/middleware.md)。部署回归执行 `pnpm --filter @h-ai/cli test:deploy-gates`。
|
|
265
|
-
|
|
266
|
-
失败与降级提示也必须国际化:官网 API 按请求 locale 生成 AI 降级/邮件送达状态;未送达不能称为已接收。CLI 部署状态使用 cliM,Gallery 加密能力限制使用双语消息。中文与英文分别验证未配置、失败和成功路径,无需调用付费服务。
|
|
267
|
-
|
|
268
|
-
云资源配置消费:Neon 输出 HAI_DB(PostgreSQL JSON),Upstash 输出 HAI_CACHE(Redis rediss URL JSON),R2 输出 HAI_STORAGE(扁平 S3 JSON)。邮件/短信输出 HAI_REACH_PROVIDERS 数组,deployApp 合并两个渠道并保留 YAML 中的消息模板;此覆盖替换原 providers 数组。Core 支持整体对象/数组覆盖,父节点优先于叶子变量,仍执行 Schema 校验;构建子进程与目标运行环境使用相同开通结果。R2 必须提供已有 S3 accessKeyId/secretAccessKey;Resend 必须提供已验证域名的 from;阿里云必须提供已审核 signName/模板。应用须已有相应\_db/\_cache/\_storage/\_reach.yml 并在启动时加载,网络客户端需要 Node 运行时。
|
|
269
|
-
|
|
270
|
-
部署失败恢复:`ProvisionResult.resourceStatus` 标记 created/reused;`getDeployRecovery(result.error)` 读取 projectName、stage、platformProjectId 和资源清单,unknown 表示请求结果不确定,必须先在服务商控制台核对。失败资源已返回 ID 时保留该 ID。恢复结果不含 envVars、原始异常或连接凭证,CLI 会展示清单和建议。同名重试复用现有资源;不自动删除复用资源,新建资源仅在人工确认未被使用后清理。
|
|
271
|
-
|
|
272
|
-
## 配置驱动认证页面
|
|
273
|
-
|
|
274
|
-
协议支持配置中的 userAgreementMarkdown/privacyPolicyMarkdown 正文及 URL;同主题优先 Markdown,由安全渲染器在弹窗显示。
|
|
275
|
-
|
|
276
|
-
选用 IAM 的 admin/h5/website 模板提供 AuthPanel 和标准认证路由;mobile-app 与 fullstack Web/App/Desktop 使用 API 客户端共享动作。修改服务端 config/_iam.yml 控制登录方式、注册、重置、协议弹窗和品牌。LDAP/Reach 均可选:默认 LDAP 客户端需要应用安装 ldapts,再启用 login.ldap 并配置连接;短信/邮件可选择 Reach 模板或自定义发送回调。表单预留 header/extraFields/footer,AuthPanel 透传 login*/register* snippet。分布式部署使用共享数据库与 Redis。
|
|
277
|
-
|
|
278
|
-
[完整 IAM 配置 / IAM configuration](../iam/README.md)
|
|
279
|
-
|
|
280
|
-
### 6. 运行测试
|
|
281
|
-
|
|
282
|
-
```bash
|
|
283
|
-
# 单元测试 + E2E 模板生成测试
|
|
108
|
+
node packages/cli/dist/index.js create ../my-app
|
|
109
|
+
pnpm --filter @h-ai/cli typecheck
|
|
110
|
+
pnpm --filter @h-ai/cli lint
|
|
284
111
|
pnpm --filter @h-ai/cli test
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
pnpm --filter @h-ai/cli test:
|
|
288
|
-
|
|
289
|
-
# watch 模式
|
|
290
|
-
pnpm --filter @h-ai/cli test:watch
|
|
291
|
-
|
|
292
|
-
# 覆盖率
|
|
293
|
-
pnpm --filter @h-ai/cli test:coverage
|
|
112
|
+
pnpm check:skills
|
|
113
|
+
pnpm --filter @h-ai/cli test:scaffold-gates
|
|
114
|
+
pnpm --filter @h-ai/cli test:deploy-gates
|
|
294
115
|
```
|
|
295
116
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
成功截图默认保存在 CLI 的 `test-results/scaffold-evidence/`,可通过 `HAI_AUTH_EVIDENCE_DIR` 指定独立目录,生成项目清理后仍保留。fullstack E2E 启动所有已选 Web/App/Desktop 浏览器预览,并验证各端的登录、导览、帮助与个人设置;小程序和原生壳仍需要对应平台验收。
|
|
299
|
-
|
|
300
|
-
## 生成项目的表单布局
|
|
301
|
-
|
|
302
|
-
website 联系页与 fullstack 管理界面复用 UI 的 FormLayout/FormField:支持一列/双列、标签独立成行/同行、自动跨列和窄容器回落。用户编辑、资料与密码表单使用同组参数,校验提示由 UI 内置中英文处理;完整配置随生成项目的 hai-ui skill 提供。
|
|
117
|
+
脚手架门禁生成真实项目,执行安装、typecheck、lint、build、test 和浏览器测试。部署门禁验证离线包、SSH/人工发布及部分更新。测试自动清理本轮资源;按需保留的截图写入指定证据目录。原生壳和真实云服务单独验收。
|
|
303
118
|
|
|
304
|
-
##
|
|
119
|
+
## 许可证
|
|
305
120
|
|
|
306
121
|
Apache-2.0
|
|
@@ -1991,26 +1991,10 @@ var cli_config_catalog_default = [
|
|
|
1991
1991
|
name: "HAI_DEPLOY_CONTAINER",
|
|
1992
1992
|
module: "deploy",
|
|
1993
1993
|
path: "deploy.container",
|
|
1994
|
-
description: "\
|
|
1994
|
+
description: "Docker Compose \u90E8\u7F72\u53C2\u6570\uFF1B\u6784\u5EFA\u914D\u7F6E\u4F4D\u4E8E\u9879\u76EE hai.build.json\u3002",
|
|
1995
1995
|
value: "",
|
|
1996
1996
|
constraint: "JSON \u5BF9\u8C61\uFF1B\u6574\u4F53\u8986\u76D6\u65F6\u66FF\u6362\u8BE5\u8282\u70B9"
|
|
1997
1997
|
},
|
|
1998
|
-
{
|
|
1999
|
-
name: "HAI_DEPLOY_CONTAINER_HTTPPROXY",
|
|
2000
|
-
module: "deploy",
|
|
2001
|
-
path: "deploy.container.httpProxy",
|
|
2002
|
-
description: "Podman \u6784\u5EFA\u662F\u5426\u7EE7\u627F\u4EE3\u7406\uFF1B\u5BB9\u5668\u4E0D\u80FD\u8BBF\u95EE\u5BBF\u4E3B\u673A localhost \u4EE3\u7406\u65F6\u8BBE\u4E3A false\u3002",
|
|
2003
|
-
value: "true",
|
|
2004
|
-
constraint: "true | false"
|
|
2005
|
-
},
|
|
2006
|
-
{
|
|
2007
|
-
name: "HAI_DEPLOY_CONTAINER_RUNTIME",
|
|
2008
|
-
module: "deploy",
|
|
2009
|
-
path: "deploy.container.runtime",
|
|
2010
|
-
description: "\u672C\u5730\u6216\u8FDC\u7A0B\u5BB9\u5668\u8FD0\u884C\u65F6\uFF0Cauto \u6309\u90E8\u7F72\u6A21\u5757\u987A\u5E8F\u63A2\u6D4B",
|
|
2011
|
-
value: "auto",
|
|
2012
|
-
constraint: "\u5B57\u7B26\u4E32\uFF1B\u53D6\u503C\uFF1Aauto | docker | podman"
|
|
2013
|
-
},
|
|
2014
1998
|
{
|
|
2015
1999
|
name: "HAI_DEPLOY_CONTAINER_S3ENGINE",
|
|
2016
2000
|
module: "deploy",
|
|
@@ -2019,14 +2003,6 @@ var cli_config_catalog_default = [
|
|
|
2019
2003
|
value: "rustfs",
|
|
2020
2004
|
constraint: "\u5B57\u7B26\u4E32\uFF1B\u53D6\u503C\uFF1Arustfs | minio"
|
|
2021
2005
|
},
|
|
2022
|
-
{
|
|
2023
|
-
name: "HAI_DEPLOY_CONTAINER_SQLITEPREBUILDMIRROR",
|
|
2024
|
-
module: "deploy",
|
|
2025
|
-
path: "deploy.container.sqlitePrebuildMirror",
|
|
2026
|
-
description: "SQLite \u9884\u7F16\u8BD1\u5305\u955C\u50CF\u6839\u5730\u5740\uFF1B\u7701\u7565\u65F6\u4ECE\u5B98\u65B9 GitHub Release \u4E0B\u8F7D\uFF0C\u4E0D\u5141\u8BB8\u5D4C\u5165\u51ED\u636E\u3002",
|
|
2027
|
-
value: "",
|
|
2028
|
-
constraint: "\u5B57\u7B26\u4E32\uFF1B\u683C\u5F0F uri"
|
|
2029
|
-
},
|
|
2030
2006
|
{
|
|
2031
2007
|
name: "HAI_DEPLOY_ENVIRONMENT",
|
|
2032
2008
|
module: "deploy",
|
|
@@ -2089,7 +2065,7 @@ var cli_config_catalog_default = [
|
|
|
2089
2065
|
path: "deploy.provider.remote.baseDir",
|
|
2090
2066
|
description: "\u8FDC\u7A0B\u5E94\u7528\u6839\u76EE\u5F55",
|
|
2091
2067
|
value: "/opt/hai/apps",
|
|
2092
|
-
constraint: "\u5B57\u7B26\u4E32\uFF1B\
|
|
2068
|
+
constraint: "\u5B57\u7B26\u4E32\uFF1B\u6B63\u5219 ^\\/[\\w/. -]+$"
|
|
2093
2069
|
},
|
|
2094
2070
|
{
|
|
2095
2071
|
name: "HAI_DEPLOY_PROVIDER_REMOTE_RUNTIME",
|
|
@@ -2121,7 +2097,7 @@ var cli_config_catalog_default = [
|
|
|
2121
2097
|
path: "deploy.provider.ssh.host",
|
|
2122
2098
|
description: "\u8FDC\u7A0B\u4E3B\u673A\u5730\u5740\u6216 ~/.ssh/config \u4E2D\u7684 Host \u522B\u540D",
|
|
2123
2099
|
value: "",
|
|
2124
|
-
constraint: "\u5B57\u7B26\u4E32\uFF1B\
|
|
2100
|
+
constraint: "\u5B57\u7B26\u4E32\uFF1B\u6B63\u5219 ^[a-z0-9][a-z0-9.:-]*$"
|
|
2125
2101
|
},
|
|
2126
2102
|
{
|
|
2127
2103
|
name: "HAI_DEPLOY_PROVIDER_SSH_IDENTITYFILE",
|
|
@@ -2161,7 +2137,7 @@ var cli_config_catalog_default = [
|
|
|
2161
2137
|
path: "deploy.provider.ssh.username",
|
|
2162
2138
|
description: "SSH \u7528\u6237\u540D",
|
|
2163
2139
|
value: "deploy",
|
|
2164
|
-
constraint: "\u5B57\u7B26\u4E32\uFF1B\
|
|
2140
|
+
constraint: "\u5B57\u7B26\u4E32\uFF1B\u6B63\u5219 ^[a-z_][\\w-]*$"
|
|
2165
2141
|
},
|
|
2166
2142
|
{
|
|
2167
2143
|
name: "HAI_DEPLOY_PROVIDER_TOKEN",
|
|
@@ -3859,6 +3835,14 @@ var cli_config_catalog_default = [
|
|
|
3859
3835
|
value: "",
|
|
3860
3836
|
constraint: "\u6709\u6548 HTTP(S) URL"
|
|
3861
3837
|
},
|
|
3838
|
+
{
|
|
3839
|
+
name: "PATH",
|
|
3840
|
+
module: "runtime",
|
|
3841
|
+
path: "PATH",
|
|
3842
|
+
description: "\u64CD\u4F5C\u7CFB\u7EDF\u63D0\u4F9B\u7684\u53EF\u6267\u884C\u7A0B\u5E8F\u641C\u7D22\u8DEF\u5F84\uFF1BCLI \u7528\u4E8E\u5B9A\u4F4D\u5DF2\u5B89\u88C5\u7684 pnpm",
|
|
3843
|
+
value: "",
|
|
3844
|
+
constraint: "\u4FDD\u7559\u7CFB\u7EDF\u539F\u503C\uFF1B\u7531\u64CD\u4F5C\u7CFB\u7EDF\u8DEF\u5F84\u5206\u9694\u7B26\u8FDE\u63A5\uFF0C\u4E0D\u8981\u5728 .env \u4E2D\u7F6E\u7A7A\u6216\u4F5C\u4E3A\u5E94\u7528\u914D\u7F6E\u8986\u76D6"
|
|
3845
|
+
},
|
|
3862
3846
|
{
|
|
3863
3847
|
name: "POLLINATIONS_API_KEY",
|
|
3864
3848
|
module: "runtime",
|
|
@@ -3904,7 +3888,7 @@ var cli_config_catalog_default = [
|
|
|
3904
3888
|
module: "runtime",
|
|
3905
3889
|
path: "PUBLIC_API_TRANSPORT",
|
|
3906
3890
|
description: "\u5BA2\u6237\u7AEF\u4F20\u8F93\u52A0\u5BC6\u5F00\u5173\uFF0C\u987B\u4E0E\u670D\u52A1\u7AEF\u4E00\u81F4",
|
|
3907
|
-
value: "
|
|
3891
|
+
value: "",
|
|
3908
3892
|
constraint: "on | off"
|
|
3909
3893
|
},
|
|
3910
3894
|
{
|
|
@@ -3947,14 +3931,6 @@ var cli_config_catalog_default = [
|
|
|
3947
3931
|
value: "",
|
|
3948
3932
|
constraint: "node | static\uFF1B\u672A\u8BC6\u522B\u7684\u503C\u56DE\u9000 node"
|
|
3949
3933
|
},
|
|
3950
|
-
{
|
|
3951
|
-
name: "VITE_HAI_E2E_KIT_TRANSPORT_MODE",
|
|
3952
|
-
module: "runtime",
|
|
3953
|
-
path: "VITE_HAI_E2E_KIT_TRANSPORT_MODE",
|
|
3954
|
-
description: "\u7BA1\u7406\u540E\u53F0\u7AEF\u5230\u7AEF\u6D4B\u8BD5\u4F20\u8F93\u52A0\u5BC6\u6A21\u5F0F",
|
|
3955
|
-
value: "",
|
|
3956
|
-
constraint: "on | off"
|
|
3957
|
-
},
|
|
3958
3934
|
{
|
|
3959
3935
|
name: "VITEST",
|
|
3960
3936
|
module: "runtime",
|
|
@@ -5376,85 +5352,26 @@ ${commented(optional)}`);
|
|
|
5376
5352
|
`;
|
|
5377
5353
|
}
|
|
5378
5354
|
function generateDeployConfig() {
|
|
5379
|
-
return `#
|
|
5380
|
-
# \
|
|
5381
|
-
# =============================================================================
|
|
5382
|
-
# \u90E8\u7F72\u5E73\u53F0\u51ED\u8BC1\u901A\u8FC7 ~/.hai/credentials.yml \u7BA1\u7406
|
|
5383
|
-
# \u73AF\u5883\u53D8\u91CF\u5F15\u7528\u683C\u5F0F: \${VAR_NAME:default_value}
|
|
5384
|
-
|
|
5385
|
-
# \u90E8\u7F72\u5E73\u53F0
|
|
5355
|
+
return `# \u90E8\u7F72\u5DF2\u6709\u955C\u50CF\uFF1B\u8FD0\u884C pnpm run deploy --build \u53EF\u5148\u6784\u5EFA\u518D\u53D1\u5E03\u3002
|
|
5356
|
+
# SSH \u53C2\u6570\u7531\u5411\u5BFC\u4FDD\u5B58\u5728\u672C\u673A .env.local\uFF1B\u79BB\u7EBF\u6253\u5305\u4E0D\u8981\u6C42 SSH\u3002
|
|
5386
5357
|
provider:
|
|
5387
|
-
type:
|
|
5388
|
-
|
|
5389
|
-
|
|
5390
|
-
#
|
|
5391
|
-
|
|
5392
|
-
|
|
5393
|
-
|
|
5394
|
-
# ---------------------------------------------------------------------------
|
|
5395
|
-
# provider:
|
|
5396
|
-
# type: docker-ssh
|
|
5397
|
-
# ssh:
|
|
5398
|
-
# host: \${HAI_DEPLOY_PROVIDER_SSH_HOST}
|
|
5399
|
-
# port: 22
|
|
5400
|
-
# username: deploy
|
|
5401
|
-
# identityFile: \${HAI_DEPLOY_PROVIDER_SSH_IDENTITYFILE} # \u79C1\u94A5\u6587\u4EF6\u8DEF\u5F84\uFF08\u7701\u7565\u5219\u7528 ssh-agent\uFF09
|
|
5402
|
-
# knownHostsFile: \${HAI_DEPLOY_PROVIDER_SSH_KNOWNHOSTSFILE}
|
|
5403
|
-
# strictHostKeyChecking: true
|
|
5404
|
-
# connectTimeoutSeconds: 10
|
|
5405
|
-
# remote:
|
|
5406
|
-
# baseDir: /opt/hai/apps
|
|
5407
|
-
# runtime: auto # auto \u4F18\u5148 podman\uFF0C\u5176\u6B21 docker
|
|
5408
|
-
# expose:
|
|
5409
|
-
# type: port
|
|
5410
|
-
# containerPort: 3000
|
|
5411
|
-
# hostPort: 18080 # \u8BBF\u95EE\u5730\u5740 http://<host>:18080
|
|
5412
|
-
|
|
5413
|
-
# \u672C\u5730\u6784\u5EFA\u8FD0\u884C\u65F6\uFF08docker-ssh \u4F7F\u7528\uFF1Bauto \u4F18\u5148 podman\uFF09
|
|
5414
|
-
# container:
|
|
5415
|
-
# runtime: auto
|
|
5416
|
-
# httpProxy: true # Podman \u6784\u5EFA\u7EE7\u627F\u4EE3\u7406\uFF1Blocalhost \u4EE3\u7406\u4E0D\u53EF\u8FBE\u65F6\u8BBE\u4E3A false
|
|
5417
|
-
# s3Engine: rustfs # rustfs | minio\uFF1B\u5E94\u7528\u59CB\u7EC8\u4F7F\u7528 storage.type=s3
|
|
5418
|
-
# sqlitePrebuildMirror: https://your-trusted-mirror.example/better-sqlite3 # \u53EF\u9009\uFF0C\u4E0D\u542B\u8BA4\u8BC1\u4FE1\u606F
|
|
5419
|
-
|
|
5420
|
-
# \u57FA\u7840\u8BBE\u65BD\u670D\u52A1\uFF08\u6309\u9700\u5F00\u542F\uFF09
|
|
5421
|
-
# services:
|
|
5422
|
-
# PostgreSQL \u6570\u636E\u5E93 (Neon)
|
|
5423
|
-
# db:
|
|
5424
|
-
# provisioner: neon
|
|
5425
|
-
# apiKey: \${HAI_DEPLOY_SERVICES_DB_APIKEY}
|
|
5358
|
+
type: docker-ssh
|
|
5359
|
+
remote:
|
|
5360
|
+
baseDir: /opt/hai/apps
|
|
5361
|
+
runtime: auto # \u4F18\u5148 Podman\uFF0C\u5176\u6B21 Docker
|
|
5362
|
+
expose:
|
|
5363
|
+
hostPort: 18080
|
|
5364
|
+
containerPort: 3000
|
|
5426
5365
|
|
|
5427
|
-
|
|
5428
|
-
#
|
|
5429
|
-
# provisioner: upstash
|
|
5430
|
-
# email: \${HAI_DEPLOY_SERVICES_CACHE_EMAIL}
|
|
5431
|
-
# apiKey: \${HAI_DEPLOY_SERVICES_CACHE_APIKEY}
|
|
5366
|
+
container:
|
|
5367
|
+
s3Engine: \${HAI_DEPLOY_CONTAINER_S3ENGINE:rustfs} # rustfs | minio
|
|
5432
5368
|
|
|
5433
|
-
|
|
5434
|
-
|
|
5435
|
-
|
|
5436
|
-
|
|
5437
|
-
|
|
5438
|
-
|
|
5439
|
-
# secretAccessKey: \${HAI_DEPLOY_SERVICES_STORAGE_SECRETACCESSKEY}
|
|
5440
|
-
|
|
5441
|
-
# \u90AE\u4EF6 (Resend)
|
|
5442
|
-
# email:
|
|
5443
|
-
# provisioner: resend
|
|
5444
|
-
# apiKey: \${HAI_DEPLOY_SERVICES_EMAIL_APIKEY}
|
|
5445
|
-
# from: \${HAI_DEPLOY_SERVICES_EMAIL_FROM}
|
|
5446
|
-
|
|
5447
|
-
# \u77ED\u4FE1 (\u963F\u91CC\u4E91)
|
|
5448
|
-
# sms:
|
|
5449
|
-
# provisioner: aliyun
|
|
5450
|
-
# accessKeyId: \${HAI_DEPLOY_SERVICES_SMS_ACCESSKEYID}
|
|
5451
|
-
# accessKeySecret: \${HAI_DEPLOY_SERVICES_SMS_ACCESSKEYSECRET}
|
|
5452
|
-
# signName: \${HAI_DEPLOY_SERVICES_SMS_SIGNNAME}
|
|
5453
|
-
|
|
5454
|
-
# docker-ssh \u8BF4\u660E\uFF1A
|
|
5455
|
-
# - \u5E94\u7528\u955C\u50CF\u4F7F\u7528\u5DE5\u7A0B\u81EA\u5E26\u7684 Dockerfile\uFF08adapter-node\uFF09\uFF0C\u672C\u5730\u6784\u5EFA\u540E\u7ECF SSH \u4F20\u8F93\u5E76 load
|
|
5456
|
-
# - compose \u4F1A\u6309\u4E0A\u65B9\u542F\u7528\u7684 db/cache/storage \u81EA\u52A8\u8FFD\u52A0 postgres/redis/minio sidecar
|
|
5457
|
-
# - \u82E5\u540C\u65F6\u914D\u7F6E\u4E86\u5BF9\u5E94\u4E91 Provisioner\uFF0C\u5219\u4F18\u5148\u4F7F\u7528\u4E91\u8D44\u6E90\uFF0C\u4E0D\u518D\u81EA\u5EFA sidecar
|
|
5369
|
+
# \u5B8C\u6574\u5305\u5305\u542B\u81EA\u5EFA\u4E2D\u95F4\u4EF6\u955C\u50CF\uFF0C\u670D\u52A1\u5668\u542F\u52A8\u7981\u6B62\u62C9\u53D6\u3002
|
|
5370
|
+
# \u5916\u90E8\u6570\u636E\u5E93/\u5B58\u50A8\u7B49\u8FDE\u63A5\u5728\u5BF9\u5E94\u6A21\u5757\u914D\u7F6E\u548C\u73AF\u5883\u6587\u4EF6\u4E2D\u8BBE\u7F6E\u3002
|
|
5371
|
+
# Vercel \u4EC5\u6D88\u8D39\u5DF2\u6709 .vercel/output\uFF0C\u4E91 Provider/Provisioner \u4E0D\u9002\u7528\u4E8E\u5B8C\u5168\u79BB\u7EBF\u3002
|
|
5372
|
+
# provider:
|
|
5373
|
+
# type: vercel
|
|
5374
|
+
# token: \${HAI_DEPLOY_PROVIDER_TOKEN}
|
|
5458
5375
|
`;
|
|
5459
5376
|
}
|
|
5460
5377
|
function generateVecdbConfig() {
|
|
@@ -5635,5 +5552,5 @@ function generatePaymentConfig() {
|
|
|
5635
5552
|
}
|
|
5636
5553
|
|
|
5637
5554
|
export { generateConfigFile, generateEnvExample, moduleEnvironmentVariables, parameterizeConfig, renderEnvironment, runtimeEnvironmentVariables };
|
|
5638
|
-
//# sourceMappingURL=chunk-
|
|
5639
|
-
//# sourceMappingURL=chunk-
|
|
5555
|
+
//# sourceMappingURL=chunk-7DSURTJ4.js.map
|
|
5556
|
+
//# sourceMappingURL=chunk-7DSURTJ4.js.map
|