无极开物Docs

开发工作流

使用 hstack(工作树 + 栈 + dev-auth)本地开发 Kaiwu 的“一站式”指南。

本文旨在为开发者与 LLM 提供完备的指导,确保在 Kaiwu monorepo 中的操作安全且可复现。

初次使用请先阅读以下内容:


核心概念(心智模型)

Monorepo

hstack 以 Monorepo 为核心构建:UI、CLI 以及服务器代码均存放在同一个 Kaiwu Git 仓库中。

当前目录结构:

  • apps/ui(UI)
  • apps/cli(CLI 与守护进程)
  • apps/server(服务器;提供轻量版和完整版两种形态)
  • apps/stack(本工具)

工作区签出(代码存放位置)

你的工作区包含以下内容:

  • main/ —— 稳定版本签出(请视为只读)
  • dev/ —— 标准开发签出(dev 分支)
  • 分类工作树:
    • pr/<...> —— PR 签出(hstack wt pr ...)
    • local/⟦K24⟧/<...> —— 特性工作树
    • tmp/⟦K25⟧/<...> —— 临时工作树

工作树(代码编写位置)

切勿直接在 main/ 中开发,请将其视为“启动器默认环境”。

所有功能实现均应在以下位置进行:

  • dev/,或
  • 位于 local/、tmp/、pr/ 下的工作树。

栈(安全测试方案)

栈是隔离的运行时环境(包含独立的端口、目录、数据库以及 CLI 主目录),存放在:

~/.Kaiwu/stacks/<stack>/...

每个栈的配置位于:

~/.Kaiwu/stacks/<stack>/env

通过使用栈,你可以在不污染“主”环境的前提下测试代码修改。

服务器形态(运行哪种后端)

每个栈仅运行一种服务器形态:

  • Kaiwu-server-light(推荐)—— 最简单的本地安装形态(默认使用 SQLite;可通过 PGlite 选用嵌入式 Postgres)
  • Kaiwu-server(完整版)—— 由 Docker 管理的 Postgres/Redis/Minio 环境

详情参见:Server flavors。


原则底线(保障栈环境安全的开发纪律)

  • 统一以 hstack 作为入口
    • 如果需要栈级隔离行为,切勿直接运行裸命令 yarn dev、expo、docker compose 等。
    • hstack 需要依赖栈范围的环境变量与运行时记录来保持环境相互隔离。
  • 始终在工作树中开发
    • 使用 dev/ 或 hstack wt ... 工作树;不要直接修改 main/。
  • 在非 main 栈中测试
    • 优先选用 hstack stack ⟦K26⟧ dev|start|test|typecheck|lint,避免变更污染默认栈。
  • 不要杀掉全局守护进程
    • 系统设计上允许多个栈的守护进程并存(每个栈一个)。
    • 请显式停止指定栈:执行 hstack stop 或 hstack stack stop ⟦K27⟧。

快速上手(常用开发流)

1) 典型特性开发(在单个工作树中同时修改 UI、CLI 和服务器)

基于上游创建工作树(推荐此做法以保持干净的 PR 提交历史):

hstack wt new local/my-feature --from=upstream --use

创建隔离栈并将其指向当前活动工作树:

hstack stack new exp1
hstack stack wt exp1 -- use active

以开发模式运行:

hstack tui stack dev exp1

如果无法使用 TUI(例如非交互式终端或 CI 环境),请运行:

hstack stack dev exp1

执行校验:

hstack stack typecheck exp1
hstack stack lint exp1
hstack stack test exp1

2) 使用标准 dev/ 签出代替特性工作树

创建开发栈并将其固定到 dev/:

hstack stack new dev
hstack stack wt dev -- use dev
hstack tui stack dev dev
# (optional) mobile dev-client + QR:
hstack tui stack dev dev --mobile

3) 本地测试上游 PR(推荐)

创建 PR 工作树:

hstack wt pr 123 --use

创建隔离的 PR 栈(支持幂等更新):

hstack stack pr pr123 --repo=123 --dev

如果已经创建过 dev-auth 种子栈,可以追加参数:

hstack stack pr pr123 --repo=123 --dev --seed-auth --copy-auth-from=dev-auth --link-auth

PR 工作流(以 dev 分支为目标)

Kaiwu 的分支规划如下:

  • main:稳定分支
  • dev:贡献分支(PR 的基准分支)

推荐流程:

  1. 基于 upstream/dev 创建工作树
  2. 推送至个人 Fork 仓库(origin)
  3. 向 upstream/dev 提交 PR

hstack 默认基于上游历史创建新工作树,并推荐使用 origin 推送,从而有效保障 PR 历史的整洁。

详情参见:Worktrees and forks。

若想通过引导式工作流从 dev 分支提取特性分支,可运行:

hstack contrib ensure-dev
hstack contrib extract my-feature --push

start 与 dev 的区别

  • hstack start / hstack stack start ⟦K28⟧:接近生产环境的表现(使用构建后的 UI,文件监听进程更少)
  • hstack dev / hstack stack dev ⟦K29⟧:开发环境(启动监听器与开发服务器,迭代更快速)

