@h-ai/cli 0.1.0-alpha.49 → 0.1.0-alpha.51
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/dist/index.js +52 -2
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/templates/apps/api/.dockerignore.hbs +14 -0
- package/templates/apps/api/Dockerfile.hbs +34 -0
- package/templates/apps/api/apps/{{projectName}}-service/README.md.hbs +6 -0
- package/templates/apps/api/apps/{{projectName}}-service/config/_core.yml.hbs +2 -2
- package/templates/apps/api/apps/{{projectName}}-service/config/_serv.yml.hbs +4 -4
- package/templates/apps/api/apps/{{projectName}}-service/package.json.hbs +2 -0
- package/templates/apps/api/package.json.hbs +4 -0
- package/templates/apps/fullstack/.dockerignore.hbs +14 -0
- package/templates/apps/fullstack/Dockerfile.hbs +71 -0
- package/templates/apps/fullstack/docker/fullstack-server.mjs.hbs +194 -0
- package/templates/apps/fullstack/docker/nginx.conf.hbs +18 -0
- package/templates/apps/fullstack/package.json.hbs +8 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/README.md.hbs +7 -0
- package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_core.yml.hbs +2 -2
- package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_serv.yml.hbs +3 -3
- package/templates/apps/fullstack/packages/{{projectName}}-serv/package.json.hbs +6 -0
- package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/api/api-client.ts.hbs +2 -1
- package/templates/base/.dockerignore.hbs +17 -0
- package/templates/base/Dockerfile.hbs +56 -0
- package/templates/base/docker/nginx.conf.hbs +18 -0
- package/templates/base/package.json.hbs +16 -6
- package/templates/base/svelte.config.js.hbs +0 -8
- package/templates/skills/hai-app-create/SKILL.md +13 -0
- package/templates/skills/hai-iam/SKILL.md +1 -1
- package/templates/skills/hai-ui/SKILL.md +7 -0
|
@@ -354,6 +354,18 @@ core.init() → reldb.init() → cache.init() → iam.init() → createBusinessT
|
|
|
354
354
|
|
|
355
355
|
---
|
|
356
356
|
|
|
357
|
+
## 容器交付
|
|
358
|
+
|
|
359
|
+
- 保持脚手架根目录 `Dockerfile`、`.dockerignore` 与 `package.json` 中 `docker:build*` / `podman:build*` 命令同步。
|
|
360
|
+
- Podman 多阶段构建保持 `--format docker --jobs=1`;前者保留 `HEALTHCHECK`,后者避免部分 Podman 5.8/Buildah 组合在并行 stage 构建时触发内部 semaphore panic。
|
|
361
|
+
- SvelteKit 服务使用 Node adapter;纯 Vite 前端使用带 SPA fallback 的静态镜像;fullstack 默认支持 Web + Service 同源镜像。
|
|
362
|
+
- 配置文件随镜像提供,并允许只读挂载覆盖;密钥只通过环境变量或 `--env-file` 注入。
|
|
363
|
+
- 普通构建不携带 `data/`;只有用户明确运行 `docker:build:data` / `podman:build:data` 时才通过 named build context 嵌入 SQLite/本地存储初始快照。
|
|
364
|
+
- 数据库和本地存储的持续写入必须落到 volume,不能依赖镜像可写层。
|
|
365
|
+
- 完成前实际启动镜像,验证健康端点、非 root 用户、环境变量覆盖、配置挂载和预置数据读取。
|
|
366
|
+
|
|
367
|
+
---
|
|
368
|
+
|
|
357
369
|
## 检查清单
|
|
358
370
|
|
|
359
371
|
- [ ] **TDD 流程已执行**:先写测试 → 确认失败 → 再实现 → 确认通过
|
|
@@ -365,6 +377,7 @@ core.init() → reldb.init() → cache.init() → iam.init() → createBusinessT
|
|
|
365
377
|
- [ ] 日志级别正确(读 debug / 写 debug+info / 失败 warn|error)
|
|
366
378
|
- [ ] 禁止 `console.log`、`any`、硬编码密钥
|
|
367
379
|
- [ ] 用户可见文本走 i18n
|
|
380
|
+
- [ ] Docker / Podman 镜像可启动,配置/环境变量/数据目录行为已验证
|
|
368
381
|
- [ ] 新增表有索引定义
|
|
369
382
|
- [ ] 组件优先使用 `@h-ai/ui`
|
|
370
383
|
- [ ] `pnpm typecheck && pnpm lint && pnpm test` 通过
|
|
@@ -226,7 +226,7 @@ const consumed = await iam.ticket.consume(ticket, { purpose: 'ai-audio' }) //
|
|
|
226
226
|
| 方法 | 签名 | 说明 |
|
|
227
227
|
| -------------- | ----------------------------------------------------------------------- | -------------------------------------- |
|
|
228
228
|
| `createApiKey` | `(userId, options: CreateApiKeyOptions) => Promise<HaiResult<CreateApiKeyResult>>` | 创建 API Key(明文密钥仅返回一次) |
|
|
229
|
-
| `listApiKeys` | `(userId) => Promise<HaiResult<ApiKey
|
|
229
|
+
| `listApiKeys` | `(userId, options?) => Promise<HaiResult<PaginatedResult<ApiKey>>>` | 分页列出用户的 API Key |
|
|
230
230
|
| `getApiKey` | `(keyId) => Promise<HaiResult<ApiKey \| null>>` | 获取 API Key 详情 |
|
|
231
231
|
| `revokeApiKey` | `(keyId) => Promise<HaiResult<void>>` | 吊销/删除 API Key |
|
|
232
232
|
| `verifyApiKey` | `(rawKey) => Promise<HaiResult<ApiKey>>` | 验证 API Key 并返回实体(含用户 ID) |
|
|
@@ -474,6 +474,7 @@ const p = usePlatform()
|
|
|
474
474
|
| `card` | 卡片列表项渲染 snippet;仍复用分页和独立滚动容器 |
|
|
475
475
|
| `detailColumns` | 点击后打开详情抽屉的列 key,例如 `['title']` |
|
|
476
476
|
| `sortableColumns` | 可执行服务端排序的列;为空时使用全部列表列 |
|
|
477
|
+
| `loading` / `loaded` / `error` / `onRetry` / `keepPreviousData` | 受控加载态:仅 `loaded && total===0` 显示空状态;首次显示查询中;失败显示错误+重试;`keepPreviousData`(默认 true)失败保留旧数据 |
|
|
477
478
|
|
|
478
479
|
注意:`CrudPage` 会占满父级可用高度;表格无论是否有数据都会撑满剩余空间,仅数据区滚动,表头和分页栏固定。
|
|
479
480
|
|
|
@@ -501,6 +502,12 @@ form={{ variant: 'drawer', drawerWidth: '40rem' }}
|
|
|
501
502
|
|
|
502
503
|
抽屉默认可拖动左侧边缘调整宽度,并按 `crud.resource.name` 记忆;传 `drawerResizable: false` 可关闭。
|
|
503
504
|
|
|
505
|
+
### 纯客户端控制器与惰性页签
|
|
506
|
+
|
|
507
|
+
- 无 SvelteKit SSR 时用 `defineCrud` + `createCrudController` 托管 `data` / `nav`:latest-wins(seq + AbortSignal)、失败保留旧数据、并发去重、查询串回填地址栏。`<CrudPage data={c.data} nav={c.nav} loading={c.loading} loaded={c.loaded} error={c.error} onRetry={c.reload} />`。
|
|
508
|
+
- `Tabs` 传 `lazy` 后未激活页签不渲染(`children` 提供 `isActivated(key)`),`onactivate(key)` 首次激活触发一次;配合 `createCrudController({ autoLoad: false })` 在页签首次可见时才 `load()`。
|
|
509
|
+
- Toast 已内置 `notifySuccess` / `notifyError(err, fallback?)` / `notifyInfo` / `notifyWarning`,业务应用无需自建 toast 工具文件。
|
|
510
|
+
|
|
504
511
|
---
|
|
505
512
|
|
|
506
513
|
## Design Token 系统
|