feat: add FTMS (File/Text Management System)#8
Open
modpunk wants to merge 22 commits intoopenagen:mainfrom
Open
feat: add FTMS (File/Text Management System)#8modpunk wants to merge 22 commits intoopenagen:mainfrom
modpunk wants to merge 22 commits intoopenagen:mainfrom
Conversation
… MCU + Linux tools Expand the existing UNO Q Bridge peripheral from 2 GPIO tools to 13 tools covering the board's full capability set. ZeroClaw can now run as an edge-native agent directly on the UNO Q's Debian Linux (Cortex-A53). MCU tools (via Bridge socket to STM32U585): - GPIO read/write (D0-D21), ADC read (A0-A5, 12-bit, 3.3V) - PWM write (D3/D5/D6/D9/D10/D11), I2C scan/transfer, SPI transfer - CAN send (stub), LED matrix (8x13), RGB LED (LED3-4) Linux tools (direct MPU access): - Camera capture (MIPI-CSI via GStreamer) - Linux RGB LED (sysfs), System info (temp/mem/disk/wifi) Also includes: - Expanded Arduino sketch with all MCU peripheral handlers - Expanded Python Bridge server with command routing - DeployUnoQ CLI command for edge-native deployment via SSH - Cross-compile script (dev/cross-uno-q.sh) for aarch64 - UNO Q datasheet for RAG pipeline (docs/datasheets/arduino-uno-q.md) - Pin validation with datasheet constraints (PWM pins, ADC channels, etc.) - 19 unit tests covering validation, response parsing, and tool schemas
Three issues discovered during deployment to actual UNO Q hardware:
1. Bridge.call() takes positional args, not a list — changed from
Bridge.call("digitalRead", [pin]) to Bridge.call("digitalRead", pin)
2. Bridge.call() must run on main thread (not thread-safe) — restructured
socket server to use a queue pattern: accept thread enqueues requests,
main App.run() loop drains queue and calls Bridge
3. Docker container networking requires 0.0.0.0 bind (not 127.0.0.1)
4. Wire/SPI are built into Zephyr platform, removed from sketch.yaml
5. Renamed C++ functions to bridge_* prefix to avoid Arduino built-in clashes
6. Changed const char* params to String for MsgPack RPC compatibility
Tested on hannah.local: gpio_read, gpio_write, adc_read, pwm_write,
capabilities all confirmed working.
…l cross-compile config - Camera capture tool now uses v4l2-ctl instead of GStreamer (works with USB cameras like NETUM, not just MIPI-CSI) - Tool output includes [IMAGE:<path>] hint so Telegram channel sends the captured photo directly to the user - Added width/height/device parameters (defaults: 1280x720, /dev/video0) - Added aarch64-unknown-linux-musl linker config to .cargo/config.toml
…camera for USB The daemon's channel server was missing peripheral tools — only the interactive `agent` command loaded them. Now `start_channels()` calls `create_peripheral_tools()` so Telegram/Discord/Slack channels get access to all UNO Q hardware tools. Also updated camera capture tool description to guide the LLM to use [IMAGE:<path>] markers for Telegram photo delivery.
…tive feat(peripherals): Arduino UNO Q edge-native agent with full MCU + Linux peripheral tools
Defines architecture for file upload, storage, text extraction, AI-powered media description, and FTS5 full-text search indexing. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Detailed step-by-step plan covering config, schema, storage, index, extraction, description, gateway routes, web UI, and proxy changes. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…s-util, duplicate chat fn, bin ftms module)
|
Thanks for contributing to ZeroClaw. For faster review, please ensure:
See |
PR intake checks found warnings (non-blocking)Fast safe checks found advisory issues. CI lint/test/build gates still enforce merge quality.
Action items:
Run logs: https://github.com/openagen/zeroclaw/actions/runs/22280116181 Detected blocking line issues (sample):
Detected advisory line issues (sample):
|
Collaborator
|
Thanks for contributing to ZeroClaw.
|
|
Hi @modpunk, friendly automation nudge from PR hygiene. This PR has had no new commits for 341h and still needs an update before merge:
Recommended next steps
Maintainers: apply |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
src/ftms/): file upload, storage, SQLite FTS5 indexing, text extraction, and media description/upload,/files,/files/search,/files/{id},/files/{id}/download) with configurable body limit for uploadsFtmsConfigwithenabled,max_upload_size_mb,storage_dir,auto_describeoptionsArchitecture
Files are stored at
~/.zeroclaw/files/YYYY/MM/DD/{uuid}.{ext}with metadata + full-text content indexed in SQLite FTS5. Text is auto-extracted from text/JSON/XML/PDF files; images get base64 data-URI descriptions. Search uses FTS5 ranking with optional MIME type and date filters.New files
src/ftms/mod.rs— FtmsService orchestratorsrc/ftms/schema.rs— FileRecord, FileMetadata, FileSearchResult, FileListResponsesrc/ftms/storage.rs— Date-organized file storagesrc/ftms/index.rs— SQLite FTS5 index with content-sync triggerssrc/ftms/extract.rs— Text extraction (UTF-8, PDF)src/ftms/describe.rs— Media description (image base64, audio/video metadata)Test plan
🤖 Generated with Claude Code