agents.md
This commit is contained in:
parent
383c73ba92
commit
fd9df3ffa4
66
AGENTS.md
Normal file
66
AGENTS.md
Normal file
@ -0,0 +1,66 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Project Overview
|
||||
|
||||
**kitten-ipc** is a cross-language IPC (inter-process communication) framework. It consists of two parts:
|
||||
|
||||
1. **`kitcom`** — a code generator CLI that parses annotated source files and generates IPC stub code for the other language
|
||||
2. **`lib/`** — runtime IPC libraries (Go and TypeScript) that handle the actual communication over Unix domain sockets using newline-delimited JSON messages
|
||||
|
||||
The workflow: annotate structs/classes with `kittenipc:api` (Go) or `@kittenipc api` (TS), run `kitcom` to generate remote API stubs, then use the runtime library (`ParentIPC`/`ChildIPC`) to make cross-process calls.
|
||||
|
||||
## Build & Test Commands
|
||||
|
||||
```bash
|
||||
# Go workspace covers: kitcom, lib/golang, example/golang
|
||||
go build ./kitcom # build the code generator
|
||||
go test ./lib/golang/... # run runtime library tests
|
||||
go test ./kitcom/... # run kitcom tests
|
||||
go test ./... # run all tests
|
||||
|
||||
# Run a single test
|
||||
go test ./lib/golang/... -run TestName
|
||||
|
||||
# Code generation (from example/)
|
||||
cd example && make ipc
|
||||
|
||||
# kitcom usage
|
||||
kitcom -src path/to/source -dest path/to/output [-pkg packageName]
|
||||
# -pkg is required when generating Go output
|
||||
```
|
||||
|
||||
## Architecture
|
||||
|
||||
### Code Generator (`kitcom/`)
|
||||
|
||||
- `main.go` — CLI entry point; selects parser/generator by file extension
|
||||
- `internal/api/` — language-neutral API model (`Api` → `Endpoint` → `Method` → `Val` with types: int, string, bool, blob)
|
||||
- `internal/golang/` — Go parser (`goparser.go`) reads `// kittenipc:api` annotations; Go generator (`gogen.go`) emits remote API stubs
|
||||
- `internal/ts/` — TypeScript parser (`tsparser.go`) reads `@kittenipc api` JSDoc annotations; TS generator (`tsgen.go`) emits stubs
|
||||
- `internal/tsgo/` — vendored subset of a Go-based TypeScript parser (scanner, AST, etc.)
|
||||
- `internal/common/` — shared parser/writer utilities
|
||||
|
||||
### Runtime Library (`lib/`)
|
||||
|
||||
**Go** (`lib/golang/`):
|
||||
- `parent.go` — `ParentIPC`: spawns a child process, listens on a Unix socket, accepts connection
|
||||
- `child.go` — `ChildIPC`: connects to parent's socket (path passed via `--ipc-socket` arg)
|
||||
- `common.go` — shared IPC logic: message send/receive, method dispatch via reflection, call tracking
|
||||
- `serialize.go` — type serialization/deserialization (handles blob as base64)
|
||||
- `protocol.go` — message format: `Message{Type, Id, Method, Args, Result, Error}`
|
||||
|
||||
**TypeScript** (`lib/ts/`): mirror of the Go runtime
|
||||
|
||||
### IPC Protocol
|
||||
|
||||
- Transport: Unix domain socket, newline-delimited JSON
|
||||
- Two message types: `MsgCall` (1) and `MsgResponse` (2)
|
||||
- Methods are addressed as `EndpointName.MethodName`
|
||||
- Parent creates socket → starts child process → child connects back
|
||||
- Bidirectional: both sides can call methods on the other
|
||||
|
||||
## Go Workspace
|
||||
|
||||
Uses `go.work` with three modules: `kitcom`, `lib/golang`, `example/golang`.
|
||||
Loading…
x
Reference in New Issue
Block a user