packages/core/SKILL.md
@hile/core 的代码生成与使用规范。适用于定义/加载 Hile 服务、生命周期编排、依赖图与容器事件相关场景。
npx skillsauth add cevio/hile hile-coreInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
本文档面向代码生成器与维护者,目标是确保生成代码严格符合容器语义。
defineService(key, async (shutdown) => ...) 形态:key 为 ServiceKey(string | symbol),在容器内唯一标识该服务槽位;同一 key 共享单例。defineService / container.register 产出服务对象。loadService / container.resolve 获取服务实例。shutdown。await loadService(...) 结果。container.shutdown() 必须执行所有已通过 shutdown(fn) 注册的回调;在 shutdown 进行中才完成启动并调用 shutdown 的服务,也会在让出一次事件循环后被关掉(避免竞态漏关)。src/services/ 内:*.boot.* 与 *.service.* 同属 service 模块(均为 defineService / register);*.boot.* 由 CLI 自启动加载,*.service.* 在需要时 loadService 依赖加载。文件名必须以 *.service.ts / *.service.js 或 *.boot.ts / *.boot.js 结尾以区分上述两种加载方式。@hile/http-next / 根 SKILL.md 一致):系统/基础设施逻辑 放 src/services/*.service.*(及 *.boot.*);业务/领域逻辑 放 src/models/*.model.*,不要混写。(http-next 下 defineModel 仅在 models;src/app/** 与 src/controllers/** 均可 loadModel(xxxModel);src/controllers/** 亦可 loadService,见 packages/http-next/SKILL.md。)容器生命周期:init -> ready -> stopping -> stopped。
new Container({ startTimeoutMs })new Container({ shutdownTimeoutMs })生成代码时:
service:shutdown:error 事件出现。允许订阅:container.on(listener)。
关键事件(服务相关事件携带 key: ServiceKey):
service:initservice:readyservice:errorservice:shutdown:startservice:shutdown:doneservice:shutdown:errorcontainer:shutdown:startcontainer:shutdown:donecontainer:error规则:
formatServiceKey(event.key)。容器会自动记录服务依赖并检测循环依赖:
getDependencyGraph()(nodes / edges 使用 ServiceKey)getStartupOrder() 返回 ServiceKey[]规则:
circular dependency detected 时应通过拆分服务职责或引入中间层服务解决。// ✗
const db = await loadService(dbService)
// ✓
export async function query(sql: string) {
const db = await loadService(dbService)
return db.query(sql)
}
// ✗
const fake = { key: 'x', fn: async () => 1 }
// ✓
const real = defineService('real', async () => 1)
// ✗
export const bad = defineService('bad', async () => {
return await createPool()
})
// ✓
export const good = defineService('good', async (shutdown) => {
const pool = await createPool()
shutdown(() => pool.end())
return pool
})
services 下可加载服务未使用 .service 后缀// ✗ src/services/config.ts — 供 loadService 的 service 模块应使用 *.service.*
export const configService = defineService('config', async () => ({}))
// ✓ src/services/config.service.ts(依赖加载)
export const configService = defineService('config', async () => ({}))
*.boot.* 与 *.service.* 均为 service 模块;自启动用 .boot,依赖加载用 .service。
devops
@hile/model: defineModel/loadModel 定义和消费模型;services 依赖注入;pipeline 中间件链;每次 loadModel 重新执行 main
development
Code generation and contribution rules for @hile/micro-dynamic-configs. Use when editing this package or when the user asks about dynamic config patterns or API.
development
Code generation and contribution rules for @hile/cache. Use when editing this package or when the user asks about @hile/cache API, types, patterns, or features.
development
Code generation and contribution rules for @hile/micro. Use when editing this package or when the user asks about @hile/micro API, types, patterns, or features.