From 01ae761668eeb8feafd40e168e6d79acbef69610 Mon Sep 17 00:00:00 2001 From: array2d-gitter Date: Thu, 10 Sep 2026 11:26:03 +0800 Subject: [PATCH 1/2] =?UTF-8?q?byteseek:=20=E6=96=B0=E5=A2=9E=E8=AE=B0?= =?UTF-8?q?=E5=BF=86=E5=AD=90=E7=B3=BB=E7=BB=9F=E5=B9=B6=E6=8E=A5=E5=85=A5?= =?UTF-8?q?=20mainbrain=20=E5=8F=AC=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit memory.kv 提供 remember/recall(记忆活在 /byteseek/memory/ kvspace 子树, recall 按 query 与 key/value 互含子串筛选);mainbrain 循环在 llm·call 前先 召回相关记忆注入 prompt。附注释 #→// 修正与 llm/prompt/shell/selftest/Makefile 配套。 Co-Authored-By: Claude Opus 4.8 --- Makefile | 3 ++- lib/byteseek/llm.kv | 6 +++--- lib/byteseek/main.kv | 18 +++++++++++------ lib/byteseek/memory.kv | 44 ++++++++++++++++++++++++++++++++++++++++++ lib/byteseek/prompt.kv | 11 ++++++----- lib/byteseek/python.kv | 2 +- lib/byteseek/shell.kv | 4 ++-- tests/selftest.kv | 21 ++++++++++++-------- 8 files changed, 83 insertions(+), 26 deletions(-) create mode 100644 lib/byteseek/memory.kv diff --git a/Makefile b/Makefile index bbbda42..eb50c76 100644 --- a/Makefile +++ b/Makefile @@ -23,4 +23,5 @@ test: boot @out=$$(kvlang selftest·go 2>&1); echo "$$out"; \ echo "$$out" | grep -q "vet(good)= ok" && \ echo "$$out" | grep -q "SESSION: selftest-shell" && \ - echo "$$out" | grep -q "PY: 42" && echo "✅ selftest 通过" || { echo "❌ selftest 失败"; exit 1; } + echo "$$out" | grep -q "PY: 42" && \ + echo "$$out" | grep -q "MEM: theme" && echo "✅ selftest 通过" || { echo "❌ selftest 失败"; exit 1; } diff --git a/lib/byteseek/llm.kv b/lib/byteseek/llm.kv index 1ce4634..76650a6 100644 --- a/lib/byteseek/llm.kv +++ b/lib/byteseek/llm.kv @@ -1,6 +1,6 @@ -# lib llm —— 代码脑(kvlang 自举,替代 Rust llm.rs 的 codegen)。 -# llm·call(userinput) -> entry:调 LLM 生成 kv 程序,wrap 进 lib byteseek/session/, -# vet + layout 入库,返回入口名 byteseek/session/·init。 +// lib llm —— 代码脑(kvlang 自举,替代 Rust llm.rs 的 codegen)。 +// llm·call(userinput) -> entry:调 LLM 生成 kv 程序,wrap 进 lib byteseek/session/, +// vet + layout 入库,返回入口名 byteseek/session/·init。 lib llm { rwfunc call(userinput:[]char/utf32) -> (entry:[]char/utf32) { diff --git a/lib/byteseek/main.kv b/lib/byteseek/main.kv index 2473cd6..6c9006c 100644 --- a/lib/byteseek/main.kv +++ b/lib/byteseek/main.kv @@ -1,6 +1,6 @@ -# byteseek 主脑(全 kvlang,无自有 Rust)。config/语法速览/系统提示皆为 layout 期 init 种入, -# main 不再播种,只进 mainbrain 循环:input 等输入 → llm·call 生成 kv 程序(layout 入库)→ -# byteseek·run 执行它。输入 exit 退出。byteseek 不是可执行文件,用 `kvlang byteseek·main` 驱动。 +// byteseek 主脑(全 kvlang,无自有 Rust)。config/语法速览/系统提示皆为 layout 期 init 种入, +// main 不再播种,只进 mainbrain 循环:input 等输入 → 记忆召回 → llm·call 生成 kv 程序(layout 入库)→ +// byteseek·run 执行它。输入 exit 退出。byteseek 不是可执行文件,用 `kvlang byteseek·main` 驱动。 lib byteseek { rwfunc main() -> () { @@ -13,16 +13,22 @@ lib byteseek { input("byteseek> ") -> userinput string·cmp(userinput, "exit") -> q if (q == 0) { - running <- 0 + running = 0 } else { - llm·call(userinput) -> entry + byteseek/memory·recall(userinput) -> mem + if (mem == "") { + userinput -> prompt + } else { + userinput + "\n\n[相关记忆]\n" + mem -> prompt + } + llm·call(prompt) -> entry byteseek·run(entry) } } println("bye.") } - # byteseek·run(entry):在当前 vthread(同 vid)动态调用生成程序的入口 funckey,跑完回主循环。 + // byteseek·run(entry):在当前 vthread(同 vid)动态调用生成程序的入口 funckey,跑完回主循环。 rwfunc run(entry:[]char/utf32) -> () { if (entry == "") { return } string·find(entry, "error") -> iserr diff --git a/lib/byteseek/memory.kv b/lib/byteseek/memory.kv new file mode 100644 index 0000000..6943e1e --- /dev/null +++ b/lib/byteseek/memory.kv @@ -0,0 +1,44 @@ +// byteseek 记忆库(全 kvlang):记忆都活在 /byteseek/memory/ 的 kvspace 树里。 +// remember(key, value) —— 写一条记忆到 /byteseek/memory/。 +// recall(query) —— 记忆检查:扫描 /byteseek/memory/ 子树,自动滤出与 query 相关的关键树路径, +// 返回多行 "key = value",供 mainbrain 注入 LLM 上下文。 +// 匹配规则:query 与 key 互相包含,或 query 与 value 互相包含(子串匹配,大小写敏感)。 +lib byteseek { + lib memory { + rwfunc remember(key:[]char/utf32, value:[]char/utf32) -> () { + "/byteseek/memory/" + key -> path + kv·set(path, value) + } + + rwfunc recall(query:[]char/utf32) -> (ctx:[]char/utf32) { + "" -> ctx + kv·listlen("/byteseek/memory/") -> n + i = 0 + while (i < n) { + kv·listn("/byteseek/memory/", i) -> key + char/utf32(key) -> key + "/byteseek/memory/" + key -> path + kv·get(path) -> value + hit = 0 + string·find(query, key) -> a + if (a != -1) { hit = 1 } + string·find(key, query) -> b + if (b != -1) { hit = 1 } + if (value != "") { + string·find(value, query) -> c + if (c != -1) { hit = 1 } + string·find(query, value) -> d + if (d != -1) { hit = 1 } + } + if (hit == 1) { + if (ctx == "") { + key + " = " + value -> ctx + } else { + ctx + "\n" + key + " = " + value -> ctx + } + } + i + 1 -> i + } + } + } +} diff --git a/lib/byteseek/prompt.kv b/lib/byteseek/prompt.kv index 8d17fd0..4b6f16e 100644 --- a/lib/byteseek/prompt.kv +++ b/lib/byteseek/prompt.kv @@ -1,10 +1,10 @@ -# byteseek 代码脑的系统提示 —— 也是 KV 数据(活在 /byteseek/prompt/system,可寻址/持久/自改)。 -# 嵌套 lib prompt 的顶层写语句 → byteseek/prompt·init,KVLANG_LIB 引导时(layout 期)执行一次种入。 -# llm·call 把这段与 /lib/kvlang/kvlangbrief(语法速览)拼成 system prompt。 +// byteseek 代码脑的系统提示 —— 也是 KV 数据(活在 /byteseek/prompt/system,可寻址/持久/自改)。 +// 嵌套 lib prompt 的顶层写语句 → byteseek/prompt·init,KVLANG_LIB 引导时(layout 期)执行一次种入。 +// llm·call 把这段与 /lib/kvlang/kvlangbrief(语法速览)拼成 system prompt。 lib byteseek { lib prompt { - """你是 byteseek 的代码脑。你不是在回答问题,你在写代码:把用户的自然语言需求翻译成一段可运行的 kvlang 程序。 + r#"你是 byteseek 的代码脑。你不是在回答问题,你在写代码:把用户的自然语言需求翻译成一段可运行的 kvlang 程序。 严格按下面格式输出,只输出这一段,不要任何解释、markdown 围栏、问候语、前后缀: @@ -36,6 +36,7 @@ rwfunc main() -> () { - 执行 shell 命令:shell·run(命令字符串) -> 输出变量。 - 执行 python:python·run(代码字符串) -> 输出变量。 - 最终结果用 println(...) 打印。 -- 严格遵循下方《kvlang 语法速览》:乘用 ×、除用 ÷;数组用 [] 前缀;类型定宽(int64/float64,没有 int/float);写参累加前先显式置 0。""" -> /byteseek/prompt/system +- 如果需求后面附有 `[相关记忆]`(若干 `key = value` 行),这些是已沉淀在 kvspace 树里的记忆;优先利用其中与任务相关的事实或结论来生成代码。 +- 严格遵循下方《kvlang 语法速览》:乘用 ×、除用 ÷;数组用 [] 前缀;类型定宽(int64/float64,没有 int/float);写参累加前先显式置 0。"# -> /byteseek/prompt/system } } diff --git a/lib/byteseek/python.kv b/lib/byteseek/python.kv index d36163d..f593def 100644 --- a/lib/byteseek/python.kv +++ b/lib/byteseek/python.kv @@ -1,4 +1,4 @@ -# python·run(code) -> out:跑一段 python3 -c,返回 stdout(@ 句柄,读时兑现)。 +// python·run(code) -> out:跑一段 python3 -c,返回 stdout(@ 句柄,读时兑现)。 lib python { rwfunc run(code:[]char/utf32) -> (out:[]char/utf32) { diff --git a/lib/byteseek/shell.kv b/lib/byteseek/shell.kv index 687d515..8fd7e9d 100644 --- a/lib/byteseek/shell.kv +++ b/lib/byteseek/shell.kv @@ -1,5 +1,5 @@ -# shell·run(cmd) -> out:跑一段 bash,返回 stdout(@ 句柄,读时兑现)。 -# 绑定 out/err 写槽 → networld/proc·exec 管道捕获两流;就地打印工具头与两流后返回 stdout。 +// shell·run(cmd) -> out:跑一段 bash,返回 stdout(@ 句柄,读时兑现)。 +// 绑定 out/err 写槽 → networld/proc·exec 管道捕获两流;就地打印工具头与两流后返回 stdout。 lib shell { rwfunc run(cmd:[]char/utf32) -> (out:[]char/utf32) { diff --git a/tests/selftest.kv b/tests/selftest.kv index 4a957a3..72451b2 100644 --- a/tests/selftest.kv +++ b/tests/selftest.kv @@ -1,11 +1,12 @@ -# byteseek 自检(无网络、无 LLM):验证全 kvlang 主脑的执行链—— -# byteseek·run(entry) → vthread·call 在当前 vthread 动态执行生成程序; -# shell·run / python·run 经 networld/proc·exec 捕获子进程 stdout。 -# 先 boot byteseek 库(KVLANG_LIB=lib kvlang),再 layout 本文件,最后 run selftest·go。 -# 期望输出: -# vet(good)= ok -# SESSION: selftest-shell -# PY: 42 +// byteseek 自检(无网络、无 LLM):验证全 kvlang 主脑的执行链—— +// byteseek·run(entry) → vthread·call 在当前 vthread 动态执行生成程序; +// shell·run / python·run 经 networld/proc·exec 捕获子进程 stdout。 +// 先 boot byteseek 库(KVLANG_LIB=lib kvlang),再 layout 本文件,最后 run selftest·go。 +// 期望输出: +// vet(good)= ok +// SESSION: selftest-shell +// PY: 42 +// MEM: theme = byteseek 使用 kvlang 构建 lib byteseek { lib session { @@ -26,5 +27,9 @@ lib selftest { kvlanglayout·vet("rwfunc twice(a:int64) -> (b:int64) { a + a -> b }") -> v println("vet(good)=", v) byteseek·run("byteseek/session/demo·init") + byteseek/memory·remember("theme", "byteseek 使用 kvlang 构建") + byteseek/memory·remember("unrelated", "今天天气不错") + byteseek/memory·recall("kvlang") -> m + println("MEM:", m) } } From c88698c586be8c49470fe06b6f8a3070fd3403da Mon Sep 17 00:00:00 2001 From: array2d-gitter Date: Thu, 10 Sep 2026 11:32:39 +0800 Subject: [PATCH 2/2] =?UTF-8?q?ci:=20deps=20=E5=8D=87=20v0.2.15=EF=BC=88?= =?UTF-8?q?=E5=AF=B9=E9=BD=90=20kvlang=20master=EF=BC=8C=E8=A1=A5=E9=BD=90?= =?UTF-8?q?=20kvspace=20dispatch=20=E7=AC=A6=E5=8F=B7=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit v0.2.4 前端缺 kvspaceCpTree/GetPart/WriteInPlace 等符号,与 clone 的 kvlang master runtime 链接失败;升到当前发布链 v0.2.15,slotsboxmalloc 随 kvlang 升 v0.1.5。 Co-Authored-By: Claude Opus 4.8 --- deps.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/deps.json b/deps.json index 7170b00..bc75fe5 100644 --- a/deps.json +++ b/deps.json @@ -1,8 +1,8 @@ { - "kvlang": "v0.2.4", - "kvspace": "v0.2.4", - "kvspace-durable": "v0.2.4", - "kvspace-c": "v0.2.4", + "kvlang": "v0.2.15", + "kvspace": "v0.2.15", + "kvspace-durable": "v0.2.15", + "kvspace-c": "v0.2.15", "blockmalloc": "v0.1.4", - "slotsboxmalloc": "v0.1.4" + "slotsboxmalloc": "v0.1.5" }