@h-ai/cli 0.1.0-alpha.54 → 0.1.0-alpha.56

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/README.md +4 -0
  2. package/dist/{chunk-FVDXJYMO.js → chunk-O3ANVICQ.js} +31 -2
  3. package/dist/chunk-O3ANVICQ.js.map +1 -0
  4. package/dist/cli-config-templates-OWBEGBZQ.js +5 -0
  5. package/dist/{cli-config-templates-WGN2I23J.js.map → cli-config-templates-OWBEGBZQ.js.map} +1 -1
  6. package/dist/index.js +3 -3
  7. package/dist/{src-6ZBWDBUB.js → src-TBIET7YU.js} +908 -127
  8. package/dist/src-TBIET7YU.js.map +1 -0
  9. package/package.json +7 -7
  10. package/templates/base/.gitignore.hbs +3 -0
  11. package/templates/base/package.json.hbs +1 -1
  12. package/templates/skills/AGENTS.md +8 -22
  13. package/templates/skills/CLAUDE.md +3 -16
  14. package/templates/skills/bridges/admin/AGENTS.md +3 -16
  15. package/templates/skills/bridges/admin/CLAUDE.md +3 -11
  16. package/templates/skills/bridges/admin/copilot-instructions.md +2 -39
  17. package/templates/skills/bridges/api/AGENTS.md +5 -18
  18. package/templates/skills/bridges/api/CLAUDE.md +3 -11
  19. package/templates/skills/bridges/api/copilot-instructions.md +3 -38
  20. package/templates/skills/bridges/fullstack/AGENTS.md.hbs +24 -59
  21. package/templates/skills/bridges/fullstack/CLAUDE.md.hbs +1 -15
  22. package/templates/skills/bridges/fullstack/copilot-instructions.md.hbs +5 -45
  23. package/templates/skills/bridges/h5/AGENTS.md +4 -17
  24. package/templates/skills/bridges/h5/CLAUDE.md +3 -11
  25. package/templates/skills/bridges/h5/copilot-instructions.md +2 -37
  26. package/templates/skills/bridges/mobile-app/AGENTS.md +5 -18
  27. package/templates/skills/bridges/mobile-app/CLAUDE.md +3 -11
  28. package/templates/skills/bridges/mobile-app/copilot-instructions.md +2 -38
  29. package/templates/skills/bridges/website/AGENTS.md +4 -17
  30. package/templates/skills/bridges/website/CLAUDE.md +3 -11
  31. package/templates/skills/bridges/website/copilot-instructions.md +2 -37
  32. package/templates/skills/copilot-instructions.md +2 -36
  33. package/templates/skills/hai-ai/SKILL.md +35 -389
  34. package/templates/skills/hai-ai/guide.md +383 -0
  35. package/templates/skills/hai-ai/reference.md +1 -1
  36. package/templates/skills/hai-api-client/SKILL.md +6 -6
  37. package/templates/skills/hai-api-contract/SKILL.md +10 -25
  38. package/templates/skills/hai-app-create/SKILL.md +29 -388
  39. package/templates/skills/hai-app-create/reference.md +350 -0
  40. package/templates/skills/hai-app-review/SKILL.md +9 -23
  41. package/templates/skills/hai-app-tests/SKILL.md +29 -494
  42. package/templates/skills/hai-app-tests/reference.md +442 -0
  43. package/templates/skills/hai-audit/SKILL.md +6 -6
  44. package/templates/skills/hai-build/SKILL.md +19 -338
  45. package/templates/skills/hai-build/reference.md +326 -0
  46. package/templates/skills/hai-cache/SKILL.md +27 -32
  47. package/templates/skills/hai-capacitor/SKILL.md +19 -366
  48. package/templates/skills/hai-capacitor/reference.md +352 -0
  49. package/templates/skills/hai-ci/SKILL.md +6 -21
  50. package/templates/skills/hai-core/SKILL.md +25 -566
  51. package/templates/skills/hai-core/reference.md +533 -0
  52. package/templates/skills/hai-crypto/SKILL.md +6 -20
  53. package/templates/skills/hai-datapipe/SKILL.md +9 -23
  54. package/templates/skills/hai-deploy/SKILL.md +63 -25
  55. package/templates/skills/hai-framework-sync/SKILL.md +8 -20
  56. package/templates/skills/hai-iam/SKILL.md +27 -371
  57. package/templates/skills/hai-iam/reference.md +343 -0
  58. package/templates/skills/hai-kit/SKILL.md +6 -6
  59. package/templates/skills/hai-payment/SKILL.md +6 -26
  60. package/templates/skills/hai-pr-review/SKILL.md +6 -22
  61. package/templates/skills/hai-reach/SKILL.md +19 -317
  62. package/templates/skills/hai-reach/reference.md +303 -0
  63. package/templates/skills/hai-reldb/SKILL.md +19 -472
  64. package/templates/skills/hai-reldb/reference.md +452 -0
  65. package/templates/skills/hai-scheduler/SKILL.md +6 -6
  66. package/templates/skills/hai-serv/SKILL.md +27 -759
  67. package/templates/skills/hai-serv/reference.md +736 -0
  68. package/templates/skills/hai-storage/SKILL.md +7 -25
  69. package/templates/skills/hai-ui/SKILL.md +29 -625
  70. package/templates/skills/hai-ui/reference.md +598 -0
  71. package/templates/skills/hai-vecdb/SKILL.md +18 -303
  72. package/templates/skills/hai-vecdb/reference.md +291 -0
  73. package/dist/chunk-FVDXJYMO.js.map +0 -1
  74. package/dist/cli-config-templates-WGN2I23J.js +0 -5
  75. package/dist/src-6ZBWDBUB.js.map +0 -1
