OpenCLI 接入 ONES 项目 API:基于 Browser Bridge 的任务查询与工时填报实战指南

发布时间:2026/9/20 5:27:40
OpenCLI 接入 ONES 项目 API:基于 Browser Bridge 的任务查询与工时填报实战指南 开发工具CLI人工智能AI 应用浏览器控制GUI 自动化【免费下载链接】OpenCLIMake Any Website into CLI Use your logged-in browser by AI agent.项目地址https://gitcode.com/gh_mirrors/ope/OpenCLI点击查看免费下载本文是 OpenCLI 中 ONES 适配器docs/adapters/browser/ones.md的完整实战指南。ONESones.cn是国内团队常用的研发协同平台其旧版 Project API 部署形态多样OpenCLI 通过Browser Bridge模式复用你已在 Chrome 中登录的 ONES 会话以 CLI 方式完成登录、身份查询、任务列表、任务详情与工时填报等日常操作。读完本文你将掌握 ONES 适配器的全部命令、环境变量与调用链原理并能把它接入 AI Agent 自动化工作流。适配器定位与工作原理ONES 适配器在 OpenCLI 中注册为ones站点采用Strategy.COOKIE策略属于Browser Bridge模式browser: true目标域名ones.cn且支持通过ONES_BASE_URL指向自建部署self-hosted。从源码注释看该适配器面向旧版 ONES Project APIclis/ones/common.js所有请求都拼接在固定前缀/project/api/project之下。其核心思路是不在 Node.js 进程内直接发 HTTP 请求而是把fetch调用注入到浏览器页面上下文执行并携带credentials: include从而复用 Chrome 中已登录的 Cookie 会话const init { method, headers: { ...headers }, credentials: include }; const res await fetch(url, init);这段逻辑位于 clis/ones/common.js 的onesFetchInPageWithMeta通过page.evaluate在页面内发起请求。请求头默认携带Referer指向ONES_BASE_URL保证与页面同源若检测到ONES_USER_IDONES_AUTH_TOKEN环境变量还会附加Ones-User-Id/Ones-Auth-Token头与纯 Cookie 二选一或并存取决于你的部署。Browser Bridge 的全局原理参见 docs/guide/browser-bridge.mdCLI 通过 WebSocketlocalhost:19825连接 micro-daemondaemon 再经 Chrome 扩展在页面上下文执行 JS整体链路为opencli → daemon → Chrome 扩展 → 已登录页面。前置条件与必备环境变量前置条件条件说明Chrome 已启动并登录 ONES命令复用的是 Chrome 中的登录会话目标实例必须在浏览器中处于登录态安装 Browser Bridge 扩展安装与验证步骤见 Browser Bridge 安装指南可用opencli doctor检查连通性设置ONES_BASE_URL必须与 Chrome 中打开的 ONES 实例同源且不带结尾斜杠环境变量清单以下是适配器实际读取的全部环境变量依据 clis/ones/common.js、clis/ones/login.js、clis/ones/tasks.js、clis/ones/task-helpers.js变量必填作用ONES_BASE_URL是自建/托管实例源如https://your-team.ones.cn不带尾部斜杠ONES_USER_ID兼容ONES_USER_UUID/Ones_User_Id否附加鉴权 HeaderOnes-User-Id也可用于解析当前用户 UUIDONES_AUTH_TOKEN兼容Ones_Auth_Token否附加鉴权 HeaderOnes-Auth-TokenONES_EMAIL/ONES_PHONE/ONES_PASSWORD否login命令的非交互式凭据来源ONES_TEAM_UUID兼容ONES_TEAM_ID否设置后tasks/my-tasks/task/worklog可省略--team参数ONES_MANHOUR_SCALE否工时定点整数刻度默认100000getOnesBaseUrl()在缺省时会抛出CONFIG类型错误提示设置ONES_BASE_URL到你的部署源无尾部斜杠这也是绝大多数报错的根源。基本环境配置# 必填你的 ONES 实例地址 export ONES_BASE_URLhttps://your-instance.example.com # 若你的部署要求附加鉴权 Header可选 # export ONES_USER_ID... # export ONES_AUTH_TOKEN...登录与身份查询登录loginopencli ones login --email youcompany.com --password your-passwordlogin通过 POSTauth/login完成属于写操作access: write。支持--email或--phone邮箱优先--password也可全部由ONES_EMAIL/ONES_PHONE/ONES_PASSWORD环境变量提供。密码缺失或邮箱/手机号都未提供时会抛出带明确提示的CONFIG错误。登录成功后命令会打印一行stderr 提示见 clis/ones/login.js指导你把返回的user.uuid与user.token导出为环境变量以便后续请求在 Cookie 不生效的部署上继续使用export ONES_BASE_URLhttps://... export ONES_USER_IDuuid export ONES_AUTH_TOKENtoken输出表格列为uuid/name/email/token_preview其中 token 仅做截断预览前 6 位 … 后 4 位避免敏感信息刷屏。当前用户meopencli ones me对应 GETusers/me返回当前登录用户资料列为uuid/name/email/phone/status。响应兼容两种形态{ user: {...} }包裹结构或直接返回用户对象代码会自动归一化clis/ones/me.js。会话概览token-infoopencli ones token-info对应 GETauth/token_info返回当前用户、所属团队列表与组织信息列为uuid/name/email/teams/org_name。获取 team UUID 的关键入口用opencli ones token-info -f json查看teams[].uuid这是后续tasks/my-tasks/task/worklog所需的 8 位团队标识clis/ones/token-info.js。登出logoutopencli ones logout对应 GETauth/logout使当前 token 失效输出ok/detail两列并提醒清理本地的ONES_AUTH_TOKENclis/ones/logout.js。团队任务列表tasks# 基础用法 opencli ones tasks teamUUID --limit 20 # 按项目 / 负责人筛选 opencli ones tasks teamUUID --project projectUUID --assign userUUIDtasks通过 POSTteam/:team/filters/peek拉取工作项读操作access: read。参数与默认值如下clis/ones/tasks.js参数类型默认说明team位置参数str无可用ONES_TEAM_UUID8 位团队 UUID来自token-info--projectstr无按项目 UUID 过滤对应字段field_values.field006即「所属项目」--assignstr无按负责人用户 UUID 过滤顶层assign字段--limitint30拍平分组后最多返回的行数上限 500底层筛选查询体由buildQuery构造项目用{ in: { field_values.field006: [...] } }负责人用{ equal: { assign: ... } }两者可叠加空筛选时must为空数组。完整请求体由 clis/ones/task-helpers.js 的defaultPeekBody提供包含sort按create_time倒序、include_status_uuid、include_project_uuid等控制字段。输出列为title/status/project/uuid/updated/工时。其中「工时」列由formatTaskManhourSummary生成同时展示评估工时assess_manhour、登记工时total_manhour与剩余工时remaining_manhour前缀分别为「估」「登」「余」例如估3h 登1.5h 余2h长标题、长 UUID 会被截断显示完整数据用-f json查看。我的任务my-tasksopencli ones my-tasks teamUUID --limit 100 opencli ones my-tasks teamUUID --mode bothmy-tasks同样走filters/peek但查询以当前用户 UUID 为条件自动通过users/me或环境变量解析「我」的 UUIDresolveOnesUserUuid。核心参数参数类型默认说明team位置参数str无可用ONES_TEAM_UUID团队 UUID--limitint100最大行数上限 500--modestrassign取值assign/field004/owner/both--mode是处理 ONES 部署差异的关键开关clis/ones/my-tasks.jsassign按顶层assign字段等值匹配负责人field004按筛选器示例中的field_values.field004匹配部分部署用该字段表示负责人owner按创建者owner字段匹配both负责人 ∪ 创建者执行两次 peek 后按 UUID 去重dedupeByUuid再裁剪到--limit。另外存在自动降级机制默认assign模式若遇到ServerError、错误码801或Params is invalid等提示会自动改用field004查询重试一次适应字段不一致的实例。任务详情taskopencli ones task taskUUID --team teamUUID对应 GETteam/:team/task/:id/infoclis/ones/task.jsid是浏览器 URL 中…/task/id段的标识通常是 16 位工作项 UUID也可能是编号。输出列uuid/summary/number/status_uuid/assign/owner/project_uuid/updated其中updated由server_update_stamp经formatStamp归一化为YYYY-MM-DD HH:mm:ss格式自动兼容秒/毫秒/微秒时间戳。若返回异常会提示核对 id 长度与 team 是否与浏览器 URL 一致。工时填报worklog# 今日工时 opencli ones worklog taskUUID 2 --team teamUUID # 补录历史工时 备注 opencli ones worklog taskUUID 1.5 --team teamUUID --date 2026-03-23 --note integrationworklog是写操作access: write负责记录/补录工时。参数参数类型必填说明task位置参数str是工作项 UUID通常 16 位来自my-tasks或浏览器 URLhours位置参数str是要记录的小时数如2或1.5按ONES_MANHOUR_SCALE换算合法区间0 h ≤ 1000--teamstr否可用ONES_TEAM_UUID团队 UUID--datestr否记录日期YYYY-MM-DD默认今天本地时区用于补录--notestr否备注写入description/desc--ownerstr否归属用户 UUID默认当前登录用户多端点降级策略由于 Project API 路径在不同部署间有差异源码clis/ones/worklog.js实现了依次尝试的降级链共 8 个候选请求POST team/:team/items/graphql— GraphQL 变更addManhourmode: simple、type: recorded、参数owner/task/start_time/hours/description全部内联为字面量无变量引用见 clis/ones/worklog.test.js 的断言POST team/:team/task/:id/manhours/add— REST 形态{ owner, manhour, start_date, end_date, desc }同路径的allManhour/startDate/endDate驼峰形态同路径的{ manhours: [entry] }包裹形态两种字段风格POST team/:team/task/:id/manhour/add— 单数manhour路径两种字段风格POST team/:team/tasks/update3—{ tasks: [{ uuid, manhours: [entry] }] }批量更新形态。防假成功校验每次尝试前命令先 GETteam/:team/task/:id/info读取total_manhour基线尝试后再次读取对比只有total_manhour实际变化差值 ≥ 1 个刻度单位才判定成功并返回task/date/hours/owner/endpointendpoint 即命中的路径。若 HTTP 200 但工时未变化则记录no effect并继续尝试下一个端点杜绝接口 200 但没生效的假成功。全部失败时抛出FETCH_ERROR附最后一个失败详情。工时刻度的底层换算ONES Project API 中的assess_manhour/total_manhour/remaining_manhour大多是定点整数与网页上的「小时」小数不一致。换算逻辑集中在 clis/ones/task-helpers.jsexport function onesManhourScale() { const raw Number(process.env.ONES_MANHOUR_SCALE?.trim()); if (Number.isFinite(raw) raw 0) return raw; return 1e5; // 默认刻度 }展示方向raw / scale得到小时数再格式化为2h、1.5h这类短格式录入方向hoursToOnesManhourRaw(hours)用Math.round(hours * scale)将小时转为 API 整数最小值为 1若你的实例刻度不同通过ONES_MANHOUR_SCALE覆盖默认值100000这也是原文档 Notes 中该变量的来源。任务列表响应解析filters/peektasks/my-tasks共用的filters/peek响应解析位于 clis/ones/task-helpers.js 的flattenPeekGroups响应按groups[]分组每组含entries[]解析时按组拍平并按--limit截断超过上限即停止。条目字段兼容多种部署差异标题优先取summary/name/title/subject其次从field_values数组[{ field_uuid, value }, ...]中提取首个非空field*值最后回退到对象形态的field001/field002/field003pickTaskTitle状态优先取顶层status_uuid否则从field016提取getTaskStatusRawId再经resolveTaskListLabels映射为可读状态名项目优先取project_uuid否则从field006提取getTaskProjectRawId再映射为项目名。由于 ONES 部分接口 HTTP 200 但 body 仍是业务错误如reason: ServerErrorthrowIfOnesPeekBusinessError会在filters/peek路径上做二次校验凡含非空reason/errcode/type且无groups的响应都会抛出FETCH_ERROR避免把错误当空列表处理clis/ones/common.js。常见错误与排查现象原因与处理Missing ONES_BASE_URLCONFIG未设置环境变量export ONES_BASE_URLhttps://your-team.ones.cn无尾斜杠HTTP 401 / UnauthorizedChrome 中打开 ONES 并登录或先执行opencli ones login后按提示 exportONES_USER_ID/ONES_AUTH_TOKEN并确认ONES_BASE_URL与浏览器地址一致team UUID required用opencli ones token-info -f json查看teams[].uuid或设置ONES_TEAM_UUIDfilters/peek返回ServerError查询条件不合法如字段 UUID 与实例不符可尝试opencli ones tasks team空 must并检查筛选器字段文档my-tasks结果为空/报字段错误换--mode field004或--mode both适配你部署的负责人字段worklog全部端点失败最后失败详情会随错误输出确认任务 UUID、团队、日期格式必要时用-f json查看原始响应工时数字与网页不符检查ONES_MANHOUR_SCALE是否与你实例的刻度一致默认100000通用排查手段所有命令都支持-f json查看原始 JSONopencli doctor可验证 Browser Bridge 扩展与 daemon 连通性。小结ONES 适配器是 OpenCLI「把任意网站变成 CLI」理念在研发协同场景的落地它利用 Browser Bridge 复用浏览器登录态绕开了 ONES 部署形态复杂、鉴权方式不一的难题同时通过多端点降级、防假成功校验、字段兼容解析等机制保证了在旧版 Project API 上的可用性。将其接入 AI Agent 后即可在自动化流程中完成查我的任务 → 看任务详情 → 记录工时的闭环操作所有身份与团队信息均来自token-info与users/me接口无需人工维护 Cookie。赞分享开发工具CLI人工智能AI 应用浏览器控制GUI 自动化【免费下载链接】OpenCLIMake Any Website into CLI Use your logged-in browser by AI agent.项目地址https://gitcode.com/gh_mirrors/ope/OpenCLI点击查看免费下载相关推荐OpenCLI 接入 DefiLlama基于 TVL 的 DeFi 协议查询命令实战与源码解析OpenCLI 接入 DefiLlama基于 TVL 的 DeFi 协议查询命令实战与源码解析 本文面向需要通过命令行或 AI Agent 快速获取 DeFi开发工具CLI人工智能AI 应用浏览器控制GUI 自动化Higress 图书查询 MCP Server 实战基于 ISBN 的图书详情查询服务接入指南Higress 图书查询 MCP Server 实战基于 ISBN 的图书详情查询服务接入指南 本篇技术指南围绕 Higress 开源仓库中内置的 bookAPI网关后端云原生LLM 网关人工智能MCP 服务NiceGUI 边输入边搜索Search As You Type实战基于 asyncio 任务取消的实时查询NiceGUI 边输入边搜索Search As You Type实战基于 asyncio 任务取消的实时查询 本篇技术指南以 NiceGUI 仓库中的 e前端Web框架UI组件创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考