feat(parser): add Omnigent support#1167
Conversation
roborev: Combined Review (
|
roborev: Combined Review (
|
roborev: Combined Review (
|
roborev: Combined Review (
|
roborev: Combined Review (
|
roborev: Combined Review (
|
roborev: Combined Review (
|
|
Returning to this |
98e807c to
caa2a71
Compare
roborev: Combined Review (
|
roborev: Combined Review (
|
- test(parser): omnigent cardinality regression; docs + frontend accent - test(parser): use repo-standard synthetic path in omnigent fixtures - Merge branch 'main' into feat/omnigent-support - fix(parser): harden omnigent incremental sync - fix(parser): reconcile omnigent change edge cases - fix(parser): bound omnigent workspace sync - fix(sync): reconcile complete container membership - fix(parser): detect omnigent in-place changes - fix(sync): cache omnigent container parses - fix(sync): reject partially versioned batches - fix(parser): close omnigent consistency gaps - fix(parser): encode omnigent tool output as JSON - fix(sync): bound omnigent scheduled discovery - fix(sync): preserve omnigent retry work - fix(sync): complete omnigent retry lifecycle - fix(parser): close omnigent incremental gaps - fix(sync): bound omnigent recovery work - fix(sync): harden omnigent recovery cursors - fix(sync): recover empty omnigent rebuilds - fix(parser): disambiguate omnigent hash paths - fix(sync): retry canceled omnigent work - fix(parser): bound cold omnigent events - fix(sync): reconcile cold omnigent archives - fix(sync): continue omnigent reconciliation - fix(sync): finish omnigent hint sweeps - fix(sync): preserve omnigent sweep activation - fix(sync): bound omnigent recovery state - fix(sync): page omnigent retry overflow - fix(sync): recover unstored omnigent retries - fix(sync): complete omnigent recovery sweeps - fix(sync): bound omnigent tracker state - fix(parser): page omnigent fast-change window with keyset cursor - refactor(sync): extract container scheduling behind a provider capability - refactor(sync): rewrite omnigent sync on standard container model - fix(sync): bound omnigent event fan-out and prefix failed-write demotion - test(ssh): stream resolver script on Windows - fix(parser): support omnigent binary-uuid ids and ignore -shm events - test(sync): assert omnigent result cardinality, drop dead hint paging - fix(parser): keep absent omnigent cost NULL for catalog pricing - fix(sync): bound omnigent incremental discovery
bf13284 to
001e182
Compare
roborev: Combined Review (
|
NilAway cannot prove that the guarded prefix slice is safe when the local slice starts nil. Initialize it explicitly so the analyzer sees the non-nil invariant while preserving index discovery behavior.
roborev: Combined Review (
|
Complete container parses infer missing members from stored ownership; those absences must remain revivable archive tombstones rather than parser exclusions. Watcher retries also need an authoritative replay after a failed write advances the provider cursor. Split schemas now combine indexed single-workspace timestamps with a fixed recent-member window so metadata and usage commits converge without making routine event work scale with the conversation archive. VALID (fixed): #1, #2, #3 INVALID (dismissed): none PEDANTIC (skipped): none
roborev: Combined Review (
|
An empty authoritative database is valid deletion proof, not a parser exclusion. Retaining its stored ownership as revivable tombstones prevents deletion of the final source conversation from erasing archived sessions and messages. Container scans can be archive-sized, so caller cancellation must reach the shared-container callback, database reads, and per-conversation loop boundaries. VALID (fixed): #1, #2 INVALID (dismissed): none PEDANTIC (skipped): none
roborev: Combined Review (
|
Workspace-qualified identities must retain user trash and permanent exclusion state instead of resurfacing deleted conversations. Explicit migration relationships let cleanup honor that state without rewriting archived primary keys. Omnigent watcher discovery is intentionally bounded, so scheduled streamed reconciliation remains the authoritative backstop for edits outside its cursors. Pending correctness retries also bypass incremental cutoffs and are acknowledged only after successful work. VALID (fixed): #1, #2, #3 INVALID (dismissed): none PEDANTIC (skipped): none
The review checklist was an implementation aid rather than product documentation and should not ship as part of the public feature branch.
roborev: Combined Review (
|
A failed member parse can advance one root's bounded cursor, so unrelated scoped work must not acknowledge the global replay generation. Only an unscoped pass provides the coverage needed to clear that recovery state. Remote copies of a live WAL database also need transactional snapshot semantics. Exporting one online-backup database avoids inconsistent main/WAL combinations and keeps unrelated Omnigent state out of HTTP and SSH archives. Recorded aggregate usage cost remains authoritative when Omnigent provides model token breakdowns without model costs. VALID (fixed): #1, #2, #3 INVALID (dismissed): none PEDANTIC (skipped): none
roborev: Combined Review (
|
Omnigent stores transcript data beside authentication credentials in the same SQLite database. A page-level backup cannot provide a safe remote artifact, so HTTP and SSH sync must exclude the provider until a fresh allowlisted export schema exists. This also makes snapshot-tool failures irrelevant instead of allowing successful empty imports. Persisted container cache hits still need to restore the bounded in-memory change cursors after process restart. Rebuilding only cursor tails, workspace bounds, and the fixed recent-member window preserves watcher cardinality without reparsing the archive; a fingerprint recheck closes the commit race during restoration. VALID (fixed): #1, #2, #3 INVALID (dismissed): none PEDANTIC (skipped): none
roborev: Combined Review (
|
Scheduled reconciliation must stay proportional to the changed member batch instead of reparsing every conversation in the shared database. Full membership scans remain available to archive audits and forced recovery, where their deletion proof is intentional.\n\nUnsupported Omnigent schemas cannot safely prove that archived conversations disappeared. Treating that state as non-authoritative lets healthy reconciliation work finish while preserving the existing archive.
roborev: Combined Review (
|
Unsupported parser outcomes may be persisted as clean skip entries, so a cold tracker must preserve that result instead of turning restart validation into a failure. Root workspace and branch changes also affect archived descendants even when their own source rows are unchanged. Resolving those virtual sources through the archive’s indexed parent relationships keeps incremental correctness proportional to the affected subagent tree.
roborev: Combined Review (
|
Replace the Omnigent-named engine machinery from the reconciliation fix series with agent-agnostic equivalents: - Drop the forceFullOmnigent parameter threaded through the three reconciliation signatures; whether a pass demands complete coverage is derived from the existing scope (unscoped means authoritative). - Add SourceCapabilities.IncrementalDiscoveryCursor, declared by the Omnigent provider, and key the forced-full-discovery retry state per agent on it instead of hardcoding parser.AgentOmnigent in the request, query, and completion paths. - The deletion audit constructs providers with ForceFullDiscovery set unconditionally: it only runs after an authoritative pass, so any cursor-based provider must resolve sources with its cursor bypassed.
Trae and Omnigent were excluded from remote sync artifacts through a duplicated resolveAgentHasOnDiskSource short-circuit plus eight hardcoded agent identity checks across the archive, manifest, delta-root, and tar seams. Declare the exclusion once as AgentDef.RemoteSyncExcluded with the rationale on each registry entry, and have every seam consult it, keeping the fail-closed defense-in-depth checks. Behavior change: the defense-in-depth seams previously named only Omnigent; they now also reject Trae, which could never legitimately reach them because target resolution already excludes it.
roborev: Combined Review (
|
roborev: Combined Review (
|
Adds local Omnigent support. AgentsView reads conversations from Omnigent’s shared
chat.dband archives each one as an independent session, including messages, tool activity, reasoning, parent/child relationships, usage, and recorded cost.Synchronization
Routine watcher and scheduled work is bounded to changed or recent members. Root workspace and branch edits refresh existing subagents through the archive’s indexed parent relationships, so correctness does not require scanning unrelated conversations. Full-container scans are reserved for initialization, schema changes, explicit rebuilds, recovery, and authoritative audits.
Missing conversations become reversible
source_missingtombstones instead of being deleted. Unsupported schemas remain nonfatal and preserve archived data across restarts. Failed member updates keep a generation-safe retry until an unscoped pass covers every configured Omnigent root.Compatibility and safety
The parser supports legacy and split-workspace schemas, workspace-qualified identities, and binary UUIDs. Identity migrations retain trash and permanent-exclusion state, full scans honor cancellation, and authoritative aggregate costs are preserved when model-level costs are absent.
HTTP and SSH remote sync intentionally exclude Omnigent because transcript data shares its SQLite database with authentication state. Remote support remains disabled until AgentsView can produce a fresh allowlisted export containing only parser-required data.
Reviewers should start with
internal/parser/omnigent_provider.go,internal/parser/omnigent.go, and the Omnigent paths ininternal/sync/engine.go.