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 ¶
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
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
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 ParsedChat ¶
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.
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
NewFileSource eleva un Parser de archivos a Source. Sin WithRoot usa el DefaultRoot del parser.
func NewOpencodeSource ¶ added in v0.11.0
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.