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:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user