regen dist: rebuild soul.c from corrected sources (OOM gone, Track B compiled in)
Regenerates the combined dist/soul.c and per-module dist/*.c from the current El sources, on top of the elc-source-typo fixes (PR #77) and the Track B threat-to-others routing (PR #76), both already on this branch. Validated end to end under a physical-RSS watchdog (macOS silently ignores ulimit -v / RLIMIT_AS, so every elc/elb run was RSS-polled and kill -9'd at a 3GB ceiling, one module at a time): - OOM is GONE. The stale dist/soul-with-nlg.el (which still carries the malformed string literals) explodes to 3.3GB+ and is watchdog-killed at ~90%. With the typos fixed, every one of the 48 modules compiles at <=18MB peak RSS, and the full flat amalgamation compiles as a single translation unit at ~68MB. The 700GB pathology was purely the unbounded-parser-on-malformed-literal loop; no malformed construct means no loop. - The regenerated soul.c contains Track B: safety_classify_hard_bell -> threat_other -> safety_hard_directive routes credible threat-to-others to 911 and explicitly NOT to 988 / the safety contact. Verified in source, in the emitted C, and in the linked binary's strings. Track A (abuse / self_harm) is unchanged and still checked first. - The regenerated soul links to a working native arm64 binary and boots: serves on a throwaway port, /health returns 200, awareness loop runs. Also fixes one source blocker discovered during regen (unrelated to the typos or Track B): chat.el handle_chat_agentic left a void `if { println(...) }` in value position, which the current elc lowers to `_if_result = (println(...))` (assigning void) -> invalid C. Bound an explicit Bool so the branch is non-void; behavior unchanged (still only logs on persist failure). NOTE (runtime dependency, for controlled deploy): this branch's chat.el calls engram_get_node_by_label, which the canonical el-compiler/runtime does not yet declare/define (the release runtime v1.0.0-20260501 has it; the newest runtime has arena + http_serve_async but not this). Building the soul requires a runtime that has all three. Land engram_get_node_by_label into the runtime package before this soul.c can be built in CI. Do not merge — regen + Track B going live is a controlled-deploy call.
This commit is contained in:
+42
-7
@@ -25,6 +25,7 @@ el_val_t elapsed_ms(void);
|
||||
el_val_t elapsed_human(void);
|
||||
el_val_t embed_ok(void);
|
||||
el_val_t emit_heartbeat(void);
|
||||
el_val_t auto_term_try_slot(el_val_t slot_type, el_val_t slot_lbl);
|
||||
el_val_t proactive_curiosity(void);
|
||||
el_val_t pulse_count(void);
|
||||
el_val_t pulse_inc(void);
|
||||
@@ -59,7 +60,9 @@ el_val_t id_in_seen(el_val_t node_id, el_val_t seen);
|
||||
el_val_t add_to_seen(el_val_t seen, el_val_t node_id);
|
||||
el_val_t engram_extract_ids(el_val_t nodes_json);
|
||||
el_val_t engram_compile(el_val_t intent);
|
||||
el_val_t distill_transcript(el_val_t transcript);
|
||||
el_val_t json_safe(el_val_t s);
|
||||
el_val_t current_engine_note(el_val_t model);
|
||||
el_val_t build_system_prompt(el_val_t ctx, el_val_t chat_mode);
|
||||
el_val_t hist_append(el_val_t hist, el_val_t role, el_val_t content);
|
||||
el_val_t hist_trim(el_val_t hist);
|
||||
@@ -68,10 +71,15 @@ el_val_t clean_llm_response(el_val_t s);
|
||||
el_val_t conv_history_persist(el_val_t hist);
|
||||
el_val_t conv_history_load(void);
|
||||
el_val_t session_preload_bullets(el_val_t nodes, el_val_t max_bullets, el_val_t snip_len);
|
||||
el_val_t affective_context_prefix(void);
|
||||
el_val_t handle_chat(el_val_t body);
|
||||
el_val_t handle_see(el_val_t body);
|
||||
el_val_t studio_tools_json(void);
|
||||
el_val_t agentic_api_key(void);
|
||||
el_val_t llm_base_url(void);
|
||||
el_val_t llm_wire_format(void);
|
||||
el_val_t json_escape(el_val_t s);
|
||||
el_val_t openai_chat_complete(el_val_t model, el_val_t base_url, el_val_t api_key, el_val_t safe_sys, el_val_t messages_json);
|
||||
el_val_t agentic_tools_literal(void);
|
||||
el_val_t agentic_tools_with_web(void);
|
||||
el_val_t connector_tools_json(void);
|
||||
@@ -82,6 +90,10 @@ el_val_t call_neuron_mcp(el_val_t tool_name, el_val_t args);
|
||||
el_val_t agent_workspace_root(void);
|
||||
el_val_t path_within_root(el_val_t path, el_val_t root);
|
||||
el_val_t resolve_in_root(el_val_t path, el_val_t root);
|
||||
el_val_t run_command_is_readonly(el_val_t cmd);
|
||||
el_val_t cmd_abs_escape_at(el_val_t cmd, el_val_t root, el_val_t needle);
|
||||
el_val_t run_command_guard(el_val_t cmd, el_val_t root);
|
||||
el_val_t classify_tool_risk(el_val_t tool_name, el_val_t tool_input);
|
||||
el_val_t dispatch_tool(el_val_t tool_name, el_val_t tool_input);
|
||||
el_val_t is_builtin_tool(el_val_t tool_name);
|
||||
el_val_t next_bridge_id(void);
|
||||
@@ -161,9 +173,19 @@ el_val_t session_list(void);
|
||||
el_val_t session_get(el_val_t session_id);
|
||||
el_val_t session_delete(el_val_t session_id);
|
||||
el_val_t session_update_patch(el_val_t session_id, el_val_t body);
|
||||
el_val_t session_search_entry(el_val_t node);
|
||||
el_val_t session_search(el_val_t query);
|
||||
el_val_t session_hist_load(el_val_t session_id);
|
||||
el_val_t session_hist_save(el_val_t session_id, el_val_t hist);
|
||||
el_val_t session_update_meta_timestamp(el_val_t session_id);
|
||||
el_val_t session_auto_title(el_val_t session_id, el_val_t first_message);
|
||||
el_val_t handle_session_approve(el_val_t session_id, el_val_t body);
|
||||
el_val_t init_soul_edges(void);
|
||||
el_val_t load_identity_context(void);
|
||||
el_val_t seed_persona_from_env(void);
|
||||
el_val_t emit_session_start_event(void);
|
||||
el_val_t layered_cycle(el_val_t raw_input);
|
||||
el_val_t flag_true(el_val_t body, el_val_t key);
|
||||
el_val_t rate_limit_check(el_val_t ip, el_val_t path);
|
||||
el_val_t strip_query(el_val_t path);
|
||||
el_val_t err_404(el_val_t path);
|
||||
@@ -179,6 +201,11 @@ el_val_t connectd_post(el_val_t suffix, el_val_t body);
|
||||
el_val_t handle_connectors(el_val_t method, el_val_t clean, el_val_t body);
|
||||
el_val_t handle_request(el_val_t method, el_val_t path, el_val_t body);
|
||||
|
||||
el_val_t flag_true(el_val_t body, el_val_t key) {
|
||||
return (json_get_bool(body, key) || (json_get_int(body, key) > 0));
|
||||
return 0;
|
||||
}
|
||||
|
||||
el_val_t rate_limit_check(el_val_t ip, el_val_t path) {
|
||||
if (str_eq(path, EL_STR("/health"))) {
|
||||
return EL_STR("");
|
||||
@@ -523,13 +550,21 @@ el_val_t handle_request(el_val_t method, el_val_t path, el_val_t body) {
|
||||
if (str_starts_with(clean, EL_STR("/api/connectors"))) {
|
||||
return handle_connectors(method, clean, body);
|
||||
}
|
||||
if (str_starts_with(clean, EL_STR("/api/run-progress/"))) {
|
||||
el_val_t rp_id = str_slice(clean, 18, str_len(clean));
|
||||
if (!str_eq(rp_id, EL_STR(""))) {
|
||||
el_val_t rp_raw = state_get(el_str_concat(EL_STR("run_progress_"), rp_id));
|
||||
el_val_t rp_arr = ({ el_val_t _if_result_25 = 0; if (str_eq(rp_raw, EL_STR(""))) { _if_result_25 = (EL_STR("[]")); } else { _if_result_25 = (el_str_concat(el_str_concat(EL_STR("["), rp_raw), EL_STR("]"))); } _if_result_25; });
|
||||
return el_str_concat(el_str_concat(EL_STR("{\"progress\":"), rp_arr), EL_STR("}"));
|
||||
}
|
||||
}
|
||||
if (str_eq(clean, EL_STR("/api/sessions"))) {
|
||||
return session_list();
|
||||
}
|
||||
if (str_starts_with(clean, EL_STR("/api/sessions/"))) {
|
||||
el_val_t gs_after = str_slice(clean, 14, str_len(clean));
|
||||
el_val_t gs_slash = str_index_of(gs_after, EL_STR("/"));
|
||||
el_val_t gs_id = ({ el_val_t _if_result_25 = 0; if ((gs_slash < 0)) { _if_result_25 = (gs_after); } else { _if_result_25 = (str_slice(gs_after, 0, gs_slash)); } _if_result_25; });
|
||||
el_val_t gs_id = ({ el_val_t _if_result_26 = 0; if ((gs_slash < 0)) { _if_result_26 = (gs_after); } else { _if_result_26 = (str_slice(gs_after, 0, gs_slash)); } _if_result_26; });
|
||||
if (!str_eq(gs_id, EL_STR(""))) {
|
||||
return session_get(gs_id);
|
||||
}
|
||||
@@ -543,14 +578,14 @@ el_val_t handle_request(el_val_t method, el_val_t path, el_val_t body) {
|
||||
if (str_starts_with(clean, EL_STR("/api/sessions/")) && str_ends_with(clean, EL_STR("/tool_result"))) {
|
||||
el_val_t after = str_slice(clean, 14, str_len(clean));
|
||||
el_val_t slash = str_index_of(after, EL_STR("/"));
|
||||
el_val_t session_id = ({ el_val_t _if_result_26 = 0; if ((slash < 0)) { _if_result_26 = (after); } else { _if_result_26 = (str_slice(after, 0, slash)); } _if_result_26; });
|
||||
el_val_t session_id = ({ el_val_t _if_result_27 = 0; if ((slash < 0)) { _if_result_27 = (after); } else { _if_result_27 = (str_slice(after, 0, slash)); } _if_result_27; });
|
||||
return handle_tool_result(session_id, body);
|
||||
}
|
||||
if (str_starts_with(clean, EL_STR("/api/sessions/"))) {
|
||||
el_val_t sess_after = str_slice(clean, 14, str_len(clean));
|
||||
el_val_t sess_slash = str_index_of(sess_after, EL_STR("/"));
|
||||
el_val_t sess_id = ({ el_val_t _if_result_27 = 0; if ((sess_slash < 0)) { _if_result_27 = (sess_after); } else { _if_result_27 = (str_slice(sess_after, 0, sess_slash)); } _if_result_27; });
|
||||
el_val_t sess_sub = ({ el_val_t _if_result_28 = 0; if ((sess_slash < 0)) { _if_result_28 = (EL_STR("")); } else { _if_result_28 = (str_slice(sess_after, (sess_slash + 1), str_len(sess_after))); } _if_result_28; });
|
||||
el_val_t sess_id = ({ el_val_t _if_result_28 = 0; if ((sess_slash < 0)) { _if_result_28 = (sess_after); } else { _if_result_28 = (str_slice(sess_after, 0, sess_slash)); } _if_result_28; });
|
||||
el_val_t sess_sub = ({ el_val_t _if_result_29 = 0; if ((sess_slash < 0)) { _if_result_29 = (EL_STR("")); } else { _if_result_29 = (str_slice(sess_after, (sess_slash + 1), str_len(sess_after))); } _if_result_29; });
|
||||
if (!str_eq(sess_id, EL_STR("")) && str_eq(sess_sub, EL_STR("approve"))) {
|
||||
return handle_session_approve(sess_id, body);
|
||||
}
|
||||
@@ -574,7 +609,7 @@ el_val_t handle_request(el_val_t method, el_val_t path, el_val_t body) {
|
||||
}
|
||||
el_val_t agentic_flag = json_get_bool(body, EL_STR("agentic"));
|
||||
el_val_t req_mode = json_get(body, EL_STR("mode"));
|
||||
el_val_t reply = ({ el_val_t _if_result_29 = 0; if (str_eq(req_mode, EL_STR("plan"))) { _if_result_29 = (handle_chat_plan(body)); } else { _if_result_29 = (({ el_val_t _if_result_30 = 0; if (agentic_flag) { _if_result_30 = (handle_chat_agentic(body)); } else { el_val_t screened_reply = layered_cycle(raw_msg); _if_result_30 = (screened_reply); } _if_result_30; })); } _if_result_29; });
|
||||
el_val_t reply = ({ el_val_t _if_result_30 = 0; if (str_eq(req_mode, EL_STR("plan"))) { _if_result_30 = (handle_chat_plan(body)); } else { _if_result_30 = (({ el_val_t _if_result_31 = 0; if (agentic_flag) { _if_result_31 = (handle_chat_agentic(body)); } else { el_val_t screened_reply = layered_cycle(raw_msg); _if_result_31 = (screened_reply); } _if_result_31; })); } _if_result_30; });
|
||||
auto_persist(body, reply);
|
||||
return reply;
|
||||
}
|
||||
@@ -698,7 +733,7 @@ el_val_t handle_request(el_val_t method, el_val_t path, el_val_t body) {
|
||||
if (str_starts_with(clean, EL_STR("/api/sessions/"))) {
|
||||
el_val_t del_after = str_slice(clean, 14, str_len(clean));
|
||||
el_val_t del_slash = str_index_of(del_after, EL_STR("/"));
|
||||
el_val_t del_id = ({ el_val_t _if_result_31 = 0; if ((del_slash < 0)) { _if_result_31 = (del_after); } else { _if_result_31 = (str_slice(del_after, 0, del_slash)); } _if_result_31; });
|
||||
el_val_t del_id = ({ el_val_t _if_result_32 = 0; if ((del_slash < 0)) { _if_result_32 = (del_after); } else { _if_result_32 = (str_slice(del_after, 0, del_slash)); } _if_result_32; });
|
||||
if (!str_eq(del_id, EL_STR(""))) {
|
||||
return session_delete(del_id);
|
||||
}
|
||||
@@ -709,7 +744,7 @@ el_val_t handle_request(el_val_t method, el_val_t path, el_val_t body) {
|
||||
if (str_starts_with(clean, EL_STR("/api/sessions/"))) {
|
||||
el_val_t patch_after = str_slice(clean, 14, str_len(clean));
|
||||
el_val_t patch_slash = str_index_of(patch_after, EL_STR("/"));
|
||||
el_val_t patch_id = ({ el_val_t _if_result_32 = 0; if ((patch_slash < 0)) { _if_result_32 = (patch_after); } else { _if_result_32 = (str_slice(patch_after, 0, patch_slash)); } _if_result_32; });
|
||||
el_val_t patch_id = ({ el_val_t _if_result_33 = 0; if ((patch_slash < 0)) { _if_result_33 = (patch_after); } else { _if_result_33 = (str_slice(patch_after, 0, patch_slash)); } _if_result_33; });
|
||||
if (!str_eq(patch_id, EL_STR(""))) {
|
||||
return session_update_patch(patch_id, body);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user