ToolResultStorage class

Manages tool result persistence and content replacement budgets.

Inheritance

Constructors

ToolResultStorage({required String projectDir, required String sessionId, String? originalCwd})

Properties

hashCode int
The hash code for this object.
no setterinherited
initialized bool
Checks whether the controller has already been initialized.
no setterinherited
isClosed bool
Checks whether the controller has already been closed.
no setterinherited
isDisposed bool
no setterinherited
listenersLength int
no setterinherited
persistThresholdOverrides → RxMap<String, int>
Persistence threshold overrides keyed by tool name.
final
projectDir String
final
runtimeType Type
A representation of the runtime type of the object.
no setterinherited
sessionId String
final

Methods

addListener(SintStateUpdate listener) → Disposer
Register a closure to be called when the object notifies its listeners.
inherited
addListenerId(Object? key, SintStateUpdate listener) → Disposer
inherited
applyToolResultBudget(List<Message> messages, ContentReplacementState? state, {void writeToTranscript(List<ContentReplacementRecord>)?, Set<String>? skipToolNames}) Future<List<Message>>
Query-loop integration point for the aggregate budget.
containsListener(SintStateUpdate listener) bool
inherited
debounce<T>(RxInterface<T> rx, void callback(T), {Duration duration = const Duration(milliseconds: 400)}) → void
Calls callback after rx stops changing for duration. Useful for search-as-you-type, form validation, etc.
inherited
dispose() → void
inherited
enforceToolResultBudget(List<Message> messages, ContentReplacementState state, {Set<String> skipToolNames = const {}}) Future<({List<Message> messages, List<ContentReplacementRecord> newlyReplaced})>
Enforce the per-message budget on aggregate tool result size.
ensureToolResultsDir() Future<void>
Ensure the session-specific tool results directory exists.
ever<T>(RxInterface<T> rx, void callback(T)) → void
Calls callback every time rx changes. Auto-cancels on controller disposal.
inherited
getPerMessageBudgetLimit() int
Resolve the per-message aggregate budget limit.
getPersistenceThreshold(String toolName, int declaredMaxResultSizeChars) int
Resolve the effective persistence threshold for a tool.
getSessionDir() String
Get the session directory.
getToolResultPath(String id, {required bool isJson}) String
Get the filepath where a tool result would be persisted.
getToolResultsDir() String
Get the tool results directory for this session.
interval<T>(RxInterface<T> rx, void callback(T), {Duration duration = const Duration(seconds: 1)}) → void
Calls callback at most once per duration, ignoring intermediate changes. Useful for rate-limiting UI updates.
inherited
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
once<T>(RxInterface<T> rx, void callback(T)) → void
Calls callback only the first time rx changes, then cancels.
inherited
onClose() → void
Called before onDelete method. onClose might be used to dispose resources used by the controller. Like closing events, or streams before the controller is destroyed. Or dispose objects that can potentially create some memory leaks, like TextEditingControllers, AnimationControllers. Might be useful as well to persist some data on disk.
inherited
onDelete() → void
inherited
onInit() → void
Called immediately after the widget is allocated in memory. You might use this to initialize something for the controller.
inherited
onReady() → void
Called 1 frame after onInit(). It is the perfect place to enter navigation events, like snackbar, dialogs, or a new route, or async request.
inherited
onStart() → void
Called at the exact moment the widget is allocated in memory. It uses an internal "callable" type, to avoid any @overrides in subclasses. This method should be internal and is required to define the lifetime cycle of the subclass.
inherited
persistToolResult(dynamic content, String toolUseId) Future<Object>
Persist a tool result to disk and return information about the persisted file.
processPreMappedToolResultBlock({required ToolResultBlock toolResultBlock, required String toolName, required int maxResultSizeChars}) Future<ToolResultBlock>
Process a pre-mapped tool result block.
processToolResultBlock({required String toolName, required int maxResultSizeChars, required ToolResultBlock toolResultBlock}) Future<ToolResultBlock>
Process a tool result for inclusion in a message.
provisionContentReplacementState({List<Message>? initialMessages, List<ContentReplacementRecord>? initialContentReplacements, bool enabled = true}) ContentReplacementState?
Provision replacement state for a new conversation thread.
reconstructContentReplacementState(List<Message> messages, List<ContentReplacementRecord> records, {Map<String, String>? inheritedReplacements}) ContentReplacementState
Reconstruct replacement state from content-replacement records.
reconstructForSubagentResume(ContentReplacementState? parentState, List<Message> resumedMessages, List<ContentReplacementRecord> sidechainRecords) ContentReplacementState?
AgentTool-resume variant for subagent reconstruction.
refresh() → void
inherited
refreshGroup(Object id) → void
inherited
removeListener(VoidCallback listener) → void
Remove a previously registered closure from the list of closures that the object notifies.
inherited
removeListenerId(Object id, VoidCallback listener) → void
inherited
reportAdd(VoidCallback disposer) → void
inherited
reportRead() → void
inherited
toString() String
A string representation of this object.
inherited
update([List<Object>? ids, bool condition = true]) → void
Notifies listeners to update the UI.
inherited

Operators

operator ==(Object other) bool
The equality operator.
inherited

Static Methods

buildLargeToolResultMessage(PersistedToolResult result) String
Build a message for large tool results with preview.
generatePreview(String content, int maxBytes) → ({bool hasMore, String preview})
Generate a preview of content, truncating at a newline boundary when possible.
isToolResultContentEmpty(dynamic content) bool
True when a tool_result's content is empty or effectively empty.