返回顶部
p

portable-tools便携工具

Build cross-device tools without hardcoding paths or account names

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.2.0
安全检测
已通过
2,668
下载量
免费
免费
1
收藏
概述
安装方式
版本历史

portable-tools

便携工具 - 跨设备开发方法论

构建可在不同设备、命名方案和配置下工作的工具的方法论。基于OAuth刷新调试会话(2026-01-23)的经验总结。

核心原则

永远不要假设你的设备是唯一的设备。

你的本地设置只是众多可能配置中的一种。为通用情况构建,而非特定实例。



三个问题(编写代码前)

1. 不同设备之间哪些因素会变化?

在编写任何读取配置、数据或凭据的代码之前:

询问:

  • - 文件路径?(macOS与Linux,不同的主目录)
  • 账户名称?(user123 vs default vs oauth)
  • 服务名称?(拼写/大小写的细微差异)
  • 数据结构?(不同版本,不同格式)
  • 环境?(不同的Shell,不同的可用工具)

来自OAuth刷新的示例:

  • - ❌ 假设:账户始终是claude
  • ✅ 现实:可能是claude、Claude Code、default等

行动: 列出变量,使其可配置或可自动发现



2. 如何证明这有效?

在声称成功之前:

要求:

  • - 具体的BEFORE状态(精确值)
  • 具体的AFTER状态(精确值)
  • 证明它们不同(并排比较)

来自OAuth刷新的示例:

BEFORE:

  • - 访问令牌: POp5z1fi...eSN9VAAA
  • 过期时间: 1769189639000

AFTER:

  • - 访问令牌: 01v0RrFG...eOE9QAA ✅ 不同
  • 过期时间: 1769190268000 ✅ 已延长

行动: 始终使用真实值展示数据转换



3. 当它出问题时会发生什么?

在推送到生产环境之前:

测试:

  • - 错误配置(故意破坏配置)
  • 缺失数据(移除期望字段)
  • 多个条目(歧义情况)
  • 边界情况(空值,特殊字符)

来自OAuth刷新的示例:

  • - 使用keychain_account: wrong-name测试 → 回退应能工作
  • 使用不完整的钥匙串数据测试 → 应优雅失败并给出有用错误

行动: 测试失败模式,而不仅仅是正常路径



强制模式

模式1:显式优于隐式

❌ 错误:
bash

歧义 - 返回第一个匹配项


security find-generic-password -s Service -w

✅ 正确:
bash

显式 - 返回特定条目


security find-generic-password -s Service -a account -w

规则: 如果命令可能产生歧义,请使其显式化。



模式2:使用前验证

❌ 错误:
bash
DATA=$(read_config)
USE_VALUE=$DATA # 希望它是有效的

✅ 正确:
bash
DATA=$(read_config)
if ! validate_structure $DATA; then
error 无效的数据结构
fi
USE_VALUE=$DATA

规则: 永远不要假设数据具有预期的结构。



模式3:回退链

❌ 错误:
bash
ACCOUNT=claude # 硬编码

✅ 正确:
bash

尝试配置的 → 尝试常见的 → 错误并附带帮助


ACCOUNT=${CONFIG_ACCOUNT}
if ! has_data $ACCOUNT; then
for fallback in claude default oauth; do
if has_data $fallback; then
ACCOUNT=$fallback
break
fi
done
fi
[[ -z $ACCOUNT ]] && error 未找到账户。已尝试:...

规则: 为常见变体提供自动回退。



模式4:有用的错误信息

❌ 错误:
bash
[[ -z $TOKEN ]] && error 无令牌

✅ 正确:
bash
[[ -z $TOKEN ]] && error 未找到令牌

已检查:

  • - 配置:$CONFIGFILE
  • 字段:$FIELDNAME
  • 期望:{ \tokens\: { \refresh\: \...\ } }

使用以下命令验证:
cat $CONFIG_FILE | jq .tokens

规则: 错误消息应帮助用户诊断和修复问题。



调试方法论(Patrick的方法)

步骤1:获取精确数据

不要问: 它坏了吗?
要问: 你看到的具体值是什么?有多少条目存在?哪个有数据?

示例:
bash

模糊


检查钥匙串

具体

