Commit efccd1c
committed
release(v1.10.1): heartbeat auth fix, skills uninstall, compat mode
## Fixed
Heartbeat signature verification (Garry Tan bug report #1). The registry
client's signer captured d.identity at startup and signed every heartbeat
with the captured pointer. After key rotation, the heartbeat kept using
the stale key and the registry rejected it with "signature verification
failed", looping into re-register every 60 s with no peer connectivity.
The fix reads d.identity under d.identityMu on every signer call. Same
fix applied to the RotateKey-time re-bind for symmetry.
## Added
### Compat mode — tunnel Pilot over HTTPS/WSS
Daemons in UDP-blocked environments (Docker on Render/Railway/Vercel/
Lambda, restrictive corp networks) can now opt in with -transport=compat
to tunnel Pilot packets over a long-lived WebSocket Secure connection
to the beacon. Existing UDP daemons reach compat-mode peers transparently
via the beacon's relay path — no client change required for the UDP side.
Live at wss://beacon.pilotprotocol.network/v1/compat. End-to-end Ed25519
trust unchanged; TLS provides the daemon-to-beacon channel, Ed25519
still protects peer-to-peer identity.
- pkg/daemon/transport: Transport interface + ErrClosed sentinel.
*udpio.Socket satisfies it implicitly — zero behavior change to UDP.
- pkg/daemon/transport/wss: WSS client transport via coder/websocket.
Ed25519 challenge after upgrade. Reconnect with backoff.
- pkg/beacon/wss: WSS server with per-peer auth, idle disconnect,
capacity rejection, Prometheus-friendly metrics.
- pkg/beacon/server.go: Tier-0 destination check in relay worker —
relay packets for WSS-connected peers bypass the UDP sendmmsg batch.
OnFrame ingests WSS frames into the existing handlePacket dispatch.
- cmd/rendezvous: -wss-addr flag wires WSS bridge into production.
- cmd/daemon: -transport, -compat-beacon, -tls-trust flags. All
default to UDP behavior; compat is explicit opt-in.
- cmd/pilot-ca: offline CA tool for the future production root cert.
- internal/transport/compat: //go:embed root pool with dev placeholder.
- pkg/registry: LookupPublicKey(nodeID) for in-process WSS auth.
### Skill injection — clean opt-out (Garry Tan bug report #3)
- pilotctl skills disable: removes every file the daemon has ever
written via the inject manifest. Strip-only on co-inhabited files
(CLAUDE.md, AGENTS.md, AGENT.md, SOUL.md); delete in pilot-owned
subdirs. OpenClaw plugin allow-list restored from .pilot-bak snapshot
or inverse-merged. Idempotent. Persists opt-out in ~/.pilot/config.json.
- pilotctl skills enable: re-enables + runs one reconcile pass.
- Marker block self-disclosure: <!-- pilot:begin v=1 hash=...
Inserted by pilot-daemon. Remove with: pilotctl skills disable
--> so anyone opening their agent config in one read knows what
the block is and how to remove it.
- markerRE widened to match both old and new marker formats.
- install.sh banner mentions skills disable / enable.
### dataexchange b64 (opt-in)
- -dataexchange-b64 flag adds a lossless data_b64 field to inbox
JSON for binary payloads (zlib-compressed envelopes, etc.).
### Swift SDK + CGo embedded
- sdk/swift: new Swift package wrapping the CGo bindings.
- sdk/cgo/embedded.go: embedded-daemon export for callers that link
pilot directly rather than running a separate daemon process.
## Changed
- macOS dev builds: MaxReusePortShards=1 so the beacon doesn't
crash at startup when SO_REUSEPORT semantics differ from Linux.
- .github/workflows/ci.yml: build cmd/pilot-ca alongside other binaries.
## Documentation
- docs/SPEC-compat-mode.md: full design + rollout history.
- docs/RUNBOOK-pilot-ca.md: operator procedure for future prod root mint.
- web/src/pages/docs/firewalls.astro + plain mirror: user guide for
running Pilot behind a firewall.
- web/src/pages/docs/configuration.astro: new daemon flags.
- web/src/pages/docs/cli-reference.astro: skills disable/enable.
- docs/AGENT-APPS.md, docs/ANALYSIS-per-prompt-injection.md,
docs/INVESTIGATION-cloudflare-workers.md,
docs/SPEC-skillinject-openclaw-per-prompt.md: design notes.
- Various other doc updates from the regen-plain pass.
## Tests
- 40 new unit + integration tests across compat-mode packages.
- tests/compat/: 4-cell transport matrix.
- All packages green; daemon test suite preserved.1 parent 98c75ad commit efccd1c
114 files changed
Lines changed: 9104 additions & 1721 deletions
File tree
- .github/workflows
- cmd
- daemon
- pilot-ca
- pilotctl
- rendezvous
- docs
- internal
- skillinject
- transport/compat
- roots
- pkg
- beacon
- wss
- daemon
- transport
- wss
- udpio
- registry
- server
- plugins/dataexchange
- sdk
- cgo
- swift
- Examples/pilot-smoke-swift
- Sources/Pilot
- scripts
- tests
- compat
- internal/skillinject
- web/src/pages
- docs
- plain
- docs
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
34 | 34 | | |
35 | 35 | | |
36 | 36 | | |
| 37 | + | |
37 | 38 | | |
38 | 39 | | |
39 | 40 | | |
40 | 41 | | |
41 | 42 | | |
42 | 43 | | |
43 | 44 | | |
44 | | - | |
| 45 | + | |
45 | 46 | | |
46 | 47 | | |
47 | 48 | | |
48 | 49 | | |
49 | | - | |
| 50 | + | |
50 | 51 | | |
51 | 52 | | |
52 | 53 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
29 | 29 | | |
30 | 30 | | |
31 | 31 | | |
32 | | - | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
33 | 38 | | |
34 | 39 | | |
35 | 40 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
10 | 49 | | |
11 | 50 | | |
12 | 51 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
67 | 67 | | |
68 | 68 | | |
69 | 69 | | |
| 70 | + | |
70 | 71 | | |
71 | 72 | | |
72 | 73 | | |
73 | 74 | | |
74 | 75 | | |
75 | 76 | | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
76 | 80 | | |
77 | 81 | | |
78 | 82 | | |
| |||
140 | 144 | | |
141 | 145 | | |
142 | 146 | | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
143 | 150 | | |
144 | 151 | | |
145 | 152 | | |
| |||
158 | 165 | | |
159 | 166 | | |
160 | 167 | | |
161 | | - | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
162 | 171 | | |
163 | 172 | | |
164 | 173 | | |
| |||
0 commit comments