Core interfaces and canonical types for OmniDevX — the PlexusOne developer-experience telemetry domain. OmniDevX collects and normalizes events from AI coding agents and development tools so frameworks such as SPACE, AI SPACE, and DORA can be computed over one vendor-neutral event model.
Not OmniDXI.
omnidxiis Digital Experience Intelligence — a facade over product-analytics platforms (Amplitude, Mixpanel, Heap, Pendo). OmniDevX observes how developers and AI agents build software. The two domains are unrelated.
- Root package
omnidevx— canonicalEventIR,Collectorcontract, periods, provenance. store— JSONL event store (~/.plexusone/omnidevx/data/), idempotent writes, period/product-scoped reads.identity— resolves GitHub usernames, hashed git emails, and device-scoped local accounts to a canonicalpersonId.report— buildsDeveloperPeriodReport(omnidevx.developer-period/v1) from stored events: daily summaries, weekly/monthly rollups, combined + bySource metrics, coverage scoring.providers/claudecode— thin provider reading Claude Code local session history (~/.claude/projects/). Stdlib only.providers/git— thin provider emittingdevx.change.committedfrom local git history, with AI co-author attribution. Built ongrokify/gogit.providers/genericotel— OTLP/JSON metrics receiver for tools without a dedicated provider.
Thick providers with heavy dependencies live in vendor repos, e.g. the
Codex CLI collector in
omni-openai/omnidevx
(requires a SQLite driver) and the GitHub contribution collector in
omni-github/omnidevx
(REST + GraphQL).
Canonical events carry metadata only — event types, durations, counts, models, token figures, and repository identifiers. Prompt text, model responses, and file contents are never captured by default.
collector, err := claudecode.New(claudecode.Options{})
if err != nil {
// handle
}
result, err := collector.Collect(ctx, omnidevx.CollectRequest{
Period: omnidevx.Period{Start: weekStart, End: weekEnd},
Subject: omnidevx.SubjectRef{PersonID: "person:jane"},
})Provenance on every event records the collection mode (history, otel,
hooks, api, survey) and a confidence score, so downstream metrics can
distinguish observed values from historical reconstruction.
s, _ := store.Open(store.Options{})
read, err := s.Read(ctx, store.Query{Period: period})
r := report.Build(read.Events, report.Subject{PersonID: "person:jane"}, period)
// r.Metrics.Combined["commits"], r.Metrics.BySource["git/git"]["commits"], ...
// r.Sources, r.Quality.CoverageScorereport.Build is reproducible: the same stored events always produce the
same report, and reprocessing with a changed metric formula never requires
recollection. See Period Reports
for the combined-vs-bySource rules and Identity
for resolving multiple accounts to one person.
Ecosystem PRD/TRD/PLAN/ROADMAP currently reside in
devfolio/docs/specs
and will migrate here.
MIT