运行:security find-generic-password -l Service | grep acct 告诉我:1. 有多少条目 2. 哪个有令牌 3. 最后修改时间

步骤2:用具体示例证明

不要说: 现在应该能用了
要展示: 这是BEFORE令牌(POp5z...),这是AFTER令牌(01v0R...),它们不同

模板:

BEFORE:

  • - 字段1:<精确值>
  • 字段2:<精确值>

AFTER:

  • - 字段1:<新值> ✅ 已更改
  • 字段2:<新值> ✅ 已更改

证明:值不同



步骤3:立即考虑跨设备

不要想: 在我的机器上能用
要想: 如果他们的设置在[X]方面不同怎么办?

检查清单:

  • - [ ] 不同的账户名称?
  • [ ] 不同的文件路径?
  • [ ] 不同的工具/版本?
  • [ ] 不同的权限?
  • [ ] 不同的数据格式?



起飞前检查清单(发布前)

发现阶段

  • - [ ] 列出所有外部依赖项(文件、命令、服务)
  • [ ] 记录每个依赖项提供什么
  • [ ] 识别哪些部分在不同设备间可能不同

实现阶段

  • - [ ] 使变体可配置(带有合理的默认值)
  • [ ] 为每个输入添加验证
  • [ ] 为常见变体构建回退链
  • [ ] 添加--dry-run或--test模式

测试阶段

  • - [ ] 使用正确配置测试 → 应能工作
  • [ ] 使用错误配置测试 → 应回退或优雅失败
  • [ ] 使用缺失数据测试 → 应给出有用的错误
  • [ ] 使用多个条目测试 → 应处理歧义

文档阶段

  • - [ ] 记录默认假设
  • [ ] 记录如何验证本地设置
  • [ ] 记录常见变体及如何处理
  • [ ] 包含数据流图
  • [ ] 添加故障排除部分

真实世界示例:OAuth刷新器

原始版本(有问题的)

bash

假设单个条目,无验证,无回退

KEYCHAIN_DATA=$(security find-generic-password -s Service -w) REFRESHTOKEN=$(echo $KEYCHAINDATA | jq -r .refreshToken)

使用令牌(希望它是有效的)

问题:

  • - 返回第一个字母匹配项(错误条目)
  • 无验证(可能为空/格式错误)
  • 无回退(如果账户名称不同则失败)



修复版本(便携的)


bash

显式账户,带验证和回退


validate_data() {
echo $1 | jq -e .claudeAiOauth.refreshToken > /dev/null 2>&1
}

尝试配置的账户

DATA=$(security find-generic-password -s $SERVICE -a $ACCOUNT -w 2>&1) if validate_data $DATA; then log ✓ 使用账户:$ACCOUNT else log ⚠ 尝试回退账户... for fallback in claude Claude Code default; do DATA=$(security find-generic-password -s $SERVICE -a $fallback -w 2>&1) if validate_data $DATA; then ACCOUNT=$fallback log ✓ 在 $fallback 中找到数据 break fi done fi

[[ -z $DATA ]] || ! validate_data $DATA && error 未找到有效数据
已尝试账户:$ACCOUNT, claude, Claude Code, default
使用以下命令验证:security find-generic-password -l $SERVICE

REFRESH_TOKEN=$(echo $DATA | jq -r .claudeAiOauth.refreshToken)

改进:

  • - ✅ 显式账户参数
  • ✅ 验证数据结构
  • ✅ 自动回退到常见名称
  • ✅ 带有

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 portable-tools-1776390127 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 portable-tools-1776390127 技能

通过命令行安装

skillhub install portable-tools-1776390127

下载

⬇ 下载 portable-tools v1.2.0(免费)

文件大小: 8.5 KB | 发布时间: 2026-4-17 15:43

v1.2.0 最新 2026-4-17 15:43
portable-tools v1.2.0

- SKILL.md rewritten for greater clarity and conciseness, emphasizing methodology and actionable patterns.
- Description updated to focus on building cross-device tools without hardcoding paths or account names.
- Redundant details and excessive narrative trimmed to clarify core principles, mandatory patterns, and debugging checklists.
- Anti-patterns and real-world OAuth example made more direct and accessible.
- Resulting documentation now provides a clearer, more universal set of guidelines for portable tool development.

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部