跳到主要内容

workspace upload

workspace upload 将项目包上传到 Workflow Server。未传 --file 时,它会先按 .workflowignore 执行本地打包;服务器收到归档后返回准备任务 ID。启用 Server runtime 的 Workflow/Conversation 会安装依赖并 bundle/minify;Server 关闭时只解包、校验并哈希源码,不安装依赖或创建 runtime。Kanban 固定关闭 Server,只校验配置的产物目录和 HTML 入口并保留静态资源。CLI 默认轮询任务直到成功或失败;传入 --release-log 时,准备成功后会继续调用 publish,并复用同一发行策略。

CLI 在打包和上传过程中不会安装或修改本地项目依赖,也不要求本地存在 node_modules。未传 --file 时只收集源码并生成归档,依赖安装由服务器构建阶段负责。服务器不会把仅用于平台 API 与开发命令的 workflow-code@workflow-code/cli 写入版本 runtime;其它业务依赖会被整理为不含符号链接的可移植归档。

上传文件只受项目根目录 .workflowignore 控制;.gitignore 不参与。缺少有效规则时,CLI 会在上传前提示将上传全部普通文件的数量和总大小。Kanban 的实际 artifactDir 必须保留;前端源码、测试、依赖和 secret 是否上传由项目规则显式决定。

上传前会校验本地 workflow 顶层 package.json.id。该字段必须是 UUID,并且代表 server 端的项目主键;CLI 不再从目录名或 package name 推导远程项目 ID。

