Documentation
¶
Index ¶
- Constants
- Variables
- func RegisterInterrupt(factory func() Interrupt)
- func ResolveToolTitle(displayName, toolName, argsJSON string) string
- func ToolsAsJson(tools []*Tool) string
- func TypeToJSONSchema(v any) (map[string]any, error)
- func UnsupportedMIMEs(s InferenceStrategy, mimes []string) []string
- func WrapStopReason(kind, cause error) error
- type AbsorbResult
- type AgentHarness
- func (a *AgentHarness) AskUserQuestion(toolCallID string) string
- func (a *AgentHarness) ClearSearchNamespace()
- func (a *AgentHarness) Close()
- func (a *AgentHarness) FinalizeCancelledWork(ctx context.Context)
- func (a *AgentHarness) HasOpenToolWork() bool
- func (a *AgentHarness) Messages() []*Message
- func (a *AgentHarness) ReturnFromInterrupt(ctx context.Context, finishedInterrupts map[string][]byte) (<-chan StreamEvent, error)
- func (a *AgentHarness) Run(ctx context.Context, prompt string) (<-chan StreamEvent, error)
- func (a *AgentHarness) RunMessage(ctx context.Context, user *Message) (<-chan StreamEvent, error)
- func (a *AgentHarness) SearchNamespace() (uuid.UUID, bool)
- func (a *AgentHarness) SessionID() string
- func (a *AgentHarness) SetSearchNamespace(id uuid.UUID)
- type AgentOptions
- type AgentWatchDog
- type Annotation
- type BuiltinResult
- type Config
- type ContentPart
- type ContextManager
- type ContextPolicy
- type DefaultModelTasks
- func (t *DefaultModelTasks) Absorb(ctx context.Context, msg *Message, tools []*Tool, systemPrompt string) (AbsorbResult, error)
- func (t *DefaultModelTasks) Handoff(ctx context.Context, plan []Todo, planDoc string, tools []*Tool, ...) error
- func (t *DefaultModelTasks) Turn(ctx context.Context, tools []*Tool, systemPrompt string) (<-chan LLMResponseChunk, error)
- type FileData
- type HarnessRuntime
- type ImageURL
- type InferenceStrategy
- type Interrupt
- type ItemStatus
- type LLMResponseChunk
- type Message
- type MessageRole
- type ModelContextManager
- func (m *ModelContextManager) Add(msg *Message)
- func (m *ModelContextManager) InstallPlanDocument(planRaw string) error
- func (m *ModelContextManager) Messages() []*Message
- func (m *ModelContextManager) Replace(window []*Message)
- func (m *ModelContextManager) Restore(window []*Message)
- func (m *ModelContextManager) Snapshot() []*Message
- type ModelTasks
- type PayloadValidator
- type PermissionOption
- type ProviderStatus
- type StreamEvent
- type StreamEventType
- type SubAgent
- type Todo
- type Tool
- type ToolCall
- type ToolCallFunc
- type ToolConfig
- type ToolHandlerFunc
- type ToolInterceptor
- type ToolInvocation
- type ToolNamespace
- type ToolPermission
- type ToolPermissionInterrupt
- type ToolResultDisposition
- type ToolResultEffect
- type ToolResultHook
- type ToolResultObservation
- type URLAnnotation
- type UserChoice
- type UserSelectionInterrupt
Constants ¶
const ( RoleUser MessageRole = "user" RoleAssistant MessageRole = "assistant" RoleReasoning MessageRole = "reasoning" RoleSystem MessageRole = "system" RoleDeveloper MessageRole = "developer" RoleTool MessageRole = "tool" StatusInProgress ItemStatus = "in_progress" StatusCompleted ItemStatus = "completed" StatusIncomplete ItemStatus = "incomplete" ContentTypeOutputText = "output_text" ContentTypeInputText = "input_text" ContentTypeInputImage = "input_image" ContentTypeInputFile = "input_file" ContentTypeRefusal = "refusal" StreamEventMessage StreamEventType = "message" StreamEventReasoning StreamEventType = "reasoning" StreamEventFunctionCall StreamEventType = "function_call" StreamEventToolResult StreamEventType = "tool_result" StreamEventComplete StreamEventType = "complete" StreamEventError StreamEventType = "error" StreamEventInterrupt StreamEventType = "yield" )
const ( PermissionAllowOnce = interrupt.PermissionAllowOnce PermissionAllowAlways = interrupt.PermissionAllowAlways PermissionRejectOnce = interrupt.PermissionRejectOnce PermissionRejectAlways = interrupt.PermissionRejectAlways )
const CancelledToolResultContent = "cancelled: user interrupted the agent"
CancelledToolResultContent is written into the context window for tool calls aborted by session cancel or mid-turn steer (user interrupt).
Variables ¶
var ( ErrWorkerNotFound = errors.New("worker not found") ErrWorkerNoOutput = errors.New("worker produced no output") ErrWorkerIncomplete = errors.New("worker finished without completing") ErrWorkerNoModel = errors.New("worker has no model") ErrEmptyWorkerTask = errors.New("worker task is empty") ErrWorkerParkMissing = errors.New("parked worker state is missing") )
Sentinel errors for the subagent orchestrator.
var ( ErrModelRefused = errors.New("model refused") ErrMaxTokens = errors.New("max tokens reached") ErrMaxTurnRequests = errors.New("max turn model requests exceeded") ErrApiKeyNotSet = errors.New("api key not set") ErrModelNotSet = errors.New("model not set") ErrUnknownModel = errors.New("unknown model") ErrToolNotFound = errors.New("tool not found") ErrToolTimeout = errors.New("tool timed out") ErrToolPermissionDenied = errors.New("tool permission denied") // ErrModelAfterTools is a model failure after a successful tool batch. // Tools completed; the next model request failed. ErrModelAfterTools = errors.New("model request failed after tools completed") )
var ( ErrInterruptNotFound = interrupt.ErrInterruptNotFound ErrInvalidPayload = interrupt.ErrInvalidPayload DefaultPermissionOptions = interrupt.DefaultPermissionOptions )
var ToolExecuteAccess = mapset.NewSet[ToolPermission](ExecutePermission)
var ToolFullAccess = mapset.NewSet[ToolPermission](ReadPermission, WritePermission, ExecutePermission)
var ToolReadAccess = mapset.NewSet[ToolPermission](ReadPermission)
var ToolReadExecuteAccess = mapset.NewSet[ToolPermission](ReadPermission, ExecutePermission)
var ToolReadWriteAccess = mapset.NewSet[ToolPermission](ReadPermission, WritePermission)
var ToolWriteAccess = mapset.NewSet[ToolPermission](WritePermission)
Functions ¶
func RegisterInterrupt ¶
func RegisterInterrupt(factory func() Interrupt)
RegisterInterrupt registers a custom interrupt factory for session rehydrate.
func ResolveToolTitle ¶
ResolveToolTitle fills {param} in DisplayName from top-level string args. Empty displayName → toolName. Missing/non-string args → empty slot.
func ToolsAsJson ¶
ToolsAsJson serializes tool definitions for model requests. An empty catalog is "[]". Namespace-qualified names use "namespace.name".
func TypeToJSONSchema ¶
TypeToJSONSchema builds a JSON Schema for v. Prefer NewTool typed handlers for tools; this is mainly for structured model output.
func UnsupportedMIMEs ¶
func UnsupportedMIMEs(s InferenceStrategy, mimes []string) []string
UnsupportedMIMEs returns mimes for which s.SupportsMIME is false (first-seen order).
func WrapStopReason ¶
WrapStopReason attaches cause under a stop-reason sentinel for errors.Is. Returns kind when cause is nil, or cause when kind is nil.
Types ¶
type AbsorbResult ¶
type AbsorbResult struct {
// SummaryChunks are compress summaries to stream when StreamFitSummary is true.
SummaryChunks []LLMResponseChunk
}
AbsorbResult is returned by Absorb after incorporating a message.
type AgentHarness ¶
type AgentHarness struct {
// contains filtered or unexported fields
}
AgentHarness is the product agent. Create with NewAgent or NewAgentFromSession. Fields are unexported.
func NewAgent ¶
func NewAgent(ctx context.Context, opts AgentOptions) *AgentHarness
NewAgent builds a session-scoped harness. Turn-scoped Runtime is created in Run.
func NewAgentFromSession ¶
func NewAgentFromSession(ctx context.Context, sessionId string, opts AgentOptions) (*AgentHarness, error)
NewAgentFromSession loads a harness from a session checkpoint. opts.Store is required. Uses the same AgentOptions shape as NewAgent.
func (*AgentHarness) AskUserQuestion ¶
func (a *AgentHarness) AskUserQuestion(toolCallID string) string
AskUserQuestion returns the ask_user_choice question for toolCallID, or empty. Used by ACP elicitation. Reads session state (survives the turn).
func (*AgentHarness) ClearSearchNamespace ¶
func (a *AgentHarness) ClearSearchNamespace()
ClearSearchNamespace clears retrieval isolation for knowledge tools.
func (*AgentHarness) Close ¶
func (a *AgentHarness) Close()
Close releases harness resources (for example MCP clients). Call after the Run events channel is drained.
func (*AgentHarness) FinalizeCancelledWork ¶
func (a *AgentHarness) FinalizeCancelledWork(ctx context.Context)
FinalizeCancelledWork pairs open tools as cancelled into the window only, clears interrupt park, checkpoints. Parked/steer path (no live turn stream).
func (*AgentHarness) HasOpenToolWork ¶
func (a *AgentHarness) HasOpenToolWork() bool
HasOpenToolWork reports pending tool calls, session interrupts, or unpaired assistant tool_calls in the window (parked / mid-cancel state).
func (*AgentHarness) Messages ¶
func (a *AgentHarness) Messages() []*Message
Messages returns a snapshot of the conversation window. Observation only; do not use this to rehydrate or rewrite the window.
func (*AgentHarness) ReturnFromInterrupt ¶
func (a *AgentHarness) ReturnFromInterrupt(ctx context.Context, finishedInterrupts map[string][]byte) (<-chan StreamEvent, error)
func (*AgentHarness) Run ¶
func (a *AgentHarness) Run(ctx context.Context, prompt string) (<-chan StreamEvent, error)
Run starts a turn with a plain-text user message (SSE and simple hosts).
func (*AgentHarness) RunMessage ¶
func (a *AgentHarness) RunMessage(ctx context.Context, user *Message) (<-chan StreamEvent, error)
RunMessage starts a turn with a full user Message (Content and optional ContentParts).
func (*AgentHarness) SearchNamespace ¶
func (a *AgentHarness) SearchNamespace() (uuid.UUID, bool)
SearchNamespace returns the host-set search namespace, if any.
func (*AgentHarness) SessionID ¶
func (a *AgentHarness) SessionID() string
SessionID returns the durable session id, or empty if unbound. Set with AgentOptions.SessionID at construction.
func (*AgentHarness) SetSearchNamespace ¶
func (a *AgentHarness) SetSearchNamespace(id uuid.UUID)
SetSearchNamespace sets retrieval isolation for knowledge tools.
type AgentOptions ¶
type AgentOptions struct {
Config Config
// SessionID is the durable thread id. Set at construction; do not change mid-turn.
SessionID string
Model InferenceStrategy
Store stores.BaseStore
WatchDog AgentWatchDog
Tools []*Tool
MCPConfigs []mcp.MCPConfig
SubAgents []*SubAgent
// ContextManager is the conversation window. Nil uses NewModelContextManager.
ContextManager ContextManager
// ModelTasks runs Turn, Absorb, and Handoff. Nil uses DefaultModelTasks.
ModelTasks ModelTasks
// ContextPolicy sets pressure/compress ratios when non-zero fields are set.
ContextPolicy ContextPolicy
// ToolInterceptors wrap each tool call (outermost first).
// Nil: built-in planning lock and permission gate.
// Non-nil: replaces that chain (empty slice disables interceptors).
ToolInterceptors []ToolInterceptor
// ToolResultHooks map tool name → post-success window effects for host tools.
// Plan builtins use BuiltinResult instead.
ToolResultHooks map[string]ToolResultHook
// SkillsLoader loads skills. Nil uses DirectoryLoader with Config.SkillDirectories.
SkillsLoader skills.SkillLoader
// ExaAPIKey enables web_search and web_fetch. Empty falls back to EXA_API_KEY.
// When both are empty, those tools are not registered.
ExaAPIKey string
// Brain enables knowledge builtins when non-nil. Workers inherit the same engine.
// Configure Store, optional QueryEmbedder, and optional GraphReader/GraphWriter on the Engine
// before NewAgent (e.g. brain.WithGraph(helixgraph.New(...))). The harness does
// not construct graph backends.
Brain *brain.Engine
// BrainWriteKinds maps save_discovery / save_fact / save_memory to host kind names.
// Empty fields skip that tool. Kinds should be registered via brain.ApplyKinds / WithKinds.
// Ignored when Brain is nil.
BrainWriteKinds brain.WriteKinds
// SearchNamespace isolates brain retrieval when set (session-owned, checkpointed).
// Nil leaves a loaded session value unchanged. Workers get a copy at spawn.
SearchNamespace *uuid.UUID
}
AgentOptions configures NewAgent and NewAgentFromSession.
Usual fields: Config, Model, Store, Tools, MCPConfigs, SubAgents, SessionID. ContextManager, ModelTasks, and ContextPolicy override the built-in ACM path; leave them nil unless you replace that path.
type AgentWatchDog ¶
type AgentWatchDog interface {
RecordThinking(*Message) error
RecordOutput(*Message) error
RecordError(error) error
RecordTokens(int, int) error
RecordToolCalls(*Message) error
RecordToolResult(*Message) error
}
AgentWatchDog records optional turn telemetry (thinking, tools, tokens).
type Annotation ¶
type Annotation = streaming.Annotation
type BuiltinResult ¶
type BuiltinResult struct {
Output string
// Effect is merged for the batch and applied once at batch end.
Effect ToolResultEffect
// SuppressWindowMessage omits the tool Message from the window.
// The client still receives StreamEventToolResult.
SuppressWindowMessage bool
}
BuiltinResult is a tool success that can queue ACM window effects. Output is the model-visible tool string. Plan tools use this type.
type Config ¶
type Config struct {
MaxWindowSize int
SystemPrompt string
SkillDirectories []string
// MaxTurnRequests limits Model.Invoke calls per Run. 0 = unlimited.
// Exceeding the limit ends the turn with ErrMaxTurnRequests.
MaxTurnRequests int
}
Config is harness limits and prompt settings.
type ContentPart ¶
type ContentPart = streaming.ContentPart
type ContextManager ¶
type ContextManager interface {
// Messages returns a retainable snapshot of the live window.
Messages() []*Message
// Snapshot is for checkpointing (shallow copy of message pointers).
Snapshot() []*Message
// Restore copies window into storage (caller keeps its slice).
Restore(window []*Message)
// Replace takes ownership of window; do not reuse the slice after.
Replace(window []*Message)
// Add appends without pressure fitting (streamed assistant/reasoning).
Add(msg *Message)
// InstallPlanDocument sets the window to [user, plan document].
InstallPlanDocument(planRaw string) error
}
ContextManager owns the conversation window structure only (no inference). ModelTasks does model work and applies results with Replace or InstallPlanDocument. Snapshot must be safe while another path Absorbs or Replaces after resume.
type ContextPolicy ¶
type ContextPolicy struct {
// PressureRatio is the max-size fraction that triggers compress (for example 0.85).
PressureRatio float64
// CompressFraction seeds how much of the window to summarize.
CompressFraction float64
// StreamFitSummary streams compress summary chunks to the client when true.
StreamFitSummary bool
}
ContextPolicy controls window compress under pressure (used by ModelTasks.Absorb).
func DefaultContextPolicy ¶
func DefaultContextPolicy() ContextPolicy
DefaultContextPolicy is the product default pressure and compress settings.
type DefaultModelTasks ¶
type DefaultModelTasks struct {
// contains filtered or unexported fields
}
DefaultModelTasks is the product ModelTasks implementation.
func NewDefaultModelTasks ¶
func NewDefaultModelTasks(model InferenceStrategy, ctx ContextManager, policy ContextPolicy, maxSize int) *DefaultModelTasks
NewDefaultModelTasks builds DefaultModelTasks for model, context, and policy.
func (*DefaultModelTasks) Absorb ¶
func (t *DefaultModelTasks) Absorb(ctx context.Context, msg *Message, tools []*Tool, systemPrompt string) (AbsorbResult, error)
func (*DefaultModelTasks) Turn ¶
func (t *DefaultModelTasks) Turn(ctx context.Context, tools []*Tool, systemPrompt string) (<-chan LLMResponseChunk, error)
type HarnessRuntime ¶
HarnessRuntime is the tool-facing API for handlers and interceptors: EmitUpdate, StateGet, StateSet, StateDelete, RaiseInterrupt, Store, and CurrentToolCallID. Turn lifecycle helpers live in internal/session.
type InferenceStrategy ¶
type InferenceStrategy interface {
WithApiKey(string) InferenceStrategy
WithModel(string) InferenceStrategy
WithURL(string) InferenceStrategy
WithReasoningLevel(string) InferenceStrategy
WithStructuredOutput(any) InferenceStrategy
SetSystemPrompt(string)
Invoke(context.Context, []*Message, []*Tool) (chan LLMResponseChunk, error)
CountTokens(context.Context, []*Message, []*Tool) (int, error)
CompressContextWindow() error
MaxContextWindow() (int, error)
// SupportsMIME reports whether the currently selected model accepts the
// given MIME type as user input. Empty and text/* are always true.
// Probe representatives for ads (e.g. image/png); do not enumerate all types.
SupportsMIME(mimeType string) bool
}
InferenceStrategy is the model provider interface used by the harness.
type ItemStatus ¶
type ItemStatus = streaming.ItemStatus
type LLMResponseChunk ¶
type LLMResponseChunk = streaming.LLMResponseChunk
type MessageRole ¶
type MessageRole = streaming.MessageRole
type ModelContextManager ¶
type ModelContextManager struct {
// contains filtered or unexported fields
}
ModelContextManager is the default ContextManager (name is historical).
func NewModelContextManager ¶
func NewModelContextManager() *ModelContextManager
NewModelContextManager returns an empty ContextManager.
func (*ModelContextManager) Add ¶
func (m *ModelContextManager) Add(msg *Message)
func (*ModelContextManager) InstallPlanDocument ¶
func (m *ModelContextManager) InstallPlanDocument(planRaw string) error
func (*ModelContextManager) Messages ¶
func (m *ModelContextManager) Messages() []*Message
func (*ModelContextManager) Replace ¶
func (m *ModelContextManager) Replace(window []*Message)
func (*ModelContextManager) Restore ¶
func (m *ModelContextManager) Restore(window []*Message)
func (*ModelContextManager) Snapshot ¶
func (m *ModelContextManager) Snapshot() []*Message
type ModelTasks ¶
type ModelTasks interface {
// Turn streams the next model step for the current window and tools.
Turn(ctx context.Context, tools []*Tool, systemPrompt string) (<-chan LLMResponseChunk, error)
// Absorb adds msg under window pressure (may summarize).
Absorb(ctx context.Context, msg *Message, tools []*Tool, systemPrompt string) (AbsorbResult, error)
// Handoff rebuilds context after complete_todo or plan edit.
Handoff(ctx context.Context, plan []Todo, planDoc string, tools []*Tool, systemPrompt string) error
}
ModelTasks is Turn, Absorb, and Handoff against InferenceStrategy and ContextManager.
type PayloadValidator ¶
type PayloadValidator = interrupt.PayloadValidator
Interrupt types re-exported for tool authors.
type PermissionOption ¶
type PermissionOption = interrupt.PermissionOption
Interrupt types re-exported for tool authors.
type ProviderStatus ¶
ProviderStatus supplies HTTP status and error code from a provider error. Optional on InferenceStrategy errors for model-span attributes.
type StreamEvent ¶
type StreamEvent = streaming.StreamEvent
type StreamEventType ¶
type StreamEventType = streaming.StreamEventType
type SubAgent ¶
type SubAgent struct {
Tools []*Tool
Instructions string
Model InferenceStrategy
WorkerName string
Description string
// SubAgents are nested workers available to this worker when it runs.
SubAgents []*SubAgent
}
SubAgent describes a specialized worker that a harness can spawn via the spawn_worker tool. Specs may nest via SubAgents so interrupt propagation and orchestration stay self-similar at any depth.
type Tool ¶
type Tool struct {
DisplayName string
Name string
Description string
Namespace string
Category streaming.ToolCategory
Access mapset.Set[ToolPermission]
// Timeout is an optional per-invocation deadline. Zero means none.
Timeout time.Duration
// PermissionRequired asks the user to approve the tool before it runs.
PermissionRequired bool
// contains filtered or unexported fields
}
func NewTool ¶
func NewTool(cfg ToolConfig) *Tool
type ToolCallFunc ¶
type ToolCallFunc func(ctx context.Context, inv ToolInvocation) (string, error)
ToolCallFunc is the next interceptor step or the final tool invoke.
type ToolConfig ¶
type ToolHandlerFunc ¶
type ToolInterceptor ¶
type ToolInterceptor func(ctx context.Context, inv ToolInvocation, next ToolCallFunc) (string, error)
ToolInterceptor wraps a tool call. Call next to continue, or return early to short-circuit. Nil ToolInterceptors uses the built-in planning lock and permission gate; a non-nil slice replaces that chain.
type ToolInvocation ¶
type ToolInvocation struct {
Tool *Tool
ArgsJSON string
Runtime HarnessRuntime
}
ToolInvocation is one tool call in the interceptor chain.
type ToolNamespace ¶
type ToolPermission ¶
type ToolPermission int
const ( ReadPermission ToolPermission = iota WritePermission ExecutePermission )
type ToolPermissionInterrupt ¶
type ToolPermissionInterrupt = interrupt.ToolPermissionInterrupt
Interrupt types re-exported for tool authors.
type ToolResultDisposition ¶
type ToolResultDisposition struct {
Effect ToolResultEffect
SuppressWindowMessage bool
}
ToolResultDisposition is the window effect from a BuiltinResult or ToolResultHook.
type ToolResultEffect ¶
type ToolResultEffect int
ToolResultEffect is applied once after a successful tool batch (no open interrupts).
const ( EffectNone ToolResultEffect = iota // EffectInstallPlanDocument sets the window to [user, plan document]. EffectInstallPlanDocument // EffectHandoff rebuilds the window for the next open todos. EffectHandoff )
type ToolResultHook ¶
type ToolResultHook func(ctx context.Context, obs ToolResultObservation) ToolResultDisposition
ToolResultHook runs after a successful host tool and before the tool result is emitted. Effects apply at batch end. Plan builtins use BuiltinResult instead.
type ToolResultObservation ¶
type ToolResultObservation struct {
Name string
ArgsJSON string
Output string
Runtime HarnessRuntime
}
ToolResultObservation is a successful tool result seen by a ToolResultHook.
type URLAnnotation ¶
type URLAnnotation = streaming.URLAnnotation
type UserChoice ¶
type UserChoice = interrupt.UserChoice
Interrupt types re-exported for tool authors.
type UserSelectionInterrupt ¶
type UserSelectionInterrupt = interrupt.UserSelectionInterrupt
Interrupt types re-exported for tool authors.
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
Package brain is Tacklr's knowledge-base retrieval engine.
|
Package brain is Tacklr's knowledge-base retrieval engine. |
|
helixgraph
Package helixgraph adapts HelixDB to brain.GraphReader / GraphWriter / searchers.
|
Package helixgraph adapts HelixDB to brain.GraphReader / GraphWriter / searchers. |
|
cmd
|
|
|
agent-bench
command
Command agent-bench drives a real tacklr agent through multi-turn scenarios aligned with industry agent/memory/tool evaluation shapes.
|
Command agent-bench drives a real tacklr agent through multi-turn scenarios aligned with industry agent/memory/tool evaluation shapes. |
|
testserver
command
Command testserver is a local ACP harness for exercising Tacklr’s built-in agent tooling (plan/todos, ask_user_choice, web_search/web_fetch when EXA_API_KEY is set, skills when configured).
|
Command testserver is a local ACP harness for exercising Tacklr’s built-in agent tooling (plan/todos, ask_user_choice, web_search/web_fetch when EXA_API_KEY is set, skills when configured). |
|
internal
|
|
|
agentbench
Package agentbench runs multi-turn harness benchmarks aligned with industry agent/memory/tool evaluation shapes (LoCoMo-style memory, multi-hop QA, τ-bench-style domain end state, plan+interrupt, web-augmented).
|
Package agentbench runs multi-turn harness benchmarks aligned with industry agent/memory/tool evaluation shapes (LoCoMo-style memory, multi-hop QA, τ-bench-style domain end state, plan+interrupt, web-augmented). |
|
exa
Package exa is a minimal REST client for Exa Search (https://api.exa.ai).
|
Package exa is a minimal REST client for Exa Search (https://api.exa.ai). |
|
testkit
Package testkit provides shared test doubles for harness and server integration tests.
|
Package testkit provides shared test doubles for harness and server integration tests. |
|
Package skills discovers and parses application-owned SKILL.md files.
|
Package skills discovers and parses application-owned SKILL.md files. |
|
Package streaming holds protocol-agnostic conversation and stream types shared by inference, the agent harness, and server protocols (ACP, SSE, and future A2A).
|
Package streaming holds protocol-agnostic conversation and stream types shared by inference, the agent harness, and server protocols (ACP, SSE, and future A2A). |
|
Package telemetry configures OpenTelemetry for Tacklr hosts and process tools.
|
Package telemetry configures OpenTelemetry for Tacklr hosts and process tools. |