Created
January 7, 2026 22:31
-
-
Save cypriss/ec4153a142566267488958cec6f4b7cb to your computer and use it in GitHub Desktop.
Codalotl Initial Context Example
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <current-package> | |
| Module path: "/Users/theuser/code/codalotl" | |
| Package relative path: "internal/agent" | |
| Absolute package path: "/Users/theuser/code/codalotl/internal/agent" | |
| Package import path: "github.com/codalotl/codalotl/internal/agent" | |
| </current-package> | |
| <ls ok="true" cwd="/Users/theuser/code/codalotl/internal/agent"> | |
| $ ls -1p | |
| SPEC.md | |
| agent.go | |
| agent_test.go | |
| event.go | |
| status.go | |
| subagent.go | |
| </ls> | |
| <pkg-map type="non-tests"> | |
| // agent.go: | |
| package agent | |
| import ( | |
| "context" | |
| "crypto/rand" | |
| "encoding/hex" | |
| "errors" | |
| "fmt" | |
| "github.com/codalotl/codalotl/internal/llmmodel" | |
| "github.com/codalotl/codalotl/internal/llmstream" | |
| "sync" | |
| ) | |
| var ( | |
| ErrAlreadyRunning = errors.New("agent: already running") | |
| errMissingCompletion = errors.New("agent: llmstream completed without a final turn") | |
| errNoToolCallsPresent = errors.New("agent: finish reason requested tool use but no tool calls were present") | |
| ) | |
| var newConversation = llmstream.NewConversation | |
| type Agent struct { | |
| sessionID string | |
| agentID string | |
| model llmmodel.ModelID | |
| conv llmstream.StreamingConversation | |
| mu sync.Mutex | |
| status Status | |
| turns []llmstream.Turn | |
| tokenUsage llmstream.TokenUsage | |
| contextUsageTokens int64 | |
| tools map[string]llmstream.Tool | |
| toolList []llmstream.Tool | |
| parent *Agent | |
| depth int | |
| parentOut chan<- Event | |
| currentOut chan<- Event | |
| } | |
| func NewAgent(model llmmodel.ModelID, systemPrompt string, tools []llmstream.Tool) (*Agent, error) | |
| func (a *Agent) SessionID() string | |
| func (a *Agent) Status() Status | |
| func (a *Agent) TokenUsage() llmstream.TokenUsage | |
| func (a *Agent) ContextUsagePercent() int | |
| func (a *Agent) Turns() []llmstream.Turn | |
| func (a *Agent) AddUserTurn(text string) error | |
| func (a *Agent) SendUserMessage(ctx context.Context, message string) <-chan Event | |
| func (a *Agent) run(ctx context.Context, out chan<- Event) | |
| func (a *Agent) sendOnce(ctx context.Context, out chan<- Event) (*llmstream.Turn, map[string]struct{}, error) | |
| func (a *Agent) handleToolUse(ctx context.Context, out chan<- Event, calls []llmstream.ToolCall, seen map[string]struct{}) error | |
| func (a *Agent) emitTerminalEvent(out chan<- Event, err error) | |
| func newTextTurn(role llmstream.Role, text string) llmstream.Turn | |
| func toolResultTurn(results []llmstream.ToolResult) llmstream.Turn | |
| func cloneTurns(src []llmstream.Turn) []llmstream.Turn | |
| func cloneTurn(t llmstream.Turn) llmstream.Turn | |
| func (a *Agent) meta() AgentMeta | |
| func (a *Agent) dispatchEvent(local chan<- Event, ev Event) | |
| func (a *Agent) relayFromChild(ev Event, child chan<- Event) | |
| func (a *Agent) finishRun() | |
| func (a *Agent) addUsage(usage llmstream.TokenUsage) | |
| func (a *Agent) updateContextUsage(usage llmstream.TokenUsage) | |
| func contextTokensFromUsage(usage llmstream.TokenUsage) int64 | |
| func clampNonNegative(v int64) int64 | |
| func percentOfContext(used, capacity int64) int | |
| func buildToolRegistry(tools []llmstream.Tool) (map[string]llmstream.Tool, []llmstream.Tool) | |
| func cloneToolSlice(tools []llmstream.Tool) []llmstream.Tool | |
| func newAgentInstance(model llmmodel.ModelID, systemPrompt string, tools []llmstream.Tool, sessionID, agentID string, parent *Agent, depth int, parentOut chan<- Event) (*Agent, error) | |
| func generateSessionID() (string, error) | |
| // event.go: | |
| package agent | |
| import "github.com/codalotl/codalotl/internal/llmstream" | |
| type EventType string | |
| const ( | |
| EventTypeError EventType = "error" | |
| EventTypeCanceled EventType = "canceled" | |
| EventTypeDoneSuccess EventType = "done_success" | |
| EventTypeAssistantText EventType = "assistant_text" | |
| EventTypeAssistantReasoning EventType = "assistant_reasoning" | |
| EventTypeToolCall EventType = "tool_call" | |
| EventTypeToolComplete EventType = "tool_complete" | |
| EventTypeAssistantTurnComplete EventType = "assistant_turn_complete" | |
| EventTypeWarning EventType = "warning" | |
| EventTypeRetry EventType = "retry" | |
| ) | |
| type Event struct { | |
| Agent AgentMeta | |
| Type EventType | |
| Error error | |
| TextContent llmstream.TextContent | |
| ReasoningContent llmstream.ReasoningContent | |
| Tool string | |
| ToolCall *llmstream.ToolCall | |
| ToolResult *llmstream.ToolResult | |
| Turn *llmstream.Turn | |
| } | |
| type AgentMeta struct { | |
| ID string | |
| Depth int | |
| } | |
| // status.go: | |
| package agent | |
| type Status int | |
| const ( | |
| StatusIdle Status = iota | |
| StatusRunning | |
| ) | |
| // subagent.go: | |
| package agent | |
| import ( | |
| "context" | |
| "github.com/codalotl/codalotl/internal/llmmodel" | |
| "github.com/codalotl/codalotl/internal/llmstream" | |
| "sync" | |
| ) | |
| type AgentCreator interface { | |
| New(model llmmodel.ModelID, systemPrompt string, tools []llmstream.Tool) (*Agent, error) | |
| NewWithDefaultModel(systemPrompt string, tools []llmstream.Tool) (*Agent, error) | |
| } | |
| type SubAgentCreator interface { | |
| AgentCreator | |
| } | |
| func NewAgentCreator() AgentCreator | |
| type defaultAgentCreator struct { | |
| defaultModel llmmodel.ModelID | |
| } | |
| func (c *defaultAgentCreator) New(model llmmodel.ModelID, systemPrompt string, tools []llmstream.Tool) (*Agent, error) | |
| func (c *defaultAgentCreator) NewWithDefaultModel(systemPrompt string, tools []llmstream.Tool) (*Agent, error) | |
| type subAgentFactory struct { | |
| mu sync.Mutex | |
| parent *Agent | |
| parentOut chan<- Event | |
| defaultModel llmmodel.ModelID | |
| tools []llmstream.Tool | |
| closed bool | |
| } | |
| func newSubAgentFactory(parent *Agent) *subAgentFactory | |
| func (f *subAgentFactory) New(model llmmodel.ModelID, systemPrompt string, tools []llmstream.Tool) (*Agent, error) | |
| func (f *subAgentFactory) NewWithDefaultModel(systemPrompt string, tools []llmstream.Tool) (*Agent, error) | |
| func (f *subAgentFactory) create(model llmmodel.ModelID, systemPrompt string, tools []llmstream.Tool) (*Agent, error) | |
| func (f *subAgentFactory) Close() | |
| func withSubAgentContext(ctx context.Context, factory *subAgentFactory, depth int) context.Context | |
| func SubAgentCreatorFromContext(ctx context.Context) SubAgentCreator | |
| func SubAgentDepth(ctx context.Context) int | |
| func AgentToolsFromContext(ctx context.Context) []llmstream.Tool | |
| type toolContextKey struct{} | |
| type toolContextValues struct { | |
| depth int | |
| tools []llmstream.Tool | |
| creator *subAgentFactory | |
| } | |
| var _ AgentCreator = (*defaultAgentCreator)(nil) | |
| var _ AgentCreator = (*subAgentFactory)(nil) | |
| var _ SubAgentCreator = (*subAgentFactory)(nil) | |
| </pkg-map> | |
| <pkg-map type="tests"> | |
| elided; limited to 25 lines for tests | |
| </pkg-map> | |
| <used-by> | |
| github.com/codalotl/codalotl/internal/agentformatter | |
| github.com/codalotl/codalotl/internal/noninteractive | |
| github.com/codalotl/codalotl/internal/subagents/clarifydocs | |
| github.com/codalotl/codalotl/internal/subagents/clarifydocs_test | |
| github.com/codalotl/codalotl/internal/subagents/packagemode | |
| github.com/codalotl/codalotl/internal/subagents/packagemode_test | |
| github.com/codalotl/codalotl/internal/tools/pkgtools | |
| github.com/codalotl/codalotl/internal/tui | |
| </used-by> | |
| <diagnostics-status ok="true" message="build succeeded"> | |
| $ go build -o /dev/null ./internal/agent | |
| </diagnostics-status> | |
| <test-status ok="true"> | |
| $ go test ./internal/agent | |
| ok github.com/codalotl/codalotl/internal/agent (cached) | |
| </test-status> | |
| <lint-status ok="true" message="no issues found"> | |
| $ gofmt -l internal/agent | |
| </lint-status> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment