CommitAttributionManager class

Manages git commit attribution tracking and calculation.

Usage:

final manager = Sint.put(CommitAttributionManager(
  sessionId: 'abc-123',
  originalCwd: '/path/to/project',
));
Inheritance

Constructors

CommitAttributionManager({required String sessionId, String? originalCwd, String clientSurface = 'cli', String gitExe = 'git'})

Properties

clientSurface String
final
getRemoteUrlForDir Future<String?> Function(String cwd)?
Callback to get the remote URL for a directory.
getter/setter pair
gitExe String
final
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
isGeneratedFileChecker bool Function(String filePath)?
Callback to check if a file is a generated file (lock files, etc.).
getter/setter pair
listenersLength int
no setterinherited
resolveGitDir Future<String?> Function(String cwd)?
Callback to resolve the git directory path.
getter/setter pair
runtimeType Type
A representation of the runtime type of the object.
no setterinherited
sessionId String
final
state → Rx<AttributionState>
Reactive attribution state.
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
attributionRestoreStateFromLog(List<AttributionSnapshotMessage> attributionSnapshots) → void
Restore attribution state from log snapshots on session resume.
calculateCommitAttribution({required List<AttributionState> states, required List<String> stagedFiles}) Future<AttributionData>
Calculate final attribution for staged files.
containsListener(SintStateUpdate listener) bool
inherited
createEmptyAttributionState() AttributionState
Create an empty attribution state for a new session.
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
ever<T>(RxInterface<T> rx, void callback(T)) → void
Calls callback every time rx changes. Auto-cancels on controller disposal.
inherited
expandFilePath(String filePath) String
Expand a relative path to absolute path.
getAttributionRepoRoot() String
Get the repo root for attribution operations.
getClientSurface() String
Get the current client surface from environment.
getFileMtime(String filePath) Future<int>
Get a file's modification time (mtimeMs).
getGitDiffSize(String filePath) Future<int>
Get the size of changes for a file from git diff.
getRepoClassCached() RepoClassification?
Synchronously return the cached repo classification.
getStagedFiles() Future<List<String>>
Get staged files from git.
incrementPromptCount({required AttributionState attribution, required void saveSnapshot(AttributionSnapshotMessage)}) AttributionState
Increment promptCount and save an attribution snapshot.
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
isFileDeleted(String filePath) Future<bool>
Check if a file was deleted in the staged changes.
isGitTransientState() Future<bool>
Check if we're in a transient git state (rebase, merge, cherry-pick).
isInternalModelRepo() Future<bool>
Check if the current repo is in the allowlist for internal model names.
isInternalModelRepoCached() bool
Synchronously return the cached result of isInternalModelRepo().
normalizeFilePath(String filePath) String
Normalize file path to relative path from cwd for consistent tracking.
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
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
restoreAttributionStateFromSnapshots(List<AttributionSnapshotMessage> snapshots) AttributionState
Restore attribution state from snapshot messages.
stateToSnapshotMessage(AttributionState attrState, String messageId) AttributionSnapshotMessage
Convert attribution state to snapshot message for persistence.
toString() String
A string representation of this object.
inherited
trackBulkFileChanges({required AttributionState attrState, required List<FileChange> changes}) AttributionState
Track multiple file changes in bulk, mutating a single Map copy.
trackFileCreation({required AttributionState attrState, required String filePath, required String content, int? mtime}) AttributionState
Track a file creation by Neomage.
trackFileDeletion({required AttributionState attrState, required String filePath, required String oldContent}) AttributionState
Track a file deletion by Neomage.
trackFileModification({required AttributionState attrState, required String filePath, required String oldContent, required String newContent, bool userModified = false, int? mtime}) AttributionState
Track a file modification by Neomage. Called after Edit/Write tool completes.
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

buildSurfaceKey(String surface, String modelName) String
Build a surface key that includes the model name.
computeContentHash(String content) String
Compute SHA-256 hash of content.
sanitizeModelName(String shortName) String
Sanitize a model name to its public equivalent.
sanitizeSurfaceKey(String surfaceKey) String
Sanitize a surface key to use public model names.