tests and tooling (#4)

* init openspec

* clean out src, move mod into lib, remove trash

* create tests

* pre-commit hook

* add tests to CI

* update website

* README, CONTRIBUTING and Makefile

* openspec

* archive task

* fix ci order

* fix integration test

* fix validation tests
This commit is contained in:
Hari 2026-03-25 19:29:59 -04:00 committed by GitHub
parent 7dfab68304
commit 3819a85c47
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
24 changed files with 892 additions and 286 deletions

View file

@ -19,7 +19,7 @@ Requests and responses are newline-delimited JSON (NDJSON) over a Unix socket.
**Request:**
```json
{"id": "r123456", "action": "snapshot", "annotate": true}
{ "id": "r123456", "action": "snapshot", "annotate": true }
```
**Response:**
@ -31,7 +31,7 @@ Requests and responses are newline-delimited JSON (NDJSON) over a Unix socket.
Error responses include an `error` field:
```json
{"success": false, "error": "window not found: @w99"}
{ "success": false, "error": "window not found: @w99" }
```
## Socket location
@ -66,13 +66,13 @@ The trait-based design means adding Wayland support is a single trait implementa
Window detection uses EWMH properties:
| Property | Purpose |
|----------|---------|
| `_NET_CLIENT_LIST_STACKING` | Window stacking order |
| `_NET_ACTIVE_WINDOW` | Currently focused window |
| `_NET_WM_NAME` | Window title (UTF-8) |
| `_NET_WM_STATE_HIDDEN` | Minimized state |
| `_NET_CLOSE_WINDOW` | Graceful close |
| `WM_CLASS` | Application class/name |
| Property | Purpose |
| --------------------------- | ------------------------ |
| `_NET_CLIENT_LIST_STACKING` | Window stacking order |
| `_NET_ACTIVE_WINDOW` | Currently focused window |
| `_NET_WM_NAME` | Window title (UTF-8) |
| `_NET_WM_STATE_HIDDEN` | Minimized state |
| `_NET_CLOSE_WINDOW` | Graceful close |
| `WM_CLASS` | Application class/name |
Falls back to `XQueryTree` if `_NET_CLIENT_LIST_STACKING` is unavailable.

View file

@ -169,8 +169,8 @@ deskctl launch code --args /path/to/project
## Global options
| Flag | Env | Description |
|------|-----|-------------|
| `--json` | | Output as JSON |
| `--socket <path>` | `DESKCTL_SOCKET` | Path to daemon Unix socket |
| `--session <name>` | | Session name for multiple daemons (default: `default`) |
| Flag | Env | Description |
| ------------------ | ---------------- | ------------------------------------------------------ |
| `--json` | | Output as JSON |
| `--socket <path>` | `DESKCTL_SOCKET` | Path to daemon Unix socket |
| `--session <name>` | | Session name for multiple daemons (default: `default`) |

View file

@ -9,9 +9,9 @@ import DocLayout from "../layouts/DocLayout.astro";
</header>
<p>
Desktop control CLI for AI agents on Linux X11. Compact JSON output
for agent loops. Screenshot, click, type, scroll, drag, and manage
windows through a fast client-daemon architecture. 100% native Rust.
Desktop control CLI for AI agents on Linux X11. Compact JSON output for
agent loops. Screenshot, click, type, scroll, drag, and manage windows
through a fast client-daemon architecture. 100% native Rust.
</p>
<h2>Getting started</h2>