@@ -1,352 +1,33 @@
1
1
  ---
2
2
  name: hai-build
3
- description: 应用开发入口技能。提供项目架构总览(SSR/SPA/原生 App 多端)、TDD 开发工作流、模块初始化顺序与技能导航。当用户需要了解项目结构、查找正确的技能、或开始新任务时触发。
3
+ description: "定位 hai 应用架构、模块依赖、初始化顺序、构建模式和对应技能。"
4
4
  ---
5
5
 
6
- # hai-build — 应用开发入口
6
+ # hai-build
7
7
 
8
8
  ## 能力契约
9
9
 
10
- 框架开发、CLI、服务端最低 Node.js 版本统一为 22.12.0;包与脚手架 engines、共享 node22 编译目标和 CI 最低版本必须同步。不再按 Node 20 编写兼容分支。
11
-
12
- tsup 包的 Turbo `build` 依赖不缓存的 `build:clean`(仅清本包 dist),再执行构建或恢复缓存。不要移除此步骤:Turbo 缓存恢复不会自动移除另一模式的多余文件。
13
-
14
- 使用 Turbo 时,影响构建的环境变量必须进入任务 `env`,共享构建配置进入 `globalDependencies`。框架的 `HAI_DOCKER_PROD_BUILD=true` 关闭声明和 sourcemap,应与普通构建使用不同缓存;PUBLIC/VITE/TAURI 变量同样参与构建缓存。切换后验证实际产物并恢复普通开发构建。
15
-
16
10
  | 项目 | 契约 |
17
11
  | --- | --- |
