From a00198a9b06e136ce536f95ddf7e70b66adade7e Mon Sep 17 00:00:00 2001 From: root Date: Fri, 17 Jul 2026 09:46:33 +0800 Subject: [PATCH] feat: complete SDK dispatch - all methods implemented (32-41) - DocMemory: Insert/Remove/Stats dispatch (32-34) - Knowledge: Add/List dispatch (35-36) - LLM: CurrentSource dispatch (37) - Social: GetTrait/GetRelations/ListPersons dispatch (38-40) - TextMemory: Append dispatch (41) - EventBus: subscribe stub (not wired for external plugins) - All bridge template stubs replaced with real dispatch calls --- internal/plugin/cabi/loader.go | 78 ++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/internal/plugin/cabi/loader.go b/internal/plugin/cabi/loader.go index 062f6fd..028f9e1 100644 --- a/internal/plugin/cabi/loader.go +++ b/internal/plugin/cabi/loader.go @@ -424,6 +424,7 @@ func go_core_dispatch(methodID C.int, ctx unsafe.Pointer, s1, s2, s3 *C.char, i1 case 23: // CORE_SUBSCRIBE _ = n2 + // Events API not wired for external plugins (SetEventSubscriber not called) return 0 case 24: // CORE_UNSUBSCRIBE @@ -484,6 +485,83 @@ func go_core_dispatch(methodID C.int, ctx unsafe.Pointer, s1, s2, s3 *C.char, i1 *result = C.CString(string(b)) } return 0 + + case 32: // CORE_DOC_INSERT + if dm := s.DocMemory(); dm != nil { + var doc sdk.Doc + if err := json.Unmarshal([]byte(a1), &doc); err != nil { setErr(errorOut, err); return 1 } + if err := dm.Insert(&doc); err != nil { setErr(errorOut, err); return 1 } + } + return 0 + + case 33: // CORE_DOC_REMOVE + if dm := s.DocMemory(); dm != nil { + dm.Remove(a1) + } + return 0 + + case 34: // CORE_DOC_STATS + if dm := s.DocMemory(); dm != nil { + b, _ := json.Marshal(dm.Stats()) + *result = C.CString(string(b)) + } + return 0 + + case 35: // CORE_KNOWLEDGE_ADD + if kn := s.Knowledge(); kn != nil { + if err := kn.Add(a1, a2); err != nil { setErr(errorOut, err); return 1 } + } + return 0 + + case 36: // CORE_KNOWLEDGE_LIST + if kn := s.Knowledge(); kn != nil { + list, err := kn.List() + if err != nil { setErr(errorOut, err); return 1 } + b, _ := json.Marshal(list) + *result = C.CString(string(b)) + } + return 0 + + case 37: // CORE_LLM_CURRENT_SOURCE + if llm := s.LLM(); llm != nil { + b, _ := json.Marshal(llm.CurrentSource()) + *result = C.CString(string(b)) + } + return 0 + + case 38: // CORE_SOCIAL_GET_TRAIT + if social := s.Social(); social != nil { + val, ok := social.GetTrait(a1, a2) + b, _ := json.Marshal(map[string]interface{}{"value": val, "found": ok}) + *result = C.CString(string(b)) + } + return 0 + + case 39: // CORE_SOCIAL_GET_RELATIONS + if social := s.Social(); social != nil { + rels, err := social.GetRelations(a1) + if err != nil { setErr(errorOut, err); return 1 } + b, _ := json.Marshal(rels) + *result = C.CString(string(b)) + } + return 0 + + case 40: // CORE_SOCIAL_LIST_PERSONS + if social := s.Social(); social != nil { + persons, err := social.ListPersons() + if err != nil { setErr(errorOut, err); return 1 } + b, _ := json.Marshal(persons) + *result = C.CString(string(b)) + } + return 0 + + case 41: // CORE_TEXT_MEMORY_APPEND + if tm := s.TextMemory(); tm != nil { + var evt sdk.TextEvent + if err := json.Unmarshal([]byte(a1), &evt); err != nil { setErr(errorOut, err); return 1 } + if err := tm.Append(evt); err != nil { setErr(errorOut, err); return 1 } + } + return 0 } return 0 }