Contributing to Sketch

Running tests

  • go test ./...
  • cd webui && npm run test
    • If you are an LLM, instead run cd webui && CI=1 npm run test

Synchronizing Go structs and TypeScript types

Run npm run gentypes, which uses cmd/go2ts/go2ts.go under the covers and which has a list of types to translate.

Dealing with tests that have HTTP Record sessions

A few tests record/replay calls to LLMs. As necessary (e.g., if changing the system prompt or tool definitions), rebuild the test data by running update_tests.sh in the relevant directory.

Debugging JS Classes

Something like "document.querySelectorAll('sketch-app-shell')[0].dataManager.messages.map(x => x.idx)" in the browser JS console works to pull out the custom components implementing the web ui.

Recursively running Sketch

If you are editing Sketch from within Sketch, you can use the following to give Sketch a place to store its skaband client key across sessions, allowing the agent to iterate on itself.

# Outside
mkdir -p ~/.inside-cache/webui
go run ./cmd/sketch -docker-args "-v $HOME/.inside-cache:/root/.cache/sketch"
# Inside
go run ./cmd/sketch -unsafe