soul loop-1: identity loading, boot counter, internal state events, richer awareness

- memory.el: mem_boot_count_get/inc (persisted counter), mem_emit_state_event (InternalStateEvent schema)
- soul.el: load_identity_context() loads intel-dna/values/mem-philosophy nodes into state at boot; boot counter incremented on every startup
- awareness.el: attend() gains search/activate/strengthen/forget action types; one_cycle() emits InternalStateEvent for non-trivial decisions
- chat.el: build_system_prompt includes [IDENTITY GRAPH] block from graph-loaded context; handle_chat strengthens activated nodes after each turn
This commit is contained in:
2026-05-06 22:02:05 -05:00
parent d2161d9f48
commit 4fc0294a49
4 changed files with 188 additions and 1 deletions
+62
View File
@@ -53,6 +53,26 @@ fn attend(node_json: String) -> String {
return make_action("remember", payload)
}
if str_starts_with(content, "search ") {
let payload: String = str_slice(content, 7, str_len(content))
return make_action("search", payload)
}
if str_starts_with(content, "activate ") {
let payload: String = str_slice(content, 9, str_len(content))
return make_action("activate", payload)
}
if str_starts_with(content, "strengthen ") {
let payload: String = str_slice(content, 11, str_len(content))
return make_action("strengthen", payload)
}
if str_starts_with(content, "forget ") {
let payload: String = str_slice(content, 7, str_len(content))
return make_action("forget", payload)
}
return make_action("respond", content)
}
@@ -81,6 +101,32 @@ fn respond(action_json: String) -> String {
return "{\"outcome\":\"response\",\"id\":\"" + id + "\"}"
}
if str_eq(kind, "search") {
let results: String = mem_search(payload, 10)
let safe_results: String = str_replace(results, "\"", "'")
let tags: String = "[\"soul-outbox\",\"search-result\"]"
let id: String = mem_store(safe_results, "search-result", tags)
return "{\"outcome\":\"searched\",\"id\":\"" + id + "\"}"
}
if str_eq(kind, "activate") {
let results: String = mem_recall(payload, 3)
let safe_results: String = str_replace(results, "\"", "'")
let tags: String = "[\"soul-outbox\",\"activation-result\"]"
let id: String = mem_store(safe_results, "activation-result", tags)
return "{\"outcome\":\"activated\",\"id\":\"" + id + "\"}"
}
if str_eq(kind, "strengthen") {
engram_strengthen(payload)
return "{\"outcome\":\"strengthened\",\"id\":\"" + payload + "\"}"
}
if str_eq(kind, "forget") {
engram_forget(payload)
return "{\"outcome\":\"forgotten\",\"id\":\"" + payload + "\"}"
}
return "{\"outcome\":\"noop\"}"
}
@@ -105,6 +151,22 @@ fn one_cycle() -> Bool {
let action: String = attend(node)
let kind: String = json_get(action, "kind")
// Log non-trivial decisions as internal state events
let is_interesting: Bool = !str_eq(kind, "noop") && !str_eq(kind, "respond")
if is_interesting {
let trigger_content: String = json_get(node, "content")
let safe_trigger: String = str_replace(trigger_content, "\"", "'")
let tags: String = "[\"internal-state\",\"awareness-decision\"]"
let ts: Int = time_now()
let event_content: String = "{\"trigger\":\"" + safe_trigger + "\",\"kind\":\"" + kind + "\",\"ts\":" + int_to_str(ts) + "}"
let discard_ev: String = engram_node_full(
event_content, "InternalStateEvent", "state-event:" + kind,
el_from_float(0.85), el_from_float(0.8), el_from_float(0.9),
"Episodic", tags
)
}
if str_eq(kind, "noop") {
return false
}