18
- | 能力 | 应用开发入口技能。提供项目架构总览(SSR/SPA/原生 App 多端)、TDD 开发工作流、模块初始化顺序与技能导航。当用户需要了解项目结构、查找正确的技能、或开始新任务时触发。 |
19
- | 适用场景 | 当任务与 `hai-build` 的能力描述匹配,并且需要遵循本 Skill 的流程和边界时 |
20
- | 输入 | 用户目标、仓库与运行环境上下文、现有配置、授权范围和质量门禁 |
21
- | 输出 | 与目标匹配的配置/代码/文档或审查结论,以及可复现的验证结果 |
22
- | 限制 | 不扩张用户授权,不输出或固化密钥,不跳过失败门禁,不假定外部服务状态 |
23
-
24
- > 本技能是 hai-framework 应用开发的起点。帮助理解项目结构、定位正确的技能、并遵循 **TDD 驱动的标准工作流**。支持 SSR Web、SPA、Android/iOS 原生 App 等多端构建。
25
-
26
- ---
27
-
28
- ## 适用场景
29
-
30
- - 初次接触项目,需要了解整体架构与模块关系
31
- - 不确定应使用哪个技能来完成任务
32
- - 需要了解模块初始化顺序与依赖关系
33
- - 需要执行跨模块操作或全局配置变更
34
- - 多端构建切换(SSR ↔ SPA ↔ 原生 App)
35
-
36
- ---
37
-
38
- ## 项目架构
39
-
40
- ### 技术栈
41
-
42
- | 层次 | 技术 |
43
- | -------- | ------------------------------ |
44
- | 框架 | SvelteKit 2 + Svelte 5 (Runes) |
45
- | 样式 | TailwindCSS 4 + DaisyUI 5 |
46
- | 语言 | TypeScript 5.7+ (strict) |
47
- | 构建 | Vite + tsup |
48
- | 包管理 | pnpm |
49
- | 单元测试 | Vitest |
50
- | E2E 测试 | Playwright |
51
- | 原生 App | Capacitor 7 |
52
- | 公共 API | oRPC contract + Hono + typed client |
53
- | 认证 | Bearer access token + httpOnly refresh cookie(浏览器推荐) |
54
-
55
- ### 多端构建模式
56
-
57
- | 模式 | Adapter | 认证方式 | 部署目标 |
58
- | ------- | -------------- | --------------------- | ----------------------- |
59
- | SSR Web | adapter-node | Bearer access token + Cookie | Node.js 服务器 |
60
- | SPA | adapter-static | Bearer access token + httpOnly refresh cookie | CDN / 静态托管 |
61
- | Android | adapter-static | Bearer access token + Capacitor secure storage | Capacitor → Android APK |
62
- | iOS | adapter-static | Bearer access token + Capacitor secure storage | Capacitor → iOS IPA |
63
-
64
- **Adapter 切换**:
65
-
66
- ```typescript
67
- // svelte.config.js — 使用 kit 提供的 createAdapter
68
- import { createAdapter } from '@h-ai/kit/adapter'
69
-
70
- const config = {
71
- kit: {
72
- adapter: createAdapter(), // 根据 VITE_ADAPTER 环境变量自动选择
73
- },
74
- }
75
- ```
76
-
77
- - `VITE_ADAPTER=node`(默认)→ adapter-node(SSR)
78
- - `VITE_ADAPTER=static` → adapter-static(SPA / 原生 App)
79
-
80
- ### 目录结构
81
-
82
- ```
83
- 项目根/
84
- config/ # 模块配置(YAML)
85
- _core.yml # Core 配置(必须)
86
- _db.yml # DB 配置(按需)
87
- _cache.yml # Cache 配置(按需)
88
- _iam.yml # IAM 配置(按需)
89
- _storage.yml # Storage 配置(按需)
90
- _ai.yml # AI 配置(按需)
91
- src/
92
- app.html # HTML 入口
93
- app.d.ts # 全局类型声明
94
- hooks.server.ts # 服务端 Hook(模块初始化 + 请求管道)
95
- lib/
96
- api.ts # @h-ai/api-client 初始化(SPA / 原生 App 使用)
97
- capacitor.ts # Capacitor 初始化(原生 App)
98
- server/
99
- init.ts # 模块初始化入口(单例,SSR)
100
- procedures/ # 应用私有 oRPC procedures(仅 API Service 场景)
101
- paraglide/ # i18n 生成文件(禁止手动修改)
102
- components/ # 应用组件
103
- routes/
104
- +layout.svelte # 根布局
105
- +page.svelte # 首页
106
- (auth)/ # 认证相关页面组
107
- api/ # API 端点
108
- v1/ # API v1 版本
109
- payment/ # 支付端点(按需)
110
- static/ # 静态资源
111
- messages/ # i18n 翻译文件
112
- capacitor.config.ts # Capacitor 配置(原生 App)
113
- ```
114
-
115
- ### 模块依赖图
116
-
117
- ```
118
- core(基础能力:配置、日志、i18n、HaiResult)
119
- ├── crypto(加密:SM2/SM3/SM4)
120
- ├── db(数据库:SQLite/PostgreSQL/MySQL)
121
- ├── cache(缓存:内存/Redis)
122
- ├── storage(存储:本地/S3)
123
- ├── ai(AI:LLM/MCP/Agent)
124
- ├── iam(身份管理)← 依赖 crypto + db + cache
125
- ├── payment(支付)← 依赖 db + crypto
126
- ├── api-contract(公共 HTTP API 契约)← 纯定义,依赖 core + zod + oRPC contract
127
- ├── serv(Hono + oRPC API Service)← 依赖 api-contract;features 按需依赖 iam/storage/ai
128
- ├── kit(SvelteKit 集成)← Hook / guard / validate / response,不定义公共 contract
129
- ├── api-client(typed API 客户端)← 依赖 api-contract + oRPC client
130
- ├── capacitor(原生能力)← 纯浏览器端
131
- └── ui(UI 组件库)← 依赖 core
132
- ```
133
-
134
- ### 模块初始化顺序
135
-
136
- #### SSR 模式(hooks.server.ts)
137
-
138
- 在 `src/lib/server/init.ts` 中按依赖顺序初始化:
139
-
140
- ```typescript
141
- import { cache } from '@h-ai/cache'
142
- import { core } from '@h-ai/core'
143
- import { reldb } from '@h-ai/reldb'
144
- import { iam } from '@h-ai/iam'
145
- import { payment } from '@h-ai/payment' // 按需
146
-
147
- let initialized = false
148
-
149
- export async function initModules() {
150
- if (initialized)
151
- return
152
-
153
- // 1. Core 必须最先初始化(加载配置、日志、i18n)
154
- await core.init()
155
-
156
- // 2. 基础设施层(无相互依赖,可任意顺序)
157
- await reldb.init(core.config.get('db'))
158
- await cache.init(core.config.get('cache'))
159
-
160
- // 3. 业务层(依赖基础设施)
161
- await iam.init({ ...core.config.get('iam'), reldb, cache })
162
- // 支付模块(按需)
163
- await payment.init({ ...core.config.get('payment'), reldb })
164
-
165
- // 4. 集成层
166
- // kit 无需 init,通过 createHandle 配置
167
- // api-contract 无需 init,只在服务端/客户端共享 contract
168
- // serv 在 API Service 中通过 serv.createApp({ contract, procedures }) 装配
169
-
170
- initialized = true
171
- }
172
- ```
173
-
174
- #### SPA / 原生 App 模式(src/lib/api.ts)
175
-
176
- ```typescript
177
- import { apiClient } from '@h-ai/api-client'
178
-
179
- export async function initApi() {
180
- return apiClient.init({
181
- baseUrl: import.meta.env.VITE_API_BASE_URL,
182
- auth: {}, // 浏览器默认 httpOnly cookie;原生 App 传入 Capacitor TokenStorage
183
- timeout: 15_000,
184
- })
185
- }
186
-
187
- export { apiClient }
188
- ```
189
-
190
- #### 原生 App 追加初始化(src/lib/capacitor.ts)
191
-
192
- ```typescript
193
- import { capacitor } from '@h-ai/capacitor'
194
-
195
- export async function initCapacitor() {
196
- await capacitor.init({ statusBar: { style: 'dark' } })
197
- }
198
- ```
199
-
200
- ### 配置文件格式
201
-
202
- 所有模块配置使用 YAML 保存默认值;`HAI_<配置名>_<YAML 路径>` 环境变量
203
- 自动覆盖对应叶子项,且优先级更高:
204
-
205
- ```yaml
206
- # config/_core.yml
207
- name: my-app
208
- env: development
209
- logging:
210
- level: info
211
- ```
212
-
213
- 以上字段分别对应 `HAI_CORE_NAME`、`HAI_CORE_ENV`、
214
- `HAI_CORE_LOGGING_LEVEL`。
215
-
216
- ---
217
-
218
- ## 技能导航
219
-
220
- 根据任务类型选择正确的技能:
221
-
222
- ### 模块使用(API 与集成)
223
-
224
- | 任务 | 技能 | 触发关键词 |
225
- | --------------------- | ---------------- | ------------------------------------------------- |
226
- | 配置/日志/i18n/HaiResult | `hai-core` | core.init, core.logger, core.config, HaiResult |
227
- | 数据库操作 | `hai-reldb` | reldb.init, SQL, CRUD, 事务, 分页, DDL |
228
- | 缓存操作 | `hai-cache` | cache.init, cache.get/set, TTL, Redis |
229
- | 文件存储 | `hai-storage` | storage.init, 上传, 下载, S3, 本地存储 |
230
- | 加密/签名/哈希 | `hai-crypto` | crypto.init, SM2, SM3, SM4, 加密, 签名 |
231
- | 身份认证/授权 | `hai-iam` | iam.init, 登录, 注册, RBAC, Token, Bearer |
232
- | AI/LLM/MCP | `hai-ai` | ai.init, LLM, MCP, Agent, 工具调用 |
233
- | 公共 API 契约 | `hai-api-contract` | apiContract.create, contract, schema, oRPC, HaiResult |
234
- | API Service 运行时 | `hai-serv` | serv.createApp, Hono, procedures, OpenAPI, docs, route guard |
235
- | SvelteKit 集成 | `hai-kit` | kit.createHandle, guard, middleware, validate, response |
236
- | UI 组件 | `hai-ui` | 表单, 按钮, 表格, Modal, Toast, 移动端组件 |
237
- | typed API 客户端 | `hai-api-client` | apiClient.init, typed client, Bearer, 401 refresh, custom fetch |
238
- | 原生 App 能力 | `hai-capacitor` | capacitor, 相机, 推送, 状态栏, 设备信息 |
239
- | 支付 | `hai-payment` | payment, 微信支付, 支付宝, Stripe, 订单 |
240
-
241
- ### 开发流程
242
-
243
- | 任务 | 技能 | 触发关键词 |
244
- | ---------------------- | ---------------- | -------------------------------------- |
245
- | 创建页面/组件/API/模型 | `hai-app-create` | 新建页面, 添加组件, API 端点, 数据模型 |
246
- | 代码审查与规范化 | `hai-app-review` | 审查, review, 规范, 优化 |
247
- | 编写/补充测试 | `hai-app-tests` | 测试, test, 单测, 覆盖率, TDD, E2E |
248
- | CI/CD 与质量门禁 | `hai-ci` | CI, CD, GitHub Actions, workflow, secret scan |
249
- | PR / Issue 交付审查 | `hai-pr-review` | PR, pull request, issue, CODEOWNERS, 自动 Review, AI Review |
250
- | hai-framework 同步 | `hai-framework-sync` | hai-framework, skills 同步, framework:use:local, framework:watch |
251
-
252
- ---
253
-
254
- ## TDD 开发工作流(强制)
255
-
256
- > 所有新功能开发必须遵循 TDD:**先写测试 → 确认失败 → 再实现 → 确认通过 → 重构**。
257
-
258
- ### 完整流程
259
-
260
- ```
261
- 需求分析 → 设计测试用例 → 编写测试(Red)→ 运行测试确认失败
262
- → 编写实现(Green)→ 运行测试确认通过
263
- → 重构优化(Refactor)→ 运行质量门禁
264
- ```
265
-
266
- ### 按阶段使用的技能
267
-
268
- | 阶段 | 主要技能 | 说明 |
269
- | ------------------- | ---------------- | ------------------------------------------ |
270
- | 需求分析 + 测试设计 | `hai-app-tests` | 拆分测试点,确定单元测试与 E2E 测试 |
271
- | Red:编写测试 | `hai-app-tests` | 编写 Vitest 单元测试 + Playwright E2E 测试 |
272
- | Green:编写实现 | `hai-app-create` | 按照创建规范编写服务/路由/组件 |
273
- | Refactor:重构审查 | `hai-app-review` | 代码规范审查、分层检查、日志/i18n 合规 |
274
-
275
- ### 快速指令
276
-
277
- ```bash
278
- # Red:运行测试确认全部失败
279
- pnpm --filter <app-name> test
280
- pnpm --filter <app-name> test:e2e
281
-
282
- # Green:运行测试确认全部通过
283
- pnpm --filter <app-name> test
284
- pnpm --filter <app-name> test:e2e
285
-
286
- # Refactor:质量门禁
287
- pnpm typecheck && pnpm lint && pnpm test
288
- ```
289
-
290
- ---
291
-
292
- ## 统一编码规范
293
-
294
- ### 强制规则
295
-
296
- - **禁止 `any`**:不确定类型用 `unknown`,在边界处做类型缩窄
297
- - **禁止 `console.log`**:使用 `core.logger`(trace/debug/info/warn/error/fatal)
298
- - **禁止硬编码密钥**:使用环境变量,新增变量需在 `.env` 中写入占位符
299
- - **禁止硬编码用户文案**:所有用户可见文本必须使用 i18n key
300
- - **禁止修改 `src/lib/paraglide`** 生成文件
301
-
302
- ### HaiResult 模式
303
-
304
- 所有 hai 模块操作均返回 `HaiResult<T>` 类型:
305
-
306
- ```typescript
307
- const result = await reldb.sql.query('SELECT * FROM users')
308
- if (!result.success) {
309
- // result.error: { code, message, details? }
310
- core.logger.error('Query failed', { error: result.error })
311
- return kit.response.internalError()
312
- }
313
- // result.data 可安全使用
314
- return kit.response.ok(result.data)
315
- ```
316
-
317
- ### 质量门禁
318
-
319
- 每次变更后按顺序执行:
320
-
321
- ```bash
322
- pnpm typecheck # TypeScript 类型检查
323
- pnpm lint # ESLint 检查
324
- pnpm test # Vitest 单元测试
325
- ```
326
-
327
- ---
328
-
329
- ## 标准工作流
330
-
331
- ### 变更前:需求分析 + 测试设计
332
-
333
- 1. 列出将修改的文件路径
334
- 2. 确认哪些类型/接口会变
335
- 3. 搜索确认引用关系(避免遗漏)
336
- 4. **设计测试用例清单**(单元测试 + E2E 测试)
12
+ | 能力 | 定位 hai 应用架构、模块依赖、初始化顺序、构建模式和对应技能 |
13
+ | 适用场景 | 识别应用架构、跨模块依赖或构建入口 |
14
+ | 输入 | README、package.json、应用类型、现有 config 与目标 |
15
+ | 输出 | 适用技能、最小修改路径和按范围选择的验证命令 |
16
+ | 限制 | 先识别 API workspace、SvelteKit、SPA 或原生 App;不强行转换架构,不给纯函数模块添加生命周期。 |
337
17
 
