一键导入
hai-kit
使用 @h-ai/kit 构建 SvelteKit 请求管道、认证守卫、统一响应、Zod 校验、浏览器端 apiFetch、A2A 与双构建适配;当需求涉及 hooks.server.ts、权限守卫、CORS、限流、同源 transport 或 SvelteKit API endpoint 时使用。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
使用 @h-ai/kit 构建 SvelteKit 请求管道、认证守卫、统一响应、Zod 校验、浏览器端 apiFetch、A2A 与双构建适配;当需求涉及 hooks.server.ts、权限守卫、CORS、限流、同源 transport 或 SvelteKit API endpoint 时使用。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Use when: using @h-ai/ai, LLM calls, chat completion, tool calling, function calling, MCP server, streaming, memory management, context compression, summarization, token estimation, RAG, knowledge base, AI client, embeddings, reasoning, rerank, file parsing, speech recognition ASR, speech synthesis TTS, audio, A2A agent-to-agent. 使用 @h-ai/ai 进行 LLM 调用、工具定义、MCP 服务器、流式处理、记忆管理、上下文压缩、知识库、推理引擎、Rerank、文件解析、语音识别与合成、A2A 与会话持久化。
Use when: using @h-ai/ai for LLM calls, tools, MCP, streaming, memory/context, RAG, audio, A2A, or the AI client. 当需求涉及 AI 对话、工具、Audio、会话、知识库或 AI 客户端时使用。
Use when: creating or extending apps in hai-framework, adding routes, pages, API endpoints, service workspaces, mobile app, H5 app, admin console. 在 hai-framework 中创建或扩展应用或 API service workspace,包含路由、API 端点、typed contract、服务层与 UI 脚手架代码。
Use when: creating a new module, new package, scaffold, add sub-feature, add provider, create repository, module structure, tsup config, error codes, NotInitializedKit pattern. 在 hai-framework 中创建新模块(package)。
Use when: reviewing app code in hai-framework, auditing app quality, checking app conventions, reviewing routes, reviewing API service workspaces, app security, app i18n review. 对 hai-framework 应用层代码进行审查:路由安全 → 认证授权 → i18n → 组件使用 → API 端点 / service workspace → 服务层 → 性能。
Use when: reviewing code, code review, auditing module quality, checking hai-framework conventions, verifying HaiResult<T> usage, reviewing module structure, PR review, checking naming consistency, verifying NotInitializedKit pattern, auditing performance, security, distributed systems. 对 hai-framework 模块进行全维度代码审查:架构 → 命名 → 类型 → 注释 → 性能 → 分布式 → 安全 → 日志 → 测试 → 文档。
| name | hai-kit |
| description | 使用 @h-ai/kit 构建 SvelteKit 请求管道、认证守卫、统一响应、Zod 校验、浏览器端 apiFetch、A2A 与双构建适配;当需求涉及 hooks.server.ts、权限守卫、CORS、限流、同源 transport 或 SvelteKit API endpoint 时使用。 |
| 项目 | 契约 |
|---|---|
| 能力 | 使用 @h-ai/kit 构建 SvelteKit 请求管道、认证守卫、统一响应、Zod 校验、浏览器端 apiFetch、A2A 与双构建适配;当需求涉及 hooks.server.ts、权限守卫、CORS、限流、同源 transport 或 SvelteKit API endpoint 时使用。 |
| 适用场景 | 当任务与 hai-kit 的能力描述匹配,并且需要遵循本 Skill 的流程和边界时 |
| 输入 | 模块配置、类型化业务参数、依赖初始化状态和目标运行环境 |
| 输出 | 符合模块公共 API 的实现或示例;业务结果使用 HaiResult,并同步必要测试与文档 |
| 限制 | 遵守 init → use → close 生命周期与运行环境边界;不绕过类型、授权、输入校验或敏感信息保护 |
@h-ai/kit只负责 SvelteKit 集成:handlehook、guard、response、validate、client、auth、crud、A2A。公共跨端 HTTP API 契约统一使用@h-ai/api-contract+@h-ai/serv,不要在 kit 中定义业务 API contract。
import type { Handle } from '@sveltejs/kit'
import { kit } from '@h-ai/kit'
const haiHandle = kit.createHandle({
auth: {
verifyToken: async token => token ? { userId: 'u_1', roles: ['admin'], permissions: ['user:read'] } : null,
loginUrl: '/auth/login',
protectedPaths: ['/admin/*'],
},
rateLimit: { windowMs: 60_000, maxRequests: 100 },
logging: true,
})
export const handle: Handle = haiHandle
import { kit } from '@h-ai/kit'
import { z } from 'zod'
const CreateUserSchema = z.object({ name: z.string().min(1) })
export const POST = kit.handler(async ({ request, locals }) => {
kit.guard.require(locals.session, 'user:create')
const payload = await kit.validate.body(request, CreateUserSchema)
return kit.response.created(payload)
})
import { kit } from '@h-ai/kit'
const client = kit.client.create()
export const { apiFetch } = client
同源 endpoint 优先使用 httpOnly Cookie;
auth: true只读取kit.auth.setBrowserToken()写入的页面内存 Token,不会默认读写 localStorage。确需 Bearer Header 时,显式传入BrowserTokenStore,禁止把敏感 Token 存入 localStorage。
kit 不再维护本地传输加密实现;服务端和客户端都统一委托 @h-ai/crypto 的 crypto.transport。
// hooks.server.ts
import { cache } from '@h-ai/cache'
import { createRedisTransportKeyStore, crypto } from '@h-ai/crypto'
import { kit } from '@h-ai/kit'
await crypto.init()
await cache.init({ type: 'redis', host: '127.0.0.1', port: 6379 })
export const handle = kit.createHandle({
auth: {
verifyToken,
protectedPaths: ['/api/*'],
publicPaths: ['/api/_hai/*'],
},
crypto: {
crypto,
transport: {
requireEncryption: true,
keyStore: createRedisTransportKeyStore({ cache, ttlSeconds: 3600 }),
},
},
})
需要保护会话 Cookie 时配置 crypto.encryptedCookies,并通过 crypto.cookieEncryptionKey 或 HAI_KIT_COOKIE_KEY 提供密钥。缺少密钥会在 createHandle() 时失败;加解密错误不会回退到明文 Cookie。
// routes/+layout.svelte
<script lang='ts'>
import { browser } from '$app/environment'
import { crypto } from '@h-ai/crypto'
import { kit } from '@h-ai/kit'
import { appKitConfig } from '$lib/config/kit-config'
// 一次性安装:内部按 appKitConfig.transport 是否启用决定行为,并预热 crypto
if (browser) {
kit.client.installBrowserTransport(appKitConfig, { crypto })
}
</script>
// lib/utils/api.ts —— 业务层只看到 apiFetch
import { kit } from '@h-ai/kit'
export const { apiFetch } = kit.client.create()
默认协商端点:/api/_hai/key-exchange。如 keyExchangePath 自定义,浏览器端同步设置 keyExchangeUrl。
多节点部署时,可在 kit.createHandle({ crypto: { transport } }) 的运行时对象里直接传 keyStore;推荐使用 @h-ai/crypto 根入口导出的 createRedisTransportKeyStore() / createReldbTransportKeyStore()。这类对象依赖不要写进 _kit.yml。
transport 默认保护同源 /api/* endpoint 与 SvelteKit __data.json 页面数据请求;页面文档、静态资源与 multipart/form-data 上传请求保持明文透传。
安全策略默认 fail-closed:requireEncryption: true 时,受保护路径缺少 X-Client-Id 必须返回 400;服务端 transport 管理器不可用、响应体无法加密或超过单次加密上限时返回错误,禁止明文业务响应回退。requireEncryption: false 只适合迁移期灰度。
_kit.yml 统一 transport 配置@h-ai/kit 现在提供 KitConfigSchema / resolveKitConfig(),适合同一份 _kit.yml
同时驱动 hooks.server.ts 与浏览器端 kit.client.installBrowserTransport():
transport:
keyExchangePath: /api/_hai/key-exchange
requireEncryption: true
encryptResponse: true
excludePaths:
- /api/storage
- /api/public
- /api/auth/profile/avatar
maxClients: 10000
import { resolveKitConfig } from '@h-ai/kit'
import { parse } from 'yaml'
import rawKitConfig from '../config/_kit.yml?raw'
export const appKitConfig = resolveKitConfig(parse(rawKitConfig) ?? {})
_kit.yml 只放公开的 transport 路径/开关,不放密钥;如自定义 keyExchangePath,浏览器端必须同步映射为 keyExchangeUrl。
| API | 用途 |
|---|---|
kit.createHandle() | 创建 SvelteKit Handle |
kit.sequence() | 组合多个 Handle |
kit.handler() | API endpoint 错误边界 |
kit.guard.require() | 权限守卫 |
kit.response.* | 统一响应工厂 |
kit.validate.* | Zod 请求校验 |
kit.auth.* | Cookie / Token 辅助 |
kit.client.create() | 浏览器端同源 apiFetch |
kit.client.installBrowserTransport(config, { crypto }) | 推荐入口:按解析后的 _kit.yml 一键安装浏览器端传输加密 |
kit.client.installBrowserTransportFetch() | 底层入口:直接传 transport 配置安装浏览器全局 fetch 包装 |
kit.crud.define() | 声明式 CRUD 资源 |
kit.client.create().apiFetch。+layout.svelte 的 if (browser) 分支调用一次 kit.client.installBrowserTransport(appKitConfig, { crypto }),无需重复连线 keyExchangeUrl / excludePaths。@h-ai/api-client typed client。crypto.transport 间接装配,不在 kit 中新增本地加密工厂或鸭子类型。