如果当前 workflow 源码通过相对路径引用了其它 workspace workflow,例如 ../openai-agents/index,CLI 会在本地打包阶段把这些兄弟 workflow 源码一起放进归档的 workspace/workflow/* 目录,保证 server 端构建时能解析这些本地依赖。

命令格式

pnpm exec workflow-code workspace upload <workflow> [--path <workflow-dir>] [--file <archive>] [--release-log <text>] [--source-mode bundled|source] [--server-runtime|--no-server-runtime] [--desktop-platform macos|windows] [--no-wait] [--create] [--project-group] [--publish-group] [--dependency <alias>=<path>]

参数

参数说明
<workflow>本地 workflow 目录名、workflow 名称或直接传远程项目 UUID。
--path <workflow-dir>打包并上传指定本地目录。
--file <archive>直接上传已有 .tgz 包。
--release-log <text>上传成功后立即调用 publish。
--source-mode <bundled|source>自动发布的源码模式。默认 bundledsource 会保留原始源码快照。
--server-runtime为本次版本准备 Server runtime。
--no-server-runtime关闭本次版本的 Server runtime;Workflow/Conversation 仍需至少一个 Desktop 目标。
--desktop-platform <macos|windows>允许对应 Desktop 下载;可重复,自动要求 source,不能与 --source-mode bundled 组合。
--no-wait单项目上传时创建服务器准备任务后立即返回 jobId,不轮询任务完成状态。不能与项目组或本次命令内的自动发布组合使用。
--create按本地 package 已声明的 UUID 和 projectInfo 创建或复用 Server 项目;缺失 UUID 或存储声明时直接失败。
--project-group按根 Kanban 中双方已确认的关联项目创建 project-group v1,而不是普通单项目上传。
--dependency <alias>=<path>将 alias 对应的本地关联项目作为 included 依赖打包;可重复。未指定的已确认关系保持 external,待确认关系不进入依赖组。
--publish-group项目组准备完成后立即发布;未填写 --release-log 时也生效。

鉴权

配置说明
server URL来自 --serverWORKFLOW_SERVER_URL 或 CLI 登录态。
token来自 --tokenWORKFLOW_SERVER_ADMIN_KEY 或 CLI 登录态 API Key。
未登录命令失败,并提示先执行 workspace login

上传模式

模式行为
默认上传包为远程 draft。
--file跳过本地打包,直接读取指定归档。
--release-log上传成功后调用 /api/workflows/{workflow}/publish
发行目标package 请求使用 `serverRuntime=true
--no-wait仅用于单项目上传,只返回服务器准备任务;稍后通过 preparation API 查询状态。项目组必须等待整组完成权限校验、版本预留和准备。
--create先调用 POST /api/workflows,携带 package 中的 workflowIdprojectType 与完整 projectInfo 创建或复用远程项目,再上传 draft 包;不会修改本地项目 ID。
项目组只要使用 --project-group--dependency--publish-group 就进入项目组模式;CLI 校验根项目是 Kanban,并按 projectInfo.relatedProjects 中双方已确认的 alias 解析 included/external。

--create 创建的空项目会保存当前源码派生的 projectType 和 package 当前 projectInfo,首次上传必须与该值一致。Workflow/Conversation 类型来自 executor,Kanban 类型来自 package.json.workflowCode.projectType。远程项目已经有 draft 或 version 后,后续上传会用新的明确声明更新派生值;任何上传都不会从目录名或包名猜测类型。

项目组上传

项目组模式先为根 Kanban 和全部 included 关联项目创建或复用 Server 项目,再分别按各自 .workflowignore 打包,生成包含 project-group.json 和项目归档的 tar.gz。Server 一次性校验所有项目权限、双方关系并预留版本;依赖先发布,Kanban 根版本最后激活并保存精确 dependency lock。included 项目强制以 source 模式发布,表示有权限的下载者可以取得源码;不能分发源码时不要传对应 --dependency。数据读写权限只来自双方当前 projectInfo,CLI 不创建独立授权。

CLI 在每个项目归档和外层项目组中都拒绝 .env*、KV、PersistentValue、定时计划、运行历史、SQLite、workflow-auth.json 与其它宿主用户配置。本地 KV 不进入 Server;发布后必须通过来源 Workflow entrypoint、Server Run API 或业务接口在 Server 端初始化数据。

API

步骤Endpoint
上传包POST /api/workflows/{workflow}/package?serverRuntime=<boolean>&desktopPlatform=<platform>
查询准备任务GET /api/workflows/{workflow}/preparations/{jobId}
自动发布POST /api/workflows/{workflow}/publish
创建项目组计划POST /api/deployments
上传项目组POST /api/deployments/{deploymentId}/package
发布项目组POST /api/deployments/{deploymentId}/publish

也可以使用 workflow-code workspace preparation <workflow-id> <job-id> 查询已返回的准备任务;该命令不会取消或重启服务器任务。

输出

情况输出
只上传准备成功后输出 draft 构建结果 JSON。
上传并发布准备成功后输出构建结果,再输出 publish JSON。
项目组输出部署记录,其中包含每个项目的预留版本、准备阶段、精确发布版本和失败原因。
server 返回非零 errCode输出 JSON,退出码为 1

示例

pnpm exec workflow-code workspace upload hello --create
pnpm exec workflow-code workspace upload hello --path ./workspace/workflow/hello
pnpm exec workflow-code workspace upload hello --file ./workspace/.packs/hello.tgz
pnpm exec workflow-code workspace upload hello --create --release-log "初始发布" --server-runtime
pnpm exec workflow-code workspace upload hello --release-log "macOS 本地发行" --no-server-runtime --desktop-platform macos
pnpm exec workflow-code workspace upload hello --release-log "云端与双桌面发行" --server-runtime --desktop-platform macos --desktop-platform windows
pnpm exec workflow-code workspace upload stock-kanban \
--path ./stock-kanban \
--dependency stocks=./stock-workflow \
--publish-group \
--release-log "发布股票看板项目组"

Codex 示例也可以先手动打包,再上传已有归档:

pnpm exec workflow-code workspace pack codex --path ./codex-project --output ./workspace/.packs/codex-manual.tgz
pnpm exec workflow-code workspace upload codex --file ./workspace/.packs/codex-manual.tgz
pnpm exec workflow-code workspace publish codex --release-log "manual codex upload"

带第三方 SDK 的示例也按 workflow 目录自己的 package.json 声明依赖。 例如 workspace/workflow/openai-agents 声明 @openai/agentsopenaizodworkspace/workflow/claude-agent 声明 @anthropic-ai/claude-agent-sdkworkspace/workflow/gpt-image 声明 openaiworkspace/workflow/pi-agent 声明 @earendil-works/pi-coding-agent;server runtime 会在构建 runtime 包时安装这些业务依赖。 OpenAI 示例的 OPENAI_API_KEY / OPENAI_BASE_URL、Claude Agent 示例的 ANTHROPIC_API_KEY、Pi Agent 示例的 ANTHROPIC_* / OPENAI_* provider 配置 都通过 server 环境变量页面配置。OpenAI、Claude Agent 和 Pi Agent 示例都包含 knowledge_documents 工具;这些 workflow 在 server runtime 中会使用 server/database-backed PersistentValue 存储项目知识文档。本地 CLI/Desktop 运行 同一 workflow 时,可以通过 WORKFLOW_PERSISTENT_VALUE_STORE_DIR 使用独立的 本地知识库,且不会自动与服务器项目同步。 openai-agents 的自定义 test_tool 会随源码一起打包,用于发起小型 HTTP GET/POST 测试请求并返回响应摘要;可选本地 shellTool runner 也随源码一起 打包,通过 --local-shell 启用时仍受 --workdir 和 workflow 命令策略限制。

注意事项

场景说明
包内敏感文件宿主不会暗中排除 .envnode_modules 或 Git 元数据;必须在 .workflowignore 中显式配置。
Git 与上传.gitignore 不参与上传;同一 dist 可以不提交 Git 但仍由 .workflowignore 保留并上传。
Kanban 静态资源artifactDir 内 HTML、CSS、JavaScript、图片和字体按原始字节保留;页面必须遵守产物目录内相对路径和离线 sandbox。
项目组数据项目组只交付源码,不上传本地 KV、计划、运行历史、环境变量或用户配置;Desktop 与 Server 数据仍相互隔离。
中断等待CLI 退出或网络中断不会取消服务器准备任务,之后可使用 preparation 查询 API 恢复状态。
自动发布失败upload 可能已成功,publish 失败时需要根据输出继续排查。
大型 SDK 首次安装server 会保留包内 lockfile,并按 lockfile 安装确定版本。包含平台二进制的 SDK 首次上传可能耗时较长;下载超时时应检查 server 的 npm registry 网络、磁盘空间和依赖安装超时配置。
UUID 缺失或非法CLI 直接报错并要求先修正顶层 package.json.id--create 不会分配、转换或回写 UUID。
403 权限错误CLI 会优先提示“没有项目权限”或“已被禁止运行/上传”,不会统一引导重新登录。