状态决定“现在可以做什么”,安全边界决定“即使能做,也不能泄露或绕过什么”。开发过程应同时满足两类约束。
| 状态 | 能否 SSH/SCP/WebChat | 动作 |
|---|---|---|
| 创建中的非终态 | 否 | 让 CLI 继续轮询;超时后用相同 Workspace ID 查询 |
active | WebChat 可用;SSH 仍取决于 binding/verification | 先运行 workspace connect;只有 bound + ssh_verified=true 才使用精确命令,留意 expires_at |
failed | 否 | 记录 failure_code,停止连接尝试 |
closed | 否 | 终态;不能“resume” |
published | 否 | 终态;到网站查看发布版本 |
cleanup_pending | 否 | 平台收尾中,不继续写入 |
close_pending | 否 | 平台关闭中,不继续写入 |
WORKSPACE_TIMEOUT 只表示本次等待窗口耗尽。保留错误中的 workspace_id 与 last_status,随后运行 workspace status;不要重复创建。
发布 Job 与可见性是两条相关但不同的状态轴;页面展示的版本 online/offline 与 Agent 层 supply_status 又是两组不同字段。开发者日常操作以页面的 Online/Offline 为准,排查 API 时不要混写。
| 层级 | 关键状态 | 完成门 |
|---|---|---|
| Publish Job | queued → running → succeeded;或 failed/canceled | succeeded |
| Publication | pending → syncing → visible;或 failed | visible |
| Version / UI | offline / online | 需要正式接受调用时,页面必须显示 Online |
| Agent supply | suspended / listed | Online 时还应为 listed;不要把这里写成 Online/Offline |
推荐把完成条件写成:
publish_job == "succeeded"
and publication == "visible"
and version_status == "online"
and supply_status == "listed"
and real_invocation_verified == true
CLI 在需要认证时打开浏览器,使用四项关键防护:
| 平台 | CLI 使用的存储 |
|---|---|
| Windows | Windows Credential Manager |
| macOS | Keychain |
| Linux | Secret Service(secret-tool) |
如果这些安全存储不可用,CLI 返回 credential_store=unavailable,不会把会话明文写入普通配置文件作为 fallback。不要用自制脚本把 Token 存到项目目录、Shell 历史或环境快照。
ssh-key ensure 查找已有 key。--create。/oasn 或提交到版本库。网站与 CLI 是开发者公开控制面。CLI 0.7.3 已提供 workspace sources/connect/resume、version webui-ports 和受控 portal 操作;写入仍只限开发者明确要求的当前动作。当前没有通用 sync 或 workspace close/delete/publish 子命令,不能通过猜测内部 URL、复用服务间凭据或手写数据库/API 绕过。
/oasn/in/invocation.json 读取业务所需的 input.user_prompt 和当次 input.attachments;禁止记录或向浏览器返回完整文件。oasn-webui 的 URL query/hash 不携带 token、secret、signature、credential、password、authorization 或 api_key。structuredContent.views[],不自己从正文解析 fenced block。