在本地运行托管会话
托管本地模式使用持久化的嵌入式 H2 数据库。在本地安装了 Java 21 的情况下, 首次启动 Managed 时会自动下载匹配的 Java 服务器 JAR。 它复用运行 Qwen 的 Node 可执行文件、 其 Hosted Harness、原生 worker 入口和生产 WebShell。用户无需安装 MySQL、Docker、Maven 或 systemd。可选的预装捆绑运行时包含 Java;默认下载版和轻量版需要本地 Java 21。
此模式为实验性功能。实现支持 arm64 和 x64 上的原生 macOS 和 Linux。 平台验收结果单独记录;提供打包目标并不代表该平台已通过 E2E 验证。 Managed 运行时归档按如下方式显式构建;普通 CLI 包不包含 Java 负载。可选的完整 Managed 独立归档捆绑所有组件。
启动与停止
使用包含 Managed 本地支持的 Qwen 版本。旧版本需要升级
CLI;仅安装运行时无法添加启动器。安装 Java 21
并将 JAVA_HOME 设置为其主目录,或将其可执行文件加入 PATH,然后运行:
qwen serve --managed --open在创建应用数据或启动服务之前,Qwen 会检查 Java 21 并
从官方 Aliyun OSS 发布镜像下载 qwen-managed-agent-server-<cli-version>.jar 及其校验和,GitHub Release 作为备选。
它会验证校验和并以原子方式将完整运行时安装到
<Qwen home>/managed-runtime/<cli-version>/<platform>-<arch>/ 下。后续启动
复用该缓存,无需联网。普通 Qwen 命令不会下载它。
仅下载服务 JAR;Qwen 不会安装 Java 或运行 Maven。
如果匹配的发布版本不可用或下载失败,则不会创建
任何应用数据或服务子进程。请稍后重试或预装匹配的运行时。
对于离线使用或捆绑 Java,请从
分发构建者处获取匹配的
qwen-code-managed-runtime-<platform>-<arch>.tar.gz 及其 .sha256 文件。在启动前验证并解压:
shasum -a 256 -c qwen-code-managed-runtime-darwin-arm64.tar.gz.sha256
mkdir -p "${QWEN_HOME:-$HOME/.qwen}"
tar -xzf qwen-code-managed-runtime-darwin-arm64.tar.gz -C "${QWEN_HOME:-$HOME/.qwen}"
qwen serve --managed --open归档安装到
<Qwen home>/managed-runtime/<cli-version>/<platform>-<arch>/ 下。Qwen 会自动发现
其确切版本和平台对应的目录。运行时
不包含其他 Node、CLI、Harness、worker 或 WebShell 安装。
对于更小的离线负载,选择 qwen-code-managed-runtime-lite-<platform>-<arch>.tar.gz
并以相同方式验证/解压。它仅包含服务器 JAR 和
清单。在全新的版本/目标目录中安装一个版本;不要
将轻量版和捆绑版归档叠加安装。轻量版启动器在
JAVA_HOME 非空时使用 JAVA_HOME/bin/java,否则使用 PATH 上第一个可用的
java 可执行文件。它严格要求 Java 21 并在创建应用状态之前检查
可执行文件。即使 PATH 包含另一个可用的 Java,错误的 JAVA_HOME 也会报错。例如:
JAVA_HOME=/absolute/java-21-home qwen serve --managed --open在 macOS 上,JAVA_HOME 通常以 Contents/Home 结尾。缺失或不兼容的
Java 会在下载 JAR 之前产生安装/配置错误;Qwen 不会下载 Java。
捆绑版始终使用自带的 Java,如果其负载损坏,不会回退到
机器上的 Java。
可选的完整包 qwen-code-managed-local-<platform>-<arch>.tar.gz 也可用:
解压后运行 ./qwen-code/bin/qwen serve --managed --open。
应用绑定到 127.0.0.1:4170。使用 --port 0 获取可用
端口,或选择固定端口。保持终端打开;Ctrl+C 会关闭
普通守护进程、Java 服务和 Harness。systemd 用于运维管理的
部署,是可选的,此命令不使用它。
如果公共端口被占用,会按照普通守护进程的有限邻近端口
重试策略处理;请使用启动器打印的浏览器地址。
这一条命令会同时启动普通守护进程和 Managed Agent。同一个 WebShell 在 Projects 下统一列出普通和 Managed 的工作区与会话,Managed 工作区带有 Managed 标签,没有执行模式选项卡。新任务遵循所选工作区或对话。本地会话使用 运行命令时所在的目录,而 Managed 会话使用其 应用创建的 Workspaces 或显式导入的本地项目。两者使用 同一个已认证的浏览器来源; 你不需要第二个守护进程命令或浏览器页面。
在 Add workspace 中,提交前选择 Local (daemon) 或 Managed (Managed Agent)。 默认选择当前对话的服务。 工作区行和 New task 显示该服务,新任务继承 所选工作区。守护进程现有的 SSH 工作区支持仍然 可用;Managed SSH 注册未集成到此共享对话框中。
终端会打印一个带有 token 片段的浏览器 URL。将其视为本地
密码。浏览器使用该 token 认证每个 API 请求;Java
签名密钥和内部凭据不会传到浏览器。监听器
仅限回环地址。对于无头机器,省略 --open 并在该机器上打开打印的 URL,
或使用你自行管理的已认证隧道。
统一应用目前支持本地回环页面。完整 shell 现有的 Mobile access / Local Control 入口未与 Managed 启动集成:配对的 LAN 监听器无法打开此统一页面。移动端 共享需要单独的集成;普通守护进程保留其现有的 Local Control 行为。
Harness 使用常规的 Qwen 模型配置和提供商凭据。
在发送第一个 prompt 之前,使用常规的 Qwen CLI 设置配置模型。
Files 和 Shell 使用 default 审批模式;Managed UI 会在操作需要审批时请求
批准。
重启后,继续现有 Session 可能需要等待其之前的 SQL writer 租约过期(默认 60 秒)。保留原始数据目录 并在该间隔后重试;重启进程不会清除所有权。
工作区与持久化数据
默认私有数据目录为 <Qwen home>/managed-local,通常为
~/.qwen/managed-local。可通过以下方式覆盖:
qwen serve --managed --managed-data-dir /absolute/private/data --open该目录必须位于所有 Git worktree 之外。同一时间只能有一个启动器使用它; Java 还持有排他的数据库文件锁。私有服务端口 和凭据在重启间保持稳定。私有端口被 其他应用占用会导致启动失败;选择不同的全新数据 目录或停止冲突的服务,而不是编辑已持久化的信息。
启动时通过现有的幂等 Workspace API 创建应用拥有的默认 Workspace 及其 OWNER 授权。 要使用现有的本地项目, 打开 Workspace → Choose existing directory,浏览或输入其绝对 路径,然后添加该文件夹。服务会自动注册其父目录并授予 OWNER 访问权限,保留现有文件不动。新任务在 所选项目中启动。你也可以创建一个空的 Workspace。
启动目录对本地会话仍然可用,不会被自动导入。
--workspace 在 Managed 本地模式下仍然不受支持;在
UI 中选择项目。.qwen-managed-storage.json 维护标记保留在
Git worktree 之外;不要编辑、删除、暂存或提交它。导入的
项目文件保留在私有 Managed 数据目录之外,需要自行
备份。
本地会话历史继续使用普通 Qwen 存储。它与 Managed 数据目录分开,不包含在仅 Managed 的备份中。
完整保留整个数据目录,包括 state.json、
database/、runtime/、worker-home/ 和 workspaces/。在
进行文件系统备份之前,完成或取消活动工作,关闭其 Session,然后停止应用。持久化的原始 worker 可能在控制平面退出后继续存活;
确认所有 Workspace writer 已停止。未知执行状态需要在离线备份前
执行现有的原始所有者恢复流程。
凭据、数据库、worker 历史和 Workspace 身份属于同一个
安装。仅恢复子集
可能会关闭恢复准入。启动不会重建缺失的标记或
替换损坏的凭据。服务诊断信息位于 logs/ 中。
macOS 支持原生 worker 和同次启动的持久化接管。可信的整机 重启恢复在本地启动器中仍然禁用。未知工具结果 保留现有的原始所有者恢复规则,不会被盲目重放。 此模式不会添加自动登录时启动或防止笔记本休眠。
构建分发
以下命令面向发布构建者,而非最终用户。从同一个代码检出 使用 Node 22+、Java 21 和 Maven 3.8.9+ 构建 CLI 和 Java 服务器:
corepack pnpm install --frozen-lockfile
npm run build
npm run typecheck
npm run bundle
npm run prepare:package
mvn -f packages/sdk-java/qwencode/pom.xml -DskipTests -Dgpg.skip=true install
mvn -f packages/managed-agent-server/pom.xml verify
npm run package:managed-runtime -- \
--target darwin-arm64 \
--server-jar packages/managed-agent-server/target/qwen-managed-agent-server-0.1.0-alpha.jar \
--jre-home /verified/java-21-home \
--out-dir /output/managed-runtime运行时构建器只需要此次检出中匹配的服务器 JAR、Java 运行时和 CLI
版本。它不需要已构建的 CLI 资产或 Node
归档。默认写入
packages/managed-agent-server/target/managed-runtime,位于 CLI 的
dist/ 资产之外。它生成运行时归档和每个归档的 .sha256 文件。
普通 CLI 单独构建/发布。
使用相同的服务器 JAR 并通过 --without-jre 代替 --jre-home
构建轻量运行时:
npm run package:managed-runtime -- \
--target darwin-arm64 \
--server-jar packages/managed-agent-server/target/qwen-managed-agent-server-0.1.0-alpha.jar \
--without-jre \
--out-dir /output/managed-runtime这会生成 qwen-code-managed-runtime-lite-darwin-arm64.tar.gz 及其校验和。
轻量版构建器不需要 Java 输入。对于可选的完整分发:
npm run package:standalone -- \
--target darwin-arm64 \
--node-archive /verified/node-v22-darwin-arm64.tar.gz \
--managed-server-jar packages/managed-agent-server/target/qwen-managed-agent-server-0.1.0-alpha.jar \
--managed-jre-home /verified/java-21-home \
--out-dir /output/managed-local使用包含 bin/java、lib/modules、
release 和 legal/ 的完整解压运行时主目录。macOS JRE 可能将其放在 Contents/Home 下。
构建器检查 Java 主版本、操作系统和架构,包含其
许可证,并在负载清单中记录服务器 SHA-256 和匹配的 CLI 版本。
完整独立版使用 lib/managed-runtime/ 并
生成 SHA256SUMS。在构建前验证运行时输入的发布者校验和。
Windows 和 Bun 的 Managed 执行会被拒绝;启动器需要 Node 22+。
对于显式指定运行时位置,
QWEN_MANAGED_LOCAL_RUNTIME_DIR=/absolute/managed-runtime 将本地
CLI 直接指向包含 manifest.json 和 server.jar
(捆绑版还包含 jre/)的目录。
它优先于同位负载和版本化的 Qwen-home 安装。
现有的同位负载优先于 Qwen-home 安装。
选定的无效或不完整负载不会被其他负载替换。
缺失的显式选定负载、错误的 CLI 版本、目标、
Java 主版本或服务器校验和会在子进程启动前失败。仅缺失的
默认缓存会触发 JAR 安装;不会替换现有的损坏负载。
应用启动期间永远不会运行 Maven。
发布首次使用 JAR
Release Managed server runtime 工作流从已发布的
CLI 发布标签构建,使用该确切源代码修订版的 SDK 和服务器。
手动运行必须从 main 分发,默认为试运行。它会验证
CLI 和 Java 模块,构建 central-release profile,并将
JAR 和校验和保留为工作流制品,不更改公共仓库。
验证试运行后,发布运维人员可以通过受保护的 production-release 环境对同一标签运行
dry_run=false。
工作流将服务器制品版本设置为 CLI 版本,向 Maven Central 发布
com.alibaba:qwen-managed-agent-server:<cli-version>,附带
源码、Javadoc 和签名,并通过该 GitHub Release 和现有的版本化 OSS 镜像分发相同的主 JAR 及其
.sha256。
辅助运维 JAR 不会附加到 Central 发布。现有
资产逐字节比较,不会被不同内容替换。
已发布的 CLI 发布事件也会自动运行此工作流。
CLI 从 OSS/GitHub 下载,而非 Maven Central。它不会将 SDK 作为独立的用户依赖解析:可执行服务器 JAR 包含其 Java 依赖。运行时资产必须在首次使用下载成功前 存在于确切的 CLI 发布中。此 PR 的本地验证不会发布这些 资产或绕过生产发布环境。
请参阅双语设计文档了解 所有权边界和验证标准,以及 Java 服务器参考了解 面向运维的 MySQL 部署。