如果不确定该选哪个,请使用 hstack tui stack dev ⟦K30⟧(在非交互式环境中请使用 hstack stack dev ⟦K31⟧)。


开发者专属:一次性配置 dev-auth(推荐)

创建种子栈并完成交互式登录:

hstack auth seed

后续创建新栈即可直接复用该认证凭据:

hstack stack auth <stack> copy-from dev-auth

详情参见:Auth (dev-auth seeding)。


进程隔离(停止与重启操作安全的原因)

每个栈都会在专用的运行时状态文件中记录其归属的运行中进程:

~/.Kaiwu/stacks/<stack>/stack.runtime.json

hstack 依此实现:

  • 仅停止属于当前栈的进程
  • 重启时尽可能复用临时端口
  • 避免直接按端口号进行全局误杀

“上游优先”工作树工作流(推荐)

该流程的目标是:

  • 保持个人 Fork 长期分支的整洁与稳定
  • 快速创建面向基准上游的 PR 分支
  • 避免将仅用于 Fork 的本地修改混入上游 PR 中

推荐操作模式:

  1. 基于 upstream/dev 创建工作树:
hstack wt new local/my-feature --from=upstream --base=upstream/dev --use
  1. 在隔离栈中进行开发与校验:
hstack stack new exp1
hstack stack wt exp1 -- use active
hstack stack dev exp1
  1. 将分支推送到个人 Fork,并向 upstream/dev 发起 PR:
hstack wt push active --remote=origin

如果确实需要保留仅用于 Fork 的发行补丁(极少见),请放在独立分支中维护,切勿合并到面向由上游合并的 PR 工作树里。


监听模式与热重载迭代

hstack 默认使用 dev 模式进行开发,原因如下:

  • 以适配开发的方式启动服务器
  • 启动 UI 开发服务器(视具体应用决定启动 Expo 还是 Next)
  • 基于栈自身的运行时状态安全重启各进程

在切换运行选项参数(如启用移动端)时,推荐使用 hstack 重启整个栈,而非逐个手动重启各个进程。


校验命令(类型检查、代码检查与测试)

推荐在栈作用域内执行校验,以确保测试环境与实际运行环境一致:

hstack stack typecheck exp1
hstack stack lint exp1
hstack stack test exp1

针对当前活动的签出目录(非栈环境),也可以直接运行:

hstack typecheck
hstack lint
hstack test

CLI 命令参考(高频核心)

核心操作:

  • 初始化(源码安装):hstack setup-from-source --profile=dev|selfhost(已废弃别名:hstack setup)
  • 运行:hstack start / hstack dev
  • 停止:hstack stop
  • 诊断:hstack where、hstack doctor

栈管理:

  • 创建/列出/查看信息:hstack stack new、hstack stack list、hstack stack info
  • 运行:hstack stack dev ⟦K32⟧、hstack stack start ⟦K33⟧
  • 切换仓库目录:hstack stack wt ⟦K34⟧ -- use ⟦K35⟧
  • 切换服务器形态:hstack stack srv ⟦K36⟧ -- use Kaiwu-server-light|Kaiwu-server
  • 认证管理:hstack stack auth ⟦K37⟧ status|login|copy-from
  • PR 栈:hstack stack pr ⟦K38⟧ --repo=⟦K39⟧

工作树管理:

  • 创建/使用:hstack wt new ⟦K40⟧ --use
  • PR 签出:hstack wt pr ⟦K41⟧ --use
  • 列出/状态/更新:hstack wt list、hstack wt status、hstack wt update、hstack wt update-all
  • 推送:hstack wt push active --remote=origin

认证播种:

  • 种子栈:hstack auth seed
  • 批量播种:hstack auth copy-from dev-auth --all --except=main,dev-auth
  • 开发者密钥:hstack auth dev-key

常用环境变量配置(高频核心)

路径配置:

  • Kaiwu_STACK_WORKSPACE_DIR(工作区根目录)
  • Kaiwu_STACK_REPO_DIR(活动签出目录;通常由 hstack wt use 管理)
  • Kaiwu_STACK_CLI_ROOT_DIR(从本地签出目录运行 hstack)

认证配置:

  • Kaiwu_STACK_AUTH_SEED_FROM(新栈的默认认证源;常用 dev-auth)
  • Kaiwu_STACK_AUTH_MODE(copy 与 link)

服务器选择:

  • Kaiwu_STACK_SERVER_COMPONENT(Kaiwu-server-light 与 Kaiwu-server)

排障指南(高频核心)

“hstack 究竟在使用什么配置?”

hstack where
hstack stack info <name>

“为什么这个栈使用了错误的签出目录?”

检查已固定的仓库路径:

hstack stack info <name>
cat ~/.Kaiwu/stacks/<name>/env | rg Kaiwu_STACK_REPO_DIR

重新指定路径即可修复:

hstack stack wt <name> -- use dev
# or:
hstack stack wt <name> -- use pr/123-fix-thing
© 乾元执中(南京)科技有限公司 · WUJI-Labs

On this page