Document Vim 9.0+ requirement for adapter
This commit is contained in:
parent
7b81777d9d
commit
2e370afe2c
1 changed files with 66 additions and 0 deletions
66
CLAUDE.md
Normal file
66
CLAUDE.md
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
# collabd - editor-agnostic collaborative editing daemon
|
||||
|
||||
daemon + thin adapters architecture. daemon handles yjs crdt, adapters just
|
||||
hook buffer events and apply remote changes.
|
||||
|
||||
## stack
|
||||
|
||||
- bun runtime
|
||||
- yjs for crdt
|
||||
- websocket transport
|
||||
- vim9script adapter (with bun bridge since vim cant do websocket)
|
||||
|
||||
## running
|
||||
|
||||
```bash
|
||||
just dev # daemon on :4040
|
||||
bun test # unit tests
|
||||
just check # biome lint
|
||||
```
|
||||
|
||||
## vim adapter usage
|
||||
|
||||
requires Vim 9.0+ (uses vim9script)
|
||||
|
||||
```vim
|
||||
:source adapters/vim/collab.vim
|
||||
:CollabJoin roomname
|
||||
:CollabLeave
|
||||
:CollabStatus
|
||||
```
|
||||
|
||||
the vim plugin spawns adapters/vim/bridge.ts which handles yjs and speaks
|
||||
json lines to vim via channels.
|
||||
|
||||
## protocol
|
||||
|
||||
daemon speaks json over websocket at /ws
|
||||
|
||||
client -> server:
|
||||
{ type: "join", room: "name" }
|
||||
{ type: "leave" }
|
||||
{ type: "update", data: [...] } // yjs update bytes
|
||||
|
||||
server -> client:
|
||||
{ type: "sync", data: [...] } // full yjs state on join
|
||||
{ type: "update", data: [...] } // remote changes
|
||||
{ type: "peers", count: N }
|
||||
|
||||
## key files
|
||||
|
||||
- src/index.ts - websocket server, room routing
|
||||
- src/session.ts - yjs doc per room, peer management
|
||||
- src/protocol.ts - message types
|
||||
- adapters/vim/bridge.ts - bun process vim spawns
|
||||
- adapters/vim/collab.vim - vim9script plugin
|
||||
|
||||
## adding new editor adapters
|
||||
|
||||
each adapter needs:
|
||||
1. hook buffer change events
|
||||
2. send changes to daemon as yjs updates (or use a bridge like vim does)
|
||||
3. receive remote updates and apply to buffer
|
||||
4. optionally show peer cursors
|
||||
|
||||
see NOTES.txt for cell-grid vs text-crdt mode discussion.
|
||||
see docs/ for full research and architecture breakdown.
|
||||
Loading…
Reference in a new issue