Memoria y estado
La memoria, el progreso y las reglas auto-persisten entre ejecuciones en <dir-del-programa>/.synsema/state/<name>.db (gitignoreá .synsema/). Un remember() en una corrida lo encuentra recall() en la siguiente.
-- Doc example: agent memory, progress, and owner rules (persist to SQLite).
intent: "doc example: memory, progress, rules"
remember("learning", "demo note from run", ["demo"])
print("recalled → " + text((recall("learning", ["demo"])[0])["content"]))
test "remember then recall — newest first ([0] is the most recent)"
remember("learning", "API is slow on Mondays", ["api"])
let notes be recall("learning", ["api"])
assert_eq((notes[0])["content"], "API is slow on Mondays")
test "progress: resume_point returns the step to resume from"
create_progress("import", ["ingest", "validate", "load"])
start_step("import", "ingest")
complete_step("import", "ingest", "100 rows")
assert_eq(resume_point("import"), "validate")
test "owner rules: a numeric must-rule flags a violation"
add_rule("max_discount", "must", "discount <= 0.20", "pricing")
assert(length(check_rules("pricing", {"discount": 0.25})) > 0)
Memoria persistente
remember("learning", "API lenta los lunes", ["api", "performance"])
let notes be recall("learning", ["api"]) -- más nuevo primero ([0] = más reciente)
let hits be recall(nothing, nothing, "lunes") -- búsqueda libre (saltá args con nothing)
forget_memory(entry_id)
Una entrada de recall es un map con id, category, content, source, tags.
Las categorías son un set fijo en inglés:preference,rule,learning,decision,context. Cualquier otro string (p. ej."preferencia") da error. Multi-tag es OR por defecto; pasámode = "all"para AND.
Progreso (reanudable tras crash)
create_progress("import", ["ingest", "validate", "load"])
start_step("import", "ingest")
complete_step("import", "ingest", "100 filas") -- o fail_step(...)
let where be resume_point("import") -- "validate" — dónde reanudar tras un restart
Reglas del owner
add_rule("max_discount", "must", "discount <= 0.20", "pricing")
let violations be check_rules("pricing", {"discount": 0.25}) -- no vacío → violada
Niveles: must (bloqueo duro), should (warning), avoid / prefer (preferencias). Las condiciones numéricas se evalúan contra el map de contexto.
Estado de serve (por proceso, en memoria)
Bajo serve, los builtins state_* (p. ej. state_incr("visits")) comparten estado en memoria entre requests — ver Servidor HTTP. (Son una feature de serve, no disponibles en run plano.) Para estado durable, usá los builtins de memoria/progreso de arriba o una base de datos.