Install
openclaw skills install @thcjp/encoding-toolkitopenclaw skills install @thcjp/encoding-toolkit核心功能: 本技能提供完整的故障排查表等能力。
核心功能: 本技能提供策略与多角色场景指南等能力。
| 能力 | 免费版 | 付费版 |
|---|---|---|
| 基础功能 | 支持 | 支持 |
| 二进制协议解析与序列化互转 | 不支持 | 支持 |
| 复杂工作流可视化编排 | 不支持 | 支持 |
| 条件分支与异常重试 | 不支持 | 支持 |
| 定时触发与事件驱动 | 不支持 | 支持 |
| 执行日志与审计追踪 | 不支持 | 支持 |
| 错误场景 | 原因 | 处理方式 |
|---|---|---|
| LLM响应超时或无响应 | 网络延迟或模型负载过高 | 请求重试;确认Agent平台LLM服务正常 |
| 输入内容格式不正确 | 用户输入不符合skill预期格式 | 检查输入是否符合skill使用说明中的格式要求,参考示例章节 |
| 执行结果与预期不符 | 指令描述不够明确或上下文不足 | 提供更详细的指令描述,补充必要的上下文信息 |
| 命令执行失败 | 运行环境不满足要求或权限不足 | 确认运行环境符合依赖说明中的要求;检查命令权限设置 |
| 能力模块 | 输入示例 | 输出 | 适用场景 |
|---|---|---|---|
| Protobuf 解析 | data.pb | 字段树结构 | 协议逆向、调试 |
| MessagePack 解码 | data.msgpack | JSON | 微服务通信调试 |
| CBOR 解码 | data.cbor | JSON | IoT 协议分析 |
| JSON ↔ YAML ↔ TOML | 配置文件 | 互转 | 多框架配置统一 |
| 批量哈希校验 | 目录 | 报告 + 差异表 | 大规模迁移校验 |
| 自定义模板 | DSL | 编解码流水线 | 重复任务脚本化 |
迁移 PB 级数据到新存储后,需要逐文件比对 SHA-256。专业版提供并行计算、断点续算与差异报告生成,相比串行模式性能提升 5-10 倍.
新接入的第三方服务使用 Protobuf 通信但未提供 .proto 文件。使用 protoc --decode_raw 结合字段类型推断,可还原消息结构.
同一项目在 Python(YAML)、Rust(TOML)、Java(XML)间切换,配置格式不统一。专业版提供双向互转流水线,保持语义一致.
CBOR 是 IoT 设备常用编码格式,体积比 JSON 小 40%。专业版支持流式解码大块 CBOR 数据,适合网关侧实时分析.
审计日志中的 JWT、Base64 数据需要批量解析并提取可疑字段。专业版提供模板化提取规则,可一次性扫描数万条记录.
# 1. 批量计算目录下所有文件的 SHA-256
find /data/migration -type f -exec sha256sum {} + > checksums.sha256
# ...
# 2. 校验并输出差异
sha256sum -c checksums.sha256 2>&1 | grep -v 'OK$' > diff.report
# ...
# 3. Protobuf 原始解码
protoc --decode_raw < message.pb
# ...
# 4. MessagePack 转 JSON
python3 -c "
import msgpack, json, sys
data = msgpack.unpackb(sys.stdin.buffer.read(), raw=False)
print(json.dumps(data, indent=2, ensure_ascii=False))
" < data.msgpack
# ...
# 5. CBOR 转 JSON
python3 -c "
import cbor2, json, sys
data = cbor2.loads(sys.stdin.buffer.read())
print(json.dumps(data, indent=2, default=str, ensure_ascii=False))
" < data.cbor
# ...
# 6. JSON 转 TOML
python3 -c "
import json, tomli_w, sys
tomli_w.dump(json.load(sys.stdin), sys.stdout.buffer)
" < config.json > config.toml
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| content | string | 否 | 处理的内容输入 |
| mode | string | 否 | 处理模式, 可选值: json/text/markdown |
| style | string | 否 | 输出风格, 参考 references/style.md |
{
"success": true,
"data": {
"result": "处理结果",
"status": "success",
"metadata": {
"template_used": "reviewer",
"word_count": 0,
"style": "专业"
}
},
"error": null
}
输出模板参考: assets/output.json
| 现象 | 可能原因 | 解决步骤 | 优先级 |
|---|---|---|---|
| Base64 解码乱码 | 输入为 URL 安全变体 | 先 tr '-_' '+/' 再解码 | 高 |
| 批量校验内存溢出 | 一次性载入所有结果 | 改为分片落盘 | 高 |
| Protobuf 解码失败 | 字节序错乱 | 用 xxd 确认字节布局 | 中 |
| JWT exp 字段不存在 | Token 未包含过期声明 | 联系签发方确认策略 | 中 |
| CBOR 解码缓慢 | 一次性载入大块数据 | 使用流式 API | 中 |
| 跨平台路径错误 | 硬编码分隔符 | 使用 pathlib.Path | 低 |
| 哈希结果不一致 | 输入含末尾换行 | 使用 echo -n 或二进制模式 | 低 |
| 模板执行异常 | 正则贪婪匹配 | 使用非贪婪 .*? 或锚定边界 | 低 |
| 依赖项 | 类型 | 是否必需 | 获取方式 | 版本兼容性 |
|---|---|---|---|---|
| LLM API | API | 必需 | 由 Agent 平台内置 LLM 提供 | 不限 |
| Python3 | 运行时 | 必需 | 官网下载 | 3.9+ |
| openpyxl | Python 库 | 可选 | pip install openpyxl | 3.0+ |
| msgpack | Python 库 | 可选 | pip install msgpack | 1.0+ |
| cbor2 | Python 库 | 可选 | pip install cbor2 | 5.0+ |
| tomli_w | Python 库 | 可选 | pip install tomli_w | 1.0+ |
| strictyaml | Python 库 | 可选 | pip install strictyaml | 1.7+ |
| protoc | 系统工具 | 可选 | 官网下载 | 3.0+ |
d:\skills\.skillhub-credentials\ 目录(已 gitignore)import hashlib
from pathlib import Path
from concurrent.futures import ProcessPoolExecutor, as_completed
import json
# ...
def hash_file(path: str) -> dict:
h = hashlib.sha256()
with open(path, 'rb') as f:
while chunk := f.read(1 << 20): # 1MB 块
h.update(chunk)
return {'path': path, 'sha256': h.hexdigest()}
# ...
def batch_verify(root: str, expected: dict, workers: int = 8) -> dict:
"""并行计算并比对,返回差异报告。"""
report = {'matched': 0, 'mismatched': [], 'missing': [], 'extra': []}
files = list(Path(root).rglob('*'))
files = [str(f) for f in files if f.is_file()]
actual = {}
with ProcessPoolExecutor(max_workers=workers) as ex:
futures = {ex.submit(hash_file, f): f for f in files}
for fut in as_completed(futures):
r = fut.result()
actual[r['path']] = r['sha256']
for path, h in expected.items():
if path not in actual:
report['missing'].append(path)
elif actual[path] != h:
report['mismatched'].append({'path': path, 'expected': h, 'actual': actual[path]})
else:
report['matched'] += 1
for path in actual:
if path not in expected:
report['extra'].append(path)
return report
# ...
if __name__ == '__main__':
expected = json.loads(Path('expected.json').read_text())
report = batch_verify('/data/migration', expected)
Path('diff_report.json').write_text(json.dumps(report, indent=2, ensure_ascii=False))
print(f"匹配: {report['matched']},不一致: {len(report['mismatched'])},缺失: {len(report['missing'])},多余: {len(report['extra'])}")
import re
import base64
from urllib.parse import unquote
# ...
class TemplatePipeline:
"""可配置的多阶段编解码流水线。"""
def __init__(self, stages: list):
self.stages = stages
# ...
def run(self, text: str) -> str:
for stage in self.stages:
if stage == 'base64_decode':
text = base64.b64decode(text).decode('utf-8', errors='replace')
elif stage == 'url_decode':
text = unquote(text)
elif stage == 'trim':
text = text.strip()
elif stage.startswith('regex_extract:'):
pattern = stage.split(':', 1)[1]
m = re.search(pattern, text)
text = m.group(0) if m else ''
return text
# ...
pipeline = TemplatePipeline(['base64_decode', 'url_decode', 'trim'])
print(pipeline.run('aGVsbG8lMjB3b3JsZA=='))
A:将 batch_verify 的 actual 字典改为分片写入磁盘(每 1 万条落盘一次),同时降低 worker 数避免内存峰值。也可使用 SQLite 临时表存储中间结果.
A:protoc --decode_raw 会以 field_number: value 形式显示未知字段。若需语义还原,需获取 .proto 文件或通过抓包对比推断字段含义.
A:YAML 支持日期、布尔等复杂类型,JSON 只有基础类型。互转时建议先约定 schema,使用 strictyaml 限制 YAML 输入避免歧义.
A:使用 cbor2 的流式 API loads 替代一次性载入;若数据来自网络,可结合 httpx 流式响应边接收边解码.
A:检查点机制记录已校验文件列表与结果,重启时跳过已完成项。推荐每 1000 个文件落盘一次检查点.
A:使用 TemplatePipeline 的 run 方法逐步执行,每个 stage 输出中间结果;复杂模板建议先在单条数据上验证再批量执行.
A:使用 pathlib.Path 统一路径处理,避免硬编码 \ 或 /。Windows 下使用 Path 会自动转换分隔符.
A:单条 JWT 解析耗时可忽略,批量场景瓶颈在 I/O。建议先按行读取再并行解析,worker 数不超过 CPU 核数.
A:cmp file1.bin file2.bin 给出优秀个差异位置;xxd 后 diff 可可视化字节差异;专业场景使用 vbindiff 交互式对比.
A:JSON 转 XML 通常膨胀 2-3 倍,转 YAML 约 1.2 倍。若传输体积敏感,优先选择 MessagePack 或 CBOR.
| 错误场景(续) | 原因 | 处理方式 |
|---|---|---|
| LLM响应超时或无响应 | 网络延迟或模型负载过高 | 检查网络连接,重试请求;确认Agent平台LLM服务正常 |
| 输入内容格式不正确 | 用户输入不符合skill预期格式 | 检查输入是否符合skill使用说明中的格式要求,参考示例章节 |
| 执行结果与预期不符 | 指令描述不够明确或上下文不足 | 提供更详细的指令描述,补充必要的上下文信息 |
| 命令执行失败 | 运行环境不满足要求或权限不足 | 确认运行环境符合依赖说明中的要求;检查命令权限设置 |
| 操作步骤 | 手动耗时 | 自动化耗时 | 时间节约 | 准确率提升 |
|---|---|---|---|---|
| 批量哈希计算 | 2小时/GB | 30分钟/GB | 1.5小时/GB | 5% |
| Protobuf 解析 | 10分钟/文件 | 2分钟/文件 | 8分钟/文件 | 10% |
| JSON ↔ YAML ↔ TOML 互转 | 30分钟/文件 | 5分钟/文件 | 25分钟/文件 | 8% |
| CBOR 解码 | 1小时/文件 | 15分钟/文件 | 45分钟/文件 | 7% |
| 安全合规审计 | 1天/万条 | 2小时/万条 | 22小时/万条 | 6% |
| 对比维度 | 本技能 | 手动操作 | Python脚本 | 专业软件 |
|---|---|---|---|---|
| 功能全面性 | 高 | 低 | 中 | 高 |
| 易用性 | 高 | 低 | 中 | 高 |
| 性能 | 高 | 低 | 中 | 高 |
| 成本 | 低 | 高 | 中 | 高 |
| 支持的格式 | 高 | 低 | 中 | 高 |
| 痛点 | 描述 | 影响范围 | 解决方案 | 量化效果 |
|---|---|---|---|---|
| 数据迁移校验效率低 | 大规模数据迁移时,手动校验效率低下,耗时过长 | 运维工作 | 提供批量哈希校验功能,提高效率 | 时间节约 50% |
| 协议解析困难 | 二进制协议解析需要专业知识,且效率低 | 开发工作 | 提供自动解析功能,简化开发流程 | 效率提升 80% |
| 配置文件格式不统一 | 不同框架使用不同配置文件格式,难以统一管理 | 架构设计 | 提供格式互转功能,实现统一管理 | 效率提升 70% |
| 错误现象 | 可能原因 | 诊断步骤 | 解决方案 |
|---|---|---|---|
| 无法解析二进制协议 | 协议格式错误或文件损坏 | 检查协议格式和文件完整性 | 修正协议格式或修复文件 |
| 批量哈希校验失败 | 文件权限问题或目录路径错误 | 检查文件权限和目录路径 | 修改文件权限或修正路径 |
| 序列化格式互转错误 | 输入数据格式不正确 | 检查输入数据格式 | 修正输入数据格式 |
| 自定义模板执行失败 | 模板语法错误或参数错误 | 检查模板语法和参数 | 修正模板语法或参数 |
| LLM响应超时或无响应 | 网络延迟或模型负载过高 | 检查网络连接和模型状态 | 优化网络连接或减轻模型负载 |