CRUSH.md - Fantasy AI SDK
Build/Test/Lint Commands
- Build:
go build ./... - Test all:
task testorgo test ./... -count=1 - Test single:
go test -run TestName ./package -v - Test with args:
task test -- -v -run TestName - Lint:
task lintorgolangci-lint run - Format:
task fmtorgofmt -s -w . - Modernize:
task modernizeormodernize -fix ./...
Code Style Guidelines
- Package naming: lowercase, single word (ai, openai, anthropic, google)
- Imports: standard library first, then third-party, then local packages
- Error handling: Use custom error types with structured fields, wrap with context
- Types: Use type aliases for function signatures (
type Option = func(*options)) - Naming: CamelCase for exported, camelCase for unexported
- Constants: Use const blocks with descriptive names (ProviderName, DefaultURL)
- Structs: Embed anonymous structs for composition (APICallError embeds *AIError)
- Functions: Return error as last parameter, use context.Context as first param
- Testing: Use testify/assert, table-driven tests, recorder pattern for HTTP mocking
- Comments: Godoc format for exported functions, explain complex logic inline
- JSON: Use struct tags for marshaling, handle empty values gracefully
Project Structure
/ai- Core AI abstractions and agent logic/openai,/anthropic,/google- Provider implementations/providertests- Cross-provider integration tests with VCR recordings/examples- Usage examples for different patterns