Files
el/engram/bindings/go/engram.h
T
Will Anderson 2454c83e82 feat: HNSW index, consolidation engine, Kotlin/TS/Go bindings, SQLite migration connector
- vector.rs: replace flat O(n) scan with instant-distance HNSW for stores
  >= 100 nodes; flat scan retained as fallback for small graphs; dirty-flag
  persistence in sled triggers index rebuild only when nodes are added

- consolidation.rs: Episodic → Semantic promotion based on activation_count
  and salience_floor thresholds; global decay pass after each cycle;
  ConsolidationConfig + ConsolidationReport types; 8 tests

- migration.rs: reads Neuron SQLite (memory_nodes, knowledge_entries,
  graph_edges) and writes to Engram sled; placeholder unit-vector embeddings
  with TODO for ONNX; 5 tests including full in-memory DB roundtrip

- crates/engram-migrate: CLI binary (engram-migrate --sqlite / --output)

- crates/engram-jni: JNI cdylib exposing open/close/put_node/get_node/
  activate/search_embedding/touch/decay/node_count/edge_count via
  Java_ai_neuron_engram_EngramDb_* entry points; 6 tests

- bindings/kotlin: EngramDb.kt (AutoCloseable JNI wrapper), EngramNode,
  EngramEdge, ActivatedNode, EngramTypes; build.gradle.kts; settings.gradle.kts

- bindings/typescript: engram-wasm crate (wasm-bindgen, serde-wasm-bindgen);
  WasmEngramDb with in-memory backend (sled not available in WASM);
  TypeScript wrapper (index.ts, types.ts, package.json, tsconfig.json)

- bindings/go: engram.go (CGo wrapper), engram.h (C header), engram_test.go
  (4 tests covering open/close/put_node/get_node/node_count/decay); go.mod

- engram-core: wasm feature gate for in-memory backend; mem_storage.rs;
  activation.activate_mem for WASM path; Node::with_id helper;
  salience.rs doctest fixed (text block)

- examples/basic.rs: consolidation section added
- examples/migrate.rs: migration API demonstration

Build: cargo build --workspace -- zero warnings, zero errors
Tests: 38 pass (25 engram-core + 7 engram-ffi + 6 engram-jni)
2026-04-27 16:00:47 -05:00

71 lines
2.2 KiB
C

/**
* engram.h — C header for the engram FFI.
*
* Generated from crates/engram-ffi/src/lib.rs.
* To regenerate: cargo install cbindgen && cbindgen --crate engram-ffi -o bindings/go/engram.h
*
* Build the shared library:
* cargo build --package engram-ffi --release
* # macOS: target/release/libengram_ffi.dylib
* # Linux: target/release/libengram_ffi.so
*/
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
/** Opaque handle to an open EngramDb. Obtained via engram_open. */
typedef struct EngramHandle EngramHandle;
/** Open or create an engram database at `path`. Returns null on error. */
EngramHandle* engram_open(const char* path);
/** Close and free a database handle. The pointer must not be used afterwards. */
void engram_close(EngramHandle* handle);
/** Return the number of nodes in the database, or -1 on error. */
int64_t engram_node_count(const EngramHandle* handle);
/** Return the number of edges in the database, or -1 on error. */
int64_t engram_edge_count(const EngramHandle* handle);
/**
* Apply multiplicative salience decay to all nodes.
* `factor` should be in (0.0, 1.0). Returns nodes updated, or -1 on error.
*/
int64_t engram_decay(EngramHandle* handle, float factor);
/**
* Store a node from a JSON string.
* JSON: { "content": "...", "node_type": "Memory", "tier": "Episodic",
* "importance": 0.8, "embedding": [f32, ...] }
* Returns a heap-allocated UUID string on success, null on error.
* Free with engram_free_string.
*/
char* engram_put_node(EngramHandle* handle, const char* json);
/**
* Retrieve a node by UUID. Returns a heap-allocated JSON string, or null.
* Free with engram_free_string.
*/
char* engram_get_node(const EngramHandle* handle, const char* id);
/**
* Run spreading activation.
* `req_json`: { "seeds": ["uuid", ...], "query_embedding": [f32, ...],
* "max_depth": 3, "limit": 10 }
* Returns a heap-allocated JSON array, or null on error.
* Free with engram_free_string.
*/
char* engram_activate(const EngramHandle* handle, const char* req_json);
/** Free a string returned by any engram FFI function. */
void engram_free_string(char* s);
#ifdef __cplusplus
} /* extern "C" */
#endif