@h-ai/cli 0.1.0-alpha.54 → 0.1.0-alpha.55
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.md +4 -0
- package/package.json +7 -7
- package/templates/base/package.json.hbs +1 -1
- package/templates/skills/AGENTS.md +8 -22
- package/templates/skills/CLAUDE.md +3 -16
- package/templates/skills/bridges/admin/AGENTS.md +3 -16
- package/templates/skills/bridges/admin/CLAUDE.md +3 -11
- package/templates/skills/bridges/admin/copilot-instructions.md +2 -39
- package/templates/skills/bridges/api/AGENTS.md +5 -18
- package/templates/skills/bridges/api/CLAUDE.md +3 -11
- package/templates/skills/bridges/api/copilot-instructions.md +3 -38
- package/templates/skills/bridges/fullstack/AGENTS.md.hbs +24 -59
- package/templates/skills/bridges/fullstack/CLAUDE.md.hbs +1 -15
- package/templates/skills/bridges/fullstack/copilot-instructions.md.hbs +5 -45
- package/templates/skills/bridges/h5/AGENTS.md +4 -17
- package/templates/skills/bridges/h5/CLAUDE.md +3 -11
- package/templates/skills/bridges/h5/copilot-instructions.md +2 -37
- package/templates/skills/bridges/mobile-app/AGENTS.md +5 -18
- package/templates/skills/bridges/mobile-app/CLAUDE.md +3 -11
- package/templates/skills/bridges/mobile-app/copilot-instructions.md +2 -38
- package/templates/skills/bridges/website/AGENTS.md +4 -17
- package/templates/skills/bridges/website/CLAUDE.md +3 -11
- package/templates/skills/bridges/website/copilot-instructions.md +2 -37
- package/templates/skills/copilot-instructions.md +2 -36
- package/templates/skills/hai-ai/SKILL.md +35 -389
- package/templates/skills/hai-ai/guide.md +383 -0
- package/templates/skills/hai-ai/reference.md +1 -1
- package/templates/skills/hai-api-client/SKILL.md +6 -6
- package/templates/skills/hai-api-contract/SKILL.md +10 -25
- package/templates/skills/hai-app-create/SKILL.md +29 -388
- package/templates/skills/hai-app-create/reference.md +350 -0
- package/templates/skills/hai-app-review/SKILL.md +9 -23
- package/templates/skills/hai-app-tests/SKILL.md +29 -494
- package/templates/skills/hai-app-tests/reference.md +442 -0
- package/templates/skills/hai-audit/SKILL.md +6 -6
- package/templates/skills/hai-build/SKILL.md +19 -338
- package/templates/skills/hai-build/reference.md +326 -0
- package/templates/skills/hai-cache/SKILL.md +27 -32
- package/templates/skills/hai-capacitor/SKILL.md +19 -366
- package/templates/skills/hai-capacitor/reference.md +352 -0
- package/templates/skills/hai-ci/SKILL.md +6 -21
- package/templates/skills/hai-core/SKILL.md +25 -566
- package/templates/skills/hai-core/reference.md +533 -0
- package/templates/skills/hai-crypto/SKILL.md +6 -20
- package/templates/skills/hai-datapipe/SKILL.md +9 -23
- package/templates/skills/hai-deploy/SKILL.md +6 -24
- package/templates/skills/hai-framework-sync/SKILL.md +8 -20
- package/templates/skills/hai-iam/SKILL.md +27 -371
- package/templates/skills/hai-iam/reference.md +343 -0
- package/templates/skills/hai-kit/SKILL.md +6 -6
- package/templates/skills/hai-payment/SKILL.md +6 -26
- package/templates/skills/hai-pr-review/SKILL.md +6 -22
- package/templates/skills/hai-reach/SKILL.md +19 -317
- package/templates/skills/hai-reach/reference.md +303 -0
- package/templates/skills/hai-reldb/SKILL.md +19 -472
- package/templates/skills/hai-reldb/reference.md +452 -0
- package/templates/skills/hai-scheduler/SKILL.md +6 -6
- package/templates/skills/hai-serv/SKILL.md +27 -759
- package/templates/skills/hai-serv/reference.md +736 -0
- package/templates/skills/hai-storage/SKILL.md +7 -25
- package/templates/skills/hai-ui/SKILL.md +29 -625
- package/templates/skills/hai-ui/reference.md +598 -0
- package/templates/skills/hai-vecdb/SKILL.md +18 -303
- package/templates/skills/hai-vecdb/reference.md +291 -0
|
@@ -1,352 +1,33 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: hai-build
|
|
3
|
-
description:
|
|
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
|
-
| 能力 |
|
|
19
|
-
| 适用场景 |
|
|
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
|
-
|
|
18
|
+
## 使用路径
|
|
339
19
|
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
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
|
-
|
|
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
|
-
|
|
28
|
+
- 适用场景
|
|
29
|
+
- 项目架构
|
|
30
|
+
- 技能导航
|
|
31
|
+
- TDD 开发工作流(强制)
|
|
32
|
+
- 统一编码规范
|
|
33
|
+
- 标准工作流
|