Releases: raylanlin/smarttune-cli
Releases · raylanlin/smarttune-cli
SmartTune CLI v2.3.1
Patch release adding a dedicated MCP-only SmartTune skill for read-only customer-support agents.\n\n- Adds skill-mcp/SKILL.md for agents without exec/shell/write permission\n- Documents SmartTune MCP tool workflow and safety boundaries\n- Keeps v2.3.0 MCP server/runtime behavior unchanged\n\nVerification: pytest -q -> 141 passed
SmartTune CLI v2.3.0
SmartTune CLI v2.3.0
Added
- Read-only MCP server via
smarttune-mcpfor OpenClaw and other MCP clients. smarttune_list_platforms,smarttune_log_quality, andsmarttune_analyze_logMCP tools.- Pure service layer under
smarttune/services/for analysis and JSON-safe serialization. - MCP security tests for extension allowlists, path traversal, symlink escape, and file size limits.
Security
- MCP tools do not expose subprocess, shell execution, arbitrary output paths, parameter writes, or filesystem mutation.
- Path validation resolves symlinks, enforces allowed roots, rejects unsafe extensions, and respects
SMARTTUNE_MCP_MAX_FILE_MB. - Betaflight
.txtremains CLI-supported but is intentionally excluded from the MCP allowlist.
Fixed
- Fixed MagFit import indentation.
- Hardware analysis service uses the existing
generate_hardware_report()path.
Verification
pytest -q->141 passed- MCP smoke-tested against a real ArduPilot
.BINlog.
v2.2.0 — English Docs & CLI Help Improvements
What's Changed
- 🌐 All documentation converted to English (SKILL.md, ROADMAP.md, MIGRATION.md)
- 📖 Complete
--helpdescriptions for all subcommands (pid, fft, sysid, hardware, magfit) - 🤖 SKILL.md for OpenClaw agent integration
- 🧹 Deprecated ardupilot-tune skill/CLI replaced by stune
Platform Support
| Platform | Format | Status |
|---|---|---|
| ArduPilot | .bin / .log | ✅ Full |
| Betaflight | .bbl / .bfl | ✅ Full (v2.0) |
| PX4 | .ulg | 🔲 Partial (v2.1) |
Full changelog
9a760a0 chore: sync version to 2.2.0 (pyproject.toml + __init__.py)
9e26108 feat(cli): add complete --help descriptions for all subcommands
6303c3d docs: convert all docs and skill to English (SKILL.md, ROADMAP.md, MIGRATION.md)
32ace2d feat(skill): add SmartTune SKILL.md for OpenClaw agent - replace deprecated ardupilot-tune skill
49be79e docs(readme): convert Agent Analysis Report to Markdown tables
dfb6d81 docs(readme): switch example images to dark theme
cce6f8f fix(plots): subtle light theme - gray reference lines and invisible borders
d3063ab feat(plots): customize dark theme colors
0ffc943 feat(cli): add --theme light|dark option for plot generation
b416ef9 docs(readme): add agent analysis report example section
371c736 revert(assets): restore original light-themed APM example image
ba576db revert(plots): restore original light theme, remove all dark_background attempts
3250841 refactor(plots): use matplotlib dark_background style instead of manual rcParams
d719542 fix(plots): compact layout for GitHub README (formatter changes gitignored)
73024c5 docs(readme): dark theme plots, move examples to end section
349659d docs(readme): add PID step response example images for ArduPilot and Betaflight
dec397d docs(readme): update for v2.1.0
v2.1.0 — Platform-Specific Analyzers
Full Changelog: v2.0.2...v2.1.0
v2.0.2: BBL Parser Critical Fixes
BBL Parser Fixes
Fixed 8 critical bugs in Betaflight Blackbox log parser:
| Bug | Impact |
|---|---|
| TAG8_4S16 nibble packing | Frame sync loss → all fields corrupted |
| TAG2_3S32 tag bit extraction | axisI decoded as zero |
| NEG_14BIT sign extension | vbatLatest and fields wrong |
| P-frame predictor history | Difference decoding errors |
| loopIteration segment detection | Parser stopped after ~3K frames per segment |
| 0x48 byte false header | Parser hangs on valid data |
| P interval sample rate | Duration wrong (41s→165s) |
| Quality filter threshold | Empty charts (rad/s↔deg/s mismatch) |
Results
- BLL-PD.bbl: 1s → 91s parsed, 158K PID samples/axis
- H5_51377_6S_F722.bbl: 1s → 166s parsed, quality 45→75 (POOR→GOOD)
Credits
- BBL parser loopIteration fix: internal
- Remaining 7 fixes: Claude Code via ACP session
Full Changelog: v2.0.1...v2.0.2
v2.0.1 — PID unit contract fix + FFT threshold + CLI docs
🐛 Bug Fixes
ArduPilot 单位契约修复
- rad/s → deg/s 自动转换:PIDR/ATC_RAT_* 消息 Tar 字段自动检测单位(max < 6.5 判定为 rad/s)
- PIDR 字段兼容:支持 Tar(新固件)和 Des(旧固件)
- modern/legacy 消息源正确分离:修复旧版 PIDR+RATE 混入 bug
FFT 阶跃响应精度修复
min_target_amplitude阈值从 0.349(rad/s)改为 3.0(deg/s)- Roll 峰值从 0.52 恢复到 0.64(与旧版 0.65 一致)
CLI --help 文档完善
- 版本号同步至 2.0.1
- Betaflight 状态: Planned → Full support
- PX4 状态: Planned → Partial support
- 7 个子命令 --platform/--visual 选项添加帮助文本
包含 Commits
| Commit | 说明 |
|---|---|
3a3ae08 |
ArduPilot PID 单位契约修复 + PIDR 兼容 + CLI 增强 |
86fde58 |
FFT 阈值同步 deg/s |
c2988ef |
版本号 + 平台状态 + 子命令帮助文本完善 |
v2.0.0 — Multi-platform release
SmartTune CLI v2.0.0
Multi-platform flight log analysis & tuning advisor CLI — ArduPilot + Betaflight + PX4
What's New
- Multi-platform architecture — Unified FlightData representation across ArduPilot, Betaflight, and PX4
- Betaflight support — Pure Python BBL parser, FF/RPM/D-term noise analyzers
- Platform auto-detection —
stune analyzedetects platform from log headers - ParamRef system — Generic parameter names mapped to each platform
- 6-layer Knowledge Base — common → platform → user → Pro layers
- Error code system — Standardized E10xx-E50xx error classification
Quick Install
pip install smarttune
stune analyze -i flight-log.BIN