资讯动态

10分钟开发一个Pup扩展:用任意语言为CLI添加子命令与认证转发机制

发布时间:2026/10/17 16:20:08 来源:尧图企业网站定制
【免费下载链接】pupGive your AI agent a Pup — a CLI companion with 200 commands across 33 Datadog products.项目地址https://gitcode.com/gh_mirrors/pup6/pup点击查看免费下载Pup是一个覆盖 33 个 Datadog 产品、内置 200 命令的 CLI 工具。除了官方命令它还内置了完整的扩展机制你可以用 Bash、Python、Rust 等任意语言为 Pup CLI 添加自定义子命令并自动获得 Datadog 认证凭据转发。这篇文章带你 10 分钟上手 Pup 扩展开发。什么是 Pup 扩展一个可执行文件就够了Pup 扩展的本质极其简单任何命名为pup-name的可执行文件。它可能是一段 shell 脚本、一个编译好的二进制或者带 shebang 的 Python 脚本。运行机制如下你执行pup foo ...时Pup 先检查foo是否是内置命令若不是则查找已安装的扩展pup-foo带着你的参数和认证凭据运行它。这个拦截逻辑发生在参数解析之前源码见 src/main.rs参数拆解实现在 src/extensions/mod.rs。 扩展让团队可以独立发布实验性功能无需修改 Pup 核心代码更不用走完整发版流程。命名规则避免踩坑规则说明✅ 合法pup-foo、pup-cost-report、pup-lint❌ 非法pup-Foo大写、pup-2fast数字开头、pup-my_tool下划线、pup-monitors与内置命令冲突校验逻辑在 src/extensions/install.rs名称必须是小写字母开头只含小写字母、数字和连字符。10分钟上手写一个 Hello World 扩展创建一个名为pup-hello的文件内容只需 3 行#!/bin/bash echo Hello from pup extension! echo Site: $DD_SITE echo Args: $然后赋予执行权限并安装chmod x pup-hello pup extension install --local ./pup-hello pup hello world输出Hello from pup extension! Site: datadoghq.com Args: world恭喜你已经拥有了第一个 Pup 扩展 开发调试期间推荐用符号链接安装改动源码立即生效、无需重装pup extension install --local ./pup-hello --link认证转发机制扩展如何拿到 Datadog 凭据这是 Pup 扩展最有价值的部分——扩展完全不需要自己实现 keychain 访问、token 刷新或配置文件解析。Pup 在执行扩展前会自动把凭据注入环境变量OAuth2 token 过期时还会先刷新再传递保证扩展拿到的永远是有效凭据。注入与清理逻辑在 src/extensions/exec.rs未激活的变量会被显式移除防止父 shell 中的过期凭据泄漏给扩展。环境变量对照表变量设置时机值DD_ACCESS_TOKENOAuth2 登录生效时当前未过期的访问令牌DD_API_KEY已配置 API keyAPI 密钥DD_APP_KEY已配置 App key应用密钥DD_SITE始终站点如datadoghq.comDD_ORG指定了 org命名 org 会话PUP_OUTPUT始终输出格式json/table/yaml/csv/tsvPUP_FILTER设置了--jqjq 表达式原文PUP_AUTO_APPROVE--yes或 agent 模式truePUP_READ_ONLY只读模式truePUP_AGENT_MODEagent 模式true以 Python 扩展为例读取凭据只有几行代码token os.environ.get(DD_ACCESS_TOKEN) site os.environ.get(DD_SITE, datadoghq.com) headers {Authorization: fBearer {token}} if token else { DD-API-KEY: os.environ.get(DD_API_KEY, ), DD-APPLICATION-KEY: os.environ.get(DD_APP_KEY, ), }⚠️ 注意全局标志--output、--yes、--agent、--read-only、--org会被 Pup 提前解析不会作为命令行参数传给扩展而是通过上表的环境变量转发。扩展自己的参数Pup 不认识的部分则原样透传。进阶技巧零代码复用 Pup 的客户端与格式化不想手写 HTTP 和认证由于 Pup 分发扩展时自身就在PATH上任何语言的扩展都可以直接调用父进程的pup命令复用其请求处理和输出格式化用pup api发起已认证的 API 调用自动处理 OAuth/API key 选择、站点解析、User-Agentpup api v2/monitors --silent | jq -r .[].name用pup format渲染输出自动继承用户指定的-o格式echo $results | pup format两者组合一行代码就是一个与 Pup 行为完全一致的扩展认证和格式化代码零编写#!/bin/bash pup api v2/monitors --silent | pup format 完整示例和更多细节见官方文档docs/EXTENSIONS.md扩展的安装位置与管理命令扩展统一存放在配置目录下的extensions/每个扩展独立成目录并附带 Pup 写入的manifest.json元数据结构定义见 src/extensions/manifest.rsconfig_dir/extensions/ pup-hello/ pup-hello # 可执行文件 manifest.json # 元数据平台目录位置macOS~/Library/Application Support/pup/extensions/Linux~/.config/pup/extensions/Windows%APPDATA%\pup\extensions\可用环境变量PUP_CONFIG_DIR覆盖。常用管理命令pup extension list # 查看已安装扩展 pup extension upgrade hello # 升级单个扩展 pup extension upgrade --all # 升级全部 pup extension remove hello # 移除扩展发现与列举逻辑位于 src/extensions/discovery.rs管理命令实现在 src/commands/extension.rs。安装后扩展还会自动出现在pup --help的 EXTENSIONS 区块中方便团队成员发现。发布与分发你的扩展向团队分发扩展时将平台二进制作为 Release 附件命名遵循固定约定pup-name-os-arch # 例如pup-hello-darwin-aarch64、pup-hello-linux-x86_64、pup-hello-windows-x86_64.exe其中os取darwin/linux/windowsarch取x86_64/aarch64。也支持发布包含多个扩展的可执行文件压缩包用--extension name或--all按需安装。下载与校验流程实现在 src/extensions/install.rs 及后续段落。⚠️安全提示Pup 不会签名下载的扩展二进制若 Release 附带checksums.txt会校验所选附件请只从可信来源安装。常见问题与已知限制问题说明退出码Pup 原样透传扩展退出码被信号杀死时按128 信号号处理见 src/extensions/exec.rs只读模式--read-only会阻塞install/remove/upgrade但扩展分发本身不受阻PUP_READ_ONLYtrue由扩展自行遵守源文件要求--local安装要求源路径是普通文件而非目录agent 模式帮助pup --agent 扩展名 --help输出的是 Pup 顶层 schema而非扩展自身的 helpWASM 构建扩展功能仅限原生构建WASM 版不包含总结10分钟回顾✅ 写一个pup-name脚本 → ✅pup extension install --local安装 → ✅ 用pup name运行。认证凭据经环境变量自动转发pup apipup format还能零代码复用 Pup 的客户端与格式化能力。现在就可以动手了挑一个你的工作流痛点成本报表、内部服务查询、自动化运维动作用你最喜欢的语言写一个扩展让你的 Pup 学会新招式。更多机制细节与pup agent schema命令树用法可延伸阅读 docs/EXTENSIONS.md 与 docs/COMMANDS.md一个真实的 TypeScript 扩展示例见 skills/extensions/dd-pup-pi/。赞分享【免费下载链接】pupGive your AI agent a Pup — a CLI companion with 200 commands across 33 Datadog products.项目地址https://gitcode.com/gh_mirrors/pup6/pup点击查看免费下载相关推荐Google Drive CLI Client扩展开发添加自定义命令Google Drive CLI Client扩展开发添加自定义命令 你是否曾在使用Google Drive CLI Client时发现缺少某个特定功能的命开发工具Podman CLI 扩展开发指南从零添加新命令与子命令cmd/podman 源码实践Podman CLI 扩展开发指南从零添加新命令与子命令cmd/podman 源码实践 本篇技术指南以仓库中 cmd/podman/README.md h容器运行时云原生CLISpack 扩展开发实战为 Spack 添加自定义子命令与插件Spack 扩展开发实战为 Spack 添加自定义子命令与插件 Spack 扩展Spack extensions是一套官方支持的轻量插件机制允许你在不改开发工具构建工具CLI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