从 Monorepo 克隆运行(仓库本地模式)
在 Kaiwu monorepo 根目录下使用 yarn 命令运行无栈本地栈、安装操作系统服务并配置 Tailscale。
如果克隆了 Kaiwu monorepo,你可以直接在仓库根目录下运行 yarn 脚本,处理大部分日常工作流。
注意:GitHub 仓库的默认分支是 dev,可能不够稳定。若希望在基于源码运行时获得更稳定的环境,建议签出 preview。
该模式为仓库本地(repo-local,即无栈)模式:它会在 ~/.KAIWU/stacks/⟦K28⟧/... 下为当前签出目录创建隔离的栈,且无需指定栈名称。
重要说明:仓库本地模式本质上仍是基于源码运行(source-backed)的流程。
yarn tui、yarn dev以及仓库本地的yarn start均直接运行自当前签出源码。- 若需要栈本地生产构建产物(
web + server + daemon)及激活的运行时快照,请搭配hstack stack build ⟦K29⟧ --activate-runtime使用具名栈。 - 如果你想让第二个栈指向同一个签出目录,同时免受源码重新构建带来的变动影响,具名栈是理想选择。
前置准备
- 启用 Node + Corepack
- 在 monorepo 根目录下运行
yarn install
快速上手(开发模式)
cd /path/to/KAIWU
yarn dev若要使用交互式终端 UI(TUI):
yarn tui如果设备已被 Agent 任务完全占满,可使用救援调度优先级启动控制面:
yarn tui --rescue救援模式支持 macOS 和 Linux。它会请求 sudo 仅提升 TUI 和栈控制进程的优先级;新启动的 Agent 会话则会恢复为较低的调度优先级,不会继承控制面的提速权限。以普通用户身份运行 Yarn 即可——该命令仅在执行 renice 时请求提权。
在有人值守的 TUI 启动等待过程中,即便超过了就绪检测间隔,也不会直接销毁栈。只要归属的启动生命周期仍处于活跃状态,该检测间隔就会生成一个可见的“仍处于启动中”检查点,TUI 将继续等待。退出 TUI 依然是唯一的取消机制。非交互式栈和服务命令则保留有限的超时时限。
包含移动端(启动带 --mobile 的开发栈,从而可以使用 Expo dev-client 二维码流程):
yarn tui:with-mobile命令模型(仓库本地模式工作原理)
所有仓库根目录的运行时脚本均遵循以下包装器结构:
node ./apps/stack/scripts/repo_local.mjs <hstack-subcommand> [args...]该包装器会自动处理以下关键操作:
- 强制基于当前 monorepo 签出目录执行(不会重定向到全局安装)。
- 使用与各签出目录隔离的栈名称(
repo-⟦K30⟧-⟦K31⟧)。 - 在
~/.KAIWU/stacks/⟦K32⟧/...下设置栈作用域的环境变量文件和 CLI 主目录。 - 默认使用无栈模式的固定端口范围:
- 服务端起始端口
52005 - Expo 起始端口
18081
- 服务端起始端口
- 在大多数运行时命令执行前,按需自动安装依赖。
包装器默认行为与便捷改写规则:
yarn tui会变为hstack tui dev(在未传入额外参数时)。yarn stop会变为hstack stack stop ⟦K33⟧。yarn mobile:install会变为hstack stack mobile:install ⟦K34⟧ --name="Kaiwu (Local)",除非显式传入--name。
传递参数与获取帮助
使用 Yarn v1 的参数转发机制,配合 -- 传参:
yarn logs -- --component=daemon --lines 200 --no-follow
yarn auth login -- --method=mobile --no-open
yarn service:enable -- --auth-now -- --method=web --webapp=hosted查看帮助:
yarn <script> -- --help
yarn service -- --help
yarn remote -- --help在任意位置运行 Kaiwu CLI(基于当前仓库签出)
若希望在任意终端中运行的 hstack / KAIWU 命令都基于当前克隆版本执行(而非运行时全局安装版本),
可以激活仓库本地 shim:
yarn cli:activate若要同时将 ~/.KAIWU-stack/bin 自动添加到 Shell 的 PATH(会修改 Shell 配置文件):
yarn cli:activate:path类生产环境启动(本地)
yarn start 会以类生产环境(prod-like)模式运行本地栈(包括服务端、守护进程,以及可选托管的预构建 UI 产物包)。
在执行 yarn start 之前,先构建导出的静态 UI 产物:
yarn build
yarn start默认情况下,yarn build 会将 Web UI 导出产物写入当前栈的根目录:
~/.KAIWU/stacks/<repo-stack>/ui这里仅包含 Web 产物包。仓库本地模式目前不会为服务端和守护进程组装栈本地运行时快照。
若需要该级别的隔离,请改用具名栈:
hstack stack new prod-dev --repo=/absolute/path/to/this/checkout
hstack stack build prod-dev --activate-runtime
hstack stack env prod-dev set KAIWU_STACK_RUNTIME_MODE=prefer
hstack stack start prod-dev --runtime系统服务(开机自启)
你可以安装系统服务,使 hstack start 在后台常驻运行(macOS 使用 launchd,Linux 使用 systemd)。
推荐做法(先构建 UI 再安装服务):
yarn service:install
yarn service:enable首次认证(推荐)
如果是首次在该设备上运行栈,服务会保持服务端和 UI 运行,但守护进程可能会处于停止状态,直到完成认证。
适合无图形界面环境(打印二维码/深度链接,不会自动打开浏览器):
yarn service:enable -- --auth-now -- --method=mobile --no-open适合笔记本电脑环境(使用托管 Web 应用呈现授权审批界面):
yarn service:enable -- --auth-now -- --method=web --webapp=hosted注意事项:
- 如果已启用服务,之后可通过
yarn auth login ...完成认证——服务会自动检测凭据并启动守护进程。 - 若栈的公网 URL 为
localhost/127.0.0.1(或为空)且未启用 Tailscale Serve,在配置公网 URL 之前无法通过手机使用--method=mobile(详见下文 Tailscale 部分)。
其他服务相关命令:
yarn service status
yarn service logs
yarn service tail
yarn service restart
yarn service:disable
yarn service:uninstallLinux 系统服务(高级):
yarn service:install:systemTailscale Serve(HTTPS 安全上下文)
如果使用 Tailscale,可以配置 tailscale serve 通过 HTTPS 暴露本地栈。
yarn tailscale:enable
yarn tailscale:url其他 Tailscale 命令:
yarn tailscale status
yarn tailscale:disable日志
持续跟踪日志(默认跟踪 --component=auto 选中的日志):
yarn logs常用日志流(无需额外参数):
yarn logs:all
yarn logs:server
yarn logs:expo
yarn logs:ui
yarn logs:daemon
yarn logs:service高级用法:向 hstack logs 传递参数(Yarn v1 需要使用 -- 才能将参数转发到底层命令):
yarn logs -- --component=server --follow
yarn logs -- --component=expo --follow
yarn logs -- --component=daemon --lines 200 --no-follow环境变量(针对单个仓库本地栈)
yarn env list
yarn env set KEY=VALUE
yarn env unset KEY这些修改会持久化保存在:
~/.KAIWU/stacks/<repo-stack>/env移动端
安装 iOS Release 构建版本(执行完整流程,无需指定栈名称):
yarn mobile:install其他仓库本地移动端工作流:
yarn mobile
yarn mobile-dev-client命令参考(仓库本地运行时脚本)
本节汇总了 monorepo 根目录下提供的运行时命令,有意略过了面向维护者的测试、构建和发布脚本。
核心生命周期
| Yarn 脚本 | 底层命令 | 用途 | 常用参数 |
|---|---|---|---|
yarn dev | hstack dev | 以开发模式启动本地栈(编排服务端 + UI + 守护进程)。 | --restart, --mobile, --no-ui |
yarn tui | hstack tui dev (default) | 在分屏 TUI 中运行开发栈(或显式传入 hstack 参数)。 | --restart, --mobile, --no-browser, --rescue |
yarn tui:with-mobile | hstack tui dev --mobile | TUI + 移动端 dev-client 就绪流程。 | 在 -- 后追加额外的 TUI 参数 |
yarn build | hstack build | 为类生产环境启动/服务构建并导出 UI 资源。 | --tauri, --no-ui, --json |
yarn start | hstack start | 启动类生产环境本地栈。 | --restart, --mobile, --no-ui |
yarn stop | hstack stack stop ⟦K35⟧ | 停止该仓库本地栈,无需手动传入栈名称。 | 在 -- 后追加栈停止参数 |
认证、守护进程与 CLI 入口
| Yarn 脚本 | 底层命令 | 用途 | 常用参数 |
|---|---|---|---|
yarn auth | hstack auth ... | 当前仓库本地栈的登录/状态/开发密钥认证辅助工具。 | status, login, seed, `--method=mobile |
yarn daemon | hstack daemon ... | 在栈作用域内管理守护进程(start、stop、restart、status)。 | status, restart, --identity=⟦K36⟧, --json |
yarn KAIWU | hstack KAIWU ... | 针对当前仓库本地栈上下文运行 Kaiwu CLI。 | 透传提供商/CLI 参数 |
yarn cli:activate | hstack init --cli-root-dir=⟦K37⟧/apps/stack --no-runtime --no-bootstrap | 将全局 hstack/KAIWU shim 指向当前克隆版本。 | --home-dir=... |
yarn cli:activate:path | 同上 + --install-path | 功能同 cli:activate,并同步更新 Shell PATH。 | 无(透传额外参数) |
日志
| Yarn 脚本 | 底层命令 | 用途 | 常用参数 |
|---|---|---|---|
yarn logs | hstack logs --follow | 跟踪自动选取的日志流。 | --component=⟦K38⟧, --lines N, --no-follow |
yarn logs:all | hstack logs --follow --component=all | 跟踪所有组件日志(可用时优先使用 runner)。 | --lines N |
yarn logs:server | hstack logs --follow --component=server | 仅服务端日志。 | --lines N, --no-follow |
yarn logs:expo | hstack logs --follow --component=expo | 仅 Expo/Metro 日志。 | --lines N, --no-follow |
yarn logs:ui | hstack logs --follow --component=ui | 仅 UI 网关日志。 | --lines N, --no-follow |
yarn logs:daemon | hstack logs --follow --component=daemon | 仅守护进程日志。 | --lines N, --no-follow |
yarn logs:service | hstack logs --follow --component=service | 系统服务日志(launchd/systemd 输出)。 | --lines N, --no-follow |
--component 的有效值包括:auto、all、runner、server、expo、ui、daemon、service。
环境变量
| Yarn 脚本 | 底层命令 | 用途 | 常用参数 |
|---|---|---|---|
yarn env list | hstack env list | 打印当前仓库本地栈生效的持久化环境变量。 | --json |
yarn env set KEY=VALUE | hstack env set KEY=VALUE | 设置/更新持久化环境变量。 | 多个 KEY=VALUE 键值对 |
yarn env unset KEY | hstack env unset KEY | 删除持久化环境变量。 | 多个键名 |
yarn env get KEY | hstack env get KEY | 读取单个持久化环境变量。 | 变量名 |
yarn env path | hstack env path | 显示栈环境变量文件路径。 | --json |
系统服务(开机自启)
| Yarn 脚本 | 底层命令 | 用途 | 常用参数 |
|---|---|---|---|
yarn service | hstack service ... | 通用服务入口。 | install, enable, status, logs, tail, restart |
yarn service:install | yarn build && hstack service install | 先构建 UI,再安装服务 unit/plist 文件。 | 无(通过 yarn service install -- ... 传入自定义参数) |
yarn service:install:user | yarn build && hstack service install --mode=user | 显式安装用户级服务。 | 无 |
yarn service:install:system | yarn build && hstack service install --mode=system | 安装 Linux 系统级服务。 | yarn service install -- --mode=system --system-user=⟦K39⟧ |
yarn service:enable | hstack service enable | 启用/启动持久化服务。 | --auth-now -- --method=... |
yarn service:disable | hstack service disable | 禁用/停止持久化服务。 | 无 |
yarn service:status | hstack service status | 显示当前服务状态。 | --json |
yarn service:logs | hstack service logs | 输出近期服务日志(非实时跟踪)。 | `--mode=system |
yarn service:tail | hstack service tail | 持续跟踪服务日志。 | 无 |
yarn service:restart | hstack service restart | 重启受托管的服务。 | 无 |
yarn service:uninstall | hstack service uninstall | 移除服务 unit/plist 文件。 | 无 |
服务日志输出行数默认为 120;可通过 KAIWU_STACK_LOG_LINES=⟦K40⟧ 覆盖该默认值。
Tailscale
| Yarn 脚本 | 底层命令 | 用途 | 常用参数 |
|---|---|---|---|
yarn tailscale | hstack tailscale ... | Tailscale Serve 通用命令入口。 | status, enable, disable, url |
yarn tailscale:status | hstack tailscale status | 查看当前 tailscale serve 状态。 | 无 |
yarn tailscale:enable | hstack tailscale enable | 为仓库本地栈的 URL 配置 tailscale serve。 | --json |
yarn tailscale:disable | hstack tailscale disable | 重置/禁用 tailscale serve 配置。 | 无 |
yarn tailscale:url | hstack tailscale url | 打印解析后的 HTTPS Serve URL(若已配置)。 | 无 |
移动端
| Yarn 脚本 | 底层命令 | 用途 | 常用参数 |
|---|---|---|---|
yarn mobile | hstack mobile | 针对仓库本地栈上下文的 iOS 辅助工具。 | 命令专有参数 |
yarn mobile:install | hstack stack mobile:install ⟦K41⟧ --name=Kaiwu (Local) | 栈作用域应用构建的完整安装流程,无需指定栈名称。 | --name=..., --device=..., --configuration=... |
yarn mobile-dev-client | hstack mobile-dev-client | 安装/管理共享的 hstack iOS dev-client 应用。 | --install, --device=..., --clean |
高级工作流
| Yarn 脚本 | 底层命令 | 用途 | 常用参数 |
|---|---|---|---|
yarn providers | hstack providers ... | 列出/安装提供商 CLI。 | list, install --providers=... |
yarn eas | hstack eas ... | 注入栈环境变量上下文的 EAS 构建包装器。 | `build --platform=ios |
yarn setup | hstack setup-from-source ... | 引导式配置预设(selfhost、dev、local-repo)。 | --profile=dev, --profile=local-repo, --json |
yarn remote | hstack remote ... | 通过 SSH 进行守护进程/服务端的远程配置辅助工具。 | daemon setup --ssh user@host, server setup ... |
yarn self-host | hstack self-host ... | 托管中继运行时安装与生命周期管理(支持时会委托给 KAIWU relay host ...)。 | install, status, update, rollback, uninstall |
yarn menubar | hstack menubar ... | SwiftBar 菜单栏集成。 | install, uninstall, open, mode, status |
hstack 与 npx 的等价关系
是的,用户可以直接使用 hstack 或 npx 来运行许多工作流,但两者有一个重要区别:
yarn ⟦K42⟧会自动应用仓库本地包装器语义。hstack .../npx ... hstack ...则以纯粹的hstack行为运行,除非自行配置了等效的环境变量或栈参数。
示例:
# Published CLI (works, but not repo-local wrapper semantics by default)
npx --yes -p @KAIWU-dev/stack@latest hstack dev
# Equivalent to repo-local wrapper behavior from this checkout
node ./apps/stack/scripts/repo_local.mjs dev
# Recommended for contributors: activate this clone, then use hstack everywhere
yarn cli:activate
hstack dev