| feat: release v0.3.0 — auth device flow + spec 完整性校验 + SOCKS 依赖修复 发布 oed-cli v0.3.0,新增认证、缓存完整性能力,并修复 SOCKS 代理依赖问题。 主要特性: - RFC 8628 device flow 认证 (auth.py):oed auth login 走设备码流程,支持 ag PAT + 平台原生加密 token 存储 (keyring / DPAPI / base64 fallback) - spec 完整性校验 (RFC 9530 Repr-Digest):discovery spec 缓存独立 0600 存储,堵本地篡改;schema 命令补 ETag 缓存协商 (If-None-Match / 304) - allowlist 两来源机制:登录来源 + defaults.toml 默认放行 (meeting / mailman 等) - auth 存储健壮性:按后端区分登录提示,损坏 auth.json 不再崩溃 - invoke:auto-fix result_root 路径参数;丢弃非 JSON 响应体的 8192 字符截断 - 新增 .gitignore / .gitleaks.toml / conftest.py 及配套测试 (test_auth / test_secure_storage / test_spec_integrity / test_allowlist / test_invoke / test_ag_auth_cli) 修复 #5 (依赖不完整): - http.py: 用户环境配 socks5:// 代理时 httpx.Client() 构造期懒加载 socksio 失败,裸抛 ImportError (非 httpx.HTTPError),导致 oed services 等命令崩溃。现捕获转成可读 UserError(kind=socks_dependency_missing),hint 指引装 oed-cli[socks];非 socksio 的 ImportError 原样抛出不吞。 - pyproject.toml: 新增 [socks] 可选 extra (socksio>=1.0),仅用 SOCKS 代理的用户安装,不污染主依赖。 - tests/test_http_socks.py: 回归测试 (socksio 缺失→UserError;无关 ImportError 不被吞)。 清理: - 删除孤儿测试 test_functionGraph.py (依赖不存在的 context/functionGraph.py,跑不起来) - dynamic.py SIM102、invoke.py E501、test_spec_integrity.py I001 lint 修复 Closes #5 | 1 个月前 |
| First substantial commit of oed-cli, the openEuler Infra command line. A single binary that auto-discovers its entire command surface from the gateway's OpenAPI Discovery Service and dispatches calls through the production gateway at https://apig.osinfra.cn. User-facing surface - Reserved commands: info, services, schema, cache, --version - Dynamic dispatch: oed -- - Per-parameter flag derivation from the OpenAPI schema (kebab-case with raw-name fallback, integer / number auto-coercion) - APIG "API_" prefix auto-stripping on operationIds — user-facing names drop it, the raw form stays as a lookup alias - WAF-safe browser headers baked into the HTTP client so calls pass the gateway's CloudWAF without manual curl-fu - 10-minute local cache (XDG / %LOCALAPPDATA%) for both the discovery feed and per-service OpenAPI specs; force-refresh via oed cache refresh - Deterministic exit codes: 0 success / 1 user / 2 network / 3 upstream / 4 not-found — clean stdout/stderr split so | jq is always safe Runtime routing - All calls go through https://apig.osinfra.cn. The spec's x-apigateway-backend.httpEndpoints.address is parsed only for method / scheme and never trusted as the host, because real specs (e.g. cve-sa-backend) point to *.test.osinfra.cn staging hosts that CloudWAF blocks. Test suite - 41 fully offline tests covering dynamic dispatch, per-param flag coercion, the API_ alias, and every exit-code path. Discovery is monkeypatched so pytest never touches the network. Developer / agent scaffolding - CLAUDE.md — entry point for AI coding agents, with directory map, dev loop, agent red-lines, and self-check checklist - .claude/skills/oed-cli/SKILL.md — Agent skill for using oed, plus a DEVELOPING section for modifying it - .claude/settings.json + .claude/hooks/post-edit-check.py — PostToolUse hook that runs ruff + pytest after every .py edit - .pypirc.template + docs/pypi-release.md — twine-based local PyPI release runbook (no CI) Documentation - README.md — install, Quickstart (cve-sa-backend canonical example), command contract, cache sync, troubleshooting - docs/cli-design.md — design rationale, module map, roadmap - docs/local-testing.md — every per-param flag demo + smoke tests against the live gateway Co-Authored-By: MiniMax-M3 | 2 个月前 |
| docs: 拆分 README_cn.md 为精简概览 + 独立场景文档,补充常用命令解析和更多真实场景 README_cn.md 原本是一份单文件塞下安装、登录、认证、本地开发、常见错误等全部内容的长文档。 拆成登录(login_cn.md)、AtomGit 认证(atomgit_auth_cn.md)、本地开发(local_dev_cn.md)、 调用场景示例(scenarios_cn.md)四篇独立文档后,README_cn.md 只保留快速开始和跳转链接。 在此基础上新增: - docs/commands_cn.md:oed-cli 常用命令解析速查表(全局命令、服务/操作发现、参数传法、 缓存与认证命令、退出码,以及一张按需求查命令的映射表),此前没有这类内容。 - scenarios_cn.md 补充 6 个真实场景(按关键词找 SIG 组、看 SIG 例会、查 SIG 相关仓库、 查软件包跨版本发布制品、查仓库 Issue 列表、分析 PR 门禁 CI 失败原因),对应 oed-cli-开发者任务体验文档里的任务列表,每条命令都实际跑通并附真实输出。 - 修复 scenarios_cn.md 末尾引用 README「oneid 登录」「AtomGit 认证」章节的失效锚点 (这两节已被拆到独立文档,原引用无处可跳)。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> | 26 天前 |
| feat: release v0.3.0 — auth device flow + spec 完整性校验 + SOCKS 依赖修复 发布 oed-cli v0.3.0,新增认证、缓存完整性能力,并修复 SOCKS 代理依赖问题。 主要特性: - RFC 8628 device flow 认证 (auth.py):oed auth login 走设备码流程,支持 ag PAT + 平台原生加密 token 存储 (keyring / DPAPI / base64 fallback) - spec 完整性校验 (RFC 9530 Repr-Digest):discovery spec 缓存独立 0600 存储,堵本地篡改;schema 命令补 ETag 缓存协商 (If-None-Match / 304) - allowlist 两来源机制:登录来源 + defaults.toml 默认放行 (meeting / mailman 等) - auth 存储健壮性:按后端区分登录提示,损坏 auth.json 不再崩溃 - invoke:auto-fix result_root 路径参数;丢弃非 JSON 响应体的 8192 字符截断 - 新增 .gitignore / .gitleaks.toml / conftest.py 及配套测试 (test_auth / test_secure_storage / test_spec_integrity / test_allowlist / test_invoke / test_ag_auth_cli) 修复 #5 (依赖不完整): - http.py: 用户环境配 socks5:// 代理时 httpx.Client() 构造期懒加载 socksio 失败,裸抛 ImportError (非 httpx.HTTPError),导致 oed services 等命令崩溃。现捕获转成可读 UserError(kind=socks_dependency_missing),hint 指引装 oed-cli[socks];非 socksio 的 ImportError 原样抛出不吞。 - pyproject.toml: 新增 [socks] 可选 extra (socksio>=1.0),仅用 SOCKS 代理的用户安装,不污染主依赖。 - tests/test_http_socks.py: 回归测试 (socksio 缺失→UserError;无关 ImportError 不被吞)。 清理: - 删除孤儿测试 test_functionGraph.py (依赖不存在的 context/functionGraph.py,跑不起来) - dynamic.py SIM102、invoke.py E501、test_spec_integrity.py I001 lint 修复 Closes #5 | 1 个月前 |
| feat: release v0.3.0 — auth device flow + spec 完整性校验 + SOCKS 依赖修复 发布 oed-cli v0.3.0,新增认证、缓存完整性能力,并修复 SOCKS 代理依赖问题。 主要特性: - RFC 8628 device flow 认证 (auth.py):oed auth login 走设备码流程,支持 ag PAT + 平台原生加密 token 存储 (keyring / DPAPI / base64 fallback) - spec 完整性校验 (RFC 9530 Repr-Digest):discovery spec 缓存独立 0600 存储,堵本地篡改;schema 命令补 ETag 缓存协商 (If-None-Match / 304) - allowlist 两来源机制:登录来源 + defaults.toml 默认放行 (meeting / mailman 等) - auth 存储健壮性:按后端区分登录提示,损坏 auth.json 不再崩溃 - invoke:auto-fix result_root 路径参数;丢弃非 JSON 响应体的 8192 字符截断 - 新增 .gitignore / .gitleaks.toml / conftest.py 及配套测试 (test_auth / test_secure_storage / test_spec_integrity / test_allowlist / test_invoke / test_ag_auth_cli) 修复 #5 (依赖不完整): - http.py: 用户环境配 socks5:// 代理时 httpx.Client() 构造期懒加载 socksio 失败,裸抛 ImportError (非 httpx.HTTPError),导致 oed services 等命令崩溃。现捕获转成可读 UserError(kind=socks_dependency_missing),hint 指引装 oed-cli[socks];非 socksio 的 ImportError 原样抛出不吞。 - pyproject.toml: 新增 [socks] 可选 extra (socksio>=1.0),仅用 SOCKS 代理的用户安装,不污染主依赖。 - tests/test_http_socks.py: 回归测试 (socksio 缺失→UserError;无关 ImportError 不被吞)。 清理: - 删除孤儿测试 test_functionGraph.py (依赖不存在的 context/functionGraph.py,跑不起来) - dynamic.py SIM102、invoke.py E501、test_spec_integrity.py I001 lint 修复 Closes #5 | 1 个月前 |
| feat: release v0.3.0 — auth device flow + spec 完整性校验 + SOCKS 依赖修复 发布 oed-cli v0.3.0,新增认证、缓存完整性能力,并修复 SOCKS 代理依赖问题。 主要特性: - RFC 8628 device flow 认证 (auth.py):oed auth login 走设备码流程,支持 ag PAT + 平台原生加密 token 存储 (keyring / DPAPI / base64 fallback) - spec 完整性校验 (RFC 9530 Repr-Digest):discovery spec 缓存独立 0600 存储,堵本地篡改;schema 命令补 ETag 缓存协商 (If-None-Match / 304) - allowlist 两来源机制:登录来源 + defaults.toml 默认放行 (meeting / mailman 等) - auth 存储健壮性:按后端区分登录提示,损坏 auth.json 不再崩溃 - invoke:auto-fix result_root 路径参数;丢弃非 JSON 响应体的 8192 字符截断 - 新增 .gitignore / .gitleaks.toml / conftest.py 及配套测试 (test_auth / test_secure_storage / test_spec_integrity / test_allowlist / test_invoke / test_ag_auth_cli) 修复 #5 (依赖不完整): - http.py: 用户环境配 socks5:// 代理时 httpx.Client() 构造期懒加载 socksio 失败,裸抛 ImportError (非 httpx.HTTPError),导致 oed services 等命令崩溃。现捕获转成可读 UserError(kind=socks_dependency_missing),hint 指引装 oed-cli[socks];非 socksio 的 ImportError 原样抛出不吞。 - pyproject.toml: 新增 [socks] 可选 extra (socksio>=1.0),仅用 SOCKS 代理的用户安装,不污染主依赖。 - tests/test_http_socks.py: 回归测试 (socksio 缺失→UserError;无关 ImportError 不被吞)。 清理: - 删除孤儿测试 test_functionGraph.py (依赖不存在的 context/functionGraph.py,跑不起来) - dynamic.py SIM102、invoke.py E501、test_spec_integrity.py I001 lint 修复 Closes #5 | 1 个月前 |
| feat: release v0.3.0 — auth device flow + spec 完整性校验 + SOCKS 依赖修复 发布 oed-cli v0.3.0,新增认证、缓存完整性能力,并修复 SOCKS 代理依赖问题。 主要特性: - RFC 8628 device flow 认证 (auth.py):oed auth login 走设备码流程,支持 ag PAT + 平台原生加密 token 存储 (keyring / DPAPI / base64 fallback) - spec 完整性校验 (RFC 9530 Repr-Digest):discovery spec 缓存独立 0600 存储,堵本地篡改;schema 命令补 ETag 缓存协商 (If-None-Match / 304) - allowlist 两来源机制:登录来源 + defaults.toml 默认放行 (meeting / mailman 等) - auth 存储健壮性:按后端区分登录提示,损坏 auth.json 不再崩溃 - invoke:auto-fix result_root 路径参数;丢弃非 JSON 响应体的 8192 字符截断 - 新增 .gitignore / .gitleaks.toml / conftest.py 及配套测试 (test_auth / test_secure_storage / test_spec_integrity / test_allowlist / test_invoke / test_ag_auth_cli) 修复 #5 (依赖不完整): - http.py: 用户环境配 socks5:// 代理时 httpx.Client() 构造期懒加载 socksio 失败,裸抛 ImportError (非 httpx.HTTPError),导致 oed services 等命令崩溃。现捕获转成可读 UserError(kind=socks_dependency_missing),hint 指引装 oed-cli[socks];非 socksio 的 ImportError 原样抛出不吞。 - pyproject.toml: 新增 [socks] 可选 extra (socksio>=1.0),仅用 SOCKS 代理的用户安装,不污染主依赖。 - tests/test_http_socks.py: 回归测试 (socksio 缺失→UserError;无关 ImportError 不被吞)。 清理: - 删除孤儿测试 test_functionGraph.py (依赖不存在的 context/functionGraph.py,跑不起来) - dynamic.py SIM102、invoke.py E501、test_spec_integrity.py I001 lint 修复 Closes #5 | 1 个月前 |
| feat: release v0.3.0 — auth device flow + spec 完整性校验 + SOCKS 依赖修复 发布 oed-cli v0.3.0,新增认证、缓存完整性能力,并修复 SOCKS 代理依赖问题。 主要特性: - RFC 8628 device flow 认证 (auth.py):oed auth login 走设备码流程,支持 ag PAT + 平台原生加密 token 存储 (keyring / DPAPI / base64 fallback) - spec 完整性校验 (RFC 9530 Repr-Digest):discovery spec 缓存独立 0600 存储,堵本地篡改;schema 命令补 ETag 缓存协商 (If-None-Match / 304) - allowlist 两来源机制:登录来源 + defaults.toml 默认放行 (meeting / mailman 等) - auth 存储健壮性:按后端区分登录提示,损坏 auth.json 不再崩溃 - invoke:auto-fix result_root 路径参数;丢弃非 JSON 响应体的 8192 字符截断 - 新增 .gitignore / .gitleaks.toml / conftest.py 及配套测试 (test_auth / test_secure_storage / test_spec_integrity / test_allowlist / test_invoke / test_ag_auth_cli) 修复 #5 (依赖不完整): - http.py: 用户环境配 socks5:// 代理时 httpx.Client() 构造期懒加载 socksio 失败,裸抛 ImportError (非 httpx.HTTPError),导致 oed services 等命令崩溃。现捕获转成可读 UserError(kind=socks_dependency_missing),hint 指引装 oed-cli[socks];非 socksio 的 ImportError 原样抛出不吞。 - pyproject.toml: 新增 [socks] 可选 extra (socksio>=1.0),仅用 SOCKS 代理的用户安装,不污染主依赖。 - tests/test_http_socks.py: 回归测试 (socksio 缺失→UserError;无关 ImportError 不被吞)。 清理: - 删除孤儿测试 test_functionGraph.py (依赖不存在的 context/functionGraph.py,跑不起来) - dynamic.py SIM102、invoke.py E501、test_spec_integrity.py I001 lint 修复 Closes #5 | 1 个月前 |
| feat: release v0.3.0 — auth device flow + spec 完整性校验 + SOCKS 依赖修复 发布 oed-cli v0.3.0,新增认证、缓存完整性能力,并修复 SOCKS 代理依赖问题。 主要特性: - RFC 8628 device flow 认证 (auth.py):oed auth login 走设备码流程,支持 ag PAT + 平台原生加密 token 存储 (keyring / DPAPI / base64 fallback) - spec 完整性校验 (RFC 9530 Repr-Digest):discovery spec 缓存独立 0600 存储,堵本地篡改;schema 命令补 ETag 缓存协商 (If-None-Match / 304) - allowlist 两来源机制:登录来源 + defaults.toml 默认放行 (meeting / mailman 等) - auth 存储健壮性:按后端区分登录提示,损坏 auth.json 不再崩溃 - invoke:auto-fix result_root 路径参数;丢弃非 JSON 响应体的 8192 字符截断 - 新增 .gitignore / .gitleaks.toml / conftest.py 及配套测试 (test_auth / test_secure_storage / test_spec_integrity / test_allowlist / test_invoke / test_ag_auth_cli) 修复 #5 (依赖不完整): - http.py: 用户环境配 socks5:// 代理时 httpx.Client() 构造期懒加载 socksio 失败,裸抛 ImportError (非 httpx.HTTPError),导致 oed services 等命令崩溃。现捕获转成可读 UserError(kind=socks_dependency_missing),hint 指引装 oed-cli[socks];非 socksio 的 ImportError 原样抛出不吞。 - pyproject.toml: 新增 [socks] 可选 extra (socksio>=1.0),仅用 SOCKS 代理的用户安装,不污染主依赖。 - tests/test_http_socks.py: 回归测试 (socksio 缺失→UserError;无关 ImportError 不被吞)。 清理: - 删除孤儿测试 test_functionGraph.py (依赖不存在的 context/functionGraph.py,跑不起来) - dynamic.py SIM102、invoke.py E501、test_spec_integrity.py I001 lint 修复 Closes #5 | 1 个月前 |
| First substantial commit of oed-cli, the openEuler Infra command line. A single binary that auto-discovers its entire command surface from the gateway's OpenAPI Discovery Service and dispatches calls through the production gateway at https://apig.osinfra.cn. User-facing surface - Reserved commands: info, services, schema, cache, --version - Dynamic dispatch: oed -- - Per-parameter flag derivation from the OpenAPI schema (kebab-case with raw-name fallback, integer / number auto-coercion) - APIG "API_" prefix auto-stripping on operationIds — user-facing names drop it, the raw form stays as a lookup alias - WAF-safe browser headers baked into the HTTP client so calls pass the gateway's CloudWAF without manual curl-fu - 10-minute local cache (XDG / %LOCALAPPDATA%) for both the discovery feed and per-service OpenAPI specs; force-refresh via oed cache refresh - Deterministic exit codes: 0 success / 1 user / 2 network / 3 upstream / 4 not-found — clean stdout/stderr split so | jq is always safe Runtime routing - All calls go through https://apig.osinfra.cn. The spec's x-apigateway-backend.httpEndpoints.address is parsed only for method / scheme and never trusted as the host, because real specs (e.g. cve-sa-backend) point to *.test.osinfra.cn staging hosts that CloudWAF blocks. Test suite - 41 fully offline tests covering dynamic dispatch, per-param flag coercion, the API_ alias, and every exit-code path. Discovery is monkeypatched so pytest never touches the network. Developer / agent scaffolding - CLAUDE.md — entry point for AI coding agents, with directory map, dev loop, agent red-lines, and self-check checklist - .claude/skills/oed-cli/SKILL.md — Agent skill for using oed, plus a DEVELOPING section for modifying it - .claude/settings.json + .claude/hooks/post-edit-check.py — PostToolUse hook that runs ruff + pytest after every .py edit - .pypirc.template + docs/pypi-release.md — twine-based local PyPI release runbook (no CI) Documentation - README.md — install, Quickstart (cve-sa-backend canonical example), command contract, cache sync, troubleshooting - docs/cli-design.md — design rationale, module map, roadmap - docs/local-testing.md — every per-param flag demo + smoke tests against the live gateway Co-Authored-By: MiniMax-M3 | 2 个月前 |
| docs(readme*): 快速开始增加 Agent Skill 安装指引 + oed 名称解释 - README.md / README_cn.md 快速开始新增「安装 Agent Skill」小节: skill 是 agent 调用 oed 的前置条件,不随 pip 包分发,需拷贝到 所用 agent 框架的 skills 目录(Claude Code 为例,Cursor/OpenCode 等放各自 skill/rules 目录) - 开头补充名称解释:oed = openEuler Developer CLI,面向 openEuler 开发者的命令行工具 Co-Authored-By: Claude <noreply@anthropic.com> | 26 天前 |
| docs(readme*): 快速开始增加 Agent Skill 安装指引 + oed 名称解释 - README.md / README_cn.md 快速开始新增「安装 Agent Skill」小节: skill 是 agent 调用 oed 的前置条件,不随 pip 包分发,需拷贝到 所用 agent 框架的 skills 目录(Claude Code 为例,Cursor/OpenCode 等放各自 skill/rules 目录) - 开头补充名称解释:oed = openEuler Developer CLI,面向 openEuler 开发者的命令行工具 Co-Authored-By: Claude <noreply@anthropic.com> | 26 天前 |
| feat: release v0.3.0 — auth device flow + spec 完整性校验 + SOCKS 依赖修复 发布 oed-cli v0.3.0,新增认证、缓存完整性能力,并修复 SOCKS 代理依赖问题。 主要特性: - RFC 8628 device flow 认证 (auth.py):oed auth login 走设备码流程,支持 ag PAT + 平台原生加密 token 存储 (keyring / DPAPI / base64 fallback) - spec 完整性校验 (RFC 9530 Repr-Digest):discovery spec 缓存独立 0600 存储,堵本地篡改;schema 命令补 ETag 缓存协商 (If-None-Match / 304) - allowlist 两来源机制:登录来源 + defaults.toml 默认放行 (meeting / mailman 等) - auth 存储健壮性:按后端区分登录提示,损坏 auth.json 不再崩溃 - invoke:auto-fix result_root 路径参数;丢弃非 JSON 响应体的 8192 字符截断 - 新增 .gitignore / .gitleaks.toml / conftest.py 及配套测试 (test_auth / test_secure_storage / test_spec_integrity / test_allowlist / test_invoke / test_ag_auth_cli) 修复 #5 (依赖不完整): - http.py: 用户环境配 socks5:// 代理时 httpx.Client() 构造期懒加载 socksio 失败,裸抛 ImportError (非 httpx.HTTPError),导致 oed services 等命令崩溃。现捕获转成可读 UserError(kind=socks_dependency_missing),hint 指引装 oed-cli[socks];非 socksio 的 ImportError 原样抛出不吞。 - pyproject.toml: 新增 [socks] 可选 extra (socksio>=1.0),仅用 SOCKS 代理的用户安装,不污染主依赖。 - tests/test_http_socks.py: 回归测试 (socksio 缺失→UserError;无关 ImportError 不被吞)。 清理: - 删除孤儿测试 test_functionGraph.py (依赖不存在的 context/functionGraph.py,跑不起来) - dynamic.py SIM102、invoke.py E501、test_spec_integrity.py I001 lint 修复 Closes #5 | 1 个月前 |