hile-cli
SKILL.md
@hile/cli SKILL
本文档面向代码生成器与维护者,强调“可执行约束”,而非入门说明。
1. 强约束(必须遵守)
hile.auto_load_packages只允许模块名,禁止文件路径。- boot 文件命名必须为
*.boot.ts/*.boot.js。 - boot 文件必须
export default合法 Hile 服务(defineService/register结果)。 - 加载顺序必须固定:
auto_load_packages→ 扫描 boot。 - 运行目录优先级必须固定:
HILE_RUNTIME_DIR→src(dev) →dist。 - CLI 必须订阅
container.on并输出关键生命周期日志。 - 进程退出时必须通过
registerExitHook(container, offEvent)注册退出钩子;钩子内必须 awaitcontainer.shutdown()完成后再执行offEvent()与exit(),未完成时进程挂起不退出。
2. 容器事件日志约束
最小事件集:
service:initservice:readyservice:errorservice:shutdown:startservice:shutdown:doneservice:shutdown:errorcontainer:shutdown:startcontainer:shutdown:donecontainer:error
要求:
- 保留原始错误对象(错误单独一行输出,便于堆栈阅读)
- 输出统一日志前缀
[hile],目标与状态自然拼接 - 记录可用耗时字段(
durationMs),如ready (12ms) - 仅在 TTY 时启用 ANSI 颜色(成功绿、错误红、警告黄、中性 dim),非 TTY 不输出转义码
3. 反模式(禁止)
3.1 在 CLI 中重复实现容器语义
// ✗ 不要在 CLI 内自建另一套生命周期/依赖管理
// ✓ 复用 @hile/core 的 onEvent、shutdown、resolve 语义
3.2 boot 文件导出普通函数或配置
// ✗
export default function main() {}
// ✓
export default defineService(async (shutdown) => {
// ...
})
3.3 忘记取消事件订阅
// ✗ 只订阅不释放
const off = container.on(listener)
// ✓ 退出时在 registerExitHook 的 finally 中调用 off()
3.4 退出钩子不调用 container.shutdown
// ✗ 直接 exit 不关闭容器
exitHook(exit => exit())
// ✓ 使用 registerExitHook(container, offEvent),内部会 shutdown 再 exit
4. 边界条件清单
- 无可加载服务时打印
no services to load并退出 - 非法默认导出时报错包含目标文件或模块标识
-
--dev与非 dev 的NODE_ENV行为一致 - 多个
--env-file加载顺序可预测 - shutdown 期间异常不会吞掉主错误
- 退出钩子:
exit()仅在container.shutdown()完成后调用;shutdown 未完成时进程挂起(见 exitHook 单测)
Weekly Installs
18
Repository
cevio/hileFirst Seen
13 days ago
Security Audits
Installed on
opencode18
gemini-cli18
github-copilot18
codex18
kimi-cli18
amp18