* feat(io): add streaming API to Medium interface and optimize agentic context - Added ReadStream and WriteStream to io.Medium interface. - Implemented streaming methods in local and mock mediums. - Updated pkg/agentic/context.go to use streaming I/O with LimitReader. - Added 5000-byte truncation limit for all AI context file reads to reduce memory usage. - Documented when to use streaming vs full-file APIs in io.Medium. * feat(io): optimize streaming API and fix PR feedback - Fixed resource leak in agentic context by using defer for closing file streams. - Improved truncation logic in agentic context to handle multibyte characters correctly by checking byte length before string conversion. - Added comprehensive documentation to ReadStream and WriteStream in local medium. - Added unit tests for ReadStream and WriteStream in local medium. - Applied formatting and fixed auto-merge CI configuration. * feat(io): add streaming API and fix CI failures (syntax fix) - Introduced ReadStream and WriteStream to io.Medium interface. - Implemented streaming methods in local and mock mediums. - Optimized agentic context with streaming reads and truncation logic. - Fixed syntax error in local client tests by overwriting the file. - Fixed auto-merge CI by adding checkout and repository context. - Applied formatting fixes.
3 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Overview
Core is a Web3 Framework written in Go using Wails v3 to replace Electron for desktop applications. It provides a dependency injection framework for managing services with lifecycle support.
Build & Development Commands
This project uses Task for automation. Key commands:
# Run all tests
task test
# Generate test coverage
task cov
task cov-view # Opens coverage HTML report
# GUI application (Wails)
task gui:dev # Development mode with hot-reload
task gui:build # Production build
# CLI application
task cli:build # Build CLI
task cli:run # Build and run CLI
# Code review
task review # Submit for CodeRabbit review
task check # Run mod tidy + tests + review
Run a single test: go test -run TestName ./...
Architecture
Core Framework (core.go, interfaces.go)
The Core struct is the central application container managing:
- Services: Named service registry with type-safe retrieval via
ServiceFor[T]()andMustServiceFor[T]() - Actions/IPC: Message-passing system where services communicate via
ACTION(msg Message)and register handlers viaRegisterAction() - Lifecycle: Services implementing
Startable(OnStartup) and/orStoppable(OnShutdown) interfaces are automatically called during app lifecycle
Creating a Core instance:
core, err := core.New(
core.WithService(myServiceFactory),
core.WithAssets(assets),
core.WithServiceLock(), // Prevents late service registration
)
Service Registration Pattern
Services are registered via factory functions that receive the Core instance:
func NewMyService(c *core.Core) (any, error) {
return &MyService{runtime: core.NewServiceRuntime(c, opts)}, nil
}
core.New(core.WithService(NewMyService))
WithService: Auto-discovers service name from package path, registers IPC handler if service hasHandleIPCEventsmethodWithName: Explicitly names a service
Runtime (runtime_pkg.go)
Runtime is the Wails service wrapper that bootstraps the Core and its services. Use NewWithFactories() for custom service registration or NewRuntime() for basic setup.
ServiceRuntime Generic Helper (runtime.go)
Embed ServiceRuntime[T] in services to get access to Core and typed options:
type MyService struct {
*core.ServiceRuntime[MyServiceOptions]
}
Error Handling (e.go)
Use the E() helper for contextual errors:
return core.E("service.Method", "what failed", underlyingErr)
Test Naming Convention
Tests use _Good, _Bad, _Ugly suffix pattern:
_Good: Happy path tests_Bad: Expected error conditions_Ugly: Panic/edge cases
Go Workspace
Uses Go 1.25 workspaces. The workspace includes:
- Root module (Core framework)
cmd/core-gui(Wails GUI application)cmd/examples/*(Example applications)
After adding modules: go work sync