ingest

package
v0.11.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 19, 2026 License: MIT Imports: 15 Imported by: 0

Documentation

Overview

Package ingest lee las sesiones de los agentes y las persiste en el Store de nem. La abstracción central es Source: una fuente de sesiones que aísla a nem de CÓMO persiste cada agente. Los agentes que guardan transcripts JSONL (Codex, Claude Code, Antigravity) se adaptan con NewFileSource sobre un Parser puro (archivo → ParsedChat); los de otra naturaleza (opencode y su SQLite) implementan Source directo. La orquestación inserta de forma idempotente.

Index

Constants

View Source
const (
	RoleUser      = "user"
	RoleAssistant = "assistant"
	RoleReasoning = "reasoning"
	RoleTool      = "tool"
)

Roles con los que se persisten los mensajes. user/assistant son la conversación; reasoning es el razonamiento del agente (thinking/reasoning); tool son las llamadas a herramientas y sus salidas (compactadas).

Variables

This section is empty.

Functions

func DefaultOpencodeDBPath added in v0.11.0

func DefaultOpencodeDBPath() (string, error)

DefaultOpencodeDBPath devuelve la ruta por defecto de la DB de opencode, honrando XDG_DATA_HOME (opencode usa rutas XDG incluso en Windows).

Types

type OpencodeStamp added in v0.11.0

type OpencodeStamp struct {
	ID      string
	Updated time.Time
}

OpencodeStamp es (id, última actualización) de una sesión de opencode. Lo consume el detector de sesión activa sin conocer el esquema de la DB.

func OpencodeSessionStamps added in v0.11.0

func OpencodeSessionStamps(dbPath string, since time.Time) ([]OpencodeStamp, error)

OpencodeSessionStamps devuelve las sesiones actualizadas desde `since`, de más nueva a más antigua. dbPath "" usa la ruta por defecto; sin DB devuelve nil sin error (opencode no instalado).

type Option

type Option func(*config) error

Option configura una fuente de sesiones.

func WithRoot

func WithRoot(root string) Option

WithRoot fuerza la raíz de sesiones de la fuente: el directorio de transcripts para las fuentes de archivos, la ruta de la DB para opencode.

type ParsedChat

type ParsedChat struct {
	Chat     db.Chat
	Messages []db.Message
}

ParsedChat es el resultado de parsear un archivo de sesión: el chat y sus mensajes, listos para persistir.

type Parser

type Parser interface {
	// Source identifica al agente: "codex" | "claude" | "antigravity".
	Source() string
	// DefaultRoot devuelve el directorio raíz por defecto de las sesiones.
	DefaultRoot() (string, error)
	// Parse parsea el contenido de un archivo de sesión.
	Parse(r io.Reader, sessionPath string) (*ParsedChat, error)
}

Parser convierte un archivo de sesión de un agente en un ParsedChat. Es la abstracción que implementan los agentes con sesiones en archivos (codex, claude, antigravity); se eleva a Source con NewFileSource.

func NewAntigravityParser added in v0.5.0

func NewAntigravityParser() Parser

NewAntigravityParser crea el parser de sesiones del CLI de Antigravity.

func NewClaudeParser

func NewClaudeParser() Parser

NewClaudeParser crea el parser de sesiones de Claude Code.

func NewCodexParser

func NewCodexParser() Parser

NewCodexParser crea el parser de sesiones de Codex.

type Report

type Report struct {
	Source   string
	Scanned  int // sesiones examinadas (archivos o filas, según la fuente)
	Chats    int
	Messages int64
	Skipped  int
	Errors   []string
}

Report resume el resultado de una corrida de ingesta.

func Ingest

func Ingest(store db.Store, src Source) (*Report, error)

Ingest consume las sesiones de la fuente y las persiste en el store de forma idempotente (re-ingestar no duplica). Los errores por sesión no abortan la corrida: se acumulan en el Report.

type Source added in v0.11.0

type Source interface {
	// Name identifica al agente: "codex" | "claude" | "antigravity" | "opencode".
	Name() string
	// Sessions itera las sesiones de la fuente. Cada elemento es una sesión
	// parseada o un error de esa sesión; los errores por sesión no abortan la
	// iteración. Una fuente cuyo agente no está instalado itera vacío.
	Sessions() iter.Seq2[*ParsedChat, error]
}

Source es una fuente de sesiones de un agente. Es el seam que desacopla a nem del medio de persistencia de cada agente: Ingest solo conoce esta interfaz, y todo lo específico de un agente (formato, rutas, esquema) vive encapsulado en su Source. Si un agente cambia su forma de persistir, solo cambia su Source.

func NewFileSource added in v0.11.0

func NewFileSource(p Parser, options ...Option) (Source, error)

NewFileSource eleva un Parser de archivos a Source. Sin WithRoot usa el DefaultRoot del parser.

func NewOpencodeSource added in v0.11.0

func NewOpencodeSource(options ...Option) (Source, error)

NewOpencodeSource crea la fuente de sesiones de opencode. WithRoot fuerza la ruta de la DB (útil para tests); sin opciones usa la ruta por defecto.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL