Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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; }
10 changes: 5 additions & 5 deletions deps.json
Original file line number Diff line number Diff line change
@@ -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"
}
6 changes: 3 additions & 3 deletions lib/byteseek/llm.kv
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# lib llm —— 代码脑(kvlang 自举,替代 Rust llm.rs 的 codegen)。
# llm·call(userinput) -> entry:调 LLM 生成 kv 程序,wrap 进 lib byteseek/session/<name>,
# vet + layout 入库,返回入口名 byteseek/session/<name>·init。
// lib llm —— 代码脑(kvlang 自举,替代 Rust llm.rs 的 codegen)。
// llm·call(userinput) -> entry:调 LLM 生成 kv 程序,wrap 进 lib byteseek/session/<name>,
// vet + layout 入库,返回入口名 byteseek/session/<name>·init。

lib llm {
rwfunc call(userinput:[]char/utf32) -> (entry:[]char/utf32) {
Expand Down
18 changes: 12 additions & 6 deletions lib/byteseek/main.kv
Original file line number Diff line number Diff line change
@@ -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() -> () {
Expand All @@ -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
Expand Down
44 changes: 44 additions & 0 deletions lib/byteseek/memory.kv
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
// byteseek 记忆库(全 kvlang):记忆都活在 /byteseek/memory/<key> 的 kvspace 树里。
// remember(key, value) —— 写一条记忆到 /byteseek/memory/<key>。
// 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
}
}
}
}
11 changes: 6 additions & 5 deletions lib/byteseek/prompt.kv
Original file line number Diff line number Diff line change
@@ -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 围栏、问候语、前后缀:

Expand Down Expand Up @@ -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
}
}
2 changes: 1 addition & 1 deletion lib/byteseek/python.kv
Original file line number Diff line number Diff line change
@@ -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) {
Expand Down
4 changes: 2 additions & 2 deletions lib/byteseek/shell.kv
Original file line number Diff line number Diff line change
@@ -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) {
Expand Down
21 changes: 13 additions & 8 deletions tests/selftest.kv
Original file line number Diff line number Diff line change
@@ -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 {
Expand All @@ -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)
}
}
Loading