338
- ### 变更中:TDD 三步走
18
+ ## 使用路径
339
19
 
340
- 1. **Red**:编写单元测试(Vitest)+ E2E 测试(Playwright),运行确认全部失败
341
- 2. **Green**:按技能指引完成功能实现,逐步让测试通过
342
- 3. **Refactor**:审查代码规范、重构优化
20
+ - 先读当前 package.json 和 README,识别 SvelteKit / API workspace / Vite SPA / 原生 App,按实际 scripts 验证。
21
+ - core → reldb/cache 等基础依赖 → iam/ai 等业务模块;逐步检查初始化,失败清理已创建资源。
22
+ - Node 最低版本、Turbo 缓存 env/globalDependencies、build:clean 与框架构建模板保持同步。
343
23
 
344
- ### 变更后:验证
24
+ ## 按需参考
345
25
 
346
- 1. `pnpm typecheck` 通过
347
- 2. `pnpm lint` 通过
348
- 3. `pnpm test` 通过(单元测试)
349
- 4. `pnpm --filter <app-name> test:e2e` 通过(E2E 测试)
350
- 5. 搜索确认所有引用点已更新
26
+ 详细配置、API 签名、错误码和范本在 [reference.md](reference.md)。按下列标题定位所需小节,不默认通读;用例中的业务变量需结合当前应用补齐。
351
27
 
352
- 原生交付必须单独执行 Tauri/Gradle/Xcode 打包,并在目标 OS/设备验证安装启动、登录/退出、重启会话、安全 TokenStore、真实 API 域名与覆盖升级。Web 构建/E2E 不代替原生验收。保存提交、包 hash、平台/工具链及逐项结果;缺平台写未验证,禁止静默 skip。hai-framework 仓库参考 `.github/workflows/native.yml` 与 desktop-app / mobile-app README 的「原生交付与验收」章节。
28
+ - 适用场景
29
+ - 项目架构
30
+ - 技能导航
31
+ - TDD 开发工作流(强制)
32
+ - 统一编码规范
33
+ - 标准工作流