Add Nextcloud integration tools

- CLI tools: nextcloud-client, nextcloud-contacts, nextcloud-calendar, nextcloud-mail
- Build script with compile-time credentials
- Skills for all four tools
- Email tool supports IMAP/SMTP with attachment download
This commit is contained in:
WLTBAgent
2026-02-20 17:24:13 +00:00
parent 8d932b1c15
commit 705f41a872
20 changed files with 5043 additions and 2 deletions

262
PROGRESS-2026-02-11.md Normal file
View File

@@ -0,0 +1,262 @@
# Nextcloud Integration - Progress Report
**Date:** 2026-02-11
**Server:** https://teamworkapps.com (Nextcloud 25.0.13)
**User:** wltbagent@shortcutsolutions.net
---
## ✅ Completed
### 1. Nextcloud Files Client (WebDAV)
**Location:** `projects/nextcloud-integration/tools/go/nextcloud-client/`
**Installed:** `~/bin/nextcloud-client`
**Status:** ✅ Working
**Features:**
- `list` - Browse files and folders with metadata (size, dates, ETags)
- `upload` - Upload files to Nextcloud
- `download` - Download files from Nextcloud
- `mkdir` - Create directories
- `delete` - Remove files/folders
- `info` - Get detailed file metadata
- `move` - Move/rename files and folders
- `copy` - Copy files and folders
**Recent Fix (2026-02-11):**
Fixed WebDAV XML metadata parsing issue:
- **Problem:** Nextcloud returns multiple `<propstat>` elements (200 OK for valid properties, 404 for missing ones like folders without contentlength/contenttype)
- **Solution:** Added `PropStat` struct to handle multiple propstat elements, merged props from successful (200 OK) responses
- **Result:** File sizes, dates, ETags, and content types now display correctly
**Test Results:**
```
✅ List root directory - shows 7 items with correct sizes
✅ Upload test file - success
✅ Download test file - content verified
✅ Create test folder - success
✅ Get file info - shows full metadata (size: 13.7MB, modified date, ETag, MIME type)
✅ Delete test items - cleanup successful
```
### 2. Nextcloud Contacts Client (CardDAV)
**Location:** `projects/nextcloud-integration/tools/go/nextcloud-contacts/`
**Installed:** `~/bin/nextcloud-contacts`
**Status:** ✅ Working
**Features:**
- `list-books` - List all address books
- `list-contacts` - List contacts in a specific address book
- `get-contact` - Retrieve a specific contact vCard
- `create-contact` - Create a new contact (with name, email, phone, or import from .vcf file)
- `delete-contact` - Delete a contact
**Test Results:**
```
✅ List address books - shows 2 books (Contacts, Recently contacted)
✅ List contacts - correctly reports empty address book
✅ Create contact - successfully created test contact with name, email, phone
✅ Delete contact - successfully deleted test contact
✅ CardDAV endpoints accessible at /remote.php/dav/addressbooks/users/{username}/
```
### 3. Nextcloud Calendar Client (CalDAV)
**Location:** `projects/nextcloud-integration/tools/go/nextcloud-calendar/`
**Installed:** `~/bin/nextcloud-calendar`
**Status:** ✅ Working
**Features:**
- `list-calendars` - List all calendars
- `list-events` - List events in a specific calendar
- `get-event` - Retrieve a specific event (iCalendar format)
- `create-event` - Create a new event (with summary, start/end times, or import from .ics file)
- `delete-event` - Delete an event
**URL Pattern:** `/remote.php/dav/calendars/{username}/` (different from CardDAV)
**Test Results:**
```
✅ List calendars - shows "Personal" calendar
✅ List events - correctly reports empty calendar
✅ Create event - successfully created test event with summary and times
✅ Delete event - successfully deleted test event
✅ CalDAV endpoints accessible at /remote.php/dav/calendars/{username}/
```
---
## ❌ Not Available on Server
### 1. Calendar (CalDAV)
**Status:** ❌ App not installed
**Test:** `GET /remote.php/dav/calendars/users/{username}/`
**Result:** 404 Not Found - "Principal with name users not found"
### 2. Notes (REST API)
**Status:** ❌ App not installed
**Test:** `GET /index.php/apps/notes/api/v1/notes`
**Result:** No response (app not available)
---
## 📋 Current Server Capabilities
Based on testing, this Nextcloud server has:
- ✅ Files app (WebDAV)
- ✅ Contacts app (CardDAV)
- ✅ Calendar app (CalDAV)
- ✅ User management
- ✅ Activity feed
- ✅ Circles support
- ❌ Notes app (REST API unresponsive, may not be installed)
- ❌ Deck app
- ❌ Talk app
- ❌ Bookmarks app
---
## 🎯 Next Steps
### Option 1: Continue with Available Apps
Implement advanced features for working apps:
1. **Contacts** - Add create, update, delete operations
2. **Files** - Add share link generation, versioning support
### Option 2: Install Missing Apps
Ask server admin to install:
- Calendar app (for CalDAV support)
- Notes app (for REST API notes)
- Deck app (for Kanban boards)
### Option 3: Implement REST Skills for Documentation
Create skills for apps even if not installed (for future use):
1. **Calendar Skill** - Document CalDAV implementation (ready when app is installed)
2. **Notes Skill** - Document REST API implementation (ready when app is installed)
3. **Deck Skill** - Document REST API implementation (ready when app is installed)
---
## ✅ Skill Wrappers Created
### OpenClaw Skills
**Decision:** CLI tools + thin skill wrappers
- ✅ Reduces token usage (binary handles logic)
- ✅ More accurate (compiled Go code)
- ✅ Reusable (tools work outside OpenClaw)
- ✅ Testable (easy to verify independently)
**Skills Created:**
| Skill | Location | Wraps | Features |
|-------|----------|--------|----------|
| nextcloud-files | skills/nextcloud-files/SKILL.md | ~/bin/nextcloud-client | list, upload, download, mkdir, delete, move, copy, info |
| nextcloud-contacts | skills/nextcloud-contacts/SKILL.md | ~/bin/nextcloud-contacts | list-books, list-contacts, get-contact, create-contact, delete-contact |
| nextcloud-calendar | skills/nextcloud-calendar/SKILL.md | ~/bin/nextcloud-calendar | list-calendars, list-events, get-event, create-event, delete-event |
**Skill Structure:**
- Environment variable configuration
- Tool reference with examples
- Use cases and workflows
- Error handling guide
- Best practices
- Best practices
---
## ✅ Build-Time Credentials Implemented (Final Milestone)
### Build Script Created
**Location:** `projects/nextcloud-integration/build.sh`
**Features:**
- One-command build for all three tools
- Accepts server URL, username, and token as arguments
- Embeds credentials via Go ldflags
- Verifies successful builds
- Installs binaries to ~/bin/
**Usage:**
```bash
./build.sh <server-url> <username> <token>
```
**Example:**
```bash
./build.sh https://teamworkapps.com wltbagent@shortcutsolutions.net 1b8a28ca2fc26820fee3f9a8524c351b
```
### Configuration Priority
All three tools now support:
1. **Build-time ldflags** (highest priority)
- Set at compile time
- Embedded in binary
- No runtime configuration needed
2. **Environment variables** (fallback)
- NEXTCLOUD_URL
- NEXTCLOUD_USER
- NEXTCLOUD_TOKEN
3. **Command-line flags** (lowest priority)
- --url, --user, --token
- Override both ldflags and env vars
### Benefits
- ✅ No environment variables needed at runtime
- ✅ Credentials embedded at build time (more secure)
- ✅ Simplified command invocation
- ✅ One-command rebuild for all tools
### Security Note
**Important:** Binaries built with ldflags contain credentials in clear text. Do not distribute built binaries outside your trusted environment.
### Updated Skills
All three SKILL.md files updated with:
- Build-time credential instructions
- Build script usage
- Security warnings
- Configuration priority explanation
### README Created
**Location:** `projects/nextcloud-integration/README.md`
**Contents:**
- Quick start guide
- Component overview
- Usage examples
- Architecture decisions
- Building instructions
- Testing verification
---
## 📊 Summary
| Component | Status | Location | Notes |
|---------|--------|----------|-------|
| nextcloud-files CLI | ✅ Working | ~/bin/nextcloud-client | Full WebDAV support, metadata fixed, build-time credentials |
| nextcloud-files Skill | ✅ Complete | skills/nextcloud-files/SKILL.md | OpenClaw skill wrapper |
| nextcloud-contacts CLI | ✅ Working | ~/bin/nextcloud-contacts | CardDAV full CRUD, build-time credentials |
| nextcloud-contacts Skill | ✅ Complete | skills/nextcloud-contacts/SKILL.md | OpenClaw skill wrapper |
| nextcloud-calendar CLI | ✅ Working | ~/bin/nextcloud-calendar | CalDAV full CRUD, build-time credentials |
| nextcloud-calendar Skill | ✅ Complete | skills/nextcloud-calendar/SKILL.md | OpenClaw skill wrapper |
| Build Script | ✅ Complete | projects/nextcloud-integration/build.sh | One-command build with ldflags |
| README | ✅ Complete | projects/nextcloud-integration/README.md | Documentation and quick start |
| nextcloud-notes | ⏸️ Skipped | Per instructions | REST API unresponsive |
| nextcloud-deck | ❌ N/A | Not installed | App not available on server |
---
*Progress updated: 2026-02-11*